diff --git a/Framework/Moritio.php b/Framework/Moritio.php index c1b5bf8f..53546bbe 100755 --- a/Framework/Moritio.php +++ b/Framework/Moritio.php @@ -1,109 +1,108 @@ -ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199); ?> -HR+cPw1JSvnylaVKUUJclw+0lUy1fQKEdSKT4TicUtk0tJ2tf1vNNyqQWlurLRkHCbmQJnS6ZO7W -VzCEBEJhfa7o8ThuDQAUyzCqEG/BduwX3I18Njascg/ARwMULdTZA/MZBy5SFkfC2K+oQO0u1gsp -YP6IjbzdJaizX5iqOV1jlNW2G8gF1zfPB+/Bz4iftHDWc3TcNkrrkJczcSoVRagdkcYT9+KO/7mC -isqDXGEA56xI9gkQpgDYK6Cvn+Tr/uqzKZ4f04rJXnNfGpdSfS9wUQ/NdsLYGcV+eNX5M2e2PlBo -UazhU0ixuR1LIJPr5HmjkDSYM/ETEkYk0DzM0UfYzLlaN7l/n5lT16+552cZTx/KtlTOlhb6HXBH -9zof9f1/w8IBH2KolDdMIy5b/SExSoDV4XYYZTZKvp9q2MSaHxET8q250zlqpq40d4ZhFQJhm5YI -FUZEE4Q58cPCcdhBGZLoIOIvLWHCqNRIed+9RAep1tXBtajeshvLABrYJMhrvzuifyizxhhNwqnV -KkgBOQ54LKRgHDXCfNX+f2DrGhPcYAdphkdZcePz64E6sh5msY9qgvfuryZEvuhpnk+unR6g1Tzx -78dG0wiOL1xZA52mINHVghkb8r8saU5A1g1c5iWCf44j93VY4jRI6aSgP/+QxSBLyQLz5Kkgj8DA -zXjE1fa5yNYDKLxfJfE+Gt6yjbttKStGYo9ngN+c45+rTd86h6/TwOWUNr5I2fDrWXvzZWOTnYrY -tmnIvMosjnXBl6wOfglTKQDPESnZhlZR6iXydE3ssCPLzo8SI+WJcIX/DOnsFodMVDAUcQrM6E8d -QCp7Bwx3vKOPrWGjxuXWrheYqvXmtNHkB5Q7tZxoFGdoKaLBDus/1I5VAGqiB2bBoPWU/liQfEId -YCaXXMr2rD/LsAVnq/Q/+tBvk5tuQkjtRAVn4XTq62yF0kzsrlP+mb99J48CViH5Dw2W+rZ1LZhF -olC/nFWNSATCAx7IVUy+Ld0ED612JesjQlCxcwZWkzTz7jPIghNAf9OHoFNfZDVVVjxN0nfwJKuh -xLlT+431BVT12HrRDUjZKhHyA4Ka+cxJQaGelc35pehsCRL1zNeRTEiSuWyDdb5Ag3f8Q0BgQRE/ -jFwapuw/+rmCRUo6uSHSRgC6oe2IWyGz9YIBoPmIYYh8wgsYQxI1/Wa2UHjz+WR7doTLe2eJ5KbF -vduA4PbG3dF/KV+zd23eJ4V2GEwA78U4peRZ1GQgoumuerOi0dEuISQ+PMhP7JrJkp/M9GlZK/8s -DSt0Xodom8x17txvvc7dTSsZXuO/wbnydq2AQILvEuQZ9eyOm46Wv9AxEdip1o8OmbtdslqIgn9m -1j25LLRn7IzdH184Dc4WWeelOeFZxJ2XaUANPvqRubBuVxgj7bmu7BrtXsnKPmPB1tyFfHviK4Qn -c73YoGaDToUWOgGBXdUP0BWat1rSjCFcb4ddHSfTUQ6hJSFsqFi8ryw4qgSkb279TRh5kB/yRNdC -yKooZ/aCW+aY9eA9h2WokJ8UghxQOsZPeGUHaMqULaw103gnbsWZM49rrsIMKLV6/S0sxgNYXSu2 -xx4L26B0nG+2HIGdK6BIpKGKes05XsX1Gjthc2uO8tZj+gWz7QYwnTqFSMfeQvpZSwU6mzkMbjTL -g87BoT4FAE3nbFZoTJRUaparKhm+5G5ETIgqCwrwVUpphtkKN0Cvp94OblMYG+oddNE95Z8pkLBU -uN0qO6XMtdGCfYgLK7GGoKBc9tgA/rbRZlFo5l95OvJFRIwGQkoMkVtzp4Q694hyKz366DpeM9rF -dWp5+wEMm1FG+O9axXME5wG41UypSW+8ZQ5ZbEZdbUmG6SA+i4kat+8Uxnts0ZTo1KTFYggDfe7m -oNqNaaZBkfl1i5jxuGZ+HC/9e3Q/K4kKoa3mGj8nhpASWsi1TM0xmKuEYM7CRYhWNN6PLsoMiwpD -GWx4PJ+qLAHvc58Rk8/uceDbm0wKBJ3mBFPlc+uOp2Sawax7TdHCWj9nPduPeBL+Rn3eDswmSHFi -k4uOeqGeNtvR8Ek+Trmd5hXIwPWe0RlFxkdzw0gcHIbROBa5H/bRQzgUsW2QEqEloZBD9LQ9xiJ3 -ZCPepv4M8iQ3LHLn6CH5m0ffTf5krUVi8KwOkhZGLYtXdi0gxc22PiNIjuR2Y5audOlBggBqUDE0 -fmrJlaK81O/hY6aXt5Kx2Bk8fcpDKKYomv7/ETKTbbtOS192JsViTCYl1yst7CenNyzk+mMFFQUw -IIfJaUF5BBiWn7i4VcBQ/kRKWhP4ovLLTo3mmruunMlK2Wt3BIs9fR7RQAfZQkPZHQMJ9BfzE5UC -zV/lYHZrajbrgwxIuagOWCJSS+004y/YZuwSSm+r5VLTjLEO8IS1LNs430bgW9mXM3PawmDYN6Pj -fF3c/cn0P0SRwxnVVQUFKijkCOeeOF7g/G9kV1s3s98eLlFusjtFKwO4auKBiD6frCS3vRXRXXH9 -VtNClaCGlzWC47UKwLuJdyEXiklR5Qt6z1y9ucB0/I0rTnPEU99CG5Gde7j921KRD6kMtdB6qL/h -LhfedQGoC0NTYugdxnYFELzrsp5cT8wq8O/YWRMEUITMZrWBX1DxJTZrDN0hSCO33Q0wS2rY09Be -T3lvZDxmsb8MJMpIbTC+U1qrG0vNLCDCTl7oK7qo4ubAKKARBq0YBxi+K6pzbbpAtwBXWiWmfZJ9 -7EmofrG1lPJwD079jm6LNjK== -HR+cP+gZaaRBYcTfaXW7PVyrWPYElrdGAzAuBPMuI5Gh6UBFfsJk5CdIkSqTjAR+gLmJMB0d6D8a -qD6nzDN/gFnvGyAux52tImbZH4Obu3b/NKnhKGatP957z4Nxg88HSD29jQolgJKVIcOm7acekpz4 -yl3JAvcu1Sf8ZU2E9rDvXG3J5UAtyFgalnWlBPgU1jT4e/ssZSl2o2J/iVyH3QjJCxbL6Sh7sBvk -vVoXhB55LY+H/BXbAuVI5tdaouEs2EIcQx1c7sMuboCEQALN9O3y/00lvqrj3WuA8bzKIPt1zXG1 -7onn/qs4VZPlVVKPnh2ePcjHOeKKHjmk9suhiOgmRiz3znOj+S+H0mCX6upNRF/33Ir3h8PfZF68 -Bf2ECoRyJTVvZg62a4HlsEWo9XOW5ql44agwjBDWjz7L3xptAiF80vwO6dVC/mwZVa7hu6DBN7Da -mdQPOrITfeATxcsjfITDbkaAmeUA0m/4olFlMU+SR1Im8nB5lTl0a0IHI9aF2rALNb5wRdIorrfD -3s9bU6AmDeha77ekH5VYCE9+2oLk/qxVVpHqD7E9Rpj3WDZep61q9AfwqyOq94ErEr9z6ipyDg3F -7Y6jXLqKH0NUEQOxRAXUCiMODWQpvv3uD4KTFJvLUN75s0I8Yo7yKIRbL9Z0fuC+u67RqT2SczSP -jYnbX5vTAm7y7vNSp4stTgX20PFQKz9sGrrEWaajLCsnSuJSlPHyGW0XPhBOjnXYqhPYB4M7QO90 -kTKfv15WGwCPndINMgNlxdoC5VyWkrBq+X6NCaE8xPE6nNDcsNFFRyA9emT1h+g7/W/qSaGN0/We -clg1oFKaUCCOoSvrNbTAWeBwB6cpL1jQkroWvTKYL/sDdO4uBw7UcDGq68VTtTgISXjg7TMNGkh4 -FkEHD3CC3dwurf1M908fIVvBa/mhB5CTm4vL+WW5iWMD8h1JSbedPImINuU1ZHNIqCwIo5JpSWNb -/SVXrXiE7d1+E79mEshuNGhToUMr4ZPOVp6J6SQwW0Jojvl7cdPWIjvpaz6Y/gpiqM5rhCo6HFLP -RzO0irL65PhPJyQrwQAvVQuPB0QxtvYTFNxUAjgmiAJNWd2ji8KJ125lb9lpoh0R6PyrxAaDo/pf -TmeeCTUyjiIls0+OIacCjnabJkTr5nIQWPZrc1yqMNKb1X4nuWtRtuna679qa8ifioa9dqZudvDZ -rd8CRVI15BszDIWNqJbnSsx3G1+DRwy7eb5kZJDaGhQVQlXsZGD2pAW5lp7BVJFCyGj2aMlxv6w3 -y6Vl1JSrxDZIIoLnpnAxctzsiNMOddrXBm0+zuVnI3T3HlxTMvkNcYTmshewRxFlrVdbuoYsvJcU -tF18UcdZ6UnxRpjBe40bd7W/Pm+60GvMZLp8ZAThd31f7zcLnbjPEDWw0KXPRZ9H7h0oqzWinHf5 -3rS6ZrZmYL7gOZZZJCcuMXXD4Wg7q3AfZ/cT1R0D6bdGMTMBAiRL50EwgNzLMNo53IECuq5quTsb -7EiU61wPJLH6SqMBfgQElWoYC9CdgClIrIUBHqOjkk2x0RN9ODDUMoalbm1azsWr+EQrzJlZriAI -rcFkM+oiCUwvejOVtTTa5+ECjDaP5A77pUnOHZiEfioBa6WL9AflJHl6w83Xb0FMIXAu+08D2tn0 -/tyk1AjTzHkYOBXtgD3d/eeN2BzoJvs9bgPRVQjDK6qYE/rzj1CWcAUeebHvp3rJzFC/vLpYd+T/ -N5Cq6zpItRNNX4QijYKgNHsoWrCwobOAo7mJJ9EeaortaLFtR7xfVbqS2+zwxNXzY2VgiKgHIysN -U5cIYgZKUkSXxrhmT4DSbMkxkQ7pypCiNOt31w5zeNJNLagZlmj7vJavf5wemj0pVbGFonix9r0L -J43uDyqswXmqZB8vdOcgQfJtT3XSZD9Ew6nFrtQl/PrwK2lpw6V2xeX48pwDm8IumbLwJ2B5WlWQ -viIrQfBWoA75fRtwKAX9CKS4hVJCWMhWTWJIWtFUPsC1sR9yjd/dW+zlN9K2OjafRqQZ6ENK1BdD -bzO8QWxqYWxGbjVnthdzHkrenhGwmAgd36edJ2ZDBw4mIycrr6+5tKcQ8KOAgy/1LSFdi75r6Lgh -XZepHYDryCUy889OmL9msAnzLlkIBU31+6qfzLF0DVmR5sXcgCHiElDx7EloCEVQykvLTFfM4wOW -9VCtWJLdB6fufYXAlh4qlb8vH+ZQk3cL+hjBwEFHl+4uQt3nYR9qHLSrruQGNLkKw1MPceOZu1Ms -0D/jXn0P6lie/W+6P+5ZFSbJA1/qpnSvlzuL35MzsLLZhdt8pQc5jxUoSCzM2PZd+aVP2Iwaloqp -WGgAeINWFUujBUJRFp+p8kFt7G/Nj6X8Rd+GgxFri4ASfDPHYKNnSFSCCI2obHDT2hsTSIPs1P95 -WqO4xQvzL1Eu644BN01qrZf1BSvR8tIGxfsc9bmCQ9Ps1b5iRQ9e52n45nlIJvBVcUG+VP68Xxwx -baTznRvFbHdS2/l0hzgjVjdGQwzxYCC/+YL1j2GhlPdqyWkw4E3Gfab8uGq== -HR+cPspw/Q1fNSQNT45eWwwkE36fAQa1ZDijU+HC3joXAaa6W7WvP5ss+jilf6o9KC2idAv/bCQT -UWg4PObSPTaShnOduDhKrFaF2PhYOIuCW0rWD5iV1bmv4zNYAD7g+WLKeLtSOxDxu8HhP/xULzwU -VqISrf4zUhSSxJ9XfYR5JLYe8UO4MCa5Q+UUA8YkXL0W1bFytuiEg66egz8aUOtKvC5hjMhQe8Zr -b1uYGF9ogwcVLyqImjQlpzDKCatJqUZ9jzFv2NX2AQK/K7Wmo1JxSn73iXFbQbsLPWkDssvzSqpb -oRlBFNoOErDda9lCzCNBTWxgzEw8ve6r30s8nIdmL/f0WXl/VbkBNPUU8gUmNE0+Ao7ezmTOnW41 -Jl2U8GMsHSLpvgAKwJ34q5eMJ187aYHDBUSUMmsGolB8h2jPL8rK3ycPm4CjM0vumMLFNfPZQ8bC -fWCqYtwkyyKc6NxtjFwfdKyIWd8kt/W6srDKR5U1fYYbzBwrM8JKSG1+4b9QILO7VKKVsIUcNABG -r16j30JPekvZ08RZTVX874KuuZNSPzEzXcpDC2xymBbFpeUlDVSIdWdRhBq7wIzJ+d8a1Ko+1Yf1 -yiXmzUMTIWVtkgsGJMh8c96zMyszH/sJ9dJzu2HdMDkh/Dq+RYdNpq9b/+wxtSYvwqieIaPBGDzv -UiSWlr6PrCv/oW5uNciH/CQnRBWjXFgGqRz/uviStjaKaocejDcGORrDgLS5Q52/mxoHZ1eOMkPF -H8XRyN4JjZHEAXl4ZWw5ArTHLYdqBFzQXfm5ngaZx30tdg0NOBEg4e/4oWgwzIh8BhonB+LelI4i -a9HI+qvuWRIEyWLhvPpfiDrhlGCOtSJgcxPGPRXtdv9/9OIDyfIMgrAM92wLU3KLAUicPUvaZ+LJ -el98TvoHjECEmiDP8SlTDhA80PTcUY+9v6ObCFGYdX/t1Lvys5XskeOJOtq84vwbQa6IJc9Yei04 -UEu/89YO+CpeR3ZlPq84A4DqIu9uVqdm4zPpe029DrTyLUNV1X7142QfRLRwkJKSdO3wPZ7pGAOt -Hp/9QknSOYfHVUl5Ce0A+GcXxk2cg9JywPMGiHWvJrA8t9thdA/7dxHWfTixXGVLZnL6lvBUuCTx -CjKTQROffixliM9nHL5XEYLLfu9gCeJW9MmPagqHYmKC6gFIAVaN17kSaVvxIdn6FzvTwVHSKQxF -rMx/K8rGE5Mu5kKOxW0mFTWAAHNekTv8A9PNd6POF+apNFiqXMQNNq/BlliNkrrfTehLjycQlJfH -Xp+qPI5OfpKbbzPvD2YO+hI07tczs8+8cE4S5S6LBT0xkakHOO3X9mfebp5aSlTc/fWZTHfXyc6l -hf1nx0jFLw6QCHpop2X7Uhi64i0Uw9NWUkIc1XC26ZrmY/rtjr5QCwM9IYyoszi/M4hqXudXW1Ya -gXfNA5JWSa/B+yreRueZeDSm3d1qJIBWkikP5P8wOWEUVJ/g/GXGkWVI1Qlhv3x1WIGxrKIbl0ob -iKk8wzuUKv0fXdu395AvIkhzA5PgzIQSMKv4VEuabjNR+yDlTJ5AgaMy4kYCa/lQ8vypavTE7qPT -M/NJ0WIsPNZufoZENsKszHlZIVm2UB/0hNcbMeCVBM+N0HfxGiXk+fJvrCn5YgrUFvvmh8D9e4u7 -gcXrp9izGT5ibdE4KyxGOpf6AwqvRjHw4V1+/ybnNBiCCXpUR0n1amI9v9W7bRAMZph+RWUNCNoM -zJJBqDNgn+6RiDzBD4WcE5hPwWBvHBQF44qWrAaOmcHYx2Y/dFrtZnMPNIJo8lq2CIfRtbuFt+8p -WyyTY6i+1IBrU9GHzRl7kE6fIVpmRhgR2s+KZaxf5td8r567EXkbKF72Mt/qLJDBbxxDh80UE2CF -cUhd6a+t+iykP4L0TTZbAZGnY9rq9rLbWN9sh0+tcMLeabrf5CGFbnAV6gBFXQSD2FJAqHm/rL3V -0eId7i9Ntx5JQ+hmwu7XYbnS/11dERUGhch7y6queVI9qYIanw/+TJWItoqIpS5UeoNnQ9DHHp3J -nXTp3+7BtuawNpLXxo/ERkIN6y7e+1XxODDb788N8ACwIVIsDE+vV1mDs/+TGyEIdOM3jVU2n3l1 -yw3j8bMfiNvnkBOJIMuCbDbZ+ct+pAozch8VA30L+GRaSmYA+7JUFUaTajL1n3wVT43fl1p6rzD5 -4DjhjmOxvChPQeAjHHTo6k9UeTGuzJkLZ+MgkUtQwTmojwWbf7sIsE0chOMQUQIgj1vpvH4htCDj -ysA7sW9TLFNhtrIUDbRSm+83cmDpLcmql73C1kS2U6SGUNSf/MBZRv31FokLRxRBo6S0Gs6ErT0z -j+0J7OxxxsFcU3izNxTEeBfPoBQjZecdhf5XtVYpKfcjekjMAxy3qHDmtCpsNFJLbfOgn7/yU4hM -TzjYrLrvowo8nTuNyCRkk8MHFcFazWcTdoB3E5LU+oUB9nDluQhYljWXqEXOZDlnN2dnLX54LEWK -HyQWTAZNKBToO9KQNRroTsuYOFK1TzW0+h0BTre8kgT8i3vF9im+A9tnjchY1Jfj7HLfySYhy3EY -Pt4sGQpWoc1eVFDOx/oYRMLLR0== \ No newline at end of file +HR+cP+w32SiuQVBinJMSwD5Imsqcv/uZ5BkXoi83cUb5ihGv5qHw1vu6xUUJh6cU1NPtBvZ7lrMX +0WqakMWtz6+47WyLxI4vnl7zEyAAwIOGp80i4VvY67ZXQ/qVg44o0AJa6i8eJu5idXK3nOyDHjEe +nR95xjq/YmG5CNonjg/JLbPubwpL1lQ1hEX65/I7aNgfEU5JO1TzPMWv1s5qeOtlpMR4i6gxAhJb +Tb4UBGmHJcEELGLJQgBpkGmCVtKUSbV83vL/7zc4VXWt58d3cJrlhSiEZG1ZOvhInXMsqzmqLtTA +C6xuQq8/7RjhBOwypotJhCjCtBRDScWNkPMm3H1FA2zzNTu2rWSiBcGT5RT5wmDF6nXKkAusItV3 +CX+7SvY2VdTN50VvLfMB35SUm8UmsR/0DSimtfOnl9IiH9wMl1LeowaB0bR4U7UGbzq+dPgaomr/ +QBnNVL6FLTnhcdi7d9CV5Zhgzs0wbQPtQYZ8QFVGw1x6JS9a2piR4jJWi95CPtuP8is7OaoLZSew +HoM8agKozgLNiXdzJnllTXOrGToytuCxi6obLYivrXc44Epa574LNSK78lqPBoIcLd/LG/IaKB0k +lmRsNKu7G0qS59WTsT09IsOz3HUyG7KRELxQCP3QU20MM4pqdq1O//gNFKP5XElDBS4BcwIGgMYO +ZhZPyNxJAzYDML+DqcPAOnXi7gEw0s5oRTbyZg+Yx96fc6Hkk7a5oz0mNdKBayleRN2ElYj8lzKf +lGUaxdOc2fO4mlZdMu2NTeRtDf7Ve8nbmZsQHbv3ICEGOykUyqn2Yo18HP97nix/pd6jkdZbhQov +xonwLH0kSWKWq38GWN+NJG1oEiaY4OXmR+2enpInLpUk9DAPlAu3pvHGvWNcv4IFQfaCj12+qMxa +vwx4LbViaE17cXd468G1R1Pn95XT0WjHAms0DeGeAR3+Cves2WB55k3IxFq/XswKZGJxhEXpaQRR +Z1ok+cf5bM6dHW//xLEz6I9/SyLlTwq31IaRy14h/4SPMuPqrEF74CJmlZIT67tHPHgImzjKNyrf +ZrONix+4WAY4yrKj9LHmLWEL+RonqqPtl97YJrF16rztyirgfkBLyr3+6bClubCr32A5BCxiQQvt +Gr1C3q2UM6LLQepsbwKIacg1NEO8QyHhLsoycOe0fVCn9qU5XTcPZPOMeMp9hNqIhQVIJT4rWekR +4IZH1Ssp9NRcUj+gYDRga7TB+8WL2gyzxiHj6+O/7c6O+644yv3h5nlzYMebLZswx2eXI5vWjlCM +04rsIQy3ou5jdIaF/16av8k+fnxSrmjY4PvJMSSCaVOe8Mf6iRUb4Vy+MOycwXQdFbifZCEZjMcc +reGf85M8LVAiDy6P+GETyU795tYWciV5jlZr3SFMrCil2bpVQ6ZpvGjH+rnRN/nIRW+Uz1Xid36r +CkrP3xzVGea8H9vf/vaa+/oT99uKT7ZhGSECl0c+TtGo/Q0P/mrtfdXREgcEXTFuW/QjEIgrzdjy +r+WobShR42D9usctJNgV0K5LIUguP8g8EjjJdjI2c4umPLByExTGIUnrrIodHB/sJxm6nk7H6sVZ +ziqKEkZoqg2+0p4hopB6iqq2rJBEzOpzw4Ob96ti5+lsISWLMMYtGvW8EoPlSbOpNYKueS1Lf68g +1lBmdl+J1urOSWHqQSuT3RsFYgxiPlND7+iTGCUY5FWDBm+F1fDpWYZZdXz0gKdHOjVo+eQcvyUs +jdym0ebCS1404u/HX+Y8A3cCAYRQwnSjz3XTbYZXvdGlNu1uTgaDTvE5xe1zq1viui080tyNwgcm +CftAVfJbFpwuPULhjnwAy63W3K8Fl4ZHe4cC/FjeRnInjYhsRGQUb4PMti9i5+rm1gP8k6flXXid +JxD8ZIOa7knqR1WTkf/AD5QEf4MiCg2rZ2oAhs5fCXnQG7CgytrnnFNnoUs3oqMA2LuNNWF0lFkp +VWE/lVLvlvkNEZ/6bMr5yoXLRDFBhwtvd2Kti1bUYbGJwxYtgGF9I6ceiH1A2mZ/wpjBCg+mgsON +OYzF81vI9HrPQuXV7XK1FllAKRFd+xx/lqHQw1aD6U24eCblscKdyoKbfEQLaaC1f1pw5+6xQGRm +2HJo/xuHkDlpU6GVlwYtV0zV7IZpm1O4NKtCvUU54i7Z92odcgwxdvWTTilrJ5Te5CPCS7+1uvuB +p8pNfHgNMCqnAkZWsFy4kN+j1dmHReomwq/ZR7XgXFiciBM1XFvXjCyE1RZtXUq0x6jjetzj/8n6 +Zizpsl62M7xv9RuC4JQYmilgoY+KOCPEl9JuC+yTX9EOR9VWYpH119r8jHpdWL1r4g4AO1uRdxbR +WijZJmf/UTYfMHqr0RlOcP+E4G9ZCv51TJ7kOK0v7E7e65d0Y6XAZiXrJ0egygNaYCXxMYd5mZQe +CuVQn+sROZl1QIrluCwaCUXobO95261k00ViVWOOXKDal0+kozjlERwGBnoJrRPyUfM2Lq0smK6a +BGEzV4g2lqE/WkmJdHOjdKh0fCLZAOrk438OLNKsmcypJkJCLlzoSmHxaciAWqlR2KNZ62CExMV3 +kDHYBK6xajfsRSI+p81DZlLgAJGtfYLbhQIKBMegwFdVbgNE+OMVe+T+goDszCUbvOyDD+ePX+qQ +Mz0KAu6C48h8MEIkea/id/26EjalXlViBY60tMbJ+vhqax8Qu/4/UYLepjflv9ypJsL6ft1uTlK== +HR+cPt8nRjPn15CQ38hxzNpFBJMs5GVWB9dNm9wum0ugtep/edgC872X+fehq++sxm8iLxYXWYLY +iOklAib4HrZDOoadJgUr+0iuFWccvjAyuxEqGE2h0IIapTu7xto+1PKEba44fFC0LTdTBfj9VdQ2 ++PNnWVmKNunw86eQ+Kj2fKhzcJteuIFg2KQKYJIIqrL8E3RTWv1lFVcR67vnaTQTUH3OV/+mVv+7 ++R97GrChR/t//qMY+srw+PyfCU15RW8iOF6SS0kzRNn7MVmEzkwxoJTyCVXgSueS+zP2xbadHqoW +LYnH//IGyRavdBHqUnQ44a9ifU3ETPpMXq+g+B3UrbDjXd11ZFMxqel+cflYr8CJPsQK7EWvBsMM +cvzCvB5dg+P7EnZYjt6YYqUzSdPS7ZKwonaEFz2Zi1U+tIb7QWRmBLB1k264B+0HqiPV2Pcpcum9 +d8eYf4k3zdigkTFzo5+j7Ic5FcUeD35sX8WGe9PCbzAuM1KLi4vGEml4fG/NCXYXn78IuSwJZYEp +Dxhxr/GdMrKr7pXpJsYrhHcfAKu5DOeMKV6RdcoSJVF6XMxBoLR8+sN9Aaf+jRbqGMbYsu/h5SjG +v1imULfsyMjMkQ7ZQVpWY3KXT4HIfQHCLpbAacjih3h/OwX2sE6z/MbORKuizPmCRT2rcNMRBeTb +xHoWMNg+pBqAEvYRmCTZdjE8RWNY73cZLt0wztGXGp5DEVWLbTXu/LmlkZt1eOwiIj1/1rJm6PPB +pHJ85QqAoLSnH5b66b3WuwhccN2xZ6YleJYSuNZc+KP60EF0WkCD7S+OKuShqVsctdEZ63r7kEwb +3vkPRdSsYKDaEwi763KAylDwW8iSIPtgpyzGK1CkARZBhIW1K/4aNq6TXvuM01GVJqtwtFmHJvRY +geb/VFy4mD+cfGeQ//Nsps23DrVsFLsg9PJhB3rM/JGTpxXvSsEWYXxbJ3jF6B+3NVfmmb1BpZDX +eUEK3nrDk3/2LP63eYdUaPBT8pCZgEmhwFaSzD8QTFzWu8/aUnqgPCPPYA/O+9Ec1VuLBPNrw3JM +cM8GydSvl5bmZvlbRyE9LM9xnvrkZsXq/sQAsYn0DOG8kORrktcatkSf03UsZTs+v1BGYFy4YXfv +EqFsXriiq/C1cUAuSnN0LH/cKzyLCn3iyh9ZlIudDHAY9ZYdRXyl3bFcPpI/Q5bqI/BQTe/PWKAG +unNghD31dZyl9axAauGg1+RAH0/VPsRfOaBu9gwtqmbjct67DDj6ym5EGxhg0x9KmDG4q1OZ/Ory +JIBuc7jH1o1zivcfJH1LkIfdc4xEfSerzGwuEVgc/NYQMYLDuLCWT8bO5+E51+xfbOTHaOQzPO0s +Z0d79jH9lkq0HhEnAedk1v0SJe3nAdV8TNzgfdHaLAI67S62WagupDjRdj2DRPJF3D05wyxwWJb0 +ABPRTuF0WX1ksD6++b4WBYNbMenFT1MkM2mUiHAlvilGGjg93qwz2l3EWCj8XT7DGeUtvu/2y/6V +c8dE6t9ilNeePfc1yRq3X4EAUf6H1QPg2Wr4NP8DzxHEApEFhzsc5iyTk8Yzbh/JANYaGVVMadyv +gZ0G22YA/6U898JWcbIs3+qGC4LWYs1eDxwTo9Acvf8N/wwLphCnoDxa1HVh53sBQZzliWKGprwi +cz+nQGUpUwE8Q3y4j2gVd6etHLDPivBmQ6HORSwbJteOTio5cCCP05Xe3eHLafmhyU0quktKQr5T +0t3LevroURIwlrmxlgZSjOgWJt2gBosUbjC7IPD/QMNt8ZVQqloPUbbXtr0NIBxHJBHniq0rIWVC +hUgA3zG+qBr6O1igeZGVqtuBeJs/nZqmjXR82bvzmieHwXU3zaWMLPSKr+d2iOJH+g1VvlZF2WrY +VtGYDd2BIhVJzSMIUbkSmLE9ZvSNLdBrzJE5l7/7aekP5/UUP54OnuLA2SJOhEEu8ZWfFJZaIx0k +RIzfyKOPMiPbz/kQ4nbthefOtuWlkjXObuLj4KSf7KaCbIhbwftaW/CbVkr4pxkzgx7pNl+XOSOQ +q4/em4ba6aF0so6rUHrie10M6CGiZB4mjQoADvtDHaFS8jJ/zOCfmoLMMzlhxeB9WiGBBaE1UK6h +fRbF1tXGOIb8wajGZwP2u2CRpOp6wlBahhP6Hn3XOx9SpIvyhLeWTyFodUIWEj4+tWqc2cgzKuUD +gpVNYgVbLMve2F6gBvpW7HosYRE27TlL1yghvTVHvt317IFVB7pmi7bWZUr5Lv/tMfrakUf9ziKF +j3xz8jZStGw/HtXPlQLyUexAn4YvCR00G08U9emKTPPiyreXLLqu8ZGA4Bk9O261XmGUEITIdLRd +uG9BazWh+KxdlO2bI3Oz0nq3tBVgSmSTUiaemoam2YcHB68Jyw0LiHMSJV3Kn2lOP5JgOtMTmm7o +2xDLaIqN0Mc70NHIKw+Z089E0ZUpYy6qHQYtvhnnkln4wnLiahf9gpfBAS/Y1Kr9tmwydIAJevFy +FJUBrPwHGYVymHLtdm2fZ7N/PdF1DGkE7Syhdido7IGKgVT2Ohu== +HR+cPpwW3lw0TlFnNHkRtQI+XxMo4klIS+/r+O+ucM05DY09jDnhaqRvu20ZwTDJfmhvyFPD8IWN +JKz3Mm74XB3VEq9qFcMU9jqZI+nC1xCL04KOS5bB2a17u+K/A4w7DSEPrxPMNK4njh822C81+3XD +78TdEYCbICAtUhUYgkk19i+g5PTLDBQUNkPF5uTmd8bgJWBQAiCMgcsMAcXyObpqKLf7D+fgqkw6 +GMWZOA8HRKDGfNv6SN/meVdDWx9u4zFONEiq0z89faCnkPs12JWNqG/1lh5Y/9zA8vU69GIOK7sd +7YnecXodkbwfNQjaHEZioR6pxPcFGc6r12WFT4MUEJKxeT5i+/INMa2mlwGj7tKz44ffRXITucYy +bsCWwrDIktN6OnXMqcvL0NNdK2fAlVapxpckofyvyB25fky61ErYSAycm9kJ1loH8vCWlV8aQk47 +afmjznhdo0dgCNT71mg8M797TH6fq+vFdylSkB+ZSc02gBlPNEZgOh0gMbU8Tonar47ElcJXofiK +p90PSzCsuSsIAxTvKKg+EZ3gp9eKib54EFnaeqMuBocSL4QUl0OXrB7cBJ0EQhZYltFPnXIibnEV +BiBwJJJgTL3Wl9kp2OQbB6LPiysCJviL9i8WkylqGotKL4Ok2tlbXLbVslPZjb7NsR9KHbQtH6pl +Wbybj5/z3E9Ni+RcHZYoxe105t63C39m8eRX6KIdT6BiUzcj5GFFC7zubPDQsUf1Kr2LAAmXmHhk +3zIMz6pg8R7uy80Cs0jhSTZ/jhkt/gaktKqPZskHT3VGlu6/Hhfz2fcl9uiPXleKQQxFwRHqgV09 +yxhifmjZEVGWGFY3knAw+FUKx5hpNBgKdFw/wvu8jBgGmQfai0V5FNCbHGz9Yo85lpfd4EXH1OAL +AAQNrt1pbhtX0ltCKzgBN48U0jLQ0j6YNvhUhj8GKdkAO/7T9ZqE7GeYzhoMvGSPEP8vWqmZIlEc +DPQuRFrv6h7FijQkFZHd1CUU9VVIVSB9/Ee94WUDGXeO4LApBcYd5GQpV5DppWKuNZThYAx9WlzE +TAxeSQ93SnFSdfzPJRzBegbZBDpXYAuncDCr2qq4SosqytXjR3NUFMfwaoOFAeQS+d3SopsGfXMN +SmNF1GJG0r0ADRY1t3GLYvfPd0B38gTe2LP44+R6CWe1cKrKV2CIiXwLJyX0aEb2t9IBXpS0vxNw +c5C/jdq/eZ4VYOqE+WPg7LsWe9ZufEBJiu5ATNP+KhKw+FLQG2iweOD+jEOIsGNXTCAgVoOTxMTR +ZIhHJx5iB/t4bhLJB1CabiALG7XTl6xvEfqjdaPSEzk0C8GayltpvkggCtji0fuX/n9vaETsCG6j +ZE0FMjtHHBr0m6WXM4EhdjJaujW2SqCrPOYYVS0NcFc+/OV4ifpTeLAyvZGRV46MwNtciCOsDxkY +KCZ7B1mNAkA/96PkrPozaKlSonjIKS9xoHzx98mjaTiK3Uw0H+Kv56U71f2HPsG/u1Geepg06nFP +/cJUxbkKhP5cN+gpUe4eK8Be5pREKvpYlqRhMQIrrUWuOAY+pAwZn3+izFQNn+zlrgZRbEvD9x4i +654MUiS92df1RNOodZ76xc1SoHKM2hksW7mJHv9duV8RxtvFjE3vdfZ3o7u3ZR13kEC/pAOZYcW2 +1oOQm5xX4bIIMNaLT83FE1RE9WkbsKqltlnPuL+AfeY/Putcq0Qj2CMGHzOMTJUTKghujOYKlMdZ +TqYwPcfMjCrj84rMKnJqTZD9p/Hu55MHuBS63M1MNHNImBDx8rMA62V6Rmje7AWIqkXFqSYZ46mC +URzhLj+VAu4QWnjkEAlwboH0qL53bl4r5QAAgJYTMchV1sfbSP5VJWYm7/nEMRazDsvwWwYnBfuL +NfdC0g8keuxc3hVcWQ8xYq0jMSjDO110WlAltWkwk5pglsXK18dScbWil578ln11NJ8ps9u+4Qj9 +gzWad5H/HP6OIhAbQLl6E8v6HKcNgjdBOADGdq09MT2kzcC1ZzpAPjqaAvS9YgjLPzeO39leUycx +yO2aPGo3dOqGf9Z2quELQ3lq/IbQmOZ82Nx91KwSLZrBmAnE4BzACCTlE42ztQ/MGlB8zG9QKdds +pjs6CpXzonNUb17MCAAzGi04Qjh1/Snfm4SXY2pD0YFzWeIlbgahcY3g7FSN05VPBkFp+jm4b+/V +smAoazFV1t4iGUWfE9BNFcxmNUN7/SSGv09c0u2rFPXn8T2RbeoOD6DX0Pij/Ho37kykJg2g/QtW +IckHPJJ4I8crUrnYBIJfrJuu2yzs+QFsUa086fQI9AVB6iwBrBrjruuWnxF55G01LEnyudiXxqcc +1IOE1PX3tysiJjZBfh91dSkovaVnXxedbUXfb7XMB7WwIu9YudubtVuMI1nKqAJsNQXifkburwHJ +C1wu+BUTV+QarKipHADuzFd5xrtMhEL635FHrEw06tWOX6rBWq7RSWfjlK4MFV2ChLVLmYICFneQ +P+13ITXSouXEzOCqZ9RVFctG6ThyUD+zGY7orjRCrwBRQhLTgepren5i/pIBJ4idocXTdNqrr4Co +rjuf+ucy1rQjum== \ No newline at end of file diff --git a/Societes/ric/Docs/CONDITIONS_GENERALES.pdf b/Societes/ric/Docs/CONDITIONS_GENERALES.pdf new file mode 100755 index 00000000..153dd9e9 Binary files /dev/null and b/Societes/ric/Docs/CONDITIONS_GENERALES.pdf differ diff --git a/Societes/ric/Docs/CONDITIONS_GENERALES_BICOR.docx b/Societes/ric/Docs/CONDITIONS_GENERALES_BICOR.docx new file mode 100755 index 00000000..84f9b3bc Binary files /dev/null and b/Societes/ric/Docs/CONDITIONS_GENERALES_BICOR.docx differ diff --git a/Societes/ric/Docs/CONDITIONS_GENERALES_ENG.docx b/Societes/ric/Docs/CONDITIONS_GENERALES_ENG.docx new file mode 100755 index 00000000..60f1bb6e Binary files /dev/null and b/Societes/ric/Docs/CONDITIONS_GENERALES_ENG.docx differ diff --git a/Societes/ric/Docs/CONDITIONS_GENERALES_VITALIS.pdf b/Societes/ric/Docs/CONDITIONS_GENERALES_VITALIS.pdf new file mode 100755 index 00000000..153dd9e9 Binary files /dev/null and b/Societes/ric/Docs/CONDITIONS_GENERALES_VITALIS.pdf differ diff --git a/Societes/ric/Docs/CONDITIONS_GENERALES_old.pdf b/Societes/ric/Docs/CONDITIONS_GENERALES_old.pdf new file mode 100755 index 00000000..99264771 Binary files /dev/null and b/Societes/ric/Docs/CONDITIONS_GENERALES_old.pdf differ diff --git a/Societes/ric/Docs/EXCLUSIONS.pdf b/Societes/ric/Docs/EXCLUSIONS.pdf new file mode 100755 index 00000000..5765e82d Binary files /dev/null and b/Societes/ric/Docs/EXCLUSIONS.pdf differ diff --git a/Societes/ric/Etats/Etquittance.php b/Societes/ric/Etats/Etquittance.php new file mode 100755 index 00000000..2ca6ba0a --- /dev/null +++ b/Societes/ric/Etats/Etquittance.php @@ -0,0 +1,140 @@ +etQuittance = new TbQuittancesociete(); + $this->etBeneficiaire = new TbBeneficiairequittancesociete(); + } + + public function index() { + } + + public function imprimer($IdQ) { + $etQuittance = $this->etQuittance->quittanceAimprimer($IdQ); + $etBeneficiaire = $this->etBeneficiaire->recapbenaficiairequittance($IdQ); + +/* Gestion ds couleurs de cellule + +$pdf->SetFont('','I'); => Italique + +$pdf->SetFont(''); => Normal + +$pdf->SetFillColor(135,206,250); => bleu + +$pdf->SetFillColor(225,225,225); => gris + +$pdf->Cell(0,10,"text",0,1,'C',false); false => pas de couleur de fond +$pdf->Cell(0,10,"text",0,1,'C',true); true => avec de couleur de fond pour la cellule + +*/ + + $pdf = new Pdfentete(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->SetMargins(25, 25, 25) ; + $pdf->SetFont('Arial','',15); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + // $pdf->SetX(-50); + $pdf->Sety(40); + $pdf->Cell(0,10,convertirc($etQuittance['nomClient']),0,1,'C',false); + $pdf->Cell(0,10,convertirc($etQuittance['boitepostale']),0,1,'C',false); + + $pdf->SetFont('Arial','BU',15); + $pdf->SetFillColor(135,206,250); // bleu + $pdf->Cell(0,10,convertirc('FACTURE'),0,1,'C',true); + + $pdf->SetFont('Arial','',10); + + $pdf->SetFontSize(10); + + $pdf->Cell(0,10,'Edition : '.heureCourante(),0,1,'C',false); + + + // $pdf->Ln(5); + + $lgcol1 = 60; + $lgcol2 = 100; + $ht=8; + + $pdf->SetFont(''); + + $pdf->SetFillColor(225,225,225); // gris + $pdf->Cell($lgcol1,$ht,convertirc('No POLICE'),'1',0,'C',true); + $pdf->Cell($lgcol2,$ht,convertirc($etQuittance['numeroPolice']),'1',1,'C',true); + + $pdf->Cell($lgcol1,$ht,convertirc('N° Quittance'),'1',0,'C',false); + $pdf->Cell($lgcol2,$ht,convertirc($etQuittance['numeroQuittance']),'1',1,'C',false); + + $pdf->Cell($lgcol1,$ht,'Mouvement','1',0,'C',true); + $pdf->Cell($lgcol2,$ht,$etQuittance['typeavenant'],'1',1,'C',true); + + $pdf->Cell($lgcol1,$ht,convertirc('Opération'),'1',0,'C',false); + $pdf->Cell($lgcol2,$ht,convertirc($etQuittance['typeoperation']),'1',1,'C',false); + + $pdf->Cell($lgcol1,$ht,convertirc('Date Effet'),'1',0,'C',true); + $pdf->Cell($lgcol2,$ht,dateFr($etQuittance['dateEffet']),'1',1,'C',true); + + $pdf->Cell($lgcol1,$ht,convertirc('Date Echéance'),'1',0,'C',false); + $pdf->Cell($lgcol2,$ht,dateFr($etQuittance['dateEcheance']),'1',1,'C',false); + + $pdf->Cell($lgcol1,$ht,convertirc('Date Emission'),'1',0,'C',true); + $pdf->Cell($lgcol2,$ht,dateFr($etQuittance['dateEmission']),'1',1,'C',true); +// + $pdf->Cell($lgcol1,$ht,convertirc('Effectif Adhérents'),'1',0,'C',false); + $pdf->Cell($lgcol2,$ht,convertirc($etBeneficiaire['nbAdherent']),'1',1,'C',false); + + $pdf->Cell($lgcol1,$ht,convertirc('Effectif Ayants droit'),'1',0,'C',true); + $pdf->Cell($lgcol2,$ht,convertirc($etBeneficiaire['nbBeneficiaire']),'1',1,'C',true); + + $pdf->Cell($lgcol1,$ht,convertirc('Effectif Total Assurés'),'1',0,'C',false); + $pdf->Cell($lgcol2,$ht,convertirc($etBeneficiaire['nbAssure']),'1',1,'C',false); +// + $pdf->Cell($lgcol1,$ht,convertirc('Prime HT'),'1',0,'C',true); + $pdf->Cell($lgcol2,$ht,format_N(nettoyerf($etQuittance['primeHt'])),'1',1,'C',true); + + $pdf->Cell($lgcol1,$ht,convertirc('Fond Mutuel'),'1',0,'C',false); + $pdf->Cell($lgcol2,$ht,format_N(nettoyerf($etQuittance['taxe'])),'1',1,'C',false); + + $pdf->Cell($lgcol1,$ht,convertirc('Frais Cartes'),'1',0,'C',true); + $pdf->Cell($lgcol2,$ht,format_N(nettoyerf($etQuittance['fraisCarte'])),'1',1,'C',true); + + $pdf->SetFillColor(135,206,250); // bleu + $pdf->Cell($lgcol1,$ht,convertirc('Prime TTC'),'1',0,'C',true); + $pdf->Cell($lgcol2,$ht,format_N(nettoyerf($etQuittance['primeTtc'])),'1',1,'C',true); + + $pdf->Ln(10); + + $pdf->SetFontSize(12); + $pdf->Cell(0,6,convertirc('Arrêté la présente facture à la somme de :'),0,1,'C',false); + $pdf->SetFont('','I'); + $pdf->SetFillColor(135,206,250); // bleu + $pdf->Cell(0,6,asLetters($etQuittance['primeTtc']).convertirc(' Francs XOF'),0,1,'C',true); + $pdf->SetFont(''); + + $pdf->SetY(-70); + + $pdf->Cell(0,6,convertirc('Fait à ABIDJAN, le ').dateFr($etQuittance['dateEmission']),0,1,'C',false); + + $pdf->Ln(10); + $pdf->SetFont('','U'); + $pdf->Cell(0,6,convertirc('L\'assureur'),0,0,'C',false); + + $fichier="facture_maladie_radiant"."_".uniqid().".pdf"; + + $pdf->Output($fichier,"D"); + } +} \ No newline at end of file diff --git a/Societes/ric/Etats/Etrecucaisse.php b/Societes/ric/Etats/Etrecucaisse.php new file mode 100755 index 00000000..2b26287d --- /dev/null +++ b/Societes/ric/Etats/Etrecucaisse.php @@ -0,0 +1,124 @@ +etrecu = new TbRecucaisse(); + $this->societeuser = new Societeuser(); + } + + public function index() { + } + + public function imprimer($IdR) { + $etrecu = $this->etrecu->recuAimprimer($IdR); + $etdetailrecus = $this->etrecu->detailsrecuAimprimer($IdR); + $societeuser = $this->societeuser->getSocieteuser($_SESSION['codeSociete']); + + $pdf = new Pdfentete(); + // $pdf = new FPDF(); + $pdf->SetMargins(25, 25, 25) ; + $pdf->SetFont('Arial','',15); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $pdf->Sety(20); + $pdf->SetX(60); + $pdf->Cell(100,12,convertirc($societeuser['nomSociete']),1,1,'C',false); + + $pdf->SetFontSize(7); + $pdf->Cell(0,5,'Edition : '.heureCourante(),0,1,'R',false); + $pdf->SetFontSize(8); + $pdf->Cell(0,5,convertirc('Tél : '.$societeuser['telephoneSociete']),0,1,'C',false); + $pdf->Cell(0,5,convertirc('P.O.BOX : '.$societeuser['telephoneSociete']),0,1,'C',false); + $pdf->Cell(0,5,convertirc('TIN : 102781991'),0,1,'C',false); + + $pdf->SetFontSize(15); + $pdf->Ln(5); + $pdf->Cell(0,12,convertirc(_("RECU D'ENCAISSEMENT") . " No : " . $etrecu['numeroEncaissement']),1,1,'C',false); + + $pdf->SetFontSize(8); + + $pdf->Cell(40,6,convertirc("Reçu de"),0,0,'L',false); + $pdf->SetFont('Arial','BI',8); + $pdf->Cell(100,6,convertirc(': '.$etrecu['nomTireur']),0,1,'L'); + + $pdf->SetFont('Arial','',8); + $pdf->Cell(40,6,convertirc("La somme de"),0,0,'L',false); + $pdf->SetFont('Arial','BI',8); + $pdf->Cell(100,6,convertirc(': '.format_N($etrecu['montant']).' FRW'),0,1,'L'); + + $pdf->SetFont('Arial','',8); + $pdf->Cell(40,6,convertirc("Montant en lettre"),0,0,'L',false); + $pdf->SetFont('Arial','BI',8); + $pdf->Cell(100,6,': '.asLetters($etrecu['montant']).convertirc(' FRW'),0,1,'L',false); + + /* + $pdf->SetFont('Arial','',8); + $pdf->Cell(40,6,convertirc("Apporteur : "),0,0,'L',false); + $pdf->SetFont('Arial','BI',8); + $pdf->Cell(100,6,convertirc(': '.$etrecu['apporteur']),0,1,'L'); + */ + $pdf->SetFont('Arial','',8); + $pdf->Cell(40,6,convertirc("Mode de paiement : "),0,0,'L',false); + $pdf->SetFont('Arial','BI',8); + $pdf->Cell(100,6,convertirc(': '.$etrecu['modepaiement']),0,1,'L'); + + $pdf->SetFont('Arial','',8); + $pdf->Cell(40,6,convertirc("Référence dpaiement : "),0,0,'L',false); + $pdf->SetFont('Arial','BI',8); + $pdf->Cell(100,6,convertirc(': '.$etrecu['referencePaiement']),0,1,'L'); + + $pdf->SetFont('Arial','BU',8); + + $pdf->Cell(0,6,convertirc("Polices payées : "),0,1,'L',false); + + $pdf->SetFont('Arial','',8); + + $hl=5; + + $pdf->SetFont('Arial','B',8); + $pdf->Cell(10,$hl,convertirc("N° Cli"),"1",0,'C'); + $pdf->Cell(50,$hl,convertirc("Nom Client"),"1",0,'C'); + $pdf->Cell(25,$hl,convertirc("No POLICE"),"1",0,'C'); + $pdf->Cell(10,$hl,convertirc("Quit."),"1",0,'C'); + $pdf->Cell(18,$hl,convertirc("Effet"),"1",0,'C'); + $pdf->Cell(18,$hl,convertirc("Echéance"),"1",0,'C'); + $pdf->Cell(10,$hl,convertirc("Mvt"),"1",0,'C'); + $pdf->Cell(20,$hl,convertirc("Montant"),"1",1,'C'); + + $pdf->SetFont('Arial','I',8); + foreach ($etdetailrecus as $detailencaissement) + { + $pdf->Cell(10,$hl,convertirc($detailencaissement['numeroClient']),"1",0,'C'); + $pdf->Cell(50,$hl,convertirc($detailencaissement['nomClient']),"1",0,'L'); + $pdf->Cell(25,$hl,convertirc($detailencaissement['numeroPolice']),"1",0,'C'); + $pdf->Cell(10,$hl,convertirc($detailencaissement['numeroQuittance']),"1",0,'C'); + $pdf->Cell(18,$hl,convertirc(dateFr($detailencaissement['dateEffet'])),"1",0,'C'); + $pdf->Cell(18,$hl,convertirc(dateFr($detailencaissement['dateEcheance'])),"1",0,'C'); + $pdf->Cell(10,$hl,convertirc($detailencaissement['codeTypeAvenant']),"1",0,'C'); + $pdf->Cell(20,$hl,format_N($detailencaissement['primeTtc']),"1",1,'C'); + } + $pdf->SetFont('Arial','',8); + + $pdf->SetFontSize(10); + + $pdf->SetY(-60); + + $pdf->Cell(0,10,convertirc('Fait à KIGALI, le ').dateFr($etrecu['dateCre']),0,1,'C',false); + $pdf->SetFont('','U'); + $pdf->Cell(0,10,convertirc('La caisse : '.$etrecu['caissiere']),0,0,'C',false); + + $fichier="recu_caisse"."_".uniqid().".pdf"; + + $pdf->Output($fichier,"D"); + } +} \ No newline at end of file diff --git a/Societes/ric/Etats/Pdfentete.php b/Societes/ric/Etats/Pdfentete.php new file mode 100755 index 00000000..f9eddd9a --- /dev/null +++ b/Societes/ric/Etats/Pdfentete.php @@ -0,0 +1,33 @@ +Image('images/logo_etat.png',0,20,35,0,'','http://radiant.co.rw'); + + // $this->Image('Societes/intersante/images/logo_etat.png',0,20,35,0,'','http://radiant.co.rw'); + + // $this->Image('Societes/'.$_SESSION['codeSociete'].'/images/logo_etat.png',25,15,15,0,'','http://radiant.co.rw'); + + $this->SetFont('Arial','BU',15); + } + + // Pied de page + function Footer() + { + $this->SetY(-30); + $this->SetFont('Arial','',8); + + /* + $this->Cell(0,5,convertirc('RADAINT INSURANCE, SARL au capital de 3.000.000 CFA, Régie par le code CIMA'),0,1,'C'); + $this->Cell(0,5,convertirc('KIGALI 21 BP 4946 ABJ 21, Tel 06 80 23 39,Fax 06 80 23 39'),0,1,'C'); + $this->Cell(0,5,convertirc('RC N° CI- ABJ- CC N°?'),0,1,'C'); + */ + } +} diff --git a/Societes/ric/Etats/Pdfpagination.php b/Societes/ric/Etats/Pdfpagination.php new file mode 100755 index 00000000..1916bcff --- /dev/null +++ b/Societes/ric/Etats/Pdfpagination.php @@ -0,0 +1,13 @@ +SetY(-15); + $this->SetFont('Arial','',8); + // Numéro et nombre de pages + $this->Cell(0,5,'Page '.$this->PageNo().'/{nb}',0,0,'C'); + } +} diff --git a/Societes/ric/Etats/Pdfrq.php b/Societes/ric/Etats/Pdfrq.php new file mode 100755 index 00000000..8eaf8a12 --- /dev/null +++ b/Societes/ric/Etats/Pdfrq.php @@ -0,0 +1,48 @@ +titre = $titre['0']; + $this->largeurtitre = $titre['1']; + $this->entete = $entete; + } + + // En-tête + function Header() + { + // Logo + $this->SetMargins(20, 20,20); + $this->Image('Bootstrap/images/logo_loyale.png',0,20,35,0,'','http://gessante.com/'); + $this->SetFont('Arial','BU',10); + $this->SetXY(40,20); + $this->Cell($this->largeurtitre,10,convertirc($this->titre),1,1,'C'); + + $this->SetFont('Arial','B',7); + + $this->Ln(5); + $this->Cell(0,5,convertirc("Edité le : ").date("d/m/Y"),0,1,'L'); + + foreach ($this->entete as $entete){ + $this->Cell($entete['1'],6,convertirc($entete['0']),1,0,'C'); + } + $this->SetFont('Arial','',7); + $this->Ln(6); + } + + // Pied de page + function Footer() + { + $this->SetY(-15); + $this->SetFont('Arial','',8); + // Numéro et nombre de pages + $this->Cell(0,5,'Page '.$this->PageNo().'/{nb}',0,0,'C'); + } +} diff --git a/Societes/ric/Etats/Societeuser.php b/Societes/ric/Etats/Societeuser.php new file mode 100755 index 00000000..6e82454a --- /dev/null +++ b/Societes/ric/Etats/Societeuser.php @@ -0,0 +1,31 @@ +executerRequete($sql, array($codeSociete)); + return $societe->fetch(); + } + + public function get_ville_societe() + { + $codeSociete = $_SESSION['codeSociete']; + + $sql = 'select fn_ville_societe(?) as villeSociete;'; + + $resultat = $this->executerRequete($sql, array($codeSociete)); + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + + return $ligne['villeSociete']; + } +} \ No newline at end of file diff --git a/Societes/ric/Etats/TbBeneficiairequittancesociete.php b/Societes/ric/Etats/TbBeneficiairequittancesociete.php new file mode 100755 index 00000000..3a6141a6 --- /dev/null +++ b/Societes/ric/Etats/TbBeneficiairequittancesociete.php @@ -0,0 +1,17 @@ +executerRequete($sql, array($idQuittance)); + return $quittance->fetch(PDO::FETCH_ASSOC); + } +} diff --git a/Societes/ric/Etats/TbQuittancesociete.php b/Societes/ric/Etats/TbQuittancesociete.php new file mode 100755 index 00000000..e27e5448 --- /dev/null +++ b/Societes/ric/Etats/TbQuittancesociete.php @@ -0,0 +1,23 @@ +executerRequete($sql, array($idQuittance)); + if ($quittance->rowCount() > 0) + return $quittance->fetch(PDO::FETCH_ASSOC); + //return $quittance->fetchAll(PDO::FETCH_ASSOC); (si plusieurs lignes) + else + throw new Exception("Aucun quittance ne correspond au id '$idQuittance'"); + } +} \ No newline at end of file diff --git a/Societes/ric/Etats/TbRecucaisse.php b/Societes/ric/Etats/TbRecucaisse.php new file mode 100755 index 00000000..9e5435b9 --- /dev/null +++ b/Societes/ric/Etats/TbRecucaisse.php @@ -0,0 +1,49 @@ +executerRequete($sql, array($idEncaissement)); + return $encaissement->fetch(); + } + + public function detailsrecuAimprimer($idEncaissement) { + $sql = 'select B.idClient, B.numeroClient, CONCAT(C.nom," ",C.prenoms) as nomClient, B.numeroPolice, + A.id as idDetailencaissement, B.codeTypeAvenant, A.*, B.dateEffet, B.dateEcheance, B.codeTypeAvenant + From detailencaissement A + left join quittance B on (B.codeSociete=A.codeSociete) and (B.id=A.idQuittance) + left join clients C on (B.codeSociete=A.codeSociete) and (C.id=B.idClient) + left join police D on (D.codeSociete=A.codeSociete) and (D.id=B.idPolice) + where (A.idEncaissement=?) + order by C.nom, C.prenoms, B.numeroPolice, B.dateEffet, A.id'; + + $detailencaissement = $this->executerRequete($sql, array($idEncaissement)); + return $detailencaissement; + } + + public function recuGarantAimprimer($idEncaissement) { + $sql = 'CALL sp_imprimer_encaissement_garant_id(?);'; + + $encaissement = $this->executerRequete($sql, array($idEncaissement)); + return $encaissement->fetch(); + } + + public function detailsrecuGarantAimprimer($idEncaissement){ + + $sql = 'CALL sp_imprimer_detail_encaissement_garant_id(?);'; + + $encaissement = $this->executerRequete($sql, array($idEncaissement)); + return $encaissement->fetchAll(); + } + +} \ No newline at end of file diff --git a/Societes/ric/Ged/2025-11-23_6922e868e9b87.pdf b/Societes/ric/Ged/2025-11-23_6922e868e9b87.pdf new file mode 100755 index 00000000..08ce8abd Binary files /dev/null and b/Societes/ric/Ged/2025-11-23_6922e868e9b87.pdf differ diff --git a/Societes/ric/Html2pdf/index.php b/Societes/ric/Html2pdf/index.php new file mode 100755 index 00000000..6c4fc698 --- /dev/null +++ b/Societes/ric/Html2pdf/index.php @@ -0,0 +1,206 @@ + 1, + "siret" => "152 356 785", + "firstname" => "John", + "lastname" => "Doe", + "email" => "john.doe@gmail.com", + "portable" => "06.25.35.45.35", + "address" => "26 Avenue du Bourg\n75000 Paris" + ); + + $client = array( + "id" => 1, + "firstname" => "Luc", + "lastname" => "Kennedy", + "mail" => "luc.kennedy@gmail.com", + "portable" => "06.32.23.15.58", + "address" => "5 Avenue du Boulevard Maréchal Juin\n14000 Caen", + "infos" => "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium eos tempora, magni delectus porro cum labore eligendi." + ); + + $project = array( + "id" => 1, + "name" => "Création d'un Portfolio", + "status" => 1, + "infos" => "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium eos tempora, magni delectus porro cum labore eligendi.", + "created" => 1, + "paid" => false, + "client_id" => 1, + "user_id" => 1 + ); + + $tasks[] = array( + "id" => 1, + "ref" => "96ER1", + "description" => "Veille technologique", + "price" => 200, + "quantity" => 1, + "project_id" => 1 + ); + + $tasks[] = array( + "id" => 2, + "ref" => "152DE", + "description" => "Création et intégration d'un thème pour Wordpress", + "price" => 500, + "quantity" => 1, + "project_id" => 1 + ); + + $tasks[] = array( + "id" => 3, + "ref" => "25365", + "description" => "Développement d'un plugin Wordpress sur mesure pour le client", + "price" => 1000, + "quantity" => 1, + "project_id" => 1 + ); + + ob_start(); + $total = 0; + $total_tva = 0; +?> + + + + + + +
+

Fait a Paris, le

+

Signature du particulier, suivie de la mension manuscrite "bon pour accord".

+

 

+
+ + + + + + +
+
+
+ SIRET:
+ +
+
+
+
+ + + + + + + + + +

Devis n°14

Emis le
Objectif:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionQuantitéPrix UnitaireMontant
+ €
Total:HT :
TVA :
TTC :
+ +
+ +pdf->SetAuthor('DOE John'); + $pdf->pdf->SetTitle('Devis 14'); + $pdf->pdf->SetSubject('Création d\'un Portfolio'); + $pdf->pdf->SetKeywords('HTML2PDF, Devis, PHP'); + $pdf->writeHTML($content); + $pdf->Output('Devis.pdf'); + // $pdf->Output('Devis.pdf', 'D'); + } catch (HTML2PDF_exception $e) { + die($e); + } + +?> diff --git a/Societes/ric/Html2pdf/lib/_LGPL.txt b/Societes/ric/Html2pdf/lib/_LGPL.txt new file mode 100755 index 00000000..2f20b2ac --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_LGPL.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/Societes/ric/Html2pdf/lib/_class/exception.class.php b/Societes/ric/Html2pdf/lib/_class/exception.class.php new file mode 100755 index 00000000..7c86c487 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_class/exception.class.php @@ -0,0 +1,168 @@ + PDF convertor + * distributed under the LGPL License + * + * @author Laurent MINGUET + * @version 4.03 + */ + +class HTML2PDF_exception extends exception +{ + protected $_tag = null; + protected $_html = null; + protected $_other = null; + protected $_image = null; + protected $_messageHtml = ''; + + /** + * generate a HTML2PDF exception + * + * @param int $err error number + * @param mixed $other additionnal informations + * @return string $html optionnal code HTML associated to the error + */ + final public function __construct($err = 0, $other = null, $html = '') + { + // read the error + switch($err) + { + case 1: // Unsupported tag + $msg = (HTML2PDF_locale::get('err01')); + $msg = str_replace('[[OTHER]]', $other, $msg); + $this->_tag = $other; + break; + + case 2: // too long sentence + $msg = (HTML2PDF_locale::get('err02')); + $msg = str_replace('[[OTHER_0]]', $other[0], $msg); + $msg = str_replace('[[OTHER_1]]', $other[1], $msg); + $msg = str_replace('[[OTHER_2]]', $other[2], $msg); + break; + + case 3: // closing tag in excess + $msg = (HTML2PDF_locale::get('err03')); + $msg = str_replace('[[OTHER]]', $other, $msg); + $this->_tag = $other; + break; + + case 4: // tags closed in the wrong order + $msg = (HTML2PDF_locale::get('err04')); + $msg = str_replace('[[OTHER]]', print_r($other, true), $msg); + break; + + case 5: // unclosed tag + $msg = (HTML2PDF_locale::get('err05')); + $msg = str_replace('[[OTHER]]', print_r($other, true), $msg); + break; + + case 6: // image can not be loaded + $msg = (HTML2PDF_locale::get('err06')); + $msg = str_replace('[[OTHER]]', $other, $msg); + $this->_image = $other; + break; + + case 7: // too big TD content + $msg = (HTML2PDF_locale::get('err07')); + break; + + case 8: // SVG tag not in DRAW tag + $msg = (HTML2PDF_locale::get('err08')); + $msg = str_replace('[[OTHER]]', $other, $msg); + $this->_tag = $other; + break; + + case 9: // deprecated + $msg = (HTML2PDF_locale::get('err09')); + $msg = str_replace('[[OTHER_0]]', $other[0], $msg); + $msg = str_replace('[[OTHER_1]]', $other[1], $msg); + $this->_tag = $other[0]; + break; + + case 0: // specific error + default: + $msg = $other; + break; + } + + // create the HTML message + $this->_messageHtml = ''.HTML2PDF_locale::get('txt01', 'error: ').$err.'
'; + $this->_messageHtml.= HTML2PDF_locale::get('txt02', 'file:').' '.$this->file.'
'; + $this->_messageHtml.= HTML2PDF_locale::get('txt03', 'line:').' '.$this->line.'
'; + $this->_messageHtml.= '
'; + $this->_messageHtml.= $msg; + + // create the text message + $msg = HTML2PDF_locale::get('txt01', 'error: ').$err.' : '.strip_tags($msg); + + // add the optionnal html content + if ($html) { + $this->_messageHtml.= "

HTML : ...".trim(htmlentities($html)).'...'; + $this->_html = $html; + $msg.= ' HTML : ...'.trim($html).'...'; + } + + // save the other informations + $this->_other = $other; + + // construct the exception + parent::__construct($msg, $err); + } + + /** + * get the message as string + * + * @access public + * @return string $messageHtml + */ + public function __toString() + { + return $this->_messageHtml; + } + + /** + * get the html tag name + * + * @access public + * @return string $tagName + */ + public function getTAG() + { + return $this->_tag; + } + + /** + * get the optional html code + * + * @access public + * @return string $html + */ + public function getHTML() + { + return $this->_html; + } + + /** + * get the optional other informations + * + * @access public + * @return mixed $other + */ + public function getOTHER() + { + return $this->_other; + } + + /** + * get the image source + * + * @access public + * @return string $imageSrc + */ + public function getIMAGE() + { + return $this->_image; + } +} \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_class/locale.class.php b/Societes/ric/Html2pdf/lib/_class/locale.class.php new file mode 100755 index 00000000..f1443427 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_class/locale.class.php @@ -0,0 +1,100 @@ + PDF convertor + * distributed under the LGPL License + * + * @author Laurent MINGUET + * @version 4.03 + */ + +class HTML2PDF_locale +{ + /** + * code of the current used locale + * @var string + */ + static protected $_code = null; + + /** + * texts of the current used locale + * @var array + */ + static protected $_list = array(); + + /** + * directory where locale files are + * @var string + */ + static protected $_directory = null; + + /** + * load the locale + * + * @access public + * @param string $code + */ + static public function load($code) + { + if (self::$_directory===null) { + self::$_directory = dirname(dirname(__FILE__)).'/locale/'; + } + + // must be in lower case + $code = strtolower($code); + + // must be [a-z-0-9] + if (!preg_match('/^([a-z0-9]+)$/isU', $code)) { + throw new HTML2PDF_exception(0, 'invalid language code ['.self::$_code.']'); + } + + // save the code + self::$_code = $code; + + // get the name of the locale file + $file = self::$_directory.self::$_code.'.csv'; + + // the file must exist + if (!is_file($file)) { + throw new HTML2PDF_exception(0, 'language code ['.self::$_code.'] unknown. You can create the translation file ['.$file.'] and send it to the webmaster of html2pdf in order to integrate it into a future release'); + } + + // load the file + self::$_list = array(); + $handle = fopen($file, 'r'); + while (!feof($handle)) { + $line = fgetcsv($handle); + //if (count($line)!=2) continue; + if (is_array($line) && count($line) > 0) continue; + + if (is_array($line) && isset($line['key'])) { + self::$_list[trim($line[0])] = trim($line[1]); + } + } + fclose($handle); + } + + /** + * clean the locale + * + * @access public static + */ + static public function clean() + { + self::$_code = null; + self::$_list = array(); + } + + /** + * get a text + * + * @access public static + * @param string $key + * @return string + */ + static public function get($key, $default='######') + { + return (isset(self::$_list[$key]) ? self::$_list[$key] : $default); + } +} \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_class/myPdf.class.php b/Societes/ric/Html2pdf/lib/_class/myPdf.class.php new file mode 100755 index 00000000..fbe511bd --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_class/myPdf.class.php @@ -0,0 +1,1415 @@ + PDF convertor + * distributed under the LGPL License + * + * @author Laurent MINGUET + * @version 4.03 + */ + +require_once(dirname(__FILE__).'/tcpdfConfig.php'); +require_once(dirname(__FILE__).'/../_tcpdf_'.HTML2PDF_USED_TCPDF_VERSION.'/tcpdf.php'); + +class HTML2PDF_myPdf extends TCPDF +{ + protected $_footerParam = array(); + protected $_transf = array(); + protected $_myLastPageGroup = null; + protected $_myLastPageGroupNb = 0; + + // used to make a radius with bezier : (4/3 * (sqrt(2) - 1)) + const MY_ARC = 0.5522847498; + + // nb of segment to build a arc with bezier curv + const ARC_NB_SEGMENT = 8; + + /** + * class constructor + * + * @param string $orientation page orientation, same as TCPDF + * @param string $unit User measure unit, same as TCPDF + * @param mixed $format The format used for pages, same as TCPDF + * @param boolean $unicode TRUE means that the input text is unicode (default = true) + * @param String $encoding charset encoding; default is UTF-8 + * @param boolean $diskcache if TRUE reduce the RAM memory usage by caching temporary data on filesystem (slower). + * @access public + */ + public function __construct( + $orientation='P', + $unit='mm', + $format='A4', + $unicode=true, + $encoding='UTF-8', + $diskcache=false) + { + // call the parent constructor + parent::__construct($orientation, $unit, $format, $unicode, $encoding, $diskcache); + + // init the specific parameters used by HTML2PDF + $this->SetCreator(PDF_CREATOR); + $this->SetAutoPageBreak(false, 0); + $this->linestyleCap = '2 J'; + $this->setPrintHeader(false); + $this->jpeg_quality = 90; + + // prepare the automatic footer + $this->SetMyFooter(); + + $this->cMargin = 0; + } + + /** + * Set the parameters for the automatic footer + * + * @param boolean $page display the page number + * @param boolean $date display the date + * @param boolean $hour display the hour + * @param boolean $form display a warning abour forms + * @access public + */ + public function SetMyFooter($page = false, $date = false, $hour = false, $form = false) + { + $page = ($page ? true : false); + $date = ($date ? true : false); + $hour = ($hour ? true : false); + $form = ($form ? true : false); + + $this->_footerParam = array('page' => $page, 'date' => $date, 'hour' => $hour, 'form' => $form); + } + + /** + * This function is call automatically by TCPDF at the end of a page + * It takes no parameters + * + * @access public + */ + public function Footer() + { + // prepare the text from the tranlated text + $txt = ''; + if ($this->_footerParam['form']) { + $txt = (HTML2PDF_locale::get('pdf05')); + } + if ($this->_footerParam['date'] && $this->_footerParam['hour']) { + $txt.= ($txt ? ' - ' : '').(HTML2PDF_locale::get('pdf03')); + } + if ($this->_footerParam['date'] && !$this->_footerParam['hour']) { + $txt.= ($txt ? ' - ' : '').(HTML2PDF_locale::get('pdf01')); + } + if (!$this->_footerParam['date'] && $this->_footerParam['hour']) { + $txt.= ($txt ? ' - ' : '').(HTML2PDF_locale::get('pdf02')); + } + if ($this->_footerParam['page']) { + $txt.= ($txt ? ' - ' : '').(HTML2PDF_locale::get('pdf04')); + } + + if (strlen($txt)>0) { + // replace some values + $toReplace = array( + '[[date_d]]' => date('d'), + '[[date_m]]' => date('m'), + '[[date_y]]' => date('Y'), + '[[date_h]]' => date('H'), + '[[date_i]]' => date('i'), + '[[date_s]]' => date('s'), + '[[page_cu]]' => $this->getMyNumPage(), + '[[page_nb]]' => $this->getMyAliasNbPages(), + ); + $txt = str_replace(array_keys($toReplace), array_values($toReplace), $txt); + + // draw the footer + parent::SetY(-11); + $this->SetFont('helvetica', 'I', 8); + $this->Cell(0, 10, $txt, 0, 0, 'R'); + } + } + + /** + * after cloning a object, we does not want to clone all the front informations + * because it take a lot a time and a lot of memory => we use reference + * + * @param &HTML2PDF_myPdf object + * @access public + */ + public function cloneFontFrom(&$pdf) + { + $this->fonts = &$pdf->getFonts(); + $this->FontFiles = &$pdf->getFontFiles(); + $this->diffs = &$pdf->getDiffs(); + $this->fontlist = &$pdf->getFontList(); + $this->numfonts = &$pdf->getNumFonts(); + $this->fontkeys = &$pdf->getFontKeys(); + $this->font_obj_ids = &$pdf->getFontObjIds(); + $this->annotation_fonts = &$pdf->getAnnotFonts(); + } + + /** + * multiple public accessor for some private attributs + * used only by cloneFontFrom + * + * @return &array + * @access public + */ + public function &getFonts() + { + return $this->fonts; + } + public function &getFontFiles() + { + return $this->FontFiles; + } + public function &getDiffs() + { + return $this->diffs; + } + public function &getFontList() + { + return $this->fontlist; + } + public function &getNumFonts() + { + return $this->numfonts; + } + public function &getFontKeys() + { + return $this->fontkeys; + } + public function &getFontObjIds() + { + return $this->font_obj_ids; + } + public function &getAnnotFonts() + { + return $this->annotation_fonts; + } + + /** + * Verify that a Font is already loaded + * + * @param string Font Key + * @return boolean + * @access public + */ + public function isLoadedFont($fontKey) + { + if (isset($this->fonts[$fontKey])) { + return true; + } + + if (isset($this->CoreFonts[$fontKey])) { + return true; + } + + return false; + } + + /** + * Get the Word Spacing + * + * @access public + * @return float word spacing + */ + public function getWordSpacing() + { + return $this->ws; + } + + /** + * set the Word Spacing + * + * @param float word spacing + * @access public + */ + public function setWordSpacing($ws=0.) + { + $this->ws = $ws; + $this->_out(sprintf('%.3F Tw', $ws*$this->k)); + } + + /** + * start to use a rectangular Cliping Path with radius corners + * + * @param float $x (top left corner) + * @param float $y (top left corner) + * @param float $w (x+w = botom rigth corner) + * @param float $h (y+h = botom rigth corner) + * @param array $cornerTL radius of the Top Left corner + * @param array $cornerTR radius of the Top Right corner + * @param array $cornerBL radius of the Bottom Left corner + * @param array $cornerBR radius of the Bottom Right corner + * @access public + */ + public function clippingPathStart( + $x = null, + $y = null, + $w = null, + $h = null, + $cornerTL=null, + $cornerTR=null, + $cornerBL=null, + $cornerBR=null) + { + // init the path + $path = ''; + + // if we have the position and the size of the rectangle, we can proceed + if ($x!==null && $y!==null && $w!==null && $h!==null) { + // the positions of the rectangle's corners + $x1 = $x*$this->k; + $y1 = ($this->h-$y)*$this->k; + + $x2 = ($x+$w)*$this->k; + $y2 = ($this->h-$y)*$this->k; + + $x3 = ($x+$w)*$this->k; + $y3 = ($this->h-$y-$h)*$this->k; + + $x4 = $x*$this->k; + $y4 = ($this->h-$y-$h)*$this->k; + + // if we have at least one radius corner, then we proceed to a specific path, else it is just a rectangle + if ($cornerTL || $cornerTR || $cornerBL || $cornerBR) { + // prepare the radius values + if ($cornerTL) { + $cornerTL[0] = $cornerTL[0]*$this->k; + $cornerTL[1] =-$cornerTL[1]*$this->k; + } + if ($cornerTR) { + $cornerTR[0] = $cornerTR[0]*$this->k; + $cornerTR[1] =-$cornerTR[1]*$this->k; + } + if ($cornerBL) { + $cornerBL[0] = $cornerBL[0]*$this->k; + $cornerBL[1] =-$cornerBL[1]*$this->k; + } + if ($cornerBR) { + $cornerBR[0] = $cornerBR[0]*$this->k; + $cornerBR[1] =-$cornerBR[1]*$this->k; + } + + // if TL radius then specific start else (X1,Y1) + if ($cornerTL) { + $path.= sprintf('%.2F %.2F m ', $x1+$cornerTL[0], $y1); + } else { + $path.= sprintf('%.2F %.2F m ', $x1, $y1); + } + + // if TR radius then line + arc, else line to (X2,Y2) + if ($cornerTR) { + $xt1 = ($x2-$cornerTR[0])+$cornerTR[0]*self::MY_ARC; + $yt1 = ($y2+$cornerTR[1])-$cornerTR[1]; + $xt2 = ($x2-$cornerTR[0])+$cornerTR[0]; + $yt2 = ($y2+$cornerTR[1])-$cornerTR[1]*self::MY_ARC; + + $path.= sprintf('%.2F %.2F l ', $x2-$cornerTR[0], $y2); + $path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $x2, $y2+$cornerTR[1]); + } else { + $path.= sprintf('%.2F %.2F l ', $x2, $y2); + } + + // if BR radius then line + arc, else line to (X3, Y3) + if ($cornerBR) { + $xt1 = ($x3-$cornerBR[0])+$cornerBR[0]; + $yt1 = ($y3-$cornerBR[1])+$cornerBR[1]*self::MY_ARC; + $xt2 = ($x3-$cornerBR[0])+$cornerBR[0]*self::MY_ARC; + $yt2 = ($y3-$cornerBR[1])+$cornerBR[1]; + + $path.= sprintf('%.2F %.2F l ', $x3, $y3-$cornerBR[1]); + $path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $x3-$cornerBR[0], $y3); + } else { + $path.= sprintf('%.2F %.2F l ', $x3, $y3); + } + + // if BL radius then line + arc, else line to (X4, Y4) + if ($cornerBL) { + $xt1 = ($x4+$cornerBL[0])-$cornerBL[0]*self::MY_ARC; + $yt1 = ($y4-$cornerBL[1])+$cornerBL[1]; + $xt2 = ($x4+$cornerBL[0])-$cornerBL[0]; + $yt2 = ($y4-$cornerBL[1])+$cornerBL[1]*self::MY_ARC; + + $path.= sprintf('%.2F %.2F l ', $x4+$cornerBL[0], $y4); + $path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $x4, $y4-$cornerBL[1]); + } else { + $path.= sprintf('%.2F %.2F l ', $x4, $y4); + } + + // if RL radius then line + arc + if ($cornerTL) { + $xt1 = ($x1+$cornerTL[0])-$cornerTL[0]; + $yt1 = ($y1+$cornerTL[1])-$cornerTL[1]*self::MY_ARC; + $xt2 = ($x1+$cornerTL[0])-$cornerTL[0]*self::MY_ARC; + $yt2 = ($y1+$cornerTL[1])-$cornerTL[1]; + + $path.= sprintf('%.2F %.2F l ', $x1, $y1+$cornerTL[1]); + $path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $x1+$cornerTL[0], $y1); + } + } else { + $path.= sprintf('%.2F %.2F m ', $x1, $y1); + $path.= sprintf('%.2F %.2F l ', $x2, $y2); + $path.= sprintf('%.2F %.2F l ', $x3, $y3); + $path.= sprintf('%.2F %.2F l ', $x4, $y4); + } + + // close the path + $path.= ' h W n'; + } + + // using the path as a clipping path + $this->_out('q '.$path.' '); + } + + /** + * stop to use the Cliping Path + * + * @access public + */ + public function clippingPathStop() + { + $this->_out(' Q'); + } + + /** + * draw a filled corner of a border with a external and a internal radius + * /--------+ ext2 + * / | + * / /-------+ int2 + * / / + * | / + * | | + * | | + * ext1 +-+ int1 + cen + * + * @param float $ext1X + * @param float $ext1Y + * @param float $ext2X + * @param float $ext2Y + * @param float $int1X + * @param float $int1Y + * @param float $int2X + * @param float $int2Y + * @param float $cenX + * @param float $cenY + * @access public + */ + public function drawCurve($ext1X, $ext1Y, $ext2X, $ext2Y, $int1X, $int1Y, $int2X, $int2Y, $cenX, $cenY) + { + // prepare the coordinates + $ext1X = $ext1X*$this->k; + $ext2X = $ext2X*$this->k; + $int1X = $int1X*$this->k; + $int2X = $int2X*$this->k; + $cenX = $cenX*$this->k; + + $ext1Y = ($this->h-$ext1Y)*$this->k; + $ext2Y = ($this->h-$ext2Y)*$this->k; + $int1Y = ($this->h-$int1Y)*$this->k; + $int2Y = ($this->h-$int2Y)*$this->k; + $cenY = ($this->h-$cenY) *$this->k; + + // init the curve + $path = ''; + + if ($ext1X-$cenX!=0) { + $xt1 = $cenX+($ext1X-$cenX); + $yt1 = $cenY+($ext2Y-$cenY)*self::MY_ARC; + $xt2 = $cenX+($ext1X-$cenX)*self::MY_ARC; + $yt2 = $cenY+($ext2Y-$cenY); + } else { + $xt1 = $cenX+($ext2X-$cenX)*self::MY_ARC; + $yt1 = $cenY+($ext1Y-$cenY); + $xt2 = $cenX+($ext2X-$cenX); + $yt2 = $cenY+($ext1Y-$cenY)*self::MY_ARC; + } + $path.= sprintf('%.2F %.2F m ', $ext1X, $ext1Y); + $path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $ext2X, $ext2Y); + + if ($int1X-$cenX!=0) { + $xt1 = $cenX+($int1X-$cenX)*self::MY_ARC; + $yt1 = $cenY+($int2Y-$cenY); + $xt2 = $cenX+($int1X-$cenX); + $yt2 = $cenY+($int2Y-$cenY)*self::MY_ARC; + } else { + $xt1 = $cenX+($int2X-$cenX); + $yt1 = $cenY+($int1Y-$cenY)*self::MY_ARC; + $xt2 = $cenX+($int2X-$cenX)*self::MY_ARC; + $yt2 = $cenY+($int1Y-$cenY); + } + $path.= sprintf('%.2F %.2F l ', $int2X, $int2Y); + $path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $int1X, $int1Y); + + // draw the curve + $this->_out($path . 'f'); + } + + /** + * draw a filled corner of a border with only a external radius + * /--+ ext2 + * / | + * / | + * / | + * | | + * | | + * | | + * ext1 +-----+ int + cen + * + * @param float $ext1X + * @param float $ext1Y + * @param float $ext2X + * @param float $ext2Y + * @param float $intX + * @param float $intY + * @param float $cenX + * @param float $cenY + * @access public + */ + public function drawCorner($ext1X, $ext1Y, $ext2X, $ext2Y, $intX, $intY, $cenX, $cenY) + { + // prepare the coordinates + $ext1X = $ext1X*$this->k; + $ext2X = $ext2X*$this->k; + $intX = $intX*$this->k; + $cenX = $cenX*$this->k; + + $ext1Y = ($this->h-$ext1Y)*$this->k; + $ext2Y = ($this->h-$ext2Y)*$this->k; + $intY = ($this->h-$intY)*$this->k; + $cenY = ($this->h-$cenY)*$this->k; + + // init the curve + $path = ''; + + if ($ext1X-$cenX!=0) { + $xt1 = $cenX+($ext1X-$cenX); + $yt1 = $cenY+($ext2Y-$cenY)*self::MY_ARC; + $xt2 = $cenX+($ext1X-$cenX)*self::MY_ARC; + $yt2 = $cenY+($ext2Y-$cenY); + } else { + $xt1 = $cenX+($ext2X-$cenX)*self::MY_ARC; + $yt1 = $cenY+($ext1Y-$cenY); + $xt2 = $cenX+($ext2X-$cenX); + $yt2 = $cenY+($ext1Y-$cenY)*self::MY_ARC; + } + $path.= sprintf('%.2F %.2F m ', $ext1X, $ext1Y); + $path.= sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $xt1, $yt1, $xt2, $yt2, $ext2X, $ext2Y); + $path.= sprintf('%.2F %.2F l ', $intX, $intY); + $path.= sprintf('%.2F %.2F l ', $ext1X, $ext1Y); + + // draw the curve + $this->_out($path . 'f'); + } + + /** + * Start a transformation + * + * @access public + */ + public function startTransform() + { + $this->_out('q'); + } + + /** + * Stop a transformation + * + * @access public + */ + public function stopTransform() + { + $this->_out('Q'); + } + + /** + * add a Translate transformation + * + * @param float $Tx + * @param float $Ty + * @access public + */ + public function setTranslate($xT, $yT) + { + // Matrix for Translate + $tm[0]=1; + $tm[1]=0; + $tm[2]=0; + $tm[3]=1; + $tm[4]=$xT*$this->k; + $tm[5]=-$yT*$this->k; + + // apply the Transform Matric + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5])); + } + + /** + * add a Rotate transformation + * + * @param float $angle + * @param float $Cx + * @param float $Cy + * @access public + */ + public function setRotation($angle, $xC=null, $yC=null) + { + // if no center, rotate around the current posiition + if($xC === null) $xC=$this->x; + if($yC === null) $yC=$this->y; + + // prepare the coordinate + $yC=($this->h-$yC)*$this->k; + $xC*=$this->k; + + // Matrix for Rotate + $tm[0]=cos(deg2rad($angle)); + $tm[1]=sin(deg2rad($angle)); + $tm[2]=-$tm[1]; + $tm[3]=$tm[0]; + $tm[4]=$xC+$tm[1]*$yC-$tm[0]*$xC; + $tm[5]=$yC-$tm[0]*$yC-$tm[1]*$xC; + + // apply the Transform Matric + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5])); + } + + /** + * we redifine the original SetX method, because we don't want the automatic treatment. + * It is HTML2PDF that make the treatment + * + * @param float $x + * @param boolean $rtloff NOT USED + * @access public + */ + public function SetX($x, $rtloff=false) + { + $this->x=$x; + } + + /** + * we redifine the original SetY method, because we don't want the automatic treatment. + * It is HTML2PDF that make the treatment + * + * @param float $y + * @param boolean $resetx Reset the X position + * @param boolean $rtloff NOT USED + * @access public + */ + public function SetY($y, $resetx=true, $rtloff=false) + { + if ($resetx) + $this->x=$this->lMargin; + + $this->y=$y; + } + + /** + * we redifine the original SetXY method, because we don't want the automatic treatment. + * It is HTML2PDF that make the treatment + * + * @param integer $x + * @param integer $y + * @param boolean $rtloff NOT USED + * @access public + */ + public function SetXY($x, $y, $rtloff=false) + { + $this->x=$x; + $this->y=$y; + } + + /** + * multiple public accessor because HTML2PDF need to use TCPDF without being a extend of it + * + * @param mixed + * @return mixed + * @access public + */ + public function getK() + { + return $this->k; + } + public function getW() + { + return $this->w; + } + public function getH() + { + return $this->h; + } + public function getlMargin() + { + return $this->lMargin; + } + public function getrMargin() + { + return $this->rMargin; + } + public function gettMargin() + { + return $this->tMargin; + } + public function getbMargin() + { + return $this->bMargin; + } + public function setbMargin($v) + { + $this->bMargin=$v; + } + + /** + * SVG - Convert a SVG Style in PDF Style + * + * @param array $styles SVG Style + * @return string PDF style + * @access public + */ + public function svgSetStyle($styles) + { + // init the PDF style + $style = ''; + + // Style : fill + if ($styles['fill']) { + $this->setFillColorArray($styles['fill']); + $style.= 'F'; + } + + // Style : stroke + if ($styles['stroke'] && $styles['stroke-width']) { + $this->SetDrawColorArray($styles['stroke']); + $this->SetLineWidth($styles['stroke-width']); + $style.= 'D'; + } + + // Style : opacity + if ($styles['fill-opacity']) { + $this->SetAlpha($styles['fill-opacity']); + } + + return $style; + } + + /** + * SVG - make a Rectangle + * + * @param float $x + * @param float $y + * @param float $w + * @param float $h + * @param string $style PDF Style + * @access public + */ + public function svgRect($x, $y, $w, $h, $style) + { + // prepare the 4 corners + $x1=$x; + $x2=$x+$w; + $x3=$x+$w; + $x4=$x; + + $y1=$y; + $y2=$y; + $y3=$y+$h; + $y4=$y+$h; + + // get the Closing operator from the PDF Style + if($style=='F') $op='f'; + elseif($style=='FD' || $style=='DF') $op='B'; + else $op='S'; + + // drawing + $this->_Point($x1, $y1, true); + $this->_Line($x2, $y2, true); + $this->_Line($x3, $y3, true); + $this->_Line($x4, $y4, true); + $this->_Line($x1, $y1, true); + $this->_out($op); + } + + /** + * SVG - make a Line + * + * @param float $x1 + * @param float $y1 + * @param float $x2 + * @param float $y2 + * @access public + */ + public function svgLine($x1, $y1, $x2, $y2) + { + // get the Closing operator + $op='S'; + + // drawing + $this->_Point($x1, $y1, true); + $this->_Line($x2, $y2, true); + $this->_out($op); + } + + /** + * SVG - make a Ellipse + * + * @param float $x0 x Center + * @param float $y0 y Center + * @param float $rx x radius + * @param float $ry y radius + * @param string $style PDF Style + * @access public + */ + public function svgEllipse($x0, $y0, $rx, $ry, $style) + { + // get the Closing operator from the PDF Style + if($style=='F') $op='f'; + elseif($style=='FD' || $style=='DF') $op='B'; + else $op='S'; + + // drawing + $this->_Arc($x0, $y0, $rx, $ry, 0, 2*M_PI, true, true, true); + $this->_out($op); + } + + /** + * SVG - make a Advanced Polygone + * + * @param array $actions list of actions + * @param string $style PDF Style + * @access public + */ + public function svgPolygone($actions, $style) + { + // get the Closing operator from the PDF Style + if($style=='F') $op='f'; + elseif($style=='FD' || $style=='DF') $op='B'; + else $op='S'; + + // To save the First action and the last point + $first = array('', 0, 0); + $last = array(0, 0, 0, 0); + + foreach ($actions as $action) { + switch($action[0]) + { + // Start the Path + case 'M': + case 'm': + $first = $action; + $x = $action[1]; $y = $action[2]; $xc = $x; $yc = $y; + $this->_Point($x, $y, true); + break; + + // Close the Path + case 'Z': + case 'z': + $x = $first[1]; $y = $first[2]; $xc = $x; $yc = $y; + $this->_Line($x, $y, true); + break; + + // Make a Line (new point) + case 'L': + $x = $action[1]; $y = $action[2]; $xc = $x; $yc = $y; + $this->_Line($x, $y, true); + break; + + // Make a Line (vector from last point) + case 'l': + $x = $last[0]+$action[1]; $y = $last[1]+$action[2]; $xc = $x; $yc = $y; + $this->_Line($x, $y, true); + break; + + // Make a Horizontal Line (new point) + case 'H': + $x = $action[1]; $y = $last[1]; $xc = $x; $yc = $y; + $this->_Line($x, $y, true); + break; + + // Make a Horisontal Line (vector from last point) + case 'h': + $x = $last[0]+$action[1]; $y = $last[1]; $xc = $x; $yc = $y; + $this->_Line($x, $y, true); + break; + + // Make a Vertical Line (new point) + case 'V': + $x = $last[0]; $y = $action[1]; $xc = $x; $yc = $y; + $this->_Line($x, $y, true); + break; + + // Make a Vertical Line (vector from last point) + case 'v': + $x = $last[0]; $y = $last[1]+$action[1]; $xc = $x; $yc = $y; + $this->_Line($x, $y, true); + break; + + // Make a Arc (new point) + case 'A': + $rx = $action[1]; // rx + $ry = $action[2]; // ry + $a = $action[3]; // deviation angle of the axis X + $l = $action[4]; // large-arc-flag + $s = $action[5]; // sweep-flag + $x1 = $last[0]; // begin x + $y1 = $last[1]; // begin y + $x2 = $action[6]; // final x + $y2 = $action[7]; // final y + + $this->_Arc2($x1, $y1, $x2, $y2, $rx, $ry, $a, $l, $s, true); + $x = $x2; $y = $y2; $xc = $x; $yc = $y; + break; + + // Make a Arc (vector from last point) + case 'a': + $rx = $action[1]; // rx + $ry = $action[2]; // ry + $a = $action[3]; // deviation angle of the axis X + $l = $action[4]; // large-arc-flag + $s = $action[5]; // sweep-flag + $x1 = $last[0]; // begin x + $y1 = $last[1]; // begin y + $x2 = $last[0]+$action[6]; // final x + $y2 = $last[1]+$action[7]; // final y + + $this->_Arc2($x1, $y1, $x2, $y2, $rx, $ry, $a, $l, $s, true); + $x = $x2; $y = $y2; $xc = $x; $yc = $y; + break; + + // Make a Bezier Curve (new point) + case 'C': + $x1 = $action[1]; + $y1 = $action[2]; + $x2 = $action[3]; + $y2 = $action[4]; + $xf = $action[5]; + $yf = $action[6]; + $this->_Curve($x1, $y1, $x2, $y2, $xf, $yf, true); + $x = $xf; $y = $yf; $xc = $x2; $yc = $y2; + break; + + // Make a Bezier Curve (vector from last point) + case 'c': + $x1 = $last[0]+$action[1]; + $y1 = $last[1]+$action[2]; + $x2 = $last[0]+$action[3]; + $y2 = $last[1]+$action[4]; + $xf = $last[0]+$action[5]; + $yf = $last[1]+$action[6]; + $this->_Curve($x1, $y1, $x2, $y2, $xf, $yf, true); + $x = $xf; $y = $yf; $xc = $x2; $yc = $y2; + break; + + // Unknown Path + default: + throw new HTML2PDF_exception(0, 'SVG Path Error : ['.$action[0].'] unkown'); + } + + // save the last point + $last = array($x, $y, $xc, $yc); + } + + // finish the path + $this->_out($op); + } + + /** + * SVG - go to a point + * + * @param float $x + * @param float $y + * @param boolean $trans apply transformation + * @access protected + */ + protected function _Point($x, $y, $trans = false) + { + if ($trans) $this->ptTransform($x, $y); + + $this->_out(sprintf('%.2F %.2F m', $x, $y)); + } + + /** + * SVG - make a line from the last point to (x,y) + * + * @param float $x + * @param float $y + * @param boolean $trans apply transformation + * @access protected + */ + protected function _Line($x, $y, $trans = false) + { + if ($trans) $this->ptTransform($x, $y); + + $this->_out(sprintf('%.2F %.2F l', $x, $y)); + } + + /** + * SVG - make a bezier curve from the last point to (xf,yf), with the 2 direction points (x1,y1) and (x2,y2) + * + * @param float $x1 + * @param float $y1 + * @param float $x2 + * @param float $y2 + * @param float $xf + * @param float $yf + * @param boolean $trans apply transformation + * @access protected + */ + protected function _Curve($x1, $y1, $x2, $y2, $xf, $yf, $trans = false) + { + if ($trans) { + $this->ptTransform($x1, $y1); + $this->ptTransform($x2, $y2); + $this->ptTransform($xf, $yf); + } + $this->_out(sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c', $x1, $y1, $x2, $y2, $xf, $yf)); + } + + /** + * SVG - make a arc with Center, Radius, from angleBegin to angleEnd + * + * @param float $xc + * @param float $yc + * @param float $rx + * @param float $ry + * @param float $angleBegin in radians + * @param float $angleEng in radians + * @param boolean $direction + * @param boolean $drawFirst, true => add the first point + * @param boolean $trans apply transformation + * @access protected + */ + protected function _Arc( + $xc, + $yc, + $rx, + $ry, + $angleBegin, + $angleEnd, + $direction = true, + $drawFirst = true, + $trans=false) + { + // if we want the no trigo direction : add 2PI to the begin angle, to invert the direction + if (!$direction) $angleBegin+= M_PI*2.; + + // cut in segment to convert in berize curv + $dt = ($angleEnd - $angleBegin)/self::ARC_NB_SEGMENT; + $dtm = $dt/3; + + // center of the arc + $x0 = $xc; $y0 = $yc; + + // calculing the first point + $t1 = $angleBegin; + $a0 = $x0 + ($rx * cos($t1)); + $b0 = $y0 + ($ry * sin($t1)); + $c0 = -$rx * sin($t1); + $d0 = $ry * cos($t1); + + // if drawFirst => draw the first point + if ($drawFirst) $this->_Point($a0, $b0, $trans); + + // foreach segment + for ($i = 1; $i <= self::ARC_NB_SEGMENT; $i++) { + // calculing the next point + $t1 = ($i * $dt)+$angleBegin; + $a1 = $x0 + ($rx * cos($t1)); + $b1 = $y0 + ($ry * sin($t1)); + $c1 = -$rx * sin($t1); + $d1 = $ry * cos($t1); + + // make the bezier curv + $this->_Curve( + $a0 + ($c0 * $dtm), $b0 + ($d0 * $dtm), + $a1 - ($c1 * $dtm), $b1 - ($d1 * $dtm), + $a1, $b1, + $trans + ); + + // save the point + $a0 = $a1; + $b0 = $b1; + $c0 = $c1; + $d0 = $d1; + } + } + + /** + * SVG - make a arc from Pt1 to Pt2, with Radius + * + * @param float $x1 + * @param float $y1 + * @param float $x2 + * @param float $y2 + * @param float $rx + * @param float $ry + * @param float $angle deviation angle of the axis X + * @param boolean $l large-arc-flag + * @param boolean $s sweep-flag + * @param boolean $trans apply transformation + * @access protected + */ + protected function _Arc2($x1, $y1, $x2, $y2, $rx, $ry, $angle=0., $l=0, $s=0, $trans = false) + { + // array to stock the parameters + $v = array(); + + // the original values + $v['x1'] = $x1; + $v['y1'] = $y1; + $v['x2'] = $x2; + $v['y2'] = $y2; + $v['rx'] = $rx; + $v['ry'] = $ry; + + // rotate with the deviation angle of the axis X + $v['xr1'] = $v['x1']*cos($angle) - $v['y1']*sin($angle); + $v['yr1'] = $v['x1']*sin($angle) + $v['y1']*cos($angle); + $v['xr2'] = $v['x2']*cos($angle) - $v['y2']*sin($angle); + $v['yr2'] = $v['x2']*sin($angle) + $v['y2']*cos($angle); + + // the normalized vector + $v['Xr1'] = $v['xr1']/$v['rx']; + $v['Yr1'] = $v['yr1']/$v['ry']; + $v['Xr2'] = $v['xr2']/$v['rx']; + $v['Yr2'] = $v['yr2']/$v['ry']; + $v['dXr'] = $v['Xr2']-$v['Xr1']; + $v['dYr'] = $v['Yr2']-$v['Yr1']; + $v['D'] = $v['dXr']*$v['dXr'] + $v['dYr']*$v['dYr']; + + // if |vector| is Null, or if |vector| > 2 : impossible to make a arc => Line + if ($v['D']==0 || $v['D']>4) { + $this->_Line($x2, $y2, $trans); + return false; + } + + // convert paramters for make a arc with Center, Radius, from angleBegin to angleEnd + $v['s1'] = array(); + $v['s1']['t'] = sqrt((4.-$v['D'])/$v['D']); + $v['s1']['Xr'] = ($v['Xr1']+$v['Xr2'])/2. + $v['s1']['t']*($v['Yr2']-$v['Yr1'])/2.; + $v['s1']['Yr'] = ($v['Yr1']+$v['Yr2'])/2. + $v['s1']['t']*($v['Xr1']-$v['Xr2'])/2.; + $v['s1']['xr'] = $v['s1']['Xr']*$v['rx']; + $v['s1']['yr'] = $v['s1']['Yr']*$v['ry']; + $v['s1']['x'] = $v['s1']['xr']*cos($angle)+$v['s1']['yr']*sin($angle); + $v['s1']['y'] =-$v['s1']['xr']*sin($angle)+$v['s1']['yr']*cos($angle); + $v['s1']['a1'] = atan2($v['y1']-$v['s1']['y'], $v['x1']-$v['s1']['x']); + $v['s1']['a2'] = atan2($v['y2']-$v['s1']['y'], $v['x2']-$v['s1']['x']); + if ($v['s1']['a1']>$v['s1']['a2']) $v['s1']['a1']-=2*M_PI; + + $v['s2'] = array(); + $v['s2']['t'] = -$v['s1']['t']; + $v['s2']['Xr'] = ($v['Xr1']+$v['Xr2'])/2. + $v['s2']['t']*($v['Yr2']-$v['Yr1'])/2.; + $v['s2']['Yr'] = ($v['Yr1']+$v['Yr2'])/2. + $v['s2']['t']*($v['Xr1']-$v['Xr2'])/2.; + $v['s2']['xr'] = $v['s2']['Xr']*$v['rx']; + $v['s2']['yr'] = $v['s2']['Yr']*$v['ry']; + $v['s2']['x'] = $v['s2']['xr']*cos($angle)+$v['s2']['yr']*sin($angle); + $v['s2']['y'] =-$v['s2']['xr']*sin($angle)+$v['s2']['yr']*cos($angle); + $v['s2']['a1'] = atan2($v['y1']-$v['s2']['y'], $v['x1']-$v['s2']['x']); + $v['s2']['a2'] = atan2($v['y2']-$v['s2']['y'], $v['x2']-$v['s2']['x']); + if ($v['s2']['a1']>$v['s2']['a2']) $v['s2']['a1']-=2*M_PI; + + if (!$l) { + if ($s) { + $xc = $v['s2']['x']; + $yc = $v['s2']['y']; + $a1 = $v['s2']['a1']; + $a2 = $v['s2']['a2']; + $this->_Arc($xc, $yc, $rx, $ry, $a1, $a2, true, false, $trans); + } else { + $xc = $v['s1']['x']; + $yc = $v['s1']['y']; + $a1 = $v['s1']['a1']; + $a2 = $v['s1']['a2']; + $this->_Arc($xc, $yc, $rx, $ry, $a1, $a2, false, false, $trans); + } + } else { + if ($s) { + $xc = $v['s1']['x']; + $yc = $v['s1']['y']; + $a1 = $v['s1']['a1']; + $a2 = $v['s1']['a2']; + $this->_Arc($xc, $yc, $rx, $ry, $a1, $a2, true, false, $trans); + } else { + $xc = $v['s2']['x']; + $yc = $v['s2']['y']; + $a1 = $v['s2']['a1']; + $a2 = $v['s2']['a2']; + $this->_Arc($xc, $yc, $rx, $ry, $a1, $a2, false, false, $trans); + } + } + } + + /** + * SVG - transform the point (reference) + * + * @param float &$x + * @param float &$y + * @param boolean $trans true => convert into PDF unit + * @return boolean + * @access public + */ + public function ptTransform(&$x, &$y, $trans=true) + { + // load the last Transfomation Matrix + $nb = count($this->_transf); + if ($nb) $m = $this->_transf[$nb-1]; + else $m = array(1,0,0,1,0,0); + + // apply the Transformation Matrix + list($x,$y) = array(($x*$m[0]+$y*$m[2]+$m[4]),($x*$m[1]+$y*$m[3]+$m[5])); + + // if true => convert into PDF unit + if ($trans) { + $x = $x*$this->k; + $y = ($this->h-$y)*$this->k; + } + + return true; + } + + /** + * SVG - add a transformation Matric + * + * @param array $n matrix + * @access public + */ + public function doTransform($n = null) + { + // get the last Transformation Matrix + $nb = count($this->_transf); + if ($nb) $m = $this->_transf[$nb-1]; + else $m = array(1,0,0,1,0,0); + + // if no transform, get the Identity Matrix + if (!$n) $n = array(1,0,0,1,0,0); + + // create the new Transformation Matrix + $this->_transf[] = array( + $m[0]*$n[0]+$m[2]*$n[1], + $m[1]*$n[0]+$m[3]*$n[1], + $m[0]*$n[2]+$m[2]*$n[3], + $m[1]*$n[2]+$m[3]*$n[3], + $m[0]*$n[4]+$m[2]*$n[5]+$m[4], + $m[1]*$n[4]+$m[3]*$n[5]+$m[5] + ); + } + + /** + * SVG - remove a transformation Matric + * + * @access public + */ + public function undoTransform() + { + array_pop($this->_transf); + } + + /** + * Convert a HTML2PDF barcode in a TCPDF barcode + * + * @param string $code code to print + * @param string $type type of barcode (see tcpdf/barcodes.php for supported formats) + * @param int $x x position in user units + * @param int $y y position in user units + * @param int $w width in user units + * @param int $h height in user units + * @param int $labelFontsize of the Test Label. If false : no Label + * @param array $color color of the foreground + * @access public + */ + public function myBarcode($code, $type, $x, $y, $w, $h, $labelFontsize, $color) + { + // the style of the barcode + $style = array( + 'position' => 'S', + 'text' => ($labelFontsize ? true : false), + 'fgcolor' => $color, + 'bgcolor' => false, + ); + + // build the barcode + $this->write1DBarcode($code, $type, $x, $y, $w, $h, '', $style, 'N'); + + // it Label => add the FontSize to the height + if ($labelFontsize) $h+= ($labelFontsize); + + // return the size of the barcode + return array($w, $h); + } + + /** + * create a automatic Index on a page + * + * @param html2pdf $obj parent object + * @param string $titre Title of the Index Page + * @param integer $sizeTitle Font size for hthe Title + * @param integer $sizeBookmark Font size for the bookmarks + * @param boolean $bookmarkTitle Bookmark the Title + * @param boolean $displayPage Display the page number for each bookmark + * @param integer $page draw the automatic Index on a specific Page. if null => add a page at the end + * @param string $fontName FontName to use + * @access public + */ + public function createIndex( + &$obj, + $titre = 'Index', + $sizeTitle = 20, + $sizeBookmark = 15, + $bookmarkTitle = true, + $displayPage = true, + $page = null, + $fontName = 'helvetica') + { + // bookmark the Title if wanted + if ($bookmarkTitle) $this->Bookmark($titre, 0, -1); + + // display the Title with the good Font size + $this->SetFont($fontName, '', $sizeTitle); + $this->Cell(0, 5, $titre, 0, 1, 'C'); + + // set the good Font size for the bookmarks + $this->SetFont($fontName, '', $sizeBookmark); + $this->Ln(10); + + // get the number of bookmarks + $size=sizeof($this->outlines); + + // get the size of the "P. xx" cell + $pageCellSize=$this->GetStringWidth('p. '.$this->outlines[$size-1]['p'])+2; + + // Foreach bookmark + for ($i=0;$i<$size;$i++) { + // if we need a new page => add a new page + if ($this->getY()+$this->FontSize>=($this->h - $this->bMargin)) { + $obj->_INDEX_NewPage($page); + $this->SetFont($fontName, '', $sizeBookmark); + } + + // Offset of the current level + $level=$this->outlines[$i]['l']; + if($level>0) $this->Cell($level*8); + + // Caption (cut to fit on the width page) + $str=$this->outlines[$i]['t']; + $strsize=$this->GetStringWidth($str); + $availableSize=$this->w-$this->lMargin-$this->rMargin-$pageCellSize-($level*8)-4; + while ($strsize>=$availableSize) { + $str=substr($str, 0, -1); + $strsize=$this->GetStringWidth($str); + } + + // if we want to display the page nmber + if ($displayPage) { + // display the Bookmark Caption + $this->Cell($strsize+2, $this->FontSize+2, $str); + + //Filling dots + $w=$this->w-$this->lMargin-$this->rMargin-$pageCellSize-($level*8)-($strsize+2); + $nb=$w/$this->GetStringWidth('.'); + $dots=str_repeat('.', $nb); + $this->Cell($w, $this->FontSize+2, $dots, 0, 0, 'R'); + + //Page number + $this->Cell($pageCellSize, $this->FontSize+2, 'p. '.$this->outlines[$i]['p'], 0, 1, 'R'); + } else { + // display the Bookmark Caption + $this->Cell($strsize+2, $this->FontSize+2, $str, 0, 1); + } + } + } + + /** + * Returns the string alias used for the total number of pages. + * + * @access public + * @return string; + * @see TCPDF::getAliasNbPages(), TCPDF::getPageGroupAlias() + */ + public function getMyAliasNbPages() + { + if ($this->_myLastPageGroupNb==0) { + return $this->getAliasNbPages(); + } else { + $old = $this->currpagegroup; + $this->currpagegroup = '{nb'.$this->_myLastPageGroupNb.'}'; + $new = $this->getPageGroupAlias(); + $this->currpagegroup = $old; + + return $new; + } + } + + /** + * Returns the current page number. + * + * @access public + * @param integer $page + * @return integer; + */ + public function getMyNumPage($page=null) + { + if ($page===null) { + $page = $this->page; + } + + if ($this->_myLastPageGroupNb==0) { + return $page; + } else { + return $page-$this->_myLastPageGroup; + } + } + + /** + * Start a new group of pages + * + * @access public + * @return integer; + * @see tcpdf::startPageGroup + */ + public function myStartPageGroup() + { + $this->_myLastPageGroup = $this->page-1; + $this->_myLastPageGroupNb++; + } + + /** + * get $_myLastPageGroup; + * + * @access public + * @return integer $_myLastPageGroup; + */ + public function getMyLastPageGroup() + { + return $this->_myLastPageGroup; + } + + /** + * set $_myLastPageGroup; + * + * @access public + * @param integer $myLastPageGroup; + */ + public function setMyLastPageGroup($myLastPageGroup) + { + $this->_myLastPageGroup = $myLastPageGroup; + } + + /** + * get $_myLastPageGroupNb; + * + * @access public + * @return integer $_myLastPageGroupNb; + */ + public function getMyLastPageGroupNb() + { + return $this->_myLastPageGroupNb; + } + + /** + * set $_myLastPageGroupNb; + * + * @access public + * @param integer $myLastPageGroupNb; + */ + public function setMyLastPageGroupNb($myLastPageGroupNb) + { + $this->_myLastPageGroupNb = $myLastPageGroupNb; + } +} diff --git a/Societes/ric/Html2pdf/lib/_class/parsingCss.class.php b/Societes/ric/Html2pdf/lib/_class/parsingCss.class.php new file mode 100755 index 00000000..2583d8f7 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_class/parsingCss.class.php @@ -0,0 +1,1812 @@ + PDF convertor + * distributed under the LGPL License + * + * @author Laurent MINGUET + * @version 4.03 + */ + +class HTML2PDF_parsingCss +{ + /** + * reference to the pdf object + * @var TCPDF + */ + protected $_pdf = null; + + protected $_htmlColor = array(); // list of the HTML colors + protected $_onlyLeft = false; // flag if we are in a sub html => only "text-align:left" is used + protected $_defaultFont = null; // default font to use if the asked font does not exist + + public $value = array(); // current values + public $css = array(); // css values + public $cssKeys = array(); // css key, for the execution order + public $table = array(); // level history + + /** + * Constructor + * + * @param &HTML2PDF_myPdf reference to the PDF $object + * @access public + */ + public function __construct(&$pdf) + { + $this->_init(); + $this->setPdfParent($pdf); + } + + /** + * Set the HTML2PDF parent object + * + * @param &HTML2PDF reference to the HTML2PDF parent $object + * @access public + */ + public function setPdfParent(&$pdf) + { + $this->_pdf = &$pdf; + } + + /** + * Inform that we want only "test-align:left" because we are in a sub HTML + * + * @access public + */ + public function setOnlyLeft() + { + $this->value['text-align'] = 'left'; + $this->_onlyLeft = true; + } + + /** + * Get the vales of the parent, if exist + * + * @return array CSS values + * @access public + */ + public function getOldValues() + { + return isset($this->table[count($this->table)-1]) ? $this->table[count($this->table)-1] : $this->value; + } + + /** + * define the Default Font to use, if the font does not exist, or if no font asked + * + * @param string default font-family. If null : Arial for no font asked, and error fot ont does not exist + * @return string old default font-family + * @access public + */ + public function setDefaultFont($default = null) + { + $old = $this->_defaultFont; + $this->_defaultFont = $default; + if ($default) $this->value['font-family'] = $default; + return $old; + } + + /** + * Init the object + * + * @access protected + */ + protected function _init() + { + // get the Web Colors from TCPDF + require(K_PATH_MAIN.'htmlcolors.php'); + $this->_htmlColor = $webcolor; + + // init the Style + $this->table = array(); + $this->value = array(); + $this->initStyle(); + + // Init the styles without legacy + $this->resetStyle(); + } + + /** + * Init the CSS Style + * + * @access public + */ + public function initStyle() + { + $this->value['id_tag'] = 'body'; // tag name + $this->value['id_name'] = null; // tag - attribute name + $this->value['id_id'] = null; // tag - attribute id + $this->value['id_class'] = null; // tag - attribute class + $this->value['id_lst'] = array('*'); // tag - list of legacy + $this->value['mini-size'] = 1.; // specific size report for sup, sub + $this->value['mini-decal'] = 0; // specific position report for sup, sub + $this->value['font-family'] = 'Arial'; + $this->value['font-bold'] = false; + $this->value['font-italic'] = false; + $this->value['font-underline'] = false; + $this->value['font-overline'] = false; + $this->value['font-linethrough'] = false; + $this->value['text-transform'] = 'none'; + $this->value['font-size'] = $this->convertToMM('10pt'); + $this->value['text-indent'] = 0; + $this->value['text-align'] = 'left'; + $this->value['vertical-align'] = 'middle'; + $this->value['line-height'] = 'normal'; + + $this->value['position'] = null; + $this->value['x'] = null; + $this->value['y'] = null; + $this->value['width'] = 0; + $this->value['height'] = 0; + $this->value['top'] = null; + $this->value['right'] = null; + $this->value['bottom'] = null; + $this->value['left'] = null; + $this->value['float'] = null; + $this->value['display'] = null; + $this->value['rotate'] = null; + $this->value['overflow'] = 'visible'; + + $this->value['color'] = array(0, 0, 0); + $this->value['background'] = array('color' => null, 'image' => null, 'position' => null, 'repeat' => null); + $this->value['border'] = array(); + $this->value['padding'] = array(); + $this->value['margin'] = array(); + $this->value['margin-auto'] = false; + + $this->value['list-style-type'] = ''; + $this->value['list-style-image'] = ''; + + $this->value['xc'] = null; + $this->value['yc'] = null; + } + + /** + * Init the CSS Style without legacy + * + * @param string tag name + * @access public + */ + public function resetStyle($tagName = '') + { + // prepare somme values + $border = $this->readBorder('solid 1px #000000'); + $units = array( + '1px' => $this->convertToMM('1px'), + '5px' => $this->convertToMM('5px'), + ); + + + // prepare the Collapse attribute + $collapse = isset($this->value['border']['collapse']) ? $this->value['border']['collapse'] : false; + if (!in_array($tagName, array('tr', 'td', 'th', 'thead', 'tbody', 'tfoot'))) $collapse = false; + + // set the global css values + $this->value['position'] = null; + $this->value['x'] = null; + $this->value['y'] = null; + $this->value['width'] = 0; + $this->value['height'] = 0; + $this->value['top'] = null; + $this->value['right'] = null; + $this->value['bottom'] = null; + $this->value['left'] = null; + $this->value['float'] = null; + $this->value['display'] = null; + $this->value['rotate'] = null; + $this->value['overflow'] = 'visible'; + $this->value['background'] = array('color' => null, 'image' => null, 'position' => null, 'repeat' => null); + $this->value['border'] = array( + 't' => $this->readBorder('none'), + 'r' => $this->readBorder('none'), + 'b' => $this->readBorder('none'), + 'l' => $this->readBorder('none'), + 'radius' => array( + 'tl' => array(0, 0), + 'tr' => array(0, 0), + 'br' => array(0, 0), + 'bl' => array(0, 0) + ), + 'collapse' => $collapse, + ); + + // specific values for some tags + if (!in_array($tagName, array('h1', 'h2', 'h3', 'h4', 'h5', 'h6'))) { + $this->value['margin'] = array('t'=>0,'r'=>0,'b'=>0,'l'=>0); + } + + if (in_array($tagName, array('input', 'select', 'textarea'))) { + $this->value['border']['t'] = null; + $this->value['border']['r'] = null; + $this->value['border']['b'] = null; + $this->value['border']['l'] = null; + } + + if ($tagName=='p') { + $this->value['margin']['t'] = null; + $this->value['margin']['b'] = null; + } + if ($tagName=='blockquote') { + $this->value['margin']['t'] = 3; + $this->value['margin']['r'] = 3; + $this->value['margin']['b'] = 3; + $this->value['margin']['l'] = 6; + } + $this->value['margin-auto'] = false; + + if (in_array($tagName, array('blockquote', 'div', 'fieldset'))) { + $this->value['vertical-align'] = 'top'; + } + + if (in_array($tagName, array('fieldset', 'legend'))) { + $this->value['border'] = array( + 't' => $border, + 'r' => $border, + 'b' => $border, + 'l' => $border, + 'radius' => array( + 'tl' => array($units['5px'], $units['5px']), + 'tr' => array($units['5px'], $units['5px']), + 'br' => array($units['5px'], $units['5px']), + 'bl' => array($units['5px'], $units['5px']) + ), + 'collapse' => false, + ); + } + + if (in_array($tagName, array('ul', 'li'))) { + $this->value['list-style-type'] = ''; + $this->value['list-style-image'] = ''; + } + + if (!in_array($tagName, array('tr', 'td'))) { + $this->value['padding'] = array( + 't' => 0, + 'r' => 0, + 'b' => 0, + 'l' => 0 + ); + } else { + $this->value['padding'] = array( + 't' => $units['1px'], + 'r' => $units['1px'], + 'b' => $units['1px'], + 'l' => $units['1px'] + ); + } + + if ($tagName=='hr') { + $this->value['border'] = array( + 't' => $border, + 'r' => $border, + 'b' => $border, + 'l' => $border, + 'radius' => array( + 'tl' => array(0, 0), + 'tr' => array(0, 0), + 'br' => array(0, 0), + 'bl' => array(0, 0) + ), + 'collapse' => false, + ); + $this->convertBackground('#FFFFFF', $this->value['background']); + } + + $this->value['xc'] = null; + $this->value['yc'] = null; + } + + /** + * Init the PDF Font + * + * @access public + */ + public function fontSet() + { + $family = strtolower($this->value['font-family']); + + $b = ($this->value['font-bold'] ? 'B' : ''); + $i = ($this->value['font-italic'] ? 'I' : ''); + $u = ($this->value['font-underline'] ? 'U' : ''); + $d = ($this->value['font-linethrough'] ? 'D' : ''); + $o = ($this->value['font-overline'] ? 'O' : ''); + + // font style + $style = $b.$i; + + if ($this->_defaultFont) { + if($family=='arial') + $family='helvetica'; + elseif($family=='symbol' || $family=='zapfdingbats') + $style=''; + + $fontkey = $family.$style; + if (!$this->_pdf->isLoadedFont($fontkey)) + $family = $this->_defaultFont; + } + + if($family=='arial') + $family='helvetica'; + elseif($family=='symbol' || $family=='zapfdingbats') + $style=''; + + // complete style + $style.= $u.$d.$o; + + // size : mm => pt + $size = $this->value['font-size']; + $size = 72 * $size / 25.4; + + // apply the font + $this->_pdf->SetFont($family, $style, $this->value['mini-size']*$size); + $this->_pdf->setTextColorArray($this->value['color']); + if ($this->value['background']['color']) + $this->_pdf->setFillColorArray($this->value['background']['color']); + else + $this->_pdf->setFillColor(255); + } + + /** + * add a level in the CSS history + * + * @access public + */ + public function save() + { + array_push($this->table, $this->value); + } + + /** + * remove a level in the CSS history + * + * @access public + */ + public function load() + { + if (count($this->table)) { + $this->value = array_pop($this->table); + } + } + + /** + * restore the Y positiony (used after a span) + * + * @access public + */ + public function restorePosition() + { + if ($this->value['y']==$this->_pdf->getY()) $this->_pdf->setY($this->value['yc'], false); + } + + /** + * set the New position for the current Tag + * + * @access public + */ + public function setPosition() + { + // get the current position + $currentX = $this->_pdf->getX(); + $currentY = $this->_pdf->getY(); + + // save it + $this->value['xc'] = $currentX; + $this->value['yc'] = $currentY; + + if ($this->value['position']=='relative' || $this->value['position']=='absolute') { + if ($this->value['right']!==null) { + $x = $this->getLastWidth(true) - $this->value['right'] - $this->value['width']; + if ($this->value['margin']['r']) $x-= $this->value['margin']['r']; + } else { + $x = $this->value['left']; + if ($this->value['margin']['l']) $x+= $this->value['margin']['l']; + } + + if ($this->value['bottom']!==null) { + $y = $this->getLastHeight(true) - $this->value['bottom'] - $this->value['height']; + if ($this->value['margin']['b']) $y-= $this->value['margin']['b']; + } else { + $y = $this->value['top']; + if ($this->value['margin']['t']) $y+= $this->value['margin']['t']; + } + + if ($this->value['position']=='relative') { + $this->value['x'] = $currentX + $x; + $this->value['y'] = $currentY + $y; + } else { + $this->value['x'] = $this->_getLastAbsoluteX()+$x; + $this->value['y'] = $this->_getLastAbsoluteY()+$y; + } + } else { + $this->value['x'] = $currentX; + $this->value['y'] = $currentY; + if ($this->value['margin']['l']) $this->value['x']+= $this->value['margin']['l']; + if ($this->value['margin']['t']) $this->value['y']+= $this->value['margin']['t']; + } + + // save the new position + $this->_pdf->setXY($this->value['x'], $this->value['y']); + } + + /** + * Analise the CSS style to convert it into Form style + * + * @access public + * @param array styles + */ + public function getFormStyle() + { + $prop = array(); + + $prop['alignment'] = $this->value['text-align']; + + if (isset($this->value['background']['color']) && is_array($this->value['background']['color'])) { + $prop['fillColor'] = $this->value['background']['color']; + } + + if (isset($this->value['border']['t']['color'])) { + $prop['strokeColor'] = $this->value['border']['t']['color']; + } + + if (isset($this->value['border']['t']['width'])) { + $prop['lineWidth'] = $this->value['border']['t']['width']; + } + + if (isset($this->value['border']['t']['type'])) { + $prop['borderStyle'] = $this->value['border']['t']['type']; + } + + if (!empty($this->value['color'])) { + $prop['textColor'] = $this->value['color']; + } + + if (!empty($this->value['font-size'])) { + $prop['textSize'] = $this->value['font-size']; + } + + return $prop; + } + + /** + * Analise the CSS style to convert it into SVG style + * + * @access public + * @param string tag name + * @param array styles + */ + public function getSvgStyle($tagName, &$param) + { + // prepare + $tagName = strtolower($tagName); + $id = isset($param['id']) ? strtolower(trim($param['id'])) : null; if (!$id) $id = null; + $name = isset($param['name']) ? strtolower(trim($param['name'])) : null; if (!$name) $name = null; + + // read the class attribute + $class = array(); + $tmp = isset($param['class']) ? strtolower(trim($param['class'])) : ''; + $tmp = explode(' ', $tmp); + foreach ($tmp as $k => $v) { + $v = trim($v); + if ($v) $class[] = $v; + } + + // identify the tag, and the direct styles + $this->value['id_tag'] = $tagName; + $this->value['id_name'] = $name; + $this->value['id_id'] = $id; + $this->value['id_class'] = $class; + $this->value['id_lst'] = array(); + $this->value['id_lst'][] = '*'; + $this->value['id_lst'][] = $tagName; + if (!isset($this->value['svg'])) { + $this->value['svg'] = array( + 'stroke' => null, + 'stroke-width' => $this->convertToMM('1pt'), + 'fill' => null, + 'fill-opacity' => null, + ); + } + + if (count($class)) { + foreach ($class as $v) { + $this->value['id_lst'][] = '*.'.$v; + $this->value['id_lst'][] = '.'.$v; + $this->value['id_lst'][] = $tagName.'.'.$v; + } + } + if ($id) { + $this->value['id_lst'][] = '*#'.$id; + $this->value['id_lst'][] = '#'.$id; + $this->value['id_lst'][] = $tagName.'#'.$id; + } + + // CSS style + $styles = $this->_getFromCSS(); + + // adding the style from the tag + $styles = array_merge($styles, $param['style']); + + if (isset($styles['stroke'])) $this->value['svg']['stroke'] = $this->convertToColor($styles['stroke'], $res); + if (isset($styles['stroke-width'])) $this->value['svg']['stroke-width'] = $this->convertToMM($styles['stroke-width']); + if (isset($styles['fill'])) $this->value['svg']['fill'] = $this->convertToColor($styles['fill'], $res); + if (isset($styles['fill-opacity'])) $this->value['svg']['fill-opacity'] = 1.*$styles['fill-opacity']; + + return $this->value['svg']; + } + + /** + * analyse the css properties from the HTML parsing + * + * @access public + * @param string $tagName + * @param array $param + * @param array $legacy + */ + public function analyse($tagName, &$param, $legacy = null) + { + // prepare the informations + $tagName = strtolower($tagName); + $id = isset($param['id']) ? strtolower(trim($param['id'])) : null; if (!$id) $id = null; + $name = isset($param['name']) ? strtolower(trim($param['name'])) : null; if (!$name) $name = null; + + // get the class names to use + $class = array(); + $tmp = isset($param['class']) ? strtolower(trim($param['class'])) : ''; + $tmp = explode(' ', $tmp); + foreach ($tmp as $k => $v) { + $v = trim($v); + if ($v) $class[] = $v; + } + + // prepare the values, and the list of css tags to identify + $this->value['id_tag'] = $tagName; + $this->value['id_name'] = $name; + $this->value['id_id'] = $id; + $this->value['id_class'] = $class; + $this->value['id_lst'] = array(); + $this->value['id_lst'][] = '*'; + $this->value['id_lst'][] = $tagName; + if (count($class)) { + foreach ($class as $v) { + $this->value['id_lst'][] = '*.'.$v; + $this->value['id_lst'][] = '.'.$v; + $this->value['id_lst'][] = $tagName.'.'.$v; + } + } + if ($id) { + $this->value['id_lst'][] = '*#'.$id; + $this->value['id_lst'][] = '#'.$id; + $this->value['id_lst'][] = $tagName.'#'.$id; + } + + // get the css styles from class + $styles = $this->_getFromCSS(); + + // merge with the css styles from tag + $styles = array_merge($styles, $param['style']); + if (isset($param['allwidth']) && !isset($styles['width'])) $styles['width'] = '100%'; + + // reset some styles, depending on the tag name + $this->resetStyle($tagName); + + // add the legacy values + if ($legacy) { + foreach ($legacy as $legacyName => $legacyValue) { + if (is_array($legacyValue)) { + foreach($legacyValue as $legacy2Name => $legacy2Value) + $this->value[$legacyName][$legacy2Name] = $legacy2Value; + } else { + $this->value[$legacyName] = $legacyValue; + } + } + } + + // some flags + $correctWidth = false; + $noWidth = true; + + // read all the css styles + foreach ($styles as $nom => $val) { + switch($nom) + { + case 'font-family': + $val = explode(',', $val); + $val = trim($val[0]); + if ($val) $this->value['font-family'] = $val; + break; + + case 'font-weight': + $this->value['font-bold'] = ($val=='bold'); + break; + + case 'font-style': + $this->value['font-italic'] = ($val=='italic'); + break; + + case 'text-decoration': + $val = explode(' ', $val); + $this->value['font-underline'] = (in_array('underline', $val)); + $this->value['font-overline'] = (in_array('overline', $val)); + $this->value['font-linethrough'] = (in_array('line-through', $val)); + break; + + case 'text-indent': + $this->value['text-indent'] = $this->convertToMM($val); + break; + + case 'text-transform': + if (!in_array($val, array('none', 'capitalize', 'uppercase', 'lowercase'))) $val = 'none'; + $this->value['text-transform'] = $val; + break; + + case 'font-size': + $val = $this->convertToMM($val, $this->value['font-size']); + if ($val) $this->value['font-size'] = $val; + break; + + case 'color': + $res = null; + $this->value['color'] = $this->convertToColor($val, $res); + if ($tagName=='hr') { + $this->value['border']['l']['color'] = $this->value['color']; + $this->value['border']['t']['color'] = $this->value['color']; + $this->value['border']['r']['color'] = $this->value['color']; + $this->value['border']['b']['color'] = $this->value['color']; + } + break; + + case 'text-align': + $val = strtolower($val); + if (!in_array($val, array('left', 'right', 'center', 'justify', 'li_right'))) $val = 'left'; + $this->value['text-align'] = $val; + break; + + case 'vertical-align': + $this->value['vertical-align'] = $val; + break; + + case 'width': + $this->value['width'] = $this->convertToMM($val, $this->getLastWidth()); + if ($this->value['width'] && substr($val, -1)=='%') $correctWidth=true; + $noWidth = false; + break; + + case 'height': + $this->value['height'] = $this->convertToMM($val, $this->getLastHeight()); + break; + + case 'line-height': + if (preg_match('/^[0-9\.]+$/isU', $val)) $val = floor($val*100).'%'; + $this->value['line-height'] = $val; + break; + + case 'rotate': + if (!in_array($val, array(0, -90, 90, 180, 270, -180, -270))) $val = null; + if ($val<0) $val+= 360; + $this->value['rotate'] = $val; + break; + + case 'overflow': + if (!in_array($val, array('visible', 'hidden'))) $val = 'visible'; + $this->value['overflow'] = $val; + break; + + case 'padding': + $val = explode(' ', $val); + foreach ($val as $k => $v) { + $v = trim($v); + if ($v!='') { + $val[$k] = $v; + } else { + unset($val[$k]); + } + } + $val = array_values($val); + $this->_duplicateBorder($val); + $this->value['padding']['t'] = $this->convertToMM($val[0], 0); + $this->value['padding']['r'] = $this->convertToMM($val[1], 0); + $this->value['padding']['b'] = $this->convertToMM($val[2], 0); + $this->value['padding']['l'] = $this->convertToMM($val[3], 0); + break; + + case 'padding-top': + $this->value['padding']['t'] = $this->convertToMM($val, 0); + break; + + case 'padding-right': + $this->value['padding']['r'] = $this->convertToMM($val, 0); + break; + + case 'padding-bottom': + $this->value['padding']['b'] = $this->convertToMM($val, 0); + break; + + case 'padding-left': + $this->value['padding']['l'] = $this->convertToMM($val, 0); + break; + + case 'margin': + if ($val=='auto') { + $this->value['margin-auto'] = true; + break; + } + $val = explode(' ', $val); + foreach ($val as $k => $v) { + $v = trim($v); + if ($v!='') { + $val[$k] = $v; + } else { + unset($val[$k]); + } + } + $val = array_values($val); + $this->_duplicateBorder($val); + $this->value['margin']['t'] = $this->convertToMM($val[0], 0); + $this->value['margin']['r'] = $this->convertToMM($val[1], 0); + $this->value['margin']['b'] = $this->convertToMM($val[2], 0); + $this->value['margin']['l'] = $this->convertToMM($val[3], 0); + break; + + case 'margin-top': + $this->value['margin']['t'] = $this->convertToMM($val, 0); + break; + + case 'margin-right': + $this->value['margin']['r'] = $this->convertToMM($val, 0); + break; + + case 'margin-bottom': + $this->value['margin']['b'] = $this->convertToMM($val, 0); + break; + + case 'margin-left': + $this->value['margin']['l'] = $this->convertToMM($val, 0); + break; + + case 'border': + $val = $this->readBorder($val); + $this->value['border']['t'] = $val; + $this->value['border']['r'] = $val; + $this->value['border']['b'] = $val; + $this->value['border']['l'] = $val; + break; + + case 'border-style': + $val = explode(' ', $val); + foreach ($val as $valK => $valV) { + if (!in_array($valV, array('solid', 'dotted', 'dashed'))) { + $val[$valK] = null; + } + } + $this->_duplicateBorder($val); + if ($val[0]) $this->value['border']['t']['type'] = $val[0]; + if ($val[1]) $this->value['border']['r']['type'] = $val[1]; + if ($val[2]) $this->value['border']['b']['type'] = $val[2]; + if ($val[3]) $this->value['border']['l']['type'] = $val[3]; + break; + + case 'border-top-style': + if (in_array($val, array('solid', 'dotted', 'dashed'))) { + $this->value['border']['t']['type'] = $val; + } + break; + + case 'border-right-style': + if (in_array($val, array('solid', 'dotted', 'dashed'))) { + $this->value['border']['r']['type'] = $val; + } + break; + + case 'border-bottom-style': + if (in_array($val, array('solid', 'dotted', 'dashed'))) { + $this->value['border']['b']['type'] = $val; + } + break; + + case 'border-left-style': + if (in_array($val, array('solid', 'dotted', 'dashed'))) + $this->value['border']['l']['type'] = $val; + break; + + case 'border-color': + $res = false; + $val = preg_replace('/,[\s]+/', ',', $val); + $val = explode(' ', $val); + foreach ($val as $valK => $valV) { + $val[$valK] = $this->convertToColor($valV, $res); + if (!$res) { + $val[$valK] = null; + } + } + $this->_duplicateBorder($val); + if (is_array($val[0])) $this->value['border']['t']['color'] = $val[0]; + if (is_array($val[1])) $this->value['border']['r']['color'] = $val[1]; + if (is_array($val[2])) $this->value['border']['b']['color'] = $val[2]; + if (is_array($val[3])) $this->value['border']['l']['color'] = $val[3]; + + break; + + case 'border-top-color': + $res = false; + $val = $this->convertToColor($val, $res); + if ($res) $this->value['border']['t']['color'] = $val; + break; + + case 'border-right-color': + $res = false; + $val = $this->convertToColor($val, $res); + if ($res) $this->value['border']['r']['color'] = $val; + break; + + case 'border-bottom-color': + $res = false; + $val = $this->convertToColor($val, $res); + if ($res) $this->value['border']['b']['color'] = $val; + break; + + case 'border-left-color': + $res = false; + $val = $this->convertToColor($val, $res); + if ($res) $this->value['border']['l']['color'] = $val; + break; + + case 'border-width': + $val = explode(' ', $val); + foreach ($val as $valK => $valV) { + $val[$valK] = $this->convertToMM($valV, 0); + } + $this->_duplicateBorder($val); + if ($val[0]) $this->value['border']['t']['width'] = $val[0]; + if ($val[1]) $this->value['border']['r']['width'] = $val[1]; + if ($val[2]) $this->value['border']['b']['width'] = $val[2]; + if ($val[3]) $this->value['border']['l']['width'] = $val[3]; + break; + + case 'border-top-width': + $val = $this->convertToMM($val, 0); + if ($val) $this->value['border']['t']['width'] = $val; + break; + + case 'border-right-width': + $val = $this->convertToMM($val, 0); + if ($val) $this->value['border']['r']['width'] = $val; + break; + + case 'border-bottom-width': + $val = $this->convertToMM($val, 0); + if ($val) $this->value['border']['b']['width'] = $val; + break; + + case 'border-left-width': + $val = $this->convertToMM($val, 0); + if ($val) $this->value['border']['l']['width'] = $val; + break; + + case 'border-collapse': + if ($tagName=='table') $this->value['border']['collapse'] = ($val=='collapse'); + break; + + case 'border-radius': + $val = explode('/', $val); + if (count($val)>2) { + break; + } + $valH = $this->convertToRadius(trim($val[0])); + if (count($valH)<1 || count($valH)>4) { + break; + } + if (!isset($valH[1])) $valH[1] = $valH[0]; + if (!isset($valH[2])) $valH = array($valH[0], $valH[0], $valH[1], $valH[1]); + if (!isset($valH[3])) $valH[3] = $valH[1]; + if (isset($val[1])) { + $valV = $this->convertToRadius(trim($val[1])); + if (count($valV)<1 || count($valV)>4) { + break; + } + if (!isset($valV[1])) $valV[1] = $valV[0]; + if (!isset($valV[2])) $valV = array($valV[0], $valV[0], $valV[1], $valV[1]); + if (!isset($valV[3])) $valV[3] = $valV[1]; + } else { + $valV = $valH; + } + $this->value['border']['radius'] = array( + 'tl' => array($valH[0], $valV[0]), + 'tr' => array($valH[1], $valV[1]), + 'br' => array($valH[2], $valV[2]), + 'bl' => array($valH[3], $valV[3]) + ); + break; + + case 'border-top-left-radius': + $val = $this->convertToRadius($val); + if (count($val)<1 || count($val)>2) { + break; + } + $this->value['border']['radius']['tl'] = array($val[0], isset($val[1]) ? $val[1] : $val[0]); + break; + + case 'border-top-right-radius': + $val = $this->convertToRadius($val); + if (count($val)<1 || count($val)>2) { + break; + } + $this->value['border']['radius']['tr'] = array($val[0], isset($val[1]) ? $val[1] : $val[0]); + break; + + case 'border-bottom-right-radius': + $val = $this->convertToRadius($val); + if (count($val)<1 || count($val)>2) { + break; + } + $this->value['border']['radius']['br'] = array($val[0], isset($val[1]) ? $val[1] : $val[0]); + break; + + case 'border-bottom-left-radius': + $val = $this->convertToRadius($val); + if (count($val)<1 || count($val)>2) { + break; + } + $this->value['border']['radius']['bl'] = array($val[0], isset($val[1]) ? $val[1] : $val[0]); + break; + + case 'border-top': + $this->value['border']['t'] = $this->readBorder($val); + break; + + case 'border-right': + $this->value['border']['r'] = $this->readBorder($val); + break; + + case 'border-bottom': + $this->value['border']['b'] = $this->readBorder($val); + break; + + case 'border-left': + $this->value['border']['l'] = $this->readBorder($val); + break; + + case 'background-color': + $this->value['background']['color'] = $this->convertBackgroundColor($val); + break; + + case 'background-image': + $this->value['background']['image'] = $this->convertBackgroundImage($val); + break; + + case 'background-position': + $res = null; + $this->value['background']['position'] = $this->convertBackgroundPosition($val, $res); + break; + + case 'background-repeat': + $this->value['background']['repeat'] = $this->convertBackgroundRepeat($val); + break; + + case 'background': + $this->convertBackground($val, $this->value['background']); + break; + + case 'position': + if ($val=='absolute') $this->value['position'] = 'absolute'; + else if ($val=='relative') $this->value['position'] = 'relative'; + else $this->value['position'] = null; + break; + + case 'float': + if ($val=='left') $this->value['float'] = 'left'; + else if ($val=='right') $this->value['float'] = 'right'; + else $this->value['float'] = null; + break; + + case 'display': + if ($val=='inline') $this->value['display'] = 'inline'; + else if ($val=='block') $this->value['display'] = 'block'; + else if ($val=='none') $this->value['display'] = 'none'; + else $this->value['display'] = null; + break; + + case 'top': + case 'bottom': + case 'left': + case 'right': + $this->value[$nom] = $val; + break; + + case 'list-style': + case 'list-style-type': + case 'list-style-image': + if ($nom=='list-style') $nom = 'list-style-type'; + $this->value[$nom] = $val; + break; + + default: + break; + } + } + + $return = true; + + // only for P tag + if ($this->value['margin']['t']===null) $this->value['margin']['t'] = $this->value['font-size']; + if ($this->value['margin']['b']===null) $this->value['margin']['b'] = $this->value['font-size']; + + // force the text align to left, if asked by html2pdf + if ($this->_onlyLeft) $this->value['text-align'] = 'left'; + + // correction on the width (quick box) + if ($noWidth && in_array($tagName, array('div', 'blockquote', 'fieldset')) && $this->value['position']!='absolute') { + $this->value['width'] = $this->getLastWidth(); + $this->value['width']-= $this->value['margin']['l'] + $this->value['margin']['r']; + } else { + if ($correctWidth) { + if (!in_array($tagName, array('table', 'div', 'blockquote', 'fieldset', 'hr'))) { + $this->value['width']-= $this->value['padding']['l'] + $this->value['padding']['r']; + $this->value['width']-= $this->value['border']['l']['width'] + $this->value['border']['r']['width']; + } + if (in_array($tagName, array('th', 'td'))) { + $this->value['width']-= $this->convertToMM(isset($param['cellspacing']) ? $param['cellspacing'] : '2px'); + $return = false; + } + if ($this->value['width']<0) $this->value['width']=0; + } else { + if ($this->value['width']) { + if ($this->value['border']['l']['width']) $this->value['width'] += $this->value['border']['l']['width']; + if ($this->value['border']['r']['width']) $this->value['width'] += $this->value['border']['r']['width']; + if ($this->value['padding']['l']) $this->value['width'] += $this->value['padding']['l']; + if ($this->value['padding']['r']) $this->value['width'] += $this->value['padding']['r']; + } + } + } + if ($this->value['height']) { + if ($this->value['border']['b']['width']) $this->value['height'] += $this->value['border']['b']['width']; + if ($this->value['border']['t']['width']) $this->value['height'] += $this->value['border']['t']['width']; + if ($this->value['padding']['b']) $this->value['height'] += $this->value['padding']['b']; + if ($this->value['padding']['t']) $this->value['height'] += $this->value['padding']['t']; + } + + if ($this->value['top']!=null) $this->value['top'] = $this->convertToMM($this->value['top'], $this->getLastHeight(true)); + if ($this->value['bottom']!=null) $this->value['bottom'] = $this->convertToMM($this->value['bottom'], $this->getLastHeight(true)); + if ($this->value['left']!=null) $this->value['left'] = $this->convertToMM($this->value['left'], $this->getLastWidth(true)); + if ($this->value['right']!=null) $this->value['right'] = $this->convertToMM($this->value['right'], $this->getLastWidth(true)); + + if ($this->value['top'] && $this->value['bottom'] && $this->value['height']) $this->value['bottom'] = null; + if ($this->value['left'] && $this->value['right'] && $this->value['width']) $this->value['right'] = null; + + return $return; + } + + /** + * get the height of the current line + * + * @access public + * @return float $height in mm + */ + public function getLineHeight() + { + $val = $this->value['line-height']; + if ($val=='normal') $val = '108%'; + return $this->convertToMM($val, $this->value['font-size']); + } + + /** + * get the width of the parent + * + * @access public + * @param boolean $mode true => adding padding and border + * @return float $width in mm + */ + public function getLastWidth($mode = false) + { + for ($k=count($this->table)-1; $k>=0; $k--) { + if ($this->table[$k]['width']) { + $w = $this->table[$k]['width']; + if ($mode) { + $w+= $this->table[$k]['border']['l']['width'] + $this->table[$k]['padding']['l'] + 0.02; + $w+= $this->table[$k]['border']['r']['width'] + $this->table[$k]['padding']['r'] + 0.02; + } + return $w; + } + } + return $this->_pdf->getW() - $this->_pdf->getlMargin() - $this->_pdf->getrMargin(); + } + + /** + * get the height of the parent + * + * @access public + * @param boolean $mode true => adding padding and border + * @return float $height in mm + */ + public function getLastHeight($mode = false) + { + for ($k=count($this->table)-1; $k>=0; $k--) { + if ($this->table[$k]['height']) { + $h = $this->table[$k]['height']; + if ($mode) { + $h+= $this->table[$k]['border']['t']['width'] + $this->table[$k]['padding']['t'] + 0.02; + $h+= $this->table[$k]['border']['b']['width'] + $this->table[$k]['padding']['b'] + 0.02; + } + return $h; + } + } + return $this->_pdf->getH() - $this->_pdf->gettMargin() - $this->_pdf->getbMargin(); + } + + /** + * get the value of the float property + * + * @access public + * @return $float left/right + */ + public function getFloat() + { + if ($this->value['float']=='left') return 'left'; + if ($this->value['float']=='right') return 'right'; + return null; + } + + /** + * get the last value for a specific key + * + * @access public + * @param string $key + * @return mixed + */ + public function getLastValue($key) + { + $nb = count($this->table); + if ($nb>0) { + return $this->table[$nb-1][$key]; + } else { + return null; + } + } + + /** + * get the last absolute X + * + * @access protected + * @return float $x + */ + protected function _getLastAbsoluteX() + { + for ($k=count($this->table)-1; $k>=0; $k--) { + if ($this->table[$k]['x'] && $this->table[$k]['position']) return $this->table[$k]['x']; + } + return $this->_pdf->getlMargin(); + } + + /** + * get the last absolute Y + * + * @access protected + * @return float $y + */ + protected function _getLastAbsoluteY() + { + for ($k=count($this->table)-1; $k>=0; $k--) { + if ($this->table[$k]['y'] && $this->table[$k]['position']) return $this->table[$k]['y']; + } + return $this->_pdf->gettMargin(); + } + + /** + * get the CSS properties of the current tag + * + * @access protected + * @return array $styles + */ + protected function _getFromCSS() + { + // styles to apply + $styles = array(); + + // list of the selectors to get in the CSS files + $getit = array(); + + // get the list of the selectors of each tags + $lst = array(); + $lst[] = $this->value['id_lst']; + for ($i=count($this->table)-1; $i>=0; $i--) { + $lst[] = $this->table[$i]['id_lst']; + } + + // foreach selectors in the CSS files, verify if it match with the list of selectors + foreach ($this->cssKeys as $key => $num) { + if ($this->_getReccursiveStyle($key, $lst)) { + $getit[$key] = $num; + } + } + + // if we have selectors + if (count($getit)) { + // get them, but in the definition order, because of priority + asort($getit); + foreach ($getit as $key => $val) $styles = array_merge($styles, $this->css[$key]); + } + + return $styles; + } + + /** + * identify if the selector $key match with the list of tag selectors + * + * @access protected + * @param string $key CSS selector to analyse + * @param array $lst list of the selectors of each tags + * @param string $next next step of parsing the selector + * @return boolean + */ + protected function _getReccursiveStyle($key, $lst, $next = null) + { + // if next step + if ($next!==null) { + // we remove this step + if ($next) $key = trim(substr($key, 0, -strlen($next))); + array_shift($lst); + + // if no more step to identify => return false + if (!count($lst)) { + return false; + } + } + + // for each selector of the current step + foreach ($lst[0] as $name) { + // if selector = key => ok + if ($key==$name) { + return true; + } + + // if the end of the key = the selector and the next step is ok => ok + if (substr($key, -strlen(' '.$name))==' '.$name && $this->_getReccursiveStyle($key, $lst, $name)) { + return true; + } + } + + // if we are not in the first step, we analyse the sub steps (the pareng tag of the current tag) + if ($next!==null && $this->_getReccursiveStyle($key, $lst, '')) { + return true; + } + + // no corresponding found + return false; + } + + /** + * Analyse a border + * + * @access public + * @param string $css css border properties + * @return array border properties + */ + public function readBorder($css) + { + // border none + $none = array('type' => 'none', 'width' => 0, 'color' => array(0, 0, 0)); + + // default value + $type = 'solid'; + $width = $this->convertToMM('1pt'); + $color = array(0, 0, 0); + + // clean up the values + $css = explode(' ', $css); + foreach ($css as $k => $v) { + $v = trim($v); + if ($v) $css[$k] = $v; + else unset($css[$k]); + } + $css = array_values($css); + + // read the values + $res = null; + foreach ($css as $value) { + + // if no border => return none + if ($value=='none' || $value=='hidden') { + return $none; + } + + // try to convert the value as a distance + $tmp = $this->convertToMM($value); + + // if the convert is ok => it is a width + if ($tmp!==null) { + $width = $tmp; + // else, it could be the type + } else if (in_array($value, array('solid', 'dotted', 'dashed', 'double'))) { + $type = $value; + // else, it could be the color + } else { + $tmp = $this->convertToColor($value, $res); + if ($res) $color = $tmp; + } + } + + // if no witdh => return none + if (!$width) return $none; + + // return the border properties + return array('type' => $type, 'width' => $width, 'color' => $color); + } + + /** + * duplicate the borders if needed + * + * @access protected + * @param &array $val + */ + protected function _duplicateBorder(&$val) + { + // 1 value => L => RTB + if (count($val)==1) { + $val[1] = $val[0]; + $val[2] = $val[0]; + $val[3] = $val[0]; + // 2 values => L => R & T => B + } else if (count($val)==2) { + $val[2] = $val[0]; + $val[3] = $val[1]; + // 3 values => T => B + } else if (count($val)==3) { + $val[3] = $val[1]; + } + } + + /** + * Analyse a background + * + * @access public + * @param string $css css background properties + * @param &array $value parsed values (by reference, because, ther is a legacy of the parent CSS properties) + */ + public function convertBackground($css, &$value) + { + // is there a image ? + $text = '/url\(([^)]*)\)/isU'; + if (preg_match($text, $css, $match)) { + // get the image + $value['image'] = $this->convertBackgroundImage($match[0]); + + // remove if from the css properties + $css = preg_replace($text, '', $css); + $css = preg_replace('/[\s]+/', ' ', $css); + } + + // protect some spaces + $css = preg_replace('/,[\s]+/', ',', $css); + + // explode the values + $css = explode(' ', $css); + + // background position to parse + $pos = ''; + + // foreach value + foreach ($css as $val) { + // try to parse the value as a color + $ok = false; + $color = $this->convertToColor($val, $ok); + + // if ok => it is a color + if ($ok) { + $value['color'] = $color; + // else if transparent => no coloàr + } else if ($val=='transparent') { + $value['color'] = null; + // else + } else { + // try to parse the value as a repeat + $repeat = $this->convertBackgroundRepeat($val); + + // if ok => it is repeat + if ($repeat) { + $value['repeat'] = $repeat; + // else => it could only be a position + } else { + $pos.= ($pos ? ' ' : '').$val; + } + } + } + + // if we have a position to parse + if ($pos) { + // try to read it + $pos = $this->convertBackgroundPosition($pos, $ok); + if ($ok) $value['position'] = $pos; + } + } + + /** + * parse a background color + * + * @access public + * @param string $css + * @return string $value + */ + public function convertBackgroundColor($css) + { + $res = null; + if ($css=='transparent') return null; + else return $this->convertToColor($css, $res); + } + + /** + * parse a background image + * + * @access public + * @param string $css + * @return string $value + */ + public function convertBackgroundImage($css) + { + if ($css=='none') + return null; + else if (preg_match('/^url\(([^)]*)\)$/isU', $css, $match)) + return $match[1]; + else + return null; + } + + /** + * parse a background position + * + * @access public + * @param string $css + * @param &boolean $res flag if conver is ok or not + * @return array ($x, $y) + */ + public function convertBackgroundPosition($css, &$res) + { + // init the res + $res = false; + + // explode the value + $css = explode(' ', $css); + + // we must have 2 values. if 0 or >2 : error. if 1 => put center for 2 + if (count($css)<2) { + if (!$css[0]) return null; + $css[1] = 'center'; + } + if (count($css)>2) return null; + + // prepare the values + $x = 0; + $y = 0; + $res = true; + + // convert the first value + if ($css[0]=='left') $x = '0%'; + else if ($css[0]=='center') $x = '50%'; + else if ($css[0]=='right') $x = '100%'; + else if ($css[0]=='top') $y = '0%'; + else if ($css[0]=='bottom') $y = '100%'; + else if (preg_match('/^[-]?[0-9\.]+%$/isU', $css[0])) $x = $css[0]; + else if ($this->convertToMM($css[0])) $x = $this->convertToMM($css[0]); + else $res = false; + + // convert the second value + if ($css[1]=='left') $x = '0%'; + else if ($css[1]=='right') $x = '100%'; + else if ($css[1]=='top') $y = '0%'; + else if ($css[1]=='center') $y = '50%'; + else if ($css[1]=='bottom') $y = '100%'; + else if (preg_match('/^[-]?[0-9\.]+%$/isU', $css[1])) $y = $css[1]; + else if ($this->convertToMM($css[1])) $y = $this->convertToMM($css[1]); + else $res = false; + + // return the values + return array($x, $y); + } + + /** + * parse a background repeat + * + * @access public + * @param string $css + * @return string $value + */ + public function convertBackgroundRepeat($css) + { + switch($css) + { + case 'repeat': + return array(true, true); + case 'repeat-x': + return array(true, false); + case 'repeat-y': + return array(false, true); + case 'no-repeat': + return array(false, false); + } + return null; + } + + /** + * convert a distance to mm + * + * @access public + * @param string $css distance to convert + * @param float $old parent distance + * @return float $value + */ + public function convertToMM($css, $old=0.) + { + $css = trim($css); + if (preg_match('/^[0-9\.\-]+$/isU', $css)) $css.= 'px'; + if (preg_match('/^[0-9\.\-]+px$/isU', $css)) $css = 25.4/96. * str_replace('px', '', $css); + else if (preg_match('/^[0-9\.\-]+pt$/isU', $css)) $css = 25.4/72. * str_replace('pt', '', $css); + else if (preg_match('/^[0-9\.\-]+in$/isU', $css)) $css = 25.4 * str_replace('in', '', $css); + else if (preg_match('/^[0-9\.\-]+mm$/isU', $css)) $css = 1.*str_replace('mm', '', $css); + else if (preg_match('/^[0-9\.\-]+%$/isU', $css)) $css = 1.*$old*str_replace('%', '', $css)/100.; + else $css = null; + + return $css; + } + + /** + * convert a css radius + * + * @access public + * @param string $css + * @return float $value + */ + public function convertToRadius($css) + { + // explode the value + $css = explode(' ', $css); + + foreach ($css as $k => $v) { + $v = trim($v); + if ($v) { + $v = $this->convertToMM($v, 0); + if ($v!==null) { + $css[$k] = $v; + } else { + unset($css[$k]); + } + } else { + unset($css[$k]); + } + } + + return array_values($css); + } + + /** + * convert a css color + * + * @access public + * @param string $css + * @param &boolean $res + * @return array (r,g, b) + */ + public function convertToColor($css, &$res) + { + // prepare the value + $css = trim($css); + $res = true; + + // if transparent => return null + if (strtolower($css)=='transparent') return array(null, null, null); + + // HTML color + if (isset($this->_htmlColor[strtolower($css)])) { + $css = $this->_htmlColor[strtolower($css)]; + $r = floatVal(hexdec(substr($css, 0, 2))); + $v = floatVal(hexdec(substr($css, 2, 2))); + $b = floatVal(hexdec(substr($css, 4, 2))); + return array($r, $v, $b); + } + + // like #FFFFFF + if (preg_match('/^#[0-9A-Fa-f]{6}$/isU', $css)) { + $r = floatVal(hexdec(substr($css, 1, 2))); + $v = floatVal(hexdec(substr($css, 3, 2))); + $b = floatVal(hexdec(substr($css, 5, 2))); + return array($r, $v, $b); + } + + // like #FFF + if (preg_match('/^#[0-9A-F]{3}$/isU', $css)) { + $r = floatVal(hexdec(substr($css, 1, 1).substr($css, 1, 1))); + $v = floatVal(hexdec(substr($css, 2, 1).substr($css, 2, 1))); + $b = floatVal(hexdec(substr($css, 3, 1).substr($css, 3, 1))); + return array($r, $v, $b); + } + + // like rgb(100, 100, 100) + if (preg_match('/rgb\([\s]*([0-9%\.]+)[\s]*,[\s]*([0-9%\.]+)[\s]*,[\s]*([0-9%\.]+)[\s]*\)/isU', $css, $match)) { + $r = $this->_convertSubColor($match[1]); + $v = $this->_convertSubColor($match[2]); + $b = $this->_convertSubColor($match[3]); + return array($r*255., $v*255., $b*255.); + } + + // like cmyk(100, 100, 100, 100) + if (preg_match('/cmyk\([\s]*([0-9%\.]+)[\s]*,[\s]*([0-9%\.]+)[\s]*,[\s]*([0-9%\.]+)[\s]*,[\s]*([0-9%\.]+)[\s]*\)/isU', $css, $match)) { + $c = $this->_convertSubColor($match[1]); + $m = $this->_convertSubColor($match[2]); + $y = $this->_convertSubColor($match[3]); + $k = $this->_convertSubColor($match[4]); + return array($c*100., $m*100., $y*100., $k*100.); + } + + $res = false; + return array(0., 0., 0.); + } + + /** + * color value to convert + * + * @access protected + * @param string $c + * @return float $c 0.->1. + */ + protected function _convertSubColor($c) + { + if (substr($c, -1)=='%') { + $c = floatVal(substr($c, 0, -1))/100.; + } else { + $c = floatVal($c); + if ($c>1) $c = $c/255.; + } + + return $c; + } + + /** + * read a css content + * + * @access protected + * @param &string $code + */ + protected function _analyseStyle(&$code) + { + // clean the spaces + $code = preg_replace('/[\s]+/', ' ', $code); + + // remove the comments + $code = preg_replace('/\/\*.*?\*\//s', '', $code); + + // split each CSS code "selector { value }" + preg_match_all('/([^{}]+){([^}]*)}/isU', $code, $match); + + // for each CSS code + for ($k=0; $k1) { + $cod = $tmp[0]; unset($tmp[0]); $tmp = implode(':', $tmp); + $css[trim(strtolower($cod))] = trim($tmp); + } + } + + // explode the names + $names = explode(',', $names); + + // save the values for each names + foreach ($names as $name) { + // clean the name + $name = trim($name); + + // if a selector with somethink lige :hover => continue + if (strpos($name, ':')!==false) continue; + + // save the value + if (!isset($this->css[$name])) + $this->css[$name] = $css; + else + $this->css[$name] = array_merge($this->css[$name], $css); + + } + } + + // get he list of the keys + $this->cssKeys = array_flip(array_keys($this->css)); + } + + /** + * Extract the css files from a html code + * + * @access public + * @param string &$html + */ + public function readStyle(&$html) + { + // the CSS content + $style = ' '; + + // extract the link tags, and remove them in the html code + preg_match_all('/]*)>/isU', $html, $match); + $html = preg_replace('/]*>/isU', '', $html); + $html = preg_replace('/<\/link[^>]*>/isU', '', $html); + + // analyse each link tag + foreach ($match[1] as $code) { + $tmp = array(); + + // read the attributes name=value + $prop = '([a-zA-Z0-9_]+)=([^"\'\s>]+)'; + preg_match_all('/'.$prop.'/is', $code, $match); + for ($k=0; $k we keep it + if (isset($tmp['type']) && strtolower($tmp['type'])=='text/css' && isset($tmp['href'])) { + + // get the href + $url = $tmp['href']; + + // get the content of the css file + $content = @file_get_contents($url); + + // if "http://" in the url + if (strpos($url, 'http://')!==false) { + + // get the domain "http://xxx/" + $url = str_replace('http://', '', $url); + $url = explode('/', $url); + $urlMain = 'http://'.$url[0].'/'; + + // get the absolute url of the path + $urlSelf = $url; unset($urlSelf[count($urlSelf)-1]); $urlSelf = 'http://'.implode('/', $urlSelf).'/'; + + // adapt the url in the css content + $content = preg_replace('/url\(([^\\\\][^)]*)\)/isU', 'url('.$urlSelf.'$1)', $content); + $content = preg_replace('/url\((\\\\[^)]*)\)/isU', 'url('.$urlMain.'$1)', $content); + } else { +// @TODO correction on url in absolute on a local css content + // $content = preg_replace('/url\(([^)]*)\)/isU', 'url('.dirname($url).'/$1)', $content); + } + + // add to the CSS content + $style.= $content."\n"; + } + } + + // extract the style tags des tags style, and remove them in the html code + preg_match_all('/]*>(.*)<\/style[^>]*>/isU', $html, $match); + $html = preg_replace('/]*>(.*)<\/style[^>]*>/isU', '', $html); + + // analyse each style tags + foreach ($match[1] as $code) { + // add to the CSS content + $code = str_replace('', '', $code); + $style.= $code."\n"; + } + + //analyse the css content + $this->_analyseStyle($style); + } +} \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_class/parsingHtml.class.php b/Societes/ric/Html2pdf/lib/_class/parsingHtml.class.php new file mode 100755 index 00000000..8ce6ac6f --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_class/parsingHtml.class.php @@ -0,0 +1,520 @@ + PDF convertor + * distributed under the LGPL License + * + * @author Laurent MINGUET + * @version 4.03 + */ + +class HTML2PDF_parsingHtml +{ + protected $_html = ''; // HTML code to parse + protected $_num = 0; // table number + protected $_level = 0; // table level + protected $_encoding = ''; // encoding + public $code = array(); // parsed HTML codfe + + const HTML_TAB = ' '; + + /** + * main constructor + * + * @param string encoding + * @access public + */ + public function __construct($encoding = 'UTF-8') + { + $this->_num = 0; + $this->_level = array($this->_num); + $this->_html = ''; + $this->code = array(); + $this->setEncoding($encoding); + } + + /** + * change the encoding + * + * @param string encoding + * @access public + */ + public function setEncoding($encoding) + { + $this->_encoding = $encoding; + } + + /** + * Define the HTML code to parse + * + * @param string HTML code + * @access public + */ + public function setHTML($html) + { + // remove the HTML in comment + $html = preg_replace('//isU', '', $html); + + // save the HTML code + $this->_html = $html; + } + + /** + * parse the HTML code + * + * @access public + */ + public function parse() + { + $parents = array(); + + // flag : are we in a
 Tag ?
+        $tagPreIn = false;
+
+        // action to use for each line of the content of a 
 Tag
+        $tagPreBr = array(
+                    'name' => 'br',
+                    'close' => false,
+                    'param' => array(
+                        'style' => array(),
+                        'num'    => 0
+                    )
+                );
+
+        // tag that can be not closed
+        $tagsNotClosed = array(
+            'br', 'hr', 'img', 'col',
+            'input', 'link', 'option',
+            'circle', 'ellipse', 'path', 'rect', 'line', 'polygon', 'polyline'
+        );
+
+        // search the HTML tags
+        $tmp = array();
+        $this->_searchCode($tmp);
+
+        // all the actions to do
+        $actions = array();
+
+        // foreach part of the HTML code
+        foreach ($tmp as $part) {
+            // if it is a tag code
+            if ($part[0]=='code') {
+                // analise the HTML code
+                $res = $this->_analiseCode($part[1]);
+
+                // if it is a real HTML tag
+                if ($res) {
+                    // save the current posistion in the HTML code
+                    $res['html_pos'] = $part[2];
+
+                    // if the tag must be closed
+                    if (!in_array($res['name'], $tagsNotClosed)) {
+                        // if it is a closure tag
+                        if ($res['close']) {
+                            // HTML validation
+                            if (count($parents)<1)
+                                throw new HTML2PDF_exception(3, $res['name'], $this->getHtmlErrorCode($res['html_pos']));
+                            else if ($parents[count($parents)-1]!=$res['name'])
+                                throw new HTML2PDF_exception(4, $parents, $this->getHtmlErrorCode($res['html_pos']));
+                            else
+                                unset($parents[count($parents)-1]);
+                        } else {
+                            // if it is a autoclosed tag
+                            if ($res['autoclose']) {
+                                // save the opened tag
+                                $actions[] = $res;
+
+                                // prepare the closed tag
+                                $res['params'] = array();
+                                $res['close'] = true;
+                            }
+                            // else :add a child for validation
+                            else
+                                $parents[count($parents)] = $res['name'];
+                        }
+
+                        // if it is a 
 tag (or  tag) not auclosed => update the flag
+                        if (($res['name']=='pre' || $res['name']=='code') && !$res['autoclose']) {
+                            $tagPreIn = !$res['close'];
+                        }
+                    }
+
+                    // save the actions to convert
+                    $actions[] = $res;
+                } else { // else (it is not a real HTML tag => we transform it in Texte
+                    $part[0]='txt';
+                }
+            }
+            // if it is text
+            if ($part[0]=='txt') {
+                // if we are not in a 
 tag
+                if (!$tagPreIn) {
+                    // save the action
+                    $actions[] = array(
+                        'name'    => 'write',
+                        'close'    => false,
+                        'param' => array('txt' => $this->_prepareTxt($part[1])),
+                    );
+                } else { // else (if we are in a 
 tag)
+                    // prepare the text
+                    $part[1] = str_replace("\r", '', $part[1]);
+                    $part[1] = explode("\n", $part[1]);
+
+                    // foreach line of the text
+                    foreach ($part[1] as $k => $txt) {
+                        // transform the line
+                        $txt = str_replace("\t", self::HTML_TAB, $txt);
+                        $txt = str_replace(' ', ' ', $txt);
+
+                        // add a break line
+                        if ($k>0) $actions[] = $tagPreBr;
+
+                        // save the action
+                        $actions[] = array(
+                            'name'    => 'write',
+                            'close'    => false,
+                            'param' => array('txt' => $this->_prepareTxt($txt, false)),
+                        );
+                    }
+                }
+            }
+        }
+
+        // for each indentified action, we have to clean up the begin and the end of the texte
+        // based on tags that surround it
+
+        // list of the tags to clean
+        $tagsToClean = array(
+            'page', 'page_header', 'page_footer', 'form',
+            'table', 'thead', 'tfoot', 'tr', 'td', 'th', 'br',
+            'div', 'hr', 'p', 'ul', 'ol', 'li',
+            'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
+            'bookmark', 'fieldset', 'legend',
+            'draw', 'circle', 'ellipse', 'path', 'rect', 'line', 'g', 'polygon', 'polyline',
+            'option'
+        );
+
+        // foreach action
+        $nb = count($actions);
+        for ($k=0; $k<$nb; $k++) {
+            // if it is a Text
+            if ($actions[$k]['name']=='write') {
+                // if the tag before the text is a tag to clean => ltrim on the text
+                if ($k>0 && in_array($actions[$k-1]['name'], $tagsToClean))
+                    $actions[$k]['param']['txt'] = ltrim($actions[$k]['param']['txt']);
+
+                // if the tag after the text is a tag to clean => rtrim on the text
+                if ($k<$nb-1 && in_array($actions[$k+1]['name'], $tagsToClean))
+                    $actions[$k]['param']['txt'] = rtrim($actions[$k]['param']['txt']);
+
+                // if the text is empty => remove the action
+                if (!strlen($actions[$k]['param']['txt']))
+                    unset($actions[$k]);
+            }
+        }
+
+        // if we are not on the level 0 => HTML validator ERROR
+        if (count($parents)) throw new HTML2PDF_exception(5, $parents);
+
+        // save the actions to do
+        $this->code = array_values($actions);
+    }
+
+    /**
+     * prepare the text
+     *
+     * @param   string texte
+     * @param   boolean true => replace multiple space+\t+\r+\n by a single space
+     * @return  string texte
+     * @access  protected
+     */
+    protected function _prepareTxt($txt, $spaces = true)
+    {
+        if ($spaces) $txt = preg_replace('/\s+/is', ' ', $txt);
+        $txt = str_replace('€', '€', $txt);
+        $txt = html_entity_decode($txt, ENT_QUOTES, $this->_encoding);
+        return $txt;
+    }
+
+    /**
+     * parse the HTML code
+     *
+     * @param    &array    array's result
+     * @return   null
+     */
+    protected function _searchCode(&$tmp)
+    {
+        // initialise the array
+        $tmp = array();
+
+        // regexp to separate the tags from the texts
+        $reg = '/(<[^>]+>)|([^<]+)+/isU';
+
+        // last match found
+        $str = '';
+        $offset = 0;
+
+        // As it finds a match
+        while (preg_match($reg, $this->_html, $parse, PREG_OFFSET_CAPTURE, $offset)) {
+            // if it is a tag
+            if ($parse[1][0]) {
+                // save the previous text if it exists
+                if ($str!=='')    $tmp[] = array('txt', $str);
+
+                // save the tag, with the offset
+                $tmp[] = array('code', trim($parse[1][0]), $offset);
+
+                // init the current text
+                $str = '';
+            } else { // else (if it is a text)
+                // add the new text to the current text
+                $str.= $parse[2][0];
+            }
+
+            // Update offset to the end of the match
+            $offset = $parse[0][1] + strlen($parse[0][0]);
+            unset($parse);
+        }
+        // if a text is present in the end, we save it
+        if ($str!='') $tmp[] = array('txt', $str);
+        unset($str);
+    }
+
+    /**
+     * analise a HTML tag
+     *
+     * @param   string   HTML code to analise
+     * @return  array    corresponding action
+     */
+    protected function _analiseCode($code)
+    {
+        // name of the tag, opening, closure, autoclosure
+        $tag = '<([\/]{0,1})([_a-z0-9]+)([\/>\s]+)';
+        if (!preg_match('/'.$tag.'/isU', $code, $match)) return null;
+        $close     = ($match[1]=='/' ? true : false);
+        $autoclose = preg_match('/\/>$/isU', $code);
+        $name      = strtolower($match[2]);
+
+        // required parameters (depends on the tag name)
+        $param    = array();
+        $param['style'] = '';
+        if ($name=='img') {
+            $param['alt'] = '';
+            $param['src'] = '';
+        }
+        if ($name=='a') {
+            $param['href'] = '';
+        }
+
+        // read the parameters : nom=valeur
+        $prop = '([a-zA-Z0-9_]+)=([^"\'\s>]+)';
+        preg_match_all('/'.$prop.'/is', $code, $match);
+        for($k=0; $k $val) {
+            $key = strtolower($key);
+            switch($key)
+            {
+                case 'width':
+                    unset($param[$key]);
+                    $param['style'] .= 'width: '.$val.'px; ';
+                    break;
+
+                case 'align':
+                    if ($name==='img') {
+                        unset($param[$key]);
+                        $param['style'] .= 'float: '.$val.'; ';
+                    } elseif ($name!=='table') {
+                        unset($param[$key]);
+                        $param['style'] .= 'text-align: '.$val.'; ';
+                    }
+                    break;
+
+                case 'valign':
+                    unset($param[$key]);
+                    $param['style'] .= 'vertical-align: '.$val.'; ';
+                    break;
+
+                case 'height':
+                    unset($param[$key]);
+                    $param['style'] .= 'height: '.$val.'px; ';
+                    break;
+
+                case 'bgcolor':
+                    unset($param[$key]);
+                    $param['style'] .= 'background: '.$val.'; ';
+                    break;
+
+                case 'bordercolor':
+                    unset($param[$key]);
+                    $color = $val;
+                    break;
+
+                case 'border':
+                    unset($param[$key]);
+                    if (preg_match('/^[0-9]+$/isU', $val)) $val = $val.'px';
+                    $border = $val;
+                    break;
+
+                case 'cellpadding':
+                case 'cellspacing':
+                    if (preg_match('/^([0-9]+)$/isU', $val)) $param[$key] = $val.'px';
+                    break;
+
+                case 'colspan':
+                case 'rowspan':
+                    $val = preg_replace('/[^0-9]/isU', '', $val);
+                    if (!$val) $val = 1;
+                    $param[$key] = $val;
+                    break;
+            }
+        }
+
+        // compliance of the border
+        if ($border!==null) {
+            if ($border)    $border = 'border: solid '.$border.' '.$color;
+            else            $border = 'border: none';
+
+            $param['style'] .= $border.'; ';
+            $param['border'] = $border;
+        }
+
+        // reading styles: decomposition and standardization
+        $styles = explode(';', $param['style']);
+        $param['style'] = array();
+        foreach ($styles as $style) {
+            $tmp = explode(':', $style);
+            if (count($tmp)>1) {
+                $cod = $tmp[0];
+                unset($tmp[0]);
+                $tmp = implode(':', $tmp);
+                $param['style'][trim(strtolower($cod))] = preg_replace('/[\s]+/isU', ' ', trim($tmp));
+            }
+        }
+
+        // determining the level of table opening, with an added level
+        if (in_array($name, array('ul', 'ol', 'table')) && !$close) {
+            $this->_num++;
+            $this->_level[count($this->_level)] = $this->_num;
+        }
+
+        // get the level of the table containing the element
+        if (!isset($param['num'])) {
+            $param['num'] = $this->_level[count($this->_level)-1];
+        }
+
+        // for closures table: remove a level
+        if (in_array($name, array('ul', 'ol', 'table')) && $close) {
+            unset($this->_level[count($this->_level)-1]);
+        }
+
+        // prepare the parameters
+        if (isset($param['value']))  $param['value']  = $this->_prepareTxt($param['value']);
+        if (isset($param['alt']))    $param['alt']    = $this->_prepareTxt($param['alt']);
+        if (isset($param['title']))  $param['title']  = $this->_prepareTxt($param['title']);
+        if (isset($param['class']))  $param['class']  = $this->_prepareTxt($param['class']);
+
+        // return the new action to do
+        return array('name' => $name, 'close' => $close ? 1 : 0, 'autoclose' => $autoclose, 'param' => $param);
+    }
+
+    /**
+     * get a full level of HTML, between an opening and closing corresponding
+     *
+     * @param   integer key
+     * @return  array   actions
+     */
+    public function getLevel($k)
+    {
+        // if the code does not exist => return empty
+        if (!isset($this->code[$k])) return array();
+
+        // the tag to detect
+        $detect = $this->code[$k]['name'];
+
+        // if it is a text => return
+        if ($detect=='write') {
+            return array($this->code[$k]);
+        }
+
+        //
+        $level = 0;      // depth level
+        $end = false;    // end of the search
+        $code = array(); // extract code
+
+        // while it's not ended
+        while (!$end) {
+            // current action
+            $row = $this->code[$k];
+
+            // if 'write' => we add the text
+            if ($row['name']=='write') {
+                $code[] = $row;
+            } else { // else, it is a html tag
+                $not = false; // flag for not taking into account the current tag
+
+                // if it is the searched tag
+                if ($row['name']==$detect) {
+                    // if we are just at the root level => dont take it
+                    if ($level==0) {
+                        $not = true;
+                    }
+
+                    // update the level
+                    $level+= ($row['close'] ? -1 : 1);
+
+                    // if we are now at the root level => it is the end, and dont take it
+                    if ($level==0) {
+                        $not = true;
+                        $end = true;
+                    }
+                }
+
+                // if we can takin into account the current tag => save it
+                if (!$not) {
+                    if (isset($row['style']['text-align'])) unset($row['style']['text-align']);
+                    $code[] = $row;
+                }
+            }
+
+            // it continues as long as there has code to analise
+            if (isset($this->code[$k+1]))
+                $k++;
+            else
+                $end = true;
+        }
+
+        // return the extract
+        return $code;
+    }
+
+    /**
+     * return a part of the HTML code, for error message
+     *
+     * @param   integer position
+     * @param   integer take before
+     * @param   integer take after
+     * @return  string  part of the html code
+     */
+    public function getHtmlErrorCode($pos, $before=30, $after=40)
+    {
+        return substr($this->_html, $pos-$before, $before+$after);
+    }
+}
\ No newline at end of file
diff --git a/Societes/ric/Html2pdf/lib/_class/tcpdfConfig.php b/Societes/ric/Html2pdf/lib/_class/tcpdfConfig.php
new file mode 100755
index 00000000..f0027a5f
--- /dev/null
+++ b/Societes/ric/Html2pdf/lib/_class/tcpdfConfig.php
@@ -0,0 +1,247 @@
+.
+//
+// 	See LICENSE.TXT file for more information.
+//  ----------------------------------------------------------------------------
+//
+// Description : PHP class to creates array representations for
+//               2D barcodes to be used with TCPDF.
+//
+// Author: Nicola Asuni
+//
+// (c) Copyright:
+//               Nicola Asuni
+//               Tecnick.com S.r.l.
+//               Via della Pace, 11
+//               09044 Quartucciu (CA)
+//               ITALY
+//               www.tecnick.com
+//               info@tecnick.com
+//============================================================+
+
+/**
+ * PHP class to creates array representations for 2D barcodes to be used with TCPDF.
+ * @package com.tecnick.tcpdf
+ * @abstract Functions for generating string representation of 2D barcodes.
+ * @author Nicola Asuni
+ * @copyright 2008-2009 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
+ * @link http://www.tcpdf.org
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ * @version 1.0.003
+ */
+
+	/**
+	* PHP class to creates array representations for 2D barcodes to be used with TCPDF (http://www.tcpdf.org).
+ * @name TCPDFBarcode + * @package com.tecnick.tcpdf + * @version 1.0.003 + * @author Nicola Asuni + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ +class TCPDF2DBarcode { + + /** + * @var array representation of barcode. + * @access protected + */ + protected $barcode_array = false; + + /** + * This is the class constructor. + * Return an array representations for 2D barcodes:
    + *
  • $arrcode['code'] code to be printed on text label
  • + *
  • $arrcode['num_rows'] required number of rows
  • + *
  • $arrcode['num_cols'] required number of columns
  • + *
  • $arrcode['bcode'][$r][$c] value of the cell is $r row and $c column (0 = transparent, 1 = black)
+ * @param string $code code to print + * @param string $type type of barcode:
    li>RAW: raw mode - comma-separad list of array rows
  • RAW2: raw mode - array rows are surrounded by square parenthesis.
  • QRCODE : QR-CODE Low error correction
  • QRCODE,L : QR-CODE Low error correction
  • QRCODE,M : QR-CODE Medium error correction
  • QRCODE,Q : QR-CODE Better error correction
  • QRCODE,H : QR-CODE Best error correction
+ */ + public function __construct($code, $type) { + $this->setBarcode($code, $type); + } + + /** + * Return an array representations of barcode. + * @return array + */ + public function getBarcodeArray() { + return $this->barcode_array; + } + + /** + * Set the barcode. + * @param string $code code to print + * @param string $type type of barcode:
  • RAW: raw mode - comma-separad list of array rows
  • RAW2: raw mode - array rows are surrounded by square parenthesis.
  • QRCODE : QR-CODE Low error correction
  • QRCODE,L : QR-CODE Low error correction
  • QRCODE,M : QR-CODE Medium error correction
  • QRCODE,Q : QR-CODE Better error correction
  • QRCODE,H : QR-CODE Best error correction
+ * @return array + */ + public function setBarcode($code, $type) { + $mode = explode(',', $type); + $qrtype = strtoupper($mode[0]); + switch ($qrtype) { + case 'QRCODE': { // QR-CODE + require_once(dirname(__FILE__).'/qrcode.php'); + if (!isset($mode[1]) OR (!in_array($mode[1],array('L','M','Q','H')))) { + $mode[1] = 'L'; // Ddefault: Low error correction + } + $qrcode = new QRcode($code, strtoupper($mode[1])); + $this->barcode_array = $qrcode->getBarcodeArray(); + break; + } + case 'RAW': + case 'RAW2': { // RAW MODE + // remove spaces + $code = preg_replace('/[\s]*/si', '', $code); + if (strlen($code) < 3) { + break; + } + if ($qrtype == 'RAW') { + // comma-separated rows + $rows = explode(',', $code); + } else { + // rows enclosed in square parethesis + $code = substr($code, 1, -1); + $rows = explode('][', $code); + } + $this->barcode_array['num_rows'] = count($rows); + $this->barcode_array['num_cols'] = strlen($rows[0]); + $this->barcode_array['bcode'] = array(); + foreach ($rows as $r) { + $this->barcode_array['bcode'][] = str_split($r, 1); + } + break; + } + case 'TEST': { // TEST MODE + $this->barcode_array['num_rows'] = 5; + $this->barcode_array['num_cols'] = 15; + $this->barcode_array['bcode'] = array( + array(1,1,1,0,1,1,1,0,1,1,1,0,1,1,1), + array(0,1,0,0,1,0,0,0,1,0,0,0,0,1,0), + array(0,1,0,0,1,1,0,0,1,1,1,0,0,1,0), + array(0,1,0,0,1,0,0,0,0,0,1,0,0,1,0), + array(0,1,0,0,1,1,1,0,1,1,1,0,0,1,0)); + break; + } + default: { + $this->barcode_array = false; + } + } + } +} // end of class + +//============================================================+ +// END OF FILE +//============================================================+ +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/CHANGELOG.TXT b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/CHANGELOG.TXT new file mode 100755 index 00000000..cb1b454a --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/CHANGELOG.TXT @@ -0,0 +1,1384 @@ +5.0.002 (2010-05-06) + - Bookmark() and related methods were fixed to accept HTML code. + - A problem on HTML links was fixed. + +5.0.001 (2010-05-06) + - Protected method _putstream was re-added for backward compatibility. + - The following method were added to display HTML Table Of Content (see example n. 59): + addTOCPage(), endTOCPage(), addHTMLTOC(). + +5.0.000 (2010-05-05) + - Method ImageSVG() was added to embedd SVG images (see example n. 58). Note that not all SVG images are supported. + - Method setRasterizeVectorImages() was added to enable/disable rasterization for vector images via ImageMagick library. + - Method RoundedRectXY() was added. + - Method PieSectorXY() was added. + - Gradient() method is now public and support new features. + - Shading to transparency is now supported. + - Image alignments were fixed. + - Support for dynamic images were improved. + - PDF_IMAGE_SCALE_RATIO has been changed to 1.25 for better compatibility with SVG. + - RAW and RAW2 modes were added to 2D Barcodes (see example n. 50). + - Automatic padding feature was added on barcodes (see examples n. 27 and 50). + - Bug #2995003 "Reproduced thead bug" was fixed. + - The Output() method now accepts FI and FD destinations to save the document on server before sending it to the client. + - Ellipse() method was improved and fixed (see page 2 of example n. 12). + +-------------------------------------------------------------------------------- + +4.9.018 (2010-04-21) + - Bug item #2990356 "Current font size not respected with more than two HTML

" was fixed. + +4.9.017 (2010-04-21) + - Bug item #2990224 "Different behaviour for equivalent HTML strings" was fixed. + - Bug item #2990314 "Dash is not appearing with SHY character" was fixed. + +4.9.016 (2010-04-20) + - An error on htmlcolors.php was fixed. + - getImageFileType() method was improved. + - GIF images with transparency are now better supported. + - Automatic page orientation was improved. + +4.9.015 (2010-04-20) + - A new method copyPage() was added to clone pages (see example n. 44). + - Support for text overline was added. + - Underline and linethrough methods were fixed. + - Bug #2989058 "SHY character causes unnecessary word-wrapping" was fixed. + +4.9.014 (2010-04-18) + - Bug item #2988845 was fixed. + +4.9.013 (2010-04-15) + - Image() and ImageEPS() methods were fixed and improved; $fitonpage parameter was added. + +4.9.012 (2010-04-12) + - The hyphenateText() method was added to automatically hyphenate text (see example n. 46). + +4.9.011 (2010-04-07) + - Vertical alignments for Cell() method were improved (see example n. 57). + +4.9.010 (2010-04-06) + - Signature of Cell() method now includes new parameters for vertical alignment (see example n. 57). + - Text() method was extended to include all Cell() parameters. + - HTML line alignment procedure was changed to fix some bugs. + +4.9.009 (2010-04-05) + - Text() method was fixed for backward compatibility. + +4.9.008 (2010-04-03) + - Additional line space after table header was removed. + - Support for HTML lists in multicolumn mode was added. + - The method setTextRenderingMode() was added to set text rendering modes (see the example n. 26). + - The following HTML attributes were added to set text rendering modes (see the example n. 26): stroke, strokecolor, fill. + +4.9.007 (2010-04-03) + - Font Descent computation was fixed (patch #2981441). + +4.9.006 (2010-04-02) + - The constant K_TCPDF_CALLS_IN_HTML was added on configuration file to enable/disable the ability to call TCPDF methods in HTML. + - The usage of tcpdf tag in HTML mode was changed to remove the possible security flaw offered by the eval() function (thanks to Matthias Hecker for spotting this security problem). See the new example n. 49 for further information. + +4.9.005 (2010-04-01) + - Bug# 2980354 "Wrong File attachment description with security" was fixed. + - Several problems with HTML line alignment were fixed. + - The constant K_THAI_TOPCHAR was added on configuration file to enable/disable the special procedure used to avoid the overlappind of symbols on Thai language. + - A problem with font name directory was fixed. + - A bug on _destroy() method was fixed. + +4.9.004 (2010-03-31) + - Patch #979681 "GetCharWidth - default character width" was applied (bugfix). + +4.9.003 (2010-03-30) + - Problem of first
on multiple columns was fixed. + - HTML line alignment was fixed. + - A QR-code bug was fixed. + +4.9.002 (2010-03-29) + - Patch #2978349 "$ignore_min_height is ignored in function Cell()" was applied. + - Bug #2978607 "2D Barcodes are wrong" was fixed. + - A problem with HTML block tags was fixed. + - Artificial italic for CID-0 fonts was added. + - Several multicolumn bugs were fixed. + - Support for HTML tables on multicolumn was added. + +4.9.001 (2010-03-28) + - QR Code minor bug was fixed. + - Multicolumn mode was added (see the new example n. 10). + - The following methods were added: setEqualColumns(), setColumnsArray(), selectColumn(). + - Thai diacritics support were changed (note that this is incompatible with html justification). + +4.9.000 (2010-03-27) + - QR Code (2D barcode) support was added (see example n. 50). + - The following methods were added to print crop and registration marks (see example n. 56): colorRegistrationBar(), cropMark(), registrationMark(). + - Limited support for CSS line-height property was added. + - Gradient method now supports Gray, RGB and CMYK space color. + - Example n. 51 was updated. + - Vertical alignment of font inside cell was fixed. + - Support for multiple Thai diacritics was added. + - Bug item #2974929 "Duplicate case values" was fixed. + - Bug item #2976729 "File attachment not working with security" was fixed. + +-------------------------------------------------------------------------------- + +4.8.039 (2010-03-20) + - Problems related to custom locale settings were fixed. + - Problems related to HTML on Header and Footer were fixed. + +4.8.038 (2010-03-13) + - Various bugs related to page-break in HTML mode were fixed. + - Bug item #2968974 "Another pagebreak problem" was fixed. + - Bug item #2969276 "justification problem" was fixed. + - Bug item #2969289 "bug when using justified text and custom headers" was fixed. + - Images are now automatically resized to be contained on the page. + - Some HTML line alignments were fixed. + - Signature of AddPage() and SetMargins() methods were changed to include an option to set default page margins. + +4.8.037 (2010-03-03) + - Bug item #2962068 was fixed. + - Bug item #2967017 "Problems with and pagebreaks" was fixed. + - Bug item #2967023 "table header lost with pagebreak" was fixed. + - Bug item #2967032 "Header lost with nested tables" was fixed. + +4.8.036 (2010-02-24) + - Automatic page break for HTML images was improved. + - Example 10 was updated. + - Japanese was removed from example 8 because the freeserif font doesn't contain japanese (you can display it using arialunicid0 font). + +4.8.035 (2010-02-23) + - Automatic page break for HTML images was added. + - Support for multicolumn HTML was added (example 10 was updated). + +4.8.034 (2010-02-17) + - Language files were updated. + +4.8.033 (2010-02-12) + - A bug related to protection mode with links was fixed. + +4.8.032 (2010-02-04) + - A bug related to $maxh parameter on Write() and MultiCell() was fixed. + - Support for body tag was added. + +4.8.031 (2010-01-30) + - Bug item #2941589 "paragraph justify not working on some non-C locales" was fixed. + +4.8.030 (2010-01-27) + - Some text alignment cases were fixed. + +4.8.029 (2010-01-27) + - Bug item #2941057 "TOC Error in PDF File Output" was fixed. + - Some text alignment cases were fixed. + +4.8.028 (2010-01-26) + - Text alignment for RTL mode was fixed. + +4.8.027 (2010-01-25) + - Bug item #2938412 "Table related problems - thead, nobr, table width" was fixed. + +4.8.026 (2010-01-19) + - The misspelled word "lenght" was replaced with "length" in some variables and comments. + +4.8.025 (2010-01-18) + - addExtGState() method was improved to reuse existing ExtGState objects. + +4.8.024 (2010-01-15) + - Justification mode for HTML was fixed (Bug item #2932470). + +4.8.023 (2010-01-15) + - Bug item #2932470 "Some HTML entities breaks justification" was fixed. + +4.8.022 (2010-01-14) + - Source code documentation was fixed. + +4.8.021 (2010-01-03) + - A Bug relative to Table Of Content index was fixed. + +4.8.020 (2009-12-21) + - Bug item #2918545 "Display problem of the first row of a table with larger font" was fixed. + - A Bug relative to table rowspan mode was fixed. + +4.8.019 (2009-12-16) + - Bug item #2915684 "Image size" was fixed. + - Bug item #2914995 "Image jpeg quality" was fixed. + - The signature of the Image() method was changed (check the documentation for the $resize parameter). + +4.8.018 (2009-12-15) + - Bug item #2914352 "write error" was fixed. + +4.8.017 (2009-11-27) + - THEAD problem when table is used on header/footer was fixed. + - A first line alignment on HTML justification was fixed. + - Method getImageFileType() was added. + - Images with unknown extension and type are now supported via ImageMagick PHP extension. + +4.8.016 (2009-11-21) + - Document Information Dictionary was fixed. + - CSS attributes 'page-break-before', 'page-break-after' and 'page-break-inside' are now supported. + - Problem of unclosed last page was fixed. + - Problem of 'thead' unnecessarily repeated on the next page was fixed. + +4.8.015 (2009-11-20) + - A problem with some PNG transparency images was fixed. + - Bug #2900762 "Sort issues in Bookmarks" was fixed. + - Text justification was fixed for various modes: underline, strikeout and background. + +4.8.014 (2009-11-04) + - Bug item #2891316 "writeHTML, underlining replacing spaces" was fixed. + - The handling of temporary RTL text direction mode was fixed. + +4.8.013 (2009-10-26) + - Bug item #2884729 "Problem with word-wrap and hyphen" was fixed. + +4.8.012 (2009-10-23) + - Table cell alignments for RTL booklet mode were fixed. + - Images and barcode alignments for booklet mode were fixed. + +4.8.011 (2009-10-22) + - DejaVu fonts were updated to latest version. + +4.8.010 (2009-10-21) + - Bookmark for TOC page was added. + - Signature of addTOC() method is changed. + - Bookmarks are now automatically sorted by page and Y position. + - Example n. 45 was updated. + - Example n. 55 was added to display all charactes available on core fonts. + +4.8.009 (2009-09-30) + - Compatibility with PHP 5.3 was improved. + - All examples were updated. + - Index file for examples was added. + +4.8.008 (2009-09-29) + - Example 49 was updated. + - Underline and linethrough now works with cell stretching mode. + +4.8.007 (2009-09-23) + - Infinite loop problem caused by nobr attribute was fixed. + +4.8.006 (2009-09-23) + - Bug item #2864522 "No images if DOCUMENT_ROOT=='/'" was fixed. + - Support for text-indent CSS attribute was added. + - Method rollbackTransaction() was changed to support self-reassigment of previous object (check source code documentation). + - Support for the HTML "nobr" attribute was added to avoid splitting a table or a table row on two pages (i.e.: ...). + +4.8.005 (2009-09-17) + - A bug relative to multiple transformations and annotations was fixed. + +4.8.004 (2009-09-16) + - A bug on _putannotsrefs() method was fixed. + +4.8.003 (2009-09-15) + - Bug item #2858754 "Division by zero" was fixed. + - A bug relative to HTML list items was fixed. + - A bug relative to form fields on multiple pages was fixed. + - PolyLine() method was added (see example n. 12). + - Signature of Polygon() method was changed. + +4.8.002 (2009-09-12) + - A problem related to CID-0 fonts offset was fixed: if the $cw[1] entry on the CID-0 font file is not defined, then a CID keys offset is introduced. + +4.8.001 (2009-09-09) + - The appearance streams (AP) for anotations form fields was fixed (see examples n. 14 and 54). + - Radiobuttons were fixed. + +4.8.000 (2009-09-07) + - This version includes some support for Forms fields (see example n. 14) and XHTML forms (see example n. 54). + - The following methods were changed to work without JavaScript: TextField(), RadioButton(), ListBox(), ComboBox(), CheckBox(), Button(). + - Support for Widget annotations was improved. + - Alignment of annotation objects was fixed (examples 36 and 41 were updated). + - addJavascriptObject() method was added. + - Signature of Image() method was changed. + - htmlcolors.php file was updated. + +-------------------------------------------------------------------------------- + +4.7.003 (2009-09-03) + - Support for TCPDF methods on HTML was improved (see example n. 49). + +4.7.002 (2009-09-02) + - Bug item #2848892 "writeHTML + table: Gaps between rows" was fixed. + - JavaScript support was fixed (see example n. 53). + +4.7.001 (2009-08-30) + - The Polygon() and Arrow() methods were fixed and improved (see example n. 12). + +4.7.000 (2009-08-29) + - This is a major release. + - Some procedures were internally optimized. + - The problem of mixed signature and annotations was fixed (example n. 52). + +4.6.030 (2009-08-29) + - IMPORTANT: percentages on table cell widths are now relative to the full table width (as in standard HTML). + - Various minor bugs were fixed. + - Example n. 52 (digital signature) was updated. + +4.6.029 (2009-08-26) + - PHP4 version was fixed. + +4.6.028 (2009-08-25) + - Signature algorithm was finally fixed (see example n. 52). + +4.6.027 (2009-08-24) + - TCPDF now supports unembedded TrueTypeUnicode Fonts (just comment the $file entry on the fonts' php file. + +4.6.026 (2009-08-21) + - Bug #2841693 "Problem with MultiCell and ishtml and justification" was fixed. + - Signature functions were improved but not yet fixed (tcpdf.crt and example n. 52 were updated). + +4.6.025 (2009-08-17) + - Carriage returns (\r) were removed from source code. + - Problem related to set_magic_quotes_runtime() depracated was fixed. + +4.6.024 (2009-08-07) + - Bug item #2833556 "justification using other units than mm" was fixed. + - Documentation was fixed/updated. + +4.6.023 (2009-08-02) + - Bug item #2830537 "MirrorH can show mask for transparent PNGs" was fixed. + +4.6.022 (2009-07-24) + - A bug relative to single line printing when using WriteHTMLCell() was fixed. + - Signature support were improved but is still experimental. + - Fonts Free and Dejavu were updated to latest versions. + +4.6.021 (2009-07-20) + - Bug item #2824015 "XHTML Ampersand & in hyperlink bug" was fixed. + - Bug item #2824036 "Image as hyperlink in table, text displaced at page break" was fixed. + - Links alignment on justified text was fixed. + - Unicode "\u" modifier was added to re_spaces variable by default. + +4.6.020 (2009-07-16) + - Bug item #2821921 "issue in example 18" was fixed. + - Signature of SetRTL() method was changed. + +4.6.019 (2009-07-13) + - Bug item #2820703 "xref table broken" was fixed. + +4.6.018 (2009-07-10) + - Bug item #2819319 "Text over text" was fixed. + - Method Arrow() was added to print graphic arrows (example 12 was updated). + +4.6.017 (2009-07-05) + - Bug item #2816079 "Example 48 not working" was fixed. + - The signature of the checkPageBreak() was changed. The parameter $addpage was added to turn off the automatic page creation. + +4.6.016 (2009-06-16) + - Method setSpacesRE() was added to set the regular expression used for detecting withespaces or word separators. If you are using chinese, try: setSpacesRE('/[\s\p{Z}\p{Lo}]/');, otherwise you can use setSpacesRE('/[\s\p{Z}]/'); + - The method _putinfo() now automatically fills the metadata with '?' in case of empty string. + +4.6.015 (2009-06-11) + - Bug #2804667 "word wrap bug" was fixed. + +4.6.014 (2009-06-04) + - Bug #2800931 "Table thead tag bug" was fixed. + - A bug related to

 tag was fixed.
+
+4.6.013 (2009-05-28)
+	- List bullets position was fixed for RTL languages.
+
+4.6.012 (2009-05-23)
+	- setUserRights() method doesn't work anymore unless you call the setSignature() method with the Adobe private key!
+
+4.6.011 (2009-05-18)
+	- Signature of the Image() method was changed to include the new $fitbox parameter (see source code documentation).
+
+4.6.010 (2009-05-17)
+	- Image() method was improved: now is possible to specify the maximum dimensions for a constraint box defined by $w and $h parameters, and setting the $resize parameter to null.
+	-  tag indent problem was fixed.
+	- $y parameter was added to checkPageBreak() method.
+	- Bug n. 2791773 "writeHTML" was fixed.
+
+4.6.009 (2009-05-13)
+	- xref table for embedded files was fixed.
+
+4.6.008 (2009-05-07)
+	- setSignature() method was improved (but is still experimental).
+	- Example n. 52 was added.
+
+4.6.007 (2009-05-05)
+	- Bug #2786685 "writeHtmlCell and 
in custom footer" was fixed. + - Table header repeating bug was fixed. + - Some newlines and tabs are now automatically removed from HTML strings. + +4.6.006 (2009-04-28) + - Support for "..." was added. + - By default TCPDF requires PCRE Unicode support turned on but now works also without it (with limited ability to detect some Unicode blank spaces). + +4.6.005 (2009-04-25) + - Points (pt) conversion in getHTMLUnitToUnits() was fixed. + - Default tcpdf.pem certificate file was added. + - Experimental support for signing document was added but it is not yet completed (some help is needed - I think that the calculation of the ByteRange is OK and the problem is on the signature calculation). + +4.6.004 (2009-04-23) + - Method deletePage() was added to delete pages (see example n. 44). + +4.6.003 (2009-04-21) + - The caching mechanism of the UTF8StringToArray() method was fixed. + +4.6.002 (2009-04-20) + - Documentation of rollbackTransaction() method was fixed. + - The setImageScale() and getImageScale() methods now set and get the adjusting parameter used by pixelsToUnits() method. + - HTML images now support other units of measure than pixels (getHTMLUnitToUnits() is now used instead of pixelsToUnits()). + - WARNING: PDF_IMAGE_SCALE_RATIO has been changed by default to 1. + +4.6.001 (2009-04-17) + - Spaces between HTML block tags are now automatically removed. + - The bug related to cMargin changes between tables was fixed. + +4.6.000 (2009-04-16) + - WARNING: THIS VERSION CHANGES THE BEHAVIOUR OF $x and $y parameters for several TCPDF methods: + zero coordinates for $x and $y are now valid coordinates; + set $x and $y as empty strings to get the current value. + - Some error caused by 'empty' funtion were fixed. + - Default color for convertHTMLColorToDec() method was changed to white and the return value for invalid color is false. + - HTML on footer bug was fixed. + - The following examples were fixed: 5,7,10,17,19,20,21,33,42,43. + +4.5.043 (2009-04-15) + - Barcode class (barcode.php) was extended to include new linear barcode types (see example n. 27): + C39 : CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9 + C39+ : CODE 39 with checksum + C39E : CODE 39 EXTENDED + C39E+ : CODE 39 EXTENDED + CHECKSUM + C93 : CODE 93 - USS-93 + S25 : Standard 2 of 5 + S25+ : Standard 2 of 5 + CHECKSUM + I25 : Interleaved 2 of 5 + I25+ : Interleaved 2 of 5 + CHECKSUM + C128A : CODE 128 A + C128B : CODE 128 B + C128C : CODE 128 C + EAN2 : 2-Digits UPC-Based Extention + EAN5 : 5-Digits UPC-Based Extention + EAN8 : EAN 8 + EAN13 : EAN 13 + UPCA : UPC-A + UPCE : UPC-E + MSI : MSI (Variation of Plessey code) + MSI+ : MSI + CHECKSUM (modulo 11) + POSTNET : POSTNET + PLANET : PLANET + RMS4CC : RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) + KIX : KIX (Klant index - Customer index) + IMB: Intelligent Mail Barcode - Onecode - USPS-B-3200 (NOTE: requires BCMath PHP extension) + CODABAR : CODABAR + CODE11 : CODE 11 + PHARMA : PHARMACODE + PHARMA2T : PHARMACODE TWO-TRACKS + +4.5.042 (2009-04-15) + - Method Write() was fixed for the strings containing only zero value. + +4.5.041 (2009-04-14) + - Barcode methods were fixed. + +4.5.040 (2009-04-14) + - Method Write() was fixed to handle empty strings. + +4.5.039 (2009-04-11) + - Support for linear barcodes was extended (see example n. 27 and barcodes.php documentation). + +4.5.038 (2009-04-10) + - Write() method was improved to support separators for Japanese, Korean, Chinese Traditional and Chinese Simplified. + +4.5.037 (2009-04-09) + - General performances were improved. + - The signature of the method utf8Bidi() was changed. + - The method UniArrSubString() was added. + - Experimental support for 2D barcodes were added (see example n. 50 and 2dbarcodes.php class). + +4.5.036 (2009-04-03) + - TCPDF methods can be called inside the HTML code (see example n. 49). + - All tag attributes, such as

must be enclosed within double quotes. + +4.5.035 (2009-03-28) + - Bug #2717436 "writeHTML rowspan problem (continued)" was fixed. + - Bug #2719090 "writeHTML fix follow up" was fixed. + - The method _putuserrights() was changed to avoid Adobe Reader 9.1 crash. This broken the 'trick' that was used to display forms in Acrobat Reader. + +4.5.034 (2009-03-27) + - Bug #2716914 "Bug writeHTML of a table in body and footer related with pb" was fixed. + - Bug #2717056 ] "writeHTML problem when setting tr style" was fixed. + - The signature of the Cell() method was changed. + +4.5.033 (2009-03-27) + - The support for rowspan/colspan on HTML tables was improved (see example n. 48). + +4.5.032 (2009-03-23) + - setPrintFooter(false) bug was fixed. + +4.5.031 (2009-03-20) + - Table header support was extended to multiple pages. + +4.5.030 (2009-03-20) + - thead tag is now supported on HTML tables (header rows are repeated after page breaks). + - The startTransaction() was improved to autocommit. + - List bullets now uses the foreground color (putHtmlListBullet()). + +4.5.029 (2009-03-19) + - The following methods were added to UNDO commands (see example 47): startTransaction(), commitTransaction(), rollbackTransaction(). + - All examples were updated. + +4.5.028 (2009-03-18) + - Bug #2690945 "List Bugs" was fixed. + - HTML text alignment on lists was fixed. + - The constant PDF_FONT_MONOSPACED was added to the configuration file to define the default monospaced font. + - The following methods were fixed: getPageWidth(), getPageHeight(), getBreakMargin(). + - All examples were updated. + +4.5.027 (2009-03-16) + - Method getPageDimensions() was added to get page dimensions. + - The signature of the following methos were changed: getPageWidth(), getPageHeight(), getBreakMargin(). + - _parsepng() method was fixed for PNG URL images (fread bug). + +4.5.026 (2009-03-11) + - Bug #2681793 affecting URL images with spaces was fixed. + +4.5.025 (2009-03-10) + - A small bug affecting hyphenation support was fixed. + - The method SetDefaultMonospacedFont() was added to define the default monospaced font. + +4.5.024 (2009-03-07) + - The bug #2666493 was fixed "Footer corrupts document". + +4.5.023 (2009-03-06) + - The bug #2666688 was fixed "Rowspan in tables". + +4.5.022 (2009-03-05) + - The bug #2659676 was fixed "refer to #2157099 test 4 < BR > problem still not fixed". + - addTOC() function bug was fixed. + +4.5.020 (2009-03-03) + - The following bug was fixed: "function removeSHY corrupts unicode". + +4.5.019 (2009-02-28) + - The problem of decimal separator using different locale was fixed. + - The text hyphenation is now supported (see example n. 46). + +4.5.018 (2009-02-26) + - The _destroy() method was added to unset all class variables and frees memory. + - Now it's possible to call Output() method multiple times. + +4.5.017 (2009-02-24) + - A minor bug that raises a PHP warning was fixed. + +4.5.016 (2009-02-24) + - Bug item #2631200 "getNumLines() counts wrong" was fixed. + - Multiple attachments bug was fixed. + - All class variables are now cleared on Output() for memory otpimization. + +4.5.015 (2009-02-18) + - Bug item #2612553 "function Write() must not break a line on   character" was fixed. + +4.5.014 (2009-02-13) + - Bug item #2595015 "POSTNET Barcode Checksum Error" was fixed (on barcode.php). + - Pagebreak bug for barcode was fixed. + +4.5.013 (2009-02-12) + - border attribute is now supported on HTML images (only accepts the same values accepted by Cell()). + +4.5.012 (2009-02-12) + - An error on image border feature was fixed. + +4.5.011 (2009-02-12) + - HTML links for images are now supported. + - height attribute is now supported on HTML cells. + - $border parameter was added to Image() and ImageEps() methods. + - The method getNumLines() was added to estimate the number of lines required for the specified text. + +4.5.010 (2009-01-29) + - Bug n. 2546108 "BarCode Y position" was fixed. + +4.5.009 (2009-01-26) + - Bug n. 2538094 "Empty pdf file created" was fixed. + +4.5.008 (2009-01-26) + - setPage() method was fixed to correctly restore graphic states. + - Source code was cleaned up for performances. + +4.5.007 (2009-01-24) + - checkPageBreak() and write1DBarcode() methods were fixed. + - Source code was cleaned up for performances. + - barcodes.php was updated. + +4.5.006 (2009-01-23) + - getHTMLUnitToPoints() method was replaced by getHTMLUnitToUnits() to fix HTML units bugs. + +4.5.005 (2009-01-23) + - Page closing bug was fixed. + +4.5.004 (2009-01-21) + - The access of convertHTMLColorToDec() method was changed to public + - Fixed bug on UL tag. + +4.5.003 (2009-01-19) + - Fonts on different folders are now supported. + +4.5.002 (2009-01-07) + - addTOC() function was improved (see example n. 45). + +4.5.001 (2009-01-04) + - The signature of startPageGroup() function was changed. + - Method Footer() was improved to automatically print page or page-group number (see example n. 23). + - Protected method formatTOCPageNumber() was added to customize the format of page numbers on the Table Of Content. + - The signature of addTOC() was changed to include the font used for page numbers. + +4.5.000 (2009-01-03) + - A new $diskcache parameter was added to class constructor to enable disk caching and reduce RAM memory usage (see example n. 43). + - The method movePageTo() was added to move pages to previous positions (see example n. 44). + - The methods getAliasNumPage() and getPageNumGroupAlias() were added to get the alias for page number (needed when using movepageTo()). + - The methods addTOC() was added to print a Table Of Content (see example n. 45). + - Imagick class constant was removed for better compatibility with PHP4. + - All existing examples were updated and new examples were added. + +4.4.009 (2008-12-29) + - Examples 1 and 35 were fixed. + +4.4.008 (2008-12-28) + - Bug #2472169 "Unordered bullet size not adjusted for unit type" was fixed. + +4.4.007 (2008-12-23) + - Bug #2459935 "no unit conversion for header line" was fixed. + - Example n. 42 for image alpha channel was added. + - All examples were updated. + +4.4.006 (2008-12-11) + - Method setLIsymbol() was changed to reflect latest changes in HTML list handling. + +4.4.005 (2008-12-10) + - Bug item #2413870 "ordered list override value" was fixed. + +4.4.004 (2008-12-10) + - The protected method getHTMLUnitToPoints() was added to accept various HTML units of measure (em, ex, px, in, cm, mm, pt, pc, %). + - The method intToRoman() was added to convert integer number to Roman representation. + - Support fot HTML lists was improved: the CSS property list-style-type is now supported. + +4.4.003 (2008-12-09) + - Bug item #2412147 "Warning on line 3367" was fixed. + - Method setHtmlLinksStyle() was added to set default HTML link colors and font style. + - Method addHtmlLink() was changed to use color and style defined on the inline CSS. + +4.4.002 (2008-12-09) + - Borders on Multicell() were fixed. + - Problem of Multicell() on Header function (Bug item #2407579) was fixed. + - Problem on graphics tranformations applied to Multicell() was fixed. + - Support for ImageMagick was added. + - Width calculation for nested tables was fixed. + +4.4.001 (2008-12-08) + - Some missing core fonts were added on fonts directory. + - CID0 fonts rendering was fixed. + - HTML support was improved (

 and  tags are now supported).
+	- Bug item #2406022 "Left padding bug in MultiCell with maxh" was fixed.
+
+4.4.000 (2008-12-07)
+	- File attachments are now supported (see example n. 41).
+	- Font functions were optimized to reduce document size.
+	- makefont.php was updated.
+	- Linux binaries were added on /fonts/utils
+	- All fonts were updated.
+	- $autopadding parameter was added to Multicell() to disable automatic padding features.
+	- $maxh parameter was added to Multicell() and Write() to set a maximum height.
+
+4.3.009 (2008-12-05)
+	- Bug item #2392989 (Custom header + setlinewidth + cell border bug) was fixed.
+
+4.3.008 (2008-12-05)
+	- Bug item #2390566 "rect bug" was fixed.
+	- File path was fixed for font embedded files.
+	- SetFont() method signature was changed to include the font filename.
+	- Some font-related methods were improved.
+	- Methods getFontFamily() and getFontStyle() were added.
+
+4.3.007 (2008-12-03)
+	- PNG alpha channel is now supported (GD library is required).
+	- AddFont() function now support custom font file path on $file parameter.
+	- The default width variable ($dw) is now always defined for any font.
+	- The 'Style' attribute on CID-0 fonts was removed because of protection bug.
+
+4.3.006 (2008-12-01)
+	- A regular expression on getHtmlDomArray() to find HTML tags was fixed.
+
+4.3.005 (2008-11-25)
+	- makefont.php was fixed.
+	- Bug item #2339877 was fixed (false loop condition detected on WriteHTML()).
+	- Bug item #2336733 was fixed (lasth value update on Multicell() when border and fill are disabled).
+	- Bug item #2342303 was fixed (automatic page-break on Image() and ImageEPS()).
+
+4.3.004 (2008-11-19)
+	- Function _textstring() was fixed (bug 2309051).
+	- All examples were updated.
+
+4.3.003 (2008-11-18)
+	- CID-0 font bug was fixed.
+	- Some functions were optimized.
+	- Function getGroupPageNoFormatted() was added.
+	- Example n. 23 was updated.
+
+4.3.002 (2008-11-17)
+	- Bug item #2305518 "CID-0 font don't work with encryption" was fixed.
+
+4.3.001 (2008-11-17)
+	- Bug item #2300007 "download mimetype pdf" was fixed.
+	- Double quotes were replaced by single quotes to improve PHP performances.
+	- A bug relative to HTML cell borders was fixed.
+
+4.3.000 (2008-11-14)
+	- The function setOpenCell() was added to set the top/bottom cell sides to be open or closed when the cell cross the page.
+	- A bug relative to list items indentation was fixed.
+	- A bug relative to borders on HTML tables and Multicell was fixed.
+	- A bug relative to rowspanned cells was fixed.
+	- A bug relative to html images across pages was fixed.
+
+4.2.009 (2008-11-13)
+	- Spaces between li tags are now automatically removed.
+
+4.2.008 (2008-11-12)
+	- A bug relative to fill color on next page was fixed.
+
+4.2.007 (2008-11-12)
+	- The function setListIndentWidth() was added to set custom indentation widht for HTML lists.
+
+4.2.006 (2008-11-06)
+	- A bug relative to HTML justification was fixed.
+
+4.2.005 (2008-11-06)
+	- A bug relative to HTML justification was fixed.
+	- The methods formatPageNumber() and PageNoFormatted() were added to format page numbers.
+	- Default Footer() method was changed to use PageNoFormatted() instead of PageNo().
+	- Example 6 was updated.
+
+4.2.004 (2008-11-04)
+	- Bug item n. 2217039 "filename handling improvement" was fixed.
+
+4.2.003 (2008-10-31)
+	- Font style bug was fixed.
+
+4.2.002 (2008-10-31)
+	- Bug item #2210922 (htm element br not work) was fixed.
+	- Write() function was improved to support margin changes.
+
+4.2.001 (2008-10-30)
+	- setHtmlVSpace($tagvs) function was added to set custom vertical spaces for HTML tags.
+	- writeHTML() function now support margin changes during execution.
+	- Signature of addHTMLVertSpace() function is changed.
+
+4.2.000 (2008-10-29)
+	- htmlcolors.php was changed to support class-loaders.
+	- ImageEps() function was improved in performances.
+	- Signature of Link() And Annotation() functions were changed.
+	- (Bug item #2198926) Links and Annotations alignment were fixed (support for geometric tranformations was added).
+	- rowspan mode for HTML table cells was improved and fixed.
+	- Booklet mode for double-sided pages was added; see SetBooklet() function and example n. 40.
+	- lastPage() signature is changed.
+	- Signature of Write() function is changed.
+	- Some HTML justification problems were fixed.
+	- Some functions were fixed to better support RTL mode.
+	- Example n. 10 was changed to support RTL mode.
+	- All examples were updated.
+
+4.1.004 (2008-10-23)
+	- unicode_data.php was changed to support class-loaders.
+	- Bug item #2186040/2 (writeHTML margin problem) was fixed.
+
+4.1.003 (2008-10-22)
+	- Bug item #2185399 was fixed (rowspan and page break).
+	- Bugs item #2186040 was fixed (writeHTML margin problem).
+	- Newline after table was removed.
+
+4.1.002 (2008-10-21)
+	- Bug item #2184525 was fixed (rowspan on HTML cell).
+
+4.1.001 (2008-10-21)
+	- Support for "start" attribute was added to HTML ordered list.
+	- unicode_data.php file was changed to include UTF-8 to ASCII table.
+	- Some functions were modified to better support UTF-8 extensions to core fonts.
+	- Support for images on HTML lists was improved.
+	- Examples n. 1 and 6 were updated.
+
+4.1.000 (2008-10-18)
+	- Page-break bug using HTML content was fixed.
+	- The "false" parameter was reintroduced to class_exists function on PHP5 version to avoid autoload.
+	- addHtmlLink() function was improved to support internal links (i.e.: link to page 23).
+	- Justification alignment is now supported on HTML (see example n. 39).
+	- example_006.php was updated.
+
+4.0.033 (2008-10-13)
+	- Bug n. 2157099 was fixed.
+	- SetX() and SetY() functions were improved.
+	- SetY() includes a new parameter to avoid the X reset.
+
+4.0.032 (2008-10-10)
+	- Bug n. 2156926 was fixed (bold, italic, underlined, linethrough).
+	- setStyle() method was removed.
+	- Configuration file was changed to use helvetica (non-unicode) font by default.
+	- The use of mixed font types was improved.
+	- All examples were updated.
+
+4.0.031 (2008-10-09)
+	- _putannots() and _putbookmarks() links alignments were fixed.
+
+4.0.030 (2008-10-07)
+	- _putbookmarks() function was fixed.
+	- _putannots() was fixed to include internal links.
+
+4.0.029 (2008-09-27)
+	- Infinite loop bug was fixed [Bug item #130309].
+	- Multicell() problem on Header() was fixed.
+
+4.0.028 (2008-09-26)
+	- setLIsymbol() was added to set the LI symbol used on UL lists.
+	- Missing $padding and $encryption_key variables declarations were added [Bug item #2129058].
+
+4.0.027 (2008-09-19)
+	- Bug #2118588 "Undefined offset in tcpdf.php on line 9581" was fixed.
+	- arailunicid0.php font was updated.
+	- The problem of javascript form fields duplication after saving was fixed.
+
+4.0.026 (2008-09-17)
+	- convertHTMLColorToDec() function was improved to support rgb(RR,GG,BB) notation.
+	- The following inline CSS attributes are now supported: text-decoration, color, background-color and font-size names: xx-small, x-small, small, medium, large, x-large, xx-large
+	- Example n. 6 was updated.
+
+4.0.025 (2008-09-15)
+	- _putcidfont0 function was improved to include CJK fonts (Chinese, Japanese, Korean, CJK, Asian fonts) without embedding.
+	- arialunicid0 font was added (see the new example n. 38).
+	- The following Unicode to CID-0 tables were added on fonts folder: uni2cid_ak12.php, uni2cid_aj16.php, uni2cid_ag15.php, uni2cid_ac15.php.
+
+4.0.024 (2008-09-12)
+	- "stripos" function was replaced with "strpos + strtolower" for backward compatibility with PHP4.
+	- support for Spot Colors were added. Check the new example n. 37 and the following new functions:
+		AddSpotColor()
+		SetDrawSpotColor()
+		SetFillSpotColor()
+		SetTextSpotColor()
+		_putspotcolors()
+	- Bookmark() function was improved to fix wrong levels.
+	- $lasth changes after header/footer calls were fixed.
+
+4.0.023 (2008-09-05)
+	- Some HTML related problems were fixed.
+	- Image alignment on HTML was changed, now it always defaults to the normal mode (see example_006.php).
+
+4.0.022 (2008-08-28)
+	- Line height on HTML was fixed.
+	- Image inside an HTML cell problem was fixed.
+	- A new "zarbold" persian font was added.
+
+4.0.021 (2008-08-24)
+	- HTTP headers were fixed on Output function().
+	- getAliasNbPages() and getPageGroupAlias() functions were changed to support non-unicode fonts on unicode documents.
+	- Function Write() was fixed.
+	- The problem of additional vertical spaces on HTML was fixed.
+	- The problem of frame around HTML links was fixed.
+
+4.0.020 (2008-08-15)
+	- "[2052259] WriteHTML  & " bug was fixed.
+
+4.0.019 (2008-08-13)
+	- "Rowspan on first cell" bug was fixed.
+
+4.0.018 (2008-08-08)
+	- Default cellpadding for HTML tables was fixed.
+	- Annotation() function was added to support some PDF annotations (see example_036.php and section 8.4 of PDF reference 1.7).
+	- HTML links are now correclty shifted during line alignments.
+	- function getAliasNbPages() was added and Footer() was updated.
+	- RowSpan mode for HTML tables was fixed.
+	- Bugs item #2043610 "Multiple sizes vertical align wrong" was fixed.
+	- ImageEPS() function was improved and RTL alignment was fixed (see example_032.php).
+
+4.0.017 (2008-08-05)
+	- Missing CNZ and CEO style modes were added to Rect() function.
+	- Fonts utils were updated to include support for OpenType fonts.
+	- getLastH() function was added.
+
+4.0.016 (2008-07-30)
+	- setPageMark() function was added. This function must be called after calling Image() function for a background image.
+
+4.0.015 (2008-07-29)
+	- Some functions were changed to support different page formats (see example_028.php).
+	- The signature of setPage() function is changed.
+
+4.0.014 (2008-07-29)
+	- K_PATH_MAIN calculation on tcpdf_config.php was fixed.
+	- HTML support for EPS/AI images was added (see example_006.php).
+	- Bugs item #2030807 "Truncated text on multipage html fields" was fixed.
+	- PDF header bug was fixed.
+	- helvetica was added as default font family.
+	- Stroke mode was fixed on Text function.
+	- several minor bugs were fixed.
+
+4.0.013 (2008-07-27)
+	- Bugs item #2027799 " Big spaces between lines after page break" was fixed.
+	- K_PATH_MAIN calculation on tcpdf_config.php was changed.
+	- Function setVisibility() was fixed to avoid the "Incorrect PDEObject type" error message.
+
+4.0.012 (2008-07-24)
+	- Addpage(), Header() and Footer() functions were changed to simplify the implementation of external header/footer functions.
+	- The following functions were added:
+			setHeader()
+			setFooter()
+			getImageRBX()
+			getImageRBY()
+			getCellHeightRatio()
+			getHeaderFont()
+			getFooterFont()
+			getRTL()
+			getBarcode()
+			getHeaderData()
+			getHeaderMargin()
+			getFooterMargin()
+
+4.0.011 (2008-07-23)
+	- Font support was improved.
+	- The folder /fonts/utils contains new utilities and instructions for embedd font files.
+	- Documentation was updated.
+
+4.0.010 (2008-07-22)
+	- HTML tables were fixed to work across pages.
+	- Header() and Footer() functions were updated to preserve previous settings.
+	- example_035.php was added.
+
+4.0.009 (2008-07-21)
+	- UTF8StringToArray() function was fixed for non-unicode mode.
+
+4.0.008 (2008-07-21)
+	- Barcodes alignment was fixed (see example_027.php).
+	- unicode_data.php was updated.
+	- Arabic shaping for "Zero-Width Non-Joiner" character (U+200C) was fixed.
+
+4.0.007 (2008-07-18)
+	- str_split was replaced by preg_split for compatibility with PHP4 version.
+	- Clipping mode was added to all graphic functions by using parameter $style = "CNZ" or "CEO" (see example_034.php).
+
+4.0.006 (2008-07-16)
+	- HTML rowspan bug was fixed.
+	- Line style for MultiCell() was fixed.
+	- WriteHTML() function was improved.
+	- CODE128C barcode was fixed (barcodes.php).
+
+4.0.005 (2008-07-11)
+	- Bug [2015715] "PHP Error/Warning" was fixed.
+
+4.0.004 (2008-07-09)
+	- HTML cell internal padding was fixed.
+
+4.0.003 (2008-07-08)
+	- Removed URL encoding when F option is selected on Output() function.
+	- fixed some minor bugs in html tables.
+
+4.0.002 (2008-07-07)
+	- Bug [2000861] was still unfixed and has been fixed.
+
+4.0.001 (2008-07-05)
+	- Bug [2000861] was fixed.
+
+4.0.000 (2008-07-03)
+	- THIS IS A MAIN RELEASE THAT INCLUDES SEVERAL NEW FEATURES AND BUGFIXES
+	- Signature fo SetTextColor() and SetFillColor() functions was changed (parameter $storeprev was removed).
+	- HTML support was completely rewritten and improved (see example 6).
+	- Alignments parameters were fixed.
+	- Functions GetArrStringWidth() and GetStringWidth() now include font parameters.
+	- Fonts support was improved.
+	- All core fonts were replaced and moved to fonts/ directory.
+	- The following functions were added: getMargins(), getFontSize(), getFontSizePt().
+	- File config/tcpdf_config_old.php was renamed tcpdf_config_alt.php and updated.
+	- Multicell and WriteHTMLCell fill function was fixed.
+	- Several minor bugs were fixed.
+	- barcodes.php was updated.
+	- All examples were updated.
+
+------------------------------------------------------------
+
+3.1.001 (2008-06-13)
+	- Bug [1992515] "K_PATH_FONTS default value wrong" was fixed.
+	- Vera font was removed, DejaVu font and Free fonts were updated.
+	- Image handling was improved.
+	- All examples were updated.
+
+3.1.000 (2008-06-11)
+	- setPDFVersion() was added to change the default PDF version (currently 1.7).
+	- setViewerPreferences() was added to control the way the document is to be presented on the screen or printed (see example 29).
+	- SetDisplayMode() signature was changed (new options were added).
+	- LinearGradient(), RadialGradient(), CoonsPatchMesh() functions were added to print various color gradients (see example 30).
+	- PieSector() function was added to render render pie charts (see example 31).
+	- ImageEps() was added to display EPS and AI images with limited support (see example 32).
+	- writeBarcode() function is now depracated, a new write1DBarcode() function was added. The barcode directory was removed and a new barcodes.php file was added.
+	- The new write1DBarcode() function support more barcodes and do not need the GD library (see example 027). All barcodes are directly written to PDF using graphic functions.
+	- HTML lists were improved and could be nested (you may now represent trees).
+	- AddFont() bug was fixed.
+	- _putfonts() bug was fixed.
+	- graphics functions were fixed.
+	- unicode_data.php file was updated (fixed).
+	- almohanad font was updated.
+	- example 18 was updated (Farsi and Arabic languages).
+	- source code cleanup.
+	- All examples were updated and new examples were added.
+
+3.0.015 (2008-06-06)
+	- AddPage() function signature is changed to include page format.
+	- example 28 was added to show page format changes.
+	- setPageUnit() function was added to change the page units of measure.
+	- setPageFormat() function was added to change the page format and orientation between pages.
+	- setPageOrientation() function was added to change the page orientation.
+	- Arabic font shaping was fixed for laa letter and square boxes (see the example 18).
+
+3.0.014 (2008-06-04)
+	- Arabic font shaping was fixed.
+	- setDefaultTableColumns() function was added.
+	- $cell_height_ratio variable was added.
+	- setCellHeightRatio() function was added to define the default height of cell repect font height.
+
+3.0.013 (2008-06-03)
+	- Multicell height parameter was fixed.
+	- Arabic font shaping was improved.
+	- unicode_data.php was updated.
+
+3.0.012 (2008-05-30)
+	- K_PATH_MAIN and K_PATH_URL constants are now automatically set on config file.
+	- DOCUMENT_ROOT constant was fixed for IIS Webserver (config file was updated).
+	- Arabic font shaping was improved.
+	- TranslateY() function was fixed (bug [1977962]).
+	- setVisibility() function was fixed.
+	- writeBarcode() function was fixed to scale using $xref parameter.
+	- All examples were updated.
+
+3.0.011 (2008-05-23)
+	- CMYK color support was added to all graphic functions.
+	- HTML table support was improved:
+	  -- now it's possible to include additional html tags inside a cell;
+	  -- colspan attribute was added.
+	- example 006 was updated.
+
+3.0.010 (2008-05-21)
+	- fixed $laa_array inclusion on utf8Bidi() function.
+
+3.0.009 (2008-05-20)
+	- unicode_data.php was updated.
+	- Arabic laa letter problem was fixed.
+
+3.0.008 (2008-05-12)
+	- Arabic support was fixed and improved (unicode_data.php was updated).
+	- Polycurve() function was added to draw a poly-Bezier curve.
+	- list items alignment was fixed.
+	- example 6 was updated.
+
+3.0.007 (2008-05-06)
+	- Arabic support was fixed and improved.
+	- AlMohanad (arabic) font was added.
+	- C128 barcode bugs were fixed.
+
+3.0.006 (2008-04-21)
+	- Condition to check negative width values was added.
+
+3.0.005 (2008-04-18)
+	- back-Slash character escape was fixed on writeHTML() function.
+	- Exampe 6 was updated.
+
+3.0.004 (2008-04-11)
+	- Bug [1939304] (Right to Left Issue) was fixed.
+
+3.0.003 (2008-04-07)
+	- Bug [1934523](Words between HTML tags in cell not kept on one line) was fixed.
+	- "face" attribute of "font" tag is now fully supported.
+
+3.0.002 (2008-04-01)
+	- Write() functions now return the number of cells and not the number of lines.
+	- TCPDF is released under LGPL 2.1, or any later version.
+
+3.0.001 (2008-05-28)
+	- _legacyparsejpeg() and _legacyparsepng() were renamed _parsejpeg() and _parsepng().
+	- function writeBarcode() was fixed.
+	- all examples were updated.
+	- example 27 was added to show various barcodes.
+
+3.0.000 (2008-03-27)
+	- private function pixelsToMillimeters() was changed to public function pixelsToUnits() to fix html image size bug.
+	- Image-related functions were rewritten.
+	- resize parameter was added to Image() signature to reduce the image size and fit width and height (see example 9).
+	- TCPDF now supports all images supported by GD library: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM.
+	- CMYK support was added to SetDrawColor(), SetFillColor(), SetTextColor() (see example 22).
+	- Page Groups were added (see example 23).
+	- setVisibility() function was added to restrict the rendering of some elements to screen or printout (see example 24).
+	- All private variables and functions were changed to protected.
+	- setAlpha() function was added to give transparency support for all objects (see example 25).
+	- Clipping and stroke modes were added to Text() function (see example 26).
+	- All examples were moved to "examples" directory.
+	- function setJPEGQuality() was added to set the JPEG image comrpession (see example 9).
+
+2.9.000 (2008-03-26)
+	- htmlcolors.php file was added to include html colors.
+	- Support for HTML color names and three-digit hexadecimal color codes was added.
+	- private function convertColorHexToDec() was renamed convertHTMLColorToDec().
+	- color and bgcolor attributes are now supported on all HTML tags (color nesting is also supported).
+	- Write() function were fixed.
+	- example_006.php was updated.
+	- private function setUserRights() was added to release user rights on Acrobat Reader (this allows to display forms, see example 14)
+
+2.8.000 (2008-03-20)
+	- Private variables were changed to protected.
+	- Function Write() was fixed and improved.
+	- Support for dl, dt, dd, del HTML tags was introduced.
+	- Line-trought mode was added for HTML and text.
+	- Text vertical alignment on cells were fixed.
+	- Examples were updated to reflect changes.
+
+2.7.002 (2008-03-13)
+	- Bug "[1912142] Encrypted PDF created/modified date" was fixed.
+
+2.7.001 (2008-03-10)
+	- Cell justification was fixed for non-unicode mode.
+
+2.7.000 (2008-03-09)
+	- Cell() stretching mode 4 (forced character spacing) was fixed.
+	- writeHTMLCell() now uses Multicell() to write.
+	- Multicell() has a new parameter $ishtml to act as writeHTMLCell().
+	- Write() speed was improved for non-arabic strings.
+	- Example n. 20 was changed.
+
+2.6.000 (2008-03-07)
+	- various alignments bugs were fixed.
+
+2.5.000 (2008-03-07)
+	- Several bugs were fixed.
+	- example_019.php was added to test non-unicode mode using old fonts.
+
+2.4.000 (2008-03-06)
+	- RTL support was deeply improved.
+	- GetStringWidth() was fixed to support RTL languages.
+	- Text() RTL alignment was fixed.
+	- Some functions were added: GetArrStringWidth(), GetCharWidth(), uniord(), utf8Bidi().
+	- example_018.php was added and test_unicode.php was removed.
+
+2.3.000 (2008-03-05)
+	- MultiCell() signature is changed. Now support multiple columns across pages (see example_017).
+	- Write() signature is changed. Now support the cell mode to be used with MultiCell.
+	- Header() and Footer() were changed.
+	- The following functions were added: UTF8ArrSubString() and unichr().
+	- Examples were updated to reflect last changes.
+
+2.2.004 (2008-03-04)
+	- Several examples were added.
+	- AddPage() Header() and Footer() were fixed.
+	- Documentation is now available on http://www.tcpdf.org
+
+2.2.003 (2008-03-03)
+	- [1894853] Performance of MultiCell() was improved.
+	- RadioButton and ListBox functions were added.
+	- javascript form functions were rewritten and properties names are changed. The properties function supported by form fields are listed on Possible values are listed on http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf.
+
+2.2.002 (2008-02-28)
+	- [1900495] html images path was fixed.
+	- Legacy image functions were reintroduced to allow PNG and JPEG support without GD library.
+
+2.2.001 (2008-02-16)
+	- The bug "[1894700] bug with replace relative path" was fixed
+	- Justification was fixed
+
+2.2.000 (2008-02-12)
+	- fixed javascript bug introduced with latest release
+
+2.1.002 (2008-02-12)
+	- Justify function was fixed on PHP4 version.
+	- Bookmank function was added ([1578250] Table of contents).
+	- Javascript and Form fields support was added ([1796359] Form fields).
+
+2.1.001 (2008-02-10)
+	- The bug "[1885776] Race Condition in function justitfy" was fixed.
+	- The bug "[1890217] xpdf complains that pdf is incorrect" was fixed.
+
+2.1.000 (2008-01-07)
+	- FPDF_FONTPATH constant was changed to K_PATH_FONTS on config file
+	- Bidirectional Algorithm to correctly reverse bidirectional languages was added.
+	- SetLeftMargin, SetTopMargin, SetRightMargin functions were fixed.
+	- SetCellPadding function was added.
+	- writeHTML was updated with new parameters.
+	- Text function was fixed.
+	- MultiCell function was fixed, now works also across multiple pages.
+	- Line width was fixed on Header and Footer functions and 
tag. + - "GetImageSize" was renamed "getimagesize". + - Document version was changed from 1.3 to 1.5. + - _begindoc() function was fixed. + - ChangeDate was fixed and ModDate was added. + - The following functions were added: + setPage() : Move pointer to the specified document page. + getPage() : Get current document page number. + lastpage() : Reset pointer to the last document page. + getNumPages() : Get the total number of inserted pages. + GetNumChars() : count the number of (UTF-8) characters in a string. + - $stretch parameter was added to Cell() function to fit text on cell: + 0 = disabled + 1 = horizontal scaling only if necessary + 2 = forced horizontal scaling + 3 = character spacing only if necessary + 4 = forced character spacing + - Line function was fixed for RTL. + - Graphic transformation functions were added [1811158]: + StartTransform() + StopTransform() + ScaleX() + ScaleY() + ScaleXY() + Scale() + MirrorH() + MirrorV() + MirrorP() + MirrorL() + TranslateX() + TranslateY() + Translate() + Rotate() + SkewX() + SkewY() + Skew() + - Graphic function were added/updated [1688549]: + SetLineStyle() + _outPoint() + _outLine() + _outRect() + _outCurve() + Line() + Rect() + Curve + Ellipse + Circle + Polygon + RegularPolygon + +2.0.000 (2008-01-04) + - RTL (Right-To-Left) languages support was added. Language direction is set using the $l['a_meta_dir'] setting on /configure/language/xxx.php language files. + - setRTL($enable) method was added to manually enable/disable the RTL text direction. + - The attribute "dir" was added to support custom text direction on HTML tags. Possible values are: ltr - for Left-To-Right and RTL for Right-To-Left. + - RC4 40bit encryption was added. Check the SetProtection method. + - [1815213] Improved image support for GIF, JPEG, PNG formats. + - [1800094] Attribute "value" was added to ordered list items
  • . + - Image function now has a new "align" parameter that indicates the alignment of the pointer next to image insertion and relative to image height. The value can be: + T: top-right for LTR or top-left for RTL + M: middle-right for LTR or middle-left for RTL + B: bottom-right for LTR or bottom-left for RTL + N: next line + - Attribute "align" was added to html tag to set the above image "align" parameter. Possible values are: + top: top-right for LTR or top-left for RTL + middle: middle-right for LTR or middle-left for RTL + bottom: bottom-right for LTR or bottom-left for RTL + - [1798103] newline was added after , and

    tages. + - [1816393] Documentation was updated. + - 'ln' parameter was fixed on writeHTMLCell. Now it's possible to print two or more columns across several pages; + - The method lastPage() was added to move the pointer on the last page; + +------------------------------------------------------------ + +1.53.0.TC034 (2007-07-30) + - fixed htmlentities conversion. + - MultiCell() function returns the number of cells. + +1.53.0.TC033 (2007-07-30) + - fixed bug 1762550: case sensitive for font files + - NOTE: all fonts files names must be in lowercase! + +1.53.0.TC032 (2007-07-27) + - setLastH method was added to resolve bug 1689071. + - all fonts names were converted in lowercase (bug 1713005). + - bug 1740954 was fixed. + - justification was added as Cell option. + +1.53.0.TC031 (2007-03-20) + - ToUnicode CMap were added on _puttruetypeunicode function. Now you may search and copy unicode text. + +1.53.0.TC030 (2007-03-06) + - fixed bug on PHP4 version. + +1.53.0.TC029 (2007-03-06) + - DejaVu Fonts were added. + +1.53.0.TC028 (2007-03-03) + - MultiCell function signature were changed: the $ln parameter were added. Check documentation for further information. + - Greek language were added on example sentences. + - setPrintHeader() and setPrintFooter() functions were added to enable or disable page header and footer. + +1.53.0.TC027 (2006-12-14) + - $attr['face'] bug were fixed. + - K_TCPDF_EXTERNAL_CONFIG control where introduced on /config/tcpdf_config.php to use external configuration files. + +1.53.0.TC026 (2006-10-28) + - writeHTML function call were fixed on examples. + +1.53.0.TC025 (2006-10-27) + - Bugs item #1421290 were fixed (0D - 0A substitution in some characters) + - Bugs item #1573174 were fixed (MultiCell documentation) + +1.53.0.TC024 (2006-09-26) + - getPageHeight() function were fixed (bug 1543476). + - fixed missing breaks on closedHTMLTagHandler function (bug 1535263). + - fixed extra spaces on Write function (bug 1535262). + +1.53.0.TC023 (2006-08-04) + - paths to barcode directory were fixed. + - documentation were updated. + +1.53.0.TC022 (2006-07-16) + - fixed bug: [ 1516858 ] Probs with PHP autoloader and class_exists() + +1.53.0.TC021 (2006-07-01) + - HTML attributes with whitespaces are now supported (thanks to Nelson Benitez for his support) + +1.53.0.TC020 (2006-06-23) + - code cleanup + +1.53.0.TC019 (2006-05-21) + - fixed and closing tags + +1.53.0.TC018 (2006-05-18) + - fixed font names bug + +1.53.0.TC017 (2006-05-18) + - the TTF2UFM utility to convert True Type fonts for TCPDF were included on fonts folder. + - new free unicode fonts were included on /fonts/freefont. + - test_unicode.php example were exended. + - parameter $fill were added on Write, writeHTML and writeHTMLCell functions. + - documentation were updated. + +1.53.0.TC016 (2006-03-09) + - fixed closing tag on html parser. + +1.53.0.TC016 (2005-08-28) + - fpdf.php and tcpdf.php files were joined in one single class (you can still extend TCPDF with your own class). + - fixed problem when mb_internal_encoding is set. + +1.53.0.TC014 (2005-05-29) + - fixed WriteHTMLCell new page issue. + +1.53.0.TC013 (2005-05-29) + - fixed WriteHTMLCell across pages. + +1.53.0.TC012 (2005-05-29) + - font color attribute bug were fixed. + +1.53.0.TC011 (2005-03-31) + - SetFont function were fixed (thank Sjaak Lauwers for bug notice). + +1.53.0.TC010 (2005-03-22) + - the html functions were improved (thanks to Manfred Vervuert for bug reporting). + +1.53.0.TC009 (2005-03-19) + - a wrong reference to convertColorHexToDec were fixed. + +1.53.0.TC008 (2005-02-07) + - removed some extra bytes from PHP files. + +1.53.0.TC007 (2005-01-08) + - fill attribute were removed from writeHTMLCell method. + +1.53.0.TC006 (2005-01-08) + - the documentation were updated. + +1.53.0.TC005 (2005-01-05) + - Steven Wittens's unicode methods were removed. + - All unicode methods were rewritten from scratch. + - TCPDF is now licensed as LGPL. + +1.53.0.TC004 (2005-01-04) + - this changelog were added. + - removed commercial fonts for licensing issue. + - Bitstream Vera Fonts were added (http://www.bitstream.com/font_rendering/products/dev_fonts/vera.html). + - Now the AddFont and SetFont functions returns the basic font if the styled version do not exist. + +EOF ---------------------------------------------------------------------------- diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/LICENSE.TXT b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/LICENSE.TXT new file mode 100755 index 00000000..cbee875b --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/LICENSE.TXT @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/README.TXT b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/README.TXT new file mode 100755 index 00000000..d45873c1 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/README.TXT @@ -0,0 +1,84 @@ +TCPDF - README +============================================================ + +IF YOU'D LIKE TO SUPPORT TCPDF, PLEASE CONSIDER MAKING A +DONATION: +http://sourceforge.net/donate/index.php?group_id=128076 + +------------------------------------------------------------ + +Name: TCPDF +Version: 5.0.002 +Release date: 2010-05-06 +Author: Nicola Asuni + +Copyright (c) 2001-2010: + Nicola Asuni + Tecnick.com s.r.l. + Via Della Pace, 11 + 09044 Quartucciu (CA) + ITALY + www.tecnick.com + +URLs: + http://www.tcpdf.org + http://www.sourceforge.net/projects/tcpdf + +Description: + TCPDF is a PHP class for generating PDF files on-the-fly without requiring external extensions. + TCPDF has been originally derived from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org). + +Main Features: +// * no external libraries are required for the basic functions; +// * all ISO page formats, custom page formats, custom margins and units of measure; +// * UTF-8 Unicode and Right-To-Left languages; +// * TrueTypeUnicode, OpenTypeUnicode, TrueType, OpenType, Type1 and CID-0 fonts; +// * methods to publish some XHTML code, Javascript and Forms; +// * images, graphic (geometric figures) and transformation methods; +// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html) +// * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, QR-Code; +// * Grayscale, RGB, CMYK, Spot Colors and Transparencies; +// * automatic page header and footer management; +// * document encryption and digital signature certifications; +// * transactions to UNDO commands; +// * PDF annotations, including links, text and file attachments; +// * text rendering modes (fill, stroke and clipping); +// * multiple columns mode; +// * bookmarks and table of content; +// * text hyphenation; +// * automatic page break, line break and text alignments including justification; +// * automatic page numbering and page groups; +// * move and delete pages; +// * page compression (requires php-zlib extension); + + +Installation (full instructions on http://www.tcpdf.org): + 1. copy the folder on your Web server + 2. set your installation path and other parameters on the config/tcpdf_config.php + 3. call the examples/example_001.php page with your browser to see an example + +Source Code Documentation: + doc/index.html + +For Additional Documentation: + http://www.tcpdf.org + +License + Copyright (C) 2002-2010 Nicola Asuni - Tecnick.com S.r.l. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . + + See LICENSE.TXT file for more information. + +============================================================ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/barcodes.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/barcodes.php new file mode 100755 index 00000000..38e985dc --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/barcodes.php @@ -0,0 +1,1978 @@ +. +// +// See LICENSE.TXT file for more information. +// ---------------------------------------------------------------------------- +// +// Description : PHP class to creates array representations for +// common 1D barcodes to be used with TCPDF. +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com S.r.l. +// Via della Pace, 11 +// 09044 Quartucciu (CA) +// ITALY +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * PHP class to creates array representations for common 1D barcodes to be used with TCPDF. + * @package com.tecnick.tcpdf + * @abstract Functions for generating string representation of common 1D barcodes. + * @author Nicola Asuni + * @copyright 2008-2009 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + * @version 1.0.008 + */ + + /** + * PHP class to creates array representations for common 1D barcodes to be used with TCPDF (http://www.tcpdf.org).
    + * @name TCPDFBarcode + * @package com.tecnick.tcpdf + * @version 1.0.008 + * @author Nicola Asuni + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ +class TCPDFBarcode { + + /** + * @var array representation of barcode. + * @access protected + */ + protected $barcode_array; + + /** + * This is the class constructor. + * Return an array representations for common 1D barcodes:
      + *
    • $arrcode['code'] code to be printed on text label
    • + *
    • $arrcode['maxh'] max bar height
    • + *
    • $arrcode['maxw'] max bar width
    • + *
    • $arrcode['bcode'][$k] single bar or space in $k position
    • + *
    • $arrcode['bcode'][$k]['t'] bar type: true = bar, false = space.
    • + *
    • $arrcode['bcode'][$k]['w'] bar width in units.
    • + *
    • $arrcode['bcode'][$k]['h'] bar height in units.
    • + *
    • $arrcode['bcode'][$k]['p'] bar top position (0 = top, 1 = middle)
    + * @param string $code code to print + * @param string $type type of barcode:
    • C39 : CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9.
    • C39+ : CODE 39 with checksum
    • C39E : CODE 39 EXTENDED
    • C39E+ : CODE 39 EXTENDED + CHECKSUM
    • C93 : CODE 93 - USS-93
    • S25 : Standard 2 of 5
    • S25+ : Standard 2 of 5 + CHECKSUM
    • I25 : Interleaved 2 of 5
    • I25+ : Interleaved 2 of 5 + CHECKSUM
    • C128A : CODE 128 A
    • C128B : CODE 128 B
    • C128C : CODE 128 C
    • EAN2 : 2-Digits UPC-Based Extention
    • EAN5 : 5-Digits UPC-Based Extention
    • EAN8 : EAN 8
    • EAN13 : EAN 13
    • UPCA : UPC-A
    • UPCE : UPC-E
    • MSI : MSI (Variation of Plessey code)
    • MSI+ : MSI + CHECKSUM (modulo 11)
    • POSTNET : POSTNET
    • PLANET : PLANET
    • RMS4CC : RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code)
    • KIX : KIX (Klant index - Customer index)
    • IMB: Intelligent Mail Barcode - Onecode - USPS-B-3200
    • CODABAR : CODABAR
    • CODE11 : CODE 11
    • PHARMA : PHARMACODE
    • PHARMA2T : PHARMACODE TWO-TRACKS
    + */ + public function __construct($code, $type) { + $this->setBarcode($code, $type); + } + + /** + * Return an array representations of barcode. + * @return array + */ + public function getBarcodeArray() { + return $this->barcode_array; + } + + /** + * Set the barcode. + * @param string $code code to print + * @param string $type type of barcode:
    • C39 : CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9.
    • C39+ : CODE 39 with checksum
    • C39E : CODE 39 EXTENDED
    • C39E+ : CODE 39 EXTENDED + CHECKSUM
    • C93 : CODE 93 - USS-93
    • S25 : Standard 2 of 5
    • S25+ : Standard 2 of 5 + CHECKSUM
    • I25 : Interleaved 2 of 5
    • I25+ : Interleaved 2 of 5 + CHECKSUM
    • C128A : CODE 128 A
    • C128B : CODE 128 B
    • C128C : CODE 128 C
    • EAN2 : 2-Digits UPC-Based Extention
    • EAN5 : 5-Digits UPC-Based Extention
    • EAN8 : EAN 8
    • EAN13 : EAN 13
    • UPCA : UPC-A
    • UPCE : UPC-E
    • MSI : MSI (Variation of Plessey code)
    • MSI+ : MSI + CHECKSUM (modulo 11)
    • POSTNET : POSTNET
    • PLANET : PLANET
    • RMS4CC : RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code)
    • KIX : KIX (Klant index - Customer index)
    • IMB: Intelligent Mail Barcode - Onecode - USPS-B-3200
    • CODABAR : CODABAR
    • CODE11 : CODE 11
    • PHARMA : PHARMACODE
    • PHARMA2T : PHARMACODE TWO-TRACKS
    + * @return array + */ + public function setBarcode($code, $type) { + switch (strtoupper($type)) { + case 'C39': { // CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9. + $arrcode = $this->barcode_code39($code, false, false); + break; + } + case 'C39+': { // CODE 39 with checksum + $arrcode = $this->barcode_code39($code, false, true); + break; + } + case 'C39E': { // CODE 39 EXTENDED + $arrcode = $this->barcode_code39($code, true, false); + break; + } + case 'C39E+': { // CODE 39 EXTENDED + CHECKSUM + $arrcode = $this->barcode_code39($code, true, true); + break; + } + case 'C93': { // CODE 93 - USS-93 + $arrcode = $this->barcode_code93($code); + break; + } + case 'S25': { // Standard 2 of 5 + $arrcode = $this->barcode_s25($code, false); + break; + } + case 'S25+': { // Standard 2 of 5 + CHECKSUM + $arrcode = $this->barcode_s25($code, true); + break; + } + case 'I25': { // Interleaved 2 of 5 + $arrcode = $this->barcode_i25($code, false); + break; + } + case 'I25+': { // Interleaved 2 of 5 + CHECKSUM + $arrcode = $this->barcode_i25($code, true); + break; + } + case 'C128A': { // CODE 128 A + $arrcode = $this->barcode_c128($code, 'A'); + break; + } + case 'C128B': { // CODE 128 B + $arrcode = $this->barcode_c128($code, 'B'); + break; + } + case 'C128C': { // CODE 128 C + $arrcode = $this->barcode_c128($code, 'C'); + break; + } + case 'EAN2': { // 2-Digits UPC-Based Extention + $arrcode = $this->barcode_eanext($code, 2); + break; + } + case 'EAN5': { // 5-Digits UPC-Based Extention + $arrcode = $this->barcode_eanext($code, 5); + break; + } + case 'EAN8': { // EAN 8 + $arrcode = $this->barcode_eanupc($code, 8); + break; + } + case 'EAN13': { // EAN 13 + $arrcode = $this->barcode_eanupc($code, 13); + break; + } + case 'UPCA': { // UPC-A + $arrcode = $this->barcode_eanupc($code, 12); + break; + } + case 'UPCE': { // UPC-E + $arrcode = $this->barcode_eanupc($code, 6); + break; + } + case 'MSI': { // MSI (Variation of Plessey code) + $arrcode = $this->barcode_msi($code, false); + break; + } + case 'MSI+': { // MSI + CHECKSUM (modulo 11) + $arrcode = $this->barcode_msi($code, true); + break; + } + case 'POSTNET': { // POSTNET + $arrcode = $this->barcode_postnet($code, false); + break; + } + case 'PLANET': { // PLANET + $arrcode = $this->barcode_postnet($code, true); + break; + } + case 'RMS4CC': { // RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) + $arrcode = $this->barcode_rms4cc($code, false); + break; + } + case 'KIX': { // KIX (Klant index - Customer index) + $arrcode = $this->barcode_rms4cc($code, true); + break; + } + case 'IMB': { // IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200 + $arrcode = $this->barcode_imb($code); + break; + } + case 'CODABAR': { // CODABAR + $arrcode = $this->barcode_codabar($code); + break; + } + case 'CODE11': { // CODE 11 + $arrcode = $this->barcode_code11($code); + break; + } + case 'PHARMA': { // PHARMACODE + $arrcode = $this->barcode_pharmacode($code); + break; + } + case 'PHARMA2T': { // PHARMACODE TWO-TRACKS + $arrcode = $this->barcode_pharmacode2t($code); + break; + } + default: { + $this->barcode_array = false; + $arrcode = false; + break; + } + } + $this->barcode_array = $arrcode; + } + + /** + * CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9. + * General-purpose code in very wide use world-wide + * @param string $code code to represent. + * @param boolean $checksum if true add a checksum to the code + * @return array barcode representation. + * @access protected + */ + protected function barcode_code39($code, $extended=false, $checksum=false) { + $chr['0'] = '111221211'; + $chr['1'] = '211211112'; + $chr['2'] = '112211112'; + $chr['3'] = '212211111'; + $chr['4'] = '111221112'; + $chr['5'] = '211221111'; + $chr['6'] = '112221111'; + $chr['7'] = '111211212'; + $chr['8'] = '211211211'; + $chr['9'] = '112211211'; + $chr['A'] = '211112112'; + $chr['B'] = '112112112'; + $chr['C'] = '212112111'; + $chr['D'] = '111122112'; + $chr['E'] = '211122111'; + $chr['F'] = '112122111'; + $chr['G'] = '111112212'; + $chr['H'] = '211112211'; + $chr['I'] = '112112211'; + $chr['J'] = '111122211'; + $chr['K'] = '211111122'; + $chr['L'] = '112111122'; + $chr['M'] = '212111121'; + $chr['N'] = '111121122'; + $chr['O'] = '211121121'; + $chr['P'] = '112121121'; + $chr['Q'] = '111111222'; + $chr['R'] = '211111221'; + $chr['S'] = '112111221'; + $chr['T'] = '111121221'; + $chr['U'] = '221111112'; + $chr['V'] = '122111112'; + $chr['W'] = '222111111'; + $chr['X'] = '121121112'; + $chr['Y'] = '221121111'; + $chr['Z'] = '122121111'; + $chr['-'] = '121111212'; + $chr['.'] = '221111211'; + $chr[' '] = '122111211'; + $chr['$'] = '121212111'; + $chr['/'] = '121211121'; + $chr['+'] = '121112121'; + $chr['%'] = '111212121'; + $chr['*'] = '121121211'; + + $code = strtoupper($code); + if ($extended) { + // extended mode + $code = $this->encode_code39_ext($code); + } + if ($code === false) { + return false; + } + if ($checksum) { + // checksum + $code .= $this->checksum_code39($code); + } + // add start and stop codes + $code = '*'.$code.'*'; + + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $k = 0; + $clen = strlen($code); + for ($i = 0; $i < $clen; ++$i) { + $char = $code{$i}; + if(!isset($chr[$char])) { + // invalid character + return false; + } + for ($j = 0; $j < 9; ++$j) { + if (($j % 2) == 0) { + $t = true; // bar + } else { + $t = false; // space + } + $w = $chr[$char]{$j}; + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + } + $bararray['bcode'][$k] = array('t' => false, 'w' => 1, 'h' => 1, 'p' => 0); + $bararray['maxw'] += 1; + ++$k; + } + return $bararray; + } + + /** + * Encode a string to be used for CODE 39 Extended mode. + * @param string $code code to represent. + * @return encoded string. + * @access protected + */ + protected function encode_code39_ext($code) { + $encode = array( + chr(0) => '%U', chr(1) => '$A', chr(2) => '$B', chr(3) => '$C', + chr(4) => '$D', chr(5) => '$E', chr(6) => '$F', chr(7) => '$G', + chr(8) => '$H', chr(9) => '$I', chr(10) => '$J', chr(11) => '£K', + chr(12) => '$L', chr(13) => '$M', chr(14) => '$N', chr(15) => '$O', + chr(16) => '$P', chr(17) => '$Q', chr(18) => '$R', chr(19) => '$S', + chr(20) => '$T', chr(21) => '$U', chr(22) => '$V', chr(23) => '$W', + chr(24) => '$X', chr(25) => '$Y', chr(26) => '$Z', chr(27) => '%A', + chr(28) => '%B', chr(29) => '%C', chr(30) => '%D', chr(31) => '%E', + chr(32) => ' ', chr(33) => '/A', chr(34) => '/B', chr(35) => '/C', + chr(36) => '/D', chr(37) => '/E', chr(38) => '/F', chr(39) => '/G', + chr(40) => '/H', chr(41) => '/I', chr(42) => '/J', chr(43) => '/K', + chr(44) => '/L', chr(45) => '-', chr(46) => '.', chr(47) => '/O', + chr(48) => '0', chr(49) => '1', chr(50) => '2', chr(51) => '3', + chr(52) => '4', chr(53) => '5', chr(54) => '6', chr(55) => '7', + chr(56) => '8', chr(57) => '9', chr(58) => '/Z', chr(59) => '%F', + chr(60) => '%G', chr(61) => '%H', chr(62) => '%I', chr(63) => '%J', + chr(64) => '%V', chr(65) => 'A', chr(66) => 'B', chr(67) => 'C', + chr(68) => 'D', chr(69) => 'E', chr(70) => 'F', chr(71) => 'G', + chr(72) => 'H', chr(73) => 'I', chr(74) => 'J', chr(75) => 'K', + chr(76) => 'L', chr(77) => 'M', chr(78) => 'N', chr(79) => 'O', + chr(80) => 'P', chr(81) => 'Q', chr(82) => 'R', chr(83) => 'S', + chr(84) => 'T', chr(85) => 'U', chr(86) => 'V', chr(87) => 'W', + chr(88) => 'X', chr(89) => 'Y', chr(90) => 'Z', chr(91) => '%K', + chr(92) => '%L', chr(93) => '%M', chr(94) => '%N', chr(95) => '%O', + chr(96) => '%W', chr(97) => '+A', chr(98) => '+B', chr(99) => '+C', + chr(100) => '+D', chr(101) => '+E', chr(102) => '+F', chr(103) => '+G', + chr(104) => '+H', chr(105) => '+I', chr(106) => '+J', chr(107) => '+K', + chr(108) => '+L', chr(109) => '+M', chr(110) => '+N', chr(111) => '+O', + chr(112) => '+P', chr(113) => '+Q', chr(114) => '+R', chr(115) => '+S', + chr(116) => '+T', chr(117) => '+U', chr(118) => '+V', chr(119) => '+W', + chr(120) => '+X', chr(121) => '+Y', chr(122) => '+Z', chr(123) => '%P', + chr(124) => '%Q', chr(125) => '%R', chr(126) => '%S', chr(127) => '%T'); + $code_ext = ''; + $clen = strlen($code); + for ($i = 0 ; $i < $clen; ++$i) { + if (ord($code{$i}) > 127) { + return false; + } + $code_ext .= $encode[$code{$i}]; + } + return $code_ext; + } + + /** + * Calculate CODE 39 checksum (modulo 43). + * @param string $code code to represent. + * @return char checksum. + * @access protected + */ + protected function checksum_code39($code) { + $chars = array( + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', + 'W', 'X', 'Y', 'Z', '-', '.', ' ', '$', '/', '+', '%'); + $sum = 0; + $clen = strlen($code); + for ($i = 0 ; $i < $clen; ++$i) { + $k = array_keys($chars, $code{$i}); + $sum += $k[0]; + } + $j = ($sum % 43); + return $chars[$j]; + } + + /** + * CODE 93 - USS-93 + * Compact code similar to Code 39 + * @param string $code code to represent. + * @param boolean $checksum if true add a checksum to the code + * @return array barcode representation. + * @access protected + */ + protected function barcode_code93($code) { + $chr['0'] = '131112'; + $chr['1'] = '111213'; + $chr['2'] = '111312'; + $chr['3'] = '111411'; + $chr['4'] = '121113'; + $chr['5'] = '121212'; + $chr['6'] = '121311'; + $chr['7'] = '111114'; + $chr['8'] = '131211'; + $chr['9'] = '141111'; + $chr['A'] = '211113'; + $chr['B'] = '211212'; + $chr['C'] = '211311'; + $chr['D'] = '221112'; + $chr['E'] = '221211'; + $chr['F'] = '231111'; + $chr['G'] = '112113'; + $chr['H'] = '112212'; + $chr['I'] = '112311'; + $chr['J'] = '122112'; + $chr['K'] = '132111'; + $chr['L'] = '111123'; + $chr['M'] = '111222'; + $chr['N'] = '111321'; + $chr['O'] = '121122'; + $chr['P'] = '131121'; + $chr['Q'] = '212112'; + $chr['R'] = '212211'; + $chr['S'] = '211122'; + $chr['T'] = '211221'; + $chr['U'] = '221121'; + $chr['V'] = '222111'; + $chr['W'] = '112122'; + $chr['X'] = '112221'; + $chr['Y'] = '122121'; + $chr['Z'] = '123111'; + $chr['-'] = '121131'; + $chr['.'] = '311112'; + $chr[' '] = '311211'; + $chr['$'] = '321111'; + $chr['/'] = '112131'; + $chr['+'] = '113121'; + $chr['%'] = '211131'; + $chr[128] = '121221'; // ($) + $chr[129] = '311121'; // (/) + $chr[130] = '122211'; // (+) + $chr[131] = '312111'; // (%) + $chr['*'] = '111141'; + $code = strtoupper($code); + $encode = array( + chr(0) => chr(131).'U', chr(1) => chr(128).'A', chr(2) => chr(128).'B', chr(3) => chr(128).'C', + chr(4) => chr(128).'D', chr(5) => chr(128).'E', chr(6) => chr(128).'F', chr(7) => chr(128).'G', + chr(8) => chr(128).'H', chr(9) => chr(128).'I', chr(10) => chr(128).'J', chr(11) => '£K', + chr(12) => chr(128).'L', chr(13) => chr(128).'M', chr(14) => chr(128).'N', chr(15) => chr(128).'O', + chr(16) => chr(128).'P', chr(17) => chr(128).'Q', chr(18) => chr(128).'R', chr(19) => chr(128).'S', + chr(20) => chr(128).'T', chr(21) => chr(128).'U', chr(22) => chr(128).'V', chr(23) => chr(128).'W', + chr(24) => chr(128).'X', chr(25) => chr(128).'Y', chr(26) => chr(128).'Z', chr(27) => chr(131).'A', + chr(28) => chr(131).'B', chr(29) => chr(131).'C', chr(30) => chr(131).'D', chr(31) => chr(131).'E', + chr(32) => ' ', chr(33) => chr(129).'A', chr(34) => chr(129).'B', chr(35) => chr(129).'C', + chr(36) => chr(129).'D', chr(37) => chr(129).'E', chr(38) => chr(129).'F', chr(39) => chr(129).'G', + chr(40) => chr(129).'H', chr(41) => chr(129).'I', chr(42) => chr(129).'J', chr(43) => chr(129).'K', + chr(44) => chr(129).'L', chr(45) => '-', chr(46) => '.', chr(47) => chr(129).'O', + chr(48) => '0', chr(49) => '1', chr(50) => '2', chr(51) => '3', + chr(52) => '4', chr(53) => '5', chr(54) => '6', chr(55) => '7', + chr(56) => '8', chr(57) => '9', chr(58) => chr(129).'Z', chr(59) => chr(131).'F', + chr(60) => chr(131).'G', chr(61) => chr(131).'H', chr(62) => chr(131).'I', chr(63) => chr(131).'J', + chr(64) => chr(131).'V', chr(65) => 'A', chr(66) => 'B', chr(67) => 'C', + chr(68) => 'D', chr(69) => 'E', chr(70) => 'F', chr(71) => 'G', + chr(72) => 'H', chr(73) => 'I', chr(74) => 'J', chr(75) => 'K', + chr(76) => 'L', chr(77) => 'M', chr(78) => 'N', chr(79) => 'O', + chr(80) => 'P', chr(81) => 'Q', chr(82) => 'R', chr(83) => 'S', + chr(84) => 'T', chr(85) => 'U', chr(86) => 'V', chr(87) => 'W', + chr(88) => 'X', chr(89) => 'Y', chr(90) => 'Z', chr(91) => chr(131).'K', + chr(92) => chr(131).'L', chr(93) => chr(131).'M', chr(94) => chr(131).'N', chr(95) => chr(131).'O', + chr(96) => chr(131).'W', chr(97) => chr(130).'A', chr(98) => chr(130).'B', chr(99) => chr(130).'C', + chr(100) => chr(130).'D', chr(101) => chr(130).'E', chr(102) => chr(130).'F', chr(103) => chr(130).'G', + chr(104) => chr(130).'H', chr(105) => chr(130).'I', chr(106) => chr(130).'J', chr(107) => chr(130).'K', + chr(108) => chr(130).'L', chr(109) => chr(130).'M', chr(110) => chr(130).'N', chr(111) => chr(130).'O', + chr(112) => chr(130).'P', chr(113) => chr(130).'Q', chr(114) => chr(130).'R', chr(115) => chr(130).'S', + chr(116) => chr(130).'T', chr(117) => chr(130).'U', chr(118) => chr(130).'V', chr(119) => chr(130).'W', + chr(120) => chr(130).'X', chr(121) => chr(130).'Y', chr(122) => chr(130).'Z', chr(123) => chr(131).'P', + chr(124) => chr(131).'Q', chr(125) => chr(131).'R', chr(126) => chr(131).'S', chr(127) => chr(131).'T'); + $code_ext = ''; + $clen = strlen($code); + for ($i = 0 ; $i < $clen; ++$i) { + if (ord($code{$i}) > 127) { + return false; + } + $code_ext .= $encode[$code{$i}]; + } + // checksum + $code .= $this->checksum_code93($code); + // add start and stop codes + $code = '*'.$code.'*'; + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $k = 0; + $clen = strlen($code); + for ($i = 0; $i < $clen; ++$i) { + $char = $code{$i}; + if(!isset($chr[$char])) { + // invalid character + return false; + } + for ($j = 0; $j < 6; ++$j) { + if (($j % 2) == 0) { + $t = true; // bar + } else { + $t = false; // space + } + $w = $chr[$char]{$j}; + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + } + } + $bararray['bcode'][$k] = array('t' => true, 'w' => 1, 'h' => 1, 'p' => 0); + $bararray['maxw'] += 1; + ++$k; + return $bararray; + } + + /** + * Calculate CODE 93 checksum (modulo 47). + * @param string $code code to represent. + * @return string checksum code. + * @access protected + */ + protected function checksum_code93($code) { + $chars = array( + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', + 'W', 'X', 'Y', 'Z', '-', '.', ' ', '$', '/', '+', '%'); + // translate special characters + $code = strtr($code, chr(128).chr(129).chr(130).chr(131), '$/+%'); + $len = strlen($code); + // calculate check digit C + $p = 1; + $check = 0; + for ($i = ($len - 1); $i >= 0; --$i) { + $k = array_keys($chars, $code{$i}); + $check += ($k[0] * $p); + ++$p; + if ($p > 20) { + $p = 1; + } + } + $check %= 47; + $c = $chars[$check]; + $code .= $c; + // calculate check digit K + $p = 1; + $check = 0; + for ($i = $len; $i >= 0; --$i) { + $k = array_keys($chars, $code{$i}); + $check += ($k[0] * $p); + ++$p; + if ($p > 15) { + $p = 1; + } + } + $check %= 47; + $k = $chars[$check]; + return $c.$k; + } + + /** + * Checksum for standard 2 of 5 barcodes. + * @param string $code code to process. + * @return int checksum. + * @access protected + */ + protected function checksum_s25($code) { + $len = strlen($code); + $sum = 0; + for ($i = 0; $i < $len; $i+=2) { + $sum += $code{$i}; + } + $sum *= 3; + for ($i = 1; $i < $len; $i+=2) { + $sum += ($code{$i}); + } + $r = $sum % 10; + if($r > 0) { + $r = (10 - $r); + } + return $r; + } + + /** + * MSI. + * Variation of Plessey code, with similar applications + * Contains digits (0 to 9) and encodes the data only in the width of bars. + * @param string $code code to represent. + * @param boolean $checksum if true add a checksum to the code (modulo 11) + * @return array barcode representation. + * @access protected + */ + protected function barcode_msi($code, $checksum=false) { + $chr['0'] = '100100100100'; + $chr['1'] = '100100100110'; + $chr['2'] = '100100110100'; + $chr['3'] = '100100110110'; + $chr['4'] = '100110100100'; + $chr['5'] = '100110100110'; + $chr['6'] = '100110110100'; + $chr['7'] = '100110110110'; + $chr['8'] = '110100100100'; + $chr['9'] = '110100100110'; + $chr['A'] = '110100110100'; + $chr['B'] = '110100110110'; + $chr['C'] = '110110100100'; + $chr['D'] = '110110100110'; + $chr['E'] = '110110110100'; + $chr['F'] = '110110110110'; + if ($checksum) { + // add checksum + $clen = strlen($code); + $p = 2; + $check = 0; + for ($i = ($clen - 1); $i >= 0; --$i) { + $check += (hexdec($code{$i}) * $p); + ++$p; + if ($p > 7) { + $p = 2; + } + } + $check %= 11; + if ($check > 0) { + $check = 11 - $check; + } + $code .= $check; + } + $seq = '110'; // left guard + $clen = strlen($code); + for ($i = 0; $i < $clen; ++$i) { + $digit = $code{$i}; + if (!isset($chr[$digit])) { + // invalid character + return false; + } + $seq .= $chr[$digit]; + } + $seq .= '1001'; // right guard + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + return $this->binseq_to_array($seq, $bararray); + } + + /** + * Standard 2 of 5 barcodes. + * Used in airline ticket marking, photofinishing + * Contains digits (0 to 9) and encodes the data only in the width of bars. + * @param string $code code to represent. + * @param boolean $checksum if true add a checksum to the code + * @return array barcode representation. + * @access protected + */ + protected function barcode_s25($code, $checksum=false) { + $chr['0'] = '10101110111010'; + $chr['1'] = '11101010101110'; + $chr['2'] = '10111010101110'; + $chr['3'] = '11101110101010'; + $chr['4'] = '10101110101110'; + $chr['5'] = '11101011101010'; + $chr['6'] = '10111011101010'; + $chr['7'] = '10101011101110'; + $chr['8'] = '10101110111010'; + $chr['9'] = '10111010111010'; + if ($checksum) { + // add checksum + $code .= $this->checksum_s25($code); + } + if((strlen($code) % 2) != 0) { + // add leading zero if code-length is odd + $code = '0'.$code; + } + $seq = '11011010'; + $clen = strlen($code); + for ($i = 0; $i < $clen; ++$i) { + $digit = $code{$i}; + if (!isset($chr[$digit])) { + // invalid character + return false; + } + $seq .= $chr[$digit]; + } + $seq .= '1101011'; + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + return $this->binseq_to_array($seq, $bararray); + } + + /** + * Convert binary barcode sequence to TCPDF barcode array + * @param string $seq barcode as binary sequence + * òparam array $bararray TCPDF barcode array to fill up + * @return array barcode representation. + * @access protected + */ + protected function binseq_to_array($seq, $bararray) { + $len = strlen($seq); + $w = 0; + $k = 0; + for ($i = 0; $i < $len; ++$i) { + $w += 1; + if (($i == ($len - 1)) OR (($i < ($len - 1)) AND ($seq{$i} != $seq{($i+1)}))) { + if ($seq{$i} == '1') { + $t = true; // bar + } else { + $t = false; // space + } + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + $w = 0; + } + } + return $bararray; + } + + /** + * Interleaved 2 of 5 barcodes. + * Compact numeric code, widely used in industry, air cargo + * Contains digits (0 to 9) and encodes the data in the width of both bars and spaces. + * @param string $code code to represent. + * @param boolean $checksum if true add a checksum to the code + * @return array barcode representation. + * @access protected + */ + protected function barcode_i25($code, $checksum=false) { + $chr['0'] = '11221'; + $chr['1'] = '21112'; + $chr['2'] = '12112'; + $chr['3'] = '22111'; + $chr['4'] = '11212'; + $chr['5'] = '21211'; + $chr['6'] = '12211'; + $chr['7'] = '11122'; + $chr['8'] = '21121'; + $chr['9'] = '12121'; + $chr['A'] = '11'; + $chr['Z'] = '21'; + if ($checksum) { + // add checksum + $code .= $this->checksum_s25($code); + } + if((strlen($code) % 2) != 0) { + // add leading zero if code-length is odd + $code = '0'.$code; + } + // add start and stop codes + $code = 'AA'.strtolower($code).'ZA'; + + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $k = 0; + $clen = strlen($code); + for ($i = 0; $i < $clen; $i = ($i + 2)) { + $char_bar = $code{$i}; + $char_space = $code{$i+1}; + if((!isset($chr[$char_bar])) OR (!isset($chr[$char_space]))) { + // invalid character + return false; + } + // create a bar-space sequence + $seq = ''; + $chrlen = strlen($chr[$char_bar]); + for ($s = 0; $s < $chrlen; $s++){ + $seq .= $chr[$char_bar]{$s} . $chr[$char_space]{$s}; + } + $seqlen = strlen($seq); + for ($j = 0; $j < $seqlen; ++$j) { + if (($j % 2) == 0) { + $t = true; // bar + } else { + $t = false; // space + } + $w = $seq{$j}; + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + } + } + return $bararray; + } + + /** + * C128 barcodes. + * Very capable code, excellent density, high reliability; in very wide use world-wide + * @param string $code code to represent. + * @param string $type barcode type: A, B or C + * @return array barcode representation. + * @access protected + */ + protected function barcode_c128($code, $type='B') { + $chr = array( + '212222', /* 00 */ + '222122', /* 01 */ + '222221', /* 02 */ + '121223', /* 03 */ + '121322', /* 04 */ + '131222', /* 05 */ + '122213', /* 06 */ + '122312', /* 07 */ + '132212', /* 08 */ + '221213', /* 09 */ + '221312', /* 10 */ + '231212', /* 11 */ + '112232', /* 12 */ + '122132', /* 13 */ + '122231', /* 14 */ + '113222', /* 15 */ + '123122', /* 16 */ + '123221', /* 17 */ + '223211', /* 18 */ + '221132', /* 19 */ + '221231', /* 20 */ + '213212', /* 21 */ + '223112', /* 22 */ + '312131', /* 23 */ + '311222', /* 24 */ + '321122', /* 25 */ + '321221', /* 26 */ + '312212', /* 27 */ + '322112', /* 28 */ + '322211', /* 29 */ + '212123', /* 30 */ + '212321', /* 31 */ + '232121', /* 32 */ + '111323', /* 33 */ + '131123', /* 34 */ + '131321', /* 35 */ + '112313', /* 36 */ + '132113', /* 37 */ + '132311', /* 38 */ + '211313', /* 39 */ + '231113', /* 40 */ + '231311', /* 41 */ + '112133', /* 42 */ + '112331', /* 43 */ + '132131', /* 44 */ + '113123', /* 45 */ + '113321', /* 46 */ + '133121', /* 47 */ + '313121', /* 48 */ + '211331', /* 49 */ + '231131', /* 50 */ + '213113', /* 51 */ + '213311', /* 52 */ + '213131', /* 53 */ + '311123', /* 54 */ + '311321', /* 55 */ + '331121', /* 56 */ + '312113', /* 57 */ + '312311', /* 58 */ + '332111', /* 59 */ + '314111', /* 60 */ + '221411', /* 61 */ + '431111', /* 62 */ + '111224', /* 63 */ + '111422', /* 64 */ + '121124', /* 65 */ + '121421', /* 66 */ + '141122', /* 67 */ + '141221', /* 68 */ + '112214', /* 69 */ + '112412', /* 70 */ + '122114', /* 71 */ + '122411', /* 72 */ + '142112', /* 73 */ + '142211', /* 74 */ + '241211', /* 75 */ + '221114', /* 76 */ + '413111', /* 77 */ + '241112', /* 78 */ + '134111', /* 79 */ + '111242', /* 80 */ + '121142', /* 81 */ + '121241', /* 82 */ + '114212', /* 83 */ + '124112', /* 84 */ + '124211', /* 85 */ + '411212', /* 86 */ + '421112', /* 87 */ + '421211', /* 88 */ + '212141', /* 89 */ + '214121', /* 90 */ + '412121', /* 91 */ + '111143', /* 92 */ + '111341', /* 93 */ + '131141', /* 94 */ + '114113', /* 95 */ + '114311', /* 96 */ + '411113', /* 97 */ + '411311', /* 98 */ + '113141', /* 99 */ + '114131', /* 100 */ + '311141', /* 101 */ + '411131', /* 102 */ + '211412', /* 103 START A */ + '211214', /* 104 START B */ + '211232', /* 105 START C */ + '233111', /* STOP */ + '200000' /* END */ + ); + $keys = ''; + switch(strtoupper($type)) { + case 'A': { + $startid = 103; + $keys = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_'; + for ($i = 0; $i < 32; ++$i) { + $keys .= chr($i); + } + break; + } + case 'B': { + $startid = 104; + $keys = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'.chr(127); + break; + } + case 'C': { + $startid = 105; + $keys = ''; + if ((strlen($code) % 2) != 0) { + // The length of barcode value must be even ($code). You must pad the number with zeros + return false; + } + for ($i = 0; $i <= 99; ++$i) { + $keys .= chr($i); + } + $new_code = ''; + $hclen = (strlen($code) / 2); + for ($i = 0; $i < $hclen; ++$i) { + $new_code .= chr(intval($code{(2 * $i)}.$code{(2 * $i + 1)})); + } + $code = $new_code; + break; + } + default: { + return false; + } + } + // calculate check character + $sum = $startid; + $clen = strlen($code); + for ($i = 0; $i < $clen; ++$i) { + $sum += (strpos($keys, $code{$i}) * ($i+1)); + } + $check = ($sum % 103); + // add start, check and stop codes + $code = chr($startid).$code.chr($check).chr(106).chr(107); + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $k = 0; + $len = strlen($code); + for ($i = 0; $i < $len; ++$i) { + $ck = strpos($keys, $code{$i}); + if (($i == 0) OR ($i > ($len-4))) { + $char_num = ord($code{$i}); + $seq = $chr[$char_num]; + } elseif(($ck >= 0) AND isset($chr[$ck])) { + $seq = $chr[$ck]; + } else { + // invalid character + return false; + } + for ($j = 0; $j < 6; ++$j) { + if (($j % 2) == 0) { + $t = true; // bar + } else { + $t = false; // space + } + $w = $seq{$j}; + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + } + } + return $bararray; + } + + /** + * EAN13 and UPC-A barcodes. + * EAN13: European Article Numbering international retail product code + * UPC-A: Universal product code seen on almost all retail products in the USA and Canada + * UPC-E: Short version of UPC symbol + * @param string $code code to represent. + * @param string $len barcode type: 6 = UPC-E, 8 = EAN8, 13 = EAN13, 12 = UPC-A + * @return array barcode representation. + * @access protected + */ + protected function barcode_eanupc($code, $len=13) { + $upce = false; + if ($len == 6) { + $len = 12; // UPC-A + $upce = true; // UPC-E mode + } + $data_len = $len - 1; + //Padding + $code = str_pad($code, $data_len, '0', STR_PAD_LEFT); + $code_len = strlen($code); + // calculate check digit + $sum_a = 0; + for ($i = 1; $i < $data_len; $i+=2) { + $sum_a += $code{$i}; + } + if ($len > 12) { + $sum_a *= 3; + } + $sum_b = 0; + for ($i = 0; $i < $data_len; $i+=2) { + $sum_b += ($code{$i}); + } + if ($len < 13) { + $sum_b *= 3; + } + $r = ($sum_a + $sum_b) % 10; + if($r > 0) { + $r = (10 - $r); + } + if ($code_len == $data_len) { + // add check digit + $code .= $r; + } elseif ($r !== intval($code{$data_len})) { + // wrong checkdigit + return false; + } + if ($len == 12) { + // UPC-A + $code = '0'.$code; + ++$len; + } + if ($upce) { + // convert UPC-A to UPC-E + $tmp = substr($code, 4, 3); + if (($tmp == '000') OR ($tmp == '100') OR ($tmp == '200')) { + // manufacturer code ends in 000, 100, or 200 + $upce_code = substr($code, 2, 2).substr($code, 9, 3).substr($code, 4, 1); + } else { + $tmp = substr($code, 5, 2); + if ($tmp == '00') { + // manufacturer code ends in 00 + $upce_code = substr($code, 2, 3).substr($code, 10, 2).'3'; + } else { + $tmp = substr($code, 6, 1); + if ($tmp == '0') { + // manufacturer code ends in 0 + $upce_code = substr($code, 2, 4).substr($code, 11, 1).'4'; + } else { + // manufacturer code does not end in zero + $upce_code = substr($code, 2, 5).substr($code, 11, 1); + } + } + } + } + //Convert digits to bars + $codes = array( + 'A'=>array( // left odd parity + '0'=>'0001101', + '1'=>'0011001', + '2'=>'0010011', + '3'=>'0111101', + '4'=>'0100011', + '5'=>'0110001', + '6'=>'0101111', + '7'=>'0111011', + '8'=>'0110111', + '9'=>'0001011'), + 'B'=>array( // left even parity + '0'=>'0100111', + '1'=>'0110011', + '2'=>'0011011', + '3'=>'0100001', + '4'=>'0011101', + '5'=>'0111001', + '6'=>'0000101', + '7'=>'0010001', + '8'=>'0001001', + '9'=>'0010111'), + 'C'=>array( // right + '0'=>'1110010', + '1'=>'1100110', + '2'=>'1101100', + '3'=>'1000010', + '4'=>'1011100', + '5'=>'1001110', + '6'=>'1010000', + '7'=>'1000100', + '8'=>'1001000', + '9'=>'1110100') + ); + $parities = array( + '0'=>array('A','A','A','A','A','A'), + '1'=>array('A','A','B','A','B','B'), + '2'=>array('A','A','B','B','A','B'), + '3'=>array('A','A','B','B','B','A'), + '4'=>array('A','B','A','A','B','B'), + '5'=>array('A','B','B','A','A','B'), + '6'=>array('A','B','B','B','A','A'), + '7'=>array('A','B','A','B','A','B'), + '8'=>array('A','B','A','B','B','A'), + '9'=>array('A','B','B','A','B','A') + ); + $upce_parities = array(); + $upce_parities[0] = array( + '0'=>array('B','B','B','A','A','A'), + '1'=>array('B','B','A','B','A','A'), + '2'=>array('B','B','A','A','B','A'), + '3'=>array('B','B','A','A','A','B'), + '4'=>array('B','A','B','B','A','A'), + '5'=>array('B','A','A','B','B','A'), + '6'=>array('B','A','A','A','B','B'), + '7'=>array('B','A','B','A','B','A'), + '8'=>array('B','A','B','A','A','B'), + '9'=>array('B','A','A','B','A','B') + ); + $upce_parities[1] = array( + '0'=>array('A','A','A','B','B','B'), + '1'=>array('A','A','B','A','B','B'), + '2'=>array('A','A','B','B','A','B'), + '3'=>array('A','A','B','B','B','A'), + '4'=>array('A','B','A','A','B','B'), + '5'=>array('A','B','B','A','A','B'), + '6'=>array('A','B','B','B','A','A'), + '7'=>array('A','B','A','B','A','B'), + '8'=>array('A','B','A','B','B','A'), + '9'=>array('A','B','B','A','B','A') + ); + $k = 0; + $seq = '101'; // left guard bar + if ($upce) { + $bararray = array('code' => $upce_code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $p = $upce_parities[$code{1}][$r]; + for ($i = 0; $i < 6; ++$i) { + $seq .= $codes[$p[$i]][$upce_code{$i}]; + } + $seq .= '010101'; // right guard bar + } else { + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $half_len = ceil($len / 2); + if ($len == 8) { + for ($i = 0; $i < $half_len; ++$i) { + $seq .= $codes['A'][$code{$i}]; + } + } else { + $p = $parities[$code{0}]; + for ($i = 1; $i < $half_len; ++$i) { + $seq .= $codes[$p[$i-1]][$code{$i}]; + } + } + $seq .= '01010'; // center guard bar + for ($i = $half_len; $i < $len; ++$i) { + $seq .= $codes['C'][$code{$i}]; + } + $seq .= '101'; // right guard bar + } + $clen = strlen($seq); + $w = 0; + for ($i = 0; $i < $clen; ++$i) { + $w += 1; + if (($i == ($clen - 1)) OR (($i < ($clen - 1)) AND ($seq{$i} != $seq{($i+1)}))) { + if ($seq{$i} == '1') { + $t = true; // bar + } else { + $t = false; // space + } + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + $w = 0; + } + } + return $bararray; + } + + /** + * UPC-Based Extentions + * 2-Digit Ext.: Used to indicate magazines and newspaper issue numbers + * 5-Digit Ext.: Used to mark suggested retail price of books + * @param string $code code to represent. + * @param string $len barcode type: 2 = 2-Digit, 5 = 5-Digit + * @return array barcode representation. + * @access protected + */ + protected function barcode_eanext($code, $len=5) { + //Padding + $code = str_pad($code, $len, '0', STR_PAD_LEFT); + // calculate check digit + if ($len == 2) { + $r = $code % 4; + } elseif ($len == 5) { + $r = (3 * ($code{0} + $code{2} + $code{4})) + (9 * ($code{1} + $code{3})); + $r %= 10; + } else { + return false; + } + //Convert digits to bars + $codes = array( + 'A'=>array( // left odd parity + '0'=>'0001101', + '1'=>'0011001', + '2'=>'0010011', + '3'=>'0111101', + '4'=>'0100011', + '5'=>'0110001', + '6'=>'0101111', + '7'=>'0111011', + '8'=>'0110111', + '9'=>'0001011'), + 'B'=>array( // left even parity + '0'=>'0100111', + '1'=>'0110011', + '2'=>'0011011', + '3'=>'0100001', + '4'=>'0011101', + '5'=>'0111001', + '6'=>'0000101', + '7'=>'0010001', + '8'=>'0001001', + '9'=>'0010111') + ); + $parities = array(); + $parities[2] = array( + '0'=>array('A','A'), + '1'=>array('A','B'), + '2'=>array('B','A'), + '3'=>array('B','B') + ); + $parities[5] = array( + '0'=>array('B','B','A','A','A'), + '1'=>array('B','A','B','A','A'), + '2'=>array('B','A','A','B','A'), + '3'=>array('B','A','A','A','B'), + '4'=>array('A','B','B','A','A'), + '5'=>array('A','A','B','B','A'), + '6'=>array('A','A','A','B','B'), + '7'=>array('A','B','A','B','A'), + '8'=>array('A','B','A','A','B'), + '9'=>array('A','A','B','A','B') + ); + $p = $parities[$len][$r]; + $seq = '1011'; // left guard bar + $seq .= $codes[$p[0]][$code{0}]; + for ($i = 1; $i < $len; ++$i) { + $seq .= '01'; // separator + $seq .= $codes[$p[$i]][$code{$i}]; + } + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + return $this->binseq_to_array($seq, $bararray); + } + + /** + * POSTNET and PLANET barcodes. + * Used by U.S. Postal Service for automated mail sorting + * @param string $code zip code to represent. Must be a string containing a zip code of the form DDDDD or DDDDD-DDDD. + * @param boolean $planet if true print the PLANET barcode, otherwise print POSTNET + * @return array barcode representation. + * @access protected + */ + protected function barcode_postnet($code, $planet=false) { + // bar lenght + if ($planet) { + $barlen = Array( + 0 => Array(1,1,2,2,2), + 1 => Array(2,2,2,1,1), + 2 => Array(2,2,1,2,1), + 3 => Array(2,2,1,1,2), + 4 => Array(2,1,2,2,1), + 5 => Array(2,1,2,1,2), + 6 => Array(2,1,1,2,2), + 7 => Array(1,2,2,2,1), + 8 => Array(1,2,2,1,2), + 9 => Array(1,2,1,2,2) + ); + } else { + $barlen = Array( + 0 => Array(2,2,1,1,1), + 1 => Array(1,1,1,2,2), + 2 => Array(1,1,2,1,2), + 3 => Array(1,1,2,2,1), + 4 => Array(1,2,1,1,2), + 5 => Array(1,2,1,2,1), + 6 => Array(1,2,2,1,1), + 7 => Array(2,1,1,1,2), + 8 => Array(2,1,1,2,1), + 9 => Array(2,1,2,1,1) + ); + } + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 2, 'bcode' => array()); + $k = 0; + $code = str_replace('-', '', $code); + $code = str_replace(' ', '', $code); + $len = strlen($code); + // calculate checksum + $sum = 0; + for ($i = 0; $i < $len; ++$i) { + $sum += intval($code{$i}); + } + $chkd = ($sum % 10); + if($chkd > 0) { + $chkd = (10 - $chkd); + } + $code .= $chkd; + $len = strlen($code); + // start bar + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + for ($i = 0; $i < $len; ++$i) { + for ($j = 0; $j < 5; ++$j) { + $h = $barlen[$code{$i}][$j]; + $p = floor(1 / $h); + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => $h, 'p' => $p); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + } + } + // end bar + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 1; + return $bararray; + } + + /** + * RMS4CC - CBC - KIX + * RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) - KIX (Klant index - Customer index) + * RM4SCC is the name of the barcode symbology used by the Royal Mail for its Cleanmail service. + * @param string $code code to print + * @param boolean $kix if true prints the KIX variation (doesn't use the start and end symbols, and the checksum) - in this case the house number must be sufficed with an X and placed at the end of the code. + * @return array barcode representation. + * @access protected + */ + protected function barcode_rms4cc($code, $kix=false) { + $notkix = !$kix; + // bar mode + // 1 = pos 1, length 2 + // 2 = pos 1, length 3 + // 3 = pos 2, length 1 + // 4 = pos 2, length 2 + $barmode = array( + '0' => array(3,3,2,2), + '1' => array(3,4,1,2), + '2' => array(3,4,2,1), + '3' => array(4,3,1,2), + '4' => array(4,3,2,1), + '5' => array(4,4,1,1), + '6' => array(3,1,4,2), + '7' => array(3,2,3,2), + '8' => array(3,2,4,1), + '9' => array(4,1,3,2), + 'A' => array(4,1,4,1), + 'B' => array(4,2,3,1), + 'C' => array(3,1,2,4), + 'D' => array(3,2,1,4), + 'E' => array(3,2,2,3), + 'F' => array(4,1,1,4), + 'G' => array(4,1,2,3), + 'H' => array(4,2,1,3), + 'I' => array(1,3,4,2), + 'J' => array(1,4,3,2), + 'K' => array(1,4,4,1), + 'L' => array(2,3,3,2), + 'M' => array(2,3,4,1), + 'N' => array(2,4,3,1), + 'O' => array(1,3,2,4), + 'P' => array(1,4,1,4), + 'Q' => array(1,4,2,3), + 'R' => array(2,3,1,4), + 'S' => array(2,3,2,3), + 'T' => array(2,4,1,3), + 'U' => array(1,1,4,4), + 'V' => array(1,2,3,4), + 'W' => array(1,2,4,3), + 'X' => array(2,1,3,4), + 'Y' => array(2,1,4,3), + 'Z' => array(2,2,3,3) + ); + $code = strtoupper($code); + $len = strlen($code); + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 3, 'bcode' => array()); + if ($notkix) { + // table for checksum calculation (row,col) + $checktable = array( + '0' => array(1,1), + '1' => array(1,2), + '2' => array(1,3), + '3' => array(1,4), + '4' => array(1,5), + '5' => array(1,0), + '6' => array(2,1), + '7' => array(2,2), + '8' => array(2,3), + '9' => array(2,4), + 'A' => array(2,5), + 'B' => array(2,0), + 'C' => array(3,1), + 'D' => array(3,2), + 'E' => array(3,3), + 'F' => array(3,4), + 'G' => array(3,5), + 'H' => array(3,0), + 'I' => array(4,1), + 'J' => array(4,2), + 'K' => array(4,3), + 'L' => array(4,4), + 'M' => array(4,5), + 'N' => array(4,0), + 'O' => array(5,1), + 'P' => array(5,2), + 'Q' => array(5,3), + 'R' => array(5,4), + 'S' => array(5,5), + 'T' => array(5,0), + 'U' => array(0,1), + 'V' => array(0,2), + 'W' => array(0,3), + 'X' => array(0,4), + 'Y' => array(0,5), + 'Z' => array(0,0) + ); + $row = 0; + $col = 0; + for ($i = 0; $i < $len; ++$i) { + $row += $checktable[$code{$i}][0]; + $col += $checktable[$code{$i}][1]; + } + $row %= 6; + $col %= 6; + $chk = array_keys($checktable, array($row,$col)); + $code .= $chk[0]; + ++$len; + } + $k = 0; + if ($notkix) { + // start bar + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + } + for ($i = 0; $i < $len; ++$i) { + for ($j = 0; $j < 4; ++$j) { + switch ($barmode[$code{$i}][$j]) { + case 1: { + $p = 0; + $h = 2; + break; + } + case 2: { + $p = 0; + $h = 3; + break; + } + case 3: { + $p = 1; + $h = 1; + break; + } + case 4: { + $p = 1; + $h = 2; + break; + } + } + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => $h, 'p' => $p); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + } + } + if ($notkix) { + // stop bar + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => 3, 'p' => 0); + $bararray['maxw'] += 1; + } + return $bararray; + } + + /** + * CODABAR barcodes. + * Older code often used in library systems, sometimes in blood banks + * @param string $code code to represent. + * @return array barcode representation. + * @access protected + */ + protected function barcode_codabar($code) { + $chr = array( + '0' => '11111221', + '1' => '11112211', + '2' => '11121121', + '3' => '22111111', + '4' => '11211211', + '5' => '21111211', + '6' => '12111121', + '7' => '12112111', + '8' => '12211111', + '9' => '21121111', + '-' => '11122111', + '$' => '11221111', + ':' => '21112121', + '/' => '21211121', + '.' => '21212111', + '+' => '11222221', + 'A' => '11221211', + 'B' => '12121121', + 'C' => '11121221', + 'D' => '11122211' + ); + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $k = 0; + $w = 0; + $seq = ''; + $code = 'A'.strtoupper($code).'A'; + $len = strlen($code); + for ($i = 0; $i < $len; ++$i) { + if (!isset($chr[$code{$i}])) { + return false; + } + $seq = $chr[$code{$i}]; + for ($j = 0; $j < 8; ++$j) { + if (($j % 2) == 0) { + $t = true; // bar + } else { + $t = false; // space + } + $w = $seq{$j}; + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + } + } + return $bararray; + } + + /** + * CODE11 barcodes. + * Used primarily for labeling telecommunications equipment + * @param string $code code to represent. + * @return array barcode representation. + * @access protected + */ + protected function barcode_code11($code) { + $chr = array( + '0' => '111121', + '1' => '211121', + '2' => '121121', + '3' => '221111', + '4' => '112121', + '5' => '212111', + '6' => '122111', + '7' => '111221', + '8' => '211211', + '9' => '211111', + '-' => '112111', + 'S' => '112211' + ); + + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $k = 0; + $w = 0; + $seq = ''; + $len = strlen($code); + // calculate check digit C + $p = 1; + $check = 0; + for ($i = ($len - 1); $i >= 0; --$i) { + $digit = $code{$i}; + if ($digit == '-') { + $dval = 10; + } else { + $dval = intval($digit); + } + $check += ($dval * $p); + ++$p; + if ($p > 10) { + $p = 1; + } + } + $check %= 11; + if ($check == 10) { + $check = '-'; + } + $code .= $check; + if ($len > 10) { + // calculate check digit K + $p = 1; + $check = 0; + for ($i = $len; $i >= 0; --$i) { + $digit = $code{$i}; + if ($digit == '-') { + $dval = 10; + } else { + $dval = intval($digit); + } + $check += ($dval * $p); + ++$p; + if ($p > 9) { + $p = 1; + } + } + $check %= 11; + $code .= $check; + ++$len; + } + $code = 'S'.$code.'S'; + $len += 3; + for ($i = 0; $i < $len; ++$i) { + if (!isset($chr[$code{$i}])) { + return false; + } + $seq = $chr[$code{$i}]; + for ($j = 0; $j < 6; ++$j) { + if (($j % 2) == 0) { + $t = true; // bar + } else { + $t = false; // space + } + $w = $seq{$j}; + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + } + } + return $bararray; + } + + /** + * Pharmacode + * Contains digits (0 to 9) + * @param string $code code to represent. + * @return array barcode representation. + * @access protected + */ + protected function barcode_pharmacode($code) { + $seq = ''; + $code = intval($code); + while ($code > 0) { + if (($code % 2) == 0) { + $seq .= '11100'; + $code -= 2; + } else { + $seq .= '100'; + $code -= 1; + } + $code /= 2; + } + $seq = substr($seq, 0, -2); + $seq = strrev($seq); + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + return $this->binseq_to_array($seq, $bararray); + } + + /** + * Pharmacode two-track + * Contains digits (0 to 9) + * @param string $code code to represent. + * @return array barcode representation. + * @access protected + */ + protected function barcode_pharmacode2t($code) { + $seq = ''; + $code = intval($code); + do { + switch ($code % 3) { + case 0: { + $seq .= '3'; + $code = ($code - 3) / 3; + break; + } + case 1: { + $seq .= '1'; + $code = ($code - 1) / 3; + break; + } + case 2: { + $seq .= '2'; + $code = ($code - 2) / 3; + break; + } + } + } while($code != 0); + $seq = strrev($seq); + $k = 0; + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 2, 'bcode' => array()); + $len = strlen($seq); + for ($i = 0; $i < $len; ++$i) { + switch ($seq{$i}) { + case '1': { + $p = 1; + $h = 1; + break; + } + case '2': { + $p = 0; + $h = 1; + break; + } + case '3': { + $p = 0; + $h = 2; + break; + } + } + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => $h, 'p' => $p); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + } + unset($bararray['bcode'][($k - 1)]); + --$bararray['maxw']; + return $bararray; + } + + + /** + * IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200 + * (requires PHP bcmath extension) + * Intelligent Mail barcode is a 65-bar code for use on mail in the United States. + * The fields are described as follows:
    • The Barcode Identifier shall be assigned by USPS to encode the presort identification that is currently printed in human readable form on the optional endorsement line (OEL) as well as for future USPS use. This shall be two digits, with the second digit in the range of 0–4. The allowable encoding ranges shall be 00–04, 10–14, 20–24, 30–34, 40–44, 50–54, 60–64, 70–74, 80–84, and 90–94.
    • The Service Type Identifier shall be assigned by USPS for any combination of services requested on the mailpiece. The allowable encoding range shall be 000http://it2.php.net/manual/en/function.dechex.php–999. Each 3-digit value shall correspond to a particular mail class with a particular combination of service(s). Each service program, such as OneCode Confirm and OneCode ACS, shall provide the list of Service Type Identifier values.
    • The Mailer or Customer Identifier shall be assigned by USPS as a unique, 6 or 9 digit number that identifies a business entity. The allowable encoding range for the 6 digit Mailer ID shall be 000000- 899999, while the allowable encoding range for the 9 digit Mailer ID shall be 900000000-999999999.
    • The Serial or Sequence Number shall be assigned by the mailer for uniquely identifying and tracking mailpieces. The allowable encoding range shall be 000000000–999999999 when used with a 6 digit Mailer ID and 000000-999999 when used with a 9 digit Mailer ID. e. The Delivery Point ZIP Code shall be assigned by the mailer for routing the mailpiece. This shall replace POSTNET for routing the mailpiece to its final delivery point. The length may be 0, 5, 9, or 11 digits. The allowable encoding ranges shall be no ZIP Code, 00000–99999, 000000000–999999999, and 00000000000–99999999999.
    + * @param string $code code to print, separate the ZIP (routing code) from the rest using a minus char '-' (BarcodeID_ServiceTypeID_MailerID_SerialNumber-RoutingCode) + * @return array barcode representation. + * @access protected + */ + protected function barcode_imb($code) { + $asc_chr = array(4,0,2,6,3,5,1,9,8,7,1,2,0,6,4,8,2,9,5,3,0,1,3,7,4,6,8,9,2,0,5,1,9,4,3,8,6,7,1,2,4,3,9,5,7,8,3,0,2,1,4,0,9,1,7,0,2,4,6,3,7,1,9,5,8); + $dsc_chr = array(7,1,9,5,8,0,2,4,6,3,5,8,9,7,3,0,6,1,7,4,6,8,9,2,5,1,7,5,4,3,8,7,6,0,2,5,4,9,3,0,1,6,8,2,0,4,5,9,6,7,5,2,6,3,8,5,1,9,8,7,4,0,2,6,3); + $asc_pos = array(3,0,8,11,1,12,8,11,10,6,4,12,2,7,9,6,7,9,2,8,4,0,12,7,10,9,0,7,10,5,7,9,6,8,2,12,1,4,2,0,1,5,4,6,12,1,0,9,4,7,5,10,2,6,9,11,2,12,6,7,5,11,0,3,2); + $dsc_pos = array(2,10,12,5,9,1,5,4,3,9,11,5,10,1,6,3,4,1,10,0,2,11,8,6,1,12,3,8,6,4,4,11,0,6,1,9,11,5,3,7,3,10,7,11,8,2,10,3,5,8,0,3,12,11,8,4,5,1,3,0,7,12,9,8,10); + $code_arr = explode('-', $code); + $tracking_number = $code_arr[0]; + if (isset($code_arr[1])) { + $routing_code = $code_arr[1]; + } else { + $routing_code = ''; + } + // Conversion of Routing Code + switch (strlen($routing_code)) { + case 0: { + $binary_code = 0; + break; + } + case 5: { + $binary_code = bcadd($routing_code, '1'); + break; + } + case 9: { + $binary_code = bcadd($routing_code, '100001'); + break; + } + case 11: { + $binary_code = bcadd($routing_code, '1000100001'); + break; + } + default: { + return false; + break; + } + } + $binary_code = bcmul($binary_code, 10); + $binary_code = bcadd($binary_code, $tracking_number{0}); + $binary_code = bcmul($binary_code, 5); + $binary_code = bcadd($binary_code, $tracking_number{1}); + $binary_code .= substr($tracking_number, 2, 18); + // convert to hexadecimal + $binary_code = $this->dec_to_hex($binary_code); + // pad to get 13 bytes + $binary_code = str_pad($binary_code, 26, '0', STR_PAD_LEFT); + // convert string to array of bytes + $binary_code_arr = chunk_split($binary_code, 2, "\r"); + $binary_code_arr = substr($binary_code_arr, 0, -1); + $binary_code_arr = explode("\r", $binary_code_arr); + // calculate frame check sequence + $fcs = $this->imb_crc11fcs($binary_code_arr); + // exclude first 2 bits from first byte + $first_byte = sprintf('%2s', dechex((hexdec($binary_code_arr[0]) << 2) >> 2)); + $binary_code_102bit = $first_byte.substr($binary_code, 2); + // convert binary data to codewords + $codewords = array(); + $data = $this->hex_to_dec($binary_code_102bit); + $codewords[0] = bcmod($data, 636) * 2; + $data = bcdiv($data, 636); + for ($i = 1; $i < 9; ++$i) { + $codewords[$i] = bcmod($data, 1365); + $data = bcdiv($data, 1365); + } + $codewords[9] = $data; + if (($fcs >> 10) == 1) { + $codewords[9] += 659; + } + // generate lookup tables + $table2of13 = $this->imb_tables(2, 78); + $table5of13 = $this->imb_tables(5, 1287); + // convert codewords to characters + $characters = array(); + $bitmask = 512; + foreach($codewords as $k => $val) { + if ($val <= 1286) { + $chrcode = $table5of13[$val]; + } else { + $chrcode = $table2of13[($val - 1287)]; + } + if (($fcs & $bitmask) > 0) { + // bitwise invert + $chrcode = ((~$chrcode) & 8191); + } + $characters[] = $chrcode; + $bitmask /= 2; + } + $characters = array_reverse($characters); + // build bars + $k = 0; + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 3, 'bcode' => array()); + for ($i = 0; $i < 65; ++$i) { + $asc = (($characters[$asc_chr[$i]] & pow(2, $asc_pos[$i])) > 0); + $dsc = (($characters[$dsc_chr[$i]] & pow(2, $dsc_pos[$i])) > 0); + if ($asc AND $dsc) { + // full bar (F) + $p = 0; + $h = 3; + } elseif ($asc) { + // ascender (A) + $p = 0; + $h = 2; + } elseif ($dsc) { + // descender (D) + $p = 1; + $h = 2; + } else { + // tracker (T) + $p = 1; + $h = 1; + } + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => $h, 'p' => $p); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + } + unset($bararray['bcode'][($k - 1)]); + --$bararray['maxw']; + return $bararray; + } + + /** + * Convert large integer number to hexadecimal representation. + * (requires PHP bcmath extension) + * @param string $number number to convert specified as a string + * @return string hexadecimal representation + */ + public function dec_to_hex($number) { + $i = 0; + $hex = array(); + if($number == 0) { + return '00'; + } + while($number > 0) { + if($number == 0) { + array_push($hex, '0'); + } else { + array_push($hex, strtoupper(dechex(bcmod($number, '16')))); + $number = bcdiv($number, '16', 0); + } + } + $hex = array_reverse($hex); + return implode($hex); + } + + /** + * Convert large hexadecimal number to decimal representation (string). + * (requires PHP bcmath extension) + * @param string $hex hexadecimal number to convert specified as a string + * @return string hexadecimal representation + */ + public function hex_to_dec($hex) { + $dec = 0; + $bitval = 1; + $len = strlen($hex); + for($pos = ($len - 1); $pos >= 0; --$pos) { + $dec = bcadd($dec, bcmul(hexdec($hex{$pos}), $bitval)); + $bitval = bcmul($bitval, 16); + } + return $dec; + } + + /** + * Intelligent Mail Barcode calculation of Frame Check Sequence + * @param string $code_arr array of hexadecimal values (13 bytes holding 102 bits right justified). + * @return int 11 bit Frame Check Sequence as integer (decimal base) + * @access protected + */ + protected function imb_crc11fcs($code_arr) { + $genpoly = 0x0F35; // generator polynomial + $fcs = 0x07FF; // Frame Check Sequence + // do most significant byte skipping the 2 most significant bits + $data = hexdec($code_arr[0]) << 5; + for ($bit = 2; $bit < 8; ++$bit) { + if (($fcs ^ $data) & 0x400) { + $fcs = ($fcs << 1) ^ $genpoly; + } else { + $fcs = ($fcs << 1); + } + $fcs &= 0x7FF; + $data <<= 1; + } + // do rest of bytes + for ($byte = 1; $byte < 13; ++$byte) { + $data = hexdec($code_arr[$byte]) << 3; + for ($bit = 0; $bit < 8; ++$bit) { + if (($fcs ^ $data) & 0x400) { + $fcs = ($fcs << 1) ^ $genpoly; + } else { + $fcs = ($fcs << 1); + } + $fcs &= 0x7FF; + $data <<= 1; + } + } + return $fcs; + } + + /** + * Reverse unsigned short value + * @param int $num value to reversr + * @return int reversed value + * @access protected + */ + protected function imb_reverse_us($num) { + $rev = 0; + for ($i = 0; $i < 16; ++$i) { + $rev <<= 1; + $rev |= ($num & 1); + $num >>= 1; + } + return $rev; + } + + /** + * generate Nof13 tables used for Intelligent Mail Barcode + * @param int $n is the type of table: 2 for 2of13 table, 5 for 5of13table + * @param int $size size of table (78 for n=2 and 1287 for n=5) + * @return array requested table + * @access protected + */ + protected function imb_tables($n, $size) { + $table = array(); + $lli = 0; // LUT lower index + $lui = $size - 1; // LUT upper index + for ($count = 0; $count < 8192; ++$count) { + $bit_count = 0; + for ($bit_index = 0; $bit_index < 13; ++$bit_index) { + $bit_count += intval(($count & (1 << $bit_index)) != 0); + } + // if we don't have the right number of bits on, go on to the next value + if ($bit_count == $n) { + $reverse = ($this->imb_reverse_us($count) >> 3); + // if the reverse is less than count, we have already visited this pair before + if ($reverse >= $count) { + // If count is symmetric, place it at the first free slot from the end of the list. + // Otherwise, place it at the first free slot from the beginning of the list AND place $reverse ath the next free slot from the beginning of the list + if ($reverse == $count) { + $table[$lui] = $count; + --$lui; + } else { + $table[$lli] = $count; + ++$lli; + $table[$lli] = $reverse; + ++$lli; + } + } + } + } + return $table; + } + +} // end of class + +//============================================================+ +// END OF FILE +//============================================================+ +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/cache/chapter_demo_1.txt b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/cache/chapter_demo_1.txt new file mode 100755 index 00000000..59fe4170 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/cache/chapter_demo_1.txt @@ -0,0 +1,10 @@ +The year 1866 was marked by a bizarre development, an unexplained and downright inexplicable phenomenon that surely no one has forgotten. Without getting into those rumors that upset civilians in the seaports and deranged the public mind even far inland, it must be said that professional seamen were especially alarmed. Traders, shipowners, captains of vessels, skippers, and master mariners from Europe and America, naval officers from every country, and at their heels the various national governments on these two continents, were all extremely disturbed by the business. +In essence, over a period of time several ships had encountered "an enormous thing" at sea, a long spindle-shaped object, sometimes giving off a phosphorescent glow, infinitely bigger and faster than any whale. +The relevant data on this apparition, as recorded in various logbooks, agreed pretty closely as to the structure of the object or creature in question, its unprecedented speed of movement, its startling locomotive power, and the unique vitality with which it seemed to be gifted. If it was a cetacean, it exceeded in bulk any whale previously classified by science. No naturalist, neither Cuvier nor Lacépède, neither Professor Dumeril nor Professor de Quatrefages, would have accepted the existence of such a monster sight unseen -- specifically, unseen by their own scientific eyes. +Striking an average of observations taken at different times -- rejecting those timid estimates that gave the object a length of 200 feet, and ignoring those exaggerated views that saw it as a mile wide and three long--you could still assert that this phenomenal creature greatly exceeded the dimensions of anything then known to ichthyologists, if it existed at all. +Now then, it did exist, this was an undeniable fact; and since the human mind dotes on objects of wonder, you can understand the worldwide excitement caused by this unearthly apparition. As for relegating it to the realm of fiction, that charge had to be dropped. +In essence, on July 20, 1866, the steamer Governor Higginson, from the Calcutta & Burnach Steam Navigation Co., encountered this moving mass five miles off the eastern shores of Australia. Captain Baker at first thought he was in the presence of an unknown reef; he was even about to fix its exact position when two waterspouts shot out of this inexplicable object and sprang hissing into the air some 150 feet. So, unless this reef was subject to the intermittent eruptions of a geyser, the Governor Higginson had fair and honest dealings with some aquatic mammal, until then unknown, that could spurt from its blowholes waterspouts mixed with air and steam. +Similar events were likewise observed in Pacific seas, on July 23 of the same year, by the Christopher Columbus from the West India & Pacific Steam Navigation Co. Consequently, this extraordinary cetacean could transfer itself from one locality to another with startling swiftness, since within an interval of just three days, the Governor Higginson and the Christopher Columbus had observed it at two positions on the charts separated by a distance of more than 700 nautical leagues. +Fifteen days later and 2,000 leagues farther, the Helvetia from the Compagnie Nationale and the Shannon from the Royal Mail line, running on opposite tacks in that part of the Atlantic lying between the United States and Europe, respectively signaled each other that the monster had been sighted in latitude 42 degrees 15' north and longitude 60 degrees 35' west of the meridian of Greenwich. From their simultaneous observations, they were able to estimate the mammal's minimum length at more than 350 English feet; this was because both the Shannon and the Helvetia were of smaller dimensions, although each measured 100 meters stem to stern. Now then, the biggest whales, those rorqual whales that frequent the waterways of the Aleutian Islands, have never exceeded a length of 56 meters--if they reach even that. +One after another, reports arrived that would profoundly affect public opinion: new observations taken by the transatlantic liner Pereire, the Inman line's Etna running afoul of the monster, an official report drawn up by officers on the French frigate Normandy, dead-earnest reckonings obtained by the general staff of Commodore Fitz-James aboard the Lord Clyde. In lighthearted countries, people joked about this phenomenon, but such serious, practical countries as England, America, and Germany were deeply concerned. +In every big city the monster was the latest rage; they sang about it in the coffee houses, they ridiculed it in the newspapers, they dramatized it in the theaters. The tabloids found it a fine opportunity for hatching all sorts of hoaxes. In those newspapers short of copy, you saw the reappearance of every gigantic imaginary creature, from "Moby Dick," that dreadful white whale from the High Arctic regions, to the stupendous kraken whose tentacles could entwine a 500-ton craft and drag it into the ocean depths. They even reprinted reports from ancient times: the views of Aristotle and Pliny accepting the existence of such monsters, then the Norwegian stories of Bishop Pontoppidan, the narratives of Paul Egede, and finally the reports of Captain Harrington -- whose good faith is above suspicion--in which he claims he saw, while aboard the Castilian in 1857, one of those enormous serpents that, until then, had frequented only the seas of France's old extremist newspaper, The Constitutionalist. diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/cache/chapter_demo_2.txt b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/cache/chapter_demo_2.txt new file mode 100755 index 00000000..bebe0ef6 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/cache/chapter_demo_2.txt @@ -0,0 +1,23 @@ +During the period in which these developments were occurring, I had returned from a scientific undertaking organized to explore the Nebraska badlands in the United States. In my capacity as Assistant Professor at the Paris Museum of Natural History, I had been attached to this expedition by the French government. After spending six months in Nebraska, I arrived in New York laden with valuable collections near the end of March. My departure for France was set for early May. In the meantime, then, I was busy classifying my mineralogical, botanical, and zoological treasures when that incident took place with the Scotia. +I was perfectly abreast of this question, which was the big news of the day, and how could I not have been? I had read and reread every American and European newspaper without being any farther along. This mystery puzzled me. Finding it impossible to form any views, I drifted from one extreme to the other. Something was out there, that much was certain, and any doubting Thomas was invited to place his finger on the Scotia's wound. +When I arrived in New York, the question was at the boiling point. The hypothesis of a drifting islet or an elusive reef, put forward by people not quite in their right minds, was completely eliminated. And indeed, unless this reef had an engine in its belly, how could it move about with such prodigious speed? +Also discredited was the idea of a floating hull or some other enormous wreckage, and again because of this speed of movement. +So only two possible solutions to the question were left, creating two very distinct groups of supporters: on one side, those favoring a monster of colossal strength; on the other, those favoring an "underwater boat" of tremendous motor power. +Now then, although the latter hypothesis was completely admissible, it couldn't stand up to inquiries conducted in both the New World and the Old. That a private individual had such a mechanism at his disposal was less than probable. Where and when had he built it, and how could he have built it in secret? +Only some government could own such an engine of destruction, and in these disaster-filled times, when men tax their ingenuity to build increasingly powerful aggressive weapons, it was possible that, unknown to the rest of the world, some nation could have been testing such a fearsome machine. The Chassepot rifle led to the torpedo, and the torpedo has led to this underwater battering ram, which in turn will lead to the world putting its foot down. At least I hope it will. +But this hypothesis of a war machine collapsed in the face of formal denials from the various governments. Since the public interest was at stake and transoceanic travel was suffering, the sincerity of these governments could not be doubted. Besides, how could the assembly of this underwater boat have escaped public notice? Keeping a secret under such circumstances would be difficult enough for an individual, and certainly impossible for a nation whose every move is under constant surveillance by rival powers. +So, after inquiries conducted in England, France, Russia, Prussia, Spain, Italy, America, and even Turkey, the hypothesis of an underwater Monitor was ultimately rejected. +After I arrived in New York, several people did me the honor of consulting me on the phenomenon in question. In France I had published a two-volume work, in quarto, entitled The Mysteries of the Great Ocean Depths. Well received in scholarly circles, this book had established me as a specialist in this pretty obscure field of natural history. My views were in demand. As long as I could deny the reality of the business, I confined myself to a flat "no comment." But soon, pinned to the wall, I had to explain myself straight out. And in this vein, "the honorable Pierre Aronnax, Professor at the Paris Museum," was summoned by The New York Herald to formulate his views no matter what. +I complied. Since I could no longer hold my tongue, I let it wag. I discussed the question in its every aspect, both political and scientific, and this is an excerpt from the well-padded article I published in the issue of April 30. + +"Therefore," I wrote, "after examining these different hypotheses one by one, we are forced, every other supposition having been refuted, to accept the existence of an extremely powerful marine animal. +"The deepest parts of the ocean are totally unknown to us. No soundings have been able to reach them. What goes on in those distant depths? What creatures inhabit, or could inhabit, those regions twelve or fifteen miles beneath the surface of the water? What is the constitution of these animals? It's almost beyond conjecture. +"However, the solution to this problem submitted to me can take the form of a choice between two alternatives. +"Either we know every variety of creature populating our planet, or we do not. +"If we do not know every one of them, if nature still keeps ichthyological secrets from us, nothing is more admissible than to accept the existence of fish or cetaceans of new species or even new genera, animals with a basically 'cast-iron' constitution that inhabit strata beyond the reach of our soundings, and which some development or other, an urge or a whim if you prefer, can bring to the upper level of the ocean for long intervals. +"If, on the other hand, we do know every living species, we must look for the animal in question among those marine creatures already cataloged, and in this event I would be inclined to accept the existence of a giant narwhale. +"The common narwhale, or sea unicorn, often reaches a length of sixty feet. Increase its dimensions fivefold or even tenfold, then give this cetacean a strength in proportion to its size while enlarging its offensive weapons, and you have the animal we're looking for. It would have the proportions determined by the officers of the Shannon, the instrument needed to perforate the Scotia, and the power to pierce a steamer's hull. +"In essence, the narwhale is armed with a sort of ivory sword, or lance, as certain naturalists have expressed it. It's a king-sized tooth as hard as steel. Some of these teeth have been found buried in the bodies of baleen whales, which the narwhale attacks with invariable success. Others have been wrenched, not without difficulty, from the undersides of vessels that narwhales have pierced clean through, as a gimlet pierces a wine barrel. The museum at the Faculty of Medicine in Paris owns one of these tusks with a length of 2.25 meters and a width at its base of forty-eight centimeters! +"All right then! Imagine this weapon to be ten times stronger and the animal ten times more powerful, launch it at a speed of twenty miles per hour, multiply its mass times its velocity, and you get just the collision we need to cause the specified catastrophe. +"So, until information becomes more abundant, I plump for a sea unicorn of colossal dimensions, no longer armed with a mere lance but with an actual spur, like ironclad frigates or those warships called 'rams,' whose mass and motor power it would possess simultaneously. +"This inexplicable phenomenon is thus explained away unless it's something else entirely, which, despite everything that has been sighted, studied, explored and experienced, is still possible!" diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/cache/table_data_demo.txt b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/cache/table_data_demo.txt new file mode 100755 index 00000000..aa8886cc --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/cache/table_data_demo.txt @@ -0,0 +1,15 @@ +Austria;Vienna;83859;8075 +Belgium;Brussels;30518;10192 +Denmark;Copenhagen;43094;5295 +Finland;Helsinki;304529;5147 +France;Paris;543965;58728 +Germany;Berlin;357022;82057 +Greece;Athens;131625;10511 +Ireland;Dublin;70723;3694 +Italy;Roma;301316;57563 +Luxembourg;Luxembourg;2586;424 +Netherlands;Amsterdam;41526;15654 +Portugal;Lisbon;91906;9957 +Spain;Madrid;504790;39348 +Sweden;Stockholm;410934;8839 +United Kingdom;London;243820;58862 diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/cache/utf8test.txt b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/cache/utf8test.txt new file mode 100755 index 00000000..27cddb1e --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/cache/utf8test.txt @@ -0,0 +1,120 @@ +Sentences that contain all letters commonly used in a language +-------------------------------------------------------------- + +Markus Kuhn -- 2001-09-02 + +This file is UTF-8 encoded. + + +Danish (da) +--------- + + Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen + Wolther spillede på xylofon. + (= Quiz contestants were eating strawbery with cream while Wolther + the circus clown played on xylophone.) + +German (de) +----------- + + Falsches Üben von Xylophonmusik quält jeden größeren Zwerg + (= Wrongful practicing of xylophone music tortures every larger dwarf) + + Zwölf Boxkämpfer jagten Eva quer über den Sylter Deich + (= Twelve boxing fighters hunted Eva across the dike of Sylt) + + Heizölrückstoßabdämpfung + (= fuel oil recoil absorber) + (jqvwxy missing, but all non-ASCII letters in one word) + +English (en) +------------ + + The quick brown fox jumps over the lazy dog + +Spanish (es) +------------ + + El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y + frío, añoraba a su querido cachorro. + (Contains every letter and every accent, but not every combination + of vowel + acute.) + +French (fr) +----------- + + Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à + côté de l'alcôve ovoïde, où les bûches se consument dans l'âtre, ce + qui lui permet de penser à la cænogenèse de l'être dont il est question + dans la cause ambiguë entendue à Moÿ, dans un capharnaüm qui, + pense-t-il, diminue çà et là la qualité de son œuvre. + + l'île exiguë + Où l'obèse jury mûr + Fête l'haï volapük, + Âne ex aéquo au whist, + Ôtez ce vœu déçu. + + Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en + canoë au delà des îles, près du mälström où brûlent les novæ. + +Irish Gaelic (ga) +----------------- + + D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh + +Hungarian (hu) +-------------- + + Árvíztűrő tükörfúrógép + (= flood-proof mirror-drilling machine, only all non-ASCII letters) + +Icelandic (is) +-------------- + + Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa + + Sævör grét áðan því úlpan var ónýt + (some ASCII letters missing) + +Greek (el) +------------- + + Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ στὸ χρυσαφὶ ξέφωτο + (= No more shall I see acacias or myrtles in the golden clearing) + + Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία + (= I uncover the soul-destroying abhorrence) + +Hebrew (iw) +----------- + + ? דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה + +Polish (pl) +----------- + + Pchnąć w tę łódź jeża lub ośm skrzyń fig + (= To push a hedgehog or eight bins of figs in this boat) + +Russian (ru) +------------ + + В чащах юга жил бы цитрус? Да, но фальшивый экземпляр! + (= Would a citrus live in the bushes of south? Yes, but only a fake one!) + +Thai (th) +--------- + + [--------------------------|------------------------] + ๏ เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน + จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร + ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย + ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋าๆ น่าฟังเอย ฯ + + [The copyright for the Thai example is owned by The Computer + Association of Thailand under the Royal Patronage of His Majesty the + King.] + +Please let me know if you find others! Special thanks to the people +from all over the world who contributed these sentences. diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/lang/bra.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/lang/bra.php new file mode 100755 index 00000000..df9a56f8 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/lang/bra.php @@ -0,0 +1,50 @@ + diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/lang/eng.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/lang/eng.php new file mode 100755 index 00000000..312782a1 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/lang/eng.php @@ -0,0 +1,50 @@ + diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/lang/ger.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/lang/ger.php new file mode 100755 index 00000000..72a9372b --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/lang/ger.php @@ -0,0 +1,50 @@ + diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/lang/ita.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/lang/ita.php new file mode 100755 index 00000000..041f8a01 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/lang/ita.php @@ -0,0 +1,50 @@ + diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/tcpdf_config.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/tcpdf_config.php new file mode 100755 index 00000000..b95c710c --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/tcpdf_config.php @@ -0,0 +1,244 @@ + diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/tcpdf_config_alt.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/tcpdf_config_alt.php new file mode 100755 index 00000000..3dcd5616 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/config/tcpdf_config_alt.php @@ -0,0 +1,238 @@ + diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/doc/read_me.txt b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/doc/read_me.txt new file mode 100755 index 00000000..6ab21794 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/doc/read_me.txt @@ -0,0 +1,3 @@ +You can read the documentation at : http://www.tecnick.com/pagefiles/tcpdf/doc/index.html + +it has been removed because of the size of the package of HTML2PDF... \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/examples/read_me.txt b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/examples/read_me.txt new file mode 100755 index 00000000..de07e6bd --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/examples/read_me.txt @@ -0,0 +1,3 @@ +You can read the documentation at : http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf_examples + +it has been removed because of the size of the package of HTML2PDF... \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/README.TXT b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/README.TXT new file mode 100755 index 00000000..9c6e9dcd --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/README.TXT @@ -0,0 +1,3 @@ +This folder contains fonts descriptions for TCPDF. +All fonts names must be in lowercase. +Please read the documentation on subfolders for copyright, license and other information. \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/ZarBold.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/ZarBold.ctg.z new file mode 100755 index 00000000..e096e5cc Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/ZarBold.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/ZarBold.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/ZarBold.z new file mode 100755 index 00000000..41df8dab Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/ZarBold.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/almohanad.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/almohanad.ctg.z new file mode 100755 index 00000000..8e9b577e Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/almohanad.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/almohanad.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/almohanad.php new file mode 100755 index 00000000..dfb0e143 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/almohanad.php @@ -0,0 +1,102 @@ +1093,'Descent'=>-509,'CapHeight'=>1093,'Flags'=>32,'FontBBox'=>'[-278 -507 1124 1093]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600); +$up=-136; +$ut=64; +$dw=600; +$cw=array( + 0=>0,32=>139,33=>185,34=>308,35=>278,36=>278,37=>556,38=>463,39=>154,40=>185,41=>185,42=>278,43=>317,44=>139,45=>185,46=>139, + 47=>154,48=>278,49=>278,50=>278,51=>278,52=>278,53=>278,54=>278,55=>278,56=>278,57=>278,58=>185,59=>185,60=>317,61=>317,62=>317, + 63=>278,64=>517,65=>401,66=>371,67=>401,68=>402,69=>371,70=>339,71=>432,72=>430,73=>214,74=>278,75=>424,76=>369,77=>524,78=>401, + 79=>432,80=>339,81=>432,82=>396,83=>309,84=>371,85=>401,86=>401,87=>556,88=>401,89=>401,90=>371,91=>185,92=>154,93=>185,94=>323, + 95=>278,96=>185,97=>278,98=>309,99=>247,100=>309,101=>247,102=>185,103=>278,104=>309,105=>154,106=>185,107=>309,108=>154,109=>463,110=>309, + 111=>278,112=>309,113=>309,114=>247,115=>216,116=>185,117=>309,118=>278,119=>401,120=>278,121=>278,122=>247,123=>219,124=>122,125=>219,126=>289, + 8364=>278,1027=>339,8218=>185,1107=>254,8222=>278,8230=>556,8224=>278,8225=>278,710=>185,8240=>556,352=>309,8249=>185,338=>556,1036=>432,381=>371,1039=>432, + 8216=>185,8217=>185,8220=>278,8221=>278,8226=>194,8211=>278,8212=>556,732=>185,8482=>556,353=>216,8250=>185,339=>401,1116=>297,382=>247,376=>401,161=>185, + 162=>278,163=>278,164=>278,165=>278,166=>122,167=>278,168=>185,169=>415,170=>167,171=>278,172=>317,174=>415,175=>185,176=>222,177=>317,178=>167, + 179=>167,180=>185,181=>309,182=>300,183=>139,184=>185,185=>167,186=>183,187=>278,188=>417,189=>417,190=>417,191=>278,192=>401,193=>401,194=>401, + 195=>401,196=>401,197=>401,198=>556,199=>401,200=>371,201=>371,202=>371,203=>371,204=>216,205=>216,206=>216,207=>216,208=>401,209=>401,210=>432, + 211=>432,212=>432,213=>432,214=>432,215=>317,216=>432,217=>401,218=>401,219=>401,220=>401,221=>401,222=>339,223=>309,224=>278,225=>278,226=>278, + 227=>278,228=>278,229=>278,230=>401,231=>247,232=>247,233=>247,234=>247,235=>247,236=>154,237=>154,238=>154,239=>154,240=>278,241=>309,242=>278, + 243=>278,244=>278,245=>278,246=>278,247=>317,248=>278,249=>309,250=>309,251=>309,252=>309,253=>278,254=>309,255=>278,256=>401,257=>278,258=>401, + 259=>278,260=>401,261=>278,262=>401,263=>247,264=>401,265=>247,266=>401,267=>247,268=>401,269=>247,270=>401,271=>309,272=>401,273=>309,274=>371, + 275=>247,276=>371,277=>247,278=>371,279=>247,280=>371,281=>247,282=>371,283=>247,284=>432,285=>278,286=>432,287=>278,288=>432,289=>278,290=>432, + 291=>278,292=>432,293=>309,294=>432,295=>309,296=>216,297=>154,298=>216,299=>154,300=>216,301=>154,302=>216,303=>154,304=>216,305=>154,306=>490, + 307=>270,308=>278,309=>185,310=>432,311=>309,312=>297,313=>371,314=>154,315=>371,316=>154,317=>371,318=>154,319=>371,320=>293,321=>371,322=>154, + 323=>401,324=>309,325=>401,326=>309,327=>401,328=>309,329=>391,330=>401,331=>309,332=>432,333=>278,334=>432,335=>278,336=>432,337=>278,340=>401, + 341=>247,342=>401,343=>247,344=>401,345=>247,346=>309,347=>216,348=>309,349=>216,350=>309,351=>216,354=>371,355=>185,356=>371,357=>185,358=>371, + 359=>185,360=>401,361=>309,362=>401,363=>309,364=>401,365=>309,366=>401,367=>309,368=>401,369=>309,370=>401,371=>309,372=>556,373=>401,374=>401, + 375=>278,377=>371,378=>247,379=>371,380=>247,383=>185,450=>317,477=>247,484=>432,485=>278,536=>309,537=>216,538=>371,539=>185,658=>282,711=>185, + 728=>185,729=>185,730=>185,731=>185,733=>185,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, + 779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0, + 795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0, + 811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0, + 827=>0,828=>0,829=>0,830=>0,831=>0,864=>0,865=>0,884=>111,885=>111,890=>0,894=>185,900=>100,901=>183,902=>401,903=>139,904=>451, + 905=>532,906=>316,908=>451,910=>501,911=>451,912=>183,913=>401,914=>371,915=>339,916=>422,917=>371,918=>371,919=>432,920=>432,921=>216,922=>432, + 923=>401,924=>524,925=>401,926=>361,927=>432,928=>451,929=>339,931=>361,932=>371,933=>401,934=>482,935=>401,936=>482,937=>451,938=>0,939=>401, + 940=>336,941=>244,942=>336,943=>183,944=>306,945=>336,946=>306,947=>306,948=>306,949=>244,950=>275,951=>336,952=>306,953=>183,954=>338,955=>275, + 956=>336,957=>275,958=>275,959=>306,960=>336,961=>306,962=>244,963=>306,964=>244,965=>306,966=>367,967=>275,968=>397,969=>397,970=>183,971=>306, + 972=>306,973=>306,974=>397,976=>306,977=>306,978=>401,979=>401,980=>401,981=>367,982=>336,986=>283,987=>237,988=>339,989=>261,1024=>371,1025=>371, + 1026=>371,1028=>401,1029=>309,1030=>216,1031=>216,1032=>278,1033=>573,1034=>573,1035=>449,1037=>432,1038=>401,1040=>401,1041=>371,1042=>371,1043=>328,1044=>432, + 1045=>371,1046=>615,1047=>313,1048=>429,1049=>429,1050=>424,1051=>432,1052=>524,1053=>432,1054=>432,1055=>430,1056=>339,1057=>401,1058=>371,1059=>401,1060=>444, + 1061=>401,1062=>429,1063=>432,1064=>618,1065=>618,1066=>482,1067=>539,1068=>350,1069=>401,1070=>619,1071=>408,1072=>278,1073=>278,1074=>279,1075=>246,1076=>309, + 1077=>247,1078=>417,1079=>227,1080=>319,1081=>319,1082=>297,1083=>302,1084=>376,1085=>309,1086=>278,1087=>309,1088=>309,1089=>247,1090=>274,1091=>278,1092=>458, + 1093=>278,1094=>309,1095=>309,1096=>454,1097=>454,1098=>340,1099=>423,1100=>284,1101=>247,1102=>439,1103=>284,1104=>247,1105=>247,1106=>309,1108=>247,1109=>216, + 1110=>154,1111=>154,1112=>185,1113=>440,1114=>437,1115=>309,1117=>309,1118=>278,1119=>309,1164=>339,1165=>284,1166=>339,1167=>309,1168=>339,1169=>254,1170=>339, + 1171=>254,1172=>339,1173=>254,1174=>615,1175=>417,1176=>322,1177=>216,1178=>432,1179=>297,1180=>432,1181=>297,1182=>432,1183=>297,1184=>537,1185=>352,1186=>432, + 1187=>309,1188=>563,1189=>408,1190=>432,1191=>461,1192=>401,1193=>247,1194=>401,1195=>247,1196=>371,1197=>274,1198=>401,1199=>278,1200=>401,1201=>278,1202=>401, + 1203=>278,1204=>581,1205=>432,1206=>432,1207=>309,1208=>432,1209=>309,1210=>432,1211=>309,1212=>367,1213=>247,1214=>367,1215=>247,1216=>216,1217=>615,1218=>417, + 1219=>432,1220=>297,1223=>432,1224=>309,1227=>432,1228=>309,1232=>401,1233=>278,1234=>401,1235=>278,1236=>556,1237=>401,1238=>371,1239=>247,1240=>367,1241=>247, + 1242=>367,1243=>247,1244=>615,1245=>417,1246=>313,1247=>227,1248=>322,1249=>216,1250=>432,1251=>309,1252=>432,1253=>309,1254=>432,1255=>278,1256=>432,1257=>278, + 1258=>432,1259=>278,1260=>401,1261=>247,1262=>401,1263=>278,1264=>401,1265=>278,1266=>401,1267=>278,1268=>432,1269=>309,1272=>548,1273=>423,1488=>280,1489=>280, + 1490=>174,1491=>280,1492=>280,1493=>158,1494=>158,1495=>280,1496=>280,1497=>158,1498=>287,1499=>280,1500=>280,1501=>280,1502=>280,1503=>156,1504=>158,1505=>280, + 1506=>280,1507=>292,1508=>280,1509=>273,1510=>280,1511=>305,1512=>285,1513=>299,1514=>280,1548=>195,1563=>246,1567=>340,1569=>392,1570=>306,1571=>247,1572=>447, + 1573=>247,1574=>602,1575=>192,1576=>635,1577=>369,1578=>635,1579=>635,1580=>548,1581=>1173,1582=>548,1583=>363,1584=>363,1585=>439,1586=>442,1587=>875,1588=>875, + 1589=>1061,1590=>1061,1591=>811,1592=>811,1593=>549,1594=>547,1600=>389,1601=>755,1602=>574,1603=>717,1604=>555,1605=>423,1606=>532,1607=>371,1608=>454,1609=>633, + 1610=>643,1611=>-19,1612=>-26,1613=>-20,1614=>-19,1615=>-18,1616=>-19,1617=>-19,1618=>-15,1632=>383,1633=>383,1634=>383,1635=>383,1636=>383,1637=>383,1638=>383, + 1639=>383,1640=>383,1641=>383,1642=>383,1645=>398,7936=>336,7937=>336,7938=>336,7939=>336,7940=>336,7941=>336,7942=>336,7943=>336,7944=>401,7945=>401,7946=>401, + 7947=>401,7948=>401,7949=>401,7950=>401,7951=>401,7952=>244,7953=>244,7954=>244,7955=>244,7956=>244,7957=>244,7960=>371,7961=>371,7962=>371,7963=>371,7964=>371, + 7965=>371,7968=>336,7969=>336,7970=>336,7971=>336,7972=>336,7973=>336,7974=>336,7975=>336,7976=>432,7977=>432,7978=>432,7979=>432,7980=>432,7981=>432,7982=>432, + 7983=>432,7984=>183,7985=>183,7986=>183,7987=>183,7988=>183,7989=>183,7990=>183,7991=>183,7992=>216,7993=>216,7994=>216,7995=>216,7996=>216,7997=>216,7998=>216, + 7999=>216,8000=>306,8001=>306,8002=>306,8003=>306,8004=>306,8005=>306,8008=>432,8009=>432,8010=>432,8011=>432,8012=>432,8013=>432,8016=>306,8017=>306,8018=>306, + 8019=>306,8020=>306,8021=>306,8022=>306,8023=>306,8025=>401,8027=>401,8029=>401,8031=>401,8032=>397,8033=>397,8034=>397,8035=>397,8036=>397,8037=>397,8038=>397, + 8039=>397,8040=>451,8041=>451,8042=>451,8043=>451,8044=>451,8045=>451,8046=>451,8047=>451,8048=>336,8049=>336,8050=>244,8051=>244,8052=>336,8053=>336,8054=>183, + 8055=>183,8056=>306,8057=>306,8058=>306,8059=>306,8060=>397,8061=>397,8064=>336,8065=>336,8066=>336,8067=>336,8068=>336,8069=>336,8070=>336,8071=>336,8072=>401, + 8073=>401,8074=>401,8075=>401,8076=>401,8077=>401,8078=>401,8079=>401,8080=>336,8081=>336,8082=>336,8083=>336,8084=>336,8085=>336,8086=>336,8087=>336,8088=>432, + 8089=>432,8090=>432,8091=>432,8092=>432,8093=>432,8094=>432,8095=>432,8096=>397,8097=>397,8098=>397,8099=>397,8100=>397,8101=>397,8102=>397,8103=>397,8104=>451, + 8105=>451,8106=>451,8107=>451,8108=>451,8109=>451,8110=>451,8111=>451,8112=>336,8113=>336,8114=>336,8115=>336,8116=>336,8118=>336,8119=>336,8120=>401,8121=>401, + 8122=>401,8123=>401,8124=>401,8125=>278,8126=>0,8127=>278,8128=>278,8129=>306,8130=>336,8131=>336,8132=>336,8134=>336,8135=>336,8136=>371,8137=>371,8138=>432, + 8139=>432,8140=>432,8141=>278,8142=>278,8143=>278,8144=>183,8145=>183,8146=>183,8147=>183,8150=>183,8151=>183,8152=>216,8153=>216,8154=>216,8155=>216,8157=>278, + 8158=>278,8159=>278,8160=>306,8161=>306,8162=>306,8163=>306,8164=>306,8165=>306,8166=>306,8167=>306,8168=>401,8169=>401,8170=>401,8171=>401,8172=>339,8173=>306, + 8174=>306,8175=>278,8178=>397,8179=>397,8180=>397,8182=>397,8183=>397,8184=>432,8185=>432,8186=>451,8187=>451,8188=>451,8189=>278,8190=>278,8208=>185,8209=>185, + 8219=>185,8223=>278,8227=>311,8241=>1011,8248=>261,8251=>404,8253=>386,8255=>529,8256=>529,8257=>188,8258=>517,8259=>185,8260=>93,8261=>184,8262=>184,8267=>300, + 8308=>167,8309=>556,8321=>167,8322=>167,8323=>167,8324=>167,8352=>394,8353=>401,8354=>435,8355=>339,8356=>278,8357=>463,8358=>401,8359=>389,8361=>556,8470=>530, + 8471=>415,8479=>401,8483=>401,8486=>451,8487=>451,8494=>306,8498=>339,8543=>417,8706=>274,8710=>340,8721=>396,8722=>317,8730=>305,8734=>418,8800=>317,8804=>317, + 8805=>317,9674=>274,12353=>556,12354=>556,12355=>556,12356=>556,12357=>556,12358=>556,12359=>556,12360=>556,12361=>556,12362=>556,12363=>556,12364=>556,12365=>556,12366=>556, + 12367=>556,12368=>556,12369=>556,12370=>556,12371=>556,12372=>556,12373=>556,12374=>556,12375=>556,12376=>556,12377=>556,12378=>556,12379=>556,12380=>556,12381=>556,12382=>556, + 12383=>556,12384=>556,12385=>556,12386=>556,12387=>556,12388=>556,12389=>556,12390=>556,12391=>556,12392=>556,12393=>556,12394=>556,12395=>556,12396=>556,12397=>556,12398=>556, + 12399=>556,12400=>556,12401=>556,12402=>556,12403=>556,12404=>556,12405=>556,12406=>556,12407=>556,12408=>556,12409=>556,12410=>556,12411=>556,12412=>556,12413=>556,12414=>556, + 12415=>556,12416=>556,12417=>556,12418=>556,12419=>556,12420=>556,12421=>556,12422=>556,12423=>556,12424=>556,12425=>556,12426=>556,12427=>556,12428=>556,12429=>556,12430=>556, + 12431=>556,12432=>556,12433=>556,12434=>556,12435=>556,12449=>556,12450=>556,12451=>556,12452=>556,12453=>556,12454=>556,12455=>556,12456=>556,12457=>556,12458=>556,12459=>556, + 12460=>556,12461=>556,12462=>556,12463=>556,12464=>556,12465=>556,12466=>556,12467=>556,12468=>556,12469=>556,12470=>556,12471=>556,12472=>556,12473=>556,12474=>556,12475=>556, + 12476=>556,12477=>556,12478=>556,12479=>556,12480=>556,12481=>556,12482=>556,12483=>556,12484=>556,12485=>556,12486=>556,12487=>556,12488=>556,12489=>556,12490=>556,12491=>556, + 12492=>556,12493=>556,12494=>556,12495=>556,12496=>556,12497=>556,12498=>556,12499=>556,12500=>556,12501=>556,12502=>556,12503=>556,12504=>556,12505=>556,12506=>556,12507=>556, + 12508=>556,12509=>556,12510=>556,12511=>556,12512=>556,12513=>556,12514=>556,12515=>556,12516=>556,12517=>556,12518=>556,12519=>556,12520=>556,12521=>556,12522=>556,12523=>556, + 12524=>556,12525=>556,12526=>556,12527=>556,12528=>556,12529=>556,12530=>556,12531=>556,12532=>556,12533=>556,12534=>556,63033=>278,63034=>278,63035=>278,63036=>278,63037=>278, + 63038=>278,63039=>278,63040=>278,63041=>278,63171=>185,63196=>278,64256=>309,64257=>309,64258=>309,64259=>463,64260=>463,64262=>402,64606=>0,64607=>0,64608=>0,64609=>0, + 64610=>0,64830=>467,64831=>467,65010=>814,65152=>392,65153=>306,65154=>281,65155=>247,65156=>250,65157=>447,65158=>412,65159=>247,65160=>222,65161=>602,65162=>535,65163=>360, + 65164=>329,65165=>192,65166=>220,65167=>635,65168=>644,65169=>338,65170=>321,65171=>369,65172=>419,65173=>635,65174=>644,65175=>345,65176=>336,65177=>635,65178=>644,65179=>393, + 65180=>345,65181=>548,65182=>553,65183=>637,65184=>652,65185=>548,65186=>546,65187=>637,65188=>656,65189=>548,65190=>544,65191=>637,65192=>656,65193=>363,65194=>439,65195=>363, + 65196=>439,65197=>440,65198=>471,65199=>439,65200=>474,65201=>875,65202=>871,65203=>608,65204=>588,65205=>875,65206=>871,65207=>609,65208=>587,65209=>1061,65210=>1033,65211=>794, + 65212=>758,65213=>1061,65214=>1033,65215=>794,65216=>761,65217=>811,65218=>793,65219=>659,65220=>647,65221=>811,65222=>793,65223=>659,65224=>642,65225=>549,65226=>481,65227=>512, + 65228=>409,65229=>547,65230=>476,65231=>512,65232=>409,65233=>755,65234=>748,65235=>416,65236=>442,65237=>574,65238=>550,65239=>416,65240=>442,65241=>717,65242=>687,65243=>883, + 65244=>409,65245=>555,65246=>511,65247=>338,65248=>297,65249=>423,65250=>478,65251=>489,65252=>476,65253=>532,65254=>548,65255=>336,65256=>326,65257=>371,65258=>391,65259=>524, + 65260=>412,65261=>454,65262=>412,65263=>633,65264=>566,65265=>643,65266=>560,65267=>357,65268=>333,65269=>623,65270=>617,65271=>603,65272=>621,65273=>576,65274=>617,65275=>576, + 65276=>625); +$enc=''; +$diff=''; +$file='almohanad.z'; +$ctg='almohanad.ctg.z'; +$originalsize=227760; +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/almohanad.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/almohanad.z new file mode 100755 index 00000000..27426a68 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/almohanad.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/arialunicid0.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/arialunicid0.php new file mode 100755 index 00000000..2ee5bf15 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/arialunicid0.php @@ -0,0 +1,1768 @@ +1069,'Descent'=>-271,'CapHeight'=>1069,'Flags'=>32,'FontBBox'=>'[-1011 -330 2260 1078]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600); +$up=-100; +$ut=50; +$dw=1000; +$cw=array( + 32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278, + 48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556, + 64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778, + 80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>500, + 96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556, + 112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,8364=>556, + 1027=>567,8218=>222,402=>278,8222=>333,8230=>1000,8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,1036=>584,381=>611,1039=>723,8216=>222, + 8217=>222,8220=>333,8221=>333,8226=>350,8211=>500,8212=>1000,732=>333,8482=>1000,353=>500,8250=>333,339=>944,1116=>437,382=>500,376=>667,160=>278,161=>333, + 162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>500,176=>400,177=>584, + 178=>333,179=>333,180=>333,181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>667,193=>667, + 194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722, + 210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556, + 226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556, + 242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556, + 258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,268=>722,269=>500,270=>722,271=>627,272=>722,273=>556, + 274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,288=>778,289=>556, + 290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>222,298=>278,299=>222,300=>278,301=>222,302=>278,303=>222,304=>278,305=>278, + 306=>751,307=>444,308=>500,309=>222,310=>667,311=>500,312=>437,313=>556,314=>222,315=>556,316=>222,317=>556,318=>222,319=>556,320=>318,321=>556, + 322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>626,330=>723,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556, + 340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,350=>667,351=>500,354=>611,355=>278,356=>611,357=>406, + 358=>611,359=>278,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>944,373=>722, + 374=>667,375=>500,377=>611,378=>500,379=>611,380=>500,383=>222,384=>556,385=>740,386=>655,387=>556,388=>556,389=>556,390=>722,391=>766,392=>579, + 393=>722,394=>789,395=>655,396=>556,397=>557,398=>667,399=>729,400=>604,401=>611,403=>791,404=>649,405=>806,406=>245,407=>322,408=>667,409=>500, + 410=>322,411=>500,412=>833,413=>722,414=>556,415=>778,416=>776,417=>556,418=>1019,419=>782,420=>735,421=>556,422=>722,423=>667,424=>500,425=>602, + 426=>366,427=>278,428=>571,429=>278,430=>611,431=>776,432=>620,433=>748,434=>667,435=>752,436=>615,437=>611,438=>500,439=>628,440=>628,441=>526, + 442=>480,443=>556,444=>556,445=>526,446=>556,447=>556,448=>278,449=>464,450=>474,451=>278,452=>1333,453=>1222,454=>1056,455=>1030,456=>778,457=>444, + 458=>1222,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722, + 474=>556,475=>722,476=>556,477=>556,478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556,488=>667,489=>500, + 490=>778,491=>556,492=>778,493=>556,494=>534,495=>534,496=>222,497=>1333,498=>1222,499=>1056,500=>778,501=>556,506=>667,507=>556,508=>1000,509=>889, + 510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556, + 526=>778,527=>556,528=>722,529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,592=>556,593=>556,594=>556,595=>556,596=>500,597=>500, + 598=>556,599=>556,600=>556,601=>556,602=>777,603=>485,604=>485,605=>686,606=>519,607=>260,608=>556,609=>556,610=>557,611=>500,612=>500,613=>556, + 614=>556,615=>556,616=>242,617=>282,618=>356,619=>356,620=>425,621=>222,622=>635,623=>833,624=>833,625=>833,626=>556,627=>556,628=>558,629=>556, + 630=>715,631=>674,632=>558,633=>333,634=>333,635=>333,636=>333,637=>333,638=>312,639=>312,640=>530,641=>530,642=>500,643=>216,644=>276,645=>216, + 646=>222,647=>278,648=>278,649=>596,650=>558,651=>556,652=>500,653=>722,654=>500,655=>500,656=>500,657=>564,658=>530,659=>530,660=>464,661=>464, + 662=>464,663=>500,664=>614,665=>526,666=>519,667=>557,668=>558,669=>222,670=>500,671=>416,672=>556,673=>464,674=>464,675=>966,676=>966,677=>1030, + 678=>689,679=>484,680=>718,688=>326,689=>326,690=>153,691=>201,692=>201,693=>201,694=>304,695=>389,696=>278,697=>222,698=>372,699=>222,700=>222, + 701=>222,702=>222,703=>222,704=>250,705=>250,706=>320,707=>320,708=>320,709=>320,711=>333,712=>192,713=>333,714=>333,715=>333,716=>192,717=>333, + 718=>333,719=>333,720=>300,721=>300,722=>222,723=>222,724=>340,725=>340,726=>280,727=>362,728=>333,729=>333,730=>333,731=>333,733=>333,734=>333, + 736=>278,737=>153,738=>270,739=>274,740=>325,741=>360,742=>360,743=>360,744=>360,745=>360,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, + 774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0, + 790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0, + 806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, + 822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0, + 864=>0,865=>0,884=>308,885=>308,890=>278,894=>278,900=>278,901=>278,902=>667,903=>278,904=>704,905=>759,906=>315,908=>778,910=>746,911=>758, + 912=>222,913=>667,914=>667,915=>550,916=>682,917=>667,918=>611,919=>722,920=>778,921=>278,922=>667,923=>667,924=>833,925=>722,926=>650,927=>778, + 928=>722,929=>667,931=>602,932=>611,933=>667,934=>808,935=>667,936=>804,937=>758,938=>278,939=>667,940=>576,941=>434,942=>556,943=>222,944=>551, + 945=>576,946=>563,947=>500,948=>557,949=>434,950=>440,951=>556,952=>556,953=>222,954=>498,955=>500,956=>553,957=>500,958=>432,959=>556,960=>678, + 961=>571,962=>472,963=>619,964=>382,965=>551,966=>649,967=>522,968=>729,969=>766,970=>222,971=>551,972=>556,973=>551,974=>766,976=>563,977=>616, + 978=>631,979=>726,980=>631,981=>644,982=>781,986=>722,988=>578,990=>570,992=>692,994=>880,995=>833,996=>684,997=>558,998=>680,999=>529,1000=>557, + 1001=>505,1002=>623,1003=>603,1004=>610,1005=>611,1006=>568,1007=>434,1008=>600,1009=>571,1010=>500,1011=>222,1025=>667,1026=>865,1028=>717,1029=>667,1030=>278, + 1031=>278,1032=>500,1033=>1105,1034=>1009,1035=>867,1038=>635,1040=>667,1041=>655,1042=>667,1043=>567,1044=>677,1045=>667,1046=>923,1047=>604,1048=>722,1049=>722, + 1050=>584,1051=>705,1052=>833,1053=>722,1054=>778,1055=>723,1056=>667,1057=>722,1058=>611,1059=>635,1060=>760,1061=>667,1062=>740,1063=>684,1064=>920,1065=>939, + 1066=>793,1067=>883,1068=>655,1069=>717,1070=>1006,1071=>722,1072=>556,1073=>573,1074=>531,1075=>383,1076=>583,1077=>556,1078=>669,1079=>458,1080=>559,1081=>559, + 1082=>437,1083=>571,1084=>683,1085=>552,1086=>556,1087=>542,1088=>556,1089=>500,1090=>458,1091=>500,1092=>823,1093=>500,1094=>562,1095=>533,1096=>802,1097=>823, + 1098=>620,1099=>717,1100=>523,1101=>510,1102=>744,1103=>542,1105=>556,1106=>556,1107=>383,1108=>510,1109=>500,1110=>222,1111=>278,1112=>222,1113=>873,1114=>811, + 1115=>556,1118=>500,1119=>542,1120=>976,1121=>766,1122=>656,1123=>521,1124=>950,1125=>694,1126=>667,1127=>597,1128=>952,1129=>817,1130=>654,1131=>600,1132=>932, + 1133=>817,1134=>604,1135=>458,1136=>804,1137=>729,1138=>778,1139=>556,1140=>667,1141=>500,1142=>667,1143=>500,1144=>1279,1145=>1060,1146=>778,1147=>556,1148=>976, + 1149=>766,1150=>976,1151=>766,1152=>722,1153=>514,1154=>686,1155=>334,1156=>382,1157=>334,1158=>334,1168=>435,1169=>339,1170=>567,1171=>383,1172=>656,1173=>556, + 1174=>923,1175=>669,1176=>604,1177=>458,1178=>584,1179=>437,1180=>584,1181=>437,1182=>584,1183=>437,1184=>764,1185=>537,1186=>741,1187=>573,1188=>900,1189=>670, + 1190=>736,1191=>560,1192=>778,1193=>560,1194=>722,1195=>500,1196=>611,1197=>458,1198=>667,1199=>500,1200=>667,1201=>500,1202=>667,1203=>500,1204=>916,1205=>661, + 1206=>684,1207=>533,1208=>684,1209=>533,1210=>684,1211=>556,1212=>829,1213=>667,1214=>829,1215=>667,1216=>278,1217=>923,1218=>669,1219=>584,1220=>437,1223=>735, + 1224=>570,1227=>684,1228=>533,1232=>667,1233=>556,1234=>667,1235=>556,1236=>1000,1237=>889,1238=>667,1239=>556,1240=>729,1241=>556,1242=>729,1243=>556,1244=>923, + 1245=>669,1246=>604,1247=>458,1248=>604,1249=>492,1250=>722,1251=>559,1252=>722,1253=>559,1254=>778,1255=>556,1256=>778,1257=>556,1258=>778,1259=>556,1262=>635, + 1263=>500,1264=>635,1265=>500,1266=>635,1267=>500,1268=>684,1269=>533,1272=>883,1273=>717,1329=>635,1330=>531,1331=>583,1332=>583,1333=>531,1334=>531,1335=>427, + 1336=>531,1337=>750,1338=>635,1339=>531,1340=>375,1341=>583,1342=>698,1343=>531,1344=>427,1345=>531,1346=>583,1347=>531,1348=>635,1349=>698,1350=>635,1351=>635, + 1352=>531,1353=>531,1354=>698,1355=>531,1356=>635,1357=>531,1358=>698,1359=>583,1360=>479,1361=>583,1362=>531,1363=>698,1364=>698,1365=>635,1366=>750,1369=>271, + 1370=>271,1371=>150,1372=>300,1373=>271,1374=>271,1375=>420,1377=>583,1378=>427,1379=>427,1380=>427,1381=>427,1382=>427,1383=>427,1384=>427,1385=>459,1386=>427, + 1387=>427,1388=>323,1389=>531,1390=>427,1391=>427,1392=>427,1393=>427,1394=>427,1395=>427,1396=>427,1397=>271,1398=>427,1399=>375,1400=>427,1401=>375,1402=>583, + 1403=>427,1404=>427,1405=>427,1406=>427,1407=>583,1408=>427,1409=>427,1410=>323,1411=>583,1412=>375,1413=>375,1414=>583,1415=>527,1417=>271,1425=>360,1426=>360, + 1427=>360,1428=>360,1429=>360,1430=>360,1431=>360,1432=>360,1433=>360,1434=>360,1435=>360,1436=>360,1437=>360,1438=>360,1439=>360,1440=>360,1441=>360,1443=>360, + 1444=>360,1445=>360,1446=>360,1447=>360,1448=>360,1449=>360,1450=>360,1451=>360,1452=>360,1453=>360,1454=>360,1455=>360,1456=>360,1457=>360,1458=>360,1459=>360, + 1460=>360,1461=>360,1462=>360,1463=>360,1464=>360,1465=>360,1467=>360,1468=>360,1469=>360,1470=>366,1471=>360,1472=>225,1473=>360,1474=>360,1475=>238,1476=>360, + 1488=>577,1489=>563,1490=>411,1491=>512,1492=>594,1493=>316,1494=>326,1495=>594,1496=>594,1497=>316,1498=>507,1499=>527,1500=>484,1501=>594,1502=>594,1503=>316, + 1504=>338,1505=>604,1506=>550,1507=>567,1508=>569,1509=>505,1510=>514,1511=>583,1512=>507,1513=>700,1514=>633,1520=>590,1521=>590,1522=>590,1523=>216,1524=>412, + 1548=>278,1563=>278,1567=>556,1569=>529,1570=>243,1571=>243,1572=>470,1573=>243,1574=>731,1575=>243,1576=>771,1577=>514,1578=>771,1579=>771,1580=>544,1581=>544, + 1582=>544,1583=>430,1584=>430,1585=>421,1586=>421,1587=>1194,1588=>1194,1589=>1291,1590=>1291,1591=>843,1592=>843,1593=>594,1594=>594,1600=>279,1601=>957,1602=>800, + 1603=>757,1604=>662,1605=>589,1606=>692,1607=>514,1608=>470,1609=>731,1610=>731,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0, + 1632=>480,1633=>480,1634=>480,1635=>480,1636=>480,1637=>480,1638=>480,1639=>480,1640=>480,1641=>480,1642=>547,1643=>278,1644=>278,1645=>438,1648=>0,1649=>243, + 1650=>243,1651=>243,1652=>0,1653=>380,1654=>470,1655=>548,1656=>772,1657=>771,1658=>771,1659=>771,1660=>771,1661=>771,1662=>771,1663=>771,1664=>771,1665=>544, + 1666=>544,1667=>544,1668=>544,1669=>544,1670=>544,1671=>544,1672=>430,1673=>430,1674=>430,1675=>430,1676=>430,1677=>430,1678=>430,1679=>430,1680=>430,1681=>421, + 1682=>421,1683=>421,1684=>421,1685=>421,1686=>419,1687=>421,1688=>421,1689=>421,1690=>1194,1691=>1194,1692=>1194,1693=>1291,1694=>1291,1695=>843,1696=>594,1697=>957, + 1698=>957,1699=>957,1700=>957,1701=>957,1702=>957,1703=>800,1704=>800,1705=>828,1706=>1058,1707=>828,1708=>757,1709=>757,1710=>757,1711=>828,1712=>828,1713=>828, + 1714=>828,1715=>828,1716=>828,1717=>662,1718=>662,1719=>662,1722=>692,1723=>692,1724=>692,1725=>692,1726=>706,1728=>514,1729=>509,1730=>509,1731=>509,1732=>470, + 1733=>470,1734=>470,1735=>470,1736=>470,1737=>470,1738=>470,1739=>470,1740=>731,1741=>841,1742=>731,1744=>731,1745=>731,1746=>550,1747=>550,1748=>279,1749=>514, + 1750=>726,1751=>558,1752=>321,1753=>318,1754=>342,1755=>373,1756=>716,1757=>688,1758=>852,1759=>288,1760=>288,1761=>388,1762=>350,1763=>716,1764=>146,1765=>282, + 1766=>339,1767=>339,1768=>415,1769=>514,1770=>220,1771=>220,1772=>220,1773=>350,1776=>480,1777=>480,1778=>480,1779=>480,1780=>480,1781=>480,1782=>480,1783=>480, + 1784=>480,1785=>480,2305=>0,2306=>0,2307=>294,2309=>693,2310=>910,2311=>533,2312=>533,2313=>590,2314=>713,2315=>920,2316=>677,2317=>611,2318=>611,2319=>611, + 2320=>611,2321=>910,2322=>910,2323=>910,2324=>910,2325=>667,2326=>732,2327=>593,2328=>639,2329=>624,2330=>688,2331=>713,2332=>688,2333=>712,2334=>697,2335=>502, + 2336=>533,2337=>583,2338=>523,2339=>693,2340=>585,2341=>638,2342=>533,2343=>640,2344=>585,2345=>585,2346=>565,2347=>699,2348=>592,2349=>689,2350=>633,2351=>600, + 2352=>486,2353=>486,2354=>680,2355=>730,2356=>730,2357=>592,2358=>684,2359=>608,2360=>646,2361=>546,2364=>0,2365=>373,2366=>319,2367=>319,2368=>319,2369=>0, + 2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>0,2376=>0,2377=>319,2378=>319,2379=>319,2380=>319,2381=>0,2384=>884,2385=>0,2386=>0,2387=>0, + 2388=>0,2392=>667,2393=>732,2394=>593,2395=>688,2396=>583,2397=>523,2398=>699,2399=>600,2400=>920,2401=>677,2402=>0,2403=>0,2404=>331,2405=>513,2406=>639, + 2407=>639,2408=>639,2409=>639,2410=>639,2411=>639,2412=>639,2413=>639,2414=>639,2415=>639,2416=>362,2433=>0,2434=>430,2435=>430,2437=>786,2438=>1030,2439=>582, + 2440=>603,2441=>648,2442=>757,2443=>758,2444=>630,2447=>685,2448=>746,2451=>711,2452=>776,2453=>779,2454=>655,2455=>606,2456=>645,2457=>661,2458=>554,2459=>585, + 2460=>729,2461=>752,2462=>893,2463=>567,2464=>625,2465=>648,2466=>567,2467=>598,2468=>680,2469=>645,2470=>609,2471=>596,2472=>595,2474=>635,2475=>780,2476=>593, + 2477=>677,2478=>621,2479=>601,2480=>593,2482=>640,2486=>598,2487=>596,2488=>637,2489=>582,2492=>0,2494=>245,2495=>245,2496=>245,2497=>0,2498=>0,2499=>0, + 2500=>0,2503=>309,2504=>309,2507=>932,2508=>932,2509=>0,2519=>245,2524=>648,2525=>553,2527=>596,2528=>758,2529=>630,2530=>0,2531=>335,2534=>610,2535=>559, + 2536=>595,2537=>711,2538=>610,2539=>661,2540=>661,2541=>559,2542=>661,2543=>600,2544=>593,2545=>593,2546=>601,2547=>567,2548=>601,2549=>699,2550=>661,2551=>267, + 2552=>610,2553=>424,2554=>548,2562=>0,2565=>691,2566=>936,2567=>803,2568=>803,2569=>678,2570=>678,2575=>557,2576=>691,2579=>678,2580=>691,2581=>602,2582=>567, + 2583=>641,2584=>688,2585=>565,2586=>592,2587=>603,2588=>591,2589=>541,2590=>558,2591=>543,2592=>581,2593=>596,2594=>640,2595=>640,2596=>591,2597=>564,2598=>640, + 2599=>564,2600=>581,2602=>564,2603=>551,2604=>560,2605=>549,2606=>558,2607=>652,2608=>540,2610=>677,2611=>677,2613=>601,2614=>558,2616=>558,2617=>549,2620=>0, + 2622=>246,2623=>246,2624=>246,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2649=>567,2650=>690,2651=>591,2652=>591,2654=>581,2662=>591, + 2663=>591,2664=>591,2665=>591,2666=>591,2667=>591,2668=>591,2669=>591,2670=>591,2671=>591,2672=>0,2673=>0,2674=>557,2675=>678,2676=>894,2689=>0,2690=>0, + 2691=>300,2693=>781,2694=>1044,2695=>589,2696=>589,2697=>560,2698=>758,2699=>806,2701=>781,2703=>781,2704=>781,2705=>1044,2707=>1044,2708=>1044,2709=>413,2710=>773, + 2711=>606,2712=>558,2713=>483,2714=>600,2715=>691,2716=>811,2717=>647,2718=>651,2719=>453,2720=>450,2721=>425,2722=>478,2723=>694,2724=>534,2725=>553,2726=>446, + 2727=>541,2728=>582,2730=>572,2731=>437,2732=>663,2733=>756,2734=>594,2735=>493,2736=>392,2738=>613,2739=>656,2741=>538,2742=>611,2743=>507,2744=>663,2745=>587, + 2748=>0,2749=>478,2750=>273,2751=>273,2752=>273,2753=>0,2754=>0,2755=>0,2756=>0,2757=>0,2759=>0,2760=>0,2761=>273,2763=>273,2764=>273,2765=>0, + 2768=>843,2784=>893,2790=>625,2791=>625,2792=>625,2793=>625,2794=>625,2795=>625,2796=>625,2797=>625,2798=>625,2799=>625,2817=>0,2818=>306,2819=>391,2821=>590, + 2822=>808,2823=>658,2824=>658,2825=>633,2826=>654,2827=>636,2828=>540,2831=>560,2832=>938,2835=>600,2836=>973,2837=>603,2838=>620,2839=>620,2840=>605,2841=>712, + 2842=>579,2843=>579,2844=>593,2845=>564,2846=>581,2847=>604,2848=>578,2849=>579,2850=>579,2851=>607,2852=>579,2853=>587,2854=>579,2855=>602,2856=>579,2858=>605, + 2859=>728,2860=>579,2861=>643,2862=>605,2863=>628,2864=>619,2866=>653,2867=>593,2870=>620,2871=>605,2872=>605,2873=>579,2876=>0,2877=>333,2878=>218,2879=>0, + 2880=>294,2881=>0,2882=>0,2883=>0,2887=>479,2888=>479,2891=>1026,2892=>1026,2893=>0,2902=>0,2903=>218,2908=>579,2909=>579,2911=>599,2912=>636,2913=>540, + 2918=>578,2919=>480,2920=>480,2921=>622,2922=>506,2923=>605,2924=>529,2925=>548,2926=>512,2927=>528,2928=>561,2946=>0,2947=>742,2949=>1002,2950=>1118,2951=>994, + 2952=>660,2953=>1012,2954=>1231,2958=>726,2959=>731,2960=>870,2962=>763,2963=>763,2964=>1636,2965=>667,2969=>830,2970=>584,2972=>876,2974=>986,2975=>802,2979=>1295, + 2980=>656,2984=>630,2985=>1012,2986=>694,2990=>727,2991=>790,2992=>545,2993=>718,2994=>821,2995=>871,2996=>724,2997=>873,2999=>1087,3000=>1098,3001=>1274,3006=>547, + 3007=>172,3008=>93,3009=>519,3010=>814,3014=>748,3015=>681,3016=>956,3018=>1666,3019=>1666,3020=>1994,3021=>0,3031=>871,3047=>667,3048=>1012,3049=>751,3050=>740, + 3051=>924,3052=>884,3053=>726,3054=>1002,3055=>825,3056=>717,3057=>719,3058=>774,3073=>365,3074=>601,3075=>346,3077=>720,3078=>786,3079=>567,3080=>1159,3081=>690, + 3082=>1047,3083=>1299,3084=>913,3086=>625,3087=>625,3088=>712,3090=>655,3091=>655,3092=>862,3093=>515,3094=>680,3095=>526,3096=>943,3097=>655,3098=>684,3099=>684, + 3100=>670,3101=>1205,3102=>732,3103=>888,3104=>597,3105=>709,3106=>709,3107=>809,3108=>715,3109=>702,3110=>702,3111=>702,3112=>607,3114=>623,3115=>623,3116=>681, + 3117=>681,3118=>932,3119=>1203,3120=>597,3121=>893,3122=>631,3123=>608,3125=>620,3126=>541,3127=>667,3128=>640,3129=>911,3134=>644,3135=>298,3136=>298,3137=>361, + 3138=>682,3139=>342,3140=>704,3142=>624,3143=>624,3144=>900,3146=>849,3147=>849,3148=>976,3149=>669,3157=>298,3158=>119,3168=>1620,3169=>1281,3174=>840,3175=>840, + 3176=>840,3177=>840,3178=>840,3179=>840,3180=>840,3181=>840,3182=>840,3183=>840,3202=>440,3203=>251,3205=>654,3206=>654,3207=>631,3208=>891,3209=>957,3210=>1293, + 3211=>1044,3212=>744,3214=>650,3215=>650,3216=>659,3218=>667,3219=>667,3220=>667,3221=>462,3222=>749,3223=>543,3224=>779,3225=>674,3226=>682,3227=>660,3228=>667, + 3229=>1171,3230=>926,3231=>671,3232=>557,3233=>669,3234=>669,3235=>728,3236=>544,3237=>672,3238=>672,3239=>672,3240=>560,3242=>668,3243=>668,3244=>681,3245=>687, + 3246=>972,3247=>1101,3248=>556,3249=>677,3250=>661,3251=>545,3253=>666,3254=>553,3255=>670,3256=>549,3257=>716,3262=>425,3263=>341,3264=>680,3265=>354,3266=>714, + 3267=>386,3268=>638,3270=>307,3271=>670,3272=>462,3274=>908,3275=>1251,3276=>434,3277=>336,3285=>344,3286=>404,3294=>673,3296=>1695,3297=>978,3302=>549,3303=>549, + 3304=>549,3305=>549,3306=>549,3307=>549,3308=>549,3309=>549,3310=>549,3311=>549,3330=>368,3331=>305,3333=>1201,3334=>1351,3335=>905,3336=>1459,3337=>635,3338=>1198, + 3339=>861,3340=>957,3342=>1211,3343=>1202,3344=>1839,3346=>642,3347=>1114,3348=>1195,3349=>861,3350=>982,3351=>874,3352=>1354,3353=>957,3354=>1016,3355=>1266,3356=>712, + 3357=>1454,3358=>1215,3359=>563,3360=>565,3361=>1192,3362=>1244,3363=>1268,3364=>878,3365=>966,3366=>545,3367=>879,3368=>879,3370=>1031,3371=>1175,3372=>1334,3373=>546, + 3374=>643,3375=>949,3376=>642,3377=>555,3378=>945,3379=>631,3380=>553,3381=>959,3382=>936,3383=>1122,3384=>1190,3385=>1112,3390=>475,3391=>418,3392=>442,3393=>340, + 3394=>340,3395=>473,3398=>640,3399=>530,3400=>1279,3402=>1368,3403=>1258,3404=>1447,3405=>0,3415=>553,3424=>861,3425=>1100,3430=>1095,3431=>929,3432=>854,3433=>1181, + 3434=>658,3435=>972,3436=>1210,3437=>650,3438=>959,3439=>896,3585=>595,3586=>648,3587=>665,3588=>608,3589=>608,3590=>665,3591=>471,3592=>556,3593=>652,3594=>664, + 3595=>681,3596=>816,3597=>849,3598=>620,3599=>620,3600=>541,3601=>785,3602=>826,3603=>887,3604=>598,3605=>605,3606=>595,3607=>650,3608=>541,3609=>652,3610=>608, + 3611=>608,3612=>630,3613=>630,3614=>695,3615=>695,3616=>620,3617=>581,3618=>588,3619=>501,3620=>595,3621=>569,3622=>620,3623=>519,3624=>592,3625=>659,3626=>574, + 3627=>654,3628=>695,3629=>566,3630=>574,3631=>517,3632=>452,3633=>0,3634=>496,3635=>496,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0, + 3647=>687,3648=>302,3649=>571,3650=>478,3651=>515,3652=>515,3653=>496,3654=>506,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0, + 3663=>555,3664=>598,3665=>640,3666=>688,3667=>690,3668=>657,3669=>657,3670=>635,3671=>839,3672=>693,3673=>769,3674=>673,3675=>994,3713=>775,3714=>707,3716=>724, + 3719=>524,3720=>690,3722=>678,3725=>711,3732=>719,3733=>834,3734=>776,3735=>916,3737=>744,3738=>740,3739=>740,3740=>834,3741=>834,3742=>854,3743=>854,3745=>775, + 3746=>724,3747=>697,3749=>700,3751=>700,3754=>708,3755=>916,3757=>700,3758=>697,3759=>658,3760=>432,3761=>534,3762=>476,3763=>476,3764=>778,3765=>778,3766=>778, + 3767=>778,3768=>778,3769=>778,3771=>778,3772=>778,3773=>670,3776=>420,3777=>806,3778=>430,3779=>446,3780=>346,3782=>571,3784=>778,3785=>778,3786=>778,3787=>778, + 3788=>778,3789=>778,3792=>721,3793=>719,3794=>601,3795=>711,3796=>686,3797=>686,3798=>834,3799=>756,3800=>724,3801=>906,3804=>1272,3805=>1272,3840=>600,3841=>600, + 3842=>600,3843=>600,3844=>600,3845=>600,3846=>600,3847=>600,3848=>600,3849=>600,3850=>600,3851=>600,3852=>600,3853=>600,3854=>600,3855=>600,3856=>600,3857=>600, + 3858=>600,3859=>600,3860=>600,3861=>600,3862=>600,3863=>600,3864=>600,3865=>600,3866=>600,3867=>600,3868=>600,3869=>600,3870=>600,3871=>600,3872=>600,3873=>600, + 3874=>600,3875=>600,3876=>600,3877=>600,3878=>600,3879=>600,3880=>600,3881=>600,3882=>600,3883=>600,3884=>600,3885=>600,3886=>600,3887=>600,3888=>600,3889=>600, + 3890=>600,3891=>600,3892=>600,3893=>600,3894=>600,3895=>600,3896=>600,3897=>600,3898=>600,3899=>600,3900=>600,3901=>600,3902=>600,3903=>600,3904=>600,3905=>600, + 3906=>600,3907=>600,3908=>600,3909=>600,3910=>600,3911=>600,3913=>600,3914=>600,3915=>600,3916=>600,3917=>600,3918=>600,3919=>600,3920=>600,3921=>600,3922=>600, + 3923=>600,3924=>600,3925=>600,3926=>600,3927=>600,3928=>600,3929=>600,3930=>600,3931=>600,3932=>600,3933=>600,3934=>600,3935=>600,3936=>600,3937=>600,3938=>600, + 3939=>600,3940=>600,3941=>600,3942=>600,3943=>600,3944=>600,3945=>600,3953=>600,3954=>600,3955=>600,3956=>600,3957=>600,3958=>600,3959=>600,3960=>600,3961=>600, + 3962=>600,3963=>600,3964=>600,3965=>600,3966=>600,3967=>600,3968=>600,3969=>600,3970=>600,3971=>600,3972=>600,3973=>600,3974=>600,3975=>600,3976=>600,3977=>600, + 3978=>600,3979=>600,3984=>600,3985=>600,3986=>600,3987=>600,3988=>600,3989=>600,3991=>600,3993=>600,3994=>600,3995=>600,3996=>600,3997=>600,3998=>600,3999=>600, + 4000=>600,4001=>600,4002=>600,4003=>600,4004=>600,4005=>600,4006=>600,4007=>600,4008=>600,4009=>600,4010=>600,4011=>600,4012=>600,4013=>600,4017=>600,4018=>600, + 4019=>600,4020=>600,4021=>600,4022=>600,4023=>600,4025=>600,4256=>662,4257=>677,4258=>708,4259=>696,4260=>609,4261=>790,4262=>664,4263=>785,4264=>560,4265=>634, + 4266=>782,4267=>701,4268=>629,4269=>682,4270=>705,4271=>692,4272=>734,4273=>615,4274=>592,4275=>680,4276=>679,4277=>705,4278=>643,4279=>623,4280=>623,4281=>629, + 4282=>633,4283=>770,4284=>592,4285=>662,4286=>629,4287=>672,4288=>735,4289=>576,4290=>606,4291=>605,4292=>676,4293=>792,4304=>435,4305=>556,4306=>565,4307=>872, + 4308=>506,4309=>544,4310=>723,4311=>868,4312=>530,4313=>532,4314=>955,4315=>552,4316=>565,4317=>712,4318=>547,4319=>574,4320=>685,4321=>554,4322=>806,4323=>810, + 4324=>777,4325=>502,4326=>686,4327=>512,4328=>552,4329=>496,4330=>568,4331=>552,4332=>592,4333=>565,4334=>552,4335=>741,4336=>549,4337=>659,4338=>559,4339=>524, + 4340=>482,4341=>565,4342=>822,4347=>506,4352=>1000,4353=>1000,4354=>1000,4355=>1000,4356=>1000,4357=>1000,4358=>1000,4359=>1000,4360=>1000,4361=>1000,4362=>1000,4363=>1000, + 4364=>1000,4365=>1000,4366=>1000,4367=>1000,4368=>1000,4369=>1000,4370=>1000,4371=>1000,4372=>1000,4373=>1000,4374=>1000,4375=>1000,4376=>1000,4377=>1000,4378=>1000,4379=>1000, + 4380=>1000,4381=>1000,4382=>1000,4383=>1000,4384=>1000,4385=>1000,4386=>1000,4387=>1000,4388=>1000,4389=>1000,4390=>1000,4391=>1000,4392=>1000,4393=>1000,4394=>1000,4395=>1000, + 4396=>1000,4397=>1000,4398=>1000,4399=>1000,4400=>1000,4401=>1000,4402=>1000,4403=>1000,4404=>1000,4405=>1000,4406=>1000,4407=>1000,4408=>1000,4409=>1000,4410=>1000,4411=>1000, + 4412=>1000,4413=>1000,4414=>1000,4415=>1000,4416=>1000,4417=>1000,4418=>1000,4419=>1000,4420=>1000,4421=>1000,4422=>1000,4423=>1000,4424=>1000,4425=>1000,4426=>1000,4427=>1000, + 4428=>1000,4429=>1000,4430=>1000,4431=>1000,4432=>1000,4433=>1000,4434=>1000,4435=>1000,4436=>1000,4437=>1000,4438=>1000,4439=>1000,4440=>1000,4441=>1000,4447=>1000,4448=>1000, + 4449=>1000,4450=>1000,4451=>1000,4452=>1000,4453=>1000,4454=>1000,4455=>1000,4456=>1000,4457=>1000,4458=>1000,4459=>1000,4460=>1000,4461=>1000,4462=>1000,4463=>1000,4464=>1000, + 4465=>1000,4466=>1000,4467=>1000,4468=>1000,4469=>1000,4470=>1000,4471=>1000,4472=>1000,4473=>1000,4474=>1000,4475=>1000,4476=>1000,4477=>1000,4478=>1000,4479=>1000,4480=>1000, + 4481=>1000,4482=>1000,4483=>1000,4484=>1000,4485=>1000,4486=>1000,4487=>1000,4488=>1000,4489=>1000,4490=>1000,4491=>1000,4492=>1000,4493=>1000,4494=>1000,4495=>1000,4496=>1000, + 4497=>1000,4498=>1000,4499=>1000,4500=>1000,4501=>1000,4502=>1000,4503=>1000,4504=>1000,4505=>1000,4506=>1000,4507=>1000,4508=>1000,4509=>1000,4510=>1000,4511=>1000,4512=>1000, + 4513=>1000,4514=>1000,4520=>1000,4521=>1000,4522=>1000,4523=>1000,4524=>1000,4525=>1000,4526=>1000,4527=>1000,4528=>1000,4529=>1000,4530=>1000,4531=>1000,4532=>1000,4533=>1000, + 4534=>1000,4535=>1000,4536=>1000,4537=>1000,4538=>1000,4539=>1000,4540=>1000,4541=>1000,4542=>1000,4543=>1000,4544=>1000,4545=>1000,4546=>1000,4547=>1000,4548=>1000,4549=>1000, + 4550=>1000,4551=>1000,4552=>1000,4553=>1000,4554=>1000,4555=>1000,4556=>1000,4557=>1000,4558=>1000,4559=>1000,4560=>1000,4561=>1000,4562=>1000,4563=>1000,4564=>1000,4565=>1000, + 4566=>1000,4567=>1000,4568=>1000,4569=>1000,4570=>1000,4571=>1000,4572=>1000,4573=>1000,4574=>1000,4575=>1000,4576=>1000,4577=>1000,4578=>1000,4579=>1000,4580=>1000,4581=>1000, + 4582=>1000,4583=>1000,4584=>1000,4585=>1000,4586=>1000,4587=>1000,4588=>1000,4589=>1000,4590=>1000,4591=>1000,4592=>1000,4593=>1000,4594=>1000,4595=>1000,4596=>1000,4597=>1000, + 4598=>1000,4599=>1000,4600=>1000,4601=>1000,7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556, + 7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556, + 7708=>667,7709=>556,7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556,7722=>722,7723=>556, + 7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222, + 7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556, + 7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,7771=>333, + 7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278, + 7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556, + 7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500, + 7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278,7832=>722,7833=>500,7834=>556,7835=>278, + 7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556, + 7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556, + 7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778,7885=>556,7886=>778,7887=>556, + 7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556,7896=>778,7897=>556,7898=>776,7899=>556,7900=>776,7901=>556,7902=>776,7903=>556, + 7904=>776,7905=>556,7906=>776,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>776,7913=>620,7914=>776,7915=>620,7916=>776,7917=>620,7918=>776,7919=>620, + 7920=>776,7921=>620,7922=>667,7923=>500,7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>576,7937=>576,7938=>576,7939=>576,7940=>576,7941=>576, + 7942=>576,7943=>576,7944=>667,7945=>667,7946=>680,7947=>680,7948=>680,7949=>680,7950=>718,7951=>718,7952=>434,7953=>434,7954=>434,7955=>434,7956=>434,7957=>434, + 7960=>692,7961=>692,7962=>823,7963=>823,7964=>823,7965=>823,7968=>556,7969=>556,7970=>556,7971=>556,7972=>556,7973=>556,7974=>556,7975=>556,7976=>747,7977=>747, + 7978=>878,7979=>878,7980=>878,7981=>878,7982=>923,7983=>923,7984=>222,7985=>222,7986=>222,7987=>222,7988=>222,7989=>222,7990=>222,7991=>222,7992=>303,7993=>303, + 7994=>434,7995=>434,7996=>434,7997=>434,7998=>479,7999=>479,8000=>556,8001=>556,8002=>556,8003=>556,8004=>556,8005=>556,8008=>778,8009=>778,8010=>894,8011=>894, + 8012=>894,8013=>894,8016=>551,8017=>551,8018=>551,8019=>551,8020=>551,8021=>551,8022=>551,8023=>551,8025=>777,8027=>893,8029=>885,8031=>940,8032=>766,8033=>766, + 8034=>766,8035=>766,8036=>766,8037=>766,8038=>766,8039=>766,8040=>758,8041=>758,8042=>874,8043=>874,8044=>868,8045=>867,8046=>911,8047=>911,8048=>576,8049=>576, + 8050=>434,8051=>434,8052=>556,8053=>556,8054=>222,8055=>222,8056=>556,8057=>556,8058=>551,8059=>551,8060=>766,8061=>766,8064=>576,8065=>576,8066=>576,8067=>576, + 8068=>576,8069=>576,8070=>576,8071=>576,8072=>667,8073=>667,8074=>680,8075=>680,8076=>680,8077=>680,8078=>718,8079=>718,8080=>556,8081=>556,8082=>556,8083=>556, + 8084=>556,8085=>556,8086=>556,8087=>556,8088=>747,8089=>747,8090=>878,8091=>878,8092=>878,8093=>878,8094=>923,8095=>923,8096=>766,8097=>766,8098=>766,8099=>766, + 8100=>766,8101=>766,8102=>766,8103=>766,8104=>758,8105=>758,8106=>874,8107=>874,8108=>868,8109=>867,8110=>911,8111=>911,8112=>576,8113=>576,8114=>576,8115=>576, + 8116=>576,8118=>576,8119=>576,8120=>667,8121=>667,8122=>667,8123=>667,8124=>667,8125=>278,8126=>278,8127=>278,8128=>278,8129=>278,8130=>556,8131=>556,8132=>556, + 8134=>556,8135=>556,8136=>693,8137=>704,8138=>748,8139=>759,8140=>722,8141=>278,8142=>278,8143=>278,8144=>222,8145=>222,8146=>222,8147=>222,8150=>222,8151=>222, + 8152=>278,8153=>278,8154=>304,8155=>304,8157=>278,8158=>278,8159=>278,8160=>551,8161=>551,8162=>551,8163=>551,8164=>571,8165=>571,8166=>551,8167=>551,8168=>667, + 8169=>667,8170=>742,8171=>746,8172=>693,8173=>278,8174=>278,8175=>278,8178=>766,8179=>766,8180=>766,8182=>766,8183=>766,8184=>778,8185=>778,8186=>758,8187=>758, + 8188=>758,8189=>278,8190=>278,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>100,8202=>50,8203=>0,8204=>0, + 8205=>0,8208=>333,8209=>333,8210=>556,8213=>564,8214=>428,8215=>500,8219=>222,8223=>333,8227=>350,8228=>278,8229=>556,8231=>278,8232=>0,8233=>0,8241=>1330, + 8242=>222,8243=>372,8244=>522,8245=>206,8246=>356,8247=>506,8248=>312,8251=>1000,8252=>471,8253=>556,8254=>500,8255=>945,8256=>945,8257=>312,8258=>820,8259=>333, + 8260=>167,8261=>278,8262=>278,8304=>333,8308=>333,8309=>333,8310=>333,8311=>333,8312=>333,8313=>333,8314=>333,8315=>333,8316=>333,8317=>210,8318=>210,8319=>333, + 8320=>333,8321=>333,8322=>333,8323=>333,8324=>333,8325=>333,8326=>333,8327=>333,8328=>333,8329=>333,8330=>333,8331=>333,8332=>333,8333=>210,8334=>210,8352=>556, + 8353=>556,8354=>556,8355=>556,8356=>556,8357=>833,8358=>556,8359=>556,8360=>1024,8361=>940,8362=>784,8363=>556,8400=>600,8401=>600,8402=>600,8403=>600,8404=>700, + 8405=>700,8406=>600,8407=>600,8408=>600,8409=>600,8410=>600,8411=>600,8412=>600,8413=>900,8414=>900,8415=>900,8416=>900,8417=>700,8448=>889,8449=>889,8450=>667, + 8451=>1022,8452=>611,8453=>889,8454=>889,8455=>501,8456=>667,8457=>921,8458=>510,8459=>906,8460=>988,8461=>722,8462=>500,8463=>500,8464=>688,8465=>553,8466=>708, + 8467=>291,8468=>778,8469=>722,8470=>1073,8471=>737,8472=>740,8473=>556,8474=>722,8475=>927,8476=>795,8477=>667,8478=>667,8479=>667,8480=>1000,8481=>1174,8483=>722, + 8484=>611,8485=>542,8486=>768,8487=>768,8488=>698,8489=>321,8490=>667,8491=>667,8492=>927,8493=>646,8494=>556,8495=>385,8496=>615,8497=>688,8498=>611,8499=>1115, + 8500=>406,8501=>688,8502=>688,8503=>344,8504=>688,8531=>834,8532=>834,8533=>834,8534=>834,8535=>834,8536=>834,8537=>834,8538=>834,8539=>834,8540=>834,8541=>834, + 8542=>834,8543=>834,8544=>278,8545=>555,8546=>832,8547=>933,8548=>667,8549=>934,8550=>1031,8551=>1268,8552=>944,8553=>667,8554=>944,8555=>1035,8556=>556,8557=>722, + 8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>700,8564=>500,8565=>700,8566=>922,8567=>1144,8568=>712,8569=>500,8570=>712,8571=>934,8572=>222,8573=>500, + 8574=>556,8575=>833,8576=>983,8577=>722,8578=>983,8592=>713,8593=>713,8594=>713,8595=>713,8596=>713,8597=>713,8598=>713,8599=>713,8600=>713,8601=>713,8602=>713, + 8603=>713,8604=>713,8605=>713,8606=>713,8607=>713,8608=>713,8609=>713,8610=>713,8611=>713,8612=>713,8613=>713,8614=>713,8615=>713,8616=>713,8617=>713,8618=>713, + 8619=>713,8620=>713,8621=>813,8622=>813,8623=>713,8624=>713,8625=>713,8626=>713,8627=>713,8628=>713,8629=>713,8630=>713,8631=>713,8632=>713,8633=>713,8634=>800, + 8635=>800,8636=>713,8637=>713,8638=>713,8639=>713,8640=>713,8641=>713,8642=>713,8643=>713,8644=>713,8645=>713,8646=>713,8647=>713,8648=>713,8649=>713,8650=>713, + 8651=>713,8652=>713,8653=>713,8654=>950,8655=>713,8656=>713,8657=>713,8658=>713,8659=>713,8660=>863,8661=>713,8662=>713,8663=>713,8664=>713,8665=>713,8666=>713, + 8667=>713,8668=>813,8669=>813,8670=>713,8671=>713,8672=>713,8673=>713,8674=>713,8675=>713,8676=>713,8677=>713,8678=>713,8679=>713,8680=>713,8681=>713,8682=>713, + 8704=>600,8705=>600,8706=>494,8707=>600,8708=>600,8709=>800,8710=>612,8711=>612,8712=>549,8713=>549,8714=>549,8715=>549,8716=>549,8717=>549,8718=>549,8719=>823, + 8720=>823,8721=>713,8722=>584,8723=>584,8724=>584,8725=>167,8726=>278,8727=>389,8728=>400,8729=>400,8730=>600,8731=>600,8732=>600,8733=>549,8734=>549,8735=>584, + 8736=>584,8737=>584,8738=>584,8739=>260,8740=>444,8741=>418,8742=>602,8743=>561,8744=>561,8745=>561,8746=>561,8747=>506,8748=>806,8749=>1106,8750=>506,8751=>806, + 8752=>1106,8753=>506,8754=>506,8755=>506,8756=>561,8757=>561,8758=>422,8759=>561,8760=>584,8761=>584,8762=>584,8763=>584,8764=>584,8765=>584,8766=>584,8767=>584, + 8768=>422,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,8775=>584,8776=>584,8777=>584,8778=>584,8779=>584,8780=>584,8781=>584,8782=>584,8783=>584, + 8784=>584,8785=>584,8786=>584,8787=>584,8788=>737,8789=>737,8790=>584,8791=>584,8792=>584,8793=>584,8794=>584,8795=>584,8796=>584,8797=>584,8798=>584,8799=>584, + 8800=>584,8801=>584,8802=>584,8803=>584,8804=>584,8805=>584,8806=>584,8807=>584,8808=>584,8809=>584,8810=>969,8811=>969,8812=>584,8813=>584,8814=>584,8815=>584, + 8816=>584,8817=>584,8818=>584,8819=>584,8820=>584,8821=>584,8822=>584,8823=>584,8824=>584,8825=>584,8826=>584,8827=>584,8828=>584,8829=>584,8830=>584,8831=>584, + 8832=>584,8833=>584,8834=>678,8835=>678,8836=>678,8837=>678,8838=>678,8839=>678,8840=>678,8841=>678,8842=>678,8843=>678,8844=>561,8845=>561,8846=>561,8847=>678, + 8848=>678,8849=>673,8850=>673,8851=>561,8852=>561,8853=>800,8854=>800,8855=>800,8856=>800,8857=>800,8858=>800,8859=>800,8860=>800,8861=>800,8862=>800,8863=>800, + 8864=>800,8865=>800,8866=>549,8867=>549,8868=>549,8869=>549,8870=>399,8871=>399,8872=>549,8873=>549,8874=>549,8875=>672,8876=>549,8877=>549,8878=>549,8879=>672, + 8880=>549,8881=>549,8882=>549,8883=>549,8884=>549,8885=>549,8886=>713,8887=>713,8888=>713,8889=>549,8890=>549,8891=>584,8892=>584,8893=>584,8894=>584,8895=>584, + 8896=>561,8897=>561,8898=>561,8899=>561,8900=>549,8901=>250,8902=>549,8903=>649,8904=>630,8905=>630,8906=>630,8907=>630,8908=>630,8909=>584,8910=>561,8911=>561, + 8912=>668,8913=>668,8914=>668,8915=>668,8916=>561,8917=>602,8918=>584,8919=>584,8920=>1354,8921=>1354,8922=>584,8923=>584,8924=>584,8925=>584,8926=>584,8927=>584, + 8928=>584,8929=>584,8930=>673,8931=>673,8932=>673,8933=>673,8934=>584,8935=>584,8936=>584,8937=>584,8938=>584,8939=>584,8940=>584,8941=>584,8942=>278,8943=>1000, + 8944=>1000,8945=>1000,8960=>549,8962=>549,8963=>549,8964=>549,8965=>549,8966=>549,8967=>549,8968=>449,8969=>449,8970=>449,8971=>449,8972=>549,8973=>549,8974=>549, + 8975=>549,8976=>549,8977=>549,8978=>800,8979=>800,8980=>549,8981=>549,8982=>549,8983=>650,8984=>780,8985=>549,8986=>549,8987=>549,8988=>549,8989=>549,8990=>549, + 8991=>549,8992=>506,8993=>506,8994=>713,8995=>713,8996=>1000,8997=>1000,8998=>1000,8999=>1000,9000=>1000,9001=>329,9002=>329,9003=>1000,9004=>549,9005=>549,9006=>549, + 9007=>549,9008=>549,9009=>549,9010=>549,9011=>549,9012=>549,9013=>549,9014=>600,9015=>600,9016=>600,9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600, + 9023=>600,9024=>600,9025=>600,9026=>600,9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600,9036=>600,9037=>600,9038=>600, + 9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600,9046=>600,9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600, + 9055=>600,9056=>600,9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600,9066=>600,9067=>600,9068=>600,9069=>600,9070=>600, + 9071=>600,9072=>600,9073=>600,9074=>600,9075=>600,9076=>600,9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9109=>600,9216=>600,9217=>600,9218=>600, + 9219=>600,9220=>600,9221=>600,9222=>600,9223=>600,9224=>600,9225=>600,9226=>600,9227=>600,9228=>600,9229=>600,9230=>600,9231=>600,9232=>600,9233=>600,9234=>600, + 9235=>600,9236=>600,9237=>600,9238=>600,9239=>600,9240=>600,9241=>600,9242=>600,9243=>600,9244=>600,9245=>600,9246=>600,9247=>600,9248=>600,9249=>600,9250=>600, + 9251=>600,9252=>600,9280=>604,9281=>604,9282=>604,9283=>604,9284=>604,9285=>604,9286=>750,9287=>750,9288=>750,9289=>750,9290=>604,9312=>1000,9313=>1000,9314=>1000, + 9315=>1000,9316=>1000,9317=>1000,9318=>1000,9319=>1000,9320=>1000,9321=>1000,9322=>1000,9323=>1000,9324=>1000,9325=>1000,9326=>1000,9327=>1000,9328=>1000,9329=>1000,9330=>1000, + 9331=>1000,9332=>1000,9333=>1000,9334=>1000,9335=>1000,9336=>1000,9337=>1000,9338=>1000,9339=>1000,9340=>1000,9341=>1000,9342=>1000,9343=>1000,9344=>1000,9345=>1000,9346=>1000, + 9347=>1000,9348=>1000,9349=>1000,9350=>1000,9351=>1000,9352=>1000,9353=>1000,9354=>1000,9355=>1000,9356=>1000,9357=>1000,9358=>1000,9359=>1000,9360=>1000,9361=>1000,9362=>1000, + 9363=>1000,9364=>1000,9365=>1000,9366=>1000,9367=>1000,9368=>1000,9369=>1000,9370=>1000,9371=>1000,9372=>1000,9373=>1000,9374=>1000,9375=>1000,9376=>1000,9377=>1000,9378=>1000, + 9379=>1000,9380=>1000,9381=>1000,9382=>1000,9383=>1000,9384=>1000,9385=>1000,9386=>1000,9387=>1000,9388=>1000,9389=>1000,9390=>1000,9391=>1000,9392=>1000,9393=>1000,9394=>1000, + 9395=>1000,9396=>1000,9397=>1000,9398=>1000,9399=>1000,9400=>1000,9401=>1000,9402=>1000,9403=>1000,9404=>1000,9405=>1000,9406=>1000,9407=>1000,9408=>1000,9409=>1000,9410=>1000, + 9411=>1000,9412=>1000,9413=>1000,9414=>1000,9415=>1000,9416=>1000,9417=>1000,9418=>1000,9419=>1000,9420=>1000,9421=>1000,9422=>1000,9423=>1000,9424=>1000,9425=>1000,9426=>1000, + 9427=>1000,9428=>1000,9429=>1000,9430=>1000,9431=>1000,9432=>1000,9433=>1000,9434=>1000,9435=>1000,9436=>1000,9437=>1000,9438=>1000,9439=>1000,9440=>1000,9441=>1000,9442=>1000, + 9443=>1000,9444=>1000,9445=>1000,9446=>1000,9447=>1000,9448=>1000,9449=>1000,9450=>1000,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600, + 9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600, + 9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600, + 9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,9527=>600, + 9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600, + 9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600, + 9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600, + 9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600, + 9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,9607=>600, + 9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600, + 9634=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600, + 9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600, + 9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,9673=>600,9674=>600,9675=>600,9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600, + 9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,9693=>600,9694=>600,9695=>600,9696=>600,9697=>600, + 9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9728=>750,9729=>1000, + 9730=>750,9731=>750,9732=>1000,9733=>816,9734=>823,9735=>500,9736=>500,9737=>800,9738=>800,9739=>800,9740=>800,9741=>800,9742=>719,9743=>719,9744=>734,9745=>734, + 9746=>734,9747=>762,9754=>960,9755=>960,9756=>939,9757=>939,9758=>939,9759=>939,9760=>750,9761=>600,9762=>750,9763=>750,9764=>580,9765=>460,9766=>444,9767=>650, + 9768=>444,9769=>768,9770=>800,9771=>850,9772=>675,9773=>800,9774=>750,9775=>750,9776=>900,9777=>900,9778=>900,9779=>900,9780=>900,9781=>900,9782=>900,9783=>900, + 9784=>750,9785=>750,9786=>750,9787=>750,9788=>750,9789=>750,9790=>750,9791=>740,9792=>740,9793=>740,9794=>740,9795=>653,9796=>490,9797=>632,9798=>780,9799=>560, + 9800=>838,9801=>780,9802=>734,9803=>887,9804=>780,9805=>1080,9806=>896,9807=>1080,9808=>804,9809=>868,9810=>922,9811=>696,9812=>1000,9813=>1000,9814=>1000,9815=>1000, + 9816=>1000,9817=>1000,9818=>1000,9819=>1000,9820=>1000,9821=>1000,9822=>1000,9823=>1000,9824=>722,9825=>734,9826=>674,9827=>804,9828=>722,9829=>734,9830=>674,9831=>804, + 9832=>860,9833=>423,9834=>592,9835=>750,9836=>750,9837=>439,9838=>439,9839=>439,9985=>974,9986=>961,9987=>974,9988=>980,9990=>789,9991=>790,9992=>791,9993=>690, + 9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759, + 10012=>754,10013=>494,10014=>552,10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10025=>823,10026=>789,10027=>841,10028=>823, + 10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708, + 10045=>682,10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,10056=>787,10057=>713,10058=>791,10059=>785,10061=>873, + 10063=>762,10064=>762,10065=>759,10066=>759,10070=>784,10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10081=>732,10082=>544,10083=>544,10084=>910, + 10085=>667,10086=>760,10087=>760,10102=>788,10103=>788,10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788,10114=>788, + 10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788,10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788, + 10131=>788,10132=>894,10136=>748,10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924,10147=>924,10148=>917,10149=>930, + 10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867,10157=>696,10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771, + 10167=>888,10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,12288=>1000,12289=>1000,12290=>1000,12291=>1000,12292=>1000,12293=>1000,12294=>1000,12295=>1000, + 12296=>1000,12297=>1000,12298=>1000,12299=>1000,12300=>1000,12301=>1000,12302=>1000,12303=>1000,12304=>1000,12305=>1000,12306=>1000,12307=>1000,12308=>1000,12309=>1000,12310=>1000,12311=>1000, + 12312=>1000,12313=>1000,12314=>1000,12315=>1000,12316=>1000,12317=>1000,12318=>1000,12319=>1000,12320=>1000,12321=>1000,12322=>1000,12323=>1000,12324=>1000,12325=>1000,12326=>1000,12327=>1000, + 12328=>1000,12329=>1000,12330=>1000,12331=>1000,12332=>1000,12333=>1000,12334=>1000,12335=>1000,12336=>1000,12337=>1000,12338=>1000,12339=>1000,12340=>1000,12341=>1000,12342=>1000,12343=>1000, + 12351=>1000,12353=>1000,12354=>1000,12355=>1000,12356=>1000,12357=>1000,12358=>1000,12359=>1000,12360=>1000,12361=>1000,12362=>1000,12363=>1000,12364=>1000,12365=>1000,12366=>1000,12367=>1000, + 12368=>1000,12369=>1000,12370=>1000,12371=>1000,12372=>1000,12373=>1000,12374=>1000,12375=>1000,12376=>1000,12377=>1000,12378=>1000,12379=>1000,12380=>1000,12381=>1000,12382=>1000,12383=>1000, + 12384=>1000,12385=>1000,12386=>1000,12387=>1000,12388=>1000,12389=>1000,12390=>1000,12391=>1000,12392=>1000,12393=>1000,12394=>1000,12395=>1000,12396=>1000,12397=>1000,12398=>1000,12399=>1000, + 12400=>1000,12401=>1000,12402=>1000,12403=>1000,12404=>1000,12405=>1000,12406=>1000,12407=>1000,12408=>1000,12409=>1000,12410=>1000,12411=>1000,12412=>1000,12413=>1000,12414=>1000,12415=>1000, + 12416=>1000,12417=>1000,12418=>1000,12419=>1000,12420=>1000,12421=>1000,12422=>1000,12423=>1000,12424=>1000,12425=>1000,12426=>1000,12427=>1000,12428=>1000,12429=>1000,12430=>1000,12431=>1000, + 12432=>1000,12433=>1000,12434=>1000,12435=>1000,12436=>1000,12441=>1000,12442=>1000,12443=>1000,12444=>1000,12445=>1000,12446=>1000,12449=>1000,12450=>1000,12451=>1000,12452=>1000,12453=>1000, + 12454=>1000,12455=>1000,12456=>1000,12457=>1000,12458=>1000,12459=>1000,12460=>1000,12461=>1000,12462=>1000,12463=>1000,12464=>1000,12465=>1000,12466=>1000,12467=>1000,12468=>1000,12469=>1000, + 12470=>1000,12471=>1000,12472=>1000,12473=>1000,12474=>1000,12475=>1000,12476=>1000,12477=>1000,12478=>1000,12479=>1000,12480=>1000,12481=>1000,12482=>1000,12483=>1000,12484=>1000,12485=>1000, + 12486=>1000,12487=>1000,12488=>1000,12489=>1000,12490=>1000,12491=>1000,12492=>1000,12493=>1000,12494=>1000,12495=>1000,12496=>1000,12497=>1000,12498=>1000,12499=>1000,12500=>1000,12501=>1000, + 12502=>1000,12503=>1000,12504=>1000,12505=>1000,12506=>1000,12507=>1000,12508=>1000,12509=>1000,12510=>1000,12511=>1000,12512=>1000,12513=>1000,12514=>1000,12515=>1000,12516=>1000,12517=>1000, + 12518=>1000,12519=>1000,12520=>1000,12521=>1000,12522=>1000,12523=>1000,12524=>1000,12525=>1000,12526=>1000,12527=>1000,12528=>1000,12529=>1000,12530=>1000,12531=>1000,12532=>1000,12533=>1000, + 12534=>1000,12535=>1000,12536=>1000,12537=>1000,12538=>1000,12539=>1000,12540=>1000,12541=>1000,12542=>1000,12549=>1000,12550=>1000,12551=>1000,12552=>1000,12553=>1000,12554=>1000,12555=>1000, + 12556=>1000,12557=>1000,12558=>1000,12559=>1000,12560=>1000,12561=>1000,12562=>1000,12563=>1000,12564=>1000,12565=>1000,12566=>1000,12567=>1000,12568=>1000,12569=>1000,12570=>1000,12571=>1000, + 12572=>1000,12573=>1000,12574=>1000,12575=>1000,12576=>1000,12577=>1000,12578=>1000,12579=>1000,12580=>1000,12581=>1000,12582=>1000,12583=>1000,12584=>1000,12585=>1000,12586=>1000,12587=>1000, + 12588=>1000,12593=>1000,12594=>1000,12595=>1000,12596=>1000,12597=>1000,12598=>1000,12599=>1000,12600=>1000,12601=>1000,12602=>1000,12603=>1000,12604=>1000,12605=>1000,12606=>1000,12607=>1000, + 12608=>1000,12609=>1000,12610=>1000,12611=>1000,12612=>1000,12613=>1000,12614=>1000,12615=>1000,12616=>1000,12617=>1000,12618=>1000,12619=>1000,12620=>1000,12621=>1000,12622=>1000,12623=>1000, + 12624=>1000,12625=>1000,12626=>1000,12627=>1000,12628=>1000,12629=>1000,12630=>1000,12631=>1000,12632=>1000,12633=>1000,12634=>1000,12635=>1000,12636=>1000,12637=>1000,12638=>1000,12639=>1000, + 12640=>1000,12641=>1000,12642=>1000,12643=>1000,12644=>1000,12645=>1000,12646=>1000,12647=>1000,12648=>1000,12649=>1000,12650=>1000,12651=>1000,12652=>1000,12653=>1000,12654=>1000,12655=>1000, + 12656=>1000,12657=>1000,12658=>1000,12659=>1000,12660=>1000,12661=>1000,12662=>1000,12663=>1000,12664=>1000,12665=>1000,12666=>1000,12667=>1000,12668=>1000,12669=>1000,12670=>1000,12671=>1000, + 12672=>1000,12673=>1000,12674=>1000,12675=>1000,12676=>1000,12677=>1000,12678=>1000,12679=>1000,12680=>1000,12681=>1000,12682=>1000,12683=>1000,12684=>1000,12685=>1000,12686=>1000,12688=>1000, + 12689=>1000,12690=>1000,12691=>1000,12692=>1000,12693=>1000,12694=>1000,12695=>1000,12696=>1000,12697=>1000,12698=>1000,12699=>1000,12700=>1000,12701=>1000,12702=>1000,12703=>1000,12800=>1000, + 12801=>1000,12802=>1000,12803=>1000,12804=>1000,12805=>1000,12806=>1000,12807=>1000,12808=>1000,12809=>1000,12810=>1000,12811=>1000,12812=>1000,12813=>1000,12814=>1000,12815=>1000,12816=>1000, + 12817=>1000,12818=>1000,12819=>1000,12820=>1000,12821=>1000,12822=>1000,12823=>1000,12824=>1000,12825=>1000,12826=>1000,12827=>1000,12828=>1000,12832=>1000,12833=>1000,12834=>1000,12835=>1000, + 12836=>1000,12837=>1000,12838=>1000,12839=>1000,12840=>1000,12841=>1000,12842=>1000,12843=>1000,12844=>1000,12845=>1000,12846=>1000,12847=>1000,12848=>1000,12849=>1000,12850=>1000,12851=>1000, + 12852=>1000,12853=>1000,12854=>1000,12855=>1000,12856=>1000,12857=>1000,12858=>1000,12859=>1000,12860=>1000,12861=>1000,12862=>1000,12863=>1000,12864=>1000,12865=>1000,12866=>1000,12867=>1000, + 12896=>1000,12897=>1000,12898=>1000,12899=>1000,12900=>1000,12901=>1000,12902=>1000,12903=>1000,12904=>1000,12905=>1000,12906=>1000,12907=>1000,12908=>1000,12909=>1000,12910=>1000,12911=>1000, + 12912=>1000,12913=>1000,12914=>1000,12915=>1000,12916=>1000,12917=>1000,12918=>1000,12919=>1000,12920=>1000,12921=>1000,12922=>1000,12923=>1000,12927=>1000,12928=>1000,12929=>1000,12930=>1000, + 12931=>1000,12932=>1000,12933=>1000,12934=>1000,12935=>1000,12936=>1000,12937=>1000,12938=>1000,12939=>1000,12940=>1000,12941=>1000,12942=>1000,12943=>1000,12944=>1000,12945=>1000,12946=>1000, + 12947=>1000,12948=>1000,12949=>1000,12950=>1000,12951=>1000,12952=>1000,12953=>1000,12954=>1000,12955=>1000,12956=>1000,12957=>1000,12958=>1000,12959=>1000,12960=>1000,12961=>1000,12962=>1000, + 12963=>1000,12964=>1000,12965=>1000,12966=>1000,12967=>1000,12968=>1000,12969=>1000,12970=>1000,12971=>1000,12972=>1000,12973=>1000,12974=>1000,12975=>1000,12976=>1000,12992=>1000,12993=>1000, + 12994=>1000,12995=>1000,12996=>1000,12997=>1000,12998=>1000,12999=>1000,13000=>1000,13001=>1000,13002=>1000,13003=>1000,13008=>1000,13009=>1000,13010=>1000,13011=>1000,13012=>1000,13013=>1000, + 13014=>1000,13015=>1000,13016=>1000,13017=>1000,13018=>1000,13019=>1000,13020=>1000,13021=>1000,13022=>1000,13023=>1000,13024=>1000,13025=>1000,13026=>1000,13027=>1000,13028=>1000,13029=>1000, + 13030=>1000,13031=>1000,13032=>1000,13033=>1000,13034=>1000,13035=>1000,13036=>1000,13037=>1000,13038=>1000,13039=>1000,13040=>1000,13041=>1000,13042=>1000,13043=>1000,13044=>1000,13045=>1000, + 13046=>1000,13047=>1000,13048=>1000,13049=>1000,13050=>1000,13051=>1000,13052=>1000,13053=>1000,13054=>1000,13056=>1000,13057=>1000,13058=>1000,13059=>1000,13060=>1000,13061=>1000,13062=>1000, + 13063=>1000,13064=>1000,13065=>1000,13066=>1000,13067=>1000,13068=>1000,13069=>1000,13070=>1000,13071=>1000,13072=>1000,13073=>1000,13074=>1000,13075=>1000,13076=>1000,13077=>1000,13078=>1000, + 13079=>1000,13080=>1000,13081=>1000,13082=>1000,13083=>1000,13084=>1000,13085=>1000,13086=>1000,13087=>1000,13088=>1000,13089=>1000,13090=>1000,13091=>1000,13092=>1000,13093=>1000,13094=>1000, + 13095=>1000,13096=>1000,13097=>1000,13098=>1000,13099=>1000,13100=>1000,13101=>1000,13102=>1000,13103=>1000,13104=>1000,13105=>1000,13106=>1000,13107=>1000,13108=>1000,13109=>1000,13110=>1000, + 13111=>1000,13112=>1000,13113=>1000,13114=>1000,13115=>1000,13116=>1000,13117=>1000,13118=>1000,13119=>1000,13120=>1000,13121=>1000,13122=>1000,13123=>1000,13124=>1000,13125=>1000,13126=>1000, + 13127=>1000,13128=>1000,13129=>1000,13130=>1000,13131=>1000,13132=>1000,13133=>1000,13134=>1000,13135=>1000,13136=>1000,13137=>1000,13138=>1000,13139=>1000,13140=>1000,13141=>1000,13142=>1000, + 13143=>1000,13144=>1000,13145=>1000,13146=>1000,13147=>1000,13148=>1000,13149=>1000,13150=>1000,13151=>1000,13152=>1000,13153=>1000,13154=>1000,13155=>1000,13156=>1000,13157=>1000,13158=>1000, + 13159=>1000,13160=>1000,13161=>1000,13162=>1000,13163=>1000,13164=>1000,13165=>1000,13166=>1000,13167=>1000,13168=>1000,13169=>1000,13170=>1000,13171=>1000,13172=>1000,13173=>1000,13174=>1000, + 13179=>1000,13180=>1000,13181=>1000,13182=>1000,13183=>1000,13184=>1000,13185=>1000,13186=>1000,13187=>1000,13188=>1000,13189=>1000,13190=>1000,13191=>1000,13192=>1000,13193=>1000,13194=>1000, + 13195=>1000,13196=>1000,13197=>1000,13198=>1000,13199=>1000,13200=>1000,13201=>1000,13202=>1000,13203=>1000,13204=>1000,13205=>1000,13206=>1000,13207=>1000,13208=>1000,13209=>1000,13210=>1000, + 13211=>1000,13212=>1000,13213=>1000,13214=>1000,13215=>1000,13216=>1000,13217=>1000,13218=>1000,13219=>1000,13220=>1000,13221=>1000,13222=>1000,13223=>1000,13224=>1000,13225=>1000,13226=>1000, + 13227=>1000,13228=>1000,13229=>1000,13230=>1000,13231=>1000,13232=>1000,13233=>1000,13234=>1000,13235=>1000,13236=>1000,13237=>1000,13238=>1000,13239=>1000,13240=>1000,13241=>1000,13242=>1000, + 13243=>1000,13244=>1000,13245=>1000,13246=>1000,13247=>1000,13248=>1000,13249=>1000,13250=>1000,13251=>1000,13252=>1000,13253=>1000,13254=>1000,13255=>1000,13256=>1000,13257=>1000,13258=>1000, + 13259=>1000,13260=>1000,13261=>1000,13262=>1000,13263=>1000,13264=>1000,13265=>1000,13266=>1000,13267=>1000,13268=>1000,13269=>1000,13270=>1000,13271=>1000,13272=>1000,13273=>1000,13274=>1000, + 13275=>1000,13276=>1000,13277=>1000,13280=>1000,13281=>1000,13282=>1000,13283=>1000,13284=>1000,13285=>1000,13286=>1000,13287=>1000,13288=>1000,13289=>1000,13290=>1000,13291=>1000,13292=>1000, + 13293=>1000,13294=>1000,13295=>1000,13296=>1000,13297=>1000,13298=>1000,13299=>1000,13300=>1000,13301=>1000,13302=>1000,13303=>1000,13304=>1000,13305=>1000,13306=>1000,13307=>1000,13308=>1000, + 13309=>1000,13310=>1000,59393=>316,59394=>507,59395=>507,59396=>484,59397=>484,59416=>0,59492=>480,59495=>480,59536=>458,59557=>466,59558=>480,59559=>903,61441=>500,61442=>500, + 63232=>541,63233=>0,63234=>0,63235=>0,63236=>0,63237=>0,63238=>0,63239=>0,63240=>0,63241=>0,63242=>0,63243=>0,63244=>0,63245=>0,63246=>0,63247=>849, + 63248=>0,63249=>0,63250=>0,63251=>0,63252=>0,63253=>0,63254=>0,63255=>0,63256=>0,63257=>0,63258=>0,63260=>333,63261=>287,63744=>1000,63745=>1000,63746=>1000, + 63747=>1000,63748=>1000,63749=>1000,63750=>1000,63751=>1000,63752=>1000,63753=>1000,63754=>1000,63755=>1000,63756=>1000,63757=>1000,63758=>1000,63759=>1000,63760=>1000,63761=>1000,63762=>1000, + 63763=>1000,63764=>1000,63765=>1000,63766=>1000,63767=>1000,63768=>1000,63769=>1000,63770=>1000,63771=>1000,63772=>1000,63773=>1000,63774=>1000,63775=>1000,63776=>1000,63777=>1000,63778=>1000, + 63779=>1000,63780=>1000,63781=>1000,63782=>1000,63783=>1000,63784=>1000,63785=>1000,63786=>1000,63787=>1000,63788=>1000,63789=>1000,63790=>1000,63791=>1000,63792=>1000,63793=>1000,63794=>1000, + 63795=>1000,63796=>1000,63797=>1000,63798=>1000,63799=>1000,63800=>1000,63801=>1000,63802=>1000,63803=>1000,63804=>1000,63805=>1000,63806=>1000,63807=>1000,63808=>1000,63809=>1000,63810=>1000, + 63811=>1000,63812=>1000,63813=>1000,63814=>1000,63815=>1000,63816=>1000,63817=>1000,63818=>1000,63819=>1000,63820=>1000,63821=>1000,63822=>1000,63823=>1000,63824=>1000,63825=>1000,63826=>1000, + 63827=>1000,63828=>1000,63829=>1000,63830=>1000,63831=>1000,63832=>1000,63833=>1000,63834=>1000,63835=>1000,63836=>1000,63837=>1000,63838=>1000,63839=>1000,63840=>1000,63841=>1000,63842=>1000, + 63843=>1000,63844=>1000,63845=>1000,63846=>1000,63847=>1000,63848=>1000,63849=>1000,63850=>1000,63851=>1000,63852=>1000,63853=>1000,63854=>1000,63855=>1000,63856=>1000,63857=>1000,63858=>1000, + 63859=>1000,63860=>1000,63861=>1000,63862=>1000,63863=>1000,63864=>1000,63865=>1000,63866=>1000,63867=>1000,63868=>1000,63869=>1000,63870=>1000,63871=>1000,63872=>1000,63873=>1000,63874=>1000, + 63875=>1000,63876=>1000,63877=>1000,63878=>1000,63879=>1000,63880=>1000,63881=>1000,63882=>1000,63883=>1000,63884=>1000,63885=>1000,63886=>1000,63887=>1000,63888=>1000,63889=>1000,63890=>1000, + 63891=>1000,63892=>1000,63893=>1000,63894=>1000,63895=>1000,63896=>1000,63897=>1000,63898=>1000,63899=>1000,63900=>1000,63901=>1000,63902=>1000,63903=>1000,63904=>1000,63905=>1000,63906=>1000, + 63907=>1000,63908=>1000,63909=>1000,63910=>1000,63911=>1000,63912=>1000,63913=>1000,63914=>1000,63915=>1000,63916=>1000,63917=>1000,63918=>1000,63919=>1000,63920=>1000,63921=>1000,63922=>1000, + 63923=>1000,63924=>1000,63925=>1000,63926=>1000,63927=>1000,63928=>1000,63929=>1000,63930=>1000,63931=>1000,63932=>1000,63933=>1000,63934=>1000,63935=>1000,63936=>1000,63937=>1000,63938=>1000, + 63939=>1000,63940=>1000,63941=>1000,63942=>1000,63943=>1000,63944=>1000,63945=>1000,63946=>1000,63947=>1000,63948=>1000,63949=>1000,63950=>1000,63951=>1000,63952=>1000,63953=>1000,63954=>1000, + 63955=>1000,63956=>1000,63957=>1000,63958=>1000,63959=>1000,63960=>1000,63961=>1000,63962=>1000,63963=>1000,63964=>1000,63965=>1000,63966=>1000,63967=>1000,63968=>1000,63969=>1000,63970=>1000, + 63971=>1000,63972=>1000,63973=>1000,63974=>1000,63975=>1000,63976=>1000,63977=>1000,63978=>1000,63979=>1000,63980=>1000,63981=>1000,63982=>1000,63983=>1000,63984=>1000,63985=>1000,63986=>1000, + 63987=>1000,63988=>1000,63989=>1000,63990=>1000,63991=>1000,63992=>1000,63993=>1000,63994=>1000,63995=>1000,63996=>1000,63997=>1000,63998=>1000,63999=>1000,64000=>1000,64001=>1000,64002=>1000, + 64003=>1000,64004=>1000,64005=>1000,64006=>1000,64007=>1000,64008=>1000,64009=>1000,64010=>1000,64011=>1000,64012=>1000,64013=>1000,64014=>1000,64015=>1000,64016=>1000,64017=>1000,64018=>1000, + 64019=>1000,64020=>1000,64021=>1000,64022=>1000,64023=>1000,64024=>1000,64025=>1000,64026=>1000,64027=>1000,64028=>1000,64029=>1000,64030=>1000,64031=>1000,64032=>1000,64033=>1000,64034=>1000, + 64035=>1000,64036=>1000,64037=>1000,64038=>1000,64039=>1000,64040=>1000,64041=>1000,64042=>1000,64043=>1000,64044=>1000,64045=>1000,64256=>537,64257=>500,64258=>500,64259=>778,64260=>750, + 64261=>532,64262=>758,64275=>784,64276=>784,64277=>784,64278=>784,64279=>893,64286=>333,64287=>590,64288=>550,64289=>709,64290=>649,64291=>730,64292=>656,64293=>605,64294=>730, + 64295=>633,64296=>794,64297=>584,64298=>700,64299=>700,64300=>700,64301=>700,64302=>577,64303=>577,64304=>577,64305=>563,64306=>411,64307=>512,64308=>594,64309=>316,64310=>326, + 64312=>594,64313=>316,64314=>507,64315=>527,64316=>484,64318=>594,64320=>338,64321=>604,64323=>567,64324=>569,64326=>514,64327=>583,64328=>507,64329=>700,64330=>633,64331=>316, + 64332=>563,64333=>527,64334=>569,64335=>577,64336=>243,64337=>273,64338=>771,64339=>788,64340=>276,64341=>243,64342=>771,64343=>788,64344=>276,64345=>243,64346=>771,64347=>788, + 64348=>276,64349=>243,64350=>771,64351=>788,64352=>276,64353=>243,64354=>771,64355=>788,64356=>276,64357=>243,64358=>771,64359=>788,64360=>276,64361=>243,64362=>957,64363=>903, + 64364=>466,64365=>480,64366=>957,64367=>903,64368=>466,64369=>480,64370=>544,64371=>658,64372=>646,64373=>637,64374=>544,64375=>658,64376=>646,64377=>637,64378=>544,64379=>658, + 64380=>646,64381=>637,64382=>544,64383=>658,64384=>646,64385=>637,64386=>430,64387=>458,64388=>430,64389=>458,64390=>430,64391=>458,64392=>430,64393=>458,64394=>421,64395=>436, + 64396=>421,64397=>436,64398=>828,64399=>942,64400=>432,64401=>549,64402=>828,64403=>942,64404=>432,64405=>549,64406=>828,64407=>942,64408=>432,64409=>549,64410=>828,64411=>942, + 64412=>432,64413=>549,64414=>692,64415=>723,64416=>692,64417=>723,64418=>276,64419=>243,64420=>514,64421=>477,64422=>514,64423=>509,64424=>273,64425=>427,64426=>706,64427=>706, + 64428=>686,64429=>686,64430=>550,64431=>461,64432=>550,64433=>461,64467=>757,64468=>733,64469=>432,64470=>549,64471=>470,64472=>466,64473=>470,64474=>466,64475=>470,64476=>466, + 64477=>470,64478=>470,64479=>466,64480=>470,64481=>466,64482=>470,64483=>466,64484=>781,64485=>933,64486=>276,64487=>243,64488=>276,64489=>243,64490=>547,64491=>517,64492=>783, + 64493=>753,64494=>740,64495=>710,64496=>740,64497=>710,64498=>740,64499=>710,64500=>740,64501=>710,64502=>1207,64503=>1177,64504=>517,64505=>1067,64506=>1037,64507=>517,64508=>731, + 64509=>793,64510=>276,64511=>243,64512=>932,64513=>932,64514=>914,64515=>1067,64516=>1077,64517=>935,64518=>935,64519=>935,64520=>917,64521=>1070,64522=>1080,64523=>932,64524=>932, + 64525=>932,64526=>914,64527=>1067,64528=>1077,64529=>932,64530=>914,64531=>1067,64532=>1077,64533=>1305,64534=>1287,64535=>1305,64536=>1287,64537=>1305,64538=>1305,64539=>1287,64540=>1429, + 64541=>1429,64542=>1429,64543=>1411,64544=>1476,64545=>1458,64546=>1476,64547=>1476,64548=>1476,64549=>1458,64550=>1392,64551=>1374,64552=>1374,64553=>1245,64554=>1227,64555=>1245,64556=>1227, + 64557=>1125,64558=>1125,64559=>1125,64560=>1107,64561=>1260,64562=>1270,64563=>1125,64564=>1107,64565=>1260,64566=>1270,64567=>706,64568=>1091,64569=>1091,64570=>1091,64571=>1106,64572=>1073, + 64573=>1226,64574=>1236,64575=>932,64576=>932,64577=>932,64578=>914,64579=>1067,64580=>1077,64581=>1140,64582=>1140,64583=>1140,64584=>1122,64585=>1275,64586=>1285,64587=>932,64588=>932, + 64589=>932,64590=>914,64591=>1067,64592=>1077,64593=>1345,64594=>1327,64595=>1480,64596=>1490,64597=>932,64598=>932,64599=>932,64600=>914,64601=>1067,64602=>1077,64603=>430,64604=>421, + 64605=>731,64606=>296,64607=>300,64608=>300,64609=>300,64610=>300,64611=>300,64612=>680,64613=>680,64614=>884,64615=>967,64616=>1037,64617=>1047,64618=>680,64619=>680,64620=>884, + 64621=>967,64622=>1037,64623=>1047,64624=>680,64625=>680,64626=>884,64627=>967,64628=>1037,64629=>1047,64630=>680,64631=>680,64632=>884,64633=>967,64634=>1037,64635=>1047,64636=>1274, + 64637=>1284,64638=>1274,64639=>1284,64640=>821,64641=>1221,64642=>1188,64643=>1341,64644=>1351,64645=>884,64646=>1037,64647=>1047,64648=>806,64649=>1173,64650=>680,64651=>680,64652=>884, + 64653=>967,64654=>1037,64655=>1047,64656=>793,64657=>680,64658=>680,64659=>884,64660=>967,64661=>1037,64662=>1047,64663=>911,64664=>911,64665=>911,64666=>806,64667=>679,64668=>911, + 64669=>911,64670=>911,64671=>806,64672=>679,64673=>911,64674=>911,64675=>911,64676=>806,64677=>679,64678=>806,64679=>1284,64680=>1179,64681=>1284,64682=>1179,64683=>1284,64684=>1179, + 64685=>1408,64686=>1408,64687=>1408,64688=>1303,64689=>1455,64690=>1455,64691=>1350,64692=>1455,64693=>1455,64694=>1455,64695=>1350,64696=>1371,64697=>1266,64698=>1224,64699=>1119,64700=>1224, + 64701=>1119,64702=>1104,64703=>1104,64704=>1104,64705=>999,64706=>1104,64707=>999,64708=>1070,64709=>1070,64710=>1070,64711=>676,64712=>965,64713=>911,64714=>911,64715=>911,64716=>806, + 64717=>679,64718=>1119,64719=>1119,64720=>1119,64721=>1014,64722=>911,64723=>911,64724=>911,64725=>806,64726=>679,64727=>1324,64728=>1219,64729=>686,64730=>911,64731=>911,64732=>911, + 64733=>806,64734=>679,64735=>776,64736=>649,64737=>776,64738=>649,64739=>776,64740=>649,64741=>776,64742=>649,64743=>1303,64744=>1176,64745=>1303,64746=>1176,64747=>793,64748=>1082, + 64749=>776,64750=>776,64751=>649,64752=>776,64753=>649,64754=>306,64755=>302,64756=>298,64757=>1527,64758=>1537,64759=>1380,64760=>1390,64761=>1380,64762=>1390,64763=>1564,64764=>1574, + 64765=>1564,64766=>1574,64767=>1440,64768=>1450,64769=>1440,64770=>1450,64771=>1440,64772=>1450,64773=>1611,64774=>1621,64775=>1611,64776=>1621,64777=>1429,64778=>1429,64779=>1429,64780=>1411, + 64781=>1207,64782=>1207,64783=>1254,64784=>1254,64785=>1527,64786=>1537,64787=>1348,64788=>1358,64789=>1348,64790=>1358,64791=>1564,64792=>1574,64793=>1564,64794=>1574,64795=>1431,64796=>1441, + 64797=>1431,64798=>1441,64799=>1431,64800=>1441,64801=>1611,64802=>1621,64803=>1611,64804=>1621,64805=>1429,64806=>1429,64807=>1429,64808=>1411,64809=>1207,64810=>1207,64811=>1254,64812=>1254, + 64813=>1408,64814=>1408,64815=>1408,64816=>1303,64817=>1176,64818=>1176,64819=>1266,64820=>1408,64821=>1408,64822=>1408,64823=>1408,64824=>1408,64825=>1408,64826=>1266,64827=>1266,64828=>273, + 64829=>243,64830=>600,64831=>600,64848=>1444,64849=>1541,64850=>1549,64851=>1444,64852=>1444,64853=>1444,64854=>1444,64855=>1444,64856=>1830,64857=>1817,64858=>1975,64859=>1964,64860=>2046, + 64861=>2046,64862=>2202,64863=>1962,64864=>1941,64865=>1941,64866=>1944,64867=>1836,64868=>2114,64869=>2093,64870=>1991,64871=>2049,64872=>1941,64873=>2212,64874=>1962,64875=>1941,64876=>1944, + 64877=>1836,64878=>2249,64879=>2096,64880=>1988,64881=>1925,64882=>1904,64883=>1799,64884=>2070,64885=>1833,64886=>1729,64887=>1652,64888=>1881,64889=>1729,64890=>1892,64891=>1881,64892=>1759, + 64893=>1637,64894=>1670,64895=>1654,64896=>1522,64897=>1686,64898=>1675,64899=>1549,64900=>1541,64901=>1522,64902=>1444,64903=>1436,64904=>1444,64905=>1757,64906=>1652,64907=>1975,64908=>1757, + 64909=>1652,64910=>1757,64911=>1652,64914=>1757,64915=>1857,64916=>1752,64917=>1444,64918=>1675,64919=>1522,64920=>1444,64921=>1675,64922=>1581,64923=>1570,64924=>1417,64925=>1362,64926=>1686, + 64927=>1686,64928=>1675,64929=>1686,64930=>1675,64931=>1581,64932=>1570,64933=>1975,64934=>2069,64935=>1964,64936=>2202,64937=>2259,64938=>2212,64939=>2259,64940=>1686,64941=>1581,64942=>1686, + 64943=>1686,64944=>1581,64945=>1870,64946=>1817,64947=>1686,64948=>1637,64949=>1444,64950=>1892,64951=>1886,64952=>1549,64953=>1975,64954=>1444,64955=>1723,64956=>1522,64957=>1541,64958=>2080, + 64959=>2080,64960=>1975,64961=>1817,64962=>1686,64963=>1499,64964=>1757,64965=>1883,64966=>2212,64967=>1686,65008=>1523,65009=>1172,65010=>1159,65011=>1356,65012=>2111,65013=>2258,65014=>2130, + 65015=>1552,65016=>2046,65017=>1856,65018=>1930,65019=>1070,65056=>450,65057=>450,65058=>450,65059=>450,65072=>1000,65073=>1000,65074=>1000,65075=>1000,65076=>1000,65077=>1000,65078=>1000, + 65079=>1000,65080=>1000,65081=>1000,65082=>1000,65083=>1000,65084=>1000,65085=>1000,65086=>1000,65087=>1000,65088=>1000,65089=>1000,65090=>1000,65091=>1000,65092=>1000,65097=>1000,65098=>1000, + 65099=>1000,65100=>1000,65101=>1000,65102=>1000,65103=>1000,65104=>167,65105=>250,65106=>167,65108=>167,65109=>167,65110=>334,65111=>167,65112=>600,65113=>200,65114=>200,65115=>200, + 65116=>200,65117=>200,65118=>200,65119=>334,65120=>400,65121=>233,65122=>350,65123=>200,65124=>350,65125=>350,65126=>350,65128=>167,65129=>334,65130=>533,65131=>609,65136=>300, + 65137=>298,65138=>296,65140=>298,65142=>300,65143=>298,65144=>300,65145=>302,65146=>298,65147=>296,65148=>306,65149=>306,65150=>154,65151=>154,65152=>529,65153=>243,65154=>273, + 65155=>243,65156=>273,65157=>470,65158=>466,65159=>243,65160=>273,65161=>731,65162=>793,65163=>276,65164=>243,65165=>243,65166=>273,65167=>771,65168=>788,65169=>276,65170=>243, + 65171=>514,65172=>477,65173=>771,65174=>788,65175=>276,65176=>243,65177=>771,65178=>788,65179=>276,65180=>243,65181=>544,65182=>658,65183=>646,65184=>637,65185=>544,65186=>658, + 65187=>646,65188=>637,65189=>544,65190=>658,65191=>646,65192=>637,65193=>430,65194=>458,65195=>430,65196=>458,65197=>421,65198=>436,65199=>421,65200=>436,65201=>1194,65202=>1194, + 65203=>770,65204=>770,65205=>1194,65206=>1194,65207=>770,65208=>770,65209=>1291,65210=>1291,65211=>817,65212=>817,65213=>1291,65214=>1291,65215=>817,65216=>817,65217=>843,65218=>843, + 65219=>733,65220=>733,65221=>843,65222=>843,65223=>733,65224=>733,65225=>594,65226=>556,65227=>586,65228=>554,65229=>594,65230=>556,65231=>586,65232=>554,65233=>957,65234=>903, + 65235=>466,65236=>480,65237=>800,65238=>823,65239=>466,65240=>480,65241=>757,65242=>733,65243=>432,65244=>549,65245=>662,65246=>673,65247=>273,65248=>243,65249=>589,65250=>640, + 65251=>481,65252=>532,65253=>692,65254=>723,65255=>276,65256=>243,65257=>514,65258=>477,65259=>686,65260=>405,65261=>470,65262=>466,65263=>731,65264=>793,65265=>731,65266=>803, + 65267=>276,65268=>243,65269=>551,65270=>603,65271=>551,65272=>603,65273=>551,65274=>603,65275=>551,65276=>603,65281=>1000,65282=>1000,65283=>1000,65284=>1000,65285=>1000,65286=>1000, + 65287=>1000,65288=>1000,65289=>1000,65290=>1000,65291=>1000,65292=>1000,65293=>1000,65294=>1000,65295=>1000,65296=>1000,65297=>1000,65298=>1000,65299=>1000,65300=>1000,65301=>1000,65302=>1000, + 65303=>1000,65304=>1000,65305=>1000,65306=>1000,65307=>1000,65308=>1000,65309=>1000,65310=>1000,65311=>1000,65312=>1000,65313=>1000,65314=>1000,65315=>1000,65316=>1000,65317=>1000,65318=>1000, + 65319=>1000,65320=>1000,65321=>1000,65322=>1000,65323=>1000,65324=>1000,65325=>1000,65326=>1000,65327=>1000,65328=>1000,65329=>1000,65330=>1000,65331=>1000,65332=>1000,65333=>1000,65334=>1000, + 65335=>1000,65336=>1000,65337=>1000,65338=>1000,65339=>1000,65340=>1000,65341=>1000,65342=>1000,65343=>1000,65344=>1000,65345=>1000,65346=>1000,65347=>1000,65348=>1000,65349=>1000,65350=>1000, + 65351=>1000,65352=>1000,65353=>1000,65354=>1000,65355=>1000,65356=>1000,65357=>1000,65358=>1000,65359=>1000,65360=>1000,65361=>1000,65362=>1000,65363=>1000,65364=>1000,65365=>1000,65366=>1000, + 65367=>1000,65368=>1000,65369=>1000,65370=>1000,65371=>1000,65372=>1000,65373=>1000,65374=>1000,65377=>500,65378=>500,65379=>500,65380=>500,65381=>500,65382=>500,65383=>500,65384=>500, + 65385=>500,65386=>500,65387=>500,65388=>500,65389=>500,65390=>500,65391=>500,65392=>500,65393=>500,65394=>500,65395=>500,65396=>500,65397=>500,65398=>500,65399=>500,65400=>500, + 65401=>500,65402=>500,65403=>500,65404=>500,65405=>500,65406=>500,65407=>500,65408=>500,65409=>500,65410=>500,65411=>500,65412=>500,65413=>500,65414=>500,65415=>500,65416=>500, + 65417=>500,65418=>500,65419=>500,65420=>500,65421=>500,65422=>500,65423=>500,65424=>500,65425=>500,65426=>500,65427=>500,65428=>500,65429=>500,65430=>500,65431=>500,65432=>500, + 65433=>500,65434=>500,65435=>500,65436=>500,65437=>500,65438=>500,65439=>500,65440=>500,65441=>500,65442=>500,65443=>500,65444=>500,65445=>500,65446=>500,65447=>500,65448=>500, + 65449=>500,65450=>500,65451=>500,65452=>500,65453=>500,65454=>500,65455=>500,65456=>500,65457=>500,65458=>500,65459=>500,65460=>500,65461=>500,65462=>500,65463=>500,65464=>500, + 65465=>500,65466=>500,65467=>500,65468=>500,65469=>500,65470=>500,65474=>500,65475=>500,65476=>500,65477=>500,65478=>500,65479=>500,65482=>500,65483=>500,65484=>500,65485=>500, + 65486=>500,65487=>500,65490=>500,65491=>500,65492=>500,65493=>500,65494=>500,65495=>500,65498=>500,65499=>500,65500=>500,65504=>1000,65505=>1000,65506=>1000,65507=>1000,65508=>1000, + 65509=>1000,65510=>1000,65512=>500,65513=>500,65514=>500,65515=>500,65516=>500,65517=>500,65518=>500,65532=>1000,65533=>1000,19968=>1000,19969=>1000,19970=>1000,19971=>1000,19972=>1000, + 19973=>1000,19974=>1000,19975=>1000,19976=>1000,19977=>1000,19978=>1000,19979=>1000,19980=>1000,19981=>1000,19982=>1000,19983=>1000,19984=>1000,19985=>1000,19986=>1000,19987=>1000,19988=>1000, + 19989=>1000,19990=>1000,19991=>1000,19992=>1000,19993=>1000,19994=>1000,19995=>1000,19996=>1000,19997=>1000,19998=>1000,19999=>1000,20000=>1000,20001=>1000,20002=>1000,20003=>1000,20004=>1000, + 20005=>1000,20006=>1000,20007=>1000,20008=>1000,20009=>1000,20010=>1000,20011=>1000,20012=>1000,20013=>1000,20014=>1000,20015=>1000,20016=>1000,20017=>1000,20018=>1000,20019=>1000,20020=>1000, + 20021=>1000,20022=>1000,20023=>1000,20024=>1000,20025=>1000,20026=>1000,20027=>1000,20028=>1000,20029=>1000,20030=>1000,20031=>1000,20032=>1000,20033=>1000,20034=>1000,20035=>1000,20036=>1000, + 20037=>1000,20038=>1000,20039=>1000,20040=>1000,20041=>1000,20042=>1000,20043=>1000,20044=>1000,20045=>1000,20046=>1000,20047=>1000,20048=>1000,20049=>1000,20050=>1000,20051=>1000,20052=>1000, + 20053=>1000,20054=>1000,20055=>1000,20056=>1000,20057=>1000,20058=>1000,20059=>1000,20060=>1000,20061=>1000,20062=>1000,20063=>1000,20064=>1000,20065=>1000,20066=>1000,20067=>1000,20068=>1000, + 20069=>1000,20070=>1000,20071=>1000,20072=>1000,20073=>1000,20074=>1000,20075=>1000,20076=>1000,20077=>1000,20078=>1000,20079=>1000,20080=>1000,20081=>1000,20082=>1000,20083=>1000,20084=>1000, + 20085=>1000,20086=>1000,20087=>1000,20088=>1000,20089=>1000,20090=>1000,20091=>1000,20092=>1000,20093=>1000,20094=>1000,20095=>1000,20096=>1000,20097=>1000,20098=>1000,20099=>1000,20100=>1000, + 20101=>1000,20102=>1000,20103=>1000,20104=>1000,20105=>1000,20106=>1000,20107=>1000,20108=>1000,20109=>1000,20110=>1000,20111=>1000,20112=>1000,20113=>1000,20114=>1000,20115=>1000,20116=>1000, + 20117=>1000,20118=>1000,20119=>1000,20120=>1000,20121=>1000,20122=>1000,20123=>1000,20124=>1000,20125=>1000,20126=>1000,20127=>1000,20128=>1000,20129=>1000,20130=>1000,20131=>1000,20132=>1000, + 20133=>1000,20134=>1000,20135=>1000,20136=>1000,20137=>1000,20138=>1000,20139=>1000,20140=>1000,20141=>1000,20142=>1000,20143=>1000,20144=>1000,20145=>1000,20146=>1000,20147=>1000,20148=>1000, + 20149=>1000,20150=>1000,20151=>1000,20152=>1000,20153=>1000,20154=>1000,20155=>1000,20156=>1000,20157=>1000,20158=>1000,20159=>1000,20160=>1000,20161=>1000,20162=>1000,20163=>1000,20164=>1000, + 20165=>1000,20166=>1000,20167=>1000,20168=>1000,20169=>1000,20170=>1000,20171=>1000,20172=>1000,20173=>1000,20174=>1000,20175=>1000,20176=>1000,20177=>1000,20178=>1000,20179=>1000,20180=>1000, + 20181=>1000,20182=>1000,20183=>1000,20184=>1000,20185=>1000,20186=>1000,20187=>1000,20188=>1000,20189=>1000,20190=>1000,20191=>1000,20192=>1000,20193=>1000,20194=>1000,20195=>1000,20196=>1000, + 20197=>1000,20198=>1000,20199=>1000,20200=>1000,20201=>1000,20202=>1000,20203=>1000,20204=>1000,20205=>1000,20206=>1000,20207=>1000,20208=>1000,20209=>1000,20210=>1000,20211=>1000,20212=>1000, + 20213=>1000,20214=>1000,20215=>1000,20216=>1000,20217=>1000,20218=>1000,20219=>1000,20220=>1000,20221=>1000,20222=>1000,20223=>1000,20224=>1000,20225=>1000,20226=>1000,20227=>1000,20228=>1000, + 20229=>1000,20230=>1000,20231=>1000,20232=>1000,20233=>1000,20234=>1000,20235=>1000,20236=>1000,20237=>1000,20238=>1000,20239=>1000,20240=>1000,20241=>1000,20242=>1000,20243=>1000,20244=>1000, + 20245=>1000,20246=>1000,20247=>1000,20248=>1000,20249=>1000,20250=>1000,20251=>1000,20252=>1000,20253=>1000,20254=>1000,20255=>1000,20256=>1000,20257=>1000,20258=>1000,20259=>1000,20260=>1000, + 20261=>1000,20262=>1000,20263=>1000,20264=>1000,20265=>1000,20266=>1000,20267=>1000,20268=>1000,20269=>1000,20270=>1000,20271=>1000,20272=>1000,20273=>1000,20274=>1000,20275=>1000,20276=>1000, + 20277=>1000,20278=>1000,20279=>1000,20280=>1000,20281=>1000,20282=>1000,20283=>1000,20284=>1000,20285=>1000,20286=>1000,20287=>1000,20288=>1000,20289=>1000,20290=>1000,20291=>1000,20292=>1000, + 20293=>1000,20294=>1000,20295=>1000,20296=>1000,20297=>1000,20298=>1000,20299=>1000,20300=>1000,20301=>1000,20302=>1000,20303=>1000,20304=>1000,20305=>1000,20306=>1000,20307=>1000,20308=>1000, + 20309=>1000,20310=>1000,20311=>1000,20312=>1000,20313=>1000,20314=>1000,20315=>1000,20316=>1000,20317=>1000,20318=>1000,20319=>1000,20320=>1000,20321=>1000,20322=>1000,20323=>1000,20324=>1000, + 20325=>1000,20326=>1000,20327=>1000,20328=>1000,20329=>1000,20330=>1000,20331=>1000,20332=>1000,20333=>1000,20334=>1000,20335=>1000,20336=>1000,20337=>1000,20338=>1000,20339=>1000,20340=>1000, + 20341=>1000,20342=>1000,20343=>1000,20344=>1000,20345=>1000,20346=>1000,20347=>1000,20348=>1000,20349=>1000,20350=>1000,20351=>1000,20352=>1000,20353=>1000,20354=>1000,20355=>1000,20356=>1000, + 20357=>1000,20358=>1000,20359=>1000,20360=>1000,20361=>1000,20362=>1000,20363=>1000,20364=>1000,20365=>1000,20366=>1000,20367=>1000,20368=>1000,20369=>1000,20370=>1000,20371=>1000,20372=>1000, + 20373=>1000,20374=>1000,20375=>1000,20376=>1000,20377=>1000,20378=>1000,20379=>1000,20380=>1000,20381=>1000,20382=>1000,20383=>1000,20384=>1000,20385=>1000,20386=>1000,20387=>1000,20388=>1000, + 20389=>1000,20390=>1000,20391=>1000,20392=>1000,20393=>1000,20394=>1000,20395=>1000,20396=>1000,20397=>1000,20398=>1000,20399=>1000,20400=>1000,20401=>1000,20402=>1000,20403=>1000,20404=>1000, + 20405=>1000,20406=>1000,20407=>1000,20408=>1000,20409=>1000,20410=>1000,20411=>1000,20412=>1000,20413=>1000,20414=>1000,20415=>1000,20416=>1000,20417=>1000,20418=>1000,20419=>1000,20420=>1000, + 20421=>1000,20422=>1000,20423=>1000,20424=>1000,20425=>1000,20426=>1000,20427=>1000,20428=>1000,20429=>1000,20430=>1000,20431=>1000,20432=>1000,20433=>1000,20434=>1000,20435=>1000,20436=>1000, + 20437=>1000,20438=>1000,20439=>1000,20440=>1000,20441=>1000,20442=>1000,20443=>1000,20444=>1000,20445=>1000,20446=>1000,20447=>1000,20448=>1000,20449=>1000,20450=>1000,20451=>1000,20452=>1000, + 20453=>1000,20454=>1000,20455=>1000,20456=>1000,20457=>1000,20458=>1000,20459=>1000,20460=>1000,20461=>1000,20462=>1000,20463=>1000,20464=>1000,20465=>1000,20466=>1000,20467=>1000,20468=>1000, + 20469=>1000,20470=>1000,20471=>1000,20472=>1000,20473=>1000,20474=>1000,20475=>1000,20476=>1000,20477=>1000,20478=>1000,20479=>1000,20480=>1000,20481=>1000,20482=>1000,20483=>1000,20484=>1000, + 20485=>1000,20486=>1000,20487=>1000,20488=>1000,20489=>1000,20490=>1000,20491=>1000,20492=>1000,20493=>1000,20494=>1000,20495=>1000,20496=>1000,20497=>1000,20498=>1000,20499=>1000,20500=>1000, + 20501=>1000,20502=>1000,20503=>1000,20504=>1000,20505=>1000,20506=>1000,20507=>1000,20508=>1000,20509=>1000,20510=>1000,20511=>1000,20512=>1000,20513=>1000,20514=>1000,20515=>1000,20516=>1000, + 20517=>1000,20518=>1000,20519=>1000,20520=>1000,20521=>1000,20522=>1000,20523=>1000,20524=>1000,20525=>1000,20526=>1000,20527=>1000,20528=>1000,20529=>1000,20530=>1000,20531=>1000,20532=>1000, + 20533=>1000,20534=>1000,20535=>1000,20536=>1000,20537=>1000,20538=>1000,20539=>1000,20540=>1000,20541=>1000,20542=>1000,20543=>1000,20544=>1000,20545=>1000,20546=>1000,20547=>1000,20548=>1000, + 20549=>1000,20550=>1000,20551=>1000,20552=>1000,20553=>1000,20554=>1000,20555=>1000,20556=>1000,20557=>1000,20558=>1000,20559=>1000,20560=>1000,20561=>1000,20562=>1000,20563=>1000,20564=>1000, + 20565=>1000,20566=>1000,20567=>1000,20568=>1000,20569=>1000,20570=>1000,20571=>1000,20572=>1000,20573=>1000,20574=>1000,20575=>1000,20576=>1000,20577=>1000,20578=>1000,20579=>1000,20580=>1000, + 20581=>1000,20582=>1000,20583=>1000,20584=>1000,20585=>1000,20586=>1000,20587=>1000,20588=>1000,20589=>1000,20590=>1000,20591=>1000,20592=>1000,20593=>1000,20594=>1000,20595=>1000,20596=>1000, + 20597=>1000,20598=>1000,20599=>1000,20600=>1000,20601=>1000,20602=>1000,20603=>1000,20604=>1000,20605=>1000,20606=>1000,20607=>1000,20608=>1000,20609=>1000,20610=>1000,20611=>1000,20612=>1000, + 20613=>1000,20614=>1000,20615=>1000,20616=>1000,20617=>1000,20618=>1000,20619=>1000,20620=>1000,20621=>1000,20622=>1000,20623=>1000,20624=>1000,20625=>1000,20626=>1000,20627=>1000,20628=>1000, + 20629=>1000,20630=>1000,20631=>1000,20632=>1000,20633=>1000,20634=>1000,20635=>1000,20636=>1000,20637=>1000,20638=>1000,20639=>1000,20640=>1000,20641=>1000,20642=>1000,20643=>1000,20644=>1000, + 20645=>1000,20646=>1000,20647=>1000,20648=>1000,20649=>1000,20650=>1000,20651=>1000,20652=>1000,20653=>1000,20654=>1000,20655=>1000,20656=>1000,20657=>1000,20658=>1000,20659=>1000,20660=>1000, + 20661=>1000,20662=>1000,20663=>1000,20664=>1000,20665=>1000,20666=>1000,20667=>1000,20668=>1000,20669=>1000,20670=>1000,20671=>1000,20672=>1000,20673=>1000,20674=>1000,20675=>1000,20676=>1000, + 20677=>1000,20678=>1000,20679=>1000,20680=>1000,20681=>1000,20682=>1000,20683=>1000,20684=>1000,20685=>1000,20686=>1000,20687=>1000,20688=>1000,20689=>1000,20690=>1000,20691=>1000,20692=>1000, + 20693=>1000,20694=>1000,20695=>1000,20696=>1000,20697=>1000,20698=>1000,20699=>1000,20700=>1000,20701=>1000,20702=>1000,20703=>1000,20704=>1000,20705=>1000,20706=>1000,20707=>1000,20708=>1000, + 20709=>1000,20710=>1000,20711=>1000,20712=>1000,20713=>1000,20714=>1000,20715=>1000,20716=>1000,20717=>1000,20718=>1000,20719=>1000,20720=>1000,20721=>1000,20722=>1000,20723=>1000,20724=>1000, + 20725=>1000,20726=>1000,20727=>1000,20728=>1000,20729=>1000,20730=>1000,20731=>1000,20732=>1000,20733=>1000,20734=>1000,20735=>1000,20736=>1000,20737=>1000,20738=>1000,20739=>1000,20740=>1000, + 20741=>1000,20742=>1000,20743=>1000,20744=>1000,20745=>1000,20746=>1000,20747=>1000,20748=>1000,20749=>1000,20750=>1000,20751=>1000,20752=>1000,20753=>1000,20754=>1000,20755=>1000,20756=>1000, + 20757=>1000,20758=>1000,20759=>1000,20760=>1000,20761=>1000,20762=>1000,20763=>1000,20764=>1000,20765=>1000,20766=>1000,20767=>1000,20768=>1000,20769=>1000,20770=>1000,20771=>1000,20772=>1000, + 20773=>1000,20774=>1000,20775=>1000,20776=>1000,20777=>1000,20778=>1000,20779=>1000,20780=>1000,20781=>1000,20782=>1000,20783=>1000,20784=>1000,20785=>1000,20786=>1000,20787=>1000,20788=>1000, + 20789=>1000,20790=>1000,20791=>1000,20792=>1000,20793=>1000,20794=>1000,20795=>1000,20796=>1000,20797=>1000,20798=>1000,20799=>1000,20800=>1000,20801=>1000,20802=>1000,20803=>1000,20804=>1000, + 20805=>1000,20806=>1000,20807=>1000,20808=>1000,20809=>1000,20810=>1000,20811=>1000,20812=>1000,20813=>1000,20814=>1000,20815=>1000,20816=>1000,20817=>1000,20818=>1000,20819=>1000,20820=>1000, + 20821=>1000,20822=>1000,20823=>1000,20824=>1000,20825=>1000,20826=>1000,20827=>1000,20828=>1000,20829=>1000,20830=>1000,20831=>1000,20832=>1000,20833=>1000,20834=>1000,20835=>1000,20836=>1000, + 20837=>1000,20838=>1000,20839=>1000,20840=>1000,20841=>1000,20842=>1000,20843=>1000,20844=>1000,20845=>1000,20846=>1000,20847=>1000,20848=>1000,20849=>1000,20850=>1000,20851=>1000,20852=>1000, + 20853=>1000,20854=>1000,20855=>1000,20856=>1000,20857=>1000,20858=>1000,20859=>1000,20860=>1000,20861=>1000,20862=>1000,20863=>1000,20864=>1000,20865=>1000,20866=>1000,20867=>1000,20868=>1000, + 20869=>1000,20870=>1000,20871=>1000,20872=>1000,20873=>1000,20874=>1000,20875=>1000,20876=>1000,20877=>1000,20878=>1000,20879=>1000,20880=>1000,20881=>1000,20882=>1000,20883=>1000,20884=>1000, + 20885=>1000,20886=>1000,20887=>1000,20888=>1000,20889=>1000,20890=>1000,20891=>1000,20892=>1000,20893=>1000,20894=>1000,20895=>1000,20896=>1000,20897=>1000,20898=>1000,20899=>1000,20900=>1000, + 20901=>1000,20902=>1000,20903=>1000,20904=>1000,20905=>1000,20906=>1000,20907=>1000,20908=>1000,20909=>1000,20910=>1000,20911=>1000,20912=>1000,20913=>1000,20914=>1000,20915=>1000,20916=>1000, + 20917=>1000,20918=>1000,20919=>1000,20920=>1000,20921=>1000,20922=>1000,20923=>1000,20924=>1000,20925=>1000,20926=>1000,20927=>1000,20928=>1000,20929=>1000,20930=>1000,20931=>1000,20932=>1000, + 20933=>1000,20934=>1000,20935=>1000,20936=>1000,20937=>1000,20938=>1000,20939=>1000,20940=>1000,20941=>1000,20942=>1000,20943=>1000,20944=>1000,20945=>1000,20946=>1000,20947=>1000,20948=>1000, + 20949=>1000,20950=>1000,20951=>1000,20952=>1000,20953=>1000,20954=>1000,20955=>1000,20956=>1000,20957=>1000,20958=>1000,20959=>1000,20960=>1000,20961=>1000,20962=>1000,20963=>1000,20964=>1000, + 20965=>1000,20966=>1000,20967=>1000,20968=>1000,20969=>1000,20970=>1000,20971=>1000,20972=>1000,20973=>1000,20974=>1000,20975=>1000,20976=>1000,20977=>1000,20978=>1000,20979=>1000,20980=>1000, + 20981=>1000,20982=>1000,20983=>1000,20984=>1000,20985=>1000,20986=>1000,20987=>1000,20988=>1000,20989=>1000,20990=>1000,20991=>1000,20992=>1000,20993=>1000,20994=>1000,20995=>1000,20996=>1000, + 20997=>1000,20998=>1000,20999=>1000,21000=>1000,21001=>1000,21002=>1000,21003=>1000,21004=>1000,21005=>1000,21006=>1000,21007=>1000,21008=>1000,21009=>1000,21010=>1000,21011=>1000,21012=>1000, + 21013=>1000,21014=>1000,21015=>1000,21016=>1000,21017=>1000,21018=>1000,21019=>1000,21020=>1000,21021=>1000,21022=>1000,21023=>1000,21024=>1000,21025=>1000,21026=>1000,21027=>1000,21028=>1000, + 21029=>1000,21030=>1000,21031=>1000,21032=>1000,21033=>1000,21034=>1000,21035=>1000,21036=>1000,21037=>1000,21038=>1000,21039=>1000,21040=>1000,21041=>1000,21042=>1000,21043=>1000,21044=>1000, + 21045=>1000,21046=>1000,21047=>1000,21048=>1000,21049=>1000,21050=>1000,21051=>1000,21052=>1000,21053=>1000,21054=>1000,21055=>1000,21056=>1000,21057=>1000,21058=>1000,21059=>1000,21060=>1000, + 21061=>1000,21062=>1000,21063=>1000,21064=>1000,21065=>1000,21066=>1000,21067=>1000,21068=>1000,21069=>1000,21070=>1000,21071=>1000,21072=>1000,21073=>1000,21074=>1000,21075=>1000,21076=>1000, + 21077=>1000,21078=>1000,21079=>1000,21080=>1000,21081=>1000,21082=>1000,21083=>1000,21084=>1000,21085=>1000,21086=>1000,21087=>1000,21088=>1000,21089=>1000,21090=>1000,21091=>1000,21092=>1000, + 21093=>1000,21094=>1000,21095=>1000,21096=>1000,21097=>1000,21098=>1000,21099=>1000,21100=>1000,21101=>1000,21102=>1000,21103=>1000,21104=>1000,21105=>1000,21106=>1000,21107=>1000,21108=>1000, + 21109=>1000,21110=>1000,21111=>1000,21112=>1000,21113=>1000,21114=>1000,21115=>1000,21116=>1000,21117=>1000,21118=>1000,21119=>1000,21120=>1000,21121=>1000,21122=>1000,21123=>1000,21124=>1000, + 21125=>1000,21126=>1000,21127=>1000,21128=>1000,21129=>1000,21130=>1000,21131=>1000,21132=>1000,21133=>1000,21134=>1000,21135=>1000,21136=>1000,21137=>1000,21138=>1000,21139=>1000,21140=>1000, + 21141=>1000,21142=>1000,21143=>1000,21144=>1000,21145=>1000,21146=>1000,21147=>1000,21148=>1000,21149=>1000,21150=>1000,21151=>1000,21152=>1000,21153=>1000,21154=>1000,21155=>1000,21156=>1000, + 21157=>1000,21158=>1000,21159=>1000,21160=>1000,21161=>1000,21162=>1000,21163=>1000,21164=>1000,21165=>1000,21166=>1000,21167=>1000,21168=>1000,21169=>1000,21170=>1000,21171=>1000,21172=>1000, + 21173=>1000,21174=>1000,21175=>1000,21176=>1000,21177=>1000,21178=>1000,21179=>1000,21180=>1000,21181=>1000,21182=>1000,21183=>1000,21184=>1000,21185=>1000,21186=>1000,21187=>1000,21188=>1000, + 21189=>1000,21190=>1000,21191=>1000,21192=>1000,21193=>1000,21194=>1000,21195=>1000,21196=>1000,21197=>1000,21198=>1000,21199=>1000,21200=>1000,21201=>1000,21202=>1000,21203=>1000,21204=>1000, + 21205=>1000,21206=>1000,21207=>1000,21208=>1000,21209=>1000,21210=>1000,21211=>1000,21212=>1000,21213=>1000,21214=>1000,21215=>1000,21216=>1000,21217=>1000,21218=>1000,21219=>1000,21220=>1000, + 21221=>1000,21222=>1000,21223=>1000,21224=>1000,21225=>1000,21226=>1000,21227=>1000,21228=>1000,21229=>1000,21230=>1000,21231=>1000,21232=>1000,21233=>1000,21234=>1000,21235=>1000,21236=>1000, + 21237=>1000,21238=>1000,21239=>1000,21240=>1000,21241=>1000,21242=>1000,21243=>1000,21244=>1000,21245=>1000,21246=>1000,21247=>1000,21248=>1000,21249=>1000,21250=>1000,21251=>1000,21252=>1000, + 21253=>1000,21254=>1000,21255=>1000,21256=>1000,21257=>1000,21258=>1000,21259=>1000,21260=>1000,21261=>1000,21262=>1000,21263=>1000,21264=>1000,21265=>1000,21266=>1000,21267=>1000,21268=>1000, + 21269=>1000,21270=>1000,21271=>1000,21272=>1000,21273=>1000,21274=>1000,21275=>1000,21276=>1000,21277=>1000,21278=>1000,21279=>1000,21280=>1000,21281=>1000,21282=>1000,21283=>1000,21284=>1000, + 21285=>1000,21286=>1000,21287=>1000,21288=>1000,21289=>1000,21290=>1000,21291=>1000,21292=>1000,21293=>994,21294=>1000,21295=>1000,21296=>1000,21297=>1000,21298=>1000,21299=>1000,21300=>1000, + 21301=>1000,21302=>1000,21303=>1000,21304=>1000,21305=>1000,21306=>1000,21307=>1000,21308=>1000,21309=>1000,21310=>1000,21311=>1000,21312=>1000,21313=>1000,21314=>1000,21315=>1000,21316=>1000, + 21317=>1000,21318=>1000,21319=>1000,21320=>1000,21321=>1000,21322=>1000,21323=>1000,21324=>1000,21325=>1000,21326=>1000,21327=>1000,21328=>1000,21329=>1000,21330=>1000,21331=>1000,21332=>1000, + 21333=>1000,21334=>1000,21335=>1000,21336=>1000,21337=>1000,21338=>1000,21339=>1000,21340=>1000,21341=>1000,21342=>1000,21343=>1000,21344=>1000,21345=>1000,21346=>1000,21347=>1000,21348=>1000, + 21349=>1000,21350=>1000,21351=>1000,21352=>1000,21353=>1000,21354=>1000,21355=>1000,21356=>1000,21357=>1000,21358=>1000,21359=>1000,21360=>1000,21361=>1000,21362=>1000,21363=>1000,21364=>1000, + 21365=>1000,21366=>1000,21367=>1000,21368=>1000,21369=>1000,21370=>1000,21371=>1000,21372=>1000,21373=>1000,21374=>1000,21375=>1000,21376=>1000,21377=>1000,21378=>1000,21379=>1000,21380=>1000, + 21381=>1000,21382=>1000,21383=>1000,21384=>1000,21385=>1000,21386=>1000,21387=>1000,21388=>1000,21389=>1000,21390=>1000,21391=>1000,21392=>1000,21393=>1000,21394=>1000,21395=>1000,21396=>1000, + 21397=>1000,21398=>1000,21399=>1000,21400=>1000,21401=>1000,21402=>1000,21403=>1000,21404=>1000,21405=>1000,21406=>1000,21407=>1000,21408=>1000,21409=>1000,21410=>1000,21411=>1000,21412=>1000, + 21413=>1000,21414=>1000,21415=>1000,21416=>1000,21417=>1000,21418=>1000,21419=>1000,21420=>1000,21421=>1000,21422=>1000,21423=>1000,21424=>1000,21425=>1000,21426=>1000,21427=>1000,21428=>1000, + 21429=>1000,21430=>1000,21431=>1000,21432=>1000,21433=>1000,21434=>1000,21435=>1000,21436=>1000,21437=>1000,21438=>1000,21439=>1000,21440=>1000,21441=>1000,21442=>1000,21443=>1000,21444=>1000, + 21445=>1000,21446=>1000,21447=>1000,21448=>1000,21449=>1000,21450=>1000,21451=>1000,21452=>1000,21453=>1000,21454=>1000,21455=>1000,21456=>1000,21457=>1000,21458=>1000,21459=>1000,21460=>1000, + 21461=>1000,21462=>1000,21463=>1000,21464=>1000,21465=>1000,21466=>1000,21467=>1000,21468=>1000,21469=>1000,21470=>1000,21471=>1000,21472=>1000,21473=>1000,21474=>1000,21475=>1000,21476=>1000, + 21477=>1000,21478=>1000,21479=>1000,21480=>1000,21481=>1000,21482=>1000,21483=>1000,21484=>1000,21485=>1000,21486=>1000,21487=>1000,21488=>1000,21489=>1000,21490=>1000,21491=>1000,21492=>1000, + 21493=>1000,21494=>1000,21495=>1000,21496=>1000,21497=>1000,21498=>1000,21499=>1000,21500=>1000,21501=>1000,21502=>1000,21503=>1000,21504=>1000,21505=>1000,21506=>1000,21507=>1000,21508=>1000, + 21509=>1000,21510=>1000,21511=>1000,21512=>1000,21513=>1000,21514=>1000,21515=>1000,21516=>1000,21517=>1000,21518=>1000,21519=>1000,21520=>1000,21521=>1000,21522=>1000,21523=>1000,21524=>1000, + 21525=>1000,21526=>1000,21527=>1000,21528=>1000,21529=>1000,21530=>1000,21531=>1000,21532=>1000,21533=>1000,21534=>1000,21535=>1000,21536=>1000,21537=>1000,21538=>1000,21539=>1000,21540=>1000, + 21541=>1000,21542=>1000,21543=>1000,21544=>1000,21545=>1000,21546=>1000,21547=>1000,21548=>1000,21549=>1000,21550=>1000,21551=>1000,21552=>1000,21553=>1000,21554=>1000,21555=>1000,21556=>1000, + 21557=>1000,21558=>1000,21559=>1000,21560=>1000,21561=>1000,21562=>1000,21563=>1000,21564=>1000,21565=>1000,21566=>1000,21567=>1000,21568=>1000,21569=>1000,21570=>1000,21571=>1000,21572=>1000, + 21573=>1000,21574=>1000,21575=>1000,21576=>1000,21577=>1000,21578=>1000,21579=>1000,21580=>1000,21581=>1000,21582=>1000,21583=>1000,21584=>1000,21585=>1000,21586=>1000,21587=>1000,21588=>1000, + 21589=>1000,21590=>1000,21591=>1000,21592=>1000,21593=>1000,21594=>1000,21595=>1000,21596=>1000,21597=>1000,21598=>1000,21599=>1000,21600=>1000,21601=>1000,21602=>1000,21603=>1000,21604=>1000, + 21605=>1000,21606=>1000,21607=>1000,21608=>1000,21609=>1000,21610=>1000,21611=>1000,21612=>1000,21613=>1000,21614=>1000,21615=>1000,21616=>1000,21617=>1000,21618=>1000,21619=>1000,21620=>1000, + 21621=>1000,21622=>1000,21623=>1000,21624=>1000,21625=>1000,21626=>1000,21627=>1000,21628=>1000,21629=>1000,21630=>1000,21631=>1000,21632=>1000,21633=>1000,21634=>1000,21635=>1000,21636=>1000, + 21637=>1000,21638=>1000,21639=>1000,21640=>1000,21641=>1000,21642=>1000,21643=>1000,21644=>1000,21645=>1000,21646=>1000,21647=>1000,21648=>1000,21649=>1000,21650=>1000,21651=>1000,21652=>1000, + 21653=>1000,21654=>1000,21655=>1000,21656=>1000,21657=>1000,21658=>1000,21659=>1000,21660=>1000,21661=>1000,21662=>1000,21663=>1000,21664=>1000,21665=>1000,21666=>1000,21667=>1000,21668=>1000, + 21669=>1000,21670=>1000,21671=>1000,21672=>1000,21673=>1000,21674=>1000,21675=>1000,21676=>1000,21677=>1000,21678=>1000,21679=>1000,21680=>1000,21681=>1000,21682=>1000,21683=>1000,21684=>1000, + 21685=>1000,21686=>1000,21687=>1000,21688=>1000,21689=>1000,21690=>1000,21691=>1000,21692=>1000,21693=>1000,21694=>1000,21695=>1000,21696=>1000,21697=>1000,21698=>1000,21699=>1000,21700=>1000, + 21701=>1000,21702=>1000,21703=>1000,21704=>1000,21705=>1000,21706=>1000,21707=>1000,21708=>1000,21709=>1000,21710=>1000,21711=>1000,21712=>1000,21713=>1000,21714=>1000,21715=>1000,21716=>1000, + 21717=>1000,21718=>1000,21719=>1000,21720=>1000,21721=>1000,21722=>1000,21723=>1000,21724=>1000,21725=>1000,21726=>1000,21727=>1000,21728=>1000,21729=>1000,21730=>1000,21731=>1000,21732=>1000, + 21733=>1000,21734=>1000,21735=>1000,21736=>1000,21737=>1000,21738=>1000,21739=>1000,21740=>1000,21741=>1000,21742=>1000,21743=>1000,21744=>1000,21745=>1000,21746=>1000,21747=>1000,21748=>1000, + 21749=>1000,21750=>1000,21751=>1000,21752=>1000,21753=>1000,21754=>1000,21755=>1000,21756=>1000,21757=>1000,21758=>1000,21759=>1000,21760=>1000,21761=>1000,21762=>1000,21763=>1000,21764=>1000, + 21765=>1000,21766=>1000,21767=>1000,21768=>1000,21769=>1000,21770=>1000,21771=>1000,21772=>1000,21773=>1000,21774=>1000,21775=>1000,21776=>1000,21777=>1000,21778=>1000,21779=>1000,21780=>1000, + 21781=>1000,21782=>1000,21783=>1000,21784=>1000,21785=>1000,21786=>1000,21787=>1000,21788=>1000,21789=>1000,21790=>1000,21791=>1000,21792=>1000,21793=>1000,21794=>1000,21795=>1000,21796=>1000, + 21797=>1000,21798=>1000,21799=>1000,21800=>1000,21801=>1000,21802=>1000,21803=>1000,21804=>1000,21805=>1000,21806=>1000,21807=>1000,21808=>1000,21809=>1000,21810=>1000,21811=>1000,21812=>1000, + 21813=>1000,21814=>1000,21815=>1000,21816=>1000,21817=>1000,21818=>1000,21819=>1000,21820=>1000,21821=>1000,21822=>1000,21823=>1000,21824=>1000,21825=>1000,21826=>1000,21827=>1000,21828=>1000, + 21829=>1000,21830=>1000,21831=>1000,21832=>1000,21833=>1000,21834=>1000,21835=>1000,21836=>1000,21837=>1000,21838=>1000,21839=>1000,21840=>1000,21841=>1000,21842=>1000,21843=>1000,21844=>1000, + 21845=>1000,21846=>1000,21847=>1000,21848=>1000,21849=>1000,21850=>1000,21851=>1000,21852=>1000,21853=>1000,21854=>1000,21855=>1000,21856=>1000,21857=>1000,21858=>1000,21859=>1000,21860=>1000, + 21861=>1000,21862=>1000,21863=>1000,21864=>1000,21865=>1000,21866=>1000,21867=>1000,21868=>1000,21869=>1000,21870=>1000,21871=>1000,21872=>1000,21873=>1000,21874=>1000,21875=>1000,21876=>1000, + 21877=>1000,21878=>1000,21879=>1000,21880=>1000,21881=>1000,21882=>1000,21883=>1000,21884=>1000,21885=>1000,21886=>1000,21887=>1000,21888=>1000,21889=>1000,21890=>1000,21891=>1000,21892=>1000, + 21893=>1000,21894=>1000,21895=>1000,21896=>1000,21897=>1000,21898=>1000,21899=>1000,21900=>1000,21901=>1000,21902=>1000,21903=>1000,21904=>1000,21905=>1000,21906=>1000,21907=>1000,21908=>1000, + 21909=>1000,21910=>1000,21911=>1000,21912=>1000,21913=>1000,21914=>1000,21915=>1000,21916=>1000,21917=>1000,21918=>1000,21919=>1000,21920=>1000,21921=>1000,21922=>1000,21923=>1000,21924=>1000, + 21925=>1000,21926=>1000,21927=>1000,21928=>1000,21929=>1000,21930=>1000,21931=>1000,21932=>1000,21933=>1000,21934=>1000,21935=>1000,21936=>1000,21937=>1000,21938=>1000,21939=>1000,21940=>1000, + 21941=>1000,21942=>1000,21943=>1000,21944=>1000,21945=>1000,21946=>1000,21947=>1000,21948=>1000,21949=>1000,21950=>1000,21951=>1000,21952=>1000,21953=>1000,21954=>1000,21955=>1000,21956=>1000, + 21957=>1000,21958=>1000,21959=>1000,21960=>1000,21961=>1000,21962=>1000,21963=>1000,21964=>1000,21965=>1000,21966=>1000,21967=>1000,21968=>1000,21969=>1000,21970=>1000,21971=>1000,21972=>1000, + 21973=>1000,21974=>1000,21975=>1000,21976=>1000,21977=>1000,21978=>1000,21979=>1000,21980=>1000,21981=>1000,21982=>1000,21983=>1000,21984=>1000,21985=>1000,21986=>1000,21987=>1000,21988=>1000, + 21989=>1000,21990=>1000,21991=>1000,21992=>1000,21993=>1000,21994=>1000,21995=>1000,21996=>1000,21997=>1000,21998=>1000,21999=>1000,22000=>1000,22001=>1000,22002=>1000,22003=>1000,22004=>1000, + 22005=>1000,22006=>1000,22007=>1000,22008=>1000,22009=>1000,22010=>1000,22011=>1000,22012=>1000,22013=>1000,22014=>1000,22015=>1000,22016=>1000,22017=>1000,22018=>1000,22019=>1000,22020=>1000, + 22021=>1000,22022=>1000,22023=>1000,22024=>1000,22025=>1000,22026=>1000,22027=>1000,22028=>1000,22029=>1000,22030=>1000,22031=>1000,22032=>1000,22033=>1000,22034=>1000,22035=>1000,22036=>1000, + 22037=>1000,22038=>1000,22039=>1000,22040=>1000,22041=>1000,22042=>1000,22043=>1000,22044=>1000,22045=>1000,22046=>1000,22047=>1000,22048=>1000,22049=>1000,22050=>1000,22051=>1000,22052=>1000, + 22053=>1000,22054=>1000,22055=>1000,22056=>1000,22057=>1000,22058=>1000,22059=>1000,22060=>1000,22061=>1000,22062=>1000,22063=>1000,22064=>1000,22065=>1000,22066=>1000,22067=>1000,22068=>1000, + 22069=>1000,22070=>1000,22071=>1000,22072=>1000,22073=>1000,22074=>1000,22075=>1000,22076=>1000,22077=>1000,22078=>1000,22079=>1000,22080=>1000,22081=>1000,22082=>1000,22083=>1000,22084=>1000, + 22085=>1000,22086=>1000,22087=>1000,22088=>1000,22089=>1000,22090=>1000,22091=>1000,22092=>1000,22093=>1000,22094=>1000,22095=>1000,22096=>1000,22097=>1000,22098=>1000,22099=>1000,22100=>1000, + 22101=>1000,22102=>1000,22103=>1000,22104=>1000,22105=>1000,22106=>1000,22107=>1000,22108=>1000,22109=>1000,22110=>1000,22111=>1000,22112=>1000,22113=>1000,22114=>1000,22115=>1000,22116=>1000, + 22117=>1000,22118=>1000,22119=>1000,22120=>1000,22121=>1000,22122=>1000,22123=>1000,22124=>1000,22125=>1000,22126=>1000,22127=>1000,22128=>1000,22129=>1000,22130=>1000,22131=>1000,22132=>1000, + 22133=>1000,22134=>1000,22135=>1000,22136=>1000,22137=>1000,22138=>1000,22139=>1000,22140=>1000,22141=>1000,22142=>1000,22143=>1000,22144=>1000,22145=>1000,22146=>1000,22147=>1000,22148=>1000, + 22149=>1000,22150=>1000,22151=>1000,22152=>1000,22153=>1000,22154=>1000,22155=>1000,22156=>1000,22157=>1000,22158=>1000,22159=>1000,22160=>1000,22161=>1000,22162=>1000,22163=>1000,22164=>1000, + 22165=>1000,22166=>1000,22167=>1000,22168=>1000,22169=>1000,22170=>1000,22171=>1000,22172=>1000,22173=>1000,22174=>1000,22175=>1000,22176=>1000,22177=>1000,22178=>1000,22179=>1000,22180=>1000, + 22181=>1000,22182=>1000,22183=>1000,22184=>1000,22185=>1000,22186=>1000,22187=>1000,22188=>1000,22189=>1000,22190=>1000,22191=>1000,22192=>1000,22193=>1000,22194=>1000,22195=>1000,22196=>1000, + 22197=>1000,22198=>1000,22199=>1000,22200=>1000,22201=>1000,22202=>1000,22203=>1000,22204=>1000,22205=>1000,22206=>1000,22207=>1000,22208=>1000,22209=>1000,22210=>1000,22211=>1000,22212=>1000, + 22213=>1000,22214=>1000,22215=>1000,22216=>1000,22217=>1000,22218=>1000,22219=>1000,22220=>1000,22221=>1000,22222=>1000,22223=>1000,22224=>1000,22225=>1000,22226=>1000,22227=>1000,22228=>1000, + 22229=>1000,22230=>1000,22231=>1000,22232=>1000,22233=>1000,22234=>1000,22235=>1000,22236=>1000,22237=>1000,22238=>1000,22239=>1000,22240=>1000,22241=>1000,22242=>1000,22243=>1000,22244=>1000, + 22245=>1000,22246=>1000,22247=>1000,22248=>1000,22249=>1000,22250=>1000,22251=>1000,22252=>1000,22253=>1000,22254=>1000,22255=>1000,22256=>1000,22257=>1000,22258=>1000,22259=>1000,22260=>1000, + 22261=>1000,22262=>1000,22263=>1000,22264=>1000,22265=>1000,22266=>1000,22267=>1000,22268=>1000,22269=>1000,22270=>1000,22271=>1000,22272=>1000,22273=>1000,22274=>1000,22275=>1000,22276=>1000, + 22277=>1000,22278=>1000,22279=>1000,22280=>1000,22281=>1000,22282=>1000,22283=>1000,22284=>1000,22285=>1000,22286=>1000,22287=>1000,22288=>1000,22289=>1000,22290=>1000,22291=>1000,22292=>1000, + 22293=>1000,22294=>1000,22295=>1000,22296=>1000,22297=>1000,22298=>1000,22299=>1000,22300=>1000,22301=>1000,22302=>1000,22303=>1000,22304=>1000,22305=>1000,22306=>1000,22307=>1000,22308=>1000, + 22309=>1000,22310=>1000,22311=>1000,22312=>1000,22313=>1000,22314=>1000,22315=>1000,22316=>1000,22317=>1000,22318=>1000,22319=>1000,22320=>1000,22321=>1000,22322=>1000,22323=>1000,22324=>1000, + 22325=>1000,22326=>1000,22327=>1000,22328=>1000,22329=>1000,22330=>1000,22331=>1000,22332=>1000,22333=>1000,22334=>1000,22335=>1000,22336=>1000,22337=>1000,22338=>1000,22339=>1000,22340=>1000, + 22341=>1000,22342=>1000,22343=>1000,22344=>1000,22345=>1000,22346=>1000,22347=>1000,22348=>1000,22349=>1000,22350=>1000,22351=>1000,22352=>1000,22353=>1000,22354=>1000,22355=>1000,22356=>1000, + 22357=>1000,22358=>1000,22359=>1000,22360=>1000,22361=>1000,22362=>1000,22363=>1000,22364=>1000,22365=>1000,22366=>1000,22367=>1000,22368=>1000,22369=>1000,22370=>1000,22371=>1000,22372=>1000, + 22373=>1000,22374=>1000,22375=>1000,22376=>1000,22377=>1000,22378=>1000,22379=>1000,22380=>1000,22381=>1000,22382=>1000,22383=>1000,22384=>1000,22385=>1000,22386=>1000,22387=>1000,22388=>1000, + 22389=>1000,22390=>1000,22391=>1000,22392=>1000,22393=>1000,22394=>1000,22395=>1000,22396=>1000,22397=>1000,22398=>1000,22399=>1000,22400=>1000,22401=>1000,22402=>1000,22403=>1000,22404=>1000, + 22405=>1000,22406=>1000,22407=>1000,22408=>1000,22409=>1000,22410=>1000,22411=>1000,22412=>1000,22413=>1000,22414=>1000,22415=>1000,22416=>1000,22417=>1000,22418=>1000,22419=>1000,22420=>1000, + 22421=>1000,22422=>1000,22423=>1000,22424=>1000,22425=>1000,22426=>1000,22427=>1000,22428=>1000,22429=>1000,22430=>1000,22431=>1000,22432=>1000,22433=>1000,22434=>1000,22435=>1000,22436=>1000, + 22437=>1000,22438=>1000,22439=>1000,22440=>1000,22441=>1000,22442=>1000,22443=>1000,22444=>1000,22445=>1000,22446=>1000,22447=>1000,22448=>1000,22449=>1000,22450=>1000,22451=>1000,22452=>1000, + 22453=>1000,22454=>1000,22455=>1000,22456=>1000,22457=>1000,22458=>1000,22459=>1000,22460=>1000,22461=>1000,22462=>1000,22463=>1000,22464=>1000,22465=>1000,22466=>1000,22467=>1000,22468=>1000, + 22469=>1000,22470=>1000,22471=>1000,22472=>1000,22473=>1000,22474=>1000,22475=>1000,22476=>1000,22477=>1000,22478=>1000,22479=>1000,22480=>1000,22481=>1000,22482=>1000,22483=>1000,22484=>1000, + 22485=>1000,22486=>1000,22487=>1000,22488=>1000,22489=>1000,22490=>1000,22491=>1000,22492=>1000,22493=>1000,22494=>1000,22495=>1000,22496=>1000,22497=>1000,22498=>1000,22499=>1000,22500=>1000, + 22501=>1000,22502=>1000,22503=>1000,22504=>1000,22505=>1000,22506=>1000,22507=>1000,22508=>1000,22509=>1000,22510=>1000,22511=>1000,22512=>1000,22513=>1000,22514=>1000,22515=>1000,22516=>1000, + 22517=>1000,22518=>1000,22519=>1000,22520=>1000,22521=>1000,22522=>1000,22523=>1000,22524=>1000,22525=>1000,22526=>1000,22527=>1000,22528=>1000,22529=>1000,22530=>1000,22531=>1000,22532=>1000, + 22533=>1000,22534=>1000,22535=>1000,22536=>1000,22537=>1000,22538=>1000,22539=>1000,22540=>1000,22541=>1000,22542=>1000,22543=>1000,22544=>1000,22545=>1000,22546=>1000,22547=>1000,22548=>1000, + 22549=>1000,22550=>1000,22551=>1000,22552=>1000,22553=>1000,22554=>1000,22555=>1000,22556=>1000,22557=>1000,22558=>1000,22559=>1000,22560=>1000,22561=>1000,22562=>1000,22563=>1000,22564=>1000, + 22565=>1000,22566=>1000,22567=>1000,22568=>1000,22569=>1000,22570=>1000,22571=>1000,22572=>1000,22573=>1000,22574=>1000,22575=>1000,22576=>1000,22577=>1000,22578=>1000,22579=>1000,22580=>1000, + 22581=>1000,22582=>1000,22583=>1000,22584=>1000,22585=>1000,22586=>1000,22587=>1000,22588=>1000,22589=>1000,22590=>1000,22591=>1000,22592=>1000,22593=>1000,22594=>1000,22595=>1000,22596=>1000, + 22597=>1000,22598=>1000,22599=>1000,22600=>1000,22601=>1000,22602=>1000,22603=>1000,22604=>1000,22605=>1000,22606=>1000,22607=>1000,22608=>1000,22609=>1000,22610=>1000,22611=>1000,22612=>1000, + 22613=>1000,22614=>1000,22615=>1000,22616=>1000,22617=>1000,22618=>1000,22619=>1000,22620=>1000,22621=>1000,22622=>1000,22623=>1000,22624=>1000,22625=>1000,22626=>1000,22627=>1000,22628=>1000, + 22629=>1000,22630=>1000,22631=>1000,22632=>1000,22633=>1000,22634=>1000,22635=>1000,22636=>1000,22637=>1000,22638=>1000,22639=>1000,22640=>1000,22641=>1000,22642=>1000,22643=>1000,22644=>1000, + 22645=>1000,22646=>1000,22647=>1000,22648=>1000,22649=>1000,22650=>1000,22651=>1000,22652=>1000,22653=>1000,22654=>1000,22655=>1000,22656=>1000,22657=>1000,22658=>1000,22659=>1000,22660=>1000, + 22661=>1000,22662=>1000,22663=>1000,22664=>1000,22665=>1000,22666=>1000,22667=>1000,22668=>1000,22669=>1000,22670=>1000,22671=>1000,22672=>1000,22673=>1000,22674=>1000,22675=>1000,22676=>1000, + 22677=>1000,22678=>1000,22679=>1000,22680=>1000,22681=>1000,22682=>1000,22683=>1000,22684=>1000,22685=>1000,22686=>1000,22687=>1000,22688=>1000,22689=>1000,22690=>1000,22691=>1000,22692=>1000, + 22693=>1000,22694=>1000,22695=>1000,22696=>1000,22697=>1000,22698=>1000,22699=>1000,22700=>1000,22701=>1000,22702=>1000,22703=>1000,22704=>1000,22705=>1000,22706=>1000,22707=>1000,22708=>1000, + 22709=>1000,22710=>1000,22711=>1000,22712=>1000,22713=>1000,22714=>1000,22715=>1000,22716=>1000,22717=>1000,22718=>1000,22719=>1000,22720=>1000,22721=>1000,22722=>1000,22723=>1000,22724=>1000, + 22725=>1000,22726=>1000,22727=>1000,22728=>1000,22729=>1000,22730=>1000,22731=>1000,22732=>1000,22733=>1000,22734=>1000,22735=>1000,22736=>1000,22737=>1000,22738=>1000,22739=>1000,22740=>1000, + 22741=>1000,22742=>1000,22743=>1000,22744=>1000,22745=>1000,22746=>1000,22747=>1000,22748=>1000,22749=>1000,22750=>1000,22751=>1000,22752=>1000,22753=>1000,22754=>1000,22755=>1000,22756=>1000, + 22757=>1000,22758=>1000,22759=>1000,22760=>1000,22761=>1000,22762=>1000,22763=>1000,22764=>1000,22765=>1000,22766=>1000,22767=>1000,22768=>1000,22769=>1000,22770=>1000,22771=>1000,22772=>1000, + 22773=>1000,22774=>1000,22775=>1000,22776=>1000,22777=>1000,22778=>1000,22779=>1000,22780=>1000,22781=>1000,22782=>1000,22783=>1000,22784=>1000,22785=>1000,22786=>1000,22787=>1000,22788=>1000, + 22789=>1000,22790=>1000,22791=>1000,22792=>1000,22793=>1000,22794=>1000,22795=>1000,22796=>1000,22797=>1000,22798=>1000,22799=>1000,22800=>1000,22801=>1000,22802=>1000,22803=>1000,22804=>1000, + 22805=>1000,22806=>1000,22807=>1000,22808=>1000,22809=>1000,22810=>1000,22811=>1000,22812=>1000,22813=>1000,22814=>1000,22815=>1000,22816=>1000,22817=>1000,22818=>1000,22819=>1000,22820=>1000, + 22821=>1000,22822=>1000,22823=>1000,22824=>1000,22825=>1000,22826=>1000,22827=>1000,22828=>1000,22829=>1000,22830=>1000,22831=>1000,22832=>1000,22833=>1000,22834=>1000,22835=>1000,22836=>1000, + 22837=>1000,22838=>1000,22839=>1000,22840=>1000,22841=>1000,22842=>1000,22843=>1000,22844=>1000,22845=>1000,22846=>1000,22847=>1000,22848=>1000,22849=>1000,22850=>1000,22851=>1000,22852=>1000, + 22853=>1000,22854=>1000,22855=>1000,22856=>1000,22857=>1000,22858=>1000,22859=>1000,22860=>1000,22861=>1000,22862=>1000,22863=>1000,22864=>1000,22865=>1000,22866=>1000,22867=>1000,22868=>1000, + 22869=>1000,22870=>1000,22871=>1000,22872=>1000,22873=>1000,22874=>1000,22875=>1000,22876=>1000,22877=>1000,22878=>1000,22879=>1000,22880=>1000,22881=>1000,22882=>1000,22883=>1000,22884=>1000, + 22885=>1000,22886=>1000,22887=>1000,22888=>1000,22889=>1000,22890=>1000,22891=>1000,22892=>1000,22893=>1000,22894=>1000,22895=>1000,22896=>1000,22897=>1000,22898=>1000,22899=>1000,22900=>1000, + 22901=>1000,22902=>1000,22903=>1000,22904=>1000,22905=>1000,22906=>1000,22907=>1000,22908=>1000,22909=>1000,22910=>1000,22911=>1000,22912=>1000,22913=>1000,22914=>1000,22915=>1000,22916=>1000, + 22917=>1000,22918=>1000,22919=>1000,22920=>1000,22921=>1000,22922=>1000,22923=>1000,22924=>1000,22925=>1000,22926=>1000,22927=>1000,22928=>1000,22929=>1000,22930=>1000,22931=>1000,22932=>1000, + 22933=>1000,22934=>1000,22935=>1000,22936=>1000,22937=>1000,22938=>1000,22939=>1000,22940=>1000,22941=>1000,22942=>1000,22943=>1000,22944=>1000,22945=>1000,22946=>1000,22947=>1000,22948=>1000, + 22949=>1000,22950=>1000,22951=>1000,22952=>1000,22953=>1000,22954=>1000,22955=>1000,22956=>1000,22957=>1000,22958=>1000,22959=>1000,22960=>1000,22961=>1000,22962=>1000,22963=>1000,22964=>1000, + 22965=>1000,22966=>1000,22967=>1000,22968=>1000,22969=>1000,22970=>1000,22971=>1000,22972=>1000,22973=>1000,22974=>1000,22975=>1000,22976=>1000,22977=>1000,22978=>1000,22979=>1000,22980=>1000, + 22981=>1000,22982=>1000,22983=>1000,22984=>1000,22985=>1000,22986=>1000,22987=>1000,22988=>1000,22989=>1000,22990=>1000,22991=>1000,22992=>1000,22993=>1000,22994=>1000,22995=>1000,22996=>1000, + 22997=>1000,22998=>1000,22999=>1000,23000=>1000,23001=>1000,23002=>1000,23003=>1000,23004=>1000,23005=>1000,23006=>1000,23007=>1000,23008=>1000,23009=>1000,23010=>1000,23011=>1000,23012=>1000, + 23013=>1000,23014=>1000,23015=>1000,23016=>1000,23017=>1000,23018=>1000,23019=>1000,23020=>1000,23021=>1000,23022=>1000,23023=>1000,23024=>1000,23025=>1000,23026=>1000,23027=>1000,23028=>1000, + 23029=>1000,23030=>1000,23031=>1000,23032=>1000,23033=>1000,23034=>1000,23035=>1000,23036=>1000,23037=>1000,23038=>1000,23039=>1000,23040=>1000,23041=>1000,23042=>1000,23043=>1000,23044=>1000, + 23045=>1000,23046=>1000,23047=>1000,23048=>1000,23049=>1000,23050=>1000,23051=>1000,23052=>1000,23053=>1000,23054=>1000,23055=>1000,23056=>1000,23057=>1000,23058=>1000,23059=>1000,23060=>1000, + 23061=>1000,23062=>1000,23063=>1000,23064=>1000,23065=>1000,23066=>1000,23067=>1000,23068=>1000,23069=>1000,23070=>1000,23071=>1000,23072=>1000,23073=>1000,23074=>1000,23075=>1000,23076=>1000, + 23077=>1000,23078=>1000,23079=>1000,23080=>1000,23081=>1000,23082=>1000,23083=>1000,23084=>1000,23085=>1000,23086=>1000,23087=>1000,23088=>1000,23089=>1000,23090=>1000,23091=>1000,23092=>1000, + 23093=>1000,23094=>1000,23095=>1000,23096=>1000,23097=>1000,23098=>1000,23099=>1000,23100=>1000,23101=>1000,23102=>1000,23103=>1000,23104=>1000,23105=>1000,23106=>1000,23107=>1000,23108=>1000, + 23109=>1000,23110=>1000,23111=>1000,23112=>1000,23113=>1000,23114=>1000,23115=>1000,23116=>1000,23117=>1000,23118=>1000,23119=>1000,23120=>1000,23121=>1000,23122=>1000,23123=>1000,23124=>1000, + 23125=>1000,23126=>1000,23127=>1000,23128=>1000,23129=>1000,23130=>1000,23131=>1000,23132=>1000,23133=>1000,23134=>1000,23135=>1000,23136=>1000,23137=>1000,23138=>1000,23139=>1000,23140=>1000, + 23141=>1000,23142=>1000,23143=>1000,23144=>1000,23145=>1000,23146=>1000,23147=>1000,23148=>1000,23149=>1000,23150=>1000,23151=>1000,23152=>1000,23153=>1000,23154=>1000,23155=>1000,23156=>1000, + 23157=>1000,23158=>1000,23159=>1000,23160=>1000,23161=>1000,23162=>1000,23163=>1000,23164=>1000,23165=>1000,23166=>1000,23167=>1000,23168=>1000,23169=>1000,23170=>1000,23171=>1000,23172=>1000, + 23173=>1000,23174=>1000,23175=>1000,23176=>1000,23177=>1000,23178=>1000,23179=>1000,23180=>1000,23181=>1000,23182=>1000,23183=>1000,23184=>1000,23185=>1000,23186=>1000,23187=>1000,23188=>1000, + 23189=>1000,23190=>1000,23191=>1000,23192=>1000,23193=>1000,23194=>1000,23195=>1000,23196=>1000,23197=>1000,23198=>1000,23199=>1000,23200=>1000,23201=>1000,23202=>1000,23203=>1000,23204=>1000, + 23205=>1000,23206=>1000,23207=>1000,23208=>1000,23209=>1000,23210=>1000,23211=>1000,23212=>1000,23213=>1000,23214=>1000,23215=>1000,23216=>1000,23217=>1000,23218=>1000,23219=>1000,23220=>1000, + 23221=>1000,23222=>1000,23223=>1000,23224=>1000,23225=>1000,23226=>1000,23227=>1000,23228=>1000,23229=>1000,23230=>1000,23231=>1000,23232=>1000,23233=>1000,23234=>1000,23235=>1000,23236=>1000, + 23237=>1000,23238=>1000,23239=>1000,23240=>1000,23241=>1000,23242=>1000,23243=>1000,23244=>1000,23245=>1000,23246=>1000,23247=>1000,23248=>1000,23249=>1000,23250=>1000,23251=>1000,23252=>1000, + 23253=>1000,23254=>1000,23255=>1000,23256=>1000,23257=>1000,23258=>1000,23259=>1000,23260=>1000,23261=>1000,23262=>1000,23263=>1000,23264=>1000,23265=>1000,23266=>1000,23267=>1000,23268=>1000, + 23269=>1000,23270=>1000,23271=>1000,23272=>1000,23273=>1000,23274=>1000,23275=>1000,23276=>1000,23277=>1000,23278=>1000,23279=>1000,23280=>1000,23281=>1000,23282=>1000,23283=>1000,23284=>1000, + 23285=>1000,23286=>1000,23287=>1000,23288=>1000,23289=>1000,23290=>1000,23291=>1000,23292=>1000,23293=>1000,23294=>1000,23295=>1000,23296=>1000,23297=>1000,23298=>1000,23299=>1000,23300=>1000, + 23301=>1000,23302=>1000,23303=>1000,23304=>1000,23305=>1000,23306=>1000,23307=>1000,23308=>1000,23309=>1000,23310=>1000,23311=>1000,23312=>1000,23313=>1000,23314=>1000,23315=>1000,23316=>1000, + 23317=>1000,23318=>1000,23319=>1000,23320=>1000,23321=>1000,23322=>1000,23323=>1000,23324=>1000,23325=>1000,23326=>1000,23327=>1000,23328=>1000,23329=>1000,23330=>1000,23331=>1000,23332=>1000, + 23333=>1000,23334=>1000,23335=>1000,23336=>1000,23337=>1000,23338=>1000,23339=>1000,23340=>1000,23341=>1000,23342=>1000,23343=>1000,23344=>1000,23345=>1000,23346=>1000,23347=>1000,23348=>1000, + 23349=>1000,23350=>1000,23351=>1000,23352=>1000,23353=>1000,23354=>1000,23355=>1000,23356=>1000,23357=>1000,23358=>1000,23359=>1000,23360=>1000,23361=>1000,23362=>1000,23363=>1000,23364=>1000, + 23365=>1000,23366=>1000,23367=>1000,23368=>1000,23369=>1000,23370=>1000,23371=>1000,23372=>1000,23373=>1000,23374=>1000,23375=>1000,23376=>1000,23377=>1000,23378=>1000,23379=>1000,23380=>1000, + 23381=>1000,23382=>1000,23383=>1000,23384=>1000,23385=>1000,23386=>1000,23387=>1000,23388=>1000,23389=>1000,23390=>1000,23391=>1000,23392=>1000,23393=>1000,23394=>1000,23395=>1000,23396=>1000, + 23397=>1000,23398=>1000,23399=>1000,23400=>1000,23401=>1000,23402=>1000,23403=>1000,23404=>1000,23405=>1000,23406=>1000,23407=>1000,23408=>1000,23409=>1000,23410=>1000,23411=>1000,23412=>1000, + 23413=>1000,23414=>1000,23415=>1000,23416=>1000,23417=>1000,23418=>1000,23419=>1000,23420=>1000,23421=>1000,23422=>1000,23423=>1000,23424=>1000,23425=>1000,23426=>1000,23427=>1000,23428=>1000, + 23429=>1000,23430=>1000,23431=>1000,23432=>1000,23433=>1000,23434=>1000,23435=>1000,23436=>1000,23437=>1000,23438=>1000,23439=>1000,23440=>1000,23441=>1000,23442=>1000,23443=>1000,23444=>1000, + 23445=>1000,23446=>1000,23447=>1000,23448=>1000,23449=>1000,23450=>1000,23451=>1000,23452=>1000,23453=>1000,23454=>1000,23455=>1000,23456=>1000,23457=>1000,23458=>1000,23459=>1000,23460=>1000, + 23461=>1000,23462=>1000,23463=>1000,23464=>1000,23465=>1000,23466=>1000,23467=>1000,23468=>1000,23469=>1000,23470=>1000,23471=>1000,23472=>1000,23473=>1000,23474=>1000,23475=>1000,23476=>1000, + 23477=>1000,23478=>1000,23479=>1000,23480=>1000,23481=>1000,23482=>1000,23483=>1000,23484=>1000,23485=>1000,23486=>1000,23487=>1000,23488=>1000,23489=>1000,23490=>1000,23491=>1000,23492=>1000, + 23493=>1000,23494=>1000,23495=>1000,23496=>1000,23497=>1000,23498=>1000,23499=>1000,23500=>1000,23501=>1000,23502=>1000,23503=>1000,23504=>1000,23505=>1000,23506=>1000,23507=>1000,23508=>1000, + 23509=>1000,23510=>1000,23511=>1000,23512=>1000,23513=>1000,23514=>1000,23515=>1000,23516=>1000,23517=>1000,23518=>1000,23519=>1000,23520=>1000,23521=>1000,23522=>1000,23523=>1000,23524=>1000, + 23525=>1000,23526=>1000,23527=>1000,23528=>1000,23529=>1000,23530=>1000,23531=>1000,23532=>1000,23533=>1000,23534=>1000,23535=>1000,23536=>1000,23537=>1000,23538=>1000,23539=>1000,23540=>1000, + 23541=>1000,23542=>1000,23543=>1000,23544=>1000,23545=>1000,23546=>1000,23547=>1000,23548=>1000,23549=>1000,23550=>1000,23551=>1000,23552=>1000,23553=>1000,23554=>1000,23555=>1000,23556=>1000, + 23557=>1000,23558=>1000,23559=>1000,23560=>1000,23561=>1000,23562=>1000,23563=>1000,23564=>1000,23565=>1000,23566=>1000,23567=>1000,23568=>1000,23569=>1000,23570=>1000,23571=>1000,23572=>1000, + 23573=>1000,23574=>1000,23575=>1000,23576=>1000,23577=>1000,23578=>1000,23579=>1000,23580=>1000,23581=>1000,23582=>1000,23583=>1000,23584=>1000,23585=>1000,23586=>1000,23587=>1000,23588=>1000, + 23589=>1000,23590=>1000,23591=>1000,23592=>1000,23593=>1000,23594=>1000,23595=>1000,23596=>1000,23597=>1000,23598=>1000,23599=>1000,23600=>1000,23601=>1000,23602=>1000,23603=>1000,23604=>1000, + 23605=>1000,23606=>1000,23607=>1000,23608=>1000,23609=>1000,23610=>1000,23611=>1000,23612=>1000,23613=>1000,23614=>1000,23615=>1000,23616=>1000,23617=>1000,23618=>1000,23619=>1000,23620=>1000, + 23621=>1000,23622=>1000,23623=>1000,23624=>1000,23625=>1000,23626=>1000,23627=>1000,23628=>1000,23629=>1000,23630=>1000,23631=>1000,23632=>1000,23633=>1000,23634=>1000,23635=>1000,23636=>1000, + 23637=>1000,23638=>1000,23639=>1000,23640=>1000,23641=>1000,23642=>1000,23643=>1000,23644=>1000,23645=>1000,23646=>1000,23647=>1000,23648=>1000,23649=>1000,23650=>1000,23651=>1000,23652=>1000, + 23653=>1000,23654=>1000,23655=>1000,23656=>1000,23657=>1000,23658=>1000,23659=>1000,23660=>1000,23661=>1000,23662=>1000,23663=>1000,23664=>1000,23665=>1000,23666=>1000,23667=>1000,23668=>1000, + 23669=>1000,23670=>1000,23671=>1000,23672=>1000,23673=>1000,23674=>1000,23675=>1000,23676=>1000,23677=>1000,23678=>1000,23679=>1000,23680=>1000,23681=>1000,23682=>1000,23683=>1000,23684=>1000, + 23685=>1000,23686=>1000,23687=>1000,23688=>1000,23689=>1000,23690=>1000,23691=>1000,23692=>1000,23693=>1000,23694=>1000,23695=>1000,23696=>1000,23697=>1000,23698=>1000,23699=>1000,23700=>1000, + 23701=>1000,23702=>1000,23703=>1000,23704=>1000,23705=>1000,23706=>1000,23707=>1000,23708=>1000,23709=>1000,23710=>1000,23711=>1000,23712=>1000,23713=>1000,23714=>1000,23715=>1000,23716=>1000, + 23717=>1000,23718=>1000,23719=>1000,23720=>1000,23721=>1000,23722=>1000,23723=>1000,23724=>1000,23725=>1000,23726=>1000,23727=>1000,23728=>1000,23729=>1000,23730=>1000,23731=>1000,23732=>1000, + 23733=>1000,23734=>1000,23735=>1000,23736=>1000,23737=>1000,23738=>1000,23739=>1000,23740=>1000,23741=>1000,23742=>1000,23743=>1000,23744=>1000,23745=>1000,23746=>1000,23747=>1000,23748=>1000, + 23749=>1000,23750=>1000,23751=>1000,23752=>1000,23753=>1000,23754=>1000,23755=>1000,23756=>1000,23757=>1000,23758=>1000,23759=>1000,23760=>1000,23761=>1000,23762=>1000,23763=>1000,23764=>1000, + 23765=>1000,23766=>1000,23767=>1000,23768=>1000,23769=>1000,23770=>1000,23771=>1000,23772=>1000,23773=>1000,23774=>1000,23775=>1000,23776=>1000,23777=>1000,23778=>1000,23779=>1000,23780=>1000, + 23781=>1000,23782=>1000,23783=>1000,23784=>1000,23785=>1000,23786=>1000,23787=>1000,23788=>1000,23789=>1000,23790=>1000,23791=>1000,23792=>1000,23793=>1000,23794=>1000,23795=>1000,23796=>1000, + 23797=>1000,23798=>1000,23799=>1000,23800=>1000,23801=>1000,23802=>1000,23803=>1000,23804=>1000,23805=>1000,23806=>1000,23807=>1000,23808=>1000,23809=>1000,23810=>1000,23811=>1000,23812=>1000, + 23813=>1000,23814=>1000,23815=>1000,23816=>1000,23817=>1000,23818=>1000,23819=>1000,23820=>1000,23821=>1000,23822=>1000,23823=>1000,23824=>1000,23825=>1000,23826=>1000,23827=>1000,23828=>1000, + 23829=>1000,23830=>1000,23831=>1000,23832=>1000,23833=>1000,23834=>1000,23835=>1000,23836=>1000,23837=>1000,23838=>1000,23839=>1000,23840=>1000,23841=>1000,23842=>1000,23843=>1000,23844=>1000, + 23845=>1000,23846=>1000,23847=>1000,23848=>1000,23849=>1000,23850=>1000,23851=>1000,23852=>1000,23853=>1000,23854=>1000,23855=>1000,23856=>1000,23857=>1000,23858=>1000,23859=>1000,23860=>1000, + 23861=>1000,23862=>1000,23863=>1000,23864=>1000,23865=>1000,23866=>1000,23867=>1000,23868=>1000,23869=>1000,23870=>1000,23871=>1000,23872=>1000,23873=>1000,23874=>1000,23875=>1000,23876=>1000, + 23877=>1000,23878=>1000,23879=>1000,23880=>1000,23881=>1000,23882=>1000,23883=>1000,23884=>1000,23885=>1000,23886=>1000,23887=>1000,23888=>1000,23889=>1000,23890=>1000,23891=>1000,23892=>1000, + 23893=>1000,23894=>1000,23895=>1000,23896=>1000,23897=>1000,23898=>1000,23899=>1000,23900=>1000,23901=>1000,23902=>1000,23903=>1000,23904=>1000,23905=>1000,23906=>1000,23907=>1000,23908=>1000, + 23909=>1000,23910=>1000,23911=>1000,23912=>1000,23913=>1000,23914=>1000,23915=>1000,23916=>1000,23917=>1000,23918=>1000,23919=>1000,23920=>1000,23921=>1000,23922=>1000,23923=>1000,23924=>1000, + 23925=>1000,23926=>1000,23927=>1000,23928=>1000,23929=>1000,23930=>1000,23931=>1000,23932=>1000,23933=>1000,23934=>1000,23935=>1000,23936=>1000,23937=>1000,23938=>1000,23939=>1000,23940=>1000, + 23941=>1000,23942=>1000,23943=>1000,23944=>1000,23945=>1000,23946=>1000,23947=>1000,23948=>1000,23949=>1000,23950=>1000,23951=>1000,23952=>1000,23953=>1000,23954=>1000,23955=>1000,23956=>1000, + 23957=>1000,23958=>1000,23959=>1000,23960=>1000,23961=>1000,23962=>1000,23963=>1000,23964=>1000,23965=>1000,23966=>1000,23967=>1000,23968=>1000,23969=>1000,23970=>1000,23971=>1000,23972=>1000, + 23973=>1000,23974=>1000,23975=>1000,23976=>1000,23977=>1000,23978=>1000,23979=>1000,23980=>1000,23981=>1000,23982=>1000,23983=>1000,23984=>1000,23985=>1000,23986=>1000,23987=>1000,23988=>1000, + 23989=>1000,23990=>1000,23991=>1000,23992=>1000,23993=>1000,23994=>1000,23995=>1000,23996=>1000,23997=>1000,23998=>1000,23999=>1000,24000=>1000,24001=>1000,24002=>1000,24003=>1000,24004=>1000, + 24005=>1000,24006=>1000,24007=>1000,24008=>1000,24009=>1000,24010=>1000,24011=>1000,24012=>1000,24013=>1000,24014=>1000,24015=>1000,24016=>1000,24017=>1000,24018=>1000,24019=>1000,24020=>1000, + 24021=>1000,24022=>1000,24023=>1000,24024=>1000,24025=>1000,24026=>1000,24027=>1000,24028=>1000,24029=>1000,24030=>1000,24031=>1000,24032=>1000,24033=>1000,24034=>1000,24035=>1000,24036=>1000, + 24037=>1000,24038=>1000,24039=>1000,24040=>1000,24041=>1000,24042=>1000,24043=>1000,24044=>1000,24045=>1000,24046=>1000,24047=>1000,24048=>1000,24049=>1000,24050=>1000,24051=>1000,24052=>1000, + 24053=>1000,24054=>1000,24055=>1000,24056=>1000,24057=>1000,24058=>1000,24059=>1000,24060=>1000,24061=>1000,24062=>1000,24063=>1000,24064=>1000,24065=>1000,24066=>1000,24067=>1000,24068=>1000, + 24069=>1000,24070=>1000,24071=>1000,24072=>1000,24073=>1000,24074=>1000,24075=>1000,24076=>1000,24077=>1000,24078=>1000,24079=>1000,24080=>1000,24081=>1000,24082=>1000,24083=>1000,24084=>1000, + 24085=>1000,24086=>1000,24087=>1000,24088=>1000,24089=>1000,24090=>1000,24091=>1000,24092=>1000,24093=>1000,24094=>1000,24095=>1000,24096=>1000,24097=>1000,24098=>1000,24099=>1000,24100=>1000, + 24101=>1000,24102=>1000,24103=>1000,24104=>1000,24105=>1000,24106=>1000,24107=>1000,24108=>1000,24109=>1000,24110=>1000,24111=>1000,24112=>1000,24113=>1000,24114=>1000,24115=>1000,24116=>1000, + 24117=>1000,24118=>1000,24119=>1000,24120=>1000,24121=>1000,24122=>1000,24123=>1000,24124=>1000,24125=>1000,24126=>1000,24127=>1000,24128=>1000,24129=>1000,24130=>1000,24131=>1000,24132=>1000, + 24133=>1000,24134=>1000,24135=>1000,24136=>1000,24137=>1000,24138=>1000,24139=>1000,24140=>1000,24141=>1000,24142=>1000,24143=>1000,24144=>1000,24145=>1000,24146=>1000,24147=>1000,24148=>1000, + 24149=>1000,24150=>1000,24151=>1000,24152=>1000,24153=>1000,24154=>1000,24155=>1000,24156=>1000,24157=>1000,24158=>1000,24159=>1000,24160=>1000,24161=>1000,24162=>1000,24163=>1000,24164=>1000, + 24165=>1000,24166=>1000,24167=>1000,24168=>1000,24169=>1000,24170=>1000,24171=>1000,24172=>1000,24173=>1000,24174=>1000,24175=>1000,24176=>1000,24177=>1000,24178=>1000,24179=>1000,24180=>1000, + 24181=>1000,24182=>1000,24183=>1000,24184=>1000,24185=>1000,24186=>1000,24187=>1000,24188=>1000,24189=>1000,24190=>1000,24191=>1000,24192=>1000,24193=>1000,24194=>1000,24195=>1000,24196=>1000, + 24197=>1000,24198=>1000,24199=>1000,24200=>1000,24201=>1000,24202=>1000,24203=>1000,24204=>1000,24205=>1000,24206=>1000,24207=>1000,24208=>1000,24209=>1000,24210=>1000,24211=>1000,24212=>1000, + 24213=>1000,24214=>1000,24215=>1000,24216=>1000,24217=>1000,24218=>1000,24219=>1000,24220=>1000,24221=>1000,24222=>1000,24223=>1000,24224=>1000,24225=>1000,24226=>1000,24227=>1000,24228=>1000, + 24229=>1000,24230=>1000,24231=>1000,24232=>1000,24233=>1000,24234=>1000,24235=>1000,24236=>1000,24237=>1000,24238=>1000,24239=>1000,24240=>1000,24241=>1000,24242=>1000,24243=>1000,24244=>1000, + 24245=>1000,24246=>1000,24247=>1000,24248=>1000,24249=>1000,24250=>1000,24251=>1000,24252=>1000,24253=>1000,24254=>1000,24255=>1000,24256=>1000,24257=>1000,24258=>1000,24259=>1000,24260=>1000, + 24261=>1000,24262=>1000,24263=>1000,24264=>1000,24265=>1000,24266=>1000,24267=>1000,24268=>1000,24269=>1000,24270=>1000,24271=>1000,24272=>1000,24273=>1000,24274=>1000,24275=>1000,24276=>1000, + 24277=>1000,24278=>1000,24279=>1000,24280=>1000,24281=>1000,24282=>1000,24283=>1000,24284=>1000,24285=>1000,24286=>1000,24287=>1000,24288=>1000,24289=>1000,24290=>1000,24291=>1000,24292=>1000, + 24293=>1000,24294=>1000,24295=>1000,24296=>1000,24297=>1000,24298=>1000,24299=>1000,24300=>1000,24301=>1000,24302=>1000,24303=>1000,24304=>1000,24305=>1000,24306=>1000,24307=>1000,24308=>1000, + 24309=>1000,24310=>1000,24311=>1000,24312=>1000,24313=>1000,24314=>1000,24315=>1000,24316=>1000,24317=>1000,24318=>1000,24319=>1000,24320=>1000,24321=>1000,24322=>1000,24323=>1000,24324=>1000, + 24325=>1000,24326=>1000,24327=>1000,24328=>1000,24329=>1000,24330=>1000,24331=>1000,24332=>1000,24333=>1000,24334=>1000,24335=>1000,24336=>1000,24337=>1000,24338=>1000,24339=>1000,24340=>1000, + 24341=>1000,24342=>1000,24343=>1000,24344=>1000,24345=>1000,24346=>1000,24347=>1000,24348=>1000,24349=>1000,24350=>1000,24351=>1000,24352=>1000,24353=>1000,24354=>1000,24355=>1000,24356=>1000, + 24357=>1000,24358=>1000,24359=>1000,24360=>1000,24361=>1000,24362=>1000,24363=>1000,24364=>1000,24365=>1000,24366=>1000,24367=>1000,24368=>1000,24369=>1000,24370=>1000,24371=>1000,24372=>1000, + 24373=>1000,24374=>1000,24375=>1000,24376=>1000,24377=>1000,24378=>1000,24379=>1000,24380=>1000,24381=>1000,24382=>1000,24383=>1000,24384=>1000,24385=>1000,24386=>1000,24387=>1000,24388=>1000, + 24389=>1000,24390=>1000,24391=>1000,24392=>1000,24393=>1000,24394=>1000,24395=>1000,24396=>1000,24397=>1000,24398=>1000,24399=>1000,24400=>1000,24401=>1000,24402=>1000,24403=>1000,24404=>1000, + 24405=>1000,24406=>1000,24407=>1000,24408=>1000,24409=>1000,24410=>1000,24411=>1000,24412=>1000,24413=>1000,24414=>1000,24415=>1000,24416=>1000,24417=>1000,24418=>1000,24419=>1000,24420=>1000, + 24421=>1000,24422=>1000,24423=>1000,24424=>1000,24425=>1000,24426=>1000,24427=>1000,24428=>1000,24429=>1000,24430=>1000,24431=>1000,24432=>1000,24433=>1000,24434=>1000,24435=>1000,24436=>1000, + 24437=>1000,24438=>1000,24439=>1000,24440=>1000,24441=>1000,24442=>1000,24443=>1000,24444=>1000,24445=>1000,24446=>1000,24447=>1000,24448=>1000,24449=>1000,24450=>1000,24451=>1000,24452=>1000, + 24453=>1000,24454=>1000,24455=>1000,24456=>1000,24457=>1000,24458=>1000,24459=>1000,24460=>1000,24461=>1000,24462=>1000,24463=>1000,24464=>1000,24465=>1000,24466=>1000,24467=>1000,24468=>1000, + 24469=>1000,24470=>1000,24471=>1000,24472=>1000,24473=>1000,24474=>1000,24475=>1000,24476=>1000,24477=>1000,24478=>1000,24479=>1000,24480=>1000,24481=>1000,24482=>1000,24483=>1000,24484=>1000, + 24485=>1000,24486=>1000,24487=>1000,24488=>1000,24489=>1000,24490=>1000,24491=>1000,24492=>1000,24493=>1000,24494=>1000,24495=>1000,24496=>1000,24497=>1000,24498=>1000,24499=>1000,24500=>1000, + 24501=>1000,24502=>1000,24503=>1000,24504=>1000,24505=>1000,24506=>1000,24507=>1000,24508=>1000,24509=>1000,24510=>1000,24511=>1000,24512=>1000,24513=>1000,24514=>1000,24515=>1000,24516=>1000, + 24517=>1000,24518=>1000,24519=>1000,24520=>1000,24521=>1000,24522=>1000,24523=>1000,24524=>1000,24525=>1000,24526=>1000,24527=>1000,24528=>1000,24529=>1000,24530=>1000,24531=>1000,24532=>1000, + 24533=>1000,24534=>1000,24535=>1000,24536=>1000,24537=>1000,24538=>1000,24539=>1000,24540=>1000,24541=>1000,24542=>1000,24543=>1000,24544=>1000,24545=>1000,24546=>1000,24547=>1000,24548=>1000, + 24549=>1000,24550=>1000,24551=>1000,24552=>1000,24553=>1000,24554=>1000,24555=>1000,24556=>1000,24557=>1000,24558=>1000,24559=>1000,24560=>1000,24561=>1000,24562=>1000,24563=>1000,24564=>1000, + 24565=>1000,24566=>1000,24567=>1000,24568=>1000,24569=>1000,24570=>1000,24571=>1000,24572=>1000,24573=>1000,24574=>1000,24575=>1000,24576=>1000,24577=>1000,24578=>1000,24579=>1000,24580=>1000, + 24581=>1000,24582=>1000,24583=>1000,24584=>1000,24585=>1000,24586=>1000,24587=>1000,24588=>1000,24589=>1000,24590=>1000,24591=>1000,24592=>1000,24593=>1000,24594=>1000,24595=>1000,24596=>1000, + 24597=>1000,24598=>1000,24599=>1000,24600=>1000,24601=>1000,24602=>1000,24603=>1000,24604=>1000,24605=>1000,24606=>1000,24607=>1000,24608=>1000,24609=>1000,24610=>1000,24611=>1000,24612=>1000, + 24613=>1000,24614=>1000,24615=>1000,24616=>1000,24617=>1000,24618=>1000,24619=>1000,24620=>1000,24621=>1000,24622=>1000,24623=>1000,24624=>1000,24625=>1000,24626=>1000,24627=>1000,24628=>1000, + 24629=>1000,24630=>1000,24631=>1000,24632=>1000,24633=>1000,24634=>1000,24635=>1000,24636=>1000,24637=>1000,24638=>1000,24639=>1000,24640=>1000,24641=>1000,24642=>1000,24643=>1000,24644=>1000, + 24645=>1000,24646=>1000,24647=>1000,24648=>1000,24649=>1000,24650=>1000,24651=>1000,24652=>1000,24653=>1000,24654=>1000,24655=>1000,24656=>1000,24657=>1000,24658=>1000,24659=>1000,24660=>1000, + 24661=>1000,24662=>1000,24663=>1000,24664=>1000,24665=>1000,24666=>1000,24667=>1000,24668=>1000,24669=>1000,24670=>1000,24671=>1000,24672=>1000,24673=>1000,24674=>1000,24675=>1000,24676=>1000, + 24677=>1000,24678=>1000,24679=>1000,24680=>1000,24681=>1000,24682=>1000,24683=>1000,24684=>1000,24685=>1000,24686=>1000,24687=>1000,24688=>1000,24689=>1000,24690=>1000,24691=>1000,24692=>1000, + 24693=>1000,24694=>1000,24695=>1000,24696=>1000,24697=>1000,24698=>1000,24699=>1000,24700=>1000,24701=>1000,24702=>1000,24703=>1000,24704=>1000,24705=>1000,24706=>1000,24707=>1000,24708=>1000, + 24709=>1000,24710=>1000,24711=>1000,24712=>1000,24713=>1000,24714=>1000,24715=>1000,24716=>1000,24717=>1000,24718=>1000,24719=>1000,24720=>1000,24721=>1000,24722=>1000,24723=>1000,24724=>1000, + 24725=>1000,24726=>1000,24727=>1000,24728=>1000,24729=>1000,24730=>1000,24731=>1000,24732=>1000,24733=>1000,24734=>1000,24735=>1000,24736=>1000,24737=>1000,24738=>1000,24739=>1000,24740=>1000, + 24741=>1000,24742=>1000,24743=>1000,24744=>1000,24745=>1000,24746=>1000,24747=>1000,24748=>1000,24749=>1000,24750=>1000,24751=>1000,24752=>1000,24753=>1000,24754=>1000,24755=>1000,24756=>1000, + 24757=>1000,24758=>1000,24759=>1000,24760=>1000,24761=>1000,24762=>1000,24763=>1000,24764=>1000,24765=>1000,24766=>1000,24767=>1000,24768=>1000,24769=>1000,24770=>1000,24771=>1000,24772=>1000, + 24773=>1000,24774=>1000,24775=>1000,24776=>1000,24777=>1000,24778=>1000,24779=>1000,24780=>1000,24781=>1000,24782=>1000,24783=>1000,24784=>1000,24785=>1000,24786=>1000,24787=>1000,24788=>1000, + 24789=>1000,24790=>1000,24791=>1000,24792=>1000,24793=>1000,24794=>1000,24795=>1000,24796=>1000,24797=>1000,24798=>1000,24799=>1000,24800=>1000,24801=>1000,24802=>1000,24803=>1000,24804=>1000, + 24805=>1000,24806=>1000,24807=>1000,24808=>1000,24809=>1000,24810=>1000,24811=>1000,24812=>1000,24813=>1000,24814=>1000,24815=>1000,24816=>1000,24817=>1000,24818=>1000,24819=>1000,24820=>1000, + 24821=>1000,24822=>1000,24823=>1000,24824=>1000,24825=>1000,24826=>1000,24827=>1000,24828=>1000,24829=>1000,24830=>1000,24831=>1000,24832=>1000,24833=>1000,24834=>1000,24835=>1000,24836=>1000, + 24837=>1000,24838=>1000,24839=>1000,24840=>1000,24841=>1000,24842=>1000,24843=>1000,24844=>1000,24845=>1000,24846=>1000,24847=>1000,24848=>1000,24849=>1000,24850=>1000,24851=>1000,24852=>1000, + 24853=>1000,24854=>1000,24855=>1000,24856=>1000,24857=>1000,24858=>1000,24859=>1000,24860=>1000,24861=>1000,24862=>1000,24863=>1000,24864=>1000,24865=>1000,24866=>1000,24867=>1000,24868=>1000, + 24869=>1000,24870=>1000,24871=>1000,24872=>1000,24873=>1000,24874=>1000,24875=>1000,24876=>1000,24877=>1000,24878=>1000,24879=>1000,24880=>1000,24881=>1000,24882=>1000,24883=>1000,24884=>1000, + 24885=>1000,24886=>1000,24887=>1000,24888=>1000,24889=>1000,24890=>1000,24891=>1000,24892=>1000,24893=>1000,24894=>1000,24895=>1000,24896=>1000,24897=>1000,24898=>1000,24899=>1000,24900=>1000, + 24901=>1000,24902=>1000,24903=>1000,24904=>1000,24905=>1000,24906=>1000,24907=>1000,24908=>1000,24909=>1000,24910=>1000,24911=>1000,24912=>1000,24913=>1000,24914=>1000,24915=>1000,24916=>1000, + 24917=>1000,24918=>1000,24919=>1000,24920=>1000,24921=>1000,24922=>1000,24923=>1000,24924=>1000,24925=>1000,24926=>1000,24927=>1000,24928=>1000,24929=>1000,24930=>1000,24931=>1000,24932=>1000, + 24933=>1000,24934=>1000,24935=>1000,24936=>1000,24937=>1000,24938=>1000,24939=>1000,24940=>1000,24941=>1000,24942=>1000,24943=>1000,24944=>1000,24945=>1000,24946=>1000,24947=>1000,24948=>1000, + 24949=>1000,24950=>1000,24951=>1000,24952=>1000,24953=>1000,24954=>1000,24955=>1000,24956=>1000,24957=>1000,24958=>1000,24959=>1000,24960=>1000,24961=>1001,24962=>1000,24963=>1000,24964=>1000, + 24965=>1000,24966=>1000,24967=>1000,24968=>1000,24969=>1000,24970=>1000,24971=>1000,24972=>1000,24973=>1000,24974=>1000,24975=>1000,24976=>1000,24977=>1000,24978=>1000,24979=>1000,24980=>1000, + 24981=>1000,24982=>1000,24983=>1000,24984=>1000,24985=>1000,24986=>1000,24987=>1000,24988=>1000,24989=>1000,24990=>1000,24991=>1000,24992=>1000,24993=>1000,24994=>1000,24995=>1000,24996=>1000, + 24997=>1000,24998=>1000,24999=>1000,25000=>1000,25001=>1000,25002=>1000,25003=>1000,25004=>1000,25005=>1000,25006=>1000,25007=>1000,25008=>1000,25009=>1000,25010=>1000,25011=>1000,25012=>1000, + 25013=>1000,25014=>1000,25015=>1000,25016=>1000,25017=>1000,25018=>1000,25019=>1000,25020=>1000,25021=>1000,25022=>1000,25023=>1000,25024=>1000,25025=>1000,25026=>1000,25027=>1000,25028=>1000, + 25029=>1000,25030=>1000,25031=>1000,25032=>1000,25033=>1000,25034=>1000,25035=>1000,25036=>1000,25037=>1000,25038=>1000,25039=>1000,25040=>1000,25041=>1000,25042=>1000,25043=>1000,25044=>1000, + 25045=>1000,25046=>1000,25047=>1000,25048=>1000,25049=>1000,25050=>1000,25051=>1000,25052=>1000,25053=>1000,25054=>1000,25055=>1000,25056=>1000,25057=>1000,25058=>1000,25059=>1000,25060=>1000, + 25061=>1000,25062=>1000,25063=>1000,25064=>1000,25065=>1000,25066=>1000,25067=>1000,25068=>1000,25069=>1000,25070=>1000,25071=>1000,25072=>1000,25073=>1000,25074=>1000,25075=>1000,25076=>1000, + 25077=>1000,25078=>1000,25079=>1000,25080=>1000,25081=>1000,25082=>1000,25083=>1000,25084=>1000,25085=>1000,25086=>1000,25087=>1000,25088=>1000,25089=>1000,25090=>1000,25091=>1000,25092=>1000, + 25093=>1000,25094=>1000,25095=>1000,25096=>1000,25097=>1000,25098=>1000,25099=>1000,25100=>1000,25101=>1000,25102=>1000,25103=>1000,25104=>1000,25105=>1000,25106=>1000,25107=>1000,25108=>1000, + 25109=>1000,25110=>1000,25111=>1000,25112=>1000,25113=>1000,25114=>1000,25115=>1000,25116=>1000,25117=>1000,25118=>1000,25119=>1000,25120=>1000,25121=>1000,25122=>1000,25123=>1000,25124=>1000, + 25125=>1000,25126=>1000,25127=>1000,25128=>1000,25129=>1000,25130=>1000,25131=>1000,25132=>1000,25133=>1000,25134=>1000,25135=>1000,25136=>1000,25137=>1000,25138=>1000,25139=>1000,25140=>1000, + 25141=>1000,25142=>1000,25143=>1000,25144=>1000,25145=>1000,25146=>1000,25147=>1000,25148=>1000,25149=>1000,25150=>1000,25151=>1000,25152=>1000,25153=>1000,25154=>1000,25155=>1000,25156=>1000, + 25157=>1000,25158=>1000,25159=>1000,25160=>1000,25161=>1000,25162=>1000,25163=>1000,25164=>1000,25165=>1000,25166=>1000,25167=>1000,25168=>1000,25169=>1000,25170=>1000,25171=>1000,25172=>1000, + 25173=>1000,25174=>1000,25175=>1000,25176=>1000,25177=>1000,25178=>1000,25179=>1000,25180=>1000,25181=>1000,25182=>1000,25183=>1000,25184=>1000,25185=>1000,25186=>1000,25187=>1000,25188=>1000, + 25189=>1000,25190=>1000,25191=>1000,25192=>1000,25193=>1000,25194=>1000,25195=>1000,25196=>1000,25197=>1000,25198=>1000,25199=>1000,25200=>1000,25201=>1000,25202=>1000,25203=>1000,25204=>1000, + 25205=>1000,25206=>1000,25207=>1000,25208=>1000,25209=>1000,25210=>1000,25211=>1000,25212=>1000,25213=>1000,25214=>1000,25215=>1000,25216=>1000,25217=>1000,25218=>1000,25219=>1000,25220=>1000, + 25221=>1000,25222=>1000,25223=>1000,25224=>1000,25225=>1000,25226=>1000,25227=>1000,25228=>1000,25229=>1000,25230=>1000,25231=>1000,25232=>1000,25233=>1000,25234=>1000,25235=>1000,25236=>1000, + 25237=>1000,25238=>1000,25239=>1000,25240=>1000,25241=>1000,25242=>1000,25243=>1000,25244=>1000,25245=>1000,25246=>1000,25247=>1000,25248=>1000,25249=>1000,25250=>1000,25251=>1000,25252=>1000, + 25253=>1000,25254=>1000,25255=>1000,25256=>1000,25257=>1000,25258=>1000,25259=>1000,25260=>1000,25261=>1000,25262=>1000,25263=>1000,25264=>1000,25265=>1000,25266=>1000,25267=>1000,25268=>1000, + 25269=>1000,25270=>1000,25271=>1000,25272=>1000,25273=>1000,25274=>1000,25275=>1000,25276=>1000,25277=>1000,25278=>1000,25279=>1000,25280=>1000,25281=>1000,25282=>1000,25283=>1000,25284=>1000, + 25285=>1000,25286=>1000,25287=>1000,25288=>1000,25289=>1000,25290=>1000,25291=>1000,25292=>1000,25293=>1000,25294=>1000,25295=>1000,25296=>1000,25297=>1000,25298=>1000,25299=>1000,25300=>1000, + 25301=>1000,25302=>1000,25303=>1000,25304=>1000,25305=>1000,25306=>1000,25307=>1000,25308=>1000,25309=>1000,25310=>1000,25311=>1000,25312=>1000,25313=>1000,25314=>1000,25315=>1000,25316=>1000, + 25317=>1000,25318=>1000,25319=>1000,25320=>1000,25321=>1000,25322=>1000,25323=>1000,25324=>1000,25325=>1000,25326=>1000,25327=>1000,25328=>1000,25329=>1000,25330=>1000,25331=>1000,25332=>1000, + 25333=>1000,25334=>1000,25335=>1000,25336=>1000,25337=>1000,25338=>1000,25339=>1000,25340=>1000,25341=>1000,25342=>1000,25343=>1000,25344=>1000,25345=>1000,25346=>1000,25347=>1000,25348=>1000, + 25349=>1000,25350=>1000,25351=>1000,25352=>1000,25353=>1000,25354=>1000,25355=>1000,25356=>1000,25357=>1000,25358=>1000,25359=>1000,25360=>1000,25361=>1000,25362=>1000,25363=>1000,25364=>1000, + 25365=>1000,25366=>1000,25367=>1000,25368=>1000,25369=>1000,25370=>1000,25371=>1000,25372=>1000,25373=>1000,25374=>1000,25375=>1000,25376=>1000,25377=>1000,25378=>1000,25379=>1000,25380=>1000, + 25381=>1000,25382=>1000,25383=>1000,25384=>1000,25385=>1000,25386=>1000,25387=>1000,25388=>1000,25389=>1000,25390=>1000,25391=>1000,25392=>1000,25393=>1000,25394=>1000,25395=>1000,25396=>1000, + 25397=>1000,25398=>1000,25399=>1000,25400=>1000,25401=>1000,25402=>1000,25403=>1000,25404=>1000,25405=>1000,25406=>1000,25407=>1000,25408=>1000,25409=>1000,25410=>1000,25411=>1000,25412=>1000, + 25413=>1000,25414=>1000,25415=>1000,25416=>1000,25417=>1000,25418=>1000,25419=>1000,25420=>1000,25421=>1000,25422=>1000,25423=>1000,25424=>1000,25425=>1000,25426=>1000,25427=>1000,25428=>1000, + 25429=>1000,25430=>1000,25431=>1000,25432=>1000,25433=>1000,25434=>1000,25435=>1000,25436=>1000,25437=>1000,25438=>1000,25439=>1000,25440=>1000,25441=>1000,25442=>1000,25443=>1000,25444=>1000, + 25445=>1000,25446=>1000,25447=>1000,25448=>1000,25449=>1000,25450=>1000,25451=>1000,25452=>1000,25453=>1000,25454=>1000,25455=>1000,25456=>1000,25457=>1000,25458=>1000,25459=>1000,25460=>1000, + 25461=>1000,25462=>1000,25463=>1000,25464=>1000,25465=>1000,25466=>1000,25467=>1000,25468=>1000,25469=>1000,25470=>1000,25471=>1000,25472=>1000,25473=>1000,25474=>1000,25475=>1000,25476=>1000, + 25477=>1000,25478=>1000,25479=>1000,25480=>1000,25481=>1000,25482=>1000,25483=>1000,25484=>1000,25485=>1000,25486=>1000,25487=>1000,25488=>1000,25489=>1000,25490=>1000,25491=>1000,25492=>1000, + 25493=>1000,25494=>1000,25495=>1000,25496=>1000,25497=>1000,25498=>1000,25499=>1000,25500=>1000,25501=>1000,25502=>1000,25503=>1000,25504=>1000,25505=>1000,25506=>1000,25507=>1000,25508=>1000, + 25509=>1000,25510=>1000,25511=>1000,25512=>1000,25513=>1000,25514=>1000,25515=>1000,25516=>1000,25517=>1000,25518=>1000,25519=>1000,25520=>1000,25521=>1000,25522=>1000,25523=>1000,25524=>1000, + 25525=>1000,25526=>1000,25527=>1000,25528=>1000,25529=>1000,25530=>1000,25531=>1000,25532=>1000,25533=>1000,25534=>1000,25535=>1000,25536=>1000,25537=>1000,25538=>1000,25539=>1000,25540=>1000, + 25541=>1000,25542=>1000,25543=>1000,25544=>1000,25545=>1000,25546=>1000,25547=>1000,25548=>1000,25549=>1000,25550=>1000,25551=>1000,25552=>1000,25553=>1000,25554=>1000,25555=>1000,25556=>1000, + 25557=>1000,25558=>1000,25559=>1000,25560=>1000,25561=>1000,25562=>1000,25563=>1000,25564=>1000,25565=>1000,25566=>1000,25567=>1000,25568=>1000,25569=>1000,25570=>1000,25571=>1000,25572=>1000, + 25573=>1000,25574=>1000,25575=>1000,25576=>1000,25577=>1000,25578=>1000,25579=>1000,25580=>1000,25581=>1000,25582=>1000,25583=>1000,25584=>1000,25585=>1000,25586=>1000,25587=>1000,25588=>1000, + 25589=>1000,25590=>1000,25591=>1000,25592=>1000,25593=>1000,25594=>1000,25595=>1000,25596=>1000,25597=>1000,25598=>1000,25599=>1000,25600=>1000,25601=>1000,25602=>1000,25603=>1000,25604=>1000, + 25605=>1000,25606=>1000,25607=>1000,25608=>1000,25609=>1000,25610=>1000,25611=>1000,25612=>1000,25613=>1000,25614=>1000,25615=>1000,25616=>1000,25617=>1000,25618=>1000,25619=>1000,25620=>1000, + 25621=>1000,25622=>1000,25623=>1000,25624=>1000,25625=>1000,25626=>1000,25627=>1000,25628=>1000,25629=>1000,25630=>1000,25631=>1000,25632=>1000,25633=>1000,25634=>1000,25635=>1000,25636=>1000, + 25637=>1000,25638=>1000,25639=>1000,25640=>1000,25641=>1000,25642=>1000,25643=>1000,25644=>1000,25645=>1000,25646=>1000,25647=>1000,25648=>1000,25649=>1000,25650=>1000,25651=>1000,25652=>1000, + 25653=>1000,25654=>1000,25655=>1000,25656=>1000,25657=>1000,25658=>1000,25659=>1000,25660=>1000,25661=>1000,25662=>1000,25663=>1000,25664=>1000,25665=>1000,25666=>1000,25667=>1000,25668=>1000, + 25669=>1000,25670=>1000,25671=>1000,25672=>1000,25673=>1000,25674=>1000,25675=>1000,25676=>1000,25677=>1000,25678=>1000,25679=>1000,25680=>1000,25681=>1000,25682=>1000,25683=>1000,25684=>1000, + 25685=>1000,25686=>1000,25687=>1000,25688=>1000,25689=>1000,25690=>1000,25691=>1000,25692=>1000,25693=>1000,25694=>1000,25695=>1000,25696=>1000,25697=>1000,25698=>1000,25699=>1000,25700=>1000, + 25701=>1000,25702=>1000,25703=>1000,25704=>1000,25705=>1000,25706=>1000,25707=>1000,25708=>1000,25709=>1000,25710=>1000,25711=>1000,25712=>1000,25713=>1000,25714=>1000,25715=>1000,25716=>1000, + 25717=>1000,25718=>1000,25719=>1000,25720=>1000,25721=>1000,25722=>1000,25723=>1000,25724=>1000,25725=>1000,25726=>1000,25727=>1000,25728=>1000,25729=>1000,25730=>1000,25731=>1000,25732=>1000, + 25733=>1000,25734=>1000,25735=>1000,25736=>1000,25737=>1000,25738=>1000,25739=>1000,25740=>1000,25741=>1000,25742=>1000,25743=>1000,25744=>1000,25745=>1000,25746=>1000,25747=>1000,25748=>1000, + 25749=>1000,25750=>1000,25751=>1000,25752=>1000,25753=>1000,25754=>1000,25755=>1000,25756=>1000,25757=>1000,25758=>1000,25759=>1000,25760=>1000,25761=>1000,25762=>1000,25763=>1000,25764=>1000, + 25765=>1000,25766=>1000,25767=>1000,25768=>1000,25769=>1000,25770=>1000,25771=>1000,25772=>1000,25773=>1000,25774=>1000,25775=>1000,25776=>1000,25777=>1000,25778=>1000,25779=>1000,25780=>1000, + 25781=>1000,25782=>1000,25783=>1000,25784=>1000,25785=>1000,25786=>1000,25787=>1000,25788=>1000,25789=>1000,25790=>1000,25791=>1000,25792=>1000,25793=>1000,25794=>1000,25795=>1000,25796=>1000, + 25797=>1000,25798=>1000,25799=>1000,25800=>1000,25801=>1000,25802=>1000,25803=>1000,25804=>1000,25805=>1000,25806=>1000,25807=>1000,25808=>1000,25809=>1000,25810=>1000,25811=>1000,25812=>1000, + 25813=>1000,25814=>1000,25815=>1000,25816=>1000,25817=>1000,25818=>1000,25819=>1000,25820=>1000,25821=>1000,25822=>1000,25823=>1000,25824=>1000,25825=>1000,25826=>1000,25827=>1000,25828=>1000, + 25829=>1000,25830=>1000,25831=>1000,25832=>1000,25833=>1000,25834=>1000,25835=>1000,25836=>1000,25837=>1000,25838=>1000,25839=>1000,25840=>1000,25841=>1000,25842=>1000,25843=>1000,25844=>1000, + 25845=>1000,25846=>1000,25847=>1000,25848=>1000,25849=>1000,25850=>1000,25851=>1000,25852=>1000,25853=>1000,25854=>1000,25855=>1000,25856=>1000,25857=>1000,25858=>1000,25859=>1000,25860=>1000, + 25861=>1000,25862=>1000,25863=>1000,25864=>1000,25865=>1000,25866=>1000,25867=>1000,25868=>1000,25869=>1000,25870=>1000,25871=>1000,25872=>1000,25873=>1000,25874=>1000,25875=>1000,25876=>1000, + 25877=>1000,25878=>1000,25879=>1000,25880=>1000,25881=>1000,25882=>1000,25883=>1000,25884=>1000,25885=>1000,25886=>1000,25887=>1000,25888=>1000,25889=>1000,25890=>1000,25891=>1000,25892=>1000, + 25893=>1000,25894=>1000,25895=>1000,25896=>1000,25897=>1000,25898=>1000,25899=>1000,25900=>1000,25901=>1000,25902=>1000,25903=>1000,25904=>1000,25905=>1000,25906=>1000,25907=>1000,25908=>1000, + 25909=>1000,25910=>1000,25911=>1000,25912=>1000,25913=>1000,25914=>1000,25915=>1000,25916=>1000,25917=>1000,25918=>1000,25919=>1000,25920=>1000,25921=>1000,25922=>1000,25923=>1000,25924=>1000, + 25925=>1000,25926=>1000,25927=>1000,25928=>1000,25929=>1000,25930=>1000,25931=>1000,25932=>1000,25933=>1000,25934=>1000,25935=>1000,25936=>1000,25937=>1000,25938=>1000,25939=>1000,25940=>1000, + 25941=>1000,25942=>1000,25943=>1000,25944=>1000,25945=>1000,25946=>1000,25947=>1000,25948=>1000,25949=>1000,25950=>1000,25951=>1000,25952=>1000,25953=>1000,25954=>1000,25955=>1000,25956=>1000, + 25957=>1000,25958=>1000,25959=>1000,25960=>1000,25961=>1000,25962=>1000,25963=>1000,25964=>1000,25965=>1000,25966=>1000,25967=>1000,25968=>1000,25969=>1000,25970=>1000,25971=>1000,25972=>1000, + 25973=>1000,25974=>1000,25975=>1000,25976=>1000,25977=>1000,25978=>1000,25979=>1000,25980=>1000,25981=>1000,25982=>1000,25983=>1000,25984=>1000,25985=>1000,25986=>1000,25987=>1000,25988=>1000, + 25989=>1000,25990=>1000,25991=>1000,25992=>1000,25993=>1000,25994=>1000,25995=>1000,25996=>1000,25997=>1000,25998=>1000,25999=>1000,26000=>1000,26001=>1000,26002=>1000,26003=>1000,26004=>1000, + 26005=>1000,26006=>1000,26007=>1000,26008=>1000,26009=>1000,26010=>1000,26011=>1000,26012=>1000,26013=>1000,26014=>1000,26015=>1000,26016=>1000,26017=>1000,26018=>1000,26019=>1000,26020=>1000, + 26021=>1000,26022=>1000,26023=>1000,26024=>1000,26025=>1000,26026=>1000,26027=>1000,26028=>1000,26029=>1000,26030=>1000,26031=>1000,26032=>1000,26033=>1000,26034=>1000,26035=>1000,26036=>1000, + 26037=>1000,26038=>1000,26039=>1000,26040=>1000,26041=>1000,26042=>1000,26043=>1000,26044=>1000,26045=>1000,26046=>1000,26047=>1000,26048=>1000,26049=>1000,26050=>1000,26051=>1000,26052=>1000, + 26053=>1000,26054=>1000,26055=>1000,26056=>1000,26057=>1000,26058=>1000,26059=>1000,26060=>1000,26061=>1000,26062=>1000,26063=>1000,26064=>1000,26065=>1000,26066=>1000,26067=>1000,26068=>1000, + 26069=>1000,26070=>1000,26071=>1000,26072=>1000,26073=>1000,26074=>1000,26075=>1000,26076=>1000,26077=>1000,26078=>1000,26079=>1000,26080=>1000,26081=>1000,26082=>1000,26083=>1000,26084=>1000, + 26085=>1000,26086=>1000,26087=>1000,26088=>1000,26089=>1000,26090=>1000,26091=>1000,26092=>1000,26093=>1000,26094=>1000,26095=>1000,26096=>1000,26097=>1000,26098=>1000,26099=>1000,26100=>1000, + 26101=>1000,26102=>1000,26103=>1000,26104=>1000,26105=>1000,26106=>1000,26107=>1000,26108=>1000,26109=>1000,26110=>1000,26111=>1000,26112=>1000,26113=>1000,26114=>1000,26115=>1000,26116=>1000, + 26117=>1000,26118=>1000,26119=>1000,26120=>1000,26121=>1000,26122=>1000,26123=>1000,26124=>1000,26125=>1000,26126=>1000,26127=>1000,26128=>1000,26129=>1000,26130=>1000,26131=>1000,26132=>1000, + 26133=>1000,26134=>1000,26135=>1000,26136=>1000,26137=>1000,26138=>1000,26139=>1000,26140=>1000,26141=>1000,26142=>1000,26143=>1000,26144=>1000,26145=>1000,26146=>1000,26147=>1000,26148=>1000, + 26149=>1000,26150=>1000,26151=>1000,26152=>1000,26153=>1000,26154=>1000,26155=>1000,26156=>1000,26157=>1000,26158=>1000,26159=>1000,26160=>1000,26161=>1000,26162=>1000,26163=>1000,26164=>1000, + 26165=>1000,26166=>1000,26167=>1000,26168=>1000,26169=>1000,26170=>1000,26171=>1000,26172=>1000,26173=>1000,26174=>1000,26175=>1000,26176=>1000,26177=>1000,26178=>1000,26179=>1000,26180=>1000, + 26181=>1000,26182=>1000,26183=>1000,26184=>1000,26185=>1000,26186=>1000,26187=>1000,26188=>1000,26189=>1000,26190=>1000,26191=>1000,26192=>1000,26193=>1000,26194=>1000,26195=>1000,26196=>1000, + 26197=>1000,26198=>1000,26199=>1000,26200=>1000,26201=>1000,26202=>1000,26203=>1000,26204=>1000,26205=>1000,26206=>1000,26207=>1000,26208=>1000,26209=>1000,26210=>1000,26211=>1000,26212=>1000, + 26213=>1000,26214=>1000,26215=>1000,26216=>1000,26217=>1000,26218=>1000,26219=>1000,26220=>1000,26221=>1000,26222=>1000,26223=>1000,26224=>1000,26225=>1000,26226=>1000,26227=>1000,26228=>1000, + 26229=>1000,26230=>1000,26231=>1000,26232=>1000,26233=>1000,26234=>1000,26235=>1000,26236=>1000,26237=>1000,26238=>1000,26239=>1000,26240=>1000,26241=>1000,26242=>1000,26243=>1000,26244=>1000, + 26245=>1000,26246=>1000,26247=>1000,26248=>1000,26249=>1000,26250=>1000,26251=>1000,26252=>1000,26253=>1000,26254=>1000,26255=>1000,26256=>1000,26257=>1000,26258=>1000,26259=>1000,26260=>1000, + 26261=>1000,26262=>1000,26263=>1000,26264=>1000,26265=>1000,26266=>1000,26267=>1000,26268=>1000,26269=>1000,26270=>1000,26271=>1000,26272=>1000,26273=>1000,26274=>1000,26275=>1000,26276=>1000, + 26277=>1000,26278=>1000,26279=>1000,26280=>1000,26281=>1000,26282=>1000,26283=>1000,26284=>1000,26285=>1000,26286=>1000,26287=>1000,26288=>1000,26289=>1000,26290=>1000,26291=>1000,26292=>1000, + 26293=>1000,26294=>1000,26295=>1000,26296=>1000,26297=>1000,26298=>1000,26299=>1000,26300=>1000,26301=>1000,26302=>1000,26303=>1000,26304=>1000,26305=>1000,26306=>1000,26307=>1000,26308=>1000, + 26309=>1000,26310=>1000,26311=>1000,26312=>1000,26313=>1000,26314=>1000,26315=>1000,26316=>1000,26317=>1000,26318=>1000,26319=>1000,26320=>1000,26321=>1000,26322=>1000,26323=>1000,26324=>1000, + 26325=>1000,26326=>1000,26327=>1000,26328=>1000,26329=>1000,26330=>1000,26331=>1000,26332=>1000,26333=>1000,26334=>1000,26335=>1000,26336=>1000,26337=>1000,26338=>1000,26339=>1000,26340=>1000, + 26341=>1000,26342=>1000,26343=>1000,26344=>1000,26345=>1000,26346=>1000,26347=>1000,26348=>1000,26349=>1000,26350=>1000,26351=>1000,26352=>1000,26353=>1000,26354=>1000,26355=>1000,26356=>1000, + 26357=>1000,26358=>1000,26359=>1000,26360=>1000,26361=>1000,26362=>1000,26363=>1000,26364=>1000,26365=>1000,26366=>1000,26367=>1000,26368=>1000,26369=>1000,26370=>1000,26371=>1000,26372=>1000, + 26373=>1000,26374=>1000,26375=>1000,26376=>1000,26377=>1000,26378=>1000,26379=>1000,26380=>1000,26381=>1000,26382=>1000,26383=>1000,26384=>1000,26385=>1000,26386=>1000,26387=>1000,26388=>1000, + 26389=>1000,26390=>1000,26391=>1000,26392=>1000,26393=>1000,26394=>1000,26395=>1000,26396=>1000,26397=>1000,26398=>1000,26399=>1000,26400=>1000,26401=>1000,26402=>1000,26403=>1000,26404=>1000, + 26405=>1000,26406=>1000,26407=>1000,26408=>1000,26409=>1000,26410=>1000,26411=>1000,26412=>1000,26413=>1000,26414=>1000,26415=>1000,26416=>1000,26417=>1000,26418=>1000,26419=>1000,26420=>1000, + 26421=>1000,26422=>1000,26423=>1000,26424=>1000,26425=>1000,26426=>1000,26427=>1000,26428=>1000,26429=>1000,26430=>1000,26431=>1000,26432=>1000,26433=>1000,26434=>1000,26435=>1000,26436=>1000, + 26437=>1000,26438=>1000,26439=>1000,26440=>1000,26441=>1000,26442=>1000,26443=>1000,26444=>1000,26445=>1000,26446=>1000,26447=>1000,26448=>1000,26449=>1000,26450=>1000,26451=>1000,26452=>1000, + 26453=>1000,26454=>1000,26455=>1000,26456=>1000,26457=>1000,26458=>1000,26459=>1000,26460=>1000,26461=>1000,26462=>1000,26463=>1000,26464=>1000,26465=>1000,26466=>1000,26467=>1000,26468=>1000, + 26469=>1000,26470=>1000,26471=>1000,26472=>1000,26473=>1000,26474=>1000,26475=>1000,26476=>1000,26477=>1000,26478=>1000,26479=>1000,26480=>1000,26481=>1000,26482=>1000,26483=>1000,26484=>1000, + 26485=>1000,26486=>1000,26487=>1000,26488=>1000,26489=>1000,26490=>1000,26491=>1000,26492=>1000,26493=>1000,26494=>1000,26495=>1000,26496=>1000,26497=>1000,26498=>1000,26499=>1000,26500=>1000, + 26501=>1000,26502=>1000,26503=>1000,26504=>1000,26505=>1000,26506=>1000,26507=>1000,26508=>1000,26509=>1000,26510=>1000,26511=>1000,26512=>1000,26513=>1000,26514=>1000,26515=>1000,26516=>1000, + 26517=>1000,26518=>1000,26519=>1000,26520=>1000,26521=>1000,26522=>1000,26523=>1000,26524=>1000,26525=>1000,26526=>1000,26527=>1000,26528=>1000,26529=>1000,26530=>1000,26531=>1000,26532=>1000, + 26533=>1000,26534=>1000,26535=>1000,26536=>1000,26537=>1000,26538=>1000,26539=>1000,26540=>1000,26541=>1000,26542=>1000,26543=>1000,26544=>1000,26545=>1000,26546=>1000,26547=>1000,26548=>1000, + 26549=>1000,26550=>1000,26551=>1000,26552=>1000,26553=>1000,26554=>1000,26555=>1000,26556=>1000,26557=>1000,26558=>1000,26559=>1000,26560=>1000,26561=>1000,26562=>1000,26563=>1000,26564=>1000, + 26565=>1000,26566=>1000,26567=>1000,26568=>1000,26569=>1000,26570=>1000,26571=>1000,26572=>1000,26573=>1000,26574=>1000,26575=>1000,26576=>1000,26577=>1000,26578=>1000,26579=>1000,26580=>1000, + 26581=>1000,26582=>1000,26583=>1000,26584=>1000,26585=>1000,26586=>1000,26587=>1000,26588=>1000,26589=>1000,26590=>1000,26591=>1000,26592=>1000,26593=>1000,26594=>1000,26595=>1000,26596=>1000, + 26597=>1000,26598=>1000,26599=>1000,26600=>1000,26601=>1000,26602=>1000,26603=>1000,26604=>1000,26605=>1000,26606=>1000,26607=>1000,26608=>1000,26609=>1000,26610=>1000,26611=>1000,26612=>1000, + 26613=>1000,26614=>1000,26615=>1000,26616=>1000,26617=>1000,26618=>1000,26619=>1000,26620=>1000,26621=>1000,26622=>1000,26623=>1000,26624=>1000,26625=>1000,26626=>1000,26627=>1000,26628=>1000, + 26629=>1000,26630=>1000,26631=>1000,26632=>1000,26633=>1000,26634=>1000,26635=>1000,26636=>1000,26637=>1000,26638=>1000,26639=>1000,26640=>1000,26641=>1000,26642=>1000,26643=>1000,26644=>1000, + 26645=>1000,26646=>1000,26647=>1000,26648=>1000,26649=>1000,26650=>1000,26651=>1000,26652=>1000,26653=>1000,26654=>1000,26655=>1000,26656=>1000,26657=>1000,26658=>1000,26659=>1000,26660=>1000, + 26661=>1000,26662=>1000,26663=>1000,26664=>1000,26665=>1000,26666=>1000,26667=>1000,26668=>1000,26669=>1000,26670=>1000,26671=>1000,26672=>1000,26673=>1000,26674=>1000,26675=>1000,26676=>1000, + 26677=>1000,26678=>1000,26679=>1000,26680=>1000,26681=>1000,26682=>1000,26683=>1000,26684=>1000,26685=>1000,26686=>1000,26687=>1000,26688=>1000,26689=>1000,26690=>1000,26691=>1000,26692=>1000, + 26693=>1000,26694=>1000,26695=>1000,26696=>1000,26697=>1000,26698=>1000,26699=>1000,26700=>1000,26701=>1000,26702=>1000,26703=>1000,26704=>1000,26705=>1000,26706=>1000,26707=>1000,26708=>1000, + 26709=>1000,26710=>1000,26711=>1000,26712=>1000,26713=>1000,26714=>1000,26715=>1000,26716=>1000,26717=>1000,26718=>1000,26719=>1000,26720=>1000,26721=>1000,26722=>1000,26723=>1000,26724=>1000, + 26725=>1000,26726=>1000,26727=>1000,26728=>1000,26729=>1000,26730=>1000,26731=>1000,26732=>1000,26733=>1000,26734=>1000,26735=>1000,26736=>1000,26737=>1000,26738=>1000,26739=>1000,26740=>1000, + 26741=>1000,26742=>1000,26743=>1000,26744=>1000,26745=>1000,26746=>1000,26747=>1000,26748=>1000,26749=>1000,26750=>1000,26751=>1000,26752=>1000,26753=>1000,26754=>1000,26755=>1000,26756=>1000, + 26757=>1000,26758=>1000,26759=>1000,26760=>1000,26761=>1000,26762=>1000,26763=>1000,26764=>1000,26765=>1000,26766=>1000,26767=>1000,26768=>1000,26769=>1000,26770=>1000,26771=>1000,26772=>1000, + 26773=>1000,26774=>1000,26775=>1000,26776=>1000,26777=>1000,26778=>1000,26779=>1000,26780=>1000,26781=>1000,26782=>1000,26783=>1000,26784=>1000,26785=>1000,26786=>1000,26787=>1000,26788=>1000, + 26789=>1000,26790=>1000,26791=>1000,26792=>1000,26793=>1000,26794=>1000,26795=>1000,26796=>1000,26797=>1000,26798=>1000,26799=>1000,26800=>1000,26801=>1000,26802=>1000,26803=>1000,26804=>1000, + 26805=>1000,26806=>1000,26807=>1000,26808=>1000,26809=>1000,26810=>1000,26811=>1000,26812=>1000,26813=>1000,26814=>1000,26815=>1000,26816=>1000,26817=>1000,26818=>1000,26819=>1000,26820=>1000, + 26821=>1000,26822=>1000,26823=>1000,26824=>1000,26825=>1000,26826=>1000,26827=>1000,26828=>1000,26829=>1000,26830=>1000,26831=>1000,26832=>1000,26833=>1000,26834=>1000,26835=>1000,26836=>1000, + 26837=>1000,26838=>1000,26839=>1000,26840=>1000,26841=>1000,26842=>1000,26843=>1000,26844=>1000,26845=>1000,26846=>1000,26847=>1000,26848=>1000,26849=>1000,26850=>1000,26851=>1000,26852=>1000, + 26853=>1000,26854=>1000,26855=>1000,26856=>1000,26857=>1000,26858=>1000,26859=>1000,26860=>1000,26861=>1000,26862=>1000,26863=>1000,26864=>1000,26865=>1000,26866=>1000,26867=>1000,26868=>1000, + 26869=>1000,26870=>1000,26871=>1000,26872=>1000,26873=>1000,26874=>1000,26875=>1000,26876=>1000,26877=>1000,26878=>1000,26879=>1000,26880=>1000,26881=>1000,26882=>1000,26883=>1000,26884=>1000, + 26885=>1000,26886=>1000,26887=>1000,26888=>1000,26889=>1000,26890=>1000,26891=>1000,26892=>1000,26893=>1000,26894=>1000,26895=>1000,26896=>1000,26897=>1000,26898=>1000,26899=>1000,26900=>1000, + 26901=>1000,26902=>1000,26903=>1000,26904=>1000,26905=>1000,26906=>1000,26907=>1000,26908=>1000,26909=>1000,26910=>1000,26911=>1000,26912=>1000,26913=>1000,26914=>1000,26915=>1000,26916=>1000, + 26917=>1000,26918=>1000,26919=>1000,26920=>1000,26921=>1000,26922=>1000,26923=>1000,26924=>1000,26925=>1000,26926=>1000,26927=>1000,26928=>1000,26929=>1000,26930=>1000,26931=>1000,26932=>1000, + 26933=>1000,26934=>1000,26935=>1000,26936=>1000,26937=>1000,26938=>1000,26939=>1000,26940=>1000,26941=>1000,26942=>1000,26943=>1000,26944=>1000,26945=>1000,26946=>1000,26947=>1000,26948=>1000, + 26949=>1000,26950=>1000,26951=>1000,26952=>1000,26953=>1000,26954=>1000,26955=>1000,26956=>1000,26957=>1000,26958=>1000,26959=>1000,26960=>1000,26961=>1000,26962=>1000,26963=>1000,26964=>1000, + 26965=>1000,26966=>1000,26967=>1000,26968=>1000,26969=>1000,26970=>1000,26971=>1000,26972=>1000,26973=>1000,26974=>1000,26975=>1000,26976=>1000,26977=>1000,26978=>1000,26979=>1000,26980=>1000, + 26981=>1000,26982=>1000,26983=>1000,26984=>1000,26985=>1000,26986=>1000,26987=>1000,26988=>1000,26989=>1000,26990=>1000,26991=>1000,26992=>1000,26993=>1000,26994=>1000,26995=>1000,26996=>1000, + 26997=>1000,26998=>1000,26999=>1000,27000=>1000,27001=>1000,27002=>1000,27003=>1000,27004=>1000,27005=>1000,27006=>1000,27007=>1000,27008=>1000,27009=>1000,27010=>1000,27011=>1000,27012=>1000, + 27013=>1000,27014=>1000,27015=>1000,27016=>1000,27017=>1000,27018=>1000,27019=>1000,27020=>1000,27021=>1000,27022=>1000,27023=>1000,27024=>1000,27025=>1000,27026=>1000,27027=>1000,27028=>1000, + 27029=>1000,27030=>1000,27031=>1000,27032=>1000,27033=>1000,27034=>1000,27035=>1000,27036=>1000,27037=>1000,27038=>1000,27039=>1000,27040=>1000,27041=>1000,27042=>1000,27043=>1000,27044=>1000, + 27045=>1000,27046=>1000,27047=>1000,27048=>1000,27049=>1000,27050=>1000,27051=>1000,27052=>1000,27053=>1000,27054=>1000,27055=>1000,27056=>1000,27057=>1000,27058=>1000,27059=>1000,27060=>1000, + 27061=>1000,27062=>1000,27063=>1000,27064=>1000,27065=>1000,27066=>1000,27067=>1000,27068=>1000,27069=>1000,27070=>1000,27071=>1000,27072=>1000,27073=>1000,27074=>1000,27075=>1000,27076=>1000, + 27077=>1000,27078=>1000,27079=>1000,27080=>1000,27081=>1000,27082=>1000,27083=>1000,27084=>1000,27085=>1000,27086=>1000,27087=>1000,27088=>1000,27089=>1000,27090=>1000,27091=>1000,27092=>1000, + 27093=>1000,27094=>1000,27095=>1000,27096=>1000,27097=>1000,27098=>1000,27099=>1000,27100=>1000,27101=>1000,27102=>1000,27103=>1000,27104=>1000,27105=>1000,27106=>1000,27107=>1000,27108=>1000, + 27109=>1000,27110=>1000,27111=>1000,27112=>1000,27113=>1000,27114=>1000,27115=>1000,27116=>1000,27117=>1000,27118=>1000,27119=>1000,27120=>1000,27121=>1000,27122=>1000,27123=>1000,27124=>1000, + 27125=>1000,27126=>1000,27127=>1000,27128=>1000,27129=>1000,27130=>1000,27131=>1000,27132=>1000,27133=>1000,27134=>1000,27135=>1000,27136=>1000,27137=>1000,27138=>1000,27139=>1000,27140=>1000, + 27141=>1000,27142=>1000,27143=>1000,27144=>1000,27145=>1000,27146=>1000,27147=>1000,27148=>1000,27149=>1000,27150=>1000,27151=>1000,27152=>1000,27153=>1000,27154=>1000,27155=>1000,27156=>1000, + 27157=>1000,27158=>1000,27159=>1000,27160=>1000,27161=>1000,27162=>1000,27163=>1000,27164=>1000,27165=>1000,27166=>1000,27167=>1000,27168=>1000,27169=>1000,27170=>1000,27171=>1000,27172=>1000, + 27173=>1000,27174=>1000,27175=>1000,27176=>1000,27177=>1000,27178=>1000,27179=>1000,27180=>1000,27181=>1000,27182=>1000,27183=>1000,27184=>1000,27185=>1000,27186=>1000,27187=>1000,27188=>1000, + 27189=>1000,27190=>1000,27191=>1000,27192=>1000,27193=>1000,27194=>1000,27195=>1000,27196=>1000,27197=>1000,27198=>1000,27199=>1000,27200=>1000,27201=>1000,27202=>1000,27203=>1000,27204=>1000, + 27205=>1000,27206=>1000,27207=>1000,27208=>1000,27209=>1000,27210=>1000,27211=>1000,27212=>1000,27213=>1000,27214=>1000,27215=>1000,27216=>1000,27217=>1000,27218=>1000,27219=>1000,27220=>1000, + 27221=>1000,27222=>1000,27223=>1000,27224=>1000,27225=>1000,27226=>1000,27227=>1000,27228=>1000,27229=>1000,27230=>1000,27231=>1000,27232=>1000,27233=>1000,27234=>1000,27235=>1000,27236=>1000, + 27237=>1000,27238=>1000,27239=>1000,27240=>1000,27241=>1000,27242=>1000,27243=>1000,27244=>1000,27245=>1000,27246=>1000,27247=>1000,27248=>1000,27249=>1000,27250=>1000,27251=>1000,27252=>1000, + 27253=>1000,27254=>1000,27255=>1000,27256=>1000,27257=>1000,27258=>1000,27259=>1000,27260=>1000,27261=>1000,27262=>1000,27263=>1000,27264=>1000,27265=>1000,27266=>1000,27267=>1000,27268=>1000, + 27269=>1000,27270=>1000,27271=>1000,27272=>1000,27273=>1000,27274=>1000,27275=>1000,27276=>1000,27277=>1000,27278=>1000,27279=>1000,27280=>1000,27281=>1000,27282=>1000,27283=>1000,27284=>1000, + 27285=>1000,27286=>1000,27287=>1000,27288=>1000,27289=>1000,27290=>1000,27291=>1000,27292=>1000,27293=>1000,27294=>1000,27295=>1000,27296=>1000,27297=>1000,27298=>1000,27299=>1000,27300=>1000, + 27301=>1000,27302=>1000,27303=>1000,27304=>1000,27305=>1000,27306=>1000,27307=>1000,27308=>1000,27309=>1000,27310=>1000,27311=>1000,27312=>1000,27313=>1000,27314=>1000,27315=>1000,27316=>1000, + 27317=>1000,27318=>1000,27319=>1000,27320=>1000,27321=>1000,27322=>1000,27323=>1000,27324=>1000,27325=>1000,27326=>1000,27327=>1000,27328=>1000,27329=>1000,27330=>1000,27331=>1000,27332=>1000, + 27333=>1000,27334=>1000,27335=>1000,27336=>1000,27337=>1000,27338=>1000,27339=>1000,27340=>1000,27341=>1000,27342=>1000,27343=>1000,27344=>1000,27345=>1000,27346=>1000,27347=>1000,27348=>1000, + 27349=>1000,27350=>1000,27351=>1000,27352=>1000,27353=>1000,27354=>1000,27355=>1000,27356=>1000,27357=>1000,27358=>1000,27359=>1000,27360=>1000,27361=>1000,27362=>1000,27363=>1000,27364=>1000, + 27365=>1000,27366=>1000,27367=>1000,27368=>1000,27369=>1000,27370=>1000,27371=>1000,27372=>1000,27373=>1000,27374=>1000,27375=>1000,27376=>1000,27377=>1000,27378=>1000,27379=>1000,27380=>1000, + 27381=>1000,27382=>1000,27383=>1000,27384=>1000,27385=>1000,27386=>1000,27387=>1000,27388=>1000,27389=>1000,27390=>1000,27391=>1000,27392=>1000,27393=>1000,27394=>1000,27395=>1000,27396=>1000, + 27397=>1000,27398=>1000,27399=>1000,27400=>1000,27401=>1000,27402=>1000,27403=>1000,27404=>1000,27405=>1000,27406=>1000,27407=>1000,27408=>1000,27409=>1000,27410=>1000,27411=>1000,27412=>1000, + 27413=>1000,27414=>1000,27415=>1000,27416=>1000,27417=>1000,27418=>1000,27419=>1000,27420=>1000,27421=>1000,27422=>1000,27423=>1000,27424=>1000,27425=>1000,27426=>1000,27427=>1000,27428=>1000, + 27429=>1000,27430=>1000,27431=>1000,27432=>1000,27433=>1000,27434=>1000,27435=>1000,27436=>1000,27437=>1000,27438=>1000,27439=>1000,27440=>1000,27441=>1000,27442=>1000,27443=>1000,27444=>1000, + 27445=>1000,27446=>1000,27447=>1000,27448=>1000,27449=>1000,27450=>1000,27451=>1000,27452=>1000,27453=>1000,27454=>1000,27455=>1000,27456=>1000,27457=>1000,27458=>1000,27459=>1000,27460=>1000, + 27461=>1000,27462=>1000,27463=>1000,27464=>1000,27465=>1000,27466=>1000,27467=>1000,27468=>1000,27469=>1000,27470=>1000,27471=>1000,27472=>1000,27473=>1000,27474=>1000,27475=>1000,27476=>1000, + 27477=>1000,27478=>1000,27479=>1000,27480=>1000,27481=>1000,27482=>1000,27483=>1000,27484=>1000,27485=>1000,27486=>1000,27487=>1000,27488=>1000,27489=>1000,27490=>1000,27491=>1000,27492=>1000, + 27493=>1000,27494=>1000,27495=>1000,27496=>1000,27497=>1000,27498=>1000,27499=>1000,27500=>1000,27501=>1000,27502=>1000,27503=>1000,27504=>1000,27505=>1000,27506=>1000,27507=>1000,27508=>1000, + 27509=>1000,27510=>1000,27511=>1000,27512=>1000,27513=>1000,27514=>1000,27515=>1000,27516=>1000,27517=>1000,27518=>1000,27519=>1000,27520=>1000,27521=>1000,27522=>1000,27523=>1000,27524=>1000, + 27525=>1000,27526=>1000,27527=>1000,27528=>1000,27529=>1000,27530=>1000,27531=>1000,27532=>1000,27533=>1000,27534=>1000,27535=>1000,27536=>1000,27537=>1000,27538=>1000,27539=>1000,27540=>1000, + 27541=>1000,27542=>1000,27543=>1000,27544=>1000,27545=>1000,27546=>1000,27547=>1000,27548=>1000,27549=>1000,27550=>1000,27551=>1000,27552=>1000,27553=>1000,27554=>1000,27555=>1000,27556=>1000, + 27557=>1000,27558=>1000,27559=>1000,27560=>1000,27561=>1000,27562=>1000,27563=>1000,27564=>1000,27565=>1000,27566=>1000,27567=>1000,27568=>1000,27569=>1000,27570=>1000,27571=>1000,27572=>1000, + 27573=>1000,27574=>1000,27575=>1000,27576=>1000,27577=>1000,27578=>1000,27579=>1000,27580=>1000,27581=>1000,27582=>1000,27583=>1000,27584=>1000,27585=>1000,27586=>1000,27587=>1000,27588=>1000, + 27589=>1000,27590=>1000,27591=>1000,27592=>1000,27593=>1000,27594=>1000,27595=>1000,27596=>1000,27597=>1000,27598=>1000,27599=>1000,27600=>1000,27601=>1000,27602=>1000,27603=>1000,27604=>1000, + 27605=>1000,27606=>1000,27607=>1000,27608=>1000,27609=>1000,27610=>1000,27611=>1000,27612=>1000,27613=>1000,27614=>1000,27615=>1000,27616=>1000,27617=>1000,27618=>1000,27619=>1000,27620=>1000, + 27621=>1000,27622=>1000,27623=>1000,27624=>1000,27625=>1000,27626=>1000,27627=>1000,27628=>1000,27629=>1000,27630=>1000,27631=>1000,27632=>1000,27633=>1000,27634=>1000,27635=>1000,27636=>1000, + 27637=>1000,27638=>1000,27639=>1000,27640=>1000,27641=>1000,27642=>1000,27643=>1000,27644=>1000,27645=>1000,27646=>1000,27647=>1000,27648=>1000,27649=>1000,27650=>1000,27651=>1000,27652=>1000, + 27653=>1000,27654=>1000,27655=>1000,27656=>1000,27657=>1000,27658=>1000,27659=>1000,27660=>1000,27661=>1000,27662=>1000,27663=>1000,27664=>1000,27665=>1000,27666=>1000,27667=>1000,27668=>1000, + 27669=>1000,27670=>1000,27671=>1000,27672=>1000,27673=>1000,27674=>1000,27675=>1000,27676=>1000,27677=>1000,27678=>1000,27679=>1000,27680=>1000,27681=>1000,27682=>1000,27683=>1000,27684=>1000, + 27685=>1000,27686=>1000,27687=>1000,27688=>1000,27689=>1000,27690=>1000,27691=>1000,27692=>1000,27693=>1000,27694=>1000,27695=>1000,27696=>1000,27697=>1000,27698=>1000,27699=>1000,27700=>1000, + 27701=>1000,27702=>1000,27703=>1000,27704=>1000,27705=>1000,27706=>1000,27707=>1000,27708=>1000,27709=>1000,27710=>1000,27711=>1000,27712=>1000,27713=>1000,27714=>1000,27715=>1000,27716=>1000, + 27717=>1000,27718=>1000,27719=>1000,27720=>1000,27721=>1000,27722=>1000,27723=>1000,27724=>1000,27725=>1000,27726=>1000,27727=>1000,27728=>1000,27729=>1000,27730=>1000,27731=>1000,27732=>1000, + 27733=>1000,27734=>1000,27735=>1000,27736=>1000,27737=>1000,27738=>1000,27739=>1000,27740=>1000,27741=>1000,27742=>1000,27743=>1000,27744=>1000,27745=>1000,27746=>1000,27747=>1000,27748=>1000, + 27749=>1000,27750=>1000,27751=>1000,27752=>1000,27753=>1000,27754=>1000,27755=>1000,27756=>1000,27757=>1000,27758=>1000,27759=>1000,27760=>1000,27761=>1000,27762=>1000,27763=>1000,27764=>1000, + 27765=>1000,27766=>1000,27767=>1000,27768=>1000,27769=>1000,27770=>1000,27771=>1000,27772=>1000,27773=>1000,27774=>1000,27775=>1000,27776=>1000,27777=>1000,27778=>1000,27779=>1000,27780=>1000, + 27781=>1000,27782=>1000,27783=>1000,27784=>1000,27785=>1000,27786=>1000,27787=>1000,27788=>1000,27789=>1000,27790=>1000,27791=>1000,27792=>1000,27793=>1000,27794=>1000,27795=>1000,27796=>1000, + 27797=>1000,27798=>1000,27799=>1000,27800=>1000,27801=>1000,27802=>1000,27803=>1000,27804=>1000,27805=>1000,27806=>1000,27807=>1000,27808=>1000,27809=>1000,27810=>1000,27811=>1000,27812=>1000, + 27813=>1000,27814=>1000,27815=>1000,27816=>1000,27817=>1000,27818=>1000,27819=>1000,27820=>1000,27821=>1000,27822=>1000,27823=>1000,27824=>1000,27825=>1000,27826=>1000,27827=>1000,27828=>1000, + 27829=>1000,27830=>1000,27831=>1000,27832=>1000,27833=>1000,27834=>1000,27835=>1000,27836=>1000,27837=>1000,27838=>1000,27839=>1000,27840=>1000,27841=>1000,27842=>1000,27843=>1000,27844=>1000, + 27845=>1000,27846=>1000,27847=>1000,27848=>1000,27849=>1000,27850=>1000,27851=>1000,27852=>1000,27853=>1000,27854=>1000,27855=>1000,27856=>1000,27857=>1000,27858=>1000,27859=>1000,27860=>1000, + 27861=>1000,27862=>1000,27863=>1000,27864=>1000,27865=>1000,27866=>1000,27867=>1000,27868=>1000,27869=>1000,27870=>1000,27871=>1000,27872=>1000,27873=>1000,27874=>1000,27875=>1000,27876=>1000, + 27877=>1000,27878=>1000,27879=>1000,27880=>1000,27881=>1000,27882=>1000,27883=>1000,27884=>1000,27885=>1000,27886=>1000,27887=>1000,27888=>1000,27889=>1000,27890=>1000,27891=>1000,27892=>1000, + 27893=>1000,27894=>1000,27895=>1000,27896=>1000,27897=>1000,27898=>1000,27899=>1000,27900=>1000,27901=>1000,27902=>1000,27903=>1000,27904=>1000,27905=>1000,27906=>1000,27907=>1000,27908=>1000, + 27909=>1000,27910=>1000,27911=>1000,27912=>1000,27913=>1000,27914=>1000,27915=>1000,27916=>1000,27917=>1000,27918=>1000,27919=>1000,27920=>1000,27921=>1000,27922=>1000,27923=>1000,27924=>1000, + 27925=>1000,27926=>1000,27927=>1000,27928=>1000,27929=>1000,27930=>1000,27931=>1000,27932=>1000,27933=>1000,27934=>1000,27935=>1000,27936=>1000,27937=>1000,27938=>1000,27939=>1000,27940=>1000, + 27941=>1000,27942=>1000,27943=>1000,27944=>1000,27945=>1000,27946=>1000,27947=>1000,27948=>1000,27949=>1000,27950=>1000,27951=>1000,27952=>1000,27953=>1000,27954=>1000,27955=>1000,27956=>1000, + 27957=>1000,27958=>1000,27959=>1000,27960=>1000,27961=>1000,27962=>1000,27963=>1000,27964=>1000,27965=>1000,27966=>1000,27967=>1000,27968=>1000,27969=>1000,27970=>1000,27971=>1000,27972=>1000, + 27973=>1000,27974=>1000,27975=>1000,27976=>1000,27977=>1000,27978=>1000,27979=>1000,27980=>1000,27981=>1000,27982=>1000,27983=>1000,27984=>1000,27985=>1000,27986=>1000,27987=>1000,27988=>1000, + 27989=>1000,27990=>1000,27991=>1000,27992=>1000,27993=>1000,27994=>1000,27995=>1000,27996=>1000,27997=>1000,27998=>1000,27999=>1000,28000=>1000,28001=>1000,28002=>1000,28003=>1000,28004=>1000, + 28005=>1000,28006=>1000,28007=>1000,28008=>1000,28009=>1000,28010=>1000,28011=>1000,28012=>1000,28013=>1000,28014=>1000,28015=>1000,28016=>1000,28017=>1000,28018=>1000,28019=>1000,28020=>1000, + 28021=>1000,28022=>1000,28023=>1000,28024=>1000,28025=>1000,28026=>1000,28027=>1000,28028=>1000,28029=>1000,28030=>1000,28031=>1000,28032=>1000,28033=>1000,28034=>1000,28035=>1000,28036=>1000, + 28037=>1000,28038=>1000,28039=>1000,28040=>1000,28041=>1000,28042=>1000,28043=>1000,28044=>1000,28045=>1000,28046=>1000,28047=>1000,28048=>1000,28049=>1000,28050=>1000,28051=>1000,28052=>1000, + 28053=>1000,28054=>1000,28055=>1000,28056=>1000,28057=>1000,28058=>1000,28059=>1000,28060=>1000,28061=>1000,28062=>1000,28063=>1000,28064=>1000,28065=>1000,28066=>1000,28067=>1000,28068=>1000, + 28069=>1000,28070=>1000,28071=>1000,28072=>1000,28073=>1000,28074=>1000,28075=>1000,28076=>1000,28077=>1000,28078=>1000,28079=>1000,28080=>1000,28081=>1000,28082=>1000,28083=>1000,28084=>1000, + 28085=>1000,28086=>1000,28087=>1000,28088=>1000,28089=>1000,28090=>1000,28091=>1000,28092=>1000,28093=>1000,28094=>1000,28095=>1000,28096=>1000,28097=>1000,28098=>1000,28099=>1000,28100=>1000, + 28101=>1000,28102=>1000,28103=>1000,28104=>1000,28105=>1000,28106=>1000,28107=>1000,28108=>1000,28109=>1000,28110=>1000,28111=>1000,28112=>1000,28113=>1000,28114=>1000,28115=>1000,28116=>1000, + 28117=>1000,28118=>1000,28119=>1000,28120=>1000,28121=>1000,28122=>1000,28123=>1000,28124=>1000,28125=>1000,28126=>1000,28127=>1000,28128=>1000,28129=>1000,28130=>1000,28131=>1000,28132=>1000, + 28133=>1000,28134=>1000,28135=>1000,28136=>1000,28137=>1000,28138=>1000,28139=>1000,28140=>1000,28141=>1000,28142=>1000,28143=>1000,28144=>1000,28145=>1000,28146=>1000,28147=>1000,28148=>1000, + 28149=>1000,28150=>1000,28151=>1000,28152=>1000,28153=>1000,28154=>1000,28155=>1000,28156=>1000,28157=>1000,28158=>1000,28159=>1000,28160=>1000,28161=>1000,28162=>1000,28163=>1000,28164=>1000, + 28165=>1000,28166=>1000,28167=>1000,28168=>1000,28169=>1000,28170=>1000,28171=>1000,28172=>1000,28173=>1000,28174=>1000,28175=>1000,28176=>1000,28177=>1000,28178=>1000,28179=>1000,28180=>1000, + 28181=>1000,28182=>1000,28183=>1000,28184=>1000,28185=>1000,28186=>1000,28187=>1000,28188=>1000,28189=>1000,28190=>1000,28191=>1000,28192=>1000,28193=>1000,28194=>1000,28195=>1000,28196=>1000, + 28197=>1000,28198=>1000,28199=>1000,28200=>1000,28201=>1000,28202=>1000,28203=>1000,28204=>1000,28205=>1000,28206=>1000,28207=>1000,28208=>1000,28209=>1000,28210=>1000,28211=>1000,28212=>1000, + 28213=>1000,28214=>1000,28215=>1000,28216=>1000,28217=>1000,28218=>1000,28219=>1000,28220=>1000,28221=>1000,28222=>1000,28223=>1000,28224=>1000,28225=>1000,28226=>1000,28227=>1000,28228=>1000, + 28229=>1000,28230=>1000,28231=>1000,28232=>1000,28233=>1000,28234=>1000,28235=>1000,28236=>1000,28237=>1000,28238=>1000,28239=>1000,28240=>1000,28241=>1000,28242=>1000,28243=>1000,28244=>1000, + 28245=>1000,28246=>1000,28247=>1000,28248=>1000,28249=>1000,28250=>1000,28251=>1000,28252=>1000,28253=>1000,28254=>1000,28255=>1000,28256=>1000,28257=>1000,28258=>1000,28259=>1000,28260=>1000, + 28261=>1000,28262=>1000,28263=>1000,28264=>1000,28265=>1000,28266=>1000,28267=>1000,28268=>1000,28269=>1000,28270=>1000,28271=>1000,28272=>1000,28273=>1000,28274=>1000,28275=>1000,28276=>1000, + 28277=>1000,28278=>1000,28279=>1000,28280=>1000,28281=>1000,28282=>1000,28283=>1000,28284=>1000,28285=>1000,28286=>1000,28287=>1000,28288=>1000,28289=>1000,28290=>1000,28291=>1000,28292=>1000, + 28293=>1000,28294=>1000,28295=>1000,28296=>1000,28297=>1000,28298=>1000,28299=>1000,28300=>1000,28301=>1000,28302=>1000,28303=>1000,28304=>1000,28305=>1000,28306=>1000,28307=>1000,28308=>1000, + 28309=>1000,28310=>1000,28311=>1000,28312=>1000,28313=>1000,28314=>1000,28315=>1000,28316=>1000,28317=>1000,28318=>1000,28319=>1000,28320=>1000,28321=>1000,28322=>1000,28323=>1000,28324=>1000, + 28325=>1000,28326=>1000,28327=>1000,28328=>1000,28329=>1000,28330=>1000,28331=>1000,28332=>1000,28333=>1000,28334=>1000,28335=>1000,28336=>1000,28337=>1000,28338=>1000,28339=>1000,28340=>1000, + 28341=>1000,28342=>1000,28343=>1000,28344=>1000,28345=>1000,28346=>1000,28347=>1000,28348=>1000,28349=>1000,28350=>1000,28351=>1000,28352=>1000,28353=>1000,28354=>1000,28355=>1000,28356=>1000, + 28357=>1000,28358=>1000,28359=>1000,28360=>1000,28361=>1000,28362=>1000,28363=>1000,28364=>1000,28365=>1000,28366=>1000,28367=>1000,28368=>1000,28369=>1000,28370=>1000,28371=>1000,28372=>1000, + 28373=>1000,28374=>1000,28375=>1000,28376=>1000,28377=>1000,28378=>1000,28379=>1000,28380=>1000,28381=>1000,28382=>1000,28383=>1000,28384=>1000,28385=>1000,28386=>1000,28387=>1000,28388=>1000, + 28389=>1000,28390=>1000,28391=>1000,28392=>1000,28393=>1000,28394=>1000,28395=>1000,28396=>1000,28397=>1000,28398=>1000,28399=>1000,28400=>1000,28401=>1000,28402=>1000,28403=>1000,28404=>1000, + 28405=>1000,28406=>1000,28407=>1000,28408=>1000,28409=>1000,28410=>1000,28411=>1000,28412=>1000,28413=>1000,28414=>1000,28415=>1000,28416=>1000,28417=>1000,28418=>1000,28419=>1000,28420=>1000, + 28421=>1000,28422=>1000,28423=>1000,28424=>1000,28425=>1000,28426=>1000,28427=>1000,28428=>1000,28429=>1000,28430=>1000,28431=>1000,28432=>1000,28433=>1000,28434=>1000,28435=>1000,28436=>1000, + 28437=>1000,28438=>1000,28439=>1000,28440=>1000,28441=>1000,28442=>1000,28443=>1000,28444=>1000,28445=>1000,28446=>1000,28447=>1000,28448=>1000,28449=>1000,28450=>1000,28451=>1000,28452=>1000, + 28453=>1000,28454=>1000,28455=>1000,28456=>1000,28457=>1000,28458=>1000,28459=>1000,28460=>1000,28461=>1000,28462=>1000,28463=>1000,28464=>1000,28465=>1000,28466=>1000,28467=>1000,28468=>1000, + 28469=>1000,28470=>1000,28471=>1000,28472=>1000,28473=>1000,28474=>1000,28475=>1000,28476=>1000,28477=>1000,28478=>1000,28479=>1000,28480=>1000,28481=>1000,28482=>1000,28483=>1000,28484=>1000, + 28485=>1000,28486=>1000,28487=>1000,28488=>1000,28489=>1000,28490=>1000,28491=>1000,28492=>1000,28493=>1000,28494=>1000,28495=>1000,28496=>1000,28497=>1000,28498=>1000,28499=>1000,28500=>1000, + 28501=>1000,28502=>1000,28503=>1000,28504=>1000,28505=>1000,28506=>1000,28507=>1000,28508=>1000,28509=>1000,28510=>1000,28511=>1000,28512=>1000,28513=>1000,28514=>1000,28515=>1000,28516=>1000, + 28517=>1000,28518=>1000,28519=>1000,28520=>1000,28521=>1000,28522=>1000,28523=>1000,28524=>1000,28525=>1000,28526=>1000,28527=>1000,28528=>1000,28529=>1000,28530=>1000,28531=>1000,28532=>1000, + 28533=>1000,28534=>1000,28535=>1000,28536=>1000,28537=>1000,28538=>1000,28539=>1000,28540=>1000,28541=>1000,28542=>1000,28543=>1000,28544=>1000,28545=>1000,28546=>1000,28547=>1000,28548=>1000, + 28549=>1000,28550=>1000,28551=>1000,28552=>1000,28553=>1000,28554=>1000,28555=>1000,28556=>1000,28557=>1000,28558=>1000,28559=>1000,28560=>1000,28561=>1000,28562=>1000,28563=>1000,28564=>1000, + 28565=>1000,28566=>1000,28567=>1000,28568=>1000,28569=>1000,28570=>1000,28571=>1000,28572=>1000,28573=>1000,28574=>1000,28575=>1000,28576=>1000,28577=>1000,28578=>1000,28579=>1000,28580=>1000, + 28581=>1000,28582=>1000,28583=>1000,28584=>1000,28585=>1000,28586=>1000,28587=>1000,28588=>1000,28589=>1000,28590=>1000,28591=>1000,28592=>1000,28593=>1000,28594=>1000,28595=>1000,28596=>1000, + 28597=>1000,28598=>1000,28599=>1000,28600=>1000,28601=>1000,28602=>1000,28603=>1000,28604=>1000,28605=>1000,28606=>1000,28607=>1000,28608=>1000,28609=>1000,28610=>1000,28611=>1000,28612=>1000, + 28613=>1000,28614=>1000,28615=>1000,28616=>1000,28617=>1000,28618=>1000,28619=>1000,28620=>1000,28621=>1000,28622=>1000,28623=>1000,28624=>1000,28625=>1000,28626=>1000,28627=>1000,28628=>1000, + 28629=>1000,28630=>1000,28631=>1000,28632=>1000,28633=>1000,28634=>1000,28635=>1000,28636=>1000,28637=>1000,28638=>1000,28639=>1000,28640=>1000,28641=>1000,28642=>1000,28643=>1000,28644=>1000, + 28645=>1000,28646=>1000,28647=>1000,28648=>1000,28649=>1000,28650=>1000,28651=>1000,28652=>1000,28653=>1000,28654=>1000,28655=>1000,28656=>1000,28657=>1000,28658=>1000,28659=>1000,28660=>1000, + 28661=>1000,28662=>1000,28663=>1000,28664=>1000,28665=>1000,28666=>1000,28667=>1000,28668=>1000,28669=>1000,28670=>1000,28671=>1000,28672=>1000,28673=>1000,28674=>1000,28675=>1000,28676=>1000, + 28677=>1000,28678=>1000,28679=>1000,28680=>1000,28681=>1000,28682=>1000,28683=>1000,28684=>1000,28685=>1000,28686=>1000,28687=>1000,28688=>1000,28689=>1000,28690=>1000,28691=>1000,28692=>1000, + 28693=>1000,28694=>1000,28695=>1000,28696=>1000,28697=>1000,28698=>1000,28699=>1000,28700=>1000,28701=>1000,28702=>1000,28703=>1000,28704=>1000,28705=>1000,28706=>1000,28707=>1000,28708=>1000, + 28709=>1000,28710=>1000,28711=>1000,28712=>1000,28713=>1000,28714=>1000,28715=>1000,28716=>1000,28717=>1000,28718=>1000,28719=>1000,28720=>1000,28721=>1000,28722=>1000,28723=>1000,28724=>1000, + 28725=>1000,28726=>1000,28727=>1000,28728=>1000,28729=>1000,28730=>1000,28731=>1000,28732=>1000,28733=>1000,28734=>1000,28735=>1000,28736=>1000,28737=>1000,28738=>1000,28739=>1000,28740=>1000, + 28741=>1000,28742=>1000,28743=>1000,28744=>1000,28745=>1000,28746=>1000,28747=>1000,28748=>1000,28749=>1000,28750=>1000,28751=>1000,28752=>1000,28753=>1000,28754=>1000,28755=>1000,28756=>1000, + 28757=>1000,28758=>1000,28759=>1000,28760=>1000,28761=>1000,28762=>1000,28763=>1000,28764=>1000,28765=>1000,28766=>1000,28767=>1000,28768=>1000,28769=>1000,28770=>1000,28771=>1000,28772=>1000, + 28773=>1000,28774=>1000,28775=>1000,28776=>1000,28777=>1000,28778=>1000,28779=>1000,28780=>1000,28781=>1000,28782=>1000,28783=>1000,28784=>1000,28785=>1000,28786=>1000,28787=>1000,28788=>1000, + 28789=>1000,28790=>1000,28791=>1000,28792=>1000,28793=>1000,28794=>1000,28795=>1000,28796=>1000,28797=>1000,28798=>1000,28799=>1000,28800=>1000,28801=>1000,28802=>1000,28803=>1000,28804=>1000, + 28805=>1000,28806=>1000,28807=>1000,28808=>1000,28809=>1000,28810=>1000,28811=>1000,28812=>1000,28813=>1000,28814=>1000,28815=>1000,28816=>1000,28817=>1000,28818=>1000,28819=>1000,28820=>1000, + 28821=>1000,28822=>1000,28823=>1000,28824=>1000,28825=>1000,28826=>1000,28827=>1000,28828=>1000,28829=>1000,28830=>1000,28831=>1000,28832=>1000,28833=>1000,28834=>1000,28835=>1000,28836=>1000, + 28837=>1000,28838=>1000,28839=>1000,28840=>1000,28841=>1000,28842=>1000,28843=>1000,28844=>1000,28845=>1000,28846=>1000,28847=>1000,28848=>1000,28849=>1000,28850=>1000,28851=>1000,28852=>1000, + 28853=>1000,28854=>1000,28855=>1000,28856=>1000,28857=>1000,28858=>1000,28859=>1000,28860=>1000,28861=>1000,28862=>1000,28863=>1000,28864=>1000,28865=>1000,28866=>1000,28867=>1000,28868=>1000, + 28869=>1000,28870=>1000,28871=>1000,28872=>1000,28873=>1000,28874=>1000,28875=>1000,28876=>1000,28877=>1000,28878=>1000,28879=>1000,28880=>1000,28881=>1000,28882=>1000,28883=>1000,28884=>1000, + 28885=>1000,28886=>1000,28887=>1000,28888=>1000,28889=>1000,28890=>1000,28891=>1000,28892=>1000,28893=>1000,28894=>1000,28895=>1000,28896=>1000,28897=>1000,28898=>1000,28899=>1000,28900=>1000, + 28901=>1000,28902=>1000,28903=>1000,28904=>1000,28905=>1000,28906=>1000,28907=>1000,28908=>1000,28909=>1000,28910=>1000,28911=>1000,28912=>1000,28913=>1000,28914=>1000,28915=>1000,28916=>1000, + 28917=>1000,28918=>1000,28919=>1000,28920=>1000,28921=>1000,28922=>1000,28923=>1000,28924=>1000,28925=>1000,28926=>1000,28927=>1000,28928=>1000,28929=>1000,28930=>1000,28931=>1000,28932=>1000, + 28933=>1000,28934=>1000,28935=>1000,28936=>1000,28937=>1000,28938=>1000,28939=>1000,28940=>1000,28941=>1000,28942=>1000,28943=>1000,28944=>1000,28945=>1000,28946=>1000,28947=>1000,28948=>1000, + 28949=>1000,28950=>1000,28951=>1000,28952=>1000,28953=>1000,28954=>1000,28955=>1000,28956=>1000,28957=>1000,28958=>1000,28959=>1000,28960=>1000,28961=>1000,28962=>1000,28963=>1000,28964=>1000, + 28965=>1000,28966=>1000,28967=>1000,28968=>1000,28969=>1000,28970=>1000,28971=>1000,28972=>1000,28973=>1000,28974=>1000,28975=>1000,28976=>1000,28977=>1000,28978=>1000,28979=>1000,28980=>1000, + 28981=>1000,28982=>1000,28983=>1000,28984=>1000,28985=>1000,28986=>1000,28987=>1000,28988=>1000,28989=>1000,28990=>1000,28991=>1000,28992=>1000,28993=>1000,28994=>1000,28995=>1000,28996=>1000, + 28997=>1000,28998=>1000,28999=>1000,29000=>1000,29001=>1000,29002=>1000,29003=>1000,29004=>1000,29005=>1000,29006=>1000,29007=>1000,29008=>1000,29009=>1000,29010=>1000,29011=>1000,29012=>1000, + 29013=>1000,29014=>1000,29015=>1000,29016=>1000,29017=>1000,29018=>1000,29019=>1000,29020=>1000,29021=>1000,29022=>1000,29023=>1000,29024=>1000,29025=>1000,29026=>1000,29027=>1000,29028=>1000, + 29029=>1000,29030=>1000,29031=>1000,29032=>1000,29033=>1000,29034=>1000,29035=>1000,29036=>1000,29037=>1000,29038=>1000,29039=>1000,29040=>1000,29041=>1000,29042=>1000,29043=>1000,29044=>1000, + 29045=>1000,29046=>1000,29047=>1000,29048=>1000,29049=>1000,29050=>1000,29051=>1000,29052=>1000,29053=>1000,29054=>1000,29055=>1000,29056=>1000,29057=>1000,29058=>1000,29059=>1000,29060=>1000, + 29061=>1000,29062=>1000,29063=>1000,29064=>1000,29065=>1000,29066=>1000,29067=>1000,29068=>1000,29069=>1000,29070=>1000,29071=>1000,29072=>1000,29073=>1000,29074=>1000,29075=>1000,29076=>1000, + 29077=>1000,29078=>1000,29079=>1000,29080=>1000,29081=>1000,29082=>1000,29083=>1000,29084=>1000,29085=>1000,29086=>1000,29087=>1000,29088=>1000,29089=>1000,29090=>1000,29091=>1000,29092=>1000, + 29093=>1000,29094=>1000,29095=>1000,29096=>1000,29097=>1000,29098=>1000,29099=>1000,29100=>1000,29101=>1000,29102=>1000,29103=>1000,29104=>1000,29105=>1000,29106=>1000,29107=>1000,29108=>1000, + 29109=>1000,29110=>1000,29111=>1000,29112=>1000,29113=>1000,29114=>1000,29115=>1000,29116=>1000,29117=>1000,29118=>1000,29119=>1000,29120=>1000,29121=>1000,29122=>1000,29123=>1000,29124=>1000, + 29125=>1000,29126=>1000,29127=>1000,29128=>1000,29129=>1000,29130=>1000,29131=>1000,29132=>1000,29133=>1000,29134=>1000,29135=>1000,29136=>1000,29137=>1000,29138=>1000,29139=>1000,29140=>1000, + 29141=>1000,29142=>1000,29143=>1000,29144=>1000,29145=>1000,29146=>1000,29147=>1000,29148=>1000,29149=>1000,29150=>1000,29151=>1000,29152=>1000,29153=>1000,29154=>1000,29155=>1000,29156=>1000, + 29157=>1000,29158=>1000,29159=>1000,29160=>1000,29161=>1000,29162=>1000,29163=>1000,29164=>1000,29165=>1000,29166=>1000,29167=>1000,29168=>1000,29169=>1000,29170=>1000,29171=>1000,29172=>1000, + 29173=>1000,29174=>1000,29175=>1000,29176=>1000,29177=>1000,29178=>1000,29179=>1000,29180=>1000,29181=>1000,29182=>1000,29183=>1000,29184=>1000,29185=>1000,29186=>1000,29187=>1000,29188=>1000, + 29189=>1000,29190=>1000,29191=>1000,29192=>1000,29193=>1000,29194=>1000,29195=>1000,29196=>1000,29197=>1000,29198=>1000,29199=>1000,29200=>1000,29201=>1000,29202=>1000,29203=>1000,29204=>1000, + 29205=>1000,29206=>1000,29207=>1000,29208=>1000,29209=>1000,29210=>1000,29211=>1000,29212=>1000,29213=>1000,29214=>1000,29215=>1000,29216=>1000,29217=>1000,29218=>1000,29219=>1000,29220=>1000, + 29221=>1000,29222=>1000,29223=>1000,29224=>1000,29225=>1000,29226=>1000,29227=>1000,29228=>1000,29229=>1000,29230=>1000,29231=>1000,29232=>1000,29233=>1000,29234=>1000,29235=>1000,29236=>1000, + 29237=>1000,29238=>1000,29239=>1000,29240=>1000,29241=>1000,29242=>1000,29243=>1000,29244=>1000,29245=>1000,29246=>1000,29247=>1000,29248=>1000,29249=>1000,29250=>1000,29251=>1000,29252=>1000, + 29253=>1000,29254=>1000,29255=>1000,29256=>1000,29257=>1000,29258=>1000,29259=>1000,29260=>1000,29261=>1000,29262=>1000,29263=>1000,29264=>1000,29265=>1000,29266=>1000,29267=>1000,29268=>1000, + 29269=>1000,29270=>1000,29271=>1000,29272=>1000,29273=>1000,29274=>1000,29275=>1000,29276=>1000,29277=>1000,29278=>1000,29279=>1000,29280=>1000,29281=>1000,29282=>1000,29283=>1000,29284=>1000, + 29285=>1000,29286=>1000,29287=>1000,29288=>1000,29289=>1000,29290=>1000,29291=>1000,29292=>1000,29293=>1000,29294=>1000,29295=>1000,29296=>1000,29297=>1000,29298=>1000,29299=>1000,29300=>1000, + 29301=>1000,29302=>1000,29303=>1000,29304=>1000,29305=>1000,29306=>1000,29307=>1000,29308=>1000,29309=>1000,29310=>1000,29311=>1000,29312=>1000,29313=>1000,29314=>1000,29315=>1000,29316=>1000, + 29317=>1000,29318=>1000,29319=>1000,29320=>1000,29321=>1000,29322=>1000,29323=>1000,29324=>1000,29325=>1000,29326=>1000,29327=>1000,29328=>1000,29329=>1000,29330=>1000,29331=>1000,29332=>1000, + 29333=>1000,29334=>1000,29335=>1000,29336=>1000,29337=>1000,29338=>1000,29339=>1000,29340=>1000,29341=>1000,29342=>1000,29343=>1000,29344=>1000,29345=>1000,29346=>1000,29347=>1000,29348=>1000, + 29349=>1000,29350=>1000,29351=>1000,29352=>1000,29353=>1000,29354=>1000,29355=>1000,29356=>1000,29357=>1000,29358=>1000,29359=>1000,29360=>1000,29361=>1000,29362=>1000,29363=>1000,29364=>1000, + 29365=>1000,29366=>1000,29367=>1000,29368=>1000,29369=>1000,29370=>1000,29371=>1000,29372=>1000,29373=>1000,29374=>1000,29375=>1000,29376=>1000,29377=>1000,29378=>1000,29379=>1000,29380=>1000, + 29381=>1000,29382=>1000,29383=>1000,29384=>1000,29385=>1000,29386=>1000,29387=>1000,29388=>1000,29389=>1000,29390=>1000,29391=>1000,29392=>1000,29393=>1000,29394=>1000,29395=>1000,29396=>1000, + 29397=>1000,29398=>1000,29399=>1000,29400=>1000,29401=>1000,29402=>1000,29403=>1000,29404=>1000,29405=>1000,29406=>1000,29407=>1000,29408=>1000,29409=>1000,29410=>1000,29411=>1000,29412=>1000, + 29413=>1000,29414=>1000,29415=>1000,29416=>1000,29417=>1000,29418=>1000,29419=>1000,29420=>1000,29421=>1000,29422=>1000,29423=>1000,29424=>1000,29425=>1000,29426=>1000,29427=>1000,29428=>1000, + 29429=>1000,29430=>1000,29431=>1000,29432=>1000,29433=>1000,29434=>1000,29435=>1000,29436=>1000,29437=>1000,29438=>1000,29439=>1000,29440=>1000,29441=>1000,29442=>1000,29443=>1000,29444=>1000, + 29445=>1000,29446=>1000,29447=>1000,29448=>1000,29449=>1000,29450=>1000,29451=>1000,29452=>1000,29453=>1000,29454=>1000,29455=>1000,29456=>1000,29457=>1000,29458=>1000,29459=>1000,29460=>1000, + 29461=>1000,29462=>1000,29463=>1000,29464=>1000,29465=>1000,29466=>1000,29467=>1000,29468=>1000,29469=>1000,29470=>1000,29471=>1000,29472=>1000,29473=>1000,29474=>1000,29475=>1000,29476=>1000, + 29477=>1000,29478=>1000,29479=>1000,29480=>1000,29481=>1000,29482=>1000,29483=>1000,29484=>1000,29485=>1000,29486=>1000,29487=>1000,29488=>1000,29489=>1000,29490=>1000,29491=>1000,29492=>1000, + 29493=>1000,29494=>1000,29495=>1000,29496=>1000,29497=>1000,29498=>1000,29499=>1000,29500=>1000,29501=>1000,29502=>1000,29503=>1000,29504=>1000,29505=>1000,29506=>1000,29507=>1000,29508=>1000, + 29509=>1000,29510=>1000,29511=>1000,29512=>1000,29513=>1000,29514=>1000,29515=>1000,29516=>1000,29517=>1000,29518=>1000,29519=>1000,29520=>1000,29521=>1000,29522=>1000,29523=>1000,29524=>1000, + 29525=>1000,29526=>1000,29527=>1000,29528=>1000,29529=>1000,29530=>1000,29531=>1000,29532=>1000,29533=>1000,29534=>1000,29535=>1000,29536=>1000,29537=>1000,29538=>1000,29539=>1000,29540=>1000, + 29541=>1000,29542=>1000,29543=>1000,29544=>1000,29545=>1000,29546=>1000,29547=>1000,29548=>1000,29549=>1000,29550=>1000,29551=>1000,29552=>1000,29553=>1000,29554=>1000,29555=>1000,29556=>1000, + 29557=>1000,29558=>1000,29559=>1000,29560=>1000,29561=>1000,29562=>1000,29563=>1000,29564=>1000,29565=>1000,29566=>1000,29567=>1000,29568=>1000,29569=>1000,29570=>1000,29571=>1000,29572=>1000, + 29573=>1000,29574=>1000,29575=>1000,29576=>1000,29577=>1000,29578=>1000,29579=>1000,29580=>1000,29581=>1000,29582=>1000,29583=>1000,29584=>1000,29585=>1000,29586=>1000,29587=>1000,29588=>1000, + 29589=>1000,29590=>1000,29591=>1000,29592=>1000,29593=>1000,29594=>1000,29595=>1000,29596=>1000,29597=>1000,29598=>1000,29599=>1000,29600=>1000,29601=>1000,29602=>1000,29603=>1000,29604=>1000, + 29605=>1000,29606=>1000,29607=>1000,29608=>1000,29609=>1000,29610=>1000,29611=>1000,29612=>1000,29613=>1000,29614=>1000,29615=>1000,29616=>1000,29617=>1000,29618=>1000,29619=>1000,29620=>1000, + 29621=>1000,29622=>1000,29623=>1000,29624=>1000,29625=>1000,29626=>1000,29627=>1000,29628=>1000,29629=>1000,29630=>1000,29631=>1000,29632=>1000,29633=>1000,29634=>1000,29635=>1000,29636=>1000, + 29637=>1000,29638=>1000,29639=>1000,29640=>1000,29641=>1000,29642=>1000,29643=>1000,29644=>1000,29645=>1000,29646=>1000,29647=>1000,29648=>1000,29649=>1000,29650=>1000,29651=>1000,29652=>1000, + 29653=>1000,29654=>1000,29655=>1000,29656=>1000,29657=>1000,29658=>1000,29659=>1000,29660=>1000,29661=>1000,29662=>1000,29663=>1000,29664=>1000,29665=>1000,29666=>1000,29667=>1000,29668=>1000, + 29669=>1000,29670=>1000,29671=>1000,29672=>1000,29673=>1000,29674=>1000,29675=>1000,29676=>1000,29677=>1000,29678=>1000,29679=>1000,29680=>1000,29681=>1000,29682=>1000,29683=>1000,29684=>1000, + 29685=>1000,29686=>1000,29687=>1000,29688=>1000,29689=>1000,29690=>1000,29691=>1000,29692=>1000,29693=>1000,29694=>1000,29695=>1000,29696=>1000,29697=>1000,29698=>1000,29699=>1000,29700=>1000, + 29701=>1000,29702=>1000,29703=>1000,29704=>1000,29705=>1000,29706=>1000,29707=>1000,29708=>1000,29709=>1000,29710=>1000,29711=>1000,29712=>1000,29713=>1000,29714=>1000,29715=>1000,29716=>1000, + 29717=>1000,29718=>1000,29719=>1000,29720=>1000,29721=>1000,29722=>1000,29723=>1000,29724=>1000,29725=>1000,29726=>1000,29727=>1000,29728=>1000,29729=>1000,29730=>1000,29731=>1000,29732=>1000, + 29733=>1000,29734=>1000,29735=>1000,29736=>1000,29737=>1000,29738=>1000,29739=>1000,29740=>1000,29741=>1000,29742=>1000,29743=>1000,29744=>1000,29745=>1000,29746=>1000,29747=>1000,29748=>1000, + 29749=>1000,29750=>1000,29751=>1000,29752=>1000,29753=>1000,29754=>1000,29755=>1000,29756=>1000,29757=>1000,29758=>1000,29759=>1000,29760=>1000,29761=>1000,29762=>1000,29763=>1000,29764=>1000, + 29765=>1000,29766=>1000,29767=>1000,29768=>1000,29769=>1000,29770=>1000,29771=>1000,29772=>1000,29773=>1000,29774=>1000,29775=>1000,29776=>1000,29777=>1000,29778=>1000,29779=>1000,29780=>1000, + 29781=>1000,29782=>1000,29783=>1000,29784=>1000,29785=>1000,29786=>1000,29787=>1000,29788=>1000,29789=>1000,29790=>1000,29791=>1000,29792=>1000,29793=>1000,29794=>1000,29795=>1000,29796=>1000, + 29797=>1000,29798=>1000,29799=>1000,29800=>1000,29801=>1000,29802=>1000,29803=>1000,29804=>1000,29805=>1000,29806=>1000,29807=>1000,29808=>1000,29809=>1000,29810=>1000,29811=>1000,29812=>1000, + 29813=>1000,29814=>1000,29815=>1000,29816=>1000,29817=>1000,29818=>1000,29819=>1000,29820=>1000,29821=>1000,29822=>1000,29823=>1000,29824=>1000,29825=>1000,29826=>1000,29827=>1000,29828=>1000, + 29829=>1000,29830=>1000,29831=>1000,29832=>1000,29833=>1000,29834=>1000,29835=>1000,29836=>1000,29837=>1000,29838=>1000,29839=>1000,29840=>1000,29841=>1000,29842=>1000,29843=>1000,29844=>1000, + 29845=>1000,29846=>1000,29847=>1000,29848=>1000,29849=>1000,29850=>1000,29851=>1000,29852=>1000,29853=>1000,29854=>1000,29855=>1000,29856=>1000,29857=>1000,29858=>1000,29859=>1000,29860=>1000, + 29861=>1000,29862=>1000,29863=>1000,29864=>1000,29865=>1000,29866=>1000,29867=>1000,29868=>1000,29869=>1000,29870=>1000,29871=>1000,29872=>1000,29873=>1000,29874=>1000,29875=>1000,29876=>1000, + 29877=>1000,29878=>1000,29879=>1000,29880=>1000,29881=>1000,29882=>1000,29883=>1000,29884=>1000,29885=>1000,29886=>1000,29887=>1000,29888=>1000,29889=>1000,29890=>1000,29891=>1000,29892=>1000, + 29893=>1000,29894=>1000,29895=>1000,29896=>1000,29897=>1000,29898=>1000,29899=>1000,29900=>1000,29901=>1000,29902=>1000,29903=>1000,29904=>1000,29905=>1000,29906=>1000,29907=>1000,29908=>1000, + 29909=>1000,29910=>1000,29911=>1000,29912=>1000,29913=>1000,29914=>1000,29915=>1000,29916=>1000,29917=>1000,29918=>1000,29919=>1000,29920=>1000,29921=>1000,29922=>1000,29923=>1000,29924=>1000, + 29925=>1000,29926=>1000,29927=>1000,29928=>1000,29929=>1000,29930=>1000,29931=>1000,29932=>1000,29933=>1000,29934=>1000,29935=>1000,29936=>1000,29937=>1000,29938=>1000,29939=>1000,29940=>1000, + 29941=>1000,29942=>1000,29943=>1000,29944=>1000,29945=>1000,29946=>1000,29947=>1000,29948=>1000,29949=>1000,29950=>1000,29951=>1000,29952=>1000,29953=>1000,29954=>1000,29955=>1000,29956=>1000, + 29957=>1000,29958=>1000,29959=>1000,29960=>1000,29961=>1000,29962=>1000,29963=>1000,29964=>1000,29965=>1000,29966=>1000,29967=>1000,29968=>1000,29969=>1000,29970=>1000,29971=>1000,29972=>1000, + 29973=>1000,29974=>1000,29975=>1000,29976=>1000,29977=>1000,29978=>1000,29979=>1000,29980=>1000,29981=>1000,29982=>1000,29983=>1000,29984=>1000,29985=>1000,29986=>1000,29987=>1000,29988=>1000, + 29989=>1000,29990=>1000,29991=>1000,29992=>1000,29993=>1000,29994=>1000,29995=>1000,29996=>1000,29997=>1000,29998=>1000,29999=>1000,30000=>1000,30001=>1000,30002=>1000,30003=>1000,30004=>1000, + 30005=>1000,30006=>1000,30007=>1000,30008=>1000,30009=>1000,30010=>1000,30011=>1000,30012=>1000,30013=>1000,30014=>1000,30015=>1000,30016=>1000,30017=>1000,30018=>1000,30019=>1000,30020=>1000, + 30021=>1000,30022=>1000,30023=>1000,30024=>1000,30025=>1000,30026=>1000,30027=>1000,30028=>1000,30029=>1000,30030=>1000,30031=>1000,30032=>1000,30033=>1000,30034=>1000,30035=>1000,30036=>1000, + 30037=>1000,30038=>1000,30039=>1000,30040=>1000,30041=>1000,30042=>1000,30043=>1000,30044=>1000,30045=>1000,30046=>1000,30047=>1000,30048=>1000,30049=>1000,30050=>1000,30051=>1000,30052=>1000, + 30053=>1000,30054=>1000,30055=>1000,30056=>1000,30057=>1000,30058=>1000,30059=>1000,30060=>1000,30061=>1000,30062=>1000,30063=>1000,30064=>1000,30065=>1000,30066=>1000,30067=>1000,30068=>1000, + 30069=>1000,30070=>1000,30071=>1000,30072=>1000,30073=>1000,30074=>1000,30075=>1000,30076=>1000,30077=>1000,30078=>1000,30079=>1000,30080=>1000,30081=>1000,30082=>1000,30083=>1000,30084=>1000, + 30085=>1000,30086=>1000,30087=>1000,30088=>1000,30089=>1000,30090=>1000,30091=>1000,30092=>1000,30093=>1000,30094=>1000,30095=>1000,30096=>1000,30097=>1000,30098=>1000,30099=>1000,30100=>1000, + 30101=>1000,30102=>1000,30103=>1000,30104=>1000,30105=>1000,30106=>1000,30107=>1000,30108=>1000,30109=>1000,30110=>1000,30111=>1000,30112=>1000,30113=>1000,30114=>1000,30115=>1000,30116=>1000, + 30117=>1000,30118=>1000,30119=>1000,30120=>1000,30121=>1000,30122=>1000,30123=>1000,30124=>1000,30125=>1000,30126=>1000,30127=>1000,30128=>1000,30129=>1000,30130=>1000,30131=>1000,30132=>1000, + 30133=>1000,30134=>1000,30135=>1000,30136=>1000,30137=>1000,30138=>1000,30139=>1000,30140=>1000,30141=>1000,30142=>1000,30143=>1000,30144=>1000,30145=>1000,30146=>1000,30147=>1000,30148=>1000, + 30149=>1000,30150=>1000,30151=>1000,30152=>1000,30153=>1000,30154=>1000,30155=>1000,30156=>1000,30157=>1000,30158=>1000,30159=>1000,30160=>1000,30161=>1000,30162=>1000,30163=>1000,30164=>1000, + 30165=>1000,30166=>1000,30167=>1000,30168=>1000,30169=>1000,30170=>1000,30171=>1000,30172=>1000,30173=>1000,30174=>1000,30175=>1000,30176=>1000,30177=>1000,30178=>1000,30179=>1000,30180=>1000, + 30181=>1000,30182=>1000,30183=>1000,30184=>1000,30185=>1000,30186=>1000,30187=>1000,30188=>1000,30189=>1000,30190=>1000,30191=>1000,30192=>1000,30193=>1000,30194=>1000,30195=>1000,30196=>1000, + 30197=>1000,30198=>1000,30199=>1000,30200=>1000,30201=>1000,30202=>1000,30203=>1000,30204=>1000,30205=>1000,30206=>1000,30207=>1000,30208=>1000,30209=>1000,30210=>1000,30211=>1000,30212=>1000, + 30213=>1000,30214=>1000,30215=>1000,30216=>1000,30217=>1000,30218=>1000,30219=>1000,30220=>1000,30221=>1000,30222=>1000,30223=>1000,30224=>1000,30225=>1000,30226=>1000,30227=>1000,30228=>1000, + 30229=>1000,30230=>1000,30231=>1000,30232=>1000,30233=>1000,30234=>1000,30235=>1000,30236=>1000,30237=>1000,30238=>1000,30239=>1000,30240=>1000,30241=>1000,30242=>1000,30243=>1000,30244=>1000, + 30245=>1000,30246=>1000,30247=>1000,30248=>1000,30249=>1000,30250=>1000,30251=>1000,30252=>1000,30253=>1000,30254=>1000,30255=>1000,30256=>1000,30257=>1000,30258=>1000,30259=>1000,30260=>1000, + 30261=>1000,30262=>1000,30263=>1000,30264=>1000,30265=>1000,30266=>1000,30267=>1000,30268=>1000,30269=>1000,30270=>1000,30271=>1000,30272=>1000,30273=>1000,30274=>1000,30275=>1000,30276=>1000, + 30277=>1000,30278=>1000,30279=>1000,30280=>1000,30281=>1000,30282=>1000,30283=>1000,30284=>1000,30285=>1000,30286=>1000,30287=>1000,30288=>1000,30289=>1000,30290=>1000,30291=>1000,30292=>1000, + 30293=>1000,30294=>1000,30295=>1000,30296=>1000,30297=>1000,30298=>1000,30299=>1000,30300=>1000,30301=>1000,30302=>1000,30303=>1000,30304=>1000,30305=>1000,30306=>1000,30307=>1000,30308=>1000, + 30309=>1000,30310=>1000,30311=>1000,30312=>1000,30313=>1000,30314=>1000,30315=>1000,30316=>1000,30317=>1000,30318=>1000,30319=>1000,30320=>1000,30321=>1000,30322=>1000,30323=>1000,30324=>1000, + 30325=>1000,30326=>1000,30327=>1000,30328=>1000,30329=>1000,30330=>1000,30331=>1000,30332=>1000,30333=>1000,30334=>1000,30335=>1000,30336=>1000,30337=>1000,30338=>1000,30339=>1000,30340=>1000, + 30341=>1000,30342=>1000,30343=>1000,30344=>1000,30345=>1000,30346=>1000,30347=>1000,30348=>1000,30349=>1000,30350=>1000,30351=>1000,30352=>1000,30353=>1000,30354=>1000,30355=>1000,30356=>1000, + 30357=>1000,30358=>1000,30359=>1000,30360=>1000,30361=>1000,30362=>1000,30363=>1000,30364=>1000,30365=>1000,30366=>1000,30367=>1000,30368=>1000,30369=>1000,30370=>1000,30371=>1000,30372=>1000, + 30373=>1000,30374=>1000,30375=>1000,30376=>1000,30377=>1000,30378=>1000,30379=>1000,30380=>1000,30381=>1000,30382=>1000,30383=>1000,30384=>1000,30385=>1000,30386=>1000,30387=>1000,30388=>1000, + 30389=>1000,30390=>1000,30391=>1000,30392=>1000,30393=>1000,30394=>1000,30395=>1000,30396=>1000,30397=>1000,30398=>1000,30399=>1000,30400=>1000,30401=>1000,30402=>1000,30403=>1000,30404=>1000, + 30405=>1000,30406=>1000,30407=>1000,30408=>1000,30409=>1000,30410=>1000,30411=>1000,30412=>1000,30413=>1000,30414=>1000,30415=>1000,30416=>1000,30417=>1000,30418=>1000,30419=>1000,30420=>1000, + 30421=>1000,30422=>1000,30423=>1000,30424=>1000,30425=>1000,30426=>1000,30427=>1000,30428=>1000,30429=>1000,30430=>1000,30431=>1000,30432=>1000,30433=>1000,30434=>1000,30435=>1000,30436=>1000, + 30437=>1000,30438=>1000,30439=>1000,30440=>1000,30441=>1000,30442=>1000,30443=>1000,30444=>1000,30445=>1000,30446=>1000,30447=>1000,30448=>1000,30449=>1000,30450=>1000,30451=>1000,30452=>1000, + 30453=>1000,30454=>1000,30455=>1000,30456=>1000,30457=>1000,30458=>1000,30459=>1000,30460=>1000,30461=>1000,30462=>1000,30463=>1000,30464=>1000,30465=>1000,30466=>1000,30467=>1000,30468=>1000, + 30469=>1000,30470=>1000,30471=>1000,30472=>1000,30473=>1000,30474=>1000,30475=>1000,30476=>1000,30477=>1000,30478=>1000,30479=>1000,30480=>1000,30481=>1000,30482=>1000,30483=>1000,30484=>1000, + 30485=>1000,30486=>1000,30487=>1000,30488=>1000,30489=>1000,30490=>1000,30491=>1000,30492=>1000,30493=>1000,30494=>1000,30495=>1000,30496=>1000,30497=>1000,30498=>1000,30499=>1000,30500=>1000, + 30501=>1000,30502=>1000,30503=>1000,30504=>1000,30505=>1000,30506=>1000,30507=>1000,30508=>1000,30509=>1000,30510=>1000,30511=>1000,30512=>1000,30513=>1000,30514=>1000,30515=>1000,30516=>1000, + 30517=>1000,30518=>1000,30519=>1000,30520=>1000,30521=>1000,30522=>1000,30523=>1000,30524=>1000,30525=>1000,30526=>1000,30527=>1000,30528=>1000,30529=>1000,30530=>1000,30531=>1000,30532=>1000, + 30533=>1000,30534=>1000,30535=>1000,30536=>1000,30537=>1000,30538=>1000,30539=>1000,30540=>1000,30541=>1000,30542=>1000,30543=>1000,30544=>1000,30545=>1000,30546=>1000,30547=>1000,30548=>1000, + 30549=>1000,30550=>1000,30551=>1000,30552=>1000,30553=>1000,30554=>1000,30555=>1000,30556=>1000,30557=>1000,30558=>1000,30559=>1000,30560=>1000,30561=>1000,30562=>1000,30563=>1000,30564=>1000, + 30565=>1000,30566=>1000,30567=>1000,30568=>1000,30569=>1000,30570=>1000,30571=>1000,30572=>1000,30573=>1000,30574=>1000,30575=>1000,30576=>1000,30577=>1000,30578=>1000,30579=>1000,30580=>1000, + 30581=>1000,30582=>1000,30583=>1000,30584=>1000,30585=>1000,30586=>1000,30587=>1000,30588=>1000,30589=>1000,30590=>1000,30591=>1000,30592=>1000,30593=>1000,30594=>1000,30595=>1000,30596=>1000, + 30597=>1000,30598=>1000,30599=>1000,30600=>1000,30601=>1000,30602=>1000,30603=>1000,30604=>1000,30605=>1000,30606=>1000,30607=>1000,30608=>1000,30609=>1000,30610=>1000,30611=>1000,30612=>1000, + 30613=>1000,30614=>1000,30615=>1000,30616=>1000,30617=>1000,30618=>1000,30619=>1000,30620=>1000,30621=>1000,30622=>1000,30623=>1000,30624=>1000,30625=>1000,30626=>1000,30627=>1000,30628=>1000, + 30629=>1000,30630=>1000,30631=>1000,30632=>1000,30633=>1000,30634=>1000,30635=>1000,30636=>1000,30637=>1000,30638=>1000,30639=>1000,30640=>1000,30641=>1000,30642=>1000,30643=>1000,30644=>1000, + 30645=>1000,30646=>1000,30647=>1000,30648=>1000,30649=>1000,30650=>1000,30651=>1000,30652=>1000,30653=>1000,30654=>1000,30655=>1000,30656=>1000,30657=>1000,30658=>1000,30659=>1000,30660=>1000, + 30661=>1000,30662=>1000,30663=>1000,30664=>1000,30665=>1000,30666=>1000,30667=>1000,30668=>1000,30669=>1000,30670=>1000,30671=>1000,30672=>1000,30673=>1000,30674=>1000,30675=>1000,30676=>1000, + 30677=>1000,30678=>1000,30679=>1000,30680=>1000,30681=>1000,30682=>1000,30683=>1000,30684=>1000,30685=>1000,30686=>1000,30687=>1000,30688=>1000,30689=>1000,30690=>1000,30691=>1000,30692=>1000, + 30693=>1000,30694=>1000,30695=>1000,30696=>1000,30697=>1000,30698=>1000,30699=>1000,30700=>1000,30701=>1000,30702=>1000,30703=>1000,30704=>1000,30705=>1000,30706=>1000,30707=>1000,30708=>1000, + 30709=>1000,30710=>1000,30711=>1000,30712=>1000,30713=>1000,30714=>1000,30715=>1000,30716=>1000,30717=>1000,30718=>1000,30719=>1000,30720=>1000,30721=>1000,30722=>1000,30723=>1000,30724=>1000, + 30725=>1000,30726=>1000,30727=>1000,30728=>1000,30729=>1000,30730=>1000,30731=>1000,30732=>1000,30733=>1000,30734=>1000,30735=>1000,30736=>1000,30737=>1000,30738=>1000,30739=>1000,30740=>1000, + 30741=>1000,30742=>1000,30743=>1000,30744=>1000,30745=>1000,30746=>1000,30747=>1000,30748=>1000,30749=>1000,30750=>1000,30751=>1000,30752=>1000,30753=>1000,30754=>1000,30755=>1000,30756=>1000, + 30757=>1000,30758=>1000,30759=>1000,30760=>1000,30761=>1000,30762=>1000,30763=>1000,30764=>1000,30765=>1000,30766=>1000,30767=>1000,30768=>1000,30769=>1000,30770=>1000,30771=>1000,30772=>1000, + 30773=>1000,30774=>1000,30775=>1000,30776=>1000,30777=>1000,30778=>1000,30779=>1000,30780=>1000,30781=>1000,30782=>1000,30783=>1000,30784=>1000,30785=>1000,30786=>1000,30787=>1000,30788=>1000, + 30789=>1000,30790=>1000,30791=>1000,30792=>1000,30793=>1000,30794=>1000,30795=>1000,30796=>1000,30797=>1000,30798=>1000,30799=>1000,30800=>1000,30801=>1000,30802=>1000,30803=>1000,30804=>1000, + 30805=>1000,30806=>1000,30807=>1000,30808=>1000,30809=>1000,30810=>1000,30811=>1000,30812=>1000,30813=>1000,30814=>1000,30815=>1000,30816=>1000,30817=>1000,30818=>1000,30819=>1000,30820=>1000, + 30821=>1000,30822=>1000,30823=>1000,30824=>1000,30825=>1000,30826=>1000,30827=>1000,30828=>1000,30829=>1000,30830=>1000,30831=>1000,30832=>1000,30833=>1000,30834=>1000,30835=>1000,30836=>1000, + 30837=>1000,30838=>1000,30839=>1000,30840=>1000,30841=>1000,30842=>1000,30843=>1000,30844=>1000,30845=>1000,30846=>1000,30847=>1000,30848=>1000,30849=>1000,30850=>1000,30851=>1000,30852=>1000, + 30853=>1000,30854=>1000,30855=>1000,30856=>1000,30857=>1000,30858=>1000,30859=>1000,30860=>1000,30861=>1000,30862=>1000,30863=>1000,30864=>1000,30865=>1000,30866=>1000,30867=>1000,30868=>1000, + 30869=>1000,30870=>1000,30871=>1000,30872=>1000,30873=>1000,30874=>1000,30875=>1000,30876=>1000,30877=>1000,30878=>1000,30879=>1000,30880=>1000,30881=>1000,30882=>1000,30883=>1000,30884=>1000, + 30885=>1000,30886=>1000,30887=>1000,30888=>1000,30889=>1000,30890=>1000,30891=>1000,30892=>1000,30893=>1000,30894=>1000,30895=>1000,30896=>1000,30897=>1000,30898=>1000,30899=>1000,30900=>1000, + 30901=>1000,30902=>1000,30903=>1000,30904=>1000,30905=>1000,30906=>1000,30907=>1000,30908=>1000,30909=>1000,30910=>1000,30911=>1000,30912=>1000,30913=>1000,30914=>1000,30915=>1000,30916=>1000, + 30917=>1000,30918=>1000,30919=>1000,30920=>1000,30921=>1000,30922=>1000,30923=>1000,30924=>1000,30925=>1000,30926=>1000,30927=>1000,30928=>1000,30929=>1000,30930=>1000,30931=>1000,30932=>1000, + 30933=>1000,30934=>1000,30935=>1000,30936=>1000,30937=>1000,30938=>1000,30939=>1000,30940=>1000,30941=>1000,30942=>1000,30943=>1000,30944=>1000,30945=>1000,30946=>1000,30947=>1000,30948=>1000, + 30949=>1000,30950=>1000,30951=>1000,30952=>1000,30953=>1000,30954=>1000,30955=>1000,30956=>1000,30957=>1000,30958=>1000,30959=>1000,30960=>1000,30961=>1000,30962=>1000,30963=>1000,30964=>1000, + 30965=>1000,30966=>1000,30967=>1000,30968=>1000,30969=>1000,30970=>1000,30971=>1000,30972=>1000,30973=>1000,30974=>1000,30975=>1000,30976=>1000,30977=>1000,30978=>1000,30979=>1000,30980=>1000, + 30981=>1000,30982=>1000,30983=>1000,30984=>1000,30985=>1000,30986=>1000,30987=>1000,30988=>1000,30989=>1000,30990=>1000,30991=>1000,30992=>1000,30993=>1000,30994=>1000,30995=>1000,30996=>1000, + 30997=>1000,30998=>1000,30999=>1000,31000=>1000,31001=>1000,31002=>1000,31003=>1000,31004=>1000,31005=>1000,31006=>1000,31007=>1000,31008=>1000,31009=>1000,31010=>1000,31011=>1000,31012=>1000, + 31013=>1000,31014=>1000,31015=>1000,31016=>1000,31017=>1000,31018=>1000,31019=>1000,31020=>1000,31021=>1000,31022=>1000,31023=>1000,31024=>1000,31025=>1000,31026=>1000,31027=>1000,31028=>1000, + 31029=>1000,31030=>1000,31031=>1000,31032=>1000,31033=>1000,31034=>1000,31035=>1000,31036=>1000,31037=>1000,31038=>1000,31039=>1000,31040=>1000,31041=>1000,31042=>1000,31043=>1000,31044=>1000, + 31045=>1000,31046=>1000,31047=>1000,31048=>1000,31049=>1000,31050=>1000,31051=>1000,31052=>1000,31053=>1000,31054=>1000,31055=>1000,31056=>1000,31057=>1000,31058=>1000,31059=>1000,31060=>1000, + 31061=>1000,31062=>1000,31063=>1000,31064=>1000,31065=>1000,31066=>1000,31067=>1000,31068=>1000,31069=>1000,31070=>1000,31071=>1000,31072=>1000,31073=>1000,31074=>1000,31075=>1000,31076=>1000, + 31077=>1000,31078=>1000,31079=>1000,31080=>1000,31081=>1000,31082=>1000,31083=>1000,31084=>1000,31085=>1000,31086=>1000,31087=>1000,31088=>1000,31089=>1000,31090=>1000,31091=>1000,31092=>1000, + 31093=>1000,31094=>1000,31095=>1000,31096=>1000,31097=>1000,31098=>1000,31099=>1000,31100=>1000,31101=>1000,31102=>1000,31103=>1000,31104=>1000,31105=>1000,31106=>1000,31107=>1000,31108=>1000, + 31109=>1000,31110=>1000,31111=>1000,31112=>1000,31113=>1000,31114=>1000,31115=>1000,31116=>1000,31117=>1000,31118=>1000,31119=>1000,31120=>1000,31121=>1000,31122=>1000,31123=>1000,31124=>1000, + 31125=>1000,31126=>1000,31127=>1000,31128=>1000,31129=>1000,31130=>1000,31131=>1000,31132=>1000,31133=>1000,31134=>1000,31135=>1000,31136=>1000,31137=>1000,31138=>1000,31139=>1000,31140=>1000, + 31141=>1000,31142=>1000,31143=>1000,31144=>1000,31145=>1000,31146=>1000,31147=>1000,31148=>1000,31149=>1000,31150=>1000,31151=>1000,31152=>1000,31153=>1000,31154=>1000,31155=>1000,31156=>1000, + 31157=>1000,31158=>1000,31159=>1000,31160=>1000,31161=>1000,31162=>1000,31163=>1000,31164=>1000,31165=>1000,31166=>1000,31167=>1000,31168=>1000,31169=>1000,31170=>1000,31171=>1000,31172=>1000, + 31173=>1000,31174=>1000,31175=>1000,31176=>1000,31177=>1000,31178=>1000,31179=>1000,31180=>1000,31181=>1000,31182=>1000,31183=>1000,31184=>1000,31185=>1000,31186=>1000,31187=>1000,31188=>1000, + 31189=>1000,31190=>1000,31191=>1000,31192=>1000,31193=>1000,31194=>1000,31195=>1000,31196=>1000,31197=>1000,31198=>1000,31199=>1000,31200=>1000,31201=>1000,31202=>1000,31203=>1000,31204=>1000, + 31205=>1000,31206=>1000,31207=>1000,31208=>1000,31209=>1000,31210=>1000,31211=>1000,31212=>1000,31213=>1000,31214=>1000,31215=>1000,31216=>1000,31217=>1000,31218=>1000,31219=>1000,31220=>1000, + 31221=>1000,31222=>1000,31223=>1000,31224=>1000,31225=>1000,31226=>1000,31227=>1000,31228=>1000,31229=>1000,31230=>1000,31231=>1000,31232=>1000,31233=>1000,31234=>1000,31235=>1000,31236=>1000, + 31237=>1000,31238=>1000,31239=>1000,31240=>1000,31241=>1000,31242=>1000,31243=>1000,31244=>1000,31245=>1000,31246=>1000,31247=>1000,31248=>1000,31249=>1000,31250=>1000,31251=>1000,31252=>1000, + 31253=>1000,31254=>1000,31255=>1000,31256=>1000,31257=>1000,31258=>1000,31259=>1000,31260=>1000,31261=>1000,31262=>1000,31263=>1000,31264=>1000,31265=>1000,31266=>1000,31267=>1000,31268=>1000, + 31269=>1000,31270=>1000,31271=>1000,31272=>1000,31273=>1000,31274=>1000,31275=>1000,31276=>1000,31277=>1000,31278=>1000,31279=>1000,31280=>1000,31281=>1000,31282=>1000,31283=>1000,31284=>1000, + 31285=>1000,31286=>1000,31287=>1000,31288=>1000,31289=>1000,31290=>1000,31291=>1000,31292=>1000,31293=>1000,31294=>1000,31295=>1000,31296=>1000,31297=>1000,31298=>1000,31299=>1000,31300=>1000, + 31301=>1000,31302=>1000,31303=>1000,31304=>1000,31305=>1000,31306=>1000,31307=>1000,31308=>1000,31309=>1000,31310=>1000,31311=>1000,31312=>1000,31313=>1000,31314=>1000,31315=>1000,31316=>1000, + 31317=>1000,31318=>1000,31319=>1000,31320=>1000,31321=>1000,31322=>1000,31323=>1000,31324=>1000,31325=>1000,31326=>1000,31327=>1000,31328=>1000,31329=>1000,31330=>1000,31331=>1000,31332=>1000, + 31333=>1000,31334=>1000,31335=>1000,31336=>1000,31337=>1000,31338=>1000,31339=>1000,31340=>1000,31341=>1000,31342=>1000,31343=>1000,31344=>1000,31345=>1000,31346=>1000,31347=>1000,31348=>1000, + 31349=>1000,31350=>1000,31351=>1000,31352=>1000,31353=>1000,31354=>1000,31355=>1000,31356=>1000,31357=>1000,31358=>1000,31359=>1000,31360=>1000,31361=>1000,31362=>1000,31363=>1000,31364=>1000, + 31365=>1000,31366=>1000,31367=>1000,31368=>1000,31369=>1000,31370=>1000,31371=>1000,31372=>1000,31373=>1000,31374=>1000,31375=>1000,31376=>1000,31377=>1000,31378=>1000,31379=>1000,31380=>1000, + 31381=>1000,31382=>1000,31383=>1000,31384=>1000,31385=>1000,31386=>1000,31387=>1000,31388=>1000,31389=>1000,31390=>1000,31391=>1000,31392=>1000,31393=>1000,31394=>1000,31395=>1000,31396=>1000, + 31397=>1000,31398=>1000,31399=>1000,31400=>1000,31401=>1000,31402=>1000,31403=>1000,31404=>1000,31405=>1000,31406=>1000,31407=>1000,31408=>1000,31409=>1000,31410=>1000,31411=>1000,31412=>1000, + 31413=>1000,31414=>1000,31415=>1000,31416=>1000,31417=>1000,31418=>1000,31419=>1000,31420=>1000,31421=>1000,31422=>1000,31423=>1000,31424=>1000,31425=>1000,31426=>1000,31427=>1000,31428=>1000, + 31429=>1000,31430=>1000,31431=>1000,31432=>1000,31433=>1000,31434=>1000,31435=>1000,31436=>1000,31437=>1000,31438=>1000,31439=>1000,31440=>1000,31441=>1000,31442=>1000,31443=>1000,31444=>1000, + 31445=>1000,31446=>1000,31447=>1000,31448=>1000,31449=>1000,31450=>1000,31451=>1000,31452=>1000,31453=>1000,31454=>1000,31455=>1000,31456=>1000,31457=>1000,31458=>1000,31459=>1000,31460=>1000, + 31461=>1000,31462=>1000,31463=>1000,31464=>1000,31465=>1000,31466=>1000,31467=>1000,31468=>1000,31469=>1000,31470=>1000,31471=>1000,31472=>1000,31473=>1000,31474=>1000,31475=>1000,31476=>1000, + 31477=>1000,31478=>1000,31479=>1000,31480=>1000,31481=>1000,31482=>1000,31483=>1000,31484=>1000,31485=>1000,31486=>1000,31487=>1000,31488=>1000,31489=>1000,31490=>1000,31491=>1000,31492=>1000, + 31493=>1000,31494=>1000,31495=>1000,31496=>1000,31497=>1000,31498=>1000,31499=>1000,31500=>1000,31501=>1000,31502=>1000,31503=>1000,31504=>1000,31505=>1000,31506=>1000,31507=>1000,31508=>1000, + 31509=>1000,31510=>1000,31511=>1000,31512=>1000,31513=>1000,31514=>1000,31515=>1000,31516=>1000,31517=>1000,31518=>1000,31519=>1000,31520=>1000,31521=>1000,31522=>1000,31523=>1000,31524=>1000, + 31525=>1000,31526=>1000,31527=>1000,31528=>1000,31529=>1000,31530=>1000,31531=>1000,31532=>1000,31533=>1000,31534=>1000,31535=>1000,31536=>1000,31537=>1000,31538=>1000,31539=>1000,31540=>1000, + 31541=>1000,31542=>1000,31543=>1000,31544=>1000,31545=>1000,31546=>1000,31547=>1000,31548=>1000,31549=>1000,31550=>1000,31551=>1000,31552=>1000,31553=>1000,31554=>1000,31555=>1000,31556=>1000, + 31557=>1000,31558=>1000,31559=>1000,31560=>1000,31561=>1000,31562=>1000,31563=>1000,31564=>1000,31565=>1000,31566=>1000,31567=>1000,31568=>1000,31569=>1000,31570=>1000,31571=>1000,31572=>1000, + 31573=>1000,31574=>1000,31575=>1000,31576=>1000,31577=>1000,31578=>1000,31579=>1000,31580=>1000,31581=>1000,31582=>1000,31583=>1000,31584=>1000,31585=>1000,31586=>1000,31587=>1000,31588=>1000, + 31589=>1000,31590=>1000,31591=>1000,31592=>1000,31593=>1000,31594=>1000,31595=>1000,31596=>1000,31597=>1000,31598=>1000,31599=>1000,31600=>1000,31601=>1000,31602=>1000,31603=>1000,31604=>1000, + 31605=>1000,31606=>1000,31607=>1000,31608=>1000,31609=>1000,31610=>1000,31611=>1000,31612=>1000,31613=>1000,31614=>1000,31615=>1000,31616=>1000,31617=>1000,31618=>1000,31619=>1000,31620=>1000, + 31621=>1000,31622=>1000,31623=>1000,31624=>1000,31625=>1000,31626=>1000,31627=>1000,31628=>1000,31629=>1000,31630=>1000,31631=>1000,31632=>1000,31633=>1000,31634=>1000,31635=>1000,31636=>1000, + 31637=>1000,31638=>1000,31639=>1000,31640=>1000,31641=>1000,31642=>1000,31643=>1000,31644=>1000,31645=>1000,31646=>1000,31647=>1000,31648=>1000,31649=>1000,31650=>1000,31651=>1000,31652=>1000, + 31653=>1000,31654=>1000,31655=>1000,31656=>1000,31657=>1000,31658=>1000,31659=>1000,31660=>1000,31661=>1000,31662=>1000,31663=>1000,31664=>1000,31665=>1000,31666=>1000,31667=>1000,31668=>1000, + 31669=>1000,31670=>1000,31671=>1000,31672=>1000,31673=>1000,31674=>1000,31675=>1000,31676=>1000,31677=>1000,31678=>1000,31679=>1000,31680=>1000,31681=>1000,31682=>1000,31683=>1000,31684=>1000, + 31685=>1000,31686=>1000,31687=>1000,31688=>1000,31689=>1000,31690=>1000,31691=>1000,31692=>1000,31693=>1000,31694=>1000,31695=>1000,31696=>1000,31697=>1000,31698=>1000,31699=>1000,31700=>1000, + 31701=>1000,31702=>1000,31703=>1000,31704=>1000,31705=>1000,31706=>1000,31707=>1000,31708=>1000,31709=>1000,31710=>1000,31711=>1000,31712=>1000,31713=>1000,31714=>1000,31715=>1000,31716=>1000, + 31717=>1000,31718=>1000,31719=>1000,31720=>1000,31721=>1000,31722=>1000,31723=>1000,31724=>1000,31725=>1000,31726=>1000,31727=>1000,31728=>1000,31729=>1000,31730=>1000,31731=>1000,31732=>1000, + 31733=>1000,31734=>1000,31735=>1000,31736=>1000,31737=>1000,31738=>1000,31739=>1000,31740=>1000,31741=>1000,31742=>1000,31743=>1000,31744=>1000,31745=>1000,31746=>1000,31747=>1000,31748=>1000, + 31749=>1000,31750=>1000,31751=>1000,31752=>1000,31753=>1000,31754=>1000,31755=>1000,31756=>1000,31757=>1000,31758=>1000,31759=>1000,31760=>1000,31761=>1000,31762=>1000,31763=>1000,31764=>1000, + 31765=>1000,31766=>1000,31767=>1000,31768=>1000,31769=>1000,31770=>1000,31771=>1000,31772=>1000,31773=>1000,31774=>1000,31775=>1000,31776=>1000,31777=>1000,31778=>1000,31779=>1000,31780=>1000, + 31781=>1000,31782=>1000,31783=>1000,31784=>1000,31785=>1000,31786=>1000,31787=>1000,31788=>1000,31789=>1000,31790=>1000,31791=>1000,31792=>1000,31793=>1000,31794=>1000,31795=>1000,31796=>1000, + 31797=>1000,31798=>1000,31799=>1000,31800=>1000,31801=>1000,31802=>1000,31803=>1000,31804=>1000,31805=>1000,31806=>1000,31807=>1000,31808=>1000,31809=>1000,31810=>1000,31811=>1000,31812=>1000, + 31813=>1000,31814=>1000,31815=>1000,31816=>1000,31817=>1000,31818=>1000,31819=>1000,31820=>1000,31821=>1000,31822=>1000,31823=>1000,31824=>1000,31825=>1000,31826=>1000,31827=>1000,31828=>1000, + 31829=>1000,31830=>1000,31831=>1000,31832=>1000,31833=>1000,31834=>1000,31835=>1000,31836=>1000,31837=>1000,31838=>1000,31839=>1000,31840=>1000,31841=>1000,31842=>1000,31843=>1000,31844=>1000, + 31845=>1000,31846=>1000,31847=>1000,31848=>1000,31849=>1000,31850=>1000,31851=>1000,31852=>1000,31853=>1000,31854=>1000,31855=>1000,31856=>1000,31857=>1000,31858=>1000,31859=>1000,31860=>1000, + 31861=>1000,31862=>1000,31863=>1000,31864=>1000,31865=>1000,31866=>1000,31867=>1000,31868=>1000,31869=>1000,31870=>1000,31871=>1000,31872=>1000,31873=>1000,31874=>1000,31875=>1000,31876=>1000, + 31877=>1000,31878=>1000,31879=>1000,31880=>1000,31881=>1000,31882=>1000,31883=>1000,31884=>1000,31885=>1000,31886=>1000,31887=>1000,31888=>1000,31889=>1000,31890=>1000,31891=>1000,31892=>1000, + 31893=>1000,31894=>1000,31895=>1000,31896=>1000,31897=>1000,31898=>1000,31899=>1000,31900=>1000,31901=>1000,31902=>1000,31903=>1000,31904=>1000,31905=>1000,31906=>1000,31907=>1000,31908=>1000, + 31909=>1000,31910=>1000,31911=>1000,31912=>1000,31913=>1000,31914=>1000,31915=>1000,31916=>1000,31917=>1000,31918=>1000,31919=>1000,31920=>1000,31921=>1000,31922=>1000,31923=>1000,31924=>1000, + 31925=>1000,31926=>1000,31927=>1000,31928=>1000,31929=>1000,31930=>1000,31931=>1000,31932=>1000,31933=>1000,31934=>1000,31935=>1000,31936=>1000,31937=>1000,31938=>1000,31939=>1000,31940=>1000, + 31941=>1000,31942=>1000,31943=>1000,31944=>1000,31945=>1000,31946=>1000,31947=>1000,31948=>1000,31949=>1000,31950=>1000,31951=>1000,31952=>1000,31953=>1000,31954=>1000,31955=>1000,31956=>1000, + 31957=>1000,31958=>1000,31959=>1000,31960=>1000,31961=>1000,31962=>1000,31963=>1000,31964=>1000,31965=>1000,31966=>1000,31967=>1000,31968=>1000,31969=>1000,31970=>1000,31971=>1000,31972=>1000, + 31973=>1000,31974=>1000,31975=>1000,31976=>1000,31977=>1000,31978=>1000,31979=>1000,31980=>1000,31981=>1000,31982=>1000,31983=>1000,31984=>1000,31985=>1000,31986=>1000,31987=>1000,31988=>1000, + 31989=>1000,31990=>1000,31991=>1000,31992=>1000,31993=>1000,31994=>1000,31995=>1000,31996=>1000,31997=>1000,31998=>1000,31999=>1000,32000=>1000,32001=>1000,32002=>1000,32003=>1000,32004=>1000, + 32005=>1000,32006=>1000,32007=>1000,32008=>1000,32009=>1000,32010=>1000,32011=>1000,32012=>1000,32013=>1000,32014=>1000,32015=>1000,32016=>1000,32017=>1000,32018=>1000,32019=>1000,32020=>1000, + 32021=>1000,32022=>1000,32023=>1000,32024=>1000,32025=>1000,32026=>1000,32027=>1000,32028=>1000,32029=>1000,32030=>1000,32031=>1000,32032=>1000,32033=>1000,32034=>1000,32035=>1000,32036=>1000, + 32037=>1000,32038=>1000,32039=>1000,32040=>1000,32041=>1000,32042=>1000,32043=>1000,32044=>1000,32045=>1000,32046=>1000,32047=>1000,32048=>1000,32049=>1000,32050=>1000,32051=>1000,32052=>1000, + 32053=>1000,32054=>1000,32055=>1000,32056=>1000,32057=>1000,32058=>1000,32059=>1000,32060=>1000,32061=>1000,32062=>1000,32063=>1000,32064=>1000,32065=>1000,32066=>1000,32067=>1000,32068=>1000, + 32069=>1000,32070=>1000,32071=>1000,32072=>1000,32073=>1000,32074=>1000,32075=>1000,32076=>1000,32077=>1000,32078=>1000,32079=>1000,32080=>1000,32081=>1000,32082=>1000,32083=>1000,32084=>1000, + 32085=>1000,32086=>1000,32087=>1000,32088=>1000,32089=>1000,32090=>1000,32091=>1000,32092=>1000,32093=>1000,32094=>1000,32095=>1000,32096=>1000,32097=>1000,32098=>1000,32099=>1000,32100=>1000, + 32101=>1000,32102=>1000,32103=>1000,32104=>1000,32105=>1000,32106=>1000,32107=>1000,32108=>1000,32109=>1000,32110=>1000,32111=>1000,32112=>1000,32113=>1000,32114=>1000,32115=>1000,32116=>1000, + 32117=>1000,32118=>1000,32119=>1000,32120=>1000,32121=>1000,32122=>1000,32123=>1000,32124=>1000,32125=>1000,32126=>1000,32127=>1000,32128=>1000,32129=>1000,32130=>1000,32131=>1000,32132=>1000, + 32133=>1000,32134=>1000,32135=>1000,32136=>1000,32137=>1000,32138=>1000,32139=>1000,32140=>1000,32141=>1000,32142=>1000,32143=>1000,32144=>1000,32145=>1000,32146=>1000,32147=>1000,32148=>1000, + 32149=>1000,32150=>1000,32151=>1000,32152=>1000,32153=>1000,32154=>1000,32155=>1000,32156=>1000,32157=>1000,32158=>1000,32159=>1000,32160=>1000,32161=>1000,32162=>1000,32163=>1000,32164=>1000, + 32165=>1000,32166=>1000,32167=>1000,32168=>1000,32169=>1000,32170=>1000,32171=>1000,32172=>1000,32173=>1000,32174=>1000,32175=>1000,32176=>1000,32177=>1000,32178=>1000,32179=>1000,32180=>1000, + 32181=>1000,32182=>1000,32183=>1000,32184=>1000,32185=>1000,32186=>1000,32187=>1000,32188=>1000,32189=>1000,32190=>1000,32191=>1000,32192=>1000,32193=>1000,32194=>1000,32195=>1000,32196=>1000, + 32197=>1000,32198=>1000,32199=>1000,32200=>1000,32201=>1000,32202=>1000,32203=>1000,32204=>1000,32205=>1000,32206=>1000,32207=>1000,32208=>1000,32209=>1000,32210=>1000,32211=>1000,32212=>1000, + 32213=>1000,32214=>1000,32215=>1000,32216=>1000,32217=>1000,32218=>1000,32219=>1000,32220=>1000,32221=>1000,32222=>1000,32223=>1000,32224=>1000,32225=>1000,32226=>1000,32227=>1000,32228=>1000, + 32229=>1000,32230=>1000,32231=>1000,32232=>1000,32233=>1000,32234=>1000,32235=>1000,32236=>1000,32237=>1000,32238=>1000,32239=>1000,32240=>1000,32241=>1000,32242=>1000,32243=>1000,32244=>1000, + 32245=>1000,32246=>1000,32247=>1000,32248=>1000,32249=>1000,32250=>1000,32251=>1000,32252=>1000,32253=>1000,32254=>1000,32255=>1000,32256=>1000,32257=>1000,32258=>1000,32259=>1000,32260=>1000, + 32261=>1000,32262=>1000,32263=>1000,32264=>1000,32265=>1000,32266=>1000,32267=>1000,32268=>1000,32269=>1000,32270=>1000,32271=>1000,32272=>1000,32273=>1000,32274=>1000,32275=>1000,32276=>1000, + 32277=>1000,32278=>1000,32279=>1000,32280=>1000,32281=>1000,32282=>1000,32283=>1000,32284=>1000,32285=>1000,32286=>1000,32287=>1000,32288=>1000,32289=>1000,32290=>1000,32291=>1000,32292=>1000, + 32293=>1000,32294=>1000,32295=>1000,32296=>1000,32297=>1000,32298=>1000,32299=>1000,32300=>1000,32301=>1000,32302=>1000,32303=>1000,32304=>1000,32305=>1000,32306=>1000,32307=>1000,32308=>1000, + 32309=>1000,32310=>1000,32311=>1000,32312=>1000,32313=>1000,32314=>1000,32315=>1000,32316=>1000,32317=>1000,32318=>1000,32319=>1000,32320=>1000,32321=>1000,32322=>1000,32323=>1000,32324=>1000, + 32325=>1000,32326=>1000,32327=>1000,32328=>1000,32329=>1000,32330=>1000,32331=>1000,32332=>1000,32333=>1000,32334=>1000,32335=>1000,32336=>1000,32337=>1000,32338=>1000,32339=>1000,32340=>1000, + 32341=>1000,32342=>1000,32343=>1000,32344=>1000,32345=>1000,32346=>1000,32347=>1000,32348=>1000,32349=>1000,32350=>1000,32351=>1000,32352=>1000,32353=>1000,32354=>1000,32355=>1000,32356=>1000, + 32357=>1000,32358=>1000,32359=>1000,32360=>1000,32361=>1000,32362=>1000,32363=>1000,32364=>1000,32365=>1000,32366=>1000,32367=>1000,32368=>1000,32369=>1000,32370=>1000,32371=>1000,32372=>1000, + 32373=>1000,32374=>1000,32375=>1000,32376=>1000,32377=>1000,32378=>1000,32379=>1000,32380=>1000,32381=>1000,32382=>1000,32383=>1000,32384=>1000,32385=>1000,32386=>1000,32387=>1000,32388=>1000, + 32389=>1000,32390=>1000,32391=>1000,32392=>1000,32393=>1000,32394=>1000,32395=>1000,32396=>1000,32397=>1000,32398=>1000,32399=>1000,32400=>1000,32401=>1000,32402=>1000,32403=>1000,32404=>1000, + 32405=>1000,32406=>1000,32407=>1000,32408=>1000,32409=>1000,32410=>1000,32411=>1000,32412=>1000,32413=>1000,32414=>1000,32415=>1000,32416=>1000,32417=>1000,32418=>1000,32419=>1000,32420=>1000, + 32421=>1000,32422=>1000,32423=>1000,32424=>1000,32425=>1000,32426=>1000,32427=>1000,32428=>1000,32429=>1000,32430=>1000,32431=>1000,32432=>1000,32433=>1000,32434=>1000,32435=>1000,32436=>1000, + 32437=>1000,32438=>1000,32439=>1000,32440=>1000,32441=>1000,32442=>1000,32443=>1000,32444=>1000,32445=>1000,32446=>1000,32447=>1000,32448=>1000,32449=>1000,32450=>1000,32451=>1000,32452=>1000, + 32453=>1000,32454=>1000,32455=>1000,32456=>1000,32457=>1000,32458=>1000,32459=>1000,32460=>1000,32461=>1000,32462=>1000,32463=>1000,32464=>1000,32465=>1000,32466=>1000,32467=>1000,32468=>1000, + 32469=>1000,32470=>1000,32471=>1000,32472=>1000,32473=>1000,32474=>1000,32475=>1000,32476=>1000,32477=>1000,32478=>1000,32479=>1000,32480=>1000,32481=>1000,32482=>1000,32483=>1000,32484=>1000, + 32485=>1000,32486=>1000,32487=>1000,32488=>1000,32489=>1000,32490=>1000,32491=>1000,32492=>1000,32493=>1000,32494=>1000,32495=>1000,32496=>1000,32497=>1000,32498=>1000,32499=>1000,32500=>1000, + 32501=>1000,32502=>1000,32503=>1000,32504=>1000,32505=>1000,32506=>1000,32507=>1000,32508=>1000,32509=>1000,32510=>1000,32511=>1000,32512=>1000,32513=>1000,32514=>1000,32515=>1000,32516=>1000, + 32517=>1000,32518=>1000,32519=>1000,32520=>1000,32521=>1000,32522=>1000,32523=>1000,32524=>1000,32525=>1000,32526=>1000,32527=>1000,32528=>1000,32529=>1000,32530=>1000,32531=>1000,32532=>1000, + 32533=>1000,32534=>1000,32535=>1000,32536=>1000,32537=>1000,32538=>1000,32539=>1000,32540=>1000,32541=>1000,32542=>1000,32543=>1000,32544=>1000,32545=>1000,32546=>1000,32547=>1000,32548=>1000, + 32549=>1000,32550=>1000,32551=>1000,32552=>1000,32553=>1000,32554=>1000,32555=>1000,32556=>1000,32557=>1000,32558=>1000,32559=>1000,32560=>1000,32561=>1000,32562=>1000,32563=>1000,32564=>1000, + 32565=>1000,32566=>1000,32567=>1000,32568=>1000,32569=>1000,32570=>1000,32571=>1000,32572=>1000,32573=>1000,32574=>1000,32575=>1000,32576=>1000,32577=>1000,32578=>1000,32579=>1000,32580=>1000, + 32581=>1000,32582=>1000,32583=>1000,32584=>1000,32585=>1000,32586=>1000,32587=>1000,32588=>1000,32589=>1000,32590=>1000,32591=>1000,32592=>1000,32593=>1000,32594=>1000,32595=>1000,32596=>1000, + 32597=>1000,32598=>1000,32599=>1000,32600=>1000,32601=>1000,32602=>1000,32603=>1000,32604=>1000,32605=>1000,32606=>1000,32607=>1000,32608=>1000,32609=>1000,32610=>1000,32611=>1000,32612=>1000, + 32613=>1000,32614=>1000,32615=>1000,32616=>1000,32617=>1000,32618=>1000,32619=>1000,32620=>1000,32621=>1000,32622=>1000,32623=>1000,32624=>1000,32625=>1000,32626=>1000,32627=>1000,32628=>1000, + 32629=>1000,32630=>1000,32631=>1000,32632=>1000,32633=>1000,32634=>1000,32635=>1000,32636=>1000,32637=>1000,32638=>1000,32639=>1000,32640=>1000,32641=>1000,32642=>1000,32643=>1000,32644=>1000, + 32645=>1000,32646=>1000,32647=>1000,32648=>1000,32649=>1000,32650=>1000,32651=>1000,32652=>1000,32653=>1000,32654=>1000,32655=>1000,32656=>1000,32657=>1000,32658=>1000,32659=>1000,32660=>1000, + 32661=>1000,32662=>1000,32663=>1000,32664=>1000,32665=>1000,32666=>1000,32667=>1000,32668=>1000,32669=>1000,32670=>1000,32671=>1000,32672=>1000,32673=>1000,32674=>1000,32675=>1000,32676=>1000, + 32677=>1000,32678=>1000,32679=>1000,32680=>1000,32681=>1000,32682=>1000,32683=>1000,32684=>1000,32685=>1000,32686=>1000,32687=>1000,32688=>1000,32689=>1000,32690=>1000,32691=>1000,32692=>1000, + 32693=>1000,32694=>1000,32695=>1000,32696=>1000,32697=>1000,32698=>1000,32699=>1000,32700=>1000,32701=>1000,32702=>1000,32703=>1000,32704=>1000,32705=>1000,32706=>1000,32707=>1000,32708=>1000, + 32709=>1000,32710=>1000,32711=>1000,32712=>1000,32713=>1000,32714=>1000,32715=>1000,32716=>1000,32717=>1000,32718=>1000,32719=>1000,32720=>1000,32721=>1000,32722=>1000,32723=>1000,32724=>1000, + 32725=>1000,32726=>1000,32727=>1000,32728=>1000,32729=>1000,32730=>1000,32731=>1000,32732=>1000,32733=>1000,32734=>1000,32735=>1000,32736=>1000,32737=>1000,32738=>1000,32739=>1000,32740=>1000, + 32741=>1000,32742=>1000,32743=>1000,32744=>1000,32745=>1000,32746=>1000,32747=>1000,32748=>1000,32749=>1000,32750=>1000,32751=>1000,32752=>1000,32753=>1000,32754=>1000,32755=>1000,32756=>1000, + 32757=>1000,32758=>1000,32759=>1000,32760=>1000,32761=>1000,32762=>1000,32763=>1000,32764=>1000,32765=>1000,32766=>1000,32767=>1000,32768=>1000,32769=>1000,32770=>1000,32771=>1000,32772=>1000, + 32773=>1000,32774=>1000,32775=>1000,32776=>1000,32777=>1000,32778=>1000,32779=>1000,32780=>1000,32781=>1000,32782=>1000,32783=>1000,32784=>1000,32785=>1000,32786=>1000,32787=>1000,32788=>1000, + 32789=>1000,32790=>1000,32791=>1000,32792=>1000,32793=>1000,32794=>1000,32795=>1000,32796=>1000,32797=>1000,32798=>1000,32799=>1000,32800=>1000,32801=>1000,32802=>1000,32803=>1000,32804=>1000, + 32805=>1000,32806=>1000,32807=>1000,32808=>1000,32809=>1000,32810=>1000,32811=>1000,32812=>1000,32813=>1000,32814=>1000,32815=>1000,32816=>1000,32817=>1000,32818=>1000,32819=>1000,32820=>1000, + 32821=>1000,32822=>1000,32823=>1000,32824=>1000,32825=>1000,32826=>1000,32827=>1000,32828=>1000,32829=>1000,32830=>1000,32831=>1000,32832=>1000,32833=>1000,32834=>1000,32835=>1000,32836=>1000, + 32837=>1000,32838=>1000,32839=>1000,32840=>1000,32841=>1000,32842=>1000,32843=>1000,32844=>1000,32845=>1000,32846=>1000,32847=>1000,32848=>1000,32849=>1000,32850=>1000,32851=>1000,32852=>1000, + 32853=>1000,32854=>1000,32855=>1000,32856=>1000,32857=>1000,32858=>1000,32859=>1000,32860=>1000,32861=>1000,32862=>1000,32863=>1000,32864=>1000,32865=>1000,32866=>1000,32867=>1000,32868=>1000, + 32869=>1000,32870=>1000,32871=>1000,32872=>1000,32873=>1000,32874=>1000,32875=>1000,32876=>1000,32877=>1000,32878=>1000,32879=>1000,32880=>1000,32881=>1000,32882=>1000,32883=>1000,32884=>1000, + 32885=>1000,32886=>1000,32887=>1000,32888=>1000,32889=>1000,32890=>1000,32891=>1000,32892=>1000,32893=>1000,32894=>1000,32895=>1000,32896=>1000,32897=>1000,32898=>1000,32899=>1000,32900=>1000, + 32901=>1000,32902=>1000,32903=>1000,32904=>1000,32905=>1000,32906=>1000,32907=>1000,32908=>1000,32909=>1000,32910=>1000,32911=>1000,32912=>1000,32913=>1000,32914=>1000,32915=>1000,32916=>1000, + 32917=>1000,32918=>1000,32919=>1000,32920=>1000,32921=>1000,32922=>1000,32923=>1000,32924=>1000,32925=>1000,32926=>1000,32927=>1000,32928=>1000,32929=>1000,32930=>1000,32931=>1000,32932=>1000, + 32933=>1000,32934=>1000,32935=>1000,32936=>1000,32937=>1000,32938=>1000,32939=>1000,32940=>1000,32941=>1000,32942=>1000,32943=>1000,32944=>1000,32945=>1000,32946=>1000,32947=>1000,32948=>1000, + 32949=>1000,32950=>1000,32951=>1000,32952=>1000,32953=>1000,32954=>1000,32955=>1000,32956=>1000,32957=>1000,32958=>1000,32959=>1000,32960=>1000,32961=>1000,32962=>1000,32963=>1000,32964=>1000, + 32965=>1000,32966=>1000,32967=>1000,32968=>1000,32969=>1000,32970=>1000,32971=>1000,32972=>1000,32973=>1000,32974=>1000,32975=>1000,32976=>1000,32977=>1000,32978=>1000,32979=>1000,32980=>1000, + 32981=>1000,32982=>1000,32983=>1000,32984=>1000,32985=>1000,32986=>1000,32987=>1000,32988=>1000,32989=>1000,32990=>1000,32991=>1000,32992=>1000,32993=>1000,32994=>1000,32995=>1000,32996=>1000, + 32997=>1000,32998=>1000,32999=>1000,33000=>1000,33001=>1000,33002=>1000,33003=>1000,33004=>1000,33005=>1000,33006=>1000,33007=>1000,33008=>1000,33009=>1000,33010=>1000,33011=>1000,33012=>1000, + 33013=>1000,33014=>1000,33015=>1000,33016=>1000,33017=>1000,33018=>1000,33019=>1000,33020=>1000,33021=>1000,33022=>1000,33023=>1000,33024=>1000,33025=>1000,33026=>1000,33027=>1000,33028=>1000, + 33029=>1000,33030=>1000,33031=>1000,33032=>1000,33033=>1000,33034=>1000,33035=>1000,33036=>1000,33037=>1000,33038=>1000,33039=>1000,33040=>1000,33041=>1000,33042=>1000,33043=>1000,33044=>1000, + 33045=>1000,33046=>1000,33047=>1000,33048=>1000,33049=>1000,33050=>1000,33051=>1000,33052=>1000,33053=>1000,33054=>1000,33055=>1000,33056=>1000,33057=>1000,33058=>1000,33059=>1000,33060=>1000, + 33061=>1000,33062=>1000,33063=>1000,33064=>1000,33065=>1000,33066=>1000,33067=>1000,33068=>1000,33069=>1000,33070=>1000,33071=>1000,33072=>1000,33073=>1000,33074=>1000,33075=>1000,33076=>1000, + 33077=>1000,33078=>1000,33079=>1000,33080=>1000,33081=>1000,33082=>1000,33083=>1000,33084=>1000,33085=>1000,33086=>1000,33087=>1000,33088=>1000,33089=>1000,33090=>1000,33091=>1000,33092=>1000, + 33093=>1000,33094=>1000,33095=>1000,33096=>1000,33097=>1000,33098=>1000,33099=>1000,33100=>1000,33101=>1000,33102=>1000,33103=>1000,33104=>1000,33105=>1000,33106=>1000,33107=>1000,33108=>1000, + 33109=>1000,33110=>1000,33111=>1000,33112=>1000,33113=>1000,33114=>1000,33115=>1000,33116=>1000,33117=>1000,33118=>1000,33119=>1000,33120=>1000,33121=>1000,33122=>1000,33123=>1000,33124=>1000, + 33125=>1000,33126=>1000,33127=>1000,33128=>1000,33129=>1000,33130=>1000,33131=>1000,33132=>1000,33133=>1000,33134=>1000,33135=>1000,33136=>1000,33137=>1000,33138=>1000,33139=>1000,33140=>1000, + 33141=>1000,33142=>1000,33143=>1000,33144=>1000,33145=>1000,33146=>1000,33147=>1000,33148=>1000,33149=>1000,33150=>1000,33151=>1000,33152=>1000,33153=>1000,33154=>1000,33155=>1000,33156=>1000, + 33157=>1000,33158=>1000,33159=>1000,33160=>1000,33161=>1000,33162=>1000,33163=>1000,33164=>1000,33165=>1000,33166=>1000,33167=>1000,33168=>1000,33169=>1000,33170=>1000,33171=>1000,33172=>1000, + 33173=>1000,33174=>1000,33175=>1000,33176=>1000,33177=>1000,33178=>1000,33179=>1000,33180=>1000,33181=>1000,33182=>1000,33183=>1000,33184=>1000,33185=>1000,33186=>1000,33187=>1000,33188=>1000, + 33189=>1000,33190=>1000,33191=>1000,33192=>1000,33193=>1000,33194=>1000,33195=>1000,33196=>1000,33197=>1000,33198=>1000,33199=>1000,33200=>1000,33201=>1000,33202=>1000,33203=>1000,33204=>1000, + 33205=>1000,33206=>1000,33207=>1000,33208=>1000,33209=>1000,33210=>1000,33211=>1000,33212=>1000,33213=>1000,33214=>1000,33215=>1000,33216=>1000,33217=>1000,33218=>1000,33219=>1000,33220=>1000, + 33221=>1000,33222=>1000,33223=>1000,33224=>1000,33225=>1000,33226=>1000,33227=>1000,33228=>1000,33229=>1000,33230=>1000,33231=>1000,33232=>1000,33233=>1000,33234=>1000,33235=>1000,33236=>1000, + 33237=>1000,33238=>1000,33239=>1000,33240=>1000,33241=>1000,33242=>1000,33243=>1000,33244=>1000,33245=>1000,33246=>1000,33247=>1000,33248=>1000,33249=>1000,33250=>1000,33251=>1000,33252=>1000, + 33253=>1000,33254=>1000,33255=>1000,33256=>1000,33257=>1000,33258=>1000,33259=>1000,33260=>1000,33261=>1000,33262=>1000,33263=>1000,33264=>1000,33265=>1000,33266=>1000,33267=>1000,33268=>1000, + 33269=>1000,33270=>1000,33271=>1000,33272=>1000,33273=>1000,33274=>1000,33275=>1000,33276=>1000,33277=>1000,33278=>1000,33279=>1000,33280=>1000,33281=>1000,33282=>1000,33283=>1000,33284=>1000, + 33285=>1000,33286=>1000,33287=>1000,33288=>1000,33289=>1000,33290=>1000,33291=>1000,33292=>1000,33293=>1000,33294=>1000,33295=>1000,33296=>1000,33297=>1000,33298=>1000,33299=>1000,33300=>1000, + 33301=>1000,33302=>1000,33303=>1000,33304=>1000,33305=>1000,33306=>1000,33307=>1000,33308=>1000,33309=>1000,33310=>1000,33311=>1000,33312=>1000,33313=>1000,33314=>1000,33315=>1000,33316=>1000, + 33317=>1000,33318=>1000,33319=>1000,33320=>1000,33321=>1000,33322=>1000,33323=>1000,33324=>1000,33325=>1000,33326=>1000,33327=>1000,33328=>1000,33329=>1000,33330=>1000,33331=>1000,33332=>1000, + 33333=>1000,33334=>1000,33335=>1000,33336=>1000,33337=>1000,33338=>1000,33339=>1000,33340=>1000,33341=>1000,33342=>1000,33343=>1000,33344=>1000,33345=>1000,33346=>1000,33347=>1000,33348=>1000, + 33349=>1000,33350=>1000,33351=>1000,33352=>1000,33353=>1000,33354=>1000,33355=>1000,33356=>1000,33357=>1000,33358=>1000,33359=>1000,33360=>1000,33361=>1000,33362=>1000,33363=>1000,33364=>1000, + 33365=>1000,33366=>1000,33367=>1000,33368=>1000,33369=>1000,33370=>1000,33371=>1000,33372=>1000,33373=>1000,33374=>1000,33375=>1000,33376=>1000,33377=>1000,33378=>1000,33379=>1000,33380=>1000, + 33381=>1000,33382=>1000,33383=>1000,33384=>1000,33385=>1000,33386=>1000,33387=>1000,33388=>1000,33389=>1000,33390=>1000,33391=>1000,33392=>1000,33393=>1000,33394=>1000,33395=>1000,33396=>1000, + 33397=>1000,33398=>1000,33399=>1000,33400=>1000,33401=>1000,33402=>1000,33403=>1000,33404=>1000,33405=>1000,33406=>1000,33407=>1000,33408=>1000,33409=>1000,33410=>1000,33411=>1000,33412=>1000, + 33413=>1000,33414=>1000,33415=>1000,33416=>1000,33417=>1000,33418=>1000,33419=>1000,33420=>1000,33421=>1000,33422=>1000,33423=>1000,33424=>1000,33425=>1000,33426=>1000,33427=>1000,33428=>1000, + 33429=>1000,33430=>1000,33431=>1000,33432=>1000,33433=>1000,33434=>1000,33435=>1000,33436=>1000,33437=>1000,33438=>1000,33439=>1000,33440=>1000,33441=>1000,33442=>1000,33443=>1000,33444=>1000, + 33445=>1000,33446=>1000,33447=>1000,33448=>1000,33449=>1000,33450=>1000,33451=>1000,33452=>1000,33453=>1000,33454=>1000,33455=>1000,33456=>1000,33457=>1000,33458=>1000,33459=>1000,33460=>1000, + 33461=>1000,33462=>1000,33463=>1000,33464=>1000,33465=>1000,33466=>1000,33467=>1000,33468=>1000,33469=>1000,33470=>1000,33471=>1000,33472=>1000,33473=>1000,33474=>1000,33475=>1000,33476=>1000, + 33477=>1000,33478=>1000,33479=>1000,33480=>1000,33481=>1000,33482=>1000,33483=>1000,33484=>1000,33485=>1000,33486=>1000,33487=>1000,33488=>1000,33489=>1000,33490=>1000,33491=>1000,33492=>1000, + 33493=>1000,33494=>1000,33495=>1000,33496=>1000,33497=>1000,33498=>1000,33499=>1000,33500=>1000,33501=>1000,33502=>1000,33503=>1000,33504=>1000,33505=>1000,33506=>1000,33507=>1000,33508=>1000, + 33509=>1000,33510=>1000,33511=>1000,33512=>1000,33513=>1000,33514=>1000,33515=>1000,33516=>1000,33517=>1000,33518=>1000,33519=>1000,33520=>1000,33521=>1000,33522=>1000,33523=>1000,33524=>1000, + 33525=>1000,33526=>1000,33527=>1000,33528=>1000,33529=>1000,33530=>1000,33531=>1000,33532=>1000,33533=>1000,33534=>1000,33535=>1000,33536=>1000,33537=>1000,33538=>1000,33539=>1000,33540=>1000, + 33541=>1000,33542=>1000,33543=>1000,33544=>1000,33545=>1000,33546=>1000,33547=>1000,33548=>1000,33549=>1000,33550=>1000,33551=>1000,33552=>1000,33553=>1000,33554=>1000,33555=>1000,33556=>1000, + 33557=>1000,33558=>1000,33559=>1000,33560=>1000,33561=>1000,33562=>1000,33563=>1000,33564=>1000,33565=>1000,33566=>1000,33567=>1000,33568=>1000,33569=>1000,33570=>1000,33571=>1000,33572=>1000, + 33573=>1000,33574=>1000,33575=>1000,33576=>1000,33577=>1000,33578=>1000,33579=>1000,33580=>1000,33581=>1000,33582=>1000,33583=>1000,33584=>1000,33585=>1000,33586=>1000,33587=>1000,33588=>1000, + 33589=>1000,33590=>1000,33591=>1000,33592=>1000,33593=>1000,33594=>1000,33595=>1000,33596=>1000,33597=>1000,33598=>1000,33599=>1000,33600=>1000,33601=>1000,33602=>1000,33603=>1000,33604=>1000, + 33605=>1000,33606=>1000,33607=>1000,33608=>1000,33609=>1000,33610=>1000,33611=>1000,33612=>1000,33613=>1000,33614=>1000,33615=>1000,33616=>1000,33617=>1000,33618=>1000,33619=>1000,33620=>1000, + 33621=>1000,33622=>1000,33623=>1000,33624=>1000,33625=>1000,33626=>1000,33627=>1000,33628=>1000,33629=>1000,33630=>1000,33631=>1000,33632=>1000,33633=>1000,33634=>1000,33635=>1000,33636=>1000, + 33637=>1000,33638=>1000,33639=>1000,33640=>1000,33641=>1000,33642=>1000,33643=>1000,33644=>1000,33645=>1000,33646=>1000,33647=>1000,33648=>1000,33649=>1000,33650=>1000,33651=>1000,33652=>1000, + 33653=>1000,33654=>1000,33655=>1000,33656=>1000,33657=>1000,33658=>1000,33659=>1000,33660=>1000,33661=>1000,33662=>1000,33663=>1000,33664=>1000,33665=>1000,33666=>1000,33667=>1000,33668=>1000, + 33669=>1000,33670=>1000,33671=>1000,33672=>1000,33673=>1000,33674=>1000,33675=>1000,33676=>1000,33677=>1000,33678=>1000,33679=>1000,33680=>1000,33681=>1000,33682=>1000,33683=>1000,33684=>1000, + 33685=>1000,33686=>1000,33687=>1000,33688=>1000,33689=>1000,33690=>1000,33691=>1000,33692=>1000,33693=>1000,33694=>1000,33695=>1000,33696=>1000,33697=>1000,33698=>1000,33699=>1000,33700=>1000, + 33701=>1000,33702=>1000,33703=>1000,33704=>1000,33705=>1000,33706=>1000,33707=>1000,33708=>1000,33709=>1000,33710=>1000,33711=>1000,33712=>1000,33713=>1000,33714=>1000,33715=>1000,33716=>1000, + 33717=>1000,33718=>1000,33719=>1000,33720=>1000,33721=>1000,33722=>1000,33723=>1000,33724=>1000,33725=>1000,33726=>1000,33727=>1000,33728=>1000,33729=>1000,33730=>1000,33731=>1000,33732=>1000, + 33733=>1000,33734=>1000,33735=>1000,33736=>1000,33737=>1000,33738=>1000,33739=>1000,33740=>1000,33741=>1000,33742=>1000,33743=>1000,33744=>1000,33745=>1000,33746=>1000,33747=>1000,33748=>1000, + 33749=>1000,33750=>1000,33751=>1000,33752=>1000,33753=>1000,33754=>1000,33755=>1000,33756=>1000,33757=>1000,33758=>1000,33759=>1000,33760=>1000,33761=>1000,33762=>1000,33763=>1000,33764=>1000, + 33765=>1000,33766=>1000,33767=>1000,33768=>1000,33769=>1000,33770=>1000,33771=>1000,33772=>1000,33773=>1000,33774=>1000,33775=>1000,33776=>1000,33777=>1000,33778=>1000,33779=>1000,33780=>1000, + 33781=>1000,33782=>1000,33783=>1000,33784=>1000,33785=>1000,33786=>1000,33787=>1000,33788=>1000,33789=>1000,33790=>1000,33791=>1000,33792=>1000,33793=>1000,33794=>1000,33795=>1000,33796=>1000, + 33797=>1000,33798=>1000,33799=>1000,33800=>1000,33801=>1000,33802=>1000,33803=>1000,33804=>1000,33805=>1000,33806=>1000,33807=>1000,33808=>1000,33809=>1000,33810=>1000,33811=>1000,33812=>1000, + 33813=>1000,33814=>1000,33815=>1000,33816=>1000,33817=>1000,33818=>1000,33819=>1000,33820=>1000,33821=>1000,33822=>1000,33823=>1000,33824=>1000,33825=>1000,33826=>1000,33827=>1000,33828=>1000, + 33829=>1000,33830=>1000,33831=>1000,33832=>1000,33833=>1000,33834=>1000,33835=>1000,33836=>1000,33837=>1000,33838=>1000,33839=>1000,33840=>1000,33841=>1000,33842=>1000,33843=>1000,33844=>1000, + 33845=>1000,33846=>1000,33847=>1000,33848=>1000,33849=>1000,33850=>1000,33851=>1000,33852=>1000,33853=>1000,33854=>1000,33855=>1000,33856=>1000,33857=>1000,33858=>1000,33859=>1000,33860=>1000, + 33861=>1000,33862=>1000,33863=>1000,33864=>1000,33865=>1000,33866=>1000,33867=>1000,33868=>1000,33869=>1000,33870=>1000,33871=>1000,33872=>1000,33873=>1000,33874=>1000,33875=>1000,33876=>1000, + 33877=>1000,33878=>1000,33879=>1000,33880=>1000,33881=>1000,33882=>1000,33883=>1000,33884=>1000,33885=>1000,33886=>1000,33887=>1000,33888=>1000,33889=>1000,33890=>1000,33891=>1000,33892=>1000, + 33893=>1000,33894=>1000,33895=>1000,33896=>1000,33897=>1000,33898=>1000,33899=>1000,33900=>1000,33901=>1000,33902=>1000,33903=>1000,33904=>1000,33905=>1000,33906=>1000,33907=>1000,33908=>1000, + 33909=>1000,33910=>1000,33911=>1000,33912=>1000,33913=>1000,33914=>1000,33915=>1000,33916=>1000,33917=>1000,33918=>1000,33919=>1000,33920=>1000,33921=>1000,33922=>1000,33923=>1000,33924=>1000, + 33925=>1000,33926=>1000,33927=>1000,33928=>1000,33929=>1000,33930=>1000,33931=>1000,33932=>1000,33933=>1000,33934=>1000,33935=>1000,33936=>1000,33937=>1000,33938=>1000,33939=>1000,33940=>1000, + 33941=>1000,33942=>1000,33943=>1000,33944=>1000,33945=>1000,33946=>1000,33947=>1000,33948=>1000,33949=>1000,33950=>1000,33951=>1000,33952=>1000,33953=>1000,33954=>1000,33955=>1000,33956=>1000, + 33957=>1000,33958=>1000,33959=>1000,33960=>1000,33961=>1000,33962=>1000,33963=>1000,33964=>1000,33965=>1000,33966=>1000,33967=>1000,33968=>1000,33969=>1000,33970=>1000,33971=>1000,33972=>1000, + 33973=>1000,33974=>1000,33975=>1000,33976=>1000,33977=>1000,33978=>1000,33979=>1000,33980=>1000,33981=>1000,33982=>1000,33983=>1000,33984=>1000,33985=>1000,33986=>1000,33987=>1000,33988=>1000, + 33989=>1000,33990=>1000,33991=>1000,33992=>1000,33993=>1000,33994=>1000,33995=>1000,33996=>1000,33997=>1000,33998=>1000,33999=>1000,34000=>1000,34001=>1000,34002=>1000,34003=>1000,34004=>1000, + 34005=>1000,34006=>1000,34007=>1000,34008=>1000,34009=>1000,34010=>1000,34011=>1000,34012=>1000,34013=>1000,34014=>1000,34015=>1000,34016=>1000,34017=>1000,34018=>1000,34019=>1000,34020=>1000, + 34021=>1000,34022=>1000,34023=>1000,34024=>1000,34025=>1000,34026=>1000,34027=>1000,34028=>1000,34029=>1000,34030=>1000,34031=>1000,34032=>1000,34033=>1000,34034=>1000,34035=>1000,34036=>1000, + 34037=>1000,34038=>1000,34039=>1000,34040=>1000,34041=>1000,34042=>1000,34043=>1000,34044=>1000,34045=>1000,34046=>1000,34047=>1000,34048=>1000,34049=>1000,34050=>1000,34051=>1000,34052=>1000, + 34053=>1000,34054=>1000,34055=>1000,34056=>1000,34057=>1000,34058=>1000,34059=>1000,34060=>1000,34061=>1000,34062=>1000,34063=>1000,34064=>1000,34065=>1000,34066=>1000,34067=>1000,34068=>1000, + 34069=>1000,34070=>1000,34071=>1000,34072=>1000,34073=>1000,34074=>1000,34075=>1000,34076=>1000,34077=>1000,34078=>1000,34079=>1000,34080=>1000,34081=>1000,34082=>1000,34083=>1000,34084=>1000, + 34085=>1000,34086=>1000,34087=>1000,34088=>1000,34089=>1000,34090=>1000,34091=>1000,34092=>1000,34093=>1000,34094=>1000,34095=>1000,34096=>1000,34097=>1000,34098=>1000,34099=>1000,34100=>1000, + 34101=>1000,34102=>1000,34103=>1000,34104=>1000,34105=>1000,34106=>1000,34107=>1000,34108=>1000,34109=>1000,34110=>1000,34111=>1000,34112=>1000,34113=>1000,34114=>1000,34115=>1000,34116=>1000, + 34117=>1000,34118=>1000,34119=>1000,34120=>1000,34121=>1000,34122=>1000,34123=>1000,34124=>1000,34125=>1000,34126=>1000,34127=>1000,34128=>1000,34129=>1000,34130=>1000,34131=>1000,34132=>1000, + 34133=>1000,34134=>1000,34135=>1000,34136=>1000,34137=>1000,34138=>1000,34139=>1000,34140=>1000,34141=>1000,34142=>1000,34143=>1000,34144=>1000,34145=>1000,34146=>1000,34147=>1000,34148=>1000, + 34149=>1000,34150=>1000,34151=>1000,34152=>1000,34153=>1000,34154=>1000,34155=>1000,34156=>1000,34157=>1000,34158=>1000,34159=>1000,34160=>1000,34161=>1000,34162=>1000,34163=>1000,34164=>1000, + 34165=>1000,34166=>1000,34167=>1000,34168=>1000,34169=>1000,34170=>1000,34171=>1000,34172=>1000,34173=>1000,34174=>1000,34175=>1000,34176=>1000,34177=>1000,34178=>1000,34179=>1000,34180=>1000, + 34181=>1000,34182=>1000,34183=>1000,34184=>1000,34185=>1000,34186=>1000,34187=>1000,34188=>1000,34189=>1000,34190=>1000,34191=>1000,34192=>1000,34193=>1000,34194=>1000,34195=>1000,34196=>1000, + 34197=>1000,34198=>1000,34199=>1000,34200=>1000,34201=>1000,34202=>1000,34203=>1000,34204=>1000,34205=>1000,34206=>1000,34207=>1000,34208=>1000,34209=>1000,34210=>1000,34211=>1000,34212=>1000, + 34213=>1000,34214=>1000,34215=>1000,34216=>1000,34217=>1000,34218=>1000,34219=>1000,34220=>1000,34221=>1000,34222=>1000,34223=>1000,34224=>1000,34225=>1000,34226=>1000,34227=>1000,34228=>1000, + 34229=>1000,34230=>1000,34231=>1000,34232=>1000,34233=>1000,34234=>1000,34235=>1000,34236=>1000,34237=>1000,34238=>1000,34239=>1000,34240=>1000,34241=>1000,34242=>1000,34243=>1000,34244=>1000, + 34245=>1000,34246=>1000,34247=>1000,34248=>1000,34249=>1000,34250=>1000,34251=>1000,34252=>1000,34253=>1000,34254=>1000,34255=>1000,34256=>1000,34257=>1000,34258=>1000,34259=>1000,34260=>1000, + 34261=>1000,34262=>1000,34263=>1000,34264=>1000,34265=>1000,34266=>1000,34267=>1000,34268=>1000,34269=>1000,34270=>1000,34271=>1000,34272=>1000,34273=>1000,34274=>1000,34275=>1000,34276=>1000, + 34277=>1000,34278=>1000,34279=>1000,34280=>1000,34281=>1000,34282=>1000,34283=>1000,34284=>1000,34285=>1000,34286=>1000,34287=>1000,34288=>1000,34289=>1000,34290=>1000,34291=>1000,34292=>1000, + 34293=>1000,34294=>1000,34295=>1000,34296=>1000,34297=>1000,34298=>1000,34299=>1000,34300=>1000,34301=>1000,34302=>1000,34303=>1000,34304=>1000,34305=>1000,34306=>1000,34307=>1000,34308=>1000, + 34309=>1000,34310=>1000,34311=>1000,34312=>1000,34313=>1000,34314=>1000,34315=>1000,34316=>1000,34317=>1000,34318=>1000,34319=>1000,34320=>1000,34321=>1000,34322=>1000,34323=>1000,34324=>1000, + 34325=>1000,34326=>1000,34327=>1000,34328=>1000,34329=>1000,34330=>1000,34331=>1000,34332=>1000,34333=>1000,34334=>1000,34335=>1000,34336=>1000,34337=>1000,34338=>1000,34339=>1000,34340=>1000, + 34341=>1000,34342=>1000,34343=>1000,34344=>1000,34345=>1000,34346=>1000,34347=>1000,34348=>1000,34349=>1000,34350=>1000,34351=>1000,34352=>1000,34353=>1000,34354=>1000,34355=>1000,34356=>1000, + 34357=>1000,34358=>1000,34359=>1000,34360=>1000,34361=>1000,34362=>1000,34363=>1000,34364=>1000,34365=>1000,34366=>1000,34367=>1000,34368=>1000,34369=>1000,34370=>1000,34371=>1000,34372=>1000, + 34373=>1000,34374=>1000,34375=>1000,34376=>1000,34377=>1000,34378=>1000,34379=>1000,34380=>1000,34381=>1000,34382=>1000,34383=>1000,34384=>1000,34385=>1000,34386=>1000,34387=>1000,34388=>1000, + 34389=>1000,34390=>1000,34391=>1000,34392=>1000,34393=>1000,34394=>1000,34395=>1000,34396=>1000,34397=>1000,34398=>1000,34399=>1000,34400=>1000,34401=>1000,34402=>1000,34403=>1000,34404=>1000, + 34405=>1000,34406=>1000,34407=>1000,34408=>1000,34409=>1000,34410=>1000,34411=>1000,34412=>1000,34413=>1000,34414=>1000,34415=>1000,34416=>1000,34417=>1000,34418=>1000,34419=>1000,34420=>1000, + 34421=>1000,34422=>1000,34423=>1000,34424=>1000,34425=>1000,34426=>1000,34427=>1000,34428=>1000,34429=>1000,34430=>1000,34431=>1000,34432=>1000,34433=>1000,34434=>1000,34435=>1000,34436=>1000, + 34437=>1000,34438=>1000,34439=>1000,34440=>1000,34441=>1000,34442=>1000,34443=>1000,34444=>1000,34445=>1000,34446=>1000,34447=>1000,34448=>1000,34449=>1000,34450=>1000,34451=>1000,34452=>1000, + 34453=>1000,34454=>1000,34455=>1000,34456=>1000,34457=>1000,34458=>1000,34459=>1000,34460=>1000,34461=>1000,34462=>1000,34463=>1000,34464=>1000,34465=>1000,34466=>1000,34467=>1000,34468=>1000, + 34469=>1000,34470=>1000,34471=>1000,34472=>1000,34473=>1000,34474=>1000,34475=>1000,34476=>1000,34477=>1000,34478=>1000,34479=>1000,34480=>1000,34481=>1000,34482=>1000,34483=>1000,34484=>1000, + 34485=>1000,34486=>1000,34487=>1000,34488=>1000,34489=>1000,34490=>1000,34491=>1000,34492=>1000,34493=>1000,34494=>1000,34495=>1000,34496=>1000,34497=>1000,34498=>1000,34499=>1000,34500=>1000, + 34501=>1000,34502=>1000,34503=>1000,34504=>1000,34505=>1000,34506=>1000,34507=>1000,34508=>1000,34509=>1000,34510=>1000,34511=>1000,34512=>1000,34513=>1000,34514=>1000,34515=>1000,34516=>1000, + 34517=>1000,34518=>1000,34519=>1000,34520=>1000,34521=>1000,34522=>1000,34523=>1000,34524=>1000,34525=>1000,34526=>1000,34527=>1000,34528=>1000,34529=>1000,34530=>1000,34531=>1000,34532=>1000, + 34533=>1000,34534=>1000,34535=>1000,34536=>1000,34537=>1000,34538=>1000,34539=>1000,34540=>1000,34541=>1000,34542=>1000,34543=>1000,34544=>1000,34545=>1000,34546=>1000,34547=>1000,34548=>1000, + 34549=>1000,34550=>1000,34551=>1000,34552=>1000,34553=>1000,34554=>1000,34555=>1000,34556=>1000,34557=>1000,34558=>1000,34559=>1000,34560=>1000,34561=>1000,34562=>1000,34563=>1000,34564=>1000, + 34565=>1000,34566=>1000,34567=>1000,34568=>1000,34569=>1000,34570=>1000,34571=>1000,34572=>1000,34573=>1000,34574=>1000,34575=>1000,34576=>1000,34577=>1000,34578=>1000,34579=>1000,34580=>1000, + 34581=>1000,34582=>1000,34583=>1000,34584=>1000,34585=>1000,34586=>1000,34587=>1000,34588=>1000,34589=>1000,34590=>1000,34591=>1000,34592=>1000,34593=>1000,34594=>1000,34595=>1000,34596=>1000, + 34597=>1000,34598=>1000,34599=>1000,34600=>1000,34601=>1000,34602=>1000,34603=>1000,34604=>1000,34605=>1000,34606=>1000,34607=>1000,34608=>1000,34609=>1000,34610=>1000,34611=>1000,34612=>1000, + 34613=>1000,34614=>1000,34615=>1000,34616=>1000,34617=>1000,34618=>1000,34619=>1000,34620=>1000,34621=>1000,34622=>1000,34623=>1000,34624=>1000,34625=>1000,34626=>1000,34627=>1000,34628=>1000, + 34629=>1000,34630=>1000,34631=>1000,34632=>1000,34633=>1000,34634=>1000,34635=>1000,34636=>1000,34637=>1000,34638=>1000,34639=>1000,34640=>1000,34641=>1000,34642=>1000,34643=>1000,34644=>1000, + 34645=>1000,34646=>1000,34647=>1000,34648=>1000,34649=>1000,34650=>1000,34651=>1000,34652=>1000,34653=>1000,34654=>1000,34655=>1000,34656=>1000,34657=>1000,34658=>1000,34659=>1000,34660=>1000, + 34661=>1000,34662=>1000,34663=>1000,34664=>1000,34665=>1000,34666=>1000,34667=>1000,34668=>1000,34669=>1000,34670=>1000,34671=>1000,34672=>1000,34673=>1000,34674=>1000,34675=>1000,34676=>1000, + 34677=>1000,34678=>1000,34679=>1000,34680=>1000,34681=>1000,34682=>1000,34683=>1000,34684=>1000,34685=>1000,34686=>1000,34687=>1000,34688=>1000,34689=>1000,34690=>1000,34691=>1000,34692=>1000, + 34693=>1000,34694=>1000,34695=>1000,34696=>1000,34697=>1000,34698=>1000,34699=>1000,34700=>1000,34701=>1000,34702=>1000,34703=>1000,34704=>1000,34705=>1000,34706=>1000,34707=>1000,34708=>1000, + 34709=>1000,34710=>1000,34711=>1000,34712=>1000,34713=>1000,34714=>1000,34715=>1000,34716=>1000,34717=>1000,34718=>1000,34719=>1000,34720=>1000,34721=>1000,34722=>1000,34723=>1000,34724=>1000, + 34725=>1000,34726=>1000,34727=>1000,34728=>1000,34729=>1000,34730=>1000,34731=>1000,34732=>1000,34733=>1000,34734=>1000,34735=>1000,34736=>1000,34737=>1000,34738=>1000,34739=>1000,34740=>1000, + 34741=>1000,34742=>1000,34743=>1000,34744=>1000,34745=>1000,34746=>1000,34747=>1000,34748=>1000,34749=>1000,34750=>1000,34751=>1000,34752=>1000,34753=>1000,34754=>1000,34755=>1000,34756=>1000, + 34757=>1000,34758=>1000,34759=>1000,34760=>1000,34761=>1000,34762=>1000,34763=>1000,34764=>1000,34765=>1000,34766=>1000,34767=>1000,34768=>1000,34769=>1000,34770=>1000,34771=>1000,34772=>1000, + 34773=>1000,34774=>1000,34775=>1000,34776=>1000,34777=>1000,34778=>1000,34779=>1000,34780=>1000,34781=>1000,34782=>1000,34783=>1000,34784=>1000,34785=>1000,34786=>1000,34787=>1000,34788=>1000, + 34789=>1000,34790=>1000,34791=>1000,34792=>1000,34793=>1000,34794=>1000,34795=>1000,34796=>1000,34797=>1000,34798=>1000,34799=>1000,34800=>1000,34801=>1000,34802=>1000,34803=>1000,34804=>1000, + 34805=>1000,34806=>1000,34807=>1000,34808=>1000,34809=>1000,34810=>1000,34811=>1000,34812=>1000,34813=>1000,34814=>1000,34815=>1000,34816=>1000,34817=>1000,34818=>1000,34819=>1000,34820=>1000, + 34821=>1000,34822=>1000,34823=>1000,34824=>1000,34825=>1000,34826=>1000,34827=>1000,34828=>1000,34829=>1000,34830=>1000,34831=>1000,34832=>1000,34833=>1000,34834=>1000,34835=>1000,34836=>1000, + 34837=>1000,34838=>1000,34839=>1000,34840=>1000,34841=>1000,34842=>1000,34843=>1000,34844=>1000,34845=>1000,34846=>1000,34847=>1000,34848=>1000,34849=>1000,34850=>1000,34851=>1000,34852=>1000, + 34853=>1000,34854=>1000,34855=>1000,34856=>1000,34857=>1000,34858=>1000,34859=>1000,34860=>1000,34861=>1000,34862=>1000,34863=>1000,34864=>1000,34865=>1000,34866=>1000,34867=>1000,34868=>1000, + 34869=>1000,34870=>1000,34871=>1000,34872=>1000,34873=>1000,34874=>1000,34875=>1000,34876=>1000,34877=>1000,34878=>1000,34879=>1000,34880=>1000,34881=>1000,34882=>1000,34883=>1000,34884=>1000, + 34885=>1000,34886=>1000,34887=>1000,34888=>1000,34889=>1000,34890=>1000,34891=>1000,34892=>1000,34893=>1000,34894=>1000,34895=>1000,34896=>1000,34897=>1000,34898=>1000,34899=>1000,34900=>1000, + 34901=>1000,34902=>1000,34903=>1000,34904=>1000,34905=>1000,34906=>1000,34907=>1000,34908=>1000,34909=>1000,34910=>1000,34911=>1000,34912=>1000,34913=>1000,34914=>1000,34915=>1000,34916=>1000, + 34917=>1000,34918=>1000,34919=>1000,34920=>1000,34921=>1000,34922=>1000,34923=>1000,34924=>1000,34925=>1000,34926=>1000,34927=>1000,34928=>1000,34929=>1000,34930=>1000,34931=>1000,34932=>1000, + 34933=>1000,34934=>1000,34935=>1000,34936=>1000,34937=>1000,34938=>1000,34939=>1000,34940=>1000,34941=>1000,34942=>1000,34943=>1000,34944=>1000,34945=>1000,34946=>1000,34947=>1000,34948=>1000, + 34949=>1000,34950=>1000,34951=>1000,34952=>1000,34953=>1000,34954=>1000,34955=>1000,34956=>1000,34957=>1000,34958=>1000,34959=>1000,34960=>1000,34961=>1000,34962=>1000,34963=>1000,34964=>1000, + 34965=>1000,34966=>1000,34967=>1000,34968=>1000,34969=>1000,34970=>1000,34971=>1000,34972=>1000,34973=>1000,34974=>1000,34975=>1000,34976=>1000,34977=>1000,34978=>1000,34979=>1000,34980=>1000, + 34981=>1000,34982=>1000,34983=>1000,34984=>1000,34985=>1000,34986=>1000,34987=>1000,34988=>1000,34989=>1000,34990=>1000,34991=>1000,34992=>1000,34993=>1000,34994=>1000,34995=>1000,34996=>1000, + 34997=>1000,34998=>1000,34999=>1000,35000=>1000,35001=>1000,35002=>1000,35003=>1000,35004=>1000,35005=>1000,35006=>1000,35007=>1000,35008=>1000,35009=>1000,35010=>1000,35011=>1000,35012=>1000, + 35013=>1000,35014=>1000,35015=>1000,35016=>1000,35017=>1000,35018=>1000,35019=>1000,35020=>1000,35021=>1000,35022=>1000,35023=>1000,35024=>1000,35025=>1000,35026=>1000,35027=>1000,35028=>1000, + 35029=>1000,35030=>1000,35031=>1000,35032=>1000,35033=>1000,35034=>1000,35035=>1000,35036=>1000,35037=>1000,35038=>1000,35039=>1000,35040=>1000,35041=>1000,35042=>1000,35043=>1000,35044=>1000, + 35045=>1000,35046=>1000,35047=>1000,35048=>1000,35049=>1000,35050=>1000,35051=>1000,35052=>1000,35053=>1000,35054=>1000,35055=>1000,35056=>1000,35057=>1000,35058=>1000,35059=>1000,35060=>1000, + 35061=>1000,35062=>1000,35063=>1000,35064=>1000,35065=>1000,35066=>1000,35067=>1000,35068=>1000,35069=>1000,35070=>1000,35071=>1000,35072=>1000,35073=>1000,35074=>1000,35075=>1000,35076=>1000, + 35077=>1000,35078=>1000,35079=>1000,35080=>1000,35081=>1000,35082=>1000,35083=>1000,35084=>1000,35085=>1000,35086=>1000,35087=>1000,35088=>1000,35089=>1000,35090=>1000,35091=>1000,35092=>1000, + 35093=>1000,35094=>1000,35095=>1000,35096=>1000,35097=>1000,35098=>1000,35099=>1000,35100=>1000,35101=>1000,35102=>1000,35103=>1000,35104=>1000,35105=>1000,35106=>1000,35107=>1000,35108=>1000, + 35109=>1000,35110=>1000,35111=>1000,35112=>1000,35113=>1000,35114=>1000,35115=>1000,35116=>1000,35117=>1000,35118=>1000,35119=>1000,35120=>1000,35121=>1000,35122=>1000,35123=>1000,35124=>1000, + 35125=>1000,35126=>1000,35127=>1000,35128=>1000,35129=>1000,35130=>1000,35131=>1000,35132=>1000,35133=>1000,35134=>1000,35135=>1000,35136=>1000,35137=>1000,35138=>1000,35139=>1000,35140=>1000, + 35141=>1000,35142=>1000,35143=>1000,35144=>1000,35145=>1000,35146=>1000,35147=>1000,35148=>1000,35149=>1000,35150=>1000,35151=>1000,35152=>1000,35153=>1000,35154=>1000,35155=>1000,35156=>1000, + 35157=>1000,35158=>1000,35159=>1000,35160=>1000,35161=>1000,35162=>1000,35163=>1000,35164=>1000,35165=>1000,35166=>1000,35167=>1000,35168=>1000,35169=>1000,35170=>1000,35171=>1000,35172=>1000, + 35173=>1000,35174=>1000,35175=>1000,35176=>1000,35177=>1000,35178=>1000,35179=>1000,35180=>1000,35181=>1000,35182=>1000,35183=>1000,35184=>1000,35185=>1000,35186=>1000,35187=>1000,35188=>1000, + 35189=>1000,35190=>1000,35191=>1000,35192=>1000,35193=>1000,35194=>1000,35195=>1000,35196=>1000,35197=>1000,35198=>1000,35199=>1000,35200=>1000,35201=>1000,35202=>1000,35203=>1000,35204=>1000, + 35205=>1000,35206=>1000,35207=>1000,35208=>1000,35209=>1000,35210=>1000,35211=>1000,35212=>1000,35213=>1000,35214=>1000,35215=>1000,35216=>1000,35217=>1000,35218=>1000,35219=>1000,35220=>1000, + 35221=>1000,35222=>1000,35223=>1000,35224=>1000,35225=>1000,35226=>1000,35227=>1000,35228=>1000,35229=>1000,35230=>1000,35231=>1000,35232=>1000,35233=>1000,35234=>1000,35235=>1000,35236=>1000, + 35237=>1000,35238=>1000,35239=>1000,35240=>1000,35241=>1000,35242=>1000,35243=>1000,35244=>1000,35245=>1000,35246=>1000,35247=>1000,35248=>1000,35249=>1000,35250=>1000,35251=>1000,35252=>1000, + 35253=>1000,35254=>1000,35255=>1000,35256=>1000,35257=>1000,35258=>1000,35259=>1000,35260=>1000,35261=>1000,35262=>1000,35263=>1000,35264=>1000,35265=>1000,35266=>1000,35267=>1000,35268=>1000, + 35269=>1000,35270=>1000,35271=>1000,35272=>1000,35273=>1000,35274=>1000,35275=>1000,35276=>1000,35277=>1000,35278=>1000,35279=>1000,35280=>1000,35281=>1000,35282=>1000,35283=>1000,35284=>1000, + 35285=>1000,35286=>1000,35287=>1000,35288=>1000,35289=>1000,35290=>1000,35291=>1000,35292=>1000,35293=>1000,35294=>1000,35295=>1000,35296=>1000,35297=>1000,35298=>1000,35299=>1000,35300=>1000, + 35301=>1000,35302=>1000,35303=>1000,35304=>1000,35305=>1000,35306=>1000,35307=>1000,35308=>1000,35309=>1000,35310=>1000,35311=>1000,35312=>1000,35313=>1000,35314=>1000,35315=>1000,35316=>1000, + 35317=>1000,35318=>1000,35319=>1000,35320=>1000,35321=>1000,35322=>1000,35323=>1000,35324=>1000,35325=>1000,35326=>1000,35327=>1000,35328=>1000,35329=>1000,35330=>1000,35331=>1000,35332=>1000, + 35333=>1000,35334=>1000,35335=>1000,35336=>1000,35337=>1000,35338=>1000,35339=>1000,35340=>1000,35341=>1000,35342=>1000,35343=>1000,35344=>1000,35345=>1000,35346=>1000,35347=>1000,35348=>1000, + 35349=>1000,35350=>1000,35351=>1000,35352=>1000,35353=>1000,35354=>1000,35355=>1000,35356=>1000,35357=>1000,35358=>1000,35359=>1000,35360=>1000,35361=>1000,35362=>1000,35363=>1000,35364=>1000, + 35365=>1000,35366=>1000,35367=>1000,35368=>1000,35369=>1000,35370=>1000,35371=>1000,35372=>1000,35373=>1000,35374=>1000,35375=>1000,35376=>1000,35377=>1000,35378=>1000,35379=>1000,35380=>1000, + 35381=>1000,35382=>1000,35383=>1000,35384=>1000,35385=>1000,35386=>1000,35387=>1000,35388=>1000,35389=>1000,35390=>1000,35391=>1000,35392=>1000,35393=>1000,35394=>1000,35395=>1000,35396=>1000, + 35397=>1000,35398=>1000,35399=>1000,35400=>1000,35401=>1000,35402=>1000,35403=>1000,35404=>1000,35405=>1000,35406=>1000,35407=>1000,35408=>1000,35409=>1000,35410=>1000,35411=>1000,35412=>1000, + 35413=>1000,35414=>1000,35415=>1000,35416=>1000,35417=>1000,35418=>1000,35419=>1000,35420=>1000,35421=>1000,35422=>1000,35423=>1000,35424=>1000,35425=>1000,35426=>1000,35427=>1000,35428=>1000, + 35429=>1000,35430=>1000,35431=>1000,35432=>1000,35433=>1000,35434=>1000,35435=>1000,35436=>1000,35437=>1000,35438=>1000,35439=>1000,35440=>1000,35441=>1000,35442=>1000,35443=>1000,35444=>1000, + 35445=>1000,35446=>1000,35447=>1000,35448=>1000,35449=>1000,35450=>1000,35451=>1000,35452=>1000,35453=>1000,35454=>1000,35455=>1000,35456=>1000,35457=>1000,35458=>1000,35459=>1000,35460=>1000, + 35461=>1000,35462=>1000,35463=>1000,35464=>1000,35465=>1000,35466=>1000,35467=>1000,35468=>1000,35469=>1000,35470=>1000,35471=>1000,35472=>1000,35473=>1000,35474=>1000,35475=>1000,35476=>1000, + 35477=>1000,35478=>1000,35479=>1000,35480=>1000,35481=>1000,35482=>1000,35483=>1000,35484=>1000,35485=>1000,35486=>1000,35487=>1000,35488=>1000,35489=>1000,35490=>1000,35491=>1000,35492=>1000, + 35493=>1000,35494=>1000,35495=>1000,35496=>1000,35497=>1000,35498=>1000,35499=>1000,35500=>1000,35501=>1000,35502=>1000,35503=>1000,35504=>1000,35505=>1000,35506=>1000,35507=>1000,35508=>1000, + 35509=>1000,35510=>1000,35511=>1000,35512=>1000,35513=>1000,35514=>1000,35515=>1000,35516=>1000,35517=>1000,35518=>1000,35519=>1000,35520=>1000,35521=>1000,35522=>1000,35523=>1000,35524=>1000, + 35525=>1000,35526=>1000,35527=>1000,35528=>1000,35529=>1000,35530=>1000,35531=>1000,35532=>1000,35533=>1000,35534=>1000,35535=>1000,35536=>1000,35537=>1000,35538=>1000,35539=>1000,35540=>1000, + 35541=>1000,35542=>1000,35543=>1000,35544=>1000,35545=>1000,35546=>1000,35547=>1000,35548=>1000,35549=>1000,35550=>1000,35551=>1000,35552=>1000,35553=>1000,35554=>1000,35555=>1000,35556=>1000, + 35557=>1000,35558=>1000,35559=>1000,35560=>1000,35561=>1000,35562=>1000,35563=>1000,35564=>1000,35565=>1000,35566=>1000,35567=>1000,35568=>1000,35569=>1000,35570=>1000,35571=>1000,35572=>1000, + 35573=>1000,35574=>1000,35575=>1000,35576=>1000,35577=>1000,35578=>1000,35579=>1000,35580=>1000,35581=>1000,35582=>1000,35583=>1000,35584=>1000,35585=>1000,35586=>1000,35587=>1000,35588=>1000, + 35589=>1000,35590=>1000,35591=>1000,35592=>1000,35593=>1000,35594=>1000,35595=>1000,35596=>1000,35597=>1000,35598=>1000,35599=>1000,35600=>1000,35601=>1000,35602=>1000,35603=>1000,35604=>1000, + 35605=>1000,35606=>1000,35607=>1000,35608=>1000,35609=>1000,35610=>1000,35611=>1000,35612=>1000,35613=>1000,35614=>1000,35615=>1000,35616=>1000,35617=>1000,35618=>1000,35619=>1000,35620=>1000, + 35621=>1000,35622=>1000,35623=>1000,35624=>1000,35625=>1000,35626=>1000,35627=>1000,35628=>1000,35629=>1000,35630=>1000,35631=>1000,35632=>1000,35633=>1000,35634=>1000,35635=>1000,35636=>1000, + 35637=>1000,35638=>1000,35639=>1000,35640=>1000,35641=>1000,35642=>1000,35643=>1000,35644=>1000,35645=>1000,35646=>1000,35647=>1000,35648=>1000,35649=>1000,35650=>1000,35651=>1000,35652=>1000, + 35653=>1000,35654=>1000,35655=>1000,35656=>1000,35657=>1000,35658=>1000,35659=>1000,35660=>1000,35661=>1000,35662=>1000,35663=>1000,35664=>1000,35665=>1000,35666=>1000,35667=>1000,35668=>1000, + 35669=>1000,35670=>1000,35671=>1000,35672=>1000,35673=>1000,35674=>1000,35675=>1000,35676=>1000,35677=>1000,35678=>1000,35679=>1000,35680=>1000,35681=>1000,35682=>1000,35683=>1000,35684=>1000, + 35685=>1000,35686=>1000,35687=>1000,35688=>1000,35689=>1000,35690=>1000,35691=>1000,35692=>1000,35693=>1000,35694=>1000,35695=>1000,35696=>1000,35697=>1000,35698=>1000,35699=>1000,35700=>1000, + 35701=>1000,35702=>1000,35703=>1000,35704=>1000,35705=>1000,35706=>1000,35707=>1000,35708=>1000,35709=>1000,35710=>1000,35711=>1000,35712=>1000,35713=>1000,35714=>1000,35715=>1000,35716=>1000, + 35717=>1000,35718=>1000,35719=>1000,35720=>1000,35721=>1000,35722=>1000,35723=>1000,35724=>1000,35725=>1000,35726=>1000,35727=>1000,35728=>1000,35729=>1000,35730=>1000,35731=>1000,35732=>1000, + 35733=>1000,35734=>1000,35735=>1000,35736=>1000,35737=>1000,35738=>1000,35739=>1000,35740=>1000,35741=>1000,35742=>1000,35743=>1000,35744=>1000,35745=>1000,35746=>1000,35747=>1000,35748=>1000, + 35749=>1000,35750=>1000,35751=>1000,35752=>1000,35753=>1000,35754=>1000,35755=>1000,35756=>1000,35757=>1000,35758=>1000,35759=>1000,35760=>1000,35761=>1000,35762=>1000,35763=>1000,35764=>1000, + 35765=>1000,35766=>1000,35767=>1000,35768=>1000,35769=>1000,35770=>1000,35771=>1000,35772=>1000,35773=>1000,35774=>1000,35775=>1000,35776=>1000,35777=>1000,35778=>1000,35779=>1000,35780=>1000, + 35781=>1000,35782=>1000,35783=>1000,35784=>1000,35785=>1000,35786=>1000,35787=>1000,35788=>1000,35789=>1000,35790=>1000,35791=>1000,35792=>1000,35793=>1000,35794=>1000,35795=>1000,35796=>1000, + 35797=>1000,35798=>1000,35799=>1000,35800=>1000,35801=>1000,35802=>1000,35803=>1000,35804=>1000,35805=>1000,35806=>1000,35807=>1000,35808=>1000,35809=>1000,35810=>1000,35811=>1000,35812=>1000, + 35813=>1000,35814=>1000,35815=>1000,35816=>1000,35817=>1000,35818=>1000,35819=>1000,35820=>1000,35821=>1000,35822=>1000,35823=>1000,35824=>1000,35825=>1000,35826=>1000,35827=>1000,35828=>1000, + 35829=>1000,35830=>1000,35831=>1000,35832=>1000,35833=>1000,35834=>1000,35835=>1000,35836=>1000,35837=>1000,35838=>1000,35839=>1000,35840=>1000,35841=>1000,35842=>1000,35843=>1000,35844=>1000, + 35845=>1000,35846=>1000,35847=>1000,35848=>1000,35849=>1000,35850=>1000,35851=>1000,35852=>1000,35853=>1000,35854=>1000,35855=>1000,35856=>1000,35857=>1000,35858=>1000,35859=>1000,35860=>1000, + 35861=>1000,35862=>1000,35863=>1000,35864=>1000,35865=>1000,35866=>1000,35867=>1000,35868=>1000,35869=>1000,35870=>1000,35871=>1000,35872=>1000,35873=>1000,35874=>1000,35875=>1000,35876=>1000, + 35877=>1000,35878=>1000,35879=>1000,35880=>1000,35881=>1000,35882=>1000,35883=>1000,35884=>1000,35885=>1000,35886=>1000,35887=>1000,35888=>1000,35889=>1000,35890=>1000,35891=>1000,35892=>1000, + 35893=>1000,35894=>1000,35895=>1000,35896=>1000,35897=>1000,35898=>1000,35899=>1000,35900=>1000,35901=>1000,35902=>1000,35903=>1000,35904=>1000,35905=>1000,35906=>1000,35907=>1000,35908=>1000, + 35909=>1000,35910=>1000,35911=>1000,35912=>1000,35913=>1000,35914=>1000,35915=>1000,35916=>1000,35917=>1000,35918=>1000,35919=>1000,35920=>1000,35921=>1000,35922=>1000,35923=>1000,35924=>1000, + 35925=>1000,35926=>1000,35927=>1000,35928=>1000,35929=>1000,35930=>1000,35931=>1000,35932=>1000,35933=>1000,35934=>1000,35935=>1000,35936=>1000,35937=>1000,35938=>1000,35939=>1000,35940=>1000, + 35941=>1000,35942=>1000,35943=>1000,35944=>1000,35945=>1000,35946=>1000,35947=>1000,35948=>1000,35949=>1000,35950=>1000,35951=>1000,35952=>1000,35953=>1000,35954=>1000,35955=>1000,35956=>1000, + 35957=>1000,35958=>1000,35959=>1000,35960=>1000,35961=>1000,35962=>1000,35963=>1000,35964=>1000,35965=>1000,35966=>1000,35967=>1000,35968=>1000,35969=>1000,35970=>1000,35971=>1000,35972=>1000, + 35973=>1000,35974=>1000,35975=>1000,35976=>1000,35977=>1000,35978=>1000,35979=>1000,35980=>1000,35981=>1000,35982=>1000,35983=>1000,35984=>1000,35985=>1000,35986=>1000,35987=>1000,35988=>1000, + 35989=>1000,35990=>1000,35991=>1000,35992=>1000,35993=>1000,35994=>1000,35995=>1000,35996=>1000,35997=>1000,35998=>1000,35999=>1000,36000=>1000,36001=>1000,36002=>1000,36003=>1000,36004=>1000, + 36005=>1000,36006=>1000,36007=>1000,36008=>1000,36009=>1000,36010=>1000,36011=>1000,36012=>1000,36013=>1000,36014=>1000,36015=>1000,36016=>1000,36017=>1000,36018=>1000,36019=>1000,36020=>1000, + 36021=>1000,36022=>1000,36023=>1000,36024=>1000,36025=>1000,36026=>1000,36027=>1000,36028=>1000,36029=>1000,36030=>1000,36031=>1000,36032=>1000,36033=>1000,36034=>1000,36035=>1000,36036=>1000, + 36037=>1000,36038=>1000,36039=>1000,36040=>1000,36041=>1000,36042=>1000,36043=>1000,36044=>1000,36045=>1000,36046=>1000,36047=>1000,36048=>1000,36049=>1000,36050=>1000,36051=>1000,36052=>1000, + 36053=>1000,36054=>1000,36055=>1000,36056=>1000,36057=>1000,36058=>1000,36059=>1000,36060=>1000,36061=>1000,36062=>1000,36063=>1000,36064=>1000,36065=>1000,36066=>1000,36067=>1000,36068=>1000, + 36069=>1000,36070=>1000,36071=>1000,36072=>1000,36073=>1000,36074=>1000,36075=>1000,36076=>1000,36077=>1000,36078=>1000,36079=>1000,36080=>1000,36081=>1000,36082=>1000,36083=>1000,36084=>1000, + 36085=>1000,36086=>1000,36087=>1000,36088=>1000,36089=>1000,36090=>1000,36091=>1000,36092=>1000,36093=>1000,36094=>1000,36095=>1000,36096=>1000,36097=>1000,36098=>1000,36099=>1000,36100=>1000, + 36101=>1000,36102=>1000,36103=>1000,36104=>1000,36105=>1000,36106=>1000,36107=>1000,36108=>1000,36109=>1000,36110=>1000,36111=>1000,36112=>1000,36113=>1000,36114=>1000,36115=>1000,36116=>1000, + 36117=>1000,36118=>1000,36119=>1000,36120=>1000,36121=>1000,36122=>1000,36123=>1000,36124=>1000,36125=>1000,36126=>1000,36127=>1000,36128=>1000,36129=>1000,36130=>1000,36131=>1000,36132=>1000, + 36133=>1000,36134=>1000,36135=>1000,36136=>1000,36137=>1000,36138=>1000,36139=>1000,36140=>1000,36141=>1000,36142=>1000,36143=>1000,36144=>1000,36145=>1000,36146=>1000,36147=>1000,36148=>1000, + 36149=>1000,36150=>1000,36151=>1000,36152=>1000,36153=>1000,36154=>1000,36155=>1000,36156=>1000,36157=>1000,36158=>1000,36159=>1000,36160=>1000,36161=>1000,36162=>1000,36163=>1000,36164=>1000, + 36165=>1000,36166=>1000,36167=>1000,36168=>1000,36169=>1000,36170=>1000,36171=>1000,36172=>1000,36173=>1000,36174=>1000,36175=>1000,36176=>1000,36177=>1000,36178=>1000,36179=>1000,36180=>1000, + 36181=>1000,36182=>1000,36183=>1000,36184=>1000,36185=>1000,36186=>1000,36187=>1000,36188=>1000,36189=>1000,36190=>1000,36191=>1000,36192=>1000,36193=>1000,36194=>1000,36195=>1000,36196=>1000, + 36197=>1000,36198=>1000,36199=>1000,36200=>1000,36201=>1000,36202=>1000,36203=>1000,36204=>1000,36205=>1000,36206=>1000,36207=>1000,36208=>1000,36209=>1000,36210=>1000,36211=>1000,36212=>1000, + 36213=>1000,36214=>1000,36215=>1000,36216=>1000,36217=>1000,36218=>1000,36219=>1000,36220=>1000,36221=>1000,36222=>1000,36223=>1000,36224=>1000,36225=>1000,36226=>1000,36227=>1000,36228=>1000, + 36229=>1000,36230=>1000,36231=>1000,36232=>1000,36233=>1000,36234=>1000,36235=>1000,36236=>1000,36237=>1000,36238=>1000,36239=>1000,36240=>1000,36241=>1000,36242=>1000,36243=>1000,36244=>1000, + 36245=>1000,36246=>1000,36247=>1000,36248=>1000,36249=>1000,36250=>1000,36251=>1000,36252=>1000,36253=>1000,36254=>1000,36255=>1000,36256=>1000,36257=>1000,36258=>1000,36259=>1000,36260=>1000, + 36261=>1000,36262=>1000,36263=>1000,36264=>1000,36265=>1000,36266=>1000,36267=>1000,36268=>1000,36269=>1000,36270=>1000,36271=>1000,36272=>1000,36273=>1000,36274=>1000,36275=>1000,36276=>1000, + 36277=>1000,36278=>1000,36279=>1000,36280=>1000,36281=>1000,36282=>1000,36283=>1000,36284=>1000,36285=>1000,36286=>1000,36287=>1000,36288=>1000,36289=>1000,36290=>1000,36291=>1000,36292=>1000, + 36293=>1000,36294=>1000,36295=>1000,36296=>1000,36297=>1000,36298=>1000,36299=>1000,36300=>1000,36301=>1000,36302=>1000,36303=>1000,36304=>1000,36305=>1000,36306=>1000,36307=>1000,36308=>1000, + 36309=>1000,36310=>1000,36311=>1000,36312=>1000,36313=>1000,36314=>1000,36315=>1000,36316=>1000,36317=>1000,36318=>1000,36319=>1000,36320=>1000,36321=>1000,36322=>1000,36323=>1000,36324=>1000, + 36325=>1000,36326=>1000,36327=>1000,36328=>1000,36329=>1000,36330=>1000,36331=>1000,36332=>1000,36333=>1000,36334=>1000,36335=>1000,36336=>1000,36337=>1000,36338=>1000,36339=>1000,36340=>1000, + 36341=>1000,36342=>1000,36343=>1000,36344=>1000,36345=>1000,36346=>1000,36347=>1000,36348=>1000,36349=>1000,36350=>1000,36351=>1000,36352=>1000,36353=>1000,36354=>1000,36355=>1000,36356=>1000, + 36357=>1000,36358=>1000,36359=>1000,36360=>1000,36361=>1000,36362=>1000,36363=>1000,36364=>1000,36365=>1000,36366=>1000,36367=>1000,36368=>1000,36369=>1000,36370=>1000,36371=>1000,36372=>1000, + 36373=>1000,36374=>1000,36375=>1000,36376=>1000,36377=>1000,36378=>1000,36379=>1000,36380=>1000,36381=>1000,36382=>1000,36383=>1000,36384=>1000,36385=>1000,36386=>1000,36387=>1000,36388=>1000, + 36389=>1000,36390=>1000,36391=>1000,36392=>1000,36393=>1000,36394=>1000,36395=>1000,36396=>1000,36397=>1000,36398=>1000,36399=>1000,36400=>1000,36401=>1000,36402=>1000,36403=>1000,36404=>1000, + 36405=>1000,36406=>1000,36407=>1000,36408=>1000,36409=>1000,36410=>1000,36411=>1000,36412=>1000,36413=>1000,36414=>1000,36415=>1000,36416=>1000,36417=>1000,36418=>1000,36419=>1000,36420=>1000, + 36421=>1000,36422=>1000,36423=>1000,36424=>1000,36425=>1000,36426=>1000,36427=>1000,36428=>1000,36429=>1000,36430=>1000,36431=>1000,36432=>1000,36433=>1000,36434=>1000,36435=>1000,36436=>1000, + 36437=>1000,36438=>1000,36439=>1000,36440=>1000,36441=>1000,36442=>1000,36443=>1000,36444=>1000,36445=>1000,36446=>1000,36447=>1000,36448=>1000,36449=>1000,36450=>1000,36451=>1000,36452=>1000, + 36453=>1000,36454=>1000,36455=>1000,36456=>1000,36457=>1000,36458=>1000,36459=>1000,36460=>1000,36461=>1000,36462=>1000,36463=>1000,36464=>1000,36465=>1000,36466=>1000,36467=>1000,36468=>1000, + 36469=>1000,36470=>1000,36471=>1000,36472=>1000,36473=>1000,36474=>1000,36475=>1000,36476=>1000,36477=>1000,36478=>1000,36479=>1000,36480=>1000,36481=>1000,36482=>1000,36483=>1000,36484=>1000, + 36485=>1000,36486=>1000,36487=>1000,36488=>1000,36489=>1000,36490=>1000,36491=>1000,36492=>1000,36493=>1000,36494=>1000,36495=>1000,36496=>1000,36497=>1000,36498=>1000,36499=>1000,36500=>1000, + 36501=>1000,36502=>1000,36503=>1000,36504=>1000,36505=>1000,36506=>1000,36507=>1000,36508=>1000,36509=>1000,36510=>1000,36511=>1000,36512=>1000,36513=>1000,36514=>1000,36515=>1000,36516=>1000, + 36517=>1000,36518=>1000,36519=>1000,36520=>1000,36521=>1000,36522=>1000,36523=>1000,36524=>1000,36525=>1000,36526=>1000,36527=>1000,36528=>1000,36529=>1000,36530=>1000,36531=>1000,36532=>1000, + 36533=>1000,36534=>1000,36535=>1000,36536=>1000,36537=>1000,36538=>1000,36539=>1000,36540=>1000,36541=>1000,36542=>1000,36543=>1000,36544=>1000,36545=>1000,36546=>1000,36547=>1000,36548=>1000, + 36549=>1000,36550=>1000,36551=>1000,36552=>1000,36553=>1000,36554=>1000,36555=>1000,36556=>1000,36557=>1000,36558=>1000,36559=>1000,36560=>1000,36561=>1000,36562=>1000,36563=>1000,36564=>1000, + 36565=>1000,36566=>1000,36567=>1000,36568=>1000,36569=>1000,36570=>1000,36571=>1000,36572=>1000,36573=>1000,36574=>1000,36575=>1000,36576=>1000,36577=>1000,36578=>1000,36579=>1000,36580=>1000, + 36581=>1000,36582=>1000,36583=>1000,36584=>1000,36585=>1000,36586=>1000,36587=>1000,36588=>1000,36589=>1000,36590=>1000,36591=>1000,36592=>1000,36593=>1000,36594=>1000,36595=>1000,36596=>1000, + 36597=>1000,36598=>1000,36599=>1000,36600=>1000,36601=>1000,36602=>1000,36603=>1000,36604=>1000,36605=>1000,36606=>1000,36607=>1000,36608=>1000,36609=>1000,36610=>1000,36611=>1000,36612=>1000, + 36613=>1000,36614=>1000,36615=>1000,36616=>1000,36617=>1000,36618=>1000,36619=>1000,36620=>1000,36621=>1000,36622=>1000,36623=>1000,36624=>1000,36625=>1000,36626=>1000,36627=>1000,36628=>1000, + 36629=>1000,36630=>1000,36631=>1000,36632=>1000,36633=>1000,36634=>1000,36635=>1000,36636=>1000,36637=>1000,36638=>1000,36639=>1000,36640=>1000,36641=>1000,36642=>1000,36643=>1000,36644=>1000, + 36645=>1000,36646=>1000,36647=>1000,36648=>1000,36649=>1000,36650=>1000,36651=>1000,36652=>1000,36653=>1000,36654=>1000,36655=>1000,36656=>1000,36657=>1000,36658=>1000,36659=>1000,36660=>1000, + 36661=>1000,36662=>1000,36663=>1000,36664=>1000,36665=>1000,36666=>1000,36667=>1000,36668=>1000,36669=>1000,36670=>1000,36671=>1000,36672=>1000,36673=>1000,36674=>1000,36675=>1000,36676=>1000, + 36677=>1000,36678=>1000,36679=>1000,36680=>1000,36681=>1000,36682=>1000,36683=>1000,36684=>1000,36685=>1000,36686=>1000,36687=>1000,36688=>1000,36689=>1000,36690=>1000,36691=>1000,36692=>1000, + 36693=>1000,36694=>1000,36695=>1000,36696=>1000,36697=>1000,36698=>1000,36699=>1000,36700=>1000,36701=>1000,36702=>1000,36703=>1000,36704=>1000,36705=>1000,36706=>1000,36707=>1000,36708=>1000, + 36709=>1000,36710=>1000,36711=>1000,36712=>1000,36713=>1000,36714=>1000,36715=>1000,36716=>1000,36717=>1000,36718=>1000,36719=>1000,36720=>1000,36721=>1000,36722=>1000,36723=>1000,36724=>1000, + 36725=>1000,36726=>1000,36727=>1000,36728=>1000,36729=>1000,36730=>1000,36731=>1000,36732=>1000,36733=>1000,36734=>1000,36735=>1000,36736=>1000,36737=>1000,36738=>1000,36739=>1000,36740=>1000, + 36741=>1000,36742=>1000,36743=>1000,36744=>1000,36745=>1000,36746=>1000,36747=>1000,36748=>1000,36749=>1000,36750=>1000,36751=>1000,36752=>1000,36753=>1000,36754=>1000,36755=>1000,36756=>1000, + 36757=>1000,36758=>1000,36759=>1000,36760=>1000,36761=>1000,36762=>1000,36763=>1000,36764=>1000,36765=>1000,36766=>1000,36767=>1000,36768=>1000,36769=>1000,36770=>1000,36771=>1000,36772=>1000, + 36773=>1000,36774=>1000,36775=>1000,36776=>1000,36777=>1000,36778=>1000,36779=>1000,36780=>1000,36781=>1000,36782=>1000,36783=>1000,36784=>1000,36785=>1000,36786=>1000,36787=>1000,36788=>1000, + 36789=>1000,36790=>1000,36791=>1000,36792=>1000,36793=>1000,36794=>1000,36795=>1000,36796=>1000,36797=>1000,36798=>1000,36799=>1000,36800=>1000,36801=>1000,36802=>1000,36803=>1000,36804=>1000, + 36805=>1000,36806=>1000,36807=>1000,36808=>1000,36809=>1000,36810=>1000,36811=>1000,36812=>1000,36813=>1000,36814=>1000,36815=>1000,36816=>1000,36817=>1000,36818=>1000,36819=>1000,36820=>1000, + 36821=>1000,36822=>1000,36823=>1000,36824=>1000,36825=>1000,36826=>1000,36827=>1000,36828=>1000,36829=>1000,36830=>1000,36831=>1000,36832=>1000,36833=>1000,36834=>1000,36835=>1000,36836=>1000, + 36837=>1000,36838=>1000,36839=>1000,36840=>1000,36841=>1000,36842=>1000,36843=>1000,36844=>1000,36845=>1000,36846=>1000,36847=>1000,36848=>1000,36849=>1000,36850=>1000,36851=>1000,36852=>1000, + 36853=>1000,36854=>1000,36855=>1000,36856=>1000,36857=>1000,36858=>1000,36859=>1000,36860=>1000,36861=>1000,36862=>1000,36863=>1000,36864=>1000,36865=>1000,36866=>1000,36867=>1000,36868=>1000, + 36869=>1000,36870=>1000,36871=>1000,36872=>1000,36873=>1000,36874=>1000,36875=>1000,36876=>1000,36877=>1000,36878=>1000,36879=>1000,36880=>1000,36881=>1000,36882=>1000,36883=>1000,36884=>1000, + 36885=>1000,36886=>1000,36887=>1000,36888=>1000,36889=>1000,36890=>1000,36891=>1000,36892=>1000,36893=>1000,36894=>1000,36895=>1000,36896=>1000,36897=>1000,36898=>1000,36899=>1000,36900=>1000, + 36901=>1000,36902=>1000,36903=>1000,36904=>1000,36905=>1000,36906=>1000,36907=>1000,36908=>1000,36909=>1000,36910=>1000,36911=>1000,36912=>1000,36913=>1000,36914=>1000,36915=>1000,36916=>1000, + 36917=>1000,36918=>1000,36919=>1000,36920=>1000,36921=>1000,36922=>1000,36923=>1000,36924=>1000,36925=>1000,36926=>1000,36927=>1000,36928=>1000,36929=>1000,36930=>1000,36931=>1000,36932=>1000, + 36933=>1000,36934=>1000,36935=>1000,36936=>1000,36937=>1000,36938=>1000,36939=>1000,36940=>1000,36941=>1000,36942=>1000,36943=>1000,36944=>1000,36945=>1000,36946=>1000,36947=>1000,36948=>1000, + 36949=>1000,36950=>1000,36951=>1000,36952=>1000,36953=>1000,36954=>1000,36955=>1000,36956=>1000,36957=>1000,36958=>1000,36959=>1000,36960=>1000,36961=>1000,36962=>1000,36963=>1000,36964=>1000, + 36965=>1000,36966=>1000,36967=>1000,36968=>1000,36969=>1000,36970=>1000,36971=>1000,36972=>1000,36973=>1000,36974=>1000,36975=>1000,36976=>1000,36977=>1000,36978=>1000,36979=>1000,36980=>1000, + 36981=>1000,36982=>1000,36983=>1000,36984=>1000,36985=>1000,36986=>1000,36987=>1000,36988=>1000,36989=>1000,36990=>1000,36991=>1000,36992=>1000,36993=>1000,36994=>1000,36995=>1000,36996=>1000, + 36997=>1000,36998=>1000,36999=>1000,37000=>1000,37001=>1000,37002=>1000,37003=>1000,37004=>1000,37005=>1000,37006=>1000,37007=>1000,37008=>1000,37009=>1000,37010=>1000,37011=>1000,37012=>1000, + 37013=>1000,37014=>1000,37015=>1000,37016=>1000,37017=>1000,37018=>1000,37019=>1000,37020=>1000,37021=>1000,37022=>1000,37023=>1000,37024=>1000,37025=>1000,37026=>1000,37027=>1000,37028=>1000, + 37029=>1000,37030=>1000,37031=>1000,37032=>1000,37033=>1000,37034=>1000,37035=>1000,37036=>1000,37037=>1000,37038=>1000,37039=>1000,37040=>1000,37041=>1000,37042=>1000,37043=>1000,37044=>1000, + 37045=>1000,37046=>1000,37047=>1000,37048=>1000,37049=>1000,37050=>1000,37051=>1000,37052=>1000,37053=>1000,37054=>1000,37055=>1000,37056=>1000,37057=>1000,37058=>1000,37059=>1000,37060=>1000, + 37061=>1000,37062=>1000,37063=>1000,37064=>1000,37065=>1000,37066=>1000,37067=>1000,37068=>1000,37069=>1000,37070=>1000,37071=>1000,37072=>1000,37073=>1000,37074=>1000,37075=>1000,37076=>1000, + 37077=>1000,37078=>1000,37079=>1000,37080=>1000,37081=>1000,37082=>1000,37083=>1000,37084=>1000,37085=>1000,37086=>1000,37087=>1000,37088=>1000,37089=>1000,37090=>1000,37091=>1000,37092=>1000, + 37093=>1000,37094=>1000,37095=>1000,37096=>1000,37097=>1000,37098=>1000,37099=>1000,37100=>1000,37101=>1000,37102=>1000,37103=>1000,37104=>1000,37105=>1000,37106=>1000,37107=>1000,37108=>1000, + 37109=>1000,37110=>1000,37111=>1000,37112=>1000,37113=>1000,37114=>1000,37115=>1000,37116=>1000,37117=>1000,37118=>1000,37119=>1000,37120=>1000,37121=>1000,37122=>1000,37123=>1000,37124=>1000, + 37125=>1000,37126=>1000,37127=>1000,37128=>1000,37129=>1000,37130=>1000,37131=>1000,37132=>1000,37133=>1000,37134=>1000,37135=>1000,37136=>1000,37137=>1000,37138=>1000,37139=>1000,37140=>1000, + 37141=>1000,37142=>1000,37143=>1000,37144=>1000,37145=>1000,37146=>1000,37147=>1000,37148=>1000,37149=>1000,37150=>1000,37151=>1000,37152=>1000,37153=>1000,37154=>1000,37155=>1000,37156=>1000, + 37157=>1000,37158=>1000,37159=>1000,37160=>1000,37161=>1000,37162=>1000,37163=>1000,37164=>1000,37165=>1000,37166=>1000,37167=>1000,37168=>1000,37169=>1000,37170=>1000,37171=>1000,37172=>1000, + 37173=>1000,37174=>1000,37175=>1000,37176=>1000,37177=>1000,37178=>1000,37179=>1000,37180=>1000,37181=>1000,37182=>1000,37183=>1000,37184=>1000,37185=>1000,37186=>1000,37187=>1000,37188=>1000, + 37189=>1000,37190=>1000,37191=>1000,37192=>1000,37193=>1000,37194=>1000,37195=>1000,37196=>1000,37197=>1000,37198=>1000,37199=>1000,37200=>1000,37201=>1000,37202=>1000,37203=>1000,37204=>1000, + 37205=>1000,37206=>1000,37207=>1000,37208=>1000,37209=>1000,37210=>1000,37211=>1000,37212=>1000,37213=>1000,37214=>1000,37215=>1000,37216=>1000,37217=>1000,37218=>1000,37219=>1000,37220=>1000, + 37221=>1000,37222=>1000,37223=>1000,37224=>1000,37225=>1000,37226=>1000,37227=>1000,37228=>1000,37229=>1000,37230=>1000,37231=>1000,37232=>1000,37233=>1000,37234=>1000,37235=>1000,37236=>1000, + 37237=>1000,37238=>1000,37239=>1000,37240=>1000,37241=>1000,37242=>1000,37243=>1000,37244=>1000,37245=>1000,37246=>1000,37247=>1000,37248=>1000,37249=>1000,37250=>1000,37251=>1000,37252=>1000, + 37253=>1000,37254=>1000,37255=>1000,37256=>1000,37257=>1000,37258=>1000,37259=>1000,37260=>1000,37261=>1000,37262=>1000,37263=>1000,37264=>1000,37265=>1000,37266=>1000,37267=>1000,37268=>1000, + 37269=>1000,37270=>1000,37271=>1000,37272=>1000,37273=>1000,37274=>1000,37275=>1000,37276=>1000,37277=>1000,37278=>1000,37279=>1000,37280=>1000,37281=>1000,37282=>1000,37283=>1000,37284=>1000, + 37285=>1000,37286=>1000,37287=>1000,37288=>1000,37289=>1000,37290=>1000,37291=>1000,37292=>1000,37293=>1000,37294=>1000,37295=>1000,37296=>1000,37297=>1000,37298=>1000,37299=>1000,37300=>1000, + 37301=>1000,37302=>1000,37303=>1000,37304=>1000,37305=>1000,37306=>1000,37307=>1000,37308=>1000,37309=>1000,37310=>1000,37311=>1000,37312=>1000,37313=>1000,37314=>1000,37315=>1000,37316=>1000, + 37317=>1000,37318=>1000,37319=>1000,37320=>1000,37321=>1000,37322=>1000,37323=>1000,37324=>1000,37325=>1000,37326=>1000,37327=>1000,37328=>1000,37329=>1000,37330=>1000,37331=>1000,37332=>1000, + 37333=>1000,37334=>1000,37335=>1000,37336=>1000,37337=>1000,37338=>1000,37339=>1000,37340=>1000,37341=>1000,37342=>1000,37343=>1000,37344=>1000,37345=>1000,37346=>1000,37347=>1000,37348=>1000, + 37349=>1000,37350=>1000,37351=>1000,37352=>1000,37353=>1000,37354=>1000,37355=>1000,37356=>1000,37357=>1000,37358=>1000,37359=>1000,37360=>1000,37361=>1000,37362=>1000,37363=>1000,37364=>1000, + 37365=>1000,37366=>1000,37367=>1000,37368=>1000,37369=>1000,37370=>1000,37371=>1000,37372=>1000,37373=>1000,37374=>1000,37375=>1000,37376=>1000,37377=>1000,37378=>1000,37379=>1000,37380=>1000, + 37381=>1000,37382=>1000,37383=>1000,37384=>1000,37385=>1000,37386=>1000,37387=>1000,37388=>1000,37389=>1000,37390=>1000,37391=>1000,37392=>1000,37393=>1000,37394=>1000,37395=>1000,37396=>1000, + 37397=>1000,37398=>1000,37399=>1000,37400=>1000,37401=>1000,37402=>1000,37403=>1000,37404=>1000,37405=>1000,37406=>1000,37407=>1000,37408=>1000,37409=>1000,37410=>1000,37411=>1000,37412=>1000, + 37413=>1000,37414=>1000,37415=>1000,37416=>1000,37417=>1000,37418=>1000,37419=>1000,37420=>1000,37421=>1000,37422=>1000,37423=>1000,37424=>1000,37425=>1000,37426=>1000,37427=>1000,37428=>1000, + 37429=>1000,37430=>1000,37431=>1000,37432=>1000,37433=>1000,37434=>1000,37435=>1000,37436=>1000,37437=>1000,37438=>1000,37439=>1000,37440=>1000,37441=>1000,37442=>1000,37443=>1000,37444=>1000, + 37445=>1000,37446=>1000,37447=>1000,37448=>1000,37449=>1000,37450=>1000,37451=>1000,37452=>1000,37453=>1000,37454=>1000,37455=>1000,37456=>1000,37457=>1000,37458=>1000,37459=>1000,37460=>1000, + 37461=>1000,37462=>1000,37463=>1000,37464=>1000,37465=>1000,37466=>1000,37467=>1000,37468=>1000,37469=>1000,37470=>1000,37471=>1000,37472=>1000,37473=>1000,37474=>1000,37475=>1000,37476=>1000, + 37477=>1000,37478=>1000,37479=>1000,37480=>1000,37481=>1000,37482=>1000,37483=>1000,37484=>1000,37485=>1000,37486=>1000,37487=>1000,37488=>1000,37489=>1000,37490=>1000,37491=>1000,37492=>1000, + 37493=>1000,37494=>1000,37495=>1000,37496=>1000,37497=>1000,37498=>1000,37499=>1000,37500=>1000,37501=>1000,37502=>1000,37503=>1000,37504=>1000,37505=>1000,37506=>1000,37507=>1000,37508=>1000, + 37509=>1000,37510=>1000,37511=>1000,37512=>1000,37513=>1000,37514=>1000,37515=>1000,37516=>1000,37517=>1000,37518=>1000,37519=>1000,37520=>1000,37521=>1000,37522=>1000,37523=>1000,37524=>1000, + 37525=>1000,37526=>1000,37527=>1000,37528=>1000,37529=>1000,37530=>1000,37531=>1000,37532=>1000,37533=>1000,37534=>1000,37535=>1000,37536=>1000,37537=>1000,37538=>1000,37539=>1000,37540=>1000, + 37541=>1000,37542=>1000,37543=>1000,37544=>1000,37545=>1000,37546=>1000,37547=>1000,37548=>1000,37549=>1000,37550=>1000,37551=>1000,37552=>1000,37553=>1000,37554=>1000,37555=>1000,37556=>1000, + 37557=>1000,37558=>1000,37559=>1000,37560=>1000,37561=>1000,37562=>1000,37563=>1000,37564=>1000,37565=>1000,37566=>1000,37567=>1000,37568=>1000,37569=>1000,37570=>1000,37571=>1000,37572=>1000, + 37573=>1000,37574=>1000,37575=>1000,37576=>1000,37577=>1000,37578=>1000,37579=>1000,37580=>1000,37581=>1000,37582=>1000,37583=>1000,37584=>1000,37585=>1000,37586=>1000,37587=>1000,37588=>1000, + 37589=>1000,37590=>1000,37591=>1000,37592=>1000,37593=>1000,37594=>1000,37595=>1000,37596=>1000,37597=>1000,37598=>1000,37599=>1000,37600=>1000,37601=>1000,37602=>1000,37603=>1000,37604=>1000, + 37605=>1000,37606=>1000,37607=>1000,37608=>1000,37609=>1000,37610=>1000,37611=>1000,37612=>1000,37613=>1000,37614=>1000,37615=>1000,37616=>1000,37617=>1000,37618=>1000,37619=>1000,37620=>1000, + 37621=>1000,37622=>1000,37623=>1000,37624=>1000,37625=>1000,37626=>1000,37627=>1000,37628=>1000,37629=>1000,37630=>1000,37631=>1000,37632=>1000,37633=>1000,37634=>1000,37635=>1000,37636=>1000, + 37637=>1000,37638=>1000,37639=>1000,37640=>1000,37641=>1000,37642=>1000,37643=>1000,37644=>1000,37645=>1000,37646=>1000,37647=>1000,37648=>1000,37649=>1000,37650=>1000,37651=>1000,37652=>1000, + 37653=>1000,37654=>1000,37655=>1000,37656=>1000,37657=>1000,37658=>1000,37659=>1000,37660=>1000,37661=>1000,37662=>1000,37663=>1000,37664=>1000,37665=>1000,37666=>1000,37667=>1000,37668=>1000, + 37669=>1000,37670=>1000,37671=>1000,37672=>1000,37673=>1000,37674=>1000,37675=>1000,37676=>1000,37677=>1000,37678=>1000,37679=>1000,37680=>1000,37681=>1000,37682=>1000,37683=>1000,37684=>1000, + 37685=>1000,37686=>1000,37687=>1000,37688=>1000,37689=>1000,37690=>1000,37691=>1000,37692=>1000,37693=>1000,37694=>1000,37695=>1000,37696=>1000,37697=>1000,37698=>1000,37699=>1000,37700=>1000, + 37701=>1000,37702=>1000,37703=>1000,37704=>1000,37705=>1000,37706=>1000,37707=>1000,37708=>1000,37709=>1000,37710=>1000,37711=>1000,37712=>1000,37713=>1000,37714=>1000,37715=>1000,37716=>1000, + 37717=>1000,37718=>1000,37719=>1000,37720=>1000,37721=>1000,37722=>1000,37723=>1000,37724=>1000,37725=>1000,37726=>1000,37727=>1000,37728=>1000,37729=>1000,37730=>1000,37731=>1000,37732=>1000, + 37733=>1000,37734=>1000,37735=>1000,37736=>1000,37737=>1000,37738=>1000,37739=>1000,37740=>1000,37741=>1000,37742=>1000,37743=>1000,37744=>1000,37745=>1000,37746=>1000,37747=>1000,37748=>1000, + 37749=>1000,37750=>1000,37751=>1000,37752=>1000,37753=>1000,37754=>1000,37755=>1000,37756=>1000,37757=>1000,37758=>1000,37759=>1000,37760=>1000,37761=>1000,37762=>1000,37763=>1000,37764=>1000, + 37765=>1000,37766=>1000,37767=>1000,37768=>1000,37769=>1000,37770=>1000,37771=>1000,37772=>1000,37773=>1000,37774=>1000,37775=>1000,37776=>1000,37777=>1000,37778=>1000,37779=>1000,37780=>1000, + 37781=>1000,37782=>1000,37783=>1000,37784=>1000,37785=>1000,37786=>1000,37787=>1000,37788=>1000,37789=>1000,37790=>1000,37791=>1000,37792=>1000,37793=>1000,37794=>1000,37795=>1000,37796=>1000, + 37797=>1000,37798=>1000,37799=>1000,37800=>1000,37801=>1000,37802=>1000,37803=>1000,37804=>1000,37805=>1000,37806=>1000,37807=>1000,37808=>1000,37809=>1000,37810=>1000,37811=>1000,37812=>1000, + 37813=>1000,37814=>1000,37815=>1000,37816=>1000,37817=>1000,37818=>1000,37819=>1000,37820=>1000,37821=>1000,37822=>1000,37823=>1000,37824=>1000,37825=>1000,37826=>1000,37827=>1000,37828=>1000, + 37829=>1000,37830=>1000,37831=>1000,37832=>1000,37833=>1000,37834=>1000,37835=>1000,37836=>1000,37837=>1000,37838=>1000,37839=>1000,37840=>1000,37841=>1000,37842=>1000,37843=>1000,37844=>1000, + 37845=>1000,37846=>1000,37847=>1000,37848=>1000,37849=>1000,37850=>1000,37851=>1000,37852=>1000,37853=>1000,37854=>1000,37855=>1000,37856=>1000,37857=>1000,37858=>1000,37859=>1000,37860=>1000, + 37861=>1000,37862=>1000,37863=>1000,37864=>1000,37865=>1000,37866=>1000,37867=>1000,37868=>1000,37869=>1000,37870=>1000,37871=>1000,37872=>1000,37873=>1000,37874=>1000,37875=>1000,37876=>1000, + 37877=>1000,37878=>1000,37879=>1000,37880=>1000,37881=>1000,37882=>1000,37883=>1000,37884=>1000,37885=>1000,37886=>1000,37887=>1000,37888=>1000,37889=>1000,37890=>1000,37891=>1000,37892=>1000, + 37893=>1000,37894=>1000,37895=>1000,37896=>1000,37897=>1000,37898=>1000,37899=>1000,37900=>1000,37901=>1000,37902=>1000,37903=>1000,37904=>1000,37905=>1000,37906=>1000,37907=>1000,37908=>1000, + 37909=>1000,37910=>1000,37911=>1000,37912=>1000,37913=>1000,37914=>1000,37915=>1000,37916=>1000,37917=>1000,37918=>1000,37919=>1000,37920=>1000,37921=>1000,37922=>1000,37923=>1000,37924=>1000, + 37925=>1000,37926=>1000,37927=>998,37928=>1000,37929=>1000,37930=>1000,37931=>1000,37932=>1000,37933=>1000,37934=>1000,37935=>1000,37936=>1000,37937=>1000,37938=>1000,37939=>1000,37940=>1000, + 37941=>1000,37942=>1000,37943=>1000,37944=>1000,37945=>1000,37946=>1000,37947=>1000,37948=>1000,37949=>1000,37950=>1000,37951=>1000,37952=>1000,37953=>1000,37954=>1000,37955=>1000,37956=>1000, + 37957=>1000,37958=>1000,37959=>1000,37960=>1000,37961=>1000,37962=>1000,37963=>1000,37964=>1000,37965=>1000,37966=>1000,37967=>1000,37968=>1000,37969=>1000,37970=>1000,37971=>1000,37972=>1000, + 37973=>1000,37974=>1000,37975=>1000,37976=>1000,37977=>1000,37978=>1000,37979=>1000,37980=>1000,37981=>1000,37982=>1000,37983=>1000,37984=>1000,37985=>1000,37986=>1000,37987=>1000,37988=>1000, + 37989=>1000,37990=>1000,37991=>1000,37992=>1000,37993=>1000,37994=>1000,37995=>1000,37996=>1000,37997=>1000,37998=>1000,37999=>1000,38000=>1000,38001=>1000,38002=>1000,38003=>1000,38004=>1000, + 38005=>1000,38006=>1000,38007=>1000,38008=>1000,38009=>1000,38010=>1000,38011=>1000,38012=>1000,38013=>1000,38014=>1000,38015=>1000,38016=>1000,38017=>1000,38018=>1000,38019=>1000,38020=>1000, + 38021=>1000,38022=>1000,38023=>1000,38024=>1000,38025=>1000,38026=>1000,38027=>1000,38028=>1000,38029=>1000,38030=>1000,38031=>1000,38032=>1000,38033=>1000,38034=>1000,38035=>1000,38036=>1000, + 38037=>1000,38038=>1000,38039=>1000,38040=>1000,38041=>1000,38042=>1000,38043=>1000,38044=>1000,38045=>1000,38046=>1000,38047=>1000,38048=>1000,38049=>1000,38050=>1000,38051=>1000,38052=>1000, + 38053=>1000,38054=>1000,38055=>1000,38056=>1000,38057=>1000,38058=>1000,38059=>1000,38060=>1000,38061=>1000,38062=>1000,38063=>1000,38064=>1000,38065=>1000,38066=>1000,38067=>1000,38068=>1000, + 38069=>1000,38070=>1000,38071=>1000,38072=>1000,38073=>1000,38074=>1000,38075=>1000,38076=>1000,38077=>1000,38078=>1000,38079=>1000,38080=>1000,38081=>1000,38082=>1000,38083=>1000,38084=>1000, + 38085=>1000,38086=>1000,38087=>1000,38088=>1000,38089=>1000,38090=>1000,38091=>1000,38092=>1000,38093=>1000,38094=>1000,38095=>1000,38096=>1000,38097=>1000,38098=>1000,38099=>1000,38100=>1000, + 38101=>1000,38102=>1000,38103=>1000,38104=>1000,38105=>1000,38106=>1000,38107=>1000,38108=>1000,38109=>1000,38110=>1000,38111=>1000,38112=>1000,38113=>1000,38114=>1000,38115=>1000,38116=>1000, + 38117=>1000,38118=>1000,38119=>1000,38120=>1000,38121=>1000,38122=>1000,38123=>1000,38124=>1000,38125=>1000,38126=>1000,38127=>1000,38128=>1000,38129=>1000,38130=>1000,38131=>1000,38132=>1000, + 38133=>1000,38134=>1000,38135=>1000,38136=>1000,38137=>1000,38138=>1000,38139=>1000,38140=>1000,38141=>1000,38142=>1000,38143=>1000,38144=>1000,38145=>1000,38146=>1000,38147=>1000,38148=>1000, + 38149=>1000,38150=>1000,38151=>1000,38152=>1000,38153=>1000,38154=>1000,38155=>1000,38156=>1000,38157=>1000,38158=>1000,38159=>1000,38160=>1000,38161=>1000,38162=>1000,38163=>1000,38164=>1000, + 38165=>1000,38166=>1000,38167=>1000,38168=>1000,38169=>1000,38170=>1000,38171=>1000,38172=>1000,38173=>1000,38174=>1000,38175=>1000,38176=>1000,38177=>1000,38178=>1000,38179=>1000,38180=>1000, + 38181=>1000,38182=>1000,38183=>1000,38184=>1000,38185=>1000,38186=>1000,38187=>1000,38188=>1000,38189=>1000,38190=>1000,38191=>1000,38192=>1000,38193=>1000,38194=>1000,38195=>1000,38196=>1000, + 38197=>1000,38198=>1000,38199=>1000,38200=>1000,38201=>1000,38202=>1000,38203=>1000,38204=>1000,38205=>1000,38206=>1000,38207=>1000,38208=>1000,38209=>1000,38210=>1000,38211=>1000,38212=>1000, + 38213=>1000,38214=>1000,38215=>1000,38216=>1000,38217=>1000,38218=>1000,38219=>1000,38220=>1000,38221=>1000,38222=>1000,38223=>1000,38224=>1000,38225=>1000,38226=>1000,38227=>1000,38228=>1000, + 38229=>1000,38230=>1000,38231=>1000,38232=>1000,38233=>1000,38234=>1000,38235=>1000,38236=>1000,38237=>1000,38238=>1000,38239=>1000,38240=>1000,38241=>1000,38242=>1000,38243=>1000,38244=>1000, + 38245=>1000,38246=>1000,38247=>1000,38248=>1000,38249=>1000,38250=>1000,38251=>1000,38252=>1000,38253=>1000,38254=>1000,38255=>1000,38256=>1000,38257=>1000,38258=>1000,38259=>1000,38260=>1000, + 38261=>1000,38262=>1000,38263=>1000,38264=>1000,38265=>1000,38266=>1000,38267=>1000,38268=>1000,38269=>1000,38270=>1000,38271=>1000,38272=>1000,38273=>1000,38274=>1000,38275=>1000,38276=>1000, + 38277=>1000,38278=>1000,38279=>1000,38280=>1000,38281=>1000,38282=>1000,38283=>1000,38284=>1000,38285=>1000,38286=>1000,38287=>1000,38288=>1000,38289=>1000,38290=>1000,38291=>1000,38292=>1000, + 38293=>1000,38294=>1000,38295=>1000,38296=>1000,38297=>1000,38298=>1000,38299=>1000,38300=>1000,38301=>1000,38302=>1000,38303=>1000,38304=>1000,38305=>1000,38306=>1000,38307=>1000,38308=>1000, + 38309=>1000,38310=>1000,38311=>1000,38312=>1000,38313=>1000,38314=>1000,38315=>1000,38316=>1000,38317=>1000,38318=>1000,38319=>1000,38320=>1000,38321=>1000,38322=>1000,38323=>1000,38324=>1000, + 38325=>1000,38326=>1000,38327=>1000,38328=>1000,38329=>1000,38330=>1000,38331=>1000,38332=>1000,38333=>1000,38334=>1000,38335=>1000,38336=>1000,38337=>1000,38338=>1000,38339=>1000,38340=>1000, + 38341=>1000,38342=>1000,38343=>1000,38344=>1000,38345=>1000,38346=>1000,38347=>1000,38348=>1000,38349=>1000,38350=>1000,38351=>1000,38352=>1000,38353=>1000,38354=>1000,38355=>1000,38356=>1000, + 38357=>1000,38358=>1000,38359=>1000,38360=>1000,38361=>1000,38362=>1000,38363=>1000,38364=>1000,38365=>1000,38366=>1000,38367=>1000,38368=>1000,38369=>1000,38370=>1000,38371=>1000,38372=>1000, + 38373=>1000,38374=>1000,38375=>1000,38376=>1000,38377=>1000,38378=>1000,38379=>1000,38380=>1000,38381=>1000,38382=>1000,38383=>1000,38384=>1000,38385=>1000,38386=>1000,38387=>1000,38388=>1000, + 38389=>1000,38390=>1000,38391=>1000,38392=>1000,38393=>1000,38394=>1000,38395=>1000,38396=>1000,38397=>1000,38398=>1000,38399=>1000,38400=>1000,38401=>1000,38402=>1000,38403=>1000,38404=>1000, + 38405=>1000,38406=>1000,38407=>1000,38408=>1000,38409=>1000,38410=>1000,38411=>1000,38412=>1000,38413=>1000,38414=>1000,38415=>1000,38416=>1000,38417=>1000,38418=>1000,38419=>1000,38420=>1000, + 38421=>1000,38422=>1000,38423=>1000,38424=>1000,38425=>1000,38426=>1000,38427=>1000,38428=>1000,38429=>1000,38430=>1000,38431=>1000,38432=>1000,38433=>1000,38434=>1000,38435=>1000,38436=>1000, + 38437=>1000,38438=>1000,38439=>1000,38440=>1000,38441=>1000,38442=>1000,38443=>1000,38444=>1000,38445=>1000,38446=>1000,38447=>1000,38448=>1000,38449=>1000,38450=>1000,38451=>1000,38452=>1000, + 38453=>1000,38454=>1000,38455=>1000,38456=>1000,38457=>1000,38458=>1000,38459=>1000,38460=>1000,38461=>1000,38462=>1000,38463=>1000,38464=>1000,38465=>1000,38466=>1000,38467=>1000,38468=>1000, + 38469=>1000,38470=>1000,38471=>1000,38472=>1000,38473=>1000,38474=>1000,38475=>1000,38476=>1000,38477=>1000,38478=>1000,38479=>1000,38480=>1000,38481=>1000,38482=>1000,38483=>1000,38484=>1000, + 38485=>1000,38486=>1000,38487=>1000,38488=>1000,38489=>1000,38490=>1000,38491=>1000,38492=>1000,38493=>1000,38494=>1000,38495=>1000,38496=>1000,38497=>1000,38498=>1000,38499=>1000,38500=>1000, + 38501=>1000,38502=>1000,38503=>1000,38504=>1000,38505=>1000,38506=>1000,38507=>1000,38508=>1000,38509=>1000,38510=>1000,38511=>1000,38512=>1000,38513=>1000,38514=>1000,38515=>1000,38516=>1000, + 38517=>1000,38518=>1000,38519=>1000,38520=>1000,38521=>1000,38522=>1000,38523=>1000,38524=>1000,38525=>1000,38526=>1000,38527=>1000,38528=>1000,38529=>1000,38530=>1000,38531=>1000,38532=>1000, + 38533=>1000,38534=>1000,38535=>1000,38536=>1000,38537=>1000,38538=>1000,38539=>1000,38540=>1000,38541=>1000,38542=>1000,38543=>1000,38544=>1000,38545=>1000,38546=>1000,38547=>1000,38548=>1000, + 38549=>1000,38550=>1000,38551=>1000,38552=>1000,38553=>1000,38554=>1000,38555=>1000,38556=>1000,38557=>1000,38558=>1000,38559=>1000,38560=>1000,38561=>1000,38562=>1000,38563=>1000,38564=>1000, + 38565=>1000,38566=>1000,38567=>1000,38568=>1000,38569=>1000,38570=>1000,38571=>1000,38572=>1000,38573=>1000,38574=>1000,38575=>1000,38576=>1000,38577=>1000,38578=>1000,38579=>1000,38580=>1000, + 38581=>1000,38582=>1000,38583=>1000,38584=>1000,38585=>1000,38586=>1000,38587=>1000,38588=>1000,38589=>1000,38590=>1000,38591=>1000,38592=>1000,38593=>1000,38594=>1000,38595=>1000,38596=>1000, + 38597=>1000,38598=>1000,38599=>1000,38600=>1000,38601=>1000,38602=>1000,38603=>1000,38604=>1000,38605=>1000,38606=>1000,38607=>1000,38608=>1000,38609=>1000,38610=>1000,38611=>1000,38612=>1000, + 38613=>1000,38614=>1000,38615=>1000,38616=>1000,38617=>1000,38618=>1000,38619=>1000,38620=>1000,38621=>1000,38622=>1000,38623=>1000,38624=>1000,38625=>1000,38626=>1000,38627=>1000,38628=>1000, + 38629=>1000,38630=>1000,38631=>1000,38632=>1000,38633=>1000,38634=>1000,38635=>1000,38636=>1000,38637=>1000,38638=>1000,38639=>1000,38640=>1000,38641=>1000,38642=>1000,38643=>1000,38644=>1000, + 38645=>1000,38646=>1000,38647=>1000,38648=>1000,38649=>1000,38650=>1000,38651=>1000,38652=>1000,38653=>1000,38654=>1000,38655=>1000,38656=>1000,38657=>1000,38658=>1000,38659=>1000,38660=>1000, + 38661=>1000,38662=>1000,38663=>1000,38664=>1000,38665=>1000,38666=>1000,38667=>1000,38668=>1000,38669=>1000,38670=>1000,38671=>1000,38672=>1000,38673=>1000,38674=>1000,38675=>1000,38676=>1000, + 38677=>1000,38678=>1000,38679=>1000,38680=>1000,38681=>1000,38682=>1000,38683=>1000,38684=>1000,38685=>1000,38686=>1000,38687=>1000,38688=>1000,38689=>1000,38690=>1000,38691=>1000,38692=>1000, + 38693=>1000,38694=>1000,38695=>1000,38696=>1000,38697=>1000,38698=>1000,38699=>1000,38700=>1000,38701=>1000,38702=>1000,38703=>1000,38704=>1000,38705=>1000,38706=>1000,38707=>1000,38708=>1000, + 38709=>1000,38710=>1000,38711=>1000,38712=>1000,38713=>1000,38714=>1000,38715=>1000,38716=>1000,38717=>1000,38718=>1000,38719=>1000,38720=>1000,38721=>1000,38722=>1000,38723=>1000,38724=>1000, + 38725=>1000,38726=>1000,38727=>1000,38728=>1000,38729=>1000,38730=>1000,38731=>1000,38732=>1000,38733=>1000,38734=>1000,38735=>1000,38736=>1000,38737=>1000,38738=>1000,38739=>1000,38740=>1000, + 38741=>1000,38742=>1000,38743=>1000,38744=>1000,38745=>1000,38746=>1000,38747=>1000,38748=>1000,38749=>1000,38750=>1000,38751=>1000,38752=>1000,38753=>1000,38754=>1000,38755=>1000,38756=>1000, + 38757=>1000,38758=>1000,38759=>1000,38760=>1000,38761=>1000,38762=>1000,38763=>1000,38764=>1000,38765=>1000,38766=>1000,38767=>1000,38768=>1000,38769=>1000,38770=>1000,38771=>1000,38772=>1000, + 38773=>1000,38774=>1000,38775=>1000,38776=>1000,38777=>1000,38778=>1000,38779=>1000,38780=>1000,38781=>1000,38782=>1000,38783=>1000,38784=>1000,38785=>1000,38786=>1000,38787=>1000,38788=>1000, + 38789=>1000,38790=>1000,38791=>1000,38792=>1000,38793=>1000,38794=>1000,38795=>1000,38796=>1000,38797=>1000,38798=>1000,38799=>1000,38800=>1000,38801=>1000,38802=>1000,38803=>1000,38804=>1000, + 38805=>1000,38806=>1000,38807=>1000,38808=>1000,38809=>1000,38810=>1000,38811=>1000,38812=>1000,38813=>1000,38814=>1000,38815=>1000,38816=>1000,38817=>1000,38818=>1000,38819=>1000,38820=>1000, + 38821=>1000,38822=>1000,38823=>1000,38824=>1000,38825=>1000,38826=>1000,38827=>1000,38828=>1000,38829=>1000,38830=>1000,38831=>1000,38832=>1000,38833=>1000,38834=>1000,38835=>1000,38836=>1000, + 38837=>1000,38838=>1000,38839=>1000,38840=>1000,38841=>1000,38842=>1000,38843=>1000,38844=>1000,38845=>1000,38846=>1000,38847=>1000,38848=>1000,38849=>1000,38850=>1000,38851=>1000,38852=>1000, + 38853=>1000,38854=>1000,38855=>1000,38856=>1000,38857=>1000,38858=>1000,38859=>1000,38860=>1000,38861=>1000,38862=>1000,38863=>1000,38864=>1000,38865=>1000,38866=>1000,38867=>1000,38868=>1000, + 38869=>1000,38870=>1000,38871=>1000,38872=>1000,38873=>1000,38874=>1000,38875=>1000,38876=>1000,38877=>1000,38878=>1000,38879=>1000,38880=>1000,38881=>1000,38882=>1000,38883=>1000,38884=>1000, + 38885=>1000,38886=>1000,38887=>1000,38888=>1000,38889=>1000,38890=>1000,38891=>1000,38892=>1000,38893=>1000,38894=>1000,38895=>1000,38896=>1000,38897=>1000,38898=>1000,38899=>1000,38900=>1000, + 38901=>1000,38902=>1000,38903=>1000,38904=>1000,38905=>1000,38906=>1000,38907=>1000,38908=>1000,38909=>1000,38910=>1000,38911=>1000,38912=>1000,38913=>1000,38914=>1000,38915=>1000,38916=>1000, + 38917=>1000,38918=>1000,38919=>1000,38920=>1000,38921=>1000,38922=>1000,38923=>1000,38924=>1000,38925=>1000,38926=>1000,38927=>1000,38928=>1000,38929=>1000,38930=>1000,38931=>1000,38932=>1000, + 38933=>1000,38934=>1000,38935=>1000,38936=>1000,38937=>1000,38938=>1000,38939=>1000,38940=>1000,38941=>1000,38942=>1000,38943=>1000,38944=>1000,38945=>1000,38946=>1000,38947=>1000,38948=>1000, + 38949=>1000,38950=>1000,38951=>1000,38952=>1000,38953=>1000,38954=>1000,38955=>1000,38956=>1000,38957=>1000,38958=>1000,38959=>1000,38960=>1000,38961=>1000,38962=>1000,38963=>1000,38964=>1000, + 38965=>1000,38966=>1000,38967=>1000,38968=>1000,38969=>1000,38970=>1000,38971=>1000,38972=>1000,38973=>1000,38974=>1000,38975=>1000,38976=>1000,38977=>1000,38978=>1000,38979=>1000,38980=>1000, + 38981=>1000,38982=>1000,38983=>1000,38984=>1000,38985=>1000,38986=>1000,38987=>1000,38988=>1000,38989=>1000,38990=>1000,38991=>1000,38992=>1000,38993=>1000,38994=>1000,38995=>1000,38996=>1000, + 38997=>1000,38998=>1000,38999=>1000,39000=>1000,39001=>1000,39002=>1000,39003=>1000,39004=>1000,39005=>1000,39006=>1000,39007=>1000,39008=>1000,39009=>1000,39010=>1000,39011=>1000,39012=>1000, + 39013=>1000,39014=>1000,39015=>1000,39016=>1000,39017=>1000,39018=>1000,39019=>1000,39020=>1000,39021=>1000,39022=>1000,39023=>1000,39024=>1000,39025=>1000,39026=>1000,39027=>1000,39028=>1000, + 39029=>1000,39030=>1000,39031=>1000,39032=>1000,39033=>1000,39034=>1000,39035=>1000,39036=>1000,39037=>1000,39038=>1000,39039=>1000,39040=>1000,39041=>1000,39042=>1000,39043=>1000,39044=>1000, + 39045=>1000,39046=>1000,39047=>1000,39048=>1000,39049=>1000,39050=>1000,39051=>1000,39052=>1000,39053=>1000,39054=>1000,39055=>1000,39056=>1000,39057=>1000,39058=>1000,39059=>1000,39060=>1000, + 39061=>1000,39062=>1000,39063=>1000,39064=>1000,39065=>1000,39066=>1000,39067=>1000,39068=>1000,39069=>1000,39070=>1000,39071=>1000,39072=>1000,39073=>1000,39074=>1000,39075=>1000,39076=>1000, + 39077=>1000,39078=>1000,39079=>1000,39080=>1000,39081=>1000,39082=>1000,39083=>1000,39084=>1000,39085=>1000,39086=>1000,39087=>1000,39088=>1000,39089=>1000,39090=>1000,39091=>1000,39092=>1000, + 39093=>1000,39094=>1000,39095=>1000,39096=>1000,39097=>1000,39098=>1000,39099=>1000,39100=>1000,39101=>1000,39102=>1000,39103=>1000,39104=>1000,39105=>1000,39106=>1000,39107=>1000,39108=>1000, + 39109=>1000,39110=>1000,39111=>1000,39112=>1000,39113=>1000,39114=>1000,39115=>1000,39116=>1000,39117=>1000,39118=>1000,39119=>1000,39120=>1000,39121=>1000,39122=>1000,39123=>1000,39124=>1000, + 39125=>1000,39126=>1000,39127=>1000,39128=>1000,39129=>1000,39130=>1000,39131=>1000,39132=>1000,39133=>1000,39134=>1000,39135=>1000,39136=>1000,39137=>1000,39138=>1000,39139=>1000,39140=>1000, + 39141=>1000,39142=>1000,39143=>1000,39144=>1000,39145=>1000,39146=>1000,39147=>1000,39148=>1000,39149=>1000,39150=>1000,39151=>1000,39152=>1000,39153=>1000,39154=>1000,39155=>1000,39156=>1000, + 39157=>1000,39158=>1000,39159=>1000,39160=>1000,39161=>1000,39162=>1000,39163=>1000,39164=>1000,39165=>1000,39166=>1000,39167=>1000,39168=>1000,39169=>1000,39170=>1000,39171=>1000,39172=>1000, + 39173=>1000,39174=>1000,39175=>1000,39176=>1000,39177=>1000,39178=>1000,39179=>1000,39180=>1000,39181=>1000,39182=>1000,39183=>1000,39184=>1000,39185=>1000,39186=>1000,39187=>1000,39188=>1000, + 39189=>1000,39190=>1000,39191=>1000,39192=>1000,39193=>1000,39194=>1000,39195=>1000,39196=>1000,39197=>1000,39198=>1000,39199=>1000,39200=>1000,39201=>1000,39202=>1000,39203=>1000,39204=>1000, + 39205=>1000,39206=>1000,39207=>1000,39208=>1000,39209=>1000,39210=>1000,39211=>1000,39212=>1000,39213=>1000,39214=>1000,39215=>1000,39216=>1000,39217=>1000,39218=>1000,39219=>1000,39220=>1000, + 39221=>1000,39222=>1000,39223=>1000,39224=>1000,39225=>1000,39226=>1000,39227=>1000,39228=>1000,39229=>1000,39230=>1000,39231=>1000,39232=>1000,39233=>1000,39234=>1000,39235=>1000,39236=>1000, + 39237=>1000,39238=>1000,39239=>1000,39240=>1000,39241=>1000,39242=>1000,39243=>1000,39244=>1000,39245=>1000,39246=>1000,39247=>1000,39248=>1000,39249=>1000,39250=>1000,39251=>1000,39252=>1000, + 39253=>1000,39254=>1000,39255=>1000,39256=>1000,39257=>1000,39258=>1000,39259=>1000,39260=>1000,39261=>1000,39262=>1000,39263=>1000,39264=>1000,39265=>1000,39266=>1000,39267=>1000,39268=>1000, + 39269=>1000,39270=>1000,39271=>1000,39272=>1000,39273=>1000,39274=>1000,39275=>1000,39276=>1000,39277=>1000,39278=>1000,39279=>1000,39280=>1000,39281=>1000,39282=>1000,39283=>1000,39284=>1000, + 39285=>1000,39286=>1000,39287=>1000,39288=>1000,39289=>1000,39290=>1000,39291=>1000,39292=>1000,39293=>1000,39294=>1000,39295=>1000,39296=>1000,39297=>1000,39298=>1000,39299=>1000,39300=>1000, + 39301=>1000,39302=>1000,39303=>1000,39304=>1000,39305=>1000,39306=>1000,39307=>1000,39308=>1000,39309=>1000,39310=>1000,39311=>1000,39312=>1000,39313=>1000,39314=>1000,39315=>1000,39316=>1000, + 39317=>1000,39318=>1000,39319=>1000,39320=>1000,39321=>1000,39322=>1000,39323=>1000,39324=>1000,39325=>1000,39326=>1000,39327=>1000,39328=>1000,39329=>1000,39330=>1000,39331=>1000,39332=>1000, + 39333=>1000,39334=>1000,39335=>1000,39336=>1000,39337=>1000,39338=>1000,39339=>1000,39340=>1000,39341=>1000,39342=>1000,39343=>1000,39344=>1000,39345=>1000,39346=>1000,39347=>1000,39348=>1000, + 39349=>1000,39350=>1000,39351=>1000,39352=>1000,39353=>1000,39354=>1000,39355=>1000,39356=>1000,39357=>1000,39358=>1000,39359=>1000,39360=>1000,39361=>1000,39362=>1000,39363=>1000,39364=>1000, + 39365=>1000,39366=>1000,39367=>1000,39368=>1000,39369=>1000,39370=>1000,39371=>1000,39372=>1000,39373=>1000,39374=>1000,39375=>1000,39376=>1000,39377=>1000,39378=>1000,39379=>1000,39380=>1000, + 39381=>1000,39382=>1000,39383=>1000,39384=>1000,39385=>1000,39386=>1000,39387=>1000,39388=>1000,39389=>1000,39390=>1000,39391=>1000,39392=>1000,39393=>1000,39394=>1000,39395=>1000,39396=>1000, + 39397=>1000,39398=>1000,39399=>1000,39400=>1000,39401=>1000,39402=>1000,39403=>1000,39404=>1000,39405=>1000,39406=>1000,39407=>1000,39408=>1000,39409=>1000,39410=>1000,39411=>1000,39412=>1000, + 39413=>1000,39414=>1000,39415=>1000,39416=>1000,39417=>1000,39418=>1000,39419=>1000,39420=>1000,39421=>1000,39422=>1000,39423=>1000,39424=>1000,39425=>1000,39426=>1000,39427=>1000,39428=>1000, + 39429=>1000,39430=>1000,39431=>1000,39432=>1000,39433=>1000,39434=>1000,39435=>1000,39436=>1000,39437=>1000,39438=>1000,39439=>1000,39440=>1000,39441=>1000,39442=>1000,39443=>1000,39444=>1000, + 39445=>1000,39446=>1000,39447=>1000,39448=>1000,39449=>1000,39450=>1000,39451=>1000,39452=>1000,39453=>1000,39454=>1000,39455=>1000,39456=>1000,39457=>1000,39458=>1000,39459=>1000,39460=>1000, + 39461=>1000,39462=>1000,39463=>1000,39464=>1000,39465=>1000,39466=>1000,39467=>1000,39468=>1000,39469=>1000,39470=>1000,39471=>1000,39472=>1000,39473=>1000,39474=>1000,39475=>1000,39476=>1000, + 39477=>1000,39478=>1000,39479=>1000,39480=>1000,39481=>1000,39482=>1000,39483=>1000,39484=>1000,39485=>1000,39486=>1000,39487=>1000,39488=>1000,39489=>1000,39490=>1000,39491=>1000,39492=>1000, + 39493=>1000,39494=>1000,39495=>1000,39496=>1000,39497=>1000,39498=>1000,39499=>1000,39500=>1000,39501=>1000,39502=>1000,39503=>1000,39504=>1000,39505=>1000,39506=>1000,39507=>1000,39508=>1000, + 39509=>1000,39510=>1000,39511=>1000,39512=>1000,39513=>1000,39514=>1000,39515=>1000,39516=>1000,39517=>1000,39518=>1000,39519=>1000,39520=>1000,39521=>1000,39522=>1000,39523=>1000,39524=>1000, + 39525=>1000,39526=>1000,39527=>1000,39528=>1000,39529=>1000,39530=>1000,39531=>1000,39532=>1000,39533=>1000,39534=>1000,39535=>1000,39536=>1000,39537=>1000,39538=>1000,39539=>1000,39540=>1000, + 39541=>1000,39542=>1000,39543=>1000,39544=>1000,39545=>1000,39546=>1000,39547=>1000,39548=>1000,39549=>1000,39550=>1000,39551=>1000,39552=>1000,39553=>1000,39554=>1000,39555=>1000,39556=>1000, + 39557=>1000,39558=>1000,39559=>1000,39560=>1000,39561=>1000,39562=>1000,39563=>1000,39564=>1000,39565=>1000,39566=>1000,39567=>1000,39568=>1000,39569=>1000,39570=>1000,39571=>1000,39572=>1000, + 39573=>1000,39574=>1000,39575=>1000,39576=>1000,39577=>1000,39578=>1000,39579=>1000,39580=>1000,39581=>1000,39582=>1000,39583=>1000,39584=>1000,39585=>1000,39586=>1000,39587=>1000,39588=>1000, + 39589=>1000,39590=>1000,39591=>1000,39592=>1000,39593=>1000,39594=>1000,39595=>1000,39596=>1000,39597=>1000,39598=>1000,39599=>1000,39600=>1000,39601=>1000,39602=>1000,39603=>1000,39604=>1000, + 39605=>1000,39606=>1000,39607=>1000,39608=>1000,39609=>1000,39610=>1000,39611=>1000,39612=>1000,39613=>1000,39614=>1000,39615=>1000,39616=>1000,39617=>1000,39618=>1000,39619=>1000,39620=>1000, + 39621=>1000,39622=>1000,39623=>1000,39624=>1000,39625=>1000,39626=>1000,39627=>1000,39628=>1000,39629=>1000,39630=>1000,39631=>1000,39632=>1000,39633=>1000,39634=>1000,39635=>1000,39636=>1000, + 39637=>1000,39638=>1000,39639=>1000,39640=>1000,39641=>1000,39642=>1000,39643=>1000,39644=>1000,39645=>1000,39646=>1000,39647=>1000,39648=>1000,39649=>1000,39650=>1000,39651=>1000,39652=>1000, + 39653=>1000,39654=>1000,39655=>1000,39656=>1000,39657=>1000,39658=>1000,39659=>1000,39660=>1000,39661=>1000,39662=>1000,39663=>1000,39664=>1000,39665=>1000,39666=>1000,39667=>1000,39668=>1000, + 39669=>1000,39670=>1000,39671=>1000,39672=>1000,39673=>1000,39674=>1000,39675=>1000,39676=>1000,39677=>1000,39678=>1000,39679=>1000,39680=>1000,39681=>1000,39682=>1000,39683=>1000,39684=>1000, + 39685=>1000,39686=>1000,39687=>1000,39688=>1000,39689=>1000,39690=>1000,39691=>1000,39692=>1000,39693=>1000,39694=>1000,39695=>1000,39696=>1000,39697=>1000,39698=>1000,39699=>1000,39700=>1000, + 39701=>1000,39702=>1000,39703=>1000,39704=>1000,39705=>1000,39706=>1000,39707=>1000,39708=>1000,39709=>1000,39710=>1000,39711=>1000,39712=>1000,39713=>1000,39714=>1000,39715=>1000,39716=>1000, + 39717=>1000,39718=>1000,39719=>1000,39720=>1000,39721=>1000,39722=>1000,39723=>1000,39724=>1000,39725=>1000,39726=>1000,39727=>1000,39728=>1000,39729=>1000,39730=>1000,39731=>1000,39732=>1000, + 39733=>1000,39734=>1000,39735=>1000,39736=>1000,39737=>1000,39738=>1000,39739=>1000,39740=>1000,39741=>1000,39742=>1000,39743=>1000,39744=>1000,39745=>1000,39746=>1000,39747=>1000,39748=>1000, + 39749=>1000,39750=>1000,39751=>1000,39752=>1000,39753=>1000,39754=>1000,39755=>1000,39756=>1000,39757=>1000,39758=>1000,39759=>1000,39760=>1000,39761=>1000,39762=>1000,39763=>1000,39764=>1000, + 39765=>1000,39766=>1000,39767=>1000,39768=>1000,39769=>1000,39770=>1000,39771=>1000,39772=>1000,39773=>1000,39774=>1000,39775=>1000,39776=>1000,39777=>1000,39778=>1000,39779=>1000,39780=>1000, + 39781=>1000,39782=>1000,39783=>1000,39784=>1000,39785=>1000,39786=>1000,39787=>1000,39788=>1000,39789=>1000,39790=>1000,39791=>1000,39792=>1000,39793=>1000,39794=>1000,39795=>1000,39796=>1000, + 39797=>1000,39798=>1000,39799=>1000,39800=>1000,39801=>1000,39802=>1000,39803=>1000,39804=>1000,39805=>1000,39806=>1000,39807=>1000,39808=>1000,39809=>1000,39810=>1000,39811=>1000,39812=>1000, + 39813=>1000,39814=>1000,39815=>1000,39816=>1000,39817=>1000,39818=>1000,39819=>1000,39820=>1000,39821=>1000,39822=>1000,39823=>1000,39824=>1000,39825=>1000,39826=>1000,39827=>1000,39828=>1000, + 39829=>1000,39830=>1000,39831=>1000,39832=>1000,39833=>1000,39834=>1000,39835=>1000,39836=>1000,39837=>1000,39838=>1000,39839=>1000,39840=>1000,39841=>1000,39842=>1000,39843=>1000,39844=>1000, + 39845=>1000,39846=>1000,39847=>1000,39848=>1000,39849=>1000,39850=>1000,39851=>1000,39852=>1000,39853=>1000,39854=>1000,39855=>1000,39856=>1000,39857=>1000,39858=>1000,39859=>1000,39860=>1000, + 39861=>1000,39862=>1000,39863=>1000,39864=>1000,39865=>1000,39866=>1000,39867=>1000,39868=>1000,39869=>1000,39870=>1000,39871=>1000,39872=>1000,39873=>1000,39874=>1000,39875=>1000,39876=>1000, + 39877=>1000,39878=>1000,39879=>1000,39880=>1000,39881=>1000,39882=>1000,39883=>1000,39884=>1000,39885=>1000,39886=>1000,39887=>1000,39888=>1000,39889=>1000,39890=>1000,39891=>1000,39892=>1000, + 39893=>1000,39894=>1000,39895=>1000,39896=>1000,39897=>1000,39898=>1000,39899=>1000,39900=>1000,39901=>1000,39902=>1000,39903=>1000,39904=>1000,39905=>1000,39906=>1000,39907=>1000,39908=>1000, + 39909=>1000,39910=>1000,39911=>1000,39912=>1000,39913=>1000,39914=>1000,39915=>1000,39916=>1000,39917=>1000,39918=>1000,39919=>1000,39920=>1000,39921=>1000,39922=>1000,39923=>1000,39924=>1000, + 39925=>1000,39926=>1000,39927=>1000,39928=>1000,39929=>1000,39930=>1000,39931=>1000,39932=>1000,39933=>1000,39934=>1000,39935=>1000,39936=>1000,39937=>1000,39938=>1000,39939=>1000,39940=>1000, + 39941=>1000,39942=>1000,39943=>1000,39944=>1000,39945=>1000,39946=>1000,39947=>1000,39948=>1000,39949=>1000,39950=>1000,39951=>1000,39952=>1000,39953=>1000,39954=>1000,39955=>1000,39956=>1000, + 39957=>1000,39958=>1000,39959=>1000,39960=>1000,39961=>1000,39962=>1000,39963=>1000,39964=>1000,39965=>1000,39966=>1000,39967=>1000,39968=>1000,39969=>1000,39970=>1000,39971=>1000,39972=>1000, + 39973=>1000,39974=>1000,39975=>1000,39976=>1000,39977=>1000,39978=>1000,39979=>1000,39980=>1000,39981=>1000,39982=>1000,39983=>1000,39984=>1000,39985=>1000,39986=>1000,39987=>1000,39988=>1000, + 39989=>1000,39990=>1000,39991=>1000,39992=>1000,39993=>1000,39994=>1000,39995=>1000,39996=>1000,39997=>1000,39998=>1000,39999=>1000,40000=>1000,40001=>1000,40002=>1000,40003=>1000,40004=>1000, + 40005=>1000,40006=>1000,40007=>1000,40008=>1000,40009=>1000,40010=>1000,40011=>1000,40012=>1000,40013=>1000,40014=>1000,40015=>1000,40016=>1000,40017=>1000,40018=>1000,40019=>1000,40020=>1000, + 40021=>1000,40022=>1000,40023=>1000,40024=>1000,40025=>1000,40026=>1000,40027=>1000,40028=>1000,40029=>1000,40030=>1000,40031=>1000,40032=>1000,40033=>1000,40034=>1000,40035=>1000,40036=>1000, + 40037=>1000,40038=>1000,40039=>1000,40040=>1000,40041=>1000,40042=>1000,40043=>1000,40044=>1000,40045=>1000,40046=>1000,40047=>1000,40048=>1000,40049=>1000,40050=>1000,40051=>1000,40052=>1000, + 40053=>1000,40054=>1000,40055=>1000,40056=>1000,40057=>1000,40058=>1000,40059=>1000,40060=>1000,40061=>1000,40062=>1000,40063=>1000,40064=>1000,40065=>1000,40066=>1000,40067=>1000,40068=>1000, + 40069=>1000,40070=>1000,40071=>1000,40072=>1000,40073=>1000,40074=>1000,40075=>1000,40076=>1000,40077=>1000,40078=>1000,40079=>1000,40080=>1000,40081=>1000,40082=>1000,40083=>1000,40084=>1000, + 40085=>1000,40086=>1000,40087=>1000,40088=>1000,40089=>1000,40090=>1000,40091=>1000,40092=>1000,40093=>1000,40094=>1000,40095=>1000,40096=>1000,40097=>1000,40098=>1000,40099=>1000,40100=>1000, + 40101=>1000,40102=>1000,40103=>1000,40104=>1000,40105=>1000,40106=>1000,40107=>1000,40108=>1000,40109=>1000,40110=>1000,40111=>1000,40112=>1000,40113=>1000,40114=>1000,40115=>1000,40116=>1000, + 40117=>1000,40118=>1000,40119=>1000,40120=>1000,40121=>1000,40122=>1000,40123=>1000,40124=>1000,40125=>1000,40126=>1000,40127=>1000,40128=>1000,40129=>1000,40130=>1000,40131=>1000,40132=>1000, + 40133=>1000,40134=>1000,40135=>1000,40136=>1000,40137=>1000,40138=>1000,40139=>1000,40140=>1000,40141=>1000,40142=>1000,40143=>1000,40144=>1000,40145=>1000,40146=>1000,40147=>1000,40148=>1000, + 40149=>1000,40150=>1000,40151=>1000,40152=>1000,40153=>1000,40154=>1000,40155=>1000,40156=>1000,40157=>1000,40158=>1000,40159=>1000,40160=>1000,40161=>1000,40162=>1000,40163=>1000,40164=>1000, + 40165=>1000,40166=>1000,40167=>1000,40168=>1000,40169=>1000,40170=>1000,40171=>1000,40172=>1000,40173=>1000,40174=>1000,40175=>1000,40176=>1000,40177=>1000,40178=>1000,40179=>1000,40180=>1000, + 40181=>1000,40182=>1000,40183=>1000,40184=>1000,40185=>1000,40186=>1000,40187=>1000,40188=>1000,40189=>1000,40190=>1000,40191=>1000,40192=>1000,40193=>1000,40194=>1000,40195=>1000,40196=>1000, + 40197=>1000,40198=>1000,40199=>1000,40200=>1000,40201=>1000,40202=>1000,40203=>1000,40204=>1000,40205=>1000,40206=>1000,40207=>1000,40208=>1000,40209=>1000,40210=>1000,40211=>1000,40212=>1000, + 40213=>1000,40214=>1000,40215=>1000,40216=>1000,40217=>1000,40218=>1000,40219=>1000,40220=>1000,40221=>1000,40222=>1000,40223=>1000,40224=>1000,40225=>1000,40226=>1000,40227=>1000,40228=>1000, + 40229=>1000,40230=>1000,40231=>1000,40232=>1000,40233=>1000,40234=>1000,40235=>1000,40236=>1000,40237=>1000,40238=>1000,40239=>1000,40240=>1000,40241=>1000,40242=>1000,40243=>1000,40244=>1000, + 40245=>1000,40246=>1000,40247=>1000,40248=>1000,40249=>1000,40250=>1000,40251=>1000,40252=>1000,40253=>1000,40254=>1000,40255=>1000,40256=>1000,40257=>1000,40258=>1000,40259=>1000,40260=>1000, + 40261=>1000,40262=>1000,40263=>1000,40264=>1000,40265=>1000,40266=>1000,40267=>1000,40268=>1000,40269=>1000,40270=>1000,40271=>1000,40272=>1000,40273=>1000,40274=>1000,40275=>1000,40276=>1000, + 40277=>1000,40278=>1000,40279=>1000,40280=>1000,40281=>1000,40282=>1000,40283=>1000,40284=>1000,40285=>1000,40286=>1000,40287=>1000,40288=>1000,40289=>1000,40290=>1000,40291=>1000,40292=>1000, + 40293=>1000,40294=>1000,40295=>1000,40296=>1000,40297=>1000,40298=>1000,40299=>1000,40300=>1000,40301=>1000,40302=>1000,40303=>1000,40304=>1000,40305=>1000,40306=>1000,40307=>1000,40308=>1000, + 40309=>1000,40310=>1000,40311=>1000,40312=>1000,40313=>1000,40314=>1000,40315=>1000,40316=>1000,40317=>1000,40318=>1000,40319=>1000,40320=>1000,40321=>1000,40322=>1000,40323=>1000,40324=>1000, + 40325=>1000,40326=>1000,40327=>1000,40328=>1000,40329=>1000,40330=>1000,40331=>1000,40332=>1000,40333=>1000,40334=>1000,40335=>1000,40336=>1000,40337=>1000,40338=>1000,40339=>1000,40340=>1000, + 40341=>1000,40342=>1000,40343=>1000,40344=>1000,40345=>1000,40346=>1000,40347=>1000,40348=>1000,40349=>1000,40350=>1000,40351=>1000,40352=>1000,40353=>1000,40354=>1000,40355=>1000,40356=>1000, + 40357=>1000,40358=>1000,40359=>1000,40360=>1000,40361=>1000,40362=>1000,40363=>1000,40364=>1000,40365=>1000,40366=>1000,40367=>1000,40368=>1000,40369=>1000,40370=>1000,40371=>1000,40372=>1000, + 40373=>1000,40374=>1000,40375=>1000,40376=>1000,40377=>1000,40378=>1000,40379=>1000,40380=>1000,40381=>1000,40382=>1000,40383=>1000,40384=>1000,40385=>1000,40386=>1000,40387=>1000,40388=>1000, + 40389=>1000,40390=>1000,40391=>1000,40392=>1000,40393=>1000,40394=>1000,40395=>1000,40396=>1000,40397=>1000,40398=>1000,40399=>1000,40400=>1000,40401=>1000,40402=>1000,40403=>1000,40404=>1000, + 40405=>1000,40406=>1000,40407=>1000,40408=>1000,40409=>1000,40410=>1000,40411=>1000,40412=>1000,40413=>1000,40414=>1000,40415=>1000,40416=>1000,40417=>1000,40418=>1000,40419=>1000,40420=>1000, + 40421=>1000,40422=>1000,40423=>1000,40424=>1000,40425=>1000,40426=>1000,40427=>1000,40428=>1000,40429=>1000,40430=>1000,40431=>1000,40432=>1000,40433=>1000,40434=>1000,40435=>1000,40436=>1000, + 40437=>1000,40438=>1000,40439=>1000,40440=>1000,40441=>1000,40442=>1000,40443=>1000,40444=>1000,40445=>1000,40446=>1000,40447=>1000,40448=>1000,40449=>1000,40450=>1000,40451=>1000,40452=>1000, + 40453=>1000,40454=>1000,40455=>1000,40456=>1000,40457=>1000,40458=>1000,40459=>1000,40460=>1000,40461=>1000,40462=>1000,40463=>1000,40464=>1000,40465=>1000,40466=>1000,40467=>1000,40468=>1000, + 40469=>1000,40470=>1000,40471=>1000,40472=>1000,40473=>1000,40474=>1000,40475=>1000,40476=>1000,40477=>1000,40478=>1000,40479=>1000,40480=>1000,40481=>1000,40482=>1000,40483=>1000,40484=>1000, + 40485=>1000,40486=>1000,40487=>1000,40488=>1000,40489=>1000,40490=>1000,40491=>1000,40492=>1000,40493=>1000,40494=>1000,40495=>1000,40496=>1000,40497=>1000,40498=>1000,40499=>1000,40500=>1000, + 40501=>1000,40502=>1000,40503=>1000,40504=>1000,40505=>1000,40506=>1000,40507=>1000,40508=>1000,40509=>1000,40510=>1000,40511=>1000,40512=>1000,40513=>1000,40514=>1000,40515=>1000,40516=>1000, + 40517=>1000,40518=>1000,40519=>1000,40520=>1000,40521=>1000,40522=>1000,40523=>1000,40524=>1000,40525=>1000,40526=>1000,40527=>1000,40528=>1000,40529=>1000,40530=>1000,40531=>1000,40532=>1000, + 40533=>1000,40534=>1000,40535=>1000,40536=>1000,40537=>1000,40538=>1000,40539=>1000,40540=>1000,40541=>1000,40542=>1000,40543=>1000,40544=>1000,40545=>1000,40546=>1000,40547=>1000,40548=>1000, + 40549=>1000,40550=>1000,40551=>1000,40552=>1000,40553=>1000,40554=>1000,40555=>1000,40556=>1000,40557=>1000,40558=>1000,40559=>1000,40560=>1000,40561=>1000,40562=>1000,40563=>1000,40564=>1000, + 40565=>1000,40566=>1000,40567=>1000,40568=>1000,40569=>1000,40570=>1000,40571=>1000,40572=>1000,40573=>1000,40574=>1000,40575=>1000,40576=>1000,40577=>1000,40578=>1000,40579=>1000,40580=>1000, + 40581=>1000,40582=>1000,40583=>1000,40584=>1000,40585=>1000,40586=>1000,40587=>1000,40588=>1000,40589=>1000,40590=>1000,40591=>1000,40592=>1000,40593=>1000,40594=>1000,40595=>1000,40596=>1000, + 40597=>1000,40598=>1000,40599=>1000,40600=>1000,40601=>1000,40602=>1000,40603=>1000,40604=>1000,40605=>1000,40606=>1000,40607=>1000,40608=>1000,40609=>1000,40610=>1000,40611=>1000,40612=>1000, + 40613=>1000,40614=>1000,40615=>1000,40616=>1000,40617=>1000,40618=>1000,40619=>1000,40620=>1000,40621=>1000,40622=>1000,40623=>1000,40624=>1000,40625=>1000,40626=>1000,40627=>1000,40628=>1000, + 40629=>1000,40630=>1000,40631=>1000,40632=>1000,40633=>1000,40634=>1000,40635=>1000,40636=>1000,40637=>1000,40638=>1000,40639=>1000,40640=>1000,40641=>1000,40642=>1000,40643=>1000,40644=>1000, + 40645=>1000,40646=>1000,40647=>1000,40648=>1000,40649=>1000,40650=>1000,40651=>1000,40652=>1000,40653=>1000,40654=>1000,40655=>1000,40656=>1000,40657=>1000,40658=>1000,40659=>1000,40660=>1000, + 40661=>1000,40662=>1000,40663=>1000,40664=>1000,40665=>1000,40666=>1000,40667=>1000,40668=>1000,40669=>1000,40670=>1000,40671=>1000,40672=>1000,40673=>1000,40674=>1000,40675=>1000,40676=>1000, + 40677=>1000,40678=>1000,40679=>1000,40680=>1000,40681=>1000,40682=>1000,40683=>1000,40684=>1000,40685=>1000,40686=>1000,40687=>1000,40688=>1000,40689=>1000,40690=>1000,40691=>1000,40692=>1000, + 40693=>1000,40694=>1000,40695=>1000,40696=>1000,40697=>1000,40698=>1000,40699=>1000,40700=>1000,40701=>1000,40702=>1000,40703=>1000,40704=>1000,40705=>1000,40706=>1000,40707=>1000,40708=>1000, + 40709=>1000,40710=>1000,40711=>1000,40712=>1000,40713=>1000,40714=>1000,40715=>1000,40716=>1000,40717=>1000,40718=>1000,40719=>1000,40720=>1000,40721=>1000,40722=>1000,40723=>1000,40724=>1000, + 40725=>1000,40726=>1000,40727=>1000,40728=>1000,40729=>1000,40730=>1000,40731=>1000,40732=>1000,40733=>1000,40734=>1000,40735=>1000,40736=>1000,40737=>1000,40738=>1000,40739=>1000,40740=>1000, + 40741=>1000,40742=>1000,40743=>1000,40744=>1000,40745=>1000,40746=>1000,40747=>1000,40748=>1000,40749=>1000,40750=>1000,40751=>1000,40752=>1000,40753=>1000,40754=>1000,40755=>1000,40756=>1000, + 40757=>1000,40758=>1000,40759=>1000,40760=>1000,40761=>1000,40762=>1000,40763=>1000,40764=>1000,40765=>1000,40766=>1000,40767=>1000,40768=>1000,40769=>1000,40770=>1000,40771=>1000,40772=>1000, + 40773=>1000,40774=>1000,40775=>1000,40776=>1000,40777=>1000,40778=>1000,40779=>1000,40780=>1000,40781=>1000,40782=>1000,40783=>1000,40784=>1000,40785=>1000,40786=>1000,40787=>1000,40788=>1000, + 40789=>1000,40790=>1000,40791=>1000,40792=>1000,40793=>1000,40794=>1000,40795=>1000,40796=>1000,40797=>1000,40798=>1000,40799=>1000,40800=>1000,40801=>1000,40802=>1000,40803=>1000,40804=>1000, + 40805=>1000,40806=>1000,40807=>1000,40808=>1000,40809=>1000,40810=>1000,40811=>1000,40812=>1000,40813=>1000,40814=>1000,40815=>1000,40816=>1000,40817=>1000,40818=>1000,40819=>1000,40820=>1000, + 40821=>1000,40822=>1000,40823=>1000,40824=>1000,40825=>1000,40826=>1000,40827=>1000,40828=>1000,40829=>1000,40830=>1000,40831=>1000,40832=>1000,40833=>1000,40834=>1000,40835=>1000,40836=>1000, + 40837=>1000,40838=>1000,40839=>1000,40840=>1000,40841=>1000,40842=>1000,40843=>1000,40844=>1000,40845=>1000,40846=>1000,40847=>1000,40848=>1000,40849=>1000,40850=>1000,40851=>1000,40852=>1000, + 40853=>1000,40854=>1000,40855=>1000,40856=>1000,40857=>1000,40858=>1000,40859=>1000,40860=>1000,40861=>1000,40862=>1000,40863=>1000,40864=>1000,40865=>1000,40866=>1000,40867=>1000,40868=>1000, + 40869=>1000); +$diff=''; +$originalsize=23275812; + +// CID Information +// Select your language +// unicode to cid conversion table is from +// ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/ +// cid2code.txt in ac16.tar.Z,ag15.tar.Z,ak12.tar.Z and aj16.tar.Z. + +//$enc='UniCNS-UTF16-H'; +//$cidinfo=array('Registry'=>'Adobe','Ordering'=>'CNS1','Supplement'=>0); +//include(dirname(__FILE__).'/uni2cid_ac15.php'); + +//$enc='UniGB-UTF16-H'; +//$cidinfo=array('Registry'=>'Adobe','Ordering'=>'GB1','Supplement'=>2); +//include(dirname(__FILE__).'/uni2cid_ag15.php'); + +//$enc='UniKS-UTF16-H'; +//$cidinfo=array('Registry'=>'Adobe','Ordering'=>'Korea1','Supplement'=>0); +//include(dirname(__FILE__).'/uni2cid_ak12.php'); + +$enc='UniJIS-UTF16-H'; +$cidinfo=array('Registry'=>'Adobe','Ordering'=>'Japan1','Supplement'=>5); +include(dirname(__FILE__).'/uni2cid_aj16.php'); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/courier.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/courier.php new file mode 100755 index 00000000..293dcee9 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/courier.php @@ -0,0 +1,33 @@ +600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600, +10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600, +20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600, +30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600, +40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600, +50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600, +60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600, +70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600, +80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600, +90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600, +100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600, +109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600, +118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600, +127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600, +136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600, +145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600, +154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600, +163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600, +172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600, +181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600, +190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600, +199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600, +208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600, +217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600, +226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600, +235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600, +244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600, +253=>600,254=>600,255=>600); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/AUTHORS b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/AUTHORS new file mode 100755 index 00000000..b84a5473 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/AUTHORS @@ -0,0 +1,46 @@ +abysta at yandex.ru +Adrian Schroeter +Andrey Valentinovich Panov +Ben Laenen +Besarion Gugushvili +Bhikkhu Pesala +Clayborne Arevalo +Dafydd Harries +Danilo Segan +Davide Viti +David Jez +David Lawrence Ramsey +Denis Jacquerye +Dwayne Bailey +Eugeniy Meshcheryakov +Gee Fung Sit +Heikki Lindroos +James Cloos +James Crippen +John Karp +Keenan Pepper +Lars Naesbye Christensen +Mashrab Kuvatov +Max Berger +Mederic Boquien +Michael Everson +Misu Moldovan +Nguyen Thai Ngoc Duy +Nicolas Mailhot +Ognyan Kulev +Ondrej Koala Vacha +Peter Cernak +Remy Oudompheng +Roozbeh Pournader +Sahak Petrosyan +Sander Vesik +Stepan Roh +Stephen Hartke +Steve Tinney +Tavmjong Bah +Tim May +Valentin Stoykov +Vasek Stodulka +Wesley Transue + +$Id: AUTHORS 2344 2009-03-08 13:02:37Z moyogo $ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/BUGS b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/BUGS new file mode 100755 index 00000000..8e64b891 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/BUGS @@ -0,0 +1,3 @@ +See http://dejavu.sourceforge.net/wiki/index.php/Bugs + +$Id: BUGS 80 2004-11-13 13:12:02Z src $ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/LICENSE b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/LICENSE new file mode 100755 index 00000000..e5fd55a0 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/LICENSE @@ -0,0 +1,99 @@ +Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. +Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) + +Bitstream Vera Fonts Copyright +------------------------------ + +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is +a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of the fonts accompanying this license ("Fonts") and associated +documentation files (the "Font Software"), to reproduce and distribute the +Font Software, including without limitation the rights to use, copy, merge, +publish, distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to the +following conditions: + +The above copyright and trademark notices and this permission notice shall +be included in all copies of one or more of the Font Software typefaces. + +The Font Software may be modified, altered, or added to, and in particular +the designs of glyphs or characters in the Fonts may be modified and +additional glyphs or characters may be added to the Fonts, only if the fonts +are renamed to names not containing either the words "Bitstream" or the word +"Vera". + +This License becomes null and void to the extent applicable to Fonts or Font +Software that has been modified and is distributed under the "Bitstream +Vera" names. + +The Font Software may be sold as part of a larger software package but no +copy of one or more of the Font Software typefaces may be sold by itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME +FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING +ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE +FONT SOFTWARE. + +Except as contained in this notice, the names of Gnome, the Gnome +Foundation, and Bitstream Inc., shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this Font Software +without prior written authorization from the Gnome Foundation or Bitstream +Inc., respectively. For further information, contact: fonts at gnome dot +org. + +Arev Fonts Copyright +------------------------------ + +Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the fonts accompanying this license ("Fonts") and +associated documentation files (the "Font Software"), to reproduce +and distribute the modifications to the Bitstream Vera Font Software, +including without limitation the rights to use, copy, merge, publish, +distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to +the following conditions: + +The above copyright and trademark notices and this permission notice +shall be included in all copies of one or more of the Font Software +typefaces. + +The Font Software may be modified, altered, or added to, and in +particular the designs of glyphs or characters in the Fonts may be +modified and additional glyphs or characters may be added to the +Fonts, only if the fonts are renamed to names not containing either +the words "Tavmjong Bah" or the word "Arev". + +This License becomes null and void to the extent applicable to Fonts +or Font Software that has been modified and is distributed under the +"Tavmjong Bah Arev" names. + +The Font Software may be sold as part of a larger software package but +no copy of one or more of the Font Software typefaces may be sold by +itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL +TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +Except as contained in this notice, the name of Tavmjong Bah shall not +be used in advertising or otherwise to promote the sale, use or other +dealings in this Font Software without prior written authorization +from Tavmjong Bah. For further information, contact: tavmjong @ free +. fr. + +$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/NEWS b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/NEWS new file mode 100755 index 00000000..7b80d5ee --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/NEWS @@ -0,0 +1,1215 @@ +Changes from 2.29 to 2.30 + +* added U+0462-U+0463 to Mono (by Denis Jacquerye) +* corrected U+1E53 in Serif (by Gee Fung Sit) +* added U+1E4C-U+1E4D to Mono and Serif (by Gee Fung Sit) +* added U+1E78-U+1E79 to Mono (by Gee Fung Sit) +* fixed missing diacritics in Latin Extended Additional in Sans ExtraLight + (moved stacked diacritics out of PUA in the process) (by Gee Fung Sit) +* fixed anchors on U+1E78 in Serif (by Gee Fung Sit) +* added U+1DC4-U+1DC9 to Serif (by Denis Jacquerye) +* renamed above-mark to above-mark in Serif-Italic (by Denis Jacquerye) +* added U+1DC4-U+1DC9 to context class for dotless substitution (by Denis + Jacquerye) +* changed Doubleacute to Doublegrave in Sans ExtraLight (by Gee Fung Sit) +* removed redundant reference in U+01FB in Sans Oblique (by Gee Fung Sit) +* added U+A726-U+A727 to Mono (Denis Jacquerye) +* changed U+04BE and U+04BF according to recommedations of Sasha Ankwab in Sans + (by Andrey V. Panov) +* remove "Symbol Charset" from set of codepages in Sans (by Eugeniy + Meshcheryakov) + +Changes from 2.28 to 2.29 + +* modified U+10FB in Sans to be a mirror image of U+2056, since U+10FB is not + Georgian-specific (by Roozbeh Pournader) +* added U+2B1F, U+2B24, U+2B53, U+2B54 in Sans (by Roozbeh Pournader) +* fixed TUR opentype language tag to TRK in Serif (bug 19825) (by Ben Laenen) +* early implementation of Abkhaz letter U+0524-U+0525 in Sans + (by Michael Everson and abysta) +* flipped U+1D538 in Sans (by Gee Fung Sit) +* added U+26B3-U+26B8, U+1D7D8-U+1D7E1 in Sans (by Gee Fung Sit) +* corrected U+1D7A9 in Sans Bold Oblique (by Gee Fung Sit) +* Fixed U+0649 to be dual-joining in Sans Mono (by Roozbeh Pournader) +* Remove unnecessary 'isol' feature from Sans Mono (by Roozbeh Pournader) +* Remove 'cmap' mappings for U+066E, U+066F, U+067C, U+067D, U+0681, U+0682, + U+0685, U+0692, U+06A1, U+06B5, U+06BA, U+06C6, U+06CE, and U+06D5 + in Sans Mono (bug 20323) (by Roozbeh Pournader) +* add half brackets (U+2E22 - U+2E25, by Steve Tinney) + +Changes from 2.27 to 2.28 + +* added U+A789, U+A78A in Sans and Sans Mono (by Denis Jacquerye) +* modified U+02D6, U+02D7, U+02EE in Sans and Sans Mono (by Denis Jacquerye) +* added U+1E9E (German capital ß) to Sans and Serif (by Denis Jacquerye) +* adjusted width of U+01B7-U+01B9 in Serif Italic (by Denis Jacquerye) +* modified U+021C, U+021D in Sans (by Denis Jacquerye) +* added U+021C, U+021D in Mono (by Denis Jacquerye) +* added U+F428 (Georgian Nuskhuri "f") in private use area (by Besarion + Gugushvili) +* updated Georgian mkhedruli (U+10D0-U+10FA) with new version (by Besarion + Gugushvili) +* updated Georgian asomtavruli (U+10A0-U+10C5) with new version (by Besarion + Gugushvili) +* added Georgian nuskhuri (U+2D00-U+2D25) (by Besarion Gugushvili) +* added Georgian mtavruli in private use area (U+F400-U+F426) (by Besarion + Gugushvili) +* added mark anchors above to Cyrillic U+0430-U+0438, U+043A-U+044F, + U+0454-U+0455 in Mono (by Ben Laenen) +* modified/moved up U+0318-U+0319, U+031C-U+031F, U+0329-U+032A, U+032C-U+032D, + U+0339-U+033B, U+0348 and U+0353 in Sans to prevent cut-off (by Gee Fung Sit) +* added U+035A to Sans (by Gee Fung Sit) +* updated fontconfig files (by Nicolas Mailhot) +* added U+2032-2037 to Mono (by Denis Jacquerye) +* added Ogham to Sans ExtraLight (by Gee Fung Sit) +* added U+2C6F, U+2C79, U+2C7C-2C7D to Mono (by Gee Fung Sit) +* added U+210F to Serif and Sans ExtraLight (by Gee Fung Sit) +* changed U+210F to a more common glyph in Sans and Mono (by Gee Fung Sit) + +Changes from 2.26 to 2.27 + +* added some of Michael Everson's new Cyrillic glyphs to Sans (by Wesley + Transue) +* removed blank glyph at U+05EF from Sans Bold Oblique (by Gee Fung Sit) +* small adjustments to existing tone bars in Sans and Mono (by Gee Fung Sit) +* added U+0372-U+0373, U+0376-U+0377, U+03CF, U+A668-U+A66E, U+A708-U+A711, + U+A71B-U+A71F to Sans (by Gee Fung Sit) +* copied U+02E5-U+02E9 over from Sans to fix inconsistencies in Serif (by Gee + Fung Sit) +* added U+021C-U+021D, U+0370-U+0371, U+037B-U+037D, U+0470-U+0471, + U+0510-U+0515, U+051A-U+051D, U+1E9F, U+2C64, U+2C6E-U+2C6F, U+2C79, + U+2C7C-U+2C7D, U+A644-U+A647, U+A650-U+A651, U+A654-U+A657, U+A708-U+A716, + U+A71B-U+A71F to Serif (by Gee Fung Sit) +* added U+A708-U+A716, U+A71B-U+A71F to Mono (by Gee Fung Sit) +* added anchors to U+017F (ſ) and fixed U+1E9B (ẛ) in Serif (by Gee Fung Sit) +* made U+0325 smaller in Sans Bold and Serif to match Sans Book (by Gee Fung + Sit) +* fixes to U+02F3 (moved up), U+228F-U+2294 (more square-like) and + U+22CE-U+22CF (stroke width) in Sans (by Gee Fung Sit) +* replaced U+2202 ∂ (Sans and Mono) and U+221D ∝, U+221E ∞ (Sans) with glyphs + from Arev (with small changes) (by Gee Fung Sit) +* added U+22B0-U+22B1, U+22C7, U+22D0-U+22D5 from Arev to Sans to complete the + block (by Gee Fung Sit) +* added U+0514-U+0515 to Sans ExtraLight (by Gee Fung Sit) +* skewed U+A78C in all Oblique/Italic fonts (by Gee Fung Sit) +* moved U+2215 to U+2044 in Sans and Serif and replaced U+2215 with reference + to U+002F in all fonts (by Gee Fung Sit) +* added U+2C6E to Mono (by Denis Jacquerye) +* added U+A782 and U+A783 in Sans (by Wesley Transue) +* added U+0244, U+024C-024D, U+2C64 in Sans Mono (by Denis Jacquerye) +* modified U+01AE in Sans Mono (by Denis Jacquerye) +* added U+2C7A to all fonts (by Gee Fung Sit) +* italicized/small changes to U+2C76 in Serif (Bold) Italic (by Gee Fung Sit) +* improved outlines of U+2C68, U+2C6A, U+2C6C in Serif (Bold) Italic (by Gee + Fung Sit) +* rounded U+2C77 at the bottom in Serif (by Gee Fung Sit) +* added joining behavior for tone letters (U+02E5-U+02E9) in Sans (bug #15669) + (by Gee Fung Sit) +* fixed outline of y.alt in Sans Regular (by Denis Jacquerye) +* changed references of U+1D5A8, U+1D5C5, U+1D5DC, U+1D5F9, U+1D610, U+1D62D, + U+1D644 and U+1D661 to stylistic alternates to have a better distinction (by + Gee Fung Sit) +* hinted I.alt in Sans Regular (by Gee Fung Sit) +* added U+0487, completing Cyrillic block (by Gee Fung Sit) +* extended the bar of U+0463 to the right and moved the anchor (by Gee Fung + Sit) +* added anchors to glyphs in Cyrillic block (by Gee Fung Sit) +* added (preliminary) hints to tone letter forms (U+02E5.5, U+02E9.1, stem) in + Sans Book (by Gee Fung Sit) + +Changes from 2.25 to 2.26 + +- added glyphs for Cyrillic-B to Sans (by Wesley Transue) +- added U+0370-U+0371 to Sans (by Wesley Transue) +- added U+019C, U+01A2-U+01A3, U+01A6, U+01E4-U+01E5, U+024C-U+024D, U+0285, + U+0290, U+02A0, U+0370-U+0371, U+03F1, U+03FC to Sans ExtraLight (by Wesley + Transue) +- added U+20A0-U+20A5, U+20A7-U+20B3, U+2105, U+210D, U+210F, U+2115, U+2117, + U+2119-U+211A, U+211D, U+2124, U+212E, U+2200-U+2204 to Mono (by Heikki + Lindroos) +- added U+01BA and U+01BF to Mono (by Heikki Lindroos) +- merged OpenType "aalt" feature in Latin in Sans (by Denis Jacquerye) +- added alternative shape for y in Sans (by Denis Jacquerye) +- added saltillo (U+A78B-U+A78C) to all faces (by James Cloos) +- changed U+047C-U+047D to references instead of outlines in Sans (by Wesley + Transue) +- added Latin letter tresillo U+A72A-U+A72B to Sans (by Wesley Transue) +- added U+A734-U+A737 to Sans (by Wesley Transue) +- added U+2053 to Serif and fixed it bug:9425 in Sans (by Gee Fung Sit) +- removed problematic hints for U+0423 bug:10025 (by Gee Fung Sit) +- added U+27C5-U+27C6 bug:10255 to all faces (by Gee Fung Sit) +- fixed width of U+2016 in Sans Oblique (by Gee Fung Sit) +- added U+2016, U+2032-U+2038, U+2042, U+2045-U+2046, U+204B-U+204F, + U+2051-U+2052, U+2057 to Serif (by Gee Fung Sit) +- made U+2140 bigger to match other n-ary operators (by Gee Fung Sit) +- added U+0606-U+0607, U+0609-U+060A to Sans (by Gee Fung Sit) +- added U+221B-U+221C to Mono (by Gee Fung Sit) +- small adjustments to U+221B-U+221C in Sans and Serif (by Gee Fung Sit) +- update U+04B4-U+04B5 in Serif (by Andrey V. Panov) +- increased max-storage value from maxp table to 153 (by Andrey V. Panov) +- added U+0472-U+0473, U+0510-U+0511, U+051A-U+051D, U+0606-U+0607, + U+0609-U+060A, U+1E26-U+1E27, U+1E54-U+1E55, U+1E7C-U+1E7D, U+1E8C-U+1E8D, + U+1E90-U+1E91, U+1E97-U+1E99, U+1E9F, U+1EAC-U+1EAD, U+1EB6-U+1EB7, + U+1EC6-U+1EC7, U+1ED8-U+1EDD, U+1EE0-U+1EE3, U+1EE8-U+1EEB, U+1EEE-U+1EF1 to + Mono (by Gee Fung Sit) +- added locl rules for S/T cedilla for Romanian and Moldavian so they get + rendered as S/T with comma accent (see Redhat bug #455981) (by Ben Laenen) +- removed ligature rule from Armenian U+0587 bug:16113 (by Gee Fung Sit) + +Changes from 2.24 to 2.25 + +- moved/added U+2E18 (by Gee Fung Sit) +- added empty glyph for U+2064 in Sans and Serif (by Gee Fung Sit) +- added U+22CE-U+22CF to Sans (by Gee Fung Sit) +- Sans Oblique and Bold Oblique, Serif: reverted digits hinting instructions back to before revision 1590, which fixed mistaken debian bug #471024. This fixes Debian bug #411308. The original bug was in freetype not in the fonts (by Denis Jacquerye) +- added U+A726-U+A729, U+A730-U+A733, U+A738-U+A73F, U+A746-U+A74B, U+A74E-U+A74F, U+A780-U+A781, U+A7FB-U+A7FF to Sans (by Gee Fung Sit) +- added Macedonian italic glyph shape for U+0453 in Serif (by Ben Laenen) +- changed descenders in U+0446, U+0449, U+0497, U+04A3, U+04AD (by Andrey V. Panov) +- updated main SFD files to SplineFontDB 3.0 (Denis Jacquerye and Gee Fung Sit) +- moved U+0561 2 up since it wasn't aligned with the baseline well (by Ben Laenen) +- added U+2E2E to Sans (by Gee Fung Sit) +- replaced U+2699 with simpler version in Sans (by Gee Fung Sit) +- added a lot of hinting instructions to Latin Extended B, Greek and Coptic glyphs Sans Book (by Wesley Transue) +- differentiated U+2219 from U+22C5 and adjusted affected references in Sans and Mono (by Gee Fung Sit) +- made Hebrew narrower in Sans Bold and Sans Bold Oblique (by Denis Jacquerye) +- added Kurdish and Chuvash letters from Unicode 5.1 Cyrillic Extended block (by Wesley Transue) +- added U+1E9F, U+A644-U+A647, U+A64C-U+A64D, U+A650-U+A651, U+A654-U+A655, U+A712U+A716 to Sans (by Gee Fung Sit) +- added several glyphs to Sans ExtraLight (by Gee Fung Sit) +- added hinting instructions to U+046A-U+046B, U+0508-U+0509, U+050B, U+0512-U+0513 in Sans Book (by Wesley Transue) +- corrected width of U+027E in Sans Book (by Gee Fung Sit) +- added U+2C79, U+2C7B-U+2C7D to Sans (by Gee Fung Sit) +- added a bunch of glyphs+small corrections to Sans Light (by Gee Fung Sit) +- added U+0496, U+0497, U+04B0, U+04B1 (by Andrey V. Panov) +- updated U+0493, U+049B, U+04B3, U+04B7, U+04F7 (by Andrey V. Panov) +- further improvements in extended Cyrillic (by Andrey V. Panov) + +Changes from 2.23 to 2.24 + +- instructions for U+05C0 ׀, U+05C3 ׃, U+05F3 ׳, and U+05F4 ״ in DejaVu + Sans. (by Wesley Transue) +- instructions for U+2116 in Sans (by Andrey V. Panov) +- Unicode 5.1 update: moved U+F208 to U+2C6D, U+F25F to U+2C71, added + U+2C6E-U+2C6F, U+2C72-U+2C73, updated outline of U+2C71 in Sans. (by + Denis Jacquerye) +- updated and instructed U+0401 in Sans (by Andrey V. Panov) +- fixed the bug in Sans faces where U+02EC ˬ faced the wrong direction. + Also, added a few more glyph instructions. (by Wesley Transue) +- removed OS2Sub and OS2Strike that weren't intentional in Sans + ExtraLight. (by Denis Jacquerye) +- updated instructions for U+401, U+44F in Serif Book. (by Andrey V. + Panov) +- instructions for U+02C4 ˄, U+02C5 ˅, U+03D8 Ϙ, U+03D9 ϙ, U+0494 Ҕ, and + U+0495 ҕ in Sans Book. (by Wesley Transue) +- instructions for U+01A6 Ʀ, U+0238 ȸ, U+0239 ȹ, U+02EC ˬ, and U+05C6 ׆ + in Sans Book. (by Wesley Transue) +- DejaVuSans.sfd DejaVuSerif.sfd: updated instructions for U+447 and + U+451 using code generated with xgridfit (by Andrey V. Panov) +- instructions for a few glyphs in the Latin Extended-B Block, Greek + Block, Cyrillic Block, and N'Ko block. (by Wesley Transue) +- updated sfdnormalize.pl, and SFD files to new SFD format with empty + lines. (by Denis Jacquerye) + +Changes from 2.22 to 2.23 + +- fixed bug which made Condensed fonts appear instead of normal width ones +- added U+20DB, U+20DC, and U+20E1 to Sans (by Roozbeh Pournader) +- added hinting instructions to U+01A7, U+01AA-U+01AC, U+01AE-U+01AF, + U+01BC-U+01BD, U+01BF, U+01F7, U+0277, U+027F, U+0285-U+0286, U+0297, U+02AF, + U+02B4-U+02B5, U+02BD, U+030D, U+0311, U+0329, U+04A0-U+04A1 in Sans Book (by + Wesley Transue) +- modified hinting instructions of U+04A2 in Sans Book (by Wesley Transue) +- added hinting instructions to U+237D, U+2423 in Mono Book and Mono Bold (by + Wesley Transue) +- added mathematical alphanumeric symbols to all styles (by Max Berger) +- added Unicode 5.1 U+2E18 as U+2E18.u51 (not yet usable) to Sans (by Roozbeh + Pournader) +- dereferenced all glyphs with mixed references and outlines (by Denis + Jacquerye) +- removed non-zero width from U+0344 in Sans (by Denis Jacquerye) + +Changes from 2.21 to 2.22 + +- directory structure has changed, we now use the Makefile +- modified Armenian U+0565 in Sans (by Սահակ Պետրոսյան) +- added double struck letters and numbers U+2102, U+210D, U+2115, + U+2119-U+211A, U+211D, U+2124, U+213C-U+2140, U+2145-U+2149, U+1D538-U+1D539, + U+1D53B-U+1D53E, U+1D540-U+1D544, U+1D546, U+1D54A-U+1D550, U+1D552-U+1D56B, + U+1D7D8-U+1D7E1 to Serif (by Stephen Hartke) +- added letterlike symbols U+2103, U+2109, U+2127, U+214B, U+2141-U+2144 to + Serif (by Ben Laenen) +- fixed outline direction of U+2143 in Sans Bold/Bold Oblique (by Ben Laenen) +- added arrow set in Serif: arrows: U+2194-U+21FF; dingbats: U+27A1; + supplemental arrows A: U+27F0-U+27FF; supplemental arrows B: U+2900-U+2975, + U+297A; miscellaneous symbols and arrows: U+2B00-U+2B11 (by Ben Laenen) +- added U+0180, U+01DE, U+01E0-01E1, U+022A, U+022C, U+0230, U+1E08-U+1E09, + U+1E10-U+1E11, U+1EB0-U+1EB1 to Mono (by Denis Jacquerye) +- adjusted U+01D5, U+01D7, U+01D9, U+1DB in Mono (by Denis Jacquerye) +- added Ogham in Sans (by Wesley Transue) +- added Yijing Hexagram Symbols in Sans (by Wesley Transue) +- hinting instructions added to Cyrillic U+0460, U+04A6-U+04A7, U+04AC-U+04AD, + U+04C7-U+04C8, U+04F6-U+04F7, U+04FA-U+04FB, U+050C-U+050D in Sans Book (by + Wesley Transue) +- adjusted Cyrillic letters U+042A, U+044A, U+044C, U+0459-U+045B, U+0462, + U+048C-U+048D in Serif (by Andrey V. Panov) +- hinting instructions added to Lao U+0EB7 in Sans (by Wesley Transue) +- added Roman numerals and Claudian letter U+2160-U+2184 in Serif (by Ben + Laenen) +- added U+FFF9-U+FFFD to Sans, Serif and Mono (by Lars Næsbye Christensen) +- added mathematical symbols to Serif: U+2200, U+2203-U+2204, U+2213-U+2214, + U+2217-U+2218, U+2223-U+2226, U+2250-U+2255, U+2295-U+22AF, U+22C5 (by Ben + Laenen) +- modified bullet symbol U+2219 in Serif (by Ben Laenen) + +Changes from 2.20 to 2.21 + +- added U+FE20-U+FE23 (half diacritics) to Sans (by Denis Jacquerye) +- added anchor "half" to position right half of double marks, U+FE21 or U+FE23 + to Sans (by Denis Jacquerye) +- shifted U+0360 up to avoid collision with some outlines in Sans (by Denis + Jacquerye) +- added anchor above-mark anchor to U+035D, U+035E, U+0360, U+0361 in Sans (by + Denis Jacquerye) +- added instructions for ff, ffi, ffl ligatures in Serif Bold (by Eugeniy + Meshcheryakov) +- added instructions to some N'Ko glyphs (by Wesley Transue) +- added instructions to some Lao glyphs (by Wesley Transue) +- cleaning up 'liga' Standard Ligature in Latin, in Sans and Sans Mono (by + Denis Jacquerye) +- added U+046A, U+046B (big yus) in Serif (by Andrey V. Panov) +- added box drawing symbols to Sans and Serif (by Lars Næsbye Christensen) +- added Makefile to improve font and packages generating (by Nicolas Mailhot) + +Changes from 2.19 to 2.20 + +- removed TeX and TeXData tags from all sfd files (by Eugeniy Meshcheryakov) +- removed all 'frac' lookups (by Eugeniy Meshcheryakov) +- fixed duplicate glyph names (by Eugeniy Meshcheryakov) +- removed standard ligatures with U+00B7 in Mono (by Eugeniy Meshcheryakov) +- use reference to U+002D in U+00AD in Sans Oblique, and adjust instructions + (by Eugeniy Meshcheryakov) +- updated Cyrillic in Sans Extra Light (by Andrey V. Panov) +- added instructions to N'Ko U+07C1-U+07C6, U+07CA, U+07CE-U+07CF, U+07D1, + U+07D3-U+07D4, U+07D8, U+07DB and U+07EB in Sans (by Wesley Transue) +- added instructions to Lao U+0E8A, U+0E95, U+0E97, U+EA5, U+0EB4 and U+0EB5 + (by Wesley Transue) +- adjusted instructions for Hebrew glyphs (by Denis Jacquerye) +- added instructions for U+0265 in Sans Bold (by Denis Jacquerye) +- fix U+1D68 in Sans: it had the shape of delta, where it should be a rho (by + Ben Laenen) +- remove U+1D5C glyph in Sans Oblique (it was empty) (by Ben Laenen) +- fix instructions of U+01AD in Sans Bold (by Ben Laenen) +- fix instructions of U+042D in Serif (by Ben Laenen) +- remove buggy instructions of U+2328 in Serif (by Ben Laenen) +- corrected width of U+2C75-U+2C76 in Sans Bold and Serif Bold (by Gee Fung Sit) +- added U+2C75-U+2C77 to Mono (by Gee Fung Sit) + +Changes from 2.18 to 2.19 + +- fixed misplaced symbols (U+2325,2326) in Sans Oblique (by John Karp) +- added Mark to Base anchors: 'cedilla' for combining cedilla and + 'above-legacy' for stacking above precomposed glyphs (just a,e,i,o,u with + macron for now) in Sans (by Denis Jacquerye). +- added contextual substitution for Case and Dotless forms in all Sans variants + (by Denis Jacquerye). +- renamed 'ccmp' lookups for RTL and Basic (LGC, etc.) (by Denis Jacquerye) +- added anchor 'cedilla' for vowels in Sans. (by Denis Jacquerye) +- extended contextual dotless and case substitutions to handle both below and + above diacritics (by Denis Jacquerye) +- renamed Dotless and Case Form GSUB lookups in Sans with meaningful names (by + Denis Jacquerye) + +Changes from 2.17 to 2.18 + +- Re-encoded the source files for Full Unicode (by Ben Laenen) +- Re-enabled the "ff", "fl", "fi", "ffl", "ffi" ligatures by default in Serif + (by Ben Laenen) +- Disabled the "fi", "ffi" ligatures for languages with dotless i in Serif (by + Ben Laenen) +- added Tifinagh to Sans Book and Bold, U+2D30-U+2D65, U+2D6F, partially hinted + in Sans Book. (by Denis Jacquerye) +- added Tai Xuan Jing Symbols (U+1D300-1D356) to Sans (by Remy Oudompheng) +- added double-struck letters (U+1D538-U+1D56B minus reserved code points) to + Sans (by Gee Fung Sit) +- added U+22EE-U+22F1 to Sans (by Gee Fung Sit) +- added U+2C67-U+2C6C, U+2C75-U+2C77 to Serif (by Gee Fung Sit) +- italicized various glyphs in Latin Extended-B, IPA Extensions, Spacing + Modifier Letters, Phonetic Extension (Supplement) and Super- and Subscripts + in Serif Oblique fonts (by Gee Fung Sit) +- modified outlines, bearings of Hebrew U+05D6, U+05D8, U+05DB, U+05DE, U+05E0, + U+05E1, U+05E2, U+05EA in Sans Book and Oblique, adjusted hinting in Book + based on Yotam Benshalom's comments. (by Denis Jacquerye) +- added Braille Patterns (U+2800-U+28FF) to Serif fonts (by Gee Fung Sit) +- added N'Ko to Sans Book and Bold: U+07C0-U+07E7, U+07EB-U+07F5, U+07F8-U+07FA + (by Eugeniy Meshcheryakov) +- added U+0ED8 (Lao digit 8) to Sans (by Remy Oudompheng) +- added Lao diacritics U+0EB0-0EB9, U+0EBB-0EBC, U+0EC8-0ECD to Mono (by Remy + Oudompheng) +- renamed Serif [Bold] Oblique, make it Italic (by Eugeniy Meshcheryakov) +- added U+29FA-U+29FB to Sans and Sans Mono (by Gee Fung Sit) +- swapped glyphs for Eng U+014A from Sami Eng to African Eng, the latter being + more common (by Denis Jacquerye) +- swapped ae U+00E6 and ae.alt in Serif Italics fonts, thus fixing #8213 (by + Denis Jacquerye) +- minor improvements to Misc. Symbols in Sans (by Gee Fung Sit) +- minor improvements and additions to Sans ExtraLight (by Gee Fung Sit) +- improved instructions for various Cyrillic letters (by Eugeniy Meshcheryakov) +- fixed hinting of theta and chi in Sans Book (by Ben Laenen) +- added Georgian Mkhedruli to Sans, Serif and Mono, ASumtavruli to Sans and + Serif (by Besarion Gugushvili) + +Changes from 2.16 to 2.17 + +- Sans fonts: fix position for certain combinations of Arabic fatha, kasra, + shadda, damma, kasratan, dammatan, fathatan and hamza (by Ben Laenen) +- added 'ae.alt' to Serif Oblique fonts, with design matching shape of italic + 'a' instead of slanted 'a', see bug #8213 (by Denis Jacquerye) +- added super- and subscripts to Serif and Mono: U+1D2C-U+1D2E, U+1D30-U+1D3C, + U+1D3E-U+1D42, U+1D62-U+1D65, U+1D78, U+2071, U+207A-U+207E, U+208A-U+208E, + U+2090-U+2094 (by Gee Fung Sit) + +Changes from 2.15 to 2.16 + +- fixed hinting instructions for digits in DejaVu Sans Oblique, Bold Oblique, + and Serif Book to not change glyph width (by Eugeniy Meshcheryakov) +- added instructions for U+0404, U+0411, U+0413, U+0414, U+0417-U+041B, U+041F, + U+0423, U+0424, U+0426-U+0429, U+042C, U+042E, U+042F, U+0490 in Serif Bold + (by Eugeniy Meshcheryakov) +- added U+0220 and Eng.alt to Serif fonts (by Denis Jacquerye) +- added U+232C, U+2394, U+23E3 to Sans fonts (by John Karp) +- added U+230C-U+230F, U+231C-U+231F to Sans fonts, fixing bug:9547 + (by John Karp) +- adjusted dot below, dot above, dieresis above, dieresis below in Sans fonts + (by Denis Jacquerye) +- added U+2300, U+2301, U+2303, U+2304, U+2305, U+2307, U+2326, U+2327, U+232B, + arrow.base to Sans fonts (by John Karp) +- adjusted dot and dieresis below and above in Serif fonts (by Denis Jacquerye) +- added U+1E1C-U+1E1D to Serif fonts (by Denis Jacquerye) +- added U+22BE, U+22BF (by Wesley Transue) +- added U+2324; modified U+2325: more standard proportions, and matches U+2324 + and U+2387; added U+2387 : flipped U+2325 with standard arrowhead + (by John Karp) +- added Lao digits U+0ED0-0ED7, U+0ED9 (by Remy Oudompheng) +- added to Mono in Arabic block : U+060C, U+0615, U+061B, U+061F, + U+0621-U+063A, U+0640-0655, U+065A, U+0660-066F, U+0674, U+0679-0687, U+0691, + U+0692, U+0698, U+06A1, U+06A4, U+06A9, U+06AF, U+06B5, U+06BA, U+06BE, + U+06C6, U+06CC, U+06CE, U+06D5, U+06F0-06F9 (by Remy Oudompheng) +- added to Mono in Arabic Presentations Forms-A : U+FB52-FB81, U+FB8A-FB95, + U+FB9E, U+FB9F, U+FBAA-FBAD, U+FBE8, U+FBE9, U+FBFC-FBFF (by Remy Oudompheng) +- added to Mono in Arabic Presentations Forms-B : U+FE70-FE74, U+FE76-FEFC, + U+FEFF (by Remy Oudompheng) +- added U+05BA, U+05BE, U+05F3, U+05F4, U+FB1E, U+FB21-U+FB28, U+FB4F to Sans + (by Eugeniy Meshcheryakov) +- added U+2102 to Mono (by Eugeniy Meshcheryakov) +- added U+2983-U+2984 to Sans (by Gee Fung Sit) +- added U+2A2F to Sans, Serif and Mono (by Gee Fung Sit) +- added U+2373-2375, U+237A to Sans (by John Karp) +- converted kern pairs to kern classes with Tavmjong Bah's scripts + (by Denis Jacquerye) +- set ScriptLang of kerning classes to just latn because of Pango bug + (by Denis Jacquerye) +- added DNK to ScriptLang latn otherwise it is excluded, and SRB and MDK to + cyrl (by Denis Jacquerye) +- removed flag 0x80 in generate.pe, otherwise it generates kerning tables some + systems don't like; thus loosing Apple tables (by Denis Jacquerye) +- removed ligature for precomposed legacy characters of Sans Oblique fonts + (by Denis Jacquerye) +- added bearings to en dash U+2013, em dash U+2014 and figure dash U+2012 + by making dashes shorter, preserving character width (by Denis Jacquerye) +- reduced U+031C, U+0325 (ring below), U+0339 to be entirely visible; + added instructions in Sans Book; changed U+1e00-U+1e01 to use new ring below + (by Denis Jacquerye) +- adjusted circumflex below on U+1E12-U+1E13, U+1E18-U+1E19, U+1E3C-U+1E3D, + U+1E4A-U+1E4B, U+1E70-U+1E71, U+1E76-U+1E77 in Sans fonts (by Denis Jacquerye) +- Added U+0ED4, U+0ED5 to DejaVu Sans (by Remy Oudompheng) +- Lao-specific anchors (by Remy Oudompheng) +- added alternate I to match the small capital in Sans (by Gee Fung Sit) + +Changes from 2.14 to 2.15 + +- improved hinting in Sans Oblique to deal with some spacing and inconsistency + issues (by Ben Laenen) +- added anchors to Mono Book, and added GPOS rules for combining diacritics to + show up as zero width glyphs (by Ben Laenen) +- removed U+F21C (PUA), it was copy of U+2C64 from Latin Extended C (by Eugeniy + Meshcheryakov) +- added U+27E6-U+27E7 to Sans (by Gee Fung Sit) +- added U+1407, U+1409, U+140C-U+141B, U+141D-U+1425, U+1427-U+142E, + U+1435-U+1438, U+143A-U+1449, U+1452, U+1454, U+1457-U+1465, U+1467-U+146A, + U+1471, U+1474-U+1482, U+1484-U+1488, U+148F, U+1492, U+14A0, U+14A2, U+14A9, + U+14AC-U+14BA, U+14BC, U+14BD, U+14C6, U+14C9-U+14CF, U+14D1, U+14D2, U+14D9, + U+14DC-U+14E9, U+14EC, U+14F3, U+14F6-U+1504, U+1506, U+1507, U+1510-U+1525, + U+152C, U+152F-U+153D, U+1540, U+1541, U+154E, U+154F, U+1552, U+155B, U+155C, + U+1568, U+1569, U+1574-U+157B, U+157D, U+15A7-U+15AE, U+1646, U+1647 (by + Eugeniy Meshcheryakov) +- fixed several contours to not intersect, use horizontal or vertical tangents, + use integer coordinates, etc in Sans Book (by Denis Jacquerye) +- added U+0496-U+0497 in Serif (by Andrey V. Panov) + +Changes from 2.13 to 2.14 + +- added Philippine peso glyph U+20B1 (by Clayborne Arevalo) +- made U+2012 have the same width as digits, according to Unicode 5.0, + page 206 (by Roozbeh Pournader) +- made all of the "above" combining characters remove the dot of "i", + "j", etc (Soft_Dotted characters), according to Unicode 5.0, + page 228 (by Roozbeh Pournader) +- made U+012F, U+03F3, U+0456, U+0458, U+1E2D, and U+1ECB (all fonts + except Mono), U+0249, U+2148, and U+2149 (Sans and Sans Condensed), + U+0268 (Sans ExtraLight, Serif and Serif Condensed), and U+029D (Serif + and Serif Condensed) respect the Soft_Dotted property (by Roozbeh + Pournader) +- added U+223E, U+223F, U+2240, U+22C2, U+22C3 to Sans (by Remy Oudompheng) +- added U+203D to Serif (by Gee Fung Sit) +- added zero-width glyphs for U+2061-U+2063 to Sans and Serif (by Gee + Fung Sit) +- changed isolated forms of Arabic waw (U+0648, U+0624 and U+06C6) (bug #9432) + (by Ben Laenen) +- added Lao consonants U+0E81, U+0E82, U+0E84, U+0E87, U+0E88, U+0E8A, + U+0E8D, U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA, + U+0EAB, U+0EAD-0EAF to Sans Mono (by Remy Oudompheng) +- added U+0200-U+0217, U+0226-U+0229, U+02F3, U+1E00-U+1E07, + U+1E0A-U+1E0B, U+1E18-U+1E1F, U+1E22-U+1E23, U+1E28-U+1E2D, + U+1E3A-U+1E3B, U+1E40, U+1E48-U+1E49, U+1E56, U+1E58-U+1E59, + U+1E5E-U+1E5F, U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, U+1E72-U+1E77, + U+1E86-U+1E8B, U+1E92-U+1E96, U+1EA0-U+1EA1, U+1EF4-U+1EF5 to Mono + (by Ben Laenen) +- renamed uppercase variants of diacritics (macron, breve, double grave, + double acute, inverted breve, dot above) to "uni03XX.case" in Mono + (by Ben Laenen) +- moved uppercase variants of diacritics up in Mono so they properly + vertically align on capitals (by Ben Laenen) +- precomposed glyphs with macron, breve, double grave, double acute, + inverted breve, dot above, macron below, breve below, inverted breve + below, dot below, cedilla, caron below, circumflex below, diaeresis + below, tilde below now reference to combining diacritics instead of + space modifiers in Mono (by Ben Laenen) +- made ring below (U+0325), and half rings below (U+031C and U+0339) + smaller in Mono (by Ben Laenen) +- added U+205F to all fonts (by Roozbeh Pournader) +- added U+035E-U+035F to Sans (by Roozbeh Pournader) +- added empty glyphs for U+034F, U+202A-U+202E, U+2060, U+206A-206F, + U+FE00-U+FE0F to non-Mono fonts (by Roozbeh Pournader) +- added U+2101, U+2107-U+2108, U+210B, U+210C, U+2110, U+2112, U+211B, + U+211F, U+2123, U+2125, U+2128-U+2129, U+212C-U+212D, U+212F, + U+2130-U+2131, U+2133, U+2136-U+213A, U+2141-U+2144, U+2B00-U+2B11, + U+2B20-U+2B23 to Sans (by John Karp) +- reshaped omega (U+03C9) in Mono (by Ben Laenen) +- added U+2205, U+22C6, U+2300-U+2301, U+2303-U+2306, U+230C-U+230F, + U+2312-U+2315, U+231C-U+231F, U+2335, U+2337-U+233E, U+2341-U+2344, + U+2347-U+2348, U+234B-U+234D, U+2349-U+2350, U+2352-U+2354, + U+2357-U+2359, U+235A-U+235C, U+235E-U+2360, U+2363-U+2365, + U+2368-U+2369, U+236B-U+2370, U+2373-U+237A, U+2380-U+2383, + U+2388-U+238B, U+2395 in Mono (by Ben Laenen) + +Changes from 2.12 to 2.13 + +- adjusted U+0198B, U+01B3-U+01B4 in Sans, hinted U+01B4 in Sans Book + (by Denis Jacquerye) +- added U+27F0-U+27FF, U+2906-U+2907, U+290A-U+290B, U+2940-U+2941 to Sans + (by Denis Jacquerye) +- added U+01E6-U+01E9, U+01EE-U+01EF, U+01F4-U+01F5, U+01FC-U+01FF, + U+021E-U+021F, U+0245, U+02BD, U+02C9, U+1E9B, U+2045-U+2046, U+2213, U+22C5, + U+22EF to Sans Mono (by Roozbeh Pournader) +- added U+04FA-U+04FD to Sans (by Michael Everson) +- removed U+2329 and U+232A because of their CJK properties, added U+27E8 + and U+27E9 in their stead, fixing part of bug #9038 (by Roozbeh Pournader) +- corrected and improvised U+0466-U+0469, U+046E-U+0471, U+047C-U+047D, U+0482, + U+0484-U+0486, U+0492-U+0493, U+04B0-U+04B1, U+050C-U+050D, and U+204A + in Sans (by Michael Everson) +- added instructions for U+0402, U+0409, U+040A, U+040B, U+044D, U+040F, + U+0452, U+0459-U+045B, U+045F to Sans Book (by Eugeniy Meshcheryakov) +- made italic shape for U+431, U+432, U+437, U+43B, U+43C, U+43D, U+444, U+447, + U+44D, U+44F, U+459, U+45A in SerifOblique and SerifBoldOblique + (by Andrey V. Panov) +- modified U+024C to match glyph in Unicode chart, fixing bug #9039 + (by Denis Jacquerye) +- made some canonically equivalent characters share the same glyph: + U+02B9 = U+0374, U+0343 = U+0313, and U+0387 = U+00B7 also adjusting U+02BA + to look like double U+02B9, fixing parts of bug #9038 (by Roozbeh Pournader) +- changed shapes for U+0478 and U+0479 in Sans to those in the Unicode charts, + based on a recent decision by Unicode Technical Committee to only use + the digraph form (by Michael Everson) +- adjusted width of NBSP U+00A0 and NNBSP U+202F, fixing bug #8401 + (by Denis Jacquerye) +- fixed several contours to not intersect, use horizontal or vertical tangents, + use integer coordinates, etc (by Roozbeh Pournader and Denis Jacquerye) +- added U+1402, U+1430, U+144D, U+146C, U+148A, U+14A4, U+14C1, U+14D4, U+14EE, + U+1527, U+1545, U+157E, U+158E, U+15AF to Sans (by Eugeniy Meshcheryakov) +- enlarged width of U+459 and U+45A in Serif (by Andrey V. Panov) +- made traditional shape for U+452, U+45B (by Andrey V. Panov) +- added euro sign U+20AC to Sans ExtraLight, making fontconfig recognize + the font as supporting English (by Denis Jacquerye) + +Changes from 2.11 to 2.12 + +- added U+0180 to Serif (by Denis Jacquerye) +- improved and/or hinted Armenian letters U+0542, U+0546, U+0562, + U+0563, U+0564, U+0577, U+0582 in Sans (by Ben Laenen) +- added U+4FE-U+4FF, U+512-U+513, U+2114, U+214E, U+26B2 to Sans + (by Gee Fung Sit) +- adjusted U+0496-U+0497, U+049A-U+04A1 in Sans to match U+0416, + U+041A, U+0436 and U+043A (by Gee Fung Sit) +- Mathematical Operators in Sans: changed U+22C0-U+22C1 to match + other n-ary operators, adjusted U+2203-U+2204, changed U+2220 in + Sans to match the style of U+2221 (by Gee Fung Sit) +- added U+1401, U+1403-U+1406, U+140A, U+140B, U+1426, U+142F, + U+1431-U+1434, U+1438, U+1439, U+1449, U+144A, U+144C, + U+144E-U+1451, U+1455, U+1456, U+1466, U+146B, U+146D-U+1470, + U+1472, U+1473, U+1483, U+1489, U+148B-U+148E, U+1490, U+1491, + U+14A1, U+14A3, U+14A5-U+14A8, U+14AA, U+14AB, U+14BB, U+14C0, + U+14C2-U+14C5, U+14C7, U+14C8, U+14D0, U+14D3, U+14D5-U+14D8, + U+14DA, U+14DB, U+14EA, U+14ED, U+14EF-U+14F2, U+14F4, U+14F5, + U+1405, U+1526, U+1528-U+152B, U+152D, U+152E, U+153E, + U+1542-U+1544, U+1546-U+154D, U+1550, U+1553, U+1555-U+155A, + U+1567, U+156A, U+157C, U+157F-U+1585, U+158A-U+158D, + U+158F-U+1596, U+15A0-U+15A6, U+15DE, U+15E1, U+166E-U+1676 to + Sans (by Eugeniy Meshcheryakov) +- re-enabled Latin ligatures fi, ffi, fl, ffl and ff in Sans + (by Ben Laenen) +- made italic shape for U+436, U+44A, U+44B, U+44C, U+44E, U+45F, + U+463 in SerifOblique and SerifBoldOblique (by Andrey V. Panov) +- fixed sub- and superscript metrics in Condensed Sans (bug #8848) + (by Ben Laenen) +- added U+474, U+475 in Serif (by Andrey V. Panov) +- hinted Greek glyphs U+03B7, U+30B8, U+03B9, U+03C1, U+03C3, + U+03C6 in Mono Book (by Ben Laenen) + +Changes from 2.10 to 2.11 + +- added instructions for Hebrew glyphs (Sans Book, by Eugeniy + Meshcheryakov) +- changed U+01A6 (Latin Yr) after bug #8212, in Sans, Serif and + Sans Mono fonts (by Denis Jacquerye). +- removed instruction for U+2600-U+26A1 (by Mederic Boquien) +- added U+202F and set width of U+00A0 (nobreakingspace) to the + same as U+0020, space (by Denis Jacquerye). +- added and improved instructions for various Cyrillic letters + (by Eugeniy Meshcheryakov) +- Changed U+416, U+42F, U+427 (non-Bold), U+436, U+447 (non-Bold), + U+44F, U+437 (Bold), corrected U+40F, U+414, U+424, U+426, U+429, + U+434, U+438 (Bold), U+446, U+449, U+44D (non-Bold), U+45F in + Sans Mono (by Andrey V. Panov) +- made small corrections to Cyrillic, most appreciable to U+409, + U+413, U+41B, U+427 and U+433, U+434, U+43B, U+447, U+459 + (upright fonts) to Serif (by Andrey V. Panov) +- adjusted bearings of U+410, U+416, U+41A, U+42F, U+436, U+43A, + U+443, U+44F in Serif (by Andrey V. Panov) +- enlarged width of U+44A, U+44B, U+44C, U+463 in Serif + (by Andrey V. Panov) +- added ligature "iacute" as "afii10103" (U+456) "acutecomb" in + Serif (by Andrey V. Panov) +- made italic shape to U+446, U+448, U+449 in Serif (by Andrey V. + Panov) +- added "afii10831" (U+F6C7), "afii10832" (U+F6C8) in Serif (by + Andrey V. Panov) +- new minimum version of fontforge is 20061014 (by Ben Laenen) + +Changes from 2.9 to 2.10: + +- added U+0242, U+024A-U+024B, U+024E-U+024F, U+037C-U+037D, U+0E3F, + U+1D2C-U+1D2E, U+1D30-U+1D42, U+1D5D-U+1D6A, U+1D78, U+1DB8, + U+2090-U+2094, U+20D0-U+20D1, U+2C60-U+2C66, U+2C6B-U+2C6C, U+2C74 and + U+FB29 to Sans (by Gee Fung Sit) +- added Lao glyphs : U+0E81-0E82, U+E084, U+0E87-0E88, U+0E8A, U+0E8D, + U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA-0EAB, + U+0EAD-0EB9, U+0EBB-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECD, U+0EDC-0EDD + (by Remy Oudompheng) +- fixed U+0193 not showing in Windows (bug #7897) (by Ben Laenen) +- changes to U+222B-222D in Sans Mono (by Remy Oudompheng) +- ported the three remaining currency symbols from Arev (U+20B0, + U+20B2-U+20B3), and replaced one (U+20AF) in Sans (by Lars Naesbye + Christensen) +- corrected U+20A5 in Sans (by Gee Fung Sit) +- merged Double-Struck Letters from Arev: U+2102, U+210D, U+2115, + U+2119-U+211A, U+2124, U+213C-U+2140 (by Gee Fung Sit) +- added U+2308-U+230B and U+2329-U+232A to Sans Mono and Serif faces, + fixed incorrect direction of U+2329 in Sans faces, and improved + U+2308-U+230B in Sans faces per Ben Laenen's suggestions (by David + Lawrence Ramsey) +- added U+06D5 and final form of it (needed for Kurdish) (by Ben Laenen) +- added two special glyphs U+F000 and U+F001 in Sans Book that show the + current ppem size (horizontal and vertical) (by Ben Laenen) +- added U+2318 and U+2325 to Sans Mono faces, based on the Sans versions + (by David Lawrence Ramsey) +- added U+2B14-U+2B1A to all faces except Sans ExtraLight (by David + Lawrence Ramsey) +- respaced all Geometric Shapes characters in Serif faces to match those + in Sans faces again, respaced U+23CF in Sans, Sans ExtraLight, and + Serif faces to match U+25A0 (or Sans in Sans ExtraLight's case) again, + and respaced U+2B12-U+2B13 in Sans and Serif faces to match U+25A1 + again (by David Lawrence Ramsey) +- corrected width of Modifier Small Letters U+1D43-1D5B in Sans Oblique + and U+1D9B-U+1DBF in Sans Oblique and Sans Bold Oblique (by Gee Fung Sit) +- added a bunch of glyphs to Sans ExtraLight (see SVN for details) (by + Gee Fung Sit) +- adjusted Cyrillic descenders in Sans ExtraLight to sync with Sans (by + Gee Fung Sit) +- added U+0242, U+0245 to Serif (by Gee Fung Sit) +- replaced the SHPIX routines which gave them bad spacing at certain + sizes in FreeType for A, V, Z, v and z in Sans Bold (by Ben Laenen) + +Changes from 2.8 to 2.9: + +- DejaVuSansExtraLight.sfd: changed family name from "DejaVu Sans" to + "DejaVu Sans Light" (in case we add a Light weight variant), so legacy + apps that understand only 4 styles are happy. (by Denis Jacquerye) +- added Name ID 16, aka preferred family name, and Name ID 17, aka + preferred style name, so contemporary apps that understand more that 4 + styles can use big fonts families "DejaVu Sans" and "DejaVu Serif". For + those, Extralight and Condensed are just styles not different families. + (by Denis Jacquerye) +- added U+22B6-22BD, U+22C0-22C1, U+22D6-22D7 to Sans. (by Remy Oudompheng) +- added U+037B, U+2184, U+2C67-U+2C6A and U+2C75-U+2C77 to Sans (by Gee + Fung Sit) +- adjusted asteriskmath (U+2217) for consistency with other mathematical + operators in Sans (by Ben Laenen) +- hinted some Armenian capitals in Sans Book (by Ben Laenen) +- added U+0246 - U+0249 (by Ben Laenen) +- BUGFIX : swapped U+224E and U+224F, in Sans, Sans Condensed and Sans Mono + (by Remy Oudompheng) +- adjusted U+20B5 (by Mederic Boquien) +- swapped U+21DA and U+21DB which were in wrong order (by Heikki Lindroos) +- added U+222E-2233, U+239B-23AD, U+2A00-2A02, U+2A0F-2A1C to Sans (by Remy + Oudompheng) +- added U+239B-23AD to Mono (by Remy Oudompheng) +- added U+2024-2025 to Serif (by Mederic Boquien) +- added U+222C-222D, U+2A0C-2A0E to Serif (by Remy Oudompheng) +- added U+2190-21FF to Mono (by Heikki Lindroos) +- added Hebrew glyphs - U+05B0-U+05BD, U+05BF-U+05C3, U+05C6, U+05C7, + U+05D0-U+05EA, U+05F0-U+05F2, U+FB1F, U+FB20, U+FB2A-U+FB36, + U+FB38-U+FB3C, U+FB3E, U+FB40, U+FB41, U+FB43, U+FB44, U+FB46-U+FB4E (by + Gee Fung Sit and Eugeniy Meshcheryakov) +- adjustments for Cyrillic in Sans (by Andrey V. Panov) +- made italic shape for U+0434, U+0456, U+0457 in SerifOblique and Serif + Bold Oblique (by Andrey V. Panov) + +Changes from 2.7 to 2.8: + +- fixed instructions for U+0423, U+0427, U+0447, U+0448 in Serif, so they + look good at large sizes too (by Eugeniy Meshcheryakov) +- added U+FB00 and U+FB03 to U+FB06 to Serif typefaces (by Heikki Lindroos) +- added U+26B0-U+26B1, U+2701-U+2704, U+2706-U+2709, U+270C-U+2727, U+2729 + to U+274B, U+274D, U+274F to U+2752, U+2756, U+2758-U+275E, U+2761 to + U+2775 (by Heikki Lindroos) +- added and improved instructions for Cyrillic letters in Mono and Serif + (Book, by Eugeniy Meshcheryakov) +- rotated U+26B0 (was too small in mono) (by Gee Fung Sit) +- adjusted U+1EDA-U+1EDD, U+1EE8-U+1EEB, capitals using capital specific + accent and moved diacritics to match position on U+00F2 (ograve), etc. + (by Denis Jacquerye) +- added U+20D6, U+20D7 to Sans (by Gee Fung Sit) +- made Armenian ligatures discretionary since the Firefox ligature problem + still isn't fixed (by Ben Laenen) +- moved Armenian hyphen U+058A to a higher position (bug #7436) (by Ben + Laenen) +- hinted Greek glyphs in Sans Bold (by Ben Laenen) +- enabled Arabic lam-alif ligatures when diacritics are used (by Ben Laenen) + +Changes from 2.6 to 2.7: + +- added glyphs needed for Kurdish: U+0695, U+06B5, U+06C6, U+06CE and their + init/medi/fina forms in Sans (by Ben Laenen) +- added U+02CD, U+01F8 - U+01F9, U+1E3E - U+1E3F, U+1E30 - U+1E35, U+1EBC - + U+1EBD, U+1EF8 - U+1EF9 (includes glyphs needed for Yoruba, Maori, Guarani + and Twi) (by Ben Laenen) +- added U+22C8-22CC, U+29CE-29D5, U+2A7D-2AA0, U+2AAE-2ABA, U+2AF9-2AFA to + Sans (by Remy Oudompheng) +- adjusted diacritics on Vietnamese, Pinyin and other characters: + U+01A0-U+01A1, U+01AF-U+01B0, U+01D5-U+01DC, U+01DE-01E1, U+01FA-U+01FB + U+022A-U+022D, U+0230-U+0231, U+1E14-U+1E17, U+1E4C-U+1E53, U+1E78-U+1E7B, + U+1EA4-U+1EF1 in Sans (Book, Bold and Oblique) (by Denis Jacquerye) +- added basic arrows U+2190-U+2193 in Serif, which completes MES-1 compliance + for Serif (by Ben Laenen) +- added U+01E4, U+01E5, U+01FA, U+01FB, U+02BD, U+02C9 and U+02EE to Serif + (by Ben Laenen) +- fixed U+0209 in Serif Bold Oblique (by Ben Laenen) +- adjusted Box Drawing block characters U+2500-257F in Mono to fit character + cell, shifting them up by 416 (Denis Jacquerye) +- redid U+0194 in Sans (by Ben Laenen) +- added U+2217-2218, U+2295-22A1 to Mono (by Remy Oudompheng) +- added U+0462 to Serif (by Andrey V. Panov) +- added U+226C, U+228C-228E, U+2293-2294, U+22F2-22FF to Sans (by Remy + Oudompheng) +- adjusted U+2208-220D in Sans (by Remy Oudompheng) +- improved some Cyrillic glyphs in Mono (by Andrey V. Panov), rewritten + instructions for changed glyphs (by Eugeniy Meshcheryakov) +- added U+1E0E-1E0F, U+1E8E-1E8F to Mono fonts (by Denis Jacquerye). (bug + #7166) +- renamed 'Dotabove' to 'Dotaccent' in Mono Sans Oblique to match other fonts + (by Denis Jacquerye). +- added U+200B-U+200F in Sans faces and Serif faces, U+200B and U+200C were + in Sans already (by Lars Naesbye Christensen) +- added U+2601-U+262F, U+263D, U+263E, U+2648-U+265F, U+2668, U+2670-U+268B, + U+2690-U+269C, U+26A0, U+26A1, U+2794, U+2798-U+27AF, U+27B1-U+27BE to Mono + (by Heikki Lindroos) +- replaced the references with unshifted ones for both κ U+03BA and к U+043A + in Mono Book (by Denis Jacquerye) +- fixing glyph for U+04ED in Mono Book, consisted only of dieresis (by Andrey + V. Panov). + +Changes from 2.5 to 2.6: + +- redid U+2032 - U+2037, U+2057 based on Arev in Sans (by Gee Fung Sit) +- added U+0195, corrected U+039E, U+204B in Sans ExtraLight (by Gee Fung Sit) +- added instructions for some Cyrillic letters in Sans Bold (by Eugeniy + Meshcheryakov) +- added vulgar fractions U+2153-U+215F for Serif, made with references (by + Lars Naesbye Christensen) +- added U+228F-2292, U+2299-22AF, U+22B2-22B5, U+22CD, U+22D8-22ED to Sans + (by Remy Oudompheng) +- added U+2208-220D, U+2238-223D, U+2278-2281, U+228A-228B, U+228F-2292, + U+22CD, U+22DA-22E9 to Mono (by Remy Oudompheng) +- fixed misplaced dot in U+2250 in Mono (by Remy Oudompheng) +- added instructions for some Cyrillic letters in Mono Book and Bold(by + Eugeniy Meshcheryakov) +- minor changes to U+2241, U+2261-2263, U+22A4, U+22A5 in Sans (by Remy + Oudompheng) +- added hinting instructions to lowercase Armenian glyphs in Sans Book (by + Ben Laenen) +- changed U+2208, U+220B to match U+2209 and U+220C in Sans Bold (by Remy + Oudompheng) +- added Braille patterns U+2800-U+28FF to Sans (by Mederic Boquien) +- added instructions for some Cyrillic letters in Serif Book (by Eugeniy + Meshcheryakov) +- renamed BoldOblique fonts to Bold Oblique in TTF Name as originally in + Bitstream Vera fonts (by Denis Jacquerye) +- added hinting instructions to some Latin-B Extended and IPA characters in + Sans Book (by Denis Jacquerye and Ben Laenen) +- adjusted bearings, replaced diacritics, hinted hook and horn for + Vietnamese in Sans Book (by Denis Jacquerye) +- made FAX, TM, TEL, etc. discritionary ligatures in Sans and Serif fonts + (by Denis Jacquerye) +- removed ligatures of precomposed characters in Sans and Serif fonts (by + Denis Jacquerye) +- added U+F208, U+F20A, U+F215-F217, U+F21A-F21B, U+F25F in PUA (from SIL's + PUA, probably in Unicode 5.0): U+0243, U+0244, U+0245, U+024C, U+024D, + U+2C64, (U+2C6D), (U+2C71) +- modified some glyphs in Serif Oblique to make them more italic (by Denis + Jacquerye) + +Changes from 2.4 to 2.5: + +- fixed excessive kerning bug that occurs with Pango (by Denis Jacquerye) +- added U+20AF to Sans and Serif (by Lars Naesbye Christensen) +- regenerated Condensed faces (by Ben Laenen) +- added U+035C-U+035D to Sans, fixed U+0361 (by Denis Jacquerye) +- integrated 255 characters from Arev fonts: Latin Extended-B, Spacing + Modifiers, Combining Diacritical Marks, Cyrillic, Cyrillic supplement, + General Punctuation, Letterlike Symbols, Arrows, Mathematical Operators, + Miscellaneous Technical, Dingbats, Alphabetic Presentation Forms (by Denis + Jacquerye) +- added basic Cyrillic and basic Greek to Sans ExtraLight (by Denis Jacquerye) +- added U+0498, U+049A, U+04AA, U+04AB, U+04AF to Serif (by Eugeniy + Meshcheryakov) +- added U+0494, U+0495, U+0498, U+0499, U+04AA, U+04AB, U+04C3, U+04C4, + U+04C7, U+04C8 to Mono (by Eugeniy Meshcheryakov) +- adjusted weight of U+0256, U+0257, U+0260, U+0272, U+0273, U+0277, U+029B, + U+02A0 and modifed U+028B and U+027A in Mono (by Denis Jacquerye) +- added U+2000-200A to Mono (by Denis Jacquerye) +- added vulgar fractions U+2153 - U+215F to Mono (by Gee Fung Sit) +- adapted metrics of Arabic glyphs so they stay above cut-off height in Sans + (by Ben Laenen) +- fixed mkmk anchors for Arabic diacritics so they stack properly in Sans (by + Ben Laenen) +- fixed weight of lowercase upsilon in Sans Bold, make small adjustment to + lowercase omega in Sans (by Ben Laenen) +- added U+210E (by Mederic Boquien) +- unslanted U+2201, U+221B and U+221C in Sans Oblique (by Mederic Boquien) +- added several mathematical relation symbols to Sans and Mono (U+2241-224C, + U+2250-2255, U+2260-2269, U+226E-2277, U+2282-2287) modified U+223C to match + other tildes, and U+2282-2284 to have the same shape. (by Remy Oudompheng) +- made U+2234-U+2237 refer to U+2219 instead of U+00B7 in Sans (by Mederic + Boquien) +- added U+2238-223B, U+226A-226B, U+2278-2281, U+2288-228B to Sans (by Remy + Oudompheng) +- unslanted and changed reference of U+22C5 from U+00B7 to U+2219 in Sans (by + Mederic Boquien) +- added U+224D-225F, U+226D, U+22C6 to Sans and unslanted U+2219 in Sans + Oblique. (by Remy Oudompheng) +- added U+224D-225F, U+226D to Mono, shifted U+2266-2269 higher upwards and + unslanted U+2219 in Oblique. (by Remy Oudompheng) +- merged Coptic glyphs from Arev 0.2 (by Lars Naesbye Christensen) +- fixed and adjusted various Cyrillic glyphs in Serif (by Andrey V. Panov) +- made fi, fl... ligatures discretionary ligatures (by Ben Laenen) + +Changes from 2.3 to 2.4: + +- added U+04A2, U+04A3, U+04AC - U+04AF, U+04BA, U+04BB, U+04C0 - + U+04C2, U+04CB, U+04CD, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04E8 - U+04F5, + U+04F6 - U+04F9 to Mono (by Eugeniy Meshcheryakov) +- added U+048C, U+048D, U+0494, U+0495, U+049E - U+04A7, U+04AC - + U+04AE, U+04B4- U+04B7, U+04BA, U+04BB, U+04C0 - U+04C4, U+04C7, U+04C8, + U+04CB, U+04CC, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04EC - U+04F9 to Serif + (by Eugeniy Meshcheryakov) +- added U+2134 to Sans (by Gee Fung Sit) +- added U+2080 - U+2089 to all faces (by Gee Fung Sit) +- several minor corrections to Sans (by Gee Fung Sit) +- major corrections to Sans Condensed (by Gee Fung Sit) +- corrected Superscripts and Subscripts in Sans (by Gee Fung Sit) +- corrected anchors of U+0316-U+0319 (by Denis Jacquerye) +- Verajja integrated (by Stepan Roh) +- copied U+2328, U+2600, U+2639-U+263C, U+263F-U+2647, U+2660-U+2667, + and U+2669-U+266F from Sans to Serif, and copied scaled-down versions of + them to Sans Mono (by David Lawrence Ramsey) +- added U+20B4 to all faces (by Eugeniy Meshcheryakov) +- added more minor positional adjustments to U+2638 in all faces to + match the other miscellaneous symbols in Verajja, and rescale it in Sans + Mono so that it looks better (by David Lawrence Ramsey) +- added U+2242, U+2243 and U+22A4 (by Mederic Boquien) +- corrected U+2245 in Sans (by Mederic Boquien) +- added U+0221, U+0234-0236 (by Denis Jacquerye) +- added in Arabic block to Sans: U+060C, U+0615, U+061B, U+061F, U+0621 +- U+063A, U+0640 - U+0655, U+0660 - U+066F, U+0679 - U+0687, U+0698, U+06A1, + U+06A9, U+06AF, U+06BA, U+06BF, U+06CC, U+06F0 - U+06F9 (by Ben Laenen) +- added in Arabic Presentation Forms A to Sans: U+FB52 - U+FB81, U+FB8A +- U+FB95, U+FB9E - U+FB9F, U+FBE8 - U+FBE9, U+FBFC - U+FBFF (by Ben Laenen) +- added complete Arabic Presentation Forms B to Sans: U+FE70 - U+FE74, + U+FE76 - U+FEFC, U+FEFF (by Ben Laenen) +- added complete Greek Extended block to Mono (by Ben Laenen) +- modified Greek capitals with tonos in Mono (by Ben Laenen) +- added U+01C4-01CC, U+01D5, U+01DE, U+01E0-U+01E1, U+01E6-U+01E9, + U+01EE-U+01F5, U+01F8-U+0217, U+021E-U+021F, U+0226-U+022A, U+022C to Serif + (by Denis Jacquerye) +- adjusted U+043B and U+044F in Serif (by Denis Jacquerye) +- added U+2000-U+200A (by Denis Jacquerye) +- added U+1E00-U+1E0B, U+1E0E-U+1E11, U+1E14-U+1E1C, U+1E1E-U+1E23, + U+1E26-U+1E2D, U+1E30-U+1E35, U+1E3A-U+1E3B, U+1E3E-U+1E40, U+1E48-U+1E49, + U+1E50-U+1E56, U+1E58-U+1E59, U+1E5E-U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, + U+1E72-U+1E7D, U+1E86-U+1E9B, U+1EA0-U+1EA3, U+1EAC-U+1EB7, U+1EBA-U+1EBD, + U+1EC6-U+1ECF, U+1ED8-U+1ED9, U+1EE6-U+1EE7, U+1EF4-U+1EF9 to Serif (by + Denis Jacquerye) +- added U+048E, U+048F, U+049C-U+049F, U+04B8, U+04B9, U+04BC-U+04BF, + U+04C3, U+04C4 to Sans (by Eugeniy Meshcheryakov) +- added DejaVu Sans Extra Light (by Denis Jacquerye) +- Adjusted underline position for (hopefully) improved legibility in + Sans, Serif, Mono (Tim May) +- added auto-generated DejaVu LGC (by Stepan Roh) + +Changes from 2.2 to 2.3: + +- fixed bug U+042B and U+044B behave badly in Sans Bold or Oblique (by + Keenan Pepper) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- added U+04D0-U+04D7, U+04E6, U+04E7 to Mono (by Eugeniy Meshcheryakov) +- added U+048A - U+048D, U+0498, U+0499, U+04AA, U+04AB, U+04B0, U+04B1, + U+04C0, U+04C9, U+04CA, U+04CE, U+04CD, U+04DA, U+04DB, U+04DE, U+04DF, + U+04E2 - U+04E5, U+04EC - U+04F8, U+04F9 to Sans (by Eugeniy Meshcheryakov) +- added U+04E0, U+04E1 to all faces (by Eugeniy Meshcheryakov) +- added Greek Extended to Sans and Serif: U+1F00-U+1F15, U+1F18-U+1F1D, + U+1F20-U+1F45, U+1F48-U+1F4D, U+1F50-U+1F57, U+1F59, U+1F5B, U+1F5D, + U+1F5F-U+1F7D, U+1F80-U+1FB4, U+1FB6-U+1FC4, U+1FC6-U+1FD3, U+1FD6-U+1FDB, + U+1FDD-U+1FEF, U+1FF2-U+1FF4, U+1FF6-U+1FFE (by Ben Laenen) +- added Greek variant letterforms, archaic letters and symbols to Mono: + U+03D0-U+03E1, U+03F0-U+03FF (by Ben Laenen) +- added Armenian block and Armenian ligatures to Sans (U+0531 - U+0556, + U+0559 - U+055F, U+0561 - U+0587, U+0589 - U+058A, U+FB13 - U+FB17) (by Ben + Laenen) +- redid some Greek characters in Sans and Mono to make them look better + and to correct some errors (by Ben Laenen) +- added U+27E0 to all faces (by David Lawrence Ramsey) +- added underscore (U+005F) consistency fixes: extended the Sans Mono + and Sans Mono Oblique underscores to touch both horizontal edges, and + reduced the height of the Sans Bold Oblique underscore to match the Sans + Bold underscore (by David Lawrence Ramsey) +- added underscore (U+005F) derivatives and consistency fixes for them: + made U+0332 a reference to underscore at Denis Jacquerye's suggestion; made + U+0333 two references to underscore; made U+033F two references to U+203E; + added U+2017 as two references to underscore, and made U+0333 a reference to + it; and added U+203E as a reference to underscore, and made U+0305 a + reference to it (by David Lawrence Ramsey) +- added U+201B, U+2220, U+2320-U+2321, U+23AE, U+23CF, all remaining + Geometric Shapes glyphs (U+25A0-U+25C9, U+25CB-U+25D7, U+25D9-U+25E5, + U+25E7-U+25FF), and U+2B12-U+2B13 to all faces (by David Lawrence Ramsey) +- added minor positional adjustments to U+2638 in all faces (by David + Lawrence Ramsey) +- added U+201F to Sans Mono and Serif faces (by David Lawrence Ramsey) +- added U+01B7, U+01F6, U+0464 - U+0465, U+2160 - U+2180, U+2183, + U+220A, U+220D, U+2329, U+232A, U+2422, U+27E8 - U+27EB, U+2680 - U+2685 to + Sans (by Gee Fung Sit ???) +- added U+2116 to Sans and Serif (by Gee Fung Sit) +- changed florin sign U+0192 in Sans (by Gee Fung Sit) +- added anchor points to some glyphs (by Denis Jacquerye) +- adjusted height of IPA superscripts U+02B0-02B8, U+02C0-02C1, + U+02E0-02E4, U+207F to match with height of U+00B2 (by Denis Jacquerye) +- added U+0184-U+0185, U+019C, U+019F, U+01A0-U+01A3, U+01A6, U+01AA, + U+01AF-U+01B0, U+01B2-U+01B4, U+01B7-U+01B8, U+01BC-U+01BC, U+0224-U+0225, + U+023A-U+0240, U+1D16-U+1D17, U+1D1D-U+1D1E, U+1D43-U+1D5B, U+1D7B, + U+1D85,U+1D9B-1DB7, U+1DB9-U+1DBF, U+20A6 to all fonts (by Denis Jacquerye) +- added added U+0182, U+018B, U+018E, U+01A0-U+01A1, U+01B1, U+01B9, + U+01C0-U+01C3, U+0238-U+0239, U+1D02, U+1D08-U+1D09, U+1D14, U+1D1F, U+1D77 + to Serif and Mono (by Denis Jacquerye) +- added U+0181, U+0183, U+0187-U+0188, U+018A-U+018F, U+0191, U+0193, + U+0195-U+019B, U+019D-U+019E, U+01A4-U+01A5, U+01AC-U+01AE, U+01B5-U+01B6, + U+01B9, U+01BB, U+01F6 to Serif (by Denis Jacquerye) +- added U+0181, U+0187-U+0188, U+018A, U+018D, U+018F, U+0191, U+0193, + U+0195-U+019F, U+01A4-01A5, U+01AC-01AD, U+01B5-U+01B6, U+1BB, U+01F6, + U+01D7-U+01DC, U+0238-U+0239, U+0241 to Mono (by Denis Jacquerye) +- added to Mono and Serif (by Denis Jacquerye) + +Changes from 2.1 to 2.2: + +- reworked the vertical orientation of the Blocks Elements characters + in all faces to remove their overly large descenders, in order to fix + problems with e.g. terminal emulators (by David Lawrence Ramsey) +- copied bullet in Sans faces to Serif faces for consistency (by David + Lawrence Ramsey) +- added U+2023, U+25D8, U+25E6, and U+29EB to all faces (by David + Lawrence Ramsey) +- added U+1EB8, U+1EB9, U+1ECA - U+1ECD, U+1EE4, U+1EE5 (by Tim May) +- added U+01DD, U+02BE, U+02BF, U+02D3 to all, changed U+02D2 in + non-Condensed and U+1EE5 in Serif (by Tim May) +- fixed U+01CE, replacing wrong circumflex by caron (by Denis Jacquerye) +- added anchor points to some glyphs (by Denis Jacquerye) +- added U+20B5 (by Denis Jacquerye) +- added U+0181 - U+0183, U+0187, U+0188, U+018A - U+018D, U+0191, + U+0193, U+0195 - U+019B, U+019D, U+019E, U+01A4, U+01A7 - U+01A9, U+01AB - + U+01AE, U+01B1, U+01B5, U+01B6, U+01BB, U+01C0 - U+01C3, U+01F1 - U+01F3, + U+0238, U+0239, U+1D02, U+1D08, U+1D09, U+1D14, U+1D1F, U+1D77, U+2103, + U+2126, U+2127, U+212A, U+212B, U+2132, U+214B, U+2210, U+2217, U+2218, + U+2A0C - U+2A0E, U+FB00, U+FB03 and U+FB04 to Sans (by Gee Fung Sit) +- added U+01A9, U+01C3 and U+2126 to Mono and Serif (by Gee Fung Sit) +- adjusted bearings of U+028B in Sans (by Gee Fung Sit) +- added U+018F, U+0494-U+0497, U+04A0-U+04A7, U+04AC-U+04AF, + U+04B4-U+04B7, U+04BA-U+04BB, U+04C1-U+04C2, U+04C5-U+04C8, U+04CB-U+04CC, + U+04D0-U+04D9, U+04DC-U+04DD, U+04E6-U+04EB to Sans (by Eugeniy + Meshcheryakov) +- replaced with references U+0391-U+0393, U+0395-U+0397, U+0399, U+039A, + U+039C, U+039D, U+039F-U+03A1, U+03A4, U+03A5, U+03A7, U+03BF, U+03DC, + U+0405, U+0406, U+0408, U+0410, U+0412, U+0415, U+0417, U+041A, + U+041C-U+041E, U+0420-U+0422, U+0425, U+0430, U+0435, U+043E, U+0440, + U+0441, U+0443, U+0445, U+0455-U+0458 in Serif and Mono (by Eugeniy + Meshcheryakov) +- added U+04D0-U+04D7, U+04E6-U+04EB to Serif (by Eugeniy Meshcheryakov) +- added U+212A and U+212B to the rest of the faces (by Lars Naesbye + Christensen) +- added U+2318 and U+2325 to Sans and Serif (by Lars Naesbye Christensen) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- completed basic Greek alphabet: added U+0374-U+0375, U+037A, U+037E, + U+0384-U+038A, U+038C, U+038E-U+0390, U+03AC-U+03BF, U+03C1-U+03CE (by Ben + Laenen) +- added U+2070 and U+2074-U+2079 (by Mederic Boquien) + +Changes from 2.0 to 2.1: + +*** Be aware that names of some TTF files changed since version 2.0. *** + +- added U+0323, U+1E0C, U+1E0D, U+1E24, U+1E25, U+1E36 - U+1E39, U+1E42, + U+1E43, U+1E46, U+1E47, U+1E5A - U+1E5D, U+1E62, U+1E63, U+1E6C, U+1E6D, + U+1E7E, U+1E7F (by Tim May) +- fixed bug where GNOME applications used Mono Bold Oblique instead of + Mono Oblique (by Keenan Pepper) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- added U+1E41, U+1E57, U+1E61 (by Sander Vesik) +- added U+0189, U+0309, U+0313, U+0314, U+031A, U+031B, U+0327, U+0328, + U+032B, U+0333, U+033C (by Denis Jacquerye) +- adjusted and fixed U+0186, U+0254, U+0291, U+0316 - U+0319, U+031C - + U+0320, U+0323 - U+0326, U+0329 - U+032A, U+032C - U+0332, U+0339 - U+033B, + U+033E, U+033F (by Denis Jacquerye) +- fixed U+1E12, U+1E3C, U+1E4A, U+1E70 to have normal below diacritics + (by Denis Jacquerye) +- fixed U+1E82, U+1E84 and U+1EF2 to have uppercase above diacritics (by + Denis Jacquerye) +- added anchor points to some glyphs (by Denis Jacquerye) +- dropped "-Roman" from font names - affects both internal TTF names and + names of generated files (by Stepan Roh) +- attempt to fix bug Vertical spacing too big for Mono by exchanging + LineGap and OS2TypoLinegap values (proofed by Stefan Rank) +- added Greek capitals U+0391 - U+03A1, U+03A3 - U+03A9, U+03AA, U+03AB + in Mono (by Ben Laenen) +- added the per ten thousand sign U+2031 (by Mederic Boquien) +- added U+2207, U+221D, U+221F, U+2227 - U+222A, and U+2261 (by David + Lawrence Ramsey) +- new logo (by Gee Fung Sit) +- added U+0180, U+018E, U+201F, U+2024, U+2025, U+203D, U+2200, U+2203, + U+2213, U+222C, U+222D, U+2263 to Sans (by Gee Fung Sit) + +Changes from 1.15 to 2.0: + +- "Italized" basic glyphs in all Serif Oblique and their Condensed faces + (by David Jez) +- added and improved TrueType instructions and related settings (by Keenan + Pepper) +- added anchor points to some glyphs (by Denis Jacquerye) +- many new spacing and combining accents (by Denis Jacquerye) +- smart substitutions for transforming i and j to dottless form and for + using uppercase diacritics (by Denis Jacquerye) +- fixed remaining erroneously slanted characters in Serif Oblique faces (by + David Lawrence Ramsey) +- copied bullet in Sans faces to Sans Oblique faces for consistency (by + David Lawrence Ramsey) +- added U+203C and U+2047-U+2049 (by David Lawrence Ramsey) +- added Greek glyphs to Serif (by Ben Laenen, Condensed merge by David Jez) +- fixed bug LTR glyphs behaving like RTL (by Ben Laenen) +- fixed wrong glyph directions (by David Jez) +- fixed repositioned accents in Condensed faces (by David Jez) + +Changes from 1.14 to 1.15: + +- added and improved TrueType instructions and related settings (by Keenan + Pepper) +- fixed U+2302, U+2319 (by David Lawrence Ramsey) +- fixed yet another monospace bug (by Stepan Roh) +- fixed potential "too big ascender/descender" bug (by Stepan Roh) +- fixed U+026E and U+028E (by Denis Jacquerye) +- added U+0186, U+0190, U+0300 - U+0304, U+0306 - U+0308, U+030A - U+030C, + U+0321, U+0322 (by Denis Jacquerye) +- added rest of Block Elements: U+2591 - U+2593 (by David Lawrence Ramsey) +- added U+2311, U+237D and U+2638 (by David Lawrence Ramsey) +- added U+01CD - U+01D4 (by Denis Jacquerye) +- fixed accents of U+00F2 - U+00F6 by replacing them with references in Mono + Bold (by David Jez) +- added U+0490, U+0491 (by Eugeniy Meshcheryakov) +- added hints to U+0404 and U+0454 in Sans (by Eugeniy Meshcheryakov) +- completed Greek glyphs from U+0370 to U+03CF in Serif (by Ben Laenen) +- fixed shape of U+0255 in Sans Bold and Sans Bold Oblique (by Denis + Jacquerye) + +Changes from 1.13 to 1.14: + +- fixed bug where Mono faces were not recognized as fixed pitch in Windows + by correcting Venda glyphs (by David Jez) +- added and improved TrueType instructions (by Keenan Pepper) +- added 6 Uzbekian glyphs (by Mashrab Kuvatov) +- added Greek glyphs to Sans and Serif, changed pi and omega to fit in (by + Ben Laenen) +- added IPA and related superscript glyphs (by Denis Jacquerye) +- fixed buggy Venda glyphs (by David Lawrence Ramsey and Stepan Roh) +- added U+2302, U+2310, U+2319 (by David Lawrence Ramsey) +- fixed slanted U+00AC in Serif Oblique faces (by David Lawrence Ramsey) +- added 29 glyphs from Block Elements (by David Lawrence Ramsey) + +Changes from 1.12 to 1.13: + +- removed all stems (PS hints) (requested by David Jez) +- added U+01D6, U+01DF, U+022B, U+022D and U+0231 (by Sander Vesik) +- added 10 Venda glyphs (by Dwayne Bailey) +- fixed bug when fonts had no name on Microsoft Windows (by Stepan Roh) +- updated 'missing' glyph U+FFFD (by David Jez) +- set TTF flag fsType to 'Installable Embedding' (= unrestricted usage) + (idea by C. Tiffany) + +Changes from 1.11 to 1.12: + +- added long s (by James Cloos) +- prettier comma accent in gcommaaccent (by David Jez) +- added Hbar, hbar, kgreenlandic, napostrophe, Eng, eng, Tbar, tbar, + afii57929 (by David Jez) +- changed Iogonek, iogonek, IJ, ij to look better (by David Jez) +- glyph uni0237 renamed to dotlessj (requested by David Jez) +- fixed accents for dcaron, lcaron, tcaron, Uogonek, uogonek in Serif (by + David Jez) +- added U+2500 - U+257F box drawing glyphs to Sans Mono (by David Jez) +- fixed accents in Wcircumflex, Ycircumflex and Zdotaccent (by David Jez) +- extra kerning for F (by Sander Vesik) +- added 'missing' glyph U+FFFD (by David Jez) + +Changes from 1.10 to 1.11: + +- kerning updates (by Sander Vesik) +- added Iogonek, iogonek, IJ, ij, Uogonek, uogonek (from SuSE standard fonts + by Adrian Schroeter, SuSE AG) +- added Gcommaaccent, gcommaaccent, Kcommaaccent, kcommaaccent, + Lcommaaccent, lcommaaccent, Ncommaaccent, ncommaaccent, Rcommaaccent, + rcommaaccent (by Stepan Roh) + +Changes from 1.9 to 1.10: + +- added U+022E, U+022F (by Sander Vesik) +- kerning updates for DejaVu Sans (by Sander Vesik) +- fixed too wide cyrillic glyphs in DejaVu Sans Mono (by Valentin Stoykov) +- fixed ligatures bug in Mono (by Stepan Roh) + +Changes from 1.8 to 1.9: + +- integrated Arev Cyrillics (by Danilo Segan) +- added U+01EA, U+01EB, U+01EC, U+01ED (by Sander Vesik) + +Changes from 1.7 to 1.8: + +- fixed accents in Serif Oblique and Serif Bold Oblique (by Stepan Roh) + +Changes from 1.6 to 1.7: + +- added automatically generated Condensed typefaces (by Stepan Roh) + +Changes from 1.5 to 1.6: + +- monospace bug fixed (by Stepan Roh) +- incorrect Bitstream foundry assigned by fontconfig and KDE Font Installer +fixed (by Stepan Roh) +- added automatically generated Oblique version of Serif typefaces (by +Stepan Roh) +- corrected cyrillic D and d (by Danilo Segan and David Jez) +- fixed accents position in Oblique version of Serif typefaces (by Danilo +Segan and Sander Vesik) +- fixed incorrect computation of OS2Win* fields (by Stepan Roh) +- added visiblespace U+2423 (by David Jez) +- fixed 'line height' bug by fixing ascender and descender values (by David +Jez and Stepan Roh) +- fixed part of 'worse than Vera' bug (by Peter Cernak) +- smaller comma accent U+0326 (by David Jez) + +Changes from 1.4 to 1.5: + +- added Cyrillics (96 characters) and Dcroat to the rest of typefaces (by +Danilo Segan) +- fixed bugs in some Cyrillic characters, some of them reported by Sander +Vesik (by Danilo Segan) +- added U+0100, U+0101, U+0112, U+0113, U+012A, U+012B, U+014C, U+014D, +U+016A, U+016B, U+01E2, U+01E3, U+0232 and U+0233 (by Sander Vesik) +- added Romanian characters (by Misu Moldovan) +- added U+0108, U+0109, U+010A, U+010B, U+0114, U+0115, U+0116, U+0117, +U+011C, U+011D, U+0120, U+0121, U+0124, U+0125, U+0128, U+0129, U+012C, +U+012D, U+0134, U+0135, U+014E, U+014F, U+0150, U+0151, U+015C, U+015D, +U+0168, U+0169, U+016C, U+016D, U+0170, U+0171 and U+0237 (by James +Crippen) +- added U+02BB, U+2010, U+2011, U+2012 and U+2015 (by Stepan Roh) + +Changes from 1.3 to 1.4: + +- added Polish characters (Aogonek, aogonek, Eogonek, eogonek, Nacute, +nacute, Sacute, sacute, Zacute, zacute, Zdotaccent, zdotaccent) (by Stepan +Roh) + +Changes from 1.2 to 1.3: + +- added Cyrillics (96 characters) and Dcroat to Sans typefaces (by Danilo +Segan from his BePa fonts) + +Changes from 1.1 to 1.2: + +- added Ldot, ldot, Wcircumflex, wcircumflex, Ycircumflex, ycircumflex, + Wgrave, wgrave, Wacute, wacute, Wdieresis, wdieresis, Ygrave and ygrave + (from The Olwen Font Family 0.2 by Dafydd Harries) + +Changes from 1.0 to 1.1: + +- added Lacute, lacute, Lcaron, lcaron, Racute and racute (by Peter Cernak) + +Changes from 0.9.4 to 1.0: + +- none, just changed version and updated README + +Changes from 0.9.3 to 0.9.4: + +- fixed TTF generation (kerning tables were missing) + +Changes from 0.9.2 to 0.9.3: + +- kerning of added characters +- proper caron shape for dcaron in Mono (by Ondrej Koala Vacha) +- minor visual changes + +Changes from 0.9.1 to 0.9.2: + +- internal bugged version + +Changes from 0.9 to 0.9.1: + +- proper caron shape for dcaron and tcaron +- minor visual changes + +$Id: NEWS 2359 2009-08-27 14:13:16Z ben_laenen $ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/README b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/README new file mode 100755 index 00000000..82cf8c91 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/README @@ -0,0 +1,59 @@ +DejaVu fonts 2.30 (c)2004-2009 DejaVu fonts team +------------------------------------------------ + +The DejaVu fonts are a font family based on the Bitstream Vera Fonts +(http://gnome.org/fonts/). Its purpose is to provide a wider range of +characters (see status.txt for more information) while maintaining the +original look and feel. + +DejaVu fonts are based on Bitstream Vera fonts version 1.10. + +Available fonts (Sans = sans serif, Mono = monospaced): + +DejaVu Sans Mono +DejaVu Sans Mono Bold +DejaVu Sans Mono Bold Oblique +DejaVu Sans Mono Oblique +DejaVu Sans +DejaVu Sans Bold +DejaVu Sans Bold Oblique +DejaVu Sans Oblique +DejaVu Sans ExtraLight (experimental) +DejaVu Serif +DejaVu Serif Bold +DejaVu Serif Bold Italic (experimental) +DejaVu Serif Italic (experimental) +DejaVu Sans Condensed (experimental) +DejaVu Sans Condensed Bold (experimental) +DejaVu Sans Condensed Bold Oblique (experimental) +DejaVu Sans Condensed Oblique (experimental) +DejaVu Serif Condensed (experimental) +DejaVu Serif Condensed Bold (experimental) +DejaVu Serif Condensed Bold Italic (experimental) +DejaVu Serif Condensed Italic (experimental) + +All fonts are also available as derivative called DejaVu LGC with support +only for Latin, Greek and Cyrillic scripts. + +For license information see LICENSE. What's new is described in NEWS. Known +bugs are in BUGS. All authors are mentioned in AUTHORS. + +Fonts are published in source form as SFD files (Spline Font Database from +FontForge - http://fontforge.sf.net/) and in compiled form as TTF files +(TrueType fonts). + +For more information go to http://dejavu.sourceforge.net/. + +Characters from Arev fonts, Copyright (c) 2006 by Tavmjong Bah: +--------------------------- +U+01BA, U+01BF, U+01F7, U+021C-U+021D, U+0220, U+0222-U+0223, +U+02B9, U+02BA, U+02BD, U+02C2-U+02C5, U+02d4-U+02D5, +U+02D7, U+02EC-U+02EE, U+0346-U+034E, U+0360, U+0362, +U+03E2-03EF, U+0460-0463, U+0466-U+0486, U+0488-U+0489, U+04A8-U+04A9, +U+0500-U+050F, U+2055-205E, U+20B0, U+20B2-U+20B3, U+2102, U+210D, U+210F, +U+2111, U+2113, U+2115, U+2118-U+211A, U+211C-U+211D, U+2124, U+2135, +U+213C-U+2140, U+2295-U+2298, U+2308-U+230B, U+26A2-U+26B1, U+2701-U+2704, +U+2706-U+2709, U+270C-U+274B, U+2758-U+275A, U+2761-U+2775, U+2780-U+2794, +U+2798-U+27AF, U+27B1-U+27BE, U+FB05-U+FB06 + +$Id: README 2359 2009-08-27 14:13:16Z ben_laenen $ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/langcover.txt b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/langcover.txt new file mode 100755 index 00000000..dd60636b --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/langcover.txt @@ -0,0 +1,242 @@ +This is the language coverage file for DejaVu fonts +($Id$) + + Sans Serif Sans Mono +aa Afar 100% (62/62) 100% (62/62) 100% (62/62) +ab Abkhazia 100% (90/90) 93% (84/90) 84% (76/90) +af Afrikaans 100% (69/69) 100% (69/69) 100% (69/69) +ak Akan 100% (73/73) 100% (73/73) 100% (73/73) +am Amharic (0/264) (0/264) (0/264) +an Aragonese 100% (66/66) 100% (66/66) 100% (66/66) +ar Arabic 100% (125/125) (0/125) 100% (125/125) +as Assamese (0/64) (0/64) (0/64) +ast Asturian/Bable/Leonese/Asturleonese 100% (66/66) 100% (66/66) 100% (66/66) +av Avaric 100% (67/67) 100% (67/67) 100% (67/67) +ay Aymara 100% (60/60) 100% (60/60) 100% (60/60) +az-az Azerbaijani in Azerbaijan 100% (66/66) 100% (66/66) 100% (66/66) +az-ir Azerbaijani in Iran 100% (130/130) (0/130) 100% (130/130) +ba Bashkir 100% (82/82) 100% (82/82) 97% (80/82) +be Byelorussian 100% (68/68) 100% (68/68) 100% (68/68) +ber-dz Berber in Algeria 100% (70/70) 100% (70/70) 100% (70/70) +ber-ma Berber in Morocco 100% (32/32) (0/32) (0/32) +bg Bulgarian 100% (60/60) 100% (60/60) 100% (60/60) +bh Bihari (Devanagari script) (0/68) (0/68) (0/68) +bho Bhojpuri (Devanagari script) (0/68) (0/68) (0/68) +bi Bislama 100% (58/58) 100% (58/58) 100% (58/58) +bin Edo or Bini 100% (78/78) 100% (78/78) 100% (78/78) +bm Bambara 100% (60/60) 100% (60/60) 100% (60/60) +bn Bengali (0/63) (0/63) (0/63) +bo Tibetan (0/95) (0/95) (0/95) +br Breton 100% (64/64) 100% (64/64) 100% (64/64) +bs Bosnian 100% (62/62) 100% (62/62) 100% (62/62) +bua Buriat (Buryat) 100% (70/70) 100% (70/70) 100% (70/70) +byn Blin/Bilin (0/255) (0/255) (0/255) +ca Catalan 100% (74/74) 100% (74/74) 100% (74/74) +ce Chechen 100% (67/67) 100% (67/67) 100% (67/67) +ch Chamorro 100% (58/58) 100% (58/58) 100% (58/58) +chm Mari (Lower Cheremis / Upper Cheremis) 100% (76/76) 100% (76/76) 97% (74/76) +chr Cherokee (0/85) (0/85) (0/85) +co Corsican 100% (84/84) 100% (84/84) 100% (84/84) +crh Crimean Tatar/Crimean Turkish 100% (68/68) 100% (68/68) 100% (68/68) +cs Czech 100% (82/82) 100% (82/82) 100% (82/82) +csb Kashubian 100% (74/74) 100% (74/74) 100% (74/74) +cu Old Church Slavonic 100% (103/103) 86% (89/103) 78% (81/103) +cv Chuvash 100% (74/74) 100% (74/74) 100% (74/74) +cy Welsh 100% (78/78) 100% (78/78) 100% (78/78) +da Danish 100% (70/70) 100% (70/70) 100% (70/70) +de German 100% (59/59) 100% (59/59) 100% (59/59) +dv Divehi/Dhivehi/Maldivian (0/49) (0/49) (0/49) +dz Dzongkha (0/95) (0/95) (0/95) +ee Ewe 100% (99/99) 100% (99/99) 100% (99/99) +el Greek 100% (69/69) 100% (69/69) 100% (69/69) +en English 100% (72/72) 100% (72/72) 100% (72/72) +eo Esperanto 100% (64/64) 100% (64/64) 100% (64/64) +es Spanish 100% (66/66) 100% (66/66) 100% (66/66) +et Estonian 100% (64/64) 100% (64/64) 100% (64/64) +eu Basque 100% (56/56) 100% (56/56) 100% (56/56) +fa Persian 100% (129/129) (0/129) 100% (129/129) +fat Fanti 100% (73/73) 100% (73/73) 100% (73/73) +ff Fulah (Fula) 100% (62/62) 100% (62/62) 100% (62/62) +fi Finnish 100% (62/62) 100% (62/62) 100% (62/62) +fil Filipino 100% (84/84) 100% (84/84) 100% (84/84) +fj Fijian 100% (52/52) 100% (52/52) 100% (52/52) +fo Faroese 100% (68/68) 100% (68/68) 100% (68/68) +fr French 100% (84/84) 100% (84/84) 100% (84/84) +fur Friulian 100% (66/66) 100% (66/66) 100% (66/66) +fy Frisian 100% (75/75) 100% (75/75) 100% (75/75) +ga Irish 100% (80/80) 100% (80/80) 100% (80/80) +gd Scots Gaelic 100% (70/70) 100% (70/70) 100% (70/70) +gez Ethiopic (Geez) (0/218) (0/218) (0/218) +gl Galician 100% (66/66) 100% (66/66) 100% (66/66) +gn Guarani 100% (70/70) 100% (70/70) 100% (70/70) +gu Gujarati (0/68) (0/68) (0/68) +gv Manx Gaelic 100% (54/54) 100% (54/54) 100% (54/54) +ha Hausa 100% (60/60) 100% (60/60) 100% (60/60) +haw Hawaiian 100% (63/63) 100% (63/63) 100% (63/63) +he Hebrew 100% (27/27) (0/27) (0/27) +hi Hindi (Devanagari script) (0/68) (0/68) (0/68) +hne Chhattisgarhi (0/68) (0/68) (0/68) +ho Hiri Motu 100% (52/52) 100% (52/52) 100% (52/52) +hr Croatian 100% (62/62) 100% (62/62) 100% (62/62) +hsb Upper Sorbian 100% (72/72) 100% (72/72) 100% (72/72) +ht Haitian/Haitian Creole 100% (56/56) 100% (56/56) 100% (56/56) +hu Hungarian 100% (70/70) 100% (70/70) 100% (70/70) +hy Armenian 100% (77/77) (0/77) (0/77) +hz Herero 100% (57/57) 100% (57/57) 100% (57/57) +ia Interlingua 100% (52/52) 100% (52/52) 100% (52/52) +id Indonesian 100% (54/54) 100% (54/54) 100% (54/54) +ie Interlingue 100% (52/52) 100% (52/52) 100% (52/52) +ig Igbo 100% (58/58) 100% (58/58) 100% (58/58) +ii Sichuan Yi/Nuosu (0/1165) (0/1165) (0/1165) +ik Inupiaq (Inupiak, Eskimo) 100% (68/68) 100% (68/68) 100% (68/68) +io Ido 100% (52/52) 100% (52/52) 100% (52/52) +is Icelandic 100% (70/70) 100% (70/70) 100% (70/70) +it Italian 100% (72/72) 100% (72/72) 100% (72/72) +iu Inuktitut 100% (161/161) (0/161) (0/161) +ja Japanese (0/6537) (0/6537) (0/6537) +jv Javanese 100% (56/56) 100% (56/56) 100% (56/56) +ka Georgian 100% (33/33) 100% (33/33) 100% (33/33) +kaa Kara-Kalpak (Karakalpak) 100% (78/78) 100% (78/78) 100% (78/78) +kab Kabyle 100% (70/70) 100% (70/70) 100% (70/70) +ki Kikuyu 100% (56/56) 100% (56/56) 100% (56/56) +kj Kuanyama/Kwanyama 100% (52/52) 100% (52/52) 100% (52/52) +kk Kazakh 100% (77/77) 100% (77/77) 100% (77/77) +kl Greenlandic 100% (81/81) 100% (81/81) 100% (81/81) +km Central Khmer (0/63) (0/63) (0/63) +kn Kannada (0/70) (0/70) (0/70) +ko Korean (0/2443) (0/2443) (0/2443) +kok Kokani (Devanagari script) (0/68) (0/68) (0/68) +kr Kanuri 100% (56/56) 96% (54/56) 100% (56/56) +ks Kashmiri 94% (137/145) (0/145) 97% (141/145) +ku-am Kurdish in Armenia 100% (64/64) 100% (64/64) 100% (64/64) +ku-iq Kurdish in Iraq 100% (32/32) (0/32) 87% (28/32) +ku-ir Kurdish in Iran 100% (32/32) (0/32) 87% (28/32) +ku-tr Kurdish in Turkey 100% (62/62) 100% (62/62) 100% (62/62) +kum Kumyk 100% (66/66) 100% (66/66) 100% (66/66) +kv Komi (Komi-Permyak/Komi-Siryan) 100% (70/70) 100% (70/70) 100% (70/70) +kw Cornish 100% (64/64) 100% (64/64) 100% (64/64) +kwm Kwambi 100% (52/52) 100% (52/52) 100% (52/52) +ky Kirgiz 100% (70/70) 100% (70/70) 100% (70/70) +la Latin 100% (68/68) 100% (68/68) 100% (68/68) +lah Lahnda 94% (137/145) (0/145) 97% (141/145) +lb Luxembourgish (Letzeburgesch) 100% (75/75) 100% (75/75) 100% (75/75) +lez Lezghian (Lezgian) 100% (67/67) 100% (67/67) 100% (67/67) +lg Ganda 100% (54/54) 100% (54/54) 100% (54/54) +li Limburgan/Limburger/Limburgish 100% (62/62) 100% (62/62) 100% (62/62) +ln Lingala 100% (81/81) 100% (81/81) 100% (81/81) +lo Lao 100% (55/55) (0/55) 83% (46/55) +lt Lithuanian 100% (70/70) 100% (70/70) 100% (70/70) +lv Latvian 100% (78/78) 100% (78/78) 100% (78/78) +mai Maithili (Devanagari script) (0/68) (0/68) (0/68) +mg Malagasy 100% (56/56) 100% (56/56) 100% (56/56) +mh Marshallese 100% (62/62) 100% (62/62) 100% (62/62) +mi Maori 100% (64/64) 100% (64/64) 100% (64/64) +mk Macedonian 100% (42/42) 100% (42/42) 100% (42/42) +ml Malayalam (0/68) (0/68) (0/68) +mn-cn Mongolian in China (0/130) (0/130) (0/130) +mn-mn Mongolian in Mongolia 100% (70/70) 100% (70/70) 100% (70/70) +mo Moldavian 100% (128/128) 100% (128/128) 100% (128/128) +mr Marathi (Devanagari script) (0/68) (0/68) (0/68) +ms Malay 100% (52/52) 100% (52/52) 100% (52/52) +mt Maltese 100% (72/72) 100% (72/72) 100% (72/72) +my Burmese (Myanmar) (0/48) (0/48) (0/48) +na Nauru 100% (60/60) 100% (60/60) 100% (60/60) +nb Norwegian Bokmal 100% (70/70) 100% (70/70) 100% (70/70) +nds Low Saxon 100% (59/59) 100% (59/59) 100% (59/59) +ne Nepali (Devanagari script) (0/68) (0/68) (0/68) +ng Ndonga 100% (52/52) 100% (52/52) 100% (52/52) +nl Dutch 100% (82/82) 100% (82/82) 100% (82/82) +nn Norwegian Nynorsk 100% (76/76) 100% (76/76) 100% (76/76) +no Norwegian (Bokmal) 100% (70/70) 100% (70/70) 100% (70/70) +nr Ndebele, South 100% (52/52) 100% (52/52) 100% (52/52) +nso Northern Sotho 100% (58/58) 100% (58/58) 100% (58/58) +nv Navajo/Navaho 100% (72/72) 100% (72/72) 100% (72/72) +ny Chichewa 100% (54/54) 100% (54/54) 100% (54/54) +oc Occitan 100% (70/70) 100% (70/70) 100% (70/70) +om Oromo or Galla 100% (52/52) 100% (52/52) 100% (52/52) +or Oriya (0/68) (0/68) (0/68) +os Ossetic 100% (66/66) 100% (66/66) 100% (66/66) +ota Ottoman Turkish 97% (36/37) (0/37) 97% (36/37) +pa Panjabi/Punjabi (0/63) (0/63) (0/63) +pa-pk Panjabi/Punjabi in Pakistan 94% (137/145) (0/145) 97% (141/145) +pap-an Papiamento in Netherlands Antilles 100% (72/72) 100% (72/72) 100% (72/72) +pap-aw Papiamento in Aruba 100% (54/54) 100% (54/54) 100% (54/54) +pl Polish 100% (70/70) 100% (70/70) 100% (70/70) +ps-af Pashto in Afghanistan 83% (41/49) (0/49) 77% (38/49) +ps-pk Pashto in Pakistan 81% (40/49) (0/49) 75% (37/49) +pt Portuguese 100% (82/82) 100% (82/82) 100% (82/82) +qu Quechua 100% (55/55) 100% (55/55) 100% (55/55) +rm Rhaeto-Romance (Romansch) 100% (66/66) 100% (66/66) 100% (66/66) +rn Rundi 100% (52/52) 100% (52/52) 100% (52/52) +ro Romanian 100% (62/62) 100% (62/62) 100% (62/62) +ru Russian 100% (66/66) 100% (66/66) 100% (66/66) +rw Kinyarwanda 100% (52/52) 100% (52/52) 100% (52/52) +sa Sanskrit (Devanagari script) (0/68) (0/68) (0/68) +sah Yakut 100% (76/76) 100% (76/76) 97% (74/76) +sc Sardinian 100% (62/62) 100% (62/62) 100% (62/62) +sco Scots 100% (56/56) 100% (56/56) 100% (56/56) +sd Sindhi 81% (44/54) (0/54) 79% (43/54) +se North Sami 100% (66/66) 100% (66/66) 100% (66/66) +sel Selkup (Ostyak-Samoyed) 100% (66/66) 100% (66/66) 100% (66/66) +sg Sango 100% (72/72) 100% (72/72) 100% (72/72) +sh Serbo-Croatian 100% (156/156) 100% (156/156) 98% (154/156) +shs Secwepemctsin 100% (48/48) 100% (48/48) 100% (48/48) +si Sinhala/Sinhalese (0/73) (0/73) (0/73) +sid Sidamo (0/281) (0/281) (0/281) +sk Slovak 100% (86/86) 100% (86/86) 100% (86/86) +sl Slovenian 100% (62/62) 100% (62/62) 100% (62/62) +sm Samoan 100% (53/53) 100% (53/53) 100% (53/53) +sma South Sami 100% (60/60) 100% (60/60) 100% (60/60) +smj Lule Sami 100% (60/60) 100% (60/60) 100% (60/60) +smn Inari Sami 100% (68/68) 100% (68/68) 100% (68/68) +sms Skolt Sami 100% (80/80) 100% (80/80) 97% (78/80) +sn Shona 100% (52/52) 100% (52/52) 100% (52/52) +so Somali 100% (52/52) 100% (52/52) 100% (52/52) +sq Albanian 100% (56/56) 100% (56/56) 100% (56/56) +sr Serbian 100% (60/60) 100% (60/60) 100% (60/60) +ss Swati 100% (52/52) 100% (52/52) 100% (52/52) +st Sotho, Southern 100% (52/52) 100% (52/52) 100% (52/52) +su Sundanese 100% (54/54) 100% (54/54) 100% (54/54) +sv Swedish 100% (68/68) 100% (68/68) 100% (68/68) +sw Swahili 100% (52/52) 100% (52/52) 100% (52/52) +syr Syriac (0/45) (0/45) (0/45) +ta Tamil (0/48) (0/48) (0/48) +te Telugu (0/70) (0/70) (0/70) +tg Tajik 100% (78/78) 100% (78/78) 97% (76/78) +th Thai 1% (1/74) (0/74) (0/74) +ti-er Eritrean Tigrinya (0/255) (0/255) (0/255) +ti-et Ethiopian Tigrinya (0/281) (0/281) (0/281) +tig Tigre (0/221) (0/221) (0/221) +tk Turkmen 100% (68/68) 100% (68/68) 100% (68/68) +tl Tagalog 100% (84/84) 100% (84/84) 100% (84/84) +tn Tswana 100% (58/58) 100% (58/58) 100% (58/58) +to Tonga 100% (53/53) 100% (53/53) 100% (53/53) +tr Turkish 100% (70/70) 100% (70/70) 100% (70/70) +ts Tsonga 100% (52/52) 100% (52/52) 100% (52/52) +tt Tatar 100% (76/76) 100% (76/76) 100% (76/76) +tw Twi 100% (73/73) 100% (73/73) 100% (73/73) +ty Tahitian 100% (65/65) 100% (65/65) 100% (65/65) +tyv Tuvinian 100% (70/70) 100% (70/70) 100% (70/70) +ug Uighur 100% (125/125) (0/125) 100% (125/125) +uk Ukrainian 100% (72/72) 100% (72/72) 100% (72/72) +ur Urdu 94% (137/145) (0/145) 97% (141/145) +uz Uzbek 100% (52/52) 100% (52/52) 100% (52/52) +ve Venda 100% (62/62) 100% (62/62) 100% (62/62) +vi Vietnamese 100% (194/194) 77% (150/194) 76% (148/194) +vo Volapuk 100% (54/54) 100% (54/54) 100% (54/54) +vot Votic 100% (62/62) 100% (62/62) 100% (62/62) +wa Walloon 100% (70/70) 100% (70/70) 100% (70/70) +wal Wolaitta/Wolaytta (0/281) (0/281) (0/281) +wen Sorbian languages (lower and upper) 100% (76/76) 100% (76/76) 100% (76/76) +wo Wolof 100% (66/66) 100% (66/66) 100% (66/66) +xh Xhosa 100% (52/52) 100% (52/52) 100% (52/52) +yap Yapese 100% (58/58) 100% (58/58) 100% (58/58) +yi Yiddish 100% (27/27) (0/27) (0/27) +yo Yoruba 100% (119/119) 100% (119/119) 100% (119/119) +za Zhuang/Chuang 100% (52/52) 100% (52/52) 100% (52/52) +zh-cn Chinese (simplified) 0% (2/6765) 0% (2/6765) 0% (2/6765) +zh-hk Chinese Hong Kong Supplementary Character Set (0/2213) (0/2213) (0/2213) +zh-mo Chinese in Macau (0/2213) (0/2213) (0/2213) +zh-sg Chinese in Singapore 0% (2/6765) 0% (2/6765) 0% (2/6765) +zh-tw Chinese (traditional) (0/13063) (0/13063) (0/13063) +zu Zulu 100% (52/52) 100% (52/52) 100% (52/52) diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/status.txt b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/status.txt new file mode 100755 index 00000000..89ed39f1 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/status.txt @@ -0,0 +1,6237 @@ +This is the status file for DejaVu fonts +($Id: status.txt 2362 2009-08-27 14:43:39Z ben_laenen $) + +original = present in original Bitstream Vera 1.10 + = added in DejaVu fonts + +U+0020 space original +U+0021 exclam original +U+0022 quotedbl original +U+0023 numbersign original +U+0024 dollar original +U+0025 percent original +U+0026 ampersand original +U+0027 quotesingle original +U+0028 parenleft original +U+0029 parenright original +U+002a asterisk original +U+002b plus original +U+002c comma original +U+002d hyphen original +U+002e period original +U+002f slash original +U+0030 zero original +U+0031 one original +U+0032 two original +U+0033 three original +U+0034 four original +U+0035 five original +U+0036 six original +U+0037 seven original +U+0038 eight original +U+0039 nine original +U+003a colon original +U+003b semicolon original +U+003c less original +U+003d equal original +U+003e greater original +U+003f question original +U+0040 at original +U+0041 A original +U+0042 B original +U+0043 C original +U+0044 D original +U+0045 E original +U+0046 F original +U+0047 G original +U+0048 H original +U+0049 I original +U+004a J original +U+004b K original +U+004c L original +U+004d M original +U+004e N original +U+004f O original +U+0050 P original +U+0051 Q original +U+0052 R original +U+0053 S original +U+0054 T original +U+0055 U original +U+0056 V original +U+0057 W original +U+0058 X original +U+0059 Y original +U+005a Z original +U+005b bracketleft original +U+005c backslash original +U+005d bracketright original +U+005e asciicircum original +U+005f underscore original +U+0060 grave original +U+0061 a original +U+0062 b original +U+0063 c original +U+0064 d original +U+0065 e original +U+0066 f original +U+0067 g original +U+0068 h original +U+0069 i original +U+006a j original +U+006b k original +U+006c l original +U+006d m original +U+006e n original +U+006f o original +U+0070 p original +U+0071 q original +U+0072 r original +U+0073 s original +U+0074 t original +U+0075 u original +U+0076 v original +U+0077 w original +U+0078 x original +U+0079 y original +U+007a z original +U+007b braceleft original +U+007c bar original +U+007d braceright original +U+007e asciitilde original +U+00a0 nonbreakingspace original +U+00a1 exclamdown original +U+00a2 cent original +U+00a3 sterling original +U+00a4 currency original +U+00a5 yen original +U+00a6 brokenbar original +U+00a7 section original +U+00a8 dieresis original +U+00a9 copyright original +U+00aa ordfeminine original +U+00ab guillemotleft original +U+00ac logicalnot original +U+00ad sfthyphen original +U+00ae registered original +U+00af macron original +U+00b0 degree original +U+00b1 plusminus original +U+00b2 twosuperior original +U+00b3 threesuperior original +U+00b4 acute original +U+00b5 mu original +U+00b6 paragraph original +U+00b7 periodcentered original +U+00b8 cedilla original +U+00b9 onesuperior original +U+00ba ordmasculine original +U+00bb guillemotright original +U+00bc onequarter original +U+00bd onehalf original +U+00be threequarters original +U+00bf questiondown original +U+00c0 Agrave original +U+00c1 Aacute original +U+00c2 Acircumflex original +U+00c3 Atilde original +U+00c4 Adieresis original +U+00c5 Aring original +U+00c6 AE original +U+00c7 Ccedilla original +U+00c8 Egrave original +U+00c9 Eacute original +U+00ca Ecircumflex original +U+00cb Edieresis original +U+00cc Igrave original +U+00cd Iacute original +U+00ce Icircumflex original +U+00cf Idieresis original +U+00d0 Eth original +U+00d1 Ntilde original +U+00d2 Ograve original +U+00d3 Oacute original +U+00d4 Ocircumflex original +U+00d5 Otilde original +U+00d6 Odieresis original +U+00d7 multiply original +U+00d8 Oslash original +U+00d9 Ugrave original +U+00da Uacute original +U+00db Ucircumflex original +U+00dc Udieresis original +U+00dd Yacute original +U+00de Thorn original +U+00df germandbls original +U+00e0 agrave original +U+00e1 aacute original +U+00e2 acircumflex original +U+00e3 atilde original +U+00e4 adieresis original +U+00e5 aring original +U+00e6 ae original +U+00e7 ccedilla original +U+00e8 egrave original +U+00e9 eacute original +U+00ea ecircumflex original +U+00eb edieresis original +U+00ec igrave original +U+00ed iacute original +U+00ee icircumflex original +U+00ef idieresis original +U+00f0 eth original +U+00f1 ntilde original +U+00f2 ograve original +U+00f3 oacute original +U+00f4 ocircumflex original +U+00f5 otilde original +U+00f6 odieresis original +U+00f7 divide original +U+00f8 oslash original +U+00f9 ugrave original +U+00fa uacute original +U+00fb ucircumflex original +U+00fc udieresis original +U+00fd yacute original +U+00fe thorn original +U+00ff ydieresis original +U+0100 Amacron 1.5 +U+0101 amacron 1.5 +U+0102 Abreve 1.5 +U+0103 abreve 1.5 +U+0104 Aogonek 1.4 +U+0105 aogonek 1.4 +U+0106 Cacute original +U+0107 cacute original +U+0108 Ccircumflex 1.5 +U+0109 ccircumflex 1.5 +U+010a Cdotaccent 1.5 +U+010b cdotaccent 1.5 +U+010c Ccaron original +U+010d ccaron original +U+010e Dcaron 1.0 +U+010f dcaron 1.0 +U+0110 Dcroat 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0111 dcroat original +U+0112 Emacron 1.5 +U+0113 emacron 1.5 +U+0114 Ebreve 1.5 +U+0115 ebreve 1.5 +U+0116 Edotaccent 1.5 +U+0117 edotaccent 1.5 +U+0118 Eogonek 1.4 +U+0119 eogonek 1.4 +U+011a Ecaron 1.0 +U+011b ecaron 1.0 +U+011c Gcircumflex 1.5 +U+011d gcircumflex 1.5 +U+011e Gbreve original +U+011f gbreve original +U+0120 Gdotaccent 1.5 +U+0121 gdotaccent 1.5 +U+0122 Gcommaaccent 1.11 +U+0123 gcommaaccent 1.11 +U+0124 Hcircumflex 1.5 +U+0125 hcircumflex 1.5 +U+0126 Hbar 1.12 +U+0127 hbar 1.12 +U+0128 Itilde 1.5 +U+0129 itilde 1.5 +U+012a Imacron 1.5 +U+012b imacron 1.5 +U+012c Ibreve 1.5 +U+012d ibreve 1.5 +U+012e Iogonek 1.11 +U+012f iogonek 1.11 +U+0130 Idotaccent original +U+0131 dotlessi original +U+0132 IJ 1.11 +U+0133 ij 1.11 +U+0134 Jcircumflex 1.5 +U+0135 jcircumflex 1.5 +U+0136 Kcommaaccent 1.11 +U+0137 kcommaaccent 1.11 +U+0138 kgreenlandic 1.12 +U+0139 Lacute 1.1 +U+013a lacute 1.1 +U+013b Lcommaaccent 1.11 +U+013c lcommaaccent 1.11 +U+013d Lcaron 1.1 +U+013e lcaron 1.1 +U+013f Ldot 1.2 +U+0140 ldot 1.2 +U+0141 Lslash original +U+0142 lslash original +U+0143 Nacute 1.4 +U+0144 nacute 1.4 +U+0145 Ncommaaccent 1.11 +U+0146 ncommaaccent 1.11 +U+0147 Ncaron 1.0 +U+0148 ncaron 1.0 +U+0149 napostrophe 1.12 +U+014a Eng 1.12 +U+014b eng 1.12 +U+014c Omacron 1.5 +U+014d omacron 1.5 +U+014e Obreve 1.5 +U+014f obreve 1.5 +U+0150 Ohungarumlaut 1.5 +U+0151 ohungarumlaut 1.5 +U+0152 OE original +U+0153 oe original +U+0154 Racute 1.1 +U+0155 racute 1.1 +U+0156 Rcommaaccent 1.11 +U+0157 rcommaaccent 1.11 +U+0158 Rcaron 1.0 +U+0159 rcaron 1.0 +U+015a Sacute 1.4 +U+015b sacute 1.4 +U+015c Scircumflex 1.5 +U+015d scircumflex 1.5 +U+015e Scedilla original +U+015f scedilla original +U+0160 Scaron original +U+0161 scaron original +U+0162 Tcommaaccent 1.5 +U+0163 tcommaaccent 1.5 +U+0164 Tcaron 1.0 +U+0165 tcaron 1.0 +U+0166 Tbar 1.12 +U+0167 tbar 1.12 +U+0168 Utilde 1.5 +U+0169 utilde 1.5 +U+016a Umacron 1.5 +U+016b umacron 1.5 +U+016c Ubreve 1.5 +U+016d ubreve 1.5 +U+016e Uring 1.0 +U+016f uring 1.0 +U+0170 Uhungarumlaut 1.5 +U+0171 uhungarumlaut 1.5 +U+0172 Uogonek 1.11 +U+0173 uogonek 1.11 +U+0174 Wcircumflex 1.2 +U+0175 wcircumflex 1.2 +U+0176 Ycircumflex 1.2 +U+0177 ycircumflex 1.2 +U+0178 Ydieresis original +U+0179 Zacute 1.4 +U+017a zacute 1.4 +U+017b Zdotaccent 1.4 +U+017c zdotaccent 1.4 +U+017d Zcaron original +U+017e zcaron original +U+017f longs 1.12 +U+0180 uni0180 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.12 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0181 uni0181 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0182 uni0182 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0183 uni0183 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0184 uni0184 2.3 +U+0185 uni0185 2.3 +U+0186 uni0186 1.15 +U+0187 uni0187 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0188 uni0188 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0189 uni0189 2.1 +U+018a uni018A 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018b uni018B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018c uni018C 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018d uni018D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018e uni018E 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018f uni018F 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0190 uni0190 1.15 +U+0191 uni0191 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0192 florin original +U+0193 uni0193 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0194 uni0194 1.14 +U+0195 uni0195 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.6 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0196 uni0196 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0197 uni0197 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0198 uni0198 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0199 uni0199 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019a uni019A 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019b uni019B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+019c uni019C 2.3 +U+019d uni019D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019e uni019E 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019f uni019F 2.3 +U+01a0 Ohorn 2.3 +U+01a1 ohorn 2.3 +U+01a2 uni01A2 2.3 +U+01a3 uni01A3 2.3 +U+01a4 uni01A4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a5 uni01A5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a6 uni01A6 2.3 +U+01a7 uni01A7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a8 uni01A8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a9 uni01A9 2.2 +U+01aa uni01AA 2.3 +U+01ab uni01AB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01ac uni01AC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01ad uni01AD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01ae uni01AE 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01af Uhorn 2.3 +U+01b0 uhorn 2.3 +U+01b1 uni01B1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01b2 uni01B2 2.3 +U+01b3 uni01B3 2.3 +U+01b4 uni01B4 2.3 +U+01b5 uni01B5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01b6 uni01B6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01b7 uni01B7 2.3 +U+01b8 uni01B8 2.3 +U+01b9 uni01B9 2.3 +U+01ba uni01BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01bb uni01BB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01bc uni01BC 2.3 +U+01bd uni01BD 2.3 +U+01be uni01BE 2.3 +U+01bf uni01BF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+01c0 uni01C0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01c1 uni01C1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01c2 uni01C2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01c3 uni01C3 2.2 +U+01c4 uni01C4 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c5 uni01C5 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c6 uni01C6 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c7 uni01C7 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c8 uni01C8 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c9 uni01C9 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01ca uni01CA 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01cb uni01CB 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01cc uni01CC 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01cd uni01CD 1.15 +U+01ce uni01CE 1.15 +U+01cf uni01CF 1.15 +U+01d0 uni01D0 1.15 +U+01d1 uni01D1 1.15 +U+01d2 uni01D2 1.15 +U+01d3 uni01D3 1.15 +U+01d4 uni01D4 1.15 +U+01d5 uni01D5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01d6 uni01D6 1.13 +U+01d7 uni01D7 2.3 +U+01d8 uni01D8 2.3 +U+01d9 uni01D9 2.3 +U+01da uni01DA 2.3 +U+01db uni01DB 2.3 +U+01dc uni01DC 2.3 +U+01dd uni01DD 2.2 +U+01de uni01DE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique) 2.23 (Serif Italic Condensed) +U+01df uni01DF 1.13 +U+01e0 uni01E0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e1 uni01E1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e2 uni01E2 1.5 +U+01e3 uni01E3 1.5 +U+01e4 uni01E4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+01e5 uni01E5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+01e6 Gcaron 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e7 gcaron 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e8 uni01E8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e9 uni01E9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01ea uni01EA 1.9 +U+01eb uni01EB 1.9 +U+01ec uni01EC 1.9 +U+01ed uni01ED 1.9 +U+01ee uni01EE 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01ef uni01EF 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f0 uni01F0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono) 2.22 (Sans Mono Bold) 2.23 (Serif Italic Condensed) +U+01f1 uni01F1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01f2 uni01F2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01f3 uni01F3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01f4 uni01F4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f5 uni01F5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f6 uni01F6 2.3 +U+01f7 uni01F7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+01f8 uni01F8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f9 uni01F9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01fa Aringacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01fb aringacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01fc AEacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01fd aeacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01fe Oslashacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01ff oslashacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0200 uni0200 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0201 uni0201 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0202 uni0202 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0203 uni0203 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0204 uni0204 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0205 uni0205 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0206 uni0206 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0207 uni0207 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0208 uni0208 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0209 uni0209 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020a uni020A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020b uni020B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020c uni020C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020d uni020D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020e uni020E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020f uni020F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0210 uni0210 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0211 uni0211 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0212 uni0212 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0213 uni0213 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0214 uni0214 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0215 uni0215 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0216 uni0216 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0217 uni0217 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0218 Scommaaccent 1.5 +U+0219 scommaaccent 1.5 +U+021a uni021A 1.5 +U+021b uni021B 1.5 +U+021c uni021C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+021d uni021D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+021e uni021E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+021f uni021F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0220 uni0220 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.16 (Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.18 (Sans Mono, Sans Mono Bold) 2.23 (Serif Italic Condensed) +U+0221 uni0221 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0222 uni0222 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0223 uni0223 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0224 uni0224 2.3 +U+0225 uni0225 2.3 +U+0226 uni0226 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0227 uni0227 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0228 uni0228 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0229 uni0229 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+022a uni022A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+022b uni022B 1.13 +U+022c uni022C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+022d uni022D 1.13 +U+022e uni022E 1.10 +U+022f uni022F 1.10 +U+0230 uni0230 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0231 uni0231 1.13 +U+0232 uni0232 1.5 +U+0233 uni0233 1.5 +U+0234 uni0234 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0235 uni0235 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0236 uni0236 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0237 dotlessj 1.5 +U+0238 uni0238 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0239 uni0239 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+023a uni023A 2.3 +U+023b uni023B 2.3 +U+023c uni023C 2.3 +U+023d uni023D 2.3 +U+023e uni023E 2.3 +U+023f uni023F 2.3 +U+0240 uni0240 2.3 +U+0241 uni0241 2.3 +U+0242 uni0242 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+0243 uni0243 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0244 uni0244 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0245 uni0245 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0246 uni0246 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0247 uni0247 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0248 uni0248 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0249 uni0249 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+024a uni024A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+024b uni024B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans ExtraLight) +U+024c uni024C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+024d uni024D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+024e uni024E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+024f uni024F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0250 uni0250 1.14 +U+0251 uni0251 1.14 +U+0252 uni0252 1.14 +U+0253 uni0253 1.14 +U+0254 uni0254 1.14 +U+0255 uni0255 1.14 +U+0256 uni0256 1.14 +U+0257 uni0257 1.14 +U+0258 uni0258 1.14 +U+0259 uni0259 1.14 +U+025a uni025A 1.14 +U+025b uni025B 1.14 +U+025c uni025C 1.14 +U+025d uni025D 1.14 +U+025e uni025E 1.14 +U+025f uni025F 1.14 +U+0260 uni0260 1.14 +U+0261 uni0261 1.14 +U+0262 uni0262 1.14 +U+0263 uni0263 1.14 +U+0264 uni0264 1.14 +U+0265 uni0265 1.14 +U+0266 uni0266 1.14 +U+0267 uni0267 1.14 +U+0268 uni0268 1.14 +U+0269 uni0269 1.14 +U+026a uni026A 1.14 +U+026b uni026B 1.14 +U+026c uni026C 1.14 +U+026d uni026D 1.14 +U+026e uni026E 1.14 +U+026f uni026F 1.14 +U+0270 uni0270 1.14 +U+0271 uni0271 1.14 +U+0272 uni0272 1.14 +U+0273 uni0273 1.14 +U+0274 uni0274 1.14 +U+0275 uni0275 1.14 +U+0276 uni0276 1.14 +U+0277 uni0277 1.14 +U+0278 uni0278 1.14 +U+0279 uni0279 1.14 +U+027a uni027A 1.14 +U+027b uni027B 1.14 +U+027c uni027C 1.14 +U+027d uni027D 1.14 +U+027e uni027E 1.14 +U+027f uni027F 1.14 +U+0280 uni0280 1.14 +U+0281 uni0281 1.14 +U+0282 uni0282 1.14 +U+0283 uni0283 1.14 +U+0284 uni0284 1.14 +U+0285 uni0285 1.14 +U+0286 uni0286 1.14 +U+0287 uni0287 1.14 +U+0288 uni0288 1.14 +U+0289 uni0289 1.14 +U+028a uni028A 1.14 +U+028b uni028B 1.14 +U+028c uni028C 1.14 +U+028d uni028D 1.14 +U+028e uni028E 1.14 +U+028f uni028F 1.14 +U+0290 uni0290 1.14 +U+0291 uni0291 1.14 +U+0292 uni0292 1.14 +U+0293 uni0293 1.14 +U+0294 uni0294 1.14 +U+0295 uni0295 1.14 +U+0296 uni0296 1.14 +U+0297 uni0297 1.14 +U+0298 uni0298 1.14 +U+0299 uni0299 1.14 +U+029a uni029A 1.14 +U+029b uni029B 1.14 +U+029c uni029C 1.14 +U+029d uni029D 1.14 +U+029e uni029E 1.14 +U+029f uni029F 1.14 +U+02a0 uni02A0 1.14 +U+02a1 uni02A1 1.14 +U+02a2 uni02A2 1.14 +U+02a3 uni02A3 1.14 +U+02a4 uni02A4 1.14 +U+02a5 uni02A5 1.14 +U+02a6 uni02A6 1.14 +U+02a7 uni02A7 1.14 +U+02a8 uni02A8 1.14 +U+02a9 uni02A9 1.14 +U+02aa uni02AA 1.14 +U+02ab uni02AB 1.14 +U+02ac uni02AC 1.14 +U+02ad uni02AD 1.14 +U+02ae uni02AE 1.14 +U+02af uni02AF 1.14 +U+02b0 uni02B0 1.14 +U+02b1 uni02B1 1.14 +U+02b2 uni02B2 1.14 +U+02b3 uni02B3 1.14 +U+02b4 uni02B4 1.14 +U+02b5 uni02B5 1.14 +U+02b6 uni02B6 1.14 +U+02b7 uni02B7 1.14 +U+02b8 uni02B8 1.14 +U+02b9 uni02B9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+02ba uni02BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02bb uni02BB 1.5 +U+02bc uni02BC 1.12 +U+02bd uni02BD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+02be uni02BE 2.2 +U+02bf uni02BF 2.2 +U+02c0 uni02C0 1.14 +U+02c1 uni02C1 1.14 +U+02c2 uni02C2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02c3 uni02C3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02c4 uni02C4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02c5 uni02C5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02c6 circumflex original +U+02c7 caron original +U+02c8 uni02C8 2.0 +U+02c9 uni02C9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+02ca uni02CA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+02cb uni02CB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+02cc uni02CC 2.0 +U+02cd uni02CD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02ce uni02CE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+02cf uni02CF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+02d0 uni02D0 1.14 +U+02d1 uni02D1 1.14 +U+02d2 uni02D2 2.0 +U+02d3 uni02D3 2.2 +U+02d4 uni02D4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02d5 uni02D5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02d6 uni02D6 2.0 +U+02d7 uni02D7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02d8 breve original +U+02d9 dotaccent original +U+02da ring original +U+02db ogonek original +U+02dc tilde original +U+02dd hungarumlaut original +U+02de uni02DE 2.0 +U+02df uni02DF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02e0 uni02E0 1.14 +U+02e1 uni02E1 1.14 +U+02e2 uni02E2 1.14 +U+02e3 uni02E3 1.14 +U+02e4 uni02E4 1.14 +U+02e5 uni02E5 2.0 +U+02e6 uni02E6 2.0 +U+02e7 uni02E7 2.0 +U+02e8 uni02E8 2.0 +U+02e9 uni02E9 2.0 +U+02ec uni02EC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02ed uni02ED 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02ee uni02EE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02f3 uni02F3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02f7 uni02F7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+0300 gravecomb 1.15 +U+0301 acutecomb 1.15 +U+0302 uni0302 1.15 +U+0303 tildecomb 1.15 +U+0304 uni0304 1.15 +U+0305 uni0305 2.0 +U+0306 uni0306 1.15 +U+0307 uni0307 1.15 +U+0308 uni0308 1.15 +U+0309 hookabovecomb 2.1 +U+030a uni030A 1.15 +U+030b uni030B 1.15 +U+030c uni030C 1.15 +U+030d uni030D 2.0 +U+030e uni030E 2.0 +U+030f uni030F 2.0 +U+0310 uni0310 2.0 +U+0311 uni0311 2.0 +U+0312 uni0312 1.11 +U+0313 uni0313 2.1 +U+0314 uni0314 2.1 +U+0315 uni0315 2.0 +U+0316 uni0316 2.0 +U+0317 uni0317 2.0 +U+0318 uni0318 2.0 +U+0319 uni0319 2.0 +U+031a uni031A 2.1 +U+031b uni031B 2.1 +U+031c uni031C 2.0 +U+031d uni031D 2.0 +U+031e uni031E 2.0 +U+031f uni031F 2.0 +U+0320 uni0320 2.0 +U+0321 uni0321 1.15 +U+0322 uni0322 1.15 +U+0323 dotbelowcomb 2.1 +U+0324 uni0324 2.0 +U+0325 uni0325 2.0 +U+0326 uni0326 1.5 +U+0327 uni0327 2.1 +U+0328 uni0328 2.1 +U+0329 uni0329 2.0 +U+032a uni032A 2.0 +U+032b uni032B 2.1 +U+032c uni032C 2.0 +U+032d uni032D 2.0 +U+032e uni032E 2.0 +U+032f uni032F 2.0 +U+0330 uni0330 2.0 +U+0331 uni0331 2.0 +U+0332 uni0332 2.0 +U+0333 uni0333 2.1 +U+0334 uni0334 2.3 +U+0335 uni0335 2.3 +U+0336 uni0336 2.3 +U+0337 uni0337 2.3 +U+0338 uni0338 2.3 +U+0339 uni0339 2.0 +U+033a uni033A 2.0 +U+033b uni033B 2.0 +U+033c uni033C 2.1 +U+033d uni033D 2.0 +U+033e uni033E 2.1 +U+033f uni033F 2.1 +U+0340 uni0340 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0341 uni0341 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0342 uni0342 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0343 uni0343 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0344 uni0344 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0345 uni0345 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0346 uni0346 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0347 uni0347 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0348 uni0348 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0349 uni0349 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034a uni034A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034b uni034B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034c uni034C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034d uni034D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034e uni034E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034f uni034F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0351 uni0351 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0352 uni0352 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) 2.28 (Sans Condensed Oblique, Sans Oblique) +U+0353 uni0353 2.5 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0357 uni0357 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0358 uni0358 2.3 +U+035a uni035A 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+035c uni035C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+035d uni035D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+035e uni035E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+035f uni035F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0360 uni0360 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0361 uni0361 2.0 +U+0362 uni0362 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0370 uni0370 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+0371 uni0371 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+0372 uni0372 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+0373 uni0373 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+0374 uni0374 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0375 uni0375 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0376 uni0376 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+0377 uni0377 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+037a uni037A 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+037b uni037B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+037c uni037C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+037d uni037D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+037e uni037E 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0384 tonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0385 dieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0386 Alphatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0387 anoteleia 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0388 Epsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0389 Etatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038a Iotatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038c Omicrontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038e Upsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038f Omegatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0390 iotadieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0391 Alpha 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0392 Beta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0393 Gamma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0394 uni0394 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0395 Epsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0396 Zeta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0397 Eta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0398 Theta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0399 Iota 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039a Kappa 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039b Lambda 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039c Mu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039d Nu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039e Xi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039f Omicron 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a0 Pi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a1 Rho 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a3 Sigma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a4 Tau 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a5 Upsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a6 Phi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a7 Chi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a8 Psi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a9 Omega original +U+03aa Iotadieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ab Upsilondieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ac alphatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ad epsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ae etatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03af iotatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b0 upsilondieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b1 alpha 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b2 beta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b3 gamma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b4 delta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b5 epsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b6 zeta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b7 eta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b8 theta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b9 iota 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ba kappa 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03bb lambda 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03bc uni03BC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03bd nu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03be xi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03bf omicron 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c0 pi original +U+03c1 rho 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c2 sigma1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c3 sigma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c4 tau 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c5 upsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c6 phi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c7 chi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c8 psi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c9 omega 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ca iotadieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cb upsilondieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cc omicrontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cd upsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ce omegatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cf uni03CF 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+03d0 uni03D0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d1 theta1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d2 Upsilon1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d3 uni03D3 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d4 uni03D4 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d5 phi1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.18 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03d6 omega1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03d7 uni03D7 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d8 uni03D8 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03d9 uni03D9 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03da uni03DA 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03db uni03DB 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03dc uni03DC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03dd uni03DD 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03de uni03DE 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03df uni03DF 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03e0 uni03E0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03e1 uni03E1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03e2 uni03E2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e3 uni03E3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e4 uni03E4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e5 uni03E5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e6 uni03E6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e7 uni03E7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e8 uni03E8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e9 uni03E9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ea uni03EA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03eb uni03EB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ec uni03EC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ed uni03ED 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ee uni03EE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ef uni03EF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03f0 uni03F0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03f1 uni03F1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03f2 uni03F2 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f3 uni03F3 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f4 uni03F4 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f5 uni03F5 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f6 uni03F6 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f7 uni03F7 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f8 uni03F8 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f9 uni03F9 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03fa uni03FA 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03fb uni03FB 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03fc uni03FC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03fd uni03FD 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03fe uni03FE 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ff uni03FF 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0400 uni0400 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0401 uni0401 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0402 uni0402 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0403 uni0403 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0404 uni0404 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0405 uni0405 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0406 uni0406 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0407 uni0407 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0408 uni0408 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0409 uni0409 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040a uni040A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040b uni040B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040c uni040C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040d uni040D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040e uni040E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040f uni040F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0410 uni0410 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0411 uni0411 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0412 uni0412 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0413 uni0413 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0414 uni0414 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0415 uni0415 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0416 uni0416 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0417 uni0417 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0418 uni0418 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0419 uni0419 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041a uni041A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041b uni041B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041c uni041C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041d uni041D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041e uni041E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041f uni041F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0420 uni0420 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0421 uni0421 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0422 uni0422 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0423 uni0423 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0424 uni0424 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0425 uni0425 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0426 uni0426 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0427 uni0427 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0428 uni0428 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0429 uni0429 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042a uni042A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042b uni042B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042c uni042C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042d uni042D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042e uni042E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042f uni042F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0430 uni0430 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0431 uni0431 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0432 uni0432 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0433 uni0433 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0434 uni0434 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0435 uni0435 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0436 uni0436 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0437 uni0437 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0438 uni0438 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0439 uni0439 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043a uni043A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043b uni043B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043c uni043C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043d uni043D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043e uni043E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043f uni043F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0440 uni0440 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0441 uni0441 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0442 uni0442 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0443 uni0443 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0444 uni0444 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0445 uni0445 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0446 uni0446 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0447 uni0447 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0448 uni0448 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0449 uni0449 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044a uni044A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044b uni044B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044c uni044C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044d uni044D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044e uni044E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044f uni044F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0450 uni0450 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0451 uni0451 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0452 uni0452 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0453 uni0453 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0454 uni0454 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0455 uni0455 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0456 uni0456 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0457 uni0457 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0458 uni0458 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0459 uni0459 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045a uni045A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045b uni045B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045c uni045C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045d uni045D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045e uni045E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045f uni045F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0460 uni0460 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0461 uni0461 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0462 uni0462 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0463 uni0463 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0464 uni0464 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0465 uni0465 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0466 uni0466 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0467 uni0467 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0468 uni0468 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0469 uni0469 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046a uni046A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.21 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+046b uni046B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.21 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+046c uni046C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046d uni046D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046e uni046E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046f uni046F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0470 uni0470 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+0471 uni0471 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+0472 uni0472 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0473 uni0473 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0474 uni0474 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.12 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0475 uni0475 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.12 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0476 uni0476 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0477 uni0477 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0478 uni0478 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0479 uni0479 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047a uni047A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047b uni047B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047c uni047C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047d uni047D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047e uni047E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047f uni047F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0480 uni0480 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0481 uni0481 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0482 uni0482 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0483 uni0483 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0484 uni0484 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0485 uni0485 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0486 uni0486 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0487 uni0487 2.9 (Sans, Sans Condensed) 2.27 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0488 uni0488 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0489 uni0489 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048a uni048A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048b uni048B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048c uni048C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+048d uni048D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+048e uni048E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048f uni048F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0490 uni0490 1.15 +U+0491 uni0491 1.15 +U+0492 uni0492 1.14 +U+0493 uni0493 1.14 +U+0494 uni0494 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0495 uni0495 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0496 uni0496 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0497 uni0497 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0498 uni0498 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0499 uni0499 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+049a uni049A 1.14 +U+049b uni049B 1.14 +U+049c uni049C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+049d uni049D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+049e uni049E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+049f uni049F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a0 uni04A0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04a1 uni04A1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04a2 uni04A2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a3 uni04A3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a4 uni04A4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04a5 uni04A5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04a6 uni04A6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a7 uni04A7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a8 uni04A8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04a9 uni04A9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04aa uni04AA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ab uni04AB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ac uni04AC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ad uni04AD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ae uni04AE 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04af uni04AF 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04b0 uni04B0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+04b1 uni04B1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+04b2 uni04B2 1.14 +U+04b3 uni04B3 1.14 +U+04b4 uni04B4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04b5 uni04B5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04b6 uni04B6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04b7 uni04B7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04b8 uni04B8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04b9 uni04B9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ba uni04BA 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04bb uni04BB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04bc uni04BC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04bd uni04BD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04be uni04BE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04bf uni04BF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c0 uni04C0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04c1 uni04C1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04c2 uni04C2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04c3 uni04C3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04c4 uni04C4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04c5 uni04C5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c6 uni04C6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c7 uni04C7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04c8 uni04C8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04c9 uni04C9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ca uni04CA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04cb uni04CB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04cc uni04CC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04cd uni04CD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ce uni04CE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04cf uni04CF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04d0 uni04D0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d1 uni04D1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d2 uni04D2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d3 uni04D3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d4 uni04D4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d5 uni04D5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d6 uni04D6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d7 uni04D7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d8 uni04D8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04d9 uni04D9 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04da uni04DA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04db uni04DB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04dc uni04DC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04dd uni04DD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04de uni04DE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04df uni04DF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e0 uni04E0 2.3 +U+04e1 uni04E1 2.3 +U+04e2 uni04E2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e3 uni04E3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e4 uni04E4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e5 uni04E5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e6 uni04E6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04e7 uni04E7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04e8 uni04E8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04e9 uni04E9 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04ea uni04EA 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04eb uni04EB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04ec uni04EC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04ed uni04ED 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04ee uni04EE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04ef uni04EF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f0 uni04F0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f1 uni04F1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f2 uni04F2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f3 uni04F3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f4 uni04F4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f5 uni04F5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f6 uni04F6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f7 uni04F7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f8 uni04F8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f9 uni04F9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04fa uni04FA 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fb uni04FB 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fc uni04FC 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fd uni04FD 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fe uni04FE 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+04ff uni04FF 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0500 uni0500 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0501 uni0501 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0502 uni0502 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0503 uni0503 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0504 uni0504 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0505 uni0505 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0506 uni0506 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0507 uni0507 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0508 uni0508 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0509 uni0509 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050a uni050A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050b uni050B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050c uni050C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050d uni050D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050e uni050E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050f uni050F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0510 uni0510 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+0511 uni0511 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+0512 uni0512 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+0513 uni0513 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+0514 uni0514 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+0515 uni0515 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+0516 uni0516 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0517 uni0517 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0518 uni0518 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0519 uni0519 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+051a uni051A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+051b uni051B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+051c uni051C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+051d uni051D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+0520 uni0520 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0521 uni0521 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0522 uni0522 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0523 uni0523 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0524 uni0524 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0525 uni0525 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0531 uni0531 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0532 uni0532 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0533 uni0533 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0534 uni0534 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0535 uni0535 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0536 uni0536 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0537 uni0537 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0538 uni0538 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0539 uni0539 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053a uni053A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053b uni053B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053c uni053C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053d uni053D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053e uni053E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+053f uni053F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0540 uni0540 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0541 uni0541 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0542 uni0542 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0543 uni0543 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0544 uni0544 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0545 uni0545 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0546 uni0546 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0547 uni0547 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0548 uni0548 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+0549 uni0549 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054a uni054A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054b uni054B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054c uni054C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054d uni054D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+054e uni054E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+054f uni054F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0550 uni0550 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0551 uni0551 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0552 uni0552 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0553 uni0553 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+0554 uni0554 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0555 uni0555 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0556 uni0556 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0559 uni0559 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+055a uni055A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+055b uni055B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+055c uni055C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+055d uni055D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+055e uni055E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+055f uni055F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0561 uni0561 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+0562 uni0562 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0563 uni0563 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0564 uni0564 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0565 uni0565 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0566 uni0566 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0567 uni0567 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0568 uni0568 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0569 uni0569 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+056a uni056A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+056b uni056B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+056c uni056C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+056d uni056D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+056e uni056E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+056f uni056F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0570 uni0570 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0571 uni0571 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0572 uni0572 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0573 uni0573 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0574 uni0574 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0575 uni0575 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0576 uni0576 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0577 uni0577 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0578 uni0578 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0579 uni0579 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+057a uni057A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+057b uni057B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+057c uni057C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+057d uni057D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+057e uni057E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+057f uni057F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0580 uni0580 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0581 uni0581 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0582 uni0582 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0583 uni0583 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0584 uni0584 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0585 uni0585 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+0586 uni0586 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0587 uni0587 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0589 uni0589 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) +U+058a uni058A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b0 uni05B0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b1 uni05B1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b2 uni05B2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b3 uni05B3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b4 uni05B4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b5 uni05B5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b6 uni05B6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b7 uni05B7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b8 uni05B8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b9 uni05B9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05ba uni05BA 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+05bb uni05BB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05bc uni05BC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05bd uni05BD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05be uni05BE 2.9 (Sans Condensed Oblique, Sans Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) +U+05bf uni05BF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c0 uni05C0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c1 uni05C1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c2 uni05C2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c3 uni05C3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c6 uni05C6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c7 uni05C7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d0 uni05D0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d1 uni05D1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d2 uni05D2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d3 uni05D3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d4 uni05D4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d5 uni05D5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d6 uni05D6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d7 uni05D7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d8 uni05D8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d9 uni05D9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05da uni05DA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05db uni05DB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05dc uni05DC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05dd uni05DD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05de uni05DE 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05df uni05DF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e0 uni05E0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e1 uni05E1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e2 uni05E2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e3 uni05E3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e4 uni05E4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e5 uni05E5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e6 uni05E6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e7 uni05E7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e8 uni05E8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e9 uni05E9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05ea uni05EA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f0 uni05F0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f1 uni05F1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f2 uni05F2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f3 uni05F3 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+05f4 uni05F4 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0606 uni0606 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+0607 uni0607 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+0609 uni0609 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+060a uni060A 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+060c uni060C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0615 uni0615 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+061b uni061B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+061f uni061F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0621 uni0621 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0622 uni0622 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0623 uni0623 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0624 uni0624 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0625 uni0625 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0626 uni0626 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0627 uni0627 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0628 uni0628 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0629 uni0629 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062a uni062A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062b uni062B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062c uni062C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062d uni062D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062e uni062E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062f uni062F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0630 uni0630 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0631 uni0631 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0632 uni0632 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0633 uni0633 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0634 uni0634 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0635 uni0635 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0636 uni0636 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0637 uni0637 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0638 uni0638 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0639 uni0639 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+063a uni063A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0640 uni0640 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0641 uni0641 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0642 uni0642 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0643 uni0643 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0644 uni0644 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0645 uni0645 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0646 uni0646 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0647 uni0647 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0648 uni0648 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0649 uni0649 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064a uni064A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064b uni064B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064c uni064C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064d uni064D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064e uni064E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064f uni064F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0650 uni0650 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0651 uni0651 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0652 uni0652 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0653 uni0653 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0654 uni0654 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0655 uni0655 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+065a uni065A 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0660 uni0660 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0661 uni0661 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0662 uni0662 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0663 uni0663 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0664 uni0664 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0665 uni0665 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0666 uni0666 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0667 uni0667 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0668 uni0668 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0669 uni0669 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066a uni066A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066b uni066B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066c uni066C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066d uni066D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066e uni066E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066f uni066F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0674 uni0674 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans ExtraLight) 2.16 (Sans Mono, Sans Mono Bold) +U+0679 uni0679 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067a uni067A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067b uni067B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067c uni067C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067d uni067D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067e uni067E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067f uni067F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0680 uni0680 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0681 uni0681 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0682 uni0682 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0683 uni0683 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0684 uni0684 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0685 uni0685 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0686 uni0686 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0687 uni0687 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0691 uni0691 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0692 uni0692 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0695 uni0695 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0698 uni0698 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06a1 uni06A1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06a4 uni06A4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06a6 uni06A6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a9 uni06A9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06af uni06AF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06b5 uni06B5 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06ba uni06BA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06be uni06BE 2.16 (Sans Mono, Sans Mono Bold) +U+06bf uni06BF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06c6 uni06C6 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06cc uni06CC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06ce uni06CE 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06d5 uni06D5 2.10 (Sans, Sans Bold) 2.11 (Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f0 uni06F0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f1 uni06F1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f2 uni06F2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f3 uni06F3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f4 uni06F4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f5 uni06F5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f6 uni06F6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f7 uni06F7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f8 uni06F8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f9 uni06F9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+07c0 uni07C0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c1 uni07C1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c2 uni07C2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c3 uni07C3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c4 uni07C4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c5 uni07C5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c6 uni07C6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c7 uni07C7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c8 uni07C8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c9 uni07C9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ca uni07CA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cb uni07CB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cc uni07CC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cd uni07CD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ce uni07CE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cf uni07CF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d0 uni07D0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d1 uni07D1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d2 uni07D2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d3 uni07D3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d4 uni07D4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d5 uni07D5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d6 uni07D6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d7 uni07D7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d8 uni07D8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d9 uni07D9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07da uni07DA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07db uni07DB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07dc uni07DC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07dd uni07DD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07de uni07DE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07df uni07DF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e0 uni07E0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e1 uni07E1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e2 uni07E2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e3 uni07E3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e4 uni07E4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e5 uni07E5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e6 uni07E6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e7 uni07E7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07eb uni07EB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ec uni07EC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ed uni07ED 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ee uni07EE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ef uni07EF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f0 uni07F0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f1 uni07F1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f2 uni07F2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f3 uni07F3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f4 uni07F4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f5 uni07F5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f8 uni07F8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f9 uni07F9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07fa uni07FA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0e3f uni0E3F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0e81 uni0E81 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e82 uni0E82 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e84 uni0E84 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e87 uni0E87 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e88 uni0E88 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e8a uni0E8A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e8d uni0E8D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e94 uni0E94 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e95 uni0E95 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e96 uni0E96 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e97 uni0E97 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e99 uni0E99 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9a uni0E9A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9b uni0E9B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9c uni0E9C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9d uni0E9D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9e uni0E9E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9f uni0E9F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea1 uni0EA1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea2 uni0EA2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea3 uni0EA3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea5 uni0EA5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea7 uni0EA7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eaa uni0EAA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eab uni0EAB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ead uni0EAD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eae uni0EAE 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eaf uni0EAF 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb0 uni0EB0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb1 uni0EB1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb2 uni0EB2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb3 uni0EB3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb4 uni0EB4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb5 uni0EB5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb6 uni0EB6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb7 uni0EB7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb8 uni0EB8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb9 uni0EB9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ebb uni0EBB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ebc uni0EBC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ebd uni0EBD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec0 uni0EC0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec1 uni0EC1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec2 uni0EC2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec3 uni0EC3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec4 uni0EC4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec6 uni0EC6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec8 uni0EC8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ec9 uni0EC9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eca uni0ECA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ecb uni0ECB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ecc uni0ECC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ecd uni0ECD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ed0 uni0ED0 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed1 uni0ED1 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed2 uni0ED2 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed3 uni0ED3 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed4 uni0ED4 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed5 uni0ED5 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed6 uni0ED6 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed7 uni0ED7 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed8 uni0ED8 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0ed9 uni0ED9 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0edc uni0EDC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0edd uni0EDD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+10a0 uni10A0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a1 uni10A1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a2 uni10A2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a3 uni10A3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a4 uni10A4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a5 uni10A5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a6 uni10A6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a7 uni10A7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a8 uni10A8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a9 uni10A9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10aa uni10AA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ab uni10AB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ac uni10AC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ad uni10AD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ae uni10AE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10af uni10AF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b0 uni10B0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b1 uni10B1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b2 uni10B2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b3 uni10B3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b4 uni10B4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b5 uni10B5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b6 uni10B6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b7 uni10B7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b8 uni10B8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b9 uni10B9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ba uni10BA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bb uni10BB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bc uni10BC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bd uni10BD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10be uni10BE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bf uni10BF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c0 uni10C0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c1 uni10C1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c2 uni10C2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c3 uni10C3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c4 uni10C4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c5 uni10C5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d0 uni10D0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d1 uni10D1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d2 uni10D2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d3 uni10D3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d4 uni10D4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d5 uni10D5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d6 uni10D6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d7 uni10D7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d8 uni10D8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d9 uni10D9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10da uni10DA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10db uni10DB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10dc uni10DC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10dd uni10DD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10de uni10DE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10df uni10DF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10e0 uni10E0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10e1 uni10E1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10e2 uni10E2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10e3 uni10E3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10e4 uni10E4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10e5 uni10E5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10e6 uni10E6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10e7 uni10E7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10e8 uni10E8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10e9 uni10E9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ea uni10EA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10eb uni10EB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ec uni10EC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ed uni10ED 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ee uni10EE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ef uni10EF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10f0 uni10F0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10f1 uni10F1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10f2 uni10F2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10f3 uni10F3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10f4 uni10F4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10f5 uni10F5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10f6 uni10F6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10f7 uni10F7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10f8 uni10F8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10f9 uni10F9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10fa uni10FA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10fb uni10FB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10fc uni10FC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+1401 uni1401 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1402 uni1402 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1403 uni1403 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1404 uni1404 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1405 uni1405 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1406 uni1406 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1407 uni1407 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1409 uni1409 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140a uni140A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140b uni140B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140c uni140C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140d uni140D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140e uni140E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140f uni140F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1410 uni1410 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1411 uni1411 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1412 uni1412 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1413 uni1413 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1414 uni1414 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1415 uni1415 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1416 uni1416 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1417 uni1417 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1418 uni1418 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1419 uni1419 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141a uni141A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141b uni141B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141d uni141D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141e uni141E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141f uni141F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1420 uni1420 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1421 uni1421 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1422 uni1422 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1423 uni1423 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1424 uni1424 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1425 uni1425 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1426 uni1426 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1427 uni1427 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1428 uni1428 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1429 uni1429 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142a uni142A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142b uni142B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142c uni142C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142d uni142D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142e uni142E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142f uni142F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1430 uni1430 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1431 uni1431 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1432 uni1432 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1433 uni1433 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1434 uni1434 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1435 uni1435 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1437 uni1437 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1438 uni1438 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1439 uni1439 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143a uni143A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143b uni143B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143c uni143C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143d uni143D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143e uni143E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143f uni143F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1440 uni1440 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1441 uni1441 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1442 uni1442 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1443 uni1443 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1444 uni1444 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1445 uni1445 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1446 uni1446 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1447 uni1447 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1448 uni1448 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1449 uni1449 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144a uni144A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144c uni144C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144d uni144D 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144e uni144E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144f uni144F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1450 uni1450 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1451 uni1451 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1452 uni1452 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1454 uni1454 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1455 uni1455 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1456 uni1456 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1457 uni1457 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1458 uni1458 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1459 uni1459 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145a uni145A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145b uni145B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145c uni145C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145d uni145D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145e uni145E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145f uni145F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1460 uni1460 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1461 uni1461 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1462 uni1462 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1463 uni1463 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1464 uni1464 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1465 uni1465 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1466 uni1466 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1467 uni1467 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1468 uni1468 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1469 uni1469 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146a uni146A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146b uni146B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146c uni146C 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146d uni146D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146e uni146E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146f uni146F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1470 uni1470 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1471 uni1471 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1472 uni1472 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1473 uni1473 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1474 uni1474 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1475 uni1475 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1476 uni1476 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1477 uni1477 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1478 uni1478 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1479 uni1479 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147a uni147A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147b uni147B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147c uni147C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147d uni147D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147e uni147E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147f uni147F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1480 uni1480 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1481 uni1481 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1482 uni1482 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1483 uni1483 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1484 uni1484 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1485 uni1485 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1486 uni1486 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1487 uni1487 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1488 uni1488 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1489 uni1489 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148a uni148A 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148b uni148B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148c uni148C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148d uni148D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148e uni148E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148f uni148F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1490 uni1490 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1491 uni1491 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1492 uni1492 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1493 uni1493 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1494 uni1494 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1495 uni1495 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1496 uni1496 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1497 uni1497 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1498 uni1498 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1499 uni1499 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149a uni149A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149b uni149B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149c uni149C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149d uni149D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149e uni149E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149f uni149F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a0 uni14A0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a1 uni14A1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a2 uni14A2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a3 uni14A3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a4 uni14A4 2.13 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.15 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+14a5 uni14A5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a6 uni14A6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a7 uni14A7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a8 uni14A8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a9 uni14A9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14aa uni14AA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ab uni14AB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ac uni14AC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ad uni14AD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ae uni14AE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14af uni14AF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b0 uni14B0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b1 uni14B1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b2 uni14B2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b3 uni14B3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b4 uni14B4 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b5 uni14B5 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b6 uni14B6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b7 uni14B7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b8 uni14B8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b9 uni14B9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ba uni14BA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bb uni14BB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bc uni14BC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bd uni14BD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c0 uni14C0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c1 uni14C1 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c2 uni14C2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c3 uni14C3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c4 uni14C4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c5 uni14C5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c6 uni14C6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c7 uni14C7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c8 uni14C8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c9 uni14C9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ca uni14CA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cb uni14CB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cc uni14CC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cd uni14CD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ce uni14CE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cf uni14CF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d0 uni14D0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d1 uni14D1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d2 uni14D2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d3 uni14D3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d4 uni14D4 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d5 uni14D5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d6 uni14D6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d7 uni14D7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d8 uni14D8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d9 uni14D9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14da uni14DA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14db uni14DB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14dc uni14DC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14dd uni14DD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14de uni14DE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14df uni14DF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e0 uni14E0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e1 uni14E1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e2 uni14E2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e3 uni14E3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e4 uni14E4 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e5 uni14E5 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e6 uni14E6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e7 uni14E7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e8 uni14E8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e9 uni14E9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ea uni14EA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ec uni14EC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ed uni14ED 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ee uni14EE 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ef uni14EF 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f0 uni14F0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f1 uni14F1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f2 uni14F2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f3 uni14F3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f4 uni14F4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f5 uni14F5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f6 uni14F6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f7 uni14F7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f8 uni14F8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f9 uni14F9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fa uni14FA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fb uni14FB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fc uni14FC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fd uni14FD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fe uni14FE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ff uni14FF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1500 uni1500 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1501 uni1501 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1502 uni1502 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1503 uni1503 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1504 uni1504 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1505 uni1505 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1506 uni1506 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1507 uni1507 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1510 uni1510 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1511 uni1511 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1512 uni1512 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1513 uni1513 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1514 uni1514 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1515 uni1515 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1516 uni1516 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1517 uni1517 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1518 uni1518 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1519 uni1519 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151a uni151A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151b uni151B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151c uni151C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151d uni151D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151e uni151E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151f uni151F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1520 uni1520 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1521 uni1521 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1522 uni1522 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1523 uni1523 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1524 uni1524 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1525 uni1525 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1526 uni1526 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1527 uni1527 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1528 uni1528 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1529 uni1529 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152a uni152A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152b uni152B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152c uni152C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152d uni152D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152e uni152E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152f uni152F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1530 uni1530 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1531 uni1531 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1532 uni1532 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1533 uni1533 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1534 uni1534 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1535 uni1535 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1536 uni1536 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1537 uni1537 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1538 uni1538 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1539 uni1539 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153a uni153A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153b uni153B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153c uni153C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153d uni153D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153e uni153E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1540 uni1540 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1541 uni1541 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1542 uni1542 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1543 uni1543 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1544 uni1544 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1545 uni1545 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1546 uni1546 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1547 uni1547 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1548 uni1548 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1549 uni1549 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154a uni154A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154b uni154B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154c uni154C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154d uni154D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154e uni154E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154f uni154F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1550 uni1550 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1552 uni1552 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1553 uni1553 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1554 uni1554 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1555 uni1555 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1556 uni1556 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1557 uni1557 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1558 uni1558 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1559 uni1559 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155a uni155A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155b uni155B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155c uni155C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155d uni155D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155e uni155E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155f uni155F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1560 uni1560 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1561 uni1561 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1562 uni1562 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1563 uni1563 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1564 uni1564 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1565 uni1565 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1566 uni1566 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1567 uni1567 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1568 uni1568 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1569 uni1569 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+156a uni156A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1574 uni1574 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1575 uni1575 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1576 uni1576 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1577 uni1577 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1578 uni1578 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1579 uni1579 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157a uni157A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157b uni157B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157c uni157C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157d uni157D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157e uni157E 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157f uni157F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1580 uni1580 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1581 uni1581 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1582 uni1582 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1583 uni1583 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1584 uni1584 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1585 uni1585 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158a uni158A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158b uni158B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158c uni158C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158d uni158D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158e uni158E 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158f uni158F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1590 uni1590 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1591 uni1591 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1592 uni1592 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1593 uni1593 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1594 uni1594 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1595 uni1595 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1596 uni1596 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a0 uni15A0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a1 uni15A1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a2 uni15A2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a3 uni15A3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a4 uni15A4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a5 uni15A5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a6 uni15A6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a7 uni15A7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a8 uni15A8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a9 uni15A9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15aa uni15AA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ab uni15AB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ac uni15AC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ad uni15AD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ae uni15AE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15af uni15AF 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15de uni15DE 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15e1 uni15E1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1646 uni1646 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1647 uni1647 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+166e uni166E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+166f uni166F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1670 uni1670 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1671 uni1671 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1672 uni1672 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1673 uni1673 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1674 uni1674 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1675 uni1675 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1676 uni1676 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1680 uni1680 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1681 uni1681 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1682 uni1682 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1683 uni1683 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1684 uni1684 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1685 uni1685 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1686 uni1686 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1687 uni1687 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1688 uni1688 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1689 uni1689 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168a uni168A 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168b uni168B 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168c uni168C 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168d uni168D 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168e uni168E 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168f uni168F 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1690 uni1690 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1691 uni1691 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1692 uni1692 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1693 uni1693 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1694 uni1694 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1695 uni1695 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1696 uni1696 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1697 uni1697 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1698 uni1698 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1699 uni1699 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+169a uni169A 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+169b uni169B 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+169c uni169C 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1d00 uni1D00 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d01 uni1D01 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d02 uni1D02 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d03 uni1D03 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d04 uni1D04 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d05 uni1D05 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d06 uni1D06 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d07 uni1D07 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d08 uni1D08 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+1d09 uni1D09 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d0a uni1D0A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d0b uni1D0B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d0c uni1D0C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d0d uni1D0D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d0e uni1D0E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d0f uni1D0F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d10 uni1D10 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d11 uni1D11 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d12 uni1D12 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d13 uni1D13 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d14 uni1D14 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d16 uni1D16 2.3 +U+1d17 uni1D17 2.3 +U+1d18 uni1D18 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d19 uni1D19 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+1d1a uni1D1A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+1d1b uni1D1B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d1c uni1D1C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d1d uni1D1D 2.3 +U+1d1e uni1D1E 2.3 +U+1d1f uni1D1F 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+1d20 uni1D20 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d21 uni1D21 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d22 uni1D22 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d23 uni1D23 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d26 uni1D26 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d27 uni1D27 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d28 uni1D28 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+1d29 uni1D29 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d2a uni1D2A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d2b uni1D2B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+1d2c uni1D2C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d2d uni1D2D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d2e uni1D2E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d30 uni1D30 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d31 uni1D31 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d32 uni1D32 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d33 uni1D33 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d34 uni1D34 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d35 uni1D35 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d36 uni1D36 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d37 uni1D37 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d38 uni1D38 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d39 uni1D39 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3a uni1D3A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3b uni1D3B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3c uni1D3C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3d uni1D3D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono Oblique) +U+1d3e uni1D3E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3f uni1D3F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d40 uni1D40 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d41 uni1D41 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d42 uni1D42 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d43 uni1D43 2.3 +U+1d44 uni1D44 2.3 +U+1d45 uni1D45 2.3 +U+1d46 uni1D46 2.3 +U+1d47 uni1D47 2.3 +U+1d48 uni1D48 2.3 +U+1d49 uni1D49 2.3 +U+1d4a uni1D4A 2.3 +U+1d4b uni1D4B 2.3 +U+1d4c uni1D4C 2.3 +U+1d4d uni1D4D 2.3 +U+1d4e uni1D4E 2.3 +U+1d4f uni1D4F 2.3 +U+1d50 uni1D50 2.3 +U+1d51 uni1D51 2.3 +U+1d52 uni1D52 2.3 +U+1d53 uni1D53 2.3 +U+1d54 uni1D54 2.3 +U+1d55 uni1D55 2.3 +U+1d56 uni1D56 2.3 +U+1d57 uni1D57 2.3 +U+1d58 uni1D58 2.3 +U+1d59 uni1D59 2.3 +U+1d5a uni1D5A 2.3 +U+1d5b uni1D5B 2.3 +U+1d5d uni1D5D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d5e uni1D5E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d5f uni1D5F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d60 uni1D60 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d61 uni1D61 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d62 uni1D62 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d63 uni1D63 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d64 uni1D64 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d65 uni1D65 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d66 uni1D66 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d67 uni1D67 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d68 uni1D68 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d69 uni1D69 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d6a uni1D6A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1d77 uni1D77 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d78 uni1D78 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d7b uni1D7B 2.3 +U+1d85 uni1D85 2.3 +U+1d9b uni1D9B 2.3 +U+1d9c uni1D9C 2.3 +U+1d9d uni1D9D 2.3 +U+1d9e uni1D9E 2.3 +U+1d9f uni1D9F 2.3 +U+1da0 uni1DA0 2.3 +U+1da1 uni1DA1 2.3 +U+1da2 uni1DA2 2.3 +U+1da3 uni1DA3 2.3 +U+1da4 uni1DA4 2.3 +U+1da5 uni1DA5 2.3 +U+1da6 uni1DA6 2.3 +U+1da7 uni1DA7 2.3 +U+1da8 uni1DA8 2.3 +U+1da9 uni1DA9 2.3 +U+1daa uni1DAA 2.3 +U+1dab uni1DAB 2.3 +U+1dac uni1DAC 2.3 +U+1dad uni1DAD 2.3 +U+1dae uni1DAE 2.3 +U+1daf uni1DAF 2.3 +U+1db0 uni1DB0 2.3 +U+1db1 uni1DB1 2.3 +U+1db2 uni1DB2 2.3 +U+1db3 uni1DB3 2.3 +U+1db4 uni1DB4 2.3 +U+1db5 uni1DB5 2.3 +U+1db6 uni1DB6 2.3 +U+1db7 uni1DB7 2.3 +U+1db8 uni1DB8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+1db9 uni1DB9 2.3 +U+1dba uni1DBA 2.3 +U+1dbb uni1DBB 2.3 +U+1dbc uni1DBC 2.3 +U+1dbd uni1DBD 2.3 +U+1dbe uni1DBE 2.3 +U+1dbf uni1DBF 2.3 +U+1dc4 uni1DC4 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+1dc5 uni1DC5 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+1dc6 uni1DC6 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+1dc7 uni1DC7 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+1dc8 uni1DC8 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+1dc9 uni1DC9 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+1e00 uni1E00 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e01 uni1E01 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e02 uni1E02 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e03 uni1E03 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e04 uni1E04 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e05 uni1E05 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e06 uni1E06 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e07 uni1E07 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e08 uni1E08 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e09 uni1E09 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0a uni1E0A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0b uni1E0B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0c uni1E0C 2.1 +U+1e0d uni1E0D 2.1 +U+1e0e uni1E0E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0f uni1E0F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e10 uni1E10 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e11 uni1E11 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e12 uni1E12 1.13 +U+1e13 uni1E13 1.13 +U+1e14 uni1E14 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e15 uni1E15 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e16 uni1E16 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e17 uni1E17 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e18 uni1E18 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e19 uni1E19 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1a uni1E1A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1b uni1E1B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1c uni1E1C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1e1d uni1E1D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1e1e uni1E1E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1f uni1E1F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e20 uni1E20 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e21 uni1E21 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e22 uni1E22 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e23 uni1E23 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e24 uni1E24 2.1 +U+1e25 uni1E25 2.1 +U+1e26 uni1E26 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e27 uni1E27 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e28 uni1E28 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e29 uni1E29 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2a uni1E2A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2b uni1E2B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2c uni1E2C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2d uni1E2D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2e uni1E2E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e2f uni1E2F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e30 uni1E30 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e31 uni1E31 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e32 uni1E32 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e33 uni1E33 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e34 uni1E34 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e35 uni1E35 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e36 uni1E36 2.1 +U+1e37 uni1E37 2.1 +U+1e38 uni1E38 2.1 +U+1e39 uni1E39 2.1 +U+1e3a uni1E3A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e3b uni1E3B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e3c uni1E3C 1.13 +U+1e3d uni1E3D 1.13 +U+1e3e uni1E3E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e3f uni1E3F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e40 uni1E40 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e41 uni1E41 2.1 +U+1e42 uni1E42 2.1 +U+1e43 uni1E43 2.1 +U+1e44 uni1E44 1.13 +U+1e45 uni1E45 1.13 +U+1e46 uni1E46 2.1 +U+1e47 uni1E47 2.1 +U+1e48 uni1E48 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e49 uni1E49 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e4a uni1E4A 1.13 +U+1e4b uni1E4B 1.13 +U+1e4c uni1E4C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+1e4d uni1E4D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+1e4e uni1E4E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e4f uni1E4F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e50 uni1E50 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e51 uni1E51 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e52 uni1E52 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e53 uni1E53 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e54 uni1E54 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e55 uni1E55 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e56 uni1E56 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e57 uni1E57 2.1 +U+1e58 uni1E58 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e59 uni1E59 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e5a uni1E5A 2.1 +U+1e5b uni1E5B 2.1 +U+1e5c uni1E5C 2.1 +U+1e5d uni1E5D 2.1 +U+1e5e uni1E5E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e5f uni1E5F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e60 uni1E60 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e61 uni1E61 2.1 +U+1e62 uni1E62 2.1 +U+1e63 uni1E63 2.1 +U+1e64 uni1E64 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1e65 uni1E65 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+1e66 uni1E66 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e67 uni1E67 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1e68 uni1E68 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e69 uni1E69 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6a uni1E6A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6b uni1E6B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6c uni1E6C 2.1 +U+1e6d uni1E6D 2.1 +U+1e6e uni1E6E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6f uni1E6F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e70 uni1E70 1.13 +U+1e71 uni1E71 1.13 +U+1e72 uni1E72 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e73 uni1E73 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e74 uni1E74 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e75 uni1E75 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e76 uni1E76 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e77 uni1E77 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e78 uni1E78 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e79 uni1E79 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e7a uni1E7A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e7b uni1E7B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e7c uni1E7C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e7d uni1E7D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e7e uni1E7E 2.1 +U+1e7f uni1E7F 2.1 +U+1e80 Wgrave 1.2 +U+1e81 wgrave 1.2 +U+1e82 Wacute 1.2 +U+1e83 wacute 1.2 +U+1e84 Wdieresis 1.2 +U+1e85 wdieresis 1.2 +U+1e86 uni1E86 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e87 uni1E87 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e88 uni1E88 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e89 uni1E89 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8a uni1E8A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8b uni1E8B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8c uni1E8C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e8d uni1E8D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e8e uni1E8E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8f uni1E8F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e90 uni1E90 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e91 uni1E91 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e92 uni1E92 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e93 uni1E93 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e94 uni1E94 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e95 uni1E95 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e96 uni1E96 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e97 uni1E97 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e98 uni1E98 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e99 uni1E99 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e9a uni1E9A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e9b uni1E9B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e9e uni1E9E 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+1e9f uni1E9F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+1ea0 uni1EA0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ea1 uni1EA1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ea2 uni1EA2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ea3 uni1EA3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ea4 uni1EA4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ea5 uni1EA5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ea6 uni1EA6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ea7 uni1EA7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ea8 uni1EA8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ea9 uni1EA9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1eaa uni1EAA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1eab uni1EAB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1eac uni1EAC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ead uni1EAD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eae uni1EAE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eaf uni1EAF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb0 uni1EB0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1eb1 uni1EB1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1eb2 uni1EB2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb3 uni1EB3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb4 uni1EB4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb5 uni1EB5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb6 uni1EB6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eb7 uni1EB7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eb8 uni1EB8 2.2 +U+1eb9 uni1EB9 2.2 +U+1eba uni1EBA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ebb uni1EBB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ebc uni1EBC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ebd uni1EBD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ebe uni1EBE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ebf uni1EBF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec0 uni1EC0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec1 uni1EC1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec2 uni1EC2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec3 uni1EC3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec4 uni1EC4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec5 uni1EC5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ec6 uni1EC6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ec7 uni1EC7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ec8 uni1EC8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ec9 uni1EC9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eca uni1ECA 2.2 +U+1ecb uni1ECB 2.2 +U+1ecc uni1ECC 2.2 +U+1ecd uni1ECD 2.2 +U+1ece uni1ECE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ecf uni1ECF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ed0 uni1ED0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed1 uni1ED1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed2 uni1ED2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed3 uni1ED3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed4 uni1ED4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed5 uni1ED5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed6 uni1ED6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed7 uni1ED7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ed8 uni1ED8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ed9 uni1ED9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eda uni1EDA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1edb uni1EDB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1edc uni1EDC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1edd uni1EDD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ede uni1EDE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1edf uni1EDF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1ee0 uni1EE0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ee1 uni1EE1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ee2 uni1EE2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ee3 uni1EE3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ee4 uni1EE4 2.2 +U+1ee5 uni1EE5 2.2 +U+1ee6 uni1EE6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ee7 uni1EE7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ee8 uni1EE8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ee9 uni1EE9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eea uni1EEA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eeb uni1EEB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eec uni1EEC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1eed uni1EED 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+1eee uni1EEE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eef uni1EEF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ef0 uni1EF0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ef1 uni1EF1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ef2 Ygrave 1.2 +U+1ef3 ygrave 1.2 +U+1ef4 uni1EF4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ef5 uni1EF5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ef6 uni1EF6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ef7 uni1EF7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ef8 uni1EF8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ef9 uni1EF9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f00 uni1F00 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f01 uni1F01 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f02 uni1F02 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f03 uni1F03 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f04 uni1F04 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f05 uni1F05 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f06 uni1F06 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f07 uni1F07 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f08 uni1F08 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f09 uni1F09 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0a uni1F0A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0b uni1F0B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0c uni1F0C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0d uni1F0D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0e uni1F0E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0f uni1F0F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f10 uni1F10 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f11 uni1F11 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f12 uni1F12 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f13 uni1F13 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f14 uni1F14 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f15 uni1F15 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f18 uni1F18 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f19 uni1F19 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1a uni1F1A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1b uni1F1B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1c uni1F1C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1d uni1F1D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f20 uni1F20 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f21 uni1F21 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f22 uni1F22 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f23 uni1F23 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f24 uni1F24 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f25 uni1F25 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f26 uni1F26 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f27 uni1F27 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f28 uni1F28 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f29 uni1F29 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2a uni1F2A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2b uni1F2B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2c uni1F2C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2d uni1F2D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2e uni1F2E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2f uni1F2F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f30 uni1F30 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f31 uni1F31 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f32 uni1F32 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f33 uni1F33 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f34 uni1F34 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f35 uni1F35 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f36 uni1F36 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f37 uni1F37 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f38 uni1F38 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f39 uni1F39 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3a uni1F3A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3b uni1F3B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3c uni1F3C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3d uni1F3D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3e uni1F3E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3f uni1F3F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f40 uni1F40 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f41 uni1F41 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f42 uni1F42 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f43 uni1F43 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f44 uni1F44 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f45 uni1F45 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f48 uni1F48 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f49 uni1F49 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4a uni1F4A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4b uni1F4B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4c uni1F4C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4d uni1F4D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f50 uni1F50 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f51 uni1F51 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f52 uni1F52 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f53 uni1F53 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f54 uni1F54 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f55 uni1F55 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f56 uni1F56 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f57 uni1F57 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f59 uni1F59 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f5b uni1F5B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f5d uni1F5D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f5f uni1F5F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f60 uni1F60 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f61 uni1F61 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f62 uni1F62 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f63 uni1F63 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f64 uni1F64 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f65 uni1F65 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f66 uni1F66 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f67 uni1F67 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f68 uni1F68 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f69 uni1F69 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6a uni1F6A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6b uni1F6B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6c uni1F6C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6d uni1F6D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6e uni1F6E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6f uni1F6F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f70 uni1F70 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f71 uni1F71 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f72 uni1F72 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f73 uni1F73 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f74 uni1F74 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f75 uni1F75 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f76 uni1F76 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f77 uni1F77 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f78 uni1F78 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f79 uni1F79 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f7a uni1F7A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f7b uni1F7B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f7c uni1F7C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f7d uni1F7D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f80 uni1F80 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f81 uni1F81 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f82 uni1F82 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f83 uni1F83 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f84 uni1F84 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f85 uni1F85 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f86 uni1F86 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f87 uni1F87 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f88 uni1F88 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f89 uni1F89 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8a uni1F8A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8b uni1F8B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8c uni1F8C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8d uni1F8D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8e uni1F8E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8f uni1F8F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f90 uni1F90 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f91 uni1F91 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f92 uni1F92 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f93 uni1F93 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f94 uni1F94 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f95 uni1F95 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f96 uni1F96 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f97 uni1F97 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f98 uni1F98 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f99 uni1F99 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9a uni1F9A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9b uni1F9B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9c uni1F9C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9d uni1F9D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9e uni1F9E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9f uni1F9F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa0 uni1FA0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa1 uni1FA1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa2 uni1FA2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa3 uni1FA3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa4 uni1FA4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa5 uni1FA5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa6 uni1FA6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa7 uni1FA7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa8 uni1FA8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa9 uni1FA9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1faa uni1FAA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fab uni1FAB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fac uni1FAC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fad uni1FAD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fae uni1FAE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1faf uni1FAF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb0 uni1FB0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb1 uni1FB1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb2 uni1FB2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb3 uni1FB3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb4 uni1FB4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb6 uni1FB6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb7 uni1FB7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb8 uni1FB8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fb9 uni1FB9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fba uni1FBA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fbb uni1FBB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fbc uni1FBC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fbd uni1FBD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fbe uni1FBE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fbf uni1FBF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc0 uni1FC0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc1 uni1FC1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc2 uni1FC2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc3 uni1FC3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc4 uni1FC4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc6 uni1FC6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc7 uni1FC7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc8 uni1FC8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc9 uni1FC9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fca uni1FCA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fcb uni1FCB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fcc uni1FCC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fcd uni1FCD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fce uni1FCE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fcf uni1FCF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd0 uni1FD0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd1 uni1FD1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd2 uni1FD2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd3 uni1FD3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd6 uni1FD6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd7 uni1FD7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd8 uni1FD8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fd9 uni1FD9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fda uni1FDA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fdb uni1FDB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fdd uni1FDD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fde uni1FDE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fdf uni1FDF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe0 uni1FE0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe1 uni1FE1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe2 uni1FE2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe3 uni1FE3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe4 uni1FE4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe5 uni1FE5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe6 uni1FE6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe7 uni1FE7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe8 uni1FE8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fe9 uni1FE9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fea uni1FEA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1feb uni1FEB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fec uni1FEC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fed uni1FED 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fee uni1FEE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fef uni1FEF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ff2 uni1FF2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff3 uni1FF3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff4 uni1FF4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff6 uni1FF6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff7 uni1FF7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff8 uni1FF8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ff9 uni1FF9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ffa uni1FFA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ffb uni1FFB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ffc uni1FFC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ffd uni1FFD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ffe uni1FFE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+2000 uni2000 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2001 uni2001 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2002 uni2002 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2003 uni2003 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2004 uni2004 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2005 uni2005 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2006 uni2006 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2007 uni2007 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2008 uni2008 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2009 uni2009 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+200a uni200A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+200b uni200B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200c uni200C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200d uni200D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200e uni200E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200f uni200F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2010 uni2010 1.5 +U+2011 uni2011 1.5 +U+2012 figuredash 1.5 +U+2013 endash original +U+2014 emdash original +U+2015 uni2015 1.5 +U+2016 uni2016 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2017 underscoredbl 2.3 +U+2018 quoteleft original +U+2019 quoteright original +U+201a quotesinglbase original +U+201b quotereversed 2.3 +U+201c quotedblleft original +U+201d quotedblright original +U+201e quotedblbase original +U+201f uni201F 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+2020 dagger original +U+2021 daggerdbl original +U+2022 bullet original +U+2023 uni2023 2.2 +U+2024 onedotenleader 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2025 twodotenleader 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2026 ellipsis original +U+2027 uni2027 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+202a uni202A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202b uni202B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202c uni202C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202d uni202D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202e uni202E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202f uni202F 2.11 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.23 (Serif Italic Condensed) +U+2030 perthousand original +U+2031 uni2031 2.1 +U+2032 minute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2033 second 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2034 uni2034 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2035 uni2035 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2036 uni2036 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2037 uni2037 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2038 uni2038 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2039 guilsinglleft original +U+203a guilsinglright original +U+203b uni203B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+203c exclamdbl 2.0 +U+203d uni203D 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.11 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.14 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+203e uni203E 2.3 +U+203f uni203F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2040 uni2040 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2041 uni2041 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2042 uni2042 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2043 uni2043 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2044 fraction 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2045 uni2045 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2046 uni2046 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2047 uni2047 2.0 +U+2048 uni2048 2.0 +U+2049 uni2049 2.0 +U+204a uni204A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+204b uni204B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+204c uni204C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+204d uni204D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+204e uni204E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+204f uni204F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2050 uni2050 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2051 uni2051 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2052 uni2052 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2053 uni2053 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2054 uni2054 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2055 uni2055 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2056 uni2056 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2057 uni2057 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2058 uni2058 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2059 uni2059 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205a uni205A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205b uni205B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205c uni205C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205d uni205D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205e uni205E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205f uni205F 2.14 +U+2060 uni2060 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2061 uni2061 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2062 uni2062 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2063 uni2063 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2064 uni2064 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+206a uni206A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206b uni206B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206c uni206C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206d uni206D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206e uni206E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206f uni206F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2070 uni2070 2.2 +U+2071 uni2071 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2074 uni2074 2.2 +U+2075 uni2075 2.2 +U+2076 uni2076 2.2 +U+2077 uni2077 2.2 +U+2078 uni2078 2.2 +U+2079 uni2079 2.2 +U+207a uni207A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207b uni207B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207c uni207C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207d uni207D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207e uni207E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207f uni207F 1.14 +U+2080 uni2080 2.4 +U+2081 uni2081 2.4 +U+2082 uni2082 2.4 +U+2083 uni2083 2.4 +U+2084 uni2084 2.4 +U+2085 uni2085 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2086 uni2086 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2087 uni2087 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2088 uni2088 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2089 uni2089 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+208a uni208A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208b uni208B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208c uni208C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208d uni208D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208e uni208E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2090 uni2090 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2091 uni2091 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2092 uni2092 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2093 uni2093 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2094 uni2094 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+20a0 uni20A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a1 colonmonetary 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a2 uni20A2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a3 franc 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a4 lira 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a5 uni20A5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a6 uni20A6 2.3 +U+20a7 peseta 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a8 uni20A8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a9 uni20A9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20aa uni20AA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20ab dong 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20ac Euro original +U+20ad uni20AD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20ae uni20AE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20af uni20AF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b0 uni20B0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b1 uni20B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+20b2 uni20B2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b3 uni20B3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b4 uni20B4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+20b5 uni20B5 2.2 +U+20d0 uni20D0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+20d1 uni20D1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+20d6 uni20D6 2.8 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20d7 uni20D7 2.8 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20db uni20DB 2.23 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20dc uni20DC 2.23 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20e1 uni20E1 2.23 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2100 uni2100 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2101 uni2101 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2102 uni2102 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.16 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Condensed) +U+2103 uni2103 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2104 uni2104 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2105 uni2105 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2106 uni2106 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2107 uni2107 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2108 uni2108 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2109 uni2109 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+210b uni210B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+210c uni210C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+210d uni210D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+210e uni210E 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+210f uni210F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.28 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2110 uni2110 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2111 Ifraktur 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2112 uni2112 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2113 uni2113 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2114 uni2114 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2115 uni2115 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2116 uni2116 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2117 uni2117 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2118 weierstrass 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2119 uni2119 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+211a uni211A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+211b uni211B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211c Rfraktur 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211d uni211D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+211e prescription 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211f uni211F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2120 uni2120 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2121 uni2121 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2122 trademark original +U+2123 uni2123 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2124 uni2124 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2125 uni2125 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2126 uni2126 2.2 +U+2127 uni2127 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2128 uni2128 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2129 uni2129 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212a uni212A 2.2 +U+212b uni212B 2.2 +U+212c uni212C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212d uni212D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212e estimated 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+212f uni212F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2130 uni2130 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2131 uni2131 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2132 uni2132 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+2133 uni2133 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2134 uni2134 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2135 aleph 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2136 uni2136 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2137 uni2137 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2138 uni2138 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2139 uni2139 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213a uni213A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213b uni213B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213c uni213C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+213d uni213D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+213e uni213E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+213f uni213F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2140 uni2140 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2141 uni2141 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2142 uni2142 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2143 uni2143 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2144 uni2144 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2145 uni2145 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2146 uni2146 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2147 uni2147 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2148 uni2148 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2149 uni2149 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+214b uni214B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+214e uni214E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2153 onethird 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2154 twothirds 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2155 uni2155 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2156 uni2156 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2157 uni2157 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2158 uni2158 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2159 uni2159 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215a uni215A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215b oneeighth 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215c threeeighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215d fiveeighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215e seveneighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215f uni215F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2160 uni2160 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2161 uni2161 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2162 uni2162 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2163 uni2163 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2164 uni2164 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2165 uni2165 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2166 uni2166 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2167 uni2167 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2168 uni2168 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2169 uni2169 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216a uni216A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216b uni216B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216c uni216C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216d uni216D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216e uni216E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216f uni216F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2170 uni2170 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2171 uni2171 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2172 uni2172 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2173 uni2173 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2174 uni2174 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2175 uni2175 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2176 uni2176 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2177 uni2177 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2178 uni2178 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2179 uni2179 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217a uni217A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217b uni217B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217c uni217C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217d uni217D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217e uni217E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217f uni217F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2180 uni2180 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2181 uni2181 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2182 uni2182 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2183 uni2183 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2184 uni2184 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2190 arrowleft 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2191 arrowup 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2192 arrowright 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2193 arrowdown 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2194 arrowboth 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2195 arrowupdn 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2196 uni2196 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2197 uni2197 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2198 uni2198 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2199 uni2199 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219a uni219A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219b uni219B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219c uni219C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219d uni219D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219e uni219E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219f uni219F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a0 uni21A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a1 uni21A1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a2 uni21A2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a3 uni21A3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a4 uni21A4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a5 uni21A5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a6 uni21A6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a7 uni21A7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a8 arrowupdnbse 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a9 uni21A9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21aa uni21AA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ab uni21AB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ac uni21AC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ad uni21AD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ae uni21AE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21af uni21AF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b0 uni21B0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b1 uni21B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b2 uni21B2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b3 uni21B3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b4 uni21B4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b5 carriagereturn 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b6 uni21B6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b7 uni21B7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b8 uni21B8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b9 uni21B9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ba uni21BA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21bb uni21BB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21bc uni21BC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21bd uni21BD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21be uni21BE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21bf uni21BF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c0 uni21C0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c1 uni21C1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c2 uni21C2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c3 uni21C3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c4 uni21C4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c5 uni21C5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c6 uni21C6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c7 uni21C7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c8 uni21C8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c9 uni21C9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ca uni21CA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21cb uni21CB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21cc uni21CC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21cd uni21CD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ce uni21CE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21cf uni21CF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d0 arrowdblleft 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d1 arrowdblup 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d2 arrowdblright 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d3 arrowdbldown 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d4 arrowdblboth 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d5 uni21D5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d6 uni21D6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d7 uni21D7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d8 uni21D8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d9 uni21D9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21da uni21DA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21db uni21DB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21dc uni21DC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21dd uni21DD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21de uni21DE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21df uni21DF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e0 uni21E0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e1 uni21E1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e2 uni21E2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e3 uni21E3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e4 uni21E4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e5 uni21E5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e6 uni21E6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e7 uni21E7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e8 uni21E8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e9 uni21E9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ea uni21EA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21eb uni21EB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ec uni21EC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ed uni21ED 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ee uni21EE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ef uni21EF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f0 uni21F0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f1 uni21F1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f2 uni21F2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f3 uni21F3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f4 uni21F4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f5 uni21F5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f6 uni21F6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f7 uni21F7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f8 uni21F8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f9 uni21F9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fa uni21FA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fb uni21FB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fc uni21FC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fd uni21FD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fe uni21FE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ff uni21FF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2200 universal 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2201 uni2201 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2202 partialdiff original +U+2203 existential 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2204 uni2204 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2205 emptyset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2206 Delta original +U+2207 gradient 2.1 +U+2208 element 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2209 notelement 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+220a uni220A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+220b suchthat 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+220c uni220C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+220d uni220D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+220e uni220E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+220f product original +U+2210 uni2210 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2211 summation original +U+2212 minus original +U+2213 uni2213 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2214 uni2214 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2215 uni2215 original +U+2216 uni2216 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2217 asteriskmath 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2218 uni2218 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2219 uni2219 original +U+221a radical original +U+221b uni221B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+221c uni221C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+221d proportional 2.1 +U+221e infinity original +U+221f orthogonal 2.1 +U+2220 angle 2.3 +U+2221 uni2221 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2222 uni2222 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2223 uni2223 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2224 uni2224 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2225 uni2225 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2226 uni2226 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2227 logicaland 2.1 +U+2228 logicalor 2.1 +U+2229 intersection 2.1 +U+222a union 2.1 +U+222b integral original +U+222c uni222C 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+222d uni222D 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+222e uni222E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+222f uni222F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2230 uni2230 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2231 uni2231 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2232 uni2232 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2233 uni2233 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2234 therefore 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2235 uni2235 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2236 uni2236 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2237 uni2237 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2238 uni2238 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2239 uni2239 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223a uni223A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223b uni223B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223c similar 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223d uni223D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223e uni223E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+223f uni223F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2240 uni2240 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2241 uni2241 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2242 uni2242 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2243 uni2243 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2244 uni2244 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2245 congruent 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2246 uni2246 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2247 uni2247 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2248 approxequal original +U+2249 uni2249 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224a uni224A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224b uni224B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224c uni224C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224d uni224D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224e uni224E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224f uni224F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2250 uni2250 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2251 uni2251 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2252 uni2252 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2253 uni2253 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2254 uni2254 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2255 uni2255 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2256 uni2256 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2257 uni2257 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2258 uni2258 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2259 uni2259 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225a uni225A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225b uni225B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225c uni225C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225d uni225D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225e uni225E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225f uni225F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2260 notequal original +U+2261 equivalence 2.1 +U+2262 uni2262 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2263 uni2263 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2264 lessequal original +U+2265 greaterequal original +U+2266 uni2266 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2267 uni2267 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2268 uni2268 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2269 uni2269 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+226a uni226A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+226b uni226B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+226c uni226C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+226d uni226D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+226e uni226E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+226f uni226F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2270 uni2270 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2271 uni2271 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2272 uni2272 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2273 uni2273 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2274 uni2274 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2275 uni2275 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2276 uni2276 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2277 uni2277 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2278 uni2278 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2279 uni2279 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227a uni227A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227b uni227B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227c uni227C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227d uni227D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227e uni227E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227f uni227F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2280 uni2280 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2281 uni2281 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2282 propersubset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2283 propersuperset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2284 notsubset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2285 uni2285 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2286 reflexsubset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2287 reflexsuperset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2288 uni2288 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2289 uni2289 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+228a uni228A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+228b uni228B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+228c uni228C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+228d uni228D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+228e uni228E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+228f uni228F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2290 uni2290 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2291 uni2291 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2292 uni2292 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2293 uni2293 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2294 uni2294 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2295 circleplus 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2296 uni2296 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2297 circlemultiply 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2298 uni2298 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2299 uni2299 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229a uni229A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229b uni229B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229c uni229C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229d uni229D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229e uni229E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229f uni229F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a0 uni22A0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a1 uni22A1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a2 uni22A2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a3 uni22A3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a4 uni22A4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a5 perpendicular 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a6 uni22A6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a7 uni22A7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a8 uni22A8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a9 uni22A9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22aa uni22AA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22ab uni22AB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22ac uni22AC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22ad uni22AD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22ae uni22AE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22af uni22AF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22b0 uni22B0 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b1 uni22B1 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b2 uni22B2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b3 uni22B3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b4 uni22B4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b5 uni22B5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b6 uni22B6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b7 uni22B7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b8 uni22B8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b9 uni22B9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ba uni22BA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22bb uni22BB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22bc uni22BC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22bd uni22BD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22be uni22BE 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+22bf uni22BF 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+22c0 uni22C0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c1 uni22C1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c2 uni22C2 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c3 uni22C3 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c4 uni22C4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c5 dotmath 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22c6 uni22C6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22c7 uni22C7 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c8 uni22C8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c9 uni22C9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ca uni22CA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cb uni22CB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cc uni22CC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cd uni22CD 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22ce uni22CE 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cf uni22CF 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d0 uni22D0 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d1 uni22D1 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d2 uni22D2 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d3 uni22D3 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d4 uni22D4 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d5 uni22D5 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d6 uni22D6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d7 uni22D7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d8 uni22D8 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22d9 uni22D9 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22da uni22DA 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22db uni22DB 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22dc uni22DC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22dd uni22DD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22de uni22DE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22df uni22DF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e0 uni22E0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e1 uni22E1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e2 uni22E2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e3 uni22E3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e4 uni22E4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e5 uni22E5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e6 uni22E6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e7 uni22E7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e8 uni22E8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e9 uni22E9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22ea uni22EA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22eb uni22EB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ec uni22EC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ed uni22ED 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ee uni22EE 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ef uni22EF 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f0 uni22F0 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f1 uni22F1 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f2 uni22F2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f3 uni22F3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f4 uni22F4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f5 uni22F5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f6 uni22F6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f7 uni22F7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f8 uni22F8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f9 uni22F9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fa uni22FA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fb uni22FB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fc uni22FC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fd uni22FD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fe uni22FE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ff uni22FF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2300 uni2300 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2301 uni2301 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2302 house 1.14 +U+2303 uni2303 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2304 uni2304 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2305 uni2305 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2306 uni2306 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2307 uni2307 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2308 uni2308 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2309 uni2309 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+230a uni230A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+230b uni230B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+230c uni230C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+230d uni230D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+230e uni230E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+230f uni230F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2310 revlogicalnot 1.14 +U+2311 uni2311 1.15 +U+2312 uni2312 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2313 uni2313 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2314 uni2314 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2315 uni2315 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2318 uni2318 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2319 uni2319 1.14 +U+231c uni231C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+231d uni231D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+231e uni231E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+231f uni231F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2320 integraltp 2.3 +U+2321 integralbt 2.3 +U+2324 uni2324 2.16 (Sans, Sans Bold, Sans Bold Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) 2.19 (Sans Condensed Oblique, Sans Oblique) +U+2325 uni2325 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2326 uni2326 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2327 uni2327 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2328 uni2328 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2329 angleleft 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) +U+232a angleright 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) +U+232b uni232B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+232c uni232C 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2335 uni2335 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2337 uni2337 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2338 uni2338 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2339 uni2339 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233a uni233A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233b uni233B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233c uni233C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233d uni233D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233e uni233E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2341 uni2341 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2342 uni2342 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2343 uni2343 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2344 uni2344 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2347 uni2347 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2348 uni2348 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2349 uni2349 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234b uni234B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234c uni234C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234d uni234D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2350 uni2350 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2352 uni2352 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2353 uni2353 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2354 uni2354 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2357 uni2357 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2358 uni2358 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2359 uni2359 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235a uni235A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235b uni235B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235c uni235C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235e uni235E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235f uni235F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2360 uni2360 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2363 uni2363 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2364 uni2364 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2365 uni2365 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2368 uni2368 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2369 uni2369 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236b uni236B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236c uni236C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236d uni236D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236e uni236E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236f uni236F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2370 uni2370 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2373 uni2373 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2374 uni2374 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2375 uni2375 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2376 uni2376 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2377 uni2377 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2378 uni2378 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2379 uni2379 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+237a uni237A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+237d uni237D 1.15 +U+2380 uni2380 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2381 uni2381 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2382 uni2382 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2383 uni2383 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2387 uni2387 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2388 uni2388 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2389 uni2389 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+238a uni238A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+238b uni238B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2394 uni2394 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2395 uni2395 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+239b uni239B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+239c uni239C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+239d uni239D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+239e uni239E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+239f uni239F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a0 uni23A0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a1 uni23A1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a2 uni23A2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a3 uni23A3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a4 uni23A4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a5 uni23A5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a6 uni23A6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a7 uni23A7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a8 uni23A8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23a9 uni23A9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23aa uni23AA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23ab uni23AB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23ac uni23AC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23ad uni23AD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23ae uni23AE 2.3 +U+23ce uni23CE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23cf uni23CF 2.3 +U+23e3 uni23E3 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+23e5 uni23E5 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2422 uni2422 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2423 uni2423 1.6 +U+2460 uni2460 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2461 uni2461 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2462 uni2462 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2463 uni2463 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2464 uni2464 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2465 uni2465 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2466 uni2466 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2467 uni2467 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2468 uni2468 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2469 uni2469 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2500 SF100000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2501 uni2501 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2502 SF110000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2503 uni2503 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2504 uni2504 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2505 uni2505 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2506 uni2506 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2507 uni2507 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2508 uni2508 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2509 uni2509 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250a uni250A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250b uni250B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250c SF010000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250d uni250D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250e uni250E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250f uni250F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2510 SF030000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2511 uni2511 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2512 uni2512 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2513 uni2513 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2514 SF020000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2515 uni2515 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2516 uni2516 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2517 uni2517 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2518 SF040000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2519 uni2519 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251a uni251A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251b uni251B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251c SF080000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251d uni251D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251e uni251E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251f uni251F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2520 uni2520 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2521 uni2521 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2522 uni2522 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2523 uni2523 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2524 SF090000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2525 uni2525 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2526 uni2526 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2527 uni2527 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2528 uni2528 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2529 uni2529 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252a uni252A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252b uni252B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252c SF060000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252d uni252D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252e uni252E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252f uni252F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2530 uni2530 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2531 uni2531 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2532 uni2532 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2533 uni2533 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2534 SF070000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2535 uni2535 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2536 uni2536 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2537 uni2537 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2538 uni2538 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2539 uni2539 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253a uni253A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253b uni253B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253c SF050000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253d uni253D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253e uni253E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253f uni253F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2540 uni2540 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2541 uni2541 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2542 uni2542 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2543 uni2543 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2544 uni2544 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2545 uni2545 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2546 uni2546 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2547 uni2547 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2548 uni2548 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2549 uni2549 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254a uni254A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254b uni254B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254c uni254C 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254d uni254D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254e uni254E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254f uni254F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2550 SF430000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2551 SF240000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2552 SF510000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2553 SF520000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2554 SF390000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2555 SF220000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2556 SF210000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2557 SF250000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2558 SF500000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2559 SF490000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255a SF380000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255b SF280000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255c SF270000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255d SF260000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255e SF360000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255f SF370000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2560 SF420000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2561 SF190000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2562 SF200000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2563 SF230000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2564 SF470000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2565 SF480000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2566 SF410000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2567 SF450000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2568 SF460000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2569 SF400000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256a SF540000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256b SF530000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256c SF440000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256d uni256D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256e uni256E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256f uni256F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2570 uni2570 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2571 uni2571 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2572 uni2572 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2573 uni2573 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2574 uni2574 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2575 uni2575 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2576 uni2576 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2577 uni2577 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2578 uni2578 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2579 uni2579 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257a uni257A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257b uni257B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257c uni257C 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257d uni257D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257e uni257E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257f uni257F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2580 upblock 1.14 +U+2581 uni2581 1.14 +U+2582 uni2582 1.14 +U+2583 uni2583 1.14 +U+2584 dnblock 1.14 +U+2585 uni2585 1.14 +U+2586 uni2586 1.14 +U+2587 uni2587 1.14 +U+2588 block 1.14 +U+2589 uni2589 1.14 +U+258a uni258A 1.14 +U+258b uni258B 1.14 +U+258c lfblock 1.14 +U+258d uni258D 1.14 +U+258e uni258E 1.14 +U+258f uni258F 1.14 +U+2590 rtblock 1.14 +U+2591 ltshade 1.15 +U+2592 shade 1.15 +U+2593 dkshade 1.15 +U+2594 uni2594 1.14 +U+2595 uni2595 1.14 +U+2596 uni2596 1.14 +U+2597 uni2597 1.14 +U+2598 uni2598 1.14 +U+2599 uni2599 1.14 +U+259a uni259A 1.14 +U+259b uni259B 1.14 +U+259c uni259C 1.14 +U+259d uni259D 1.14 +U+259e uni259E 1.14 +U+259f uni259F 1.14 +U+25a0 filledbox 2.3 +U+25a1 H22073 2.3 +U+25a2 uni25A2 2.3 +U+25a3 uni25A3 2.3 +U+25a4 uni25A4 2.3 +U+25a5 uni25A5 2.3 +U+25a6 uni25A6 2.3 +U+25a7 uni25A7 2.3 +U+25a8 uni25A8 2.3 +U+25a9 uni25A9 2.3 +U+25aa H18543 2.3 +U+25ab H18551 2.3 +U+25ac filledrect 2.3 +U+25ad uni25AD 2.3 +U+25ae uni25AE 2.3 +U+25af uni25AF 2.3 +U+25b0 uni25B0 2.3 +U+25b1 uni25B1 2.3 +U+25b2 triagup 2.3 +U+25b3 uni25B3 2.3 +U+25b4 uni25B4 2.3 +U+25b5 uni25B5 2.3 +U+25b6 uni25B6 2.3 +U+25b7 uni25B7 2.3 +U+25b8 uni25B8 2.3 +U+25b9 uni25B9 2.3 +U+25ba triagrt 2.3 +U+25bb uni25BB 2.3 +U+25bc triagdn 2.3 +U+25bd uni25BD 2.3 +U+25be uni25BE 2.3 +U+25bf uni25BF 2.3 +U+25c0 uni25C0 2.3 +U+25c1 uni25C1 2.3 +U+25c2 uni25C2 2.3 +U+25c3 uni25C3 2.3 +U+25c4 triaglf 2.3 +U+25c5 uni25C5 2.3 +U+25c6 uni25C6 2.3 +U+25c7 uni25C7 2.3 +U+25c8 uni25C8 2.3 +U+25c9 uni25C9 2.3 +U+25ca lozenge original +U+25cb circle 2.3 +U+25cc uni25CC 2.3 +U+25cd uni25CD 2.3 +U+25ce uni25CE 2.3 +U+25cf H18533 2.3 +U+25d0 uni25D0 2.3 +U+25d1 uni25D1 2.3 +U+25d2 uni25D2 2.3 +U+25d3 uni25D3 2.3 +U+25d4 uni25D4 2.3 +U+25d5 uni25D5 2.3 +U+25d6 uni25D6 2.3 +U+25d7 uni25D7 2.3 +U+25d8 invbullet 2.2 +U+25d9 invcircle 2.3 +U+25da uni25DA 2.3 +U+25db uni25DB 2.3 +U+25dc uni25DC 2.3 +U+25dd uni25DD 2.3 +U+25de uni25DE 2.3 +U+25df uni25DF 2.3 +U+25e0 uni25E0 2.3 +U+25e1 uni25E1 2.3 +U+25e2 uni25E2 2.3 +U+25e3 uni25E3 2.3 +U+25e4 uni25E4 2.3 +U+25e5 uni25E5 2.3 +U+25e6 openbullet 2.2 +U+25e7 uni25E7 2.3 +U+25e8 uni25E8 2.3 +U+25e9 uni25E9 2.3 +U+25ea uni25EA 2.3 +U+25eb uni25EB 2.3 +U+25ec uni25EC 2.3 +U+25ed uni25ED 2.3 +U+25ee uni25EE 2.3 +U+25ef uni25EF 2.3 +U+25f0 uni25F0 2.3 +U+25f1 uni25F1 2.3 +U+25f2 uni25F2 2.3 +U+25f3 uni25F3 2.3 +U+25f4 uni25F4 2.3 +U+25f5 uni25F5 2.3 +U+25f6 uni25F6 2.3 +U+25f7 uni25F7 2.3 +U+25f8 uni25F8 2.3 +U+25f9 uni25F9 2.3 +U+25fa uni25FA 2.3 +U+25fb uni25FB 2.3 +U+25fc uni25FC 2.3 +U+25fd uni25FD 2.3 +U+25fe uni25FE 2.3 +U+25ff uni25FF 2.3 +U+2600 uni2600 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2601 uni2601 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2602 uni2602 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2603 uni2603 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2604 uni2604 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2605 uni2605 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2606 uni2606 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2607 uni2607 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2608 uni2608 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2609 uni2609 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260a uni260A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260b uni260B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260c uni260C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260d uni260D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260e uni260E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260f uni260F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2610 uni2610 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2611 uni2611 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2612 uni2612 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2613 uni2613 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2614 uni2614 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2615 uni2615 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2616 uni2616 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2617 uni2617 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2618 uni2618 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2619 uni2619 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261a uni261A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261b uni261B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261c uni261C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261d uni261D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261e uni261E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261f uni261F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2620 uni2620 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2621 uni2621 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2622 uni2622 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2623 uni2623 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2624 uni2624 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2625 uni2625 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2626 uni2626 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2627 uni2627 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2628 uni2628 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2629 uni2629 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262a uni262A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262b uni262B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262c uni262C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262d uni262D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262e uni262E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262f uni262F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2630 uni2630 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2631 uni2631 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2632 uni2632 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2633 uni2633 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2634 uni2634 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2635 uni2635 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2636 uni2636 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2637 uni2637 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2638 uni2638 1.15 +U+2639 uni2639 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263a smileface 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263b invsmileface 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263c sun 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263d uni263D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+263e uni263E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+263f uni263F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2640 female 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2641 uni2641 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2642 male 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2643 uni2643 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2644 uni2644 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2645 uni2645 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2646 uni2646 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2647 uni2647 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2648 uni2648 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2649 uni2649 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264a uni264A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264b uni264B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264c uni264C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264d uni264D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264e uni264E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264f uni264F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2650 uni2650 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2651 uni2651 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2652 uni2652 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2653 uni2653 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2654 uni2654 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2655 uni2655 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2656 uni2656 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2657 uni2657 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2658 uni2658 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2659 uni2659 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265a uni265A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265b uni265B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265c uni265C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265d uni265D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265e uni265E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265f uni265F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2660 spade 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2661 uni2661 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2662 uni2662 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2663 club 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2664 uni2664 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2665 heart 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2666 diamond 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2667 uni2667 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2668 uni2668 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2669 uni2669 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266a musicalnote 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266b musicalnotedbl 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266c uni266C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266d uni266D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266e uni266E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266f uni266F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2670 uni2670 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2671 uni2671 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2672 uni2672 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2673 uni2673 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2674 uni2674 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2675 uni2675 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2676 uni2676 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2677 uni2677 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2678 uni2678 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2679 uni2679 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267a uni267A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267b uni267B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267c uni267C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267d uni267D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267e uni267E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267f uni267F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2680 uni2680 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2681 uni2681 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2682 uni2682 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2683 uni2683 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2684 uni2684 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2685 uni2685 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2686 uni2686 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2687 uni2687 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2688 uni2688 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2689 uni2689 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268a uni268A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268b uni268B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268c uni268C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268d uni268D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268e uni268E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268f uni268F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2690 uni2690 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2691 uni2691 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2692 uni2692 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2693 uni2693 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2694 uni2694 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2695 uni2695 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2696 uni2696 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2697 uni2697 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2698 uni2698 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2699 uni2699 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269a uni269A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269b uni269B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269c uni269C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a0 uni26A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a1 uni26A1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a2 uni26A2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a3 uni26A3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a4 uni26A4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a5 uni26A5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a6 uni26A6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a7 uni26A7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a8 uni26A8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a9 uni26A9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26aa uni26AA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ab uni26AB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ac uni26AC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ad uni26AD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ae uni26AE 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26af uni26AF 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26b0 uni26B0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+26b1 uni26B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+26b2 uni26B2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b3 uni26B3 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b4 uni26B4 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b5 uni26B5 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b6 uni26B6 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b7 uni26B7 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b8 uni26B8 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2701 uni2701 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2702 uni2702 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2703 uni2703 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2704 uni2704 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2706 uni2706 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2707 uni2707 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2708 uni2708 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2709 uni2709 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270c uni270C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270d uni270D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270e uni270E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270f uni270F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2710 uni2710 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2711 uni2711 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2712 uni2712 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2713 uni2713 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2714 uni2714 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2715 uni2715 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2716 uni2716 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2717 uni2717 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2718 uni2718 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2719 uni2719 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271a uni271A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271b uni271B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271c uni271C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271d uni271D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271e uni271E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271f uni271F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2720 uni2720 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2721 uni2721 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2722 uni2722 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2723 uni2723 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2724 uni2724 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2725 uni2725 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2726 uni2726 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2727 uni2727 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2729 uni2729 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272a uni272A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272b uni272B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272c uni272C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272d uni272D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272e uni272E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272f uni272F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2730 uni2730 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2731 uni2731 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2732 uni2732 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2733 uni2733 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2734 uni2734 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2735 uni2735 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2736 uni2736 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2737 uni2737 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2738 uni2738 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2739 uni2739 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273a uni273A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273b uni273B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273c uni273C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273d uni273D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273e uni273E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273f uni273F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2740 uni2740 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2741 uni2741 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2742 uni2742 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2743 uni2743 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2744 uni2744 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2745 uni2745 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2746 uni2746 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2747 uni2747 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2748 uni2748 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2749 uni2749 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274a uni274A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274b uni274B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274d uni274D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274f uni274F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2750 uni2750 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2751 uni2751 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2752 uni2752 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2756 uni2756 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2758 uni2758 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2759 uni2759 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275a uni275A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275b uni275B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275c uni275C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275d uni275D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275e uni275E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2761 uni2761 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2762 uni2762 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2763 uni2763 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2764 uni2764 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2765 uni2765 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2766 uni2766 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2767 uni2767 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2768 uni2768 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2769 uni2769 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276a uni276A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276b uni276B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276c uni276C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276d uni276D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276e uni276E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276f uni276F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2770 uni2770 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2771 uni2771 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2772 uni2772 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2773 uni2773 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2774 uni2774 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2775 uni2775 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2776 uni2776 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2777 uni2777 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2778 uni2778 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2779 uni2779 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277a uni277A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277b uni277B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277c uni277C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277d uni277D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277e uni277E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277f uni277F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2780 uni2780 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2781 uni2781 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2782 uni2782 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2783 uni2783 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2784 uni2784 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2785 uni2785 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2786 uni2786 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2787 uni2787 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2788 uni2788 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2789 uni2789 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278a uni278A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278b uni278B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278c uni278C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278d uni278D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278e uni278E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278f uni278F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2790 uni2790 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2791 uni2791 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2792 uni2792 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2793 uni2793 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2794 uni2794 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2798 uni2798 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2799 uni2799 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279a uni279A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279b uni279B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279c uni279C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279d uni279D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279e uni279E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279f uni279F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a0 uni27A0 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a1 uni27A1 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27a2 uni27A2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a3 uni27A3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a4 uni27A4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a5 uni27A5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a6 uni27A6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a7 uni27A7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a8 uni27A8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a9 uni27A9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27aa uni27AA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ab uni27AB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ac uni27AC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ad uni27AD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ae uni27AE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27af uni27AF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b1 uni27B1 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b2 uni27B2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b3 uni27B3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b4 uni27B4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b5 uni27B5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b6 uni27B6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b7 uni27B7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b8 uni27B8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b9 uni27B9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ba uni27BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bb uni27BB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bc uni27BC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bd uni27BD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27be uni27BE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bf uni27BF 2.7 (Sans Mono Bold) +U+27c5 uni27C5 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+27c6 uni27C6 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+27e0 uni27E0 2.3 +U+27e6 uni27E6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27e7 uni27E7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27e8 uni27E8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27e9 uni27E9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27ea uni27EA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27eb uni27EB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f0 uni27F0 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f1 uni27F1 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f2 uni27F2 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f3 uni27F3 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f4 uni27F4 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f5 uni27F5 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f6 uni27F6 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f7 uni27F7 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f8 uni27F8 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f9 uni27F9 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fa uni27FA 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fb uni27FB 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fc uni27FC 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fd uni27FD 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fe uni27FE 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27ff uni27FF 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2800 uni2800 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2801 uni2801 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2802 uni2802 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2803 uni2803 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2804 uni2804 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2805 uni2805 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2806 uni2806 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2807 uni2807 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2808 uni2808 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2809 uni2809 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280a uni280A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280b uni280B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280c uni280C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280d uni280D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280e uni280E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280f uni280F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2810 uni2810 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2811 uni2811 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2812 uni2812 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2813 uni2813 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2814 uni2814 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2815 uni2815 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2816 uni2816 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2817 uni2817 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2818 uni2818 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2819 uni2819 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281a uni281A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281b uni281B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281c uni281C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281d uni281D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281e uni281E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281f uni281F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2820 uni2820 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2821 uni2821 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2822 uni2822 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2823 uni2823 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2824 uni2824 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2825 uni2825 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2826 uni2826 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2827 uni2827 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2828 uni2828 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2829 uni2829 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282a uni282A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282b uni282B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282c uni282C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282d uni282D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282e uni282E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282f uni282F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2830 uni2830 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2831 uni2831 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2832 uni2832 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2833 uni2833 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2834 uni2834 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2835 uni2835 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2836 uni2836 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2837 uni2837 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2838 uni2838 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2839 uni2839 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283a uni283A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283b uni283B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283c uni283C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283d uni283D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283e uni283E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283f uni283F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2840 uni2840 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2841 uni2841 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2842 uni2842 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2843 uni2843 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2844 uni2844 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2845 uni2845 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2846 uni2846 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2847 uni2847 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2848 uni2848 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2849 uni2849 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284a uni284A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284b uni284B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284c uni284C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284d uni284D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284e uni284E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284f uni284F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2850 uni2850 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2851 uni2851 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2852 uni2852 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2853 uni2853 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2854 uni2854 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2855 uni2855 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2856 uni2856 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2857 uni2857 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2858 uni2858 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2859 uni2859 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285a uni285A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285b uni285B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285c uni285C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285d uni285D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285e uni285E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285f uni285F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2860 uni2860 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2861 uni2861 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2862 uni2862 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2863 uni2863 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2864 uni2864 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2865 uni2865 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2866 uni2866 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2867 uni2867 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2868 uni2868 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2869 uni2869 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286a uni286A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286b uni286B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286c uni286C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286d uni286D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286e uni286E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286f uni286F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2870 uni2870 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2871 uni2871 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2872 uni2872 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2873 uni2873 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2874 uni2874 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2875 uni2875 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2876 uni2876 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2877 uni2877 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2878 uni2878 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2879 uni2879 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287a uni287A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287b uni287B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287c uni287C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287d uni287D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287e uni287E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287f uni287F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2880 uni2880 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2881 uni2881 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2882 uni2882 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2883 uni2883 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2884 uni2884 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2885 uni2885 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2886 uni2886 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2887 uni2887 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2888 uni2888 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2889 uni2889 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288a uni288A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288b uni288B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288c uni288C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288d uni288D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288e uni288E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288f uni288F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2890 uni2890 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2891 uni2891 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2892 uni2892 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2893 uni2893 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2894 uni2894 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2895 uni2895 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2896 uni2896 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2897 uni2897 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2898 uni2898 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2899 uni2899 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289a uni289A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289b uni289B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289c uni289C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289d uni289D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289e uni289E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289f uni289F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a0 uni28A0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a1 uni28A1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a2 uni28A2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a3 uni28A3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a4 uni28A4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a5 uni28A5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a6 uni28A6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a7 uni28A7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a8 uni28A8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a9 uni28A9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28aa uni28AA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ab uni28AB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ac uni28AC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ad uni28AD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ae uni28AE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28af uni28AF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b0 uni28B0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b1 uni28B1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b2 uni28B2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b3 uni28B3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b4 uni28B4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b5 uni28B5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b6 uni28B6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b7 uni28B7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b8 uni28B8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b9 uni28B9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ba uni28BA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bb uni28BB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bc uni28BC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bd uni28BD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28be uni28BE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bf uni28BF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c0 uni28C0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c1 uni28C1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c2 uni28C2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c3 uni28C3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c4 uni28C4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c5 uni28C5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c6 uni28C6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c7 uni28C7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c8 uni28C8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c9 uni28C9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ca uni28CA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cb uni28CB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cc uni28CC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cd uni28CD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ce uni28CE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cf uni28CF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d0 uni28D0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d1 uni28D1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d2 uni28D2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d3 uni28D3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d4 uni28D4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d5 uni28D5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d6 uni28D6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d7 uni28D7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d8 uni28D8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d9 uni28D9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28da uni28DA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28db uni28DB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28dc uni28DC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28dd uni28DD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28de uni28DE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28df uni28DF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e0 uni28E0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e1 uni28E1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e2 uni28E2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e3 uni28E3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e4 uni28E4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e5 uni28E5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e6 uni28E6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e7 uni28E7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e8 uni28E8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e9 uni28E9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ea uni28EA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28eb uni28EB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ec uni28EC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ed uni28ED 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ee uni28EE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ef uni28EF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f0 uni28F0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f1 uni28F1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f2 uni28F2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f3 uni28F3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f4 uni28F4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f5 uni28F5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f6 uni28F6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f7 uni28F7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f8 uni28F8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f9 uni28F9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fa uni28FA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fb uni28FB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fc uni28FC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fd uni28FD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fe uni28FE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ff uni28FF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2900 uni2900 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2901 uni2901 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2902 uni2902 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2903 uni2903 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2904 uni2904 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2905 uni2905 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2906 uni2906 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2907 uni2907 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2908 uni2908 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2909 uni2909 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290a uni290A 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290b uni290B 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290c uni290C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290d uni290D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290e uni290E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290f uni290F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2910 uni2910 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2911 uni2911 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2912 uni2912 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2913 uni2913 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2914 uni2914 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2915 uni2915 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2916 uni2916 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2917 uni2917 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2918 uni2918 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2919 uni2919 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291a uni291A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291b uni291B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291c uni291C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291d uni291D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291e uni291E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291f uni291F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2920 uni2920 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2921 uni2921 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2922 uni2922 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2923 uni2923 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2924 uni2924 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2925 uni2925 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2926 uni2926 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2927 uni2927 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2928 uni2928 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2929 uni2929 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292a uni292A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292b uni292B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292c uni292C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292d uni292D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292e uni292E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292f uni292F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2930 uni2930 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2931 uni2931 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2932 uni2932 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2933 uni2933 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2934 uni2934 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2935 uni2935 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2936 uni2936 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2937 uni2937 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2938 uni2938 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2939 uni2939 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293a uni293A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293b uni293B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293c uni293C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293d uni293D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293e uni293E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293f uni293F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2940 uni2940 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2941 uni2941 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2942 uni2942 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2943 uni2943 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2944 uni2944 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2945 uni2945 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2946 uni2946 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2947 uni2947 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2948 uni2948 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2949 uni2949 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294a uni294A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294b uni294B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294c uni294C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294d uni294D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294e uni294E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294f uni294F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2950 uni2950 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2951 uni2951 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2952 uni2952 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2953 uni2953 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2954 uni2954 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2955 uni2955 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2956 uni2956 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2957 uni2957 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2958 uni2958 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2959 uni2959 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295a uni295A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295b uni295B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295c uni295C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295d uni295D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295e uni295E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295f uni295F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2960 uni2960 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2961 uni2961 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2962 uni2962 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2963 uni2963 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2964 uni2964 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2965 uni2965 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2966 uni2966 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2967 uni2967 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2968 uni2968 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2969 uni2969 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296a uni296A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296b uni296B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296c uni296C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296d uni296D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296e uni296E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296f uni296F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2970 uni2970 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2971 uni2971 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2972 uni2972 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2973 uni2973 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2974 uni2974 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2975 uni2975 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2976 uni2976 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2977 uni2977 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2978 uni2978 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2979 uni2979 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297a uni297A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297b uni297B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297c uni297C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297d uni297D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297e uni297E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297f uni297F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2983 uni2983 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2984 uni2984 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+29ce uni29CE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29cf uni29CF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d0 uni29D0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d1 uni29D1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d2 uni29D2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d3 uni29D3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d4 uni29D4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d5 uni29D5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29eb uni29EB 2.2 +U+29fa uni29FA 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+29fb uni29FB 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2a00 uni2A00 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a01 uni2A01 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a02 uni2A02 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a0c uni2A0C 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2a0d uni2A0D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2a0e uni2A0E 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2a0f uni2A0F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a10 uni2A10 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a11 uni2A11 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a12 uni2A12 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a13 uni2A13 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a14 uni2A14 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a15 uni2A15 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a16 uni2A16 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a17 uni2A17 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a18 uni2A18 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a19 uni2A19 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1a uni2A1A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1b uni2A1B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1c uni2A1C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a2f uni2A2F 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2a7d uni2A7D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a7e uni2A7E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a7f uni2A7F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a80 uni2A80 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a81 uni2A81 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a82 uni2A82 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a83 uni2A83 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a84 uni2A84 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a85 uni2A85 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a86 uni2A86 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a87 uni2A87 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a88 uni2A88 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a89 uni2A89 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8a uni2A8A 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8b uni2A8B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8c uni2A8C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8d uni2A8D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8e uni2A8E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8f uni2A8F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a90 uni2A90 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a91 uni2A91 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a92 uni2A92 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a93 uni2A93 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a94 uni2A94 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a95 uni2A95 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a96 uni2A96 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a97 uni2A97 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a98 uni2A98 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a99 uni2A99 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9a uni2A9A 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9b uni2A9B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9c uni2A9C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9d uni2A9D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9e uni2A9E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9f uni2A9F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aa0 uni2AA0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aae uni2AAE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aaf uni2AAF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab0 uni2AB0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab1 uni2AB1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab2 uni2AB2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab3 uni2AB3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab4 uni2AB4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab5 uni2AB5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab6 uni2AB6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab7 uni2AB7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab8 uni2AB8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab9 uni2AB9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aba uni2ABA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2af9 uni2AF9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2afa uni2AFA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b00 uni2B00 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b01 uni2B01 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b02 uni2B02 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b03 uni2B03 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b04 uni2B04 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b05 uni2B05 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b06 uni2B06 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b07 uni2B07 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b08 uni2B08 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b09 uni2B09 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0a uni2B0A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0b uni2B0B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0c uni2B0C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0d uni2B0D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0e uni2B0E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0f uni2B0F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b10 uni2B10 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b11 uni2B11 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b12 uni2B12 2.3 +U+2b13 uni2B13 2.3 +U+2b14 uni2B14 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b15 uni2B15 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b16 uni2B16 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b17 uni2B17 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b18 uni2B18 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b19 uni2B19 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b1a uni2B1A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b1f uni2B1F 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2b20 uni2B20 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b21 uni2B21 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b22 uni2B22 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b23 uni2B23 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b24 uni2B24 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2b53 uni2B53 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2b54 uni2B54 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2c60 uni2C60 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c61 uni2C61 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c62 uni2C62 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c63 uni2C63 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c64 uni2C64 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2c65 uni2C65 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c66 uni2C66 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c67 uni2C67 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c68 uni2C68 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c69 uni2C69 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6a uni2C6A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6b uni2C6B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6c uni2C6C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6d uni2C6D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c6e uni2C6E 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2c6f uni2C6F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2c71 uni2C71 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c72 uni2C72 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c73 uni2C73 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c74 uni2C74 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c75 uni2C75 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2c76 uni2C76 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2c77 uni2C77 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2c79 uni2C79 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2c7a uni2C7A 2.27 +U+2c7b uni2C7B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2c7c uni2C7C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2c7d uni2C7D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2d00 uni2D00 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d01 uni2D01 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d02 uni2D02 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d03 uni2D03 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d04 uni2D04 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d05 uni2D05 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d06 uni2D06 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d07 uni2D07 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d08 uni2D08 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d09 uni2D09 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d0a uni2D0A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d0b uni2D0B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d0c uni2D0C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d0d uni2D0D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d0e uni2D0E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d0f uni2D0F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d10 uni2D10 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d11 uni2D11 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d12 uni2D12 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d13 uni2D13 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d14 uni2D14 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d15 uni2D15 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d16 uni2D16 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d17 uni2D17 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d18 uni2D18 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d19 uni2D19 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d1a uni2D1A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d1b uni2D1B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d1c uni2D1C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d1d uni2D1D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d1e uni2D1E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d1f uni2D1F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d20 uni2D20 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d21 uni2D21 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d22 uni2D22 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d23 uni2D23 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d24 uni2D24 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d25 uni2D25 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+2d30 uni2D30 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d31 uni2D31 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d32 uni2D32 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d33 uni2D33 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d34 uni2D34 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d35 uni2D35 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d36 uni2D36 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d37 uni2D37 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d38 uni2D38 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d39 uni2D39 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3a uni2D3A 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3b uni2D3B 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3c uni2D3C 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3d uni2D3D 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3e uni2D3E 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3f uni2D3F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d40 uni2D40 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d41 uni2D41 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d42 uni2D42 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d43 uni2D43 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d44 uni2D44 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d45 uni2D45 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d46 uni2D46 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d47 uni2D47 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d48 uni2D48 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d49 uni2D49 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4a uni2D4A 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4b uni2D4B 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4c uni2D4C 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4d uni2D4D 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4e uni2D4E 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4f uni2D4F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d50 uni2D50 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d51 uni2D51 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d52 uni2D52 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d53 uni2D53 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d54 uni2D54 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d55 uni2D55 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d56 uni2D56 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d57 uni2D57 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d58 uni2D58 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d59 uni2D59 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5a uni2D5A 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5b uni2D5B 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5c uni2D5C 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5d uni2D5D 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5e uni2D5E 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5f uni2D5F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d60 uni2D60 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d61 uni2D61 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d62 uni2D62 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d63 uni2D63 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d64 uni2D64 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d65 uni2D65 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d6f uni2D6F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2e18 uni2E18 2.26 +U+2e22 uni2E22 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) +U+2e23 uni2E23 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) +U+2e24 uni2E24 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) +U+2e25 uni2E25 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) +U+2e2e uni2E2E 2.26 +U+4dc0 uni4DC0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc1 uni4DC1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc2 uni4DC2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc3 uni4DC3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc4 uni4DC4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc5 uni4DC5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc6 uni4DC6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc7 uni4DC7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc8 uni4DC8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc9 uni4DC9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dca uni4DCA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcb uni4DCB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcc uni4DCC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcd uni4DCD 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dce uni4DCE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcf uni4DCF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd0 uni4DD0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd1 uni4DD1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd2 uni4DD2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd3 uni4DD3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd4 uni4DD4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd5 uni4DD5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd6 uni4DD6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd7 uni4DD7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd8 uni4DD8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd9 uni4DD9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dda uni4DDA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddb uni4DDB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddc uni4DDC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddd uni4DDD 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dde uni4DDE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddf uni4DDF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de0 uni4DE0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de1 uni4DE1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de2 uni4DE2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de3 uni4DE3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de4 uni4DE4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de5 uni4DE5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de6 uni4DE6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de7 uni4DE7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de8 uni4DE8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de9 uni4DE9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dea uni4DEA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4deb uni4DEB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dec uni4DEC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ded uni4DED 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dee uni4DEE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4def uni4DEF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df0 uni4DF0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df1 uni4DF1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df2 uni4DF2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df3 uni4DF3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df4 uni4DF4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df5 uni4DF5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df6 uni4DF6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df7 uni4DF7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df8 uni4DF8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df9 uni4DF9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfa uni4DFA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfb uni4DFB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfc uni4DFC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfd uni4DFD 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfe uni4DFE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dff uni4DFF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a644 uniA644 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a645 uniA645 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a646 uniA646 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a647 uniA647 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a64c uniA64C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a64d uniA64D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a650 uniA650 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a651 uniA651 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a654 uniA654 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a655 uniA655 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a656 uniA656 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a657 uniA657 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a662 uniA662 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a663 uniA663 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a664 uniA664 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a665 uniA665 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a666 uniA666 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a667 uniA667 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a668 uniA668 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a669 uniA669 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66a uniA66A 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66b uniA66B 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66c uniA66C 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66d uniA66D 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66e uniA66E 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a68a uniA68A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a68b uniA68B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a68c uniA68C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a68d uniA68D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a694 uniA694 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a695 uniA695 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a708 uniA708 2.27 +U+a709 uniA709 2.27 +U+a70a uniA70A 2.27 +U+a70b uniA70B 2.27 +U+a70c uniA70C 2.27 +U+a70d uniA70D 2.27 +U+a70e uniA70E 2.27 +U+a70f uniA70F 2.27 +U+a710 uniA710 2.27 +U+a711 uniA711 2.27 +U+a712 uniA712 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a713 uniA713 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a714 uniA714 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a715 uniA715 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a716 uniA716 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+a71b uniA71B 2.27 +U+a71c uniA71C 2.27 +U+a71d uniA71D 2.27 +U+a71e uniA71E 2.27 +U+a71f uniA71F 2.27 +U+a726 uniA726 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+a727 uniA727 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+a728 uniA728 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a729 uniA729 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a72a uniA72A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a72b uniA72B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a730 uniA730 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a731 uniA731 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a732 uniA732 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a733 uniA733 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a734 uniA734 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a735 uniA735 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a736 uniA736 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a737 uniA737 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a738 uniA738 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a739 uniA739 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a73a uniA73A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a73b uniA73B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a73c uniA73C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a73d uniA73D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a73e uniA73E 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a73f uniA73F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a746 uniA746 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a747 uniA747 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a748 uniA748 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a749 uniA749 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a74a uniA74A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a74b uniA74B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a74e uniA74E 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a74f uniA74F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a780 uniA780 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a781 uniA781 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a782 uniA782 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a783 uniA783 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a789 uniA789 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a78a uniA78A 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a78b uniA78B 2.26 +U+a78c uniA78C 2.26 +U+a7fb uniA7FB 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a7fc uniA7FC 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a7fd uniA7FD 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a7fe uniA7FE 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a7ff uniA7FF 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e000 uniE000 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e001 uniE001 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e002 uniE002 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e003 uniE003 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e004 uniE004 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e005 uniE005 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e006 uniE006 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e007 uniE007 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e008 uniE008 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e009 uniE009 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00a uniE00A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00b uniE00B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00c uniE00C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00d uniE00D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00e uniE00E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00f uniE00F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e010 uniE010 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e011 uniE011 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e012 uniE012 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e013 uniE013 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e014 uniE014 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e015 uniE015 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e016 uniE016 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e017 uniE017 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e018 uniE018 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e019 uniE019 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01a uniE01A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01b uniE01B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01c uniE01C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01d uniE01D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f000 uniF000 2.10 (Sans) 2.11 (Sans Condensed) +U+f001 uniF001 2.10 (Sans) 2.11 (Sans Condensed) +U+f208 uniF208 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f20a uniF20A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f215 uniF215 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f216 uniF216 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f217 uniF217 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f21a uniF21A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f21b uniF21B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f25f uniF25F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f400 uniF400 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f401 uniF401 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f402 uniF402 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f403 uniF403 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f404 uniF404 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f405 uniF405 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f406 uniF406 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f407 uniF407 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f408 uniF408 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f409 uniF409 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f40a uniF40A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f40b uniF40B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f40c uniF40C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f40d uniF40D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f40e uniF40E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f40f uniF40F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f410 uniF410 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f411 uniF411 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f412 uniF412 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f413 uniF413 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f414 uniF414 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f415 uniF415 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f416 uniF416 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f417 uniF417 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f418 uniF418 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f419 uniF419 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f41a uniF41A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f41b uniF41B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f41c uniF41C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f41d uniF41D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f41e uniF41E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f41f uniF41F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f420 uniF420 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f421 uniF421 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f422 uniF422 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f423 uniF423 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f424 uniF424 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f425 uniF425 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f426 uniF426 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f428 uniF428 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) +U+f5c5 uniF5C5 2.9 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+f6c4 uniF6C4 2.10 (Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+f6c5 uniF6C5 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.9 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+f6c6 uniF6C6 2.5 (Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6c7 uniF6C7 2.11 (Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6c8 uniF6C8 2.11 (Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6d1 cyrBreve 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6d4 cyrbreve 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb00 uniFB00 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb01 fi original +U+fb02 fl original +U+fb03 uniFB03 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb04 uniFB04 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb05 uniFB05 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb06 uniFB06 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb13 uniFB13 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb14 uniFB14 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb15 uniFB15 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb16 uniFB16 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb17 uniFB17 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb1d uniFB1D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb1e uniFB1E 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb1f uniFB1F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb20 uniFB20 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb21 uniFB21 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb22 uniFB22 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb23 uniFB23 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb24 uniFB24 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb25 uniFB25 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb26 uniFB26 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb27 uniFB27 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb28 uniFB28 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb29 uniFB29 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb2a uniFB2A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2b uniFB2B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2c uniFB2C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2d uniFB2D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2e uniFB2E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2f uniFB2F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb30 uniFB30 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb31 uniFB31 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb32 uniFB32 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb33 uniFB33 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb34 uniFB34 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb35 uniFB35 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb36 uniFB36 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb37 uniFB37 2.11 (Sans Condensed Oblique, Sans Oblique) +U+fb38 uniFB38 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb39 uniFB39 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3a uniFB3A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3b uniFB3B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3c uniFB3C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3e uniFB3E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb40 uniFB40 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb41 uniFB41 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb43 uniFB43 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb44 uniFB44 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb46 uniFB46 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb47 uniFB47 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb48 uniFB48 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb49 uniFB49 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4a uniFB4A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4b uniFB4B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4c uniFB4C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4d uniFB4D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4e uniFB4E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4f uniFB4F 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb52 uniFB52 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb53 uniFB53 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb54 uniFB54 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb55 uniFB55 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb56 uniFB56 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb57 uniFB57 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb58 uniFB58 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb59 uniFB59 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5a uniFB5A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5b uniFB5B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5c uniFB5C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5d uniFB5D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5e uniFB5E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5f uniFB5F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb60 uniFB60 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb61 uniFB61 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb62 uniFB62 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb63 uniFB63 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb64 uniFB64 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb65 uniFB65 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb66 uniFB66 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb67 uniFB67 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb68 uniFB68 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb69 uniFB69 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6a uniFB6A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6b uniFB6B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6c uniFB6C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6d uniFB6D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6e uniFB6E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6f uniFB6F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb70 uniFB70 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb71 uniFB71 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb72 uniFB72 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb73 uniFB73 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb74 uniFB74 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb75 uniFB75 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb76 uniFB76 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb77 uniFB77 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb78 uniFB78 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb79 uniFB79 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7a uniFB7A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7b uniFB7B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7c uniFB7C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7d uniFB7D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7e uniFB7E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7f uniFB7F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb80 uniFB80 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb81 uniFB81 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8a uniFB8A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8b uniFB8B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8c uniFB8C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8d uniFB8D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8e uniFB8E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8f uniFB8F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb90 uniFB90 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb91 uniFB91 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb92 uniFB92 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb93 uniFB93 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb94 uniFB94 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb95 uniFB95 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb9e uniFB9E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb9f uniFB9F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbaa uniFBAA 2.16 (Sans Mono, Sans Mono Bold) +U+fbab uniFBAB 2.16 (Sans Mono, Sans Mono Bold) +U+fbac uniFBAC 2.16 (Sans Mono, Sans Mono Bold) +U+fbad uniFBAD 2.16 (Sans Mono, Sans Mono Bold) +U+fbd9 uniFBD9 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbda uniFBDA 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbe8 uniFBE8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbe9 uniFBE9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbfc uniFBFC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbfd uniFBFD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbfe uniFBFE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbff uniFBFF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe00 uniFE00 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe01 uniFE01 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe02 uniFE02 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe03 uniFE03 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe04 uniFE04 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe05 uniFE05 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe06 uniFE06 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe07 uniFE07 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe08 uniFE08 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe09 uniFE09 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0a uniFE0A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0b uniFE0B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0c uniFE0C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0d uniFE0D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0e uniFE0E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0f uniFE0F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe20 uniFE20 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe21 uniFE21 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe22 uniFE22 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe23 uniFE23 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe70 uniFE70 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe71 uniFE71 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe72 uniFE72 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe73 uniFE73 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe74 uniFE74 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe76 uniFE76 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe77 uniFE77 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe78 uniFE78 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe79 uniFE79 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7a uniFE7A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7b uniFE7B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7c uniFE7C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7d uniFE7D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7e uniFE7E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7f uniFE7F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe80 uniFE80 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe81 uniFE81 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe82 uniFE82 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe83 uniFE83 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe84 uniFE84 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe85 uniFE85 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe86 uniFE86 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe87 uniFE87 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe88 uniFE88 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe89 uniFE89 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8a uniFE8A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8b uniFE8B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8c uniFE8C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8d uniFE8D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8e uniFE8E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8f uniFE8F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe90 uniFE90 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe91 uniFE91 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe92 uniFE92 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe93 uniFE93 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe94 uniFE94 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe95 uniFE95 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe96 uniFE96 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe97 uniFE97 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe98 uniFE98 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe99 uniFE99 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9a uniFE9A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9b uniFE9B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9c uniFE9C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9d uniFE9D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9e uniFE9E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9f uniFE9F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea0 uniFEA0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea1 uniFEA1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea2 uniFEA2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea3 uniFEA3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea4 uniFEA4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea5 uniFEA5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea6 uniFEA6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea7 uniFEA7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea8 uniFEA8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea9 uniFEA9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feaa uniFEAA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feab uniFEAB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feac uniFEAC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fead uniFEAD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feae uniFEAE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feaf uniFEAF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb0 uniFEB0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb1 uniFEB1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb2 uniFEB2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb3 uniFEB3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb4 uniFEB4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb5 uniFEB5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb6 uniFEB6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb7 uniFEB7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb8 uniFEB8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb9 uniFEB9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feba uniFEBA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febb uniFEBB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febc uniFEBC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febd uniFEBD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febe uniFEBE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febf uniFEBF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec0 uniFEC0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec1 uniFEC1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec2 uniFEC2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec3 uniFEC3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec4 uniFEC4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec5 uniFEC5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec6 uniFEC6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec7 uniFEC7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec8 uniFEC8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec9 uniFEC9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feca uniFECA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecb uniFECB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecc uniFECC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecd uniFECD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fece uniFECE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecf uniFECF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed0 uniFED0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed1 uniFED1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed2 uniFED2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed3 uniFED3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed4 uniFED4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed5 uniFED5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed6 uniFED6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed7 uniFED7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed8 uniFED8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed9 uniFED9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feda uniFEDA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedb uniFEDB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedc uniFEDC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedd uniFEDD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fede uniFEDE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedf uniFEDF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee0 uniFEE0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee1 uniFEE1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee2 uniFEE2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee3 uniFEE3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee4 uniFEE4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee5 uniFEE5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee6 uniFEE6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee7 uniFEE7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee8 uniFEE8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee9 uniFEE9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feea uniFEEA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feeb uniFEEB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feec uniFEEC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feed uniFEED 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feee uniFEEE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feef uniFEEF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef0 uniFEF0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef1 uniFEF1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef2 uniFEF2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef3 uniFEF3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef4 uniFEF4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef5 uniFEF5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef6 uniFEF6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef7 uniFEF7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef8 uniFEF8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef9 uniFEF9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fefa uniFEFA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fefb uniFEFB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fefc uniFEFC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feff uniFEFF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fff9 uniFFF9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffa uniFFFA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffb uniFFFB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffc uniFFFC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffd uniFFFD 1.12 +U+1d300 u1D300 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d301 u1D301 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d302 u1D302 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d303 u1D303 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d304 u1D304 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d305 u1D305 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d306 u1D306 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d307 u1D307 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d308 u1D308 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d309 u1D309 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30a u1D30A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30b u1D30B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30c u1D30C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30d u1D30D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30e u1D30E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30f u1D30F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d310 u1D310 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d311 u1D311 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d312 u1D312 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d313 u1D313 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d314 u1D314 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d315 u1D315 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d316 u1D316 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d317 u1D317 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d318 u1D318 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d319 u1D319 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31a u1D31A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31b u1D31B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31c u1D31C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31d u1D31D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31e u1D31E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31f u1D31F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d320 u1D320 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d321 u1D321 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d322 u1D322 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d323 u1D323 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d324 u1D324 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d325 u1D325 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d326 u1D326 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d327 u1D327 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d328 u1D328 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d329 u1D329 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32a u1D32A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32b u1D32B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32c u1D32C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32d u1D32D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32e u1D32E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32f u1D32F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d330 u1D330 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d331 u1D331 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d332 u1D332 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d333 u1D333 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d334 u1D334 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d335 u1D335 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d336 u1D336 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d337 u1D337 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d338 u1D338 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d339 u1D339 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33a u1D33A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33b u1D33B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33c u1D33C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33d u1D33D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33e u1D33E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33f u1D33F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d340 u1D340 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d341 u1D341 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d342 u1D342 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d343 u1D343 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d344 u1D344 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d345 u1D345 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d346 u1D346 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d347 u1D347 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d348 u1D348 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d349 u1D349 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34a u1D34A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34b u1D34B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34c u1D34C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34d u1D34D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34e u1D34E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34f u1D34F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d350 u1D350 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d351 u1D351 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d352 u1D352 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d353 u1D353 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d354 u1D354 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d355 u1D355 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d356 u1D356 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d400 u1D400 2.23 (Serif Bold, Serif Condensed Bold) +U+1d401 u1D401 2.23 (Serif Bold, Serif Condensed Bold) +U+1d402 u1D402 2.23 (Serif Bold, Serif Condensed Bold) +U+1d403 u1D403 2.23 (Serif Bold, Serif Condensed Bold) +U+1d404 u1D404 2.23 (Serif Bold, Serif Condensed Bold) +U+1d405 u1D405 2.23 (Serif Bold, Serif Condensed Bold) +U+1d406 u1D406 2.23 (Serif Bold, Serif Condensed Bold) +U+1d407 u1D407 2.23 (Serif Bold, Serif Condensed Bold) +U+1d408 u1D408 2.23 (Serif Bold, Serif Condensed Bold) +U+1d409 u1D409 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40a u1D40A 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40b u1D40B 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40c u1D40C 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40d u1D40D 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40e u1D40E 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40f u1D40F 2.23 (Serif Bold, Serif Condensed Bold) +U+1d410 u1D410 2.23 (Serif Bold, Serif Condensed Bold) +U+1d411 u1D411 2.23 (Serif Bold, Serif Condensed Bold) +U+1d412 u1D412 2.23 (Serif Bold, Serif Condensed Bold) +U+1d413 u1D413 2.23 (Serif Bold, Serif Condensed Bold) +U+1d414 u1D414 2.23 (Serif Bold, Serif Condensed Bold) +U+1d415 u1D415 2.23 (Serif Bold, Serif Condensed Bold) +U+1d416 u1D416 2.23 (Serif Bold, Serif Condensed Bold) +U+1d417 u1D417 2.23 (Serif Bold, Serif Condensed Bold) +U+1d418 u1D418 2.23 (Serif Bold, Serif Condensed Bold) +U+1d419 u1D419 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41a u1D41A 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41b u1D41B 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41c u1D41C 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41d u1D41D 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41e u1D41E 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41f u1D41F 2.23 (Serif Bold, Serif Condensed Bold) +U+1d420 u1D420 2.23 (Serif Bold, Serif Condensed Bold) +U+1d421 u1D421 2.23 (Serif Bold, Serif Condensed Bold) +U+1d422 u1D422 2.23 (Serif Bold, Serif Condensed Bold) +U+1d423 u1D423 2.23 (Serif Bold, Serif Condensed Bold) +U+1d424 u1D424 2.23 (Serif Bold, Serif Condensed Bold) +U+1d425 u1D425 2.23 (Serif Bold, Serif Condensed Bold) +U+1d426 u1D426 2.23 (Serif Bold, Serif Condensed Bold) +U+1d427 u1D427 2.23 (Serif Bold, Serif Condensed Bold) +U+1d428 u1D428 2.23 (Serif Bold, Serif Condensed Bold) +U+1d429 u1D429 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42a u1D42A 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42b u1D42B 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42c u1D42C 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42d u1D42D 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42e u1D42E 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42f u1D42F 2.23 (Serif Bold, Serif Condensed Bold) +U+1d430 u1D430 2.23 (Serif Bold, Serif Condensed Bold) +U+1d431 u1D431 2.23 (Serif Bold, Serif Condensed Bold) +U+1d432 u1D432 2.23 (Serif Bold, Serif Condensed Bold) +U+1d433 u1D433 2.23 (Serif Bold, Serif Condensed Bold) +U+1d434 u1D434 2.23 (Serif Italic, Serif Italic Condensed) +U+1d435 u1D435 2.23 (Serif Italic, Serif Italic Condensed) +U+1d436 u1D436 2.23 (Serif Italic, Serif Italic Condensed) +U+1d437 u1D437 2.23 (Serif Italic, Serif Italic Condensed) +U+1d438 u1D438 2.23 (Serif Italic, Serif Italic Condensed) +U+1d439 u1D439 2.23 (Serif Italic, Serif Italic Condensed) +U+1d43a u1D43A 2.23 (Serif Italic, Serif Italic Condensed) +U+1d43b u1D43B 2.23 (Serif Italic, Serif Italic Condensed) +U+1d43c u1D43C 2.23 (Serif Italic, Serif Italic Condensed) +U+1d43d u1D43D 2.23 (Serif Italic, Serif Italic Condensed) +U+1d43e u1D43E 2.23 (Serif Italic, Serif Italic Condensed) +U+1d43f u1D43F 2.23 (Serif Italic, Serif Italic Condensed) +U+1d440 u1D440 2.23 (Serif Italic, Serif Italic Condensed) +U+1d441 u1D441 2.23 (Serif Italic, Serif Italic Condensed) +U+1d442 u1D442 2.23 (Serif Italic, Serif Italic Condensed) +U+1d443 u1D443 2.23 (Serif Italic, Serif Italic Condensed) +U+1d444 u1D444 2.23 (Serif Italic, Serif Italic Condensed) +U+1d445 u1D445 2.23 (Serif Italic, Serif Italic Condensed) +U+1d446 u1D446 2.23 (Serif Italic, Serif Italic Condensed) +U+1d447 u1D447 2.23 (Serif Italic, Serif Italic Condensed) +U+1d448 u1D448 2.23 (Serif Italic, Serif Italic Condensed) +U+1d449 u1D449 2.23 (Serif Italic, Serif Italic Condensed) +U+1d44a u1D44A 2.23 (Serif Italic, Serif Italic Condensed) +U+1d44b u1D44B 2.23 (Serif Italic, Serif Italic Condensed) +U+1d44c u1D44C 2.23 (Serif Italic, Serif Italic Condensed) +U+1d44d u1D44D 2.23 (Serif Italic, Serif Italic Condensed) +U+1d44e u1D44E 2.23 (Serif Italic, Serif Italic Condensed) +U+1d44f u1D44F 2.23 (Serif Italic, Serif Italic Condensed) +U+1d450 u1D450 2.23 (Serif Italic, Serif Italic Condensed) +U+1d451 u1D451 2.23 (Serif Italic, Serif Italic Condensed) +U+1d452 u1D452 2.23 (Serif Italic, Serif Italic Condensed) +U+1d453 u1D453 2.23 (Serif Italic, Serif Italic Condensed) +U+1d454 u1D454 2.23 (Serif Italic, Serif Italic Condensed) +U+1d456 u1D456 2.23 (Serif Italic, Serif Italic Condensed) +U+1d457 u1D457 2.23 (Serif Italic, Serif Italic Condensed) +U+1d458 u1D458 2.23 (Serif Italic, Serif Italic Condensed) +U+1d459 u1D459 2.23 (Serif Italic, Serif Italic Condensed) +U+1d45a u1D45A 2.23 (Serif Italic, Serif Italic Condensed) +U+1d45b u1D45B 2.23 (Serif Italic, Serif Italic Condensed) +U+1d45c u1D45C 2.23 (Serif Italic, Serif Italic Condensed) +U+1d45d u1D45D 2.23 (Serif Italic, Serif Italic Condensed) +U+1d45e u1D45E 2.23 (Serif Italic, Serif Italic Condensed) +U+1d45f u1D45F 2.23 (Serif Italic, Serif Italic Condensed) +U+1d460 u1D460 2.23 (Serif Italic, Serif Italic Condensed) +U+1d461 u1D461 2.23 (Serif Italic, Serif Italic Condensed) +U+1d462 u1D462 2.23 (Serif Italic, Serif Italic Condensed) +U+1d463 u1D463 2.23 (Serif Italic, Serif Italic Condensed) +U+1d464 u1D464 2.23 (Serif Italic, Serif Italic Condensed) +U+1d465 u1D465 2.23 (Serif Italic, Serif Italic Condensed) +U+1d466 u1D466 2.23 (Serif Italic, Serif Italic Condensed) +U+1d467 u1D467 2.23 (Serif Italic, Serif Italic Condensed) +U+1d468 u1D468 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d469 u1D469 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46a u1D46A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46b u1D46B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46c u1D46C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46d u1D46D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46e u1D46E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46f u1D46F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d470 u1D470 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d471 u1D471 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d472 u1D472 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d473 u1D473 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d474 u1D474 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d475 u1D475 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d476 u1D476 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d477 u1D477 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d478 u1D478 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d479 u1D479 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47a u1D47A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47b u1D47B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47c u1D47C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47d u1D47D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47e u1D47E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47f u1D47F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d480 u1D480 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d481 u1D481 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d482 u1D482 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d483 u1D483 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d484 u1D484 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d485 u1D485 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d486 u1D486 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d487 u1D487 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d488 u1D488 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d489 u1D489 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48a u1D48A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48b u1D48B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48c u1D48C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48d u1D48D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48e u1D48E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48f u1D48F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d490 u1D490 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d491 u1D491 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d492 u1D492 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d493 u1D493 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d494 u1D494 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d495 u1D495 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d496 u1D496 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d497 u1D497 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d498 u1D498 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d499 u1D499 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d49a u1D49A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d49b u1D49B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d538 u1D538 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d539 u1D539 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d53b u1D53B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d53c u1D53C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d53d u1D53D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d53e u1D53E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d540 u1D540 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d541 u1D541 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d542 u1D542 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d543 u1D543 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d544 u1D544 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d546 u1D546 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54a u1D54A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54b u1D54B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54c u1D54C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54d u1D54D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54e u1D54E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54f u1D54F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d550 u1D550 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d552 u1D552 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d553 u1D553 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d554 u1D554 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d555 u1D555 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d556 u1D556 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d557 u1D557 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d558 u1D558 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d559 u1D559 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55a u1D55A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55b u1D55B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55c u1D55C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55d u1D55D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55e u1D55E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55f u1D55F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d560 u1D560 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d561 u1D561 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d562 u1D562 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d563 u1D563 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d564 u1D564 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d565 u1D565 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d566 u1D566 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d567 u1D567 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d568 u1D568 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d569 u1D569 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d56a u1D56A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d56b u1D56B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d5a0 u1D5A0 2.23 (Sans, Sans Condensed) +U+1d5a1 u1D5A1 2.23 (Sans, Sans Condensed) +U+1d5a2 u1D5A2 2.23 (Sans, Sans Condensed) +U+1d5a3 u1D5A3 2.23 (Sans, Sans Condensed) +U+1d5a4 u1D5A4 2.23 (Sans, Sans Condensed) +U+1d5a5 u1D5A5 2.23 (Sans, Sans Condensed) +U+1d5a6 u1D5A6 2.23 (Sans, Sans Condensed) +U+1d5a7 u1D5A7 2.23 (Sans, Sans Condensed) +U+1d5a8 u1D5A8 2.23 (Sans, Sans Condensed) +U+1d5a9 u1D5A9 2.23 (Sans, Sans Condensed) +U+1d5aa u1D5AA 2.23 (Sans, Sans Condensed) +U+1d5ab u1D5AB 2.23 (Sans, Sans Condensed) +U+1d5ac u1D5AC 2.23 (Sans, Sans Condensed) +U+1d5ad u1D5AD 2.23 (Sans, Sans Condensed) +U+1d5ae u1D5AE 2.23 (Sans, Sans Condensed) +U+1d5af u1D5AF 2.23 (Sans, Sans Condensed) +U+1d5b0 u1D5B0 2.23 (Sans, Sans Condensed) +U+1d5b1 u1D5B1 2.23 (Sans, Sans Condensed) +U+1d5b2 u1D5B2 2.23 (Sans, Sans Condensed) +U+1d5b3 u1D5B3 2.23 (Sans, Sans Condensed) +U+1d5b4 u1D5B4 2.23 (Sans, Sans Condensed) +U+1d5b5 u1D5B5 2.23 (Sans, Sans Condensed) +U+1d5b6 u1D5B6 2.23 (Sans, Sans Condensed) +U+1d5b7 u1D5B7 2.23 (Sans, Sans Condensed) +U+1d5b8 u1D5B8 2.23 (Sans, Sans Condensed) +U+1d5b9 u1D5B9 2.23 (Sans, Sans Condensed) +U+1d5ba u1D5BA 2.23 (Sans, Sans Condensed) +U+1d5bb u1D5BB 2.23 (Sans, Sans Condensed) +U+1d5bc u1D5BC 2.23 (Sans, Sans Condensed) +U+1d5bd u1D5BD 2.23 (Sans, Sans Condensed) +U+1d5be u1D5BE 2.23 (Sans, Sans Condensed) +U+1d5bf u1D5BF 2.23 (Sans, Sans Condensed) +U+1d5c0 u1D5C0 2.23 (Sans, Sans Condensed) +U+1d5c1 u1D5C1 2.23 (Sans, Sans Condensed) +U+1d5c2 u1D5C2 2.23 (Sans, Sans Condensed) +U+1d5c3 u1D5C3 2.23 (Sans, Sans Condensed) +U+1d5c4 u1D5C4 2.23 (Sans, Sans Condensed) +U+1d5c5 u1D5C5 2.23 (Sans, Sans Condensed) +U+1d5c6 u1D5C6 2.23 (Sans, Sans Condensed) +U+1d5c7 u1D5C7 2.23 (Sans, Sans Condensed) +U+1d5c8 u1D5C8 2.23 (Sans, Sans Condensed) +U+1d5c9 u1D5C9 2.23 (Sans, Sans Condensed) +U+1d5ca u1D5CA 2.23 (Sans, Sans Condensed) +U+1d5cb u1D5CB 2.23 (Sans, Sans Condensed) +U+1d5cc u1D5CC 2.23 (Sans, Sans Condensed) +U+1d5cd u1D5CD 2.23 (Sans, Sans Condensed) +U+1d5ce u1D5CE 2.23 (Sans, Sans Condensed) +U+1d5cf u1D5CF 2.23 (Sans, Sans Condensed) +U+1d5d0 u1D5D0 2.23 (Sans, Sans Condensed) +U+1d5d1 u1D5D1 2.23 (Sans, Sans Condensed) +U+1d5d2 u1D5D2 2.23 (Sans, Sans Condensed) +U+1d5d3 u1D5D3 2.23 (Sans, Sans Condensed) +U+1d5d4 u1D5D4 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d5 u1D5D5 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d6 u1D5D6 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d7 u1D5D7 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d8 u1D5D8 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d9 u1D5D9 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5da u1D5DA 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5db u1D5DB 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5dc u1D5DC 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5dd u1D5DD 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5de u1D5DE 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5df u1D5DF 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e0 u1D5E0 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e1 u1D5E1 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e2 u1D5E2 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e3 u1D5E3 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e4 u1D5E4 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e5 u1D5E5 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e6 u1D5E6 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e7 u1D5E7 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e8 u1D5E8 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e9 u1D5E9 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ea u1D5EA 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5eb u1D5EB 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ec u1D5EC 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ed u1D5ED 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ee u1D5EE 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ef u1D5EF 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f0 u1D5F0 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f1 u1D5F1 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f2 u1D5F2 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f3 u1D5F3 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f4 u1D5F4 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f5 u1D5F5 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f6 u1D5F6 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f7 u1D5F7 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f8 u1D5F8 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f9 u1D5F9 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fa u1D5FA 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fb u1D5FB 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fc u1D5FC 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fd u1D5FD 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fe u1D5FE 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ff u1D5FF 2.23 (Sans Bold, Sans Condensed Bold) +U+1d600 u1D600 2.23 (Sans Bold, Sans Condensed Bold) +U+1d601 u1D601 2.23 (Sans Bold, Sans Condensed Bold) +U+1d602 u1D602 2.23 (Sans Bold, Sans Condensed Bold) +U+1d603 u1D603 2.23 (Sans Bold, Sans Condensed Bold) +U+1d604 u1D604 2.23 (Sans Bold, Sans Condensed Bold) +U+1d605 u1D605 2.23 (Sans Bold, Sans Condensed Bold) +U+1d606 u1D606 2.23 (Sans Bold, Sans Condensed Bold) +U+1d607 u1D607 2.23 (Sans Bold, Sans Condensed Bold) +U+1d608 u1D608 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d609 u1D609 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60a u1D60A 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60b u1D60B 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60c u1D60C 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60d u1D60D 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60e u1D60E 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60f u1D60F 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d610 u1D610 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d611 u1D611 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d612 u1D612 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d613 u1D613 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d614 u1D614 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d615 u1D615 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d616 u1D616 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d617 u1D617 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d618 u1D618 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d619 u1D619 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61a u1D61A 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61b u1D61B 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61c u1D61C 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61d u1D61D 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61e u1D61E 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61f u1D61F 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d620 u1D620 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d621 u1D621 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d622 u1D622 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d623 u1D623 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d624 u1D624 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d625 u1D625 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d626 u1D626 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d627 u1D627 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d628 u1D628 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d629 u1D629 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62a u1D62A 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62b u1D62B 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62c u1D62C 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62d u1D62D 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62e u1D62E 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62f u1D62F 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d630 u1D630 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d631 u1D631 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d632 u1D632 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d633 u1D633 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d634 u1D634 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d635 u1D635 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d636 u1D636 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d637 u1D637 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d638 u1D638 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d639 u1D639 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d63a u1D63A 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d63b u1D63B 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d63c u1D63C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d63d u1D63D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d63e u1D63E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d63f u1D63F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d640 u1D640 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d641 u1D641 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d642 u1D642 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d643 u1D643 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d644 u1D644 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d645 u1D645 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d646 u1D646 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d647 u1D647 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d648 u1D648 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d649 u1D649 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64a u1D64A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64b u1D64B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64c u1D64C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64d u1D64D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64e u1D64E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64f u1D64F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d650 u1D650 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d651 u1D651 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d652 u1D652 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d653 u1D653 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d654 u1D654 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d655 u1D655 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d656 u1D656 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d657 u1D657 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d658 u1D658 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d659 u1D659 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65a u1D65A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65b u1D65B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65c u1D65C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65d u1D65D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65e u1D65E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65f u1D65F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d660 u1D660 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d661 u1D661 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d662 u1D662 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d663 u1D663 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d664 u1D664 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d665 u1D665 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d666 u1D666 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d667 u1D667 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d668 u1D668 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d669 u1D669 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66a u1D66A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66b u1D66B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66c u1D66C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66d u1D66D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66e u1D66E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66f u1D66F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d670 u1D670 2.23 (Sans Mono) +U+1d671 u1D671 2.23 (Sans Mono) +U+1d672 u1D672 2.23 (Sans Mono) +U+1d673 u1D673 2.23 (Sans Mono) +U+1d674 u1D674 2.23 (Sans Mono) +U+1d675 u1D675 2.23 (Sans Mono) +U+1d676 u1D676 2.23 (Sans Mono) +U+1d677 u1D677 2.23 (Sans Mono) +U+1d678 u1D678 2.23 (Sans Mono) +U+1d679 u1D679 2.23 (Sans Mono) +U+1d67a u1D67A 2.23 (Sans Mono) +U+1d67b u1D67B 2.23 (Sans Mono) +U+1d67c u1D67C 2.23 (Sans Mono) +U+1d67d u1D67D 2.23 (Sans Mono) +U+1d67e u1D67E 2.23 (Sans Mono) +U+1d67f u1D67F 2.23 (Sans Mono) +U+1d680 u1D680 2.23 (Sans Mono) +U+1d681 u1D681 2.23 (Sans Mono) +U+1d682 u1D682 2.23 (Sans Mono) +U+1d683 u1D683 2.23 (Sans Mono) +U+1d684 u1D684 2.23 (Sans Mono) +U+1d685 u1D685 2.23 (Sans Mono) +U+1d686 u1D686 2.23 (Sans Mono) +U+1d687 u1D687 2.23 (Sans Mono) +U+1d688 u1D688 2.23 (Sans Mono) +U+1d689 u1D689 2.23 (Sans Mono) +U+1d68a u1D68A 2.23 (Sans Mono) +U+1d68b u1D68B 2.23 (Sans Mono) +U+1d68c u1D68C 2.23 (Sans Mono) +U+1d68d u1D68D 2.23 (Sans Mono) +U+1d68e u1D68E 2.23 (Sans Mono) +U+1d68f u1D68F 2.23 (Sans Mono) +U+1d690 u1D690 2.23 (Sans Mono) +U+1d691 u1D691 2.23 (Sans Mono) +U+1d692 u1D692 2.23 (Sans Mono) +U+1d693 u1D693 2.23 (Sans Mono) +U+1d694 u1D694 2.23 (Sans Mono) +U+1d695 u1D695 2.23 (Sans Mono) +U+1d696 u1D696 2.23 (Sans Mono) +U+1d697 u1D697 2.23 (Sans Mono) +U+1d698 u1D698 2.23 (Sans Mono) +U+1d699 u1D699 2.23 (Sans Mono) +U+1d69a u1D69A 2.23 (Sans Mono) +U+1d69b u1D69B 2.23 (Sans Mono) +U+1d69c u1D69C 2.23 (Sans Mono) +U+1d69d u1D69D 2.23 (Sans Mono) +U+1d69e u1D69E 2.23 (Sans Mono) +U+1d69f u1D69F 2.23 (Sans Mono) +U+1d6a0 u1D6A0 2.23 (Sans Mono) +U+1d6a1 u1D6A1 2.23 (Sans Mono) +U+1d6a2 u1D6A2 2.23 (Sans Mono) +U+1d6a3 u1D6A3 2.23 (Sans Mono) +U+1d6a4 u1D6A4 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6a5 u1D6A5 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6a8 u1D6A8 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6a9 u1D6A9 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6aa u1D6AA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ab u1D6AB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ac u1D6AC 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ad u1D6AD 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ae u1D6AE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6af u1D6AF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b0 u1D6B0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b1 u1D6B1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b2 u1D6B2 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b3 u1D6B3 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b4 u1D6B4 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b5 u1D6B5 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b6 u1D6B6 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b7 u1D6B7 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b8 u1D6B8 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b9 u1D6B9 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ba u1D6BA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6bb u1D6BB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6bc u1D6BC 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6bd u1D6BD 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6be u1D6BE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6bf u1D6BF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c0 u1D6C0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c1 u1D6C1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c2 u1D6C2 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c3 u1D6C3 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c4 u1D6C4 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c5 u1D6C5 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c6 u1D6C6 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c7 u1D6C7 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c8 u1D6C8 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c9 u1D6C9 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ca u1D6CA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6cb u1D6CB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6cc u1D6CC 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6cd u1D6CD 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ce u1D6CE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6cf u1D6CF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d0 u1D6D0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d1 u1D6D1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d2 u1D6D2 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d3 u1D6D3 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d4 u1D6D4 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d5 u1D6D5 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d6 u1D6D6 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d7 u1D6D7 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d8 u1D6D8 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d9 u1D6D9 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6da u1D6DA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6db u1D6DB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6dc u1D6DC 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6dd u1D6DD 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6de u1D6DE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6df u1D6DF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6e0 u1D6E0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6e1 u1D6E1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6e2 u1D6E2 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6e3 u1D6E3 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6e4 u1D6E4 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6e5 u1D6E5 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6e6 u1D6E6 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6e7 u1D6E7 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6e8 u1D6E8 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6e9 u1D6E9 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6ea u1D6EA 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6eb u1D6EB 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6ec u1D6EC 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6ed u1D6ED 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6ee u1D6EE 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6ef u1D6EF 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6f0 u1D6F0 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6f1 u1D6F1 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6f2 u1D6F2 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6f3 u1D6F3 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6f4 u1D6F4 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6f5 u1D6F5 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6f6 u1D6F6 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6f7 u1D6F7 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6f8 u1D6F8 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6f9 u1D6F9 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6fa u1D6FA 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6fb u1D6FB 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6fc u1D6FC 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6fd u1D6FD 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6fe u1D6FE 2.23 (Serif Italic, Serif Italic Condensed) +U+1d6ff u1D6FF 2.23 (Serif Italic, Serif Italic Condensed) +U+1d700 u1D700 2.23 (Serif Italic, Serif Italic Condensed) +U+1d701 u1D701 2.23 (Serif Italic, Serif Italic Condensed) +U+1d702 u1D702 2.23 (Serif Italic, Serif Italic Condensed) +U+1d703 u1D703 2.23 (Serif Italic, Serif Italic Condensed) +U+1d704 u1D704 2.23 (Serif Italic, Serif Italic Condensed) +U+1d705 u1D705 2.23 (Serif Italic, Serif Italic Condensed) +U+1d706 u1D706 2.23 (Serif Italic, Serif Italic Condensed) +U+1d707 u1D707 2.23 (Serif Italic, Serif Italic Condensed) +U+1d708 u1D708 2.23 (Serif Italic, Serif Italic Condensed) +U+1d709 u1D709 2.23 (Serif Italic, Serif Italic Condensed) +U+1d70a u1D70A 2.23 (Serif Italic, Serif Italic Condensed) +U+1d70b u1D70B 2.23 (Serif Italic, Serif Italic Condensed) +U+1d70c u1D70C 2.23 (Serif Italic, Serif Italic Condensed) +U+1d70d u1D70D 2.23 (Serif Italic, Serif Italic Condensed) +U+1d70e u1D70E 2.23 (Serif Italic, Serif Italic Condensed) +U+1d70f u1D70F 2.23 (Serif Italic, Serif Italic Condensed) +U+1d710 u1D710 2.23 (Serif Italic, Serif Italic Condensed) +U+1d711 u1D711 2.23 (Serif Italic, Serif Italic Condensed) +U+1d712 u1D712 2.23 (Serif Italic, Serif Italic Condensed) +U+1d713 u1D713 2.23 (Serif Italic, Serif Italic Condensed) +U+1d714 u1D714 2.23 (Serif Italic, Serif Italic Condensed) +U+1d715 u1D715 2.23 (Serif Italic, Serif Italic Condensed) +U+1d716 u1D716 2.23 (Serif Italic, Serif Italic Condensed) +U+1d717 u1D717 2.23 (Serif Italic, Serif Italic Condensed) +U+1d718 u1D718 2.23 (Serif Italic, Serif Italic Condensed) +U+1d719 u1D719 2.23 (Serif Italic, Serif Italic Condensed) +U+1d71a u1D71A 2.23 (Serif Italic, Serif Italic Condensed) +U+1d71b u1D71B 2.23 (Serif Italic, Serif Italic Condensed) +U+1d71c u1D71C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d71d u1D71D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d71e u1D71E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d71f u1D71F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d720 u1D720 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d721 u1D721 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d722 u1D722 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d723 u1D723 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d724 u1D724 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d725 u1D725 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d726 u1D726 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d727 u1D727 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d728 u1D728 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d729 u1D729 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72a u1D72A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72b u1D72B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72c u1D72C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72d u1D72D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72e u1D72E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72f u1D72F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d730 u1D730 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d731 u1D731 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d732 u1D732 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d733 u1D733 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d734 u1D734 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d735 u1D735 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d736 u1D736 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d737 u1D737 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d738 u1D738 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d739 u1D739 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73a u1D73A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73b u1D73B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73c u1D73C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73d u1D73D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73e u1D73E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73f u1D73F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d740 u1D740 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d741 u1D741 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d742 u1D742 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d743 u1D743 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d744 u1D744 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d745 u1D745 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d746 u1D746 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d747 u1D747 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d748 u1D748 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d749 u1D749 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74a u1D74A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74b u1D74B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74c u1D74C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74d u1D74D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74e u1D74E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74f u1D74F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d750 u1D750 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d751 u1D751 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d752 u1D752 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d753 u1D753 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d754 u1D754 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d755 u1D755 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d756 u1D756 2.23 (Sans Bold, Sans Condensed Bold) +U+1d757 u1D757 2.23 (Sans Bold, Sans Condensed Bold) +U+1d758 u1D758 2.23 (Sans Bold, Sans Condensed Bold) +U+1d759 u1D759 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75a u1D75A 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75b u1D75B 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75c u1D75C 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75d u1D75D 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75e u1D75E 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75f u1D75F 2.23 (Sans Bold, Sans Condensed Bold) +U+1d760 u1D760 2.23 (Sans Bold, Sans Condensed Bold) +U+1d761 u1D761 2.23 (Sans Bold, Sans Condensed Bold) +U+1d762 u1D762 2.23 (Sans Bold, Sans Condensed Bold) +U+1d763 u1D763 2.23 (Sans Bold, Sans Condensed Bold) +U+1d764 u1D764 2.23 (Sans Bold, Sans Condensed Bold) +U+1d765 u1D765 2.23 (Sans Bold, Sans Condensed Bold) +U+1d766 u1D766 2.23 (Sans Bold, Sans Condensed Bold) +U+1d767 u1D767 2.23 (Sans Bold, Sans Condensed Bold) +U+1d768 u1D768 2.23 (Sans Bold, Sans Condensed Bold) +U+1d769 u1D769 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76a u1D76A 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76b u1D76B 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76c u1D76C 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76d u1D76D 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76e u1D76E 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76f u1D76F 2.23 (Sans Bold, Sans Condensed Bold) +U+1d770 u1D770 2.23 (Sans Bold, Sans Condensed Bold) +U+1d771 u1D771 2.23 (Sans Bold, Sans Condensed Bold) +U+1d772 u1D772 2.23 (Sans Bold, Sans Condensed Bold) +U+1d773 u1D773 2.23 (Sans Bold, Sans Condensed Bold) +U+1d774 u1D774 2.23 (Sans Bold, Sans Condensed Bold) +U+1d775 u1D775 2.23 (Sans Bold, Sans Condensed Bold) +U+1d776 u1D776 2.23 (Sans Bold, Sans Condensed Bold) +U+1d777 u1D777 2.23 (Sans Bold, Sans Condensed Bold) +U+1d778 u1D778 2.23 (Sans Bold, Sans Condensed Bold) +U+1d779 u1D779 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77a u1D77A 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77b u1D77B 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77c u1D77C 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77d u1D77D 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77e u1D77E 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77f u1D77F 2.23 (Sans Bold, Sans Condensed Bold) +U+1d780 u1D780 2.23 (Sans Bold, Sans Condensed Bold) +U+1d781 u1D781 2.23 (Sans Bold, Sans Condensed Bold) +U+1d782 u1D782 2.23 (Sans Bold, Sans Condensed Bold) +U+1d783 u1D783 2.23 (Sans Bold, Sans Condensed Bold) +U+1d784 u1D784 2.23 (Sans Bold, Sans Condensed Bold) +U+1d785 u1D785 2.23 (Sans Bold, Sans Condensed Bold) +U+1d786 u1D786 2.23 (Sans Bold, Sans Condensed Bold) +U+1d787 u1D787 2.23 (Sans Bold, Sans Condensed Bold) +U+1d788 u1D788 2.23 (Sans Bold, Sans Condensed Bold) +U+1d789 u1D789 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78a u1D78A 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78b u1D78B 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78c u1D78C 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78d u1D78D 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78e u1D78E 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78f u1D78F 2.23 (Sans Bold, Sans Condensed Bold) +U+1d790 u1D790 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d791 u1D791 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d792 u1D792 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d793 u1D793 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d794 u1D794 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d795 u1D795 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d796 u1D796 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d797 u1D797 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d798 u1D798 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d799 u1D799 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79a u1D79A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79b u1D79B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79c u1D79C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79d u1D79D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79e u1D79E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79f u1D79F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a0 u1D7A0 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a1 u1D7A1 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a2 u1D7A2 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a3 u1D7A3 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a4 u1D7A4 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a5 u1D7A5 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a6 u1D7A6 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a7 u1D7A7 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a8 u1D7A8 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a9 u1D7A9 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7aa u1D7AA 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ab u1D7AB 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ac u1D7AC 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ad u1D7AD 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ae u1D7AE 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7af u1D7AF 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b0 u1D7B0 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b1 u1D7B1 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b2 u1D7B2 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b3 u1D7B3 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b4 u1D7B4 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b5 u1D7B5 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b6 u1D7B6 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b7 u1D7B7 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b8 u1D7B8 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b9 u1D7B9 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ba u1D7BA 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7bb u1D7BB 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7bc u1D7BC 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7bd u1D7BD 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7be u1D7BE 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7bf u1D7BF 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c0 u1D7C0 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c1 u1D7C1 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c2 u1D7C2 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c3 u1D7C3 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c4 u1D7C4 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c5 u1D7C5 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c6 u1D7C6 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c7 u1D7C7 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c8 u1D7C8 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c9 u1D7C9 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ca u1D7CA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7cb u1D7CB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7ce u1D7CE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7cf u1D7CF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d0 u1D7D0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d1 u1D7D1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d2 u1D7D2 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d3 u1D7D3 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d4 u1D7D4 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d5 u1D7D5 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d6 u1D7D6 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d7 u1D7D7 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d8 u1D7D8 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7d9 u1D7D9 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7da u1D7DA 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7db u1D7DB 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7dc u1D7DC 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7dd u1D7DD 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7de u1D7DE 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7df u1D7DF 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7e0 u1D7E0 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7e1 u1D7E1 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7e2 u1D7E2 2.23 (Sans, Sans Condensed) +U+1d7e3 u1D7E3 2.23 (Sans, Sans Condensed) +U+1d7e4 u1D7E4 2.23 (Sans, Sans Condensed) +U+1d7e5 u1D7E5 2.23 (Sans, Sans Condensed) +U+1d7e6 u1D7E6 2.23 (Sans, Sans Condensed) +U+1d7e7 u1D7E7 2.23 (Sans, Sans Condensed) +U+1d7e8 u1D7E8 2.23 (Sans, Sans Condensed) +U+1d7e9 u1D7E9 2.23 (Sans, Sans Condensed) +U+1d7ea u1D7EA 2.23 (Sans, Sans Condensed) +U+1d7eb u1D7EB 2.23 (Sans, Sans Condensed) +U+1d7ec u1D7EC 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7ed u1D7ED 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7ee u1D7EE 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7ef u1D7EF 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f0 u1D7F0 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f1 u1D7F1 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f2 u1D7F2 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f3 u1D7F3 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f4 u1D7F4 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f5 u1D7F5 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f6 u1D7F6 2.23 (Sans Mono) +U+1d7f7 u1D7F7 2.23 (Sans Mono) +U+1d7f8 u1D7F8 2.23 (Sans Mono) +U+1d7f9 u1D7F9 2.23 (Sans Mono) +U+1d7fa u1D7FA 2.23 (Sans Mono) +U+1d7fb u1D7FB 2.23 (Sans Mono) +U+1d7fc u1D7FC 2.23 (Sans Mono) +U+1d7fd u1D7FD 2.23 (Sans Mono) +U+1d7fe u1D7FE 2.23 (Sans Mono) +U+1d7ff u1D7FF 2.23 (Sans Mono) diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/unicover.txt b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/unicover.txt new file mode 100755 index 00000000..da2ccff9 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavu-fonts-ttf-2.30/unicover.txt @@ -0,0 +1,177 @@ +This is the Unicode coverage file for DejaVu fonts +($Id$) + +Control and similar characters are discounted from totals. + + Sans Serif Sans Mono +U+0000 Basic Latin 100% (95/95) 100% (95/95) 100% (95/95) +U+0080 Latin-1 Supplement 100% (96/96) 100% (96/96) 100% (96/96) +U+0100 Latin Extended-A 100% (128/128) 100% (128/128) 100% (128/128) +U+0180 Latin Extended-B 100% (208/208) 91% (191/208) 86% (179/208) +U+0250 IPA Extensions 100% (96/96) 100% (96/96) 100% (96/96) +U+02b0 Spacing Modifier Letters 78% (63/80) 56% (45/80) 60% (48/80) +U+0300 Combining Diacritical Marks 83% (93/112) 60% (68/112) 59% (67/112) +U+0370 Greek and Coptic 100% (134/134) 85% (115/134) 82% (110/134) +U+0400 Cyrillic 100% (256/256) 78% (200/256) 69% (178/256) +U+0500 Cyrillic Supplement 94% (34/36) 27% (10/36) 16% (6/36) +U+0530 Armenian 100% (86/86) (0/86) (0/86) +U+0590 Hebrew 62% (54/87) (0/87) (0/87) +U+0600 Arabic 46% (115/250) (0/250) 39% (99/250) +U+0700 Syriac (0/77) (0/77) (0/77) +U+0750 Arabic Supplement (0/48) (0/48) (0/48) +U+0780 Thaana (0/50) (0/50) (0/50) +U+07c0 NKo 91% (54/59) (0/59) (0/59) +U+0900 Devanagari (0/113) (0/113) (0/113) +U+0980 Bengali (0/91) (0/91) (0/91) +U+0a00 Gurmukhi (0/79) (0/79) (0/79) +U+0a80 Gujarati (0/83) (0/83) (0/83) +U+0b00 Oriya (0/84) (0/84) (0/84) +U+0b80 Tamil (0/72) (0/72) (0/72) +U+0c00 Telugu (0/93) (0/93) (0/93) +U+0c80 Kannada (0/86) (0/86) (0/86) +U+0d00 Malayalam (0/95) (0/95) (0/95) +U+0d80 Sinhala (0/80) (0/80) (0/80) +U+0e00 Thai 1% (1/87) (0/87) (0/87) +U+0e80 Lao 100% (65/65) (0/65) 70% (46/65) +U+0f00 Tibetan (0/201) (0/201) (0/201) +U+1000 Myanmar (0/156) (0/156) (0/156) +U+10a0 Georgian 100% (83/83) 100% (83/83) 54% (45/83) +U+1100 Hangul Jamo (0/240) (0/240) (0/240) +U+1200 Ethiopic (0/356) (0/356) (0/356) +U+1380 Ethiopic Supplement (0/26) (0/26) (0/26) +U+13a0 Cherokee (0/85) (0/85) (0/85) +U+1400 Unified Canadian Aboriginal Syllabics 64% (404/630) (0/630) (0/630) +U+1680 Ogham 100% (29/29) (0/29) (0/29) +U+16a0 Runic (0/81) (0/81) (0/81) +U+1700 Tagalog (0/20) (0/20) (0/20) +U+1720 Hanunoo (0/23) (0/23) (0/23) +U+1740 Buhid (0/20) (0/20) (0/20) +U+1760 Tagbanwa (0/18) (0/18) (0/18) +U+1780 Khmer (0/114) (0/114) (0/114) +U+1800 Mongolian (0/156) (0/156) (0/156) +U+1900 Limbu (0/66) (0/66) (0/66) +U+1950 Tai Le (0/35) (0/35) (0/35) +U+1980 New Tai Lue (0/80) (0/80) (0/80) +U+19e0 Khmer Symbols (0/32) (0/32) (0/32) +U+1a00 Buginese (0/30) (0/30) (0/30) +U+1b00 Balinese (0/121) (0/121) (0/121) +U+1b80 Sundanese (0/55) (0/55) (0/55) +U+1c00 Lepcha (0/74) (0/74) (0/74) +U+1c50 Ol Chiki (0/48) (0/48) (0/48) +U+1d00 Phonetic Extensions 82% (105/128) 48% (62/128) 48% (62/128) +U+1d80 Phonetic Extensions Supplement 59% (38/64) 57% (37/64) 57% (37/64) +U+1dc0 Combining Diacritical Marks Supplement 14% (6/41) 14% (6/41) (0/41) +U+1e00 Latin Extended Additional 96% (248/256) 76% (196/256) 71% (182/256) +U+1f00 Greek Extended 100% (233/233) 100% (233/233) 100% (233/233) +U+2000 General Punctuation 98% (105/107) 81% (87/107) 47% (51/107) +U+2070 Superscripts and Subscripts 100% (34/34) 100% (34/34) 100% (34/34) +U+20a0 Currency Symbols 100% (22/22) 27% (6/22) 100% (22/22) +U+20d0 Combining Diacritical Marks for Symbols 21% (7/33) (0/33) (0/33) +U+2100 Letterlike Symbols 93% (75/80) 40% (32/80) 21% (17/80) +U+2150 Number Forms 92% (50/54) 92% (50/54) 24% (13/54) +U+2190 Arrows 100% (112/112) 100% (112/112) 100% (112/112) +U+2200 Mathematical Operators 100% (256/256) 39% (100/256) 58% (151/256) +U+2300 Miscellaneous Technical 27% (64/232) 6% (16/232) 50% (117/232) +U+2400 Control Pictures 5% (2/39) 2% (1/39) 2% (1/39) +U+2440 Optical Character Recognition (0/11) (0/11) (0/11) +U+2460 Enclosed Alphanumerics 6% (10/160) (0/160) (0/160) +U+2500 Box Drawing 100% (128/128) 100% (128/128) 100% (128/128) +U+2580 Block Elements 100% (32/32) 100% (32/32) 100% (32/32) +U+25a0 Geometric Shapes 100% (96/96) 100% (96/96) 100% (96/96) +U+2600 Miscellaneous Symbols 95% (182/191) 15% (30/191) 78% (149/191) +U+2700 Dingbats 100% (174/174) 0% (1/174) 82% (144/174) +U+27c0 Miscellaneous Mathematical Symbols-A 20% (9/44) 11% (5/44) 11% (5/44) +U+27f0 Supplemental Arrows-A 100% (16/16) 100% (16/16) (0/16) +U+2800 Braille Patterns 100% (256/256) 100% (256/256) (0/256) +U+2900 Supplemental Arrows-B 4% (6/128) 100% (128/128) (0/128) +U+2980 Miscellaneous Mathematical Symbols-B 10% (13/128) 0% (1/128) 2% (3/128) +U+2a00 Supplemental Mathematical Operators 28% (72/256) 1% (4/256) 0% (1/256) +U+2b00 Miscellaneous Symbols and Arrows 42% (35/82) 32% (27/82) 10% (9/82) +U+2c00 Glagolitic (0/94) (0/94) (0/94) +U+2c60 Latin Extended-C 96% (28/29) 55% (16/29) 34% (10/29) +U+2c80 Coptic (0/114) (0/114) (0/114) +U+2d00 Georgian Supplement (0/38) 100% (38/38) (0/38) +U+2d30 Tifinagh 100% (55/55) (0/55) (0/55) +U+2d80 Ethiopic Extended (0/79) (0/79) (0/79) +U+2de0 Cyrillic Extended-A (0/32) (0/32) (0/32) +U+2e00 Supplemental Punctuation 12% (6/49) 12% (6/49) 12% (6/49) +U+2e80 CJK Radicals Supplement (0/115) (0/115) (0/115) +U+2f00 Kangxi Radicals (0/214) (0/214) (0/214) +U+2ff0 Ideographic Description Characters (0/12) (0/12) (0/12) +U+3000 CJK Symbols and Punctuation (0/64) (0/64) (0/64) +U+3040 Hiragana (0/93) (0/93) (0/93) +U+30a0 Katakana (0/96) (0/96) (0/96) +U+3100 Bopomofo (0/41) (0/41) (0/41) +U+3130 Hangul Compatibility Jamo (0/94) (0/94) (0/94) +U+3190 Kanbun (0/16) (0/16) (0/16) +U+31a0 Bopomofo Extended (0/24) (0/24) (0/24) +U+31c0 CJK Strokes (0/36) (0/36) (0/36) +U+31f0 Katakana Phonetic Extensions (0/16) (0/16) (0/16) +U+3200 Enclosed CJK Letters and Months (0/242) (0/242) (0/242) +U+3300 CJK Compatibility (0/256) (0/256) (0/256) +U+3400 CJK Unified Ideographs Extension A (0/0) (0/0) (0/0) +U+4dc0 Yijing Hexagram Symbols 100% (64/64) (0/64) (0/64) +U+4e00 CJK Unified Ideographs (0/0) (0/0) (0/0) +U+a000 Yi Syllables (0/1165) (0/1165) (0/1165) +U+a490 Yi Radicals (0/55) (0/55) (0/55) +U+a500 Vai (0/300) (0/300) (0/300) +U+a640 Cyrillic Extended-B 39% (31/78) 12% (10/78) (0/78) +U+a700 Modifier Tone Letters 62% (20/32) 62% (20/32) 62% (20/32) +U+a720 Latin Extended-D 37% (43/114) 1% (2/114) 5% (6/114) +U+a800 Syloti Nagri (0/44) (0/44) (0/44) +U+a840 Phags-pa (0/56) (0/56) (0/56) +U+a880 Saurashtra (0/81) (0/81) (0/81) +U+a900 Kayah Li (0/48) (0/48) (0/48) +U+a930 Rejang (0/37) (0/37) (0/37) +U+aa00 Cham (0/83) (0/83) (0/83) +U+ac00 Hangul Syllables (0/0) (0/0) (0/0) +U+d800 High Surrogates (0/0) (0/0) (0/0) +U+db80 High Private Use Surrogates (0/0) (0/0) (0/0) +U+dc00 Low Surrogates (0/0) (0/0) (0/0) +U+e000 Private Use Area (0/0) (0/0) (0/0) +U+f900 CJK Compatibility Ideographs (0/467) (0/467) (0/467) +U+fb00 Alphabetic Presentation Forms 100% (58/58) 12% (7/58) 3% (2/58) +U+fb50 Arabic Presentation Forms-A 11% (70/595) (0/595) 12% (72/595) +U+fe00 Variation Selectors 100% (16/16) 100% (16/16) (0/16) +U+fe10 Vertical Forms (0/10) (0/10) (0/10) +U+fe20 Combining Half Marks 57% (4/7) (0/7) (0/7) +U+fe30 CJK Compatibility Forms (0/32) (0/32) (0/32) +U+fe50 Small Form Variants (0/26) (0/26) (0/26) +U+fe70 Arabic Presentation Forms-B 100% (141/141) (0/141) 100% (141/141) +U+ff00 Halfwidth and Fullwidth Forms (0/225) (0/225) (0/225) +U+fff0 Specials 100% (5/5) 100% (5/5) 100% (5/5) +U+10000 Linear B Syllabary (0/88) (0/88) (0/88) +U+10080 Linear B Ideograms (0/123) (0/123) (0/123) +U+10100 Aegean Numbers (0/57) (0/57) (0/57) +U+10140 Ancient Greek Numbers (0/75) (0/75) (0/75) +U+10190 Ancient Symbols (0/12) (0/12) (0/12) +U+101d0 Phaistos Disc (0/46) (0/46) (0/46) +U+10280 Lycian (0/29) (0/29) (0/29) +U+102a0 Carian (0/49) (0/49) (0/49) +U+10300 Old Italic (0/35) (0/35) (0/35) +U+10330 Gothic (0/27) (0/27) (0/27) +U+10380 Ugaritic (0/31) (0/31) (0/31) +U+103a0 Old Persian (0/50) (0/50) (0/50) +U+10400 Deseret (0/80) (0/80) (0/80) +U+10450 Shavian (0/48) (0/48) (0/48) +U+10480 Osmanya (0/40) (0/40) (0/40) +U+10800 Cypriot Syllabary (0/55) (0/55) (0/55) +U+10900 Phoenician (0/27) (0/27) (0/27) +U+10920 Lydian (0/27) (0/27) (0/27) +U+10a00 Kharoshthi (0/65) (0/65) (0/65) +U+12000 Cuneiform (0/879) (0/879) (0/879) +U+12400 Cuneiform Numbers and Punctuation (0/103) (0/103) (0/103) +U+1d000 Byzantine Musical Symbols (0/246) (0/246) (0/246) +U+1d100 Musical Symbols (0/220) (0/220) (0/220) +U+1d200 Ancient Greek Musical Notation (0/70) (0/70) (0/70) +U+1d300 Tai Xuan Jing Symbols 100% (87/87) (0/87) (0/87) +U+1d360 Counting Rod Numerals (0/18) (0/18) (0/18) +U+1d400 Mathematical Alphanumeric Symbols 11% (117/996) 5% (55/996) 6% (62/996) +U+1f000 Mahjong Tiles (0/44) (0/44) (0/44) +U+1f030 Domino Tiles (0/100) (0/100) (0/100) +U+20000 CJK Unified Ideographs Extension B (0/0) (0/0) (0/0) +U+2f800 CJK Compatibility Ideographs Supplement (0/542) (0/542) (0/542) +U+e0000 Tags (0/98) (0/98) (0/98) +U+e0100 Variation Selectors Supplement (0/240) (0/240) (0/240) +U+f0000 Supplementary Private Use Area-A (0/0) (0/0) (0/0) +U+100000 Supplementary Private Use Area-B (0/0) (0/0) (0/0) diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusans.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusans.ctg.z new file mode 100755 index 00000000..3170ea6f Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusans.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusans.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusans.php new file mode 100755 index 00000000..a216201f --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusans.php @@ -0,0 +1,517 @@ +928,'Descent'=>-236,'CapHeight'=>30,'Flags'=>96,'FontBBox'=>'[-1021 -350 1681 1167]','ItalicAngle'=>20.8,'StemV'=>70,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>318,33=>401,34=>460,35=>838,36=>636,37=>950,38=>780,39=>275,40=>390, +41=>390,42=>500,43=>838,44=>318,45=>361,46=>318,47=>337,48=>636,49=>636,50=>636, +51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838, +61=>838,62=>838,63=>531,64=>1000,65=>684,66=>686,67=>698,68=>770,69=>632,70=>575, +71=>775,72=>752,73=>295,74=>295,75=>656,76=>557,77=>863,78=>748,79=>787,80=>603, +81=>787,82=>695,83=>635,84=>611,85=>732,86=>684,87=>989,88=>685,89=>611,90=>685, +91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>613,98=>635,99=>550,100=>635, +101=>615,102=>352,103=>635,104=>634,105=>278,106=>278,107=>579,108=>278,109=>974,110=>634, +111=>612,112=>635,113=>635,114=>411,115=>521,116=>392,117=>634,118=>592,119=>818,120=>592, +121=>592,122=>525,123=>636,124=>337,125=>636,126=>838,8364=>636,8218=>318,402=>352,8222=>518, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1342,352=>635,8249=>400,338=>1070,381=>685,8216=>318, +8217=>318,8220=>518,8221=>518,8226=>590,8211=>500,8212=>1000,732=>500,8482=>1000,353=>521,8250=>400, +339=>1023,382=>525,376=>611,160=>318,161=>401,162=>636,163=>636,164=>636,165=>636,166=>337, +167=>500,168=>500,169=>1000,170=>471,171=>612,172=>838,173=>361,174=>1000,175=>500,176=>500, +177=>838,178=>401,179=>401,180=>500,181=>636,182=>636,183=>318,184=>500,185=>401,186=>471, +187=>612,188=>969,189=>969,190=>969,191=>531,192=>684,193=>684,194=>684,195=>684,196=>684, +197=>684,198=>974,199=>698,200=>632,201=>632,202=>632,203=>632,204=>295,205=>295,206=>295, +207=>295,208=>775,209=>748,210=>787,211=>787,212=>787,213=>787,214=>787,215=>838,216=>787, +217=>732,218=>732,219=>732,220=>732,221=>611,222=>605,223=>630,224=>613,225=>613,226=>613, +227=>613,228=>613,229=>613,230=>982,231=>550,232=>615,233=>615,234=>615,235=>615,236=>278, +237=>278,238=>278,239=>278,240=>612,241=>634,242=>612,243=>612,244=>612,245=>612,246=>612, +247=>838,248=>612,249=>634,250=>634,251=>634,252=>634,253=>592,254=>635,255=>592,256=>684, +257=>613,258=>684,259=>613,260=>684,261=>613,262=>698,263=>550,264=>698,265=>550,266=>698, +267=>550,268=>698,269=>550,270=>770,271=>635,272=>775,273=>635,274=>632,275=>615,276=>632, +277=>615,278=>632,279=>615,280=>632,281=>615,282=>632,283=>615,284=>775,285=>635,286=>775, +287=>635,288=>775,289=>635,290=>775,291=>635,292=>752,293=>634,294=>916,295=>695,296=>295, +297=>278,298=>295,299=>278,300=>295,301=>278,302=>295,303=>278,304=>295,305=>278,306=>590, +307=>556,308=>295,309=>278,310=>656,311=>579,312=>579,313=>557,314=>278,315=>557,316=>278, +317=>557,318=>375,319=>557,320=>342,321=>562,322=>284,323=>748,324=>634,325=>748,326=>634, +327=>748,328=>634,329=>813,330=>748,331=>634,332=>787,333=>612,334=>787,335=>612,336=>787, +337=>612,340=>695,341=>411,342=>695,343=>411,344=>695,345=>411,346=>635,347=>521,348=>635, +349=>521,350=>635,351=>521,354=>611,355=>392,356=>611,357=>392,358=>611,359=>392,360=>732, +361=>634,362=>732,363=>634,364=>732,365=>634,366=>732,367=>634,368=>732,369=>634,370=>732, +371=>634,372=>989,373=>818,374=>611,375=>592,377=>685,378=>525,379=>685,380=>525,383=>352, +384=>635,385=>735,386=>686,387=>635,388=>686,389=>635,390=>703,391=>698,392=>550,393=>775, +394=>819,395=>686,396=>635,397=>612,398=>632,399=>787,400=>614,401=>575,403=>775,404=>687, +405=>984,406=>354,407=>295,408=>746,409=>579,410=>278,411=>592,412=>974,413=>748,414=>634, +415=>787,416=>913,417=>612,418=>949,419=>759,420=>652,421=>635,422=>695,423=>635,424=>521, +425=>632,426=>336,427=>392,428=>611,429=>392,430=>611,431=>858,432=>634,433=>764,434=>721, +435=>744,436=>730,437=>685,438=>525,439=>666,440=>666,441=>578,442=>525,443=>636,444=>666, +445=>578,446=>510,447=>635,448=>295,449=>492,450=>459,451=>295,452=>1422,453=>1299,454=>1154, +455=>835,456=>787,457=>457,458=>931,459=>924,460=>797,461=>684,462=>613,463=>295,464=>278, +465=>787,466=>612,467=>732,468=>634,469=>732,470=>634,471=>732,472=>634,473=>732,474=>634, +475=>732,476=>634,477=>615,478=>684,479=>613,480=>684,481=>613,482=>974,483=>982,484=>775, +485=>635,486=>775,487=>635,488=>656,489=>579,490=>787,491=>612,492=>787,493=>612,494=>666, +495=>578,496=>278,497=>1422,498=>1299,499=>1154,500=>775,501=>635,502=>1113,503=>682,504=>748, +505=>634,506=>684,507=>613,508=>974,509=>982,510=>787,511=>612,512=>684,513=>613,514=>684, +515=>613,516=>632,517=>615,518=>632,519=>615,520=>295,521=>278,522=>295,523=>278,524=>787, +525=>612,526=>787,527=>612,528=>695,529=>411,530=>695,531=>411,532=>732,533=>634,534=>732, +535=>634,536=>635,537=>521,538=>611,539=>392,540=>627,541=>521,542=>752,543=>634,544=>735, +545=>838,546=>698,547=>610,548=>685,549=>525,550=>684,551=>613,552=>632,553=>615,554=>787, +555=>612,556=>787,557=>612,558=>787,559=>612,560=>787,561=>612,562=>611,563=>592,564=>475, +565=>843,566=>477,567=>278,568=>998,569=>998,570=>684,571=>698,572=>550,573=>557,574=>611, +575=>521,576=>525,577=>603,578=>479,579=>686,580=>732,581=>684,582=>632,583=>615,584=>295, +585=>278,586=>781,587=>635,588=>695,589=>411,590=>611,591=>592,592=>600,593=>635,594=>635, +595=>635,596=>549,597=>550,598=>635,599=>696,600=>615,601=>615,602=>819,603=>541,604=>532, +605=>775,606=>664,607=>278,608=>696,609=>635,610=>629,611=>596,612=>596,613=>634,614=>634, +615=>634,616=>278,617=>338,618=>372,619=>396,620=>487,621=>278,622=>706,623=>974,624=>974, +625=>974,626=>646,627=>642,628=>634,629=>612,630=>858,631=>728,632=>660,633=>414,634=>414, +635=>414,636=>411,637=>411,638=>530,639=>530,640=>604,641=>604,642=>521,643=>336,644=>336, +645=>461,646=>336,647=>392,648=>392,649=>634,650=>618,651=>598,652=>592,653=>818,654=>592, +655=>611,656=>525,657=>525,658=>578,659=>578,660=>510,661=>510,662=>510,663=>510,664=>787, +665=>580,666=>664,667=>708,668=>654,669=>292,670=>667,671=>507,672=>727,673=>510,674=>510, +675=>1014,676=>1058,677=>1013,678=>824,679=>610,680=>778,681=>848,682=>641,683=>654,684=>515, +685=>515,686=>661,687=>664,688=>404,689=>399,690=>175,691=>259,692=>295,693=>296,694=>379, +695=>515,696=>373,697=>278,698=>460,699=>318,700=>318,701=>318,702=>307,703=>307,704=>370, +705=>370,706=>500,707=>500,708=>500,709=>500,711=>500,712=>275,713=>500,714=>500,715=>500, +716=>275,717=>500,718=>500,719=>500,720=>337,721=>337,722=>307,723=>307,724=>500,725=>500, +726=>390,727=>317,728=>500,729=>500,730=>500,731=>500,733=>500,734=>315,735=>500,736=>426, +737=>166,738=>373,739=>444,740=>370,741=>493,742=>493,743=>493,744=>493,745=>493,748=>500, +749=>500,750=>518,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>654,881=>568,882=>862, +883=>647,884=>278,885=>278,886=>748,887=>650,890=>500,891=>549,892=>550,893=>549,894=>337, +900=>500,901=>500,902=>692,903=>318,904=>746,905=>871,906=>408,908=>813,910=>825,911=>826, +912=>338,913=>684,914=>686,915=>557,916=>684,917=>632,918=>685,919=>752,920=>787,921=>295, +922=>656,923=>684,924=>863,925=>748,926=>632,927=>787,928=>752,929=>603,931=>632,932=>611, +933=>611,934=>787,935=>685,936=>787,937=>764,938=>295,939=>611,940=>659,941=>541,942=>634, +943=>338,944=>579,945=>659,946=>638,947=>592,948=>612,949=>541,950=>544,951=>634,952=>612, +953=>338,954=>589,955=>592,956=>636,957=>559,958=>558,959=>612,960=>602,961=>635,962=>587, +963=>634,964=>602,965=>579,966=>660,967=>578,968=>660,969=>837,970=>338,971=>579,972=>612, +973=>579,974=>837,975=>656,976=>614,977=>619,978=>699,979=>842,980=>699,981=>660,982=>837, +983=>664,984=>787,985=>612,986=>648,987=>587,988=>575,989=>458,990=>660,991=>660,992=>865, +993=>627,994=>934,995=>837,996=>758,997=>659,998=>792,999=>615,1000=>687,1001=>607,1002=>768, +1003=>625,1004=>699,1005=>612,1006=>611,1007=>536,1008=>664,1009=>635,1010=>550,1011=>278,1012=>787, +1013=>615,1014=>615,1015=>605,1016=>635,1017=>698,1018=>863,1019=>651,1020=>635,1021=>703,1022=>698, +1023=>703,1024=>632,1025=>632,1026=>786,1027=>610,1028=>698,1029=>635,1030=>295,1031=>295,1032=>295, +1033=>1094,1034=>1045,1035=>786,1036=>710,1037=>748,1038=>609,1039=>752,1040=>684,1041=>686,1042=>686, +1043=>610,1044=>781,1045=>632,1046=>1077,1047=>641,1048=>748,1049=>748,1050=>710,1051=>752,1052=>863, +1053=>752,1054=>787,1055=>752,1056=>603,1057=>698,1058=>611,1059=>609,1060=>861,1061=>685,1062=>776, +1063=>686,1064=>1069,1065=>1094,1066=>833,1067=>882,1068=>686,1069=>698,1070=>1080,1071=>695,1072=>613, +1073=>617,1074=>589,1075=>525,1076=>691,1077=>615,1078=>901,1079=>532,1080=>650,1081=>650,1082=>604, +1083=>639,1084=>754,1085=>654,1086=>612,1087=>654,1088=>635,1089=>550,1090=>583,1091=>592,1092=>855, +1093=>592,1094=>681,1095=>591,1096=>915,1097=>942,1098=>707,1099=>790,1100=>589,1101=>549,1102=>842, +1103=>602,1104=>615,1105=>615,1106=>625,1107=>525,1108=>549,1109=>521,1110=>278,1111=>278,1112=>278, +1113=>902,1114=>898,1115=>652,1116=>604,1117=>650,1118=>592,1119=>654,1120=>934,1121=>837,1122=>771, +1123=>672,1124=>942,1125=>749,1126=>879,1127=>783,1128=>1160,1129=>1001,1130=>787,1131=>612,1132=>1027, +1133=>824,1134=>636,1135=>541,1136=>856,1137=>876,1138=>787,1139=>612,1140=>781,1141=>665,1142=>781, +1143=>665,1144=>992,1145=>904,1146=>953,1147=>758,1148=>1180,1149=>1028,1150=>934,1151=>837,1152=>698, +1153=>550,1154=>502,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>772, +1163=>677,1164=>686,1165=>589,1166=>603,1167=>635,1168=>610,1169=>525,1170=>675,1171=>590,1172=>624, +1173=>530,1174=>1077,1175=>901,1176=>641,1177=>532,1178=>710,1179=>604,1180=>710,1181=>604,1182=>710, +1183=>604,1184=>856,1185=>832,1186=>752,1187=>661,1188=>1014,1189=>877,1190=>1081,1191=>916,1192=>878, +1193=>693,1194=>698,1195=>550,1196=>611,1197=>583,1198=>611,1199=>592,1200=>611,1201=>592,1202=>685, +1203=>592,1204=>934,1205=>807,1206=>686,1207=>591,1208=>686,1209=>591,1210=>686,1211=>634,1212=>941, +1213=>728,1214=>941,1215=>728,1216=>295,1217=>1077,1218=>901,1219=>656,1220=>604,1221=>776,1222=>670, +1223=>752,1224=>661,1225=>776,1226=>681,1227=>686,1228=>591,1229=>888,1230=>774,1231=>278,1232=>684, +1233=>613,1234=>684,1235=>613,1236=>974,1237=>982,1238=>632,1239=>615,1240=>787,1241=>615,1242=>787, +1243=>615,1244=>1077,1245=>901,1246=>641,1247=>532,1248=>666,1249=>578,1250=>748,1251=>650,1252=>748, +1253=>650,1254=>787,1255=>612,1256=>787,1257=>612,1258=>787,1259=>612,1260=>698,1261=>549,1262=>609, +1263=>592,1264=>609,1265=>592,1266=>609,1267=>592,1268=>686,1269=>591,1270=>610,1271=>525,1272=>882, +1273=>790,1274=>675,1275=>590,1276=>685,1277=>592,1278=>685,1279=>592,1280=>686,1281=>589,1282=>1006, +1283=>897,1284=>975,1285=>869,1286=>679,1287=>588,1288=>1072,1289=>957,1290=>1113,1291=>967,1292=>775, +1293=>660,1294=>773,1295=>711,1296=>614,1297=>541,1298=>752,1299=>639,1300=>1169,1301=>994,1302=>894, +1303=>864,1304=>1032,1305=>986,1306=>787,1307=>635,1308=>989,1309=>818,1312=>1081,1313=>905,1314=>1081, +1315=>912,1316=>793,1317=>683,1329=>867,1330=>732,1331=>882,1332=>882,1333=>732,1334=>644,1335=>682, +1336=>732,1337=>851,1338=>882,1339=>732,1340=>557,1341=>824,1342=>986,1343=>732,1344=>707,1345=>644, +1346=>882,1347=>777,1348=>882,1349=>732,1350=>840,1351=>732,1352=>732,1353=>732,1354=>791,1355=>644, +1356=>882,1357=>732,1358=>882,1359=>635,1360=>732,1361=>732,1362=>799,1363=>787,1364=>790,1365=>787, +1366=>635,1369=>307,1370=>318,1371=>500,1372=>500,1373=>392,1374=>526,1375=>500,1377=>974,1378=>634, +1379=>762,1380=>767,1381=>634,1382=>697,1383=>533,1384=>634,1385=>700,1386=>697,1387=>634,1388=>404, +1389=>894,1390=>641,1391=>634,1392=>634,1393=>635,1394=>702,1395=>634,1396=>659,1397=>278,1398=>760, +1399=>516,1400=>634,1401=>453,1402=>974,1403=>516,1404=>769,1405=>634,1406=>696,1407=>974,1408=>634, +1409=>635,1410=>501,1411=>974,1412=>648,1413=>612,1414=>629,1415=>763,1417=>337,1418=>433,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>361,1471=>0,1472=>295,1473=>0,1474=>0,1475=>295,1478=>441, +1479=>0,1488=>629,1489=>608,1490=>448,1491=>594,1492=>640,1493=>272,1494=>374,1495=>640,1496=>648, +1497=>272,1498=>592,1499=>556,1500=>599,1501=>640,1502=>659,1503=>272,1504=>441,1505=>700,1506=>563, +1507=>640,1508=>604,1509=>521,1510=>581,1511=>663,1512=>592,1513=>808,1514=>657,1520=>471,1521=>454, +1522=>471,1523=>416,1524=>645,1542=>637,1543=>637,1545=>757,1546=>977,1548=>323,1557=>0,1563=>318, +1567=>531,1569=>470,1570=>278,1571=>278,1572=>483,1573=>278,1574=>783,1575=>278,1576=>941,1577=>524, +1578=>941,1579=>941,1580=>646,1581=>646,1582=>646,1583=>445,1584=>445,1585=>483,1586=>483,1587=>1221, +1588=>1221,1589=>1209,1590=>1209,1591=>925,1592=>925,1593=>597,1594=>597,1600=>293,1601=>1037,1602=>776, +1603=>824,1604=>727,1605=>619,1606=>734,1607=>524,1608=>483,1609=>783,1610=>783,1611=>0,1612=>0, +1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1626=>500, +1632=>537,1633=>537,1634=>537,1635=>537,1636=>537,1637=>537,1638=>537,1639=>537,1640=>537,1641=>537, +1642=>537,1643=>325,1644=>318,1645=>545,1646=>941,1647=>776,1652=>292,1657=>941,1658=>941,1659=>941, +1660=>941,1661=>941,1662=>941,1663=>941,1664=>941,1665=>646,1666=>646,1667=>646,1668=>646,1669=>646, +1670=>646,1671=>646,1681=>483,1682=>483,1685=>610,1688=>483,1697=>1037,1700=>1037,1702=>1037,1705=>895, +1711=>895,1717=>727,1722=>734,1727=>646,1734=>483,1740=>783,1742=>783,1749=>524,1776=>537,1777=>537, +1778=>537,1779=>537,1780=>537,1781=>537,1782=>537,1783=>537,1784=>537,1785=>537,1984=>636,1985=>636, +1986=>636,1987=>636,1988=>636,1989=>636,1990=>636,1991=>636,1992=>636,1993=>636,1994=>278,1995=>571, +1996=>424,1997=>592,1998=>654,1999=>654,2000=>594,2001=>654,2002=>829,2003=>438,2004=>438,2005=>559, +2006=>612,2007=>350,2008=>959,2009=>473,2010=>783,2011=>654,2012=>625,2013=>734,2014=>530,2015=>724, +2016=>473,2017=>625,2018=>594,2019=>530,2020=>530,2021=>522,2022=>594,2023=>594,2027=>0,2028=>0, +2029=>0,2030=>0,2031=>0,2032=>0,2033=>0,2034=>0,2035=>0,2036=>313,2037=>313,2040=>560, +2041=>560,2042=>361,3647=>652,3713=>670,3714=>684,3716=>688,3719=>482,3720=>628,3722=>684,3725=>688, +3732=>669,3733=>642,3734=>645,3735=>655,3737=>659,3738=>625,3739=>625,3740=>745,3741=>767,3742=>687, +3743=>687,3745=>702,3746=>688,3747=>684,3749=>649,3751=>632,3754=>703,3755=>819,3757=>633,3758=>684, +3759=>788,3760=>632,3761=>0,3762=>539,3763=>539,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0, +3769=>0,3771=>0,3772=>0,3773=>663,3776=>375,3777=>657,3778=>460,3779=>547,3780=>491,3782=>674, +3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>636,3793=>641,3794=>641,3795=>670, +3796=>625,3797=>625,3798=>703,3799=>670,3800=>674,3801=>677,3804=>1028,3805=>1028,4256=>840,4257=>690, +4258=>642,4259=>759,4260=>591,4261=>686,4262=>789,4263=>811,4264=>467,4265=>565,4266=>789,4267=>793, +4268=>584,4269=>837,4270=>750,4271=>688,4272=>811,4273=>584,4274=>584,4275=>837,4276=>837,4277=>646, +4278=>604,4279=>584,4280=>596,4281=>584,4282=>721,4283=>795,4284=>584,4285=>566,4286=>584,4287=>669, +4288=>799,4289=>542,4290=>664,4291=>542,4292=>565,4293=>674,4304=>508,4305=>508,4306=>533,4307=>785, +4308=>522,4309=>517,4310=>508,4311=>797,4312=>507,4313=>518,4314=>1058,4315=>522,4316=>523,4317=>783, +4318=>518,4319=>523,4320=>792,4321=>523,4322=>656,4323=>524,4324=>788,4325=>523,4326=>782,4327=>523, +4328=>522,4329=>522,4330=>566,4331=>523,4332=>523,4333=>489,4334=>522,4335=>498,4336=>517,4337=>560, +4338=>508,4339=>508,4340=>508,4341=>563,4342=>824,4343=>595,4344=>522,4345=>554,4346=>553,4347=>586, +4348=>304,5121=>684,5122=>684,5123=>684,5124=>684,5125=>769,5126=>769,5127=>769,5129=>769,5130=>769, +5131=>769,5132=>835,5133=>834,5134=>835,5135=>834,5136=>835,5137=>834,5138=>967,5139=>1007,5140=>967, +5141=>1007,5142=>769,5143=>967,5144=>1007,5145=>967,5146=>1007,5147=>769,5149=>256,5150=>543,5151=>423, +5152=>423,5153=>389,5154=>389,5155=>393,5156=>389,5157=>466,5158=>385,5159=>256,5160=>389,5161=>389, +5162=>389,5163=>1090,5164=>909,5165=>953,5166=>1117,5167=>684,5168=>684,5169=>684,5170=>684,5171=>729, +5172=>729,5173=>729,5175=>729,5176=>729,5177=>729,5178=>835,5179=>684,5180=>835,5181=>834,5182=>835, +5183=>834,5184=>967,5185=>1007,5186=>967,5187=>1007,5188=>967,5189=>1007,5190=>967,5191=>1007,5192=>729, +5193=>508,5194=>192,5196=>732,5197=>732,5198=>732,5199=>732,5200=>730,5201=>730,5202=>730,5204=>730, +5205=>730,5206=>730,5207=>921,5208=>889,5209=>921,5210=>889,5211=>921,5212=>889,5213=>928,5214=>900, +5215=>928,5216=>900,5217=>947,5218=>900,5219=>947,5220=>900,5221=>947,5222=>434,5223=>877,5224=>877, +5225=>866,5226=>890,5227=>628,5228=>628,5229=>628,5230=>628,5231=>628,5232=>628,5233=>628,5234=>628, +5235=>628,5236=>860,5237=>771,5238=>815,5239=>816,5240=>815,5241=>816,5242=>860,5243=>771,5244=>860, +5245=>771,5246=>815,5247=>816,5248=>815,5249=>816,5250=>815,5251=>407,5252=>407,5253=>750,5254=>775, +5255=>750,5256=>775,5257=>628,5258=>628,5259=>628,5260=>628,5261=>628,5262=>628,5263=>628,5264=>628, +5265=>628,5266=>860,5267=>771,5268=>815,5269=>816,5270=>815,5271=>816,5272=>860,5273=>771,5274=>860, +5275=>771,5276=>815,5277=>816,5278=>815,5279=>816,5280=>815,5281=>435,5282=>435,5283=>610,5284=>557, +5285=>557,5286=>557,5287=>610,5288=>610,5289=>610,5290=>557,5291=>557,5292=>749,5293=>769,5294=>746, +5295=>764,5296=>746,5297=>764,5298=>749,5299=>769,5300=>749,5301=>769,5302=>746,5303=>764,5304=>746, +5305=>764,5306=>746,5307=>386,5308=>508,5309=>386,5312=>852,5313=>852,5314=>852,5315=>852,5316=>852, +5317=>852,5318=>852,5319=>852,5320=>852,5321=>1069,5322=>1035,5323=>1059,5324=>852,5325=>1059,5326=>852, +5327=>852,5328=>600,5329=>453,5330=>600,5331=>852,5332=>852,5333=>852,5334=>852,5335=>852,5336=>852, +5337=>852,5338=>852,5339=>852,5340=>1069,5341=>1035,5342=>1059,5343=>1030,5344=>1059,5345=>1030,5346=>1069, +5347=>1035,5348=>1069,5349=>1035,5350=>1083,5351=>1030,5352=>1083,5353=>1030,5354=>600,5356=>729,5357=>603, +5358=>603,5359=>603,5360=>603,5361=>603,5362=>603,5363=>603,5364=>603,5365=>603,5366=>834,5367=>754, +5368=>792,5369=>771,5370=>792,5371=>771,5372=>834,5373=>754,5374=>834,5375=>754,5376=>792,5377=>771, +5378=>792,5379=>771,5380=>792,5381=>418,5382=>420,5383=>418,5392=>712,5393=>712,5394=>712,5395=>892, +5396=>892,5397=>892,5398=>892,5399=>910,5400=>872,5401=>910,5402=>872,5403=>910,5404=>872,5405=>1140, +5406=>1100,5407=>1140,5408=>1100,5409=>1140,5410=>1100,5411=>1140,5412=>1100,5413=>641,5414=>627,5415=>627, +5416=>627,5417=>627,5418=>627,5419=>627,5420=>627,5421=>627,5422=>627,5423=>844,5424=>781,5425=>816, +5426=>818,5427=>816,5428=>818,5429=>844,5430=>781,5431=>844,5432=>781,5433=>816,5434=>818,5435=>816, +5436=>818,5437=>816,5438=>418,5440=>389,5441=>484,5442=>916,5443=>916,5444=>916,5445=>916,5446=>916, +5447=>916,5448=>603,5449=>603,5450=>603,5451=>603,5452=>603,5453=>603,5454=>834,5455=>754,5456=>418, +5458=>729,5459=>684,5460=>684,5461=>684,5462=>684,5463=>726,5464=>726,5465=>726,5466=>726,5467=>924, +5468=>1007,5469=>508,5470=>732,5471=>732,5472=>732,5473=>732,5474=>732,5475=>732,5476=>730,5477=>730, +5478=>730,5479=>730,5480=>947,5481=>900,5482=>508,5492=>831,5493=>831,5494=>831,5495=>831,5496=>831, +5497=>831,5498=>831,5499=>563,5500=>752,5501=>484,5502=>1047,5503=>1047,5504=>1047,5505=>1047,5506=>1047, +5507=>1047,5508=>1047,5509=>825,5514=>831,5515=>831,5516=>831,5517=>831,5518=>1259,5519=>1259,5520=>1259, +5521=>1002,5522=>1002,5523=>1259,5524=>1259,5525=>700,5526=>1073,5536=>852,5537=>852,5538=>852,5539=>852, +5540=>852,5541=>852,5542=>600,5543=>643,5544=>643,5545=>643,5546=>643,5547=>643,5548=>643,5549=>643, +5550=>418,5551=>628,5598=>770,5601=>767,5702=>468,5703=>468,5742=>444,5743=>1047,5744=>1310,5745=>1632, +5746=>1632,5747=>1375,5748=>1375,5749=>1632,5750=>1632,5760=>477,5761=>493,5762=>712,5763=>931,5764=>1150, +5765=>1370,5766=>493,5767=>712,5768=>931,5769=>1150,5770=>1370,5771=>498,5772=>718,5773=>938,5774=>1159, +5775=>1379,5776=>493,5777=>712,5778=>930,5779=>1149,5780=>1370,5781=>498,5782=>752,5783=>789,5784=>1205, +5785=>1150,5786=>683,5787=>507,5788=>507,7424=>592,7425=>717,7426=>982,7427=>586,7428=>550,7429=>605, +7430=>605,7431=>491,7432=>541,7433=>278,7434=>395,7435=>579,7436=>583,7437=>754,7438=>650,7439=>612, +7440=>550,7441=>684,7442=>684,7443=>684,7444=>1023,7446=>612,7447=>612,7448=>524,7449=>602,7450=>602, +7451=>583,7452=>574,7453=>737,7454=>948,7455=>638,7456=>592,7457=>818,7458=>525,7459=>526,7462=>583, +7463=>592,7464=>564,7465=>524,7466=>590,7467=>639,7468=>431,7469=>613,7470=>432,7472=>485,7473=>398, +7474=>398,7475=>488,7476=>474,7477=>186,7478=>186,7479=>413,7480=>351,7481=>543,7482=>471,7483=>471, +7484=>496,7485=>439,7486=>380,7487=>438,7488=>385,7489=>461,7490=>623,7491=>392,7492=>392,7493=>405, +7494=>648,7495=>428,7496=>405,7497=>417,7498=>417,7499=>360,7500=>359,7501=>405,7502=>179,7503=>426, +7504=>623,7505=>409,7506=>414,7507=>370,7508=>414,7509=>414,7510=>428,7511=>295,7512=>405,7513=>470, +7514=>623,7515=>417,7517=>402,7518=>373,7519=>385,7520=>416,7521=>364,7522=>179,7523=>259,7524=>405, +7525=>417,7526=>402,7527=>373,7528=>412,7529=>416,7530=>364,7543=>635,7544=>474,7547=>372,7557=>278, +7579=>405,7580=>370,7581=>370,7582=>414,7583=>360,7584=>296,7585=>233,7586=>405,7587=>405,7588=>261, +7589=>250,7590=>261,7591=>261,7592=>234,7593=>250,7594=>235,7595=>376,7596=>623,7597=>623,7598=>411, +7599=>479,7600=>409,7601=>414,7602=>414,7603=>360,7604=>287,7605=>295,7606=>508,7607=>418,7608=>361, +7609=>406,7610=>417,7611=>366,7612=>437,7613=>366,7614=>392,7615=>414,7620=>0,7621=>0,7622=>0, +7623=>0,7624=>0,7625=>0,7680=>684,7681=>613,7682=>686,7683=>635,7684=>686,7685=>635,7686=>686, +7687=>635,7688=>698,7689=>550,7690=>770,7691=>635,7692=>770,7693=>635,7694=>770,7695=>635,7696=>770, +7697=>635,7698=>770,7699=>635,7700=>632,7701=>615,7702=>632,7703=>615,7704=>632,7705=>615,7706=>632, +7707=>615,7708=>632,7709=>615,7710=>575,7711=>352,7712=>775,7713=>635,7714=>752,7715=>634,7716=>752, +7717=>634,7718=>752,7719=>634,7720=>752,7721=>634,7722=>752,7723=>634,7724=>295,7725=>278,7726=>295, +7727=>278,7728=>656,7729=>579,7730=>656,7731=>579,7732=>656,7733=>579,7734=>557,7735=>288,7736=>557, +7737=>288,7738=>557,7739=>278,7740=>557,7741=>278,7742=>863,7743=>974,7744=>863,7745=>974,7746=>863, +7747=>974,7748=>748,7749=>634,7750=>748,7751=>634,7752=>748,7753=>634,7754=>748,7755=>634,7756=>787, +7757=>612,7758=>787,7759=>612,7760=>787,7761=>612,7762=>787,7763=>612,7764=>603,7765=>635,7766=>603, +7767=>635,7768=>695,7769=>411,7770=>695,7771=>411,7772=>695,7773=>411,7774=>695,7775=>411,7776=>635, +7777=>521,7778=>635,7779=>521,7780=>635,7781=>521,7782=>635,7783=>521,7784=>635,7785=>521,7786=>611, +7787=>392,7788=>611,7789=>392,7790=>611,7791=>392,7792=>611,7793=>392,7794=>732,7795=>634,7796=>732, +7797=>634,7798=>732,7799=>634,7800=>732,7801=>634,7802=>732,7803=>634,7804=>684,7805=>592,7806=>684, +7807=>592,7808=>989,7809=>818,7810=>989,7811=>818,7812=>989,7813=>818,7814=>989,7815=>818,7816=>989, +7817=>818,7818=>685,7819=>592,7820=>685,7821=>592,7822=>611,7823=>592,7824=>685,7825=>525,7826=>685, +7827=>525,7828=>685,7829=>525,7830=>634,7831=>392,7832=>818,7833=>592,7834=>613,7835=>352,7838=>769, +7839=>612,7840=>684,7841=>613,7842=>684,7843=>613,7844=>684,7845=>613,7846=>684,7847=>613,7848=>684, +7849=>613,7850=>684,7851=>613,7852=>684,7853=>613,7854=>684,7855=>613,7856=>684,7857=>613,7858=>684, +7859=>613,7860=>684,7861=>613,7862=>684,7863=>613,7864=>632,7865=>615,7866=>632,7867=>615,7868=>632, +7869=>615,7870=>632,7871=>615,7872=>632,7873=>615,7874=>632,7875=>615,7876=>632,7877=>615,7878=>632, +7879=>615,7880=>295,7881=>278,7882=>295,7883=>278,7884=>787,7885=>612,7886=>787,7887=>612,7888=>787, +7889=>612,7890=>787,7891=>612,7892=>787,7893=>612,7894=>787,7895=>612,7896=>787,7897=>612,7898=>913, +7899=>612,7900=>913,7901=>612,7902=>913,7903=>612,7904=>913,7905=>612,7906=>913,7907=>612,7908=>732, +7909=>634,7910=>732,7911=>634,7912=>858,7913=>634,7914=>858,7915=>634,7916=>858,7917=>634,7918=>858, +7919=>634,7920=>858,7921=>634,7922=>611,7923=>592,7924=>611,7925=>592,7926=>611,7927=>592,7928=>611, +7929=>592,7936=>659,7937=>659,7938=>659,7939=>659,7940=>659,7941=>659,7942=>659,7943=>659,7944=>684, +7945=>684,7946=>877,7947=>877,7948=>769,7949=>801,7950=>708,7951=>743,7952=>541,7953=>541,7954=>541, +7955=>541,7956=>541,7957=>541,7960=>711,7961=>711,7962=>966,7963=>975,7964=>898,7965=>928,7968=>634, +7969=>634,7970=>634,7971=>634,7972=>634,7973=>634,7974=>634,7975=>634,7976=>837,7977=>835,7978=>1086, +7979=>1089,7980=>1027,7981=>1051,7982=>934,7983=>947,7984=>338,7985=>338,7986=>338,7987=>338,7988=>338, +7989=>338,7990=>338,7991=>338,7992=>380,7993=>374,7994=>635,7995=>635,7996=>570,7997=>600,7998=>489, +7999=>493,8000=>612,8001=>612,8002=>612,8003=>612,8004=>612,8005=>612,8008=>804,8009=>848,8010=>1095, +8011=>1100,8012=>938,8013=>970,8016=>579,8017=>579,8018=>579,8019=>579,8020=>579,8021=>579,8022=>579, +8023=>579,8025=>784,8027=>998,8029=>1012,8031=>897,8032=>837,8033=>837,8034=>837,8035=>837,8036=>837, +8037=>837,8038=>837,8039=>837,8040=>802,8041=>843,8042=>1089,8043=>1095,8044=>946,8045=>972,8046=>921, +8047=>952,8048=>659,8049=>659,8050=>541,8051=>548,8052=>634,8053=>654,8054=>338,8055=>338,8056=>612, +8057=>612,8058=>579,8059=>579,8060=>837,8061=>837,8064=>659,8065=>659,8066=>659,8067=>659,8068=>659, +8069=>659,8070=>659,8071=>659,8072=>684,8073=>684,8074=>877,8075=>877,8076=>769,8077=>801,8078=>708, +8079=>743,8080=>634,8081=>634,8082=>634,8083=>634,8084=>634,8085=>634,8086=>634,8087=>634,8088=>837, +8089=>835,8090=>1086,8091=>1089,8092=>1027,8093=>1051,8094=>934,8095=>947,8096=>837,8097=>837,8098=>837, +8099=>837,8100=>837,8101=>837,8102=>837,8103=>837,8104=>802,8105=>843,8106=>1089,8107=>1095,8108=>946, +8109=>972,8110=>921,8111=>952,8112=>659,8113=>659,8114=>659,8115=>659,8116=>659,8118=>659,8119=>659, +8120=>684,8121=>684,8122=>716,8123=>692,8124=>684,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500, +8130=>634,8131=>634,8132=>654,8134=>634,8135=>634,8136=>805,8137=>746,8138=>931,8139=>871,8140=>752, +8141=>500,8142=>500,8143=>500,8144=>338,8145=>338,8146=>338,8147=>338,8150=>338,8151=>338,8152=>295, +8153=>295,8154=>475,8155=>408,8157=>500,8158=>500,8159=>500,8160=>579,8161=>579,8162=>579,8163=>579, +8164=>635,8165=>635,8166=>579,8167=>579,8168=>611,8169=>611,8170=>845,8171=>825,8172=>685,8173=>500, +8174=>500,8175=>500,8178=>837,8179=>837,8180=>837,8182=>837,8183=>837,8184=>941,8185=>813,8186=>922, +8187=>826,8188=>764,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250, +8198=>167,8199=>636,8200=>318,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0, +8208=>361,8209=>361,8210=>636,8213=>1000,8214=>500,8215=>500,8219=>318,8223=>518,8227=>590,8228=>334, +8229=>667,8231=>318,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8241=>1735,8242=>227, +8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339,8251=>838,8252=>485,8253=>531,8254=>500, +8255=>804,8256=>804,8257=>250,8258=>1000,8259=>500,8260=>167,8261=>390,8262=>390,8263=>922,8264=>733, +8265=>733,8266=>497,8267=>636,8268=>500,8269=>500,8270=>500,8271=>337,8272=>804,8273=>500,8274=>450, +8275=>1000,8276=>804,8277=>838,8278=>586,8279=>663,8280=>838,8281=>838,8282=>318,8283=>797,8284=>838, +8285=>318,8286=>318,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0, +8300=>0,8301=>0,8302=>0,8303=>0,8304=>401,8305=>179,8308=>401,8309=>401,8310=>401,8311=>401, +8312=>401,8313=>401,8314=>528,8315=>528,8316=>528,8317=>246,8318=>246,8319=>398,8320=>401,8321=>401, +8322=>401,8323=>401,8324=>401,8325=>401,8326=>401,8327=>401,8328=>401,8329=>401,8330=>528,8331=>528, +8332=>528,8333=>246,8334=>246,8336=>392,8337=>417,8338=>414,8339=>444,8340=>417,8352=>877,8353=>636, +8354=>636,8355=>636,8356=>636,8357=>974,8358=>748,8359=>1272,8360=>1074,8361=>989,8362=>784,8363=>635, +8365=>636,8366=>636,8367=>1272,8368=>636,8369=>636,8370=>636,8371=>636,8372=>774,8373=>641,8400=>0, +8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>1019,8449=>1019,8450=>698,8451=>1123, +8452=>642,8453=>1019,8454=>1067,8455=>614,8456=>698,8457=>952,8459=>988,8460=>754,8461=>850,8462=>634, +8463=>634,8464=>470,8465=>697,8466=>720,8467=>413,8468=>818,8469=>801,8470=>1040,8471=>1000,8472=>697, +8473=>701,8474=>787,8475=>798,8476=>814,8477=>792,8478=>896,8479=>684,8480=>1020,8481=>1074,8483=>684, +8484=>745,8485=>578,8486=>764,8487=>764,8488=>616,8489=>338,8490=>656,8491=>684,8492=>786,8493=>703, +8494=>854,8495=>592,8496=>605,8497=>786,8498=>575,8499=>1069,8500=>462,8501=>745,8502=>674,8503=>466, +8504=>645,8505=>380,8506=>926,8507=>1194,8508=>702,8509=>728,8510=>654,8511=>849,8512=>811,8513=>775, +8514=>557,8515=>557,8516=>611,8517=>819,8518=>708,8519=>615,8520=>351,8521=>351,8523=>780,8526=>526, +8531=>969,8532=>969,8533=>969,8534=>969,8535=>969,8536=>969,8537=>969,8538=>969,8539=>969,8540=>969, +8541=>969,8542=>969,8543=>568,8544=>295,8545=>492,8546=>689,8547=>923,8548=>684,8549=>922,8550=>1120, +8551=>1317,8552=>917,8553=>685,8554=>933,8555=>1131,8556=>557,8557=>698,8558=>770,8559=>863,8560=>278, +8561=>458,8562=>637,8563=>812,8564=>592,8565=>811,8566=>991,8567=>1170,8568=>819,8569=>592,8570=>822, +8571=>1002,8572=>278,8573=>550,8574=>635,8575=>974,8576=>1245,8577=>770,8578=>1245,8579=>703,8580=>549, +8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838, +8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838, +8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838, +8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838, +8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838, +8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838, +8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838, +8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838, +8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838, +8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838, +8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838, +8702=>838,8703=>838,8704=>684,8705=>636,8706=>517,8707=>632,8708=>632,8709=>871,8710=>669,8711=>669, +8712=>871,8713=>871,8714=>718,8715=>871,8716=>871,8717=>718,8718=>636,8719=>757,8720=>757,8721=>674, +8722=>838,8723=>838,8724=>838,8725=>337,8726=>637,8727=>838,8728=>626,8729=>626,8730=>637,8731=>637, +8732=>637,8733=>714,8734=>833,8735=>838,8736=>896,8737=>896,8738=>838,8739=>500,8740=>500,8741=>500, +8742=>500,8743=>732,8744=>732,8745=>732,8746=>732,8747=>521,8748=>789,8749=>1057,8750=>521,8751=>789, +8752=>1057,8753=>521,8754=>521,8755=>521,8756=>636,8757=>636,8758=>260,8759=>636,8760=>838,8761=>838, +8762=>838,8763=>838,8764=>838,8765=>838,8766=>838,8767=>838,8768=>375,8769=>838,8770=>838,8771=>838, +8772=>838,8773=>838,8774=>838,8775=>838,8776=>838,8777=>838,8778=>838,8779=>838,8780=>838,8781=>838, +8782=>838,8783=>838,8784=>838,8785=>838,8786=>839,8787=>839,8788=>1000,8789=>1000,8790=>838,8791=>838, +8792=>838,8793=>838,8794=>838,8795=>838,8796=>838,8797=>838,8798=>838,8799=>838,8800=>838,8801=>838, +8802=>838,8803=>838,8804=>838,8805=>838,8806=>838,8807=>838,8808=>838,8809=>838,8810=>1047,8811=>1047, +8812=>464,8813=>838,8814=>838,8815=>838,8816=>838,8817=>838,8818=>838,8819=>838,8820=>838,8821=>838, +8822=>838,8823=>838,8824=>838,8825=>838,8826=>838,8827=>838,8828=>838,8829=>838,8830=>838,8831=>838, +8832=>838,8833=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8840=>838,8841=>838, +8842=>838,8843=>838,8844=>732,8845=>732,8846=>732,8847=>838,8848=>838,8849=>838,8850=>838,8851=>780, +8852=>780,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838, +8862=>838,8863=>838,8864=>838,8865=>838,8866=>871,8867=>871,8868=>871,8869=>871,8870=>521,8871=>521, +8872=>871,8873=>871,8874=>871,8875=>871,8876=>871,8877=>871,8878=>871,8879=>871,8880=>838,8881=>838, +8882=>838,8883=>838,8884=>838,8885=>838,8886=>1000,8887=>1000,8888=>838,8889=>838,8890=>521,8891=>732, +8892=>732,8893=>732,8894=>838,8895=>838,8896=>820,8897=>820,8898=>820,8899=>820,8900=>494,8901=>318, +8902=>626,8903=>838,8904=>1000,8905=>1000,8906=>1000,8907=>1000,8908=>1000,8909=>838,8910=>732,8911=>732, +8912=>838,8913=>838,8914=>838,8915=>838,8916=>838,8917=>838,8918=>838,8919=>838,8920=>1422,8921=>1422, +8922=>838,8923=>838,8924=>838,8925=>838,8926=>838,8927=>838,8928=>838,8929=>838,8930=>838,8931=>838, +8932=>838,8933=>838,8934=>838,8935=>838,8936=>838,8937=>838,8938=>838,8939=>838,8940=>838,8941=>838, +8942=>1000,8943=>1000,8944=>1000,8945=>1000,8946=>1000,8947=>871,8948=>718,8949=>871,8950=>871,8951=>718, +8952=>871,8953=>871,8954=>1000,8955=>871,8956=>718,8957=>871,8958=>718,8959=>871,8960=>602,8961=>602, +8962=>635,8963=>838,8964=>838,8965=>838,8966=>838,8967=>488,8968=>390,8969=>390,8970=>390,8971=>390, +8972=>809,8973=>809,8974=>809,8975=>809,8976=>838,8977=>513,8984=>1000,8985=>838,8988=>469,8989=>469, +8990=>469,8991=>469,8992=>521,8993=>521,8996=>1152,8997=>1152,8998=>1414,8999=>1152,9000=>1443,9003=>1414, +9004=>873,9075=>338,9076=>635,9077=>837,9082=>659,9085=>757,9095=>1152,9108=>873,9115=>500,9116=>500, +9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500, +9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>521,9166=>838,9167=>945, +9187=>873,9189=>769,9250=>635,9251=>635,9312=>896,9313=>896,9314=>896,9315=>896,9316=>896,9317=>896, +9318=>896,9319=>896,9320=>896,9321=>896,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602, +9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602, +9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602, +9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602, +9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602, +9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602, +9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602, +9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602, +9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602, +9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602, +9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602, +9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602, +9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602, +9598=>602,9599=>602,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769, +9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769, +9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769, +9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945, +9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550, +9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502, +9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502, +9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873, +9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527, +9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873,9697=>873, +9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945, +9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873, +9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769, +9728=>896,9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896,9734=>896,9735=>573,9736=>896,9737=>896, +9738=>888,9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250,9744=>896,9745=>896,9746=>896,9747=>532, +9748=>896,9749=>896,9750=>896,9751=>896,9752=>896,9753=>896,9754=>896,9755=>896,9756=>896,9757=>609, +9758=>896,9759=>609,9760=>896,9761=>896,9762=>896,9763=>896,9764=>669,9765=>746,9766=>649,9767=>784, +9768=>545,9769=>896,9770=>896,9771=>896,9772=>710,9773=>896,9774=>896,9775=>896,9776=>896,9777=>896, +9778=>896,9779=>896,9780=>896,9781=>896,9782=>896,9783=>896,9784=>896,9785=>896,9786=>896,9787=>896, +9788=>896,9789=>896,9790=>896,9791=>614,9792=>731,9793=>731,9794=>896,9795=>896,9796=>896,9797=>896, +9798=>896,9799=>896,9800=>896,9801=>896,9802=>896,9803=>896,9804=>896,9805=>896,9806=>896,9807=>896, +9808=>896,9809=>896,9810=>896,9811=>896,9812=>896,9813=>896,9814=>896,9815=>896,9816=>896,9817=>896, +9818=>896,9819=>896,9820=>896,9821=>896,9822=>896,9823=>896,9824=>896,9825=>896,9826=>896,9827=>896, +9828=>896,9829=>896,9830=>896,9831=>896,9832=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472, +9838=>357,9839=>484,9840=>748,9841=>766,9842=>896,9843=>896,9844=>896,9845=>896,9846=>896,9847=>896, +9848=>896,9849=>896,9850=>896,9851=>896,9852=>896,9853=>896,9854=>896,9855=>896,9856=>869,9857=>869, +9858=>869,9859=>869,9860=>869,9861=>869,9862=>896,9863=>896,9864=>896,9865=>896,9866=>896,9867=>896, +9868=>896,9869=>896,9870=>896,9871=>896,9872=>896,9873=>896,9874=>896,9875=>896,9876=>896,9877=>541, +9878=>896,9879=>896,9880=>896,9881=>896,9882=>896,9883=>896,9884=>896,9888=>896,9889=>702,9890=>1003, +9891=>1085,9892=>1143,9893=>901,9894=>838,9895=>838,9896=>838,9897=>838,9898=>838,9899=>838,9900=>838, +9901=>838,9902=>838,9903=>838,9904=>844,9905=>838,9906=>731,9907=>732,9908=>732,9909=>732,9910=>850, +9911=>732,9912=>732,9985=>838,9986=>838,9987=>838,9988=>838,9990=>838,9991=>838,9992=>838,9993=>838, +9996=>838,9997=>838,9998=>838,9999=>838,10000=>838,10001=>838,10002=>838,10003=>838,10004=>838,10005=>838, +10006=>838,10007=>838,10008=>838,10009=>838,10010=>838,10011=>838,10012=>838,10013=>838,10014=>838,10015=>838, +10016=>838,10017=>838,10018=>838,10019=>838,10020=>838,10021=>838,10022=>838,10023=>838,10025=>838,10026=>838, +10027=>838,10028=>838,10029=>838,10030=>838,10031=>838,10032=>838,10033=>838,10034=>838,10035=>838,10036=>838, +10037=>838,10038=>838,10039=>838,10040=>838,10041=>838,10042=>838,10043=>838,10044=>838,10045=>838,10046=>838, +10047=>838,10048=>838,10049=>838,10050=>838,10051=>838,10052=>838,10053=>838,10054=>838,10055=>838,10056=>838, +10057=>838,10058=>838,10059=>838,10061=>896,10063=>896,10064=>896,10065=>896,10066=>896,10070=>896,10072=>838, +10073=>838,10074=>838,10075=>322,10076=>322,10077=>538,10078=>538,10081=>838,10082=>838,10083=>838,10084=>838, +10085=>838,10086=>838,10087=>838,10088=>838,10089=>838,10090=>838,10091=>838,10092=>838,10093=>838,10094=>838, +10095=>838,10096=>838,10097=>838,10098=>838,10099=>838,10100=>838,10101=>838,10102=>896,10103=>896,10104=>896, +10105=>896,10106=>896,10107=>896,10108=>896,10109=>896,10110=>896,10111=>896,10112=>838,10113=>838,10114=>838, +10115=>838,10116=>838,10117=>838,10118=>838,10119=>838,10120=>838,10121=>838,10122=>838,10123=>838,10124=>838, +10125=>838,10126=>838,10127=>838,10128=>838,10129=>838,10130=>838,10131=>838,10132=>838,10136=>838,10137=>838, +10138=>838,10139=>838,10140=>838,10141=>838,10142=>838,10143=>838,10144=>838,10145=>838,10146=>838,10147=>838, +10148=>838,10149=>838,10150=>838,10151=>838,10152=>838,10153=>838,10154=>838,10155=>838,10156=>838,10157=>838, +10158=>838,10159=>838,10161=>838,10162=>838,10163=>838,10164=>838,10165=>838,10166=>838,10167=>838,10168=>838, +10169=>838,10170=>838,10171=>838,10172=>838,10173=>838,10174=>838,10181=>390,10182=>390,10208=>494,10214=>495, +10215=>495,10216=>390,10217=>390,10218=>556,10219=>556,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1157, +10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434, +10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732,10244=>732,10245=>732,10246=>732,10247=>732,10248=>732, +10249=>732,10250=>732,10251=>732,10252=>732,10253=>732,10254=>732,10255=>732,10256=>732,10257=>732,10258=>732, +10259=>732,10260=>732,10261=>732,10262=>732,10263=>732,10264=>732,10265=>732,10266=>732,10267=>732,10268=>732, +10269=>732,10270=>732,10271=>732,10272=>732,10273=>732,10274=>732,10275=>732,10276=>732,10277=>732,10278=>732, +10279=>732,10280=>732,10281=>732,10282=>732,10283=>732,10284=>732,10285=>732,10286=>732,10287=>732,10288=>732, +10289=>732,10290=>732,10291=>732,10292=>732,10293=>732,10294=>732,10295=>732,10296=>732,10297=>732,10298=>732, +10299=>732,10300=>732,10301=>732,10302=>732,10303=>732,10304=>732,10305=>732,10306=>732,10307=>732,10308=>732, +10309=>732,10310=>732,10311=>732,10312=>732,10313=>732,10314=>732,10315=>732,10316=>732,10317=>732,10318=>732, +10319=>732,10320=>732,10321=>732,10322=>732,10323=>732,10324=>732,10325=>732,10326=>732,10327=>732,10328=>732, +10329=>732,10330=>732,10331=>732,10332=>732,10333=>732,10334=>732,10335=>732,10336=>732,10337=>732,10338=>732, +10339=>732,10340=>732,10341=>732,10342=>732,10343=>732,10344=>732,10345=>732,10346=>732,10347=>732,10348=>732, +10349=>732,10350=>732,10351=>732,10352=>732,10353=>732,10354=>732,10355=>732,10356=>732,10357=>732,10358=>732, +10359=>732,10360=>732,10361=>732,10362=>732,10363=>732,10364=>732,10365=>732,10366=>732,10367=>732,10368=>732, +10369=>732,10370=>732,10371=>732,10372=>732,10373=>732,10374=>732,10375=>732,10376=>732,10377=>732,10378=>732, +10379=>732,10380=>732,10381=>732,10382=>732,10383=>732,10384=>732,10385=>732,10386=>732,10387=>732,10388=>732, +10389=>732,10390=>732,10391=>732,10392=>732,10393=>732,10394=>732,10395=>732,10396=>732,10397=>732,10398=>732, +10399=>732,10400=>732,10401=>732,10402=>732,10403=>732,10404=>732,10405=>732,10406=>732,10407=>732,10408=>732, +10409=>732,10410=>732,10411=>732,10412=>732,10413=>732,10414=>732,10415=>732,10416=>732,10417=>732,10418=>732, +10419=>732,10420=>732,10421=>732,10422=>732,10423=>732,10424=>732,10425=>732,10426=>732,10427=>732,10428=>732, +10429=>732,10430=>732,10431=>732,10432=>732,10433=>732,10434=>732,10435=>732,10436=>732,10437=>732,10438=>732, +10439=>732,10440=>732,10441=>732,10442=>732,10443=>732,10444=>732,10445=>732,10446=>732,10447=>732,10448=>732, +10449=>732,10450=>732,10451=>732,10452=>732,10453=>732,10454=>732,10455=>732,10456=>732,10457=>732,10458=>732, +10459=>732,10460=>732,10461=>732,10462=>732,10463=>732,10464=>732,10465=>732,10466=>732,10467=>732,10468=>732, +10469=>732,10470=>732,10471=>732,10472=>732,10473=>732,10474=>732,10475=>732,10476=>732,10477=>732,10478=>732, +10479=>732,10480=>732,10481=>732,10482=>732,10483=>732,10484=>732,10485=>732,10486=>732,10487=>732,10488=>732, +10489=>732,10490=>732,10491=>732,10492=>732,10493=>732,10494=>732,10495=>732,10502=>838,10503=>838,10506=>838, +10507=>838,10560=>683,10561=>683,10627=>734,10628=>734,10702=>838,10703=>1000,10704=>1000,10705=>1000,10706=>1000, +10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838,10747=>838,10752=>1000,10753=>1000,10754=>1000,10764=>1325, +10765=>521,10766=>521,10767=>521,10768=>521,10769=>521,10770=>521,10771=>521,10772=>521,10773=>521,10774=>521, +10775=>521,10776=>521,10777=>521,10778=>521,10779=>521,10780=>521,10799=>838,10877=>838,10878=>838,10879=>838, +10880=>838,10881=>838,10882=>838,10883=>838,10884=>838,10885=>838,10886=>838,10887=>838,10888=>838,10889=>838, +10890=>838,10891=>838,10892=>838,10893=>838,10894=>838,10895=>838,10896=>838,10897=>838,10898=>838,10899=>838, +10900=>838,10901=>838,10902=>838,10903=>838,10904=>838,10905=>838,10906=>838,10907=>838,10908=>838,10909=>838, +10910=>838,10911=>838,10912=>838,10926=>838,10927=>838,10928=>838,10929=>838,10930=>838,10931=>838,10932=>838, +10933=>838,10934=>838,10935=>838,10936=>838,10937=>838,10938=>838,11001=>838,11002=>838,11008=>838,11009=>838, +11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838, +11020=>838,11021=>838,11022=>836,11023=>836,11024=>836,11025=>836,11026=>945,11027=>945,11028=>945,11029=>945, +11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11039=>869,11040=>869,11041=>873,11042=>873,11043=>873, +11044=>1119,11091=>869,11092=>869,11360=>557,11361=>278,11362=>557,11363=>603,11364=>695,11365=>613,11366=>392, +11367=>752,11368=>634,11369=>656,11370=>579,11371=>685,11372=>525,11373=>781,11374=>863,11375=>684,11377=>734, +11378=>1128,11379=>961,11380=>592,11381=>654,11382=>568,11383=>660,11385=>414,11386=>612,11387=>491,11388=>175, +11389=>431,11568=>646,11569=>888,11570=>888,11571=>682,11572=>684,11573=>635,11574=>562,11575=>684,11576=>684, +11577=>632,11578=>632,11579=>683,11580=>875,11581=>685,11582=>491,11583=>685,11584=>888,11585=>888,11586=>300, +11587=>627,11588=>752,11589=>656,11590=>527,11591=>685,11592=>645,11593=>632,11594=>502,11595=>953,11596=>778, +11597=>748,11598=>621,11599=>295,11600=>778,11601=>295,11602=>752,11603=>633,11604=>888,11605=>888,11606=>752, +11607=>320,11608=>749,11609=>888,11610=>888,11611=>698,11612=>768,11613=>685,11614=>698,11615=>622,11616=>684, +11617=>752,11618=>632,11619=>788,11620=>567,11621=>788,11631=>515,11800=>531,11810=>390,11811=>390,11812=>390, +11813=>390,11822=>531,19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896,19911=>896, +19912=>896,19913=>896,19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896,19921=>896, +19922=>896,19923=>896,19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896,19931=>896, +19932=>896,19933=>896,19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896,19941=>896, +19942=>896,19943=>896,19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896,19951=>896, +19952=>896,19953=>896,19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896,19961=>896, +19962=>896,19963=>896,19964=>896,19965=>896,19966=>896,19967=>896,42564=>635,42565=>521,42566=>354,42567=>338, +42572=>1180,42573=>1028,42576=>1029,42577=>906,42580=>1080,42581=>842,42582=>977,42583=>843,42594=>1062,42595=>912, +42596=>1066,42597=>901,42598=>1178,42599=>1008,42600=>787,42601=>612,42602=>855,42603=>712,42604=>1358,42605=>1019, +42606=>879,42634=>782,42635=>685,42636=>611,42637=>583,42644=>686,42645=>634,42760=>493,42761=>493,42762=>493, +42763=>493,42764=>493,42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493, +42773=>493,42774=>493,42779=>369,42780=>369,42781=>252,42782=>252,42783=>252,42790=>752,42791=>634,42792=>878, +42793=>709,42794=>614,42795=>541,42800=>491,42801=>521,42802=>1250,42803=>985,42804=>1203,42805=>990,42806=>1142, +42807=>981,42808=>971,42809=>818,42810=>971,42811=>818,42812=>959,42813=>818,42814=>703,42815=>549,42822=>680, +42823=>392,42824=>582,42825=>427,42826=>807,42827=>704,42830=>1358,42831=>1019,42880=>557,42881=>278,42882=>735, +42883=>634,42889=>337,42890=>376,42891=>401,42892=>275,43003=>575,43004=>603,43005=>863,43006=>295,43007=>1199, +61440=>977,61441=>977,63173=>612,64256=>689,64257=>630,64258=>630,64259=>967,64260=>967,64261=>686,64262=>861, +64275=>1202,64276=>1202,64277=>1196,64278=>1186,64279=>1529,64285=>272,64286=>0,64287=>471,64288=>636,64289=>856, +64290=>774,64291=>906,64292=>771,64293=>843,64294=>855,64295=>807,64296=>875,64297=>838,64298=>808,64299=>808, +64300=>808,64301=>808,64302=>629,64303=>629,64304=>629,64305=>608,64306=>448,64307=>594,64308=>640,64309=>272, +64310=>374,64312=>648,64313=>336,64314=>592,64315=>556,64316=>599,64318=>659,64320=>441,64321=>700,64323=>640, +64324=>604,64326=>581,64327=>663,64328=>592,64329=>808,64330=>657,64331=>272,64332=>608,64333=>556,64334=>604, +64335=>629,64338=>941,64339=>982,64340=>278,64341=>302,64342=>941,64343=>982,64344=>278,64345=>302,64346=>941, +64347=>982,64348=>278,64349=>302,64350=>941,64351=>982,64352=>278,64353=>302,64354=>941,64355=>982,64356=>278, +64357=>302,64358=>941,64359=>982,64360=>278,64361=>302,64362=>1037,64363=>1035,64364=>478,64365=>506,64366=>1037, +64367=>1035,64368=>478,64369=>506,64370=>646,64371=>646,64372=>618,64373=>646,64374=>646,64375=>646,64376=>618, +64377=>646,64378=>646,64379=>646,64380=>618,64381=>646,64382=>646,64383=>646,64384=>618,64385=>646,64394=>483, +64395=>552,64396=>483,64397=>552,64398=>895,64399=>895,64400=>476,64401=>552,64402=>895,64403=>895,64404=>476, +64405=>552,64414=>734,64415=>761,64473=>483,64474=>517,64488=>278,64489=>302,64508=>783,64509=>833,64510=>278, +64511=>302,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0, +65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0, +65059=>0,65136=>293,65137=>293,65138=>293,65139=>262,65140=>293,65142=>293,65143=>293,65144=>293,65145=>293, +65146=>293,65147=>293,65148=>293,65149=>293,65150=>293,65151=>293,65152=>470,65153=>278,65154=>305,65155=>278, +65156=>305,65157=>483,65158=>517,65159=>278,65160=>305,65161=>783,65162=>833,65163=>278,65164=>302,65165=>278, +65166=>305,65167=>941,65168=>982,65169=>278,65170=>302,65171=>524,65172=>536,65173=>941,65174=>982,65175=>278, +65176=>302,65177=>941,65178=>982,65179=>278,65180=>302,65181=>646,65182=>646,65183=>618,65184=>646,65185=>646, +65186=>646,65187=>618,65188=>646,65189=>646,65190=>646,65191=>618,65192=>646,65193=>445,65194=>525,65195=>445, +65196=>525,65197=>483,65198=>552,65199=>483,65200=>552,65201=>1221,65202=>1275,65203=>838,65204=>892,65205=>1221, +65206=>1275,65207=>838,65208=>892,65209=>1209,65210=>1225,65211=>849,65212=>867,65213=>1209,65214=>1225,65215=>849, +65216=>867,65217=>925,65218=>949,65219=>796,65220=>820,65221=>925,65222=>949,65223=>796,65224=>820,65225=>597, +65226=>532,65227=>597,65228=>482,65229=>597,65230=>532,65231=>523,65232=>482,65233=>1037,65234=>1035,65235=>478, +65236=>506,65237=>776,65238=>834,65239=>478,65240=>506,65241=>824,65242=>843,65243=>476,65244=>552,65245=>727, +65246=>757,65247=>305,65248=>331,65249=>619,65250=>666,65251=>536,65252=>578,65253=>734,65254=>761,65255=>278, +65256=>302,65257=>524,65258=>536,65259=>527,65260=>461,65261=>483,65262=>517,65263=>783,65264=>833,65265=>783, +65266=>833,65267=>278,65268=>302,65269=>570,65270=>597,65271=>570,65272=>597,65273=>570,65274=>597,65275=>570, +65276=>597,65279=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1025); +$enc=''; +$diff=''; +$file='dejavusans.z'; +$ctg='dejavusans.ctg.z'; +$originalsize=622280; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusans.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusans.z new file mode 100755 index 00000000..e7a78d24 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusans.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansb.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansb.ctg.z new file mode 100755 index 00000000..514062cc Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansb.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansb.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansb.php new file mode 100755 index 00000000..bec3c020 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansb.php @@ -0,0 +1,504 @@ +928,'Descent'=>-236,'CapHeight'=>19,'Flags'=>32,'FontBBox'=>'[-1069 -385 1975 1174]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>348,33=>456,34=>521,35=>838,36=>696,37=>1002,38=>872,39=>306,40=>457, +41=>457,42=>523,43=>838,44=>380,45=>415,46=>380,47=>365,48=>696,49=>696,50=>696, +51=>696,52=>696,53=>696,54=>696,55=>696,56=>696,57=>696,58=>400,59=>400,60=>838, +61=>838,62=>838,63=>580,64=>1000,65=>774,66=>762,67=>734,68=>830,69=>683,70=>683, +71=>821,72=>837,73=>372,74=>372,75=>775,76=>637,77=>995,78=>837,79=>850,80=>733, +81=>850,82=>770,83=>720,84=>682,85=>812,86=>774,87=>1103,88=>771,89=>724,90=>725, +91=>457,92=>365,93=>457,94=>838,95=>500,96=>500,97=>675,98=>716,99=>593,100=>716, +101=>678,102=>435,103=>716,104=>712,105=>343,106=>343,107=>665,108=>343,109=>1042,110=>712, +111=>687,112=>716,113=>716,114=>493,115=>595,116=>478,117=>712,118=>652,119=>924,120=>645, +121=>652,122=>582,123=>712,124=>365,125=>712,126=>838,8364=>696,8218=>380,402=>435,8222=>657, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1440,352=>720,8249=>412,338=>1167,381=>725,8216=>380, +8217=>380,8220=>657,8221=>657,8226=>639,8211=>500,8212=>1000,732=>500,8482=>1000,353=>595,8250=>412, +339=>1094,382=>582,376=>724,160=>348,161=>456,162=>696,163=>696,164=>636,165=>696,166=>365, +167=>500,168=>500,169=>1000,170=>564,171=>646,172=>838,173=>415,174=>1000,175=>500,176=>500, +177=>838,178=>438,179=>438,180=>500,181=>736,182=>636,183=>380,184=>500,185=>438,186=>564, +187=>646,188=>1035,189=>1035,190=>1035,191=>580,192=>774,193=>774,194=>774,195=>774,196=>774, +197=>774,198=>1085,199=>734,200=>683,201=>683,202=>683,203=>683,204=>372,205=>372,206=>372, +207=>372,208=>838,209=>837,210=>850,211=>850,212=>850,213=>850,214=>850,215=>838,216=>850, +217=>812,218=>812,219=>812,220=>812,221=>724,222=>738,223=>719,224=>675,225=>675,226=>675, +227=>675,228=>675,229=>675,230=>1048,231=>593,232=>678,233=>678,234=>678,235=>678,236=>343, +237=>343,238=>343,239=>343,240=>687,241=>712,242=>687,243=>687,244=>687,245=>687,246=>687, +247=>838,248=>687,249=>712,250=>712,251=>712,252=>712,253=>652,254=>716,255=>652,256=>774, +257=>675,258=>774,259=>675,260=>774,261=>675,262=>734,263=>593,264=>734,265=>593,266=>734, +267=>593,268=>734,269=>593,270=>830,271=>716,272=>838,273=>716,274=>683,275=>678,276=>683, +277=>678,278=>683,279=>678,280=>683,281=>678,282=>683,283=>678,284=>821,285=>716,286=>821, +287=>716,288=>821,289=>716,290=>821,291=>716,292=>837,293=>712,294=>974,295=>790,296=>372, +297=>343,298=>372,299=>343,300=>372,301=>343,302=>372,303=>343,304=>372,305=>343,306=>744, +307=>686,308=>372,309=>343,310=>775,311=>665,312=>665,313=>637,314=>343,315=>637,316=>343, +317=>637,318=>479,319=>637,320=>557,321=>642,322=>371,323=>837,324=>712,325=>837,326=>712, +327=>837,328=>712,329=>983,330=>837,331=>712,332=>850,333=>687,334=>850,335=>687,336=>850, +337=>687,340=>770,341=>493,342=>770,343=>493,344=>770,345=>493,346=>720,347=>595,348=>720, +349=>595,350=>720,351=>595,354=>682,355=>478,356=>682,357=>478,358=>682,359=>478,360=>812, +361=>712,362=>812,363=>712,364=>812,365=>712,366=>812,367=>712,368=>812,369=>712,370=>812, +371=>712,372=>1103,373=>924,374=>724,375=>652,377=>725,378=>582,379=>725,380=>582,383=>435, +384=>716,385=>811,386=>762,387=>716,388=>762,389=>716,390=>734,391=>734,392=>593,393=>838, +394=>879,395=>757,396=>716,397=>688,398=>683,399=>849,400=>696,401=>683,403=>821,404=>793, +405=>1045,406=>436,407=>389,408=>775,409=>665,410=>360,411=>592,412=>1042,413=>837,414=>712, +415=>850,416=>874,417=>687,418=>1083,419=>912,420=>782,421=>716,422=>770,423=>720,424=>595, +425=>683,426=>552,427=>478,428=>707,429=>478,430=>682,431=>835,432=>712,433=>850,434=>813, +435=>797,436=>778,437=>725,438=>582,439=>772,440=>772,441=>641,442=>582,443=>696,444=>772, +445=>641,446=>573,447=>716,448=>372,449=>659,450=>544,451=>372,452=>1555,453=>1412,454=>1298, +455=>1009,456=>980,457=>686,458=>1209,459=>1180,460=>1055,461=>774,462=>675,463=>372,464=>343, +465=>850,466=>687,467=>812,468=>712,469=>812,470=>712,471=>812,472=>712,473=>812,474=>712, +475=>812,476=>712,477=>678,478=>774,479=>675,480=>774,481=>675,482=>1085,483=>1048,484=>821, +485=>716,486=>821,487=>716,488=>775,489=>665,490=>850,491=>687,492=>850,493=>687,494=>772, +495=>582,496=>343,497=>1555,498=>1412,499=>1298,500=>821,501=>716,502=>1289,503=>787,504=>837, +505=>712,506=>774,507=>675,508=>1085,509=>1048,510=>850,511=>687,512=>774,513=>675,514=>774, +515=>675,516=>683,517=>678,518=>683,519=>678,520=>372,521=>343,522=>372,523=>343,524=>850, +525=>687,526=>850,527=>687,528=>770,529=>493,530=>770,531=>493,532=>812,533=>712,534=>812, +535=>712,536=>720,537=>595,538=>682,539=>478,540=>690,541=>607,542=>837,543=>712,544=>837, +545=>865,546=>809,547=>659,548=>725,549=>582,550=>774,551=>675,552=>683,553=>678,554=>850, +555=>687,556=>850,557=>687,558=>850,559=>687,560=>850,561=>687,562=>724,563=>652,564=>492, +565=>867,566=>512,567=>343,568=>1088,569=>1088,570=>774,571=>734,572=>593,573=>637,574=>682, +575=>595,576=>582,577=>782,578=>614,579=>762,580=>812,581=>774,582=>683,583=>678,584=>372, +585=>343,586=>860,587=>791,588=>770,589=>493,590=>724,591=>652,592=>675,593=>716,594=>716, +595=>716,596=>593,597=>593,598=>717,599=>792,600=>678,601=>678,602=>876,603=>557,604=>545, +605=>815,606=>731,607=>343,608=>792,609=>716,610=>627,611=>644,612=>635,613=>712,614=>712, +615=>712,616=>545,617=>440,618=>545,619=>559,620=>693,621=>343,622=>841,623=>1042,624=>1042, +625=>1042,626=>712,627=>793,628=>707,629=>687,630=>909,631=>681,632=>796,633=>538,634=>538, +635=>650,636=>493,637=>493,638=>596,639=>596,640=>642,641=>642,642=>595,643=>415,644=>435, +645=>605,646=>552,647=>478,648=>478,649=>920,650=>772,651=>670,652=>652,653=>924,654=>652, +655=>724,656=>694,657=>684,658=>641,659=>641,660=>573,661=>573,662=>573,663=>573,664=>850, +665=>633,666=>731,667=>685,668=>691,669=>343,670=>732,671=>539,672=>792,673=>573,674=>573, +675=>1156,676=>1214,677=>1155,678=>974,679=>769,680=>929,681=>1026,682=>792,683=>780,684=>591, +685=>415,686=>677,687=>789,688=>456,689=>456,690=>219,691=>315,692=>315,693=>315,694=>411, +695=>591,696=>417,697=>302,698=>521,699=>380,700=>380,701=>380,702=>366,703=>366,704=>326, +705=>326,706=>500,707=>500,708=>500,709=>500,711=>500,712=>306,713=>500,714=>500,715=>500, +716=>306,717=>500,718=>500,719=>500,720=>337,721=>337,722=>366,723=>366,724=>500,725=>500, +726=>416,727=>328,728=>500,729=>500,730=>500,731=>500,733=>500,734=>351,735=>500,736=>412, +737=>219,738=>381,739=>413,740=>326,741=>500,742=>500,743=>500,744=>500,745=>500,748=>500, +749=>500,750=>657,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>698,881=>565,882=>1022, +883=>836,884=>302,885=>302,886=>837,887=>701,890=>500,891=>593,892=>550,893=>549,894=>400, +900=>441,901=>500,902=>797,903=>380,904=>846,905=>1009,906=>563,908=>891,910=>980,911=>894, +912=>390,913=>774,914=>762,915=>637,916=>774,917=>683,918=>725,919=>837,920=>850,921=>372, +922=>775,923=>774,924=>995,925=>837,926=>632,927=>850,928=>837,929=>733,931=>683,932=>682, +933=>724,934=>850,935=>771,936=>850,937=>850,938=>372,939=>724,940=>687,941=>557,942=>712, +943=>390,944=>675,945=>687,946=>716,947=>681,948=>687,949=>557,950=>591,951=>712,952=>687, +953=>390,954=>710,955=>633,956=>736,957=>681,958=>591,959=>687,960=>791,961=>716,962=>593, +963=>779,964=>638,965=>675,966=>782,967=>645,968=>794,969=>869,970=>390,971=>675,972=>687, +973=>675,974=>869,975=>775,976=>651,977=>661,978=>746,979=>981,980=>746,981=>796,982=>869, +983=>744,984=>850,985=>687,986=>734,987=>593,988=>683,989=>494,990=>702,991=>660,992=>919, +993=>627,994=>1093,995=>837,996=>832,997=>716,998=>928,999=>744,1000=>733,1001=>650,1002=>789, +1003=>671,1004=>752,1005=>716,1006=>682,1007=>590,1008=>744,1009=>716,1010=>593,1011=>343,1012=>850, +1013=>645,1014=>644,1015=>738,1016=>716,1017=>734,1018=>995,1019=>732,1020=>716,1021=>698,1022=>734, +1023=>698,1024=>683,1025=>683,1026=>878,1027=>637,1028=>734,1029=>720,1030=>372,1031=>372,1032=>372, +1033=>1154,1034=>1130,1035=>878,1036=>817,1037=>837,1038=>771,1039=>837,1040=>774,1041=>762,1042=>762, +1043=>637,1044=>891,1045=>683,1046=>1224,1047=>710,1048=>837,1049=>837,1050=>817,1051=>831,1052=>995, +1053=>837,1054=>850,1055=>837,1056=>733,1057=>734,1058=>682,1059=>771,1060=>992,1061=>771,1062=>928, +1063=>808,1064=>1235,1065=>1326,1066=>939,1067=>1036,1068=>762,1069=>734,1070=>1174,1071=>770,1072=>675, +1073=>698,1074=>633,1075=>522,1076=>808,1077=>678,1078=>995,1079=>581,1080=>701,1081=>701,1082=>679, +1083=>732,1084=>817,1085=>691,1086=>687,1087=>691,1088=>716,1089=>593,1090=>580,1091=>652,1092=>992, +1093=>645,1094=>741,1095=>687,1096=>1062,1097=>1105,1098=>751,1099=>904,1100=>632,1101=>593,1102=>972, +1103=>642,1104=>678,1105=>678,1106=>714,1107=>522,1108=>593,1109=>595,1110=>343,1111=>343,1112=>343, +1113=>991,1114=>956,1115=>734,1116=>679,1117=>701,1118=>652,1119=>691,1120=>1093,1121=>869,1122=>840, +1123=>736,1124=>1012,1125=>839,1126=>992,1127=>832,1128=>1358,1129=>1121,1130=>850,1131=>687,1132=>1236, +1133=>1007,1134=>696,1135=>557,1136=>1075,1137=>1061,1138=>850,1139=>687,1140=>850,1141=>695,1142=>850, +1143=>695,1144=>1148,1145=>1043,1146=>1074,1147=>863,1148=>1405,1149=>1173,1150=>1093,1151=>869,1152=>734, +1153=>593,1154=>652,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>957, +1163=>807,1164=>762,1165=>611,1166=>733,1167=>716,1168=>637,1169=>522,1170=>666,1171=>543,1172=>808, +1173=>669,1174=>1224,1175=>995,1176=>710,1177=>581,1178=>775,1179=>679,1180=>817,1181=>679,1182=>817, +1183=>679,1184=>1015,1185=>826,1186=>956,1187=>808,1188=>1103,1189=>874,1190=>1273,1191=>1017,1192=>952, +1193=>858,1194=>734,1195=>593,1196=>682,1197=>580,1198=>724,1199=>652,1200=>724,1201=>652,1202=>771, +1203=>645,1204=>1112,1205=>1000,1206=>808,1207=>687,1208=>808,1209=>687,1210=>808,1211=>712,1212=>1026, +1213=>810,1214=>1026,1215=>810,1216=>372,1217=>1224,1218=>995,1219=>775,1220=>630,1221=>951,1222=>805, +1223=>837,1224=>691,1225=>957,1226=>807,1227=>808,1228=>687,1229=>1115,1230=>933,1231=>343,1232=>774, +1233=>675,1234=>774,1235=>675,1236=>1085,1237=>1048,1238=>683,1239=>678,1240=>849,1241=>678,1242=>849, +1243=>678,1244=>1224,1245=>995,1246=>710,1247=>581,1248=>772,1249=>641,1250=>837,1251=>701,1252=>837, +1253=>701,1254=>850,1255=>687,1256=>850,1257=>687,1258=>850,1259=>687,1260=>734,1261=>593,1262=>771, +1263=>652,1264=>771,1265=>652,1266=>771,1267=>652,1268=>808,1269=>687,1270=>637,1271=>522,1272=>1036, +1273=>904,1274=>666,1275=>543,1276=>771,1277=>645,1278=>771,1279=>645,1280=>762,1281=>608,1282=>1159, +1283=>893,1284=>1119,1285=>920,1286=>828,1287=>693,1288=>1242,1289=>1017,1290=>1289,1291=>1013,1292=>839, +1293=>638,1294=>938,1295=>803,1296=>696,1297=>557,1298=>831,1299=>732,1300=>1286,1301=>1068,1302=>1065, +1303=>979,1304=>1082,1305=>1013,1306=>850,1307=>716,1308=>1103,1309=>924,1312=>1267,1313=>1059,1314=>1273, +1315=>1017,1316=>957,1317=>807,1329=>984,1330=>812,1331=>984,1332=>984,1333=>812,1334=>777,1335=>812, +1336=>812,1337=>975,1338=>984,1339=>812,1340=>710,1341=>1078,1342=>1136,1343=>812,1344=>710,1345=>757, +1346=>984,1347=>876,1348=>984,1349=>793,1350=>984,1351=>812,1352=>812,1353=>812,1354=>958,1355=>777, +1356=>984,1357=>812,1358=>984,1359=>720,1360=>812,1361=>793,1362=>895,1363=>850,1364=>936,1365=>850, +1366=>720,1369=>366,1370=>380,1371=>550,1372=>550,1373=>380,1374=>546,1375=>521,1377=>1042,1378=>712, +1379=>866,1380=>868,1381=>712,1382=>817,1383=>653,1384=>712,1385=>811,1386=>817,1387=>712,1388=>498, +1389=>1018,1390=>716,1391=>712,1392=>712,1393=>716,1394=>819,1395=>712,1396=>751,1397=>343,1398=>882, +1399=>559,1400=>712,1401=>559,1402=>1042,1403=>559,1404=>863,1405=>712,1406=>813,1407=>1042,1408=>712, +1409=>716,1410=>571,1411=>1042,1412=>778,1413=>687,1414=>720,1415=>862,1417=>400,1418=>487,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>415,1471=>0,1472=>372,1473=>0,1474=>0,1475=>372,1478=>497, +1479=>0,1488=>751,1489=>673,1490=>537,1491=>654,1492=>712,1493=>343,1494=>491,1495=>712,1496=>724, +1497=>343,1498=>649,1499=>650,1500=>679,1501=>712,1502=>775,1503=>343,1504=>497,1505=>773,1506=>678, +1507=>718,1508=>687,1509=>628,1510=>751,1511=>729,1512=>649,1513=>949,1514=>751,1520=>664,1521=>664, +1522=>663,1523=>444,1524=>710,1542=>667,1543=>667,1545=>884,1546=>1157,1548=>380,1557=>0,1563=>400, +1567=>580,1569=>511,1570=>343,1571=>343,1572=>622,1573=>343,1574=>917,1575=>343,1576=>1005,1577=>590, +1578=>1005,1579=>1005,1580=>721,1581=>721,1582=>721,1583=>513,1584=>513,1585=>576,1586=>576,1587=>1380, +1588=>1380,1589=>1345,1590=>1345,1591=>1039,1592=>1039,1593=>683,1594=>683,1600=>342,1601=>1162,1602=>894, +1603=>917,1604=>868,1605=>733,1606=>854,1607=>590,1608=>622,1609=>917,1610=>917,1611=>0,1612=>0, +1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1626=>500, +1632=>610,1633=>610,1634=>610,1635=>610,1636=>610,1637=>610,1638=>610,1639=>610,1640=>610,1641=>610, +1642=>610,1643=>374,1644=>380,1645=>545,1646=>1005,1647=>894,1652=>292,1657=>1005,1658=>1005,1659=>1005, +1660=>1005,1661=>1005,1662=>1005,1663=>1005,1664=>1005,1665=>721,1666=>721,1667=>721,1668=>721,1669=>721, +1670=>721,1671=>721,1681=>576,1682=>576,1685=>681,1688=>576,1697=>1162,1700=>1162,1702=>1162,1705=>1024, +1711=>1024,1717=>868,1722=>854,1727=>721,1734=>622,1740=>917,1742=>917,1749=>590,1776=>610,1777=>610, +1778=>610,1779=>610,1780=>610,1781=>610,1782=>610,1783=>610,1784=>610,1785=>610,1984=>696,1985=>696, +1986=>696,1987=>696,1988=>696,1989=>696,1990=>696,1991=>696,1992=>696,1993=>696,1994=>343,1995=>547, +1996=>543,1997=>652,1998=>691,1999=>691,2000=>594,2001=>691,2002=>904,2003=>551,2004=>551,2005=>627, +2006=>688,2007=>444,2008=>1022,2009=>506,2010=>826,2011=>691,2012=>652,2013=>912,2014=>627,2015=>707, +2016=>506,2017=>652,2018=>574,2019=>627,2020=>627,2021=>627,2022=>574,2023=>574,2027=>0,2028=>0, +2029=>0,2030=>0,2031=>0,2032=>0,2033=>0,2034=>0,2035=>0,2036=>380,2037=>380,2040=>691, +2041=>691,2042=>415,3647=>743,3713=>790,3714=>748,3716=>749,3719=>569,3720=>742,3722=>744,3725=>761, +3732=>706,3733=>704,3734=>747,3735=>819,3737=>730,3738=>727,3739=>727,3740=>922,3741=>827,3742=>866, +3743=>866,3745=>836,3746=>761,3747=>770,3749=>769,3751=>713,3754=>827,3755=>1031,3757=>724,3758=>784, +3759=>934,3760=>688,3761=>0,3762=>610,3763=>610,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0, +3769=>0,3771=>0,3772=>0,3773=>670,3776=>516,3777=>860,3778=>516,3779=>650,3780=>632,3782=>759, +3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>771,3793=>771,3794=>693,3795=>836, +3796=>729,3797=>729,3798=>849,3799=>790,3800=>759,3801=>910,3804=>1363,3805=>1363,4256=>918,4257=>744, +4258=>739,4259=>837,4260=>649,4261=>773,4262=>857,4263=>889,4264=>530,4265=>633,4266=>857,4267=>900, +4268=>643,4269=>903,4270=>814,4271=>752,4272=>869,4273=>643,4274=>643,4275=>886,4276=>886,4277=>733, +4278=>653,4279=>643,4280=>646,4281=>643,4282=>790,4283=>902,4284=>633,4285=>619,4286=>643,4287=>778, +4288=>892,4289=>601,4290=>742,4291=>616,4292=>633,4293=>742,4304=>553,4305=>552,4306=>596,4307=>815, +4308=>562,4309=>563,4310=>553,4311=>827,4312=>553,4313=>543,4314=>1074,4315=>563,4316=>563,4317=>812, +4318=>552,4319=>591,4320=>822,4321=>563,4322=>690,4323=>583,4324=>813,4325=>562,4326=>813,4327=>563, +4328=>563,4329=>563,4330=>632,4331=>563,4332=>563,4333=>552,4334=>563,4335=>563,4336=>558,4337=>604, +4338=>552,4339=>552,4340=>553,4341=>605,4342=>852,4343=>635,4344=>563,4345=>596,4346=>542,4347=>684, +4348=>368,5121=>774,5122=>774,5123=>774,5124=>774,5125=>905,5126=>905,5127=>905,5129=>905,5130=>905, +5131=>905,5132=>1018,5133=>1009,5134=>1018,5135=>1009,5136=>1018,5137=>1009,5138=>1149,5139=>1140,5140=>1149, +5141=>1140,5142=>905,5143=>1149,5144=>1142,5145=>1149,5146=>1142,5147=>905,5149=>310,5150=>529,5151=>425, +5152=>425,5153=>395,5154=>395,5155=>395,5156=>395,5157=>564,5158=>470,5159=>310,5160=>395,5161=>395, +5162=>395,5163=>1213,5164=>986,5165=>1216,5166=>1297,5167=>774,5168=>774,5169=>774,5170=>774,5171=>886, +5172=>886,5173=>886,5175=>886,5176=>886,5177=>886,5178=>1018,5179=>1009,5180=>1018,5181=>1009,5182=>1018, +5183=>1009,5184=>1149,5185=>1140,5186=>1149,5187=>1140,5188=>1149,5189=>1142,5190=>1149,5191=>1142,5192=>886, +5193=>576,5194=>229,5196=>812,5197=>812,5198=>812,5199=>812,5200=>815,5201=>815,5202=>815,5204=>815, +5205=>815,5206=>815,5207=>1056,5208=>1048,5209=>1056,5210=>1048,5211=>1056,5212=>1048,5213=>1060,5214=>1054, +5215=>1060,5216=>1054,5217=>1060,5218=>1052,5219=>1060,5220=>1052,5221=>1060,5222=>483,5223=>1005,5224=>1005, +5225=>1023,5226=>1017,5227=>743,5228=>743,5229=>743,5230=>743,5231=>743,5232=>743,5233=>743,5234=>743, +5235=>743,5236=>1029,5237=>975,5238=>980,5239=>975,5240=>980,5241=>975,5242=>1029,5243=>975,5244=>1029, +5245=>975,5246=>980,5247=>975,5248=>980,5249=>975,5250=>980,5251=>501,5252=>501,5253=>938,5254=>938, +5255=>938,5256=>938,5257=>743,5258=>743,5259=>743,5260=>743,5261=>743,5262=>743,5263=>743,5264=>743, +5265=>743,5266=>1029,5267=>975,5268=>1029,5269=>975,5270=>1029,5271=>975,5272=>1029,5273=>975,5274=>1029, +5275=>975,5276=>1029,5277=>975,5278=>1029,5279=>975,5280=>1029,5281=>501,5282=>501,5283=>626,5284=>626, +5285=>626,5286=>626,5287=>626,5288=>626,5289=>626,5290=>626,5291=>626,5292=>881,5293=>854,5294=>863, +5295=>874,5296=>863,5297=>874,5298=>881,5299=>874,5300=>881,5301=>874,5302=>863,5303=>874,5304=>863, +5305=>874,5306=>863,5307=>436,5308=>548,5309=>436,5312=>988,5313=>988,5314=>988,5315=>988,5316=>931, +5317=>931,5318=>931,5319=>931,5320=>931,5321=>1238,5322=>1247,5323=>1200,5324=>1228,5325=>1200,5326=>1228, +5327=>931,5328=>660,5329=>497,5330=>660,5331=>988,5332=>988,5333=>988,5334=>988,5335=>931,5336=>931, +5337=>931,5338=>931,5339=>931,5340=>1231,5341=>1247,5342=>1283,5343=>1228,5344=>1283,5345=>1228,5346=>1228, +5347=>1214,5348=>1228,5349=>1214,5350=>1283,5351=>1228,5352=>1283,5353=>1228,5354=>660,5356=>886,5357=>730, +5358=>730,5359=>730,5360=>730,5361=>730,5362=>730,5363=>730,5364=>730,5365=>730,5366=>998,5367=>958, +5368=>967,5369=>989,5370=>967,5371=>989,5372=>998,5373=>958,5374=>998,5375=>958,5376=>967,5377=>989, +5378=>967,5379=>989,5380=>967,5381=>493,5382=>460,5383=>493,5392=>923,5393=>923,5394=>923,5395=>1136, +5396=>1136,5397=>1136,5398=>1136,5399=>1209,5400=>1202,5401=>1209,5402=>1202,5403=>1209,5404=>1202,5405=>1431, +5406=>1420,5407=>1431,5408=>1420,5409=>1431,5410=>1420,5411=>1431,5412=>1420,5413=>746,5414=>776,5415=>776, +5416=>776,5417=>776,5418=>776,5419=>776,5420=>776,5421=>776,5422=>776,5423=>1003,5424=>1003,5425=>1013, +5426=>996,5427=>1013,5428=>996,5429=>1003,5430=>1003,5431=>1003,5432=>1003,5433=>1013,5434=>996,5435=>1013, +5436=>996,5437=>1013,5438=>495,5440=>395,5441=>510,5442=>1033,5443=>1033,5444=>976,5445=>976,5446=>976, +5447=>976,5448=>733,5449=>733,5450=>733,5451=>733,5452=>733,5453=>733,5454=>1003,5455=>959,5456=>495, +5458=>886,5459=>774,5460=>774,5461=>774,5462=>774,5463=>928,5464=>928,5465=>928,5466=>928,5467=>1172, +5468=>1142,5469=>602,5470=>812,5471=>812,5472=>812,5473=>812,5474=>812,5475=>812,5476=>815,5477=>815, +5478=>815,5479=>815,5480=>1060,5481=>1052,5482=>548,5492=>977,5493=>977,5494=>977,5495=>977,5496=>977, +5497=>977,5498=>977,5499=>618,5500=>837,5501=>510,5502=>1238,5503=>1238,5504=>1238,5505=>1238,5506=>1238, +5507=>1238,5508=>1238,5509=>989,5514=>977,5515=>977,5516=>977,5517=>977,5518=>1591,5519=>1591,5520=>1591, +5521=>1295,5522=>1295,5523=>1591,5524=>1591,5525=>848,5526=>1273,5536=>988,5537=>988,5538=>931,5539=>931, +5540=>931,5541=>931,5542=>660,5543=>776,5544=>776,5545=>776,5546=>776,5547=>776,5548=>776,5549=>776, +5550=>495,5551=>743,5598=>830,5601=>830,5702=>496,5703=>496,5742=>413,5743=>1238,5744=>1591,5745=>2016, +5746=>2016,5747=>1720,5748=>1678,5749=>2016,5750=>2016,5760=>543,5761=>637,5762=>945,5763=>1254,5764=>1563, +5765=>1871,5766=>627,5767=>936,5768=>1254,5769=>1559,5770=>1871,5771=>569,5772=>877,5773=>1187,5774=>1497, +5775=>1807,5776=>637,5777=>945,5778=>1240,5779=>1555,5780=>1871,5781=>569,5782=>569,5783=>789,5784=>1234, +5785=>1559,5786=>740,5787=>638,5788=>638,7424=>652,7425=>833,7426=>1048,7427=>608,7428=>593,7429=>676, +7430=>676,7431=>559,7432=>557,7433=>343,7434=>494,7435=>665,7436=>539,7437=>817,7438=>701,7439=>687, +7440=>593,7441=>660,7442=>660,7443=>660,7444=>1094,7446=>687,7447=>687,7448=>556,7449=>642,7450=>642, +7451=>580,7452=>634,7453=>737,7454=>948,7455=>695,7456=>652,7457=>924,7458=>582,7459=>646,7462=>539, +7463=>652,7464=>691,7465=>556,7466=>781,7467=>732,7468=>487,7469=>683,7470=>480,7472=>523,7473=>430, +7474=>430,7475=>517,7476=>527,7477=>234,7478=>234,7479=>488,7480=>401,7481=>626,7482=>527,7483=>527, +7484=>535,7485=>509,7486=>461,7487=>485,7488=>430,7489=>511,7490=>695,7491=>458,7492=>458,7493=>479, +7494=>712,7495=>479,7496=>479,7497=>479,7498=>479,7499=>386,7500=>386,7501=>479,7502=>219,7503=>487, +7504=>664,7505=>456,7506=>488,7507=>414,7508=>488,7509=>488,7510=>479,7511=>388,7512=>456,7513=>462, +7514=>664,7515=>501,7517=>451,7518=>429,7519=>433,7520=>493,7521=>406,7522=>219,7523=>315,7524=>456, +7525=>501,7526=>451,7527=>429,7528=>451,7529=>493,7530=>406,7543=>716,7544=>527,7547=>545,7557=>514, +7579=>479,7580=>414,7581=>414,7582=>488,7583=>386,7584=>377,7585=>348,7586=>479,7587=>456,7588=>347, +7589=>281,7590=>347,7591=>347,7592=>431,7593=>326,7594=>330,7595=>370,7596=>664,7597=>664,7598=>562, +7599=>562,7600=>448,7601=>488,7602=>542,7603=>422,7604=>396,7605=>388,7606=>583,7607=>494,7608=>399, +7609=>451,7610=>501,7611=>417,7612=>523,7613=>470,7614=>455,7615=>425,7620=>0,7621=>0,7622=>0, +7623=>0,7624=>0,7625=>0,7680=>774,7681=>675,7682=>762,7683=>716,7684=>762,7685=>716,7686=>762, +7687=>716,7688=>734,7689=>593,7690=>830,7691=>716,7692=>830,7693=>716,7694=>830,7695=>716,7696=>830, +7697=>716,7698=>830,7699=>716,7700=>683,7701=>678,7702=>683,7703=>678,7704=>683,7705=>678,7706=>683, +7707=>678,7708=>683,7709=>678,7710=>683,7711=>435,7712=>821,7713=>716,7714=>837,7715=>712,7716=>837, +7717=>712,7718=>837,7719=>712,7720=>837,7721=>712,7722=>837,7723=>712,7724=>372,7725=>343,7726=>372, +7727=>343,7728=>775,7729=>665,7730=>775,7731=>665,7732=>775,7733=>665,7734=>637,7735=>343,7736=>637, +7737=>343,7738=>637,7739=>343,7740=>637,7741=>343,7742=>995,7743=>1042,7744=>995,7745=>1042,7746=>995, +7747=>1042,7748=>837,7749=>712,7750=>837,7751=>712,7752=>837,7753=>712,7754=>837,7755=>712,7756=>850, +7757=>687,7758=>850,7759=>687,7760=>850,7761=>687,7762=>850,7763=>687,7764=>733,7765=>716,7766=>733, +7767=>716,7768=>770,7769=>493,7770=>770,7771=>493,7772=>770,7773=>493,7774=>770,7775=>493,7776=>720, +7777=>595,7778=>720,7779=>595,7780=>720,7781=>595,7782=>720,7783=>595,7784=>720,7785=>595,7786=>682, +7787=>478,7788=>682,7789=>478,7790=>682,7791=>478,7792=>682,7793=>478,7794=>812,7795=>712,7796=>812, +7797=>712,7798=>812,7799=>712,7800=>812,7801=>712,7802=>812,7803=>712,7804=>774,7805=>652,7806=>774, +7807=>652,7808=>1103,7809=>924,7810=>1103,7811=>924,7812=>1103,7813=>924,7814=>1103,7815=>924,7816=>1103, +7817=>924,7818=>771,7819=>645,7820=>771,7821=>645,7822=>724,7823=>652,7824=>725,7825=>582,7826=>725, +7827=>582,7828=>725,7829=>582,7830=>712,7831=>478,7832=>924,7833=>652,7834=>675,7835=>435,7838=>896, +7839=>687,7840=>774,7841=>675,7842=>774,7843=>675,7844=>774,7845=>675,7846=>774,7847=>675,7848=>774, +7849=>675,7850=>774,7851=>675,7852=>774,7853=>675,7854=>774,7855=>675,7856=>774,7857=>675,7858=>774, +7859=>675,7860=>774,7861=>675,7862=>774,7863=>675,7864=>683,7865=>678,7866=>683,7867=>678,7868=>683, +7869=>678,7870=>683,7871=>678,7872=>683,7873=>678,7874=>683,7875=>678,7876=>683,7877=>678,7878=>683, +7879=>678,7880=>372,7881=>343,7882=>372,7883=>343,7884=>850,7885=>687,7886=>850,7887=>687,7888=>850, +7889=>687,7890=>850,7891=>687,7892=>850,7893=>687,7894=>850,7895=>687,7896=>850,7897=>687,7898=>874, +7899=>687,7900=>874,7901=>687,7902=>874,7903=>687,7904=>874,7905=>687,7906=>874,7907=>687,7908=>812, +7909=>712,7910=>812,7911=>712,7912=>835,7913=>712,7914=>835,7915=>712,7916=>835,7917=>712,7918=>835, +7919=>712,7920=>835,7921=>712,7922=>724,7923=>652,7924=>724,7925=>652,7926=>724,7927=>652,7928=>724, +7929=>652,7936=>687,7937=>687,7938=>687,7939=>687,7940=>687,7941=>687,7942=>687,7943=>687,7944=>774, +7945=>774,7946=>1041,7947=>1043,7948=>935,7949=>963,7950=>835,7951=>859,7952=>557,7953=>557,7954=>557, +7955=>557,7956=>557,7957=>557,7960=>792,7961=>794,7962=>1100,7963=>1096,7964=>1023,7965=>1052,7968=>712, +7969=>712,7970=>712,7971=>712,7972=>712,7973=>712,7974=>712,7975=>712,7976=>945,7977=>951,7978=>1250, +7979=>1250,7980=>1180,7981=>1206,7982=>1054,7983=>1063,7984=>390,7985=>390,7986=>390,7987=>390,7988=>390, +7989=>390,7990=>390,7991=>390,7992=>483,7993=>489,7994=>777,7995=>785,7996=>712,7997=>738,7998=>604, +7999=>604,8000=>687,8001=>687,8002=>687,8003=>687,8004=>687,8005=>687,8008=>892,8009=>933,8010=>1221, +8011=>1224,8012=>1053,8013=>1082,8016=>675,8017=>675,8018=>675,8019=>675,8020=>675,8021=>675,8022=>675, +8023=>675,8025=>930,8027=>1184,8029=>1199,8031=>1049,8032=>869,8033=>869,8034=>869,8035=>869,8036=>869, +8037=>869,8038=>869,8039=>869,8040=>909,8041=>958,8042=>1246,8043=>1251,8044=>1076,8045=>1105,8046=>1028, +8047=>1076,8048=>687,8049=>687,8050=>557,8051=>557,8052=>712,8053=>712,8054=>390,8055=>390,8056=>687, +8057=>687,8058=>675,8059=>675,8060=>869,8061=>869,8064=>687,8065=>687,8066=>687,8067=>687,8068=>687, +8069=>687,8070=>687,8071=>687,8072=>774,8073=>774,8074=>1041,8075=>1043,8076=>935,8077=>963,8078=>835, +8079=>859,8080=>712,8081=>712,8082=>712,8083=>712,8084=>712,8085=>712,8086=>712,8087=>712,8088=>945, +8089=>951,8090=>1250,8091=>1250,8092=>1180,8093=>1206,8094=>1054,8095=>1063,8096=>869,8097=>869,8098=>869, +8099=>869,8100=>869,8101=>869,8102=>869,8103=>869,8104=>909,8105=>958,8106=>1246,8107=>1251,8108=>1076, +8109=>1105,8110=>1028,8111=>1076,8112=>687,8113=>687,8114=>687,8115=>687,8116=>687,8118=>687,8119=>687, +8120=>774,8121=>774,8122=>876,8123=>797,8124=>774,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500, +8130=>712,8131=>712,8132=>712,8134=>712,8135=>712,8136=>929,8137=>846,8138=>1080,8139=>1009,8140=>837, +8141=>500,8142=>500,8143=>500,8144=>390,8145=>390,8146=>390,8147=>390,8150=>390,8151=>390,8152=>372, +8153=>372,8154=>621,8155=>563,8157=>500,8158=>500,8159=>500,8160=>675,8161=>675,8162=>675,8163=>675, +8164=>716,8165=>716,8166=>675,8167=>675,8168=>724,8169=>724,8170=>1020,8171=>980,8172=>838,8173=>500, +8174=>500,8175=>500,8178=>869,8179=>869,8180=>869,8182=>869,8183=>869,8184=>1065,8185=>891,8186=>1084, +8187=>894,8188=>850,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250, +8198=>167,8199=>696,8200=>380,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0, +8208=>415,8209=>415,8210=>696,8213=>1000,8214=>500,8215=>500,8219=>380,8223=>657,8227=>639,8228=>333, +8229=>667,8231=>348,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8241=>1887,8242=>264, +8243=>447,8244=>630,8245=>264,8246=>447,8247=>630,8248=>733,8251=>972,8252=>627,8253=>580,8254=>500, +8255=>828,8256=>828,8257=>329,8258=>1023,8259=>500,8260=>167,8261=>457,8262=>457,8263=>1030,8264=>829, +8265=>829,8266=>513,8267=>636,8268=>500,8269=>500,8270=>523,8271=>400,8272=>828,8273=>523,8274=>556, +8275=>1000,8276=>828,8277=>838,8278=>684,8279=>813,8280=>838,8281=>838,8282=>380,8283=>872,8284=>838, +8285=>380,8286=>380,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0, +8300=>0,8301=>0,8302=>0,8303=>0,8304=>438,8305=>219,8308=>438,8309=>438,8310=>438,8311=>438, +8312=>438,8313=>438,8314=>528,8315=>528,8316=>528,8317=>288,8318=>288,8319=>456,8320=>438,8321=>438, +8322=>438,8323=>438,8324=>438,8325=>438,8326=>438,8327=>438,8328=>438,8329=>438,8330=>528,8331=>528, +8332=>528,8333=>288,8334=>288,8336=>458,8337=>479,8338=>488,8339=>413,8340=>479,8352=>929,8353=>696, +8354=>696,8355=>696,8356=>696,8357=>1042,8358=>837,8359=>1518,8360=>1205,8361=>1103,8362=>904,8363=>696, +8365=>696,8366=>682,8367=>1392,8368=>696,8369=>696,8370=>696,8371=>696,8372=>859,8373=>696,8400=>0, +8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>1120,8449=>1170,8450=>734,8451=>1211, +8452=>896,8453=>1091,8454=>1144,8455=>614,8456=>698,8457=>1086,8459=>1073,8460=>913,8461=>888,8462=>712, +8463=>712,8464=>597,8465=>697,8466=>856,8467=>472,8468=>974,8469=>837,8470=>1203,8471=>1000,8472=>697, +8473=>750,8474=>850,8475=>938,8476=>814,8477=>801,8478=>896,8479=>710,8480=>1020,8481=>1281,8483=>755, +8484=>754,8485=>578,8486=>850,8487=>850,8488=>763,8489=>338,8490=>775,8491=>774,8492=>928,8493=>818, +8494=>854,8495=>636,8496=>729,8497=>808,8498=>683,8499=>1184,8500=>465,8501=>794,8502=>731,8503=>494, +8504=>684,8505=>380,8506=>945,8507=>1348,8508=>790,8509=>737,8510=>654,8511=>863,8512=>840,8513=>775, +8514=>557,8515=>637,8516=>760,8517=>830,8518=>716,8519=>678,8520=>343,8521=>343,8523=>872,8526=>547, +8531=>1035,8532=>1035,8533=>1035,8534=>1035,8535=>1035,8536=>1035,8537=>1035,8538=>1035,8539=>1035,8540=>1035, +8541=>1035,8542=>1035,8543=>615,8544=>372,8545=>659,8546=>945,8547=>1099,8548=>774,8549=>1099,8550=>1386, +8551=>1672,8552=>1121,8553=>771,8554=>1120,8555=>1407,8556=>637,8557=>734,8558=>830,8559=>995,8560=>343, +8561=>607,8562=>872,8563=>984,8564=>652,8565=>962,8566=>1227,8567=>1491,8568=>969,8569=>645,8570=>969, +8571=>1233,8572=>343,8573=>593,8574=>716,8575=>1042,8576=>1289,8577=>830,8578=>1289,8579=>734,8580=>593, +8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838, +8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838, +8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838, +8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838, +8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838, +8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838, +8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838, +8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838, +8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838, +8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838, +8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838, +8702=>838,8703=>838,8704=>774,8705=>696,8706=>544,8707=>683,8708=>683,8709=>856,8710=>697,8711=>697, +8712=>896,8713=>896,8714=>750,8715=>896,8716=>896,8717=>750,8718=>636,8719=>787,8720=>787,8721=>718, +8722=>838,8723=>838,8724=>696,8725=>365,8726=>696,8727=>838,8728=>626,8729=>380,8730=>667,8731=>667, +8732=>667,8733=>712,8734=>833,8735=>838,8736=>896,8737=>896,8738=>838,8739=>500,8740=>500,8741=>500, +8742=>500,8743=>812,8744=>812,8745=>812,8746=>812,8747=>610,8748=>929,8749=>1295,8750=>563,8751=>977, +8752=>1313,8753=>563,8754=>563,8755=>563,8756=>696,8757=>696,8758=>294,8759=>696,8760=>838,8761=>838, +8762=>838,8763=>838,8764=>838,8765=>838,8766=>838,8767=>838,8768=>375,8769=>838,8770=>838,8771=>838, +8772=>838,8773=>838,8774=>838,8775=>838,8776=>838,8777=>838,8778=>838,8779=>838,8780=>838,8781=>838, +8782=>838,8783=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1063,8789=>1063,8790=>838,8791=>838, +8792=>838,8793=>838,8794=>838,8795=>838,8796=>838,8797=>838,8798=>838,8799=>838,8800=>838,8801=>838, +8802=>838,8803=>838,8804=>838,8805=>838,8806=>838,8807=>838,8808=>841,8809=>841,8810=>1047,8811=>1047, +8812=>500,8813=>838,8814=>838,8815=>838,8816=>838,8817=>838,8818=>838,8819=>838,8820=>838,8821=>838, +8822=>838,8823=>838,8824=>838,8825=>838,8826=>838,8827=>838,8828=>838,8829=>838,8830=>838,8831=>838, +8832=>838,8833=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8840=>838,8841=>838, +8842=>838,8843=>838,8844=>812,8845=>812,8846=>812,8847=>838,8848=>838,8849=>838,8850=>838,8851=>796, +8852=>796,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838, +8862=>838,8863=>838,8864=>838,8865=>838,8866=>914,8867=>914,8868=>914,8869=>914,8870=>542,8871=>542, +8872=>914,8873=>914,8874=>914,8875=>914,8876=>914,8877=>914,8878=>914,8879=>914,8880=>838,8881=>838, +8882=>838,8883=>838,8884=>838,8885=>838,8886=>1000,8887=>1000,8888=>838,8889=>838,8890=>542,8891=>812, +8892=>812,8893=>812,8894=>838,8895=>838,8896=>843,8897=>843,8898=>843,8899=>843,8900=>494,8901=>380, +8902=>626,8903=>838,8904=>1000,8905=>1000,8906=>1000,8907=>1000,8908=>1000,8909=>838,8910=>812,8911=>812, +8912=>838,8913=>838,8914=>838,8915=>838,8916=>838,8917=>838,8918=>838,8919=>838,8920=>1422,8921=>1422, +8922=>838,8923=>838,8924=>838,8925=>838,8926=>838,8927=>838,8928=>838,8929=>838,8930=>838,8931=>838, +8932=>838,8933=>838,8934=>838,8935=>838,8936=>838,8937=>838,8938=>838,8939=>838,8940=>838,8941=>838, +8942=>1000,8943=>1000,8944=>1000,8945=>1000,8946=>1158,8947=>896,8948=>750,8949=>896,8950=>896,8951=>750, +8952=>896,8953=>896,8954=>1158,8955=>896,8956=>750,8957=>896,8958=>750,8959=>896,8960=>602,8961=>602, +8962=>716,8963=>838,8964=>838,8965=>838,8966=>838,8967=>488,8968=>457,8969=>457,8970=>457,8971=>457, +8972=>809,8973=>809,8974=>809,8975=>809,8976=>838,8977=>539,8984=>928,8985=>838,8988=>469,8989=>469, +8990=>469,8991=>469,8992=>610,8993=>610,8996=>1152,8997=>1152,8998=>1414,8999=>1152,9000=>1443,9003=>1414, +9004=>873,9075=>390,9076=>716,9077=>869,9082=>687,9085=>863,9095=>1152,9108=>873,9115=>500,9116=>500, +9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500, +9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>610,9166=>838,9167=>945, +9187=>873,9189=>769,9250=>716,9251=>716,9312=>847,9313=>847,9314=>847,9315=>847,9316=>847,9317=>847, +9318=>847,9319=>847,9320=>847,9321=>847,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769, +9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769, +9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769, +9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945, +9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945, +9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769, +9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769, +9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873, +9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873, +9686=>527,9687=>527,9688=>840,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387, +9696=>769,9697=>769,9698=>769,9699=>769,9700=>769,9701=>769,9702=>639,9703=>945,9704=>945,9705=>945, +9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945, +9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732, +9726=>732,9727=>769,9728=>896,9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896,9734=>896,9735=>573, +9736=>896,9737=>896,9738=>888,9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250,9744=>896,9745=>896, +9746=>896,9747=>532,9748=>896,9749=>896,9750=>896,9751=>896,9752=>896,9753=>896,9754=>896,9755=>896, +9756=>896,9757=>609,9758=>896,9759=>609,9760=>896,9761=>896,9762=>896,9763=>896,9764=>669,9765=>746, +9766=>649,9767=>784,9768=>545,9769=>896,9770=>896,9771=>896,9772=>710,9773=>896,9774=>896,9775=>896, +9776=>896,9777=>896,9778=>896,9779=>896,9780=>896,9781=>896,9782=>896,9783=>896,9784=>896,9785=>896, +9786=>896,9787=>896,9788=>896,9789=>896,9790=>896,9791=>614,9792=>731,9793=>731,9794=>896,9795=>896, +9796=>896,9797=>896,9798=>896,9799=>896,9800=>896,9801=>896,9802=>896,9803=>896,9804=>896,9805=>896, +9806=>896,9807=>896,9808=>896,9809=>896,9810=>896,9811=>896,9812=>896,9813=>896,9814=>896,9815=>896, +9816=>896,9817=>896,9818=>896,9819=>896,9820=>896,9821=>896,9822=>896,9823=>896,9824=>896,9825=>896, +9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9832=>896,9833=>472,9834=>638,9835=>896, +9836=>896,9837=>472,9838=>357,9839=>484,9840=>748,9841=>766,9842=>896,9843=>896,9844=>896,9845=>896, +9846=>896,9847=>896,9848=>896,9849=>896,9850=>896,9851=>896,9852=>896,9853=>896,9854=>896,9855=>896, +9856=>869,9857=>869,9858=>869,9859=>869,9860=>869,9861=>869,9862=>896,9863=>896,9864=>896,9865=>896, +9866=>896,9867=>896,9868=>896,9869=>896,9870=>896,9871=>896,9872=>896,9873=>896,9874=>896,9875=>896, +9876=>896,9877=>541,9878=>896,9879=>896,9880=>896,9881=>896,9882=>896,9883=>896,9884=>896,9888=>896, +9889=>702,9890=>1003,9891=>1085,9892=>1143,9893=>901,9894=>838,9895=>838,9896=>838,9897=>838,9898=>838, +9899=>838,9900=>838,9901=>838,9902=>838,9903=>838,9904=>844,9905=>838,9906=>731,9907=>732,9908=>732, +9909=>732,9910=>850,9911=>732,9912=>732,9985=>838,9986=>838,9987=>838,9988=>838,9990=>838,9991=>838, +9992=>838,9993=>838,9996=>838,9997=>838,9998=>838,9999=>838,10000=>838,10001=>838,10002=>838,10003=>838, +10004=>838,10005=>838,10006=>838,10007=>838,10008=>838,10009=>838,10010=>838,10011=>838,10012=>838,10013=>838, +10014=>838,10015=>838,10016=>838,10017=>838,10018=>838,10019=>838,10020=>838,10021=>838,10022=>838,10023=>838, +10025=>838,10026=>838,10027=>838,10028=>838,10029=>838,10030=>838,10031=>838,10032=>838,10033=>838,10034=>838, +10035=>838,10036=>838,10037=>838,10038=>838,10039=>838,10040=>838,10041=>838,10042=>838,10043=>838,10044=>838, +10045=>838,10046=>838,10047=>838,10048=>838,10049=>838,10050=>838,10051=>838,10052=>838,10053=>838,10054=>838, +10055=>838,10056=>838,10057=>838,10058=>838,10059=>838,10061=>896,10063=>896,10064=>896,10065=>896,10066=>896, +10070=>896,10072=>838,10073=>838,10074=>838,10075=>347,10076=>347,10077=>587,10078=>587,10081=>838,10082=>838, +10083=>838,10084=>838,10085=>838,10086=>838,10087=>838,10088=>838,10089=>838,10090=>838,10091=>838,10092=>838, +10093=>838,10094=>838,10095=>838,10096=>838,10097=>838,10098=>838,10099=>838,10100=>838,10101=>838,10102=>847, +10103=>847,10104=>847,10105=>847,10106=>847,10107=>847,10108=>847,10109=>847,10110=>847,10111=>847,10112=>838, +10113=>838,10114=>838,10115=>838,10116=>838,10117=>838,10118=>838,10119=>838,10120=>838,10121=>838,10122=>838, +10123=>838,10124=>838,10125=>838,10126=>838,10127=>838,10128=>838,10129=>838,10130=>838,10131=>838,10132=>838, +10136=>838,10137=>838,10138=>838,10139=>838,10140=>838,10141=>838,10142=>838,10143=>838,10144=>838,10145=>838, +10146=>838,10147=>838,10148=>838,10149=>838,10150=>838,10151=>838,10152=>838,10153=>838,10154=>838,10155=>838, +10156=>838,10157=>838,10158=>838,10159=>838,10161=>838,10162=>838,10163=>838,10164=>838,10165=>838,10166=>838, +10167=>838,10168=>838,10169=>838,10170=>838,10171=>838,10172=>838,10173=>838,10174=>838,10181=>457,10182=>457, +10208=>494,10214=>487,10215=>487,10216=>457,10217=>457,10218=>721,10219=>721,10224=>838,10225=>838,10226=>838, +10227=>838,10228=>1157,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434, +10237=>1434,10238=>1434,10239=>1434,10240=>781,10241=>781,10242=>781,10243=>781,10244=>781,10245=>781,10246=>781, +10247=>781,10248=>781,10249=>781,10250=>781,10251=>781,10252=>781,10253=>781,10254=>781,10255=>781,10256=>781, +10257=>781,10258=>781,10259=>781,10260=>781,10261=>781,10262=>781,10263=>781,10264=>781,10265=>781,10266=>781, +10267=>781,10268=>781,10269=>781,10270=>781,10271=>781,10272=>781,10273=>781,10274=>781,10275=>781,10276=>781, +10277=>781,10278=>781,10279=>781,10280=>781,10281=>781,10282=>781,10283=>781,10284=>781,10285=>781,10286=>781, +10287=>781,10288=>781,10289=>781,10290=>781,10291=>781,10292=>781,10293=>781,10294=>781,10295=>781,10296=>781, +10297=>781,10298=>781,10299=>781,10300=>781,10301=>781,10302=>781,10303=>781,10304=>781,10305=>781,10306=>781, +10307=>781,10308=>781,10309=>781,10310=>781,10311=>781,10312=>781,10313=>781,10314=>781,10315=>781,10316=>781, +10317=>781,10318=>781,10319=>781,10320=>781,10321=>781,10322=>781,10323=>781,10324=>781,10325=>781,10326=>781, +10327=>781,10328=>781,10329=>781,10330=>781,10331=>781,10332=>781,10333=>781,10334=>781,10335=>781,10336=>781, +10337=>781,10338=>781,10339=>781,10340=>781,10341=>781,10342=>781,10343=>781,10344=>781,10345=>781,10346=>781, +10347=>781,10348=>781,10349=>781,10350=>781,10351=>781,10352=>781,10353=>781,10354=>781,10355=>781,10356=>781, +10357=>781,10358=>781,10359=>781,10360=>781,10361=>781,10362=>781,10363=>781,10364=>781,10365=>781,10366=>781, +10367=>781,10368=>781,10369=>781,10370=>781,10371=>781,10372=>781,10373=>781,10374=>781,10375=>781,10376=>781, +10377=>781,10378=>781,10379=>781,10380=>781,10381=>781,10382=>781,10383=>781,10384=>781,10385=>781,10386=>781, +10387=>781,10388=>781,10389=>781,10390=>781,10391=>781,10392=>781,10393=>781,10394=>781,10395=>781,10396=>781, +10397=>781,10398=>781,10399=>781,10400=>781,10401=>781,10402=>781,10403=>781,10404=>781,10405=>781,10406=>781, +10407=>781,10408=>781,10409=>781,10410=>781,10411=>781,10412=>781,10413=>781,10414=>781,10415=>781,10416=>781, +10417=>781,10418=>781,10419=>781,10420=>781,10421=>781,10422=>781,10423=>781,10424=>781,10425=>781,10426=>781, +10427=>781,10428=>781,10429=>781,10430=>781,10431=>781,10432=>781,10433=>781,10434=>781,10435=>781,10436=>781, +10437=>781,10438=>781,10439=>781,10440=>781,10441=>781,10442=>781,10443=>781,10444=>781,10445=>781,10446=>781, +10447=>781,10448=>781,10449=>781,10450=>781,10451=>781,10452=>781,10453=>781,10454=>781,10455=>781,10456=>781, +10457=>781,10458=>781,10459=>781,10460=>781,10461=>781,10462=>781,10463=>781,10464=>781,10465=>781,10466=>781, +10467=>781,10468=>781,10469=>781,10470=>781,10471=>781,10472=>781,10473=>781,10474=>781,10475=>781,10476=>781, +10477=>781,10478=>781,10479=>781,10480=>781,10481=>781,10482=>781,10483=>781,10484=>781,10485=>781,10486=>781, +10487=>781,10488=>781,10489=>781,10490=>781,10491=>781,10492=>781,10493=>781,10494=>781,10495=>781,10502=>838, +10503=>838,10506=>838,10507=>838,10560=>838,10561=>838,10627=>753,10628=>753,10702=>838,10703=>1046,10704=>1046, +10705=>1000,10706=>1000,10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838,10747=>838,10752=>1000,10753=>1000, +10754=>1000,10764=>1661,10765=>563,10766=>563,10767=>563,10768=>563,10769=>563,10770=>563,10771=>563,10772=>563, +10773=>563,10774=>563,10775=>563,10776=>563,10777=>563,10778=>563,10779=>563,10780=>563,10799=>838,10877=>838, +10878=>838,10879=>838,10880=>838,10881=>838,10882=>838,10883=>838,10884=>838,10885=>838,10886=>838,10887=>838, +10888=>838,10889=>838,10890=>838,10891=>838,10892=>838,10893=>838,10894=>838,10895=>838,10896=>838,10897=>838, +10898=>838,10899=>838,10900=>838,10901=>838,10902=>838,10903=>838,10904=>838,10905=>838,10906=>838,10907=>838, +10908=>838,10909=>838,10910=>838,10911=>838,10912=>838,10926=>838,10927=>838,10928=>838,10929=>838,10930=>838, +10931=>838,10932=>838,10933=>838,10934=>838,10935=>838,10936=>838,10937=>838,10938=>838,11001=>838,11002=>838, +11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838, +11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838,11026=>945,11027=>945, +11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11039=>869,11040=>869,11041=>873, +11042=>873,11043=>873,11044=>1119,11091=>869,11092=>869,11360=>637,11361=>360,11362=>637,11363=>733,11364=>770, +11365=>675,11366=>478,11367=>956,11368=>712,11369=>775,11370=>665,11371=>725,11372=>582,11373=>860,11374=>995, +11375=>774,11377=>778,11378=>1221,11379=>1056,11380=>652,11381=>698,11382=>565,11383=>782,11385=>538,11386=>687, +11387=>559,11388=>219,11389=>487,11568=>691,11569=>941,11570=>941,11571=>725,11572=>725,11573=>725,11574=>676, +11575=>774,11576=>774,11577=>683,11578=>683,11579=>802,11580=>989,11581=>761,11582=>623,11583=>761,11584=>941, +11585=>941,11586=>373,11587=>740,11588=>837,11589=>914,11590=>672,11591=>737,11592=>680,11593=>683,11594=>602, +11595=>1039,11596=>778,11597=>837,11598=>683,11599=>372,11600=>778,11601=>373,11602=>725,11603=>691,11604=>941, +11605=>941,11606=>837,11607=>373,11608=>836,11609=>941,11610=>941,11611=>734,11612=>876,11613=>771,11614=>734, +11615=>683,11616=>774,11617=>837,11618=>683,11619=>850,11620=>697,11621=>850,11631=>716,11800=>580,11810=>457, +11811=>457,11812=>457,11813=>457,11822=>580,19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896, +19910=>896,19911=>896,19912=>896,19913=>896,19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896, +19920=>896,19921=>896,19922=>896,19923=>896,19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896, +19930=>896,19931=>896,19932=>896,19933=>896,19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896, +19940=>896,19941=>896,19942=>896,19943=>896,19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896, +19950=>896,19951=>896,19952=>896,19953=>896,19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896, +19960=>896,19961=>896,19962=>896,19963=>896,19964=>896,19965=>896,19966=>896,19967=>896,42564=>720,42565=>595, +42566=>436,42567=>440,42572=>1405,42573=>1173,42576=>1234,42577=>1027,42580=>1174,42581=>972,42582=>1093,42583=>958, +42594=>1085,42595=>924,42596=>1096,42597=>912,42598=>1260,42599=>997,42600=>850,42601=>687,42602=>1037,42603=>868, +42604=>1406,42605=>1106,42606=>961,42634=>963,42635=>787,42636=>682,42637=>580,42644=>808,42645=>712,42760=>500, +42761=>500,42762=>500,42763=>500,42764=>500,42765=>500,42766=>500,42767=>500,42768=>500,42769=>500,42770=>500, +42771=>500,42772=>500,42773=>500,42774=>500,42779=>400,42780=>400,42781=>287,42782=>287,42783=>287,42790=>837, +42791=>712,42792=>1031,42793=>857,42794=>696,42795=>557,42800=>559,42801=>595,42802=>1349,42803=>1052,42804=>1284, +42805=>1064,42806=>1216,42807=>1054,42808=>1079,42809=>922,42810=>1079,42811=>922,42812=>1035,42813=>922,42814=>698, +42815=>549,42822=>850,42823=>542,42824=>683,42825=>531,42826=>918,42827=>814,42830=>1406,42831=>1106,42880=>637, +42881=>343,42882=>837,42883=>712,42889=>400,42890=>386,42891=>456,42892=>306,43003=>683,43004=>733,43005=>995, +43006=>372,43007=>1325,63173=>687,64256=>810,64257=>741,64258=>741,64259=>1115,64260=>1116,64261=>808,64262=>1020, +64275=>1388,64276=>1384,64277=>1378,64278=>1384,64279=>1713,64285=>343,64286=>0,64287=>663,64288=>720,64289=>963, +64290=>890,64291=>988,64292=>963,64293=>938,64294=>988,64295=>988,64296=>976,64297=>838,64298=>949,64299=>949, +64300=>949,64301=>949,64302=>751,64303=>751,64304=>751,64305=>673,64306=>537,64307=>654,64308=>712,64309=>438, +64310=>491,64312=>724,64313=>438,64314=>649,64315=>650,64316=>679,64318=>775,64320=>497,64321=>773,64323=>718, +64324=>687,64326=>751,64327=>729,64328=>649,64329=>949,64330=>751,64331=>343,64332=>673,64333=>650,64334=>687, +64335=>751,64338=>1005,64339=>1059,64340=>375,64341=>408,64342=>1005,64343=>1059,64344=>375,64345=>408,64346=>1005, +64347=>1059,64348=>375,64349=>408,64350=>1005,64351=>1059,64352=>375,64353=>408,64354=>1005,64355=>1059,64356=>375, +64357=>408,64358=>1005,64359=>1059,64360=>375,64361=>408,64362=>1162,64363=>1191,64364=>655,64365=>720,64366=>1162, +64367=>1191,64368=>655,64369=>720,64370=>721,64371=>721,64372=>721,64373=>721,64374=>721,64375=>721,64376=>721, +64377=>721,64378=>721,64379=>721,64380=>721,64381=>721,64382=>721,64383=>721,64384=>721,64385=>721,64394=>576, +64395=>622,64396=>576,64397=>622,64398=>1024,64399=>1024,64400=>582,64401=>582,64402=>1024,64403=>1024,64404=>582, +64405=>582,64414=>854,64415=>900,64473=>622,64474=>627,64488=>375,64489=>408,64508=>917,64509=>1012,64510=>375, +64511=>408,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0, +65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0, +65059=>0,65136=>342,65137=>342,65138=>342,65139=>346,65140=>342,65142=>342,65143=>342,65144=>342,65145=>342, +65146=>342,65147=>342,65148=>342,65149=>342,65150=>342,65151=>342,65152=>511,65153=>343,65154=>375,65155=>343, +65156=>375,65157=>622,65158=>627,65159=>343,65160=>375,65161=>917,65162=>917,65163=>375,65164=>408,65165=>343, +65166=>375,65167=>1005,65168=>1059,65169=>375,65170=>408,65171=>590,65172=>606,65173=>1005,65174=>1059,65175=>375, +65176=>408,65177=>1005,65178=>1059,65179=>375,65180=>408,65181=>721,65182=>721,65183=>721,65184=>721,65185=>721, +65186=>721,65187=>721,65188=>721,65189=>721,65190=>721,65191=>721,65192=>721,65193=>513,65194=>578,65195=>513, +65196=>578,65197=>576,65198=>622,65199=>576,65200=>622,65201=>1380,65202=>1414,65203=>983,65204=>1018,65205=>1380, +65206=>1414,65207=>983,65208=>1018,65209=>1345,65210=>1364,65211=>966,65212=>985,65213=>1345,65214=>1364,65215=>966, +65216=>985,65217=>1039,65218=>1071,65219=>942,65220=>974,65221=>1039,65222=>1071,65223=>942,65224=>974,65225=>683, +65226=>683,65227=>683,65228=>564,65229=>683,65230=>683,65231=>683,65232=>564,65233=>1162,65234=>1191,65235=>655, +65236=>720,65237=>894,65238=>901,65239=>655,65240=>720,65241=>917,65242=>931,65243=>582,65244=>582,65245=>868, +65246=>893,65247=>375,65248=>408,65249=>733,65250=>784,65251=>619,65252=>670,65253=>854,65254=>900,65255=>375, +65256=>408,65257=>590,65258=>606,65259=>693,65260=>660,65261=>622,65262=>627,65263=>917,65264=>1012,65265=>917, +65266=>1012,65267=>375,65268=>408,65269=>745,65270=>759,65271=>745,65272=>759,65273=>745,65274=>759,65275=>745, +65276=>759,65279=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1113); +$enc=''; +$diff=''; +$file='dejavusansb.z'; +$ctg='dejavusansb.ctg.z'; +$originalsize=573136; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansb.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansb.z new file mode 100755 index 00000000..9d465a6e Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansb.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansbi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansbi.ctg.z new file mode 100755 index 00000000..9d1fcd61 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansbi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansbi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansbi.php new file mode 100755 index 00000000..419ca9be --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansbi.php @@ -0,0 +1,458 @@ +928,'Descent'=>-236,'CapHeight'=>-51,'Flags'=>96,'FontBBox'=>'[-1067 -385 2005 1121]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>348,33=>456,34=>521,35=>696,36=>696,37=>1002,38=>872,39=>306,40=>457, +41=>457,42=>523,43=>838,44=>380,45=>415,46=>380,47=>365,48=>696,49=>696,50=>696, +51=>696,52=>696,53=>696,54=>696,55=>696,56=>696,57=>696,58=>400,59=>400,60=>838, +61=>838,62=>838,63=>580,64=>1000,65=>774,66=>762,67=>734,68=>830,69=>683,70=>683, +71=>821,72=>837,73=>372,74=>372,75=>775,76=>637,77=>995,78=>837,79=>850,80=>733, +81=>850,82=>770,83=>720,84=>682,85=>812,86=>774,87=>1103,88=>771,89=>724,90=>725, +91=>457,92=>365,93=>457,94=>838,95=>500,96=>500,97=>675,98=>716,99=>593,100=>716, +101=>678,102=>435,103=>716,104=>712,105=>343,106=>343,107=>665,108=>343,109=>1042,110=>712, +111=>687,112=>716,113=>716,114=>493,115=>595,116=>478,117=>712,118=>652,119=>924,120=>645, +121=>652,122=>582,123=>712,124=>365,125=>712,126=>838,8364=>696,8218=>380,402=>435,8222=>644, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1454,352=>720,8249=>412,338=>1167,381=>725,8216=>380, +8217=>380,8220=>644,8221=>644,8226=>639,8211=>500,8212=>1000,732=>500,8482=>1000,353=>595,8250=>412, +339=>1094,382=>582,376=>724,160=>348,161=>456,162=>696,163=>696,164=>636,165=>696,166=>365, +167=>500,168=>500,169=>1000,170=>564,171=>650,172=>838,173=>415,174=>1000,175=>500,176=>500, +177=>838,178=>438,179=>438,180=>500,181=>736,182=>636,183=>380,184=>500,185=>438,186=>564, +187=>650,188=>1035,189=>1035,190=>1035,191=>580,192=>774,193=>774,194=>774,195=>774,196=>774, +197=>774,198=>1085,199=>734,200=>683,201=>683,202=>683,203=>683,204=>372,205=>372,206=>372, +207=>372,208=>845,209=>837,210=>850,211=>850,212=>850,213=>850,214=>850,215=>838,216=>850, +217=>812,218=>812,219=>812,220=>812,221=>724,222=>742,223=>719,224=>675,225=>675,226=>675, +227=>675,228=>675,229=>675,230=>1048,231=>593,232=>678,233=>678,234=>678,235=>678,236=>343, +237=>343,238=>343,239=>343,240=>687,241=>712,242=>687,243=>687,244=>687,245=>687,246=>687, +247=>838,248=>687,249=>712,250=>712,251=>712,252=>712,253=>652,254=>716,255=>652,256=>774, +257=>675,258=>774,259=>675,260=>774,261=>675,262=>734,263=>593,264=>734,265=>593,266=>734, +267=>593,268=>734,269=>593,270=>830,271=>716,272=>845,273=>716,274=>683,275=>678,276=>683, +277=>678,278=>683,279=>678,280=>683,281=>678,282=>683,283=>678,284=>821,285=>716,286=>821, +287=>716,288=>821,289=>716,290=>821,291=>716,292=>837,293=>712,294=>974,295=>790,296=>372, +297=>343,298=>372,299=>343,300=>372,301=>343,302=>372,303=>343,304=>372,305=>343,306=>744, +307=>686,308=>372,309=>343,310=>775,311=>665,312=>665,313=>637,314=>343,315=>637,316=>343, +317=>637,318=>343,319=>637,320=>343,321=>660,322=>375,323=>837,324=>712,325=>837,326=>712, +327=>837,328=>712,329=>983,330=>837,331=>712,332=>850,333=>687,334=>850,335=>687,336=>850, +337=>687,340=>770,341=>493,342=>770,343=>493,344=>770,345=>493,346=>720,347=>595,348=>720, +349=>595,350=>720,351=>595,354=>682,355=>478,356=>682,357=>478,358=>682,359=>478,360=>812, +361=>712,362=>812,363=>712,364=>812,365=>712,366=>812,367=>712,368=>812,369=>712,370=>812, +371=>712,372=>1103,373=>924,374=>724,375=>652,377=>725,378=>582,379=>725,380=>582,383=>435, +384=>716,385=>811,386=>762,387=>716,388=>762,389=>716,390=>734,391=>734,392=>593,393=>845, +394=>879,395=>762,396=>716,397=>687,398=>683,399=>850,400=>696,401=>683,403=>821,404=>793, +405=>1045,406=>436,407=>389,408=>775,409=>665,410=>360,411=>592,412=>1042,413=>837,414=>712, +415=>850,416=>850,417=>687,418=>1114,419=>962,420=>782,421=>716,422=>770,423=>720,424=>595, +425=>683,426=>552,427=>478,428=>707,429=>478,430=>682,431=>812,432=>712,433=>769,434=>813, +435=>797,436=>778,437=>725,438=>582,439=>772,440=>772,441=>641,442=>582,443=>696,444=>772, +445=>641,446=>573,447=>716,448=>372,449=>659,450=>544,451=>372,452=>1548,453=>1450,454=>1307, +455=>977,456=>979,457=>670,458=>1193,459=>1213,460=>1063,461=>774,462=>675,463=>372,464=>343, +465=>850,466=>687,467=>812,468=>712,469=>812,470=>712,471=>812,472=>712,473=>812,474=>712, +475=>812,476=>712,477=>678,478=>774,479=>675,480=>774,481=>675,482=>1085,483=>1048,484=>821, +485=>716,486=>821,487=>716,488=>775,489=>665,490=>850,491=>687,492=>850,493=>687,494=>772, +495=>582,496=>343,497=>1548,498=>1450,499=>1307,500=>821,501=>716,502=>1289,503=>787,504=>837, +505=>712,506=>774,507=>675,508=>1085,509=>1048,510=>850,511=>687,512=>774,513=>675,514=>774, +515=>675,516=>683,517=>678,518=>683,519=>678,520=>372,521=>343,522=>372,523=>343,524=>850, +525=>687,526=>850,527=>687,528=>770,529=>493,530=>770,531=>493,532=>812,533=>712,534=>812, +535=>712,536=>720,537=>595,538=>682,539=>478,540=>690,541=>607,542=>837,543=>712,544=>837, +545=>865,546=>809,547=>659,548=>725,549=>582,550=>774,551=>675,552=>683,553=>678,554=>850, +555=>687,556=>850,557=>687,558=>850,559=>687,560=>850,561=>687,562=>724,563=>652,564=>492, +565=>867,566=>512,567=>343,568=>1088,569=>1088,570=>774,571=>734,572=>593,573=>637,574=>682, +575=>595,576=>582,577=>782,578=>614,579=>762,580=>812,581=>774,582=>683,583=>678,584=>372, +585=>343,586=>860,587=>791,588=>770,589=>493,590=>724,591=>652,592=>675,593=>716,594=>716, +595=>716,596=>593,597=>593,598=>791,599=>792,600=>678,601=>678,602=>876,603=>557,604=>545, +605=>774,606=>731,607=>343,608=>792,609=>716,610=>627,611=>735,612=>635,613=>712,614=>712, +615=>712,616=>545,617=>440,618=>545,619=>559,620=>693,621=>343,622=>841,623=>1042,624=>1042, +625=>1042,626=>712,627=>793,628=>642,629=>687,630=>909,631=>682,632=>796,633=>538,634=>538, +635=>650,636=>493,637=>493,638=>596,639=>596,640=>642,641=>642,642=>595,643=>415,644=>435, +645=>605,646=>552,647=>478,648=>478,649=>920,650=>769,651=>670,652=>652,653=>924,654=>652, +655=>724,656=>694,657=>684,658=>641,659=>641,660=>573,661=>573,662=>573,663=>573,664=>850, +665=>633,666=>731,667=>685,668=>691,669=>343,670=>732,671=>539,672=>792,673=>573,674=>573, +675=>1156,676=>1214,677=>1155,678=>974,679=>769,680=>929,681=>1026,682=>792,683=>780,684=>591, +685=>415,686=>677,687=>789,688=>456,689=>456,690=>219,691=>315,692=>315,693=>315,694=>411, +695=>591,696=>417,697=>302,698=>521,699=>380,700=>380,701=>380,702=>366,703=>366,704=>326, +705=>326,706=>500,707=>500,708=>500,709=>500,711=>500,712=>306,713=>500,714=>500,715=>500, +716=>306,717=>500,718=>500,719=>500,720=>337,721=>337,722=>366,723=>366,724=>500,725=>500, +726=>416,727=>328,728=>500,729=>500,730=>500,731=>500,733=>500,734=>351,735=>500,736=>412, +737=>219,738=>381,739=>413,740=>326,741=>500,742=>500,743=>500,744=>500,745=>500,748=>500, +749=>500,750=>644,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>698,881=>565,882=>1022, +883=>836,884=>302,885=>302,886=>837,887=>701,890=>500,891=>593,892=>550,893=>549,894=>400, +900=>441,901=>500,902=>797,903=>380,904=>846,905=>1009,906=>563,908=>891,910=>980,911=>894, +912=>390,913=>774,914=>762,915=>637,916=>774,917=>683,918=>725,919=>837,920=>850,921=>372, +922=>775,923=>774,924=>995,925=>837,926=>632,927=>850,928=>837,929=>733,931=>683,932=>682, +933=>724,934=>850,935=>771,936=>850,937=>850,938=>372,939=>724,940=>687,941=>557,942=>712, +943=>390,944=>675,945=>687,946=>716,947=>681,948=>687,949=>557,950=>591,951=>712,952=>687, +953=>390,954=>710,955=>633,956=>736,957=>681,958=>591,959=>687,960=>791,961=>716,962=>593, +963=>779,964=>638,965=>675,966=>782,967=>645,968=>794,969=>869,970=>390,971=>675,972=>687, +973=>675,974=>869,975=>775,976=>651,977=>661,978=>746,979=>981,980=>746,981=>796,982=>869, +983=>744,984=>850,985=>687,986=>734,987=>593,988=>683,989=>494,990=>702,991=>660,992=>919, +993=>627,994=>1093,995=>837,996=>832,997=>716,998=>928,999=>744,1000=>733,1001=>650,1002=>789, +1003=>671,1004=>752,1005=>716,1006=>682,1007=>590,1008=>744,1009=>716,1010=>593,1011=>343,1012=>850, +1013=>645,1014=>645,1015=>742,1016=>716,1017=>734,1018=>995,1019=>732,1020=>716,1021=>734,1022=>734, +1023=>698,1024=>683,1025=>683,1026=>878,1027=>637,1028=>734,1029=>720,1030=>372,1031=>372,1032=>372, +1033=>1154,1034=>1130,1035=>878,1036=>817,1037=>837,1038=>771,1039=>837,1040=>774,1041=>762,1042=>762, +1043=>637,1044=>891,1045=>683,1046=>1224,1047=>710,1048=>837,1049=>837,1050=>817,1051=>831,1052=>995, +1053=>837,1054=>850,1055=>837,1056=>733,1057=>734,1058=>682,1059=>771,1060=>992,1061=>771,1062=>928, +1063=>808,1064=>1235,1065=>1326,1066=>939,1067=>1036,1068=>762,1069=>734,1070=>1174,1071=>770,1072=>675, +1073=>698,1074=>633,1075=>522,1076=>808,1077=>678,1078=>995,1079=>581,1080=>701,1081=>701,1082=>679, +1083=>732,1084=>817,1085=>691,1086=>687,1087=>691,1088=>716,1089=>593,1090=>580,1091=>652,1092=>992, +1093=>645,1094=>741,1095=>687,1096=>1062,1097=>1105,1098=>751,1099=>904,1100=>632,1101=>593,1102=>972, +1103=>642,1104=>678,1105=>678,1106=>714,1107=>522,1108=>593,1109=>595,1110=>343,1111=>343,1112=>343, +1113=>991,1114=>956,1115=>734,1116=>679,1117=>701,1118=>652,1119=>691,1120=>1093,1121=>869,1122=>840, +1123=>736,1124=>1012,1125=>839,1126=>992,1127=>832,1128=>1358,1129=>1121,1130=>850,1131=>687,1132=>1236, +1133=>1007,1134=>696,1135=>557,1136=>1075,1137=>1061,1138=>850,1139=>687,1140=>850,1141=>695,1142=>850, +1143=>695,1144=>1148,1145=>1043,1146=>1074,1147=>863,1148=>1405,1149=>1173,1150=>1093,1151=>869,1152=>734, +1153=>593,1154=>652,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>938, +1163=>806,1164=>762,1165=>611,1166=>736,1167=>718,1168=>637,1169=>522,1170=>666,1171=>543,1172=>789, +1173=>522,1174=>1224,1175=>995,1176=>710,1177=>581,1178=>775,1179=>679,1180=>817,1181=>679,1182=>817, +1183=>679,1184=>1015,1185=>826,1186=>837,1187=>691,1188=>1103,1189=>871,1190=>1254,1191=>979,1192=>946, +1193=>859,1194=>734,1195=>593,1196=>682,1197=>580,1198=>724,1199=>652,1200=>724,1201=>652,1202=>771, +1203=>645,1204=>1104,1205=>1001,1206=>808,1207=>687,1208=>808,1209=>687,1210=>808,1211=>712,1212=>1026, +1213=>810,1214=>1026,1215=>810,1216=>372,1217=>1224,1218=>995,1219=>778,1220=>629,1221=>933,1222=>804, +1223=>837,1224=>691,1225=>938,1226=>806,1227=>808,1228=>687,1229=>1096,1230=>932,1231=>343,1232=>774, +1233=>675,1234=>774,1235=>675,1236=>1085,1237=>1048,1238=>683,1239=>678,1240=>850,1241=>678,1242=>850, +1243=>678,1244=>1224,1245=>995,1246=>710,1247=>581,1248=>772,1249=>641,1250=>837,1251=>701,1252=>837, +1253=>701,1254=>850,1255=>687,1256=>850,1257=>687,1258=>850,1259=>687,1260=>734,1261=>593,1262=>771, +1263=>652,1264=>771,1265=>652,1266=>771,1267=>652,1268=>808,1269=>687,1270=>637,1271=>522,1272=>1036, +1273=>904,1274=>666,1275=>543,1276=>771,1277=>645,1278=>771,1279=>645,1280=>762,1281=>608,1282=>1159, +1283=>893,1284=>1119,1285=>920,1286=>828,1287=>693,1288=>1242,1289=>1017,1290=>1289,1291=>1013,1292=>839, +1293=>638,1294=>938,1295=>803,1296=>696,1297=>557,1298=>831,1299=>732,1300=>1286,1301=>1070,1302=>1065, +1303=>982,1304=>1082,1305=>960,1306=>850,1307=>716,1308=>1103,1309=>924,1312=>1248,1313=>1022,1314=>1254, +1315=>979,1316=>957,1317=>807,1329=>984,1330=>812,1331=>984,1332=>984,1333=>812,1334=>777,1335=>812, +1336=>812,1337=>975,1338=>984,1339=>812,1340=>710,1341=>1078,1342=>1136,1343=>812,1344=>710,1345=>757, +1346=>984,1347=>876,1348=>984,1349=>793,1350=>984,1351=>812,1352=>812,1353=>812,1354=>958,1355=>777, +1356=>984,1357=>812,1358=>984,1359=>720,1360=>812,1361=>793,1362=>895,1363=>850,1364=>936,1365=>850, +1366=>720,1369=>366,1370=>380,1371=>550,1372=>550,1373=>380,1374=>546,1375=>521,1377=>1042,1378=>712, +1379=>866,1380=>868,1381=>712,1382=>817,1383=>653,1384=>712,1385=>811,1386=>817,1387=>712,1388=>498, +1389=>1018,1390=>716,1391=>712,1392=>712,1393=>716,1394=>819,1395=>712,1396=>751,1397=>343,1398=>882, +1399=>559,1400=>712,1401=>559,1402=>1042,1403=>559,1404=>863,1405=>712,1406=>813,1407=>1042,1408=>712, +1409=>716,1410=>571,1411=>1042,1412=>778,1413=>687,1414=>720,1415=>862,1417=>400,1418=>487,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>415,1471=>0,1472=>372,1473=>0,1474=>0,1475=>372,1478=>497, +1479=>0,1488=>751,1489=>673,1490=>537,1491=>654,1492=>712,1493=>343,1494=>491,1495=>712,1496=>724, +1497=>343,1498=>649,1499=>650,1500=>679,1501=>712,1502=>775,1503=>343,1504=>497,1505=>773,1506=>678, +1507=>718,1508=>687,1509=>628,1510=>751,1511=>729,1512=>649,1513=>949,1514=>751,1520=>664,1521=>664, +1522=>663,1523=>444,1524=>710,3647=>743,3713=>815,3714=>748,3716=>749,3719=>569,3720=>742,3722=>744, +3725=>761,3732=>706,3733=>704,3734=>747,3735=>819,3737=>730,3738=>727,3739=>727,3740=>922,3741=>827, +3742=>866,3743=>866,3745=>836,3746=>761,3747=>770,3749=>769,3751=>713,3754=>827,3755=>1031,3757=>724, +3758=>784,3759=>934,3760=>688,3761=>0,3762=>610,3763=>610,3764=>0,3765=>0,3766=>0,3767=>0, +3768=>0,3769=>0,3771=>0,3772=>0,3773=>670,3776=>516,3777=>860,3778=>516,3779=>650,3780=>632, +3782=>759,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>771,3793=>771,3794=>693, +3795=>836,3796=>729,3797=>729,3798=>849,3799=>790,3800=>759,3801=>910,3804=>1363,3805=>1363,4256=>918, +4257=>744,4258=>739,4259=>837,4260=>649,4261=>773,4262=>857,4263=>889,4264=>530,4265=>633,4266=>857, +4267=>900,4268=>643,4269=>903,4270=>814,4271=>752,4272=>869,4273=>643,4274=>643,4275=>886,4276=>886, +4277=>733,4278=>653,4279=>643,4280=>646,4281=>643,4282=>790,4283=>902,4284=>633,4285=>619,4286=>643, +4287=>778,4288=>892,4289=>601,4290=>742,4291=>616,4292=>633,4293=>742,4304=>553,4305=>552,4306=>596, +4307=>815,4308=>562,4309=>563,4310=>553,4311=>827,4312=>553,4313=>543,4314=>1074,4315=>563,4316=>563, +4317=>812,4318=>552,4319=>591,4320=>822,4321=>563,4322=>690,4323=>583,4324=>813,4325=>562,4326=>813, +4327=>563,4328=>563,4329=>563,4330=>632,4331=>563,4332=>563,4333=>552,4334=>563,4335=>563,4336=>558, +4337=>604,4338=>552,4339=>552,4340=>553,4341=>605,4342=>852,4343=>635,4344=>563,4345=>596,4346=>542, +4347=>684,4348=>368,5121=>774,5122=>774,5123=>774,5124=>774,5125=>905,5126=>905,5127=>905,5129=>905, +5130=>905,5131=>905,5132=>1018,5133=>1009,5134=>1018,5135=>1009,5136=>1018,5137=>1009,5138=>1149,5139=>1140, +5140=>1149,5141=>1140,5142=>905,5143=>1149,5144=>1142,5145=>1149,5146=>1142,5147=>905,5149=>310,5150=>529, +5151=>425,5152=>425,5153=>395,5154=>395,5155=>395,5156=>395,5157=>564,5158=>470,5159=>310,5160=>395, +5161=>395,5162=>395,5163=>1213,5164=>986,5165=>1216,5166=>1297,5167=>774,5168=>774,5169=>774,5170=>774, +5171=>886,5172=>886,5173=>886,5175=>886,5176=>886,5177=>886,5178=>1018,5179=>1009,5180=>1018,5181=>1009, +5182=>1018,5183=>1009,5184=>1149,5185=>1140,5186=>1149,5187=>1140,5188=>1149,5189=>1142,5190=>1149,5191=>1142, +5192=>886,5193=>576,5194=>229,5196=>812,5197=>812,5198=>812,5199=>812,5200=>815,5201=>815,5202=>815, +5204=>815,5205=>815,5206=>815,5207=>1056,5208=>1048,5209=>1056,5210=>1048,5211=>1056,5212=>1048,5213=>1060, +5214=>1054,5215=>1060,5216=>1054,5217=>1060,5218=>1052,5219=>1060,5220=>1052,5221=>1060,5222=>483,5223=>1005, +5224=>1005,5225=>1023,5226=>1017,5227=>743,5228=>743,5229=>743,5230=>743,5231=>743,5232=>743,5233=>743, +5234=>743,5235=>743,5236=>1029,5237=>975,5238=>980,5239=>975,5240=>980,5241=>975,5242=>1029,5243=>975, +5244=>1029,5245=>975,5246=>980,5247=>975,5248=>980,5249=>975,5250=>980,5251=>501,5252=>501,5253=>938, +5254=>938,5255=>938,5256=>938,5257=>743,5258=>743,5259=>743,5260=>743,5261=>743,5262=>743,5263=>743, +5264=>743,5265=>743,5266=>1029,5267=>975,5268=>1029,5269=>975,5270=>1029,5271=>975,5272=>1029,5273=>975, +5274=>1029,5275=>975,5276=>1029,5277=>975,5278=>1029,5279=>975,5280=>1029,5281=>501,5282=>501,5283=>626, +5284=>626,5285=>626,5286=>626,5287=>626,5288=>626,5289=>626,5290=>626,5291=>626,5292=>881,5293=>854, +5294=>863,5295=>874,5296=>863,5297=>874,5298=>881,5299=>874,5300=>881,5301=>874,5302=>863,5303=>874, +5304=>863,5305=>874,5306=>863,5307=>436,5308=>548,5309=>436,5312=>988,5313=>988,5314=>988,5315=>988, +5316=>931,5317=>931,5318=>931,5319=>931,5320=>931,5321=>1238,5322=>1247,5323=>1200,5324=>1228,5325=>1200, +5326=>1228,5327=>931,5328=>660,5329=>497,5330=>660,5331=>988,5332=>988,5333=>988,5334=>988,5335=>931, +5336=>931,5337=>931,5338=>931,5339=>931,5340=>1231,5341=>1247,5342=>1283,5343=>1228,5344=>1283,5345=>1228, +5346=>1228,5347=>1214,5348=>1228,5349=>1214,5350=>1283,5351=>1228,5352=>1283,5353=>1228,5354=>660,5356=>886, +5357=>730,5358=>730,5359=>730,5360=>730,5361=>730,5362=>730,5363=>730,5364=>730,5365=>730,5366=>998, +5367=>958,5368=>967,5369=>989,5370=>967,5371=>989,5372=>998,5373=>958,5374=>998,5375=>958,5376=>967, +5377=>989,5378=>967,5379=>989,5380=>967,5381=>493,5382=>460,5383=>493,5392=>923,5393=>923,5394=>923, +5395=>1136,5396=>1136,5397=>1136,5398=>1136,5399=>1209,5400=>1202,5401=>1209,5402=>1202,5403=>1209,5404=>1202, +5405=>1431,5406=>1420,5407=>1431,5408=>1420,5409=>1431,5410=>1420,5411=>1431,5412=>1420,5413=>746,5414=>776, +5415=>776,5416=>776,5417=>776,5418=>776,5419=>776,5420=>776,5421=>776,5422=>776,5423=>1003,5424=>1003, +5425=>1013,5426=>996,5427=>1013,5428=>996,5429=>1003,5430=>1003,5431=>1003,5432=>1003,5433=>1013,5434=>996, +5435=>1013,5436=>996,5437=>1013,5438=>495,5440=>395,5441=>510,5442=>1033,5443=>1033,5444=>976,5445=>976, +5446=>976,5447=>976,5448=>733,5449=>733,5450=>733,5451=>733,5452=>733,5453=>733,5454=>1003,5455=>959, +5456=>495,5458=>886,5459=>774,5460=>774,5461=>774,5462=>774,5463=>928,5464=>928,5465=>928,5466=>928, +5467=>1172,5468=>1142,5469=>602,5470=>812,5471=>812,5472=>812,5473=>812,5474=>812,5475=>812,5476=>815, +5477=>815,5478=>815,5479=>815,5480=>1060,5481=>1052,5482=>548,5492=>977,5493=>977,5494=>977,5495=>977, +5496=>977,5497=>977,5498=>977,5499=>618,5500=>837,5501=>510,5502=>1238,5503=>1238,5504=>1238,5505=>1238, +5506=>1238,5507=>1238,5508=>1238,5509=>989,5514=>977,5515=>977,5516=>977,5517=>977,5518=>1591,5519=>1591, +5520=>1591,5521=>1295,5522=>1295,5523=>1591,5524=>1591,5525=>848,5526=>1273,5536=>988,5537=>988,5538=>931, +5539=>931,5540=>931,5541=>931,5542=>660,5543=>776,5544=>776,5545=>776,5546=>776,5547=>776,5548=>776, +5549=>776,5550=>495,5551=>743,5598=>830,5601=>830,5702=>496,5703=>496,5742=>413,5743=>1238,5744=>1591, +5745=>2016,5746=>2016,5747=>1720,5748=>1678,5749=>2016,5750=>2016,7424=>652,7425=>833,7426=>1048,7427=>608, +7428=>593,7429=>676,7430=>676,7431=>559,7432=>557,7433=>343,7434=>494,7435=>665,7436=>539,7437=>817, +7438=>701,7439=>687,7440=>593,7441=>660,7442=>660,7443=>660,7444=>1094,7446=>687,7447=>687,7448=>556, +7449=>642,7450=>642,7451=>580,7452=>634,7453=>737,7454=>948,7455=>695,7456=>652,7457=>924,7458=>582, +7459=>646,7462=>539,7463=>652,7464=>691,7465=>556,7466=>781,7467=>732,7468=>487,7469=>683,7470=>480, +7472=>523,7473=>430,7474=>430,7475=>517,7476=>527,7477=>234,7478=>234,7479=>488,7480=>401,7481=>626, +7482=>527,7483=>527,7484=>535,7485=>509,7486=>461,7487=>485,7488=>430,7489=>511,7490=>695,7491=>458, +7492=>458,7493=>479,7494=>712,7495=>479,7496=>479,7497=>479,7498=>479,7499=>386,7500=>386,7501=>479, +7502=>219,7503=>487,7504=>664,7505=>456,7506=>488,7507=>414,7508=>488,7509=>488,7510=>479,7511=>388, +7512=>456,7513=>462,7514=>664,7515=>501,7517=>451,7518=>429,7519=>433,7520=>493,7521=>406,7522=>219, +7523=>315,7524=>456,7525=>501,7526=>451,7527=>429,7528=>451,7529=>493,7530=>406,7543=>716,7544=>527, +7547=>545,7557=>514,7579=>479,7580=>414,7581=>414,7582=>488,7583=>386,7584=>377,7585=>348,7586=>479, +7587=>456,7588=>347,7589=>281,7590=>347,7591=>347,7592=>431,7593=>326,7594=>330,7595=>370,7596=>664, +7597=>664,7598=>562,7599=>562,7600=>448,7601=>488,7602=>542,7603=>422,7604=>396,7605=>388,7606=>583, +7607=>494,7608=>399,7609=>451,7610=>501,7611=>417,7612=>523,7613=>470,7614=>455,7615=>425,7620=>0, +7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>774,7681=>675,7682=>762,7683=>716,7684=>762, +7685=>716,7686=>762,7687=>716,7688=>734,7689=>593,7690=>830,7691=>716,7692=>830,7693=>716,7694=>830, +7695=>716,7696=>830,7697=>716,7698=>830,7699=>716,7700=>683,7701=>678,7702=>683,7703=>678,7704=>683, +7705=>678,7706=>683,7707=>678,7708=>683,7709=>678,7710=>683,7711=>435,7712=>821,7713=>716,7714=>837, +7715=>712,7716=>837,7717=>712,7718=>837,7719=>712,7720=>837,7721=>712,7722=>837,7723=>712,7724=>372, +7725=>343,7726=>372,7727=>343,7728=>775,7729=>665,7730=>775,7731=>665,7732=>775,7733=>665,7734=>637, +7735=>343,7736=>637,7737=>343,7738=>637,7739=>343,7740=>637,7741=>343,7742=>995,7743=>1042,7744=>995, +7745=>1042,7746=>995,7747=>1042,7748=>837,7749=>712,7750=>837,7751=>712,7752=>837,7753=>712,7754=>837, +7755=>712,7756=>850,7757=>687,7758=>850,7759=>687,7760=>850,7761=>687,7762=>850,7763=>687,7764=>733, +7765=>716,7766=>733,7767=>716,7768=>770,7769=>493,7770=>770,7771=>493,7772=>770,7773=>493,7774=>770, +7775=>493,7776=>720,7777=>595,7778=>720,7779=>595,7780=>720,7781=>595,7782=>720,7783=>595,7784=>720, +7785=>595,7786=>682,7787=>478,7788=>682,7789=>478,7790=>682,7791=>478,7792=>682,7793=>478,7794=>812, +7795=>712,7796=>812,7797=>712,7798=>812,7799=>712,7800=>812,7801=>712,7802=>812,7803=>712,7804=>774, +7805=>652,7806=>774,7807=>652,7808=>1103,7809=>924,7810=>1103,7811=>924,7812=>1103,7813=>924,7814=>1103, +7815=>924,7816=>1103,7817=>924,7818=>771,7819=>645,7820=>771,7821=>645,7822=>724,7823=>652,7824=>725, +7825=>582,7826=>725,7827=>582,7828=>725,7829=>582,7830=>712,7831=>478,7832=>924,7833=>652,7834=>675, +7835=>435,7838=>896,7839=>687,7840=>774,7841=>675,7842=>774,7843=>675,7844=>774,7845=>675,7846=>774, +7847=>675,7848=>774,7849=>675,7850=>774,7851=>675,7852=>774,7853=>675,7854=>774,7855=>675,7856=>774, +7857=>675,7858=>774,7859=>675,7860=>774,7861=>675,7862=>774,7863=>675,7864=>683,7865=>678,7866=>683, +7867=>678,7868=>683,7869=>678,7870=>683,7871=>678,7872=>683,7873=>678,7874=>683,7875=>678,7876=>683, +7877=>678,7878=>683,7879=>678,7880=>372,7881=>343,7882=>372,7883=>343,7884=>850,7885=>687,7886=>850, +7887=>687,7888=>850,7889=>687,7890=>850,7891=>687,7892=>850,7893=>687,7894=>850,7895=>687,7896=>850, +7897=>687,7898=>850,7899=>687,7900=>850,7901=>687,7902=>850,7903=>687,7904=>850,7905=>687,7906=>850, +7907=>687,7908=>812,7909=>712,7910=>812,7911=>712,7912=>812,7913=>712,7914=>812,7915=>712,7916=>812, +7917=>712,7918=>812,7919=>712,7920=>812,7921=>712,7922=>724,7923=>652,7924=>724,7925=>652,7926=>724, +7927=>652,7928=>724,7929=>652,7936=>687,7937=>687,7938=>687,7939=>687,7940=>687,7941=>687,7942=>687, +7943=>687,7944=>774,7945=>774,7946=>1041,7947=>1043,7948=>935,7949=>963,7950=>835,7951=>859,7952=>557, +7953=>557,7954=>557,7955=>557,7956=>557,7957=>557,7960=>792,7961=>794,7962=>1100,7963=>1096,7964=>1023, +7965=>1052,7968=>712,7969=>712,7970=>712,7971=>712,7972=>712,7973=>712,7974=>712,7975=>712,7976=>945, +7977=>951,7978=>1250,7979=>1250,7980=>1180,7981=>1206,7982=>1054,7983=>1063,7984=>390,7985=>390,7986=>390, +7987=>390,7988=>390,7989=>390,7990=>390,7991=>390,7992=>483,7993=>489,7994=>777,7995=>785,7996=>712, +7997=>738,7998=>604,7999=>604,8000=>687,8001=>687,8002=>687,8003=>687,8004=>687,8005=>687,8008=>892, +8009=>933,8010=>1221,8011=>1224,8012=>1053,8013=>1082,8016=>675,8017=>675,8018=>675,8019=>675,8020=>675, +8021=>675,8022=>675,8023=>675,8025=>930,8027=>1184,8029=>1199,8031=>1049,8032=>869,8033=>869,8034=>869, +8035=>869,8036=>869,8037=>869,8038=>869,8039=>869,8040=>909,8041=>958,8042=>1246,8043=>1251,8044=>1076, +8045=>1105,8046=>1028,8047=>1076,8048=>687,8049=>687,8050=>557,8051=>557,8052=>712,8053=>712,8054=>390, +8055=>390,8056=>687,8057=>687,8058=>675,8059=>675,8060=>869,8061=>869,8064=>687,8065=>687,8066=>687, +8067=>687,8068=>687,8069=>687,8070=>687,8071=>687,8072=>774,8073=>774,8074=>1041,8075=>1043,8076=>935, +8077=>963,8078=>835,8079=>859,8080=>712,8081=>712,8082=>712,8083=>712,8084=>712,8085=>712,8086=>712, +8087=>712,8088=>945,8089=>951,8090=>1250,8091=>1250,8092=>1180,8093=>1206,8094=>1054,8095=>1063,8096=>869, +8097=>869,8098=>869,8099=>869,8100=>869,8101=>869,8102=>869,8103=>869,8104=>909,8105=>958,8106=>1246, +8107=>1251,8108=>1076,8109=>1105,8110=>1028,8111=>1076,8112=>687,8113=>687,8114=>687,8115=>687,8116=>687, +8118=>687,8119=>687,8120=>774,8121=>774,8122=>876,8123=>797,8124=>774,8125=>500,8126=>500,8127=>500, +8128=>500,8129=>500,8130=>712,8131=>712,8132=>712,8134=>712,8135=>712,8136=>929,8137=>846,8138=>1080, +8139=>1009,8140=>837,8141=>500,8142=>500,8143=>500,8144=>390,8145=>390,8146=>390,8147=>390,8150=>390, +8151=>390,8152=>372,8153=>372,8154=>621,8155=>563,8157=>500,8158=>500,8159=>500,8160=>675,8161=>675, +8162=>675,8163=>675,8164=>716,8165=>716,8166=>675,8167=>675,8168=>724,8169=>724,8170=>1020,8171=>980, +8172=>838,8173=>500,8174=>500,8175=>500,8178=>869,8179=>869,8180=>869,8182=>869,8183=>869,8184=>1065, +8185=>891,8186=>1084,8187=>894,8188=>850,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000, +8196=>330,8197=>250,8198=>167,8199=>696,8200=>380,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0, +8206=>0,8207=>0,8208=>415,8209=>415,8210=>696,8213=>1000,8214=>500,8215=>500,8219=>380,8223=>657, +8227=>639,8228=>380,8229=>685,8231=>348,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200, +8241=>1908,8242=>264,8243=>447,8244=>630,8245=>264,8246=>447,8247=>630,8248=>733,8251=>972,8252=>627, +8253=>580,8254=>500,8255=>828,8256=>828,8257=>329,8258=>1023,8259=>500,8260=>167,8261=>457,8262=>457, +8263=>1030,8264=>829,8265=>829,8266=>513,8267=>687,8268=>500,8269=>500,8270=>523,8271=>400,8272=>828, +8273=>523,8274=>556,8275=>838,8276=>828,8277=>838,8278=>684,8279=>813,8280=>838,8281=>838,8282=>380, +8283=>872,8284=>838,8285=>380,8286=>380,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0, +8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>438,8305=>219,8308=>438,8309=>438, +8310=>438,8311=>438,8312=>438,8313=>438,8314=>528,8315=>528,8316=>528,8317=>288,8318=>288,8319=>456, +8320=>438,8321=>438,8322=>438,8323=>438,8324=>438,8325=>438,8326=>438,8327=>438,8328=>438,8329=>438, +8330=>528,8331=>528,8332=>528,8333=>288,8334=>288,8336=>458,8337=>479,8338=>488,8339=>413,8340=>479, +8352=>929,8353=>696,8354=>696,8355=>696,8356=>696,8357=>1042,8358=>837,8359=>1488,8360=>1205,8361=>1103, +8362=>854,8363=>714,8365=>696,8366=>682,8367=>1392,8368=>696,8369=>696,8370=>696,8371=>696,8372=>859, +8373=>696,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>1106,8449=>1106, +8450=>734,8451=>1211,8452=>896,8453=>1114,8454=>1148,8455=>696,8456=>698,8457=>952,8459=>1073,8460=>913, +8461=>888,8462=>712,8463=>712,8464=>597,8465=>697,8466=>856,8467=>472,8468=>974,8469=>837,8470=>1203, +8471=>1000,8472=>697,8473=>750,8474=>850,8475=>938,8476=>814,8477=>801,8478=>896,8479=>710,8480=>1020, +8481=>1239,8483=>834,8484=>754,8485=>622,8486=>850,8487=>769,8488=>763,8489=>303,8490=>775,8491=>774, +8492=>928,8493=>818,8494=>854,8495=>636,8496=>729,8497=>808,8498=>683,8499=>1184,8500=>465,8501=>794, +8502=>731,8503=>494,8504=>684,8505=>380,8506=>945,8507=>1370,8508=>790,8509=>737,8510=>654,8511=>863, +8512=>840,8513=>786,8514=>576,8515=>637,8516=>760,8517=>830,8518=>716,8519=>678,8520=>343,8521=>343, +8523=>872,8526=>547,8531=>1035,8532=>1035,8533=>1035,8534=>1035,8535=>1035,8536=>1035,8537=>1035,8538=>1035, +8539=>1035,8540=>1035,8541=>1035,8542=>1035,8543=>615,8544=>372,8545=>659,8546=>945,8547=>1099,8548=>774, +8549=>1099,8550=>1386,8551=>1672,8552=>1121,8553=>771,8554=>1120,8555=>1407,8556=>637,8557=>734,8558=>830, +8559=>995,8560=>343,8561=>607,8562=>872,8563=>984,8564=>652,8565=>962,8566=>1227,8567=>1491,8568=>969, +8569=>645,8570=>969,8571=>1233,8572=>343,8573=>593,8574=>716,8575=>1042,8576=>1289,8577=>830,8578=>1289, +8579=>734,8580=>593,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838, +8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838, +8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838, +8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838, +8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838, +8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838, +8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838, +8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838, +8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838, +8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838, +8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838, +8700=>838,8701=>838,8702=>838,8703=>838,8704=>774,8705=>696,8706=>544,8707=>683,8708=>683,8709=>856, +8710=>697,8711=>697,8712=>896,8713=>896,8714=>750,8715=>896,8716=>896,8717=>750,8718=>636,8719=>787, +8720=>787,8721=>718,8722=>838,8723=>838,8724=>696,8725=>365,8726=>696,8727=>838,8728=>626,8729=>380, +8730=>667,8731=>667,8732=>667,8733=>712,8734=>833,8735=>838,8736=>896,8737=>896,8738=>838,8739=>500, +8740=>500,8741=>500,8742=>500,8743=>812,8744=>812,8745=>812,8746=>812,8747=>610,8748=>929,8749=>1295, +8750=>563,8751=>977,8752=>1313,8753=>563,8754=>563,8755=>563,8756=>696,8757=>696,8758=>294,8759=>696, +8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8766=>838,8767=>838,8768=>375,8769=>838, +8770=>838,8771=>838,8772=>838,8773=>838,8774=>838,8775=>838,8776=>838,8777=>838,8778=>838,8779=>838, +8780=>838,8781=>838,8782=>838,8783=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1063,8789=>1063, +8790=>838,8791=>838,8792=>838,8793=>838,8794=>838,8795=>838,8796=>838,8797=>838,8798=>838,8799=>838, +8800=>838,8801=>838,8802=>838,8803=>838,8804=>838,8805=>838,8806=>838,8807=>838,8808=>841,8809=>841, +8810=>1047,8811=>1047,8812=>500,8813=>838,8814=>838,8815=>838,8816=>838,8817=>838,8818=>838,8819=>838, +8820=>838,8821=>838,8822=>838,8823=>838,8824=>838,8825=>838,8826=>838,8827=>838,8828=>838,8829=>838, +8830=>838,8831=>838,8832=>838,8833=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838, +8840=>838,8841=>838,8842=>838,8843=>838,8844=>812,8845=>812,8846=>812,8847=>838,8848=>838,8849=>838, +8850=>838,8851=>796,8852=>796,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838, +8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>914,8867=>914,8868=>914,8869=>914, +8870=>542,8871=>542,8872=>914,8873=>914,8874=>914,8875=>914,8876=>914,8877=>914,8878=>914,8879=>914, +8880=>838,8881=>838,8882=>838,8883=>838,8884=>838,8885=>838,8886=>1000,8887=>1000,8888=>838,8889=>838, +8890=>542,8891=>812,8892=>812,8893=>812,8894=>838,8895=>838,8896=>843,8897=>843,8898=>843,8899=>843, +8900=>494,8901=>380,8902=>626,8903=>838,8904=>1000,8905=>1000,8906=>1000,8907=>1000,8908=>1000,8909=>838, +8910=>812,8911=>812,8912=>838,8913=>838,8914=>838,8915=>838,8916=>838,8917=>838,8918=>838,8919=>838, +8920=>1422,8921=>1422,8922=>838,8923=>838,8924=>838,8925=>838,8926=>838,8927=>838,8928=>838,8929=>838, +8930=>838,8931=>838,8932=>838,8933=>838,8934=>838,8935=>838,8936=>838,8937=>838,8938=>838,8939=>838, +8940=>838,8941=>838,8942=>1000,8943=>1000,8944=>1000,8945=>1000,8946=>1158,8947=>896,8948=>750,8949=>896, +8950=>896,8951=>750,8952=>896,8953=>896,8954=>1158,8955=>896,8956=>750,8957=>896,8958=>750,8959=>896, +8960=>602,8961=>602,8962=>716,8963=>838,8964=>838,8965=>838,8966=>838,8967=>488,8968=>457,8969=>457, +8970=>457,8971=>457,8972=>809,8973=>809,8974=>809,8975=>809,8976=>838,8977=>539,8984=>928,8985=>838, +8988=>469,8989=>469,8990=>469,8991=>469,8992=>610,8993=>610,8996=>1152,8997=>1152,8998=>1414,8999=>1152, +9000=>1443,9003=>1414,9004=>873,9075=>390,9076=>716,9077=>869,9082=>687,9085=>863,9095=>1152,9108=>873, +9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500, +9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>610, +9166=>838,9167=>945,9187=>873,9189=>769,9250=>716,9251=>716,9312=>847,9313=>847,9314=>847,9315=>847, +9316=>847,9317=>847,9318=>847,9319=>847,9320=>847,9321=>847,9600=>769,9601=>769,9602=>769,9603=>769, +9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769, +9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769, +9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945, +9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678, +9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502, +9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502, +9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873, +9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873, +9684=>873,9685=>873,9686=>527,9687=>527,9688=>840,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387, +9694=>387,9695=>387,9696=>769,9697=>769,9698=>769,9699=>769,9700=>769,9701=>769,9702=>639,9703=>945, +9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945, +9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830, +9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896, +9734=>896,9735=>573,9736=>896,9737=>896,9738=>888,9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250, +9744=>896,9745=>896,9746=>896,9747=>532,9748=>896,9749=>896,9750=>896,9751=>896,9752=>896,9753=>896, +9754=>896,9755=>896,9756=>896,9757=>609,9758=>896,9759=>609,9760=>896,9761=>896,9762=>896,9763=>896, +9764=>669,9765=>746,9766=>649,9767=>784,9768=>545,9769=>896,9770=>896,9771=>896,9772=>710,9773=>896, +9774=>896,9775=>896,9776=>896,9777=>896,9778=>896,9779=>896,9780=>896,9781=>896,9782=>896,9783=>896, +9784=>896,9785=>896,9786=>896,9787=>896,9788=>896,9789=>896,9790=>896,9791=>614,9792=>731,9793=>731, +9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9800=>896,9801=>896,9802=>896,9803=>896, +9804=>896,9805=>896,9806=>896,9807=>896,9808=>896,9809=>896,9810=>896,9811=>896,9812=>896,9813=>896, +9814=>896,9815=>896,9816=>896,9817=>896,9818=>896,9819=>896,9820=>896,9821=>896,9822=>896,9823=>896, +9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9832=>896,9833=>472, +9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,9840=>748,9841=>766,9842=>896,9843=>896, +9844=>896,9845=>896,9846=>896,9847=>896,9848=>896,9849=>896,9850=>896,9851=>896,9852=>896,9853=>896, +9854=>896,9855=>896,9856=>869,9857=>869,9858=>869,9859=>869,9860=>869,9861=>869,9862=>896,9863=>896, +9864=>896,9865=>896,9866=>896,9867=>896,9868=>896,9869=>896,9870=>896,9871=>896,9872=>896,9873=>896, +9874=>896,9875=>896,9876=>896,9877=>541,9878=>896,9879=>896,9880=>896,9881=>896,9882=>896,9883=>896, +9884=>896,9888=>896,9889=>702,9890=>1003,9891=>1085,9892=>1143,9893=>901,9894=>838,9895=>838,9896=>838, +9897=>838,9898=>838,9899=>838,9900=>838,9901=>838,9902=>838,9903=>838,9904=>844,9905=>838,9906=>731, +9907=>732,9908=>732,9909=>732,9910=>850,9911=>732,9912=>732,9985=>838,9986=>838,9987=>838,9988=>838, +9990=>838,9991=>838,9992=>838,9993=>838,9996=>838,9997=>838,9998=>838,9999=>838,10000=>838,10001=>838, +10002=>838,10003=>838,10004=>838,10005=>838,10006=>838,10007=>838,10008=>838,10009=>838,10010=>838,10011=>838, +10012=>838,10013=>838,10014=>838,10015=>838,10016=>838,10017=>838,10018=>838,10019=>838,10020=>838,10021=>838, +10022=>838,10023=>838,10025=>838,10026=>838,10027=>838,10028=>838,10029=>838,10030=>838,10031=>838,10032=>838, +10033=>838,10034=>838,10035=>838,10036=>838,10037=>838,10038=>838,10039=>838,10040=>838,10041=>838,10042=>838, +10043=>838,10044=>838,10045=>838,10046=>838,10047=>838,10048=>838,10049=>838,10050=>838,10051=>838,10052=>838, +10053=>838,10054=>838,10055=>838,10056=>838,10057=>838,10058=>838,10059=>838,10061=>896,10063=>896,10064=>896, +10065=>896,10066=>896,10070=>896,10072=>838,10073=>838,10074=>838,10075=>322,10076=>322,10077=>538,10078=>538, +10081=>838,10082=>838,10083=>838,10084=>838,10085=>838,10086=>838,10087=>838,10088=>838,10089=>838,10090=>838, +10091=>838,10092=>838,10093=>838,10094=>838,10095=>838,10096=>838,10097=>838,10098=>838,10099=>838,10100=>838, +10101=>838,10102=>847,10103=>847,10104=>847,10105=>847,10106=>847,10107=>847,10108=>847,10109=>847,10110=>847, +10111=>847,10112=>838,10113=>838,10114=>838,10115=>838,10116=>838,10117=>838,10118=>838,10119=>838,10120=>838, +10121=>838,10122=>838,10123=>838,10124=>838,10125=>838,10126=>838,10127=>838,10128=>838,10129=>838,10130=>838, +10131=>838,10132=>838,10136=>838,10137=>838,10138=>838,10139=>838,10140=>838,10141=>838,10142=>838,10143=>838, +10144=>838,10145=>838,10146=>838,10147=>838,10148=>838,10149=>838,10150=>838,10151=>838,10152=>838,10153=>838, +10154=>838,10155=>838,10156=>838,10157=>838,10158=>838,10159=>838,10161=>838,10162=>838,10163=>838,10164=>838, +10165=>838,10166=>838,10167=>838,10168=>838,10169=>838,10170=>838,10171=>838,10172=>838,10173=>838,10174=>838, +10181=>457,10182=>457,10208=>494,10214=>487,10215=>487,10216=>457,10217=>457,10218=>721,10219=>721,10224=>838, +10225=>838,10226=>838,10227=>838,10228=>1157,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434, +10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>781,10241=>781,10242=>781,10243=>781,10244=>781, +10245=>781,10246=>781,10247=>781,10248=>781,10249=>781,10250=>781,10251=>781,10252=>781,10253=>781,10254=>781, +10255=>781,10256=>781,10257=>781,10258=>781,10259=>781,10260=>781,10261=>781,10262=>781,10263=>781,10264=>781, +10265=>781,10266=>781,10267=>781,10268=>781,10269=>781,10270=>781,10271=>781,10272=>781,10273=>781,10274=>781, +10275=>781,10276=>781,10277=>781,10278=>781,10279=>781,10280=>781,10281=>781,10282=>781,10283=>781,10284=>781, +10285=>781,10286=>781,10287=>781,10288=>781,10289=>781,10290=>781,10291=>781,10292=>781,10293=>781,10294=>781, +10295=>781,10296=>781,10297=>781,10298=>781,10299=>781,10300=>781,10301=>781,10302=>781,10303=>781,10304=>781, +10305=>781,10306=>781,10307=>781,10308=>781,10309=>781,10310=>781,10311=>781,10312=>781,10313=>781,10314=>781, +10315=>781,10316=>781,10317=>781,10318=>781,10319=>781,10320=>781,10321=>781,10322=>781,10323=>781,10324=>781, +10325=>781,10326=>781,10327=>781,10328=>781,10329=>781,10330=>781,10331=>781,10332=>781,10333=>781,10334=>781, +10335=>781,10336=>781,10337=>781,10338=>781,10339=>781,10340=>781,10341=>781,10342=>781,10343=>781,10344=>781, +10345=>781,10346=>781,10347=>781,10348=>781,10349=>781,10350=>781,10351=>781,10352=>781,10353=>781,10354=>781, +10355=>781,10356=>781,10357=>781,10358=>781,10359=>781,10360=>781,10361=>781,10362=>781,10363=>781,10364=>781, +10365=>781,10366=>781,10367=>781,10368=>781,10369=>781,10370=>781,10371=>781,10372=>781,10373=>781,10374=>781, +10375=>781,10376=>781,10377=>781,10378=>781,10379=>781,10380=>781,10381=>781,10382=>781,10383=>781,10384=>781, +10385=>781,10386=>781,10387=>781,10388=>781,10389=>781,10390=>781,10391=>781,10392=>781,10393=>781,10394=>781, +10395=>781,10396=>781,10397=>781,10398=>781,10399=>781,10400=>781,10401=>781,10402=>781,10403=>781,10404=>781, +10405=>781,10406=>781,10407=>781,10408=>781,10409=>781,10410=>781,10411=>781,10412=>781,10413=>781,10414=>781, +10415=>781,10416=>781,10417=>781,10418=>781,10419=>781,10420=>781,10421=>781,10422=>781,10423=>781,10424=>781, +10425=>781,10426=>781,10427=>781,10428=>781,10429=>781,10430=>781,10431=>781,10432=>781,10433=>781,10434=>781, +10435=>781,10436=>781,10437=>781,10438=>781,10439=>781,10440=>781,10441=>781,10442=>781,10443=>781,10444=>781, +10445=>781,10446=>781,10447=>781,10448=>781,10449=>781,10450=>781,10451=>781,10452=>781,10453=>781,10454=>781, +10455=>781,10456=>781,10457=>781,10458=>781,10459=>781,10460=>781,10461=>781,10462=>781,10463=>781,10464=>781, +10465=>781,10466=>781,10467=>781,10468=>781,10469=>781,10470=>781,10471=>781,10472=>781,10473=>781,10474=>781, +10475=>781,10476=>781,10477=>781,10478=>781,10479=>781,10480=>781,10481=>781,10482=>781,10483=>781,10484=>781, +10485=>781,10486=>781,10487=>781,10488=>781,10489=>781,10490=>781,10491=>781,10492=>781,10493=>781,10494=>781, +10495=>781,10502=>838,10503=>838,10506=>838,10507=>838,10560=>838,10561=>838,10627=>753,10628=>753,10702=>838, +10703=>1046,10704=>1046,10705=>1000,10706=>1000,10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838,10747=>838, +10752=>1000,10753=>1000,10754=>1000,10764=>1661,10765=>563,10766=>563,10767=>563,10768=>563,10769=>563,10770=>563, +10771=>563,10772=>563,10773=>563,10774=>563,10775=>563,10776=>563,10777=>563,10778=>563,10779=>563,10780=>563, +10799=>838,10877=>838,10878=>838,10879=>838,10880=>838,10881=>838,10882=>838,10883=>838,10884=>838,10885=>838, +10886=>838,10887=>838,10888=>838,10889=>838,10890=>838,10891=>838,10892=>838,10893=>838,10894=>838,10895=>838, +10896=>838,10897=>838,10898=>838,10899=>838,10900=>838,10901=>838,10902=>838,10903=>838,10904=>838,10905=>838, +10906=>838,10907=>838,10908=>838,10909=>838,10910=>838,10911=>838,10912=>838,10926=>838,10927=>838,10928=>838, +10929=>838,10930=>838,10931=>838,10932=>838,10933=>838,10934=>838,10935=>838,10936=>838,10937=>838,10938=>838, +11001=>838,11002=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838, +11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838, +11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11039=>869, +11040=>869,11041=>873,11042=>873,11043=>873,11044=>1119,11091=>869,11092=>869,11360=>637,11361=>360,11362=>637, +11363=>733,11364=>770,11365=>675,11366=>478,11367=>956,11368=>712,11369=>775,11370=>665,11371=>725,11372=>582, +11373=>860,11374=>995,11375=>774,11377=>778,11378=>1221,11379=>1056,11380=>652,11381=>698,11382=>565,11383=>782, +11385=>538,11386=>687,11387=>559,11388=>219,11389=>487,11800=>586,11810=>457,11811=>457,11812=>457,11813=>457, +11822=>580,19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896,19911=>896,19912=>896, +19913=>896,19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896,19921=>896,19922=>896, +19923=>896,19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896,19931=>896,19932=>896, +19933=>896,19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896,19941=>896,19942=>896, +19943=>896,19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896,19951=>896,19952=>896, +19953=>896,19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896,19961=>896,19962=>896, +19963=>896,19964=>896,19965=>896,19966=>896,19967=>896,42564=>720,42565=>595,42566=>436,42567=>440,42572=>1405, +42573=>1173,42576=>1234,42577=>1027,42580=>1174,42581=>972,42582=>1100,42583=>969,42594=>1100,42595=>940,42596=>1096, +42597=>915,42598=>1260,42599=>997,42600=>850,42601=>687,42602=>1037,42603=>868,42604=>1406,42605=>1106,42606=>961, +42634=>944,42635=>749,42636=>682,42637=>580,42644=>808,42645=>712,42760=>500,42761=>500,42762=>500,42763=>500, +42764=>500,42765=>500,42766=>500,42767=>500,42768=>500,42769=>500,42770=>500,42771=>500,42772=>500,42773=>500, +42774=>500,42779=>400,42780=>400,42781=>287,42782=>287,42783=>287,42790=>837,42791=>712,42792=>1031,42793=>857, +42794=>696,42795=>557,42800=>559,42801=>595,42802=>1349,42803=>1052,42804=>1285,42805=>1065,42806=>1245,42807=>1052, +42808=>1079,42809=>922,42810=>1079,42811=>922,42812=>1035,42813=>922,42814=>698,42815=>549,42822=>850,42823=>542, +42824=>683,42825=>531,42826=>918,42827=>814,42830=>1406,42831=>1106,42880=>637,42881=>343,42882=>837,42883=>712, +42889=>400,42890=>396,42891=>456,42892=>306,43003=>683,43004=>733,43005=>995,43006=>372,43007=>1325,62917=>687, +64256=>833,64257=>787,64258=>787,64259=>1138,64260=>1139,64261=>808,64262=>1020,64275=>1388,64276=>1384,64277=>1378, +64278=>1384,64279=>1713,64285=>343,64286=>0,64287=>663,64288=>720,64289=>963,64290=>890,64291=>988,64292=>963, +64293=>938,64294=>988,64295=>988,64296=>976,64297=>838,64298=>949,64299=>949,64300=>949,64301=>949,64302=>751, +64303=>751,64304=>751,64305=>673,64306=>537,64307=>654,64308=>712,64309=>343,64310=>491,64312=>724,64313=>467, +64314=>649,64315=>650,64316=>679,64318=>775,64320=>497,64321=>773,64323=>718,64324=>687,64326=>751,64327=>729, +64328=>649,64329=>949,64330=>751,64331=>343,64332=>673,64333=>650,64334=>687,64335=>751,65024=>0,65025=>0, +65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0, +65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65529=>0,65530=>0, +65531=>0,65532=>0,65533=>1113); +$enc=''; +$diff=''; +$file='dejavusansbi.z'; +$ctg='dejavusansbi.ctg.z'; +$originalsize=524056; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansbi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansbi.z new file mode 100755 index 00000000..03c4078e Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansbi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensed.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensed.ctg.z new file mode 100755 index 00000000..3170ea6f Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensed.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensed.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensed.php new file mode 100755 index 00000000..b674adcd --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensed.php @@ -0,0 +1,517 @@ +928,'Descent'=>-236,'CapHeight'=>26,'Flags'=>96,'FontBBox'=>'[-918 -350 1513 1167]','ItalicAngle'=>-18.9,'StemV'=>70,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>286,33=>360,34=>414,35=>754,36=>572,37=>855,38=>702,39=>247,40=>351, +41=>351,42=>450,43=>754,44=>286,45=>325,46=>286,47=>303,48=>572,49=>572,50=>572, +51=>572,52=>572,53=>572,54=>572,55=>572,56=>572,57=>572,58=>303,59=>303,60=>754, +61=>754,62=>754,63=>478,64=>900,65=>615,66=>617,67=>628,68=>693,69=>568,70=>518, +71=>697,72=>677,73=>265,74=>265,75=>590,76=>501,77=>776,78=>673,79=>708,80=>542, +81=>708,82=>625,83=>571,84=>549,85=>659,86=>615,87=>890,88=>616,89=>549,90=>616, +91=>351,92=>303,93=>351,94=>754,95=>450,96=>450,97=>551,98=>571,99=>495,100=>571, +101=>554,102=>316,103=>571,104=>570,105=>250,106=>250,107=>521,108=>250,109=>876,110=>570, +111=>550,112=>571,113=>571,114=>370,115=>469,116=>353,117=>570,118=>532,119=>736,120=>532, +121=>532,122=>472,123=>572,124=>303,125=>572,126=>754,8364=>572,8218=>286,402=>316,8222=>466, +8230=>900,8224=>450,8225=>450,710=>450,8240=>1208,352=>571,8249=>360,338=>962,381=>616,8216=>286, +8217=>286,8220=>466,8221=>466,8226=>531,8211=>450,8212=>900,732=>450,8482=>900,353=>469,8250=>360, +339=>920,382=>472,376=>549,160=>286,161=>360,162=>572,163=>572,164=>572,165=>572,166=>303, +167=>450,168=>450,169=>900,170=>424,171=>550,172=>754,173=>325,174=>900,175=>450,176=>450, +177=>754,178=>360,179=>360,180=>450,181=>572,182=>572,183=>286,184=>450,185=>360,186=>424, +187=>550,188=>872,189=>872,190=>872,191=>478,192=>615,193=>615,194=>615,195=>615,196=>615, +197=>615,198=>876,199=>628,200=>568,201=>568,202=>568,203=>568,204=>265,205=>265,206=>265, +207=>265,208=>697,209=>673,210=>708,211=>708,212=>708,213=>708,214=>708,215=>754,216=>708, +217=>659,218=>659,219=>659,220=>659,221=>549,222=>544,223=>567,224=>551,225=>551,226=>551, +227=>551,228=>551,229=>551,230=>883,231=>495,232=>554,233=>554,234=>554,235=>554,236=>250, +237=>250,238=>250,239=>250,240=>550,241=>570,242=>550,243=>550,244=>550,245=>550,246=>550, +247=>754,248=>550,249=>570,250=>570,251=>570,252=>570,253=>532,254=>571,255=>532,256=>615, +257=>551,258=>615,259=>551,260=>615,261=>551,262=>628,263=>495,264=>628,265=>495,266=>628, +267=>495,268=>628,269=>495,270=>693,271=>571,272=>697,273=>571,274=>568,275=>554,276=>568, +277=>554,278=>568,279=>554,280=>568,281=>554,282=>568,283=>554,284=>697,285=>571,286=>697, +287=>571,288=>697,289=>571,290=>697,291=>571,292=>677,293=>570,294=>824,295=>625,296=>265, +297=>250,298=>265,299=>250,300=>265,301=>250,302=>265,303=>250,304=>265,305=>250,306=>531, +307=>500,308=>265,309=>250,310=>590,311=>521,312=>521,313=>501,314=>250,315=>501,316=>250, +317=>501,318=>337,319=>501,320=>308,321=>505,322=>255,323=>673,324=>570,325=>673,326=>570, +327=>673,328=>570,329=>732,330=>673,331=>570,332=>708,333=>550,334=>708,335=>550,336=>708, +337=>550,340=>625,341=>370,342=>625,343=>370,344=>625,345=>370,346=>571,347=>469,348=>571, +349=>469,350=>571,351=>469,354=>549,355=>353,356=>549,357=>353,358=>549,359=>353,360=>659, +361=>570,362=>659,363=>570,364=>659,365=>570,366=>659,367=>570,368=>659,369=>570,370=>659, +371=>570,372=>890,373=>736,374=>549,375=>532,377=>616,378=>472,379=>616,380=>472,383=>316, +384=>571,385=>661,386=>617,387=>571,388=>617,389=>571,390=>633,391=>628,392=>495,393=>697, +394=>737,395=>617,396=>571,397=>550,398=>568,399=>708,400=>553,401=>518,403=>697,404=>618, +405=>885,406=>318,407=>265,408=>671,409=>521,410=>250,411=>532,412=>876,413=>673,414=>570, +415=>708,416=>822,417=>550,418=>854,419=>683,420=>586,421=>571,422=>625,423=>571,424=>469, +425=>568,426=>302,427=>353,428=>549,429=>353,430=>549,431=>772,432=>570,433=>688,434=>648, +435=>669,436=>657,437=>616,438=>472,439=>599,440=>599,441=>520,442=>472,443=>572,444=>599, +445=>520,446=>459,447=>571,448=>265,449=>443,450=>413,451=>266,452=>1279,453=>1169,454=>1039, +455=>751,456=>708,457=>411,458=>838,459=>831,460=>717,461=>615,462=>551,463=>265,464=>250, +465=>708,466=>550,467=>659,468=>570,469=>659,470=>570,471=>659,472=>570,473=>659,474=>570, +475=>659,476=>570,477=>554,478=>615,479=>551,480=>615,481=>551,482=>876,483=>883,484=>697, +485=>571,486=>697,487=>571,488=>590,489=>521,490=>708,491=>550,492=>708,493=>550,494=>599, +495=>520,496=>250,497=>1279,498=>1169,499=>1039,500=>697,501=>571,502=>1001,503=>614,504=>673, +505=>570,506=>615,507=>551,508=>876,509=>883,510=>708,511=>550,512=>615,513=>551,514=>615, +515=>551,516=>568,517=>554,518=>568,519=>554,520=>265,521=>250,522=>265,523=>250,524=>708, +525=>550,526=>708,527=>550,528=>625,529=>370,530=>625,531=>370,532=>659,533=>570,534=>659, +535=>570,536=>571,537=>469,538=>549,539=>353,540=>564,541=>469,542=>677,543=>570,544=>662, +545=>754,546=>628,547=>549,548=>616,549=>472,550=>615,551=>551,552=>568,553=>554,554=>708, +555=>550,556=>708,557=>550,558=>708,559=>550,560=>708,561=>550,562=>549,563=>532,564=>427, +565=>758,566=>429,567=>250,568=>898,569=>898,570=>615,571=>628,572=>495,573=>501,574=>549, +575=>469,576=>472,577=>542,578=>431,579=>617,580=>659,581=>615,582=>568,583=>554,584=>265, +585=>250,586=>703,587=>571,588=>625,589=>370,590=>549,591=>532,592=>540,593=>571,594=>571, +595=>571,596=>494,597=>495,598=>571,599=>626,600=>554,601=>554,602=>737,603=>486,604=>479, +605=>698,606=>598,607=>250,608=>626,609=>571,610=>566,611=>536,612=>536,613=>570,614=>570, +615=>570,616=>250,617=>304,618=>334,619=>356,620=>438,621=>250,622=>635,623=>876,624=>876, +625=>876,626=>581,627=>578,628=>570,629=>550,630=>772,631=>655,632=>593,633=>373,634=>373, +635=>372,636=>370,637=>369,638=>477,639=>477,640=>543,641=>543,642=>469,643=>302,644=>302, +645=>415,646=>302,647=>353,648=>353,649=>570,650=>556,651=>538,652=>532,653=>736,654=>532, +655=>549,656=>472,657=>472,658=>520,659=>520,660=>459,661=>459,662=>459,663=>459,664=>708, +665=>521,666=>598,667=>637,668=>588,669=>263,670=>600,671=>456,672=>654,673=>459,674=>459, +675=>913,676=>952,677=>911,678=>742,679=>549,680=>700,681=>763,682=>576,683=>589,684=>463, +685=>463,686=>595,687=>597,688=>364,689=>359,690=>157,691=>233,692=>266,693=>266,694=>341, +695=>463,696=>335,697=>250,698=>414,699=>286,700=>286,701=>286,702=>276,703=>276,704=>333, +705=>333,706=>450,707=>450,708=>450,709=>450,711=>450,712=>247,713=>450,714=>450,715=>450, +716=>247,717=>450,718=>450,719=>450,720=>303,721=>303,722=>276,723=>276,724=>450,725=>450, +726=>351,727=>286,728=>450,729=>450,730=>450,731=>450,733=>450,734=>284,735=>450,736=>383, +737=>149,738=>335,739=>399,740=>333,741=>444,742=>444,743=>444,744=>444,745=>444,748=>450, +749=>450,750=>466,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>589,881=>511,882=>775, +883=>583,884=>250,885=>250,886=>673,887=>584,890=>450,891=>494,892=>495,893=>494,894=>303, +900=>450,901=>450,902=>623,903=>286,904=>671,905=>784,906=>367,908=>731,910=>742,911=>743, +912=>304,913=>615,914=>617,915=>501,916=>615,917=>568,918=>616,919=>677,920=>708,921=>265, +922=>590,923=>615,924=>776,925=>673,926=>568,927=>708,928=>677,929=>542,931=>568,932=>549, +933=>549,934=>708,935=>616,936=>708,937=>688,938=>265,939=>549,940=>593,941=>486,942=>570, +943=>304,944=>521,945=>593,946=>574,947=>532,948=>550,949=>486,950=>489,951=>570,952=>550, +953=>304,954=>530,955=>532,956=>572,957=>502,958=>501,959=>550,960=>542,961=>571,962=>528, +963=>570,964=>542,965=>521,966=>593,967=>520,968=>593,969=>753,970=>304,971=>521,972=>550, +973=>521,974=>753,975=>590,976=>553,977=>557,978=>628,979=>758,980=>628,981=>593,982=>753, +983=>597,984=>708,985=>550,986=>583,987=>528,988=>518,989=>413,990=>593,991=>593,992=>778, +993=>564,994=>840,995=>753,996=>682,997=>593,998=>712,999=>553,1000=>618,1001=>546,1002=>690, +1003=>563,1004=>629,1005=>550,1006=>549,1007=>482,1008=>597,1009=>571,1010=>495,1011=>250,1012=>708, +1013=>554,1014=>554,1015=>544,1016=>571,1017=>628,1018=>776,1019=>585,1020=>571,1021=>633,1022=>628, +1023=>633,1024=>568,1025=>568,1026=>708,1027=>549,1028=>628,1029=>571,1030=>265,1031=>265,1032=>265, +1033=>984,1034=>940,1035=>708,1036=>639,1037=>673,1038=>548,1039=>677,1040=>615,1041=>617,1042=>617, +1043=>549,1044=>703,1045=>568,1046=>969,1047=>577,1048=>673,1049=>673,1050=>639,1051=>677,1052=>776, +1053=>677,1054=>708,1055=>677,1056=>542,1057=>628,1058=>549,1059=>548,1060=>774,1061=>616,1062=>699, +1063=>617,1064=>962,1065=>984,1066=>749,1067=>794,1068=>617,1069=>628,1070=>971,1071=>625,1072=>551, +1073=>555,1074=>530,1075=>473,1076=>622,1077=>554,1078=>811,1079=>479,1080=>584,1081=>584,1082=>543, +1083=>575,1084=>679,1085=>588,1086=>550,1087=>588,1088=>571,1089=>495,1090=>524,1091=>532,1092=>769, +1093=>532,1094=>612,1095=>532,1096=>823,1097=>848,1098=>636,1099=>710,1100=>530,1101=>494,1102=>757, +1103=>541,1104=>554,1105=>554,1106=>563,1107=>473,1108=>494,1109=>469,1110=>250,1111=>250,1112=>250, +1113=>812,1114=>809,1115=>586,1116=>543,1117=>584,1118=>532,1119=>588,1120=>840,1121=>753,1122=>693, +1123=>604,1124=>848,1125=>674,1126=>791,1127=>705,1128=>1043,1129=>901,1130=>708,1131=>550,1132=>924, +1133=>742,1134=>572,1135=>486,1136=>771,1137=>789,1138=>708,1139=>550,1140=>703,1141=>598,1142=>703, +1143=>598,1144=>893,1145=>813,1146=>857,1147=>682,1148=>1062,1149=>925,1150=>840,1151=>753,1152=>628, +1153=>495,1154=>452,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>376,1161=>376,1162=>695, +1163=>609,1164=>617,1165=>530,1166=>542,1167=>571,1168=>549,1169=>473,1170=>607,1171=>531,1172=>562, +1173=>477,1174=>969,1175=>811,1176=>577,1177=>479,1178=>639,1179=>543,1180=>639,1181=>543,1182=>639, +1183=>543,1184=>771,1185=>748,1186=>677,1187=>594,1188=>913,1189=>789,1190=>973,1191=>824,1192=>790, +1193=>624,1194=>628,1195=>495,1196=>549,1197=>524,1198=>549,1199=>532,1200=>549,1201=>532,1202=>616, +1203=>532,1204=>840,1205=>726,1206=>617,1207=>532,1208=>617,1209=>532,1210=>617,1211=>570,1212=>847, +1213=>655,1214=>847,1215=>655,1216=>265,1217=>969,1218=>811,1219=>590,1220=>543,1221=>698,1222=>603, +1223=>677,1224=>594,1225=>699,1226=>612,1227=>617,1228=>532,1229=>799,1230=>697,1231=>250,1232=>615, +1233=>551,1234=>615,1235=>551,1236=>876,1237=>883,1238=>568,1239=>554,1240=>708,1241=>554,1242=>708, +1243=>554,1244=>969,1245=>811,1246=>577,1247=>479,1248=>599,1249=>520,1250=>673,1251=>584,1252=>673, +1253=>584,1254=>708,1255=>550,1256=>708,1257=>550,1258=>708,1259=>550,1260=>628,1261=>494,1262=>548, +1263=>532,1264=>548,1265=>532,1266=>548,1267=>532,1268=>617,1269=>532,1270=>549,1271=>473,1272=>794, +1273=>710,1274=>607,1275=>531,1276=>616,1277=>532,1278=>616,1279=>532,1280=>617,1281=>530,1282=>905, +1283=>807,1284=>877,1285=>782,1286=>611,1287=>529,1288=>964,1289=>861,1290=>1001,1291=>870,1292=>697, +1293=>593,1294=>695,1295=>640,1296=>553,1297=>486,1298=>677,1299=>575,1300=>1052,1301=>894,1302=>804, +1303=>778,1304=>928,1305=>887,1306=>708,1307=>571,1308=>890,1309=>736,1312=>972,1313=>814,1314=>973, +1315=>821,1316=>713,1317=>614,1329=>780,1330=>659,1331=>794,1332=>794,1333=>659,1334=>579,1335=>613, +1336=>659,1337=>765,1338=>794,1339=>659,1340=>501,1341=>741,1342=>888,1343=>659,1344=>636,1345=>579, +1346=>794,1347=>699,1348=>794,1349=>659,1350=>756,1351=>659,1352=>659,1353=>659,1354=>711,1355=>579, +1356=>794,1357=>659,1358=>794,1359=>571,1360=>659,1361=>659,1362=>719,1363=>708,1364=>711,1365=>708, +1366=>571,1369=>276,1370=>286,1371=>450,1372=>450,1373=>352,1374=>474,1375=>450,1377=>876,1378=>570, +1379=>686,1380=>690,1381=>570,1382=>627,1383=>479,1384=>570,1385=>630,1386=>627,1387=>570,1388=>363, +1389=>804,1390=>576,1391=>570,1392=>570,1393=>571,1394=>631,1395=>570,1396=>593,1397=>250,1398=>684, +1399=>464,1400=>570,1401=>407,1402=>876,1403=>464,1404=>691,1405=>570,1406=>626,1407=>876,1408=>570, +1409=>571,1410=>451,1411=>876,1412=>583,1413=>550,1414=>566,1415=>686,1417=>303,1418=>390,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>325,1471=>0,1472=>265,1473=>0,1474=>0,1475=>265,1478=>397, +1479=>0,1488=>566,1489=>547,1490=>403,1491=>534,1492=>576,1493=>245,1494=>336,1495=>576,1496=>583, +1497=>245,1498=>532,1499=>500,1500=>539,1501=>576,1502=>593,1503=>245,1504=>397,1505=>629,1506=>506, +1507=>576,1508=>543,1509=>468,1510=>523,1511=>596,1512=>532,1513=>727,1514=>591,1520=>423,1521=>409, +1522=>423,1523=>374,1524=>580,1542=>573,1543=>573,1545=>681,1546=>879,1548=>290,1557=>0,1563=>286, +1567=>478,1569=>423,1570=>250,1571=>250,1572=>435,1573=>250,1574=>704,1575=>250,1576=>847,1577=>471, +1578=>847,1579=>847,1580=>581,1581=>581,1582=>581,1583=>400,1584=>400,1585=>435,1586=>435,1587=>1099, +1588=>1099,1589=>1088,1590=>1088,1591=>832,1592=>832,1593=>537,1594=>537,1600=>264,1601=>933,1602=>698, +1603=>742,1604=>654,1605=>557,1606=>661,1607=>471,1608=>435,1609=>704,1610=>704,1611=>0,1612=>0, +1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1626=>450, +1632=>483,1633=>483,1634=>483,1635=>483,1636=>483,1637=>483,1638=>483,1639=>483,1640=>483,1641=>483, +1642=>483,1643=>292,1644=>286,1645=>490,1646=>847,1647=>698,1652=>263,1657=>847,1658=>847,1659=>847, +1660=>847,1661=>847,1662=>847,1663=>847,1664=>847,1665=>581,1666=>581,1667=>581,1668=>581,1669=>581, +1670=>581,1671=>581,1681=>435,1682=>435,1685=>549,1688=>435,1697=>933,1700=>933,1702=>933,1705=>805, +1711=>805,1717=>654,1722=>661,1727=>581,1734=>435,1740=>704,1742=>704,1749=>471,1776=>483,1777=>483, +1778=>483,1779=>483,1780=>483,1781=>483,1782=>483,1783=>483,1784=>483,1785=>483,1984=>572,1985=>572, +1986=>572,1987=>572,1988=>572,1989=>572,1990=>572,1991=>572,1992=>572,1993=>572,1994=>250,1995=>514, +1996=>381,1997=>532,1998=>588,1999=>588,2000=>534,2001=>588,2002=>746,2003=>394,2004=>394,2005=>502, +2006=>550,2007=>315,2008=>863,2009=>425,2010=>705,2011=>588,2012=>563,2013=>660,2014=>477,2015=>651, +2016=>425,2017=>563,2018=>534,2019=>477,2020=>477,2021=>470,2022=>534,2023=>534,2027=>0,2028=>0, +2029=>0,2030=>0,2031=>0,2032=>0,2033=>0,2034=>0,2035=>0,2036=>282,2037=>282,2040=>504, +2041=>504,2042=>325,3647=>586,3713=>603,3714=>615,3716=>619,3719=>434,3720=>565,3722=>615,3725=>619, +3732=>602,3733=>577,3734=>580,3735=>589,3737=>593,3738=>563,3739=>563,3740=>670,3741=>690,3742=>618, +3743=>618,3745=>631,3746=>619,3747=>615,3749=>584,3751=>569,3754=>633,3755=>737,3757=>569,3758=>615, +3759=>708,3760=>569,3761=>0,3762=>485,3763=>485,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0, +3769=>0,3771=>0,3772=>0,3773=>597,3776=>337,3777=>591,3778=>414,3779=>492,3780=>442,3782=>606, +3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>572,3793=>576,3794=>576,3795=>603, +3796=>563,3797=>563,3798=>633,3799=>603,3800=>606,3801=>609,3804=>925,3805=>925,4256=>756,4257=>621, +4258=>577,4259=>683,4260=>532,4261=>617,4262=>710,4263=>729,4264=>420,4265=>508,4266=>710,4267=>713, +4268=>526,4269=>753,4270=>675,4271=>620,4272=>729,4273=>526,4274=>526,4275=>753,4276=>753,4277=>581, +4278=>543,4279=>526,4280=>536,4281=>526,4282=>649,4283=>715,4284=>526,4285=>510,4286=>526,4287=>602, +4288=>719,4289=>488,4290=>598,4291=>488,4292=>508,4293=>606,4304=>457,4305=>457,4306=>479,4307=>706, +4308=>470,4309=>465,4310=>457,4311=>717,4312=>457,4313=>466,4314=>952,4315=>470,4316=>470,4317=>704, +4318=>466,4319=>470,4320=>713,4321=>470,4322=>590,4323=>471,4324=>709,4325=>470,4326=>704,4327=>470, +4328=>470,4329=>470,4330=>510,4331=>470,4332=>470,4333=>439,4334=>470,4335=>448,4336=>465,4337=>504, +4338=>457,4339=>457,4340=>457,4341=>507,4342=>741,4343=>536,4344=>470,4345=>498,4346=>498,4347=>527, +4348=>273,5121=>615,5122=>615,5123=>615,5124=>615,5125=>692,5126=>692,5127=>692,5129=>692,5130=>692, +5131=>692,5132=>751,5133=>751,5134=>751,5135=>751,5136=>751,5137=>751,5138=>870,5139=>906,5140=>870, +5141=>906,5142=>692,5143=>870,5144=>906,5145=>870,5146=>906,5147=>692,5149=>230,5150=>488,5151=>381, +5152=>381,5153=>350,5154=>350,5155=>354,5156=>350,5157=>419,5158=>347,5159=>230,5160=>350,5161=>350, +5162=>350,5163=>980,5164=>817,5165=>857,5166=>1005,5167=>615,5168=>615,5169=>615,5170=>615,5171=>656, +5172=>656,5173=>656,5175=>656,5176=>656,5177=>656,5178=>751,5179=>615,5180=>751,5181=>751,5182=>751, +5183=>751,5184=>870,5185=>906,5186=>870,5187=>906,5188=>870,5189=>906,5190=>870,5191=>906,5192=>656, +5193=>457,5194=>172,5196=>659,5197=>659,5198=>659,5199=>659,5200=>657,5201=>657,5202=>657,5204=>657, +5205=>657,5206=>657,5207=>829,5208=>800,5209=>829,5210=>800,5211=>829,5212=>800,5213=>835,5214=>810, +5215=>835,5216=>810,5217=>853,5218=>810,5219=>853,5220=>810,5221=>853,5222=>391,5223=>790,5224=>790, +5225=>779,5226=>801,5227=>565,5228=>565,5229=>565,5230=>565,5231=>565,5232=>565,5233=>565,5234=>565, +5235=>565,5236=>773,5237=>693,5238=>733,5239=>734,5240=>733,5241=>734,5242=>773,5243=>693,5244=>773, +5245=>693,5246=>733,5247=>734,5248=>733,5249=>734,5250=>733,5251=>366,5252=>366,5253=>675,5254=>697, +5255=>675,5256=>697,5257=>565,5258=>565,5259=>565,5260=>565,5261=>565,5262=>565,5263=>565,5264=>565, +5265=>565,5266=>773,5267=>693,5268=>733,5269=>734,5270=>733,5271=>734,5272=>773,5273=>693,5274=>773, +5275=>693,5276=>733,5277=>734,5278=>733,5279=>734,5280=>733,5281=>391,5282=>391,5283=>549,5284=>501, +5285=>501,5286=>501,5287=>549,5288=>549,5289=>549,5290=>501,5291=>501,5292=>674,5293=>691,5294=>671, +5295=>687,5296=>671,5297=>687,5298=>674,5299=>691,5300=>674,5301=>691,5302=>671,5303=>687,5304=>671, +5305=>687,5306=>671,5307=>347,5308=>457,5309=>347,5312=>766,5313=>766,5314=>766,5315=>766,5316=>766, +5317=>766,5318=>766,5319=>766,5320=>766,5321=>962,5322=>931,5323=>953,5324=>766,5325=>953,5326=>766, +5327=>766,5328=>540,5329=>407,5330=>540,5331=>766,5332=>766,5333=>766,5334=>766,5335=>766,5336=>766, +5337=>766,5338=>766,5339=>766,5340=>962,5341=>931,5342=>953,5343=>927,5344=>953,5345=>927,5346=>962, +5347=>931,5348=>962,5349=>931,5350=>975,5351=>927,5352=>975,5353=>927,5354=>540,5356=>656,5357=>542, +5358=>542,5359=>542,5360=>542,5361=>542,5362=>542,5363=>542,5364=>542,5365=>542,5366=>751,5367=>678, +5368=>712,5369=>694,5370=>712,5371=>694,5372=>751,5373=>678,5374=>751,5375=>678,5376=>712,5377=>694, +5378=>712,5379=>694,5380=>712,5381=>376,5382=>378,5383=>376,5392=>641,5393=>641,5394=>641,5395=>802, +5396=>802,5397=>802,5398=>802,5399=>818,5400=>785,5401=>818,5402=>785,5403=>818,5404=>785,5405=>1026, +5406=>989,5407=>1026,5408=>989,5409=>1026,5410=>989,5411=>1026,5412=>989,5413=>576,5414=>564,5415=>564, +5416=>564,5417=>564,5418=>564,5419=>564,5420=>564,5421=>564,5422=>564,5423=>760,5424=>703,5425=>734, +5426=>736,5427=>734,5428=>736,5429=>760,5430=>703,5431=>760,5432=>703,5433=>734,5434=>736,5435=>734, +5436=>736,5437=>734,5438=>376,5440=>350,5441=>436,5442=>824,5443=>824,5444=>824,5445=>824,5446=>824, +5447=>824,5448=>542,5449=>542,5450=>542,5451=>542,5452=>542,5453=>542,5454=>751,5455=>678,5456=>376, +5458=>656,5459=>615,5460=>615,5461=>615,5462=>615,5463=>653,5464=>653,5465=>653,5466=>653,5467=>831, +5468=>906,5469=>457,5470=>659,5471=>659,5472=>659,5473=>659,5474=>659,5475=>659,5476=>657,5477=>657, +5478=>657,5479=>657,5480=>853,5481=>810,5482=>457,5492=>747,5493=>747,5494=>747,5495=>747,5496=>747, +5497=>747,5498=>747,5499=>507,5500=>677,5501=>436,5502=>942,5503=>942,5504=>942,5505=>942,5506=>942, +5507=>942,5508=>942,5509=>743,5514=>747,5515=>747,5516=>747,5517=>747,5518=>1133,5519=>1133,5520=>1133, +5521=>901,5522=>901,5523=>1133,5524=>1133,5525=>629,5526=>965,5536=>766,5537=>766,5538=>766,5539=>766, +5540=>766,5541=>766,5542=>540,5543=>579,5544=>579,5545=>579,5546=>579,5547=>579,5548=>579,5549=>579, +5550=>376,5551=>565,5598=>693,5601=>690,5702=>421,5703=>421,5742=>399,5743=>942,5744=>1178,5745=>1469, +5746=>1469,5747=>1237,5748=>1237,5749=>1469,5750=>1469,5760=>429,5761=>443,5762=>641,5763=>838,5764=>1035, +5765=>1232,5766=>443,5767=>641,5768=>838,5769=>1035,5770=>1232,5771=>448,5772=>646,5773=>844,5774=>1042, +5775=>1241,5776=>443,5777=>641,5778=>836,5779=>1034,5780=>1232,5781=>448,5782=>677,5783=>709,5784=>1084, +5785=>1035,5786=>615,5787=>457,5788=>456,7424=>532,7425=>646,7426=>883,7427=>527,7428=>495,7429=>544, +7430=>544,7431=>441,7432=>486,7433=>250,7434=>355,7435=>521,7436=>524,7437=>679,7438=>584,7439=>550, +7440=>495,7441=>615,7442=>615,7443=>615,7444=>920,7446=>550,7447=>550,7448=>472,7449=>541,7450=>541, +7451=>524,7452=>517,7453=>663,7454=>853,7455=>574,7456=>532,7457=>736,7458=>472,7459=>473,7462=>524, +7463=>532,7464=>507,7465=>472,7466=>531,7467=>575,7468=>387,7469=>552,7470=>389,7472=>436,7473=>358, +7474=>358,7475=>439,7476=>426,7477=>167,7478=>167,7479=>372,7480=>315,7481=>489,7482=>424,7483=>424, +7484=>446,7485=>396,7486=>342,7487=>394,7488=>346,7489=>415,7490=>560,7491=>352,7492=>352,7493=>365, +7494=>583,7495=>385,7496=>365,7497=>375,7498=>375,7499=>324,7500=>323,7501=>365,7502=>161,7503=>383, +7504=>561,7505=>368,7506=>372,7507=>333,7508=>372,7509=>372,7510=>385,7511=>265,7512=>364,7513=>422, +7514=>561,7515=>375,7517=>361,7518=>335,7519=>347,7520=>374,7521=>327,7522=>161,7523=>233,7524=>364, +7525=>375,7526=>361,7527=>335,7528=>370,7529=>374,7530=>327,7543=>571,7544=>426,7547=>334,7557=>250, +7579=>365,7580=>333,7581=>333,7582=>372,7583=>324,7584=>267,7585=>209,7586=>365,7587=>364,7588=>235, +7589=>224,7590=>234,7591=>235,7592=>211,7593=>224,7594=>211,7595=>338,7596=>561,7597=>561,7598=>369, +7599=>431,7600=>368,7601=>372,7602=>372,7603=>324,7604=>258,7605=>265,7606=>457,7607=>376,7608=>325, +7609=>365,7610=>375,7611=>330,7612=>393,7613=>330,7614=>353,7615=>372,7620=>0,7621=>0,7622=>0, +7623=>0,7624=>0,7625=>0,7680=>615,7681=>551,7682=>617,7683=>571,7684=>617,7685=>571,7686=>617, +7687=>571,7688=>628,7689=>495,7690=>693,7691=>571,7692=>693,7693=>571,7694=>693,7695=>571,7696=>693, +7697=>571,7698=>693,7699=>571,7700=>568,7701=>554,7702=>568,7703=>554,7704=>568,7705=>554,7706=>568, +7707=>554,7708=>568,7709=>554,7710=>518,7711=>316,7712=>697,7713=>571,7714=>677,7715=>570,7716=>677, +7717=>570,7718=>677,7719=>570,7720=>677,7721=>570,7722=>677,7723=>570,7724=>265,7725=>250,7726=>265, +7727=>250,7728=>590,7729=>521,7730=>590,7731=>521,7732=>590,7733=>521,7734=>501,7735=>259,7736=>501, +7737=>259,7738=>501,7739=>250,7740=>501,7741=>250,7742=>776,7743=>876,7744=>776,7745=>876,7746=>776, +7747=>876,7748=>673,7749=>570,7750=>673,7751=>570,7752=>673,7753=>570,7754=>673,7755=>570,7756=>708, +7757=>550,7758=>708,7759=>550,7760=>708,7761=>550,7762=>708,7763=>550,7764=>542,7765=>571,7766=>542, +7767=>571,7768=>625,7769=>370,7770=>625,7771=>370,7772=>625,7773=>370,7774=>625,7775=>370,7776=>571, +7777=>469,7778=>571,7779=>469,7780=>571,7781=>469,7782=>571,7783=>469,7784=>571,7785=>469,7786=>549, +7787=>353,7788=>549,7789=>353,7790=>549,7791=>353,7792=>549,7793=>353,7794=>659,7795=>570,7796=>659, +7797=>570,7798=>659,7799=>570,7800=>659,7801=>570,7802=>659,7803=>570,7804=>615,7805=>532,7806=>615, +7807=>532,7808=>890,7809=>736,7810=>890,7811=>736,7812=>890,7813=>736,7814=>890,7815=>736,7816=>890, +7817=>736,7818=>616,7819=>532,7820=>616,7821=>532,7822=>549,7823=>532,7824=>616,7825=>472,7826=>616, +7827=>472,7828=>616,7829=>472,7830=>570,7831=>353,7832=>736,7833=>532,7834=>551,7835=>316,7838=>691, +7839=>550,7840=>615,7841=>551,7842=>615,7843=>551,7844=>615,7845=>551,7846=>615,7847=>551,7848=>615, +7849=>551,7850=>615,7851=>551,7852=>615,7853=>551,7854=>615,7855=>551,7856=>615,7857=>551,7858=>615, +7859=>551,7860=>615,7861=>551,7862=>615,7863=>551,7864=>568,7865=>554,7866=>568,7867=>554,7868=>568, +7869=>554,7870=>568,7871=>554,7872=>568,7873=>554,7874=>568,7875=>554,7876=>568,7877=>554,7878=>568, +7879=>554,7880=>265,7881=>250,7882=>265,7883=>250,7884=>708,7885=>550,7886=>708,7887=>550,7888=>708, +7889=>550,7890=>708,7891=>550,7892=>708,7893=>550,7894=>708,7895=>550,7896=>708,7897=>550,7898=>822, +7899=>550,7900=>822,7901=>550,7902=>822,7903=>550,7904=>822,7905=>550,7906=>822,7907=>550,7908=>659, +7909=>570,7910=>659,7911=>570,7912=>772,7913=>570,7914=>772,7915=>570,7916=>772,7917=>570,7918=>772, +7919=>570,7920=>772,7921=>570,7922=>549,7923=>532,7924=>549,7925=>532,7926=>549,7927=>532,7928=>549, +7929=>532,7936=>593,7937=>593,7938=>593,7939=>593,7940=>593,7941=>593,7942=>593,7943=>593,7944=>615, +7945=>615,7946=>790,7947=>790,7948=>692,7949=>721,7950=>637,7951=>668,7952=>486,7953=>486,7954=>486, +7955=>486,7956=>486,7957=>486,7960=>640,7961=>640,7962=>869,7963=>877,7964=>809,7965=>835,7968=>570, +7969=>570,7970=>570,7971=>570,7972=>570,7973=>570,7974=>570,7975=>570,7976=>753,7977=>751,7978=>977, +7979=>980,7980=>924,7981=>945,7982=>840,7983=>852,7984=>304,7985=>304,7986=>304,7987=>304,7988=>304, +7989=>304,7990=>304,7991=>304,7992=>342,7993=>336,7994=>571,7995=>571,7996=>513,7997=>540,7998=>440, +7999=>443,8000=>550,8001=>550,8002=>550,8003=>550,8004=>550,8005=>550,8008=>724,8009=>763,8010=>985, +8011=>989,8012=>844,8013=>873,8016=>521,8017=>521,8018=>521,8019=>521,8020=>521,8021=>521,8022=>521, +8023=>521,8025=>705,8027=>897,8029=>911,8031=>808,8032=>753,8033=>753,8034=>753,8035=>753,8036=>753, +8037=>753,8038=>753,8039=>753,8040=>722,8041=>759,8042=>980,8043=>985,8044=>851,8045=>875,8046=>829, +8047=>857,8048=>593,8049=>593,8050=>486,8051=>493,8052=>570,8053=>589,8054=>304,8055=>304,8056=>550, +8057=>550,8058=>521,8059=>521,8060=>753,8061=>753,8064=>593,8065=>593,8066=>593,8067=>593,8068=>593, +8069=>593,8070=>593,8071=>593,8072=>615,8073=>615,8074=>790,8075=>790,8076=>692,8077=>721,8078=>637, +8079=>668,8080=>570,8081=>570,8082=>570,8083=>570,8084=>570,8085=>570,8086=>570,8087=>570,8088=>753, +8089=>751,8090=>977,8091=>980,8092=>924,8093=>945,8094=>840,8095=>852,8096=>753,8097=>753,8098=>753, +8099=>753,8100=>753,8101=>753,8102=>753,8103=>753,8104=>722,8105=>759,8106=>980,8107=>985,8108=>851, +8109=>875,8110=>829,8111=>857,8112=>593,8113=>593,8114=>593,8115=>593,8116=>593,8118=>593,8119=>593, +8120=>615,8121=>615,8122=>645,8123=>623,8124=>615,8125=>450,8126=>450,8127=>450,8128=>450,8129=>450, +8130=>570,8131=>570,8132=>589,8134=>570,8135=>570,8136=>724,8137=>671,8138=>837,8139=>784,8140=>677, +8141=>450,8142=>450,8143=>450,8144=>304,8145=>304,8146=>304,8147=>304,8150=>304,8151=>304,8152=>265, +8153=>265,8154=>427,8155=>367,8157=>450,8158=>450,8159=>450,8160=>521,8161=>521,8162=>521,8163=>521, +8164=>571,8165=>571,8166=>521,8167=>521,8168=>549,8169=>549,8170=>760,8171=>742,8172=>616,8173=>450, +8174=>450,8175=>450,8178=>753,8179=>753,8180=>753,8182=>753,8183=>753,8184=>847,8185=>731,8186=>830, +8187=>743,8188=>688,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296,8197=>225, +8198=>150,8199=>572,8200=>286,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0, +8208=>325,8209=>325,8210=>572,8213=>900,8214=>450,8215=>450,8219=>286,8223=>466,8227=>531,8228=>301, +8229=>601,8231=>286,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180,8241=>1562,8242=>204, +8243=>336,8244=>468,8245=>204,8246=>336,8247=>468,8248=>305,8251=>754,8252=>437,8253=>478,8254=>450, +8255=>723,8256=>723,8257=>225,8258=>900,8259=>450,8260=>150,8261=>351,8262=>351,8263=>830,8264=>659, +8265=>659,8266=>447,8267=>572,8268=>450,8269=>450,8270=>450,8271=>303,8272=>723,8273=>450,8274=>404, +8275=>900,8276=>723,8277=>754,8278=>527,8279=>597,8280=>754,8281=>754,8282=>286,8283=>717,8284=>754, +8285=>286,8286=>286,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0, +8300=>0,8301=>0,8302=>0,8303=>0,8304=>360,8305=>161,8308=>360,8309=>360,8310=>360,8311=>360, +8312=>360,8313=>360,8314=>475,8315=>475,8316=>475,8317=>221,8318=>221,8319=>358,8320=>360,8321=>360, +8322=>360,8323=>360,8324=>360,8325=>360,8326=>360,8327=>360,8328=>360,8329=>360,8330=>475,8331=>475, +8332=>475,8333=>221,8334=>221,8336=>352,8337=>375,8338=>372,8339=>399,8340=>375,8352=>789,8353=>572, +8354=>572,8355=>572,8356=>572,8357=>876,8358=>673,8359=>1145,8360=>966,8361=>890,8362=>706,8363=>571, +8365=>572,8366=>572,8367=>1145,8368=>572,8369=>572,8370=>572,8371=>572,8372=>696,8373=>577,8400=>0, +8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>917,8449=>917,8450=>628,8451=>1011, +8452=>578,8453=>917,8454=>960,8455=>553,8456=>628,8457=>856,8459=>889,8460=>679,8461=>765,8462=>570, +8463=>570,8464=>422,8465=>627,8466=>648,8467=>372,8468=>736,8469=>721,8470=>936,8471=>900,8472=>627, +8473=>631,8474=>708,8475=>718,8476=>732,8477=>712,8478=>807,8479=>615,8480=>917,8481=>967,8483=>615, +8484=>670,8485=>520,8486=>688,8487=>688,8488=>554,8489=>304,8490=>590,8491=>615,8492=>708,8493=>633, +8494=>769,8495=>532,8496=>545,8497=>708,8498=>518,8499=>962,8500=>416,8501=>670,8502=>606,8503=>419, +8504=>580,8505=>342,8506=>833,8507=>1074,8508=>632,8509=>655,8510=>589,8511=>764,8512=>729,8513=>697, +8514=>501,8515=>501,8516=>549,8517=>737,8518=>637,8519=>554,8520=>316,8521=>316,8523=>702,8526=>474, +8531=>872,8532=>872,8533=>872,8534=>872,8535=>872,8536=>872,8537=>872,8538=>872,8539=>872,8540=>872, +8541=>872,8542=>872,8543=>511,8544=>265,8545=>443,8546=>620,8547=>831,8548=>615,8549=>830,8550=>1007, +8551=>1185,8552=>826,8553=>616,8554=>839,8555=>1018,8556=>501,8557=>628,8558=>693,8559=>776,8560=>250, +8561=>412,8562=>573,8563=>730,8564=>532,8565=>729,8566=>892,8567=>1053,8568=>737,8569=>532,8570=>740, +8571=>901,8572=>250,8573=>495,8574=>571,8575=>876,8576=>1121,8577=>693,8578=>1121,8579=>633,8580=>494, +8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754, +8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754, +8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754, +8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754, +8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754, +8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754, +8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754, +8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754, +8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754, +8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754, +8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754, +8702=>754,8703=>754,8704=>615,8705=>572,8706=>465,8707=>568,8708=>568,8709=>784,8710=>602,8711=>602, +8712=>784,8713=>784,8714=>646,8715=>784,8716=>784,8717=>646,8718=>572,8719=>681,8720=>681,8721=>606, +8722=>754,8723=>754,8724=>754,8725=>303,8726=>573,8727=>754,8728=>563,8729=>563,8730=>573,8731=>573, +8732=>573,8733=>643,8734=>750,8735=>754,8736=>807,8737=>807,8738=>754,8739=>450,8740=>450,8741=>450, +8742=>450,8743=>659,8744=>659,8745=>659,8746=>659,8747=>469,8748=>710,8749=>951,8750=>469,8751=>710, +8752=>951,8753=>469,8754=>469,8755=>469,8756=>572,8757=>572,8758=>234,8759=>572,8760=>754,8761=>754, +8762=>754,8763=>754,8764=>754,8765=>754,8766=>754,8767=>754,8768=>337,8769=>754,8770=>754,8771=>754, +8772=>754,8773=>754,8774=>754,8775=>754,8776=>754,8777=>754,8778=>754,8779=>754,8780=>754,8781=>754, +8782=>754,8783=>754,8784=>754,8785=>754,8786=>755,8787=>755,8788=>900,8789=>900,8790=>754,8791=>754, +8792=>754,8793=>754,8794=>754,8795=>754,8796=>754,8797=>754,8798=>754,8799=>754,8800=>754,8801=>754, +8802=>754,8803=>754,8804=>754,8805=>754,8806=>754,8807=>754,8808=>754,8809=>754,8810=>942,8811=>942, +8812=>417,8813=>754,8814=>754,8815=>754,8816=>754,8817=>754,8818=>754,8819=>754,8820=>754,8821=>754, +8822=>754,8823=>754,8824=>754,8825=>754,8826=>754,8827=>754,8828=>754,8829=>754,8830=>754,8831=>754, +8832=>754,8833=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8840=>754,8841=>754, +8842=>754,8843=>754,8844=>659,8845=>659,8846=>659,8847=>754,8848=>754,8849=>754,8850=>754,8851=>702, +8852=>702,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754, +8862=>754,8863=>754,8864=>754,8865=>754,8866=>784,8867=>784,8868=>784,8869=>784,8870=>468,8871=>468, +8872=>784,8873=>784,8874=>784,8875=>784,8876=>784,8877=>784,8878=>784,8879=>784,8880=>754,8881=>754, +8882=>754,8883=>754,8884=>754,8885=>754,8886=>900,8887=>900,8888=>754,8889=>754,8890=>468,8891=>659, +8892=>659,8893=>659,8894=>754,8895=>754,8896=>738,8897=>738,8898=>738,8899=>738,8900=>444,8901=>286, +8902=>563,8903=>754,8904=>900,8905=>900,8906=>900,8907=>900,8908=>900,8909=>754,8910=>659,8911=>659, +8912=>754,8913=>754,8914=>754,8915=>754,8916=>754,8917=>754,8918=>754,8919=>754,8920=>1280,8921=>1280, +8922=>754,8923=>754,8924=>754,8925=>754,8926=>754,8927=>754,8928=>754,8929=>754,8930=>754,8931=>754, +8932=>754,8933=>754,8934=>754,8935=>754,8936=>754,8937=>754,8938=>754,8939=>754,8940=>754,8941=>754, +8942=>900,8943=>900,8944=>900,8945=>900,8946=>900,8947=>784,8948=>646,8949=>784,8950=>784,8951=>646, +8952=>784,8953=>784,8954=>900,8955=>784,8956=>646,8957=>784,8958=>646,8959=>784,8960=>542,8961=>542, +8962=>571,8963=>754,8964=>754,8965=>754,8966=>754,8967=>439,8968=>351,8969=>351,8970=>351,8971=>351, +8972=>728,8973=>728,8974=>728,8975=>728,8976=>754,8977=>461,8984=>900,8985=>754,8988=>422,8989=>422, +8990=>422,8991=>422,8992=>469,8993=>469,8996=>1037,8997=>1037,8998=>1272,8999=>1037,9000=>1299,9003=>1272, +9004=>786,9075=>304,9076=>571,9077=>753,9082=>593,9085=>681,9095=>1037,9108=>786,9115=>450,9116=>450, +9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450, +9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>469,9166=>754,9167=>850, +9187=>786,9189=>692,9250=>571,9251=>571,9312=>807,9313=>807,9314=>807,9315=>807,9316=>807,9317=>807, +9318=>807,9319=>807,9320=>807,9321=>807,9472=>542,9473=>542,9474=>542,9475=>542,9476=>542,9477=>542, +9478=>542,9479=>542,9480=>542,9481=>542,9482=>542,9483=>542,9484=>542,9485=>542,9486=>542,9487=>542, +9488=>542,9489=>542,9490=>542,9491=>542,9492=>542,9493=>542,9494=>542,9495=>542,9496=>542,9497=>542, +9498=>542,9499=>542,9500=>542,9501=>542,9502=>542,9503=>542,9504=>542,9505=>542,9506=>542,9507=>542, +9508=>542,9509=>542,9510=>542,9511=>542,9512=>542,9513=>542,9514=>542,9515=>542,9516=>542,9517=>542, +9518=>542,9519=>542,9520=>542,9521=>542,9522=>542,9523=>542,9524=>542,9525=>542,9526=>542,9527=>542, +9528=>542,9529=>542,9530=>542,9531=>542,9532=>542,9533=>542,9534=>542,9535=>542,9536=>542,9537=>542, +9538=>542,9539=>542,9540=>542,9541=>542,9542=>542,9543=>542,9544=>542,9545=>542,9546=>542,9547=>542, +9548=>542,9549=>542,9550=>542,9551=>542,9552=>542,9553=>542,9554=>542,9555=>542,9556=>542,9557=>542, +9558=>542,9559=>542,9560=>542,9561=>542,9562=>542,9563=>542,9564=>542,9565=>542,9566=>542,9567=>542, +9568=>542,9569=>542,9570=>542,9571=>542,9572=>542,9573=>542,9574=>542,9575=>542,9576=>542,9577=>542, +9578=>542,9579=>542,9580=>542,9581=>542,9582=>542,9583=>542,9584=>542,9585=>542,9586=>542,9587=>542, +9588=>542,9589=>542,9590=>542,9591=>542,9592=>542,9593=>542,9594=>542,9595=>542,9596=>542,9597=>542, +9598=>542,9599=>542,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692, +9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692, +9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692, +9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850, +9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495, +9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452, +9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452, +9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785, +9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474, +9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>785,9697=>785, +9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850, +9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785, +9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692, +9728=>807,9729=>900,9730=>807,9731=>807,9732=>807,9733=>807,9734=>807,9735=>515,9736=>806,9737=>807, +9738=>799,9739=>799,9740=>604,9741=>911,9742=>1121,9743=>1125,9744=>807,9745=>807,9746=>807,9747=>479, +9748=>807,9749=>807,9750=>807,9751=>807,9752=>807,9753=>807,9754=>807,9755=>807,9756=>807,9757=>548, +9758=>807,9759=>548,9760=>807,9761=>807,9762=>807,9763=>807,9764=>602,9765=>671,9766=>584,9767=>705, +9768=>490,9769=>807,9770=>807,9771=>807,9772=>639,9773=>807,9774=>807,9775=>807,9776=>807,9777=>807, +9778=>807,9779=>807,9780=>807,9781=>807,9782=>807,9783=>807,9784=>807,9785=>807,9786=>807,9787=>807, +9788=>807,9789=>807,9790=>807,9791=>552,9792=>658,9793=>658,9794=>807,9795=>807,9796=>807,9797=>807, +9798=>807,9799=>807,9800=>807,9801=>807,9802=>807,9803=>807,9804=>807,9805=>807,9806=>807,9807=>807, +9808=>807,9809=>807,9810=>807,9811=>807,9812=>807,9813=>807,9814=>807,9815=>807,9816=>807,9817=>807, +9818=>807,9819=>807,9820=>807,9821=>807,9822=>807,9823=>807,9824=>807,9825=>807,9826=>807,9827=>807, +9828=>807,9829=>807,9830=>807,9831=>807,9832=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424, +9838=>321,9839=>435,9840=>673,9841=>689,9842=>807,9843=>807,9844=>807,9845=>807,9846=>807,9847=>807, +9848=>807,9849=>807,9850=>807,9851=>807,9852=>807,9853=>807,9854=>807,9855=>807,9856=>782,9857=>782, +9858=>782,9859=>782,9860=>782,9861=>782,9862=>807,9863=>807,9864=>807,9865=>807,9866=>807,9867=>807, +9868=>807,9869=>807,9870=>807,9871=>807,9872=>807,9873=>807,9874=>807,9875=>807,9876=>807,9877=>487, +9878=>807,9879=>807,9880=>807,9881=>807,9882=>807,9883=>807,9884=>807,9888=>807,9889=>632,9890=>903, +9891=>977,9892=>1028,9893=>811,9894=>754,9895=>754,9896=>754,9897=>754,9898=>754,9899=>754,9900=>754, +9901=>754,9902=>754,9903=>754,9904=>759,9905=>754,9906=>658,9907=>659,9908=>659,9909=>659,9910=>765, +9911=>659,9912=>659,9985=>754,9986=>754,9987=>754,9988=>754,9990=>754,9991=>754,9992=>754,9993=>754, +9996=>754,9997=>754,9998=>754,9999=>754,10000=>754,10001=>754,10002=>754,10003=>754,10004=>754,10005=>754, +10006=>754,10007=>754,10008=>754,10009=>754,10010=>754,10011=>754,10012=>754,10013=>754,10014=>754,10015=>754, +10016=>754,10017=>754,10018=>754,10019=>754,10020=>754,10021=>754,10022=>754,10023=>754,10025=>754,10026=>754, +10027=>754,10028=>754,10029=>754,10030=>754,10031=>754,10032=>754,10033=>754,10034=>754,10035=>754,10036=>754, +10037=>754,10038=>754,10039=>754,10040=>754,10041=>754,10042=>754,10043=>754,10044=>754,10045=>754,10046=>754, +10047=>754,10048=>754,10049=>754,10050=>754,10051=>754,10052=>754,10053=>754,10054=>754,10055=>754,10056=>754, +10057=>754,10058=>754,10059=>754,10061=>807,10063=>807,10064=>807,10065=>807,10066=>807,10070=>807,10072=>754, +10073=>754,10074=>754,10075=>290,10076=>290,10077=>484,10078=>484,10081=>754,10082=>754,10083=>754,10084=>754, +10085=>754,10086=>754,10087=>754,10088=>754,10089=>754,10090=>754,10091=>754,10092=>754,10093=>754,10094=>754, +10095=>754,10096=>754,10097=>754,10098=>754,10099=>754,10100=>754,10101=>754,10102=>807,10103=>807,10104=>807, +10105=>807,10106=>807,10107=>807,10108=>807,10109=>807,10110=>807,10111=>807,10112=>754,10113=>754,10114=>754, +10115=>754,10116=>754,10117=>754,10118=>754,10119=>754,10120=>754,10121=>754,10122=>754,10123=>754,10124=>754, +10125=>754,10126=>754,10127=>754,10128=>754,10129=>754,10130=>754,10131=>754,10132=>754,10136=>754,10137=>754, +10138=>754,10139=>754,10140=>754,10141=>754,10142=>754,10143=>754,10144=>754,10145=>754,10146=>754,10147=>754, +10148=>754,10149=>754,10150=>754,10151=>754,10152=>754,10153=>754,10154=>754,10155=>754,10156=>754,10157=>754, +10158=>754,10159=>754,10161=>754,10162=>754,10163=>754,10164=>754,10165=>754,10166=>754,10167=>754,10168=>754, +10169=>754,10170=>754,10171=>754,10172=>754,10173=>754,10174=>754,10181=>351,10182=>351,10208=>444,10214=>445, +10215=>445,10216=>351,10217=>351,10218=>500,10219=>500,10224=>754,10225=>754,10226=>754,10227=>754,10228=>1042, +10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290, +10239=>1290,10240=>659,10241=>659,10242=>659,10243=>659,10244=>659,10245=>659,10246=>659,10247=>659,10248=>659, +10249=>659,10250=>659,10251=>659,10252=>659,10253=>659,10254=>659,10255=>659,10256=>659,10257=>659,10258=>659, +10259=>659,10260=>659,10261=>659,10262=>659,10263=>659,10264=>659,10265=>659,10266=>659,10267=>659,10268=>659, +10269=>659,10270=>659,10271=>659,10272=>659,10273=>659,10274=>659,10275=>659,10276=>659,10277=>659,10278=>659, +10279=>659,10280=>659,10281=>659,10282=>659,10283=>659,10284=>659,10285=>659,10286=>659,10287=>659,10288=>659, +10289=>659,10290=>659,10291=>659,10292=>659,10293=>659,10294=>659,10295=>659,10296=>659,10297=>659,10298=>659, +10299=>659,10300=>659,10301=>659,10302=>659,10303=>659,10304=>659,10305=>659,10306=>659,10307=>659,10308=>659, +10309=>659,10310=>659,10311=>659,10312=>659,10313=>659,10314=>659,10315=>659,10316=>659,10317=>659,10318=>659, +10319=>659,10320=>659,10321=>659,10322=>659,10323=>659,10324=>659,10325=>659,10326=>659,10327=>659,10328=>659, +10329=>659,10330=>659,10331=>659,10332=>659,10333=>659,10334=>659,10335=>659,10336=>659,10337=>659,10338=>659, +10339=>659,10340=>659,10341=>659,10342=>659,10343=>659,10344=>659,10345=>659,10346=>659,10347=>659,10348=>659, +10349=>659,10350=>659,10351=>659,10352=>659,10353=>659,10354=>659,10355=>659,10356=>659,10357=>659,10358=>659, +10359=>659,10360=>659,10361=>659,10362=>659,10363=>659,10364=>659,10365=>659,10366=>659,10367=>659,10368=>659, +10369=>659,10370=>659,10371=>659,10372=>659,10373=>659,10374=>659,10375=>659,10376=>659,10377=>659,10378=>659, +10379=>659,10380=>659,10381=>659,10382=>659,10383=>659,10384=>659,10385=>659,10386=>659,10387=>659,10388=>659, +10389=>659,10390=>659,10391=>659,10392=>659,10393=>659,10394=>659,10395=>659,10396=>659,10397=>659,10398=>659, +10399=>659,10400=>659,10401=>659,10402=>659,10403=>659,10404=>659,10405=>659,10406=>659,10407=>659,10408=>659, +10409=>659,10410=>659,10411=>659,10412=>659,10413=>659,10414=>659,10415=>659,10416=>659,10417=>659,10418=>659, +10419=>659,10420=>659,10421=>659,10422=>659,10423=>659,10424=>659,10425=>659,10426=>659,10427=>659,10428=>659, +10429=>659,10430=>659,10431=>659,10432=>659,10433=>659,10434=>659,10435=>659,10436=>659,10437=>659,10438=>659, +10439=>659,10440=>659,10441=>659,10442=>659,10443=>659,10444=>659,10445=>659,10446=>659,10447=>659,10448=>659, +10449=>659,10450=>659,10451=>659,10452=>659,10453=>659,10454=>659,10455=>659,10456=>659,10457=>659,10458=>659, +10459=>659,10460=>659,10461=>659,10462=>659,10463=>659,10464=>659,10465=>659,10466=>659,10467=>659,10468=>659, +10469=>659,10470=>659,10471=>659,10472=>659,10473=>659,10474=>659,10475=>659,10476=>659,10477=>659,10478=>659, +10479=>659,10480=>659,10481=>659,10482=>659,10483=>659,10484=>659,10485=>659,10486=>659,10487=>659,10488=>659, +10489=>659,10490=>659,10491=>659,10492=>659,10493=>659,10494=>659,10495=>659,10502=>754,10503=>754,10506=>754, +10507=>754,10560=>615,10561=>615,10627=>660,10628=>660,10702=>754,10703=>900,10704=>900,10705=>900,10706=>900, +10707=>900,10708=>900,10709=>900,10731=>444,10746=>754,10747=>754,10752=>900,10753=>900,10754=>900,10764=>1192, +10765=>469,10766=>469,10767=>469,10768=>469,10769=>469,10770=>469,10771=>469,10772=>469,10773=>469,10774=>469, +10775=>469,10776=>469,10777=>469,10778=>469,10779=>469,10780=>469,10799=>754,10877=>754,10878=>754,10879=>754, +10880=>754,10881=>754,10882=>754,10883=>754,10884=>754,10885=>754,10886=>754,10887=>754,10888=>754,10889=>754, +10890=>754,10891=>754,10892=>754,10893=>754,10894=>754,10895=>754,10896=>754,10897=>754,10898=>754,10899=>754, +10900=>754,10901=>754,10902=>754,10903=>754,10904=>754,10905=>754,10906=>754,10907=>754,10908=>754,10909=>754, +10910=>754,10911=>754,10912=>754,10926=>754,10927=>754,10928=>754,10929=>754,10930=>754,10931=>754,10932=>754, +10933=>754,10934=>754,10935=>754,10936=>754,10937=>754,10938=>754,11001=>754,11002=>754,11008=>754,11009=>754, +11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754, +11020=>754,11021=>754,11022=>752,11023=>752,11024=>752,11025=>752,11026=>850,11027=>850,11028=>850,11029=>850, +11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11039=>782,11040=>782,11041=>786,11042=>786,11043=>786, +11044=>1007,11091=>782,11092=>782,11360=>501,11361=>250,11362=>501,11363=>542,11364=>625,11365=>551,11366=>353, +11367=>677,11368=>570,11369=>590,11370=>521,11371=>616,11372=>472,11373=>703,11374=>776,11375=>615,11377=>661, +11378=>1015,11379=>865,11380=>532,11381=>589,11382=>511,11383=>593,11385=>373,11386=>550,11387=>441,11388=>157, +11389=>387,11568=>582,11569=>799,11570=>799,11571=>614,11572=>615,11573=>571,11574=>505,11575=>615,11576=>615, +11577=>568,11578=>568,11579=>614,11580=>787,11581=>616,11582=>441,11583=>616,11584=>799,11585=>799,11586=>270, +11587=>564,11588=>677,11589=>590,11590=>475,11591=>616,11592=>580,11593=>568,11594=>452,11595=>857,11596=>700, +11597=>673,11598=>558,11599=>265,11600=>700,11601=>265,11602=>677,11603=>569,11604=>799,11605=>799,11606=>677, +11607=>288,11608=>674,11609=>799,11610=>799,11611=>628,11612=>690,11613=>616,11614=>628,11615=>560,11616=>615, +11617=>677,11618=>568,11619=>709,11620=>510,11621=>709,11631=>463,11800=>478,11810=>351,11811=>351,11812=>351, +11813=>351,11822=>478,19904=>807,19905=>807,19906=>807,19907=>807,19908=>807,19909=>807,19910=>807,19911=>807, +19912=>807,19913=>807,19914=>807,19915=>807,19916=>807,19917=>807,19918=>807,19919=>807,19920=>807,19921=>807, +19922=>807,19923=>807,19924=>807,19925=>807,19926=>807,19927=>807,19928=>807,19929=>807,19930=>807,19931=>807, +19932=>807,19933=>807,19934=>807,19935=>807,19936=>807,19937=>807,19938=>807,19939=>807,19940=>807,19941=>807, +19942=>807,19943=>807,19944=>807,19945=>807,19946=>807,19947=>807,19948=>807,19949=>807,19950=>807,19951=>807, +19952=>807,19953=>807,19954=>807,19955=>807,19956=>807,19957=>807,19958=>807,19959=>807,19960=>807,19961=>807, +19962=>807,19963=>807,19964=>807,19965=>807,19966=>807,19967=>807,42564=>571,42565=>469,42566=>318,42567=>304, +42572=>1062,42573=>925,42576=>926,42577=>815,42580=>971,42581=>757,42582=>879,42583=>758,42594=>956,42595=>820, +42596=>959,42597=>811,42598=>1060,42599=>907,42600=>708,42601=>550,42602=>770,42603=>641,42604=>1222,42605=>917, +42606=>791,42634=>704,42635=>616,42636=>549,42637=>524,42644=>617,42645=>570,42760=>444,42761=>444,42762=>444, +42763=>444,42764=>444,42765=>444,42766=>444,42767=>444,42768=>444,42769=>444,42770=>444,42771=>444,42772=>444, +42773=>444,42774=>444,42779=>332,42780=>332,42781=>227,42782=>227,42783=>227,42790=>677,42791=>570,42792=>790, +42793=>638,42794=>553,42795=>486,42800=>441,42801=>469,42802=>1125,42803=>886,42804=>1083,42805=>891,42806=>1028, +42807=>883,42808=>874,42809=>736,42810=>874,42811=>736,42812=>863,42813=>736,42814=>633,42815=>494,42822=>612, +42823=>353,42824=>523,42825=>384,42826=>726,42827=>633,42830=>1222,42831=>917,42880=>501,42881=>250,42882=>662, +42883=>570,42889=>303,42890=>338,42891=>360,42892=>247,43003=>518,43004=>542,43005=>776,43006=>265,43007=>1079, +61440=>879,61441=>879,63173=>550,64256=>620,64257=>567,64258=>567,64259=>870,64260=>870,64261=>617,64262=>774, +64275=>1081,64276=>1081,64277=>1076,64278=>1067,64279=>1376,64285=>245,64286=>0,64287=>423,64288=>572,64289=>770, +64290=>696,64291=>815,64292=>694,64293=>759,64294=>769,64295=>726,64296=>788,64297=>754,64298=>727,64299=>727, +64300=>727,64301=>727,64302=>566,64303=>566,64304=>566,64305=>547,64306=>403,64307=>534,64308=>576,64309=>245, +64310=>336,64312=>583,64313=>302,64314=>532,64315=>500,64316=>539,64318=>593,64320=>397,64321=>629,64323=>576, +64324=>543,64326=>523,64327=>596,64328=>532,64329=>727,64330=>591,64331=>245,64332=>547,64333=>500,64334=>543, +64335=>566,64338=>847,64339=>883,64340=>250,64341=>271,64342=>847,64343=>883,64344=>250,64345=>271,64346=>847, +64347=>883,64348=>250,64349=>271,64350=>847,64351=>883,64352=>250,64353=>271,64354=>847,64355=>883,64356=>250, +64357=>271,64358=>847,64359=>883,64360=>250,64361=>271,64362=>933,64363=>932,64364=>430,64365=>455,64366=>933, +64367=>932,64368=>430,64369=>455,64370=>581,64371=>581,64372=>556,64373=>581,64374=>581,64375=>581,64376=>556, +64377=>581,64378=>581,64379=>581,64380=>556,64381=>581,64382=>581,64383=>581,64384=>556,64385=>581,64394=>435, +64395=>497,64396=>435,64397=>497,64398=>805,64399=>805,64400=>428,64401=>497,64402=>805,64403=>805,64404=>428, +64405=>497,64414=>661,64415=>685,64473=>435,64474=>465,64488=>250,64489=>271,64508=>704,64509=>750,64510=>250, +64511=>271,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0, +65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0, +65059=>0,65136=>264,65137=>264,65138=>264,65139=>235,65140=>264,65142=>264,65143=>264,65144=>264,65145=>264, +65146=>264,65147=>264,65148=>264,65149=>264,65150=>264,65151=>264,65152=>423,65153=>250,65154=>274,65155=>250, +65156=>274,65157=>435,65158=>465,65159=>250,65160=>274,65161=>704,65162=>750,65163=>250,65164=>271,65165=>250, +65166=>274,65167=>847,65168=>883,65169=>250,65170=>271,65171=>471,65172=>482,65173=>847,65174=>883,65175=>250, +65176=>271,65177=>847,65178=>883,65179=>250,65180=>271,65181=>581,65182=>581,65183=>556,65184=>581,65185=>581, +65186=>581,65187=>556,65188=>581,65189=>581,65190=>581,65191=>556,65192=>581,65193=>400,65194=>472,65195=>400, +65196=>472,65197=>435,65198=>497,65199=>435,65200=>497,65201=>1099,65202=>1147,65203=>754,65204=>803,65205=>1099, +65206=>1147,65207=>754,65208=>803,65209=>1088,65210=>1103,65211=>764,65212=>780,65213=>1088,65214=>1103,65215=>764, +65216=>780,65217=>832,65218=>854,65219=>716,65220=>738,65221=>832,65222=>854,65223=>716,65224=>738,65225=>537, +65226=>479,65227=>537,65228=>434,65229=>537,65230=>479,65231=>470,65232=>434,65233=>933,65234=>932,65235=>430, +65236=>455,65237=>698,65238=>750,65239=>430,65240=>455,65241=>742,65242=>758,65243=>428,65244=>497,65245=>654, +65246=>681,65247=>274,65248=>298,65249=>557,65250=>599,65251=>482,65252=>520,65253=>661,65254=>685,65255=>250, +65256=>271,65257=>471,65258=>482,65259=>475,65260=>415,65261=>435,65262=>465,65263=>704,65264=>750,65265=>704, +65266=>750,65267=>250,65268=>271,65269=>513,65270=>537,65271=>513,65272=>537,65273=>513,65274=>537,65275=>513, +65276=>537,65279=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>923); +$enc=''; +$diff=''; +$file='dejavusanscondensed.z'; +$ctg='dejavusanscondensed.ctg.z'; +$originalsize=544636; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensed.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensed.z new file mode 100755 index 00000000..8198081c Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensed.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedb.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedb.ctg.z new file mode 100755 index 00000000..514062cc Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedb.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedb.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedb.php new file mode 100755 index 00000000..106aa8be --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedb.php @@ -0,0 +1,504 @@ +928,'Descent'=>-236,'CapHeight'=>17,'Flags'=>32,'FontBBox'=>'[-962 -385 1777 1174]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>313,33=>410,34=>469,35=>754,36=>626,37=>901,38=>785,39=>275,40=>411, +41=>411,42=>470,43=>754,44=>342,45=>374,46=>342,47=>329,48=>626,49=>626,50=>626, +51=>626,52=>626,53=>626,54=>626,55=>626,56=>626,57=>626,58=>360,59=>360,60=>754, +61=>754,62=>754,63=>522,64=>900,65=>696,66=>686,67=>660,68=>747,69=>615,70=>615, +71=>738,72=>753,73=>334,74=>334,75=>697,76=>573,77=>896,78=>753,79=>765,80=>659, +81=>765,82=>693,83=>648,84=>614,85=>730,86=>696,87=>993,88=>694,89=>651,90=>652, +91=>411,92=>329,93=>411,94=>754,95=>450,96=>450,97=>607,98=>644,99=>533,100=>644, +101=>610,102=>391,103=>644,104=>641,105=>308,106=>308,107=>598,108=>308,109=>938,110=>641, +111=>618,112=>644,113=>644,114=>444,115=>536,116=>430,117=>641,118=>586,119=>831,120=>580, +121=>586,122=>523,123=>641,124=>329,125=>641,126=>754,8364=>626,8218=>342,402=>391,8222=>591, +8230=>900,8224=>450,8225=>450,710=>450,8240=>1296,352=>648,8249=>371,338=>1050,381=>652,8216=>342, +8217=>342,8220=>591,8221=>591,8226=>575,8211=>450,8212=>900,732=>450,8482=>900,353=>536,8250=>371, +339=>984,382=>523,376=>651,160=>313,161=>410,162=>626,163=>626,164=>572,165=>626,166=>329, +167=>450,168=>450,169=>900,170=>507,171=>581,172=>754,173=>374,174=>900,175=>450,176=>450, +177=>754,178=>394,179=>394,180=>450,181=>662,182=>572,183=>342,184=>450,185=>394,186=>507, +187=>581,188=>932,189=>932,190=>932,191=>522,192=>696,193=>696,194=>696,195=>696,196=>696, +197=>696,198=>976,199=>660,200=>615,201=>615,202=>615,203=>615,204=>334,205=>334,206=>334, +207=>334,208=>754,209=>753,210=>765,211=>765,212=>765,213=>765,214=>765,215=>754,216=>765, +217=>730,218=>730,219=>730,220=>730,221=>651,222=>664,223=>647,224=>607,225=>607,226=>607, +227=>607,228=>607,229=>607,230=>943,231=>533,232=>610,233=>610,234=>610,235=>610,236=>308, +237=>308,238=>308,239=>308,240=>618,241=>641,242=>618,243=>618,244=>618,245=>618,246=>618, +247=>754,248=>618,249=>641,250=>641,251=>641,252=>641,253=>586,254=>644,255=>586,256=>696, +257=>607,258=>696,259=>607,260=>696,261=>607,262=>660,263=>533,264=>660,265=>533,266=>660, +267=>533,268=>660,269=>533,270=>747,271=>644,272=>754,273=>644,274=>615,275=>610,276=>615, +277=>610,278=>615,279=>610,280=>615,281=>610,282=>615,283=>610,284=>738,285=>644,286=>738, +287=>644,288=>738,289=>644,290=>738,291=>644,292=>753,293=>641,294=>876,295=>711,296=>334, +297=>308,298=>334,299=>308,300=>334,301=>308,302=>334,303=>308,304=>334,305=>308,306=>669, +307=>617,308=>334,309=>308,310=>697,311=>598,312=>598,313=>573,314=>308,315=>573,316=>308, +317=>573,318=>431,319=>573,320=>501,321=>578,322=>334,323=>753,324=>641,325=>753,326=>641, +327=>753,328=>641,329=>884,330=>753,331=>641,332=>765,333=>618,334=>765,335=>618,336=>765, +337=>618,340=>693,341=>444,342=>693,343=>444,344=>693,345=>444,346=>648,347=>536,348=>648, +349=>536,350=>648,351=>536,354=>614,355=>430,356=>614,357=>430,358=>614,359=>430,360=>730, +361=>641,362=>730,363=>641,364=>730,365=>641,366=>730,367=>641,368=>730,369=>641,370=>730, +371=>641,372=>993,373=>831,374=>651,375=>586,377=>652,378=>523,379=>652,380=>523,383=>391, +384=>644,385=>729,386=>686,387=>644,388=>686,389=>644,390=>660,391=>660,392=>533,393=>754, +394=>791,395=>681,396=>644,397=>619,398=>615,399=>764,400=>626,401=>615,403=>738,404=>713, +405=>940,406=>392,407=>350,408=>697,409=>598,410=>324,411=>532,412=>938,413=>753,414=>641, +415=>765,416=>786,417=>618,418=>974,419=>821,420=>703,421=>644,422=>693,423=>648,424=>536, +425=>615,426=>497,427=>430,428=>636,429=>430,430=>614,431=>751,432=>641,433=>765,434=>732, +435=>717,436=>700,437=>652,438=>523,439=>695,440=>695,441=>576,442=>523,443=>626,444=>695, +445=>576,446=>515,447=>644,448=>334,449=>593,450=>489,451=>334,452=>1399,453=>1271,454=>1168, +455=>908,456=>882,457=>617,458=>1088,459=>1062,460=>949,461=>696,462=>607,463=>334,464=>308, +465=>765,466=>618,467=>730,468=>641,469=>730,470=>641,471=>730,472=>641,473=>730,474=>641, +475=>730,476=>641,477=>610,478=>696,479=>607,480=>696,481=>607,482=>976,483=>943,484=>738, +485=>644,486=>738,487=>644,488=>697,489=>598,490=>765,491=>618,492=>765,493=>618,494=>695, +495=>523,496=>308,497=>1399,498=>1271,499=>1168,500=>738,501=>644,502=>1160,503=>708,504=>753, +505=>641,506=>696,507=>607,508=>976,509=>943,510=>765,511=>618,512=>696,513=>607,514=>696, +515=>607,516=>615,517=>610,518=>615,519=>610,520=>334,521=>308,522=>334,523=>308,524=>765, +525=>618,526=>765,527=>618,528=>693,529=>444,530=>693,531=>444,532=>730,533=>641,534=>730, +535=>641,536=>648,537=>536,538=>614,539=>430,540=>621,541=>546,542=>753,543=>641,544=>753, +545=>778,546=>728,547=>593,548=>652,549=>523,550=>696,551=>607,552=>615,553=>610,554=>765, +555=>618,556=>765,557=>618,558=>765,559=>618,560=>765,561=>618,562=>651,563=>586,564=>442, +565=>780,566=>460,567=>308,568=>979,569=>979,570=>696,571=>660,572=>533,573=>573,574=>614, +575=>536,576=>523,577=>703,578=>553,579=>686,580=>730,581=>696,582=>615,583=>610,584=>334, +585=>308,586=>774,587=>712,588=>693,589=>444,590=>651,591=>586,592=>607,593=>644,594=>644, +595=>644,596=>533,597=>533,598=>645,599=>712,600=>610,601=>610,602=>788,603=>501,604=>490, +605=>733,606=>658,607=>308,608=>712,609=>644,610=>564,611=>579,612=>571,613=>641,614=>641, +615=>641,616=>491,617=>396,618=>491,619=>502,620=>624,621=>308,622=>757,623=>938,624=>938, +625=>938,626=>641,627=>713,628=>636,629=>618,630=>817,631=>613,632=>716,633=>484,634=>484, +635=>584,636=>444,637=>444,638=>536,639=>536,640=>578,641=>578,642=>536,643=>374,644=>391, +645=>544,646=>497,647=>430,648=>430,649=>828,650=>695,651=>603,652=>586,653=>831,654=>586, +655=>651,656=>624,657=>615,658=>576,659=>576,660=>515,661=>515,662=>515,663=>515,664=>765, +665=>569,666=>658,667=>616,668=>622,669=>308,670=>659,671=>485,672=>712,673=>515,674=>515, +675=>1040,676=>1093,677=>1039,678=>876,679=>691,680=>836,681=>923,682=>712,683=>702,684=>532, +685=>374,686=>609,687=>710,688=>410,689=>410,690=>197,691=>284,692=>284,693=>284,694=>369, +695=>532,696=>375,697=>271,698=>469,699=>342,700=>342,701=>342,702=>330,703=>330,704=>293, +705=>293,706=>450,707=>450,708=>450,709=>450,711=>450,712=>275,713=>450,714=>450,715=>450, +716=>275,717=>450,718=>450,719=>450,720=>303,721=>303,722=>330,723=>330,724=>450,725=>450, +726=>374,727=>295,728=>450,729=>450,730=>450,731=>450,733=>450,734=>315,735=>450,736=>370, +737=>197,738=>343,739=>371,740=>293,741=>450,742=>450,743=>450,744=>450,745=>450,748=>450, +749=>450,750=>591,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>628,881=>508,882=>919, +883=>752,884=>271,885=>271,886=>753,887=>630,890=>450,891=>533,892=>495,893=>494,894=>360, +900=>397,901=>450,902=>717,903=>342,904=>761,905=>908,906=>507,908=>801,910=>882,911=>804, +912=>351,913=>696,914=>686,915=>573,916=>696,917=>615,918=>652,919=>753,920=>765,921=>334, +922=>697,923=>696,924=>896,925=>753,926=>568,927=>765,928=>753,929=>659,931=>615,932=>614, +933=>651,934=>765,935=>694,936=>765,937=>765,938=>334,939=>651,940=>618,941=>501,942=>641, +943=>351,944=>607,945=>618,946=>644,947=>613,948=>618,949=>501,950=>532,951=>641,952=>618, +953=>351,954=>639,955=>569,956=>662,957=>613,958=>532,959=>618,960=>712,961=>644,962=>533, +963=>701,964=>574,965=>607,966=>704,967=>580,968=>714,969=>782,970=>351,971=>607,972=>618, +973=>607,974=>782,975=>697,976=>585,977=>594,978=>671,979=>883,980=>671,981=>716,982=>782, +983=>669,984=>765,985=>618,986=>660,987=>533,988=>615,989=>444,990=>632,991=>593,992=>827, +993=>564,994=>983,995=>753,996=>749,997=>644,998=>835,999=>669,1000=>660,1001=>585,1002=>709, +1003=>604,1004=>677,1005=>644,1006=>614,1007=>531,1008=>669,1009=>644,1010=>533,1011=>308,1012=>765, +1013=>580,1014=>580,1015=>664,1016=>644,1017=>660,1018=>896,1019=>659,1020=>644,1021=>628,1022=>660, +1023=>628,1024=>615,1025=>615,1026=>791,1027=>573,1028=>660,1029=>648,1030=>334,1031=>334,1032=>334, +1033=>1039,1034=>1017,1035=>791,1036=>735,1037=>753,1038=>694,1039=>753,1040=>696,1041=>686,1042=>686, +1043=>573,1044=>801,1045=>615,1046=>1102,1047=>639,1048=>753,1049=>753,1050=>735,1051=>747,1052=>896, +1053=>753,1054=>765,1055=>753,1056=>659,1057=>660,1058=>614,1059=>694,1060=>892,1061=>694,1062=>835, +1063=>727,1064=>1112,1065=>1193,1066=>845,1067=>932,1068=>686,1069=>660,1070=>1056,1071=>693,1072=>607, +1073=>628,1074=>569,1075=>470,1076=>727,1077=>610,1078=>896,1079=>523,1080=>630,1081=>630,1082=>611, +1083=>659,1084=>735,1085=>622,1086=>618,1087=>622,1088=>644,1089=>533,1090=>521,1091=>586,1092=>893, +1093=>580,1094=>667,1095=>618,1096=>956,1097=>995,1098=>676,1099=>813,1100=>569,1101=>533,1102=>875, +1103=>578,1104=>610,1105=>610,1106=>642,1107=>470,1108=>533,1109=>536,1110=>308,1111=>308,1112=>308, +1113=>892,1114=>860,1115=>661,1116=>611,1117=>630,1118=>586,1119=>622,1120=>983,1121=>782,1122=>756, +1123=>662,1124=>911,1125=>755,1126=>893,1127=>749,1128=>1222,1129=>1009,1130=>765,1131=>618,1132=>1112, +1133=>906,1134=>626,1135=>501,1136=>967,1137=>955,1138=>765,1139=>618,1140=>765,1141=>625,1142=>765, +1143=>625,1144=>1033,1145=>939,1146=>967,1147=>776,1148=>1265,1149=>1055,1150=>983,1151=>782,1152=>660, +1153=>533,1154=>587,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>376,1161=>376,1162=>861, +1163=>726,1164=>686,1165=>550,1166=>659,1167=>644,1168=>573,1169=>470,1170=>599,1171=>488,1172=>727, +1173=>602,1174=>1102,1175=>896,1176=>639,1177=>523,1178=>697,1179=>611,1180=>735,1181=>611,1182=>735, +1183=>611,1184=>914,1185=>743,1186=>860,1187=>727,1188=>992,1189=>787,1190=>1146,1191=>915,1192=>856, +1193=>772,1194=>660,1195=>533,1196=>614,1197=>521,1198=>651,1199=>586,1200=>651,1201=>586,1202=>694, +1203=>580,1204=>1001,1205=>900,1206=>727,1207=>618,1208=>727,1209=>618,1210=>727,1211=>641,1212=>923, +1213=>729,1214=>923,1215=>729,1216=>334,1217=>1102,1218=>896,1219=>697,1220=>567,1221=>855,1222=>725, +1223=>753,1224=>622,1225=>861,1226=>726,1227=>727,1228=>618,1229=>1003,1230=>839,1231=>308,1232=>696, +1233=>607,1234=>696,1235=>607,1236=>976,1237=>943,1238=>615,1239=>610,1240=>764,1241=>610,1242=>764, +1243=>610,1244=>1102,1245=>896,1246=>639,1247=>523,1248=>695,1249=>576,1250=>753,1251=>630,1252=>753, +1253=>630,1254=>765,1255=>618,1256=>765,1257=>618,1258=>765,1259=>618,1260=>660,1261=>533,1262=>694, +1263=>586,1264=>694,1265=>586,1266=>694,1267=>586,1268=>727,1269=>618,1270=>573,1271=>470,1272=>932, +1273=>813,1274=>599,1275=>488,1276=>694,1277=>580,1278=>694,1279=>580,1280=>686,1281=>547,1282=>1043, +1283=>804,1284=>1007,1285=>828,1286=>745,1287=>624,1288=>1117,1289=>915,1290=>1160,1291=>912,1292=>755, +1293=>574,1294=>844,1295=>722,1296=>626,1297=>501,1298=>747,1299=>659,1300=>1157,1301=>961,1302=>958, +1303=>881,1304=>973,1305=>912,1306=>765,1307=>644,1308=>993,1309=>831,1312=>1140,1313=>953,1314=>1146, +1315=>915,1316=>861,1317=>726,1329=>886,1330=>730,1331=>886,1332=>886,1333=>730,1334=>699,1335=>730, +1336=>730,1337=>877,1338=>886,1339=>730,1340=>639,1341=>970,1342=>1022,1343=>730,1344=>639,1345=>681, +1346=>886,1347=>789,1348=>886,1349=>714,1350=>886,1351=>730,1352=>730,1353=>730,1354=>862,1355=>699, +1356=>886,1357=>730,1358=>886,1359=>648,1360=>730,1361=>714,1362=>805,1363=>765,1364=>842,1365=>765, +1366=>648,1369=>330,1370=>342,1371=>495,1372=>495,1373=>342,1374=>491,1375=>468,1377=>938,1378=>641, +1379=>779,1380=>781,1381=>641,1382=>735,1383=>588,1384=>641,1385=>729,1386=>735,1387=>641,1388=>448, +1389=>916,1390=>644,1391=>641,1392=>641,1393=>644,1394=>737,1395=>641,1396=>676,1397=>308,1398=>794, +1399=>502,1400=>641,1401=>502,1402=>938,1403=>502,1404=>777,1405=>641,1406=>732,1407=>938,1408=>641, +1409=>644,1410=>514,1411=>938,1412=>700,1413=>618,1414=>648,1415=>776,1417=>360,1418=>438,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>374,1471=>0,1472=>334,1473=>0,1474=>0,1475=>334,1478=>447, +1479=>0,1488=>676,1489=>605,1490=>483,1491=>589,1492=>641,1493=>308,1494=>442,1495=>641,1496=>651, +1497=>308,1498=>584,1499=>584,1500=>611,1501=>641,1502=>698,1503=>308,1504=>447,1505=>696,1506=>610, +1507=>646,1508=>618,1509=>565,1510=>676,1511=>656,1512=>584,1513=>854,1514=>676,1520=>598,1521=>598, +1522=>597,1523=>399,1524=>639,1542=>600,1543=>600,1545=>795,1546=>1042,1548=>342,1557=>0,1563=>360, +1567=>522,1569=>460,1570=>308,1571=>308,1572=>559,1573=>308,1574=>825,1575=>308,1576=>904,1577=>531, +1578=>904,1579=>904,1580=>648,1581=>648,1582=>648,1583=>461,1584=>461,1585=>518,1586=>518,1587=>1242, +1588=>1242,1589=>1210,1590=>1210,1591=>935,1592=>935,1593=>615,1594=>615,1600=>308,1601=>1045,1602=>804, +1603=>825,1604=>781,1605=>659,1606=>768,1607=>531,1608=>559,1609=>825,1610=>825,1611=>0,1612=>0, +1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1626=>450, +1632=>549,1633=>549,1634=>549,1635=>549,1636=>549,1637=>549,1638=>549,1639=>549,1640=>549,1641=>549, +1642=>549,1643=>336,1644=>342,1645=>490,1646=>904,1647=>804,1652=>263,1657=>904,1658=>904,1659=>904, +1660=>904,1661=>904,1662=>904,1663=>904,1664=>904,1665=>648,1666=>648,1667=>648,1668=>648,1669=>648, +1670=>648,1671=>648,1681=>518,1682=>518,1685=>613,1688=>518,1697=>1045,1700=>1045,1702=>1045,1705=>921, +1711=>921,1717=>781,1722=>768,1727=>648,1734=>559,1740=>825,1742=>825,1749=>531,1776=>549,1777=>549, +1778=>549,1779=>549,1780=>549,1781=>549,1782=>549,1783=>549,1784=>549,1785=>549,1984=>626,1985=>626, +1986=>626,1987=>626,1988=>626,1989=>626,1990=>626,1991=>626,1992=>626,1993=>626,1994=>308,1995=>492, +1996=>489,1997=>586,1998=>622,1999=>622,2000=>534,2001=>622,2002=>813,2003=>496,2004=>496,2005=>564, +2006=>619,2007=>399,2008=>920,2009=>456,2010=>743,2011=>622,2012=>586,2013=>821,2014=>564,2015=>636, +2016=>456,2017=>586,2018=>517,2019=>564,2020=>564,2021=>564,2022=>517,2023=>517,2027=>0,2028=>0, +2029=>0,2030=>0,2031=>0,2032=>0,2033=>0,2034=>0,2035=>0,2036=>342,2037=>342,2040=>622, +2041=>622,2042=>374,3647=>668,3713=>710,3714=>673,3716=>674,3719=>512,3720=>668,3722=>669,3725=>685, +3732=>635,3733=>633,3734=>672,3735=>737,3737=>657,3738=>654,3739=>654,3740=>830,3741=>744,3742=>779, +3743=>779,3745=>752,3746=>685,3747=>692,3749=>691,3751=>642,3754=>744,3755=>928,3757=>651,3758=>705, +3759=>840,3760=>620,3761=>0,3762=>549,3763=>549,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0, +3769=>0,3771=>0,3772=>0,3773=>603,3776=>464,3777=>774,3778=>464,3779=>584,3780=>569,3782=>683, +3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>694,3793=>694,3794=>624,3795=>752, +3796=>655,3797=>655,3798=>764,3799=>710,3800=>683,3801=>818,3804=>1227,3805=>1227,4256=>826,4257=>669, +4258=>665,4259=>753,4260=>584,4261=>696,4262=>771,4263=>800,4264=>477,4265=>570,4266=>771,4267=>810, +4268=>579,4269=>813,4270=>732,4271=>677,4272=>782,4273=>579,4274=>579,4275=>797,4276=>797,4277=>660, +4278=>587,4279=>579,4280=>582,4281=>579,4282=>710,4283=>812,4284=>570,4285=>557,4286=>579,4287=>700, +4288=>802,4289=>541,4290=>668,4291=>554,4292=>570,4293=>668,4304=>497,4305=>497,4306=>536,4307=>734, +4308=>505,4309=>506,4310=>497,4311=>744,4312=>497,4313=>488,4314=>967,4315=>506,4316=>507,4317=>730, +4318=>497,4319=>532,4320=>740,4321=>506,4322=>621,4323=>525,4324=>732,4325=>505,4326=>731,4327=>506, +4328=>506,4329=>507,4330=>568,4331=>506,4332=>506,4333=>497,4334=>506,4335=>506,4336=>501,4337=>543, +4338=>497,4339=>497,4340=>497,4341=>544,4342=>767,4343=>571,4344=>506,4345=>536,4346=>487,4347=>615, +4348=>331,5121=>696,5122=>696,5123=>696,5124=>696,5125=>814,5126=>814,5127=>814,5129=>814,5130=>814, +5131=>814,5132=>916,5133=>908,5134=>916,5135=>908,5136=>916,5137=>908,5138=>1034,5139=>1025,5140=>1034, +5141=>1025,5142=>814,5143=>1034,5144=>1028,5145=>1034,5146=>1028,5147=>814,5149=>278,5150=>476,5151=>382, +5152=>382,5153=>355,5154=>355,5155=>355,5156=>355,5157=>507,5158=>423,5159=>278,5160=>355,5161=>355, +5162=>355,5163=>1092,5164=>888,5165=>1094,5166=>1167,5167=>696,5168=>696,5169=>696,5170=>696,5171=>797, +5172=>797,5173=>797,5175=>797,5176=>797,5177=>797,5178=>916,5179=>908,5180=>916,5181=>908,5182=>916, +5183=>908,5184=>1034,5185=>1025,5186=>1034,5187=>1025,5188=>1034,5189=>1028,5190=>1034,5191=>1028,5192=>797, +5193=>518,5194=>206,5196=>730,5197=>730,5198=>730,5199=>730,5200=>734,5201=>734,5202=>734,5204=>734, +5205=>734,5206=>734,5207=>950,5208=>943,5209=>950,5210=>943,5211=>950,5212=>943,5213=>954,5214=>949, +5215=>954,5216=>949,5217=>954,5218=>946,5219=>954,5220=>946,5221=>954,5222=>435,5223=>904,5224=>904, +5225=>921,5226=>915,5227=>668,5228=>668,5229=>668,5230=>668,5231=>668,5232=>668,5233=>668,5234=>668, +5235=>668,5236=>926,5237=>877,5238=>882,5239=>877,5240=>882,5241=>877,5242=>926,5243=>877,5244=>926, +5245=>877,5246=>882,5247=>877,5248=>882,5249=>877,5250=>882,5251=>451,5252=>451,5253=>844,5254=>844, +5255=>844,5256=>844,5257=>668,5258=>668,5259=>668,5260=>668,5261=>668,5262=>668,5263=>668,5264=>668, +5265=>668,5266=>926,5267=>877,5268=>926,5269=>877,5270=>926,5271=>877,5272=>926,5273=>877,5274=>926, +5275=>877,5276=>926,5277=>877,5278=>926,5279=>877,5280=>926,5281=>451,5282=>451,5283=>563,5284=>563, +5285=>563,5286=>563,5287=>563,5288=>563,5289=>563,5290=>563,5291=>563,5292=>793,5293=>769,5294=>777, +5295=>786,5296=>777,5297=>786,5298=>793,5299=>786,5300=>793,5301=>786,5302=>777,5303=>786,5304=>777, +5305=>786,5306=>777,5307=>392,5308=>493,5309=>392,5312=>889,5313=>889,5314=>889,5315=>889,5316=>838, +5317=>838,5318=>838,5319=>838,5320=>838,5321=>1114,5322=>1122,5323=>1080,5324=>1105,5325=>1080,5326=>1105, +5327=>838,5328=>593,5329=>447,5330=>593,5331=>889,5332=>889,5333=>889,5334=>889,5335=>838,5336=>838, +5337=>838,5338=>838,5339=>838,5340=>1107,5341=>1122,5342=>1155,5343=>1105,5344=>1155,5345=>1105,5346=>1105, +5347=>1093,5348=>1105,5349=>1093,5350=>1155,5351=>1105,5352=>1155,5353=>1105,5354=>593,5356=>797,5357=>657, +5358=>657,5359=>657,5360=>657,5361=>657,5362=>657,5363=>657,5364=>657,5365=>657,5366=>897,5367=>862, +5368=>870,5369=>890,5370=>870,5371=>890,5372=>897,5373=>862,5374=>897,5375=>862,5376=>870,5377=>890, +5378=>870,5379=>890,5380=>870,5381=>443,5382=>414,5383=>443,5392=>831,5393=>831,5394=>831,5395=>1022, +5396=>1022,5397=>1022,5398=>1022,5399=>1088,5400=>1081,5401=>1088,5402=>1081,5403=>1088,5404=>1081,5405=>1288, +5406=>1278,5407=>1288,5408=>1278,5409=>1288,5410=>1278,5411=>1288,5412=>1278,5413=>671,5414=>698,5415=>698, +5416=>698,5417=>698,5418=>698,5419=>698,5420=>698,5421=>698,5422=>698,5423=>902,5424=>903,5425=>911, +5426=>896,5427=>911,5428=>896,5429=>902,5430=>903,5431=>902,5432=>903,5433=>911,5434=>896,5435=>911, +5436=>896,5437=>911,5438=>445,5440=>355,5441=>458,5442=>929,5443=>929,5444=>878,5445=>878,5446=>878, +5447=>878,5448=>659,5449=>659,5450=>659,5451=>659,5452=>659,5453=>659,5454=>902,5455=>863,5456=>445, +5458=>797,5459=>696,5460=>696,5461=>696,5462=>696,5463=>835,5464=>835,5465=>835,5466=>835,5467=>1055, +5468=>1028,5469=>542,5470=>730,5471=>730,5472=>730,5473=>730,5474=>730,5475=>730,5476=>734,5477=>734, +5478=>734,5479=>734,5480=>954,5481=>946,5482=>493,5492=>879,5493=>879,5494=>879,5495=>879,5496=>879, +5497=>879,5498=>879,5499=>556,5500=>753,5501=>458,5502=>1114,5503=>1114,5504=>1114,5505=>1114,5506=>1114, +5507=>1114,5508=>1114,5509=>890,5514=>879,5515=>879,5516=>879,5517=>879,5518=>1432,5519=>1432,5520=>1432, +5521=>1165,5522=>1165,5523=>1432,5524=>1432,5525=>763,5526=>1146,5536=>889,5537=>889,5538=>838,5539=>838, +5540=>838,5541=>838,5542=>593,5543=>698,5544=>698,5545=>698,5546=>698,5547=>698,5548=>698,5549=>698, +5550=>445,5551=>668,5598=>747,5601=>747,5702=>446,5703=>446,5742=>371,5743=>1114,5744=>1432,5745=>1814, +5746=>1814,5747=>1548,5748=>1510,5749=>1814,5750=>1814,5760=>489,5761=>573,5762=>851,5763=>1128,5764=>1406, +5765=>1684,5766=>564,5767=>842,5768=>1128,5769=>1403,5770=>1684,5771=>512,5772=>789,5773=>1068,5774=>1347, +5775=>1626,5776=>573,5777=>851,5778=>1116,5779=>1399,5780=>1684,5781=>512,5782=>512,5783=>709,5784=>1110, +5785=>1403,5786=>666,5787=>574,5788=>574,7424=>586,7425=>750,7426=>943,7427=>547,7428=>533,7429=>608, +7430=>608,7431=>502,7432=>501,7433=>308,7434=>444,7435=>598,7436=>485,7437=>735,7438=>630,7439=>618, +7440=>533,7441=>594,7442=>594,7443=>594,7444=>984,7446=>618,7447=>618,7448=>500,7449=>578,7450=>578, +7451=>521,7452=>571,7453=>663,7454=>853,7455=>625,7456=>586,7457=>831,7458=>523,7459=>581,7462=>485, +7463=>586,7464=>622,7465=>500,7466=>703,7467=>659,7468=>438,7469=>615,7470=>432,7472=>470,7473=>387, +7474=>387,7475=>465,7476=>474,7477=>211,7478=>211,7479=>439,7480=>361,7481=>563,7482=>474,7483=>474, +7484=>481,7485=>458,7486=>415,7487=>436,7488=>387,7489=>460,7490=>625,7491=>412,7492=>412,7493=>431, +7494=>641,7495=>431,7496=>431,7497=>431,7498=>431,7499=>347,7500=>347,7501=>431,7502=>197,7503=>438, +7504=>597,7505=>410,7506=>439,7507=>372,7508=>439,7509=>439,7510=>431,7511=>349,7512=>410,7513=>416, +7514=>597,7515=>451,7517=>405,7518=>386,7519=>389,7520=>443,7521=>365,7522=>197,7523=>284,7524=>410, +7525=>451,7526=>405,7527=>386,7528=>405,7529=>443,7530=>365,7543=>644,7544=>474,7547=>491,7557=>462, +7579=>431,7580=>372,7581=>372,7582=>439,7583=>347,7584=>339,7585=>313,7586=>431,7587=>410,7588=>312, +7589=>253,7590=>312,7591=>312,7592=>388,7593=>293,7594=>296,7595=>333,7596=>598,7597=>597,7598=>505, +7599=>505,7600=>403,7601=>439,7602=>488,7603=>379,7604=>356,7605=>349,7606=>524,7607=>444,7608=>359, +7609=>405,7610=>451,7611=>375,7612=>471,7613=>422,7614=>409,7615=>382,7620=>0,7621=>0,7622=>0, +7623=>0,7624=>0,7625=>0,7680=>696,7681=>607,7682=>686,7683=>644,7684=>686,7685=>644,7686=>686, +7687=>644,7688=>660,7689=>533,7690=>747,7691=>644,7692=>747,7693=>644,7694=>747,7695=>644,7696=>747, +7697=>644,7698=>747,7699=>644,7700=>615,7701=>610,7702=>615,7703=>610,7704=>615,7705=>610,7706=>615, +7707=>610,7708=>615,7709=>610,7710=>615,7711=>391,7712=>738,7713=>644,7714=>753,7715=>641,7716=>753, +7717=>641,7718=>753,7719=>641,7720=>753,7721=>641,7722=>753,7723=>641,7724=>334,7725=>308,7726=>334, +7727=>308,7728=>697,7729=>598,7730=>697,7731=>598,7732=>697,7733=>598,7734=>573,7735=>308,7736=>573, +7737=>308,7738=>573,7739=>308,7740=>573,7741=>308,7742=>896,7743=>938,7744=>896,7745=>938,7746=>896, +7747=>938,7748=>753,7749=>641,7750=>753,7751=>641,7752=>753,7753=>641,7754=>753,7755=>641,7756=>765, +7757=>618,7758=>765,7759=>618,7760=>765,7761=>618,7762=>765,7763=>618,7764=>659,7765=>644,7766=>659, +7767=>644,7768=>693,7769=>444,7770=>693,7771=>444,7772=>693,7773=>444,7774=>693,7775=>444,7776=>648, +7777=>536,7778=>648,7779=>536,7780=>648,7781=>536,7782=>648,7783=>536,7784=>648,7785=>536,7786=>614, +7787=>430,7788=>614,7789=>430,7790=>614,7791=>430,7792=>614,7793=>430,7794=>730,7795=>641,7796=>730, +7797=>641,7798=>730,7799=>641,7800=>730,7801=>641,7802=>730,7803=>641,7804=>696,7805=>586,7806=>696, +7807=>586,7808=>993,7809=>831,7810=>993,7811=>831,7812=>993,7813=>831,7814=>993,7815=>831,7816=>993, +7817=>831,7818=>694,7819=>580,7820=>694,7821=>580,7822=>651,7823=>586,7824=>652,7825=>523,7826=>652, +7827=>523,7828=>652,7829=>523,7830=>641,7831=>430,7832=>831,7833=>586,7834=>607,7835=>391,7838=>806, +7839=>618,7840=>696,7841=>607,7842=>696,7843=>607,7844=>696,7845=>607,7846=>696,7847=>607,7848=>696, +7849=>607,7850=>696,7851=>607,7852=>696,7853=>607,7854=>696,7855=>607,7856=>696,7857=>607,7858=>696, +7859=>607,7860=>696,7861=>607,7862=>696,7863=>607,7864=>615,7865=>610,7866=>615,7867=>610,7868=>615, +7869=>610,7870=>615,7871=>610,7872=>615,7873=>610,7874=>615,7875=>610,7876=>615,7877=>610,7878=>615, +7879=>610,7880=>334,7881=>308,7882=>334,7883=>308,7884=>765,7885=>618,7886=>765,7887=>618,7888=>765, +7889=>618,7890=>765,7891=>618,7892=>765,7893=>618,7894=>765,7895=>618,7896=>765,7897=>618,7898=>786, +7899=>618,7900=>786,7901=>618,7902=>786,7903=>618,7904=>786,7905=>618,7906=>786,7907=>618,7908=>730, +7909=>641,7910=>730,7911=>641,7912=>751,7913=>641,7914=>751,7915=>641,7916=>751,7917=>641,7918=>751, +7919=>641,7920=>751,7921=>641,7922=>651,7923=>586,7924=>651,7925=>586,7926=>651,7927=>586,7928=>651, +7929=>586,7936=>618,7937=>618,7938=>618,7939=>618,7940=>618,7941=>618,7942=>618,7943=>618,7944=>696, +7945=>696,7946=>937,7947=>939,7948=>841,7949=>866,7950=>751,7951=>773,7952=>501,7953=>501,7954=>501, +7955=>501,7956=>501,7957=>501,7960=>712,7961=>715,7962=>989,7963=>986,7964=>920,7965=>947,7968=>641, +7969=>641,7970=>641,7971=>641,7972=>641,7973=>641,7974=>641,7975=>641,7976=>851,7977=>856,7978=>1125, +7979=>1125,7980=>1062,7981=>1085,7982=>948,7983=>956,7984=>351,7985=>351,7986=>351,7987=>351,7988=>351, +7989=>351,7990=>351,7991=>351,7992=>435,7993=>440,7994=>699,7995=>707,7996=>641,7997=>664,7998=>544, +7999=>544,8000=>618,8001=>618,8002=>618,8003=>618,8004=>618,8005=>618,8008=>802,8009=>839,8010=>1099, +8011=>1101,8012=>947,8013=>974,8016=>607,8017=>607,8018=>607,8019=>607,8020=>607,8021=>607,8022=>607, +8023=>607,8025=>837,8027=>1065,8029=>1079,8031=>944,8032=>782,8033=>782,8034=>782,8035=>782,8036=>782, +8037=>782,8038=>782,8039=>782,8040=>817,8041=>862,8042=>1121,8043=>1126,8044=>968,8045=>994,8046=>925, +8047=>968,8048=>618,8049=>618,8050=>501,8051=>501,8052=>641,8053=>641,8054=>351,8055=>351,8056=>618, +8057=>618,8058=>607,8059=>607,8060=>782,8061=>782,8064=>618,8065=>618,8066=>618,8067=>618,8068=>618, +8069=>618,8070=>618,8071=>618,8072=>696,8073=>696,8074=>937,8075=>939,8076=>841,8077=>866,8078=>751, +8079=>773,8080=>641,8081=>641,8082=>641,8083=>641,8084=>641,8085=>641,8086=>641,8087=>641,8088=>851, +8089=>856,8090=>1125,8091=>1125,8092=>1062,8093=>1085,8094=>948,8095=>956,8096=>782,8097=>782,8098=>782, +8099=>782,8100=>782,8101=>782,8102=>782,8103=>782,8104=>817,8105=>862,8106=>1121,8107=>1126,8108=>968, +8109=>994,8110=>925,8111=>968,8112=>618,8113=>618,8114=>618,8115=>618,8116=>618,8118=>618,8119=>618, +8120=>696,8121=>696,8122=>789,8123=>717,8124=>696,8125=>450,8126=>450,8127=>450,8128=>450,8129=>450, +8130=>641,8131=>641,8132=>641,8134=>641,8135=>641,8136=>836,8137=>761,8138=>972,8139=>908,8140=>753, +8141=>450,8142=>450,8143=>450,8144=>351,8145=>351,8146=>351,8147=>351,8150=>351,8151=>351,8152=>334, +8153=>334,8154=>559,8155=>507,8157=>450,8158=>450,8159=>450,8160=>607,8161=>607,8162=>607,8163=>607, +8164=>644,8165=>644,8166=>607,8167=>607,8168=>651,8169=>651,8170=>918,8171=>882,8172=>754,8173=>450, +8174=>450,8175=>450,8178=>782,8179=>782,8180=>782,8182=>782,8183=>782,8184=>958,8185=>801,8186=>976, +8187=>804,8188=>765,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296,8197=>225, +8198=>150,8199=>626,8200=>342,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0, +8208=>374,8209=>374,8210=>626,8213=>900,8214=>450,8215=>450,8219=>342,8223=>591,8227=>575,8228=>299, +8229=>600,8231=>313,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180,8241=>1698,8242=>237, +8243=>402,8244=>567,8245=>237,8246=>402,8247=>567,8248=>659,8251=>875,8252=>564,8253=>522,8254=>450, +8255=>745,8256=>745,8257=>296,8258=>920,8259=>450,8260=>150,8261=>411,8262=>411,8263=>927,8264=>746, +8265=>746,8266=>461,8267=>572,8268=>450,8269=>450,8270=>470,8271=>360,8272=>745,8273=>470,8274=>500, +8275=>900,8276=>745,8277=>754,8278=>615,8279=>731,8280=>754,8281=>754,8282=>342,8283=>784,8284=>754, +8285=>342,8286=>342,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0, +8300=>0,8301=>0,8302=>0,8303=>0,8304=>394,8305=>197,8308=>394,8309=>394,8310=>394,8311=>394, +8312=>394,8313=>394,8314=>475,8315=>475,8316=>475,8317=>259,8318=>259,8319=>410,8320=>394,8321=>394, +8322=>394,8323=>394,8324=>394,8325=>394,8326=>394,8327=>394,8328=>394,8329=>394,8330=>475,8331=>475, +8332=>475,8333=>259,8334=>259,8336=>412,8337=>431,8338=>439,8339=>371,8340=>431,8352=>836,8353=>626, +8354=>626,8355=>626,8356=>626,8357=>938,8358=>753,8359=>1366,8360=>1084,8361=>993,8362=>813,8363=>626, +8365=>626,8366=>614,8367=>1252,8368=>626,8369=>626,8370=>626,8371=>626,8372=>773,8373=>626,8400=>0, +8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>1007,8449=>1053,8450=>660,8451=>1090, +8452=>806,8453=>982,8454=>1029,8455=>553,8456=>628,8457=>978,8459=>965,8460=>822,8461=>799,8462=>641, +8463=>641,8464=>537,8465=>627,8466=>771,8467=>424,8468=>876,8469=>753,8470=>1083,8471=>900,8472=>627, +8473=>675,8474=>765,8475=>844,8476=>732,8477=>721,8478=>807,8479=>639,8480=>917,8481=>1152,8483=>679, +8484=>679,8485=>520,8486=>765,8487=>765,8488=>686,8489=>304,8490=>697,8491=>696,8492=>835,8493=>736, +8494=>769,8495=>572,8496=>656,8497=>727,8498=>615,8499=>1065,8500=>418,8501=>714,8502=>658,8503=>444, +8504=>615,8505=>342,8506=>851,8507=>1213,8508=>710,8509=>663,8510=>589,8511=>776,8512=>756,8513=>697, +8514=>501,8515=>573,8516=>684,8517=>747,8518=>644,8519=>610,8520=>308,8521=>308,8523=>785,8526=>492, +8531=>932,8532=>932,8533=>932,8534=>932,8535=>932,8536=>932,8537=>932,8538=>932,8539=>932,8540=>932, +8541=>932,8542=>932,8543=>554,8544=>334,8545=>593,8546=>851,8547=>989,8548=>696,8549=>989,8550=>1247, +8551=>1505,8552=>1008,8553=>694,8554=>1008,8555=>1266,8556=>573,8557=>660,8558=>747,8559=>896,8560=>308, +8561=>546,8562=>785,8563=>885,8564=>586,8565=>866,8566=>1104,8567=>1342,8568=>872,8569=>580,8570=>872, +8571=>1110,8572=>308,8573=>533,8574=>644,8575=>938,8576=>1160,8577=>747,8578=>1160,8579=>660,8580=>533, +8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754, +8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754, +8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754, +8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754, +8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754, +8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754, +8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754, +8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754, +8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754, +8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754, +8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754, +8702=>754,8703=>754,8704=>696,8705=>626,8706=>489,8707=>615,8708=>615,8709=>771,8710=>627,8711=>627, +8712=>807,8713=>807,8714=>675,8715=>807,8716=>807,8717=>675,8718=>572,8719=>708,8720=>708,8721=>646, +8722=>754,8723=>754,8724=>626,8725=>329,8726=>626,8727=>754,8728=>563,8729=>342,8730=>600,8731=>600, +8732=>600,8733=>641,8734=>750,8735=>754,8736=>807,8737=>807,8738=>754,8739=>450,8740=>450,8741=>450, +8742=>450,8743=>730,8744=>730,8745=>730,8746=>730,8747=>549,8748=>835,8749=>1165,8750=>506,8751=>879, +8752=>1181,8753=>506,8754=>506,8755=>506,8756=>626,8757=>626,8758=>264,8759=>626,8760=>754,8761=>754, +8762=>754,8763=>754,8764=>754,8765=>754,8766=>754,8767=>754,8768=>337,8769=>754,8770=>754,8771=>754, +8772=>754,8773=>754,8774=>754,8775=>754,8776=>754,8777=>754,8778=>754,8779=>754,8780=>754,8781=>754, +8782=>754,8783=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>956,8789=>956,8790=>754,8791=>754, +8792=>754,8793=>754,8794=>754,8795=>754,8796=>754,8797=>754,8798=>754,8799=>754,8800=>754,8801=>754, +8802=>754,8803=>754,8804=>754,8805=>754,8806=>754,8807=>754,8808=>756,8809=>756,8810=>942,8811=>942, +8812=>450,8813=>754,8814=>754,8815=>754,8816=>754,8817=>754,8818=>754,8819=>754,8820=>754,8821=>754, +8822=>754,8823=>754,8824=>754,8825=>754,8826=>754,8827=>754,8828=>754,8829=>754,8830=>754,8831=>754, +8832=>754,8833=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8840=>754,8841=>754, +8842=>754,8843=>754,8844=>730,8845=>730,8846=>730,8847=>754,8848=>754,8849=>754,8850=>754,8851=>716, +8852=>716,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754, +8862=>754,8863=>754,8864=>754,8865=>754,8866=>822,8867=>822,8868=>822,8869=>822,8870=>488,8871=>488, +8872=>822,8873=>822,8874=>822,8875=>822,8876=>822,8877=>822,8878=>822,8879=>822,8880=>754,8881=>754, +8882=>754,8883=>754,8884=>754,8885=>754,8886=>900,8887=>900,8888=>754,8889=>754,8890=>488,8891=>730, +8892=>730,8893=>730,8894=>754,8895=>754,8896=>758,8897=>758,8898=>758,8899=>758,8900=>444,8901=>342, +8902=>563,8903=>754,8904=>900,8905=>900,8906=>900,8907=>900,8908=>900,8909=>754,8910=>730,8911=>730, +8912=>754,8913=>754,8914=>754,8915=>754,8916=>754,8917=>754,8918=>754,8919=>754,8920=>1280,8921=>1280, +8922=>754,8923=>754,8924=>754,8925=>754,8926=>754,8927=>754,8928=>754,8929=>754,8930=>754,8931=>754, +8932=>754,8933=>754,8934=>754,8935=>754,8936=>754,8937=>754,8938=>754,8939=>754,8940=>754,8941=>754, +8942=>900,8943=>900,8944=>900,8945=>900,8946=>1042,8947=>807,8948=>675,8949=>807,8950=>807,8951=>675, +8952=>807,8953=>807,8954=>1042,8955=>807,8956=>675,8957=>807,8958=>675,8959=>807,8960=>542,8961=>542, +8962=>644,8963=>754,8964=>754,8965=>754,8966=>754,8967=>439,8968=>411,8969=>411,8970=>411,8971=>411, +8972=>728,8973=>728,8974=>728,8975=>728,8976=>754,8977=>484,8984=>835,8985=>754,8988=>422,8989=>422, +8990=>422,8991=>422,8992=>549,8993=>549,8996=>1037,8997=>1037,8998=>1272,8999=>1037,9000=>1299,9003=>1272, +9004=>786,9075=>351,9076=>644,9077=>782,9082=>618,9085=>776,9095=>1037,9108=>786,9115=>450,9116=>450, +9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450, +9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>549,9166=>754,9167=>850, +9187=>786,9189=>692,9250=>644,9251=>644,9312=>762,9313=>762,9314=>762,9315=>762,9316=>762,9317=>762, +9318=>762,9319=>762,9320=>762,9321=>762,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692, +9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692, +9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692, +9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850, +9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850, +9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692, +9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692, +9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785, +9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785, +9686=>474,9687=>474,9688=>756,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348, +9696=>692,9697=>692,9698=>692,9699=>692,9700=>692,9701=>692,9702=>575,9703=>850,9704=>850,9705=>850, +9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850, +9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659, +9726=>659,9727=>692,9728=>807,9729=>900,9730=>807,9731=>807,9732=>807,9733=>807,9734=>807,9735=>515, +9736=>806,9737=>807,9738=>799,9739=>799,9740=>604,9741=>911,9742=>1121,9743=>1125,9744=>807,9745=>807, +9746=>807,9747=>479,9748=>807,9749=>807,9750=>807,9751=>807,9752=>807,9753=>807,9754=>807,9755=>807, +9756=>807,9757=>548,9758=>807,9759=>548,9760=>807,9761=>807,9762=>807,9763=>807,9764=>602,9765=>671, +9766=>584,9767=>705,9768=>490,9769=>807,9770=>807,9771=>807,9772=>639,9773=>807,9774=>807,9775=>807, +9776=>807,9777=>807,9778=>807,9779=>807,9780=>807,9781=>807,9782=>807,9783=>807,9784=>807,9785=>807, +9786=>807,9787=>807,9788=>807,9789=>807,9790=>807,9791=>552,9792=>658,9793=>658,9794=>807,9795=>807, +9796=>807,9797=>807,9798=>807,9799=>807,9800=>807,9801=>807,9802=>807,9803=>807,9804=>807,9805=>807, +9806=>807,9807=>807,9808=>807,9809=>807,9810=>807,9811=>807,9812=>807,9813=>807,9814=>807,9815=>807, +9816=>807,9817=>807,9818=>807,9819=>807,9820=>807,9821=>807,9822=>807,9823=>807,9824=>807,9825=>807, +9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9832=>807,9833=>424,9834=>574,9835=>807, +9836=>807,9837=>424,9838=>321,9839=>435,9840=>673,9841=>689,9842=>807,9843=>807,9844=>807,9845=>807, +9846=>807,9847=>807,9848=>807,9849=>807,9850=>807,9851=>807,9852=>807,9853=>807,9854=>807,9855=>807, +9856=>782,9857=>782,9858=>782,9859=>782,9860=>782,9861=>782,9862=>807,9863=>807,9864=>807,9865=>807, +9866=>807,9867=>807,9868=>807,9869=>807,9870=>807,9871=>807,9872=>807,9873=>807,9874=>807,9875=>807, +9876=>807,9877=>487,9878=>807,9879=>807,9880=>807,9881=>807,9882=>807,9883=>807,9884=>807,9888=>807, +9889=>632,9890=>903,9891=>977,9892=>1028,9893=>811,9894=>754,9895=>754,9896=>754,9897=>754,9898=>754, +9899=>754,9900=>754,9901=>754,9902=>754,9903=>754,9904=>759,9905=>754,9906=>658,9907=>659,9908=>659, +9909=>659,9910=>765,9911=>659,9912=>659,9985=>754,9986=>754,9987=>754,9988=>754,9990=>754,9991=>754, +9992=>754,9993=>754,9996=>754,9997=>754,9998=>754,9999=>754,10000=>754,10001=>754,10002=>754,10003=>754, +10004=>754,10005=>754,10006=>754,10007=>754,10008=>754,10009=>754,10010=>754,10011=>754,10012=>754,10013=>754, +10014=>754,10015=>754,10016=>754,10017=>754,10018=>754,10019=>754,10020=>754,10021=>754,10022=>754,10023=>754, +10025=>754,10026=>754,10027=>754,10028=>754,10029=>754,10030=>754,10031=>754,10032=>754,10033=>754,10034=>754, +10035=>754,10036=>754,10037=>754,10038=>754,10039=>754,10040=>754,10041=>754,10042=>754,10043=>754,10044=>754, +10045=>754,10046=>754,10047=>754,10048=>754,10049=>754,10050=>754,10051=>754,10052=>754,10053=>754,10054=>754, +10055=>754,10056=>754,10057=>754,10058=>754,10059=>754,10061=>807,10063=>807,10064=>807,10065=>807,10066=>807, +10070=>807,10072=>754,10073=>754,10074=>754,10075=>312,10076=>312,10077=>528,10078=>528,10081=>754,10082=>754, +10083=>754,10084=>754,10085=>754,10086=>754,10087=>754,10088=>754,10089=>754,10090=>754,10091=>754,10092=>754, +10093=>754,10094=>754,10095=>754,10096=>754,10097=>754,10098=>754,10099=>754,10100=>754,10101=>754,10102=>762, +10103=>762,10104=>762,10105=>762,10106=>762,10107=>762,10108=>762,10109=>762,10110=>762,10111=>762,10112=>754, +10113=>754,10114=>754,10115=>754,10116=>754,10117=>754,10118=>754,10119=>754,10120=>754,10121=>754,10122=>754, +10123=>754,10124=>754,10125=>754,10126=>754,10127=>754,10128=>754,10129=>754,10130=>754,10131=>754,10132=>754, +10136=>754,10137=>754,10138=>754,10139=>754,10140=>754,10141=>754,10142=>754,10143=>754,10144=>754,10145=>754, +10146=>754,10147=>754,10148=>754,10149=>754,10150=>754,10151=>754,10152=>754,10153=>754,10154=>754,10155=>754, +10156=>754,10157=>754,10158=>754,10159=>754,10161=>754,10162=>754,10163=>754,10164=>754,10165=>754,10166=>754, +10167=>754,10168=>754,10169=>754,10170=>754,10171=>754,10172=>754,10173=>754,10174=>754,10181=>411,10182=>411, +10208=>444,10214=>438,10215=>438,10216=>411,10217=>411,10218=>648,10219=>648,10224=>754,10225=>754,10226=>754, +10227=>754,10228=>1042,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290, +10237=>1290,10238=>1290,10239=>1290,10240=>703,10241=>703,10242=>703,10243=>703,10244=>703,10245=>703,10246=>703, +10247=>703,10248=>703,10249=>703,10250=>703,10251=>703,10252=>703,10253=>703,10254=>703,10255=>703,10256=>703, +10257=>703,10258=>703,10259=>703,10260=>703,10261=>703,10262=>703,10263=>703,10264=>703,10265=>703,10266=>703, +10267=>703,10268=>703,10269=>703,10270=>703,10271=>703,10272=>703,10273=>703,10274=>703,10275=>703,10276=>703, +10277=>703,10278=>703,10279=>703,10280=>703,10281=>703,10282=>703,10283=>703,10284=>703,10285=>703,10286=>703, +10287=>703,10288=>703,10289=>703,10290=>703,10291=>703,10292=>703,10293=>703,10294=>703,10295=>703,10296=>703, +10297=>703,10298=>703,10299=>703,10300=>703,10301=>703,10302=>703,10303=>703,10304=>703,10305=>703,10306=>703, +10307=>703,10308=>703,10309=>703,10310=>703,10311=>703,10312=>703,10313=>703,10314=>703,10315=>703,10316=>703, +10317=>703,10318=>703,10319=>703,10320=>703,10321=>703,10322=>703,10323=>703,10324=>703,10325=>703,10326=>703, +10327=>703,10328=>703,10329=>703,10330=>703,10331=>703,10332=>703,10333=>703,10334=>703,10335=>703,10336=>703, +10337=>703,10338=>703,10339=>703,10340=>703,10341=>703,10342=>703,10343=>703,10344=>703,10345=>703,10346=>703, +10347=>703,10348=>703,10349=>703,10350=>703,10351=>703,10352=>703,10353=>703,10354=>703,10355=>703,10356=>703, +10357=>703,10358=>703,10359=>703,10360=>703,10361=>703,10362=>703,10363=>703,10364=>703,10365=>703,10366=>703, +10367=>703,10368=>703,10369=>703,10370=>703,10371=>703,10372=>703,10373=>703,10374=>703,10375=>703,10376=>703, +10377=>703,10378=>703,10379=>703,10380=>703,10381=>703,10382=>703,10383=>703,10384=>703,10385=>703,10386=>703, +10387=>703,10388=>703,10389=>703,10390=>703,10391=>703,10392=>703,10393=>703,10394=>703,10395=>703,10396=>703, +10397=>703,10398=>703,10399=>703,10400=>703,10401=>703,10402=>703,10403=>703,10404=>703,10405=>703,10406=>703, +10407=>703,10408=>703,10409=>703,10410=>703,10411=>703,10412=>703,10413=>703,10414=>703,10415=>703,10416=>703, +10417=>703,10418=>703,10419=>703,10420=>703,10421=>703,10422=>703,10423=>703,10424=>703,10425=>703,10426=>703, +10427=>703,10428=>703,10429=>703,10430=>703,10431=>703,10432=>703,10433=>703,10434=>703,10435=>703,10436=>703, +10437=>703,10438=>703,10439=>703,10440=>703,10441=>703,10442=>703,10443=>703,10444=>703,10445=>703,10446=>703, +10447=>703,10448=>703,10449=>703,10450=>703,10451=>703,10452=>703,10453=>703,10454=>703,10455=>703,10456=>703, +10457=>703,10458=>703,10459=>703,10460=>703,10461=>703,10462=>703,10463=>703,10464=>703,10465=>703,10466=>703, +10467=>703,10468=>703,10469=>703,10470=>703,10471=>703,10472=>703,10473=>703,10474=>703,10475=>703,10476=>703, +10477=>703,10478=>703,10479=>703,10480=>703,10481=>703,10482=>703,10483=>703,10484=>703,10485=>703,10486=>703, +10487=>703,10488=>703,10489=>703,10490=>703,10491=>703,10492=>703,10493=>703,10494=>703,10495=>703,10502=>754, +10503=>754,10506=>754,10507=>754,10560=>754,10561=>754,10627=>678,10628=>678,10702=>754,10703=>941,10704=>941, +10705=>900,10706=>900,10707=>900,10708=>900,10709=>900,10731=>444,10746=>754,10747=>754,10752=>900,10753=>900, +10754=>900,10764=>1495,10765=>506,10766=>506,10767=>506,10768=>506,10769=>506,10770=>506,10771=>506,10772=>506, +10773=>506,10774=>506,10775=>506,10776=>506,10777=>506,10778=>506,10779=>506,10780=>506,10799=>754,10877=>754, +10878=>754,10879=>754,10880=>754,10881=>754,10882=>754,10883=>754,10884=>754,10885=>754,10886=>754,10887=>754, +10888=>754,10889=>754,10890=>754,10891=>754,10892=>754,10893=>754,10894=>754,10895=>754,10896=>754,10897=>754, +10898=>754,10899=>754,10900=>754,10901=>754,10902=>754,10903=>754,10904=>754,10905=>754,10906=>754,10907=>754, +10908=>754,10909=>754,10910=>754,10911=>754,10912=>754,10926=>754,10927=>754,10928=>754,10929=>754,10930=>754, +10931=>754,10932=>754,10933=>754,10934=>754,10935=>754,10936=>754,10937=>754,10938=>754,11001=>754,11002=>754, +11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754, +11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754,11026=>850,11027=>850, +11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11039=>782,11040=>782,11041=>786, +11042=>786,11043=>786,11044=>1007,11091=>782,11092=>782,11360=>573,11361=>324,11362=>573,11363=>659,11364=>693, +11365=>607,11366=>430,11367=>860,11368=>641,11369=>697,11370=>598,11371=>652,11372=>523,11373=>774,11374=>896, +11375=>696,11377=>700,11378=>1099,11379=>950,11380=>586,11381=>628,11382=>508,11383=>704,11385=>484,11386=>618, +11387=>502,11388=>197,11389=>438,11568=>622,11569=>847,11570=>847,11571=>652,11572=>652,11573=>652,11574=>608, +11575=>696,11576=>696,11577=>615,11578=>615,11579=>721,11580=>890,11581=>685,11582=>561,11583=>685,11584=>847, +11585=>847,11586=>335,11587=>666,11588=>753,11589=>822,11590=>604,11591=>663,11592=>612,11593=>615,11594=>542, +11595=>935,11596=>700,11597=>753,11598=>615,11599=>334,11600=>700,11601=>335,11602=>652,11603=>622,11604=>847, +11605=>847,11606=>753,11607=>335,11608=>752,11609=>847,11610=>847,11611=>660,11612=>789,11613=>694,11614=>660, +11615=>615,11616=>696,11617=>753,11618=>615,11619=>765,11620=>627,11621=>765,11631=>644,11800=>522,11810=>411, +11811=>411,11812=>411,11813=>411,11822=>522,19904=>807,19905=>807,19906=>807,19907=>807,19908=>807,19909=>807, +19910=>807,19911=>807,19912=>807,19913=>807,19914=>807,19915=>807,19916=>807,19917=>807,19918=>807,19919=>807, +19920=>807,19921=>807,19922=>807,19923=>807,19924=>807,19925=>807,19926=>807,19927=>807,19928=>807,19929=>807, +19930=>807,19931=>807,19932=>807,19933=>807,19934=>807,19935=>807,19936=>807,19937=>807,19938=>807,19939=>807, +19940=>807,19941=>807,19942=>807,19943=>807,19944=>807,19945=>807,19946=>807,19947=>807,19948=>807,19949=>807, +19950=>807,19951=>807,19952=>807,19953=>807,19954=>807,19955=>807,19956=>807,19957=>807,19958=>807,19959=>807, +19960=>807,19961=>807,19962=>807,19963=>807,19964=>807,19965=>807,19966=>807,19967=>807,42564=>648,42565=>536, +42566=>392,42567=>396,42572=>1265,42573=>1055,42576=>1110,42577=>924,42580=>1056,42581=>875,42582=>983,42583=>862, +42594=>976,42595=>832,42596=>986,42597=>821,42598=>1134,42599=>897,42600=>765,42601=>618,42602=>933,42603=>781, +42604=>1266,42605=>995,42606=>865,42634=>867,42635=>708,42636=>614,42637=>521,42644=>727,42645=>641,42760=>450, +42761=>450,42762=>450,42763=>450,42764=>450,42765=>450,42766=>450,42767=>450,42768=>450,42769=>450,42770=>450, +42771=>450,42772=>450,42773=>450,42774=>450,42779=>360,42780=>360,42781=>258,42782=>258,42783=>258,42790=>753, +42791=>641,42792=>928,42793=>771,42794=>626,42795=>501,42800=>502,42801=>536,42802=>1214,42803=>946,42804=>1156, +42805=>958,42806=>1094,42807=>949,42808=>971,42809=>830,42810=>971,42811=>830,42812=>932,42813=>830,42814=>628, +42815=>494,42822=>765,42823=>488,42824=>614,42825=>478,42826=>826,42827=>732,42830=>1266,42831=>995,42880=>573, +42881=>308,42882=>753,42883=>641,42889=>360,42890=>347,42891=>410,42892=>275,43003=>615,43004=>659,43005=>896, +43006=>334,43007=>1192,63173=>618,64256=>729,64257=>667,64258=>667,64259=>1003,64260=>1004,64261=>727,64262=>917, +64275=>1249,64276=>1245,64277=>1240,64278=>1245,64279=>1542,64285=>308,64286=>0,64287=>597,64288=>647,64289=>867, +64290=>801,64291=>889,64292=>867,64293=>844,64294=>889,64295=>889,64296=>878,64297=>754,64298=>854,64299=>854, +64300=>854,64301=>854,64302=>676,64303=>676,64304=>676,64305=>605,64306=>483,64307=>589,64308=>641,64309=>394, +64310=>442,64312=>651,64313=>394,64314=>584,64315=>584,64316=>611,64318=>698,64320=>447,64321=>696,64323=>646, +64324=>618,64326=>676,64327=>656,64328=>584,64329=>854,64330=>676,64331=>308,64332=>605,64333=>584,64334=>618, +64335=>676,64338=>904,64339=>953,64340=>338,64341=>367,64342=>904,64343=>953,64344=>338,64345=>367,64346=>904, +64347=>953,64348=>338,64349=>367,64350=>904,64351=>953,64352=>338,64353=>367,64354=>904,64355=>953,64356=>338, +64357=>367,64358=>904,64359=>953,64360=>338,64361=>367,64362=>1045,64363=>1072,64364=>589,64365=>647,64366=>1045, +64367=>1072,64368=>589,64369=>647,64370=>648,64371=>648,64372=>648,64373=>648,64374=>648,64375=>648,64376=>648, +64377=>648,64378=>648,64379=>648,64380=>648,64381=>648,64382=>648,64383=>648,64384=>648,64385=>648,64394=>518, +64395=>560,64396=>518,64397=>560,64398=>921,64399=>921,64400=>523,64401=>523,64402=>921,64403=>921,64404=>523, +64405=>523,64414=>768,64415=>810,64473=>559,64474=>564,64488=>338,64489=>367,64508=>825,64509=>910,64510=>338, +64511=>367,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0, +65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0, +65059=>0,65136=>308,65137=>308,65138=>308,65139=>311,65140=>308,65142=>308,65143=>308,65144=>308,65145=>308, +65146=>308,65147=>308,65148=>308,65149=>308,65150=>308,65151=>308,65152=>460,65153=>308,65154=>338,65155=>308, +65156=>338,65157=>559,65158=>564,65159=>308,65160=>338,65161=>825,65162=>825,65163=>338,65164=>367,65165=>308, +65166=>338,65167=>904,65168=>953,65169=>338,65170=>367,65171=>531,65172=>545,65173=>904,65174=>953,65175=>338, +65176=>367,65177=>904,65178=>953,65179=>338,65180=>367,65181=>648,65182=>648,65183=>648,65184=>648,65185=>648, +65186=>648,65187=>648,65188=>648,65189=>648,65190=>648,65191=>648,65192=>648,65193=>461,65194=>520,65195=>461, +65196=>520,65197=>518,65198=>560,65199=>518,65200=>560,65201=>1242,65202=>1272,65203=>885,65204=>916,65205=>1242, +65206=>1272,65207=>885,65208=>916,65209=>1210,65210=>1228,65211=>870,65212=>887,65213=>1210,65214=>1228,65215=>870, +65216=>887,65217=>935,65218=>963,65219=>848,65220=>876,65221=>935,65222=>963,65223=>848,65224=>876,65225=>615, +65226=>615,65227=>615,65228=>508,65229=>615,65230=>615,65231=>615,65232=>508,65233=>1045,65234=>1072,65235=>589, +65236=>647,65237=>804,65238=>811,65239=>589,65240=>647,65241=>825,65242=>838,65243=>523,65244=>523,65245=>781, +65246=>803,65247=>338,65248=>367,65249=>659,65250=>706,65251=>557,65252=>603,65253=>768,65254=>810,65255=>338, +65256=>367,65257=>531,65258=>545,65259=>624,65260=>594,65261=>559,65262=>564,65263=>825,65264=>910,65265=>825, +65266=>910,65267=>338,65268=>367,65269=>670,65270=>683,65271=>670,65272=>683,65273=>670,65274=>683,65275=>670, +65276=>683,65279=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1002); +$enc=''; +$diff=''; +$file='dejavusanscondensedb.z'; +$ctg='dejavusanscondensedb.ctg.z'; +$originalsize=534464; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedb.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedb.z new file mode 100755 index 00000000..5d59661c Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedb.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedbi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedbi.ctg.z new file mode 100755 index 00000000..9d1fcd61 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedbi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedbi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedbi.php new file mode 100755 index 00000000..0c201ede --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedbi.php @@ -0,0 +1,458 @@ +928,'Descent'=>-236,'CapHeight'=>-46,'Flags'=>96,'FontBBox'=>'[-960 -385 1804 1121]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>313,33=>410,34=>469,35=>626,36=>626,37=>901,38=>785,39=>275,40=>411, +41=>411,42=>470,43=>754,44=>342,45=>374,46=>342,47=>329,48=>626,49=>626,50=>626, +51=>626,52=>626,53=>626,54=>626,55=>626,56=>626,57=>626,58=>360,59=>360,60=>754, +61=>754,62=>754,63=>522,64=>900,65=>696,66=>686,67=>660,68=>747,69=>615,70=>615, +71=>738,72=>753,73=>334,74=>334,75=>697,76=>573,77=>896,78=>753,79=>765,80=>659, +81=>765,82=>693,83=>648,84=>614,85=>730,86=>696,87=>993,88=>694,89=>651,90=>652, +91=>411,92=>329,93=>411,94=>754,95=>450,96=>450,97=>607,98=>644,99=>533,100=>644, +101=>610,102=>391,103=>644,104=>641,105=>308,106=>308,107=>598,108=>308,109=>938,110=>641, +111=>618,112=>644,113=>644,114=>444,115=>536,116=>430,117=>641,118=>586,119=>831,120=>580, +121=>586,122=>523,123=>641,124=>329,125=>641,126=>754,8364=>626,8218=>342,402=>391,8222=>580, +8230=>900,8224=>450,8225=>450,710=>450,8240=>1309,352=>648,8249=>371,338=>1050,381=>652,8216=>342, +8217=>342,8220=>580,8221=>580,8226=>575,8211=>450,8212=>900,732=>450,8482=>900,353=>536,8250=>371, +339=>984,382=>523,376=>651,160=>313,161=>410,162=>626,163=>626,164=>572,165=>626,166=>329, +167=>450,168=>450,169=>900,170=>507,171=>584,172=>754,173=>374,174=>900,175=>450,176=>450, +177=>754,178=>394,179=>394,180=>450,181=>662,182=>572,183=>342,184=>450,185=>394,186=>507, +187=>584,188=>932,189=>932,190=>932,191=>522,192=>696,193=>696,194=>696,195=>696,196=>696, +197=>696,198=>976,199=>660,200=>615,201=>615,202=>615,203=>615,204=>334,205=>334,206=>334, +207=>334,208=>760,209=>753,210=>765,211=>765,212=>765,213=>765,214=>765,215=>754,216=>765, +217=>730,218=>730,219=>730,220=>730,221=>651,222=>668,223=>647,224=>607,225=>607,226=>607, +227=>607,228=>607,229=>607,230=>943,231=>533,232=>610,233=>610,234=>610,235=>610,236=>308, +237=>308,238=>308,239=>308,240=>618,241=>641,242=>618,243=>618,244=>618,245=>618,246=>618, +247=>754,248=>618,249=>641,250=>641,251=>641,252=>641,253=>586,254=>644,255=>586,256=>696, +257=>607,258=>696,259=>607,260=>696,261=>607,262=>660,263=>533,264=>660,265=>533,266=>660, +267=>533,268=>660,269=>533,270=>747,271=>644,272=>760,273=>644,274=>615,275=>610,276=>615, +277=>610,278=>615,279=>610,280=>615,281=>610,282=>615,283=>610,284=>738,285=>644,286=>738, +287=>644,288=>738,289=>644,290=>738,291=>644,292=>753,293=>641,294=>876,295=>711,296=>334, +297=>308,298=>334,299=>308,300=>334,301=>308,302=>334,303=>308,304=>334,305=>308,306=>669, +307=>617,308=>334,309=>308,310=>697,311=>598,312=>598,313=>573,314=>308,315=>573,316=>308, +317=>573,318=>308,319=>573,320=>308,321=>594,322=>337,323=>753,324=>641,325=>753,326=>641, +327=>753,328=>641,329=>884,330=>753,331=>641,332=>765,333=>618,334=>765,335=>618,336=>765, +337=>618,340=>693,341=>444,342=>693,343=>444,344=>693,345=>444,346=>648,347=>536,348=>648, +349=>536,350=>648,351=>536,354=>614,355=>430,356=>614,357=>430,358=>614,359=>430,360=>730, +361=>641,362=>730,363=>641,364=>730,365=>641,366=>730,367=>641,368=>730,369=>641,370=>730, +371=>641,372=>993,373=>831,374=>651,375=>586,377=>652,378=>523,379=>652,380=>523,383=>391, +384=>644,385=>729,386=>686,387=>644,388=>686,389=>644,390=>660,391=>660,392=>533,393=>760, +394=>791,395=>686,396=>644,397=>618,398=>615,399=>765,400=>626,401=>615,403=>738,404=>713, +405=>940,406=>392,407=>350,408=>697,409=>598,410=>324,411=>532,412=>938,413=>753,414=>641, +415=>765,416=>765,417=>618,418=>1002,419=>866,420=>703,421=>644,422=>693,423=>648,424=>536, +425=>615,426=>497,427=>430,428=>636,429=>430,430=>614,431=>730,432=>641,433=>692,434=>732, +435=>717,436=>700,437=>652,438=>523,439=>695,440=>695,441=>576,442=>523,443=>626,444=>695, +445=>576,446=>515,447=>644,448=>334,449=>593,450=>489,451=>334,452=>1393,453=>1305,454=>1176, +455=>879,456=>881,457=>603,458=>1074,459=>1091,460=>957,461=>696,462=>607,463=>334,464=>308, +465=>765,466=>618,467=>730,468=>641,469=>730,470=>641,471=>730,472=>641,473=>730,474=>641, +475=>730,476=>641,477=>610,478=>696,479=>607,480=>696,481=>607,482=>976,483=>943,484=>738, +485=>644,486=>738,487=>644,488=>697,489=>598,490=>765,491=>618,492=>765,493=>618,494=>695, +495=>523,496=>308,497=>1393,498=>1305,499=>1176,500=>738,501=>644,502=>1160,503=>708,504=>753, +505=>641,506=>696,507=>607,508=>976,509=>943,510=>765,511=>618,512=>696,513=>607,514=>696, +515=>607,516=>615,517=>610,518=>615,519=>610,520=>334,521=>308,522=>334,523=>308,524=>765, +525=>618,526=>765,527=>618,528=>693,529=>444,530=>693,531=>444,532=>730,533=>641,534=>730, +535=>641,536=>648,537=>536,538=>614,539=>430,540=>621,541=>546,542=>753,543=>641,544=>753, +545=>778,546=>728,547=>593,548=>652,549=>523,550=>696,551=>607,552=>615,553=>610,554=>765, +555=>618,556=>765,557=>618,558=>765,559=>618,560=>765,561=>618,562=>651,563=>586,564=>442, +565=>780,566=>460,567=>308,568=>979,569=>979,570=>696,571=>660,572=>533,573=>573,574=>614, +575=>536,576=>523,577=>703,578=>553,579=>686,580=>730,581=>696,582=>615,583=>610,584=>334, +585=>308,586=>774,587=>712,588=>693,589=>444,590=>651,591=>586,592=>607,593=>644,594=>644, +595=>644,596=>533,597=>533,598=>712,599=>712,600=>610,601=>610,602=>788,603=>501,604=>490, +605=>696,606=>658,607=>308,608=>712,609=>644,610=>564,611=>661,612=>571,613=>641,614=>641, +615=>641,616=>491,617=>396,618=>491,619=>502,620=>624,621=>308,622=>757,623=>938,624=>938, +625=>938,626=>641,627=>713,628=>578,629=>618,630=>817,631=>613,632=>716,633=>484,634=>484, +635=>584,636=>444,637=>444,638=>536,639=>536,640=>578,641=>578,642=>536,643=>374,644=>391, +645=>544,646=>497,647=>430,648=>430,649=>828,650=>692,651=>603,652=>586,653=>831,654=>586, +655=>651,656=>624,657=>615,658=>576,659=>576,660=>515,661=>515,662=>515,663=>515,664=>765, +665=>569,666=>658,667=>616,668=>622,669=>308,670=>659,671=>485,672=>712,673=>515,674=>515, +675=>1040,676=>1093,677=>1039,678=>876,679=>691,680=>836,681=>923,682=>712,683=>702,684=>532, +685=>374,686=>609,687=>710,688=>410,689=>410,690=>197,691=>284,692=>284,693=>284,694=>369, +695=>532,696=>375,697=>271,698=>469,699=>342,700=>342,701=>342,702=>330,703=>330,704=>293, +705=>293,706=>450,707=>450,708=>450,709=>450,711=>450,712=>275,713=>450,714=>450,715=>450, +716=>275,717=>450,718=>450,719=>450,720=>303,721=>303,722=>330,723=>330,724=>450,725=>450, +726=>374,727=>295,728=>450,729=>450,730=>450,731=>450,733=>450,734=>315,735=>450,736=>370, +737=>197,738=>343,739=>371,740=>293,741=>450,742=>450,743=>450,744=>450,745=>450,748=>450, +749=>450,750=>580,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>628,881=>508,882=>919, +883=>752,884=>271,885=>271,886=>753,887=>630,890=>450,891=>533,892=>495,893=>494,894=>360, +900=>397,901=>450,902=>717,903=>342,904=>761,905=>908,906=>507,908=>801,910=>882,911=>804, +912=>351,913=>696,914=>686,915=>573,916=>696,917=>615,918=>652,919=>753,920=>765,921=>334, +922=>697,923=>696,924=>896,925=>753,926=>568,927=>765,928=>753,929=>659,931=>615,932=>614, +933=>651,934=>765,935=>694,936=>765,937=>765,938=>334,939=>651,940=>618,941=>501,942=>641, +943=>351,944=>607,945=>618,946=>644,947=>613,948=>618,949=>501,950=>532,951=>641,952=>618, +953=>351,954=>639,955=>569,956=>662,957=>613,958=>532,959=>618,960=>712,961=>644,962=>533, +963=>701,964=>574,965=>607,966=>704,967=>580,968=>714,969=>782,970=>351,971=>607,972=>618, +973=>607,974=>782,975=>697,976=>585,977=>594,978=>671,979=>883,980=>671,981=>716,982=>782, +983=>669,984=>765,985=>618,986=>660,987=>533,988=>615,989=>444,990=>632,991=>593,992=>827, +993=>564,994=>983,995=>753,996=>749,997=>644,998=>835,999=>669,1000=>660,1001=>585,1002=>709, +1003=>604,1004=>677,1005=>644,1006=>614,1007=>531,1008=>669,1009=>644,1010=>533,1011=>308,1012=>765, +1013=>580,1014=>580,1015=>668,1016=>644,1017=>660,1018=>896,1019=>659,1020=>644,1021=>660,1022=>660, +1023=>628,1024=>615,1025=>615,1026=>791,1027=>573,1028=>660,1029=>648,1030=>334,1031=>334,1032=>334, +1033=>1039,1034=>1017,1035=>791,1036=>735,1037=>753,1038=>694,1039=>753,1040=>696,1041=>686,1042=>686, +1043=>573,1044=>801,1045=>615,1046=>1102,1047=>639,1048=>753,1049=>753,1050=>735,1051=>747,1052=>896, +1053=>753,1054=>765,1055=>753,1056=>659,1057=>660,1058=>614,1059=>694,1060=>892,1061=>694,1062=>835, +1063=>727,1064=>1112,1065=>1193,1066=>845,1067=>932,1068=>686,1069=>660,1070=>1056,1071=>693,1072=>607, +1073=>628,1074=>569,1075=>470,1076=>727,1077=>610,1078=>896,1079=>523,1080=>630,1081=>630,1082=>611, +1083=>659,1084=>735,1085=>622,1086=>618,1087=>622,1088=>644,1089=>533,1090=>521,1091=>586,1092=>893, +1093=>580,1094=>667,1095=>618,1096=>956,1097=>995,1098=>676,1099=>813,1100=>569,1101=>533,1102=>875, +1103=>578,1104=>610,1105=>610,1106=>642,1107=>470,1108=>533,1109=>536,1110=>308,1111=>308,1112=>308, +1113=>892,1114=>860,1115=>661,1116=>611,1117=>630,1118=>586,1119=>622,1120=>983,1121=>782,1122=>756, +1123=>662,1124=>911,1125=>755,1126=>893,1127=>749,1128=>1222,1129=>1009,1130=>765,1131=>618,1132=>1112, +1133=>906,1134=>626,1135=>501,1136=>967,1137=>955,1138=>765,1139=>618,1140=>765,1141=>625,1142=>765, +1143=>625,1144=>1033,1145=>939,1146=>967,1147=>776,1148=>1265,1149=>1055,1150=>983,1151=>782,1152=>660, +1153=>533,1154=>587,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>376,1161=>376,1162=>844, +1163=>725,1164=>686,1165=>550,1166=>662,1167=>646,1168=>573,1169=>470,1170=>599,1171=>488,1172=>709, +1173=>470,1174=>1102,1175=>896,1176=>639,1177=>523,1178=>697,1179=>611,1180=>735,1181=>611,1182=>735, +1183=>611,1184=>914,1185=>743,1186=>753,1187=>622,1188=>992,1189=>783,1190=>1129,1191=>880,1192=>851, +1193=>773,1194=>660,1195=>533,1196=>614,1197=>521,1198=>651,1199=>586,1200=>651,1201=>586,1202=>694, +1203=>580,1204=>993,1205=>901,1206=>727,1207=>618,1208=>727,1209=>618,1210=>727,1211=>641,1212=>923, +1213=>729,1214=>923,1215=>729,1216=>334,1217=>1102,1218=>896,1219=>700,1220=>566,1221=>839,1222=>724, +1223=>753,1224=>622,1225=>844,1226=>725,1227=>727,1228=>618,1229=>986,1230=>838,1231=>308,1232=>696, +1233=>607,1234=>696,1235=>607,1236=>976,1237=>943,1238=>615,1239=>610,1240=>765,1241=>610,1242=>765, +1243=>610,1244=>1102,1245=>896,1246=>639,1247=>523,1248=>695,1249=>576,1250=>753,1251=>630,1252=>753, +1253=>630,1254=>765,1255=>618,1256=>765,1257=>618,1258=>765,1259=>618,1260=>660,1261=>533,1262=>694, +1263=>586,1264=>694,1265=>586,1266=>694,1267=>586,1268=>727,1269=>618,1270=>573,1271=>470,1272=>932, +1273=>813,1274=>599,1275=>488,1276=>694,1277=>580,1278=>694,1279=>580,1280=>686,1281=>547,1282=>1043, +1283=>804,1284=>1007,1285=>828,1286=>745,1287=>624,1288=>1117,1289=>915,1290=>1160,1291=>912,1292=>755, +1293=>574,1294=>844,1295=>722,1296=>626,1297=>501,1298=>747,1299=>659,1300=>1157,1301=>963,1302=>958, +1303=>883,1304=>973,1305=>864,1306=>765,1307=>644,1308=>993,1309=>831,1312=>1123,1313=>920,1314=>1128, +1315=>880,1316=>861,1317=>726,1329=>886,1330=>730,1331=>886,1332=>886,1333=>730,1334=>699,1335=>730, +1336=>730,1337=>877,1338=>886,1339=>730,1340=>639,1341=>970,1342=>1022,1343=>730,1344=>639,1345=>681, +1346=>886,1347=>789,1348=>886,1349=>714,1350=>886,1351=>730,1352=>730,1353=>730,1354=>862,1355=>699, +1356=>886,1357=>730,1358=>886,1359=>648,1360=>730,1361=>714,1362=>805,1363=>765,1364=>842,1365=>765, +1366=>648,1369=>330,1370=>342,1371=>495,1372=>495,1373=>342,1374=>491,1375=>468,1377=>938,1378=>641, +1379=>779,1380=>781,1381=>641,1382=>735,1383=>588,1384=>641,1385=>729,1386=>735,1387=>641,1388=>448, +1389=>916,1390=>644,1391=>641,1392=>641,1393=>644,1394=>737,1395=>641,1396=>676,1397=>308,1398=>794, +1399=>502,1400=>641,1401=>502,1402=>938,1403=>502,1404=>777,1405=>641,1406=>732,1407=>938,1408=>641, +1409=>644,1410=>514,1411=>938,1412=>700,1413=>618,1414=>648,1415=>776,1417=>360,1418=>438,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>374,1471=>0,1472=>334,1473=>0,1474=>0,1475=>334,1478=>447, +1479=>0,1488=>676,1489=>605,1490=>483,1491=>589,1492=>641,1493=>308,1494=>442,1495=>641,1496=>651, +1497=>308,1498=>584,1499=>584,1500=>611,1501=>641,1502=>698,1503=>308,1504=>447,1505=>696,1506=>610, +1507=>646,1508=>618,1509=>565,1510=>676,1511=>656,1512=>584,1513=>854,1514=>676,1520=>598,1521=>598, +1522=>597,1523=>399,1524=>639,3647=>668,3713=>734,3714=>673,3716=>674,3719=>512,3720=>668,3722=>669, +3725=>685,3732=>635,3733=>633,3734=>672,3735=>737,3737=>657,3738=>654,3739=>654,3740=>830,3741=>744, +3742=>779,3743=>779,3745=>752,3746=>685,3747=>692,3749=>691,3751=>642,3754=>744,3755=>928,3757=>651, +3758=>705,3759=>840,3760=>620,3761=>0,3762=>549,3763=>549,3764=>0,3765=>0,3766=>0,3767=>0, +3768=>0,3769=>0,3771=>0,3772=>0,3773=>603,3776=>464,3777=>774,3778=>464,3779=>584,3780=>569, +3782=>683,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>694,3793=>694,3794=>624, +3795=>752,3796=>655,3797=>655,3798=>764,3799=>710,3800=>683,3801=>818,3804=>1227,3805=>1227,4256=>826, +4257=>669,4258=>665,4259=>753,4260=>584,4261=>696,4262=>771,4263=>800,4264=>477,4265=>570,4266=>771, +4267=>810,4268=>579,4269=>813,4270=>732,4271=>677,4272=>782,4273=>579,4274=>579,4275=>797,4276=>797, +4277=>660,4278=>587,4279=>579,4280=>582,4281=>579,4282=>710,4283=>812,4284=>570,4285=>557,4286=>579, +4287=>700,4288=>802,4289=>541,4290=>668,4291=>554,4292=>570,4293=>668,4304=>497,4305=>497,4306=>536, +4307=>734,4308=>505,4309=>506,4310=>497,4311=>744,4312=>497,4313=>488,4314=>967,4315=>506,4316=>507, +4317=>730,4318=>497,4319=>532,4320=>740,4321=>506,4322=>621,4323=>525,4324=>732,4325=>505,4326=>731, +4327=>506,4328=>506,4329=>507,4330=>568,4331=>506,4332=>506,4333=>497,4334=>506,4335=>506,4336=>501, +4337=>543,4338=>497,4339=>497,4340=>497,4341=>544,4342=>767,4343=>571,4344=>506,4345=>536,4346=>487, +4347=>615,4348=>331,5121=>696,5122=>696,5123=>696,5124=>696,5125=>814,5126=>814,5127=>814,5129=>814, +5130=>814,5131=>814,5132=>916,5133=>908,5134=>916,5135=>908,5136=>916,5137=>908,5138=>1034,5139=>1025, +5140=>1034,5141=>1025,5142=>814,5143=>1034,5144=>1028,5145=>1034,5146=>1028,5147=>814,5149=>278,5150=>476, +5151=>382,5152=>382,5153=>355,5154=>355,5155=>355,5156=>355,5157=>507,5158=>423,5159=>278,5160=>355, +5161=>355,5162=>355,5163=>1092,5164=>888,5165=>1094,5166=>1167,5167=>696,5168=>696,5169=>696,5170=>696, +5171=>797,5172=>797,5173=>797,5175=>797,5176=>797,5177=>797,5178=>916,5179=>908,5180=>916,5181=>908, +5182=>916,5183=>908,5184=>1034,5185=>1025,5186=>1034,5187=>1025,5188=>1034,5189=>1028,5190=>1034,5191=>1028, +5192=>797,5193=>518,5194=>206,5196=>730,5197=>730,5198=>730,5199=>730,5200=>734,5201=>734,5202=>734, +5204=>734,5205=>734,5206=>734,5207=>950,5208=>943,5209=>950,5210=>943,5211=>950,5212=>943,5213=>954, +5214=>949,5215=>954,5216=>949,5217=>954,5218=>946,5219=>954,5220=>946,5221=>954,5222=>435,5223=>904, +5224=>904,5225=>921,5226=>915,5227=>668,5228=>668,5229=>668,5230=>668,5231=>668,5232=>668,5233=>668, +5234=>668,5235=>668,5236=>926,5237=>877,5238=>882,5239=>877,5240=>882,5241=>877,5242=>926,5243=>877, +5244=>926,5245=>877,5246=>882,5247=>877,5248=>882,5249=>877,5250=>882,5251=>451,5252=>451,5253=>844, +5254=>844,5255=>844,5256=>844,5257=>668,5258=>668,5259=>668,5260=>668,5261=>668,5262=>668,5263=>668, +5264=>668,5265=>668,5266=>926,5267=>877,5268=>926,5269=>877,5270=>926,5271=>877,5272=>926,5273=>877, +5274=>926,5275=>877,5276=>926,5277=>877,5278=>926,5279=>877,5280=>926,5281=>451,5282=>451,5283=>563, +5284=>563,5285=>563,5286=>563,5287=>563,5288=>563,5289=>563,5290=>563,5291=>563,5292=>793,5293=>769, +5294=>777,5295=>786,5296=>777,5297=>786,5298=>793,5299=>786,5300=>793,5301=>786,5302=>777,5303=>786, +5304=>777,5305=>786,5306=>777,5307=>392,5308=>493,5309=>392,5312=>889,5313=>889,5314=>889,5315=>889, +5316=>838,5317=>838,5318=>838,5319=>838,5320=>838,5321=>1114,5322=>1122,5323=>1080,5324=>1105,5325=>1080, +5326=>1105,5327=>838,5328=>593,5329=>447,5330=>593,5331=>889,5332=>889,5333=>889,5334=>889,5335=>838, +5336=>838,5337=>838,5338=>838,5339=>838,5340=>1107,5341=>1122,5342=>1155,5343=>1105,5344=>1155,5345=>1105, +5346=>1105,5347=>1093,5348=>1105,5349=>1093,5350=>1155,5351=>1105,5352=>1155,5353=>1105,5354=>593,5356=>797, +5357=>657,5358=>657,5359=>657,5360=>657,5361=>657,5362=>657,5363=>657,5364=>657,5365=>657,5366=>897, +5367=>862,5368=>870,5369=>890,5370=>870,5371=>890,5372=>897,5373=>862,5374=>897,5375=>862,5376=>870, +5377=>890,5378=>870,5379=>890,5380=>870,5381=>443,5382=>414,5383=>443,5392=>831,5393=>831,5394=>831, +5395=>1022,5396=>1022,5397=>1022,5398=>1022,5399=>1088,5400=>1081,5401=>1088,5402=>1081,5403=>1088,5404=>1081, +5405=>1288,5406=>1278,5407=>1288,5408=>1278,5409=>1288,5410=>1278,5411=>1288,5412=>1278,5413=>671,5414=>698, +5415=>698,5416=>698,5417=>698,5418=>698,5419=>698,5420=>698,5421=>698,5422=>698,5423=>902,5424=>903, +5425=>911,5426=>896,5427=>911,5428=>896,5429=>902,5430=>903,5431=>902,5432=>903,5433=>911,5434=>896, +5435=>911,5436=>896,5437=>911,5438=>445,5440=>355,5441=>458,5442=>929,5443=>929,5444=>878,5445=>878, +5446=>878,5447=>878,5448=>659,5449=>659,5450=>659,5451=>659,5452=>659,5453=>659,5454=>902,5455=>863, +5456=>445,5458=>797,5459=>696,5460=>696,5461=>696,5462=>696,5463=>835,5464=>835,5465=>835,5466=>835, +5467=>1055,5468=>1028,5469=>542,5470=>730,5471=>730,5472=>730,5473=>730,5474=>730,5475=>730,5476=>734, +5477=>734,5478=>734,5479=>734,5480=>954,5481=>946,5482=>493,5492=>879,5493=>879,5494=>879,5495=>879, +5496=>879,5497=>879,5498=>879,5499=>556,5500=>753,5501=>458,5502=>1114,5503=>1114,5504=>1114,5505=>1114, +5506=>1114,5507=>1114,5508=>1114,5509=>890,5514=>879,5515=>879,5516=>879,5517=>879,5518=>1432,5519=>1432, +5520=>1432,5521=>1165,5522=>1165,5523=>1432,5524=>1432,5525=>763,5526=>1146,5536=>889,5537=>889,5538=>838, +5539=>838,5540=>838,5541=>838,5542=>593,5543=>698,5544=>698,5545=>698,5546=>698,5547=>698,5548=>698, +5549=>698,5550=>445,5551=>668,5598=>747,5601=>747,5702=>446,5703=>446,5742=>371,5743=>1114,5744=>1432, +5745=>1814,5746=>1814,5747=>1548,5748=>1510,5749=>1814,5750=>1814,7424=>586,7425=>750,7426=>943,7427=>547, +7428=>533,7429=>608,7430=>608,7431=>502,7432=>501,7433=>308,7434=>444,7435=>598,7436=>485,7437=>735, +7438=>630,7439=>618,7440=>533,7441=>594,7442=>594,7443=>594,7444=>984,7446=>618,7447=>618,7448=>500, +7449=>578,7450=>578,7451=>521,7452=>571,7453=>663,7454=>853,7455=>625,7456=>586,7457=>831,7458=>523, +7459=>581,7462=>485,7463=>586,7464=>622,7465=>500,7466=>703,7467=>659,7468=>438,7469=>615,7470=>432, +7472=>470,7473=>387,7474=>387,7475=>465,7476=>474,7477=>211,7478=>211,7479=>439,7480=>361,7481=>563, +7482=>474,7483=>474,7484=>481,7485=>458,7486=>415,7487=>436,7488=>387,7489=>460,7490=>625,7491=>412, +7492=>412,7493=>431,7494=>641,7495=>431,7496=>431,7497=>431,7498=>431,7499=>347,7500=>347,7501=>431, +7502=>197,7503=>438,7504=>597,7505=>410,7506=>439,7507=>372,7508=>439,7509=>439,7510=>431,7511=>349, +7512=>410,7513=>416,7514=>597,7515=>451,7517=>405,7518=>386,7519=>389,7520=>443,7521=>365,7522=>197, +7523=>284,7524=>410,7525=>451,7526=>405,7527=>386,7528=>405,7529=>443,7530=>365,7543=>644,7544=>474, +7547=>491,7557=>462,7579=>431,7580=>372,7581=>372,7582=>439,7583=>347,7584=>339,7585=>313,7586=>431, +7587=>410,7588=>312,7589=>253,7590=>312,7591=>312,7592=>388,7593=>293,7594=>296,7595=>333,7596=>598, +7597=>597,7598=>505,7599=>505,7600=>403,7601=>439,7602=>488,7603=>379,7604=>356,7605=>349,7606=>524, +7607=>444,7608=>359,7609=>405,7610=>451,7611=>375,7612=>471,7613=>422,7614=>409,7615=>382,7620=>0, +7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>696,7681=>607,7682=>686,7683=>644,7684=>686, +7685=>644,7686=>686,7687=>644,7688=>660,7689=>533,7690=>747,7691=>644,7692=>747,7693=>644,7694=>747, +7695=>644,7696=>747,7697=>644,7698=>747,7699=>644,7700=>615,7701=>610,7702=>615,7703=>610,7704=>615, +7705=>610,7706=>615,7707=>610,7708=>615,7709=>610,7710=>615,7711=>391,7712=>738,7713=>644,7714=>753, +7715=>641,7716=>753,7717=>641,7718=>753,7719=>641,7720=>753,7721=>641,7722=>753,7723=>641,7724=>334, +7725=>308,7726=>334,7727=>308,7728=>697,7729=>598,7730=>697,7731=>598,7732=>697,7733=>598,7734=>573, +7735=>308,7736=>573,7737=>308,7738=>573,7739=>308,7740=>573,7741=>308,7742=>896,7743=>938,7744=>896, +7745=>938,7746=>896,7747=>938,7748=>753,7749=>641,7750=>753,7751=>641,7752=>753,7753=>641,7754=>753, +7755=>641,7756=>765,7757=>618,7758=>765,7759=>618,7760=>765,7761=>618,7762=>765,7763=>618,7764=>659, +7765=>644,7766=>659,7767=>644,7768=>693,7769=>444,7770=>693,7771=>444,7772=>693,7773=>444,7774=>693, +7775=>444,7776=>648,7777=>536,7778=>648,7779=>536,7780=>648,7781=>536,7782=>648,7783=>536,7784=>648, +7785=>536,7786=>614,7787=>430,7788=>614,7789=>430,7790=>614,7791=>430,7792=>614,7793=>430,7794=>730, +7795=>641,7796=>730,7797=>641,7798=>730,7799=>641,7800=>730,7801=>641,7802=>730,7803=>641,7804=>696, +7805=>586,7806=>696,7807=>586,7808=>993,7809=>831,7810=>993,7811=>831,7812=>993,7813=>831,7814=>993, +7815=>831,7816=>993,7817=>831,7818=>694,7819=>580,7820=>694,7821=>580,7822=>651,7823=>586,7824=>652, +7825=>523,7826=>652,7827=>523,7828=>652,7829=>523,7830=>641,7831=>430,7832=>831,7833=>586,7834=>607, +7835=>391,7838=>806,7839=>618,7840=>696,7841=>607,7842=>696,7843=>607,7844=>696,7845=>607,7846=>696, +7847=>607,7848=>696,7849=>607,7850=>696,7851=>607,7852=>696,7853=>607,7854=>696,7855=>607,7856=>696, +7857=>607,7858=>696,7859=>607,7860=>696,7861=>607,7862=>696,7863=>607,7864=>615,7865=>610,7866=>615, +7867=>610,7868=>615,7869=>610,7870=>615,7871=>610,7872=>615,7873=>610,7874=>615,7875=>610,7876=>615, +7877=>610,7878=>615,7879=>610,7880=>334,7881=>308,7882=>334,7883=>308,7884=>765,7885=>618,7886=>765, +7887=>618,7888=>765,7889=>618,7890=>765,7891=>618,7892=>765,7893=>618,7894=>765,7895=>618,7896=>765, +7897=>618,7898=>765,7899=>618,7900=>765,7901=>618,7902=>765,7903=>618,7904=>765,7905=>618,7906=>765, +7907=>618,7908=>730,7909=>641,7910=>730,7911=>641,7912=>730,7913=>641,7914=>730,7915=>641,7916=>730, +7917=>641,7918=>730,7919=>641,7920=>730,7921=>641,7922=>651,7923=>586,7924=>651,7925=>586,7926=>651, +7927=>586,7928=>651,7929=>586,7936=>618,7937=>618,7938=>618,7939=>618,7940=>618,7941=>618,7942=>618, +7943=>618,7944=>696,7945=>696,7946=>937,7947=>939,7948=>841,7949=>866,7950=>751,7951=>773,7952=>501, +7953=>501,7954=>501,7955=>501,7956=>501,7957=>501,7960=>712,7961=>715,7962=>989,7963=>986,7964=>920, +7965=>947,7968=>641,7969=>641,7970=>641,7971=>641,7972=>641,7973=>641,7974=>641,7975=>641,7976=>851, +7977=>856,7978=>1125,7979=>1125,7980=>1062,7981=>1085,7982=>948,7983=>956,7984=>351,7985=>351,7986=>351, +7987=>351,7988=>351,7989=>351,7990=>351,7991=>351,7992=>435,7993=>440,7994=>699,7995=>707,7996=>641, +7997=>664,7998=>544,7999=>544,8000=>618,8001=>618,8002=>618,8003=>618,8004=>618,8005=>618,8008=>802, +8009=>839,8010=>1099,8011=>1101,8012=>947,8013=>974,8016=>607,8017=>607,8018=>607,8019=>607,8020=>607, +8021=>607,8022=>607,8023=>607,8025=>837,8027=>1065,8029=>1079,8031=>944,8032=>782,8033=>782,8034=>782, +8035=>782,8036=>782,8037=>782,8038=>782,8039=>782,8040=>817,8041=>862,8042=>1121,8043=>1126,8044=>968, +8045=>994,8046=>925,8047=>968,8048=>618,8049=>618,8050=>501,8051=>501,8052=>641,8053=>641,8054=>351, +8055=>351,8056=>618,8057=>618,8058=>607,8059=>607,8060=>782,8061=>782,8064=>618,8065=>618,8066=>618, +8067=>618,8068=>618,8069=>618,8070=>618,8071=>618,8072=>696,8073=>696,8074=>937,8075=>939,8076=>841, +8077=>866,8078=>751,8079=>773,8080=>641,8081=>641,8082=>641,8083=>641,8084=>641,8085=>641,8086=>641, +8087=>641,8088=>851,8089=>856,8090=>1125,8091=>1125,8092=>1062,8093=>1085,8094=>948,8095=>956,8096=>782, +8097=>782,8098=>782,8099=>782,8100=>782,8101=>782,8102=>782,8103=>782,8104=>817,8105=>862,8106=>1121, +8107=>1126,8108=>968,8109=>994,8110=>925,8111=>968,8112=>618,8113=>618,8114=>618,8115=>618,8116=>618, +8118=>618,8119=>618,8120=>696,8121=>696,8122=>789,8123=>717,8124=>696,8125=>450,8126=>450,8127=>450, +8128=>450,8129=>450,8130=>641,8131=>641,8132=>641,8134=>641,8135=>641,8136=>836,8137=>761,8138=>972, +8139=>908,8140=>753,8141=>450,8142=>450,8143=>450,8144=>351,8145=>351,8146=>351,8147=>351,8150=>351, +8151=>351,8152=>334,8153=>334,8154=>559,8155=>507,8157=>450,8158=>450,8159=>450,8160=>607,8161=>607, +8162=>607,8163=>607,8164=>644,8165=>644,8166=>607,8167=>607,8168=>651,8169=>651,8170=>918,8171=>882, +8172=>754,8173=>450,8174=>450,8175=>450,8178=>782,8179=>782,8180=>782,8182=>782,8183=>782,8184=>958, +8185=>801,8186=>976,8187=>804,8188=>765,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900, +8196=>296,8197=>225,8198=>150,8199=>626,8200=>342,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0, +8206=>0,8207=>0,8208=>374,8209=>374,8210=>626,8213=>900,8214=>450,8215=>450,8219=>342,8223=>591, +8227=>575,8228=>342,8229=>616,8231=>313,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180, +8241=>1717,8242=>237,8243=>402,8244=>567,8245=>237,8246=>402,8247=>567,8248=>659,8251=>875,8252=>564, +8253=>522,8254=>450,8255=>745,8256=>745,8257=>296,8258=>920,8259=>450,8260=>150,8261=>411,8262=>411, +8263=>927,8264=>746,8265=>746,8266=>461,8267=>618,8268=>450,8269=>450,8270=>470,8271=>360,8272=>745, +8273=>470,8274=>500,8275=>754,8276=>745,8277=>754,8278=>615,8279=>731,8280=>754,8281=>754,8282=>342, +8283=>784,8284=>754,8285=>342,8286=>342,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0, +8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>394,8305=>197,8308=>394,8309=>394, +8310=>394,8311=>394,8312=>394,8313=>394,8314=>475,8315=>475,8316=>475,8317=>259,8318=>259,8319=>410, +8320=>394,8321=>394,8322=>394,8323=>394,8324=>394,8325=>394,8326=>394,8327=>394,8328=>394,8329=>394, +8330=>475,8331=>475,8332=>475,8333=>259,8334=>259,8336=>412,8337=>431,8338=>439,8339=>371,8340=>431, +8352=>836,8353=>626,8354=>626,8355=>626,8356=>626,8357=>938,8358=>753,8359=>1339,8360=>1084,8361=>993, +8362=>768,8363=>642,8365=>626,8366=>614,8367=>1252,8368=>626,8369=>626,8370=>626,8371=>626,8372=>773, +8373=>626,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>995,8449=>995, +8450=>660,8451=>1090,8452=>807,8453=>1002,8454=>1033,8455=>626,8456=>628,8457=>856,8459=>965,8460=>822, +8461=>799,8462=>641,8463=>641,8464=>537,8465=>627,8466=>771,8467=>424,8468=>876,8469=>753,8470=>1083, +8471=>900,8472=>627,8473=>675,8474=>765,8475=>844,8476=>732,8477=>721,8478=>807,8479=>639,8480=>917, +8481=>1115,8483=>751,8484=>679,8485=>560,8486=>765,8487=>692,8488=>686,8489=>272,8490=>697,8491=>696, +8492=>835,8493=>736,8494=>769,8495=>572,8496=>656,8497=>727,8498=>615,8499=>1065,8500=>418,8501=>714, +8502=>658,8503=>444,8504=>615,8505=>342,8506=>851,8507=>1232,8508=>710,8509=>663,8510=>589,8511=>776, +8512=>756,8513=>707,8514=>518,8515=>573,8516=>684,8517=>747,8518=>644,8519=>610,8520=>308,8521=>308, +8523=>785,8526=>492,8531=>932,8532=>932,8533=>932,8534=>932,8535=>932,8536=>932,8537=>932,8538=>932, +8539=>932,8540=>932,8541=>932,8542=>932,8543=>554,8544=>334,8545=>593,8546=>851,8547=>989,8548=>696, +8549=>989,8550=>1247,8551=>1505,8552=>1008,8553=>694,8554=>1008,8555=>1266,8556=>573,8557=>660,8558=>747, +8559=>896,8560=>308,8561=>546,8562=>785,8563=>885,8564=>586,8565=>866,8566=>1104,8567=>1342,8568=>872, +8569=>580,8570=>872,8571=>1110,8572=>308,8573=>533,8574=>644,8575=>938,8576=>1160,8577=>747,8578=>1160, +8579=>660,8580=>533,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754, +8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754, +8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754, +8620=>754,8621=>754,8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754, +8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754, +8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754, +8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754, +8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754, +8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754, +8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754, +8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754, +8700=>754,8701=>754,8702=>754,8703=>754,8704=>696,8705=>626,8706=>489,8707=>615,8708=>615,8709=>771, +8710=>627,8711=>627,8712=>807,8713=>807,8714=>675,8715=>807,8716=>807,8717=>675,8718=>572,8719=>708, +8720=>708,8721=>646,8722=>754,8723=>754,8724=>626,8725=>329,8726=>626,8727=>754,8728=>563,8729=>342, +8730=>600,8731=>600,8732=>600,8733=>641,8734=>750,8735=>754,8736=>807,8737=>807,8738=>754,8739=>450, +8740=>450,8741=>450,8742=>450,8743=>730,8744=>730,8745=>730,8746=>730,8747=>549,8748=>835,8749=>1165, +8750=>506,8751=>879,8752=>1181,8753=>506,8754=>506,8755=>506,8756=>626,8757=>626,8758=>264,8759=>626, +8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8766=>754,8767=>754,8768=>337,8769=>754, +8770=>754,8771=>754,8772=>754,8773=>754,8774=>754,8775=>754,8776=>754,8777=>754,8778=>754,8779=>754, +8780=>754,8781=>754,8782=>754,8783=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>956,8789=>956, +8790=>754,8791=>754,8792=>754,8793=>754,8794=>754,8795=>754,8796=>754,8797=>754,8798=>754,8799=>754, +8800=>754,8801=>754,8802=>754,8803=>754,8804=>754,8805=>754,8806=>754,8807=>754,8808=>756,8809=>756, +8810=>942,8811=>942,8812=>450,8813=>754,8814=>754,8815=>754,8816=>754,8817=>754,8818=>754,8819=>754, +8820=>754,8821=>754,8822=>754,8823=>754,8824=>754,8825=>754,8826=>754,8827=>754,8828=>754,8829=>754, +8830=>754,8831=>754,8832=>754,8833=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754, +8840=>754,8841=>754,8842=>754,8843=>754,8844=>730,8845=>730,8846=>730,8847=>754,8848=>754,8849=>754, +8850=>754,8851=>716,8852=>716,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754, +8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>822,8867=>822,8868=>822,8869=>822, +8870=>488,8871=>488,8872=>822,8873=>822,8874=>822,8875=>822,8876=>822,8877=>822,8878=>822,8879=>822, +8880=>754,8881=>754,8882=>754,8883=>754,8884=>754,8885=>754,8886=>900,8887=>900,8888=>754,8889=>754, +8890=>488,8891=>730,8892=>730,8893=>730,8894=>754,8895=>754,8896=>758,8897=>758,8898=>758,8899=>758, +8900=>444,8901=>342,8902=>563,8903=>754,8904=>900,8905=>900,8906=>900,8907=>900,8908=>900,8909=>754, +8910=>730,8911=>730,8912=>754,8913=>754,8914=>754,8915=>754,8916=>754,8917=>754,8918=>754,8919=>754, +8920=>1280,8921=>1280,8922=>754,8923=>754,8924=>754,8925=>754,8926=>754,8927=>754,8928=>754,8929=>754, +8930=>754,8931=>754,8932=>754,8933=>754,8934=>754,8935=>754,8936=>754,8937=>754,8938=>754,8939=>754, +8940=>754,8941=>754,8942=>900,8943=>900,8944=>900,8945=>900,8946=>1042,8947=>807,8948=>675,8949=>807, +8950=>807,8951=>675,8952=>807,8953=>807,8954=>1042,8955=>807,8956=>675,8957=>807,8958=>675,8959=>807, +8960=>542,8961=>542,8962=>644,8963=>754,8964=>754,8965=>754,8966=>754,8967=>439,8968=>411,8969=>411, +8970=>411,8971=>411,8972=>728,8973=>728,8974=>728,8975=>728,8976=>754,8977=>484,8984=>835,8985=>754, +8988=>422,8989=>422,8990=>422,8991=>422,8992=>549,8993=>549,8996=>1037,8997=>1037,8998=>1272,8999=>1037, +9000=>1299,9003=>1272,9004=>786,9075=>351,9076=>644,9077=>782,9082=>618,9085=>776,9095=>1037,9108=>786, +9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450, +9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>549, +9166=>754,9167=>850,9187=>786,9189=>692,9250=>644,9251=>644,9312=>762,9313=>762,9314=>762,9315=>762, +9316=>762,9317=>762,9318=>762,9319=>762,9320=>762,9321=>762,9600=>692,9601=>692,9602=>692,9603=>692, +9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692, +9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692, +9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850, +9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610, +9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452, +9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452, +9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785, +9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785, +9684=>785,9685=>785,9686=>474,9687=>474,9688=>756,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348, +9694=>348,9695=>348,9696=>692,9697=>692,9698=>692,9699=>692,9700=>692,9701=>692,9702=>575,9703=>850, +9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850, +9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747, +9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9729=>900,9730=>807,9731=>807,9732=>807,9733=>807, +9734=>807,9735=>515,9736=>806,9737=>807,9738=>799,9739=>799,9740=>604,9741=>911,9742=>1121,9743=>1125, +9744=>807,9745=>807,9746=>807,9747=>479,9748=>807,9749=>807,9750=>807,9751=>807,9752=>807,9753=>807, +9754=>807,9755=>807,9756=>807,9757=>548,9758=>807,9759=>548,9760=>807,9761=>807,9762=>807,9763=>807, +9764=>602,9765=>671,9766=>584,9767=>705,9768=>490,9769=>807,9770=>807,9771=>807,9772=>639,9773=>807, +9774=>807,9775=>807,9776=>807,9777=>807,9778=>807,9779=>807,9780=>807,9781=>807,9782=>807,9783=>807, +9784=>807,9785=>807,9786=>807,9787=>807,9788=>807,9789=>807,9790=>807,9791=>552,9792=>658,9793=>658, +9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9800=>807,9801=>807,9802=>807,9803=>807, +9804=>807,9805=>807,9806=>807,9807=>807,9808=>807,9809=>807,9810=>807,9811=>807,9812=>807,9813=>807, +9814=>807,9815=>807,9816=>807,9817=>807,9818=>807,9819=>807,9820=>807,9821=>807,9822=>807,9823=>807, +9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9832=>807,9833=>424, +9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,9840=>673,9841=>689,9842=>807,9843=>807, +9844=>807,9845=>807,9846=>807,9847=>807,9848=>807,9849=>807,9850=>807,9851=>807,9852=>807,9853=>807, +9854=>807,9855=>807,9856=>782,9857=>782,9858=>782,9859=>782,9860=>782,9861=>782,9862=>807,9863=>807, +9864=>807,9865=>807,9866=>807,9867=>807,9868=>807,9869=>807,9870=>807,9871=>807,9872=>807,9873=>807, +9874=>807,9875=>807,9876=>807,9877=>487,9878=>807,9879=>807,9880=>807,9881=>807,9882=>807,9883=>807, +9884=>807,9888=>807,9889=>632,9890=>903,9891=>977,9892=>1028,9893=>811,9894=>754,9895=>754,9896=>754, +9897=>754,9898=>754,9899=>754,9900=>754,9901=>754,9902=>754,9903=>754,9904=>759,9905=>754,9906=>658, +9907=>659,9908=>659,9909=>659,9910=>765,9911=>659,9912=>659,9985=>754,9986=>754,9987=>754,9988=>754, +9990=>754,9991=>754,9992=>754,9993=>754,9996=>754,9997=>754,9998=>754,9999=>754,10000=>754,10001=>754, +10002=>754,10003=>754,10004=>754,10005=>754,10006=>754,10007=>754,10008=>754,10009=>754,10010=>754,10011=>754, +10012=>754,10013=>754,10014=>754,10015=>754,10016=>754,10017=>754,10018=>754,10019=>754,10020=>754,10021=>754, +10022=>754,10023=>754,10025=>754,10026=>754,10027=>754,10028=>754,10029=>754,10030=>754,10031=>754,10032=>754, +10033=>754,10034=>754,10035=>754,10036=>754,10037=>754,10038=>754,10039=>754,10040=>754,10041=>754,10042=>754, +10043=>754,10044=>754,10045=>754,10046=>754,10047=>754,10048=>754,10049=>754,10050=>754,10051=>754,10052=>754, +10053=>754,10054=>754,10055=>754,10056=>754,10057=>754,10058=>754,10059=>754,10061=>807,10063=>807,10064=>807, +10065=>807,10066=>807,10070=>807,10072=>754,10073=>754,10074=>754,10075=>290,10076=>290,10077=>484,10078=>484, +10081=>754,10082=>754,10083=>754,10084=>754,10085=>754,10086=>754,10087=>754,10088=>754,10089=>754,10090=>754, +10091=>754,10092=>754,10093=>754,10094=>754,10095=>754,10096=>754,10097=>754,10098=>754,10099=>754,10100=>754, +10101=>754,10102=>762,10103=>762,10104=>762,10105=>762,10106=>762,10107=>762,10108=>762,10109=>762,10110=>762, +10111=>762,10112=>754,10113=>754,10114=>754,10115=>754,10116=>754,10117=>754,10118=>754,10119=>754,10120=>754, +10121=>754,10122=>754,10123=>754,10124=>754,10125=>754,10126=>754,10127=>754,10128=>754,10129=>754,10130=>754, +10131=>754,10132=>754,10136=>754,10137=>754,10138=>754,10139=>754,10140=>754,10141=>754,10142=>754,10143=>754, +10144=>754,10145=>754,10146=>754,10147=>754,10148=>754,10149=>754,10150=>754,10151=>754,10152=>754,10153=>754, +10154=>754,10155=>754,10156=>754,10157=>754,10158=>754,10159=>754,10161=>754,10162=>754,10163=>754,10164=>754, +10165=>754,10166=>754,10167=>754,10168=>754,10169=>754,10170=>754,10171=>754,10172=>754,10173=>754,10174=>754, +10181=>411,10182=>411,10208=>444,10214=>438,10215=>438,10216=>411,10217=>411,10218=>648,10219=>648,10224=>754, +10225=>754,10226=>754,10227=>754,10228=>1042,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290, +10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>703,10241=>703,10242=>703,10243=>703,10244=>703, +10245=>703,10246=>703,10247=>703,10248=>703,10249=>703,10250=>703,10251=>703,10252=>703,10253=>703,10254=>703, +10255=>703,10256=>703,10257=>703,10258=>703,10259=>703,10260=>703,10261=>703,10262=>703,10263=>703,10264=>703, +10265=>703,10266=>703,10267=>703,10268=>703,10269=>703,10270=>703,10271=>703,10272=>703,10273=>703,10274=>703, +10275=>703,10276=>703,10277=>703,10278=>703,10279=>703,10280=>703,10281=>703,10282=>703,10283=>703,10284=>703, +10285=>703,10286=>703,10287=>703,10288=>703,10289=>703,10290=>703,10291=>703,10292=>703,10293=>703,10294=>703, +10295=>703,10296=>703,10297=>703,10298=>703,10299=>703,10300=>703,10301=>703,10302=>703,10303=>703,10304=>703, +10305=>703,10306=>703,10307=>703,10308=>703,10309=>703,10310=>703,10311=>703,10312=>703,10313=>703,10314=>703, +10315=>703,10316=>703,10317=>703,10318=>703,10319=>703,10320=>703,10321=>703,10322=>703,10323=>703,10324=>703, +10325=>703,10326=>703,10327=>703,10328=>703,10329=>703,10330=>703,10331=>703,10332=>703,10333=>703,10334=>703, +10335=>703,10336=>703,10337=>703,10338=>703,10339=>703,10340=>703,10341=>703,10342=>703,10343=>703,10344=>703, +10345=>703,10346=>703,10347=>703,10348=>703,10349=>703,10350=>703,10351=>703,10352=>703,10353=>703,10354=>703, +10355=>703,10356=>703,10357=>703,10358=>703,10359=>703,10360=>703,10361=>703,10362=>703,10363=>703,10364=>703, +10365=>703,10366=>703,10367=>703,10368=>703,10369=>703,10370=>703,10371=>703,10372=>703,10373=>703,10374=>703, +10375=>703,10376=>703,10377=>703,10378=>703,10379=>703,10380=>703,10381=>703,10382=>703,10383=>703,10384=>703, +10385=>703,10386=>703,10387=>703,10388=>703,10389=>703,10390=>703,10391=>703,10392=>703,10393=>703,10394=>703, +10395=>703,10396=>703,10397=>703,10398=>703,10399=>703,10400=>703,10401=>703,10402=>703,10403=>703,10404=>703, +10405=>703,10406=>703,10407=>703,10408=>703,10409=>703,10410=>703,10411=>703,10412=>703,10413=>703,10414=>703, +10415=>703,10416=>703,10417=>703,10418=>703,10419=>703,10420=>703,10421=>703,10422=>703,10423=>703,10424=>703, +10425=>703,10426=>703,10427=>703,10428=>703,10429=>703,10430=>703,10431=>703,10432=>703,10433=>703,10434=>703, +10435=>703,10436=>703,10437=>703,10438=>703,10439=>703,10440=>703,10441=>703,10442=>703,10443=>703,10444=>703, +10445=>703,10446=>703,10447=>703,10448=>703,10449=>703,10450=>703,10451=>703,10452=>703,10453=>703,10454=>703, +10455=>703,10456=>703,10457=>703,10458=>703,10459=>703,10460=>703,10461=>703,10462=>703,10463=>703,10464=>703, +10465=>703,10466=>703,10467=>703,10468=>703,10469=>703,10470=>703,10471=>703,10472=>703,10473=>703,10474=>703, +10475=>703,10476=>703,10477=>703,10478=>703,10479=>703,10480=>703,10481=>703,10482=>703,10483=>703,10484=>703, +10485=>703,10486=>703,10487=>703,10488=>703,10489=>703,10490=>703,10491=>703,10492=>703,10493=>703,10494=>703, +10495=>703,10502=>754,10503=>754,10506=>754,10507=>754,10560=>754,10561=>754,10627=>678,10628=>678,10702=>754, +10703=>941,10704=>941,10705=>900,10706=>900,10707=>900,10708=>900,10709=>900,10731=>444,10746=>754,10747=>754, +10752=>900,10753=>900,10754=>900,10764=>1495,10765=>506,10766=>506,10767=>506,10768=>506,10769=>506,10770=>506, +10771=>506,10772=>506,10773=>506,10774=>506,10775=>506,10776=>506,10777=>506,10778=>506,10779=>506,10780=>506, +10799=>754,10877=>754,10878=>754,10879=>754,10880=>754,10881=>754,10882=>754,10883=>754,10884=>754,10885=>754, +10886=>754,10887=>754,10888=>754,10889=>754,10890=>754,10891=>754,10892=>754,10893=>754,10894=>754,10895=>754, +10896=>754,10897=>754,10898=>754,10899=>754,10900=>754,10901=>754,10902=>754,10903=>754,10904=>754,10905=>754, +10906=>754,10907=>754,10908=>754,10909=>754,10910=>754,10911=>754,10912=>754,10926=>754,10927=>754,10928=>754, +10929=>754,10930=>754,10931=>754,10932=>754,10933=>754,10934=>754,10935=>754,10936=>754,10937=>754,10938=>754, +11001=>754,11002=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754, +11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754, +11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11039=>782, +11040=>782,11041=>786,11042=>786,11043=>786,11044=>1007,11091=>782,11092=>782,11360=>573,11361=>324,11362=>573, +11363=>659,11364=>693,11365=>607,11366=>430,11367=>860,11368=>641,11369=>697,11370=>598,11371=>652,11372=>523, +11373=>774,11374=>896,11375=>696,11377=>700,11378=>1099,11379=>950,11380=>586,11381=>628,11382=>508,11383=>704, +11385=>484,11386=>618,11387=>502,11388=>197,11389=>438,11800=>527,11810=>411,11811=>411,11812=>411,11813=>411, +11822=>522,19904=>807,19905=>807,19906=>807,19907=>807,19908=>807,19909=>807,19910=>807,19911=>807,19912=>807, +19913=>807,19914=>807,19915=>807,19916=>807,19917=>807,19918=>807,19919=>807,19920=>807,19921=>807,19922=>807, +19923=>807,19924=>807,19925=>807,19926=>807,19927=>807,19928=>807,19929=>807,19930=>807,19931=>807,19932=>807, +19933=>807,19934=>807,19935=>807,19936=>807,19937=>807,19938=>807,19939=>807,19940=>807,19941=>807,19942=>807, +19943=>807,19944=>807,19945=>807,19946=>807,19947=>807,19948=>807,19949=>807,19950=>807,19951=>807,19952=>807, +19953=>807,19954=>807,19955=>807,19956=>807,19957=>807,19958=>807,19959=>807,19960=>807,19961=>807,19962=>807, +19963=>807,19964=>807,19965=>807,19966=>807,19967=>807,42564=>648,42565=>536,42566=>392,42567=>396,42572=>1265, +42573=>1055,42576=>1110,42577=>924,42580=>1056,42581=>875,42582=>990,42583=>872,42594=>990,42595=>846,42596=>986, +42597=>823,42598=>1134,42599=>896,42600=>765,42601=>618,42602=>933,42603=>781,42604=>1266,42605=>995,42606=>865, +42634=>849,42635=>673,42636=>614,42637=>521,42644=>727,42645=>641,42760=>450,42761=>450,42762=>450,42763=>450, +42764=>450,42765=>450,42766=>450,42767=>450,42768=>450,42769=>450,42770=>450,42771=>450,42772=>450,42773=>450, +42774=>450,42779=>360,42780=>360,42781=>258,42782=>258,42783=>258,42790=>753,42791=>641,42792=>928,42793=>771, +42794=>626,42795=>501,42800=>502,42801=>536,42802=>1214,42803=>946,42804=>1156,42805=>958,42806=>1120,42807=>947, +42808=>971,42809=>830,42810=>971,42811=>830,42812=>932,42813=>830,42814=>628,42815=>494,42822=>765,42823=>488, +42824=>614,42825=>478,42826=>826,42827=>732,42830=>1266,42831=>995,42880=>573,42881=>308,42882=>753,42883=>641, +42889=>360,42890=>356,42891=>410,42892=>275,43003=>615,43004=>659,43005=>896,43006=>334,43007=>1192,62917=>618, +64256=>749,64257=>708,64258=>708,64259=>1024,64260=>1024,64261=>727,64262=>917,64275=>1249,64276=>1245,64277=>1240, +64278=>1245,64279=>1542,64285=>308,64286=>0,64287=>597,64288=>647,64289=>867,64290=>801,64291=>889,64292=>867, +64293=>844,64294=>889,64295=>889,64296=>878,64297=>754,64298=>854,64299=>854,64300=>854,64301=>854,64302=>676, +64303=>676,64304=>676,64305=>605,64306=>483,64307=>589,64308=>641,64309=>308,64310=>442,64312=>651,64313=>420, +64314=>584,64315=>584,64316=>611,64318=>698,64320=>447,64321=>696,64323=>646,64324=>618,64326=>676,64327=>656, +64328=>584,64329=>854,64330=>676,64331=>308,64332=>605,64333=>584,64334=>618,64335=>676,65024=>0,65025=>0, +65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0, +65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65529=>0,65530=>0, +65531=>0,65532=>0,65533=>1002); +$enc=''; +$diff=''; +$file='dejavusanscondensedbi.z'; +$ctg='dejavusanscondensedbi.ctg.z'; +$originalsize=493196; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedbi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedbi.z new file mode 100755 index 00000000..7d570707 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedbi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedi.ctg.z new file mode 100755 index 00000000..ac628b3e Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedi.php new file mode 100755 index 00000000..705da053 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedi.php @@ -0,0 +1,471 @@ +928,'Descent'=>-236,'CapHeight'=>-39,'Flags'=>96,'FontBBox'=>'[-914 -350 1493 1068]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>286,33=>360,34=>414,35=>754,36=>572,37=>855,38=>702,39=>247,40=>351, +41=>351,42=>450,43=>754,44=>286,45=>325,46=>286,47=>303,48=>572,49=>572,50=>572, +51=>572,52=>572,53=>572,54=>572,55=>572,56=>572,57=>572,58=>303,59=>303,60=>754, +61=>754,62=>754,63=>478,64=>900,65=>615,66=>617,67=>628,68=>693,69=>568,70=>518, +71=>697,72=>677,73=>265,74=>265,75=>590,76=>501,77=>776,78=>673,79=>708,80=>542, +81=>708,82=>625,83=>571,84=>549,85=>659,86=>615,87=>890,88=>616,89=>549,90=>616, +91=>351,92=>303,93=>351,94=>754,95=>450,96=>450,97=>551,98=>571,99=>495,100=>571, +101=>554,102=>316,103=>571,104=>570,105=>250,106=>250,107=>521,108=>250,109=>876,110=>570, +111=>550,112=>571,113=>571,114=>370,115=>469,116=>353,117=>570,118=>532,119=>736,120=>532, +121=>532,122=>472,123=>572,124=>303,125=>572,126=>754,8364=>572,8218=>286,402=>316,8222=>466, +8230=>900,8224=>450,8225=>450,710=>450,8240=>1215,352=>571,8249=>360,338=>962,381=>616,8216=>286, +8217=>286,8220=>466,8221=>466,8226=>531,8211=>450,8212=>900,732=>450,8482=>900,353=>469,8250=>360, +339=>925,382=>472,376=>549,160=>286,161=>360,162=>572,163=>572,164=>572,165=>572,166=>303, +167=>450,168=>450,169=>900,170=>424,171=>555,172=>754,173=>325,174=>900,175=>450,176=>450, +177=>754,178=>360,179=>360,180=>450,181=>572,182=>572,183=>286,184=>450,185=>360,186=>424, +187=>555,188=>872,189=>872,190=>872,191=>478,192=>615,193=>615,194=>615,195=>615,196=>615, +197=>615,198=>876,199=>628,200=>568,201=>568,202=>568,203=>568,204=>265,205=>265,206=>265, +207=>265,208=>697,209=>673,210=>708,211=>708,212=>708,213=>708,214=>708,215=>754,216=>708, +217=>659,218=>659,219=>659,220=>659,221=>549,222=>547,223=>567,224=>551,225=>551,226=>551, +227=>551,228=>551,229=>551,230=>896,231=>495,232=>554,233=>554,234=>554,235=>554,236=>250, +237=>250,238=>250,239=>250,240=>550,241=>570,242=>550,243=>550,244=>550,245=>550,246=>550, +247=>754,248=>550,249=>570,250=>570,251=>570,252=>570,253=>532,254=>571,255=>532,256=>615, +257=>551,258=>615,259=>551,260=>615,261=>551,262=>628,263=>495,264=>628,265=>495,266=>628, +267=>495,268=>628,269=>495,270=>693,271=>571,272=>697,273=>571,274=>568,275=>554,276=>568, +277=>554,278=>568,279=>554,280=>568,281=>554,282=>568,283=>554,284=>697,285=>571,286=>697, +287=>571,288=>697,289=>571,290=>697,291=>571,292=>677,293=>570,294=>824,295=>625,296=>265, +297=>250,298=>265,299=>250,300=>265,301=>250,302=>265,303=>250,304=>265,305=>250,306=>531, +307=>500,308=>265,309=>250,310=>590,311=>521,312=>521,313=>501,314=>250,315=>501,316=>250, +317=>501,318=>250,319=>501,320=>250,321=>505,322=>258,323=>673,324=>570,325=>673,326=>570, +327=>673,328=>570,329=>732,330=>673,331=>570,332=>708,333=>550,334=>708,335=>550,336=>708, +337=>550,340=>625,341=>370,342=>625,343=>370,344=>625,345=>370,346=>571,347=>469,348=>571, +349=>469,350=>571,351=>469,354=>549,355=>353,356=>549,357=>353,358=>549,359=>353,360=>659, +361=>570,362=>659,363=>570,364=>659,365=>570,366=>659,367=>570,368=>659,369=>570,370=>659, +371=>570,372=>890,373=>736,374=>549,375=>532,377=>616,378=>472,379=>616,380=>472,383=>316, +384=>571,385=>661,386=>617,387=>571,388=>617,389=>571,390=>633,391=>628,392=>495,393=>697, +394=>737,395=>617,396=>571,397=>550,398=>568,399=>708,400=>553,401=>518,403=>697,404=>618, +405=>885,406=>318,407=>265,408=>671,409=>521,410=>250,411=>532,412=>876,413=>673,414=>570, +415=>708,416=>822,417=>550,418=>844,419=>663,420=>586,421=>571,422=>625,423=>571,424=>469, +425=>568,426=>302,427=>353,428=>549,429=>353,430=>549,431=>754,432=>570,433=>688,434=>648, +435=>669,436=>657,437=>616,438=>472,439=>599,440=>599,441=>520,442=>472,443=>572,444=>599, +445=>520,446=>459,447=>571,448=>265,449=>443,450=>413,451=>266,452=>1310,453=>1165,454=>1043, +455=>767,456=>751,457=>500,458=>938,459=>923,460=>820,461=>615,462=>551,463=>265,464=>250, +465=>708,466=>550,467=>659,468=>570,469=>659,470=>570,471=>659,472=>570,473=>659,474=>570, +475=>659,476=>570,477=>554,478=>615,479=>551,480=>615,481=>551,482=>876,483=>896,484=>697, +485=>571,486=>697,487=>571,488=>590,489=>521,490=>708,491=>550,492=>708,493=>550,494=>599, +495=>472,496=>250,497=>1310,498=>1165,499=>1043,500=>697,501=>571,502=>1001,503=>614,504=>673, +505=>570,506=>615,507=>551,508=>876,509=>896,510=>708,511=>550,512=>615,513=>551,514=>615, +515=>551,516=>568,517=>554,518=>568,519=>554,520=>265,521=>250,522=>265,523=>250,524=>708, +525=>550,526=>708,527=>550,528=>625,529=>370,530=>625,531=>370,532=>659,533=>570,534=>659, +535=>570,536=>571,537=>469,538=>549,539=>353,540=>564,541=>469,542=>677,543=>570,544=>662, +545=>754,546=>628,547=>549,548=>616,549=>472,550=>615,551=>551,552=>568,553=>554,554=>708, +555=>550,556=>708,557=>550,558=>708,559=>550,560=>708,561=>550,562=>549,563=>532,564=>427, +565=>758,566=>429,567=>250,568=>898,569=>898,570=>615,571=>628,572=>495,573=>501,574=>549, +575=>469,576=>472,577=>542,578=>431,579=>617,580=>659,581=>615,582=>568,583=>554,584=>265, +585=>250,586=>703,587=>571,588=>625,589=>370,590=>549,591=>532,592=>551,593=>571,594=>571, +595=>571,596=>495,597=>495,598=>571,599=>654,600=>554,601=>554,602=>759,603=>490,604=>490, +605=>698,606=>598,607=>293,608=>626,609=>571,610=>566,611=>536,612=>536,613=>570,614=>570, +615=>570,616=>334,617=>348,618=>334,619=>356,620=>438,621=>250,622=>635,623=>876,624=>876, +625=>876,626=>581,627=>578,628=>570,629=>550,630=>772,631=>655,632=>593,633=>422,634=>422, +635=>422,636=>422,637=>422,638=>477,639=>477,640=>541,641=>541,642=>469,643=>302,644=>302, +645=>415,646=>302,647=>353,648=>353,649=>570,650=>556,651=>538,652=>532,653=>736,654=>532, +655=>549,656=>472,657=>472,658=>520,659=>520,660=>459,661=>459,662=>459,663=>459,664=>708, +665=>521,666=>598,667=>637,668=>588,669=>263,670=>600,671=>456,672=>654,673=>459,674=>459, +675=>913,676=>952,677=>911,678=>742,679=>549,680=>700,681=>763,682=>576,683=>589,684=>463, +685=>463,686=>513,687=>597,688=>359,689=>359,690=>157,691=>233,692=>266,693=>266,694=>341, +695=>463,696=>335,697=>250,698=>414,699=>286,700=>286,701=>286,702=>276,703=>276,704=>333, +705=>333,706=>450,707=>450,708=>450,709=>450,711=>450,712=>247,713=>450,714=>450,715=>450, +716=>247,717=>450,718=>450,719=>450,720=>303,721=>303,722=>276,723=>276,724=>450,725=>450, +726=>351,727=>286,728=>450,729=>450,730=>450,731=>450,733=>450,734=>284,735=>450,736=>383, +737=>149,738=>335,739=>399,740=>333,741=>444,742=>444,743=>444,744=>444,745=>444,748=>450, +749=>450,750=>466,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>589,881=>511,882=>775, +883=>583,884=>250,885=>250,886=>673,887=>584,890=>450,891=>494,892=>495,893=>494,894=>303, +900=>450,901=>450,902=>615,903=>286,904=>690,905=>813,906=>391,908=>755,910=>773,911=>814, +912=>304,913=>615,914=>617,915=>501,916=>615,917=>568,918=>616,919=>677,920=>708,921=>265, +922=>590,923=>615,924=>776,925=>673,926=>568,927=>708,928=>677,929=>542,931=>568,932=>549, +933=>549,934=>708,935=>616,936=>708,937=>688,938=>265,939=>549,940=>593,941=>486,942=>570, +943=>304,944=>521,945=>593,946=>574,947=>532,948=>550,949=>486,950=>489,951=>570,952=>550, +953=>304,954=>530,955=>532,956=>572,957=>502,958=>501,959=>550,960=>542,961=>571,962=>528, +963=>570,964=>542,965=>521,966=>593,967=>532,968=>593,969=>753,970=>304,971=>521,972=>550, +973=>521,974=>753,975=>590,976=>553,977=>557,978=>628,979=>758,980=>628,981=>593,982=>753, +983=>597,984=>708,985=>550,986=>583,987=>528,988=>518,989=>413,990=>593,991=>593,992=>778, +993=>564,994=>840,995=>753,996=>682,997=>593,998=>712,999=>553,1000=>618,1001=>546,1002=>690, +1003=>563,1004=>629,1005=>550,1006=>549,1007=>482,1008=>597,1009=>571,1010=>495,1011=>250,1012=>708, +1013=>554,1014=>554,1015=>547,1016=>571,1017=>628,1018=>776,1019=>585,1020=>571,1021=>633,1022=>628, +1023=>633,1024=>568,1025=>568,1026=>708,1027=>501,1028=>628,1029=>571,1030=>265,1031=>265,1032=>265, +1033=>984,1034=>940,1035=>708,1036=>639,1037=>673,1038=>548,1039=>677,1040=>615,1041=>617,1042=>617, +1043=>501,1044=>703,1045=>568,1046=>969,1047=>577,1048=>673,1049=>673,1050=>639,1051=>677,1052=>776, +1053=>677,1054=>708,1055=>677,1056=>542,1057=>628,1058=>549,1059=>548,1060=>774,1061=>616,1062=>699, +1063=>617,1064=>962,1065=>984,1066=>749,1067=>736,1068=>617,1069=>628,1070=>971,1071=>625,1072=>551, +1073=>555,1074=>530,1075=>473,1076=>622,1077=>554,1078=>811,1079=>479,1080=>584,1081=>584,1082=>543, +1083=>575,1084=>679,1085=>588,1086=>550,1087=>588,1088=>571,1089=>495,1090=>524,1091=>532,1092=>769, +1093=>532,1094=>612,1095=>532,1096=>823,1097=>848,1098=>636,1099=>710,1100=>530,1101=>494,1102=>757, +1103=>541,1104=>554,1105=>554,1106=>563,1107=>473,1108=>494,1109=>469,1110=>250,1111=>250,1112=>250, +1113=>812,1114=>809,1115=>586,1116=>543,1117=>584,1118=>532,1119=>588,1120=>840,1121=>753,1122=>693, +1123=>604,1124=>848,1125=>674,1126=>791,1127=>705,1128=>1043,1129=>901,1130=>708,1131=>550,1132=>924, +1133=>742,1134=>572,1135=>486,1136=>771,1137=>789,1138=>708,1139=>550,1140=>703,1141=>598,1142=>703, +1143=>598,1144=>893,1145=>813,1146=>857,1147=>682,1148=>1062,1149=>925,1150=>840,1151=>753,1152=>628, +1153=>495,1154=>452,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>376,1161=>376,1162=>673, +1163=>591,1164=>617,1165=>530,1166=>542,1167=>571,1168=>549,1169=>473,1170=>607,1171=>500,1172=>501, +1173=>441,1174=>969,1175=>811,1176=>577,1177=>479,1178=>639,1179=>543,1180=>639,1181=>543,1182=>639, +1183=>543,1184=>771,1185=>748,1186=>677,1187=>594,1188=>913,1189=>789,1190=>1002,1191=>855,1192=>801, +1193=>636,1194=>628,1195=>495,1196=>549,1197=>476,1198=>549,1199=>532,1200=>549,1201=>532,1202=>616, +1203=>532,1204=>840,1205=>726,1206=>617,1207=>532,1208=>617,1209=>532,1210=>617,1211=>570,1212=>836, +1213=>658,1214=>836,1215=>658,1216=>265,1217=>969,1218=>811,1219=>589,1220=>543,1221=>677,1222=>575, +1223=>677,1224=>594,1225=>677,1226=>594,1227=>617,1228=>532,1229=>776,1230=>679,1231=>250,1232=>615, +1233=>551,1234=>615,1235=>551,1236=>876,1237=>896,1238=>568,1239=>554,1240=>708,1241=>554,1242=>708, +1243=>554,1244=>969,1245=>811,1246=>577,1247=>479,1248=>599,1249=>520,1250=>673,1251=>584,1252=>673, +1253=>584,1254=>708,1255=>550,1256=>708,1257=>550,1258=>708,1259=>550,1260=>628,1261=>494,1262=>548, +1263=>532,1264=>548,1265=>532,1266=>548,1267=>532,1268=>617,1269=>532,1270=>501,1271=>442,1272=>736, +1273=>710,1274=>607,1275=>500,1276=>616,1277=>532,1278=>616,1279=>532,1280=>617,1281=>530,1282=>905, +1283=>807,1284=>877,1285=>782,1286=>611,1287=>529,1288=>964,1289=>861,1290=>1001,1291=>870,1292=>697, +1293=>593,1294=>695,1295=>640,1296=>553,1297=>486,1298=>677,1299=>575,1300=>1076,1301=>896,1302=>810, +1303=>780,1304=>927,1305=>890,1306=>708,1307=>571,1308=>890,1309=>736,1312=>1002,1313=>848,1314=>1002, +1315=>854,1316=>713,1317=>614,1329=>780,1330=>659,1331=>794,1332=>794,1333=>659,1334=>579,1335=>613, +1336=>659,1337=>765,1338=>794,1339=>659,1340=>501,1341=>741,1342=>888,1343=>659,1344=>636,1345=>579, +1346=>794,1347=>699,1348=>794,1349=>659,1350=>756,1351=>659,1352=>659,1353=>659,1354=>711,1355=>579, +1356=>794,1357=>659,1358=>794,1359=>571,1360=>659,1361=>659,1362=>719,1363=>774,1364=>711,1365=>708, +1366=>571,1369=>276,1370=>286,1371=>450,1372=>450,1373=>352,1374=>474,1375=>450,1377=>876,1378=>570, +1379=>686,1380=>690,1381=>570,1382=>627,1383=>479,1384=>570,1385=>630,1386=>627,1387=>570,1388=>363, +1389=>804,1390=>576,1391=>570,1392=>570,1393=>571,1394=>631,1395=>570,1396=>593,1397=>250,1398=>684, +1399=>464,1400=>570,1401=>407,1402=>876,1403=>464,1404=>691,1405=>570,1406=>626,1407=>876,1408=>570, +1409=>571,1410=>451,1411=>876,1412=>583,1413=>550,1414=>566,1415=>686,1417=>303,1418=>390,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>325,1471=>0,1472=>265,1473=>0,1474=>0,1475=>265,1478=>410, +1479=>0,1488=>566,1489=>547,1490=>403,1491=>534,1492=>576,1493=>245,1494=>336,1495=>576,1496=>583, +1497=>245,1498=>532,1499=>500,1500=>539,1501=>576,1502=>593,1503=>245,1504=>397,1505=>629,1506=>506, +1507=>576,1508=>543,1509=>468,1510=>523,1511=>596,1512=>532,1513=>727,1514=>591,1520=>423,1521=>409, +1522=>423,1523=>374,1524=>580,3647=>586,3713=>603,3714=>615,3716=>619,3719=>434,3720=>565,3722=>615, +3725=>619,3732=>577,3733=>577,3734=>605,3735=>589,3737=>576,3738=>533,3739=>533,3740=>670,3741=>690, +3742=>618,3743=>618,3745=>631,3746=>619,3747=>615,3749=>584,3751=>569,3754=>633,3755=>737,3757=>569, +3758=>615,3759=>708,3760=>569,3761=>0,3762=>485,3763=>485,3764=>0,3765=>0,3766=>0,3767=>0, +3768=>0,3769=>0,3771=>0,3772=>0,3773=>597,3776=>324,3777=>611,3778=>414,3779=>492,3780=>442, +3782=>606,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>572,3793=>576,3794=>576, +3795=>603,3796=>563,3797=>563,3798=>633,3799=>603,3800=>606,3801=>609,3804=>925,3805=>925,4256=>756, +4257=>621,4258=>577,4259=>683,4260=>532,4261=>617,4262=>710,4263=>729,4264=>420,4265=>508,4266=>710, +4267=>713,4268=>526,4269=>753,4270=>675,4271=>620,4272=>729,4273=>526,4274=>526,4275=>753,4276=>753, +4277=>581,4278=>543,4279=>526,4280=>536,4281=>526,4282=>649,4283=>715,4284=>526,4285=>510,4286=>526, +4287=>602,4288=>719,4289=>488,4290=>598,4291=>488,4292=>508,4293=>606,4304=>457,4305=>457,4306=>479, +4307=>706,4308=>470,4309=>465,4310=>457,4311=>717,4312=>457,4313=>466,4314=>952,4315=>470,4316=>470, +4317=>704,4318=>466,4319=>470,4320=>713,4321=>470,4322=>590,4323=>471,4324=>709,4325=>470,4326=>704, +4327=>470,4328=>470,4329=>470,4330=>510,4331=>470,4332=>470,4333=>439,4334=>470,4335=>448,4336=>465, +4337=>504,4338=>457,4339=>457,4340=>457,4341=>507,4342=>741,4343=>536,4344=>470,4345=>498,4346=>498, +4347=>527,4348=>273,5121=>615,5122=>615,5123=>615,5124=>615,5125=>692,5126=>692,5127=>692,5129=>692, +5130=>692,5131=>692,5132=>751,5133=>751,5134=>751,5135=>751,5136=>751,5137=>751,5138=>870,5139=>906, +5140=>870,5141=>906,5142=>692,5143=>870,5144=>906,5145=>870,5146=>906,5147=>692,5149=>230,5150=>488, +5151=>381,5152=>381,5153=>350,5154=>350,5155=>354,5156=>350,5157=>419,5158=>347,5159=>230,5160=>350, +5161=>350,5162=>350,5163=>980,5164=>817,5165=>857,5166=>1005,5167=>615,5168=>615,5169=>615,5170=>615, +5171=>656,5172=>656,5173=>656,5175=>656,5176=>656,5177=>656,5178=>751,5179=>615,5180=>751,5181=>751, +5182=>751,5183=>751,5184=>870,5185=>906,5186=>870,5187=>906,5188=>870,5189=>906,5190=>870,5191=>906, +5192=>656,5193=>457,5194=>172,5196=>659,5197=>659,5198=>659,5199=>659,5200=>657,5201=>657,5202=>657, +5204=>657,5205=>657,5206=>657,5207=>829,5208=>800,5209=>829,5210=>800,5211=>829,5212=>800,5213=>835, +5214=>810,5215=>835,5216=>810,5217=>853,5218=>810,5219=>853,5220=>810,5221=>853,5222=>391,5223=>790, +5224=>790,5225=>779,5226=>801,5227=>565,5228=>565,5229=>565,5230=>565,5231=>565,5232=>565,5233=>565, +5234=>565,5235=>565,5236=>773,5237=>693,5238=>733,5239=>734,5240=>733,5241=>734,5242=>773,5243=>693, +5244=>773,5245=>693,5246=>733,5247=>734,5248=>733,5249=>734,5250=>733,5251=>366,5252=>366,5253=>675, +5254=>697,5255=>675,5256=>697,5257=>565,5258=>565,5259=>565,5260=>565,5261=>565,5262=>565,5263=>565, +5264=>565,5265=>565,5266=>773,5267=>693,5268=>733,5269=>734,5270=>733,5271=>734,5272=>773,5273=>693, +5274=>773,5275=>693,5276=>733,5277=>734,5278=>733,5279=>734,5280=>733,5281=>391,5282=>391,5283=>549, +5284=>501,5285=>501,5286=>501,5287=>549,5288=>549,5289=>549,5290=>501,5291=>501,5292=>674,5293=>691, +5294=>671,5295=>687,5296=>671,5297=>687,5298=>674,5299=>691,5300=>674,5301=>691,5302=>671,5303=>687, +5304=>671,5305=>687,5306=>671,5307=>347,5308=>457,5309=>347,5312=>766,5313=>766,5314=>766,5315=>766, +5316=>766,5317=>766,5318=>766,5319=>766,5320=>766,5321=>962,5322=>931,5323=>953,5324=>766,5325=>953, +5326=>766,5327=>766,5328=>540,5329=>407,5330=>540,5331=>766,5332=>766,5333=>766,5334=>766,5335=>766, +5336=>766,5337=>766,5338=>766,5339=>766,5340=>962,5341=>931,5342=>953,5343=>927,5344=>953,5345=>927, +5346=>962,5347=>931,5348=>962,5349=>931,5350=>975,5351=>927,5352=>975,5353=>927,5354=>540,5356=>656, +5357=>542,5358=>542,5359=>542,5360=>542,5361=>542,5362=>542,5363=>542,5364=>542,5365=>542,5366=>751, +5367=>678,5368=>712,5369=>694,5370=>712,5371=>694,5372=>751,5373=>678,5374=>751,5375=>678,5376=>712, +5377=>694,5378=>712,5379=>694,5380=>712,5381=>376,5382=>378,5383=>376,5392=>641,5393=>641,5394=>641, +5395=>802,5396=>802,5397=>802,5398=>802,5399=>818,5400=>785,5401=>818,5402=>785,5403=>818,5404=>785, +5405=>1026,5406=>989,5407=>1026,5408=>989,5409=>1026,5410=>989,5411=>1026,5412=>989,5413=>576,5414=>564, +5415=>564,5416=>564,5417=>564,5418=>564,5419=>564,5420=>564,5421=>564,5422=>564,5423=>760,5424=>703, +5425=>734,5426=>736,5427=>734,5428=>736,5429=>760,5430=>703,5431=>760,5432=>703,5433=>734,5434=>736, +5435=>734,5436=>736,5437=>734,5438=>376,5440=>350,5441=>436,5442=>824,5443=>824,5444=>776,5445=>824, +5446=>776,5447=>776,5448=>542,5449=>542,5450=>542,5451=>542,5452=>542,5453=>542,5454=>751,5455=>678, +5456=>376,5458=>656,5459=>615,5460=>615,5461=>615,5462=>615,5463=>653,5464=>653,5465=>653,5466=>653, +5467=>831,5468=>906,5469=>457,5470=>659,5471=>659,5472=>659,5473=>659,5474=>659,5475=>659,5476=>657, +5477=>657,5478=>657,5479=>657,5480=>853,5481=>810,5482=>457,5492=>747,5493=>747,5494=>747,5495=>747, +5496=>747,5497=>747,5498=>747,5499=>507,5500=>677,5501=>436,5502=>942,5503=>942,5504=>942,5505=>942, +5506=>942,5507=>942,5508=>942,5509=>743,5514=>747,5515=>747,5516=>747,5517=>747,5518=>1133,5519=>1133, +5520=>1133,5521=>901,5522=>901,5523=>1133,5524=>1133,5525=>629,5526=>965,5536=>766,5537=>766,5538=>719, +5539=>719,5540=>719,5541=>719,5542=>540,5543=>579,5544=>579,5545=>579,5546=>579,5547=>579,5548=>579, +5549=>579,5550=>376,5551=>565,5598=>693,5601=>693,5702=>421,5703=>421,5742=>399,5743=>942,5744=>1178, +5745=>1469,5746=>1469,5747=>1237,5748=>1237,5749=>1469,5750=>1469,7424=>532,7425=>646,7426=>883,7427=>527, +7428=>495,7429=>544,7430=>544,7431=>441,7432=>486,7433=>250,7434=>355,7435=>521,7436=>524,7437=>679, +7438=>584,7439=>550,7440=>495,7441=>615,7442=>615,7443=>615,7444=>920,7446=>550,7447=>550,7448=>472, +7449=>541,7450=>541,7451=>524,7452=>517,7453=>663,7454=>853,7455=>574,7456=>532,7457=>736,7458=>472, +7459=>473,7462=>524,7463=>532,7464=>507,7465=>472,7466=>531,7467=>575,7468=>387,7469=>552,7470=>389, +7472=>436,7473=>358,7474=>358,7475=>439,7476=>426,7477=>167,7478=>167,7479=>372,7480=>315,7481=>489, +7482=>424,7483=>424,7484=>446,7485=>396,7486=>342,7487=>394,7488=>346,7489=>415,7490=>560,7491=>352, +7492=>352,7493=>365,7494=>583,7495=>385,7496=>365,7497=>375,7498=>375,7499=>324,7500=>323,7501=>365, +7502=>161,7503=>383,7504=>561,7505=>368,7506=>372,7507=>333,7508=>372,7509=>372,7510=>385,7511=>265, +7512=>364,7513=>422,7514=>561,7515=>375,7517=>361,7518=>335,7519=>347,7520=>374,7521=>327,7522=>161, +7523=>233,7524=>364,7525=>375,7526=>361,7527=>335,7528=>370,7529=>374,7530=>327,7543=>571,7544=>426, +7547=>334,7557=>250,7579=>365,7580=>333,7581=>333,7582=>372,7583=>324,7584=>267,7585=>209,7586=>365, +7587=>364,7588=>235,7589=>224,7590=>234,7591=>235,7592=>211,7593=>224,7594=>211,7595=>338,7596=>561, +7597=>561,7598=>369,7599=>431,7600=>368,7601=>372,7602=>372,7603=>324,7604=>258,7605=>265,7606=>457, +7607=>376,7608=>325,7609=>365,7610=>375,7611=>330,7612=>393,7613=>330,7614=>353,7615=>372,7620=>0, +7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>615,7681=>551,7682=>617,7683=>571,7684=>617, +7685=>571,7686=>617,7687=>571,7688=>628,7689=>495,7690=>693,7691=>571,7692=>693,7693=>571,7694=>693, +7695=>571,7696=>693,7697=>571,7698=>693,7699=>571,7700=>568,7701=>554,7702=>568,7703=>554,7704=>568, +7705=>554,7706=>568,7707=>554,7708=>568,7709=>554,7710=>518,7711=>316,7712=>697,7713=>571,7714=>677, +7715=>570,7716=>677,7717=>570,7718=>677,7719=>570,7720=>677,7721=>570,7722=>677,7723=>570,7724=>265, +7725=>250,7726=>265,7727=>250,7728=>590,7729=>521,7730=>590,7731=>521,7732=>590,7733=>521,7734=>501, +7735=>250,7736=>501,7737=>250,7738=>501,7739=>250,7740=>501,7741=>250,7742=>776,7743=>876,7744=>776, +7745=>876,7746=>776,7747=>876,7748=>673,7749=>570,7750=>673,7751=>570,7752=>673,7753=>570,7754=>673, +7755=>570,7756=>708,7757=>550,7758=>708,7759=>550,7760=>708,7761=>550,7762=>708,7763=>550,7764=>542, +7765=>571,7766=>542,7767=>571,7768=>625,7769=>370,7770=>625,7771=>370,7772=>625,7773=>370,7774=>625, +7775=>370,7776=>571,7777=>469,7778=>571,7779=>469,7780=>571,7781=>469,7782=>571,7783=>469,7784=>571, +7785=>469,7786=>549,7787=>353,7788=>549,7789=>353,7790=>549,7791=>353,7792=>549,7793=>353,7794=>659, +7795=>570,7796=>659,7797=>570,7798=>659,7799=>570,7800=>659,7801=>570,7802=>659,7803=>570,7804=>615, +7805=>532,7806=>615,7807=>532,7808=>890,7809=>736,7810=>890,7811=>736,7812=>890,7813=>736,7814=>890, +7815=>736,7816=>890,7817=>736,7818=>616,7819=>532,7820=>616,7821=>532,7822=>549,7823=>532,7824=>616, +7825=>472,7826=>616,7827=>472,7828=>616,7829=>472,7830=>570,7831=>353,7832=>736,7833=>532,7834=>551, +7835=>316,7838=>691,7839=>550,7840=>615,7841=>551,7842=>615,7843=>551,7844=>615,7845=>551,7846=>615, +7847=>551,7848=>615,7849=>551,7850=>615,7851=>551,7852=>615,7853=>551,7854=>615,7855=>551,7856=>615, +7857=>551,7858=>615,7859=>551,7860=>615,7861=>551,7862=>615,7863=>551,7864=>568,7865=>554,7866=>568, +7867=>554,7868=>568,7869=>554,7870=>568,7871=>554,7872=>568,7873=>554,7874=>568,7875=>554,7876=>568, +7877=>554,7878=>568,7879=>554,7880=>265,7881=>250,7882=>265,7883=>250,7884=>708,7885=>550,7886=>708, +7887=>550,7888=>708,7889=>550,7890=>708,7891=>550,7892=>708,7893=>550,7894=>708,7895=>550,7896=>708, +7897=>550,7898=>822,7899=>550,7900=>822,7901=>550,7902=>822,7903=>550,7904=>822,7905=>550,7906=>822, +7907=>550,7908=>659,7909=>570,7910=>659,7911=>570,7912=>754,7913=>570,7914=>754,7915=>570,7916=>754, +7917=>570,7918=>754,7919=>570,7920=>754,7921=>570,7922=>549,7923=>532,7924=>549,7925=>532,7926=>549, +7927=>532,7928=>549,7929=>532,7936=>593,7937=>593,7938=>593,7939=>593,7940=>593,7941=>593,7942=>593, +7943=>593,7944=>615,7945=>615,7946=>790,7947=>790,7948=>692,7949=>721,7950=>637,7951=>668,7952=>486, +7953=>486,7954=>486,7955=>486,7956=>486,7957=>486,7960=>640,7961=>640,7962=>869,7963=>877,7964=>809, +7965=>835,7968=>570,7969=>570,7970=>570,7971=>570,7972=>570,7973=>570,7974=>570,7975=>570,7976=>753, +7977=>751,7978=>977,7979=>980,7980=>924,7981=>945,7982=>840,7983=>852,7984=>304,7985=>304,7986=>304, +7987=>304,7988=>304,7989=>304,7990=>304,7991=>304,7992=>342,7993=>336,7994=>571,7995=>571,7996=>513, +7997=>540,7998=>440,7999=>443,8000=>550,8001=>550,8002=>550,8003=>550,8004=>550,8005=>550,8008=>724, +8009=>763,8010=>985,8011=>989,8012=>844,8013=>873,8016=>521,8017=>521,8018=>521,8019=>521,8020=>521, +8021=>521,8022=>521,8023=>521,8025=>705,8027=>897,8029=>911,8031=>808,8032=>753,8033=>753,8034=>753, +8035=>753,8036=>753,8037=>753,8038=>753,8039=>753,8040=>722,8041=>759,8042=>980,8043=>985,8044=>851, +8045=>875,8046=>829,8047=>857,8048=>593,8049=>593,8050=>486,8051=>493,8052=>570,8053=>589,8054=>304, +8055=>304,8056=>550,8057=>550,8058=>521,8059=>521,8060=>753,8061=>753,8064=>593,8065=>593,8066=>593, +8067=>593,8068=>593,8069=>593,8070=>593,8071=>593,8072=>615,8073=>615,8074=>790,8075=>790,8076=>692, +8077=>721,8078=>637,8079=>668,8080=>570,8081=>570,8082=>570,8083=>570,8084=>570,8085=>570,8086=>570, +8087=>570,8088=>753,8089=>751,8090=>977,8091=>980,8092=>924,8093=>945,8094=>840,8095=>852,8096=>753, +8097=>753,8098=>753,8099=>753,8100=>753,8101=>753,8102=>753,8103=>753,8104=>722,8105=>759,8106=>980, +8107=>985,8108=>851,8109=>875,8110=>829,8111=>857,8112=>593,8113=>593,8114=>593,8115=>593,8116=>593, +8118=>593,8119=>593,8120=>615,8121=>615,8122=>645,8123=>623,8124=>615,8125=>450,8126=>450,8127=>450, +8128=>450,8129=>450,8130=>570,8131=>570,8132=>589,8134=>570,8135=>570,8136=>724,8137=>671,8138=>837, +8139=>784,8140=>677,8141=>450,8142=>450,8143=>450,8144=>304,8145=>304,8146=>304,8147=>304,8150=>304, +8151=>304,8152=>265,8153=>265,8154=>427,8155=>367,8157=>450,8158=>450,8159=>450,8160=>521,8161=>521, +8162=>521,8163=>521,8164=>571,8165=>571,8166=>521,8167=>521,8168=>549,8169=>549,8170=>760,8171=>742, +8172=>616,8173=>450,8174=>450,8175=>450,8178=>753,8179=>753,8180=>753,8182=>753,8183=>753,8184=>847, +8185=>731,8186=>830,8187=>743,8188=>688,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900, +8196=>296,8197=>225,8198=>150,8199=>572,8200=>286,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0, +8206=>0,8207=>0,8208=>325,8209=>325,8210=>572,8213=>900,8214=>450,8215=>450,8219=>286,8223=>466, +8227=>531,8228=>299,8229=>600,8231=>286,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180, +8241=>1521,8242=>204,8243=>336,8244=>468,8245=>204,8246=>336,8247=>468,8248=>305,8251=>754,8252=>437, +8253=>478,8254=>450,8255=>723,8256=>723,8257=>225,8258=>900,8259=>450,8260=>150,8261=>351,8262=>351, +8263=>830,8264=>659,8265=>659,8266=>447,8267=>572,8268=>450,8269=>450,8270=>450,8271=>303,8272=>723, +8273=>450,8274=>404,8275=>900,8276=>723,8277=>754,8278=>527,8279=>597,8280=>754,8281=>754,8282=>286, +8283=>717,8284=>754,8285=>286,8286=>286,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0, +8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>360,8305=>161,8308=>360,8309=>360, +8310=>360,8311=>360,8312=>360,8313=>360,8314=>475,8315=>475,8316=>475,8317=>221,8318=>221,8319=>359, +8320=>360,8321=>360,8322=>360,8323=>360,8324=>360,8325=>360,8326=>360,8327=>360,8328=>360,8329=>360, +8330=>475,8331=>475,8332=>475,8333=>221,8334=>221,8336=>352,8337=>375,8338=>372,8339=>399,8340=>375, +8352=>789,8353=>572,8354=>572,8355=>572,8356=>572,8357=>876,8358=>673,8359=>1143,8360=>966,8361=>890, +8362=>754,8363=>572,8365=>590,8366=>549,8367=>1145,8368=>572,8369=>572,8370=>572,8371=>572,8372=>696, +8373=>577,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>873,8449=>873, +8450=>628,8451=>1011,8452=>807,8453=>872,8454=>929,8455=>553,8456=>628,8457=>856,8459=>889,8460=>679, +8461=>765,8462=>570,8463=>570,8464=>422,8465=>627,8466=>648,8467=>372,8468=>736,8469=>721,8470=>936, +8471=>900,8472=>627,8473=>631,8474=>708,8475=>718,8476=>732,8477=>712,8478=>807,8479=>615,8480=>917, +8481=>912,8483=>615,8484=>670,8485=>520,8486=>688,8487=>688,8488=>554,8489=>304,8490=>590,8491=>615, +8492=>708,8493=>633,8494=>769,8495=>532,8496=>545,8497=>708,8498=>518,8499=>962,8500=>416,8501=>670, +8502=>606,8503=>419,8504=>580,8505=>342,8506=>833,8507=>1041,8508=>632,8509=>655,8510=>589,8511=>764, +8512=>729,8513=>697,8514=>501,8515=>501,8516=>549,8517=>737,8518=>637,8519=>554,8520=>316,8521=>316, +8523=>702,8526=>474,8531=>872,8532=>872,8533=>872,8534=>872,8535=>872,8536=>872,8537=>872,8538=>872, +8539=>872,8540=>872,8541=>872,8542=>872,8543=>511,8544=>265,8545=>443,8546=>620,8547=>831,8548=>615, +8549=>830,8550=>1007,8551=>1185,8552=>826,8553=>616,8554=>839,8555=>1018,8556=>501,8557=>628,8558=>693, +8559=>776,8560=>250,8561=>412,8562=>573,8563=>730,8564=>532,8565=>729,8566=>892,8567=>1053,8568=>737, +8569=>532,8570=>740,8571=>901,8572=>250,8573=>495,8574=>571,8575=>876,8576=>1121,8577=>693,8578=>1121, +8579=>633,8580=>494,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754, +8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754, +8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754, +8620=>754,8621=>754,8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754, +8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754, +8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754, +8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754, +8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754, +8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754, +8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754, +8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754, +8700=>754,8701=>754,8702=>754,8703=>754,8704=>615,8705=>572,8706=>465,8707=>568,8708=>568,8709=>784, +8710=>602,8711=>602,8712=>784,8713=>784,8714=>646,8715=>784,8716=>784,8717=>646,8718=>572,8719=>681, +8720=>681,8721=>606,8722=>754,8723=>754,8724=>754,8725=>303,8726=>573,8727=>754,8728=>563,8729=>563, +8730=>573,8731=>573,8732=>573,8733=>643,8734=>750,8735=>754,8736=>807,8737=>807,8738=>754,8739=>450, +8740=>450,8741=>450,8742=>450,8743=>659,8744=>659,8745=>659,8746=>659,8747=>469,8748=>710,8749=>951, +8750=>469,8751=>710,8752=>951,8753=>469,8754=>469,8755=>469,8756=>572,8757=>572,8758=>234,8759=>572, +8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8766=>754,8767=>754,8768=>337,8769=>754, +8770=>754,8771=>754,8772=>754,8773=>754,8774=>754,8775=>754,8776=>754,8777=>754,8778=>754,8779=>754, +8780=>754,8781=>754,8782=>754,8783=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>900,8789=>900, +8790=>754,8791=>754,8792=>754,8793=>754,8794=>754,8795=>754,8796=>754,8797=>754,8798=>754,8799=>754, +8800=>754,8801=>754,8802=>754,8803=>754,8804=>754,8805=>754,8806=>754,8807=>754,8808=>754,8809=>754, +8810=>942,8811=>942,8812=>417,8813=>754,8814=>754,8815=>754,8816=>754,8817=>754,8818=>754,8819=>754, +8820=>754,8821=>754,8822=>754,8823=>754,8824=>754,8825=>754,8826=>754,8827=>754,8828=>754,8829=>754, +8830=>754,8831=>754,8832=>754,8833=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754, +8840=>754,8841=>754,8842=>754,8843=>754,8844=>659,8845=>659,8846=>659,8847=>754,8848=>754,8849=>754, +8850=>754,8851=>702,8852=>702,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754, +8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>784,8867=>784,8868=>784,8869=>784, +8870=>468,8871=>468,8872=>784,8873=>784,8874=>784,8875=>784,8876=>784,8877=>784,8878=>784,8879=>784, +8880=>754,8881=>754,8882=>754,8883=>754,8884=>754,8885=>754,8886=>900,8887=>900,8888=>754,8889=>754, +8890=>468,8891=>659,8892=>659,8893=>659,8894=>754,8895=>754,8896=>738,8897=>738,8898=>738,8899=>738, +8900=>444,8901=>286,8902=>563,8903=>754,8904=>900,8905=>900,8906=>900,8907=>900,8908=>900,8909=>754, +8910=>659,8911=>659,8912=>754,8913=>754,8914=>754,8915=>754,8916=>754,8917=>754,8918=>754,8919=>754, +8920=>1280,8921=>1280,8922=>754,8923=>754,8924=>754,8925=>754,8926=>754,8927=>754,8928=>754,8929=>754, +8930=>754,8931=>754,8932=>754,8933=>754,8934=>754,8935=>754,8936=>754,8937=>754,8938=>754,8939=>754, +8940=>754,8941=>754,8942=>900,8943=>900,8944=>900,8945=>900,8946=>900,8947=>784,8948=>646,8949=>784, +8950=>784,8951=>646,8952=>784,8953=>784,8954=>900,8955=>784,8956=>646,8957=>784,8958=>646,8959=>784, +8960=>542,8961=>542,8962=>571,8963=>754,8964=>754,8965=>754,8966=>754,8967=>439,8968=>351,8969=>351, +8970=>351,8971=>351,8972=>728,8973=>728,8974=>728,8975=>728,8976=>754,8977=>461,8984=>900,8985=>754, +8988=>422,8989=>422,8990=>422,8991=>422,8992=>469,8993=>469,8996=>1037,8997=>1037,8998=>1272,8999=>1037, +9000=>1299,9003=>1272,9004=>786,9075=>304,9076=>571,9077=>753,9082=>593,9085=>681,9095=>1037,9108=>786, +9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450, +9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>469, +9166=>754,9167=>850,9187=>786,9189=>692,9250=>571,9251=>571,9312=>807,9313=>807,9314=>807,9315=>807, +9316=>807,9317=>807,9318=>807,9319=>807,9320=>807,9321=>807,9472=>542,9473=>542,9474=>542,9475=>542, +9476=>542,9477=>542,9478=>542,9479=>542,9480=>542,9481=>542,9482=>542,9483=>542,9484=>542,9485=>542, +9486=>542,9487=>542,9488=>542,9489=>542,9490=>542,9491=>542,9492=>542,9493=>542,9494=>542,9495=>542, +9496=>542,9497=>542,9498=>542,9499=>542,9500=>542,9501=>542,9502=>542,9503=>542,9504=>542,9505=>542, +9506=>542,9507=>542,9508=>542,9509=>542,9510=>542,9511=>542,9512=>542,9513=>542,9514=>542,9515=>542, +9516=>542,9517=>542,9518=>542,9519=>542,9520=>542,9521=>542,9522=>542,9523=>542,9524=>542,9525=>542, +9526=>542,9527=>542,9528=>542,9529=>542,9530=>542,9531=>542,9532=>542,9533=>542,9534=>542,9535=>542, +9536=>542,9537=>542,9538=>542,9539=>542,9540=>542,9541=>542,9542=>542,9543=>542,9544=>542,9545=>542, +9546=>542,9547=>542,9548=>542,9549=>542,9550=>542,9551=>542,9552=>542,9553=>542,9554=>542,9555=>542, +9556=>542,9557=>542,9558=>542,9559=>542,9560=>542,9561=>542,9562=>542,9563=>542,9564=>542,9565=>542, +9566=>542,9567=>542,9568=>542,9569=>542,9570=>542,9571=>542,9572=>542,9573=>542,9574=>542,9575=>542, +9576=>542,9577=>542,9578=>542,9579=>542,9580=>542,9581=>542,9582=>542,9583=>542,9584=>542,9585=>542, +9586=>542,9587=>542,9588=>542,9589=>542,9590=>542,9591=>542,9592=>542,9593=>542,9594=>542,9595=>542, +9596=>542,9597=>542,9598=>542,9599=>542,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692, +9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692, +9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692, +9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850, +9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850, +9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692, +9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692, +9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785, +9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785, +9686=>474,9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348, +9696=>692,9697=>692,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850, +9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850, +9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659, +9726=>659,9727=>692,9728=>807,9729=>900,9730=>807,9731=>807,9732=>807,9733=>807,9734=>807,9735=>515, +9736=>806,9737=>807,9738=>799,9739=>799,9740=>604,9741=>911,9742=>1121,9743=>1125,9744=>807,9745=>807, +9746=>807,9747=>479,9748=>807,9749=>807,9750=>807,9751=>807,9752=>807,9753=>807,9754=>807,9755=>807, +9756=>807,9757=>548,9758=>807,9759=>548,9760=>807,9761=>807,9762=>807,9763=>807,9764=>602,9765=>671, +9766=>584,9767=>705,9768=>490,9769=>807,9770=>807,9771=>807,9772=>639,9773=>807,9774=>807,9775=>807, +9776=>800,9777=>800,9778=>800,9779=>800,9780=>800,9781=>800,9782=>800,9783=>800,9784=>807,9785=>807, +9786=>807,9787=>807,9788=>807,9789=>807,9790=>807,9791=>552,9792=>658,9793=>658,9794=>807,9795=>807, +9796=>807,9797=>807,9798=>807,9799=>807,9800=>807,9801=>807,9802=>807,9803=>807,9804=>807,9805=>807, +9806=>807,9807=>807,9808=>807,9809=>807,9810=>807,9811=>807,9812=>807,9813=>807,9814=>807,9815=>807, +9816=>807,9817=>807,9818=>807,9819=>807,9820=>807,9821=>807,9822=>807,9823=>807,9824=>807,9825=>807, +9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9832=>807,9833=>424,9834=>574,9835=>807, +9836=>807,9837=>424,9838=>321,9839=>435,9840=>673,9841=>689,9842=>807,9843=>807,9844=>807,9845=>807, +9846=>807,9847=>807,9848=>807,9849=>807,9850=>807,9851=>807,9852=>807,9853=>807,9854=>807,9855=>807, +9856=>782,9857=>782,9858=>782,9859=>782,9860=>782,9861=>782,9862=>800,9863=>800,9864=>800,9865=>800, +9866=>800,9867=>800,9868=>800,9869=>800,9870=>800,9871=>800,9872=>675,9873=>675,9874=>800,9875=>734, +9876=>644,9877=>483,9878=>766,9879=>800,9880=>615,9881=>800,9882=>637,9883=>800,9884=>800,9888=>800, +9889=>632,9890=>903,9891=>977,9892=>1028,9893=>811,9894=>754,9895=>754,9896=>754,9897=>754,9898=>754, +9899=>754,9900=>754,9901=>754,9902=>754,9903=>754,9904=>759,9905=>754,9906=>658,9907=>659,9908=>659, +9909=>659,9910=>765,9911=>659,9912=>659,9985=>754,9986=>754,9987=>754,9988=>754,9990=>754,9991=>754, +9992=>754,9993=>754,9996=>754,9997=>754,9998=>754,9999=>754,10000=>754,10001=>754,10002=>754,10003=>754, +10004=>754,10005=>754,10006=>754,10007=>754,10008=>754,10009=>754,10010=>754,10011=>754,10012=>754,10013=>754, +10014=>754,10015=>754,10016=>754,10017=>754,10018=>754,10019=>754,10020=>754,10021=>754,10022=>754,10023=>754, +10025=>754,10026=>754,10027=>754,10028=>754,10029=>754,10030=>754,10031=>754,10032=>754,10033=>754,10034=>754, +10035=>754,10036=>754,10037=>754,10038=>754,10039=>754,10040=>754,10041=>754,10042=>754,10043=>754,10044=>754, +10045=>754,10046=>754,10047=>754,10048=>754,10049=>754,10050=>754,10051=>754,10052=>754,10053=>754,10054=>754, +10055=>754,10056=>754,10057=>754,10058=>754,10059=>754,10061=>807,10063=>807,10064=>807,10065=>807,10066=>807, +10070=>807,10072=>754,10073=>754,10074=>754,10075=>290,10076=>290,10077=>484,10078=>484,10081=>754,10082=>754, +10083=>754,10084=>754,10085=>754,10086=>754,10087=>754,10088=>754,10089=>754,10090=>754,10091=>754,10092=>754, +10093=>754,10094=>754,10095=>754,10096=>754,10097=>754,10098=>754,10099=>754,10100=>754,10101=>754,10102=>807, +10103=>807,10104=>807,10105=>807,10106=>807,10107=>807,10108=>807,10109=>807,10110=>807,10111=>807,10112=>754, +10113=>754,10114=>754,10115=>754,10116=>754,10117=>754,10118=>754,10119=>754,10120=>754,10121=>754,10122=>754, +10123=>754,10124=>754,10125=>754,10126=>754,10127=>754,10128=>754,10129=>754,10130=>754,10131=>754,10132=>754, +10136=>754,10137=>754,10138=>754,10139=>754,10140=>754,10141=>754,10142=>754,10143=>754,10144=>754,10145=>754, +10146=>754,10147=>754,10148=>754,10149=>754,10150=>754,10151=>754,10152=>754,10153=>754,10154=>754,10155=>754, +10156=>754,10157=>754,10158=>754,10159=>754,10161=>754,10162=>754,10163=>754,10164=>754,10165=>754,10166=>754, +10167=>754,10168=>754,10169=>754,10170=>754,10171=>754,10172=>754,10173=>754,10174=>754,10181=>351,10182=>351, +10208=>444,10214=>445,10215=>445,10216=>351,10217=>351,10218=>500,10219=>500,10224=>754,10225=>754,10226=>754, +10227=>754,10228=>1042,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290, +10237=>1290,10238=>1290,10239=>1290,10240=>659,10241=>659,10242=>659,10243=>659,10244=>659,10245=>659,10246=>659, +10247=>659,10248=>659,10249=>659,10250=>659,10251=>659,10252=>659,10253=>659,10254=>659,10255=>659,10256=>659, +10257=>659,10258=>659,10259=>659,10260=>659,10261=>659,10262=>659,10263=>659,10264=>659,10265=>659,10266=>659, +10267=>659,10268=>659,10269=>659,10270=>659,10271=>659,10272=>659,10273=>659,10274=>659,10275=>659,10276=>659, +10277=>659,10278=>659,10279=>659,10280=>659,10281=>659,10282=>659,10283=>659,10284=>659,10285=>659,10286=>659, +10287=>659,10288=>659,10289=>659,10290=>659,10291=>659,10292=>659,10293=>659,10294=>659,10295=>659,10296=>659, +10297=>659,10298=>659,10299=>659,10300=>659,10301=>659,10302=>659,10303=>659,10304=>659,10305=>659,10306=>659, +10307=>659,10308=>659,10309=>659,10310=>659,10311=>659,10312=>659,10313=>659,10314=>659,10315=>659,10316=>659, +10317=>659,10318=>659,10319=>659,10320=>659,10321=>659,10322=>659,10323=>659,10324=>659,10325=>659,10326=>659, +10327=>659,10328=>659,10329=>659,10330=>659,10331=>659,10332=>659,10333=>659,10334=>659,10335=>659,10336=>659, +10337=>659,10338=>659,10339=>659,10340=>659,10341=>659,10342=>659,10343=>659,10344=>659,10345=>659,10346=>659, +10347=>659,10348=>659,10349=>659,10350=>659,10351=>659,10352=>659,10353=>659,10354=>659,10355=>659,10356=>659, +10357=>659,10358=>659,10359=>659,10360=>659,10361=>659,10362=>659,10363=>659,10364=>659,10365=>659,10366=>659, +10367=>659,10368=>659,10369=>659,10370=>659,10371=>659,10372=>659,10373=>659,10374=>659,10375=>659,10376=>659, +10377=>659,10378=>659,10379=>659,10380=>659,10381=>659,10382=>659,10383=>659,10384=>659,10385=>659,10386=>659, +10387=>659,10388=>659,10389=>659,10390=>659,10391=>659,10392=>659,10393=>659,10394=>659,10395=>659,10396=>659, +10397=>659,10398=>659,10399=>659,10400=>659,10401=>659,10402=>659,10403=>659,10404=>659,10405=>659,10406=>659, +10407=>659,10408=>659,10409=>659,10410=>659,10411=>659,10412=>659,10413=>659,10414=>659,10415=>659,10416=>659, +10417=>659,10418=>659,10419=>659,10420=>659,10421=>659,10422=>659,10423=>659,10424=>659,10425=>659,10426=>659, +10427=>659,10428=>659,10429=>659,10430=>659,10431=>659,10432=>659,10433=>659,10434=>659,10435=>659,10436=>659, +10437=>659,10438=>659,10439=>659,10440=>659,10441=>659,10442=>659,10443=>659,10444=>659,10445=>659,10446=>659, +10447=>659,10448=>659,10449=>659,10450=>659,10451=>659,10452=>659,10453=>659,10454=>659,10455=>659,10456=>659, +10457=>659,10458=>659,10459=>659,10460=>659,10461=>659,10462=>659,10463=>659,10464=>659,10465=>659,10466=>659, +10467=>659,10468=>659,10469=>659,10470=>659,10471=>659,10472=>659,10473=>659,10474=>659,10475=>659,10476=>659, +10477=>659,10478=>659,10479=>659,10480=>659,10481=>659,10482=>659,10483=>659,10484=>659,10485=>659,10486=>659, +10487=>659,10488=>659,10489=>659,10490=>659,10491=>659,10492=>659,10493=>659,10494=>659,10495=>659,10502=>754, +10503=>754,10506=>754,10507=>754,10560=>615,10561=>615,10627=>660,10628=>660,10702=>754,10703=>900,10704=>900, +10705=>900,10706=>900,10707=>900,10708=>900,10709=>900,10731=>444,10746=>754,10747=>754,10752=>900,10753=>900, +10754=>900,10764=>1192,10765=>469,10766=>469,10767=>469,10768=>469,10769=>469,10770=>469,10771=>469,10772=>469, +10773=>469,10774=>469,10775=>469,10776=>469,10777=>469,10778=>469,10779=>469,10780=>469,10799=>754,10877=>754, +10878=>754,10879=>754,10880=>754,10881=>754,10882=>754,10883=>754,10884=>754,10885=>754,10886=>754,10887=>754, +10888=>754,10889=>754,10890=>754,10891=>754,10892=>754,10893=>754,10894=>754,10895=>754,10896=>754,10897=>754, +10898=>754,10899=>754,10900=>754,10901=>754,10902=>754,10903=>754,10904=>754,10905=>754,10906=>754,10907=>754, +10908=>754,10909=>754,10910=>754,10911=>754,10912=>754,10926=>754,10927=>754,10928=>754,10929=>754,10930=>754, +10931=>754,10932=>754,10933=>754,10934=>754,10935=>754,10936=>754,10937=>754,10938=>754,11001=>754,11002=>754, +11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754, +11018=>754,11019=>754,11020=>754,11021=>754,11022=>752,11023=>752,11024=>752,11025=>752,11026=>850,11027=>850, +11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11039=>782,11040=>782,11041=>786, +11042=>786,11043=>786,11044=>1007,11091=>782,11092=>782,11360=>501,11361=>250,11362=>501,11363=>542,11364=>625, +11365=>551,11366=>353,11367=>677,11368=>570,11369=>590,11370=>521,11371=>616,11372=>472,11373=>703,11374=>776, +11375=>615,11377=>661,11378=>1015,11379=>865,11380=>532,11381=>589,11382=>511,11383=>593,11385=>373,11386=>550, +11387=>441,11388=>157,11389=>387,11800=>478,11810=>351,11811=>351,11812=>351,11813=>351,11822=>478,19904=>807, +19905=>807,19906=>807,19907=>807,19908=>807,19909=>807,19910=>807,19911=>807,19912=>807,19913=>807,19914=>807, +19915=>807,19916=>807,19917=>807,19918=>807,19919=>807,19920=>807,19921=>807,19922=>807,19923=>807,19924=>807, +19925=>807,19926=>807,19927=>807,19928=>807,19929=>807,19930=>807,19931=>807,19932=>807,19933=>807,19934=>807, +19935=>807,19936=>807,19937=>807,19938=>807,19939=>807,19940=>807,19941=>807,19942=>807,19943=>807,19944=>807, +19945=>807,19946=>807,19947=>807,19948=>807,19949=>807,19950=>807,19951=>807,19952=>807,19953=>807,19954=>807, +19955=>807,19956=>807,19957=>807,19958=>807,19959=>807,19960=>807,19961=>807,19962=>807,19963=>807,19964=>807, +19965=>807,19966=>807,19967=>807,42564=>571,42565=>469,42566=>318,42567=>304,42572=>1062,42573=>925,42576=>926, +42577=>815,42580=>971,42581=>757,42582=>886,42583=>762,42594=>922,42595=>833,42596=>912,42597=>810,42598=>776, +42599=>907,42600=>708,42601=>550,42602=>770,42603=>641,42604=>1222,42605=>917,42606=>791,42634=>725,42635=>649, +42636=>549,42637=>524,42644=>617,42645=>570,42760=>444,42761=>444,42762=>444,42763=>444,42764=>444,42765=>444, +42766=>444,42767=>444,42768=>444,42769=>444,42770=>444,42771=>444,42772=>444,42773=>444,42774=>444,42779=>332, +42780=>332,42781=>227,42782=>227,42783=>227,42790=>677,42791=>570,42792=>790,42793=>638,42794=>553,42795=>486, +42800=>441,42801=>469,42802=>1125,42803=>886,42804=>1097,42805=>900,42806=>1039,42807=>896,42808=>874,42809=>736, +42810=>874,42811=>736,42812=>863,42813=>736,42814=>628,42815=>494,42822=>612,42823=>353,42824=>523,42825=>384, +42826=>726,42827=>633,42830=>1222,42831=>917,42880=>501,42881=>250,42882=>662,42883=>570,42889=>303,42890=>338, +42891=>360,42892=>247,43003=>518,43004=>542,43005=>776,43006=>265,43007=>1079,63173=>550,64256=>649,64257=>581, +64258=>581,64259=>899,64260=>899,64261=>617,64262=>774,64275=>1081,64276=>1081,64277=>1076,64278=>1067,64279=>1376, +64285=>245,64286=>0,64287=>423,64288=>572,64289=>770,64290=>696,64291=>815,64292=>694,64293=>759,64294=>769, +64295=>726,64296=>788,64297=>754,64298=>727,64299=>727,64300=>727,64301=>727,64302=>566,64303=>566,64304=>566, +64305=>547,64306=>403,64307=>534,64308=>576,64309=>245,64310=>336,64311=>900,64312=>583,64313=>302,64314=>532, +64315=>500,64316=>539,64318=>593,64320=>397,64321=>629,64323=>576,64324=>543,64326=>523,64327=>596,64328=>532, +64329=>727,64330=>591,64331=>245,64332=>547,64333=>500,64334=>543,64335=>566,65024=>0,65025=>0,65026=>0, +65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0, +65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65529=>0,65530=>0,65531=>0, +65532=>0,65533=>923); +$enc=''; +$diff=''; +$file='dejavusanscondensedi.z'; +$ctg='dejavusanscondensedi.ctg.z'; +$originalsize=488440; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedi.z new file mode 100755 index 00000000..cf9052bf Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusanscondensedi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansi.ctg.z new file mode 100755 index 00000000..ac628b3e Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansi.php new file mode 100755 index 00000000..b097ed0e --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansi.php @@ -0,0 +1,471 @@ +928,'Descent'=>-236,'CapHeight'=>-43,'Flags'=>96,'FontBBox'=>'[-1016 -350 1659 1068]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>318,33=>401,34=>460,35=>838,36=>636,37=>950,38=>780,39=>275,40=>390, +41=>390,42=>500,43=>838,44=>318,45=>361,46=>318,47=>337,48=>636,49=>636,50=>636, +51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838, +61=>838,62=>838,63=>531,64=>1000,65=>684,66=>686,67=>698,68=>770,69=>632,70=>575, +71=>775,72=>752,73=>295,74=>295,75=>656,76=>557,77=>863,78=>748,79=>787,80=>603, +81=>787,82=>695,83=>635,84=>611,85=>732,86=>684,87=>989,88=>685,89=>611,90=>685, +91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>613,98=>635,99=>550,100=>635, +101=>615,102=>352,103=>635,104=>634,105=>278,106=>278,107=>579,108=>278,109=>974,110=>634, +111=>612,112=>635,113=>635,114=>411,115=>521,116=>392,117=>634,118=>592,119=>818,120=>592, +121=>592,122=>525,123=>636,124=>337,125=>636,126=>838,8364=>636,8218=>318,402=>352,8222=>518, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1350,352=>635,8249=>400,338=>1070,381=>685,8216=>318, +8217=>318,8220=>518,8221=>518,8226=>590,8211=>500,8212=>1000,732=>500,8482=>1000,353=>521,8250=>400, +339=>1028,382=>525,376=>611,160=>318,161=>401,162=>636,163=>636,164=>636,165=>636,166=>337, +167=>500,168=>500,169=>1000,170=>471,171=>617,172=>838,173=>361,174=>1000,175=>500,176=>500, +177=>838,178=>401,179=>401,180=>500,181=>636,182=>636,183=>318,184=>500,185=>401,186=>471, +187=>617,188=>969,189=>969,190=>969,191=>531,192=>684,193=>684,194=>684,195=>684,196=>684, +197=>684,198=>974,199=>698,200=>632,201=>632,202=>632,203=>632,204=>295,205=>295,206=>295, +207=>295,208=>775,209=>748,210=>787,211=>787,212=>787,213=>787,214=>787,215=>838,216=>787, +217=>732,218=>732,219=>732,220=>732,221=>611,222=>608,223=>630,224=>613,225=>613,226=>613, +227=>613,228=>613,229=>613,230=>995,231=>550,232=>615,233=>615,234=>615,235=>615,236=>278, +237=>278,238=>278,239=>278,240=>612,241=>634,242=>612,243=>612,244=>612,245=>612,246=>612, +247=>838,248=>612,249=>634,250=>634,251=>634,252=>634,253=>592,254=>635,255=>592,256=>684, +257=>613,258=>684,259=>613,260=>684,261=>613,262=>698,263=>550,264=>698,265=>550,266=>698, +267=>550,268=>698,269=>550,270=>770,271=>635,272=>775,273=>635,274=>632,275=>615,276=>632, +277=>615,278=>632,279=>615,280=>632,281=>615,282=>632,283=>615,284=>775,285=>635,286=>775, +287=>635,288=>775,289=>635,290=>775,291=>635,292=>752,293=>634,294=>916,295=>695,296=>295, +297=>278,298=>295,299=>278,300=>295,301=>278,302=>295,303=>278,304=>295,305=>278,306=>590, +307=>556,308=>295,309=>278,310=>656,311=>579,312=>579,313=>557,314=>278,315=>557,316=>278, +317=>557,318=>278,319=>557,320=>278,321=>562,322=>287,323=>748,324=>634,325=>748,326=>634, +327=>748,328=>634,329=>813,330=>748,331=>634,332=>787,333=>612,334=>787,335=>612,336=>787, +337=>612,340=>695,341=>411,342=>695,343=>411,344=>695,345=>411,346=>635,347=>521,348=>635, +349=>521,350=>635,351=>521,354=>611,355=>392,356=>611,357=>392,358=>611,359=>392,360=>732, +361=>634,362=>732,363=>634,364=>732,365=>634,366=>732,367=>634,368=>732,369=>634,370=>732, +371=>634,372=>989,373=>818,374=>611,375=>592,377=>685,378=>525,379=>685,380=>525,383=>352, +384=>635,385=>735,386=>686,387=>635,388=>686,389=>635,390=>703,391=>698,392=>550,393=>775, +394=>819,395=>686,396=>635,397=>612,398=>632,399=>787,400=>614,401=>575,403=>775,404=>687, +405=>984,406=>354,407=>295,408=>746,409=>579,410=>278,411=>592,412=>974,413=>748,414=>634, +415=>787,416=>913,417=>612,418=>938,419=>737,420=>652,421=>635,422=>695,423=>635,424=>521, +425=>632,426=>336,427=>392,428=>611,429=>392,430=>611,431=>838,432=>634,433=>764,434=>721, +435=>744,436=>730,437=>685,438=>525,439=>666,440=>666,441=>578,442=>525,443=>636,444=>666, +445=>578,446=>510,447=>635,448=>295,449=>492,450=>459,451=>295,452=>1455,453=>1295,454=>1160, +455=>852,456=>835,457=>556,458=>1043,459=>1026,460=>912,461=>684,462=>613,463=>295,464=>278, +465=>787,466=>612,467=>732,468=>634,469=>732,470=>634,471=>732,472=>634,473=>732,474=>634, +475=>732,476=>634,477=>615,478=>684,479=>613,480=>684,481=>613,482=>974,483=>995,484=>775, +485=>635,486=>775,487=>635,488=>656,489=>579,490=>787,491=>612,492=>787,493=>612,494=>666, +495=>525,496=>278,497=>1455,498=>1295,499=>1160,500=>775,501=>635,502=>1113,503=>682,504=>748, +505=>634,506=>684,507=>613,508=>974,509=>995,510=>787,511=>612,512=>684,513=>613,514=>684, +515=>613,516=>632,517=>615,518=>632,519=>615,520=>295,521=>278,522=>295,523=>278,524=>787, +525=>612,526=>787,527=>612,528=>695,529=>411,530=>695,531=>411,532=>732,533=>634,534=>732, +535=>634,536=>635,537=>521,538=>611,539=>392,540=>627,541=>521,542=>752,543=>634,544=>735, +545=>838,546=>698,547=>610,548=>685,549=>525,550=>684,551=>613,552=>632,553=>615,554=>787, +555=>612,556=>787,557=>612,558=>787,559=>612,560=>787,561=>612,562=>611,563=>592,564=>475, +565=>843,566=>477,567=>278,568=>998,569=>998,570=>684,571=>698,572=>550,573=>557,574=>611, +575=>521,576=>525,577=>603,578=>479,579=>686,580=>732,581=>684,582=>632,583=>615,584=>295, +585=>278,586=>781,587=>635,588=>695,589=>411,590=>611,591=>592,592=>613,593=>635,594=>635, +595=>635,596=>550,597=>550,598=>635,599=>727,600=>615,601=>615,602=>844,603=>545,604=>545, +605=>775,606=>664,607=>326,608=>696,609=>635,610=>629,611=>596,612=>596,613=>634,614=>634, +615=>634,616=>372,617=>387,618=>372,619=>396,620=>487,621=>278,622=>706,623=>974,624=>974, +625=>974,626=>646,627=>642,628=>634,629=>612,630=>858,631=>728,632=>660,633=>469,634=>469, +635=>469,636=>469,637=>469,638=>530,639=>530,640=>602,641=>602,642=>521,643=>336,644=>336, +645=>461,646=>336,647=>392,648=>392,649=>634,650=>618,651=>598,652=>592,653=>818,654=>592, +655=>611,656=>525,657=>525,658=>578,659=>578,660=>510,661=>510,662=>510,663=>510,664=>787, +665=>580,666=>664,667=>708,668=>654,669=>292,670=>667,671=>507,672=>727,673=>510,674=>510, +675=>1014,676=>1058,677=>1013,678=>824,679=>610,680=>778,681=>848,682=>641,683=>654,684=>515, +685=>515,686=>570,687=>664,688=>399,689=>399,690=>175,691=>259,692=>295,693=>296,694=>379, +695=>515,696=>373,697=>278,698=>460,699=>318,700=>318,701=>318,702=>307,703=>307,704=>370, +705=>370,706=>500,707=>500,708=>500,709=>500,711=>500,712=>275,713=>500,714=>500,715=>500, +716=>275,717=>500,718=>500,719=>500,720=>337,721=>337,722=>307,723=>307,724=>500,725=>500, +726=>390,727=>317,728=>500,729=>500,730=>500,731=>500,733=>500,734=>315,735=>500,736=>426, +737=>166,738=>373,739=>444,740=>370,741=>493,742=>493,743=>493,744=>493,745=>493,748=>500, +749=>500,750=>518,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0, +774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0, +784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0, +794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0, +844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0, +860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>654,881=>568,882=>862, +883=>647,884=>278,885=>278,886=>748,887=>650,890=>500,891=>549,892=>550,893=>549,894=>337, +900=>500,901=>500,902=>684,903=>318,904=>767,905=>903,906=>435,908=>839,910=>860,911=>905, +912=>338,913=>684,914=>686,915=>557,916=>684,917=>632,918=>685,919=>752,920=>787,921=>295, +922=>656,923=>684,924=>863,925=>748,926=>632,927=>787,928=>752,929=>603,931=>632,932=>611, +933=>611,934=>787,935=>685,936=>787,937=>764,938=>295,939=>611,940=>659,941=>541,942=>634, +943=>338,944=>579,945=>659,946=>638,947=>592,948=>612,949=>541,950=>544,951=>634,952=>612, +953=>338,954=>589,955=>592,956=>636,957=>559,958=>558,959=>612,960=>602,961=>635,962=>587, +963=>634,964=>602,965=>579,966=>660,967=>592,968=>660,969=>837,970=>338,971=>579,972=>612, +973=>579,974=>837,975=>656,976=>614,977=>619,978=>699,979=>842,980=>699,981=>660,982=>837, +983=>664,984=>787,985=>612,986=>648,987=>587,988=>575,989=>458,990=>660,991=>660,992=>865, +993=>627,994=>934,995=>837,996=>758,997=>659,998=>792,999=>615,1000=>687,1001=>607,1002=>768, +1003=>625,1004=>699,1005=>612,1006=>611,1007=>536,1008=>664,1009=>635,1010=>550,1011=>278,1012=>787, +1013=>615,1014=>615,1015=>608,1016=>635,1017=>698,1018=>863,1019=>651,1020=>635,1021=>703,1022=>698, +1023=>703,1024=>632,1025=>632,1026=>786,1027=>557,1028=>698,1029=>635,1030=>295,1031=>295,1032=>295, +1033=>1094,1034=>1045,1035=>786,1036=>710,1037=>748,1038=>609,1039=>752,1040=>684,1041=>686,1042=>686, +1043=>557,1044=>781,1045=>632,1046=>1077,1047=>641,1048=>748,1049=>748,1050=>710,1051=>752,1052=>863, +1053=>752,1054=>787,1055=>752,1056=>603,1057=>698,1058=>611,1059=>609,1060=>861,1061=>685,1062=>776, +1063=>686,1064=>1069,1065=>1094,1066=>833,1067=>818,1068=>686,1069=>698,1070=>1080,1071=>695,1072=>613, +1073=>617,1074=>589,1075=>525,1076=>691,1077=>615,1078=>901,1079=>532,1080=>650,1081=>650,1082=>604, +1083=>639,1084=>754,1085=>654,1086=>612,1087=>654,1088=>635,1089=>550,1090=>583,1091=>592,1092=>855, +1093=>592,1094=>681,1095=>591,1096=>915,1097=>942,1098=>707,1099=>790,1100=>589,1101=>549,1102=>842, +1103=>602,1104=>615,1105=>615,1106=>625,1107=>525,1108=>549,1109=>521,1110=>278,1111=>278,1112=>278, +1113=>902,1114=>898,1115=>652,1116=>604,1117=>650,1118=>592,1119=>654,1120=>934,1121=>837,1122=>771, +1123=>672,1124=>942,1125=>749,1126=>879,1127=>783,1128=>1160,1129=>1001,1130=>787,1131=>612,1132=>1027, +1133=>824,1134=>636,1135=>541,1136=>856,1137=>876,1138=>787,1139=>612,1140=>781,1141=>665,1142=>781, +1143=>665,1144=>992,1145=>904,1146=>953,1147=>758,1148=>1180,1149=>1028,1150=>934,1151=>837,1152=>698, +1153=>550,1154=>502,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>748, +1163=>657,1164=>686,1165=>589,1166=>603,1167=>635,1168=>610,1169=>525,1170=>675,1171=>556,1172=>557, +1173=>491,1174=>1077,1175=>901,1176=>641,1177=>532,1178=>710,1179=>604,1180=>710,1181=>604,1182=>710, +1183=>604,1184=>856,1185=>832,1186=>752,1187=>661,1188=>1014,1189=>877,1190=>1113,1191=>950,1192=>890, +1193=>707,1194=>698,1195=>550,1196=>611,1197=>529,1198=>611,1199=>592,1200=>611,1201=>592,1202=>685, +1203=>592,1204=>934,1205=>807,1206=>686,1207=>591,1208=>686,1209=>591,1210=>686,1211=>634,1212=>929, +1213=>731,1214=>929,1215=>731,1216=>295,1217=>1077,1218=>901,1219=>655,1220=>604,1221=>752,1222=>639, +1223=>752,1224=>661,1225=>752,1226=>661,1227=>686,1228=>591,1229=>863,1230=>754,1231=>278,1232=>684, +1233=>613,1234=>684,1235=>613,1236=>974,1237=>995,1238=>632,1239=>615,1240=>787,1241=>615,1242=>787, +1243=>615,1244=>1077,1245=>901,1246=>641,1247=>532,1248=>666,1249=>578,1250=>748,1251=>650,1252=>748, +1253=>650,1254=>787,1255=>612,1256=>787,1257=>612,1258=>787,1259=>612,1260=>698,1261=>549,1262=>609, +1263=>592,1264=>609,1265=>592,1266=>609,1267=>592,1268=>686,1269=>591,1270=>557,1271=>491,1272=>818, +1273=>790,1274=>675,1275=>556,1276=>685,1277=>592,1278=>685,1279=>592,1280=>686,1281=>589,1282=>1006, +1283=>897,1284=>975,1285=>869,1286=>679,1287=>588,1288=>1072,1289=>957,1290=>1113,1291=>967,1292=>775, +1293=>660,1294=>773,1295=>711,1296=>614,1297=>541,1298=>752,1299=>639,1300=>1195,1301=>997,1302=>900, +1303=>867,1304=>1031,1305=>989,1306=>787,1307=>635,1308=>989,1309=>818,1312=>1113,1313=>942,1314=>1113, +1315=>949,1316=>793,1317=>683,1329=>867,1330=>732,1331=>882,1332=>882,1333=>732,1334=>644,1335=>682, +1336=>732,1337=>851,1338=>882,1339=>732,1340=>557,1341=>824,1342=>986,1343=>732,1344=>707,1345=>644, +1346=>882,1347=>777,1348=>882,1349=>732,1350=>840,1351=>732,1352=>732,1353=>732,1354=>791,1355=>644, +1356=>882,1357=>732,1358=>882,1359=>635,1360=>732,1361=>732,1362=>799,1363=>861,1364=>790,1365=>787, +1366=>635,1369=>307,1370=>318,1371=>500,1372=>500,1373=>392,1374=>526,1375=>500,1377=>974,1378=>634, +1379=>762,1380=>767,1381=>634,1382=>697,1383=>533,1384=>634,1385=>700,1386=>697,1387=>634,1388=>404, +1389=>894,1390=>641,1391=>634,1392=>634,1393=>635,1394=>702,1395=>634,1396=>659,1397=>278,1398=>760, +1399=>516,1400=>634,1401=>453,1402=>974,1403=>516,1404=>769,1405=>634,1406=>696,1407=>974,1408=>634, +1409=>635,1410=>501,1411=>974,1412=>648,1413=>612,1414=>629,1415=>763,1417=>337,1418=>433,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>361,1471=>0,1472=>295,1473=>0,1474=>0,1475=>295,1478=>456, +1479=>0,1488=>629,1489=>608,1490=>448,1491=>594,1492=>640,1493=>272,1494=>374,1495=>640,1496=>648, +1497=>272,1498=>592,1499=>556,1500=>599,1501=>640,1502=>659,1503=>272,1504=>441,1505=>700,1506=>563, +1507=>640,1508=>604,1509=>521,1510=>581,1511=>663,1512=>592,1513=>808,1514=>657,1520=>471,1521=>454, +1522=>471,1523=>416,1524=>645,3647=>652,3713=>670,3714=>684,3716=>688,3719=>482,3720=>628,3722=>684, +3725=>688,3732=>642,3733=>642,3734=>672,3735=>655,3737=>641,3738=>592,3739=>592,3740=>745,3741=>767, +3742=>687,3743=>687,3745=>702,3746=>688,3747=>684,3749=>649,3751=>632,3754=>703,3755=>819,3757=>633, +3758=>684,3759=>788,3760=>632,3761=>0,3762=>539,3763=>539,3764=>0,3765=>0,3766=>0,3767=>0, +3768=>0,3769=>0,3771=>0,3772=>0,3773=>663,3776=>360,3777=>679,3778=>460,3779=>547,3780=>491, +3782=>674,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>636,3793=>641,3794=>641, +3795=>670,3796=>625,3797=>625,3798=>703,3799=>670,3800=>674,3801=>677,3804=>1028,3805=>1028,4256=>840, +4257=>690,4258=>642,4259=>759,4260=>591,4261=>686,4262=>789,4263=>811,4264=>467,4265=>565,4266=>789, +4267=>793,4268=>584,4269=>837,4270=>750,4271=>688,4272=>811,4273=>584,4274=>584,4275=>837,4276=>837, +4277=>646,4278=>604,4279=>584,4280=>596,4281=>584,4282=>721,4283=>795,4284=>584,4285=>566,4286=>584, +4287=>669,4288=>799,4289=>542,4290=>664,4291=>542,4292=>565,4293=>674,4304=>508,4305=>508,4306=>533, +4307=>785,4308=>522,4309=>517,4310=>508,4311=>797,4312=>507,4313=>518,4314=>1058,4315=>522,4316=>523, +4317=>783,4318=>518,4319=>523,4320=>792,4321=>523,4322=>656,4323=>524,4324=>788,4325=>523,4326=>782, +4327=>523,4328=>522,4329=>522,4330=>566,4331=>523,4332=>523,4333=>489,4334=>522,4335=>498,4336=>517, +4337=>560,4338=>508,4339=>508,4340=>508,4341=>563,4342=>824,4343=>595,4344=>522,4345=>554,4346=>553, +4347=>586,4348=>304,5121=>684,5122=>684,5123=>684,5124=>684,5125=>769,5126=>769,5127=>769,5129=>769, +5130=>769,5131=>769,5132=>835,5133=>834,5134=>835,5135=>834,5136=>835,5137=>834,5138=>967,5139=>1007, +5140=>967,5141=>1007,5142=>769,5143=>967,5144=>1007,5145=>967,5146=>1007,5147=>769,5149=>256,5150=>543, +5151=>423,5152=>423,5153=>389,5154=>389,5155=>393,5156=>389,5157=>466,5158=>385,5159=>256,5160=>389, +5161=>389,5162=>389,5163=>1090,5164=>909,5165=>953,5166=>1117,5167=>684,5168=>684,5169=>684,5170=>684, +5171=>729,5172=>729,5173=>729,5175=>729,5176=>729,5177=>729,5178=>835,5179=>684,5180=>835,5181=>834, +5182=>835,5183=>834,5184=>967,5185=>1007,5186=>967,5187=>1007,5188=>967,5189=>1007,5190=>967,5191=>1007, +5192=>729,5193=>508,5194=>192,5196=>732,5197=>732,5198=>732,5199=>732,5200=>730,5201=>730,5202=>730, +5204=>730,5205=>730,5206=>730,5207=>921,5208=>889,5209=>921,5210=>889,5211=>921,5212=>889,5213=>928, +5214=>900,5215=>928,5216=>900,5217=>947,5218=>900,5219=>947,5220=>900,5221=>947,5222=>434,5223=>877, +5224=>877,5225=>866,5226=>890,5227=>628,5228=>628,5229=>628,5230=>628,5231=>628,5232=>628,5233=>628, +5234=>628,5235=>628,5236=>860,5237=>771,5238=>815,5239=>816,5240=>815,5241=>816,5242=>860,5243=>771, +5244=>860,5245=>771,5246=>815,5247=>816,5248=>815,5249=>816,5250=>815,5251=>407,5252=>407,5253=>750, +5254=>775,5255=>750,5256=>775,5257=>628,5258=>628,5259=>628,5260=>628,5261=>628,5262=>628,5263=>628, +5264=>628,5265=>628,5266=>860,5267=>771,5268=>815,5269=>816,5270=>815,5271=>816,5272=>860,5273=>771, +5274=>860,5275=>771,5276=>815,5277=>816,5278=>815,5279=>816,5280=>815,5281=>435,5282=>435,5283=>610, +5284=>557,5285=>557,5286=>557,5287=>610,5288=>610,5289=>610,5290=>557,5291=>557,5292=>749,5293=>769, +5294=>746,5295=>764,5296=>746,5297=>764,5298=>749,5299=>769,5300=>749,5301=>769,5302=>746,5303=>764, +5304=>746,5305=>764,5306=>746,5307=>386,5308=>508,5309=>386,5312=>852,5313=>852,5314=>852,5315=>852, +5316=>852,5317=>852,5318=>852,5319=>852,5320=>852,5321=>1069,5322=>1035,5323=>1059,5324=>852,5325=>1059, +5326=>852,5327=>852,5328=>600,5329=>453,5330=>600,5331=>852,5332=>852,5333=>852,5334=>852,5335=>852, +5336=>852,5337=>852,5338=>852,5339=>852,5340=>1069,5341=>1035,5342=>1059,5343=>1030,5344=>1059,5345=>1030, +5346=>1069,5347=>1035,5348=>1069,5349=>1035,5350=>1083,5351=>1030,5352=>1083,5353=>1030,5354=>600,5356=>729, +5357=>603,5358=>603,5359=>603,5360=>603,5361=>603,5362=>603,5363=>603,5364=>603,5365=>603,5366=>834, +5367=>754,5368=>792,5369=>771,5370=>792,5371=>771,5372=>834,5373=>754,5374=>834,5375=>754,5376=>792, +5377=>771,5378=>792,5379=>771,5380=>792,5381=>418,5382=>420,5383=>418,5392=>712,5393=>712,5394=>712, +5395=>892,5396=>892,5397=>892,5398=>892,5399=>910,5400=>872,5401=>910,5402=>872,5403=>910,5404=>872, +5405=>1140,5406=>1100,5407=>1140,5408=>1100,5409=>1140,5410=>1100,5411=>1140,5412=>1100,5413=>641,5414=>627, +5415=>627,5416=>627,5417=>627,5418=>627,5419=>627,5420=>627,5421=>627,5422=>627,5423=>844,5424=>781, +5425=>816,5426=>818,5427=>816,5428=>818,5429=>844,5430=>781,5431=>844,5432=>781,5433=>816,5434=>818, +5435=>816,5436=>818,5437=>816,5438=>418,5440=>389,5441=>484,5442=>916,5443=>916,5444=>863,5445=>916, +5446=>863,5447=>863,5448=>603,5449=>603,5450=>603,5451=>603,5452=>603,5453=>603,5454=>834,5455=>754, +5456=>418,5458=>729,5459=>684,5460=>684,5461=>684,5462=>684,5463=>726,5464=>726,5465=>726,5466=>726, +5467=>924,5468=>1007,5469=>508,5470=>732,5471=>732,5472=>732,5473=>732,5474=>732,5475=>732,5476=>730, +5477=>730,5478=>730,5479=>730,5480=>947,5481=>900,5482=>508,5492=>831,5493=>831,5494=>831,5495=>831, +5496=>831,5497=>831,5498=>831,5499=>563,5500=>752,5501=>484,5502=>1047,5503=>1047,5504=>1047,5505=>1047, +5506=>1047,5507=>1047,5508=>1047,5509=>825,5514=>831,5515=>831,5516=>831,5517=>831,5518=>1259,5519=>1259, +5520=>1259,5521=>1002,5522=>1002,5523=>1259,5524=>1259,5525=>700,5526=>1073,5536=>852,5537=>852,5538=>799, +5539=>799,5540=>799,5541=>799,5542=>600,5543=>643,5544=>643,5545=>643,5546=>643,5547=>643,5548=>643, +5549=>643,5550=>418,5551=>628,5598=>770,5601=>770,5702=>468,5703=>468,5742=>444,5743=>1047,5744=>1310, +5745=>1632,5746=>1632,5747=>1375,5748=>1375,5749=>1632,5750=>1632,7424=>592,7425=>717,7426=>982,7427=>586, +7428=>550,7429=>605,7430=>605,7431=>491,7432=>541,7433=>278,7434=>395,7435=>579,7436=>583,7437=>754, +7438=>650,7439=>612,7440=>550,7441=>684,7442=>684,7443=>684,7444=>1023,7446=>612,7447=>612,7448=>524, +7449=>602,7450=>602,7451=>583,7452=>574,7453=>737,7454=>948,7455=>638,7456=>592,7457=>818,7458=>525, +7459=>526,7462=>583,7463=>592,7464=>564,7465=>524,7466=>590,7467=>639,7468=>431,7469=>613,7470=>432, +7472=>485,7473=>398,7474=>398,7475=>488,7476=>474,7477=>186,7478=>186,7479=>413,7480=>351,7481=>543, +7482=>471,7483=>471,7484=>496,7485=>439,7486=>380,7487=>438,7488=>385,7489=>461,7490=>623,7491=>392, +7492=>392,7493=>405,7494=>648,7495=>428,7496=>405,7497=>417,7498=>417,7499=>360,7500=>359,7501=>405, +7502=>179,7503=>426,7504=>623,7505=>409,7506=>414,7507=>370,7508=>414,7509=>414,7510=>428,7511=>295, +7512=>405,7513=>470,7514=>623,7515=>417,7517=>402,7518=>373,7519=>385,7520=>416,7521=>364,7522=>179, +7523=>259,7524=>405,7525=>417,7526=>402,7527=>373,7528=>412,7529=>416,7530=>364,7543=>635,7544=>474, +7547=>372,7557=>278,7579=>405,7580=>370,7581=>370,7582=>414,7583=>360,7584=>296,7585=>233,7586=>405, +7587=>405,7588=>261,7589=>250,7590=>261,7591=>261,7592=>234,7593=>250,7594=>235,7595=>376,7596=>623, +7597=>623,7598=>411,7599=>479,7600=>409,7601=>414,7602=>414,7603=>360,7604=>287,7605=>295,7606=>508, +7607=>418,7608=>361,7609=>406,7610=>417,7611=>366,7612=>437,7613=>366,7614=>392,7615=>414,7620=>0, +7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>684,7681=>613,7682=>686,7683=>635,7684=>686, +7685=>635,7686=>686,7687=>635,7688=>698,7689=>550,7690=>770,7691=>635,7692=>770,7693=>635,7694=>770, +7695=>635,7696=>770,7697=>635,7698=>770,7699=>635,7700=>632,7701=>615,7702=>632,7703=>615,7704=>632, +7705=>615,7706=>632,7707=>615,7708=>632,7709=>615,7710=>575,7711=>352,7712=>775,7713=>635,7714=>752, +7715=>634,7716=>752,7717=>634,7718=>752,7719=>634,7720=>752,7721=>634,7722=>752,7723=>634,7724=>295, +7725=>278,7726=>295,7727=>278,7728=>656,7729=>579,7730=>656,7731=>579,7732=>656,7733=>579,7734=>557, +7735=>278,7736=>557,7737=>278,7738=>557,7739=>278,7740=>557,7741=>278,7742=>863,7743=>974,7744=>863, +7745=>974,7746=>863,7747=>974,7748=>748,7749=>634,7750=>748,7751=>634,7752=>748,7753=>634,7754=>748, +7755=>634,7756=>787,7757=>612,7758=>787,7759=>612,7760=>787,7761=>612,7762=>787,7763=>612,7764=>603, +7765=>635,7766=>603,7767=>635,7768=>695,7769=>411,7770=>695,7771=>411,7772=>695,7773=>411,7774=>695, +7775=>411,7776=>635,7777=>521,7778=>635,7779=>521,7780=>635,7781=>521,7782=>635,7783=>521,7784=>635, +7785=>521,7786=>611,7787=>392,7788=>611,7789=>392,7790=>611,7791=>392,7792=>611,7793=>392,7794=>732, +7795=>634,7796=>732,7797=>634,7798=>732,7799=>634,7800=>732,7801=>634,7802=>732,7803=>634,7804=>684, +7805=>592,7806=>684,7807=>592,7808=>989,7809=>818,7810=>989,7811=>818,7812=>989,7813=>818,7814=>989, +7815=>818,7816=>989,7817=>818,7818=>685,7819=>592,7820=>685,7821=>592,7822=>611,7823=>592,7824=>685, +7825=>525,7826=>685,7827=>525,7828=>685,7829=>525,7830=>634,7831=>392,7832=>818,7833=>592,7834=>613, +7835=>352,7838=>769,7839=>612,7840=>684,7841=>613,7842=>684,7843=>613,7844=>684,7845=>613,7846=>684, +7847=>613,7848=>684,7849=>613,7850=>684,7851=>613,7852=>684,7853=>613,7854=>684,7855=>613,7856=>684, +7857=>613,7858=>684,7859=>613,7860=>684,7861=>613,7862=>684,7863=>613,7864=>632,7865=>615,7866=>632, +7867=>615,7868=>632,7869=>615,7870=>632,7871=>615,7872=>632,7873=>615,7874=>632,7875=>615,7876=>632, +7877=>615,7878=>632,7879=>615,7880=>295,7881=>278,7882=>295,7883=>278,7884=>787,7885=>612,7886=>787, +7887=>612,7888=>787,7889=>612,7890=>787,7891=>612,7892=>787,7893=>612,7894=>787,7895=>612,7896=>787, +7897=>612,7898=>913,7899=>612,7900=>913,7901=>612,7902=>913,7903=>612,7904=>913,7905=>612,7906=>913, +7907=>612,7908=>732,7909=>634,7910=>732,7911=>634,7912=>838,7913=>634,7914=>838,7915=>634,7916=>838, +7917=>634,7918=>838,7919=>634,7920=>838,7921=>634,7922=>611,7923=>592,7924=>611,7925=>592,7926=>611, +7927=>592,7928=>611,7929=>592,7936=>659,7937=>659,7938=>659,7939=>659,7940=>659,7941=>659,7942=>659, +7943=>659,7944=>684,7945=>684,7946=>877,7947=>877,7948=>769,7949=>801,7950=>708,7951=>743,7952=>541, +7953=>541,7954=>541,7955=>541,7956=>541,7957=>541,7960=>711,7961=>711,7962=>966,7963=>975,7964=>898, +7965=>928,7968=>634,7969=>634,7970=>634,7971=>634,7972=>634,7973=>634,7974=>634,7975=>634,7976=>837, +7977=>835,7978=>1086,7979=>1089,7980=>1027,7981=>1051,7982=>934,7983=>947,7984=>338,7985=>338,7986=>338, +7987=>338,7988=>338,7989=>338,7990=>338,7991=>338,7992=>380,7993=>374,7994=>635,7995=>635,7996=>570, +7997=>600,7998=>489,7999=>493,8000=>612,8001=>612,8002=>612,8003=>612,8004=>612,8005=>612,8008=>804, +8009=>848,8010=>1095,8011=>1100,8012=>938,8013=>970,8016=>579,8017=>579,8018=>579,8019=>579,8020=>579, +8021=>579,8022=>579,8023=>579,8025=>784,8027=>998,8029=>1012,8031=>897,8032=>837,8033=>837,8034=>837, +8035=>837,8036=>837,8037=>837,8038=>837,8039=>837,8040=>802,8041=>843,8042=>1089,8043=>1095,8044=>946, +8045=>972,8046=>921,8047=>952,8048=>659,8049=>659,8050=>541,8051=>548,8052=>634,8053=>654,8054=>338, +8055=>338,8056=>612,8057=>612,8058=>579,8059=>579,8060=>837,8061=>837,8064=>659,8065=>659,8066=>659, +8067=>659,8068=>659,8069=>659,8070=>659,8071=>659,8072=>684,8073=>684,8074=>877,8075=>877,8076=>769, +8077=>801,8078=>708,8079=>743,8080=>634,8081=>634,8082=>634,8083=>634,8084=>634,8085=>634,8086=>634, +8087=>634,8088=>837,8089=>835,8090=>1086,8091=>1089,8092=>1027,8093=>1051,8094=>934,8095=>947,8096=>837, +8097=>837,8098=>837,8099=>837,8100=>837,8101=>837,8102=>837,8103=>837,8104=>802,8105=>843,8106=>1089, +8107=>1095,8108=>946,8109=>972,8110=>921,8111=>952,8112=>659,8113=>659,8114=>659,8115=>659,8116=>659, +8118=>659,8119=>659,8120=>684,8121=>684,8122=>716,8123=>692,8124=>684,8125=>500,8126=>500,8127=>500, +8128=>500,8129=>500,8130=>634,8131=>634,8132=>654,8134=>634,8135=>634,8136=>805,8137=>746,8138=>931, +8139=>871,8140=>752,8141=>500,8142=>500,8143=>500,8144=>338,8145=>338,8146=>338,8147=>338,8150=>338, +8151=>338,8152=>295,8153=>295,8154=>475,8155=>408,8157=>500,8158=>500,8159=>500,8160=>579,8161=>579, +8162=>579,8163=>579,8164=>635,8165=>635,8166=>579,8167=>579,8168=>611,8169=>611,8170=>845,8171=>825, +8172=>685,8173=>500,8174=>500,8175=>500,8178=>837,8179=>837,8180=>837,8182=>837,8183=>837,8184=>941, +8185=>813,8186=>922,8187=>826,8188=>764,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000, +8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0, +8206=>0,8207=>0,8208=>361,8209=>361,8210=>636,8213=>1000,8214=>500,8215=>500,8219=>318,8223=>518, +8227=>590,8228=>333,8229=>667,8231=>318,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200, +8241=>1690,8242=>227,8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339,8251=>838,8252=>485, +8253=>531,8254=>500,8255=>804,8256=>804,8257=>250,8258=>1000,8259=>500,8260=>167,8261=>390,8262=>390, +8263=>922,8264=>733,8265=>733,8266=>497,8267=>636,8268=>500,8269=>500,8270=>500,8271=>337,8272=>804, +8273=>500,8274=>450,8275=>1000,8276=>804,8277=>838,8278=>586,8279=>663,8280=>838,8281=>838,8282=>318, +8283=>797,8284=>838,8285=>318,8286=>318,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0, +8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>401,8305=>179,8308=>401,8309=>401, +8310=>401,8311=>401,8312=>401,8313=>401,8314=>528,8315=>528,8316=>528,8317=>246,8318=>246,8319=>399, +8320=>401,8321=>401,8322=>401,8323=>401,8324=>401,8325=>401,8326=>401,8327=>401,8328=>401,8329=>401, +8330=>528,8331=>528,8332=>528,8333=>246,8334=>246,8336=>392,8337=>417,8338=>414,8339=>444,8340=>417, +8352=>877,8353=>636,8354=>636,8355=>636,8356=>636,8357=>974,8358=>748,8359=>1271,8360=>1074,8361=>989, +8362=>838,8363=>636,8365=>656,8366=>611,8367=>1272,8368=>636,8369=>636,8370=>636,8371=>636,8372=>774, +8373=>641,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>970,8449=>970, +8450=>698,8451=>1123,8452=>896,8453=>969,8454=>1032,8455=>614,8456=>698,8457=>952,8459=>988,8460=>754, +8461=>850,8462=>634,8463=>634,8464=>470,8465=>697,8466=>720,8467=>413,8468=>818,8469=>801,8470=>1040, +8471=>1000,8472=>697,8473=>701,8474=>787,8475=>798,8476=>814,8477=>792,8478=>896,8479=>684,8480=>1020, +8481=>1014,8483=>684,8484=>745,8485=>578,8486=>764,8487=>764,8488=>616,8489=>338,8490=>656,8491=>684, +8492=>786,8493=>703,8494=>854,8495=>592,8496=>605,8497=>786,8498=>575,8499=>1069,8500=>462,8501=>745, +8502=>674,8503=>466,8504=>645,8505=>380,8506=>926,8507=>1157,8508=>702,8509=>728,8510=>654,8511=>849, +8512=>811,8513=>775,8514=>557,8515=>557,8516=>611,8517=>819,8518=>708,8519=>615,8520=>351,8521=>351, +8523=>780,8526=>526,8531=>969,8532=>969,8533=>969,8534=>969,8535=>969,8536=>969,8537=>969,8538=>969, +8539=>969,8540=>969,8541=>969,8542=>969,8543=>568,8544=>295,8545=>492,8546=>689,8547=>923,8548=>684, +8549=>922,8550=>1120,8551=>1317,8552=>917,8553=>685,8554=>933,8555=>1131,8556=>557,8557=>698,8558=>770, +8559=>863,8560=>278,8561=>458,8562=>637,8563=>812,8564=>592,8565=>811,8566=>991,8567=>1170,8568=>819, +8569=>592,8570=>822,8571=>1002,8572=>278,8573=>550,8574=>635,8575=>974,8576=>1245,8577=>770,8578=>1245, +8579=>703,8580=>549,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838, +8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838, +8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838, +8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838, +8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838, +8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838, +8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838, +8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838, +8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838, +8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838, +8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838, +8700=>838,8701=>838,8702=>838,8703=>838,8704=>684,8705=>636,8706=>517,8707=>632,8708=>632,8709=>871, +8710=>669,8711=>669,8712=>871,8713=>871,8714=>718,8715=>871,8716=>871,8717=>718,8718=>636,8719=>757, +8720=>757,8721=>674,8722=>838,8723=>838,8724=>838,8725=>337,8726=>637,8727=>838,8728=>626,8729=>626, +8730=>637,8731=>637,8732=>637,8733=>714,8734=>833,8735=>838,8736=>896,8737=>896,8738=>838,8739=>500, +8740=>500,8741=>500,8742=>500,8743=>732,8744=>732,8745=>732,8746=>732,8747=>521,8748=>789,8749=>1057, +8750=>521,8751=>789,8752=>1057,8753=>521,8754=>521,8755=>521,8756=>636,8757=>636,8758=>260,8759=>636, +8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8766=>838,8767=>838,8768=>375,8769=>838, +8770=>838,8771=>838,8772=>838,8773=>838,8774=>838,8775=>838,8776=>838,8777=>838,8778=>838,8779=>838, +8780=>838,8781=>838,8782=>838,8783=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1000,8789=>1000, +8790=>838,8791=>838,8792=>838,8793=>838,8794=>838,8795=>838,8796=>838,8797=>838,8798=>838,8799=>838, +8800=>838,8801=>838,8802=>838,8803=>838,8804=>838,8805=>838,8806=>838,8807=>838,8808=>838,8809=>838, +8810=>1047,8811=>1047,8812=>464,8813=>838,8814=>838,8815=>838,8816=>838,8817=>838,8818=>838,8819=>838, +8820=>838,8821=>838,8822=>838,8823=>838,8824=>838,8825=>838,8826=>838,8827=>838,8828=>838,8829=>838, +8830=>838,8831=>838,8832=>838,8833=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838, +8840=>838,8841=>838,8842=>838,8843=>838,8844=>732,8845=>732,8846=>732,8847=>838,8848=>838,8849=>838, +8850=>838,8851=>780,8852=>780,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838, +8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>871,8867=>871,8868=>871,8869=>871, +8870=>521,8871=>521,8872=>871,8873=>871,8874=>871,8875=>871,8876=>871,8877=>871,8878=>871,8879=>871, +8880=>838,8881=>838,8882=>838,8883=>838,8884=>838,8885=>838,8886=>1000,8887=>1000,8888=>838,8889=>838, +8890=>521,8891=>732,8892=>732,8893=>732,8894=>838,8895=>838,8896=>820,8897=>820,8898=>820,8899=>820, +8900=>494,8901=>318,8902=>626,8903=>838,8904=>1000,8905=>1000,8906=>1000,8907=>1000,8908=>1000,8909=>838, +8910=>732,8911=>732,8912=>838,8913=>838,8914=>838,8915=>838,8916=>838,8917=>838,8918=>838,8919=>838, +8920=>1422,8921=>1422,8922=>838,8923=>838,8924=>838,8925=>838,8926=>838,8927=>838,8928=>838,8929=>838, +8930=>838,8931=>838,8932=>838,8933=>838,8934=>838,8935=>838,8936=>838,8937=>838,8938=>838,8939=>838, +8940=>838,8941=>838,8942=>1000,8943=>1000,8944=>1000,8945=>1000,8946=>1000,8947=>871,8948=>718,8949=>871, +8950=>871,8951=>718,8952=>871,8953=>871,8954=>1000,8955=>871,8956=>718,8957=>871,8958=>718,8959=>871, +8960=>602,8961=>602,8962=>635,8963=>838,8964=>838,8965=>838,8966=>838,8967=>488,8968=>390,8969=>390, +8970=>390,8971=>390,8972=>809,8973=>809,8974=>809,8975=>809,8976=>838,8977=>513,8984=>1000,8985=>838, +8988=>469,8989=>469,8990=>469,8991=>469,8992=>521,8993=>521,8996=>1152,8997=>1152,8998=>1414,8999=>1152, +9000=>1443,9003=>1414,9004=>873,9075=>338,9076=>635,9077=>837,9082=>659,9085=>757,9095=>1152,9108=>873, +9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500, +9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>521, +9166=>838,9167=>945,9187=>873,9189=>769,9250=>635,9251=>635,9312=>896,9313=>896,9314=>896,9315=>896, +9316=>896,9317=>896,9318=>896,9319=>896,9320=>896,9321=>896,9472=>602,9473=>602,9474=>602,9475=>602, +9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602, +9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602, +9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602, +9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602, +9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602, +9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602, +9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602, +9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602, +9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602, +9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602, +9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602, +9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602, +9596=>602,9597=>602,9598=>602,9599=>602,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769, +9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769, +9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769, +9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945, +9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945, +9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769, +9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769, +9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873, +9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873, +9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387, +9696=>769,9697=>769,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945, +9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945, +9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732, +9726=>732,9727=>769,9728=>896,9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896,9734=>896,9735=>573, +9736=>896,9737=>896,9738=>888,9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250,9744=>896,9745=>896, +9746=>896,9747=>532,9748=>896,9749=>896,9750=>896,9751=>896,9752=>896,9753=>896,9754=>896,9755=>896, +9756=>896,9757=>609,9758=>896,9759=>609,9760=>896,9761=>896,9762=>896,9763=>896,9764=>669,9765=>746, +9766=>649,9767=>784,9768=>545,9769=>896,9770=>896,9771=>896,9772=>710,9773=>896,9774=>896,9775=>896, +9776=>890,9777=>890,9778=>890,9779=>890,9780=>890,9781=>890,9782=>890,9783=>890,9784=>896,9785=>896, +9786=>896,9787=>896,9788=>896,9789=>896,9790=>896,9791=>614,9792=>731,9793=>731,9794=>896,9795=>896, +9796=>896,9797=>896,9798=>896,9799=>896,9800=>896,9801=>896,9802=>896,9803=>896,9804=>896,9805=>896, +9806=>896,9807=>896,9808=>896,9809=>896,9810=>896,9811=>896,9812=>896,9813=>896,9814=>896,9815=>896, +9816=>896,9817=>896,9818=>896,9819=>896,9820=>896,9821=>896,9822=>896,9823=>896,9824=>896,9825=>896, +9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9832=>896,9833=>472,9834=>638,9835=>896, +9836=>896,9837=>472,9838=>357,9839=>484,9840=>748,9841=>766,9842=>896,9843=>896,9844=>896,9845=>896, +9846=>896,9847=>896,9848=>896,9849=>896,9850=>896,9851=>896,9852=>896,9853=>896,9854=>896,9855=>896, +9856=>869,9857=>869,9858=>869,9859=>869,9860=>869,9861=>869,9862=>890,9863=>890,9864=>890,9865=>890, +9866=>890,9867=>890,9868=>890,9869=>890,9870=>890,9871=>890,9872=>750,9873=>750,9874=>890,9875=>816, +9876=>716,9877=>537,9878=>852,9879=>890,9880=>684,9881=>890,9882=>708,9883=>890,9884=>890,9888=>890, +9889=>702,9890=>1003,9891=>1085,9892=>1143,9893=>901,9894=>838,9895=>838,9896=>838,9897=>838,9898=>838, +9899=>838,9900=>838,9901=>838,9902=>838,9903=>838,9904=>844,9905=>838,9906=>731,9907=>732,9908=>732, +9909=>732,9910=>850,9911=>732,9912=>732,9985=>838,9986=>838,9987=>838,9988=>838,9990=>838,9991=>838, +9992=>838,9993=>838,9996=>838,9997=>838,9998=>838,9999=>838,10000=>838,10001=>838,10002=>838,10003=>838, +10004=>838,10005=>838,10006=>838,10007=>838,10008=>838,10009=>838,10010=>838,10011=>838,10012=>838,10013=>838, +10014=>838,10015=>838,10016=>838,10017=>838,10018=>838,10019=>838,10020=>838,10021=>838,10022=>838,10023=>838, +10025=>838,10026=>838,10027=>838,10028=>838,10029=>838,10030=>838,10031=>838,10032=>838,10033=>838,10034=>838, +10035=>838,10036=>838,10037=>838,10038=>838,10039=>838,10040=>838,10041=>838,10042=>838,10043=>838,10044=>838, +10045=>838,10046=>838,10047=>838,10048=>838,10049=>838,10050=>838,10051=>838,10052=>838,10053=>838,10054=>838, +10055=>838,10056=>838,10057=>838,10058=>838,10059=>838,10061=>896,10063=>896,10064=>896,10065=>896,10066=>896, +10070=>896,10072=>838,10073=>838,10074=>838,10075=>322,10076=>322,10077=>538,10078=>538,10081=>838,10082=>838, +10083=>838,10084=>838,10085=>838,10086=>838,10087=>838,10088=>838,10089=>838,10090=>838,10091=>838,10092=>838, +10093=>838,10094=>838,10095=>838,10096=>838,10097=>838,10098=>838,10099=>838,10100=>838,10101=>838,10102=>896, +10103=>896,10104=>896,10105=>896,10106=>896,10107=>896,10108=>896,10109=>896,10110=>896,10111=>896,10112=>838, +10113=>838,10114=>838,10115=>838,10116=>838,10117=>838,10118=>838,10119=>838,10120=>838,10121=>838,10122=>838, +10123=>838,10124=>838,10125=>838,10126=>838,10127=>838,10128=>838,10129=>838,10130=>838,10131=>838,10132=>838, +10136=>838,10137=>838,10138=>838,10139=>838,10140=>838,10141=>838,10142=>838,10143=>838,10144=>838,10145=>838, +10146=>838,10147=>838,10148=>838,10149=>838,10150=>838,10151=>838,10152=>838,10153=>838,10154=>838,10155=>838, +10156=>838,10157=>838,10158=>838,10159=>838,10161=>838,10162=>838,10163=>838,10164=>838,10165=>838,10166=>838, +10167=>838,10168=>838,10169=>838,10170=>838,10171=>838,10172=>838,10173=>838,10174=>838,10181=>390,10182=>390, +10208=>494,10214=>495,10215=>495,10216=>390,10217=>390,10218=>556,10219=>556,10224=>838,10225=>838,10226=>838, +10227=>838,10228=>1157,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434, +10237=>1434,10238=>1434,10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732,10244=>732,10245=>732,10246=>732, +10247=>732,10248=>732,10249=>732,10250=>732,10251=>732,10252=>732,10253=>732,10254=>732,10255=>732,10256=>732, +10257=>732,10258=>732,10259=>732,10260=>732,10261=>732,10262=>732,10263=>732,10264=>732,10265=>732,10266=>732, +10267=>732,10268=>732,10269=>732,10270=>732,10271=>732,10272=>732,10273=>732,10274=>732,10275=>732,10276=>732, +10277=>732,10278=>732,10279=>732,10280=>732,10281=>732,10282=>732,10283=>732,10284=>732,10285=>732,10286=>732, +10287=>732,10288=>732,10289=>732,10290=>732,10291=>732,10292=>732,10293=>732,10294=>732,10295=>732,10296=>732, +10297=>732,10298=>732,10299=>732,10300=>732,10301=>732,10302=>732,10303=>732,10304=>732,10305=>732,10306=>732, +10307=>732,10308=>732,10309=>732,10310=>732,10311=>732,10312=>732,10313=>732,10314=>732,10315=>732,10316=>732, +10317=>732,10318=>732,10319=>732,10320=>732,10321=>732,10322=>732,10323=>732,10324=>732,10325=>732,10326=>732, +10327=>732,10328=>732,10329=>732,10330=>732,10331=>732,10332=>732,10333=>732,10334=>732,10335=>732,10336=>732, +10337=>732,10338=>732,10339=>732,10340=>732,10341=>732,10342=>732,10343=>732,10344=>732,10345=>732,10346=>732, +10347=>732,10348=>732,10349=>732,10350=>732,10351=>732,10352=>732,10353=>732,10354=>732,10355=>732,10356=>732, +10357=>732,10358=>732,10359=>732,10360=>732,10361=>732,10362=>732,10363=>732,10364=>732,10365=>732,10366=>732, +10367=>732,10368=>732,10369=>732,10370=>732,10371=>732,10372=>732,10373=>732,10374=>732,10375=>732,10376=>732, +10377=>732,10378=>732,10379=>732,10380=>732,10381=>732,10382=>732,10383=>732,10384=>732,10385=>732,10386=>732, +10387=>732,10388=>732,10389=>732,10390=>732,10391=>732,10392=>732,10393=>732,10394=>732,10395=>732,10396=>732, +10397=>732,10398=>732,10399=>732,10400=>732,10401=>732,10402=>732,10403=>732,10404=>732,10405=>732,10406=>732, +10407=>732,10408=>732,10409=>732,10410=>732,10411=>732,10412=>732,10413=>732,10414=>732,10415=>732,10416=>732, +10417=>732,10418=>732,10419=>732,10420=>732,10421=>732,10422=>732,10423=>732,10424=>732,10425=>732,10426=>732, +10427=>732,10428=>732,10429=>732,10430=>732,10431=>732,10432=>732,10433=>732,10434=>732,10435=>732,10436=>732, +10437=>732,10438=>732,10439=>732,10440=>732,10441=>732,10442=>732,10443=>732,10444=>732,10445=>732,10446=>732, +10447=>732,10448=>732,10449=>732,10450=>732,10451=>732,10452=>732,10453=>732,10454=>732,10455=>732,10456=>732, +10457=>732,10458=>732,10459=>732,10460=>732,10461=>732,10462=>732,10463=>732,10464=>732,10465=>732,10466=>732, +10467=>732,10468=>732,10469=>732,10470=>732,10471=>732,10472=>732,10473=>732,10474=>732,10475=>732,10476=>732, +10477=>732,10478=>732,10479=>732,10480=>732,10481=>732,10482=>732,10483=>732,10484=>732,10485=>732,10486=>732, +10487=>732,10488=>732,10489=>732,10490=>732,10491=>732,10492=>732,10493=>732,10494=>732,10495=>732,10502=>838, +10503=>838,10506=>838,10507=>838,10560=>683,10561=>683,10627=>734,10628=>734,10702=>838,10703=>1000,10704=>1000, +10705=>1000,10706=>1000,10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838,10747=>838,10752=>1000,10753=>1000, +10754=>1000,10764=>1325,10765=>521,10766=>521,10767=>521,10768=>521,10769=>521,10770=>521,10771=>521,10772=>521, +10773=>521,10774=>521,10775=>521,10776=>521,10777=>521,10778=>521,10779=>521,10780=>521,10799=>838,10877=>838, +10878=>838,10879=>838,10880=>838,10881=>838,10882=>838,10883=>838,10884=>838,10885=>838,10886=>838,10887=>838, +10888=>838,10889=>838,10890=>838,10891=>838,10892=>838,10893=>838,10894=>838,10895=>838,10896=>838,10897=>838, +10898=>838,10899=>838,10900=>838,10901=>838,10902=>838,10903=>838,10904=>838,10905=>838,10906=>838,10907=>838, +10908=>838,10909=>838,10910=>838,10911=>838,10912=>838,10926=>838,10927=>838,10928=>838,10929=>838,10930=>838, +10931=>838,10932=>838,10933=>838,10934=>838,10935=>838,10936=>838,10937=>838,10938=>838,11001=>838,11002=>838, +11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838, +11018=>838,11019=>838,11020=>838,11021=>838,11022=>836,11023=>836,11024=>836,11025=>836,11026=>945,11027=>945, +11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11039=>869,11040=>869,11041=>873, +11042=>873,11043=>873,11044=>1119,11091=>869,11092=>869,11360=>557,11361=>278,11362=>557,11363=>603,11364=>695, +11365=>613,11366=>392,11367=>752,11368=>634,11369=>656,11370=>579,11371=>685,11372=>525,11373=>781,11374=>863, +11375=>684,11377=>734,11378=>1128,11379=>961,11380=>592,11381=>654,11382=>568,11383=>660,11385=>414,11386=>612, +11387=>491,11388=>175,11389=>431,11800=>531,11810=>390,11811=>390,11812=>390,11813=>390,11822=>531,19904=>896, +19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896,19911=>896,19912=>896,19913=>896,19914=>896, +19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896,19921=>896,19922=>896,19923=>896,19924=>896, +19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896,19931=>896,19932=>896,19933=>896,19934=>896, +19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896,19941=>896,19942=>896,19943=>896,19944=>896, +19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896,19951=>896,19952=>896,19953=>896,19954=>896, +19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896,19961=>896,19962=>896,19963=>896,19964=>896, +19965=>896,19966=>896,19967=>896,42564=>635,42565=>521,42566=>354,42567=>338,42572=>1180,42573=>1028,42576=>1029, +42577=>906,42580=>1080,42581=>842,42582=>985,42583=>847,42594=>1024,42595=>925,42596=>1014,42597=>900,42598=>863, +42599=>1008,42600=>787,42601=>612,42602=>855,42603=>712,42604=>1358,42605=>1019,42606=>879,42634=>805,42635=>722, +42636=>611,42637=>583,42644=>686,42645=>634,42760=>493,42761=>493,42762=>493,42763=>493,42764=>493,42765=>493, +42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493,42774=>493,42779=>369, +42780=>369,42781=>252,42782=>252,42783=>252,42790=>752,42791=>634,42792=>878,42793=>709,42794=>614,42795=>541, +42800=>491,42801=>521,42802=>1250,42803=>985,42804=>1219,42805=>1000,42806=>1155,42807=>996,42808=>971,42809=>818, +42810=>971,42811=>818,42812=>959,42813=>818,42814=>698,42815=>549,42822=>680,42823=>392,42824=>582,42825=>427, +42826=>807,42827=>704,42830=>1358,42831=>1019,42880=>557,42881=>278,42882=>735,42883=>634,42889=>337,42890=>376, +42891=>401,42892=>275,43003=>575,43004=>603,43005=>863,43006=>295,43007=>1199,63173=>612,64256=>722,64257=>646, +64258=>646,64259=>1000,64260=>1000,64261=>686,64262=>861,64275=>1202,64276=>1202,64277=>1196,64278=>1186,64279=>1529, +64285=>272,64286=>0,64287=>471,64288=>636,64289=>856,64290=>774,64291=>906,64292=>771,64293=>843,64294=>855, +64295=>807,64296=>875,64297=>838,64298=>808,64299=>808,64300=>808,64301=>808,64302=>629,64303=>629,64304=>629, +64305=>608,64306=>448,64307=>594,64308=>640,64309=>272,64310=>374,64311=>1000,64312=>648,64313=>336,64314=>592, +64315=>556,64316=>599,64318=>659,64320=>441,64321=>700,64323=>640,64324=>604,64326=>581,64327=>663,64328=>592, +64329=>808,64330=>657,64331=>272,64332=>608,64333=>556,64334=>604,64335=>629,65024=>0,65025=>0,65026=>0, +65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0, +65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65529=>0,65530=>0,65531=>0, +65532=>0,65533=>1025); +$enc=''; +$diff=''; +$file='dejavusansi.z'; +$ctg='dejavusansi.ctg.z'; +$originalsize=523804; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansi.z new file mode 100755 index 00000000..bb3d034b Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmono.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmono.ctg.z new file mode 100755 index 00000000..bc940329 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmono.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmono.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmono.php new file mode 100755 index 00000000..96ffd0e4 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmono.php @@ -0,0 +1,320 @@ +928,'Descent'=>-236,'CapHeight'=>9,'Flags'=>33,'FontBBox'=>'[-558 -375 718 1042]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>602); +$up=-63; +$ut=44; +$dw=602; +$cw=array( +0=>602,32=>602,33=>602,34=>602,35=>602,36=>602,37=>602,38=>602,39=>602,40=>602, +41=>602,42=>602,43=>602,44=>602,45=>602,46=>602,47=>602,48=>602,49=>602,50=>602, +51=>602,52=>602,53=>602,54=>602,55=>602,56=>602,57=>602,58=>602,59=>602,60=>602, +61=>602,62=>602,63=>602,64=>602,65=>602,66=>602,67=>602,68=>602,69=>602,70=>602, +71=>602,72=>602,73=>602,74=>602,75=>602,76=>602,77=>602,78=>602,79=>602,80=>602, +81=>602,82=>602,83=>602,84=>602,85=>602,86=>602,87=>602,88=>602,89=>602,90=>602, +91=>602,92=>602,93=>602,94=>602,95=>602,96=>602,97=>602,98=>602,99=>602,100=>602, +101=>602,102=>602,103=>602,104=>602,105=>602,106=>602,107=>602,108=>602,109=>602,110=>602, +111=>602,112=>602,113=>602,114=>602,115=>602,116=>602,117=>602,118=>602,119=>602,120=>602, +121=>602,122=>602,123=>602,124=>602,125=>602,126=>602,8364=>602,8218=>602,402=>602,8222=>602, +8230=>602,8224=>602,8225=>602,710=>602,8240=>602,352=>602,8249=>602,338=>602,381=>602,8216=>602, +8217=>602,8220=>602,8221=>602,8226=>602,8211=>602,8212=>602,732=>602,8482=>602,353=>602,8250=>602, +339=>602,382=>602,376=>602,160=>602,161=>602,162=>602,163=>602,164=>602,165=>602,166=>602, +167=>602,168=>602,169=>602,170=>602,171=>602,172=>602,173=>602,174=>602,175=>602,176=>602, +177=>602,178=>602,179=>602,180=>602,181=>602,182=>602,183=>602,184=>602,185=>602,186=>602, +187=>602,188=>602,189=>602,190=>602,191=>602,192=>602,193=>602,194=>602,195=>602,196=>602, +197=>602,198=>602,199=>602,200=>602,201=>602,202=>602,203=>602,204=>602,205=>602,206=>602, +207=>602,208=>602,209=>602,210=>602,211=>602,212=>602,213=>602,214=>602,215=>602,216=>602, +217=>602,218=>602,219=>602,220=>602,221=>602,222=>602,223=>602,224=>602,225=>602,226=>602, +227=>602,228=>602,229=>602,230=>602,231=>602,232=>602,233=>602,234=>602,235=>602,236=>602, +237=>602,238=>602,239=>602,240=>602,241=>602,242=>602,243=>602,244=>602,245=>602,246=>602, +247=>602,248=>602,249=>602,250=>602,251=>602,252=>602,253=>602,254=>602,255=>602,256=>602, +257=>602,258=>602,259=>602,260=>602,261=>602,262=>602,263=>602,264=>602,265=>602,266=>602, +267=>602,268=>602,269=>602,270=>602,271=>602,272=>602,273=>602,274=>602,275=>602,276=>602, +277=>602,278=>602,279=>602,280=>602,281=>602,282=>602,283=>602,284=>602,285=>602,286=>602, +287=>602,288=>602,289=>602,290=>602,291=>602,292=>602,293=>602,294=>602,295=>602,296=>602, +297=>602,298=>602,299=>602,300=>602,301=>602,302=>602,303=>602,304=>602,305=>602,306=>602, +307=>602,308=>602,309=>602,310=>602,311=>602,312=>602,313=>602,314=>602,315=>602,316=>602, +317=>602,318=>602,319=>602,320=>602,321=>602,322=>602,323=>602,324=>602,325=>602,326=>602, +327=>602,328=>602,329=>602,330=>602,331=>602,332=>602,333=>602,334=>602,335=>602,336=>602, +337=>602,340=>602,341=>602,342=>602,343=>602,344=>602,345=>602,346=>602,347=>602,348=>602, +349=>602,350=>602,351=>602,354=>602,355=>602,356=>602,357=>602,358=>602,359=>602,360=>602, +361=>602,362=>602,363=>602,364=>602,365=>602,366=>602,367=>602,368=>602,369=>602,370=>602, +371=>602,372=>602,373=>602,374=>602,375=>602,377=>602,378=>602,379=>602,380=>602,383=>602, +384=>602,385=>602,386=>602,387=>602,388=>602,389=>602,390=>602,391=>602,392=>602,393=>602, +394=>602,395=>602,396=>602,397=>602,398=>602,399=>602,400=>602,401=>602,403=>602,404=>602, +405=>602,406=>602,407=>602,408=>602,409=>602,410=>602,411=>602,412=>602,413=>602,414=>602, +415=>602,416=>602,417=>602,418=>602,419=>602,420=>602,421=>602,422=>602,423=>602,424=>602, +425=>602,426=>602,427=>602,428=>602,429=>602,430=>602,431=>602,432=>602,433=>602,434=>602, +435=>602,436=>602,437=>602,438=>602,439=>602,440=>602,441=>602,442=>602,443=>602,444=>602, +445=>602,446=>602,447=>602,448=>602,449=>602,450=>602,451=>602,461=>602,462=>602,463=>602, +464=>602,465=>602,466=>602,467=>602,468=>602,469=>602,470=>602,471=>602,472=>602,473=>602, +474=>602,475=>602,476=>602,477=>602,478=>602,479=>602,480=>602,481=>602,482=>602,483=>602, +486=>602,487=>602,488=>602,489=>602,490=>602,491=>602,492=>602,493=>602,494=>602,495=>602, +496=>602,500=>602,501=>602,502=>602,504=>602,505=>602,508=>602,509=>602,510=>602,511=>602, +512=>602,513=>602,514=>602,515=>602,516=>602,517=>602,518=>602,519=>602,520=>602,521=>602, +522=>602,523=>602,524=>602,525=>602,526=>602,527=>602,528=>602,529=>602,530=>602,531=>602, +532=>602,533=>602,534=>602,535=>602,536=>602,537=>602,538=>602,539=>602,540=>602,541=>602, +542=>602,543=>602,544=>602,545=>602,548=>602,549=>602,550=>602,551=>602,552=>602,553=>602, +554=>602,555=>602,556=>602,557=>602,558=>602,559=>602,560=>602,561=>602,562=>602,563=>602, +564=>602,565=>602,566=>602,567=>602,568=>602,569=>602,570=>602,571=>602,572=>602,573=>602, +574=>602,575=>602,576=>602,577=>602,580=>602,581=>602,588=>602,589=>602,592=>602,593=>602, +594=>602,595=>602,596=>602,597=>602,598=>602,599=>602,600=>602,601=>602,602=>602,603=>602, +604=>602,605=>602,606=>602,607=>602,608=>602,609=>602,610=>602,611=>602,612=>602,613=>602, +614=>602,615=>602,616=>602,617=>602,618=>602,619=>602,620=>602,621=>602,622=>602,623=>602, +624=>602,625=>602,626=>602,627=>602,628=>602,629=>602,630=>602,631=>602,632=>602,633=>602, +634=>602,635=>602,636=>602,637=>602,638=>602,639=>602,640=>602,641=>602,642=>602,643=>602, +644=>602,645=>602,646=>602,647=>602,648=>602,649=>602,650=>602,651=>602,652=>602,653=>602, +654=>602,655=>602,656=>602,657=>602,658=>602,659=>602,660=>602,661=>602,662=>602,663=>602, +664=>602,665=>602,666=>602,667=>602,668=>602,669=>602,670=>602,671=>602,672=>602,673=>602, +674=>602,675=>602,676=>602,677=>602,678=>602,679=>602,680=>602,681=>602,682=>602,683=>602, +684=>602,685=>602,686=>602,687=>602,688=>602,689=>602,690=>602,691=>602,692=>602,693=>602, +694=>602,695=>602,696=>602,697=>602,699=>602,700=>602,701=>602,702=>602,703=>602,704=>602, +705=>602,711=>602,712=>602,713=>602,716=>602,717=>602,720=>602,721=>602,722=>602,723=>602, +726=>602,727=>602,728=>602,729=>602,730=>602,731=>602,733=>602,734=>602,736=>602,737=>602, +738=>602,739=>602,740=>602,741=>602,742=>602,743=>602,744=>602,745=>602,750=>602,755=>602, +768=>602,769=>602,770=>602,771=>602,772=>602,773=>602,774=>602,775=>602,776=>602,777=>602, +778=>602,779=>602,780=>602,781=>602,782=>602,783=>602,784=>602,785=>602,786=>602,787=>602, +788=>602,789=>602,790=>602,791=>602,792=>602,793=>602,794=>602,795=>602,796=>602,797=>602, +798=>602,799=>602,800=>602,801=>602,802=>602,803=>602,804=>602,805=>602,806=>602,807=>602, +808=>602,809=>602,810=>602,811=>602,812=>602,813=>602,814=>602,815=>602,816=>602,817=>602, +818=>602,819=>602,820=>602,821=>602,822=>602,823=>602,824=>602,825=>602,826=>602,827=>602, +828=>602,829=>602,830=>602,831=>602,835=>602,856=>602,865=>602,884=>602,885=>602,890=>602, +894=>602,900=>602,901=>602,902=>602,903=>602,904=>602,905=>602,906=>602,908=>602,910=>602, +911=>602,912=>602,913=>602,914=>602,915=>602,916=>602,917=>602,918=>602,919=>602,920=>602, +921=>602,922=>602,923=>602,924=>602,925=>602,926=>602,927=>602,928=>602,929=>602,931=>602, +932=>602,933=>602,934=>602,935=>602,936=>602,937=>602,938=>602,939=>602,940=>602,941=>602, +942=>602,943=>602,944=>602,945=>602,946=>602,947=>602,948=>602,949=>602,950=>602,951=>602, +952=>602,953=>602,954=>602,955=>602,956=>602,957=>602,958=>602,959=>602,960=>602,961=>602, +962=>602,963=>602,964=>602,965=>602,966=>602,967=>602,968=>602,969=>602,970=>602,971=>602, +972=>602,973=>602,974=>602,976=>602,977=>602,978=>602,979=>602,980=>602,981=>602,982=>602, +983=>602,984=>602,985=>602,986=>602,987=>602,988=>602,989=>602,990=>602,991=>602,992=>602, +993=>602,1008=>602,1009=>602,1010=>602,1011=>602,1012=>602,1013=>602,1014=>602,1015=>602,1016=>602, +1017=>602,1018=>602,1019=>602,1020=>602,1021=>602,1022=>602,1023=>602,1024=>602,1025=>602,1026=>602, +1027=>602,1028=>602,1029=>602,1030=>602,1031=>602,1032=>602,1033=>602,1034=>602,1035=>602,1036=>602, +1037=>602,1038=>602,1039=>602,1040=>602,1041=>602,1042=>602,1043=>602,1044=>602,1045=>602,1046=>602, +1047=>602,1048=>602,1049=>602,1050=>602,1051=>602,1052=>602,1053=>602,1054=>602,1055=>602,1056=>602, +1057=>602,1058=>602,1059=>602,1060=>602,1061=>602,1062=>602,1063=>602,1064=>602,1065=>602,1066=>602, +1067=>602,1068=>602,1069=>602,1070=>602,1071=>602,1072=>602,1073=>602,1074=>602,1075=>602,1076=>602, +1077=>602,1078=>602,1079=>602,1080=>602,1081=>602,1082=>602,1083=>602,1084=>602,1085=>602,1086=>602, +1087=>602,1088=>602,1089=>602,1090=>602,1091=>602,1092=>602,1093=>602,1094=>602,1095=>602,1096=>602, +1097=>602,1098=>602,1099=>602,1100=>602,1101=>602,1102=>602,1103=>602,1104=>602,1105=>602,1106=>602, +1107=>602,1108=>602,1109=>602,1110=>602,1111=>602,1112=>602,1113=>602,1114=>602,1115=>602,1116=>602, +1117=>602,1118=>602,1119=>602,1122=>602,1123=>602,1138=>602,1139=>602,1168=>602,1169=>602,1170=>602, +1171=>602,1172=>602,1173=>602,1174=>602,1175=>602,1176=>602,1177=>602,1178=>602,1179=>602,1186=>602, +1187=>602,1194=>602,1195=>602,1196=>602,1197=>602,1198=>602,1199=>602,1200=>602,1201=>602,1202=>602, +1203=>602,1210=>602,1211=>602,1216=>602,1217=>602,1218=>602,1219=>602,1220=>602,1223=>602,1224=>602, +1227=>602,1228=>602,1231=>602,1232=>602,1233=>602,1234=>602,1235=>602,1236=>602,1237=>602,1238=>602, +1239=>602,1240=>602,1241=>602,1242=>602,1243=>602,1244=>602,1245=>602,1246=>602,1247=>602,1248=>602, +1249=>602,1250=>602,1251=>602,1252=>602,1253=>602,1254=>602,1255=>602,1256=>602,1257=>602,1258=>602, +1259=>602,1260=>602,1261=>602,1262=>602,1263=>602,1264=>602,1265=>602,1266=>602,1267=>602,1268=>602, +1269=>602,1270=>602,1271=>602,1272=>602,1273=>602,1296=>602,1297=>602,1306=>602,1307=>602,1308=>602, +1309=>602,1542=>602,1543=>602,1545=>602,1546=>602,1548=>602,1557=>602,1563=>602,1567=>602,1569=>602, +1570=>602,1571=>602,1572=>602,1573=>602,1574=>602,1575=>602,1576=>602,1577=>602,1578=>602,1579=>602, +1580=>602,1581=>602,1582=>602,1583=>602,1584=>602,1585=>602,1586=>602,1587=>602,1588=>602,1589=>602, +1590=>602,1591=>602,1592=>602,1593=>602,1594=>602,1600=>602,1601=>602,1602=>602,1603=>602,1604=>602, +1605=>602,1606=>602,1607=>602,1608=>602,1609=>602,1610=>602,1611=>602,1612=>602,1613=>602,1614=>602, +1615=>602,1616=>602,1617=>602,1618=>602,1619=>602,1620=>602,1621=>602,1626=>602,1632=>602,1633=>602, +1634=>602,1635=>602,1636=>602,1637=>602,1638=>602,1639=>602,1640=>602,1641=>602,1642=>602,1643=>602, +1644=>602,1645=>602,1652=>602,1657=>602,1658=>602,1659=>602,1662=>602,1663=>602,1664=>602,1667=>602, +1668=>602,1670=>602,1671=>602,1681=>602,1688=>602,1700=>602,1705=>602,1711=>602,1726=>602,1740=>602, +1776=>602,1777=>602,1778=>602,1779=>602,1780=>602,1781=>602,1782=>602,1783=>602,1784=>602,1785=>602, +3713=>602,3714=>602,3716=>602,3719=>602,3720=>602,3722=>602,3725=>602,3732=>602,3733=>602,3734=>602, +3735=>602,3737=>602,3738=>602,3739=>602,3740=>602,3741=>602,3742=>602,3743=>602,3745=>602,3746=>602, +3747=>602,3749=>602,3751=>602,3754=>602,3755=>602,3757=>602,3758=>602,3759=>602,3760=>602,3761=>602, +3762=>602,3763=>602,3764=>602,3765=>602,3766=>602,3767=>602,3768=>602,3769=>602,3771=>602,3772=>602, +3784=>602,3785=>602,3786=>602,3787=>602,3788=>602,3789=>602,4304=>602,4305=>602,4306=>602,4307=>602, +4308=>602,4309=>602,4310=>602,4311=>602,4312=>602,4313=>602,4314=>602,4315=>602,4316=>602,4317=>602, +4318=>602,4319=>602,4320=>602,4321=>602,4322=>602,4323=>602,4324=>602,4325=>602,4326=>602,4327=>602, +4328=>602,4329=>602,4330=>602,4331=>602,4332=>602,4333=>602,4334=>602,4335=>602,4336=>602,4337=>602, +4338=>602,4339=>602,4340=>602,4341=>602,4342=>602,4343=>602,4344=>602,4345=>602,4346=>602,4347=>602, +4348=>602,7426=>602,7432=>602,7433=>602,7444=>602,7446=>602,7447=>602,7453=>602,7454=>602,7455=>602, +7468=>602,7469=>602,7470=>602,7472=>602,7473=>602,7474=>602,7475=>602,7476=>602,7477=>602,7478=>602, +7479=>602,7480=>602,7481=>602,7482=>602,7483=>602,7484=>602,7486=>602,7487=>602,7488=>602,7489=>602, +7490=>602,7491=>602,7492=>602,7493=>602,7494=>602,7495=>602,7496=>602,7497=>602,7498=>602,7499=>602, +7500=>602,7501=>602,7502=>602,7503=>602,7504=>602,7505=>602,7506=>602,7507=>602,7508=>602,7509=>602, +7510=>602,7511=>602,7512=>602,7513=>602,7514=>602,7515=>602,7522=>602,7523=>602,7524=>602,7525=>602, +7543=>602,7544=>602,7547=>602,7557=>602,7579=>602,7580=>602,7581=>602,7582=>602,7583=>602,7584=>602, +7585=>602,7586=>602,7587=>602,7588=>602,7589=>602,7590=>602,7591=>602,7592=>602,7593=>602,7594=>602, +7595=>602,7596=>602,7597=>602,7598=>602,7599=>602,7600=>602,7601=>602,7602=>602,7603=>602,7604=>602, +7605=>602,7606=>602,7607=>602,7609=>602,7610=>602,7611=>602,7612=>602,7613=>602,7614=>602,7615=>602, +7680=>602,7681=>602,7682=>602,7683=>602,7684=>602,7685=>602,7686=>602,7687=>602,7688=>602,7689=>602, +7690=>602,7691=>602,7692=>602,7693=>602,7694=>602,7695=>602,7696=>602,7697=>602,7698=>602,7699=>602, +7704=>602,7705=>602,7706=>602,7707=>602,7708=>602,7709=>602,7710=>602,7711=>602,7712=>602,7713=>602, +7714=>602,7715=>602,7716=>602,7717=>602,7718=>602,7719=>602,7720=>602,7721=>602,7722=>602,7723=>602, +7724=>602,7725=>602,7728=>602,7729=>602,7730=>602,7731=>602,7732=>602,7733=>602,7734=>602,7735=>602, +7736=>602,7737=>602,7738=>602,7739=>602,7740=>602,7741=>602,7742=>602,7743=>602,7744=>602,7745=>602, +7746=>602,7747=>602,7748=>602,7749=>602,7750=>602,7751=>602,7752=>602,7753=>602,7754=>602,7755=>602, +7756=>602,7757=>602,7764=>602,7765=>602,7766=>602,7767=>602,7768=>602,7769=>602,7770=>602,7771=>602, +7772=>602,7773=>602,7774=>602,7775=>602,7776=>602,7777=>602,7778=>602,7779=>602,7784=>602,7785=>602, +7786=>602,7787=>602,7788=>602,7789=>602,7790=>602,7791=>602,7792=>602,7793=>602,7794=>602,7795=>602, +7796=>602,7797=>602,7798=>602,7799=>602,7800=>602,7801=>602,7804=>602,7805=>602,7806=>602,7807=>602, +7808=>602,7809=>602,7810=>602,7811=>602,7812=>602,7813=>602,7814=>602,7815=>602,7816=>602,7817=>602, +7818=>602,7819=>602,7820=>602,7821=>602,7822=>602,7823=>602,7824=>602,7825=>602,7826=>602,7827=>602, +7828=>602,7829=>602,7830=>602,7831=>602,7832=>602,7833=>602,7835=>602,7839=>602,7840=>602,7841=>602, +7852=>602,7853=>602,7856=>602,7857=>602,7862=>602,7863=>602,7864=>602,7865=>602,7868=>602,7869=>602, +7878=>602,7879=>602,7882=>602,7883=>602,7884=>602,7885=>602,7896=>602,7897=>602,7898=>602,7899=>602, +7900=>602,7901=>602,7904=>602,7905=>602,7906=>602,7907=>602,7908=>602,7909=>602,7912=>602,7913=>602, +7914=>602,7915=>602,7918=>602,7919=>602,7920=>602,7921=>602,7922=>602,7923=>602,7924=>602,7925=>602, +7928=>602,7929=>602,7936=>602,7937=>602,7938=>602,7939=>602,7940=>602,7941=>602,7942=>602,7943=>602, +7944=>602,7945=>602,7946=>602,7947=>602,7948=>602,7949=>602,7950=>602,7951=>602,7952=>602,7953=>602, +7954=>602,7955=>602,7956=>602,7957=>602,7960=>602,7961=>602,7962=>602,7963=>602,7964=>602,7965=>602, +7968=>602,7969=>602,7970=>602,7971=>602,7972=>602,7973=>602,7974=>602,7975=>602,7976=>602,7977=>602, +7978=>602,7979=>602,7980=>602,7981=>602,7982=>602,7983=>602,7984=>602,7985=>602,7986=>602,7987=>602, +7988=>602,7989=>602,7990=>602,7991=>602,7992=>602,7993=>602,7994=>602,7995=>602,7996=>602,7997=>602, +7998=>602,7999=>602,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602,8008=>602,8009=>602, +8010=>602,8011=>602,8012=>602,8013=>602,8016=>602,8017=>602,8018=>602,8019=>602,8020=>602,8021=>602, +8022=>602,8023=>602,8025=>602,8027=>602,8029=>602,8031=>602,8032=>602,8033=>602,8034=>602,8035=>602, +8036=>602,8037=>602,8038=>602,8039=>602,8040=>602,8041=>602,8042=>602,8043=>602,8044=>602,8045=>602, +8046=>602,8047=>602,8048=>602,8049=>602,8050=>602,8051=>602,8052=>602,8053=>602,8054=>602,8055=>602, +8056=>602,8057=>602,8058=>602,8059=>602,8060=>602,8061=>602,8064=>602,8065=>602,8066=>602,8067=>602, +8068=>602,8069=>602,8070=>602,8071=>602,8072=>602,8073=>602,8074=>602,8075=>602,8076=>602,8077=>602, +8078=>602,8079=>602,8080=>602,8081=>602,8082=>602,8083=>602,8084=>602,8085=>602,8086=>602,8087=>602, +8088=>602,8089=>602,8090=>602,8091=>602,8092=>602,8093=>602,8094=>602,8095=>602,8096=>602,8097=>602, +8098=>602,8099=>602,8100=>602,8101=>602,8102=>602,8103=>602,8104=>602,8105=>602,8106=>602,8107=>602, +8108=>602,8109=>602,8110=>602,8111=>602,8112=>602,8113=>602,8114=>602,8115=>602,8116=>602,8118=>602, +8119=>602,8120=>602,8121=>602,8122=>602,8123=>602,8124=>602,8125=>602,8126=>602,8127=>602,8128=>602, +8129=>602,8130=>602,8131=>602,8132=>602,8134=>602,8135=>602,8136=>602,8137=>602,8138=>602,8139=>602, +8140=>602,8141=>602,8142=>602,8143=>602,8144=>602,8145=>602,8146=>602,8147=>602,8150=>602,8151=>602, +8152=>602,8153=>602,8154=>602,8155=>602,8157=>602,8158=>602,8159=>602,8160=>602,8161=>602,8162=>602, +8163=>602,8164=>602,8165=>602,8166=>602,8167=>602,8168=>602,8169=>602,8170=>602,8171=>602,8172=>602, +8173=>602,8174=>602,8175=>602,8178=>602,8179=>602,8180=>602,8182=>602,8183=>602,8184=>602,8185=>602, +8186=>602,8187=>602,8188=>602,8189=>602,8190=>602,8192=>602,8193=>602,8194=>602,8195=>602,8196=>602, +8197=>602,8198=>602,8199=>602,8200=>602,8201=>602,8202=>602,8208=>602,8209=>602,8210=>602,8213=>602, +8215=>602,8219=>602,8223=>602,8227=>602,8239=>602,8241=>602,8242=>602,8243=>602,8244=>602,8245=>602, +8246=>602,8247=>602,8252=>602,8253=>602,8254=>602,8261=>602,8262=>602,8263=>602,8264=>602,8265=>602, +8287=>602,8304=>602,8305=>602,8308=>602,8309=>602,8310=>602,8311=>602,8312=>602,8313=>602,8314=>602, +8315=>602,8316=>602,8317=>602,8318=>602,8319=>602,8320=>602,8321=>602,8322=>602,8323=>602,8324=>602, +8325=>602,8326=>602,8327=>602,8328=>602,8329=>602,8330=>602,8331=>602,8332=>602,8333=>602,8334=>602, +8336=>602,8337=>602,8338=>602,8339=>602,8340=>602,8352=>602,8353=>602,8354=>602,8355=>602,8356=>602, +8357=>602,8358=>602,8359=>602,8360=>602,8361=>602,8362=>602,8363=>602,8365=>602,8366=>602,8367=>602, +8368=>602,8369=>602,8370=>602,8371=>602,8372=>602,8373=>602,8450=>602,8453=>602,8461=>602,8462=>602, +8463=>602,8469=>602,8470=>602,8471=>602,8473=>602,8474=>602,8477=>602,8484=>602,8486=>602,8490=>602, +8491=>602,8494=>602,8531=>602,8532=>602,8533=>602,8534=>602,8535=>602,8536=>602,8537=>602,8538=>602, +8539=>602,8540=>602,8541=>602,8542=>602,8543=>602,8592=>602,8593=>602,8594=>602,8595=>602,8596=>602, +8597=>602,8598=>602,8599=>602,8600=>602,8601=>602,8602=>602,8603=>602,8604=>602,8605=>602,8606=>602, +8607=>602,8608=>602,8609=>602,8610=>602,8611=>602,8612=>602,8613=>602,8614=>602,8615=>602,8616=>602, +8617=>602,8618=>602,8619=>602,8620=>602,8621=>602,8622=>602,8623=>602,8624=>602,8625=>602,8626=>602, +8627=>602,8628=>602,8629=>602,8630=>602,8631=>602,8632=>602,8633=>602,8634=>602,8635=>602,8636=>602, +8637=>602,8638=>602,8639=>602,8640=>602,8641=>602,8642=>602,8643=>602,8644=>602,8645=>602,8646=>602, +8647=>602,8648=>602,8649=>602,8650=>602,8651=>602,8652=>602,8653=>602,8654=>602,8655=>602,8656=>602, +8657=>602,8658=>602,8659=>602,8660=>602,8661=>602,8662=>602,8663=>602,8664=>602,8665=>602,8666=>602, +8667=>602,8668=>602,8669=>602,8670=>602,8671=>602,8672=>602,8673=>602,8674=>602,8675=>602,8676=>602, +8677=>602,8678=>602,8679=>602,8680=>602,8681=>602,8682=>602,8683=>602,8684=>602,8685=>602,8686=>602, +8687=>602,8688=>602,8689=>602,8690=>602,8691=>602,8692=>602,8693=>602,8694=>602,8695=>602,8696=>602, +8697=>602,8698=>602,8699=>602,8700=>602,8701=>602,8702=>602,8703=>602,8704=>602,8705=>602,8706=>602, +8707=>602,8708=>602,8709=>602,8710=>602,8711=>602,8712=>602,8713=>602,8714=>602,8715=>602,8716=>602, +8717=>602,8719=>602,8721=>602,8722=>602,8723=>602,8725=>602,8727=>602,8728=>602,8729=>602,8730=>602, +8731=>602,8732=>602,8733=>602,8734=>602,8735=>602,8736=>602,8743=>602,8744=>602,8745=>602,8746=>602, +8747=>602,8748=>602,8749=>602,8760=>602,8761=>602,8762=>602,8763=>602,8764=>602,8765=>602,8769=>602, +8770=>602,8771=>602,8772=>602,8773=>602,8774=>602,8775=>602,8776=>602,8777=>602,8778=>602,8779=>602, +8780=>602,8781=>602,8782=>602,8783=>602,8784=>602,8785=>602,8786=>602,8787=>602,8788=>602,8789=>602, +8790=>602,8791=>602,8792=>602,8793=>602,8794=>602,8795=>602,8796=>602,8797=>602,8798=>602,8799=>602, +8800=>602,8801=>602,8802=>602,8803=>602,8804=>602,8805=>602,8806=>602,8807=>602,8808=>602,8809=>602, +8813=>602,8814=>602,8815=>602,8816=>602,8817=>602,8818=>602,8819=>602,8820=>602,8821=>602,8822=>602, +8823=>602,8824=>602,8825=>602,8826=>602,8827=>602,8828=>602,8829=>602,8830=>602,8831=>602,8832=>602, +8833=>602,8834=>602,8835=>602,8836=>602,8837=>602,8838=>602,8839=>602,8840=>602,8841=>602,8842=>602, +8843=>602,8847=>602,8848=>602,8849=>602,8850=>602,8853=>602,8854=>602,8855=>602,8856=>602,8857=>602, +8858=>602,8859=>602,8860=>602,8861=>602,8862=>602,8863=>602,8864=>602,8865=>602,8901=>602,8902=>602, +8909=>602,8922=>602,8923=>602,8924=>602,8925=>602,8926=>602,8927=>602,8928=>602,8929=>602,8930=>602, +8931=>602,8932=>602,8933=>602,8934=>602,8935=>602,8936=>602,8937=>602,8943=>602,8960=>602,8961=>602, +8962=>602,8963=>602,8964=>602,8965=>602,8966=>602,8968=>602,8969=>602,8970=>602,8971=>602,8972=>602, +8973=>602,8974=>602,8975=>602,8976=>602,8977=>602,8978=>602,8979=>602,8980=>602,8981=>602,8984=>602, +8985=>602,8988=>602,8989=>602,8990=>602,8991=>602,8992=>602,8993=>602,8997=>602,8998=>602,8999=>602, +9000=>602,9003=>602,9013=>602,9015=>602,9016=>602,9017=>602,9018=>602,9019=>602,9020=>602,9021=>602, +9022=>602,9025=>602,9026=>602,9027=>602,9028=>602,9031=>602,9032=>602,9033=>602,9035=>602,9036=>602, +9037=>602,9040=>602,9042=>602,9043=>602,9044=>602,9047=>602,9048=>602,9049=>602,9050=>602,9051=>602, +9052=>602,9054=>602,9055=>602,9056=>602,9059=>602,9060=>602,9061=>602,9064=>602,9065=>602,9067=>602, +9068=>602,9069=>602,9070=>602,9071=>602,9072=>602,9075=>602,9076=>602,9077=>602,9078=>602,9079=>602, +9080=>602,9081=>602,9082=>602,9085=>602,9088=>602,9089=>602,9090=>602,9091=>602,9096=>602,9097=>602, +9098=>602,9099=>602,9109=>602,9115=>602,9116=>602,9117=>602,9118=>602,9119=>602,9120=>602,9121=>602, +9122=>602,9123=>602,9124=>602,9125=>602,9126=>602,9127=>602,9128=>602,9129=>602,9130=>602,9131=>602, +9132=>602,9133=>602,9134=>602,9166=>602,9167=>602,9251=>602,9472=>602,9473=>602,9474=>602,9475=>602, +9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602, +9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602, +9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602, +9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602, +9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602, +9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602, +9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602, +9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602, +9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602, +9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602, +9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602, +9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602, +9596=>602,9597=>602,9598=>602,9599=>602,9600=>602,9601=>602,9602=>602,9603=>602,9604=>602,9605=>602, +9606=>602,9607=>602,9608=>602,9609=>602,9610=>602,9611=>602,9612=>602,9613=>602,9614=>602,9615=>602, +9616=>602,9617=>602,9618=>602,9619=>602,9620=>602,9621=>602,9622=>602,9623=>602,9624=>602,9625=>602, +9626=>602,9627=>602,9628=>602,9629=>602,9630=>602,9631=>602,9632=>602,9633=>602,9634=>602,9635=>602, +9636=>602,9637=>602,9638=>602,9639=>602,9640=>602,9641=>602,9642=>602,9643=>602,9644=>602,9645=>602, +9646=>602,9647=>602,9648=>602,9649=>602,9650=>602,9651=>602,9652=>602,9653=>602,9654=>602,9655=>602, +9656=>602,9657=>602,9658=>602,9659=>602,9660=>602,9661=>602,9662=>602,9663=>602,9664=>602,9665=>602, +9666=>602,9667=>602,9668=>602,9669=>602,9670=>602,9671=>602,9672=>602,9673=>602,9674=>602,9675=>602, +9676=>602,9677=>602,9678=>602,9679=>602,9680=>602,9681=>602,9682=>602,9683=>602,9684=>602,9685=>602, +9686=>602,9687=>602,9688=>602,9689=>602,9690=>602,9691=>602,9692=>602,9693=>602,9694=>602,9695=>602, +9696=>602,9697=>602,9698=>602,9699=>602,9700=>602,9701=>602,9702=>602,9703=>602,9704=>602,9705=>602, +9706=>602,9707=>602,9708=>602,9709=>602,9710=>602,9711=>602,9712=>602,9713=>602,9714=>602,9715=>602, +9716=>602,9717=>602,9718=>602,9719=>602,9720=>602,9721=>602,9722=>602,9723=>602,9724=>602,9725=>602, +9726=>602,9727=>602,9728=>602,9729=>602,9730=>602,9731=>602,9732=>602,9733=>602,9734=>602,9735=>602, +9736=>602,9737=>602,9738=>602,9739=>602,9740=>602,9741=>602,9742=>602,9743=>602,9744=>602,9745=>602, +9746=>602,9747=>602,9748=>602,9749=>602,9750=>602,9751=>602,9752=>602,9753=>602,9754=>602,9755=>602, +9756=>602,9757=>602,9758=>602,9759=>602,9760=>602,9761=>602,9762=>602,9763=>602,9764=>602,9765=>602, +9766=>602,9767=>602,9768=>602,9769=>602,9770=>602,9771=>602,9772=>602,9773=>602,9774=>602,9775=>602, +9784=>602,9785=>602,9786=>602,9787=>602,9788=>602,9789=>602,9790=>602,9791=>602,9792=>602,9793=>602, +9794=>602,9795=>602,9796=>602,9797=>602,9798=>602,9799=>602,9800=>602,9801=>602,9802=>602,9803=>602, +9804=>602,9805=>602,9806=>602,9807=>602,9808=>602,9809=>602,9810=>602,9811=>602,9812=>602,9813=>602, +9814=>602,9815=>602,9816=>602,9817=>602,9818=>602,9819=>602,9820=>602,9821=>602,9822=>602,9823=>602, +9824=>602,9825=>602,9826=>602,9827=>602,9828=>602,9829=>602,9830=>602,9831=>602,9832=>602,9833=>602, +9834=>602,9835=>602,9836=>602,9837=>602,9838=>602,9839=>602,9840=>602,9841=>602,9842=>602,9843=>602, +9844=>602,9845=>602,9846=>602,9847=>602,9848=>602,9849=>602,9850=>602,9851=>602,9852=>602,9853=>602, +9854=>602,9855=>602,9856=>602,9857=>602,9858=>602,9859=>602,9860=>602,9861=>602,9862=>602,9863=>602, +9864=>602,9865=>602,9866=>602,9867=>602,9872=>602,9873=>602,9874=>602,9875=>602,9876=>602,9877=>602, +9878=>602,9879=>602,9880=>602,9881=>602,9882=>602,9883=>602,9884=>602,9888=>602,9889=>602,9904=>602, +9905=>602,9985=>602,9986=>602,9987=>602,9988=>602,9990=>602,9991=>602,9992=>602,9993=>602,9996=>602, +9997=>602,9998=>602,9999=>602,10000=>602,10001=>602,10002=>602,10003=>602,10004=>602,10005=>602,10006=>602, +10007=>602,10008=>602,10009=>602,10010=>602,10011=>602,10012=>602,10013=>602,10014=>602,10015=>602,10016=>602, +10017=>602,10018=>602,10019=>602,10020=>602,10021=>602,10022=>602,10023=>602,10025=>602,10026=>602,10027=>602, +10028=>602,10029=>602,10030=>602,10031=>602,10032=>602,10033=>602,10034=>602,10035=>602,10036=>602,10037=>602, +10038=>602,10039=>602,10040=>602,10041=>602,10042=>602,10043=>602,10044=>602,10045=>602,10046=>602,10047=>602, +10048=>602,10049=>602,10050=>602,10051=>602,10052=>602,10053=>602,10054=>602,10055=>602,10056=>602,10057=>602, +10058=>602,10059=>602,10061=>602,10063=>602,10064=>602,10065=>602,10066=>602,10070=>602,10072=>602,10073=>602, +10074=>602,10075=>602,10076=>602,10077=>602,10078=>602,10081=>602,10082=>602,10083=>602,10084=>602,10085=>602, +10086=>602,10087=>602,10088=>602,10089=>602,10090=>602,10091=>602,10092=>602,10093=>602,10094=>602,10095=>602, +10096=>602,10097=>602,10098=>602,10099=>602,10100=>602,10101=>602,10132=>602,10136=>602,10137=>602,10138=>602, +10139=>602,10140=>602,10141=>602,10142=>602,10143=>602,10144=>602,10145=>602,10146=>602,10147=>602,10148=>602, +10149=>602,10150=>602,10151=>602,10152=>602,10153=>602,10154=>602,10155=>602,10156=>602,10157=>602,10158=>602, +10159=>602,10161=>602,10162=>602,10163=>602,10164=>602,10165=>602,10166=>602,10167=>602,10168=>602,10169=>602, +10170=>602,10171=>602,10172=>602,10173=>602,10174=>602,10181=>602,10182=>602,10208=>602,10216=>602,10217=>602, +10731=>602,10746=>602,10747=>602,10799=>602,11026=>602,11027=>602,11028=>602,11029=>602,11030=>602,11031=>602, +11032=>602,11033=>602,11034=>602,11364=>602,11374=>602,11375=>602,11381=>602,11382=>602,11383=>602,11385=>602, +11386=>602,11388=>602,11389=>602,11800=>602,11810=>602,11811=>602,11812=>602,11813=>602,11822=>602,42760=>602, +42761=>602,42762=>602,42763=>602,42764=>602,42765=>602,42766=>602,42767=>602,42768=>602,42769=>602,42770=>602, +42771=>602,42772=>602,42773=>602,42774=>602,42779=>602,42780=>602,42781=>602,42782=>602,42783=>602,42790=>602, +42791=>602,42889=>602,42890=>602,42891=>602,42892=>602,63173=>602,64257=>602,64258=>602,64338=>602,64339=>602, +64340=>602,64341=>602,64342=>602,64343=>602,64344=>602,64345=>602,64346=>602,64347=>602,64348=>602,64349=>602, +64350=>602,64351=>602,64352=>602,64353=>602,64354=>602,64355=>602,64356=>602,64357=>602,64358=>602,64359=>602, +64360=>602,64361=>602,64362=>602,64363=>602,64364=>602,64365=>602,64366=>602,64367=>602,64368=>602,64369=>602, +64370=>602,64371=>602,64372=>602,64373=>602,64374=>602,64375=>602,64376=>602,64377=>602,64378=>602,64379=>602, +64380=>602,64381=>602,64382=>602,64383=>602,64384=>602,64385=>602,64394=>602,64395=>602,64396=>602,64397=>602, +64398=>602,64399=>602,64400=>602,64401=>602,64402=>602,64403=>602,64404=>602,64405=>602,64414=>602,64415=>602, +64426=>602,64427=>602,64428=>602,64429=>602,64488=>602,64489=>602,64508=>602,64509=>602,64510=>602,64511=>602, +65136=>602,65137=>602,65138=>602,65139=>602,65140=>602,65142=>602,65143=>602,65144=>602,65145=>602,65146=>602, +65147=>602,65148=>602,65149=>602,65150=>602,65151=>602,65152=>602,65153=>602,65154=>602,65155=>602,65156=>602, +65157=>602,65158=>602,65159=>602,65160=>602,65161=>602,65162=>602,65163=>602,65164=>602,65165=>602,65166=>602, +65167=>602,65168=>602,65169=>602,65170=>602,65171=>602,65172=>602,65173=>602,65174=>602,65175=>602,65176=>602, +65177=>602,65178=>602,65179=>602,65180=>602,65181=>602,65182=>602,65183=>602,65184=>602,65185=>602,65186=>602, +65187=>602,65188=>602,65189=>602,65190=>602,65191=>602,65192=>602,65193=>602,65194=>602,65195=>602,65196=>602, +65197=>602,65198=>602,65199=>602,65200=>602,65201=>602,65202=>602,65203=>602,65204=>602,65205=>602,65206=>602, +65207=>602,65208=>602,65209=>602,65210=>602,65211=>602,65212=>602,65213=>602,65214=>602,65215=>602,65216=>602, +65217=>602,65218=>602,65219=>602,65220=>602,65221=>602,65222=>602,65223=>602,65224=>602,65225=>602,65226=>602, +65227=>602,65228=>602,65229=>602,65230=>602,65231=>602,65232=>602,65233=>602,65234=>602,65235=>602,65236=>602, +65237=>602,65238=>602,65239=>602,65240=>602,65241=>602,65242=>602,65243=>602,65244=>602,65245=>602,65246=>602, +65247=>602,65248=>602,65249=>602,65250=>602,65251=>602,65252=>602,65253=>602,65254=>602,65255=>602,65256=>602, +65257=>602,65258=>602,65259=>602,65260=>602,65261=>602,65262=>602,65263=>602,65264=>602,65265=>602,65266=>602, +65267=>602,65268=>602,65269=>602,65270=>602,65271=>602,65272=>602,65273=>602,65274=>602,65275=>602,65276=>602, +65279=>602,65529=>602,65530=>602,65531=>602,65532=>602,65533=>602); +$enc=''; +$diff=''; +$file='dejavusansmono.z'; +$ctg='dejavusansmono.ctg.z'; +$originalsize=321524; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmono.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmono.z new file mode 100755 index 00000000..3b9ede1f Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmono.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonob.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonob.ctg.z new file mode 100755 index 00000000..0ce0dba4 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonob.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonob.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonob.php new file mode 100755 index 00000000..a31fc9a0 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonob.php @@ -0,0 +1,307 @@ +928,'Descent'=>-236,'CapHeight'=>13,'Flags'=>33,'FontBBox'=>'[-446 -394 731 1052]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>602); +$up=-63; +$ut=44; +$dw=602; +$cw=array( +0=>602,32=>602,33=>602,34=>602,35=>602,36=>602,37=>602,38=>602,39=>602,40=>602, +41=>602,42=>602,43=>602,44=>602,45=>602,46=>602,47=>602,48=>602,49=>602,50=>602, +51=>602,52=>602,53=>602,54=>602,55=>602,56=>602,57=>602,58=>602,59=>602,60=>602, +61=>602,62=>602,63=>602,64=>602,65=>602,66=>602,67=>602,68=>602,69=>602,70=>602, +71=>602,72=>602,73=>602,74=>602,75=>602,76=>602,77=>602,78=>602,79=>602,80=>602, +81=>602,82=>602,83=>602,84=>602,85=>602,86=>602,87=>602,88=>602,89=>602,90=>602, +91=>602,92=>602,93=>602,94=>602,95=>602,96=>602,97=>602,98=>602,99=>602,100=>602, +101=>602,102=>602,103=>602,104=>602,105=>602,106=>602,107=>602,108=>602,109=>602,110=>602, +111=>602,112=>602,113=>602,114=>602,115=>602,116=>602,117=>602,118=>602,119=>602,120=>602, +121=>602,122=>602,123=>602,124=>602,125=>602,126=>602,8364=>602,8218=>602,402=>602,8222=>602, +8230=>602,8224=>602,8225=>602,710=>602,8240=>602,352=>602,8249=>602,338=>602,381=>602,8216=>602, +8217=>602,8220=>602,8221=>602,8226=>602,8211=>602,8212=>602,732=>602,8482=>602,353=>602,8250=>602, +339=>602,382=>602,376=>602,160=>602,161=>602,162=>602,163=>602,164=>602,165=>602,166=>602, +167=>602,168=>602,169=>602,170=>602,171=>602,172=>602,173=>602,174=>602,175=>602,176=>602, +177=>602,178=>602,179=>602,180=>602,181=>602,182=>602,183=>602,184=>602,185=>602,186=>602, +187=>602,188=>602,189=>602,190=>602,191=>602,192=>602,193=>602,194=>602,195=>602,196=>602, +197=>602,198=>602,199=>602,200=>602,201=>602,202=>602,203=>602,204=>602,205=>602,206=>602, +207=>602,208=>602,209=>602,210=>602,211=>602,212=>602,213=>602,214=>602,215=>602,216=>602, +217=>602,218=>602,219=>602,220=>602,221=>602,222=>602,223=>602,224=>602,225=>602,226=>602, +227=>602,228=>602,229=>602,230=>602,231=>602,232=>602,233=>602,234=>602,235=>602,236=>602, +237=>602,238=>602,239=>602,240=>602,241=>602,242=>602,243=>602,244=>602,245=>602,246=>602, +247=>602,248=>602,249=>602,250=>602,251=>602,252=>602,253=>602,254=>602,255=>602,256=>602, +257=>602,258=>602,259=>602,260=>602,261=>602,262=>602,263=>602,264=>602,265=>602,266=>602, +267=>602,268=>602,269=>602,270=>602,271=>602,272=>602,273=>602,274=>602,275=>602,276=>602, +277=>602,278=>602,279=>602,280=>602,281=>602,282=>602,283=>602,284=>602,285=>602,286=>602, +287=>602,288=>602,289=>602,290=>602,291=>602,292=>602,293=>602,294=>602,295=>602,296=>602, +297=>602,298=>602,299=>602,300=>602,301=>602,302=>602,303=>602,304=>602,305=>602,306=>602, +307=>602,308=>602,309=>602,310=>602,311=>602,312=>602,313=>602,314=>602,315=>602,316=>602, +317=>602,318=>602,319=>602,320=>602,321=>602,322=>602,323=>602,324=>602,325=>602,326=>602, +327=>602,328=>602,329=>602,330=>602,331=>602,332=>602,333=>602,334=>602,335=>602,336=>602, +337=>602,340=>602,341=>602,342=>602,343=>602,344=>602,345=>602,346=>602,347=>602,348=>602, +349=>602,350=>602,351=>602,354=>602,355=>602,356=>602,357=>602,358=>602,359=>602,360=>602, +361=>602,362=>602,363=>602,364=>602,365=>602,366=>602,367=>602,368=>602,369=>602,370=>602, +371=>602,372=>602,373=>602,374=>602,375=>602,377=>602,378=>602,379=>602,380=>602,383=>602, +384=>602,385=>602,386=>602,387=>602,388=>602,389=>602,390=>602,391=>602,392=>602,393=>602, +394=>602,395=>602,396=>602,397=>602,398=>602,399=>602,400=>602,401=>602,403=>602,404=>602, +405=>602,406=>602,407=>602,408=>602,409=>602,410=>602,411=>602,412=>602,413=>602,414=>602, +415=>602,416=>602,417=>602,418=>602,419=>602,420=>602,421=>602,422=>602,423=>602,424=>602, +425=>602,426=>602,427=>602,428=>602,429=>602,430=>602,431=>602,432=>602,433=>602,434=>602, +435=>602,436=>602,437=>602,438=>602,439=>602,440=>602,441=>602,442=>602,443=>602,444=>602, +445=>602,446=>602,447=>602,448=>602,449=>602,450=>602,451=>602,461=>602,462=>602,463=>602, +464=>602,465=>602,466=>602,467=>602,468=>602,469=>602,470=>602,471=>602,472=>602,473=>602, +474=>602,475=>602,476=>602,477=>602,478=>602,479=>602,480=>602,481=>602,482=>602,483=>602, +486=>602,487=>602,488=>602,489=>602,490=>602,491=>602,492=>602,493=>602,494=>602,495=>602, +496=>602,500=>602,501=>602,502=>602,504=>602,505=>602,508=>602,509=>602,510=>602,511=>602, +512=>602,513=>602,514=>602,515=>602,516=>602,517=>602,518=>602,519=>602,520=>602,521=>602, +522=>602,523=>602,524=>602,525=>602,526=>602,527=>602,528=>602,529=>602,530=>602,531=>602, +532=>602,533=>602,534=>602,535=>602,536=>602,537=>602,538=>602,539=>602,540=>602,541=>602, +542=>602,543=>602,544=>602,545=>602,548=>602,549=>602,550=>602,551=>602,552=>602,553=>602, +554=>602,555=>602,556=>602,557=>602,558=>602,559=>602,560=>602,561=>602,562=>602,563=>602, +564=>602,565=>602,566=>602,567=>602,568=>602,569=>602,570=>602,571=>602,572=>602,573=>602, +574=>602,575=>602,576=>602,577=>602,580=>602,581=>602,588=>602,589=>602,592=>602,593=>602, +594=>602,595=>602,596=>602,597=>602,598=>602,599=>602,600=>602,601=>602,602=>602,603=>602, +604=>602,605=>602,606=>602,607=>602,608=>602,609=>602,610=>602,611=>602,612=>602,613=>602, +614=>602,615=>602,616=>602,617=>602,618=>602,619=>602,620=>602,621=>602,622=>602,623=>602, +624=>602,625=>602,626=>602,627=>602,628=>602,629=>602,630=>602,631=>602,632=>602,633=>602, +634=>602,635=>602,636=>602,637=>602,638=>602,639=>602,640=>602,641=>602,642=>602,643=>602, +644=>602,645=>602,646=>602,647=>602,648=>602,649=>602,650=>602,651=>602,652=>602,653=>602, +654=>602,655=>602,656=>602,657=>602,658=>602,659=>602,660=>602,661=>602,662=>602,663=>602, +664=>602,665=>602,666=>602,667=>602,668=>602,669=>602,670=>602,671=>602,672=>602,673=>602, +674=>602,675=>602,676=>602,677=>602,678=>602,679=>602,680=>602,681=>602,682=>602,683=>602, +684=>602,685=>602,686=>602,687=>602,688=>602,689=>602,690=>602,691=>602,692=>602,693=>602, +694=>602,695=>602,696=>602,697=>602,699=>602,700=>602,701=>602,702=>602,703=>602,704=>602, +705=>602,711=>602,712=>602,713=>602,716=>602,717=>602,720=>602,721=>602,722=>602,723=>602, +726=>602,727=>602,728=>602,729=>602,730=>602,731=>602,733=>602,734=>602,736=>602,737=>602, +738=>602,739=>602,740=>602,741=>602,742=>602,743=>602,744=>602,745=>602,750=>602,755=>602, +768=>602,769=>602,770=>602,771=>602,772=>602,773=>602,774=>602,775=>602,776=>602,777=>602, +778=>602,779=>602,780=>602,781=>602,782=>602,783=>602,784=>602,785=>602,786=>602,787=>602, +788=>602,789=>602,790=>602,791=>602,792=>602,793=>602,794=>602,795=>602,796=>602,797=>602, +798=>602,799=>602,800=>602,801=>602,802=>602,803=>602,804=>602,805=>602,806=>602,807=>602, +808=>602,809=>602,810=>602,811=>602,812=>602,813=>602,814=>602,815=>602,816=>602,817=>602, +818=>602,819=>602,820=>602,821=>602,822=>602,823=>602,824=>602,825=>602,826=>602,827=>602, +828=>602,829=>602,830=>602,831=>602,835=>602,856=>602,865=>602,884=>602,885=>602,890=>602, +894=>602,900=>602,901=>602,902=>602,903=>602,904=>602,905=>602,906=>602,908=>602,910=>602, +911=>602,912=>602,913=>602,914=>602,915=>602,916=>602,917=>602,918=>602,919=>602,920=>602, +921=>602,922=>602,923=>602,924=>602,925=>602,926=>602,927=>602,928=>602,929=>602,931=>602, +932=>602,933=>602,934=>602,935=>602,936=>602,937=>602,938=>602,939=>602,940=>602,941=>602, +942=>602,943=>602,944=>602,945=>602,946=>602,947=>602,948=>602,949=>602,950=>602,951=>602, +952=>602,953=>602,954=>602,955=>602,956=>602,957=>602,958=>602,959=>602,960=>602,961=>602, +962=>602,963=>602,964=>602,965=>602,966=>602,967=>602,968=>602,969=>602,970=>602,971=>602, +972=>602,973=>602,974=>602,976=>602,977=>602,978=>602,979=>602,980=>602,981=>602,982=>602, +983=>602,984=>602,985=>602,986=>602,987=>602,988=>602,989=>602,990=>602,991=>602,992=>602, +993=>602,1008=>602,1009=>602,1010=>602,1011=>602,1012=>602,1013=>602,1014=>602,1015=>602,1016=>602, +1017=>602,1018=>602,1019=>602,1020=>602,1021=>602,1022=>602,1023=>602,1024=>602,1025=>602,1026=>602, +1027=>602,1028=>602,1029=>602,1030=>602,1031=>602,1032=>602,1033=>602,1034=>602,1035=>602,1036=>602, +1037=>602,1038=>602,1039=>602,1040=>602,1041=>602,1042=>602,1043=>602,1044=>602,1045=>602,1046=>602, +1047=>602,1048=>602,1049=>602,1050=>602,1051=>602,1052=>602,1053=>602,1054=>602,1055=>602,1056=>602, +1057=>602,1058=>602,1059=>602,1060=>602,1061=>602,1062=>602,1063=>602,1064=>602,1065=>602,1066=>602, +1067=>602,1068=>602,1069=>602,1070=>602,1071=>602,1072=>602,1073=>602,1074=>602,1075=>602,1076=>602, +1077=>602,1078=>602,1079=>602,1080=>602,1081=>602,1082=>602,1083=>602,1084=>602,1085=>602,1086=>602, +1087=>602,1088=>602,1089=>602,1090=>602,1091=>602,1092=>602,1093=>602,1094=>602,1095=>602,1096=>602, +1097=>602,1098=>602,1099=>602,1100=>602,1101=>602,1102=>602,1103=>602,1104=>602,1105=>602,1106=>602, +1107=>602,1108=>602,1109=>602,1110=>602,1111=>602,1112=>602,1113=>602,1114=>602,1115=>602,1116=>602, +1117=>602,1118=>602,1119=>602,1122=>602,1123=>602,1138=>602,1139=>602,1168=>602,1169=>602,1170=>602, +1171=>602,1172=>602,1173=>602,1174=>602,1175=>602,1176=>602,1177=>602,1178=>602,1179=>602,1186=>602, +1187=>602,1194=>602,1195=>602,1196=>602,1197=>602,1198=>602,1199=>602,1200=>602,1201=>602,1202=>602, +1203=>602,1210=>602,1211=>602,1216=>602,1217=>602,1218=>602,1219=>602,1220=>602,1223=>602,1224=>602, +1227=>602,1228=>602,1231=>602,1232=>602,1233=>602,1234=>602,1235=>602,1236=>602,1237=>602,1238=>602, +1239=>602,1240=>602,1241=>602,1242=>602,1243=>602,1244=>602,1245=>602,1246=>602,1247=>602,1248=>602, +1249=>602,1250=>602,1251=>602,1252=>602,1253=>602,1254=>602,1255=>602,1256=>602,1257=>602,1258=>602, +1259=>602,1260=>602,1261=>602,1262=>602,1263=>602,1264=>602,1265=>602,1266=>602,1267=>602,1268=>602, +1269=>602,1270=>602,1271=>602,1272=>602,1273=>602,1296=>602,1297=>602,1306=>602,1307=>602,1308=>602, +1309=>602,1542=>602,1543=>602,1545=>602,1546=>602,1548=>602,1557=>602,1563=>602,1567=>602,1569=>602, +1570=>602,1571=>602,1572=>602,1573=>602,1574=>602,1575=>602,1576=>602,1577=>602,1578=>602,1579=>602, +1580=>602,1581=>602,1582=>602,1583=>602,1584=>602,1585=>602,1586=>602,1587=>602,1588=>602,1589=>602, +1590=>602,1591=>602,1592=>602,1593=>602,1594=>602,1600=>602,1601=>602,1602=>602,1603=>602,1604=>602, +1605=>602,1606=>602,1607=>602,1608=>602,1609=>602,1610=>602,1611=>602,1612=>602,1613=>602,1614=>602, +1615=>602,1616=>602,1617=>602,1618=>602,1619=>602,1620=>602,1621=>602,1626=>602,1632=>602,1633=>602, +1634=>602,1635=>602,1636=>602,1637=>602,1638=>602,1639=>602,1640=>602,1641=>602,1642=>602,1643=>602, +1644=>602,1645=>602,1652=>602,1657=>602,1658=>602,1659=>602,1662=>602,1663=>602,1664=>602,1667=>602, +1668=>602,1670=>602,1671=>602,1681=>602,1688=>602,1700=>602,1705=>602,1711=>602,1726=>602,1740=>602, +1776=>602,1777=>602,1778=>602,1779=>602,1780=>602,1781=>602,1782=>602,1783=>602,1784=>602,1785=>602, +3713=>602,3714=>602,3716=>602,3719=>602,3720=>602,3722=>602,3725=>602,3732=>602,3733=>602,3734=>602, +3735=>602,3737=>602,3738=>602,3739=>602,3740=>602,3741=>602,3742=>602,3743=>602,3745=>602,3746=>602, +3747=>602,3749=>602,3751=>602,3754=>602,3755=>602,3757=>602,3758=>602,3759=>602,3760=>602,3761=>602, +3762=>602,3763=>602,3764=>602,3765=>602,3766=>602,3767=>602,3768=>602,3769=>602,3771=>602,3772=>602, +3784=>602,3785=>602,3786=>602,3787=>602,3788=>602,3789=>602,4304=>602,4305=>602,4306=>602,4307=>602, +4308=>602,4309=>602,4310=>602,4311=>602,4312=>602,4313=>602,4314=>602,4315=>602,4316=>602,4317=>602, +4318=>602,4319=>602,4320=>602,4321=>602,4322=>602,4323=>602,4324=>602,4325=>602,4326=>602,4327=>602, +4328=>602,4329=>602,4330=>602,4331=>602,4332=>602,4333=>602,4334=>602,4335=>602,4336=>602,4337=>602, +4338=>602,4339=>602,4340=>602,4341=>602,4342=>602,4343=>602,4344=>602,4345=>602,4346=>602,4347=>602, +4348=>602,7426=>602,7432=>602,7433=>602,7444=>602,7446=>602,7447=>602,7453=>602,7454=>602,7455=>602, +7468=>602,7469=>602,7470=>602,7472=>602,7473=>602,7474=>602,7475=>602,7476=>602,7477=>602,7478=>602, +7479=>602,7480=>602,7481=>602,7482=>602,7483=>602,7484=>602,7486=>602,7487=>602,7488=>602,7489=>602, +7490=>602,7491=>602,7492=>602,7493=>602,7494=>602,7495=>602,7496=>602,7497=>602,7498=>602,7499=>602, +7500=>602,7501=>602,7502=>602,7503=>602,7504=>602,7505=>602,7506=>602,7507=>602,7508=>602,7509=>602, +7510=>602,7511=>602,7512=>602,7513=>602,7514=>602,7515=>602,7522=>602,7523=>602,7524=>602,7525=>602, +7543=>602,7544=>602,7547=>602,7557=>602,7579=>602,7580=>602,7581=>602,7582=>602,7583=>602,7584=>602, +7585=>602,7586=>602,7587=>602,7588=>602,7589=>602,7590=>602,7591=>602,7592=>602,7593=>602,7594=>602, +7595=>602,7596=>602,7597=>602,7598=>602,7599=>602,7600=>602,7601=>602,7602=>602,7603=>602,7604=>602, +7605=>602,7606=>602,7607=>602,7609=>602,7610=>602,7611=>602,7612=>602,7613=>602,7614=>602,7615=>602, +7680=>602,7681=>602,7682=>602,7683=>602,7684=>602,7685=>602,7686=>602,7687=>602,7688=>602,7689=>602, +7690=>602,7691=>602,7692=>602,7693=>602,7694=>602,7695=>602,7696=>602,7697=>602,7698=>602,7699=>602, +7704=>602,7705=>602,7706=>602,7707=>602,7708=>602,7709=>602,7710=>602,7711=>602,7712=>602,7713=>602, +7714=>602,7715=>602,7716=>602,7717=>602,7718=>602,7719=>602,7720=>602,7721=>602,7722=>602,7723=>602, +7724=>602,7725=>602,7728=>602,7729=>602,7730=>602,7731=>602,7732=>602,7733=>602,7734=>602,7735=>602, +7736=>602,7737=>602,7738=>602,7739=>602,7740=>602,7741=>602,7742=>602,7743=>602,7744=>602,7745=>602, +7746=>602,7747=>602,7748=>602,7749=>602,7750=>602,7751=>602,7752=>602,7753=>602,7754=>602,7755=>602, +7756=>602,7757=>602,7764=>602,7765=>602,7766=>602,7767=>602,7768=>602,7769=>602,7770=>602,7771=>602, +7772=>602,7773=>602,7774=>602,7775=>602,7776=>602,7777=>602,7778=>602,7779=>602,7784=>602,7785=>602, +7786=>602,7787=>602,7788=>602,7789=>602,7790=>602,7791=>602,7792=>602,7793=>602,7794=>602,7795=>602, +7796=>602,7797=>602,7798=>602,7799=>602,7800=>602,7801=>602,7804=>602,7805=>602,7806=>602,7807=>602, +7808=>602,7809=>602,7810=>602,7811=>602,7812=>602,7813=>602,7814=>602,7815=>602,7816=>602,7817=>602, +7818=>602,7819=>602,7820=>602,7821=>602,7822=>602,7823=>602,7824=>602,7825=>602,7826=>602,7827=>602, +7828=>602,7829=>602,7830=>602,7831=>602,7832=>602,7833=>602,7835=>602,7839=>602,7840=>602,7841=>602, +7852=>602,7853=>602,7856=>602,7857=>602,7862=>602,7863=>602,7864=>602,7865=>602,7868=>602,7869=>602, +7878=>602,7879=>602,7882=>602,7883=>602,7884=>602,7885=>602,7896=>602,7897=>602,7898=>602,7899=>602, +7900=>602,7901=>602,7904=>602,7905=>602,7906=>602,7907=>602,7908=>602,7909=>602,7912=>602,7913=>602, +7914=>602,7915=>602,7918=>602,7919=>602,7920=>602,7921=>602,7922=>602,7923=>602,7924=>602,7925=>602, +7928=>602,7929=>602,7936=>602,7937=>602,7938=>602,7939=>602,7940=>602,7941=>602,7942=>602,7943=>602, +7944=>602,7945=>602,7946=>602,7947=>602,7948=>602,7949=>602,7950=>602,7951=>602,7952=>602,7953=>602, +7954=>602,7955=>602,7956=>602,7957=>602,7960=>602,7961=>602,7962=>602,7963=>602,7964=>602,7965=>602, +7968=>602,7969=>602,7970=>602,7971=>602,7972=>602,7973=>602,7974=>602,7975=>602,7976=>602,7977=>602, +7978=>602,7979=>602,7980=>602,7981=>602,7982=>602,7983=>602,7984=>602,7985=>602,7986=>602,7987=>602, +7988=>602,7989=>602,7990=>602,7991=>602,7992=>602,7993=>602,7994=>602,7995=>602,7996=>602,7997=>602, +7998=>602,7999=>602,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602,8008=>602,8009=>602, +8010=>602,8011=>602,8012=>602,8013=>602,8016=>602,8017=>602,8018=>602,8019=>602,8020=>602,8021=>602, +8022=>602,8023=>602,8025=>602,8027=>602,8029=>602,8031=>602,8032=>602,8033=>602,8034=>602,8035=>602, +8036=>602,8037=>602,8038=>602,8039=>602,8040=>602,8041=>602,8042=>602,8043=>602,8044=>602,8045=>602, +8046=>602,8047=>602,8048=>602,8049=>602,8050=>602,8051=>602,8052=>602,8053=>602,8054=>602,8055=>602, +8056=>602,8057=>602,8058=>602,8059=>602,8060=>602,8061=>602,8064=>602,8065=>602,8066=>602,8067=>602, +8068=>602,8069=>602,8070=>602,8071=>602,8072=>602,8073=>602,8074=>602,8075=>602,8076=>602,8077=>602, +8078=>602,8079=>602,8080=>602,8081=>602,8082=>602,8083=>602,8084=>602,8085=>602,8086=>602,8087=>602, +8088=>602,8089=>602,8090=>602,8091=>602,8092=>602,8093=>602,8094=>602,8095=>602,8096=>602,8097=>602, +8098=>602,8099=>602,8100=>602,8101=>602,8102=>602,8103=>602,8104=>602,8105=>602,8106=>602,8107=>602, +8108=>602,8109=>602,8110=>602,8111=>602,8112=>602,8113=>602,8114=>602,8115=>602,8116=>602,8118=>602, +8119=>602,8120=>602,8121=>602,8122=>602,8123=>602,8124=>602,8125=>602,8126=>602,8127=>602,8128=>602, +8129=>602,8130=>602,8131=>602,8132=>602,8134=>602,8135=>602,8136=>602,8137=>602,8138=>602,8139=>602, +8140=>602,8141=>602,8142=>602,8143=>602,8144=>602,8145=>602,8146=>602,8147=>602,8150=>602,8151=>602, +8152=>602,8153=>602,8154=>602,8155=>602,8157=>602,8158=>602,8159=>602,8160=>602,8161=>602,8162=>602, +8163=>602,8164=>602,8165=>602,8166=>602,8167=>602,8168=>602,8169=>602,8170=>602,8171=>602,8172=>602, +8173=>602,8174=>602,8175=>602,8178=>602,8179=>602,8180=>602,8182=>602,8183=>602,8184=>602,8185=>602, +8186=>602,8187=>602,8188=>602,8189=>602,8190=>602,8192=>602,8193=>602,8194=>602,8195=>602,8196=>602, +8197=>602,8198=>602,8199=>602,8200=>602,8201=>602,8202=>602,8208=>602,8209=>602,8210=>602,8213=>602, +8215=>602,8219=>602,8223=>602,8227=>602,8239=>602,8241=>602,8242=>602,8243=>602,8244=>602,8245=>602, +8246=>602,8247=>602,8252=>602,8253=>602,8254=>602,8261=>602,8262=>602,8263=>602,8264=>602,8265=>602, +8287=>602,8304=>602,8305=>602,8308=>602,8309=>602,8310=>602,8311=>602,8312=>602,8313=>602,8314=>602, +8315=>602,8316=>602,8317=>602,8318=>602,8319=>602,8320=>602,8321=>602,8322=>602,8323=>602,8324=>602, +8325=>602,8326=>602,8327=>602,8328=>602,8329=>602,8330=>602,8331=>602,8332=>602,8333=>602,8334=>602, +8336=>602,8337=>602,8338=>602,8339=>602,8340=>602,8352=>602,8353=>602,8354=>602,8355=>602,8356=>602, +8357=>602,8358=>602,8359=>602,8360=>602,8361=>602,8362=>602,8363=>602,8365=>602,8366=>602,8367=>602, +8368=>602,8369=>602,8370=>602,8371=>602,8372=>602,8373=>602,8450=>602,8453=>602,8461=>602,8462=>602, +8463=>602,8469=>602,8470=>602,8471=>602,8473=>602,8474=>602,8477=>602,8484=>602,8486=>602,8490=>602, +8491=>602,8494=>602,8531=>602,8532=>602,8533=>602,8534=>602,8535=>602,8536=>602,8537=>602,8538=>602, +8539=>602,8540=>602,8541=>602,8542=>602,8543=>602,8592=>602,8593=>602,8594=>602,8595=>602,8596=>602, +8597=>602,8598=>602,8599=>602,8600=>602,8601=>602,8602=>602,8603=>602,8604=>602,8605=>602,8606=>602, +8607=>602,8608=>602,8609=>602,8610=>602,8611=>602,8612=>602,8613=>602,8614=>602,8615=>602,8616=>602, +8617=>602,8618=>602,8619=>602,8620=>602,8621=>602,8622=>602,8623=>602,8624=>602,8625=>602,8626=>602, +8627=>602,8628=>602,8629=>602,8630=>602,8631=>602,8632=>602,8633=>602,8634=>602,8635=>602,8636=>602, +8637=>602,8638=>602,8639=>602,8640=>602,8641=>602,8642=>602,8643=>602,8644=>602,8645=>602,8646=>602, +8647=>602,8648=>602,8649=>602,8650=>602,8651=>602,8652=>602,8653=>602,8654=>602,8655=>602,8656=>602, +8657=>602,8658=>602,8659=>602,8660=>602,8661=>602,8662=>602,8663=>602,8664=>602,8665=>602,8666=>602, +8667=>602,8668=>602,8669=>602,8670=>602,8671=>602,8672=>602,8673=>602,8674=>602,8675=>602,8676=>602, +8677=>602,8678=>602,8679=>602,8680=>602,8681=>602,8682=>602,8683=>602,8684=>602,8685=>602,8686=>602, +8687=>602,8688=>602,8689=>602,8690=>602,8691=>602,8692=>602,8693=>602,8694=>602,8695=>602,8696=>602, +8697=>602,8698=>602,8699=>602,8700=>602,8701=>602,8702=>602,8703=>602,8704=>602,8705=>602,8706=>602, +8707=>602,8708=>602,8709=>602,8710=>602,8711=>602,8712=>602,8713=>602,8714=>602,8715=>602,8716=>602, +8717=>602,8719=>602,8721=>602,8722=>602,8723=>602,8725=>602,8727=>602,8728=>602,8729=>602,8730=>602, +8731=>602,8732=>602,8733=>602,8734=>602,8735=>602,8736=>602,8743=>602,8744=>602,8745=>602,8746=>602, +8747=>602,8748=>602,8749=>602,8760=>602,8761=>602,8762=>602,8763=>602,8764=>602,8765=>602,8769=>602, +8770=>602,8771=>602,8772=>602,8773=>602,8774=>602,8775=>602,8776=>602,8777=>602,8778=>602,8779=>602, +8780=>602,8781=>602,8782=>602,8783=>602,8784=>602,8785=>602,8786=>602,8787=>602,8788=>602,8789=>602, +8790=>602,8791=>602,8792=>602,8793=>602,8794=>602,8795=>602,8796=>602,8797=>602,8798=>602,8799=>602, +8800=>602,8801=>602,8802=>602,8803=>602,8804=>602,8805=>602,8806=>602,8807=>602,8808=>602,8809=>602, +8813=>602,8814=>602,8815=>602,8816=>602,8817=>602,8818=>602,8819=>602,8820=>602,8821=>602,8822=>602, +8823=>602,8824=>602,8825=>602,8826=>602,8827=>602,8828=>602,8829=>602,8830=>602,8831=>602,8832=>602, +8833=>602,8834=>602,8835=>602,8836=>602,8837=>602,8838=>602,8839=>602,8840=>602,8841=>602,8842=>602, +8843=>602,8847=>602,8848=>602,8849=>602,8850=>602,8853=>602,8854=>602,8855=>602,8856=>602,8857=>602, +8858=>602,8859=>602,8860=>602,8861=>602,8862=>602,8863=>602,8864=>602,8865=>602,8901=>602,8902=>602, +8909=>602,8922=>602,8923=>602,8924=>602,8925=>602,8926=>602,8927=>602,8928=>602,8929=>602,8930=>602, +8931=>602,8932=>602,8933=>602,8934=>602,8935=>602,8936=>602,8937=>602,8943=>602,8960=>602,8961=>602, +8962=>602,8963=>602,8964=>602,8965=>602,8966=>602,8968=>602,8969=>602,8970=>602,8971=>602,8972=>602, +8973=>602,8974=>602,8975=>602,8976=>602,8977=>602,8978=>602,8979=>602,8980=>602,8981=>602,8984=>602, +8985=>602,8988=>602,8989=>602,8990=>602,8991=>602,8992=>602,8993=>602,8997=>602,8998=>602,8999=>602, +9000=>602,9003=>602,9013=>602,9015=>602,9016=>602,9017=>602,9018=>602,9019=>602,9020=>602,9021=>602, +9022=>602,9025=>602,9026=>602,9027=>602,9028=>602,9031=>602,9032=>602,9033=>602,9035=>602,9036=>602, +9037=>602,9040=>602,9042=>602,9043=>602,9044=>602,9047=>602,9048=>602,9049=>602,9050=>602,9051=>602, +9052=>602,9054=>602,9055=>602,9056=>602,9059=>602,9060=>602,9061=>602,9064=>602,9065=>602,9067=>602, +9068=>602,9069=>602,9070=>602,9071=>602,9072=>602,9075=>602,9076=>602,9077=>602,9078=>602,9079=>602, +9080=>602,9081=>602,9082=>602,9085=>602,9088=>602,9089=>602,9090=>602,9091=>602,9096=>602,9097=>602, +9098=>602,9099=>602,9109=>602,9115=>602,9116=>602,9117=>602,9118=>602,9119=>602,9120=>602,9121=>602, +9122=>602,9123=>602,9124=>602,9125=>602,9126=>602,9127=>602,9128=>602,9129=>602,9130=>602,9131=>602, +9132=>602,9133=>602,9134=>602,9166=>602,9167=>602,9251=>602,9600=>602,9601=>602,9602=>602,9603=>602, +9604=>602,9605=>602,9606=>602,9607=>602,9608=>602,9609=>602,9610=>602,9611=>602,9612=>602,9613=>602, +9614=>602,9615=>602,9616=>602,9617=>602,9618=>602,9619=>602,9620=>602,9621=>602,9622=>602,9623=>602, +9624=>602,9625=>602,9626=>602,9627=>602,9628=>602,9629=>602,9630=>602,9631=>602,9632=>602,9633=>602, +9634=>602,9635=>602,9636=>602,9637=>602,9638=>602,9639=>602,9640=>602,9641=>602,9642=>602,9643=>602, +9644=>602,9645=>602,9646=>602,9647=>602,9648=>602,9649=>602,9650=>602,9651=>602,9652=>602,9653=>602, +9654=>602,9655=>602,9656=>602,9657=>602,9658=>602,9659=>602,9660=>602,9661=>602,9662=>602,9663=>602, +9664=>602,9665=>602,9666=>602,9667=>602,9668=>602,9669=>602,9670=>602,9671=>602,9672=>602,9673=>602, +9674=>602,9675=>602,9676=>602,9677=>602,9678=>602,9679=>602,9680=>602,9681=>602,9682=>602,9683=>602, +9684=>602,9685=>602,9686=>602,9687=>602,9688=>602,9689=>602,9690=>602,9691=>602,9692=>602,9693=>602, +9694=>602,9695=>602,9696=>602,9697=>602,9698=>602,9699=>602,9700=>602,9701=>602,9702=>602,9703=>602, +9704=>602,9705=>602,9706=>602,9707=>602,9708=>602,9709=>602,9710=>602,9711=>602,9712=>602,9713=>602, +9714=>602,9715=>602,9716=>602,9717=>602,9718=>602,9719=>602,9720=>602,9721=>602,9722=>602,9723=>602, +9724=>602,9725=>602,9726=>602,9727=>602,9728=>602,9729=>602,9730=>602,9731=>602,9732=>602,9733=>602, +9734=>602,9735=>602,9736=>602,9737=>602,9738=>602,9739=>602,9740=>602,9741=>602,9742=>602,9743=>602, +9744=>602,9745=>602,9746=>602,9747=>602,9748=>602,9749=>602,9750=>602,9751=>602,9752=>602,9753=>602, +9754=>602,9755=>602,9756=>602,9757=>602,9758=>602,9759=>602,9760=>602,9761=>602,9762=>602,9763=>602, +9764=>602,9765=>602,9766=>602,9767=>602,9768=>602,9769=>602,9770=>602,9771=>602,9772=>602,9773=>602, +9774=>602,9775=>602,9784=>602,9785=>602,9786=>602,9787=>602,9788=>602,9789=>602,9790=>602,9791=>602, +9792=>602,9793=>602,9794=>602,9795=>602,9796=>602,9797=>602,9798=>602,9799=>602,9800=>602,9801=>602, +9802=>602,9803=>602,9804=>602,9805=>602,9806=>602,9807=>602,9808=>602,9809=>602,9810=>602,9811=>602, +9812=>602,9813=>602,9814=>602,9815=>602,9816=>602,9817=>602,9818=>602,9819=>602,9820=>602,9821=>602, +9822=>602,9823=>602,9824=>602,9825=>602,9826=>602,9827=>602,9828=>602,9829=>602,9830=>602,9831=>602, +9832=>602,9833=>602,9834=>602,9835=>602,9836=>602,9837=>602,9838=>602,9839=>602,9840=>602,9841=>602, +9842=>602,9843=>602,9844=>602,9845=>602,9846=>602,9847=>602,9848=>602,9849=>602,9850=>602,9851=>602, +9852=>602,9853=>602,9854=>602,9855=>602,9856=>602,9857=>602,9858=>602,9859=>602,9860=>602,9861=>602, +9862=>602,9863=>602,9864=>602,9865=>602,9866=>602,9867=>602,9872=>602,9873=>602,9874=>602,9875=>602, +9876=>602,9877=>602,9878=>602,9879=>602,9880=>602,9881=>602,9882=>602,9883=>602,9884=>602,9888=>602, +9889=>602,9904=>602,9905=>602,9985=>602,9986=>602,9987=>602,9988=>602,9990=>602,9991=>602,9992=>602, +9993=>602,9996=>602,9997=>602,9998=>602,9999=>602,10000=>602,10001=>602,10002=>602,10003=>602,10004=>602, +10005=>602,10006=>602,10007=>602,10008=>602,10009=>602,10010=>602,10011=>602,10012=>602,10013=>602,10014=>602, +10015=>602,10016=>602,10017=>602,10018=>602,10019=>602,10020=>602,10021=>602,10022=>602,10023=>602,10025=>602, +10026=>602,10027=>602,10028=>602,10029=>602,10030=>602,10031=>602,10032=>602,10033=>602,10034=>602,10035=>602, +10036=>602,10037=>602,10038=>602,10039=>602,10040=>602,10041=>602,10042=>602,10043=>602,10044=>602,10045=>602, +10046=>602,10047=>602,10048=>602,10049=>602,10050=>602,10051=>602,10052=>602,10053=>602,10054=>602,10055=>602, +10056=>602,10057=>602,10058=>602,10059=>602,10061=>602,10063=>602,10064=>602,10065=>602,10066=>602,10070=>602, +10072=>602,10073=>602,10074=>602,10075=>602,10076=>602,10077=>602,10078=>602,10081=>602,10082=>602,10083=>602, +10084=>602,10085=>602,10086=>602,10087=>602,10088=>602,10089=>602,10090=>602,10091=>602,10092=>602,10093=>602, +10094=>602,10095=>602,10096=>602,10097=>602,10098=>602,10099=>602,10100=>602,10101=>602,10132=>602,10136=>602, +10137=>602,10138=>602,10139=>602,10140=>602,10141=>602,10142=>602,10143=>602,10144=>602,10145=>602,10146=>602, +10147=>602,10148=>602,10149=>602,10150=>602,10151=>602,10152=>602,10153=>602,10154=>602,10155=>602,10156=>602, +10157=>602,10158=>602,10159=>602,10161=>602,10162=>602,10163=>602,10164=>602,10165=>602,10166=>602,10167=>602, +10168=>602,10169=>602,10170=>602,10171=>602,10172=>602,10173=>602,10174=>602,10175=>602,10181=>602,10182=>602, +10208=>602,10216=>602,10217=>602,10731=>602,10746=>602,10747=>602,10799=>602,11026=>602,11027=>602,11028=>602, +11029=>602,11030=>602,11031=>602,11032=>602,11033=>602,11034=>602,11364=>602,11374=>602,11375=>602,11381=>602, +11382=>602,11383=>602,11385=>602,11386=>602,11388=>602,11389=>602,11800=>602,11810=>602,11811=>602,11812=>602, +11813=>602,11822=>602,42760=>602,42761=>602,42762=>602,42763=>602,42764=>602,42765=>602,42766=>602,42767=>602, +42768=>602,42769=>602,42770=>602,42771=>602,42772=>602,42773=>602,42774=>602,42779=>602,42780=>602,42781=>602, +42782=>602,42783=>602,42790=>602,42791=>602,42889=>602,42890=>602,42891=>602,42892=>602,63173=>602,64257=>602, +64258=>602,64338=>602,64339=>602,64340=>602,64341=>602,64342=>602,64343=>602,64344=>602,64345=>602,64346=>602, +64347=>602,64348=>602,64349=>602,64350=>602,64351=>602,64352=>602,64353=>602,64354=>602,64355=>602,64356=>602, +64357=>602,64358=>602,64359=>602,64360=>602,64361=>602,64362=>602,64363=>602,64364=>602,64365=>602,64366=>602, +64367=>602,64368=>602,64369=>602,64370=>602,64371=>602,64372=>602,64373=>602,64374=>602,64375=>602,64376=>602, +64377=>602,64378=>602,64379=>602,64380=>602,64381=>602,64382=>602,64383=>602,64384=>602,64385=>602,64394=>602, +64395=>602,64396=>602,64397=>602,64398=>602,64399=>602,64400=>602,64401=>602,64402=>602,64403=>602,64404=>602, +64405=>602,64414=>602,64415=>602,64426=>602,64427=>602,64428=>602,64429=>602,64488=>602,64489=>602,64508=>602, +64509=>602,64510=>602,64511=>602,65136=>602,65137=>602,65138=>602,65139=>602,65140=>602,65142=>602,65143=>602, +65144=>602,65145=>602,65146=>602,65147=>602,65148=>602,65149=>602,65150=>602,65151=>602,65152=>602,65153=>602, +65154=>602,65155=>602,65156=>602,65157=>602,65158=>602,65159=>602,65160=>602,65161=>602,65162=>602,65163=>602, +65164=>602,65165=>602,65166=>602,65167=>602,65168=>602,65169=>602,65170=>602,65171=>602,65172=>602,65173=>602, +65174=>602,65175=>602,65176=>602,65177=>602,65178=>602,65179=>602,65180=>602,65181=>602,65182=>602,65183=>602, +65184=>602,65185=>602,65186=>602,65187=>602,65188=>602,65189=>602,65190=>602,65191=>602,65192=>602,65193=>602, +65194=>602,65195=>602,65196=>602,65197=>602,65198=>602,65199=>602,65200=>602,65201=>602,65202=>602,65203=>602, +65204=>602,65205=>602,65206=>602,65207=>602,65208=>602,65209=>602,65210=>602,65211=>602,65212=>602,65213=>602, +65214=>602,65215=>602,65216=>602,65217=>602,65218=>602,65219=>602,65220=>602,65221=>602,65222=>602,65223=>602, +65224=>602,65225=>602,65226=>602,65227=>602,65228=>602,65229=>602,65230=>602,65231=>602,65232=>602,65233=>602, +65234=>602,65235=>602,65236=>602,65237=>602,65238=>602,65239=>602,65240=>602,65241=>602,65242=>602,65243=>602, +65244=>602,65245=>602,65246=>602,65247=>602,65248=>602,65249=>602,65250=>602,65251=>602,65252=>602,65253=>602, +65254=>602,65255=>602,65256=>602,65257=>602,65258=>602,65259=>602,65260=>602,65261=>602,65262=>602,65263=>602, +65264=>602,65265=>602,65266=>602,65267=>602,65268=>602,65269=>602,65270=>602,65271=>602,65272=>602,65273=>602, +65274=>602,65275=>602,65276=>602,65279=>602,65529=>602,65530=>602,65531=>602,65532=>602,65533=>602); +$enc=''; +$diff=''; +$file='dejavusansmonob.z'; +$ctg='dejavusansmonob.ctg.z'; +$originalsize=301928; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonob.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonob.z new file mode 100755 index 00000000..e98cacb2 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonob.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonobi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonobi.ctg.z new file mode 100755 index 00000000..42e7503e Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonobi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonobi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonobi.php new file mode 100755 index 00000000..8b8d8683 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonobi.php @@ -0,0 +1,250 @@ +928,'Descent'=>-236,'CapHeight'=>-70,'Flags'=>97,'FontBBox'=>'[-428 -394 808 1053]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>602); +$up=-63; +$ut=44; +$dw=602; +$cw=array( +0=>602,32=>602,33=>602,34=>602,35=>602,36=>602,37=>602,38=>602,39=>602,40=>602, +41=>602,42=>602,43=>602,44=>602,45=>602,46=>602,47=>602,48=>602,49=>602,50=>602, +51=>602,52=>602,53=>602,54=>602,55=>602,56=>602,57=>602,58=>602,59=>602,60=>602, +61=>602,62=>602,63=>602,64=>602,65=>602,66=>602,67=>602,68=>602,69=>602,70=>602, +71=>602,72=>602,73=>602,74=>602,75=>602,76=>602,77=>602,78=>602,79=>602,80=>602, +81=>602,82=>602,83=>602,84=>602,85=>602,86=>602,87=>602,88=>602,89=>602,90=>602, +91=>602,92=>602,93=>602,94=>602,95=>602,96=>602,97=>602,98=>602,99=>602,100=>602, +101=>602,102=>602,103=>602,104=>602,105=>602,106=>602,107=>602,108=>602,109=>602,110=>602, +111=>602,112=>602,113=>602,114=>602,115=>602,116=>602,117=>602,118=>602,119=>602,120=>602, +121=>602,122=>602,123=>602,124=>602,125=>602,126=>602,8364=>602,8218=>602,402=>602,8222=>602, +8230=>602,8224=>602,8225=>602,710=>602,8240=>602,352=>602,8249=>602,338=>602,381=>602,8216=>602, +8217=>602,8220=>602,8221=>602,8226=>602,8211=>602,8212=>602,732=>602,8482=>602,353=>602,8250=>602, +339=>602,382=>602,376=>602,160=>602,161=>602,162=>602,163=>602,164=>602,165=>602,166=>602, +167=>602,168=>602,169=>602,170=>602,171=>602,172=>602,173=>602,174=>602,175=>602,176=>602, +177=>602,178=>602,179=>602,180=>602,181=>602,182=>602,183=>602,184=>602,185=>602,186=>602, +187=>602,188=>602,189=>602,190=>602,191=>602,192=>602,193=>602,194=>602,195=>602,196=>602, +197=>602,198=>602,199=>602,200=>602,201=>602,202=>602,203=>602,204=>602,205=>602,206=>602, +207=>602,208=>602,209=>602,210=>602,211=>602,212=>602,213=>602,214=>602,215=>602,216=>602, +217=>602,218=>602,219=>602,220=>602,221=>602,222=>602,223=>602,224=>602,225=>602,226=>602, +227=>602,228=>602,229=>602,230=>602,231=>602,232=>602,233=>602,234=>602,235=>602,236=>602, +237=>602,238=>602,239=>602,240=>602,241=>602,242=>602,243=>602,244=>602,245=>602,246=>602, +247=>602,248=>602,249=>602,250=>602,251=>602,252=>602,253=>602,254=>602,255=>602,256=>602, +257=>602,258=>602,259=>602,260=>602,261=>602,262=>602,263=>602,264=>602,265=>602,266=>602, +267=>602,268=>602,269=>602,270=>602,271=>602,272=>602,273=>602,274=>602,275=>602,276=>602, +277=>602,278=>602,279=>602,280=>602,281=>602,282=>602,283=>602,284=>602,285=>602,286=>602, +287=>602,288=>602,289=>602,290=>602,291=>602,292=>602,293=>602,294=>602,295=>602,296=>602, +297=>602,298=>602,299=>602,300=>602,301=>602,302=>602,303=>602,304=>602,305=>602,306=>602, +307=>602,308=>602,309=>602,310=>602,311=>602,312=>602,313=>602,314=>602,315=>602,316=>602, +317=>602,318=>602,319=>602,320=>602,321=>602,322=>602,323=>602,324=>602,325=>602,326=>602, +327=>602,328=>602,329=>602,330=>602,331=>602,332=>602,333=>602,334=>602,335=>602,336=>602, +337=>602,340=>602,341=>602,342=>602,343=>602,344=>602,345=>602,346=>602,347=>602,348=>602, +349=>602,350=>602,351=>602,354=>602,355=>602,356=>602,357=>602,358=>602,359=>602,360=>602, +361=>602,362=>602,363=>602,364=>602,365=>602,366=>602,367=>602,368=>602,369=>602,370=>602, +371=>602,372=>602,373=>602,374=>602,375=>602,377=>602,378=>602,379=>602,380=>602,383=>602, +384=>602,385=>602,386=>602,387=>602,388=>602,389=>602,390=>602,391=>602,392=>602,393=>602, +394=>602,395=>602,396=>602,397=>602,398=>602,399=>602,400=>602,401=>602,403=>602,404=>602, +405=>602,406=>602,407=>602,408=>602,409=>602,410=>602,411=>602,412=>602,413=>602,414=>602, +415=>602,416=>602,417=>602,418=>602,419=>602,420=>602,421=>602,422=>602,423=>602,424=>602, +425=>602,426=>602,427=>602,428=>602,429=>602,430=>602,431=>602,432=>602,433=>602,434=>602, +435=>602,436=>602,437=>602,438=>602,439=>602,440=>602,441=>602,442=>602,443=>602,444=>602, +445=>602,446=>602,447=>602,448=>602,449=>602,450=>602,451=>602,461=>602,462=>602,463=>602, +464=>602,465=>602,466=>602,467=>602,468=>602,469=>602,470=>602,471=>602,472=>602,473=>602, +474=>602,475=>602,476=>602,477=>602,478=>602,479=>602,480=>602,481=>602,482=>602,483=>602, +486=>602,487=>602,488=>602,489=>602,490=>602,491=>602,492=>602,493=>602,494=>602,495=>602, +500=>602,501=>602,502=>602,504=>602,505=>602,508=>602,509=>602,510=>602,511=>602,512=>602, +513=>602,514=>602,515=>602,516=>602,517=>602,518=>602,519=>602,520=>602,521=>602,522=>602, +523=>602,524=>602,525=>602,526=>602,527=>602,528=>602,529=>602,530=>602,531=>602,532=>602, +533=>602,534=>602,535=>602,536=>602,537=>602,538=>602,539=>602,540=>602,541=>602,542=>602, +543=>602,545=>602,548=>602,549=>602,550=>602,551=>602,552=>602,553=>602,554=>602,555=>602, +556=>602,557=>602,558=>602,559=>602,560=>602,561=>602,562=>602,563=>602,564=>602,565=>602, +566=>602,567=>602,568=>602,569=>602,570=>602,571=>602,572=>602,573=>602,574=>602,575=>602, +576=>602,577=>602,580=>602,581=>602,588=>602,589=>602,592=>602,593=>602,594=>602,595=>602, +596=>602,597=>602,598=>602,599=>602,600=>602,601=>602,602=>602,603=>602,604=>602,605=>602, +606=>602,607=>602,608=>602,609=>602,610=>602,611=>602,612=>602,613=>602,614=>602,615=>602, +616=>602,617=>602,618=>602,619=>602,620=>602,621=>602,622=>602,623=>602,624=>602,625=>602, +626=>602,627=>602,628=>602,629=>602,630=>602,631=>602,632=>602,633=>602,634=>602,635=>602, +636=>602,637=>602,638=>602,639=>602,640=>602,641=>602,642=>602,643=>602,644=>602,645=>602, +646=>602,647=>602,648=>602,649=>602,650=>602,651=>602,652=>602,653=>602,654=>602,655=>602, +656=>602,657=>602,658=>602,659=>602,660=>602,661=>602,662=>602,663=>602,664=>602,665=>602, +666=>602,667=>602,668=>602,669=>602,670=>602,671=>602,672=>602,673=>602,674=>602,675=>602, +676=>602,677=>602,678=>602,679=>602,680=>602,681=>602,682=>602,683=>602,684=>602,685=>602, +686=>602,687=>602,688=>602,689=>602,690=>602,691=>602,692=>602,693=>602,694=>602,695=>602, +696=>602,697=>602,699=>602,700=>602,701=>602,702=>602,703=>602,704=>602,705=>602,711=>602, +712=>602,713=>602,716=>602,717=>602,720=>602,721=>602,722=>602,723=>602,726=>602,727=>602, +728=>602,729=>602,730=>602,731=>602,733=>602,734=>602,736=>602,737=>602,738=>602,739=>602, +740=>602,741=>602,742=>602,743=>602,744=>602,745=>602,750=>602,755=>602,768=>602,769=>602, +770=>602,771=>602,772=>602,773=>602,774=>602,775=>602,776=>602,777=>602,778=>602,779=>602, +780=>602,781=>602,782=>602,783=>602,784=>602,785=>602,786=>602,787=>602,788=>602,789=>602, +790=>602,791=>602,792=>602,793=>602,794=>602,795=>602,796=>602,797=>602,798=>602,799=>602, +800=>602,801=>602,802=>602,803=>602,804=>602,805=>602,806=>602,807=>602,808=>602,809=>602, +810=>602,811=>602,812=>602,813=>602,814=>602,815=>602,816=>602,817=>602,818=>602,819=>602, +820=>602,821=>602,822=>602,823=>602,824=>602,825=>602,826=>602,827=>602,828=>602,829=>602, +830=>602,831=>602,835=>602,856=>602,865=>602,884=>602,885=>602,890=>602,894=>602,900=>602, +901=>602,902=>602,903=>602,904=>602,905=>602,906=>602,908=>602,910=>602,911=>602,912=>602, +913=>602,914=>602,915=>602,916=>602,917=>602,918=>602,919=>602,920=>602,921=>602,922=>602, +923=>602,924=>602,925=>602,926=>602,927=>602,928=>602,929=>602,931=>602,932=>602,933=>602, +934=>602,935=>602,936=>602,937=>602,938=>602,939=>602,940=>602,941=>602,942=>602,943=>602, +944=>602,945=>602,946=>602,947=>602,948=>602,949=>602,950=>602,951=>602,952=>602,953=>602, +954=>602,955=>602,956=>602,957=>602,958=>602,959=>602,960=>602,961=>602,962=>602,963=>602, +964=>602,965=>602,966=>602,967=>602,968=>602,969=>602,970=>602,971=>602,972=>602,973=>602, +974=>602,976=>602,977=>602,978=>602,979=>602,980=>602,981=>602,982=>602,983=>602,984=>602, +985=>602,986=>602,987=>602,988=>602,989=>602,990=>602,991=>602,992=>602,993=>602,1008=>602, +1009=>602,1010=>602,1011=>602,1012=>602,1013=>602,1014=>602,1015=>602,1016=>602,1017=>602,1018=>602, +1019=>602,1020=>602,1021=>602,1022=>602,1023=>602,1024=>602,1025=>602,1026=>602,1027=>602,1028=>602, +1029=>602,1030=>602,1031=>602,1032=>602,1033=>602,1034=>602,1035=>602,1036=>602,1037=>602,1038=>602, +1039=>602,1040=>602,1041=>602,1042=>602,1043=>602,1044=>602,1045=>602,1046=>602,1047=>602,1048=>602, +1049=>602,1050=>602,1051=>602,1052=>602,1053=>602,1054=>602,1055=>602,1056=>602,1057=>602,1058=>602, +1059=>602,1060=>602,1061=>602,1062=>602,1063=>602,1064=>602,1065=>602,1066=>602,1067=>602,1068=>602, +1069=>602,1070=>602,1071=>602,1072=>602,1073=>602,1074=>602,1075=>602,1076=>602,1077=>602,1078=>602, +1079=>602,1080=>602,1081=>602,1082=>602,1083=>602,1084=>602,1085=>602,1086=>602,1087=>602,1088=>602, +1089=>602,1090=>602,1091=>602,1092=>602,1093=>602,1094=>602,1095=>602,1096=>602,1097=>602,1098=>602, +1099=>602,1100=>602,1101=>602,1102=>602,1103=>602,1104=>602,1105=>602,1106=>602,1107=>602,1108=>602, +1109=>602,1110=>602,1111=>602,1112=>602,1113=>602,1114=>602,1115=>602,1116=>602,1117=>602,1118=>602, +1119=>602,1122=>602,1123=>602,1138=>602,1139=>602,1168=>602,1169=>602,1170=>602,1171=>602,1172=>602, +1173=>602,1174=>602,1175=>602,1176=>602,1177=>602,1178=>602,1179=>602,1186=>602,1187=>602,1194=>602, +1195=>602,1196=>602,1197=>602,1198=>602,1199=>602,1200=>602,1201=>602,1202=>602,1203=>602,1210=>602, +1211=>602,1216=>602,1217=>602,1218=>602,1219=>602,1220=>602,1223=>602,1224=>602,1227=>602,1228=>602, +1231=>602,1232=>602,1233=>602,1234=>602,1235=>602,1236=>602,1237=>602,1238=>602,1239=>602,1240=>602, +1241=>602,1242=>602,1243=>602,1244=>602,1245=>602,1246=>602,1247=>602,1248=>602,1249=>602,1250=>602, +1251=>602,1252=>602,1253=>602,1254=>602,1255=>602,1256=>602,1257=>602,1258=>602,1259=>602,1260=>602, +1261=>602,1262=>602,1263=>602,1264=>602,1265=>602,1266=>602,1267=>602,1268=>602,1269=>602,1270=>602, +1271=>602,1272=>602,1273=>602,1296=>602,1297=>602,1306=>602,1307=>602,1308=>602,1309=>602,3713=>602, +3714=>602,3716=>602,3719=>602,3720=>602,3722=>602,3725=>602,3732=>602,3733=>602,3734=>602,3735=>602, +3737=>602,3738=>602,3739=>602,3740=>602,3741=>602,3742=>602,3743=>602,3745=>602,3746=>602,3747=>602, +3749=>602,3751=>602,3754=>602,3755=>602,3757=>602,3758=>602,3759=>602,3760=>602,3761=>602,3762=>602, +3763=>602,3764=>602,3765=>602,3766=>602,3767=>602,3768=>602,3769=>602,3771=>602,3772=>602,3784=>602, +3785=>602,3786=>602,3787=>602,3788=>602,3789=>602,4304=>602,4305=>602,4306=>602,4307=>602,4308=>602, +4309=>602,4310=>602,4311=>602,4312=>602,4313=>602,4314=>602,4315=>602,4316=>602,4317=>602,4318=>602, +4319=>602,4320=>602,4321=>602,4322=>602,4323=>602,4324=>602,4325=>602,4326=>602,4327=>602,4328=>602, +4329=>602,4330=>602,4331=>602,4332=>602,4333=>602,4334=>602,4335=>602,4336=>602,4337=>602,4338=>602, +4339=>602,4340=>602,4341=>602,4342=>602,4343=>602,4344=>602,4345=>602,4346=>602,4347=>602,4348=>602, +7426=>602,7432=>602,7433=>602,7444=>602,7446=>602,7447=>602,7453=>602,7454=>602,7455=>602,7468=>602, +7469=>602,7470=>602,7472=>602,7473=>602,7474=>602,7475=>602,7476=>602,7477=>602,7478=>602,7479=>602, +7480=>602,7481=>602,7482=>602,7483=>602,7484=>602,7486=>602,7487=>602,7488=>602,7489=>602,7490=>602, +7491=>602,7492=>602,7493=>602,7494=>602,7495=>602,7496=>602,7497=>602,7498=>602,7499=>602,7500=>602, +7501=>602,7502=>602,7503=>602,7504=>602,7505=>602,7506=>602,7507=>602,7508=>602,7509=>602,7510=>602, +7511=>602,7512=>602,7513=>602,7514=>602,7515=>602,7522=>602,7523=>602,7524=>602,7525=>602,7543=>602, +7544=>602,7547=>602,7557=>602,7579=>602,7580=>602,7581=>602,7582=>602,7583=>602,7584=>602,7585=>602, +7586=>602,7587=>602,7588=>602,7589=>602,7590=>602,7591=>602,7592=>602,7593=>602,7594=>602,7595=>602, +7596=>602,7597=>602,7598=>602,7599=>602,7600=>602,7601=>602,7602=>602,7603=>602,7604=>602,7605=>602, +7606=>602,7607=>602,7609=>602,7610=>602,7611=>602,7612=>602,7613=>602,7614=>602,7615=>602,7680=>602, +7681=>602,7682=>602,7683=>602,7684=>602,7685=>602,7686=>602,7687=>602,7688=>602,7689=>602,7690=>602, +7691=>602,7692=>602,7693=>602,7694=>602,7695=>602,7696=>602,7697=>602,7698=>602,7699=>602,7704=>602, +7705=>602,7706=>602,7707=>602,7708=>602,7709=>602,7710=>602,7711=>602,7712=>602,7713=>602,7714=>602, +7715=>602,7716=>602,7717=>602,7718=>602,7719=>602,7720=>602,7721=>602,7722=>602,7723=>602,7724=>602, +7725=>602,7728=>602,7729=>602,7730=>602,7731=>602,7732=>602,7733=>602,7734=>602,7735=>602,7736=>602, +7737=>602,7738=>602,7739=>602,7740=>602,7741=>602,7742=>602,7743=>602,7744=>602,7745=>602,7746=>602, +7747=>602,7748=>602,7749=>602,7750=>602,7751=>602,7752=>602,7753=>602,7754=>602,7755=>602,7756=>602, +7757=>602,7764=>602,7765=>602,7766=>602,7767=>602,7768=>602,7769=>602,7770=>602,7771=>602,7772=>602, +7773=>602,7774=>602,7775=>602,7776=>602,7777=>602,7778=>602,7779=>602,7784=>602,7785=>602,7786=>602, +7787=>602,7788=>602,7789=>602,7790=>602,7791=>602,7792=>602,7793=>602,7794=>602,7795=>602,7796=>602, +7797=>602,7798=>602,7799=>602,7800=>602,7801=>602,7804=>602,7805=>602,7806=>602,7807=>602,7808=>602, +7809=>602,7810=>602,7811=>602,7812=>602,7813=>602,7814=>602,7815=>602,7816=>602,7817=>602,7818=>602, +7819=>602,7820=>602,7821=>602,7822=>602,7823=>602,7824=>602,7825=>602,7826=>602,7827=>602,7828=>602, +7829=>602,7830=>602,7831=>602,7832=>602,7833=>602,7835=>602,7839=>602,7840=>602,7841=>602,7852=>602, +7853=>602,7856=>602,7857=>602,7862=>602,7863=>602,7864=>602,7865=>602,7868=>602,7869=>602,7878=>602, +7879=>602,7882=>602,7883=>602,7884=>602,7885=>602,7896=>602,7897=>602,7898=>602,7899=>602,7900=>602, +7901=>602,7904=>602,7905=>602,7906=>602,7907=>602,7908=>602,7909=>602,7912=>602,7913=>602,7914=>602, +7915=>602,7918=>602,7919=>602,7920=>602,7921=>602,7922=>602,7923=>602,7924=>602,7925=>602,7928=>602, +7929=>602,7936=>602,7937=>602,7938=>602,7939=>602,7940=>602,7941=>602,7942=>602,7943=>602,7944=>602, +7945=>602,7946=>602,7947=>602,7948=>602,7949=>602,7950=>602,7951=>602,7952=>602,7953=>602,7954=>602, +7955=>602,7956=>602,7957=>602,7960=>602,7961=>602,7962=>602,7963=>602,7964=>602,7965=>602,7968=>602, +7969=>602,7970=>602,7971=>602,7972=>602,7973=>602,7974=>602,7975=>602,7976=>602,7977=>602,7978=>602, +7979=>602,7980=>602,7981=>602,7982=>602,7983=>602,7984=>602,7985=>602,7986=>602,7987=>602,7988=>602, +7989=>602,7990=>602,7991=>602,7992=>602,7993=>602,7994=>602,7995=>602,7996=>602,7997=>602,7998=>602, +7999=>602,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602,8008=>602,8009=>602,8010=>602, +8011=>602,8012=>602,8013=>602,8016=>602,8017=>602,8018=>602,8019=>602,8020=>602,8021=>602,8022=>602, +8023=>602,8025=>602,8027=>602,8029=>602,8031=>602,8032=>602,8033=>602,8034=>602,8035=>602,8036=>602, +8037=>602,8038=>602,8039=>602,8040=>602,8041=>602,8042=>602,8043=>602,8044=>602,8045=>602,8046=>602, +8047=>602,8048=>602,8049=>602,8050=>602,8051=>602,8052=>602,8053=>602,8054=>602,8055=>602,8056=>602, +8057=>602,8058=>602,8059=>602,8060=>602,8061=>602,8064=>602,8065=>602,8066=>602,8067=>602,8068=>602, +8069=>602,8070=>602,8071=>602,8072=>602,8073=>602,8074=>602,8075=>602,8076=>602,8077=>602,8078=>602, +8079=>602,8080=>602,8081=>602,8082=>602,8083=>602,8084=>602,8085=>602,8086=>602,8087=>602,8088=>602, +8089=>602,8090=>602,8091=>602,8092=>602,8093=>602,8094=>602,8095=>602,8096=>602,8097=>602,8098=>602, +8099=>602,8100=>602,8101=>602,8102=>602,8103=>602,8104=>602,8105=>602,8106=>602,8107=>602,8108=>602, +8109=>602,8110=>602,8111=>602,8112=>602,8113=>602,8114=>602,8115=>602,8116=>602,8118=>602,8119=>602, +8120=>602,8121=>602,8122=>602,8123=>602,8124=>602,8125=>602,8126=>602,8127=>602,8128=>602,8129=>602, +8130=>602,8131=>602,8132=>602,8134=>602,8135=>602,8136=>602,8137=>602,8138=>602,8139=>602,8140=>602, +8141=>602,8142=>602,8143=>602,8144=>602,8145=>602,8146=>602,8147=>602,8150=>602,8151=>602,8152=>602, +8153=>602,8154=>602,8155=>602,8157=>602,8158=>602,8159=>602,8160=>602,8161=>602,8162=>602,8163=>602, +8164=>602,8165=>602,8166=>602,8167=>602,8168=>602,8169=>602,8170=>602,8171=>602,8172=>602,8173=>602, +8174=>602,8175=>602,8178=>602,8179=>602,8180=>602,8182=>602,8183=>602,8184=>602,8185=>602,8186=>602, +8187=>602,8188=>602,8189=>602,8190=>602,8192=>602,8193=>602,8194=>602,8195=>602,8196=>602,8197=>602, +8198=>602,8199=>602,8200=>602,8201=>602,8202=>602,8208=>602,8209=>602,8210=>602,8213=>602,8215=>602, +8219=>602,8223=>602,8227=>602,8239=>602,8241=>602,8242=>602,8243=>602,8244=>602,8245=>602,8246=>602, +8247=>602,8252=>602,8253=>602,8254=>602,8261=>602,8262=>602,8263=>602,8264=>602,8265=>602,8287=>602, +8304=>602,8305=>602,8308=>602,8309=>602,8310=>602,8311=>602,8312=>602,8313=>602,8314=>602,8315=>602, +8316=>602,8317=>602,8318=>602,8319=>602,8320=>602,8321=>602,8322=>602,8323=>602,8324=>602,8325=>602, +8326=>602,8327=>602,8328=>602,8329=>602,8330=>602,8331=>602,8332=>602,8333=>602,8334=>602,8336=>602, +8337=>602,8338=>602,8339=>602,8340=>602,8352=>602,8353=>602,8354=>602,8355=>602,8356=>602,8357=>602, +8358=>602,8359=>602,8360=>602,8361=>602,8362=>602,8363=>602,8365=>602,8366=>602,8367=>602,8368=>602, +8369=>602,8370=>602,8371=>602,8372=>602,8373=>602,8450=>602,8453=>602,8461=>602,8462=>602,8463=>602, +8469=>602,8470=>602,8471=>602,8473=>602,8474=>602,8477=>602,8484=>602,8486=>602,8490=>602,8491=>602, +8494=>602,8531=>602,8532=>602,8533=>602,8534=>602,8535=>602,8536=>602,8537=>602,8538=>602,8539=>602, +8540=>602,8541=>602,8542=>602,8543=>602,8592=>602,8593=>602,8594=>602,8595=>602,8596=>602,8597=>602, +8598=>602,8599=>602,8600=>602,8601=>602,8602=>602,8603=>602,8604=>602,8605=>602,8606=>602,8607=>602, +8608=>602,8609=>602,8610=>602,8611=>602,8612=>602,8613=>602,8614=>602,8615=>602,8616=>602,8617=>602, +8618=>602,8619=>602,8620=>602,8621=>602,8622=>602,8623=>602,8624=>602,8625=>602,8626=>602,8627=>602, +8628=>602,8629=>602,8630=>602,8631=>602,8632=>602,8633=>602,8634=>602,8635=>602,8636=>602,8637=>602, +8638=>602,8639=>602,8640=>602,8641=>602,8642=>602,8643=>602,8644=>602,8645=>602,8646=>602,8647=>602, +8648=>602,8649=>602,8650=>602,8651=>602,8652=>602,8653=>602,8654=>602,8655=>602,8656=>602,8657=>602, +8658=>602,8659=>602,8660=>602,8661=>602,8662=>602,8663=>602,8664=>602,8665=>602,8666=>602,8667=>602, +8668=>602,8669=>602,8670=>602,8671=>602,8672=>602,8673=>602,8674=>602,8675=>602,8676=>602,8677=>602, +8678=>602,8679=>602,8680=>602,8681=>602,8682=>602,8683=>602,8684=>602,8685=>602,8686=>602,8687=>602, +8688=>602,8689=>602,8690=>602,8691=>602,8692=>602,8693=>602,8694=>602,8695=>602,8696=>602,8697=>602, +8698=>602,8699=>602,8700=>602,8701=>602,8702=>602,8703=>602,8704=>602,8705=>602,8706=>602,8707=>602, +8708=>602,8709=>602,8710=>602,8711=>602,8712=>602,8713=>602,8714=>602,8715=>602,8716=>602,8717=>602, +8719=>602,8721=>602,8722=>602,8723=>602,8725=>602,8727=>602,8728=>602,8729=>602,8730=>602,8731=>602, +8732=>602,8733=>602,8734=>602,8735=>602,8736=>602,8743=>602,8744=>602,8745=>602,8746=>602,8747=>602, +8748=>602,8749=>602,8760=>602,8761=>602,8762=>602,8763=>602,8764=>602,8765=>602,8769=>602,8770=>602, +8771=>602,8772=>602,8773=>602,8774=>602,8775=>602,8776=>602,8777=>602,8778=>602,8779=>602,8780=>602, +8781=>602,8782=>602,8783=>602,8784=>602,8785=>602,8786=>602,8787=>602,8788=>602,8789=>602,8790=>602, +8791=>602,8792=>602,8793=>602,8794=>602,8795=>602,8796=>602,8797=>602,8798=>602,8799=>602,8800=>602, +8801=>602,8802=>602,8803=>602,8804=>602,8805=>602,8806=>602,8807=>602,8808=>602,8809=>602,8813=>602, +8814=>602,8815=>602,8816=>602,8817=>602,8818=>602,8819=>602,8820=>602,8821=>602,8822=>602,8823=>602, +8824=>602,8825=>602,8826=>602,8827=>602,8828=>602,8829=>602,8830=>602,8831=>602,8832=>602,8833=>602, +8834=>602,8835=>602,8836=>602,8837=>602,8838=>602,8839=>602,8840=>602,8841=>602,8842=>602,8843=>602, +8847=>602,8848=>602,8849=>602,8850=>602,8853=>602,8854=>602,8855=>602,8856=>602,8857=>602,8858=>602, +8859=>602,8860=>602,8861=>602,8862=>602,8863=>602,8864=>602,8865=>602,8901=>602,8902=>602,8909=>602, +8922=>602,8923=>602,8924=>602,8925=>602,8926=>602,8927=>602,8928=>602,8929=>602,8930=>602,8931=>602, +8932=>602,8933=>602,8934=>602,8935=>602,8936=>602,8937=>602,8943=>602,8960=>602,8961=>602,8962=>602, +8963=>602,8964=>602,8965=>602,8966=>602,8968=>602,8969=>602,8970=>602,8971=>602,8972=>602,8973=>602, +8974=>602,8975=>602,8976=>602,8977=>602,8978=>602,8979=>602,8980=>602,8981=>602,8984=>602,8985=>602, +8988=>602,8989=>602,8990=>602,8991=>602,8992=>602,8993=>602,8997=>602,8998=>602,8999=>602,9000=>602, +9003=>602,9013=>602,9015=>602,9016=>602,9017=>602,9018=>602,9019=>602,9020=>602,9021=>602,9022=>602, +9025=>602,9026=>602,9027=>602,9028=>602,9031=>602,9032=>602,9033=>602,9035=>602,9036=>602,9037=>602, +9040=>602,9042=>602,9043=>602,9044=>602,9047=>602,9048=>602,9049=>602,9050=>602,9051=>602,9052=>602, +9054=>602,9055=>602,9056=>602,9059=>602,9060=>602,9061=>602,9064=>602,9065=>602,9067=>602,9068=>602, +9069=>602,9070=>602,9071=>602,9072=>602,9075=>602,9076=>602,9077=>602,9078=>602,9079=>602,9080=>602, +9081=>602,9082=>602,9085=>602,9088=>602,9089=>602,9090=>602,9091=>602,9096=>602,9097=>602,9098=>602, +9099=>602,9109=>602,9115=>602,9116=>602,9117=>602,9118=>602,9119=>602,9120=>602,9121=>602,9122=>602, +9123=>602,9124=>602,9125=>602,9126=>602,9127=>602,9128=>602,9129=>602,9130=>602,9131=>602,9132=>602, +9133=>602,9134=>602,9166=>602,9167=>602,9251=>602,9600=>602,9601=>602,9602=>602,9603=>602,9604=>602, +9605=>602,9606=>602,9607=>602,9608=>602,9609=>602,9610=>602,9611=>602,9612=>602,9613=>602,9614=>602, +9615=>602,9616=>602,9617=>602,9618=>602,9619=>602,9620=>602,9621=>602,9622=>602,9623=>602,9624=>602, +9625=>602,9626=>602,9627=>602,9628=>602,9629=>602,9630=>602,9631=>602,9632=>602,9633=>602,9634=>602, +9635=>602,9636=>602,9637=>602,9638=>602,9639=>602,9640=>602,9641=>602,9642=>602,9643=>602,9644=>602, +9645=>602,9646=>602,9647=>602,9648=>602,9649=>602,9650=>602,9651=>602,9652=>602,9653=>602,9654=>602, +9655=>602,9656=>602,9657=>602,9658=>602,9659=>602,9660=>602,9661=>602,9662=>602,9663=>602,9664=>602, +9665=>602,9666=>602,9667=>602,9668=>602,9669=>602,9670=>602,9671=>602,9672=>602,9673=>602,9674=>602, +9675=>602,9676=>602,9677=>602,9678=>602,9679=>602,9680=>602,9681=>602,9682=>602,9683=>602,9684=>602, +9685=>602,9686=>602,9687=>602,9688=>602,9689=>602,9690=>602,9691=>602,9692=>602,9693=>602,9694=>602, +9695=>602,9696=>602,9697=>602,9698=>602,9699=>602,9700=>602,9701=>602,9702=>602,9703=>602,9704=>602, +9705=>602,9706=>602,9707=>602,9708=>602,9709=>602,9710=>602,9711=>602,9712=>602,9713=>602,9714=>602, +9715=>602,9716=>602,9717=>602,9718=>602,9719=>602,9720=>602,9721=>602,9722=>602,9723=>602,9724=>602, +9725=>602,9726=>602,9727=>602,9728=>602,9784=>602,9785=>602,9786=>602,9787=>602,9788=>602,9791=>602, +9792=>602,9793=>602,9794=>602,9795=>602,9796=>602,9797=>602,9798=>602,9799=>602,9824=>602,9825=>602, +9826=>602,9827=>602,9828=>602,9829=>602,9830=>602,9831=>602,9833=>602,9834=>602,9835=>602,9836=>602, +9837=>602,9838=>602,9839=>602,10181=>602,10182=>602,10208=>602,10216=>602,10217=>602,10731=>602,10746=>602, +10747=>602,10799=>602,11026=>602,11027=>602,11028=>602,11029=>602,11030=>602,11031=>602,11032=>602,11033=>602, +11034=>602,11364=>602,11374=>602,11375=>602,11381=>602,11382=>602,11383=>602,11385=>602,11386=>602,11388=>602, +11389=>602,11800=>602,11810=>602,11811=>602,11812=>602,11813=>602,11822=>602,42760=>602,42761=>602,42762=>602, +42763=>602,42764=>602,42765=>602,42766=>602,42767=>602,42768=>602,42769=>602,42770=>602,42771=>602,42772=>602, +42773=>602,42774=>602,42779=>602,42780=>602,42781=>602,42782=>602,42783=>602,42790=>602,42791=>602,42889=>602, +42890=>602,42891=>602,42892=>602,63173=>602,64257=>602,64258=>602,65529=>602,65530=>602,65531=>602,65532=>602, +65533=>602); +$enc=''; +$diff=''; +$file='dejavusansmonobi.z'; +$ctg='dejavusansmonobi.ctg.z'; +$originalsize=223408; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonobi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonobi.z new file mode 100755 index 00000000..08c6170b Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonobi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonoi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonoi.ctg.z new file mode 100755 index 00000000..7b8bc17d Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonoi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonoi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonoi.php new file mode 100755 index 00000000..43ff6a8d --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonoi.php @@ -0,0 +1,262 @@ +928,'Descent'=>-236,'CapHeight'=>-62,'Flags'=>97,'FontBBox'=>'[-406 -375 746 1028]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>602); +$up=-63; +$ut=44; +$dw=602; +$cw=array( +0=>602,32=>602,33=>602,34=>602,35=>602,36=>602,37=>602,38=>602,39=>602,40=>602, +41=>602,42=>602,43=>602,44=>602,45=>602,46=>602,47=>602,48=>602,49=>602,50=>602, +51=>602,52=>602,53=>602,54=>602,55=>602,56=>602,57=>602,58=>602,59=>602,60=>602, +61=>602,62=>602,63=>602,64=>602,65=>602,66=>602,67=>602,68=>602,69=>602,70=>602, +71=>602,72=>602,73=>602,74=>602,75=>602,76=>602,77=>602,78=>602,79=>602,80=>602, +81=>602,82=>602,83=>602,84=>602,85=>602,86=>602,87=>602,88=>602,89=>602,90=>602, +91=>602,92=>602,93=>602,94=>602,95=>602,96=>602,97=>602,98=>602,99=>602,100=>602, +101=>602,102=>602,103=>602,104=>602,105=>602,106=>602,107=>602,108=>602,109=>602,110=>602, +111=>602,112=>602,113=>602,114=>602,115=>602,116=>602,117=>602,118=>602,119=>602,120=>602, +121=>602,122=>602,123=>602,124=>602,125=>602,126=>602,8364=>602,8218=>602,402=>602,8222=>602, +8230=>602,8224=>602,8225=>602,710=>602,8240=>602,352=>602,8249=>602,338=>602,381=>602,8216=>602, +8217=>602,8220=>602,8221=>602,8226=>602,8211=>602,8212=>602,732=>602,8482=>602,353=>602,8250=>602, +339=>602,382=>602,376=>602,160=>602,161=>602,162=>602,163=>602,164=>602,165=>602,166=>602, +167=>602,168=>602,169=>602,170=>602,171=>602,172=>602,173=>602,174=>602,175=>602,176=>602, +177=>602,178=>602,179=>602,180=>602,181=>602,182=>602,183=>602,184=>602,185=>602,186=>602, +187=>602,188=>602,189=>602,190=>602,191=>602,192=>602,193=>602,194=>602,195=>602,196=>602, +197=>602,198=>602,199=>602,200=>602,201=>602,202=>602,203=>602,204=>602,205=>602,206=>602, +207=>602,208=>602,209=>602,210=>602,211=>602,212=>602,213=>602,214=>602,215=>602,216=>602, +217=>602,218=>602,219=>602,220=>602,221=>602,222=>602,223=>602,224=>602,225=>602,226=>602, +227=>602,228=>602,229=>602,230=>602,231=>602,232=>602,233=>602,234=>602,235=>602,236=>602, +237=>602,238=>602,239=>602,240=>602,241=>602,242=>602,243=>602,244=>602,245=>602,246=>602, +247=>602,248=>602,249=>602,250=>602,251=>602,252=>602,253=>602,254=>602,255=>602,256=>602, +257=>602,258=>602,259=>602,260=>602,261=>602,262=>602,263=>602,264=>602,265=>602,266=>602, +267=>602,268=>602,269=>602,270=>602,271=>602,272=>602,273=>602,274=>602,275=>602,276=>602, +277=>602,278=>602,279=>602,280=>602,281=>602,282=>602,283=>602,284=>602,285=>602,286=>602, +287=>602,288=>602,289=>602,290=>602,291=>602,292=>602,293=>602,294=>602,295=>602,296=>602, +297=>602,298=>602,299=>602,300=>602,301=>602,302=>602,303=>602,304=>602,305=>602,306=>602, +307=>602,308=>602,309=>602,310=>602,311=>602,312=>602,313=>602,314=>602,315=>602,316=>602, +317=>602,318=>602,319=>602,320=>602,321=>602,322=>602,323=>602,324=>602,325=>602,326=>602, +327=>602,328=>602,329=>602,330=>602,331=>602,332=>602,333=>602,334=>602,335=>602,336=>602, +337=>602,340=>602,341=>602,342=>602,343=>602,344=>602,345=>602,346=>602,347=>602,348=>602, +349=>602,350=>602,351=>602,354=>602,355=>602,356=>602,357=>602,358=>602,359=>602,360=>602, +361=>602,362=>602,363=>602,364=>602,365=>602,366=>602,367=>602,368=>602,369=>602,370=>602, +371=>602,372=>602,373=>602,374=>602,375=>602,377=>602,378=>602,379=>602,380=>602,383=>602, +384=>602,385=>602,386=>602,387=>602,388=>602,389=>602,390=>602,391=>602,392=>602,393=>602, +394=>602,395=>602,396=>602,397=>602,398=>602,399=>602,400=>602,401=>602,403=>602,404=>602, +405=>602,406=>602,407=>602,408=>602,409=>602,410=>602,411=>602,412=>602,413=>602,414=>602, +415=>602,416=>602,417=>602,418=>602,419=>602,420=>602,421=>602,422=>602,423=>602,424=>602, +425=>602,426=>602,427=>602,428=>602,429=>602,430=>602,431=>602,432=>602,433=>602,434=>602, +435=>602,436=>602,437=>602,438=>602,439=>602,440=>602,441=>602,442=>602,443=>602,444=>602, +445=>602,446=>602,447=>602,448=>602,449=>602,450=>602,451=>602,461=>602,462=>602,463=>602, +464=>602,465=>602,466=>602,467=>602,468=>602,469=>602,470=>602,471=>602,472=>602,473=>602, +474=>602,475=>602,476=>602,477=>602,479=>602,480=>602,481=>602,482=>602,483=>602,486=>602, +487=>602,488=>602,489=>602,490=>602,491=>602,492=>602,493=>602,494=>602,495=>602,500=>602, +501=>602,502=>602,504=>602,505=>602,508=>602,509=>602,510=>602,511=>602,512=>602,513=>602, +514=>602,515=>602,516=>602,517=>602,518=>602,519=>602,520=>602,521=>602,522=>602,523=>602, +524=>602,525=>602,526=>602,527=>602,528=>602,529=>602,530=>602,531=>602,532=>602,533=>602, +534=>602,535=>602,536=>602,537=>602,538=>602,539=>602,540=>602,541=>602,542=>602,543=>602, +545=>602,548=>602,549=>602,550=>602,551=>602,552=>602,553=>602,554=>602,555=>602,556=>602, +557=>602,558=>602,559=>602,560=>602,561=>602,562=>602,563=>602,564=>602,565=>602,566=>602, +567=>602,568=>602,569=>602,570=>602,571=>602,572=>602,573=>602,574=>602,575=>602,576=>602, +577=>602,580=>602,581=>602,588=>602,589=>602,592=>602,593=>602,594=>602,595=>602,596=>602, +597=>602,598=>602,599=>602,600=>602,601=>602,602=>602,603=>602,604=>602,605=>602,606=>602, +607=>602,608=>602,609=>602,610=>602,611=>602,612=>602,613=>602,614=>602,615=>602,616=>602, +617=>602,618=>602,619=>602,620=>602,621=>602,622=>602,623=>602,624=>602,625=>602,626=>602, +627=>602,628=>602,629=>602,630=>602,631=>602,632=>602,633=>602,634=>602,635=>602,636=>602, +637=>602,638=>602,639=>602,640=>602,641=>602,642=>602,643=>602,644=>602,645=>602,646=>602, +647=>602,648=>602,649=>602,650=>602,651=>602,652=>602,653=>602,654=>602,655=>602,656=>602, +657=>602,658=>602,659=>602,660=>602,661=>602,662=>602,663=>602,664=>602,665=>602,666=>602, +667=>602,668=>602,669=>602,670=>602,671=>602,672=>602,673=>602,674=>602,675=>602,676=>602, +677=>602,678=>602,679=>602,680=>602,681=>602,682=>602,683=>602,684=>602,685=>602,686=>602, +687=>602,688=>602,689=>602,690=>602,691=>602,692=>602,693=>602,694=>602,695=>602,696=>602, +697=>602,699=>602,700=>602,701=>602,702=>602,703=>602,704=>602,705=>602,711=>602,712=>602, +713=>602,716=>602,717=>602,720=>602,721=>602,722=>602,723=>602,726=>602,727=>602,728=>602, +729=>602,730=>602,731=>602,733=>602,734=>602,736=>602,737=>602,738=>602,739=>602,740=>602, +741=>602,742=>602,743=>602,744=>602,745=>602,750=>602,755=>602,768=>602,769=>602,770=>602, +771=>602,772=>602,773=>602,774=>602,775=>602,776=>602,777=>602,778=>602,779=>602,780=>602, +781=>602,782=>602,783=>602,784=>602,785=>602,786=>602,787=>602,788=>602,789=>602,790=>602, +791=>602,792=>602,793=>602,794=>602,795=>602,796=>602,797=>602,798=>602,799=>602,800=>602, +801=>602,802=>602,803=>602,804=>602,805=>602,806=>602,807=>602,808=>602,809=>602,810=>602, +811=>602,812=>602,813=>602,814=>602,815=>602,816=>602,817=>602,818=>602,819=>602,820=>602, +821=>602,822=>602,823=>602,824=>602,825=>602,826=>602,827=>602,828=>602,829=>602,830=>602, +831=>602,835=>602,856=>602,865=>602,884=>602,885=>602,890=>602,894=>602,900=>602,901=>602, +902=>602,903=>602,904=>602,905=>602,906=>602,908=>602,910=>602,911=>602,912=>602,913=>602, +914=>602,915=>602,916=>602,917=>602,918=>602,919=>602,920=>602,921=>602,922=>602,923=>602, +924=>602,925=>602,926=>602,927=>602,928=>602,929=>602,931=>602,932=>602,933=>602,934=>602, +935=>602,936=>602,937=>602,938=>602,939=>602,940=>602,941=>602,942=>602,943=>602,944=>602, +945=>602,946=>602,947=>602,948=>602,949=>602,950=>602,951=>602,952=>602,953=>602,954=>602, +955=>602,956=>602,957=>602,958=>602,959=>602,960=>602,961=>602,962=>602,963=>602,964=>602, +965=>602,966=>602,967=>602,968=>602,969=>602,970=>602,971=>602,972=>602,973=>602,974=>602, +976=>602,977=>602,978=>602,979=>602,980=>602,981=>602,982=>602,983=>602,984=>602,985=>602, +986=>602,987=>602,988=>602,989=>602,990=>602,991=>602,992=>602,993=>602,1008=>602,1009=>602, +1010=>602,1011=>602,1012=>602,1013=>602,1014=>602,1015=>602,1016=>602,1017=>602,1018=>602,1019=>602, +1020=>602,1021=>602,1022=>602,1023=>602,1024=>602,1025=>602,1026=>602,1027=>602,1028=>602,1029=>602, +1030=>602,1031=>602,1032=>602,1033=>602,1034=>602,1035=>602,1036=>602,1037=>602,1038=>602,1039=>602, +1040=>602,1041=>602,1042=>602,1043=>602,1044=>602,1045=>602,1046=>602,1047=>602,1048=>602,1049=>602, +1050=>602,1051=>602,1052=>602,1053=>602,1054=>602,1055=>602,1056=>602,1057=>602,1058=>602,1059=>602, +1060=>602,1061=>602,1062=>602,1063=>602,1064=>602,1065=>602,1066=>602,1067=>602,1068=>602,1069=>602, +1070=>602,1071=>602,1072=>602,1073=>602,1074=>602,1075=>602,1076=>602,1077=>602,1078=>602,1079=>602, +1080=>602,1081=>602,1082=>602,1083=>602,1084=>602,1085=>602,1086=>602,1087=>602,1088=>602,1089=>602, +1090=>602,1091=>602,1092=>602,1093=>602,1094=>602,1095=>602,1096=>602,1097=>602,1098=>602,1099=>602, +1100=>602,1101=>602,1102=>602,1103=>602,1104=>602,1105=>602,1106=>602,1107=>602,1108=>602,1109=>602, +1110=>602,1111=>602,1112=>602,1113=>602,1114=>602,1115=>602,1116=>602,1117=>602,1118=>602,1119=>602, +1122=>602,1123=>602,1138=>602,1139=>602,1168=>602,1169=>602,1170=>602,1171=>602,1172=>602,1173=>602, +1174=>602,1175=>602,1176=>602,1177=>602,1178=>602,1179=>602,1186=>602,1187=>602,1194=>602,1195=>602, +1196=>602,1197=>602,1198=>602,1199=>602,1200=>602,1201=>602,1202=>602,1203=>602,1210=>602,1211=>602, +1216=>602,1217=>602,1218=>602,1219=>602,1220=>602,1223=>602,1224=>602,1227=>602,1228=>602,1231=>602, +1232=>602,1233=>602,1234=>602,1235=>602,1236=>602,1237=>602,1238=>602,1239=>602,1240=>602,1241=>602, +1242=>602,1243=>602,1244=>602,1245=>602,1246=>602,1247=>602,1248=>602,1249=>602,1250=>602,1251=>602, +1252=>602,1253=>602,1254=>602,1255=>602,1256=>602,1257=>602,1258=>602,1259=>602,1260=>602,1261=>602, +1262=>602,1263=>602,1264=>602,1265=>602,1266=>602,1267=>602,1268=>602,1269=>602,1270=>602,1271=>602, +1272=>602,1273=>602,1296=>602,1297=>602,1306=>602,1307=>602,1308=>602,1309=>602,3713=>602,3714=>602, +3716=>602,3719=>602,3720=>602,3722=>602,3725=>602,3732=>602,3733=>602,3734=>602,3735=>602,3737=>602, +3738=>602,3739=>602,3740=>602,3741=>602,3742=>602,3743=>602,3745=>602,3746=>602,3747=>602,3749=>602, +3751=>602,3754=>602,3755=>602,3757=>602,3758=>602,3759=>602,3760=>602,3761=>602,3762=>602,3763=>602, +3764=>602,3765=>602,3766=>602,3767=>602,3768=>602,3769=>602,3771=>602,3772=>602,3784=>602,3785=>602, +3786=>602,3787=>602,3788=>602,3789=>602,4304=>602,4305=>602,4306=>602,4307=>602,4308=>602,4309=>602, +4310=>602,4311=>602,4312=>602,4313=>602,4314=>602,4315=>602,4316=>602,4317=>602,4318=>602,4319=>602, +4320=>602,4321=>602,4322=>602,4323=>602,4324=>602,4325=>602,4326=>602,4327=>602,4328=>602,4329=>602, +4330=>602,4331=>602,4332=>602,4333=>602,4334=>602,4335=>602,4336=>602,4337=>602,4338=>602,4339=>602, +4340=>602,4341=>602,4342=>602,4343=>602,4344=>602,4345=>602,4346=>602,4347=>602,4348=>602,7426=>602, +7432=>602,7433=>602,7444=>602,7446=>602,7447=>602,7453=>602,7454=>602,7455=>602,7468=>602,7469=>602, +7470=>602,7472=>602,7473=>602,7474=>602,7475=>602,7476=>602,7477=>602,7478=>602,7479=>602,7480=>602, +7481=>602,7482=>602,7483=>602,7484=>602,7485=>602,7486=>602,7487=>602,7488=>602,7489=>602,7490=>602, +7491=>602,7492=>602,7493=>602,7494=>602,7495=>602,7496=>602,7497=>602,7498=>602,7499=>602,7500=>602, +7501=>602,7502=>602,7503=>602,7504=>602,7505=>602,7506=>602,7507=>602,7508=>602,7509=>602,7510=>602, +7511=>602,7512=>602,7513=>602,7514=>602,7515=>602,7522=>602,7523=>602,7524=>602,7525=>602,7543=>602, +7544=>602,7547=>602,7557=>602,7579=>602,7580=>602,7581=>602,7582=>602,7583=>602,7584=>602,7585=>602, +7586=>602,7587=>602,7588=>602,7589=>602,7590=>602,7591=>602,7592=>602,7593=>602,7594=>602,7595=>602, +7596=>602,7597=>602,7598=>602,7599=>602,7600=>602,7601=>602,7602=>602,7603=>602,7604=>602,7605=>602, +7606=>602,7607=>602,7609=>602,7610=>602,7611=>602,7612=>602,7613=>602,7614=>602,7615=>602,7680=>602, +7681=>602,7682=>602,7683=>602,7684=>602,7685=>602,7686=>602,7687=>602,7688=>602,7689=>602,7690=>602, +7691=>602,7692=>602,7693=>602,7694=>602,7695=>602,7696=>602,7697=>602,7698=>602,7699=>602,7704=>602, +7705=>602,7706=>602,7707=>602,7708=>602,7709=>602,7710=>602,7711=>602,7712=>602,7713=>602,7714=>602, +7715=>602,7716=>602,7717=>602,7718=>602,7719=>602,7720=>602,7721=>602,7722=>602,7723=>602,7724=>602, +7725=>602,7728=>602,7729=>602,7730=>602,7731=>602,7732=>602,7733=>602,7734=>602,7735=>602,7736=>602, +7737=>602,7738=>602,7739=>602,7740=>602,7741=>602,7742=>602,7743=>602,7744=>602,7745=>602,7746=>602, +7747=>602,7748=>602,7749=>602,7750=>602,7751=>602,7752=>602,7753=>602,7754=>602,7755=>602,7756=>602, +7757=>602,7764=>602,7765=>602,7766=>602,7767=>602,7768=>602,7769=>602,7770=>602,7771=>602,7772=>602, +7773=>602,7774=>602,7775=>602,7776=>602,7777=>602,7778=>602,7779=>602,7784=>602,7785=>602,7786=>602, +7787=>602,7788=>602,7789=>602,7790=>602,7791=>602,7792=>602,7793=>602,7794=>602,7795=>602,7796=>602, +7797=>602,7798=>602,7799=>602,7800=>602,7801=>602,7804=>602,7805=>602,7806=>602,7807=>602,7808=>602, +7809=>602,7810=>602,7811=>602,7812=>602,7813=>602,7814=>602,7815=>602,7816=>602,7817=>602,7818=>602, +7819=>602,7820=>602,7821=>602,7822=>602,7823=>602,7824=>602,7825=>602,7826=>602,7827=>602,7828=>602, +7829=>602,7830=>602,7831=>602,7832=>602,7833=>602,7835=>602,7839=>602,7840=>602,7841=>602,7852=>602, +7853=>602,7856=>602,7857=>602,7862=>602,7863=>602,7864=>602,7865=>602,7868=>602,7869=>602,7878=>602, +7879=>602,7882=>602,7883=>602,7884=>602,7885=>602,7896=>602,7897=>602,7898=>602,7899=>602,7900=>602, +7901=>602,7904=>602,7905=>602,7906=>602,7907=>602,7908=>602,7909=>602,7912=>602,7913=>602,7914=>602, +7915=>602,7918=>602,7919=>602,7920=>602,7921=>602,7922=>602,7923=>602,7924=>602,7925=>602,7928=>602, +7929=>602,7936=>602,7937=>602,7938=>602,7939=>602,7940=>602,7941=>602,7942=>602,7943=>602,7944=>602, +7945=>602,7946=>602,7947=>602,7948=>602,7949=>602,7950=>602,7951=>602,7952=>602,7953=>602,7954=>602, +7955=>602,7956=>602,7957=>602,7960=>602,7961=>602,7962=>602,7963=>602,7964=>602,7965=>602,7968=>602, +7969=>602,7970=>602,7971=>602,7972=>602,7973=>602,7974=>602,7975=>602,7976=>602,7977=>602,7978=>602, +7979=>602,7980=>602,7981=>602,7982=>602,7983=>602,7984=>602,7985=>602,7986=>602,7987=>602,7988=>602, +7989=>602,7990=>602,7991=>602,7992=>602,7993=>602,7994=>602,7995=>602,7996=>602,7997=>602,7998=>602, +7999=>602,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602,8008=>602,8009=>602,8010=>602, +8011=>602,8012=>602,8013=>602,8016=>602,8017=>602,8018=>602,8019=>602,8020=>602,8021=>602,8022=>602, +8023=>602,8025=>602,8027=>602,8029=>602,8031=>602,8032=>602,8033=>602,8034=>602,8035=>602,8036=>602, +8037=>602,8038=>602,8039=>602,8040=>602,8041=>602,8042=>602,8043=>602,8044=>602,8045=>602,8046=>602, +8047=>602,8048=>602,8049=>602,8050=>602,8051=>602,8052=>602,8053=>602,8054=>602,8055=>602,8056=>602, +8057=>602,8058=>602,8059=>602,8060=>602,8061=>602,8064=>602,8065=>602,8066=>602,8067=>602,8068=>602, +8069=>602,8070=>602,8071=>602,8072=>602,8073=>602,8074=>602,8075=>602,8076=>602,8077=>602,8078=>602, +8079=>602,8080=>602,8081=>602,8082=>602,8083=>602,8084=>602,8085=>602,8086=>602,8087=>602,8088=>602, +8089=>602,8090=>602,8091=>602,8092=>602,8093=>602,8094=>602,8095=>602,8096=>602,8097=>602,8098=>602, +8099=>602,8100=>602,8101=>602,8102=>602,8103=>602,8104=>602,8105=>602,8106=>602,8107=>602,8108=>602, +8109=>602,8110=>602,8111=>602,8112=>602,8113=>602,8114=>602,8115=>602,8116=>602,8118=>602,8119=>602, +8120=>602,8121=>602,8122=>602,8123=>602,8124=>602,8125=>602,8126=>602,8127=>602,8128=>602,8129=>602, +8130=>602,8131=>602,8132=>602,8134=>602,8135=>602,8136=>602,8137=>602,8138=>602,8139=>602,8140=>602, +8141=>602,8142=>602,8143=>602,8144=>602,8145=>602,8146=>602,8147=>602,8150=>602,8151=>602,8152=>602, +8153=>602,8154=>602,8155=>602,8157=>602,8158=>602,8159=>602,8160=>602,8161=>602,8162=>602,8163=>602, +8164=>602,8165=>602,8166=>602,8167=>602,8168=>602,8169=>602,8170=>602,8171=>602,8172=>602,8173=>602, +8174=>602,8175=>602,8178=>602,8179=>602,8180=>602,8182=>602,8183=>602,8184=>602,8185=>602,8186=>602, +8187=>602,8188=>602,8189=>602,8190=>602,8192=>602,8193=>602,8194=>602,8195=>602,8196=>602,8197=>602, +8198=>602,8199=>602,8200=>602,8201=>602,8202=>602,8208=>602,8209=>602,8210=>602,8213=>602,8215=>602, +8219=>602,8223=>602,8227=>602,8239=>602,8241=>602,8242=>602,8243=>602,8244=>602,8245=>602,8246=>602, +8247=>602,8252=>602,8253=>602,8254=>602,8261=>602,8262=>602,8263=>602,8264=>602,8265=>602,8287=>602, +8304=>602,8305=>602,8308=>602,8309=>602,8310=>602,8311=>602,8312=>602,8313=>602,8314=>602,8315=>602, +8316=>602,8317=>602,8318=>602,8319=>602,8320=>602,8321=>602,8322=>602,8323=>602,8324=>602,8325=>602, +8326=>602,8327=>602,8328=>602,8329=>602,8330=>602,8331=>602,8332=>602,8333=>602,8334=>602,8336=>602, +8337=>602,8338=>602,8339=>602,8340=>602,8352=>602,8353=>602,8354=>602,8355=>602,8356=>602,8357=>602, +8358=>602,8359=>602,8360=>602,8361=>602,8362=>602,8363=>602,8365=>602,8366=>602,8367=>602,8368=>602, +8369=>602,8370=>602,8371=>602,8372=>602,8373=>602,8450=>602,8453=>602,8461=>602,8462=>602,8463=>602, +8469=>602,8470=>602,8471=>602,8473=>602,8474=>602,8477=>602,8484=>602,8486=>602,8490=>602,8491=>602, +8494=>602,8531=>602,8532=>602,8533=>602,8534=>602,8535=>602,8536=>602,8537=>602,8538=>602,8539=>602, +8540=>602,8541=>602,8542=>602,8543=>602,8592=>602,8593=>602,8594=>602,8595=>602,8596=>602,8597=>602, +8598=>602,8599=>602,8600=>602,8601=>602,8602=>602,8603=>602,8604=>602,8605=>602,8606=>602,8607=>602, +8608=>602,8609=>602,8610=>602,8611=>602,8612=>602,8613=>602,8614=>602,8615=>602,8616=>602,8617=>602, +8618=>602,8619=>602,8620=>602,8621=>602,8622=>602,8623=>602,8624=>602,8625=>602,8626=>602,8627=>602, +8628=>602,8629=>602,8630=>602,8631=>602,8632=>602,8633=>602,8634=>602,8635=>602,8636=>602,8637=>602, +8638=>602,8639=>602,8640=>602,8641=>602,8642=>602,8643=>602,8644=>602,8645=>602,8646=>602,8647=>602, +8648=>602,8649=>602,8650=>602,8651=>602,8652=>602,8653=>602,8654=>602,8655=>602,8656=>602,8657=>602, +8658=>602,8659=>602,8660=>602,8661=>602,8662=>602,8663=>602,8664=>602,8665=>602,8666=>602,8667=>602, +8668=>602,8669=>602,8670=>602,8671=>602,8672=>602,8673=>602,8674=>602,8675=>602,8676=>602,8677=>602, +8678=>602,8679=>602,8680=>602,8681=>602,8682=>602,8683=>602,8684=>602,8685=>602,8686=>602,8687=>602, +8688=>602,8689=>602,8690=>602,8691=>602,8692=>602,8693=>602,8694=>602,8695=>602,8696=>602,8697=>602, +8698=>602,8699=>602,8700=>602,8701=>602,8702=>602,8703=>602,8704=>602,8705=>602,8706=>602,8707=>602, +8708=>602,8709=>602,8710=>602,8711=>602,8712=>602,8713=>602,8714=>602,8715=>602,8716=>602,8717=>602, +8719=>602,8721=>602,8722=>602,8723=>602,8725=>602,8727=>602,8728=>602,8729=>602,8730=>602,8731=>602, +8732=>602,8733=>602,8734=>602,8735=>602,8736=>602,8743=>602,8744=>602,8745=>602,8746=>602,8747=>602, +8748=>602,8749=>602,8760=>602,8761=>602,8762=>602,8763=>602,8764=>602,8765=>602,8769=>602,8770=>602, +8771=>602,8772=>602,8773=>602,8774=>602,8775=>602,8776=>602,8777=>602,8778=>602,8779=>602,8780=>602, +8781=>602,8782=>602,8783=>602,8784=>602,8785=>602,8786=>602,8787=>602,8788=>602,8789=>602,8790=>602, +8791=>602,8792=>602,8793=>602,8794=>602,8795=>602,8796=>602,8797=>602,8798=>602,8799=>602,8800=>602, +8801=>602,8802=>602,8803=>602,8804=>602,8805=>602,8806=>602,8807=>602,8808=>602,8809=>602,8813=>602, +8814=>602,8815=>602,8816=>602,8817=>602,8818=>602,8819=>602,8820=>602,8821=>602,8822=>602,8823=>602, +8824=>602,8825=>602,8826=>602,8827=>602,8828=>602,8829=>602,8830=>602,8831=>602,8832=>602,8833=>602, +8834=>602,8835=>602,8836=>602,8837=>602,8838=>602,8839=>602,8840=>602,8841=>602,8842=>602,8843=>602, +8847=>602,8848=>602,8849=>602,8850=>602,8853=>602,8854=>602,8855=>602,8856=>602,8857=>602,8858=>602, +8859=>602,8860=>602,8861=>602,8862=>602,8863=>602,8864=>602,8865=>602,8901=>602,8902=>602,8909=>602, +8922=>602,8923=>602,8924=>602,8925=>602,8926=>602,8927=>602,8928=>602,8929=>602,8930=>602,8931=>602, +8932=>602,8933=>602,8934=>602,8935=>602,8936=>602,8937=>602,8943=>602,8960=>602,8961=>602,8962=>602, +8963=>602,8964=>602,8965=>602,8966=>602,8968=>602,8969=>602,8970=>602,8971=>602,8972=>602,8973=>602, +8974=>602,8975=>602,8976=>602,8977=>602,8978=>602,8979=>602,8980=>602,8981=>602,8984=>602,8985=>602, +8988=>602,8989=>602,8990=>602,8991=>602,8992=>602,8993=>602,8997=>602,8998=>602,8999=>602,9000=>602, +9003=>602,9013=>602,9015=>602,9016=>602,9017=>602,9018=>602,9019=>602,9020=>602,9021=>602,9022=>602, +9025=>602,9026=>602,9027=>602,9028=>602,9031=>602,9032=>602,9033=>602,9035=>602,9036=>602,9037=>602, +9040=>602,9042=>602,9043=>602,9044=>602,9047=>602,9048=>602,9049=>602,9050=>602,9051=>602,9052=>602, +9054=>602,9055=>602,9056=>602,9059=>602,9060=>602,9061=>602,9064=>602,9065=>602,9067=>602,9068=>602, +9069=>602,9070=>602,9071=>602,9072=>602,9075=>602,9076=>602,9077=>602,9078=>602,9079=>602,9080=>602, +9081=>602,9082=>602,9085=>602,9088=>602,9089=>602,9090=>602,9091=>602,9096=>602,9097=>602,9098=>602, +9099=>602,9109=>602,9115=>602,9116=>602,9117=>602,9118=>602,9119=>602,9120=>602,9121=>602,9122=>602, +9123=>602,9124=>602,9125=>602,9126=>602,9127=>602,9128=>602,9129=>602,9130=>602,9131=>602,9132=>602, +9133=>602,9134=>602,9166=>602,9167=>602,9251=>602,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602, +9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602, +9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602, +9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602, +9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602, +9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602, +9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602, +9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602, +9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602, +9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602, +9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602, +9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602, +9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602, +9597=>602,9598=>602,9599=>602,9600=>602,9601=>602,9602=>602,9603=>602,9604=>602,9605=>602,9606=>602, +9607=>602,9608=>602,9609=>602,9610=>602,9611=>602,9612=>602,9613=>602,9614=>602,9615=>602,9616=>602, +9617=>602,9618=>602,9619=>602,9620=>602,9621=>602,9622=>602,9623=>602,9624=>602,9625=>602,9626=>602, +9627=>602,9628=>602,9629=>602,9630=>602,9631=>602,9632=>602,9633=>602,9634=>602,9635=>602,9636=>602, +9637=>602,9638=>602,9639=>602,9640=>602,9641=>602,9642=>602,9643=>602,9644=>602,9645=>602,9646=>602, +9647=>602,9648=>602,9649=>602,9650=>602,9651=>602,9652=>602,9653=>602,9654=>602,9655=>602,9656=>602, +9657=>602,9658=>602,9659=>602,9660=>602,9661=>602,9662=>602,9663=>602,9664=>602,9665=>602,9666=>602, +9667=>602,9668=>602,9669=>602,9670=>602,9671=>602,9672=>602,9673=>602,9674=>602,9675=>602,9676=>602, +9677=>602,9678=>602,9679=>602,9680=>602,9681=>602,9682=>602,9683=>602,9684=>602,9685=>602,9686=>602, +9687=>602,9688=>602,9689=>602,9690=>602,9691=>602,9692=>602,9693=>602,9694=>602,9695=>602,9696=>602, +9697=>602,9698=>602,9699=>602,9700=>602,9701=>602,9702=>602,9703=>602,9704=>602,9705=>602,9706=>602, +9707=>602,9708=>602,9709=>602,9710=>602,9711=>602,9712=>602,9713=>602,9714=>602,9715=>602,9716=>602, +9717=>602,9718=>602,9719=>602,9720=>602,9721=>602,9722=>602,9723=>602,9724=>602,9725=>602,9726=>602, +9727=>602,9728=>602,9784=>602,9785=>602,9786=>602,9787=>602,9788=>602,9791=>602,9792=>602,9793=>602, +9794=>602,9795=>602,9796=>602,9797=>602,9798=>602,9799=>602,9824=>602,9825=>602,9826=>602,9827=>602, +9828=>602,9829=>602,9830=>602,9831=>602,9833=>602,9834=>602,9835=>602,9836=>602,9837=>602,9838=>602, +9839=>602,10181=>602,10182=>602,10208=>602,10216=>602,10217=>602,10731=>602,10746=>602,10747=>602,10799=>602, +11026=>602,11027=>602,11028=>602,11029=>602,11030=>602,11031=>602,11032=>602,11033=>602,11034=>602,11364=>602, +11374=>602,11375=>602,11381=>602,11382=>602,11383=>602,11385=>602,11386=>602,11388=>602,11389=>602,11800=>602, +11810=>602,11811=>602,11812=>602,11813=>602,11822=>602,42760=>602,42761=>602,42762=>602,42763=>602,42764=>602, +42765=>602,42766=>602,42767=>602,42768=>602,42769=>602,42770=>602,42771=>602,42772=>602,42773=>602,42774=>602, +42779=>602,42780=>602,42781=>602,42782=>602,42783=>602,42790=>602,42791=>602,42889=>602,42890=>602,42891=>602, +42892=>602,63173=>602,64257=>602,64258=>602,65529=>602,65530=>602,65531=>602,65532=>602,65533=>602); +$enc=''; +$diff=''; +$file='dejavusansmonoi.z'; +$ctg='dejavusansmonoi.ctg.z'; +$originalsize=229284; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonoi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonoi.z new file mode 100755 index 00000000..fab337c9 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavusansmonoi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserif.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserif.ctg.z new file mode 100755 index 00000000..6e01b837 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserif.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserif.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserif.php new file mode 100755 index 00000000..372e5041 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserif.php @@ -0,0 +1,313 @@ +928,'Descent'=>-236,'CapHeight'=>6,'Flags'=>32,'FontBBox'=>'[-770 -347 1679 1242]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>318,33=>402,34=>460,35=>838,36=>636,37=>950,38=>890,39=>275,40=>390, +41=>390,42=>500,43=>838,44=>318,45=>338,46=>318,47=>337,48=>636,49=>636,50=>636, +51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838, +61=>838,62=>838,63=>536,64=>1000,65=>722,66=>735,67=>765,68=>802,69=>730,70=>694, +71=>799,72=>872,73=>395,74=>401,75=>747,76=>664,77=>1024,78=>875,79=>820,80=>673, +81=>820,82=>753,83=>685,84=>667,85=>843,86=>722,87=>1028,88=>712,89=>660,90=>695, +91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>596,98=>640,99=>560,100=>640, +101=>592,102=>370,103=>640,104=>644,105=>320,106=>310,107=>606,108=>320,109=>948,110=>644, +111=>602,112=>640,113=>640,114=>478,115=>513,116=>402,117=>644,118=>565,119=>856,120=>564, +121=>565,122=>527,123=>636,124=>337,125=>636,126=>838,8364=>636,8218=>318,402=>370,8222=>518, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1342,352=>685,8249=>400,338=>1137,381=>695,8216=>318, +8217=>318,8220=>511,8221=>511,8226=>590,8211=>500,8212=>1000,732=>500,8482=>1000,353=>513,8250=>400, +339=>989,382=>527,376=>660,160=>318,161=>402,162=>636,163=>636,164=>636,165=>636,166=>337, +167=>500,168=>500,169=>1000,170=>475,171=>612,172=>838,173=>338,174=>1000,175=>500,176=>500, +177=>838,178=>401,179=>401,180=>500,181=>650,182=>636,183=>318,184=>500,185=>401,186=>470, +187=>612,188=>969,189=>969,190=>969,191=>536,192=>722,193=>722,194=>722,195=>722,196=>722, +197=>722,198=>1001,199=>765,200=>730,201=>730,202=>730,203=>730,204=>395,205=>395,206=>395, +207=>395,208=>807,209=>875,210=>820,211=>820,212=>820,213=>820,214=>820,215=>838,216=>820, +217=>843,218=>843,219=>843,220=>843,221=>660,222=>676,223=>668,224=>596,225=>596,226=>596, +227=>596,228=>596,229=>596,230=>940,231=>560,232=>592,233=>592,234=>592,235=>592,236=>320, +237=>320,238=>320,239=>320,240=>602,241=>644,242=>602,243=>602,244=>602,245=>602,246=>602, +247=>838,248=>602,249=>644,250=>644,251=>644,252=>644,253=>565,254=>640,255=>565,256=>722, +257=>596,258=>722,259=>596,260=>722,261=>596,262=>765,263=>560,264=>765,265=>560,266=>765, +267=>560,268=>765,269=>560,270=>802,271=>640,272=>807,273=>640,274=>730,275=>592,276=>730, +277=>592,278=>730,279=>592,280=>730,281=>592,282=>730,283=>592,284=>799,285=>640,286=>799, +287=>640,288=>799,289=>640,290=>799,291=>640,292=>872,293=>644,294=>872,295=>644,296=>395, +297=>320,298=>395,299=>320,300=>395,301=>320,302=>395,303=>320,304=>395,305=>320,306=>801, +307=>533,308=>401,309=>310,310=>747,311=>606,312=>606,313=>664,314=>320,315=>664,316=>320, +317=>664,318=>320,319=>664,320=>320,321=>669,322=>324,323=>875,324=>644,325=>875,326=>644, +327=>875,328=>644,329=>866,330=>843,331=>644,332=>820,333=>602,334=>820,335=>602,336=>820, +337=>602,340=>753,341=>478,342=>753,343=>478,344=>753,345=>478,346=>685,347=>513,348=>685, +349=>513,350=>685,351=>513,354=>667,355=>402,356=>667,357=>402,358=>667,359=>402,360=>843, +361=>644,362=>843,363=>644,364=>843,365=>644,366=>843,367=>644,368=>843,369=>644,370=>843, +371=>644,372=>1028,373=>856,374=>660,375=>565,377=>695,378=>527,379=>695,380=>527,383=>370, +384=>640,385=>735,386=>735,387=>640,388=>735,389=>640,390=>765,391=>765,392=>560,393=>807, +394=>802,395=>735,396=>640,397=>602,398=>730,399=>820,400=>623,401=>694,403=>799,404=>712, +405=>932,406=>395,407=>395,408=>747,409=>606,410=>320,411=>634,412=>948,413=>875,414=>644, +415=>820,416=>820,417=>602,418=>1040,419=>807,420=>673,421=>640,422=>753,423=>685,424=>513, +425=>707,426=>324,427=>402,428=>667,429=>402,430=>667,431=>843,432=>644,433=>829,434=>760, +435=>738,436=>663,437=>695,438=>527,439=>564,440=>564,441=>564,443=>636,444=>687,445=>564, +446=>536,448=>295,449=>492,450=>459,451=>295,452=>1497,453=>1329,454=>1167,455=>1065,456=>974, +457=>630,458=>1276,459=>1185,460=>954,461=>722,462=>596,463=>395,464=>320,465=>820,466=>602, +467=>843,468=>644,469=>843,470=>644,471=>843,472=>644,473=>843,474=>644,475=>843,476=>644, +477=>592,478=>722,479=>596,480=>722,481=>596,482=>1001,483=>940,484=>848,485=>640,486=>799, +487=>640,488=>747,489=>606,490=>820,491=>602,492=>820,493=>602,494=>564,495=>564,496=>320, +497=>1497,498=>1329,499=>1167,500=>799,501=>640,502=>1154,504=>875,505=>644,506=>722,507=>596, +508=>1001,509=>940,510=>820,511=>602,512=>722,513=>596,514=>722,515=>596,516=>730,517=>592, +518=>730,519=>592,520=>395,521=>320,522=>395,523=>320,524=>820,525=>602,526=>820,527=>602, +528=>753,529=>478,530=>753,531=>478,532=>843,533=>644,534=>843,535=>644,536=>685,537=>513, +538=>667,539=>402,540=>627,541=>521,542=>872,543=>644,544=>843,545=>814,548=>695,549=>527, +550=>722,551=>596,552=>730,553=>592,554=>820,555=>602,556=>820,557=>602,558=>820,559=>602, +560=>820,561=>602,562=>660,563=>565,564=>500,565=>832,566=>494,567=>310,568=>960,569=>960, +570=>722,571=>765,572=>560,573=>664,574=>667,575=>513,576=>527,577=>583,578=>464,581=>722, +592=>596,593=>640,594=>640,595=>640,596=>560,597=>560,598=>647,599=>683,600=>592,601=>592, +602=>843,603=>518,604=>509,605=>773,606=>613,607=>315,608=>683,609=>640,610=>544,611=>712, +612=>564,613=>644,614=>644,615=>644,616=>320,617=>392,618=>320,619=>380,620=>454,621=>363, +622=>704,623=>948,624=>948,625=>948,626=>644,627=>694,628=>646,629=>602,630=>790,631=>647, +632=>602,633=>501,634=>501,635=>551,636=>478,637=>478,638=>453,639=>453,640=>594,641=>594, +642=>513,643=>271,644=>370,645=>487,646=>324,647=>402,648=>402,649=>644,650=>620,651=>608, +652=>565,653=>856,654=>565,655=>655,656=>597,657=>560,658=>564,659=>560,660=>536,661=>536, +662=>536,663=>513,664=>820,665=>563,666=>613,667=>654,668=>667,669=>366,670=>606,671=>646, +672=>683,673=>536,674=>536,675=>996,676=>1033,677=>998,678=>809,679=>598,680=>782,681=>894, +682=>646,683=>676,684=>598,685=>443,686=>781,687=>767,688=>433,689=>430,690=>264,691=>347, +692=>347,693=>430,694=>392,695=>585,696=>423,697=>278,699=>318,700=>318,701=>318,702=>307, +703=>307,704=>280,705=>281,711=>500,712=>275,713=>500,716=>275,720=>337,721=>337,722=>307, +723=>307,726=>329,728=>500,729=>500,730=>500,731=>500,733=>500,734=>417,736=>447,737=>243, +738=>337,739=>424,740=>281,741=>493,742=>493,743=>493,744=>493,745=>493,750=>484,768=>0, +769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, +779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0, +789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0, +799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0, +809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0, +819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0, +829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,865=>0,880=>740,881=>531,884=>278, +885=>278,890=>500,891=>560,892=>560,893=>560,894=>337,900=>500,901=>500,902=>722,903=>318, +904=>900,905=>1039,906=>562,908=>835,910=>897,911=>853,912=>392,913=>722,914=>735,915=>694, +916=>722,917=>730,918=>695,919=>872,920=>820,921=>395,922=>747,923=>722,924=>1024,925=>875, +926=>704,927=>820,928=>872,929=>673,931=>707,932=>667,933=>660,934=>820,935=>712,936=>877, +937=>829,938=>395,939=>660,940=>675,941=>518,942=>599,943=>392,944=>608,945=>675,946=>578, +947=>598,948=>602,949=>518,950=>542,951=>599,952=>602,953=>392,954=>625,955=>634,956=>650, +957=>608,958=>551,959=>602,960=>657,961=>588,962=>560,963=>683,964=>553,965=>608,966=>700, +967=>606,968=>784,969=>815,970=>392,971=>608,972=>602,973=>608,974=>815,976=>583,977=>715, +978=>687,979=>874,980=>687,981=>682,982=>815,983=>624,984=>820,985=>602,986=>765,987=>560, +988=>694,989=>463,990=>590,991=>660,992=>782,993=>577,1008=>624,1009=>588,1010=>560,1011=>310, +1012=>820,1013=>560,1014=>560,1015=>676,1016=>640,1017=>765,1018=>1024,1019=>708,1020=>588,1021=>765, +1022=>765,1023=>765,1024=>730,1025=>730,1026=>799,1027=>662,1028=>765,1029=>685,1030=>395,1031=>395, +1032=>401,1033=>1084,1034=>1118,1035=>872,1036=>774,1037=>872,1038=>723,1039=>872,1040=>757,1041=>735, +1042=>735,1043=>662,1044=>813,1045=>730,1046=>1124,1047=>623,1048=>872,1049=>872,1050=>774,1051=>834, +1052=>1024,1053=>872,1054=>820,1055=>872,1056=>673,1057=>765,1058=>667,1059=>723,1060=>830,1061=>712, +1062=>872,1063=>773,1064=>1141,1065=>1141,1066=>794,1067=>984,1068=>674,1069=>765,1070=>1193,1071=>808, +1072=>596,1073=>602,1074=>563,1075=>524,1076=>616,1077=>592,1078=>920,1079=>545,1080=>667,1081=>667, +1082=>625,1083=>635,1084=>778,1085=>667,1086=>602,1087=>667,1088=>640,1089=>560,1090=>553,1091=>588, +1092=>783,1093=>564,1094=>643,1095=>661,1096=>930,1097=>930,1098=>636,1099=>796,1100=>544,1101=>560, +1102=>871,1103=>631,1104=>592,1105=>592,1106=>624,1107=>524,1108=>560,1109=>513,1110=>320,1111=>320, +1112=>310,1113=>843,1114=>860,1115=>644,1116=>625,1117=>667,1118=>588,1119=>656,1122=>762,1123=>603, +1124=>1129,1125=>834,1130=>1124,1131=>920,1136=>944,1137=>902,1138=>820,1139=>552,1140=>859,1141=>678, +1164=>707,1165=>544,1168=>672,1169=>529,1170=>662,1171=>523,1172=>728,1173=>614,1174=>1124,1175=>920, +1176=>636,1177=>537,1178=>774,1179=>606,1182=>774,1183=>625,1184=>891,1185=>717,1186=>872,1187=>641, +1188=>1139,1189=>852,1190=>1205,1191=>941,1194=>765,1195=>560,1196=>667,1197=>553,1198=>660,1199=>565, +1200=>660,1201=>565,1202=>712,1203=>564,1204=>952,1205=>732,1206=>749,1207=>690,1210=>749,1211=>644, +1216=>395,1217=>1124,1218=>920,1219=>747,1220=>606,1223=>872,1224=>667,1227=>749,1228=>667,1231=>320, +1232=>757,1233=>596,1234=>757,1235=>596,1236=>1001,1237=>940,1238=>730,1239=>592,1240=>820,1241=>592, +1242=>820,1243=>592,1244=>1124,1245=>920,1246=>623,1247=>545,1248=>564,1249=>564,1250=>872,1251=>667, +1252=>872,1253=>667,1254=>820,1255=>602,1256=>820,1257=>602,1258=>820,1259=>602,1260=>765,1261=>560, +1262=>723,1263=>588,1264=>723,1265=>588,1266=>723,1267=>588,1268=>773,1269=>661,1270=>662,1271=>524, +1272=>984,1273=>796,1296=>623,1297=>545,1298=>834,1299=>635,1300=>1198,1301=>919,1306=>820,1307=>640, +1308=>1028,1309=>856,4256=>723,4257=>850,4258=>828,4259=>859,4260=>733,4261=>981,4262=>916,4263=>1101, +4264=>566,4265=>750,4266=>962,4267=>941,4268=>743,4269=>1075,4270=>896,4271=>829,4272=>1040,4273=>733, +4274=>669,4275=>1015,4276=>937,4277=>1020,4278=>731,4279=>733,4280=>732,4281=>733,4282=>879,4283=>937, +4284=>714,4285=>755,4286=>733,4287=>958,4288=>1000,4289=>702,4290=>864,4291=>734,4292=>837,4293=>951, +4304=>541,4305=>571,4306=>589,4307=>833,4308=>561,4309=>557,4310=>618,4311=>861,4312=>560,4313=>546, +4314=>1066,4315=>586,4316=>586,4317=>825,4318=>570,4319=>581,4320=>824,4321=>607,4322=>748,4323=>698, +4324=>815,4325=>585,4326=>858,4327=>568,4328=>594,4329=>586,4330=>675,4331=>587,4332=>582,4333=>576, +4334=>612,4335=>683,4336=>572,4337=>603,4338=>571,4339=>572,4340=>570,4341=>649,4342=>886,4343=>626, +4344=>582,4345=>619,4346=>571,4347=>437,4348=>354,7426=>940,7432=>509,7433=>320,7444=>989,7446=>602, +7447=>602,7453=>737,7454=>948,7455=>948,7468=>455,7469=>630,7470=>463,7472=>505,7473=>459,7474=>459, +7475=>503,7476=>549,7477=>249,7478=>252,7479=>470,7480=>418,7481=>645,7482=>551,7483=>551,7484=>516, +7486=>424,7487=>474,7488=>420,7489=>531,7490=>647,7491=>386,7492=>386,7493=>400,7494=>618,7495=>400, +7496=>400,7497=>387,7498=>387,7499=>340,7500=>340,7501=>400,7502=>175,7503=>365,7504=>613,7505=>399, +7506=>385,7507=>346,7508=>385,7509=>385,7510=>400,7511=>247,7512=>399,7513=>464,7514=>613,7515=>373, +7522=>201,7523=>347,7524=>399,7525=>373,7543=>640,7544=>549,7547=>372,7557=>320,7579=>400,7580=>346, +7581=>346,7582=>385,7583=>340,7584=>222,7585=>229,7586=>400,7587=>399,7588=>234,7589=>244,7590=>234, +7591=>234,7592=>230,7593=>175,7594=>175,7595=>367,7596=>613,7597=>613,7598=>407,7599=>404,7600=>399, +7601=>385,7602=>385,7603=>328,7604=>211,7605=>247,7606=>399,7607=>389,7609=>376,7610=>373,7611=>331, +7612=>331,7613=>331,7614=>364,7615=>385,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0, +7680=>722,7681=>596,7682=>735,7683=>640,7684=>735,7685=>640,7686=>735,7687=>640,7688=>765,7689=>560, +7690=>802,7691=>640,7692=>802,7693=>640,7694=>802,7695=>640,7696=>802,7697=>640,7698=>802,7699=>640, +7700=>730,7701=>592,7702=>730,7703=>592,7704=>730,7705=>592,7706=>730,7707=>592,7708=>730,7709=>592, +7710=>694,7711=>370,7712=>799,7713=>640,7714=>872,7715=>644,7716=>872,7717=>644,7718=>872,7719=>644, +7720=>872,7721=>644,7722=>872,7723=>644,7724=>395,7725=>320,7728=>747,7729=>606,7730=>747,7731=>606, +7732=>747,7733=>606,7734=>664,7735=>320,7736=>664,7737=>320,7738=>664,7739=>320,7740=>664,7741=>320, +7742=>1024,7743=>948,7744=>1024,7745=>948,7746=>1024,7747=>948,7748=>875,7749=>644,7750=>875,7751=>644, +7752=>875,7753=>644,7754=>875,7755=>644,7756=>820,7757=>602,7760=>820,7761=>602,7762=>820,7763=>602, +7764=>673,7765=>640,7766=>673,7767=>640,7768=>753,7769=>478,7770=>753,7771=>478,7772=>753,7773=>478, +7774=>753,7775=>478,7776=>685,7777=>513,7778=>685,7779=>513,7784=>685,7785=>513,7786=>667,7787=>402, +7788=>667,7789=>402,7790=>667,7791=>402,7792=>667,7793=>402,7794=>843,7795=>644,7796=>843,7797=>644, +7798=>843,7799=>644,7800=>843,7801=>644,7802=>843,7803=>644,7804=>722,7805=>565,7806=>722,7807=>565, +7808=>1028,7809=>856,7810=>1028,7811=>856,7812=>1028,7813=>856,7814=>1028,7815=>856,7816=>1028,7817=>856, +7818=>712,7819=>564,7820=>712,7821=>564,7822=>660,7823=>565,7824=>695,7825=>527,7826=>695,7827=>527, +7828=>695,7829=>527,7830=>644,7831=>402,7832=>856,7833=>565,7834=>903,7835=>370,7838=>829,7839=>602, +7840=>722,7841=>596,7842=>722,7843=>596,7852=>722,7853=>596,7854=>722,7855=>596,7856=>722,7857=>596, +7858=>722,7859=>596,7860=>722,7861=>596,7862=>722,7863=>596,7864=>730,7865=>592,7866=>730,7867=>592, +7868=>730,7869=>592,7878=>730,7879=>592,7880=>395,7881=>320,7882=>395,7883=>320,7884=>820,7885=>602, +7886=>820,7887=>602,7896=>820,7897=>602,7908=>843,7909=>644,7910=>843,7911=>644,7922=>660,7923=>565, +7924=>660,7925=>565,7926=>660,7927=>565,7928=>660,7929=>565,7936=>675,7937=>675,7938=>675,7939=>675, +7940=>675,7941=>675,7942=>675,7943=>675,7944=>722,7945=>722,7946=>869,7947=>869,7948=>734,7949=>763, +7950=>722,7951=>722,7952=>537,7953=>537,7954=>537,7955=>537,7956=>537,7957=>537,7960=>853,7961=>841, +7962=>1067,7963=>1077,7964=>1008,7965=>1035,7968=>599,7969=>599,7970=>599,7971=>599,7972=>599,7973=>599, +7974=>599,7975=>599,7976=>998,7977=>992,7978=>1212,7979=>1224,7980=>1159,7981=>1183,7982=>1098,7983=>1095, +7984=>392,7985=>392,7986=>392,7987=>392,7988=>392,7989=>392,7990=>392,7991=>392,7992=>521,7993=>512, +7994=>735,7995=>738,7996=>679,7997=>706,7998=>624,7999=>615,8000=>602,8001=>602,8002=>602,8003=>602, +8004=>602,8005=>602,8008=>820,8009=>859,8010=>1120,8011=>1127,8012=>937,8013=>964,8016=>608,8017=>608, +8018=>608,8019=>608,8020=>608,8021=>608,8022=>608,8023=>608,8025=>851,8027=>1079,8029=>1044,8031=>953, +8032=>815,8033=>815,8034=>815,8035=>815,8036=>815,8037=>815,8038=>815,8039=>815,8040=>829,8041=>870, +8042=>1131,8043=>1137,8044=>946,8045=>976,8046=>938,8047=>970,8048=>675,8049=>675,8050=>537,8051=>537, +8052=>599,8053=>599,8054=>392,8055=>392,8056=>602,8057=>602,8058=>608,8059=>608,8060=>815,8061=>815, +8064=>675,8065=>675,8066=>675,8067=>675,8068=>675,8069=>675,8070=>675,8071=>675,8072=>722,8073=>722, +8074=>869,8075=>869,8076=>734,8077=>763,8078=>722,8079=>722,8080=>599,8081=>599,8082=>599,8083=>599, +8084=>599,8085=>599,8086=>599,8087=>599,8088=>998,8089=>992,8090=>1212,8091=>1224,8092=>1159,8093=>1183, +8094=>1098,8095=>1095,8096=>815,8097=>815,8098=>815,8099=>815,8100=>815,8101=>815,8102=>815,8103=>815, +8104=>829,8105=>870,8106=>1131,8107=>1137,8108=>946,8109=>976,8110=>938,8111=>970,8112=>675,8113=>675, +8114=>675,8115=>675,8116=>675,8118=>675,8119=>675,8120=>722,8121=>722,8122=>722,8123=>722,8124=>722, +8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>599,8131=>599,8132=>599,8134=>599,8135=>599, +8136=>912,8137=>900,8138=>1063,8139=>1039,8140=>872,8141=>500,8142=>500,8143=>500,8144=>392,8145=>392, +8146=>392,8147=>392,8150=>392,8151=>392,8152=>395,8153=>395,8154=>588,8155=>562,8157=>500,8158=>500, +8159=>500,8160=>608,8161=>608,8162=>608,8163=>608,8164=>588,8165=>588,8166=>608,8167=>608,8168=>660, +8169=>660,8170=>921,8171=>897,8172=>790,8173=>500,8174=>500,8175=>500,8178=>815,8179=>815,8180=>815, +8182=>815,8183=>815,8184=>961,8185=>835,8186=>984,8187=>853,8188=>829,8189=>500,8190=>500,8192=>500, +8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100, +8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>338,8209=>338,8210=>636,8213=>1000,8214=>500, +8215=>500,8219=>318,8223=>511,8227=>590,8228=>334,8229=>667,8234=>0,8235=>0,8236=>0,8237=>0, +8238=>0,8239=>200,8241=>1734,8242=>227,8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339, +8252=>527,8253=>536,8254=>500,8258=>1000,8260=>167,8261=>390,8262=>390,8263=>976,8264=>753,8265=>753, +8267=>636,8268=>500,8269=>500,8270=>500,8271=>337,8273=>500,8274=>450,8275=>1000,8279=>663,8287=>222, +8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0, +8303=>0,8304=>401,8305=>201,8308=>401,8309=>401,8310=>401,8311=>401,8312=>401,8313=>401,8314=>528, +8315=>528,8316=>528,8317=>246,8318=>246,8319=>433,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401, +8325=>401,8326=>401,8327=>401,8328=>401,8329=>401,8330=>528,8331=>528,8332=>528,8333=>246,8334=>246, +8336=>386,8337=>387,8338=>385,8339=>424,8340=>387,8358=>660,8367=>1057,8369=>706,8372=>780,8373=>636, +8450=>796,8451=>1119,8457=>1047,8461=>945,8462=>644,8463=>644,8469=>914,8470=>946,8473=>752,8474=>871, +8477=>831,8484=>730,8486=>829,8487=>829,8490=>747,8491=>722,8508=>732,8509=>660,8510=>710,8511=>944, +8512=>714,8513=>775,8514=>557,8515=>557,8516=>611,8517=>867,8518=>699,8519=>636,8520=>380,8521=>362, +8523=>890,8531=>969,8532=>969,8533=>969,8534=>969,8535=>969,8536=>969,8537=>969,8538=>969,8539=>969, +8540=>969,8541=>969,8542=>969,8543=>568,8544=>395,8545=>590,8546=>786,8547=>966,8548=>722,8549=>981, +8550=>1176,8551=>1372,8552=>932,8553=>712,8554=>932,8555=>1127,8556=>664,8557=>765,8558=>802,8559=>1024, +8560=>320,8561=>640,8562=>959,8563=>885,8564=>565,8565=>885,8566=>1205,8567=>1524,8568=>884,8569=>564, +8570=>884,8571=>1204,8572=>320,8573=>560,8574=>640,8575=>948,8576=>1206,8577=>802,8578=>1206,8579=>765, +8580=>560,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838, +8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838, +8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838, +8621=>838,8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838, +8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838, +8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838, +8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838, +8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838, +8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838, +8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838, +8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838, +8701=>838,8702=>838,8703=>838,8704=>604,8706=>517,8707=>542,8708=>542,8710=>698,8711=>698,8712=>740, +8713=>740,8715=>740,8716=>740,8719=>796,8720=>796,8721=>714,8722=>838,8723=>838,8724=>838,8725=>337, +8727=>680,8728=>490,8729=>490,8730=>637,8731=>637,8732=>637,8733=>677,8734=>833,8735=>838,8736=>838, +8739=>291,8740=>479,8741=>462,8742=>634,8743=>732,8744=>732,8745=>838,8746=>838,8747=>521,8748=>852, +8749=>1182,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8770=>838,8771=>838,8776=>838, +8784=>838,8785=>838,8786=>838,8787=>838,8788=>1033,8789=>1033,8800=>838,8801=>838,8804=>838,8805=>838, +8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8844=>838,8845=>838,8846=>838,8847=>846, +8848=>846,8849=>846,8850=>846,8851=>838,8852=>838,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838, +8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>860,8867=>860, +8868=>940,8869=>940,8870=>567,8871=>567,8872=>860,8873=>860,8874=>860,8875=>1031,8876=>860,8877=>860, +8878=>860,8879=>1031,8901=>342,8962=>764,8968=>390,8969=>390,8970=>390,8971=>390,8976=>838,8977=>513, +8984=>1000,8985=>838,8992=>521,8993=>521,8997=>1000,9000=>1443,9085=>919,9134=>521,9167=>945,9251=>764, +9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602, +9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602, +9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602, +9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602, +9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602, +9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602, +9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602, +9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602, +9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602, +9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602, +9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602, +9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602, +9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>769,9601=>769, +9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769, +9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769, +9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769, +9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945, +9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769, +9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769, +9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769, +9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873, +9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970, +9692=>387,9693=>387,9694=>387,9695=>387,9696=>873,9697=>873,9698=>769,9699=>769,9700=>769,9701=>769, +9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119, +9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769, +9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9784=>896,9785=>896,9786=>896, +9787=>896,9788=>896,9791=>614,9792=>731,9793=>731,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896, +9799=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9833=>472, +9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,10145=>838,10181=>390,10182=>390,10208=>494, +10216=>390,10217=>390,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1033,10229=>1434,10230=>1434,10231=>1434, +10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>732,10241=>732, +10242=>732,10243=>732,10244=>732,10245=>732,10246=>732,10247=>732,10248=>732,10249=>732,10250=>732,10251=>732, +10252=>732,10253=>732,10254=>732,10255=>732,10256=>732,10257=>732,10258=>732,10259=>732,10260=>732,10261=>732, +10262=>732,10263=>732,10264=>732,10265=>732,10266=>732,10267=>732,10268=>732,10269=>732,10270=>732,10271=>732, +10272=>732,10273=>732,10274=>732,10275=>732,10276=>732,10277=>732,10278=>732,10279=>732,10280=>732,10281=>732, +10282=>732,10283=>732,10284=>732,10285=>732,10286=>732,10287=>732,10288=>732,10289=>732,10290=>732,10291=>732, +10292=>732,10293=>732,10294=>732,10295=>732,10296=>732,10297=>732,10298=>732,10299=>732,10300=>732,10301=>732, +10302=>732,10303=>732,10304=>732,10305=>732,10306=>732,10307=>732,10308=>732,10309=>732,10310=>732,10311=>732, +10312=>732,10313=>732,10314=>732,10315=>732,10316=>732,10317=>732,10318=>732,10319=>732,10320=>732,10321=>732, +10322=>732,10323=>732,10324=>732,10325=>732,10326=>732,10327=>732,10328=>732,10329=>732,10330=>732,10331=>732, +10332=>732,10333=>732,10334=>732,10335=>732,10336=>732,10337=>732,10338=>732,10339=>732,10340=>732,10341=>732, +10342=>732,10343=>732,10344=>732,10345=>732,10346=>732,10347=>732,10348=>732,10349=>732,10350=>732,10351=>732, +10352=>732,10353=>732,10354=>732,10355=>732,10356=>732,10357=>732,10358=>732,10359=>732,10360=>732,10361=>732, +10362=>732,10363=>732,10364=>732,10365=>732,10366=>732,10367=>732,10368=>732,10369=>732,10370=>732,10371=>732, +10372=>732,10373=>732,10374=>732,10375=>732,10376=>732,10377=>732,10378=>732,10379=>732,10380=>732,10381=>732, +10382=>732,10383=>732,10384=>732,10385=>732,10386=>732,10387=>732,10388=>732,10389=>732,10390=>732,10391=>732, +10392=>732,10393=>732,10394=>732,10395=>732,10396=>732,10397=>732,10398=>732,10399=>732,10400=>732,10401=>732, +10402=>732,10403=>732,10404=>732,10405=>732,10406=>732,10407=>732,10408=>732,10409=>732,10410=>732,10411=>732, +10412=>732,10413=>732,10414=>732,10415=>732,10416=>732,10417=>732,10418=>732,10419=>732,10420=>732,10421=>732, +10422=>732,10423=>732,10424=>732,10425=>732,10426=>732,10427=>732,10428=>732,10429=>732,10430=>732,10431=>732, +10432=>732,10433=>732,10434=>732,10435=>732,10436=>732,10437=>732,10438=>732,10439=>732,10440=>732,10441=>732, +10442=>732,10443=>732,10444=>732,10445=>732,10446=>732,10447=>732,10448=>732,10449=>732,10450=>732,10451=>732, +10452=>732,10453=>732,10454=>732,10455=>732,10456=>732,10457=>732,10458=>732,10459=>732,10460=>732,10461=>732, +10462=>732,10463=>732,10464=>732,10465=>732,10466=>732,10467=>732,10468=>732,10469=>732,10470=>732,10471=>732, +10472=>732,10473=>732,10474=>732,10475=>732,10476=>732,10477=>732,10478=>732,10479=>732,10480=>732,10481=>732, +10482=>732,10483=>732,10484=>732,10485=>732,10486=>732,10487=>732,10488=>732,10489=>732,10490=>732,10491=>732, +10492=>732,10493=>732,10494=>732,10495=>732,10496=>838,10497=>838,10498=>838,10499=>838,10500=>838,10501=>838, +10502=>838,10503=>838,10504=>838,10505=>838,10506=>838,10507=>838,10508=>838,10509=>838,10510=>838,10511=>838, +10512=>838,10513=>838,10514=>838,10515=>838,10516=>838,10517=>838,10518=>838,10519=>838,10520=>838,10521=>838, +10522=>838,10523=>838,10524=>838,10525=>838,10526=>838,10527=>838,10528=>838,10529=>838,10530=>838,10531=>838, +10532=>838,10533=>838,10534=>838,10535=>838,10536=>838,10537=>838,10538=>838,10539=>838,10540=>838,10541=>838, +10542=>838,10543=>838,10544=>838,10545=>838,10546=>838,10547=>838,10548=>838,10549=>838,10550=>838,10551=>838, +10552=>838,10553=>838,10554=>838,10555=>838,10556=>838,10557=>838,10558=>838,10559=>838,10560=>838,10561=>838, +10562=>838,10563=>838,10564=>838,10565=>838,10566=>838,10567=>838,10568=>838,10569=>838,10570=>838,10571=>838, +10572=>838,10573=>838,10574=>838,10575=>838,10576=>838,10577=>838,10578=>838,10579=>838,10580=>838,10581=>838, +10582=>838,10583=>838,10584=>838,10585=>838,10586=>838,10587=>838,10588=>838,10589=>838,10590=>838,10591=>838, +10592=>838,10593=>838,10594=>838,10595=>838,10596=>838,10597=>838,10598=>838,10599=>838,10600=>838,10601=>838, +10602=>838,10603=>838,10604=>838,10605=>838,10606=>838,10607=>838,10608=>838,10609=>838,10610=>838,10611=>838, +10612=>838,10613=>838,10614=>838,10615=>981,10616=>838,10617=>838,10618=>984,10619=>838,10620=>838,10621=>838, +10622=>838,10623=>838,10731=>494,10764=>1513,10765=>521,10766=>521,10799=>838,11008=>838,11009=>838,11010=>838, +11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838, +11021=>838,11022=>838,11023=>838,11024=>838,11025=>838,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769, +11031=>769,11032=>769,11033=>769,11034=>945,11364=>753,11367=>872,11368=>644,11369=>747,11370=>606,11371=>695, +11372=>527,11374=>1024,11375=>722,11381=>740,11382=>556,11383=>700,11385=>501,11386=>602,11388=>264,11389=>455, +11520=>773,11521=>635,11522=>633,11523=>658,11524=>631,11525=>962,11526=>756,11527=>960,11528=>617,11529=>646, +11530=>962,11531=>632,11532=>646,11533=>962,11534=>645,11535=>866,11536=>961,11537=>645,11538=>645,11539=>959, +11540=>945,11541=>863,11542=>644,11543=>646,11544=>645,11545=>649,11546=>688,11547=>634,11548=>982,11549=>681, +11550=>676,11551=>852,11552=>957,11553=>632,11554=>645,11555=>646,11556=>749,11557=>914,11800=>536,11810=>390, +11811=>390,11812=>390,11813=>390,11822=>536,42564=>685,42565=>513,42566=>395,42567=>392,42576=>1104,42577=>888, +42580=>1193,42581=>871,42582=>1140,42583=>899,42760=>493,42761=>493,42762=>493,42763=>493,42764=>493,42765=>493, +42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493,42774=>493,42779=>369, +42780=>369,42781=>253,42782=>253,42783=>253,42891=>402,42892=>275,62464=>654,62465=>665,62466=>714,62467=>947, +62468=>665,62469=>659,62470=>725,62471=>986,62472=>665,62473=>665,62474=>1257,62475=>683,62476=>682,62477=>953, +62478=>665,62479=>682,62480=>999,62481=>746,62482=>798,62483=>748,62484=>944,62485=>681,62486=>936,62487=>680, +62488=>688,62489=>682,62490=>729,62491=>682,62492=>688,62493=>666,62494=>729,62495=>884,62496=>665,62497=>706, +62498=>666,62499=>665,62500=>665,62501=>722,62502=>961,62504=>904,63173=>602,63185=>500,63188=>500,64256=>710, +64257=>667,64258=>667,64259=>1028,64260=>1030,64261=>771,64262=>933,65024=>0,65025=>0,65026=>0,65027=>0, +65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0, +65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1025); +$enc=''; +$diff=''; +$file='dejavuserif.z'; +$ctg='dejavuserif.ctg.z'; +$originalsize=328908; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserif.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserif.z new file mode 100755 index 00000000..00235fa6 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserif.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifb.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifb.ctg.z new file mode 100755 index 00000000..c1a3ccbf Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifb.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifb.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifb.php new file mode 100755 index 00000000..bae91a31 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifb.php @@ -0,0 +1,299 @@ +939,'Descent'=>-236,'CapHeight'=>5,'Flags'=>32,'FontBBox'=>'[-836 -389 1796 1235]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>348,33=>439,34=>521,35=>838,36=>696,37=>950,38=>903,39=>306,40=>473, +41=>473,42=>523,43=>838,44=>348,45=>415,46=>348,47=>365,48=>696,49=>696,50=>696, +51=>696,52=>696,53=>696,54=>696,55=>696,56=>696,57=>696,58=>369,59=>369,60=>838, +61=>838,62=>838,63=>586,64=>1000,65=>776,66=>845,67=>796,68=>867,69=>762,70=>710, +71=>854,72=>945,73=>468,74=>473,75=>869,76=>703,77=>1107,78=>914,79=>871,80=>752, +81=>871,82=>831,83=>722,84=>744,85=>872,86=>776,87=>1123,88=>776,89=>714,90=>730, +91=>473,92=>365,93=>473,94=>838,95=>500,96=>500,97=>648,98=>699,99=>609,100=>699, +101=>636,102=>430,103=>699,104=>727,105=>380,106=>362,107=>693,108=>380,109=>1058,110=>727, +111=>667,112=>699,113=>699,114=>527,115=>563,116=>462,117=>727,118=>581,119=>861,120=>596, +121=>581,122=>568,123=>643,124=>364,125=>643,126=>838,8364=>696,8218=>348,402=>430,8222=>575, +8230=>1000,8224=>523,8225=>523,710=>500,8240=>1385,352=>722,8249=>400,338=>1180,381=>730,8216=>348, +8217=>348,8220=>575,8221=>575,8226=>639,8211=>500,8212=>1000,732=>500,8482=>1000,353=>563,8250=>400, +339=>1028,382=>568,376=>714,160=>348,161=>439,162=>696,163=>696,164=>636,165=>696,166=>364, +167=>523,168=>500,169=>1000,170=>487,171=>625,172=>838,173=>415,174=>1000,175=>500,176=>500, +177=>838,178=>438,179=>438,180=>500,181=>732,182=>636,183=>348,184=>500,185=>438,186=>500, +187=>625,188=>1043,189=>1043,190=>1043,191=>586,192=>776,193=>776,194=>776,195=>776,196=>776, +197=>776,198=>1034,199=>796,200=>762,201=>762,202=>762,203=>762,204=>468,205=>468,206=>468, +207=>468,208=>874,209=>914,210=>871,211=>871,212=>871,213=>871,214=>871,215=>838,216=>871, +217=>872,218=>872,219=>872,220=>872,221=>714,222=>757,223=>760,224=>648,225=>648,226=>648, +227=>648,228=>648,229=>648,230=>975,231=>609,232=>636,233=>636,234=>636,235=>636,236=>380, +237=>380,238=>380,239=>380,240=>667,241=>727,242=>667,243=>667,244=>667,245=>667,246=>667, +247=>838,248=>667,249=>727,250=>727,251=>727,252=>727,253=>581,254=>699,255=>581,256=>776, +257=>648,258=>776,259=>648,260=>776,261=>648,262=>796,263=>609,264=>796,265=>609,266=>796, +267=>609,268=>796,269=>609,270=>867,271=>699,272=>874,273=>699,274=>762,275=>636,276=>762, +277=>636,278=>762,279=>636,280=>762,281=>636,282=>762,283=>636,284=>854,285=>699,286=>854, +287=>699,288=>854,289=>699,290=>854,291=>699,292=>945,293=>727,294=>945,295=>727,296=>468, +297=>380,298=>468,299=>380,300=>468,301=>380,302=>468,303=>380,304=>468,305=>380,306=>942, +307=>751,308=>473,309=>362,310=>869,311=>693,312=>693,313=>703,314=>380,315=>703,316=>380, +317=>703,318=>380,319=>703,320=>380,321=>710,322=>385,323=>914,324=>727,325=>914,326=>727, +327=>914,328=>727,329=>1008,330=>872,331=>727,332=>871,333=>667,334=>871,335=>667,336=>871, +337=>667,340=>831,341=>527,342=>831,343=>527,344=>831,345=>527,346=>722,347=>563,348=>722, +349=>563,350=>722,351=>563,354=>744,355=>462,356=>744,357=>462,358=>744,359=>462,360=>872, +361=>727,362=>872,363=>727,364=>872,365=>727,366=>872,367=>727,368=>872,369=>727,370=>872, +371=>727,372=>1123,373=>861,374=>714,375=>581,377=>730,378=>568,379=>730,380=>568,383=>430, +384=>699,385=>845,386=>854,387=>699,388=>854,389=>699,390=>796,391=>796,392=>609,393=>874, +394=>867,395=>854,396=>699,397=>667,398=>762,399=>871,400=>721,401=>710,403=>854,404=>771, +405=>1043,406=>468,407=>468,408=>869,409=>693,410=>380,411=>701,412=>1058,413=>914,414=>727, +415=>871,416=>871,417=>667,418=>1200,419=>943,420=>752,421=>699,422=>831,423=>722,424=>563, +425=>707,426=>331,427=>462,428=>744,429=>462,430=>744,431=>872,432=>727,433=>890,434=>890, +435=>714,436=>708,437=>730,438=>568,439=>657,440=>657,441=>657,443=>696,444=>754,445=>568, +446=>536,448=>295,449=>492,450=>459,451=>295,452=>1597,453=>1435,454=>1267,455=>1176,456=>1065, +457=>742,458=>1387,459=>1276,460=>1089,461=>776,462=>648,463=>468,464=>380,465=>871,466=>667, +467=>872,468=>727,469=>872,470=>727,471=>872,472=>727,473=>872,474=>727,475=>872,476=>727, +477=>636,478=>776,479=>648,480=>776,481=>648,482=>1034,483=>975,484=>896,485=>699,486=>854, +487=>699,488=>869,489=>693,490=>871,491=>667,492=>871,493=>667,494=>657,495=>568,496=>380, +497=>1597,498=>1435,499=>1267,500=>854,501=>699,502=>1221,504=>914,505=>727,506=>776,507=>648, +508=>1034,509=>975,510=>871,511=>667,512=>776,513=>648,514=>776,515=>648,516=>762,517=>636, +518=>762,519=>636,520=>468,521=>380,522=>468,523=>380,524=>871,525=>667,526=>871,527=>667, +528=>831,529=>527,530=>831,531=>527,532=>872,533=>727,534=>872,535=>727,536=>722,537=>563, +538=>744,539=>462,540=>690,541=>607,542=>945,543=>727,544=>872,545=>791,548=>730,549=>568, +550=>776,551=>648,552=>762,553=>636,554=>871,555=>667,556=>871,557=>667,558=>871,559=>667, +560=>871,561=>667,562=>714,563=>581,564=>573,565=>922,566=>564,567=>362,568=>1031,569=>1031, +570=>776,571=>796,572=>609,573=>703,574=>744,575=>563,576=>568,577=>660,578=>547,581=>776, +592=>648,593=>699,594=>699,595=>699,596=>609,597=>609,598=>699,599=>730,600=>636,601=>636, +602=>907,603=>608,604=>562,605=>907,606=>720,607=>387,608=>699,609=>699,610=>626,611=>712, +612=>627,613=>727,614=>727,615=>727,616=>380,617=>380,618=>380,619=>409,620=>514,621=>380, +622=>795,623=>1058,624=>1058,625=>1058,626=>727,627=>727,628=>712,629=>667,630=>1061,631=>749, +632=>667,633=>571,634=>571,635=>571,636=>527,637=>527,638=>452,639=>487,640=>801,641=>801, +642=>563,643=>331,644=>430,645=>540,646=>331,647=>492,648=>462,649=>727,650=>679,651=>694, +652=>641,653=>907,654=>635,655=>727,656=>568,657=>568,658=>568,659=>568,660=>536,661=>536, +662=>536,663=>545,664=>871,665=>695,666=>720,667=>626,668=>732,669=>384,670=>740,671=>646, +672=>699,673=>536,674=>536,675=>1117,676=>1179,677=>1117,678=>911,679=>715,680=>909,681=>1039, +682=>790,683=>795,684=>662,685=>443,686=>613,687=>717,688=>521,689=>519,690=>313,691=>414, +692=>414,693=>480,694=>527,695=>662,696=>485,697=>302,699=>348,700=>348,701=>348,702=>366, +703=>366,704=>313,705=>313,711=>500,712=>282,713=>500,716=>282,720=>369,721=>369,722=>366, +723=>366,726=>392,728=>500,729=>500,730=>500,731=>500,733=>500,734=>417,736=>458,737=>292, +738=>395,739=>475,740=>313,741=>500,742=>500,743=>500,744=>500,745=>500,750=>553,768=>0, +769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, +779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0, +789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0, +799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0, +809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0, +819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0, +829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,865=>0,880=>779,881=>576,884=>302, +885=>302,890=>500,891=>609,892=>609,893=>609,894=>369,900=>500,901=>500,902=>776,903=>348, +904=>947,905=>1118,906=>662,908=>887,910=>953,911=>911,912=>484,913=>776,914=>845,915=>710, +916=>776,917=>762,918=>730,919=>945,920=>871,921=>468,922=>869,923=>776,924=>1107,925=>914, +926=>704,927=>871,928=>944,929=>752,931=>707,932=>744,933=>714,934=>871,935=>776,936=>913, +937=>890,938=>468,939=>714,940=>770,941=>608,942=>727,943=>484,944=>694,945=>770,946=>664, +947=>660,948=>667,949=>608,950=>592,951=>727,952=>667,953=>484,954=>750,955=>701,956=>732, +957=>694,958=>592,959=>667,960=>732,961=>665,962=>609,963=>737,964=>673,965=>694,966=>905, +967=>658,968=>941,969=>952,970=>484,971=>694,972=>667,973=>694,974=>952,976=>667,977=>849, +978=>764,979=>969,980=>764,981=>941,982=>952,983=>655,984=>871,985=>667,986=>796,987=>609, +988=>710,989=>527,990=>590,991=>660,992=>796,993=>667,1008=>655,1009=>665,1010=>609,1011=>362, +1012=>871,1013=>609,1014=>609,1015=>757,1016=>699,1017=>796,1018=>1107,1019=>860,1020=>692,1021=>796, +1022=>796,1023=>796,1024=>762,1025=>762,1026=>901,1027=>690,1028=>795,1029=>722,1030=>468,1031=>468, +1032=>473,1033=>1202,1034=>1262,1035=>963,1036=>910,1037=>945,1038=>812,1039=>945,1040=>814,1041=>854, +1042=>845,1043=>690,1044=>889,1045=>762,1046=>1312,1047=>721,1048=>945,1049=>945,1050=>910,1051=>884, +1052=>1107,1053=>945,1054=>871,1055=>944,1056=>752,1057=>796,1058=>744,1059=>812,1060=>949,1061=>776, +1062=>966,1063=>913,1064=>1268,1065=>1293,1066=>957,1067=>1202,1068=>825,1069=>795,1070=>1287,1071=>882, +1072=>648,1073=>667,1074=>695,1075=>613,1076=>667,1077=>636,1078=>1010,1079=>638,1080=>742,1081=>742, +1082=>722,1083=>705,1084=>869,1085=>732,1086=>667,1087=>732,1088=>699,1089=>609,1090=>620,1091=>640, +1092=>902,1093=>596,1094=>739,1095=>732,1096=>1075,1097=>1082,1098=>767,1099=>1002,1100=>679,1101=>609, +1102=>1025,1103=>739,1104=>636,1105=>636,1106=>719,1107=>613,1108=>609,1109=>563,1110=>380,1111=>380, +1112=>362,1113=>988,1114=>1015,1115=>727,1116=>722,1117=>742,1118=>640,1119=>732,1122=>880,1123=>703, +1124=>1195,1125=>963,1130=>1312,1131=>1010,1136=>1096,1137=>1105,1138=>871,1139=>652,1140=>916,1141=>749, +1164=>846,1165=>673,1168=>700,1169=>618,1170=>690,1171=>613,1172=>868,1173=>716,1174=>1312,1175=>1010, +1176=>721,1177=>638,1178=>947,1179=>744,1182=>910,1183=>722,1184=>1041,1185=>827,1186=>966,1187=>739, +1188=>1167,1189=>956,1190=>1345,1191=>1059,1194=>796,1195=>609,1196=>744,1197=>620,1198=>714,1199=>581, +1200=>714,1201=>581,1202=>866,1203=>649,1204=>1022,1205=>807,1206=>928,1207=>739,1210=>910,1211=>727, +1216=>468,1217=>1312,1218=>1010,1219=>869,1220=>693,1223=>945,1224=>732,1227=>913,1228=>732,1231=>380, +1232=>814,1233=>648,1234=>814,1235=>648,1236=>1034,1237=>975,1238=>762,1239=>636,1240=>871,1241=>636, +1242=>871,1243=>636,1244=>1312,1245=>1010,1246=>721,1247=>638,1248=>657,1249=>568,1250=>945,1251=>742, +1252=>945,1253=>742,1254=>871,1255=>667,1256=>871,1257=>667,1258=>871,1259=>667,1260=>795,1261=>609, +1262=>812,1263=>640,1264=>812,1265=>640,1266=>812,1267=>640,1268=>913,1269=>732,1270=>690,1271=>613, +1272=>1202,1273=>1002,1296=>721,1297=>638,1298=>884,1299=>705,1300=>1248,1301=>945,1306=>820,1307=>640, +1308=>1028,1309=>856,4256=>755,4257=>936,4258=>866,4259=>874,4260=>781,4261=>1078,4262=>1014,4263=>1213, +4264=>643,4265=>818,4266=>1051,4267=>1051,4268=>796,4269=>1135,4270=>969,4271=>902,4272=>1109,4273=>792, +4274=>756,4275=>1076,4276=>976,4277=>1066,4278=>811,4279=>833,4280=>821,4281=>833,4282=>908,4283=>1077, +4284=>769,4285=>822,4286=>813,4287=>1111,4288=>1123,4289=>802,4290=>892,4291=>802,4292=>880,4293=>1063, +4304=>594,4305=>625,4306=>643,4307=>887,4308=>615,4309=>611,4310=>667,4311=>915,4312=>613,4313=>600, +4314=>1120,4315=>640,4316=>640,4317=>879,4318=>624,4319=>634,4320=>877,4321=>666,4322=>780,4323=>751, +4324=>869,4325=>639,4326=>912,4327=>622,4328=>647,4329=>640,4330=>729,4331=>641,4332=>630,4333=>629, +4334=>670,4335=>753,4336=>625,4337=>657,4338=>625,4339=>625,4340=>624,4341=>670,4342=>940,4343=>680, +4344=>636,4345=>672,4346=>625,4347=>588,4348=>354,7426=>940,7432=>509,7433=>320,7444=>989,7446=>667, +7447=>667,7453=>737,7454=>948,7455=>948,7468=>489,7469=>651,7470=>532,7472=>546,7473=>480,7474=>480, +7475=>538,7476=>595,7477=>294,7478=>298,7479=>547,7480=>443,7481=>697,7482=>576,7483=>576,7484=>548, +7486=>474,7487=>523,7488=>455,7489=>469,7490=>549,7491=>466,7492=>466,7493=>498,7494=>657,7495=>499, +7496=>498,7497=>444,7498=>444,7499=>412,7500=>412,7501=>498,7502=>300,7503=>523,7504=>729,7505=>473, +7506=>467,7507=>427,7508=>467,7509=>467,7510=>499,7511=>371,7512=>520,7513=>434,7514=>729,7515=>491, +7522=>239,7523=>414,7524=>520,7525=>491,7543=>640,7544=>595,7547=>380,7557=>380,7579=>498,7580=>427, +7581=>427,7582=>467,7583=>412,7584=>383,7585=>373,7586=>498,7587=>522,7588=>300,7589=>307,7590=>300, +7591=>300,7592=>370,7593=>368,7594=>321,7595=>430,7596=>682,7597=>729,7598=>588,7599=>587,7600=>472, +7601=>467,7602=>522,7603=>400,7604=>387,7605=>371,7606=>520,7607=>475,7609=>489,7610=>491,7611=>412, +7612=>527,7613=>412,7614=>452,7615=>467,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0, +7680=>776,7681=>648,7682=>845,7683=>699,7684=>845,7685=>699,7686=>845,7687=>699,7688=>796,7689=>609, +7690=>867,7691=>699,7692=>867,7693=>699,7694=>867,7695=>699,7696=>867,7697=>699,7698=>867,7699=>699, +7700=>762,7701=>636,7702=>762,7703=>636,7704=>762,7705=>636,7706=>762,7707=>636,7708=>762,7709=>636, +7710=>710,7711=>430,7712=>854,7713=>699,7714=>945,7715=>727,7716=>945,7717=>727,7718=>945,7719=>727, +7720=>945,7721=>727,7722=>945,7723=>727,7724=>468,7725=>380,7728=>869,7729=>693,7730=>869,7731=>693, +7732=>869,7733=>693,7734=>703,7735=>380,7736=>703,7737=>380,7738=>703,7739=>380,7740=>703,7741=>380, +7742=>1107,7743=>1058,7744=>1107,7745=>1058,7746=>1107,7747=>1058,7748=>914,7749=>727,7750=>914,7751=>727, +7752=>914,7753=>727,7754=>914,7755=>727,7756=>871,7757=>667,7760=>871,7761=>667,7762=>871,7763=>667, +7764=>752,7765=>699,7766=>752,7767=>699,7768=>831,7769=>527,7770=>831,7771=>527,7772=>831,7773=>527, +7774=>831,7775=>527,7776=>722,7777=>563,7778=>722,7779=>563,7784=>722,7785=>563,7786=>744,7787=>462, +7788=>744,7789=>462,7790=>744,7791=>462,7792=>744,7793=>462,7794=>872,7795=>727,7796=>872,7797=>727, +7798=>872,7799=>727,7800=>872,7801=>727,7802=>872,7803=>727,7804=>776,7805=>581,7806=>776,7807=>581, +7808=>1123,7809=>861,7810=>1123,7811=>861,7812=>1123,7813=>861,7814=>1123,7815=>861,7816=>1123,7817=>861, +7818=>776,7819=>596,7820=>776,7821=>596,7822=>714,7823=>581,7824=>730,7825=>568,7826=>730,7827=>568, +7828=>730,7829=>568,7830=>727,7831=>462,7832=>861,7833=>581,7834=>1014,7835=>430,7838=>947,7839=>667, +7840=>776,7841=>648,7842=>776,7843=>648,7852=>776,7853=>648,7854=>776,7855=>648,7856=>776,7857=>648, +7858=>776,7859=>648,7860=>776,7861=>648,7862=>776,7863=>648,7864=>762,7865=>636,7866=>762,7867=>636, +7868=>762,7869=>636,7878=>762,7879=>636,7880=>468,7881=>380,7882=>468,7883=>380,7884=>871,7885=>667, +7886=>871,7887=>667,7896=>871,7897=>667,7908=>872,7909=>727,7910=>872,7911=>727,7922=>714,7923=>581, +7924=>714,7925=>581,7926=>714,7927=>581,7928=>714,7929=>581,7936=>770,7937=>770,7938=>770,7939=>770, +7940=>770,7941=>770,7942=>770,7943=>770,7944=>776,7945=>776,7946=>978,7947=>978,7948=>832,7949=>849, +7950=>776,7951=>776,7952=>608,7953=>608,7954=>608,7955=>608,7956=>608,7957=>608,7960=>917,7961=>909, +7962=>1169,7963=>1169,7964=>1093,7965=>1120,7968=>727,7969=>727,7970=>727,7971=>727,7972=>727,7973=>727, +7974=>727,7975=>727,7976=>1100,7977=>1094,7978=>1358,7979=>1361,7980=>1279,7981=>1308,7982=>1197,7983=>1194, +7984=>484,7985=>484,7986=>484,7987=>484,7988=>484,7989=>484,7990=>484,7991=>484,7992=>629,7993=>617, +7994=>878,7995=>881,7996=>799,7997=>831,7998=>723,7999=>714,8000=>667,8001=>667,8002=>667,8003=>667, +8004=>667,8005=>667,8008=>900,8009=>935,8010=>1240,8011=>1237,8012=>1035,8013=>1066,8016=>694,8017=>694, +8018=>694,8019=>694,8020=>694,8021=>694,8022=>694,8023=>694,8025=>922,8027=>1186,8029=>1133,8031=>1019, +8032=>952,8033=>952,8034=>952,8035=>952,8036=>952,8037=>952,8038=>952,8039=>952,8040=>931,8041=>963, +8042=>1268,8043=>1274,8044=>1054,8045=>1088,8046=>1023,8047=>1060,8048=>770,8049=>770,8050=>608,8051=>608, +8052=>727,8053=>727,8054=>484,8055=>484,8056=>667,8057=>667,8058=>694,8059=>694,8060=>952,8061=>952, +8064=>770,8065=>770,8066=>770,8067=>770,8068=>770,8069=>770,8070=>770,8071=>770,8072=>776,8073=>776, +8074=>978,8075=>978,8076=>832,8077=>849,8078=>776,8079=>776,8080=>727,8081=>727,8082=>727,8083=>727, +8084=>727,8085=>727,8086=>727,8087=>727,8088=>1100,8089=>1094,8090=>1358,8091=>1361,8092=>1279,8093=>1308, +8094=>1197,8095=>1194,8096=>952,8097=>952,8098=>952,8099=>952,8100=>952,8101=>952,8102=>952,8103=>952, +8104=>931,8105=>963,8106=>1268,8107=>1274,8108=>1054,8109=>1088,8110=>1023,8111=>1060,8112=>770,8113=>770, +8114=>770,8115=>770,8116=>770,8118=>770,8119=>770,8120=>776,8121=>776,8122=>811,8123=>776,8124=>776, +8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>727,8131=>727,8132=>727,8134=>727,8135=>727, +8136=>1000,8137=>947,8138=>1191,8139=>1118,8140=>945,8141=>500,8142=>500,8143=>500,8144=>484,8145=>484, +8146=>484,8147=>484,8150=>484,8151=>484,8152=>468,8153=>468,8154=>714,8155=>662,8157=>500,8158=>500, +8159=>500,8160=>694,8161=>694,8162=>694,8163=>694,8164=>665,8165=>665,8166=>694,8167=>694,8168=>714, +8169=>714,8170=>1019,8171=>953,8172=>910,8173=>500,8174=>500,8175=>500,8178=>952,8179=>952,8180=>952, +8182=>952,8183=>952,8184=>1069,8185=>887,8186=>1101,8187=>911,8188=>890,8189=>500,8190=>500,8192=>500, +8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>696,8200=>348,8201=>200,8202=>100, +8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>415,8209=>415,8210=>696,8213=>1000,8214=>500, +8215=>500,8219=>348,8223=>575,8227=>639,8228=>348,8229=>674,8234=>0,8235=>0,8236=>0,8237=>0, +8238=>0,8239=>200,8241=>1820,8242=>264,8243=>447,8244=>630,8245=>264,8246=>447,8247=>630,8248=>733, +8252=>629,8253=>586,8254=>500,8258=>1023,8260=>167,8261=>473,8262=>473,8263=>1082,8264=>856,8265=>856, +8267=>636,8268=>500,8269=>500,8270=>523,8271=>369,8273=>523,8274=>556,8275=>1000,8279=>813,8287=>222, +8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0, +8303=>0,8304=>438,8305=>239,8308=>438,8309=>438,8310=>438,8311=>438,8312=>438,8313=>438,8314=>528, +8315=>528,8316=>528,8317=>298,8318=>298,8319=>519,8320=>438,8321=>438,8322=>438,8323=>438,8324=>438, +8325=>438,8326=>438,8327=>438,8328=>438,8329=>438,8330=>528,8331=>528,8332=>528,8333=>298,8334=>298, +8336=>466,8337=>444,8338=>467,8339=>475,8340=>444,8358=>696,8367=>1155,8369=>790,8372=>876,8373=>696, +8451=>1198,8457=>1112,8462=>727,8463=>727,8470=>1087,8486=>890,8487=>890,8490=>869,8491=>776,8513=>775, +8514=>557,8515=>637,8516=>760,8523=>903,8531=>1035,8532=>1035,8533=>1035,8534=>1035,8535=>1035,8536=>1035, +8537=>1035,8538=>1035,8539=>1035,8540=>1035,8541=>1035,8542=>1035,8543=>615,8544=>468,8545=>736,8546=>1005, +8547=>1093,8548=>776,8549=>1127,8550=>1396,8551=>1664,8552=>1069,8553=>776,8554=>1078,8555=>1347,8556=>703, +8557=>796,8558=>867,8559=>1107,8560=>380,8561=>760,8562=>1140,8563=>961,8564=>581,8565=>961,8566=>1341, +8567=>1721,8568=>976,8569=>596,8570=>976,8571=>1356,8572=>380,8573=>609,8574=>699,8575=>1058,8576=>1255, +8577=>867,8578=>1268,8579=>796,8580=>609,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838, +8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838, +8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838, +8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>850,8624=>838,8625=>838,8626=>838,8627=>838, +8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838, +8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838, +8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838, +8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838, +8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838, +8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838, +8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838, +8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>641,8706=>534,8707=>620,8708=>620, +8710=>753,8711=>753,8712=>740,8713=>740,8715=>740,8716=>740,8719=>842,8720=>842,8721=>753,8722=>838, +8723=>838,8724=>838,8725=>365,8727=>691,8728=>519,8729=>519,8730=>657,8731=>657,8732=>657,8733=>672, +8734=>833,8735=>838,8736=>838,8739=>324,8740=>607,8741=>529,8742=>773,8743=>812,8744=>812,8745=>838, +8746=>838,8747=>579,8748=>1000,8749=>1391,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838, +8770=>838,8771=>838,8776=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1082,8789=>1082,8800=>838, +8801=>838,8804=>838,8805=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8844=>838, +8845=>838,8846=>838,8847=>838,8848=>838,8849=>838,8850=>838,8851=>838,8852=>838,8853=>838,8854=>838, +8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838, +8865=>838,8866=>884,8867=>884,8868=>960,8869=>960,8870=>616,8871=>616,8872=>884,8873=>884,8874=>884, +8875=>1080,8876=>884,8877=>884,8878=>884,8879=>1080,8901=>398,8962=>834,8968=>473,8969=>473,8970=>473, +8971=>473,8976=>838,8977=>539,8984=>928,8985=>838,8992=>579,8993=>579,8997=>1000,9000=>1443,9085=>1008, +9134=>579,9167=>945,9251=>834,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769, +9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769, +9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769, +9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945, +9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550, +9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502, +9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502, +9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873, +9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527, +9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873, +9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945, +9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873, +9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732, +9727=>769,9728=>896,9784=>896,9785=>896,9786=>896,9787=>896,9788=>896,9791=>614,9792=>731,9793=>731, +9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9824=>896,9825=>896,9826=>896,9827=>896, +9828=>896,9829=>896,9830=>896,9831=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357, +9839=>484,10145=>838,10181=>457,10182=>457,10208=>494,10216=>457,10217=>457,10224=>838,10225=>838,10226=>838, +10227=>838,10228=>1033,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434, +10237=>1434,10238=>1434,10239=>1434,10240=>781,10241=>781,10242=>781,10243=>781,10244=>781,10245=>781,10246=>781, +10247=>781,10248=>781,10249=>781,10250=>781,10251=>781,10252=>781,10253=>781,10254=>781,10255=>781,10256=>781, +10257=>781,10258=>781,10259=>781,10260=>781,10261=>781,10262=>781,10263=>781,10264=>781,10265=>781,10266=>781, +10267=>781,10268=>781,10269=>781,10270=>781,10271=>781,10272=>781,10273=>781,10274=>781,10275=>781,10276=>781, +10277=>781,10278=>781,10279=>781,10280=>781,10281=>781,10282=>781,10283=>781,10284=>781,10285=>781,10286=>781, +10287=>781,10288=>781,10289=>781,10290=>781,10291=>781,10292=>781,10293=>781,10294=>781,10295=>781,10296=>781, +10297=>781,10298=>781,10299=>781,10300=>781,10301=>781,10302=>781,10303=>781,10304=>781,10305=>781,10306=>781, +10307=>781,10308=>781,10309=>781,10310=>781,10311=>781,10312=>781,10313=>781,10314=>781,10315=>781,10316=>781, +10317=>781,10318=>781,10319=>781,10320=>781,10321=>781,10322=>781,10323=>781,10324=>781,10325=>781,10326=>781, +10327=>781,10328=>781,10329=>781,10330=>781,10331=>781,10332=>781,10333=>781,10334=>781,10335=>781,10336=>781, +10337=>781,10338=>781,10339=>781,10340=>781,10341=>781,10342=>781,10343=>781,10344=>781,10345=>781,10346=>781, +10347=>781,10348=>781,10349=>781,10350=>781,10351=>781,10352=>781,10353=>781,10354=>781,10355=>781,10356=>781, +10357=>781,10358=>781,10359=>781,10360=>781,10361=>781,10362=>781,10363=>781,10364=>781,10365=>781,10366=>781, +10367=>781,10368=>781,10369=>781,10370=>781,10371=>781,10372=>781,10373=>781,10374=>781,10375=>781,10376=>781, +10377=>781,10378=>781,10379=>781,10380=>781,10381=>781,10382=>781,10383=>781,10384=>781,10385=>781,10386=>781, +10387=>781,10388=>781,10389=>781,10390=>781,10391=>781,10392=>781,10393=>781,10394=>781,10395=>781,10396=>781, +10397=>781,10398=>781,10399=>781,10400=>781,10401=>781,10402=>781,10403=>781,10404=>781,10405=>781,10406=>781, +10407=>781,10408=>781,10409=>781,10410=>781,10411=>781,10412=>781,10413=>781,10414=>781,10415=>781,10416=>781, +10417=>781,10418=>781,10419=>781,10420=>781,10421=>781,10422=>781,10423=>781,10424=>781,10425=>781,10426=>781, +10427=>781,10428=>781,10429=>781,10430=>781,10431=>781,10432=>781,10433=>781,10434=>781,10435=>781,10436=>781, +10437=>781,10438=>781,10439=>781,10440=>781,10441=>781,10442=>781,10443=>781,10444=>781,10445=>781,10446=>781, +10447=>781,10448=>781,10449=>781,10450=>781,10451=>781,10452=>781,10453=>781,10454=>781,10455=>781,10456=>781, +10457=>781,10458=>781,10459=>781,10460=>781,10461=>781,10462=>781,10463=>781,10464=>781,10465=>781,10466=>781, +10467=>781,10468=>781,10469=>781,10470=>781,10471=>781,10472=>781,10473=>781,10474=>781,10475=>781,10476=>781, +10477=>781,10478=>781,10479=>781,10480=>781,10481=>781,10482=>781,10483=>781,10484=>781,10485=>781,10486=>781, +10487=>781,10488=>781,10489=>781,10490=>781,10491=>781,10492=>781,10493=>781,10494=>781,10495=>781,10496=>838, +10497=>838,10498=>838,10499=>838,10500=>838,10501=>838,10502=>838,10503=>838,10504=>838,10505=>838,10506=>838, +10507=>838,10508=>838,10509=>838,10510=>838,10511=>838,10512=>838,10513=>838,10514=>838,10515=>838,10516=>838, +10517=>838,10518=>838,10519=>838,10520=>838,10521=>838,10522=>838,10523=>838,10524=>838,10525=>838,10526=>838, +10527=>838,10528=>838,10529=>838,10530=>838,10531=>838,10532=>838,10533=>838,10534=>838,10535=>838,10536=>838, +10537=>838,10538=>838,10539=>838,10540=>838,10541=>838,10542=>838,10543=>838,10544=>838,10545=>838,10546=>838, +10547=>838,10548=>838,10549=>838,10550=>838,10551=>838,10552=>838,10553=>838,10554=>838,10555=>838,10556=>838, +10557=>838,10558=>838,10559=>838,10560=>838,10561=>838,10562=>838,10563=>838,10564=>838,10565=>838,10566=>838, +10567=>838,10568=>838,10569=>838,10570=>838,10571=>838,10572=>838,10573=>838,10574=>838,10575=>838,10576=>838, +10577=>838,10578=>838,10579=>838,10580=>838,10581=>838,10582=>838,10583=>838,10584=>838,10585=>838,10586=>838, +10587=>838,10588=>838,10589=>838,10590=>838,10591=>838,10592=>838,10593=>838,10594=>838,10595=>838,10596=>838, +10597=>838,10598=>838,10599=>838,10600=>838,10601=>838,10602=>838,10603=>838,10604=>838,10605=>838,10606=>838, +10607=>838,10608=>838,10609=>838,10610=>838,10611=>838,10612=>838,10613=>838,10614=>838,10615=>1032,10616=>838, +10617=>838,10618=>960,10619=>838,10620=>838,10621=>838,10622=>838,10623=>838,10731=>494,10764=>1782,10765=>610, +10766=>610,10799=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838, +11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838, +11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11364=>831, +11367=>945,11368=>727,11369=>869,11370=>693,11371=>730,11372=>568,11374=>1107,11375=>776,11381=>779,11382=>601, +11383=>905,11385=>571,11386=>667,11388=>313,11389=>489,11520=>773,11521=>635,11522=>804,11523=>658,11524=>788, +11525=>962,11526=>756,11527=>960,11528=>617,11529=>646,11530=>962,11531=>631,11532=>646,11533=>962,11534=>846, +11535=>866,11536=>961,11537=>645,11538=>645,11539=>959,11540=>945,11541=>863,11542=>644,11543=>646,11544=>645, +11545=>649,11546=>688,11547=>936,11548=>982,11549=>681,11550=>676,11551=>852,11552=>1113,11553=>632,11554=>645, +11555=>646,11556=>749,11557=>914,11800=>586,11810=>473,11811=>473,11812=>473,11813=>473,11822=>586,42564=>722, +42565=>563,42566=>468,42567=>380,42576=>1333,42577=>1092,42580=>1287,42581=>1025,42582=>1287,42583=>1039,42760=>500, +42761=>500,42762=>500,42763=>500,42764=>500,42765=>500,42766=>500,42767=>500,42768=>500,42769=>500,42770=>500, +42771=>500,42772=>500,42773=>500,42774=>500,42779=>384,42780=>384,42781=>276,42782=>276,42783=>276,42891=>439, +42892=>306,62464=>705,62465=>716,62466=>765,62467=>999,62468=>716,62469=>710,62470=>776,62471=>1038,62472=>716, +62473=>716,62474=>1309,62475=>734,62476=>733,62477=>1004,62478=>716,62479=>733,62480=>1050,62481=>797,62482=>850, +62483=>799,62484=>996,62485=>732,62486=>987,62487=>731,62488=>739,62489=>733,62490=>780,62491=>733,62492=>739, +62493=>717,62494=>780,62495=>936,62496=>716,62497=>826,62498=>717,62499=>716,62500=>716,62501=>773,62502=>1013, +62504=>904,63173=>667,63185=>500,63188=>500,64256=>821,64257=>727,64258=>727,64259=>1120,64260=>1117,64261=>871, +64262=>971,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0, +65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0, +65532=>0,65533=>1113); +$enc=''; +$diff=''; +$file='dejavuserifb.z'; +$ctg='dejavuserifb.ctg.z'; +$originalsize=306532; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifb.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifb.z new file mode 100755 index 00000000..f73e4f3e Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifb.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifbi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifbi.ctg.z new file mode 100755 index 00000000..d237ae7e Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifbi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifbi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifbi.php new file mode 100755 index 00000000..265857c9 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifbi.php @@ -0,0 +1,299 @@ +939,'Descent'=>-236,'CapHeight'=>-53,'Flags'=>96,'FontBBox'=>'[-906 -389 1760 1235]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>348,33=>439,34=>521,35=>838,36=>696,37=>950,38=>903,39=>306,40=>473, +41=>473,42=>523,43=>838,44=>348,45=>415,46=>348,47=>365,48=>696,49=>696,50=>696, +51=>696,52=>696,53=>696,54=>696,55=>696,56=>696,57=>696,58=>369,59=>369,60=>838, +61=>838,62=>838,63=>586,64=>1000,65=>776,66=>845,67=>796,68=>867,69=>762,70=>710, +71=>854,72=>945,73=>468,74=>473,75=>869,76=>703,77=>1107,78=>914,79=>871,80=>752, +81=>871,82=>831,83=>722,84=>744,85=>872,86=>776,87=>1123,88=>776,89=>714,90=>730, +91=>473,92=>365,93=>473,94=>838,95=>500,96=>500,97=>648,98=>699,99=>609,100=>699, +101=>636,102=>430,103=>699,104=>727,105=>380,106=>362,107=>693,108=>380,109=>1058,110=>727, +111=>667,112=>699,113=>699,114=>527,115=>563,116=>462,117=>727,118=>581,119=>861,120=>596, +121=>581,122=>568,123=>643,124=>364,125=>643,126=>838,8364=>696,8218=>348,402=>430,8222=>575, +8230=>1000,8224=>523,8225=>523,710=>500,8240=>1385,352=>722,8249=>400,338=>1180,381=>730,8216=>348, +8217=>348,8220=>575,8221=>575,8226=>639,8211=>500,8212=>1000,732=>500,8482=>1000,353=>563,8250=>400, +339=>1028,382=>568,376=>714,160=>348,161=>439,162=>696,163=>696,164=>636,165=>696,166=>364, +167=>523,168=>500,169=>1000,170=>487,171=>625,172=>838,173=>415,174=>1000,175=>500,176=>500, +177=>838,178=>438,179=>438,180=>500,181=>732,182=>636,183=>348,184=>500,185=>438,186=>500, +187=>625,188=>1043,189=>1043,190=>1043,191=>586,192=>776,193=>776,194=>776,195=>776,196=>776, +197=>776,198=>1034,199=>796,200=>762,201=>762,202=>762,203=>762,204=>468,205=>468,206=>468, +207=>468,208=>874,209=>914,210=>871,211=>871,212=>871,213=>871,214=>871,215=>838,216=>871, +217=>872,218=>872,219=>872,220=>872,221=>714,222=>757,223=>760,224=>648,225=>648,226=>648, +227=>648,228=>648,229=>648,230=>932,231=>609,232=>636,233=>636,234=>636,235=>636,236=>380, +237=>380,238=>380,239=>380,240=>667,241=>727,242=>667,243=>667,244=>667,245=>667,246=>667, +247=>838,248=>667,249=>727,250=>727,251=>727,252=>727,253=>581,254=>699,255=>581,256=>776, +257=>648,258=>776,259=>648,260=>776,261=>648,262=>796,263=>609,264=>796,265=>609,266=>796, +267=>609,268=>796,269=>609,270=>867,271=>699,272=>874,273=>699,274=>762,275=>636,276=>762, +277=>636,278=>762,279=>636,280=>762,281=>636,282=>762,283=>636,284=>854,285=>699,286=>854, +287=>699,288=>854,289=>699,290=>854,291=>699,292=>945,293=>727,294=>945,295=>727,296=>468, +297=>380,298=>468,299=>380,300=>468,301=>380,302=>468,303=>380,304=>468,305=>380,306=>942, +307=>751,308=>473,309=>362,310=>869,311=>693,312=>693,313=>703,314=>380,315=>703,316=>380, +317=>703,318=>508,319=>703,320=>557,321=>710,322=>385,323=>914,324=>727,325=>914,326=>727, +327=>914,328=>727,329=>1008,330=>872,331=>727,332=>871,333=>667,334=>871,335=>667,336=>871, +337=>667,340=>831,341=>527,342=>831,343=>527,344=>831,345=>527,346=>722,347=>563,348=>722, +349=>563,350=>722,351=>563,354=>744,355=>462,356=>744,357=>462,358=>744,359=>462,360=>872, +361=>727,362=>872,363=>727,364=>872,365=>727,366=>872,367=>727,368=>872,369=>727,370=>872, +371=>727,372=>1123,373=>861,374=>714,375=>581,377=>730,378=>568,379=>730,380=>568,383=>430, +384=>699,385=>845,386=>854,387=>699,388=>854,389=>699,390=>796,391=>796,392=>609,393=>874, +394=>867,395=>854,396=>699,397=>667,398=>762,399=>871,400=>721,401=>710,403=>854,404=>771, +405=>1043,406=>468,407=>468,408=>869,409=>693,410=>380,411=>701,412=>1058,413=>914,414=>727, +415=>871,416=>871,417=>667,418=>1200,419=>943,420=>752,421=>699,422=>831,423=>722,424=>563, +425=>707,426=>331,427=>462,428=>744,429=>462,430=>744,431=>872,432=>727,433=>890,434=>890, +435=>714,436=>699,437=>730,438=>568,439=>657,440=>657,441=>657,443=>696,444=>754,445=>568, +446=>536,448=>295,449=>492,450=>459,451=>295,452=>1597,453=>1435,454=>1267,455=>1176,456=>1065, +457=>742,458=>1387,459=>1276,460=>1089,461=>776,462=>648,463=>468,464=>380,465=>871,466=>667, +467=>872,468=>727,469=>872,470=>727,471=>872,472=>727,473=>872,474=>727,475=>872,476=>727, +477=>636,478=>776,479=>648,480=>776,481=>648,482=>1034,483=>975,484=>896,485=>699,486=>854, +487=>699,488=>869,489=>693,490=>871,491=>667,492=>871,493=>667,494=>657,495=>568,496=>362, +497=>1597,498=>1435,499=>1267,500=>854,501=>699,502=>1221,504=>914,505=>727,506=>776,507=>648, +508=>1034,509=>932,510=>871,511=>667,512=>776,513=>648,514=>776,515=>648,516=>762,517=>636, +518=>762,519=>636,520=>468,521=>380,522=>468,523=>380,524=>871,525=>667,526=>871,527=>667, +528=>831,529=>527,530=>831,531=>527,532=>872,533=>727,534=>872,535=>727,536=>722,537=>563, +538=>744,539=>462,540=>690,541=>607,542=>945,543=>727,544=>872,545=>791,548=>730,549=>568, +550=>776,551=>648,552=>762,553=>636,554=>871,555=>667,556=>871,557=>667,558=>871,559=>667, +560=>871,561=>667,562=>714,563=>581,564=>573,565=>922,566=>564,567=>362,568=>1031,569=>1031, +570=>776,571=>796,572=>609,573=>703,574=>744,575=>563,576=>568,577=>660,578=>547,581=>776, +592=>648,593=>699,594=>699,595=>699,596=>609,597=>609,598=>699,599=>730,600=>636,601=>636, +602=>907,603=>608,604=>562,605=>907,606=>720,607=>387,608=>699,609=>699,610=>626,611=>712, +612=>627,613=>727,614=>727,615=>727,616=>380,617=>380,618=>380,619=>409,620=>514,621=>380, +622=>795,623=>1058,624=>1058,625=>1058,626=>727,627=>727,628=>712,629=>667,630=>1061,631=>749, +632=>667,633=>571,634=>571,635=>571,636=>527,637=>527,638=>452,639=>487,640=>801,641=>801, +642=>563,643=>331,644=>430,645=>540,646=>331,647=>492,648=>462,649=>727,650=>679,651=>694, +652=>581,653=>861,654=>635,655=>727,656=>568,657=>568,658=>568,659=>568,660=>536,661=>536, +662=>536,663=>545,664=>871,665=>695,666=>720,667=>626,668=>732,669=>384,670=>740,671=>646, +672=>699,673=>536,674=>536,675=>1117,676=>1179,677=>1117,678=>911,679=>715,680=>909,681=>1039, +682=>790,683=>795,684=>662,685=>443,686=>613,687=>717,688=>521,689=>519,690=>313,691=>414, +692=>414,693=>480,694=>527,695=>542,696=>366,697=>302,699=>348,700=>348,701=>348,702=>366, +703=>366,704=>313,705=>313,711=>500,712=>282,713=>500,716=>282,720=>369,721=>369,722=>366, +723=>366,726=>392,728=>500,729=>500,730=>500,731=>500,733=>500,734=>417,736=>448,737=>292, +738=>395,739=>375,740=>313,741=>500,742=>500,743=>500,744=>500,745=>500,750=>553,768=>0, +769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, +779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0, +789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0, +799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0, +809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0, +819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0, +829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,865=>0,880=>779,881=>576,884=>302, +885=>302,890=>500,891=>609,892=>609,893=>609,894=>369,900=>500,901=>500,902=>776,903=>348, +904=>947,905=>1136,906=>662,908=>887,910=>953,911=>911,912=>484,913=>776,914=>845,915=>710, +916=>776,917=>762,918=>730,919=>945,920=>871,921=>468,922=>869,923=>776,924=>1107,925=>914, +926=>704,927=>871,928=>945,929=>752,931=>707,932=>744,933=>714,934=>871,935=>776,936=>913, +937=>890,938=>468,939=>714,940=>770,941=>608,942=>727,943=>484,944=>694,945=>770,946=>664, +947=>660,948=>667,949=>608,950=>592,951=>727,952=>667,953=>484,954=>750,955=>701,956=>732, +957=>694,958=>592,959=>667,960=>732,961=>665,962=>609,963=>737,964=>673,965=>694,966=>905, +967=>658,968=>941,969=>952,970=>484,971=>694,972=>667,973=>694,974=>952,976=>667,977=>849, +978=>764,979=>969,980=>764,981=>941,982=>952,983=>655,984=>871,985=>667,986=>796,987=>609, +988=>710,989=>527,990=>590,991=>660,992=>796,993=>667,1008=>655,1009=>665,1010=>609,1011=>362, +1012=>871,1013=>609,1014=>609,1015=>757,1016=>699,1017=>796,1018=>1107,1019=>860,1020=>692,1021=>796, +1022=>796,1023=>796,1024=>762,1025=>762,1026=>901,1027=>690,1028=>795,1029=>722,1030=>468,1031=>468, +1032=>473,1033=>1202,1034=>1262,1035=>963,1036=>910,1037=>945,1038=>812,1039=>945,1040=>814,1041=>854, +1042=>845,1043=>690,1044=>889,1045=>762,1046=>1312,1047=>721,1048=>945,1049=>945,1050=>910,1051=>884, +1052=>1107,1053=>945,1054=>871,1055=>945,1056=>752,1057=>796,1058=>744,1059=>812,1060=>949,1061=>776, +1062=>966,1063=>913,1064=>1268,1065=>1293,1066=>957,1067=>1202,1068=>825,1069=>795,1070=>1287,1071=>882, +1072=>648,1073=>722,1074=>657,1075=>563,1076=>695,1077=>636,1078=>1306,1079=>638,1080=>727,1081=>727, +1082=>677,1083=>732,1084=>951,1085=>729,1086=>667,1087=>727,1088=>699,1089=>609,1090=>1058,1091=>598, +1092=>902,1093=>596,1094=>803,1095=>715,1096=>1058,1097=>1134,1098=>727,1099=>1018,1100=>660,1101=>645, +1102=>1001,1103=>796,1104=>636,1105=>636,1106=>719,1107=>563,1108=>609,1109=>563,1110=>380,1111=>380, +1112=>362,1113=>1014,1114=>1011,1115=>727,1116=>677,1117=>727,1118=>598,1119=>727,1122=>880,1123=>1050, +1124=>1195,1125=>963,1130=>1312,1131=>1010,1136=>1096,1137=>1105,1138=>871,1139=>652,1140=>916,1141=>749, +1164=>846,1165=>673,1168=>700,1169=>618,1170=>690,1171=>563,1172=>854,1173=>705,1174=>1312,1175=>1306, +1176=>721,1177=>638,1178=>902,1179=>703,1182=>910,1183=>677,1184=>1041,1185=>760,1186=>952,1187=>805, +1188=>1167,1189=>955,1190=>1324,1191=>1013,1194=>796,1195=>609,1196=>744,1197=>1142,1198=>714,1199=>572, +1200=>713,1201=>572,1202=>789,1203=>596,1204=>1010,1205=>833,1206=>913,1207=>792,1210=>910,1211=>727, +1216=>468,1217=>1312,1218=>1306,1219=>869,1220=>693,1223=>945,1224=>732,1227=>984,1228=>732,1231=>380, +1232=>814,1233=>648,1234=>814,1235=>648,1236=>1034,1237=>975,1238=>762,1239=>636,1240=>871,1241=>636, +1242=>871,1243=>636,1244=>1312,1245=>1306,1246=>721,1247=>638,1248=>657,1249=>568,1250=>945,1251=>727, +1252=>945,1253=>727,1254=>871,1255=>667,1256=>871,1257=>667,1258=>871,1259=>667,1260=>795,1261=>645, +1262=>812,1263=>598,1264=>812,1265=>598,1266=>812,1267=>598,1268=>913,1269=>715,1270=>690,1271=>563, +1272=>1202,1273=>1018,1296=>721,1297=>638,1298=>884,1299=>732,1300=>1248,1301=>1005,1306=>820,1307=>640, +1308=>1028,1309=>856,4256=>765,4257=>945,4258=>876,4259=>884,4260=>791,4261=>1087,4262=>1024,4263=>1223, +4264=>653,4265=>828,4266=>1061,4267=>1061,4268=>806,4269=>1145,4270=>979,4271=>912,4272=>1119,4273=>802, +4274=>766,4275=>1085,4276=>986,4277=>1076,4278=>820,4279=>843,4280=>831,4281=>843,4282=>918,4283=>1086, +4284=>779,4285=>832,4286=>822,4287=>1121,4288=>1132,4289=>812,4290=>902,4291=>812,4292=>890,4293=>1073, +4304=>594,4305=>625,4306=>643,4307=>887,4308=>615,4309=>611,4310=>666,4311=>915,4312=>613,4313=>600, +4314=>1120,4315=>654,4316=>640,4317=>879,4318=>624,4319=>634,4320=>877,4321=>657,4322=>802,4323=>751, +4324=>869,4325=>639,4326=>912,4327=>622,4328=>647,4329=>640,4330=>729,4331=>641,4332=>639,4333=>629, +4334=>674,4335=>737,4336=>625,4337=>657,4338=>625,4339=>625,4340=>624,4341=>670,4342=>940,4343=>680, +4344=>636,4345=>672,4346=>625,4347=>446,4348=>363,7426=>940,7432=>509,7433=>320,7444=>989,7446=>667, +7447=>667,7453=>737,7454=>948,7455=>948,7468=>489,7469=>651,7470=>532,7472=>546,7473=>480,7474=>480, +7475=>538,7476=>595,7477=>294,7478=>298,7479=>547,7480=>443,7481=>697,7482=>576,7483=>576,7484=>548, +7486=>474,7487=>523,7488=>469,7489=>549,7490=>708,7491=>466,7492=>466,7493=>498,7494=>657,7495=>499, +7496=>498,7497=>444,7498=>444,7499=>412,7500=>412,7501=>498,7502=>300,7503=>523,7504=>729,7505=>473, +7506=>467,7507=>427,7508=>467,7509=>467,7510=>499,7511=>371,7512=>520,7513=>434,7514=>729,7515=>491, +7522=>239,7523=>414,7524=>520,7525=>491,7543=>640,7544=>595,7547=>380,7557=>380,7579=>498,7580=>427, +7581=>427,7582=>467,7583=>412,7584=>271,7585=>373,7586=>498,7587=>522,7588=>300,7589=>307,7590=>300, +7591=>300,7592=>370,7593=>368,7594=>321,7595=>430,7596=>682,7597=>729,7598=>588,7599=>587,7600=>472, +7601=>467,7602=>522,7603=>400,7604=>387,7605=>371,7606=>520,7607=>475,7609=>489,7610=>366,7611=>357, +7612=>527,7613=>412,7614=>452,7615=>467,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0, +7680=>776,7681=>648,7682=>845,7683=>699,7684=>845,7685=>699,7686=>845,7687=>699,7688=>796,7689=>609, +7690=>867,7691=>699,7692=>867,7693=>699,7694=>867,7695=>699,7696=>867,7697=>699,7698=>867,7699=>699, +7700=>762,7701=>636,7702=>762,7703=>636,7704=>762,7705=>636,7706=>762,7707=>636,7708=>762,7709=>636, +7710=>710,7711=>430,7712=>854,7713=>699,7714=>945,7715=>727,7716=>945,7717=>727,7718=>945,7719=>727, +7720=>945,7721=>727,7722=>945,7723=>727,7724=>468,7725=>380,7728=>869,7729=>693,7730=>869,7731=>693, +7732=>869,7733=>693,7734=>703,7735=>380,7736=>703,7737=>380,7738=>703,7739=>380,7740=>703,7741=>380, +7742=>1107,7743=>1058,7744=>1107,7745=>1058,7746=>1107,7747=>1058,7748=>914,7749=>727,7750=>914,7751=>727, +7752=>914,7753=>727,7754=>914,7755=>727,7756=>871,7757=>667,7760=>871,7761=>667,7762=>871,7763=>667, +7764=>752,7765=>699,7766=>752,7767=>699,7768=>831,7769=>527,7770=>831,7771=>527,7772=>831,7773=>527, +7774=>831,7775=>527,7776=>722,7777=>563,7778=>722,7779=>563,7784=>722,7785=>563,7786=>744,7787=>462, +7788=>744,7789=>462,7790=>744,7791=>462,7792=>744,7793=>462,7794=>872,7795=>727,7796=>872,7797=>727, +7798=>872,7799=>727,7800=>872,7801=>727,7802=>872,7803=>727,7804=>776,7805=>581,7806=>776,7807=>581, +7808=>1123,7809=>861,7810=>1123,7811=>861,7812=>1123,7813=>861,7814=>1123,7815=>861,7816=>1123,7817=>861, +7818=>776,7819=>596,7820=>776,7821=>596,7822=>714,7823=>581,7824=>730,7825=>568,7826=>730,7827=>568, +7828=>730,7829=>568,7830=>727,7831=>462,7832=>861,7833=>581,7834=>1014,7835=>430,7838=>947,7839=>667, +7840=>776,7841=>648,7842=>776,7843=>648,7852=>776,7853=>648,7854=>776,7855=>648,7856=>776,7857=>648, +7858=>776,7859=>648,7860=>776,7861=>648,7862=>776,7863=>648,7864=>762,7865=>636,7866=>762,7867=>636, +7868=>762,7869=>636,7878=>762,7879=>636,7880=>468,7881=>380,7882=>468,7883=>380,7884=>871,7885=>667, +7886=>871,7887=>667,7896=>871,7897=>667,7908=>872,7909=>727,7910=>872,7911=>727,7922=>714,7923=>581, +7924=>714,7925=>581,7926=>714,7927=>581,7928=>714,7929=>581,7936=>770,7937=>770,7938=>770,7939=>770, +7940=>770,7941=>770,7942=>770,7943=>770,7944=>776,7945=>776,7946=>978,7947=>978,7948=>832,7949=>849, +7950=>776,7951=>776,7952=>608,7953=>608,7954=>608,7955=>608,7956=>608,7957=>608,7960=>917,7961=>909, +7962=>1169,7963=>1169,7964=>1093,7965=>1120,7968=>727,7969=>727,7970=>727,7971=>727,7972=>727,7973=>727, +7974=>727,7975=>727,7976=>1100,7977=>1094,7978=>1358,7979=>1361,7980=>1279,7981=>1308,7982=>1197,7983=>1194, +7984=>484,7985=>484,7986=>484,7987=>484,7988=>484,7989=>484,7990=>484,7991=>484,7992=>629,7993=>617, +7994=>878,7995=>881,7996=>799,7997=>831,7998=>723,7999=>714,8000=>667,8001=>667,8002=>667,8003=>667, +8004=>667,8005=>667,8008=>900,8009=>935,8010=>1240,8011=>1237,8012=>1035,8013=>1066,8016=>694,8017=>694, +8018=>694,8019=>694,8020=>694,8021=>694,8022=>694,8023=>694,8025=>922,8027=>1186,8029=>1133,8031=>1019, +8032=>952,8033=>952,8034=>952,8035=>952,8036=>952,8037=>952,8038=>952,8039=>952,8040=>931,8041=>963, +8042=>1268,8043=>1274,8044=>1054,8045=>1088,8046=>1023,8047=>1060,8048=>770,8049=>770,8050=>608,8051=>608, +8052=>727,8053=>727,8054=>484,8055=>484,8056=>667,8057=>667,8058=>694,8059=>694,8060=>952,8061=>952, +8064=>770,8065=>770,8066=>770,8067=>770,8068=>770,8069=>770,8070=>770,8071=>770,8072=>776,8073=>776, +8074=>978,8075=>978,8076=>832,8077=>849,8078=>776,8079=>776,8080=>727,8081=>727,8082=>727,8083=>727, +8084=>727,8085=>727,8086=>727,8087=>727,8088=>1100,8089=>1094,8090=>1358,8091=>1361,8092=>1279,8093=>1308, +8094=>1197,8095=>1194,8096=>952,8097=>952,8098=>952,8099=>952,8100=>952,8101=>952,8102=>952,8103=>952, +8104=>931,8105=>963,8106=>1268,8107=>1274,8108=>1054,8109=>1088,8110=>1023,8111=>1060,8112=>770,8113=>770, +8114=>770,8115=>770,8116=>770,8118=>770,8119=>770,8120=>776,8121=>776,8122=>811,8123=>776,8124=>776, +8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>727,8131=>727,8132=>727,8134=>727,8135=>727, +8136=>1000,8137=>947,8138=>1191,8139=>1118,8140=>945,8141=>500,8142=>500,8143=>500,8144=>484,8145=>484, +8146=>484,8147=>484,8150=>484,8151=>484,8152=>468,8153=>468,8154=>714,8155=>662,8157=>500,8158=>500, +8159=>500,8160=>694,8161=>694,8162=>694,8163=>694,8164=>665,8165=>665,8166=>694,8167=>694,8168=>714, +8169=>714,8170=>1019,8171=>953,8172=>910,8173=>500,8174=>500,8175=>500,8178=>952,8179=>952,8180=>952, +8182=>952,8183=>952,8184=>1069,8185=>887,8186=>1101,8187=>911,8188=>890,8189=>500,8190=>500,8192=>500, +8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>696,8200=>348,8201=>200,8202=>100, +8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>415,8209=>415,8210=>696,8213=>1000,8214=>500, +8215=>500,8219=>348,8223=>575,8227=>639,8228=>348,8229=>674,8234=>0,8235=>0,8236=>0,8237=>0, +8238=>0,8239=>200,8241=>1813,8242=>264,8243=>447,8244=>630,8245=>264,8246=>447,8247=>630,8248=>733, +8252=>629,8253=>586,8254=>500,8258=>1023,8260=>167,8261=>473,8262=>473,8263=>1082,8264=>856,8265=>856, +8267=>636,8268=>500,8269=>500,8270=>523,8271=>369,8273=>523,8274=>556,8275=>1000,8279=>813,8287=>222, +8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0, +8303=>0,8304=>438,8305=>239,8308=>438,8309=>438,8310=>438,8311=>438,8312=>438,8313=>438,8314=>528, +8315=>528,8316=>528,8317=>298,8318=>298,8319=>458,8320=>438,8321=>438,8322=>438,8323=>438,8324=>438, +8325=>438,8326=>438,8327=>438,8328=>438,8329=>438,8330=>528,8331=>528,8332=>528,8333=>298,8334=>298, +8336=>466,8337=>444,8338=>467,8339=>375,8340=>444,8358=>696,8367=>1155,8369=>790,8372=>876,8373=>696, +8451=>1198,8457=>1112,8462=>727,8463=>727,8470=>1087,8486=>890,8487=>890,8490=>869,8491=>776,8513=>786, +8514=>576,8515=>637,8516=>760,8523=>903,8531=>1035,8532=>1035,8533=>1035,8534=>1035,8535=>1035,8536=>1035, +8537=>1035,8538=>1035,8539=>1035,8540=>1035,8541=>1035,8542=>1035,8543=>615,8544=>468,8545=>736,8546=>1005, +8547=>1093,8548=>776,8549=>1127,8550=>1396,8551=>1664,8552=>1069,8553=>776,8554=>1078,8555=>1347,8556=>703, +8557=>796,8558=>867,8559=>1107,8560=>380,8561=>760,8562=>1140,8563=>961,8564=>581,8565=>961,8566=>1341, +8567=>1721,8568=>976,8569=>596,8570=>976,8571=>1356,8572=>380,8573=>609,8574=>699,8575=>1058,8576=>1255, +8577=>867,8578=>1268,8579=>796,8580=>609,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838, +8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838, +8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838, +8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>850,8624=>838,8625=>838,8626=>838,8627=>838, +8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838, +8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838, +8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838, +8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838, +8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838, +8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838, +8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838, +8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>641,8706=>534,8707=>620,8708=>620, +8710=>753,8711=>753,8712=>740,8713=>740,8715=>740,8716=>740,8719=>842,8720=>842,8721=>753,8722=>838, +8723=>838,8724=>838,8725=>365,8727=>691,8728=>519,8729=>519,8730=>657,8731=>657,8732=>657,8733=>672, +8734=>833,8735=>838,8736=>838,8739=>324,8740=>607,8741=>529,8742=>773,8743=>812,8744=>812,8745=>838, +8746=>838,8747=>579,8748=>1000,8749=>1391,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838, +8770=>838,8771=>838,8776=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1082,8789=>1082,8800=>838, +8801=>838,8804=>838,8805=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8844=>838, +8845=>838,8846=>838,8847=>838,8848=>838,8849=>838,8850=>838,8851=>838,8852=>838,8853=>838,8854=>838, +8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838, +8865=>838,8866=>884,8867=>884,8868=>960,8869=>960,8870=>616,8871=>616,8872=>884,8873=>884,8874=>884, +8875=>1080,8876=>884,8877=>884,8878=>884,8879=>1080,8901=>398,8962=>834,8968=>473,8969=>473,8970=>473, +8971=>473,8976=>838,8977=>539,8984=>928,8985=>838,8992=>579,8993=>579,8997=>1000,9000=>1443,9085=>1008, +9134=>579,9167=>945,9251=>834,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769, +9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769, +9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769, +9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945, +9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550, +9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502, +9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502, +9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873, +9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527, +9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873, +9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945, +9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873, +9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732, +9727=>769,9728=>896,9784=>896,9785=>896,9786=>896,9787=>896,9788=>896,9791=>614,9792=>731,9793=>731, +9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9824=>896,9825=>896,9826=>896,9827=>896, +9828=>896,9829=>896,9830=>896,9831=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357, +9839=>484,10145=>838,10181=>457,10182=>457,10208=>494,10216=>457,10217=>457,10224=>838,10225=>838,10226=>838, +10227=>838,10228=>1033,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434, +10237=>1434,10238=>1434,10239=>1434,10240=>781,10241=>781,10242=>781,10243=>781,10244=>781,10245=>781,10246=>781, +10247=>781,10248=>781,10249=>781,10250=>781,10251=>781,10252=>781,10253=>781,10254=>781,10255=>781,10256=>781, +10257=>781,10258=>781,10259=>781,10260=>781,10261=>781,10262=>781,10263=>781,10264=>781,10265=>781,10266=>781, +10267=>781,10268=>781,10269=>781,10270=>781,10271=>781,10272=>781,10273=>781,10274=>781,10275=>781,10276=>781, +10277=>781,10278=>781,10279=>781,10280=>781,10281=>781,10282=>781,10283=>781,10284=>781,10285=>781,10286=>781, +10287=>781,10288=>781,10289=>781,10290=>781,10291=>781,10292=>781,10293=>781,10294=>781,10295=>781,10296=>781, +10297=>781,10298=>781,10299=>781,10300=>781,10301=>781,10302=>781,10303=>781,10304=>781,10305=>781,10306=>781, +10307=>781,10308=>781,10309=>781,10310=>781,10311=>781,10312=>781,10313=>781,10314=>781,10315=>781,10316=>781, +10317=>781,10318=>781,10319=>781,10320=>781,10321=>781,10322=>781,10323=>781,10324=>781,10325=>781,10326=>781, +10327=>781,10328=>781,10329=>781,10330=>781,10331=>781,10332=>781,10333=>781,10334=>781,10335=>781,10336=>781, +10337=>781,10338=>781,10339=>781,10340=>781,10341=>781,10342=>781,10343=>781,10344=>781,10345=>781,10346=>781, +10347=>781,10348=>781,10349=>781,10350=>781,10351=>781,10352=>781,10353=>781,10354=>781,10355=>781,10356=>781, +10357=>781,10358=>781,10359=>781,10360=>781,10361=>781,10362=>781,10363=>781,10364=>781,10365=>781,10366=>781, +10367=>781,10368=>781,10369=>781,10370=>781,10371=>781,10372=>781,10373=>781,10374=>781,10375=>781,10376=>781, +10377=>781,10378=>781,10379=>781,10380=>781,10381=>781,10382=>781,10383=>781,10384=>781,10385=>781,10386=>781, +10387=>781,10388=>781,10389=>781,10390=>781,10391=>781,10392=>781,10393=>781,10394=>781,10395=>781,10396=>781, +10397=>781,10398=>781,10399=>781,10400=>781,10401=>781,10402=>781,10403=>781,10404=>781,10405=>781,10406=>781, +10407=>781,10408=>781,10409=>781,10410=>781,10411=>781,10412=>781,10413=>781,10414=>781,10415=>781,10416=>781, +10417=>781,10418=>781,10419=>781,10420=>781,10421=>781,10422=>781,10423=>781,10424=>781,10425=>781,10426=>781, +10427=>781,10428=>781,10429=>781,10430=>781,10431=>781,10432=>781,10433=>781,10434=>781,10435=>781,10436=>781, +10437=>781,10438=>781,10439=>781,10440=>781,10441=>781,10442=>781,10443=>781,10444=>781,10445=>781,10446=>781, +10447=>781,10448=>781,10449=>781,10450=>781,10451=>781,10452=>781,10453=>781,10454=>781,10455=>781,10456=>781, +10457=>781,10458=>781,10459=>781,10460=>781,10461=>781,10462=>781,10463=>781,10464=>781,10465=>781,10466=>781, +10467=>781,10468=>781,10469=>781,10470=>781,10471=>781,10472=>781,10473=>781,10474=>781,10475=>781,10476=>781, +10477=>781,10478=>781,10479=>781,10480=>781,10481=>781,10482=>781,10483=>781,10484=>781,10485=>781,10486=>781, +10487=>781,10488=>781,10489=>781,10490=>781,10491=>781,10492=>781,10493=>781,10494=>781,10495=>781,10496=>838, +10497=>838,10498=>838,10499=>838,10500=>838,10501=>838,10502=>838,10503=>838,10504=>838,10505=>838,10506=>838, +10507=>838,10508=>838,10509=>838,10510=>838,10511=>838,10512=>838,10513=>838,10514=>838,10515=>838,10516=>838, +10517=>838,10518=>838,10519=>838,10520=>838,10521=>838,10522=>838,10523=>838,10524=>838,10525=>838,10526=>838, +10527=>838,10528=>838,10529=>838,10530=>838,10531=>838,10532=>838,10533=>838,10534=>838,10535=>838,10536=>838, +10537=>838,10538=>838,10539=>838,10540=>838,10541=>838,10542=>838,10543=>838,10544=>838,10545=>838,10546=>838, +10547=>838,10548=>838,10549=>838,10550=>838,10551=>838,10552=>838,10553=>838,10554=>838,10555=>838,10556=>838, +10557=>838,10558=>838,10559=>838,10560=>838,10561=>838,10562=>838,10563=>838,10564=>838,10565=>838,10566=>838, +10567=>838,10568=>838,10569=>838,10570=>838,10571=>838,10572=>838,10573=>838,10574=>838,10575=>838,10576=>838, +10577=>838,10578=>838,10579=>838,10580=>838,10581=>838,10582=>838,10583=>838,10584=>838,10585=>838,10586=>838, +10587=>838,10588=>838,10589=>838,10590=>838,10591=>838,10592=>838,10593=>838,10594=>838,10595=>838,10596=>838, +10597=>838,10598=>838,10599=>838,10600=>838,10601=>838,10602=>838,10603=>838,10604=>838,10605=>838,10606=>838, +10607=>838,10608=>838,10609=>838,10610=>838,10611=>838,10612=>838,10613=>838,10614=>838,10615=>1032,10616=>838, +10617=>838,10618=>960,10619=>838,10620=>838,10621=>838,10622=>838,10623=>838,10731=>494,10764=>1782,10765=>610, +10766=>610,10799=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838, +11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838, +11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11364=>831, +11367=>945,11368=>727,11369=>869,11370=>693,11371=>730,11372=>568,11374=>1107,11375=>776,11381=>779,11382=>576, +11383=>905,11385=>571,11386=>667,11388=>313,11389=>489,11520=>773,11521=>635,11522=>804,11523=>658,11524=>788, +11525=>962,11526=>756,11527=>960,11528=>617,11529=>646,11530=>962,11531=>631,11532=>646,11533=>962,11534=>846, +11535=>866,11536=>961,11537=>645,11538=>645,11539=>959,11540=>945,11541=>863,11542=>644,11543=>646,11544=>645, +11545=>649,11546=>688,11547=>936,11548=>982,11549=>681,11550=>676,11551=>852,11552=>1113,11553=>632,11554=>645, +11555=>646,11556=>749,11557=>914,11800=>586,11810=>473,11811=>473,11812=>473,11813=>473,11822=>586,42564=>722, +42565=>563,42566=>468,42567=>380,42576=>1333,42577=>1085,42580=>1287,42581=>1025,42582=>1287,42583=>1029,42760=>500, +42761=>500,42762=>500,42763=>500,42764=>500,42765=>500,42766=>500,42767=>500,42768=>500,42769=>500,42770=>500, +42771=>500,42772=>500,42773=>500,42774=>500,42779=>384,42780=>384,42781=>276,42782=>276,42783=>276,42891=>439, +42892=>306,62464=>726,62465=>737,62466=>786,62467=>1019,62468=>737,62469=>731,62470=>796,62471=>1058,62472=>737, +62473=>737,62474=>1329,62475=>754,62476=>753,62477=>1024,62478=>737,62479=>753,62480=>1070,62481=>818,62482=>870, +62483=>819,62484=>1016,62485=>753,62486=>1008,62487=>752,62488=>760,62489=>753,62490=>800,62491=>753,62492=>760, +62493=>738,62494=>801,62495=>956,62496=>736,62497=>847,62498=>737,62499=>737,62500=>737,62501=>793,62502=>1033, +62504=>904,63172=>563,63173=>667,63174=>699,63175=>727,63176=>1058,63185=>500,63188=>500,64256=>827,64257=>727, +64258=>727,64259=>1108,64260=>1146,64261=>879,64262=>971,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0, +65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0, +65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1113); +$enc=''; +$diff=''; +$file='dejavuserifbi.z'; +$ctg='dejavuserifbi.ctg.z'; +$originalsize=294244; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifbi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifbi.z new file mode 100755 index 00000000..ab7e8b2f Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifbi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensed.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensed.ctg.z new file mode 100755 index 00000000..6e01b837 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensed.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensed.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensed.php new file mode 100755 index 00000000..f4e0f6b9 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensed.php @@ -0,0 +1,313 @@ +928,'Descent'=>-236,'CapHeight'=>5,'Flags'=>32,'FontBBox'=>'[-692 -347 1511 1242]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>286,33=>361,34=>414,35=>754,36=>572,37=>855,38=>801,39=>247,40=>351, +41=>351,42=>450,43=>754,44=>286,45=>304,46=>286,47=>303,48=>572,49=>572,50=>572, +51=>572,52=>572,53=>572,54=>572,55=>572,56=>572,57=>572,58=>303,59=>303,60=>754, +61=>754,62=>754,63=>482,64=>900,65=>650,66=>661,67=>688,68=>721,69=>657,70=>624, +71=>719,72=>785,73=>355,74=>360,75=>672,76=>598,77=>921,78=>787,79=>738,80=>605, +81=>738,82=>677,83=>616,84=>600,85=>758,86=>650,87=>925,88=>641,89=>594,90=>625, +91=>351,92=>303,93=>351,94=>754,95=>450,96=>450,97=>536,98=>576,99=>504,100=>576, +101=>532,102=>333,103=>576,104=>580,105=>288,106=>279,107=>545,108=>288,109=>853,110=>580, +111=>542,112=>576,113=>576,114=>430,115=>461,116=>361,117=>580,118=>508,119=>770,120=>507, +121=>508,122=>474,123=>572,124=>303,125=>572,126=>754,8364=>572,8218=>286,402=>333,8222=>466, +8230=>900,8224=>450,8225=>450,710=>450,8240=>1208,352=>616,8249=>360,338=>1023,381=>625,8216=>286, +8217=>286,8220=>460,8221=>460,8226=>531,8211=>450,8212=>900,732=>450,8482=>900,353=>461,8250=>360, +339=>890,382=>474,376=>594,160=>286,161=>361,162=>572,163=>572,164=>572,165=>572,166=>303, +167=>450,168=>450,169=>900,170=>427,171=>550,172=>754,173=>304,174=>900,175=>450,176=>450, +177=>754,178=>360,179=>360,180=>450,181=>584,182=>572,183=>286,184=>450,185=>360,186=>423, +187=>550,188=>872,189=>872,190=>872,191=>482,192=>650,193=>650,194=>650,195=>650,196=>650, +197=>650,198=>901,199=>688,200=>657,201=>657,202=>657,203=>657,204=>355,205=>355,206=>355, +207=>355,208=>726,209=>787,210=>738,211=>738,212=>738,213=>738,214=>738,215=>754,216=>738, +217=>758,218=>758,219=>758,220=>758,221=>594,222=>608,223=>601,224=>536,225=>536,226=>536, +227=>536,228=>536,229=>536,230=>846,231=>504,232=>532,233=>532,234=>532,235=>532,236=>288, +237=>288,238=>288,239=>288,240=>542,241=>580,242=>542,243=>542,244=>542,245=>542,246=>542, +247=>754,248=>542,249=>580,250=>580,251=>580,252=>580,253=>508,254=>576,255=>508,256=>650, +257=>536,258=>650,259=>536,260=>650,261=>536,262=>688,263=>504,264=>688,265=>504,266=>688, +267=>504,268=>688,269=>504,270=>721,271=>576,272=>726,273=>576,274=>657,275=>532,276=>657, +277=>532,278=>657,279=>532,280=>657,281=>532,282=>657,283=>532,284=>719,285=>576,286=>719, +287=>576,288=>719,289=>576,290=>719,291=>576,292=>785,293=>580,294=>785,295=>580,296=>355, +297=>288,298=>355,299=>288,300=>355,301=>288,302=>355,303=>288,304=>355,305=>288,306=>721, +307=>479,308=>360,309=>279,310=>672,311=>545,312=>545,313=>598,314=>288,315=>598,316=>288, +317=>598,318=>288,319=>598,320=>288,321=>602,322=>292,323=>787,324=>580,325=>787,326=>580, +327=>787,328=>580,329=>779,330=>758,331=>580,332=>738,333=>542,334=>738,335=>542,336=>738, +337=>542,340=>677,341=>430,342=>677,343=>430,344=>677,345=>430,346=>616,347=>461,348=>616, +349=>461,350=>616,351=>461,354=>600,355=>361,356=>600,357=>361,358=>600,359=>361,360=>758, +361=>580,362=>758,363=>580,364=>758,365=>580,366=>758,367=>580,368=>758,369=>580,370=>758, +371=>580,372=>925,373=>770,374=>594,375=>508,377=>625,378=>474,379=>625,380=>474,383=>333, +384=>576,385=>661,386=>661,387=>576,388=>661,389=>576,390=>688,391=>688,392=>504,393=>726, +394=>721,395=>661,396=>576,397=>542,398=>657,399=>738,400=>561,401=>624,403=>719,404=>641, +405=>839,406=>355,407=>355,408=>672,409=>545,410=>288,411=>570,412=>853,413=>787,414=>580, +415=>738,416=>738,417=>542,418=>936,419=>726,420=>605,421=>576,422=>677,423=>616,424=>461, +425=>636,426=>292,427=>361,428=>600,429=>361,430=>600,431=>758,432=>580,433=>746,434=>684, +435=>664,436=>596,437=>625,438=>474,439=>508,440=>508,441=>508,443=>572,444=>618,445=>508, +446=>482,448=>265,449=>443,450=>413,451=>265,452=>1347,453=>1195,454=>1050,455=>958,456=>876, +457=>567,458=>1148,459=>1066,460=>858,461=>650,462=>536,463=>355,464=>288,465=>738,466=>542, +467=>758,468=>580,469=>758,470=>580,471=>758,472=>580,473=>758,474=>580,475=>758,476=>580, +477=>532,478=>650,479=>536,480=>650,481=>536,482=>901,483=>846,484=>763,485=>576,486=>719, +487=>576,488=>672,489=>545,490=>738,491=>542,492=>738,493=>542,494=>508,495=>508,496=>288, +497=>1347,498=>1195,499=>1050,500=>719,501=>576,502=>1038,504=>787,505=>580,506=>650,507=>536, +508=>901,509=>846,510=>738,511=>542,512=>650,513=>536,514=>650,515=>536,516=>657,517=>532, +518=>657,519=>532,520=>355,521=>288,522=>355,523=>288,524=>738,525=>542,526=>738,527=>542, +528=>677,529=>430,530=>677,531=>430,532=>758,533=>580,534=>758,535=>580,536=>616,537=>461, +538=>600,539=>361,540=>564,541=>469,542=>785,543=>580,544=>758,545=>732,548=>625,549=>474, +550=>650,551=>536,552=>657,553=>532,554=>738,555=>542,556=>738,557=>542,558=>738,559=>542, +560=>738,561=>542,562=>594,563=>508,564=>450,565=>748,566=>444,567=>279,568=>864,569=>864, +570=>650,571=>688,572=>504,573=>598,574=>600,575=>461,576=>474,577=>525,578=>417,581=>650, +592=>536,593=>576,594=>576,595=>576,596=>504,597=>504,598=>582,599=>614,600=>532,601=>532, +602=>759,603=>466,604=>458,605=>695,606=>552,607=>283,608=>615,609=>576,610=>489,611=>641, +612=>507,613=>580,614=>580,615=>580,616=>288,617=>353,618=>288,619=>342,620=>409,621=>326, +622=>633,623=>853,624=>853,625=>853,626=>579,627=>624,628=>581,629=>542,630=>711,631=>583, +632=>542,633=>451,634=>451,635=>496,636=>430,637=>430,638=>407,639=>407,640=>534,641=>534, +642=>461,643=>244,644=>333,645=>438,646=>292,647=>361,648=>361,649=>580,650=>558,651=>547, +652=>508,653=>770,654=>508,655=>589,656=>537,657=>504,658=>508,659=>504,660=>482,661=>482, +662=>482,663=>461,664=>738,665=>506,666=>552,667=>588,668=>600,669=>329,670=>545,671=>581, +672=>615,673=>482,674=>482,675=>896,676=>930,677=>898,678=>728,679=>538,680=>704,681=>804, +682=>582,683=>608,684=>538,685=>398,686=>703,687=>690,688=>389,689=>387,690=>237,691=>312, +692=>312,693=>387,694=>352,695=>527,696=>381,697=>250,699=>286,700=>286,701=>286,702=>276, +703=>276,704=>252,705=>252,711=>450,712=>247,713=>450,716=>247,720=>303,721=>303,722=>276, +723=>276,726=>295,728=>450,729=>450,730=>450,731=>450,733=>450,734=>375,736=>402,737=>218, +738=>303,739=>381,740=>252,741=>444,742=>444,743=>444,744=>444,745=>444,750=>435,768=>0, +769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, +779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0, +789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0, +799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0, +809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0, +819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0, +829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,865=>0,880=>666,881=>478,884=>250, +885=>250,890=>450,891=>504,892=>504,893=>504,894=>303,900=>450,901=>450,902=>650,903=>286, +904=>810,905=>935,906=>505,908=>751,910=>808,911=>767,912=>353,913=>650,914=>661,915=>624, +916=>650,917=>657,918=>625,919=>785,920=>738,921=>355,922=>672,923=>650,924=>921,925=>787, +926=>633,927=>738,928=>785,929=>605,931=>636,932=>600,933=>594,934=>738,935=>641,936=>789, +937=>746,938=>355,939=>594,940=>607,941=>466,942=>539,943=>353,944=>547,945=>607,946=>520, +947=>538,948=>542,949=>466,950=>488,951=>539,952=>542,953=>353,954=>563,955=>570,956=>584, +957=>547,958=>496,959=>542,960=>591,961=>529,962=>504,963=>614,964=>498,965=>547,966=>630, +967=>545,968=>706,969=>734,970=>353,971=>547,972=>542,973=>547,974=>734,976=>524,977=>643, +978=>618,979=>787,980=>618,981=>613,982=>734,983=>561,984=>738,985=>542,986=>688,987=>504, +988=>624,989=>417,990=>531,991=>593,992=>704,993=>519,1008=>561,1009=>529,1010=>504,1011=>279, +1012=>738,1013=>504,1014=>504,1015=>608,1016=>576,1017=>688,1018=>921,1019=>637,1020=>529,1021=>688, +1022=>688,1023=>688,1024=>657,1025=>657,1026=>719,1027=>596,1028=>688,1029=>616,1030=>355,1031=>355, +1032=>360,1033=>976,1034=>1006,1035=>785,1036=>696,1037=>785,1038=>650,1039=>785,1040=>681,1041=>661, +1042=>661,1043=>596,1044=>731,1045=>657,1046=>1011,1047=>561,1048=>785,1049=>785,1050=>696,1051=>751, +1052=>921,1053=>785,1054=>738,1055=>785,1056=>605,1057=>688,1058=>600,1059=>650,1060=>747,1061=>641, +1062=>785,1063=>695,1064=>1027,1065=>1027,1066=>715,1067=>885,1068=>606,1069=>688,1070=>1074,1071=>727, +1072=>536,1073=>542,1074=>506,1075=>471,1076=>554,1077=>532,1078=>828,1079=>491,1080=>600,1081=>600, +1082=>563,1083=>571,1084=>700,1085=>600,1086=>542,1087=>600,1088=>576,1089=>504,1090=>498,1091=>529, +1092=>704,1093=>507,1094=>579,1095=>595,1096=>836,1097=>836,1098=>572,1099=>716,1100=>490,1101=>504, +1102=>783,1103=>567,1104=>532,1105=>532,1106=>561,1107=>471,1108=>504,1109=>461,1110=>288,1111=>288, +1112=>279,1113=>759,1114=>774,1115=>580,1116=>563,1117=>600,1118=>529,1119=>590,1122=>686,1123=>542, +1124=>1016,1125=>750,1130=>1011,1131=>828,1136=>849,1137=>812,1138=>738,1139=>497,1140=>773,1141=>610, +1164=>636,1165=>490,1168=>604,1169=>476,1170=>596,1171=>471,1172=>655,1173=>552,1174=>1011,1175=>828, +1176=>572,1177=>483,1178=>696,1179=>545,1182=>696,1183=>563,1184=>801,1185=>645,1186=>785,1187=>577, +1188=>1025,1189=>767,1190=>1084,1191=>847,1194=>688,1195=>504,1196=>600,1197=>498,1198=>594,1199=>508, +1200=>594,1201=>508,1202=>641,1203=>507,1204=>856,1205=>659,1206=>674,1207=>621,1210=>674,1211=>580, +1216=>355,1217=>1011,1218=>828,1219=>672,1220=>545,1223=>785,1224=>600,1227=>674,1228=>600,1231=>288, +1232=>681,1233=>536,1234=>681,1235=>536,1236=>901,1237=>846,1238=>657,1239=>532,1240=>738,1241=>532, +1242=>738,1243=>532,1244=>1011,1245=>828,1246=>561,1247=>491,1248=>508,1249=>508,1250=>785,1251=>600, +1252=>785,1253=>600,1254=>738,1255=>542,1256=>738,1257=>542,1258=>738,1259=>542,1260=>688,1261=>504, +1262=>650,1263=>529,1264=>650,1265=>529,1266=>650,1267=>529,1268=>695,1269=>595,1270=>596,1271=>471, +1272=>885,1273=>716,1296=>561,1297=>491,1298=>751,1299=>571,1300=>1078,1301=>827,1306=>738,1307=>576, +1308=>925,1309=>770,4256=>650,4257=>765,4258=>745,4259=>773,4260=>659,4261=>883,4262=>824,4263=>991, +4264=>510,4265=>675,4266=>866,4267=>847,4268=>668,4269=>967,4270=>807,4271=>746,4272=>936,4273=>660, +4274=>602,4275=>914,4276=>843,4277=>917,4278=>658,4279=>659,4280=>659,4281=>660,4282=>791,4283=>843, +4284=>642,4285=>679,4286=>660,4287=>862,4288=>900,4289=>632,4290=>777,4291=>660,4292=>753,4293=>855, +4304=>486,4305=>514,4306=>530,4307=>750,4308=>505,4309=>501,4310=>556,4311=>774,4312=>503,4313=>491, +4314=>959,4315=>527,4316=>527,4317=>743,4318=>513,4319=>522,4320=>741,4321=>546,4322=>673,4323=>628, +4324=>733,4325=>526,4326=>772,4327=>511,4328=>534,4329=>527,4330=>607,4331=>528,4332=>523,4333=>518, +4334=>550,4335=>615,4336=>514,4337=>542,4338=>514,4339=>514,4340=>513,4341=>584,4342=>797,4343=>563, +4344=>523,4345=>557,4346=>514,4347=>393,4348=>318,7426=>846,7432=>458,7433=>288,7444=>890,7446=>542, +7447=>542,7453=>663,7454=>853,7455=>853,7468=>409,7469=>567,7470=>417,7472=>454,7473=>413,7474=>413, +7475=>453,7476=>494,7477=>224,7478=>227,7479=>423,7480=>376,7481=>580,7482=>496,7483=>496,7484=>464, +7486=>381,7487=>426,7488=>378,7489=>478,7490=>583,7491=>347,7492=>347,7493=>360,7494=>556,7495=>360, +7496=>360,7497=>348,7498=>348,7499=>306,7500=>306,7501=>360,7502=>157,7503=>328,7504=>552,7505=>359, +7506=>347,7507=>312,7508=>347,7509=>347,7510=>360,7511=>222,7512=>359,7513=>417,7514=>552,7515=>335, +7522=>181,7523=>312,7524=>359,7525=>335,7543=>576,7544=>494,7547=>334,7557=>288,7579=>360,7580=>312, +7581=>312,7582=>347,7583=>306,7584=>199,7585=>206,7586=>360,7587=>359,7588=>210,7589=>219,7590=>210, +7591=>210,7592=>207,7593=>158,7594=>157,7595=>330,7596=>552,7597=>552,7598=>366,7599=>364,7600=>359, +7601=>347,7602=>347,7603=>295,7604=>190,7605=>222,7606=>359,7607=>350,7609=>338,7610=>335,7611=>297, +7612=>297,7613=>297,7614=>327,7615=>347,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0, +7680=>650,7681=>536,7682=>661,7683=>576,7684=>661,7685=>576,7686=>661,7687=>576,7688=>688,7689=>504, +7690=>721,7691=>576,7692=>721,7693=>576,7694=>721,7695=>576,7696=>721,7697=>576,7698=>721,7699=>576, +7700=>657,7701=>532,7702=>657,7703=>532,7704=>657,7705=>532,7706=>657,7707=>532,7708=>657,7709=>532, +7710=>624,7711=>333,7712=>719,7713=>576,7714=>785,7715=>580,7716=>785,7717=>580,7718=>785,7719=>580, +7720=>785,7721=>580,7722=>785,7723=>580,7724=>355,7725=>288,7728=>672,7729=>545,7730=>672,7731=>545, +7732=>672,7733=>545,7734=>598,7735=>288,7736=>598,7737=>288,7738=>598,7739=>288,7740=>598,7741=>288, +7742=>921,7743=>853,7744=>921,7745=>853,7746=>921,7747=>853,7748=>787,7749=>580,7750=>787,7751=>580, +7752=>787,7753=>580,7754=>787,7755=>580,7756=>738,7757=>542,7760=>738,7761=>542,7762=>738,7763=>542, +7764=>605,7765=>576,7766=>605,7767=>576,7768=>677,7769=>430,7770=>677,7771=>430,7772=>677,7773=>430, +7774=>677,7775=>430,7776=>616,7777=>461,7778=>616,7779=>461,7784=>616,7785=>461,7786=>600,7787=>361, +7788=>600,7789=>361,7790=>600,7791=>361,7792=>600,7793=>361,7794=>758,7795=>580,7796=>758,7797=>580, +7798=>758,7799=>580,7800=>758,7801=>580,7802=>758,7803=>580,7804=>650,7805=>508,7806=>650,7807=>508, +7808=>925,7809=>770,7810=>925,7811=>770,7812=>925,7813=>770,7814=>925,7815=>770,7816=>925,7817=>770, +7818=>641,7819=>507,7820=>641,7821=>507,7822=>594,7823=>508,7824=>625,7825=>474,7826=>625,7827=>474, +7828=>625,7829=>474,7830=>580,7831=>361,7832=>770,7833=>508,7834=>813,7835=>333,7838=>746,7839=>542, +7840=>650,7841=>536,7842=>650,7843=>536,7852=>650,7853=>536,7854=>650,7855=>536,7856=>650,7857=>536, +7858=>650,7859=>536,7860=>650,7861=>536,7862=>650,7863=>536,7864=>657,7865=>532,7866=>657,7867=>532, +7868=>657,7869=>532,7878=>657,7879=>532,7880=>355,7881=>288,7882=>355,7883=>288,7884=>738,7885=>542, +7886=>738,7887=>542,7896=>738,7897=>542,7908=>758,7909=>580,7910=>758,7911=>580,7922=>594,7923=>508, +7924=>594,7925=>508,7926=>594,7927=>508,7928=>594,7929=>508,7936=>607,7937=>607,7938=>607,7939=>607, +7940=>607,7941=>607,7942=>607,7943=>607,7944=>650,7945=>650,7946=>782,7947=>782,7948=>660,7949=>687, +7950=>650,7951=>650,7952=>483,7953=>483,7954=>483,7955=>483,7956=>483,7957=>483,7960=>768,7961=>757, +7962=>960,7963=>969,7964=>907,7965=>931,7968=>539,7969=>539,7970=>539,7971=>539,7972=>539,7973=>539, +7974=>539,7975=>539,7976=>898,7977=>893,7978=>1090,7979=>1101,7980=>1043,7981=>1064,7982=>988,7983=>985, +7984=>353,7985=>353,7986=>353,7987=>353,7988=>353,7989=>353,7990=>353,7991=>353,7992=>469,7993=>461, +7994=>661,7995=>664,7996=>611,7997=>635,7998=>561,7999=>553,8000=>542,8001=>542,8002=>542,8003=>542, +8004=>542,8005=>542,8008=>738,8009=>773,8010=>1008,8011=>1015,8012=>843,8013=>867,8016=>547,8017=>547, +8018=>547,8019=>547,8020=>547,8021=>547,8022=>547,8023=>547,8025=>765,8027=>971,8029=>939,8031=>857, +8032=>734,8033=>734,8034=>734,8035=>734,8036=>734,8037=>734,8038=>734,8039=>734,8040=>746,8041=>783, +8042=>1018,8043=>1023,8044=>852,8045=>878,8046=>844,8047=>873,8048=>607,8049=>607,8050=>483,8051=>483, +8052=>539,8053=>539,8054=>353,8055=>353,8056=>542,8057=>542,8058=>547,8059=>547,8060=>734,8061=>734, +8064=>607,8065=>607,8066=>607,8067=>607,8068=>607,8069=>607,8070=>607,8071=>607,8072=>650,8073=>650, +8074=>782,8075=>782,8076=>660,8077=>687,8078=>650,8079=>650,8080=>539,8081=>539,8082=>539,8083=>539, +8084=>539,8085=>539,8086=>539,8087=>539,8088=>898,8089=>893,8090=>1090,8091=>1101,8092=>1043,8093=>1064, +8094=>988,8095=>985,8096=>734,8097=>734,8098=>734,8099=>734,8100=>734,8101=>734,8102=>734,8103=>734, +8104=>746,8105=>783,8106=>1018,8107=>1023,8108=>852,8109=>878,8110=>844,8111=>873,8112=>607,8113=>607, +8114=>607,8115=>607,8116=>607,8118=>607,8119=>607,8120=>650,8121=>650,8122=>650,8123=>650,8124=>650, +8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>539,8131=>539,8132=>539,8134=>539,8135=>539, +8136=>820,8137=>810,8138=>956,8139=>935,8140=>785,8141=>450,8142=>450,8143=>450,8144=>353,8145=>353, +8146=>353,8147=>353,8150=>353,8151=>353,8152=>355,8153=>355,8154=>529,8155=>505,8157=>450,8158=>450, +8159=>450,8160=>547,8161=>547,8162=>547,8163=>547,8164=>529,8165=>529,8166=>547,8167=>547,8168=>594, +8169=>594,8170=>829,8171=>808,8172=>711,8173=>450,8174=>450,8175=>450,8178=>734,8179=>734,8180=>734, +8182=>734,8183=>734,8184=>865,8185=>751,8186=>886,8187=>767,8188=>746,8189=>450,8190=>450,8192=>450, +8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>572,8200=>286,8201=>180,8202=>89, +8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>304,8209=>304,8210=>572,8213=>900,8214=>450, +8215=>450,8219=>286,8223=>460,8227=>531,8228=>300,8229=>600,8234=>0,8235=>0,8236=>0,8237=>0, +8238=>0,8239=>180,8241=>1560,8242=>204,8243=>336,8244=>468,8245=>204,8246=>336,8247=>468,8248=>305, +8252=>475,8253=>482,8254=>450,8258=>900,8260=>150,8261=>351,8262=>351,8263=>878,8264=>678,8265=>678, +8267=>572,8268=>450,8269=>450,8270=>450,8271=>303,8273=>450,8274=>404,8275=>900,8279=>597,8287=>200, +8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0, +8303=>0,8304=>360,8305=>181,8308=>360,8309=>360,8310=>360,8311=>360,8312=>360,8313=>360,8314=>475, +8315=>475,8316=>475,8317=>221,8318=>221,8319=>389,8320=>360,8321=>360,8322=>360,8323=>360,8324=>360, +8325=>360,8326=>360,8327=>360,8328=>360,8329=>360,8330=>475,8331=>475,8332=>475,8333=>221,8334=>221, +8336=>347,8337=>348,8338=>347,8339=>381,8340=>348,8358=>594,8367=>951,8369=>635,8372=>702,8373=>572, +8450=>716,8451=>1006,8457=>942,8461=>850,8462=>580,8463=>580,8469=>822,8470=>852,8473=>677,8474=>784, +8477=>748,8484=>657,8486=>746,8487=>746,8490=>672,8491=>650,8508=>659,8509=>594,8510=>639,8511=>850, +8512=>642,8513=>697,8514=>501,8515=>501,8516=>549,8517=>780,8518=>629,8519=>572,8520=>342,8521=>325, +8523=>801,8531=>872,8532=>872,8533=>872,8534=>872,8535=>872,8536=>872,8537=>872,8538=>872,8539=>872, +8540=>872,8541=>872,8542=>872,8543=>511,8544=>355,8545=>531,8546=>707,8547=>870,8548=>650,8549=>883, +8550=>1059,8551=>1234,8552=>838,8553=>641,8554=>839,8555=>1015,8556=>598,8557=>688,8558=>721,8559=>921, +8560=>288,8561=>576,8562=>863,8563=>796,8564=>508,8565=>796,8566=>1084,8567=>1372,8568=>795,8569=>507, +8570=>795,8571=>1083,8572=>288,8573=>504,8574=>576,8575=>853,8576=>1085,8577=>721,8578=>1085,8579=>688, +8580=>504,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754, +8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754, +8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754, +8621=>754,8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754, +8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754, +8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754, +8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754, +8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754, +8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754, +8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754, +8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754, +8701=>754,8702=>754,8703=>754,8704=>543,8706=>465,8707=>488,8708=>488,8710=>628,8711=>628,8712=>666, +8713=>666,8715=>666,8716=>666,8719=>716,8720=>716,8721=>642,8722=>754,8723=>754,8724=>754,8725=>303, +8727=>611,8728=>441,8729=>441,8730=>573,8731=>573,8732=>573,8733=>609,8734=>750,8735=>754,8736=>754, +8739=>262,8740=>431,8741=>416,8742=>570,8743=>659,8744=>659,8745=>754,8746=>754,8747=>469,8748=>766, +8749=>1063,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8770=>754,8771=>754,8776=>754, +8784=>754,8785=>754,8786=>754,8787=>754,8788=>930,8789=>930,8800=>754,8801=>754,8804=>754,8805=>754, +8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8844=>754,8845=>754,8846=>754,8847=>761, +8848=>761,8849=>761,8850=>761,8851=>754,8852=>754,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754, +8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>773,8867=>773, +8868=>846,8869=>846,8870=>510,8871=>510,8872=>773,8873=>773,8874=>773,8875=>927,8876=>773,8877=>773, +8878=>773,8879=>927,8901=>308,8962=>687,8968=>351,8969=>351,8970=>351,8971=>351,8976=>754,8977=>461, +8984=>900,8985=>754,8992=>469,8993=>469,8997=>900,9000=>1299,9085=>827,9134=>469,9167=>850,9251=>687, +9472=>542,9473=>542,9474=>542,9475=>542,9476=>542,9477=>542,9478=>542,9479=>542,9480=>542,9481=>542, +9482=>542,9483=>542,9484=>542,9485=>542,9486=>542,9487=>542,9488=>542,9489=>542,9490=>542,9491=>542, +9492=>542,9493=>542,9494=>542,9495=>542,9496=>542,9497=>542,9498=>542,9499=>542,9500=>542,9501=>542, +9502=>542,9503=>542,9504=>542,9505=>542,9506=>542,9507=>542,9508=>542,9509=>542,9510=>542,9511=>542, +9512=>542,9513=>542,9514=>542,9515=>542,9516=>542,9517=>542,9518=>542,9519=>542,9520=>542,9521=>542, +9522=>542,9523=>542,9524=>542,9525=>542,9526=>542,9527=>542,9528=>542,9529=>542,9530=>542,9531=>542, +9532=>542,9533=>542,9534=>542,9535=>542,9536=>542,9537=>542,9538=>542,9539=>542,9540=>542,9541=>542, +9542=>542,9543=>542,9544=>542,9545=>542,9546=>542,9547=>542,9548=>542,9549=>542,9550=>542,9551=>542, +9552=>542,9553=>542,9554=>542,9555=>542,9556=>542,9557=>542,9558=>542,9559=>542,9560=>542,9561=>542, +9562=>542,9563=>542,9564=>542,9565=>542,9566=>542,9567=>542,9568=>542,9569=>542,9570=>542,9571=>542, +9572=>542,9573=>542,9574=>542,9575=>542,9576=>542,9577=>542,9578=>542,9579=>542,9580=>542,9581=>542, +9582=>542,9583=>542,9584=>542,9585=>542,9586=>542,9587=>542,9588=>542,9589=>542,9590=>542,9591=>542, +9592=>542,9593=>542,9594=>542,9595=>542,9596=>542,9597=>542,9598=>542,9599=>542,9600=>692,9601=>692, +9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692, +9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692, +9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692, +9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850, +9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692, +9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692, +9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692, +9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785, +9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>712,9689=>873,9690=>873,9691=>873, +9692=>348,9693=>348,9694=>348,9695=>348,9696=>785,9697=>785,9698=>692,9699=>692,9700=>692,9701=>692, +9702=>531,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007, +9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692, +9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9784=>807,9785=>807,9786=>807, +9787=>807,9788=>807,9791=>552,9792=>658,9793=>658,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807, +9799=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9833=>424, +9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,10145=>754,10181=>351,10182=>351,10208=>444, +10216=>351,10217=>351,10224=>754,10225=>754,10226=>754,10227=>754,10228=>930,10229=>1290,10230=>1290,10231=>1290, +10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>659,10241=>659, +10242=>659,10243=>659,10244=>659,10245=>659,10246=>659,10247=>659,10248=>659,10249=>659,10250=>659,10251=>659, +10252=>659,10253=>659,10254=>659,10255=>659,10256=>659,10257=>659,10258=>659,10259=>659,10260=>659,10261=>659, +10262=>659,10263=>659,10264=>659,10265=>659,10266=>659,10267=>659,10268=>659,10269=>659,10270=>659,10271=>659, +10272=>659,10273=>659,10274=>659,10275=>659,10276=>659,10277=>659,10278=>659,10279=>659,10280=>659,10281=>659, +10282=>659,10283=>659,10284=>659,10285=>659,10286=>659,10287=>659,10288=>659,10289=>659,10290=>659,10291=>659, +10292=>659,10293=>659,10294=>659,10295=>659,10296=>659,10297=>659,10298=>659,10299=>659,10300=>659,10301=>659, +10302=>659,10303=>659,10304=>659,10305=>659,10306=>659,10307=>659,10308=>659,10309=>659,10310=>659,10311=>659, +10312=>659,10313=>659,10314=>659,10315=>659,10316=>659,10317=>659,10318=>659,10319=>659,10320=>659,10321=>659, +10322=>659,10323=>659,10324=>659,10325=>659,10326=>659,10327=>659,10328=>659,10329=>659,10330=>659,10331=>659, +10332=>659,10333=>659,10334=>659,10335=>659,10336=>659,10337=>659,10338=>659,10339=>659,10340=>659,10341=>659, +10342=>659,10343=>659,10344=>659,10345=>659,10346=>659,10347=>659,10348=>659,10349=>659,10350=>659,10351=>659, +10352=>659,10353=>659,10354=>659,10355=>659,10356=>659,10357=>659,10358=>659,10359=>659,10360=>659,10361=>659, +10362=>659,10363=>659,10364=>659,10365=>659,10366=>659,10367=>659,10368=>659,10369=>659,10370=>659,10371=>659, +10372=>659,10373=>659,10374=>659,10375=>659,10376=>659,10377=>659,10378=>659,10379=>659,10380=>659,10381=>659, +10382=>659,10383=>659,10384=>659,10385=>659,10386=>659,10387=>659,10388=>659,10389=>659,10390=>659,10391=>659, +10392=>659,10393=>659,10394=>659,10395=>659,10396=>659,10397=>659,10398=>659,10399=>659,10400=>659,10401=>659, +10402=>659,10403=>659,10404=>659,10405=>659,10406=>659,10407=>659,10408=>659,10409=>659,10410=>659,10411=>659, +10412=>659,10413=>659,10414=>659,10415=>659,10416=>659,10417=>659,10418=>659,10419=>659,10420=>659,10421=>659, +10422=>659,10423=>659,10424=>659,10425=>659,10426=>659,10427=>659,10428=>659,10429=>659,10430=>659,10431=>659, +10432=>659,10433=>659,10434=>659,10435=>659,10436=>659,10437=>659,10438=>659,10439=>659,10440=>659,10441=>659, +10442=>659,10443=>659,10444=>659,10445=>659,10446=>659,10447=>659,10448=>659,10449=>659,10450=>659,10451=>659, +10452=>659,10453=>659,10454=>659,10455=>659,10456=>659,10457=>659,10458=>659,10459=>659,10460=>659,10461=>659, +10462=>659,10463=>659,10464=>659,10465=>659,10466=>659,10467=>659,10468=>659,10469=>659,10470=>659,10471=>659, +10472=>659,10473=>659,10474=>659,10475=>659,10476=>659,10477=>659,10478=>659,10479=>659,10480=>659,10481=>659, +10482=>659,10483=>659,10484=>659,10485=>659,10486=>659,10487=>659,10488=>659,10489=>659,10490=>659,10491=>659, +10492=>659,10493=>659,10494=>659,10495=>659,10496=>754,10497=>754,10498=>754,10499=>754,10500=>754,10501=>754, +10502=>754,10503=>754,10504=>754,10505=>754,10506=>754,10507=>754,10508=>754,10509=>754,10510=>754,10511=>754, +10512=>754,10513=>754,10514=>754,10515=>754,10516=>754,10517=>754,10518=>754,10519=>754,10520=>754,10521=>754, +10522=>754,10523=>754,10524=>754,10525=>754,10526=>754,10527=>754,10528=>754,10529=>754,10530=>754,10531=>754, +10532=>754,10533=>754,10534=>754,10535=>754,10536=>754,10537=>754,10538=>754,10539=>754,10540=>754,10541=>754, +10542=>754,10543=>754,10544=>754,10545=>754,10546=>754,10547=>754,10548=>754,10549=>754,10550=>754,10551=>754, +10552=>754,10553=>754,10554=>754,10555=>754,10556=>754,10557=>754,10558=>754,10559=>754,10560=>754,10561=>754, +10562=>754,10563=>754,10564=>754,10565=>754,10566=>754,10567=>754,10568=>754,10569=>754,10570=>754,10571=>754, +10572=>754,10573=>754,10574=>754,10575=>754,10576=>754,10577=>754,10578=>754,10579=>754,10580=>754,10581=>754, +10582=>754,10583=>754,10584=>754,10585=>754,10586=>754,10587=>754,10588=>754,10589=>754,10590=>754,10591=>754, +10592=>754,10593=>754,10594=>754,10595=>754,10596=>754,10597=>754,10598=>754,10599=>754,10600=>754,10601=>754, +10602=>754,10603=>754,10604=>754,10605=>754,10606=>754,10607=>754,10608=>754,10609=>754,10610=>754,10611=>754, +10612=>754,10613=>754,10614=>754,10615=>883,10616=>754,10617=>754,10618=>886,10619=>754,10620=>754,10621=>754, +10622=>754,10623=>754,10731=>444,10764=>1361,10765=>469,10766=>469,10799=>754,11008=>754,11009=>754,11010=>754, +11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754, +11021=>754,11022=>754,11023=>754,11024=>754,11025=>754,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692, +11031=>692,11032=>692,11033=>692,11034=>850,11364=>677,11367=>785,11368=>580,11369=>672,11370=>545,11371=>625, +11372=>474,11374=>921,11375=>650,11381=>666,11382=>500,11383=>630,11385=>451,11386=>542,11388=>237,11389=>409, +11520=>695,11521=>571,11522=>569,11523=>592,11524=>568,11525=>866,11526=>680,11527=>864,11528=>555,11529=>581, +11530=>866,11531=>568,11532=>581,11533=>866,11534=>580,11535=>779,11536=>865,11537=>580,11538=>580,11539=>863, +11540=>851,11541=>777,11542=>580,11543=>581,11544=>580,11545=>584,11546=>619,11547=>571,11548=>883,11549=>613, +11550=>608,11551=>766,11552=>861,11553=>569,11554=>580,11555=>582,11556=>674,11557=>822,11800=>482,11810=>351, +11811=>351,11812=>351,11813=>351,11822=>482,42564=>616,42565=>461,42566=>355,42567=>353,42576=>994,42577=>799, +42580=>1074,42581=>783,42582=>1025,42583=>809,42760=>444,42761=>444,42762=>444,42763=>444,42764=>444,42765=>444, +42766=>444,42767=>444,42768=>444,42769=>444,42770=>444,42771=>444,42772=>444,42773=>444,42774=>444,42779=>332, +42780=>332,42781=>228,42782=>228,42783=>228,42891=>361,42892=>247,62464=>588,62465=>598,62466=>642,62467=>853, +62468=>598,62469=>593,62470=>652,62471=>888,62472=>598,62473=>598,62474=>1131,62475=>614,62476=>613,62477=>857, +62478=>598,62479=>613,62480=>898,62481=>671,62482=>718,62483=>672,62484=>850,62485=>613,62486=>842,62487=>612, +62488=>619,62489=>613,62490=>655,62491=>613,62492=>619,62493=>599,62494=>656,62495=>795,62496=>598,62497=>635, +62498=>599,62499=>598,62500=>598,62501=>649,62502=>865,62504=>813,63173=>542,63185=>450,63188=>450,64256=>639, +64257=>600,64258=>600,64259=>925,64260=>927,64261=>694,64262=>839,65024=>0,65025=>0,65026=>0,65027=>0, +65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0, +65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>923); +$enc=''; +$diff=''; +$file='dejavuserifcondensed.z'; +$ctg='dejavuserifcondensed.ctg.z'; +$originalsize=295840; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensed.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensed.z new file mode 100755 index 00000000..8af77724 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensed.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedb.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedb.ctg.z new file mode 100755 index 00000000..c1a3ccbf Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedb.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedb.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedb.php new file mode 100755 index 00000000..1b4fd2a0 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedb.php @@ -0,0 +1,299 @@ +939,'Descent'=>-236,'CapHeight'=>4,'Flags'=>32,'FontBBox'=>'[-752 -389 1616 1235]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>313,33=>395,34=>469,35=>754,36=>626,37=>855,38=>813,39=>275,40=>426, +41=>426,42=>470,43=>754,44=>313,45=>374,46=>313,47=>329,48=>626,49=>626,50=>626, +51=>626,52=>626,53=>626,54=>626,55=>626,56=>626,57=>626,58=>332,59=>332,60=>754, +61=>754,62=>754,63=>527,64=>900,65=>698,66=>760,67=>716,68=>780,69=>686,70=>639, +71=>769,72=>850,73=>421,74=>426,75=>782,76=>633,77=>996,78=>822,79=>784,80=>677, +81=>784,82=>748,83=>650,84=>669,85=>785,86=>698,87=>1011,88=>698,89=>642,90=>657, +91=>426,92=>329,93=>426,94=>754,95=>450,96=>450,97=>583,98=>629,99=>548,100=>629, +101=>572,102=>387,103=>629,104=>654,105=>342,106=>325,107=>624,108=>342,109=>952,110=>654, +111=>600,112=>629,113=>629,114=>474,115=>506,116=>416,117=>654,118=>523,119=>774,120=>536, +121=>523,122=>511,123=>579,124=>327,125=>579,126=>754,8364=>626,8218=>313,402=>387,8222=>518, +8230=>900,8224=>470,8225=>470,710=>450,8240=>1246,352=>650,8249=>360,338=>1062,381=>657,8216=>313, +8217=>313,8220=>518,8221=>518,8226=>575,8211=>450,8212=>900,732=>450,8482=>900,353=>506,8250=>360, +339=>925,382=>511,376=>642,160=>313,161=>395,162=>626,163=>626,164=>572,165=>626,166=>327, +167=>470,168=>450,169=>900,170=>438,171=>563,172=>754,173=>374,174=>900,175=>450,176=>450, +177=>754,178=>394,179=>394,180=>450,181=>659,182=>572,183=>313,184=>450,185=>394,186=>450, +187=>563,188=>938,189=>938,190=>938,191=>527,192=>698,193=>698,194=>698,195=>698,196=>698, +197=>698,198=>931,199=>716,200=>686,201=>686,202=>686,203=>686,204=>421,205=>421,206=>421, +207=>421,208=>787,209=>822,210=>784,211=>784,212=>784,213=>784,214=>784,215=>754,216=>784, +217=>785,218=>785,219=>785,220=>785,221=>642,222=>681,223=>684,224=>583,225=>583,226=>583, +227=>583,228=>583,229=>583,230=>877,231=>548,232=>572,233=>572,234=>572,235=>572,236=>342, +237=>342,238=>342,239=>342,240=>600,241=>654,242=>600,243=>600,244=>600,245=>600,246=>600, +247=>754,248=>600,249=>654,250=>654,251=>654,252=>654,253=>523,254=>629,255=>523,256=>698, +257=>583,258=>698,259=>583,260=>698,261=>583,262=>716,263=>548,264=>716,265=>548,266=>716, +267=>548,268=>716,269=>548,270=>780,271=>629,272=>787,273=>629,274=>686,275=>572,276=>686, +277=>572,278=>686,279=>572,280=>686,281=>572,282=>686,283=>572,284=>769,285=>629,286=>769, +287=>629,288=>769,289=>629,290=>769,291=>629,292=>850,293=>654,294=>850,295=>654,296=>421, +297=>342,298=>421,299=>342,300=>421,301=>342,302=>421,303=>342,304=>421,305=>342,306=>848, +307=>676,308=>426,309=>325,310=>782,311=>624,312=>624,313=>633,314=>342,315=>633,316=>342, +317=>633,318=>342,319=>633,320=>342,321=>639,322=>346,323=>822,324=>654,325=>822,326=>654, +327=>822,328=>654,329=>907,330=>785,331=>654,332=>784,333=>600,334=>784,335=>600,336=>784, +337=>600,340=>748,341=>474,342=>748,343=>474,344=>748,345=>474,346=>650,347=>506,348=>650, +349=>506,350=>650,351=>506,354=>669,355=>416,356=>669,357=>416,358=>669,359=>416,360=>785, +361=>654,362=>785,363=>654,364=>785,365=>654,366=>785,367=>654,368=>785,369=>654,370=>785, +371=>654,372=>1011,373=>774,374=>642,375=>523,377=>657,378=>511,379=>657,380=>511,383=>387, +384=>629,385=>760,386=>769,387=>629,388=>769,389=>629,390=>716,391=>716,392=>548,393=>787, +394=>780,395=>769,396=>629,397=>600,398=>686,399=>784,400=>649,401=>639,403=>769,404=>693, +405=>938,406=>421,407=>421,408=>782,409=>624,410=>342,411=>631,412=>952,413=>822,414=>654, +415=>784,416=>784,417=>600,418=>1080,419=>849,420=>677,421=>629,422=>748,423=>650,424=>506, +425=>636,426=>298,427=>416,428=>669,429=>416,430=>669,431=>785,432=>654,433=>801,434=>801, +435=>642,436=>637,437=>657,438=>511,439=>591,440=>591,441=>591,443=>626,444=>678,445=>511, +446=>482,448=>265,449=>443,450=>413,451=>265,452=>1437,453=>1292,454=>1140,455=>1059,456=>958, +457=>667,458=>1248,459=>1148,460=>980,461=>698,462=>583,463=>421,464=>342,465=>784,466=>600, +467=>785,468=>654,469=>785,470=>654,471=>785,472=>654,473=>785,474=>654,475=>785,476=>654, +477=>572,478=>698,479=>583,480=>698,481=>583,482=>931,483=>877,484=>806,485=>629,486=>769, +487=>629,488=>782,489=>624,490=>784,491=>600,492=>784,493=>600,494=>591,495=>511,496=>342, +497=>1437,498=>1292,499=>1140,500=>769,501=>629,502=>1099,504=>822,505=>654,506=>698,507=>583, +508=>931,509=>877,510=>784,511=>600,512=>698,513=>583,514=>698,515=>583,516=>686,517=>572, +518=>686,519=>572,520=>421,521=>342,522=>421,523=>342,524=>784,525=>600,526=>784,527=>600, +528=>748,529=>474,530=>748,531=>474,532=>785,533=>654,534=>785,535=>654,536=>650,537=>506, +538=>669,539=>416,540=>621,541=>546,542=>850,543=>654,544=>785,545=>711,548=>657,549=>511, +550=>698,551=>583,552=>686,553=>572,554=>784,555=>600,556=>784,557=>600,558=>784,559=>600, +560=>784,561=>600,562=>642,563=>523,564=>516,565=>830,566=>508,567=>325,568=>928,569=>928, +570=>698,571=>716,572=>548,573=>633,574=>669,575=>506,576=>511,577=>594,578=>492,581=>698, +592=>583,593=>629,594=>629,595=>629,596=>548,597=>548,598=>629,599=>657,600=>572,601=>572, +602=>816,603=>547,604=>505,605=>816,606=>647,607=>348,608=>629,609=>629,610=>563,611=>641, +612=>564,613=>654,614=>654,615=>654,616=>342,617=>342,618=>342,619=>368,620=>462,621=>342, +622=>716,623=>952,624=>952,625=>952,626=>654,627=>654,628=>641,629=>600,630=>955,631=>674, +632=>600,633=>514,634=>514,635=>514,636=>474,637=>474,638=>406,639=>438,640=>721,641=>721, +642=>506,643=>298,644=>387,645=>486,646=>298,647=>443,648=>416,649=>654,650=>611,651=>624, +652=>577,653=>816,654=>571,655=>654,656=>511,657=>511,658=>511,659=>511,660=>482,661=>482, +662=>482,663=>490,664=>784,665=>625,666=>647,667=>563,668=>659,669=>345,670=>666,671=>581, +672=>629,673=>482,674=>482,675=>1005,676=>1061,677=>1005,678=>819,679=>643,680=>817,681=>935, +682=>711,683=>716,684=>596,685=>398,686=>552,687=>646,688=>469,689=>466,690=>282,691=>372, +692=>372,693=>432,694=>474,695=>595,696=>436,697=>271,699=>313,700=>313,701=>313,702=>330, +703=>330,704=>282,705=>282,711=>450,712=>254,713=>450,716=>254,720=>332,721=>332,722=>330, +723=>330,726=>353,728=>450,729=>450,730=>450,731=>450,733=>450,734=>375,736=>412,737=>263, +738=>355,739=>427,740=>282,741=>450,742=>450,743=>450,744=>450,745=>450,750=>498,768=>0, +769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, +779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0, +789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0, +799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0, +809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0, +819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0, +829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,865=>0,880=>701,881=>519,884=>271, +885=>271,890=>450,891=>548,892=>548,893=>548,894=>332,900=>450,901=>450,902=>698,903=>313, +904=>852,905=>1006,906=>595,908=>798,910=>857,911=>820,912=>435,913=>698,914=>760,915=>639, +916=>698,917=>686,918=>657,919=>850,920=>784,921=>421,922=>782,923=>698,924=>996,925=>822, +926=>633,927=>784,928=>850,929=>677,931=>636,932=>669,933=>642,934=>784,935=>698,936=>822, +937=>801,938=>421,939=>642,940=>692,941=>547,942=>654,943=>435,944=>624,945=>692,946=>598, +947=>594,948=>600,949=>547,950=>533,951=>654,952=>600,953=>435,954=>674,955=>631,956=>659, +957=>624,958=>533,959=>600,960=>659,961=>598,962=>548,963=>664,964=>605,965=>624,966=>814, +967=>592,968=>847,969=>857,970=>435,971=>624,972=>600,973=>624,974=>857,976=>600,977=>764, +978=>687,979=>872,980=>687,981=>847,982=>857,983=>589,984=>784,985=>600,986=>716,987=>548, +988=>639,989=>475,990=>531,991=>593,992=>716,993=>600,1008=>589,1009=>598,1010=>548,1011=>325, +1012=>784,1013=>548,1014=>548,1015=>681,1016=>629,1017=>716,1018=>996,1019=>774,1020=>623,1021=>716, +1022=>716,1023=>716,1024=>686,1025=>686,1026=>811,1027=>621,1028=>716,1029=>650,1030=>421,1031=>421, +1032=>426,1033=>1081,1034=>1135,1035=>866,1036=>818,1037=>850,1038=>730,1039=>850,1040=>733,1041=>769, +1042=>760,1043=>621,1044=>800,1045=>686,1046=>1181,1047=>649,1048=>850,1049=>850,1050=>818,1051=>795, +1052=>996,1053=>850,1054=>784,1055=>850,1056=>677,1057=>716,1058=>669,1059=>730,1060=>854,1061=>698, +1062=>870,1063=>822,1064=>1141,1065=>1164,1066=>861,1067=>1081,1068=>743,1069=>716,1070=>1158,1071=>793, +1072=>583,1073=>600,1074=>625,1075=>551,1076=>600,1077=>572,1078=>909,1079=>574,1080=>667,1081=>667, +1082=>650,1083=>634,1084=>782,1085=>659,1086=>600,1087=>659,1088=>629,1089=>548,1090=>558,1091=>576, +1092=>812,1093=>536,1094=>665,1095=>659,1096=>967,1097=>974,1098=>690,1099=>902,1100=>611,1101=>548, +1102=>923,1103=>665,1104=>572,1105=>572,1106=>646,1107=>551,1108=>548,1109=>506,1110=>342,1111=>342, +1112=>325,1113=>889,1114=>913,1115=>654,1116=>650,1117=>667,1118=>576,1119=>659,1122=>792,1123=>633, +1124=>1076,1125=>867,1130=>1181,1131=>909,1136=>986,1137=>995,1138=>784,1139=>587,1140=>824,1141=>673, +1164=>761,1165=>606,1168=>630,1169=>556,1170=>621,1171=>551,1172=>781,1173=>645,1174=>1181,1175=>909, +1176=>649,1177=>574,1178=>852,1179=>669,1182=>818,1183=>650,1184=>937,1185=>744,1186=>870,1187=>665, +1188=>1050,1189=>860,1190=>1210,1191=>953,1194=>716,1195=>548,1196=>669,1197=>558,1198=>642,1199=>523, +1200=>642,1201=>523,1202=>779,1203=>584,1204=>919,1205=>726,1206=>835,1207=>665,1210=>819,1211=>654, +1216=>421,1217=>1181,1218=>909,1219=>782,1220=>624,1223=>850,1224=>659,1227=>822,1228=>659,1231=>342, +1232=>733,1233=>583,1234=>733,1235=>583,1236=>931,1237=>877,1238=>686,1239=>572,1240=>784,1241=>572, +1242=>784,1243=>572,1244=>1181,1245=>909,1246=>649,1247=>574,1248=>591,1249=>511,1250=>850,1251=>667, +1252=>850,1253=>667,1254=>784,1255=>600,1256=>784,1257=>600,1258=>784,1259=>600,1260=>716,1261=>548, +1262=>730,1263=>576,1264=>730,1265=>576,1266=>730,1267=>576,1268=>822,1269=>659,1270=>621,1271=>551, +1272=>1081,1273=>902,1296=>649,1297=>574,1298=>795,1299=>634,1300=>1123,1301=>851,1306=>738,1307=>576, +1308=>925,1309=>770,4256=>680,4257=>842,4258=>779,4259=>787,4260=>703,4261=>970,4262=>913,4263=>1091, +4264=>579,4265=>736,4266=>946,4267=>945,4268=>716,4269=>1021,4270=>872,4271=>812,4272=>998,4273=>712, +4274=>680,4275=>968,4276=>878,4277=>959,4278=>729,4279=>750,4280=>739,4281=>750,4282=>817,4283=>969, +4284=>692,4285=>739,4286=>731,4287=>1000,4288=>1010,4289=>721,4290=>803,4291=>722,4292=>792,4293=>957, +4304=>535,4305=>563,4306=>579,4307=>798,4308=>553,4309=>549,4310=>600,4311=>823,4312=>552,4313=>540, +4314=>1008,4315=>576,4316=>576,4317=>791,4318=>561,4319=>571,4320=>790,4321=>599,4322=>702,4323=>676, +4324=>782,4325=>575,4326=>820,4327=>559,4328=>583,4329=>576,4330=>656,4331=>577,4332=>567,4333=>566, +4334=>603,4335=>678,4336=>563,4337=>591,4338=>563,4339=>563,4340=>562,4341=>603,4342=>846,4343=>612, +4344=>572,4345=>605,4346=>562,4347=>529,4348=>318,7426=>846,7432=>458,7433=>288,7444=>890,7446=>600, +7447=>600,7453=>663,7454=>853,7455=>853,7468=>439,7469=>586,7470=>479,7472=>491,7473=>432,7474=>432, +7475=>483,7476=>536,7477=>265,7478=>268,7479=>492,7480=>398,7481=>627,7482=>518,7483=>518,7484=>493, +7486=>426,7487=>471,7488=>409,7489=>422,7490=>494,7491=>419,7492=>419,7493=>448,7494=>591,7495=>448, +7496=>448,7497=>400,7498=>400,7499=>370,7500=>370,7501=>448,7502=>270,7503=>471,7504=>655,7505=>426, +7506=>420,7507=>384,7508=>420,7509=>420,7510=>448,7511=>333,7512=>468,7513=>390,7514=>655,7515=>442, +7522=>215,7523=>372,7524=>468,7525=>442,7543=>576,7544=>536,7547=>342,7557=>342,7579=>448,7580=>384, +7581=>384,7582=>420,7583=>370,7584=>345,7585=>335,7586=>448,7587=>470,7588=>270,7589=>276,7590=>270, +7591=>270,7592=>333,7593=>331,7594=>289,7595=>387,7596=>613,7597=>655,7598=>529,7599=>528,7600=>425, +7601=>420,7602=>470,7603=>360,7604=>348,7605=>333,7606=>468,7607=>427,7609=>439,7610=>442,7611=>371, +7612=>474,7613=>371,7614=>407,7615=>420,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0, +7680=>698,7681=>583,7682=>760,7683=>629,7684=>760,7685=>629,7686=>760,7687=>629,7688=>716,7689=>548, +7690=>780,7691=>629,7692=>780,7693=>629,7694=>780,7695=>629,7696=>780,7697=>629,7698=>780,7699=>629, +7700=>686,7701=>572,7702=>686,7703=>572,7704=>686,7705=>572,7706=>686,7707=>572,7708=>686,7709=>572, +7710=>639,7711=>387,7712=>769,7713=>629,7714=>850,7715=>654,7716=>850,7717=>654,7718=>850,7719=>654, +7720=>850,7721=>654,7722=>850,7723=>654,7724=>421,7725=>342,7728=>782,7729=>624,7730=>782,7731=>624, +7732=>782,7733=>624,7734=>633,7735=>342,7736=>633,7737=>342,7738=>633,7739=>342,7740=>633,7741=>342, +7742=>996,7743=>952,7744=>996,7745=>952,7746=>996,7747=>952,7748=>822,7749=>654,7750=>822,7751=>654, +7752=>822,7753=>654,7754=>822,7755=>654,7756=>784,7757=>600,7760=>784,7761=>600,7762=>784,7763=>600, +7764=>677,7765=>629,7766=>677,7767=>629,7768=>748,7769=>474,7770=>748,7771=>474,7772=>748,7773=>474, +7774=>748,7775=>474,7776=>650,7777=>506,7778=>650,7779=>506,7784=>650,7785=>506,7786=>669,7787=>416, +7788=>669,7789=>416,7790=>669,7791=>416,7792=>669,7793=>416,7794=>785,7795=>654,7796=>785,7797=>654, +7798=>785,7799=>654,7800=>785,7801=>654,7802=>785,7803=>654,7804=>698,7805=>523,7806=>698,7807=>523, +7808=>1011,7809=>774,7810=>1011,7811=>774,7812=>1011,7813=>774,7814=>1011,7815=>774,7816=>1011,7817=>774, +7818=>698,7819=>536,7820=>698,7821=>536,7822=>642,7823=>523,7824=>657,7825=>511,7826=>657,7827=>511, +7828=>657,7829=>511,7830=>654,7831=>416,7832=>774,7833=>523,7834=>913,7835=>387,7838=>852,7839=>600, +7840=>698,7841=>583,7842=>698,7843=>583,7852=>698,7853=>583,7854=>698,7855=>583,7856=>698,7857=>583, +7858=>698,7859=>583,7860=>698,7861=>583,7862=>698,7863=>583,7864=>686,7865=>572,7866=>686,7867=>572, +7868=>686,7869=>572,7878=>686,7879=>572,7880=>421,7881=>342,7882=>421,7883=>342,7884=>784,7885=>600, +7886=>784,7887=>600,7896=>784,7897=>600,7908=>785,7909=>654,7910=>785,7911=>654,7922=>642,7923=>523, +7924=>642,7925=>523,7926=>642,7927=>523,7928=>642,7929=>523,7936=>692,7937=>692,7938=>692,7939=>692, +7940=>692,7941=>692,7942=>692,7943=>692,7944=>698,7945=>698,7946=>880,7947=>880,7948=>748,7949=>764, +7950=>698,7951=>698,7952=>547,7953=>547,7954=>547,7955=>547,7956=>547,7957=>547,7960=>826,7961=>817, +7962=>1052,7963=>1052,7964=>984,7965=>1007,7968=>654,7969=>654,7970=>654,7971=>654,7972=>654,7973=>654, +7974=>654,7975=>654,7976=>990,7977=>984,7978=>1222,7979=>1225,7980=>1151,7981=>1177,7982=>1077,7983=>1074, +7984=>435,7985=>435,7986=>435,7987=>435,7988=>435,7989=>435,7990=>435,7991=>435,7992=>566,7993=>555, +7994=>790,7995=>792,7996=>719,7997=>748,7998=>650,7999=>642,8000=>600,8001=>600,8002=>600,8003=>600, +8004=>600,8005=>600,8008=>810,8009=>841,8010=>1116,8011=>1113,8012=>931,8013=>959,8016=>624,8017=>624, +8018=>624,8019=>624,8020=>624,8021=>624,8022=>624,8023=>624,8025=>830,8027=>1067,8029=>1020,8031=>917, +8032=>857,8033=>857,8034=>857,8035=>857,8036=>857,8037=>857,8038=>857,8039=>857,8040=>838,8041=>867, +8042=>1141,8043=>1146,8044=>949,8045=>979,8046=>920,8047=>954,8048=>692,8049=>692,8050=>547,8051=>547, +8052=>654,8053=>654,8054=>435,8055=>435,8056=>600,8057=>600,8058=>624,8059=>624,8060=>857,8061=>857, +8064=>692,8065=>692,8066=>692,8067=>692,8068=>692,8069=>692,8070=>692,8071=>692,8072=>698,8073=>698, +8074=>880,8075=>880,8076=>748,8077=>764,8078=>698,8079=>698,8080=>654,8081=>654,8082=>654,8083=>654, +8084=>654,8085=>654,8086=>654,8087=>654,8088=>990,8089=>984,8090=>1222,8091=>1225,8092=>1151,8093=>1177, +8094=>1077,8095=>1074,8096=>857,8097=>857,8098=>857,8099=>857,8100=>857,8101=>857,8102=>857,8103=>857, +8104=>838,8105=>867,8106=>1141,8107=>1146,8108=>949,8109=>979,8110=>920,8111=>954,8112=>692,8113=>692, +8114=>692,8115=>692,8116=>692,8118=>692,8119=>692,8120=>698,8121=>698,8122=>729,8123=>698,8124=>698, +8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>654,8131=>654,8132=>654,8134=>654,8135=>654, +8136=>899,8137=>852,8138=>1072,8139=>1006,8140=>850,8141=>450,8142=>450,8143=>450,8144=>435,8145=>435, +8146=>435,8147=>435,8150=>435,8151=>435,8152=>421,8153=>421,8154=>642,8155=>595,8157=>450,8158=>450, +8159=>450,8160=>624,8161=>624,8162=>624,8163=>624,8164=>598,8165=>598,8166=>624,8167=>624,8168=>642, +8169=>642,8170=>917,8171=>857,8172=>819,8173=>450,8174=>450,8175=>450,8178=>857,8179=>857,8180=>857, +8182=>857,8183=>857,8184=>962,8185=>798,8186=>991,8187=>820,8188=>801,8189=>450,8190=>450,8192=>450, +8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>626,8200=>313,8201=>180,8202=>89, +8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>374,8209=>374,8210=>626,8213=>900,8214=>450, +8215=>450,8219=>313,8223=>518,8227=>575,8228=>313,8229=>606,8234=>0,8235=>0,8236=>0,8237=>0, +8238=>0,8239=>180,8241=>1638,8242=>237,8243=>402,8244=>567,8245=>237,8246=>402,8247=>567,8248=>659, +8252=>566,8253=>527,8254=>450,8258=>920,8260=>150,8261=>426,8262=>426,8263=>974,8264=>770,8265=>770, +8267=>572,8268=>450,8269=>450,8270=>470,8271=>332,8273=>470,8274=>500,8275=>900,8279=>731,8287=>200, +8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0, +8303=>0,8304=>394,8305=>215,8308=>394,8309=>394,8310=>394,8311=>394,8312=>394,8313=>394,8314=>475, +8315=>475,8316=>475,8317=>268,8318=>268,8319=>467,8320=>394,8321=>394,8322=>394,8323=>394,8324=>394, +8325=>394,8326=>394,8327=>394,8328=>394,8329=>394,8330=>475,8331=>475,8332=>475,8333=>268,8334=>268, +8336=>419,8337=>400,8338=>420,8339=>427,8340=>400,8358=>626,8367=>1039,8369=>710,8372=>788,8373=>626, +8451=>1078,8457=>1001,8462=>654,8463=>654,8470=>978,8486=>801,8487=>801,8490=>782,8491=>698,8513=>697, +8514=>501,8515=>573,8516=>684,8523=>813,8531=>932,8532=>932,8533=>932,8534=>932,8535=>932,8536=>932, +8537=>932,8538=>932,8539=>932,8540=>932,8541=>932,8542=>932,8543=>554,8544=>421,8545=>663,8546=>904, +8547=>984,8548=>698,8549=>1014,8550=>1256,8551=>1498,8552=>962,8553=>698,8554=>970,8555=>1212,8556=>633, +8557=>716,8558=>780,8559=>996,8560=>342,8561=>684,8562=>1025,8563=>865,8564=>523,8565=>865,8566=>1207, +8567=>1548,8568=>878,8569=>536,8570=>878,8571=>1220,8572=>342,8573=>548,8574=>629,8575=>952,8576=>1129, +8577=>780,8578=>1141,8579=>716,8580=>548,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754, +8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754, +8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754, +8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>765,8624=>754,8625=>754,8626=>754,8627=>754, +8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754, +8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754, +8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754, +8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754, +8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754, +8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754, +8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754, +8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>577,8706=>480,8707=>558,8708=>558, +8710=>677,8711=>677,8712=>666,8713=>666,8715=>666,8716=>666,8719=>757,8720=>757,8721=>677,8722=>754, +8723=>754,8724=>754,8725=>329,8727=>622,8728=>466,8729=>466,8730=>591,8731=>591,8732=>591,8733=>604, +8734=>750,8735=>754,8736=>754,8739=>292,8740=>546,8741=>476,8742=>696,8743=>730,8744=>730,8745=>754, +8746=>754,8747=>521,8748=>900,8749=>1252,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754, +8770=>754,8771=>754,8776=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>974,8789=>974,8800=>754, +8801=>754,8804=>754,8805=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8844=>754, +8845=>754,8846=>754,8847=>754,8848=>754,8849=>754,8850=>754,8851=>754,8852=>754,8853=>754,8854=>754, +8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754, +8865=>754,8866=>795,8867=>795,8868=>864,8869=>864,8870=>554,8871=>554,8872=>795,8873=>795,8874=>795, +8875=>971,8876=>795,8877=>795,8878=>795,8879=>971,8901=>358,8962=>751,8968=>426,8969=>426,8970=>426, +8971=>426,8976=>754,8977=>484,8984=>835,8985=>754,8992=>521,8993=>521,8997=>900,9000=>1299,9085=>907, +9134=>521,9167=>850,9251=>751,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692, +9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692, +9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692, +9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850, +9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495, +9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452, +9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452, +9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785, +9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474, +9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>785, +9697=>785,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850, +9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785, +9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659, +9727=>692,9728=>807,9784=>807,9785=>807,9786=>807,9787=>807,9788=>807,9791=>552,9792=>658,9793=>658, +9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9824=>807,9825=>807,9826=>807,9827=>807, +9828=>807,9829=>807,9830=>807,9831=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321, +9839=>435,10145=>754,10181=>411,10182=>411,10208=>444,10216=>411,10217=>411,10224=>754,10225=>754,10226=>754, +10227=>754,10228=>930,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290, +10237=>1290,10238=>1290,10239=>1290,10240=>703,10241=>703,10242=>703,10243=>703,10244=>703,10245=>703,10246=>703, +10247=>703,10248=>703,10249=>703,10250=>703,10251=>703,10252=>703,10253=>703,10254=>703,10255=>703,10256=>703, +10257=>703,10258=>703,10259=>703,10260=>703,10261=>703,10262=>703,10263=>703,10264=>703,10265=>703,10266=>703, +10267=>703,10268=>703,10269=>703,10270=>703,10271=>703,10272=>703,10273=>703,10274=>703,10275=>703,10276=>703, +10277=>703,10278=>703,10279=>703,10280=>703,10281=>703,10282=>703,10283=>703,10284=>703,10285=>703,10286=>703, +10287=>703,10288=>703,10289=>703,10290=>703,10291=>703,10292=>703,10293=>703,10294=>703,10295=>703,10296=>703, +10297=>703,10298=>703,10299=>703,10300=>703,10301=>703,10302=>703,10303=>703,10304=>703,10305=>703,10306=>703, +10307=>703,10308=>703,10309=>703,10310=>703,10311=>703,10312=>703,10313=>703,10314=>703,10315=>703,10316=>703, +10317=>703,10318=>703,10319=>703,10320=>703,10321=>703,10322=>703,10323=>703,10324=>703,10325=>703,10326=>703, +10327=>703,10328=>703,10329=>703,10330=>703,10331=>703,10332=>703,10333=>703,10334=>703,10335=>703,10336=>703, +10337=>703,10338=>703,10339=>703,10340=>703,10341=>703,10342=>703,10343=>703,10344=>703,10345=>703,10346=>703, +10347=>703,10348=>703,10349=>703,10350=>703,10351=>703,10352=>703,10353=>703,10354=>703,10355=>703,10356=>703, +10357=>703,10358=>703,10359=>703,10360=>703,10361=>703,10362=>703,10363=>703,10364=>703,10365=>703,10366=>703, +10367=>703,10368=>703,10369=>703,10370=>703,10371=>703,10372=>703,10373=>703,10374=>703,10375=>703,10376=>703, +10377=>703,10378=>703,10379=>703,10380=>703,10381=>703,10382=>703,10383=>703,10384=>703,10385=>703,10386=>703, +10387=>703,10388=>703,10389=>703,10390=>703,10391=>703,10392=>703,10393=>703,10394=>703,10395=>703,10396=>703, +10397=>703,10398=>703,10399=>703,10400=>703,10401=>703,10402=>703,10403=>703,10404=>703,10405=>703,10406=>703, +10407=>703,10408=>703,10409=>703,10410=>703,10411=>703,10412=>703,10413=>703,10414=>703,10415=>703,10416=>703, +10417=>703,10418=>703,10419=>703,10420=>703,10421=>703,10422=>703,10423=>703,10424=>703,10425=>703,10426=>703, +10427=>703,10428=>703,10429=>703,10430=>703,10431=>703,10432=>703,10433=>703,10434=>703,10435=>703,10436=>703, +10437=>703,10438=>703,10439=>703,10440=>703,10441=>703,10442=>703,10443=>703,10444=>703,10445=>703,10446=>703, +10447=>703,10448=>703,10449=>703,10450=>703,10451=>703,10452=>703,10453=>703,10454=>703,10455=>703,10456=>703, +10457=>703,10458=>703,10459=>703,10460=>703,10461=>703,10462=>703,10463=>703,10464=>703,10465=>703,10466=>703, +10467=>703,10468=>703,10469=>703,10470=>703,10471=>703,10472=>703,10473=>703,10474=>703,10475=>703,10476=>703, +10477=>703,10478=>703,10479=>703,10480=>703,10481=>703,10482=>703,10483=>703,10484=>703,10485=>703,10486=>703, +10487=>703,10488=>703,10489=>703,10490=>703,10491=>703,10492=>703,10493=>703,10494=>703,10495=>703,10496=>754, +10497=>754,10498=>754,10499=>754,10500=>754,10501=>754,10502=>754,10503=>754,10504=>754,10505=>754,10506=>754, +10507=>754,10508=>754,10509=>754,10510=>754,10511=>754,10512=>754,10513=>754,10514=>754,10515=>754,10516=>754, +10517=>754,10518=>754,10519=>754,10520=>754,10521=>754,10522=>754,10523=>754,10524=>754,10525=>754,10526=>754, +10527=>754,10528=>754,10529=>754,10530=>754,10531=>754,10532=>754,10533=>754,10534=>754,10535=>754,10536=>754, +10537=>754,10538=>754,10539=>754,10540=>754,10541=>754,10542=>754,10543=>754,10544=>754,10545=>754,10546=>754, +10547=>754,10548=>754,10549=>754,10550=>754,10551=>754,10552=>754,10553=>754,10554=>754,10555=>754,10556=>754, +10557=>754,10558=>754,10559=>754,10560=>754,10561=>754,10562=>754,10563=>754,10564=>754,10565=>754,10566=>754, +10567=>754,10568=>754,10569=>754,10570=>754,10571=>754,10572=>754,10573=>754,10574=>754,10575=>754,10576=>754, +10577=>754,10578=>754,10579=>754,10580=>754,10581=>754,10582=>754,10583=>754,10584=>754,10585=>754,10586=>754, +10587=>754,10588=>754,10589=>754,10590=>754,10591=>754,10592=>754,10593=>754,10594=>754,10595=>754,10596=>754, +10597=>754,10598=>754,10599=>754,10600=>754,10601=>754,10602=>754,10603=>754,10604=>754,10605=>754,10606=>754, +10607=>754,10608=>754,10609=>754,10610=>754,10611=>754,10612=>754,10613=>754,10614=>754,10615=>929,10616=>754, +10617=>754,10618=>864,10619=>754,10620=>754,10621=>754,10622=>754,10623=>754,10731=>444,10764=>1604,10765=>549, +10766=>549,10799=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754, +11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754, +11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11364=>748, +11367=>850,11368=>654,11369=>782,11370=>624,11371=>657,11372=>511,11374=>996,11375=>698,11381=>701,11382=>541, +11383=>814,11385=>514,11386=>600,11388=>282,11389=>439,11520=>695,11521=>571,11522=>723,11523=>592,11524=>708, +11525=>866,11526=>680,11527=>864,11528=>555,11529=>581,11530=>866,11531=>567,11532=>581,11533=>866,11534=>761, +11535=>779,11536=>865,11537=>580,11538=>580,11539=>863,11540=>851,11541=>777,11542=>580,11543=>581,11544=>580, +11545=>584,11546=>619,11547=>842,11548=>883,11549=>613,11550=>608,11551=>766,11552=>1002,11553=>569,11554=>580, +11555=>582,11556=>674,11557=>822,11800=>527,11810=>426,11811=>426,11812=>426,11813=>426,11822=>527,42564=>650, +42565=>506,42566=>421,42567=>342,42576=>1200,42577=>982,42580=>1158,42581=>923,42582=>1158,42583=>935,42760=>450, +42761=>450,42762=>450,42763=>450,42764=>450,42765=>450,42766=>450,42767=>450,42768=>450,42769=>450,42770=>450, +42771=>450,42772=>450,42773=>450,42774=>450,42779=>346,42780=>346,42781=>249,42782=>249,42783=>249,42891=>395, +42892=>275,62464=>634,62465=>645,62466=>688,62467=>898,62468=>645,62469=>639,62470=>698,62471=>934,62472=>645, +62473=>645,62474=>1178,62475=>660,62476=>659,62477=>903,62478=>645,62479=>659,62480=>945,62481=>717,62482=>765, +62483=>719,62484=>896,62485=>659,62486=>888,62487=>658,62488=>665,62489=>659,62490=>702,62491=>659,62492=>665, +62493=>646,62494=>702,62495=>842,62496=>644,62497=>743,62498=>645,62499=>645,62500=>645,62501=>695,62502=>911, +62504=>813,63173=>600,63185=>450,63188=>450,64256=>738,64257=>654,64258=>654,64259=>1007,64260=>1005,64261=>784, +64262=>874,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0, +65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0, +65532=>0,65533=>1002); +$enc=''; +$diff=''; +$file='dejavuserifcondensedb.z'; +$ctg='dejavuserifcondensedb.ctg.z'; +$originalsize=282092; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedb.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedb.z new file mode 100755 index 00000000..b84198dc Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedb.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedbi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedbi.ctg.z new file mode 100755 index 00000000..d237ae7e Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedbi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedbi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedbi.php new file mode 100755 index 00000000..eec16b1d --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedbi.php @@ -0,0 +1,299 @@ +939,'Descent'=>-236,'CapHeight'=>-48,'Flags'=>96,'FontBBox'=>'[-815 -389 1584 1235]','ItalicAngle'=>-11,'StemV'=>120,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>313,33=>395,34=>469,35=>754,36=>626,37=>855,38=>813,39=>275,40=>426, +41=>426,42=>470,43=>754,44=>313,45=>374,46=>313,47=>329,48=>626,49=>626,50=>626, +51=>626,52=>626,53=>626,54=>626,55=>626,56=>626,57=>626,58=>332,59=>332,60=>754, +61=>754,62=>754,63=>527,64=>900,65=>698,66=>760,67=>716,68=>780,69=>686,70=>639, +71=>769,72=>850,73=>421,74=>426,75=>782,76=>633,77=>996,78=>822,79=>784,80=>677, +81=>784,82=>748,83=>650,84=>669,85=>785,86=>698,87=>1011,88=>698,89=>642,90=>657, +91=>426,92=>329,93=>426,94=>754,95=>450,96=>450,97=>583,98=>629,99=>548,100=>629, +101=>572,102=>387,103=>629,104=>654,105=>342,106=>325,107=>624,108=>342,109=>952,110=>654, +111=>600,112=>629,113=>629,114=>474,115=>506,116=>416,117=>654,118=>523,119=>774,120=>536, +121=>523,122=>511,123=>579,124=>327,125=>579,126=>754,8364=>626,8218=>313,402=>387,8222=>518, +8230=>900,8224=>470,8225=>470,710=>450,8240=>1246,352=>650,8249=>360,338=>1062,381=>657,8216=>313, +8217=>313,8220=>518,8221=>518,8226=>575,8211=>450,8212=>900,732=>450,8482=>900,353=>506,8250=>360, +339=>925,382=>511,376=>642,160=>313,161=>395,162=>626,163=>626,164=>572,165=>626,166=>327, +167=>470,168=>450,169=>900,170=>438,171=>563,172=>754,173=>374,174=>900,175=>450,176=>450, +177=>754,178=>394,179=>394,180=>450,181=>659,182=>572,183=>313,184=>450,185=>394,186=>450, +187=>563,188=>938,189=>938,190=>938,191=>527,192=>698,193=>698,194=>698,195=>698,196=>698, +197=>698,198=>931,199=>716,200=>686,201=>686,202=>686,203=>686,204=>421,205=>421,206=>421, +207=>421,208=>787,209=>822,210=>784,211=>784,212=>784,213=>784,214=>784,215=>754,216=>784, +217=>785,218=>785,219=>785,220=>785,221=>642,222=>681,223=>684,224=>583,225=>583,226=>583, +227=>583,228=>583,229=>583,230=>838,231=>548,232=>572,233=>572,234=>572,235=>572,236=>342, +237=>342,238=>342,239=>342,240=>600,241=>654,242=>600,243=>600,244=>600,245=>600,246=>600, +247=>754,248=>600,249=>654,250=>654,251=>654,252=>654,253=>523,254=>629,255=>523,256=>698, +257=>583,258=>698,259=>583,260=>698,261=>583,262=>716,263=>548,264=>716,265=>548,266=>716, +267=>548,268=>716,269=>548,270=>780,271=>629,272=>787,273=>629,274=>686,275=>572,276=>686, +277=>572,278=>686,279=>572,280=>686,281=>572,282=>686,283=>572,284=>769,285=>629,286=>769, +287=>629,288=>769,289=>629,290=>769,291=>629,292=>850,293=>654,294=>850,295=>654,296=>421, +297=>342,298=>421,299=>342,300=>421,301=>342,302=>421,303=>342,304=>421,305=>342,306=>848, +307=>676,308=>426,309=>325,310=>782,311=>624,312=>624,313=>633,314=>342,315=>633,316=>342, +317=>633,318=>457,319=>633,320=>501,321=>639,322=>346,323=>822,324=>654,325=>822,326=>654, +327=>822,328=>654,329=>907,330=>785,331=>654,332=>784,333=>600,334=>784,335=>600,336=>784, +337=>600,340=>748,341=>474,342=>748,343=>474,344=>748,345=>474,346=>650,347=>506,348=>650, +349=>506,350=>650,351=>506,354=>669,355=>416,356=>669,357=>416,358=>669,359=>416,360=>785, +361=>654,362=>785,363=>654,364=>785,365=>654,366=>785,367=>654,368=>785,369=>654,370=>785, +371=>654,372=>1011,373=>774,374=>642,375=>523,377=>657,378=>511,379=>657,380=>511,383=>387, +384=>629,385=>760,386=>769,387=>629,388=>769,389=>629,390=>716,391=>716,392=>548,393=>787, +394=>780,395=>769,396=>629,397=>600,398=>686,399=>784,400=>649,401=>639,403=>769,404=>693, +405=>938,406=>421,407=>421,408=>782,409=>624,410=>342,411=>631,412=>952,413=>822,414=>654, +415=>784,416=>784,417=>600,418=>1080,419=>849,420=>677,421=>629,422=>748,423=>650,424=>506, +425=>636,426=>298,427=>416,428=>669,429=>416,430=>669,431=>785,432=>654,433=>801,434=>801, +435=>642,436=>628,437=>657,438=>511,439=>591,440=>591,441=>591,443=>626,444=>678,445=>511, +446=>482,448=>265,449=>443,450=>413,451=>265,452=>1437,453=>1292,454=>1140,455=>1059,456=>958, +457=>667,458=>1248,459=>1148,460=>980,461=>698,462=>583,463=>421,464=>342,465=>784,466=>600, +467=>785,468=>654,469=>785,470=>654,471=>785,472=>654,473=>785,474=>654,475=>785,476=>654, +477=>572,478=>698,479=>583,480=>698,481=>583,482=>931,483=>877,484=>806,485=>629,486=>769, +487=>629,488=>782,489=>624,490=>784,491=>600,492=>784,493=>600,494=>591,495=>511,496=>325, +497=>1437,498=>1292,499=>1140,500=>769,501=>629,502=>1099,504=>822,505=>654,506=>698,507=>583, +508=>931,509=>838,510=>784,511=>600,512=>698,513=>583,514=>698,515=>583,516=>686,517=>572, +518=>686,519=>572,520=>421,521=>342,522=>421,523=>342,524=>784,525=>600,526=>784,527=>600, +528=>748,529=>474,530=>748,531=>474,532=>785,533=>654,534=>785,535=>654,536=>650,537=>506, +538=>669,539=>416,540=>621,541=>546,542=>850,543=>654,544=>785,545=>711,548=>657,549=>511, +550=>698,551=>583,552=>686,553=>572,554=>784,555=>600,556=>784,557=>600,558=>784,559=>600, +560=>784,561=>600,562=>642,563=>523,564=>516,565=>830,566=>508,567=>325,568=>928,569=>928, +570=>698,571=>716,572=>548,573=>633,574=>669,575=>506,576=>511,577=>594,578=>492,581=>698, +592=>583,593=>629,594=>629,595=>629,596=>548,597=>548,598=>629,599=>657,600=>572,601=>572, +602=>816,603=>547,604=>505,605=>816,606=>647,607=>348,608=>629,609=>629,610=>563,611=>641, +612=>564,613=>654,614=>654,615=>654,616=>342,617=>342,618=>342,619=>368,620=>462,621=>342, +622=>716,623=>952,624=>952,625=>952,626=>654,627=>654,628=>641,629=>600,630=>955,631=>674, +632=>600,633=>514,634=>514,635=>514,636=>474,637=>474,638=>406,639=>438,640=>721,641=>721, +642=>506,643=>298,644=>387,645=>486,646=>298,647=>443,648=>416,649=>654,650=>611,651=>624, +652=>523,653=>774,654=>571,655=>654,656=>511,657=>511,658=>511,659=>511,660=>482,661=>482, +662=>482,663=>490,664=>784,665=>625,666=>647,667=>563,668=>659,669=>345,670=>666,671=>581, +672=>629,673=>482,674=>482,675=>1005,676=>1061,677=>1005,678=>819,679=>643,680=>817,681=>935, +682=>711,683=>716,684=>596,685=>398,686=>552,687=>646,688=>469,689=>466,690=>282,691=>372, +692=>372,693=>432,694=>474,695=>488,696=>329,697=>271,699=>313,700=>313,701=>313,702=>330, +703=>330,704=>282,705=>282,711=>450,712=>254,713=>450,716=>254,720=>332,721=>332,722=>330, +723=>330,726=>353,728=>450,729=>450,730=>450,731=>450,733=>450,734=>375,736=>403,737=>263, +738=>355,739=>338,740=>282,741=>450,742=>450,743=>450,744=>450,745=>450,750=>498,768=>0, +769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, +779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0, +789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0, +799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0, +809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0, +819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0, +829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,865=>0,880=>701,881=>519,884=>271, +885=>271,890=>450,891=>548,892=>548,893=>548,894=>332,900=>450,901=>450,902=>698,903=>313, +904=>852,905=>1022,906=>595,908=>798,910=>857,911=>820,912=>435,913=>698,914=>760,915=>639, +916=>698,917=>686,918=>657,919=>850,920=>784,921=>421,922=>782,923=>698,924=>996,925=>822, +926=>633,927=>784,928=>850,929=>677,931=>636,932=>669,933=>642,934=>784,935=>698,936=>822, +937=>801,938=>421,939=>642,940=>692,941=>547,942=>654,943=>435,944=>624,945=>692,946=>598, +947=>594,948=>600,949=>547,950=>533,951=>654,952=>600,953=>435,954=>674,955=>631,956=>659, +957=>624,958=>533,959=>600,960=>659,961=>598,962=>548,963=>664,964=>605,965=>624,966=>814, +967=>592,968=>847,969=>857,970=>435,971=>624,972=>600,973=>624,974=>857,976=>600,977=>764, +978=>687,979=>872,980=>687,981=>847,982=>857,983=>589,984=>784,985=>600,986=>716,987=>548, +988=>639,989=>475,990=>531,991=>593,992=>716,993=>600,1008=>589,1009=>598,1010=>548,1011=>325, +1012=>784,1013=>548,1014=>548,1015=>681,1016=>629,1017=>716,1018=>996,1019=>774,1020=>623,1021=>716, +1022=>716,1023=>716,1024=>686,1025=>686,1026=>811,1027=>621,1028=>716,1029=>650,1030=>421,1031=>421, +1032=>426,1033=>1081,1034=>1135,1035=>866,1036=>818,1037=>850,1038=>730,1039=>850,1040=>733,1041=>769, +1042=>760,1043=>621,1044=>800,1045=>686,1046=>1181,1047=>649,1048=>850,1049=>850,1050=>818,1051=>795, +1052=>996,1053=>850,1054=>784,1055=>850,1056=>677,1057=>716,1058=>669,1059=>730,1060=>854,1061=>698, +1062=>870,1063=>822,1064=>1141,1065=>1164,1066=>861,1067=>1081,1068=>743,1069=>716,1070=>1158,1071=>793, +1072=>583,1073=>650,1074=>591,1075=>506,1076=>625,1077=>572,1078=>1175,1079=>574,1080=>654,1081=>654, +1082=>609,1083=>659,1084=>855,1085=>656,1086=>600,1087=>654,1088=>629,1089=>548,1090=>952,1091=>538, +1092=>812,1093=>536,1094=>723,1095=>643,1096=>952,1097=>1021,1098=>654,1099=>916,1100=>593,1101=>580, +1102=>901,1103=>716,1104=>572,1105=>572,1106=>646,1107=>506,1108=>548,1109=>506,1110=>342,1111=>342, +1112=>325,1113=>913,1114=>910,1115=>654,1116=>609,1117=>654,1118=>538,1119=>654,1122=>792,1123=>945, +1124=>1076,1125=>867,1130=>1181,1131=>909,1136=>986,1137=>995,1138=>784,1139=>587,1140=>824,1141=>673, +1164=>761,1165=>606,1168=>630,1169=>556,1170=>621,1171=>506,1172=>768,1173=>634,1174=>1181,1175=>1175, +1176=>649,1177=>574,1178=>812,1179=>633,1182=>818,1183=>609,1184=>937,1185=>684,1186=>856,1187=>725, +1188=>1050,1189=>859,1190=>1191,1191=>911,1194=>716,1195=>548,1196=>669,1197=>1028,1198=>642,1199=>515, +1200=>642,1201=>515,1202=>709,1203=>536,1204=>909,1205=>749,1206=>822,1207=>712,1210=>819,1211=>654, +1216=>421,1217=>1181,1218=>1175,1219=>782,1220=>624,1223=>850,1224=>659,1227=>885,1228=>659,1231=>342, +1232=>733,1233=>583,1234=>733,1235=>583,1236=>931,1237=>877,1238=>686,1239=>572,1240=>784,1241=>572, +1242=>784,1243=>572,1244=>1181,1245=>1175,1246=>649,1247=>574,1248=>591,1249=>511,1250=>850,1251=>654, +1252=>850,1253=>654,1254=>784,1255=>600,1256=>784,1257=>600,1258=>784,1259=>600,1260=>716,1261=>580, +1262=>730,1263=>538,1264=>730,1265=>538,1266=>730,1267=>538,1268=>822,1269=>643,1270=>621,1271=>506, +1272=>1081,1273=>916,1296=>649,1297=>574,1298=>795,1299=>659,1300=>1123,1301=>904,1306=>738,1307=>576, +1308=>925,1309=>770,4256=>688,4257=>851,4258=>788,4259=>795,4260=>712,4261=>979,4262=>921,4263=>1100, +4264=>587,4265=>745,4266=>955,4267=>954,4268=>725,4269=>1030,4270=>880,4271=>820,4272=>1007,4273=>721, +4274=>689,4275=>977,4276=>887,4277=>968,4278=>738,4279=>758,4280=>748,4281=>759,4282=>826,4283=>978, +4284=>701,4285=>748,4286=>740,4287=>1008,4288=>1019,4289=>730,4290=>812,4291=>730,4292=>801,4293=>965, +4304=>535,4305=>563,4306=>579,4307=>798,4308=>553,4309=>549,4310=>599,4311=>823,4312=>552,4313=>540, +4314=>1008,4315=>589,4316=>576,4317=>791,4318=>561,4319=>571,4320=>790,4321=>591,4322=>721,4323=>676, +4324=>782,4325=>575,4326=>820,4327=>559,4328=>583,4329=>576,4330=>656,4331=>577,4332=>575,4333=>566, +4334=>606,4335=>663,4336=>563,4337=>591,4338=>563,4339=>563,4340=>562,4341=>603,4342=>846,4343=>612, +4344=>572,4345=>605,4346=>562,4347=>401,4348=>327,7426=>846,7432=>458,7433=>288,7444=>890,7446=>600, +7447=>600,7453=>663,7454=>853,7455=>853,7468=>439,7469=>586,7470=>479,7472=>491,7473=>432,7474=>432, +7475=>483,7476=>536,7477=>265,7478=>268,7479=>492,7480=>398,7481=>627,7482=>518,7483=>518,7484=>493, +7486=>426,7487=>471,7488=>422,7489=>494,7490=>637,7491=>419,7492=>419,7493=>448,7494=>591,7495=>448, +7496=>448,7497=>400,7498=>400,7499=>370,7500=>370,7501=>448,7502=>270,7503=>471,7504=>655,7505=>426, +7506=>420,7507=>384,7508=>420,7509=>420,7510=>448,7511=>333,7512=>468,7513=>390,7514=>655,7515=>442, +7522=>215,7523=>372,7524=>468,7525=>442,7543=>576,7544=>536,7547=>342,7557=>342,7579=>448,7580=>384, +7581=>384,7582=>420,7583=>370,7584=>244,7585=>335,7586=>448,7587=>470,7588=>270,7589=>276,7590=>270, +7591=>270,7592=>333,7593=>331,7594=>289,7595=>387,7596=>613,7597=>655,7598=>529,7599=>528,7600=>425, +7601=>420,7602=>470,7603=>360,7604=>348,7605=>333,7606=>468,7607=>427,7609=>439,7610=>329,7611=>321, +7612=>474,7613=>371,7614=>407,7615=>420,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0, +7680=>698,7681=>583,7682=>760,7683=>629,7684=>760,7685=>629,7686=>760,7687=>629,7688=>716,7689=>548, +7690=>780,7691=>629,7692=>780,7693=>629,7694=>780,7695=>629,7696=>780,7697=>629,7698=>780,7699=>629, +7700=>686,7701=>572,7702=>686,7703=>572,7704=>686,7705=>572,7706=>686,7707=>572,7708=>686,7709=>572, +7710=>639,7711=>387,7712=>769,7713=>629,7714=>850,7715=>654,7716=>850,7717=>654,7718=>850,7719=>654, +7720=>850,7721=>654,7722=>850,7723=>654,7724=>421,7725=>342,7728=>782,7729=>624,7730=>782,7731=>624, +7732=>782,7733=>624,7734=>633,7735=>342,7736=>633,7737=>342,7738=>633,7739=>342,7740=>633,7741=>342, +7742=>996,7743=>952,7744=>996,7745=>952,7746=>996,7747=>952,7748=>822,7749=>654,7750=>822,7751=>654, +7752=>822,7753=>654,7754=>822,7755=>654,7756=>784,7757=>600,7760=>784,7761=>600,7762=>784,7763=>600, +7764=>677,7765=>629,7766=>677,7767=>629,7768=>748,7769=>474,7770=>748,7771=>474,7772=>748,7773=>474, +7774=>748,7775=>474,7776=>650,7777=>506,7778=>650,7779=>506,7784=>650,7785=>506,7786=>669,7787=>416, +7788=>669,7789=>416,7790=>669,7791=>416,7792=>669,7793=>416,7794=>785,7795=>654,7796=>785,7797=>654, +7798=>785,7799=>654,7800=>785,7801=>654,7802=>785,7803=>654,7804=>698,7805=>523,7806=>698,7807=>523, +7808=>1011,7809=>774,7810=>1011,7811=>774,7812=>1011,7813=>774,7814=>1011,7815=>774,7816=>1011,7817=>774, +7818=>698,7819=>536,7820=>698,7821=>536,7822=>642,7823=>523,7824=>657,7825=>511,7826=>657,7827=>511, +7828=>657,7829=>511,7830=>654,7831=>416,7832=>774,7833=>523,7834=>913,7835=>387,7838=>852,7839=>600, +7840=>698,7841=>583,7842=>698,7843=>583,7852=>698,7853=>583,7854=>698,7855=>583,7856=>698,7857=>583, +7858=>698,7859=>583,7860=>698,7861=>583,7862=>698,7863=>583,7864=>686,7865=>572,7866=>686,7867=>572, +7868=>686,7869=>572,7878=>686,7879=>572,7880=>421,7881=>342,7882=>421,7883=>342,7884=>784,7885=>600, +7886=>784,7887=>600,7896=>784,7897=>600,7908=>785,7909=>654,7910=>785,7911=>654,7922=>642,7923=>523, +7924=>642,7925=>523,7926=>642,7927=>523,7928=>642,7929=>523,7936=>692,7937=>692,7938=>692,7939=>692, +7940=>692,7941=>692,7942=>692,7943=>692,7944=>698,7945=>698,7946=>880,7947=>880,7948=>748,7949=>764, +7950=>698,7951=>698,7952=>547,7953=>547,7954=>547,7955=>547,7956=>547,7957=>547,7960=>826,7961=>817, +7962=>1052,7963=>1052,7964=>984,7965=>1007,7968=>654,7969=>654,7970=>654,7971=>654,7972=>654,7973=>654, +7974=>654,7975=>654,7976=>990,7977=>984,7978=>1222,7979=>1225,7980=>1151,7981=>1177,7982=>1077,7983=>1074, +7984=>435,7985=>435,7986=>435,7987=>435,7988=>435,7989=>435,7990=>435,7991=>435,7992=>566,7993=>555, +7994=>790,7995=>792,7996=>719,7997=>748,7998=>650,7999=>642,8000=>600,8001=>600,8002=>600,8003=>600, +8004=>600,8005=>600,8008=>810,8009=>841,8010=>1116,8011=>1113,8012=>931,8013=>959,8016=>624,8017=>624, +8018=>624,8019=>624,8020=>624,8021=>624,8022=>624,8023=>624,8025=>830,8027=>1067,8029=>1020,8031=>917, +8032=>857,8033=>857,8034=>857,8035=>857,8036=>857,8037=>857,8038=>857,8039=>857,8040=>838,8041=>867, +8042=>1141,8043=>1146,8044=>949,8045=>979,8046=>920,8047=>954,8048=>692,8049=>692,8050=>547,8051=>547, +8052=>654,8053=>654,8054=>435,8055=>435,8056=>600,8057=>600,8058=>624,8059=>624,8060=>857,8061=>857, +8064=>692,8065=>692,8066=>692,8067=>692,8068=>692,8069=>692,8070=>692,8071=>692,8072=>698,8073=>698, +8074=>880,8075=>880,8076=>748,8077=>764,8078=>698,8079=>698,8080=>654,8081=>654,8082=>654,8083=>654, +8084=>654,8085=>654,8086=>654,8087=>654,8088=>990,8089=>984,8090=>1222,8091=>1225,8092=>1151,8093=>1177, +8094=>1077,8095=>1074,8096=>857,8097=>857,8098=>857,8099=>857,8100=>857,8101=>857,8102=>857,8103=>857, +8104=>838,8105=>867,8106=>1141,8107=>1146,8108=>949,8109=>979,8110=>920,8111=>954,8112=>692,8113=>692, +8114=>692,8115=>692,8116=>692,8118=>692,8119=>692,8120=>698,8121=>698,8122=>729,8123=>698,8124=>698, +8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>654,8131=>654,8132=>654,8134=>654,8135=>654, +8136=>899,8137=>852,8138=>1072,8139=>1006,8140=>850,8141=>450,8142=>450,8143=>450,8144=>435,8145=>435, +8146=>435,8147=>435,8150=>435,8151=>435,8152=>421,8153=>421,8154=>642,8155=>595,8157=>450,8158=>450, +8159=>450,8160=>624,8161=>624,8162=>624,8163=>624,8164=>598,8165=>598,8166=>624,8167=>624,8168=>642, +8169=>642,8170=>917,8171=>857,8172=>819,8173=>450,8174=>450,8175=>450,8178=>857,8179=>857,8180=>857, +8182=>857,8183=>857,8184=>962,8185=>798,8186=>991,8187=>820,8188=>801,8189=>450,8190=>450,8192=>450, +8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>626,8200=>313,8201=>180,8202=>89, +8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>374,8209=>374,8210=>626,8213=>900,8214=>450, +8215=>450,8219=>313,8223=>518,8227=>575,8228=>313,8229=>606,8234=>0,8235=>0,8236=>0,8237=>0, +8238=>0,8239=>180,8241=>1631,8242=>237,8243=>402,8244=>567,8245=>237,8246=>402,8247=>567,8248=>659, +8252=>566,8253=>527,8254=>450,8258=>920,8260=>150,8261=>426,8262=>426,8263=>974,8264=>770,8265=>770, +8267=>572,8268=>450,8269=>450,8270=>470,8271=>332,8273=>470,8274=>500,8275=>900,8279=>731,8287=>200, +8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0, +8303=>0,8304=>394,8305=>215,8308=>394,8309=>394,8310=>394,8311=>394,8312=>394,8313=>394,8314=>475, +8315=>475,8316=>475,8317=>268,8318=>268,8319=>412,8320=>394,8321=>394,8322=>394,8323=>394,8324=>394, +8325=>394,8326=>394,8327=>394,8328=>394,8329=>394,8330=>475,8331=>475,8332=>475,8333=>268,8334=>268, +8336=>419,8337=>400,8338=>420,8339=>338,8340=>400,8358=>626,8367=>1039,8369=>710,8372=>788,8373=>626, +8451=>1078,8457=>1001,8462=>654,8463=>654,8470=>978,8486=>801,8487=>801,8490=>782,8491=>698,8513=>707, +8514=>518,8515=>573,8516=>684,8523=>813,8531=>932,8532=>932,8533=>932,8534=>932,8535=>932,8536=>932, +8537=>932,8538=>932,8539=>932,8540=>932,8541=>932,8542=>932,8543=>554,8544=>421,8545=>663,8546=>904, +8547=>984,8548=>698,8549=>1014,8550=>1256,8551=>1498,8552=>962,8553=>698,8554=>970,8555=>1212,8556=>633, +8557=>716,8558=>780,8559=>996,8560=>342,8561=>684,8562=>1025,8563=>865,8564=>523,8565=>865,8566=>1207, +8567=>1548,8568=>878,8569=>536,8570=>878,8571=>1220,8572=>342,8573=>548,8574=>629,8575=>952,8576=>1129, +8577=>780,8578=>1141,8579=>716,8580=>548,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754, +8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754, +8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754, +8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>765,8624=>754,8625=>754,8626=>754,8627=>754, +8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754, +8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754, +8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754, +8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754, +8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754, +8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754, +8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754, +8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>577,8706=>480,8707=>558,8708=>558, +8710=>677,8711=>677,8712=>666,8713=>666,8715=>666,8716=>666,8719=>757,8720=>757,8721=>677,8722=>754, +8723=>754,8724=>754,8725=>329,8727=>622,8728=>466,8729=>466,8730=>591,8731=>591,8732=>591,8733=>604, +8734=>750,8735=>754,8736=>754,8739=>292,8740=>546,8741=>476,8742=>696,8743=>730,8744=>730,8745=>754, +8746=>754,8747=>521,8748=>900,8749=>1252,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754, +8770=>754,8771=>754,8776=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>974,8789=>974,8800=>754, +8801=>754,8804=>754,8805=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8844=>754, +8845=>754,8846=>754,8847=>754,8848=>754,8849=>754,8850=>754,8851=>754,8852=>754,8853=>754,8854=>754, +8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754, +8865=>754,8866=>795,8867=>795,8868=>864,8869=>864,8870=>554,8871=>554,8872=>795,8873=>795,8874=>795, +8875=>971,8876=>795,8877=>795,8878=>795,8879=>971,8901=>358,8962=>751,8968=>426,8969=>426,8970=>426, +8971=>426,8976=>754,8977=>484,8984=>835,8985=>754,8992=>521,8993=>521,8997=>900,9000=>1299,9085=>907, +9134=>521,9167=>850,9251=>751,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692, +9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692, +9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692, +9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850, +9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495, +9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452, +9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452, +9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785, +9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474, +9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>785, +9697=>785,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850, +9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785, +9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659, +9727=>692,9728=>807,9784=>807,9785=>807,9786=>807,9787=>807,9788=>807,9791=>552,9792=>658,9793=>658, +9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9824=>807,9825=>807,9826=>807,9827=>807, +9828=>807,9829=>807,9830=>807,9831=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321, +9839=>435,10145=>754,10181=>411,10182=>411,10208=>444,10216=>411,10217=>411,10224=>754,10225=>754,10226=>754, +10227=>754,10228=>930,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290, +10237=>1290,10238=>1290,10239=>1290,10240=>703,10241=>703,10242=>703,10243=>703,10244=>703,10245=>703,10246=>703, +10247=>703,10248=>703,10249=>703,10250=>703,10251=>703,10252=>703,10253=>703,10254=>703,10255=>703,10256=>703, +10257=>703,10258=>703,10259=>703,10260=>703,10261=>703,10262=>703,10263=>703,10264=>703,10265=>703,10266=>703, +10267=>703,10268=>703,10269=>703,10270=>703,10271=>703,10272=>703,10273=>703,10274=>703,10275=>703,10276=>703, +10277=>703,10278=>703,10279=>703,10280=>703,10281=>703,10282=>703,10283=>703,10284=>703,10285=>703,10286=>703, +10287=>703,10288=>703,10289=>703,10290=>703,10291=>703,10292=>703,10293=>703,10294=>703,10295=>703,10296=>703, +10297=>703,10298=>703,10299=>703,10300=>703,10301=>703,10302=>703,10303=>703,10304=>703,10305=>703,10306=>703, +10307=>703,10308=>703,10309=>703,10310=>703,10311=>703,10312=>703,10313=>703,10314=>703,10315=>703,10316=>703, +10317=>703,10318=>703,10319=>703,10320=>703,10321=>703,10322=>703,10323=>703,10324=>703,10325=>703,10326=>703, +10327=>703,10328=>703,10329=>703,10330=>703,10331=>703,10332=>703,10333=>703,10334=>703,10335=>703,10336=>703, +10337=>703,10338=>703,10339=>703,10340=>703,10341=>703,10342=>703,10343=>703,10344=>703,10345=>703,10346=>703, +10347=>703,10348=>703,10349=>703,10350=>703,10351=>703,10352=>703,10353=>703,10354=>703,10355=>703,10356=>703, +10357=>703,10358=>703,10359=>703,10360=>703,10361=>703,10362=>703,10363=>703,10364=>703,10365=>703,10366=>703, +10367=>703,10368=>703,10369=>703,10370=>703,10371=>703,10372=>703,10373=>703,10374=>703,10375=>703,10376=>703, +10377=>703,10378=>703,10379=>703,10380=>703,10381=>703,10382=>703,10383=>703,10384=>703,10385=>703,10386=>703, +10387=>703,10388=>703,10389=>703,10390=>703,10391=>703,10392=>703,10393=>703,10394=>703,10395=>703,10396=>703, +10397=>703,10398=>703,10399=>703,10400=>703,10401=>703,10402=>703,10403=>703,10404=>703,10405=>703,10406=>703, +10407=>703,10408=>703,10409=>703,10410=>703,10411=>703,10412=>703,10413=>703,10414=>703,10415=>703,10416=>703, +10417=>703,10418=>703,10419=>703,10420=>703,10421=>703,10422=>703,10423=>703,10424=>703,10425=>703,10426=>703, +10427=>703,10428=>703,10429=>703,10430=>703,10431=>703,10432=>703,10433=>703,10434=>703,10435=>703,10436=>703, +10437=>703,10438=>703,10439=>703,10440=>703,10441=>703,10442=>703,10443=>703,10444=>703,10445=>703,10446=>703, +10447=>703,10448=>703,10449=>703,10450=>703,10451=>703,10452=>703,10453=>703,10454=>703,10455=>703,10456=>703, +10457=>703,10458=>703,10459=>703,10460=>703,10461=>703,10462=>703,10463=>703,10464=>703,10465=>703,10466=>703, +10467=>703,10468=>703,10469=>703,10470=>703,10471=>703,10472=>703,10473=>703,10474=>703,10475=>703,10476=>703, +10477=>703,10478=>703,10479=>703,10480=>703,10481=>703,10482=>703,10483=>703,10484=>703,10485=>703,10486=>703, +10487=>703,10488=>703,10489=>703,10490=>703,10491=>703,10492=>703,10493=>703,10494=>703,10495=>703,10496=>754, +10497=>754,10498=>754,10499=>754,10500=>754,10501=>754,10502=>754,10503=>754,10504=>754,10505=>754,10506=>754, +10507=>754,10508=>754,10509=>754,10510=>754,10511=>754,10512=>754,10513=>754,10514=>754,10515=>754,10516=>754, +10517=>754,10518=>754,10519=>754,10520=>754,10521=>754,10522=>754,10523=>754,10524=>754,10525=>754,10526=>754, +10527=>754,10528=>754,10529=>754,10530=>754,10531=>754,10532=>754,10533=>754,10534=>754,10535=>754,10536=>754, +10537=>754,10538=>754,10539=>754,10540=>754,10541=>754,10542=>754,10543=>754,10544=>754,10545=>754,10546=>754, +10547=>754,10548=>754,10549=>754,10550=>754,10551=>754,10552=>754,10553=>754,10554=>754,10555=>754,10556=>754, +10557=>754,10558=>754,10559=>754,10560=>754,10561=>754,10562=>754,10563=>754,10564=>754,10565=>754,10566=>754, +10567=>754,10568=>754,10569=>754,10570=>754,10571=>754,10572=>754,10573=>754,10574=>754,10575=>754,10576=>754, +10577=>754,10578=>754,10579=>754,10580=>754,10581=>754,10582=>754,10583=>754,10584=>754,10585=>754,10586=>754, +10587=>754,10588=>754,10589=>754,10590=>754,10591=>754,10592=>754,10593=>754,10594=>754,10595=>754,10596=>754, +10597=>754,10598=>754,10599=>754,10600=>754,10601=>754,10602=>754,10603=>754,10604=>754,10605=>754,10606=>754, +10607=>754,10608=>754,10609=>754,10610=>754,10611=>754,10612=>754,10613=>754,10614=>754,10615=>929,10616=>754, +10617=>754,10618=>864,10619=>754,10620=>754,10621=>754,10622=>754,10623=>754,10731=>444,10764=>1604,10765=>549, +10766=>549,10799=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754, +11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754, +11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11364=>748, +11367=>850,11368=>654,11369=>782,11370=>624,11371=>657,11372=>511,11374=>996,11375=>698,11381=>701,11382=>519, +11383=>814,11385=>514,11386=>600,11388=>282,11389=>439,11520=>695,11521=>571,11522=>723,11523=>592,11524=>708, +11525=>866,11526=>680,11527=>864,11528=>555,11529=>581,11530=>866,11531=>567,11532=>581,11533=>866,11534=>761, +11535=>779,11536=>865,11537=>580,11538=>580,11539=>863,11540=>851,11541=>777,11542=>580,11543=>581,11544=>580, +11545=>584,11546=>619,11547=>842,11548=>883,11549=>613,11550=>608,11551=>766,11552=>1002,11553=>569,11554=>580, +11555=>582,11556=>674,11557=>822,11800=>527,11810=>426,11811=>426,11812=>426,11813=>426,11822=>527,42564=>650, +42565=>506,42566=>421,42567=>342,42576=>1200,42577=>976,42580=>1158,42581=>923,42582=>1158,42583=>926,42760=>450, +42761=>450,42762=>450,42763=>450,42764=>450,42765=>450,42766=>450,42767=>450,42768=>450,42769=>450,42770=>450, +42771=>450,42772=>450,42773=>450,42774=>450,42779=>346,42780=>346,42781=>249,42782=>249,42783=>249,42891=>395, +42892=>275,62464=>653,62465=>663,62466=>707,62467=>917,62468=>663,62469=>658,62470=>716,62471=>952,62472=>663, +62473=>663,62474=>1196,62475=>679,62476=>678,62477=>922,62478=>663,62479=>678,62480=>963,62481=>736,62482=>783, +62483=>737,62484=>914,62485=>677,62486=>907,62487=>677,62488=>684,62489=>678,62490=>720,62491=>678,62492=>684, +62493=>664,62494=>721,62495=>860,62496=>663,62497=>762,62498=>664,62499=>663,62500=>663,62501=>714,62502=>930, +62504=>813,63172=>506,63173=>600,63174=>629,63175=>654,63176=>952,63185=>450,63188=>450,64256=>744,64257=>654, +64258=>654,64259=>998,64260=>1031,64261=>791,64262=>874,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0, +65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0, +65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1002); +$enc=''; +$diff=''; +$file='dejavuserifcondensedbi.z'; +$ctg='dejavuserifcondensedbi.ctg.z'; +$originalsize=293472; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedbi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedbi.z new file mode 100755 index 00000000..9b6be85d Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedbi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedi.ctg.z new file mode 100755 index 00000000..aa732f80 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedi.php new file mode 100755 index 00000000..cb61eb0b --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedi.php @@ -0,0 +1,312 @@ +928,'Descent'=>-236,'CapHeight'=>-59,'Flags'=>96,'FontBBox'=>'[-755 -347 1485 1227]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>540); +$up=-63; +$ut=44; +$dw=540; +$cw=array( +0=>540,32=>286,33=>361,34=>414,35=>754,36=>572,37=>855,38=>801,39=>247,40=>351, +41=>351,42=>450,43=>754,44=>286,45=>304,46=>286,47=>303,48=>572,49=>572,50=>572, +51=>572,52=>572,53=>572,54=>572,55=>572,56=>572,57=>572,58=>303,59=>303,60=>754, +61=>754,62=>754,63=>482,64=>900,65=>650,66=>661,67=>688,68=>721,69=>657,70=>624, +71=>719,72=>785,73=>355,74=>360,75=>672,76=>598,77=>921,78=>787,79=>738,80=>605, +81=>738,82=>677,83=>616,84=>600,85=>758,86=>650,87=>925,88=>641,89=>594,90=>625, +91=>351,92=>303,93=>351,94=>754,95=>450,96=>450,97=>536,98=>576,99=>504,100=>576, +101=>532,102=>333,103=>576,104=>580,105=>288,106=>279,107=>545,108=>288,109=>853,110=>580, +111=>542,112=>576,113=>576,114=>430,115=>461,116=>361,117=>580,118=>508,119=>770,120=>507, +121=>508,122=>474,123=>572,124=>303,125=>572,126=>754,8364=>572,8218=>286,402=>333,8222=>466, +8230=>900,8224=>450,8225=>450,710=>450,8240=>1208,352=>616,8249=>360,338=>1023,381=>625,8216=>286, +8217=>286,8220=>460,8221=>460,8226=>531,8211=>450,8212=>900,732=>450,8482=>900,353=>461,8250=>360, +339=>890,382=>474,376=>594,160=>286,161=>361,162=>572,163=>572,164=>572,165=>572,166=>303, +167=>450,168=>450,169=>900,170=>427,171=>550,172=>754,173=>304,174=>900,175=>450,176=>450, +177=>754,178=>360,179=>360,180=>450,181=>584,182=>572,183=>286,184=>450,185=>360,186=>423, +187=>550,188=>872,189=>872,190=>872,191=>482,192=>650,193=>650,194=>650,195=>650,196=>650, +197=>650,198=>901,199=>688,200=>657,201=>657,202=>657,203=>657,204=>355,205=>355,206=>355, +207=>355,208=>726,209=>787,210=>738,211=>738,212=>738,213=>738,214=>738,215=>754,216=>738, +217=>758,218=>758,219=>758,220=>758,221=>594,222=>608,223=>601,224=>536,225=>536,226=>536, +227=>536,228=>536,229=>536,230=>846,231=>504,232=>532,233=>532,234=>532,235=>532,236=>288, +237=>288,238=>288,239=>288,240=>542,241=>580,242=>542,243=>542,244=>542,245=>542,246=>542, +247=>754,248=>542,249=>580,250=>580,251=>580,252=>580,253=>508,254=>576,255=>508,256=>650, +257=>536,258=>650,259=>536,260=>650,261=>536,262=>688,263=>504,264=>688,265=>504,266=>688, +267=>504,268=>688,269=>504,270=>721,271=>576,272=>726,273=>576,274=>657,275=>532,276=>657, +277=>532,278=>657,279=>532,280=>657,281=>532,282=>657,283=>532,284=>719,285=>576,286=>719, +287=>576,288=>719,289=>576,290=>719,291=>576,292=>785,293=>580,294=>785,295=>580,296=>355, +297=>288,298=>355,299=>288,300=>355,301=>288,302=>355,303=>288,304=>355,305=>288,306=>721, +307=>479,308=>360,309=>279,310=>672,311=>545,312=>545,313=>598,314=>288,315=>598,316=>288, +317=>598,318=>360,319=>604,320=>418,321=>602,322=>292,323=>787,324=>580,325=>787,326=>580, +327=>787,328=>580,329=>779,330=>758,331=>580,332=>738,333=>542,334=>738,335=>542,336=>738, +337=>542,340=>677,341=>430,342=>677,343=>430,344=>677,345=>430,346=>616,347=>461,348=>616, +349=>461,350=>616,351=>461,354=>600,355=>361,356=>600,357=>361,358=>600,359=>361,360=>758, +361=>580,362=>758,363=>580,364=>758,365=>580,366=>758,367=>580,368=>758,369=>580,370=>758, +371=>580,372=>925,373=>770,374=>594,375=>508,377=>625,378=>474,379=>625,380=>474,383=>333, +384=>576,385=>661,386=>661,387=>576,388=>661,389=>576,390=>688,391=>688,392=>504,393=>726, +394=>721,395=>661,396=>576,397=>542,398=>657,399=>738,400=>561,401=>624,403=>719,404=>641, +405=>839,406=>355,407=>355,408=>672,409=>545,410=>288,411=>570,412=>853,413=>787,414=>580, +415=>738,416=>738,417=>542,418=>936,419=>726,420=>605,421=>576,422=>677,423=>616,424=>461, +425=>636,426=>292,427=>361,428=>600,429=>361,430=>600,431=>758,432=>580,433=>746,434=>684, +435=>664,436=>670,437=>625,438=>474,439=>508,440=>508,441=>508,443=>572,444=>618,445=>508, +446=>482,448=>265,449=>443,450=>413,451=>265,452=>1347,453=>1195,454=>1050,455=>958,456=>876, +457=>567,458=>1148,459=>1066,460=>858,461=>650,462=>536,463=>355,464=>288,465=>738,466=>542, +467=>758,468=>580,469=>758,470=>580,471=>758,472=>580,473=>758,474=>580,475=>758,476=>580, +477=>532,478=>650,479=>536,480=>650,481=>536,482=>901,483=>846,484=>763,485=>576,486=>719, +487=>576,488=>672,489=>545,490=>738,491=>542,492=>738,493=>542,494=>508,495=>508,496=>288, +497=>1347,498=>1195,499=>1050,500=>719,501=>576,502=>1038,504=>787,505=>580,506=>650,507=>536, +508=>901,509=>846,510=>738,511=>542,512=>650,513=>536,514=>650,515=>536,516=>657,517=>532, +518=>657,519=>532,520=>355,521=>288,522=>355,523=>288,524=>738,525=>542,526=>738,527=>542, +528=>677,529=>430,530=>677,531=>430,532=>758,533=>580,534=>758,535=>580,536=>616,537=>461, +538=>600,539=>361,540=>564,541=>469,542=>785,543=>580,544=>758,545=>732,548=>625,549=>474, +550=>650,551=>536,552=>657,553=>532,554=>738,555=>542,556=>738,557=>542,558=>738,559=>542, +560=>738,561=>542,562=>594,563=>508,564=>450,565=>748,566=>444,567=>279,568=>864,569=>864, +570=>650,571=>688,572=>504,573=>598,574=>600,575=>461,576=>474,577=>525,578=>417,581=>650, +592=>536,593=>576,594=>607,595=>576,596=>504,597=>504,598=>582,599=>614,600=>532,601=>532, +602=>759,603=>483,604=>458,605=>695,606=>552,607=>283,608=>615,609=>576,610=>489,611=>641, +612=>507,613=>580,614=>580,615=>580,616=>288,617=>353,618=>288,619=>342,620=>409,621=>326, +622=>633,623=>853,624=>853,625=>853,626=>579,627=>624,628=>581,629=>542,630=>711,631=>583, +632=>542,633=>451,634=>451,635=>496,636=>430,637=>430,638=>407,639=>407,640=>534,641=>534, +642=>461,643=>244,644=>333,645=>438,646=>292,647=>361,648=>361,649=>580,650=>558,651=>547, +652=>508,653=>770,654=>508,655=>589,656=>537,657=>504,658=>508,659=>504,660=>482,661=>482, +662=>482,663=>461,664=>738,665=>506,666=>552,667=>588,668=>600,669=>329,670=>545,671=>581, +672=>615,673=>482,674=>482,675=>896,676=>930,677=>898,678=>728,679=>538,680=>704,681=>804, +682=>582,683=>608,684=>538,685=>398,686=>703,687=>690,688=>389,689=>387,690=>237,691=>312, +692=>312,693=>387,694=>352,695=>485,696=>320,697=>250,699=>286,700=>286,701=>286,702=>276, +703=>276,704=>252,705=>252,711=>450,712=>254,713=>450,716=>254,720=>303,721=>303,722=>276, +723=>276,726=>353,728=>450,729=>450,730=>450,731=>450,733=>450,734=>375,736=>403,737=>218, +738=>303,739=>319,740=>252,741=>444,742=>444,743=>444,744=>444,745=>444,750=>435,768=>0, +769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, +779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0, +789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0, +799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0, +809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0, +819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0, +829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,865=>0,880=>666,881=>478,884=>250, +885=>250,890=>450,891=>504,892=>504,893=>504,894=>303,900=>450,901=>450,902=>650,903=>286, +904=>810,905=>935,906=>505,908=>751,910=>808,911=>767,912=>353,913=>650,914=>661,915=>624, +916=>650,917=>657,918=>625,919=>785,920=>738,921=>355,922=>672,923=>650,924=>921,925=>787, +926=>633,927=>738,928=>785,929=>605,931=>636,932=>600,933=>594,934=>738,935=>641,936=>789, +937=>746,938=>355,939=>594,940=>607,941=>483,942=>539,943=>353,944=>547,945=>607,946=>520, +947=>538,948=>542,949=>483,950=>488,951=>539,952=>542,953=>353,954=>590,955=>570,956=>584, +957=>547,958=>496,959=>542,960=>591,961=>529,962=>504,963=>614,964=>498,965=>547,966=>630, +967=>545,968=>706,969=>734,970=>353,971=>547,972=>542,973=>547,974=>734,976=>524,977=>643, +978=>618,979=>787,980=>618,981=>613,982=>734,983=>561,984=>738,985=>542,986=>688,987=>504, +988=>624,989=>417,990=>531,991=>593,992=>704,993=>519,1008=>561,1009=>529,1010=>504,1011=>279, +1012=>738,1013=>504,1014=>504,1015=>608,1016=>576,1017=>688,1018=>921,1019=>637,1020=>529,1021=>688, +1022=>688,1023=>688,1024=>657,1025=>657,1026=>719,1027=>596,1028=>688,1029=>616,1030=>355,1031=>355, +1032=>360,1033=>976,1034=>1006,1035=>785,1036=>696,1037=>785,1038=>650,1039=>785,1040=>681,1041=>661, +1042=>661,1043=>596,1044=>731,1045=>657,1046=>1011,1047=>561,1048=>785,1049=>785,1050=>696,1051=>751, +1052=>921,1053=>785,1054=>738,1055=>785,1056=>605,1057=>688,1058=>600,1059=>650,1060=>747,1061=>641, +1062=>785,1063=>695,1064=>1027,1065=>1027,1066=>715,1067=>885,1068=>606,1069=>688,1070=>1074,1071=>727, +1072=>536,1073=>549,1074=>523,1075=>455,1076=>570,1077=>532,1078=>1023,1079=>491,1080=>580,1081=>580, +1082=>537,1083=>573,1084=>746,1085=>593,1086=>542,1087=>580,1088=>576,1089=>504,1090=>853,1091=>522, +1092=>704,1093=>507,1094=>628,1095=>560,1096=>853,1097=>901,1098=>600,1099=>733,1100=>490,1101=>504, +1102=>792,1103=>596,1104=>532,1105=>532,1106=>561,1107=>455,1108=>504,1109=>461,1110=>288,1111=>288, +1112=>279,1113=>773,1114=>790,1115=>580,1116=>537,1117=>580,1118=>522,1119=>580,1122=>686,1123=>794, +1124=>1016,1125=>750,1130=>1011,1131=>828,1136=>849,1137=>812,1138=>738,1139=>497,1140=>773,1141=>610, +1164=>636,1165=>490,1168=>604,1169=>476,1170=>596,1171=>455,1172=>657,1173=>552,1174=>1011,1175=>1023, +1176=>561,1177=>491,1178=>696,1179=>544,1182=>696,1183=>537,1184=>803,1185=>602,1186=>785,1187=>641, +1188=>1025,1189=>771,1190=>1085,1191=>848,1194=>688,1195=>504,1196=>600,1197=>911,1198=>594,1199=>514, +1200=>594,1201=>514,1202=>641,1203=>566,1204=>842,1205=>659,1206=>674,1207=>609,1210=>674,1211=>580, +1216=>355,1217=>1011,1218=>1023,1219=>672,1220=>545,1223=>785,1224=>600,1227=>674,1228=>600,1231=>288, +1232=>681,1233=>536,1234=>681,1235=>536,1236=>901,1237=>846,1238=>657,1239=>532,1240=>738,1241=>532, +1242=>738,1243=>532,1244=>1011,1245=>1023,1246=>561,1247=>491,1248=>508,1249=>508,1250=>785,1251=>580, +1252=>785,1253=>580,1254=>738,1255=>542,1256=>738,1257=>542,1258=>738,1259=>542,1260=>688,1261=>504, +1262=>650,1263=>522,1264=>650,1265=>522,1266=>650,1267=>522,1268=>695,1269=>560,1270=>596,1271=>455, +1272=>885,1273=>733,1296=>561,1297=>491,1298=>751,1299=>573,1300=>1079,1301=>845,1306=>738,1307=>576, +1308=>925,1309=>770,4256=>659,4257=>773,4258=>753,4259=>782,4260=>668,4261=>892,4262=>833,4263=>1000, +4264=>519,4265=>684,4266=>875,4267=>856,4268=>677,4269=>976,4270=>815,4271=>754,4272=>944,4273=>668, +4274=>611,4275=>922,4276=>852,4277=>926,4278=>667,4279=>668,4280=>668,4281=>668,4282=>800,4283=>852, +4284=>651,4285=>688,4286=>668,4287=>871,4288=>909,4289=>641,4290=>786,4291=>669,4292=>762,4293=>864, +4304=>495,4305=>523,4306=>539,4307=>759,4308=>514,4309=>510,4310=>558,4311=>783,4312=>512,4313=>500, +4314=>968,4315=>536,4316=>536,4317=>751,4318=>521,4319=>531,4320=>750,4321=>546,4322=>682,4323=>631, +4324=>742,4325=>535,4326=>781,4327=>520,4328=>543,4329=>536,4330=>616,4331=>537,4332=>501,4333=>527, +4334=>562,4335=>624,4336=>523,4337=>551,4338=>523,4339=>523,4340=>522,4341=>593,4342=>806,4343=>572, +4344=>532,4345=>565,4346=>522,4347=>410,4348=>335,7426=>846,7432=>458,7433=>288,7444=>890,7446=>542, +7447=>542,7453=>663,7454=>853,7455=>853,7468=>409,7469=>567,7470=>417,7472=>454,7473=>413,7474=>413, +7475=>453,7476=>494,7477=>224,7478=>227,7479=>423,7480=>376,7481=>580,7482=>496,7483=>496,7484=>464, +7486=>381,7487=>426,7488=>378,7489=>478,7490=>583,7491=>347,7492=>347,7493=>360,7494=>556,7495=>360, +7496=>360,7497=>348,7498=>348,7499=>385,7500=>306,7501=>360,7502=>157,7503=>328,7504=>552,7505=>359, +7506=>347,7507=>312,7508=>347,7509=>347,7510=>360,7511=>222,7512=>359,7513=>417,7514=>552,7515=>335, +7522=>181,7523=>312,7524=>359,7525=>335,7543=>576,7544=>494,7547=>334,7557=>288,7579=>439,7580=>317, +7581=>317,7582=>426,7583=>385,7584=>209,7585=>285,7586=>439,7587=>359,7588=>181,7589=>181,7590=>181, +7591=>181,7592=>286,7593=>237,7594=>236,7595=>409,7596=>552,7597=>552,7598=>445,7599=>443,7600=>438, +7601=>347,7602=>426,7603=>374,7604=>269,7605=>301,7606=>359,7607=>429,7609=>417,7610=>320,7611=>298, +7612=>376,7613=>376,7614=>406,7615=>426,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0, +7680=>650,7681=>536,7682=>661,7683=>576,7684=>661,7685=>576,7686=>661,7687=>576,7688=>688,7689=>504, +7690=>721,7691=>576,7692=>721,7693=>576,7694=>721,7695=>576,7696=>721,7697=>576,7698=>721,7699=>576, +7700=>657,7701=>532,7702=>657,7703=>532,7704=>657,7705=>532,7706=>657,7707=>532,7708=>657,7709=>532, +7710=>624,7711=>333,7712=>719,7713=>576,7714=>785,7715=>580,7716=>785,7717=>580,7718=>785,7719=>580, +7720=>785,7721=>580,7722=>785,7723=>580,7724=>355,7725=>288,7728=>672,7729=>545,7730=>672,7731=>545, +7732=>672,7733=>545,7734=>598,7735=>288,7736=>598,7737=>288,7738=>598,7739=>288,7740=>598,7741=>288, +7742=>921,7743=>853,7744=>921,7745=>853,7746=>921,7747=>857,7748=>787,7749=>580,7750=>787,7751=>580, +7752=>787,7753=>580,7754=>787,7755=>580,7756=>738,7757=>542,7760=>738,7761=>542,7762=>738,7763=>542, +7764=>605,7765=>576,7766=>605,7767=>576,7768=>677,7769=>430,7770=>677,7771=>430,7772=>677,7773=>430, +7774=>677,7775=>430,7776=>616,7777=>461,7778=>616,7779=>461,7784=>616,7785=>461,7786=>600,7787=>361, +7788=>600,7789=>361,7790=>600,7791=>361,7792=>600,7793=>361,7794=>758,7795=>580,7796=>758,7797=>580, +7798=>758,7799=>580,7800=>758,7801=>580,7802=>758,7803=>580,7804=>650,7805=>508,7806=>650,7807=>508, +7808=>925,7809=>770,7810=>925,7811=>770,7812=>925,7813=>770,7814=>925,7815=>770,7816=>925,7817=>770, +7818=>641,7819=>507,7820=>641,7821=>507,7822=>594,7823=>508,7824=>625,7825=>474,7826=>625,7827=>474, +7828=>625,7829=>474,7830=>580,7831=>361,7832=>770,7833=>508,7834=>813,7835=>333,7838=>746,7839=>542, +7840=>650,7841=>536,7842=>650,7843=>536,7852=>650,7853=>536,7854=>650,7855=>536,7856=>650,7857=>536, +7858=>650,7859=>536,7860=>650,7861=>536,7862=>650,7863=>536,7864=>657,7865=>532,7866=>657,7867=>532, +7868=>657,7869=>532,7878=>657,7879=>532,7880=>355,7881=>288,7882=>355,7883=>288,7884=>738,7885=>542, +7886=>738,7887=>542,7896=>738,7897=>542,7908=>758,7909=>580,7910=>758,7911=>580,7922=>594,7923=>508, +7924=>594,7925=>508,7926=>594,7927=>508,7928=>594,7929=>508,7936=>607,7937=>607,7938=>607,7939=>607, +7940=>607,7941=>607,7942=>607,7943=>607,7944=>650,7945=>650,7946=>782,7947=>782,7948=>660,7949=>687, +7950=>650,7951=>650,7952=>483,7953=>483,7954=>483,7955=>483,7956=>483,7957=>483,7960=>768,7961=>757, +7962=>960,7963=>969,7964=>907,7965=>931,7968=>539,7969=>539,7970=>539,7971=>539,7972=>539,7973=>539, +7974=>539,7975=>539,7976=>898,7977=>893,7978=>1090,7979=>1101,7980=>1043,7981=>1064,7982=>988,7983=>985, +7984=>353,7985=>353,7986=>353,7987=>353,7988=>353,7989=>353,7990=>353,7991=>353,7992=>469,7993=>461, +7994=>661,7995=>664,7996=>611,7997=>635,7998=>561,7999=>553,8000=>542,8001=>542,8002=>542,8003=>542, +8004=>542,8005=>542,8008=>738,8009=>773,8010=>1008,8011=>1015,8012=>843,8013=>867,8016=>547,8017=>547, +8018=>547,8019=>547,8020=>547,8021=>547,8022=>547,8023=>547,8025=>765,8027=>971,8029=>939,8031=>857, +8032=>734,8033=>734,8034=>734,8035=>734,8036=>734,8037=>734,8038=>734,8039=>734,8040=>746,8041=>783, +8042=>1018,8043=>1023,8044=>852,8045=>878,8046=>844,8047=>873,8048=>607,8049=>607,8050=>483,8051=>483, +8052=>539,8053=>539,8054=>353,8055=>353,8056=>542,8057=>542,8058=>547,8059=>547,8060=>734,8061=>734, +8064=>607,8065=>607,8066=>607,8067=>607,8068=>607,8069=>607,8070=>607,8071=>607,8072=>650,8073=>650, +8074=>782,8075=>782,8076=>660,8077=>687,8078=>650,8079=>650,8080=>539,8081=>539,8082=>539,8083=>539, +8084=>539,8085=>539,8086=>539,8087=>539,8088=>898,8089=>893,8090=>1090,8091=>1101,8092=>1043,8093=>1064, +8094=>988,8095=>985,8096=>734,8097=>734,8098=>734,8099=>734,8100=>734,8101=>734,8102=>734,8103=>734, +8104=>746,8105=>783,8106=>1018,8107=>1023,8108=>852,8109=>878,8110=>844,8111=>873,8112=>607,8113=>607, +8114=>607,8115=>607,8116=>607,8118=>607,8119=>607,8120=>650,8121=>650,8122=>650,8123=>650,8124=>650, +8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>539,8131=>539,8132=>539,8134=>539,8135=>539, +8136=>820,8137=>810,8138=>956,8139=>935,8140=>785,8141=>450,8142=>450,8143=>450,8144=>353,8145=>353, +8146=>353,8147=>353,8150=>353,8151=>353,8152=>355,8153=>355,8154=>529,8155=>505,8157=>450,8158=>450, +8159=>450,8160=>547,8161=>547,8162=>547,8163=>547,8164=>529,8165=>529,8166=>547,8167=>547,8168=>594, +8169=>594,8170=>829,8171=>808,8172=>711,8173=>450,8174=>450,8175=>450,8178=>734,8179=>734,8180=>734, +8182=>734,8183=>734,8184=>865,8185=>751,8186=>886,8187=>767,8188=>746,8189=>450,8190=>450,8192=>450, +8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>572,8200=>286,8201=>180,8202=>89, +8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>304,8209=>304,8210=>572,8213=>900,8214=>450, +8215=>450,8219=>286,8223=>460,8227=>531,8228=>301,8229=>600,8234=>0,8235=>0,8236=>0,8237=>0, +8238=>0,8239=>180,8241=>1560,8242=>204,8243=>336,8244=>468,8245=>204,8246=>336,8247=>468,8248=>305, +8252=>475,8253=>482,8254=>450,8258=>900,8260=>150,8261=>351,8262=>351,8263=>878,8264=>678,8265=>678, +8267=>572,8268=>450,8269=>450,8270=>450,8271=>303,8273=>450,8274=>404,8275=>900,8279=>597,8287=>200, +8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0, +8303=>0,8304=>360,8305=>181,8308=>360,8309=>360,8310=>360,8311=>360,8312=>360,8313=>360,8314=>475, +8315=>475,8316=>475,8317=>221,8318=>221,8319=>365,8320=>360,8321=>360,8322=>360,8323=>360,8324=>360, +8325=>360,8326=>360,8327=>360,8328=>360,8329=>360,8330=>475,8331=>475,8332=>475,8333=>221,8334=>221, +8336=>347,8337=>348,8338=>347,8339=>319,8340=>348,8358=>594,8367=>951,8369=>635,8372=>702,8373=>572, +8451=>1006,8457=>942,8462=>580,8463=>580,8470=>852,8486=>746,8487=>746,8490=>672,8491=>650,8513=>697, +8514=>501,8515=>501,8516=>549,8523=>801,8531=>872,8532=>872,8533=>872,8534=>872,8535=>872,8536=>872, +8537=>872,8538=>872,8539=>872,8540=>872,8541=>872,8542=>872,8543=>511,8544=>355,8545=>531,8546=>707, +8547=>870,8548=>650,8549=>883,8550=>1059,8551=>1234,8552=>838,8553=>641,8554=>839,8555=>1015,8556=>598, +8557=>688,8558=>721,8559=>921,8560=>288,8561=>576,8562=>863,8563=>796,8564=>508,8565=>796,8566=>1084, +8567=>1372,8568=>795,8569=>507,8570=>795,8571=>1083,8572=>288,8573=>504,8574=>576,8575=>853,8576=>1085, +8577=>721,8578=>1085,8579=>688,8580=>504,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754, +8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754, +8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754, +8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754, +8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754, +8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754, +8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754, +8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754, +8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754, +8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754, +8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754, +8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>543,8706=>465,8707=>488,8708=>488, +8710=>628,8711=>628,8712=>666,8713=>666,8715=>666,8716=>666,8719=>716,8720=>716,8721=>642,8722=>754, +8723=>754,8724=>754,8725=>303,8727=>611,8728=>441,8729=>441,8730=>573,8731=>573,8732=>573,8733=>609, +8734=>750,8735=>754,8736=>754,8739=>262,8740=>431,8741=>416,8742=>570,8743=>659,8744=>659,8745=>754, +8746=>754,8747=>469,8748=>766,8749=>1063,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754, +8770=>754,8771=>754,8776=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>930,8789=>930,8800=>754, +8801=>754,8804=>754,8805=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8844=>754, +8845=>754,8846=>754,8847=>761,8848=>761,8849=>761,8850=>761,8851=>754,8852=>754,8853=>754,8854=>754, +8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754, +8865=>754,8866=>773,8867=>773,8868=>846,8869=>846,8870=>510,8871=>510,8872=>773,8873=>773,8874=>773, +8875=>927,8876=>773,8877=>773,8878=>773,8879=>927,8901=>308,8962=>687,8968=>351,8969=>351,8970=>351, +8971=>351,8976=>754,8977=>461,8984=>900,8985=>754,8992=>469,8993=>469,8997=>900,9000=>1299,9085=>827, +9134=>469,9167=>850,9251=>687,9472=>542,9473=>542,9474=>542,9475=>542,9476=>542,9477=>542,9478=>542, +9479=>542,9480=>542,9481=>542,9482=>542,9483=>542,9484=>542,9485=>542,9486=>542,9487=>542,9488=>542, +9489=>542,9490=>542,9491=>542,9492=>542,9493=>542,9494=>542,9495=>542,9496=>542,9497=>542,9498=>542, +9499=>542,9500=>542,9501=>542,9502=>542,9503=>542,9504=>542,9505=>542,9506=>542,9507=>542,9508=>542, +9509=>542,9510=>542,9511=>542,9512=>542,9513=>542,9514=>542,9515=>542,9516=>542,9517=>542,9518=>542, +9519=>542,9520=>542,9521=>542,9522=>542,9523=>542,9524=>542,9525=>542,9526=>542,9527=>542,9528=>542, +9529=>542,9530=>542,9531=>542,9532=>542,9533=>542,9534=>542,9535=>542,9536=>542,9537=>542,9538=>542, +9539=>542,9540=>542,9541=>542,9542=>542,9543=>542,9544=>542,9545=>542,9546=>542,9547=>542,9548=>542, +9549=>542,9550=>542,9551=>542,9552=>542,9553=>542,9554=>542,9555=>542,9556=>542,9557=>542,9558=>542, +9559=>542,9560=>542,9561=>542,9562=>542,9563=>542,9564=>542,9565=>542,9566=>542,9567=>542,9568=>542, +9569=>542,9570=>542,9571=>542,9572=>542,9573=>542,9574=>542,9575=>542,9576=>542,9577=>542,9578=>542, +9579=>542,9580=>542,9581=>542,9582=>542,9583=>542,9584=>542,9585=>542,9586=>542,9587=>542,9588=>542, +9589=>542,9590=>542,9591=>542,9592=>542,9593=>542,9594=>542,9595=>542,9596=>542,9597=>542,9598=>542, +9599=>542,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692, +9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692, +9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692, +9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850, +9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692, +9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692, +9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692, +9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785, +9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>712, +9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>785,9697=>785,9698=>692, +9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692, +9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785, +9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807, +9784=>807,9785=>807,9786=>807,9787=>807,9788=>807,9791=>552,9792=>658,9793=>658,9794=>807,9795=>807, +9796=>807,9797=>807,9798=>807,9799=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807, +9830=>807,9831=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,10145=>754, +10181=>351,10182=>351,10208=>444,10216=>351,10217=>351,10224=>754,10225=>754,10226=>754,10227=>754,10228=>930, +10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290, +10239=>1290,10240=>659,10241=>659,10242=>659,10243=>659,10244=>659,10245=>659,10246=>659,10247=>659,10248=>659, +10249=>659,10250=>659,10251=>659,10252=>659,10253=>659,10254=>659,10255=>659,10256=>659,10257=>659,10258=>659, +10259=>659,10260=>659,10261=>659,10262=>659,10263=>659,10264=>659,10265=>659,10266=>659,10267=>659,10268=>659, +10269=>659,10270=>659,10271=>659,10272=>659,10273=>659,10274=>659,10275=>659,10276=>659,10277=>659,10278=>659, +10279=>659,10280=>659,10281=>659,10282=>659,10283=>659,10284=>659,10285=>659,10286=>659,10287=>659,10288=>659, +10289=>659,10290=>659,10291=>659,10292=>659,10293=>659,10294=>659,10295=>659,10296=>659,10297=>659,10298=>659, +10299=>659,10300=>659,10301=>659,10302=>659,10303=>659,10304=>659,10305=>659,10306=>659,10307=>659,10308=>659, +10309=>659,10310=>659,10311=>659,10312=>659,10313=>659,10314=>659,10315=>659,10316=>659,10317=>659,10318=>659, +10319=>659,10320=>659,10321=>659,10322=>659,10323=>659,10324=>659,10325=>659,10326=>659,10327=>659,10328=>659, +10329=>659,10330=>659,10331=>659,10332=>659,10333=>659,10334=>659,10335=>659,10336=>659,10337=>659,10338=>659, +10339=>659,10340=>659,10341=>659,10342=>659,10343=>659,10344=>659,10345=>659,10346=>659,10347=>659,10348=>659, +10349=>659,10350=>659,10351=>659,10352=>659,10353=>659,10354=>659,10355=>659,10356=>659,10357=>659,10358=>659, +10359=>659,10360=>659,10361=>659,10362=>659,10363=>659,10364=>659,10365=>659,10366=>659,10367=>659,10368=>659, +10369=>659,10370=>659,10371=>659,10372=>659,10373=>659,10374=>659,10375=>659,10376=>659,10377=>659,10378=>659, +10379=>659,10380=>659,10381=>659,10382=>659,10383=>659,10384=>659,10385=>659,10386=>659,10387=>659,10388=>659, +10389=>659,10390=>659,10391=>659,10392=>659,10393=>659,10394=>659,10395=>659,10396=>659,10397=>659,10398=>659, +10399=>659,10400=>659,10401=>659,10402=>659,10403=>659,10404=>659,10405=>659,10406=>659,10407=>659,10408=>659, +10409=>659,10410=>659,10411=>659,10412=>659,10413=>659,10414=>659,10415=>659,10416=>659,10417=>659,10418=>659, +10419=>659,10420=>659,10421=>659,10422=>659,10423=>659,10424=>659,10425=>659,10426=>659,10427=>659,10428=>659, +10429=>659,10430=>659,10431=>659,10432=>659,10433=>659,10434=>659,10435=>659,10436=>659,10437=>659,10438=>659, +10439=>659,10440=>659,10441=>659,10442=>659,10443=>659,10444=>659,10445=>659,10446=>659,10447=>659,10448=>659, +10449=>659,10450=>659,10451=>659,10452=>659,10453=>659,10454=>659,10455=>659,10456=>659,10457=>659,10458=>659, +10459=>659,10460=>659,10461=>659,10462=>659,10463=>659,10464=>659,10465=>659,10466=>659,10467=>659,10468=>659, +10469=>659,10470=>659,10471=>659,10472=>659,10473=>659,10474=>659,10475=>659,10476=>659,10477=>659,10478=>659, +10479=>659,10480=>659,10481=>659,10482=>659,10483=>659,10484=>659,10485=>659,10486=>659,10487=>659,10488=>659, +10489=>659,10490=>659,10491=>659,10492=>659,10493=>659,10494=>659,10495=>659,10496=>754,10497=>754,10498=>754, +10499=>754,10500=>754,10501=>754,10502=>754,10503=>754,10504=>754,10505=>754,10506=>754,10507=>754,10508=>754, +10509=>754,10510=>754,10511=>754,10512=>754,10513=>754,10514=>754,10515=>754,10516=>754,10517=>754,10518=>754, +10519=>754,10520=>754,10521=>754,10522=>754,10523=>754,10524=>754,10525=>754,10526=>754,10527=>754,10528=>754, +10529=>754,10530=>754,10531=>754,10532=>754,10533=>754,10534=>754,10535=>754,10536=>754,10537=>754,10538=>754, +10539=>754,10540=>754,10541=>754,10542=>754,10543=>754,10544=>754,10545=>754,10546=>754,10547=>754,10548=>754, +10549=>754,10550=>754,10551=>754,10552=>754,10553=>754,10554=>754,10555=>754,10556=>754,10557=>754,10558=>754, +10559=>754,10560=>754,10561=>754,10562=>754,10563=>754,10564=>754,10565=>754,10566=>754,10567=>754,10568=>754, +10569=>754,10570=>754,10571=>754,10572=>754,10573=>754,10574=>754,10575=>754,10576=>754,10577=>754,10578=>754, +10579=>754,10580=>754,10581=>754,10582=>754,10583=>754,10584=>754,10585=>754,10586=>754,10587=>754,10588=>754, +10589=>754,10590=>754,10591=>754,10592=>754,10593=>754,10594=>754,10595=>754,10596=>754,10597=>754,10598=>754, +10599=>754,10600=>754,10601=>754,10602=>754,10603=>754,10604=>754,10605=>754,10606=>754,10607=>754,10608=>754, +10609=>754,10610=>754,10611=>754,10612=>754,10613=>754,10614=>754,10615=>883,10616=>754,10617=>754,10618=>886, +10619=>754,10620=>754,10621=>754,10622=>754,10623=>754,10731=>444,10764=>1361,10765=>469,10766=>469,10799=>754, +11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754, +11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754,11026=>850,11027=>850, +11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11364=>677,11367=>785,11368=>580, +11369=>672,11370=>545,11371=>625,11372=>474,11374=>921,11375=>650,11381=>666,11382=>478,11383=>630,11385=>451, +11386=>542,11388=>237,11389=>409,11520=>695,11521=>571,11522=>569,11523=>592,11524=>568,11525=>866,11526=>680, +11527=>864,11528=>555,11529=>581,11530=>866,11531=>568,11532=>581,11533=>866,11534=>580,11535=>779,11536=>865, +11537=>580,11538=>580,11539=>863,11540=>851,11541=>777,11542=>580,11543=>581,11544=>580,11545=>584,11546=>619, +11547=>571,11548=>883,11549=>613,11550=>608,11551=>766,11552=>861,11553=>569,11554=>580,11555=>582,11556=>674, +11557=>822,11800=>482,11810=>351,11811=>351,11812=>351,11813=>351,11822=>482,42564=>616,42565=>461,42566=>355, +42567=>353,42576=>994,42577=>845,42580=>1074,42581=>783,42582=>1025,42583=>787,42760=>444,42761=>444,42762=>444, +42763=>444,42764=>444,42765=>444,42766=>444,42767=>444,42768=>444,42769=>444,42770=>444,42771=>444,42772=>444, +42773=>444,42774=>444,42779=>332,42780=>332,42781=>228,42782=>228,42783=>228,42891=>361,42892=>247,62464=>598, +62465=>607,62466=>651,62467=>861,62468=>607,62469=>602,62470=>661,62471=>896,62472=>607,62473=>607,62474=>1141, +62475=>624,62476=>623,62477=>866,62478=>607,62479=>623,62480=>908,62481=>681,62482=>728,62483=>682,62484=>859, +62485=>622,62486=>852,62487=>621,62488=>628,62489=>623,62490=>665,62491=>623,62492=>628,62493=>608,62494=>665, +62495=>805,62496=>607,62497=>707,62498=>608,62499=>607,62500=>607,62501=>659,62502=>875,62504=>813,63172=>455, +63173=>542,63174=>576,63175=>580,63176=>853,63185=>450,63188=>450,64256=>637,64257=>600,64258=>600,64259=>847, +64260=>887,64261=>669,64262=>824,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0, +65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0, +65530=>0,65531=>0,65532=>0,65533=>923); +$enc=''; +$diff=''; +$file='dejavuserifcondensedi.z'; +$ctg='dejavuserifcondensedi.ctg.z'; +$originalsize=301244; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedi.z new file mode 100755 index 00000000..eec24c66 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifcondensedi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifi.ctg.z new file mode 100755 index 00000000..aa732f80 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifi.php new file mode 100755 index 00000000..359d6028 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifi.php @@ -0,0 +1,312 @@ +928,'Descent'=>-236,'CapHeight'=>-65,'Flags'=>96,'FontBBox'=>'[-839 -347 1650 1227]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>600); +$up=-63; +$ut=44; +$dw=600; +$cw=array( +0=>600,32=>318,33=>402,34=>460,35=>838,36=>636,37=>950,38=>890,39=>275,40=>390, +41=>390,42=>500,43=>838,44=>318,45=>338,46=>318,47=>337,48=>636,49=>636,50=>636, +51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838, +61=>838,62=>838,63=>536,64=>1000,65=>722,66=>735,67=>765,68=>802,69=>730,70=>694, +71=>799,72=>872,73=>395,74=>401,75=>747,76=>664,77=>1024,78=>875,79=>820,80=>673, +81=>820,82=>753,83=>685,84=>667,85=>843,86=>722,87=>1028,88=>712,89=>660,90=>695, +91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>596,98=>640,99=>560,100=>640, +101=>592,102=>370,103=>640,104=>644,105=>320,106=>310,107=>606,108=>320,109=>948,110=>644, +111=>602,112=>640,113=>640,114=>478,115=>513,116=>402,117=>644,118=>565,119=>856,120=>564, +121=>565,122=>527,123=>636,124=>337,125=>636,126=>838,8364=>636,8218=>318,402=>370,8222=>518, +8230=>1000,8224=>500,8225=>500,710=>500,8240=>1342,352=>685,8249=>400,338=>1137,381=>695,8216=>318, +8217=>318,8220=>511,8221=>511,8226=>590,8211=>500,8212=>1000,732=>500,8482=>1000,353=>513,8250=>400, +339=>989,382=>527,376=>660,160=>318,161=>402,162=>636,163=>636,164=>636,165=>636,166=>337, +167=>500,168=>500,169=>1000,170=>475,171=>612,172=>838,173=>338,174=>1000,175=>500,176=>500, +177=>838,178=>401,179=>401,180=>500,181=>650,182=>636,183=>318,184=>500,185=>401,186=>470, +187=>612,188=>969,189=>969,190=>969,191=>536,192=>722,193=>722,194=>722,195=>722,196=>722, +197=>722,198=>1001,199=>765,200=>730,201=>730,202=>730,203=>730,204=>395,205=>395,206=>395, +207=>395,208=>807,209=>875,210=>820,211=>820,212=>820,213=>820,214=>820,215=>838,216=>820, +217=>843,218=>843,219=>843,220=>843,221=>660,222=>676,223=>668,224=>596,225=>596,226=>596, +227=>596,228=>596,229=>596,230=>940,231=>560,232=>592,233=>592,234=>592,235=>592,236=>320, +237=>320,238=>320,239=>320,240=>602,241=>644,242=>602,243=>602,244=>602,245=>602,246=>602, +247=>838,248=>602,249=>644,250=>644,251=>644,252=>644,253=>565,254=>640,255=>565,256=>722, +257=>596,258=>722,259=>596,260=>722,261=>596,262=>765,263=>560,264=>765,265=>560,266=>765, +267=>560,268=>765,269=>560,270=>802,271=>640,272=>807,273=>640,274=>730,275=>592,276=>730, +277=>592,278=>730,279=>592,280=>730,281=>592,282=>730,283=>592,284=>799,285=>640,286=>799, +287=>640,288=>799,289=>640,290=>799,291=>640,292=>872,293=>644,294=>872,295=>644,296=>395, +297=>320,298=>395,299=>320,300=>395,301=>320,302=>395,303=>320,304=>395,305=>320,306=>801, +307=>533,308=>401,309=>310,310=>747,311=>606,312=>606,313=>664,314=>320,315=>664,316=>320, +317=>664,318=>400,319=>671,320=>465,321=>669,322=>324,323=>875,324=>644,325=>875,326=>644, +327=>875,328=>644,329=>866,330=>843,331=>644,332=>820,333=>602,334=>820,335=>602,336=>820, +337=>602,340=>753,341=>478,342=>753,343=>478,344=>753,345=>478,346=>685,347=>513,348=>685, +349=>513,350=>685,351=>513,354=>667,355=>402,356=>667,357=>402,358=>667,359=>402,360=>843, +361=>644,362=>843,363=>644,364=>843,365=>644,366=>843,367=>644,368=>843,369=>644,370=>843, +371=>644,372=>1028,373=>856,374=>660,375=>565,377=>695,378=>527,379=>695,380=>527,383=>370, +384=>640,385=>735,386=>735,387=>640,388=>735,389=>640,390=>765,391=>765,392=>560,393=>807, +394=>802,395=>735,396=>640,397=>602,398=>730,399=>820,400=>623,401=>694,403=>799,404=>712, +405=>932,406=>395,407=>395,408=>747,409=>606,410=>320,411=>634,412=>948,413=>875,414=>644, +415=>820,416=>820,417=>602,418=>1040,419=>807,420=>673,421=>640,422=>753,423=>685,424=>513, +425=>707,426=>324,427=>402,428=>667,429=>402,430=>667,431=>843,432=>644,433=>829,434=>760, +435=>738,436=>745,437=>695,438=>527,439=>564,440=>564,441=>564,443=>636,444=>687,445=>564, +446=>536,448=>295,449=>492,450=>459,451=>295,452=>1497,453=>1329,454=>1167,455=>1065,456=>974, +457=>630,458=>1276,459=>1185,460=>954,461=>722,462=>596,463=>395,464=>320,465=>820,466=>602, +467=>843,468=>644,469=>843,470=>644,471=>843,472=>644,473=>843,474=>644,475=>843,476=>644, +477=>592,478=>722,479=>596,480=>722,481=>596,482=>1001,483=>940,484=>848,485=>640,486=>799, +487=>640,488=>747,489=>606,490=>820,491=>602,492=>820,493=>602,494=>564,495=>564,496=>320, +497=>1497,498=>1329,499=>1167,500=>799,501=>640,502=>1154,504=>875,505=>644,506=>722,507=>596, +508=>1001,509=>940,510=>820,511=>602,512=>722,513=>596,514=>722,515=>596,516=>730,517=>592, +518=>730,519=>592,520=>395,521=>320,522=>395,523=>320,524=>820,525=>602,526=>820,527=>602, +528=>753,529=>478,530=>753,531=>478,532=>843,533=>644,534=>843,535=>644,536=>685,537=>513, +538=>667,539=>402,540=>627,541=>521,542=>872,543=>644,544=>843,545=>814,548=>695,549=>527, +550=>722,551=>596,552=>730,553=>592,554=>820,555=>602,556=>820,557=>602,558=>820,559=>602, +560=>820,561=>602,562=>660,563=>565,564=>500,565=>832,566=>494,567=>310,568=>960,569=>960, +570=>722,571=>765,572=>560,573=>664,574=>667,575=>513,576=>527,577=>583,578=>464,581=>722, +592=>596,593=>640,594=>675,595=>640,596=>560,597=>560,598=>647,599=>683,600=>592,601=>592, +602=>843,603=>537,604=>509,605=>773,606=>613,607=>315,608=>683,609=>640,610=>544,611=>712, +612=>564,613=>644,614=>644,615=>644,616=>320,617=>392,618=>320,619=>380,620=>454,621=>363, +622=>704,623=>948,624=>948,625=>948,626=>644,627=>694,628=>646,629=>602,630=>790,631=>647, +632=>602,633=>501,634=>501,635=>551,636=>478,637=>478,638=>453,639=>453,640=>594,641=>594, +642=>513,643=>271,644=>370,645=>487,646=>324,647=>402,648=>402,649=>644,650=>620,651=>608, +652=>565,653=>856,654=>565,655=>655,656=>597,657=>560,658=>564,659=>560,660=>536,661=>536, +662=>536,663=>513,664=>820,665=>563,666=>613,667=>654,668=>667,669=>366,670=>606,671=>646, +672=>683,673=>536,674=>536,675=>996,676=>1033,677=>998,678=>809,679=>598,680=>782,681=>894, +682=>646,683=>676,684=>598,685=>443,686=>781,687=>767,688=>433,689=>430,690=>264,691=>347, +692=>347,693=>430,694=>392,695=>539,696=>355,697=>278,699=>318,700=>318,701=>318,702=>307, +703=>307,704=>280,705=>281,711=>500,712=>282,713=>500,716=>282,720=>337,721=>337,722=>307, +723=>307,726=>392,728=>500,729=>500,730=>500,731=>500,733=>500,734=>417,736=>448,737=>243, +738=>337,739=>355,740=>281,741=>493,742=>493,743=>493,744=>493,745=>493,750=>484,768=>0, +769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, +779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0, +789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0, +799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0, +809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0, +819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0, +829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,865=>0,880=>740,881=>531,884=>278, +885=>278,890=>500,891=>560,892=>560,893=>560,894=>337,900=>500,901=>500,902=>722,903=>318, +904=>900,905=>1039,906=>562,908=>835,910=>897,911=>853,912=>392,913=>722,914=>735,915=>694, +916=>722,917=>730,918=>695,919=>872,920=>820,921=>395,922=>747,923=>722,924=>1024,925=>875, +926=>704,927=>820,928=>872,929=>673,931=>707,932=>667,933=>660,934=>820,935=>712,936=>877, +937=>829,938=>395,939=>660,940=>675,941=>537,942=>599,943=>392,944=>608,945=>675,946=>578, +947=>598,948=>602,949=>537,950=>542,951=>599,952=>602,953=>392,954=>656,955=>634,956=>650, +957=>608,958=>551,959=>602,960=>657,961=>588,962=>560,963=>683,964=>553,965=>608,966=>700, +967=>606,968=>784,969=>815,970=>392,971=>608,972=>602,973=>608,974=>815,976=>583,977=>715, +978=>687,979=>874,980=>687,981=>682,982=>815,983=>624,984=>820,985=>602,986=>765,987=>560, +988=>694,989=>463,990=>590,991=>660,992=>782,993=>577,1008=>624,1009=>588,1010=>560,1011=>310, +1012=>820,1013=>560,1014=>560,1015=>676,1016=>640,1017=>765,1018=>1024,1019=>708,1020=>588,1021=>765, +1022=>765,1023=>765,1024=>730,1025=>730,1026=>799,1027=>662,1028=>765,1029=>685,1030=>395,1031=>395, +1032=>401,1033=>1084,1034=>1118,1035=>872,1036=>774,1037=>872,1038=>723,1039=>872,1040=>757,1041=>735, +1042=>735,1043=>662,1044=>813,1045=>730,1046=>1124,1047=>623,1048=>872,1049=>872,1050=>774,1051=>834, +1052=>1024,1053=>872,1054=>820,1055=>872,1056=>673,1057=>765,1058=>667,1059=>723,1060=>830,1061=>712, +1062=>872,1063=>773,1064=>1141,1065=>1141,1066=>794,1067=>984,1068=>674,1069=>765,1070=>1193,1071=>808, +1072=>596,1073=>610,1074=>582,1075=>505,1076=>634,1077=>592,1078=>1137,1079=>545,1080=>644,1081=>644, +1082=>597,1083=>637,1084=>829,1085=>659,1086=>602,1087=>644,1088=>640,1089=>560,1090=>948,1091=>580, +1092=>783,1093=>564,1094=>698,1095=>622,1096=>947,1097=>1001,1098=>667,1099=>814,1100=>544,1101=>560, +1102=>880,1103=>662,1104=>592,1105=>592,1106=>624,1107=>505,1108=>560,1109=>513,1110=>320,1111=>320, +1112=>310,1113=>859,1114=>878,1115=>644,1116=>597,1117=>644,1118=>580,1119=>644,1122=>762,1123=>882, +1124=>1129,1125=>834,1130=>1124,1131=>920,1136=>944,1137=>902,1138=>820,1139=>552,1140=>859,1141=>678, +1164=>707,1165=>544,1168=>672,1169=>529,1170=>662,1171=>505,1172=>730,1173=>614,1174=>1124,1175=>1137, +1176=>623,1177=>545,1178=>774,1179=>604,1182=>774,1183=>597,1184=>892,1185=>669,1186=>872,1187=>712, +1188=>1139,1189=>857,1190=>1206,1191=>943,1194=>765,1195=>560,1196=>667,1197=>1013,1198=>660,1199=>571, +1200=>660,1201=>571,1202=>712,1203=>629,1204=>936,1205=>732,1206=>749,1207=>677,1210=>749,1211=>644, +1216=>395,1217=>1124,1218=>1137,1219=>747,1220=>606,1223=>872,1224=>667,1227=>749,1228=>667,1231=>320, +1232=>757,1233=>596,1234=>757,1235=>596,1236=>1001,1237=>940,1238=>730,1239=>592,1240=>820,1241=>592, +1242=>820,1243=>592,1244=>1124,1245=>1137,1246=>623,1247=>545,1248=>564,1249=>564,1250=>872,1251=>644, +1252=>872,1253=>644,1254=>820,1255=>602,1256=>820,1257=>602,1258=>820,1259=>602,1260=>765,1261=>560, +1262=>723,1263=>580,1264=>723,1265=>580,1266=>723,1267=>580,1268=>773,1269=>622,1270=>662,1271=>505, +1272=>984,1273=>814,1296=>623,1297=>545,1298=>834,1299=>637,1300=>1199,1301=>939,1306=>820,1307=>640, +1308=>1028,1309=>856,4256=>732,4257=>860,4258=>837,4259=>869,4260=>743,4261=>991,4262=>925,4263=>1111, +4264=>576,4265=>760,4266=>972,4267=>951,4268=>753,4269=>1084,4270=>906,4271=>838,4272=>1049,4273=>743, +4274=>679,4275=>1025,4276=>946,4277=>1029,4278=>741,4279=>743,4280=>742,4281=>743,4282=>889,4283=>946, +4284=>724,4285=>765,4286=>743,4287=>968,4288=>1010,4289=>712,4290=>874,4291=>744,4292=>847,4293=>960, +4304=>550,4305=>581,4306=>599,4307=>843,4308=>571,4309=>567,4310=>620,4311=>871,4312=>569,4313=>556, +4314=>1076,4315=>596,4316=>596,4317=>835,4318=>580,4319=>590,4320=>833,4321=>607,4322=>758,4323=>701, +4324=>825,4325=>595,4326=>868,4327=>578,4328=>604,4329=>596,4330=>685,4331=>597,4332=>557,4333=>585, +4334=>625,4335=>693,4336=>582,4337=>613,4338=>581,4339=>582,4340=>580,4341=>659,4342=>896,4343=>636, +4344=>592,4345=>628,4346=>581,4347=>456,4348=>373,7426=>940,7432=>509,7433=>320,7444=>989,7446=>602, +7447=>602,7453=>737,7454=>948,7455=>948,7468=>455,7469=>630,7470=>463,7472=>505,7473=>459,7474=>459, +7475=>503,7476=>549,7477=>249,7478=>252,7479=>470,7480=>418,7481=>645,7482=>551,7483=>551,7484=>516, +7486=>424,7487=>474,7488=>420,7489=>531,7490=>647,7491=>386,7492=>386,7493=>400,7494=>618,7495=>400, +7496=>400,7497=>387,7498=>387,7499=>428,7500=>340,7501=>400,7502=>175,7503=>365,7504=>613,7505=>399, +7506=>385,7507=>346,7508=>385,7509=>385,7510=>400,7511=>247,7512=>399,7513=>464,7514=>613,7515=>373, +7522=>201,7523=>347,7524=>399,7525=>373,7543=>640,7544=>549,7547=>372,7557=>320,7579=>488,7580=>353, +7581=>353,7582=>473,7583=>428,7584=>233,7585=>316,7586=>488,7587=>399,7588=>201,7589=>201,7590=>201, +7591=>201,7592=>318,7593=>263,7594=>263,7595=>455,7596=>613,7597=>613,7598=>495,7599=>492,7600=>487, +7601=>385,7602=>473,7603=>416,7604=>299,7605=>334,7606=>399,7607=>477,7609=>464,7610=>355,7611=>332, +7612=>418,7613=>418,7614=>452,7615=>473,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0, +7680=>722,7681=>596,7682=>735,7683=>640,7684=>735,7685=>640,7686=>735,7687=>640,7688=>765,7689=>560, +7690=>802,7691=>640,7692=>802,7693=>640,7694=>802,7695=>640,7696=>802,7697=>640,7698=>802,7699=>640, +7700=>730,7701=>592,7702=>730,7703=>592,7704=>730,7705=>592,7706=>730,7707=>592,7708=>730,7709=>592, +7710=>694,7711=>370,7712=>799,7713=>640,7714=>872,7715=>644,7716=>872,7717=>644,7718=>872,7719=>644, +7720=>872,7721=>644,7722=>872,7723=>644,7724=>395,7725=>320,7728=>747,7729=>606,7730=>747,7731=>606, +7732=>747,7733=>606,7734=>664,7735=>320,7736=>664,7737=>320,7738=>664,7739=>320,7740=>664,7741=>320, +7742=>1024,7743=>948,7744=>1024,7745=>948,7746=>1024,7747=>953,7748=>875,7749=>644,7750=>875,7751=>644, +7752=>875,7753=>644,7754=>875,7755=>644,7756=>820,7757=>602,7760=>820,7761=>602,7762=>820,7763=>602, +7764=>673,7765=>640,7766=>673,7767=>640,7768=>753,7769=>478,7770=>753,7771=>478,7772=>753,7773=>478, +7774=>753,7775=>478,7776=>685,7777=>513,7778=>685,7779=>513,7784=>685,7785=>513,7786=>667,7787=>402, +7788=>667,7789=>402,7790=>667,7791=>402,7792=>667,7793=>402,7794=>843,7795=>644,7796=>843,7797=>644, +7798=>843,7799=>644,7800=>843,7801=>644,7802=>843,7803=>644,7804=>722,7805=>565,7806=>722,7807=>565, +7808=>1028,7809=>856,7810=>1028,7811=>856,7812=>1028,7813=>856,7814=>1028,7815=>856,7816=>1028,7817=>856, +7818=>712,7819=>564,7820=>712,7821=>564,7822=>660,7823=>565,7824=>695,7825=>527,7826=>695,7827=>527, +7828=>695,7829=>527,7830=>644,7831=>402,7832=>856,7833=>565,7834=>903,7835=>370,7838=>829,7839=>602, +7840=>722,7841=>596,7842=>722,7843=>596,7852=>722,7853=>596,7854=>722,7855=>596,7856=>722,7857=>596, +7858=>722,7859=>596,7860=>722,7861=>596,7862=>722,7863=>596,7864=>730,7865=>592,7866=>730,7867=>592, +7868=>730,7869=>592,7878=>730,7879=>592,7880=>395,7881=>320,7882=>395,7883=>320,7884=>820,7885=>602, +7886=>820,7887=>602,7896=>820,7897=>602,7908=>843,7909=>644,7910=>843,7911=>644,7922=>660,7923=>565, +7924=>660,7925=>565,7926=>660,7927=>565,7928=>660,7929=>565,7936=>675,7937=>675,7938=>675,7939=>675, +7940=>675,7941=>675,7942=>675,7943=>675,7944=>722,7945=>722,7946=>869,7947=>869,7948=>734,7949=>763, +7950=>722,7951=>722,7952=>537,7953=>537,7954=>537,7955=>537,7956=>537,7957=>537,7960=>853,7961=>841, +7962=>1067,7963=>1077,7964=>1008,7965=>1035,7968=>599,7969=>599,7970=>599,7971=>599,7972=>599,7973=>599, +7974=>599,7975=>599,7976=>998,7977=>992,7978=>1212,7979=>1224,7980=>1159,7981=>1183,7982=>1098,7983=>1095, +7984=>392,7985=>392,7986=>392,7987=>392,7988=>392,7989=>392,7990=>392,7991=>392,7992=>521,7993=>512, +7994=>735,7995=>738,7996=>679,7997=>706,7998=>624,7999=>615,8000=>602,8001=>602,8002=>602,8003=>602, +8004=>602,8005=>602,8008=>820,8009=>859,8010=>1120,8011=>1127,8012=>937,8013=>964,8016=>608,8017=>608, +8018=>608,8019=>608,8020=>608,8021=>608,8022=>608,8023=>608,8025=>851,8027=>1079,8029=>1044,8031=>953, +8032=>815,8033=>815,8034=>815,8035=>815,8036=>815,8037=>815,8038=>815,8039=>815,8040=>829,8041=>870, +8042=>1131,8043=>1137,8044=>946,8045=>976,8046=>938,8047=>970,8048=>675,8049=>675,8050=>537,8051=>537, +8052=>599,8053=>599,8054=>392,8055=>392,8056=>602,8057=>602,8058=>608,8059=>608,8060=>815,8061=>815, +8064=>675,8065=>675,8066=>675,8067=>675,8068=>675,8069=>675,8070=>675,8071=>675,8072=>722,8073=>722, +8074=>869,8075=>869,8076=>734,8077=>763,8078=>722,8079=>722,8080=>599,8081=>599,8082=>599,8083=>599, +8084=>599,8085=>599,8086=>599,8087=>599,8088=>998,8089=>992,8090=>1212,8091=>1224,8092=>1159,8093=>1183, +8094=>1098,8095=>1095,8096=>815,8097=>815,8098=>815,8099=>815,8100=>815,8101=>815,8102=>815,8103=>815, +8104=>829,8105=>870,8106=>1131,8107=>1137,8108=>946,8109=>976,8110=>938,8111=>970,8112=>675,8113=>675, +8114=>675,8115=>675,8116=>675,8118=>675,8119=>675,8120=>722,8121=>722,8122=>722,8123=>722,8124=>722, +8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>599,8131=>599,8132=>599,8134=>599,8135=>599, +8136=>912,8137=>900,8138=>1063,8139=>1039,8140=>872,8141=>500,8142=>500,8143=>500,8144=>392,8145=>392, +8146=>392,8147=>392,8150=>392,8151=>392,8152=>395,8153=>395,8154=>588,8155=>562,8157=>500,8158=>500, +8159=>500,8160=>608,8161=>608,8162=>608,8163=>608,8164=>588,8165=>588,8166=>608,8167=>608,8168=>660, +8169=>660,8170=>921,8171=>897,8172=>790,8173=>500,8174=>500,8175=>500,8178=>815,8179=>815,8180=>815, +8182=>815,8183=>815,8184=>961,8185=>835,8186=>984,8187=>853,8188=>829,8189=>500,8190=>500,8192=>500, +8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100, +8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>338,8209=>338,8210=>636,8213=>1000,8214=>500, +8215=>500,8219=>318,8223=>511,8227=>590,8228=>334,8229=>667,8234=>0,8235=>0,8236=>0,8237=>0, +8238=>0,8239=>200,8241=>1734,8242=>227,8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339, +8252=>527,8253=>536,8254=>500,8258=>1000,8260=>167,8261=>390,8262=>390,8263=>976,8264=>753,8265=>753, +8267=>636,8268=>500,8269=>500,8270=>500,8271=>337,8273=>500,8274=>450,8275=>1000,8279=>663,8287=>222, +8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0, +8303=>0,8304=>401,8305=>201,8308=>401,8309=>401,8310=>401,8311=>401,8312=>401,8313=>401,8314=>528, +8315=>528,8316=>528,8317=>246,8318=>246,8319=>405,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401, +8325=>401,8326=>401,8327=>401,8328=>401,8329=>401,8330=>528,8331=>528,8332=>528,8333=>246,8334=>246, +8336=>386,8337=>387,8338=>385,8339=>355,8340=>387,8358=>660,8367=>1057,8369=>706,8372=>780,8373=>636, +8451=>1119,8457=>1047,8462=>644,8463=>644,8470=>946,8486=>829,8487=>829,8490=>747,8491=>722,8513=>775, +8514=>557,8515=>557,8516=>611,8523=>890,8531=>969,8532=>969,8533=>969,8534=>969,8535=>969,8536=>969, +8537=>969,8538=>969,8539=>969,8540=>969,8541=>969,8542=>969,8543=>568,8544=>395,8545=>590,8546=>786, +8547=>966,8548=>722,8549=>981,8550=>1176,8551=>1372,8552=>932,8553=>712,8554=>932,8555=>1127,8556=>664, +8557=>765,8558=>802,8559=>1024,8560=>320,8561=>640,8562=>959,8563=>885,8564=>565,8565=>885,8566=>1205, +8567=>1524,8568=>884,8569=>564,8570=>884,8571=>1204,8572=>320,8573=>560,8574=>640,8575=>948,8576=>1206, +8577=>802,8578=>1206,8579=>765,8580=>560,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838, +8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838, +8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838, +8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838, +8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838, +8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838, +8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838, +8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838, +8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838, +8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838, +8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838, +8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>604,8706=>517,8707=>542,8708=>542, +8710=>698,8711=>698,8712=>740,8713=>740,8715=>740,8716=>740,8719=>796,8720=>796,8721=>714,8722=>838, +8723=>838,8724=>838,8725=>337,8727=>680,8728=>490,8729=>490,8730=>637,8731=>637,8732=>637,8733=>677, +8734=>833,8735=>838,8736=>838,8739=>291,8740=>479,8741=>462,8742=>634,8743=>732,8744=>732,8745=>838, +8746=>838,8747=>521,8748=>852,8749=>1182,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838, +8770=>838,8771=>838,8776=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1033,8789=>1033,8800=>838, +8801=>838,8804=>838,8805=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8844=>838, +8845=>838,8846=>838,8847=>846,8848=>846,8849=>846,8850=>846,8851=>838,8852=>838,8853=>838,8854=>838, +8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838, +8865=>838,8866=>860,8867=>860,8868=>940,8869=>940,8870=>567,8871=>567,8872=>860,8873=>860,8874=>860, +8875=>1031,8876=>860,8877=>860,8878=>860,8879=>1031,8901=>342,8962=>764,8968=>390,8969=>390,8970=>390, +8971=>390,8976=>838,8977=>513,8984=>1000,8985=>838,8992=>521,8993=>521,8997=>1000,9000=>1443,9085=>919, +9134=>521,9167=>945,9251=>764,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602,9478=>602, +9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602,9488=>602, +9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602,9498=>602, +9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602,9508=>602, +9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602,9518=>602, +9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602,9528=>602, +9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602,9538=>602, +9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602,9548=>602, +9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602,9558=>602, +9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602,9568=>602, +9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602,9578=>602, +9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602,9588=>602, +9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602,9598=>602, +9599=>602,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769, +9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769, +9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769, +9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945, +9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769, +9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769, +9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769, +9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873, +9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791, +9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873,9697=>873,9698=>769, +9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769, +9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873, +9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896, +9784=>896,9785=>896,9786=>896,9787=>896,9788=>896,9791=>614,9792=>731,9793=>731,9794=>896,9795=>896, +9796=>896,9797=>896,9798=>896,9799=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896, +9830=>896,9831=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,10145=>838, +10181=>390,10182=>390,10208=>494,10216=>390,10217=>390,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1033, +10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434, +10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732,10244=>732,10245=>732,10246=>732,10247=>732,10248=>732, +10249=>732,10250=>732,10251=>732,10252=>732,10253=>732,10254=>732,10255=>732,10256=>732,10257=>732,10258=>732, +10259=>732,10260=>732,10261=>732,10262=>732,10263=>732,10264=>732,10265=>732,10266=>732,10267=>732,10268=>732, +10269=>732,10270=>732,10271=>732,10272=>732,10273=>732,10274=>732,10275=>732,10276=>732,10277=>732,10278=>732, +10279=>732,10280=>732,10281=>732,10282=>732,10283=>732,10284=>732,10285=>732,10286=>732,10287=>732,10288=>732, +10289=>732,10290=>732,10291=>732,10292=>732,10293=>732,10294=>732,10295=>732,10296=>732,10297=>732,10298=>732, +10299=>732,10300=>732,10301=>732,10302=>732,10303=>732,10304=>732,10305=>732,10306=>732,10307=>732,10308=>732, +10309=>732,10310=>732,10311=>732,10312=>732,10313=>732,10314=>732,10315=>732,10316=>732,10317=>732,10318=>732, +10319=>732,10320=>732,10321=>732,10322=>732,10323=>732,10324=>732,10325=>732,10326=>732,10327=>732,10328=>732, +10329=>732,10330=>732,10331=>732,10332=>732,10333=>732,10334=>732,10335=>732,10336=>732,10337=>732,10338=>732, +10339=>732,10340=>732,10341=>732,10342=>732,10343=>732,10344=>732,10345=>732,10346=>732,10347=>732,10348=>732, +10349=>732,10350=>732,10351=>732,10352=>732,10353=>732,10354=>732,10355=>732,10356=>732,10357=>732,10358=>732, +10359=>732,10360=>732,10361=>732,10362=>732,10363=>732,10364=>732,10365=>732,10366=>732,10367=>732,10368=>732, +10369=>732,10370=>732,10371=>732,10372=>732,10373=>732,10374=>732,10375=>732,10376=>732,10377=>732,10378=>732, +10379=>732,10380=>732,10381=>732,10382=>732,10383=>732,10384=>732,10385=>732,10386=>732,10387=>732,10388=>732, +10389=>732,10390=>732,10391=>732,10392=>732,10393=>732,10394=>732,10395=>732,10396=>732,10397=>732,10398=>732, +10399=>732,10400=>732,10401=>732,10402=>732,10403=>732,10404=>732,10405=>732,10406=>732,10407=>732,10408=>732, +10409=>732,10410=>732,10411=>732,10412=>732,10413=>732,10414=>732,10415=>732,10416=>732,10417=>732,10418=>732, +10419=>732,10420=>732,10421=>732,10422=>732,10423=>732,10424=>732,10425=>732,10426=>732,10427=>732,10428=>732, +10429=>732,10430=>732,10431=>732,10432=>732,10433=>732,10434=>732,10435=>732,10436=>732,10437=>732,10438=>732, +10439=>732,10440=>732,10441=>732,10442=>732,10443=>732,10444=>732,10445=>732,10446=>732,10447=>732,10448=>732, +10449=>732,10450=>732,10451=>732,10452=>732,10453=>732,10454=>732,10455=>732,10456=>732,10457=>732,10458=>732, +10459=>732,10460=>732,10461=>732,10462=>732,10463=>732,10464=>732,10465=>732,10466=>732,10467=>732,10468=>732, +10469=>732,10470=>732,10471=>732,10472=>732,10473=>732,10474=>732,10475=>732,10476=>732,10477=>732,10478=>732, +10479=>732,10480=>732,10481=>732,10482=>732,10483=>732,10484=>732,10485=>732,10486=>732,10487=>732,10488=>732, +10489=>732,10490=>732,10491=>732,10492=>732,10493=>732,10494=>732,10495=>732,10496=>838,10497=>838,10498=>838, +10499=>838,10500=>838,10501=>838,10502=>838,10503=>838,10504=>838,10505=>838,10506=>838,10507=>838,10508=>838, +10509=>838,10510=>838,10511=>838,10512=>838,10513=>838,10514=>838,10515=>838,10516=>838,10517=>838,10518=>838, +10519=>838,10520=>838,10521=>838,10522=>838,10523=>838,10524=>838,10525=>838,10526=>838,10527=>838,10528=>838, +10529=>838,10530=>838,10531=>838,10532=>838,10533=>838,10534=>838,10535=>838,10536=>838,10537=>838,10538=>838, +10539=>838,10540=>838,10541=>838,10542=>838,10543=>838,10544=>838,10545=>838,10546=>838,10547=>838,10548=>838, +10549=>838,10550=>838,10551=>838,10552=>838,10553=>838,10554=>838,10555=>838,10556=>838,10557=>838,10558=>838, +10559=>838,10560=>838,10561=>838,10562=>838,10563=>838,10564=>838,10565=>838,10566=>838,10567=>838,10568=>838, +10569=>838,10570=>838,10571=>838,10572=>838,10573=>838,10574=>838,10575=>838,10576=>838,10577=>838,10578=>838, +10579=>838,10580=>838,10581=>838,10582=>838,10583=>838,10584=>838,10585=>838,10586=>838,10587=>838,10588=>838, +10589=>838,10590=>838,10591=>838,10592=>838,10593=>838,10594=>838,10595=>838,10596=>838,10597=>838,10598=>838, +10599=>838,10600=>838,10601=>838,10602=>838,10603=>838,10604=>838,10605=>838,10606=>838,10607=>838,10608=>838, +10609=>838,10610=>838,10611=>838,10612=>838,10613=>838,10614=>838,10615=>981,10616=>838,10617=>838,10618=>984, +10619=>838,10620=>838,10621=>838,10622=>838,10623=>838,10731=>494,10764=>1513,10765=>521,10766=>521,10799=>838, +11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838, +11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838,11026=>945,11027=>945, +11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11364=>753,11367=>872,11368=>644, +11369=>747,11370=>606,11371=>695,11372=>527,11374=>1024,11375=>722,11381=>740,11382=>531,11383=>700,11385=>501, +11386=>602,11388=>264,11389=>455,11520=>773,11521=>635,11522=>633,11523=>658,11524=>631,11525=>962,11526=>756, +11527=>960,11528=>617,11529=>646,11530=>962,11531=>632,11532=>646,11533=>962,11534=>645,11535=>866,11536=>961, +11537=>645,11538=>645,11539=>959,11540=>945,11541=>863,11542=>644,11543=>646,11544=>645,11545=>649,11546=>688, +11547=>634,11548=>982,11549=>681,11550=>676,11551=>852,11552=>957,11553=>632,11554=>645,11555=>646,11556=>749, +11557=>914,11800=>536,11810=>390,11811=>390,11812=>390,11813=>390,11822=>536,42564=>685,42565=>513,42566=>395, +42567=>392,42576=>1104,42577=>939,42580=>1193,42581=>871,42582=>1140,42583=>875,42760=>493,42761=>493,42762=>493, +42763=>493,42764=>493,42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493, +42773=>493,42774=>493,42779=>369,42780=>369,42781=>253,42782=>253,42783=>253,42891=>402,42892=>275,62464=>664, +62465=>675,62466=>724,62467=>958,62468=>675,62469=>669,62470=>735,62471=>997,62472=>675,62473=>675,62474=>1268, +62475=>693,62476=>692,62477=>963,62478=>675,62479=>692,62480=>1009,62481=>756,62482=>809,62483=>758,62484=>955, +62485=>691,62486=>946,62487=>690,62488=>698,62489=>692,62490=>739,62491=>692,62492=>698,62493=>676,62494=>739, +62495=>895,62496=>675,62497=>785,62498=>676,62499=>675,62500=>675,62501=>732,62502=>972,62504=>904,63172=>505, +63173=>602,63174=>640,63175=>644,63176=>947,63185=>500,63188=>500,64256=>708,64257=>667,64258=>667,64259=>941, +64260=>986,64261=>744,64262=>916,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0, +65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0, +65530=>0,65531=>0,65532=>0,65533=>1025); +$enc=''; +$diff=''; +$file='dejavuserifi.z'; +$ctg='dejavuserifi.ctg.z'; +$originalsize=301828; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifi.z new file mode 100755 index 00000000..3b751b08 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/dejavuserifi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/AUTHORS b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/AUTHORS new file mode 100755 index 00000000..e7f99ba3 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/AUTHORS @@ -0,0 +1,208 @@ +-*- mode:text; coding:utf-8; -*- + GNU FreeFont Authors + ==================== + +The FreeFont collection is being maintained by + Steve White +The folowing list cites the other contributors that contributed to +particular ISO 10646 blocks. + +* URW++ Design & Development GmbH + + Basic Latin (U+0041-U+007A) + Latin-1 Supplement (U+00C0-U+00FF) (most) + Latin Extended-A (U+0100-U+017F) + Spacing Modifier Letters (U+02B0-U+02FF) + Mathematical Operators (U+2200-U+22FF) (parts) + Block Elements (U+2580-U+259F) + Dingbats (U+2700-U+27BF) + +* Yannis Haralambous and John + Plaice + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Greek (U+0370-U+03FF) + Armenian (U+0530-U+058F) + Hebrew (U+0590-U+05FF) + Arabic (U+0600-U+06FF) + Currency Symbols (U+20A0-U+20CF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +* Young U. Ryu + + Arrows (U+2190-U+21FF) + Mathematical Symbols (U+2200-U+22FF) + Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) + +* Valek Filippov + + Cyrillic (U+0400-U+04FF) + +* Wadalab Kanji Comittee + + Hiragana (U+3040-U+309F) + Katakana (U+30A0-U+30FF) + +* Angelo Haritsis + + Greek (U+0370-U+03FF) + +* Yannis Haralambous and Virach Sornlertlamvanich + + Thai (U+0E00-U+0E7F) + +* Shaheed R. Haque + + Bengali (U+0980-U+09FF) + +* Sam Stepanyan + + Armenian (U+0530-U+058F) + +* Mohamed Ishan + + Thaana (U+0780-U+07BF) + +* Sushant Kumar Dash + + Oriya (U+0B00-U+0B7F) + +* Harsh Kumar + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + +* Prasad A. Chodavarapu + + Telugu (U+0C00-U+0C7F) + +* Frans Velthuis and Anshuman Pandey + + + Devanagari (U+0900-U+097F) + +* Hardip Singh Pannu + + Gurmukhi (U+0A00-U+0A7F) + +* Jeroen Hellingman + + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + +* Thomas Ridgeway + + Tamil (U+0B80-U+0BFF) + +* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, + Prof. Dr. Manfred Kudlek , Olaf + Kummer , and Jochen Metzinger + + Ethiopic (U+1200-U+137F) + +* Maxim Iorsh + + Hebrew (U+0590-U+05FF) + +* Vyacheslav Dikonov + + Syriac (U+0700-U+074A) + Braille (U+2800-U+28FF) + +* Panayotis Katsaloulis + + Greek Extended (U+1F00-U+1FFF) + +* M.S. Sridhar + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Tamil (U+0B80-U+0BFF) + Telugu (U+0C00-U+0C7F) + Kannada (U+0C80-U+0CFF) + Malayalam (U+0D00-U+0D7F) + +* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt + + + Sinhala (U+0D80-U+0DFF) + +* Dan Shurovich Chirkov + + Cyrillic (U+0400-U+04FF) + +* Abbas Izad + + Arabic (U+0600-U+06FF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +* Denis Jacquerye + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + +* K.H. Hussain and R. Chitrajan + + Malayalam (U+0D00-U+0D7F) + +* Solaiman Karim and Omi Azad + + Bengali (U+0980-U+09FF) + +* Sonali Sonania and Monika Shah + + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + +* Pravin Satpute , Bageshri Salvi + , Rahul Bhalerao and Sandeep Shedmake + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + Tamil (U+0B80-U+0BFF) + +* Kulbir Singh Thind + + Gurmukhi (U+0A00-U+0A7F) + +* Gia Shervashidze + + Georgian (U+10A0-U+10FF) + +* Daniel Johnson + + Cherokee (U+13A0-U+13FF) + +* George Douros + + Gothic (U+10330-U+1034F) + Phoenecian (U+10900-U+1091F) + Byzantine Musical Symbols (U+1D000-U+1D0FF) + Western Musical Symbols (U+1D100-U+1D1DF) + Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) + Mah Jong Tiles (U+1F000-U+1F02B) + Dominoes (U+1F030-U+1F093) + +* Steve White + Coptic (U+2C80-U+2CFF) + +* Primož Peterlin + maintained FreeFont for several years, and is thanked for all his work. + +Please see the CREDITS file for details on who contributed particular +subsets of the glyphs in font files. + +-------------------------------------------------------------------------- +$Id: AUTHORS,v 1.18 2009/01/04 15:57:54 Stevan_White Exp $ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/COPYING b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/COPYING new file mode 100755 index 00000000..818433ec --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/CREDITS b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/CREDITS new file mode 100755 index 00000000..0f47440d --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/CREDITS @@ -0,0 +1,528 @@ +-*- mode:text; coding:utf-8; -*- + GNU FreeFont Credits + ==================== + +This file lists contributors and contributions to the GNU FreeFont project. + + +* URW++ Design & Development GmbH + +URW++ donated a set of 35 core PostScript Type 1 fonts to the +Ghostscript project , to be available +under the terms of GNU General Public License (GPL). + + Basic Latin (U+0041-U+007A) + Latin-1 Supplement (U+00C0-U+00FF) + Latin Extended-A (U+0100-U+017F) + Spacing Modifier Letters (U+02B0-U+02FF) + Mathematical Operators (U+2200-U+22FF) + Block Elements (U+2580-U+259F) + Dingbats (U+2700-U+27BF) + + +* Yannis Haralambous and John + Plaice + +Yannis Haralambous and John Plaice are the authors of Omega typesetting +system, . Omega is an extension of TeX. +Its first release, aims primarily at improving TeX's multilingual abilities. +In Omega all characters and pointers into data-structures are 16-bit wide, +instead of 8-bit, thereby eliminating many of the trivial limitations of TeX. +Omega also allows multiple input and output character sets, and uses +programmable filters to translate from one encoding to another, to perform +contextual analysis, etc. Internally, Omega uses the universal 16-bit Unicode +standard character set, based on ISO-10646. These improvements not only make +it a lot easier for TeX users to cope with multiple or complex languages, +like Arabic, Indic, Khmer, Chinese, Japanese or Korean, in one document, but +will also form the basis for future developments in other areas, such as +native color support and hypertext features. ... Fonts for UT1 (omlgc family) +and UT2 (omah family) are under development: these fonts are in PostScript +format and visually close to Times and Helvetica font families. +Omega fonts are available subject to GPL + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Greek (U+0370-U+03FF) + Armenian (U+0530-U+058F) + Hebrew (U+0590-U+05FF) + Arabic (U+0600-U+06FF) + Currency Symbols (U+20A0-U+20CF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +Current info: + +* Valek Filippov + +Valek Filippov added Cyrillic glyphs and composite Latin Extended A to +the whole set of the abovementioned URW set of 35 PostScript core fonts, +. The fonts are available under GPL. + + Latin Extended-A (U+0100-U+017F) + Cyrillic (U+0400-U+04FF) + + +* Wadalab Kanji Comittee + +Between April 1990 and March 1992, Wadalab Kanji Comittee put together +a series of scalable font files with Japanese scripts, in four forms: +Sai Micho, Chu Mincho, Cho Kaku and Saimaru. The font files are +written in custom file format, while tools for conversion into +Metafont and PostScript Type 1 are also supplied. The Wadalab Kanji +Comittee has later been dismissed, and the resulting files can be now +found on the FTP server of the Depertment of Mathematical Engineering +and Information Physics, Faculty of Engineering, University of Tokyo +. + + Hiragana (U+3040-U+309F) + Katakana (U+30A0-U+30FF) + + +* Young U. Ryu + +Young Ryu is the author of Txfonts, a set of mathematical symbols +designed to accompany text typeset in Times or its variants. In the +documentation, Young adresses the design of mathematical symbols: "The +Adobe Times fonts are thicker than the CM fonts. Designing math fonts +for Times based on the rule thickness of Times = , , + , / , < , +etc. would result in too thick math symbols, in my opinion. In the TX +fonts, these glyphs are thinner than those of original Times +fonts. That is, the rule thickness of these glyphs is around 85% of +that of the Times fonts, but still thicker than that of the CM fonts." +TX fonts are are distributed under the GNU public license (GPL). +. + + Arrows (U+2190-U+21FF) + Mathematical Symbols (U+2200-U+22FF) + + +* Angelo Haritsis + +Angelo Haritsis has compiled a set of Greek Type 1 fonts, available on +. +The glyphs from this source has been used to compose Greek glyphs in +FreeSans and FreeMono. + +Angelo's licence says: "You can enjoy free use of these fonts for +educational or commercial purposes. All derived works should include +this paragraph. If you want to change something please let me have +your changes (via email) so that they can go into the next +version. You can also send comments etc to the above address." + + Greek (U+0370-U+03FF) + + +* Yannis Haralambous and Virach Sornlertlamvanich + +In 1999, Yannis Haralambous and Virach Sornlertlamvanich made a set of +glyphs covering the Thai national standard Nf3, in both upright and +slanted shape. The collection of glyphs have been made part of GNU +intlfonts 1.2 package and is available under the GPL at +. + + Thai (U+0E00-U+0E7F) + + +* Shaheed R. Haque + +Shaheed Haque has developed a basic set of basic Bengali glyphs +(without ligatures), using ISO10646 encoding. They are available under +the XFree86 license at . + +Copyright (C) 2001 S.R.Haque . All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL S.R.HAQUE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of S.R.Haque shall not be +used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from +S.R.Haque. + + Bengali (U+0980-U+09FF) + + +* Sam Stepanyan + +Sam Stepanyan created a set of Armenian sans serif glyphs visually +compatible with Helvetica or Arial. Available on +. On +2002-01-24, Sam writes: "Arial Armenian font is free for +non-commercial use, so it is OK to use under GPL license." + + Armenian (U+0530-U+058F) + + +* Mohamed Ishan + +Mohamed Ishan has started a Thaana Unicode Project + and among other things created a +couple of Thaana fonts, available under FDL or BDF license. + + Thaana (U+0780-U+07BF) + + +* Sushant Kumar Dash (*) + +Sushant Dash has created a font in his mother tongue, Oriya. As he +states on his web page : +"Please feel free to foreword this mail to your Oriya friends. No +copyright law is applied for this font. It is totally free!!! Feel +free to modify this using any font editing tools. This is designed for +people like me, who are away from Orissa and want to write letters +home using Computers, but suffer due to unavailability of Oriya +fonts.(Or the cost of the available packages are too much)." + + Oriya (U+0B00-U+0B7F) + + +* Harsh Kumar + +Harsh Kumar has started BharatBhasha - +an effort to provide "FREE software, Tutorial, Source Codes +etc. available for working in Hindi, Marathi, Gujarati, Gurmukhi and +Bangla. You can type text, write Web pages or develop Indian Languages +Applications on Windows and on Linux. We also offer FREE help to +users, enthusiasts and software developers for their work in Indian +languages." + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + + +* Prasad A. Chodavarapu + +Prasad A. Chodavarapu created Tikkana, a Telugu font available in Type +1 and TrueType format on . +Tikkana exceeds the Unicode Telugu range with some composite glyphs. +Available under the GNU General Public License. + + Telugu (U+0C00-U+0C7F) + + +* Frans Velthuis and Anshuman Pandey + + +In 1991, Frans Velthuis from the Groningen University, The +Netherlands, released a Devanagari font as Metafont source, available +under the terms of GNU GPL. Later, Anshuman Pandey from the Washington +University, Seattle, USA, took over the maintenance of font. Fonts can +be found on CTAN, . I +converted the font to Type 1 format using Péter Szabó's TeXtrace +program and removed some +redundant control points with PfaEdit. + + Devanagari (U+0900-U+097F) + + +* Hardip Singh Pannu + +In 1991, Hardip Singh Pannu has created a free Gurmukhi TrueType font, +available as regular, bold, oblique and bold oblique form. Its license +says "Please remember that these fonts are copyrighted (by me) and are +for non-profit use only." + + Gurmukhi (U+0A00-U+0A7F) + + +* Jeroen Hellingman + +Jeroen Hellingman created a set of Malayalam metafonts in 1994, and a +set of Oriya metafonts in 1996. Malayalam fonts were created as +uniform stroke only, while Oriya metafonts exist in both uniform and +modulated stroke. From private communication: "It is my intention to +release the fonts under GPL, but not all copies around have this +notice on them." Metafonts can be found on CTAN, + and +. + + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + + +* Thomas Ridgeway <> (*) + +Thomas Ridgeway, then at the Humanities And Arts Computing Center, +Washington University, Seattle, USA, (now defunct), created a Tamil +metafont in 1990. Anshuman Pandey from the same university took over +the maintenance of font. Fonts can be found at CTAN, +. + + Tamil (U+0B80-U+0BFF) + + +* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, + Prof. Dr. Manfred Kudlek , Olaf + Kummer , and Jochen Metzinger + +Beyene, Kudlek, Kummer and Metzinger from the Theoretical Foundations +of Computer Science, University of Hamburg, prepared a set of Ethiopic +metafonts, found on +. They also +maintain home page on the Ethiopic font project, +, +and can be reached at . The current +version of fonts is 0.7 (1998), and they are released under GNU GPL. I +converted the fonts to Type 1 format using Péter Szabó's TeXtrace-A +program and removed some +redundant control points with PfaEdit. + + Ethiopic (U+1200-U+137F) + + +* Maxim Iorsh + +In 2002, Maxim Iorsh started the Culmus project, aiming at providing +Hebrew-speaking Linux and Unix community with a basic collection of +Hebrew fonts for X Windows. The fonts are visually compatible with +URW++ Century Schoolbook L, URW++ Nimbus Sans L and URW++ Nimbus Mono +L families, respectively, and are released under GNU GPL license. See +also . + + Hebrew (U+0590-U+05FF) + + +* Panayotis Katsaloulis + +Panayotis Katsaloulis helped fixing Greek accents in the Greek +Extended area. + + Greek Extended (U+1F00-U+1FFF) + + +* Vyacheslav Dikonov + +Vyacheslav Dikonov made a Braille unicode font that could be merged +with the UCS fonts to fill the 2800-28FF range completely. (uniform +scaling is possible to adapt it to any cell size). He also contributed +a free syriac font, whose glyphs (about half of them) are borrowed +from the "Carlo Ator" font freely downloadable from +. Vyacheslav also filled in a few missing +spots in the U+2000-U+27FF area, e.g. the box drawing section, sets of +subscript and superscript digits and capital Roman numbers. + + Syriac (U+0700-U+074A) + Box Drawing (U+2500-U+257F) + Braille (U+2800-U+28FF) + + +* M.S. Sridhar + +M/S Cyberscape Multimedia Limited, Mumbai, developers of Akruti +Software for Indian Languages (http://www.akruti.com/), have released +a set of TTF fonts for nine Indian scripts (Devanagari, Gujarati, +Telugu, Tamil, Malayalam, Kannada, Bengali, Oriya, and Gurumukhi) +under the GNU General Public License (GPL). You can download the fonts +from the Free Software Foundation of India WWW site +(http://www.gnu.org.in/akruti-fonts/) or from the Akruti website. + +For any further information or assistance regarding these fonts, +please contact mssridhar AT vsnl.com. + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Tamil (U+0B80-U+0BFF) + Telugu (U+0C00-U+0C7F) + Kannada (U+0C80-U+0CFF) + Malayalam (U+0D00-U+0D7F) + + +* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt + + +Noah Levitt found out that the Sinhalese fonts available on the site + are released under GNU GPL, or, +precisely, "Public Domain under GNU Licence Produced by DMS +Electronics for The Sri Lanka Tipitaka Project" (taken from the font +comment), and took the effort of recoding the font to Unicode. + + Sinhala (U+0D80-U+0DFF) + + +* Daniel Shurovich Chirkov + +Dan Chirkov updated the FreeSerif font with the missing Cyrillic +glyphs needed for conformance to Unicode 3.2. The effort is part of +the Slavjanskij package for Mac OS X, +. + + Cyrillic (U+0400-U+04FF) + + +* Denis Jacquerye + +Denis Jacquerye added new glyphs and corrected existing ones in the +Latin Extended-B and IPA Extensions ranges. + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + + +* K.H. Hussain and R. Chitrajan + +`Rachana' in Malayalam means `to write', `to create'. Rachana Akshara Vedi, +a team of socially committed information technology professionals and +philologists, has applied developments in computer technology and desktop +publishing to resurrect the Malayalam language from the disorder, +fragmentation and degeneration it had suffered since the attempt to adapt +the Malayalam script for using with a regular mechanical typewriter, which +took place in 1967-69. K.H. Hussein at the Kerala Forest Research Institute +has released "Rachana Normal" fonts with approximately 900 glyphs required +to typeset traditional Malayalam. R. Chitrajan apparently encoded the +glyphs in the OpenType table. + +In 2008, the Malayalam ranges in FreeSerif were updated under the advise +and supervision of Hiran Venugopalan of Swathanthra Malayalam Computing, +to reflect the revised edition Rachana_04. + + Malayalam (U+0D00-U+0D7F) + + +* Solaiman Karim + + Bengali (U+0980-U+09FF) + +Solaiman Karim has developed several OpenType Bangla fonts and +released them under GNU GPL on . + + +* Sonali Sonania and Monika Shah + + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + +Glyphs were drawn by Cyberscape Multimedia Ltd., #101,Mahalakshmi +Mansion 21st Main 22nd "A" Cross Banashankari 2nd stage Banglore +560070, India. Converted to OTF by IndicTrans Team, Powai, Mumbai, +lead by Prof. Jitendra Shah. Maintained by Monika Shah and Sonali +Sonania of janabhaaratii Team, C-DAC, Mumbai. This font is released +under GPL by Dr. Alka Irani and Prof Jitendra Shah, janabhaaratii +Team, C-DAC, Mumabi. janabhaaratii is localisation project at C-DAC +Mumbai (formerly National Centre for Software Technology); funded by +TDIL, Govt. of India. Contact:monika_shah AT lycos.com, +sonalisonania AT yahoo.com, jitendras AT vsnl.com, alka AT ncst.ernet.in. +website: www.janabhaaratii.org.in. + + +* Pravin Satpute , Bageshri Salvi + , Rahul Bhalerao and Sandeep Shedmake + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + Tamil (U+0B80-U+0BFF) + +In December 2005 the team at www.gnowledge.org released a set of two +Unicode pan-Indic fonts: "Samyak" and "Samyak Sans". "Samyak" font +belongs to serif style and is an original work of the team; "Samyak +Sans" font belongs to sans serif style and is actually a compilation +of already released Indic fonts (Gargi, Padma, Mukti, Utkal, Akruti +and ThendralUni). Both fonts are based on Unicode standard. You can +download the font files (released under GNU/GPL License) from +http://www.gnowledge.org/Gnoware/localization/font.htm + + +* Kulbir Singh Thind + + Gurmukhi (U+0A00-U+0A7F) + +Dr. Kulbir Singh Thind designed a set of Gurmukhi Unicode fonts, +AnmolUni and AnmolUni-Bold, which are available under the terms of GNU +Generel Public Licens from the Punjabu Computing Resource Center, +http://guca.sourceforge.net/typography/fonts/anmoluni/. + + +* Gia Shervashidze + + Georgian (U+10A0-U+10FF) + +Starting in mid-1990s, Gia Shervashidze designed many +Unicode-compliant Georgian fonts: Times New Roman Georgian, Arial +Georgian, Courier New Georgian. His work on Georgian localization can +be reached at http://www.gia.ge/. + + +* Primož Peterlin + +Primož Peterlin filled in missing glyphs here and there (e.g. Latin +Extended-B and IPA Extensions ranges in the FreeMono familiy), and +created the following UCS blocks: + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Arrows (U+2190-U+21FF) + Box Drawing (U+2500-U+257F) + Block Elements (U+2580-U+259F) + Geometrical Shapes (U+25A0-U+25FF) + +* Mark Williamson + +Made the MPH 2 Damase font, from which + Hanunóo (U+1720-U+173F) + Buginese (U+1A00-U+1A1F) + Tai Le (U+1950-U+197F) + Ugaritic (U+10380-U+1039F) + Old Persian (U+103A0-U+103DF) + +* Jacob Poon + +Submitted a very thorough survey of glyph problems and other suggestions. + +* Alexey Kryukov + +Made the TemporaLCGUni fonts, based on the URW++ fonts, from which at one +point FreeSerif Cyrillic, and some of the Greek, was drawn. He also provided +valuable direction about Cyrillic and Greek typesetting. + +* George Douros + +The creator of several fonts focusing on ancient scripts and symbols. +Many of the glyphs are created by making outlines from scanned images +of ancient sources. + + Aegean: Phoenecian + Analecta: Gothic (U+10330-U+1034F) + Musical: Byzantine & Western + Unicode: many Miscellaneous Symbols, Miscellaneous Technical, + supplemental Symbols, and Mathematical Alphanumeric symbols, + Mah Jong, and the outline of the Domino. + +* Daniel Johnson + +Created by hand a Cherokee range specially for FreeFont to be "in line with +the classic Cherokee typefaces used in 19th century printing", but also to +fit well with ranges previously in FreeFont. + Cherokee (U+13A0-U+13FF) + +Notes: + +*: The glyph collection looks license-compatible, but its author has + not yet replied and agreed on their work being used in part of + this glyph collection. + +-------------------------------------------------------------------------- +$Id: CREDITS,v 1.23 2009/01/04 15:57:54 Stevan_White Exp $ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/ChangeLog b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/ChangeLog new file mode 100755 index 00000000..fb8bfd85 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/ChangeLog @@ -0,0 +1,4525 @@ +$Id: ChangeLog,v 1.254 2009/01/04 16:12:59 Stevan_White Exp $ +2009-01-04 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added 2009 to copyright dates + + * AUTHORS, CREDITS: + + Removed Glagolitic range author + + * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added some TrueType names + +2009-01-01 Stevan_White + * FreeSerif.sfd: + + Removde Glagolitic range, since have not (yet) received OK from author. + + Added some TrueType Names + +2008-12-31 Stevan_White + * COPYING: + + Updated license to GPL v3 + +2008-12-30 Stevan_White + * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Oblique versions of Daniel Johnson's Cherokee. + + * FreeSerifBold.sfd: + + Cherokee Bold range from Daniel Johnson. + +2008-12-27 Stevan_White + * isMonoMono.py: + + 900 EM -> 800 + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: + + Made glyphs to lie between -200 and 800 EM + + * isMonoMono.py: + + check that glyphs lie in vertical bounding boxes + + * FreeMono.sfd, FreeSerif.sfd: + + Extensible bracket characters didn't exactly line up. Fixed. + Mono: a couple of glyphs had gotten out of their bounding boxes again. + +2008-12-26 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Final pre-release cleanup + + * FreeSerif.sfd: + + Buginese vowel u was misnamed + + * FreeMono.sfd: + + Yatcyrillic somehow was a mark character ... fixed + + * FreeSans.sfd, FreeSansOblique.sfd: + + Had to un-link references in + Sans: uni02B2, uni02B5 + SansOblique: uni0363 + because validation of the TTF file said the glyph + "is drawn in wrong direction" + I would have preferred to have understand this... + + * Makefile: + + Added quick test for FontForge version. + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: + + Removed kerning tables (?? what were they doing here anyway??) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Kerning tables for Thai. + Handles one common case: short letter followed by a tall one with + an overhang to the left. + +2008-12-25 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + More putzing with kerning tables + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Copied kerning classes + Serif -> SerifBold + SerifItalic -> SerifBoldItalic + Sans -> SansOblique SansBold SansBoldOblique + Some associated naming of characters, etc + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Additions and correction in Spacing Modifier letters and IPA Extensions + +2008-12-23 Stevan_White + * FreeSerif.sfd: + + Applied patch to Cherokee range + +2008-12-20 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Fixed kern classes that end in space (crashes FontForge) + + * FreeSerifItalic.sfd, FreeSerif.sfd: + + kerning + +2008-12-19 Stevan_White + * FreeSerifItalic.sfd: + + kerning + + * FreeSerif.sfd: + + kerning + Some adjustments to Glagolitc spacing, mark positioning + +2008-12-18 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + +2008-12-17 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + +2008-12-11 Stevan_White + * FreeSans.sfd, FreeSerif.sfd: + + kerning + +2008-12-10 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd: + + kerning + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd: + + kerning + +2008-12-09 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + +2008-12-08 Stevan_White + * FreeSansOblique.sfd: + + Slanted small final sigma. Remedies + bug #24993: U+03C2 "Greek small letter final sigma" not slanted in + Free Sans Oblique + https://savannah.gnu.org/bugs/index.php?24993 + +2008-12-07 Stevan_White + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + kerning, etc + +2008-12-06 Stevan_White + * FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + kerning + Tweek in Sans having to do with addition of Latin Extended + +2008-12-05 Stevan_White + * FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Tweeks to Latin Extended Additional + + * FreeSansBoldOblique.sfd: + + Added Latin Extended Additional range + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Extra space at end of kern class names has bad effect on FornForge + script that try to run through kern classes. Some FontForge call + corrupts memory. + Got rid of extra space. + +2008-12-02 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Replaced U+0387 GREEK ANO TELEIA with top dot of colon. + See bug #24987: U+0387 GREEK ANO TELEIA too low + https://savannah.gnu.org/bugs/index.php?24987 + + * FreeSerif.sfd: + + more kerning in Cyrillic (broke into two tables of classes) + +2008-12-01 Stevan_White + * FreeSerif.sfd: + + tweeks to kernin + + * FreeSerifBoldItalic.sfd: + + kerning + +2008-11-30 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Kerning for Latin and Cyrillic fairly complete in Serif faces. + Complete in sense that it looks pretty good under Pango for + English French German Spanish Polish Czech Latvian + But have not done Vietnamese (will require many more entries). + I adjust roman and italic, then copy tables by hand to bold and + bolditalic. + Misgiving: bolditalic is much too crammed + Overall, I may have over-kerned. (A difficult temptation to master.) + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + In Serif, modified widths of some extended latin glyphs + +2008-11-29 Stevan_White + * FreeSerif.sfd: + + Broke Latin kerning subtable into four, hoping it will be easier to + understand and maintain. + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, + FreeSerifItalic.sfd, FreeSerifBold.sfd, FreeSansOblique.sfd, + FreeSans.sfd: + + kerninig + +2008-11-28 Stevan_White + * FreeSans.sfd, FreeSerif.sfd: + + more kerning; + made guillemot narrower + + * FreeSansOblique.sfd, FreeSerif.sfd: + + previous commit was incomplete + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjusted width of single quotes (and apostrophe) to be "punctuation width" + More fiddling with kerning. + +2008-11-27 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + much fiddling with kerning + +2008-11-26 Stevan_White + * FreeSerifBold.sfd: + + Basic kerning, named main Cyrillic letters + + * FreeSerifItalic.sfd: + + Basic Cyrillic kerning + + * FreeSerif.sfd: + + Tweeks to Cyrillic kerning + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd, Makefile: + + Much fiddling with kerning, tables, and generating fonts whose kerning + tables work with OpenOffice. + +2008-11-24 Stevan_White + * FreeSerif.sfd: + + regularized padding in Miscellaneous symbols. + At least within related ranges tried to make similar. + Made to validate + +2008-11-23 Stevan_White + * FreeSerif.sfd: + + Filled out Miscellaneous Symbols. Used George Douros' Unicode font. + Completed Miscellaneous Symbols, with some drawings from George Douros' + Unicode Symbols, and some of mine. + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Replaced Greek Exteded psili and dasia with scaled versions of the + "bent quote" mark. I think it's distinctive enough, but not so silly. + + Remedies bug #22997: Mono: Greek Extended psili is ugly + https://savannah.gnu.org/bugs/?22997 + + * FreeSerif.sfd: + + Made some recycling symbols + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Finished with Hebrew Pointed letters in all faces. + +2008-11-22 Stevan_White + * FreeSans.sfd: + + Fiddled with Hebrew Pointed letters + + * FreeSerifItalic.sfd: + + Marks for Vietnamese + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Letter pe had strange thick middle ear that looked awful. lamed had ben + bumped at some point. Fixed. Adjusted some of the points. + +2008-11-21 Stevan_White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + repairs to Pointed Hebrew + + * FreeSerif.sfd: + + Numeral line positioning marks for Gothic + + * FreeSerifItalic.sfd: + + Added Combining Marks for Symbols (some question about obliqueness of + some symbols) + Cleaned up some empty glyphs in Pointed Hebrew. + +2008-11-20 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Provided Hebrew pointed letters, with lookups, for all Serif faces. + +2008-11-19 Stevan_White + * FreeSerifBoldItalic.sfd: + + renamed Hebrew lookups + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Completed Hebrew in Bold faces. + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + More tweeks to Hebrew points + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Adjustments corrections and additions to Hebrew points + +2008-11-18 Stevan_White + * FreeSansBold.sfd: + + Cleaned out a lot of ridiculous kernings + +2008-11-17 Stevan_White + * FreeSansBoldOblique.sfd: + + fiddled with Armenian ligatures + + * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added Armenian (with ligatures) to BoldOblique + Fiddled with character spacing + +2008-11-16 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added U+01f9 and paragraph end marker to Georgian + Fiddled with Armenian ligatures + +2008-11-15 Stevan_White + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Another pass at letter spacing in Cyrillic. + Also went through ancient letters. + + Added Georgian paragraph separator 10FB + Added Georgian turned gan 10F9 (because it was easy) + + Re-worked letter spacing through modern Cyrillic range. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd: + + Letter spacing + +2008-11-14 Stevan_White + * FreeSerif.sfd: + + Added several characters to Cyrillic Extended-B + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Made Cyrillic hooked e U+04BC-F to look less goofy. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Based on assertion on Pechatnyj Dvor's web site, Cyrillic Fita + U+0472-3 and "Barred O" U+04E8-9 are different styles the same letter, + and the fact that the tilde in the O never looked good in Sans, I + made them all barred O's. + + * FreeSerif.sfd: + + Added Cyrillic Yn, yn (U+a65e-f) + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Synced up Cyrillic and Combining Diacritics ranges, + Couple of tweeks in Gujarati to make TT validate + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Changes to older Cyrillic letters, in response to further information. + Made omegas, omegas with titlo, and OT to all be of the same size and + shape in Serif. + Un-linked Cyrillic Psi and psi from Greek, made squarer versions. + + Some more Cyrillic diacritical marks in Sans. Re-worked U+04bc-f . + Experimenting with mark positioning for Cyrillic + +2008-11-12 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Strove to make Euro look more like the EC logo design, while making + glyph fit better with the design of its face. Bug #3576: Euro design + https://savannah.gnu.org/bugs/?23576 + + * FreeSans.sfd, FreeSerif.sfd: + + Adjustments mostly to GPOS tables having to do with Vietnamese marks. + The WAZU Vietnamese test page looks pretty good in Sans now. + Still not thrilled with below-dot when it appears with a mark over + e.g. U+0102. Pango positions one or the other but not both. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Extensive modification of GPOS lookup tables for mark positioning. + I think they're now all functional (except styled Mono faces have none). + Also added lots of marks to faces that didn't have them, and also + fiddled with Combining Diacritical Marks. + +2008-11-10 Stevan_White + * FreeSerif.sfd: + + Made one combining mark really combining + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made a few combining characters to be zero-width in Mono, + Added them to other styles. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Figured out why below marks in Thai weren't working in the lowest + letters. I think Pango and other font renderers ignore 'blwm'. + However, 'mark' works. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Tweeks to Thai marks + +2008-11-09 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Several bugfixes in Thai, mostly having to do with mark placement and + ligatures. Implemented ru-saraaa and lu-saraaa with ligatures. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + added and named dottedcircle (used by Pango to render + combining mark base) + + * FreeSerif.sfd: + + Tweeks to Coptic, after viewing more papyrus samples and web pages. + + * FreeSerif.sfd: + + Weight of Coptic small letters made to match that of Latin and Greek ones. + +2008-11-08 Stevan_White + * FreeSerif.sfd: + + Made Coptic to comply better with + http://www.wazu.jp/gallery/Test_Coptic.html + Made a flourish at foot of letters with long diagonal. + + More tweeks to Coptic; put in a mark lookup table. + + Note: for small letters I made scaled references to captials. + Results in those letters looking quite light next to the capitals and + next to small Latin letters. Also, there are a few variant forms for + capitals (Unicode samples don't show this). It would be good to + re-work + + Added Coptic alphabet in u+2C80-2CB1 and u+03E2-u+03EF, drawn/built by + me, based on Unicode samples, TeX font copte, and scans at WikiPedia. + +2008-11-07 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Further tweeks to dieresis in Greek and Cyrillic + + * FreeSerif.sfd: + + replaced Greek I dieresis with references, tweeked height of dieresis. + +2008-11-04 Stevan_White + * FreeSerif.sfd: + + Added a few Cyrillic Extended-B letters seen in web pages while looking + for Glagolitic text. + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Added a few old Cyrillic characters. + + * FreeSerif.sfd: + + Several corrections and tweeks to Glagolitic. + Still missing six slots from Unicode, but don't see them in the TeX + fonts. + On the other hand, several on-line Glagolitic pages (bibles etc) don't + seem to use these. Maybe it's OK as-is. + +2008-11-03 Stevan_White + * FreeSerif.sfd: + + Added lowercase range to Glagolitic, as a facile scaling of the + uppercase. + + Added letter to Glagolitic, scaled range. + +2008-11-02 Stevan_White + * FreeSerif.sfd: + + Replaced fraktur bold from Mathematical Alphanumeric Symbols with that + from TX Fonts by Young Ryu. + One concern: letter k is damaged (in both medium and bold). I just + hacked something up. + + Added Glagolitic "round type" font (Croation capitols only) from the + collection of Croatian fonts for LaTeX by Darko Zubrinić + ftp://ftp.dante.de/tex-archive/languages/croatian/ + http://www.tug.org/TUGboat/Articles/tb17-1/tb50zubr.pdf + + Several letters are missing besides the small letters. + + * FreeSerifBoldItalic.sfd: + + A couple of Thai references got obliqued twice. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + By popular demand, removed 'ears' from Greek Upsilon and Psi. + Copied resulting glyphs to Serif Mathematical Alphanumeric Symbols. + + * FreeSerif.sfd: + + Some pointwise cleanup of main Tamil range + + Tried some things with lookups. Didn't make much headway. + +2008-11-01 Stevan_White + * FreeMono.sfd: + + somehow made a letter with wrong width + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added similar lookups and ligatures to Thai ranges. + + * FreeSerif.sfd: + + Lookups now work no worse than those for other Thai fonts, at least + in Pango. Still perplexed by behaviour of "Required" lookups. + + For Thai, made ligatures and lookups for yoying and thothan combined + with a lower vowel. These work well. + Attempted looksups for saraaa with ru and lu, and for saraam. + Not working. + + Cleaned up a few of the Bengali ligatures + + * FreeSerifBold.sfd: + + Tweek Thai + +2008-10-31 Stevan_White + * FreeSerif.sfd: + + Fixed ligatures and mark positioning for Hanunóo. + Problem with ligatures: Gnome pango doesn't do 'rlig', only 'liga' + + * FreeSerifItalic.sfd: + + Changed lookup table scripts for Devanagari and Bengali. + Find Problems -> ATT found several problems showing lookups acting on + glyphs that weren't listed in the script ranges, including dev2, bng2 + (why not deva and beng, I don't know). + + danda and doubledanda of Devanagari I understand are to be shared among + Indic scripts. So included bng2 and dev2 in the 'aalt' table for those. + + The 'init' and 'half' tables for Bengali made active for bng2. + + The 'locl' table for Bengali didn't do anything I could see: It mapped + the Devanagari danda to itself, and the doubledanda to itself. Deleted. + + Cleaned up some kern tables. + adjustments of under 5 EM are invisible. Some others I just didn't like. + Some were putting a letter beneath another, with is wrong. + + * FreeSerifBoldItalic.sfd: + + Added Thai + + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Changes to mark positioning lookups, esp. in Italic. + Widened numerals in Bold + +2008-10-27 Stevan_White + * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Tweeks regarding Armenian and lookups + + * FreeSansBold.sfd: + + Added Armenian ligatures FB13-FB17 with lookups + Also made a historical ligature ('hlig') table for u+0587. + + Toward bug #15183: missing characters from Armenian range + https://savannah.gnu.org/bugs/index.php?15183 + + * FreeSansOblique.sfd: + + Added Armenian ligatures, lookups. Cleaned up contours. + + * FreeSans.sfd: + + Added 5 Armenian ligatures to U+FB13 – FB17, and made corresponding + 'liga' lookup. Found there one ligature u+0587 that according to + http://en.wikipedia.org/wiki/Armenian_alphabet + + "in new orthography the և character is not a typographical ligature anymore, and must never be treated as such. It is a distinct letter and has its place in the new alphabetic sequence." + So moved this out of the 'liga' lookup and into a new 'hlig' lookup. + +2008-10-26 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Lots of improvements to Thai. + Completely revised letter spacing in Italic, and fiddled with combining + marks in all. + Still aren't working quite right, especially in Italic. + Still need to work over digits (in Bold they aren't even bold yet) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Bold Thai : added (painstakingly) constructed glyphs, lookups + roman Thai: tweeks + Italic Thai: tweeks (Note this still has multiple problems) + +2008-10-25 Stevan_White + * FreeSerif.sfd: + + WAZU says + http://www.wazu.jp/gallery/Fonts_Hanunoo.html + + MPH 2B Damase doesn't support the consonant-vowel ligatures necessary + to render Buhid writing. + + OK, so I made 'mark' lookups for combining marks and a bunch of + ligatures in an 'rlig' lookup. The latter still not working: + don't know why. + + Made page to match the example of the combining forms at + http://www.omniglot.com/writing/hanunoo.htm + +2008-10-24 Stevan_White + * FreeSerif.sfd: + + Removed some marks from Mathematical Alphanumeric Symbols + + * FreeSerif.sfd: + + Tweeked combining marks for Vietnamese. Made to satisfy + WAZU JAPAN Comprehensive Unicode Test Page for Vietnamese + http://www.wazu.jp/gallery/Test_Vietnamese.html + Could still use some tweeking... + + * FreeSerif.sfd: + + Added marks for composition of Vietnamese + + * FreeMono.sfd, FreeSerif.sfd: + + Put "below" combining mark on lots of vowels and derivatives, + for Vietnamese. + Named a bunch of composit Latin, expecting to make substitutions. + +2008-10-23 Stevan_White + * FreeSerif.sfd: + + Thai spacing alterations based on advice of a native speaker. + +2008-10-22 Stevan_White + * FreeSerif.sfd: + + re-named Thai lookups according to order + +2008-10-21 Stevan_White + * FreeSans.sfd: + + Cleanup of glyphs in Gujarati, Devanagari. + + Note: Serious problem with Sans GPOS abvm in Devanagari + "'abvm' Above Base Mark in Devanagari subtable" "gujr-0" + But all the characters that list gujr-0 are in Gujarati. + Not sure how this got broken or how to fix it. + + * FreeSerif.sfd: + + Fiddled with Thai mark positioning: passes my tests now OK. + Made a few more references in Math Symbols; more regularization of + stroke. + + * FreeSerif.sfd: + + Added mark class for Vietnamese "horn" + Several references made in General Punctuation, Arrows + + * FreeMono.sfd: + + added some Combining Diacritical Marks + +2008-10-20 Stevan_White + * FreeSerif.sfd: + + Made some references from serifed Latin capitals to Greek counterparts. + + * FreeSerif.sfd: + + Made a few repeated glyphs into references in Musical Symbols + +2008-10-19 Stevan_White + * FreeSerif.sfd: + + Moved several glypns from Mathematical Alphanumeric Symbols to + Letterlike Symbols. + Couple tweeks in Mathematical Symbols. + + * FreeMono.sfd, FreeSerif.sfd: + + Fiddling with Mathematical Symbols. + In Serif, trying to make stroke width more consistent. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd: + + Added some Greek symbols in Mono and Sans to make a little more regular + and correspond better with TeX. + Tweek of serif. + + * FreeSansBold.sfd: + + a few more improvements. + + One problem with the Mathematical Alphanumeric area is, one must + remember to change it any time another face is altered... + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerifBold.sfd: + + Several improvements and additions to Sans faces (mostly in Greek) from + experience of pasting into FreeSerif Mathematical Alphanumeric Symbols. + + * FreeSerif.sfd: + + Replaced most of Mathematical Alphanumeric Symbols + roman italic bold (latin and greek) + gothic italic bold (latin and greek) + typewriter + and numerals + with glyphs from FreeFont. These were scaled to uniform height. + + Remains: Blackboard Bold, Fraktur, Calligraphic, Script + + * FreeSerif.sfd: + + Tidied lookup table names for Malayalam + + * FreeSerif.sfd: + + Applied Malayalam patch from Hiran Venugopalan + + * FreeMono.sfd: + + Added/corrected many Mathematical Symbols + + * FreeSansOblique.sfd: + + more IPA + +2008-10-18 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made lots more IPA and Phonetic Extensions + Note: fontforge is reporting an error in a few glyphs made by scaling + another, that the glyphs are drawn in the wrong direction--only in + TrueType though. Suspect a FontForge bug. + + Added several Combining Diacritical Marks + +2008-10-17 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made several Spacing Modifier Letters, Combining Diacritical Marks, + and IPA and Phonetic Extensions + +2008-10-16 Stevan_White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added some Superscripts and Subscripts + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Finished off Superscripts and subscripts + + Completed General Punctuation for Mono faces + + Added some General Punctuation + +2008-10-15 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + more Letterlike Symbols, Currency Symbols + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made some Combining Diacritical Marks for Symbols, Letterlike Symbols + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Added some General Punctuation + +2008-10-14 Stevan_White + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added double slanted hyphen, made General Punctuaton Supplement like + Serif's + + * FreeSansBoldOblique.sfd: + + Filled out Greek Extended + + * FreeMono.sfd, FreeSerifItalic.sfd: + + fixes to last 2 commits + + * FreeSerifItalic.sfd: + + Last character to General Punctuation + + * FreeMono.sfd: + + Built some Enclosed Alphanumerics (1-10) + + * FreeSerif.sfd: + + Copied in Daniel Johnson's changes to Cherokee. + +2008-10-12 Stevan_White + * FreeSerif.sfd: + + Included Daniel Johnson's Cherokee glyphs. + +2008-10-05 Stevan_White + * FreeMono.sfd: + + Further corrections to diaresis in Cyrillic -- legibility in small sizes + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSerif.sfd: + + Regularized placement of diaresis in Cyrillic + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added same set of glyphs to Cyrillic Supplement + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added some of the easier letters from Cyrillic Supplement + +2008-10-04 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSerifItalic.sfd: + + Finished high Cyrillic range for MonoBold and MonoBoldOblique. + (Remaining: historic ranges, Cyrillic extensions) + Tweeked others. + + * FreeMonoBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Serif*Italic: Added last Abkhazian letters to Cyrillic + MonoBold: tweek + +2008-10-03 Stevan_White + * FreeMono.sfd, FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifBoldItalic.sfd: + + Mono: Some additions to historic letters + + * FreeSerif.sfd: + + Added some punctuation and combining numeric marks from + Cyrillic Extended B + + * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Various technical tweeks, mostly concerning recent additions. + Also did a bit more "Points too close" and "irrelevant control points". + Cyrillic millions redesign meant could not maintain use of refrences + for it. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More high Cyrillic + Included old Cyrillic millions combining mark in Sans, changed design + in Serif + +2008-10-02 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + More high Cyrillic + + * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd: + + More high Cyrillic glyphs + + * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More glyphs in high Cyrillic. Remains only some whose form I'm unsure + of in italic. + + * FreeSerifBoldItalic.sfd: + + More glyphs in higher Cyrillic range + + * FreeSerifItalic.sfd: + + Same process of tightening el, em, ge (but a P.S. to previous commit: + also did ya, ze for SerifBold.) + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + BoldItalic: Tightened up spacing on left of el, em, ge (could go + farther, but it is partly a problem with glyph design... + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More additions to Cyrillic. Finished SerifBold except for Nivkh + additions. + Used references on number combining forms. + +2008-09-30 Stevan_White + * FreeSerif.sfd: + + Added four (obsolete) Chuvash letters to Cyrillic Supplement + - completing it. + +2008-09-29 Stevan_White + * FreeSerif.sfd: + + Greek adjustments + Adjusted spacing of kappa slightly + Got rid of ears on Psi, following similar request for Upsilon. + +2008-09-28 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Adding and fiddling with Spacing Modifiers and Combining Diacriticals + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Revisions of several Combining Diacritical marks + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + A few Combining Diacriticals and Spacing Modifiers + + MonoBoldOblique: Primarily filling out Spacing Modifier Letters + others: little fixes found along the way + +2008-09-27 Stevan_White + * FreeSerif.sfd: + + Replaced Malayalam range with that from Rachana_04 found on + Swathanthra Malayalam Computing project page + http://savannah.nongnu.org/projects/smc/ + Besides scaling and converting to cubic, performed much clean-up of + glyphs, added an r2 character, and re-named a bunch of characters. + +2008-09-22 Stevan_White + * FreeSerif.sfd: + + Filled in as much of Phonetic Extensions as I could without artistic + abilities. + Note 1D48-9 are not references due to apparent FontForge bug, that says + scaled references go in wrong direction. + + * FreeSerif.sfd: + + Cleaup of some Bengali glyphs. + Note many of the ligatures remain very very messy. + + * Makefile: + + added more validations + made to work with GenerateOpenType + + * FreeSerif.sfd: + + Built two more easy Phonetic Extensions + + * FreeSerif.sfd: + + Built some Phonetic Extensions letters, those with middle tilde + +2008-09-21 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added lots of Spacing Modifier Letters and Combining Diacritical Marks. + + * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSerif.sfd: + + Wrote script to check if glyph encodings were in stated ranges, fixed + most discrepancies. + + There were a bunch of incompletely deleted characters in several faces. + + Sans: found several other problems in the process + # Tamil + Four slots labelled 0BDA-D have glyphs, not in Unicode. also 0BE1 + I think they are misplaced; added 0010 to each of them + + # Devanagari + Slot labelled U+093B is not in Unicode--can't find glyph: deleted + likewise 094F (may have been meant to be 0954) + 0955, 0973-0976 + + 0954 should be a combining mark, but it appears on the wrong side of 0. + 0971 was just wrong--made into simple dot. + 0972 is also wrong--made my own Candra A. + + # Gujarati + Slots labelled 0AE4-5 are not in Unicode; seem not to belong at all. + Deleted. 2800 is a dup of 2790. Deleted + + Serif: phillipine_double u1736 was misplaced + + A bunch of the Math Alphanumeric symbols are empty in the standard, + because they're represented elsewhere. These should be deleted + First need to make style consistent with existing symbols. + + * FreeSerif.sfd: + + Applied patch from Daniel J + Remedies bug + FreeSerif: Missing glyphs with palatal hook + https://savannah.gnu.org/bugs/index.php?24298 + Adding several letters to Phoenetic Extensions range U+1D80-BF + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made four characters U+200C-F to be zero-width + Remedy to bug #23593: Mono 0-width chars: zero-width or space? + https://savannah.gnu.org/bugs/index.php?23593 + + * FreeSerif.sfd: + + Made Mahjong tiles to take up less space using references + Cleaned up several validation problems + +2008-09-19 Stevan_White + * FreeSerif.sfd: + + Added several Hebrew Alphabetic Presentation Forms (some easy ones), to + make its coverage the same as Serif Bold. + + * FreeSerifBold.sfd: + + Re-encoded. + Deleted several glyphs in Hebrew Alphabetic Presentation Forms that + didn't correspond valid Unicode + + * FreeMonoBold.sfd, FreeSans.sfd, FreeSerifItalic.sfd: + + Ran script to find mis-numbered glyphs. Several were simply typos, + some offset by one. + + * FreeSansOblique.sfd: + + Numerous cases of glyphs in Private Use area incorrectly assigned + Unicode numbers and names. Gave all -1 for Unicode and named like + "slot.XXXX". + + * FreeSerif.sfd: + + Adapted Mahjong Tiles from George Douros' Unicode Symbols font. + + * FreeSerif.sfd: + + Added Domino Tiles. Domino outline is copied from George Douros' + Unicode Symbols, but the rest I preferred to do with references. + +2008-09-18 Stevan_White + * FreeSerif.sfd: + + Adapted Mathematical Alphanumeric Symbols from George Douros' Unicode + Symbols font. + + * FreeMonoBoldOblique.sfd: + + This one got away from me--I don't know what I did. + Looks like some small contour edits. + + * FreeSansBoldOblique.sfd: + + Fixed one mis-numberd character in Latin Extended-B + + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Fixed several mis-numbered characters. + + * FreeSansBold.sfd: + + SansBold: one Georgian letter with no name, one Zapf Dingbat was + unnumbered + ATT test shows a bunch of problems with Gurmukhi and 'blwf' table + indeed shows those letters at 0x10000+ + Sans names them like uni0A30_uni0A4D.blwf: they are in range + ECC6 to ED06 + + I meant to move this range into Private Use in last release, and + missed it. So now it is moved, into same range as Sans. + + Both Sans and SansBold in nukt table for Gurmukhi have duplicate + entries for uni0A15 uni0A3C. Deleted dups. + + * FreeMonoOblique.sfd: + + fixed a number of Unassigned Code Points in Greek Extended + + * FreeSansOblique.sfd: + + mis-numbered Combining Diacritics + + * FreeSansOblique.sfd: + + Several chars in Latin Extended hadn't been named. + One spurious letter in Letterlike Symbols + +2008-09-16 Stevan_White + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: + + Lots of additions: unless otherwise noted, they are from George Duros' + fonts Analecta, Music, and Unicode (haven't got final confirmation of + the eligibility of these glyphs, so this is just for testing.) + + Added some combining marks, fiddled a bit. In both Serif & Mono, tried + to get a key symbol characters to fit inside the key combining mark + + Serif + Got rid of ears on Upsilon + Added: + # Gothic + # Western & Byzantine Musical Symbols + + # Misc Symbols, Misc Technical Symbols (drew many myself) + # Supplemental Symbols and Arrows + + Mono + Added: + # lotsa Misc Technical Symbols + # OCR Symbols + # drew many Supplemental Symbols and Arrows, Misc Technical + + Sans + Added # Phoenecian + Made a few Letterlike Symbols; Made Re and Im to be sans-serif. + +2008-09-11 Stevan_White + * FreeSerif.sfd: + + Removed pointless entries from Latin kern table + + Tidied points in Sinhala + +2008-09-07 Stevan_White + * FreeSerif.sfd: + + Tidied up Tamil ligatures EEA8-EEAB to fix TT build warning + "MonotonicFindAlong: Never found our spline." + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, Makefile: + + + Added APL characters to FreeMono (why?...) + + Fixed several last-minute problems, including + + Serif: Tweeked GPOS mark table for Cyrillic + Sans: Added a GPOS table for Cyrillic (but several diacritics missing) + + Serif, Mono: tweeked some bugs in extensible brackets & integrals + + Serif: Vietnamese o circumflex: accent was a bit high. fixed. + + MonoBoldOblique OTF build + uni213b intersects self + + Generation of TT fonts complains about several things to stderr, + including: + + SerifBold: "There exists a 'fpgm' code that seems incompatible with FontForge's. Instructions generated will be of lower quality. If legacy hinting is to be scrapped, it is suggested to clear the `fpgm` and repeat autoinstructing. It will be then possible to append user's code to FontForge's 'fpgm', but due to possible future updates, it is extremely advised to use high numbers for user's functions." + Probably has been there since I first copied the TT instructions in. + Just repeated the copying process carefully, and the warning went away. + + Serif: "FindMatchingHVEdge fell into an impossible position" + fixed a bunch of point too close + + REMAINING PROBLEM in Serif TT build + "MonotonicFindAlong: Never found our spline." + fixed several bad TT matrices-- there are several more + fixed many "control points too close" no luck + +2008-09-03 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd: + + Added/corrected some Misc. Symbols by copying from Serif. + Note this is only a stopgap solution. Want real sans-serif symbols. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added minimal Miscellaneous Symbols: card suites and some musical notes. + Note not happy with shapes...some I just drew. Sans isn't really sans. + + Fixed one APL symbol in Mono so it verified in OTF version + +2008-08-31 Stevan_White + * FreeMono.sfd: + + Built set of APL symbols. + +2008-08-30 Stevan_White + * FreeSans.sfd: + + Un-linked references in uni02B2 and uni02B5, because when validating the + TrueType version, FontForge gave an error "is drawn in wrong direction". + I suspect a bug in FontForge. Other similar glyphs make no errors. + + Fixed missing extrema in TrueType. + These were the last cases being reported by validate in all the faces. + + * FreeSerifItalic.sfd: + + fixed last missing extrema in TrueType + + * Makefile: + + restructured validation to look in a directory + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd: + + Fixed missing extrema in TrueType versions + +2008-08-15 Stevan_White + * FreeSans.sfd: + + Same problem with uni0A83 as with bn_llikaar. Just made zero-width. + +2008-08-14 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd: + + Glyph bn_llikaar, U+09E3 BENGALI VOWEL SIGN VOCALIC LL, + has right bound positioned far into the negative. Causes a warning in + FontForge when opening OTF version. + Comparing with other fonts supporting Bengali, found no others that + do this. + Serif makes glyph width 0 (which sounds right according to Unicode) + and puts glyph wholly to left of 0. But, I haven't found this letter + in text anywhere. I wonder if it is really used in writing. + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Further TrueType validation fixes. + Sans still has two glyps in wrong direction. + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Fixed more TrueType problems...all missing extrema in TTF validation + +2008-08-13 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + fixed all the TrueType validation problems of type "intersects itself" + and all but two of the "wrong directions", as well as a lot of + "missing extrema". But there remain hundreds of missing extrema in the + TrueType version. + Also, bn_llikaar in Sans and Oblique still has a problem in OTF version. + + * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Made .ttf files to validate. Other faces have many more problems still. + +2008-08-12 Stevan_White + * FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Continuing to make OTF versions validate. + + * FreeMonoOblique.sfd: + lots of missing points at extrema + * FreeSerif.sfd: + 12 wrong directions, 1 missing extrema + * FreeSerifItalic.sfd: + many missing points at extrema, 1 self-intersecting + + What was wrong: in several oblique cases, an already-italic glyph was + made more italic, thereby fouling up extrema (although why it passed + validation in the SFD I don't know). Some glyphs were + overly-complicated with many near points. Cleaned up, rounded to int. + + Remaining problem: OTF FreeSansOblique FreeSans. one Bengali glyph in + each whose advance width and htmx don't match. + + Moral of story: validate the OTF and TTF versions too before a release. + + * FreeSansOblique.sfd: + + Reverse a mistake from last commit: somehow this file was converted to + quadratic, or something. + +2008-08-11 Stevan_White + * FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Found that SFD files that validated produced OpenType files that don't. + These represent the easy fixes. Some were result of conversion to + quadratic; some shouldn't have validated in the SFD... + + * MonoBoldOblique: uni0250 missing pts at extrema [reference glyph rotated...] + * Sans: uni0AC4 wrong direction [simplified, rounded to int] + * SansOblique: uni01EA wrong direction [rounded to int] + * SerifBold: uni023f wrong direction [round to int] + * SerifBoldItalic: uni0245 missing pts at extrema [ungrouped ref, added extrema] + +2008-08-06 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd: + + Re-set font metrics, which were somehow making uneven vertical spacing. + +2008-06-22 Steve White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Made to validate + + * ranges.py: + + Brought more into line with OpenType + Added some ranges + Fixed bug with ranges outside of font + + * CREDITS: + + 3 new ranges + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Cyrillic: tweeked accents for consistency, and for readability in small + sizes. + + * FreeSerif.sfd: + + Thanna range: tweeking + + Thaana range: Scaled up by about 15%, raised by 100EM, tightened + some of the diacritics to get inside 900 to -300 EM limits. + + * FreeSans.sfd: + + Added Old Persian and Ugaritic from MPH2BDamase font. + +2008-06-21 Steve White + * FreeSerif.sfd: + + Added Tai Le range adapted from MPH2BDamase font. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Added some ancient Greek numerals from Tempora to high Unicode area, + (partly just to show it can now be done.) + + * FreeSerifItalic.sfd: + + Couple of tweeks putting glyphs above -300EM. + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Surgery to Thai letter 'tho than', u+0e10, to push it above -300 EM. + This makes Thai range completely between 900 and -300 EM. + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Many auxilary characters (esp. for Malayalam, Bengla, and Tamil) + representing ligatures and alternative forms without their own Unicode, + were moved from + ranges above 0xFFFF (which ought to have been slots for other defined + Unicode ranges) into the Private Use area. + + In Serif, I segregated the scripts, in Sans it was hard to see where one + began and another ended, so I moved them en masse. + + Note several problems with wrongly-named characters: + I already re-named glyph570 and glyph582. + But there are others with names starting with A... + + * FreeSansBold.sfd, FreeSansOblique.sfd: + + Fixed (I hope the last) problem with scripts in lookups + Find Problems -> ATT (all selected) finds multiple issues, + + * FreeSansBold.sfd: + In addition to script 'guru', added 'gur2' to the scripts for these + lookups + 'nukt' Nukta forms in Gurmukhi + 'blwf' Below Base Forms in Gurmukhi + 'pstf' Post Base Forms in Gurmukhi + 'blws' Below Base Substitutions in Gurmukhi + 'abvs' Above Base Substitutions in Gurmukhi + 'psts' Post Base Substitutions in Gurmukhi + + * FreeSansOblique.sfd: + In addition to script 'beng', added 'bng2' to the scripts for the lookup + 'half' Half Forms in Bengali + + Moreover, the lookup + 'aalt' Access All Alternates in Latin + contains only Bengali letters. + Re-named as Bengali, made to work on beng, bng2 scripts + +2008-06-20 Steve White + * FreeSerif.sfd: + + Scaled Sinhala range. + Remedies bug #23656: Sinhala letters over-sized + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Mostly messing with Greek Extended accents again. + re-positioned ypogegrammani on advice of Alexey Kryukov + Put prosgegrammani beneath main letters in Mono, to make narrower glyphs + Implemented more distinction between tonos and acute. + +2008-06-19 Steve White + * FreeMonoBoldOblique.sfd: + + Completed fit of Mono to 800 to -200 EM. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd: + + Set Metrics to recommended values + + * FreeMonoOblique.sfd: + + Now Mono Oblique, as well as roman and Bold, are within 800 to -200 EM. + Just BoldOblique to go. + + * FreeMono.sfd, FreeMonoBold.sfd: + + More toward fitting to 800 to -200 EM. + Basically, reduced Georgian by 92%. + Also made an over-all offset, so Georgian is somehow centered (Bold...I + guess I already did this in roman). + Want to also do an emboldening to make stroke like rest of font, but + current FontForge has a nasty crash that loses data on this function. + + * FreeMono.sfd: + + In effort to make fit in 800 to -200 EM, + Scaled Georgian by 92%, centered on 600 wide box. + Next: Embolden a bit. + +2008-06-18 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Toward making all glyphs lie between -200 and 800 EM. + Numerous small changes, especially raising descenders of some Hebrew + letters. + Georgian remains a problem + +2008-06-13 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Moved prosgegrammeni up to baseline, + (and then moved all references down to baseline) + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added Control Picture "blank" to all faces. + Switched U+0222-3 from TemporaLGCUni + +2008-06-11 Steve White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More fiddling with Greek Extended accents + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Tweeks to accents etc in Greek Extended and Cyrillic + +2008-06-10 Steve White + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Fixed a few big horizontal spacing problems + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Implemented TemporaLCGUni glyphs in Cyrillic ranges. + Added a breve_cyrillic for the moustache breve mark. + +2008-06-08 Steve White + * FreeSerif.sfd: + + Replaced most of Cyrillic range with TemporaLGCUni. + Remodelled many of the derived Cyrillic characters after these. + Fiddled globally with spacing of small letters. + Unclear on diacritics 485-6, unhappy with breve. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Started implementing TemporaLCGUni in Greek ranges. + + Replaced 3DC-3E1 from Tempora, because I thought they looked nicer and + more like the other existing FreeFont glyphs. + Replaced 3DA-B from Tempora, because they look more like Unicode + samples, and nicer. + Added 03f3-4, 03F7-F. + Prefer my own lunate epsilon. + Replaced Phi and Omega from Tempora. + These plainly fit the other FreeFont glyphs better than the origninals. + (How did this happen?) + + In bold, replaced U+03D7 + + Copied lbbar u+2114 + + Small italic greek--replaced most except phi, psi, omega + + Based on new information, broke the identification of oxia with Latin + acute. + +2008-06-07 Steve White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Efforts to control heights of characters + +2008-06-06 Steve White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made to validate + +2008-06-05 Steve White + * FreeSans.sfd: + + Fixed undefined character in kerning classes + +2008-06-04 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + tweeks and additions to General Punctuation + +2008-06-03 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansOblique.sfd: + + Completed/tweeked Number Forms + + * FreeMono.sfd, FreeSerif.sfd: + + Added some Miscellaneous Technical symbols + +2008-06-02 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Tweeks...mostly Letterlike + +2008-06-01 Steve White + * FreeMono.sfd, FreeSerif.sfd: + + Added Box Drawing characters to Serif. + Tweeked a glyph in Mono + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added several glyphs to Letterlike Characters + +2008-05-31 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Validation pass + + SansOblique and SansBoldOblique had validation problem with BlueValues + Private Dictionary + Elements in BlueValues/OtherBlues array are disordered + Elements in BlueValues/OtherBlues array are too close + (Change BlueFuzz) + StemSnapV does not contain StdVW value. + So I ordered the array, and based on other slanted fonts, + removed StemSnapV. + + Note however, I still think the two top Blues lines are too close + But I don't even know what the second-to-top line is meant to do. + + * FreeSerif.sfd: + + Added to Block Elements, Geometric Shapes + Made to validate + +2008-05-29 Steve White + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Looking at special symbols. + Drew several Miscellaneous Symbols in Mono and Serif + > Completed/corrected planetary symbols, added Dice, + some other easy ones + > Completed Dingbats in Serif (using URW Dingbats) + Added some Block Elements to Serif + +2008-05-26 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More changes stemming from J. Poon's report. + +2008-05-25 Steve White + * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Height surgery on SerifBoldItalic. + More fiddling with accents in others. + + * FreeSerifItalic.sfd: + + More height surgery. Only a few left in Benglai and Thai + + * FreeSerifBold.sfd: + + Re-applied surgery to make glyphs between 900 and -300EM + + *** Regression + Inadvertently un-linked all references in SerifBold in r1.83. + This reverses that error (but also un-does the surgery mentioned there) + + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Applied surgery to make Latin letters go under 900EM. + One exception yet... + +2008-05-24 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Serif: much fiddling with accents in Latin ranges. + Re-thought some glyphs (there are still a few messy ones, especially + in bold) + Checked horizontal spacing...fixed a number of problems. + +2008-05-23 Steve White + * FreeSansBold.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Made Latin Extended-B coverage consistent across Serif; cleaned up some + glyphs + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Filled more of General Punctuation in Sans and Serif + Made all agree on coverage of Latin Extended Additional + +2008-05-22 Steve White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Added Latin Extended Additional to SansOblique. + Made Latin Extended Additional coverage consistent across Sans, B, I + Made Latin Extended-B coverage same in SerifBold. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSansBold.sfd: + + Mono* made Latin-B coverage consistent across faces + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made set of Latin Extended-B consistent across Sans faces + + * FreeSans.sfd, FreeSansBold.sfd: + + More filling in General Punctuation + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Another bunch of J. Poon's reports + also, filling in some Combining Diacriticals, Spacing Modifiers, and + General Punctuation in bold faces + +2008-05-21 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Mucking about with mark tables in Thai (Serif) + Other faces: Making changes from J. Poon's report + +2008-05-20 Steve White + * CREDITS: + + Mark Williamson + Jacob Poon + + * Makefile: + + added tests target + +2008-05-18 Steve White + * ranges.py: + + Put table explanation back in + + Improved behaviour for high Unicode + + * FreeSans.sfd: + + Revision of kerning + + * FreeSerif.sfd: + + Made Latin kerning a little more reasonable: + reduced many excessive kerns (some had letters apparently + overlapping, which shouldn't happen) + made kerns increment by 5EM for ease of reading + got rid of kerns too small to be seen + + * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd: + + Made to verify + +2008-05-13 Steve White + * FreeSerif.sfd: + + Made to validate + + * FreeSerif.sfd: + + Gurmukhi: filled range in Serif, taking glyphs from the original + Punjabi font by Hardip Singh Pannu + http://members.aol.com/hspannu/punjabi.html (file pb_win95.exe) + +2008-05-12 Steve White + * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Hebrew, basic. Some faces missing punctuation marks, added. + + * FreeMono.sfd, FreeSans.sfd: + + Armenian: Sans tried to make verticals and horizontals of more uniform + width both, finddled with punctuation + + * FreeMonoOblique.sfd: + + made to validate + + * FreeMonoBold.sfd: + + made to validate + + * FreeSans.sfd, FreeSansBold.sfd: + + Armenian in Sans: regularized letter spacing + + * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd: + + Armenian: fill out ranges and clean up + SansBold especially had a lot of incorrect references. + Now all the ranges with Armenian at least share the same set of + characters. + + * FreeMono.sfd: + + Fixed glyph with wrong width. + +2008-05-11 Steve White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifItalic.sfd: + + 1) made to validate + 2) Mono: copied in Spacing Modifier Letters (glyphs not yet named) + 3) SerifItalic: Filled in General Punctuation + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made to validate, and pass all other FontForge tests. + Expedient: rounded everything to int + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Made to have the same Greek Symbols, + Made to validate + + * FreeSans.sfd, FreeSansBold.sfd: + + Made Greek Symbols as full as rest of Sans. Changed a name in Sans. + + * FreeMonoOblique.sfd: + + Made Greek as full as other faces + Made to validate + + * FreeSansBold.sfd: + + Deleted seven orphaned Arabic characters; looks like somebody started, + didn't get very far, putting Arabic in bold. + + Deleted orphaned Arabic glyph from Arabic Presentation forms-B + + * FreeSerifBold.sfd: + + Deleted the single Arabic character: it was clearly there by mistake. + + * FreeSansOblique.sfd: + + Made Greek Symbols as full as rest of Sans + + Tweeks to Armenian + + Comment from previous commit of FreeSans was meant for FreeSansOblique. + In FreeSans, only tweeked a few letters during putting more characters + in this face. + + Filled in Spacing Modifier Letters, increased General Punctuation. + + * FreeSans.sfd: + + Filled in Spacing Modifier Letters, increased General Punctuation + + * FreeMono.sfd: + + Made Armenian as full as other roman faces. + + Completed Spacing Modifier Letters + Added a couple of Greek Punctuation + + added more Spacing Modifier Letters + +2008-05-10 Steve White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Did same process of scaling and sizing for Thai in Sans as in Serif. + Added mark tables to Sans. Improvement, but there are questions... + + * FreeSans.sfd: + + Tidied some Gurmukhi glyphs, validated. + + Deleted ranges for Oriya, Kannada, on account of + 1) they only contained a subset of the consonant glyphs of the scripts, + few if any vowels, and had no ligature lookups as required + 2) Kannada was based on the Akurti fonts, which have copyright issues. + + See + bug #23225: Oriya range only partial + bug #23224: Kannada range only partial + + * FreeMonoBoldOblique.sfd: + + Made metrics like rest of Mono + +2008-05-09 Steve White + * ranges.py: + + More info on range intervals + + * FreeSerif.sfd: + + Deleted Telugu range. + It didn't represent a complete writing system for the language. + + See notes at https://savannah.gnu.org/bugs/index.php?23202 + Serif: Telugu range missing many characters; many wrong + + Got a copy of the original Tikkana font, + Copied in remaining consonants and vowels that I could find there. + I think one vowel 0C55 is missing according to unicode). + Strangely, the Telugu digits are alo missing. + In Tikkana, the default "checkmark" structural mark is missing from many + consonants, according to Unicode, but is a separate glyph. I put + the checkmark on. + This, and scaled up by 150% and cleaned up intersecting glyphs and + many unnecessary points. + +2008-05-08 Steve White + * FreeSerif.sfd: + + Filled out Telugu consonants. + Vowels still need to be done + +2008-05-07 Steve White + * FreeSerif.sfd: + + Operated on Latin glyphs with stacked accents to make them fit under + 900EM. + Scaled Telugu bu 150%. + +2008-05-06 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeSansBold.sfd, FreeSerif.sfd: + + Corrected further fontforge "find problems" + Added some math characters to FreeSerif + +2008-05-05 Steve White + * FreeSansBold.sfd: + + Made to validate, and fixed bad TT transformations + +2008-05-04 Steve White + * FreeMono.sfd, FreeSerif.sfd: + + Mainly TeX additions trying to satisfy Markus Kuhn's TeX-as-Unicode page + + * FreeMono.sfd: + + Adjusted heights of extensible brackets + + Fixed problems with extensible brackets, thanks to Markus Kuhn's page + http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt + + * ranges.py: + + fiddled with ranges, doc + + made some ranges more correct? + + fixed some bugs in ranges + better error reporting + + Got rid of Unicode 1.1 references + + made to use OpenType table + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: + + made to validate + +2008-05-03 Steve White + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Removed digits from Private Use Area. + See bug 23050. + + * FreeMono.sfd, FreeSans.sfd: + + Completed General Punctuation + + * FreeSans.sfd: + + Completed IPA Extensions + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: + + More work on Superscripts and Subscripts, Spacing Modifiers. + Sans is now complete in both. + Added Pfennig to Sans and Mono. + + * ranges.py: + + Restructure text output + Rearrangement and cosmetic ...except I had broken it. now fixed + Seems to be in a useful form at this point. + More docs, date + + * FreeSerif.sfd: + + Added a hand-drawn old German Pfennig to Currency Symbols + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Further additions to General Punctuation, Super and Sub Scripts, + Spacing Modifiers, etc. + +2008-05-02 Steve White + * FreeSans.sfd: + + additions to Spacing Modifiers, IPA + + * FreeSerifItalic.sfd: + + Shortening stacked accents to maintain readability when clipped + +2008-05-01 Steve White + * FreeSans.sfd: + + Additions to Spacing Modifiers and changes to Combining Diacritics + + * FreeSerif.sfd: + + Made sure all the half rings in Combining Diacriticals and Spacing + Modifiers were really half rings (J. Poon had complained about this) + + Filled out General Punctuation + Some work on Spacing Modifiers + + Filled out Mathematical Operators + still needs lots of work + Made to validate + + Filled out Latin Extended B + Added some letters with curls to Latin Extended B + More fiddling with Latin Extended B accents + +2008-04-30 Steve White + * FreeSerif.sfd: + + Added Hanunóo script, with characters based on those in + font MPH2BDamase, on request from the maintainer of that font, + http://packages.debian.org/sid/ttf-mph-2b-damase + + Glyphs are simple vector strokes. Could be a little more uniform. + + Added Buginese script "Lontara", with characters based on those in + font MPH2BDamase, on request from the maintainer of that font, + http://packages.debian.org/sid/ttf-mph-2b-damase + + Note the glyphs are pretty rough, clearly a digitization of handwriting. + I just cleaned them up, and corrected discrepancies with Unicode, + and compared with some pictorial samples of the script I could find. + +2008-04-29 Steve White + * ranges.py: + + Improved look a lot--still unhappy with some ranges + OS/2 seems sometimes bang-on, sometimes unrelated to anything (including + fontforge's OS/2 listing) + + * FreeSerif.sfd: + + Much fiddling with Tamil range. + First scaled to 78% (avoiding the references) + This gets it in the ballpark height-wise. [A bit taller than the Latin + letters, but the stroke is narrower, but then the glyphs are busier.] + Then had to re-align combined references, the trickiest being the + halants. + Checked with other fonts with Tamil text. + +2008-04-28 Steve White + * FreeSans.sfd, FreeSerif.sfd: + + Cleanup of control points in Arabic and Thaana + + * FreeSerif.sfd: + + Cleanup of missing extrema in Arabic and Thaana + + Many changes to Thai, trying to make the script fit between some lines, + so accents won't get clipped, etc. + Also, stroke weight was heavier than that of Latin. + + Scaled whole thing by 93%. + Shrank the tallest letters 0E42-4 to get them under 900EM. + Shaved off top of maiek. + Fiddled with positioning of all accents. + Made positioning tables for accents. + Note: unclear these are working correctly + + Fixed a bug having to do with character replacements for characters + named 'ng' and 'nj'; these names had been taken on by other characters. + + Made to validate + + Unicode positions of two Cyrillic Extended characters were switched. + Fiddled with a couple of Cyrillic combining diacritics + +2008-04-27 Steve White + * FreeSans.sfd: + + bugfix: a left harpoon mysteriously appeared to the left of letter p! + +2008-04-26 Steve White + * FreeMono.sfd: + + Made to validate + + * FreeSans.sfd: + + Made to validate + + Toward J. Poons report + Made 032B more like proper double-arches (and distinct fro 033C seagull) + Made 032b more like a seagull + + * FreeSans.sfd, FreeSansBold.sfd: + + Sans: fiddling with widths and terminators of math symbols, + toward J. Poon's report + R & B: removed u+2741 because it didn't match the Unicode description + + * FreeMono.sfd: + + Extensible parenthesis symbols weight/terminators + Toward bug # 23064: https://savannah.gnu.org/bugs/index.php?23064 + Rounded a bunch of terminators + +2008-04-22 Steve White + * FreeSerif.sfd: + + Small alignment problem in Greek Extended + + One more tweek to spacing in Cyrillic Extended + + Corrected spacing in Cyrillic Supplement + + Added Cyrillic Supplement letters for + Enets, Khanty, Chukchi, Itelmen, Mordvin, Kurdish, Aleut + + Added Cyrillic letters for Nivkh (completing Cyrillic range) + More tightening of accents in Latin Extended. + + * FreeSans.sfd: + + Fiddled with math--consequences of changing the "similar" operator + + More tightening of accents + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjustments to h and k with caron and cedilla in Latin A and B + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd: + + FreeSerifBold: deleted 3 dotted Hebrew letters in Private/Corporate use + (E801-3). They weren't ligatures or in any other lookup, and they + weren't present in FreeSerif. + + * FreeSansBold: + Unlinked and deleted F6C3, which called itself commaaccent. + Made some new spacing and non-spacing accents to make up for it. + + * FreeSansBoldOblique: + Made references of many Latin Extended. + Also corrected several wrong ones. + + * Freeserif: + Re-named commaaccent + +2008-04-21 Steve White + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd: + + Deleted Hiragana and Katakana ranges, as discussed on bugs list. + Cleaned up some encoding issues, unnamed glyphs + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Roman: added 'sine' -- not beautiful, but I liked drawing it + All: Made special lookup for Dutch ligatures 'IJ' and 'ij' + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Roman: ffi etc Latin ligatures from 'liga' to 'dlig' (these weren't + really ligatures anyway, and only looked very bad when used. + Retain for condensed type. + Others: deleted Latin 'liga' table altogether + BoldOblique : added j to ij ligature + + Toward J. Poon's Report: + Except for issues of terminators not always vertical or horizontal, + and a few things that were too hard or I was unsure of. + +2008-04-20 Steve White + * FreeSerif.sfd: + + Futzing with accents in Latin Extended Additional and Latin Extended-B + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Added primemod character, referenced by Greek number sign + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Following J. Poon's report, disconnected NJ (01CA) + +2008-04-19 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + First pass throught J. Poon's bug list. + See bug reports for details. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made underscore slanted in Oblique faces, made all to be width of + space character. + Towards J. Poon's report. + Disturbed that xterm and some other apps put small space between + characters when none was called for. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansOblique.sfd: + + Corrections on Currency Symbols + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More corrections, additions to Currency Symbols + + * FreeSans.sfd, FreeSerif.sfd: + + Filled out and corrected Currency Symbols + +2008-04-18 Steve White + * FreeSans.sfd, FreeSerif.sfd: + + Adjustments to Combining Marks for Symbols + Additions to range in Sans, and re-structured its marks table so that + "middle" can apply to any range + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Made reference between combining koronis and lenis of Greek Extended. + In Serif, re-worked combining marks lookup tables, added anchors in + Latin, moved so without marks they work in kedit (but now I'm doubting + kedit does a reasonable thing...what is a better application for + testing this?) + +2008-04-16 Steve White + * FreeSerifItalic.sfd: + + Adjusting of spacing and accents in Greek + + * FreeMono.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd: + + Much futzing with Greek letter spacing and accents. + Added lenis to FreeMono. + + * FreeMono.sfd, FreeSerif.sfd: + + Adjusted spacing of dots of Greek dieresistonons in Serif + Whipped up something for Greek kappascript in Mono (could use revision) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Raised dots on double-dotted Cyrillic i, to match that of i and j. + +2008-04-14 Steve White + * FreeMono.sfd: + + Corrected 27e6-7 "white bracket" + Note it is probably a FontForge bug these symbols aren't showing up. + FontForge thinks they are in Supplemental Arrows, but they should be + in Supplemental Math-A + + Named some Greek characters + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Spacing of some Cyrillic characters + +2008-04-13 Steve White + * FreeSerif.sfd: + + Some fiddling with accents + 'yogh' was too wide + + * FreeSansBold.sfd, FreeSansOblique.sfd: + + Character spacing was chaos--tried to improve. BoldOblique also needs + it. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Completed the fix of bug #12798, Greek glyphs with accents to side + Much mucking with accents here, and fixed a few things that were just + wrong. + +2008-04-12 Steve White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made Mono curly quotes "bent" + + * FreeMono.sfd: + + More fiddling with Greek accents + Made quotes "bent" + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjustments on Greek diaresistonos etc. + Adjustments in Serif on combining marks for symbols + + * FreeSerif.sfd: + + More additions to Combining marks for Symbols + + Additions to Combining marks for Symbols -- now mostly full. + Lots of adjustments to middle anchor point in Latin to make big circle + (nearly) encircle preceding latter + +2008-04-11 Steve White + * FreeMono.sfd: + + Bugfix: + Had indroduce a glyph of width other than 600, making kterminal not + recognize it as a monospace font. + +2008-04-10 Steve White + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More messing with accents. + Further to bug #12798, Greek glyphs with accents to side + Much messing with glyphs in Greek Extended range + +2008-04-09 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerif.sfd: + + Revisited Latin-1 and Latin-A accents. + Glyph B7 was called "periodcentered", but Unicode callse it Mid Dot, + and the description doesn't refer to the period. I made it like the + dot accent. throughout, and referred L-dot to it. + + Also double-checked "commaaccent" characters (some in Unicode called + cedilla, but the Unicode example shows a comma...mystery) + + Also the funny IPA upside-down f often had two bars, incorrectly. + + To do: go through rest of Serif, and Sans + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Completed re-structuring of stacked Latin accents in Mono. + Also: lots of associated adjustments of Greek Extended accents. + (Trying to at least center extremely wide characters on their box) + Repaired some victems of "find overlaps" sweeps + Worked on glyphs with apostrope/comma parts + Corrected a few wrong glyphs. + + Trying out a "bent quotes" solution to making primes distinct from + quotes. + +2008-04-08 Steve White + * FreeMonoOblique.sfd: + + Toward reducing overall height + Did similar process as for Mono, fixing a few errors along the way. + Also the Greek Extended range was very messed up vertical and + horizontally. + Horizonal spacing of the heavily accented Greek is a real problem in + Mono... + To do: + revisit "commaaccent" characters in all faces: do some have + edillas? + some Hebrew glyphs are a little low + Georgian generally is way out of bounds + +2008-04-07 Steve White + * INSTALL: + + Various updates and corrections, tweeked formatting + + * FreeMonoBold.sfd: + + Tweeking of accents + +2008-04-06 Steve White + * FreeMono.sfd, FreeMonoBold.sfd: + + Re-worked accents in FreeMonoBold.sfd to make Latin ranges lie between + 800 and -200 EM, as with FreeMono. + + * FreeMono.sfd: + + Latin Extended ranges: Implemented new policy of shortening the letters + of the characters with the highest-stacked accents. + + At this point all the Latin glyphs lie betweeen 800 and -200 EM. + + Also checked for readability of all the Latin extended letters in xterm. + (Issue: it chops letters outside their bounding boxes; many accents had + been a bit outside. Made sure that if they were chopped, they were at + least still recognizable.) + +2008-04-05 Steve White + * FreeMono.sfd: + + Following exchange about Mono on freefont-bugs with Joe Wells, who + > doesn't like the curly quote marks + > wants combining diacritics to work + > wants tight line spacing + + Trying to reduce font height: + > exclamdown was below -200 + > Throughout Extended Greek, ypogegrammeni were too low. Shortened + glyph, and raised all references. + > Lots of messing with Latin Extended ranges to make glyphs mostly + fit into 800 height. Mostly succeeded. A couple will get chopped. + > Messed with "commaaccent" glyphs, which were very low + > Cyrillic 04B1 had a tail that was incorrectly low + > Much mucking with Georgian range. Moved up by 95 (read that Georgian + is written as though centered between two horizontal lines, rather than + as sitting on a baseline) There are still a few very high glyphs. + + FontForge U+0122 called Gcommaaccent, glyph looks like that, but + Unicode says it's Gcedilla. Made the ones called cedilla by Unicode + to be cedillas + + Note bug in Unicode: standard for 0122, 0123, 0136, 0137, 013B, 013C, + 0145, 0146, 0156, 0157 all talk about cedilla, say to make it with + cedilla, but example shows comma. + + By the way: + > Got rid of commaaccent and dotlessj in Corporate Use + > Replaced shadedark, with little squares now not overlapping. + > Corrected IPA symbol 'ts' 02A6, added 02a8, 02a9, 02aa, 02ab, 02ac, + 02ad, 02ae, 02af + + (so many changes...the CVS server was down...) + + * FreeSerif.sfd: + + Re-named arabic and hebrew characters + Big adjustment to comma-accents. Mostly effects Greek Extended. + Made such accents to be like comma, rather than like Russian apostrophe + (and de-referenced that symbol) + +2008-04-04 Steve White + * FreeMono.sfd, FreeSerif.sfd: + + Raised dot on superscript i (2071) -- more distinct at small sizes + + * FreeMono.sfd: + + added two IPA symbols + +2008-04-02 Steve White + * FreeSerif.sfd: + + fixed a few more control points too close + + Fixed names of languages in ligature table for latn "w/i". + This fixes a crash when FontForge opened the ttf table + + Motivated by bug crashing FontForge when opening ttf file, + started cleanup of useless control points. Not finished. + Got partway through Sinhala + +2008-03-31 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Fixed various "Find Problems", including glyphs with mixed-up names, + and bad TT matrices. (lots more bad TT matrices remain) + + * FreeSerif.sfd: + + Re-named a bunch of Cyrillic letters + + * FreeSerif.sfd: + + Put above mark on Cyrillic i and double-dot i for Slavonic number forms + +2008-03-30 Steve White + * FreeSans.sfd: + + Tightened spacing on glyphs of last commit + + * FreeSans.sfd, FreeSerif.sfd: + + Concerning bug #16120, Include upper case Wynn and upper case Yogh + Adapted Herman Miller's Thyromanes letters 01F7 021C 021D for Serif + Drew my own versions for Sans. + + * FreeSerif.sfd: + + Added 04F6,7 + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Made more Cyrillic diacritics really combine. + Made a mark lookup just for Cyrillic diacritics, + Marked most of the unadorned Cyrillic alphabet. + + Still not clear on correct shapes for some of the marks. + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Tweeks to accents + +2008-03-29 Steve White + * FreeSans.sfd, FreeSerifItalic.sfd: + + Small adjustments in Cyrillic + + * FreeSerif.sfd: + + Corrected small palochka + Made Cyrillic combining hundred-thousands and millions really combine + Named some combining diacriticals + + * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Mostly adjusted horizontal spacing of mono oblique faces + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More cleanup of Cyrillic ranges + + Completely re-did horizontal spacing of SerifItalic and SerifBoldItalic. + See bug #17912, poor kerning in Cyrillic oblique... + https://savannah.gnu.org/bugs/index.php?17912 + It looked like chaos to me. + Only so much can be done: the font is flawed. + But I think the changes make text readable in these faces. + + There were dozens of incorrect glyphs in higher-numbered characters. + I deleted all those I found. No glyph is better than a wrong glyph. + + Futzt with accents, shooting for consistency and readability. + + A maintenance thing: making correct references (acyrillic vs a, + although they may be the same glyph) I made a lot of headway, but + it isn't finished. + + Likewise, a large fraction of these are compound characters, which can + be made with references, resulting in easier maintenance, reduced + likelihood of errors, and smaller files. I replaced many. + + * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Cyrillic italic + Added italic, bolditalic + 0493, 04a7, 04AD + because their form clearly varies in italic. But was just guessing... + + * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Cyrillic italic + + Added italic, bolditalic + 0493, 04AD + because their form clearly varies in italic. + But was just guessing as to exact form. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Overhaul of Cyrillic + + Italic, BoldItalic + added small yat for bug #22588 (note Times New Roman doesn't use + alternate form in Italic) + + All forms of Serif have big problems in Cyrillic. + + The ugliest is in roman. The letters, even of the Russian alphabet, are + of inconsistent height (awfully, small 0438 (ii) 0446 (tse)) + and they vary from the height of Latin + and they vary from the height of italic and bold. + They are a mish-mash of letters from several fonts, of similar (but not + quite identical) weight, and similar, (but not quite identical) size. + + I think the best solution would be to identify the face that best + matches Latin, and fill the range with that. I think this is possible + because the rarer letters seem to be better: the common letters are the + ones that are wrong. + + For now, I just increased the sized of 0438 and 0446, and 048a, 048b, + also 0459 (lje) 045A (nje) 0464 (dje) + + Other issues + +2008-03-27 Steve White + * FreeSerifBoldItalic.sfd: + + Moving all Greek capitals with accent so they don't cover previous + letter. Remedies bug #12798 + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Various tweeks to accented Latin letters. + Connected O-ogonek correctly + + * FreeSerifItalic.sfd: + + Accents of numerous accented Latin letters got shifted in a previous + commit. This fixes it. + + * FreeSerif.sfd: + + Adjusted combining tack left and right (0318-0319) to be above -300 EM. + + * FreeSans.sfd, FreeSerif.sfd: + + Added some "middle" marks for positioning of diacritics + + * FreeSans.sfd: + + Copied 4 enclosing combining diacriticals from Serif 20DD - 20E0 + + * FreeSerif.sfd: + + Adjusted and added some enclosing diacritics 20DD - 20E0 + In response to Debian bug #472566 + ttf-freefont: U+20DD COMBINING ENCOLSING CIRCLE doesn't combine + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=472566 + +2008-03-26 Steve White + * FreeSerif.sfd: + + Lowered a few over-high Latin accents + + * FreeSansBold: + + Devangari--only digits 1 and 2, and nothing else. Deleted + + * FreeMonoBold, FreeMonoOblique, + FreeSerifBold, FreeSeriftalic, FreeSerifBoldItalic, + FreeSansOblique, FreeSansBold, FreeSansBoldOblique: + + Got rid of dotlessj, comma in Corporate Use + Single Substitution lookup, ccmp table + Made proper dotlessj, re-linked j-circumflex + + Note: + FreeSansBold has a commaaccent in Corporate Use, used by several other + characers. Haven't done anything about this. + +2008-03-25 Steve White + * FreeSerif.sfd: + + Added/corrected glyphs for yeh hamza in Arabic, + Added init and medi lookups for yeh hamza. + +2008-03-24 Steve White + * FreeSerif.sfd: + + Added isolated and final forms for + 0629 teh marbuta + 0624 waw hamza + 0626 yeh hamza + 0649 alef maksura + A previous commit had added lookups that referred to these, + + More fiddling with super/subscripts + + * Makefile, Makefile, GenerateTrueType: + + Scripts and Make targets to generate OpenType fonts and zip file + + * maintenance.txt: + + Added gnupload and info about tagging + +2008-03-23 Steve White + * FreeSerif.sfd: + + Last of Find Problems -> ATT + 'mark' Latin lookup: afii10026 is in 'cyrl', also afii10074 + Upper and lower Cyrillic i. Just removed mark from both letters. + + 'half' Bengali lookup Khanda_Ta is in 'bng2'. Added bng2 to lookup + Added TtTable etc + + Clean-up of Points too Close through to end of font. + This episode completes the paths/points clean-up of Serif. + But note: many ranges, esp. Ethiopic, Japanese, and Indic, have way + too many points, resulting in lumpiness. + + At this point, FontForge can convert splines to quadratic, auto-hint, + and auto-instrument without segfault. + + * Makefile, sfd/Makefile, tools/GenerateTrueType: + + Alterations to build process: added a Makefile, and made to work + on my system. Now auto-hints before generating TrueType. + +2008-03-22 Steve White + * sfd/FreeSans.sfd: + Lots of additions of math characters. Should complete for + LaTeX 2e, except for extensible brackets. + +2008-03-21 Steve White + * *.sfd: + + Regularized stacking of accents in Latin Extended Additional + Changed name of 00B5 from 'mu' to 'micro', + 2206 from 'Delta' to 'Delta.math', + 0308 from 'diaerisis' to 'diaerisiscomb' + + * FreeMono.sfd: + + additions to IPA + + * FreeMonoBoldOblique.sfd: + + Moved dotlessj from Corporate Use, + Deleted commaaccent there + Fixed mis-named glyphs tcommaaccent, Tcommaaccent + Changed name of 030A from 'dieresis' to 'ringcomb' + + * FreeSans.sfd: + + Added some arrows, and a couple of blackboard bold characters + + Several characters in U+F600 Corporate Use range + dotlessj, onefitted, commaaccent + + dotlessj referred to by: jcircumflex, uni01F0: + renamed it to uFFFF, re-linked others by hand + + commaaccent + http://diacritics.typo.cz/index.php?id=9 + should be u+0326 but wasn't linked to anything + + * FreeSansBold.sfd: + + U+0617 etc: read glyphs "4GWglm". It should be Arabic. Deleted + + * FreeSansBold.sfd, FreeSansOblique.sfd, FreeSansBoldOblique.sfd: + + Removed bogus glyphs for 200C 200D, ZWJ and ZWNJ + + * FreeSerif.sfd: + + Split lookup for ligatures in latin into two classes; + ff, ffl, fl which are appropriate for all languages, + and fi, ffi, which are not appropriate in Turkish (due to distinction + between short and long i) + Needs to be done for other faces. + + Filled set of extensible brackets in Miscellaneous Technical + + Think IPA is now complete. + +2008-03-18 Steve White + * FreeSans.sfd: + + clean-up of all path issues and points too close + +2008-03-18 Steve White + * FreeSans.sfd: + + Something was causing crashing effects in Windows. Cleanup of + problems eventually made it go away. Now works well. + + Cleaned up many "points too close" + + Cleaned up all ATT problems, of which there were many and various. + + # Incorrectly labelled zero-width joiner used in a ligature + + # Incorrect substitution of dotlessi and dotlessj with i and j was + somehow connected with FontForge crash. Attemts to remove the + substitution would damage a 'ccmp' table; subsequent changes would + result in FontForge crashing on save, and truncating the sfd file. + Surgically removed with vi. + + # A couple of Indic lookups had incorrect script DFLT; one had 'latn'. + + # Don't understand why there are scripts named + dev2 bng2 grj2 gur2 when there are already deva beng gurj guru + But anyway, lots of 'vatu' 'pres' 'haln' and 'liga' lookups contained + characters in the '2' scripts but were lablled only for the 'non-2' + ones. Added the '2' scripts to all these lookups. Suspect a mistake. + + Note: several of these problems are repeated in other Sans faces. + +2008-03-16 Steve White + * FreeMono.sfd: + + Cleanup of many path problems "points too close" + + Strove to make accents Latin Extended range legible at small sizes + + Named some unnamed characters; removed a duplicate + + At this point, all fonts are passing FontForge Validate. + +2008-03-15 Steve White + * FreeSerif.sfd: + + CJK punctuation: made some of the very high glyphs smaller (under 900EM) + The brackets in Sans were very ugly, and not even Sans-serif. + Serif: added extensible square brackets, diddled with integral + corrected direction of some added glyphs + + Several bugs having to do with missing glyphs in Tamil range. + Also a buggy ligature in Devangari. + + Shortened names of many lookup tables + + Futzt with some combining diacriticals + + Added extensible square brackets. + + * FreeSans.sfd: + + Changed names of a bunch of glyphs with invalid + TrueType names, in range 0x1025f+ (not real Unicode). + Took pains to retain information contained in the names. + Wonder if these glyphs have ever been of any use. + + CJK Punctuation: brackets were hand-drawn and very ugly. Improved. + + * *.sfd: + + Set OS/2 Metrics back to absolute 900/300. Offsets are not + interpreted uniformly. + + Cleanup of many path problems up to extrema and self-intersecting + + Ordered PS Blue values. + +2008-03-14 Steve White + * FreeSerif.sfd: + + Got rid of mixed references and contours + Cleanup of many path problems "points too close" + + Started clean-up to satisfy FontForge Validate + + Changed names of three glyphs in the + Tamil ligatures range...all clearly bugs. + + * FreeSans.sfd: + + Added slanted-hyphen + + * *.sfd: + + Unified OS/2 Metrics + Added Grid Fit + +2008-03-13 Steve White + * FreeSans.sfd: + + Rearranged PS BluesValues so they were in increasing order, + Made all 20 in width. + +2008-03-12 Steve White + * FreeSans.sfd, FreeMono.sfd: + + Added TrueType hinting tables. + Fixed glyphs that didn't convert well to quadratics + Got rid of mixed contours and refs + + * FreeSerifBold.sfd: + + Cleanup of path problems + +2008-03-11 Steve White + * FreeMonoOblique.sfd: + + Cleanup of path problems + +2008-03-09 Steve White + * FreeSerif.sfd: + + Corrected L-dot + Further cleanup of path/ref problems + + Found several ligatures that referred to a missing glyph "ZWJ". + Took this to mean the "zero width joiner" u+200D + + * *.sfd: + + Changed OS/2 metrics to be absolute 900/300 + + * FreeSerifItalic.sfd: + + Added Greek lunate epsilon + + * FreeMono.sfd: + + Many additions in math range + Reduced size of binary union, intersection, vee, wedge + Corrected empty set + Corrected logical 'assert' relations, etc. 22a2-22af + Efforts to make Math glyphs legible at small point sizes + + * FreeSans.sfd: + + Added Greek lunate epsilon and rho symbol + Unstacked more stacked diacriticals + + Further cleanup of path/reference problems + +2008-03-08 Steve White + * FreeSans.sfd, FreeSerif.sfd: + + Added some "n-ary" Math operators + + * FreeSerif.sfd: + + Further clean-up of path problems...up to Ethiopic + > Started adding and correcting Math operators for LaTeX 2e + > Corrected n-ary union, intersection, and spikes to be larger + than the binary operators + > Made (many of) the operators based on + - = to use those + symbols directly (by reference or copying). + > Added lunate epsilon + > Corrected empty set + > Tightened up spacing of some other technical characters + > Worked on some more math operators involving = + > triangle + > Several arrows + > Supplemental Arrows-A + + * FreeSans.sfd: + + Clean-up of font paths + Open self-intersecting outermost-clockwise missing-extrema + also flipped references (unlinked) + + Added Greek lunate epsilon and rho symbol + +2008-03-06 Steve White + * sfd/FreeSerif.sfd: Shortened and thickened the combining hook mark, + U+0309, to make more like Unicode samples. + Also see (bug #22499) un-stacked incorrectly stacked accents + +2008-03-05 Steve White + * sfd/FreeSerif.sfd: vertical lines: combining diacritical marks + corrected 0300 030D 0329 0348 (were rendered as straight apostrophes) + Spacing Modifier letters added 02C8 02CC + 02B9 02Ba prime and double-prime + Fixed positioning U+1EC8, 9, I with hook above + +2008-03-03 Steve White + * sfd/FreeSerif.sfd: TT strings updates. + updated Copyright to 2008 + Added Vendor URL as the Savannah freefont site + * sfd/FreeMono.sfd: A standard pangram as the Sample Text for Russian + It reads: In the thickets of the South once there was a citrus + ...--yes, but a fake specimen! + * sfd/*.sfd: Set the OS/2 Sup/Sub settings, which by default looked + like random trash. + +2008-03-02 Steve White + * sfd/FreeSerif.sfd: began cleanup of problems given by FontForge + "Find Problems" feature. (bug #22454) + +2008-03-01 Steve White + * sfd/FreeSerif.sfd: made Arabic work for text display (bug #22329) + Added required contextual replacement tables, + Made a few missing characters, + * sfd/*.sfd: Removde all back layers from glyphs that had them. + +2008-02-27 Steve White + * sfd/FreeSans.sfd: filled in Combining Diacriticals + * sfd/FreeSerif.sfd: shifted whole Arabic range down by 200EM. + +2008-02-26 Steve White + * sfd/FreeSerif.sfd: enabled DPOS table. + +2008-02-24 Steve White + * sfd/*.sfd: Much fiddling with the "combining diacriticals" + range 0300-036F. Made to align with medium-size lowercase + preceding character if not using DPOS table. + +2008-02-23 Steve White + * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #21784) Filled + in set of HTML 4 Character Entities. + + * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #18413) + undertie too low -- went on to tidy other similar characters in + Combining Diacriticals range. + +2008-02-21 Steve White + * sfd/*.sfd: Moved capital Greek letters with tonos so tonos doesn't + cover preceding letter (bug #12798) + + * sfd/FreeSerif.sfd, FreeSans.sfd: (bug #13370) made extended + integrals to line up. + +2008-02-20 Steve White + * sfd/*.sfd: started removing glyphs with back layers (printing bug) + * sfd/*.sfd: adjusted vulgar fractions (bug #17756) + * sfd/*.sfd: adjusted numerical superscripts (bug #20278) + +2008-02-18 Steve White + * sfd/FreeSerif.sfd: Offset Hiragana and Katakana ranges (bug #22326) + * sfd/FreeSerif.sfd: U+30FB, KATAKANA MIDDLE DOT to be full width + (bug #18326) + + * sfd/FreeSerif.sfd: Re-promoted + ff ffi ffl fi fl + as standard ligatures in Latin. + +2008-02-17 Steve White + * sfd/*.sfd: committed to FontForge Spline Font Database (SFD) 2 + format. + +2008-02-10 Steve White + * sfd/*.sfd: brought into line with Debian ttf-freefont + Deleted a couple of patches, and applied those applied to Debian. + +2006-09-20 Primoz Peterlin + + * INSTALL: added installation procedure for MacOS X, courtesy + Philipp Kempgen. + +2006-05-04 Primoz Peterlin + + * sfd/FreeMono.sfd: deleted Russian sample text, which did not + conform to UTF-7. + +2006-04-15 Primoz Peterlin + + * sfd/FreeSerif.sfd: corrected U+10D3. + + * sfd/FreeSans.sfd: ligature U+FB06 (LATIN SMALL LIGATURE S T) + changed from mandatory ("liga") to discretionary ("dlig") (bug + #16253). + + * sfd/FreeMono.sfd: deleted incomplete glyph U+FB06 (LATIN SMALL + LIGATURE S T); deleted U+FB00, U+FB01, U+FB02, U+FB05 as + ligatures (bug #16253). + + * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBoldOblique.sfd: added + U+FB00; deleted U+FB01, U+FB02 as ligatures (bug #16253). + + * sfd/FreeMonoBold.sfd: deleted U+FB00, U+FB01, U+FB02 as + ligatures (bug #16253). + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd: added Georgian letters, donated by + Gia Shervashidze + +2006-02-22 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd: ligature U+FB4F + changed from mandatory ("liga") to discretionary ("dlig"). This is + respons to Bug#349657: [bug #15792] Freefont Alef and Lamed + combine + +2006-02-21 Primoz Peterlin + + * sfd/FreeSerifBold.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd, + sfd/FreeSansBold.sfd: ligature U+FB4F changed from mandatory + ("liga") to discretionary ("dlig"). This is respons to Bug#349657: + [bug #15792] Freefont Alef and Lamed combine + + * sfd/FreeSerif.sfd: corrected bug#275759: [bug #15790] FreeSerif + glyphs for U+2198/U+2199 were reversed. + +2006-02-15 Denis Jacquerye + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: removed ij + and IJ ligatures. + +2006-02-10 Primoz Peterlin + + * sfd/FreeSerif.sfd: added small Georgian letters (mkhedruli), + donated by Gia Shervashidze + + * AUTHORS: Added Gia Shervashidze + + * CREDITS: Added Gia Shervashidze + +2006-01-26 Primoz Peterlin + + * notes/maintenance.txt: Added information on the Makefile now + used; username for FTP login is anonymous. + + * sfd/FreeSansBold.sfd: added U+0569, U+0571, U+0579, U+057B, + U+0586. Armenian small letters completed. + + * sfd/FreeSerif.sfd: added U+0297, U+02AD-02AF. IPA Extensions + section is now complete. Copied a dozen of glyphs from Omega IPA + to Phonetic Extension section. + +2006-01-25 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+01A, U+01A3, U+01A6, U+01B2, U+01BA, + U+01BB, U+01BE, U+01BF. + + * sfd/FreeSans.sfd: aligned small Armenian letters to x-height in + response to bug #15480. Armenian in Free Sans needs a major + cleanup. + +2006-01-24 Primoz Peterlin + + * sfd/FreeSerif.sfd: changed U+0452, U+045B. Cleanup: U+0460, + U+0461, U+04Bc, U+04BD, U+0508. + + * sfd/FreeSansOblique.sfd: replaced accented chars in Latin-1 and + Latin Extended-B sections with references, where possible. + + * sfd/FreeSerif.sfd: changed U+0285. + +2006-01-23 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0195, U+01AA, U+0297, U+03D7, + U+03F0. Several flipped references replaced by outlines. + + * sfd/FreeSansOblique.sfd: Latin Extended-B section more or less + brought in sync with FreeSans. + + * sfd/FreeMonoBoldOblique.sfd: added glyphs from FreeMonoBold in + the Latin Extended-B and IPA Extensions sections. + + * sfd/FreeSerifBold.sfd: Added U+0224, U+0225. Changed U+01B7, + U+01B8, U+04E0, U+0452, U+045B. Replaced accented characters in + the Cyrillic region with references. + +2006-01-21 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0255, U+0264, U+0277, U+0286, + U+029D. Changed U+0261. Deleted spurious glyphs in the control + code area. + +2006-01-19 Primoz Peterlin + + * sfd/FreeSans.sfd: replaced Hardip Pannu Singh's Gurmukhi with + AnmolUni by Kulbir Singh Thind. + +2006-01-17 Primoz Peterlin + + * sfd/FreeSansBold.sfd: Added U+018D, U+0194, U+01B5, U+01B6, + U+01BE, U+0262, U+02A2. + + * sfd/FreeSansBold.sfd: Changed U+0261 in order to distinguish it + from U+0067. Changed U+0251, U+0252. + + * sfd/FreeSerifBold.sfd: Small changes in the Cyrillic + section. Added U+0183, U+018C. + + * sfd/FreeSans.sfd: Added U+2045, U+2046. + + * sfd/FreeSansBold.sfd: Filled in the Gurkmukhi part with the + AnmolUni-Bold by Kulbir Singh Thind. Also some minor corrections + in the Cyrillic part. + + * CREDITS: Added Kulbir Singh Thind. + + * AUTHORS: Added Kulbir Singh Thind. + +2006-01-14 Primoz Peterlin + + * sfd/FreeSerif.sfd: Thomas Ridgeway's Tamil characters replaced + by the ones released by the Samyak font project. + + * CREDITS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao + and Sandeep Shedmake + + * AUTHORS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao + and Sandeep Shedmake + +2006-01-08 Primoz Peterlin + + * sfd/FreeSansBold.sfd, sfd/FreeMonoBoldOblique.sfd: minor changes. + +2006-01-05 Denis Jacquerye + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd: added cedi sign U+20B5, Ghanaian + currency + +2005-12-29 Primoz Peterlin + + * sfd/FreeSans.sfd: minor cleanup in the Gujarati part. + +2005-12-22 Primoz Peterlin + + * sfd/FreeSans.sfd: Devanagari and Gujarati parts cleared; once + again merged with Gargi 1.9 and Padmaa 0.6, this time correctly so + that the anchor points survived the merger. + +2005-12-16 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0577. + +2005-12-15 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0559, U+055F, U+2024. + + * sfd/FreeSansBold.sfd: added U+056E, U+0573. + +2005-12-14 Primoz Peterlin + + * sfd/FreeSans.sfd: Merged with Gargi 1.9 and Padmaa 0.6, + courtesy Monika Shah and Sonali Sonania from C-DAC, Mumbai. + + * CREDITS: Added Monika Shah and Sonali Sonania. + + * AUTHORS: Added Monika Shah and Sonali Sonania. + +2005-12-13 Primoz Peterlin + + * sfd/FreeSans.sfd - Removed Sinhala glyphs. + + * sfd/FreeSerif.sfd - Added Sinhala glyphs, formerly in FreeSans. + +2005-12-09 Primoz Peterlin + + * sfd/FreeSerif.sfd: added U+20AF, U+211E. Changed U+20AC (EURO + SIGN). + + * tools/freefont-ttf.spec: Added specification file for building + RPM package, courtesy Rok Papez. + + * sfd/FreeSerifBold.sfd: added more glyphs from Txfonts to the + Arrows and Mathematical Symbols ranges. + + * sfd/FreeSerifBoldItalic.sfd: added U+03F5 from Txfonts. + +2005-12-08 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0567, U+056A, U+056C, U+0582. + + * sfd/FreeSerifBold.sfd: copied Box Drawing range from FreeSans. + + * sfd/FreeSerifBold.sfd: added glyphs from Txfonts to the Arrows + and Mathematical Symbols ranges. + + * sfd/FreeSerif.sfd: added U+2259-225A, U+22BA, U+2308-230B, + U+2322-2323. Cyrillic composite characters replaced with + references. + +2005-12-07 Primoz Peterlin + + * sfd/FreeSerifBold.sfd: added U+025A, U+025D, U+026B, U+029B, + U+02AE, U+02AF, U+02DE. + + * sfd/FreeSerifBold.sfd: updated Hebrew part with Drugulin font + from the Culmus project. + + * sfd/FreeSerif.sfd: added U+207A-207C, U+208A-208C, U+2215-2216. + + * sfd/FreeSans.sfd: added U+2320 TOP HALF INTEGRAL, U+23AE + INTEGRAL EXTENSION, U+2321 BOTTOM HALF INTEGRAL (bug #13370). + +2005-12-07 Primoz Peterlin + + * sfd/FreeSerifBold.sfd: added U+0294-0296, U+02A1-02A2. Started + adding "below" anchors. Performed hinting on characters that were + not hinted "en masse". + +2005-12-06 Primoz Peterlin + + * sfd/FreeSans.sfd: fixed some more metrics problems in the + Extended Greek area; performed hinting on characters that were not + hinted "en masse". + + * Makefile: clean also signature files. + + * sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: cosmetic + changes; cleaning background of referenced composed characters. + +2005-12-05 Panayotis Katsaloulis + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd: Some changes to the greek glyphs, + mostly having to do with "tonos" (accent) + +2005-12-05 Primoz Peterlin + + * sfd/FreeSans.sfd: minor cosmetic changes. + + * sfd/FreeSans.sfd: adjusted widths of characters in the Extended + Greek range; accents are not any more considerably overhanging on + the left side. Added U+1EDA-1EE3, U+1EE8-1EF1. + + * sfd/FreeSans.sfd: continued working on Extended Greek range; + metrics still not finished. + +2005-12-03 Primoz Peterlin + + * sfd/FreeSans.sfd: fixed combined Greek accents (bug + #12800). Width of characters still need to be adjusted as in + FreeSerif. + + * sfd/FreeSerif.sfd: fixed positions of Greek accents (bug #12798). + + * CREDITS: Added Panayotis Katsaloulis. + + * AUTHORS: Added Panayotis Katsaloulis. + + * Makefile: minor changes; now creating also a tarfile with sfds. + +2005-12-01 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd: added U+0183, U+018C, U+01C0, U+01C1, + U+01C3, U+01E0, U+01E1, U+01F8, U+01F9. + + * Makefile: created a Makefile to assist building. + + * README: an update. + + * COPYING: added GNU General Public License, version 2. + + * tools/GenerateTrueType: wrote a FontForge script for conversion + to TrueType. + + * sfd/FreeSerif.sfd: merged with SolaimanLipi Bangla OpenType font + from www.ekushey.org, courtesy Solaiman Karim. + + * sfd/FreeSerifItalic.sfd: merged with SolaimanLipi Bangla + OpenType font from www.ekushey.org, slanted by 15.5 degrees. + + * sfd/FreeSans.sfd: merged with Rupali Bangla OpenType font from + www.ekushey.org + + * sfd/FreeSansOblique.sfd: merged with Rupali Bangla OpenType font from + www.ekushey.org, slanted by 12 degrees. + + * CREDITS: added Solaiman Karim + + * AUTHORS: added Solaiman Karim + +2005-11-30 Primoz Peterlin + + * sfd/FreeSerif.sfd: merged with the Rachana Normal. + + * AUTHORS: added K.H. Hussain and R. Chitrajan + + * CREDITS: added K.H. Hussain and R. Chitrajan + +2005-11-23 Primoz Peterlin + + * sfd/FreeSans.sfd - cleaned some background images. + + * sfd/FreeSans.sfd - added U+01A0-01A1, U+01AF-01B0, U+026E, + U+028F, U+0291, U+02A3-02A5, U+031B. Modified U+0198. + +2005-11-22 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+2504-250B. + + * sfd/FreeSans.sfd - added U+2591-25A1, U+25A3-25A5, U+25AA, U+25AC. + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - added U+0263. + +2005-11-21 Primoz Peterlin + + * sfd/FreeMono.sfd - corrected positions of some Greek diacritics + on page 0x1F. + + * sfd/FreeMonoOblique.sfd - working on bringing it in sync with + FreeMono.sfd. + + * sfd/FreeSerifBoldItalic.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Added a couple of + glyphs in the IPA Extensions region. + + * sfd/FreeSansBold.sfd - added U+0574, U+0576. Removed overlaps. + +2005-11-20 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+02AA-02AC, U+02B0-02B2. + +2005-11-19 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+01B7-01B9, U+0196, U+019A, U+01C3, + U+0224-0225, U+025E, U+029A, U+2422. Changed U+0184-0185, U+0192, + U+01B4, U+0282, U+0284. + +2005-11-18 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+02EE, U+207F. + + * sfd/FreeSans.sfd - started Box Drawing area. + +2005-11-17 Primoz Peterlin + + * sfd/FreeSerifBold.sfd - added glyphs from the Omega project to + Latin Extended-B, IPA Extensions and Greek ranges. + + * sfd/FreeSerifBoldItalic.sfd - added glyphs from the Omega + project to Latin Extended-B, IPA Extensions and Greek ranges. + + * sfd/FreeSerifItalic.sfd - added glyphs from the Omega + project to Latin Extended-B, IPA Extensions and Greek ranges. + + * sfd/FreeSerifItalic.sfd - added U+018B, U+025C, U+0265, U+026F, + U+0279, U+0287, U+028C-028E, U+029E. + + * sfd/FreeSerifBoldItalic.sfd - added U+1EDA-1EE3, U+1EE8-1EF1, + U+2190-219B, U+219E-21A8, U+21B9-21BA, U+21C4-21CA, U+21E4-21E5, + U+2669-266F. MES-1 compliant. + + * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - added U+FFFD. + + * sfd/FreeSerif.sfd - removed overlaps in Latin Extended-B and IPA + Extensions ranges. + +2005-11-16 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. + + * sfd/papers/eurotex2003/freefont.tex, + sfd/papers/eurotex2003/freefont.bib - Revised version, sent back + by Karl Berry on 20050110, that should match the one published in + TUGboat. + + * sfd/FreeSerifItalic.sfd - started added accent anchors. Added a + handful of Greek letters from Omega font collection. + + * sfd/FreeSerif.sfd - added a handful of letters in the Latin + Extended-B and IPA Extension ranges from the Omega font collection. + +2005-11-16 Denis Jacquerye + + * sfd/FreeSerif.sfd - moved U+0263 to U+0264; added U+0263 + + * sfd/FreeSerifItalic.sfd - fixe U+01EE; added U+01B7-U+01B9 + +2005-11-16 Primoz Peterlin + + * sfd/FreeSans.sfd - Made small Greek letters the same height as + Latin and Cyrillic ones and replaced them with references, where + applicable. + + * sfd/FreeSerif.sfd - replaced Greek letters with references, + where applicable. Added U+03D7, U+03F0-03F2. + + * sfd/FreeSerif.sfd - added U+0255, U+025A, U+025D, U+025F, + U+0262-0263, U+026B-026C, U+0274, U+0276-0277, U+028F, U+0291, + U+029D. + + * sfd/FreeMonoOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Added U+F6BE. + + * sfd/FreeSansOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. + + * sfd/FreeSans.sfd - changed U+01A5. + +2005-11-16 Primoz Peterlin + + * sfd/FreeSans.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. Replaced accented glyphs in + the Latin-1 and Latin Extended-A areas with references. Made + capital Greek letters the same height as Latin and Cyrillic ones + and replaced them with references, where applicable. + +2005-11-15 Denis Jacquerye + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSansOblique.sfd - fixed + U+026A, it was a dotlessi and therefore like U+0069 when + accented. + +2005-11-15 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - corrected Greek tonos (slanted instead of + a vertical line). + + * sfd/FreeMonoBoldOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Replaced accented + glyphs in the Latin-1 and Latin Extended-A areas with references. + +2005-11-14 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Added 2005 in copyright info. + + * sfd/FreeSansBoldOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Replaced accented + glyphs in the Latin-1 area with references. + + * sfd/FreeSansBoldOblique.sfd - added U+0180, U+0184, U+0185, + U+0195, U+01A0-01A2, U+01AF-01B0, U+025E, U+026E, U+0292, + U+0294-0296, U+029A, U+02A1, U+2126-2127, U+2190-219B, + U+219E-21A8, U+21C4-21CA, U+2669-266F. MES-1 compliant. + + * sfd/FreeMono.sfd - Replaced accented glyphs in the Greek and + Cyrillic areas with references. + + * sfd/FreeMonoBold.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. Replaced accented glyphs in + the Latin-1 and Latin Extended-A areas with references. + +2005-11-14 Primoz Peterlin + + * sfd/FreeSerif.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. + + * sfd/FreeSansBold.sfd - added U+219A, U+219B, U+2669-266F. + + * sfd/FreeSerifBold.sfd - added U+2669-266F. + +2005-11-12 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+0180, U+0181, U+0183, U+0187, + U+0188, U+018A, U+018C, U+018D, U+0193, U+019C, U+01A0, U+01A1, + U+01AC, U+01AF, U+01B0, U+025C, U+0260, U+026E, U+0277, U+0281, + U+0284. + +2005-11-11 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+195, U+1A6, U+025E, U+026E, + U+029A, U+0313, U+0314, U+0342, U+0344, U+0345. Started adding + accent anchors. + + * sfd/FreeMono.sfd - applied the sequence for reducing redundant + points, suggested by Werner Lemberg. + + * sfd/FreeMono.sfd - corrected Greek letters (using tonos instead + of a vertical line). Added U+026E, U+F6BE. Accented characters in + Latin 1, Latin Extended A and partly Latin Extended B replaced by + references. + + * sfd/FreeSerifBold.sfd - applied the sequence for reducing + redundant points, suggested by Werner Lemberg. Added U+01A5, + U+02A0, U+2190-219B, U+219E-21A8, U+21B8, U+21B9, U+21C4-21CA, + U+21E4, U+21E5. + +2005-11-10 Primoz Peterlin + + * sfd/FreeSansOblique - changed U+0192, U+01A5; added U+01C0-01C3. + + * sfd/FreeSansBold.sfd - replaced glyphs with references in the + Cyrillic area. Removed U+04A8, U+04A9. Added U+04C5, U+04C6, + U+04C9, U+04CA, U+04CD, U+04CE, U+0535, U+053F, U+0546, U+0565, + U+0584, U+0587, U+0589. + +2005-11-10 Denis Jacquerye + + * sfd/FreeSans.sfd - added U+028A-U+028B + + * sfd/FreeSansOblique - added U+028A-U+028B, U+0276, + U+0292, U+0294-U+0296, U+0298-U+0299 and U+029B; fixed some + other glyphs + +2005-11-10 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+01A6. Simplified outlines in the + ASCII range. + + * sfd/FreeSansBold.sfd - added U+00A0, U+00AD, U+0531, U+2126, + U+2190-2199, U+219E-21A8, U+21C4-21CA. + + * sfd/FreeSansBold.sfd - applied the sequence for reducing + redundant points, suggested by Werner Lemberg. Added automatically + constructed accented characters in page 0x1E. + +2005-11-09 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+0183, U+018C. + + * sfd/FreeSans.sfd - added U+1EA2, U+1EA3, U+1EA8, U+1EA9, U+1EB2, + U+1EB3, U+1EBA, U+1EBB, U+1EC2, U+1EC3, U+1EC8, U+1EC9, U+1ECE, + U+1ECF, U+1ED4, U+1ED5, U+1EE6, U+1EE7, U+1EF6, U+1EF7, U+220A, + U+220B, U+220D, U+2272, U+2273, U+2282, U+2283. + + * sfd/FreeSerifItalic.sfd - changed U+03D5. + + * sfd/FreeSerifBoldItalic.sfd - changed U+03C6; added U+2070, + U+2075-2079, U+207F, U+2080, U+2085-2089, U+2155-217F. + + * sfd/FreeSerif.sfd - added U+0184, U+0185, U+018D, U+0195, + U+0197, U+019A, U+019B, U+01A0, U+01A1, U+01AC, U+01B5, U+01B6, + U+01C0, U+01C1, U+01C3, U+01F6, U+0294-0296, U+1E9A, U+1EDA-1EE3, + U+1EE8-1EF1. + +2005-11-07 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+0562, U+056D. U+0575. + + * sfd/FreeMono.sfd - added U+0589. + +2005-11-06 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+0278, U+03D5, U+2248. Corrected + U+2071, U+222E, U+2242, U+2243 in response to bug reports + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276118 + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276120 + + * sfd/FreeMono.sfd - added U+2227, U+2228, U+2262. Corrected + U+2299-229D in response to bug report + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276121 + + * sfd/FreeMonoBold.sfd - added U+2010, U+2012 in response to bug + report http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=289032 + Swapped U+03C6 (Greek small letter phi) and U+03D5 (Greek phi + symbol) in order to conform to Unicode standard. Simplified glyph + shapes in ASCII range. Started adding "above" and "below" anchors. + +2005-11-05 Primoz Peterlin + + * sfd/FreeSerif.sfd - accented letters in Latin Extended-A + replaced by references wherever possible. + + * sfd/FreeSerif.sfd - added U+0180, U+0181, U+0187, U+0188, + U+018A, U+0193, U+019C, U+01A4, U+01A5, U+01A7, U+01A8, U+01AF, + U+01B0, U+026E, U+0270, U+0278, U+0280, U+0281, U+028B, U+0299, + U+029C, U+029F. + +2005-11-03 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+0180, U+0184, U+0185, U+0192, + U+019B, U+01A0-01A2, U+01AF, U+01B0, U+01EE, U+01EF, U+0292, + U+0294-0296, U+02A1, U+0532, U+054C, U+057C, U+222B. Changed + U+014B, U+01A5, U+01B4, U+03BB. + + * sfd/FreeSans.sfd - added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, + U+04CE. + + * sfd/FreeSansBold.sfd - cleaner Arabic outlines. Added U+01E4, + U+01E5. + +2005-11-02 Primoz Peterlin + + * sfd/FreeSansBold.sfd - started Armenian; added U+0538, U+0542, + U+0544, U+0548, U+054D, U+054F, U+0550, U+0553, U+0555, U+0561, + U+0563, U+0564, U+0566, U+0568 U+056B, U+056F, U+0570, U+0572, + U+0578, U+057A, U+057D-057F, U+0580, U+0581, U+0583, U+0585. + + * sfd/FreeMono.sfd - swapped U+03C6 (Greek small letter phi) and + U+03D5 (Greek phi symbol) in order to conform to Unicode standard. + Added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, U+04CE. + +2005-11-01 Primoz Peterlin + + * sfd/FreeSansBold.sfd - modified U+019C. + + * sfd/FreeSansBoldOblique.sfd - added U+00A0, U+00AD, U+019C, + U+01B7, U+01B8, U+0275, U+0278, U+0298, U+2012, U+2015, + U+2070-207F, U+2080-208E, U+2153-217F, U+2213, U+2215. + +2005-10-31 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+0199, U+01AB, U+0265, U+0282, + U+0288, U+028C-028E, U+0290, U+029E, U+02A0. + +2005-10-28 Primoz Peterlin + + * sfd/FreeSerifBold.sfd - added U+019E, U+01AB, U+01AD, U+01B1, + U+0256, U+025F, U+0265, U+0269, U+026F, U+0270, U+0279-027F, + U+0282, U+0287, U+0288, U+028C-028E, U+0290. + + * sfd/FreeSerifBold.sfd - added U+2070, U+2075-2079, U+2080, + U+2085-2089, U+2153-215E, U+2113-2115, U+2119. + + * sfd/FreeSerifBold.sfd - added U+0199, U+019B, U+01B8, U+01B9, + U+01BE, U+01C0, U+0262, U+0274, U+0278, U+0280, U+028F, U+0298, + U+0299, U+029C, U+029E, U+029F, U+2012, U+2015, U+2016, U+2129, + U+2217. + +2005-10-27 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+018D, U+0194, U+019B, U+019C, U+01B5, + U+01B6, U+0295, U+0296, U+029B, U+02A2, U+0472, U+0473, U+2114, + U+2119. + + * sfd/FreeSerifItalic.sfd - minor cleanup in the superscript range + (U+2070-2079). + + * sfd/FreeSansBold.sfd - added subscripts and superscripts + (U+2070-208F), completed fractions (U+2152-215F) and Roman + numerals (U+2160-217F). + + * sfd/FreeSerifBold.sfd - added U+018B, U+018E, U+018F, U+0191, + U+019D, U+01A7, U+01A8, U+01AE, U+0253, U+0266, U+0267, U+026A, + U+0271-0273, U+0283, U+0285. + +2005-10-26 Primoz Peterlin + + * sfd/FreeSans.sfd - added "above" anchors to selected Cyrillic + characters. Added U+0294, U+02A1. + + * sfd/FreeMono.sfd - added U+2011, U+2012, U+203B, U+204A, U+2071, + U+2129, U+2232, U+2233. Changed and/or corrected U+2106, U+211E, + U+2126, U+2127, U+2153-215F, U+2202. + + * sfd/FreeMono.sfd - a try to imitate Denis' work on adding + anchors by adding "above" anchor to a couple of basic Latin + characters. + + * sfd/FreeSansBold.sfd - added U+0278, U+0298. Cleaned up outlines + of most Greek letters. + + * sfd/FreeSansBold.sfd - Added U+2010-2012, U+2015, U+2032, + U+203C, U+2047-2049. + + * sfd/FreeSans.sfd - Added U+01C0-01C2, U+0276, U+0292, + U+0298. Changed U+0251, U+0294, U+02A1. + +2005-10-25 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd - added U+00A0, U+00AD, U+2010-2012, + U+2015, U+2126, U+2127, U+2153-215E, U+2160-217F, U+2190-2193, + U+2669-266F. FreeSerifItalic is now MES-1 compliant. + + * sfd/FreeSerif.sfd - added U+0191, U+019D, U+01AE, U+027E, + U+027F, U+0283, U+0285. + + * sfd/FreeSerif.sfd - added U+019E, U+01AD, U+01B8, U+01B9, + U+0253, U+0256, U+0257, U+025C, U+0260, U+0266, U+0267, U+0269, + U+026D, U+0271-0273, U+0279-027D. + + * sfd/FreeSerifBoldItalic.sfd - added U+00A0, U+00AD, U+2010-2012, + U+2015, U+2032-2034, U+203C, U+2047-204A, U+2074, U+2081-2084, + U+2126, U+2153, U+2154, U+215F, U+2215. Corrected positions of + diacritics on U+0200-0217. + + * sfd/FreeSansOblique.sfd, sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBoldOblique.sfd, + sfd/FreeMonoBold.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd sfd/FreeSerifBoldItalic.sfd - brought in + sync with Valek Filipov's urw-fonts-1.0.7pre41. + + * sfd/FreeSansOblique.sfd - added U+00A0, U+2011-2012, U+2015, + U+2070, U+2071, U+2074-2079, U+2080-2089, U+2126, U+2153-215F, + U+2190-2195, U+2215, U+266A. FreeSansOblique is now MES-1 + compliant. + +2005-10-24 Denis Jacquerye + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - added + ccmp for i and j to be substituted with dotless i or j when + followed by above diacritic + +2005-10-24 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+2011, U+2012, U+2015. FreeSans is now + MES-1 conformant. + +2005-10-23 Denis Jacquerye + + * sfd/FreeSans.sfd - added above, below, abovemk and belowmk + anchors for diacritics placement to many Basic Latin characters, + some Latin Extented A and B, and some IPA characters; fixed a + couple of precomposed characters to have diacritics at the same + height as similar characters. + +2005-10-21 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+02B9, U+02BA, U+02CD, U+2017, + U+2036, U+2037, U+203C, U+203E, U+2047-204A. + +2005-10-20 Primoz Peterlin + + * sfd/FreeSerifBold.sfd - added U+0182, U+0189, U+0192, U+019F, + U+01A9, U+01B7, U+01C4-01CC, U+01E0-1E2, U+01F0-01F3, U+F6BE. + Corrected position of diacritics on U+0200-0217. + + * sfd/FreeSerif.sfd - added U+00A0, U+00AD, U+0182, U+0189, + U+018B, U+018E, U+018F, U+0192, U+019F, U+01A9, U+01B1, U+01B7, + U+01DD, U+2010-2013, U+2015. FreeSerif is now MES-1 conformant. + +2005-10-19 Denis Jacquerye + + * sfd/FreeSerif.sfd - added U+0268, U+026A, U+0289, U+0292; and + anchor "above" to more base glyphs. + + * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBoldItalic.sfd - added U+0250-0252, U+0258-0259, + U+0261, U+0268, U+026A, U+0279, U+0289 + + * sfd/FreeSerifBold.sfd - added anchor "above" to marks + U+0300-0314, and to base glyphs (vowels). + +2005-10-18 Denis Jacquerye + + * sfd/FreeSerif.sfd - added anchor "above" to marks U+0300-0314, + and bases vowel of the U+0041-007A range, U+00E6, U+0186, U+0190, + U+0254 and U+025B; fixed Latin-1 Supplement block accented glyphs + to use references. + +2005-10-17 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+01B7, U+01B8, U+0275. + +2005-10-16 Denis Jacquerye + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added some Latin + Extended-B African letters: U+0181, U+018A, U+0197-0198, U+01A4, + U+01AC, U+01B1, U+01B3-01B4; + + * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added Latin + Extended-B U+0187, 018E-018F, U+0191, U+0193, U+0197-0199, + U+019D-019F, U+01AB-01AE; correcting width of non-space + Combining Diacrtical Marks; added more glyphs to IPA Extensions + to match non Bold + + * sfd/FreeSansBoldOblique.sfd - added many accented glyphs to + Latin Extended-B + +2005-10-15 Denis Jacquerye + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added IPA Extensions + U+0262,U+0274,U+0280-0281, U+0299, U+029F, and Spacing Modifier + Letters U+02C9-02CB; fixed U+0287,029E height to baseline; added + stroke to U+0268 + + * sfd/FreeSansOblique.sfd - fixed skew on U+027F + + * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added to Latin + Extended-B U+01A7-01A8, IPA Extensions U+0251-0253, U+0256-0257, + U+0261, U+0265-026A, U+026F-0273, U+0289, U+028C-028E + + * sfd/FreeSansBoldOblique.sfd - added to Latin extended-B U+0189, + U+01A8, U+01B1, U+0283, U+02C9 and Spacing Modifiers U+02C9-02CB + +2005-10-14 Primoz Peterlin + + * sfd/FreeSansBold.sfd - Added a couple of composite glyphs, + mostly in the IPA and Latin Extended B ranges. + +2005-10-13 Denis Jacquerye + + * FreeSans.sfd - removed overlap and simplified U+0187, 0191, + 0193, 01A5, 01AE, 0260, 0271, 0272, 0273, 027B; fixed diacritics + placement on U+0200-0217; fixed glyph for U+0283 to correct esh + without stroke; added U+025F and fixed U+025F from it; fixed + height of glyph at U+0285; arranged U+027E,027F to make more + distinguishable from U+0072. + + * FreeSansOblique.sfd - added the corrected or new glyphs from + FreeSans; diacritics on U+200-0217 will need height readjustements. + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd - added U+0186, 0190, + 0250, 0254, 0258, 0259, 025B, 025C + +2005-10-13 Primoz Peterlin + + * sfd/FreeSerif.sfd - Minor changes: U+22A2, U+22A3, U+22A6, U+23AE. + Added U+0250, U+0251, U+0258, U+0259, U+0275. + + * sfd/FreeSerifItalic.sfd - Added glyphs U+222B-U+222F, U+2320, + U+2321. Fixed diacritics on U+0200-U+0217. + +2005-10-12 Denis Jacquerye + + * sfd/FreeSerif.sfd - Corrected diacritics position on + U+01D5-01D9,01DB,01EA-01ED,0200-0217 and U+022A. + + * sfd/FreeSerif.sfd, sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBoldItalic.sfd - added U+0186,0190,0254 and U+025B. + +2005-10-11 Primoz Peterlin + + * sfd/FreeSerif.sfd - Fixed bug #13399 (glyphs for U+0360 and + U+0361 were swapped). + + * sfd/FreeSerif.sfd - Attempt to correct bug #13370: INTEGRAL + EXTENSION does not align with TOP/BOTTOM HALF INTEGRAL; added + glyph U+23AE. + +2005-05-16 Primoz Peterlin + + * sfd/FreeMono.sfd - Corrected shapes for Cross of Lorraine and + Cross of Jerusalem. + +2005-04-07 Primoz Peterlin + + * sfd/FreeSansBold.sfd - Added some combining accents, just to + test the a version of FontForge. + +2003-12-05 Primoz Peterlin + + * sfd/FreeMono.sfd - Some composite Latin characters rebuilt, as + they had accents 600 points to the left due to changes on October + 2. Some other minor changes in the mathematics area. + +2003-10-08 Primoz Peterlin + + * sfd/FreeMonoOblique.sfd, sfd/FreeSerifBoldItalic.sfd, + FreeSerifItalic.sfd - applied Josef Segur's corrections from + Oct. 5. + +2003-10-02 Primoz Peterlin + + * sfd/FreeSerif.sfd - Abbas Izad's contributed Arabic/Farsi + characters added. + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Combining characters (U+0300 - + U+036F) moved left, so that they have negative horizontal values + and zero advance width. + +2003-09-15 Primoz Peterlin + + * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd - Started working + on super- and subscripts. + +2003-09-12 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSerif.sfd - Added some missing + Hiragana and Katakana characters. + + * sfd/FreeSansBold.sfd - Cleared background characters in Latin + Extended-A. Added some automatically constructed characters in + Latin Extended-B. Started with superscripts and subscripts. + + * sfd/FreeSans.sfd - Subscript numerals (U+2080-U+2089) completed. + +2003-05-19 Primoz Peterlin + + * sfd/FreeSerif.sfd - Thai characters po pla and bo baimai + swapped; Thai character fongman corrected; all courtesy Theppitak + Karoonboonyanan. + +2003-05-17 Panayotis Katsaloulis + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - Full support + of all ancient greek glyphs + +2003-05-15 Primoz Peterlin + + * tools/KerningNumerals.pl - A Perl script for moving kerning + information from ASCII numerals (U+0030...) to characters in the + Adobe corporate use area (U+F6xx). + + * sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBoldOblique.sfd - Created kerned numerals in the Adobe + corporate use area (U+F6xx) and moved kerning information from + ASCII numerals to the kerned numerals. + +2003-05-14 Primoz Peterlin + + * sfd/FreeSans.sfd - First approximation of super- and subscript + numerals and vulgar fractions. + + * sfd/FreeSerif.sfd - Super- and subscript numerals complete, + vulgar fractions completed and redone as references rather than + outlines. + +2003-05-12 Primoz Peterlin + + * sfd/FreeSerif.sfd - Clean-up of the Cyrillic letters added on + March 27; super- and subscripts, vulgar fractions. + +2003-05-09 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - Added a couple of characters to + the Latin Extended-B area and the IPA extensions area. + +2003-05-08 Primoz Peterlin + + * sfd/FreeSerifBoldItalic.sfd - Added a couple of characters to + the Latin Extended-B area. + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - ASCII + numerals now monospaced; kerned numerals moved to Adobe corporate + use area + (U+F6xx). + +2003-05-07 Primoz Peterlin + + * sfd/FreeSerif.sfd - Roman numerals now more complete. + + * sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - Accented + characters added in the Latin Extended-B area. + + * sfd/FreeSans.sfd - Greek accents added in the Greek Extended + area, characters added in the Latin Extended-B area, Roman + numerals added. + + * sfd/FreeMonoOblique.sfd - Kerning pairs removed (what were they + doing in a monospaced font, anyway?). + + * sfd/FreeMonoBoldOblique.sfd - Additions in Latin Extended-B and + Basic Greek. + + * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBoldOblique.sfd - Major cleanup (fixed widths, open + paths, path directions (clockwise/counter-clockwise), points + rounded to integer values; outlines simplified etc.) + +2003-05-06 Primoz Peterlin + + * tools/OS2UnicodeRange - A simple script to display OS/2 Unicode + range table in TrueType fonts. + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - ASCII numerals now + monospaced; kerned numerals moved to Adobe corporate use area + (U+F6xx). FreeSans is done, FreeSansBold half-way. + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Added 2003 in copyright info. + +2003-03-27 Primoz Peterlin + + * sfd/FreeSerif.sfd - Cyrillic and Cyrillic Supplement blocks + brought to conformance with Unicode 3.2, courtesy Daniel Shurovich + Chirkov. + +2003-03-19 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - somewhat wider + germandbls (U+00DF), due to complaints by Walter Schmidt. + +2003-03-18 Primoz Peterlin + + * sfd/FreeSans.sfd - Added Sinhala glyphs from the Tipitaka + project , recoded to Unicode by Noah Levitt. + +2003-02-19 Primoz Peterlin + + * sfd/FreeSans.sfd - Minor changes on mathematical operators. + +2003-02-18 Primoz Peterlin + + * sfd/FreeMono.sfd - minor cleanup of glyph backgrounds; changed + integral signs (U+222B - U+2230) + +2003-02-05 Primoz Peterlin + + * sfd/FreeSans.sfd - added a couple of glyphs in the IPA and + African Latin ranges. + +2003-01-30 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd - Corrected Maltese Hbar (U+0126) + and/or hbar (U+0127). + +2003-01-28 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd - Corrected Maltese hbar (U+0127). + +2002-12-18 Primoz Peterlin + + * tools/ConvertFont - PfaEdit script for converting SFD files to + TrueType fonts. + + * sfd/FreeSans.sfd - Added Tamil and Kannada glyphs from the + Akruti Indic fonts. + +2002-12-17 Primoz Peterlin + + * sfd/FreeSans.sfd - Added Devanagari and Gujarati glyphs from the + Akruti Indic fonts. + + * www/index.html - Added information on Rogier van Dalen's tools. + + * AUTHORS - Added M.S. Sridhar. + + * CREDITS - Correct spelling of Culmus project. Added M.S. Sridhar. + +2002-12-06 Primoz Peterlin + + * sfd/FreeMono.sfd - Added Braille glyphs, courtesy Vyacheslav + Dikonov. + + * sfd/FreeSans.sfd - Added Unicode Syriac glyphs, courtesy + Vyacheslav Dikonov. + +2002-10-11 Primoz Peterlin + + * www/index.html - Added information on the availability of the + Debian GNU/Linux package. + + * sfd/FreeSerif.sfd, sfd/FreeSans.sfd - added some kern pairs + beyond Latin-1 area. + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - re-introduced + all the emtpy glyph slots (changes from Sep 23 made PfaEdit + crash). + +2002-09-23 Primoz Peterlin + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - imported + kerning information from the URW++ AFM files + +2002-09-11 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoOblique.sfd - updated Hebrew parts to comply with + Culmus v0.6. + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd - Added Danilo Segan's Serbian Cyrillic + glyphs; updated Hebrew parts to comply with Culmus v0.6. + +2002-09-09 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd - Updated Cyrillic part to match + Filippov's 1.0.7pre14 + + * sfd/FreeSansOblique.sfd - added Sam Stepanyan's Armenian glyphs + from FreeSans (skewed for 12 degrees). + +2002-09-06 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd - Added Maxim + Iorsh's Hebrew characters. + +2002-08-29 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd - Added Maxim + Iorsh's Hebrew characters. + + * AUTHORS, CREDITS - Added Maxim Iorsh as author. + +2002-08-28 Primoz Peterlin + + * www/index.html - Added information of Microsoft's withdrawal of + freely available Unicode TrueType fonts + + * www/resources.html - Added link to Maxim Iorsh's Culmus project. + +2002-07-26 Primoz Peterlin + + * sfd/FreeMono.sfd - Added a couple of characters (Arrows area). + +2002-06-11 Primoz Peterlin + + * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning + perispomeni in Greek politoniko. + +2002-05-23 Primoz Peterlin + + * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning + psili in Greek politoniko. Also added two working variants of + chars in the IPA range. + +2002-05-15 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifBold.sfd - Deleted explicit ".notdef" character with + no contours. + +2002-05-14 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - The new version of PfaEdit saves + correctly formed Panose and LineGap lines. + + * sfd/FreeSansBoldOblique.sfd - Filled-in the missing TTFWidth and + TTFWeight values. + +2002-05-09 Primoz Peterlin + + * sfd/FreeSans.sfd - Added diacritics to the Spacing Modifier + Letters and Combining Diacritical Marks areas. Added composed + glyphs to the Latin Extended-B area. + +2002-05-07 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Updated Panose information with data + provided by Josef W. Segur. Updated TTF headers with English and + Slovenian text. + +2002-04-30 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - Working on Greek small letters. Several + minor changes (lower carons etc.) + +2002-04-29 Primoz Peterlin + + * FreeMonoBoldOblique.sfd - Started adding Greek. + + * sfd/FreeMonoBold.sfd - Added glyphs in the Geometrical Shapes + and Miscellaneous Symbols area. Harmonizing Greek with Latin. Done + with capitals. + + * sfd/FreeMono.sfd - Deleted the explicit .notdef character. Added + one glyph to the Geometrical Shapes area, which is now completed; + added three glyphs to the Miscellaneous Symbols area. Harmonizing + Greek with Latin. Done with the capitals. + +2002-04-26 Primoz Peterlin + + * sfd/FreeSans.sfd - Adjusted accent positions on several glyphs + in the Latin Extended-A area. + +2002-04-25 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - Box Drawing area completed. Added a + couple of glyphs in the Geometrical Shapes area. + + * sfd/FreeMono.sfd - Small corrections in the Box Drawing area. + +2002-04-24 Primoz Peterlin + + * sfd/FreeMono.sfd - Box Drawing area completed. + +2002-04-23 Primoz Peterlin + + * tools/WGL4.lst - corrected. + + * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Box Drawing + area. + +2002-04-22 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Latin + Extended-B and Greek. + +2002-04-19 Primoz Peterlin + + * sfd/FreeSerif.sfd - Somewhat cleaner chess figures. + + * tools/MES-2.txt, tools/MES-2.lst - Corrected list (it is not + 203C-203E, it is 203C and 203E). + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Changed "Family Name" from Free to + FreeSerif, FreeSans and FreeMono, as appropriate. Changed Font + Modifiers from MonoBold etc. to Bold, Italic, Oblique, BoldOblique + and BoldItalic. + +2002-04-18 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd - Corrected metrics; now all character + widths are set to 600. + +2002-04-17 Primoz Peterlin + + * sfd/FreeSerif.sfd - Corrected glyphs in the Box Drawing area and + Block Elements area, which should extend through the ascender *and + descender* height. + + * sfd/FreeMonoBold.sfd - Continued working on harmonizing Greek + letters with Latin and Cyrillic. + + * sfd/FreeMonoBold.sfd - Added some box drawing characters. + +2002-04-16 Primoz Peterlin + + * www/design-notes.html - Updated notes on stroke width for + symbols in Free Mono Bold. + + * sfd/FreeMono.sfd - Added a handful of characters in the + Miscellaneous Symbols area. + + * sfd/FreeMonoBoldOblique.sfd - Added subscripts, superscripts and + vulgar fractions. + + * sfd/FreeMonoBold.sfd - Started harmonizing Greek letters with + Latin and Cyrillic. + + * sfd/FreeMonoBold.sfd - Added subscripts, superscripts and vulgar + fractions. + +2002-04-15 Primoz Peterlin + + * www/design-notes.html - Updated notes on super-/subscripts in + Free Mono Bold. Separate subsections for Free Mono regular and + Free Mono Bold. + +2002-04-12 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added Ethiopian glyphs, converted from the + Metafont sources from TGI, Universität Hamburg (authors Berhanu + Beyene, Prof. Dr. Manfred Kudlek, Olaf Kummer, and Jochen + Metzinger) using Szabo's TeXtrace and retouched using + PfaEdit. Ethiopian metafonts are released under GNU GPL, + . + + * sfd/FreeMonoBold.sfd - Added 40 characters, mostly in the Latin + Extended-B and IPA Extensions areas. + +2002-04-11 Primoz Peterlin + + * sfd/FreeMono.sfd - Added a handful of characters in the Latin + Extended-B, IPA Extensions, Currency Symbols and Miscellaneous + Symbols areas. + +2002-04-09 Primoz Peterlin + + * sfd/FreeMono.sfd - Correcting accent positioning in the Extended + Greek area; adding a couple of characters here and there. Still 20 + characters short of MES-2 conformance. + +2002-04-08 Primoz Peterlin + + * sfd/FreeMono.sfd - Added some characters in the Arrows area; + more or less completed Extended Greek area (accents still need to + be fine-tuned). + +2002-04-05 Primoz Peterlin + + * sfd/FreeMono.sfd - Modern non-Russian Cyrilic mostly completed. + + * sfd/FreeMonoOblique.sfd - Synchronized with FreeMono. + + * sfd/FreeSerif.sfd - Added Thomas Ridgeway's Tamil characters + (converted from Metafont and edited somehwat). + +2002-04-04 Primoz Peterlin + + * sfd/FreeMonoOblique.sfd - Armenian letters added. + + * sfd/FreeMonoBold.sfd - Serbian Cyrillic letters dje, tshe, lje + and nje corrected. + + * sfd/FreeMono.sfd - Serbian Cyrillic letters dje and tshe + corrected. Some other non-Russian Cyrillic letters modified and + "welded together". + +2002-04-03 Primoz Peterlin + + * sfd/FreeMono.sfd - Added more or less complete Armenian + area. The glyphs are a tidied-up version based on the Armenian + Courier on the . Now we have + 1673 characters. + +2002-03-28 Primoz Peterlin + + * sfd/FreeMono.sfd - Added some mathematical symbols. + +2002-03-26 Primoz Peterlin + + * sfd/FreeSans.sfd - took H.S. Pannu's Gurmukhi from FreeSerif. It + actually fits to FreeSans much better. It seems I'll have to look + for another Gurmukhi font with modulated stroke for FreeSerif. + + * sfd/FreeSerifItalic.sfd - replaced existing Hebrew glyphs by + those from FreeSerif (slanted for 15.5 degrees). + + * sfd/FreeSerif.sfd - Added dotted Hebrew letters. Changed barred H. + + * sfd/FreeMono.sfd - Completed vulgar fractions; minor changes in + Greek; added some mathematical operators. + + * sfd/FreeMonoBold.sfd - added 12 characters to Latin Extended-B + and IPA Extensions areas (total 984). + +2002-03-25 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - started adding Latin Extended-B and IPA + Extensions. + + * sfd/FreeMono.sfd - Minor cosmetic changes; cleaning up Greek + (removing redundant control points), added some non-European + Cyrillic glyphs as a test. + +2002-03-22 Primoz Peterlin + + * sfd/FreeMono.sfd - Some minor modifications; letters in Latin + Extended-B area "welded" together. + +2002-03-20 Primoz Peterlin + + * www/index.html - finally linked the resources and design notes + pages. + + * www/design-notes.html - added scaling information for super- and + subscript numerals in FreeMono. + +2002-03-19 Primoz Peterlin + + * sfd/FreeMono.sfd - the Latin Extended-B and IPA Extension area + characters moved from FreeMono and skewed for 12 degrees. + +2002-03-18 Primoz Peterlin + + * sfd/FreeMono.sfd - added a dozen or two of new characters, in + particular in the Latin Extended-B and IPA Extension area. + +2002-03-15 Primoz Peterlin + + * sfd/FreeMono.sfd - added a dozen of two of new characters, in + particular in the IPA Extension area. + + * www/design-notes.html - Corrected data for x-height in FreeMono; + information on constructing small caps. + +2002-03-14 Primoz Peterlin + + * sfd/FreeMono.sfd - added three smiley characters to the + Miscallaneous Symbols area. + +2002-03-10 Primoz Peterlin + + * sfd/FreeSerif.sfd - Anshuman Pandey has only converted Gurmukhi + from TrueType to Metafont; the original author of Gurkmukhi font + is Hardip Singh Pannu . + Got the permission from him to include the Gurmukhi glyph set. + +2002-03-08 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added some more glyphs in the Mathematical + Symbols area to a total number of 3374. + +2002-03-06 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added a basic Gurmukhi set. + + * www/design-notes.html - started a page on design notes + + * sfd/FreeMono.sfd - realized that glyphs in the Box Drawing area + and Block Elements area should extend through the ascender *and + descender* height, and corrected it. + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd - added some musical + glyphs, linking "no-break space" to space, "soft hyphen" to + hyphen-minus etc. + +2002-03-05 Primoz Peterlin + + * tools/WGL4.lst - Added Windows Glyph List 4.0 + + * tools/LigatureList.pl - Wrote a Perl script, which lists the + GSUB list (ligature list) of a OpenType font. + + * sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd, + sfd/FreeSerifItalic.sfd - auxilliary Hebrew glyphs added. They are + too light compared with Latin and will be substituted with better + ones. + +2002-03-04 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added some more glyphs to the Mathematical + Operators area (page 0x22). + + * sfd/FreeSerif.sfd - Incomplete and fragmentary support for + Devanagari, originating from Harsh Kumar's Shusha fonts was + replaced by Frans Velthuis' Devanagari metafont, now maintained by + Anshuman Pandey and available under + GPL. Until I figure out how to provide glyph substitution table in + OpenType, only the Unicode part is there. + +2002-02-28 Primoz Peterlin + + * ChangeLog file created + + * sfd/FreeSerif.sfd - Added some Telugu glyphs to page 0x0C, + courtesy Prasad A. Chodavarapu + + * sfd/FreeSerif.sfd - Added some glyphs to the Miscellaneous + Symbols page (0x26). + +2002-02-26 Primoz Peterlin + + * mailing lists freefont-announce and freefont-bugs created + +2002-02-25 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added a couple of glyphs in Mathematics + Operators area. + + * sfd/FreeMono.sfd + - Added some more glyphs, in particular in the Mathematical + Operators section. + - Changed FamilyName to Free, FontName to FreeMono, and Full name + to "Free Monospaced". + +2002-02-20 Primoz Peterlin + + * sfd/ directory added containing FreeSerif, FreeSans and FreeMono + families. + + * tools/ directory added containing lists with characters required + for MES (Multilinguag European Subset) compliance. + + * tools/mes-list-expand.pl created - a Perl script for expanding MES + ranges into simple one-char-per-line format + + * tools/CheckConformance.pl created - a Perl script for checking + conformance of a font file with a given coded character set + + * homepage created + +2002-02-19 Primoz Peterlin + + * freefont (Free UCS Scalable Fonts) project approved on + savannah.gnu.org: diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/INSTALL b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/INSTALL new file mode 100755 index 00000000..7c5c6b6c --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/INSTALL @@ -0,0 +1,86 @@ + Installing GNU FreeFont + ======================= + +GNU FreeFont can be used in any modern operating system. + +This document explains how to install FreeFont on some common systems. + +UNIX/GNU/Linux/BSD Systems +-------------------------- + +FreeFont works with any system using the free font rasterizer FreeType +. + +* Debian GNU/Linux + +Users of Debian GNU/Linux system will probably want to use the Debian package, +available from the Debian site, + + , + +or any of its mirrors. + +Install them by issuing the command + apt-get install ttf-freefont + + +* KDE local installation + +Users of KDE can install .ttf files on a per-user basis using the KDE +Control Center module "kcmfontinst", which may appear in the menu as + + Settings -> System Administration -> Font Installer + +This is especially helpful for developers and testers. + + +* Generic X-windows + + 1) Fetch the freefont-ttf.tar.gz package with Free UCS outline fonts + in the TrueType format. + + 2) Unpack TrueType fonts into a suitable directory, + e.g. /usr/local/share/fonts/default/TrueType/ + + 3) If you have chosen any other directory, make sure the directory you + used to install the fonts is listed in the path searched by the X + Font Server by editing the config file in /etc/X11/. + + In some systems, you list the directory in the item "catalogue=" + in the file /etc/X11/fs/config. + + 4) Run ttmkfdir in the directory where you unpacked the fonts. + + +Windows 95/98/NT/2000/XP; Vista +------------------------------- + +Note that in at least Vista, XP and 2000, the OpenType versions perform much +better than, and are recommended over, the TrueType ones. + +* Vista: + 1) From the Start menu, open Control Panels + 2) Drag-n-drop font files onto Fonts control panel + You may get a dialog saying + "Windows needs your permission to continue" + a) Click Continue + +* 95/98/NT: + The font installation is similar to Vista. + + In order to use OpenType, users of Windows 95, 98 and NT 4.0 can + install Adobe's 'Type Manager Light'. It is available for download + without cost from Adobe's web site. + + Otherwise, use the TrueType versions. + +Mac OS X +-------- + +Installing on Mac OS X consists of moving the .ttf files to either + /Library/Fonts/ or ~/Library/Fonts/ +depending on whether they should be available to all users on your system +or just to yourself. + +-------------------------------------------------------------------------- +$Id: INSTALL,v 1.7 2008/12/26 12:33:31 Stevan_White Exp $ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/README b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/README new file mode 100755 index 00000000..414c0ee6 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freefont-20090104/README @@ -0,0 +1,108 @@ +-*-text-*- + GNU FreeFont + +The GNU FreeFont project aims to provide a useful set of free scalable +(i.e., OpenType) fonts covering as much as possible of the ISO 10646/Unicode +UCS (Universal Character Set). + +Statement of Purpose +-------------------- + +The practical reason for putting glyphs together in a single font face is +to conveniently mix symbols and characters from different writing systems, +without having to switch fonts. + +Coverage +-------- + +FreeFont covers the following character sets + +* ISO 8859 parts 1-15 +* CEN MES-3 European Unicode Subset + http://www.evertype.com/standards/iso10646/pdf/cwa13873.pdf +* IBM/Microsoft code pages 437, 850, 852, 1250, 1252 and more +* Microsoft/Adobe Windows Glyph List 4 (WGL4) + http://www.microsoft.com/typography/otspec/WGL4.htm +* KOI8-R and KOI8-RU +* DEC VT100 graphics symbols +* International Phonetic Alphabet +* Arabic, Hebrew, Armenian, Georgian, Ethiopian and Thai alphabets, + including Arabic presentation forms A/B +* mathematical symbols, including the whole TeX repertoire of symbols +* APL symbols + etc. + +Editing +------- + +The free outline font editor, George Williams's FontForge + is used for editing the fonts. + +Design Issues +------------- + +Which font shapes should be made? Historical style terms like Renaissance +or Baroque letterforms cannot be applied beyond Latin/Cyrillic/Greek +scripts to any greater extent than Kufi or Nashki can be applied beyond +Arabic script; "italic" is really only meaningful for Latin letters. + +However, most modern writing systems have typographic formulations for +contrasting uniform and modulated character stroke widths, and have some +history with "oblique", faces. Since the advent of the typewriter, most +have developed a typographic style with uniform-width characters. + +Accordingly, the FreeFont family has one monospaced - FreeMono - and two +proportional faces (one with uniform stroke - FreeSans - and one with +modulated stroke - FreeSerif). + +To make text from different writing systems look good side-by-side, each +FreeFont face is meant to contain characters of similar style and weight. + +Licensing +--------- + +Free UCS scalable fonts is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as published +by the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +The fonts are distributed in the hope that they will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +As a special exception, if you create a document which uses this font, and +embed this font or unaltered portions of this font into the document, this +font does not by itself cause the resulting document to be covered by the +GNU General Public License. This exception does not however invalidate any +other reasons why the document might be covered by the GNU General Public +License. If you modify this font, you may extend this exception to your +version of the font, but you are not obligated to do so. If you do not +wish to do so, delete this exception statement from your version. + + +Files and their suffixes +------------------------ + +The files with .sfd (Spline Font Database) are in FontForge's native format. +Please use these if you plan to modify the font files. + +TrueType fonts for immediate consumption are the files with the .ttf +(TrueType Font) suffix. These are ready to use in Xwindows based +systems using FreeType, on Mac OS, and on older Windows systems. + +OpenType fonts (with suffix .otf) are for use in Windows Vista. +Note that although they can be installed on Linux, but many applications +in Linux still don't support them. + + +-------------------------------------------------------------------------- +Primoz Peterlin, +Steve White + +Free UCS scalable fonts: http://savannah.gnu.org/projects/freefont/ +$Id: README,v 1.6 2008/12/25 12:51:41 Stevan_White Exp $ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemono.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemono.ctg.z new file mode 100755 index 00000000..93b7b3cf Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemono.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemono.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemono.php new file mode 100755 index 00000000..a431765b --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemono.php @@ -0,0 +1,348 @@ +800,'Descent'=>-200,'CapHeight'=>40,'Flags'=>32,'FontBBox'=>'[-793 -200 699 800]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600, +42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600, +52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600, +62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600, +72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600, +82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600, +92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600, +102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600, +112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600, +122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600, +8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600, +8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600, +382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600, +168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600, +178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600, +188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600, +198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600, +208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600, +218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600, +228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600, +238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600, +248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600, +258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600, +268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600, +278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600, +288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600, +298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600, +308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600, +318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600, +328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600, +340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600, +350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600, +362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600, +372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600, +385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600, +395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600, +406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600, +416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600, +426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600, +436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600, +446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600, +456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600, +466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600, +476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600, +486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600, +496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600, +506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600, +516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600, +526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600, +536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,548=>600,549=>600, +550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600, +560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600, +597=>600,598=>600,599=>600,600=>600,601=>600,602=>600,603=>600,604=>600,605=>600,606=>600, +607=>600,608=>600,609=>600,610=>600,611=>600,612=>600,613=>600,614=>600,615=>600,616=>600, +617=>600,618=>600,619=>600,620=>600,621=>600,622=>600,623=>600,624=>600,625=>600,626=>600, +627=>600,628=>600,629=>600,630=>600,631=>600,632=>600,633=>600,634=>600,635=>600,636=>600, +637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,646=>600, +647=>600,648=>600,649=>600,650=>600,651=>600,652=>600,653=>600,654=>600,655=>600,656=>600, +657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600,666=>600, +667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,675=>600,676=>600, +677=>600,678=>600,679=>600,680=>600,681=>600,682=>600,683=>600,684=>600,685=>600,686=>600, +687=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600,696=>600, +697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600,706=>600, +707=>600,708=>600,709=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600,717=>600, +718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600,727=>600, +728=>600,729=>600,730=>600,731=>600,733=>600,734=>600,735=>600,736=>600,737=>600,738=>600, +739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,748=>600, +749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,758=>600, +759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,768=>0, +769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0, +779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0, +789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0, +799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0, +809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0, +819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0, +829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0, +839=>0,840=>0,841=>0,843=>0,844=>0,845=>0,848=>0,849=>0,850=>0,851=>0, +852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,884=>600,885=>600,890=>600, +894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,910=>600, +911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600, +921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600, +932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600, +942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600, +952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600, +962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600, +972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,982=>600, +986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,1026=>600, +1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600, +1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600, +1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600, +1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600, +1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600, +1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600, +1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600, +1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600, +1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600, +1117=>600,1118=>600,1119=>600,1120=>600,1121=>600,1122=>600,1123=>600,1124=>600,1126=>600,1127=>600, +1128=>600,1130=>600,1131=>600,1132=>600,1133=>600,1136=>600,1137=>600,1138=>600,1140=>600,1141=>600, +1142=>600,1143=>600,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1162=>600,1163=>600,1164=>600, +1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,1174=>600, +1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,1184=>600, +1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,1194=>600, +1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,1204=>600, +1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,1214=>600, +1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,1223=>600,1224=>600, +1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,1232=>600,1233=>600,1234=>600, +1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600, +1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600, +1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600, +1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,1272=>600,1273=>600,1296=>600, +1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,1310=>600,1311=>600,1329=>600, +1330=>600,1331=>600,1332=>600,1333=>600,1334=>600,1335=>600,1336=>600,1337=>600,1338=>600,1339=>600, +1340=>600,1341=>600,1342=>600,1343=>600,1344=>600,1345=>600,1346=>600,1347=>600,1348=>600,1349=>600, +1350=>600,1351=>600,1352=>600,1353=>600,1354=>600,1355=>600,1356=>600,1357=>600,1358=>600,1359=>600, +1360=>600,1361=>600,1362=>600,1363=>600,1364=>600,1365=>600,1366=>600,1369=>600,1370=>600,1371=>600, +1372=>600,1373=>600,1374=>600,1375=>600,1377=>600,1378=>600,1379=>600,1380=>600,1381=>600,1382=>600, +1383=>600,1384=>600,1385=>600,1386=>600,1387=>600,1388=>600,1389=>600,1390=>600,1391=>600,1392=>600, +1393=>600,1394=>600,1395=>600,1396=>600,1397=>600,1398=>600,1399=>600,1400=>600,1401=>600,1402=>600, +1403=>600,1404=>600,1405=>600,1406=>600,1407=>600,1408=>600,1409=>600,1410=>600,1411=>600,1412=>600, +1413=>600,1414=>600,1415=>600,1417=>600,1418=>600,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0, +1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>600,1471=>0, +1472=>600,1473=>0,1474=>0,1475=>600,1476=>0,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600, +1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600, +1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600, +1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600, +4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600, +4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600, +4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600, +4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,5792=>600,5793=>600,5794=>600, +5795=>600,5796=>600,5797=>600,5798=>600,5799=>600,5800=>600,5801=>600,5802=>600,5803=>600,5804=>600, +5805=>600,5806=>600,5807=>600,5808=>600,5809=>600,5810=>600,5811=>600,5812=>600,5813=>600,5814=>600, +5815=>600,5816=>600,5817=>600,5818=>600,5819=>600,5820=>600,5821=>600,5822=>600,5823=>600,5824=>600, +5825=>600,5826=>600,5827=>600,5828=>600,5829=>600,5830=>600,5831=>600,5832=>600,5833=>600,5834=>600, +5835=>600,5836=>600,5837=>600,5838=>600,5839=>600,5840=>600,5841=>600,5842=>600,5843=>600,5844=>600, +5845=>600,5846=>600,5847=>600,5848=>600,5849=>600,5850=>600,5851=>600,5852=>600,5853=>600,5854=>600, +5855=>600,5856=>600,5857=>600,5858=>600,5859=>600,5860=>600,5861=>600,5862=>600,5863=>600,5864=>600, +5865=>600,5866=>600,5867=>600,5868=>600,5869=>600,5870=>600,5871=>600,5872=>600,7680=>600,7681=>600, +7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600, +7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600, +7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600, +7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600, +7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600, +7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600, +7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600, +7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600, +7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600, +7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600, +7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600, +7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600, +7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600, +7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600, +7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600, +7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600, +7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600, +7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600, +7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600, +7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600, +7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600, +7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600, +7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600, +7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600, +7926=>600,7927=>600,7928=>600,7929=>600,7936=>600,7937=>600,7938=>600,7939=>600,7940=>600,7941=>600, +7942=>600,7943=>600,7944=>600,7945=>600,7946=>600,7947=>600,7948=>600,7949=>600,7950=>600,7951=>600, +7952=>600,7953=>600,7954=>600,7955=>600,7956=>600,7957=>600,7960=>600,7961=>600,7962=>600,7963=>600, +7964=>600,7965=>600,7968=>600,7969=>600,7970=>600,7971=>600,7972=>600,7973=>600,7974=>600,7975=>600, +7976=>600,7977=>600,7978=>600,7979=>600,7980=>600,7981=>600,7982=>600,7983=>600,7984=>600,7985=>600, +7986=>600,7987=>600,7988=>600,7989=>600,7990=>600,7991=>600,7992=>600,7993=>600,7994=>600,7995=>600, +7996=>600,7997=>600,7998=>600,7999=>600,8000=>600,8001=>600,8002=>600,8003=>600,8004=>600,8005=>600, +8008=>600,8009=>600,8010=>600,8011=>600,8012=>600,8013=>600,8016=>600,8017=>600,8018=>600,8019=>600, +8020=>600,8021=>600,8022=>600,8023=>600,8025=>600,8027=>600,8029=>600,8031=>600,8032=>600,8033=>600, +8034=>600,8035=>600,8036=>600,8037=>600,8038=>600,8039=>600,8040=>600,8041=>600,8042=>600,8043=>600, +8044=>600,8045=>600,8046=>600,8047=>600,8048=>600,8049=>600,8050=>600,8051=>600,8052=>600,8053=>600, +8054=>600,8055=>600,8056=>600,8057=>600,8058=>600,8059=>600,8060=>600,8061=>600,8064=>600,8065=>600, +8066=>600,8067=>600,8068=>600,8069=>600,8070=>600,8071=>600,8072=>600,8073=>600,8074=>600,8075=>600, +8076=>600,8077=>600,8078=>600,8079=>600,8080=>600,8081=>600,8082=>600,8083=>600,8084=>600,8085=>600, +8086=>600,8087=>600,8088=>600,8089=>600,8090=>600,8091=>600,8092=>600,8093=>600,8094=>600,8095=>600, +8096=>600,8097=>600,8098=>600,8099=>600,8100=>600,8101=>600,8102=>600,8103=>600,8104=>600,8105=>600, +8106=>600,8107=>600,8108=>600,8109=>600,8110=>600,8111=>600,8112=>600,8113=>600,8114=>600,8115=>600, +8116=>600,8118=>600,8119=>600,8120=>600,8121=>600,8122=>600,8123=>600,8124=>600,8125=>600,8126=>600, +8127=>600,8128=>600,8129=>600,8130=>600,8131=>600,8132=>600,8134=>600,8135=>600,8136=>600,8137=>600, +8138=>600,8139=>600,8140=>600,8141=>600,8142=>600,8143=>600,8144=>600,8145=>600,8146=>600,8147=>600, +8150=>600,8151=>600,8152=>600,8153=>600,8154=>600,8155=>600,8157=>600,8158=>600,8159=>600,8160=>600, +8161=>600,8162=>600,8163=>600,8164=>600,8165=>600,8166=>600,8167=>600,8168=>600,8169=>600,8170=>600, +8171=>600,8172=>600,8173=>600,8174=>600,8175=>600,8178=>600,8179=>600,8180=>600,8182=>600,8183=>600, +8184=>600,8185=>600,8186=>600,8187=>600,8188=>600,8189=>600,8190=>600,8192=>600,8193=>600,8194=>600, +8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,8202=>600,8203=>600,8204=>0, +8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8213=>600,8214=>600,8215=>600,8219=>600, +8223=>600,8227=>600,8228=>600,8229=>600,8231=>600,8232=>600,8233=>600,8234=>600,8235=>600,8236=>600, +8237=>600,8238=>600,8239=>600,8241=>600,8242=>600,8243=>600,8244=>600,8245=>600,8246=>600,8247=>600, +8248=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,8257=>600,8258=>600,8259=>600, +8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,8267=>600,8268=>600,8269=>600, +8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,8277=>600,8278=>600,8279=>600, +8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,8287=>600,8288=>600,8289=>600, +8290=>600,8291=>600,8292=>600,8298=>600,8299=>600,8300=>600,8301=>600,8302=>600,8303=>600,8304=>600, +8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600, +8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600, +8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600, +8338=>600,8339=>600,8340=>600,8353=>600,8354=>600,8355=>600,8356=>600,8357=>600,8358=>600,8359=>600, +8360=>600,8361=>600,8362=>600,8363=>600,8365=>600,8366=>600,8368=>600,8369=>600,8370=>600,8371=>600, +8372=>600,8373=>600,8400=>0,8401=>0,8402=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0, +8414=>0,8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8428=>0,8429=>0,8430=>0,8431=>0, +8448=>600,8449=>600,8450=>600,8451=>600,8453=>600,8454=>600,8455=>600,8457=>600,8461=>600,8463=>600, +8464=>600,8465=>600,8466=>600,8467=>600,8468=>600,8469=>600,8470=>600,8471=>600,8472=>600,8473=>600, +8474=>600,8476=>600,8477=>600,8478=>600,8481=>600,8484=>600,8486=>600,8487=>600,8489=>600,8490=>600, +8491=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8505=>600,8506=>600,8507=>600,8523=>600, +8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600, +8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600, +8550=>600,8551=>600,8552=>600,8553=>600,8554=>600,8555=>600,8556=>600,8557=>600,8558=>600,8559=>600, +8560=>600,8561=>600,8562=>600,8563=>600,8564=>600,8565=>600,8566=>600,8567=>600,8568=>600,8569=>600, +8570=>600,8571=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600, +8596=>600,8597=>600,8598=>600,8599=>600,8600=>600,8601=>600,8602=>600,8603=>600,8604=>600,8605=>600, +8606=>600,8607=>600,8608=>600,8609=>600,8610=>600,8611=>600,8612=>600,8613=>600,8614=>600,8615=>600, +8616=>600,8617=>600,8618=>600,8619=>600,8620=>600,8621=>600,8622=>600,8623=>600,8624=>600,8625=>600, +8626=>600,8627=>600,8628=>600,8629=>600,8630=>600,8631=>600,8632=>600,8633=>600,8634=>600,8635=>600, +8636=>600,8637=>600,8638=>600,8639=>600,8640=>600,8641=>600,8642=>600,8643=>600,8644=>600,8645=>600, +8646=>600,8647=>600,8648=>600,8649=>600,8650=>600,8651=>600,8652=>600,8653=>600,8654=>600,8655=>600, +8656=>600,8657=>600,8658=>600,8659=>600,8660=>600,8661=>600,8669=>600,8678=>600,8679=>600,8680=>600, +8681=>600,8691=>600,8704=>600,8705=>600,8706=>600,8707=>600,8708=>600,8709=>600,8710=>600,8711=>600, +8712=>600,8713=>600,8714=>600,8715=>600,8716=>600,8717=>600,8718=>600,8719=>600,8720=>600,8721=>600, +8722=>600,8723=>600,8724=>600,8725=>600,8726=>600,8727=>600,8728=>600,8729=>600,8730=>600,8731=>600, +8732=>600,8733=>600,8734=>600,8735=>600,8736=>600,8737=>600,8738=>600,8739=>600,8740=>600,8741=>600, +8742=>600,8743=>600,8744=>600,8745=>600,8746=>600,8747=>600,8748=>600,8749=>600,8750=>600,8751=>600, +8752=>600,8754=>600,8755=>600,8756=>600,8757=>600,8758=>600,8759=>600,8760=>600,8761=>600,8762=>600, +8763=>600,8764=>600,8765=>600,8768=>600,8769=>600,8770=>600,8771=>600,8772=>600,8773=>600,8774=>600, +8775=>600,8776=>600,8777=>600,8778=>600,8779=>600,8780=>600,8781=>600,8784=>600,8785=>600,8786=>600, +8787=>600,8788=>600,8789=>600,8790=>600,8791=>600,8792=>600,8793=>600,8794=>600,8795=>600,8796=>600, +8797=>600,8798=>600,8799=>600,8800=>600,8801=>600,8802=>600,8803=>600,8804=>600,8805=>600,8806=>600, +8807=>600,8808=>600,8809=>600,8810=>600,8811=>600,8812=>600,8813=>600,8814=>600,8815=>600,8816=>600, +8817=>600,8818=>600,8819=>600,8820=>600,8821=>600,8822=>600,8823=>600,8824=>600,8825=>600,8826=>600, +8827=>600,8828=>600,8829=>600,8830=>600,8831=>600,8832=>600,8833=>600,8834=>600,8835=>600,8836=>600, +8837=>600,8838=>600,8839=>600,8840=>600,8841=>600,8842=>600,8843=>600,8844=>600,8845=>600,8846=>600, +8847=>600,8848=>600,8849=>600,8850=>600,8851=>600,8852=>600,8853=>600,8854=>600,8855=>600,8856=>600, +8857=>600,8858=>600,8859=>600,8860=>600,8861=>600,8862=>600,8863=>600,8866=>600,8867=>600,8868=>600, +8869=>600,8870=>600,8871=>600,8872=>600,8873=>600,8874=>600,8875=>600,8876=>600,8877=>600,8878=>600, +8879=>600,8882=>600,8883=>600,8884=>600,8885=>600,8891=>600,8892=>600,8893=>600,8894=>600,8896=>600, +8897=>600,8898=>600,8899=>600,8900=>600,8901=>600,8902=>600,8903=>600,8904=>600,8909=>600,8910=>600, +8911=>600,8912=>600,8913=>600,8914=>600,8915=>600,8924=>600,8925=>600,8926=>600,8927=>600,8928=>600, +8929=>600,8930=>600,8931=>600,8938=>600,8939=>600,8940=>600,8941=>600,8942=>600,8943=>600,8944=>600, +8945=>600,8960=>600,8962=>600,8963=>600,8964=>600,8965=>600,8966=>600,8968=>600,8969=>600,8970=>600, +8971=>600,8972=>600,8973=>600,8974=>600,8975=>600,8976=>600,8978=>600,8980=>600,8981=>600,8984=>600, +8985=>600,8988=>600,8989=>600,8990=>600,8991=>600,8992=>600,8993=>600,8994=>600,8995=>600,8996=>600, +8997=>600,8998=>600,8999=>600,9001=>600,9002=>600,9003=>600,9004=>600,9014=>600,9015=>600,9016=>600, +9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600,9023=>600,9024=>600,9025=>600,9026=>600, +9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600,9036=>600, +9037=>600,9038=>600,9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600,9046=>600, +9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600,9055=>600,9056=>600, +9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600,9066=>600, +9067=>600,9068=>600,9069=>600,9070=>600,9071=>600,9072=>600,9073=>600,9074=>600,9075=>600,9076=>600, +9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9084=>600,9085=>600,9086=>600,9087=>600, +9088=>600,9089=>600,9090=>600,9091=>600,9092=>600,9093=>600,9094=>600,9095=>600,9096=>600,9097=>600, +9098=>600,9099=>600,9100=>600,9101=>600,9102=>600,9103=>600,9104=>600,9105=>600,9106=>600,9107=>600, +9108=>600,9109=>600,9110=>600,9111=>600,9112=>600,9113=>600,9114=>600,9115=>600,9116=>600,9117=>600, +9118=>600,9119=>600,9120=>600,9121=>600,9122=>600,9123=>600,9124=>600,9125=>600,9126=>600,9127=>600, +9128=>600,9129=>600,9130=>600,9131=>600,9132=>600,9133=>600,9134=>600,9135=>600,9136=>600,9137=>600, +9138=>600,9139=>600,9140=>600,9141=>600,9142=>600,9143=>600,9146=>600,9147=>600,9148=>600,9149=>600, +9150=>600,9151=>600,9152=>600,9153=>600,9154=>600,9155=>600,9156=>600,9157=>600,9158=>600,9159=>600, +9160=>600,9161=>600,9162=>600,9163=>600,9164=>600,9165=>600,9166=>600,9167=>600,9178=>600,9179=>600, +9182=>600,9183=>600,9186=>600,9187=>600,9188=>600,9189=>600,9190=>600,9251=>600,9280=>600,9281=>600, +9282=>600,9283=>600,9284=>600,9285=>600,9286=>600,9287=>600,9288=>600,9289=>600,9290=>600,9312=>600, +9313=>600,9314=>600,9315=>600,9316=>600,9317=>600,9318=>600,9319=>600,9320=>600,9321=>600,9472=>600, +9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600, +9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600, +9493=>600,9494=>600,9495=>600,9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600, +9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600, +9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600, +9523=>600,9524=>600,9525=>600,9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600, +9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600, +9543=>600,9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600, +9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600, +9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600, +9573=>600,9574=>600,9575=>600,9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600, +9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600, +9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600, +9603=>600,9604=>600,9605=>600,9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600, +9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9622=>600, +9623=>600,9624=>600,9625=>600,9626=>600,9627=>600,9628=>600,9629=>600,9630=>600,9631=>600,9632=>600, +9633=>600,9634=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600, +9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600, +9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600, +9663=>600,9664=>600,9665=>600,9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600, +9673=>600,9674=>600,9675=>600,9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600,9682=>600, +9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600, +9693=>600,9694=>600,9695=>600,9696=>600,9697=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600, +9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9712=>600, +9713=>600,9714=>600,9715=>600,9716=>600,9717=>600,9718=>600,9719=>600,9720=>600,9721=>600,9722=>600, +9723=>600,9724=>600,9725=>600,9726=>600,9727=>600,9728=>600,9729=>600,9730=>600,9731=>600,9733=>600, +9734=>600,9735=>600,9736=>600,9737=>600,9744=>600,9745=>600,9746=>600,9754=>600,9755=>600,9756=>600, +9757=>600,9758=>600,9759=>600,9766=>600,9768=>600,9769=>600,9774=>600,9775=>600,9776=>600,9777=>600, +9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,9785=>600,9786=>600,9787=>600,9788=>600, +9789=>600,9790=>600,9791=>600,9792=>600,9793=>600,9794=>600,9795=>600,9796=>600,9797=>600,9798=>600, +9799=>600,9800=>600,9801=>600,9802=>600,9803=>600,9804=>600,9805=>600,9806=>600,9807=>600,9808=>600, +9809=>600,9810=>600,9811=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600, +9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,9856=>600,9857=>600, +9858=>600,9859=>600,9860=>600,9861=>600,10176=>600,10177=>600,10178=>600,10179=>600,10180=>600,10181=>600, +10182=>600,10183=>600,10184=>600,10185=>600,10186=>600,10188=>600,10192=>600,10193=>600,10194=>600,10195=>600, +10196=>600,10197=>600,10198=>600,10199=>600,10212=>600,10213=>600,10214=>600,10215=>600,10216=>600,10217=>600, +10218=>600,10219=>600,10226=>600,10227=>600,10229=>600,10230=>600,10231=>600,10232=>600,10233=>600,10234=>600, +10235=>600,10236=>600,10240=>600,10241=>600,10242=>600,10243=>600,10244=>600,10245=>600,10246=>600,10247=>600, +10248=>600,10249=>600,10250=>600,10251=>600,10252=>600,10253=>600,10254=>600,10255=>600,10256=>600,10257=>600, +10258=>600,10259=>600,10260=>600,10261=>600,10262=>600,10263=>600,10264=>600,10265=>600,10266=>600,10267=>600, +10268=>600,10269=>600,10270=>600,10271=>600,10272=>600,10273=>600,10274=>600,10275=>600,10276=>600,10277=>600, +10278=>600,10279=>600,10280=>600,10281=>600,10282=>600,10283=>600,10284=>600,10285=>600,10286=>600,10287=>600, +10288=>600,10289=>600,10290=>600,10291=>600,10292=>600,10293=>600,10294=>600,10295=>600,10296=>600,10297=>600, +10298=>600,10299=>600,10300=>600,10301=>600,10302=>600,10303=>600,10304=>600,10305=>600,10306=>600,10307=>600, +10308=>600,10309=>600,10310=>600,10311=>600,10312=>600,10313=>600,10314=>600,10315=>600,10316=>600,10317=>600, +10318=>600,10319=>600,10320=>600,10321=>600,10322=>600,10323=>600,10324=>600,10325=>600,10326=>600,10327=>600, +10328=>600,10329=>600,10330=>600,10331=>600,10332=>600,10333=>600,10334=>600,10335=>600,10336=>600,10337=>600, +10338=>600,10339=>600,10340=>600,10341=>600,10342=>600,10343=>600,10344=>600,10345=>600,10346=>600,10347=>600, +10348=>600,10349=>600,10350=>600,10351=>600,10352=>600,10353=>600,10354=>600,10355=>600,10356=>600,10357=>600, +10358=>600,10359=>600,10360=>600,10361=>600,10362=>600,10363=>600,10364=>600,10365=>600,10366=>600,10367=>600, +10368=>600,10369=>600,10370=>600,10371=>600,10372=>600,10373=>600,10374=>600,10375=>600,10376=>600,10377=>600, +10378=>600,10379=>600,10380=>600,10381=>600,10382=>600,10383=>600,10384=>600,10385=>600,10386=>600,10387=>600, +10388=>600,10389=>600,10390=>600,10391=>600,10392=>600,10393=>600,10394=>600,10395=>600,10396=>600,10397=>600, +10398=>600,10399=>600,10400=>600,10401=>600,10402=>600,10403=>600,10404=>600,10405=>600,10406=>600,10407=>600, +10408=>600,10409=>600,10410=>600,10411=>600,10412=>600,10413=>600,10414=>600,10415=>600,10416=>600,10417=>600, +10418=>600,10419=>600,10420=>600,10421=>600,10422=>600,10423=>600,10424=>600,10425=>600,10426=>600,10427=>600, +10428=>600,10429=>600,10430=>600,10431=>600,10432=>600,10433=>600,10434=>600,10435=>600,10436=>600,10437=>600, +10438=>600,10439=>600,10440=>600,10441=>600,10442=>600,10443=>600,10444=>600,10445=>600,10446=>600,10447=>600, +10448=>600,10449=>600,10450=>600,10451=>600,10452=>600,10453=>600,10454=>600,10455=>600,10456=>600,10457=>600, +10458=>600,10459=>600,10460=>600,10461=>600,10462=>600,10463=>600,10464=>600,10465=>600,10466=>600,10467=>600, +10468=>600,10469=>600,10470=>600,10471=>600,10472=>600,10473=>600,10474=>600,10475=>600,10476=>600,10477=>600, +10478=>600,10479=>600,10480=>600,10481=>600,10482=>600,10483=>600,10484=>600,10485=>600,10486=>600,10487=>600, +10488=>600,10489=>600,10490=>600,10491=>600,10492=>600,10493=>600,10494=>600,10495=>600,10752=>600,10753=>600, +10754=>600,10755=>600,10756=>600,10757=>600,10758=>600,10781=>600,10815=>600,11008=>600,11009=>600,11010=>600, +11011=>600,11012=>600,11013=>600,11014=>600,11015=>600,11016=>600,11017=>600,11018=>600,11019=>600,11020=>600, +11021=>600,11026=>600,11027=>600,11028=>600,11029=>600,11030=>600,11031=>600,11032=>600,11033=>600,11035=>600, +11036=>600,11037=>600,11038=>600,11039=>600,11040=>600,11041=>600,11042=>600,11043=>600,11044=>600,11045=>600, +11046=>600,11047=>600,11048=>600,11049=>600,11050=>600,11051=>600,11091=>600,11092=>600,64256=>600,64257=>600, +64258=>600,64259=>600,64260=>600,64261=>600,64285=>600,64286=>600,64287=>600,64288=>600,64289=>600,64290=>600, +64291=>600,64292=>600,64293=>600,64294=>600,64295=>600,64296=>600,64297=>600,64298=>600,64299=>600,64300=>600, +64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600, +64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600, +64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600, +65533=>600); +$enc=''; +$diff=''; +$file='freemono.z'; +$ctg='freemono.ctg.z'; +$originalsize=314348; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemono.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemono.z new file mode 100755 index 00000000..0353139d Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemono.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonob.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonob.ctg.z new file mode 100755 index 00000000..40443bbe Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonob.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonob.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonob.php new file mode 100755 index 00000000..2cbdf124 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonob.php @@ -0,0 +1,204 @@ +800,'Descent'=>-200,'CapHeight'=>10,'Flags'=>32,'FontBBox'=>'[-604 -200 754 800]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600, +42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600, +52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600, +62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600, +72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600, +82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600, +92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600, +102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600, +112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600, +122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600, +8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600, +8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600, +382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600, +168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600, +178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600, +188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600, +198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600, +208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600, +218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600, +228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600, +238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600, +248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600, +258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600, +268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600, +278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600, +288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600, +298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600, +308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600, +318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600, +328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600, +340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600, +350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600, +362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600, +372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600, +385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600, +395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600, +406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600, +416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600, +426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600, +436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600, +446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600, +456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600, +466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600, +476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600, +486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600, +496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600, +506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600, +516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600, +526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600, +536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,548=>600,549=>600, +550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600, +560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600, +598=>600,599=>600,600=>600,601=>600,603=>600,604=>600,607=>600,608=>600,609=>600,613=>600, +614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,621=>600,623=>600,624=>600,625=>600, +626=>600,627=>600,628=>600,629=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600, +639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,647=>600,648=>600,649=>600, +652=>600,653=>600,654=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600, +663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600, +673=>600,674=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600, +696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600, +706=>600,707=>600,708=>600,709=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600, +717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600, +727=>600,728=>600,729=>600,730=>600,731=>600,733=>600,734=>600,735=>600,736=>600,737=>600, +738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600, +748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600, +758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600, +768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0, +778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0, +788=>0,789=>0,790=>0,791=>0,795=>0,796=>0,800=>0,801=>0,802=>0,803=>0, +804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,812=>0,813=>0,814=>0, +815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,826=>0, +827=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,838=>0,839=>0,840=>0, +844=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,884=>600,885=>600, +890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600, +910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600, +920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600, +931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600, +941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600, +951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600, +961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600, +971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600, +982=>600,986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600, +1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600, +1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600, +1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600, +1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600, +1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600, +1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600, +1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600, +1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600, +1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600, +1116=>600,1117=>600,1118=>600,1119=>600,1136=>600,1137=>600,1138=>600,1156=>0,1157=>0,1158=>0, +1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600, +1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600, +1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600, +1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600, +1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600, +1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600, +1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600, +1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600, +1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600, +1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600, +1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600, +1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600, +1310=>600,1311=>600,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0, +1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>600,1471=>0,1472=>600,1473=>0,1474=>0, +1475=>600,1476=>0,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600, +1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600, +1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600, +1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600, +4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600, +4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600, +4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600, +4340=>600,4341=>600,4345=>600,4347=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600, +7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600, +7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600, +7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600, +7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600, +7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600, +7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600, +7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600, +7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600, +7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600, +7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600, +7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600, +7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600, +7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600, +7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600, +7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600, +7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600, +7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600, +7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600, +7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600, +7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600, +7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600, +7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600, +7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600, +7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600, +8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600, +8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8213=>600, +8214=>600,8215=>600,8219=>600,8223=>600,8227=>600,8228=>600,8229=>600,8231=>600,8232=>600,8233=>600, +8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8241=>600,8242=>600,8243=>600,8244=>600, +8245=>600,8246=>600,8247=>600,8248=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600, +8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600, +8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600, +8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600, +8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8298=>600,8299=>600,8300=>600,8301=>600, +8302=>600,8303=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600, +8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600, +8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600, +8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8355=>600,8356=>600,8362=>600,8373=>600, +8448=>600,8449=>600,8451=>600,8453=>600,8454=>600,8457=>600,8465=>600,8466=>600,8470=>600,8472=>600, +8476=>600,8481=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8498=>600,8501=>600,8502=>600, +8503=>600,8504=>600,8506=>600,8507=>600,8523=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600, +8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600, +8546=>600,8547=>600,8548=>600,8549=>600,8550=>600,8553=>600,8556=>600,8557=>600,8558=>600,8559=>600, +8560=>600,8564=>600,8569=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600, +8595=>600,8704=>600,8706=>600,8707=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8715=>600, +8716=>600,8721=>600,8722=>600,8723=>600,8725=>600,8730=>600,8733=>600,8734=>600,8735=>600,8756=>600, +8800=>600,8801=>600,8804=>600,8805=>600,8834=>600,8835=>600,8836=>600,8837=>600,8838=>600,8839=>600, +8869=>600,8976=>600,9001=>600,9002=>600,9251=>600,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600, +9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600, +9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,9496=>600, +9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600, +9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,9514=>600,9515=>600,9516=>600, +9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600, +9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600, +9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,9544=>600,9545=>600,9546=>600, +9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600, +9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600, +9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,9576=>600, +9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600, +9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,9594=>600,9595=>600,9596=>600, +9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600, +9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600, +9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600,9635=>600,9636=>600,9637=>600, +9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600, +9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600, +9658=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,9666=>600,9667=>600,9668=>600, +9669=>600,9670=>600,9671=>600,9673=>600,9674=>600,9675=>600,9677=>600,9679=>600,9680=>600,9681=>600, +9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9698=>600,9699=>600, +9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600, +9710=>600,9712=>600,9713=>600,9714=>600,9715=>600,9716=>600,9717=>600,9718=>600,9719=>600,9735=>600, +9736=>600,9737=>600,9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600, +9785=>600,9786=>600,9787=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600, +9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,64256=>600,64257=>600, +64258=>600,64285=>600,64287=>600,64288=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600, +64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600, +64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600, +64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65533=>600); +$enc=''; +$diff=''; +$file='freemonob.z'; +$ctg='freemonob.ctg.z'; +$originalsize=164212; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonob.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonob.z new file mode 100755 index 00000000..84b1dec7 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonob.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonobi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonobi.ctg.z new file mode 100755 index 00000000..efaebb08 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonobi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonobi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonobi.php new file mode 100755 index 00000000..69f5e6be --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonobi.php @@ -0,0 +1,153 @@ +800,'Descent'=>-200,'CapHeight'=>19,'Flags'=>96,'FontBBox'=>'[-644 -200 833 800]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600, +42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600, +52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600, +62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600, +72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600, +82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600, +92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600, +102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600, +112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600, +122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600, +8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600, +8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600, +382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600, +168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600, +178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600, +188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600, +198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600, +208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600, +218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600, +228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600, +238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600, +248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600, +258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600, +268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600, +278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600, +288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600, +298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600, +308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600, +318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600, +328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600, +340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600, +350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600, +362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600, +372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600, +385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600, +395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600, +406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600, +416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600, +426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600, +436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600, +446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600, +456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600, +466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600, +476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600, +486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600, +496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600, +506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600, +516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600, +526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600, +536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,548=>600,549=>600, +550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600, +560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600, +598=>600,599=>600,600=>600,601=>600,603=>600,604=>600,607=>600,608=>600,609=>600,613=>600, +614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,621=>600,623=>600,624=>600,625=>600, +626=>600,627=>600,628=>600,629=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600, +639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,647=>600,648=>600,649=>600, +652=>600,653=>600,654=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600, +663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600, +673=>600,674=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600, +705=>600,706=>600,707=>600,708=>600,709=>600,711=>600,712=>600,713=>600,714=>600,715=>600, +716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600, +726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,733=>600,734=>600,735=>600,741=>600, +742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,748=>600,749=>600,750=>600,751=>600, +752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,758=>600,759=>600,760=>600,761=>600, +762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +795=>0,796=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0, +808=>0,809=>0,810=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0, +819=>0,820=>0,821=>0,822=>0,825=>0,826=>0,827=>0,831=>0,832=>0,833=>0, +834=>0,835=>0,836=>0,838=>0,839=>0,840=>0,844=>0,849=>0,850=>0,851=>0, +852=>0,853=>0,854=>0,855=>0,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600, +902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600, +914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600, +924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600, +935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600, +945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600, +955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600, +965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600, +976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600, +1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600, +1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600, +1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600, +1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600, +1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600, +1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600, +1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600, +1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600, +1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600, +1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600, +1136=>600,1137=>600,1138=>600,1156=>0,1157=>0,1158=>0,1162=>600,1163=>600,1164=>600,1165=>600, +1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,1174=>600,1175=>600, +1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,1184=>600,1185=>600, +1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,1194=>600,1195=>600, +1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,1204=>600,1205=>600, +1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,1214=>600,1215=>600, +1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,1223=>600,1224=>600,1225=>600, +1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,1232=>600,1233=>600,1234=>600,1235=>600, +1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,1245=>600, +1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,1255=>600, +1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,1265=>600, +1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,1272=>600,1273=>600,1296=>600,1297=>600, +1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,1310=>600,1311=>600,1456=>0,1457=>0, +1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0, +1469=>0,1470=>0,1471=>0,1472=>600,1473=>0,1474=>0,1475=>600,1476=>0,1488=>600,1489=>600, +1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600, +1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600, +1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600, +4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600, +4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600, +4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600, +4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600, +8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600, +8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8213=>600, +8214=>600,8215=>600,8219=>600,8223=>600,8227=>600,8228=>600,8229=>600,8231=>600,8232=>600,8233=>600, +8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8241=>600,8242=>600,8243=>600,8244=>600, +8245=>600,8246=>600,8247=>600,8248=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600, +8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600, +8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600, +8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600, +8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8298=>600,8299=>600,8300=>600,8301=>600, +8302=>600,8303=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600, +8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600, +8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600, +8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8362=>600,8373=>600,8448=>600,8449=>600, +8451=>600,8453=>600,8454=>600,8457=>600,8465=>600,8466=>600,8470=>600,8472=>600,8476=>600,8481=>600, +8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600, +8506=>600,8507=>600,8523=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600, +8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600, +8548=>600,8549=>600,8550=>600,8553=>600,8556=>600,8557=>600,8558=>600,8559=>600,8560=>600,8564=>600, +8569=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,8704=>600, +8706=>600,8707=>600,8710=>600,8711=>600,8712=>600,8713=>600,8715=>600,8716=>600,8721=>600,8722=>600, +8723=>600,8725=>600,8730=>600,8733=>600,8734=>600,8756=>600,8800=>600,8801=>600,8804=>600,8805=>600, +9251=>600,9674=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600, +9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,64256=>600,64257=>600,64258=>600, +64285=>600,64287=>600,64288=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600, +64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600, +64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600, +64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65533=>600); +$enc=''; +$diff=''; +$file='freemonobi.z'; +$ctg='freemonobi.ctg.z'; +$originalsize=145080; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonobi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonobi.z new file mode 100755 index 00000000..b31acfb1 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonobi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonoi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonoi.ctg.z new file mode 100755 index 00000000..36e92ec0 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonoi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonoi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonoi.php new file mode 100755 index 00000000..03df1731 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonoi.php @@ -0,0 +1,221 @@ +800,'Descent'=>-200,'CapHeight'=>44,'Flags'=>96,'FontBBox'=>'[-644 -200 816 800]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600, +42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600, +52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600, +62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600, +72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600, +82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600, +92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600, +102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600, +112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600, +122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600, +8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600, +8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600, +382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600, +168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600, +178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600, +188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600, +198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600, +208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600, +218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600, +228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600, +238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600, +248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600, +258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600, +268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600, +278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600, +288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600, +298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600, +308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600, +318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600, +328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600, +340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600, +350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600, +362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600, +372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600, +385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600, +395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600, +406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600, +416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600, +426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600, +436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600, +446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600, +456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600, +466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600, +476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600, +486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600, +496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600, +506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600, +516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600, +526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600, +536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,548=>600,549=>600, +550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600, +560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600, +597=>600,598=>600,599=>600,600=>600,601=>600,602=>600,603=>600,604=>600,607=>600,608=>600, +609=>600,610=>600,611=>600,612=>600,613=>600,614=>600,615=>600,616=>600,617=>600,618=>600, +619=>600,620=>600,621=>600,622=>600,623=>600,624=>600,625=>600,626=>600,627=>600,628=>600, +629=>600,630=>600,632=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,639=>600, +640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,646=>600,647=>600,648=>600,649=>600, +651=>600,652=>600,653=>600,654=>600,655=>600,656=>600,657=>600,658=>600,660=>600,661=>600, +662=>600,663=>600,664=>600,665=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600, +673=>600,674=>600,679=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600, +695=>600,696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600, +705=>600,706=>600,707=>600,708=>600,709=>600,711=>600,712=>600,713=>600,714=>600,715=>600, +716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600, +726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,733=>600,734=>600,735=>600,736=>600, +737=>600,738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600, +747=>600,748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600, +757=>600,758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600, +767=>600,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0, +777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0, +787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,795=>0,796=>0,800=>0, +803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,812=>0,813=>0, +814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0, +824=>0,825=>0,826=>0,827=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0, +838=>0,839=>0,840=>0,844=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0, +855=>0,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600, +905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600, +917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600, +927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600, +938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600, +948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600, +958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600, +968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600, +979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600, +1013=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600, +1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600, +1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600, +1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600, +1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600, +1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600, +1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600, +1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600, +1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600, +1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1120=>600,1121=>600,1122=>600, +1123=>600,1124=>600,1126=>600,1127=>600,1128=>600,1130=>600,1131=>600,1132=>600,1133=>600,1136=>600, +1137=>600,1138=>600,1140=>600,1141=>600,1142=>600,1143=>600,1155=>0,1156=>0,1157=>0,1158=>0, +1159=>0,1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600, +1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600, +1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600, +1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600, +1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600, +1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600, +1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600, +1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600, +1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600, +1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600, +1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600, +1271=>600,1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600, +1309=>600,1310=>600,1311=>600,1329=>600,1330=>600,1331=>600,1332=>600,1333=>600,1334=>600,1335=>600, +1336=>600,1337=>600,1338=>600,1339=>600,1340=>600,1341=>600,1342=>600,1343=>600,1344=>600,1345=>600, +1346=>600,1347=>600,1348=>600,1349=>600,1350=>600,1351=>600,1352=>600,1353=>600,1354=>600,1355=>600, +1356=>600,1357=>600,1358=>600,1359=>600,1360=>600,1361=>600,1362=>600,1363=>600,1364=>600,1365=>600, +1366=>600,1369=>600,1370=>600,1371=>600,1372=>600,1373=>600,1374=>600,1375=>600,1377=>600,1378=>600, +1379=>600,1380=>600,1381=>600,1382=>600,1383=>600,1384=>600,1385=>600,1386=>600,1387=>600,1388=>600, +1389=>600,1390=>600,1391=>600,1392=>600,1393=>600,1394=>600,1395=>600,1396=>600,1397=>600,1398=>600, +1399=>600,1400=>600,1401=>600,1402=>600,1403=>600,1404=>600,1405=>600,1406=>600,1407=>600,1408=>600, +1409=>600,1410=>600,1411=>600,1412=>600,1413=>600,1414=>600,1415=>600,1417=>600,1418=>600,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0, +1468=>0,1469=>0,1470=>600,1471=>0,1472=>600,1473=>0,1474=>0,1475=>600,1476=>0,1488=>600, +1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600, +1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600, +1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600, +1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600, +4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600, +4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600, +4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600, +4347=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600, +7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600, +7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600, +7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600, +7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600, +7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600, +7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600, +7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600, +7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600, +7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600, +7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600, +7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600, +7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600, +7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600, +7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600, +7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600, +7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600, +7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600, +7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600, +7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600, +7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600, +7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600, +7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600, +7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600, +7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,7936=>600,7937=>600,7938=>600, +7939=>600,7940=>600,7941=>600,7942=>600,7943=>600,7944=>600,7945=>600,7946=>600,7947=>600,7948=>600, +7949=>600,7950=>600,7951=>600,7952=>600,7953=>600,7954=>600,7955=>600,7956=>600,7957=>600,7960=>600, +7961=>600,7962=>600,7963=>600,7964=>600,7965=>600,7968=>600,7969=>600,7970=>600,7971=>600,7972=>600, +7973=>600,7974=>600,7975=>600,7976=>600,7977=>600,7978=>600,7979=>600,7980=>600,7981=>600,7982=>600, +7983=>600,7984=>600,7985=>600,7986=>600,7987=>600,7988=>600,7989=>600,7990=>600,7991=>600,7992=>600, +7993=>600,7994=>600,7995=>600,7996=>600,7997=>600,7998=>600,7999=>600,8000=>600,8001=>600,8002=>600, +8003=>600,8004=>600,8005=>600,8008=>600,8009=>600,8010=>600,8011=>600,8012=>600,8013=>600,8016=>600, +8017=>600,8018=>600,8019=>600,8020=>600,8021=>600,8022=>600,8023=>600,8025=>600,8027=>600,8029=>600, +8031=>600,8032=>600,8033=>600,8034=>600,8035=>600,8036=>600,8037=>600,8038=>600,8039=>600,8040=>600, +8041=>600,8042=>600,8043=>600,8044=>600,8045=>600,8046=>600,8047=>600,8048=>600,8049=>600,8050=>600, +8051=>600,8052=>600,8053=>600,8054=>600,8055=>600,8056=>600,8057=>600,8058=>600,8059=>600,8060=>600, +8061=>600,8064=>600,8065=>600,8066=>600,8067=>600,8068=>600,8069=>600,8070=>600,8071=>600,8072=>600, +8073=>600,8074=>600,8075=>600,8076=>600,8077=>600,8078=>600,8079=>600,8080=>600,8081=>600,8082=>600, +8083=>600,8084=>600,8085=>600,8086=>600,8087=>600,8088=>600,8089=>600,8090=>600,8091=>600,8092=>600, +8093=>600,8094=>600,8095=>600,8096=>600,8097=>600,8098=>600,8099=>600,8100=>600,8101=>600,8102=>600, +8103=>600,8104=>600,8105=>600,8106=>600,8107=>600,8108=>600,8109=>600,8110=>600,8111=>600,8112=>600, +8113=>600,8114=>600,8115=>600,8116=>600,8118=>600,8119=>600,8120=>600,8121=>600,8122=>600,8123=>600, +8124=>600,8125=>600,8126=>600,8127=>600,8128=>600,8129=>600,8130=>600,8131=>600,8132=>600,8134=>600, +8135=>600,8136=>600,8137=>600,8138=>600,8139=>600,8140=>600,8141=>600,8142=>600,8143=>600,8144=>600, +8145=>600,8146=>600,8147=>600,8150=>600,8151=>600,8152=>600,8153=>600,8154=>600,8155=>600,8157=>600, +8158=>600,8159=>600,8160=>600,8161=>600,8162=>600,8163=>600,8164=>600,8165=>600,8166=>600,8167=>600, +8168=>600,8169=>600,8170=>600,8171=>600,8172=>600,8173=>600,8174=>600,8175=>600,8178=>600,8179=>600, +8180=>600,8182=>600,8183=>600,8184=>600,8185=>600,8186=>600,8187=>600,8188=>600,8189=>600,8190=>600, +8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600, +8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8213=>600, +8214=>600,8215=>600,8219=>600,8223=>600,8227=>600,8228=>600,8229=>600,8231=>600,8232=>600,8233=>600, +8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8241=>600,8242=>600,8243=>600,8244=>600, +8245=>600,8246=>600,8247=>600,8248=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600, +8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600, +8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600, +8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600, +8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8298=>600,8299=>600,8300=>600,8301=>600, +8302=>600,8303=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600, +8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600, +8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600, +8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8355=>600,8356=>600,8359=>600,8362=>600, +8373=>600,8448=>600,8449=>600,8450=>600,8451=>600,8453=>600,8454=>600,8455=>600,8457=>600,8461=>600, +8464=>600,8465=>600,8466=>600,8467=>600,8468=>600,8469=>600,8470=>600,8471=>600,8472=>600,8473=>600, +8474=>600,8476=>600,8477=>600,8478=>600,8481=>600,8484=>600,8486=>600,8487=>600,8489=>600,8490=>600, +8491=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8506=>600,8507=>600,8523=>600,8525=>600, +8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600, +8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600, +8550=>600,8551=>600,8552=>600,8553=>600,8554=>600,8555=>600,8556=>600,8557=>600,8558=>600,8559=>600, +8560=>600,8561=>600,8562=>600,8563=>600,8564=>600,8565=>600,8566=>600,8567=>600,8568=>600,8569=>600, +8570=>600,8571=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600, +8596=>600,8597=>600,8598=>600,8599=>600,8600=>600,8601=>600,8616=>600,8704=>600,8706=>600,8707=>600, +8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8715=>600,8716=>600,8721=>600,8722=>600,8723=>600, +8725=>600,8729=>600,8730=>600,8733=>600,8734=>600,8745=>600,8746=>600,8747=>600,8756=>600,8764=>600, +8769=>600,8770=>600,8773=>600,8776=>600,8800=>600,8801=>600,8804=>600,8805=>600,8834=>600,8835=>600, +8836=>600,8837=>600,8838=>600,8839=>600,9001=>600,9002=>600,9251=>600,9674=>600,9824=>600,9825=>600, +9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600,9836=>600, +9837=>600,9838=>600,9839=>600,64256=>600,64257=>600,64258=>600,64285=>600,64286=>600,64287=>600,64288=>600, +64289=>600,64290=>600,64291=>600,64292=>600,64293=>600,64294=>600,64295=>600,64296=>600,64297=>600,64298=>600, +64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600, +64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600, +64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600, +64334=>600,64335=>600,65533=>600); +$enc=''; +$diff=''; +$file='freemonoi.z'; +$ctg='freemonoi.ctg.z'; +$originalsize=196732; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonoi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonoi.z new file mode 100755 index 00000000..93bf7d35 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freemonoi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesans.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesans.ctg.z new file mode 100755 index 00000000..b3bf68c3 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesans.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesans.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesans.php new file mode 100755 index 00000000..7d3b3a58 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesans.php @@ -0,0 +1,311 @@ +1000,'Descent'=>-300,'CapHeight'=>22,'Flags'=>32,'FontBBox'=>'[-958 -550 1632 1050]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600); +$up=-176; +$ut=50; +$dw=600; +$cw=array( +32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333, +42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556, +52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584, +62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778, +72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778, +82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278, +92=>278,93=>277,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556, +102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556, +112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500, +122=>500,123=>334,124=>260,125=>334,126=>584,8364=>655,8218=>222,402=>278,8222=>333,8230=>1000, +8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>250,338=>1000,381=>611,8216=>222,8217=>221, +8220=>333,8221=>333,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>500,8250=>250,339=>944, +382=>500,376=>667,160=>278,161=>278,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556, +168=>333,169=>737,170=>370,171=>448,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584, +178=>350,179=>350,180=>333,181=>556,182=>537,183=>278,184=>333,185=>350,186=>365,187=>448, +188=>869,189=>869,190=>869,191=>556,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667, +198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722, +218=>722,219=>722,220=>722,221=>667,222=>666,223=>611,224=>556,225=>556,226=>556,227=>556, +228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278, +238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584, +248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>555,255=>500,256=>667,257=>556, +258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500, +268=>722,269=>500,270=>722,271=>722,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556, +278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556, +288=>778,289=>556,290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>278, +298=>278,299=>278,300=>278,301=>278,302=>278,303=>222,304=>278,305=>278,306=>700,307=>374, +308=>500,309=>222,310=>667,311=>500,312=>500,313=>556,314=>222,315=>556,316=>222,317=>556, +318=>387,319=>556,320=>500,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722, +328=>556,329=>722,330=>722,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556, +340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500, +350=>667,351=>500,354=>611,355=>278,356=>611,357=>443,358=>611,359=>278,360=>722,361=>556, +362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556, +372=>944,373=>722,374=>667,375=>500,377=>611,378=>500,379=>611,380=>500,383=>278,384=>556, +385=>854,386=>668,387=>556,388=>667,389=>556,390=>722,391=>722,392=>500,393=>722,394=>899, +395=>667,396=>556,397=>564,398=>667,399=>722,400=>667,401=>611,403=>778,404=>667,405=>889, +406=>278,407=>333,408=>667,409=>500,410=>333,411=>560,412=>833,413=>722,414=>556,415=>778, +416=>788,417=>565,418=>944,419=>722,420=>842,421=>556,422=>666,423=>667,424=>500,425=>611, +426=>333,427=>278,428=>611,429=>278,430=>611,431=>776,432=>624,433=>778,434=>722,435=>722, +436=>556,437=>611,438=>500,439=>611,440=>611,441=>500,442=>500,443=>556,446=>556,447=>556, +448=>260,449=>370,450=>584,451=>278,452=>1311,453=>1208,454=>1056,455=>1056,456=>778,457=>444, +458=>1158,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722, +468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556, +478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556, +488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>611,495=>500,496=>222,497=>1333, +498=>1222,499=>1056,500=>778,501=>556,503=>630,504=>722,505=>556,506=>667,507=>556,508=>1000, +509=>889,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667, +519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722, +529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,536=>667,537=>500,538=>611, +539=>278,540=>521,541=>393,542=>722,543=>556,548=>611,549=>500,550=>667,551=>556,552=>667, +553=>556,554=>778,555=>556,556=>778,557=>556,558=>778,559=>556,560=>778,561=>556,562=>667, +563=>500,567=>222,592=>556,593=>556,594=>556,595=>556,596=>500,597=>500,598=>556,599=>556, +600=>556,601=>556,602=>804,603=>500,604=>499,605=>742,606=>500,607=>222,608=>556,609=>556, +610=>546,611=>500,612=>556,613=>556,614=>556,615=>556,616=>222,617=>222,618=>278,619=>473, +620=>427,621=>222,622=>611,623=>833,624=>833,625=>833,626=>556,627=>556,628=>567,629=>556, +630=>778,631=>722,632=>741,633=>333,634=>333,635=>333,636=>333,637=>333,638=>384,639=>369, +640=>546,641=>546,642=>500,643=>278,644=>278,645=>278,646=>444,647=>278,648=>278,649=>556, +650=>626,651=>539,652=>500,653=>722,654=>500,655=>556,656=>500,657=>500,658=>500,659=>552, +660=>556,661=>556,662=>556,663=>722,664=>778,665=>506,666=>500,667=>546,668=>558,669=>444, +670=>500,671=>430,672=>556,673=>556,674=>556,675=>944,676=>944,677=>944,678=>689,679=>506, +680=>764,681=>766,682=>660,683=>577,684=>530,685=>486,686=>565,687=>621,688=>333,689=>333, +690=>167,691=>236,692=>236,693=>276,694=>359,695=>500,696=>330,697=>278,698=>454,699=>278, +700=>278,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333, +711=>333,712=>333,713=>333,714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333, +721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333, +731=>333,733=>333,734=>333,735=>510,736=>333,737=>186,738=>333,739=>333,740=>334,741=>526, +742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333, +752=>333,753=>333,754=>333,755=>327,756=>261,757=>437,758=>437,759=>333,760=>278,761=>200, +762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0, +842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0, +852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0, +862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0, +872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>278,885=>199, +890=>332,894=>278,900=>333,901=>333,902=>667,903=>275,904=>786,905=>828,906=>369,908=>833, +910=>845,911=>778,912=>286,913=>667,914=>667,915=>582,916=>778,917=>667,918=>628,919=>722, +920=>778,921=>278,922=>667,923=>667,924=>833,925=>722,926=>630,927=>778,928=>722,929=>667, +931=>628,932=>611,933=>667,934=>717,935=>667,936=>745,937=>778,938=>278,939=>667,940=>608, +941=>528,942=>548,943=>307,944=>538,945=>596,946=>542,947=>531,948=>564,949=>512,950=>455, +951=>548,952=>525,953=>286,954=>510,955=>551,956=>540,957=>500,958=>470,959=>546,960=>619, +961=>569,962=>547,963=>620,964=>492,965=>538,966=>741,967=>571,968=>662,969=>740,970=>286, +971=>538,972=>546,973=>538,974=>740,977=>580,978=>742,979=>845,980=>620,981=>741,982=>740, +983=>556,1008=>556,1009=>566,1012=>778,1013=>328,1024=>667,1025=>657,1026=>766,1027=>582,1028=>722, +1029=>667,1030=>278,1031=>278,1032=>500,1033=>1080,1034=>1014,1035=>766,1036=>628,1037=>730,1038=>613, +1039=>722,1040=>666,1041=>668,1042=>668,1043=>582,1044=>812,1045=>657,1046=>905,1047=>667,1048=>730, +1049=>730,1050=>632,1051=>674,1052=>846,1053=>721,1054=>796,1055=>721,1056=>654,1057=>722,1058=>611, +1059=>613,1060=>861,1061=>657,1062=>742,1063=>626,1064=>830,1065=>851,1066=>841,1067=>874,1068=>670, +1069=>717,1070=>1001,1071=>686,1072=>552,1073=>550,1074=>506,1075=>404,1076=>602,1077=>547,1078=>755, +1079=>499,1080=>567,1081=>567,1082=>489,1083=>517,1084=>618,1085=>558,1086=>550,1087=>557,1088=>577, +1089=>520,1090=>444,1091=>468,1092=>865,1093=>466,1094=>578,1095=>498,1096=>692,1097=>712,1098=>664, +1099=>690,1100=>521,1101=>520,1102=>759,1103=>543,1104=>549,1105=>549,1106=>577,1107=>404,1108=>519, +1109=>502,1110=>224,1111=>278,1112=>223,1113=>813,1114=>853,1115=>577,1116=>489,1117=>567,1118=>468, +1119=>558,1120=>942,1121=>693,1136=>762,1137=>662,1138=>800,1139=>550,1148=>942,1149=>693,1150=>942, +1151=>693,1154=>468,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>763, +1163=>583,1164=>689,1165=>526,1166=>652,1167=>572,1168=>601,1169=>397,1170=>589,1171=>392,1172=>591, +1173=>475,1174=>927,1175=>830,1176=>661,1177=>493,1178=>658,1179=>510,1180=>675,1181=>519,1182=>684, +1183=>514,1184=>839,1185=>653,1186=>740,1187=>570,1188=>987,1189=>714,1190=>1058,1191=>808,1192=>722, +1193=>510,1194=>722,1195=>516,1196=>611,1197=>402,1198=>668,1199=>578,1200=>668,1201=>588,1202=>664, +1203=>488,1204=>936,1205=>679,1206=>638,1207=>521,1208=>630,1209=>498,1210=>630,1211=>498,1212=>927, +1213=>699,1214=>919,1215=>703,1216=>254,1217=>905,1218=>755,1219=>668,1220=>512,1221=>696,1222=>524, +1223=>721,1224=>558,1225=>744,1226=>571,1227=>630,1228=>498,1229=>869,1230=>631,1231=>254,1232=>666, +1233=>552,1234=>666,1235=>552,1236=>1000,1237=>879,1238=>657,1239=>547,1240=>722,1241=>543,1242=>722, +1243=>543,1244=>905,1245=>755,1246=>667,1247=>499,1248=>611,1249=>540,1250=>730,1251=>567,1252=>730, +1253=>567,1254=>796,1255=>550,1256=>800,1257=>550,1258=>800,1259=>550,1260=>717,1261=>520,1262=>613, +1263=>468,1264=>613,1265=>468,1266=>613,1267=>468,1268=>626,1269=>498,1270=>582,1271=>395,1272=>874, +1273=>690,1296=>667,1297=>491,1298=>665,1299=>509,1306=>778,1307=>575,1308=>934,1309=>712,1310=>627, +1311=>489,1329=>720,1330=>696,1331=>750,1332=>725,1333=>699,1334=>751,1335=>446,1336=>703,1337=>790, +1338=>656,1339=>697,1340=>390,1341=>852,1342=>791,1343=>698,1344=>585,1345=>656,1346=>651,1347=>658, +1348=>759,1349=>595,1350=>772,1351=>603,1352=>703,1353=>648,1354=>698,1355=>744,1356=>738,1357=>703, +1358=>739,1359=>660,1360=>693,1361=>623,1362=>385,1363=>788,1364=>632,1365=>775,1366=>714,1369=>333, +1370=>222,1371=>200,1372=>333,1373=>333,1374=>333,1375=>333,1377=>833,1378=>551,1379=>572,1380=>569, +1381=>546,1382=>581,1383=>353,1384=>551,1385=>568,1386=>569,1387=>552,1388=>276,1389=>795,1390=>535, +1391=>553,1392=>537,1393=>512,1394=>568,1395=>552,1396=>531,1397=>249,1398=>527,1399=>405,1400=>551, +1401=>390,1402=>833,1403=>509,1404=>523,1405=>545,1406=>584,1407=>879,1408=>552,1409=>552,1410=>301, +1411=>884,1412=>578,1413=>556,1414=>668,1415=>544,1417=>278,1418=>333,1456=>0,1457=>0,1458=>0, +1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0, +1470=>488,1471=>0,1472=>212,1473=>0,1474=>0,1475=>278,1476=>0,1488=>640,1489=>591,1490=>466, +1491=>598,1492=>622,1493=>212,1494=>351,1495=>623,1496=>608,1497=>200,1498=>526,1499=>550,1500=>600, +1501=>623,1502=>621,1503=>212,1504=>378,1505=>607,1506=>587,1507=>575,1508=>568,1509=>540,1510=>590, +1511=>606,1512=>547,1513=>776,1514=>687,1520=>424,1521=>412,1522=>400,1523=>184,1524=>344,1792=>600, +1793=>201,1794=>201,1795=>201,1796=>201,1797=>500,1798=>500,1799=>500,1800=>370,1801=>370,1802=>574, +1803=>574,1804=>645,1805=>574,1807=>0,1808=>452,1809=>452,1810=>574,1811=>645,1812=>645,1813=>509, +1814=>509,1815=>682,1816=>585,1817=>404,1818=>627,1819=>718,1820=>718,1821=>484,1822=>682,1823=>600, +1824=>660,1825=>682,1826=>538,1827=>718,1828=>718,1829=>718,1830=>574,1831=>574,1832=>638,1833=>585, +1834=>509,1835=>682,1836=>682,1840=>0,1841=>0,1842=>0,1843=>0,1844=>0,1845=>0,1846=>0, +1847=>0,1848=>0,1849=>0,1850=>0,1851=>0,1852=>0,1853=>0,1854=>0,1855=>0,1856=>0, +1857=>0,1858=>0,1859=>0,1860=>0,1861=>0,1862=>0,1863=>0,1864=>0,1865=>0,1866=>0, +2305=>6,2306=>0,2307=>305,2308=>717,2309=>717,2310=>829,2311=>463,2312=>463,2313=>581,2314=>803, +2315=>920,2316=>639,2317=>430,2318=>430,2319=>430,2320=>430,2321=>856,2322=>828,2323=>837,2324=>856, +2325=>749,2326=>779,2327=>522,2328=>587,2329=>650,2330=>619,2331=>641,2332=>703,2333=>691,2334=>677, +2335=>568,2336=>529,2337=>611,2338=>536,2339=>607,2340=>564,2341=>659,2342=>500,2343=>591,2344=>521, +2345=>568,2346=>477,2347=>728,2348=>490,2349=>577,2350=>517,2351=>554,2352=>433,2353=>433,2354=>656, +2355=>660,2356=>660,2357=>490,2358=>645,2359=>477,2360=>666,2361=>484,2364=>6,2365=>442,2366=>211, +2367=>211,2368=>211,2369=>6,2370=>3,2371=>6,2372=>0,2373=>6,2374=>84,2375=>6,2376=>6, +2377=>224,2378=>234,2379=>211,2380=>211,2381=>6,2384=>839,2385=>15,2386=>0,2387=>9,2388=>9, +2392=>750,2393=>779,2394=>522,2395=>703,2396=>613,2397=>536,2398=>728,2399=>554,2400=>899,2401=>625, +2402=>625,2403=>625,2404=>674,2405=>674,2406=>575,2407=>575,2408=>575,2409=>575,2410=>575,2411=>575, +2412=>575,2413=>575,2414=>575,2415=>575,2416=>365,2417=>387,2418=>717,2433=>0,2434=>300,2435=>264, +2437=>594,2438=>790,2439=>469,2440=>513,2441=>520,2442=>549,2443=>594,2444=>481,2447=>580,2448=>627, +2451=>540,2452=>613,2453=>570,2454=>467,2455=>471,2456=>428,2457=>483,2458=>408,2459=>509,2460=>591, +2461=>563,2462=>771,2463=>381,2464=>404,2465=>522,2466=>408,2467=>450,2468=>543,2469=>477,2470=>418, +2471=>433,2472=>445,2474=>499,2475=>584,2476=>377,2477=>555,2478=>448,2479=>423,2480=>390,2482=>498, +2486=>498,2487=>425,2488=>495,2489=>440,2492=>22,2493=>440,2494=>193,2495=>189,2496=>180,2497=>0, +2498=>0,2499=>0,2500=>0,2503=>252,2504=>243,2507=>889,2508=>865,2509=>0,2510=>356,2519=>219, +2524=>523,2525=>408,2527=>428,2528=>594,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479, +2537=>530,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>377,2545=>377,2546=>429, +2547=>383,2548=>429,2549=>478,2550=>545,2551=>158,2552=>365,2553=>280,2554=>357,2561=>0,2562=>0, +2563=>351,2565=>860,2566=>1088,2567=>869,2568=>928,2569=>723,2570=>723,2575=>665,2576=>857,2579=>716, +2580=>858,2581=>682,2582=>634,2583=>696,2584=>744,2585=>649,2586=>674,2587=>656,2588=>653,2589=>629, +2590=>639,2591=>641,2592=>657,2593=>650,2594=>653,2595=>651,2596=>640,2597=>634,2598=>662,2599=>630, +2600=>625,2602=>645,2603=>653,2604=>624,2605=>613,2606=>658,2607=>734,2608=>620,2610=>676,2611=>719, +2613=>626,2614=>666,2616=>666,2617=>614,2620=>0,2622=>286,2623=>322,2624=>301,2625=>0,2626=>0, +2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2649=>636,2650=>762,2651=>652,2652=>653,2654=>656, +2662=>672,2663=>543,2664=>622,2665=>622,2666=>576,2667=>589,2668=>509,2669=>645,2670=>661,2671=>655, +2672=>0,2673=>0,2674=>666,2675=>726,2676=>1217,2689=>22,2690=>23,2691=>0,2693=>775,2694=>979, +2695=>588,2696=>563,2697=>525,2698=>724,2699=>942,2701=>775,2703=>775,2704=>775,2705=>979,2707=>979, +2708=>979,2709=>610,2710=>706,2711=>623,2712=>610,2713=>601,2714=>614,2715=>642,2716=>684,2717=>634, +2718=>644,2719=>509,2720=>541,2721=>539,2722=>524,2723=>657,2724=>547,2725=>616,2726=>494,2727=>601, +2728=>627,2730=>524,2731=>620,2732=>691,2733=>687,2734=>468,2735=>590,2736=>509,2738=>571,2739=>687, +2741=>526,2742=>620,2743=>575,2744=>620,2745=>549,2748=>53,2749=>415,2750=>241,2751=>186,2752=>217, +2753=>32,2754=>21,2755=>38,2756=>27,2757=>45,2759=>41,2760=>46,2761=>207,2763=>190,2764=>182, +2765=>16,2768=>962,2784=>949,2790=>479,2791=>502,2792=>484,2793=>471,2794=>501,2795=>527,2796=>462, +2797=>524,2798=>454,2799=>495,2801=>752,2946=>479,2947=>893,2949=>1018,2950=>1170,2951=>916,2952=>676, +2953=>836,2954=>1225,2958=>744,2959=>744,2960=>848,2962=>813,2963=>813,2964=>813,2965=>688,2969=>744, +2970=>676,2972=>848,2974=>984,2975=>777,2979=>1338,2980=>664,2984=>561,2985=>1029,2986=>607,2990=>697, +2991=>697,2992=>434,2993=>617,2994=>869,2995=>859,2996=>697,2997=>869,2999=>1145,3000=>1064,3001=>1316, +3006=>424,3007=>125,3008=>596,3009=>539,3014=>596,3015=>650,3016=>973,3018=>1286,3019=>1286,3020=>1706, +3021=>333,3031=>859,3050=>778,3051=>881,3052=>876,3053=>648,3057=>744,4256=>587,4257=>620,4258=>642, +4259=>815,4260=>600,4261=>595,4262=>799,4263=>893,4264=>622,4265=>597,4266=>939,4267=>602,4268=>603, +4269=>790,4270=>587,4271=>623,4272=>799,4273=>601,4274=>792,4275=>724,4276=>847,4277=>599,4278=>812, +4279=>603,4280=>653,4281=>590,4282=>754,4283=>596,4284=>653,4285=>651,4286=>596,4287=>888,4288=>593, +4304=>436,4305=>491,4306=>528,4307=>692,4308=>447,4309=>447,4310=>628,4311=>734,4312=>449,4313=>445, +4314=>843,4315=>449,4316=>449,4317=>682,4318=>449,4319=>480,4320=>682,4321=>468,4322=>710,4323=>623, +4324=>697,4325=>447,4326=>702,4327=>447,4328=>470,4329=>440,4330=>632,4331=>449,4332=>470,4333=>536, +4334=>449,4335=>656,4336=>474,4337=>630,4338=>394,4339=>419,4340=>422,4341=>436,4345=>528,4347=>515, +7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500, +7690=>722,7691=>556,7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556, +7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556, +7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556, +7720=>722,7721=>556,7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500, +7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222, +7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556, +7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556, +7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333, +7770=>722,7771=>333,7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500, +7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278, +7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556, +7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722, +7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500, +7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500, +7830=>556,7831=>278,7832=>722,7833=>500,7834=>555,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556, +7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556, +7854=>667,7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556, +7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556, +7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222, +7884=>778,7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556, +7894=>778,7895=>556,7896=>778,7897=>556,7898=>788,7899=>565,7900=>788,7901=>565,7902=>788,7903=>565, +7904=>788,7905=>565,7906=>788,7907=>565,7908=>722,7909=>556,7910=>722,7911=>556,7912=>776,7913=>624, +7914=>776,7915=>624,7916=>776,7917=>624,7918=>776,7919=>624,7920=>776,7921=>624,7922=>667,7923=>500, +7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>596,7937=>596,7938=>596,7939=>596, +7940=>596,7941=>596,7942=>596,7943=>596,7944=>667,7945=>667,7946=>742,7947=>756,7948=>692,7949=>699, +7950=>673,7951=>667,7952=>512,7953=>512,7954=>512,7955=>512,7956=>512,7957=>512,7960=>730,7961=>714, +7962=>900,7963=>882,7964=>867,7965=>879,7968=>548,7969=>548,7970=>548,7971=>548,7972=>548,7973=>548, +7974=>548,7975=>548,7976=>772,7977=>778,7978=>945,7979=>947,7980=>943,7981=>946,7982=>853,7983=>853, +7984=>286,7985=>286,7986=>286,7987=>286,7988=>286,7989=>286,7990=>286,7991=>286,7992=>322,7993=>321, +7994=>482,7995=>485,7996=>477,7997=>484,7998=>394,7999=>390,8000=>546,8001=>546,8002=>546,8003=>546, +8004=>546,8005=>546,8008=>775,8009=>784,8010=>990,8011=>987,8012=>887,8013=>897,8016=>538,8017=>538, +8018=>538,8019=>538,8020=>538,8021=>538,8022=>538,8023=>538,8025=>747,8027=>915,8029=>971,8031=>863, +8032=>740,8033=>740,8034=>740,8035=>740,8036=>740,8037=>740,8038=>740,8039=>740,8040=>769,8041=>774, +8042=>972,8043=>970,8044=>879,8045=>918,8046=>901,8047=>901,8048=>596,8049=>596,8050=>512,8051=>512, +8052=>548,8053=>548,8054=>286,8055=>286,8056=>546,8057=>546,8058=>538,8059=>538,8060=>740,8061=>740, +8064=>596,8065=>596,8066=>596,8067=>596,8068=>596,8069=>596,8070=>596,8071=>596,8072=>830,8073=>828, +8074=>916,8075=>916,8076=>853,8077=>860,8078=>835,8079=>827,8080=>548,8081=>548,8082=>548,8083=>548, +8084=>548,8085=>548,8086=>548,8087=>548,8088=>928,8089=>931,8090=>1104,8091=>1109,8092=>1099,8093=>1102, +8094=>1009,8095=>1012,8096=>740,8097=>740,8098=>740,8099=>740,8100=>740,8101=>740,8102=>740,8103=>740, +8104=>934,8105=>934,8106=>1130,8107=>1128,8108=>1045,8109=>1077,8110=>1062,8111=>1065,8112=>596,8113=>596, +8114=>596,8115=>596,8116=>596,8118=>596,8119=>596,8120=>667,8121=>667,8122=>667,8123=>667,8124=>832, +8125=>333,8126=>200,8127=>333,8128=>333,8129=>333,8130=>548,8131=>548,8132=>548,8134=>548,8135=>548, +8136=>833,8137=>776,8138=>944,8139=>896,8140=>875,8141=>400,8142=>400,8143=>333,8144=>286,8145=>286, +8146=>286,8147=>286,8150=>286,8151=>286,8152=>278,8153=>278,8154=>385,8155=>376,8157=>400,8158=>400, +8159=>333,8160=>538,8161=>538,8162=>538,8163=>538,8164=>569,8165=>569,8166=>538,8167=>514,8168=>667, +8169=>667,8170=>817,8171=>827,8172=>741,8173=>393,8174=>393,8175=>333,8178=>740,8179=>740,8180=>740, +8182=>740,8183=>740,8184=>833,8185=>833,8186=>848,8187=>814,8188=>939,8189=>333,8190=>333,8192=>500, +8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100, +8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8214=>312, +8215=>566,8219=>221,8223=>333,8227=>350,8228=>278,8229=>666,8231=>278,8232=>0,8233=>0,8234=>0, +8235=>0,8236=>0,8237=>0,8238=>0,8239=>500,8241=>1360,8242=>278,8243=>469,8244=>680,8245=>278, +8246=>469,8247=>680,8248=>376,8251=>622,8252=>556,8253=>556,8254=>556,8255=>658,8256=>658,8257=>438, +8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1112,8264=>834,8265=>834,8266=>556,8267=>537, +8268=>537,8269=>537,8270=>389,8271=>278,8272=>658,8273=>389,8274=>634,8275=>500,8276=>658,8277=>787, +8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0, +8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>350,8305=>350,8308=>350,8309=>350,8310=>350, +8311=>350,8312=>350,8313=>350,8314=>350,8315=>350,8316=>350,8317=>350,8318=>350,8319=>350,8320=>350, +8321=>350,8322=>350,8323=>350,8324=>350,8325=>350,8326=>350,8327=>350,8328=>350,8329=>350,8330=>350, +8331=>350,8332=>350,8333=>350,8334=>350,8336=>350,8337=>349,8338=>350,8339=>350,8340=>350,8353=>615, +8354=>601,8355=>611,8356=>556,8357=>833,8358=>682,8359=>1317,8360=>1202,8361=>879,8362=>869,8363=>538, +8365=>667,8366=>611,8368=>570,8369=>684,8370=>717,8371=>667,8372=>667,8373=>640,8400=>0,8401=>0, +8402=>0,8403=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0, +8417=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0, +8430=>0,8431=>0,8432=>0,8448=>970,8449=>979,8451=>1017,8452=>556,8453=>876,8454=>922,8455=>667, +8457=>919,8459=>969,8460=>615,8462=>556,8463=>572,8464=>809,8465=>606,8466=>874,8467=>417,8468=>747, +8470=>934,8471=>737,8472=>600,8475=>850,8476=>699,8480=>1000,8481=>1230,8486=>778,8487=>778,8488=>512, +8489=>286,8490=>667,8491=>667,8492=>908,8493=>623,8494=>556,8495=>444,8496=>562,8497=>895,8498=>588, +8499=>1080,8501=>640,8502=>592,8503=>466,8504=>598,8505=>278,8506=>871,8507=>1230,8513=>778,8514=>556, +8515=>556,8516=>667,8522=>516,8523=>655,8525=>936,8526=>482,8531=>869,8532=>869,8533=>869,8534=>869, +8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278, +8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945, +8555=>1223,8556=>556,8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>722,8564=>500, +8565=>722,8566=>944,8567=>1166,8568=>722,8569=>500,8570=>722,8571=>944,8572=>222,8573=>500,8574=>556, +8575=>833,8592=>987,8593=>603,8594=>987,8595=>603,8596=>1042,8597=>1042,8598=>800,8599=>800,8600=>800, +8601=>800,8614=>987,8617=>987,8618=>987,8629=>658,8636=>987,8637=>987,8638=>380,8639=>393,8640=>987, +8641=>987,8642=>380,8643=>379,8652=>987,8656=>987,8657=>603,8658=>987,8659=>603,8660=>1042,8661=>603, +8669=>1092,8704=>667,8706=>556,8707=>667,8709=>823,8710=>711,8711=>711,8712=>584,8713=>584,8714=>584, +8715=>584,8716=>584,8717=>713,8719=>823,8720=>823,8721=>804,8722=>584,8723=>584,8724=>584,8725=>510, +8726=>392,8727=>584,8729=>584,8730=>542,8733=>713,8734=>713,8736=>768,8739=>200,8740=>288,8741=>312, +8742=>340,8743=>603,8744=>603,8745=>768,8746=>768,8747=>556,8748=>796,8749=>956,8750=>556,8756=>863, +8764=>584,8765=>584,8766=>573,8768=>244,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584, +8775=>584,8776=>584,8777=>584,8781=>554,8784=>584,8800=>584,8801=>584,8802=>584,8804=>584,8805=>584, +8810=>955,8811=>955,8813=>554,8814=>584,8815=>584,8816=>584,8817=>584,8818=>584,8819=>584,8826=>584, +8827=>584,8828=>584,8829=>584,8832=>584,8833=>584,8834=>584,8835=>584,8836=>584,8837=>584,8838=>584, +8839=>584,8840=>584,8841=>584,8844=>768,8847=>636,8848=>636,8849=>636,8850=>636,8851=>636,8852=>636, +8853=>768,8854=>768,8855=>768,8856=>768,8857=>768,8866=>658,8867=>658,8868=>658,8869=>658,8870=>600, +8871=>608,8882=>636,8883=>636,8884=>636,8885=>636,8896=>744,8897=>744,8898=>764,8899=>764,8901=>278, +8902=>471,8904=>710,8928=>584,8929=>584,8930=>636,8931=>636,8960=>823,8968=>456,8969=>455,8970=>455, +8971=>456,8992=>556,8993=>556,8994=>658,8995=>658,9001=>329,9002=>329,9115=>384,9116=>384,9117=>384, +9118=>384,9119=>384,9120=>384,9121=>388,9122=>388,9123=>388,9124=>388,9125=>388,9126=>388,9134=>556, +9250=>556,9251=>500,9312=>788,9313=>788,9314=>788,9315=>788,9316=>788,9317=>788,9318=>788,9319=>788, +9320=>788,9321=>788,9472=>1000,9473=>1000,9474=>1000,9475=>1000,9476=>1000,9477=>1000,9478=>1000,9479=>1000, +9480=>1000,9481=>1000,9482=>1000,9483=>1000,9484=>1000,9485=>1000,9486=>1000,9487=>1000,9488=>1000,9489=>1000, +9490=>1000,9491=>1000,9492=>1000,9493=>1000,9494=>1000,9495=>1000,9496=>1000,9497=>1000,9498=>1000,9499=>1000, +9500=>1000,9501=>1000,9502=>1000,9503=>1000,9504=>1000,9505=>1000,9506=>1000,9507=>1000,9508=>1000,9509=>1000, +9510=>1000,9511=>1000,9512=>1000,9513=>1000,9514=>1000,9515=>1000,9516=>1000,9517=>1000,9518=>1000,9519=>1000, +9520=>1000,9521=>1000,9522=>1000,9523=>1000,9524=>1000,9525=>1000,9526=>1000,9527=>1000,9528=>1000,9529=>1000, +9530=>1000,9531=>1000,9532=>1000,9533=>1000,9534=>1000,9535=>1000,9536=>1000,9537=>1000,9538=>1000,9539=>1000, +9540=>1000,9541=>1000,9542=>1000,9543=>1000,9544=>1000,9545=>1000,9546=>1000,9547=>1000,9552=>1000,9553=>1000, +9554=>1000,9555=>1000,9556=>1000,9557=>1000,9558=>1000,9559=>1000,9560=>1000,9561=>1000,9562=>1000,9563=>1000, +9564=>1000,9565=>1000,9566=>1000,9567=>1000,9568=>1000,9569=>1000,9570=>1000,9571=>1000,9572=>1000,9573=>1000, +9574=>1000,9575=>1000,9576=>1000,9577=>1000,9578=>1000,9579=>1000,9580=>1000,9600=>1000,9601=>1000,9602=>1000, +9603=>1000,9604=>1000,9605=>1000,9606=>1000,9607=>1000,9608=>1000,9609=>1000,9610=>1000,9611=>1000,9612=>1000, +9613=>1000,9614=>1000,9615=>1000,9616=>1000,9617=>1000,9618=>1000,9619=>1000,9620=>1000,9621=>1000,9622=>1000, +9623=>1000,9624=>1000,9625=>1000,9626=>1000,9627=>1000,9628=>1000,9629=>1000,9630=>1000,9631=>1000,9632=>1000, +9633=>1000,9635=>1000,9636=>1000,9637=>1000,9642=>1000,9644=>1000,9651=>892,9661=>892,9671=>788,9674=>489, +9675=>791,9711=>882,9772=>929,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595, +9831=>776,9833=>333,9834=>555,9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,10048=>1161,10752=>791, +10753=>791,10754=>791,10755=>764,10756=>764,10761=>584,11799=>333,64256=>495,64257=>460,64258=>465,64259=>652, +64260=>645,64261=>520,64275=>1004,64276=>1044,64277=>1042,64278=>1037,64279=>1256,64285=>200,64286=>305,64287=>400, +64288=>587,64289=>890,64290=>848,64291=>872,64292=>800,64293=>850,64294=>873,64295=>797,64296=>937,64297=>584, +64298=>776,64299=>776,64300=>776,64301=>776,64302=>640,64303=>640,64304=>640,64305=>591,64306=>466,64307=>598, +64308=>622,64309=>262,64310=>351,64312=>608,64313=>270,64314=>526,64315=>550,64316=>600,64318=>621,64320=>378, +64321=>607,64323=>575,64324=>568,64326=>590,64327=>606,64328=>547,64329=>776,64330=>687,64331=>212,64332=>591, +64333=>550,64334=>568,64335=>640,65533=>788); +$enc=''; +$diff=''; +$file='freesans.z'; +$ctg='freesans.ctg.z'; +$originalsize=568896; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesans.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesans.z new file mode 100755 index 00000000..2bcdd56f Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesans.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansb.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansb.ctg.z new file mode 100755 index 00000000..8c0510dc Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansb.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansb.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansb.php new file mode 100755 index 00000000..00f49326 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansb.php @@ -0,0 +1,236 @@ +1000,'Descent'=>-300,'CapHeight'=>22,'Flags'=>32,'FontBBox'=>'[-967 -1175 1556 1639]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600); +$up=-189; +$ut=69; +$dw=600; +$cw=array( +32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333, +42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556, +52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584, +62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778, +72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778, +82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333, +92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556, +102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611, +112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556, +122=>500,123=>389,124=>280,125=>389,126=>584,8364=>640,8218=>278,402=>333,8222=>500,8230=>1000, +8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,381=>611,8216=>278,8217=>278, +8220=>500,8221=>500,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>556,8250=>333,339=>944, +382=>500,376=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556, +168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584, +178=>351,179=>351,180=>333,181=>611,182=>556,183=>278,184=>333,185=>300,186=>365,187=>556, +188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722, +198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722, +218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556, +228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278, +238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584, +248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556,256=>722,257=>556, +258=>722,259=>556,260=>722,261=>556,262=>722,263=>556,264=>722,265=>556,266=>722,267=>556, +268=>722,269=>556,270=>722,271=>723,272=>722,273=>611,274=>667,275=>556,276=>667,277=>556, +278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>611,286=>778,287=>611, +288=>778,289=>611,290=>778,291=>611,292=>722,293=>611,294=>722,295=>611,296=>278,297=>278, +298=>278,299=>278,300=>278,301=>278,302=>278,303=>278,304=>278,305=>278,306=>808,307=>492, +308=>556,309=>278,310=>722,311=>556,312=>559,313=>611,314=>278,315=>611,316=>278,317=>611, +318=>362,319=>611,320=>556,321=>611,322=>278,323=>722,324=>611,325=>722,326=>611,327=>722, +328=>611,329=>611,330=>722,331=>611,332=>778,333=>611,334=>778,335=>611,336=>778,337=>611, +340=>722,341=>389,342=>722,343=>389,344=>722,345=>389,346=>667,347=>556,348=>667,349=>556, +350=>667,351=>556,354=>611,355=>333,356=>611,357=>414,358=>611,359=>333,360=>722,361=>611, +362=>722,363=>611,364=>722,365=>611,366=>722,367=>611,368=>722,369=>611,370=>722,371=>611, +372=>944,373=>778,374=>667,375=>556,377=>611,378=>500,379=>611,380=>500,383=>333,384=>611, +385=>963,386=>704,387=>611,388=>687,389=>611,390=>722,391=>752,392=>562,393=>722,394=>968, +395=>722,396=>611,397=>609,398=>667,399=>778,400=>672,401=>611,403=>778,404=>667,405=>889, +406=>278,407=>395,408=>778,409=>556,410=>333,411=>620,412=>944,413=>722,414=>611,415=>778, +416=>791,417=>653,418=>1111,419=>722,420=>914,421=>611,422=>647,423=>667,424=>556,425=>673, +426=>441,427=>333,428=>742,429=>333,430=>611,431=>769,432=>656,433=>766,434=>722,435=>667, +436=>620,437=>611,438=>500,439=>556,440=>556,441=>645,442=>569,443=>579,446=>611,447=>608, +448=>260,449=>370,450=>584,451=>278,452=>1333,453=>1222,454=>1111,455=>1167,456=>889,457=>556, +458=>1278,459=>1000,460=>889,461=>722,462=>556,463=>278,464=>278,465=>778,466=>611,467=>722, +468=>611,469=>722,470=>611,471=>722,472=>611,473=>722,474=>611,475=>722,476=>611,477=>556, +478=>722,479=>556,480=>722,481=>556,482=>1000,483=>889,484=>778,485=>611,486=>778,487=>611, +488=>722,489=>556,490=>778,491=>611,492=>778,493=>611,494=>556,495=>556,496=>278,497=>1333, +498=>1222,499=>1111,500=>778,501=>611,503=>630,504=>722,505=>611,506=>722,507=>556,508=>1000, +509=>889,510=>778,511=>611,512=>722,513=>556,514=>722,515=>556,516=>667,517=>556,518=>667, +519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>611,526=>778,527=>611,528=>722, +529=>389,530=>722,531=>389,532=>722,533=>611,534=>722,535=>611,536=>667,537=>556,538=>611, +539=>333,540=>569,541=>486,542=>722,543=>611,548=>645,549=>500,550=>722,551=>556,552=>667, +553=>556,554=>778,555=>611,556=>778,557=>611,558=>778,559=>611,560=>778,561=>611,562=>667, +563=>556,567=>278,592=>556,593=>667,594=>667,595=>611,596=>556,597=>600,598=>611,599=>611, +600=>556,601=>556,602=>834,603=>541,604=>557,605=>820,606=>570,607=>278,608=>611,609=>611, +610=>556,611=>556,612=>656,613=>619,614=>611,615=>611,616=>278,617=>344,618=>278,619=>473, +620=>527,621=>298,622=>778,623=>889,624=>889,625=>889,626=>611,627=>611,628=>615,629=>606, +630=>878,631=>822,632=>778,633=>389,634=>389,635=>389,636=>389,637=>389,638=>455,639=>455, +640=>620,641=>620,642=>556,643=>333,644=>278,645=>333,646=>544,647=>328,648=>333,649=>623, +650=>726,651=>639,652=>556,653=>778,654=>556,655=>556,656=>500,657=>571,658=>556,659=>642, +660=>611,661=>611,662=>611,664=>611,665=>554,666=>570,667=>616,668=>603,669=>552,670=>556, +671=>454,672=>611,673=>611,674=>611,684=>522,688=>377,689=>377,690=>202,691=>272,692=>272, +693=>299,694=>395,695=>534,696=>364,697=>278,698=>454,699=>278,700=>278,701=>278,702=>333, +703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,711=>333,712=>333,713=>333, +714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333,721=>333,722=>333,723=>333, +724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,733=>333,734=>333, +735=>510,736=>372,737=>210,738=>363,739=>373,740=>334,741=>526,742=>526,743=>526,744=>526, +745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333,752=>333,753=>333,754=>333, +755=>333,756=>333,757=>437,758=>437,759=>400,760=>333,761=>200,762=>200,763=>200,764=>200, +765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0, +775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0, +785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0, +795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0, +805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0, +815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0, +825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0, +835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0, +845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0, +855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0, +865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0, +875=>0,876=>0,877=>0,878=>0,879=>0,884=>379,885=>379,890=>333,894=>333,900=>363, +901=>333,902=>761,903=>333,904=>864,905=>903,906=>454,908=>796,910=>991,911=>867,912=>315, +913=>696,914=>640,915=>585,916=>726,917=>589,918=>581,919=>654,920=>783,921=>215,922=>648, +923=>710,924=>829,925=>683,926=>645,927=>738,928=>726,929=>645,931=>673,932=>674,933=>771, +934=>773,935=>780,936=>778,937=>766,938=>263,939=>771,940=>660,941=>541,942=>560,943=>356, +944=>568,945=>632,946=>560,947=>591,948=>609,949=>541,950=>488,951=>608,952=>562,953=>315, +954=>533,955=>603,956=>582,957=>586,958=>513,959=>611,960=>658,961=>595,962=>590,963=>657, +964=>557,965=>568,966=>768,967=>632,968=>708,969=>778,970=>315,971=>568,972=>599,973=>568, +974=>778,977=>580,978=>742,979=>857,980=>620,981=>706,982=>740,983=>556,1008=>556,1009=>566, +1012=>778,1013=>328,1024=>670,1025=>670,1026=>800,1027=>611,1028=>714,1029=>667,1030=>314,1031=>300, +1032=>576,1033=>1100,1034=>1114,1035=>806,1036=>740,1037=>757,1038=>711,1039=>754,1040=>707,1041=>704, +1042=>704,1043=>611,1044=>900,1045=>670,1046=>1076,1047=>667,1048=>757,1049=>757,1050=>740,1051=>729, +1052=>874,1053=>753,1054=>774,1055=>753,1056=>675,1057=>711,1058=>611,1059=>711,1060=>904,1061=>666, +1062=>816,1063=>698,1064=>1057,1065=>1157,1066=>837,1067=>980,1068=>675,1069=>711,1070=>1093,1071=>708, +1072=>552,1073=>593,1074=>554,1075=>423,1076=>685,1077=>573,1078=>782,1079=>557,1080=>615,1081=>615, +1082=>559,1083=>568,1084=>666,1085=>603,1086=>606,1087=>603,1088=>612,1089=>556,1090=>440,1091=>549, +1092=>964,1093=>539,1094=>652,1095=>554,1096=>886,1097=>968,1098=>699,1099=>778,1100=>568,1101=>556, +1102=>848,1103=>586,1104=>573,1105=>573,1106=>606,1107=>423,1108=>556,1109=>555,1110=>260,1111=>278, +1112=>270,1113=>898,1114=>898,1115=>626,1116=>559,1117=>615,1118=>549,1119=>604,1136=>832,1137=>748, +1138=>774,1139=>606,1154=>449,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0, +1162=>832,1163=>675,1164=>678,1165=>611,1166=>675,1167=>612,1168=>636,1169=>440,1170=>622,1171=>449, +1172=>647,1173=>574,1174=>1096,1175=>803,1176=>683,1177=>555,1178=>759,1179=>573,1180=>730,1181=>554, +1182=>737,1183=>555,1184=>892,1185=>680,1186=>825,1187=>653,1188=>999,1189=>763,1190=>1105,1191=>925, +1192=>714,1193=>558,1194=>722,1195=>558,1196=>614,1197=>438,1198=>643,1199=>573,1200=>643,1201=>603, +1202=>670,1203=>548,1204=>952,1205=>738,1206=>781,1207=>615,1208=>698,1209=>588,1210=>687,1211=>588, +1212=>993,1213=>761,1214=>965,1215=>759,1216=>314,1217=>1076,1218=>809,1219=>700,1220=>543,1221=>793, +1222=>634,1223=>753,1224=>603,1225=>819,1226=>663,1227=>706,1228=>588,1229=>935,1230=>720,1231=>314, +1232=>707,1233=>564,1234=>707,1235=>566,1236=>1004,1237=>898,1238=>670,1239=>573,1240=>722,1241=>573, +1242=>722,1243=>573,1244=>1076,1245=>782,1246=>667,1247=>557,1248=>556,1249=>552,1250=>757,1251=>615, +1252=>757,1253=>615,1254=>778,1255=>611,1256=>774,1257=>606,1258=>774,1259=>606,1260=>711,1261=>556, +1262=>700,1263=>544,1264=>701,1265=>539,1266=>700,1267=>537,1268=>698,1269=>554,1270=>611,1271=>432, +1272=>980,1273=>778,1296=>672,1297=>546,1298=>729,1299=>577,1306=>778,1307=>612,1308=>944,1309=>776, +1310=>730,1311=>554,1329=>730,1330=>713,1331=>765,1332=>752,1333=>708,1334=>801,1335=>496,1336=>713, +1337=>855,1338=>686,1339=>727,1340=>420,1341=>897,1342=>841,1343=>708,1344=>660,1345=>666,1346=>747, +1347=>698,1348=>757,1349=>630,1350=>747,1351=>651,1352=>743,1353=>657,1354=>728,1355=>799,1356=>752, +1357=>743,1358=>768,1359=>691,1360=>713,1361=>640,1362=>425,1363=>818,1364=>672,1365=>805,1366=>754, +1369=>333,1370=>222,1371=>250,1372=>333,1373=>333,1374=>352,1375=>362,1377=>873,1378=>613,1379=>634, +1380=>636,1381=>593,1382=>639,1383=>417,1384=>613,1385=>658,1386=>711,1387=>609,1388=>318,1389=>836, +1390=>670,1391=>613,1392=>607,1393=>611,1394=>626,1395=>619,1396=>618,1397=>324,1398=>613,1399=>540, +1400=>591,1401=>392,1402=>873,1403=>577,1404=>603,1405=>600,1406=>626,1407=>951,1408=>613,1409=>612, +1410=>348,1411=>951,1412=>616,1413=>606,1414=>763,1415=>626,1417=>333,1418=>398,1456=>0,1457=>0, +1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0, +1469=>0,1470=>516,1471=>0,1472=>297,1473=>0,1474=>0,1475=>333,1476=>0,1488=>714,1489=>651, +1490=>557,1491=>638,1492=>682,1493=>297,1494=>443,1495=>682,1496=>670,1497=>284,1498=>590,1499=>595, +1500=>667,1501=>683,1502=>704,1503=>297,1504=>429,1505=>670,1506=>653,1507=>661,1508=>660,1509=>616, +1510=>671,1511=>672,1512=>600,1513=>840,1514=>756,1520=>554,1521=>550,1522=>542,1523=>238,1524=>474, +2561=>0,2562=>122,2563=>313,2565=>897,2566=>1157,2567=>930,2568=>966,2569=>762,2570=>762,2575=>729, +2576=>904,2579=>773,2580=>903,2581=>726,2582=>672,2583=>741,2584=>790,2585=>702,2586=>723,2587=>693, +2588=>688,2589=>673,2590=>683,2591=>686,2592=>711,2593=>680,2594=>693,2595=>729,2596=>691,2597=>694, +2598=>699,2599=>666,2600=>669,2602=>683,2603=>690,2604=>660,2605=>659,2606=>692,2607=>772,2608=>673, +2610=>731,2611=>814,2613=>663,2614=>704,2616=>702,2617=>650,2620=>0,2622=>307,2623=>304,2624=>306, +2625=>7,2626=>7,2631=>7,2632=>8,2635=>6,2636=>5,2637=>8,2649=>684,2650=>813,2651=>715, +2652=>695,2654=>709,2662=>697,2663=>630,2664=>696,2665=>690,2666=>646,2667=>636,2668=>571,2669=>682, +2670=>718,2671=>730,2672=>9,2673=>162,2674=>722,2675=>760,2676=>1110,4256=>616,4257=>645,4258=>664, +4259=>839,4260=>627,4261=>630,4262=>827,4263=>928,4264=>639,4265=>630,4266=>951,4267=>606,4268=>608, +4269=>835,4270=>630,4271=>610,4272=>804,4273=>615,4274=>823,4275=>747,4276=>870,4277=>627,4278=>840, +4279=>627,4280=>665,4281=>610,4282=>799,4283=>598,4284=>665,4285=>664,4286=>608,4287=>886,4288=>629, +4304=>463,4305=>516,4306=>564,4307=>706,4308=>459,4309=>476,4310=>623,4311=>711,4312=>494,4313=>476, +4314=>894,4315=>500,4316=>500,4317=>712,4318=>493,4319=>503,4320=>712,4321=>503,4322=>710,4323=>670, +4324=>707,4325=>459,4326=>691,4327=>465,4328=>492,4329=>480,4330=>656,4331=>500,4332=>492,4333=>524, +4334=>500,4335=>688,4336=>510,4337=>739,4338=>450,4339=>479,4340=>502,4341=>501,4345=>564,4347=>515, +7680=>722,7681=>556,7682=>722,7683=>611,7684=>722,7685=>611,7686=>722,7687=>611,7688=>722,7689=>556, +7690=>722,7691=>611,7692=>722,7693=>611,7694=>722,7695=>611,7696=>722,7697=>611,7698=>722,7699=>611, +7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556, +7710=>611,7711=>333,7712=>778,7713=>611,7714=>722,7715=>611,7716=>722,7717=>611,7718=>722,7719=>611, +7720=>722,7721=>611,7722=>722,7723=>611,7724=>278,7725=>278,7726=>278,7727=>278,7728=>722,7729=>556, +7730=>722,7731=>556,7732=>722,7733=>556,7734=>611,7735=>278,7736=>611,7737=>278,7738=>611,7739=>278, +7740=>611,7741=>278,7742=>833,7743=>889,7744=>833,7745=>889,7746=>833,7747=>889,7748=>722,7749=>611, +7750=>722,7751=>611,7752=>722,7753=>611,7754=>722,7755=>611,7756=>778,7757=>611,7758=>778,7759=>611, +7760=>778,7761=>611,7762=>778,7763=>611,7764=>667,7765=>611,7766=>667,7767=>611,7768=>722,7769=>389, +7770=>722,7771=>389,7772=>722,7773=>389,7774=>722,7775=>389,7776=>667,7777=>556,7778=>667,7779=>556, +7780=>667,7781=>556,7782=>667,7783=>556,7784=>667,7785=>556,7786=>611,7787=>333,7788=>611,7789=>333, +7790=>611,7791=>333,7792=>611,7793=>333,7794=>722,7795=>611,7796=>722,7797=>611,7798=>722,7799=>611, +7800=>722,7801=>611,7802=>722,7803=>611,7804=>667,7805=>556,7806=>667,7807=>556,7808=>944,7809=>778, +7810=>944,7811=>778,7812=>944,7813=>778,7814=>944,7815=>778,7816=>944,7817=>778,7818=>667,7819=>556, +7820=>667,7821=>556,7822=>667,7823=>556,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500, +7830=>611,7831=>333,7832=>778,7833=>556,7834=>555,7835=>333,7840=>722,7841=>556,7842=>722,7843=>556, +7844=>722,7845=>556,7846=>722,7847=>556,7848=>667,7849=>556,7850=>722,7851=>556,7852=>722,7853=>556, +7854=>722,7855=>556,7856=>722,7857=>556,7858=>722,7859=>556,7860=>722,7861=>556,7862=>722,7863=>556, +7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556, +7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>278, +7884=>778,7885=>611,7886=>778,7887=>611,7888=>778,7889=>611,7890=>778,7891=>611,7892=>778,7893=>611, +7894=>778,7895=>611,7896=>778,7897=>611,7898=>791,7899=>653,7900=>791,7901=>653,7902=>791,7903=>653, +7904=>791,7905=>653,7906=>791,7907=>653,7908=>722,7909=>611,7910=>722,7911=>611,7912=>769,7913=>656, +7914=>769,7915=>656,7916=>769,7917=>656,7918=>769,7919=>656,7920=>769,7921=>656,7922=>667,7923=>556, +7924=>667,7925=>556,7926=>667,7927=>556,7928=>667,7929=>556,7936=>632,7937=>632,7938=>632,7939=>632, +7940=>632,7941=>632,7942=>632,7943=>632,7944=>696,7945=>696,7946=>865,7947=>849,7948=>796,7949=>807, +7950=>730,7951=>750,7952=>541,7953=>541,7954=>541,7955=>541,7956=>541,7957=>541,7960=>758,7961=>760, +7962=>957,7963=>943,7964=>939,7965=>945,7968=>608,7969=>608,7970=>608,7971=>608,7972=>608,7973=>608, +7974=>608,7975=>608,7976=>823,7977=>831,7978=>1026,7979=>1017,7980=>1002,7981=>1024,7982=>908,7983=>909, +7984=>315,7985=>315,7986=>373,7987=>375,7988=>378,7989=>374,7990=>370,7991=>384,7992=>378,7993=>383, +7994=>596,7995=>579,7996=>572,7997=>576,7998=>474,7999=>459,8000=>610,8001=>610,8002=>610,8003=>610, +8004=>610,8005=>610,8008=>800,8009=>871,8010=>1084,8011=>1079,8012=>975,8013=>973,8016=>568,8017=>568, +8018=>568,8019=>568,8020=>568,8021=>568,8022=>568,8023=>568,8025=>906,8027=>1080,8029=>1115,8031=>977, +8032=>778,8033=>778,8034=>778,8035=>778,8036=>778,8037=>778,8038=>778,8039=>778,8040=>837,8041=>860, +8042=>1062,8043=>1072,8044=>962,8045=>985,8046=>922,8047=>959,8048=>632,8049=>632,8050=>541,8051=>541, +8052=>608,8053=>608,8054=>315,8055=>315,8056=>610,8057=>610,8058=>568,8059=>568,8060=>778,8061=>778, +8064=>632,8065=>632,8066=>632,8067=>632,8068=>632,8069=>632,8070=>632,8071=>632,8072=>909,8073=>906, +8074=>1061,8075=>1035,8076=>984,8077=>994,8078=>910,8079=>916,8080=>608,8081=>608,8082=>608,8083=>608, +8084=>608,8085=>608,8086=>608,8087=>608,8088=>1006,8089=>1015,8090=>1204,8091=>1207,8092=>1188,8093=>1209, +8094=>1096,8095=>1105,8096=>778,8097=>778,8098=>778,8099=>778,8100=>778,8101=>778,8102=>778,8103=>778, +8104=>1026,8105=>1048,8106=>1251,8107=>1260,8108=>1150,8109=>1177,8110=>1106,8111=>1142,8112=>632,8113=>632, +8114=>632,8115=>632,8116=>660,8118=>632,8119=>632,8120=>696,8121=>696,8122=>696,8123=>696,8124=>907, +8125=>278,8126=>346,8127=>278,8128=>278,8129=>333,8130=>608,8131=>608,8132=>560,8134=>608,8135=>608, +8136=>776,8137=>793,8138=>847,8139=>854,8140=>848,8141=>492,8142=>489,8143=>394,8144=>335,8145=>354, +8146=>367,8147=>368,8150=>353,8151=>366,8152=>240,8153=>259,8154=>418,8155=>416,8157=>481,8158=>589, +8159=>333,8160=>568,8161=>568,8162=>568,8163=>568,8164=>595,8165=>595,8166=>568,8167=>568,8168=>771, +8169=>771,8170=>951,8171=>982,8172=>806,8173=>333,8174=>333,8175=>333,8178=>778,8179=>778,8180=>778, +8182=>778,8183=>778,8184=>909,8185=>809,8186=>897,8187=>825,8188=>978,8189=>333,8190=>278,8192=>500, +8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100, +8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8214=>437, +8215=>556,8219=>278,8223=>500,8227=>350,8228=>278,8229=>666,8231=>278,8232=>0,8233=>0,8234=>0, +8235=>0,8236=>0,8237=>0,8238=>0,8239=>500,8241=>1367,8242=>238,8243=>426,8244=>614,8245=>238, +8246=>379,8247=>571,8248=>450,8251=>622,8252=>666,8253=>614,8254=>556,8255=>658,8256=>658,8257=>438, +8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1222,8264=>944,8265=>944,8266=>556,8267=>537, +8268=>537,8269=>537,8270=>389,8271=>333,8272=>658,8273=>389,8274=>634,8275=>568,8276=>658,8277=>793, +8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0, +8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>351,8308=>351,8309=>351,8310=>351, +8311=>351,8312=>351,8313=>351,8314=>351,8315=>351,8316=>351,8317=>351,8318=>351,8319=>351,8320=>351, +8321=>301,8322=>351,8323=>351,8324=>351,8325=>351,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350, +8331=>350,8332=>350,8333=>350,8334=>350,8355=>611,8356=>591,8357=>889,8358=>727,8360=>1265,8362=>1049, +8363=>580,8368=>605,8373=>591,8400=>0,8401=>0,8402=>0,8403=>0,8406=>0,8407=>0,8411=>0, +8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8422=>0,8423=>0,8424=>0, +8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>985,8449=>1007, +8451=>1034,8453=>981,8454=>1042,8455=>667,8457=>919,8465=>606,8468=>881,8470=>979,8471=>784,8476=>699, +8480=>1000,8481=>1230,8486=>766,8487=>778,8489=>315,8490=>741,8491=>729,8494=>556,8498=>588,8501=>714, +8502=>651,8503=>557,8504=>638,8506=>871,8507=>1230,8513=>778,8514=>611,8515=>611,8516=>667,8523=>669, +8525=>1072,8526=>482,8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869, +8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>667, +8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223,8556=>611,8557=>722,8558=>722, +8559=>833,8560=>278,8561=>556,8562=>834,8563=>834,8564=>556,8565=>834,8566=>1112,8567=>1390,8568=>834, +8569=>556,8570=>834,8571=>1112,8572=>278,8573=>556,8574=>611,8575=>889,8592=>964,8593=>964,8594=>964, +8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8606=>964, +8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964, +8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8704=>722,8706=>556,8707=>667, +8710=>729,8711=>729,8721=>856,8722=>584,8725=>869,8730=>594,8747=>608,8800=>548,8804=>584,8805=>584, +9251=>500,9674=>541,9772=>923,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595, +9831=>776,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,10048=>1453,11799=>333, +64256=>607,64257=>576,64258=>603,64259=>849,64260=>849,64275=>1243,64276=>1226,64277=>1233,64278=>1238,64279=>1448, +64285=>284,64286=>305,64287=>542,64288=>653,64289=>964,64290=>888,64291=>932,64292=>845,64293=>917,64294=>933, +64295=>850,64296=>1006,64297=>584,64298=>840,64299=>840,64300=>840,64301=>840,64302=>714,64303=>714,64304=>714, +64305=>651,64306=>557,64307=>638,64308=>682,64309=>348,64310=>443,64312=>670,64313=>354,64314=>590,64315=>595, +64316=>667,64318=>704,64320=>429,64321=>670,64323=>661,64324=>660,64326=>671,64327=>672,64328=>600,64329=>840, +64330=>756,64331=>212,64332=>591,64333=>550,64334=>568,64335=>714,65533=>788); +$enc=''; +$diff=''; +$file='freesansb.z'; +$ctg='freesansb.ctg.z'; +$originalsize=283180; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansb.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansb.z new file mode 100755 index 00000000..800fed29 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansb.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansbi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansbi.ctg.z new file mode 100755 index 00000000..9e8a3c72 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansbi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansbi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansbi.php new file mode 100755 index 00000000..fad7da19 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansbi.php @@ -0,0 +1,225 @@ +1000,'Descent'=>-300,'CapHeight'=>22,'Flags'=>96,'FontBBox'=>'[-769 -1175 1591 1639]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>600); +$up=-145; +$ut=69; +$dw=600; +$cw=array( +32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333, +42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556, +52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584, +62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778, +72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778, +82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333, +92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556, +102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611, +112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556, +122=>500,123=>389,124=>280,125=>389,126=>584,8364=>640,8218=>278,402=>556,8222=>500,8230=>1000, +8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,381=>611,8216=>278,8217=>278, +8220=>500,8221=>500,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>556,8250=>333,339=>944, +382=>500,376=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556, +168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584, +178=>350,179=>350,180=>333,181=>667,182=>556,183=>278,184=>333,185=>248,186=>365,187=>556, +188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722, +198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722, +218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556, +228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278, +238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584, +248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556,256=>722,257=>556, +258=>722,259=>556,260=>722,261=>556,262=>722,263=>556,264=>722,265=>556,266=>722,267=>556, +268=>722,269=>556,270=>722,271=>722,272=>722,273=>611,274=>667,275=>556,276=>667,277=>556, +278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>611,286=>778,287=>611, +288=>778,289=>611,290=>778,291=>611,292=>722,293=>611,294=>722,295=>611,296=>278,297=>278, +298=>278,299=>278,300=>278,301=>278,302=>278,303=>268,304=>278,305=>278,306=>796,307=>487, +308=>556,309=>278,310=>722,311=>556,312=>529,313=>611,314=>278,315=>611,316=>278,317=>611, +318=>384,319=>611,320=>556,321=>611,322=>278,323=>722,324=>611,325=>722,326=>611,327=>722, +328=>611,329=>611,330=>722,331=>611,332=>778,333=>611,334=>778,335=>611,336=>778,337=>611, +340=>722,341=>389,342=>722,343=>389,344=>722,345=>389,346=>667,347=>556,348=>667,349=>556, +350=>667,351=>556,354=>611,355=>333,356=>611,357=>404,358=>611,359=>404,360=>722,361=>611, +362=>722,363=>611,364=>722,365=>611,366=>722,367=>611,368=>722,369=>611,370=>722,371=>611, +372=>944,373=>778,374=>667,375=>556,377=>611,378=>500,379=>611,380=>500,383=>333,384=>611, +385=>963,386=>722,387=>611,388=>687,389=>611,390=>722,391=>752,392=>562,393=>722,394=>968, +395=>722,396=>611,397=>609,398=>667,399=>778,400=>672,401=>611,403=>778,404=>667,405=>889, +406=>278,407=>395,408=>778,409=>556,410=>333,411=>620,412=>889,413=>722,414=>611,415=>778, +416=>778,417=>611,418=>1111,419=>722,420=>914,421=>611,422=>647,423=>667,424=>556,425=>688, +426=>441,427=>333,428=>742,429=>333,430=>611,431=>722,432=>611,433=>780,434=>722,435=>667, +436=>706,437=>611,438=>500,439=>556,440=>556,441=>645,442=>569,443=>579,446=>611,447=>608, +448=>260,449=>370,450=>584,451=>278,452=>1333,453=>1222,454=>1111,455=>1167,456=>889,457=>556, +458=>1278,459=>1000,460=>889,461=>722,462=>556,463=>278,464=>278,465=>778,466=>611,467=>722, +468=>611,469=>722,470=>611,471=>722,472=>611,473=>722,474=>611,475=>722,476=>611,477=>556, +478=>722,479=>556,480=>722,481=>556,482=>1000,483=>889,484=>811,485=>641,486=>778,487=>611, +488=>722,489=>556,490=>778,491=>611,492=>778,493=>611,494=>556,495=>556,496=>278,497=>1333, +498=>1222,499=>1111,500=>778,501=>611,503=>630,504=>722,505=>611,506=>722,507=>556,508=>1000, +509=>889,510=>778,511=>611,512=>722,513=>556,514=>722,515=>556,516=>667,517=>556,518=>667, +519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>611,526=>778,527=>611,528=>722, +529=>389,530=>722,531=>389,532=>722,533=>611,534=>722,535=>611,536=>667,537=>556,538=>611, +539=>333,540=>569,541=>486,542=>722,543=>611,548=>645,549=>500,550=>722,551=>556,552=>667, +553=>556,554=>778,555=>611,556=>778,557=>611,558=>778,559=>611,560=>778,561=>611,562=>667, +563=>556,567=>278,592=>556,593=>611,594=>611,595=>611,596=>556,597=>600,598=>611,599=>611, +600=>556,601=>556,602=>834,603=>570,604=>546,605=>820,606=>570,607=>278,608=>611,609=>611, +610=>556,611=>556,612=>656,613=>619,614=>611,615=>611,616=>278,617=>344,618=>278,619=>473, +620=>527,621=>298,622=>778,623=>889,624=>889,625=>889,626=>611,627=>611,628=>615,629=>590, +630=>878,631=>822,632=>778,633=>389,634=>389,635=>389,636=>389,637=>389,638=>455,639=>455, +640=>620,641=>586,642=>556,643=>333,644=>278,645=>333,646=>544,647=>328,648=>333,649=>623, +650=>726,651=>639,652=>556,653=>778,654=>556,655=>556,656=>500,657=>571,658=>556,659=>642, +660=>611,661=>611,662=>611,664=>611,665=>572,666=>570,667=>616,668=>603,669=>552,670=>556, +671=>454,672=>611,673=>611,674=>611,684=>520,688=>500,689=>500,690=>167,691=>333,692=>333, +693=>333,694=>348,695=>500,696=>345,697=>278,698=>454,699=>278,700=>333,701=>278,702=>333, +703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,711=>333,712=>333,713=>333, +714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333,721=>333,722=>333,723=>333, +724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,733=>333,734=>333, +735=>510,736=>333,737=>333,738=>333,739=>357,740=>334,741=>526,742=>526,743=>526,744=>526, +745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333,752=>333,753=>333,754=>333, +755=>333,756=>333,757=>437,758=>437,759=>400,760=>333,761=>200,762=>200,763=>200,764=>200, +765=>332,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0, +775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0, +785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0, +795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0, +805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0, +815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0, +825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0, +835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0, +845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0, +855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0, +865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0, +875=>0,876=>0,877=>0,878=>0,879=>0,884=>208,885=>247,890=>364,894=>333,900=>239, +901=>446,902=>688,903=>333,904=>903,905=>962,906=>448,908=>904,910=>991,911=>932,912=>346, +913=>764,914=>688,915=>642,916=>744,917=>710,918=>688,919=>743,920=>810,921=>296,922=>744, +923=>744,924=>860,925=>714,926=>690,927=>822,928=>781,929=>698,931=>688,932=>688,933=>744, +934=>777,935=>783,936=>805,937=>780,938=>296,939=>744,940=>640,941=>530,942=>597,943=>339, +944=>575,945=>656,946=>576,947=>591,948=>620,949=>570,950=>522,951=>586,952=>586,953=>346, +954=>576,955=>620,956=>667,957=>564,958=>530,959=>610,960=>721,961=>626,962=>595,963=>676, +964=>592,965=>575,966=>801,967=>632,968=>722,969=>800,970=>346,971=>575,972=>609,973=>604, +974=>769,977=>580,978=>742,979=>857,980=>620,981=>778,982=>740,983=>601,1008=>556,1009=>566, +1012=>778,1013=>328,1024=>667,1025=>667,1026=>790,1027=>617,1028=>731,1029=>667,1030=>278,1031=>278, +1032=>556,1033=>1110,1034=>1088,1035=>790,1036=>722,1037=>757,1038=>698,1039=>722,1040=>722,1041=>722, +1042=>722,1043=>617,1044=>876,1045=>667,1046=>1100,1047=>670,1048=>757,1049=>757,1050=>722,1051=>715, +1052=>874,1053=>753,1054=>778,1055=>753,1056=>680,1057=>722,1058=>611,1059=>698,1060=>909,1061=>657, +1062=>845,1063=>688,1064=>1132,1065=>1217,1066=>835,1067=>980,1068=>678,1069=>735,1070=>1142,1071=>708, +1072=>553,1073=>591,1074=>574,1075=>429,1076=>745,1077=>572,1078=>792,1079=>554,1080=>603,1081=>603, +1082=>559,1083=>583,1084=>664,1085=>603,1086=>588,1087=>603,1088=>605,1089=>549,1090=>440,1091=>541, +1092=>948,1093=>539,1094=>690,1095=>564,1096=>901,1097=>987,1098=>692,1099=>806,1100=>572,1101=>546, +1102=>893,1103=>586,1104=>572,1105=>572,1106=>616,1107=>429,1108=>549,1109=>562,1110=>281,1111=>281, +1112=>282,1113=>888,1114=>897,1115=>606,1116=>559,1117=>603,1118=>541,1119=>603,1136=>830,1137=>761, +1138=>778,1139=>590,1154=>456,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0, +1162=>791,1163=>662,1164=>639,1165=>581,1166=>670,1167=>649,1168=>623,1169=>450,1170=>623,1171=>472, +1172=>674,1173=>528,1174=>1091,1175=>803,1176=>659,1177=>548,1178=>739,1179=>569,1180=>742,1181=>560, +1182=>737,1183=>559,1184=>900,1185=>679,1186=>808,1187=>673,1188=>1004,1189=>761,1190=>1114,1191=>876, +1192=>721,1193=>548,1194=>724,1195=>554,1196=>611,1197=>454,1198=>667,1199=>584,1200=>652,1201=>632, +1202=>667,1203=>550,1204=>951,1205=>748,1206=>759,1207=>630,1208=>669,1209=>580,1210=>672,1211=>576, +1212=>977,1213=>752,1214=>957,1215=>752,1216=>318,1217=>1087,1218=>792,1219=>726,1220=>530,1221=>782, +1222=>674,1223=>749,1224=>603,1225=>823,1226=>682,1227=>675,1228=>573,1229=>941,1230=>754,1231=>310, +1232=>704,1233=>553,1234=>711,1235=>553,1236=>1000,1237=>889,1238=>667,1239=>569,1240=>738,1241=>561, +1242=>738,1243=>561,1244=>1086,1245=>792,1246=>670,1247=>554,1248=>558,1249=>546,1250=>753,1251=>603, +1252=>753,1253=>603,1254=>778,1255=>588,1256=>778,1257=>590,1258=>778,1259=>590,1260=>735,1261=>546, +1262=>698,1263=>541,1264=>698,1265=>541,1266=>698,1267=>541,1268=>686,1269=>564,1270=>617,1271=>475, +1272=>976,1273=>806,1296=>672,1297=>546,1298=>729,1299=>577,1306=>778,1307=>611,1308=>944,1309=>776, +1310=>750,1311=>573,1329=>730,1330=>713,1331=>765,1332=>752,1333=>708,1334=>801,1335=>496,1336=>713, +1337=>855,1338=>686,1339=>727,1340=>420,1341=>897,1342=>841,1343=>708,1344=>660,1345=>666,1346=>747, +1347=>698,1348=>757,1349=>630,1350=>747,1351=>651,1352=>743,1353=>657,1354=>728,1355=>799,1356=>752, +1357=>743,1358=>768,1359=>691,1360=>713,1361=>640,1362=>425,1363=>818,1364=>672,1365=>805,1366=>754, +1369=>333,1370=>222,1371=>250,1372=>333,1373=>333,1374=>352,1375=>362,1377=>873,1378=>613,1379=>634, +1380=>636,1381=>593,1382=>639,1383=>417,1384=>613,1385=>658,1386=>711,1387=>609,1388=>318,1389=>836, +1390=>670,1391=>613,1392=>607,1393=>611,1394=>626,1395=>619,1396=>618,1397=>324,1398=>613,1399=>540, +1400=>591,1401=>392,1402=>873,1403=>577,1404=>603,1405=>600,1406=>626,1407=>951,1408=>613,1409=>612, +1410=>348,1411=>951,1412=>616,1413=>606,1414=>763,1415=>626,1417=>333,1418=>398,1456=>0,1457=>0, +1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0, +1469=>0,1470=>516,1471=>0,1472=>297,1473=>0,1474=>0,1475=>333,1476=>0,1488=>714,1489=>651, +1490=>557,1491=>638,1492=>682,1493=>297,1494=>443,1495=>682,1496=>670,1497=>284,1498=>590,1499=>595, +1500=>667,1501=>683,1502=>704,1503=>297,1504=>429,1505=>670,1506=>653,1507=>661,1508=>660,1509=>616, +1510=>671,1511=>672,1512=>600,1513=>840,1514=>756,1520=>554,1521=>550,1522=>542,1523=>238,1524=>474, +4256=>616,4257=>645,4258=>664,4259=>839,4260=>627,4261=>630,4262=>827,4263=>928,4264=>639,4265=>630, +4266=>951,4267=>606,4268=>608,4269=>835,4270=>630,4271=>610,4272=>804,4273=>615,4274=>823,4275=>747, +4276=>870,4277=>627,4278=>840,4279=>627,4280=>665,4281=>610,4282=>799,4283=>598,4284=>665,4285=>664, +4286=>608,4287=>886,4288=>629,4304=>463,4305=>516,4306=>564,4307=>706,4308=>459,4309=>476,4310=>623, +4311=>711,4312=>494,4313=>476,4314=>894,4315=>500,4316=>500,4317=>712,4318=>493,4319=>503,4320=>712, +4321=>503,4322=>710,4323=>670,4324=>707,4325=>459,4326=>691,4327=>465,4328=>492,4329=>480,4330=>656, +4331=>500,4332=>492,4333=>524,4334=>500,4335=>688,4336=>510,4337=>739,4338=>450,4339=>479,4340=>502, +4341=>501,4345=>564,4347=>515,7680=>722,7681=>556,7682=>722,7683=>611,7684=>722,7685=>611,7686=>722, +7687=>611,7688=>722,7689=>556,7690=>722,7691=>611,7692=>722,7693=>611,7694=>722,7695=>611,7696=>722, +7697=>611,7698=>722,7699=>611,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667, +7707=>556,7708=>667,7709=>556,7710=>611,7711=>333,7712=>778,7713=>611,7714=>722,7715=>611,7716=>722, +7717=>611,7718=>722,7719=>611,7720=>722,7721=>611,7722=>722,7723=>611,7724=>278,7725=>278,7726=>278, +7727=>278,7728=>722,7729=>556,7730=>722,7731=>556,7732=>722,7733=>556,7734=>611,7735=>278,7736=>611, +7737=>278,7738=>611,7739=>278,7740=>611,7741=>278,7742=>833,7743=>889,7744=>833,7745=>889,7746=>833, +7747=>889,7748=>722,7749=>611,7750=>722,7751=>611,7752=>722,7753=>611,7754=>722,7755=>611,7756=>778, +7757=>611,7758=>778,7759=>611,7760=>778,7761=>611,7762=>778,7763=>611,7764=>667,7765=>611,7766=>667, +7767=>611,7768=>722,7769=>389,7770=>722,7771=>389,7772=>722,7773=>389,7774=>722,7775=>389,7776=>667, +7777=>556,7778=>667,7779=>556,7780=>667,7781=>556,7782=>667,7783=>556,7784=>667,7785=>556,7786=>611, +7787=>333,7788=>611,7789=>333,7790=>611,7791=>333,7792=>611,7793=>333,7794=>722,7795=>611,7796=>722, +7797=>611,7798=>722,7799=>611,7800=>722,7801=>611,7802=>722,7803=>611,7804=>667,7805=>556,7806=>667, +7807=>556,7808=>944,7809=>778,7810=>944,7811=>778,7812=>944,7813=>778,7814=>944,7815=>778,7816=>944, +7817=>778,7818=>667,7819=>556,7820=>667,7821=>556,7822=>667,7823=>556,7824=>611,7825=>500,7826=>611, +7827=>500,7828=>611,7829=>500,7830=>611,7831=>333,7832=>778,7833=>556,7834=>555,7835=>333,7840=>722, +7841=>556,7842=>722,7843=>556,7844=>722,7845=>556,7846=>722,7847=>556,7848=>722,7849=>556,7850=>722, +7851=>556,7852=>722,7853=>556,7854=>722,7855=>556,7856=>722,7857=>556,7858=>722,7859=>556,7860=>722, +7861=>556,7862=>722,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667, +7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278, +7881=>278,7882=>278,7883=>278,7884=>778,7885=>611,7886=>778,7887=>611,7888=>778,7889=>611,7890=>778, +7891=>611,7892=>778,7893=>611,7894=>778,7895=>611,7896=>778,7897=>611,7898=>778,7899=>611,7900=>778, +7901=>611,7902=>778,7903=>611,7904=>778,7905=>611,7906=>778,7907=>611,7908=>722,7909=>611,7910=>722, +7911=>611,7912=>722,7913=>611,7914=>722,7915=>611,7916=>722,7917=>611,7918=>722,7919=>611,7920=>722, +7921=>611,7922=>667,7923=>556,7924=>667,7925=>556,7926=>667,7927=>556,7928=>667,7929=>556,7936=>656, +7937=>656,7938=>656,7939=>656,7940=>656,7941=>656,7942=>656,7943=>656,7944=>764,7945=>764,7946=>916, +7947=>940,7948=>908,7949=>891,7950=>844,7951=>869,7952=>570,7953=>570,7954=>570,7955=>570,7956=>570, +7957=>570,7960=>842,7961=>836,7962=>1025,7963=>1051,7964=>1035,7965=>1049,7968=>586,7969=>586,7970=>586, +7971=>586,7972=>586,7973=>586,7974=>586,7975=>586,7976=>891,7977=>886,7978=>1081,7979=>1108,7980=>1085, +7981=>1096,7982=>1009,7983=>1023,7984=>346,7985=>346,7986=>346,7987=>346,7988=>346,7989=>346,7990=>346, +7991=>346,7992=>467,7993=>476,7994=>631,7995=>661,7996=>631,7997=>633,7998=>568,7999=>571,8000=>610, +8001=>610,8002=>610,8003=>610,8004=>610,8005=>610,8008=>945,8009=>905,8010=>1118,8011=>1121,8012=>1064, +8013=>1062,8016=>575,8017=>575,8018=>575,8019=>575,8020=>575,8021=>575,8022=>575,8023=>575,8025=>964, +8027=>1148,8029=>1162,8031=>1081,8032=>800,8033=>800,8034=>800,8035=>800,8036=>800,8037=>800,8038=>800, +8039=>800,8040=>904,8041=>875,8042=>1092,8043=>1087,8044=>1003,8045=>1002,8046=>1001,8047=>1025,8048=>656, +8049=>656,8050=>570,8051=>570,8052=>586,8053=>586,8054=>346,8055=>346,8056=>610,8057=>610,8058=>575, +8059=>575,8060=>800,8061=>800,8064=>656,8065=>656,8066=>656,8067=>656,8068=>656,8069=>656,8070=>656, +8071=>656,8072=>854,8073=>855,8074=>1006,8075=>1030,8076=>996,8077=>977,8078=>938,8079=>959,8080=>586, +8081=>586,8082=>586,8083=>586,8084=>586,8085=>586,8086=>586,8087=>586,8088=>960,8089=>960,8090=>1155, +8091=>1186,8092=>1161,8093=>1171,8094=>1087,8095=>1102,8096=>800,8097=>800,8098=>800,8099=>800,8100=>800, +8101=>800,8102=>800,8103=>800,8104=>1005,8105=>980,8106=>1201,8107=>1192,8108=>1109,8109=>1108,8110=>1106, +8111=>1130,8112=>656,8113=>656,8114=>656,8115=>656,8116=>640,8118=>656,8119=>656,8120=>764,8121=>764, +8122=>764,8123=>764,8124=>854,8125=>278,8126=>201,8127=>147,8128=>278,8129=>333,8130=>586,8131=>586, +8132=>597,8134=>586,8135=>586,8136=>911,8137=>925,8138=>941,8139=>948,8140=>826,8141=>402,8142=>403, +8143=>147,8144=>346,8145=>346,8146=>346,8147=>346,8150=>346,8151=>346,8152=>296,8153=>296,8154=>511, +8155=>521,8157=>434,8158=>433,8159=>333,8160=>575,8161=>575,8162=>575,8163=>575,8164=>626,8165=>626, +8166=>575,8167=>575,8168=>744,8169=>744,8170=>901,8171=>975,8172=>837,8173=>353,8174=>351,8175=>303, +8178=>800,8179=>800,8180=>800,8182=>800,8183=>800,8184=>979,8185=>918,8186=>936,8187=>877,8188=>895, +8189=>333,8190=>159,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556, +8200=>278,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333, +8210=>556,8213=>1000,8214=>437,8215=>556,8219=>278,8223=>503,8227=>350,8228=>278,8229=>666,8231=>278, +8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>500,8241=>1372,8242=>238, +8243=>426,8244=>614,8245=>238,8246=>379,8247=>571,8248=>450,8251=>622,8252=>666,8253=>617,8254=>556, +8255=>658,8256=>658,8257=>438,8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1222,8264=>944, +8265=>944,8266=>556,8267=>556,8268=>537,8269=>537,8270=>389,8271=>333,8272=>658,8273=>389,8274=>634, +8275=>568,8276=>658,8277=>793,8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604, +8285=>224,8286=>224,8287=>0,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>351, +8308=>351,8309=>351,8310=>351,8311=>351,8312=>351,8313=>351,8314=>351,8315=>351,8316=>351,8317=>351, +8318=>351,8319=>351,8320=>351,8321=>251,8322=>351,8323=>351,8324=>351,8325=>351,8326=>351,8327=>351, +8328=>351,8329=>351,8330=>350,8331=>350,8332=>350,8333=>350,8334=>350,8355=>611,8356=>576,8357=>833, +8358=>724,8360=>1286,8362=>1049,8363=>571,8368=>594,8373=>591,8448=>985,8449=>1007,8451=>1020,8453=>981, +8454=>1042,8455=>667,8457=>930,8465=>606,8468=>883,8470=>1006,8471=>784,8476=>699,8480=>1000,8481=>1230, +8486=>780,8487=>780,8489=>286,8490=>722,8491=>722,8494=>556,8498=>626,8501=>714,8502=>651,8503=>557, +8504=>638,8506=>906,8507=>1155,8513=>778,8514=>611,8515=>611,8516=>667,8523=>710,8525=>1072,8526=>500, +8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869, +8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223, +8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223,8556=>611,8557=>722,8558=>722,8559=>833,8560=>278, +8561=>556,8562=>834,8563=>834,8564=>556,8565=>834,8566=>1112,8567=>1390,8568=>834,8569=>556,8570=>834, +8571=>1112,8572=>278,8573=>556,8574=>611,8575=>889,8592=>964,8593=>964,8594=>964,8595=>964,8596=>964, +8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8606=>964,8607=>964,8608=>964, +8609=>964,8610=>964,8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964,8644=>964,8645=>964, +8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8706=>608,8710=>729,8721=>856,8722=>584,8723=>584, +8725=>1107,8730=>597,8800=>584,8804=>584,8805=>584,9251=>500,9674=>489,9824=>626,9825=>694,9826=>595, +9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556, +9838=>556,9839=>556,11799=>333,64256=>607,64257=>576,64258=>603,64259=>849,64260=>849,64275=>1243,64276=>1226, +64277=>1233,64278=>1238,64279=>1448,64285=>284,64286=>305,64287=>542,64288=>653,64289=>964,64290=>888,64291=>932, +64292=>845,64293=>917,64294=>933,64295=>850,64296=>1006,64297=>584,64298=>840,64299=>840,64300=>840,64301=>840, +64302=>714,64303=>714,64304=>714,64305=>651,64306=>557,64307=>638,64308=>682,64309=>348,64310=>443,64312=>670, +64313=>354,64314=>590,64315=>595,64316=>667,64318=>704,64320=>429,64321=>670,64323=>661,64324=>660,64326=>671, +64327=>672,64328=>600,64329=>840,64330=>756,64331=>212,64332=>591,64333=>550,64334=>568,64335=>714,65533=>788); +$enc=''; +$diff=''; +$file='freesansbi.z'; +$ctg='freesansbi.ctg.z'; +$originalsize=269952; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansbi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansbi.z new file mode 100755 index 00000000..62a33225 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansbi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansi.ctg.z new file mode 100755 index 00000000..fe5d4717 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansi.php new file mode 100755 index 00000000..d3d4ca24 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansi.php @@ -0,0 +1,239 @@ +1000,'Descent'=>-300,'CapHeight'=>22,'Flags'=>96,'FontBBox'=>'[-898 -431 1572 1072]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>600); +$up=-176; +$ut=50; +$dw=600; +$cw=array( +32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333, +42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556, +52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584, +62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778, +72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778, +82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278, +92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556, +102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556, +112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500, +122=>500,123=>334,124=>260,125=>334,126=>584,8364=>655,8218=>222,402=>278,8222=>333,8230=>1000, +8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>250,338=>1000,381=>611,8216=>222,8217=>222, +8220=>333,8221=>333,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>500,8250=>250,339=>944, +382=>500,376=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556, +168=>333,169=>737,170=>370,171=>444,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584, +178=>352,179=>352,180=>333,181=>556,182=>537,183=>278,184=>333,185=>250,186=>365,187=>444, +188=>947,189=>947,190=>947,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667, +198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722, +218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556, +228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278, +238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584, +248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556, +258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500, +268=>722,269=>500,270=>722,271=>722,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556, +278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556, +288=>778,289=>556,290=>778,291=>527,292=>722,293=>556,294=>722,295=>556,296=>278,297=>278, +298=>278,299=>278,300=>278,301=>278,302=>278,303=>222,304=>278,305=>278,306=>742,307=>362, +308=>500,309=>222,310=>667,311=>500,312=>510,313=>556,314=>222,315=>556,316=>222,317=>556, +318=>387,319=>556,320=>409,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722, +328=>556,329=>722,330=>722,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556, +340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500, +350=>667,351=>500,354=>611,355=>278,356=>611,357=>443,358=>611,359=>278,360=>722,361=>556, +362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556, +372=>944,373=>722,374=>667,375=>500,377=>611,378=>500,379=>611,380=>500,383=>278,384=>556, +385=>854,386=>667,387=>556,388=>667,389=>556,390=>722,391=>722,392=>500,393=>722,394=>899, +395=>667,396=>556,397=>566,398=>667,399=>778,400=>667,401=>611,403=>778,404=>667,405=>889, +406=>278,407=>333,408=>741,409=>500,410=>333,411=>560,412=>833,413=>722,414=>556,415=>778, +416=>778,417=>556,418=>944,419=>722,420=>842,421=>556,422=>666,423=>667,424=>500,425=>611, +426=>333,427=>278,428=>611,429=>278,430=>611,431=>722,432=>556,433=>768,434=>722,435=>788, +436=>616,437=>611,438=>500,439=>611,440=>611,441=>500,442=>500,443=>556,446=>556,447=>556, +448=>260,449=>520,450=>584,451=>278,452=>1311,453=>1208,454=>1056,455=>1056,456=>778,457=>444, +458=>1158,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722, +468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556, +478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556, +488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>611,495=>500,496=>222,497=>1333, +498=>1222,499=>1056,500=>778,501=>556,503=>630,504=>722,505=>556,506=>667,507=>556,508=>1000, +509=>889,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667, +519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722, +529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,536=>667,537=>500,538=>611, +539=>278,540=>521,541=>393,542=>722,543=>556,548=>611,549=>500,550=>667,551=>556,552=>667, +553=>556,554=>778,555=>556,556=>778,557=>556,558=>778,559=>556,560=>778,561=>556,562=>667, +563=>500,567=>222,592=>556,593=>556,594=>659,595=>556,596=>500,597=>500,598=>556,599=>556, +600=>556,601=>556,602=>804,603=>500,604=>500,605=>742,606=>500,607=>222,608=>556,609=>556, +610=>546,611=>621,612=>556,613=>556,614=>556,615=>556,616=>222,617=>222,618=>278,619=>473, +620=>427,621=>222,622=>611,623=>833,624=>833,625=>833,626=>556,627=>556,628=>560,629=>556, +630=>778,631=>722,632=>728,633=>333,634=>333,635=>393,636=>333,637=>333,638=>384,639=>369, +640=>546,641=>546,642=>500,643=>278,644=>278,645=>278,646=>444,647=>278,648=>278,649=>556, +650=>626,651=>539,652=>500,653=>722,654=>500,655=>556,656=>500,657=>500,658=>500,659=>552, +660=>556,661=>556,662=>556,663=>1000,664=>556,665=>521,666=>500,667=>546,668=>500,669=>444, +670=>500,671=>430,672=>556,673=>556,674=>556,675=>944,676=>944,677=>944,678=>689,679=>506, +680=>764,681=>766,682=>660,683=>577,684=>476,685=>486,686=>565,687=>621,688=>500,689=>500, +690=>167,691=>333,692=>333,693=>393,694=>500,695=>500,696=>330,697=>278,698=>454,699=>278, +700=>278,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333, +711=>333,712=>333,713=>333,714=>333,715=>333,716=>333,717=>333,718=>333,719=>333,720=>333, +721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333, +731=>333,733=>333,734=>333,735=>510,736=>333,737=>333,738=>333,739=>333,740=>334,741=>526, +742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333, +752=>383,753=>294,754=>294,755=>327,756=>261,757=>437,758=>437,759=>333,760=>278,761=>200, +762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0, +842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0, +852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0, +862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0, +872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>199,885=>199, +890=>332,894=>278,900=>291,901=>624,902=>659,903=>278,904=>870,905=>870,906=>315,908=>876, +910=>903,911=>882,912=>333,913=>765,914=>643,915=>589,916=>760,917=>659,918=>682,919=>707, +920=>769,921=>256,922=>689,923=>765,924=>825,925=>687,926=>649,927=>766,928=>730,929=>649, +931=>678,932=>655,933=>733,934=>753,935=>783,936=>773,937=>768,938=>285,939=>733,940=>593, +941=>523,942=>595,943=>271,944=>549,945=>596,946=>534,947=>531,948=>566,949=>523,950=>470, +951=>557,952=>547,953=>293,954=>516,955=>579,956=>571,957=>518,958=>499,959=>561,960=>636, +961=>551,962=>564,963=>627,964=>505,965=>549,966=>715,967=>579,968=>662,969=>746,970=>335, +971=>549,972=>535,973=>503,974=>725,977=>580,978=>742,979=>809,980=>620,981=>728,982=>740, +983=>556,1008=>556,1009=>566,1012=>778,1013=>328,1024=>657,1025=>657,1026=>781,1027=>590,1028=>709, +1029=>655,1030=>254,1031=>254,1032=>532,1033=>1002,1034=>1166,1035=>772,1036=>674,1037=>730,1038=>605, +1039=>721,1040=>667,1041=>665,1042=>665,1043=>590,1044=>807,1045=>657,1046=>914,1047=>653,1048=>730, +1049=>730,1050=>674,1051=>656,1052=>846,1053=>721,1054=>778,1055=>720,1056=>649,1057=>709,1058=>606, +1059=>605,1060=>875,1061=>660,1062=>754,1063=>612,1064=>830,1065=>872,1066=>839,1067=>885,1068=>668, +1069=>708,1070=>1099,1071=>676,1072=>556,1073=>545,1074=>521,1075=>375,1076=>572,1077=>538,1078=>815, +1079=>488,1080=>557,1081=>557,1082=>519,1083=>508,1084=>618,1085=>558,1086=>533,1087=>557,1088=>569, +1089=>511,1090=>392,1091=>469,1092=>922,1093=>475,1094=>588,1095=>482,1096=>693,1097=>722,1098=>644, +1099=>731,1100=>521,1101=>509,1102=>790,1103=>550,1104=>538,1105=>538,1106=>566,1107=>375,1108=>506, +1109=>488,1110=>224,1111=>272,1112=>226,1113=>793,1114=>849,1115=>576,1116=>519,1117=>557,1118=>469, +1119=>557,1120=>942,1121=>693,1136=>749,1137=>666,1138=>785,1139=>528,1154=>456,1155=>0,1156=>0, +1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>751,1163=>588,1164=>685,1165=>554,1166=>656, +1167=>606,1168=>598,1169=>396,1170=>611,1171=>409,1172=>592,1173=>448,1174=>921,1175=>826,1176=>657, +1177=>493,1178=>680,1179=>529,1180=>678,1181=>524,1182=>695,1183=>528,1184=>846,1185=>650,1186=>741, +1187=>578,1188=>992,1189=>700,1190=>1047,1191=>778,1192=>687,1193=>507,1194=>709,1195=>509,1196=>611, +1197=>393,1198=>664,1199=>580,1200=>668,1201=>617,1202=>664,1203=>489,1204=>905,1205=>662,1206=>631, +1207=>498,1208=>597,1209=>472,1210=>597,1211=>471,1212=>927,1213=>716,1214=>927,1215=>716,1216=>254, +1217=>915,1218=>815,1219=>665,1220=>510,1221=>678,1222=>533,1223=>721,1224=>558,1225=>751,1226=>589, +1227=>599,1228=>472,1229=>876,1230=>649,1231=>254,1232=>667,1233=>552,1234=>667,1235=>552,1236=>1000, +1237=>889,1238=>657,1239=>538,1240=>722,1241=>511,1242=>722,1243=>511,1244=>914,1245=>815,1246=>653, +1247=>488,1248=>611,1249=>546,1250=>730,1251=>557,1252=>730,1253=>557,1254=>774,1255=>529,1256=>785, +1257=>528,1258=>785,1259=>528,1260=>708,1261=>509,1262=>605,1263=>469,1264=>605,1265=>469,1266=>605, +1267=>469,1268=>612,1269=>482,1270=>601,1271=>430,1272=>885,1273=>731,1296=>667,1297=>500,1298=>673, +1299=>557,1306=>778,1307=>556,1308=>944,1309=>722,1310=>667,1311=>510,1329=>722,1330=>705,1331=>774, +1332=>754,1333=>722,1334=>751,1335=>485,1336=>722,1337=>782,1338=>655,1339=>699,1340=>417,1341=>853, +1342=>791,1343=>711,1344=>588,1345=>663,1346=>665,1347=>665,1348=>756,1349=>623,1350=>773,1351=>603, +1352=>722,1353=>648,1354=>722,1355=>751,1356=>750,1357=>722,1358=>748,1359=>667,1360=>699,1361=>623, +1362=>417,1363=>785,1364=>638,1365=>778,1366=>716,1369=>333,1370=>222,1371=>133,1372=>325,1373=>333, +1374=>333,1375=>333,1377=>833,1378=>556,1379=>572,1380=>581,1381=>546,1382=>588,1383=>448,1384=>556, +1385=>568,1386=>582,1387=>552,1388=>301,1389=>799,1390=>556,1391=>554,1392=>533,1393=>548,1394=>552, +1395=>552,1396=>544,1397=>222,1398=>544,1399=>456,1400=>556,1401=>390,1402=>833,1403=>509,1404=>547, +1405=>533,1406=>610,1407=>887,1408=>556,1409=>545,1410=>301,1411=>853,1412=>632,1413=>579,1414=>690, +1415=>545,1417=>278,1418=>367,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0, +1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>488,1471=>0,1472=>212,1473=>0, +1474=>0,1475=>278,1476=>0,1488=>640,1489=>591,1490=>466,1491=>598,1492=>622,1493=>212,1494=>351, +1495=>623,1496=>608,1497=>200,1498=>526,1499=>550,1500=>600,1501=>623,1502=>621,1503=>212,1504=>378, +1505=>607,1506=>587,1507=>575,1508=>568,1509=>540,1510=>590,1511=>606,1512=>547,1513=>776,1514=>687, +1520=>424,1521=>412,1522=>400,1523=>184,1524=>344,2433=>0,2434=>300,2435=>264,2437=>594,2438=>790, +2439=>469,2440=>513,2441=>520,2442=>549,2443=>594,2444=>481,2447=>580,2448=>627,2451=>540,2452=>613, +2453=>570,2454=>467,2455=>471,2456=>428,2457=>483,2458=>408,2459=>509,2460=>591,2461=>563,2462=>771, +2463=>381,2464=>404,2465=>522,2466=>408,2467=>450,2468=>543,2469=>477,2470=>418,2471=>433,2472=>445, +2474=>499,2475=>584,2476=>377,2477=>555,2478=>448,2479=>423,2480=>390,2482=>498,2486=>498,2487=>425, +2488=>495,2489=>440,2492=>22,2493=>440,2494=>193,2495=>189,2496=>180,2497=>0,2498=>0,2499=>0, +2500=>0,2503=>252,2504=>243,2507=>889,2508=>865,2509=>0,2510=>356,2519=>219,2524=>523,2525=>408, +2527=>428,2528=>594,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,2537=>530,2538=>497, +2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>377,2545=>377,2546=>429,2547=>383,2548=>429, +2549=>478,2550=>545,2551=>158,2552=>365,2553=>280,2554=>357,4256=>587,4257=>620,4258=>642,4259=>815, +4260=>600,4261=>595,4262=>799,4263=>893,4264=>622,4265=>597,4266=>939,4267=>602,4268=>603,4269=>790, +4270=>587,4271=>623,4272=>799,4273=>601,4274=>792,4275=>724,4276=>847,4277=>599,4278=>812,4279=>603, +4280=>653,4281=>590,4282=>754,4283=>596,4284=>653,4285=>651,4286=>596,4287=>888,4288=>593,4304=>436, +4305=>491,4306=>528,4307=>692,4308=>447,4309=>447,4310=>628,4311=>734,4312=>449,4313=>445,4314=>843, +4315=>449,4316=>449,4317=>682,4318=>449,4319=>480,4320=>682,4321=>468,4322=>710,4323=>623,4324=>697, +4325=>447,4326=>702,4327=>447,4328=>470,4329=>440,4330=>632,4331=>449,4332=>470,4333=>536,4334=>449, +4335=>656,4336=>474,4337=>630,4338=>394,4339=>419,4340=>422,4341=>436,4345=>528,4347=>515,7680=>667, +7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722, +7691=>556,7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667, +7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611, +7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722, +7721=>556,7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667, +7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556, +7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722, +7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,7760=>778, +7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722, +7771=>333,7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667, +7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611, +7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722, +7801=>556,7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944, +7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,7820=>667, +7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556, +7831=>278,7832=>722,7833=>500,7834=>555,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556,7844=>667, +7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667, +7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667, +7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667, +7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778, +7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778, +7895=>556,7896=>778,7897=>556,7898=>778,7899=>556,7900=>778,7901=>556,7902=>778,7903=>556,7904=>778, +7905=>556,7906=>778,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>722,7913=>556,7914=>722, +7915=>556,7916=>722,7917=>556,7918=>722,7919=>556,7920=>722,7921=>556,7922=>667,7923=>500,7924=>667, +7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>596,7937=>596,7938=>596,7939=>596,7940=>596, +7941=>596,7942=>596,7943=>596,7944=>718,7945=>718,7946=>796,7947=>780,7948=>746,7949=>744,7950=>718, +7951=>718,7952=>523,7953=>523,7954=>523,7955=>523,7956=>523,7957=>523,7960=>759,7961=>751,7962=>962, +7963=>957,7964=>958,7965=>947,7968=>557,7969=>557,7970=>557,7971=>557,7972=>557,7973=>557,7974=>557, +7975=>557,7976=>807,7977=>796,7978=>1013,7979=>1002,7980=>1009,7981=>1000,7982=>882,7983=>919,7984=>293, +7985=>293,7986=>361,7987=>382,7988=>347,7989=>329,7990=>352,7991=>347,7992=>353,7993=>348,7994=>555, +7995=>557,7996=>557,7997=>545,7998=>435,7999=>448,8000=>561,8001=>561,8002=>561,8003=>561,8004=>561, +8005=>561,8008=>792,8009=>801,8010=>1031,8011=>1029,8012=>931,8013=>931,8016=>549,8017=>549,8018=>549, +8019=>549,8020=>549,8021=>549,8022=>549,8023=>549,8025=>838,8027=>1004,8029=>1036,8031=>936,8032=>746, +8033=>746,8034=>746,8035=>746,8036=>746,8037=>746,8038=>746,8039=>746,8040=>768,8041=>794,8042=>1003, +8043=>1002,8044=>922,8045=>918,8046=>871,8047=>893,8048=>596,8049=>596,8050=>523,8051=>523,8052=>557, +8053=>557,8054=>293,8055=>293,8056=>561,8057=>561,8058=>549,8059=>549,8060=>746,8061=>746,8064=>596, +8065=>596,8066=>596,8067=>596,8068=>596,8069=>596,8070=>596,8071=>596,8072=>859,8073=>861,8074=>948, +8075=>928,8076=>886,8077=>895,8078=>865,8079=>864,8080=>557,8081=>557,8082=>557,8083=>557,8084=>557, +8085=>557,8086=>557,8087=>557,8088=>890,8089=>894,8090=>1092,8091=>1084,8092=>1095,8093=>1080,8094=>953, +8095=>986,8096=>746,8097=>746,8098=>746,8099=>746,8100=>746,8101=>746,8102=>746,8103=>746,8104=>892, +8105=>907,8106=>1113,8107=>1095,8108=>1034,8109=>1030,8110=>983,8111=>1002,8112=>596,8113=>596,8114=>596, +8115=>596,8116=>593,8118=>596,8119=>596,8120=>765,8121=>765,8122=>765,8123=>765,8124=>861,8125=>147, +8126=>201,8127=>147,8128=>278,8129=>333,8130=>557,8131=>557,8132=>595,8134=>557,8135=>557,8136=>835, +8137=>849,8138=>895,8139=>861,8140=>786,8141=>602,8142=>601,8143=>333,8144=>335,8145=>322,8146=>357, +8147=>336,8150=>340,8151=>320,8152=>300,8153=>298,8154=>439,8155=>408,8157=>434,8158=>433,8159=>333, +8160=>549,8161=>549,8162=>549,8163=>549,8164=>551,8165=>551,8166=>549,8167=>549,8168=>733,8169=>733, +8170=>794,8171=>832,8172=>739,8173=>333,8174=>624,8175=>303,8178=>746,8179=>746,8180=>725,8182=>746, +8183=>746,8184=>889,8185=>828,8186=>836,8187=>811,8188=>867,8189=>333,8190=>159,8192=>500,8193=>1000, +8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100,8203=>0, +8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8214=>312,8215=>567, +8219=>221,8223=>333,8227=>350,8228=>278,8229=>666,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0, +8236=>0,8237=>0,8238=>0,8239=>500,8241=>1360,8242=>278,8243=>469,8244=>680,8245=>278,8246=>469, +8247=>680,8248=>376,8251=>622,8252=>556,8253=>556,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840, +8259=>400,8260=>167,8261=>334,8262=>334,8263=>1112,8264=>834,8265=>834,8266=>556,8267=>537,8268=>537, +8269=>537,8270=>389,8271=>278,8272=>658,8273=>389,8274=>634,8275=>500,8276=>658,8277=>1000,8278=>515, +8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0, +8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>350,8308=>351,8309=>351,8310=>351,8311=>351, +8312=>351,8313=>351,8314=>350,8315=>350,8316=>350,8317=>350,8318=>350,8319=>350,8320=>351,8321=>251, +8322=>351,8323=>351,8324=>351,8325=>353,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350,8331=>350, +8332=>350,8333=>350,8334=>350,8353=>615,8354=>601,8355=>611,8356=>556,8357=>833,8358=>682,8359=>1205, +8360=>1222,8361=>879,8362=>869,8363=>538,8365=>667,8366=>611,8368=>570,8369=>684,8370=>717,8371=>667, +8372=>667,8373=>640,8400=>0,8401=>0,8402=>0,8403=>0,8406=>0,8407=>0,8411=>0,8412=>0, +8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0, +8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>970,8449=>979,8451=>1019, +8452=>556,8453=>876,8454=>922,8455=>667,8457=>867,8459=>969,8460=>615,8462=>556,8463=>572,8464=>809, +8465=>606,8466=>874,8468=>747,8470=>934,8471=>737,8472=>600,8475=>850,8476=>699,8480=>1000,8481=>1220, +8486=>768,8487=>744,8488=>512,8489=>286,8490=>722,8491=>722,8492=>908,8493=>623,8494=>556,8496=>562, +8498=>556,8499=>1080,8501=>520,8502=>591,8503=>456,8504=>598,8506=>843,8507=>1220,8513=>778,8514=>556, +8515=>556,8516=>667,8522=>516,8523=>640,8525=>936,8526=>477,8531=>869,8532=>869,8533=>869,8534=>869, +8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278, +8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945, +8555=>1223,8556=>556,8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>722,8564=>500, +8565=>722,8566=>944,8567=>1166,8568=>722,8569=>500,8570=>722,8571=>944,8572=>222,8573=>500,8574=>556, +8575=>833,8592=>987,8593=>603,8594=>987,8595=>603,8596=>1042,8597=>1042,8706=>556,8710=>712,8721=>804, +8722=>584,8725=>947,8730=>542,8739=>200,8741=>312,8800=>584,8804=>584,8805=>584,9251=>500,9674=>489, +9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>556, +9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,11799=>333,64256=>494,64257=>471,64258=>474,64259=>659, +64260=>654,64261=>530,64275=>1027,64276=>1056,64277=>1058,64278=>1073,64279=>1301,64285=>200,64286=>305,64287=>400, +64288=>587,64289=>890,64290=>848,64291=>872,64292=>800,64293=>850,64294=>873,64295=>797,64296=>937,64297=>584, +64298=>776,64299=>776,64300=>776,64301=>776,64302=>640,64303=>640,64304=>640,64305=>591,64306=>466,64307=>598, +64308=>622,64309=>262,64310=>351,64312=>608,64313=>270,64314=>526,64315=>550,64316=>600,64318=>621,64320=>378, +64321=>607,64323=>575,64324=>568,64326=>590,64327=>606,64328=>547,64329=>776,64330=>687,64331=>212,64332=>591, +64333=>550,64334=>568,64335=>640,65533=>788); +$enc=''; +$diff=''; +$file='freesansi.z'; +$ctg='freesansi.ctg.z'; +$originalsize=410728; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansi.z new file mode 100755 index 00000000..d675eb26 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freesansi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserif.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserif.ctg.z new file mode 100755 index 00000000..06f25fc8 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserif.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserif.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserif.php new file mode 100755 index 00000000..2a8a6995 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserif.php @@ -0,0 +1,504 @@ +900,'Descent'=>-300,'CapHeight'=>10,'Flags'=>96,'FontBBox'=>'[-879 -1201 1767 2606]','ItalicAngle'=>-33.2,'StemV'=>70,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>250,33=>333,34=>408,35=>500,36=>500,37=>833,38=>778,39=>180,40=>333,41=>333, +42=>500,43=>564,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500, +52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,60=>564,61=>564, +62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611,70=>556,71=>722, +72=>722,73=>333,74=>389,75=>722,76=>611,77=>889,78=>722,79=>722,80=>556,81=>722, +82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722,90=>611,91=>333, +92=>278,93=>333,94=>469,95=>500,96=>333,97=>444,98=>500,99=>444,100=>500,101=>444, +102=>333,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278,109=>778,110=>500,111=>500, +112=>500,113=>500,114=>333,115=>389,116=>278,117=>500,118=>500,119=>722,120=>500,121=>500, +122=>444,123=>480,124=>200,125=>480,126=>541,8364=>741,8218=>250,402=>333,8222=>444,8230=>1000, +8224=>500,8225=>500,710=>333,8240=>1000,352=>556,8249=>250,338=>889,381=>611,8216=>250,8217=>250, +8220=>444,8221=>444,8226=>350,8211=>500,8212=>1000,732=>333,8482=>980,353=>389,8250=>250,339=>722, +382=>444,376=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>200,167=>500, +168=>333,169=>760,170=>276,171=>444,172=>564,173=>333,174=>760,175=>333,176=>400,177=>564, +178=>320,179=>320,180=>333,181=>500,182=>453,183=>250,184=>333,185=>320,186=>310,187=>441, +188=>750,189=>750,190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722, +198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333, +208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722,217=>722, +218=>722,219=>722,220=>722,221=>722,222=>576,223=>500,224=>444,225=>444,226=>444,227=>444, +228=>444,229=>444,230=>667,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278, +238=>278,239=>278,240=>501,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>564, +248=>500,249=>500,250=>500,251=>500,252=>500,253=>500,254=>496,255=>500,256=>722,257=>444, +258=>722,259=>444,260=>722,261=>444,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444, +268=>667,269=>444,270=>722,271=>600,272=>722,273=>500,274=>611,275=>444,276=>611,277=>444, +278=>611,279=>444,280=>611,281=>444,282=>611,283=>444,284=>722,285=>500,286=>722,287=>500, +288=>722,289=>500,290=>722,291=>500,292=>722,293=>500,294=>722,295=>548,296=>333,297=>278, +298=>333,299=>278,300=>333,301=>278,302=>333,303=>278,304=>333,305=>278,306=>703,307=>529, +308=>389,309=>278,310=>722,311=>500,312=>500,313=>611,314=>278,315=>611,316=>278,317=>611, +318=>348,319=>611,320=>444,321=>611,322=>278,323=>722,324=>500,325=>722,326=>500,327=>722, +328=>500,329=>556,330=>722,331=>500,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500, +340=>667,341=>333,342=>667,343=>333,344=>667,345=>333,346=>556,347=>389,348=>556,349=>389, +350=>556,351=>389,354=>611,355=>278,356=>611,357=>278,358=>611,359=>278,360=>722,361=>500, +362=>722,363=>500,364=>722,365=>500,366=>722,367=>500,368=>722,369=>500,370=>722,371=>500, +372=>944,373=>722,374=>722,375=>500,377=>611,378=>444,379=>611,380=>444,383=>333,384=>500, +385=>667,386=>576,387=>500,388=>646,389=>500,390=>667,391=>667,392=>444,393=>722,394=>722, +395=>646,396=>500,397=>534,398=>611,399=>722,400=>518,401=>556,403=>722,404=>665,405=>729, +406=>333,407=>333,408=>810,409=>500,410=>278,411=>480,412=>944,413=>722,414=>500,415=>726, +416=>722,417=>516,418=>1043,419=>778,420=>556,421=>500,422=>667,423=>556,424=>389,425=>627, +426=>592,427=>278,428=>611,429=>278,430=>611,431=>800,432=>518,433=>743,434=>722,435=>822, +436=>667,437=>611,438=>444,439=>530,440=>556,441=>389,442=>394,443=>500,444=>615,445=>439, +446=>421,447=>500,448=>200,449=>400,450=>600,451=>333,452=>1333,453=>1166,454=>944,455=>1000, +456=>889,457=>556,458=>1111,459=>1000,460=>778,461=>722,462=>444,463=>333,464=>278,465=>722, +466=>500,467=>722,468=>500,469=>722,470=>500,471=>722,472=>500,473=>722,474=>500,475=>722, +476=>500,477=>444,478=>722,479=>444,480=>722,481=>444,482=>889,483=>667,484=>722,485=>500, +486=>722,487=>500,488=>722,489=>500,490=>722,491=>500,492=>722,493=>500,494=>530,495=>389, +496=>278,497=>1333,498=>1166,499=>944,500=>722,501=>500,502=>944,503=>522,504=>722,505=>500, +506=>722,507=>444,508=>889,509=>667,510=>722,511=>500,512=>722,513=>444,514=>722,515=>444, +516=>611,517=>444,518=>611,519=>444,520=>333,521=>278,522=>333,523=>278,524=>722,525=>500, +526=>722,527=>500,528=>667,529=>333,530=>667,531=>333,532=>500,533=>500,534=>722,535=>500, +536=>556,537=>389,538=>611,539=>278,540=>424,541=>455,542=>722,543=>500,544=>715,545=>588, +546=>565,547=>468,548=>611,549=>444,550=>722,551=>444,552=>611,553=>444,554=>722,555=>500, +556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>722,563=>500,564=>407,565=>597, +566=>379,567=>278,568=>771,569=>760,570=>722,571=>667,572=>444,573=>611,574=>611,575=>389, +576=>444,577=>444,578=>444,579=>667,580=>722,581=>722,582=>611,583=>444,584=>389,585=>278, +586=>796,587=>590,588=>667,589=>333,590=>722,591=>500,592=>444,593=>500,594=>507,595=>500, +596=>444,597=>444,598=>500,599=>500,600=>444,601=>444,602=>722,603=>426,604=>426,605=>674, +606=>454,607=>278,608=>500,609=>500,610=>484,611=>500,612=>582,613=>500,614=>500,615=>500, +616=>278,617=>278,618=>278,619=>278,620=>278,621=>278,622=>556,623=>778,624=>778,625=>778, +626=>500,627=>500,628=>500,629=>491,630=>668,631=>693,632=>640,633=>333,634=>333,635=>333, +636=>333,637=>333,638=>333,639=>333,640=>446,641=>446,642=>389,643=>333,644=>500,645=>333, +646=>500,647=>278,648=>278,649=>500,650=>517,651=>514,652=>500,653=>722,654=>500,655=>510, +656=>524,657=>444,658=>389,659=>456,660=>444,661=>444,662=>444,663=>444,664=>722,665=>468, +666=>454,667=>665,668=>524,669=>347,670=>500,671=>443,672=>500,673=>444,674=>444,675=>798, +676=>795,677=>805,678=>554,679=>561,680=>678,681=>722,682=>554,683=>554,684=>500,685=>500, +686=>611,687=>611,688=>300,689=>300,690=>278,691=>278,692=>278,693=>309,694=>306,695=>432, +696=>310,697=>250,698=>408,699=>333,700=>333,701=>333,702=>333,703=>333,704=>258,705=>258, +706=>374,707=>374,708=>383,709=>383,711=>333,712=>250,713=>333,714=>333,715=>333,716=>250, +717=>333,718=>333,719=>333,720=>278,721=>278,722=>333,723=>333,724=>333,725=>333,726=>333, +727=>333,728=>333,729=>333,730=>333,731=>333,733=>382,734=>336,735=>352,736=>311,737=>200, +738=>243,739=>328,740=>300,741=>460,742=>460,743=>460,744=>460,745=>460,746=>477,747=>475, +748=>339,749=>333,750=>444,751=>383,752=>383,753=>294,754=>294,755=>327,756=>261,757=>437, +758=>437,759=>333,760=>278,761=>175,762=>175,763=>175,764=>175,765=>337,766=>337,767=>326, +768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0, +778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0, +788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0, +798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0, +808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0, +818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0, +828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0, +838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0, +848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0, +858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0, +868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0, +878=>0,879=>0,884=>199,885=>199,890=>332,894=>278,900=>267,901=>333,902=>722,903=>250, +904=>800,905=>902,906=>507,908=>818,910=>861,911=>871,912=>286,913=>722,914=>667,915=>586, +916=>660,917=>611,918=>611,919=>722,920=>726,921=>333,922=>722,923=>722,924=>889,925=>722, +926=>628,927=>722,928=>722,929=>556,931=>627,932=>611,933=>696,934=>742,935=>722,936=>808, +937=>743,938=>333,939=>718,940=>583,941=>426,942=>536,943=>286,944=>514,945=>583,946=>527, +947=>480,948=>534,949=>426,950=>466,951=>536,952=>534,953=>286,954=>544,955=>476,956=>536, +957=>480,958=>514,959=>500,960=>587,961=>528,962=>452,963=>537,964=>420,965=>514,966=>643, +967=>480,968=>693,969=>693,970=>286,971=>514,972=>500,973=>514,974=>693,976=>534,977=>587, +978=>620,979=>809,980=>620,981=>640,982=>684,983=>534,984=>556,985=>500,986=>594,987=>426, +988=>556,989=>445,990=>656,991=>400,992=>722,993=>570,994=>960,995=>673,996=>581,997=>429, +998=>560,999=>407,1000=>450,1001=>321,1002=>842,1003=>593,1004=>564,1005=>413,1006=>618,1007=>438, +1008=>534,1009=>534,1010=>485,1011=>278,1012=>726,1013=>361,1014=>361,1015=>576,1016=>542,1017=>667, +1018=>889,1019=>709,1020=>534,1021=>667,1022=>1000,1023=>1000,1024=>615,1025=>613,1026=>748,1027=>570, +1028=>659,1029=>487,1030=>329,1031=>329,1032=>381,1033=>943,1034=>985,1035=>827,1036=>669,1037=>723, +1038=>709,1039=>723,1040=>711,1041=>576,1042=>626,1043=>570,1044=>639,1045=>613,1046=>937,1047=>580, +1048=>723,1049=>723,1050=>669,1051=>684,1052=>891,1053=>723,1054=>722,1055=>723,1056=>576,1057=>659, +1058=>608,1059=>709,1060=>750,1061=>714,1062=>728,1063=>682,1064=>984,1065=>988,1066=>725,1067=>863, +1068=>576,1069=>659,1070=>966,1071=>648,1072=>434,1073=>495,1074=>468,1075=>386,1076=>488,1077=>436, +1078=>662,1079=>404,1080=>524,1081=>524,1082=>498,1083=>490,1084=>632,1085=>524,1086=>491,1087=>524, +1088=>500,1089=>422,1090=>422,1091=>471,1092=>694,1093=>482,1094=>522,1095=>506,1096=>756,1097=>754, +1098=>503,1099=>626,1100=>431,1101=>430,1102=>664,1103=>492,1104=>434,1105=>434,1106=>479,1107=>386, +1108=>430,1109=>347,1110=>269,1111=>278,1112=>278,1113=>677,1114=>711,1115=>514,1116=>498,1117=>524, +1118=>471,1119=>524,1120=>978,1121=>664,1122=>718,1123=>506,1124=>939,1125=>647,1126=>912,1127=>643, +1128=>1248,1129=>894,1130=>948,1131=>662,1132=>1299,1133=>911,1134=>516,1135=>391,1136=>870,1137=>694, +1138=>726,1139=>491,1140=>780,1141=>550,1142=>780,1143=>550,1144=>1207,1145=>946,1146=>877,1147=>611, +1148=>978,1149=>664,1150=>978,1151=>664,1152=>594,1153=>428,1154=>232,1155=>0,1156=>0,1157=>0, +1158=>0,1159=>0,1160=>0,1161=>0,1162=>715,1163=>522,1164=>562,1165=>430,1166=>556,1167=>511, +1168=>564,1169=>398,1170=>586,1171=>402,1172=>573,1173=>463,1174=>1001,1175=>688,1176=>580,1177=>414, +1178=>698,1179=>517,1180=>734,1181=>537,1182=>671,1183=>498,1184=>842,1185=>573,1186=>732,1187=>524, +1188=>926,1189=>652,1190=>1014,1191=>721,1192=>671,1193=>531,1194=>667,1195=>437,1196=>611,1197=>454, +1198=>722,1199=>563,1200=>722,1201=>562,1202=>783,1203=>517,1204=>967,1205=>693,1206=>691,1207=>510, +1208=>718,1209=>538,1210=>674,1211=>508,1212=>866,1213=>566,1214=>866,1215=>566,1216=>333,1217=>937, +1218=>662,1219=>626,1220=>446,1221=>702,1222=>489,1223=>722,1224=>497,1225=>823,1226=>545,1227=>674, +1228=>504,1229=>889,1230=>630,1231=>333,1232=>711,1233=>434,1234=>711,1235=>434,1236=>889,1237=>644, +1238=>613,1239=>449,1240=>722,1241=>449,1242=>722,1243=>449,1244=>937,1245=>662,1246=>580,1247=>404, +1248=>530,1249=>366,1250=>723,1251=>524,1252=>723,1253=>524,1254=>722,1255=>491,1256=>722,1257=>491, +1258=>722,1259=>491,1260=>659,1261=>430,1262=>709,1263=>471,1264=>709,1265=>471,1266=>709,1267=>471, +1268=>682,1269=>506,1270=>564,1271=>388,1272=>863,1273=>626,1274=>556,1275=>388,1276=>720,1277=>445, +1278=>722,1279=>495,1280=>556,1281=>504,1282=>900,1283=>634,1284=>553,1285=>471,1286=>803,1287=>518, +1288=>964,1289=>637,1290=>968,1291=>682,1292=>722,1293=>433,1294=>710,1295=>504,1296=>532,1297=>409, +1298=>702,1299=>489,1300=>960,1301=>644,1302=>823,1303=>702,1304=>961,1305=>766,1306=>722,1307=>504, +1308=>944,1309=>693,1310=>690,1311=>502,1312=>994,1313=>695,1314=>1011,1315=>727,1425=>0,1426=>0, +1427=>0,1428=>0,1429=>0,1430=>0,1431=>418,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0, +1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0, +1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>440,1471=>0,1472=>126,1473=>0,1474=>0,1475=>418,1476=>0, +1477=>0,1478=>350,1479=>0,1488=>537,1489=>537,1490=>350,1491=>537,1492=>537,1493=>350,1494=>350, +1495=>537,1496=>537,1497=>350,1498=>537,1499=>537,1500=>537,1501=>537,1502=>537,1503=>350,1504=>350, +1505=>537,1506=>537,1507=>537,1508=>537,1509=>537,1510=>537,1511=>537,1512=>537,1513=>537,1514=>537, +1520=>537,1521=>537,1522=>537,1523=>396,1524=>396,1548=>226,1563=>250,1567=>473,1569=>350,1570=>321, +1571=>249,1572=>399,1573=>249,1574=>776,1575=>249,1576=>950,1577=>424,1578=>925,1579=>924,1580=>738, +1581=>748,1582=>701,1583=>397,1584=>399,1585=>328,1586=>331,1587=>951,1588=>949,1589=>949,1590=>949, +1591=>557,1592=>550,1593=>625,1594=>602,1601=>801,1602=>696,1603=>757,1604=>655,1605=>549,1606=>651, +1607=>424,1608=>399,1609=>776,1610=>776,1611=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0, +1618=>0,1619=>0,1620=>0,1621=>0,1632=>297,1633=>254,1634=>427,1635=>497,1636=>440,1637=>465, +1638=>466,1639=>421,1640=>459,1641=>424,1643=>212,1652=>300,1662=>926,1670=>750,1688=>338,1711=>874, +1740=>776,1748=>176,1920=>450,1921=>501,1922=>582,1923=>544,1924=>482,1925=>433,1926=>448,1927=>462, +1928=>474,1929=>471,1930=>469,1931=>537,1932=>499,1933=>514,1934=>471,1935=>572,1936=>880,1937=>440, +1938=>476,1939=>594,1940=>469,1941=>448,1942=>441,1943=>519,1944=>573,1945=>459,1946=>447,1947=>496, +1948=>541,1949=>887,1950=>883,1951=>964,1952=>558,1953=>505,1954=>471,1955=>554,1956=>459,1957=>486, +1958=>36,1959=>36,1960=>43,1961=>45,1962=>43,1963=>45,1964=>45,1965=>45,1966=>45,1967=>45, +1968=>0,2305=>415,2306=>398,2307=>398,2309=>862,2310=>1042,2311=>553,2312=>553,2313=>597,2314=>848, +2315=>967,2316=>828,2317=>654,2319=>654,2321=>1042,2323=>1042,2324=>1042,2325=>743,2326=>798,2327=>694, +2328=>694,2329=>730,2330=>734,2331=>888,2332=>814,2333=>834,2334=>734,2335=>629,2336=>629,2337=>653, +2338=>609,2339=>694,2340=>654,2341=>694,2342=>588,2343=>694,2344=>654,2345=>654,2346=>615,2347=>788, +2348=>621,2349=>694,2350=>694,2351=>694,2352=>575,2353=>575,2354=>787,2355=>848,2356=>848,2357=>621, +2359=>615,2360=>734,2361=>609,2364=>398,2365=>569,2366=>341,2367=>341,2368=>341,2369=>0,2370=>0, +2371=>0,2372=>0,2373=>415,2375=>615,2376=>615,2377=>341,2379=>341,2380=>341,2381=>0,2384=>1047, +2392=>743,2393=>798,2394=>694,2395=>814,2396=>653,2397=>609,2398=>788,2400=>967,2401=>828,2402=>0, +2403=>0,2404=>398,2405=>478,2406=>455,2407=>420,2408=>569,2409=>509,2410=>702,2411=>629,2412=>569, +2413=>702,2414=>609,2415=>609,2416=>626,2433=>0,2434=>300,2435=>312,2437=>594,2438=>776,2439=>469, +2440=>513,2441=>535,2442=>561,2443=>604,2444=>481,2447=>580,2448=>604,2451=>540,2452=>620,2453=>570, +2454=>485,2455=>484,2456=>471,2457=>457,2458=>408,2459=>452,2460=>591,2461=>551,2462=>771,2463=>414, +2464=>404,2465=>522,2466=>415,2467=>450,2468=>551,2469=>477,2470=>478,2471=>449,2472=>448,2474=>535, +2475=>611,2476=>443,2477=>534,2478=>492,2479=>474,2480=>442,2482=>542,2486=>507,2487=>467,2488=>523, +2489=>419,2492=>0,2493=>419,2494=>202,2495=>189,2496=>202,2497=>0,2498=>0,2499=>0,2500=>0, +2503=>294,2504=>289,2507=>774,2508=>825,2509=>0,2510=>356,2519=>219,2524=>523,2525=>420,2527=>469, +2528=>604,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,2537=>507,2538=>497,2539=>500, +2540=>482,2541=>503,2542=>517,2543=>481,2544=>443,2545=>443,2546=>429,2547=>383,2548=>432,2549=>478, +2550=>539,2551=>158,2552=>365,2553=>280,2554=>357,2561=>0,2562=>0,2563=>385,2565=>728,2566=>884, +2567=>656,2568=>656,2569=>580,2570=>580,2575=>482,2576=>728,2579=>580,2580=>728,2581=>534,2582=>518, +2583=>602,2584=>674,2585=>530,2586=>502,2587=>576,2588=>476,2589=>558,2590=>501,2591=>510,2592=>540, +2593=>508,2594=>512,2595=>558,2596=>468,2597=>518,2598=>488,2599=>518,2600=>522,2602=>518,2603=>490, +2604=>546,2605=>500,2606=>530,2607=>654,2608=>522,2610=>710,2611=>710,2613=>498,2614=>530,2616=>530, +2617=>501,2620=>286,2622=>156,2623=>174,2624=>174,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0, +2636=>0,2637=>0,2641=>0,2649=>534,2650=>618,2651=>492,2652=>484,2654=>506,2662=>616,2663=>480, +2664=>560,2665=>480,2666=>468,2667=>492,2668=>514,2669=>538,2670=>572,2671=>560,2672=>0,2673=>0, +2674=>498,2675=>596,2676=>900,2677=>0,2946=>345,2947=>616,2949=>910,2950=>1072,2951=>848,2952=>591, +2953=>492,2954=>1123,2958=>602,2959=>602,2960=>691,2962=>753,2963=>753,2964=>1597,2965=>677,2969=>697, +2970=>607,2972=>691,2974=>871,2975=>589,2979=>1230,2980=>688,2984=>560,2985=>911,2986=>477,2990=>625, +2991=>672,2992=>452,2993=>553,2994=>651,2995=>804,2996=>645,2997=>740,2999=>865,3000=>870,3001=>1067, +3006=>452,3007=>176,3008=>293,3009=>404,3010=>601,3014=>690,3015=>503,3016=>839,3018=>1188,3019=>982, +3020=>1519,3021=>234,3031=>804,3330=>417,3331=>221,3333=>1055,3334=>1195,3335=>792,3336=>1467,3337=>569, +3338=>1243,3339=>676,3340=>897,3342=>1008,3343=>1004,3344=>1538,3346=>585,3347=>981,3348=>1254,3349=>775, +3350=>798,3351=>691,3352=>1095,3353=>809,3354=>726,3355=>963,3356=>703,3357=>1244,3358=>1103,3359=>462, +3360=>531,3361=>983,3362=>1027,3363=>1102,3364=>779,3365=>731,3366=>485,3367=>737,3368=>747,3370=>779, +3371=>961,3372=>1023,3373=>500,3374=>510,3375=>792,3376=>527,3377=>511,3378=>713,3379=>553,3380=>516, +3381=>715,3382=>785,3383=>920,3384=>977,3385=>977,3389=>375,3390=>403,3391=>283,3392=>323,3393=>275, +3394=>258,3395=>378,3396=>378,3398=>542,3399=>478,3400=>1069,3402=>1127,3403=>1038,3404=>676,3405=>89, +3415=>676,3424=>676,3425=>1006,3430=>559,3431=>659,3432=>674,3433=>933,3434=>671,3435=>699,3436=>703, +3437=>688,3438=>677,3439=>684,3440=>375,3458=>355,3459=>241,3461=>501,3465=>591,3466=>613,3467=>630, +3473=>636,3476=>653,3481=>760,3482=>739,3483=>653,3484=>757,3486=>562,3488=>636,3489=>673,3490=>673, +3492=>984,3493=>984,3495=>636,3496=>653,3497=>653,3498=>653,3499=>1066,3501=>739,3502=>636,3503=>501, +3504=>653,3505=>739,3507=>501,3508=>673,3509=>636,3510=>653,3511=>739,3512=>636,3513=>653,3514=>673, +3515=>613,3517=>630,3520=>636,3521=>739,3522=>673,3523=>673,3524=>739,3525=>630,3526=>739,3530=>0, +3535=>328,3536=>288,3537=>319,3538=>0,3539=>0,3540=>0,3542=>0,3544=>380,3545=>495,3551=>492, +3585=>532,3586=>472,3587=>534,3588=>532,3589=>544,3590=>583,3591=>417,3592=>488,3593=>604,3594=>472, +3595=>534,3596=>716,3597=>717,3598=>568,3599=>568,3600=>457,3601=>637,3602=>731,3603=>790,3604=>531, +3605=>542,3606=>522,3607=>577,3608=>468,3609=>603,3610=>554,3611=>554,3612=>556,3613=>556,3614=>604, +3615=>604,3616=>568,3617=>542,3618=>496,3619=>442,3620=>530,3621=>512,3622=>568,3623=>478,3624=>543, +3625=>614,3626=>525,3627=>578,3628=>659,3629=>514,3630=>514,3631=>450,3632=>402,3633=>0,3634=>378, +3635=>415,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>620,3648=>286, +3649=>521,3650=>447,3651=>426,3652=>424,3653=>333,3654=>453,3655=>0,3656=>0,3657=>0,3658=>0, +3659=>0,3660=>0,3661=>0,3662=>0,3663=>657,3664=>528,3665=>528,3666=>571,3667=>594,3668=>631, +3669=>632,3670=>478,3671=>713,3672=>597,3673=>565,3674=>615,3675=>1381,4256=>453,4257=>448,4258=>546, +4259=>619,4260=>478,4261=>481,4262=>459,4263=>707,4264=>467,4265=>471,4266=>842,4267=>464,4268=>443, +4269=>707,4270=>460,4271=>465,4272=>686,4273=>440,4274=>550,4275=>561,4276=>580,4277=>467,4278=>630, +4279=>466,4280=>517,4281=>456,4282=>502,4283=>464,4284=>534,4285=>440,4286=>443,4287=>522,4288=>460, +4289=>463,4290=>536,4291=>455,4292=>468,4293=>449,4304=>454,4305=>452,4306=>544,4307=>629,4308=>451, +4309=>452,4310=>452,4311=>702,4312=>451,4313=>452,4314=>820,4315=>451,4316=>453,4317=>695,4318=>449, +4319=>448,4320=>694,4321=>501,4322=>544,4323=>517,4324=>560,4325=>450,4326=>627,4327=>452,4328=>491, +4329=>452,4330=>485,4331=>452,4332=>485,4333=>443,4334=>500,4335=>582,4336=>455,4337=>451,4338=>480, +4339=>414,4340=>453,4341=>418,4345=>528,4347=>410,4608=>583,4609=>770,4610=>560,4611=>525,4612=>525, +4613=>583,4614=>758,4616=>598,4617=>787,4618=>817,4619=>583,4620=>758,4621=>612,4622=>875,4623=>817, +4624=>817,4625=>1050,4626=>1050,4627=>817,4628=>1050,4629=>817,4630=>787,4631=>1021,4632=>933,4633=>1137, +4634=>1067,4635=>980,4636=>1065,4637=>962,4638=>962,4639=>1097,4640=>831,4641=>1021,4642=>851,4643=>735, +4644=>875,4645=>968,4646=>817,4647=>881,4648=>583,4649=>642,4650=>583,4651=>758,4652=>700,4653=>583, +4654=>700,4655=>758,4656=>583,4657=>787,4658=>787,4659=>583,4660=>729,4661=>583,4662=>583,4663=>817, +4664=>642,4665=>817,4666=>846,4667=>642,4668=>758,4669=>744,4670=>642,4671=>817,4672=>700,4673=>700, +4674=>700,4675=>758,4676=>700,4677=>700,4678=>729,4680=>846,4682=>1079,4683=>700,4684=>700,4685=>1021, +4688=>700,4689=>700,4690=>700,4691=>758,4692=>700,4693=>758,4694=>729,4696=>846,4698=>1079,4699=>700, +4700=>700,4701=>1021,4704=>525,4705=>758,4706=>758,4707=>525,4708=>700,4709=>773,4710=>525,4711=>787, +4712=>525,4713=>758,4714=>758,4715=>525,4716=>700,4717=>773,4718=>525,4719=>525,4720=>729,4721=>729, +4722=>729,4723=>802,4724=>729,4725=>729,4726=>758,4727=>729,4728=>758,4729=>758,4730=>758,4731=>817, +4732=>758,4733=>817,4734=>758,4735=>758,4736=>612,4737=>817,4738=>817,4739=>612,4740=>787,4741=>583, +4742=>875,4744=>962,4746=>992,4747=>700,4748=>758,4749=>904,4752=>408,4753=>583,4754=>525,4755=>554, +4756=>481,4757=>554,4758=>642,4759=>671,4760=>700,4761=>758,4762=>729,4763=>700,4764=>671,4765=>700, +4766=>758,4767=>700,4768=>583,4769=>735,4770=>822,4771=>583,4772=>793,4773=>583,4774=>583,4775=>694, +4776=>554,4777=>729,4778=>773,4779=>554,4780=>700,4781=>554,4782=>554,4784=>992,4786=>1021,4787=>671, +4788=>787,4789=>904,4792=>729,4793=>904,4794=>948,4795=>729,4796=>875,4797=>729,4798=>729,4800=>1137, +4802=>1167,4803=>758,4804=>875,4805=>1108,4808=>758,4809=>875,4810=>700,4811=>700,4812=>700,4813=>992, +4814=>758,4816=>554,4817=>787,4818=>758,4819=>583,4820=>758,4821=>496,4822=>612,4824=>525,4825=>700, +4826=>700,4827=>525,4828=>685,4829=>729,4830=>510,4831=>729,4832=>962,4833=>962,4834=>962,4835=>962, +4836=>962,4837=>1021,4838=>962,4839=>962,4840=>467,4841=>525,4842=>671,4843=>612,4844=>612,4845=>671, +4846=>671,4848=>612,4849=>875,4850=>817,4851=>642,4852=>729,4853=>729,4854=>758,4855=>817,4856=>700, +4857=>758,4858=>715,4859=>700,4860=>700,4861=>787,4862=>758,4863=>700,4864=>700,4865=>758,4866=>715, +4867=>700,4868=>700,4869=>787,4870=>758,4871=>700,4872=>467,4873=>671,4874=>671,4875=>612,4876=>612, +4877=>583,4878=>525,4880=>846,4882=>904,4883=>554,4884=>700,4885=>817,4888=>525,4889=>729,4890=>729, +4891=>612,4892=>671,4893=>583,4894=>525,4896=>817,4897=>1021,4898=>1021,4899=>817,4900=>992,4901=>758, +4902=>817,4903=>1021,4904=>1079,4905=>1137,4906=>1137,4907=>1050,4908=>1312,4909=>1050,4910=>1050,4911=>1123, +4912=>647,4913=>793,4914=>822,4915=>647,4916=>793,4917=>764,4918=>583,4919=>647,4920=>583,4921=>793, +4922=>822,4923=>583,4924=>793,4925=>764,4926=>583,4927=>793,4928=>540,4929=>758,4930=>583,4931=>467, +4932=>583,4933=>481,4934=>612,4936=>758,4937=>700,4938=>758,4939=>700,4940=>831,4941=>671,4942=>758, +4943=>700,4944=>758,4945=>758,4946=>758,4947=>817,4948=>758,4949=>758,4950=>817,4951=>758,4952=>642, +4953=>980,4954=>758,4961=>233,4962=>583,4963=>408,4964=>408,4965=>525,4966=>525,4967=>233,4968=>700, +4969=>671,4970=>612,4971=>642,4972=>642,4973=>642,4974=>583,4975=>700,4976=>758,4977=>642,4978=>583, +4979=>700,4980=>729,4981=>720,4982=>583,4983=>758,4984=>700,4985=>904,4986=>612,4987=>583,4988=>875, +5024=>711,5025=>678,5026=>604,5027=>667,5028=>796,5029=>301,5030=>516,5031=>544,5032=>457,5033=>716, +5034=>703,5035=>383,5036=>628,5037=>709,5038=>455,5039=>601,5040=>472,5041=>574,5042=>730,5043=>939, +5044=>498,5045=>528,5046=>667,5047=>891,5048=>505,5049=>792,5050=>957,5051=>725,5052=>595,5053=>733, +5054=>698,5055=>638,5056=>720,5057=>732,5058=>624,5059=>638,5060=>565,5061=>903,5062=>655,5063=>681, +5064=>675,5065=>949,5066=>683,5067=>547,5068=>693,5069=>732,5070=>529,5071=>569,5072=>536,5073=>677, +5074=>631,5075=>382,5076=>973,5077=>543,5078=>607,5079=>652,5080=>652,5081=>693,5082=>514,5083=>803, +5084=>658,5085=>597,5086=>627,5087=>659,5088=>679,5089=>706,5090=>563,5091=>618,5092=>767,5093=>776, +5094=>731,5095=>492,5096=>808,5097=>823,5098=>796,5099=>689,5100=>716,5101=>518,5102=>521,5103=>719, +5104=>563,5105=>776,5106=>634,5107=>822,5108=>621,5920=>502,5921=>502,5922=>500,5923=>498,5924=>500, +5925=>502,5926=>502,5927=>502,5928=>500,5929=>503,5930=>502,5931=>502,5932=>500,5933=>500,5934=>500, +5935=>796,5936=>500,5937=>502,5938=>0,5939=>0,5940=>0,5941=>230,5942=>397,6480=>537,6481=>537, +6482=>531,6483=>678,6484=>682,6485=>628,6486=>732,6487=>721,6488=>598,6489=>583,6490=>702,6491=>554, +6492=>683,6493=>554,6494=>710,6495=>695,6496=>523,6497=>678,6498=>589,6499=>272,6500=>506,6501=>515, +6502=>515,6503=>210,6504=>210,6505=>515,6506=>515,6507=>515,6508=>229,6509=>705,6512=>649,6513=>538, +6514=>568,6515=>520,6516=>544,6656=>820,6657=>958,6658=>758,6659=>859,6660=>958,6661=>727,6662=>904, +6663=>940,6664=>850,6665=>905,6666=>838,6667=>961,6668=>1000,6669=>880,6670=>1189,6671=>1246,6672=>1177, +6673=>757,6674=>1246,6675=>1192,6676=>709,6677=>1192,6678=>1075,6679=>0,6680=>0,6681=>534,6682=>690, +6683=>0,6686=>697,6687=>500,7424=>484,7425=>595,7426=>667,7427=>446,7428=>446,7429=>483,7430=>483, +7431=>409,7432=>426,7433=>278,7434=>260,7435=>483,7436=>409,7437=>595,7438=>483,7439=>483,7440=>426, +7441=>500,7442=>489,7443=>668,7444=>722,7445=>378,7448=>372,7449=>446,7450=>446,7451=>409,7452=>483, +7453=>488,7454=>660,7455=>500,7456=>483,7457=>632,7458=>409,7459=>355,7462=>392,7463=>483,7464=>483, +7465=>372,7466=>541,7467=>470,7468=>484,7469=>595,7470=>446,7471=>446,7472=>483,7473=>409,7474=>409, +7475=>483,7476=>483,7477=>223,7478=>260,7479=>483,7480=>409,7481=>595,7482=>483,7483=>483,7484=>483, +7485=>378,7486=>372,7487=>446,7488=>409,7489=>483,7490=>632,7491=>297,7492=>297,7493=>335,7494=>446, +7495=>335,7496=>335,7497=>297,7498=>297,7499=>285,7500=>285,7501=>335,7502=>186,7503=>335,7504=>521, +7505=>335,7506=>335,7507=>297,7510=>335,7511=>186,7512=>335,7513=>326,7514=>521,7515=>335,7517=>353, +7518=>321,7519=>357,7520=>430,7521=>321,7522=>186,7523=>223,7524=>335,7525=>335,7526=>353,7527=>321, +7528=>353,7529=>430,7530=>321,7531=>754,7532=>500,7533=>500,7534=>333,7535=>778,7536=>500,7537=>500, +7538=>333,7539=>333,7540=>389,7541=>278,7542=>444,7543=>500,7544=>483,7546=>774,7547=>217,7548=>278, +7549=>500,7550=>483,7551=>514,7552=>500,7553=>500,7554=>333,7555=>676,7556=>525,7557=>278,7558=>802, +7559=>507,7560=>500,7561=>333,7562=>389,7563=>384,7564=>500,7565=>500,7566=>444,7680=>722,7681=>444, +7682=>667,7683=>500,7684=>667,7685=>500,7686=>667,7687=>500,7688=>667,7689=>444,7690=>722,7691=>500, +7692=>722,7693=>500,7694=>722,7695=>500,7696=>720,7697=>500,7698=>722,7699=>500,7700=>611,7701=>444, +7702=>611,7703=>444,7704=>611,7705=>444,7706=>611,7707=>444,7708=>611,7709=>444,7710=>556,7711=>333, +7712=>722,7713=>500,7714=>722,7715=>500,7716=>722,7717=>500,7718=>722,7719=>500,7720=>722,7721=>500, +7722=>722,7723=>500,7724=>333,7725=>278,7726=>333,7727=>278,7728=>722,7729=>500,7730=>722,7731=>500, +7732=>722,7733=>500,7734=>611,7735=>278,7736=>611,7737=>278,7738=>611,7739=>278,7740=>611,7741=>278, +7742=>889,7743=>778,7744=>889,7745=>778,7746=>889,7747=>778,7748=>722,7749=>500,7750=>722,7751=>500, +7752=>722,7753=>500,7754=>722,7755=>500,7756=>722,7757=>500,7758=>722,7759=>500,7760=>722,7761=>500, +7762=>722,7763=>500,7764=>556,7765=>500,7766=>556,7767=>500,7768=>667,7769=>333,7770=>667,7771=>333, +7772=>667,7773=>333,7774=>667,7775=>333,7776=>556,7777=>389,7778=>556,7779=>389,7780=>556,7781=>389, +7782=>556,7783=>389,7784=>556,7785=>389,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278, +7792=>611,7793=>278,7794=>722,7795=>500,7796=>722,7797=>500,7798=>722,7799=>500,7800=>722,7801=>500, +7802=>722,7803=>500,7804=>722,7805=>500,7806=>722,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722, +7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>722,7819=>500,7820=>722,7821=>500, +7822=>722,7823=>500,7824=>611,7825=>444,7826=>611,7827=>444,7828=>611,7829=>444,7830=>500,7831=>278, +7832=>722,7833=>500,7834=>444,7835=>333,7840=>722,7841=>444,7842=>807,7843=>529,7844=>722,7845=>444, +7846=>722,7847=>444,7848=>722,7849=>454,7850=>722,7851=>444,7852=>722,7853=>444,7854=>722,7855=>444, +7856=>722,7857=>444,7858=>722,7859=>454,7860=>722,7861=>444,7862=>722,7863=>444,7864=>611,7865=>444, +7866=>611,7867=>444,7868=>611,7869=>444,7870=>611,7871=>444,7872=>611,7873=>444,7874=>613,7875=>444, +7876=>611,7877=>444,7878=>611,7879=>444,7880=>333,7881=>278,7882=>333,7883=>278,7884=>722,7885=>500, +7886=>722,7887=>500,7888=>722,7889=>500,7890=>722,7891=>500,7892=>722,7893=>500,7894=>722,7895=>500, +7896=>722,7897=>500,7898=>722,7899=>516,7900=>722,7901=>516,7902=>720,7903=>516,7904=>722,7905=>516, +7906=>722,7907=>516,7908=>722,7909=>500,7910=>717,7911=>500,7912=>800,7913=>518,7914=>800,7915=>518, +7916=>800,7917=>518,7918=>800,7919=>518,7920=>800,7921=>518,7922=>722,7923=>500,7924=>722,7925=>500, +7926=>722,7927=>501,7928=>722,7929=>500,7936=>583,7937=>583,7938=>583,7939=>583,7940=>583,7941=>583, +7942=>583,7943=>583,7944=>722,7945=>722,7946=>813,7947=>817,7948=>763,7949=>765,7950=>720,7951=>722, +7952=>426,7953=>426,7954=>426,7955=>426,7956=>426,7957=>426,7960=>770,7961=>770,7962=>902,7963=>919, +7964=>940,7965=>936,7968=>536,7969=>536,7970=>536,7971=>536,7972=>536,7973=>536,7974=>536,7975=>536, +7976=>847,7977=>859,7978=>986,7979=>1010,7980=>1026,7981=>1029,7982=>918,7983=>921,7984=>286,7985=>286, +7986=>302,7987=>320,7988=>300,7989=>306,7990=>312,7991=>303,7992=>475,7993=>507,7994=>617,7995=>654, +7996=>655,7997=>660,7998=>551,7999=>566,8000=>500,8001=>500,8002=>500,8003=>500,8004=>500,8005=>500, +8008=>816,8009=>825,8010=>969,8011=>995,8012=>938,8013=>955,8016=>514,8017=>514,8018=>514,8019=>514, +8020=>514,8021=>514,8022=>514,8023=>514,8025=>818,8027=>988,8029=>989,8031=>893,8032=>693,8033=>693, +8034=>693,8035=>693,8036=>693,8037=>693,8038=>693,8039=>693,8040=>836,8041=>843,8042=>1006,8043=>1024, +8044=>974,8045=>986,8046=>905,8047=>896,8048=>583,8049=>583,8050=>426,8051=>426,8052=>536,8053=>536, +8054=>286,8055=>286,8056=>500,8057=>500,8058=>514,8059=>514,8060=>693,8061=>693,8064=>583,8065=>583, +8066=>583,8067=>583,8068=>583,8069=>583,8070=>583,8071=>583,8072=>888,8073=>889,8074=>984,8075=>991, +8076=>943,8077=>948,8078=>884,8079=>886,8080=>536,8081=>536,8082=>536,8083=>536,8084=>536,8085=>536, +8086=>536,8087=>536,8088=>1017,8089=>1026,8090=>1153,8091=>1179,8092=>1195,8093=>1199,8094=>1088,8095=>1088, +8096=>693,8097=>693,8098=>693,8099=>693,8100=>693,8101=>693,8102=>693,8103=>693,8104=>1034,8105=>1040, +8106=>1210,8107=>1229,8108=>1176,8109=>1186,8110=>1098,8111=>1090,8112=>583,8113=>583,8114=>583,8115=>583, +8116=>583,8118=>583,8119=>583,8120=>722,8121=>722,8122=>722,8123=>722,8124=>889,8125=>250,8126=>332, +8127=>500,8128=>500,8129=>534,8130=>536,8131=>536,8132=>536,8134=>536,8135=>536,8136=>761,8137=>800, +8138=>829,8139=>893,8140=>883,8141=>500,8142=>500,8143=>500,8144=>286,8145=>286,8146=>286,8147=>286, +8150=>286,8151=>286,8152=>333,8153=>333,8154=>447,8155=>537,8157=>500,8158=>500,8159=>500,8160=>514, +8161=>514,8162=>514,8163=>514,8164=>528,8165=>528,8166=>514,8167=>514,8168=>696,8169=>696,8170=>816, +8171=>828,8172=>721,8173=>333,8174=>333,8175=>500,8178=>693,8179=>693,8180=>693,8182=>693,8183=>693, +8184=>832,8185=>899,8186=>847,8187=>852,8188=>928,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500, +8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>200,8202=>100,8203=>0,8204=>0, +8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8213=>1000,8214=>293,8215=>478,8219=>250, +8223=>444,8227=>350,8228=>620,8229=>620,8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0, +8237=>0,8238=>0,8239=>250,8241=>1363,8242=>247,8243=>411,8244=>611,8245=>220,8246=>440,8247=>660, +8248=>469,8251=>629,8252=>666,8253=>444,8254=>500,8255=>953,8256=>953,8257=>314,8258=>931,8259=>333, +8260=>167,8261=>383,8262=>383,8263=>888,8264=>777,8265=>777,8266=>500,8267=>453,8268=>453,8269=>450, +8270=>500,8271=>278,8272=>882,8273=>500,8274=>497,8275=>500,8276=>953,8277=>512,8278=>410,8279=>855, +8280=>620,8281=>620,8282=>179,8283=>621,8284=>564,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0, +8290=>0,8291=>0,8292=>0,8304=>320,8305=>300,8308=>320,8309=>320,8310=>320,8311=>320,8312=>320, +8313=>320,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,8319=>300,8320=>320,8321=>320,8322=>320, +8323=>320,8324=>320,8325=>320,8326=>320,8327=>320,8328=>320,8329=>320,8330=>300,8331=>300,8332=>300, +8333=>216,8334=>216,8336=>320,8337=>320,8338=>320,8339=>320,8340=>320,8352=>698,8353=>667,8354=>667, +8355=>556,8356=>500,8357=>778,8358=>722,8359=>940,8360=>1026,8361=>813,8362=>869,8363=>512,8365=>722, +8366=>611,8367=>1340,8368=>489,8369=>601,8370=>619,8371=>722,8372=>556,8373=>611,8400=>0,8401=>0, +8402=>0,8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0, +8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8420=>0,8421=>0, +8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0, +8432=>0,8448=>751,8449=>723,8450=>674,8451=>954,8452=>556,8453=>781,8454=>806,8455=>518,8456=>667, +8457=>822,8458=>490,8459=>824,8460=>663,8461=>818,8462=>500,8463=>500,8464=>578,8465=>613,8466=>715, +8467=>417,8468=>778,8469=>751,8470=>880,8471=>760,8472=>832,8473=>589,8474=>729,8475=>892,8476=>711, +8477=>755,8478=>667,8479=>667,8480=>879,8481=>1156,8483=>722,8484=>659,8485=>389,8486=>743,8487=>757, +8488=>663,8489=>286,8490=>722,8491=>722,8492=>846,8493=>613,8494=>533,8495=>363,8496=>587,8497=>690, +8498=>556,8499=>1021,8500=>387,8501=>537,8502=>537,8503=>350,8504=>537,8505=>417,8506=>906,8507=>1155, +8513=>663,8514=>485,8515=>485,8516=>637,8522=>516,8523=>778,8525=>899,8526=>500,8531=>750,8532=>750, +8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750,8541=>750,8542=>750, +8543=>750,8544=>333,8545=>630,8546=>927,8547=>1019,8548=>722,8549=>1019,8550=>1316,8551=>1629,8552=>1019, +8553=>722,8554=>1019,8555=>1316,8556=>611,8557=>667,8558=>722,8559=>889,8560=>278,8561=>556,8562=>834, +8563=>778,8564=>500,8565=>778,8566=>1056,8567=>1334,8568=>778,8569=>500,8570=>778,8571=>1056,8572=>278, +8573=>444,8574=>500,8575=>778,8592=>964,8593=>472,8594=>964,8595=>500,8596=>964,8597=>499,8598=>964, +8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8604=>1009,8605=>1009,8606=>964,8607=>500,8608=>964, +8609=>499,8610=>1093,8611=>1093,8612=>1093,8613=>500,8614=>1093,8615=>500,8616=>500,8617=>964,8618=>964, +8619=>964,8620=>964,8621=>1151,8622=>964,8624=>482,8625=>482,8626=>482,8627=>482,8628=>658,8629=>658, +8630=>1069,8631=>1069,8634=>939,8635=>939,8636=>964,8637=>964,8638=>499,8639=>499,8640=>964,8641=>964, +8642=>499,8643=>499,8644=>964,8645=>840,8646=>964,8647=>964,8648=>840,8649=>964,8650=>840,8651=>964, +8652=>964,8653=>964,8654=>964,8655=>964,8656=>964,8657=>550,8658=>964,8659=>550,8660=>964,8661=>550, +8662=>1047,8663=>1047,8664=>1047,8665=>1047,8666=>964,8667=>964,8668=>1092,8669=>1092,8672=>964,8674=>964, +8704=>587,8705=>716,8706=>494,8707=>587,8708=>587,8709=>746,8710=>612,8711=>612,8712=>536,8713=>536, +8714=>439,8715=>536,8716=>536,8717=>439,8718=>506,8719=>823,8720=>823,8721=>713,8722=>564,8723=>564, +8724=>564,8725=>636,8726=>636,8727=>471,8728=>497,8729=>497,8730=>549,8731=>549,8732=>549,8733=>636, +8734=>853,8735=>509,8736=>575,8737=>559,8738=>509,8739=>200,8740=>250,8741=>320,8742=>320,8743=>564, +8744=>564,8745=>654,8746=>654,8747=>416,8748=>750,8749=>1083,8750=>722,8751=>750,8752=>1083,8753=>697, +8754=>722,8755=>722,8756=>565,8757=>568,8758=>250,8759=>629,8760=>564,8761=>758,8762=>564,8763=>636, +8764=>636,8765=>636,8766=>503,8767=>614,8768=>636,8769=>636,8770=>636,8771=>636,8772=>636,8773=>636, +8774=>636,8775=>636,8776=>636,8777=>636,8778=>636,8779=>636,8780=>636,8781=>636,8782=>636,8783=>636, +8784=>564,8785=>564,8786=>564,8787=>564,8788=>735,8789=>755,8790=>564,8791=>564,8792=>564,8793=>564, +8794=>564,8795=>564,8796=>600,8797=>564,8798=>564,8799=>564,8800=>564,8801=>636,8802=>636,8803=>636, +8804=>636,8805=>636,8806=>636,8807=>636,8808=>636,8809=>636,8810=>900,8811=>899,8812=>410,8813=>636, +8814=>636,8815=>636,8816=>636,8817=>636,8818=>636,8819=>636,8820=>636,8821=>636,8822=>636,8823=>636, +8824=>636,8825=>636,8826=>636,8827=>636,8828=>636,8829=>636,8830=>636,8831=>636,8832=>636,8833=>636, +8834=>636,8835=>636,8836=>636,8837=>636,8838=>636,8839=>636,8840=>636,8841=>636,8842=>636,8843=>636, +8844=>654,8845=>654,8846=>654,8847=>636,8848=>636,8849=>636,8850=>636,8851=>636,8852=>636,8853=>636, +8854=>636,8855=>636,8856=>636,8857=>636,8858=>636,8859=>636,8860=>636,8861=>636,8862=>636,8863=>636, +8864=>636,8865=>636,8866=>600,8867=>600,8868=>712,8869=>712,8870=>466,8871=>466,8872=>595,8873=>588, +8874=>710,8875=>706,8876=>595,8877=>596,8878=>588,8879=>706,8880=>636,8881=>636,8882=>636,8883=>636, +8884=>636,8885=>636,8886=>1296,8887=>1296,8888=>966,8889=>564,8890=>626,8891=>564,8892=>564,8893=>566, +8894=>570,8895=>582,8896=>744,8897=>744,8898=>764,8899=>764,8900=>512,8901=>250,8902=>471,8903=>629, +8904=>636,8905=>636,8906=>636,8907=>816,8908=>816,8909=>636,8910=>636,8911=>636,8912=>636,8913=>636, +8914=>654,8915=>654,8916=>654,8917=>636,8918=>564,8919=>564,8920=>1215,8921=>1215,8922=>636,8923=>636, +8924=>636,8925=>636,8926=>636,8927=>636,8928=>636,8929=>636,8930=>636,8931=>636,8932=>636,8933=>636, +8934=>636,8935=>636,8936=>636,8937=>636,8938=>636,8939=>636,8940=>636,8941=>636,8942=>250,8943=>1000, +8944=>1000,8945=>1000,8946=>601,8947=>536,8948=>464,8949=>536,8950=>536,8951=>464,8952=>536,8953=>536, +8954=>601,8955=>536,8956=>464,8957=>536,8958=>464,8959=>600,8960=>780,8961=>442,8962=>794,8968=>474, +8969=>474,8970=>474,8971=>474,8976=>564,8977=>503,8978=>791,8979=>791,8980=>593,8981=>560,8982=>563, +8983=>563,8984=>800,8985=>564,8986=>805,8988=>474,8989=>474,8990=>474,8991=>474,8992=>686,8993=>686, +8994=>658,8995=>658,8996=>800,9000=>800,9001=>329,9002=>329,9031=>777,9032=>777,9040=>777,9047=>777, +9054=>777,9088=>800,9089=>800,9090=>800,9091=>800,9094=>800,9095=>800,9096=>800,9097=>800,9098=>800, +9100=>800,9103=>788,9104=>788,9105=>788,9106=>788,9108=>800,9109=>800,9110=>800,9111=>800,9112=>800, +9113=>800,9114=>800,9115=>384,9116=>384,9117=>384,9118=>384,9119=>384,9120=>384,9121=>388,9122=>388, +9123=>388,9124=>388,9125=>388,9126=>388,9127=>494,9128=>494,9129=>494,9130=>494,9131=>494,9132=>494, +9133=>494,9134=>686,9138=>1287,9139=>1287,9140=>860,9141=>861,9166=>800,9167=>800,9180=>896,9181=>896, +9182=>903,9183=>904,9184=>910,9185=>910,9186=>761,9187=>910,9189=>942,9190=>817,9251=>500,9312=>788, +9313=>788,9314=>788,9315=>788,9316=>788,9317=>788,9318=>788,9319=>788,9320=>788,9321=>788,9472=>889, +9473=>889,9474=>889,9475=>889,9484=>889,9485=>889,9486=>889,9487=>889,9488=>889,9489=>889,9490=>889, +9491=>889,9492=>889,9493=>889,9494=>889,9495=>889,9496=>889,9497=>889,9498=>889,9499=>889,9500=>889, +9501=>889,9502=>889,9503=>889,9504=>889,9505=>889,9506=>889,9507=>889,9508=>889,9509=>889,9510=>889, +9511=>889,9512=>889,9513=>889,9514=>889,9515=>889,9516=>889,9517=>889,9518=>889,9519=>889,9520=>889, +9521=>889,9522=>889,9523=>889,9524=>889,9525=>889,9526=>889,9527=>889,9528=>889,9529=>889,9530=>889, +9531=>889,9532=>889,9533=>889,9534=>889,9535=>889,9536=>889,9537=>889,9538=>889,9539=>889,9540=>889, +9541=>889,9542=>889,9543=>889,9544=>889,9545=>889,9546=>889,9547=>889,9552=>889,9553=>889,9554=>889, +9555=>889,9556=>889,9557=>889,9558=>889,9559=>889,9560=>889,9561=>889,9562=>889,9563=>889,9564=>889, +9565=>889,9566=>889,9567=>889,9568=>889,9569=>889,9570=>889,9571=>889,9572=>889,9573=>889,9574=>889, +9575=>889,9576=>889,9577=>889,9578=>889,9579=>889,9580=>889,9581=>889,9582=>889,9583=>889,9584=>889, +9585=>889,9586=>889,9587=>889,9588=>889,9589=>889,9590=>889,9591=>889,9592=>889,9593=>889,9594=>889, +9595=>889,9596=>600,9597=>889,9598=>600,9599=>889,9600=>761,9601=>761,9602=>761,9603=>761,9604=>761, +9605=>761,9606=>761,9607=>761,9608=>761,9609=>761,9610=>761,9611=>761,9612=>761,9613=>761,9614=>761, +9615=>761,9616=>761,9617=>1000,9619=>1000,9620=>761,9621=>761,9622=>761,9623=>761,9624=>761,9625=>761, +9626=>761,9627=>761,9628=>761,9629=>761,9630=>761,9631=>761,9632=>761,9633=>761,9634=>761,9635=>761, +9636=>761,9637=>761,9638=>761,9639=>761,9640=>761,9641=>761,9642=>532,9643=>532,9644=>761,9645=>761, +9646=>761,9647=>761,9648=>761,9649=>761,9650=>892,9651=>892,9652=>446,9653=>446,9654=>892,9655=>892, +9656=>446,9657=>446,9658=>892,9659=>892,9660=>892,9661=>892,9662=>446,9663=>446,9664=>892,9665=>892, +9666=>446,9667=>446,9668=>892,9669=>892,9670=>788,9671=>788,9672=>788,9673=>791,9674=>494,9675=>791, +9676=>791,9677=>785,9678=>791,9679=>791,9680=>791,9681=>791,9682=>791,9683=>791,9684=>791,9685=>791, +9686=>791,9687=>791,9688=>761,9689=>761,9690=>761,9691=>761,9692=>791,9693=>791,9694=>791,9695=>791, +9696=>791,9697=>791,9698=>761,9699=>761,9700=>761,9701=>761,9702=>791,9703=>761,9704=>761,9705=>761, +9706=>761,9707=>761,9708=>892,9709=>892,9710=>892,9711=>851,9712=>761,9713=>761,9714=>761,9715=>761, +9716=>791,9717=>791,9718=>791,9719=>791,9720=>761,9721=>761,9722=>761,9723=>761,9724=>761,9725=>570, +9726=>570,9727=>761,9728=>800,9729=>800,9730=>748,9731=>800,9732=>800,9733=>811,9734=>816,9735=>468, +9736=>677,9737=>724,9738=>944,9739=>944,9740=>686,9741=>944,9742=>715,9743=>715,9744=>757,9745=>755, +9746=>755,9747=>756,9748=>800,9749=>837,9750=>719,9751=>719,9752=>782,9753=>822,9754=>954,9755=>954, +9756=>933,9757=>489,9758=>933,9759=>489,9760=>517,9761=>660,9762=>724,9763=>732,9764=>886,9765=>577, +9766=>489,9767=>563,9768=>490,9769=>770,9770=>725,9771=>860,9772=>668,9773=>753,9774=>724,9775=>730, +9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,9784=>730,9785=>724, +9786=>724,9787=>724,9788=>799,9789=>659,9790=>659,9791=>495,9792=>495,9793=>495,9794=>686,9795=>661, +9796=>544,9797=>608,9798=>605,9799=>545,9800=>804,9801=>583,9802=>796,9803=>1006,9804=>825,9805=>1189, +9806=>1144,9807=>1189,9808=>683,9809=>808,9810=>1146,9811=>797,9812=>758,9813=>757,9814=>758,9815=>758, +9816=>758,9817=>758,9818=>758,9819=>758,9820=>758,9821=>758,9822=>758,9823=>758,9824=>770,9825=>770, +9826=>770,9827=>770,9828=>770,9829=>770,9830=>770,9831=>770,9832=>895,9833=>333,9834=>555,9835=>722, +9836=>722,9837=>415,9838=>377,9839=>402,9840=>642,9841=>655,9842=>869,9843=>905,9844=>905,9845=>905, +9846=>905,9847=>905,9848=>905,9849=>905,9850=>905,9851=>1016,9852=>1064,9853=>1064,9854=>954,9855=>606, +9856=>522,9857=>522,9858=>522,9859=>522,9860=>522,9861=>522,9862=>845,9863=>844,9864=>844,9865=>844, +9866=>748,9867=>748,9868=>748,9869=>748,9870=>748,9871=>748,9872=>726,9873=>726,9874=>963,9875=>770, +9876=>1038,9877=>388,9878=>997,9879=>787,9880=>508,9881=>809,9882=>1014,9883=>859,9884=>818,9885=>972, +9888=>1000,9889=>546,9890=>784,9891=>786,9892=>738,9893=>542,9894=>601,9895=>700,9896=>511,9897=>861, +9898=>611,9899=>611,9900=>544,9901=>782,9902=>1025,9903=>1141,9904=>1000,9905=>513,9906=>510,9907=>642, +9908=>722,9909=>719,9910=>777,9911=>495,9912=>602,9913=>836,9914=>666,9915=>666,9916=>691,9920=>689, +9921=>689,9922=>689,9923=>689,9985=>974,9986=>961,9987=>974,9988=>980,9990=>789,9991=>790,9992=>791, +9993=>690,9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846, +10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759,10012=>754,10013=>494,10014=>552, +10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10025=>823, +10026=>789,10027=>841,10028=>823,10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749, +10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708,10045=>682, +10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786, +10056=>787,10057=>713,10058=>791,10059=>785,10061=>873,10063=>762,10064=>762,10065=>759,10066=>759,10070=>784, +10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10081=>732,10082=>544,10083=>544, +10084=>910,10085=>667,10086=>760,10087=>760,10088=>390,10089=>390,10090=>317,10091=>317,10092=>276,10093=>276, +10094=>509,10095=>509,10096=>410,10097=>410,10098=>234,10099=>234,10100=>334,10101=>334,10102=>788,10103=>788, +10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788, +10114=>788,10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788, +10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788,10131=>788,10132=>894,10136=>748, +10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924, +10147=>924,10148=>917,10149=>930,10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867, +10157=>696,10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771,10167=>888, +10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,10214=>545,10215=>545,10216=>329, +10217=>329,10218=>496,10219=>496,10229=>1000,10230=>1000,10231=>1000,10232=>1000,10233=>1000,10234=>1000,10235=>1000, +10236=>1000,10752=>860,10753=>860,10754=>860,10755=>766,10756=>766,10757=>756,10758=>756,10761=>745,10781=>702, +10815=>722,11008=>1000,11009=>1000,11010=>1000,11011=>1000,11012=>1222,11013=>1000,11014=>1000,11015=>1000,11016=>1000, +11017=>1000,11018=>1000,11019=>1000,11020=>1244,11021=>1000,11026=>770,11027=>770,11028=>770,11029=>770,11030=>770, +11031=>770,11032=>770,11033=>770,11034=>770,11035=>1000,11036=>1000,11037=>283,11038=>283,11039=>846,11040=>846, +11041=>799,11042=>799,11043=>807,11044=>1000,11045=>461,11046=>461,11047=>461,11048=>461,11049=>360,11050=>360, +11051=>283,11052=>854,11053=>854,11054=>628,11055=>628,11088=>589,11089=>443,11090=>443,11091=>802,11092=>803, +11392=>677,11393=>463,11394=>532,11395=>381,11396=>615,11397=>438,11398=>969,11399=>660,11400=>647,11401=>440, +11402=>593,11403=>402,11404=>573,11405=>407,11406=>698,11407=>512,11408=>726,11409=>493,11410=>267,11411=>201, +11412=>610,11413=>433,11414=>654,11415=>468,11416=>735,11417=>536,11418=>698,11419=>511,11420=>555,11421=>378, +11422=>722,11423=>489,11424=>724,11425=>528,11426=>517,11427=>388,11428=>647,11429=>438,11430=>615,11431=>436, +11432=>651,11433=>462,11434=>762,11435=>538,11436=>654,11437=>461,11438=>635,11439=>461,11440=>964,11441=>677, +11456=>689,11457=>464,11493=>499,11494=>496,11495=>986,11496=>466,11497=>444,11498=>934,11517=>256,11518=>617, +11519=>287,11799=>333,42560=>611,42561=>444,42562=>611,42563=>444,42564=>556,42565=>389,42566=>368,42567=>286, +42572=>1145,42573=>775,42576=>1016,42577=>736,42578=>915,42579=>684,42580=>966,42581=>664,42582=>1042,42583=>648, +42584=>722,42585=>491,42588=>1042,42589=>648,42590=>780,42591=>550,42594=>911,42595=>633,42596=>957,42597=>635, +42598=>1139,42599=>777,42607=>0,42608=>0,42609=>0,42610=>0,42611=>519,42620=>0,42622=>510,64256=>589, +64257=>534,64258=>530,64259=>805,64260=>799,64262=>677,64285=>350,64286=>0,64287=>537,64288=>537,64297=>564, +64298=>537,64299=>537,64300=>537,64301=>537,64302=>537,64303=>537,64304=>537,64305=>537,64306=>350,64307=>537, +64308=>537,64309=>350,64310=>350,64312=>537,64313=>350,64314=>537,64315=>537,64316=>537,64318=>537,64320=>350, +64321=>537,64323=>537,64324=>537,64326=>537,64327=>537,64328=>537,64329=>537,64330=>537,64331=>350,64332=>537, +64333=>537,64334=>537,64335=>537,64342=>926,64343=>926,64344=>308,64345=>308,64378=>750,64379=>750,64380=>580, +64381=>580,64394=>338,64395=>338,64402=>874,64403=>874,64404=>329,64405=>329,64508=>776,64509=>700,64510=>304, +64511=>304,65010=>640,65020=>837,65136=>300,65140=>300,65142=>300,65144=>300,65146=>300,65148=>300,65152=>724, +65153=>321,65154=>275,65155=>249,65156=>275,65157=>399,65158=>399,65159=>249,65160=>275,65161=>776,65162=>776, +65163=>301,65164=>264,65165=>249,65166=>275,65167=>950,65168=>950,65169=>293,65170=>293,65171=>424,65172=>622, +65173=>925,65174=>925,65175=>308,65176=>308,65177=>924,65178=>924,65179=>298,65180=>298,65181=>738,65182=>738, +65183=>574,65184=>574,65185=>748,65186=>750,65187=>600,65188=>600,65189=>701,65190=>775,65191=>596,65192=>596, +65193=>397,65194=>397,65195=>399,65196=>399,65197=>328,65198=>328,65199=>331,65200=>331,65201=>951,65202=>951, +65203=>600,65204=>600,65205=>949,65206=>949,65207=>649,65208=>649,65209=>949,65210=>949,65211=>823,65212=>823, +65213=>949,65214=>949,65215=>805,65216=>805,65217=>557,65218=>557,65219=>460,65220=>460,65221=>550,65222=>550, +65223=>455,65224=>550,65225=>625,65226=>575,65227=>674,65228=>550,65229=>602,65230=>577,65231=>578,65232=>577, +65233=>801,65234=>801,65235=>300,65236=>300,65237=>696,65238=>696,65239=>650,65240=>650,65241=>757,65242=>757, +65243=>318,65244=>318,65245=>655,65246=>655,65247=>206,65248=>206,65249=>549,65250=>549,65251=>403,65252=>403, +65253=>651,65254=>651,65255=>323,65256=>323,65257=>424,65258=>622,65259=>525,65260=>476,65261=>399,65262=>399, +65263=>776,65264=>776,65265=>776,65266=>776,65267=>296,65268=>264,65269=>676,65270=>724,65271=>676,65272=>724, +65273=>676,65274=>724,65275=>676,65276=>724,65279=>0,65533=>788); +$enc=''; +$diff=''; +$file='freeserif.z'; +$ctg='freeserif.ctg.z'; +$originalsize=1483772; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserif.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserif.z new file mode 100755 index 00000000..67f60970 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserif.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifb.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifb.ctg.z new file mode 100755 index 00000000..77bfed16 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifb.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifb.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifb.php new file mode 100755 index 00000000..0e3d4bf9 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifb.php @@ -0,0 +1,282 @@ +900,'Descent'=>-300,'CapHeight'=>16,'Flags'=>32,'FontBBox'=>'[-796 -306 1860 932]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278,40=>333,41=>333, +42=>507,43=>676,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500, +52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>676,61=>676, +62=>676,63=>500,64=>930,65=>722,66=>667,67=>722,68=>724,69=>667,70=>611,71=>778, +72=>774,73=>386,74=>500,75=>764,76=>664,77=>943,78=>722,79=>778,80=>611,81=>778, +82=>712,83=>556,84=>667,85=>722,86=>722,87=>1000,88=>722,89=>722,90=>667,91=>333, +92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>556,99=>444,100=>556,101=>444, +102=>333,103=>500,104=>556,105=>278,106=>333,107=>556,108=>278,109=>833,110=>556,111=>500, +112=>556,113=>556,114=>444,115=>389,116=>333,117=>556,118=>500,119=>722,120=>500,121=>500, +122=>444,123=>394,124=>220,125=>394,126=>520,8364=>761,8218=>250,402=>333,8222=>500,8230=>1000, +8224=>500,8225=>500,710=>333,8240=>1000,352=>556,8249=>333,338=>1000,381=>667,8216=>250,8217=>250, +8220=>500,8221=>500,8226=>524,8211=>500,8212=>1000,732=>333,8482=>1000,353=>389,8250=>333,339=>722, +382=>444,376=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500, +168=>333,169=>747,170=>300,171=>500,172=>680,173=>333,174=>747,175=>333,176=>400,177=>676, +178=>300,179=>300,180=>333,181=>556,182=>540,183=>250,184=>333,185=>270,186=>330,187=>500, +188=>750,189=>750,190=>750,191=>500,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722, +198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>676,216=>778,217=>722, +218=>722,219=>722,220=>722,221=>722,222=>632,223=>556,224=>500,225=>500,226=>500,227=>500, +228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278, +238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>676, +248=>500,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>722,257=>500, +258=>722,259=>500,260=>722,261=>500,262=>722,263=>444,264=>722,265=>444,266=>722,267=>444, +268=>722,269=>444,270=>722,271=>616,272=>722,273=>556,274=>667,275=>444,276=>667,277=>444, +278=>667,279=>444,280=>667,281=>444,282=>667,283=>444,284=>778,285=>500,286=>778,287=>500, +288=>778,289=>500,290=>778,291=>500,292=>778,293=>556,294=>778,295=>556,296=>389,297=>278, +298=>389,299=>278,300=>389,301=>278,302=>389,303=>278,304=>389,305=>278,306=>882,307=>486, +308=>500,309=>338,310=>778,311=>556,312=>534,313=>667,314=>278,315=>667,316=>278,317=>667, +318=>398,319=>667,320=>528,321=>667,322=>278,323=>722,324=>556,325=>722,326=>556,327=>722, +328=>556,329=>556,330=>722,331=>556,332=>778,333=>500,334=>778,335=>500,336=>778,337=>500, +340=>722,341=>444,342=>722,343=>444,344=>722,345=>444,346=>556,347=>389,348=>556,349=>389, +350=>556,351=>389,354=>667,355=>333,356=>667,357=>449,358=>667,359=>333,360=>722,361=>556, +362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556, +372=>1000,373=>722,374=>722,375=>500,377=>667,378=>444,379=>667,380=>444,383=>333,384=>556, +385=>805,386=>648,387=>556,388=>667,389=>556,390=>722,391=>915,392=>605,393=>722,394=>862, +395=>667,396=>556,397=>550,398=>667,399=>778,400=>631,401=>611,403=>903,404=>776,405=>807, +406=>327,407=>389,408=>887,409=>556,410=>278,411=>495,412=>1000,413=>864,414=>556,415=>778, +416=>778,417=>550,418=>1192,419=>795,420=>749,421=>556,422=>748,423=>556,424=>389,425=>650, +426=>465,427=>333,428=>667,429=>333,430=>667,431=>839,432=>629,433=>811,434=>685,435=>853, +436=>705,437=>667,438=>444,439=>593,440=>654,441=>508,442=>500,443=>500,444=>654,445=>520, +446=>444,447=>611,448=>220,449=>418,450=>570,451=>333,452=>1391,453=>1168,454=>1000,455=>1164, +456=>997,457=>611,458=>1222,459=>1055,460=>889,461=>722,462=>500,463=>386,464=>278,465=>778, +466=>500,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722, +476=>556,477=>444,478=>722,479=>500,480=>722,481=>500,482=>1000,483=>722,484=>778,485=>500, +486=>778,487=>500,488=>764,489=>556,490=>778,491=>500,492=>778,493=>500,494=>593,495=>502, +496=>338,497=>1391,498=>1168,499=>1000,500=>778,501=>500,502=>995,503=>603,504=>722,505=>556, +506=>722,507=>500,508=>1000,509=>722,510=>778,511=>500,512=>722,513=>500,514=>722,515=>500, +516=>667,517=>444,518=>667,519=>444,520=>386,521=>278,522=>386,523=>278,524=>778,525=>500, +526=>778,527=>500,528=>712,529=>444,530=>712,531=>444,532=>722,533=>556,534=>722,535=>556, +536=>556,537=>389,538=>667,539=>333,540=>464,541=>455,542=>774,543=>556,544=>731,545=>649, +546=>568,547=>494,548=>667,549=>444,550=>722,551=>500,552=>667,553=>444,554=>778,555=>500, +556=>778,557=>500,558=>778,559=>500,560=>778,561=>500,562=>722,563=>500,564=>437,565=>636, +566=>415,567=>338,568=>776,569=>760,570=>722,571=>722,572=>444,573=>664,574=>667,575=>389, +576=>451,577=>505,578=>479,579=>686,580=>750,581=>722,582=>667,583=>478,584=>500,585=>333, +586=>808,587=>608,588=>712,589=>444,590=>757,591=>500,592=>500,593=>523,594=>523,595=>556, +596=>444,598=>556,599=>556,600=>444,601=>444,602=>611,603=>440,604=>440,605=>611,607=>333, +608=>500,609=>500,610=>556,613=>556,614=>556,615=>556,616=>278,617=>333,618=>278,619=>278, +621=>278,622=>667,623=>833,624=>833,625=>833,626=>556,627=>556,628=>556,629=>500,631=>715, +632=>667,633=>444,634=>444,635=>444,636=>444,637=>444,638=>394,639=>394,640=>556,641=>556, +642=>389,643=>333,644=>333,645=>433,647=>333,648=>333,649=>500,650=>557,651=>529,652=>500, +653=>722,654=>500,655=>500,656=>444,658=>502,660=>500,661=>500,662=>500,664=>778,665=>510, +667=>722,668=>556,670=>556,671=>444,672=>556,673=>500,674=>500,686=>611,687=>722,697=>250, +698=>408,699=>250,700=>250,701=>250,702=>300,703=>300,706=>333,707=>333,708=>333,709=>333, +711=>333,712=>333,713=>333,714=>333,715=>333,716=>300,717=>333,718=>333,719=>333,720=>278, +721=>278,722=>300,723=>300,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333, +731=>333,733=>400,734=>333,735=>352,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519, +747=>519,748=>333,749=>333,750=>480,751=>333,752=>333,753=>333,754=>333,755=>327,756=>261, +757=>437,758=>437,759=>400,760=>278,761=>175,762=>175,763=>175,764=>175,765=>333,766=>337, +767=>432,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0, +777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0, +787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0, +797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0, +807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0, +817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0, +827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0, +837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0, +847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0, +857=>0,858=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,884=>199,885=>199, +890=>0,894=>333,900=>330,901=>415,902=>722,903=>250,904=>811,905=>938,906=>556,908=>840, +910=>886,911=>879,912=>330,913=>722,914=>667,915=>611,916=>759,917=>667,918=>667,919=>774, +920=>778,921=>386,922=>777,923=>722,924=>943,925=>722,926=>650,927=>778,928=>812,929=>611, +931=>650,932=>667,933=>738,934=>868,935=>722,936=>924,937=>811,938=>386,939=>738,940=>605, +941=>440,942=>605,943=>330,944=>550,945=>605,946=>550,947=>550,948=>550,949=>440,950=>495, +951=>605,952=>550,953=>330,954=>608,955=>495,956=>605,957=>495,958=>495,959=>550,960=>605, +961=>550,962=>440,963=>550,964=>440,965=>550,966=>660,967=>495,968=>715,969=>715,970=>330, +971=>550,972=>550,973=>550,974=>715,976=>550,977=>605,978=>722,979=>871,980=>722,981=>660, +982=>715,983=>550,984=>611,985=>550,986=>650,987=>514,988=>611,989=>513,990=>715,991=>439, +992=>722,993=>605,1008=>550,1009=>550,1010=>477,1011=>333,1012=>778,1013=>424,1014=>424,1015=>632, +1016=>575,1017=>722,1018=>943,1019=>809,1020=>550,1021=>722,1022=>722,1023=>722,1024=>667,1025=>667, +1026=>848,1027=>611,1028=>722,1029=>556,1030=>386,1031=>386,1032=>500,1033=>1042,1034=>1032,1035=>912, +1036=>770,1037=>774,1038=>738,1039=>778,1040=>722,1041=>648,1042=>667,1043=>599,1044=>708,1045=>667, +1046=>1106,1047=>652,1048=>774,1049=>774,1050=>770,1051=>788,1052=>943,1053=>774,1054=>778,1055=>812, +1056=>611,1057=>722,1058=>667,1059=>738,1060=>868,1061=>722,1062=>774,1063=>754,1064=>1115,1065=>1115, +1066=>782,1067=>970,1068=>630,1069=>722,1070=>1114,1071=>729,1072=>500,1073=>500,1074=>510,1075=>430, +1076=>545,1077=>438,1078=>781,1079=>445,1080=>556,1081=>556,1082=>556,1083=>542,1084=>668,1085=>558, +1086=>500,1087=>558,1088=>549,1089=>444,1090=>494,1091=>486,1092=>809,1093=>500,1094=>560,1095=>556, +1096=>818,1097=>820,1098=>612,1099=>756,1100=>512,1101=>496,1102=>770,1103=>546,1104=>438,1105=>444, +1106=>549,1107=>430,1108=>488,1109=>386,1110=>272,1111=>278,1112=>333,1113=>784,1114=>786,1115=>552, +1116=>556,1117=>556,1118=>484,1119=>556,1120=>1018,1121=>699,1122=>781,1123=>612,1124=>1033,1125=>778, +1126=>993,1127=>692,1128=>1371,1129=>975,1130=>1106,1131=>781,1132=>1474,1133=>1066,1134=>650,1135=>424, +1136=>970,1137=>769,1138=>770,1139=>590,1140=>808,1141=>578,1142=>808,1143=>650,1144=>1284,1145=>973, +1146=>928,1147=>672,1148=>1018,1149=>693,1150=>1018,1151=>699,1152=>650,1153=>444,1154=>258,1155=>0, +1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>774,1163=>558,1164=>630,1165=>512, +1166=>611,1167=>556,1168=>614,1169=>458,1170=>614,1171=>443,1172=>631,1173=>562,1174=>1155,1175=>828, +1176=>652,1177=>452,1178=>819,1179=>600,1180=>816,1181=>590,1182=>920,1183=>664,1184=>967,1185=>633, +1186=>774,1187=>562,1188=>984,1189=>698,1190=>1069,1191=>841,1192=>722,1193=>524,1194=>722,1195=>444, +1196=>667,1197=>494,1198=>722,1199=>606,1200=>722,1201=>606,1202=>722,1203=>560,1204=>1046,1205=>778, +1206=>754,1207=>560,1208=>810,1209=>590,1210=>754,1211=>556,1212=>945,1213=>606,1214=>945,1215=>606, +1216=>386,1217=>1106,1218=>781,1219=>770,1220=>534,1221=>788,1222=>550,1223=>774,1224=>556,1225=>774, +1226=>558,1227=>778,1228=>556,1229=>943,1230=>677,1231=>386,1232=>722,1233=>500,1234=>722,1235=>500, +1236=>1000,1237=>722,1238=>667,1239=>444,1240=>778,1241=>444,1242=>778,1243=>444,1244=>1106,1245=>781, +1246=>652,1247=>445,1248=>654,1249=>389,1250=>774,1251=>556,1252=>774,1253=>556,1254=>778,1255=>500, +1256=>778,1257=>500,1258=>778,1259=>500,1260=>722,1261=>496,1262=>738,1263=>500,1264=>738,1265=>500, +1266=>738,1267=>500,1268=>754,1269=>556,1270=>599,1271=>443,1272=>970,1273=>756,1296=>652,1297=>452, +1298=>788,1299=>550,1306=>778,1307=>556,1308=>1000,1309=>722,1310=>770,1311=>558,1425=>0,1426=>0, +1427=>0,1428=>0,1429=>0,1430=>0,1431=>0,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0, +1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0, +1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0, +1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0, +1467=>0,1468=>0,1469=>0,1470=>433,1471=>0,1472=>155,1473=>0,1474=>0,1475=>400,1476=>0, +1477=>0,1478=>347,1479=>0,1488=>593,1489=>498,1490=>339,1491=>523,1492=>561,1493=>266,1494=>291, +1495=>559,1496=>576,1497=>266,1498=>496,1499=>501,1500=>510,1501=>542,1502=>581,1503=>273,1504=>347, +1505=>512,1506=>552,1507=>493,1508=>491,1509=>537,1510=>561,1511=>544,1512=>502,1513=>716,1514=>571, +1520=>532,1521=>532,1522=>532,1523=>396,1524=>432,3585=>590,3586=>578,3587=>661,3588=>592,3589=>592, +3590=>699,3591=>447,3592=>534,3593=>692,3594=>578,3595=>659,3596=>899,3597=>804,3598=>633,3599=>637, +3600=>484,3601=>730,3602=>876,3603=>915,3604=>592,3605=>592,3606=>578,3607=>670,3608=>542,3609=>671, +3610=>621,3611=>618,3612=>621,3613=>617,3614=>708,3615=>708,3616=>637,3617=>589,3618=>552,3619=>484, +3620=>590,3621=>569,3622=>637,3623=>526,3624=>599,3625=>802,3626=>579,3627=>668,3628=>778,3629=>560, +3630=>514,3631=>510,3632=>412,3633=>0,3634=>423,3635=>452,3636=>0,3637=>0,3638=>0,3639=>0, +3640=>0,3641=>0,3642=>0,3647=>665,3648=>357,3649=>624,3650=>529,3651=>486,3652=>475,3653=>423, +3654=>500,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>657, +3664=>548,3665=>548,3666=>592,3667=>614,3668=>631,3669=>643,3670=>508,3671=>744,3672=>622,3673=>585, +3674=>721,3675=>1381,4256=>475,4257=>469,4258=>573,4259=>650,4260=>502,4261=>506,4262=>481,4263=>746, +4264=>491,4265=>495,4266=>888,4267=>488,4268=>464,4269=>745,4270=>483,4271=>489,4272=>721,4273=>464, +4274=>578,4275=>590,4276=>611,4277=>491,4278=>663,4279=>489,4280=>544,4281=>479,4282=>527,4283=>488, +4284=>560,4285=>461,4286=>467,4287=>546,4288=>483,4289=>487,4290=>562,4291=>477,4292=>491,4293=>471, +4304=>522,4305=>518,4306=>621,4307=>716,4308=>517,4309=>519,4310=>518,4311=>796,4312=>518,4313=>518, +4314=>934,4315=>517,4316=>519,4317=>787,4318=>515,4319=>514,4320=>788,4321=>573,4322=>620,4323=>593, +4324=>639,4325=>516,4326=>714,4327=>518,4328=>572,4329=>518,4330=>555,4331=>518,4332=>562,4333=>509, +4334=>572,4335=>677,4336=>523,4337=>517,4338=>595,4339=>480,4340=>519,4341=>484,4345=>621,4347=>450, +5024=>718,5025=>768,5026=>633,5027=>878,5028=>1001,5029=>371,5030=>576,5031=>754,5032=>531,5033=>774, +5034=>692,5035=>499,5036=>668,5037=>829,5038=>575,5039=>681,5040=>485,5041=>607,5042=>885,5043=>974, +5044=>588,5045=>583,5046=>726,5047=>947,5048=>558,5049=>832,5050=>1096,5051=>780,5052=>595,5053=>869, +5054=>752,5055=>710,5056=>761,5057=>802,5058=>760,5059=>656,5060=>655,5061=>982,5062=>684,5063=>801, +5064=>805,5065=>1042,5066=>755,5067=>612,5068=>707,5069=>889,5070=>584,5071=>623,5072=>536,5073=>763, +5074=>763,5075=>498,5076=>1052,5077=>600,5078=>730,5079=>714,5080=>714,5081=>697,5082=>543,5083=>943, +5084=>718,5085=>630,5086=>660,5087=>692,5088=>841,5089=>861,5090=>617,5091=>733,5092=>898,5093=>896, +5094=>781,5095=>612,5096=>830,5097=>948,5098=>886,5099=>757,5100=>796,5101=>578,5102=>601,5103=>797, +5104=>623,5105=>886,5106=>730,5107=>827,5108=>648,7680=>722,7681=>500,7682=>667,7683=>556,7684=>667, +7685=>556,7686=>667,7687=>556,7688=>722,7689=>444,7690=>724,7691=>556,7692=>724,7693=>556,7694=>724, +7695=>556,7696=>724,7697=>556,7698=>724,7699=>556,7700=>667,7701=>444,7702=>667,7703=>444,7704=>667, +7705=>444,7706=>667,7707=>444,7708=>667,7709=>444,7710=>611,7711=>333,7712=>778,7713=>500,7714=>774, +7715=>556,7716=>774,7717=>556,7718=>774,7719=>556,7720=>774,7721=>556,7722=>774,7723=>556,7724=>386, +7725=>278,7726=>389,7727=>278,7728=>764,7729=>556,7730=>764,7731=>556,7732=>764,7733=>556,7734=>664, +7735=>278,7736=>664,7737=>278,7738=>664,7739=>278,7740=>664,7741=>278,7742=>943,7743=>833,7744=>943, +7745=>833,7746=>943,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722, +7755=>556,7756=>778,7757=>500,7758=>778,7759=>500,7760=>778,7761=>500,7762=>778,7763=>500,7764=>611, +7765=>556,7766=>611,7767=>556,7768=>712,7769=>444,7770=>712,7771=>444,7772=>712,7773=>444,7774=>712, +7775=>444,7776=>556,7777=>389,7778=>556,7779=>389,7780=>556,7781=>389,7782=>556,7783=>389,7784=>556, +7785=>389,7786=>667,7787=>333,7788=>667,7789=>333,7790=>667,7791=>333,7792=>667,7793=>333,7794=>722, +7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>722, +7805=>500,7806=>722,7807=>500,7808=>1000,7809=>722,7810=>1000,7811=>722,7812=>1000,7813=>722,7814=>1000, +7815=>722,7816=>1000,7817=>722,7818=>722,7819=>500,7820=>722,7821=>500,7822=>722,7823=>500,7824=>667, +7825=>444,7826=>667,7827=>444,7828=>667,7829=>444,7830=>556,7831=>333,7832=>722,7833=>500,7834=>507, +7835=>333,7840=>722,7841=>500,7842=>722,7843=>500,7844=>722,7845=>500,7846=>722,7847=>500,7848=>722, +7849=>500,7850=>722,7851=>500,7852=>722,7853=>500,7854=>722,7855=>500,7856=>722,7857=>500,7858=>825, +7859=>603,7860=>722,7861=>500,7862=>722,7863=>500,7864=>667,7865=>444,7866=>667,7867=>444,7868=>667, +7869=>444,7870=>667,7871=>444,7872=>667,7873=>444,7874=>667,7875=>444,7876=>667,7877=>444,7878=>667, +7879=>444,7880=>386,7881=>278,7882=>386,7883=>278,7884=>778,7885=>500,7886=>778,7887=>500,7888=>778, +7889=>500,7890=>778,7891=>500,7892=>778,7893=>500,7894=>778,7895=>500,7896=>778,7897=>500,7898=>774, +7899=>550,7900=>774,7901=>550,7902=>774,7903=>549,7904=>778,7905=>550,7906=>778,7907=>550,7908=>722, +7909=>556,7910=>722,7911=>556,7912=>838,7913=>672,7914=>838,7915=>672,7916=>825,7917=>659,7918=>839, +7919=>629,7920=>839,7921=>629,7922=>722,7923=>500,7924=>722,7925=>500,7926=>722,7927=>500,7928=>722, +7929=>500,7936=>605,7937=>605,7938=>605,7939=>605,7940=>605,7941=>605,7942=>605,7943=>605,7944=>722, +7945=>722,7946=>830,7947=>833,7948=>761,7949=>798,7950=>721,7951=>722,7952=>440,7953=>440,7954=>440, +7955=>440,7956=>440,7957=>440,7960=>817,7961=>826,7962=>944,7963=>970,7964=>964,7965=>1009,7968=>605, +7969=>605,7970=>605,7971=>605,7972=>605,7973=>605,7974=>605,7975=>605,7976=>926,7977=>921,7978=>1038, +7979=>1064,7980=>1092,7981=>1102,7982=>1005,7983=>991,7984=>330,7985=>330,7986=>330,7987=>330,7988=>330, +7989=>330,7990=>330,7991=>330,7992=>534,7993=>541,7994=>653,7995=>659,7996=>705,7997=>714,7998=>612, +7999=>614,8000=>550,8001=>550,8002=>550,8003=>550,8004=>550,8005=>550,8008=>885,8009=>886,8010=>1038, +8011=>1052,8012=>997,8013=>1021,8016=>550,8017=>550,8018=>550,8019=>550,8020=>550,8021=>550,8022=>550, +8023=>550,8025=>870,8027=>1014,8029=>1043,8031=>944,8032=>715,8033=>715,8034=>715,8035=>715,8036=>715, +8037=>715,8038=>715,8039=>715,8040=>905,8041=>913,8042=>1066,8043=>1085,8044=>1034,8045=>1044,8046=>980, +8047=>961,8048=>605,8049=>605,8050=>440,8051=>440,8052=>605,8053=>605,8054=>330,8055=>330,8056=>550, +8057=>550,8058=>550,8059=>550,8060=>715,8061=>715,8064=>605,8065=>605,8066=>605,8067=>605,8068=>605, +8069=>605,8070=>605,8071=>605,8072=>886,8073=>887,8074=>985,8075=>993,8076=>937,8077=>956,8078=>874, +8079=>878,8080=>605,8081=>605,8082=>605,8083=>605,8084=>605,8085=>605,8086=>605,8087=>605,8088=>1096, +8089=>1092,8090=>1223,8091=>1250,8092=>1270,8093=>1283,8094=>1174,8095=>1162,8096=>715,8097=>715,8098=>715, +8099=>715,8100=>715,8101=>715,8102=>715,8103=>715,8104=>1057,8105=>1073,8106=>1228,8107=>1251,8108=>1202, +8109=>1210,8110=>1151,8111=>1131,8112=>605,8113=>605,8114=>605,8115=>605,8116=>605,8118=>605,8119=>605, +8120=>722,8121=>722,8122=>722,8123=>722,8124=>883,8125=>500,8126=>0,8127=>500,8128=>500,8129=>550, +8130=>605,8131=>605,8132=>605,8134=>605,8135=>605,8136=>790,8137=>830,8138=>909,8139=>931,8140=>950, +8141=>500,8142=>500,8143=>500,8144=>330,8145=>330,8146=>330,8147=>330,8150=>330,8151=>330,8152=>386, +8153=>386,8154=>506,8155=>550,8157=>500,8158=>500,8159=>500,8160=>550,8161=>550,8162=>550,8163=>550, +8164=>550,8165=>550,8166=>550,8167=>550,8168=>738,8169=>738,8170=>858,8171=>880,8172=>764,8173=>550, +8174=>550,8175=>500,8178=>715,8179=>715,8180=>715,8182=>715,8183=>715,8184=>884,8185=>857,8186=>927, +8187=>892,8188=>988,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250, +8198=>167,8199=>500,8200=>250,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0, +8208=>333,8209=>333,8210=>500,8213=>1000,8214=>333,8215=>478,8219=>250,8223=>500,8227=>560,8228=>250, +8229=>500,8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>250, +8241=>1588,8242=>270,8243=>492,8244=>714,8245=>270,8246=>484,8247=>693,8248=>469,8251=>727,8252=>666, +8253=>695,8254=>500,8255=>953,8256=>953,8257=>338,8258=>931,8259=>333,8260=>167,8261=>332,8262=>332, +8263=>1000,8264=>833,8265=>833,8266=>500,8267=>540,8268=>528,8269=>523,8270=>500,8271=>333,8272=>953, +8273=>500,8274=>497,8275=>576,8276=>953,8277=>785,8278=>450,8279=>881,8280=>620,8281=>620,8282=>179, +8283=>621,8284=>569,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0, +8304=>300,8305=>278,8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300,8315=>300, +8316=>300,8317=>216,8318=>216,8319=>318,8320=>300,8321=>274,8322=>300,8323=>300,8324=>300,8325=>300, +8326=>300,8327=>300,8328=>300,8329=>300,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8352=>710, +8353=>722,8354=>783,8355=>611,8356=>500,8357=>833,8358=>722,8359=>960,8360=>1101,8361=>1000,8362=>889, +8363=>532,8365=>742,8366=>631,8369=>609,8370=>639,8371=>660,8372=>556,8373=>500,8448=>752,8449=>746, +8451=>1009,8457=>923,8458=>500,8459=>1035,8462=>556,8463=>556,8464=>792,8465=>737,8466=>800,8467=>427, +8468=>835,8470=>879,8471=>1048,8472=>666,8475=>747,8476=>955,8478=>722,8479=>722,8480=>891,8481=>1156, +8483=>722,8486=>811,8487=>811,8489=>333,8490=>764,8491=>722,8492=>806,8494=>551,8497=>723,8498=>611, +8499=>1203,8501=>593,8502=>498,8503=>339,8504=>523,8506=>906,8507=>1156,8523=>778,8525=>866,8526=>500, +8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750, +8541=>750,8542=>750,8543=>750,8544=>386,8545=>772,8546=>1158,8547=>1108,8548=>722,8549=>1108,8550=>1494, +8551=>1880,8552=>1108,8553=>722,8554=>1108,8555=>1494,8556=>664,8557=>722,8558=>724,8559=>943,8560=>278, +8561=>556,8562=>834,8563=>778,8564=>500,8565=>778,8566=>1056,8567=>1334,8568=>778,8569=>500,8570=>778, +8571=>1056,8572=>278,8573=>444,8574=>556,8575=>833,8592=>964,8593=>523,8594=>964,8595=>523,8596=>964, +8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8604=>1152,8605=>1152,8606=>964, +8607=>964,8608=>964,8609=>964,8610=>1078,8611=>1078,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964, +8617=>964,8618=>964,8619=>964,8620=>964,8621=>1168,8622=>964,8624=>622,8625=>622,8630=>1069,8631=>1069, +8632=>964,8633=>964,8634=>980,8635=>980,8636=>964,8637=>964,8638=>557,8639=>556,8640=>964,8641=>964, +8642=>557,8643=>556,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8651=>964, +8652=>964,8653=>964,8654=>964,8655=>964,8656=>964,8657=>630,8658=>964,8659=>630,8660=>964,8661=>630, +8662=>1063,8663=>1063,8664=>1063,8665=>1063,8666=>964,8667=>964,8668=>1100,8669=>1100,8672=>964,8674=>964, +8676=>964,8677=>964,8704=>627,8705=>716,8706=>558,8707=>627,8708=>627,8709=>500,8710=>612,8711=>719, +8713=>576,8714=>576,8716=>576,8717=>576,8720=>733,8721=>713,8722=>676,8723=>676,8724=>676,8725=>750, +8727=>570,8729=>570,8730=>549,8733=>676,8734=>752,8736=>555,8737=>555,8738=>555,8739=>240,8740=>531, +8741=>478,8742=>705,8743=>694,8744=>694,8745=>694,8746=>694,8747=>323,8756=>629,8757=>629,8761=>947, +8764=>676,8765=>676,8766=>763,8768=>305,8769=>676,8770=>676,8771=>676,8773=>676,8776=>676,8777=>676, +8778=>676,8781=>676,8782=>676,8783=>676,8784=>676,8785=>676,8786=>676,8787=>676,8788=>947,8789=>947, +8790=>676,8791=>676,8796=>676,8800=>570,8801=>676,8802=>676,8804=>570,8805=>570,8806=>676,8807=>676, +8808=>676,8809=>676,8810=>1047,8811=>1047,8812=>450,8813=>676,8814=>676,8815=>676,8816=>676,8817=>676, +8818=>676,8819=>676,8820=>676,8821=>676,8822=>676,8823=>676,8824=>676,8825=>676,8826=>676,8827=>676, +8828=>676,8829=>676,8830=>676,8831=>676,8832=>676,8833=>676,8834=>676,8835=>676,8836=>676,8837=>676, +8838=>676,8839=>676,8840=>676,8841=>676,8842=>676,8843=>676,8846=>694,8847=>676,8848=>676,8849=>676, +8850=>676,8851=>694,8852=>694,8853=>738,8854=>738,8855=>738,8856=>738,8857=>738,8858=>738,8859=>738, +8861=>738,8862=>678,8863=>678,8864=>678,8865=>678,8866=>487,8867=>487,8868=>752,8869=>752,8871=>487, +8873=>659,8874=>831,8876=>487,8877=>487,8878=>659,8879=>659,8882=>676,8883=>676,8884=>676,8885=>676, +8886=>1380,8887=>1380,8888=>1027,8890=>626,8891=>694,8892=>694,8893=>694,8900=>512,8903=>676,8904=>759, +8905=>632,8906=>632,8907=>1000,8908=>1000,8909=>676,8910=>694,8911=>694,8912=>676,8913=>676,8914=>694, +8915=>694,8916=>694,8918=>676,8919=>676,8920=>1441,8921=>1441,8922=>676,8923=>676,8924=>676,8925=>676, +8926=>676,8927=>676,8928=>676,8929=>676,8930=>676,8931=>676,8934=>676,8935=>676,8936=>676,8937=>676, +8938=>676,8939=>676,8940=>676,8941=>676,8960=>737,8968=>411,8969=>411,8970=>411,8971=>411,8976=>680, +8994=>951,8995=>951,9001=>398,9002=>398,9251=>500,9472=>1000,9473=>1000,9474=>1000,9475=>1000,9476=>1000, +9477=>1000,9478=>1000,9479=>1000,9480=>1000,9481=>1000,9482=>1000,9483=>1000,9484=>1000,9485=>1000,9486=>1000, +9487=>1000,9488=>1000,9489=>1000,9490=>1000,9491=>1000,9492=>1000,9493=>1000,9494=>1000,9495=>1000,9496=>1000, +9497=>1000,9498=>1000,9499=>1000,9500=>1000,9501=>1000,9502=>1000,9503=>1000,9504=>1000,9505=>1000,9506=>1000, +9507=>1000,9508=>1000,9509=>1000,9510=>1000,9511=>1000,9512=>1000,9513=>1000,9514=>1000,9515=>1000,9516=>1000, +9517=>1000,9518=>1000,9519=>1000,9520=>1000,9521=>1000,9522=>1000,9523=>1000,9524=>1000,9525=>1000,9526=>1000, +9527=>1000,9528=>1000,9529=>1000,9530=>1000,9531=>1000,9532=>1000,9533=>1000,9534=>1000,9535=>1000,9536=>1000, +9537=>1000,9538=>1000,9539=>1000,9540=>1000,9541=>1000,9542=>1000,9543=>1000,9544=>1000,9545=>1000,9546=>1000, +9547=>1000,9552=>1000,9553=>1000,9554=>1000,9555=>1000,9556=>1000,9557=>1000,9558=>1000,9559=>1000,9560=>1000, +9561=>1000,9562=>1000,9563=>1000,9564=>1000,9565=>1000,9566=>1000,9567=>1000,9568=>1000,9569=>1000,9570=>1000, +9571=>1000,9572=>1000,9573=>1000,9574=>1000,9575=>1000,9576=>1000,9577=>1000,9578=>1000,9579=>1000,9580=>1000, +9600=>1000,9601=>1000,9602=>1000,9603=>1000,9604=>1000,9605=>1000,9606=>1000,9607=>1000,9608=>1000,9609=>1000, +9610=>1000,9611=>1000,9612=>1000,9613=>1000,9614=>1000,9615=>1000,9616=>1000,9617=>1000,9618=>1000,9620=>1000, +9621=>1000,9622=>1000,9623=>1000,9624=>1000,9625=>1000,9626=>1000,9627=>1000,9628=>1000,9629=>1000,9630=>1000, +9631=>1000,9632=>678,9633=>678,9642=>309,9650=>681,9651=>681,9654=>681,9655=>681,9660=>681,9661=>681, +9664=>681,9665=>681,9670=>580,9671=>580,9674=>494,9675=>738,9676=>732,9679=>738,9702=>524,9711=>851, +9733=>1003,9734=>1003,9824=>618,9825=>645,9826=>587,9827=>582,9828=>582,9829=>645,9830=>587,9831=>618, +9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,10214=>561,10215=>561,11799=>333, +64256=>613,64257=>559,64258=>559,64259=>846,64260=>836,64262=>723,64285=>266,64286=>0,64287=>532,64288=>552, +64297=>570,64298=>716,64299=>716,64300=>716,64301=>716,64302=>593,64303=>593,64304=>593,64305=>498,64306=>339, +64307=>523,64308=>561,64309=>266,64310=>291,64312=>576,64313=>266,64314=>496,64315=>501,64316=>510,64318=>581, +64320=>347,64321=>512,64323=>493,64324=>491,64326=>561,64327=>544,64328=>502,64329=>716,64330=>571,64331=>266, +64332=>498,64333=>501,64334=>491,64335=>593,65533=>788); +$enc=''; +$diff=''; +$file='freeserifb.z'; +$ctg='freeserifb.ctg.z'; +$originalsize=467208; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifb.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifb.z new file mode 100755 index 00000000..95e31362 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifb.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifbi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifbi.ctg.z new file mode 100755 index 00000000..86d46ef3 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifbi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifbi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifbi.php new file mode 100755 index 00000000..752e7ead --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifbi.php @@ -0,0 +1,238 @@ +900,'Descent'=>-300,'CapHeight'=>-24,'Flags'=>96,'FontBBox'=>'[-787 -1120 1867 1571]','ItalicAngle'=>-16.3,'StemV'=>120,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278,40=>333,41=>333, +42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500, +52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>570,61=>570, +62=>570,63=>500,64=>832,65=>667,66=>667,67=>667,68=>744,69=>670,70=>656,71=>722, +72=>778,73=>393,74=>500,75=>664,76=>609,77=>896,78=>722,79=>722,80=>614,81=>722, +82=>672,83=>556,84=>611,85=>722,86=>667,87=>889,88=>667,89=>611,90=>611,91=>333, +92=>278,93=>333,94=>570,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444, +102=>333,103=>500,104=>556,105=>278,106=>278,107=>500,108=>278,109=>778,110=>556,111=>500, +112=>500,113=>500,114=>389,115=>389,116=>278,117=>556,118=>444,119=>667,120=>500,121=>444, +122=>389,123=>348,124=>220,125=>348,126=>570,8364=>761,8218=>250,402=>333,8222=>500,8230=>1000, +8224=>500,8225=>500,710=>333,8240=>1000,352=>556,8249=>333,338=>944,381=>611,8216=>250,8217=>250, +8220=>500,8221=>500,8226=>350,8211=>500,8212=>1000,732=>333,8482=>1000,353=>389,8250=>333,339=>722, +382=>389,376=>611,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500, +168=>333,169=>747,170=>266,171=>500,172=>606,173=>333,174=>747,175=>333,176=>400,177=>570, +178=>300,179=>300,180=>333,181=>576,182=>500,183=>250,184=>333,185=>272,186=>300,187=>500, +188=>750,189=>750,190=>750,191=>500,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667, +198=>944,199=>667,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389, +208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>570,216=>722,217=>722, +218=>722,219=>722,220=>722,221=>611,222=>609,223=>500,224=>500,225=>500,226=>500,227=>500, +228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278, +238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>570, +248=>500,249=>556,250=>556,251=>556,252=>556,253=>444,254=>500,255=>444,256=>667,257=>500, +258=>667,259=>500,260=>667,261=>500,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444, +268=>667,269=>444,270=>722,271=>616,272=>722,273=>500,274=>667,275=>444,276=>667,277=>444, +278=>667,279=>444,280=>667,281=>444,282=>667,283=>444,284=>722,285=>500,286=>722,287=>500, +288=>722,289=>500,290=>722,291=>500,292=>778,293=>556,294=>778,295=>556,296=>389,297=>278, +298=>389,299=>278,300=>389,301=>278,302=>389,303=>278,304=>389,305=>278,306=>826,307=>547, +308=>500,309=>278,310=>667,311=>500,312=>534,313=>611,314=>278,315=>611,316=>278,317=>638, +318=>424,319=>611,320=>424,321=>611,322=>278,323=>722,324=>556,325=>722,326=>556,327=>722, +328=>556,329=>556,330=>722,331=>547,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500, +340=>667,341=>389,342=>667,343=>389,344=>667,345=>389,346=>556,347=>389,348=>556,349=>389, +350=>556,351=>389,354=>611,355=>278,356=>611,357=>308,358=>611,359=>278,360=>722,361=>556, +362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556, +372=>889,373=>667,374=>611,375=>444,377=>611,378=>389,379=>611,380=>389,383=>333,384=>500, +385=>850,386=>667,387=>575,388=>630,389=>500,390=>722,391=>929,392=>654,393=>722,394=>864, +395=>684,396=>500,397=>546,398=>670,399=>722,400=>631,401=>769,403=>929,404=>716,405=>745, +406=>278,407=>389,408=>829,409=>500,410=>278,411=>495,412=>853,413=>919,414=>556,415=>722, +416=>908,417=>640,418=>1014,419=>778,420=>757,421=>500,422=>611,423=>556,424=>389,425=>730, +426=>455,427=>349,428=>611,429=>298,430=>611,431=>902,432=>714,433=>811,434=>678,435=>611, +436=>581,437=>611,438=>389,439=>619,440=>614,441=>461,442=>445,443=>500,444=>614,445=>500, +446=>389,447=>504,448=>220,449=>418,450=>570,451=>333,452=>1355,453=>1133,454=>889,455=>1109, +456=>887,457=>556,458=>1222,459=>1000,460=>834,461=>667,462=>500,463=>393,464=>278,465=>722, +466=>500,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722, +476=>556,477=>444,478=>667,479=>500,480=>667,481=>500,482=>944,483=>722,484=>722,485=>500, +486=>722,487=>500,488=>664,489=>500,490=>722,491=>500,492=>722,493=>500,494=>619,495=>513, +496=>278,497=>1355,498=>1133,499=>889,500=>722,501=>500,502=>944,503=>660,504=>722,505=>556, +506=>667,507=>500,508=>944,509=>722,510=>722,511=>500,512=>667,513=>500,514=>667,515=>500, +516=>670,517=>444,518=>670,519=>444,520=>393,521=>278,522=>393,523=>278,524=>722,525=>500, +526=>722,527=>500,528=>672,529=>389,530=>672,531=>389,532=>722,533=>556,534=>722,535=>556, +536=>556,537=>389,538=>611,539=>278,540=>424,541=>455,542=>778,543=>556,544=>731,545=>618, +546=>568,547=>500,548=>667,549=>444,550=>667,551=>500,552=>670,553=>444,554=>722,555=>500, +556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>611,563=>444,564=>422,565=>621, +566=>413,567=>278,568=>800,569=>784,570=>644,571=>667,572=>444,573=>664,574=>611,575=>389, +576=>451,577=>444,578=>444,579=>667,580=>722,581=>722,582=>670,583=>444,584=>500,585=>278, +586=>808,587=>608,588=>672,589=>389,590=>611,591=>444,592=>500,593=>590,594=>590,595=>500, +596=>444,599=>668,600=>444,601=>444,603=>430,608=>569,609=>500,613=>556,616=>278,617=>320, +618=>278,623=>778,629=>500,633=>389,643=>333,648=>278,649=>500,650=>557,651=>492,652=>444, +653=>667,654=>444,658=>513,670=>500,697=>250,698=>408,699=>250,700=>250,701=>250,702=>300, +703=>300,706=>333,707=>333,708=>333,709=>333,711=>333,712=>333,713=>333,714=>333,715=>333, +716=>300,717=>333,718=>333,719=>333,720=>278,721=>278,722=>300,723=>300,724=>333,725=>333, +726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,733=>333,734=>333,735=>352,741=>526, +742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>480,751=>333, +752=>333,753=>333,754=>333,755=>327,756=>261,757=>437,758=>437,759=>400,760=>278,761=>175, +762=>175,763=>175,764=>175,765=>0,766=>337,767=>432,768=>0,769=>0,770=>0,771=>0, +772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0, +782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0, +792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0, +802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0, +812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0, +822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0, +832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0, +842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0, +852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,860=>0,861=>0,862=>0, +863=>0,864=>0,865=>0,884=>199,885=>199,890=>0,894=>333,900=>330,901=>333,902=>667, +903=>250,904=>819,905=>955,906=>539,908=>835,910=>961,911=>889,912=>320,913=>667,914=>667, +915=>637,916=>740,917=>667,918=>611,919=>778,920=>722,921=>389,922=>677,923=>667,924=>889, +925=>722,926=>650,927=>722,928=>778,929=>611,931=>730,932=>621,933=>722,934=>748,935=>667, +936=>858,937=>741,938=>389,939=>722,940=>590,941=>430,942=>548,943=>320,944=>536,945=>590, +946=>536,947=>548,948=>550,949=>430,950=>482,951=>548,952=>525,953=>320,954=>564,955=>510, +956=>589,957=>522,958=>482,959=>536,960=>629,961=>536,962=>470,963=>536,964=>464,965=>536, +966=>643,967=>482,968=>715,969=>715,970=>320,971=>536,972=>536,973=>536,974=>715,976=>508, +977=>589,978=>722,979=>931,980=>722,981=>660,982=>715,983=>536,984=>611,985=>536,986=>620, +987=>524,988=>667,989=>535,990=>708,991=>428,992=>671,993=>633,1008=>550,1009=>550,1010=>477, +1011=>278,1012=>722,1013=>411,1014=>411,1015=>609,1016=>500,1017=>667,1018=>896,1019=>769,1020=>536, +1021=>667,1022=>667,1023=>667,1024=>670,1025=>670,1026=>762,1027=>637,1028=>667,1029=>556,1030=>393, +1031=>393,1032=>500,1033=>1085,1034=>1049,1035=>747,1036=>736,1037=>778,1038=>746,1039=>778,1040=>667, +1041=>667,1042=>667,1043=>637,1044=>778,1045=>670,1046=>1044,1047=>650,1048=>778,1049=>778,1050=>736, +1051=>814,1052=>896,1053=>778,1054=>722,1055=>778,1056=>614,1057=>667,1058=>611,1059=>746,1060=>748, +1061=>667,1062=>778,1063=>742,1064=>1136,1065=>1135,1066=>779,1067=>984,1068=>664,1069=>732,1070=>1069, +1071=>779,1072=>500,1073=>508,1074=>486,1075=>414,1076=>486,1077=>444,1078=>982,1079=>476,1080=>556, +1081=>556,1082=>564,1083=>585,1084=>757,1085=>552,1086=>500,1087=>556,1088=>500,1089=>444,1090=>778, +1091=>532,1092=>764,1093=>500,1094=>556,1095=>556,1096=>806,1097=>806,1098=>644,1099=>744,1100=>470, +1101=>488,1102=>757,1103=>586,1104=>444,1105=>444,1106=>524,1107=>414,1108=>488,1109=>389,1110=>278, +1111=>278,1112=>278,1113=>772,1114=>745,1115=>556,1116=>564,1117=>556,1118=>532,1119=>556,1120=>990, +1121=>690,1122=>804,1123=>751,1124=>1017,1125=>752,1126=>900,1127=>728,1128=>1236,1129=>927,1130=>1044, +1131=>826,1132=>1401,1133=>1016,1134=>620,1135=>476,1136=>858,1137=>769,1138=>722,1139=>544,1140=>796, +1141=>584,1142=>796,1143=>584,1144=>1268,1145=>1023,1146=>895,1147=>612,1148=>990,1149=>690,1150=>990, +1151=>635,1152=>620,1153=>444,1154=>372,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0, +1161=>0,1162=>778,1163=>556,1164=>664,1165=>470,1166=>614,1167=>473,1168=>624,1169=>448,1170=>624, +1171=>448,1172=>733,1173=>485,1174=>1080,1175=>982,1176=>650,1177=>476,1178=>772,1179=>564,1180=>772, +1181=>590,1182=>738,1183=>499,1184=>862,1185=>718,1186=>778,1187=>552,1188=>976,1189=>682,1190=>1085, +1191=>787,1192=>667,1193=>480,1194=>667,1195=>444,1196=>534,1197=>778,1198=>611,1199=>640,1200=>611, +1201=>640,1202=>694,1203=>500,1204=>1004,1205=>518,1206=>742,1207=>556,1208=>742,1209=>556,1210=>716, +1211=>556,1212=>844,1213=>530,1214=>844,1215=>530,1216=>393,1217=>1044,1218=>982,1219=>736,1220=>534, +1221=>814,1222=>585,1223=>778,1224=>552,1225=>778,1226=>552,1227=>742,1228=>556,1229=>896,1230=>757, +1231=>393,1232=>667,1233=>500,1234=>667,1235=>500,1236=>891,1237=>646,1238=>670,1239=>444,1240=>659, +1241=>372,1242=>619,1243=>372,1244=>1044,1245=>994,1246=>650,1247=>476,1248=>604,1249=>459,1250=>778, +1251=>539,1252=>778,1253=>539,1254=>722,1255=>500,1256=>722,1257=>500,1258=>722,1259=>500,1260=>732, +1261=>488,1262=>746,1263=>532,1264=>746,1265=>532,1266=>746,1267=>532,1268=>742,1269=>556,1270=>637, +1271=>448,1272=>984,1273=>744,1296=>652,1297=>452,1298=>814,1299=>585,1306=>722,1307=>500,1308=>889, +1309=>656,1310=>736,1311=>564,1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>0, +1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0, +1442=>0,1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0, +1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0, +1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>433,1471=>0, +1472=>155,1473=>0,1474=>0,1475=>400,1476=>0,1477=>0,1478=>347,1479=>0,1488=>593,1489=>498, +1490=>339,1491=>523,1492=>561,1493=>266,1494=>291,1495=>559,1496=>576,1497=>266,1498=>496,1499=>501, +1500=>510,1501=>542,1502=>581,1503=>273,1504=>347,1505=>512,1506=>552,1507=>493,1508=>491,1509=>537, +1510=>561,1511=>544,1512=>502,1513=>716,1514=>571,1520=>532,1521=>532,1522=>532,1523=>396,1524=>432, +3585=>590,3586=>578,3587=>661,3588=>592,3589=>592,3590=>699,3591=>447,3592=>534,3593=>692,3594=>578, +3595=>659,3596=>899,3597=>804,3598=>633,3599=>637,3600=>484,3601=>730,3602=>876,3603=>915,3604=>592, +3605=>592,3606=>578,3607=>670,3608=>542,3609=>671,3610=>621,3611=>618,3612=>621,3613=>617,3614=>708, +3615=>708,3616=>637,3617=>589,3618=>552,3619=>484,3620=>590,3621=>569,3622=>637,3623=>526,3624=>599, +3625=>802,3626=>579,3627=>668,3628=>778,3629=>560,3630=>514,3631=>510,3632=>442,3633=>0,3634=>423, +3635=>452,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>665,3648=>357, +3649=>624,3650=>529,3651=>486,3652=>475,3653=>423,3654=>500,3655=>0,3656=>0,3657=>0,3658=>0, +3659=>0,3660=>0,3661=>0,3662=>0,3663=>657,3664=>548,3665=>548,3666=>592,3667=>614,3668=>631, +3669=>643,3670=>508,3671=>744,3672=>622,3673=>585,3674=>721,3675=>1381,4256=>475,4257=>469,4258=>573, +4259=>650,4260=>502,4261=>506,4262=>481,4263=>746,4264=>491,4265=>495,4266=>888,4267=>488,4268=>464, +4269=>745,4270=>483,4271=>489,4272=>721,4273=>464,4274=>578,4275=>590,4276=>611,4277=>491,4278=>663, +4279=>489,4280=>544,4281=>479,4282=>527,4283=>488,4284=>560,4285=>461,4286=>467,4287=>546,4288=>483, +4289=>487,4290=>562,4291=>477,4292=>491,4293=>471,4304=>522,4305=>518,4306=>621,4307=>716,4308=>517, +4309=>519,4310=>518,4311=>796,4312=>518,4313=>518,4314=>934,4315=>517,4316=>519,4317=>787,4318=>515, +4319=>514,4320=>788,4321=>573,4322=>620,4323=>593,4324=>639,4325=>516,4326=>714,4327=>518,4328=>572, +4329=>518,4330=>555,4331=>518,4332=>562,4333=>509,4334=>572,4335=>677,4336=>523,4337=>517,4338=>595, +4339=>480,4340=>519,4341=>484,4345=>621,4347=>410,5024=>718,5025=>768,5026=>633,5027=>878,5028=>1001, +5029=>371,5030=>576,5031=>754,5032=>531,5033=>774,5034=>692,5035=>499,5036=>668,5037=>829,5038=>575, +5039=>681,5040=>485,5041=>607,5042=>885,5043=>974,5044=>588,5045=>583,5046=>726,5047=>947,5048=>558, +5049=>832,5050=>1096,5051=>780,5052=>595,5053=>869,5054=>752,5055=>710,5056=>761,5057=>802,5058=>760, +5059=>656,5060=>655,5061=>982,5062=>684,5063=>801,5064=>805,5065=>1042,5066=>755,5067=>612,5068=>707, +5069=>889,5070=>584,5071=>623,5072=>536,5073=>763,5074=>763,5075=>498,5076=>1052,5077=>600,5078=>730, +5079=>714,5080=>714,5081=>697,5082=>543,5083=>943,5084=>718,5085=>630,5086=>660,5087=>692,5088=>841, +5089=>861,5090=>617,5091=>733,5092=>898,5093=>896,5094=>781,5095=>612,5096=>830,5097=>948,5098=>886, +5099=>757,5100=>796,5101=>578,5102=>601,5103=>797,5104=>623,5105=>886,5106=>730,5107=>827,5108=>648, +7680=>667,7681=>500,7682=>667,7683=>500,7684=>667,7685=>500,7686=>667,7687=>500,7688=>667,7689=>444, +7690=>744,7691=>500,7692=>744,7693=>500,7694=>744,7695=>500,7696=>744,7697=>500,7698=>744,7699=>500, +7700=>667,7701=>444,7702=>667,7703=>444,7704=>670,7705=>444,7706=>670,7707=>444,7708=>670,7709=>444, +7710=>656,7711=>333,7712=>722,7713=>500,7714=>778,7715=>556,7716=>778,7717=>556,7718=>778,7719=>556, +7720=>778,7721=>556,7722=>778,7723=>556,7724=>393,7725=>278,7726=>389,7727=>278,7728=>664,7729=>500, +7730=>664,7731=>500,7732=>664,7733=>500,7734=>609,7735=>278,7736=>609,7737=>278,7738=>609,7739=>278, +7740=>609,7741=>278,7742=>896,7743=>778,7744=>896,7745=>778,7746=>896,7747=>778,7748=>722,7749=>556, +7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>722,7757=>500,7758=>722,7759=>500, +7760=>722,7761=>500,7762=>722,7763=>500,7764=>614,7765=>500,7766=>614,7767=>500,7768=>672,7769=>389, +7770=>672,7771=>389,7772=>672,7773=>389,7774=>672,7775=>389,7776=>556,7777=>389,7778=>556,7779=>389, +7780=>556,7781=>389,7782=>556,7783=>389,7784=>556,7785=>389,7786=>611,7787=>278,7788=>611,7789=>278, +7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556, +7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>444,7806=>667,7807=>444,7808=>889,7809=>667, +7810=>889,7811=>667,7812=>889,7813=>667,7814=>889,7815=>667,7816=>889,7817=>667,7818=>667,7819=>500, +7820=>667,7821=>500,7822=>611,7823=>444,7824=>611,7825=>389,7826=>611,7827=>389,7828=>611,7829=>389, +7830=>556,7831=>278,7832=>667,7833=>444,7834=>507,7835=>333,7840=>667,7841=>500,7842=>667,7843=>500, +7844=>667,7845=>500,7846=>667,7847=>500,7848=>667,7849=>500,7850=>667,7851=>500,7852=>667,7853=>500, +7854=>667,7855=>500,7856=>667,7857=>500,7858=>667,7859=>500,7860=>667,7861=>500,7862=>667,7863=>500, +7864=>670,7865=>444,7866=>670,7867=>444,7868=>670,7869=>444,7870=>667,7871=>444,7872=>667,7873=>444, +7874=>667,7875=>444,7876=>667,7877=>444,7878=>670,7879=>444,7880=>393,7881=>278,7882=>393,7883=>278, +7884=>722,7885=>500,7886=>722,7887=>500,7888=>722,7889=>500,7890=>722,7891=>500,7892=>722,7893=>500, +7894=>722,7895=>500,7896=>722,7897=>500,7898=>908,7899=>640,7900=>908,7901=>640,7902=>908,7903=>640, +7904=>908,7905=>640,7906=>908,7907=>640,7908=>722,7909=>556,7910=>722,7911=>556,7912=>902,7913=>714, +7914=>902,7915=>714,7916=>902,7917=>714,7918=>902,7919=>714,7920=>902,7921=>714,7922=>611,7923=>444, +7924=>611,7925=>444,7926=>611,7927=>444,7928=>611,7929=>444,7936=>590,7937=>590,7938=>590,7939=>590, +7940=>590,7941=>590,7942=>590,7943=>590,7944=>724,7945=>753,7946=>891,7947=>912,7948=>822,7949=>853, +7950=>796,7951=>787,7952=>430,7953=>430,7954=>430,7955=>430,7956=>430,7957=>430,7960=>864,7961=>905, +7962=>1034,7963=>1038,7964=>1031,7965=>1045,7968=>548,7969=>548,7970=>548,7971=>548,7972=>548,7973=>548, +7974=>548,7975=>548,7976=>976,7977=>1009,7978=>1132,7979=>1141,7980=>1138,7981=>1154,7982=>1079,7983=>1071, +7984=>320,7985=>320,7986=>320,7987=>320,7988=>320,7989=>320,7990=>320,7991=>320,7992=>593,7993=>620, +7994=>746,7995=>762,7996=>742,7997=>773,7998=>691,7999=>683,8000=>536,8001=>536,8002=>536,8003=>536, +8004=>536,8005=>536,8008=>899,8009=>928,8010=>1086,8011=>1118,8012=>1020,8013=>1028,8016=>536,8017=>536, +8018=>536,8019=>536,8020=>536,8021=>536,8022=>536,8023=>536,8025=>959,8027=>1085,8029=>1108,8031=>1027, +8032=>715,8033=>715,8034=>715,8035=>715,8036=>715,8037=>715,8038=>715,8039=>715,8040=>946,8041=>960, +8042=>1133,8043=>1148,8044=>1059,8045=>1081,8046=>1020,8047=>1016,8048=>590,8049=>590,8050=>430,8051=>430, +8052=>548,8053=>548,8054=>320,8055=>320,8056=>536,8057=>536,8058=>536,8059=>536,8060=>715,8061=>715, +8064=>590,8065=>590,8066=>590,8067=>590,8068=>590,8069=>590,8070=>590,8071=>590,8072=>842,8073=>877, +8074=>1011,8075=>1031,8076=>947,8077=>975,8078=>907,8079=>893,8080=>548,8081=>548,8082=>548,8083=>548, +8084=>548,8085=>548,8086=>548,8087=>548,8088=>1030,8089=>1066,8090=>1188,8091=>1199,8092=>1196,8093=>1211, +8094=>1134,8095=>1129,8096=>715,8097=>715,8098=>715,8099=>715,8100=>715,8101=>715,8102=>715,8103=>715, +8104=>1060,8105=>1076,8106=>1264,8107=>1287,8108=>1179,8109=>1204,8110=>1137,8111=>1135,8112=>590,8113=>590, +8114=>590,8115=>590,8116=>590,8118=>590,8119=>590,8120=>667,8121=>667,8122=>752,8123=>728,8124=>775, +8125=>250,8126=>0,8127=>500,8128=>500,8129=>550,8130=>548,8131=>548,8132=>548,8134=>548,8135=>548, +8136=>884,8137=>859,8138=>982,8139=>968,8140=>839,8141=>500,8142=>500,8143=>500,8144=>320,8145=>320, +8146=>320,8147=>320,8150=>320,8151=>320,8152=>389,8153=>389,8154=>599,8155=>592,8157=>500,8158=>500, +8159=>500,8160=>536,8161=>536,8162=>536,8163=>536,8164=>536,8165=>536,8166=>536,8167=>536,8168=>722, +8169=>722,8170=>1007,8171=>932,8172=>842,8173=>550,8174=>550,8175=>500,8178=>715,8179=>715,8180=>715, +8182=>715,8183=>715,8184=>971,8185=>853,8186=>1004,8187=>875,8188=>862,8189=>500,8190=>500,8192=>500, +8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>200,8202=>100, +8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8213=>1000,8214=>333, +8215=>478,8219=>250,8223=>500,8227=>560,8228=>250,8229=>478,8231=>0,8232=>0,8233=>0,8234=>0, +8235=>0,8236=>0,8237=>0,8238=>250,8239=>0,8241=>1618,8242=>278,8243=>556,8244=>834,8245=>270, +8246=>468,8247=>630,8248=>469,8251=>727,8252=>778,8253=>733,8254=>500,8255=>953,8256=>953,8257=>338, +8258=>931,8259=>333,8260=>167,8261=>332,8262=>332,8263=>1000,8264=>889,8265=>889,8266=>500,8267=>453, +8268=>479,8269=>492,8270=>500,8271=>333,8272=>953,8273=>500,8274=>521,8275=>576,8276=>953,8277=>785, +8278=>410,8279=>881,8280=>620,8281=>620,8282=>179,8283=>621,8284=>569,8285=>179,8286=>179,8287=>111, +8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>300,8305=>219,8308=>300,8309=>300,8310=>300, +8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,8319=>300,8320=>300, +8321=>274,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,8330=>300, +8331=>300,8332=>300,8333=>216,8334=>216,8352=>667,8353=>667,8354=>667,8355=>667,8356=>500,8357=>742, +8358=>722,8359=>1008,8360=>953,8361=>889,8362=>889,8363=>532,8365=>742,8366=>631,8369=>609,8370=>639, +8371=>742,8372=>576,8373=>500,8448=>664,8449=>665,8451=>925,8453=>693,8454=>787,8455=>631,8457=>867, +8462=>556,8463=>556,8468=>778,8470=>806,8471=>747,8480=>879,8481=>1050,8483=>667,8486=>741,8487=>741, +8489=>320,8490=>664,8491=>667,8494=>551,8495=>444,8498=>667,8500=>500,8501=>537,8502=>537,8503=>350, +8504=>537,8506=>942,8507=>1050,8523=>698,8525=>856,8526=>462,8531=>750,8532=>750,8533=>750,8534=>750, +8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>393, +8545=>786,8546=>1179,8547=>1060,8548=>667,8549=>1060,8550=>1453,8551=>1846,8552=>1060,8553=>667,8554=>1060, +8555=>1453,8556=>609,8557=>667,8558=>744,8559=>896,8560=>278,8561=>556,8562=>834,8563=>722,8564=>444, +8565=>722,8566=>1000,8567=>1278,8568=>778,8569=>500,8570=>778,8571=>1056,8572=>278,8573=>444,8574=>500, +8575=>778,8592=>964,8593=>964,8594=>964,8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964, +8601=>964,8602=>964,8603=>964,8606=>964,8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964, +8613=>964,8614=>964,8615=>964,8616=>964,8633=>964,8634=>964,8644=>964,8645=>964,8646=>964,8647=>964, +8648=>964,8649=>964,8650=>964,8676=>964,8677=>964,8706=>494,8710=>612,8721=>713,8722=>606,8725=>750, +8730=>549,8734=>752,8800=>570,8804=>570,8805=>570,9251=>500,9674=>494,9676=>732,9824=>618,9825=>645, +9826=>587,9827=>582,9828=>582,9829=>645,9830=>587,9831=>618,9833=>333,9834=>556,9835=>778,9836=>778, +9837=>556,9838=>556,9839=>556,11799=>333,64256=>583,64257=>558,64258=>551,64259=>822,64260=>818,64262=>662, +64285=>266,64286=>0,64287=>532,64288=>552,64297=>570,64298=>716,64299=>716,64300=>716,64301=>716,64302=>593, +64303=>593,64304=>593,64305=>498,64306=>339,64307=>523,64308=>561,64309=>266,64310=>291,64312=>576,64313=>266, +64314=>496,64315=>501,64316=>510,64318=>581,64320=>347,64321=>512,64323=>493,64324=>491,64326=>561,64327=>544, +64328=>502,64329=>716,64330=>571,64331=>266,64332=>498,64333=>501,64334=>491,64335=>593,65533=>788); +$enc=''; +$diff=''; +$file='freeserifbi.z'; +$ctg='freeserifbi.ctg.z'; +$originalsize=452752; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifbi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifbi.z new file mode 100755 index 00000000..63125cf5 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifbi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifi.ctg.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifi.ctg.z new file mode 100755 index 00000000..1a99cb55 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifi.ctg.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifi.php new file mode 100755 index 00000000..4de1c175 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifi.php @@ -0,0 +1,259 @@ +900,'Descent'=>-300,'CapHeight'=>-29,'Flags'=>96,'FontBBox'=>'[-879 -434 1673 900]','ItalicAngle'=>-16.5,'StemV'=>70,'MissingWidth'=>600); +$up=-125; +$ut=50; +$dw=600; +$cw=array( +32=>250,33=>333,34=>420,35=>500,36=>500,37=>833,38=>778,39=>214,40=>333,41=>333, +42=>500,43=>675,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500, +52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>675,61=>675, +62=>675,63=>500,64=>920,65=>611,66=>611,67=>667,68=>722,69=>604,70=>611,71=>722, +72=>722,73=>339,74=>444,75=>652,76=>556,77=>828,78=>657,79=>722,80=>603,81=>722, +82=>616,83=>500,84=>556,85=>722,86=>611,87=>833,88=>611,89=>556,90=>556,91=>389, +92=>278,93=>389,94=>422,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444, +102=>278,103=>500,104=>500,105=>278,106=>278,107=>444,108=>278,109=>722,110=>500,111=>500, +112=>500,113=>500,114=>389,115=>389,116=>278,117=>500,118=>444,119=>667,120=>444,121=>444, +122=>389,123=>400,124=>275,125=>400,126=>541,8364=>741,8218=>250,402=>278,8222=>444,8230=>889, +8224=>500,8225=>500,710=>333,8240=>1000,352=>500,8249=>250,338=>944,381=>556,8216=>250,8217=>250, +8220=>444,8221=>444,8226=>350,8211=>500,8212=>1000,732=>333,8482=>980,353=>389,8250=>250,339=>667, +382=>389,376=>556,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>275,167=>500, +168=>333,169=>760,170=>276,171=>444,172=>675,173=>333,174=>760,175=>333,176=>400,177=>675, +178=>300,179=>300,180=>333,181=>500,182=>523,183=>250,184=>333,185=>250,186=>310,187=>444, +188=>750,189=>750,190=>750,191=>500,192=>611,193=>611,194=>611,195=>611,196=>611,197=>611, +198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333, +208=>722,209=>667,210=>722,211=>722,212=>722,213=>722,214=>722,215=>675,216=>722,217=>722, +218=>722,219=>722,220=>722,221=>556,222=>611,223=>500,224=>500,225=>500,226=>500,227=>500, +228=>500,229=>500,230=>667,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278, +238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>675, +248=>500,249=>500,250=>500,251=>500,252=>500,253=>444,254=>500,255=>444,256=>611,257=>500, +258=>611,259=>500,260=>611,261=>500,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444, +268=>667,269=>444,270=>722,271=>500,272=>722,273=>500,274=>611,275=>444,276=>611,277=>444, +278=>611,279=>444,280=>611,281=>444,282=>611,283=>444,284=>722,285=>500,286=>722,287=>500, +288=>722,289=>500,290=>722,291=>500,292=>722,293=>500,294=>722,295=>500,296=>333,297=>278, +298=>333,299=>278,300=>333,301=>278,302=>333,303=>278,304=>333,305=>278,306=>707,307=>553, +308=>444,309=>278,310=>667,311=>444,312=>444,313=>556,314=>278,315=>556,316=>278,317=>556, +318=>278,319=>556,320=>278,321=>556,322=>278,323=>667,324=>500,325=>667,326=>500,327=>667, +328=>500,329=>500,330=>667,331=>500,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500, +340=>611,341=>389,342=>611,343=>389,344=>611,345=>389,346=>500,347=>389,348=>500,349=>389, +350=>500,351=>389,354=>556,355=>278,356=>556,357=>278,358=>556,359=>278,360=>722,361=>500, +362=>722,363=>500,364=>722,365=>500,366=>722,367=>500,368=>722,369=>500,370=>722,371=>500, +372=>833,373=>667,374=>556,375=>444,377=>556,378=>389,379=>556,380=>389,383=>278,384=>500, +385=>781,386=>610,387=>551,388=>611,389=>549,390=>667,391=>866,392=>703,393=>722,394=>892, +395=>682,396=>500,397=>520,398=>611,399=>722,400=>518,401=>611,403=>863,404=>611,405=>728, +406=>278,407=>333,408=>792,409=>444,410=>278,411=>480,412=>900,413=>779,414=>500,415=>722, +416=>932,417=>608,418=>908,419=>722,420=>772,421=>500,422=>611,423=>500,424=>389,425=>657, +426=>461,427=>313,428=>556,429=>335,430=>556,431=>948,432=>721,433=>747,434=>755,435=>636, +436=>549,437=>556,438=>389,439=>525,440=>556,441=>424,442=>416,443=>500,444=>615,445=>439, +446=>389,447=>500,448=>275,449=>500,450=>600,451=>333,452=>1278,453=>1111,454=>889,455=>1000, +456=>834,457=>556,458=>1101,459=>935,460=>778,461=>611,462=>500,463=>339,464=>278,465=>722, +466=>500,467=>722,468=>500,469=>722,470=>500,471=>722,472=>500,473=>722,474=>500,475=>722, +476=>500,477=>444,478=>611,479=>500,480=>611,481=>500,482=>889,483=>667,484=>722,485=>500, +486=>722,487=>500,488=>652,489=>444,490=>730,491=>500,492=>730,493=>500,494=>525,495=>446, +496=>278,497=>1278,498=>1111,499=>889,500=>817,501=>595,502=>944,503=>607,504=>657,505=>500, +506=>611,507=>500,508=>889,509=>667,510=>722,511=>500,512=>611,513=>500,514=>611,515=>500, +516=>604,517=>444,518=>604,519=>444,520=>339,521=>278,522=>339,523=>278,524=>722,525=>500, +526=>722,527=>500,528=>616,529=>389,530=>616,531=>389,532=>722,533=>500,534=>722,535=>500, +536=>500,537=>389,538=>556,539=>278,540=>424,541=>455,542=>722,543=>500,544=>781,545=>588, +546=>568,547=>468,548=>611,549=>444,550=>611,551=>500,552=>604,553=>444,554=>722,555=>500, +556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>556,563=>444,564=>405,565=>597, +566=>377,567=>278,568=>775,569=>767,570=>722,571=>667,572=>444,573=>611,574=>611,575=>389, +576=>444,577=>444,578=>444,579=>667,580=>750,581=>697,582=>611,583=>444,584=>389,585=>278, +586=>796,587=>590,588=>667,589=>333,590=>722,591=>500,592=>500,593=>564,594=>564,595=>500, +596=>444,597=>444,598=>500,599=>697,600=>444,601=>444,602=>722,603=>416,604=>426,605=>674, +606=>454,607=>278,608=>640,609=>500,610=>484,611=>500,612=>582,613=>500,614=>500,615=>500, +616=>278,617=>278,618=>278,619=>278,620=>278,621=>278,622=>556,623=>722,624=>722,625=>716, +626=>500,627=>500,628=>500,629=>500,630=>668,631=>693,632=>640,633=>389,634=>389,635=>333, +636=>389,637=>333,638=>333,639=>333,640=>487,641=>487,642=>389,643=>278,644=>500,645=>333, +646=>500,647=>278,648=>278,649=>500,650=>517,651=>500,652=>444,653=>667,654=>444,655=>510, +656=>524,657=>444,658=>446,659=>456,660=>444,661=>444,662=>444,663=>444,664=>722,665=>442, +666=>454,667=>665,668=>585,669=>347,670=>444,671=>443,672=>500,673=>444,674=>444,675=>798, +676=>795,677=>805,678=>554,679=>561,680=>678,681=>614,682=>554,683=>554,684=>500,685=>500, +686=>611,687=>611,688=>300,689=>300,690=>278,691=>278,692=>278,693=>309,694=>306,695=>432, +696=>310,697=>250,698=>408,699=>333,700=>500,701=>500,702=>333,703=>333,704=>258,705=>258, +706=>374,707=>374,708=>383,709=>383,711=>333,712=>250,713=>333,714=>333,715=>333,716=>250, +717=>333,718=>333,719=>333,720=>278,721=>278,722=>333,723=>333,724=>333,725=>333,726=>333, +727=>333,728=>333,729=>333,730=>333,731=>333,733=>333,734=>336,735=>352,736=>311,737=>200, +738=>243,739=>328,740=>300,741=>460,742=>460,743=>460,744=>460,745=>460,746=>477,747=>475, +748=>339,749=>330,750=>444,751=>383,752=>383,753=>294,754=>294,755=>327,756=>261,757=>437, +758=>437,759=>333,760=>278,761=>175,762=>175,763=>175,764=>175,765=>337,766=>337,767=>326, +768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0, +778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0, +788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0, +798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0, +808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0, +818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0, +828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0, +838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0, +848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0, +858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0, +868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0, +878=>0,879=>0,884=>199,885=>199,890=>332,894=>333,900=>257,901=>333,902=>661,903=>250, +904=>841,905=>950,906=>559,908=>815,910=>877,911=>899,912=>270,913=>661,914=>581,915=>611, +916=>660,917=>611,918=>606,919=>742,920=>672,921=>333,922=>667,923=>641,924=>833,925=>657, +926=>678,927=>682,928=>749,929=>611,931=>657,932=>596,933=>676,934=>722,935=>611,936=>812, +937=>743,938=>333,939=>696,940=>564,941=>416,942=>506,943=>270,944=>504,945=>564,946=>509, +947=>496,948=>520,949=>416,950=>398,951=>506,952=>533,953=>270,954=>491,955=>488,956=>501, +957=>486,958=>430,959=>510,960=>608,961=>506,962=>423,963=>524,964=>425,965=>504,966=>618, +967=>459,968=>693,969=>693,970=>270,971=>504,972=>510,973=>504,974=>693,976=>534,977=>587, +978=>620,979=>820,980=>620,981=>640,982=>684,983=>504,984=>555,985=>534,986=>548,987=>496, +988=>610,989=>470,990=>633,991=>410,992=>687,993=>544,1008=>534,1009=>534,1010=>485,1011=>278, +1012=>722,1013=>280,1014=>280,1015=>610,1016=>500,1017=>704,1018=>832,1019=>703,1020=>533,1021=>704, +1022=>704,1023=>704,1024=>604,1025=>604,1026=>668,1027=>611,1028=>666,1029=>500,1030=>339,1031=>339, +1032=>444,1033=>972,1034=>977,1035=>703,1036=>664,1037=>720,1038=>728,1039=>728,1040=>611,1041=>610, +1042=>611,1043=>611,1044=>682,1045=>604,1046=>976,1047=>592,1048=>720,1049=>720,1050=>664,1051=>719, +1052=>828,1053=>722,1054=>722,1055=>749,1056=>603,1057=>667,1058=>556,1059=>728,1060=>722,1061=>611, +1062=>728,1063=>666,1064=>997,1065=>1005,1066=>710,1067=>891,1068=>594,1069=>632,1070=>1024,1071=>696, +1072=>500,1073=>500,1074=>442,1075=>344,1076=>503,1077=>440,1078=>932,1079=>402,1080=>500,1081=>500, +1082=>491,1083=>487,1084=>624,1085=>500,1086=>500,1087=>500,1088=>500,1089=>441,1090=>722,1091=>500, +1092=>741,1093=>444,1094=>500,1095=>500,1096=>750,1097=>750,1098=>545,1099=>683,1100=>433,1101=>432, +1102=>700,1103=>503,1104=>440,1105=>440,1106=>500,1107=>344,1108=>442,1109=>389,1110=>278,1111=>278, +1112=>278,1113=>686,1114=>696,1115=>500,1116=>491,1117=>500,1118=>500,1119=>500,1120=>964,1121=>684, +1122=>708,1123=>690,1124=>975,1125=>646,1126=>800,1127=>628,1128=>1096,1129=>795,1130=>952,1131=>730, +1132=>1260,1133=>892,1134=>574,1135=>400,1136=>812,1137=>694,1138=>721,1139=>500,1140=>745,1141=>533, +1142=>745,1143=>533,1144=>1193,1145=>967,1146=>868,1147=>602,1148=>964,1149=>684,1150=>964,1151=>684, +1152=>548,1153=>443,1154=>320,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0, +1162=>720,1163=>500,1164=>602,1165=>433,1166=>611,1167=>500,1168=>552,1169=>424,1170=>593,1171=>424, +1172=>611,1173=>432,1174=>992,1175=>932,1176=>592,1177=>396,1178=>681,1179=>491,1180=>700,1181=>532, +1182=>664,1183=>491,1184=>776,1185=>690,1186=>729,1187=>500,1188=>908,1189=>660,1190=>1034,1191=>694, +1192=>667,1193=>531,1194=>666,1195=>443,1196=>556,1197=>775,1198=>556,1199=>574,1200=>555,1201=>574, +1202=>660,1203=>443,1204=>798,1205=>581,1206=>674,1207=>500,1208=>690,1209=>516,1210=>640,1211=>500, +1212=>785,1213=>558,1214=>787,1215=>559,1216=>339,1217=>976,1218=>932,1219=>664,1220=>491,1221=>719, +1222=>487,1223=>722,1224=>500,1225=>722,1226=>500,1227=>666,1228=>500,1229=>828,1230=>624,1231=>339, +1232=>611,1233=>500,1234=>611,1235=>500,1236=>889,1237=>667,1238=>604,1239=>444,1240=>722,1241=>444, +1242=>722,1243=>444,1244=>976,1245=>932,1246=>592,1247=>402,1248=>525,1249=>446,1250=>720,1251=>500, +1252=>720,1253=>500,1254=>722,1255=>500,1256=>722,1257=>500,1258=>722,1259=>500,1260=>632,1261=>432, +1262=>728,1263=>500,1264=>728,1265=>500,1266=>728,1267=>500,1268=>666,1269=>500,1270=>611,1271=>424, +1272=>891,1273=>683,1296=>532,1297=>409,1298=>719,1299=>487,1306=>722,1307=>500,1308=>833,1309=>656, +1310=>664,1311=>491,1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>418,1432=>0, +1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0, +1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0, +1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0, +1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>440,1471=>0,1472=>126, +1473=>0,1474=>0,1475=>418,1476=>0,1477=>0,1478=>350,1479=>0,1488=>537,1489=>537,1490=>350, +1491=>537,1492=>537,1493=>350,1494=>350,1495=>537,1496=>537,1497=>350,1498=>537,1499=>537,1500=>537, +1501=>537,1502=>537,1503=>350,1504=>350,1505=>537,1506=>537,1507=>537,1508=>537,1509=>537,1510=>537, +1511=>537,1512=>537,1513=>537,1514=>537,1520=>537,1521=>537,1522=>537,1523=>396,1524=>396,2404=>318, +2405=>446,2433=>0,2434=>300,2435=>312,2437=>594,2438=>776,2439=>469,2440=>513,2441=>535,2442=>561, +2443=>604,2444=>481,2447=>580,2448=>604,2451=>540,2452=>620,2453=>570,2454=>485,2455=>484,2456=>471, +2457=>457,2458=>408,2459=>452,2460=>591,2461=>551,2462=>771,2463=>414,2464=>404,2465=>522,2466=>415, +2467=>450,2468=>551,2469=>477,2470=>478,2471=>449,2472=>448,2474=>535,2475=>611,2476=>443,2477=>534, +2478=>492,2479=>474,2480=>442,2482=>542,2486=>507,2487=>467,2488=>523,2489=>419,2492=>0,2493=>419, +2494=>202,2495=>189,2496=>202,2497=>0,2498=>0,2499=>0,2500=>0,2503=>294,2504=>289,2507=>774, +2508=>825,2509=>0,2510=>356,2519=>219,2524=>523,2525=>420,2527=>469,2528=>604,2529=>481,2530=>0, +2531=>0,2534=>500,2535=>437,2536=>479,2537=>507,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517, +2543=>481,2544=>443,2545=>443,2546=>429,2547=>383,2548=>432,2549=>478,2550=>539,2551=>158,2552=>365, +2553=>280,2554=>357,3585=>512,3586=>453,3587=>512,3588=>519,3589=>529,3590=>561,3591=>411,3592=>437, +3593=>552,3594=>452,3595=>509,3596=>707,3597=>707,3598=>574,3599=>570,3600=>406,3601=>607,3602=>686, +3603=>749,3604=>494,3605=>497,3606=>509,3607=>552,3608=>461,3609=>565,3610=>527,3611=>523,3612=>556, +3613=>551,3614=>570,3615=>570,3616=>571,3617=>531,3618=>493,3619=>433,3620=>513,3621=>491,3622=>571, +3623=>439,3624=>510,3625=>594,3626=>484,3627=>554,3628=>616,3629=>493,3630=>496,3631=>417,3632=>392, +3633=>0,3634=>366,3635=>366,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0, +3647=>662,3648=>297,3649=>544,3650=>298,3651=>329,3652=>328,3653=>326,3654=>488,3655=>0,3656=>0, +3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>725,3664=>624,3665=>624,3666=>624, +3667=>624,3668=>624,3669=>624,3670=>624,3671=>624,3672=>624,3673=>624,3674=>645,3675=>872,4256=>453, +4257=>448,4258=>546,4259=>619,4260=>478,4261=>481,4262=>459,4263=>707,4264=>467,4265=>471,4266=>842, +4267=>464,4268=>443,4269=>707,4270=>460,4271=>465,4272=>686,4273=>440,4274=>550,4275=>561,4276=>580, +4277=>467,4278=>630,4279=>466,4280=>517,4281=>456,4282=>502,4283=>464,4284=>534,4285=>440,4286=>443, +4287=>522,4288=>460,4289=>463,4290=>536,4291=>455,4292=>468,4293=>449,4304=>454,4305=>452,4306=>544, +4307=>629,4308=>451,4309=>452,4310=>452,4311=>702,4312=>451,4313=>452,4314=>820,4315=>451,4316=>453, +4317=>695,4318=>449,4319=>448,4320=>694,4321=>501,4322=>544,4323=>517,4324=>560,4325=>450,4326=>627, +4327=>452,4328=>491,4329=>452,4330=>485,4331=>452,4332=>485,4333=>443,4334=>500,4335=>582,4336=>455, +4337=>451,4338=>480,4339=>414,4340=>453,4341=>418,4345=>544,4347=>410,5024=>711,5025=>678,5026=>604, +5027=>667,5028=>796,5029=>301,5030=>516,5031=>544,5032=>457,5033=>716,5034=>703,5035=>383,5036=>628, +5037=>709,5038=>455,5039=>601,5040=>472,5041=>574,5042=>730,5043=>939,5044=>498,5045=>528,5046=>667, +5047=>891,5048=>505,5049=>792,5050=>957,5051=>725,5052=>595,5053=>733,5054=>698,5055=>638,5056=>720, +5057=>732,5058=>624,5059=>638,5060=>565,5061=>903,5062=>655,5063=>681,5064=>675,5065=>949,5066=>683, +5067=>547,5068=>693,5069=>732,5070=>529,5071=>569,5072=>536,5073=>677,5074=>631,5075=>382,5076=>973, +5077=>543,5078=>607,5079=>652,5080=>652,5081=>693,5082=>514,5083=>803,5084=>658,5085=>597,5086=>627, +5087=>659,5088=>679,5089=>706,5090=>563,5091=>618,5092=>767,5093=>776,5094=>731,5095=>492,5096=>808, +5097=>823,5098=>796,5099=>689,5100=>716,5101=>518,5102=>521,5103=>719,5104=>563,5105=>776,5106=>634, +5107=>822,5108=>621,7680=>611,7681=>500,7682=>611,7683=>500,7684=>611,7685=>500,7686=>611,7687=>500, +7688=>667,7689=>444,7690=>722,7691=>500,7692=>722,7693=>500,7694=>722,7695=>500,7696=>722,7697=>500, +7698=>722,7699=>500,7700=>611,7701=>444,7702=>611,7703=>444,7704=>604,7705=>444,7706=>604,7707=>444, +7708=>604,7709=>444,7710=>611,7711=>278,7712=>722,7713=>500,7714=>722,7715=>500,7716=>722,7717=>500, +7718=>722,7719=>500,7720=>722,7721=>500,7722=>722,7723=>500,7724=>339,7725=>278,7726=>333,7727=>278, +7728=>652,7729=>444,7730=>652,7731=>444,7732=>652,7733=>444,7734=>556,7735=>278,7736=>556,7737=>278, +7738=>556,7739=>278,7740=>556,7741=>278,7742=>828,7743=>722,7744=>828,7745=>722,7746=>828,7747=>722, +7748=>657,7749=>500,7750=>657,7751=>500,7752=>657,7753=>500,7754=>657,7755=>500,7756=>722,7757=>500, +7758=>722,7759=>500,7760=>722,7761=>500,7762=>722,7763=>500,7764=>603,7765=>500,7766=>603,7767=>500, +7768=>616,7769=>389,7770=>616,7771=>389,7772=>616,7773=>389,7774=>616,7775=>389,7776=>500,7777=>389, +7778=>500,7779=>389,7780=>500,7781=>389,7782=>500,7783=>389,7784=>500,7785=>389,7786=>556,7787=>278, +7788=>556,7789=>278,7790=>556,7791=>278,7792=>556,7793=>278,7794=>722,7795=>500,7796=>722,7797=>500, +7798=>722,7799=>500,7800=>722,7801=>500,7802=>722,7803=>500,7804=>611,7805=>444,7806=>611,7807=>444, +7808=>833,7809=>667,7810=>833,7811=>667,7812=>833,7813=>667,7814=>833,7815=>667,7816=>833,7817=>667, +7818=>611,7819=>444,7820=>611,7821=>444,7822=>556,7823=>444,7824=>556,7825=>389,7826=>556,7827=>389, +7828=>556,7829=>389,7830=>500,7831=>278,7832=>667,7833=>444,7834=>444,7835=>278,7840=>611,7841=>500, +7842=>611,7843=>500,7844=>611,7845=>500,7846=>611,7847=>500,7848=>611,7849=>500,7850=>611,7851=>500, +7852=>611,7853=>500,7854=>611,7855=>500,7856=>611,7857=>500,7858=>611,7859=>500,7860=>611,7861=>500, +7862=>611,7863=>500,7864=>604,7865=>444,7866=>604,7867=>444,7868=>604,7869=>444,7870=>611,7871=>444, +7872=>611,7873=>444,7874=>611,7875=>444,7876=>611,7877=>444,7878=>604,7879=>444,7880=>339,7881=>278, +7882=>339,7883=>278,7884=>722,7885=>500,7886=>722,7887=>500,7888=>722,7889=>500,7890=>722,7891=>500, +7892=>722,7893=>500,7894=>722,7895=>500,7896=>722,7897=>500,7898=>932,7899=>608,7900=>932,7901=>608, +7902=>807,7903=>585,7904=>932,7905=>608,7906=>932,7907=>608,7908=>722,7909=>500,7910=>722,7911=>500, +7912=>948,7913=>721,7914=>948,7915=>721,7916=>807,7917=>585,7918=>948,7919=>721,7920=>948,7921=>721, +7922=>556,7923=>444,7924=>556,7925=>444,7926=>556,7927=>444,7928=>556,7929=>444,7936=>564,7937=>564, +7938=>564,7939=>564,7940=>564,7941=>564,7942=>564,7943=>564,7944=>661,7945=>661,7946=>794,7947=>811, +7948=>792,7949=>803,7950=>661,7951=>648,7952=>416,7953=>416,7954=>416,7955=>416,7956=>416,7957=>416, +7960=>740,7961=>795,7962=>923,7963=>940,7964=>996,7965=>986,7968=>506,7969=>506,7970=>506,7971=>506, +7972=>506,7973=>506,7974=>506,7975=>506,7976=>879,7977=>901,7978=>1036,7979=>1035,7980=>1099,7981=>1100, +7982=>954,7983=>959,7984=>270,7985=>270,7986=>267,7987=>267,7988=>267,7989=>267,7990=>267,7991=>267, +7992=>490,7993=>529,7994=>655,7995=>654,7996=>705,7997=>713,7998=>570,7999=>573,8000=>558,8001=>510, +8002=>510,8003=>510,8004=>510,8005=>510,8008=>797,8009=>867,8010=>1026,8011=>1022,8012=>993,8013=>1017, +8016=>504,8017=>504,8018=>504,8019=>504,8020=>504,8021=>504,8022=>504,8023=>504,8025=>916,8027=>1062, +8029=>1100,8031=>933,8032=>693,8033=>693,8034=>693,8035=>693,8036=>693,8037=>693,8038=>693,8039=>693, +8040=>852,8041=>909,8042=>1072,8043=>1072,8044=>1032,8045=>1047,8046=>930,8047=>946,8048=>564,8049=>564, +8050=>416,8051=>416,8052=>506,8053=>506,8054=>270,8055=>270,8056=>510,8057=>510,8058=>504,8059=>504, +8060=>693,8061=>693,8064=>564,8065=>564,8066=>564,8067=>564,8068=>564,8069=>564,8070=>564,8071=>564, +8072=>821,8073=>854,8074=>998,8075=>1011,8076=>992,8077=>1001,8078=>866,8079=>858,8080=>506,8081=>506, +8082=>506,8083=>506,8084=>506,8085=>506,8086=>506,8087=>506,8088=>999,8089=>1044,8090=>1179,8091=>1165, +8092=>1227,8093=>1229,8094=>1080,8095=>1085,8096=>693,8097=>693,8098=>693,8099=>693,8100=>693,8101=>693, +8102=>693,8103=>693,8104=>1037,8105=>1113,8106=>1264,8107=>1264,8108=>1219,8109=>1241,8110=>1120,8111=>1132, +8112=>564,8113=>564,8114=>564,8115=>564,8116=>564,8118=>564,8119=>564,8120=>661,8121=>661,8122=>661, +8123=>661,8124=>831,8125=>192,8126=>332,8127=>500,8128=>500,8129=>534,8130=>506,8131=>506,8132=>506, +8134=>506,8135=>506,8136=>611,8137=>816,8138=>889,8139=>908,8140=>881,8141=>500,8142=>500,8143=>500, +8144=>270,8145=>270,8146=>270,8147=>270,8150=>270,8151=>270,8152=>333,8153=>333,8154=>497,8155=>521, +8157=>500,8158=>500,8159=>500,8160=>504,8161=>504,8162=>504,8163=>504,8164=>506,8165=>506,8166=>504, +8167=>504,8168=>676,8169=>676,8170=>905,8171=>901,8172=>783,8173=>333,8174=>333,8175=>500,8178=>693, +8179=>693,8180=>693,8182=>693,8183=>693,8184=>907,8185=>833,8186=>963,8187=>875,8188=>952,8189=>500, +8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250, +8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500, +8213=>1000,8214=>293,8215=>465,8219=>250,8223=>444,8227=>350,8228=>250,8229=>500,8231=>250,8232=>0, +8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>250,8241=>1601,8242=>247,8243=>411, +8244=>611,8245=>220,8246=>440,8247=>660,8248=>469,8251=>629,8252=>666,8253=>500,8254=>500,8255=>953, +8256=>1000,8257=>314,8258=>931,8259=>333,8260=>167,8261=>480,8262=>480,8263=>1000,8264=>833,8265=>833, +8266=>500,8267=>453,8268=>453,8269=>450,8270=>500,8271=>278,8272=>882,8273=>500,8274=>497,8275=>500, +8276=>953,8277=>512,8278=>410,8279=>855,8280=>620,8281=>620,8282=>179,8283=>621,8284=>564,8285=>179, +8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>300,8305=>235,8308=>300, +8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216, +8319=>318,8320=>300,8321=>250,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300,8327=>300,8328=>300, +8329=>300,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8352=>698,8353=>667,8354=>667,8355=>611, +8356=>500,8357=>722,8358=>667,8359=>988,8360=>953,8361=>833,8362=>869,8363=>512,8365=>722,8366=>611, +8369=>589,8370=>619,8371=>722,8372=>556,8373=>611,8400=>0,8401=>0,8402=>0,8403=>0,8404=>0, +8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,8412=>0,8413=>0,8414=>0, +8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8420=>0,8421=>0,8422=>0,8423=>0,8424=>0, +8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>664,8449=>665, +8451=>954,8453=>693,8454=>787,8457=>822,8462=>500,8463=>500,8468=>777,8470=>823,8471=>760,8478=>616, +8479=>610,8480=>879,8481=>1156,8483=>611,8486=>743,8487=>743,8489=>286,8490=>722,8491=>722,8494=>533, +8498=>556,8501=>537,8502=>537,8503=>350,8504=>537,8506=>906,8507=>1155,8523=>778,8525=>856,8526=>500, +8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750, +8541=>750,8542=>750,8543=>750,8544=>339,8545=>678,8546=>1017,8547=>950,8548=>611,8549=>950,8550=>1289, +8551=>1628,8552=>950,8553=>611,8554=>950,8555=>1289,8556=>556,8557=>667,8558=>722,8559=>828,8560=>278, +8561=>556,8562=>834,8563=>722,8564=>444,8565=>722,8566=>1000,8567=>1278,8568=>722,8569=>444,8570=>722, +8571=>1000,8572=>278,8573=>444,8574=>500,8575=>722,8592=>964,8593=>499,8594=>964,8595=>499,8706=>494, +8710=>612,8721=>713,8722=>675,8723=>675,8725=>750,8730=>549,8734=>677,8747=>416,8748=>750,8749=>1083, +8750=>722,8751=>750,8800=>564,8804=>675,8805=>675,8992=>686,8993=>686,9251=>500,9674=>494,9676=>791, +9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>555, +9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,11799=>333,64256=>526,64257=>500,64258=>500,64259=>747, +64260=>748,64262=>665,64285=>350,64286=>0,64287=>537,64288=>537,64297=>564,64298=>537,64299=>537,64300=>537, +64301=>537,64302=>537,64303=>537,64304=>537,64305=>537,64306=>350,64307=>537,64308=>537,64309=>350,64310=>350, +64312=>537,64313=>350,64314=>537,64315=>537,64316=>537,64318=>537,64320=>350,64321=>537,64323=>537,64324=>537, +64326=>537,64327=>537,64328=>537,64329=>537,64330=>537,64331=>350,64332=>537,64333=>537,64334=>537,64335=>537, +65533=>788); +$enc=''; +$diff=''; +$file='freeserifi.z'; +$ctg='freeserifi.ctg.z'; +$originalsize=629968; +?> \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifi.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifi.z new file mode 100755 index 00000000..c191bde4 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/freeserifi.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/helvetica.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/helvetica.php new file mode 100755 index 00000000..afdac149 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/helvetica.php @@ -0,0 +1,33 @@ +278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278, +10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278, +20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278, +30=>278,31=>278,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191, +40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556, +50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278, +60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667, +70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778, +80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667, +90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500, +100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222, +109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556, +118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584, +127=>350,128=>556,129=>350,130=>222,131=>556,132=>333,133=>1000,134=>556,135=>556, +136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350, +145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000, +154=>500,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556, +163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556, +172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333, +181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834, +190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000, +199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778, +217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556, +226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556, +235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556, +244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556, +253=>500,254=>556,255=>500); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/helveticab.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/helveticab.php new file mode 100755 index 00000000..7ca4edb7 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/helveticab.php @@ -0,0 +1,33 @@ +278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278, +10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278, +20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278, +30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238, +40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556, +50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333, +60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667, +70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778, +80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667, +90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556, +100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278, +109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611, +118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584, +127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556, +136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350, +145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000, +154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556, +163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556, +172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333, +181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834, +190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000, +199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778, +217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556, +226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556, +235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611, +244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611, +253=>556,254=>611,255=>556); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/helveticabi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/helveticabi.php new file mode 100755 index 00000000..7ca4edb7 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/helveticabi.php @@ -0,0 +1,33 @@ +278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278, +10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278, +20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278, +30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238, +40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556, +50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333, +60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667, +70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778, +80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667, +90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556, +100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278, +109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611, +118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584, +127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556, +136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350, +145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000, +154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556, +163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556, +172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333, +181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834, +190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000, +199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778, +217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556, +226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556, +235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611, +244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611, +253=>556,254=>611,255=>556); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/helveticai.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/helveticai.php new file mode 100755 index 00000000..afdac149 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/helveticai.php @@ -0,0 +1,33 @@ +278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278, +10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278, +20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278, +30=>278,31=>278,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191, +40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556, +50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278, +60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667, +70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778, +80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667, +90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500, +100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222, +109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556, +118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584, +127=>350,128=>556,129=>350,130=>222,131=>556,132=>333,133=>1000,134=>556,135=>556, +136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350, +145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000, +154=>500,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556, +163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556, +172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333, +181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834, +190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000, +199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778, +217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556, +226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556, +235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556, +244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556, +253=>500,254=>556,255=>500); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/hysmyeongjostdmedium.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/hysmyeongjostdmedium.php new file mode 100755 index 00000000..613dd227 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/hysmyeongjostdmedium.php @@ -0,0 +1,48 @@ + 880, + 'Descent' => -120, + 'CapHeight' => 720, + 'Flags' => 6, + 'FontBBox' => '[-28 -148 1001 880]', + 'ItalicAngle' => 0, + 'StemV' => 60, + 'Style' => '<< /Panose <000000000600000000000000> >>', +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'Korea1', + 'Supplement' => '1', +); +$enc = 'UniKS-UCS2-H'; + +// underline position, needs checking: +$up = -130; +$ut = 40; + +$dw = 1000; +$cw = array( + 32 => 333, 33 => 416, 34 => 416, 35 => 833, 36 => 625, 37 => 916, 38 => 833, 39 => 250, 40 => 500, 41 => 500, + 42 => 500, 43 => 833, 44 => 291, 45 => 450, 46 => 291, 47 => 375, 48 => 625, 49 => 625, 50 => 625, 51 => 625, + 52 => 625, 53 => 625, 54 => 625, 55 => 625, 56 => 625, 57 => 625, 58 => 333, 59 => 333, 60 => 833, 61 => 833, + 62 => 916, 63 => 500, 64 => 1000, 65 => 791, 66 => 708, 67 => 708, 68 => 750, 69 => 708, 70 => 666, 71 => 750, + 72 => 791, 73 => 375, 74 => 500, 75 => 791, 76 => 666, 77 => 916, 78 => 791, 79 => 750, 80 => 666, 81 => 750, + 82 => 708, 83 => 666, 84 => 791, 85 => 791, 86 => 750, 87 => 1000, 88 => 708, 89 => 708, 90 => 666, 91 => 500, + 92 => 375, 93 => 500, 94 => 500, 95 => 500, 96 => 333, 97 => 541, 98 => 583, 99 => 541, 100 => 583, 101 => 583, + 102 => 375, 103 => 583, 104 => 583, 105 => 291, 106 => 333, 107 => 583, 108 => 291, 109 => 875, 110 => 583, 111 => 583, + 112 => 583, 113 => 583, 114 => 458, 115 => 541, 116 => 375, 117 => 583, 118 => 583, 119 => 833, 120 => 625, 121 => 625, + 122 => 500, 123 => 583, 124 => 583, 125 => 583, 126 => 750, +); +$_cr = array( + //array(97, 97, 500), + array(8094, 8190, 500) +); +foreach($_cr as $_r) { + for($i = $_r[0]; $i <= $_r[1]; $i++) { + $cw[$i+31] = $_r[2]; + } +} +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/kozgopromedium.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/kozgopromedium.php new file mode 100755 index 00000000..aaf93141 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/kozgopromedium.php @@ -0,0 +1,65 @@ + 880, + 'Descent' => -120, + 'CapHeight' => 763, + 'Flags' => 4, + 'FontBBox' => '[-149 -374 1254 1008]', + 'ItalicAngle' => 0, + 'StemV' => 99, + 'Style' => '<< /Panose <0000020b0700000000000000> >>', + 'XHeight' => 549, +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'Japan1', + 'Supplement' => '4', +); +$enc = 'UniJIS-UCS2-H'; + +// underline position, needs checking: +$up = -75; +$ut = 50; + +$dw = 1000; +$cw = array( + 32 => 224, 33 => 266, 34 => 392, 35 => 551, 36 => 562, 37 => 883, 38 => 677, 39 => 213, 40 => 322, 41 => 322, + 42 => 470, 43 => 677, 44 => 247, 45 => 343, 46 => 245, 47 => 370, 48 => 562, 49 => 562, 50 => 562, 51 => 562, + 52 => 562, 53 => 562, 54 => 562, 55 => 562, 56 => 562, 57 => 562, 58 => 245, 59 => 247, 60 => 677, 61 => 677, + 62 => 677, 63 => 447, 64 => 808, 65 => 661, 66 => 602, 67 => 610, 68 => 708, 69 => 535, 70 => 528, 71 => 689, + 72 => 703, 73 => 275, 74 => 404, 75 => 602, 76 => 514, 77 => 871, 78 => 708, 79 => 727, 80 => 585, 81 => 727, + 82 => 595, 83 => 539, 84 => 541, 85 => 696, 86 => 619, 87 => 922, 88 => 612, 89 => 591, 90 => 584, 91 => 322, + 92 => 562, 93 => 322, 94 => 677, 95 => 568, 96 => 340, 97 => 532, 98 => 612, 99 => 475, 100 => 608, 101 => 543, + 102 => 332, 103 => 603, 104 => 601, 105 => 265, 106 => 276, 107 => 524, 108 => 264, 109 => 901, 110 => 601, 111 => 590, + 112 => 612, 113 => 607, 114 => 367, 115 => 433, 116 => 369, 117 => 597, 118 => 527, 119 => 800, 120 => 511, 121 => 518, + 122 => 468, 123 => 321, 124 => 273, 125 => 321, 126 => 341, 127 => 241, 128 => 362, 129 => 241, 130 => 273, 131 => 677, + 132 => 266, 133 => 562, 134 => 562, 135 => 456, 136 => 562, 137 => 571, 138 => 562, 139 => 416, 140 => 472, 141 => 283, + 142 => 283, 143 => 587, 144 => 588, 145 => 568, 146 => 545, 147 => 545, 148 => 247, 149 => 561, 150 => 330, 151 => 239, + 152 => 418, 153 => 416, 154 => 472, 155 => 1136, 156 => 1288, 157 => 447, 158 => 340, 159 => 340, 160 => 340, 161 => 340, + 162 => 340, 163 => 340, 164 => 455, 165 => 340, 166 => 340, 167 => 340, 168 => 340, 169 => 1136, 170 => 857, 171 => 384, + 172 => 519, 173 => 727, 174 => 952, 175 => 398, 176 => 834, 177 => 264, 178 => 275, 179 => 590, 180 => 918, 181 => 605, + 182 => 677, 183 => 769, 184 => 677, 185 => 473, 186 => 361, 187 => 677, 188 => 347, 189 => 340, 190 => 599, 191 => 284, + 192 => 845, 193 => 845, 194 => 845, 195 => 661, 196 => 661, 197 => 661, 198 => 661, 199 => 661, 200 => 661, 201 => 610, + 202 => 535, 203 => 535, 204 => 535, 205 => 535, 206 => 275, 207 => 275, 208 => 275, 209 => 275, 210 => 715, 211 => 708, + 212 => 727, 213 => 727, 214 => 727, 215 => 727, 216 => 727, 217 => 677, 218 => 696, 219 => 696, 220 => 696, 221 => 696, + 222 => 591, 223 => 584, 224 => 532, 225 => 532, 226 => 532, 227 => 532, 228 => 532, 229 => 532, 230 => 475, 231 => 543, + 232 => 543, 233 => 543, 234 => 543, 235 => 264, 236 => 264, 237 => 264, 238 => 264, 239 => 584, 240 => 601, 241 => 590, + 242 => 590, 243 => 590, 244 => 590, 245 => 590, 246 => 677, 247 => 597, 248 => 597, 249 => 597, 250 => 597, 251 => 518, + 252 => 612, 253 => 518, 254 => 539, 255 => 591, 256 => 584, 257 => 446, 258 => 433, 259 => 683, 260 => 468, 261 => 562, +); +$_cr = array( + array(231, 632, 500), // half-width + array(8718, 8718, 500), + array(9738, 9757, 250), // quarter-width + array(9758, 9778, 333), // third-width + array(12063, 12087, 500) +); +foreach($_cr as $_r) { + for($i = $_r[0]; $i <= $_r[1]; $i++) { + $cw[$i+31] = $_r[2]; + } +} +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/kozminproregular.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/kozminproregular.php new file mode 100755 index 00000000..2d093c4a --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/kozminproregular.php @@ -0,0 +1,63 @@ + 880, + 'Descent' => -120, + 'CapHeight' => 740, + 'Flags' => 6, + 'FontBBox' => '[-195 -272 1110 1075]', + 'ItalicAngle' => 0, + 'StemV' => 86, + 'XHeight' => 502, +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'Japan1', + 'Supplement' => '4', +); +$enc = 'UniJIS-UCS2-H'; + +$up = -75; +$ut = 50; + +$dw = 1000; +$cw = array( + 32 => 278, 33 => 299, 34 => 353, 35 => 614, 36 => 614, 37 => 721, 38 => 735, 39 => 216, 40 => 323, 41 => 323, + 42 => 449, 43 => 529, 44 => 219, 45 => 306, 46 => 219, 47 => 453, 48 => 614, 49 => 614, 50 => 614, 51 => 614, + 52 => 614, 53 => 614, 54 => 614, 55 => 614, 56 => 614, 57 => 614, 58 => 219, 59 => 219, 60 => 529, 61 => 529, + 62 => 529, 63 => 486, 64 => 744, 65 => 646, 66 => 604, 67 => 617, 68 => 681, 69 => 567, 70 => 537, 71 => 647, + 72 => 738, 73 => 320, 74 => 433, 75 => 637, 76 => 566, 77 => 904, 78 => 710, 79 => 716, 80 => 605, 81 => 716, + 82 => 623, 83 => 517, 84 => 601, 85 => 690, 86 => 668, 87 => 990, 88 => 681, 89 => 634, 90 => 578, 91 => 316, + 92 => 614, 93 => 316, 94 => 529, 95 => 500, 96 => 387, 97 => 509, 98 => 566, 99 => 478, 100 => 565, 101 => 503, + 102 => 337, 103 => 549, 104 => 580, 105 => 275, 106 => 266, 107 => 544, 108 => 276, 109 => 854, 110 => 579, 111 => 550, + 112 => 578, 113 => 566, 114 => 410, 115 => 444, 116 => 340, 117 => 575, 118 => 512, 119 => 760, 120 => 503, 121 => 529, + 122 => 453, 123 => 326, 124 => 380, 125 => 326, 126 => 387, 127 => 216, 128 => 453, 129 => 216, 130 => 380, 131 => 529, + 132 => 299, 133 => 614, 134 => 614, 135 => 265, 136 => 614, 137 => 475, 138 => 614, 139 => 353, 140 => 451, 141 => 291, + 142 => 291, 143 => 588, 144 => 589, 145 => 500, 146 => 476, 147 => 476, 148 => 219, 149 => 494, 150 => 452, 151 => 216, + 152 => 353, 153 => 353, 154 => 451, 156 => 1075, 157 => 486, 158 => 387, 159 => 387, 160 => 387, 161 => 387, + 162 => 387, 163 => 387, 164 => 387, 165 => 387, 166 => 387, 167 => 387, 168 => 387, 170 => 880, 171 => 448, + 172 => 566, 173 => 716, 174 => 903, 175 => 460, 176 => 805, 177 => 275, 178 => 276, 179 => 550, 180 => 886, 181 => 582, + 182 => 529, 183 => 738, 184 => 529, 185 => 738, 186 => 357, 187 => 529, 188 => 406, 189 => 406, 190 => 575, 191 => 406, + 192 => 934, 193 => 934, 194 => 934, 195 => 646, 196 => 646, 197 => 646, 198 => 646, 199 => 646, 200 => 646, 201 => 617, + 202 => 567, 203 => 567, 204 => 567, 205 => 567, 206 => 320, 207 => 320, 208 => 320, 209 => 320, 210 => 681, 211 => 710, + 212 => 716, 213 => 716, 214 => 716, 215 => 716, 216 => 716, 217 => 529, 218 => 690, 219 => 690, 220 => 690, 221 => 690, + 222 => 634, 223 => 605, 224 => 509, 225 => 509, 226 => 509, 227 => 509, 228 => 509, 229 => 509, 230 => 478, 231 => 503, + 232 => 503, 233 => 503, 234 => 503, 235 => 275, 236 => 275, 237 => 275, 238 => 275, 239 => 550, 240 => 579, 241 => 550, + 242 => 550, 243 => 550, 244 => 550, 245 => 550, 246 => 529, 247 => 575, 248 => 575, 249 => 575, 250 => 575, 251 => 529, + 252 => 578, 253 => 529, 254 => 517, 255 => 634, 256 => 578, 257 => 445, 258 => 444, 259 => 842, 260 => 453, 261 => 614, +); +$_cr = array( + array(231, 632, 500), // half-width + array(8718, 8718, 500), + array(9738, 9757, 250), // quarter-width + array(9758, 9778, 333), // third-width + array(12063, 12087, 500), +); +foreach($_cr as $_r) { + for($i = $_r[0]; $i <= $_r[1]; $i++) { + $cw[$i+31] = $_r[2]; + } +} +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/msungstdlight.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/msungstdlight.php new file mode 100755 index 00000000..04b1da4a --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/msungstdlight.php @@ -0,0 +1,38 @@ + 880, + 'Descent' => -120, + 'CapHeight' => 880, + 'Flags' => 6, + 'FontBBox' => '[-160 -249 1015 1071]', + 'ItalicAngle' => 0, + 'StemV' => 93, +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'CNS1', + 'Supplement' => '3', +); +$enc = 'UniCNS-UCS2-H'; + +$up = -130; +$ut = 40; + +$dw = 1000; +$cw = array( + 32 => 250, 33 => 250, 34 => 408, 35 => 668, 36 => 490, 37 => 875, 38 => 698, 39 => 250, 40 => 240, 41 => 240, + 42 => 417, 43 => 667, 44 => 250, 45 => 313, 46 => 250, 47 => 520, 48 => 500, 49 => 500, 50 => 500, 51 => 500, + 52 => 500, 53 => 500, 54 => 500, 55 => 500, 56 => 500, 57 => 500, 58 => 250, 59 => 250, 60 => 667, 61 => 667, + 62 => 667, 63 => 396, 64 => 921, 65 => 677, 66 => 615, 67 => 719, 68 => 760, 69 => 625, 70 => 552, 71 => 771, + 72 => 802, 73 => 354, 74 => 354, 75 => 781, 76 => 604, 77 => 927, 78 => 750, 79 => 823, 80 => 563, 81 => 823, + 82 => 729, 83 => 542, 84 => 698, 85 => 771, 86 => 729, 87 => 948, 88 => 771, 89 => 677, 90 => 635, 91 => 344, + 92 => 520, 93 => 344, 94 => 469, 95 => 500, 96 => 250, 97 => 469, 98 => 521, 99 => 427, 100 => 521, 101 => 438, + 102 => 271, 103 => 469, 104 => 531, 105 => 250, 106 => 250, 107 => 458, 108 => 240, 109 => 802, 110 => 531, 111 => 500, + 112 => 521, 113 => 521, 114 => 365, 115 => 333, 116 => 292, 117 => 521, 118 => 458, 119 => 677, 120 => 479, 121 => 458, + 122 => 427, 123 => 480, 124 => 496, 125 => 480, 126 => 667, + 17601 => 500, +); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/newyorktimes.afm b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/newyorktimes.afm new file mode 100755 index 00000000..856081f8 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/newyorktimes.afm @@ -0,0 +1,275 @@ +StartFontMetrics 4.1 +FontName NewYorkTimes +FullName NewYorkTimes +Notice Generated by Metamorphosis Professional 2.01 +EncodingScheme FontSpecific +FamilyName NewYorkTimes +Weight Regular +Version Altsys Metamorphosis:5/3/93 +Characters 18 +ItalicAngle 0.0 +Ascender 811 +Descender -233 +UnderlineThickness 20 +UnderlinePosition -75 +IsFixedPitch false +FontBBox 0 -209 750 800 +StartCharMetrics 256 +C 0 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 1 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 2 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 3 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 4 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 5 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 6 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 7 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 8 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 9 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 10 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 11 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 12 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 13 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 14 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 15 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 16 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 17 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 18 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 19 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 20 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 21 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 22 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 23 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 24 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 25 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 26 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 27 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 28 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 29 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 30 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 31 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 32 ; WX 250 ; N space ; B 1 -73 740 789 ; +C 33 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 34 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 35 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 36 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 37 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 38 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 39 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 40 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 41 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 42 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 43 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 44 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 45 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 46 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 47 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 48 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 49 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 50 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 51 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 52 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 53 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 54 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 55 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 56 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 57 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 58 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 59 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 60 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 61 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 62 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 63 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 64 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 65 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 66 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 67 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 68 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 69 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 70 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 71 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 72 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 73 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 74 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 75 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 76 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 77 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 78 ; WX 766 ; N N ; B 1 -73 740 789 ; +C 79 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 80 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 81 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 82 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 83 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 84 ; WX 594 ; N T ; B 2 9 566 798 ; +C 85 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 86 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 87 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 88 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 89 ; WX 636 ; N Y ; B 2 -198 605 798 ; +C 90 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 91 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 92 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 93 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 94 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 95 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 96 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 97 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 98 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 99 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 100 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 101 ; WX 406 ; N e ; B 0 0 402 523 ; +C 102 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 103 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 104 ; WX 534 ; N h ; B 1 -193 514 799 ; +C 105 ; WX 343 ; N i ; B 0 0 313 722 ; +C 106 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 107 ; WX 544 ; N k ; B 0 -1025 513 772 ; +C 108 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 109 ; WX 764 ; N m ; B 1 1 734 510 ; +C 110 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 111 ; WX 456 ; N o ; B 1 0 425 517 ; +C 112 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 113 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 114 ; WX 417 ; N r ; B 1 1 387 519 ; +C 115 ; WX 384 ; N s ; B 0 -37 354 519 ; +C 116 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 117 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 118 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 119 ; WX 744 ; N w ; B 1 0 715 598 ; +C 120 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 121 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 122 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 123 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 124 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 125 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 126 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 127 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 128 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 129 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 130 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 131 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 132 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 133 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 134 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 135 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 136 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 137 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 138 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 139 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 140 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 141 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 142 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 143 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 144 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 145 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 146 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 147 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 148 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 149 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 150 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 151 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 152 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 153 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 154 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 155 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 156 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 157 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 158 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 159 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 160 ; WX 250 ; N nbspace ; B 43 44 506 427 ; +C 161 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 162 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 163 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 164 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 165 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 166 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 167 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 168 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 169 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 170 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 171 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 172 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 173 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 174 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 175 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 176 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 177 ; WX 549 ; N plusminus ; B 44 19 506 453 ; +C 178 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 179 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 180 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 181 ; WX 576 ; N mu ; B 73 -209 558 449 ; +C 182 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 183 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 184 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 185 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 186 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 187 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 188 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 189 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 190 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 191 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 192 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 193 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 194 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 195 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 196 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 197 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 198 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 199 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 200 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 201 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 202 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 203 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 204 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 205 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 206 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 207 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 208 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 209 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 210 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 211 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 212 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 213 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 214 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 215 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 216 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 217 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 218 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 219 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 220 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 221 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 222 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 223 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 224 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 225 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 226 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 227 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 228 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 229 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 230 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 231 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 232 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 233 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 234 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 235 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 236 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 237 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 238 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 239 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 240 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 241 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 242 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 243 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 244 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 245 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 246 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 247 ; WX 549 ; N divide ; B 43 44 506 427 ; +C 248 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 249 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 250 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 251 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 252 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 253 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 254 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +C 255 ; WX 800 ; N .notdef ; B 50 0 750 800 ; +EndCharMetrics +EndFontMetrics diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/newyorktimes.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/newyorktimes.php new file mode 100755 index 00000000..00d4dd6b --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/newyorktimes.php @@ -0,0 +1,39 @@ +811,'Descent'=>-233,'CapHeight'=>811,'Flags'=>32,'FontBBox'=>'[0 -209 750 800]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>800); +$up=-75; +$ut=20; +$dw=250; +$cw=array( +0=>800,1=>800,2=>800,3=>800,4=>800,5=>800,6=>800,7=>800,8=>800,9=>800, +10=>800,11=>800,12=>800,13=>800,14=>800,15=>800,16=>800,17=>800,18=>800,19=>800, +20=>800,21=>800,22=>800,23=>800,24=>800,25=>800,26=>800,27=>800,28=>800,29=>800, +30=>800,31=>800,32=>250,33=>800,34=>800,35=>800,36=>800,37=>800,38=>800,39=>800, +40=>800,41=>800,42=>800,43=>800,44=>800,45=>800,46=>800,47=>800,48=>800,49=>800, +50=>800,51=>800,52=>800,53=>800,54=>800,55=>800,56=>800,57=>800,58=>800,59=>800, +60=>800,61=>800,62=>800,63=>800,64=>800,65=>800,66=>800,67=>800,68=>800,69=>800, +70=>800,71=>800,72=>800,73=>800,74=>800,75=>800,76=>800,77=>800,78=>766,79=>800, +80=>800,81=>800,82=>800,83=>800,84=>594,85=>800,86=>800,87=>800,88=>800,89=>636, +90=>800,91=>800,92=>800,93=>800,94=>800,95=>800,96=>800,97=>800,98=>800,99=>800, +100=>800,101=>406,102=>800,103=>800,104=>534,105=>343,106=>800,107=>544,108=>800,109=>764, +110=>800,111=>456,112=>800,113=>800,114=>417,115=>384,116=>800,117=>800,118=>800,119=>744, +120=>800,121=>800,122=>800,123=>800,124=>800,125=>800,126=>800,127=>800,128=>800,129=>800, +130=>800,131=>800,132=>800,133=>800,134=>800,135=>800,136=>800,137=>800,138=>800,139=>800, +140=>800,141=>800,142=>800,143=>800,144=>800,145=>800,146=>800,147=>800,148=>800,149=>800, +150=>800,151=>800,152=>800,153=>800,154=>800,155=>800,156=>800,157=>800,158=>800,159=>800, +160=>250,161=>800,162=>800,163=>800,164=>800,165=>800,166=>800,167=>800,168=>800,169=>800, +170=>800,171=>800,172=>800,173=>800,174=>800,175=>800,176=>800,177=>549,178=>800,179=>800, +180=>800,181=>576,182=>800,183=>800,184=>800,185=>800,186=>800,187=>800,188=>800,189=>800, +190=>800,191=>800,192=>800,193=>800,194=>800,195=>800,196=>800,197=>800,198=>800,199=>800, +200=>800,201=>800,202=>800,203=>800,204=>800,205=>800,206=>800,207=>800,208=>800,209=>800, +210=>800,211=>800,212=>800,213=>800,214=>800,215=>800,216=>800,217=>800,218=>800,219=>800, +220=>800,221=>800,222=>800,223=>800,224=>800,225=>800,226=>800,227=>800,228=>800,229=>800, +230=>800,231=>800,232=>800,233=>800,234=>800,235=>800,236=>800,237=>800,238=>800,239=>800, +240=>800,241=>800,242=>800,243=>800,244=>800,245=>800,246=>800,247=>549,248=>800,249=>800, +250=>800,251=>800,252=>800,253=>800,254=>800,255=>800); +$enc='cp1252'; +$diff=''; +$file='newyorktimes.z'; +$originalsize=12500; +// --- EOF --- \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/newyorktimes.z b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/newyorktimes.z new file mode 100755 index 00000000..cb7e9dcf Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/newyorktimes.z differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/stsongstdlight.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/stsongstdlight.php new file mode 100755 index 00000000..dd9f00de --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/stsongstdlight.php @@ -0,0 +1,39 @@ + 752, + 'Descent' => -271, + 'CapHeight' => 737, + 'Flags' => 6, + 'FontBBox' => '[-25 -254 1000 880]', + 'ItalicAngle' => 0, + 'StemV' => 58, + 'Style' => '<< /Panose <000000000400000000000000> >>', +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'GB1', + 'Supplement' => '2', +); +$enc = 'UniGB-UCS2-H'; + +// underline position, needs checking: +$up = -130; +$ut = 40; + +$dw = 1000; +$cw = array( + 32 => 207, 33 => 270, 34 => 342, 35 => 467, 36 => 462, 37 => 797, 38 => 710, 39 => 239, 40 => 374, 41 => 374, + 42 => 423, 43 => 605, 44 => 238, 45 => 375, 46 => 238, 47 => 334, 48 => 462, 49 => 462, 50 => 462, 51 => 462, + 52 => 462, 53 => 462, 54 => 462, 55 => 462, 56 => 462, 57 => 462, 58 => 238, 59 => 238, 60 => 605, 61 => 605, + 62 => 605, 63 => 344, 64 => 748, 65 => 684, 66 => 560, 67 => 695, 68 => 739, 69 => 563, 70 => 511, 71 => 729, + 72 => 793, 73 => 318, 74 => 312, 75 => 666, 76 => 526, 77 => 896, 78 => 758, 79 => 772, 80 => 544, 81 => 772, + 82 => 628, 83 => 465, 84 => 607, 85 => 753, 86 => 711, 87 => 972, 88 => 647, 89 => 620, 90 => 607, 91 => 374, + 92 => 333, 93 => 374, 94 => 606, 95 => 500, 96 => 239, 97 => 417, 98 => 503, 99 => 427, 100 => 529, 101 => 415, + 102 => 264, 103 => 444, 104 => 518, 105 => 241, 106 => 230, 107 => 495, 108 => 228, 109 => 793, 110 => 527, 111 => 524, + 112 => 524, 113 => 504, 114 => 338, 115 => 336, 116 => 277, 117 => 517, 118 => 450, 119 => 652, 120 => 466, 121 => 452, + 122 => 407, 123 => 370, 124 => 258, 125 => 370, 126 => 605, +); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/symbol.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/symbol.php new file mode 100755 index 00000000..16cfb73a --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/symbol.php @@ -0,0 +1,32 @@ +250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250, +10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250, +20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250, +30=>250,31=>250,32=>250,33=>333,34=>713,35=>500,36=>549,37=>833,38=>778,39=>439, +40=>333,41=>333,42=>500,43=>549,44=>250,45=>549,46=>250,47=>278,48=>500,49=>500, +50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278, +60=>549,61=>549,62=>549,63=>444,64=>549,65=>722,66=>667,67=>722,68=>612,69=>611, +70=>763,71=>603,72=>722,73=>333,74=>631,75=>722,76=>686,77=>889,78=>722,79=>722, +80=>768,81=>741,82=>556,83=>592,84=>611,85=>690,86=>439,87=>768,88=>645,89=>795, +90=>611,91=>333,92=>863,93=>333,94=>658,95=>500,96=>500,97=>631,98=>549,99=>549, +100=>494,101=>439,102=>521,103=>411,104=>603,105=>329,106=>603,107=>549,108=>549, +109=>576,110=>521,111=>549,112=>549,113=>521,114=>549,115=>603,116=>439,117=>576, +118=>713,119=>686,120=>493,121=>686,122=>494,123=>480,124=>200,125=>480,126=>549, +127=>0,128=>0,129=>0,130=>0,131=>0,132=>0,133=>0,134=>0,135=>0,136=>0,137=>0, +138=>0,139=>0,140=>0,141=>0,142=>0,143=>0,144=>0,145=>0,146=>0,147=>0,148=>0, +149=>0,150=>0,151=>0,152=>0,153=>0,154=>0,155=>0,156=>0,157=>0,158=>0,159=>0, +160=>750,161=>620,162=>247,163=>549,164=>167,165=>713,166=>500,167=>753,168=>753, +169=>753,170=>753,171=>1042,172=>987,173=>603,174=>987,175=>603,176=>400,177=>549, +178=>411,179=>549,180=>549,181=>713,182=>494,183=>460,184=>549,185=>549,186=>549, +187=>549,188=>1000,189=>603,190=>1000,191=>658,192=>823,193=>686,194=>795,195=>987, +196=>768,197=>768,198=>823,199=>768,200=>768,201=>713,202=>713,203=>713,204=>713, +205=>713,206=>713,207=>713,208=>768,209=>713,210=>790,211=>790,212=>890,213=>823, +214=>549,215=>250,216=>713,217=>603,218=>603,219=>1042,220=>987,221=>603,222=>987, +223=>603,224=>494,225=>329,226=>790,227=>790,228=>786,229=>713,230=>384,231=>384, +232=>384,233=>384,234=>384,235=>384,236=>494,237=>494,238=>494,239=>494,240=>0, +241=>329,242=>274,243=>686,244=>686,245=>686,246=>384,247=>384,248=>384,249=>384, +250=>384,251=>384,252=>494,253=>494,254=>494,255=>0); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/times.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/times.php new file mode 100755 index 00000000..1e71e5e8 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/times.php @@ -0,0 +1,33 @@ +250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250, +10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250, +20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250, +30=>250,31=>250,32=>250,33=>333,34=>408,35=>500,36=>500,37=>833,38=>778,39=>180, +40=>333,41=>333,42=>500,43=>564,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500, +50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278, +60=>564,61=>564,62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611, +70=>556,71=>722,72=>722,73=>333,74=>389,75=>722,76=>611,77=>889,78=>722,79=>722, +80=>556,81=>722,82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722, +90=>611,91=>333,92=>278,93=>333,94=>469,95=>500,96=>333,97=>444,98=>500,99=>444, +100=>500,101=>444,102=>333,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278, +109=>778,110=>500,111=>500,112=>500,113=>500,114=>333,115=>389,116=>278,117=>500, +118=>500,119=>722,120=>500,121=>500,122=>444,123=>480,124=>200,125=>480,126=>541, +127=>350,128=>500,129=>350,130=>333,131=>500,132=>444,133=>1000,134=>500,135=>500, +136=>333,137=>1000,138=>556,139=>333,140=>889,141=>350,142=>611,143=>350,144=>350, +145=>333,146=>333,147=>444,148=>444,149=>350,150=>500,151=>1000,152=>333,153=>980, +154=>389,155=>333,156=>722,157=>350,158=>444,159=>722,160=>250,161=>333,162=>500, +163=>500,164=>500,165=>500,166=>200,167=>500,168=>333,169=>760,170=>276,171=>500, +172=>564,173=>333,174=>760,175=>333,176=>400,177=>564,178=>300,179=>300,180=>333, +181=>500,182=>453,183=>250,184=>333,185=>300,186=>310,187=>500,188=>750,189=>750, +190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>889, +199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333, +208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722, +217=>722,218=>722,219=>722,220=>722,221=>722,222=>556,223=>500,224=>444,225=>444, +226=>444,227=>444,228=>444,229=>444,230=>667,231=>444,232=>444,233=>444,234=>444, +235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500, +244=>500,245=>500,246=>500,247=>564,248=>500,249=>500,250=>500,251=>500,252=>500, +253=>500,254=>500,255=>500); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/timesb.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/timesb.php new file mode 100755 index 00000000..866a48c7 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/timesb.php @@ -0,0 +1,33 @@ +250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250, +10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250, +20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250, +30=>250,31=>250,32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278, +40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500, +50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333, +60=>570,61=>570,62=>570,63=>500,64=>930,65=>722,66=>667,67=>722,68=>722,69=>667, +70=>611,71=>778,72=>778,73=>389,74=>500,75=>778,76=>667,77=>944,78=>722,79=>778, +80=>611,81=>778,82=>722,83=>556,84=>667,85=>722,86=>722,87=>1000,88=>722,89=>722, +90=>667,91=>333,92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>556,99=>444, +100=>556,101=>444,102=>333,103=>500,104=>556,105=>278,106=>333,107=>556,108=>278, +109=>833,110=>556,111=>500,112=>556,113=>556,114=>444,115=>389,116=>333,117=>556, +118=>500,119=>722,120=>500,121=>500,122=>444,123=>394,124=>220,125=>394,126=>520, +127=>350,128=>500,129=>350,130=>333,131=>500,132=>500,133=>1000,134=>500,135=>500, +136=>333,137=>1000,138=>556,139=>333,140=>1000,141=>350,142=>667,143=>350,144=>350, +145=>333,146=>333,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1000, +154=>389,155=>333,156=>722,157=>350,158=>444,159=>722,160=>250,161=>333,162=>500, +163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>300,171=>500, +172=>570,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333, +181=>556,182=>540,183=>250,184=>333,185=>300,186=>330,187=>500,188=>750,189=>750, +190=>750,191=>500,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000, +199=>722,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389, +208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>570,216=>778, +217=>722,218=>722,219=>722,220=>722,221=>722,222=>611,223=>556,224=>500,225=>500, +226=>500,227=>500,228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444, +235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500, +244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556, +253=>500,254=>556,255=>500); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/timesbi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/timesbi.php new file mode 100755 index 00000000..e3ac79ac --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/timesbi.php @@ -0,0 +1,33 @@ +250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250, +10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250, +20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250, +30=>250,31=>250,32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278, +40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500, +50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333, +60=>570,61=>570,62=>570,63=>500,64=>832,65=>667,66=>667,67=>667,68=>722,69=>667, +70=>667,71=>722,72=>778,73=>389,74=>500,75=>667,76=>611,77=>889,78=>722,79=>722, +80=>611,81=>722,82=>667,83=>556,84=>611,85=>722,86=>667,87=>889,88=>667,89=>611, +90=>611,91=>333,92=>278,93=>333,94=>570,95=>500,96=>333,97=>500,98=>500,99=>444, +100=>500,101=>444,102=>333,103=>500,104=>556,105=>278,106=>278,107=>500,108=>278, +109=>778,110=>556,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>556, +118=>444,119=>667,120=>500,121=>444,122=>389,123=>348,124=>220,125=>348,126=>570, +127=>350,128=>500,129=>350,130=>333,131=>500,132=>500,133=>1000,134=>500,135=>500, +136=>333,137=>1000,138=>556,139=>333,140=>944,141=>350,142=>611,143=>350,144=>350, +145=>333,146=>333,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1000, +154=>389,155=>333,156=>722,157=>350,158=>389,159=>611,160=>250,161=>389,162=>500, +163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>266,171=>500, +172=>606,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333, +181=>576,182=>500,183=>250,184=>333,185=>300,186=>300,187=>500,188=>750,189=>750, +190=>750,191=>500,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>944, +199=>667,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389, +208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>570,216=>722, +217=>722,218=>722,219=>722,220=>722,221=>611,222=>611,223=>500,224=>500,225=>500, +226=>500,227=>500,228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444, +235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500, +244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556, +253=>444,254=>500,255=>444); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/timesi.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/timesi.php new file mode 100755 index 00000000..472a273d --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/timesi.php @@ -0,0 +1,33 @@ +250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250, +10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250, +20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250, +30=>250,31=>250,32=>250,33=>333,34=>420,35=>500,36=>500,37=>833,38=>778,39=>214, +40=>333,41=>333,42=>500,43=>675,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500, +50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333, +60=>675,61=>675,62=>675,63=>500,64=>920,65=>611,66=>611,67=>667,68=>722,69=>611, +70=>611,71=>722,72=>722,73=>333,74=>444,75=>667,76=>556,77=>833,78=>667,79=>722, +80=>611,81=>722,82=>611,83=>500,84=>556,85=>722,86=>611,87=>833,88=>611,89=>556, +90=>556,91=>389,92=>278,93=>389,94=>422,95=>500,96=>333,97=>500,98=>500,99=>444, +100=>500,101=>444,102=>278,103=>500,104=>500,105=>278,106=>278,107=>444,108=>278, +109=>722,110=>500,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>500, +118=>444,119=>667,120=>444,121=>444,122=>389,123=>400,124=>275,125=>400,126=>541, +127=>350,128=>500,129=>350,130=>333,131=>500,132=>556,133=>889,134=>500,135=>500, +136=>333,137=>1000,138=>500,139=>333,140=>944,141=>350,142=>556,143=>350,144=>350, +145=>333,146=>333,147=>556,148=>556,149=>350,150=>500,151=>889,152=>333,153=>980, +154=>389,155=>333,156=>667,157=>350,158=>389,159=>556,160=>250,161=>389,162=>500, +163=>500,164=>500,165=>500,166=>275,167=>500,168=>333,169=>760,170=>276,171=>500, +172=>675,173=>333,174=>760,175=>333,176=>400,177=>675,178=>300,179=>300,180=>333, +181=>500,182=>523,183=>250,184=>333,185=>300,186=>310,187=>500,188=>750,189=>750, +190=>750,191=>500,192=>611,193=>611,194=>611,195=>611,196=>611,197=>611,198=>889, +199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333, +208=>722,209=>667,210=>722,211=>722,212=>722,213=>722,214=>722,215=>675,216=>722, +217=>722,218=>722,219=>722,220=>722,221=>556,222=>611,223=>500,224=>500,225=>500, +226=>500,227=>500,228=>500,229=>500,230=>667,231=>444,232=>444,233=>444,234=>444, +235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500, +244=>500,245=>500,246=>500,247=>675,248=>500,249=>500,250=>500,251=>500,252=>500, +253=>444,254=>500,255=>444); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/uni2cid_ac15.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/uni2cid_ac15.php new file mode 100755 index 00000000..c86231de --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/uni2cid_ac15.php @@ -0,0 +1,23613 @@ +1, +33=>2, +34=>3, +35=>4, +36=>5, +37=>6, +38=>7, +39=>8, +40=>9, +41=>10, +42=>11, +43=>12, +44=>13, +45=>14, +46=>15, +47=>16, +48=>17, +49=>18, +50=>19, +51=>20, +52=>21, +53=>22, +54=>23, +55=>24, +56=>25, +57=>26, +58=>27, +59=>28, +60=>29, +61=>30, +62=>31, +63=>32, +64=>33, +65=>34, +66=>35, +67=>36, +68=>37, +69=>38, +70=>39, +71=>40, +72=>41, +73=>42, +74=>43, +75=>44, +76=>45, +77=>46, +78=>47, +79=>48, +80=>49, +81=>50, +82=>51, +83=>52, +84=>53, +85=>54, +86=>55, +87=>56, +88=>57, +89=>58, +90=>59, +91=>60, +92=>61, +93=>62, +94=>63, +95=>64, +96=>65, +97=>66, +98=>67, +99=>68, +100=>69, +101=>70, +102=>71, +103=>72, +104=>73, +105=>74, +106=>75, +107=>76, +108=>77, +109=>78, +110=>79, +111=>80, +112=>81, +113=>82, +114=>83, +115=>84, +116=>85, +117=>86, +118=>87, +119=>88, +120=>89, +121=>90, +122=>91, +123=>92, +124=>93, +125=>94, +126=>95, +12288=>99, +65292=>100, +12289=>101, +12290=>102, +65294=>103, +8226=>104, +8231=>104, +65307=>105, +65306=>106, +65311=>107, +65281=>108, +65072=>109, +8230=>110, +8943=>110, +8229=>111, +65104=>112, +65380=>113, +65105=>113, +65106=>114, +183=>115, +65108=>116, +65109=>117, +65110=>118, +65111=>119, +65372=>120, +8211=>121, +65073=>122, +8212=>123, +65288=>128, +65289=>129, +65077=>130, +65078=>131, +65371=>132, +65373=>133, +65079=>134, +65080=>135, +12308=>136, +12309=>137, +65081=>138, +65082=>139, +12304=>140, +12305=>141, +65083=>142, +65084=>143, +12298=>144, +12299=>145, +65085=>146, +65086=>147, +12296=>148, +12297=>149, +65087=>150, +65088=>151, +12300=>152, +12301=>153, +65089=>154, +65090=>155, +12302=>156, +12303=>157, +65091=>158, +65092=>159, +65113=>160, +65114=>161, +65115=>162, +65116=>163, +65117=>164, +65118=>165, +8216=>166, +8217=>167, +8220=>168, +8221=>169, +12317=>170, +12318=>171, +8245=>172, +8242=>173, +65283=>174, +65286=>175, +65290=>176, +8251=>177, +167=>178, +12291=>179, +9675=>180, +9679=>181, +9651=>182, +9650=>183, +9678=>184, +9734=>185, +9733=>186, +9671=>187, +9670=>188, +9633=>189, +9632=>190, +9661=>191, +9660=>192, +12963=>193, +8453=>194, +175=>195, +772=>195, +8254=>195, +65507=>196, +65343=>197, +717=>198, +65097=>199, +65098=>200, +65101=>201, +65102=>202, +65099=>203, +65100=>204, +65119=>205, +65120=>206, +65121=>207, +65291=>208, +65293=>209, +215=>210, +247=>211, +177=>212, +8730=>213, +65308=>214, +65310=>215, +65309=>216, +8806=>217, +8807=>218, +8800=>219, +8734=>220, +8786=>221, +8801=>222, +65122=>223, +65123=>224, +65124=>225, +65125=>226, +65126=>227, +8764=>228, +65374=>228, +8745=>229, +8746=>230, +8869=>231, +8736=>232, +8735=>233, +8895=>234, +13266=>235, +13265=>236, +8747=>237, +8750=>238, +8757=>239, +8756=>240, +9792=>241, +9794=>242, +8853=>243, +9793=>243, +8857=>244, +9737=>244, +8593=>245, +8595=>246, +8594=>247, +8592=>248, +8598=>249, +8599=>250, +8601=>251, +8600=>252, +8741=>253, +8739=>254, +8725=>257, +65295=>257, +65128=>258, +65340=>258, +65284=>259, +165=>260, +65509=>260, +12306=>261, +162=>262, +65504=>262, +163=>263, +65505=>263, +65285=>264, +65312=>265, +8451=>266, +8457=>267, +65129=>268, +65130=>269, +65131=>270, +13269=>271, +13212=>272, +13213=>273, +13214=>274, +13262=>275, +13217=>276, +13198=>277, +13199=>278, +13252=>279, +176=>280, +20825=>281, +58834=>281, +20827=>282, +58835=>282, +20830=>283, +58837=>283, +20829=>284, +58836=>284, +20833=>285, +20835=>286, +21991=>287, +29929=>288, +58044=>288, +31950=>289, +58191=>289, +9601=>290, +9602=>291, +9603=>292, +9604=>293, +9605=>294, +9606=>295, +9607=>296, +9608=>297, +9615=>298, +9614=>299, +9613=>300, +9612=>301, +9611=>302, +9610=>303, +9609=>304, +9532=>305, +9524=>306, +9516=>307, +9508=>308, +9500=>309, +9620=>310, +9472=>311, +9474=>312, +9621=>313, +9484=>314, +9488=>315, +9492=>316, +9496=>317, +9581=>318, +9582=>319, +9584=>320, +9583=>321, +9552=>322, +9566=>323, +9578=>324, +9569=>325, +9698=>326, +9699=>327, +9701=>328, +9700=>329, +9585=>330, +9586=>331, +9587=>332, +65296=>333, +65297=>334, +65298=>335, +65299=>336, +65300=>337, +65301=>338, +65302=>339, +65303=>340, +65304=>341, +65305=>342, +8544=>343, +8545=>344, +8546=>345, +8547=>346, +8548=>347, +8549=>348, +8550=>349, +8551=>350, +8552=>351, +8553=>352, +12321=>353, +12322=>354, +12323=>355, +12324=>356, +12325=>357, +12326=>358, +12327=>359, +12328=>360, +12329=>361, +12344=>362, +21316=>363, +57443=>363, +12345=>363, +12346=>364, +65313=>365, +65314=>366, +65315=>367, +65316=>368, +65317=>369, +65318=>370, +65319=>371, +65320=>372, +65321=>373, +65322=>374, +65323=>375, +65324=>376, +65325=>377, +65326=>378, +65327=>379, +65328=>380, +65329=>381, +65330=>382, +65331=>383, +65332=>384, +65333=>385, +65334=>386, +65335=>387, +65336=>388, +65337=>389, +65338=>390, +65345=>391, +65346=>392, +65347=>393, +65348=>394, +65349=>395, +65350=>396, +65351=>397, +65352=>398, +65353=>399, +65354=>400, +65355=>401, +65356=>402, +65357=>403, +65358=>404, +65359=>405, +65360=>406, +65361=>407, +65362=>408, +65363=>409, +65364=>410, +65365=>411, +65366=>412, +65367=>413, +65368=>414, +65369=>415, +65370=>416, +913=>417, +914=>418, +915=>419, +916=>420, +917=>421, +918=>422, +919=>423, +920=>424, +921=>425, +922=>426, +923=>427, +924=>428, +925=>429, +926=>430, +927=>431, +928=>432, +929=>433, +931=>434, +932=>435, +933=>436, +934=>437, +935=>438, +936=>439, +937=>440, +945=>441, +946=>442, +947=>443, +948=>444, +949=>445, +950=>446, +951=>447, +952=>448, +953=>449, +954=>450, +955=>451, +956=>452, +957=>453, +958=>454, +959=>455, +960=>456, +961=>457, +963=>458, +964=>459, +965=>460, +966=>461, +967=>462, +968=>463, +969=>464, +12549=>465, +12550=>466, +12551=>467, +12552=>468, +12553=>469, +12554=>470, +12555=>471, +12556=>472, +12557=>473, +12558=>474, +12559=>475, +12560=>476, +12561=>477, +12562=>478, +12563=>479, +12564=>480, +12565=>481, +12566=>482, +12567=>483, +12568=>484, +12569=>485, +12570=>486, +12571=>487, +12572=>488, +12573=>489, +12574=>490, +12575=>491, +12576=>492, +12577=>493, +12578=>494, +12579=>495, +12580=>496, +12581=>497, +12582=>498, +12583=>499, +12584=>500, +12585=>501, +729=>502, +714=>503, +711=>504, +780=>504, +715=>505, +9312=>506, +63153=>506, +9313=>507, +63154=>507, +9314=>508, +63155=>508, +9315=>509, +63156=>509, +9316=>510, +63157=>510, +9317=>511, +63158=>511, +9318=>512, +63159=>512, +9319=>513, +63160=>513, +9320=>514, +63161=>514, +9321=>515, +63162=>515, +9332=>516, +63163=>516, +9333=>517, +63164=>517, +9334=>518, +63165=>518, +9335=>519, +63166=>519, +9336=>520, +63167=>520, +9337=>521, +63168=>521, +9338=>522, +63169=>522, +9339=>523, +63170=>523, +9340=>524, +63171=>524, +9341=>525, +63172=>525, +8560=>526, +63173=>526, +8561=>527, +63174=>527, +8562=>528, +63175=>528, +8563=>529, +63176=>529, +8564=>530, +63177=>530, +8565=>531, +63178=>531, +8566=>532, +63179=>532, +8567=>533, +63180=>533, +8568=>534, +63181=>534, +8569=>535, +63182=>535, +20008=>536, +12033=>536, +20022=>537, +12034=>537, +63183=>537, +20031=>538, +12035=>538, +63184=>538, +12037=>539, +20101=>539, +63185=>539, +12039=>540, +20128=>540, +63186=>540, +20866=>541, +12044=>541, +63187=>541, +20886=>542, +12045=>542, +63188=>542, +20907=>543, +12046=>543, +63189=>543, +12051=>544, +21241=>544, +63190=>544, +12054=>545, +21304=>545, +63191=>545, +12057=>546, +21353=>546, +63192=>546, +12059=>547, +21430=>547, +63193=>547, +12065=>548, +12066=>548, +22786=>548, +22794=>548, +63194=>548, +12071=>549, +23424=>549, +63195=>549, +12078=>550, +24027=>550, +63196=>550, +24186=>551, +12083=>551, +63197=>551, +24191=>552, +12084=>552, +63198=>552, +24308=>553, +12085=>553, +24400=>554, +12089=>554, +63200=>554, +24417=>555, +12090=>555, +63201=>555, +12097=>556, +25908=>556, +63202=>556, +12102=>557, +26080=>557, +30098=>558, +63204=>558, +12135=>558, +30326=>559, +12136=>559, +12193=>560, +36789=>560, +63206=>560, +12202=>561, +38582=>561, +9216=>562, +9217=>563, +9218=>564, +9219=>565, +9220=>566, +9221=>567, +9222=>568, +9223=>569, +9224=>570, +9225=>571, +9226=>572, +9227=>573, +9228=>574, +9229=>575, +9230=>576, +9231=>577, +9232=>578, +9233=>579, +9234=>580, +9235=>581, +9236=>582, +9237=>583, +9238=>584, +9239=>585, +9240=>586, +9241=>587, +9242=>588, +9243=>589, +9244=>590, +9245=>591, +9246=>592, +9247=>593, +9249=>594, +12032=>595, +19968=>595, +12036=>596, +20057=>596, +19969=>597, +19971=>598, +20035=>599, +20061=>600, +20102=>601, +12038=>602, +20108=>602, +20154=>603, +12040=>603, +20799=>604, +12041=>604, +20837=>605, +12042=>605, +20843=>606, +12043=>606, +12047=>607, +20960=>607, +12049=>608, +20992=>608, +20993=>609, +12050=>610, +21147=>610, +12052=>611, +21269=>611, +21313=>612, +12055=>612, +21340=>613, +12056=>613, +12060=>614, +21448=>614, +19977=>615, +19979=>616, +19976=>617, +19978=>618, +20011=>619, +20024=>620, +20961=>621, +20037=>622, +20040=>623, +20063=>624, +20062=>625, +20110=>626, +20129=>627, +20800=>628, +64012=>628, +20995=>629, +21242=>630, +21315=>631, +21449=>632, +12061=>633, +21475=>633, +22303=>634, +12063=>634, +22763=>635, +12064=>635, +22805=>636, +12067=>636, +22823=>637, +12068=>637, +22899=>638, +12069=>638, +12070=>639, +23376=>639, +23377=>640, +23379=>641, +23544=>642, +12072=>642, +23567=>643, +12073=>643, +23586=>644, +12074=>644, +23608=>645, +12075=>645, +12077=>646, +23665=>646, +24029=>647, +24037=>648, +12079=>648, +12080=>649, +24049=>649, +24050=>650, +24051=>651, +24062=>652, +12081=>652, +24178=>653, +12082=>653, +24318=>654, +12086=>654, +24331=>655, +12087=>655, +24339=>656, +12088=>656, +25165=>657, +19985=>658, +19984=>659, +19981=>660, +20013=>661, +20016=>662, +20025=>663, +20043=>664, +23609=>665, +20104=>666, +20113=>667, +20117=>668, +20114=>669, +20116=>670, +20130=>671, +20161=>672, +20160=>673, +20163=>674, +20166=>675, +20167=>676, +20173=>677, +20170=>678, +20171=>679, +20164=>680, +20803=>681, +20801=>682, +20839=>683, +20845=>684, +20846=>685, +20844=>686, +20887=>687, +20982=>688, +20998=>689, +20999=>690, +21000=>691, +21243=>692, +21246=>693, +21247=>694, +21270=>695, +21305=>696, +21320=>697, +21319=>698, +21317=>699, +21342=>700, +21380=>701, +21451=>702, +21450=>703, +21453=>704, +22764=>705, +22825=>706, +22827=>707, +22826=>708, +22829=>709, +23380=>710, +23569=>711, +23588=>712, +23610=>713, +23663=>714, +24052=>715, +24187=>716, +24319=>717, +24340=>718, +24341=>719, +24515=>720, +12092=>720, +25096=>721, +12093=>721, +25142=>722, +12094=>722, +25163=>723, +12095=>723, +25166=>724, +12096=>725, +25903=>725, +25991=>726, +12098=>726, +26007=>727, +12099=>727, +26020=>728, +12100=>728, +26041=>729, +12101=>729, +26085=>730, +12103=>730, +26352=>731, +12104=>731, +26376=>732, +12105=>732, +26408=>733, +12106=>733, +27424=>734, +12107=>734, +27490=>735, +12108=>735, +27513=>736, +12109=>736, +27595=>737, +12111=>737, +27604=>738, +12112=>738, +27611=>739, +12113=>739, +27663=>740, +12114=>740, +27700=>741, +12116=>741, +28779=>742, +12117=>742, +29226=>743, +12118=>743, +29238=>744, +12119=>744, +29243=>745, +12120=>745, +29255=>746, +12122=>746, +29273=>747, +12123=>747, +29275=>748, +12124=>748, +29356=>749, +12125=>749, +29579=>750, +19993=>751, +19990=>752, +19989=>753, +19988=>754, +19992=>755, +20027=>756, +20045=>757, +20047=>758, +20046=>759, +20197=>760, +20184=>761, +20180=>762, +20181=>763, +20182=>764, +20183=>765, +20195=>766, +20196=>767, +20185=>768, +20190=>769, +20805=>770, +20804=>771, +20873=>772, +20874=>773, +20908=>774, +20985=>775, +20986=>776, +20984=>777, +21002=>778, +21152=>779, +21151=>780, +57435=>781, +21253=>781, +21254=>782, +21271=>783, +21277=>784, +20191=>785, +21322=>786, +21321=>787, +21345=>788, +21344=>789, +21359=>790, +21358=>791, +21435=>792, +21487=>793, +21476=>794, +21491=>795, +21484=>796, +21486=>797, +21481=>798, +21480=>799, +21500=>800, +21496=>801, +21493=>802, +21483=>803, +21478=>804, +21482=>805, +21490=>806, +21489=>807, +21488=>808, +21477=>809, +21485=>810, +21499=>811, +22235=>812, +22234=>813, +22806=>814, +22830=>815, +22833=>816, +22900=>817, +22902=>818, +23381=>819, +23427=>820, +23612=>821, +24040=>822, +24039=>823, +24038=>824, +24066=>825, +24067=>826, +24179=>827, +24188=>828, +24321=>829, +24344=>830, +24343=>831, +24517=>832, +25098=>833, +25171=>834, +25172=>835, +25170=>836, +25169=>837, +26021=>838, +26086=>839, +26414=>840, +26412=>841, +26410=>842, +26411=>843, +26413=>844, +27491=>845, +27597=>846, +27665=>847, +27664=>848, +27704=>849, +27713=>850, +27712=>851, +27710=>852, +29359=>853, +29572=>854, +12126=>854, +29577=>855, +12127=>855, +29916=>856, +12128=>856, +29926=>857, +12129=>857, +29976=>858, +12130=>858, +29983=>859, +12131=>859, +12132=>860, +29992=>860, +29993=>861, +12133=>862, +30000=>862, +30001=>863, +30002=>864, +30003=>865, +12134=>866, +30091=>866, +30333=>867, +12137=>867, +30382=>868, +12138=>868, +30399=>869, +12139=>869, +30446=>870, +12140=>870, +30683=>871, +12141=>871, +30690=>872, +12142=>872, +30707=>873, +12143=>873, +31034=>874, +12144=>874, +31166=>875, +12146=>875, +31348=>876, +12147=>876, +31435=>877, +12148=>877, +19998=>878, +19999=>879, +20050=>880, +20051=>881, +20073=>882, +20121=>883, +20132=>884, +20134=>885, +20133=>886, +20223=>887, +20233=>888, +20249=>889, +20234=>890, +20245=>891, +20237=>892, +20240=>893, +20241=>894, +20239=>895, +20210=>896, +20214=>897, +20219=>898, +20208=>899, +20211=>900, +20221=>901, +20225=>902, +20235=>903, +20809=>904, +20807=>905, +20806=>906, +20808=>907, +20840=>908, +20849=>909, +20877=>910, +20912=>911, +21015=>912, +21009=>913, +21010=>914, +21006=>915, +21014=>916, +21155=>917, +21256=>918, +21281=>919, +21280=>920, +21360=>921, +21361=>922, +21513=>923, +21519=>924, +21516=>925, +21514=>926, +21520=>927, +21505=>928, +21515=>929, +21508=>930, +21521=>931, +21517=>932, +21512=>933, +21507=>934, +21518=>935, +21510=>936, +21522=>937, +22240=>938, +22238=>939, +22237=>940, +22323=>941, +22320=>942, +22312=>943, +22317=>944, +22316=>945, +22319=>946, +22313=>947, +22809=>948, +22810=>949, +22839=>950, +22840=>951, +22916=>952, +22904=>953, +22915=>954, +22909=>955, +22905=>956, +22914=>957, +22913=>958, +23383=>959, +23384=>960, +23431=>961, +23432=>962, +23429=>963, +23433=>964, +23546=>965, +23574=>966, +23673=>967, +24030=>968, +24070=>969, +24182=>970, +24180=>971, +24335=>972, +24347=>973, +24537=>974, +24534=>975, +25102=>976, +25100=>977, +25101=>978, +25104=>979, +25187=>980, +25179=>981, +25176=>982, +25910=>983, +26089=>984, +26088=>985, +26092=>986, +26093=>987, +26354=>988, +26355=>989, +26377=>990, +26429=>991, +26420=>992, +26417=>993, +26421=>994, +27425=>995, +27492=>996, +27515=>997, +27670=>998, +27741=>999, +27735=>1000, +27737=>1001, +27743=>1002, +27744=>1003, +27728=>1004, +27733=>1005, +27745=>1006, +27739=>1007, +27725=>1008, +27726=>1009, +28784=>1010, +29279=>1011, +29277=>1012, +30334=>1013, +31481=>1014, +12149=>1014, +31859=>1015, +12150=>1015, +31992=>1016, +12151=>1016, +32566=>1017, +12152=>1017, +32650=>1018, +12154=>1018, +32701=>1019, +12155=>1019, +32769=>1020, +12156=>1020, +32771=>1021, +32780=>1022, +12157=>1022, +32786=>1023, +12158=>1023, +32819=>1024, +12159=>1024, +32895=>1025, +12160=>1025, +32905=>1026, +12161=>1026, +32907=>1027, +32908=>1028, +33251=>1029, +12162=>1029, +33258=>1030, +12163=>1030, +33267=>1031, +12164=>1031, +33276=>1032, +12165=>1032, +33292=>1033, +12166=>1033, +33307=>1034, +12167=>1034, +33311=>1035, +12168=>1035, +33390=>1036, +12169=>1036, +33394=>1037, +12170=>1037, +33406=>1038, +34411=>1039, +12173=>1039, +34880=>1040, +12174=>1040, +34892=>1041, +12175=>1041, +34915=>1042, +12176=>1042, +35199=>1043, +38433=>1044, +20018=>1045, +20136=>1046, +20301=>1047, +20303=>1048, +20295=>1049, +20311=>1050, +20318=>1051, +20276=>1052, +20315=>1053, +20309=>1054, +20272=>1055, +20304=>1056, +20305=>1057, +20285=>1058, +20282=>1059, +20280=>1060, +20291=>1061, +20308=>1062, +20284=>1063, +20294=>1064, +20323=>1065, +20316=>1066, +20320=>1067, +20271=>1068, +20302=>1069, +20278=>1070, +20313=>1071, +20317=>1072, +20296=>1073, +20314=>1074, +20812=>1075, +20811=>1076, +20813=>1077, +20853=>1078, +20918=>1079, +20919=>1080, +21029=>1081, +21028=>1082, +21033=>1083, +21034=>1084, +21032=>1085, +21163=>1086, +21161=>1087, +21162=>1088, +21164=>1089, +21283=>1090, +21363=>1091, +21365=>1092, +21533=>1093, +21549=>1094, +21534=>1095, +21566=>1096, +21542=>1097, +21582=>1098, +21543=>1099, +21574=>1100, +21571=>1101, +21555=>1102, +21576=>1103, +21570=>1104, +21531=>1105, +21545=>1106, +21578=>1107, +21561=>1108, +21563=>1109, +21560=>1110, +21550=>1111, +21557=>1112, +21558=>1113, +21536=>1114, +21564=>1115, +21568=>1116, +21553=>1117, +21547=>1118, +21535=>1119, +21548=>1120, +22250=>1121, +22256=>1122, +22244=>1123, +22251=>1124, +22346=>1125, +22353=>1126, +22336=>1127, +22349=>1128, +22343=>1129, +22350=>1130, +22334=>1131, +22352=>1132, +22351=>1133, +22331=>1134, +22767=>1135, +22846=>1136, +22941=>1137, +22930=>1138, +22952=>1139, +22942=>1140, +22947=>1141, +22937=>1142, +22934=>1143, +22925=>1144, +22948=>1145, +22931=>1146, +22922=>1147, +22949=>1148, +23389=>1149, +23388=>1150, +23386=>1151, +23387=>1152, +23436=>1153, +23435=>1154, +23439=>1155, +23596=>1156, +23616=>1157, +23617=>1158, +23615=>1159, +23614=>1160, +23696=>1161, +23697=>1162, +23700=>1163, +23692=>1164, +24043=>1165, +24076=>1166, +24207=>1167, +24199=>1168, +24202=>1169, +24311=>1170, +24324=>1171, +24351=>1172, +24420=>1173, +24418=>1174, +24439=>1175, +24441=>1176, +24536=>1177, +24524=>1178, +24535=>1179, +24525=>1180, +24561=>1181, +24555=>1182, +24568=>1183, +24554=>1184, +25106=>1185, +25105=>1186, +25220=>1187, +25239=>1188, +25238=>1189, +25216=>1190, +25206=>1191, +25225=>1192, +25197=>1193, +25226=>1194, +25212=>1195, +25214=>1196, +25209=>1197, +25203=>1198, +25234=>1199, +25199=>1200, +25240=>1201, +25198=>1202, +25237=>1203, +25235=>1204, +25233=>1205, +25222=>1206, +25913=>1207, +25915=>1208, +25912=>1209, +26097=>1210, +26356=>1211, +26463=>1212, +26446=>1213, +26447=>1214, +26448=>1215, +26449=>1216, +26460=>1217, +26454=>1218, +26462=>1219, +57801=>1219, +26441=>1220, +26438=>1221, +26464=>1222, +26451=>1223, +26455=>1224, +27493=>1225, +27599=>1226, +27714=>1227, +27742=>1228, +27801=>1229, +27777=>1230, +27784=>1231, +27785=>1232, +27781=>1233, +27803=>1234, +27754=>1235, +27770=>1236, +27792=>1237, +27760=>1238, +27788=>1239, +27752=>1240, +27798=>1241, +27794=>1242, +27773=>1243, +27779=>1244, +27762=>1245, +27774=>1246, +27764=>1247, +27782=>1248, +27766=>1249, +27789=>1250, +27796=>1251, +27800=>1252, +27778=>1253, +28790=>1254, +28796=>1255, +28797=>1256, +28792=>1257, +29282=>1258, +29281=>1259, +29280=>1260, +29380=>1261, +29378=>1262, +29590=>1263, +29996=>1264, +29995=>1265, +30007=>1266, +30008=>1267, +30338=>1268, +30447=>1269, +30691=>1270, +31169=>1271, +31168=>1272, +31167=>1273, +31350=>1274, +31995=>1275, +32597=>1276, +32918=>1277, +32915=>1278, +32925=>1279, +32920=>1280, +32923=>1281, +32922=>1282, +32946=>1283, +33391=>1284, +33426=>1285, +33419=>1286, +33421=>1287, +35211=>1288, +12178=>1288, +35282=>1289, +12179=>1289, +35328=>1290, +12180=>1290, +35895=>1291, +12181=>1291, +35910=>1292, +12182=>1292, +35925=>1293, +12183=>1293, +35997=>1294, +12185=>1294, +36196=>1295, +12186=>1295, +36208=>1296, +12187=>1296, +36275=>1297, +12188=>1297, +36523=>1298, +12189=>1298, +36554=>1299, +12190=>1299, +36763=>1300, +12191=>1300, +36784=>1301, +12192=>1301, +36802=>1302, +36806=>1303, +36805=>1304, +36804=>1305, +24033=>1306, +12194=>1307, +37009=>1307, +37026=>1308, +37034=>1309, +37030=>1310, +37027=>1311, +37193=>1312, +12195=>1312, +37318=>1313, +12196=>1313, +37324=>1314, +12197=>1314, +38450=>1315, +38446=>1316, +38449=>1317, +38442=>1318, +38444=>1319, +20006=>1320, +20054=>1321, +20083=>1322, +20107=>1323, +20123=>1324, +20126=>1325, +20139=>1326, +20140=>1327, +20335=>1328, +20381=>1329, +20365=>1330, +20339=>1331, +20351=>1332, +20332=>1333, +20379=>1334, +20363=>1335, +20358=>1336, +20355=>1337, +20336=>1338, +20341=>1339, +20360=>1340, +20329=>1341, +20347=>1342, +20374=>1343, +20350=>1344, +20367=>1345, +20369=>1346, +20346=>1347, +20820=>1348, +20818=>1349, +20821=>1350, +20841=>1351, +20855=>1352, +20854=>1353, +20856=>1354, +20925=>1355, +20989=>1356, +21051=>1357, +21048=>1358, +21047=>1359, +21050=>1360, +21040=>1361, +21038=>1362, +21046=>1363, +21057=>1364, +21182=>1365, +21179=>1366, +21330=>1367, +21332=>1368, +21331=>1369, +21329=>1370, +21350=>1371, +21367=>1372, +21368=>1373, +21369=>1374, +21462=>1375, +21460=>1376, +21463=>1377, +21619=>1378, +21621=>1379, +21654=>1380, +21624=>1381, +21653=>1382, +21632=>1383, +21627=>1384, +21623=>1385, +21636=>1386, +21650=>1387, +21638=>1388, +21628=>1389, +21648=>1390, +21617=>1391, +21622=>1392, +21644=>1393, +21658=>1394, +21602=>1395, +21608=>1396, +21643=>1397, +21629=>1398, +21646=>1399, +22266=>1400, +22403=>1401, +22391=>1402, +22378=>1403, +22377=>1404, +22369=>1405, +22374=>1406, +22372=>1407, +22396=>1408, +22812=>1409, +22857=>1410, +22855=>1411, +22856=>1412, +22852=>1413, +22868=>1414, +22974=>1415, +22971=>1416, +22996=>1417, +22969=>1418, +22958=>1419, +22993=>1420, +22982=>1421, +22992=>1422, +22989=>1423, +22987=>1424, +22995=>1425, +22986=>1426, +22959=>1427, +22963=>1428, +22994=>1429, +22981=>1430, +23391=>1431, +23396=>1432, +23395=>1433, +23447=>1434, +23450=>1435, +23448=>1436, +23452=>1437, +23449=>1438, +23451=>1439, +23578=>1440, +23624=>1441, +23621=>1442, +23622=>1443, +23735=>1444, +23713=>1445, +23736=>1446, +23721=>1447, +23723=>1448, +23729=>1449, +23731=>1450, +24088=>1451, +24090=>1452, +24086=>1453, +24085=>1454, +24091=>1455, +24081=>1456, +24184=>1457, +24218=>1458, +24215=>1459, +24220=>1460, +24213=>1461, +24214=>1462, +24310=>1463, +24358=>1464, +24359=>1465, +24361=>1466, +24448=>1467, +24449=>1468, +24447=>1469, +24444=>1470, +24541=>1471, +24544=>1472, +24573=>1473, +24565=>1474, +24575=>1475, +24591=>1476, +24596=>1477, +24623=>1478, +24629=>1479, +24598=>1480, +24618=>1481, +24597=>1482, +24609=>1483, +24615=>1484, +24617=>1485, +24619=>1486, +24603=>1487, +25110=>1488, +25109=>1489, +25151=>1490, +25150=>1491, +25152=>1492, +25215=>1493, +25289=>1494, +25292=>1495, +25284=>1496, +25279=>1497, +25282=>1498, +25273=>1499, +25298=>1500, +25307=>1501, +25259=>1502, +25299=>1503, +25300=>1504, +25291=>1505, +25288=>1506, +25256=>1507, +25277=>1508, +25276=>1509, +25296=>1510, +60582=>1510, +25305=>1511, +25287=>1512, +25293=>1513, +25269=>1514, +25306=>1515, +25265=>1516, +25304=>1517, +25302=>1518, +25303=>1519, +25286=>1520, +25260=>1521, +25294=>1522, +61010=>1522, +25918=>1523, +26023=>1524, +26044=>1525, +26106=>1526, +26132=>1527, +26131=>1528, +26124=>1529, +26118=>1530, +26114=>1531, +26126=>1532, +26112=>1533, +26127=>1534, +26133=>1535, +26122=>1536, +26119=>1537, +26381=>1538, +26379=>1539, +26477=>1540, +26507=>1541, +26517=>1542, +26481=>1543, +26524=>1544, +26483=>1545, +26487=>1546, +26503=>1547, +26525=>1548, +26519=>1549, +26479=>1550, +26480=>1551, +26495=>1552, +26505=>1553, +26494=>1554, +26512=>1555, +26485=>1556, +26522=>1557, +26515=>1558, +26492=>1559, +26474=>1560, +26482=>1561, +27427=>1562, +27494=>1563, +27495=>1564, +27519=>1565, +27667=>1566, +27675=>1567, +27875=>1568, +27880=>1569, +27891=>1570, +27825=>1571, +27852=>1572, +27877=>1573, +27827=>1574, +27837=>1575, +27838=>1576, +27836=>1577, +27874=>1578, +27819=>1579, +27861=>1580, +27859=>1581, +27832=>1582, +27844=>1583, +27833=>1584, +27841=>1585, +27822=>1586, +27863=>1587, +27845=>1588, +27889=>1589, +27839=>1590, +27835=>1591, +27873=>1592, +27867=>1593, +27850=>1594, +27820=>1595, +27887=>1596, +27868=>1597, +27862=>1598, +27872=>1599, +28821=>1600, +28814=>1601, +28818=>1602, +28810=>1603, +28825=>1604, +29228=>1605, +29229=>1606, +29240=>1607, +29256=>1608, +29287=>1609, +29289=>1610, +29376=>1611, +29390=>1612, +29401=>1613, +29399=>1614, +29392=>1615, +29609=>1616, +29608=>1617, +29599=>1618, +29611=>1619, +29605=>1620, +30013=>1621, +30109=>1622, +30105=>1623, +30106=>1624, +30340=>1625, +30402=>1626, +30450=>1627, +30452=>1628, +30693=>1629, +30717=>1630, +31038=>1631, +31040=>1632, +31041=>1633, +31177=>1634, +31176=>1635, +31354=>1636, +31353=>1637, +31482=>1638, +31998=>1639, +32596=>1640, +32652=>1641, +32651=>1642, +32773=>1643, +58236=>1643, +32954=>1644, +32933=>1645, +32930=>1646, +32945=>1647, +32929=>1648, +32939=>1649, +32937=>1650, +32948=>1651, +32938=>1652, +32943=>1653, +33253=>1654, +33278=>1655, +33293=>1656, +33459=>1657, +33437=>1658, +33433=>1659, +33453=>1660, +33469=>1661, +33439=>1662, +33465=>1663, +33457=>1664, +33452=>1665, +33445=>1666, +33455=>1667, +33464=>1668, +33443=>1669, +33456=>1670, +33470=>1671, +33463=>1672, +34382=>1673, +34417=>1674, +21021=>1675, +34920=>1676, +36555=>1677, +36814=>1678, +36820=>1679, +36817=>1680, +37045=>1681, +37048=>1682, +37041=>1683, +37046=>1684, +37319=>1685, +37329=>1686, +12198=>1686, +38263=>1687, +12199=>1687, +38272=>1688, +12200=>1688, +38428=>1689, +12201=>1689, +38464=>1690, +38463=>1691, +38459=>1692, +38468=>1693, +38466=>1694, +38585=>1695, +12203=>1695, +38632=>1696, +12204=>1696, +38738=>1697, +12206=>1698, +38750=>1698, +20127=>1699, +20141=>1700, +20142=>1701, +20449=>1702, +20405=>1703, +20399=>1704, +20415=>1705, +20448=>1706, +20433=>1707, +20431=>1708, +20445=>1709, +20419=>1710, +20406=>1711, +20440=>1712, +20447=>1713, +20426=>1714, +20439=>1715, +20398=>1716, +20432=>1717, +20420=>1718, +20418=>1719, +20442=>1720, +20430=>1721, +20446=>1722, +20407=>1723, +20823=>1724, +20882=>1725, +20881=>1726, +20896=>1727, +21070=>1728, +21059=>1729, +21066=>1730, +21069=>1731, +21068=>1732, +21067=>1733, +21063=>1734, +21191=>1735, +21193=>1736, +21187=>1737, +21185=>1738, +21261=>1739, +21335=>1740, +21371=>1741, +21402=>1742, +21467=>1743, +21676=>1744, +21696=>1745, +21672=>1746, +21710=>1747, +21705=>1748, +21688=>1749, +21670=>1750, +21683=>1751, +21703=>1752, +21698=>1753, +21693=>1754, +21674=>1755, +21697=>1756, +21700=>1757, +21704=>1758, +21679=>1759, +21675=>1760, +21681=>1761, +21691=>1762, +21673=>1763, +21671=>1764, +21695=>1765, +22271=>1766, +22402=>1767, +22411=>1768, +22432=>1769, +22435=>1770, +22434=>1771, +22478=>1772, +22446=>1773, +22419=>1774, +22869=>1775, +22865=>1776, +22863=>1777, +22862=>1778, +22864=>1779, +23004=>1780, +23000=>1781, +23039=>1782, +23011=>1783, +23016=>1784, +23043=>1785, +23013=>1786, +23018=>1787, +23002=>1788, +23014=>1789, +23041=>1790, +23035=>1791, +23401=>1792, +23459=>1793, +23462=>1794, +23460=>1795, +23458=>1796, +23461=>1797, +23553=>1798, +23630=>1799, +23631=>1800, +23629=>1801, +23627=>1802, +23769=>1803, +23762=>1804, +24055=>1805, +24093=>1806, +24101=>1807, +24095=>1808, +24189=>1809, +24224=>1810, +24230=>1811, +24314=>1812, +24328=>1813, +24365=>1814, +24421=>1815, +24456=>1816, +24453=>1817, +24458=>1818, +24459=>1819, +24455=>1820, +24460=>1821, +24457=>1822, +24594=>1823, +24605=>1824, +24608=>1825, +24613=>1826, +24590=>1827, +24616=>1828, +24653=>1829, +24688=>1830, +24680=>1831, +24674=>1832, +60712=>1832, +24646=>1833, +24643=>1834, +24684=>1835, +24683=>1836, +24682=>1837, +24676=>1838, +25153=>1839, +25308=>1840, +25366=>1841, +25353=>1842, +25340=>1843, +25325=>1844, +25345=>1845, +25326=>1846, +25341=>1847, +25351=>1848, +25329=>1849, +25335=>1850, +25327=>1851, +25324=>1852, +25342=>1853, +25332=>1854, +25361=>1855, +25346=>1856, +25919=>1857, +25925=>1858, +26027=>1859, +26045=>1860, +26082=>1861, +26149=>1862, +26157=>1863, +26144=>1864, +26151=>1865, +26159=>1866, +26143=>1867, +26152=>1868, +26161=>1869, +26148=>1870, +26359=>1871, +26623=>1872, +26579=>1873, +26609=>1874, +26580=>1875, +26576=>1876, +26604=>1877, +26550=>1878, +26543=>1879, +26613=>1880, +26601=>1881, +26607=>1882, +26564=>1883, +26577=>1884, +26548=>1885, +26586=>1886, +26597=>1887, +26552=>1888, +26575=>1889, +26590=>1890, +26611=>1891, +26544=>1892, +26585=>1893, +26594=>1894, +26589=>1895, +26578=>1896, +27498=>1897, +27523=>1898, +27526=>1899, +27573=>1900, +27602=>1901, +27607=>1902, +27679=>1903, +27849=>1904, +27915=>1905, +27954=>1906, +27946=>1907, +27969=>1908, +27941=>1909, +27916=>1910, +27953=>1911, +27934=>1912, +27927=>1913, +27963=>1914, +27965=>1915, +27966=>1916, +27958=>1917, +27931=>1918, +27893=>1919, +27961=>1920, +27943=>1921, +27960=>1922, +27945=>1923, +27950=>1924, +27957=>1925, +27918=>1926, +27947=>1927, +28843=>1928, +28858=>1929, +28851=>1930, +28844=>1931, +28847=>1932, +28845=>1933, +28856=>1934, +28846=>1935, +28836=>1936, +29232=>1937, +29298=>1938, +29295=>1939, +29300=>1940, +29417=>1941, +29408=>1942, +29409=>1943, +29623=>1944, +29642=>1945, +29627=>1946, +29618=>1947, +29645=>1948, +29632=>1949, +29619=>1950, +29978=>1951, +29997=>1952, +30031=>1953, +30028=>1954, +30030=>1955, +30027=>1956, +30123=>1957, +30116=>1958, +30117=>1959, +30114=>1960, +30115=>1961, +30328=>1962, +30342=>1963, +30343=>1964, +30344=>1965, +30408=>1966, +30406=>1967, +30403=>1968, +30405=>1969, +30465=>1970, +30457=>1971, +30456=>1972, +30473=>1973, +30475=>1974, +30462=>1975, +30460=>1976, +30471=>1977, +30684=>1978, +30722=>1979, +30740=>1980, +30732=>1981, +30733=>1982, +31046=>1983, +31049=>1984, +31048=>1985, +31047=>1986, +31161=>1987, +31162=>1988, +31185=>1989, +31186=>1990, +31179=>1991, +31359=>1992, +31361=>1993, +31487=>1994, +31485=>1995, +31869=>1996, +32002=>1997, +32005=>1998, +32000=>1999, +32009=>2000, +32007=>2001, +32004=>2002, +32006=>2003, +32568=>2004, +32654=>2005, +32703=>2006, +32784=>2007, +32781=>2008, +32785=>2009, +32822=>2010, +32982=>2011, +32997=>2012, +32986=>2013, +32963=>2014, +32964=>2015, +32972=>2016, +32993=>2017, +32987=>2018, +32974=>2019, +32990=>2020, +32996=>2021, +32989=>2022, +33268=>2023, +33314=>2024, +33511=>2025, +33539=>2026, +33541=>2027, +33507=>2028, +33499=>2029, +33510=>2030, +33540=>2031, +33509=>2032, +33538=>2033, +33545=>2034, +33490=>2035, +33495=>2036, +33521=>2037, +33537=>2038, +33500=>2039, +33492=>2040, +33489=>2041, +33502=>2042, +33491=>2043, +33503=>2044, +33519=>2045, +33542=>2046, +34384=>2047, +34425=>2048, +34427=>2049, +34426=>2050, +34893=>2051, +34923=>2052, +35201=>2053, +35284=>2054, +35336=>2055, +35330=>2056, +35331=>2057, +35998=>2058, +36000=>2059, +36212=>2060, +36211=>2061, +36276=>2062, +36557=>2063, +36556=>2064, +36848=>2065, +36838=>2066, +36834=>2067, +36842=>2068, +36837=>2069, +36845=>2070, +36843=>2071, +36836=>2072, +36840=>2073, +37066=>2074, +37070=>2075, +37057=>2076, +37059=>2077, +37195=>2078, +37194=>2079, +37325=>2080, +38274=>2081, +38480=>2082, +38475=>2083, +38476=>2084, +38477=>2085, +38754=>2086, +12207=>2086, +38761=>2087, +12208=>2087, +38859=>2088, +12209=>2088, +38893=>2089, +12210=>2089, +38899=>2090, +12211=>2090, +38913=>2091, +12212=>2091, +39080=>2092, +12213=>2092, +39131=>2093, +12214=>2093, +39135=>2094, +12215=>2094, +39318=>2095, +12216=>2095, +39321=>2096, +12217=>2096, +20056=>2097, +20147=>2098, +20492=>2099, +20493=>2100, +20515=>2101, +20463=>2102, +20518=>2103, +20517=>2104, +20472=>2105, +20521=>2106, +57375=>2106, +20502=>2107, +20486=>2108, +20540=>2109, +20511=>2110, +20506=>2111, +20498=>2112, +20497=>2113, +20474=>2114, +20480=>2115, +20500=>2116, +20520=>2117, +20465=>2118, +20513=>2119, +20491=>2120, +20505=>2121, +20504=>2122, +20467=>2123, +20462=>2124, +20525=>2125, +20522=>2126, +20478=>2127, +20523=>2128, +20489=>2129, +20860=>2130, +20900=>2131, +20901=>2132, +20898=>2133, +20941=>2134, +20940=>2135, +20934=>2136, +20939=>2137, +21078=>2138, +21084=>2139, +21076=>2140, +21083=>2141, +21085=>2142, +21290=>2143, +21375=>2144, +57459=>2144, +21407=>2145, +21405=>2146, +21471=>2147, +21736=>2148, +21776=>2149, +21761=>2150, +21815=>2151, +21756=>2152, +21733=>2153, +21746=>2154, +21766=>2155, +21754=>2156, +21780=>2157, +21737=>2158, +21741=>2159, +21729=>2160, +21769=>2161, +21742=>2162, +21738=>2163, +21734=>2164, +21799=>2165, +21767=>2166, +21757=>2167, +21775=>2168, +22275=>2169, +22276=>2170, +22466=>2171, +22484=>2172, +22475=>2173, +22467=>2174, +22537=>2175, +22799=>2176, +22871=>2177, +22872=>2178, +22874=>2179, +23057=>2180, +23064=>2181, +23068=>2182, +23071=>2183, +23067=>2184, +23059=>2185, +23020=>2186, +23072=>2187, +23075=>2188, +23081=>2189, +23077=>2190, +23052=>2191, +23049=>2192, +23403=>2193, +23640=>2194, +23472=>2195, +23475=>2196, +23478=>2197, +23476=>2198, +23470=>2199, +23477=>2200, +23481=>2201, +23480=>2202, +23556=>2203, +23633=>2204, +23637=>2205, +23632=>2206, +23789=>2207, +23805=>2208, +23803=>2209, +23786=>2210, +23784=>2211, +23792=>2212, +23798=>2213, +23809=>2214, +23796=>2215, +24046=>2216, +24109=>2217, +24107=>2218, +24235=>2219, +24237=>2220, +24231=>2221, +24369=>2222, +24466=>2223, +24465=>2224, +24464=>2225, +24665=>2226, +24675=>2227, +24677=>2228, +24656=>2229, +24661=>2230, +24685=>2231, +24681=>2232, +24687=>2233, +24708=>2234, +24735=>2235, +24730=>2236, +24717=>2237, +24724=>2238, +24716=>2239, +24709=>2240, +24726=>2241, +25159=>2242, +25331=>2243, +25352=>2244, +25343=>2245, +25422=>2246, +25406=>2247, +25391=>2248, +25429=>2249, +25410=>2250, +25414=>2251, +25423=>2252, +25417=>2253, +25402=>2254, +25424=>2255, +25405=>2256, +25386=>2257, +25387=>2258, +25384=>2259, +25421=>2260, +25420=>2261, +25928=>2262, +25929=>2263, +26009=>2264, +26049=>2265, +26053=>2266, +26178=>2267, +26185=>2268, +26191=>2269, +26179=>2270, +26194=>2271, +26188=>2272, +26181=>2273, +26177=>2274, +26360=>2275, +26388=>2276, +26389=>2277, +26391=>2278, +26657=>2279, +26680=>2280, +26696=>2281, +26694=>2282, +26707=>2283, +26681=>2284, +26690=>2285, +26708=>2286, +26665=>2287, +26803=>2288, +26647=>2289, +26700=>2290, +26705=>2291, +26685=>2292, +26612=>2293, +26704=>2294, +26688=>2295, +26684=>2296, +26691=>2297, +26666=>2298, +26693=>2299, +26643=>2300, +26648=>2301, +26689=>2302, +27530=>2303, +27529=>2304, +27575=>2305, +27683=>2306, +27687=>2307, +27688=>2308, +27686=>2309, +27684=>2310, +27888=>2311, +28010=>2312, +28053=>2313, +28040=>2314, +28039=>2315, +28006=>2316, +28024=>2317, +28023=>2318, +27993=>2319, +28051=>2320, +28012=>2321, +28041=>2322, +28014=>2323, +27994=>2324, +28020=>2325, +28009=>2326, +28044=>2327, +28042=>2328, +28025=>2329, +28037=>2330, +28005=>2331, +28052=>2332, +28874=>2333, +28888=>2334, +28900=>2335, +28889=>2336, +28872=>2337, +28879=>2338, +29241=>2339, +29305=>2340, +29436=>2341, +29433=>2342, +29437=>2343, +29432=>2344, +29431=>2345, +29574=>2346, +29677=>2347, +29705=>2348, +29678=>2349, +29664=>2350, +29674=>2351, +29662=>2352, +30036=>2353, +30045=>2354, +30044=>2355, +30042=>2356, +30041=>2357, +30142=>2358, +30149=>2359, +30151=>2360, +30130=>2361, +30131=>2362, +30141=>2363, +30140=>2364, +30137=>2365, +30146=>2366, +30136=>2367, +30347=>2368, +30384=>2369, +30410=>2370, +30413=>2371, +30414=>2372, +30505=>2373, +30495=>2374, +30496=>2375, +30504=>2376, +30697=>2377, +30768=>2378, +30759=>2379, +30776=>2380, +30749=>2381, +30772=>2382, +30775=>2383, +30757=>2384, +30765=>2385, +30752=>2386, +30751=>2387, +30770=>2388, +31061=>2389, +31056=>2390, +31072=>2391, +31071=>2392, +31062=>2393, +31070=>2394, +31069=>2395, +31063=>2396, +31066=>2397, +31204=>2398, +31203=>2399, +60418=>2399, +31207=>2400, +31199=>2401, +31206=>2402, +31209=>2403, +31192=>2404, +31364=>2405, +31368=>2406, +31449=>2407, +31494=>2408, +31505=>2409, +31881=>2410, +32033=>2411, +32023=>2412, +32011=>2413, +32010=>2414, +32032=>2415, +32034=>2416, +32020=>2417, +32016=>2418, +32021=>2419, +32026=>2420, +32028=>2421, +32013=>2422, +32025=>2423, +32027=>2424, +32570=>2425, +32607=>2426, +32660=>2427, +32709=>2428, +32705=>2429, +32774=>2430, +32772=>2431, +32792=>2432, +32789=>2433, +32793=>2434, +32791=>2435, +32829=>2436, +32831=>2437, +33009=>2438, +33026=>2439, +33008=>2440, +33029=>2441, +33005=>2442, +33012=>2443, +33030=>2444, +33016=>2445, +33011=>2446, +33032=>2447, +33021=>2448, +33034=>2449, +33020=>2450, +33007=>2451, +33261=>2452, +33260=>2453, +33280=>2454, +33296=>2455, +33322=>2456, +33323=>2457, +33320=>2458, +33324=>2459, +33467=>2460, +33579=>2461, +33618=>2462, +33620=>2463, +33610=>2464, +33592=>2465, +33616=>2466, +33609=>2467, +33589=>2468, +33588=>2469, +33615=>2470, +33586=>2471, +33593=>2472, +33590=>2473, +33559=>2474, +33600=>2475, +33585=>2476, +33576=>2477, +33603=>2478, +34388=>2479, +34442=>2480, +34474=>2481, +34451=>2482, +34468=>2483, +34473=>2484, +34444=>2485, +34467=>2486, +34460=>2487, +34928=>2488, +34935=>2489, +34945=>2490, +34946=>2491, +34941=>2492, +34937=>2493, +35352=>2494, +35344=>2495, +35342=>2496, +35340=>2497, +35349=>2498, +35338=>2499, +35351=>2500, +35347=>2501, +35350=>2502, +35343=>2503, +35345=>2504, +35912=>2505, +35962=>2506, +35961=>2507, +36001=>2508, +36002=>2509, +36215=>2510, +58442=>2510, +36524=>2511, +36562=>2512, +36564=>2513, +36559=>2514, +36785=>2515, +36865=>2516, +36870=>2517, +36855=>2518, +36864=>2519, +36858=>2520, +36852=>2521, +36867=>2522, +36861=>2523, +36869=>2524, +36856=>2525, +37013=>2526, +37089=>2527, +37085=>2528, +37090=>2529, +37202=>2530, +37197=>2531, +37196=>2532, +37336=>2533, +37341=>2534, +37335=>2535, +37340=>2536, +37337=>2537, +38275=>2538, +38498=>2539, +38499=>2540, +38497=>2541, +38491=>2542, +38493=>2543, +38500=>2544, +38488=>2545, +38494=>2546, +38587=>2547, +39138=>2548, +39340=>2549, +12218=>2549, +39592=>2550, +12219=>2550, +39640=>2551, +12220=>2551, +12222=>2552, +39717=>2552, +39730=>2553, +12224=>2553, +39740=>2554, +12225=>2554, +20094=>2555, +20602=>2556, +20605=>2557, +57382=>2557, +20572=>2558, +20551=>2559, +20547=>2560, +20556=>2561, +20570=>2562, +20553=>2563, +20581=>2564, +20598=>2565, +20558=>2566, +20565=>2567, +20597=>2568, +20596=>2569, +20599=>2570, +20559=>2571, +20495=>2572, +20591=>2573, +20589=>2574, +20828=>2575, +20885=>2576, +20976=>2577, +21098=>2578, +21103=>2579, +21202=>2580, +21209=>2581, +21208=>2582, +21205=>2583, +21264=>2584, +21263=>2585, +21273=>2586, +21311=>2587, +21312=>2588, +21310=>2589, +21443=>2590, +26364=>2591, +21830=>2592, +21866=>2593, +21862=>2594, +21828=>2595, +21854=>2596, +21857=>2597, +21827=>2598, +21834=>2599, +21809=>2600, +21846=>2601, +21839=>2602, +21845=>2603, +21807=>2604, +21860=>2605, +21816=>2606, +21806=>2607, +21852=>2608, +21804=>2609, +21859=>2610, +21811=>2611, +21825=>2612, +21847=>2613, +22280=>2614, +22283=>2615, +22281=>2616, +22495=>2617, +22533=>2618, +22538=>2619, +22534=>2620, +22496=>2621, +22500=>2622, +22522=>2623, +22530=>2624, +22581=>2625, +22519=>2626, +22521=>2627, +22816=>2628, +22882=>2629, +23094=>2630, +23105=>2631, +23113=>2632, +23142=>2633, +23146=>2634, +23104=>2635, +23100=>2636, +23138=>2637, +23130=>2638, +23110=>2639, +23114=>2640, +23408=>2641, +23495=>2642, +23493=>2643, +23492=>2644, +23490=>2645, +23487=>2646, +23494=>2647, +23561=>2648, +23560=>2649, +23559=>2650, +23648=>2651, +23644=>2652, +23645=>2653, +23815=>2654, +23814=>2655, +23822=>2656, +23835=>2657, +23830=>2658, +23842=>2659, +23825=>2660, +23849=>2661, +23828=>2662, +23833=>2663, +23844=>2664, +23847=>2665, +23831=>2666, +24034=>2667, +24120=>2668, +24118=>2669, +24115=>2670, +24119=>2671, +24247=>2672, +24248=>2673, +24246=>2674, +24245=>2675, +24254=>2676, +24373=>2677, +24375=>2678, +24407=>2679, +24428=>2680, +24425=>2681, +24427=>2682, +24471=>2683, +24473=>2684, +24478=>2685, +24472=>2686, +24481=>2687, +24480=>2688, +24476=>2689, +24703=>2690, +24739=>2691, +24713=>2692, +24736=>2693, +24744=>2694, +24779=>2695, +24756=>2696, +24806=>2697, +24765=>2698, +24773=>2699, +24763=>2700, +24757=>2701, +24796=>2702, +24764=>2703, +24792=>2704, +24789=>2705, +24774=>2706, +24799=>2707, +24760=>2708, +24794=>2709, +24775=>2710, +25114=>2711, +25115=>2712, +25160=>2713, +25504=>2714, +25511=>2715, +25458=>2716, +25494=>2717, +25506=>2718, +25509=>2719, +25463=>2720, +25447=>2721, +25496=>2722, +25514=>2723, +25457=>2724, +25513=>2725, +25481=>2726, +25475=>2727, +25499=>2728, +25451=>2729, +25512=>2730, +25476=>2731, +25480=>2732, +25497=>2733, +25505=>2734, +25516=>2735, +25490=>2736, +25487=>2737, +25472=>2738, +25467=>2739, +25449=>2740, +25448=>2741, +25466=>2742, +25949=>2743, +25942=>2744, +25937=>2745, +25945=>2746, +25943=>2747, +21855=>2748, +25935=>2749, +25944=>2750, +25941=>2751, +25940=>2752, +26012=>2753, +26011=>2754, +26028=>2755, +26063=>2756, +26059=>2757, +26060=>2758, +26062=>2759, +26205=>2760, +26202=>2761, +26212=>2762, +26216=>2763, +26214=>2764, +26206=>2765, +26361=>2766, +21207=>2767, +26395=>2768, +26753=>2769, +26799=>2770, +26786=>2771, +26771=>2772, +26805=>2773, +26751=>2774, +26742=>2775, +26801=>2776, +26791=>2777, +26775=>2778, +26800=>2779, +26755=>2780, +26820=>2781, +26797=>2782, +26758=>2783, +26757=>2784, +26772=>2785, +26781=>2786, +26792=>2787, +26783=>2788, +26785=>2789, +26754=>2790, +27442=>2791, +27578=>2792, +27627=>2793, +27628=>2794, +27691=>2795, +28046=>2796, +28092=>2797, +28147=>2798, +28121=>2799, +28082=>2800, +28129=>2801, +28108=>2802, +28132=>2803, +28155=>2804, +28154=>2805, +28165=>2806, +28103=>2807, +28107=>2808, +28079=>2809, +28113=>2810, +28078=>2811, +28126=>2812, +28153=>2813, +28088=>2814, +28151=>2815, +28149=>2816, +28101=>2817, +28114=>2818, +28186=>2819, +28085=>2820, +28122=>2821, +28139=>2822, +28120=>2823, +28138=>2824, +28145=>2825, +28142=>2826, +28136=>2827, +28102=>2828, +28100=>2829, +28074=>2830, +28140=>2831, +28095=>2832, +28134=>2833, +28921=>2834, +28937=>2835, +28938=>2836, +28925=>2837, +28911=>2838, +29245=>2839, +29309=>2840, +29313=>2841, +29468=>2842, +29467=>2843, +29462=>2844, +29459=>2845, +29465=>2846, +29575=>2847, +29701=>2848, +29706=>2849, +29699=>2850, +29702=>2851, +29694=>2852, +29709=>2853, +29920=>2854, +29942=>2855, +29943=>2856, +29980=>2857, +29986=>2858, +30053=>2859, +30054=>2860, +30050=>2861, +30064=>2862, +30095=>2863, +30164=>2864, +30165=>2865, +30133=>2866, +30154=>2867, +30157=>2868, +30350=>2869, +30420=>2870, +30418=>2871, +30427=>2872, +30519=>2873, +30526=>2874, +30524=>2875, +30518=>2876, +30520=>2877, +30522=>2878, +30827=>2879, +30787=>2880, +30798=>2881, +31077=>2882, +31080=>2883, +31085=>2884, +31227=>2885, +31378=>2886, +31381=>2887, +31520=>2888, +31528=>2889, +31515=>2890, +31532=>2891, +31526=>2892, +31513=>2893, +31518=>2894, +31534=>2895, +31890=>2896, +31895=>2897, +31893=>2898, +32070=>2899, +32067=>2900, +32113=>2901, +32046=>2902, +32057=>2903, +32060=>2904, +32064=>2905, +32048=>2906, +32051=>2907, +32068=>2908, +32047=>2909, +32066=>2910, +32050=>2911, +32049=>2912, +32573=>2913, +32670=>2914, +32666=>2915, +32716=>2916, +32718=>2917, +32722=>2918, +32796=>2919, +32842=>2920, +32838=>2921, +33071=>2922, +33046=>2923, +33059=>2924, +33067=>2925, +33065=>2926, +33072=>2927, +33060=>2928, +33282=>2929, +33333=>2930, +33335=>2931, +33334=>2932, +33337=>2933, +33678=>2934, +33694=>2935, +33688=>2936, +33656=>2937, +33698=>2938, +33686=>2939, +33725=>2940, +33707=>2941, +33682=>2942, +33674=>2943, +33683=>2944, +33673=>2945, +33696=>2946, +33655=>2947, +33659=>2948, +33660=>2949, +33670=>2950, +33703=>2951, +34389=>2952, +24426=>2953, +34503=>2954, +34496=>2955, +34486=>2956, +34500=>2957, +34485=>2958, +34502=>2959, +34507=>2960, +34481=>2961, +34479=>2962, +34505=>2963, +34899=>2964, +34974=>2965, +34952=>2966, +34987=>2967, +34962=>2968, +34966=>2969, +34957=>2970, +34955=>2971, +35219=>2972, +35215=>2973, +35370=>2974, +35357=>2975, +35363=>2976, +35365=>2977, +35377=>2978, +35373=>2979, +35359=>2980, +35355=>2981, +35362=>2982, +35913=>2983, +35930=>2984, +36009=>2985, +36012=>2986, +36011=>2987, +36008=>2988, +36010=>2989, +36007=>2990, +36199=>2991, +36198=>2992, +36286=>2993, +36282=>2994, +36571=>2995, +36575=>2996, +36889=>2997, +36877=>2998, +36890=>2999, +36887=>3000, +36899=>3001, +36895=>3002, +36893=>3003, +36880=>3004, +36885=>3005, +36894=>3006, +36896=>3007, +36879=>3008, +36898=>3009, +36886=>3010, +36891=>3011, +36884=>3012, +37096=>3013, +37101=>3014, +37117=>3015, +58488=>3015, +37207=>3016, +37326=>3017, +37365=>3018, +37350=>3019, +37347=>3020, +37351=>3021, +37357=>3022, +37353=>3023, +38281=>3024, +38506=>3025, +38517=>3026, +38515=>3027, +38520=>3028, +38512=>3029, +38516=>3030, +38518=>3031, +38519=>3032, +38508=>3033, +38592=>3034, +38634=>3035, +38633=>3036, +31456=>3037, +31455=>3038, +38914=>3039, +38915=>3040, +39770=>3041, +12226=>3041, +40165=>3042, +12227=>3042, +40565=>3043, +12228=>3043, +40575=>3044, +12229=>3044, +40613=>3045, +12230=>3045, +40635=>3046, +12231=>3046, +20642=>3047, +20621=>3048, +20613=>3049, +20633=>3050, +20625=>3051, +20608=>3052, +20630=>3053, +20632=>3054, +20634=>3055, +26368=>3056, +20977=>3057, +21106=>3058, +21108=>3059, +21109=>3060, +21097=>3061, +21214=>3062, +21213=>3063, +21211=>3064, +21338=>3065, +21413=>3066, +21883=>3067, +21888=>3068, +21927=>3069, +21884=>3070, +21898=>3071, +21917=>3072, +21912=>3073, +21890=>3074, +21916=>3075, +21930=>3076, +21908=>3077, +21895=>3078, +21899=>3079, +21891=>3080, +21939=>3081, +21934=>3082, +21919=>3083, +21822=>3084, +21938=>3085, +21914=>3086, +21947=>3087, +21932=>3088, +21937=>3089, +21886=>3090, +21897=>3091, +21931=>3092, +21913=>3093, +22285=>3094, +22575=>3095, +22570=>3096, +22580=>3097, +22564=>3098, +22576=>3099, +22577=>3100, +22561=>3101, +22557=>3102, +22560=>3103, +22777=>3104, +22778=>3105, +22880=>3106, +23159=>3107, +57587=>3107, +23194=>3108, +23167=>3109, +23186=>3110, +23195=>3111, +23207=>3112, +23411=>3113, +23409=>3114, +23506=>3115, +23500=>3116, +23507=>3117, +23504=>3118, +23562=>3119, +23563=>3120, +23601=>3121, +23884=>3122, +23888=>3123, +23860=>3124, +23879=>3125, +24061=>3126, +24133=>3127, +24125=>3128, +24128=>3129, +24131=>3130, +24190=>3131, +24266=>3132, +24257=>3133, +24258=>3134, +24260=>3135, +24380=>3136, +24429=>3137, +24489=>3138, +24490=>3139, +24488=>3140, +24785=>3141, +24801=>3142, +24754=>3143, +24758=>3144, +24800=>3145, +24860=>3146, +24867=>3147, +24826=>3148, +24853=>3149, +24816=>3150, +24827=>3151, +24820=>3152, +24936=>3153, +24817=>3154, +24846=>3155, +24822=>3156, +24841=>3157, +24832=>3158, +24850=>3159, +25119=>3160, +25161=>3161, +25507=>3162, +25484=>3163, +25551=>3164, +25536=>3165, +25577=>3166, +25545=>3167, +25542=>3168, +25549=>3169, +25554=>3170, +25571=>3171, +25552=>3172, +25569=>3173, +25558=>3174, +25581=>3175, +25582=>3176, +25462=>3177, +25588=>3178, +25578=>3179, +25563=>3180, +25682=>3181, +25562=>3182, +25593=>3183, +25950=>3184, +25958=>3185, +25954=>3186, +25955=>3187, +26001=>3188, +26000=>3189, +26031=>3190, +26222=>3191, +26224=>3192, +26228=>3193, +57786=>3193, +26230=>3194, +26223=>3195, +26257=>3196, +26234=>3197, +26238=>3198, +26231=>3199, +26366=>3200, +26367=>3201, +26399=>3202, +26397=>3203, +26874=>3204, +26837=>3205, +26848=>3206, +26840=>3207, +26839=>3208, +26885=>3209, +26847=>3210, +26869=>3211, +26862=>3212, +26855=>3213, +26873=>3214, +26834=>3215, +26866=>3216, +26851=>3217, +26827=>3218, +26829=>3219, +26893=>3220, +26898=>3221, +26894=>3222, +26825=>3223, +26842=>3224, +26990=>3225, +26875=>3226, +27454=>3227, +27450=>3228, +27453=>3229, +27544=>3230, +27542=>3231, +27580=>3232, +27631=>3233, +27694=>3234, +27695=>3235, +27692=>3236, +28207=>3237, +57904=>3237, +28216=>3238, +28244=>3239, +28193=>3240, +28210=>3241, +28263=>3242, +28234=>3243, +28192=>3244, +28197=>3245, +28195=>3246, +28187=>3247, +28251=>3248, +28248=>3249, +28196=>3250, +28246=>3251, +28270=>3252, +28205=>3253, +28198=>3254, +28271=>3255, +28212=>3256, +28237=>3257, +28218=>3258, +28204=>3259, +28227=>3260, +28189=>3261, +57901=>3261, +28222=>3262, +28363=>3263, +28297=>3264, +28185=>3265, +28238=>3266, +28259=>3267, +28228=>3268, +28274=>3269, +28265=>3270, +28255=>3271, +28953=>3272, +28954=>3273, +28966=>3274, +28976=>3275, +28961=>3276, +28982=>3277, +29038=>3278, +57958=>3278, +28956=>3279, +29260=>3280, +29316=>3281, +29312=>3282, +29494=>3283, +29477=>3284, +29492=>3285, +29481=>3286, +29754=>3287, +29738=>3288, +29747=>3289, +29730=>3290, +29733=>3291, +29749=>3292, +29750=>3293, +29748=>3294, +29743=>3295, +29723=>3296, +29734=>3297, +29736=>3298, +29989=>3299, +29990=>3300, +30059=>3301, +30058=>3302, +30178=>3303, +30171=>3304, +30179=>3305, +30169=>3306, +30168=>3307, +30174=>3308, +30176=>3309, +30331=>3310, +30332=>3311, +30358=>3312, +30355=>3313, +30388=>3314, +30428=>3315, +30543=>3316, +30701=>3317, +30813=>3318, +30828=>3319, +30831=>3320, +31245=>3321, +31240=>3322, +31243=>3323, +31237=>3324, +31232=>3325, +31384=>3326, +31383=>3327, +31382=>3328, +31461=>3329, +31459=>3330, +31561=>3331, +31574=>3332, +31558=>3333, +31568=>3334, +31570=>3335, +31572=>3336, +31565=>3337, +31563=>3338, +31567=>3339, +31569=>3340, +60510=>3340, +31903=>3341, +31909=>3342, +32094=>3343, +32080=>3344, +32104=>3345, +32085=>3346, +32043=>3347, +32110=>3348, +32114=>3349, +32097=>3350, +32102=>3351, +32098=>3352, +32112=>3353, +32115=>3354, +21892=>3355, +32724=>3356, +32725=>3357, +32779=>3358, +32850=>3359, +32901=>3360, +33109=>3361, +33108=>3362, +33099=>3363, +33105=>3364, +33102=>3365, +33081=>3366, +33094=>3367, +33086=>3368, +33100=>3369, +33107=>3370, +33140=>3371, +33298=>3372, +33308=>3373, +33769=>3374, +33795=>3375, +33784=>3376, +33805=>3377, +33760=>3378, +33733=>3379, +33803=>3380, +33729=>3381, +58309=>3381, +33775=>3382, +33777=>3383, +33780=>3384, +33879=>3385, +33802=>3386, +33776=>3387, +33804=>3388, +33740=>3389, +33789=>3390, +33778=>3391, +33738=>3392, +33848=>3393, +33806=>3394, +33796=>3395, +33756=>3396, +33799=>3397, +33748=>3398, +33759=>3399, +34395=>3400, +34527=>3401, +34521=>3402, +34541=>3403, +34516=>3404, +34523=>3405, +34532=>3406, +34512=>3407, +34526=>3408, +34903=>3409, +35009=>3410, +35010=>3411, +34993=>3412, +35203=>3413, +35222=>3414, +35387=>3415, +35424=>3416, +35413=>3417, +35422=>3418, +35388=>3419, +35393=>3420, +35412=>3421, +35419=>3422, +35408=>3423, +35398=>3424, +35380=>3425, +35386=>3426, +35382=>3427, +35414=>3428, +35937=>3429, +35970=>3430, +36015=>3431, +36028=>3432, +36019=>3433, +36029=>3434, +36033=>3435, +36027=>3436, +36032=>3437, +36020=>3438, +36023=>3439, +36022=>3440, +36031=>3441, +36024=>3442, +36234=>3443, +36229=>3444, +36225=>3445, +36302=>3446, +36317=>3447, +36299=>3448, +36314=>3449, +36305=>3450, +36300=>3451, +36315=>3452, +36294=>3453, +36603=>3454, +36600=>3455, +36604=>3456, +36764=>3457, +36910=>3458, +36917=>3459, +36913=>3460, +36920=>3461, +36914=>3462, +36918=>3463, +37122=>3464, +37109=>3465, +37129=>3466, +37118=>3467, +37219=>3468, +37221=>3469, +37327=>3470, +37396=>3471, +37397=>3472, +37411=>3473, +37385=>3474, +37406=>3475, +37389=>3476, +37392=>3477, +37383=>3478, +37393=>3479, +38292=>3480, +38287=>3481, +38283=>3482, +38289=>3483, +38291=>3484, +38290=>3485, +38286=>3486, +38538=>3487, +38542=>3488, +38539=>3489, +38525=>3490, +38533=>3491, +38534=>3492, +38541=>3493, +38514=>3494, +38532=>3495, +38593=>3496, +38597=>3497, +38596=>3498, +38598=>3499, +38599=>3500, +38639=>3501, +38642=>3502, +38860=>3503, +38917=>3504, +38918=>3505, +38920=>3506, +39143=>3507, +39146=>3508, +39151=>3509, +39145=>3510, +39154=>3511, +39149=>3512, +39342=>3513, +39341=>3514, +40643=>3515, +12232=>3515, +40653=>3516, +12233=>3516, +40657=>3517, +12234=>3517, +20098=>3518, +20653=>3519, +20661=>3520, +20658=>3521, +20659=>3522, +20677=>3523, +20670=>3524, +20652=>3525, +20663=>3526, +20667=>3527, +20655=>3528, +20679=>3529, +21119=>3530, +21111=>3531, +21117=>3532, +21215=>3533, +21222=>3534, +21220=>3535, +21218=>3536, +21219=>3537, +21295=>3538, +21983=>3539, +21992=>3540, +21971=>3541, +21990=>3542, +21966=>3543, +21980=>3544, +21959=>3545, +21969=>3546, +21987=>3547, +21988=>3548, +21999=>3549, +21978=>3550, +21985=>3551, +21957=>3552, +21958=>3553, +21989=>3554, +21961=>3555, +22290=>3556, +22291=>3557, +22622=>3558, +22609=>3559, +22616=>3560, +22615=>3561, +22618=>3562, +22612=>3563, +22635=>3564, +22604=>3565, +22637=>3566, +22602=>3567, +22626=>3568, +22610=>3569, +22603=>3570, +22887=>3571, +23233=>3572, +23241=>3573, +23244=>3574, +23230=>3575, +23229=>3576, +23228=>3577, +23219=>3578, +23234=>3579, +23218=>3580, +23913=>3581, +23919=>3582, +24140=>3583, +24185=>3584, +24265=>3585, +24264=>3586, +24338=>3587, +24409=>3588, +24492=>3589, +24494=>3590, +24858=>3591, +24847=>3592, +24904=>3593, +24863=>3594, +24819=>3595, +24859=>3596, +24825=>3597, +24833=>3598, +24840=>3599, +24910=>3600, +24908=>3601, +24900=>3602, +24909=>3603, +24894=>3604, +24884=>3605, +24871=>3606, +24845=>3607, +24838=>3608, +24887=>3609, +25121=>3610, +25122=>3611, +25619=>3612, +25662=>3613, +25630=>3614, +25642=>3615, +25645=>3616, +25661=>3617, +25644=>3618, +25615=>3619, +25628=>3620, +25620=>3621, +25613=>3622, +25654=>3623, +25622=>3624, +25623=>3625, +25606=>3626, +25964=>3627, +26015=>3628, +26032=>3629, +26263=>3630, +26249=>3631, +26247=>3632, +26248=>3633, +26262=>3634, +26244=>3635, +26264=>3636, +26253=>3637, +26371=>3638, +27028=>3639, +26989=>3640, +26970=>3641, +26999=>3642, +26976=>3643, +26964=>3644, +26997=>3645, +26928=>3646, +27010=>3647, +26954=>3648, +26984=>3649, +26987=>3650, +26974=>3651, +26963=>3652, +27001=>3653, +27014=>3654, +26973=>3655, +26979=>3656, +26971=>3657, +27463=>3658, +27506=>3659, +27584=>3660, +27583=>3661, +27603=>3662, +27645=>3663, +28322=>3664, +28335=>3665, +28371=>3666, +28342=>3667, +28354=>3668, +28304=>3669, +28317=>3670, +28359=>3671, +28357=>3672, +28325=>3673, +28312=>3674, +28348=>3675, +28346=>3676, +28331=>3677, +28369=>3678, +28310=>3679, +28316=>3680, +28356=>3681, +28372=>3682, +28330=>3683, +28327=>3684, +28340=>3685, +29006=>3686, +29017=>3687, +29033=>3688, +29028=>3689, +29001=>3690, +29031=>3691, +29020=>3692, +29036=>3693, +29030=>3694, +29004=>3695, +29029=>3696, +29022=>3697, +28998=>3698, +29032=>3699, +29014=>3700, +29242=>3701, +29266=>3702, +29495=>3703, +29509=>3704, +29503=>3705, +29502=>3706, +29807=>3707, +29786=>3708, +29781=>3709, +29791=>3710, +29790=>3711, +29761=>3712, +29759=>3713, +29785=>3714, +29787=>3715, +58019=>3716, +29788=>3716, +30070=>3717, +30072=>3718, +30208=>3719, +30192=>3720, +30209=>3721, +30194=>3722, +30193=>3723, +30202=>3724, +30207=>3725, +30196=>3726, +30195=>3727, +30430=>3728, +30431=>3729, +30555=>3730, +30571=>3731, +30566=>3732, +30558=>3733, +30563=>3734, +30585=>3735, +30570=>3736, +30572=>3737, +30556=>3738, +30565=>3739, +30568=>3740, +30562=>3741, +30702=>3742, +30862=>3743, +30896=>3744, +30871=>3745, +30872=>3746, +30860=>3747, +30857=>3748, +30844=>3749, +30865=>3750, +30867=>3751, +30847=>3752, +31098=>3753, +31103=>3754, +31105=>3755, +33836=>3756, +31165=>3757, +31260=>3758, +31258=>3759, +31264=>3760, +31252=>3761, +31263=>3762, +31262=>3763, +31391=>3764, +31392=>3765, +31607=>3766, +31680=>3767, +31584=>3768, +31598=>3769, +31591=>3770, +31921=>3771, +31923=>3772, +31925=>3773, +32147=>3774, +32121=>3775, +32145=>3776, +32129=>3777, +32143=>3778, +32091=>3779, +32622=>3780, +32617=>3781, +32618=>3782, +32626=>3783, +32681=>3784, +32680=>3785, +32676=>3786, +32854=>3787, +32856=>3788, +32902=>3789, +32900=>3790, +33137=>3791, +33136=>3792, +33144=>3793, +33125=>3794, +33134=>3795, +33139=>3796, +33131=>3797, +33145=>3798, +33146=>3799, +33126=>3800, +33285=>3801, +33351=>3802, +33922=>3803, +33911=>3804, +33853=>3805, +33841=>3806, +33909=>3807, +33894=>3808, +33899=>3809, +33865=>3810, +33900=>3811, +33883=>3812, +33852=>3813, +33845=>3814, +33889=>3815, +33891=>3816, +33897=>3817, +33901=>3818, +33862=>3819, +34398=>3820, +34396=>3821, +34399=>3822, +34553=>3823, +34579=>3824, +34568=>3825, +34567=>3826, +34560=>3827, +34558=>3828, +34555=>3829, +34562=>3830, +34563=>3831, +34566=>3832, +34570=>3833, +34905=>3834, +35039=>3835, +35028=>3836, +35033=>3837, +35036=>3838, +35032=>3839, +35037=>3840, +35041=>3841, +35018=>3842, +35029=>3843, +35026=>3844, +35228=>3845, +35299=>3846, +35435=>3847, +35442=>3848, +35443=>3849, +35430=>3850, +35433=>3851, +35440=>3852, +35463=>3853, +35452=>3854, +35427=>3855, +35488=>3856, +35441=>3857, +35461=>3858, +35437=>3859, +35426=>3860, +35438=>3861, +35436=>3862, +35449=>3863, +35451=>3864, +35390=>3865, +35432=>3866, +35938=>3867, +35978=>3868, +35977=>3869, +36042=>3870, +36039=>3871, +36040=>3872, +36036=>3873, +36018=>3874, +36035=>3875, +36034=>3876, +36037=>3877, +36321=>3878, +36319=>3879, +36328=>3880, +36335=>3881, +36339=>3882, +36346=>3883, +36330=>3884, +36324=>3885, +36326=>3886, +36530=>3887, +36611=>3888, +36617=>3889, +36606=>3890, +36618=>3891, +36767=>3892, +36786=>3893, +36939=>3894, +36938=>3895, +36947=>3896, +36930=>3897, +36948=>3898, +36924=>3899, +36949=>3900, +36944=>3901, +36935=>3902, +36943=>3903, +36942=>3904, +36941=>3905, +36945=>3906, +36926=>3907, +36929=>3908, +37138=>3909, +37143=>3910, +37228=>3911, +37226=>3912, +37225=>3913, +37321=>3914, +37431=>3915, +37463=>3916, +37432=>3917, +37437=>3918, +37440=>3919, +37438=>3920, +37467=>3921, +37451=>3922, +37476=>3923, +37457=>3924, +37428=>3925, +37449=>3926, +37453=>3927, +37445=>3928, +37433=>3929, +37439=>3930, +37466=>3931, +38296=>3932, +38552=>3933, +38548=>3934, +38549=>3935, +38605=>3936, +38603=>3937, +38601=>3938, +38602=>3939, +38647=>3940, +38651=>3941, +38649=>3942, +38646=>3943, +38742=>3944, +38772=>3945, +38774=>3946, +38928=>3947, +38929=>3948, +38931=>3949, +38922=>3950, +38930=>3951, +38924=>3952, +39164=>3953, +39156=>3954, +39165=>3955, +39166=>3956, +39347=>3957, +39345=>3958, +39348=>3959, +39649=>3960, +40169=>3961, +40578=>3962, +40718=>3963, +12237=>3963, +40723=>3964, +12238=>3964, +40736=>3965, +12239=>3965, +20711=>3966, +20718=>3967, +20709=>3968, +20694=>3969, +20717=>3970, +60903=>3970, +20698=>3971, +20693=>3972, +20687=>3973, +20689=>3974, +20721=>3975, +20686=>3976, +20713=>3977, +20834=>3978, +20979=>3979, +21123=>3980, +21122=>3981, +21297=>3982, +21421=>3983, +22014=>3984, +22016=>3985, +22043=>3986, +22039=>3987, +22013=>3988, +22036=>3989, +22022=>3990, +22025=>3991, +22029=>3992, +22030=>3993, +22007=>3994, +22038=>3995, +22047=>3996, +22024=>3997, +22032=>3998, +22006=>3999, +22296=>4000, +22294=>4001, +22645=>4002, +22654=>4003, +22659=>4004, +22675=>4005, +22666=>4006, +22649=>4007, +22661=>4008, +22653=>4009, +22781=>4010, +22821=>4011, +22818=>4012, +22820=>4013, +22890=>4014, +22889=>4015, +23265=>4016, +23270=>4017, +23273=>4018, +23255=>4019, +23254=>4020, +23256=>4021, +23267=>4022, +23413=>4023, +23518=>4024, +23527=>4025, +23521=>4026, +23525=>4027, +23526=>4028, +23528=>4029, +23522=>4030, +23524=>4031, +23519=>4032, +23565=>4033, +23650=>4034, +23940=>4035, +23943=>4036, +24155=>4037, +24163=>4038, +24149=>4039, +24151=>4040, +24148=>4041, +24275=>4042, +24278=>4043, +24330=>4044, +24390=>4045, +24432=>4046, +24505=>4047, +24903=>4048, +24895=>4049, +24907=>4050, +24951=>4051, +24930=>4052, +24931=>4053, +24927=>4054, +24922=>4055, +24920=>4056, +24949=>4057, +25130=>4058, +25735=>4059, +25688=>4060, +25684=>4061, +25764=>4062, +25720=>4063, +25695=>4064, +25722=>4065, +25681=>4066, +25703=>4067, +25652=>4068, +25709=>4069, +25723=>4070, +25970=>4071, +26017=>4072, +26071=>4073, +26070=>4074, +26274=>4075, +26280=>4076, +26269=>4077, +27036=>4078, +27048=>4079, +27029=>4080, +27073=>4081, +27054=>4082, +27091=>4083, +27083=>4084, +27035=>4085, +27063=>4086, +27067=>4087, +27051=>4088, +27060=>4089, +27088=>4090, +27085=>4091, +27053=>4092, +27084=>4093, +27046=>4094, +27075=>4095, +27043=>4096, +27465=>4097, +27468=>4098, +27699=>4099, +28467=>4100, +28436=>4101, +28414=>4102, +28435=>4103, +28404=>4104, +28457=>4105, +28478=>4106, +28448=>4107, +28460=>4108, +28431=>4109, +28418=>4110, +28450=>4111, +28415=>4112, +28399=>4113, +28422=>4114, +28465=>4115, +28472=>4116, +28466=>4117, +28451=>4118, +28437=>4119, +28459=>4120, +28463=>4121, +28552=>4122, +28458=>4123, +28396=>4124, +28417=>4125, +28402=>4126, +28364=>4127, +28407=>4128, +29076=>4129, +29081=>4130, +29053=>4131, +29066=>4132, +29060=>4133, +29074=>4134, +29246=>4135, +29330=>4136, +29334=>4137, +29508=>4138, +29520=>4139, +29796=>4140, +29795=>4141, +29802=>4142, +29808=>4143, +29805=>4144, +29956=>4145, +30097=>4146, +30247=>4147, +30221=>4148, +30219=>4149, +30217=>4150, +30227=>4151, +30433=>4152, +30435=>4153, +30596=>4154, +30589=>4155, +30591=>4156, +30561=>4157, +30913=>4158, +30879=>4159, +30887=>4160, +30899=>4161, +30889=>4162, +30883=>4163, +31118=>4164, +31119=>4165, +31117=>4166, +31278=>4167, +31281=>4168, +31402=>4169, +31401=>4170, +31469=>4171, +31471=>4172, +31649=>4173, +31637=>4174, +31627=>4175, +31605=>4176, +31639=>4177, +31645=>4178, +31636=>4179, +31631=>4180, +31672=>4181, +58170=>4181, +31623=>4182, +31620=>4183, +31929=>4184, +31933=>4185, +31934=>4186, +32187=>4187, +32176=>4188, +32156=>4189, +32189=>4190, +32190=>4191, +32160=>4192, +32202=>4193, +32180=>4194, +32178=>4195, +32177=>4196, +32186=>4197, +32162=>4198, +32191=>4199, +32181=>4200, +32184=>4201, +32173=>4202, +32210=>4203, +58202=>4203, +32199=>4204, +32172=>4205, +32624=>4206, +32736=>4207, +32737=>4208, +32735=>4209, +32862=>4210, +32858=>4211, +32903=>4212, +33104=>4213, +33152=>4214, +33167=>4215, +33160=>4216, +33162=>4217, +33151=>4218, +33154=>4219, +33255=>4220, +33274=>4221, +33287=>4222, +33300=>4223, +33310=>4224, +33355=>4225, +33993=>4226, +33983=>4227, +33990=>4228, +33988=>4229, +33945=>4230, +33950=>4231, +33970=>4232, +33948=>4233, +33995=>4234, +33976=>4235, +33984=>4236, +34003=>4237, +33936=>4238, +33980=>4239, +34001=>4240, +33994=>4241, +34623=>4242, +34588=>4243, +34619=>4244, +34594=>4245, +34597=>4246, +34612=>4247, +34584=>4248, +34645=>4249, +34615=>4250, +34601=>4251, +35059=>4252, +35074=>4253, +35060=>4254, +35065=>4255, +35064=>4256, +35069=>4257, +35048=>4258, +35098=>4259, +35055=>4260, +35494=>4261, +35468=>4262, +35486=>4263, +35491=>4264, +35469=>4265, +35489=>4266, +35475=>4267, +35492=>4268, +35498=>4269, +35493=>4270, +35496=>4271, +35480=>4272, +35473=>4273, +35482=>4274, +35495=>4275, +35946=>4276, +35981=>4277, +35980=>4278, +36051=>4279, +36049=>4280, +36050=>4281, +36203=>4282, +36249=>4283, +36245=>4284, +36348=>4285, +36628=>4286, +36626=>4287, +36629=>4288, +36627=>4289, +36771=>4290, +36960=>4291, +36952=>4292, +36956=>4293, +36963=>4294, +36953=>4295, +36958=>4296, +36962=>4297, +36957=>4298, +36955=>4299, +37145=>4300, +37144=>4301, +37150=>4302, +37237=>4303, +37240=>4304, +37239=>4305, +37236=>4306, +37496=>4307, +37548=>4308, +37504=>4309, +37509=>4310, +37528=>4311, +37526=>4312, +37499=>4313, +37523=>4314, +37532=>4315, +37544=>4316, +37500=>4317, +37521=>4318, +38305=>4319, +38312=>4320, +38313=>4321, +38307=>4322, +38309=>4323, +38308=>4324, +38553=>4325, +38556=>4326, +38555=>4327, +38604=>4328, +38610=>4329, +38656=>4330, +38780=>4331, +38789=>4332, +38902=>4333, +38935=>4334, +38936=>4335, +39087=>4336, +39089=>4337, +39171=>4338, +39173=>4339, +39180=>4340, +39177=>4341, +39361=>4342, +39599=>4343, +39600=>4344, +39654=>4345, +39745=>4346, +39746=>4347, +40180=>4348, +40182=>4349, +40179=>4350, +40636=>4351, +40763=>4352, +12240=>4352, +40778=>4353, +12241=>4353, +20740=>4354, +20736=>4355, +20731=>4356, +20725=>4357, +20729=>4358, +20738=>4359, +20744=>4360, +20745=>4361, +20741=>4362, +20956=>4363, +21127=>4364, +21128=>4365, +21129=>4366, +21133=>4367, +21130=>4368, +21232=>4369, +21426=>4370, +22062=>4371, +22075=>4372, +22073=>4373, +22066=>4374, +22079=>4375, +22068=>4376, +22057=>4377, +22099=>4378, +22094=>4379, +22103=>4380, +22132=>4381, +22070=>4382, +22063=>4383, +22064=>4384, +22656=>4385, +22687=>4386, +22686=>4387, +22707=>4388, +22684=>4389, +22702=>4390, +22697=>4391, +22694=>4392, +22893=>4393, +23305=>4394, +23291=>4395, +23307=>4396, +23285=>4397, +23308=>4398, +23304=>4399, +23534=>4400, +23532=>4401, +23529=>4402, +23531=>4403, +23652=>4404, +23653=>4405, +23965=>4406, +23956=>4407, +24162=>4408, +24159=>4409, +24161=>4410, +24290=>4411, +24282=>4412, +24287=>4413, +24285=>4414, +24291=>4415, +24288=>4416, +24392=>4417, +24433=>4418, +24503=>4419, +24501=>4420, +24950=>4421, +24935=>4422, +24942=>4423, +24925=>4424, +24917=>4425, +24962=>4426, +24956=>4427, +24944=>4428, +24939=>4429, +24958=>4430, +24999=>4431, +24976=>4432, +25003=>4433, +24974=>4434, +25004=>4435, +24986=>4436, +24996=>4437, +24980=>4438, +25006=>4439, +25134=>4440, +25705=>4441, +25711=>4442, +25721=>4443, +25758=>4444, +25778=>4445, +25736=>4446, +25744=>4447, +57745=>4447, +25776=>4448, +25765=>4449, +25747=>4450, +25749=>4451, +25769=>4452, +25746=>4453, +25774=>4454, +25773=>4455, +25771=>4456, +25754=>4457, +25772=>4458, +25753=>4459, +25762=>4460, +25779=>4461, +25973=>4462, +25975=>4463, +25976=>4464, +26286=>4465, +26283=>4466, +26292=>4467, +26289=>4468, +27171=>4469, +27167=>4470, +27112=>4471, +27137=>4472, +27166=>4473, +27161=>4474, +27133=>4475, +27169=>4476, +27155=>4477, +27146=>4478, +27123=>4479, +27138=>4480, +27141=>4481, +27117=>4482, +27153=>4483, +27472=>4484, +27470=>4485, +27556=>4486, +27589=>4487, +27590=>4488, +28479=>4489, +28540=>4490, +28548=>4491, +28497=>4492, +28518=>4493, +28500=>4494, +28550=>4495, +28525=>4496, +28507=>4497, +28536=>4498, +28526=>4499, +28558=>4500, +28538=>4501, +28528=>4502, +28516=>4503, +28567=>4504, +28504=>4505, +28373=>4506, +28527=>4507, +28512=>4508, +28511=>4509, +29087=>4510, +29100=>4511, +29105=>4512, +29096=>4513, +29270=>4514, +29339=>4515, +29518=>4516, +29527=>4517, +29801=>4518, +29835=>4519, +29827=>4520, +29822=>4521, +29824=>4522, +30079=>4523, +30240=>4524, +30249=>4525, +30239=>4526, +30244=>4527, +30246=>4528, +30241=>4529, +30242=>4530, +30362=>4531, +30394=>4532, +30436=>4533, +30606=>4534, +30599=>4535, +30604=>4536, +30609=>4537, +30603=>4538, +30923=>4539, +30917=>4540, +30906=>4541, +30922=>4542, +30910=>4543, +30933=>4544, +30908=>4545, +30928=>4546, +31295=>4547, +31292=>4548, +31296=>4549, +31293=>4550, +31287=>4551, +31291=>4552, +31407=>4553, +31406=>4554, +31661=>4555, +31665=>4556, +31684=>4557, +31668=>4558, +31686=>4559, +31687=>4560, +31681=>4561, +31648=>4562, +31692=>4563, +31946=>4564, +32224=>4565, +32244=>4566, +32239=>4567, +32251=>4568, +32216=>4569, +32236=>4570, +32221=>4571, +32232=>4572, +32227=>4573, +32218=>4574, +32222=>4575, +32233=>4576, +32158=>4577, +32217=>4578, +32242=>4579, +32249=>4580, +32629=>4581, +32631=>4582, +32687=>4583, +32745=>4584, +32806=>4585, +33179=>4586, +33180=>4587, +33181=>4588, +33184=>4589, +33178=>4590, +33176=>4591, +34071=>4592, +34109=>4593, +34074=>4594, +34030=>4595, +34092=>4596, +34093=>4597, +34067=>4598, +34065=>4599, +34083=>4600, +34081=>4601, +34068=>4602, +34028=>4603, +34085=>4604, +34047=>4605, +34054=>4606, +34690=>4607, +34676=>4608, +34678=>4609, +34656=>4610, +34662=>4611, +34680=>4612, +34664=>4613, +34649=>4614, +34647=>4615, +34636=>4616, +34643=>4617, +34907=>4618, +34909=>4619, +35088=>4620, +35079=>4621, +35090=>4622, +35091=>4623, +35093=>4624, +35082=>4625, +35516=>4626, +35538=>4627, +35527=>4628, +35524=>4629, +35477=>4630, +35531=>4631, +35576=>4632, +35506=>4633, +35529=>4634, +35522=>4635, +35519=>4636, +35504=>4637, +35542=>4638, +35533=>4639, +35510=>4640, +35513=>4641, +35547=>4642, +35916=>4643, +35918=>4644, +35948=>4645, +36064=>4646, +36062=>4647, +36070=>4648, +36068=>4649, +36076=>4650, +36077=>4651, +36066=>4652, +36067=>4653, +36060=>4654, +36074=>4655, +36065=>4656, +36205=>4657, +36255=>4658, +36259=>4659, +36395=>4660, +36368=>4661, +36381=>4662, +36386=>4663, +36367=>4664, +36393=>4665, +36383=>4666, +36385=>4667, +36382=>4668, +36538=>4669, +36637=>4670, +36635=>4671, +36639=>4672, +36649=>4673, +36646=>4674, +36650=>4675, +36636=>4676, +36638=>4677, +36645=>4678, +36969=>4679, +36974=>4680, +36968=>4681, +36973=>4682, +36983=>4683, +37168=>4684, +37165=>4685, +37159=>4686, +37169=>4687, +37255=>4688, +37257=>4689, +37259=>4690, +37251=>4691, +37573=>4692, +37563=>4693, +37559=>4694, +37610=>4695, +37604=>4696, +37569=>4697, +37555=>4698, +37564=>4699, +37586=>4700, +37575=>4701, +37616=>4702, +37554=>4703, +38317=>4704, +38321=>4705, +38660=>4706, +38662=>4707, +38663=>4708, +38665=>4709, +38752=>4710, +38797=>4711, +38795=>4712, +38799=>4713, +38945=>4714, +38955=>4715, +38940=>4716, +39091=>4717, +39178=>4718, +39187=>4719, +39186=>4720, +39192=>4721, +39389=>4722, +39376=>4723, +39391=>4724, +39387=>4725, +39377=>4726, +39381=>4727, +39378=>4728, +39385=>4729, +39607=>4730, +39662=>4731, +39663=>4732, +39719=>4733, +39749=>4734, +39748=>4735, +39799=>4736, +39791=>4737, +40198=>4738, +40201=>4739, +40195=>4740, +40617=>4741, +40638=>4742, +40654=>4743, +22696=>4744, +12242=>4745, +40786=>4745, +20754=>4746, +20760=>4747, +20756=>4748, +20752=>4749, +20757=>4750, +20864=>4751, +20906=>4752, +20957=>4753, +21137=>4754, +21139=>4755, +21235=>4756, +22105=>4757, +22123=>4758, +22137=>4759, +22121=>4760, +22116=>4761, +22136=>4762, +22122=>4763, +22120=>4764, +22117=>4765, +22129=>4766, +22127=>4767, +22124=>4768, +22114=>4769, +22134=>4770, +22721=>4771, +22718=>4772, +22727=>4773, +22725=>4774, +22894=>4775, +23325=>4776, +23348=>4777, +23416=>4778, +23536=>4779, +23566=>4780, +24394=>4781, +25010=>4782, +24977=>4783, +25001=>4784, +24970=>4785, +25037=>4786, +25014=>4787, +25022=>4788, +25034=>4789, +25032=>4790, +25136=>4791, +25797=>4792, +25793=>4793, +25803=>4794, +25787=>4795, +25788=>4796, +25818=>4797, +25796=>4798, +25799=>4799, +25794=>4800, +25805=>4801, +25791=>4802, +25810=>4803, +25812=>4804, +25790=>4805, +25972=>4806, +26310=>4807, +26313=>4808, +26297=>4809, +26308=>4810, +26311=>4811, +26296=>4812, +27197=>4813, +27192=>4814, +27194=>4815, +27225=>4816, +27243=>4817, +27224=>4818, +27193=>4819, +27204=>4820, +27234=>4821, +27233=>4822, +27211=>4823, +27207=>4824, +27189=>4825, +27231=>4826, +27208=>4827, +27481=>4828, +27511=>4829, +27653=>4830, +28610=>4831, +28593=>4832, +28577=>4833, +28611=>4834, +28580=>4835, +28609=>4836, +28583=>4837, +28595=>4838, +28608=>4839, +28601=>4840, +28598=>4841, +60318=>4841, +28582=>4842, +28576=>4843, +28596=>4844, +29118=>4845, +29129=>4846, +29136=>4847, +29138=>4848, +29128=>4849, +29141=>4850, +29113=>4851, +29134=>4852, +29145=>4853, +29148=>4854, +29123=>4855, +29124=>4856, +29544=>4857, +29852=>4858, +29859=>4859, +29848=>4860, +29855=>4861, +29854=>4862, +29922=>4863, +29964=>4864, +29965=>4865, +30260=>4866, +30264=>4867, +30266=>4868, +30439=>4869, +30437=>4870, +30624=>4871, +30622=>4872, +30623=>4873, +30629=>4874, +30952=>4875, +30938=>4876, +30956=>4877, +30951=>4878, +31142=>4879, +31309=>4880, +31310=>4881, +31302=>4882, +31308=>4883, +31307=>4884, +31418=>4885, +31705=>4886, +31761=>4887, +31689=>4888, +31716=>4889, +31707=>4890, +31713=>4891, +31721=>4892, +31718=>4893, +31957=>4894, +31958=>4895, +32266=>4896, +32273=>4897, +32264=>4898, +32283=>4899, +32291=>4900, +32286=>4901, +32285=>4902, +58211=>4902, +32265=>4903, +32272=>4904, +32633=>4905, +32690=>4906, +32752=>4907, +32753=>4908, +32750=>4909, +32808=>4910, +58239=>4910, +33203=>4911, +33193=>4912, +33192=>4913, +33275=>4914, +33288=>4915, +33368=>4916, +33369=>4917, +34122=>4918, +34137=>4919, +34120=>4920, +34152=>4921, +34153=>4922, +34115=>4923, +34121=>4924, +34157=>4925, +34154=>4926, +34142=>4927, +34691=>4928, +34719=>4929, +34718=>4930, +34722=>4931, +34701=>4932, +34913=>4933, +35114=>4934, +35122=>4935, +35109=>4936, +35115=>4937, +35105=>4938, +35242=>4939, +35238=>4940, +58391=>4940, +35558=>4941, +35578=>4942, +35563=>4943, +35569=>4944, +35584=>4945, +35548=>4946, +35559=>4947, +35566=>4948, +35582=>4949, +35585=>4950, +35586=>4951, +35575=>4952, +35565=>4953, +35571=>4954, +35574=>4955, +35580=>4956, +35947=>4957, +35949=>4958, +35987=>4959, +36084=>4960, +36420=>4961, +36401=>4962, +36404=>4963, +36418=>4964, +36409=>4965, +36405=>4966, +36667=>4967, +36655=>4968, +36664=>4969, +36659=>4970, +36776=>4971, +36774=>4972, +36981=>4973, +36980=>4974, +36984=>4975, +36978=>4976, +36988=>4977, +36986=>4978, +37172=>4979, +37266=>4980, +37664=>4981, +37686=>4982, +37624=>4983, +37683=>4984, +37679=>4985, +37666=>4986, +37628=>4987, +37675=>4988, +37636=>4989, +37658=>4990, +37648=>4991, +37670=>4992, +37665=>4993, +37653=>4994, +37678=>4995, +37657=>4996, +38331=>4997, +38567=>4998, +38568=>4999, +38570=>5000, +38613=>5001, +38670=>5002, +38673=>5003, +38678=>5004, +38669=>5005, +38675=>5006, +38671=>5007, +38747=>5008, +58565=>5009, +38748=>5009, +38758=>5010, +38808=>5011, +38960=>5012, +38968=>5013, +38971=>5014, +38967=>5015, +38957=>5016, +38969=>5017, +38948=>5018, +39184=>5019, +39208=>5020, +39198=>5021, +39195=>5022, +39201=>5023, +39194=>5024, +39405=>5025, +39394=>5026, +39409=>5027, +39608=>5028, +39612=>5029, +39675=>5030, +39661=>5031, +39720=>5032, +39825=>5033, +40213=>5034, +40227=>5035, +40230=>5036, +40232=>5037, +40210=>5038, +40219=>5039, +40664=>5040, +40660=>5041, +40845=>5042, +12243=>5042, +40860=>5043, +12244=>5043, +20778=>5044, +20767=>5045, +20769=>5046, +20786=>5047, +21237=>5048, +22158=>5049, +22144=>5050, +22160=>5051, +22149=>5052, +22151=>5053, +22159=>5054, +22741=>5055, +22739=>5056, +22737=>5057, +22734=>5058, +23344=>5059, +23338=>5060, +23332=>5061, +23418=>5062, +23607=>5063, +23656=>5064, +23996=>5065, +23994=>5066, +23997=>5067, +23992=>5068, +24171=>5069, +24396=>5070, +24509=>5071, +25033=>5072, +25026=>5073, +25031=>5074, +25062=>5075, +25035=>5076, +25138=>5077, +25140=>5078, +25806=>5079, +25802=>5080, +25816=>5081, +25824=>5082, +25840=>5083, +25830=>5084, +25836=>5085, +25841=>5086, +25826=>5087, +25837=>5088, +25986=>5089, +25987=>5090, +26329=>5091, +26326=>5092, +27264=>5093, +27284=>5094, +27268=>5095, +27298=>5096, +27292=>5097, +27355=>5098, +27299=>5099, +27262=>5100, +27287=>5101, +27280=>5102, +27296=>5103, +27484=>5104, +27566=>5105, +27610=>5106, +27656=>5107, +28632=>5108, +28657=>5109, +28639=>5110, +28640=>5111, +28635=>5112, +28644=>5113, +28651=>5114, +28655=>5115, +28544=>5116, +28652=>5117, +28641=>5118, +28649=>5119, +28629=>5120, +28654=>5121, +28656=>5122, +29159=>5123, +29151=>5124, +60361=>5124, +29166=>5125, +29158=>5126, +29157=>5127, +29165=>5128, +29164=>5129, +29172=>5130, +29152=>5131, +29237=>5132, +29254=>5133, +29552=>5134, +29554=>5135, +29865=>5136, +29872=>5137, +29862=>5138, +29864=>5139, +30278=>5140, +30274=>5141, +30284=>5142, +30442=>5143, +30643=>5144, +30634=>5145, +30640=>5146, +30636=>5147, +30631=>5148, +30637=>5149, +30703=>5150, +30967=>5151, +30970=>5152, +30964=>5153, +30959=>5154, +30977=>5155, +31143=>5156, +31146=>5157, +31319=>5158, +31423=>5159, +31751=>5160, +31757=>5161, +31742=>5162, +31735=>5163, +31756=>5164, +31712=>5165, +31968=>5166, +31964=>5167, +31966=>5168, +31970=>5169, +31967=>5170, +31961=>5171, +31965=>5172, +32302=>5173, +32318=>5174, +32326=>5175, +32311=>5176, +32306=>5177, +32323=>5178, +32299=>5179, +32317=>5180, +32305=>5181, +32325=>5182, +32321=>5183, +32308=>5184, +32313=>5185, +32328=>5186, +32309=>5187, +32319=>5188, +32303=>5189, +32580=>5190, +32755=>5191, +32764=>5192, +32881=>5193, +32882=>5194, +32880=>5195, +32879=>5196, +32883=>5197, +33222=>5198, +33219=>5199, +33210=>5200, +33218=>5201, +33216=>5202, +33215=>5203, +33213=>5204, +33225=>5205, +33214=>5206, +33256=>5207, +33289=>5208, +33393=>5209, +34218=>5210, +34180=>5211, +34174=>5212, +34204=>5213, +34193=>5214, +34196=>5215, +34223=>5216, +34203=>5217, +34183=>5218, +34216=>5219, +34186=>5220, +34214=>5221, +34407=>5222, +34752=>5223, +34769=>5224, +34739=>5225, +34770=>5226, +34758=>5227, +34731=>5228, +34747=>5229, +34746=>5230, +34760=>5231, +34763=>5232, +35131=>5233, +35126=>5234, +35140=>5235, +35128=>5236, +35133=>5237, +35244=>5238, +35598=>5239, +35607=>5240, +35609=>5241, +35611=>5242, +35594=>5243, +35616=>5244, +35613=>5245, +35588=>5246, +35600=>5247, +35905=>5248, +35903=>5249, +35955=>5250, +36090=>5251, +36093=>5252, +36092=>5253, +36088=>5254, +36091=>5255, +36264=>5256, +36425=>5257, +36427=>5258, +36424=>5259, +36426=>5260, +36676=>5261, +36670=>5262, +36674=>5263, +36677=>5264, +36671=>5265, +36991=>5266, +36989=>5267, +36996=>5268, +36993=>5269, +36994=>5270, +36992=>5271, +37177=>5272, +37283=>5273, +37278=>5274, +37276=>5275, +37709=>5276, +37762=>5277, +37672=>5278, +37749=>5279, +37706=>5280, +37733=>5281, +37707=>5282, +37656=>5283, +37758=>5284, +37740=>5285, +37723=>5286, +37744=>5287, +37722=>5288, +37716=>5289, +38346=>5290, +38347=>5291, +38348=>5292, +38344=>5293, +38342=>5294, +38577=>5295, +38584=>5296, +38614=>5297, +38684=>5298, +38686=>5299, +38816=>5300, +38867=>5301, +38982=>5302, +39094=>5303, +39221=>5304, +39425=>5305, +39423=>5306, +39854=>5307, +39851=>5308, +39850=>5309, +39853=>5310, +40251=>5311, +40255=>5312, +40587=>5313, +40655=>5314, +40670=>5315, +40668=>5316, +40669=>5317, +40667=>5318, +40766=>5319, +40779=>5320, +21474=>5321, +22165=>5322, +22190=>5323, +22745=>5324, +22744=>5325, +23352=>5326, +24413=>5327, +25059=>5328, +25139=>5329, +25844=>5330, +25842=>5331, +25854=>5332, +25862=>5333, +25850=>5334, +25851=>5335, +25847=>5336, +26039=>5337, +26332=>5338, +26406=>5339, +27315=>5340, +27308=>5341, +27331=>5342, +27323=>5343, +27320=>5344, +27330=>5345, +27310=>5346, +27311=>5347, +27487=>5348, +27512=>5349, +27567=>5350, +28681=>5351, +28683=>5352, +28670=>5353, +28678=>5354, +28666=>5355, +28689=>5356, +28687=>5357, +29179=>5358, +29180=>5359, +29182=>5360, +29176=>5361, +29559=>5362, +29557=>5363, +29863=>5364, +29887=>5365, +29973=>5366, +30294=>5367, +30296=>5368, +30290=>5369, +30653=>5370, +30655=>5371, +30651=>5372, +30652=>5373, +30990=>5374, +31150=>5375, +31329=>5376, +31330=>5377, +31328=>5378, +31428=>5379, +31429=>5380, +31787=>5381, +31783=>5382, +31786=>5383, +31774=>5384, +31779=>5385, +31777=>5386, +31975=>5387, +32340=>5388, +32341=>5389, +32350=>5390, +32346=>5391, +32353=>5392, +32338=>5393, +32345=>5394, +32584=>5395, +32761=>5396, +32763=>5397, +32887=>5398, +32886=>5399, +33229=>5400, +33231=>5401, +33290=>5402, +34255=>5403, +34217=>5404, +34253=>5405, +34256=>5406, +34249=>5407, +34224=>5408, +34234=>5409, +34233=>5410, +34799=>5411, +34796=>5412, +34802=>5413, +34784=>5414, +35206=>5415, +35250=>5416, +35316=>5417, +35624=>5418, +35641=>5419, +35628=>5420, +35627=>5421, +35920=>5422, +36101=>5423, +36441=>5424, +36451=>5425, +36454=>5426, +36452=>5427, +36447=>5428, +36437=>5429, +36544=>5430, +36681=>5431, +36685=>5432, +36999=>5433, +36995=>5434, +37000=>5435, +37291=>5436, +37292=>5437, +37328=>5438, +37780=>5439, +37770=>5440, +37782=>5441, +37794=>5442, +37811=>5443, +37806=>5444, +37804=>5445, +37808=>5446, +37784=>5447, +37786=>5448, +37783=>5449, +38356=>5450, +38358=>5451, +38352=>5452, +38357=>5453, +38626=>5454, +38620=>5455, +38617=>5456, +38619=>5457, +38622=>5458, +38692=>5459, +38819=>5460, +38822=>5461, +38829=>5462, +38905=>5463, +38989=>5464, +38991=>5465, +38988=>5466, +38990=>5467, +38995=>5468, +39098=>5469, +39230=>5470, +39231=>5471, +39229=>5472, +39214=>5473, +39333=>5474, +39438=>5475, +39617=>5476, +39683=>5477, +39686=>5478, +39759=>5479, +39758=>5480, +39757=>5481, +39882=>5482, +39881=>5483, +39933=>5484, +39880=>5485, +39872=>5486, +40273=>5487, +40285=>5488, +40288=>5489, +40672=>5490, +40725=>5491, +40748=>5492, +20787=>5493, +22181=>5494, +22184=>5495, +22750=>5496, +22751=>5497, +22754=>5498, +23541=>5499, +40848=>5500, +24300=>5501, +25074=>5502, +25079=>5503, +25078=>5504, +25077=>5505, +25856=>5506, +25871=>5507, +26336=>5508, +26333=>5509, +27365=>5510, +27357=>5511, +27354=>5512, +27347=>5513, +28699=>5514, +28703=>5515, +28712=>5516, +28698=>5517, +28701=>5518, +28693=>5519, +28696=>5520, +29190=>5521, +29197=>5522, +29272=>5523, +29346=>5524, +29560=>5525, +29562=>5526, +29885=>5527, +29898=>5528, +29923=>5529, +30087=>5530, +30086=>5531, +30303=>5532, +30305=>5533, +30663=>5534, +31001=>5535, +31153=>5536, +31339=>5537, +31337=>5538, +31806=>5539, +31807=>5540, +31800=>5541, +31805=>5542, +31799=>5543, +31808=>5544, +32363=>5545, +32365=>5546, +32377=>5547, +32361=>5548, +32362=>5549, +32371=>5550, +32645=>5551, +32694=>5552, +32697=>5553, +32696=>5554, +33240=>5555, +34281=>5556, +34269=>5557, +34282=>5558, +34261=>5559, +34276=>5560, +34277=>5561, +34295=>5562, +34811=>5563, +34821=>5564, +34829=>5565, +34809=>5566, +34814=>5567, +35168=>5568, +35167=>5569, +35158=>5570, +35166=>5571, +35649=>5572, +35676=>5573, +35672=>5574, +35657=>5575, +35674=>5576, +35662=>5577, +35663=>5578, +35654=>5579, +35673=>5580, +36104=>5581, +36106=>5582, +36476=>5583, +36466=>5584, +36487=>5585, +36470=>5586, +36460=>5587, +36474=>5588, +36468=>5589, +36692=>5590, +36686=>5591, +36781=>5592, +37002=>5593, +37003=>5594, +37297=>5595, +37294=>5596, +37857=>5597, +37841=>5598, +37855=>5599, +37827=>5600, +37832=>5601, +37852=>5602, +37853=>5603, +37846=>5604, +37858=>5605, +37837=>5606, +37848=>5607, +37860=>5608, +37847=>5609, +37864=>5610, +38364=>5611, +38580=>5612, +38627=>5613, +38698=>5614, +38695=>5615, +38753=>5616, +38876=>5617, +38907=>5618, +39006=>5619, +39000=>5620, +39003=>5621, +39100=>5622, +39237=>5623, +39241=>5624, +39446=>5625, +39449=>5626, +39693=>5627, +39912=>5628, +39911=>5629, +39894=>5630, +39899=>5631, +40329=>5632, +40289=>5633, +40306=>5634, +40298=>5635, +40300=>5636, +40594=>5637, +40599=>5638, +40595=>5639, +40628=>5640, +21240=>5641, +22199=>5642, +22198=>5643, +22196=>5644, +22204=>5645, +22756=>5646, +23360=>5647, +23363=>5648, +23421=>5649, +23542=>5650, +24009=>5651, +25080=>5652, +25082=>5653, +25880=>5654, +25876=>5655, +25881=>5656, +26342=>5657, +26407=>5658, +27372=>5659, +28734=>5660, +28720=>5661, +28722=>5662, +29200=>5663, +29563=>5664, +29903=>5665, +30306=>5666, +30309=>5667, +31014=>5668, +31018=>5669, +31020=>5670, +31019=>5671, +31431=>5672, +31478=>5673, +31820=>5674, +31811=>5675, +31821=>5676, +31983=>5677, +31984=>5678, +36782=>5679, +32381=>5680, +32380=>5681, +32386=>5682, +32588=>5683, +32768=>5684, +33242=>5685, +33382=>5686, +34299=>5687, +34297=>5688, +34321=>5689, +34298=>5690, +34310=>5691, +34315=>5692, +34311=>5693, +34314=>5694, +34836=>5695, +34837=>5696, +35172=>5697, +35258=>5698, +35320=>5699, +35696=>5700, +35692=>5701, +35686=>5702, +35695=>5703, +35679=>5704, +35691=>5705, +36111=>5706, +36109=>5707, +36489=>5708, +36481=>5709, +36485=>5710, +36482=>5711, +37300=>5712, +37323=>5713, +37912=>5714, +37891=>5715, +37885=>5716, +38369=>5717, +38704=>5718, +39108=>5719, +39250=>5720, +39249=>5721, +39336=>5722, +39467=>5723, +39472=>5724, +39479=>5725, +39477=>5726, +39955=>5727, +39949=>5728, +40569=>5729, +40629=>5730, +40680=>5731, +40751=>5732, +40799=>5733, +40803=>5734, +40801=>5735, +20791=>5736, +20792=>5737, +22209=>5738, +22208=>5739, +22210=>5740, +22804=>5741, +23660=>5742, +24013=>5743, +25084=>5744, +25086=>5745, +25885=>5746, +25884=>5747, +26005=>5748, +26345=>5749, +27387=>5750, +27396=>5751, +27386=>5752, +27570=>5753, +28748=>5754, +29211=>5755, +29351=>5756, +29910=>5757, +29908=>5758, +30313=>5759, +30675=>5760, +31824=>5761, +32399=>5762, +32396=>5763, +32700=>5764, +34327=>5765, +34349=>5766, +34330=>5767, +34851=>5768, +34850=>5769, +34849=>5770, +34847=>5771, +35178=>5772, +35180=>5773, +35261=>5774, +35700=>5775, +35703=>5776, +35709=>5777, +36115=>5778, +36490=>5779, +36493=>5780, +36491=>5781, +36703=>5782, +36783=>5783, +37306=>5784, +37934=>5785, +37939=>5786, +37941=>5787, +37946=>5788, +37944=>5789, +37938=>5790, +37931=>5791, +38370=>5792, +38712=>5793, +38713=>5794, +38706=>5795, +38911=>5796, +58586=>5796, +39015=>5797, +39013=>5798, +39255=>5799, +39493=>5800, +39491=>5801, +39488=>5802, +39486=>5803, +39631=>5804, +39764=>5805, +39761=>5806, +39981=>5807, +39973=>5808, +40367=>5809, +40372=>5810, +40386=>5811, +40376=>5812, +40605=>5813, +40687=>5814, +40729=>5815, +40796=>5816, +40806=>5817, +40807=>5818, +20796=>5819, +20795=>5820, +22216=>5821, +22218=>5822, +22217=>5823, +23423=>5824, +24020=>5825, +24018=>5826, +24398=>5827, +25087=>5828, +25892=>5829, +27402=>5830, +27489=>5831, +28753=>5832, +28760=>5833, +29568=>5834, +29924=>5835, +30090=>5836, +30318=>5837, +30316=>5838, +31155=>5839, +31840=>5840, +31839=>5841, +32894=>5842, +32893=>5843, +33247=>5844, +35186=>5845, +35183=>5846, +35324=>5847, +35712=>5848, +36118=>5849, +36119=>5850, +36497=>5851, +36499=>5852, +36705=>5853, +37192=>5854, +37956=>5855, +37969=>5856, +37970=>5857, +38717=>5858, +38718=>5859, +38851=>5860, +38849=>5861, +39019=>5862, +39253=>5863, +39509=>5864, +39501=>5865, +39634=>5866, +39706=>5867, +40009=>5868, +39985=>5869, +39998=>5870, +39995=>5871, +40403=>5872, +40407=>5873, +40756=>5874, +40812=>5875, +40810=>5876, +40852=>5877, +22220=>5878, +24022=>5879, +25088=>5880, +25891=>5881, +25899=>5882, +25898=>5883, +26348=>5884, +27408=>5885, +29914=>5886, +31434=>5887, +31844=>5888, +31843=>5889, +31845=>5890, +32403=>5891, +32406=>5892, +32404=>5893, +33250=>5894, +34360=>5895, +34367=>5896, +34865=>5897, +35722=>5898, +37008=>5899, +37007=>5900, +37987=>5901, +37984=>5902, +37988=>5903, +38760=>5904, +39023=>5905, +39260=>5906, +39514=>5907, +39515=>5908, +39511=>5909, +39635=>5910, +39636=>5911, +39633=>5912, +40020=>5913, +40023=>5914, +40022=>5915, +40421=>5916, +40607=>5917, +40692=>5918, +22225=>5919, +22761=>5920, +25900=>5921, +28766=>5922, +30321=>5923, +30322=>5924, +30679=>5925, +60226=>5925, +32592=>5926, +32648=>5927, +34870=>5928, +34873=>5929, +34914=>5930, +35731=>5931, +35730=>5932, +35734=>5933, +33399=>5934, +36123=>5935, +37312=>5936, +37994=>5937, +38722=>5938, +38728=>5939, +38724=>5940, +38854=>5941, +39024=>5942, +39519=>5943, +39714=>5944, +39768=>5945, +40031=>5946, +40441=>5947, +40442=>5948, +40572=>5949, +40573=>5950, +40711=>5951, +40823=>5952, +40818=>5953, +24307=>5954, +27414=>5955, +28771=>5956, +31852=>5957, +31854=>5958, +34875=>5959, +35264=>5960, +36513=>5961, +37313=>5962, +38002=>5963, +38000=>5964, +39025=>5965, +39262=>5966, +39638=>5967, +39715=>5968, +40652=>5969, +28772=>5970, +30682=>5971, +35738=>5972, +38007=>5973, +38857=>5974, +39522=>5975, +39525=>5976, +32412=>5977, +35740=>5978, +36522=>5979, +37317=>5980, +38013=>5981, +38014=>5982, +38012=>5983, +40055=>5984, +40056=>5985, +40695=>5986, +35924=>5987, +38015=>5988, +40474=>5989, +29224=>5990, +39530=>5991, +39729=>5992, +40475=>5993, +40478=>5994, +31858=>5995, +20034=>5996, +20060=>5997, +12048=>5998, +20981=>5998, +12053=>5999, +21274=>5999, +12058=>6000, +21378=>6000, +19975=>6001, +19980=>6002, +20039=>6003, +20109=>6004, +12062=>6005, +22231=>6005, +12076=>6006, +23662=>6006, +12091=>6007, +24435=>6007, +19983=>6008, +20871=>6009, +19982=>6010, +20014=>6011, +20115=>6012, +20162=>6013, +20169=>6014, +20168=>6015, +20888=>6016, +21244=>6017, +21356=>6018, +21433=>6019, +22304=>6020, +22787=>6021, +22828=>6022, +23568=>6023, +60417=>6023, +24063=>6024, +26081=>6025, +12110=>6026, +27571=>6026, +27596=>6027, +12115=>6028, +27668=>6028, +12121=>6029, +29247=>6029, +20017=>6030, +20028=>6031, +20200=>6032, +20188=>6033, +20201=>6034, +20193=>6035, +20189=>6036, +20186=>6037, +21004=>6038, +21001=>6039, +21276=>6040, +21324=>6041, +22306=>6042, +22307=>6043, +22807=>6044, +22831=>6045, +23425=>6046, +23428=>6047, +23570=>6048, +23611=>6049, +23668=>6050, +23667=>6051, +24068=>6052, +24192=>6053, +24194=>6054, +24521=>6055, +25097=>6056, +25168=>6057, +27669=>6058, +27702=>6059, +27715=>6060, +27711=>6061, +27707=>6062, +29358=>6063, +29360=>6064, +29578=>6065, +12145=>6066, +31160=>6066, +32906=>6067, +38430=>6068, +20238=>6069, +20248=>6070, +20268=>6071, +20213=>6072, +20244=>6073, +20209=>6074, +20224=>6075, +20215=>6076, +20232=>6077, +20253=>6078, +20226=>6079, +20229=>6080, +20258=>6081, +20243=>6082, +20228=>6083, +20212=>6084, +20242=>6085, +20913=>6086, +21011=>6087, +21008=>6088, +21158=>6089, +21282=>6090, +21279=>6091, +21325=>6092, +21386=>6093, +21511=>6094, +22241=>6095, +22239=>6096, +22318=>6097, +22314=>6098, +22324=>6099, +22844=>6100, +22912=>6101, +22908=>6102, +22917=>6103, +22907=>6104, +22910=>6105, +22903=>6106, +22911=>6107, +23382=>6108, +23573=>6109, +23589=>6110, +23676=>6111, +23674=>6112, +23675=>6113, +23678=>6114, +24031=>6115, +24181=>6116, +57646=>6116, +24196=>6117, +24322=>6118, +24346=>6119, +24436=>6120, +24533=>6121, +24532=>6122, +24527=>6123, +25180=>6124, +25182=>6125, +25188=>6126, +25185=>6127, +25190=>6128, +25186=>6129, +25177=>6130, +25184=>6131, +25178=>6132, +25189=>6133, +25911=>6134, +26095=>6135, +26094=>6136, +26430=>6137, +26425=>6138, +26424=>6139, +26427=>6140, +26426=>6141, +26431=>6142, +26428=>6143, +26419=>6144, +27672=>6145, +27718=>6146, +27730=>6147, +27740=>6148, +27727=>6149, +27722=>6150, +60796=>6150, +27732=>6151, +27723=>6152, +27724=>6153, +28785=>6154, +29278=>6155, +29364=>6156, +29365=>6157, +29582=>6158, +29994=>6159, +30335=>6160, +31349=>6161, +12153=>6162, +32593=>6162, +12171=>6163, +33400=>6163, +33404=>6164, +33408=>6165, +33405=>6166, +33407=>6167, +12172=>6168, +34381=>6168, +12177=>6169, +35198=>6169, +37017=>6170, +59347=>6171, +37015=>6171, +37016=>6172, +37019=>6173, +37012=>6174, +38434=>6175, +38436=>6176, +38432=>6177, +38435=>6178, +20310=>6179, +20283=>6180, +20322=>6181, +20297=>6182, +20307=>6183, +20324=>6184, +20286=>6185, +20327=>6186, +20306=>6187, +20319=>6188, +20289=>6189, +20312=>6190, +20269=>6191, +20275=>6192, +20287=>6193, +20321=>6194, +20879=>6195, +20921=>6196, +21020=>6197, +21022=>6198, +21025=>6199, +21165=>6200, +21166=>6201, +21257=>6202, +21347=>6203, +21362=>6204, +21390=>6205, +21391=>6206, +21552=>6207, +21559=>6208, +21546=>6209, +21588=>6210, +21573=>6211, +21529=>6212, +21532=>6213, +21541=>6214, +21528=>6215, +21565=>6216, +21583=>6217, +21569=>6218, +21544=>6219, +21540=>6220, +21575=>6221, +22254=>6222, +22247=>6223, +22245=>6224, +22337=>6225, +22341=>6226, +22348=>6227, +22345=>6228, +22347=>6229, +22354=>6230, +22790=>6231, +22848=>6232, +22950=>6233, +22936=>6234, +22944=>6235, +22935=>6236, +22926=>6237, +22946=>6238, +22928=>6239, +22927=>6240, +22951=>6241, +22945=>6242, +23438=>6243, +23442=>6244, +23592=>6245, +23594=>6246, +23693=>6247, +23695=>6248, +23688=>6249, +23691=>6250, +23689=>6251, +23698=>6252, +23690=>6253, +23686=>6254, +23699=>6255, +23701=>6256, +24032=>6257, +24074=>6258, +24078=>6259, +24203=>6260, +24201=>6261, +24204=>6262, +24200=>6263, +24205=>6264, +24325=>6265, +24349=>6266, +24440=>6267, +24438=>6268, +24530=>6269, +24529=>6270, +24528=>6271, +24557=>6272, +24552=>6273, +24558=>6274, +24563=>6275, +24545=>6276, +24548=>6277, +24547=>6278, +24570=>6279, +24559=>6280, +24567=>6281, +24571=>6282, +24576=>6283, +24564=>6284, +25146=>6285, +25219=>6286, +25228=>6287, +25230=>6288, +25231=>6289, +25236=>6290, +25223=>6291, +25201=>6292, +25211=>6293, +25210=>6294, +25200=>6295, +25217=>6296, +25224=>6297, +25207=>6298, +25213=>6299, +25202=>6300, +25204=>6301, +26096=>6302, +26100=>6303, +26099=>6304, +26098=>6305, +26101=>6306, +26437=>6307, +26439=>6308, +26457=>6309, +26453=>6310, +26444=>6311, +26440=>6312, +26461=>6313, +26445=>6314, +26458=>6315, +26443=>6316, +27600=>6317, +27673=>6318, +27674=>6319, +27768=>6320, +27751=>6321, +27755=>6322, +27780=>6323, +27787=>6324, +27791=>6325, +27761=>6326, +27759=>6327, +27753=>6328, +27802=>6329, +27757=>6330, +27783=>6331, +27797=>6332, +27804=>6333, +57900=>6333, +27750=>6334, +27763=>6335, +27749=>6336, +27771=>6337, +27790=>6338, +28788=>6339, +28794=>6340, +29283=>6341, +29375=>6342, +29373=>6343, +29379=>6344, +29382=>6345, +29377=>6346, +29370=>6347, +29381=>6348, +29589=>6349, +29591=>6350, +29587=>6351, +29588=>6352, +29586=>6353, +30010=>6354, +30009=>6355, +30100=>6356, +30101=>6357, +30337=>6358, +31037=>6359, +32820=>6360, +32917=>6361, +32921=>6362, +32912=>6363, +32914=>6364, +32924=>6365, +33424=>6366, +33423=>6367, +33413=>6368, +33422=>6369, +33425=>6370, +33427=>6371, +33418=>6372, +33411=>6373, +33412=>6374, +12184=>6375, +35960=>6375, +36809=>6376, +36799=>6377, +37023=>6378, +37025=>6379, +37029=>6380, +37022=>6381, +37031=>6382, +37024=>6383, +38448=>6384, +38440=>6385, +38447=>6386, +38445=>6387, +20019=>6388, +20376=>6389, +20348=>6390, +20357=>6391, +20349=>6392, +20352=>6393, +20359=>6394, +20342=>6395, +20340=>6396, +20361=>6397, +20356=>6398, +20343=>6399, +20300=>6400, +20375=>6401, +20330=>6402, +20378=>6403, +20345=>6404, +20353=>6405, +20344=>6406, +20368=>6407, +20380=>6408, +20372=>6409, +20382=>6410, +20370=>6411, +20354=>6412, +20373=>6413, +20331=>6414, +20334=>6415, +20894=>6416, +20924=>6417, +20926=>6418, +21045=>6419, +21042=>6420, +21043=>6421, +21062=>6422, +21041=>6423, +21180=>6424, +21258=>6425, +21259=>6426, +21308=>6427, +21394=>6428, +21396=>6429, +21639=>6430, +21631=>6431, +21633=>6432, +21649=>6433, +21634=>6434, +21640=>6435, +21611=>6436, +21626=>6437, +21630=>6438, +21605=>6439, +21612=>6440, +21620=>6441, +21606=>6442, +21645=>6443, +21615=>6444, +21601=>6445, +21600=>6446, +21656=>6447, +21603=>6448, +21607=>6449, +21604=>6450, +22263=>6451, +22265=>6452, +22383=>6453, +22386=>6454, +22381=>6455, +22379=>6456, +22385=>6457, +22384=>6458, +22390=>6459, +22400=>6460, +22389=>6461, +22395=>6462, +22387=>6463, +22388=>6464, +22370=>6465, +22376=>6466, +22397=>6467, +22796=>6468, +22853=>6469, +22965=>6470, +22970=>6471, +22991=>6472, +22990=>6473, +22962=>6474, +22988=>6475, +22977=>6476, +22966=>6477, +22972=>6478, +22979=>6479, +22998=>6480, +22961=>6481, +22973=>6482, +22976=>6483, +22984=>6484, +22964=>6485, +22983=>6486, +23394=>6487, +23397=>6488, +23443=>6489, +23445=>6490, +23620=>6491, +23623=>6492, +23726=>6493, +23716=>6494, +23712=>6495, +23733=>6496, +23727=>6497, +23720=>6498, +23724=>6499, +23711=>6500, +23715=>6501, +23725=>6502, +23714=>6503, +23722=>6504, +23719=>6505, +23709=>6506, +23717=>6507, +23734=>6508, +23728=>6509, +23718=>6510, +24087=>6511, +24084=>6512, +24089=>6513, +24360=>6514, +24354=>6515, +24355=>6516, +24356=>6517, +24404=>6518, +24450=>6519, +24446=>6520, +24445=>6521, +24542=>6522, +24549=>6523, +24621=>6524, +24614=>6525, +24601=>6526, +24626=>6527, +24587=>6528, +24628=>6529, +24586=>6530, +24599=>6531, +24627=>6532, +24602=>6533, +24606=>6534, +24620=>6535, +24610=>6536, +24589=>6537, +24592=>6538, +24622=>6539, +24595=>6540, +24593=>6541, +24588=>6542, +24585=>6543, +24604=>6544, +25108=>6545, +25149=>6546, +25261=>6547, +25268=>6548, +25297=>6549, +25278=>6550, +25258=>6551, +25270=>6552, +25290=>6553, +25262=>6554, +25267=>6555, +25263=>6556, +25275=>6557, +25257=>6558, +25264=>6559, +25272=>6560, +25917=>6561, +26024=>6562, +26043=>6563, +26121=>6564, +26108=>6565, +26116=>6566, +26130=>6567, +26120=>6568, +26107=>6569, +26115=>6570, +26123=>6571, +26125=>6572, +26117=>6573, +26109=>6574, +26129=>6575, +26128=>6576, +26358=>6577, +26378=>6578, +26501=>6579, +26476=>6580, +26510=>6581, +26514=>6582, +26486=>6583, +26491=>6584, +26520=>6585, +26502=>6586, +26500=>6587, +26484=>6588, +26509=>6589, +26508=>6590, +26490=>6591, +26527=>6592, +26513=>6593, +26521=>6594, +26499=>6595, +26493=>6596, +26497=>6597, +26488=>6598, +26489=>6599, +26516=>6600, +27429=>6601, +27520=>6602, +27518=>6603, +27614=>6604, +27677=>6605, +27795=>6606, +27884=>6607, +27883=>6608, +27886=>6609, +27865=>6610, +27830=>6611, +27860=>6612, +27821=>6613, +27879=>6614, +27831=>6615, +27856=>6616, +27842=>6617, +27834=>6618, +27843=>6619, +27846=>6620, +27885=>6621, +27890=>6622, +27858=>6623, +27869=>6624, +27828=>6625, +27786=>6626, +27805=>6627, +27776=>6628, +27870=>6629, +27840=>6630, +27952=>6631, +27853=>6632, +27847=>6633, +27824=>6634, +27897=>6635, +27855=>6636, +27881=>6637, +27857=>6638, +28820=>6639, +28824=>6640, +28805=>6641, +28819=>6642, +28806=>6643, +28804=>6644, +28817=>6645, +28822=>6646, +28802=>6647, +28826=>6648, +28803=>6649, +29290=>6650, +29398=>6651, +29387=>6652, +29400=>6653, +29385=>6654, +29404=>6655, +29394=>6656, +29396=>6657, +29402=>6658, +29388=>6659, +29393=>6660, +29604=>6661, +29601=>6662, +29613=>6663, +29606=>6664, +29602=>6665, +29600=>6666, +29612=>6667, +29597=>6668, +29917=>6669, +29928=>6670, +30015=>6671, +30016=>6672, +30014=>6673, +30092=>6674, +30104=>6675, +30383=>6676, +30451=>6677, +30449=>6678, +30448=>6679, +30453=>6680, +30712=>6681, +30716=>6682, +30713=>6683, +30715=>6684, +30714=>6685, +30711=>6686, +31042=>6687, +31039=>6688, +31173=>6689, +31352=>6690, +31355=>6691, +31483=>6692, +31861=>6693, +31997=>6694, +32821=>6695, +32911=>6696, +32942=>6697, +32931=>6698, +32952=>6699, +32949=>6700, +32941=>6701, +33312=>6702, +33440=>6703, +33472=>6704, +33451=>6705, +33434=>6706, +33432=>6707, +33435=>6708, +33461=>6709, +33447=>6710, +33454=>6711, +33468=>6712, +33438=>6713, +33466=>6714, +33460=>6715, +33448=>6716, +33441=>6717, +33449=>6718, +33474=>6719, +33444=>6720, +33475=>6721, +33462=>6722, +33442=>6723, +34416=>6724, +34415=>6725, +34413=>6726, +34414=>6727, +35926=>6728, +36818=>6729, +36811=>6730, +36819=>6731, +36813=>6732, +36822=>6733, +36821=>6734, +36823=>6735, +37042=>6736, +37044=>6737, +37039=>6738, +37043=>6739, +37040=>6740, +38457=>6741, +38461=>6742, +38460=>6743, +38458=>6744, +38467=>6745, +20429=>6746, +20421=>6747, +20435=>6748, +20402=>6749, +20425=>6750, +20427=>6751, +20417=>6752, +20436=>6753, +20444=>6754, +20441=>6755, +20411=>6756, +60346=>6756, +20403=>6757, +20443=>6758, +20423=>6759, +20438=>6760, +20410=>6761, +20416=>6762, +20409=>6763, +20460=>6764, +21060=>6765, +21065=>6766, +21184=>6767, +21186=>6768, +21309=>6769, +21372=>6770, +21399=>6771, +21398=>6772, +21401=>6773, +21400=>6774, +21690=>6775, +21665=>6776, +21677=>6777, +21669=>6778, +21711=>6779, +21699=>6780, +33549=>6781, +21687=>6782, +21678=>6783, +21718=>6784, +21686=>6785, +21701=>6786, +21702=>6787, +21664=>6788, +21616=>6789, +21692=>6790, +21666=>6791, +21694=>6792, +21618=>6793, +21726=>6794, +21680=>6795, +22453=>6796, +22430=>6797, +22431=>6798, +22436=>6799, +22412=>6800, +22423=>6801, +22429=>6802, +22427=>6803, +22420=>6804, +22424=>6805, +22415=>6806, +22425=>6807, +22437=>6808, +22426=>6809, +22421=>6810, +22772=>6811, +22797=>6812, +22867=>6813, +23009=>6814, +23006=>6815, +23022=>6816, +23040=>6817, +23025=>6818, +23005=>6819, +23034=>6820, +23037=>6821, +23036=>6822, +23030=>6823, +23012=>6824, +23026=>6825, +23031=>6826, +23003=>6827, +23017=>6828, +23027=>6829, +23029=>6830, +23008=>6831, +23038=>6832, +23028=>6833, +23021=>6834, +23464=>6835, +23628=>6836, +23760=>6837, +23768=>6838, +23756=>6839, +23767=>6840, +23755=>6841, +23771=>6842, +23774=>6843, +23770=>6844, +23753=>6845, +23751=>6846, +23754=>6847, +23766=>6848, +23763=>6849, +23764=>6850, +23759=>6851, +23752=>6852, +23750=>6853, +23758=>6854, +23775=>6855, +23800=>6856, +24057=>6857, +24097=>6858, +24098=>6859, +24099=>6860, +24096=>6861, +24100=>6862, +24240=>6863, +24228=>6864, +24226=>6865, +24219=>6866, +24227=>6867, +24229=>6868, +24327=>6869, +24366=>6870, +24406=>6871, +24454=>6872, +24631=>6873, +24633=>6874, +24660=>6875, +24690=>6876, +24670=>6877, +24645=>6878, +24659=>6879, +24647=>6880, +24649=>6881, +24667=>6882, +24652=>6883, +24640=>6884, +24642=>6885, +24671=>6886, +24612=>6887, +24644=>6888, +24664=>6889, +24678=>6890, +24686=>6891, +25154=>6892, +25155=>6893, +25295=>6894, +25357=>6895, +25355=>6896, +25333=>6897, +25358=>6898, +25347=>6899, +25323=>6900, +25337=>6901, +25359=>6902, +25356=>6903, +25336=>6904, +25334=>6905, +25344=>6906, +25363=>6907, +25364=>6908, +25338=>6909, +25365=>6910, +25339=>6911, +25328=>6912, +25921=>6913, +25923=>6914, +26026=>6915, +26047=>6916, +26166=>6917, +26145=>6918, +26162=>6919, +26165=>6920, +26140=>6921, +26150=>6922, +26146=>6923, +26163=>6924, +26155=>6925, +26170=>6926, +26141=>6927, +26164=>6928, +26169=>6929, +26158=>6930, +26383=>6931, +26384=>6932, +26561=>6933, +26610=>6934, +26568=>6935, +26554=>6936, +26588=>6937, +26555=>6938, +26616=>6939, +26584=>6940, +26560=>6941, +26551=>6942, +26565=>6943, +26603=>6944, +26596=>6945, +26591=>6946, +26549=>6947, +26573=>6948, +26547=>6949, +26615=>6950, +26614=>6951, +26606=>6952, +26595=>6953, +26562=>6954, +26553=>6955, +26574=>6956, +26599=>6957, +26608=>6958, +26546=>6959, +26620=>6960, +26566=>6961, +26605=>6962, +26572=>6963, +26542=>6964, +26598=>6965, +26587=>6966, +26618=>6967, +26569=>6968, +26570=>6969, +26563=>6970, +26602=>6971, +26571=>6972, +27432=>6973, +27522=>6974, +27524=>6975, +27574=>6976, +27606=>6977, +27608=>6978, +27616=>6979, +27680=>6980, +27681=>6981, +27944=>6982, +27956=>6983, +27949=>6984, +27935=>6985, +27964=>6986, +27967=>6987, +27922=>6988, +27914=>6989, +27866=>6990, +27955=>6991, +27908=>6992, +27929=>6993, +27962=>6994, +27930=>6995, +27921=>6996, +27904=>6997, +27933=>6998, +27970=>6999, +27905=>7000, +27928=>7001, +27959=>7002, +27907=>7003, +27919=>7004, +27968=>7005, +27911=>7006, +27936=>7007, +27948=>7008, +27912=>7009, +27938=>7010, +27913=>7011, +27920=>7012, +28855=>7013, +28831=>7014, +28862=>7015, +28849=>7016, +28848=>7017, +28833=>7018, +28852=>7019, +28853=>7020, +28841=>7021, +29249=>7022, +29257=>7023, +29258=>7024, +29292=>7025, +29296=>7026, +29299=>7027, +29294=>7028, +29386=>7029, +29412=>7030, +29416=>7031, +29419=>7032, +29407=>7033, +29418=>7034, +29414=>7035, +29411=>7036, +29573=>7037, +29644=>7038, +29634=>7039, +29640=>7040, +29637=>7041, +29625=>7042, +29622=>7043, +29621=>7044, +29620=>7045, +29675=>7046, +29631=>7047, +29639=>7048, +29630=>7049, +29635=>7050, +29638=>7051, +29624=>7052, +29643=>7053, +29932=>7054, +29934=>7055, +29998=>7056, +30023=>7057, +30024=>7058, +30119=>7059, +30122=>7060, +30329=>7061, +30404=>7062, +30472=>7063, +30467=>7064, +30468=>7065, +30469=>7066, +30474=>7067, +30455=>7068, +30459=>7069, +30458=>7070, +30695=>7071, +30696=>7072, +30726=>7073, +30737=>7074, +30738=>7075, +30725=>7076, +30736=>7077, +30735=>7078, +30734=>7079, +30729=>7080, +58095=>7080, +30723=>7081, +30739=>7082, +31050=>7083, +31052=>7084, +31051=>7085, +31045=>7086, +31044=>7087, +31189=>7088, +31181=>7089, +31183=>7090, +31190=>7091, +31182=>7092, +31360=>7093, +31358=>7094, +31441=>7095, +31488=>7096, +31489=>7097, +31866=>7098, +31864=>7099, +31865=>7100, +31871=>7101, +31872=>7102, +31873=>7103, +32003=>7104, +32008=>7105, +32001=>7106, +32600=>7107, +32657=>7108, +32653=>7109, +32702=>7110, +32775=>7111, +32782=>7112, +32783=>7113, +32788=>7114, +32823=>7115, +32984=>7116, +32967=>7117, +32992=>7118, +32977=>7119, +32968=>7120, +32962=>7121, +32976=>7122, +32965=>7123, +32995=>7124, +32985=>7125, +32988=>7126, +32970=>7127, +32981=>7128, +32969=>7129, +32975=>7130, +32983=>7131, +32998=>7132, +32973=>7133, +33279=>7134, +33313=>7135, +33428=>7136, +33497=>7137, +33534=>7138, +33529=>7139, +33543=>7140, +33512=>7141, +33536=>7142, +33493=>7143, +33594=>7144, +33515=>7145, +33494=>7146, +33524=>7147, +33516=>7148, +33505=>7149, +33522=>7150, +33525=>7151, +33548=>7152, +33531=>7153, +33526=>7154, +33520=>7155, +33514=>7156, +33508=>7157, +33504=>7158, +33530=>7159, +33523=>7160, +33517=>7161, +34423=>7162, +34420=>7163, +34428=>7164, +34419=>7165, +34881=>7166, +34894=>7167, +34919=>7168, +34922=>7169, +34921=>7170, +35283=>7171, +35332=>7172, +35335=>7173, +36210=>7174, +36835=>7175, +36833=>7176, +36846=>7177, +36832=>7178, +37105=>7179, +37053=>7180, +37055=>7181, +37077=>7182, +37061=>7183, +37054=>7184, +37063=>7185, +37067=>7186, +37064=>7187, +37332=>7188, +60294=>7188, +37331=>7189, +38484=>7190, +38479=>7191, +38481=>7192, +38483=>7193, +38474=>7194, +38478=>7195, +20510=>7196, +20485=>7197, +20487=>7198, +20499=>7199, +20514=>7200, +20528=>7201, +20507=>7202, +20469=>7203, +20468=>7204, +20531=>7205, +20535=>7206, +20524=>7207, +20470=>7208, +20471=>7209, +20503=>7210, +20508=>7211, +20512=>7212, +20519=>7213, +20533=>7214, +20527=>7215, +20529=>7216, +20494=>7217, +20826=>7218, +20884=>7219, +20883=>7220, +20938=>7221, +20932=>7222, +20933=>7223, +20936=>7224, +20942=>7225, +21089=>7226, +21082=>7227, +21074=>7228, +21086=>7229, +21087=>7230, +21077=>7231, +21090=>7232, +21197=>7233, +21262=>7234, +21406=>7235, +21798=>7236, +21730=>7237, +21783=>7238, +21778=>7239, +21735=>7240, +21747=>7241, +21732=>7242, +21786=>7243, +21759=>7244, +21764=>7245, +21768=>7246, +21739=>7247, +21777=>7248, +21765=>7249, +21745=>7250, +21770=>7251, +21755=>7252, +21751=>7253, +21752=>7254, +21728=>7255, +21774=>7256, +21763=>7257, +21771=>7258, +22273=>7259, +22274=>7260, +22476=>7261, +22578=>7262, +22485=>7263, +22482=>7264, +22458=>7265, +22470=>7266, +22461=>7267, +22460=>7268, +22456=>7269, +22454=>7270, +22463=>7271, +22471=>7272, +22480=>7273, +22457=>7274, +22465=>7275, +22798=>7276, +22858=>7277, +23065=>7278, +23062=>7279, +23085=>7280, +23086=>7281, +23061=>7282, +23055=>7283, +23063=>7284, +23050=>7285, +23070=>7286, +23091=>7287, +23404=>7288, +23463=>7289, +23469=>7290, +23468=>7291, +23555=>7292, +23638=>7293, +23636=>7294, +23788=>7295, +23807=>7296, +23790=>7297, +23793=>7298, +23799=>7299, +23808=>7300, +23801=>7301, +24105=>7302, +24104=>7303, +24232=>7304, +24238=>7305, +24234=>7306, +24236=>7307, +24371=>7308, +24368=>7309, +24423=>7310, +24669=>7311, +24666=>7312, +24679=>7313, +24641=>7314, +24738=>7315, +24712=>7316, +24704=>7317, +24722=>7318, +24705=>7319, +24733=>7320, +24707=>7321, +24725=>7322, +24731=>7323, +24727=>7324, +24711=>7325, +24732=>7326, +24718=>7327, +25113=>7328, +25158=>7329, +25330=>7330, +25360=>7331, +25430=>7332, +25388=>7333, +25412=>7334, +25413=>7335, +25398=>7336, +25411=>7337, +25572=>7338, +25401=>7339, +25419=>7340, +25418=>7341, +25404=>7342, +25385=>7343, +25409=>7344, +25396=>7345, +25432=>7346, +25428=>7347, +25433=>7348, +25389=>7349, +25415=>7350, +25395=>7351, +25434=>7352, +25425=>7353, +25400=>7354, +25431=>7355, +25408=>7356, +25416=>7357, +25930=>7358, +25926=>7359, +26054=>7360, +26051=>7361, +26052=>7362, +26050=>7363, +26186=>7364, +26207=>7365, +26183=>7366, +26193=>7367, +26386=>7368, +26387=>7369, +26655=>7370, +26650=>7371, +26697=>7372, +26674=>7373, +26675=>7374, +26683=>7375, +26699=>7376, +26703=>7377, +26646=>7378, +26673=>7379, +26652=>7380, +26677=>7381, +26667=>7382, +26669=>7383, +26671=>7384, +26702=>7385, +26692=>7386, +26676=>7387, +26653=>7388, +26642=>7389, +26644=>7390, +26662=>7391, +26664=>7392, +26670=>7393, +26701=>7394, +26682=>7395, +26661=>7396, +26656=>7397, +27436=>7398, +27439=>7399, +27437=>7400, +27441=>7401, +27444=>7402, +27501=>7403, +32898=>7404, +27528=>7405, +27622=>7406, +27620=>7407, +27624=>7408, +27619=>7409, +27618=>7410, +27623=>7411, +27685=>7412, +28026=>7413, +28003=>7414, +28004=>7415, +28022=>7416, +27917=>7417, +28001=>7418, +28050=>7419, +27992=>7420, +28002=>7421, +28013=>7422, +28015=>7423, +28049=>7424, +28045=>7425, +28143=>7426, +28031=>7427, +28038=>7428, +27998=>7429, +28007=>7430, +59078=>7430, +28000=>7431, +28055=>7432, +28016=>7433, +28028=>7434, +27999=>7435, +28034=>7436, +28056=>7437, +27951=>7438, +28008=>7439, +28043=>7440, +28030=>7441, +28032=>7442, +28036=>7443, +27926=>7444, +28035=>7445, +28027=>7446, +28029=>7447, +28021=>7448, +28048=>7449, +28892=>7450, +28883=>7451, +28881=>7452, +28893=>7453, +28875=>7454, +32569=>7455, +28898=>7456, +28887=>7457, +28882=>7458, +28894=>7459, +28896=>7460, +28884=>7461, +28877=>7462, +28869=>7463, +28870=>7464, +28871=>7465, +28890=>7466, +28878=>7467, +28897=>7468, +29250=>7469, +29304=>7470, +29303=>7471, +29302=>7472, +29440=>7473, +29434=>7474, +29428=>7475, +29438=>7476, +29430=>7477, +29427=>7478, +29435=>7479, +29441=>7480, +29651=>7481, +29657=>7482, +29669=>7483, +29654=>7484, +29628=>7485, +29671=>7486, +29667=>7487, +29673=>7488, +29660=>7489, +29650=>7490, +29659=>7491, +29652=>7492, +29661=>7493, +29658=>7494, +29655=>7495, +29656=>7496, +29672=>7497, +29918=>7498, +29919=>7499, +29940=>7500, +29941=>7501, +29985=>7502, +30043=>7503, +30047=>7504, +30128=>7505, +30145=>7506, +30139=>7507, +30148=>7508, +30144=>7509, +30143=>7510, +30134=>7511, +30138=>7512, +30346=>7513, +30409=>7514, +30493=>7515, +30491=>7516, +30480=>7517, +30483=>7518, +30482=>7519, +30499=>7520, +30481=>7521, +30485=>7522, +30489=>7523, +30490=>7524, +30498=>7525, +30503=>7526, +30755=>7527, +30764=>7528, +30754=>7529, +30773=>7530, +30767=>7531, +30760=>7532, +30766=>7533, +30763=>7534, +30753=>7535, +30761=>7536, +30771=>7537, +30762=>7538, +30769=>7539, +31060=>7540, +31067=>7541, +31055=>7542, +31068=>7543, +31059=>7544, +31058=>7545, +31057=>7546, +31211=>7547, +31212=>7548, +31200=>7549, +31214=>7550, +31213=>7551, +31210=>7552, +31196=>7553, +31198=>7554, +31197=>7555, +31366=>7556, +31369=>7557, +31365=>7558, +31371=>7559, +31372=>7560, +31370=>7561, +31367=>7562, +31448=>7563, +31504=>7564, +31492=>7565, +31507=>7566, +31493=>7567, +31503=>7568, +31496=>7569, +31498=>7570, +31502=>7571, +31497=>7572, +31506=>7573, +31876=>7574, +31889=>7575, +31882=>7576, +31884=>7577, +31880=>7578, +31885=>7579, +31877=>7580, +32030=>7581, +32029=>7582, +32017=>7583, +32014=>7584, +32024=>7585, +32022=>7586, +32019=>7587, +32031=>7588, +32018=>7589, +32015=>7590, +32012=>7591, +32604=>7592, +32609=>7593, +32606=>7594, +32608=>7595, +32605=>7596, +32603=>7597, +32662=>7598, +32658=>7599, +32707=>7600, +32706=>7601, +32704=>7602, +32790=>7603, +32830=>7604, +32825=>7605, +33018=>7606, +33010=>7607, +33017=>7608, +33013=>7609, +33025=>7610, +33019=>7611, +33024=>7612, +33281=>7613, +33327=>7614, +33317=>7615, +33587=>7616, +33581=>7617, +33604=>7618, +33561=>7619, +33617=>7620, +33573=>7621, +33622=>7622, +33599=>7623, +33601=>7624, +33574=>7625, +33564=>7626, +33570=>7627, +33602=>7628, +33614=>7629, +33563=>7630, +33578=>7631, +33544=>7632, +33596=>7633, +33613=>7634, +33558=>7635, +33572=>7636, +33568=>7637, +33591=>7638, +33583=>7639, +33577=>7640, +33607=>7641, +33605=>7642, +33612=>7643, +33619=>7644, +33566=>7645, +33580=>7646, +33611=>7647, +33575=>7648, +33608=>7649, +34387=>7650, +34386=>7651, +34466=>7652, +34472=>7653, +34454=>7654, +34445=>7655, +34449=>7656, +34462=>7657, +34439=>7658, +34455=>7659, +34438=>7660, +34443=>7661, +34458=>7662, +34437=>7663, +34469=>7664, +34457=>7665, +34465=>7666, +34471=>7667, +34453=>7668, +34456=>7669, +34446=>7670, +34461=>7671, +34448=>7672, +34452=>7673, +34883=>7674, +34884=>7675, +34925=>7676, +34933=>7677, +34934=>7678, +34930=>7679, +34944=>7680, +34929=>7681, +34943=>7682, +34927=>7683, +34947=>7684, +34942=>7685, +34932=>7686, +34940=>7687, +35346=>7688, +35911=>7689, +35927=>7690, +35963=>7691, +36004=>7692, +36003=>7693, +36214=>7694, +36216=>7695, +36277=>7696, +36279=>7697, +36278=>7698, +36561=>7699, +36563=>7700, +36862=>7701, +36853=>7702, +36866=>7703, +36863=>7704, +36859=>7705, +36868=>7706, +36860=>7707, +36854=>7708, +37078=>7709, +37088=>7710, +37081=>7711, +37082=>7712, +37091=>7713, +37087=>7714, +37093=>7715, +37080=>7716, +37083=>7717, +37079=>7718, +37084=>7719, +37092=>7720, +37200=>7721, +37198=>7722, +37199=>7723, +37333=>7724, +37346=>7725, +37338=>7726, +38492=>7727, +38495=>7728, +38588=>7729, +39139=>7730, +12221=>7731, +39647=>7731, +12223=>7732, +39727=>7732, +20095=>7733, +20592=>7734, +20586=>7735, +20577=>7736, +20574=>7737, +20576=>7738, +20563=>7739, +20555=>7740, +20573=>7741, +20594=>7742, +20552=>7743, +20557=>7744, +20545=>7745, +20571=>7746, +20554=>7747, +20578=>7748, +20501=>7749, +20549=>7750, +20575=>7751, +20585=>7752, +20587=>7753, +20579=>7754, +20580=>7755, +20550=>7756, +20544=>7757, +20590=>7758, +20595=>7759, +20567=>7760, +20561=>7761, +20944=>7762, +21099=>7763, +21101=>7764, +21100=>7765, +21102=>7766, +21206=>7767, +21203=>7768, +21293=>7769, +21404=>7770, +21877=>7771, +21878=>7772, +21820=>7773, +21837=>7774, +21840=>7775, +21812=>7776, +21802=>7777, +21841=>7778, +21858=>7779, +21814=>7780, +21813=>7781, +21808=>7782, +21842=>7783, +21829=>7784, +21772=>7785, +21810=>7786, +21861=>7787, +21838=>7788, +21817=>7789, +21832=>7790, +21805=>7791, +21819=>7792, +21824=>7793, +21835=>7794, +22282=>7795, +22279=>7796, +22523=>7797, +22548=>7798, +22498=>7799, +22518=>7800, +22492=>7801, +22516=>7802, +22528=>7803, +22509=>7804, +22525=>7805, +22536=>7806, +22520=>7807, +22539=>7808, +22515=>7809, +22479=>7810, +22535=>7811, +22510=>7812, +22499=>7813, +22514=>7814, +22501=>7815, +22508=>7816, +22497=>7817, +22542=>7818, +22524=>7819, +22544=>7820, +22503=>7821, +22529=>7822, +22540=>7823, +22513=>7824, +22505=>7825, +22512=>7826, +22541=>7827, +22532=>7828, +22876=>7829, +23136=>7830, +23128=>7831, +23125=>7832, +23143=>7833, +60437=>7833, +23134=>7834, +23096=>7835, +23093=>7836, +23149=>7837, +23120=>7838, +23135=>7839, +23141=>7840, +23148=>7841, +23123=>7842, +23140=>7843, +23127=>7844, +23107=>7845, +23133=>7846, +23122=>7847, +23108=>7848, +23131=>7849, +23112=>7850, +23182=>7851, +23102=>7852, +23117=>7853, +23097=>7854, +23116=>7855, +23152=>7856, +23145=>7857, +23111=>7858, +23121=>7859, +23126=>7860, +23106=>7861, +23132=>7862, +23410=>7863, +23406=>7864, +23489=>7865, +23488=>7866, +23641=>7867, +23838=>7868, +23819=>7869, +23837=>7870, +23834=>7871, +23840=>7872, +23820=>7873, +23848=>7874, +23821=>7875, +23846=>7876, +23845=>7877, +23823=>7878, +23856=>7879, +23826=>7880, +23843=>7881, +23839=>7882, +23854=>7883, +24126=>7884, +24116=>7885, +24241=>7886, +24244=>7887, +24249=>7888, +24242=>7889, +24243=>7890, +24374=>7891, +24376=>7892, +24475=>7893, +24470=>7894, +24479=>7895, +24714=>7896, +24720=>7897, +24710=>7898, +24766=>7899, +24752=>7900, +24762=>7901, +24787=>7902, +24788=>7903, +24783=>7904, +24804=>7905, +24793=>7906, +24797=>7907, +24776=>7908, +24753=>7909, +24795=>7910, +24759=>7911, +24778=>7912, +24767=>7913, +24771=>7914, +24781=>7915, +24768=>7916, +25394=>7917, +25445=>7918, +25482=>7919, +25474=>7920, +25469=>7921, +25533=>7922, +25502=>7923, +25517=>7924, +25501=>7925, +25495=>7926, +25515=>7927, +25486=>7928, +25455=>7929, +25479=>7930, +25488=>7931, +25454=>7932, +25519=>7933, +25461=>7934, +25500=>7935, +25453=>7936, +25518=>7937, +25468=>7938, +25508=>7939, +25403=>7940, +25503=>7941, +25464=>7942, +25477=>7943, +25473=>7944, +25489=>7945, +25485=>7946, +25456=>7947, +25939=>7948, +26061=>7949, +26213=>7950, +26209=>7951, +26203=>7952, +26201=>7953, +26204=>7954, +26210=>7955, +26392=>7956, +26745=>7957, +26759=>7958, +26768=>7959, +26780=>7960, +26733=>7961, +26734=>7962, +26798=>7963, +26795=>7964, +26966=>7965, +26735=>7966, +26787=>7967, +26796=>7968, +26793=>7969, +26741=>7970, +26740=>7971, +26802=>7972, +26767=>7973, +26743=>7974, +26770=>7975, +26748=>7976, +26731=>7977, +26738=>7978, +26794=>7979, +26752=>7980, +26737=>7981, +26750=>7982, +26779=>7983, +26774=>7984, +26763=>7985, +26784=>7986, +26761=>7987, +26788=>7988, +26744=>7989, +26747=>7990, +26769=>7991, +26764=>7992, +26762=>7993, +26749=>7994, +27446=>7995, +27443=>7996, +27447=>7997, +27448=>7998, +27537=>7999, +27535=>8000, +27533=>8001, +27534=>8002, +27532=>8003, +27690=>8004, +28096=>8005, +28075=>8006, +28084=>8007, +28083=>8008, +28276=>8009, +28076=>8010, +28137=>8011, +28130=>8012, +28087=>8013, +28150=>8014, +28116=>8015, +28160=>8016, +28104=>8017, +28128=>8018, +28127=>8019, +28118=>8020, +28094=>8021, +28133=>8022, +28124=>8023, +28125=>8024, +28123=>8025, +28148=>8026, +28106=>8027, +28093=>8028, +28141=>8029, +28144=>8030, +28090=>8031, +28117=>8032, +28098=>8033, +28111=>8034, +28105=>8035, +28112=>8036, +28146=>8037, +28115=>8038, +28157=>8039, +28119=>8040, +28109=>8041, +28131=>8042, +28091=>8043, +28922=>8044, +28941=>8045, +28919=>8046, +28951=>8047, +28916=>8048, +28940=>8049, +28912=>8050, +28932=>8051, +28915=>8052, +28944=>8053, +28924=>8054, +28927=>8055, +28934=>8056, +28947=>8057, +28928=>8058, +28920=>8059, +28918=>8060, +28939=>8061, +28930=>8062, +28942=>8063, +29310=>8064, +29307=>8065, +29308=>8066, +29311=>8067, +29469=>8068, +29463=>8069, +29447=>8070, +29457=>8071, +29464=>8072, +29450=>8073, +29448=>8074, +29439=>8075, +29455=>8076, +29470=>8077, +29576=>8078, +29686=>8079, +29688=>8080, +29685=>8081, +29700=>8082, +29697=>8083, +29693=>8084, +29703=>8085, +29696=>8086, +29690=>8087, +29692=>8088, +29695=>8089, +29708=>8090, +29707=>8091, +29684=>8092, +29704=>8093, +30052=>8094, +30051=>8095, +30158=>8096, +30162=>8097, +30159=>8098, +30155=>8099, +30156=>8100, +30161=>8101, +30160=>8102, +30351=>8103, +30345=>8104, +30419=>8105, +30521=>8106, +30511=>8107, +30509=>8108, +30513=>8109, +30514=>8110, +30516=>8111, +30515=>8112, +30525=>8113, +30501=>8114, +30523=>8115, +30517=>8116, +30792=>8117, +30802=>8118, +30793=>8119, +30797=>8120, +30794=>8121, +30796=>8122, +30758=>8123, +30789=>8124, +30800=>8125, +31076=>8126, +31079=>8127, +31081=>8128, +31082=>8129, +31075=>8130, +31083=>8131, +31073=>8132, +31163=>8133, +31226=>8134, +31224=>8135, +31222=>8136, +31223=>8137, +31375=>8138, +31380=>8139, +31376=>8140, +31541=>8141, +31547=>8142, +31540=>8143, +31525=>8144, +31536=>8145, +31522=>8146, +31524=>8147, +31539=>8148, +31512=>8149, +31530=>8150, +31517=>8151, +31537=>8152, +31531=>8153, +31533=>8154, +31535=>8155, +31538=>8156, +31544=>8157, +31514=>8158, +31523=>8159, +31892=>8160, +31896=>8161, +31894=>8162, +31907=>8163, +32053=>8164, +32061=>8165, +32056=>8166, +32054=>8167, +32058=>8168, +32069=>8169, +32044=>8170, +32041=>8171, +32065=>8172, +32071=>8173, +32062=>8174, +32063=>8175, +32074=>8176, +32059=>8177, +32040=>8178, +32611=>8179, +32661=>8180, +32668=>8181, +32669=>8182, +32667=>8183, +32714=>8184, +32715=>8185, +32717=>8186, +32720=>8187, +32721=>8188, +32711=>8189, +32719=>8190, +32713=>8191, +32799=>8192, +32798=>8193, +32795=>8194, +32839=>8195, +32835=>8196, +32840=>8197, +33048=>8198, +33061=>8199, +33049=>8200, +33051=>8201, +33069=>8202, +33055=>8203, +33068=>8204, +33054=>8205, +33057=>8206, +33045=>8207, +33063=>8208, +33053=>8209, +33058=>8210, +33297=>8211, +33336=>8212, +33331=>8213, +33338=>8214, +33332=>8215, +33330=>8216, +33396=>8217, +33680=>8218, +33699=>8219, +33704=>8220, +33677=>8221, +33658=>8222, +33651=>8223, +33700=>8224, +33652=>8225, +33679=>8226, +33665=>8227, +33685=>8228, +33689=>8229, +33653=>8230, +33684=>8231, +33705=>8232, +33661=>8233, +33667=>8234, +33676=>8235, +33693=>8236, +33691=>8237, +33706=>8238, +33675=>8239, +33662=>8240, +33701=>8241, +33711=>8242, +33672=>8243, +33687=>8244, +33712=>8245, +33663=>8246, +33702=>8247, +33671=>8248, +33710=>8249, +33654=>8250, +34393=>8251, +34390=>8252, +34495=>8253, +34487=>8254, +34498=>8255, +34497=>8256, +34501=>8257, +34490=>8258, +34480=>8259, +34504=>8260, +34489=>8261, +34483=>8262, +34488=>8263, +34508=>8264, +34484=>8265, +34491=>8266, +34492=>8267, +34499=>8268, +34493=>8269, +34494=>8270, +34898=>8271, +34953=>8272, +34965=>8273, +34984=>8274, +34978=>8275, +34986=>8276, +34970=>8277, +34961=>8278, +34977=>8279, +34975=>8280, +34968=>8281, +34983=>8282, +34969=>8283, +34971=>8284, +34967=>8285, +34980=>8286, +34988=>8287, +34956=>8288, +34963=>8289, +34958=>8290, +35202=>8291, +35286=>8292, +35289=>8293, +35285=>8294, +35376=>8295, +35367=>8296, +35372=>8297, +35358=>8298, +35897=>8299, +35899=>8300, +35932=>8301, +35933=>8302, +35965=>8303, +36005=>8304, +36221=>8305, +36219=>8306, +36217=>8307, +36284=>8308, +36290=>8309, +36281=>8310, +36287=>8311, +36289=>8312, +36568=>8313, +36574=>8314, +36573=>8315, +36572=>8316, +36567=>8317, +36576=>8318, +36577=>8319, +36900=>8320, +36875=>8321, +36881=>8322, +36892=>8323, +36876=>8324, +36897=>8325, +37103=>8326, +37098=>8327, +37104=>8328, +37108=>8329, +37106=>8330, +37107=>8331, +37076=>8332, +37099=>8333, +37100=>8334, +37097=>8335, +37206=>8336, +37208=>8337, +37210=>8338, +37203=>8339, +37205=>8340, +37356=>8341, +37364=>8342, +37361=>8343, +37363=>8344, +37368=>8345, +37348=>8346, +37369=>8347, +37354=>8348, +37355=>8349, +37367=>8350, +37352=>8351, +37358=>8352, +38266=>8353, +38278=>8354, +38280=>8355, +38524=>8356, +38509=>8357, +38507=>8358, +38513=>8359, +38511=>8360, +38591=>8361, +38762=>8362, +38916=>8363, +39141=>8364, +39319=>8365, +20635=>8366, +20629=>8367, +20628=>8368, +20638=>8369, +20619=>8370, +20643=>8371, +20611=>8372, +20620=>8373, +20622=>8374, +20637=>8375, +20584=>8376, +20636=>8377, +20626=>8378, +20610=>8379, +20615=>8380, +20831=>8381, +20948=>8382, +21266=>8383, +21265=>8384, +21412=>8385, +21415=>8386, +21905=>8387, +21928=>8388, +21925=>8389, +21933=>8390, +21879=>8391, +22085=>8392, +21922=>8393, +21907=>8394, +21896=>8395, +21903=>8396, +21941=>8397, +21889=>8398, +21923=>8399, +21906=>8400, +21924=>8401, +21885=>8402, +21900=>8403, +21926=>8404, +21887=>8405, +21909=>8406, +21921=>8407, +21902=>8408, +22284=>8409, +22569=>8410, +22583=>8411, +22553=>8412, +22558=>8413, +22567=>8414, +22563=>8415, +22568=>8416, +22517=>8417, +22600=>8418, +22565=>8419, +22556=>8420, +22555=>8421, +22579=>8422, +22591=>8423, +22582=>8424, +22574=>8425, +22585=>8426, +22584=>8427, +22573=>8428, +22572=>8429, +22587=>8430, +22881=>8431, +23215=>8432, +23188=>8433, +23199=>8434, +23162=>8435, +23202=>8436, +23198=>8437, +23160=>8438, +23206=>8439, +23164=>8440, +23205=>8441, +23212=>8442, +23189=>8443, +23214=>8444, +23095=>8445, +23172=>8446, +23178=>8447, +23191=>8448, +23171=>8449, +23179=>8450, +23209=>8451, +23163=>8452, +23165=>8453, +23180=>8454, +23196=>8455, +23183=>8456, +23187=>8457, +23197=>8458, +23530=>8459, +23501=>8460, +23499=>8461, +23508=>8462, +23505=>8463, +23498=>8464, +23502=>8465, +23564=>8466, +23600=>8467, +23863=>8468, +23875=>8469, +23915=>8470, +23873=>8471, +23883=>8472, +23871=>8473, +23861=>8474, +23889=>8475, +23886=>8476, +23893=>8477, +23859=>8478, +23866=>8479, +23890=>8480, +23869=>8481, +23857=>8482, +23897=>8483, +23874=>8484, +23865=>8485, +23881=>8486, +23864=>8487, +23868=>8488, +23858=>8489, +23862=>8490, +23872=>8491, +23877=>8492, +24132=>8493, +24129=>8494, +24408=>8495, +57673=>8495, +24486=>8496, +24485=>8497, +24491=>8498, +24777=>8499, +24761=>8500, +24780=>8501, +24802=>8502, +24782=>8503, +24772=>8504, +24852=>8505, +24818=>8506, +24842=>8507, +24854=>8508, +24837=>8509, +24821=>8510, +24851=>8511, +24824=>8512, +24828=>8513, +24830=>8514, +24769=>8515, +24835=>8516, +24856=>8517, +24861=>8518, +24848=>8519, +24831=>8520, +24836=>8521, +24843=>8522, +25162=>8523, +25492=>8524, +25521=>8525, +25520=>8526, +25550=>8527, +25573=>8528, +25576=>8529, +25583=>8530, +25539=>8531, +25757=>8532, +25587=>8533, +25546=>8534, +25568=>8535, +25590=>8536, +25557=>8537, +25586=>8538, +25589=>8539, +25697=>8540, +25567=>8541, +25534=>8542, +25565=>8543, +25564=>8544, +25540=>8545, +25560=>8546, +25555=>8547, +25538=>8548, +25543=>8549, +25548=>8550, +25547=>8551, +25544=>8552, +25584=>8553, +25559=>8554, +25561=>8555, +25906=>8556, +25959=>8557, +25962=>8558, +25956=>8559, +25948=>8560, +25960=>8561, +25957=>8562, +25996=>8563, +26013=>8564, +26014=>8565, +26030=>8566, +26064=>8567, +26066=>8568, +26236=>8569, +26220=>8570, +26235=>8571, +26240=>8572, +26225=>8573, +26233=>8574, +26218=>8575, +26226=>8576, +26369=>8577, +26892=>8578, +26835=>8579, +26884=>8580, +26844=>8581, +26922=>8582, +26860=>8583, +26858=>8584, +26865=>8585, +26895=>8586, +26838=>8587, +26871=>8588, +26859=>8589, +26852=>8590, +26870=>8591, +26899=>8592, +26896=>8593, +26867=>8594, +26849=>8595, +26887=>8596, +26828=>8597, +26888=>8598, +26992=>8599, +26804=>8600, +26897=>8601, +26863=>8602, +26822=>8603, +26900=>8604, +26872=>8605, +26832=>8606, +26877=>8607, +26876=>8608, +26856=>8609, +26891=>8610, +26890=>8611, +26903=>8612, +26830=>8613, +26824=>8614, +26845=>8615, +26846=>8616, +26854=>8617, +26868=>8618, +26833=>8619, +26886=>8620, +26836=>8621, +26857=>8622, +26901=>8623, +26917=>8624, +26823=>8625, +27449=>8626, +27451=>8627, +27455=>8628, +27452=>8629, +27540=>8630, +27543=>8631, +27545=>8632, +27541=>8633, +27581=>8634, +27632=>8635, +27634=>8636, +27635=>8637, +27696=>8638, +28156=>8639, +28230=>8640, +28231=>8641, +28191=>8642, +28233=>8643, +28296=>8644, +28220=>8645, +28221=>8646, +28229=>8647, +28258=>8648, +28203=>8649, +28223=>8650, +28225=>8651, +28253=>8652, +28275=>8653, +28188=>8654, +28211=>8655, +28235=>8656, +28224=>8657, +28241=>8658, +28219=>8659, +28163=>8660, +28206=>8661, +28254=>8662, +28264=>8663, +28252=>8664, +28257=>8665, +28209=>8666, +28200=>8667, +28256=>8668, +28273=>8669, +28267=>8670, +28217=>8671, +28194=>8672, +28208=>8673, +28243=>8674, +28261=>8675, +28199=>8676, +28280=>8677, +28260=>8678, +28279=>8679, +28245=>8680, +28281=>8681, +28242=>8682, +28262=>8683, +28213=>8684, +28214=>8685, +28250=>8686, +28960=>8687, +28958=>8688, +28975=>8689, +28923=>8690, +28974=>8691, +28977=>8692, +28963=>8693, +28965=>8694, +28962=>8695, +28978=>8696, +28959=>8697, +28968=>8698, +28986=>8699, +28955=>8700, +29259=>8701, +29274=>8702, +29320=>8703, +29321=>8704, +29318=>8705, +29317=>8706, +29323=>8707, +29458=>8708, +29451=>8709, +29488=>8710, +29474=>8711, +29489=>8712, +29491=>8713, +29479=>8714, +29490=>8715, +29485=>8716, +29478=>8717, +29475=>8718, +29493=>8719, +29452=>8720, +29742=>8721, +29740=>8722, +29744=>8723, +29739=>8724, +29718=>8725, +29722=>8726, +29729=>8727, +29741=>8728, +29745=>8729, +29732=>8730, +29731=>8731, +29725=>8732, +29737=>8733, +29728=>8734, +29746=>8735, +29947=>8736, +29999=>8737, +30063=>8738, +30060=>8739, +30183=>8740, +30170=>8741, +30177=>8742, +30182=>8743, +30173=>8744, +30175=>8745, +30180=>8746, +30167=>8747, +30357=>8748, +30354=>8749, +30426=>8750, +30534=>8751, +30535=>8752, +30532=>8753, +30541=>8754, +30533=>8755, +30538=>8756, +30542=>8757, +30539=>8758, +30540=>8759, +30686=>8760, +30700=>8761, +30816=>8762, +30820=>8763, +30821=>8764, +30812=>8765, +30829=>8766, +30833=>8767, +30826=>8768, +30830=>8769, +30832=>8770, +30825=>8771, +30824=>8772, +30814=>8773, +30818=>8774, +31092=>8775, +31091=>8776, +31090=>8777, +31088=>8778, +31234=>8779, +31242=>8780, +31235=>8781, +31244=>8782, +31236=>8783, +31385=>8784, +31462=>8785, +31460=>8786, +31562=>8787, +31559=>8788, +31556=>8789, +31560=>8790, +31564=>8791, +31566=>8792, +31552=>8793, +31576=>8794, +31557=>8795, +31906=>8796, +31902=>8797, +31912=>8798, +31905=>8799, +32088=>8800, +32111=>8801, +32099=>8802, +32083=>8803, +32086=>8804, +32103=>8805, +32106=>8806, +32079=>8807, +32109=>8808, +32092=>8809, +32107=>8810, +32082=>8811, +32084=>8812, +32105=>8813, +32081=>8814, +32095=>8815, +32078=>8816, +32574=>8817, +32575=>8818, +32613=>8819, +32614=>8820, +32674=>8821, +32672=>8822, +32673=>8823, +32727=>8824, +32849=>8825, +32847=>8826, +32848=>8827, +33022=>8828, +32980=>8829, +33091=>8830, +33098=>8831, +33106=>8832, +33103=>8833, +33095=>8834, +33085=>8835, +33101=>8836, +33082=>8837, +33254=>8838, +33262=>8839, +33271=>8840, +33272=>8841, +33273=>8842, +33284=>8843, +33340=>8844, +33341=>8845, +33343=>8846, +33397=>8847, +33595=>8848, +33743=>8849, +60382=>8849, +33785=>8850, +33827=>8851, +33728=>8852, +33768=>8853, +33810=>8854, +33767=>8855, +33764=>8856, +33788=>8857, +33782=>8858, +33808=>8859, +33734=>8860, +33736=>8861, +33771=>8862, +33763=>8863, +33727=>8864, +33793=>8865, +33757=>8866, +33765=>8867, +33752=>8868, +33791=>8869, +33761=>8870, +33739=>8871, +33742=>8872, +33750=>8873, +33781=>8874, +33737=>8875, +33801=>8876, +33807=>8877, +58332=>8877, +33758=>8878, +33809=>8879, +33798=>8880, +33730=>8881, +33779=>8882, +33749=>8883, +33786=>8884, +33735=>8885, +33745=>8886, +33770=>8887, +33811=>8888, +33690=>8889, +33731=>8890, +33772=>8891, +33774=>8892, +33732=>8893, +33787=>8894, +33751=>8895, +33762=>8896, +33819=>8897, +33755=>8898, +33790=>8899, +34520=>8900, +34530=>8901, +34534=>8902, +34515=>8903, +34531=>8904, +34522=>8905, +34538=>8906, +34525=>8907, +34539=>8908, +34524=>8909, +34540=>8910, +34537=>8911, +34519=>8912, +34536=>8913, +34513=>8914, +34888=>8915, +34902=>8916, +34901=>8917, +35002=>8918, +35031=>8919, +35001=>8920, +35000=>8921, +35008=>8922, +35006=>8923, +34998=>8924, +35004=>8925, +34999=>8926, +35005=>8927, +34994=>8928, +35073=>8929, +35017=>8930, +35221=>8931, +35224=>8932, +35223=>8933, +35293=>8934, +35290=>8935, +35291=>8936, +35406=>8937, +35405=>8938, +35385=>8939, +35417=>8940, +35392=>8941, +35415=>8942, +35416=>8943, +35396=>8944, +35397=>8945, +35410=>8946, +35400=>8947, +35409=>8948, +35402=>8949, +35404=>8950, +35407=>8951, +35935=>8952, +35969=>8953, +35968=>8954, +36026=>8955, +36030=>8956, +36016=>8957, +36025=>8958, +36021=>8959, +36228=>8960, +36224=>8961, +36233=>8962, +36312=>8963, +36307=>8964, +36301=>8965, +36295=>8966, +36310=>8967, +36316=>8968, +36303=>8969, +36309=>8970, +36313=>8971, +36296=>8972, +36311=>8973, +36293=>8974, +36591=>8975, +36599=>8976, +36602=>8977, +36601=>8978, +36582=>8979, +36590=>8980, +36581=>8981, +36597=>8982, +36583=>8983, +36584=>8984, +36598=>8985, +36587=>8986, +36593=>8987, +36588=>8988, +36596=>8989, +36585=>8990, +36909=>8991, +36916=>8992, +36911=>8993, +37126=>8994, +37164=>8995, +37124=>8996, +60367=>8996, +37119=>8997, +37116=>8998, +37128=>8999, +37113=>9000, +37115=>9001, +37121=>9002, +37120=>9003, +37127=>9004, +37125=>9005, +37123=>9006, +37217=>9007, +37220=>9008, +37215=>9009, +37218=>9010, +37216=>9011, +37377=>9012, +37386=>9013, +37413=>9014, +37379=>9015, +37402=>9016, +37414=>9017, +37391=>9018, +37388=>9019, +37376=>9020, +37394=>9021, +37375=>9022, +37373=>9023, +37382=>9024, +37380=>9025, +37415=>9026, +37378=>9027, +37404=>9028, +37412=>9029, +37401=>9030, +37399=>9031, +37381=>9032, +37398=>9033, +38267=>9034, +38285=>9035, +38284=>9036, +38288=>9037, +38535=>9038, +38526=>9039, +38536=>9040, +38537=>9041, +38531=>9042, +38528=>9043, +38594=>9044, +38600=>9045, +38595=>9046, +38641=>9047, +38640=>9048, +38764=>9049, +38768=>9050, +38766=>9051, +38919=>9052, +39081=>9053, +39147=>9054, +40166=>9055, +12235=>9056, +40697=>9056, +20099=>9057, +20100=>9058, +20150=>9059, +20669=>9060, +20671=>9061, +20678=>9062, +20654=>9063, +20676=>9064, +20682=>9065, +20660=>9066, +20680=>9067, +20674=>9068, +20656=>9069, +20673=>9070, +20666=>9071, +20657=>9072, +20683=>9073, +20681=>9074, +20662=>9075, +20664=>9076, +20951=>9077, +21114=>9078, +21112=>9079, +21115=>9080, +21116=>9081, +21955=>9082, +21979=>9083, +21964=>9084, +21968=>9085, +21963=>9086, +21962=>9087, +21981=>9088, +21952=>9089, +64013=>9089, +21972=>9090, +21956=>9091, +21993=>9092, +21951=>9093, +21970=>9094, +21901=>9095, +21967=>9096, +21973=>9097, +21986=>9098, +21974=>9099, +21960=>9100, +22002=>9101, +21965=>9102, +21977=>9103, +21954=>9104, +22292=>9105, +22611=>9106, +22632=>9107, +22628=>9108, +22607=>9109, +22605=>9110, +22601=>9111, +22639=>9112, +22613=>9113, +22606=>9114, +22621=>9115, +22617=>9116, +22629=>9117, +22619=>9118, +22589=>9119, +22627=>9120, +22641=>9121, +22780=>9122, +23239=>9123, +23236=>9124, +23243=>9125, +23226=>9126, +23224=>9127, +23217=>9128, +23221=>9129, +23216=>9130, +23231=>9131, +23240=>9132, +23227=>9133, +23238=>9134, +23223=>9135, +23232=>9136, +23242=>9137, +23220=>9138, +23222=>9139, +23245=>9140, +23225=>9141, +23184=>9142, +23510=>9143, +23512=>9144, +23513=>9145, +23583=>9146, +23603=>9147, +23921=>9148, +23907=>9149, +23882=>9150, +23909=>9151, +23922=>9152, +23916=>9153, +23902=>9154, +23912=>9155, +23911=>9156, +23906=>9157, +24048=>9158, +24143=>9159, +24142=>9160, +24138=>9161, +24141=>9162, +24139=>9163, +24261=>9164, +24268=>9165, +24262=>9166, +24267=>9167, +24263=>9168, +24384=>9169, +24495=>9170, +24493=>9171, +24823=>9172, +24905=>9173, +24906=>9174, +24875=>9175, +24901=>9176, +24886=>9177, +24882=>9178, +24878=>9179, +24902=>9180, +24879=>9181, +24911=>9182, +24873=>9183, +24896=>9184, +25120=>9185, +37224=>9186, +25123=>9187, +25125=>9188, +25124=>9189, +25541=>9190, +25585=>9191, +25579=>9192, +25616=>9193, +25618=>9194, +25609=>9195, +25632=>9196, +25636=>9197, +25651=>9198, +25667=>9199, +25631=>9200, +25621=>9201, +25624=>9202, +25657=>9203, +25655=>9204, +25634=>9205, +25635=>9206, +25612=>9207, +25638=>9208, +25648=>9209, +25640=>9210, +25665=>9211, +25653=>9212, +25647=>9213, +25610=>9214, +25626=>9215, +25664=>9216, +25637=>9217, +25639=>9218, +25611=>9219, +25575=>9220, +25627=>9221, +25646=>9222, +25633=>9223, +25614=>9224, +25967=>9225, +26002=>9226, +26067=>9227, +26246=>9228, +26252=>9229, +26261=>9230, +26256=>9231, +26251=>9232, +26250=>9233, +26265=>9234, +26260=>9235, +26232=>9236, +26400=>9237, +26982=>9238, +26975=>9239, +26936=>9240, +26958=>9241, +26978=>9242, +26993=>9243, +26943=>9244, +26949=>9245, +26986=>9246, +26937=>9247, +26946=>9248, +26967=>9249, +26969=>9250, +27002=>9251, +26952=>9252, +26953=>9253, +26933=>9254, +26988=>9255, +26931=>9256, +26941=>9257, +26981=>9258, +26864=>9259, +27000=>9260, +26932=>9261, +26985=>9262, +26944=>9263, +26991=>9264, +26948=>9265, +26998=>9266, +26968=>9267, +26945=>9268, +26996=>9269, +26956=>9270, +26939=>9271, +26955=>9272, +26935=>9273, +26972=>9274, +26959=>9275, +26961=>9276, +26930=>9277, +26962=>9278, +26927=>9279, +27003=>9280, +26940=>9281, +27462=>9282, +27461=>9283, +27459=>9284, +27458=>9285, +27464=>9286, +27457=>9287, +27547=>9288, +27643=>9289, +27644=>9290, +27641=>9291, +27639=>9292, +27640=>9293, +28315=>9294, +28374=>9295, +28360=>9296, +28303=>9297, +28352=>9298, +28319=>9299, +28307=>9300, +28308=>9301, +28320=>9302, +28337=>9303, +28345=>9304, +28358=>9305, +28370=>9306, +28349=>9307, +28353=>9308, +28318=>9309, +28361=>9310, +28343=>9311, +28336=>9312, +28365=>9313, +28326=>9314, +28367=>9315, +28338=>9316, +28350=>9317, +28355=>9318, +28380=>9319, +28376=>9320, +28313=>9321, +28306=>9322, +28302=>9323, +28301=>9324, +28324=>9325, +28321=>9326, +28351=>9327, +28339=>9328, +28368=>9329, +28362=>9330, +28311=>9331, +28334=>9332, +28323=>9333, +28999=>9334, +29012=>9335, +29010=>9336, +29027=>9337, +29024=>9338, +28993=>9339, +29021=>9340, +29026=>9341, +61080=>9341, +29042=>9342, +29048=>9343, +29034=>9344, +29025=>9345, +28994=>9346, +29016=>9347, +28995=>9348, +29003=>9349, +29040=>9350, +29023=>9351, +29008=>9352, +29011=>9353, +28996=>9354, +29005=>9355, +29018=>9356, +29263=>9357, +29325=>9358, +29324=>9359, +29329=>9360, +29328=>9361, +29326=>9362, +29500=>9363, +29506=>9364, +29499=>9365, +29498=>9366, +29504=>9367, +29514=>9368, +29513=>9369, +29764=>9370, +29770=>9371, +29771=>9372, +29778=>9373, +29777=>9374, +29783=>9375, +29760=>9376, +29775=>9377, +29776=>9378, +29774=>9379, +29762=>9380, +29766=>9381, +29773=>9382, +29780=>9383, +29921=>9384, +29951=>9385, +29950=>9386, +29949=>9387, +29981=>9388, +30073=>9389, +30071=>9390, +27011=>9391, +30191=>9392, +30223=>9393, +30211=>9394, +30199=>9395, +30206=>9396, +30204=>9397, +30201=>9398, +60782=>9398, +30200=>9399, +30224=>9400, +30203=>9401, +30198=>9402, +30189=>9403, +30197=>9404, +30205=>9405, +30361=>9406, +30389=>9407, +30429=>9408, +30549=>9409, +30559=>9410, +30560=>9411, +30546=>9412, +30550=>9413, +30554=>9414, +30569=>9415, +30567=>9416, +30548=>9417, +30553=>9418, +30573=>9419, +30688=>9420, +30855=>9421, +30874=>9422, +30868=>9423, +30863=>9424, +30852=>9425, +30869=>9426, +30853=>9427, +30854=>9428, +30881=>9429, +30851=>9430, +30841=>9431, +30873=>9432, +30848=>9433, +30870=>9434, +30843=>9435, +31100=>9436, +31106=>9437, +31101=>9438, +31097=>9439, +31249=>9440, +31256=>9441, +31257=>9442, +31250=>9443, +31255=>9444, +31253=>9445, +31266=>9446, +31251=>9447, +31259=>9448, +31248=>9449, +31395=>9450, +31394=>9451, +31390=>9452, +31467=>9453, +31590=>9454, +31588=>9455, +31597=>9456, +31604=>9457, +31593=>9458, +31602=>9459, +31589=>9460, +31603=>9461, +31601=>9462, +31600=>9463, +31585=>9464, +31608=>9465, +31606=>9466, +31587=>9467, +31922=>9468, +31924=>9469, +31919=>9470, +32136=>9471, +32134=>9472, +32128=>9473, +32141=>9474, +32127=>9475, +32133=>9476, +32122=>9477, +32142=>9478, +32123=>9479, +32131=>9480, +32124=>9481, +32140=>9482, +32148=>9483, +32132=>9484, +32125=>9485, +32146=>9486, +32621=>9487, +32619=>9488, +32615=>9489, +32616=>9490, +32620=>9491, +32678=>9492, +32677=>9493, +32679=>9494, +32731=>9495, +32732=>9496, +32801=>9497, +33124=>9498, +33120=>9499, +33143=>9500, +33116=>9501, +33129=>9502, +33115=>9503, +33122=>9504, +33138=>9505, +26401=>9506, +33118=>9507, +33142=>9508, +33127=>9509, +33135=>9510, +33092=>9511, +33121=>9512, +33309=>9513, +33353=>9514, +33348=>9515, +33344=>9516, +33346=>9517, +33349=>9518, +34033=>9519, +33855=>9520, +33878=>9521, +33910=>9522, +33913=>9523, +33935=>9524, +33933=>9525, +33893=>9526, +33873=>9527, +33856=>9528, +33926=>9529, +33895=>9530, +33840=>9531, +33869=>9532, +33917=>9533, +33882=>9534, +33881=>9535, +33908=>9536, +33907=>9537, +33885=>9538, +34055=>9539, +33886=>9540, +33847=>9541, +33850=>9542, +33844=>9543, +33914=>9544, +33859=>9545, +33912=>9546, +33842=>9547, +33861=>9548, +33833=>9549, +33753=>9550, +33867=>9551, +33839=>9552, +33858=>9553, +33837=>9554, +33887=>9555, +33904=>9556, +33849=>9557, +33870=>9558, +33868=>9559, +33874=>9560, +33903=>9561, +33989=>9562, +33934=>9563, +33851=>9564, +33863=>9565, +33846=>9566, +33843=>9567, +33896=>9568, +33918=>9569, +33860=>9570, +33835=>9571, +33888=>9572, +33876=>9573, +33902=>9574, +33872=>9575, +34571=>9576, +34564=>9577, +34551=>9578, +34572=>9579, +34554=>9580, +34518=>9581, +34549=>9582, +34637=>9583, +34552=>9584, +34574=>9585, +34569=>9586, +34561=>9587, +34550=>9588, +34573=>9589, +34565=>9590, +35030=>9591, +35019=>9592, +35021=>9593, +35022=>9594, +35038=>9595, +35035=>9596, +35034=>9597, +35020=>9598, +35024=>9599, +35205=>9600, +35227=>9601, +35295=>9602, +35301=>9603, +35300=>9604, +35297=>9605, +35296=>9606, +35298=>9607, +35292=>9608, +35302=>9609, +35446=>9610, +35462=>9611, +35455=>9612, +35425=>9613, +35391=>9614, +35447=>9615, +35458=>9616, +35460=>9617, +35445=>9618, +35459=>9619, +35457=>9620, +35444=>9621, +35450=>9622, +35900=>9623, +35915=>9624, +35914=>9625, +35941=>9626, +35940=>9627, +35942=>9628, +35974=>9629, +35972=>9630, +35973=>9631, +36044=>9632, +36200=>9633, +36201=>9634, +36241=>9635, +36236=>9636, +36238=>9637, +36239=>9638, +36237=>9639, +36243=>9640, +36244=>9641, +36240=>9642, +36242=>9643, +36336=>9644, +36320=>9645, +36332=>9646, +36337=>9647, +36334=>9648, +36304=>9649, +36329=>9650, +36323=>9651, +36322=>9652, +36327=>9653, +36338=>9654, +36331=>9655, +36340=>9656, +36614=>9657, +36607=>9658, +36609=>9659, +36608=>9660, +36613=>9661, +36615=>9662, +36616=>9663, +36610=>9664, +36619=>9665, +60507=>9665, +36946=>9666, +36927=>9667, +36932=>9668, +36937=>9669, +36925=>9670, +37136=>9671, +37133=>9672, +37135=>9673, +37137=>9674, +37142=>9675, +37140=>9676, +37131=>9677, +37134=>9678, +37230=>9679, +37231=>9680, +37448=>9681, +37458=>9682, +37424=>9683, +37434=>9684, +37478=>9685, +37427=>9686, +37477=>9687, +37470=>9688, +37507=>9689, +37422=>9690, +37450=>9691, +37446=>9692, +37485=>9693, +37484=>9694, +37455=>9695, +37472=>9696, +37479=>9697, +37487=>9698, +37430=>9699, +37473=>9700, +37488=>9701, +37425=>9702, +37460=>9703, +37475=>9704, +37456=>9705, +37490=>9706, +37454=>9707, +37459=>9708, +37452=>9709, +37462=>9710, +37426=>9711, +38303=>9712, +38300=>9713, +38302=>9714, +38299=>9715, +38546=>9716, +38547=>9717, +38545=>9718, +38551=>9719, +38606=>9720, +38650=>9721, +38653=>9722, +38648=>9723, +38645=>9724, +38771=>9725, +38775=>9726, +38776=>9727, +38770=>9728, +38927=>9729, +38925=>9730, +38926=>9731, +39084=>9732, +39158=>9733, +39161=>9734, +39343=>9735, +39346=>9736, +39344=>9737, +39349=>9738, +39597=>9739, +39595=>9740, +39771=>9741, +40170=>9742, +40173=>9743, +40167=>9744, +40576=>9745, +12236=>9746, +40701=>9746, +20710=>9747, +20692=>9748, +20695=>9749, +20712=>9750, +20723=>9751, +20699=>9752, +20714=>9753, +20701=>9754, +20708=>9755, +20691=>9756, +20716=>9757, +20720=>9758, +20719=>9759, +20707=>9760, +20704=>9761, +20952=>9762, +21120=>9763, +21121=>9764, +21225=>9765, +21227=>9766, +21296=>9767, +21420=>9768, +22055=>9769, +22037=>9770, +22028=>9771, +22034=>9772, +22012=>9773, +22031=>9774, +22044=>9775, +22017=>9776, +22035=>9777, +22018=>9778, +22010=>9779, +22045=>9780, +22020=>9781, +22015=>9782, +22009=>9783, +22665=>9784, +22652=>9785, +22672=>9786, +22680=>9787, +22662=>9788, +22657=>9789, +22655=>9790, +22644=>9791, +22667=>9792, +22650=>9793, +22663=>9794, +22673=>9795, +22670=>9796, +22646=>9797, +22658=>9798, +22664=>9799, +22651=>9800, +22676=>9801, +22671=>9802, +22782=>9803, +22891=>9804, +23260=>9805, +23278=>9806, +23269=>9807, +23253=>9808, +23274=>9809, +23258=>9810, +23277=>9811, +23275=>9812, +23283=>9813, +23266=>9814, +23264=>9815, +23259=>9816, +23276=>9817, +23262=>9818, +23261=>9819, +23257=>9820, +23272=>9821, +23263=>9822, +23415=>9823, +23520=>9824, +23523=>9825, +23651=>9826, +23938=>9827, +23936=>9828, +23933=>9829, +23942=>9830, +23930=>9831, +23937=>9832, +23927=>9833, +23946=>9834, +23945=>9835, +23944=>9836, +23934=>9837, +23932=>9838, +23949=>9839, +23929=>9840, +23935=>9841, +24152=>9842, +24153=>9843, +24147=>9844, +24280=>9845, +24273=>9846, +24279=>9847, +24270=>9848, +24284=>9849, +24277=>9850, +24281=>9851, +24274=>9852, +24276=>9853, +24388=>9854, +24387=>9855, +24431=>9856, +24502=>9857, +24876=>9858, +24872=>9859, +24897=>9860, +24926=>9861, +24945=>9862, +24947=>9863, +24914=>9864, +24915=>9865, +24946=>9866, +24940=>9867, +24960=>9868, +24948=>9869, +24916=>9870, +24954=>9871, +24923=>9872, +24933=>9873, +24891=>9874, +24938=>9875, +24929=>9876, +24918=>9877, +25129=>9878, +25127=>9879, +25131=>9880, +25643=>9881, +25677=>9882, +25691=>9883, +25693=>9884, +25716=>9885, +25718=>9886, +25714=>9887, +25715=>9888, +25725=>9889, +25717=>9890, +25702=>9891, +25766=>9892, +25678=>9893, +25730=>9894, +25694=>9895, +25692=>9896, +25675=>9897, +25683=>9898, +25696=>9899, +25680=>9900, +25727=>9901, +25663=>9902, +25708=>9903, +25707=>9904, +25689=>9905, +25701=>9906, +25719=>9907, +25971=>9908, +26016=>9909, +26273=>9910, +26272=>9911, +26271=>9912, +26373=>9913, +26372=>9914, +26402=>9915, +27057=>9916, +27062=>9917, +27081=>9918, +27040=>9919, +27086=>9920, +27030=>9921, +27056=>9922, +27052=>9923, +27068=>9924, +27025=>9925, +27033=>9926, +27022=>9927, +27047=>9928, +27021=>9929, +27049=>9930, +27070=>9931, +27055=>9932, +27071=>9933, +27076=>9934, +27069=>9935, +27044=>9936, +27092=>9937, +27065=>9938, +27082=>9939, +27034=>9940, +27087=>9941, +27059=>9942, +27027=>9943, +27050=>9944, +27041=>9945, +27038=>9946, +27097=>9947, +27031=>9948, +27024=>9949, +27074=>9950, +27061=>9951, +27045=>9952, +27078=>9953, +27466=>9954, +27469=>9955, +27467=>9956, +27550=>9957, +27551=>9958, +27552=>9959, +27587=>9960, +27588=>9961, +27646=>9962, +28366=>9963, +28405=>9964, +28401=>9965, +28419=>9966, +28453=>9967, +28408=>9968, +28471=>9969, +28411=>9970, +28462=>9971, +28425=>9972, +28494=>9973, +28441=>9974, +28442=>9975, +28455=>9976, +28440=>9977, +28475=>9978, +28434=>9979, +28397=>9980, +28426=>9981, +28470=>9982, +28531=>9983, +28409=>9984, +28398=>9985, +28461=>9986, +28480=>9987, +28464=>9988, +28476=>9989, +28469=>9990, +28395=>9991, +28423=>9992, +28430=>9993, +28483=>9994, +28421=>9995, +28413=>9996, +28406=>9997, +28473=>9998, +28444=>9999, +28412=>10000, +28474=>10001, +28447=>10002, +28429=>10003, +28446=>10004, +28424=>10005, +28449=>10006, +29063=>10007, +29072=>10008, +29065=>10009, +29056=>10010, +29061=>10011, +29058=>10012, +29071=>10013, +29051=>10014, +29062=>10015, +29057=>10016, +29079=>10017, +29252=>10018, +29267=>10019, +29335=>10020, +29333=>10021, +29331=>10022, +29507=>10023, +29517=>10024, +29521=>10025, +29516=>10026, +29794=>10027, +29811=>10028, +29809=>10029, +29813=>10030, +29810=>10031, +29799=>10032, +29806=>10033, +29952=>10034, +29954=>10035, +29955=>10036, +30077=>10037, +30096=>10038, +30230=>10039, +30216=>10040, +30220=>10041, +30229=>10042, +30225=>10043, +30218=>10044, +30228=>10045, +30392=>10046, +30593=>10047, +30588=>10048, +30597=>10049, +30594=>10050, +30574=>10051, +30592=>10052, +30575=>10053, +30590=>10054, +30595=>10055, +30898=>10056, +30890=>10057, +30900=>10058, +30893=>10059, +30888=>10060, +30846=>10061, +30891=>10062, +30878=>10063, +30885=>10064, +30880=>10065, +30892=>10066, +30882=>10067, +30884=>10068, +31128=>10069, +31114=>10070, +31115=>10071, +31126=>10072, +31125=>10073, +31124=>10074, +31123=>10075, +31127=>10076, +31112=>10077, +31122=>10078, +31120=>10079, +31275=>10080, +31306=>10081, +31280=>10082, +31279=>10083, +31272=>10084, +31270=>10085, +31400=>10086, +31403=>10087, +31404=>10088, +31470=>10089, +31624=>10090, +31644=>10091, +31626=>10092, +31633=>10093, +31632=>10094, +31638=>10095, +31629=>10096, +31628=>10097, +31643=>10098, +31630=>10099, +31621=>10100, +31640=>10101, +21124=>10102, +31641=>10103, +31652=>10104, +31618=>10105, +31931=>10106, +31935=>10107, +31932=>10108, +31930=>10109, +32167=>10110, +32183=>10111, +32194=>10112, +32163=>10113, +32170=>10114, +32193=>10115, +32192=>10116, +32197=>10117, +32157=>10118, +32206=>10119, +32196=>10120, +32198=>10121, +32203=>10122, +32204=>10123, +32175=>10124, +32185=>10125, +32150=>10126, +32188=>10127, +32159=>10128, +32166=>10129, +32174=>10130, +32169=>10131, +32161=>10132, +32201=>10133, +32627=>10134, +32738=>10135, +32739=>10136, +32741=>10137, +32734=>10138, +32804=>10139, +32861=>10140, +32860=>10141, +33161=>10142, +33158=>10143, +33155=>10144, +33159=>10145, +33165=>10146, +33164=>10147, +33163=>10148, +33301=>10149, +33943=>10150, +33956=>10151, +33953=>10152, +33951=>10153, +33978=>10154, +33998=>10155, +33986=>10156, +33964=>10157, +33966=>10158, +33963=>10159, +33977=>10160, +33972=>10161, +33985=>10162, +33997=>10163, +33962=>10164, +33946=>10165, +33969=>10166, +34000=>10167, +33949=>10168, +33959=>10169, +33979=>10170, +33954=>10171, +33940=>10172, +33991=>10173, +33996=>10174, +33947=>10175, +33961=>10176, +33967=>10177, +33960=>10178, +58327=>10178, +34006=>10179, +33944=>10180, +33974=>10181, +33999=>10182, +33952=>10183, +34007=>10184, +34004=>10185, +34002=>10186, +34011=>10187, +33968=>10188, +33937=>10189, +34401=>10190, +34611=>10191, +34595=>10192, +34600=>10193, +34667=>10194, +34624=>10195, +34606=>10196, +34590=>10197, +34593=>10198, +34585=>10199, +34587=>10200, +34627=>10201, +34604=>10202, +34625=>10203, +34622=>10204, +34630=>10205, +34592=>10206, +34610=>10207, +34602=>10208, +34605=>10209, +34620=>10210, +34578=>10211, +34618=>10212, +34609=>10213, +34613=>10214, +34626=>10215, +34598=>10216, +34599=>10217, +34616=>10218, +34596=>10219, +34586=>10220, +34608=>10221, +34577=>10222, +35063=>10223, +35047=>10224, +35057=>10225, +35058=>10226, +35066=>10227, +35070=>10228, +35054=>10229, +35068=>10230, +35062=>10231, +35067=>10232, +35056=>10233, +35052=>10234, +35051=>10235, +35229=>10236, +35233=>10237, +35231=>10238, +35230=>10239, +35305=>10240, +35307=>10241, +35304=>10242, +35499=>10243, +35481=>10244, +35467=>10245, +35474=>10246, +35471=>10247, +35478=>10248, +35901=>10249, +35944=>10250, +35945=>10251, +36053=>10252, +36047=>10253, +36055=>10254, +36246=>10255, +36361=>10256, +36354=>10257, +36351=>10258, +36365=>10259, +36349=>10260, +36362=>10261, +36355=>10262, +36359=>10263, +36358=>10264, +36357=>10265, +36350=>10266, +36352=>10267, +36356=>10268, +36624=>10269, +36625=>10270, +36622=>10271, +36621=>10272, +37155=>10273, +37148=>10274, +37152=>10275, +37154=>10276, +37151=>10277, +37149=>10278, +37146=>10279, +37156=>10280, +37153=>10281, +37147=>10282, +37242=>10283, +37234=>10284, +37241=>10285, +37235=>10286, +37541=>10287, +37540=>10288, +37494=>10289, +37531=>10290, +37498=>10291, +37536=>10292, +37524=>10293, +37546=>10294, +37517=>10295, +37542=>10296, +37530=>10297, +37547=>10298, +37497=>10299, +37527=>10300, +37503=>10301, +37539=>10302, +37614=>10303, +37518=>10304, +37506=>10305, +37525=>10306, +37538=>10307, +37501=>10308, +37512=>10309, +37537=>10310, +37514=>10311, +37510=>10312, +37516=>10313, +37529=>10314, +37543=>10315, +37502=>10316, +37511=>10317, +37545=>10318, +37533=>10319, +37515=>10320, +37421=>10321, +38558=>10322, +38561=>10323, +38655=>10324, +38744=>10325, +38781=>10326, +38778=>10327, +38782=>10328, +38787=>10329, +38784=>10330, +38786=>10331, +38779=>10332, +38788=>10333, +38785=>10334, +38783=>10335, +38862=>10336, +38861=>10337, +38934=>10338, +39085=>10339, +39086=>10340, +39170=>10341, +39168=>10342, +39175=>10343, +39325=>10344, +39324=>10345, +39363=>10346, +39353=>10347, +39355=>10348, +39354=>10349, +39362=>10350, +39357=>10351, +39367=>10352, +39601=>10353, +39651=>10354, +39655=>10355, +39742=>10356, +39743=>10357, +39776=>10358, +39777=>10359, +39775=>10360, +40177=>10361, +40178=>10362, +40181=>10363, +40615=>10364, +20735=>10365, +20739=>10366, +20784=>10367, +20728=>10368, +20742=>10369, +20743=>10370, +20726=>10371, +20734=>10372, +20747=>10373, +20748=>10374, +20733=>10375, +20746=>10376, +21131=>10377, +21132=>10378, +21233=>10379, +21231=>10380, +22088=>10381, +22082=>10382, +22092=>10383, +22069=>10384, +22081=>10385, +22090=>10386, +22089=>10387, +22086=>10388, +22104=>10389, +22106=>10390, +22080=>10391, +22067=>10392, +22077=>10393, +22060=>10394, +22078=>10395, +22072=>10396, +22058=>10397, +22074=>10398, +22298=>10399, +22699=>10400, +22685=>10401, +22705=>10402, +22688=>10403, +22691=>10404, +22703=>10405, +22700=>10406, +22693=>10407, +22689=>10408, +22783=>10409, +23295=>10410, +23284=>10411, +23293=>10412, +23287=>10413, +23286=>10414, +23299=>10415, +23288=>10416, +23298=>10417, +23289=>10418, +23297=>10419, +23303=>10420, +23301=>10421, +23311=>10422, +23655=>10423, +23961=>10424, +23959=>10425, +23967=>10426, +23954=>10427, +23970=>10428, +23955=>10429, +23957=>10430, +23968=>10431, +23964=>10432, +23969=>10433, +23962=>10434, +23966=>10435, +24169=>10436, +24157=>10437, +24160=>10438, +24156=>10439, +32243=>10440, +24283=>10441, +24286=>10442, +24289=>10443, +24393=>10444, +24498=>10445, +24971=>10446, +24963=>10447, +24953=>10448, +25009=>10449, +25008=>10450, +24994=>10451, +24969=>10452, +24987=>10453, +24979=>10454, +25007=>10455, +25005=>10456, +24991=>10457, +24978=>10458, +25002=>10459, +24993=>10460, +24973=>10461, +24934=>10462, +25011=>10463, +25133=>10464, +25710=>10465, +25712=>10466, +25750=>10467, +25760=>10468, +25733=>10469, +25751=>10470, +25756=>10471, +25743=>10472, +25739=>10473, +25738=>10474, +25740=>10475, +25763=>10476, +25759=>10477, +25704=>10478, +25777=>10479, +25752=>10480, +25974=>10481, +25978=>10482, +25977=>10483, +25979=>10484, +26034=>10485, +26035=>10486, +26293=>10487, +26288=>10488, +26281=>10489, +26290=>10490, +26295=>10491, +26282=>10492, +26287=>10493, +27136=>10494, +27142=>10495, +27159=>10496, +27109=>10497, +27128=>10498, +27157=>10499, +27121=>10500, +27108=>10501, +27168=>10502, +27135=>10503, +27116=>10504, +27106=>10505, +27163=>10506, +27165=>10507, +27134=>10508, +27175=>10509, +27122=>10510, +27118=>10511, +27156=>10512, +27127=>10513, +27111=>10514, +27200=>10515, +27144=>10516, +27110=>10517, +27131=>10518, +27149=>10519, +27132=>10520, +27115=>10521, +27145=>10522, +27140=>10523, +27160=>10524, +27173=>10525, +27151=>10526, +27126=>10527, +27174=>10528, +27143=>10529, +27124=>10530, +27158=>10531, +27473=>10532, +27557=>10533, +27555=>10534, +27554=>10535, +27558=>10536, +27649=>10537, +27648=>10538, +27647=>10539, +27650=>10540, +28481=>10541, +28454=>10542, +28542=>10543, +28551=>10544, +28614=>10545, +28562=>10546, +28557=>10547, +28553=>10548, +28556=>10549, +28514=>10550, +28495=>10551, +28549=>10552, +28506=>10553, +28566=>10554, +28534=>10555, +28524=>10556, +28546=>10557, +28501=>10558, +28530=>10559, +28498=>10560, +28496=>10561, +28503=>10562, +28564=>10563, +28563=>10564, +28509=>10565, +28416=>10566, +28513=>10567, +28523=>10568, +28541=>10569, +28519=>10570, +28560=>10571, +28499=>10572, +28555=>10573, +28521=>10574, +28543=>10575, +28565=>10576, +28515=>10577, +28535=>10578, +28522=>10579, +28539=>10580, +29106=>10581, +29103=>10582, +29083=>10583, +29104=>10584, +29088=>10585, +29082=>10586, +29097=>10587, +29109=>10588, +29085=>10589, +29093=>10590, +29086=>10591, +29092=>10592, +29089=>10593, +29098=>10594, +29084=>10595, +29095=>10596, +29107=>10597, +29336=>10598, +29338=>10599, +29528=>10600, +29522=>10601, +29534=>10602, +29535=>10603, +29536=>10604, +29533=>10605, +29531=>10606, +29537=>10607, +29530=>10608, +29529=>10609, +29538=>10610, +29831=>10611, +29833=>10612, +29834=>10613, +29830=>10614, +29825=>10615, +29821=>10616, +29829=>10617, +29832=>10618, +29820=>10619, +29817=>10620, +58868=>10620, +29960=>10621, +29959=>10622, +30078=>10623, +30245=>10624, +30238=>10625, +30233=>10626, +30237=>10627, +30236=>10628, +30243=>10629, +30234=>10630, +30248=>10631, +30235=>10632, +30364=>10633, +30365=>10634, +30366=>10635, +30363=>10636, +30605=>10637, +30607=>10638, +30601=>10639, +30600=>10640, +30925=>10641, +30907=>10642, +30927=>10643, +30924=>10644, +30929=>10645, +30926=>10646, +30932=>10647, +30920=>10648, +30915=>10649, +30916=>10650, +30921=>10651, +31130=>10652, +31137=>10653, +31136=>10654, +31132=>10655, +31138=>10656, +31131=>10657, +59175=>10657, +27510=>10658, +31289=>10659, +31410=>10660, +31412=>10661, +31411=>10662, +31671=>10663, +31691=>10664, +31678=>10665, +31660=>10666, +31694=>10667, +31663=>10668, +31673=>10669, +31690=>10670, +31669=>10671, +31941=>10672, +31944=>10673, +31948=>10674, +31947=>10675, +32247=>10676, +32219=>10677, +32234=>10678, +32231=>10679, +32215=>10680, +32225=>10681, +32259=>10682, +32250=>10683, +32230=>10684, +32246=>10685, +32241=>10686, +32240=>10687, +32238=>10688, +32223=>10689, +32630=>10690, +32684=>10691, +32688=>10692, +32685=>10693, +32749=>10694, +32747=>10695, +32746=>10696, +32748=>10697, +32742=>10698, +32744=>10699, +32868=>10700, +32871=>10701, +33187=>10702, +33183=>10703, +33182=>10704, +33173=>10705, +33186=>10706, +33177=>10707, +33175=>10708, +33302=>10709, +33359=>10710, +33363=>10711, +33362=>10712, +33360=>10713, +33358=>10714, +33361=>10715, +34084=>10716, +34107=>10717, +34063=>10718, +34048=>10719, +34089=>10720, +34062=>10721, +34057=>10722, +34061=>10723, +34079=>10724, +34058=>10725, +34087=>10726, +34076=>10727, +34043=>10728, +34091=>10729, +34042=>10730, +34056=>10731, +34060=>10732, +34036=>10733, +34090=>10734, +34034=>10735, +34069=>10736, +34039=>10737, +34027=>10738, +34035=>10739, +34044=>10740, +34066=>10741, +34026=>10742, +34025=>10743, +34070=>10744, +34046=>10745, +34088=>10746, +34077=>10747, +34094=>10748, +34050=>10749, +34045=>10750, +34078=>10751, +34038=>10752, +34097=>10753, +34086=>10754, +34023=>10755, +34024=>10756, +34032=>10757, +34031=>10758, +34041=>10759, +34072=>10760, +34080=>10761, +34096=>10762, +34059=>10763, +34073=>10764, +34095=>10765, +34402=>10766, +34646=>10767, +34659=>10768, +34660=>10769, +34679=>10770, +34785=>10771, +34675=>10772, +34648=>10773, +34644=>10774, +34651=>10775, +34642=>10776, +34657=>10777, +34650=>10778, +34641=>10779, +34654=>10780, +34669=>10781, +34666=>10782, +34640=>10783, +34638=>10784, +34655=>10785, +34653=>10786, +34671=>10787, +34668=>10788, +34682=>10789, +34670=>10790, +34652=>10791, +34661=>10792, +34639=>10793, +34683=>10794, +34677=>10795, +34658=>10796, +34663=>10797, +34665=>10798, +34906=>10799, +35077=>10800, +35084=>10801, +35092=>10802, +35083=>10803, +35095=>10804, +35096=>10805, +35097=>10806, +35078=>10807, +35094=>10808, +35089=>10809, +35086=>10810, +35081=>10811, +35234=>10812, +35236=>10813, +35235=>10814, +35309=>10815, +35312=>10816, +35308=>10817, +35535=>10818, +35526=>10819, +35512=>10820, +35539=>10821, +35537=>10822, +35540=>10823, +35541=>10824, +35515=>10825, +35543=>10826, +35518=>10827, +35520=>10828, +35525=>10829, +35544=>10830, +35523=>10831, +35514=>10832, +35517=>10833, +35545=>10834, +35902=>10835, +35917=>10836, +35983=>10837, +36069=>10838, +36063=>10839, +36057=>10840, +36072=>10841, +36058=>10842, +36061=>10843, +36071=>10844, +36256=>10845, +36252=>10846, +36257=>10847, +36251=>10848, +36384=>10849, +36387=>10850, +36389=>10851, +36388=>10852, +36398=>10853, +36373=>10854, +36379=>10855, +36374=>10856, +36369=>10857, +36377=>10858, +36390=>10859, +36391=>10860, +36372=>10861, +36370=>10862, +36376=>10863, +36371=>10864, +36380=>10865, +36375=>10866, +36378=>10867, +36652=>10868, +36644=>10869, +36632=>10870, +36634=>10871, +36640=>10872, +36643=>10873, +36630=>10874, +36631=>10875, +36979=>10876, +36976=>10877, +36975=>10878, +36967=>10879, +36971=>10880, +37167=>10881, +37163=>10882, +37161=>10883, +37162=>10884, +37170=>10885, +37158=>10886, +37166=>10887, +37253=>10888, +37254=>10889, +37258=>10890, +37249=>10891, +37250=>10892, +37252=>10893, +37248=>10894, +37584=>10895, +37571=>10896, +37572=>10897, +37568=>10898, +37593=>10899, +37558=>10900, +37583=>10901, +37617=>10902, +37599=>10903, +37592=>10904, +37609=>10905, +37591=>10906, +37597=>10907, +37580=>10908, +37615=>10909, +37570=>10910, +37608=>10911, +37578=>10912, +37576=>10913, +37582=>10914, +37606=>10915, +37581=>10916, +37589=>10917, +37577=>10918, +37600=>10919, +37598=>10920, +37607=>10921, +37585=>10922, +37587=>10923, +37557=>10924, +37601=>10925, +37669=>10926, +37574=>10927, +37556=>10928, +38268=>10929, +38316=>10930, +38315=>10931, +38318=>10932, +38320=>10933, +38564=>10934, +38562=>10935, +38611=>10936, +38661=>10937, +38664=>10938, +38658=>10939, +38746=>10940, +38794=>10941, +38798=>10942, +38792=>10943, +38864=>10944, +38863=>10945, +38942=>10946, +38941=>10947, +38950=>10948, +38953=>10949, +38952=>10950, +38944=>10951, +38939=>10952, +38951=>10953, +39090=>10954, +39176=>10955, +39162=>10956, +39185=>10957, +39188=>10958, +39190=>10959, +39191=>10960, +39189=>10961, +39388=>10962, +39373=>10963, +39375=>10964, +39379=>10965, +39380=>10966, +39374=>10967, +39369=>10968, +39382=>10969, +60270=>10969, +39384=>10970, +39371=>10971, +39383=>10972, +39372=>10973, +39603=>10974, +39660=>10975, +39659=>10976, +39667=>10977, +39666=>10978, +39665=>10979, +39750=>10980, +39747=>10981, +39783=>10982, +39796=>10983, +39793=>10984, +39782=>10985, +39798=>10986, +39797=>10987, +39792=>10988, +39784=>10989, +39780=>10990, +39788=>10991, +40188=>10992, +40186=>10993, +40189=>10994, +40191=>10995, +40183=>10996, +40199=>10997, +40192=>10998, +40185=>10999, +40187=>11000, +40200=>11001, +40197=>11002, +40196=>11003, +40579=>11004, +40659=>11005, +40719=>11006, +40720=>11007, +20764=>11008, +20755=>11009, +20759=>11010, +20762=>11011, +20753=>11012, +20958=>11013, +21300=>11014, +21473=>11015, +22128=>11016, +22112=>11017, +22126=>11018, +22131=>11019, +22118=>11020, +22115=>11021, +22125=>11022, +22130=>11023, +22110=>11024, +22135=>11025, +22300=>11026, +22299=>11027, +22728=>11028, +22717=>11029, +22729=>11030, +22719=>11031, +22714=>11032, +22722=>11033, +22716=>11034, +22726=>11035, +23319=>11036, +23321=>11037, +23323=>11038, +23329=>11039, +23316=>11040, +23315=>11041, +23312=>11042, +23318=>11043, +23336=>11044, +59539=>11044, +23322=>11045, +23328=>11046, +23326=>11047, +23535=>11048, +23980=>11049, +23985=>11050, +23977=>11051, +23975=>11052, +23989=>11053, +23984=>11054, +23982=>11055, +23978=>11056, +23976=>11057, +23986=>11058, +23981=>11059, +23983=>11060, +23988=>11061, +24167=>11062, +24168=>11063, +24166=>11064, +24175=>11065, +24297=>11066, +24295=>11067, +24294=>11068, +24296=>11069, +24293=>11070, +24395=>11071, +24508=>11072, +24507=>11073, +24989=>11074, +25000=>11075, +24982=>11076, +25029=>11077, +25012=>11078, +25030=>11079, +25025=>11080, +25036=>11081, +25018=>11082, +25023=>11083, +25016=>11084, +24972=>11085, +25815=>11086, +25814=>11087, +25808=>11088, +25807=>11089, +25801=>11090, +25789=>11091, +25737=>11092, +25795=>11093, +25819=>11094, +25843=>11095, +25817=>11096, +25907=>11097, +25983=>11098, +25980=>11099, +26018=>11100, +26312=>11101, +26302=>11102, +26304=>11103, +26314=>11104, +26315=>11105, +26319=>11106, +26301=>11107, +26299=>11108, +26298=>11109, +26316=>11110, +26403=>11111, +27188=>11112, +27238=>11113, +27209=>11114, +27239=>11115, +27186=>11116, +27240=>11117, +27198=>11118, +27229=>11119, +27245=>11120, +27254=>11121, +27227=>11122, +27217=>11123, +27176=>11124, +27226=>11125, +27195=>11126, +27199=>11127, +27201=>11128, +27242=>11129, +27236=>11130, +27216=>11131, +27215=>11132, +27220=>11133, +27247=>11134, +27241=>11135, +27232=>11136, +27196=>11137, +27230=>11138, +27222=>11139, +27221=>11140, +27213=>11141, +27214=>11142, +27206=>11143, +27477=>11144, +27476=>11145, +27478=>11146, +27559=>11147, +27562=>11148, +27563=>11149, +27592=>11150, +27591=>11151, +27652=>11152, +27651=>11153, +27654=>11154, +28589=>11155, +28619=>11156, +28579=>11157, +28615=>11158, +28604=>11159, +28622=>11160, +28616=>11161, +28510=>11162, +28612=>11163, +28605=>11164, +28574=>11165, +28618=>11166, +28584=>11167, +28676=>11168, +28581=>11169, +28590=>11170, +28602=>11171, +28588=>11172, +28586=>11173, +28623=>11174, +28607=>11175, +28600=>11176, +28578=>11177, +28617=>11178, +28587=>11179, +28621=>11180, +28591=>11181, +28594=>11182, +28592=>11183, +29125=>11184, +29122=>11185, +29119=>11186, +29112=>11187, +29142=>11188, +29120=>11189, +29121=>11190, +29131=>11191, +29140=>11192, +29130=>11193, +29127=>11194, +29135=>11195, +29117=>11196, +29144=>11197, +29116=>11198, +29126=>11199, +29146=>11200, +29147=>11201, +29341=>11202, +29342=>11203, +29545=>11204, +29542=>11205, +29543=>11206, +29548=>11207, +29541=>11208, +29547=>11209, +29546=>11210, +29823=>11211, +29850=>11212, +29856=>11213, +29844=>11214, +29842=>11215, +29845=>11216, +29857=>11217, +29963=>11218, +30080=>11219, +30255=>11220, +30253=>11221, +30257=>11222, +30269=>11223, +30259=>11224, +30268=>11225, +30261=>11226, +30258=>11227, +30256=>11228, +30395=>11229, +30438=>11230, +30618=>11231, +30621=>11232, +30625=>11233, +30620=>11234, +30619=>11235, +30626=>11236, +30627=>11237, +30613=>11238, +30617=>11239, +30615=>11240, +30941=>11241, +30953=>11242, +30949=>11243, +30954=>11244, +30942=>11245, +30947=>11246, +30939=>11247, +30945=>11248, +30946=>11249, +30957=>11250, +30943=>11251, +30944=>11252, +31140=>11253, +31300=>11254, +31304=>11255, +31303=>11256, +31414=>11257, +31416=>11258, +31413=>11259, +31409=>11260, +31415=>11261, +31710=>11262, +31715=>11263, +31719=>11264, +31709=>11265, +31701=>11266, +31717=>11267, +31706=>11268, +31720=>11269, +31737=>11270, +31700=>11271, +31722=>11272, +31714=>11273, +31708=>11274, +31723=>11275, +31704=>11276, +31711=>11277, +31954=>11278, +31956=>11279, +31959=>11280, +31952=>11281, +31953=>11282, +32274=>11283, +32289=>11284, +32279=>11285, +32268=>11286, +32287=>11287, +32288=>11288, +32275=>11289, +32270=>11290, +32284=>11291, +32277=>11292, +32282=>11293, +32290=>11294, +32267=>11295, +32271=>11296, +32278=>11297, +32269=>11298, +32276=>11299, +32293=>11300, +32292=>11301, +32579=>11302, +32635=>11303, +32636=>11304, +32634=>11305, +32689=>11306, +32751=>11307, +32810=>11308, +32809=>11309, +32876=>11310, +33201=>11311, +33190=>11312, +33198=>11313, +33209=>11314, +33205=>11315, +33195=>11316, +33200=>11317, +33196=>11318, +33204=>11319, +33202=>11320, +33207=>11321, +33191=>11322, +33266=>11323, +33365=>11324, +33366=>11325, +33367=>11326, +34134=>11327, +34117=>11328, +34155=>11329, +34125=>11330, +34131=>11331, +34145=>11332, +34136=>11333, +34112=>11334, +34118=>11335, +34148=>11336, +34113=>11337, +34146=>11338, +34116=>11339, +34129=>11340, +34119=>11341, +34147=>11342, +34110=>11343, +34139=>11344, +34161=>11345, +34126=>11346, +34158=>11347, +34165=>11348, +34133=>11349, +34151=>11350, +34144=>11351, +34188=>11352, +34150=>11353, +34141=>11354, +34132=>11355, +34149=>11356, +34156=>11357, +34403=>11358, +34405=>11359, +34404=>11360, +34724=>11361, +34715=>11362, +34703=>11363, +34711=>11364, +34707=>11365, +34706=>11366, +34696=>11367, +34689=>11368, +34710=>11369, +34712=>11370, +34681=>11371, +34695=>11372, +34723=>11373, +34693=>11374, +34704=>11375, +34705=>11376, +34717=>11377, +34692=>11378, +34708=>11379, +34716=>11380, +34714=>11381, +34697=>11382, +35102=>11383, +35110=>11384, +35120=>11385, +35117=>11386, +35118=>11387, +35111=>11388, +35121=>11389, +35106=>11390, +35113=>11391, +35107=>11392, +35119=>11393, +35116=>11394, +35103=>11395, +35313=>11396, +35552=>11397, +35554=>11398, +35570=>11399, +35572=>11400, +35573=>11401, +35549=>11402, +35604=>11403, +35556=>11404, +35551=>11405, +35568=>11406, +35528=>11407, +35550=>11408, +35553=>11409, +35560=>11410, +35583=>11411, +35567=>11412, +35579=>11413, +35985=>11414, +35986=>11415, +35984=>11416, +36085=>11417, +36078=>11418, +36081=>11419, +36080=>11420, +36083=>11421, +36204=>11422, +36206=>11423, +36261=>11424, +36263=>11425, +36403=>11426, +36414=>11427, +36408=>11428, +36416=>11429, +36421=>11430, +36406=>11431, +36412=>11432, +36413=>11433, +36417=>11434, +36400=>11435, +36415=>11436, +36541=>11437, +36662=>11438, +60329=>11438, +36654=>11439, +36661=>11440, +36658=>11441, +36665=>11442, +36663=>11443, +36660=>11444, +36982=>11445, +36985=>11446, +36987=>11447, +36998=>11448, +37114=>11449, +37171=>11450, +37173=>11451, +37174=>11452, +37267=>11453, +37264=>11454, +37265=>11455, +37261=>11456, +37263=>11457, +37671=>11458, +37662=>11459, +37640=>11460, +37663=>11461, +37638=>11462, +37647=>11463, +37754=>11464, +37688=>11465, +37692=>11466, +37659=>11467, +37667=>11468, +37650=>11469, +37633=>11470, +37702=>11471, +37677=>11472, +37646=>11473, +37645=>11474, +37579=>11475, +37661=>11476, +37626=>11477, +37651=>11478, +37625=>11479, +37623=>11480, +37684=>11481, +37634=>11482, +37668=>11483, +37631=>11484, +37673=>11485, +37689=>11486, +37685=>11487, +37674=>11488, +37652=>11489, +37644=>11490, +37643=>11491, +37630=>11492, +37641=>11493, +37632=>11494, +37627=>11495, +37654=>11496, +38332=>11497, +38349=>11498, +38334=>11499, +38329=>11500, +38330=>11501, +38326=>11502, +38335=>11503, +38325=>11504, +38333=>11505, +38569=>11506, +38612=>11507, +38667=>11508, +38674=>11509, +38672=>11510, +38809=>11511, +38807=>11512, +38804=>11513, +38896=>11514, +38904=>11515, +38965=>11516, +38959=>11517, +38962=>11518, +39204=>11519, +39199=>11520, +39207=>11521, +39209=>11522, +39326=>11523, +39406=>11524, +39404=>11525, +39397=>11526, +39396=>11527, +39408=>11528, +39395=>11529, +39402=>11530, +39401=>11531, +39399=>11532, +39609=>11533, +39615=>11534, +39604=>11535, +39611=>11536, +39670=>11537, +39674=>11538, +39673=>11539, +39671=>11540, +39731=>11541, +39808=>11542, +39813=>11543, +39815=>11544, +39804=>11545, +39806=>11546, +39803=>11547, +39810=>11548, +39827=>11549, +39826=>11550, +39824=>11551, +39802=>11552, +39829=>11553, +39805=>11554, +39816=>11555, +40229=>11556, +40215=>11557, +40224=>11558, +40222=>11559, +40212=>11560, +40233=>11561, +40221=>11562, +40216=>11563, +40226=>11564, +40208=>11565, +40217=>11566, +40223=>11567, +40584=>11568, +40582=>11569, +40583=>11570, +40622=>11571, +40621=>11572, +40661=>11573, +40662=>11574, +40698=>11575, +40722=>11576, +40765=>11577, +20774=>11578, +20773=>11579, +20770=>11580, +20772=>11581, +20768=>11582, +20777=>11583, +21236=>11584, +22163=>11585, +22156=>11586, +22157=>11587, +22150=>11588, +22148=>11589, +22147=>11590, +22142=>11591, +22146=>11592, +22143=>11593, +22145=>11594, +22742=>11595, +22740=>11596, +22735=>11597, +22738=>11598, +23341=>11599, +23333=>11600, +23346=>11601, +23331=>11602, +23340=>11603, +23335=>11604, +23334=>11605, +23343=>11606, +23342=>11607, +23419=>11608, +23537=>11609, +23538=>11610, +23991=>11611, +24172=>11612, +24170=>11613, +24510=>11614, +25027=>11615, +25013=>11616, +25020=>11617, +25063=>11618, +25056=>11619, +25061=>11620, +25060=>11621, +25064=>11622, +25054=>11623, +25839=>11624, +25833=>11625, +25827=>11626, +25835=>11627, +25828=>11628, +25832=>11629, +25985=>11630, +25984=>11631, +26038=>11632, +26074=>11633, +26322=>11634, +27277=>11635, +27286=>11636, +27265=>11637, +27301=>11638, +27273=>11639, +27295=>11640, +27291=>11641, +27297=>11642, +27294=>11643, +27271=>11644, +27283=>11645, +27278=>11646, +27285=>11647, +27267=>11648, +27304=>11649, +27300=>11650, +27281=>11651, +27263=>11652, +27302=>11653, +27290=>11654, +27269=>11655, +27276=>11656, +27282=>11657, +27483=>11658, +27565=>11659, +27657=>11660, +28620=>11661, +28585=>11662, +28660=>11663, +28628=>11664, +28643=>11665, +28636=>11666, +28653=>11667, +28647=>11668, +28646=>11669, +28638=>11670, +28658=>11671, +28637=>11672, +28642=>11673, +28648=>11674, +29153=>11675, +29169=>11676, +29160=>11677, +29170=>11678, +29156=>11679, +29168=>11680, +29154=>11681, +29555=>11682, +29550=>11683, +29551=>11684, +29847=>11685, +29874=>11686, +29867=>11687, +29840=>11688, +29866=>11689, +29869=>11690, +29873=>11691, +29861=>11692, +29871=>11693, +29968=>11694, +29969=>11695, +29970=>11696, +29967=>11697, +30084=>11698, +30275=>11699, +30280=>11700, +30281=>11701, +30279=>11702, +30372=>11703, +30441=>11704, +30645=>11705, +30635=>11706, +30642=>11707, +30647=>11708, +30646=>11709, +30644=>11710, +30641=>11711, +30632=>11712, +30704=>11713, +30963=>11714, +30973=>11715, +30978=>11716, +30971=>11717, +30972=>11718, +30975=>11719, +30962=>11720, +30981=>11721, +30969=>11722, +30974=>11723, +30980=>11724, +31147=>11725, +31144=>11726, +31324=>11727, +31323=>11728, +31318=>11729, +31320=>11730, +31316=>11731, +31322=>11732, +31422=>11733, +31424=>11734, +31425=>11735, +31749=>11736, +31759=>11737, +31730=>11738, +31744=>11739, +31743=>11740, +31739=>11741, +31758=>11742, +31732=>11743, +31755=>11744, +31731=>11745, +31746=>11746, +31753=>11747, +31747=>11748, +31745=>11749, +31736=>11750, +31741=>11751, +31750=>11752, +58176=>11752, +31728=>11753, +31729=>11754, +31760=>11755, +31754=>11756, +31976=>11757, +32301=>11758, +32316=>11759, +32322=>11760, +32307=>11761, +38984=>11762, +32312=>11763, +32298=>11764, +32329=>11765, +32320=>11766, +32327=>11767, +32297=>11768, +32332=>11769, +32304=>11770, +32315=>11771, +32310=>11772, +32324=>11773, +32314=>11774, +32581=>11775, +32639=>11776, +32638=>11777, +32637=>11778, +32756=>11779, +32754=>11780, +32812=>11781, +33211=>11782, +33220=>11783, +33228=>11784, +33226=>11785, +33221=>11786, +33223=>11787, +33212=>11788, +33257=>11789, +33371=>11790, +33370=>11791, +33372=>11792, +34179=>11793, +34176=>11794, +34191=>11795, +34215=>11796, +34197=>11797, +34208=>11798, +34187=>11799, +34211=>11800, +34171=>11801, +34212=>11802, +34202=>11803, +34206=>11804, +34167=>11805, +34172=>11806, +34185=>11807, +34209=>11808, +34170=>11809, +34168=>11810, +34135=>11811, +34190=>11812, +34198=>11813, +34182=>11814, +34189=>11815, +34201=>11816, +34205=>11817, +34177=>11818, +34210=>11819, +34178=>11820, +34184=>11821, +34181=>11822, +34169=>11823, +34166=>11824, +34200=>11825, +34192=>11826, +34207=>11827, +34408=>11828, +34750=>11829, +34730=>11830, +34733=>11831, +34757=>11832, +34736=>11833, +34732=>11834, +34745=>11835, +34741=>11836, +34748=>11837, +34734=>11838, +34761=>11839, +34755=>11840, +34754=>11841, +34764=>11842, +34743=>11843, +34735=>11844, +34756=>11845, +34762=>11846, +34740=>11847, +34742=>11848, +34751=>11849, +34744=>11850, +34749=>11851, +34782=>11852, +34738=>11853, +35125=>11854, +35123=>11855, +35132=>11856, +35134=>11857, +35137=>11858, +35154=>11859, +35127=>11860, +35138=>11861, +35245=>11862, +35247=>11863, +35246=>11864, +35314=>11865, +35315=>11866, +35614=>11867, +35608=>11868, +35606=>11869, +35601=>11870, +35589=>11871, +35595=>11872, +35618=>11873, +35599=>11874, +35602=>11875, +35605=>11876, +35591=>11877, +35597=>11878, +35592=>11879, +35590=>11880, +35612=>11881, +35603=>11882, +35610=>11883, +35919=>11884, +35952=>11885, +35954=>11886, +35953=>11887, +35951=>11888, +35989=>11889, +35988=>11890, +36089=>11891, +36207=>11892, +36430=>11893, +36429=>11894, +36435=>11895, +36432=>11896, +36428=>11897, +36423=>11898, +36675=>11899, +36672=>11900, +36997=>11901, +36990=>11902, +37176=>11903, +37274=>11904, +37282=>11905, +37275=>11906, +37273=>11907, +37279=>11908, +37281=>11909, +37277=>11910, +37280=>11911, +37793=>11912, +37763=>11913, +37807=>11914, +37732=>11915, +37718=>11916, +37703=>11917, +37756=>11918, +37720=>11919, +37724=>11920, +37750=>11921, +37705=>11922, +37712=>11923, +37713=>11924, +37728=>11925, +37741=>11926, +37775=>11927, +37708=>11928, +37738=>11929, +37753=>11930, +37719=>11931, +37717=>11932, +37714=>11933, +37711=>11934, +37745=>11935, +37751=>11936, +37755=>11937, +37729=>11938, +37726=>11939, +37731=>11940, +37735=>11941, +37710=>11942, +37721=>11943, +38343=>11944, +38336=>11945, +38345=>11946, +38339=>11947, +38341=>11948, +38327=>11949, +38574=>11950, +38576=>11951, +38572=>11952, +38688=>11953, +38687=>11954, +38680=>11955, +38685=>11956, +38681=>11957, +38810=>11958, +38817=>11959, +38812=>11960, +38814=>11961, +38813=>11962, +38869=>11963, +38868=>11964, +38897=>11965, +38977=>11966, +38980=>11967, +38986=>11968, +38985=>11969, +38981=>11970, +38979=>11971, +39205=>11972, +39211=>11973, +39212=>11974, +39210=>11975, +39219=>11976, +39218=>11977, +39215=>11978, +39213=>11979, +39217=>11980, +39216=>11981, +39320=>11982, +39331=>11983, +39329=>11984, +39426=>11985, +39418=>11986, +39412=>11987, +39415=>11988, +39417=>11989, +39416=>11990, +39414=>11991, +39419=>11992, +39421=>11993, +39422=>11994, +39420=>11995, +39427=>11996, +39614=>11997, +39678=>11998, +39677=>11999, +39681=>12000, +39676=>12001, +39752=>12002, +39834=>12003, +39848=>12004, +39838=>12005, +39835=>12006, +39846=>12007, +39841=>12008, +39845=>12009, +39844=>12010, +39814=>12011, +39842=>12012, +39840=>12013, +39855=>12014, +40243=>12015, +40257=>12016, +40295=>12017, +40246=>12018, +40238=>12019, +40239=>12020, +40241=>12021, +40248=>12022, +40240=>12023, +40261=>12024, +40258=>12025, +40259=>12026, +40254=>12027, +40247=>12028, +40256=>12029, +40253=>12030, +32757=>12031, +40237=>12032, +40586=>12033, +40585=>12034, +40589=>12035, +40624=>12036, +40648=>12037, +40666=>12038, +40699=>12039, +40703=>12040, +40740=>12041, +40739=>12042, +40738=>12043, +40788=>12044, +12245=>12045, +40864=>12045, +20785=>12046, +20781=>12047, +20782=>12048, +22168=>12049, +22172=>12050, +22167=>12051, +22170=>12052, +22173=>12053, +22169=>12054, +22896=>12055, +23356=>12056, +23657=>12057, +23658=>12058, +24000=>12059, +24173=>12060, +24174=>12061, +25048=>12062, +25055=>12063, +25069=>12064, +25070=>12065, +25073=>12066, +25066=>12067, +25072=>12068, +25067=>12069, +25046=>12070, +25065=>12071, +25855=>12072, +25860=>12073, +25853=>12074, +25848=>12075, +25857=>12076, +25859=>12077, +25852=>12078, +26004=>12079, +26075=>12080, +26330=>12081, +26331=>12082, +26328=>12083, +27333=>12084, +27321=>12085, +27325=>12086, +27361=>12087, +27334=>12088, +27322=>12089, +27318=>12090, +27319=>12091, +27335=>12092, +27316=>12093, +27309=>12094, +27486=>12095, +27593=>12096, +27659=>12097, +28679=>12098, +28684=>12099, +28685=>12100, +28673=>12101, +28677=>12102, +28692=>12103, +28686=>12104, +28671=>12105, +28672=>12106, +28667=>12107, +28710=>12108, +28668=>12109, +28663=>12110, +28682=>12111, +29185=>12112, +60224=>12112, +29183=>12113, +29177=>12114, +29187=>12115, +29181=>12116, +29558=>12117, +29880=>12118, +29888=>12119, +29877=>12120, +29889=>12121, +29886=>12122, +29878=>12123, +29883=>12124, +29890=>12125, +29972=>12126, +29971=>12127, +30300=>12128, +30308=>12129, +30297=>12130, +30288=>12131, +30291=>12132, +30295=>12133, +30298=>12134, +30374=>12135, +30397=>12136, +30444=>12137, +30658=>12138, +30650=>12139, +30988=>12140, +30995=>12141, +30996=>12142, +30985=>12143, +30992=>12144, +30994=>12145, +30993=>12146, +31149=>12147, +31148=>12148, +31327=>12149, +31772=>12150, +31785=>12151, +31769=>12152, +31776=>12153, +31775=>12154, +31789=>12155, +31773=>12156, +31782=>12157, +31784=>12158, +31778=>12159, +31781=>12160, +31792=>12161, +32348=>12162, +32336=>12163, +32342=>12164, +32355=>12165, +32344=>12166, +32354=>12167, +32351=>12168, +32337=>12169, +32352=>12170, +32343=>12171, +32339=>12172, +32693=>12173, +32691=>12174, +32759=>12175, +32760=>12176, +32885=>12177, +33233=>12178, +33234=>12179, +33232=>12180, +33375=>12181, +33374=>12182, +34228=>12183, +34246=>12184, +34240=>12185, +34243=>12186, +34242=>12187, +34227=>12188, +34229=>12189, +34237=>12190, +34247=>12191, +34244=>12192, +34239=>12193, +34251=>12194, +34254=>12195, +34248=>12196, +34245=>12197, +34225=>12198, +34230=>12199, +34258=>12200, +34340=>12201, +34232=>12202, +34231=>12203, +34238=>12204, +34409=>12205, +34791=>12206, +34790=>12207, +34786=>12208, +34779=>12209, +34795=>12210, +34794=>12211, +34789=>12212, +34783=>12213, +34803=>12214, +34788=>12215, +34772=>12216, +34780=>12217, +34771=>12218, +34797=>12219, +34776=>12220, +34787=>12221, +34775=>12222, +34777=>12223, +34817=>12224, +34804=>12225, +34792=>12226, +34781=>12227, +35155=>12228, +35147=>12229, +35151=>12230, +35148=>12231, +35142=>12232, +35152=>12233, +35153=>12234, +35145=>12235, +35626=>12236, +35623=>12237, +35619=>12238, +35635=>12239, +35632=>12240, +35637=>12241, +35655=>12242, +35631=>12243, +35644=>12244, +35646=>12245, +35633=>12246, +35621=>12247, +35639=>12248, +35622=>12249, +35638=>12250, +35630=>12251, +35620=>12252, +35643=>12253, +35645=>12254, +35642=>12255, +35906=>12256, +35957=>12257, +35993=>12258, +35992=>12259, +35991=>12260, +36094=>12261, +36100=>12262, +36098=>12263, +36096=>12264, +36444=>12265, +36450=>12266, +36448=>12267, +36439=>12268, +36438=>12269, +36446=>12270, +36453=>12271, +36455=>12272, +36443=>12273, +36442=>12274, +36449=>12275, +36445=>12276, +36457=>12277, +36436=>12278, +36678=>12279, +36679=>12280, +36680=>12281, +36683=>12282, +37160=>12283, +37178=>12284, +37179=>12285, +37182=>12286, +37288=>12287, +37285=>12288, +37287=>12289, +37295=>12290, +37290=>12291, +37813=>12292, +37772=>12293, +37778=>12294, +37815=>12295, +37787=>12296, +37789=>12297, +37769=>12298, +37799=>12299, +37774=>12300, +37802=>12301, +37790=>12302, +37798=>12303, +37781=>12304, +37768=>12305, +37785=>12306, +37791=>12307, +37760=>12308, +37773=>12309, +37809=>12310, +37777=>12311, +37810=>12312, +37796=>12313, +37800=>12314, +37812=>12315, +37795=>12316, +38354=>12317, +38355=>12318, +38353=>12319, +38579=>12320, +38615=>12321, +38618=>12322, +24002=>12323, +38623=>12324, +38616=>12325, +38621=>12326, +38691=>12327, +38690=>12328, +38693=>12329, +38828=>12330, +38830=>12331, +38824=>12332, +38827=>12333, +38820=>12334, +38826=>12335, +38818=>12336, +38821=>12337, +38871=>12338, +38873=>12339, +38870=>12340, +38872=>12341, +38906=>12342, +38992=>12343, +38993=>12344, +38994=>12345, +39096=>12346, +39233=>12347, +39228=>12348, +39226=>12349, +39439=>12350, +39435=>12351, +39433=>12352, +39437=>12353, +39428=>12354, +39441=>12355, +39434=>12356, +39429=>12357, +39431=>12358, +39430=>12359, +39616=>12360, +39644=>12361, +39688=>12362, +39684=>12363, +39685=>12364, +39721=>12365, +39733=>12366, +39754=>12367, +39756=>12368, +39755=>12369, +39879=>12370, +39878=>12371, +39875=>12372, +39871=>12373, +39873=>12374, +39861=>12375, +39864=>12376, +39891=>12377, +39862=>12378, +39876=>12379, +39865=>12380, +39869=>12381, +40284=>12382, +40275=>12383, +40271=>12384, +40266=>12385, +40283=>12386, +40267=>12387, +40281=>12388, +40278=>12389, +40268=>12390, +40279=>12391, +40274=>12392, +40276=>12393, +40287=>12394, +40280=>12395, +40282=>12396, +40590=>12397, +40588=>12398, +40671=>12399, +40705=>12400, +40704=>12401, +40726=>12402, +58693=>12402, +40741=>12403, +40747=>12404, +40746=>12405, +40745=>12406, +40744=>12407, +40780=>12408, +40789=>12409, +20788=>12410, +20789=>12411, +21142=>12412, +21239=>12413, +21428=>12414, +22187=>12415, +22189=>12416, +22182=>12417, +22183=>12418, +22186=>12419, +22188=>12420, +22746=>12421, +22749=>12422, +22747=>12423, +22802=>12424, +23357=>12425, +23358=>12426, +23359=>12427, +24003=>12428, +24176=>12429, +24511=>12430, +25083=>12431, +25863=>12432, +25872=>12433, +25869=>12434, +25865=>12435, +25868=>12436, +25870=>12437, +25988=>12438, +26078=>12439, +26077=>12440, +26334=>12441, +27367=>12442, +27360=>12443, +27340=>12444, +27345=>12445, +27353=>12446, +27339=>12447, +27359=>12448, +27356=>12449, +27344=>12450, +27371=>12451, +27343=>12452, +27341=>12453, +27358=>12454, +27488=>12455, +27568=>12456, +27660=>12457, +28697=>12458, +28711=>12459, +28704=>12460, +28694=>12461, +28715=>12462, +28705=>12463, +28706=>12464, +28707=>12465, +28713=>12466, +28695=>12467, +28708=>12468, +28700=>12469, +29196=>12470, +29194=>12471, +29191=>12472, +29186=>12473, +29189=>12474, +29349=>12475, +29350=>12476, +29348=>12477, +29347=>12478, +29345=>12479, +29899=>12480, +29893=>12481, +29879=>12482, +29891=>12483, +29974=>12484, +30304=>12485, +30665=>12486, +30666=>12487, +30660=>12488, +30705=>12489, +31005=>12490, +31003=>12491, +31009=>12492, +31004=>12493, +30999=>12494, +31006=>12495, +31152=>12496, +31335=>12497, +31336=>12498, +31795=>12499, +31804=>12500, +31801=>12501, +31788=>12502, +31803=>12503, +31980=>12504, +31978=>12505, +32374=>12506, +32373=>12507, +32376=>12508, +32368=>12509, +32375=>12510, +32367=>12511, +32378=>12512, +32370=>12513, +32372=>12514, +32360=>12515, +32587=>12516, +32586=>12517, +32643=>12518, +32646=>12519, +32695=>12520, +32765=>12521, +32766=>12522, +32888=>12523, +33239=>12524, +33237=>12525, +33291=>12526, +33380=>12527, +33377=>12528, +33379=>12529, +34283=>12530, +34289=>12531, +34285=>12532, +34265=>12533, +34273=>12534, +34280=>12535, +34266=>12536, +34263=>12537, +34284=>12538, +34290=>12539, +34296=>12540, +34264=>12541, +34271=>12542, +34275=>12543, +34268=>12544, +34257=>12545, +34288=>12546, +34278=>12547, +34287=>12548, +34270=>12549, +34274=>12550, +34816=>12551, +34810=>12552, +34819=>12553, +34806=>12554, +34807=>12555, +34825=>12556, +34828=>12557, +34827=>12558, +34822=>12559, +34812=>12560, +34824=>12561, +34815=>12562, +34826=>12563, +34818=>12564, +35170=>12565, +35162=>12566, +35163=>12567, +35159=>12568, +35169=>12569, +35164=>12570, +35160=>12571, +35165=>12572, +35161=>12573, +35208=>12574, +35255=>12575, +35254=>12576, +35318=>12577, +35664=>12578, +35656=>12579, +35658=>12580, +35648=>12581, +35667=>12582, +35670=>12583, +35668=>12584, +35659=>12585, +35669=>12586, +35665=>12587, +35650=>12588, +35666=>12589, +35671=>12590, +35907=>12591, +35959=>12592, +35958=>12593, +35994=>12594, +36102=>12595, +36103=>12596, +36105=>12597, +36268=>12598, +36266=>12599, +36269=>12600, +36267=>12601, +36461=>12602, +36472=>12603, +36467=>12604, +36458=>12605, +36463=>12606, +36475=>12607, +36546=>12608, +36690=>12609, +36689=>12610, +36687=>12611, +36688=>12612, +36691=>12613, +36788=>12614, +37184=>12615, +37183=>12616, +37296=>12617, +37293=>12618, +37854=>12619, +37831=>12620, +37839=>12621, +37826=>12622, +37850=>12623, +37840=>12624, +37881=>12625, +37868=>12626, +37836=>12627, +37849=>12628, +37801=>12629, +37862=>12630, +37834=>12631, +37844=>12632, +37870=>12633, +37859=>12634, +37845=>12635, +37828=>12636, +37838=>12637, +37824=>12638, +37842=>12639, +37797=>12640, +37863=>12641, +38269=>12642, +38362=>12643, +38363=>12644, +38625=>12645, +38697=>12646, +38699=>12647, +38700=>12648, +38696=>12649, +38694=>12650, +38835=>12651, +38839=>12652, +38838=>12653, +38877=>12654, +38878=>12655, +38879=>12656, +39004=>12657, +39001=>12658, +39005=>12659, +38999=>12660, +39103=>12661, +39101=>12662, +39099=>12663, +39102=>12664, +39240=>12665, +39239=>12666, +39235=>12667, +39334=>12668, +39335=>12669, +39450=>12670, +39445=>12671, +39461=>12672, +39453=>12673, +39460=>12674, +39451=>12675, +39458=>12676, +39456=>12677, +39463=>12678, +39459=>12679, +39454=>12680, +39452=>12681, +39444=>12682, +39618=>12683, +39691=>12684, +39690=>12685, +39694=>12686, +39692=>12687, +39735=>12688, +39914=>12689, +39915=>12690, +39904=>12691, +39902=>12692, +39908=>12693, +39910=>12694, +39906=>12695, +39920=>12696, +39892=>12697, +39895=>12698, +39916=>12699, +39900=>12700, +39897=>12701, +39909=>12702, +39893=>12703, +39905=>12704, +39898=>12705, +40311=>12706, +40321=>12707, +40330=>12708, +40324=>12709, +40328=>12710, +40305=>12711, +40320=>12712, +40312=>12713, +40326=>12714, +40331=>12715, +40332=>12716, +40317=>12717, +40299=>12718, +40308=>12719, +40309=>12720, +40304=>12721, +40297=>12722, +40325=>12723, +40307=>12724, +40315=>12725, +40322=>12726, +40303=>12727, +40313=>12728, +40319=>12729, +40327=>12730, +40296=>12731, +40596=>12732, +40593=>12733, +40640=>12734, +40700=>12735, +40749=>12736, +40768=>12737, +40769=>12738, +40781=>12739, +40790=>12740, +40791=>12741, +40792=>12742, +21303=>12743, +22194=>12744, +22197=>12745, +22195=>12746, +22755=>12747, +23365=>12748, +24006=>12749, +24007=>12750, +24302=>12751, +24303=>12752, +24512=>12753, +24513=>12754, +25081=>12755, +25879=>12756, +25878=>12757, +25877=>12758, +25875=>12759, +26079=>12760, +26344=>12761, +26339=>12762, +26340=>12763, +27379=>12764, +27376=>12765, +27370=>12766, +27368=>12767, +27385=>12768, +27377=>12769, +27374=>12770, +27375=>12771, +28732=>12772, +28725=>12773, +28719=>12774, +28727=>12775, +28724=>12776, +28721=>12777, +28738=>12778, +28728=>12779, +28735=>12780, +28730=>12781, +28729=>12782, +28714=>12783, +28736=>12784, +28731=>12785, +28723=>12786, +28737=>12787, +29203=>12788, +29204=>12789, +29352=>12790, +29565=>12791, +29564=>12792, +29882=>12793, +30379=>12794, +30378=>12795, +30398=>12796, +30445=>12797, +30668=>12798, +30670=>12799, +30671=>12800, +30669=>12801, +30706=>12802, +31013=>12803, +31011=>12804, +31015=>12805, +31016=>12806, +31012=>12807, +31017=>12808, +31154=>12809, +31342=>12810, +31340=>12811, +31341=>12812, +31479=>12813, +31817=>12814, +31816=>12815, +31818=>12816, +31815=>12817, +31813=>12818, +31982=>12819, +32379=>12820, +32382=>12821, +32385=>12822, +32384=>12823, +32698=>12824, +32767=>12825, +32889=>12826, +33243=>12827, +33241=>12828, +33384=>12829, +33385=>12830, +34338=>12831, +34303=>12832, +34305=>12833, +34302=>12834, +34331=>12835, +34304=>12836, +34294=>12837, +34308=>12838, +34313=>12839, +34309=>12840, +34316=>12841, +34301=>12842, +34841=>12843, +34832=>12844, +34833=>12845, +34839=>12846, +34835=>12847, +34838=>12848, +35171=>12849, +35174=>12850, +35257=>12851, +35319=>12852, +35680=>12853, +35690=>12854, +35677=>12855, +35688=>12856, +35683=>12857, +35685=>12858, +35687=>12859, +35693=>12860, +36270=>12861, +36486=>12862, +36488=>12863, +36484=>12864, +36697=>12865, +36694=>12866, +36695=>12867, +36693=>12868, +36696=>12869, +36698=>12870, +37005=>12871, +37187=>12872, +37185=>12873, +37303=>12874, +37301=>12875, +37298=>12876, +37299=>12877, +37899=>12878, +37907=>12879, +37883=>12880, +37920=>12881, +37903=>12882, +37908=>12883, +37886=>12884, +37909=>12885, +37904=>12886, +37928=>12887, +37913=>12888, +37901=>12889, +37877=>12890, +37888=>12891, +37879=>12892, +37895=>12893, +37902=>12894, +37910=>12895, +37906=>12896, +37882=>12897, +37897=>12898, +37880=>12899, +37948=>12900, +37898=>12901, +37887=>12902, +37884=>12903, +37900=>12904, +37878=>12905, +37905=>12906, +37894=>12907, +38366=>12908, +38368=>12909, +38367=>12910, +38702=>12911, +38703=>12912, +38841=>12913, +38843=>12914, +38909=>12915, +38910=>12916, +39008=>12917, +39010=>12918, +39011=>12919, +39007=>12920, +39105=>12921, +39106=>12922, +39248=>12923, +39246=>12924, +39257=>12925, +39244=>12926, +39243=>12927, +39251=>12928, +39474=>12929, +39476=>12930, +39473=>12931, +39468=>12932, +39466=>12933, +39478=>12934, +39465=>12935, +39470=>12936, +39480=>12937, +39469=>12938, +39623=>12939, +39626=>12940, +39622=>12941, +39696=>12942, +39698=>12943, +39697=>12944, +39947=>12945, +39944=>12946, +39927=>12947, +39941=>12948, +39954=>12949, +39928=>12950, +40000=>12951, +39943=>12952, +39950=>12953, +39942=>12954, +39959=>12955, +39956=>12956, +39945=>12957, +40351=>12958, +40345=>12959, +40356=>12960, +40349=>12961, +40338=>12962, +40344=>12963, +40336=>12964, +40347=>12965, +40352=>12966, +40340=>12967, +40348=>12968, +40362=>12969, +40343=>12970, +40353=>12971, +40346=>12972, +40354=>12973, +40360=>12974, +40350=>12975, +40355=>12976, +40383=>12977, +40361=>12978, +40342=>12979, +40358=>12980, +40359=>12981, +40601=>12982, +40603=>12983, +40602=>12984, +40677=>12985, +40676=>12986, +40679=>12987, +40678=>12988, +40752=>12989, +40750=>12990, +40795=>12991, +40800=>12992, +40798=>12993, +40797=>12994, +40793=>12995, +40849=>12996, +20794=>12997, +20793=>12998, +21144=>12999, +21143=>13000, +22211=>13001, +22205=>13002, +22206=>13003, +23368=>13004, +23367=>13005, +24011=>13006, +24015=>13007, +24305=>13008, +25085=>13009, +25883=>13010, +27394=>13011, +27388=>13012, +27395=>13013, +27384=>13014, +27392=>13015, +28739=>13016, +28740=>13017, +28746=>13018, +28744=>13019, +28745=>13020, +28741=>13021, +28742=>13022, +29213=>13023, +29210=>13024, +29209=>13025, +29566=>13026, +29975=>13027, +30314=>13028, +30672=>13029, +31021=>13030, +31025=>13031, +31023=>13032, +31828=>13033, +31827=>13034, +31986=>13035, +32394=>13036, +60229=>13037, +32391=>13037, +32392=>13038, +32395=>13039, +32390=>13040, +32397=>13041, +32589=>13042, +32699=>13043, +32816=>13044, +33245=>13045, +34328=>13046, +34346=>13047, +34342=>13048, +34335=>13049, +34339=>13050, +34332=>13051, +34329=>13052, +34343=>13053, +34350=>13054, +34337=>13055, +34336=>13056, +34345=>13057, +34334=>13058, +34341=>13059, +34857=>13060, +34845=>13061, +34843=>13062, +34848=>13063, +34852=>13064, +34844=>13065, +34859=>13066, +34890=>13067, +35181=>13068, +35177=>13069, +35182=>13070, +35179=>13071, +35322=>13072, +35705=>13073, +35704=>13074, +35653=>13075, +35706=>13076, +35707=>13077, +36112=>13078, +36116=>13079, +36271=>13080, +36494=>13081, +36492=>13082, +36702=>13083, +36699=>13084, +36701=>13085, +37190=>13086, +37188=>13087, +37189=>13088, +37305=>13089, +37951=>13090, +37947=>13091, +37942=>13092, +37929=>13093, +37949=>13094, +37936=>13095, +37945=>13096, +37930=>13097, +37943=>13098, +37932=>13099, +37952=>13100, +37937=>13101, +38373=>13102, +38372=>13103, +38371=>13104, +38709=>13105, +38714=>13106, +38847=>13107, +38881=>13108, +39012=>13109, +39113=>13110, +39110=>13111, +39104=>13112, +39256=>13113, +39254=>13114, +39481=>13115, +39485=>13116, +39494=>13117, +39492=>13118, +39490=>13119, +39489=>13120, +39482=>13121, +39487=>13122, +39629=>13123, +39701=>13124, +39703=>13125, +39704=>13126, +39702=>13127, +39738=>13128, +39762=>13129, +39979=>13130, +39965=>13131, +39964=>13132, +39980=>13133, +39971=>13134, +39976=>13135, +39977=>13136, +39972=>13137, +39969=>13138, +40375=>13139, +40374=>13140, +40380=>13141, +40385=>13142, +40391=>13143, +40394=>13144, +40399=>13145, +40382=>13146, +40389=>13147, +40387=>13148, +40379=>13149, +40373=>13150, +40398=>13151, +40377=>13152, +40378=>13153, +40364=>13154, +40392=>13155, +40369=>13156, +40365=>13157, +40396=>13158, +40371=>13159, +40397=>13160, +40370=>13161, +40570=>13162, +40604=>13163, +40683=>13164, +40686=>13165, +40685=>13166, +40731=>13167, +40728=>13168, +40730=>13169, +40753=>13170, +40782=>13171, +40805=>13172, +40804=>13173, +40850=>13174, +20153=>13175, +22214=>13176, +22213=>13177, +22219=>13178, +22897=>13179, +23371=>13180, +23372=>13181, +24021=>13182, +24017=>13183, +24306=>13184, +25889=>13185, +25888=>13186, +25894=>13187, +25890=>13188, +27403=>13189, +27400=>13190, +27401=>13191, +27661=>13192, +28757=>13193, +28758=>13194, +28759=>13195, +28754=>13196, +29214=>13197, +29215=>13198, +29353=>13199, +29567=>13200, +29912=>13201, +29909=>13202, +29913=>13203, +29911=>13204, +30317=>13205, +30381=>13206, +31029=>13207, +31156=>13208, +31344=>13209, +31345=>13210, +31831=>13211, +31836=>13212, +31833=>13213, +31835=>13214, +31834=>13215, +31988=>13216, +31985=>13217, +32401=>13218, +32591=>13219, +32647=>13220, +33246=>13221, +33387=>13222, +34356=>13223, +34357=>13224, +34355=>13225, +34348=>13226, +34354=>13227, +34358=>13228, +34860=>13229, +34856=>13230, +34854=>13231, +34858=>13232, +34853=>13233, +35185=>13234, +35263=>13235, +35262=>13236, +35323=>13237, +35710=>13238, +35716=>13239, +35714=>13240, +35718=>13241, +35717=>13242, +35711=>13243, +36117=>13244, +36501=>13245, +36500=>13246, +36506=>13247, +36498=>13248, +36496=>13249, +36502=>13250, +36503=>13251, +36704=>13252, +36706=>13253, +37191=>13254, +37964=>13255, +37968=>13256, +37962=>13257, +37963=>13258, +37967=>13259, +37959=>13260, +37957=>13261, +37960=>13262, +37961=>13263, +37958=>13264, +38719=>13265, +38883=>13266, +39018=>13267, +39017=>13268, +39115=>13269, +39252=>13270, +39259=>13271, +39502=>13272, +39507=>13273, +39508=>13274, +39500=>13275, +39503=>13276, +39496=>13277, +39498=>13278, +39497=>13279, +39506=>13280, +39504=>13281, +39632=>13282, +39705=>13283, +39723=>13284, +39739=>13285, +39766=>13286, +39765=>13287, +40006=>13288, +40008=>13289, +39999=>13290, +40004=>13291, +39993=>13292, +39987=>13293, +40001=>13294, +39996=>13295, +39991=>13296, +39988=>13297, +39986=>13298, +39997=>13299, +39990=>13300, +40411=>13301, +40402=>13302, +40414=>13303, +40410=>13304, +40395=>13305, +40400=>13306, +40412=>13307, +40401=>13308, +40415=>13309, +40425=>13310, +40409=>13311, +40408=>13312, +40406=>13313, +40437=>13314, +40405=>13315, +40413=>13316, +40630=>13317, +40688=>13318, +40757=>13319, +40755=>13320, +40754=>13321, +40770=>13322, +40811=>13323, +40853=>13324, +40866=>13325, +20797=>13326, +21145=>13327, +22760=>13328, +22759=>13329, +22898=>13330, +23373=>13331, +24024=>13332, +34863=>13333, +24399=>13334, +25089=>13335, +25091=>13336, +25092=>13337, +25897=>13338, +25893=>13339, +26006=>13340, +26347=>13341, +27409=>13342, +27410=>13343, +27407=>13344, +27594=>13345, +28763=>13346, +28762=>13347, +29218=>13348, +29570=>13349, +29569=>13350, +29571=>13351, +30320=>13352, +30676=>13353, +31847=>13354, +31846=>13355, +32405=>13356, +33388=>13357, +34362=>13358, +34368=>13359, +34361=>13360, +34364=>13361, +34353=>13362, +34363=>13363, +34366=>13364, +34864=>13365, +34866=>13366, +34862=>13367, +34867=>13368, +35190=>13369, +35188=>13370, +35187=>13371, +35326=>13372, +35724=>13373, +35726=>13374, +35723=>13375, +35720=>13376, +35909=>13377, +36121=>13378, +36504=>13379, +36708=>13380, +36707=>13381, +37308=>13382, +37986=>13383, +37973=>13384, +37981=>13385, +37975=>13386, +37982=>13387, +38852=>13388, +38853=>13389, +38912=>13390, +39510=>13391, +39513=>13392, +39710=>13393, +39711=>13394, +39712=>13395, +40018=>13396, +40024=>13397, +40016=>13398, +40010=>13399, +40013=>13400, +40011=>13401, +40021=>13402, +40025=>13403, +40012=>13404, +40014=>13405, +40443=>13406, +40439=>13407, +40431=>13408, +40419=>13409, +40427=>13410, +40440=>13411, +40420=>13412, +40438=>13413, +40417=>13414, +40430=>13415, +40422=>13416, +40434=>13417, +40432=>13418, +60370=>13418, +40418=>13419, +40428=>13420, +40436=>13421, +40435=>13422, +40424=>13423, +40429=>13424, +40642=>13425, +40656=>13426, +40690=>13427, +40691=>13428, +40710=>13429, +40732=>13430, +40760=>13431, +40759=>13432, +40758=>13433, +40771=>13434, +40783=>13435, +40817=>13436, +40816=>13437, +40814=>13438, +40815=>13439, +22227=>13440, +22221=>13441, +23374=>13442, +23661=>13443, +25901=>13444, +26349=>13445, +26350=>13446, +27411=>13447, +28767=>13448, +28769=>13449, +28765=>13450, +28768=>13451, +29219=>13452, +29915=>13453, +29925=>13454, +30677=>13455, +31032=>13456, +31159=>13457, +31158=>13458, +31850=>13459, +32407=>13460, +32649=>13461, +33389=>13462, +34371=>13463, +34872=>13464, +34871=>13465, +34869=>13466, +34891=>13467, +35732=>13468, +35733=>13469, +36510=>13470, +36511=>13471, +36512=>13472, +36509=>13473, +37310=>13474, +37309=>13475, +37314=>13476, +37995=>13477, +37992=>13478, +37993=>13479, +38629=>13480, +38726=>13481, +38723=>13482, +38727=>13483, +38855=>13484, +38885=>13485, +39518=>13486, +39637=>13487, +39769=>13488, +40035=>13489, +40039=>13490, +40038=>13491, +40034=>13492, +40030=>13493, +40032=>13494, +40450=>13495, +40446=>13496, +40455=>13497, +40451=>13498, +40454=>13499, +40453=>13500, +40448=>13501, +40449=>13502, +40457=>13503, +40447=>13504, +40445=>13505, +40452=>13506, +40608=>13507, +40734=>13508, +40774=>13509, +40820=>13510, +40821=>13511, +40822=>13512, +22228=>13513, +25902=>13514, +26040=>13515, +27416=>13516, +27417=>13517, +27415=>13518, +27418=>13519, +28770=>13520, +29222=>13521, +29354=>13522, +30680=>13523, +30681=>13524, +31033=>13525, +31849=>13526, +31851=>13527, +31990=>13528, +32410=>13529, +32408=>13530, +32411=>13531, +32409=>13532, +33248=>13533, +33249=>13534, +34374=>13535, +34375=>13536, +34376=>13537, +35193=>13538, +35194=>13539, +35196=>13540, +35195=>13541, +35327=>13542, +35736=>13543, +35737=>13544, +36517=>13545, +36516=>13546, +36515=>13547, +37998=>13548, +37997=>13549, +37999=>13550, +38001=>13551, +38003=>13552, +38729=>13553, +39026=>13554, +39263=>13555, +40040=>13556, +40046=>13557, +40045=>13558, +40459=>13559, +40461=>13560, +40464=>13561, +40463=>13562, +40466=>13563, +40465=>13564, +40609=>13565, +40693=>13566, +40713=>13567, +40775=>13568, +40824=>13569, +40827=>13570, +40826=>13571, +40825=>13572, +22302=>13573, +28774=>13574, +31855=>13575, +34876=>13576, +36274=>13577, +36518=>13578, +37315=>13579, +38004=>13580, +38008=>13581, +38006=>13582, +38005=>13583, +39520=>13584, +39726=>13585, +60830=>13585, +40052=>13586, +40051=>13587, +40049=>13588, +40053=>13589, +40468=>13590, +40467=>13591, +40694=>13592, +40714=>13593, +40868=>13594, +28776=>13595, +28773=>13596, +31991=>13597, +34410=>13598, +34878=>13599, +34877=>13600, +34879=>13601, +35742=>13602, +35996=>13603, +36521=>13604, +36553=>13605, +38731=>13606, +39027=>13607, +39028=>13608, +39116=>13609, +39265=>13610, +39339=>13611, +39524=>13612, +39526=>13613, +39527=>13614, +39716=>13615, +40469=>13616, +40471=>13617, +40776=>13618, +25095=>13619, +27422=>13620, +29223=>13621, +34380=>13622, +36520=>13623, +38018=>13624, +38016=>13625, +38017=>13626, +39529=>13627, +39528=>13628, +40473=>13629, +34379=>13630, +35743=>13631, +38019=>13632, +40057=>13633, +40631=>13634, +30325=>13635, +39531=>13636, +40058=>13637, +40477=>13638, +28777=>13639, +28778=>13640, +29225=>13641, +40612=>13642, +40830=>13643, +40777=>13644, +40856=>13645, +65049=>13646, +65075=>13743, +9588=>13744, +65076=>13745, +65103=>13746, +168=>13747, +776=>13747, +63208=>13747, +710=>13748, +65342=>13748, +63209=>13748, +12541=>13749, +63210=>13749, +12542=>13750, +63211=>13750, +12445=>13751, +63212=>13751, +12446=>13752, +63213=>13752, +12293=>13754, +63216=>13754, +12294=>13755, +63217=>13755, +12295=>13756, +63218=>13756, +12540=>13757, +63219=>13757, +65339=>13758, +63220=>13758, +65341=>13759, +63221=>13759, +10045=>13760, +63222=>13760, +12353=>13761, +63223=>13761, +12354=>13762, +63224=>13762, +12355=>13763, +63225=>13763, +12356=>13764, +63226=>13764, +12357=>13765, +63227=>13765, +12358=>13766, +63228=>13766, +12359=>13767, +63229=>13767, +12360=>13768, +63230=>13768, +12361=>13769, +63231=>13769, +12362=>13770, +63232=>13770, +12363=>13771, +63233=>13771, +12364=>13772, +63234=>13772, +12365=>13773, +63235=>13773, +12366=>13774, +63236=>13774, +12367=>13775, +63237=>13775, +12368=>13776, +63238=>13776, +12369=>13777, +63239=>13777, +12370=>13778, +63240=>13778, +12371=>13779, +63241=>13779, +12372=>13780, +63242=>13780, +12373=>13781, +63243=>13781, +12374=>13782, +63244=>13782, +12375=>13783, +63245=>13783, +12376=>13784, +63246=>13784, +12377=>13785, +63247=>13785, +12378=>13786, +63248=>13786, +12379=>13787, +63249=>13787, +12380=>13788, +63250=>13788, +12381=>13789, +63251=>13789, +12382=>13790, +63252=>13790, +12383=>13791, +63253=>13791, +12384=>13792, +63254=>13792, +12385=>13793, +63255=>13793, +12386=>13794, +63256=>13794, +12387=>13795, +63257=>13795, +12388=>13796, +63258=>13796, +12389=>13797, +63259=>13797, +12390=>13798, +63260=>13798, +12391=>13799, +63261=>13799, +12392=>13800, +63262=>13800, +12393=>13801, +63263=>13801, +12394=>13802, +63264=>13802, +12395=>13803, +63265=>13803, +12396=>13804, +63266=>13804, +12397=>13805, +63267=>13805, +12398=>13806, +63268=>13806, +12399=>13807, +63269=>13807, +12400=>13808, +63270=>13808, +12401=>13809, +63271=>13809, +12402=>13810, +63272=>13810, +12403=>13811, +63273=>13811, +12404=>13812, +63274=>13812, +12405=>13813, +63275=>13813, +12406=>13814, +63276=>13814, +12407=>13815, +63277=>13815, +12408=>13816, +63278=>13816, +12409=>13817, +63279=>13817, +12410=>13818, +63280=>13818, +12411=>13819, +63281=>13819, +12412=>13820, +63282=>13820, +12413=>13821, +63283=>13821, +12414=>13822, +63284=>13822, +12415=>13823, +63285=>13823, +12416=>13824, +63286=>13824, +12417=>13825, +63287=>13825, +12418=>13826, +63288=>13826, +12419=>13827, +63289=>13827, +12420=>13828, +63290=>13828, +12421=>13829, +63291=>13829, +12422=>13830, +63292=>13830, +12423=>13831, +63293=>13831, +12424=>13832, +63294=>13832, +12425=>13833, +63295=>13833, +12426=>13834, +63296=>13834, +12427=>13835, +63297=>13835, +12428=>13836, +63298=>13836, +12429=>13837, +63299=>13837, +12430=>13838, +63300=>13838, +12431=>13839, +63301=>13839, +12432=>13840, +63302=>13840, +12433=>13841, +63303=>13841, +12434=>13842, +63304=>13842, +12435=>13843, +63305=>13843, +12449=>13844, +63306=>13844, +12450=>13845, +63307=>13845, +12451=>13846, +63308=>13846, +12452=>13847, +63309=>13847, +12453=>13848, +63310=>13848, +12454=>13849, +63311=>13849, +12455=>13850, +63312=>13850, +12456=>13851, +63313=>13851, +12457=>13852, +63314=>13852, +12458=>13853, +63315=>13853, +12459=>13854, +63316=>13854, +12460=>13855, +63317=>13855, +12461=>13856, +63318=>13856, +12462=>13857, +63319=>13857, +12463=>13858, +63320=>13858, +12464=>13859, +63321=>13859, +12465=>13860, +63322=>13860, +12466=>13861, +63323=>13861, +12467=>13862, +63324=>13862, +12468=>13863, +63325=>13863, +12469=>13864, +63326=>13864, +12470=>13865, +63327=>13865, +12471=>13866, +63328=>13866, +12472=>13867, +63329=>13867, +12473=>13868, +63330=>13868, +12474=>13869, +63331=>13869, +12475=>13870, +63332=>13870, +12476=>13871, +63333=>13871, +12477=>13872, +63334=>13872, +12478=>13873, +63335=>13873, +12479=>13874, +63336=>13874, +12480=>13875, +63337=>13875, +12481=>13876, +63338=>13876, +12482=>13877, +63339=>13877, +12483=>13878, +63340=>13878, +12484=>13879, +63341=>13879, +12485=>13880, +63342=>13880, +12486=>13881, +63343=>13881, +12487=>13882, +63344=>13882, +12488=>13883, +63345=>13883, +12489=>13884, +63346=>13884, +12490=>13885, +63347=>13885, +12491=>13886, +63348=>13886, +12492=>13887, +63349=>13887, +12493=>13888, +63350=>13888, +12494=>13889, +63351=>13889, +12495=>13890, +63352=>13890, +12496=>13891, +63353=>13891, +12497=>13892, +63354=>13892, +12498=>13893, +63355=>13893, +12499=>13894, +63356=>13894, +12500=>13895, +63357=>13895, +12501=>13896, +63358=>13896, +12502=>13897, +63359=>13897, +12503=>13898, +63360=>13898, +12504=>13899, +63361=>13899, +12505=>13900, +63362=>13900, +12506=>13901, +63363=>13901, +12507=>13902, +63364=>13902, +12508=>13903, +63365=>13903, +12509=>13904, +63366=>13904, +12510=>13905, +63367=>13905, +12511=>13906, +63368=>13906, +12512=>13907, +63369=>13907, +12513=>13908, +63370=>13908, +12514=>13909, +63371=>13909, +12515=>13910, +63372=>13910, +12516=>13911, +63373=>13911, +12517=>13912, +63374=>13912, +12518=>13913, +63375=>13913, +12519=>13914, +63376=>13914, +12520=>13915, +63377=>13915, +12521=>13916, +63378=>13916, +12522=>13917, +63379=>13917, +12523=>13918, +63380=>13918, +12524=>13919, +63381=>13919, +12525=>13920, +63382=>13920, +12526=>13921, +63383=>13921, +12527=>13922, +63384=>13922, +12528=>13923, +63385=>13923, +12529=>13924, +63386=>13924, +12530=>13925, +63387=>13925, +12531=>13926, +63388=>13926, +12532=>13927, +63389=>13927, +12533=>13928, +63390=>13928, +12534=>13929, +63391=>13929, +1040=>13930, +63392=>13930, +1041=>13931, +63393=>13931, +1042=>13932, +63394=>13932, +1043=>13933, +63395=>13933, +1044=>13934, +63396=>13934, +1045=>13935, +63397=>13935, +1025=>13936, +63398=>13936, +1046=>13937, +63399=>13937, +1047=>13938, +63400=>13938, +1048=>13939, +63401=>13939, +1049=>13940, +63402=>13940, +1050=>13941, +63403=>13941, +1051=>13942, +63404=>13942, +1052=>13943, +63405=>13943, +1053=>13944, +63406=>13944, +1054=>13945, +63407=>13945, +1055=>13946, +63408=>13946, +1056=>13947, +63409=>13947, +1057=>13948, +63410=>13948, +1058=>13949, +63411=>13949, +1059=>13950, +63412=>13950, +1060=>13951, +63413=>13951, +1061=>13952, +63414=>13952, +1062=>13953, +63415=>13953, +1063=>13954, +63416=>13954, +1064=>13955, +63417=>13955, +1065=>13956, +63418=>13956, +1066=>13957, +63419=>13957, +1067=>13958, +63420=>13958, +1068=>13959, +63421=>13959, +1069=>13960, +63422=>13960, +1070=>13961, +63423=>13961, +1071=>13962, +63424=>13962, +1072=>13963, +63425=>13963, +1073=>13964, +63426=>13964, +1074=>13965, +63427=>13965, +1075=>13966, +63428=>13966, +1076=>13967, +63429=>13967, +1077=>13968, +63430=>13968, +1105=>13969, +63431=>13969, +1078=>13970, +63432=>13970, +1079=>13971, +63433=>13971, +1080=>13972, +63434=>13972, +1081=>13973, +63435=>13973, +1082=>13974, +63436=>13974, +1083=>13975, +63437=>13975, +1084=>13976, +63438=>13976, +1085=>13977, +63439=>13977, +1086=>13978, +63440=>13978, +1087=>13979, +63441=>13979, +1088=>13980, +63442=>13980, +1089=>13981, +63443=>13981, +1090=>13982, +63444=>13982, +1091=>13983, +63445=>13983, +1092=>13984, +63446=>13984, +1093=>13985, +63447=>13985, +1094=>13986, +63448=>13986, +1095=>13987, +63449=>13987, +1096=>13988, +63450=>13988, +1097=>13989, +63451=>13989, +1098=>13990, +63452=>13990, +1099=>13991, +63453=>13991, +1100=>13992, +63454=>13992, +1101=>13993, +63455=>13993, +1102=>13994, +63456=>13994, +1103=>13995, +63457=>13995, +8679=>13996, +63458=>13996, +8632=>13997, +63459=>13997, +8633=>13998, +63460=>13998, +12751=>13999, +20033=>13999, +63461=>13999, +131276=>14000, +63462=>14000, +20058=>14001, +63463=>14001, +131210=>14002, +63464=>14002, +20994=>14003, +63465=>14003, +17553=>14004, +63466=>14004, +40880=>14005, +63467=>14005, +20872=>14006, +63468=>14006, +13853=>14007, +40881=>14007, +63469=>14007, +161287=>14008, +63470=>14008, +172=>14049, +65506=>14049, +63511=>14049, +65508=>14050, +63512=>14050, +65287=>14051, +63513=>14051, +65282=>14052, +63514=>14052, +12849=>14053, +63515=>14053, +8470=>14054, +63516=>14054, +8481=>14055, +63517=>14055, +30849=>14056, +37561=>14057, +58501=>14057, +35023=>14058, +22715=>14059, +24658=>14060, +31911=>14061, +23290=>14062, +9556=>14063, +9574=>14064, +9559=>14065, +9568=>14066, +9580=>14067, +9571=>14068, +9562=>14069, +9577=>14070, +9565=>14071, +9554=>14072, +9572=>14073, +9557=>14074, +9560=>14078, +9575=>14079, +9563=>14080, +9555=>14081, +9573=>14082, +9558=>14083, +9567=>14084, +9579=>14085, +9570=>14086, +9561=>14087, +9576=>14088, +9564=>14089, +9553=>14090, +9619=>14096, +65517=>14096, +65040=>14099, +65041=>14100, +65042=>14101, +65044=>14103, +65043=>14104, +65046=>14105, +65045=>14106, +147159=>14123, +58129=>14123, +22462=>14124, +58130=>14124, +159443=>14125, +58131=>14125, +28990=>14126, +58132=>14126, +153568=>14127, +58133=>14127, +27042=>14128, +58135=>14128, +166889=>14129, +58136=>14129, +23412=>14130, +58137=>14130, +31305=>14131, +58138=>14131, +153825=>14132, +58139=>14132, +169177=>14133, +58140=>14133, +31333=>14134, +58141=>14134, +31357=>14135, +58142=>14135, +154028=>14136, +58143=>14136, +31419=>14137, +58144=>14137, +31408=>14138, +58145=>14138, +31426=>14139, +58146=>14139, +31427=>14140, +58147=>14140, +29137=>14141, +58148=>14141, +156813=>14142, +58149=>14142, +16842=>14143, +58150=>14143, +31450=>14144, +58151=>14144, +31453=>14145, +58152=>14145, +31466=>14146, +58153=>14146, +16879=>14147, +58154=>14147, +21682=>14148, +58155=>14148, +154625=>14149, +58156=>14149, +31499=>14150, +58157=>14150, +31573=>14151, +58158=>14151, +31529=>14152, +58159=>14152, +152334=>14153, +58160=>14153, +154878=>14154, +58161=>14154, +31650=>14155, +58162=>14155, +31599=>14156, +58163=>14156, +33692=>14157, +58164=>14157, +154548=>14158, +58165=>14158, +158847=>14159, +58166=>14159, +31696=>14160, +58167=>14160, +33825=>14161, +58168=>14161, +31634=>14162, +58169=>14162, +58171=>14164, +154912=>14164, +33938=>14166, +58174=>14166, +31738=>14167, +58175=>14167, +31797=>14169, +58177=>14169, +154817=>14170, +58178=>14170, +31812=>14171, +58179=>14171, +31875=>14172, +58180=>14172, +149634=>14173, +58181=>14173, +31910=>14174, +58182=>14174, +148856=>14175, +58184=>14175, +31945=>14176, +58185=>14176, +31943=>14177, +58186=>14177, +31974=>14178, +58187=>14178, +31987=>14180, +58189=>14180, +31989=>14181, +58190=>14181, +32359=>14182, +58192=>14182, +17693=>14183, +58193=>14183, +159300=>14184, +58194=>14184, +32093=>14185, +58195=>14185, +159446=>14186, +58196=>14186, +32137=>14187, +58198=>14187, +32171=>14188, +58199=>14188, +28981=>14189, +58200=>14189, +32179=>14190, +58201=>14190, +32214=>14191, +147543=>14192, +58203=>14192, +155689=>14193, +58204=>14193, +32228=>14194, +58205=>14194, +15635=>14195, +58206=>14195, +32245=>14196, +58207=>14196, +137209=>14197, +58208=>14197, +32229=>14198, +58209=>14198, +164717=>14199, +58210=>14199, +155937=>14201, +58212=>14201, +155994=>14202, +58213=>14202, +32366=>14203, +58214=>14203, +17195=>14205, +58216=>14205, +37996=>14206, +58217=>14206, +32295=>14207, +58218=>14207, +32576=>14208, +58219=>14208, +32577=>14209, +58220=>14209, +32583=>14210, +58221=>14210, +31030=>14211, +58222=>14211, +156368=>14212, +58223=>14212, +39393=>14213, +58224=>14213, +32663=>14214, +58225=>14214, +156497=>14215, +58226=>14215, +32675=>14216, +58227=>14216, +136801=>14217, +58228=>14217, +131176=>14218, +58229=>14218, +17756=>14219, +58230=>14219, +145254=>14220, +58231=>14220, +164666=>14221, +58233=>14221, +32762=>14222, +58234=>14222, +156809=>14223, +58235=>14223, +64091=>14224, +32776=>14225, +58237=>14225, +32797=>14226, +58238=>14226, +32815=>14228, +58240=>14228, +172167=>14229, +58241=>14229, +158915=>14230, +58242=>14230, +32827=>14231, +58243=>14231, +32828=>14232, +58244=>14232, +32865=>14233, +58245=>14233, +141076=>14234, +58246=>14234, +18825=>14235, +58247=>14235, +157222=>14236, +58248=>14236, +146915=>14237, +58249=>14237, +157416=>14238, +58250=>14238, +26405=>14239, +58251=>14239, +32935=>14240, +58252=>14240, +166472=>14241, +58253=>14241, +33031=>14242, +58254=>14242, +33050=>14243, +58255=>14243, +22704=>14244, +58256=>14244, +141046=>14245, +58257=>14245, +27775=>14246, +58258=>14246, +156824=>14247, +58259=>14247, +25831=>14248, +58261=>14248, +136330=>14249, +58262=>14249, +33304=>14250, +58263=>14250, +137310=>14251, +58264=>14251, +27219=>14252, +58265=>14252, +150117=>14253, +58266=>14253, +150165=>14254, +58267=>14254, +17530=>14255, +58268=>14255, +33321=>14256, +58269=>14256, +158290=>14257, +58271=>14257, +146814=>14258, +58272=>14258, +20473=>14259, +58273=>14259, +136445=>14260, +58274=>14260, +34018=>14261, +58275=>14261, +33634=>14262, +58276=>14262, +194959=>14263, +149927=>14264, +58278=>14264, +144688=>14265, +58279=>14265, +137075=>14266, +58280=>14266, +146936=>14267, +58281=>14267, +33450=>14268, +58282=>14268, +26907=>14269, +58283=>14269, +194964=>14270, +58284=>14270, +16859=>14271, +58285=>14271, +34123=>14272, +58286=>14272, +33488=>14273, +58287=>14273, +33562=>14274, +58288=>14274, +134678=>14275, +58289=>14275, +137140=>14276, +58290=>14276, +14017=>14277, +58291=>14277, +143741=>14278, +58292=>14278, +144730=>14279, +58293=>14279, +33403=>14280, +58294=>14280, +33506=>14281, +58295=>14281, +33560=>14282, +58296=>14282, +147083=>14283, +58297=>14283, +159139=>14284, +58298=>14284, +158469=>14285, +58299=>14285, +158615=>14286, +58300=>14286, +144846=>14287, +58301=>14287, +15807=>14288, +58302=>14288, +33565=>14289, +58303=>14289, +21996=>14290, +58304=>14290, +33669=>14291, +58305=>14291, +17675=>14292, +58306=>14292, +159141=>14293, +58307=>14293, +33708=>14294, +58308=>14294, +33747=>14296, +58310=>14296, +159444=>14297, +58312=>14297, +27223=>14298, +58313=>14298, +34138=>14299, +58314=>14299, +13462=>14300, +58315=>14300, +159298=>14301, +58316=>14301, +33880=>14302, +58318=>14302, +154596=>14303, +58319=>14303, +33905=>14304, +58320=>14304, +15827=>14305, +58321=>14305, +17636=>14306, +58322=>14306, +27303=>14307, +58323=>14307, +33866=>14308, +58324=>14308, +31064=>14309, +58326=>14309, +158614=>14311, +58328=>14311, +159351=>14312, +58329=>14312, +159299=>14313, +58330=>14313, +34014=>14314, +58331=>14314, +33681=>14316, +58333=>14316, +17568=>14317, +58334=>14317, +33939=>14318, +58335=>14318, +34020=>14319, +58336=>14319, +154769=>14320, +58337=>14320, +16960=>14321, +58338=>14321, +154816=>14322, +58339=>14322, +17731=>14323, +58340=>14323, +34100=>14324, +58341=>14324, +23282=>14325, +58342=>14325, +17699=>14326, +17703=>14327, +58344=>14327, +34163=>14328, +58345=>14328, +17686=>14329, +58346=>14329, +26559=>14330, +58347=>14330, +34326=>14331, +58348=>14331, +165413=>14332, +58349=>14332, +165435=>14333, +58350=>14333, +34241=>14334, +58351=>14334, +159880=>14335, +58352=>14335, +34306=>14336, +58353=>14336, +136578=>14337, +58354=>14337, +159949=>14338, +58355=>14338, +194994=>14339, +58356=>14339, +17770=>14340, +58357=>14340, +34344=>14341, +58358=>14341, +13896=>14342, +58359=>14342, +137378=>14343, +58360=>14343, +21495=>14344, +58361=>14344, +160666=>14345, +58362=>14345, +34430=>14346, +58363=>14346, +172280=>14348, +58365=>14348, +34798=>14349, +58366=>14349, +142375=>14350, +58367=>14350, +34737=>14351, +58368=>14351, +34778=>14352, +58369=>14352, +34831=>14353, +60990=>14353, +58370=>14353, +22113=>14354, +58371=>14354, +34412=>14355, +58372=>14355, +26710=>14356, +58373=>14356, +17935=>14357, +58374=>14357, +34885=>14358, +58375=>14358, +34886=>14359, +58376=>14359, +161248=>14360, +58377=>14360, +146873=>14361, +58378=>14361, +161252=>14362, +58379=>14362, +34910=>14363, +58380=>14363, +34972=>14364, +58381=>14364, +18011=>14365, +58382=>14365, +34996=>14366, +58383=>14366, +34997=>14367, +58384=>14367, +35013=>14368, +58386=>14368, +161551=>14369, +58388=>14369, +35207=>14370, +58389=>14370, +35239=>14374, +58393=>14374, +35260=>14375, +58394=>14375, +166437=>14376, +58395=>14376, +35303=>14377, +58396=>14377, +162084=>14378, +58397=>14378, +162493=>14379, +58398=>14379, +35484=>14380, +58399=>14380, +30611=>14381, +58400=>14381, +37374=>14382, +58401=>14382, +35472=>14383, +58402=>14383, +162393=>14384, +58403=>14384, +31465=>14385, +58404=>14385, +162618=>14386, +58405=>14386, +18195=>14387, +58407=>14387, +162616=>14388, +58408=>14388, +29052=>14389, +58409=>14389, +35596=>14390, +58410=>14390, +35615=>14391, +58411=>14391, +152624=>14392, +58412=>14392, +152933=>14393, +58413=>14393, +35647=>14394, +58414=>14394, +35661=>14396, +58416=>14396, +35497=>14397, +58417=>14397, +150138=>14398, +58418=>14398, +35728=>14399, +58419=>14399, +35739=>14400, +58420=>14400, +35503=>14401, +58421=>14401, +136927=>14402, +58422=>14402, +17941=>14403, +58423=>14403, +34895=>14404, +58424=>14404, +35995=>14405, +58425=>14405, +163156=>14406, +58426=>14406, +163215=>14407, +58427=>14407, +195028=>14408, +58428=>14408, +14117=>14409, +58429=>14409, +163155=>14410, +58430=>14410, +36054=>14411, +58431=>14411, +163224=>14412, +58432=>14412, +163261=>14413, +58433=>14413, +36114=>14414, +58434=>14414, +36099=>14415, +58435=>14415, +137488=>14416, +58436=>14416, +36059=>14417, +58437=>14417, +28764=>14418, +58438=>14418, +36113=>14419, +58439=>14419, +16080=>14420, +58441=>14420, +195031=>14421, +36265=>14422, +58443=>14422, +163842=>14423, +58444=>14423, +135188=>14424, +58445=>14424, +149898=>14425, +58446=>14425, +15228=>14426, +58447=>14426, +164284=>14427, +58448=>14427, +160012=>14428, +58449=>14428, +31463=>14429, +58450=>14429, +36525=>14430, +58451=>14430, +36534=>14431, +58452=>14431, +36547=>14432, +58453=>14432, +37588=>14433, +58454=>14433, +36633=>14434, +58455=>14434, +36653=>14435, +58456=>14435, +164709=>14436, +58457=>14436, +164882=>14437, +58458=>14437, +36773=>14438, +58459=>14438, +37635=>14439, +58460=>14439, +172703=>14440, +58461=>14440, +133712=>14441, +58462=>14441, +36787=>14442, +58463=>14442, +166366=>14444, +58465=>14444, +165181=>14445, +58466=>14445, +146875=>14446, +58467=>14446, +24312=>14447, +58468=>14447, +143970=>14448, +58469=>14448, +36857=>14449, +58470=>14449, +140069=>14451, +58474=>14451, +14720=>14452, +58475=>14452, +159447=>14453, +58476=>14453, +36919=>14454, +58477=>14454, +165180=>14455, +58478=>14455, +162494=>14456, +58479=>14456, +36961=>14457, +58480=>14457, +165228=>14458, +58481=>14458, +165387=>14459, +58482=>14459, +37032=>14460, +58483=>14460, +165651=>14461, +58484=>14461, +37060=>14462, +58485=>14462, +165606=>14463, +58486=>14463, +37038=>14464, +58487=>14464, +64038=>14465, +37223=>14466, +58489=>14466, +37289=>14467, +58491=>14467, +37316=>14468, +58492=>14468, +31916=>14469, +58493=>14469, +166195=>14470, +58494=>14470, +138889=>14471, +58495=>14471, +37390=>14472, +58496=>14472, +27807=>14473, +58497=>14473, +37441=>14474, +58498=>14474, +37474=>14475, +58499=>14475, +153017=>14476, +58500=>14476, +166598=>14477, +58502=>14477, +146587=>14478, +58503=>14478, +166668=>14479, +58504=>14479, +153051=>14480, +58505=>14480, +134449=>14481, +58506=>14481, +37676=>14482, +58507=>14482, +37739=>14483, +58508=>14483, +166625=>14484, +58509=>14484, +166891=>14485, +58510=>14485, +23235=>14486, +58512=>14486, +166626=>14487, +58513=>14487, +166629=>14488, +58514=>14488, +18789=>14489, +58515=>14489, +37444=>14490, +58516=>14490, +166892=>14491, +58517=>14491, +166969=>14492, +58518=>14492, +166911=>14493, +58519=>14493, +37747=>14494, +58520=>14494, +37979=>14495, +58521=>14495, +36540=>14496, +58522=>14496, +38277=>14497, +58523=>14497, +38310=>14498, +58524=>14498, +37926=>14499, +58525=>14499, +38304=>14500, +58526=>14500, +28662=>14501, +58527=>14501, +17081=>14502, +58528=>14502, +165592=>14503, +58530=>14503, +135804=>14504, +58531=>14504, +146990=>14505, +58532=>14505, +18911=>14506, +58533=>14506, +27676=>14507, +58534=>14507, +38523=>14508, +58535=>14508, +38550=>14509, +58536=>14509, +16748=>14510, +58537=>14510, +38563=>14511, +58538=>14511, +159445=>14512, +58539=>14512, +25050=>14513, +58540=>14513, +58541=>14514, +30965=>14515, +58542=>14515, +166624=>14516, +58543=>14516, +38589=>14517, +58544=>14517, +21452=>14518, +58545=>14518, +18849=>14519, +58546=>14519, +158904=>14520, +58547=>14520, +131700=>14521, +58548=>14521, +156688=>14522, +58549=>14522, +168111=>14523, +58550=>14523, +168165=>14524, +58551=>14524, +150225=>14525, +58552=>14525, +137493=>14526, +58553=>14526, +144138=>14527, +58554=>14527, +38705=>14528, +58555=>14528, +34370=>14529, +58556=>14529, +38710=>14530, +58557=>14530, +18959=>14531, +58558=>14531, +17725=>14532, +58559=>14532, +17797=>14533, +58560=>14533, +150249=>14534, +58561=>14534, +28789=>14535, +58562=>14535, +23361=>14536, +58563=>14536, +38683=>14537, +58564=>14537, +168405=>14539, +58566=>14539, +38743=>14540, +58567=>14540, +23370=>14541, +58568=>14541, +168427=>14542, +58569=>14542, +38751=>14543, +58570=>14543, +37925=>14544, +58571=>14544, +20688=>14545, +58572=>14545, +143543=>14546, +58573=>14546, +143548=>14547, +58574=>14547, +38793=>14548, +58575=>14548, +38815=>14549, +58576=>14549, +38833=>14550, +58577=>14550, +38846=>14551, +58578=>14551, +38848=>14552, +58579=>14552, +38866=>14553, +58580=>14553, +38880=>14554, +58581=>14554, +152684=>14555, +58582=>14555, +38894=>14556, +58583=>14556, +29724=>14557, +58584=>14557, +169011=>14558, +58585=>14558, +38901=>14560, +58587=>14560, +168989=>14561, +58588=>14561, +162170=>14562, +58589=>14562, +19153=>14563, +58590=>14563, +38964=>14564, +58591=>14564, +38963=>14565, +58592=>14565, +38987=>14566, +58593=>14566, +39014=>14567, +58594=>14567, +15118=>14568, +58595=>14568, +160117=>14569, +58596=>14569, +15697=>14570, +58597=>14570, +132656=>14571, +58598=>14571, +147804=>14572, +58599=>14572, +153350=>14573, +58600=>14573, +39114=>14574, +58601=>14574, +39095=>14575, +58602=>14575, +39112=>14576, +58603=>14576, +39111=>14577, +58604=>14577, +19199=>14578, +58605=>14578, +159015=>14579, +58606=>14579, +136915=>14580, +58607=>14580, +21936=>14581, +58608=>14581, +39137=>14582, +58609=>14582, +39142=>14583, +58610=>14583, +39148=>14584, +58611=>14584, +37752=>14585, +58612=>14585, +39225=>14586, +58613=>14586, +150057=>14587, +58614=>14587, +19314=>14588, +58615=>14588, +170071=>14589, +58616=>14589, +170245=>14590, +58617=>14590, +39413=>14591, +58618=>14591, +39436=>14592, +58619=>14592, +39483=>14593, +58620=>14593, +39440=>14594, +58621=>14594, +39512=>14595, +58622=>14595, +153381=>14596, +58623=>14596, +14020=>14597, +58624=>14597, +168113=>14598, +58625=>14598, +170965=>14599, +58626=>14599, +39648=>14600, +58627=>14600, +39650=>14601, +58628=>14601, +170757=>14602, +58629=>14602, +39668=>14603, +58630=>14603, +19470=>14604, +58631=>14604, +39700=>14605, +58632=>14605, +39725=>14606, +58633=>14606, +165376=>14607, +58634=>14607, +20532=>14608, +58635=>14608, +39732=>14609, +58636=>14609, +14531=>14610, +58638=>14610, +143485=>14611, +58639=>14611, +39760=>14612, +58640=>14612, +39744=>14613, +58641=>14613, +171326=>14614, +58642=>14614, +23109=>14615, +58643=>14615, +137315=>14616, +58644=>14616, +39822=>14617, +58645=>14617, +39938=>14618, +58647=>14618, +39935=>14619, +58648=>14619, +39948=>14620, +58649=>14620, +171624=>14621, +58650=>14621, +40404=>14622, +58651=>14622, +171959=>14623, +58652=>14623, +172434=>14624, +58653=>14624, +172459=>14625, +58654=>14625, +172257=>14626, +58655=>14626, +172323=>14627, +58656=>14627, +172511=>14628, +58657=>14628, +40318=>14629, +58658=>14629, +40323=>14630, +58659=>14630, +172340=>14631, +58660=>14631, +40462=>14632, +58661=>14632, +40388=>14633, +58663=>14633, +172435=>14634, +58665=>14634, +172576=>14635, +58666=>14635, +137531=>14636, +58667=>14636, +172595=>14637, +58668=>14637, +40249=>14638, +58669=>14638, +172217=>14639, +58670=>14639, +172724=>14640, +58671=>14640, +40592=>14641, +58672=>14641, +40597=>14642, +58673=>14642, +40606=>14643, +58674=>14643, +40610=>14644, +58675=>14644, +19764=>14645, +58676=>14645, +40618=>14646, +58677=>14646, +40623=>14647, +58678=>14647, +148324=>14648, +58679=>14648, +40641=>14649, +58680=>14649, +15200=>14650, +58681=>14650, +14821=>14651, +58682=>14651, +15645=>14652, +58683=>14652, +20274=>14653, +58684=>14653, +14270=>14654, +58685=>14654, +166955=>14655, +58686=>14655, +40706=>14656, +58687=>14656, +40712=>14657, +58688=>14657, +19350=>14658, +58689=>14658, +37924=>14659, +58690=>14659, +159138=>14660, +58691=>14660, +40727=>14661, +60836=>14661, +58692=>14661, +195099=>14662, +40761=>14663, +58694=>14663, +22175=>14664, +58695=>14664, +22154=>14665, +58696=>14665, +40773=>14666, +58697=>14666, +39352=>14667, +58698=>14667, +168075=>14668, +58699=>14668, +38898=>14669, +58700=>14669, +33919=>14670, +58701=>14670, +40809=>14672, +58703=>14672, +31452=>14673, +58704=>14673, +40846=>14674, +58705=>14674, +29206=>14675, +58706=>14675, +19390=>14676, +58707=>14676, +149877=>14677, +58708=>14677, +149947=>14678, +58709=>14678, +29047=>14679, +58710=>14679, +150008=>14680, +58711=>14680, +148296=>14681, +58712=>14681, +150097=>14682, +58713=>14682, +29598=>14683, +58714=>14683, +166874=>14684, +58715=>14684, +137466=>14685, +58716=>14685, +31135=>14686, +58717=>14686, +166270=>14687, +58718=>14687, +167478=>14688, +58719=>14688, +37737=>14689, +58720=>14689, +37875=>14690, +58721=>14690, +166468=>14691, +58722=>14691, +37612=>14692, +58723=>14692, +37761=>14693, +58724=>14693, +37835=>14694, +58725=>14694, +166252=>14695, +58726=>14695, +148665=>14696, +58727=>14696, +29207=>14697, +58728=>14697, +16107=>14698, +58729=>14698, +30578=>14699, +58730=>14699, +31299=>14700, +58731=>14700, +28880=>14701, +58732=>14701, +148595=>14702, +58733=>14702, +148472=>14703, +58734=>14703, +29054=>14704, +58735=>14704, +137199=>14705, +58736=>14705, +28835=>14706, +58737=>14706, +137406=>14707, +58738=>14707, +144793=>14708, +58739=>14708, +16071=>14709, +58740=>14709, +137349=>14710, +58741=>14710, +152623=>14711, +58742=>14711, +137208=>14712, +58743=>14712, +14114=>14713, +58744=>14713, +136955=>14714, +58745=>14714, +137273=>14715, +58746=>14715, +14049=>14716, +58747=>14716, +137076=>14717, +58748=>14717, +137425=>14718, +58749=>14718, +155467=>14719, +58750=>14719, +14115=>14720, +58751=>14720, +136896=>14721, +58752=>14721, +22363=>14722, +58753=>14722, +150053=>14723, +58754=>14723, +136190=>14724, +58755=>14724, +135848=>14725, +58756=>14725, +136134=>14726, +58757=>14726, +136374=>14727, +58758=>14727, +34051=>14728, +58761=>14728, +58759=>14728, +145062=>14729, +58760=>14729, +33877=>14731, +58762=>14731, +149908=>14732, +58763=>14732, +160101=>14733, +58764=>14733, +146993=>14734, +58765=>14734, +152924=>14735, +58766=>14735, +147195=>14736, +58767=>14736, +159826=>14737, +58768=>14737, +17652=>14738, +58769=>14738, +145134=>14739, +58770=>14739, +170397=>14740, +58771=>14740, +159526=>14741, +58772=>14741, +26617=>14742, +58773=>14742, +14131=>14743, +58774=>14743, +15381=>14744, +58775=>14744, +15847=>14745, +58776=>14745, +22636=>14746, +58777=>14746, +137506=>14747, +58778=>14747, +26640=>14748, +58779=>14748, +16471=>14749, +58780=>14749, +145215=>14750, +58781=>14750, +147681=>14751, +58782=>14751, +147595=>14752, +58783=>14752, +147727=>14753, +58784=>14753, +158753=>14754, +58785=>14754, +21707=>14755, +58786=>14755, +22174=>14756, +58787=>14756, +157361=>14757, +58788=>14757, +22162=>14758, +58789=>14758, +135135=>14759, +58790=>14759, +134056=>14760, +58791=>14760, +134669=>14761, +58792=>14761, +166675=>14763, +58794=>14763, +37788=>14764, +58795=>14764, +20216=>14765, +58796=>14765, +20779=>14766, +58797=>14766, +14361=>14767, +58798=>14767, +148534=>14768, +58799=>14768, +20156=>14769, +58800=>14769, +132197=>14770, +58801=>14770, +20299=>14772, +58803=>14772, +20362=>14773, +58804=>14773, +153169=>14774, +58805=>14774, +23144=>14775, +58806=>14775, +131499=>14776, +58807=>14776, +132043=>14777, +58808=>14777, +14745=>14778, +58809=>14778, +131850=>14779, +58810=>14779, +132116=>14780, +58811=>14780, +13365=>14781, +58812=>14781, +20265=>14782, +58813=>14782, +131776=>14783, +58814=>14783, +167603=>14784, +58815=>14784, +131701=>14785, +58816=>14785, +35546=>14786, +58817=>14786, +131596=>14787, +58818=>14787, +20120=>14788, +58819=>14788, +20685=>14789, +58820=>14789, +20749=>14790, +58821=>14790, +20386=>14791, +58822=>14791, +20227=>14792, +58823=>14792, +150030=>14793, +58824=>14793, +147082=>14794, +58825=>14794, +20290=>14795, +58826=>14795, +20526=>14796, +58827=>14796, +20588=>14797, +58828=>14797, +20609=>14798, +58829=>14798, +20428=>14799, +58830=>14799, +20453=>14800, +58831=>14800, +20568=>14801, +58832=>14801, +20732=>14802, +58833=>14802, +28278=>14803, +58838=>14803, +144789=>14804, +58839=>14804, +147001=>14805, +58840=>14805, +147135=>14806, +58841=>14806, +28018=>14807, +58842=>14807, +137348=>14808, +58843=>14808, +147081=>14809, +58844=>14809, +20904=>14810, +58845=>14810, +20931=>14811, +58846=>14811, +132576=>14812, +58847=>14812, +17629=>14813, +58848=>14813, +132259=>14814, +58849=>14814, +132242=>14815, +58850=>14815, +132241=>14816, +58851=>14816, +36218=>14817, +58852=>14817, +166556=>14818, +58853=>14818, +132878=>14819, +58854=>14819, +21081=>14820, +58855=>14820, +21156=>14821, +58856=>14821, +133235=>14822, +58857=>14822, +21217=>14823, +58858=>14823, +18042=>14825, +58860=>14825, +29068=>14826, +58861=>14826, +148364=>14827, +58862=>14827, +134176=>14828, +58863=>14828, +149932=>14829, +58864=>14829, +135396=>14830, +58865=>14830, +27089=>14831, +58866=>14831, +134685=>14832, +58867=>14832, +16094=>14834, +58869=>14834, +29849=>14835, +58870=>14835, +29716=>14836, +58871=>14836, +29782=>14837, +58872=>14837, +29592=>14838, +58873=>14838, +19342=>14839, +58874=>14839, +150204=>14840, +58875=>14840, +147597=>14841, +58876=>14841, +21456=>14842, +58877=>14842, +13700=>14843, +58878=>14843, +29199=>14844, +58879=>14844, +147657=>14845, +58880=>14845, +21940=>14846, +58881=>14846, +131909=>14847, +58882=>14847, +21709=>14848, +58883=>14848, +134086=>14849, +58884=>14849, +22301=>14850, +58885=>14850, +37469=>14851, +58886=>14851, +38644=>14852, +58887=>14852, +22493=>14853, +58889=>14853, +22413=>14854, +58890=>14854, +22399=>14855, +58891=>14855, +13886=>14856, +58892=>14856, +22731=>14857, +58893=>14857, +23193=>14858, +58894=>14858, +166470=>14859, +58895=>14859, +136954=>14860, +58896=>14860, +137071=>14861, +58897=>14861, +136976=>14862, +58898=>14862, +23084=>14863, +58899=>14863, +22968=>14864, +58900=>14864, +23166=>14865, +58902=>14865, +23247=>14866, +58903=>14866, +23058=>14867, +58904=>14867, +153926=>14868, +58905=>14868, +137715=>14869, +58906=>14869, +137313=>14870, +58907=>14870, +148117=>14871, +58908=>14871, +14069=>14872, +58909=>14872, +27909=>14873, +58910=>14873, +29763=>14874, +58911=>14874, +23073=>14875, +58912=>14875, +155267=>14876, +58913=>14876, +23169=>14877, +58914=>14877, +166871=>14878, +58915=>14878, +132115=>14879, +58916=>14879, +37856=>14880, +58917=>14880, +29836=>14881, +58918=>14881, +135939=>14882, +58919=>14882, +28933=>14883, +58920=>14883, +18802=>14884, +58921=>14884, +37896=>14885, +58922=>14885, +166395=>14886, +58923=>14886, +37821=>14887, +58924=>14887, +14240=>14888, +58925=>14888, +23582=>14889, +58926=>14889, +23710=>14890, +58927=>14890, +24158=>14891, +58928=>14891, +24136=>14892, +58929=>14892, +137622=>14893, +58930=>14893, +137596=>14894, +58931=>14894, +146158=>14895, +58932=>14895, +24269=>14896, +58933=>14896, +23375=>14897, +58934=>14897, +58935=>14898, +137475=>14898, +58936=>14899, +137476=>14899, +14081=>14900, +58937=>14900, +137376=>14901, +58938=>14901, +14045=>14902, +58939=>14902, +136958=>14903, +58940=>14903, +14035=>14904, +58941=>14904, +33066=>14905, +58942=>14905, +166471=>14906, +58943=>14906, +138682=>14907, +58944=>14907, +144498=>14908, +58945=>14908, +166312=>14909, +58946=>14909, +24332=>14910, +60916=>14910, +58947=>14910, +24334=>14911, +58948=>14911, +137511=>14912, +58949=>14912, +137131=>14913, +58950=>14913, +23147=>14914, +58951=>14914, +137019=>14915, +58952=>14915, +23364=>14916, +58953=>14916, +161277=>14917, +58955=>14917, +34912=>14918, +58956=>14918, +24702=>14919, +58957=>14919, +141408=>14920, +58958=>14920, +140843=>14921, +58959=>14921, +24539=>14922, +58960=>14922, +16056=>14923, +58961=>14923, +140719=>14924, +58962=>14924, +140734=>14925, +58963=>14925, +168072=>14926, +58964=>14926, +159603=>14927, +58965=>14927, +25024=>14928, +58966=>14928, +131134=>14929, +58967=>14929, +131142=>14930, +58968=>14930, +140827=>14931, +58969=>14931, +24985=>14932, +58970=>14932, +24984=>14933, +58971=>14933, +24693=>14934, +58972=>14934, +142491=>14935, +58973=>14935, +142599=>14936, +58974=>14936, +149204=>14937, +58975=>14937, +168269=>14938, +58976=>14938, +25713=>14939, +58977=>14939, +149093=>14940, +58978=>14940, +142186=>14941, +58979=>14941, +14889=>14942, +58980=>14942, +142114=>14943, +58981=>14943, +144464=>14944, +58982=>14944, +170218=>14945, +58983=>14945, +142968=>14946, +58984=>14946, +25399=>14947, +58985=>14947, +25782=>14948, +58987=>14948, +25393=>14949, +58988=>14949, +25553=>14950, +58989=>14950, +149987=>14951, +58990=>14951, +142695=>14952, +58991=>14952, +25252=>14953, +58992=>14953, +142497=>14954, +58993=>14954, +25659=>14955, +58994=>14955, +25963=>14956, +58995=>14956, +26994=>14957, +58996=>14957, +15348=>14958, +58997=>14958, +143502=>14959, +58998=>14959, +144045=>14960, +58999=>14960, +149897=>14961, +59000=>14961, +144043=>14962, +59001=>14962, +21773=>14963, +59002=>14963, +144096=>14964, +59003=>14964, +137433=>14965, +59004=>14965, +169023=>14966, +59005=>14966, +26318=>14967, +59006=>14967, +144009=>14968, +59007=>14968, +143795=>14969, +59008=>14969, +15072=>14970, +59009=>14970, +152964=>14971, +59011=>14971, +166690=>14972, +59012=>14972, +152975=>14973, +59013=>14973, +136956=>14974, +59014=>14974, +152923=>14975, +59015=>14975, +152613=>14976, +59016=>14976, +30958=>14977, +59017=>14977, +143619=>14978, +59018=>14978, +137258=>14979, +59019=>14979, +143924=>14980, +59020=>14980, +13412=>14981, +59021=>14981, +143887=>14982, +59022=>14982, +143746=>14983, +59023=>14983, +148169=>14984, +59024=>14984, +26254=>14985, +59025=>14985, +159012=>14986, +59026=>14986, +26219=>14987, +59027=>14987, +19347=>14988, +59028=>14988, +26160=>14989, +59029=>14989, +161904=>14990, +59030=>14990, +138731=>14991, +59031=>14991, +26211=>14992, +59032=>14992, +144082=>14993, +59033=>14993, +144097=>14994, +59034=>14994, +26142=>14995, +59035=>14995, +153714=>14996, +59036=>14996, +14545=>14997, +59037=>14997, +145466=>14998, +59038=>14998, +145340=>14999, +59039=>14999, +15257=>15000, +59040=>15000, +145314=>15001, +59041=>15001, +144382=>15002, +59042=>15002, +29904=>15003, +59043=>15003, +15254=>15004, +59044=>15004, +149034=>15005, +59046=>15005, +26806=>15006, +59047=>15006, +15300=>15008, +59049=>15008, +27326=>15009, +59050=>15009, +145365=>15010, +59052=>15010, +148615=>15011, +59053=>15011, +27187=>15012, +59054=>15012, +27218=>15013, +59055=>15013, +27337=>15014, +59056=>15014, +27397=>15015, +59057=>15015, +137490=>15016, +59058=>15016, +25873=>15017, +59059=>15017, +26776=>15018, +59060=>15018, +27212=>15019, +59061=>15019, +15319=>15020, +59062=>15020, +27258=>15021, +59063=>15021, +27479=>15022, +59064=>15022, +147392=>15023, +59065=>15023, +146586=>15024, +59066=>15024, +37792=>15025, +59067=>15025, +37618=>15026, +59068=>15026, +166890=>15027, +59069=>15027, +166603=>15028, +59070=>15028, +37513=>15029, +59071=>15029, +163870=>15030, +59072=>15030, +166364=>15031, +59073=>15031, +37991=>15032, +59074=>15032, +28069=>15033, +59075=>15033, +28427=>15034, +59076=>15034, +147327=>15036, +59079=>15036, +15759=>15037, +59080=>15037, +28164=>15038, +59081=>15038, +147516=>15039, +59082=>15039, +23101=>15040, +59083=>15040, +28170=>15041, +59084=>15041, +22599=>15042, +59085=>15042, +27940=>15043, +59086=>15043, +30786=>15044, +59087=>15044, +28987=>15045, +59088=>15045, +148250=>15046, +59089=>15046, +148086=>15047, +59090=>15047, +28913=>15048, +59091=>15048, +29264=>15049, +61085=>15049, +59092=>15049, +29319=>15050, +59093=>15050, +29332=>15051, +59094=>15051, +149391=>15052, +59095=>15052, +149285=>15053, +59096=>15053, +20857=>15054, +59097=>15054, +150180=>15055, +59098=>15055, +132587=>15056, +59099=>15056, +29818=>15057, +59100=>15057, +147192=>15058, +59101=>15058, +144991=>15059, +59102=>15059, +150090=>15060, +59103=>15060, +149783=>15061, +59104=>15061, +155617=>15062, +59105=>15062, +16134=>15063, +59106=>15063, +16049=>15064, +59107=>15064, +150239=>15065, +59108=>15065, +166947=>15066, +59109=>15066, +147253=>15067, +59110=>15067, +24743=>15068, +59111=>15068, +16115=>15069, +59112=>15069, +29900=>15070, +59113=>15070, +29756=>15071, +59114=>15071, +37767=>15072, +59115=>15072, +29751=>15073, +59116=>15073, +17567=>15074, +59117=>15074, +159210=>15075, +59118=>15075, +17745=>15076, +59119=>15076, +30083=>15077, +59120=>15077, +16227=>15078, +59121=>15078, +150745=>15079, +59122=>15079, +150790=>15080, +59123=>15080, +16216=>15081, +59124=>15081, +30037=>15082, +59125=>15082, +30323=>15083, +59126=>15083, +173510=>15084, +59127=>15084, +29800=>15086, +61070=>15086, +59129=>15086, +166604=>15087, +59130=>15087, +149931=>15088, +59131=>15088, +149902=>15089, +59132=>15089, +15099=>15090, +59133=>15090, +15821=>15091, +59134=>15091, +150094=>15092, +59135=>15092, +16127=>15093, +59136=>15093, +149957=>15094, +59137=>15094, +149747=>15095, +59138=>15095, +37370=>15096, +59139=>15096, +22322=>15097, +59140=>15097, +37698=>15098, +59141=>15098, +166627=>15099, +59142=>15099, +137316=>15100, +59143=>15100, +20703=>15101, +59144=>15101, +152097=>15102, +59145=>15102, +152039=>15103, +59146=>15103, +30584=>15104, +59147=>15104, +143922=>15105, +59148=>15105, +30478=>15106, +59149=>15106, +30479=>15107, +59150=>15107, +30587=>15108, +59151=>15108, +149143=>15109, +59152=>15109, +145281=>15110, +59153=>15110, +14942=>15111, +59154=>15111, +149744=>15112, +59155=>15112, +29752=>15113, +59156=>15113, +29851=>15114, +59157=>15114, +16063=>15115, +59158=>15115, +150202=>15116, +59159=>15116, +150215=>15117, +59160=>15117, +16584=>15118, +59161=>15118, +150166=>15119, +59162=>15119, +156078=>15120, +59163=>15120, +37639=>15121, +59164=>15121, +152961=>15122, +59165=>15122, +30750=>15123, +59166=>15123, +30861=>15124, +59167=>15124, +30856=>15125, +59168=>15125, +30930=>15126, +59169=>15126, +29648=>15127, +59170=>15127, +31065=>15128, +59171=>15128, +161601=>15129, +59172=>15129, +153315=>15130, +59173=>15130, +16654=>15131, +59174=>15131, +31141=>15134, +59177=>15134, +27181=>15135, +59178=>15135, +147194=>15136, +59179=>15136, +31290=>15137, +59180=>15137, +31220=>15138, +59181=>15138, +16750=>15139, +59182=>15139, +136934=>15140, +59183=>15140, +16690=>15141, +59184=>15141, +37429=>15142, +59185=>15142, +31217=>15143, +59186=>15143, +134476=>15144, +59187=>15144, +149900=>15145, +59188=>15145, +131737=>15146, +59189=>15146, +146874=>15147, +59190=>15147, +137070=>15148, +59191=>15148, +13719=>15149, +59192=>15149, +21867=>15150, +59193=>15150, +13680=>15151, +59194=>15151, +13994=>15152, +59195=>15152, +131540=>15153, +59196=>15153, +134157=>15154, +59197=>15154, +31458=>15155, +59198=>15155, +23129=>15156, +59199=>15156, +141045=>15157, +59200=>15157, +154287=>15158, +59201=>15158, +154268=>15159, +59202=>15159, +23053=>15160, +59203=>15160, +131675=>15161, +59204=>15161, +30960=>15162, +59205=>15162, +23082=>15163, +59206=>15163, +154566=>15164, +59207=>15164, +31486=>15165, +59208=>15165, +16889=>15166, +59209=>15166, +31837=>15167, +59210=>15167, +31853=>15168, +59211=>15168, +16913=>15169, +59212=>15169, +154547=>15170, +59213=>15170, +155324=>15171, +59214=>15171, +155302=>15172, +59215=>15172, +31949=>15173, +59216=>15173, +150009=>15174, +59217=>15174, +137136=>15175, +59218=>15175, +31886=>15176, +59219=>15176, +31868=>15177, +59220=>15177, +31918=>15178, +59221=>15178, +27314=>15179, +59222=>15179, +32220=>15180, +59223=>15180, +32263=>15181, +59224=>15181, +32211=>15182, +59225=>15182, +32590=>15183, +59226=>15183, +156257=>15184, +59227=>15184, +155996=>15185, +59228=>15185, +162632=>15186, +59229=>15186, +32151=>15187, +59230=>15187, +155266=>15188, +59231=>15188, +17002=>15189, +59232=>15189, +158581=>15190, +59233=>15190, +133398=>15191, +59234=>15191, +26582=>15192, +59235=>15192, +131150=>15193, +59236=>15193, +144847=>15194, +59237=>15194, +22468=>15195, +59238=>15195, +156690=>15196, +59239=>15196, +156664=>15197, +59240=>15197, +32733=>15198, +59242=>15198, +31527=>15199, +59243=>15199, +133164=>15200, +59244=>15200, +154345=>15201, +59245=>15201, +154947=>15202, +59246=>15202, +31500=>15203, +59247=>15203, +155150=>15204, +59248=>15204, +39398=>15205, +59249=>15205, +34373=>15206, +59250=>15206, +39523=>15207, +59251=>15207, +27164=>15208, +59252=>15208, +144447=>15209, +59253=>15209, +150007=>15210, +59255=>15210, +157101=>15211, +59256=>15211, +39455=>15212, +59257=>15212, +157088=>15213, +59258=>15213, +33941=>15214, +160039=>15215, +59260=>15215, +158929=>15216, +59261=>15216, +17642=>15217, +59262=>15217, +33079=>15218, +59263=>15218, +17410=>15219, +59264=>15219, +32966=>15220, +59265=>15220, +33033=>15221, +59266=>15221, +33090=>15222, +59267=>15222, +157620=>15223, +59268=>15223, +39107=>15224, +59269=>15224, +158274=>15225, +59270=>15225, +33378=>15226, +59271=>15226, +33381=>15227, +59272=>15227, +158289=>15228, +59273=>15228, +33875=>15229, +59274=>15229, +159143=>15230, +59275=>15230, +34320=>15231, +59276=>15231, +160283=>15232, +59277=>15232, +23174=>15233, +59278=>15233, +16767=>15234, +59279=>15234, +137280=>15235, +59280=>15235, +23339=>15236, +59281=>15236, +137377=>15237, +59282=>15237, +23268=>15238, +59283=>15238, +137432=>15239, +59284=>15239, +34464=>15240, +59285=>15240, +195004=>15241, +59286=>15241, +146831=>15242, +59287=>15242, +34861=>15243, +59288=>15243, +160802=>15244, +59289=>15244, +23042=>15245, +59290=>15245, +34926=>15246, +59291=>15246, +20293=>15247, +59292=>15247, +34951=>15248, +59293=>15248, +35007=>15249, +59294=>15249, +35046=>15250, +59295=>15250, +35173=>15251, +59296=>15251, +35149=>15252, +59297=>15252, +153219=>15253, +59298=>15253, +35156=>15254, +59299=>15254, +161669=>15255, +59300=>15255, +161668=>15256, +59301=>15256, +166901=>15257, +59302=>15257, +166873=>15258, +59303=>15258, +166812=>15259, +59304=>15259, +166393=>15260, +59305=>15260, +16045=>15261, +59306=>15261, +33955=>15262, +59307=>15262, +18165=>15263, +59308=>15263, +18127=>15264, +59309=>15264, +14322=>15265, +59310=>15265, +35389=>15266, +59311=>15266, +35356=>15267, +59312=>15267, +169032=>15268, +59313=>15268, +24397=>15269, +59314=>15269, +37419=>15270, +59315=>15270, +148100=>15271, +59316=>15271, +26068=>15272, +59317=>15272, +28969=>15273, +59318=>15273, +28868=>15274, +59319=>15274, +137285=>15275, +59320=>15275, +40301=>15276, +59321=>15276, +35999=>15277, +59322=>15277, +36073=>15278, +59323=>15278, +163292=>15279, +59324=>15279, +22938=>15280, +59325=>15280, +30659=>15281, +59326=>15281, +23024=>15282, +59327=>15282, +14036=>15283, +59329=>15283, +36394=>15284, +59330=>15284, +36519=>15285, +59331=>15285, +150537=>15286, +59332=>15286, +36656=>15287, +59333=>15287, +36682=>15288, +59334=>15288, +17140=>15289, +59335=>15289, +27736=>15290, +59336=>15290, +28603=>15291, +59337=>15291, +140065=>15292, +59338=>15292, +18587=>15293, +59339=>15293, +28537=>15294, +59340=>15294, +28299=>15295, +59341=>15295, +137178=>15296, +59342=>15296, +39913=>15297, +59343=>15297, +14005=>15298, +59344=>15298, +149807=>15299, +59345=>15299, +37051=>15300, +59346=>15300, +18612=>15301, +21873=>15302, +59348=>15302, +18694=>15303, +59349=>15303, +37307=>15304, +59350=>15304, +37892=>15305, +59351=>15305, +166475=>15306, +59352=>15306, +16482=>15307, +59353=>15307, +166652=>15308, +59354=>15308, +37927=>15309, +59355=>15309, +166941=>15310, +59356=>15310, +166971=>15311, +59357=>15311, +34021=>15312, +59358=>15312, +35371=>15313, +59359=>15313, +38297=>15314, +59360=>15314, +38311=>15315, +59361=>15315, +38295=>15316, +59362=>15316, +38294=>15317, +59363=>15317, +167220=>15318, +59364=>15318, +29765=>15319, +59365=>15319, +16066=>15320, +59366=>15320, +149759=>15321, +59367=>15321, +150082=>15322, +59368=>15322, +148458=>15323, +59369=>15323, +16103=>15324, +59370=>15324, +143909=>15325, +59371=>15325, +38543=>15326, +59372=>15326, +167655=>15327, +59373=>15327, +167526=>15328, +59374=>15328, +167525=>15329, +59375=>15329, +16076=>15330, +59376=>15330, +149997=>15331, +59377=>15331, +150136=>15332, +59378=>15332, +147438=>15333, +59379=>15333, +29714=>15334, +59380=>15334, +29803=>15335, +59381=>15335, +16124=>15336, +59382=>15336, +38721=>15337, +59383=>15337, +168112=>15338, +59384=>15338, +26695=>15339, +59385=>15339, +18973=>15340, +59386=>15340, +168083=>15341, +59387=>15341, +153567=>15342, +59388=>15342, +37736=>15344, +59390=>15344, +166281=>15345, +59391=>15345, +166950=>15346, +59392=>15346, +166703=>15347, +59393=>15347, +156606=>15348, +59394=>15348, +37562=>15349, +59395=>15349, +23313=>15350, +59396=>15350, +35689=>15351, +59397=>15351, +18748=>15352, +59398=>15352, +29689=>15353, +59399=>15353, +147995=>15354, +59400=>15354, +38811=>15355, +59401=>15355, +39224=>15357, +59403=>15357, +134950=>15358, +59404=>15358, +24001=>15359, +59405=>15359, +166853=>15360, +59406=>15360, +150194=>15361, +59407=>15361, +38943=>15362, +59408=>15362, +169178=>15363, +59409=>15363, +37622=>15364, +59410=>15364, +169431=>15365, +59411=>15365, +37349=>15366, +59412=>15366, +17600=>15367, +59413=>15367, +166736=>15368, +59414=>15368, +150119=>15369, +59415=>15369, +166756=>15370, +59416=>15370, +39132=>15371, +59417=>15371, +166469=>15372, +59418=>15372, +16128=>15373, +59419=>15373, +37418=>15374, +59420=>15374, +18725=>15375, +59421=>15375, +33812=>15376, +59422=>15376, +39227=>15377, +59423=>15377, +39245=>15378, +59424=>15378, +162566=>15379, +59425=>15379, +15869=>15380, +59426=>15380, +19311=>15382, +59428=>15382, +39338=>15383, +59429=>15383, +39516=>15384, +59430=>15384, +166757=>15385, +59431=>15385, +153800=>15386, +59432=>15386, +27279=>15387, +59433=>15387, +39457=>15388, +59434=>15388, +23294=>15389, +59435=>15389, +39471=>15390, +59436=>15390, +170225=>15391, +59437=>15391, +19344=>15392, +59438=>15392, +170312=>15393, +59439=>15393, +39356=>15394, +59440=>15394, +19389=>15395, +59441=>15395, +19351=>15396, +59442=>15396, +37757=>15397, +59443=>15397, +22642=>15398, +59444=>15398, +135938=>15399, +59445=>15399, +22562=>15400, +59446=>15400, +149944=>15401, +59447=>15401, +136424=>15402, +59448=>15402, +30788=>15403, +59449=>15403, +141087=>15404, +59450=>15404, +146872=>15405, +59451=>15405, +26821=>15406, +59452=>15406, +15741=>15407, +59453=>15407, +37976=>15408, +59454=>15408, +14631=>15409, +59455=>15409, +24912=>15410, +59456=>15410, +141185=>15411, +59457=>15411, +141675=>15412, +59458=>15412, +24839=>15413, +59459=>15413, +40015=>15414, +59460=>15414, +40019=>15415, +59461=>15415, +40059=>15416, +59462=>15416, +39989=>15417, +59463=>15417, +39952=>15418, +59464=>15418, +39807=>15419, +59465=>15419, +39887=>15420, +59466=>15420, +171565=>15421, +59467=>15421, +39839=>15422, +59468=>15422, +172533=>15423, +59469=>15423, +172286=>15424, +59470=>15424, +40225=>15425, +59471=>15425, +19630=>15426, +59472=>15426, +147716=>15427, +59473=>15427, +40472=>15428, +59474=>15428, +19632=>15429, +59475=>15429, +40204=>15430, +59476=>15430, +172468=>15431, +59477=>15431, +172269=>15432, +59478=>15432, +172275=>15433, +59479=>15433, +170287=>15434, +59480=>15434, +40357=>15435, +59481=>15435, +33981=>15436, +59482=>15436, +159250=>15437, +59483=>15437, +159711=>15438, +59484=>15438, +158594=>15439, +59485=>15439, +34300=>15440, +59486=>15440, +17715=>15441, +59487=>15441, +159140=>15442, +59488=>15442, +159364=>15443, +59489=>15443, +159216=>15444, +59490=>15444, +33824=>15445, +59491=>15445, +34286=>15446, +59492=>15446, +159232=>15447, +59493=>15447, +145367=>15448, +59494=>15448, +155748=>15449, +59495=>15449, +31202=>15450, +59496=>15450, +144796=>15451, +59497=>15451, +144960=>15452, +59498=>15452, +149982=>15453, +59500=>15453, +15714=>15454, +59501=>15454, +37851=>15455, +59502=>15455, +37566=>15456, +59503=>15456, +37704=>15457, +59504=>15457, +131775=>15458, +59505=>15458, +30905=>15459, +59506=>15459, +37495=>15460, +59507=>15460, +37965=>15461, +59508=>15461, +20452=>15462, +59509=>15462, +13376=>15463, +59510=>15463, +36964=>15464, +59511=>15464, +152925=>15465, +59512=>15465, +30781=>15466, +59513=>15466, +30804=>15467, +59514=>15467, +30902=>15468, +59515=>15468, +30795=>15469, +59516=>15469, +137047=>15470, +59517=>15470, +143817=>15471, +59518=>15471, +149825=>15472, +59519=>15472, +13978=>15473, +59520=>15473, +20338=>15474, +59521=>15474, +28634=>15475, +59522=>15475, +28633=>15476, +59523=>15476, +28702=>15478, +59524=>15478, +59525=>15478, +21524=>15479, +59526=>15479, +147893=>15480, +59527=>15480, +22459=>15481, +59528=>15481, +22771=>15482, +59529=>15482, +22410=>15483, +59530=>15483, +40214=>15484, +59531=>15484, +22487=>15485, +59532=>15485, +28980=>15486, +59533=>15486, +13487=>15487, +59534=>15487, +147884=>15488, +59535=>15488, +29163=>15489, +59536=>15489, +158784=>15490, +59537=>15490, +151447=>15491, +59538=>15491, +137141=>15493, +59540=>15493, +166473=>15494, +59541=>15494, +24844=>15495, +59542=>15495, +23246=>15496, +59543=>15496, +23051=>15497, +59544=>15497, +17084=>15498, +59545=>15498, +148616=>15499, +59546=>15499, +14124=>15500, +59547=>15500, +19323=>15501, +59548=>15501, +166396=>15502, +59549=>15502, +37819=>15503, +59550=>15503, +37816=>15504, +59551=>15504, +137430=>15505, +59552=>15505, +134941=>15506, +59553=>15506, +33906=>15507, +59554=>15507, +158912=>15508, +59555=>15508, +136211=>15509, +59556=>15509, +148218=>15510, +59557=>15510, +142374=>15511, +59558=>15511, +148417=>15512, +59559=>15512, +22932=>15513, +59560=>15513, +146871=>15514, +59561=>15514, +157505=>15515, +59562=>15515, +32168=>15516, +59563=>15516, +155995=>15517, +59564=>15517, +155812=>15518, +59565=>15518, +149945=>15519, +59566=>15519, +149899=>15520, +59567=>15520, +166394=>15521, +59568=>15521, +37605=>15522, +59569=>15522, +29666=>15523, +59570=>15523, +16105=>15524, +59571=>15524, +29876=>15525, +59572=>15525, +166755=>15526, +59573=>15526, +137375=>15527, +59574=>15527, +16097=>15528, +59575=>15528, +150195=>15529, +59576=>15529, +27352=>15530, +59577=>15530, +29683=>15531, +59578=>15531, +29691=>15532, +59579=>15532, +16086=>15533, +59580=>15533, +150078=>15534, +59581=>15534, +150164=>15535, +59582=>15535, +137177=>15536, +59583=>15536, +150118=>15537, +59584=>15537, +132007=>15538, +59585=>15538, +136228=>15539, +59586=>15539, +149989=>15540, +59587=>15540, +29768=>15541, +59588=>15541, +149782=>15542, +59589=>15542, +28837=>15543, +59590=>15543, +149878=>15544, +59591=>15544, +37508=>15545, +59592=>15545, +29670=>15546, +59593=>15546, +37727=>15547, +59594=>15547, +132350=>15548, +59595=>15548, +37681=>15549, +59596=>15549, +166606=>15550, +59597=>15550, +166422=>15551, +59598=>15551, +37766=>15552, +59599=>15552, +166887=>15553, +59600=>15553, +153045=>15554, +59601=>15554, +18741=>15555, +59602=>15555, +166530=>15556, +59603=>15556, +29035=>15557, +59604=>15557, +149827=>15558, +59605=>15558, +134399=>15559, +59606=>15559, +22180=>15560, +59607=>15560, +132634=>15561, +59608=>15561, +134123=>15562, +59609=>15562, +134328=>15563, +59610=>15563, +21762=>15564, +59611=>15564, +31172=>15565, +59612=>15565, +137210=>15566, +59613=>15566, +32254=>15567, +59614=>15567, +136898=>15568, +59615=>15568, +150096=>15569, +59616=>15569, +137298=>15570, +59617=>15570, +17710=>15571, +59618=>15571, +37889=>15572, +59619=>15572, +14090=>15573, +59620=>15573, +166592=>15574, +59621=>15574, +149933=>15575, +59622=>15575, +22960=>15576, +59623=>15576, +137407=>15577, +59624=>15577, +137347=>15578, +59625=>15578, +160900=>15579, +59626=>15579, +23201=>15580, +59627=>15580, +14050=>15581, +59628=>15581, +146779=>15582, +59629=>15582, +14000=>15583, +59630=>15583, +37471=>15584, +59631=>15584, +23161=>15585, +59632=>15585, +166529=>15586, +59633=>15586, +137314=>15587, +59634=>15587, +37748=>15588, +59635=>15588, +15565=>15589, +59636=>15589, +133812=>15590, +59637=>15590, +19094=>15591, +59638=>15591, +14730=>15592, +59639=>15592, +20724=>15593, +59640=>15593, +15721=>15594, +59641=>15594, +15692=>15595, +59642=>15595, +136092=>15596, +59643=>15596, +29045=>15597, +59644=>15597, +17147=>15598, +59645=>15598, +164376=>15599, +59646=>15599, +28175=>15600, +59647=>15600, +168164=>15601, +59648=>15601, +17643=>15602, +59649=>15602, +27991=>15603, +59650=>15603, +163407=>15604, +59651=>15604, +28775=>15605, +59652=>15605, +27823=>15606, +59653=>15606, +15574=>15607, +59654=>15607, +147437=>15608, +59655=>15608, +146989=>15609, +59656=>15609, +28162=>15610, +59657=>15610, +28428=>15611, +59658=>15611, +15727=>15612, +59659=>15612, +132085=>15613, +59660=>15613, +30033=>15614, +59661=>15614, +14012=>15615, +59662=>15615, +13512=>15616, +59663=>15616, +18048=>15617, +59664=>15617, +16090=>15618, +59665=>15618, +18545=>15619, +59666=>15619, +22980=>15620, +59667=>15620, +37486=>15621, +59668=>15621, +18750=>15622, +59669=>15622, +36673=>15623, +59670=>15623, +166940=>15624, +59671=>15624, +158656=>15625, +59672=>15625, +22546=>15626, +59673=>15626, +22472=>15627, +59674=>15627, +14038=>15628, +59675=>15628, +136274=>15629, +59676=>15629, +28926=>15630, +59677=>15630, +148322=>15631, +59678=>15631, +150129=>15632, +59679=>15632, +143331=>15633, +59680=>15633, +135856=>15634, +59681=>15634, +140221=>15635, +59682=>15635, +26809=>15636, +59683=>15636, +26983=>15637, +59684=>15637, +136088=>15638, +59685=>15638, +144613=>15639, +59686=>15639, +162804=>15640, +59687=>15640, +145119=>15641, +59688=>15641, +166531=>15642, +59689=>15642, +145366=>15643, +59690=>15643, +144378=>15644, +59691=>15644, +150687=>15645, +59692=>15645, +27162=>15646, +59693=>15646, +145069=>15647, +59694=>15647, +158903=>15648, +59695=>15648, +33854=>15649, +59696=>15649, +17631=>15650, +59697=>15650, +17614=>15651, +59698=>15651, +159014=>15652, +59699=>15652, +159057=>15653, +59700=>15653, +158850=>15654, +59701=>15654, +159710=>15655, +59702=>15655, +33597=>15658, +59705=>15658, +137018=>15659, +59706=>15659, +33773=>15660, +59707=>15660, +158848=>15661, +59708=>15661, +159827=>15662, +59709=>15662, +137179=>15663, +59710=>15663, +22921=>15664, +59711=>15664, +23170=>15665, +59712=>15665, +137139=>15666, +59713=>15666, +23137=>15667, +59714=>15667, +23153=>15668, +59715=>15668, +137477=>15669, +59716=>15669, +147964=>15670, +59717=>15670, +14125=>15671, +59718=>15671, +23023=>15672, +59719=>15672, +137020=>15673, +59720=>15673, +14023=>15674, +59721=>15674, +29070=>15675, +59722=>15675, +37776=>15676, +59723=>15676, +26266=>15677, +59724=>15677, +148133=>15678, +59725=>15678, +23150=>15679, +59726=>15679, +23083=>15680, +59727=>15680, +148115=>15681, +59728=>15681, +27179=>15682, +59729=>15682, +147193=>15683, +59730=>15683, +161590=>15684, +59731=>15684, +148571=>15685, +59732=>15685, +148170=>15686, +59733=>15686, +28957=>15687, +59734=>15687, +148057=>15688, +59735=>15688, +166369=>15689, +59736=>15689, +20400=>15690, +59737=>15690, +159016=>15691, +59738=>15691, +23746=>15692, +59739=>15692, +148686=>15693, +59740=>15693, +163405=>15694, +59741=>15694, +148413=>15695, +59742=>15695, +27148=>15696, +59743=>15696, +148054=>15697, +59744=>15697, +135940=>15698, +59745=>15698, +28979=>15700, +59747=>15700, +148457=>15701, +59748=>15701, +15781=>15702, +59749=>15702, +27871=>15703, +59750=>15703, +194597=>15704, +59751=>15704, +23019=>15705, +59754=>15705, +24412=>15706, +59757=>15706, +59764=>15707, +144128=>15707, +31955=>15708, +59776=>15708, +59783=>15709, +162548=>15709, +59786=>15710, +153334=>15710, +162584=>15711, +59790=>15711, +36972=>15712, +59791=>15712, +33270=>15713, +59795=>15713, +30476=>15714, +59797=>15714, +27810=>15715, +59799=>15715, +22269=>15716, +59800=>15716, +22633=>15717, +59828=>15717, +26465=>15718, +59832=>15718, +23646=>15719, +59838=>15719, +22770=>15720, +59841=>15720, +28857=>15721, +59843=>15721, +26627=>15722, +59853=>15722, +59859=>15723, +36795=>15723, +59861=>15724, +36796=>15724, +20001=>15725, +59871=>15725, +31545=>15726, +59898=>15726, +15820=>15727, +59902=>15727, +29482=>15728, +57990=>15728, +59909=>15728, +30048=>15729, +59912=>15729, +22586=>15730, +59920=>15730, +33446=>15731, +59932=>15731, +27018=>15732, +59940=>15732, +24803=>15733, +59944=>15733, +20206=>15734, +59984=>15734, +39364=>15735, +60002=>15735, +40639=>15736, +60023=>15736, +21249=>15737, +60025=>15737, +26528=>15738, +60038=>15738, +24808=>15739, +60046=>15739, +20916=>15740, +60053=>15740, +31363=>15741, +60064=>15741, +39994=>15742, +60075=>15742, +31432=>15743, +60093=>15743, +26906=>15744, +60098=>15744, +22956=>15745, +60100=>15745, +22592=>15746, +60102=>15746, +21610=>15747, +60114=>15747, +24807=>15748, +60123=>15748, +22138=>15749, +60125=>15749, +26965=>15750, +60132=>15750, +39983=>15751, +60133=>15751, +34725=>15752, +60134=>15752, +23584=>15753, +60141=>15753, +24075=>15754, +60143=>15754, +26398=>15755, +60147=>15755, +33965=>15756, +60157=>15756, +35713=>15757, +60161=>15757, +20088=>15758, +60166=>15758, +25283=>15759, +60176=>15759, +26709=>15760, +60180=>15760, +33533=>15762, +60190=>15762, +35237=>15763, +60194=>15763, +36768=>15764, +60196=>15764, +38840=>15765, +60198=>15765, +38983=>15766, +60200=>15766, +39613=>15767, +60201=>15767, +24497=>15768, +60218=>15768, +26184=>15769, +60219=>15769, +26303=>15770, +60220=>15770, +162425=>15771, +60221=>15771, +60225=>15773, +149946=>15773, +60230=>15776, +131910=>15776, +26382=>15777, +60232=>15777, +26904=>15778, +60233=>15778, +161367=>15779, +60235=>15779, +155618=>15780, +60236=>15780, +161278=>15781, +60239=>15781, +139418=>15782, +60240=>15782, +18640=>15783, +60241=>15783, +19128=>15784, +60242=>15784, +60244=>15785, +166554=>15785, +60247=>15786, +147515=>15786, +150085=>15787, +60250=>15787, +132554=>15788, +60251=>15788, +20946=>15789, +60252=>15789, +132625=>15790, +60253=>15790, +22943=>15791, +60254=>15791, +138920=>15792, +60255=>15792, +15294=>15793, +60256=>15793, +146687=>15794, +60257=>15794, +14747=>15795, +60262=>15795, +165352=>15796, +60264=>15796, +170441=>15797, +60265=>15797, +14178=>15798, +60266=>15798, +139715=>15799, +60267=>15799, +35678=>15800, +60268=>15800, +166734=>15801, +60269=>15801, +29193=>15803, +60274=>15803, +60276=>15804, +134264=>15804, +132985=>15805, +60280=>15805, +36570=>15806, +60281=>15806, +21135=>15807, +60283=>15807, +29041=>15808, +60285=>15808, +147274=>15809, +60288=>15809, +150183=>15810, +60289=>15810, +21948=>15811, +60290=>15811, +60293=>15812, +158546=>15812, +13427=>15813, +60295=>15813, +60297=>15814, +161330=>15814, +18200=>15815, +60299=>15815, +60303=>15816, +149823=>15816, +20582=>15817, +60305=>15817, +13563=>15818, +60306=>15818, +144332=>15819, +60307=>15819, +18300=>15821, +60310=>15821, +166216=>15822, +60311=>15822, +60315=>15823, +138640=>15823, +162834=>15825, +60320=>15825, +36950=>15826, +60321=>15826, +151450=>15827, +60323=>15827, +35682=>15828, +60324=>15828, +23899=>15829, +60327=>15829, +158711=>15830, +60328=>15830, +137500=>15832, +60331=>15832, +35562=>15833, +60332=>15833, +150006=>15834, +60333=>15834, +60335=>15835, +147439=>15835, +19392=>15836, +60337=>15836, +141083=>15837, +60340=>15837, +37989=>15838, +60341=>15838, +153569=>15839, +60342=>15839, +24981=>15840, +60343=>15840, +23079=>15841, +60344=>15841, +194765=>15842, +60345=>15842, +194566=>15843, +60348=>15844, +148769=>15844, +20074=>15845, +60350=>15845, +149812=>15846, +60351=>15846, +38486=>15847, +60352=>15847, +28047=>15848, +60353=>15848, +158909=>15849, +60354=>15849, +35191=>15850, +60356=>15850, +60359=>15851, +156689=>15851, +31554=>15853, +60363=>15853, +168128=>15854, +60364=>15854, +133649=>15855, +60365=>15855, +31301=>15857, +60369=>15857, +39462=>15858, +60372=>15858, +13919=>15859, +60374=>15859, +156777=>15860, +60375=>15860, +131105=>15861, +60376=>15861, +31107=>15862, +60377=>15862, +23852=>15863, +60380=>15863, +144665=>15864, +60381=>15864, +18128=>15866, +60384=>15866, +30011=>15867, +60386=>15867, +34917=>15868, +60387=>15868, +22710=>15869, +60389=>15869, +14108=>15870, +60390=>15870, +140685=>15871, +60391=>15871, +15444=>15872, +60394=>15872, +37505=>15873, +60397=>15873, +139642=>15874, +60398=>15874, +37680=>15875, +60400=>15875, +149968=>15876, +60402=>15876, +27705=>15877, +60403=>15877, +134904=>15878, +60406=>15878, +34855=>15879, +60407=>15879, +35061=>15880, +60408=>15880, +141606=>15881, +60409=>15881, +164979=>15882, +60410=>15882, +137137=>15883, +60411=>15883, +28344=>15884, +60412=>15884, +150058=>15885, +60413=>15885, +137248=>15886, +60414=>15886, +14756=>15887, +60415=>15887, +17727=>15890, +60419=>15890, +26294=>15891, +60420=>15891, +171181=>15892, +60421=>15892, +170148=>15893, +60422=>15893, +35139=>15894, +60423=>15894, +16607=>15895, +60427=>15895, +136714=>15896, +60428=>15896, +14753=>15897, +60429=>15897, +145199=>15898, +60430=>15898, +164072=>15899, +60431=>15899, +136133=>15900, +60432=>15900, +29101=>15901, +60433=>15901, +33638=>15902, +60434=>15902, +60436=>15903, +168360=>15903, +19639=>15905, +60438=>15905, +159919=>15906, +60439=>15906, +166315=>15907, +60440=>15907, +147834=>15908, +60445=>15908, +31555=>15909, +60446=>15909, +31102=>15910, +60447=>15910, +28597=>15911, +60449=>15911, +172767=>15912, +60450=>15912, +27139=>15913, +60451=>15913, +164632=>15914, +60452=>15914, +21410=>15915, +60453=>15915, +159239=>15916, +60454=>15916, +37823=>15917, +60455=>15917, +26678=>15918, +60456=>15918, +38749=>15919, +59389=>15919, +60457=>15919, +164207=>15920, +60458=>15920, +158133=>15921, +60460=>15921, +136173=>15922, +60461=>15922, +143919=>15923, +60462=>15923, +23941=>15924, +60464=>15924, +166960=>15925, +60465=>15925, +22293=>15926, +60467=>15926, +38947=>15927, +60468=>15927, +166217=>15928, +60469=>15928, +23979=>15929, +60470=>15929, +149896=>15930, +60471=>15930, +26046=>15931, +60472=>15931, +27093=>15932, +60473=>15932, +21458=>15933, +60474=>15933, +150181=>15934, +60475=>15934, +147329=>15935, +60476=>15935, +15377=>15936, +60477=>15936, +26422=>15937, +60478=>15937, +60482=>15938, +139169=>15938, +13770=>15939, +60490=>15939, +18682=>15940, +60493=>15940, +30728=>15942, +60496=>15942, +37461=>15943, +60497=>15943, +17394=>15944, +60499=>15944, +17375=>15945, +60501=>15945, +23032=>15946, +60505=>15946, +22155=>15948, +60518=>15948, +60520=>15949, +169449=>15949, +36882=>15950, +60541=>15950, +21953=>15951, +60546=>15951, +17673=>15952, +60551=>15952, +32383=>15953, +60552=>15953, +28502=>15954, +60553=>15954, +27313=>15955, +60554=>15955, +13540=>15956, +60556=>15956, +161949=>15957, +60558=>15957, +14138=>15958, +60559=>15958, +60562=>15960, +163876=>15960, +60565=>15961, +162366=>15961, +15851=>15962, +60567=>15962, +60569=>15963, +146615=>15963, +156248=>15964, +60574=>15964, +22207=>15965, +60575=>15965, +36366=>15966, +60577=>15966, +23405=>15967, +60578=>15967, +25566=>15968, +60581=>15968, +25904=>15970, +60585=>15970, +22061=>15971, +60586=>15971, +21530=>15972, +60588=>15972, +171416=>15973, +60591=>15973, +19581=>15974, +60592=>15974, +22050=>15975, +60593=>15975, +22046=>15976, +60594=>15976, +32585=>15977, +60595=>15977, +22901=>15978, +60597=>15978, +146752=>15979, +60598=>15979, +34672=>15980, +60599=>15980, +33047=>15981, +60604=>15981, +40286=>15982, +60605=>15982, +36120=>15983, +60606=>15983, +30267=>15984, +60607=>15984, +40005=>15985, +60608=>15985, +30286=>15986, +60609=>15986, +30649=>15987, +60610=>15987, +37701=>15988, +60611=>15988, +21554=>15989, +60612=>15989, +33096=>15990, +60613=>15990, +33527=>15991, +60614=>15991, +22053=>15992, +60615=>15992, +33074=>15993, +60616=>15993, +33816=>15994, +60617=>15994, +32957=>15995, +60618=>15995, +21994=>15996, +60619=>15996, +31074=>15997, +60620=>15997, +22083=>15998, +60621=>15998, +21526=>15999, +60622=>15999, +134813=>16000, +60623=>16000, +13774=>16001, +60624=>16001, +22021=>16002, +57509=>16002, +60625=>16002, +22001=>16003, +60626=>16003, +26353=>16004, +60627=>16004, +164578=>16005, +60628=>16005, +13869=>16006, +60629=>16006, +30004=>16007, +60630=>16007, +22000=>16008, +60631=>16008, +21946=>16009, +60632=>16009, +21655=>16010, +60633=>16010, +21874=>16011, +60634=>16011, +134209=>16012, +60635=>16012, +134294=>16013, +60636=>16013, +24272=>16014, +57652=>16014, +60637=>16014, +134774=>16015, +60639=>16015, +142434=>16016, +60640=>16016, +134818=>16017, +60641=>16017, +40619=>16018, +60642=>16018, +32090=>16019, +60643=>16019, +135285=>16021, +60645=>16021, +25245=>16022, +60646=>16022, +38765=>16023, +60647=>16023, +21652=>16024, +60648=>16024, +36045=>16025, +60649=>16025, +29174=>16026, +60650=>16026, +37238=>16027, +60651=>16027, +25596=>16028, +60652=>16028, +25529=>16029, +60653=>16029, +25598=>16030, +60654=>16030, +21865=>16031, +60655=>16031, +142147=>16032, +60656=>16032, +40050=>16033, +60657=>16033, +143027=>16034, +60658=>16034, +20890=>16035, +60659=>16035, +13535=>16036, +60660=>16036, +134567=>16037, +60661=>16037, +20903=>16038, +60662=>16038, +21581=>16039, +60663=>16039, +21790=>16040, +60664=>16040, +21779=>16041, +60665=>16041, +30310=>16042, +60666=>16042, +36397=>16043, +60667=>16043, +157834=>16044, +60668=>16044, +30129=>16045, +60669=>16045, +32950=>16046, +60670=>16046, +34820=>16047, +60671=>16047, +35015=>16049, +60673=>16049, +33206=>16050, +60674=>16050, +33820=>16051, +60675=>16051, +17644=>16052, +60677=>16052, +29444=>16053, +60678=>16053, +33547=>16054, +60681=>16054, +22139=>16055, +60683=>16055, +37232=>16056, +60690=>16056, +37384=>16057, +60692=>16057, +134905=>16058, +60696=>16058, +29286=>16059, +60697=>16059, +18254=>16060, +60699=>16060, +60701=>16061, +163833=>16061, +16634=>16062, +60703=>16062, +40029=>16063, +60704=>16063, +25887=>16064, +60705=>16064, +18675=>16065, +60707=>16065, +149472=>16066, +60708=>16066, +171388=>16067, +60709=>16067, +60713=>16069, +161187=>16069, +60715=>16070, +155720=>16071, +60716=>16071, +29091=>16072, +60718=>16072, +32398=>16073, +60719=>16073, +40272=>16074, +60720=>16074, +13687=>16075, +60723=>16075, +27826=>16076, +60725=>16076, +21351=>16077, +60726=>16077, +14812=>16078, +60728=>16078, +60731=>16079, +149016=>16079, +33325=>16080, +60734=>16080, +21579=>16081, +60735=>16081, +60739=>16082, +14930=>16083, +60740=>16083, +29556=>16084, +60742=>16084, +171692=>16085, +60743=>16085, +19721=>16086, +60744=>16086, +39917=>16087, +60745=>16087, +19547=>16089, +60748=>16089, +171998=>16090, +60751=>16090, +33884=>16091, +60752=>16091, +60754=>16092, +160434=>16092, +25390=>16093, +60757=>16093, +32037=>16094, +60758=>16094, +14890=>16095, +60761=>16095, +36872=>16096, +60762=>16096, +21196=>16097, +60763=>16097, +15988=>16098, +60764=>16098, +13946=>16099, +60765=>16099, +17897=>16100, +60766=>16100, +132238=>16101, +60767=>16101, +30272=>16102, +60768=>16102, +23280=>16103, +60769=>16103, +134838=>16104, +60770=>16104, +30842=>16105, +60771=>16105, +18358=>16106, +163630=>16106, +60772=>16106, +22695=>16107, +60773=>16107, +16575=>16108, +60774=>16108, +22140=>16109, +60775=>16109, +39819=>16110, +60776=>16110, +23924=>16111, +60777=>16111, +30292=>16112, +60778=>16112, +173108=>16113, +60779=>16113, +40581=>16114, +60780=>16114, +19681=>16115, +60781=>16115, +14331=>16117, +60783=>16117, +24857=>16118, +60784=>16118, +148466=>16119, +60786=>16119, +60787=>16120, +22109=>16121, +60788=>16121, +171526=>16122, +60792=>16122, +21044=>16123, +60793=>16123, +13741=>16124, +60795=>16124, +40316=>16126, +60797=>16126, +31830=>16127, +60798=>16127, +39737=>16128, +60799=>16128, +22494=>16129, +60800=>16129, +23635=>16130, +60802=>16130, +25811=>16131, +60803=>16131, +169168=>16132, +60804=>16132, +156469=>16133, +60805=>16133, +34477=>16134, +60807=>16134, +134440=>16135, +60808=>16135, +134513=>16136, +60811=>16136, +60812=>16137, +20990=>16138, +60813=>16138, +139023=>16139, +60814=>16139, +23950=>16140, +60815=>16140, +38659=>16141, +60816=>16141, +138705=>16142, +60817=>16142, +40577=>16143, +60818=>16143, +36940=>16144, +60819=>16144, +31519=>16145, +60820=>16145, +39682=>16146, +60821=>16146, +23761=>16147, +60822=>16147, +31651=>16148, +60823=>16148, +25192=>16149, +60824=>16149, +25397=>16150, +60825=>16150, +39679=>16151, +60826=>16151, +31695=>16152, +60827=>16152, +39722=>16153, +60828=>16153, +31870=>16154, +60829=>16154, +31810=>16156, +60831=>16156, +31878=>16157, +60832=>16157, +39957=>16158, +60833=>16158, +31740=>16159, +60834=>16159, +39689=>16160, +60835=>16160, +39982=>16162, +40794=>16163, +60839=>16163, +21875=>16164, +60840=>16164, +23491=>16165, +60841=>16165, +20477=>16166, +60842=>16166, +40600=>16167, +60843=>16167, +20466=>16168, +60844=>16168, +21088=>16169, +60845=>16169, +21201=>16170, +60847=>16170, +22375=>16171, +60848=>16171, +20566=>16172, +60849=>16172, +22967=>16173, +60850=>16173, +24082=>16174, +60851=>16174, +38856=>16175, +60852=>16175, +40363=>16176, +60853=>16176, +36700=>16177, +60854=>16177, +21609=>16178, +60855=>16178, +38836=>16179, +60856=>16179, +39232=>16180, +60857=>16180, +38842=>16181, +60858=>16181, +21292=>16182, +60859=>16182, +24880=>16183, +60860=>16183, +26924=>16184, +60861=>16184, +21466=>16185, +60862=>16185, +39946=>16186, +60863=>16186, +40194=>16187, +60864=>16187, +19515=>16188, +60865=>16188, +38465=>16189, +60866=>16189, +27008=>16190, +60867=>16190, +20646=>16191, +60868=>16191, +30022=>16192, +60869=>16192, +137069=>16193, +60870=>16193, +39386=>16194, +60871=>16194, +21107=>16195, +60872=>16195, +60873=>16196, +37209=>16197, +60874=>16197, +38529=>16198, +60875=>16198, +37212=>16199, +60876=>16199, +60877=>16200, +37201=>16201, +60878=>16201, +167575=>16202, +60879=>16202, +25471=>16203, +60880=>16203, +27338=>16204, +60882=>16204, +22033=>16205, +60883=>16205, +37262=>16206, +60884=>16206, +30074=>16207, +60885=>16207, +25221=>16208, +60886=>16208, +29519=>16209, +60888=>16209, +31856=>16210, +60889=>16210, +154657=>16211, +60890=>16211, +60892=>16212, +30422=>16213, +60894=>16213, +39837=>16214, +60895=>16214, +20010=>16215, +60896=>16215, +134356=>16216, +60897=>16216, +33726=>16217, +60898=>16217, +34882=>16218, +60899=>16218, +60900=>16219, +23626=>16220, +60901=>16220, +27072=>16221, +60902=>16221, +21023=>16224, +60905=>16224, +24053=>16225, +60906=>16225, +20174=>16226, +60907=>16226, +27697=>16227, +60908=>16227, +131570=>16228, +60909=>16228, +20281=>16229, +60910=>16229, +21660=>16230, +60911=>16230, +21146=>16232, +60913=>16232, +36226=>16233, +60914=>16233, +13822=>16234, +60915=>16234, +13811=>16236, +60917=>16236, +60918=>16237, +27474=>16238, +60919=>16238, +37244=>16239, +60920=>16239, +40869=>16240, +60921=>16240, +39831=>16241, +60922=>16241, +38958=>16242, +60923=>16242, +39092=>16243, +60924=>16243, +39610=>16244, +60925=>16244, +40616=>16245, +60926=>16245, +40580=>16246, +60927=>16246, +31508=>16247, +60929=>16247, +60930=>16248, +27642=>16249, +60931=>16249, +34840=>16250, +60932=>16250, +32632=>16251, +60933=>16251, +60934=>16252, +22048=>16253, +60935=>16253, +173642=>16254, +60936=>16254, +36471=>16255, +60937=>16255, +40787=>16256, +60938=>16256, +60939=>16257, +36308=>16258, +60940=>16258, +36431=>16259, +60941=>16259, +40476=>16260, +60942=>16260, +36353=>16261, +60943=>16261, +25218=>16262, +60944=>16262, +164733=>16263, +60945=>16263, +36392=>16264, +60946=>16264, +36469=>16265, +60947=>16265, +31443=>16266, +60948=>16266, +31294=>16267, +60950=>16267, +30936=>16268, +60951=>16268, +27882=>16269, +60952=>16269, +35431=>16270, +60953=>16270, +30215=>16271, +60954=>16271, +40742=>16272, +60956=>16272, +27854=>16273, +60957=>16273, +34774=>16274, +60958=>16274, +30147=>16275, +60959=>16275, +172722=>16276, +60960=>16276, +30803=>16277, +60961=>16277, +36108=>16278, +60963=>16278, +29410=>16279, +60964=>16279, +29553=>16280, +60965=>16280, +35629=>16281, +60966=>16281, +29442=>16282, +60967=>16282, +29937=>16283, +60968=>16283, +36075=>16284, +60969=>16284, +150203=>16285, +60970=>16285, +34351=>16286, +60971=>16286, +24506=>16287, +60972=>16287, +34976=>16288, +60973=>16288, +17591=>16289, +60974=>16289, +60975=>16290, +159237=>16291, +60977=>16291, +60978=>16292, +35454=>16293, +60979=>16293, +140571=>16294, +60980=>16294, +60981=>16295, +24829=>16296, +60982=>16296, +30311=>16297, +60983=>16297, +39639=>16298, +60984=>16298, +40260=>16299, +60985=>16299, +37742=>16300, +58859=>16300, +60986=>16300, +39823=>16301, +60987=>16301, +34805=>16302, +60988=>16302, +60989=>16303, +36087=>16305, +60991=>16305, +29484=>16306, +60992=>16306, +38689=>16307, +60993=>16307, +39856=>16308, +60994=>16308, +13782=>16309, +60995=>16309, +29362=>16310, +60996=>16310, +19463=>16311, +60997=>16311, +31825=>16312, +60998=>16312, +39242=>16313, +60999=>16313, +24921=>16314, +61001=>16314, +19460=>16315, +61002=>16315, +40598=>16316, +61003=>16316, +24957=>16317, +61004=>16317, +61005=>16318, +22367=>16319, +61006=>16319, +24943=>16320, +61007=>16320, +25254=>16321, +61008=>16321, +25145=>16322, +61009=>16322, +14940=>16324, +61011=>16324, +25058=>16325, +61012=>16325, +21418=>16326, +61013=>16326, +25444=>16327, +61015=>16327, +26626=>16328, +61016=>16328, +13778=>16329, +61017=>16329, +23895=>16330, +61018=>16330, +36826=>16331, +61020=>16331, +167481=>16332, +61021=>16332, +61022=>16333, +20697=>16334, +61023=>16334, +30982=>16335, +61025=>16335, +21298=>16336, +61026=>16336, +38456=>16337, +61027=>16337, +134971=>16338, +61028=>16338, +16485=>16339, +61029=>16339, +61030=>16340, +30718=>16341, +61031=>16341, +61032=>16342, +31938=>16343, +61033=>16343, +155418=>16344, +61034=>16344, +31962=>16345, +61035=>16345, +31277=>16346, +61036=>16346, +32870=>16347, +61037=>16347, +32867=>16348, +61038=>16348, +32077=>16349, +61039=>16349, +29957=>16350, +61040=>16350, +29938=>16351, +61041=>16351, +35220=>16352, +61042=>16352, +33306=>16353, +61043=>16353, +26380=>16354, +61044=>16354, +32866=>16355, +61045=>16355, +160902=>16356, +61046=>16356, +32859=>16357, +61047=>16357, +29936=>16358, +61048=>16358, +33027=>16359, +61049=>16359, +30500=>16360, +61050=>16360, +35209=>16361, +61051=>16361, +157644=>16362, +61052=>16362, +30035=>16363, +61053=>16363, +34729=>16364, +61055=>16364, +34766=>16365, +61056=>16365, +33224=>16366, +61057=>16366, +34700=>16367, +61058=>16367, +35401=>16368, +61059=>16368, +36013=>16369, +61060=>16369, +35651=>16370, +61061=>16370, +30507=>16371, +61062=>16371, +29944=>16372, +61063=>16372, +34010=>16373, +61064=>16373, +27058=>16374, +61066=>16374, +36262=>16375, +61067=>16375, +61068=>16376, +35241=>16377, +58392=>16377, +61069=>16377, +28089=>16379, +61071=>16379, +34753=>16380, +61072=>16380, +147473=>16381, +61073=>16381, +29927=>16382, +61074=>16382, +15835=>16383, +61075=>16383, +29046=>16384, +61076=>16384, +24740=>16385, +57702=>16385, +61077=>16385, +24988=>16386, +61078=>16386, +15569=>16387, +61079=>16387, +24695=>16389, +61081=>16389, +61082=>16390, +32625=>16391, +61083=>16391, +194850=>16392, +24809=>16393, +61086=>16393, +19326=>16394, +61087=>16394, +132423=>16395, +57344=>16395, +37595=>16396, +57345=>16396, +132575=>16397, +57346=>16397, +147397=>16398, +57347=>16398, +34124=>16399, +57348=>16399, +17077=>16400, +57349=>16400, +29679=>16401, +57350=>16401, +20917=>16402, +57351=>16402, +13897=>16403, +57352=>16403, +149826=>16404, +57353=>16404, +166372=>16405, +57354=>16405, +37700=>16406, +57355=>16406, +137691=>16407, +57356=>16407, +33518=>16408, +57357=>16408, +146632=>16409, +57358=>16409, +30780=>16410, +57359=>16410, +26436=>16411, +57360=>16411, +25311=>16412, +57361=>16412, +149811=>16413, +57362=>16413, +166314=>16414, +57363=>16414, +131744=>16415, +57364=>16415, +158643=>16416, +57365=>16416, +135941=>16417, +57366=>16417, +20395=>16418, +57367=>16418, +140525=>16419, +57368=>16419, +20488=>16420, +57369=>16420, +159017=>16421, +57370=>16421, +162436=>16422, +57371=>16422, +144896=>16423, +57372=>16423, +150193=>16424, +57373=>16424, +140563=>16425, +57374=>16425, +131966=>16427, +57376=>16427, +24484=>16428, +57377=>16428, +131968=>16429, +57378=>16429, +131911=>16430, +57379=>16430, +28379=>16431, +57380=>16431, +132127=>16432, +57381=>16432, +20702=>16433, +20737=>16434, +57383=>16434, +13434=>16435, +57384=>16435, +20750=>16436, +57385=>16436, +39020=>16437, +57386=>16437, +14147=>16438, +57387=>16438, +33814=>16439, +57388=>16439, +149924=>16440, +57389=>16440, +132231=>16441, +57390=>16441, +20832=>16442, +57391=>16442, +144308=>16443, +57392=>16443, +20842=>16444, +57393=>16444, +134143=>16445, +57394=>16445, +139516=>16446, +57395=>16446, +131813=>16447, +57396=>16447, +140592=>16448, +57397=>16448, +132494=>16449, +57398=>16449, +143923=>16450, +57399=>16450, +137603=>16451, +57400=>16451, +23426=>16452, +57401=>16452, +34685=>16453, +57402=>16453, +132531=>16454, +57403=>16454, +146585=>16455, +57404=>16455, +20914=>16456, +57405=>16456, +20920=>16457, +57406=>16457, +40244=>16458, +57407=>16458, +20937=>16459, +57408=>16459, +20943=>16460, +57409=>16460, +20945=>16461, +57410=>16461, +15580=>16462, +57411=>16462, +20947=>16463, +57412=>16463, +150182=>16464, +57413=>16464, +20915=>16465, +57414=>16465, +20973=>16468, +57417=>16468, +33741=>16469, +57418=>16469, +26942=>16470, +57419=>16470, +145197=>16471, +57420=>16471, +24443=>16472, +57421=>16472, +21003=>16473, +57422=>16473, +21030=>16474, +57423=>16474, +21052=>16475, +57424=>16475, +21173=>16476, +57425=>16476, +21079=>16477, +57426=>16477, +21140=>16478, +57427=>16478, +21177=>16479, +57428=>16479, +21189=>16480, +57429=>16480, +31765=>16481, +57430=>16481, +34114=>16482, +57431=>16482, +21216=>16483, +57432=>16483, +34317=>16484, +57433=>16484, +158483=>16485, +57434=>16485, +194601=>16486, +166622=>16487, +57436=>16487, +21833=>16488, +57437=>16488, +28377=>16489, +57438=>16489, +147328=>16490, +57439=>16490, +133460=>16491, +57440=>16491, +147436=>16492, +57441=>16492, +21299=>16493, +57442=>16493, +134114=>16495, +57444=>16495, +27851=>16496, +57445=>16496, +136998=>16497, +57446=>16497, +26651=>16498, +57447=>16498, +29653=>16499, +57448=>16499, +24650=>16500, +57449=>16500, +16042=>16501, +57450=>16501, +14540=>16502, +57451=>16502, +136936=>16503, +57452=>16503, +29149=>16504, +57453=>16504, +17570=>16505, +57454=>16505, +21357=>16506, +57455=>16506, +21364=>16507, +57456=>16507, +165547=>16508, +57457=>16508, +21374=>16509, +57458=>16509, +194610=>16510, +136598=>16511, +57460=>16511, +136723=>16512, +57461=>16512, +30694=>16513, +57462=>16513, +21395=>16514, +57463=>16514, +166555=>16515, +57464=>16515, +21408=>16516, +57465=>16516, +21419=>16517, +57466=>16517, +21422=>16518, +57467=>16518, +29607=>16519, +57468=>16519, +153458=>16520, +57469=>16520, +16217=>16521, +57470=>16521, +29596=>16522, +57471=>16522, +21441=>16523, +57472=>16523, +21445=>16524, +57473=>16524, +27721=>16525, +57474=>16525, +20041=>16526, +57475=>16526, +22526=>16527, +57476=>16527, +21465=>16528, +57477=>16528, +15019=>16529, +57478=>16529, +134031=>16530, +57479=>16530, +21472=>16531, +57480=>16531, +147435=>16532, +57481=>16532, +142755=>16533, +57482=>16533, +21494=>16534, +57483=>16534, +134263=>16535, +57484=>16535, +21523=>16536, +57485=>16536, +28793=>16537, +57486=>16537, +21803=>16538, +57487=>16538, +26199=>16539, +57488=>16539, +27995=>16540, +57489=>16540, +21613=>16541, +57490=>16541, +158547=>16542, +57491=>16542, +134516=>16543, +57492=>16543, +21853=>16544, +57493=>16544, +21647=>16545, +57494=>16545, +21668=>16546, +57495=>16546, +18342=>16547, +57496=>16547, +136973=>16548, +57497=>16548, +134877=>16549, +57498=>16549, +15796=>16550, +57499=>16550, +134477=>16551, +57500=>16551, +166332=>16552, +57501=>16552, +140952=>16553, +57502=>16553, +21831=>16554, +57503=>16554, +19693=>16555, +57504=>16555, +21551=>16556, +57505=>16556, +29719=>16557, +57506=>16557, +21894=>16558, +57507=>16558, +21929=>16559, +57508=>16559, +137431=>16561, +57510=>16561, +147514=>16562, +57511=>16562, +17746=>16563, +57512=>16563, +148533=>16564, +57513=>16564, +26291=>16565, +57514=>16565, +135348=>16566, +57515=>16566, +22071=>16567, +57516=>16567, +26317=>16568, +57517=>16568, +144010=>16569, +57518=>16569, +26276=>16570, +57519=>16570, +22093=>16572, +57521=>16572, +22095=>16573, +57522=>16573, +30961=>16574, +57523=>16574, +22257=>16575, +57524=>16575, +38791=>16576, +57525=>16576, +21502=>16577, +57526=>16577, +22272=>16578, +57527=>16578, +22255=>16579, +57528=>16579, +22253=>16580, +57529=>16580, +166758=>16581, +57530=>16581, +13859=>16582, +57531=>16582, +135759=>16583, +57532=>16583, +22342=>16584, +57533=>16584, +147877=>16585, +57534=>16585, +27758=>16586, +57535=>16586, +28811=>16587, +57536=>16587, +22338=>16588, +57537=>16588, +14001=>16589, +57538=>16589, +158846=>16590, +57539=>16590, +22502=>16591, +57540=>16591, +136214=>16592, +57541=>16592, +22531=>16593, +57542=>16593, +136276=>16594, +57543=>16594, +148323=>16595, +57544=>16595, +22566=>16596, +57545=>16596, +150517=>16597, +57546=>16597, +22559=>16598, +22698=>16599, +57548=>16599, +13665=>16600, +57549=>16600, +22752=>16601, +57550=>16601, +22748=>16602, +57551=>16602, +135740=>16603, +57552=>16603, +22779=>16604, +57553=>16604, +23551=>16605, +57554=>16605, +22339=>16606, +57555=>16606, +172368=>16607, +57556=>16607, +148088=>16608, +57557=>16608, +37843=>16609, +57558=>16609, +13729=>16610, +57559=>16610, +22815=>16611, +57560=>16611, +26790=>16612, +57561=>16612, +14019=>16613, +57562=>16613, +28249=>16614, +57563=>16614, +136766=>16615, +57564=>16615, +23076=>16616, +57565=>16616, +136850=>16618, +57567=>16618, +34053=>16619, +57568=>16619, +22985=>16620, +57569=>16620, +134478=>16621, +57570=>16621, +158849=>16622, +57571=>16622, +159018=>16623, +57572=>16623, +137180=>16624, +57573=>16624, +23001=>16625, +57574=>16625, +137211=>16626, +57575=>16626, +137138=>16627, +57576=>16627, +159142=>16628, +57577=>16628, +28017=>16629, +57578=>16629, +137256=>16630, +57579=>16630, +136917=>16631, +57580=>16631, +23033=>16632, +57581=>16632, +159301=>16633, +57582=>16633, +23211=>16634, +57583=>16634, +23139=>16635, +57584=>16635, +14054=>16636, +57585=>16636, +149929=>16637, +57586=>16637, +14088=>16639, +57588=>16639, +23190=>16640, +57589=>16640, +29797=>16641, +57590=>16641, +23251=>16642, +57591=>16642, +159649=>16643, +57592=>16643, +140628=>16644, +57593=>16644, +137489=>16645, +57595=>16645, +14130=>16646, +57596=>16646, +136888=>16647, +57597=>16647, +24195=>16648, +57598=>16648, +21200=>16649, +57599=>16649, +23414=>16650, +57600=>16650, +25992=>16651, +57601=>16651, +23420=>16652, +57602=>16652, +162318=>16653, +57603=>16653, +16388=>16654, +57604=>16654, +18525=>16655, +57605=>16655, +131588=>16656, +57606=>16656, +23509=>16657, +57607=>16657, +137780=>16658, +57609=>16658, +154060=>16659, +57610=>16659, +132517=>16660, +57611=>16660, +23539=>16661, +57612=>16661, +23453=>16662, +57613=>16662, +19728=>16663, +57614=>16663, +23557=>16664, +57615=>16664, +138052=>16665, +57616=>16665, +23571=>16666, +57617=>16666, +29646=>16667, +57618=>16667, +23572=>16668, +57619=>16668, +138405=>16669, +57620=>16669, +158504=>16670, +57621=>16670, +23625=>16671, +57622=>16671, +18653=>16672, +57623=>16672, +23685=>16673, +57624=>16673, +23785=>16674, +57625=>16674, +23791=>16675, +57626=>16675, +23947=>16676, +57627=>16676, +138745=>16677, +57628=>16677, +138807=>16678, +57629=>16678, +23824=>16679, +57630=>16679, +23832=>16680, +57631=>16680, +23878=>16681, +57632=>16681, +138916=>16682, +57633=>16682, +23738=>16683, +57634=>16683, +24023=>16684, +57635=>16684, +33532=>16685, +57636=>16685, +14381=>16686, +57637=>16686, +149761=>16687, +57638=>16687, +139337=>16688, +57639=>16688, +139635=>16689, +57640=>16689, +33415=>16690, +57641=>16690, +14390=>16691, +57642=>16691, +15298=>16692, +57643=>16692, +24110=>16693, +57644=>16693, +27274=>16694, +57645=>16694, +57647=>16696, +148668=>16697, +57648=>16697, +134355=>16698, +57649=>16698, +21414=>16699, +57650=>16699, +20151=>16700, +57651=>16700, +21416=>16702, +57653=>16702, +137073=>16703, +57654=>16703, +24073=>16704, +57655=>16704, +57656=>16705, +164994=>16706, +57657=>16706, +24313=>16707, +57658=>16707, +24315=>16708, +57659=>16708, +14496=>16709, +57660=>16709, +24316=>16710, +57661=>16710, +26686=>16711, +57662=>16711, +37915=>16712, +57663=>16712, +24333=>16713, +57664=>16713, +131521=>16714, +57665=>16714, +194708=>16715, +57666=>16715, +15070=>16716, +57667=>16716, +135994=>16717, +57669=>16717, +24378=>16718, +57670=>16718, +157832=>16719, +57671=>16719, +140240=>16720, +57672=>16720, +140401=>16721, +57674=>16721, +24419=>16722, +57675=>16722, +159342=>16723, +57677=>16723, +24434=>16724, +57678=>16724, +37696=>16725, +57679=>16725, +166454=>16726, +57680=>16726, +24487=>16727, +57681=>16727, +23990=>16728, +57682=>16728, +15711=>16729, +57683=>16729, +152144=>16730, +57684=>16730, +139114=>16731, +57685=>16731, +159992=>16732, +57686=>16732, +140904=>16733, +57687=>16733, +37334=>16734, +57688=>16734, +131742=>16735, +57689=>16735, +166441=>16736, +57690=>16736, +24625=>16737, +57691=>16737, +26245=>16738, +57692=>16738, +14691=>16739, +57694=>16739, +15815=>16740, +57695=>16740, +13881=>16741, +57696=>16741, +22416=>16742, +57697=>16742, +141236=>16743, +57698=>16743, +31089=>16744, +57699=>16744, +15936=>16745, +57700=>16745, +24734=>16746, +57701=>16746, +24810=>16748, +149890=>16749, +57704=>16749, +149903=>16750, +57705=>16750, +162387=>16751, +57706=>16751, +29860=>16752, +57707=>16752, +20705=>16753, +57708=>16753, +23200=>16754, +57709=>16754, +24932=>16755, +57710=>16755, +24898=>16756, +57712=>16756, +194726=>16757, +57713=>16757, +159442=>16758, +57714=>16758, +24961=>16759, +57715=>16759, +20980=>16760, +57716=>16760, +132694=>16761, +57717=>16761, +24967=>16762, +57718=>16762, +23466=>16763, +57719=>16763, +147383=>16764, +57720=>16764, +141407=>16765, +57721=>16765, +25043=>16766, +57722=>16766, +166813=>16767, +57723=>16767, +170333=>16768, +57724=>16768, +25040=>16769, +57725=>16769, +14642=>16770, +57726=>16770, +141696=>16771, +57727=>16771, +141505=>16772, +57728=>16772, +24611=>16773, +57729=>16773, +24924=>16774, +57730=>16774, +25886=>16775, +57731=>16775, +25483=>16776, +57732=>16776, +131352=>16777, +57733=>16777, +25285=>16778, +57734=>16778, +137072=>16779, +57735=>16779, +25301=>16780, +57736=>16780, +142861=>16781, +57737=>16781, +25452=>16782, +57738=>16782, +149983=>16783, +57739=>16783, +14871=>16784, +57740=>16784, +25656=>16785, +57741=>16785, +25592=>16786, +57742=>16786, +136078=>16787, +57743=>16787, +137212=>16788, +57744=>16788, +28554=>16789, +57746=>16789, +142902=>16790, +57747=>16790, +153373=>16792, +57750=>16792, +25825=>16793, +57751=>16793, +25829=>16794, +57752=>16794, +38011=>16795, +57753=>16795, +14950=>16796, +57754=>16796, +25658=>16797, +57755=>16797, +14935=>16798, +57756=>16798, +25933=>16799, +57757=>16799, +28438=>16800, +57758=>16800, +150056=>16801, +57759=>16801, +150051=>16802, +57760=>16802, +25989=>16803, +57761=>16803, +25965=>16804, +57762=>16804, +25951=>16805, +57763=>16805, +26037=>16807, +57765=>16807, +149824=>16808, +57766=>16808, +19255=>16809, +57767=>16809, +26065=>16810, +57768=>16810, +16600=>16811, +57769=>16811, +137257=>16812, +57770=>16812, +57771=>16813, +26083=>16814, +57772=>16814, +24543=>16815, +57773=>16815, +144384=>16816, +57774=>16816, +26136=>16817, +57775=>16817, +57776=>16818, +143863=>16818, +57777=>16819, +143864=>16819, +26180=>16820, +57778=>16820, +57779=>16821, +143780=>16821, +57780=>16822, +143781=>16822, +26187=>16823, +57781=>16823, +134773=>16824, +57782=>16824, +26215=>16825, +57783=>16825, +152038=>16826, +57784=>16826, +26227=>16827, +57785=>16827, +64018=>16828, +143921=>16829, +57788=>16829, +165364=>16830, +57789=>16830, +143816=>16831, +57790=>16831, +152339=>16832, +57791=>16832, +30661=>16833, +57792=>16833, +141559=>16834, +57793=>16834, +39332=>16835, +57794=>16835, +26370=>16836, +57795=>16836, +148380=>16837, +57796=>16837, +150049=>16838, +57797=>16838, +27130=>16839, +57799=>16839, +145346=>16840, +57800=>16840, +194779=>16841, +26471=>16842, +57802=>16842, +26466=>16843, +57803=>16843, +147917=>16844, +57804=>16844, +168173=>16845, +57805=>16845, +26583=>16846, +57806=>16846, +17641=>16847, +57807=>16847, +26658=>16848, +57808=>16848, +28240=>16849, +57809=>16849, +37436=>16850, +57810=>16850, +26625=>16851, +57811=>16851, +144358=>16852, +57812=>16852, +159136=>16853, +57813=>16853, +26717=>16854, +57814=>16854, +144495=>16855, +57815=>16855, +27105=>16856, +57816=>16856, +27147=>16857, +57817=>16857, +166623=>16858, +57818=>16858, +26995=>16859, +57819=>16859, +26819=>16860, +57820=>16860, +144845=>16861, +57821=>16861, +26881=>16862, +57822=>16862, +26880=>16863, +57823=>16863, +14849=>16864, +57825=>16864, +144956=>16865, +57826=>16865, +15232=>16866, +57827=>16866, +26540=>16867, +57828=>16867, +26977=>16868, +57829=>16868, +166474=>16869, +57830=>16869, +17148=>16870, +57831=>16870, +26934=>16871, +57832=>16871, +27032=>16872, +57833=>16872, +15265=>16873, +57834=>16873, +132041=>16874, +57835=>16874, +33635=>16875, +57836=>16875, +20624=>16876, +57837=>16876, +27129=>16877, +57838=>16877, +144985=>16878, +57839=>16878, +139562=>16879, +57840=>16879, +27205=>16880, +57841=>16880, +145155=>16881, +57842=>16881, +27293=>16882, +57843=>16882, +15347=>16883, +57844=>16883, +26545=>16884, +57845=>16884, +27336=>16885, +57846=>16885, +168348=>16886, +57847=>16886, +15373=>16887, +57848=>16887, +27421=>16888, +57849=>16888, +133411=>16889, +57850=>16889, +24798=>16890, +60308=>16890, +57851=>16890, +27445=>16891, +57852=>16891, +27508=>16892, +57853=>16892, +141261=>16893, +57854=>16893, +28341=>16894, +57855=>16894, +57856=>16895, +146139=>16895, +137560=>16897, +57858=>16897, +14144=>16898, +57859=>16898, +21537=>16899, +57860=>16899, +146266=>16900, +57861=>16900, +27617=>16901, +57862=>16901, +147196=>16902, +57863=>16902, +27612=>16903, +57864=>16903, +27703=>16904, +57865=>16904, +140427=>16905, +57866=>16905, +149745=>16906, +57867=>16906, +158545=>16907, +57868=>16907, +27738=>16908, +57869=>16908, +33318=>16909, +57870=>16909, +27769=>16910, +57871=>16910, +146876=>16911, +57872=>16911, +17605=>16912, +57873=>16912, +146877=>16913, +57874=>16913, +147876=>16914, +57875=>16914, +149772=>16915, +57876=>16915, +149760=>16916, +57877=>16916, +146633=>16917, +57878=>16917, +14053=>16918, +57879=>16918, +15595=>16919, +57880=>16919, +134450=>16920, +57881=>16920, +39811=>16921, +57882=>16921, +143865=>16922, +57883=>16922, +140433=>16923, +57884=>16923, +32655=>16924, +57885=>16924, +26679=>16925, +57886=>16925, +159013=>16926, +57887=>16926, +159137=>16927, +57888=>16927, +159211=>16928, +57889=>16928, +28054=>16929, +57890=>16929, +27996=>16930, +57891=>16930, +28284=>16931, +57892=>16931, +28420=>16932, +57893=>16932, +149887=>16933, +57894=>16933, +147589=>16934, +57895=>16934, +159346=>16935, +57896=>16935, +34099=>16936, +57897=>16936, +159604=>16937, +57898=>16937, +20935=>16938, +57899=>16938, +33838=>16941, +57902=>16941, +166689=>16942, +57903=>16942, +194824=>16943, +146991=>16944, +57905=>16944, +29779=>16945, +57906=>16945, +147330=>16946, +57907=>16946, +31180=>16947, +57908=>16947, +28239=>16948, +57909=>16948, +23185=>16949, +57910=>16949, +143435=>16950, +57911=>16950, +28664=>16951, +57912=>16951, +14093=>16952, +57913=>16952, +28573=>16953, +57914=>16953, +146992=>16954, +57915=>16954, +28410=>16955, +57916=>16955, +136343=>16956, +57917=>16956, +147517=>16957, +57918=>16957, +17749=>16958, +57919=>16958, +37872=>16959, +57920=>16959, +28484=>16960, +57921=>16960, +28508=>16961, +57922=>16961, +15694=>16962, +57923=>16962, +28532=>16963, +57924=>16963, +168304=>16964, +57925=>16964, +15675=>16965, +57926=>16965, +28575=>16966, +57927=>16966, +147780=>16967, +57928=>16967, +28627=>16968, +57929=>16968, +147601=>16969, +57930=>16969, +147797=>16970, +57931=>16970, +147513=>16971, +57932=>16971, +147440=>16972, +57933=>16972, +147380=>16973, +57934=>16973, +147775=>16974, +57935=>16974, +20959=>16975, +57936=>16975, +57937=>16976, +147798=>16976, +57938=>16977, +147799=>16977, +147776=>16978, +57939=>16978, +156125=>16979, +57940=>16979, +28747=>16980, +57941=>16980, +28798=>16981, +57942=>16981, +28839=>16982, +57943=>16982, +28876=>16984, +57945=>16984, +28885=>16985, +57946=>16985, +28886=>16986, +57947=>16986, +28895=>16987, +57948=>16987, +16644=>16988, +57949=>16988, +15848=>16989, +57950=>16989, +29108=>16990, +57951=>16990, +29078=>16991, +57952=>16991, +148087=>16992, +57953=>16992, +28971=>16993, +57954=>16993, +28997=>16994, +57955=>16994, +23176=>16995, +57956=>16995, +29002=>16996, +57957=>16996, +64072=>16997, +148325=>16998, +57960=>16998, +29007=>16999, +57961=>16999, +37730=>17000, +57962=>17000, +148161=>17001, +57963=>17001, +28972=>17002, +57964=>17002, +148570=>17003, +57965=>17003, +150055=>17004, +57966=>17004, +150050=>17005, +57967=>17005, +29114=>17006, +57968=>17006, +166888=>17007, +57969=>17007, +28861=>17008, +57970=>17008, +29198=>17009, +57971=>17009, +37954=>17010, +57972=>17010, +29205=>17011, +57973=>17011, +22801=>17012, +57974=>17012, +37955=>17013, +57975=>17013, +29220=>17014, +57976=>17014, +37697=>17015, +57977=>17015, +153093=>17016, +57978=>17016, +29230=>17017, +57979=>17017, +29248=>17018, +57980=>17018, +149876=>17019, +57981=>17019, +26813=>17020, +57982=>17020, +29269=>17021, +57983=>17021, +29271=>17022, +57984=>17022, +15957=>17023, +57985=>17023, +143428=>17024, +57986=>17024, +26637=>17025, +57987=>17025, +28477=>17026, +57988=>17026, +29314=>17027, +57989=>17027, +29483=>17029, +57991=>17029, +149539=>17030, +57992=>17030, +165931=>17031, +57993=>17031, +18669=>17032, +57994=>17032, +165892=>17033, +57995=>17033, +29480=>17034, +57996=>17034, +29486=>17035, +57997=>17035, +29647=>17036, +57998=>17036, +29610=>17037, +57999=>17037, +134202=>17038, +58000=>17038, +158254=>17039, +58001=>17039, +29641=>17040, +58002=>17040, +29769=>17041, +58003=>17041, +147938=>17042, +58004=>17042, +136935=>17043, +58005=>17043, +150052=>17044, +58006=>17044, +26147=>17045, +58007=>17045, +14021=>17046, +58008=>17046, +149943=>17047, +58009=>17047, +149901=>17048, +58010=>17048, +150011=>17049, +58011=>17049, +29687=>17050, +58012=>17050, +29717=>17051, +58013=>17051, +26883=>17052, +58014=>17052, +150054=>17053, +58015=>17053, +29753=>17054, +58016=>17054, +16087=>17055, +58018=>17055, +194863=>17056, +141485=>17057, +58020=>17057, +29792=>17058, +58021=>17058, +167602=>17059, +58022=>17059, +29767=>17060, +58023=>17060, +29668=>17061, +58024=>17061, +29814=>17062, +58025=>17062, +33721=>17063, +58026=>17063, +29804=>17064, +58027=>17064, +29812=>17065, +58029=>17065, +37873=>17066, +58030=>17066, +27180=>17067, +58031=>17067, +29826=>17068, +58032=>17068, +18771=>17069, +58033=>17069, +150156=>17070, +58034=>17070, +147807=>17071, +58035=>17071, +150137=>17072, +58036=>17072, +166799=>17073, +58037=>17073, +23366=>17074, +58038=>17074, +166915=>17075, +58039=>17075, +137374=>17076, +58040=>17076, +29896=>17077, +58041=>17077, +137608=>17078, +58042=>17078, +29966=>17079, +58043=>17079, +29982=>17080, +58045=>17080, +167641=>17081, +58046=>17081, +137803=>17082, +58047=>17082, +23511=>17083, +58048=>17083, +167596=>17084, +58049=>17084, +37765=>17085, +58050=>17085, +30029=>17086, +58051=>17086, +30026=>17087, +58052=>17087, +30055=>17088, +58053=>17088, +30062=>17089, +58054=>17089, +151426=>17090, +58055=>17090, +16132=>17091, +58056=>17091, +150803=>17092, +58057=>17092, +30094=>17093, +58058=>17093, +29789=>17094, +58059=>17094, +30110=>17095, +58060=>17095, +30132=>17096, +58061=>17096, +30210=>17097, +58062=>17097, +30252=>17098, +58063=>17098, +30289=>17099, +58064=>17099, +30287=>17100, +58065=>17100, +30319=>17101, +58066=>17101, +58067=>17102, +156661=>17103, +58068=>17103, +30352=>17104, +58069=>17104, +33263=>17105, +58070=>17105, +14328=>17106, +58071=>17106, +157969=>17107, +58072=>17107, +157966=>17108, +58073=>17108, +30369=>17109, +58074=>17109, +30373=>17110, +58075=>17110, +30391=>17111, +58076=>17111, +30412=>17112, +58077=>17112, +159647=>17113, +58078=>17113, +33890=>17114, +58079=>17114, +151709=>17115, +58080=>17115, +151933=>17116, +58081=>17116, +138780=>17117, +58082=>17117, +30494=>17118, +58083=>17118, +30502=>17119, +58084=>17119, +30528=>17120, +58085=>17120, +25775=>17121, +58086=>17121, +152096=>17122, +58087=>17122, +30552=>17123, +58088=>17123, +144044=>17124, +58089=>17124, +30639=>17125, +58090=>17125, +166244=>17126, +58091=>17126, +166248=>17127, +58092=>17127, +136897=>17128, +58093=>17128, +30708=>17129, +58094=>17129, +26826=>17131, +58098=>17131, +30895=>17132, +58099=>17132, +30919=>17133, +58100=>17133, +30931=>17134, +58101=>17134, +38565=>17135, +58102=>17135, +31022=>17136, +58103=>17136, +153056=>17137, +58104=>17137, +30935=>17138, +58105=>17138, +31028=>17139, +58106=>17139, +30897=>17140, +58107=>17140, +161292=>17141, +58108=>17141, +36792=>17142, +58109=>17142, +34948=>17143, +58110=>17143, +140828=>17144, +58113=>17144, +31110=>17145, +58114=>17145, +35072=>17146, +58115=>17146, +26882=>17147, +58116=>17147, +31104=>17148, +58117=>17148, +153687=>17149, +58118=>17149, +31133=>17150, +58119=>17150, +162617=>17151, +58120=>17151, +31036=>17152, +58121=>17152, +31145=>17153, +58122=>17153, +28202=>17154, +58123=>17154, +160038=>17155, +58124=>17155, +16040=>17156, +58125=>17156, +31174=>17157, +58126=>17157, +168205=>17158, +58127=>17158, +31188=>17159, +58128=>17159, +21797=>17161, +62526=>17161, +134210=>17163, +62528=>17163, +134421=>17164, +62529=>17164, +151851=>17165, +62530=>17165, +21904=>17166, +62531=>17166, +142534=>17167, +62532=>17167, +14828=>17168, +62533=>17168, +131905=>17169, +62534=>17169, +36422=>17170, +62535=>17170, +150968=>17171, +62536=>17171, +169189=>17172, +62537=>17172, +164030=>17174, +62539=>17174, +30586=>17175, +62540=>17175, +142392=>17176, +62541=>17176, +14900=>17177, +62542=>17177, +18389=>17178, +62543=>17178, +164189=>17179, +62544=>17179, +158194=>17180, +62545=>17180, +151018=>17181, +62546=>17181, +25821=>17182, +62547=>17182, +134524=>17183, +62548=>17183, +135092=>17184, +62549=>17184, +134357=>17185, +62550=>17185, +25741=>17187, +62552=>17187, +36478=>17188, +62553=>17188, +134806=>17189, +62554=>17189, +135012=>17191, +62556=>17191, +142505=>17192, +62557=>17192, +164438=>17193, +62558=>17193, +148691=>17194, +62559=>17194, +134470=>17196, +62561=>17196, +170573=>17197, +62562=>17197, +164073=>17198, +62563=>17198, +18420=>17199, +62564=>17199, +151207=>17200, +62565=>17200, +142530=>17201, +62566=>17201, +39602=>17202, +62567=>17202, +14951=>17203, +62568=>17203, +169460=>17204, +62569=>17204, +16365=>17205, +62570=>17205, +13574=>17206, +62571=>17206, +152263=>17207, +62572=>17207, +169940=>17208, +62573=>17208, +142660=>17210, +62575=>17210, +40302=>17211, +62576=>17211, +38933=>17212, +62577=>17212, +17369=>17214, +62579=>17214, +25780=>17216, +62581=>17216, +21731=>17217, +62582=>17217, +62584=>17219, +142282=>17219, +14843=>17221, +62586=>17221, +157402=>17223, +62588=>17223, +157462=>17224, +62589=>17224, +162208=>17225, +62590=>17225, +25834=>17226, +62591=>17226, +151634=>17227, +62592=>17227, +134211=>17228, +62593=>17228, +36456=>17229, +62594=>17229, +166732=>17231, +62596=>17231, +132913=>17232, +62597=>17232, +18443=>17234, +62599=>17234, +131497=>17235, +62600=>17235, +16378=>17236, +62601=>17236, +22643=>17237, +62602=>17237, +142733=>17238, +62603=>17238, +148936=>17240, +62605=>17240, +132348=>17241, +62606=>17241, +155799=>17242, +62607=>17242, +134988=>17243, +62608=>17243, +21881=>17245, +62610=>17245, +17338=>17247, +62612=>17247, +19124=>17249, +62614=>17249, +141926=>17250, +62615=>17250, +135325=>17251, +62616=>17251, +33194=>17252, +62617=>17252, +39157=>17253, +62618=>17253, +134556=>17254, +62619=>17254, +25465=>17255, +62620=>17255, +14846=>17256, +62621=>17256, +141173=>17257, +62622=>17257, +36288=>17258, +62623=>17258, +22177=>17259, +62624=>17259, +25724=>17260, +62625=>17260, +15939=>17261, +62626=>17261, +173569=>17263, +62628=>17263, +134665=>17264, +62629=>17264, +142031=>17265, +62630=>17265, +135368=>17268, +62633=>17268, +145858=>17269, +62634=>17269, +14738=>17270, +62635=>17270, +14854=>17271, +62636=>17271, +164507=>17272, +62637=>17272, +13688=>17273, +62638=>17273, +155209=>17274, +62639=>17274, +139463=>17275, +62640=>17275, +142514=>17278, +62643=>17278, +169760=>17279, +62644=>17279, +13500=>17280, +62645=>17280, +27709=>17281, +62646=>17281, +151099=>17282, +62647=>17282, +161140=>17285, +62650=>17285, +142987=>17286, +62651=>17286, +139784=>17287, +62652=>17287, +173659=>17288, +62653=>17288, +167117=>17289, +62654=>17289, +134778=>17290, +62655=>17290, +134196=>17291, +62656=>17291, +161337=>17292, +62683=>17292, +142286=>17293, +62684=>17293, +62687=>17294, +142417=>17294, +14872=>17295, +62689=>17295, +62691=>17296, +135367=>17296, +62693=>17297, +173618=>17297, +167122=>17298, +62695=>17298, +167321=>17299, +62696=>17299, +167114=>17300, +62697=>17300, +38314=>17301, +62698=>17301, +62706=>17303, +161630=>17303, +28992=>17304, +62708=>17304, +20822=>17306, +62385=>17306, +20222=>17307, +20616=>17308, +62487=>17308, +13459=>17310, +62489=>17310, +20870=>17311, +62491=>17311, +24130=>17312, +63037=>17312, +20997=>17313, +62495=>17313, +21031=>17314, +62436=>17314, +21113=>17315, +62497=>17315, +194600=>17316, +13651=>17317, +62504=>17317, +21442=>17318, +62505=>17318, +21343=>17319, +62715=>17319, +21823=>17321, +62520=>17321, +21976=>17323, +59986=>17323, +13789=>17324, +62722=>17324, +22049=>17325, +63067=>17325, +22100=>17327, +60044=>17327, +60148=>17328, +135291=>17328, +60153=>17330, +135379=>17330, +61095=>17332, +135934=>17332, +14265=>17335, +60104=>17335, +23745=>17336, +61099=>17336, +23829=>17337, +63066=>17337, +23894=>17338, +63030=>17338, +14392=>17339, +63036=>17339, +20097=>17340, +62477=>17340, +24253=>17341, +63038=>17341, +14612=>17342, +63042=>17342, +25017=>17343, +63050=>17343, +25232=>17344, +63054=>17344, +25368=>17345, +63056=>17345, +25690=>17346, +63063=>17346, +25745=>17347, +62381=>17347, +33133=>17348, +62709=>17348, +33156=>17349, +59922=>17349, +33171=>17350, +59924=>17350, +26624=>17351, +63080=>17351, +15292=>17352, +63093=>17352, +29327=>17353, +60517=>17353, +29389=>17354, +59781=>17354, +149487=>17355, +29497=>17356, +59785=>17356, +30018=>17357, +59811=>17357, +30172=>17358, +59817=>17358, +16320=>17359, +59818=>17359, +60278=>17360, +151205=>17360, +16343=>17361, +59820=>17361, +30336=>17363, +30348=>17364, +59824=>17364, +151388=>17364, +16552=>17365, +59845=>17365, +30777=>17366, +59846=>17366, +16643=>17367, +59855=>17367, +31377=>17368, +59863=>17368, +31771=>17369, +59876=>17369, +31981=>17370, +59884=>17370, +32659=>17371, +62658=>17371, +32686=>17372, +59892=>17372, +33535=>17374, +59936=>17374, +22623=>17375, +59981=>17375, +34482=>17376, +59960=>17376, +17836=>17377, +34699=>17378, +59963=>17378, +35143=>17379, +59969=>17379, +35369=>17381, +59972=>17381, +36465=>17383, +59988=>17383, +60484=>17384, +164233=>17384, +36528=>17385, +59990=>17385, +37214=>17387, +62443=>17387, +37260=>17388, +62441=>17388, +39182=>17389, +60051=>17389, +39196=>17390, +60054=>17390, +39809=>17393, +60066=>17393, +40384=>17394, +60080=>17394, +40339=>17395, +60078=>17395, +40620=>17396, +60085=>17396, +19857=>17397, +60540=>17397, +37818=>17399, +40571=>17400, +60084=>17400, +28809=>17401, +63148=>17401, +29512=>17402, +59788=>17402, +31129=>17404, +59858=>17404, +36791=>17405, +59997=>17405, +39234=>17407, +60056=>17407, +8364=>17601, +12443=>17606, +63518=>17606, +12444=>17607, +63519=>17607, +11904=>17608, +63520=>17608, +12736=>17609, +62211=>17609, +12737=>17610, +62212=>17610, +12738=>17611, +62213=>17611, +12739=>17612, +62214=>17612, +12740=>17613, +62215=>17613, +131340=>17614, +62216=>17614, +12741=>17615, +62217=>17615, +131281=>17616, +62218=>17616, +131277=>17617, +62219=>17617, +12742=>17618, +62220=>17618, +12743=>17619, +62221=>17619, +131275=>17620, +62222=>17620, +139240=>17621, +62223=>17621, +12744=>17622, +62224=>17622, +131274=>17623, +62225=>17623, +12745=>17624, +62226=>17624, +12746=>17625, +62227=>17625, +12747=>17626, +62228=>17626, +12748=>17627, +62229=>17627, +131342=>17628, +62230=>17628, +12749=>17629, +62231=>17629, +12750=>17630, +62232=>17630, +62776=>17631, +62777=>17632, +138177=>17633, +62778=>17633, +194680=>17634, +62779=>17634, +12205=>17635, +38737=>17635, +62780=>17635, +131206=>17636, +62781=>17636, +20059=>17637, +62782=>17637, +20155=>17638, +62783=>17638, +13630=>17639, +62784=>17639, +23587=>17640, +62785=>17640, +24401=>17641, +62786=>17641, +24516=>17642, +62787=>17642, +14586=>17643, +62788=>17643, +25164=>17644, +62789=>17644, +25909=>17645, +62790=>17645, +27514=>17646, +62791=>17646, +27701=>17647, +62792=>17647, +27706=>17648, +62793=>17648, +28780=>17649, +62794=>17649, +29227=>17650, +62795=>17650, +20012=>17651, +62796=>17651, +29357=>17652, +62797=>17652, +149737=>17653, +62798=>17653, +32594=>17654, +62799=>17654, +31035=>17655, +62800=>17655, +31993=>17656, +62801=>17656, +32595=>17657, +62802=>17657, +156266=>17658, +62803=>17658, +13505=>17659, +62804=>17659, +156491=>17660, +62806=>17660, +32770=>17661, +62807=>17661, +32896=>17662, +62808=>17662, +157202=>17663, +62809=>17663, +158033=>17664, +62810=>17664, +21341=>17665, +62811=>17665, +34916=>17666, +62812=>17666, +35265=>17667, +62813=>17667, +161970=>17668, +62814=>17668, +35744=>17669, +62815=>17669, +36125=>17670, +62816=>17670, +38021=>17671, +62817=>17671, +38264=>17672, +62818=>17672, +38271=>17673, +62819=>17673, +38376=>17674, +62820=>17674, +167439=>17675, +62821=>17675, +38886=>17676, +62822=>17676, +39029=>17677, +62823=>17677, +39118=>17678, +62824=>17678, +39134=>17679, +62825=>17679, +39267=>17680, +62826=>17680, +170000=>17681, +62827=>17681, +40060=>17682, +62828=>17682, +40479=>17683, +62829=>17683, +40644=>17684, +62830=>17684, +27503=>17685, +62831=>17685, +63751=>17686, +62832=>17686, +20023=>17687, +62833=>17687, +131207=>17688, +62834=>17688, +38429=>17689, +62835=>17689, +25143=>17690, +62836=>17690, +38050=>17691, +62837=>17691, +11908=>17692, +63521=>17692, +11910=>17693, +63522=>17693, +11911=>17694, +63523=>17694, +11912=>17695, +63524=>17695, +11914=>17696, +63525=>17696, +11916=>17697, +63526=>17697, +11917=>17698, +63527=>17698, +11925=>17699, +63528=>17699, +11932=>17700, +63529=>17700, +11941=>17701, +63531=>17701, +11943=>17702, +63532=>17702, +11946=>17703, +63533=>17703, +11948=>17704, +63534=>17704, +11950=>17705, +63535=>17705, +11958=>17706, +63536=>17706, +11964=>17707, +63537=>17707, +11966=>17708, +63538=>17708, +11978=>17709, +63540=>17709, +11980=>17710, +63541=>17710, +11981=>17711, +63542=>17711, +11983=>17712, +63543=>17712, +11990=>17713, +63544=>17713, +11991=>17714, +63545=>17714, +11998=>17715, +63546=>17715, +172969=>17716, +62368=>17716, +135493=>17717, +62369=>17717, +25866=>17718, +62371=>17718, +20029=>17719, +62374=>17719, +28381=>17720, +62375=>17720, +40270=>17721, +62376=>17721, +37343=>17722, +62377=>17722, +62380=>17723, +161589=>17723, +20250=>17724, +62382=>17724, +20264=>17725, +62383=>17725, +20392=>17726, +62384=>17726, +20852=>17727, +62386=>17727, +20892=>17728, +62387=>17728, +20964=>17729, +62388=>17729, +21153=>17730, +62389=>17730, +21160=>17731, +62390=>17731, +21307=>17732, +62391=>17732, +21326=>17733, +62392=>17733, +21457=>17734, +62393=>17734, +21464=>17735, +62394=>17735, +22242=>17736, +62395=>17736, +22768=>17737, +62396=>17737, +22788=>17738, +62397=>17738, +22791=>17739, +62398=>17739, +22834=>17740, +62399=>17740, +22836=>17741, +62400=>17741, +23398=>17742, +62401=>17742, +23454=>17743, +62402=>17743, +23455=>17744, +62403=>17744, +23706=>17745, +62404=>17745, +24198=>17746, +62405=>17746, +24635=>17747, +62406=>17747, +25993=>17748, +62407=>17748, +26622=>17749, +62408=>17749, +26628=>17750, +62409=>17750, +26725=>17751, +62410=>17751, +27982=>17752, +62411=>17752, +28860=>17753, +62412=>17753, +30005=>17754, +62413=>17754, +32420=>17755, +62414=>17755, +32428=>17756, +62415=>17756, +32442=>17757, +62416=>17757, +32455=>17758, +62417=>17758, +32463=>17759, +62418=>17759, +32479=>17760, +62419=>17760, +32518=>17761, +62420=>17761, +32567=>17762, +62421=>17762, +33402=>17763, +62422=>17763, +33487=>17764, +62423=>17764, +33647=>17765, +62424=>17765, +35270=>17766, +62425=>17766, +35774=>17767, +62426=>17767, +35810=>17768, +62427=>17768, +36710=>17769, +62428=>17769, +36711=>17770, +62429=>17770, +36718=>17771, +62430=>17771, +29713=>17772, +62431=>17772, +31996=>17773, +62432=>17773, +32205=>17774, +62433=>17774, +26950=>17775, +62434=>17775, +31433=>17776, +62435=>17776, +30904=>17777, +62442=>17777, +32956=>17778, +62444=>17778, +36107=>17779, +62446=>17779, +33014=>17780, +62447=>17780, +133607=>17781, +62448=>17781, +32927=>17782, +62451=>17782, +40647=>17783, +62452=>17783, +19661=>17784, +62453=>17784, +40393=>17785, +62454=>17785, +40460=>17786, +62455=>17786, +19518=>17787, +62456=>17787, +171510=>17788, +62457=>17788, +159758=>17789, +62458=>17789, +40458=>17790, +62459=>17790, +172339=>17791, +62460=>17791, +13761=>17792, +62461=>17792, +28314=>17793, +62463=>17793, +33342=>17794, +62464=>17794, +29977=>17795, +62465=>17795, +18705=>17796, +62467=>17796, +39532=>17797, +62468=>17797, +39567=>17798, +62469=>17798, +40857=>17799, +62470=>17799, +31111=>17800, +62471=>17800, +164972=>17801, +62472=>17801, +138698=>17802, +62473=>17802, +132560=>17803, +62474=>17803, +142054=>17804, +62475=>17804, +20004=>17805, +62476=>17805, +20096=>17806, +62478=>17806, +20103=>17807, +62479=>17807, +20159=>17808, +62480=>17808, +20203=>17809, +62481=>17809, +20279=>17810, +62482=>17810, +13388=>17811, +62483=>17811, +20413=>17812, +62484=>17812, +15944=>17813, +62485=>17813, +20483=>17814, +62486=>17814, +13437=>17815, +62488=>17815, +13477=>17816, +62490=>17816, +22789=>17817, +62492=>17817, +20955=>17818, +62493=>17818, +20988=>17819, +62494=>17819, +20105=>17820, +62496=>17820, +21136=>17821, +62498=>17821, +21287=>17822, +62499=>17822, +13767=>17823, +62500=>17823, +21417=>17824, +62501=>17824, +13649=>17825, +62502=>17825, +21424=>17826, +62503=>17826, +21539=>17827, +62506=>17827, +13677=>17828, +62507=>17828, +13682=>17829, +62508=>17829, +13953=>17830, +62509=>17830, +21651=>17831, +62510=>17831, +21667=>17832, +62511=>17832, +21684=>17833, +62512=>17833, +21689=>17834, +62513=>17834, +21712=>17835, +62514=>17835, +21743=>17836, +62515=>17836, +21784=>17837, +62516=>17837, +21795=>17838, +62517=>17838, +21800=>17839, +62518=>17839, +13720=>17840, +62519=>17840, +13733=>17841, +62521=>17841, +13759=>17842, +62522=>17842, +21975=>17843, +62523=>17843, +13765=>17844, +62524=>17844, +163204=>17845, +62525=>17845, +16467=>17846, +62538=>17846, +62551=>17847, +135412=>17847, +62555=>17848, +134155=>17848, +62574=>17849, +161992=>17849, +62580=>17850, +155813=>17850, +62583=>17851, +142668=>17851, +62585=>17852, +135287=>17852, +62587=>17853, +135279=>17853, +62595=>17854, +139681=>17854, +62609=>17855, +134550=>17855, +16571=>17856, +62611=>17856, +62631=>17857, +142537=>17857, +22098=>17858, +62641=>17858, +134961=>17859, +62642=>17859, +62657=>17860, +157724=>17860, +135375=>17861, +62659=>17861, +141315=>17862, +62660=>17862, +141625=>17863, +62661=>17863, +13819=>17864, +62662=>17864, +152035=>17865, +62663=>17865, +134796=>17866, +62664=>17866, +135053=>17867, +62665=>17867, +134826=>17868, +62666=>17868, +16275=>17869, +62667=>17869, +134960=>17870, +62668=>17870, +134471=>17871, +62669=>17871, +135503=>17872, +62670=>17872, +134732=>17873, +62671=>17873, +134827=>17874, +62673=>17874, +134057=>17875, +62674=>17875, +134472=>17876, +62675=>17876, +135360=>17877, +62676=>17877, +135485=>17878, +62677=>17878, +16377=>17879, +62678=>17879, +140950=>17880, +62679=>17880, +25650=>17881, +62680=>17881, +135085=>17882, +62681=>17882, +144372=>17883, +62682=>17883, +62685=>17884, +134526=>17884, +62686=>17885, +134527=>17885, +62688=>17886, +142421=>17886, +62690=>17887, +134808=>17887, +62692=>17888, +134958=>17888, +62694=>17889, +158544=>17889, +21708=>17890, +62699=>17890, +33476=>17891, +62700=>17891, +21945=>17892, +62701=>17892, +171715=>17893, +62703=>17893, +39974=>17894, +62704=>17894, +39606=>17895, +62705=>17895, +62707=>17896, +142830=>17896, +33004=>17897, +62710=>17897, +23580=>17898, +62711=>17898, +157042=>17899, +62712=>17899, +33076=>17900, +62713=>17900, +14231=>17901, +62714=>17901, +164029=>17902, +62716=>17902, +37302=>17903, +62717=>17903, +134906=>17904, +62718=>17904, +134671=>17905, +62719=>17905, +134775=>17906, +62720=>17906, +134907=>17907, +62721=>17907, +151019=>17908, +62723=>17908, +13833=>17909, +62724=>17909, +134358=>17910, +62725=>17910, +22191=>17911, +62726=>17911, +141237=>17912, +62727=>17912, +135369=>17913, +62728=>17913, +134672=>17914, +62729=>17914, +134776=>17915, +62730=>17915, +135288=>17916, +62731=>17916, +135496=>17917, +62732=>17917, +164359=>17918, +62733=>17918, +136277=>17919, +62734=>17919, +134777=>17920, +62735=>17920, +151120=>17921, +62736=>17921, +142756=>17922, +62737=>17922, +23124=>17923, +62738=>17923, +62739=>17924, +135197=>17924, +62740=>17925, +135198=>17925, +62741=>17926, +135413=>17926, +62742=>17927, +135414=>17927, +22428=>17928, +62743=>17928, +134673=>17929, +62744=>17929, +161428=>17930, +62745=>17930, +164557=>17931, +62746=>17931, +135093=>17932, +62747=>17932, +134779=>17933, +62748=>17933, +151934=>17934, +62749=>17934, +14083=>17935, +62750=>17935, +135094=>17936, +62751=>17936, +135552=>17937, +62752=>17937, +152280=>17938, +62753=>17938, +172733=>17939, +62754=>17939, +149978=>17940, +62755=>17940, +137274=>17941, +62756=>17941, +147831=>17942, +62757=>17942, +164476=>17943, +62758=>17943, +22681=>17944, +62759=>17944, +21096=>17945, +62760=>17945, +13850=>17946, +62761=>17946, +153405=>17947, +62762=>17947, +31666=>17948, +62763=>17948, +23400=>17949, +62764=>17949, +18432=>17950, +62765=>17950, +19244=>17951, +62766=>17951, +40743=>17952, +62767=>17952, +18919=>17953, +62768=>17953, +39967=>17954, +62769=>17954, +39821=>17955, +62770=>17955, +154484=>17956, +62771=>17956, +143677=>17957, +62772=>17957, +22011=>17958, +62773=>17958, +13810=>17959, +62774=>17959, +22153=>17960, +62775=>17960, +23870=>17961, +63028=>17961, +23880=>17962, +63029=>17962, +15868=>17963, +63031=>17963, +14351=>17964, +63032=>17964, +23972=>17965, +63033=>17965, +23993=>17966, +63034=>17966, +14368=>17967, +63035=>17967, +24357=>17968, +63039=>17968, +24451=>17969, +63040=>17969, +14600=>17970, +63041=>17970, +14655=>17971, +63043=>17971, +14669=>17972, +63044=>17972, +24791=>17973, +63045=>17973, +24893=>17974, +63046=>17974, +23781=>17975, +63047=>17975, +14729=>17976, +63048=>17976, +25015=>17977, +63049=>17977, +25039=>17978, +63051=>17978, +14776=>17979, +63052=>17979, +25132=>17980, +63053=>17980, +25317=>17981, +63055=>17981, +14840=>17982, +63057=>17982, +22193=>17983, +63058=>17983, +14851=>17984, +63059=>17984, +25570=>17985, +63060=>17985, +25595=>17986, +63061=>17986, +25607=>17987, +63062=>17987, +14923=>17988, +63064=>17988, +25792=>17989, +63065=>17989, +40863=>17990, +63068=>17990, +14999=>17991, +63069=>17991, +25990=>17992, +63070=>17992, +15037=>17993, +63071=>17993, +26111=>17994, +63072=>17994, +26195=>17995, +63073=>17995, +15090=>17996, +63074=>17996, +26258=>17997, +63075=>17997, +15138=>17998, +63076=>17998, +26390=>17999, +63077=>17999, +15170=>18000, +63078=>18000, +26532=>18001, +63079=>18001, +15192=>18002, +63081=>18002, +26698=>18003, +63082=>18003, +26756=>18004, +63083=>18004, +15218=>18005, +63084=>18005, +15217=>18006, +63085=>18006, +15227=>18007, +63086=>18007, +26889=>18008, +63087=>18008, +26947=>18009, +63088=>18009, +29276=>18010, +63089=>18010, +26980=>18011, +63090=>18011, +27039=>18012, +63091=>18012, +27013=>18013, +63092=>18013, +27094=>18014, +63094=>18014, +15325=>18015, +63095=>18015, +27237=>18016, +63096=>18016, +27252=>18017, +63097=>18017, +27249=>18018, +63098=>18018, +27266=>18019, +63099=>18019, +15340=>18020, +63100=>18020, +27289=>18021, +63101=>18021, +15346=>18022, +63102=>18022, +27307=>18023, +63103=>18023, +27317=>18024, +63104=>18024, +27348=>18025, +63105=>18025, +27382=>18026, +63106=>18026, +27521=>18027, +63107=>18027, +27585=>18028, +63108=>18028, +27626=>18029, +63109=>18029, +27765=>18030, +63110=>18030, +27818=>18031, +63111=>18031, +15563=>18032, +63112=>18032, +27906=>18033, +63113=>18033, +27910=>18034, +63114=>18034, +27942=>18035, +63115=>18035, +28033=>18036, +63116=>18036, +15599=>18037, +63117=>18037, +28068=>18038, +63118=>18038, +28081=>18039, +63119=>18039, +28181=>18040, +63120=>18040, +28184=>18041, +63121=>18041, +28201=>18042, +63122=>18042, +28294=>18043, +63123=>18043, +166336=>18044, +63124=>18044, +28347=>18045, +63125=>18045, +28386=>18046, +63126=>18046, +28378=>18047, +63127=>18047, +40831=>18048, +63128=>18048, +28392=>18049, +63129=>18049, +28393=>18050, +63130=>18050, +28452=>18051, +63131=>18051, +28468=>18052, +63132=>18052, +15686=>18053, +63133=>18053, +147265=>18054, +63134=>18054, +28545=>18055, +63135=>18055, +28606=>18056, +63136=>18056, +15722=>18057, +63137=>18057, +15733=>18058, +63138=>18058, +29111=>18059, +63139=>18059, +23705=>18060, +63140=>18060, +15754=>18061, +63141=>18061, +28716=>18062, +63142=>18062, +15761=>18063, +63143=>18063, +28752=>18064, +63144=>18064, +28756=>18065, +63145=>18065, +28783=>18066, +63146=>18066, +28799=>18067, +63147=>18067, +131877=>18068, +63149=>18068, +17345=>18069, +63150=>18069, +13809=>18070, +63151=>18070, +134872=>18071, +63152=>18071, +13902=>18072, +58134=>18072, +15789=>18073, +58172=>18073, +154725=>18074, +58173=>18074, +26237=>18075, +58183=>18075, +31860=>18076, +58188=>18076, +29837=>18077, +58197=>18077, +32402=>18078, +58215=>18078, +17667=>18079, +58232=>18079, +58260=>18080, +151480=>18080, +58270=>18081, +133901=>18081, +58277=>18082, +158474=>18082, +13438=>18083, +58311=>18083, +58317=>18084, +143087=>18084, +58325=>18085, +146613=>18085, +58343=>18086, +159385=>18086, +34673=>18087, +58364=>18087, +25537=>18088, +58385=>18088, +30583=>18089, +58387=>18089, +35210=>18090, +58390=>18090, +58406=>18091, +147343=>18091, +35660=>18092, +58415=>18092, +58440=>18093, +150729=>18093, +18730=>18094, +58464=>18094, +172052=>18095, +58471=>18095, +165564=>18096, +58472=>18096, +165121=>18097, +58473=>18097, +15088=>18098, +58490=>18098, +28815=>18099, +58511=>18099, +58529=>18100, +140922=>18100, +58637=>18101, +158120=>18101, +58646=>18102, +148043=>18102, +26760=>18103, +58662=>18103, +58664=>18104, +139611=>18104, +40802=>18105, +58702=>18105, +37830=>18106, +58793=>18106, +58802=>18107, +131967=>18107, +37734=>18108, +58888=>18108, +37519=>18109, +58901=>18109, +34324=>18110, +58954=>18110, +58986=>18111, +173147=>18111, +16784=>18112, +59010=>18112, +26511=>18113, +59045=>18113, +26654=>18114, +59048=>18114, +14435=>18115, +59051=>18115, +59077=>18116, +149996=>18116, +15129=>18117, +59128=>18117, +33942=>18118, +59176=>18118, +59241=>18119, +149858=>18119, +14818=>18120, +59254=>18120, +33920=>18121, +59259=>18121, +17262=>18122, +59328=>18122, +38769=>18123, +59402=>18123, +39323=>18124, +59427=>18124, +18733=>18125, +59499=>18125, +28439=>18126, +59703=>18126, +160009=>18127, +59704=>18127, +28838=>18128, +59746=>18128, +150095=>18129, +59752=>18129, +32357=>18130, +59753=>18130, +23855=>18131, +59755=>18131, +15859=>18132, +59756=>18132, +150109=>18133, +59758=>18133, +137183=>18134, +59759=>18134, +32164=>18135, +59760=>18135, +33830=>18136, +59761=>18136, +21637=>18137, +59762=>18137, +146170=>18138, +59763=>18138, +131604=>18139, +59765=>18139, +22398=>18140, +59766=>18140, +133333=>18141, +59767=>18141, +132633=>18142, +59768=>18142, +16357=>18143, +59769=>18143, +139166=>18144, +59770=>18144, +172726=>18145, +59771=>18145, +28675=>18146, +59772=>18146, +168283=>18147, +59773=>18147, +23920=>18148, +59774=>18148, +29583=>18149, +59775=>18149, +166489=>18150, +59777=>18150, +168992=>18151, +59778=>18151, +20424=>18152, +59779=>18152, +32743=>18153, +59780=>18153, +29456=>18154, +59782=>18154, +29496=>18155, +59784=>18155, +29505=>18156, +59787=>18156, +16041=>18157, +59789=>18157, +29173=>18158, +59792=>18158, +149746=>18159, +59793=>18159, +29665=>18160, +59794=>18160, +16074=>18161, +59796=>18161, +16081=>18162, +59798=>18162, +29721=>18163, +59801=>18163, +29726=>18164, +59802=>18164, +29727=>18165, +59803=>18165, +16098=>18166, +59804=>18166, +16112=>18167, +59805=>18167, +16116=>18168, +59806=>18168, +16122=>18169, +59807=>18169, +29907=>18170, +59808=>18170, +16142=>18171, +59809=>18171, +16211=>18172, +59810=>18172, +30061=>18173, +59812=>18173, +30066=>18174, +59813=>18174, +30093=>18175, +59814=>18175, +16252=>18176, +59815=>18176, +30152=>18177, +59816=>18177, +30285=>18178, +59819=>18178, +30324=>18179, +59821=>18179, +16348=>18180, +59822=>18180, +30330=>18181, +59823=>18181, +29064=>18182, +59825=>18182, +22051=>18183, +59826=>18183, +35200=>18184, +59827=>18184, +16413=>18185, +59829=>18185, +30531=>18186, +59830=>18186, +16441=>18187, +59831=>18187, +16453=>18188, +59833=>18188, +13787=>18189, +59834=>18189, +30616=>18190, +59835=>18190, +16490=>18191, +59836=>18191, +16495=>18192, +59837=>18192, +30654=>18193, +59839=>18193, +30667=>18194, +59840=>18194, +30744=>18195, +59842=>18195, +30748=>18196, +59844=>18196, +30791=>18197, +59847=>18197, +30801=>18198, +59848=>18198, +30822=>18199, +59849=>18199, +33864=>18200, +59850=>18200, +152885=>18201, +59851=>18201, +31027=>18202, +59852=>18202, +31026=>18203, +59854=>18203, +16649=>18204, +59856=>18204, +31121=>18205, +59857=>18205, +31238=>18206, +59860=>18206, +16743=>18207, +59862=>18207, +16818=>18208, +59864=>18208, +31420=>18209, +59865=>18209, +33401=>18210, +59866=>18210, +16836=>18211, +59867=>18211, +31439=>18212, +59868=>18212, +31451=>18213, +59869=>18213, +16847=>18214, +59870=>18214, +31586=>18215, +59872=>18215, +31596=>18216, +59873=>18216, +31611=>18217, +59874=>18217, +31762=>18218, +59875=>18218, +16992=>18219, +59877=>18219, +17018=>18220, +59878=>18220, +31867=>18221, +59879=>18221, +31900=>18222, +59880=>18222, +17036=>18223, +59881=>18223, +31928=>18224, +59882=>18224, +17044=>18225, +59883=>18225, +36755=>18226, +59885=>18226, +28864=>18227, +59886=>18227, +134351=>18228, +59887=>18228, +32207=>18229, +59888=>18229, +32212=>18230, +59889=>18230, +32208=>18231, +59890=>18231, +32253=>18232, +59891=>18232, +32692=>18233, +59893=>18233, +29343=>18234, +59894=>18234, +17303=>18235, +59895=>18235, +32800=>18236, +59896=>18236, +32805=>18237, +59897=>18237, +32814=>18238, +59899=>18238, +32817=>18239, +59900=>18239, +32852=>18240, +59901=>18240, +22452=>18241, +59903=>18241, +28832=>18242, +59904=>18242, +32951=>18243, +59905=>18243, +33001=>18244, +59906=>18244, +17389=>18245, +59907=>18245, +33036=>18246, +59908=>18246, +33038=>18247, +59910=>18247, +33042=>18248, +59911=>18248, +33044=>18249, +59913=>18249, +17409=>18250, +59914=>18250, +15161=>18251, +59915=>18251, +33110=>18252, +59916=>18252, +33113=>18253, +59917=>18253, +33114=>18254, +59918=>18254, +17427=>18255, +59919=>18255, +33148=>18256, +59921=>18256, +17445=>18257, +59923=>18257, +17453=>18258, +59925=>18258, +33189=>18259, +59926=>18259, +22511=>18260, +59927=>18260, +33217=>18261, +59928=>18261, +33252=>18262, +59929=>18262, +33364=>18263, +59930=>18263, +17551=>18264, +59931=>18264, +33398=>18265, +59933=>18265, +33482=>18266, +59934=>18266, +33496=>18267, +59935=>18267, +17584=>18268, +59937=>18268, +33623=>18269, +59938=>18269, +38505=>18270, +59939=>18270, +33797=>18271, +59941=>18271, +28917=>18272, +59942=>18272, +33892=>18273, +59943=>18273, +33928=>18274, +59945=>18274, +17668=>18275, +59946=>18275, +33982=>18276, +59947=>18276, +34017=>18277, +59948=>18277, +34040=>18278, +59949=>18278, +34064=>18279, +59950=>18279, +34104=>18280, +59951=>18280, +34130=>18281, +59952=>18281, +17723=>18282, +59953=>18282, +34159=>18283, +59954=>18283, +34160=>18284, +59955=>18284, +34272=>18285, +59956=>18285, +17783=>18286, +59957=>18286, +34418=>18287, +59958=>18287, +34450=>18288, +59959=>18288, +34543=>18289, +59961=>18289, +38469=>18290, +59962=>18290, +17926=>18291, +59964=>18291, +17943=>18292, +59965=>18292, +34990=>18293, +59966=>18293, +35071=>18294, +59967=>18294, +35108=>18295, +59968=>18295, +35217=>18296, +59970=>18296, +162151=>18297, +59971=>18297, +35384=>18298, +59973=>18298, +35476=>18299, +59974=>18299, +35508=>18300, +59975=>18300, +35921=>18301, +59976=>18301, +36052=>18302, +59977=>18302, +36082=>18303, +59978=>18303, +36124=>18304, +59979=>18304, +18328=>18305, +59980=>18305, +36291=>18306, +59982=>18306, +18413=>18307, +59983=>18307, +36410=>18308, +59985=>18308, +22356=>18309, +59987=>18309, +22005=>18310, +59989=>18310, +18487=>18311, +59991=>18311, +36558=>18312, +59992=>18312, +36578=>18313, +59993=>18313, +36580=>18314, +59994=>18314, +36589=>18315, +59995=>18315, +36594=>18316, +59996=>18316, +36801=>18317, +59998=>18317, +36810=>18318, +59999=>18318, +36812=>18319, +60000=>18319, +36915=>18320, +60001=>18320, +18605=>18321, +60003=>18321, +39136=>18322, +60004=>18322, +37395=>18323, +60005=>18323, +18718=>18324, +60006=>18324, +37416=>18325, +60007=>18325, +37464=>18326, +60008=>18326, +37483=>18327, +60009=>18327, +37553=>18328, +60010=>18328, +37550=>18329, +60011=>18329, +37567=>18330, +60012=>18330, +37603=>18331, +60013=>18331, +37611=>18332, +60014=>18332, +37619=>18333, +60015=>18333, +37620=>18334, +60016=>18334, +37629=>18335, +60017=>18335, +37699=>18336, +60018=>18336, +37764=>18337, +60019=>18337, +37805=>18338, +60020=>18338, +18757=>18339, +60021=>18339, +18769=>18340, +60022=>18340, +37911=>18341, +60024=>18341, +37917=>18342, +60026=>18342, +37933=>18343, +60027=>18343, +37950=>18344, +60028=>18344, +18794=>18345, +60029=>18345, +37972=>18346, +60030=>18346, +38009=>18347, +60031=>18347, +38189=>18348, +60032=>18348, +38306=>18349, +60033=>18349, +18855=>18350, +60034=>18350, +38388=>18351, +60035=>18351, +38451=>18352, +60036=>18352, +18917=>18353, +60037=>18353, +18980=>18354, +60039=>18354, +38720=>18355, +60040=>18355, +18997=>18356, +60041=>18356, +38834=>18357, +60042=>18357, +38850=>18358, +60043=>18358, +19172=>18359, +60045=>18359, +39097=>18360, +60047=>18360, +19225=>18361, +60048=>18361, +39153=>18362, +60049=>18362, +22596=>18363, +60050=>18363, +39193=>18364, +60052=>18364, +39223=>18365, +60055=>18365, +39261=>18366, +60057=>18366, +39266=>18367, +60058=>18367, +19312=>18368, +60059=>18368, +39365=>18369, +60060=>18369, +19357=>18370, +60061=>18370, +39484=>18371, +60062=>18371, +39695=>18372, +60063=>18372, +39785=>18373, +60065=>18373, +39901=>18374, +60067=>18374, +39921=>18375, +60068=>18375, +39924=>18376, +60069=>18376, +19565=>18377, +60070=>18377, +39968=>18378, +60071=>18378, +14191=>18379, +60072=>18379, +138178=>18380, +60073=>18380, +40265=>18381, +60074=>18381, +40702=>18382, +60076=>18382, +22096=>18383, +60077=>18383, +40381=>18384, +60079=>18384, +40444=>18385, +60081=>18385, +38134=>18386, +60082=>18386, +36790=>18387, +60083=>18387, +40625=>18388, +60086=>18388, +40637=>18389, +60087=>18389, +40646=>18390, +60088=>18390, +38108=>18391, +60089=>18391, +40674=>18392, +60090=>18392, +40689=>18393, +60091=>18393, +40696=>18394, +60092=>18394, +40772=>18395, +60094=>18395, +131220=>18396, +60095=>18396, +131767=>18397, +60096=>18397, +132000=>18398, +60097=>18398, +38083=>18399, +60099=>18399, +60101=>18400, +132311=>18400, +38081=>18401, +60103=>18401, +132565=>18402, +60105=>18402, +132629=>18403, +60106=>18403, +132726=>18404, +60107=>18404, +136890=>18405, +60108=>18405, +22359=>18406, +60109=>18406, +29043=>18407, +60110=>18407, +133826=>18408, +60111=>18408, +133837=>18409, +60112=>18409, +134079=>18410, +60113=>18410, +194619=>18411, +60115=>18411, +134091=>18412, +60116=>18412, +21662=>18413, +60117=>18413, +134139=>18414, +60118=>18414, +134203=>18415, +60119=>18415, +134227=>18416, +60120=>18416, +134245=>18417, +60121=>18417, +134268=>18418, +60122=>18418, +60124=>18419, +134285=>18419, +134325=>18420, +60126=>18420, +134365=>18421, +60127=>18421, +134381=>18422, +60128=>18422, +134511=>18423, +60129=>18423, +134578=>18424, +60130=>18424, +134600=>18425, +60131=>18425, +134660=>18426, +60135=>18426, +134670=>18427, +60136=>18427, +134871=>18428, +60137=>18428, +135056=>18429, +60138=>18429, +134957=>18430, +60139=>18430, +134771=>18431, +60140=>18431, +60142=>18432, +135100=>18432, +135260=>18433, +60144=>18433, +135247=>18434, +60145=>18434, +135286=>18435, +60146=>18435, +135304=>18436, +60149=>18436, +135318=>18437, +60150=>18437, +13895=>18438, +60151=>18438, +135359=>18439, +60152=>18439, +135471=>18440, +60154=>18440, +135483=>18441, +60155=>18441, +21348=>18442, +60156=>18442, +135907=>18443, +60158=>18443, +136053=>18444, +60159=>18444, +60160=>18445, +135990=>18445, +136567=>18446, +60162=>18446, +136729=>18447, +60163=>18447, +137155=>18448, +60164=>18448, +137159=>18449, +60165=>18449, +28859=>18450, +60167=>18450, +137261=>18451, +60168=>18451, +137578=>18452, +60169=>18452, +137773=>18453, +60170=>18453, +137797=>18454, +60171=>18454, +138282=>18455, +60172=>18455, +138352=>18456, +60173=>18456, +138412=>18457, +60174=>18457, +138952=>18458, +60175=>18458, +138965=>18459, +60177=>18459, +139029=>18460, +60178=>18460, +29080=>18461, +60179=>18461, +139333=>18462, +60181=>18462, +27113=>18463, +60182=>18463, +14024=>18464, +60183=>18464, +139900=>18465, +60184=>18465, +140247=>18466, +60185=>18466, +140282=>18467, +60186=>18467, +141098=>18468, +60187=>18468, +141425=>18469, +60188=>18469, +141647=>18470, +60189=>18470, +141671=>18471, +60191=>18471, +141715=>18472, +60192=>18472, +142037=>18473, +60193=>18473, +60195=>18474, +142056=>18474, +60197=>18475, +142094=>18475, +60199=>18476, +142143=>18476, +60202=>18477, +142412=>18477, +142472=>18478, +60204=>18478, +142519=>18479, +60205=>18479, +154600=>18480, +60206=>18480, +142600=>18481, +60207=>18481, +142610=>18482, +60208=>18482, +142775=>18483, +60209=>18483, +142741=>18484, +60210=>18484, +142914=>18485, +60211=>18485, +143220=>18486, +60212=>18486, +143308=>18487, +60213=>18487, +143411=>18488, +60214=>18488, +143462=>18489, +60215=>18489, +144159=>18490, +60216=>18490, +144350=>18491, +60217=>18491, +144743=>18492, +60222=>18492, +144883=>18493, +60223=>18493, +144922=>18494, +60227=>18494, +145174=>18495, +60228=>18495, +22709=>18496, +60231=>18496, +60234=>18497, +146087=>18497, +146961=>18498, +60237=>18498, +147129=>18499, +60238=>18499, +60243=>18500, +147737=>18500, +148206=>18501, +60245=>18501, +148237=>18502, +60246=>18502, +148276=>18503, +60248=>18503, +148374=>18504, +60249=>18504, +148484=>18505, +60258=>18505, +148694=>18506, +60259=>18506, +22408=>18507, +60260=>18507, +149108=>18508, +60261=>18508, +60263=>18509, +149295=>18509, +149522=>18510, +60271=>18510, +149755=>18511, +60272=>18511, +150037=>18512, +60273=>18512, +60275=>18513, +150208=>18513, +22885=>18514, +60277=>18514, +60279=>18515, +151430=>18515, +60282=>18516, +151596=>18516, +22335=>18517, +60284=>18517, +152217=>18518, +60286=>18518, +152601=>18519, +60287=>18519, +152646=>18520, +60291=>18520, +152686=>18521, +60292=>18521, +60296=>18522, +152895=>18522, +60298=>18523, +152926=>18523, +152930=>18524, +60300=>18524, +152934=>18525, +60301=>18525, +153543=>18526, +60302=>18526, +60304=>18527, +153693=>18527, +60309=>18528, +153859=>18528, +154286=>18529, +60312=>18529, +154505=>18530, +60313=>18530, +154630=>18531, +60314=>18531, +22433=>18532, +60316=>18532, +29009=>18533, +60317=>18533, +60319=>18534, +155906=>18534, +60322=>18535, +156082=>18535, +156674=>18536, +60325=>18536, +156746=>18537, +60326=>18537, +60330=>18538, +156804=>18538, +60334=>18539, +156808=>18539, +60336=>18540, +156946=>18540, +157119=>18541, +60338=>18541, +157365=>18542, +60339=>18542, +22201=>18543, +60347=>18543, +60349=>18544, +157436=>18544, +13848=>18545, +60355=>18545, +157593=>18546, +60357=>18546, +157806=>18547, +60358=>18547, +60360=>18548, +157790=>18548, +60362=>18549, +157895=>18549, +60366=>18550, +157990=>18550, +60368=>18551, +158009=>18551, +60371=>18552, +158202=>18552, +60373=>18553, +158253=>18553, +158260=>18554, +60378=>18554, +158555=>18555, +60379=>18555, +60383=>18556, +158621=>18556, +60385=>18557, +158884=>18557, +60388=>18558, +159150=>18558, +159819=>18559, +60392=>18559, +160205=>18560, +60393=>18560, +160384=>18561, +60395=>18561, +160389=>18562, +60396=>18562, +60399=>18563, +160395=>18563, +60401=>18564, +160486=>18564, +38047=>18565, +60404=>18565, +160848=>18566, +60405=>18566, +14009=>18567, +60416=>18567, +161740=>18568, +60424=>18568, +161880=>18569, +60425=>18569, +22230=>18570, +60426=>18570, +60435=>18571, +162269=>18571, +162301=>18572, +60441=>18572, +162314=>18573, +60442=>18573, +162571=>18574, +60443=>18574, +163174=>18575, +60444=>18575, +60448=>18576, +163849=>18576, +60459=>18577, +163875=>18577, +60463=>18578, +163912=>18578, +60466=>18579, +163971=>18579, +163984=>18580, +60479=>18580, +164084=>18581, +60480=>18581, +164142=>18582, +60481=>18582, +60483=>18583, +164175=>18583, +164271=>18584, +60485=>18584, +164378=>18585, +60486=>18585, +164614=>18586, +60487=>18586, +164655=>18587, +60488=>18587, +164746=>18588, +60489=>18588, +164968=>18589, +60491=>18589, +165546=>18590, +60492=>18590, +25574=>18591, +60494=>18591, +166230=>18592, +60495=>18592, +60498=>18593, +166328=>18593, +60500=>18594, +166375=>18594, +60502=>18595, +166376=>18595, +166726=>18596, +60503=>18596, +166868=>18597, +60504=>18597, +60506=>18598, +166921=>18598, +167877=>18599, +60508=>18599, +168172=>18600, +60509=>18600, +168208=>18601, +60511=>18601, +168252=>18602, +60512=>18602, +15863=>18603, +60513=>18603, +168286=>18604, +60514=>18604, +150218=>18605, +60515=>18605, +36816=>18606, +60516=>18606, +60519=>18607, +169191=>18607, +169392=>18608, +60521=>18608, +169400=>18609, +60522=>18609, +169778=>18610, +60523=>18610, +170193=>18611, +60524=>18611, +170313=>18612, +60525=>18612, +170346=>18613, +60526=>18613, +170435=>18614, +60527=>18614, +170536=>18615, +60528=>18615, +170766=>18616, +60529=>18616, +171354=>18617, +60530=>18617, +171419=>18618, +60531=>18618, +32415=>18619, +60532=>18619, +171768=>18620, +60533=>18620, +171811=>18621, +60534=>18621, +19620=>18622, +60535=>18622, +38215=>18623, +60536=>18623, +172691=>18624, +60537=>18624, +29090=>18625, +60538=>18625, +172799=>18626, +60539=>18626, +173515=>18627, +60542=>18627, +19868=>18628, +60543=>18628, +134300=>18629, +60544=>18629, +36798=>18630, +60545=>18630, +36794=>18631, +60547=>18631, +140464=>18632, +60548=>18632, +36793=>18633, +60549=>18633, +150163=>18634, +60550=>18634, +20202=>18635, +60555=>18635, +60557=>18636, +166700=>18636, +36480=>18637, +60560=>18637, +137205=>18638, +60561=>18638, +166764=>18639, +60563=>18639, +166809=>18640, +60564=>18640, +60566=>18641, +157359=>18641, +60568=>18642, +161365=>18642, +153141=>18643, +60570=>18643, +153942=>18644, +60571=>18644, +20122=>18645, +60572=>18645, +155265=>18646, +60573=>18646, +60576=>18647, +134765=>18647, +147080=>18648, +60579=>18648, +150686=>18649, +60580=>18649, +137206=>18650, +60583=>18650, +137339=>18651, +60584=>18651, +60587=>18652, +154698=>18652, +152337=>18653, +60589=>18653, +15814=>18654, +60590=>18654, +60596=>18655, +155352=>18655, +19996=>18656, +60600=>18656, +135146=>18657, +60601=>18657, +134473=>18658, +60602=>18658, +145082=>18659, +60603=>18659, +60638=>18660, +151880=>18660, +21982=>18661, +60644=>18661, +34694=>18662, +60672=>18662, +60676=>18663, +135361=>18663, +149254=>18664, +60679=>18664, +23440=>18665, +60680=>18665, +60682=>18666, +157843=>18666, +141044=>18667, +60684=>18667, +163119=>18668, +60685=>18668, +147875=>18669, +60686=>18669, +163187=>18670, +60687=>18670, +159440=>18671, +60688=>18671, +160438=>18672, +60689=>18672, +60691=>18673, +135641=>18673, +146684=>18674, +60693=>18674, +173737=>18675, +60694=>18675, +134828=>18676, +60695=>18676, +60698=>18677, +138402=>18677, +60700=>18678, +151490=>18678, +60702=>18679, +135147=>18679, +60706=>18680, +142752=>18680, +135148=>18681, +60710=>18681, +134666=>18682, +60711=>18682, +60714=>18683, +135149=>18683, +60717=>18684, +135559=>18684, +19994=>18685, +60721=>18685, +19972=>18686, +60722=>18686, +23309=>18687, +60724=>18687, +13996=>18688, +60727=>18688, +21373=>18689, +60729=>18689, +13989=>18690, +60730=>18690, +22682=>18691, +60732=>18691, +150382=>18692, +60733=>18692, +22442=>18693, +60736=>18693, +154261=>18694, +60737=>18694, +133497=>18695, +60738=>18695, +60741=>18696, +140389=>18696, +146686=>18697, +60746=>18697, +171824=>18698, +60747=>18698, +151465=>18699, +60749=>18699, +169374=>18700, +60750=>18700, +60753=>18701, +146870=>18701, +157619=>18702, +60755=>18702, +145184=>18703, +60756=>18703, +147191=>18704, +60759=>18704, +146988=>18705, +60760=>18705, +60785=>18706, +143578=>18706, +135849=>18707, +60789=>18707, +22439=>18708, +60790=>18708, +149859=>18709, +60791=>18709, +60794=>18710, +159918=>18710, +60801=>18711, +137068=>18711, +60806=>18712, +160100=>18712, +159010=>18713, +60809=>18713, +150242=>18714, +60810=>18714, +39963=>18715, +60837=>18715, +149822=>18716, +60838=>18716, +15878=>18717, +60846=>18717, +60881=>18718, +159011=>18718, +60887=>18719, +132092=>18719, +60891=>18720, +146685=>18720, +60893=>18721, +149785=>18721, +22394=>18722, +60904=>18722, +21722=>18723, +60912=>18723, +29050=>18724, +60928=>18724, +60949=>18725, +150135=>18725, +60955=>18726, +166490=>18726, +60962=>18727, +194624=>18727, +60976=>18728, +137275=>18728, +61000=>18729, +155993=>18729, +61014=>18730, +144373=>18730, +61019=>18731, +166850=>18731, +61024=>18732, +138566=>18732, +61054=>18733, +159441=>18733, +13877=>18734, +61065=>18734, +61084=>18735, +166701=>18735, +21024=>18736, +61088=>18736, +15384=>18737, +61089=>18737, +146631=>18738, +61090=>18738, +155351=>18739, +61091=>18739, +161366=>18740, +61092=>18740, +152881=>18741, +61093=>18741, +137540=>18742, +61094=>18742, +170243=>18743, +61096=>18743, +159196=>18744, +61097=>18744, +159917=>18745, +61098=>18745, +156077=>18746, +61100=>18746, +166415=>18747, +61101=>18747, +145015=>18748, +61102=>18748, +131310=>18749, +61103=>18749, +157766=>18750, +61104=>18750, +151310=>18751, +61105=>18751, +17762=>18752, +61106=>18752, +23327=>18753, +61107=>18753, +156492=>18754, +61108=>18754, +40784=>18755, +61109=>18755, +40614=>18756, +61110=>18756, +156267=>18757, +61111=>18757, +20962=>18758, +57415=>18758, +21314=>18759, +57416=>18759, +26285=>18760, +57520=>18760, +22620=>18761, +57547=>18761, +21843=>18762, +57566=>18762, +15749=>18763, +57594=>18763, +24928=>18764, +57608=>18764, +18606=>18765, +57668=>18765, +38845=>18766, +57676=>18766, +57693=>18767, +137335=>18767, +24755=>18768, +57703=>18768, +33828=>18769, +57711=>18769, +38932=>18770, +57748=>18770, +147596=>18771, +57749=>18771, +57764=>18772, +143486=>18772, +57787=>18773, +138813=>18773, +15147=>18774, +57798=>18774, +15666=>18775, +57824=>18775, +57857=>18776, +132021=>18776, +28801=>18777, +57944=>18777, +23708=>18778, +57959=>18778, +58017=>18779, +132547=>18779, +14128=>18780, +58028=>18780, +136054=>18781, +58096=>18781, +150034=>18782, +58097=>18782, +58111=>18783, +166699=>18783, +58112=>18784, +155779=>18784, +256=>18785, +62233=>18785, +193=>18786, +62234=>18786, +461=>18787, +62235=>18787, +192=>18788, +62236=>18788, +274=>18789, +62237=>18789, +201=>18790, +62238=>18790, +282=>18791, +62239=>18791, +200=>18792, +62240=>18792, +332=>18793, +62241=>18793, +211=>18794, +62242=>18794, +465=>18795, +62243=>18795, +210=>18796, +62244=>18796, +62245=>18797, +7870=>18798, +62246=>18798, +62247=>18799, +7872=>18800, +62248=>18800, +202=>18801, +62249=>18801, +257=>18802, +62250=>18802, +225=>18803, +62251=>18803, +462=>18804, +62252=>18804, +224=>18805, +62253=>18805, +593=>18806, +62254=>18806, +275=>18807, +62255=>18807, +233=>18808, +62256=>18808, +283=>18809, +62257=>18809, +232=>18810, +62258=>18810, +299=>18811, +62259=>18811, +237=>18812, +62260=>18812, +464=>18813, +62261=>18813, +236=>18814, +62262=>18814, +333=>18815, +62263=>18815, +243=>18816, +62264=>18816, +466=>18817, +62265=>18817, +242=>18818, +62266=>18818, +363=>18819, +62267=>18819, +250=>18820, +62268=>18820, +468=>18821, +62269=>18821, +249=>18822, +62270=>18822, +470=>18823, +62271=>18823, +472=>18824, +62272=>18824, +474=>18825, +62273=>18825, +476=>18826, +62274=>18826, +252=>18827, +62275=>18827, +62276=>18828, +7871=>18829, +62277=>18829, +62278=>18830, +7873=>18831, +62279=>18831, +234=>18832, +62280=>18832, +609=>18833, +62281=>18833, +643=>18834, +63551=>18834, +592=>18835, +63552=>18835, +603=>18836, +63553=>18836, +596=>18837, +63554=>18837, +629=>18838, +63555=>18838, +339=>18839, +63556=>18839, +248=>18840, +63557=>18840, +331=>18841, +63558=>18841, +650=>18842, +63559=>18842, +618=>18843, +63560=>18843, +9178=>18844, +62282=>18844, +9179=>18845, +62283=>18845, +11933=>18846, +63530=>18846, +11974=>18847, +63539=>18847, +12003=>18848, +63547=>18848, +20539=>18849, +28158=>18850, +171123=>18851, +62841=>18851, +40870=>18852, +62842=>18852, +15817=>18853, +62843=>18853, +34959=>18854, +62845=>18855, +147790=>18855, +28791=>18856, +23797=>18857, +19232=>18858, +62848=>18858, +152013=>18859, +62849=>18859, +13657=>18860, +62850=>18860, +154928=>18861, +62851=>18861, +24866=>18862, +62853=>18863, +166450=>18863, +36775=>18864, +37366=>18865, +29073=>18866, +26393=>18867, +29626=>18868, +144001=>18869, +62859=>18869, +172295=>18870, +62860=>18870, +15499=>18871, +62861=>18871, +137600=>18872, +62862=>18872, +19216=>18873, +62863=>18873, +30948=>18874, +29698=>18875, +20910=>18876, +165647=>18877, +62867=>18877, +16393=>18878, +62868=>18878, +27235=>18879, +172730=>18880, +62870=>18880, +16931=>18881, +62871=>18881, +34319=>18882, +31274=>18883, +170311=>18884, +62875=>18884, +166634=>18885, +62876=>18885, +38741=>18886, +28749=>18887, +21284=>18888, +62880=>18889, +139390=>18889, +37876=>18890, +30425=>18891, +166371=>18892, +62883=>18892, +40871=>18893, +62884=>18893, +30685=>18894, +20131=>18895, +20464=>18896, +20668=>18897, +20015=>18898, +20247=>18899, +40872=>18900, +62891=>18900, +21556=>18901, +32139=>18902, +22674=>18903, +22736=>18904, +62896=>18905, +138678=>18905, +24210=>18906, +24217=>18907, +24514=>18908, +62900=>18909, +141074=>18909, +25995=>18910, +62902=>18911, +144377=>18911, +26905=>18912, +27203=>18913, +62905=>18914, +146531=>18914, +27903=>18915, +29184=>18916, +62909=>18917, +148741=>18917, +29580=>18918, +16091=>18919, +62911=>18919, +150035=>18920, +62912=>18920, +23317=>18921, +29881=>18922, +35715=>18923, +154788=>18924, +62916=>18924, +153237=>18925, +62917=>18925, +31379=>18926, +31724=>18927, +31939=>18928, +32364=>18929, +33528=>18930, +34199=>18931, +40873=>18932, +62924=>18932, +34960=>18933, +40874=>18934, +62926=>18934, +36537=>18935, +40875=>18936, +62928=>18936, +36815=>18937, +34143=>18938, +39392=>18939, +37409=>18940, +40876=>18941, +62933=>18941, +167353=>18942, +62934=>18942, +136255=>18943, +62935=>18943, +16497=>18944, +62936=>18944, +17058=>18945, +62937=>18945, +23066=>18946, +39016=>18947, +26475=>18948, +17014=>18949, +62944=>18949, +22333=>18950, +34262=>18951, +62948=>18952, +149883=>18952, +33471=>18953, +160013=>18954, +62950=>18954, +19585=>18955, +62951=>18955, +159092=>18956, +62952=>18956, +23931=>18957, +158485=>18958, +62954=>18958, +159678=>18959, +62955=>18959, +40877=>18960, +62956=>18960, +40878=>18961, +62957=>18961, +23446=>18962, +40879=>18963, +62959=>18963, +32347=>18964, +17392=>18965, +19506=>18966, +17923=>18967, +17830=>18968, +17784=>18969, +160359=>18970, +19831=>18971, +17843=>18972, +162993=>18973, +19682=>18974, +163013=>18975, +15253=>18976, +18230=>18977, +18244=>18978, +19527=>18979, +19520=>18980, +148159=>18981, +144919=>18982, +160594=>18983, +159371=>18984, +159954=>18985, +19543=>18986, +172881=>18987, +18255=>18988, +17882=>18989, +19589=>18990, +162924=>18991, +19719=>18992, +19108=>18993, +18081=>18994, +158499=>18995, +29221=>18996, +154196=>18997, +137827=>18998, +146950=>18999, +147297=>19000, +26189=>19001, +22267=>19002, +32149=>19003, +22813=>19004, +166841=>19005, +15860=>19006, +38708=>19007, +162799=>19008, +23515=>19009, +138590=>19010, +23204=>19011, +13861=>19012, +171696=>19013, +23249=>19014, +23479=>19015, +23804=>19016, +26478=>19017, +34195=>19018, +170309=>19019, +29793=>19020, +29853=>19021, +133743=>19022, +26343=>19023, +28247=>19024, +31178=>19025, +15752=>19026, +17603=>19027, +143958=>19028, +141206=>19029, +17306=>19030, +17718=>19031, +23765=>19032, +146202=>19033, +35577=>19034, +23672=>19035, +15634=>19036, +144721=>19037, +23928=>19038, +40882=>19039, +29015=>19040, +17752=>19041, +147692=>19042, +138787=>19043, +19575=>19044, +14712=>19045, +13386=>19046, +131492=>19047, +158785=>19048, +35532=>19049, +20404=>19050, +131641=>19051, +22975=>19052, +33132=>19053, +38998=>19054, +170234=>19055, +24379=>19056, +134047=>19057, +139713=>19058, +166253=>19059, +16642=>19060, +18107=>19061, +168057=>19062, +16135=>19063, +40883=>19064, +172469=>19065, +16632=>19066, +14294=>19067, +18167=>19068, +158790=>19069, +16764=>19070, +165554=>19071, +160767=>19072, +17773=>19073, +14548=>19074, +152730=>19075, +17761=>19076, +17691=>19077, +19849=>19078, +19579=>19079, +19830=>19080, +17898=>19081, +16328=>19082, +150287=>19083, +13921=>19084, +17630=>19085, +17597=>19086, +16877=>19087, +); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/uni2cid_ag15.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/uni2cid_ag15.php new file mode 100755 index 00000000..194559d9 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/uni2cid_ag15.php @@ -0,0 +1,30222 @@ +1, +33=>2, +34=>3, +35=>4, +36=>5, +37=>6, +38=>7, +39=>8, +40=>9, +41=>10, +42=>11, +43=>12, +44=>13, +45=>14, +46=>15, +47=>16, +48=>17, +49=>18, +50=>19, +51=>20, +52=>21, +53=>22, +54=>23, +55=>24, +56=>25, +57=>26, +58=>27, +59=>28, +60=>29, +61=>30, +62=>31, +63=>32, +64=>33, +65=>34, +66=>35, +67=>36, +68=>37, +69=>38, +70=>39, +71=>40, +72=>41, +73=>42, +74=>43, +75=>44, +76=>45, +77=>46, +78=>47, +79=>48, +80=>49, +81=>50, +82=>51, +83=>52, +84=>53, +85=>54, +86=>55, +87=>56, +88=>57, +89=>58, +90=>59, +91=>60, +92=>61, +93=>62, +94=>63, +95=>64, +96=>65, +97=>66, +98=>67, +99=>68, +100=>69, +101=>70, +102=>71, +103=>72, +104=>73, +105=>74, +106=>75, +107=>76, +108=>77, +109=>78, +110=>79, +111=>80, +112=>81, +113=>82, +114=>83, +115=>84, +116=>85, +117=>86, +118=>87, +119=>88, +120=>89, +121=>90, +122=>91, +123=>92, +124=>93, +125=>94, +126=>95, +12288=>96, +12289=>97, +12290=>98, +183=>99, +12539=>99, +713=>100, +711=>101, +168=>102, +12291=>103, +12293=>104, +8212=>105, +65374=>106, +8214=>107, +8230=>108, +8943=>108, +8216=>109, +8217=>110, +8220=>111, +8221=>112, +12308=>113, +12309=>114, +12296=>115, +12297=>116, +12298=>117, +12299=>118, +12300=>119, +12301=>120, +12302=>121, +12303=>122, +12310=>123, +12311=>124, +12304=>125, +12305=>126, +177=>127, +215=>128, +247=>129, +8758=>130, +8743=>131, +8744=>132, +8721=>133, +8719=>134, +8746=>135, +8745=>136, +8712=>137, +8759=>138, +8730=>139, +8869=>140, +8741=>141, +8736=>142, +8978=>143, +8857=>144, +8747=>145, +8750=>146, +8801=>147, +8780=>148, +8776=>149, +8765=>150, +8733=>151, +8800=>152, +8814=>153, +8815=>154, +8804=>155, +8805=>156, +8734=>157, +8757=>158, +8756=>159, +9794=>160, +9792=>161, +176=>162, +8242=>163, +8243=>164, +8451=>165, +65284=>166, +164=>167, +65504=>168, +65505=>169, +8240=>170, +167=>171, +8470=>172, +9734=>173, +9733=>174, +9675=>175, +9679=>176, +9678=>177, +9671=>178, +9670=>179, +9633=>180, +9632=>181, +9651=>182, +9650=>183, +8251=>184, +8594=>185, +8592=>186, +8593=>187, +8595=>188, +12307=>189, +9352=>190, +9353=>191, +9354=>192, +9355=>193, +9356=>194, +9357=>195, +9358=>196, +9359=>197, +9360=>198, +9361=>199, +9362=>200, +9363=>201, +9364=>202, +9365=>203, +9366=>204, +9367=>205, +9368=>206, +9369=>207, +9370=>208, +9371=>209, +9332=>210, +9333=>211, +9334=>212, +9335=>213, +9336=>214, +9337=>215, +9338=>216, +9339=>217, +9340=>218, +9341=>219, +9342=>220, +9343=>221, +9344=>222, +9345=>223, +9346=>224, +9347=>225, +9348=>226, +9349=>227, +9350=>228, +9351=>229, +9312=>230, +9313=>231, +9314=>232, +9315=>233, +9316=>234, +9317=>235, +9318=>236, +9319=>237, +9320=>238, +9321=>239, +12832=>240, +12833=>241, +12834=>242, +12835=>243, +12836=>244, +12837=>245, +12838=>246, +12839=>247, +12840=>248, +12841=>249, +8544=>250, +8545=>251, +8546=>252, +8547=>253, +8548=>254, +8549=>255, +8550=>256, +8551=>257, +8552=>258, +8553=>259, +8554=>260, +8555=>261, +65281=>262, +65282=>263, +65283=>264, +65509=>265, +65285=>266, +65286=>267, +65287=>268, +65288=>269, +65289=>270, +65290=>271, +65291=>272, +65292=>273, +65293=>274, +65294=>275, +65295=>276, +65296=>277, +65297=>278, +65298=>279, +65299=>280, +65300=>281, +65301=>282, +65302=>283, +65303=>284, +65304=>285, +65305=>286, +65306=>287, +65307=>288, +65308=>289, +65309=>290, +65310=>291, +65311=>292, +65312=>293, +65313=>294, +65314=>295, +65315=>296, +65316=>297, +65317=>298, +65318=>299, +65319=>300, +65320=>301, +65321=>302, +65322=>303, +65323=>304, +65324=>305, +65325=>306, +65326=>307, +65327=>308, +65328=>309, +65329=>310, +65330=>311, +65331=>312, +65332=>313, +65333=>314, +65334=>315, +65335=>316, +65336=>317, +65337=>318, +65338=>319, +65339=>320, +65340=>321, +65341=>322, +65342=>323, +65343=>324, +65344=>325, +65345=>326, +65346=>327, +65347=>328, +65348=>329, +65349=>330, +65350=>331, +65351=>332, +65352=>333, +65353=>334, +65354=>335, +65355=>336, +65356=>337, +65357=>338, +65358=>339, +65359=>340, +65360=>341, +65361=>342, +65362=>343, +65363=>344, +65364=>345, +65365=>346, +65366=>347, +65367=>348, +65368=>349, +65369=>350, +65370=>351, +65371=>352, +65372=>353, +65373=>354, +65507=>355, +12353=>356, +12354=>357, +12355=>358, +12356=>359, +12357=>360, +12358=>361, +12359=>362, +12360=>363, +12361=>364, +12362=>365, +12363=>366, +12364=>367, +12365=>368, +12366=>369, +12367=>370, +12368=>371, +12369=>372, +12370=>373, +12371=>374, +12372=>375, +12373=>376, +12374=>377, +12375=>378, +12376=>379, +12377=>380, +12378=>381, +12379=>382, +12380=>383, +12381=>384, +12382=>385, +12383=>386, +12384=>387, +12385=>388, +12386=>389, +12387=>390, +12388=>391, +12389=>392, +12390=>393, +12391=>394, +12392=>395, +12393=>396, +12394=>397, +12395=>398, +12396=>399, +12397=>400, +12398=>401, +12399=>402, +12400=>403, +12401=>404, +12402=>405, +12403=>406, +12404=>407, +12405=>408, +12406=>409, +12407=>410, +12408=>411, +12409=>412, +12410=>413, +12411=>414, +12412=>415, +12413=>416, +12414=>417, +12415=>418, +12416=>419, +12417=>420, +12418=>421, +12419=>422, +12420=>423, +12421=>424, +12422=>425, +12423=>426, +12424=>427, +12425=>428, +12426=>429, +12427=>430, +12428=>431, +12429=>432, +12430=>433, +12431=>434, +12432=>435, +12433=>436, +12434=>437, +12435=>438, +12449=>439, +12450=>440, +12451=>441, +12452=>442, +12453=>443, +12454=>444, +12455=>445, +12456=>446, +12457=>447, +12458=>448, +12459=>449, +12460=>450, +12461=>451, +12462=>452, +12463=>453, +12464=>454, +12465=>455, +12466=>456, +12467=>457, +12468=>458, +12469=>459, +12470=>460, +12471=>461, +12472=>462, +12473=>463, +12474=>464, +12475=>465, +12476=>466, +12477=>467, +12478=>468, +12479=>469, +12480=>470, +12481=>471, +12482=>472, +12483=>473, +12484=>474, +12485=>475, +12486=>476, +12487=>477, +12488=>478, +12489=>479, +12490=>480, +12491=>481, +12492=>482, +12493=>483, +12494=>484, +12495=>485, +12496=>486, +12497=>487, +12498=>488, +12499=>489, +12500=>490, +12501=>491, +12502=>492, +12503=>493, +12504=>494, +12505=>495, +12506=>496, +12507=>497, +12508=>498, +12509=>499, +12510=>500, +12511=>501, +12512=>502, +12513=>503, +12514=>504, +12515=>505, +12516=>506, +12517=>507, +12518=>508, +12519=>509, +12520=>510, +12521=>511, +12522=>512, +12523=>513, +12524=>514, +12525=>515, +12526=>516, +12527=>517, +12528=>518, +12529=>519, +12530=>520, +12531=>521, +12532=>522, +12533=>523, +12534=>524, +913=>525, +914=>526, +915=>527, +916=>528, +917=>529, +918=>530, +919=>531, +920=>532, +921=>533, +922=>534, +923=>535, +924=>536, +925=>537, +926=>538, +927=>539, +928=>540, +929=>541, +931=>542, +932=>543, +933=>544, +934=>545, +935=>546, +936=>547, +937=>548, +945=>549, +946=>550, +947=>551, +948=>552, +949=>553, +950=>554, +951=>555, +952=>556, +953=>557, +954=>558, +955=>559, +956=>560, +957=>561, +958=>562, +959=>563, +960=>564, +961=>565, +963=>566, +964=>567, +965=>568, +966=>569, +967=>570, +968=>571, +969=>572, +65040=>573, +59277=>573, +65042=>574, +59278=>574, +65041=>575, +59279=>575, +59280=>576, +65043=>576, +59281=>577, +65044=>577, +59282=>578, +65045=>578, +59283=>579, +65046=>579, +65077=>580, +65078=>581, +65081=>582, +65082=>583, +65087=>584, +65088=>585, +65085=>586, +65086=>587, +65089=>588, +65090=>589, +65091=>590, +65092=>591, +59284=>592, +65047=>592, +59285=>593, +65048=>593, +65083=>594, +65084=>595, +65079=>596, +65080=>597, +65073=>598, +8285=>599, +59286=>599, +65049=>599, +65075=>600, +65076=>601, +1040=>602, +1041=>603, +1042=>604, +1043=>605, +1044=>606, +1045=>607, +1025=>608, +1046=>609, +1047=>610, +1048=>611, +1049=>612, +1050=>613, +1051=>614, +1052=>615, +1053=>616, +1054=>617, +1055=>618, +1056=>619, +1057=>620, +1058=>621, +1059=>622, +1060=>623, +1061=>624, +1062=>625, +1063=>626, +1064=>627, +1065=>628, +1066=>629, +1067=>630, +1068=>631, +1069=>632, +1070=>633, +1071=>634, +1072=>635, +1073=>636, +1074=>637, +1075=>638, +1076=>639, +1077=>640, +1105=>641, +1078=>642, +1079=>643, +1080=>644, +1081=>645, +1082=>646, +1083=>647, +1084=>648, +1085=>649, +1086=>650, +1087=>651, +1088=>652, +1089=>653, +1090=>654, +1091=>655, +1092=>656, +1093=>657, +1094=>658, +1095=>659, +1096=>660, +1097=>661, +1098=>662, +1099=>663, +1100=>664, +1101=>665, +1102=>666, +1103=>667, +257=>668, +225=>669, +462=>670, +224=>671, +275=>672, +233=>673, +283=>674, +232=>675, +299=>676, +237=>677, +464=>678, +236=>679, +333=>680, +243=>681, +466=>682, +242=>683, +363=>684, +250=>685, +468=>686, +249=>687, +470=>688, +472=>689, +474=>690, +476=>691, +252=>692, +234=>693, +593=>694, +7743=>695, +59335=>695, +324=>696, +328=>697, +505=>698, +59336=>698, +609=>699, +12549=>700, +12550=>701, +12551=>702, +12552=>703, +12553=>704, +12554=>705, +12555=>706, +12556=>707, +12557=>708, +12558=>709, +12559=>710, +12560=>711, +12561=>712, +12562=>713, +12563=>714, +12564=>715, +12565=>716, +12566=>717, +12567=>718, +12568=>719, +12569=>720, +12570=>721, +12571=>722, +12572=>723, +12573=>724, +12574=>725, +12575=>726, +12576=>727, +12577=>728, +12578=>729, +12579=>730, +12580=>731, +12581=>732, +12582=>733, +12583=>734, +12584=>735, +12585=>736, +9472=>738, +9473=>739, +9474=>740, +9475=>741, +9476=>742, +9477=>743, +9478=>744, +9479=>745, +9480=>746, +9481=>747, +9482=>748, +9483=>749, +9484=>750, +9485=>751, +9486=>752, +9487=>753, +9488=>754, +9489=>755, +9490=>756, +9491=>757, +9492=>758, +9493=>759, +9494=>760, +9495=>761, +9496=>762, +9497=>763, +9498=>764, +9499=>765, +9500=>766, +9501=>767, +9502=>768, +9503=>769, +9504=>770, +9505=>771, +9506=>772, +9507=>773, +9508=>774, +9509=>775, +9510=>776, +9511=>777, +9512=>778, +9513=>779, +9514=>780, +9515=>781, +9516=>782, +9517=>783, +9518=>784, +9519=>785, +9520=>786, +9521=>787, +9522=>788, +9523=>789, +9524=>790, +9525=>791, +9526=>792, +9527=>793, +9528=>794, +9529=>795, +9530=>796, +9531=>797, +9532=>798, +9533=>799, +9534=>800, +9535=>801, +9536=>802, +9537=>803, +9538=>804, +9539=>805, +9540=>806, +9541=>807, +9542=>808, +9543=>809, +9544=>810, +9545=>811, +9546=>812, +9547=>813, +21834=>940, +38463=>941, +22467=>942, +25384=>943, +21710=>944, +21769=>945, +21696=>946, +30353=>947, +30284=>948, +34108=>949, +30702=>950, +33406=>951, +30861=>952, +29233=>953, +38552=>954, +38797=>955, +27688=>956, +23433=>957, +20474=>958, +25353=>959, +26263=>960, +23736=>961, +33018=>962, +26696=>963, +32942=>964, +26114=>965, +30414=>966, +20985=>967, +25942=>968, +29100=>969, +32753=>970, +34948=>971, +20658=>972, +22885=>973, +25034=>974, +28595=>975, +33453=>976, +25420=>977, +25170=>978, +21485=>979, +21543=>980, +31494=>981, +12043=>982, +20843=>982, +30116=>983, +24052=>984, +25300=>985, +36299=>986, +38774=>987, +25226=>988, +32793=>989, +22365=>990, +38712=>991, +32610=>992, +29240=>993, +12137=>994, +30333=>994, +26575=>995, +30334=>996, +25670=>997, +20336=>998, +36133=>999, +25308=>1000, +31255=>1001, +26001=>1002, +29677=>1003, +25644=>1004, +25203=>1005, +33324=>1006, +39041=>1007, +26495=>1008, +29256=>1009, +25198=>1010, +25292=>1011, +20276=>1012, +29923=>1013, +21322=>1014, +21150=>1015, +32458=>1016, +37030=>1017, +24110=>1018, +26758=>1019, +27036=>1020, +33152=>1021, +32465=>1022, +26834=>1023, +30917=>1024, +34444=>1025, +38225=>1026, +20621=>1027, +35876=>1028, +33502=>1029, +32990=>1030, +21253=>1031, +35090=>1032, +21093=>1033, +34180=>1034, +38649=>1035, +20445=>1036, +22561=>1037, +39281=>1038, +23453=>1039, +25265=>1040, +25253=>1041, +26292=>1042, +35961=>1043, +40077=>1044, +29190=>1045, +26479=>1046, +30865=>1047, +24754=>1048, +21329=>1049, +21271=>1050, +36744=>1051, +32972=>1052, +36125=>1053, +38049=>1054, +20493=>1055, +29384=>1056, +22791=>1057, +24811=>1058, +28953=>1059, +34987=>1060, +22868=>1061, +33519=>1062, +26412=>1063, +31528=>1064, +23849=>1065, +32503=>1066, +29997=>1067, +27893=>1068, +36454=>1069, +36856=>1070, +36924=>1071, +12240=>1072, +40763=>1072, +12112=>1073, +27604=>1073, +37145=>1074, +31508=>1075, +24444=>1076, +30887=>1077, +34006=>1078, +34109=>1079, +27605=>1080, +27609=>1081, +27606=>1082, +24065=>1083, +24199=>1084, +30201=>1085, +38381=>1086, +25949=>1087, +24330=>1088, +24517=>1089, +36767=>1090, +22721=>1091, +33218=>1092, +36991=>1093, +38491=>1094, +38829=>1095, +36793=>1096, +32534=>1097, +36140=>1098, +25153=>1099, +20415=>1100, +21464=>1101, +21342=>1102, +36776=>1103, +36777=>1104, +36779=>1105, +36941=>1106, +26631=>1107, +24426=>1108, +33176=>1109, +34920=>1110, +40150=>1111, +24971=>1112, +21035=>1113, +30250=>1114, +24428=>1115, +25996=>1116, +28626=>1117, +28392=>1118, +23486=>1119, +25672=>1120, +20853=>1121, +20912=>1122, +26564=>1123, +19993=>1124, +31177=>1125, +39292=>1126, +28851=>1127, +30149=>1128, +24182=>1129, +29627=>1130, +33760=>1131, +25773=>1132, +25320=>1133, +38069=>1134, +27874=>1135, +21338=>1136, +21187=>1137, +25615=>1138, +38082=>1139, +31636=>1140, +20271=>1141, +24091=>1142, +33334=>1143, +33046=>1144, +33162=>1145, +28196=>1146, +27850=>1147, +39539=>1148, +25429=>1149, +12056=>1150, +21340=>1150, +21754=>1151, +34917=>1152, +22496=>1153, +19981=>1154, +24067=>1155, +27493=>1156, +31807=>1157, +37096=>1158, +24598=>1159, +25830=>1160, +29468=>1161, +35009=>1162, +26448=>1163, +25165=>1164, +36130=>1165, +30572=>1166, +36393=>1167, +37319=>1168, +24425=>1169, +33756=>1170, +34081=>1171, +39184=>1172, +21442=>1173, +34453=>1174, +27531=>1175, +24813=>1176, +24808=>1177, +28799=>1178, +33485=>1179, +33329=>1180, +20179=>1181, +27815=>1182, +34255=>1183, +25805=>1184, +31961=>1185, +27133=>1186, +26361=>1187, +33609=>1188, +21397=>1189, +31574=>1190, +20391=>1191, +20876=>1192, +27979=>1193, +23618=>1194, +36461=>1195, +25554=>1196, +21449=>1197, +33580=>1198, +33590=>1199, +26597=>1200, +30900=>1201, +25661=>1202, +23519=>1203, +23700=>1204, +24046=>1205, +35815=>1206, +25286=>1207, +26612=>1208, +35962=>1209, +25600=>1210, +25530=>1211, +34633=>1212, +39307=>1213, +35863=>1214, +32544=>1215, +38130=>1216, +20135=>1217, +38416=>1218, +39076=>1219, +26124=>1220, +29462=>1221, +22330=>1222, +23581=>1223, +24120=>1224, +38271=>1225, +20607=>1226, +32928=>1227, +12058=>1228, +21378=>1228, +25950=>1229, +30021=>1230, +21809=>1231, +20513=>1232, +36229=>1233, +25220=>1234, +38046=>1235, +26397=>1236, +22066=>1237, +28526=>1238, +24034=>1239, +21557=>1240, +28818=>1241, +36710=>1242, +25199=>1243, +25764=>1244, +25507=>1245, +24443=>1246, +28552=>1247, +37108=>1248, +12162=>1249, +33251=>1249, +12192=>1250, +36784=>1250, +23576=>1251, +26216=>1252, +24561=>1253, +27785=>1254, +38472=>1255, +36225=>1256, +34924=>1257, +25745=>1258, +31216=>1259, +22478=>1260, +27225=>1261, +25104=>1262, +21576=>1263, +20056=>1264, +31243=>1265, +24809=>1266, +28548=>1267, +35802=>1268, +25215=>1269, +36894=>1270, +39563=>1271, +31204=>1272, +21507=>1273, +30196=>1274, +25345=>1275, +21273=>1276, +27744=>1277, +36831=>1278, +24347=>1279, +39536=>1280, +32827=>1281, +40831=>1282, +20360=>1283, +23610=>1284, +12186=>1285, +36196=>1285, +32709=>1286, +26021=>1287, +28861=>1288, +20805=>1289, +20914=>1290, +12173=>1291, +34411=>1291, +23815=>1292, +23456=>1293, +25277=>1294, +37228=>1295, +30068=>1296, +36364=>1297, +31264=>1298, +24833=>1299, +31609=>1300, +20167=>1301, +32504=>1302, +30597=>1303, +19985=>1304, +33261=>1305, +21021=>1306, +20986=>1307, +27249=>1308, +21416=>1309, +36487=>1310, +38148=>1311, +38607=>1312, +28353=>1313, +38500=>1314, +26970=>1315, +30784=>1316, +20648=>1317, +30679=>1318, +25616=>1319, +35302=>1320, +22788=>1321, +25571=>1322, +24029=>1323, +31359=>1324, +26941=>1325, +20256=>1326, +33337=>1327, +21912=>1328, +20018=>1329, +30126=>1330, +31383=>1331, +24162=>1332, +24202=>1333, +38383=>1334, +21019=>1335, +21561=>1336, +28810=>1337, +25462=>1338, +38180=>1339, +22402=>1340, +26149=>1341, +26943=>1342, +37255=>1343, +21767=>1344, +28147=>1345, +32431=>1346, +34850=>1347, +25139=>1348, +32496=>1349, +30133=>1350, +33576=>1351, +30913=>1352, +38604=>1353, +36766=>1354, +24904=>1355, +29943=>1356, +35789=>1357, +27492=>1358, +21050=>1359, +36176=>1360, +27425=>1361, +32874=>1362, +33905=>1363, +22257=>1364, +21254=>1365, +20174=>1366, +19995=>1367, +20945=>1368, +31895=>1369, +37259=>1370, +31751=>1371, +20419=>1372, +36479=>1373, +31713=>1374, +31388=>1375, +25703=>1376, +23828=>1377, +20652=>1378, +33030=>1379, +30209=>1380, +31929=>1381, +28140=>1382, +32736=>1383, +26449=>1384, +23384=>1385, +12072=>1386, +23544=>1386, +30923=>1387, +25774=>1388, +25619=>1389, +25514=>1390, +25387=>1391, +38169=>1392, +25645=>1393, +36798=>1394, +31572=>1395, +30249=>1396, +25171=>1397, +12068=>1398, +22823=>1398, +21574=>1399, +12109=>1400, +27513=>1400, +20643=>1401, +25140=>1402, +24102=>1403, +27526=>1404, +20195=>1405, +36151=>1406, +34955=>1407, +24453=>1408, +36910=>1409, +24608=>1410, +32829=>1411, +25285=>1412, +20025=>1413, +21333=>1414, +37112=>1415, +25528=>1416, +32966=>1417, +26086=>1418, +27694=>1419, +20294=>1420, +24814=>1421, +28129=>1422, +35806=>1423, +24377=>1424, +34507=>1425, +24403=>1426, +25377=>1427, +20826=>1428, +33633=>1429, +26723=>1430, +12049=>1431, +20992=>1431, +25443=>1432, +36424=>1433, +20498=>1434, +23707=>1435, +31095=>1436, +23548=>1437, +21040=>1438, +31291=>1439, +24764=>1440, +36947=>1441, +30423=>1442, +24503=>1443, +24471=>1444, +30340=>1445, +36460=>1446, +28783=>1447, +30331=>1448, +31561=>1449, +30634=>1450, +20979=>1451, +37011=>1452, +22564=>1453, +20302=>1454, +28404=>1455, +36842=>1456, +25932=>1457, +31515=>1458, +29380=>1459, +28068=>1460, +32735=>1461, +23265=>1462, +25269=>1463, +24213=>1464, +22320=>1465, +33922=>1466, +31532=>1467, +24093=>1468, +24351=>1469, +36882=>1470, +32532=>1471, +39072=>1472, +25474=>1473, +28359=>1474, +30872=>1475, +28857=>1476, +20856=>1477, +38747=>1478, +22443=>1479, +30005=>1480, +20291=>1481, +30008=>1482, +24215=>1483, +24806=>1484, +22880=>1485, +28096=>1486, +27583=>1487, +30857=>1488, +21500=>1489, +38613=>1490, +20939=>1491, +20993=>1492, +25481=>1493, +21514=>1494, +38035=>1495, +35843=>1496, +36300=>1497, +29241=>1498, +30879=>1499, +34678=>1500, +36845=>1501, +35853=>1502, +21472=>1503, +19969=>1504, +30447=>1505, +21486=>1506, +38025=>1507, +39030=>1508, +12237=>1509, +40718=>1509, +38189=>1510, +23450=>1511, +35746=>1512, +20002=>1513, +19996=>1514, +20908=>1515, +33891=>1516, +25026=>1517, +21160=>1518, +26635=>1519, +20375=>1520, +24683=>1521, +20923=>1522, +27934=>1523, +20828=>1524, +25238=>1525, +12099=>1526, +26007=>1526, +38497=>1527, +12182=>1528, +35910=>1528, +36887=>1529, +30168=>1530, +37117=>1531, +30563=>1532, +27602=>1533, +29322=>1534, +29420=>1535, +35835=>1536, +22581=>1537, +30585=>1538, +36172=>1539, +26460=>1540, +38208=>1541, +32922=>1542, +24230=>1543, +28193=>1544, +22930=>1545, +31471=>1546, +30701=>1547, +38203=>1548, +27573=>1549, +26029=>1550, +32526=>1551, +22534=>1552, +20817=>1553, +38431=>1554, +23545=>1555, +22697=>1556, +21544=>1557, +36466=>1558, +25958=>1559, +39039=>1560, +22244=>1561, +38045=>1562, +30462=>1563, +36929=>1564, +25479=>1565, +21702=>1566, +22810=>1567, +22842=>1568, +22427=>1569, +36530=>1570, +26421=>1571, +36346=>1572, +33333=>1573, +21057=>1574, +24816=>1575, +22549=>1576, +34558=>1577, +23784=>1578, +40517=>1579, +20420=>1580, +39069=>1581, +35769=>1582, +23077=>1583, +24694=>1584, +21380=>1585, +25212=>1586, +36943=>1587, +37122=>1588, +39295=>1589, +24681=>1590, +12157=>1591, +32780=>1591, +12041=>1592, +20799=>1592, +12159=>1593, +32819=>1593, +23572=>1594, +39285=>1595, +27953=>1596, +12038=>1597, +20108=>1597, +36144=>1598, +21457=>1599, +32602=>1600, +31567=>1601, +20240=>1602, +20047=>1603, +38400=>1604, +27861=>1605, +29648=>1606, +34281=>1607, +24070=>1608, +30058=>1609, +32763=>1610, +27146=>1611, +30718=>1612, +38034=>1613, +32321=>1614, +20961=>1615, +28902=>1616, +21453=>1617, +36820=>1618, +33539=>1619, +36137=>1620, +29359=>1621, +39277=>1622, +27867=>1623, +22346=>1624, +33459=>1625, +12101=>1626, +26041=>1626, +32938=>1627, +25151=>1628, +38450=>1629, +22952=>1630, +20223=>1631, +35775=>1632, +32442=>1633, +25918=>1634, +33778=>1635, +12206=>1636, +38750=>1636, +21857=>1637, +39134=>1638, +32933=>1639, +21290=>1640, +35837=>1641, +21536=>1642, +32954=>1643, +24223=>1644, +27832=>1645, +36153=>1646, +33452=>1647, +37210=>1648, +21545=>1649, +27675=>1650, +20998=>1651, +32439=>1652, +22367=>1653, +28954=>1654, +27774=>1655, +31881=>1656, +22859=>1657, +20221=>1658, +24575=>1659, +24868=>1660, +31914=>1661, +20016=>1662, +23553=>1663, +26539=>1664, +34562=>1665, +23792=>1666, +38155=>1667, +39118=>1668, +30127=>1669, +28925=>1670, +36898=>1671, +20911=>1672, +32541=>1673, +35773=>1674, +22857=>1675, +20964=>1676, +20315=>1677, +21542=>1678, +22827=>1679, +25975=>1680, +32932=>1681, +23413=>1682, +25206=>1683, +25282=>1684, +36752=>1685, +24133=>1686, +27679=>1687, +31526=>1688, +20239=>1689, +20440=>1690, +26381=>1691, +28014=>1692, +28074=>1693, +31119=>1694, +34993=>1695, +24343=>1696, +29995=>1697, +25242=>1698, +36741=>1699, +20463=>1700, +37340=>1701, +26023=>1702, +33071=>1703, +33105=>1704, +24220=>1705, +33104=>1706, +36212=>1707, +21103=>1708, +35206=>1709, +36171=>1710, +22797=>1711, +20613=>1712, +20184=>1713, +12201=>1714, +38428=>1714, +12119=>1715, +29238=>1715, +33145=>1716, +36127=>1717, +23500=>1718, +35747=>1719, +38468=>1720, +22919=>1721, +32538=>1722, +21648=>1723, +22134=>1724, +22030=>1725, +35813=>1726, +25913=>1727, +27010=>1728, +38041=>1729, +30422=>1730, +28297=>1731, +12082=>1732, +24178=>1732, +12130=>1733, +29976=>1733, +26438=>1734, +26577=>1735, +31487=>1736, +32925=>1737, +36214=>1738, +24863=>1739, +31174=>1740, +25954=>1741, +36195=>1742, +20872=>1743, +21018=>1744, +38050=>1745, +32568=>1746, +32923=>1747, +32434=>1748, +23703=>1749, +28207=>1750, +26464=>1751, +31705=>1752, +30347=>1753, +12220=>1754, +39640=>1754, +33167=>1755, +32660=>1756, +31957=>1757, +25630=>1758, +38224=>1759, +31295=>1760, +21578=>1761, +21733=>1762, +27468=>1763, +25601=>1764, +12093=>1765, +25096=>1765, +40509=>1766, +33011=>1767, +30105=>1768, +21106=>1769, +12208=>1770, +38761=>1770, +33883=>1771, +26684=>1772, +34532=>1773, +38401=>1774, +38548=>1775, +38124=>1776, +20010=>1777, +21508=>1778, +32473=>1779, +26681=>1780, +36319=>1781, +32789=>1782, +26356=>1783, +24218=>1784, +32697=>1785, +22466=>1786, +32831=>1787, +26775=>1788, +12079=>1789, +24037=>1789, +25915=>1790, +21151=>1791, +24685=>1792, +40858=>1793, +20379=>1794, +36524=>1795, +20844=>1796, +23467=>1797, +12088=>1798, +24339=>1798, +24041=>1799, +27742=>1800, +25329=>1801, +36129=>1802, +20849=>1803, +38057=>1804, +21246=>1805, +27807=>1806, +33503=>1807, +29399=>1808, +22434=>1809, +26500=>1810, +36141=>1811, +22815=>1812, +36764=>1813, +33735=>1814, +21653=>1815, +31629=>1816, +20272=>1817, +27837=>1818, +23396=>1819, +22993=>1820, +12238=>1821, +40723=>1821, +21476=>1822, +34506=>1823, +12219=>1824, +39592=>1824, +12181=>1825, +35895=>1825, +32929=>1826, +25925=>1827, +39038=>1828, +22266=>1829, +38599=>1830, +21038=>1831, +12128=>1832, +29916=>1832, +21072=>1833, +23521=>1834, +25346=>1835, +35074=>1836, +20054=>1837, +25296=>1838, +24618=>1839, +26874=>1840, +20851=>1841, +23448=>1842, +20896=>1843, +35266=>1844, +31649=>1845, +39302=>1846, +32592=>1847, +24815=>1848, +28748=>1849, +36143=>1850, +20809=>1851, +12084=>1852, +24191=>1852, +36891=>1853, +29808=>1854, +35268=>1855, +22317=>1856, +30789=>1857, +24402=>1858, +40863=>1859, +38394=>1860, +36712=>1861, +12225=>1862, +39740=>1862, +35809=>1863, +30328=>1864, +26690=>1865, +26588=>1866, +36330=>1867, +36149=>1868, +21053=>1869, +36746=>1870, +28378=>1871, +26829=>1872, +38149=>1873, +37101=>1874, +22269=>1875, +26524=>1876, +35065=>1877, +36807=>1878, +21704=>1879, +39608=>1880, +23401=>1881, +28023=>1882, +27686=>1883, +20133=>1884, +23475=>1885, +39559=>1886, +37219=>1887, +25000=>1888, +37039=>1889, +38889=>1890, +21547=>1891, +28085=>1892, +23506=>1893, +20989=>1894, +21898=>1895, +32597=>1896, +32752=>1897, +25788=>1898, +25421=>1899, +26097=>1900, +25022=>1901, +24717=>1902, +28938=>1903, +27735=>1904, +27721=>1905, +22831=>1906, +26477=>1907, +33322=>1908, +22741=>1909, +22158=>1910, +35946=>1911, +27627=>1912, +37085=>1913, +22909=>1914, +32791=>1915, +21495=>1916, +28009=>1917, +21621=>1918, +21917=>1919, +33655=>1920, +33743=>1921, +26680=>1922, +12146=>1923, +31166=>1923, +21644=>1924, +20309=>1925, +21512=>1926, +30418=>1927, +35977=>1928, +38402=>1929, +27827=>1930, +28088=>1931, +36203=>1932, +35088=>1933, +40548=>1934, +36154=>1935, +22079=>1936, +12234=>1937, +40657=>1937, +30165=>1938, +24456=>1939, +29408=>1940, +24680=>1941, +21756=>1942, +20136=>1943, +27178=>1944, +34913=>1945, +24658=>1946, +36720=>1947, +21700=>1948, +28888=>1949, +34425=>1950, +40511=>1951, +27946=>1952, +23439=>1953, +24344=>1954, +32418=>1955, +21897=>1956, +20399=>1957, +29492=>1958, +21564=>1959, +21402=>1960, +20505=>1961, +21518=>1962, +21628=>1963, +20046=>1964, +24573=>1965, +29786=>1966, +22774=>1967, +33899=>1968, +32993=>1969, +34676=>1970, +29392=>1971, +31946=>1972, +28246=>1973, +24359=>1974, +34382=>1975, +21804=>1976, +25252=>1977, +20114=>1978, +27818=>1979, +25143=>1980, +33457=>1981, +21719=>1982, +21326=>1983, +29502=>1984, +28369=>1985, +30011=>1986, +21010=>1987, +21270=>1988, +35805=>1989, +27088=>1990, +24458=>1991, +24576=>1992, +28142=>1993, +22351=>1994, +27426=>1995, +29615=>1996, +26707=>1997, +36824=>1998, +32531=>1999, +25442=>2000, +24739=>2001, +21796=>2002, +30186=>2003, +35938=>2004, +28949=>2005, +28067=>2006, +23462=>2007, +24187=>2008, +33618=>2009, +24908=>2010, +40644=>2011, +30970=>2012, +34647=>2013, +31783=>2014, +30343=>2015, +20976=>2016, +24822=>2017, +29004=>2018, +26179=>2019, +24140=>2020, +24653=>2021, +35854=>2022, +28784=>2023, +25381=>2024, +36745=>2025, +24509=>2026, +24674=>2027, +34516=>2028, +22238=>2029, +27585=>2030, +24724=>2031, +24935=>2032, +21321=>2033, +24800=>2034, +26214=>2035, +36159=>2036, +31229=>2037, +20250=>2038, +28905=>2039, +27719=>2040, +35763=>2041, +35826=>2042, +32472=>2043, +33636=>2044, +26127=>2045, +23130=>2046, +39746=>2047, +27985=>2048, +28151=>2049, +35905=>2050, +27963=>2051, +20249=>2052, +12117=>2053, +28779=>2053, +33719=>2054, +25110=>2055, +24785=>2056, +38669=>2057, +36135=>2058, +31096=>2059, +20987=>2060, +22334=>2061, +22522=>2062, +26426=>2063, +30072=>2064, +31293=>2065, +31215=>2066, +31637=>2067, +32908=>2068, +39269=>2069, +36857=>2070, +28608=>2071, +35749=>2072, +40481=>2073, +23020=>2074, +32489=>2075, +32521=>2076, +21513=>2077, +26497=>2078, +26840=>2079, +36753=>2080, +31821=>2081, +38598=>2082, +21450=>2083, +24613=>2084, +30142=>2085, +27762=>2086, +21363=>2087, +23241=>2088, +32423=>2089, +25380=>2090, +12047=>2091, +20960=>2091, +33034=>2092, +12080=>2093, +24049=>2093, +34015=>2094, +25216=>2095, +20864=>2096, +23395=>2097, +20238=>2098, +31085=>2099, +21058=>2100, +24760=>2101, +27982=>2102, +23492=>2103, +23490=>2104, +35745=>2105, +35760=>2106, +26082=>2107, +24524=>2108, +38469=>2109, +22931=>2110, +32487=>2111, +32426=>2112, +22025=>2113, +26551=>2114, +22841=>2115, +20339=>2116, +23478=>2117, +21152=>2118, +33626=>2119, +39050=>2120, +36158=>2121, +30002=>2122, +38078=>2123, +20551=>2124, +31292=>2125, +20215=>2126, +26550=>2127, +39550=>2128, +23233=>2129, +27516=>2130, +30417=>2131, +22362=>2132, +23574=>2133, +31546=>2134, +38388=>2135, +29006=>2136, +20860=>2137, +32937=>2138, +33392=>2139, +22904=>2140, +32516=>2141, +33575=>2142, +26816=>2143, +26604=>2144, +30897=>2145, +30839=>2146, +25315=>2147, +25441=>2148, +31616=>2149, +20461=>2150, +21098=>2151, +20943=>2152, +33616=>2153, +27099=>2154, +37492=>2155, +36341=>2156, +36145=>2157, +35265=>2158, +38190=>2159, +31661=>2160, +20214=>2161, +20581=>2162, +33328=>2163, +21073=>2164, +39279=>2165, +28176=>2166, +28293=>2167, +28071=>2168, +24314=>2169, +20725=>2170, +23004=>2171, +23558=>2172, +27974=>2173, +27743=>2174, +30086=>2175, +33931=>2176, +26728=>2177, +22870=>2178, +35762=>2179, +21280=>2180, +37233=>2181, +38477=>2182, +34121=>2183, +26898=>2184, +30977=>2185, +28966=>2186, +33014=>2187, +20132=>2188, +37066=>2189, +27975=>2190, +39556=>2191, +23047=>2192, +22204=>2193, +25605=>2194, +38128=>2195, +30699=>2196, +20389=>2197, +33050=>2198, +29409=>2199, +12179=>2200, +35282=>2200, +39290=>2201, +32564=>2202, +32478=>2203, +21119=>2204, +25945=>2205, +37237=>2206, +36735=>2207, +36739=>2208, +21483=>2209, +31382=>2210, +25581=>2211, +25509=>2212, +30342=>2213, +31224=>2214, +34903=>2215, +38454=>2216, +25130=>2217, +21163=>2218, +33410=>2219, +26708=>2220, +26480=>2221, +25463=>2222, +30571=>2223, +31469=>2224, +27905=>2225, +32467=>2226, +35299=>2227, +22992=>2228, +25106=>2229, +34249=>2230, +33445=>2231, +30028=>2232, +20511=>2233, +20171=>2234, +30117=>2235, +35819=>2236, +23626=>2237, +12081=>2238, +24062=>2238, +31563=>2239, +12100=>2240, +26020=>2240, +12198=>2241, +37329=>2241, +20170=>2242, +27941=>2243, +35167=>2244, +32039=>2245, +38182=>2246, +20165=>2247, +35880=>2248, +36827=>2249, +38771=>2250, +26187=>2251, +31105=>2252, +36817=>2253, +28908=>2254, +28024=>2255, +23613=>2256, +21170=>2257, +33606=>2258, +20834=>2259, +33550=>2260, +30555=>2261, +26230=>2262, +40120=>2263, +20140=>2264, +24778=>2265, +31934=>2266, +31923=>2267, +32463=>2268, +20117=>2269, +35686=>2270, +26223=>2271, +39048=>2272, +38745=>2273, +22659=>2274, +25964=>2275, +38236=>2276, +24452=>2277, +30153=>2278, +38742=>2279, +31455=>2280, +31454=>2281, +20928=>2282, +28847=>2283, +31384=>2284, +25578=>2285, +31350=>2286, +32416=>2287, +29590=>2288, +12210=>2289, +38893=>2289, +20037=>2290, +28792=>2291, +20061=>2292, +37202=>2293, +21417=>2294, +25937=>2295, +26087=>2296, +12165=>2297, +33276=>2297, +33285=>2298, +21646=>2299, +23601=>2300, +30106=>2301, +38816=>2302, +25304=>2303, +29401=>2304, +30141=>2305, +23621=>2306, +39545=>2307, +33738=>2308, +23616=>2309, +21632=>2310, +30697=>2311, +20030=>2312, +27822=>2313, +32858=>2314, +25298=>2315, +25454=>2316, +24040=>2317, +20855=>2318, +36317=>2319, +36382=>2320, +38191=>2321, +20465=>2322, +21477=>2323, +24807=>2324, +28844=>2325, +21095=>2326, +25424=>2327, +40515=>2328, +23071=>2329, +20518=>2330, +30519=>2331, +21367=>2332, +32482=>2333, +25733=>2334, +25899=>2335, +25225=>2336, +25496=>2337, +20500=>2338, +29237=>2339, +35273=>2340, +20915=>2341, +35776=>2342, +32477=>2343, +22343=>2344, +33740=>2345, +38055=>2346, +20891=>2347, +21531=>2348, +23803=>2349, +20426=>2350, +31459=>2351, +27994=>2352, +37089=>2353, +39567=>2354, +21888=>2355, +21654=>2356, +21345=>2357, +21679=>2358, +24320=>2359, +25577=>2360, +26999=>2361, +20975=>2362, +24936=>2363, +21002=>2364, +22570=>2365, +21208=>2366, +22350=>2367, +30733=>2368, +30475=>2369, +24247=>2370, +24951=>2371, +31968=>2372, +25179=>2373, +25239=>2374, +20130=>2375, +28821=>2376, +32771=>2377, +25335=>2378, +28900=>2379, +38752=>2380, +22391=>2381, +33499=>2382, +26607=>2383, +26869=>2384, +30933=>2385, +39063=>2386, +31185=>2387, +22771=>2388, +21683=>2389, +21487=>2390, +28212=>2391, +20811=>2392, +21051=>2393, +23458=>2394, +35838=>2395, +32943=>2396, +21827=>2397, +22438=>2398, +24691=>2399, +22353=>2400, +21549=>2401, +31354=>2402, +24656=>2403, +23380=>2404, +25511=>2405, +25248=>2406, +12061=>2407, +21475=>2407, +25187=>2408, +23495=>2409, +26543=>2410, +21741=>2411, +31391=>2412, +33510=>2413, +37239=>2414, +24211=>2415, +35044=>2416, +22840=>2417, +22446=>2418, +25358=>2419, +36328=>2420, +33007=>2421, +22359=>2422, +31607=>2423, +20393=>2424, +24555=>2425, +23485=>2426, +27454=>2427, +21281=>2428, +31568=>2429, +29378=>2430, +26694=>2431, +30719=>2432, +30518=>2433, +26103=>2434, +20917=>2435, +20111=>2436, +30420=>2437, +23743=>2438, +31397=>2439, +33909=>2440, +22862=>2441, +39745=>2442, +20608=>2443, +39304=>2444, +24871=>2445, +28291=>2446, +22372=>2447, +26118=>2448, +25414=>2449, +22256=>2450, +25324=>2451, +25193=>2452, +24275=>2453, +38420=>2454, +22403=>2455, +25289=>2456, +21895=>2457, +34593=>2458, +33098=>2459, +36771=>2460, +21862=>2461, +33713=>2462, +26469=>2463, +36182=>2464, +34013=>2465, +23146=>2466, +26639=>2467, +25318=>2468, +31726=>2469, +38417=>2470, +20848=>2471, +28572=>2472, +35888=>2473, +25597=>2474, +35272=>2475, +25042=>2476, +32518=>2477, +28866=>2478, +28389=>2479, +29701=>2480, +27028=>2481, +29436=>2482, +24266=>2483, +37070=>2484, +26391=>2485, +28010=>2486, +25438=>2487, +21171=>2488, +29282=>2489, +12156=>2490, +32769=>2490, +20332=>2491, +23013=>2492, +37226=>2493, +28889=>2494, +28061=>2495, +21202=>2496, +20048=>2497, +38647=>2498, +38253=>2499, +34174=>2500, +30922=>2501, +32047=>2502, +20769=>2503, +22418=>2504, +25794=>2505, +32907=>2506, +31867=>2507, +27882=>2508, +26865=>2509, +26974=>2510, +20919=>2511, +21400=>2512, +26792=>2513, +29313=>2514, +40654=>2515, +31729=>2516, +29432=>2517, +31163=>2518, +28435=>2519, +29702=>2520, +26446=>2521, +12197=>2522, +37324=>2522, +40100=>2523, +31036=>2524, +33673=>2525, +33620=>2526, +21519=>2527, +26647=>2528, +20029=>2529, +21385=>2530, +21169=>2531, +30782=>2532, +21382=>2533, +21033=>2534, +20616=>2535, +20363=>2536, +20432=>2537, +30178=>2538, +12148=>2539, +31435=>2539, +31890=>2540, +27813=>2541, +12202=>2542, +38582=>2542, +12050=>2543, +21147=>2543, +29827=>2544, +21737=>2545, +20457=>2546, +32852=>2547, +33714=>2548, +36830=>2549, +38256=>2550, +24265=>2551, +24604=>2552, +28063=>2553, +24088=>2554, +25947=>2555, +33080=>2556, +38142=>2557, +24651=>2558, +28860=>2559, +32451=>2560, +31918=>2561, +20937=>2562, +63865=>2562, +26753=>2563, +31921=>2564, +33391=>2565, +20004=>2566, +36742=>2567, +37327=>2568, +26238=>2569, +20142=>2570, +35845=>2571, +25769=>2572, +32842=>2573, +20698=>2574, +30103=>2575, +29134=>2576, +23525=>2577, +36797=>2578, +28518=>2579, +20102=>2580, +25730=>2581, +38243=>2582, +24278=>2583, +26009=>2584, +21015=>2585, +35010=>2586, +28872=>2587, +21155=>2588, +29454=>2589, +29747=>2590, +26519=>2591, +30967=>2592, +38678=>2593, +20020=>2594, +37051=>2595, +40158=>2596, +28107=>2597, +20955=>2598, +36161=>2599, +21533=>2600, +25294=>2601, +29618=>2602, +33777=>2603, +38646=>2604, +40836=>2605, +38083=>2606, +20278=>2607, +32666=>2608, +20940=>2609, +28789=>2610, +38517=>2611, +23725=>2612, +39046=>2613, +21478=>2614, +20196=>2615, +28316=>2616, +29705=>2617, +27060=>2618, +30827=>2619, +39311=>2620, +30041=>2621, +21016=>2622, +30244=>2623, +27969=>2624, +26611=>2625, +20845=>2626, +40857=>2627, +32843=>2628, +21657=>2629, +31548=>2630, +31423=>2631, +38534=>2632, +22404=>2633, +25314=>2634, +38471=>2635, +27004=>2636, +23044=>2637, +25602=>2638, +31699=>2639, +28431=>2640, +38475=>2641, +33446=>2642, +21346=>2643, +39045=>2644, +24208=>2645, +28809=>2646, +25523=>2647, +21348=>2648, +34383=>2649, +40065=>2650, +40595=>2651, +30860=>2652, +38706=>2653, +36335=>2654, +36162=>2655, +12229=>2656, +40575=>2656, +28510=>2657, +31108=>2658, +24405=>2659, +38470=>2660, +25134=>2661, +39540=>2662, +21525=>2663, +38109=>2664, +20387=>2665, +26053=>2666, +23653=>2667, +23649=>2668, +32533=>2669, +34385=>2670, +27695=>2671, +24459=>2672, +29575=>2673, +28388=>2674, +32511=>2675, +23782=>2676, +25371=>2677, +23402=>2678, +28390=>2679, +21365=>2680, +20081=>2681, +25504=>2682, +30053=>2683, +25249=>2684, +36718=>2685, +20262=>2686, +20177=>2687, +27814=>2688, +32438=>2689, +35770=>2690, +33821=>2691, +34746=>2692, +32599=>2693, +36923=>2694, +38179=>2695, +31657=>2696, +39585=>2697, +35064=>2698, +33853=>2699, +27931=>2700, +39558=>2701, +32476=>2702, +22920=>2703, +12231=>2704, +40635=>2704, +29595=>2705, +30721=>2706, +34434=>2707, +39532=>2708, +39554=>2709, +22043=>2710, +21527=>2711, +22475=>2712, +20080=>2713, +40614=>2714, +21334=>2715, +36808=>2716, +33033=>2717, +30610=>2718, +39314=>2719, +34542=>2720, +28385=>2721, +34067=>2722, +26364=>2723, +24930=>2724, +28459=>2725, +35881=>2726, +33426=>2727, +33579=>2728, +30450=>2729, +27667=>2730, +24537=>2731, +33725=>2732, +29483=>2733, +33541=>2734, +38170=>2735, +12113=>2736, +27611=>2736, +12141=>2737, +30683=>2737, +38086=>2738, +21359=>2739, +33538=>2740, +20882=>2741, +24125=>2742, +35980=>2743, +36152=>2744, +20040=>2745, +29611=>2746, +26522=>2747, +26757=>2748, +37238=>2749, +38665=>2750, +29028=>2751, +27809=>2752, +30473=>2753, +23186=>2754, +38209=>2755, +27599=>2756, +32654=>2757, +26151=>2758, +23504=>2759, +22969=>2760, +23194=>2761, +38376=>2762, +38391=>2763, +20204=>2764, +33804=>2765, +33945=>2766, +27308=>2767, +30431=>2768, +38192=>2769, +29467=>2770, +26790=>2771, +23391=>2772, +30511=>2773, +37274=>2774, +38753=>2775, +31964=>2776, +36855=>2777, +35868=>2778, +24357=>2779, +12150=>2780, +31859=>2780, +31192=>2781, +35269=>2782, +27852=>2783, +34588=>2784, +23494=>2785, +24130=>2786, +26825=>2787, +30496=>2788, +32501=>2789, +20885=>2790, +20813=>2791, +21193=>2792, +23081=>2793, +32517=>2794, +12207=>2795, +38754=>2795, +33495=>2796, +25551=>2797, +30596=>2798, +34256=>2799, +31186=>2800, +28218=>2801, +24217=>2802, +22937=>2803, +34065=>2804, +28781=>2805, +27665=>2806, +25279=>2807, +12139=>2808, +30399=>2808, +25935=>2809, +24751=>2810, +38397=>2811, +26126=>2812, +34719=>2813, +40483=>2814, +38125=>2815, +21517=>2816, +21629=>2817, +35884=>2818, +25720=>2819, +25721=>2820, +34321=>2821, +27169=>2822, +33180=>2823, +30952=>2824, +25705=>2825, +39764=>2826, +25273=>2827, +26411=>2828, +33707=>2829, +22696=>2830, +40664=>2831, +27819=>2832, +28448=>2833, +23518=>2834, +38476=>2835, +35851=>2836, +29279=>2837, +26576=>2838, +25287=>2839, +29281=>2840, +20137=>2841, +22982=>2842, +27597=>2843, +22675=>2844, +26286=>2845, +24149=>2846, +21215=>2847, +24917=>2848, +12106=>2849, +26408=>2849, +12140=>2850, +30446=>2850, +30566=>2851, +29287=>2852, +31302=>2853, +25343=>2854, +21738=>2855, +21584=>2856, +38048=>2857, +37027=>2858, +23068=>2859, +32435=>2860, +27670=>2861, +20035=>2862, +22902=>2863, +32784=>2864, +22856=>2865, +21335=>2866, +30007=>2867, +38590=>2868, +22218=>2869, +25376=>2870, +33041=>2871, +24700=>2872, +38393=>2873, +28118=>2874, +21602=>2875, +39297=>2876, +20869=>2877, +23273=>2878, +33021=>2879, +22958=>2880, +38675=>2881, +20522=>2882, +27877=>2883, +23612=>2884, +25311=>2885, +20320=>2886, +21311=>2887, +33147=>2888, +36870=>2889, +28346=>2890, +34091=>2891, +25288=>2892, +24180=>2893, +30910=>2894, +25781=>2895, +25467=>2896, +24565=>2897, +23064=>2898, +37247=>2899, +40479=>2900, +23615=>2901, +25423=>2902, +32834=>2903, +23421=>2904, +21870=>2905, +38218=>2906, +38221=>2907, +28037=>2908, +24744=>2909, +26592=>2910, +29406=>2911, +20957=>2912, +23425=>2913, +25319=>2914, +27870=>2915, +12124=>2916, +29275=>2916, +25197=>2917, +38062=>2918, +32445=>2919, +33043=>2920, +27987=>2921, +20892=>2922, +24324=>2923, +22900=>2924, +21162=>2925, +24594=>2926, +12069=>2927, +22899=>2927, +26262=>2928, +34384=>2929, +30111=>2930, +25386=>2931, +25062=>2932, +31983=>2933, +35834=>2934, +21734=>2935, +27431=>2936, +40485=>2937, +27572=>2938, +34261=>2939, +21589=>2940, +20598=>2941, +27812=>2942, +21866=>2943, +36276=>2944, +29228=>2945, +24085=>2946, +24597=>2947, +29750=>2948, +25293=>2949, +25490=>2950, +29260=>2951, +24472=>2952, +28227=>2953, +27966=>2954, +25856=>2955, +28504=>2956, +30424=>2957, +30928=>2958, +30460=>2959, +30036=>2960, +21028=>2961, +21467=>2962, +20051=>2963, +24222=>2964, +26049=>2965, +32810=>2966, +32982=>2967, +25243=>2968, +21638=>2969, +21032=>2970, +28846=>2971, +34957=>2972, +36305=>2973, +27873=>2974, +21624=>2975, +32986=>2976, +22521=>2977, +35060=>2978, +36180=>2979, +38506=>2980, +37197=>2981, +20329=>2982, +27803=>2983, +21943=>2984, +30406=>2985, +30768=>2986, +25256=>2987, +28921=>2988, +28558=>2989, +24429=>2990, +34028=>2991, +26842=>2992, +30844=>2993, +31735=>2994, +33192=>2995, +26379=>2996, +40527=>2997, +25447=>2998, +30896=>2999, +22383=>3000, +30738=>3001, +38713=>3002, +25209=>3003, +25259=>3004, +21128=>3005, +29749=>3006, +27607=>3007, +21860=>3008, +33086=>3009, +30130=>3010, +12138=>3011, +30382=>3011, +21305=>3012, +30174=>3013, +20731=>3014, +23617=>3015, +35692=>3016, +31687=>3017, +20559=>3018, +12122=>3019, +29255=>3019, +39575=>3020, +39128=>3021, +28418=>3022, +29922=>3023, +31080=>3024, +25735=>3025, +30629=>3026, +25340=>3027, +39057=>3028, +36139=>3029, +21697=>3030, +32856=>3031, +20050=>3032, +22378=>3033, +33529=>3034, +33805=>3035, +24179=>3036, +20973=>3037, +29942=>3038, +35780=>3039, +23631=>3040, +22369=>3041, +27900=>3042, +39047=>3043, +23110=>3044, +30772=>3045, +39748=>3046, +36843=>3047, +31893=>3048, +21078=>3049, +25169=>3050, +38138=>3051, +20166=>3052, +33670=>3053, +33889=>3054, +33769=>3055, +33970=>3056, +22484=>3057, +26420=>3058, +22275=>3059, +26222=>3060, +28006=>3061, +35889=>3062, +26333=>3063, +28689=>3064, +26399=>3065, +27450=>3066, +26646=>3067, +25114=>3068, +22971=>3069, +19971=>3070, +20932=>3071, +28422=>3072, +26578=>3073, +27791=>3074, +20854=>3075, +26827=>3076, +22855=>3077, +27495=>3078, +30054=>3079, +23822=>3080, +33040=>3081, +40784=>3082, +26071=>3083, +31048=>3084, +31041=>3085, +39569=>3086, +36215=>3087, +23682=>3088, +20062=>3089, +20225=>3090, +21551=>3091, +22865=>3092, +30732=>3093, +22120=>3094, +12115=>3095, +27668=>3095, +36804=>3096, +24323=>3097, +27773=>3098, +27875=>3099, +35755=>3100, +25488=>3101, +24688=>3102, +27965=>3103, +29301=>3104, +25190=>3105, +38030=>3106, +38085=>3107, +21315=>3108, +36801=>3109, +31614=>3110, +20191=>3111, +35878=>3112, +20094=>3113, +40660=>3114, +38065=>3115, +38067=>3116, +21069=>3117, +28508=>3118, +36963=>3119, +27973=>3120, +35892=>3121, +22545=>3122, +23884=>3123, +12107=>3124, +27424=>3124, +27465=>3125, +26538=>3126, +21595=>3127, +33108=>3128, +32652=>3129, +22681=>3130, +34103=>3131, +24378=>3132, +25250=>3133, +27207=>3134, +38201=>3135, +25970=>3136, +24708=>3137, +26725=>3138, +30631=>3139, +20052=>3140, +20392=>3141, +24039=>3142, +38808=>3143, +25772=>3144, +32728=>3145, +23789=>3146, +20431=>3147, +31373=>3148, +20999=>3149, +33540=>3150, +19988=>3151, +24623=>3152, +31363=>3153, +38054=>3154, +20405=>3155, +20146=>3156, +31206=>3157, +29748=>3158, +21220=>3159, +33465=>3160, +25810=>3161, +31165=>3162, +23517=>3163, +27777=>3164, +38738=>3165, +36731=>3166, +27682=>3167, +20542=>3168, +21375=>3169, +28165=>3170, +25806=>3171, +26228=>3172, +27696=>3173, +24773=>3174, +39031=>3175, +35831=>3176, +24198=>3177, +29756=>3178, +31351=>3179, +31179=>3180, +19992=>3181, +37041=>3182, +29699=>3183, +27714=>3184, +22234=>3185, +37195=>3186, +27845=>3187, +36235=>3188, +21306=>3189, +34502=>3190, +26354=>3191, +36527=>3192, +23624=>3193, +39537=>3194, +28192=>3195, +21462=>3196, +23094=>3197, +40843=>3198, +36259=>3199, +21435=>3200, +22280=>3201, +39079=>3202, +26435=>3203, +37275=>3204, +27849=>3205, +20840=>3206, +30154=>3207, +25331=>3208, +12125=>3209, +29356=>3209, +21048=>3210, +21149=>3211, +32570=>3212, +28820=>3213, +30264=>3214, +21364=>3215, +40522=>3216, +27063=>3217, +30830=>3218, +38592=>3219, +35033=>3220, +32676=>3221, +28982=>3222, +29123=>3223, +20873=>3224, +26579=>3225, +29924=>3226, +22756=>3227, +25880=>3228, +22199=>3229, +35753=>3230, +39286=>3231, +25200=>3232, +32469=>3233, +24825=>3234, +28909=>3235, +22764=>3236, +20161=>3237, +12040=>3238, +20154=>3238, +24525=>3239, +38887=>3240, +20219=>3241, +35748=>3242, +20995=>3243, +22922=>3244, +32427=>3245, +25172=>3246, +20173=>3247, +12103=>3248, +26085=>3248, +25102=>3249, +33592=>3250, +33993=>3251, +33635=>3252, +34701=>3253, +29076=>3254, +28342=>3255, +23481=>3256, +32466=>3257, +20887=>3258, +25545=>3259, +26580=>3260, +12161=>3261, +32905=>3261, +33593=>3262, +34837=>3263, +20754=>3264, +23418=>3265, +22914=>3266, +36785=>3267, +20083=>3268, +27741=>3269, +12042=>3270, +20837=>3270, +35109=>3271, +36719=>3272, +38446=>3273, +34122=>3274, +29790=>3275, +38160=>3276, +38384=>3277, +28070=>3278, +33509=>3279, +24369=>3280, +25746=>3281, +27922=>3282, +33832=>3283, +33134=>3284, +40131=>3285, +22622=>3286, +36187=>3287, +19977=>3288, +21441=>3289, +20254=>3290, +25955=>3291, +26705=>3292, +21971=>3293, +20007=>3294, +25620=>3295, +39578=>3296, +25195=>3297, +23234=>3298, +29791=>3299, +12170=>3300, +33394=>3300, +28073=>3301, +26862=>3302, +20711=>3303, +33678=>3304, +30722=>3305, +26432=>3306, +21049=>3307, +27801=>3308, +32433=>3309, +20667=>3310, +21861=>3311, +29022=>3312, +31579=>3313, +26194=>3314, +29642=>3315, +33515=>3316, +26441=>3317, +12077=>3318, +23665=>3318, +21024=>3319, +29053=>3320, +34923=>3321, +38378=>3322, +38485=>3323, +25797=>3324, +36193=>3325, +33203=>3326, +21892=>3327, +27733=>3328, +25159=>3329, +32558=>3330, +22674=>3331, +20260=>3332, +21830=>3333, +36175=>3334, +26188=>3335, +19978=>3336, +23578=>3337, +35059=>3338, +26786=>3339, +25422=>3340, +31245=>3341, +28903=>3342, +33421=>3343, +21242=>3344, +38902=>3345, +23569=>3346, +21736=>3347, +37045=>3348, +32461=>3349, +22882=>3350, +36170=>3351, +34503=>3352, +12166=>3353, +33292=>3353, +33293=>3354, +36198=>3355, +25668=>3356, +23556=>3357, +24913=>3358, +28041=>3359, +31038=>3360, +35774=>3361, +30775=>3362, +30003=>3363, +21627=>3364, +20280=>3365, +12189=>3366, +36523=>3366, +28145=>3367, +23072=>3368, +32453=>3369, +31070=>3370, +27784=>3371, +23457=>3372, +23158=>3373, +29978=>3374, +32958=>3375, +24910=>3376, +28183=>3377, +22768=>3378, +12131=>3379, +29983=>3379, +29989=>3380, +29298=>3381, +21319=>3382, +32499=>3383, +30465=>3384, +30427=>3385, +21097=>3386, +32988=>3387, +22307=>3388, +24072=>3389, +22833=>3390, +29422=>3391, +26045=>3392, +28287=>3393, +35799=>3394, +12075=>3395, +23608=>3395, +34417=>3396, +12055=>3397, +21313=>3397, +12143=>3398, +30707=>3398, +25342=>3399, +26102=>3400, +20160=>3401, +12215=>3402, +39135=>3402, +34432=>3403, +23454=>3404, +35782=>3405, +21490=>3406, +12142=>3407, +30690=>3407, +20351=>3408, +23630=>3409, +39542=>3410, +22987=>3411, +24335=>3412, +12144=>3413, +31034=>3413, +12064=>3414, +22763=>3414, +19990=>3415, +26623=>3416, +20107=>3417, +25325=>3418, +35475=>3419, +36893=>3420, +21183=>3421, +26159=>3422, +21980=>3423, +22124=>3424, +36866=>3425, +20181=>3426, +20365=>3427, +37322=>3428, +39280=>3429, +12114=>3430, +27663=>3430, +24066=>3431, +24643=>3432, +23460=>3433, +35270=>3434, +35797=>3435, +25910=>3436, +12095=>3437, +25163=>3437, +12216=>3438, +39318=>3438, +23432=>3439, +23551=>3440, +25480=>3441, +21806=>3442, +21463=>3443, +30246=>3444, +20861=>3445, +34092=>3446, +26530=>3447, +26803=>3448, +27530=>3449, +25234=>3450, +36755=>3451, +21460=>3452, +33298=>3453, +28113=>3454, +30095=>3455, +20070=>3456, +36174=>3457, +23408=>3458, +29087=>3459, +34223=>3460, +26257=>3461, +26329=>3462, +32626=>3463, +34560=>3464, +12233=>3465, +40653=>3465, +12239=>3466, +40736=>3466, +23646=>3467, +26415=>3468, +36848=>3469, +26641=>3470, +26463=>3471, +25101=>3472, +31446=>3473, +22661=>3474, +24246=>3475, +25968=>3476, +28465=>3477, +24661=>3478, +21047=>3479, +32781=>3480, +25684=>3481, +34928=>3482, +29993=>3483, +24069=>3484, +26643=>3485, +25332=>3486, +38684=>3487, +21452=>3488, +29245=>3489, +35841=>3490, +12116=>3491, +27700=>3491, +30561=>3492, +31246=>3493, +21550=>3494, +30636=>3495, +39034=>3496, +33308=>3497, +35828=>3498, +30805=>3499, +26388=>3500, +28865=>3501, +26031=>3502, +25749=>3503, +22070=>3504, +24605=>3505, +31169=>3506, +21496=>3507, +19997=>3508, +27515=>3509, +32902=>3510, +23546=>3511, +21987=>3512, +22235=>3513, +20282=>3514, +20284=>3515, +39282=>3516, +24051=>3517, +26494=>3518, +32824=>3519, +24578=>3520, +39042=>3521, +36865=>3522, +23435=>3523, +35772=>3524, +35829=>3525, +25628=>3526, +33368=>3527, +25822=>3528, +22013=>3529, +33487=>3530, +37221=>3531, +20439=>3532, +32032=>3533, +36895=>3534, +31903=>3535, +20723=>3536, +22609=>3537, +28335=>3538, +23487=>3539, +35785=>3540, +32899=>3541, +37240=>3542, +33948=>3543, +31639=>3544, +34429=>3545, +38539=>3546, +38543=>3547, +32485=>3548, +39635=>3549, +30862=>3550, +23681=>3551, +31319=>3552, +36930=>3553, +38567=>3554, +31071=>3555, +23385=>3556, +25439=>3557, +31499=>3558, +34001=>3559, +26797=>3560, +21766=>3561, +32553=>3562, +29712=>3563, +32034=>3564, +38145=>3565, +25152=>3566, +22604=>3567, +20182=>3568, +23427=>3569, +22905=>3570, +22612=>3571, +29549=>3572, +25374=>3573, +36427=>3574, +36367=>3575, +32974=>3576, +33492=>3577, +25260=>3578, +21488=>3579, +27888=>3580, +37214=>3581, +22826=>3582, +24577=>3583, +27760=>3584, +22349=>3585, +25674=>3586, +36138=>3587, +30251=>3588, +28393=>3589, +22363=>3590, +27264=>3591, +30192=>3592, +28525=>3593, +35885=>3594, +35848=>3595, +22374=>3596, +27631=>3597, +34962=>3598, +30899=>3599, +25506=>3600, +21497=>3601, +28845=>3602, +27748=>3603, +22616=>3604, +25642=>3605, +22530=>3606, +26848=>3607, +33179=>3608, +21776=>3609, +31958=>3610, +20504=>3611, +36538=>3612, +28108=>3613, +36255=>3614, +28907=>3615, +25487=>3616, +28059=>3617, +28372=>3618, +32486=>3619, +33796=>3620, +26691=>3621, +36867=>3622, +28120=>3623, +38518=>3624, +35752=>3625, +22871=>3626, +29305=>3627, +34276=>3628, +33150=>3629, +30140=>3630, +35466=>3631, +26799=>3632, +21076=>3633, +36386=>3634, +38161=>3635, +25552=>3636, +39064=>3637, +36420=>3638, +21884=>3639, +20307=>3640, +26367=>3641, +22159=>3642, +24789=>3643, +28053=>3644, +21059=>3645, +23625=>3646, +22825=>3647, +28155=>3648, +22635=>3649, +12133=>3650, +30000=>3650, +29980=>3651, +24684=>3652, +33300=>3653, +33094=>3654, +25361=>3655, +26465=>3656, +36834=>3657, +30522=>3658, +36339=>3659, +36148=>3660, +38081=>3661, +24086=>3662, +21381=>3663, +21548=>3664, +28867=>3665, +27712=>3666, +24311=>3667, +20572=>3668, +20141=>3669, +24237=>3670, +25402=>3671, +33351=>3672, +36890=>3673, +26704=>3674, +37230=>3675, +30643=>3676, +21516=>3677, +38108=>3678, +24420=>3679, +31461=>3680, +26742=>3681, +25413=>3682, +31570=>3683, +32479=>3684, +30171=>3685, +20599=>3686, +25237=>3687, +22836=>3688, +36879=>3689, +20984=>3690, +31171=>3691, +31361=>3692, +22270=>3693, +24466=>3694, +36884=>3695, +28034=>3696, +23648=>3697, +12063=>3698, +22303=>3698, +21520=>3699, +20820=>3700, +28237=>3701, +22242=>3702, +25512=>3703, +39059=>3704, +33151=>3705, +34581=>3706, +35114=>3707, +36864=>3708, +21534=>3709, +23663=>3710, +33216=>3711, +25302=>3712, +25176=>3713, +33073=>3714, +40501=>3715, +38464=>3716, +39534=>3717, +39548=>3718, +26925=>3719, +22949=>3720, +25299=>3721, +21822=>3722, +25366=>3723, +21703=>3724, +34521=>3725, +27964=>3726, +23043=>3727, +12129=>3728, +29926=>3728, +34972=>3729, +27498=>3730, +22806=>3731, +35916=>3732, +24367=>3733, +28286=>3734, +29609=>3735, +39037=>3736, +20024=>3737, +28919=>3738, +23436=>3739, +30871=>3740, +25405=>3741, +26202=>3742, +30358=>3743, +24779=>3744, +23451=>3745, +23113=>3746, +19975=>3747, +33109=>3748, +27754=>3749, +29579=>3750, +20129=>3751, +26505=>3752, +12153=>3753, +32593=>3753, +24448=>3754, +26106=>3755, +26395=>3756, +24536=>3757, +22916=>3758, +23041=>3759, +24013=>3760, +24494=>3761, +21361=>3762, +38886=>3763, +36829=>3764, +26693=>3765, +22260=>3766, +21807=>3767, +24799=>3768, +20026=>3769, +28493=>3770, +32500=>3771, +33479=>3772, +33806=>3773, +22996=>3774, +20255=>3775, +20266=>3776, +23614=>3777, +32428=>3778, +26410=>3779, +34074=>3780, +21619=>3781, +30031=>3782, +32963=>3783, +21890=>3784, +39759=>3785, +20301=>3786, +28205=>3787, +35859=>3788, +23561=>3789, +24944=>3790, +21355=>3791, +30239=>3792, +28201=>3793, +34442=>3794, +12098=>3795, +25991=>3795, +38395=>3796, +32441=>3797, +21563=>3798, +31283=>3799, +32010=>3800, +38382=>3801, +21985=>3802, +32705=>3803, +29934=>3804, +25373=>3805, +34583=>3806, +28065=>3807, +31389=>3808, +25105=>3809, +26017=>3810, +21351=>3811, +25569=>3812, +27779=>3813, +24043=>3814, +21596=>3815, +38056=>3816, +20044=>3817, +27745=>3818, +35820=>3819, +23627=>3820, +12102=>3821, +26080=>3821, +33436=>3822, +26791=>3823, +21566=>3824, +21556=>3825, +12111=>3826, +27595=>3826, +27494=>3827, +20116=>3828, +25410=>3829, +21320=>3830, +33310=>3831, +20237=>3832, +20398=>3833, +22366=>3834, +25098=>3835, +38654=>3836, +26212=>3837, +29289=>3838, +21247=>3839, +21153=>3840, +24735=>3841, +35823=>3842, +26132=>3843, +29081=>3844, +26512=>3845, +35199=>3846, +30802=>3847, +30717=>3848, +26224=>3849, +22075=>3850, +21560=>3851, +38177=>3852, +29306=>3853, +31232=>3854, +24687=>3855, +24076=>3856, +24713=>3857, +33181=>3858, +12067=>3859, +22805=>3859, +24796=>3860, +29060=>3861, +28911=>3862, +28330=>3863, +27728=>3864, +29312=>3865, +27268=>3866, +34989=>3867, +24109=>3868, +20064=>3869, +23219=>3870, +21916=>3871, +38115=>3872, +27927=>3873, +31995=>3874, +38553=>3875, +25103=>3876, +32454=>3877, +30606=>3878, +34430=>3879, +21283=>3880, +38686=>3881, +36758=>3882, +26247=>3883, +23777=>3884, +20384=>3885, +29421=>3886, +19979=>3887, +21414=>3888, +22799=>3889, +21523=>3890, +25472=>3891, +38184=>3892, +20808=>3893, +20185=>3894, +40092=>3895, +32420=>3896, +21688=>3897, +36132=>3898, +34900=>3899, +33335=>3900, +38386=>3901, +28046=>3902, +24358=>3903, +23244=>3904, +26174=>3905, +38505=>3906, +29616=>3907, +29486=>3908, +21439=>3909, +33146=>3910, +39301=>3911, +32673=>3912, +23466=>3913, +38519=>3914, +38480=>3915, +32447=>3916, +30456=>3917, +21410=>3918, +38262=>3919, +12217=>3920, +39321=>3920, +31665=>3921, +35140=>3922, +28248=>3923, +20065=>3924, +32724=>3925, +31077=>3926, +35814=>3927, +24819=>3928, +21709=>3929, +20139=>3930, +39033=>3931, +24055=>3932, +27233=>3933, +20687=>3934, +21521=>3935, +35937=>3936, +33831=>3937, +30813=>3938, +38660=>3939, +21066=>3940, +21742=>3941, +22179=>3942, +38144=>3943, +28040=>3944, +23477=>3945, +28102=>3946, +26195=>3947, +12073=>3948, +23567=>3948, +23389=>3949, +26657=>3950, +32918=>3951, +21880=>3952, +31505=>3953, +25928=>3954, +26964=>3955, +20123=>3956, +27463=>3957, +34638=>3958, +38795=>3959, +21327=>3960, +25375=>3961, +25658=>3962, +37034=>3963, +26012=>3964, +32961=>3965, +35856=>3966, +20889=>3967, +26800=>3968, +21368=>3969, +34809=>3970, +25032=>3971, +27844=>3972, +27899=>3973, +35874=>3974, +23633=>3975, +34218=>3976, +33455=>3977, +38156=>3978, +27427=>3979, +12191=>3980, +36763=>3980, +26032=>3981, +24571=>3982, +12092=>3983, +24515=>3983, +20449=>3984, +34885=>3985, +26143=>3986, +33125=>3987, +29481=>3988, +24826=>3989, +20852=>3990, +21009=>3991, +22411=>3992, +24418=>3993, +37026=>3994, +12175=>3995, +34892=>3995, +37266=>3996, +24184=>3997, +26447=>3998, +24615=>3999, +22995=>4000, +20804=>4001, +20982=>4002, +33016=>4003, +21256=>4004, +27769=>4005, +38596=>4006, +29066=>4007, +20241=>4008, +20462=>4009, +32670=>4010, +26429=>4011, +21957=>4012, +38152=>4013, +31168=>4014, +34966=>4015, +32483=>4016, +22687=>4017, +25100=>4018, +38656=>4019, +34394=>4020, +22040=>4021, +39035=>4022, +24464=>4023, +35768=>4024, +33988=>4025, +37207=>4026, +21465=>4027, +26093=>4028, +24207=>4029, +30044=>4030, +24676=>4031, +32110=>4032, +23167=>4033, +32490=>4034, +32493=>4035, +36713=>4036, +21927=>4037, +23459=>4038, +24748=>4039, +26059=>4040, +12126=>4041, +29572=>4041, +36873=>4042, +30307=>4043, +30505=>4044, +32474=>4045, +38772=>4046, +34203=>4047, +23398=>4048, +12147=>4049, +31348=>4049, +38634=>4050, +12174=>4051, +34880=>4051, +21195=>4052, +29071=>4053, +24490=>4054, +26092=>4055, +35810=>4056, +23547=>4057, +39535=>4058, +24033=>4059, +27529=>4060, +27739=>4061, +35757=>4062, +35759=>4063, +36874=>4064, +36805=>4065, +21387=>4066, +25276=>4067, +40486=>4068, +40493=>4069, +21568=>4070, +20011=>4071, +33469=>4072, +12123=>4073, +29273=>4073, +34460=>4074, +23830=>4075, +34905=>4076, +28079=>4077, +38597=>4078, +21713=>4079, +20122=>4080, +35766=>4081, +28937=>4082, +21693=>4083, +38409=>4084, +28895=>4085, +28153=>4086, +30416=>4087, +20005=>4088, +30740=>4089, +34578=>4090, +23721=>4091, +24310=>4092, +12180=>4093, +35328=>4093, +39068=>4094, +38414=>4095, +28814=>4096, +27839=>4097, +22852=>4098, +25513=>4099, +30524=>4100, +34893=>4101, +28436=>4102, +33395=>4103, +22576=>4104, +29141=>4105, +21388=>4106, +30746=>4107, +38593=>4108, +21761=>4109, +24422=>4110, +28976=>4111, +23476=>4112, +35866=>4113, +39564=>4114, +27523=>4115, +22830=>4116, +40495=>4117, +31207=>4118, +26472=>4119, +25196=>4120, +20335=>4121, +30113=>4122, +12154=>4123, +32650=>4123, +27915=>4124, +38451=>4125, +27687=>4126, +20208=>4127, +30162=>4128, +20859=>4129, +26679=>4130, +28478=>4131, +36992=>4132, +33136=>4133, +22934=>4134, +29814=>4135, +25671=>4136, +23591=>4137, +36965=>4138, +31377=>4139, +35875=>4140, +23002=>4141, +21676=>4142, +33280=>4143, +33647=>4144, +35201=>4145, +32768=>4146, +26928=>4147, +22094=>4148, +32822=>4149, +29239=>4150, +37326=>4151, +20918=>4152, +20063=>4153, +39029=>4154, +25494=>4155, +19994=>4156, +21494=>4157, +26355=>4158, +33099=>4159, +22812=>4160, +28082=>4161, +12032=>4162, +19968=>4162, +22777=>4163, +21307=>4164, +25558=>4165, +38129=>4166, +20381=>4167, +20234=>4168, +12176=>4169, +34915=>4169, +39056=>4170, +22839=>4171, +36951=>4172, +31227=>4173, +20202=>4174, +33008=>4175, +30097=>4176, +27778=>4177, +23452=>4178, +23016=>4179, +24413=>4180, +26885=>4181, +34433=>4182, +20506=>4183, +24050=>4184, +12036=>4185, +20057=>4185, +30691=>4186, +20197=>4187, +33402=>4188, +25233=>4189, +26131=>4190, +12194=>4191, +37009=>4191, +23673=>4192, +20159=>4193, +24441=>4194, +33222=>4195, +36920=>4196, +32900=>4197, +30123=>4198, +20134=>4199, +35028=>4200, +24847=>4201, +27589=>4202, +24518=>4203, +20041=>4204, +30410=>4205, +28322=>4206, +35811=>4207, +35758=>4208, +35850=>4209, +35793=>4210, +24322=>4211, +32764=>4212, +32716=>4213, +32462=>4214, +33589=>4215, +33643=>4216, +22240=>4217, +27575=>4218, +12211=>4219, +38899=>4219, +38452=>4220, +23035=>4221, +21535=>4222, +38134=>4223, +28139=>4224, +23493=>4225, +39278=>4226, +23609=>4227, +24341=>4228, +38544=>4229, +21360=>4230, +33521=>4231, +27185=>4232, +23156=>4233, +40560=>4234, +24212=>4235, +32552=>4236, +33721=>4237, +33828=>4238, +33829=>4239, +33639=>4240, +34631=>4241, +36814=>4242, +36194=>4243, +30408=>4244, +24433=>4245, +39062=>4246, +30828=>4247, +26144=>4248, +21727=>4249, +25317=>4250, +20323=>4251, +33219=>4252, +30152=>4253, +24248=>4254, +38605=>4255, +36362=>4256, +34553=>4257, +21647=>4258, +27891=>4259, +28044=>4260, +27704=>4261, +24703=>4262, +21191=>4263, +12132=>4264, +29992=>4264, +24189=>4265, +20248=>4266, +24736=>4267, +24551=>4268, +23588=>4269, +30001=>4270, +37038=>4271, +38080=>4272, +29369=>4273, +27833=>4274, +28216=>4275, +12195=>4276, +37193=>4276, +26377=>4277, +21451=>4278, +21491=>4279, +20305=>4280, +37321=>4281, +35825=>4282, +12060=>4283, +21448=>4283, +24188=>4284, +36802=>4285, +28132=>4286, +20110=>4287, +30402=>4288, +27014=>4289, +34398=>4290, +24858=>4291, +33286=>4292, +20313=>4293, +20446=>4294, +36926=>4295, +40060=>4296, +24841=>4297, +28189=>4298, +28180=>4299, +38533=>4300, +20104=>4301, +23089=>4302, +12204=>4303, +38632=>4303, +19982=>4304, +23679=>4305, +31161=>4306, +23431=>4307, +35821=>4308, +12155=>4309, +32701=>4309, +12127=>4310, +29577=>4310, +22495=>4311, +33419=>4312, +37057=>4313, +21505=>4314, +36935=>4315, +21947=>4316, +23786=>4317, +24481=>4318, +24840=>4319, +27442=>4320, +29425=>4321, +32946=>4322, +35465=>4323, +28020=>4324, +23507=>4325, +35029=>4326, +39044=>4327, +35947=>4328, +39533=>4329, +40499=>4330, +28170=>4331, +20900=>4332, +20803=>4333, +22435=>4334, +34945=>4335, +21407=>4336, +25588=>4337, +36757=>4338, +22253=>4339, +21592=>4340, +22278=>4341, +29503=>4342, +28304=>4343, +32536=>4344, +36828=>4345, +33489=>4346, +24895=>4347, +24616=>4348, +38498=>4349, +12104=>4350, +26352=>4350, +32422=>4351, +36234=>4352, +36291=>4353, +38053=>4354, +23731=>4355, +31908=>4356, +12105=>4357, +26376=>4357, +24742=>4358, +38405=>4359, +32792=>4360, +20113=>4361, +37095=>4362, +21248=>4363, +38504=>4364, +20801=>4365, +36816=>4366, +34164=>4367, +37213=>4368, +26197=>4369, +38901=>4370, +23381=>4371, +21277=>4372, +30776=>4373, +26434=>4374, +26685=>4375, +21705=>4376, +28798=>4377, +23472=>4378, +36733=>4379, +20877=>4380, +22312=>4381, +21681=>4382, +25874=>4383, +26242=>4384, +36190=>4385, +36163=>4386, +33039=>4387, +33900=>4388, +36973=>4389, +31967=>4390, +20991=>4391, +34299=>4392, +26531=>4393, +26089=>4394, +28577=>4395, +34468=>4396, +36481=>4397, +22122=>4398, +36896=>4399, +30338=>4400, +28790=>4401, +29157=>4402, +36131=>4403, +25321=>4404, +21017=>4405, +27901=>4406, +36156=>4407, +24590=>4408, +22686=>4409, +24974=>4410, +26366=>4411, +36192=>4412, +25166=>4413, +21939=>4414, +28195=>4415, +26413=>4416, +36711=>4417, +38113=>4418, +38392=>4419, +30504=>4420, +26629=>4421, +27048=>4422, +21643=>4423, +20045=>4424, +28856=>4425, +35784=>4426, +25688=>4427, +25995=>4428, +23429=>4429, +31364=>4430, +20538=>4431, +23528=>4432, +30651=>4433, +27617=>4434, +35449=>4435, +31896=>4436, +27838=>4437, +30415=>4438, +26025=>4439, +36759=>4440, +23853=>4441, +23637=>4442, +34360=>4443, +26632=>4444, +21344=>4445, +25112=>4446, +31449=>4447, +28251=>4448, +32509=>4449, +27167=>4450, +31456=>4451, +24432=>4452, +28467=>4453, +24352=>4454, +25484=>4455, +28072=>4456, +26454=>4457, +19976=>4458, +24080=>4459, +36134=>4460, +20183=>4461, +32960=>4462, +30260=>4463, +38556=>4464, +25307=>4465, +26157=>4466, +25214=>4467, +27836=>4468, +36213=>4469, +29031=>4470, +32617=>4471, +20806=>4472, +32903=>4473, +21484=>4474, +36974=>4475, +25240=>4476, +21746=>4477, +34544=>4478, +36761=>4479, +32773=>4480, +38167=>4481, +34071=>4482, +36825=>4483, +27993=>4484, +29645=>4485, +26015=>4486, +30495=>4487, +29956=>4488, +30759=>4489, +33275=>4490, +36126=>4491, +38024=>4492, +20390=>4493, +26517=>4494, +30137=>4495, +35786=>4496, +38663=>4497, +25391=>4498, +38215=>4499, +38453=>4500, +33976=>4501, +25379=>4502, +30529=>4503, +24449=>4504, +29424=>4505, +20105=>4506, +24596=>4507, +25972=>4508, +25327=>4509, +27491=>4510, +25919=>4511, +24103=>4512, +30151=>4513, +37073=>4514, +35777=>4515, +33437=>4516, +26525=>4517, +12096=>4518, +25903=>4518, +21553=>4519, +34584=>4520, +30693=>4521, +32930=>4522, +33026=>4523, +27713=>4524, +20043=>4525, +32455=>4526, +32844=>4527, +30452=>4528, +26893=>4529, +27542=>4530, +25191=>4531, +20540=>4532, +20356=>4533, +22336=>4534, +25351=>4535, +12108=>4536, +27490=>4536, +36286=>4537, +21482=>4538, +26088=>4539, +32440=>4540, +24535=>4541, +25370=>4542, +25527=>4543, +12164=>4544, +33267=>4544, +33268=>4545, +32622=>4546, +24092=>4547, +23769=>4548, +21046=>4549, +26234=>4550, +31209=>4551, +31258=>4552, +36136=>4553, +28825=>4554, +30164=>4555, +28382=>4556, +27835=>4557, +31378=>4558, +20013=>4559, +30405=>4560, +24544=>4561, +38047=>4562, +34935=>4563, +32456=>4564, +31181=>4565, +32959=>4566, +37325=>4567, +20210=>4568, +20247=>4569, +12168=>4570, +33311=>4570, +21608=>4571, +24030=>4572, +27954=>4573, +35788=>4574, +31909=>4575, +36724=>4576, +32920=>4577, +24090=>4578, +21650=>4579, +30385=>4580, +23449=>4581, +26172=>4582, +39588=>4583, +29664=>4584, +26666=>4585, +34523=>4586, +26417=>4587, +29482=>4588, +35832=>4589, +35803=>4590, +36880=>4591, +12149=>4592, +31481=>4592, +28891=>4593, +29038=>4594, +25284=>4595, +30633=>4596, +22065=>4597, +20027=>4598, +33879=>4599, +26609=>4600, +21161=>4601, +34496=>4602, +36142=>4603, +38136=>4604, +31569=>4605, +20303=>4606, +27880=>4607, +31069=>4608, +39547=>4609, +25235=>4610, +12118=>4611, +29226=>4611, +25341=>4612, +19987=>4613, +30742=>4614, +36716=>4615, +25776=>4616, +36186=>4617, +31686=>4618, +26729=>4619, +24196=>4620, +35013=>4621, +22918=>4622, +25758=>4623, +22766=>4624, +29366=>4625, +26894=>4626, +38181=>4627, +36861=>4628, +36184=>4629, +22368=>4630, +32512=>4631, +35846=>4632, +20934=>4633, +25417=>4634, +25305=>4635, +21331=>4636, +26700=>4637, +29730=>4638, +33537=>4639, +37196=>4640, +21828=>4641, +30528=>4642, +28796=>4643, +27978=>4644, +20857=>4645, +21672=>4646, +36164=>4647, +23039=>4648, +28363=>4649, +28100=>4650, +23388=>4651, +32043=>4652, +20180=>4653, +31869=>4654, +28371=>4655, +12070=>4656, +23376=>4656, +12163=>4657, +33258=>4657, +28173=>4658, +23383=>4659, +39683=>4660, +26837=>4661, +36394=>4662, +23447=>4663, +32508=>4664, +24635=>4665, +32437=>4666, +37049=>4667, +12187=>4668, +36208=>4668, +22863=>4669, +25549=>4670, +31199=>4671, +12188=>4672, +36275=>4672, +21330=>4673, +26063=>4674, +31062=>4675, +35781=>4676, +38459=>4677, +32452=>4678, +38075=>4679, +32386=>4680, +22068=>4681, +37257=>4682, +26368=>4683, +32618=>4684, +23562=>4685, +36981=>4686, +26152=>4687, +24038=>4688, +20304=>4689, +26590=>4690, +20570=>4691, +20316=>4692, +22352=>4693, +24231=>4694, +20109=>4695, +19980=>4696, +20800=>4697, +64012=>4697, +19984=>4698, +24319=>4699, +21317=>4700, +19989=>4701, +20120=>4702, +19998=>4703, +12224=>4704, +39730=>4704, +23404=>4705, +22121=>4706, +12033=>4707, +20008=>4707, +31162=>4708, +12035=>4709, +20031=>4709, +12052=>4710, +21269=>4710, +20039=>4711, +22829=>4712, +12120=>4713, +29243=>4713, +21358=>4714, +27664=>4715, +22239=>4716, +32996=>4717, +39319=>4718, +27603=>4719, +30590=>4720, +40727=>4721, +12034=>4722, +20022=>4722, +20127=>4723, +40720=>4724, +20060=>4725, +20073=>4726, +20115=>4727, +33416=>4728, +23387=>4729, +21868=>4730, +22031=>4731, +20164=>4732, +21389=>4733, +21405=>4734, +21411=>4735, +21413=>4736, +21422=>4737, +38757=>4738, +36189=>4739, +12053=>4740, +21274=>4740, +21493=>4741, +21286=>4742, +21294=>4743, +21310=>4744, +36188=>4745, +21350=>4746, +21347=>4747, +20994=>4748, +21000=>4749, +21006=>4750, +21037=>4751, +21043=>4752, +21055=>4753, +21056=>4754, +21068=>4755, +21086=>4756, +21089=>4757, +21084=>4758, +33967=>4759, +21117=>4760, +21122=>4761, +21121=>4762, +21136=>4763, +21139=>4764, +12044=>4765, +20866=>4765, +32596=>4766, +20155=>4767, +20163=>4768, +20169=>4769, +20162=>4770, +20200=>4771, +20193=>4772, +20203=>4773, +20190=>4774, +20251=>4775, +20211=>4776, +20258=>4777, +20324=>4778, +20213=>4779, +20261=>4780, +20263=>4781, +20233=>4782, +20267=>4783, +20318=>4784, +20327=>4785, +25912=>4786, +20314=>4787, +20317=>4788, +20319=>4789, +20311=>4790, +20274=>4791, +20285=>4792, +20342=>4793, +20340=>4794, +20369=>4795, +20361=>4796, +20355=>4797, +20367=>4798, +20350=>4799, +20347=>4800, +20394=>4801, +20348=>4802, +20396=>4803, +20372=>4804, +20454=>4805, +20456=>4806, +20458=>4807, +20421=>4808, +20442=>4809, +20451=>4810, +20444=>4811, +20433=>4812, +20447=>4813, +20472=>4814, +20521=>4815, +20556=>4816, +20467=>4817, +20524=>4818, +20495=>4819, +20526=>4820, +20525=>4821, +20478=>4822, +20508=>4823, +20492=>4824, +20517=>4825, +20520=>4826, +20606=>4827, +20547=>4828, +20565=>4829, +20552=>4830, +20558=>4831, +20588=>4832, +20603=>4833, +20645=>4834, +20647=>4835, +20649=>4836, +20666=>4837, +20694=>4838, +20742=>4839, +20717=>4840, +20716=>4841, +20710=>4842, +20718=>4843, +20743=>4844, +20747=>4845, +20189=>4846, +27709=>4847, +20312=>4848, +20325=>4849, +20430=>4850, +12245=>4851, +40864=>4851, +27718=>4852, +31860=>4853, +20846=>4854, +24061=>4855, +40649=>4856, +39320=>4857, +20865=>4858, +22804=>4859, +12051=>4860, +21241=>4860, +21261=>4861, +35335=>4862, +21264=>4863, +20971=>4864, +22809=>4865, +20821=>4866, +12039=>4867, +20128=>4867, +20822=>4868, +20147=>4869, +34926=>4870, +34980=>4871, +20149=>4872, +33044=>4873, +35026=>4874, +31104=>4875, +23348=>4876, +34819=>4877, +32696=>4878, +12046=>4879, +20907=>4879, +20913=>4880, +20925=>4881, +20924=>4882, +20935=>4883, +12045=>4884, +20886=>4884, +20898=>4885, +20901=>4886, +35744=>4887, +35750=>4888, +35751=>4889, +35754=>4890, +35764=>4891, +35765=>4892, +35767=>4893, +35778=>4894, +35779=>4895, +35787=>4896, +35791=>4897, +35790=>4898, +35794=>4899, +35795=>4900, +35796=>4901, +35798=>4902, +35800=>4903, +35801=>4904, +35804=>4905, +35807=>4906, +35808=>4907, +35812=>4908, +35816=>4909, +35817=>4910, +35822=>4911, +35824=>4912, +35827=>4913, +35830=>4914, +35833=>4915, +35836=>4916, +35839=>4917, +35840=>4918, +35842=>4919, +35844=>4920, +35847=>4921, +35852=>4922, +35855=>4923, +35857=>4924, +35858=>4925, +35860=>4926, +35861=>4927, +35862=>4928, +35865=>4929, +35867=>4930, +35864=>4931, +35869=>4932, +35871=>4933, +35872=>4934, +35873=>4935, +35877=>4936, +35879=>4937, +35882=>4938, +35883=>4939, +35886=>4940, +35887=>4941, +35890=>4942, +35891=>4943, +35893=>4944, +35894=>4945, +12057=>4946, +21353=>4946, +21370=>4947, +38429=>4948, +38434=>4949, +38433=>4950, +38449=>4951, +38442=>4952, +38461=>4953, +38460=>4954, +38466=>4955, +38473=>4956, +38484=>4957, +38495=>4958, +38503=>4959, +38508=>4960, +38514=>4961, +38516=>4962, +38536=>4963, +38541=>4964, +38551=>4965, +38576=>4966, +37015=>4967, +37019=>4968, +37021=>4969, +37017=>4970, +37036=>4971, +37025=>4972, +37044=>4973, +37043=>4974, +37046=>4975, +37050=>4976, +37048=>4977, +37040=>4978, +37071=>4979, +37061=>4980, +37054=>4981, +37072=>4982, +37060=>4983, +37063=>4984, +37075=>4985, +37094=>4986, +37090=>4987, +37084=>4988, +37079=>4989, +37083=>4990, +37099=>4991, +37103=>4992, +37118=>4993, +37124=>4994, +37154=>4995, +37150=>4996, +37155=>4997, +37169=>4998, +37167=>4999, +37177=>5000, +37187=>5001, +37190=>5002, +21005=>5003, +22850=>5004, +21154=>5005, +21164=>5006, +21165=>5007, +21182=>5008, +21759=>5009, +21200=>5010, +21206=>5011, +21232=>5012, +21471=>5013, +29166=>5014, +30669=>5015, +12085=>5016, +24308=>5016, +12048=>5017, +20981=>5017, +20988=>5018, +12223=>5019, +39727=>5019, +12059=>5020, +21430=>5020, +24321=>5021, +30042=>5022, +24047=>5023, +22348=>5024, +22441=>5025, +22433=>5026, +22654=>5027, +22716=>5028, +22725=>5029, +22737=>5030, +22313=>5031, +22316=>5032, +22314=>5033, +22323=>5034, +22329=>5035, +22318=>5036, +22319=>5037, +22364=>5038, +22331=>5039, +22338=>5040, +22377=>5041, +22405=>5042, +22379=>5043, +22406=>5044, +22396=>5045, +22395=>5046, +22376=>5047, +22381=>5048, +22390=>5049, +22387=>5050, +22445=>5051, +22436=>5052, +22412=>5053, +22450=>5054, +22479=>5055, +22439=>5056, +22452=>5057, +22419=>5058, +22432=>5059, +22485=>5060, +22488=>5061, +22490=>5062, +22489=>5063, +22482=>5064, +22456=>5065, +22516=>5066, +22511=>5067, +22520=>5068, +22500=>5069, +22493=>5070, +22539=>5071, +22541=>5072, +22525=>5073, +22509=>5074, +22528=>5075, +22558=>5076, +22553=>5077, +22596=>5078, +22560=>5079, +22629=>5080, +22636=>5081, +22657=>5082, +22665=>5083, +22682=>5084, +22656=>5085, +39336=>5086, +40729=>5087, +25087=>5088, +33401=>5089, +33405=>5090, +33407=>5091, +33423=>5092, +33418=>5093, +33448=>5094, +33412=>5095, +33422=>5096, +33425=>5097, +33431=>5098, +33433=>5099, +33451=>5100, +33464=>5101, +33470=>5102, +33456=>5103, +33480=>5104, +33482=>5105, +33507=>5106, +33432=>5107, +33463=>5108, +33454=>5109, +33483=>5110, +33484=>5111, +33473=>5112, +33449=>5113, +33460=>5114, +33441=>5115, +33450=>5116, +33439=>5117, +33476=>5118, +33486=>5119, +33444=>5120, +33505=>5121, +33545=>5122, +33527=>5123, +33508=>5124, +33551=>5125, +33543=>5126, +33500=>5127, +33524=>5128, +33490=>5129, +33496=>5130, +33548=>5131, +33531=>5132, +33491=>5133, +33553=>5134, +33562=>5135, +33542=>5136, +33556=>5137, +33557=>5138, +33504=>5139, +33493=>5140, +33564=>5141, +33617=>5142, +33627=>5143, +33628=>5144, +33544=>5145, +33682=>5146, +33596=>5147, +33588=>5148, +33585=>5149, +33691=>5150, +33630=>5151, +33583=>5152, +33615=>5153, +33607=>5154, +33603=>5155, +33631=>5156, +33600=>5157, +33559=>5158, +33632=>5159, +33581=>5160, +33594=>5161, +33587=>5162, +33638=>5163, +33637=>5164, +33640=>5165, +33563=>5166, +33641=>5167, +33644=>5168, +33642=>5169, +33645=>5170, +33646=>5171, +33712=>5172, +33656=>5173, +33715=>5174, +33716=>5175, +33696=>5176, +33706=>5177, +33683=>5178, +33692=>5179, +33669=>5180, +33660=>5181, +33718=>5182, +33705=>5183, +33661=>5184, +33720=>5185, +33659=>5186, +33688=>5187, +33694=>5188, +33704=>5189, +33722=>5190, +33724=>5191, +33729=>5192, +33793=>5193, +33765=>5194, +33752=>5195, +22535=>5196, +33816=>5197, +33803=>5198, +33757=>5199, +33789=>5200, +33750=>5201, +33820=>5202, +33848=>5203, +33809=>5204, +33798=>5205, +33748=>5206, +33759=>5207, +33807=>5208, +33795=>5209, +33784=>5210, +33785=>5211, +33770=>5212, +33733=>5213, +33728=>5214, +33830=>5215, +33776=>5216, +33761=>5217, +33884=>5218, +33873=>5219, +33882=>5220, +33881=>5221, +33907=>5222, +33927=>5223, +33928=>5224, +33914=>5225, +33929=>5226, +33912=>5227, +33852=>5228, +33862=>5229, +33897=>5230, +33910=>5231, +33932=>5232, +33934=>5233, +33841=>5234, +33901=>5235, +33985=>5236, +33997=>5237, +34000=>5238, +34022=>5239, +33981=>5240, +34003=>5241, +33994=>5242, +33983=>5243, +33978=>5244, +34016=>5245, +33953=>5246, +33977=>5247, +33972=>5248, +33943=>5249, +34021=>5250, +34019=>5251, +34060=>5252, +29965=>5253, +34104=>5254, +34032=>5255, +34105=>5256, +34079=>5257, +34106=>5258, +34134=>5259, +34107=>5260, +34047=>5261, +34044=>5262, +34137=>5263, +34120=>5264, +34152=>5265, +34148=>5266, +34142=>5267, +34170=>5268, +30626=>5269, +34115=>5270, +34162=>5271, +34171=>5272, +34212=>5273, +34216=>5274, +34183=>5275, +34191=>5276, +34169=>5277, +34222=>5278, +34204=>5279, +34181=>5280, +34233=>5281, +34231=>5282, +34224=>5283, +34259=>5284, +34241=>5285, +34268=>5286, +34303=>5287, +34343=>5288, +34309=>5289, +34345=>5290, +34326=>5291, +34364=>5292, +12086=>5293, +24318=>5293, +24328=>5294, +22844=>5295, +22849=>5296, +32823=>5297, +22869=>5298, +22874=>5299, +22872=>5300, +21263=>5301, +12074=>5302, +23586=>5302, +23589=>5303, +23596=>5304, +23604=>5305, +25164=>5306, +25194=>5307, +25247=>5308, +25275=>5309, +25290=>5310, +25306=>5311, +25303=>5312, +25326=>5313, +25378=>5314, +25334=>5315, +25401=>5316, +25419=>5317, +25411=>5318, +25517=>5319, +25590=>5320, +25457=>5321, +25466=>5322, +25486=>5323, +25524=>5324, +25453=>5325, +25516=>5326, +25482=>5327, +25449=>5328, +25518=>5329, +25532=>5330, +25586=>5331, +25592=>5332, +25568=>5333, +25599=>5334, +25540=>5335, +25566=>5336, +25550=>5337, +25682=>5338, +25542=>5339, +25534=>5340, +25669=>5341, +25665=>5342, +25611=>5343, +25627=>5344, +25632=>5345, +25612=>5346, +25638=>5347, +25633=>5348, +25694=>5349, +25732=>5350, +25709=>5351, +25750=>5352, +25722=>5353, +25783=>5354, +25784=>5355, +25753=>5356, +25786=>5357, +25792=>5358, +25808=>5359, +25815=>5360, +25828=>5361, +25826=>5362, +25865=>5363, +25893=>5364, +25902=>5365, +12087=>5366, +24331=>5366, +24530=>5367, +29977=>5368, +24337=>5369, +21343=>5370, +21489=>5371, +21501=>5372, +21481=>5373, +21480=>5374, +21499=>5375, +21522=>5376, +21526=>5377, +21510=>5378, +21579=>5379, +21586=>5380, +21587=>5381, +21588=>5382, +21590=>5383, +21571=>5384, +21537=>5385, +21591=>5386, +21593=>5387, +21539=>5388, +21554=>5389, +21634=>5390, +21652=>5391, +21623=>5392, +21617=>5393, +21604=>5394, +21658=>5395, +21659=>5396, +21636=>5397, +21622=>5398, +21606=>5399, +21661=>5400, +21712=>5401, +21677=>5402, +21698=>5403, +21684=>5404, +21714=>5405, +21671=>5406, +21670=>5407, +21715=>5408, +21716=>5409, +21618=>5410, +21667=>5411, +21717=>5412, +21691=>5413, +21695=>5414, +21708=>5415, +21721=>5416, +21722=>5417, +21724=>5418, +21673=>5419, +21674=>5420, +21668=>5421, +21725=>5422, +21711=>5423, +21726=>5424, +21787=>5425, +21735=>5426, +21792=>5427, +21757=>5428, +21780=>5429, +21747=>5430, +21794=>5431, +21795=>5432, +21775=>5433, +21777=>5434, +21799=>5435, +21802=>5436, +21863=>5437, +21903=>5438, +21941=>5439, +21833=>5440, +21869=>5441, +21825=>5442, +21845=>5443, +21823=>5444, +21840=>5445, +21820=>5446, +21815=>5447, +21846=>5448, +21877=>5449, +21878=>5450, +21879=>5451, +21811=>5452, +21808=>5453, +21852=>5454, +21899=>5455, +21970=>5456, +21891=>5457, +21937=>5458, +21945=>5459, +21896=>5460, +21889=>5461, +21919=>5462, +21886=>5463, +21974=>5464, +21905=>5465, +21883=>5466, +21983=>5467, +21949=>5468, +21950=>5469, +21908=>5470, +21913=>5471, +21994=>5472, +22007=>5473, +21961=>5474, +22047=>5475, +21969=>5476, +21995=>5477, +21996=>5478, +21972=>5479, +21990=>5480, +21981=>5481, +21956=>5482, +21999=>5483, +21989=>5484, +22002=>5485, +22003=>5486, +21964=>5487, +21965=>5488, +21992=>5489, +22005=>5490, +21988=>5491, +36756=>5492, +22046=>5493, +22024=>5494, +22028=>5495, +22017=>5496, +22052=>5497, +22051=>5498, +22014=>5499, +22016=>5500, +22055=>5501, +22061=>5502, +22104=>5503, +22073=>5504, +22103=>5505, +22060=>5506, +22093=>5507, +22114=>5508, +22105=>5509, +22108=>5510, +22092=>5511, +22100=>5512, +22150=>5513, +22116=>5514, +22129=>5515, +22123=>5516, +22139=>5517, +22140=>5518, +22149=>5519, +22163=>5520, +22191=>5521, +22228=>5522, +12062=>5523, +22231=>5523, +22237=>5524, +22241=>5525, +22261=>5526, +22251=>5527, +22265=>5528, +22271=>5529, +22276=>5530, +22282=>5531, +22281=>5532, +22300=>5533, +24079=>5534, +24089=>5535, +24084=>5536, +24081=>5537, +24113=>5538, +24123=>5539, +24124=>5540, +24119=>5541, +24132=>5542, +24148=>5543, +24155=>5544, +24158=>5545, +24161=>5546, +23692=>5547, +23674=>5548, +23693=>5549, +23696=>5550, +23702=>5551, +23688=>5552, +23704=>5553, +23705=>5554, +23697=>5555, +23706=>5556, +23708=>5557, +23733=>5558, +23714=>5559, +23741=>5560, +23724=>5561, +23723=>5562, +23729=>5563, +23715=>5564, +23745=>5565, +23735=>5566, +23748=>5567, +23762=>5568, +23780=>5569, +23755=>5570, +23781=>5571, +23810=>5572, +23811=>5573, +23847=>5574, +23846=>5575, +23854=>5576, +23844=>5577, +23838=>5578, +23814=>5579, +23835=>5580, +23896=>5581, +23870=>5582, +23860=>5583, +23869=>5584, +23916=>5585, +23899=>5586, +23919=>5587, +23901=>5588, +23915=>5589, +23883=>5590, +23882=>5591, +23913=>5592, +23924=>5593, +23938=>5594, +23961=>5595, +23965=>5596, +35955=>5597, +23991=>5598, +24005=>5599, +12091=>5600, +24435=>5600, +24439=>5601, +24450=>5602, +24455=>5603, +24457=>5604, +24460=>5605, +24469=>5606, +24473=>5607, +24476=>5608, +24488=>5609, +24493=>5610, +24501=>5611, +24508=>5612, +34914=>5613, +12090=>5614, +24417=>5614, +29357=>5615, +29360=>5616, +29364=>5617, +29367=>5618, +29368=>5619, +29379=>5620, +29377=>5621, +29390=>5622, +29389=>5623, +29394=>5624, +29416=>5625, +29423=>5626, +29417=>5627, +29426=>5628, +29428=>5629, +29431=>5630, +29441=>5631, +29427=>5632, +29443=>5633, +29434=>5634, +29435=>5635, +29463=>5636, +29459=>5637, +29473=>5638, +29450=>5639, +29470=>5640, +29469=>5641, +29461=>5642, +29474=>5643, +29497=>5644, +29477=>5645, +29484=>5646, +29496=>5647, +29489=>5648, +29520=>5649, +29517=>5650, +29527=>5651, +29536=>5652, +29548=>5653, +29551=>5654, +29566=>5655, +12167=>5656, +33307=>5656, +22821=>5657, +39143=>5658, +22820=>5659, +12065=>5660, +22786=>5660, +39267=>5661, +39271=>5662, +39272=>5663, +39273=>5664, +39274=>5665, +39275=>5666, +39276=>5667, +39284=>5668, +39287=>5669, +39293=>5670, +39296=>5671, +39300=>5672, +39303=>5673, +39306=>5674, +39309=>5675, +39312=>5676, +39313=>5677, +39315=>5678, +39316=>5679, +39317=>5680, +24192=>5681, +24209=>5682, +24203=>5683, +24214=>5684, +24229=>5685, +24224=>5686, +24249=>5687, +24245=>5688, +24254=>5689, +24243=>5690, +36179=>5691, +24274=>5692, +24273=>5693, +24283=>5694, +24296=>5695, +24298=>5696, +33210=>5697, +24516=>5698, +24521=>5699, +24534=>5700, +24527=>5701, +24579=>5702, +24558=>5703, +24580=>5704, +24545=>5705, +24548=>5706, +24574=>5707, +24581=>5708, +24582=>5709, +24554=>5710, +24557=>5711, +24568=>5712, +24601=>5713, +24629=>5714, +24614=>5715, +24603=>5716, +24591=>5717, +24589=>5718, +24617=>5719, +24619=>5720, +24586=>5721, +24639=>5722, +24609=>5723, +24696=>5724, +24697=>5725, +24699=>5726, +24698=>5727, +24642=>5728, +24682=>5729, +24701=>5730, +24726=>5731, +24730=>5732, +24749=>5733, +24733=>5734, +24707=>5735, +24722=>5736, +24716=>5737, +24731=>5738, +24812=>5739, +24763=>5740, +24753=>5741, +24797=>5742, +24792=>5743, +24774=>5744, +24794=>5745, +24756=>5746, +24864=>5747, +24870=>5748, +24853=>5749, +24867=>5750, +24820=>5751, +24832=>5752, +24846=>5753, +24875=>5754, +24906=>5755, +24949=>5756, +25004=>5757, +24980=>5758, +24999=>5759, +25015=>5760, +25044=>5761, +25077=>5762, +24541=>5763, +38579=>5764, +38377=>5765, +38379=>5766, +38385=>5767, +38387=>5768, +38389=>5769, +38390=>5770, +38396=>5771, +38398=>5772, +38403=>5773, +38404=>5774, +38406=>5775, +38408=>5776, +38410=>5777, +38411=>5778, +38412=>5779, +38413=>5780, +38415=>5781, +38418=>5782, +38421=>5783, +38422=>5784, +38423=>5785, +38425=>5786, +38426=>5787, +20012=>5788, +12121=>5789, +29247=>5789, +25109=>5790, +27701=>5791, +27732=>5792, +27740=>5793, +27722=>5794, +27811=>5795, +27781=>5796, +27792=>5797, +27796=>5798, +27788=>5799, +27752=>5800, +27753=>5801, +27764=>5802, +27766=>5803, +27782=>5804, +27817=>5805, +27856=>5806, +27860=>5807, +27821=>5808, +27895=>5809, +27896=>5810, +27889=>5811, +27863=>5812, +27826=>5813, +27872=>5814, +27862=>5815, +27898=>5816, +27883=>5817, +27886=>5818, +27825=>5819, +27859=>5820, +27887=>5821, +27902=>5822, +27961=>5823, +27943=>5824, +27916=>5825, +27971=>5826, +27976=>5827, +27911=>5828, +27908=>5829, +27929=>5830, +27918=>5831, +27947=>5832, +27981=>5833, +27950=>5834, +27957=>5835, +27930=>5836, +27983=>5837, +27986=>5838, +27988=>5839, +27955=>5840, +28049=>5841, +28015=>5842, +28062=>5843, +28064=>5844, +27998=>5845, +28051=>5846, +28052=>5847, +27996=>5848, +28000=>5849, +28028=>5850, +28003=>5851, +28186=>5852, +28103=>5853, +28101=>5854, +28126=>5855, +28174=>5856, +28095=>5857, +28128=>5858, +28177=>5859, +28134=>5860, +28125=>5861, +28121=>5862, +28182=>5863, +28075=>5864, +28172=>5865, +28078=>5866, +28203=>5867, +28270=>5868, +28238=>5869, +28267=>5870, +28338=>5871, +28255=>5872, +28294=>5873, +28243=>5874, +28244=>5875, +28210=>5876, +28197=>5877, +28228=>5878, +28383=>5879, +28337=>5880, +28312=>5881, +28384=>5882, +28461=>5883, +28386=>5884, +28325=>5885, +28327=>5886, +28349=>5887, +28347=>5888, +28343=>5889, +28375=>5890, +28340=>5891, +28367=>5892, +28303=>5893, +28354=>5894, +28319=>5895, +28514=>5896, +28486=>5897, +28487=>5898, +28452=>5899, +28437=>5900, +28409=>5901, +28463=>5902, +28470=>5903, +28491=>5904, +28532=>5905, +28458=>5906, +28425=>5907, +28457=>5908, +28553=>5909, +28557=>5910, +28556=>5911, +28536=>5912, +28530=>5913, +28540=>5914, +28538=>5915, +28625=>5916, +28617=>5917, +28583=>5918, +28601=>5919, +28598=>5920, +28610=>5921, +28641=>5922, +28654=>5923, +28638=>5924, +28640=>5925, +28655=>5926, +28698=>5927, +28707=>5928, +28699=>5929, +28729=>5930, +28725=>5931, +28751=>5932, +28766=>5933, +12071=>5934, +23424=>5934, +23428=>5935, +23445=>5936, +23443=>5937, +23461=>5938, +23480=>5939, +29999=>5940, +39582=>5941, +25652=>5942, +23524=>5943, +23534=>5944, +35120=>5945, +23536=>5946, +36423=>5947, +35591=>5948, +36790=>5949, +36819=>5950, +36821=>5951, +36837=>5952, +36846=>5953, +36836=>5954, +36841=>5955, +36838=>5956, +36851=>5957, +36840=>5958, +36869=>5959, +36868=>5960, +36875=>5961, +36902=>5962, +36881=>5963, +36877=>5964, +36886=>5965, +36897=>5966, +36917=>5967, +36918=>5968, +36909=>5969, +36911=>5970, +36932=>5971, +36945=>5972, +36946=>5973, +36944=>5974, +36968=>5975, +36952=>5976, +36962=>5977, +36955=>5978, +26297=>5979, +36980=>5980, +36989=>5981, +36994=>5982, +37000=>5983, +36995=>5984, +37003=>5985, +12089=>5986, +24400=>5986, +24407=>5987, +24406=>5988, +24408=>5989, +23611=>5990, +21675=>5991, +23632=>5992, +23641=>5993, +23409=>5994, +23651=>5995, +23654=>5996, +32700=>5997, +24362=>5998, +24361=>5999, +24365=>6000, +33396=>6001, +24380=>6002, +39739=>6003, +12076=>6004, +23662=>6004, +22913=>6005, +22915=>6006, +22925=>6007, +22953=>6008, +22954=>6009, +22947=>6010, +22935=>6011, +22986=>6012, +22955=>6013, +22942=>6014, +22948=>6015, +22994=>6016, +22962=>6017, +22959=>6018, +22999=>6019, +22974=>6020, +23045=>6021, +23046=>6022, +23005=>6023, +23048=>6024, +23011=>6025, +23000=>6026, +23033=>6027, +23052=>6028, +23049=>6029, +23090=>6030, +23092=>6031, +23057=>6032, +23075=>6033, +23059=>6034, +23104=>6035, +23143=>6036, +23114=>6037, +23125=>6038, +23100=>6039, +23138=>6040, +23157=>6041, +33004=>6042, +23210=>6043, +23195=>6044, +23159=>6045, +23162=>6046, +23230=>6047, +23275=>6048, +23218=>6049, +23250=>6050, +23252=>6051, +23224=>6052, +23264=>6053, +23267=>6054, +23281=>6055, +23254=>6056, +23270=>6057, +23256=>6058, +23260=>6059, +23305=>6060, +23319=>6061, +23318=>6062, +23346=>6063, +23351=>6064, +23360=>6065, +23573=>6066, +23580=>6067, +23386=>6068, +23397=>6069, +23411=>6070, +23377=>6071, +23379=>6072, +23394=>6073, +39541=>6074, +39543=>6075, +39544=>6076, +39546=>6077, +39551=>6078, +39549=>6079, +39552=>6080, +39553=>6081, +39557=>6082, +39560=>6083, +39562=>6084, +39568=>6085, +39570=>6086, +39571=>6087, +39574=>6088, +39576=>6089, +39579=>6090, +39580=>6091, +39581=>6092, +39583=>6093, +39584=>6094, +39586=>6095, +39587=>6096, +39589=>6097, +39591=>6098, +32415=>6099, +32417=>6100, +32419=>6101, +32421=>6102, +32424=>6103, +32425=>6104, +32429=>6105, +32432=>6106, +32446=>6107, +32448=>6108, +32449=>6109, +32450=>6110, +32457=>6111, +32459=>6112, +32460=>6113, +32464=>6114, +32468=>6115, +32471=>6116, +32475=>6117, +32480=>6118, +32481=>6119, +32488=>6120, +32491=>6121, +32494=>6122, +32495=>6123, +32497=>6124, +32498=>6125, +32525=>6126, +32502=>6127, +32506=>6128, +32507=>6129, +32510=>6130, +32513=>6131, +32514=>6132, +32515=>6133, +32519=>6134, +32520=>6135, +32523=>6136, +32524=>6137, +32527=>6138, +32529=>6139, +32530=>6140, +32535=>6141, +32537=>6142, +32540=>6143, +32539=>6144, +32543=>6145, +32545=>6146, +32546=>6147, +32547=>6148, +32548=>6149, +32549=>6150, +32550=>6151, +32551=>6152, +32554=>6153, +32555=>6154, +32556=>6155, +32557=>6156, +32559=>6157, +32560=>6158, +32561=>6159, +32562=>6160, +32563=>6161, +32565=>6162, +12083=>6163, +24186=>6163, +30079=>6164, +12078=>6165, +24027=>6165, +30014=>6166, +37013=>6167, +29582=>6168, +29585=>6169, +29614=>6170, +29602=>6171, +29599=>6172, +29647=>6173, +29634=>6174, +29649=>6175, +29623=>6176, +29619=>6177, +29632=>6178, +29641=>6179, +29640=>6180, +29669=>6181, +29657=>6182, +39036=>6183, +29706=>6184, +29673=>6185, +29671=>6186, +29662=>6187, +29626=>6188, +29682=>6189, +29711=>6190, +29738=>6191, +29787=>6192, +29734=>6193, +29733=>6194, +29736=>6195, +29744=>6196, +29742=>6197, +29740=>6198, +29723=>6199, +29722=>6200, +29761=>6201, +29788=>6202, +29783=>6203, +29781=>6204, +29785=>6205, +29815=>6206, +29805=>6207, +29822=>6208, +29852=>6209, +29838=>6210, +29824=>6211, +29825=>6212, +29831=>6213, +29835=>6214, +29854=>6215, +29864=>6216, +29865=>6217, +29840=>6218, +29863=>6219, +29906=>6220, +29882=>6221, +38890=>6222, +38891=>6223, +38892=>6224, +26444=>6225, +26451=>6226, +26462=>6227, +26440=>6228, +26473=>6229, +26533=>6230, +26503=>6231, +26474=>6232, +26483=>6233, +26520=>6234, +26535=>6235, +26485=>6236, +26536=>6237, +26526=>6238, +26541=>6239, +26507=>6240, +26487=>6241, +26492=>6242, +26608=>6243, +26633=>6244, +26584=>6245, +26634=>6246, +26601=>6247, +26544=>6248, +26636=>6249, +26585=>6250, +26549=>6251, +26586=>6252, +26547=>6253, +26589=>6254, +26624=>6255, +26563=>6256, +26552=>6257, +26594=>6258, +26638=>6259, +26561=>6260, +26621=>6261, +26674=>6262, +26675=>6263, +26720=>6264, +26721=>6265, +26702=>6266, +26722=>6267, +26692=>6268, +26724=>6269, +26755=>6270, +26653=>6271, +26709=>6272, +26726=>6273, +26689=>6274, +26727=>6275, +26688=>6276, +26686=>6277, +26698=>6278, +26697=>6279, +26665=>6280, +26805=>6281, +26767=>6282, +26740=>6283, +26743=>6284, +26771=>6285, +26731=>6286, +26818=>6287, +26990=>6288, +26876=>6289, +26911=>6290, +26912=>6291, +26873=>6292, +26916=>6293, +26864=>6294, +26891=>6295, +26881=>6296, +26967=>6297, +26851=>6298, +26896=>6299, +26993=>6300, +26937=>6301, +26976=>6302, +26946=>6303, +26973=>6304, +27012=>6305, +26987=>6306, +27008=>6307, +27032=>6308, +27000=>6309, +26932=>6310, +27084=>6311, +27015=>6312, +27016=>6313, +27086=>6314, +27017=>6315, +26982=>6316, +26979=>6317, +27001=>6318, +27035=>6319, +27047=>6320, +27067=>6321, +27051=>6322, +27053=>6323, +27092=>6324, +27057=>6325, +27073=>6326, +27082=>6327, +27103=>6328, +27029=>6329, +27104=>6330, +27021=>6331, +27135=>6332, +27183=>6333, +27117=>6334, +27159=>6335, +27160=>6336, +27237=>6337, +27122=>6338, +27204=>6339, +27198=>6340, +27296=>6341, +27216=>6342, +27227=>6343, +27189=>6344, +27278=>6345, +27257=>6346, +27197=>6347, +27176=>6348, +27224=>6349, +27260=>6350, +27281=>6351, +27280=>6352, +27305=>6353, +27287=>6354, +27307=>6355, +29495=>6356, +29522=>6357, +27521=>6358, +27522=>6359, +27527=>6360, +27524=>6361, +27538=>6362, +27539=>6363, +27533=>6364, +27546=>6365, +27547=>6366, +27553=>6367, +27562=>6368, +36715=>6369, +36717=>6370, +36721=>6371, +36722=>6372, +36723=>6373, +36725=>6374, +36726=>6375, +36728=>6376, +36727=>6377, +36729=>6378, +36730=>6379, +36732=>6380, +36734=>6381, +36737=>6382, +36738=>6383, +36740=>6384, +36743=>6385, +36747=>6386, +36749=>6387, +36750=>6388, +36751=>6389, +36760=>6390, +36762=>6391, +36558=>6392, +25099=>6393, +25111=>6394, +25115=>6395, +25119=>6396, +25122=>6397, +25121=>6398, +25125=>6399, +25124=>6400, +25132=>6401, +33255=>6402, +29935=>6403, +29940=>6404, +29951=>6405, +29967=>6406, +29969=>6407, +29971=>6408, +12097=>6409, +25908=>6409, +26094=>6410, +26095=>6411, +26096=>6412, +26122=>6413, +26137=>6414, +26482=>6415, +26115=>6416, +26133=>6417, +26112=>6418, +28805=>6419, +26359=>6420, +26141=>6421, +26164=>6422, +26161=>6423, +26166=>6424, +26165=>6425, +32774=>6426, +26207=>6427, +26196=>6428, +26177=>6429, +26191=>6430, +26198=>6431, +26209=>6432, +26199=>6433, +26231=>6434, +26244=>6435, +26252=>6436, +26279=>6437, +26269=>6438, +26302=>6439, +26331=>6440, +26332=>6441, +26342=>6442, +26345=>6443, +36146=>6444, +36147=>6445, +36150=>6446, +36155=>6447, +36157=>6448, +36160=>6449, +36165=>6450, +36166=>6451, +36168=>6452, +36169=>6453, +36167=>6454, +36173=>6455, +36181=>6456, +36185=>6457, +35271=>6458, +35274=>6459, +35275=>6460, +35276=>6461, +35278=>6462, +35279=>6463, +35280=>6464, +35281=>6465, +29294=>6466, +29343=>6467, +29277=>6468, +29286=>6469, +29295=>6470, +29310=>6471, +29311=>6472, +29316=>6473, +29323=>6474, +29325=>6475, +29327=>6476, +29330=>6477, +25352=>6478, +25394=>6479, +25520=>6480, +25663=>6481, +25816=>6482, +32772=>6483, +27626=>6484, +27635=>6485, +27645=>6486, +27637=>6487, +27641=>6488, +27653=>6489, +27655=>6490, +27654=>6491, +27661=>6492, +27669=>6493, +27672=>6494, +27673=>6495, +27674=>6496, +27681=>6497, +27689=>6498, +27684=>6499, +27690=>6500, +27698=>6501, +25909=>6502, +25941=>6503, +25963=>6504, +29261=>6505, +29266=>6506, +29270=>6507, +29232=>6508, +34402=>6509, +21014=>6510, +32927=>6511, +32924=>6512, +32915=>6513, +32956=>6514, +26378=>6515, +32957=>6516, +32945=>6517, +32939=>6518, +32941=>6519, +32948=>6520, +32951=>6521, +32999=>6522, +33000=>6523, +33001=>6524, +33002=>6525, +32987=>6526, +32962=>6527, +32964=>6528, +32985=>6529, +32973=>6530, +32983=>6531, +26384=>6532, +32989=>6533, +33003=>6534, +33009=>6535, +33012=>6536, +33005=>6537, +33037=>6538, +33038=>6539, +33010=>6540, +33020=>6541, +26389=>6542, +33042=>6543, +35930=>6544, +33078=>6545, +33054=>6546, +33068=>6547, +33048=>6548, +33074=>6549, +33096=>6550, +33100=>6551, +33107=>6552, +33140=>6553, +33113=>6554, +33114=>6555, +33137=>6556, +33120=>6557, +33129=>6558, +33148=>6559, +33149=>6560, +33133=>6561, +33127=>6562, +22605=>6563, +23221=>6564, +33160=>6565, +33154=>6566, +33169=>6567, +28373=>6568, +33187=>6569, +33194=>6570, +33228=>6571, +26406=>6572, +33226=>6573, +33211=>6574, +33217=>6575, +33190=>6576, +27428=>6577, +27447=>6578, +27449=>6579, +27459=>6580, +27462=>6581, +27481=>6582, +39121=>6583, +39122=>6584, +39123=>6585, +39125=>6586, +39129=>6587, +39130=>6588, +12110=>6589, +27571=>6589, +24384=>6590, +27586=>6591, +35315=>6592, +26000=>6593, +40785=>6594, +26003=>6595, +26044=>6596, +26054=>6597, +26052=>6598, +26051=>6599, +26060=>6600, +26062=>6601, +26066=>6602, +26070=>6603, +28800=>6604, +28828=>6605, +28822=>6606, +28829=>6607, +28859=>6608, +28864=>6609, +28855=>6610, +28843=>6611, +28849=>6612, +28904=>6613, +28874=>6614, +28944=>6615, +28947=>6616, +28950=>6617, +28975=>6618, +28977=>6619, +29043=>6620, +29020=>6621, +29032=>6622, +28997=>6623, +29042=>6624, +29002=>6625, +29048=>6626, +29050=>6627, +29080=>6628, +29107=>6629, +29109=>6630, +29096=>6631, +29088=>6632, +29152=>6633, +29140=>6634, +29159=>6635, +29177=>6636, +29213=>6637, +29224=>6638, +28780=>6639, +28952=>6640, +29030=>6641, +29113=>6642, +25150=>6643, +25149=>6644, +25155=>6645, +25160=>6646, +25161=>6647, +31035=>6648, +31040=>6649, +31046=>6650, +31049=>6651, +31067=>6652, +31068=>6653, +31059=>6654, +31066=>6655, +31074=>6656, +31063=>6657, +31072=>6658, +31087=>6659, +31079=>6660, +31098=>6661, +31109=>6662, +31114=>6663, +31130=>6664, +31143=>6665, +31155=>6666, +24529=>6667, +24528=>6668, +24636=>6669, +24669=>6670, +24666=>6671, +24679=>6672, +24641=>6673, +24665=>6674, +24675=>6675, +24747=>6676, +24838=>6677, +24845=>6678, +24925=>6679, +25001=>6680, +24989=>6681, +25035=>6682, +25041=>6683, +25094=>6684, +32896=>6685, +12160=>6686, +32895=>6686, +27795=>6687, +27894=>6688, +28156=>6689, +30710=>6690, +30712=>6691, +30720=>6692, +30729=>6693, +30743=>6694, +30744=>6695, +30737=>6696, +26027=>6697, +30765=>6698, +30748=>6699, +30749=>6700, +30777=>6701, +30778=>6702, +30779=>6703, +30751=>6704, +30780=>6705, +30757=>6706, +30764=>6707, +30755=>6708, +30761=>6709, +30798=>6710, +30829=>6711, +30806=>6712, +30807=>6713, +30758=>6714, +30800=>6715, +30791=>6716, +30796=>6717, +30826=>6718, +30875=>6719, +30867=>6720, +30874=>6721, +30855=>6722, +30876=>6723, +30881=>6724, +30883=>6725, +30898=>6726, +30905=>6727, +30885=>6728, +30932=>6729, +30937=>6730, +30921=>6731, +30956=>6732, +30962=>6733, +30981=>6734, +30964=>6735, +30995=>6736, +31012=>6737, +31006=>6738, +31028=>6739, +40859=>6740, +12235=>6741, +40697=>6741, +40699=>6742, +40700=>6743, +30449=>6744, +30468=>6745, +30477=>6746, +30457=>6747, +30471=>6748, +30472=>6749, +30490=>6750, +30498=>6751, +30489=>6752, +30509=>6753, +30502=>6754, +30517=>6755, +30520=>6756, +30544=>6757, +30545=>6758, +30535=>6759, +30531=>6760, +30554=>6761, +30568=>6762, +30562=>6763, +30565=>6764, +30591=>6765, +30605=>6766, +30589=>6767, +30592=>6768, +30604=>6769, +30609=>6770, +30623=>6771, +30624=>6772, +30640=>6773, +30645=>6774, +30653=>6775, +30010=>6776, +30016=>6777, +30030=>6778, +30027=>6779, +30024=>6780, +30043=>6781, +30066=>6782, +30073=>6783, +30083=>6784, +32600=>6785, +32609=>6786, +32607=>6787, +35400=>6788, +32616=>6789, +32628=>6790, +32625=>6791, +32633=>6792, +32641=>6793, +32638=>6794, +30413=>6795, +30437=>6796, +34866=>6797, +38021=>6798, +38022=>6799, +38023=>6800, +38027=>6801, +38026=>6802, +38028=>6803, +38029=>6804, +38031=>6805, +38032=>6806, +38036=>6807, +38039=>6808, +38037=>6809, +38042=>6810, +38043=>6811, +38044=>6812, +38051=>6813, +38052=>6814, +38059=>6815, +38058=>6816, +38061=>6817, +38060=>6818, +38063=>6819, +38064=>6820, +38066=>6821, +38068=>6822, +38070=>6823, +38071=>6824, +38072=>6825, +38073=>6826, +38074=>6827, +38076=>6828, +38077=>6829, +38079=>6830, +38084=>6831, +38088=>6832, +38089=>6833, +38090=>6834, +38091=>6835, +38092=>6836, +38093=>6837, +38094=>6838, +38096=>6839, +38097=>6840, +38098=>6841, +38101=>6842, +38102=>6843, +38103=>6844, +38105=>6845, +38104=>6846, +38107=>6847, +38110=>6848, +38111=>6849, +38112=>6850, +38114=>6851, +38116=>6852, +38117=>6853, +38119=>6854, +38120=>6855, +38122=>6856, +38121=>6857, +38123=>6858, +38126=>6859, +38127=>6860, +38131=>6861, +38132=>6862, +38133=>6863, +38135=>6864, +38137=>6865, +38140=>6866, +38141=>6867, +38143=>6868, +38147=>6869, +38146=>6870, +38150=>6871, +38151=>6872, +38153=>6873, +38154=>6874, +38157=>6875, +38158=>6876, +38159=>6877, +38162=>6878, +38163=>6879, +38164=>6880, +38165=>6881, +38166=>6882, +38168=>6883, +38171=>6884, +38173=>6885, +38174=>6886, +38175=>6887, +38178=>6888, +38186=>6889, +38187=>6890, +38185=>6891, +38188=>6892, +38193=>6893, +38194=>6894, +38196=>6895, +38198=>6896, +38199=>6897, +38200=>6898, +38204=>6899, +38206=>6900, +38207=>6901, +38210=>6902, +38197=>6903, +38212=>6904, +38213=>6905, +38214=>6906, +38217=>6907, +38220=>6908, +38222=>6909, +38223=>6910, +38226=>6911, +38227=>6912, +38228=>6913, +38230=>6914, +38231=>6915, +38232=>6916, +38233=>6917, +38235=>6918, +38238=>6919, +38239=>6920, +38237=>6921, +38241=>6922, +38242=>6923, +38244=>6924, +38245=>6925, +38246=>6926, +38247=>6927, +38248=>6928, +38249=>6929, +38250=>6930, +38251=>6931, +38252=>6932, +38255=>6933, +38257=>6934, +38258=>6935, +38259=>6936, +38202=>6937, +30695=>6938, +30700=>6939, +38601=>6940, +31189=>6941, +31213=>6942, +31203=>6943, +31211=>6944, +31238=>6945, +23879=>6946, +31235=>6947, +31234=>6948, +31262=>6949, +31252=>6950, +31289=>6951, +31287=>6952, +31313=>6953, +40655=>6954, +39333=>6955, +31344=>6956, +30344=>6957, +30350=>6958, +30355=>6959, +30361=>6960, +30372=>6961, +29918=>6962, +29920=>6963, +29996=>6964, +40480=>6965, +40482=>6966, +40488=>6967, +40489=>6968, +40490=>6969, +40491=>6970, +40492=>6971, +40498=>6972, +40497=>6973, +40502=>6974, +40504=>6975, +40503=>6976, +40505=>6977, +40506=>6978, +40510=>6979, +40513=>6980, +40514=>6981, +40516=>6982, +40518=>6983, +40519=>6984, +40520=>6985, +40521=>6986, +40523=>6987, +40524=>6988, +40526=>6989, +40529=>6990, +40533=>6991, +40535=>6992, +40538=>6993, +40539=>6994, +40540=>6995, +40542=>6996, +40547=>6997, +40550=>6998, +40551=>6999, +40552=>7000, +40553=>7001, +40554=>7002, +40555=>7003, +40556=>7004, +40561=>7005, +40557=>7006, +40563=>7007, +12135=>7008, +30098=>7008, +30100=>7009, +30102=>7010, +30112=>7011, +30109=>7012, +30124=>7013, +30115=>7014, +30131=>7015, +30132=>7016, +30136=>7017, +30148=>7018, +30129=>7019, +30128=>7020, +30147=>7021, +30146=>7022, +30166=>7023, +30157=>7024, +30179=>7025, +30184=>7026, +30182=>7027, +30180=>7028, +30187=>7029, +30183=>7030, +30211=>7031, +30193=>7032, +30204=>7033, +30207=>7034, +30224=>7035, +30208=>7036, +30213=>7037, +30220=>7038, +30231=>7039, +30218=>7040, +30245=>7041, +30232=>7042, +30229=>7043, +30233=>7044, +30235=>7045, +30268=>7046, +30242=>7047, +30240=>7048, +30272=>7049, +30253=>7050, +30256=>7051, +30271=>7052, +30261=>7053, +30275=>7054, +30270=>7055, +30259=>7056, +30285=>7057, +30302=>7058, +30292=>7059, +30300=>7060, +30294=>7061, +30315=>7062, +30319=>7063, +32714=>7064, +31462=>7065, +31352=>7066, +31353=>7067, +31360=>7068, +31366=>7069, +31368=>7070, +31381=>7071, +31398=>7072, +31392=>7073, +31404=>7074, +31400=>7075, +31405=>7076, +31411=>7077, +34916=>7078, +34921=>7079, +34930=>7080, +34941=>7081, +34943=>7082, +34946=>7083, +34978=>7084, +35014=>7085, +34999=>7086, +35004=>7087, +35017=>7088, +35042=>7089, +35022=>7090, +35043=>7091, +35045=>7092, +35057=>7093, +35098=>7094, +35068=>7095, +35048=>7096, +35070=>7097, +35056=>7098, +35105=>7099, +35097=>7100, +35091=>7101, +35099=>7102, +35082=>7103, +35124=>7104, +35115=>7105, +35126=>7106, +35137=>7107, +35174=>7108, +35195=>7109, +12134=>7110, +30091=>7110, +32997=>7111, +30386=>7112, +30388=>7113, +30684=>7114, +12158=>7115, +32786=>7115, +32788=>7116, +32790=>7117, +32796=>7118, +32800=>7119, +32802=>7120, +32805=>7121, +32806=>7122, +32807=>7123, +32809=>7124, +32808=>7125, +32817=>7126, +32779=>7127, +32821=>7128, +32835=>7129, +32838=>7130, +32845=>7131, +32850=>7132, +32873=>7133, +32881=>7134, +35203=>7135, +39032=>7136, +39040=>7137, +39043=>7138, +39049=>7139, +39052=>7140, +39053=>7141, +39055=>7142, +39060=>7143, +39066=>7144, +39067=>7145, +39070=>7146, +39071=>7147, +39073=>7148, +39074=>7149, +39077=>7150, +39078=>7151, +12172=>7152, +34381=>7152, +34388=>7153, +34412=>7154, +34414=>7155, +34431=>7156, +34426=>7157, +34428=>7158, +34427=>7159, +34472=>7160, +34445=>7161, +34443=>7162, +34476=>7163, +34461=>7164, +34471=>7165, +34467=>7166, +34474=>7167, +34451=>7168, +34473=>7169, +34486=>7170, +34500=>7171, +34485=>7172, +34510=>7173, +34480=>7174, +34490=>7175, +34481=>7176, +34479=>7177, +34505=>7178, +34511=>7179, +34484=>7180, +34537=>7181, +34545=>7182, +34546=>7183, +34541=>7184, +34547=>7185, +34512=>7186, +34579=>7187, +34526=>7188, +34548=>7189, +34527=>7190, +34520=>7191, +34513=>7192, +34563=>7193, +34567=>7194, +34552=>7195, +34568=>7196, +34570=>7197, +34573=>7198, +34569=>7199, +34595=>7200, +34619=>7201, +34590=>7202, +34597=>7203, +34606=>7204, +34586=>7205, +34622=>7206, +34632=>7207, +34612=>7208, +34609=>7209, +34601=>7210, +34615=>7211, +34623=>7212, +34690=>7213, +34594=>7214, +34685=>7215, +34686=>7216, +34683=>7217, +34656=>7218, +34672=>7219, +34636=>7220, +34670=>7221, +34699=>7222, +34643=>7223, +34659=>7224, +34684=>7225, +34660=>7226, +34649=>7227, +34661=>7228, +34707=>7229, +34735=>7230, +34728=>7231, +34770=>7232, +34758=>7233, +34696=>7234, +34693=>7235, +34733=>7236, +34711=>7237, +34691=>7238, +34731=>7239, +34789=>7240, +34732=>7241, +34741=>7242, +34739=>7243, +34763=>7244, +34771=>7245, +34749=>7246, +34769=>7247, +34752=>7248, +34762=>7249, +34779=>7250, +34794=>7251, +34784=>7252, +34798=>7253, +34838=>7254, +34835=>7255, +34814=>7256, +34826=>7257, +34843=>7258, +34849=>7259, +34873=>7260, +34876=>7261, +12152=>7262, +32566=>7262, +32578=>7263, +32580=>7264, +32581=>7265, +33296=>7266, +31482=>7267, +31485=>7268, +31496=>7269, +31491=>7270, +31492=>7271, +31509=>7272, +31498=>7273, +31531=>7274, +31503=>7275, +31559=>7276, +31544=>7277, +31530=>7278, +31513=>7279, +31534=>7280, +31537=>7281, +31520=>7282, +31525=>7283, +31524=>7284, +31539=>7285, +31550=>7286, +31518=>7287, +31576=>7288, +31578=>7289, +31557=>7290, +31605=>7291, +31564=>7292, +31581=>7293, +31584=>7294, +31598=>7295, +31611=>7296, +31586=>7297, +31602=>7298, +31601=>7299, +31632=>7300, +31654=>7301, +31655=>7302, +31672=>7303, +31660=>7304, +31645=>7305, +31656=>7306, +31621=>7307, +31658=>7308, +31644=>7309, +31650=>7310, +31659=>7311, +31668=>7312, +31697=>7313, +31681=>7314, +31692=>7315, +31709=>7316, +31706=>7317, +31717=>7318, +31718=>7319, +31722=>7320, +31756=>7321, +31742=>7322, +31740=>7323, +31759=>7324, +31766=>7325, +31755=>7326, +31775=>7327, +31786=>7328, +31782=>7329, +31800=>7330, +31809=>7331, +31808=>7332, +33278=>7333, +33281=>7334, +33282=>7335, +33284=>7336, +33260=>7337, +34884=>7338, +33313=>7339, +33314=>7340, +33315=>7341, +33325=>7342, +33327=>7343, +33320=>7344, +33323=>7345, +33336=>7346, +33339=>7347, +33331=>7348, +33332=>7349, +33342=>7350, +33348=>7351, +33353=>7352, +33355=>7353, +33359=>7354, +33370=>7355, +33375=>7356, +33384=>7357, +34942=>7358, +34949=>7359, +34952=>7360, +35032=>7361, +35039=>7362, +35166=>7363, +32669=>7364, +32671=>7365, +32679=>7366, +32687=>7367, +32688=>7368, +32690=>7369, +31868=>7370, +25929=>7371, +31889=>7372, +31901=>7373, +31900=>7374, +31902=>7375, +31906=>7376, +31922=>7377, +31932=>7378, +31933=>7379, +31937=>7380, +31943=>7381, +31948=>7382, +31949=>7383, +31944=>7384, +31941=>7385, +31959=>7386, +31976=>7387, +12169=>7388, +33390=>7388, +26280=>7389, +32703=>7390, +32718=>7391, +32725=>7392, +32741=>7393, +32737=>7394, +32742=>7395, +32745=>7396, +32750=>7397, +32755=>7398, +12151=>7399, +31992=>7399, +32119=>7400, +32166=>7401, +32174=>7402, +32327=>7403, +32411=>7404, +40632=>7405, +40628=>7406, +36211=>7407, +36228=>7408, +36244=>7409, +36241=>7410, +36273=>7411, +36199=>7412, +36205=>7413, +35911=>7414, +35913=>7415, +37194=>7416, +37200=>7417, +37198=>7418, +37199=>7419, +37220=>7420, +37218=>7421, +37217=>7422, +37232=>7423, +37225=>7424, +37231=>7425, +37245=>7426, +37246=>7427, +37234=>7428, +37236=>7429, +37241=>7430, +37260=>7431, +37253=>7432, +37264=>7433, +37261=>7434, +37265=>7435, +37282=>7436, +37283=>7437, +37290=>7438, +37293=>7439, +37294=>7440, +37295=>7441, +37301=>7442, +37300=>7443, +37306=>7444, +12183=>7445, +35925=>7445, +40574=>7446, +36280=>7447, +36331=>7448, +36357=>7449, +36441=>7450, +36457=>7451, +36277=>7452, +36287=>7453, +36284=>7454, +36282=>7455, +36292=>7456, +36310=>7457, +36311=>7458, +36314=>7459, +36318=>7460, +36302=>7461, +36303=>7462, +36315=>7463, +36294=>7464, +36332=>7465, +36343=>7466, +36344=>7467, +36323=>7468, +36345=>7469, +36347=>7470, +36324=>7471, +36361=>7472, +36349=>7473, +36372=>7474, +36381=>7475, +36383=>7476, +36396=>7477, +36398=>7478, +36387=>7479, +36399=>7480, +36410=>7481, +36416=>7482, +36409=>7483, +36405=>7484, +36413=>7485, +36401=>7486, +36425=>7487, +36417=>7488, +36418=>7489, +36433=>7490, +36434=>7491, +36426=>7492, +36464=>7493, +36470=>7494, +36476=>7495, +36463=>7496, +36468=>7497, +36485=>7498, +36495=>7499, +36500=>7500, +36496=>7501, +36508=>7502, +36510=>7503, +12184=>7504, +35960=>7504, +35970=>7505, +35978=>7506, +35973=>7507, +35992=>7508, +35988=>7509, +26011=>7510, +35286=>7511, +35294=>7512, +35290=>7513, +35292=>7514, +35301=>7515, +35307=>7516, +35311=>7517, +35390=>7518, +35622=>7519, +38739=>7520, +38633=>7521, +38643=>7522, +38639=>7523, +38662=>7524, +38657=>7525, +38664=>7526, +38671=>7527, +38670=>7528, +38698=>7529, +38701=>7530, +38704=>7531, +38718=>7532, +40832=>7533, +40835=>7534, +40837=>7535, +40838=>7536, +40839=>7537, +40840=>7538, +40841=>7539, +40842=>7540, +40844=>7541, +40702=>7542, +40715=>7543, +40717=>7544, +12203=>7545, +38585=>7545, +38588=>7546, +38589=>7547, +38606=>7548, +38610=>7549, +30655=>7550, +38624=>7551, +37518=>7552, +37550=>7553, +37576=>7554, +37694=>7555, +37738=>7556, +37834=>7557, +37775=>7558, +37950=>7559, +37995=>7560, +40063=>7561, +40066=>7562, +40069=>7563, +40070=>7564, +40071=>7565, +40072=>7566, +31267=>7567, +40075=>7568, +40078=>7569, +40080=>7570, +40081=>7571, +40082=>7572, +40084=>7573, +40085=>7574, +40090=>7575, +40091=>7576, +40094=>7577, +40095=>7578, +40096=>7579, +40097=>7580, +40098=>7581, +40099=>7582, +40101=>7583, +40102=>7584, +40103=>7585, +40104=>7586, +40105=>7587, +40107=>7588, +40109=>7589, +40110=>7590, +40112=>7591, +40113=>7592, +40114=>7593, +40115=>7594, +40116=>7595, +40117=>7596, +40118=>7597, +40119=>7598, +40122=>7599, +40123=>7600, +40124=>7601, +40125=>7602, +40132=>7603, +40133=>7604, +40134=>7605, +40135=>7606, +40138=>7607, +40139=>7608, +40140=>7609, +40141=>7610, +40142=>7611, +40143=>7612, +40144=>7613, +40147=>7614, +40148=>7615, +40149=>7616, +40151=>7617, +40152=>7618, +40153=>7619, +40156=>7620, +40157=>7621, +40159=>7622, +40162=>7623, +38780=>7624, +38789=>7625, +38801=>7626, +38802=>7627, +38804=>7628, +38831=>7629, +38827=>7630, +38819=>7631, +38834=>7632, +38836=>7633, +39601=>7634, +39600=>7635, +39607=>7636, +40536=>7637, +39606=>7638, +39610=>7639, +39612=>7640, +39617=>7641, +39616=>7642, +39621=>7643, +39618=>7644, +39627=>7645, +39628=>7646, +39633=>7647, +39749=>7648, +39747=>7649, +39751=>7650, +39753=>7651, +39752=>7652, +39757=>7653, +39761=>7654, +39144=>7655, +39181=>7656, +39214=>7657, +39253=>7658, +39252=>7659, +12221=>7660, +39647=>7660, +39649=>7661, +39654=>7662, +39663=>7663, +39659=>7664, +39675=>7665, +39661=>7666, +39673=>7667, +39688=>7668, +39695=>7669, +39699=>7670, +39711=>7671, +39715=>7672, +40637=>7673, +40638=>7674, +32315=>7675, +40578=>7676, +40583=>7677, +40584=>7678, +40587=>7679, +40594=>7680, +37846=>7681, +40605=>7682, +40607=>7683, +40667=>7684, +40668=>7685, +40669=>7686, +40672=>7687, +40671=>7688, +40674=>7689, +40681=>7690, +40679=>7691, +40677=>7692, +40682=>7693, +40687=>7694, +40738=>7695, +40748=>7696, +40751=>7697, +40761=>7698, +40759=>7699, +40765=>7700, +40766=>7701, +40772=>7702, +12295=>7703, + + + + + + + +30362=>7717, +34297=>7718, +31001=>7719, +24859=>7720, +39599=>7721, +35158=>7722, +22761=>7723, +32631=>7724, +25850=>7725, +25943=>7726, +38930=>7727, +36774=>7728, +32070=>7729, +24171=>7730, +32129=>7731, +37770=>7732, +35607=>7733, +39165=>7734, +23542=>7735, +22577=>7736, +39825=>7737, +36649=>7738, +12185=>7739, +35997=>7739, +37575=>7740, +29437=>7741, +20633=>7742, +24970=>7743, +32179=>7744, +31558=>7745, +30050=>7746, +25987=>7747, +24163=>7748, +38281=>7749, +37002=>7750, +32232=>7751, +36022=>7752, +35722=>7753, +36783=>7754, +36782=>7755, +27161=>7756, +40009=>7757, +30303=>7758, +28693=>7759, +28657=>7760, +36051=>7761, +25839=>7762, +39173=>7763, +25765=>7764, +37474=>7765, +37457=>7766, +39361=>7767, +35036=>7768, +36001=>7769, +21443=>7770, +34870=>7771, +27544=>7772, +24922=>7773, +24920=>7774, +29158=>7775, +33980=>7776, +33369=>7777, +20489=>7778, +28356=>7779, +21408=>7780, +20596=>7781, +28204=>7782, +23652=>7783, +35435=>7784, +25881=>7785, +25723=>7786, +34796=>7787, +39262=>7788, +35730=>7789, +32399=>7790, +37855=>7791, +29987=>7792, +38369=>7793, +39019=>7794, +22580=>7795, +22039=>7796, +12199=>7797, +38263=>7797, +20767=>7798, +33144=>7799, +24288=>7800, +26274=>7801, +37396=>7802, +12190=>7803, +36554=>7803, +24505=>7804, +22645=>7805, +38515=>7806, +35183=>7807, +31281=>7808, +25074=>7809, +35488=>7810, +39425=>7811, +36978=>7812, +39347=>7813, +12242=>7814, +40786=>7814, +29118=>7815, +34909=>7816, +34802=>7817, +23541=>7818, +30087=>7819, +36490=>7820, +31820=>7821, +32162=>7822, +37276=>7823, +37604=>7824, +38619=>7825, +30990=>7826, +20786=>7827, +35320=>7828, +34389=>7829, +20659=>7830, +30241=>7831, +38358=>7832, +21109=>7833, +37656=>7834, +32020=>7835, +32189=>7836, +36781=>7837, +35422=>7838, +36060=>7839, +32880=>7840, +24478=>7841, +21474=>7842, +36517=>7843, +31428=>7844, +37679=>7845, +36948=>7846, +24118=>7847, +36024=>7848, +25812=>7849, +21934=>7850, +37170=>7851, +25763=>7852, +33213=>7853, +24986=>7854, +35477=>7855, +24392=>7856, +30070=>7857, +25803=>7858, +40680=>7859, +34153=>7860, +27284=>7861, +25623=>7862, +23798=>7863, +31153=>7864, +23566=>7865, +29128=>7866, +37159=>7867, +25973=>7868, +28364=>7869, +36958=>7870, +32224=>7871, +39003=>7872, +40670=>7873, +22666=>7874, +38651=>7875, +28593=>7876, +37347=>7877, +35519=>7878, +35548=>7879, +37336=>7880, +38914=>7881, +37664=>7882, +35330=>7883, +26481=>7884, +21205=>7885, +26847=>7886, +20941=>7887, +12222=>7888, +39717=>7888, +29346=>7889, +29544=>7890, +35712=>7891, +36077=>7892, +37709=>7893, +37723=>7894, +26039=>7895, +32222=>7896, +38538=>7897, +23565=>7898, +22136=>7899, +38931=>7900, +37389=>7901, +22890=>7902, +22702=>7903, +40285=>7904, +38989=>7905, +35355=>7906, +24801=>7907, +39187=>7908, +20818=>7909, +29246=>7910, +39180=>7911, +36019=>7912, +30332=>7913, +32624=>7914, +38309=>7915, +31020=>7916, +37353=>7917, +29033=>7918, +31684=>7919, +36009=>7920, +39151=>7921, +35370=>7922, +32033=>7923, +12214=>7924, +39131=>7924, +35513=>7925, +24290=>7926, +36027=>7927, +32027=>7928, +22707=>7929, +22894=>7930, +24996=>7931, +31966=>7932, +35920=>7933, +26963=>7934, +37586=>7935, +12213=>7936, +39080=>7936, +30219=>7937, +39342=>7938, +32299=>7939, +35575=>7940, +40179=>7941, +33178=>7942, +36667=>7943, +25771=>7944, +36628=>7945, +36070=>7946, +24489=>7947, +36000=>7948, +35331=>7949, +23142=>7950, +32283=>7951, +35442=>7952, +37411=>7953, +33995=>7954, +24185=>7955, +36245=>7956, +36123=>7957, +23713=>7958, +21083=>7959, +37628=>7960, +32177=>7961, +23831=>7962, +37804=>7963, +25841=>7964, +40255=>7965, +38307=>7966, +37499=>7967, +20491=>7968, +32102=>7969, +40852=>7970, +38799=>7971, +36002=>7972, +37390=>7973, +28317=>7974, +27083=>7975, +36092=>7976, +34865=>7977, +39015=>7978, +21102=>7979, +38364=>7980, +35264=>7981, +39208=>7982, +24931=>7983, +36011=>7984, +24291=>7985, +35215=>7986, +27512=>7987, +12244=>7988, +40860=>7988, +38312=>7989, +36556=>7990, +35437=>7991, +27331=>7992, +36020=>7993, +21130=>7994, +36645=>7995, +37707=>7996, +22283=>7997, +36942=>7998, +39405=>7999, +38867=>8000, +28450=>8001, +34399=>8002, +38305=>8003, +40372=>8004, +36032=>8005, +36703=>8006, +40251=>8007, +32005=>8008, +22778=>8009, +35703=>8010, +28396=>8011, +22057=>8012, +33775=>8013, +30059=>8014, +21123=>8015, +35441=>8016, +25079=>8017, +22750=>8018, +27489=>8019, +29872=>8020, +36996=>8021, +32233=>8022, +35594=>8023, +25582=>8024, +36637=>8025, +36036=>8026, +31330=>8027, +26371=>8028, +29172=>8029, +21295=>8030, +35569=>8031, +35496=>8032, +32362=>8033, +33911=>8034, +28222=>8035, +29554=>8036, +36008=>8037, +31117=>8038, +25802=>8039, +27231=>8040, +31309=>8041, +39249=>8042, +35663=>8043, +40388=>8044, +32318=>8045, +32221=>8046, +26997=>8047, +36655=>8048, +32026=>8049, +25824=>8050, +24190=>8051, +34186=>8052, +21137=>8053, +28639=>8054, +35336=>8055, +35352=>8056, +38555=>8057, +32380=>8058, +32000=>8059, +22846=>8060, +33698=>8061, +38960=>8062, +36040=>8063, +37440=>8064, +20729=>8065, +39381=>8066, +27570=>8067, +30435=>8068, +22533=>8069, +31627=>8070, +38291=>8071, +33393=>8072, +32216=>8073, +32365=>8074, +27298=>8075, +40572=>8076, +25536=>8077, +25791=>8078, +31777=>8079, +20745=>8080, +34214=>8081, +27323=>8082, +37970=>8083, +36368=>8084, +36068=>8085, +12178=>8086, +35211=>8086, +37749=>8087, +33382=>8088, +21133=>8089, +39198=>8090, +28472=>8091, +28666=>8092, +28567=>8093, +23559=>8094, +28479=>8095, +34083=>8096, +27123=>8097, +22892=>8098, +35611=>8099, +37292=>8100, +33184=>8101, +28550=>8102, +39509=>8103, +23308=>8104, +25898=>8105, +37496=>8106, +30703=>8107, +20709=>8108, +39171=>8109, +32371=>8110, +32094=>8111, +36686=>8112, +36611=>8113, +38542=>8114, +31680=>8115, +28500=>8116, +32080=>8117, +35489=>8118, +32202=>8119, +37670=>8120, +20677=>8121, +35641=>8122, +36914=>8123, +29180=>8124, +30433=>8125, +21185=>8126, +33686=>8127, +39912=>8128, +39514=>8129, +32147=>8130, +38968=>8131, +37857=>8132, +24465=>8133, +30169=>8134, +31478=>8135, +31998=>8136, +33290=>8137, +39378=>8138, +33289=>8139, +25818=>8140, +37624=>8141, +25084=>8142, +21127=>8143, +40273=>8144, +32121=>8145, +35258=>8146, +35363=>8147, +32118=>8148, +37406=>8149, +36557=>8150, +39423=>8151, +38283=>8152, +20977=>8153, +38982=>8154, +27579=>8155, +35506=>8156, +22718=>8157, +25031=>8158, +25715=>8159, +24235=>8160, +35122=>8161, +35463=>8162, +22602=>8163, +20744=>8164, +23532=>8165, +31014=>8166, +26336=>8167, +34407=>8168, +24011=>8169, +31418=>8170, +39243=>8171, +28528=>8172, +25844=>8173, +38346=>8174, +34847=>8175, +33240=>8176, +33802=>8177, +20358=>8178, +36084=>8179, +34253=>8180, +27396=>8181, +25876=>8182, +31811=>8183, +38348=>8184, +34349=>8185, +28734=>8186, +35733=>8187, +25900=>8188, +35261=>8189, +25078=>8190, +32412=>8191, +29211=>8192, +28651=>8193, +25736=>8194, +21214=>8195, +28551=>8196, +27138=>8197, +37939=>8198, +22744=>8199, +39006=>8200, +31852=>8201, +38626=>8202, +28757=>8203, +35023=>8204, +63975=>8204, +39881=>8205, +31150=>8206, +40599=>8207, +21426=>8208, +21237=>8209, +31019=>8210, +27511=>8211, +28701=>8212, +38584=>8213, +20486=>8214, +32879=>8215, +34030=>8216, +36899=>8217, +37934=>8218, +24976=>8219, +28451=>8220, +31806=>8221, +25986=>8222, +33225=>8223, +37832=>8224, +25088=>8225, +29001=>8226, +32244=>8227, +31975=>8228, +20841=>8229, +36635=>8230, +35538=>8231, +30274=>8232, +36988=>8233, +37904=>8234, +29557=>8235, +33256=>8236, +37168=>8237, +40023=>8238, +36035=>8239, +40801=>8240, +37428=>8241, +38728=>8242, +23994=>8243, +38936=>8244, +39230=>8245, +21129=>8246, +12243=>8247, +40845=>8247, +32894=>8248, +22184=>8249, +31840=>8250, +22751=>8251, +25871=>8252, +38580=>8253, +27155=>8254, +23105=>8255, +25695=>8256, +31757=>8257, +34310=>8258, +30439=>8259, +39025=>8260, +24300=>8261, +29200=>8262, +25796=>8263, +28407=>8264, +34396=>8265, +39791=>8266, +36034=>8267, +37682=>8268, +38520=>8269, +39522=>8270, +37569=>8271, +23650=>8272, +32311=>8273, +24942=>8274, +28670=>8275, +32209=>8276, +24018=>8277, +25891=>8278, +23423=>8279, +28772=>8280, +20098=>8281, +25476=>8282, +36650=>8283, +20523=>8284, +20374=>8285, +28138=>8286, +32184=>8287, +35542=>8288, +34367=>8289, +32645=>8290, +37007=>8291, +38012=>8292, +31854=>8293, +39486=>8294, +39409=>8295, +32097=>8296, +23229=>8297, +29802=>8298, +30908=>8299, +34718=>8300, +12218=>8301, +39340=>8301, +39393=>8302, +21966=>8303, +36023=>8304, +12230=>8305, +40613=>8305, +36067=>8306, +36993=>8307, +30622=>8308, +39237=>8309, +34875=>8310, +28415=>8311, +35646=>8312, +37672=>8313, +37466=>8314, +36031=>8315, +37762=>8316, +12200=>8317, +38272=>8317, +24758=>8318, +20497=>8319, +37683=>8320, +22818=>8321, +35598=>8322, +24396=>8323, +35219=>8324, +32191=>8325, +32236=>8326, +24287=>8327, +28357=>8328, +25003=>8329, +38313=>8330, +40180=>8331, +37528=>8332, +35628=>8333, +35584=>8334, +30045=>8335, +37385=>8336, +32013=>8337, +38627=>8338, +25747=>8339, +33126=>8340, +24817=>8341, +39719=>8342, +39186=>8343, +25836=>8344, +33193=>8345, +25862=>8346, +37312=>8347, +12227=>8348, +40165=>8348, +32886=>8349, +22169=>8350, +38007=>8351, +37811=>8352, +27320=>8353, +29552=>8354, +23527=>8355, +25840=>8356, +28632=>8357, +37397=>8358, +32016=>8359, +33215=>8360, +28611=>8361, +36786=>8362, +30247=>8363, +35582=>8364, +27472=>8365, +40407=>8366, +27590=>8367, +22036=>8368, +28442=>8369, +30436=>8370, +40848=>8371, +36064=>8372, +22132=>8373, +40300=>8374, +39449=>8375, +39108=>8376, +38971=>8377, +36007=>8378, +34315=>8379, +24977=>8380, +35413=>8381, +28497=>8382, +38935=>8383, +25778=>8384, +37610=>8385, +20693=>8386, +27192=>8387, +35676=>8388, +33229=>8389, +12241=>8390, +40778=>8390, +39438=>8391, +35912=>8392, +21843=>8393, +27683=>8394, +35350=>8395, +29309=>8396, +37370=>8397, +37467=>8398, +36983=>8399, +31805=>8400, +35609=>8401, +37666=>8402, +37463=>8403, +28154=>8404, +35700=>8405, +22649=>8406, +27085=>8407, +21958=>8408, +22715=>8409, +34196=>8410, +25654=>8411, +37740=>8412, +27211=>8413, +21932=>8414, +20689=>8415, +32761=>8416, +31429=>8417, +31434=>8418, +27453=>8419, +35242=>8420, +23522=>8421, +36629=>8422, +27691=>8423, +20670=>8424, +38915=>8425, +35531=>8426, +24950=>8427, +29898=>8428, +31406=>8429, +36264=>8430, +21312=>8431, +36544=>8432, +39493=>8433, +40818=>8434, +39028=>8435, +27402=>8436, +21240=>8437, +40306=>8438, +30906=>8439, +35731=>8440, +39250=>8441, +25854=>8442, +32350=>8443, +29105=>8444, +38860=>8445, +35469=>8446, +32009=>8447, +27054=>8448, +32104=>8449, +36575=>8450, +37613=>8451, +38287=>8452, +28516=>8453, +28753=>8454, +34217=>8455, +39955=>8456, +36093=>8457, +20632=>8458, +21930=>8459, +39479=>8460, +25475=>8461, +28544=>8462, +27578=>8463, +32023=>8464, +31721=>8465, +26348=>8466, +38275=>8467, +38493=>8468, +36109=>8469, +32341=>8470, +20663=>8471, +36062=>8472, +29138=>8473, +32057=>8474, +36050=>8475, +25448=>8476, +25885=>8477, +25086=>8478, +35373=>8479, +32051=>8480, +23529=>8481, +23352=>8482, +33102=>8483, +28402=>8484, +32882=>8485, +32361=>8486, +21213=>8487, +32854=>8488, +24107=>8489, +29509=>8490, +28629=>8491, +35433=>8492, +26178=>8493, +34645=>8494, +23526=>8495, +35672=>8496, +39387=>8497, +21218=>8498, +36969=>8499, +37323=>8500, +39166=>8501, +35222=>8502, +35430=>8503, +22781=>8504, +29560=>8505, +27166=>8506, +36664=>8507, +26360=>8508, +36118=>8509, +23660=>8510, +34899=>8511, +27193=>8512, +31466=>8513, +25976=>8514, +24101=>8515, +38617=>8516, +35504=>8517, +38918=>8518, +35500=>8519, +30889=>8520, +29197=>8521, +32114=>8522, +39164=>8523, +39686=>8524, +32883=>8525, +24939=>8526, +38924=>8527, +35359=>8528, +35494=>8529, +25851=>8530, +34311=>8531, +35380=>8532, +32901=>8533, +38614=>8534, +38568=>8535, +32143=>8536, +27506=>8537, +23403=>8538, +25613=>8539, +32302=>8540, +29795=>8541, +37782=>8542, +29562=>8543, +25787=>8544, +33274=>8545, +24907=>8546, +25892=>8547, +36010=>8548, +30321=>8549, +28760=>8550, +22727=>8551, +35674=>8552, +35527=>8553, +22022=>8554, +28271=>8555, +29145=>8556, +28644=>8557, +32295=>8558, +35342=>8559, +39472=>8560, +35588=>8561, +37563=>8562, +38988=>8563, +39636=>8564, +26781=>8565, +36028=>8566, +37941=>8567, +24307=>8568, +32893=>8569, +28916=>8570, +37509=>8571, +32113=>8572, +38957=>8573, +22294=>8574, +22615=>8575, +22296=>8576, +38973=>8577, +40213=>8578, +39345=>8579, +39389=>8580, +27234=>8581, +31402=>8582, +35178=>8583, +24398=>8584, +28771=>8585, +38929=>8586, +33836=>8587, +32178=>8588, +12209=>8589, +38859=>8589, +36949=>8590, +22285=>8591, +29234=>8592, +28656=>8593, +32173=>8594, +33894=>8595, +20553=>8596, +20702=>8597, +32239=>8598, +35586=>8599, +34907=>8600, +32862=>8601, +32011=>8602, +31337=>8603, +21839=>8604, +25790=>8605, +34680=>8606, +28198=>8607, +31401=>8608, +21978=>8609, +37794=>8610, +28879=>8611, +35491=>8612, +28961=>8613, +34154=>8614, +22626=>8615, +38695=>8616, +21209=>8617, +35492=>8618, +37675=>8619, +29351=>8620, +35186=>8621, +32722=>8622, +37521=>8623, +25138=>8624, +32048=>8625, +34662=>8626, +36676=>8627, +23805=>8628, +20448=>8629, +29433=>8630, +22151=>8631, +37697=>8632, +39854=>8633, +32406=>8634, +36066=>8635, +37532=>8636, +38289=>8637, +39023=>8638, +38570=>8639, +29694=>8640, +29563=>8641, +32291=>8642, +39201=>8643, +25010=>8644, +32171=>8645, +38002=>8646, +37129=>8647, +35443=>8648, +38911=>8649, +38917=>8650, +34157=>8651, +22210=>8652, +37559=>8653, +26313=>8654, +22063=>8655, +21332=>8656, +25406=>8657, +33029=>8658, +35559=>8659, +23531=>8660, +28681=>8661, +35613=>8662, +37573=>8663, +37313=>8664, +33288=>8665, +37561=>8666, +32137=>8667, +38920=>8668, +35377=>8669, +32210=>8670, +32396=>8671, +36562=>8672, +25080=>8673, +36984=>8674, +30316=>8675, +32098=>8676, +23416=>8677, +21211=>8678, +35426=>8679, +23563=>8680, +39348=>8681, +35347=>8682, +35338=>8683, +36956=>8684, +22739=>8685, +40201=>8686, +40232=>8687, +21854=>8688, +20126=>8689, +35357=>8690, +38329=>8691, +40573=>8692, +22196=>8693, +38996=>8694, +38331=>8695, +33399=>8696, +21421=>8697, +30831=>8698, +35578=>8699, +39511=>8700, +40230=>8701, +26954=>8702, +25562=>8703, +30221=>8704, +38525=>8705, +30306=>8706, +39178=>8707, +27171=>8708, +22575=>8709, +35617=>8710, +34277=>8711, +29242=>8712, +12212=>8713, +38913=>8713, +26989=>8714, +33865=>8715, +37291=>8716, +37541=>8717, +38948=>8718, +36986=>8719, +20736=>8720, +34811=>8721, +34269=>8722, +20740=>8723, +25014=>8724, +32681=>8725, +35427=>8726, +35696=>8727, +35516=>8728, +35695=>8729, +32377=>8730, +34093=>8731, +38512=>8732, +37504=>8733, +39154=>8734, +38577=>8735, +27387=>8736, +23344=>8737, +40441=>8738, +25033=>8739, +32403=>8740, +29801=>8741, +34722=>8742, +29151=>8743, +29074=>8744, +34821=>8745, +36111=>8746, +31310=>8747, +21938=>8748, +25793=>8749, +20653=>8750, +30320=>8751, +36404=>8752, +20778=>8753, +24962=>8754, +37109=>8755, +37438=>8756, +29494=>8757, +35480=>8758, +36671=>8759, +39192=>8760, +12226=>8761, +39770=>8761, +28417=>8762, +33287=>8763, +23996=>8764, +35486=>8765, +39729=>8766, +29508=>8767, +35709=>8768, +38928=>8769, +39341=>8770, +40219=>8771, +28149=>8772, +36677=>8773, +22290=>8774, +21729=>8775, +22291=>8776, +32227=>8777, +36960=>8778, +39000=>8779, +32004=>8780, +36493=>8781, +38000=>8782, +38322=>8783, +38642=>8784, +37142=>8785, +38549=>8786, +36939=>8787, +34292=>8788, +37270=>8789, +26248=>8790, +38620=>8791, +36617=>8792, +25890=>8793, +26283=>8794, +36106=>8795, +36124=>8796, +33247=>8797, +38015=>8798, +26839=>8799, +31432=>8800, +36012=>8801, +25799=>8802, +21063=>8803, +28580=>8804, +36042=>8805, +36104=>8806, +36555=>8807, +37720=>8808, +38296=>8809, +35408=>8810, +40779=>8811, +20661=>8812, +27656=>8813, +30430=>8814, +26028=>8815, +36670=>8816, +23940=>8817, +26855=>8818, +25136=>8819, +32187=>8820, +24373=>8821, +28466=>8822, +24115=>8823, +36076=>8824, +33081=>8825, +36249=>8826, +34756=>8827, +36685=>8828, +37754=>8829, +36889=>8830, +35998=>8831, +37341=>8832, +20597=>8833, +35386=>8834, +37806=>8835, +38499=>8836, +24128=>8837, +30309=>8838, +37165=>8839, +35657=>8840, +32340=>8841, +32887=>8842, +22519=>8843, +34937=>8844, +32025=>8845, +25711=>8846, +25842=>8847, +24159=>8848, +36074=>8849, +28399=>8850, +37912=>8851, +32066=>8852, +31278=>8853, +33131=>8854, +34886=>8855, +35589=>8856, +36600=>8857, +30394=>8858, +26205=>8859, +39519=>8860, +35576=>8861, +35461=>8862, +29165=>8863, +30682=>8864, +22225=>8865, +36015=>8866, +37956=>8867, +31689=>8868, +39376=>8869, +23560=>8870, +30938=>8871, +36681=>8872, +36090=>8873, +27137=>8874, +33674=>8875, +35037=>8876, +22941=>8877, +22767=>8878, +29376=>8879, +37648=>8880, +36101=>8881, +22684=>8882, +32180=>8883, +35524=>8884, +28310=>8885, +28609=>8886, +36039=>8887, +28460=>8888, +32156=>8889, +32317=>8890, +32305=>8891, +37138=>8892, +35419=>8893, +32068=>8894, +38013=>8895, +21959=>8896, +21401=>8897, +21428=>8898, +38760=>8899, +36107=>8900, +21293=>8901, +21297=>8902, +36094=>8903, +21060=>8904, +21132=>8905, +21108=>8906, +20660=>8907, +20480=>8908, +20630=>8909, +20757=>8910, +20738=>8911, +20756=>8912, +20796=>8913, +20791=>8914, +20712=>8915, +20674=>8916, +20795=>8917, +20752=>8918, +20794=>8919, +20681=>8920, +31988=>8921, +40652=>8922, +22213=>8923, +40172=>8924, +35131=>8925, +33248=>8926, +35329=>8927, +35344=>8928, +35340=>8929, +35349=>8930, +35635=>8931, +35406=>8932, +35365=>8933, +35393=>8934, +35382=>8935, +35398=>8936, +35412=>8937, +35416=>8938, +35410=>8939, +35462=>8940, +35460=>8941, +35455=>8942, +35440=>8943, +35452=>8944, +35445=>8945, +35436=>8946, +35438=>8947, +35533=>8948, +35554=>8949, +35425=>8950, +35482=>8951, +35493=>8952, +35473=>8953, +35474=>8954, +35535=>8955, +35537=>8956, +35529=>8957, +35547=>8958, +35543=>8959, +35522=>8960, +35510=>8961, +35574=>8962, +35563=>8963, +35604=>8964, +35585=>8965, +35556=>8966, +35565=>8967, +35580=>8968, +35571=>8969, +35558=>8970, +35566=>8971, +35550=>8972, +35624=>8973, +35740=>8974, +35606=>8975, +35610=>8976, +35600=>8977, +35627=>8978, +35629=>8979, +35670=>8980, +35673=>8981, +35662=>8982, +35742=>8983, +35691=>8984, +35734=>8985, +38488=>8986, +37178=>8987, +37140=>8988, +37172=>8989, +37087=>8990, +37174=>8991, +37126=>8992, +37192=>8993, +33467=>8994, +21233=>8995, +24048=>8996, +22538=>8997, +22745=>8998, +22754=>8999, +22752=>9000, +22746=>9001, +22497=>9002, +22607=>9003, +22550=>9004, +22610=>9005, +22557=>9006, +22628=>9007, +34188=>9008, +34131=>9009, +34294=>9010, +33703=>9011, +33799=>9012, +34031=>9013, +33511=>9014, +34338=>9015, +34086=>9016, +22603=>9017, +29026=>9018, +34136=>9019, +34045=>9020, +34126=>9021, +34184=>9022, +34234=>9023, +29334=>9024, +28366=>9025, +34113=>9026, +34254=>9027, +34130=>9028, +33984=>9029, +33874=>9030, +33892=>9031, +33940=>9032, +33845=>9033, +34207=>9034, +34133=>9035, +40367=>9036, +33939=>9037, +32264=>9038, +34118=>9039, +34146=>9040, +34078=>9041, +39488=>9042, +34362=>9043, +37795=>9044, +34167=>9045, +34334=>9046, +34298=>9047, +34308=>9048, +34282=>9049, +34330=>9050, +22889=>9051, +23607=>9052, +25451=>9053, +25718=>9054, +25759=>9055, +25681=>9056, +25692=>9057, +25779=>9058, +25860=>9059, +25878=>9060, +25847=>9061, +25852=>9062, +25883=>9063, +22064=>9064, +22072=>9065, +22216=>9066, +22182=>9067, +21764=>9068, +21692=>9069, +22144=>9070, +22109=>9071, +22112=>9072, +22069=>9073, +22006=>9074, +22118=>9075, +22130=>9076, +22156=>9077, +22117=>9078, +22044=>9079, +22062=>9080, +21993=>9081, +22038=>9082, +22208=>9083, +22029=>9084, +22195=>9085, +22209=>9086, +22127=>9087, +36705=>9088, +22198=>9089, +22165=>9090, +22279=>9091, +24131=>9092, +24172=>9093, +24152=>9094, +24151=>9095, +23943=>9096, +23796=>9097, +23888=>9098, +23852=>9099, +23975=>9100, +23968=>9101, +23959=>9102, +23821=>9103, +23992=>9104, +23937=>9105, +24020=>9106, +24480=>9107, +29559=>9108, +29505=>9109, +29546=>9110, +29499=>9111, +29547=>9112, +29568=>9113, +29564=>9114, +39136=>9115, +39219=>9116, +39145=>9117, +39228=>9118, +39146=>9119, +39147=>9120, +39149=>9121, +39156=>9122, +39177=>9123, +39185=>9124, +39195=>9125, +39223=>9126, +39231=>9127, +39235=>9128, +39240=>9129, +39241=>9130, +39242=>9131, +39244=>9132, +39266=>9133, +24289=>9134, +36065=>9135, +25082=>9136, +25006=>9137, +24938=>9138, +24894=>9139, +24757=>9140, +24884=>9141, +25036=>9142, +24927=>9143, +25064=>9144, +24827=>9145, +24887=>9146, +24818=>9147, +24947=>9148, +24860=>9149, +24978=>9150, +38274=>9151, +38278=>9152, +38344=>9153, +38286=>9154, +38292=>9155, +38284=>9156, +38373=>9157, +38317=>9158, +38315=>9159, +39726=>9160, +38316=>9161, +38334=>9162, +38326=>9163, +39721=>9164, +38335=>9165, +38333=>9166, +38332=>9167, +38339=>9168, +38347=>9169, +38356=>9170, +38352=>9171, +38357=>9172, +38366=>9173, +28739=>9174, +28505=>9175, +28711=>9176, +28696=>9177, +28668=>9178, +28039=>9179, +28025=>9180, +28254=>9181, +28590=>9182, +28687=>9183, +28408=>9184, +28527=>9185, +28150=>9186, +28543=>9187, +28678=>9188, +28576=>9189, +28683=>9190, +28775=>9191, +28740=>9192, +28677=>9193, +28535=>9194, +28704=>9195, +28703=>9196, +28722=>9197, +28712=>9198, +28765=>9199, +39467=>9200, +36999=>9201, +36885=>9202, +37008=>9203, +23656=>9204, +24371=>9205, +23285=>9206, +23255=>9207, +23296=>9208, +23149=>9209, +23304=>9210, +23372=>9211, +23207=>9212, +23291=>9213, +23307=>9214, +23329=>9215, +23338=>9216, +23321=>9217, +39380=>9218, +39391=>9219, +39385=>9220, +39478=>9221, +39515=>9222, +39377=>9223, +39384=>9224, +39501=>9225, +39498=>9226, +39394=>9227, +39530=>9228, +39439=>9229, +39437=>9230, +39429=>9231, +39490=>9232, +39469=>9233, +39446=>9234, +39489=>9235, +39470=>9236, +39480=>9237, +39491=>9238, +39492=>9239, +39503=>9240, +39525=>9241, +39524=>9242, +31993=>9243, +32006=>9244, +32002=>9245, +32007=>9246, +32008=>9247, +32394=>9248, +32028=>9249, +32021=>9250, +32019=>9251, +32058=>9252, +32050=>9253, +32049=>9254, +32272=>9255, +32060=>9256, +32064=>9257, +32063=>9258, +32093=>9259, +32078=>9260, +32115=>9261, +32134=>9262, +32131=>9263, +32136=>9264, +32190=>9265, +32186=>9266, +32203=>9267, +32212=>9268, +32196=>9269, +32158=>9270, +32172=>9271, +32185=>9272, +32163=>9273, +32176=>9274, +32199=>9275, +32217=>9276, +32215=>9277, +32249=>9278, +32242=>9279, +32354=>9280, +32230=>9281, +32246=>9282, +32241=>9283, +32267=>9284, +32225=>9285, +32265=>9286, +32285=>9287, +32287=>9288, +32286=>9289, +32301=>9290, +32266=>9291, +32273=>9292, +32381=>9293, +32313=>9294, +32309=>9295, +32306=>9296, +32326=>9297, +32325=>9298, +32392=>9299, +32346=>9300, +32338=>9301, +32366=>9302, +32382=>9303, +32368=>9304, +32367=>9305, +32408=>9306, +29859=>9307, +29771=>9308, +29903=>9309, +38922=>9310, +29885=>9311, +29759=>9312, +29833=>9313, +29862=>9314, +29908=>9315, +29914=>9316, +38873=>9317, +38878=>9318, +38876=>9319, +27050=>9320, +27370=>9321, +26776=>9322, +26838=>9323, +27141=>9324, +26783=>9325, +27355=>9326, +27379=>9327, +27368=>9328, +27359=>9329, +27273=>9330, +26895=>9331, +27208=>9332, +26984=>9333, +27071=>9334, +27194=>9335, +27292=>9336, +27410=>9337, +27422=>9338, +27357=>9339, +27111=>9340, +27407=>9341, +27414=>9342, +27372=>9343, +27354=>9344, +27384=>9345, +27315=>9346, +27367=>9347, +27299=>9348, +27347=>9349, +27358=>9350, +27556=>9351, +27550=>9352, +27566=>9353, +27563=>9354, +27567=>9355, +36564=>9356, +36571=>9357, +36594=>9358, +36603=>9359, +36708=>9360, +36601=>9361, +36604=>9362, +36587=>9363, +36580=>9364, +36706=>9365, +36602=>9366, +36606=>9367, +36618=>9368, +36615=>9369, +36613=>9370, +36626=>9371, +36646=>9372, +36638=>9373, +36639=>9374, +36636=>9375, +36659=>9376, +36678=>9377, +36692=>9378, +25108=>9379, +25127=>9380, +29964=>9381, +26311=>9382, +26308=>9383, +26249=>9384, +26326=>9385, +36033=>9386, +36016=>9387, +36026=>9388, +36029=>9389, +36100=>9390, +36018=>9391, +36037=>9392, +36112=>9393, +36049=>9394, +36058=>9395, +36053=>9396, +36075=>9397, +36071=>9398, +36091=>9399, +35224=>9400, +35244=>9401, +35233=>9402, +35263=>9403, +35238=>9404, +35247=>9405, +35250=>9406, +35255=>9407, +27647=>9408, +27660=>9409, +27692=>9410, +29272=>9411, +26407=>9412, +33110=>9413, +33242=>9414, +33051=>9415, +33214=>9416, +33121=>9417, +33231=>9418, +27487=>9419, +39086=>9420, +39087=>9421, +39094=>9422, +39100=>9423, +39110=>9424, +39112=>9425, +36674=>9426, +40783=>9427, +26005=>9428, +29036=>9429, +29010=>9430, +29079=>9431, +29121=>9432, +29148=>9433, +29182=>9434, +31152=>9435, +31118=>9436, +31146=>9437, +25055=>9438, +24932=>9439, +25059=>9440, +25095=>9441, +28585=>9442, +30959=>9443, +30893=>9444, +30824=>9445, +30904=>9446, +31018=>9447, +31025=>9448, +30820=>9449, +30973=>9450, +30951=>9451, +30947=>9452, +40853=>9453, +30616=>9454, +30558=>9455, +30652=>9456, +32646=>9457, +32648=>9458, +37330=>9459, +37331=>9460, +37332=>9461, +37337=>9462, +37335=>9463, +37333=>9464, +37367=>9465, +37351=>9466, +37348=>9467, +37702=>9468, +37365=>9469, +37369=>9470, +37384=>9471, +37414=>9472, +37445=>9473, +37393=>9474, +37392=>9475, +37377=>9476, +37415=>9477, +37380=>9478, +37413=>9479, +37376=>9480, +37434=>9481, +37478=>9482, +37431=>9483, +37427=>9484, +37461=>9485, +37437=>9486, +37432=>9487, +37470=>9488, +37484=>9489, +37485=>9490, +37439=>9491, +37984=>9492, +37424=>9493, +37449=>9494, +37448=>9495, +37453=>9496, +37422=>9497, +37433=>9498, +37944=>9499, +37548=>9500, +37536=>9501, +37498=>9502, +37546=>9503, +37614=>9504, +37583=>9505, +37891=>9506, +37603=>9507, +37946=>9508, +37553=>9509, +37542=>9510, +37799=>9511, +37526=>9512, +37580=>9513, +37545=>9514, +37877=>9515, +37523=>9516, +37503=>9517, +37801=>9518, +37530=>9519, +37658=>9520, +37547=>9521, +37507=>9522, +37899=>9523, +37544=>9524, +37539=>9525, +37906=>9526, +37688=>9527, +37617=>9528, +37847=>9529, +37605=>9530, +37616=>9531, +37615=>9532, +37608=>9533, +37564=>9534, +37597=>9535, +37622=>9536, +37926=>9537, +37927=>9538, +37571=>9539, +37599=>9540, +37606=>9541, +37650=>9542, +37638=>9543, +37737=>9544, +37659=>9545, +37696=>9546, +37633=>9547, +37653=>9548, +37678=>9549, +37699=>9550, +37639=>9551, +37640=>9552, +37663=>9553, +37657=>9554, +37733=>9555, +37703=>9556, +37750=>9557, +37716=>9558, +37732=>9559, +37802=>9560, +37744=>9561, +37764=>9562, +37860=>9563, +37848=>9564, +37928=>9565, +37767=>9566, +37836=>9567, +37784=>9568, +37816=>9569, +37823=>9570, +37798=>9571, +37808=>9572, +37813=>9573, +37964=>9574, +37858=>9575, +37852=>9576, +37853=>9577, +37837=>9578, +37854=>9579, +37827=>9580, +37831=>9581, +37841=>9582, +37908=>9583, +37917=>9584, +37879=>9585, +37989=>9586, +37907=>9587, +37997=>9588, +37920=>9589, +38009=>9590, +37881=>9591, +37913=>9592, +37962=>9593, +37938=>9594, +37951=>9595, +37972=>9596, +37987=>9597, +37758=>9598, +31329=>9599, +40169=>9600, +40182=>9601, +40199=>9602, +40198=>9603, +40227=>9604, +40327=>9605, +40469=>9606, +40221=>9607, +40223=>9608, +40421=>9609, +40239=>9610, +40409=>9611, +40240=>9612, +40258=>9613, +40478=>9614, +40275=>9615, +40477=>9616, +40288=>9617, +40274=>9618, +40435=>9619, +40284=>9620, +40289=>9621, +40339=>9622, +40298=>9623, +40303=>9624, +40329=>9625, +40344=>9626, +40346=>9627, +40384=>9628, +40357=>9629, +40361=>9630, +40386=>9631, +40380=>9632, +40474=>9633, +40403=>9634, +40410=>9635, +40431=>9636, +40422=>9637, +40434=>9638, +40440=>9639, +40460=>9640, +40442=>9641, +40475=>9642, +30308=>9643, +30296=>9644, +30311=>9645, +30210=>9646, +30278=>9647, +30279=>9648, +30281=>9649, +30238=>9650, +30267=>9651, +30317=>9652, +30318=>9653, +30313=>9654, +30322=>9655, +31431=>9656, +31414=>9657, +35168=>9658, +35123=>9659, +35165=>9660, +35143=>9661, +35128=>9662, +35172=>9663, +30392=>9664, +32814=>9665, +32812=>9666, +32889=>9667, +32885=>9668, +38919=>9669, +38926=>9670, +38927=>9671, +38945=>9672, +38940=>9673, +28481=>9674, +38950=>9675, +38967=>9676, +38990=>9677, +38995=>9678, +39027=>9679, +39010=>9680, +39001=>9681, +39013=>9682, +39020=>9683, +39024=>9684, +34787=>9685, +34822=>9686, +34566=>9687, +34851=>9688, +34806=>9689, +34554=>9690, +34799=>9691, +34692=>9692, +34832=>9693, +34760=>9694, +34833=>9695, +34747=>9696, +34766=>9697, +32588=>9698, +31716=>9699, +31591=>9700, +31849=>9701, +31731=>9702, +31744=>9703, +31691=>9704, +31836=>9705, +31774=>9706, +31787=>9707, +31779=>9708, +31850=>9709, +31839=>9710, +33380=>9711, +33387=>9712, +35018=>9713, +32677=>9714, +31986=>9715, +31990=>9716, +31965=>9717, +32310=>9718, +40617=>9719, +36274=>9720, +37317=>9721, +37315=>9722, +40570=>9723, +36489=>9724, +36428=>9725, +36498=>9726, +36474=>9727, +36437=>9728, +36506=>9729, +36491=>9730, +36499=>9731, +36497=>9732, +36513=>9733, +36451=>9734, +36522=>9735, +36518=>9736, +35316=>9737, +35318=>9738, +38746=>9739, +38722=>9740, +38717=>9741, +38724=>9742, +40788=>9743, +40799=>9744, +40793=>9745, +40800=>9746, +40796=>9747, +40806=>9748, +40812=>9749, +40810=>9750, +40823=>9751, +12236=>9752, +40701=>9752, +40703=>9753, +40713=>9754, +35726=>9755, +38014=>9756, +37864=>9757, +39799=>9758, +39796=>9759, +39809=>9760, +39811=>9761, +39822=>9762, +40056=>9763, +31308=>9764, +39826=>9765, +40031=>9766, +39824=>9767, +39853=>9768, +39834=>9769, +39850=>9770, +39838=>9771, +40045=>9772, +39851=>9773, +39837=>9774, +40024=>9775, +39873=>9776, +40058=>9777, +39985=>9778, +39993=>9779, +39971=>9780, +39991=>9781, +39872=>9782, +39882=>9783, +39879=>9784, +39933=>9785, +39894=>9786, +39914=>9787, +39915=>9788, +39905=>9789, +39908=>9790, +39911=>9791, +39901=>9792, +39906=>9793, +39920=>9794, +39899=>9795, +39924=>9796, +39892=>9797, +40029=>9798, +39944=>9799, +39952=>9800, +39949=>9801, +39954=>9802, +39945=>9803, +39935=>9804, +39968=>9805, +39986=>9806, +39981=>9807, +39976=>9808, +39973=>9809, +39977=>9810, +39987=>9811, +39998=>9812, +40008=>9813, +39995=>9814, +39989=>9815, +40005=>9816, +40022=>9817, +40020=>9818, +40018=>9819, +40039=>9820, +38851=>9821, +38845=>9822, +38857=>9823, +40379=>9824, +39631=>9825, +39638=>9826, +39637=>9827, +39768=>9828, +39758=>9829, +39255=>9830, +39260=>9831, +39714=>9832, +40695=>9833, +40690=>9834, +35180=>9835, +38342=>9836, +37686=>9837, +24390=>9838, +34068=>9839, +32404=>9840, +40803=>9841, +22137=>9842, +40725=>9843, +22081=>9844, +39662=>9845, +35079=>9846, +31296=>9847, +39091=>9848, +38308=>9849, +39693=>9850, +36852=>9851, +24409=>9852, +31339=>9853, +39138=>9854, +20642=>9855, +34193=>9856, +20760=>9857, +25458=>9858, +21067=>9859, +30543=>9860, +32397=>9861, +26310=>9862, +30637=>9863, +12228=>9864, +40565=>9864, +22217=>9865, +40692=>9866, +28635=>9867, +25054=>9868, +30663=>9869, +28720=>9870, +40629=>9871, +34890=>9872, +38370=>9873, +38854=>9874, +31844=>9875, +32308=>9876, +38822=>9877, +40623=>9878, +22220=>9879, +39089=>9880, +27311=>9881, +32590=>9882, +31984=>9883, +20418=>9884, +32363=>9885, +40569=>9886, +22190=>9887, +39706=>9888, +33903=>9889, +31142=>9890, +31858=>9891, +39634=>9892, +38587=>9893, +32251=>9894, +35069=>9895, +30787=>9896, +8560=>9897, +8561=>9898, +8562=>9899, +8563=>9900, +8564=>9901, +8565=>9902, +8566=>9903, +8567=>9904, +8568=>9905, +8569=>9906, +714=>9907, +715=>9908, +729=>9909, +8211=>9910, +8213=>9911, +8229=>9912, +8245=>9913, +8453=>9914, +8457=>9915, +8598=>9916, +8599=>9917, +8600=>9918, +8601=>9919, +8725=>9920, +8735=>9921, +8739=>9922, +8786=>9923, +8806=>9924, +8807=>9925, +8895=>9926, +9552=>9927, +9553=>9928, +9554=>9929, +9555=>9930, +9556=>9931, +9557=>9932, +9558=>9933, +9559=>9934, +9560=>9935, +9561=>9936, +9562=>9937, +9563=>9938, +9564=>9939, +9565=>9940, +9566=>9941, +9567=>9942, +9568=>9943, +9569=>9944, +9570=>9945, +9571=>9946, +9572=>9947, +9573=>9948, +9574=>9949, +9575=>9950, +9576=>9951, +9577=>9952, +9578=>9953, +9579=>9954, +9580=>9955, +9581=>9956, +9582=>9957, +9583=>9958, +9584=>9959, +9585=>9960, +9586=>9961, +9587=>9962, +9601=>9963, +9602=>9964, +9603=>9965, +9604=>9966, +9605=>9967, +9606=>9968, +9607=>9969, +9608=>9970, +9609=>9971, +9610=>9972, +9611=>9973, +9612=>9974, +9613=>9975, +9614=>9976, +9615=>9977, +9619=>9978, +9620=>9979, +9621=>9980, +9660=>9981, +9661=>9982, +9698=>9983, +9699=>9984, +9700=>9985, +9701=>9986, +9737=>9987, +8853=>9988, +12306=>9989, +12317=>9990, +12318=>9991, +12321=>9992, +12322=>9993, +12323=>9994, +12324=>9995, +12325=>9996, +12326=>9997, +12327=>9998, +12328=>9999, +12329=>10000, +12963=>10001, +13198=>10002, +13199=>10003, +13212=>10004, +13213=>10005, +13214=>10006, +13217=>10007, +13252=>10008, +13262=>10009, +13265=>10010, +13266=>10011, +13269=>10012, +65072=>10013, +65506=>10014, +65508=>10015, +8481=>10016, +12849=>10017, +8208=>10018, +12540=>10019, +12443=>10020, +12444=>10021, +12541=>10022, +12542=>10023, +12294=>10024, +12445=>10025, +12446=>10026, +65097=>10027, +65098=>10028, +65099=>10029, +65100=>10030, +65101=>10031, +65102=>10032, +65103=>10033, +65104=>10034, +65105=>10035, +65106=>10036, +65108=>10037, +65109=>10038, +65110=>10039, +65111=>10040, +65113=>10041, +65114=>10042, +65115=>10043, +65116=>10044, +65117=>10045, +65118=>10046, +65119=>10047, +65120=>10048, +65121=>10049, +65122=>10050, +65123=>10051, +65124=>10052, +65125=>10053, +65126=>10054, +65128=>10055, +65129=>10056, +65130=>10057, +65131=>10058, +12350=>10059, +59367=>10059, +12272=>10060, +59368=>10060, +12273=>10061, +59369=>10061, +12274=>10062, +59370=>10062, +12275=>10063, +59371=>10063, +12276=>10064, +59372=>10064, +12277=>10065, +59373=>10065, +12278=>10066, +59374=>10066, +12279=>10067, +59375=>10067, +12280=>10068, +59376=>10068, +12281=>10069, +59377=>10069, +12282=>10070, +59378=>10070, +12283=>10071, +59379=>10071, +19970=>10072, +19972=>10073, +19973=>10074, +19974=>10075, +19983=>10076, +19986=>10077, +19991=>10078, +19999=>10079, +20000=>10080, +20001=>10081, +20003=>10082, +20006=>10083, +20009=>10084, +20014=>10085, +20015=>10086, +20017=>10087, +20019=>10088, +20021=>10089, +20023=>10090, +20028=>10091, +20032=>10092, +20033=>10093, +20034=>10094, +20036=>10095, +20038=>10096, +20042=>10097, +20049=>10098, +20053=>10099, +20055=>10100, +20058=>10101, +20059=>10102, +20066=>10103, +20067=>10104, +20068=>10105, +20069=>10106, +20071=>10107, +20072=>10108, +20074=>10109, +20075=>10110, +20076=>10111, +20077=>10112, +20078=>10113, +20079=>10114, +20082=>10115, +20084=>10116, +20085=>10117, +20086=>10118, +20087=>10119, +20088=>10120, +20089=>10121, +20090=>10122, +20091=>10123, +20092=>10124, +20093=>10125, +20095=>10126, +20096=>10127, +20097=>10128, +20099=>10129, +20100=>10130, +12037=>10131, +20101=>10131, +20103=>10132, +20106=>10133, +20112=>10134, +20118=>10135, +20119=>10136, +20121=>10137, +20124=>10138, +20125=>10139, +20131=>10140, +20138=>10141, +20143=>10142, +20144=>10143, +20145=>10144, +20148=>10145, +20150=>10146, +20151=>10147, +20152=>10148, +20153=>10149, +20156=>10150, +20157=>10151, +20158=>10152, +20168=>10153, +20172=>10154, +20175=>10155, +20176=>10156, +20178=>10157, +20186=>10158, +20187=>10159, +20188=>10160, +20192=>10161, +20194=>10162, +20198=>10163, +20199=>10164, +20201=>10165, +20205=>10166, +20206=>10167, +20207=>10168, +20209=>10169, +20212=>10170, +20216=>10171, +20217=>10172, +20218=>10173, +20220=>10174, +20222=>10175, +20224=>10176, +20226=>10177, +20227=>10178, +20228=>10179, +20229=>10180, +20230=>10181, +20231=>10182, +20232=>10183, +20235=>10184, +20236=>10185, +20242=>10186, +20243=>10187, +20244=>10188, +20245=>10189, +20246=>10190, +20252=>10191, +20253=>10192, +20257=>10193, +20259=>10194, +20264=>10195, +20265=>10196, +20268=>10197, +20269=>10198, +20270=>10199, +20273=>10200, +20275=>10201, +20277=>10202, +20279=>10203, +20281=>10204, +20283=>10205, +20286=>10206, +20287=>10207, +20288=>10208, +20289=>10209, +20290=>10210, +20292=>10211, +20293=>10212, +20295=>10213, +20296=>10214, +20297=>10215, +20298=>10216, +20299=>10217, +20300=>10218, +20306=>10219, +20308=>10220, +20310=>10221, +20321=>10222, +20322=>10223, +20326=>10224, +20328=>10225, +20330=>10226, +20331=>10227, +20333=>10228, +20334=>10229, +20337=>10230, +20338=>10231, +20341=>10232, +20343=>10233, +20344=>10234, +20345=>10235, +20346=>10236, +20349=>10237, +20352=>10238, +20353=>10239, +20354=>10240, +20357=>10241, +20359=>10242, +20362=>10243, +20364=>10244, +20366=>10245, +20368=>10246, +20370=>10247, +20371=>10248, +20373=>10249, +20376=>10250, +20377=>10251, +20378=>10252, +20380=>10253, +20382=>10254, +20383=>10255, +20385=>10256, +20386=>10257, +20388=>10258, +20395=>10259, +20397=>10260, +20400=>10261, +20401=>10262, +20402=>10263, +20403=>10264, +20404=>10265, +20406=>10266, +20407=>10267, +20408=>10268, +20409=>10269, +20410=>10270, +20411=>10271, +20412=>10272, +20413=>10273, +20414=>10274, +20416=>10275, +20417=>10276, +20422=>10277, +20423=>10278, +20424=>10279, +20425=>10280, +20427=>10281, +20428=>10282, +20429=>10283, +20434=>10284, +20435=>10285, +20436=>10286, +20437=>10287, +20438=>10288, +20441=>10289, +20443=>10290, +20450=>10291, +20452=>10292, +20453=>10293, +20455=>10294, +20459=>10295, +20460=>10296, +20464=>10297, +20466=>10298, +20468=>10299, +20469=>10300, +20470=>10301, +20471=>10302, +20473=>10303, +20475=>10304, +20476=>10305, +20477=>10306, +20479=>10307, +20481=>10308, +20482=>10309, +20483=>10310, +20484=>10311, +20485=>10312, +20487=>10313, +20488=>10314, +20490=>10315, +20494=>10316, +20496=>10317, +20499=>10318, +20501=>10319, +20502=>10320, +20503=>10321, +20507=>10322, +20509=>10323, +20510=>10324, +20512=>10325, +20514=>10326, +20515=>10327, +20516=>10328, +20519=>10329, +20527=>10330, +20528=>10331, +20529=>10332, +20530=>10333, +20531=>10334, +20532=>10335, +20533=>10336, +20534=>10337, +20535=>10338, +20536=>10339, +20537=>10340, +20539=>10341, +20541=>10342, +20543=>10343, +20544=>10344, +20545=>10345, +20546=>10346, +20548=>10347, +20549=>10348, +20550=>10349, +20554=>10350, +20555=>10351, +20557=>10352, +20560=>10353, +20561=>10354, +20562=>10355, +20563=>10356, +20564=>10357, +20566=>10358, +20567=>10359, +20568=>10360, +20569=>10361, +20571=>10362, +20573=>10363, +20574=>10364, +20575=>10365, +20576=>10366, +20577=>10367, +20578=>10368, +20579=>10369, +20580=>10370, +20582=>10371, +20583=>10372, +20584=>10373, +20585=>10374, +20586=>10375, +20587=>10376, +20589=>10377, +20590=>10378, +20591=>10379, +20592=>10380, +20593=>10381, +20594=>10382, +20595=>10383, +20600=>10384, +20601=>10385, +20602=>10386, +20604=>10387, +20605=>10388, +20609=>10389, +20610=>10390, +20611=>10391, +20612=>10392, +20614=>10393, +20615=>10394, +20617=>10395, +20618=>10396, +20619=>10397, +20620=>10398, +20622=>10399, +20623=>10400, +20624=>10401, +20625=>10402, +20626=>10403, +20627=>10404, +20628=>10405, +20629=>10406, +20631=>10407, +20634=>10408, +20635=>10409, +20636=>10410, +20637=>10411, +20638=>10412, +20639=>10413, +20640=>10414, +20641=>10415, +20644=>10416, +20646=>10417, +20650=>10418, +20651=>10419, +20654=>10420, +20655=>10421, +20656=>10422, +20657=>10423, +20662=>10424, +20664=>10425, +20665=>10426, +20668=>10427, +20669=>10428, +20671=>10429, +20672=>10430, +20673=>10431, +20675=>10432, +20676=>10433, +20678=>10434, +20679=>10435, +20680=>10436, +20682=>10437, +20683=>10438, +20684=>10439, +20685=>10440, +20686=>10441, +20688=>10442, +20690=>10443, +20691=>10444, +20692=>10445, +20695=>10446, +20696=>10447, +20697=>10448, +20699=>10449, +20700=>10450, +20701=>10451, +20703=>10452, +20704=>10453, +20705=>10454, +20706=>10455, +20707=>10456, +20708=>10457, +20713=>10458, +20714=>10459, +20715=>10460, +20719=>10461, +20720=>10462, +20721=>10463, +20722=>10464, +20724=>10465, +20726=>10466, +20727=>10467, +20728=>10468, +20730=>10469, +20732=>10470, +20733=>10471, +20734=>10472, +20735=>10473, +20737=>10474, +20739=>10475, +20741=>10476, +20746=>10477, +20748=>10478, +20749=>10479, +20750=>10480, +20751=>10481, +20753=>10482, +20755=>10483, +20758=>10484, +20759=>10485, +20761=>10486, +20762=>10487, +20763=>10488, +20764=>10489, +20765=>10490, +20766=>10491, +20768=>10492, +20770=>10493, +20771=>10494, +20772=>10495, +20773=>10496, +20774=>10497, +20775=>10498, +20776=>10499, +20777=>10500, +20779=>10501, +20780=>10502, +20781=>10503, +20782=>10504, +20783=>10505, +20784=>10506, +20785=>10507, +20787=>10508, +20788=>10509, +20789=>10510, +20790=>10511, +20792=>10512, +20793=>10513, +20797=>10514, +20798=>10515, +20802=>10516, +20807=>10517, +20810=>10518, +20812=>10519, +20814=>10520, +20815=>10521, +20816=>10522, +20819=>10523, +20823=>10524, +20824=>10525, +20825=>10526, +20827=>10527, +20829=>10528, +20830=>10529, +20831=>10530, +20832=>10531, +20833=>10532, +20835=>10533, +20836=>10534, +20838=>10535, +20839=>10536, +20842=>10537, +20847=>10538, +20850=>10539, +20858=>10540, +20862=>10541, +20863=>10542, +20867=>10543, +20868=>10544, +20870=>10545, +20871=>10546, +20874=>10547, +20875=>10548, +20878=>10549, +20879=>10550, +20880=>10551, +20881=>10552, +20883=>10553, +20884=>10554, +20888=>10555, +20890=>10556, +20893=>10557, +20894=>10558, +20895=>10559, +20897=>10560, +20899=>10561, +20902=>10562, +20903=>10563, +20904=>10564, +20905=>10565, +20906=>10566, +20909=>10567, +20910=>10568, +20916=>10569, +20920=>10570, +20921=>10571, +20922=>10572, +20926=>10573, +20927=>10574, +20929=>10575, +20930=>10576, +20931=>10577, +20933=>10578, +20936=>10579, +20938=>10580, +20942=>10581, +20944=>10582, +20946=>10583, +20947=>10584, +20948=>10585, +20949=>10586, +20950=>10587, +20951=>10588, +20952=>10589, +20953=>10590, +20954=>10591, +20956=>10592, +20958=>10593, +20959=>10594, +20962=>10595, +20963=>10596, +20965=>10597, +20966=>10598, +20967=>10599, +20968=>10600, +20969=>10601, +20970=>10602, +20972=>10603, +20974=>10604, +20978=>10605, +20980=>10606, +20983=>10607, +20990=>10608, +20996=>10609, +20997=>10610, +21001=>10611, +21003=>10612, +21004=>10613, +21007=>10614, +21008=>10615, +21011=>10616, +21012=>10617, +21013=>10618, +21020=>10619, +21022=>10620, +21023=>10621, +21025=>10622, +21026=>10623, +21027=>10624, +21029=>10625, +21030=>10626, +21031=>10627, +21034=>10628, +21036=>10629, +21039=>10630, +21041=>10631, +21042=>10632, +21044=>10633, +21045=>10634, +21052=>10635, +21054=>10636, +21061=>10637, +21062=>10638, +21064=>10639, +21065=>10640, +21070=>10641, +21071=>10642, +21074=>10643, +21075=>10644, +21077=>10645, +21079=>10646, +21080=>10647, +21081=>10648, +21082=>10649, +21085=>10650, +21087=>10651, +21088=>10652, +21090=>10653, +21091=>10654, +21092=>10655, +21094=>10656, +21096=>10657, +21099=>10658, +21100=>10659, +21101=>10660, +21104=>10661, +21105=>10662, +21107=>10663, +21110=>10664, +21111=>10665, +21112=>10666, +21113=>10667, +21114=>10668, +21115=>10669, +21116=>10670, +21118=>10671, +21120=>10672, +21124=>10673, +21125=>10674, +21126=>10675, +21131=>10676, +21134=>10677, +21135=>10678, +21138=>10679, +21140=>10680, +21141=>10681, +21142=>10682, +21143=>10683, +21144=>10684, +21145=>10685, +21146=>10686, +21148=>10687, +21156=>10688, +21157=>10689, +21158=>10690, +21159=>10691, +21166=>10692, +21167=>10693, +21168=>10694, +21172=>10695, +21173=>10696, +21174=>10697, +21175=>10698, +21176=>10699, +21177=>10700, +21178=>10701, +21179=>10702, +21180=>10703, +21181=>10704, +21184=>10705, +21186=>10706, +21188=>10707, +21189=>10708, +21190=>10709, +21192=>10710, +21194=>10711, +21196=>10712, +21197=>10713, +21198=>10714, +21199=>10715, +21201=>10716, +21203=>10717, +21204=>10718, +21207=>10719, +21210=>10720, +21212=>10721, +21216=>10722, +21217=>10723, +21219=>10724, +21221=>10725, +21222=>10726, +21223=>10727, +21224=>10728, +21225=>10729, +21226=>10730, +21227=>10731, +21228=>10732, +21229=>10733, +21230=>10734, +21231=>10735, +21234=>10736, +21235=>10737, +21236=>10738, +21238=>10739, +21239=>10740, +21243=>10741, +21244=>10742, +21245=>10743, +21249=>10744, +21250=>10745, +21251=>10746, +21252=>10747, +21255=>10748, +21257=>10749, +21258=>10750, +21259=>10751, +21260=>10752, +21262=>10753, +21265=>10754, +21266=>10755, +21267=>10756, +21268=>10757, +21272=>10758, +21275=>10759, +21276=>10760, +21278=>10761, +21279=>10762, +21282=>10763, +21284=>10764, +21285=>10765, +21287=>10766, +21288=>10767, +21289=>10768, +21291=>10769, +21292=>10770, +21296=>10771, +21298=>10772, +21299=>10773, +21300=>10774, +21301=>10775, +21302=>10776, +21303=>10777, +12054=>10778, +21304=>10778, +21308=>10779, +21309=>10780, +21314=>10781, +21316=>10782, +21318=>10783, +21323=>10784, +21324=>10785, +21325=>10786, +21328=>10787, +21336=>10788, +21337=>10789, +21339=>10790, +21341=>10791, +21349=>10792, +21352=>10793, +21354=>10794, +21356=>10795, +21357=>10796, +21362=>10797, +21366=>10798, +21369=>10799, +21371=>10800, +21372=>10801, +21373=>10802, +21374=>10803, +21376=>10804, +21377=>10805, +21379=>10806, +21383=>10807, +21384=>10808, +21386=>10809, +21390=>10810, +21391=>10811, +21392=>10812, +21393=>10813, +21394=>10814, +21395=>10815, +21396=>10816, +21398=>10817, +21399=>10818, +21403=>10819, +21404=>10820, +21406=>10821, +21409=>10822, +21412=>10823, +21415=>10824, +21418=>10825, +21419=>10826, +21420=>10827, +21423=>10828, +21424=>10829, +21425=>10830, +21427=>10831, +21429=>10832, +21431=>10833, +21432=>10834, +21433=>10835, +21434=>10836, +21436=>10837, +21437=>10838, +21438=>10839, +21440=>10840, +21444=>10841, +21445=>10842, +21446=>10843, +21447=>10844, +21454=>10845, +21455=>10846, +21456=>10847, +21458=>10848, +21459=>10849, +21461=>10850, +21466=>10851, +21468=>10852, +21469=>10853, +21470=>10854, +21473=>10855, +21479=>10856, +21492=>10857, +21498=>10858, +21502=>10859, +21503=>10860, +21504=>10861, +21506=>10862, +21509=>10863, +21511=>10864, +21515=>10865, +21524=>10866, +21528=>10867, +21529=>10868, +21530=>10869, +21532=>10870, +21538=>10871, +21540=>10872, +21541=>10873, +21546=>10874, +21552=>10875, +21555=>10876, +21558=>10877, +21559=>10878, +21562=>10879, +21565=>10880, +21567=>10881, +21569=>10882, +21570=>10883, +21572=>10884, +21573=>10885, +21575=>10886, +21577=>10887, +21580=>10888, +21581=>10889, +21582=>10890, +21583=>10891, +21585=>10892, +21594=>10893, +21597=>10894, +21598=>10895, +21599=>10896, +21600=>10897, +21601=>10898, +21603=>10899, +21605=>10900, +21607=>10901, +21609=>10902, +21610=>10903, +21611=>10904, +21612=>10905, +21613=>10906, +21614=>10907, +21615=>10908, +21616=>10909, +21620=>10910, +21625=>10911, +21626=>10912, +21630=>10913, +21631=>10914, +21633=>10915, +21635=>10916, +21637=>10917, +21639=>10918, +21640=>10919, +21641=>10920, +21642=>10921, +21645=>10922, +21649=>10923, +21651=>10924, +21655=>10925, +21656=>10926, +21660=>10927, +21662=>10928, +21663=>10929, +21664=>10930, +21665=>10931, +21666=>10932, +21669=>10933, +21678=>10934, +21680=>10935, +21682=>10936, +21685=>10937, +21686=>10938, +21687=>10939, +21689=>10940, +21690=>10941, +21694=>10942, +21699=>10943, +21701=>10944, +21706=>10945, +21707=>10946, +21718=>10947, +21720=>10948, +21723=>10949, +21728=>10950, +21730=>10951, +21731=>10952, +21732=>10953, +21739=>10954, +21740=>10955, +21743=>10956, +21744=>10957, +21745=>10958, +21748=>10959, +21749=>10960, +21750=>10961, +21751=>10962, +21752=>10963, +21753=>10964, +21755=>10965, +21758=>10966, +21760=>10967, +21762=>10968, +21763=>10969, +21765=>10970, +21768=>10971, +21770=>10972, +21771=>10973, +21772=>10974, +21773=>10975, +21774=>10976, +21778=>10977, +21779=>10978, +21781=>10979, +21782=>10980, +21783=>10981, +21784=>10982, +21785=>10983, +21786=>10984, +21788=>10985, +21789=>10986, +21790=>10987, +21791=>10988, +21793=>10989, +21797=>10990, +21798=>10991, +21800=>10992, +21801=>10993, +21803=>10994, +21805=>10995, +21810=>10996, +21812=>10997, +21813=>10998, +21814=>10999, +21816=>11000, +21817=>11001, +21818=>11002, +21819=>11003, +21821=>11004, +21824=>11005, +21826=>11006, +21829=>11007, +21831=>11008, +21832=>11009, +21835=>11010, +21836=>11011, +21837=>11012, +21838=>11013, +21841=>11014, +21842=>11015, +21844=>11016, +21847=>11017, +21848=>11018, +21849=>11019, +21850=>11020, +21851=>11021, +21853=>11022, +21855=>11023, +21856=>11024, +21858=>11025, +21859=>11026, +21864=>11027, +21865=>11028, +21867=>11029, +21871=>11030, +21872=>11031, +21873=>11032, +21874=>11033, +21875=>11034, +21876=>11035, +21881=>11036, +21882=>11037, +21885=>11038, +21887=>11039, +21893=>11040, +21894=>11041, +21900=>11042, +21901=>11043, +21902=>11044, +21904=>11045, +21906=>11046, +21907=>11047, +21909=>11048, +21910=>11049, +21911=>11050, +21914=>11051, +21915=>11052, +21918=>11053, +21920=>11054, +21921=>11055, +21922=>11056, +21923=>11057, +21924=>11058, +21925=>11059, +21926=>11060, +21928=>11061, +21929=>11062, +21931=>11063, +21933=>11064, +21935=>11065, +21936=>11066, +21940=>11067, +21942=>11068, +21944=>11069, +21946=>11070, +21948=>11071, +21951=>11072, +21952=>11073, +21953=>11074, +21954=>11075, +21955=>11076, +21960=>11077, +21962=>11078, +21963=>11079, +21967=>11080, +21968=>11081, +21973=>11082, +21975=>11083, +21976=>11084, +21977=>11085, +21979=>11086, +21982=>11087, +21984=>11088, +21986=>11089, +21991=>11090, +21997=>11091, +21998=>11092, +22000=>11093, +22001=>11094, +22004=>11095, +22008=>11096, +22009=>11097, +22010=>11098, +22011=>11099, +22012=>11100, +22015=>11101, +22018=>11102, +22019=>11103, +22020=>11104, +22021=>11105, +22023=>11106, +22026=>11107, +22027=>11108, +22032=>11109, +22033=>11110, +22034=>11111, +22035=>11112, +22037=>11113, +22041=>11114, +22042=>11115, +22045=>11116, +22048=>11117, +22049=>11118, +22050=>11119, +22053=>11120, +22054=>11121, +22056=>11122, +22058=>11123, +22059=>11124, +22067=>11125, +22071=>11126, +22074=>11127, +22076=>11128, +22077=>11129, +22078=>11130, +22080=>11131, +22082=>11132, +22083=>11133, +22084=>11134, +22085=>11135, +22086=>11136, +22087=>11137, +22088=>11138, +22089=>11139, +22090=>11140, +22091=>11141, +22095=>11142, +22096=>11143, +22097=>11144, +22098=>11145, +22099=>11146, +22101=>11147, +22102=>11148, +22106=>11149, +22107=>11150, +22110=>11151, +22111=>11152, +22113=>11153, +22115=>11154, +22119=>11155, +22125=>11156, +22126=>11157, +22128=>11158, +22131=>11159, +22133=>11160, +22135=>11161, +22138=>11162, +22141=>11163, +22142=>11164, +22143=>11165, +22145=>11166, +22146=>11167, +22147=>11168, +22148=>11169, +22152=>11170, +22153=>11171, +22154=>11172, +22155=>11173, +22157=>11174, +22160=>11175, +22161=>11176, +22162=>11177, +22164=>11178, +22166=>11179, +22167=>11180, +22168=>11181, +22170=>11182, +22171=>11183, +22172=>11184, +22173=>11185, +22174=>11186, +22175=>11187, +22176=>11188, +22177=>11189, +22178=>11190, +22180=>11191, +22181=>11192, +22183=>11193, +22185=>11194, +22186=>11195, +22187=>11196, +22188=>11197, +22189=>11198, +22192=>11199, +22193=>11200, +22194=>11201, +22197=>11202, +22200=>11203, +22201=>11204, +22202=>11205, +22203=>11206, +22205=>11207, +22206=>11208, +22207=>11209, +22211=>11210, +22212=>11211, +22214=>11212, +22215=>11213, +22219=>11214, +22221=>11215, +22222=>11216, +22223=>11217, +22224=>11218, +22226=>11219, +22227=>11220, +22229=>11221, +22230=>11222, +22232=>11223, +22233=>11224, +22236=>11225, +22243=>11226, +22245=>11227, +22246=>11228, +22247=>11229, +22248=>11230, +22249=>11231, +22250=>11232, +22252=>11233, +22254=>11234, +22255=>11235, +22258=>11236, +22259=>11237, +22262=>11238, +22263=>11239, +22264=>11240, +22267=>11241, +22268=>11242, +22272=>11243, +22273=>11244, +22274=>11245, +22277=>11246, +22284=>11247, +22286=>11248, +22287=>11249, +22288=>11250, +22289=>11251, +22292=>11252, +22293=>11253, +22295=>11254, +22297=>11255, +22298=>11256, +22299=>11257, +22301=>11258, +22302=>11259, +22304=>11260, +22305=>11261, +22306=>11262, +22308=>11263, +22309=>11264, +22310=>11265, +22311=>11266, +22315=>11267, +22321=>11268, +22322=>11269, +22324=>11270, +22325=>11271, +22326=>11272, +22327=>11273, +22328=>11274, +22332=>11275, +22333=>11276, +22335=>11277, +22337=>11278, +22339=>11279, +22340=>11280, +22341=>11281, +22342=>11282, +22344=>11283, +22345=>11284, +22347=>11285, +22354=>11286, +22355=>11287, +22356=>11288, +22357=>11289, +22358=>11290, +22360=>11291, +22361=>11292, +22370=>11293, +22371=>11294, +22373=>11295, +22375=>11296, +22380=>11297, +22382=>11298, +22384=>11299, +22385=>11300, +22386=>11301, +22388=>11302, +22389=>11303, +22392=>11304, +22393=>11305, +22394=>11306, +22397=>11307, +22398=>11308, +22399=>11309, +22400=>11310, +22401=>11311, +22407=>11312, +22408=>11313, +22409=>11314, +22410=>11315, +22413=>11316, +22414=>11317, +22415=>11318, +22416=>11319, +22417=>11320, +22420=>11321, +22421=>11322, +22422=>11323, +22423=>11324, +22424=>11325, +22425=>11326, +22426=>11327, +22428=>11328, +22429=>11329, +22430=>11330, +22431=>11331, +22437=>11332, +22440=>11333, +22442=>11334, +22444=>11335, +22447=>11336, +22448=>11337, +22449=>11338, +22451=>11339, +22453=>11340, +22454=>11341, +22455=>11342, +22457=>11343, +22458=>11344, +22459=>11345, +22460=>11346, +22461=>11347, +22462=>11348, +22463=>11349, +22464=>11350, +22465=>11351, +22468=>11352, +22469=>11353, +22470=>11354, +22471=>11355, +22472=>11356, +22473=>11357, +22474=>11358, +22476=>11359, +22477=>11360, +22480=>11361, +22481=>11362, +22483=>11363, +22486=>11364, +22487=>11365, +22491=>11366, +22492=>11367, +22494=>11368, +22498=>11369, +22499=>11370, +22501=>11371, +22502=>11372, +22503=>11373, +22504=>11374, +22505=>11375, +22506=>11376, +22507=>11377, +22508=>11378, +22510=>11379, +22512=>11380, +22513=>11381, +22514=>11382, +22515=>11383, +22517=>11384, +22518=>11385, +22523=>11386, +22524=>11387, +22526=>11388, +22527=>11389, +22529=>11390, +22531=>11391, +22532=>11392, +22536=>11393, +22537=>11394, +22540=>11395, +22542=>11396, +22543=>11397, +22544=>11398, +22546=>11399, +22547=>11400, +22548=>11401, +22551=>11402, +22552=>11403, +22554=>11404, +22555=>11405, +22556=>11406, +22559=>11407, +22562=>11408, +22563=>11409, +22565=>11410, +22566=>11411, +22567=>11412, +22568=>11413, +22569=>11414, +22571=>11415, +22572=>11416, +22573=>11417, +22574=>11418, +22578=>11419, +22579=>11420, +22582=>11421, +22583=>11422, +22584=>11423, +22585=>11424, +22586=>11425, +22587=>11426, +22588=>11427, +22589=>11428, +22590=>11429, +22591=>11430, +22592=>11431, +22593=>11432, +22594=>11433, +22595=>11434, +22597=>11435, +22598=>11436, +22599=>11437, +22600=>11438, +22601=>11439, +22606=>11440, +22608=>11441, +22611=>11442, +22613=>11443, +22614=>11444, +22617=>11445, +22618=>11446, +22619=>11447, +22620=>11448, +22621=>11449, +22623=>11450, +22624=>11451, +22625=>11452, +22627=>11453, +22630=>11454, +22631=>11455, +22632=>11456, +22633=>11457, +22634=>11458, +22637=>11459, +22638=>11460, +22639=>11461, +22640=>11462, +22641=>11463, +22642=>11464, +22643=>11465, +22644=>11466, +22646=>11467, +22647=>11468, +22648=>11469, +22650=>11470, +22651=>11471, +22652=>11472, +22653=>11473, +22655=>11474, +22658=>11475, +22660=>11476, +22662=>11477, +22663=>11478, +22664=>11479, +22667=>11480, +22668=>11481, +22669=>11482, +22670=>11483, +22671=>11484, +22672=>11485, +22673=>11486, +22676=>11487, +22677=>11488, +22678=>11489, +22679=>11490, +22680=>11491, +22683=>11492, +22685=>11493, +22688=>11494, +22689=>11495, +22690=>11496, +22691=>11497, +22692=>11498, +22693=>11499, +22694=>11500, +22695=>11501, +22698=>11502, +22699=>11503, +22700=>11504, +22701=>11505, +22703=>11506, +22704=>11507, +22705=>11508, +22706=>11509, +22708=>11510, +22709=>11511, +22710=>11512, +22711=>11513, +22712=>11514, +22713=>11515, +22714=>11516, +22717=>11517, +22719=>11518, +22720=>11519, +22722=>11520, +22723=>11521, +22724=>11522, +22726=>11523, +22728=>11524, +22729=>11525, +22730=>11526, +22731=>11527, +22732=>11528, +22733=>11529, +22734=>11530, +22735=>11531, +22736=>11532, +22738=>11533, +22740=>11534, +22742=>11535, +22743=>11536, +22747=>11537, +22748=>11538, +22749=>11539, +22753=>11540, +22755=>11541, +22757=>11542, +22758=>11543, +22759=>11544, +22760=>11545, +22762=>11546, +22765=>11547, +22769=>11548, +22770=>11549, +22772=>11550, +22773=>11551, +22775=>11552, +22776=>11553, +22779=>11554, +22780=>11555, +22782=>11556, +22783=>11557, +22784=>11558, +22785=>11559, +22787=>11560, +22789=>11561, +22790=>11562, +22792=>11563, +22793=>11564, +12066=>11565, +22794=>11565, +22795=>11566, +22796=>11567, +22798=>11568, +22800=>11569, +22801=>11570, +22802=>11571, +22803=>11572, +22807=>11573, +22808=>11574, +22811=>11575, +22813=>11576, +22814=>11577, +22816=>11578, +22817=>11579, +22819=>11580, +22822=>11581, +22824=>11582, +22828=>11583, +22832=>11584, +22834=>11585, +22835=>11586, +22837=>11587, +22838=>11588, +22843=>11589, +22845=>11590, +22847=>11591, +22848=>11592, +22851=>11593, +22853=>11594, +22854=>11595, +22858=>11596, +22860=>11597, +22861=>11598, +22864=>11599, +22866=>11600, +22867=>11601, +22873=>11602, +22875=>11603, +22876=>11604, +22877=>11605, +22878=>11606, +22879=>11607, +22881=>11608, +22883=>11609, +22884=>11610, +22886=>11611, +22887=>11612, +22888=>11613, +22891=>11614, +22893=>11615, +22895=>11616, +22896=>11617, +22897=>11618, +22898=>11619, +22901=>11620, +22903=>11621, +22906=>11622, +22907=>11623, +22908=>11624, +22910=>11625, +22911=>11626, +22912=>11627, +22917=>11628, +22921=>11629, +22923=>11630, +22924=>11631, +22926=>11632, +22927=>11633, +22928=>11634, +22929=>11635, +22932=>11636, +22933=>11637, +22936=>11638, +22938=>11639, +22939=>11640, +22940=>11641, +22943=>11642, +22944=>11643, +22945=>11644, +22946=>11645, +22950=>11646, +22951=>11647, +22956=>11648, +22957=>11649, +22960=>11650, +22961=>11651, +22963=>11652, +22964=>11653, +22965=>11654, +22966=>11655, +22967=>11656, +22968=>11657, +22970=>11658, +22972=>11659, +22973=>11660, +22975=>11661, +22976=>11662, +22977=>11663, +22978=>11664, +22979=>11665, +22980=>11666, +22981=>11667, +22983=>11668, +22984=>11669, +22985=>11670, +22988=>11671, +22989=>11672, +22990=>11673, +22991=>11674, +22997=>11675, +22998=>11676, +23001=>11677, +23003=>11678, +23006=>11679, +23007=>11680, +23008=>11681, +23009=>11682, +23010=>11683, +23012=>11684, +23014=>11685, +23015=>11686, +23017=>11687, +23018=>11688, +23019=>11689, +23021=>11690, +23022=>11691, +23023=>11692, +23024=>11693, +23025=>11694, +23026=>11695, +23027=>11696, +23028=>11697, +23029=>11698, +23030=>11699, +23031=>11700, +23032=>11701, +23034=>11702, +23036=>11703, +23037=>11704, +23038=>11705, +23040=>11706, +23042=>11707, +23050=>11708, +23051=>11709, +23053=>11710, +23054=>11711, +23055=>11712, +23056=>11713, +23058=>11714, +23060=>11715, +23061=>11716, +23062=>11717, +23063=>11718, +23065=>11719, +23066=>11720, +23067=>11721, +23069=>11722, +23070=>11723, +23073=>11724, +23074=>11725, +23076=>11726, +23078=>11727, +23079=>11728, +23080=>11729, +23082=>11730, +23083=>11731, +23084=>11732, +23085=>11733, +23086=>11734, +23087=>11735, +23088=>11736, +23091=>11737, +23093=>11738, +23095=>11739, +23096=>11740, +23097=>11741, +23098=>11742, +23099=>11743, +23101=>11744, +23102=>11745, +23103=>11746, +23106=>11747, +23107=>11748, +23108=>11749, +23109=>11750, +23111=>11751, +23112=>11752, +23115=>11753, +23116=>11754, +23117=>11755, +23118=>11756, +23119=>11757, +23120=>11758, +23121=>11759, +23122=>11760, +23123=>11761, +23124=>11762, +23126=>11763, +23127=>11764, +23128=>11765, +23129=>11766, +23131=>11767, +23132=>11768, +23133=>11769, +23134=>11770, +23135=>11771, +23136=>11772, +23137=>11773, +23139=>11774, +23140=>11775, +23141=>11776, +23144=>11777, +23145=>11778, +23147=>11779, +23148=>11780, +23150=>11781, +23151=>11782, +23152=>11783, +23153=>11784, +23154=>11785, +23155=>11786, +23160=>11787, +23161=>11788, +23163=>11789, +23164=>11790, +23165=>11791, +23166=>11792, +23168=>11793, +23169=>11794, +23170=>11795, +23171=>11796, +23172=>11797, +23173=>11798, +23174=>11799, +23175=>11800, +23176=>11801, +23177=>11802, +23178=>11803, +23179=>11804, +23180=>11805, +23181=>11806, +23182=>11807, +23183=>11808, +23184=>11809, +23185=>11810, +23187=>11811, +23188=>11812, +23189=>11813, +23190=>11814, +23191=>11815, +23192=>11816, +23193=>11817, +23196=>11818, +23197=>11819, +23198=>11820, +23199=>11821, +23200=>11822, +23201=>11823, +23202=>11824, +23203=>11825, +23204=>11826, +23205=>11827, +23206=>11828, +23208=>11829, +23209=>11830, +23211=>11831, +23212=>11832, +23213=>11833, +23214=>11834, +23215=>11835, +23216=>11836, +23217=>11837, +23220=>11838, +23222=>11839, +23223=>11840, +23225=>11841, +23226=>11842, +23227=>11843, +23228=>11844, +23231=>11845, +23232=>11846, +23235=>11847, +23236=>11848, +23237=>11849, +23238=>11850, +23239=>11851, +23240=>11852, +23242=>11853, +23243=>11854, +23245=>11855, +23246=>11856, +23247=>11857, +23248=>11858, +23249=>11859, +23251=>11860, +23253=>11861, +23257=>11862, +23258=>11863, +23259=>11864, +23261=>11865, +23262=>11866, +23263=>11867, +23266=>11868, +23268=>11869, +23269=>11870, +23271=>11871, +23272=>11872, +23274=>11873, +23276=>11874, +23277=>11875, +23278=>11876, +23279=>11877, +23280=>11878, +23282=>11879, +23283=>11880, +23284=>11881, +23286=>11882, +23287=>11883, +23288=>11884, +23289=>11885, +23290=>11886, +23292=>11887, +23293=>11888, +23294=>11889, +23295=>11890, +23297=>11891, +23298=>11892, +23299=>11893, +23300=>11894, +23301=>11895, +23302=>11896, +23303=>11897, +23306=>11898, +23309=>11899, +23310=>11900, +23311=>11901, +23312=>11902, +23313=>11903, +23314=>11904, +23315=>11905, +23316=>11906, +23317=>11907, +23320=>11908, +23322=>11909, +23323=>11910, +23324=>11911, +23325=>11912, +23326=>11913, +23327=>11914, +23328=>11915, +23330=>11916, +23331=>11917, +23332=>11918, +23333=>11919, +23334=>11920, +23335=>11921, +23336=>11922, +23337=>11923, +23339=>11924, +23340=>11925, +23341=>11926, +23342=>11927, +23343=>11928, +23345=>11929, +23347=>11930, +23349=>11931, +23350=>11932, +23353=>11933, +23354=>11934, +23355=>11935, +23356=>11936, +23357=>11937, +23358=>11938, +23359=>11939, +23361=>11940, +23362=>11941, +23363=>11942, +23364=>11943, +23365=>11944, +23366=>11945, +23367=>11946, +23368=>11947, +23369=>11948, +23370=>11949, +23371=>11950, +23373=>11951, +23374=>11952, +23375=>11953, +23378=>11954, +23382=>11955, +23390=>11956, +23392=>11957, +23393=>11958, +23399=>11959, +23400=>11960, +23405=>11961, +23406=>11962, +23407=>11963, +23410=>11964, +23412=>11965, +23414=>11966, +23415=>11967, +23417=>11968, +23419=>11969, +23420=>11970, +23422=>11971, +23426=>11972, +23430=>11973, +23434=>11974, +23437=>11975, +23438=>11976, +23440=>11977, +23441=>11978, +23442=>11979, +23444=>11980, +23446=>11981, +23455=>11982, +23463=>11983, +23464=>11984, +23465=>11985, +23468=>11986, +23469=>11987, +23470=>11988, +23471=>11989, +23473=>11990, +23474=>11991, +23479=>11992, +23482=>11993, +23483=>11994, +23484=>11995, +23488=>11996, +23489=>11997, +23491=>11998, +23496=>11999, +23497=>12000, +23498=>12001, +23499=>12002, +23501=>12003, +23502=>12004, +23503=>12005, +23505=>12006, +23508=>12007, +23509=>12008, +23510=>12009, +23511=>12010, +23512=>12011, +23513=>12012, +23514=>12013, +23515=>12014, +23516=>12015, +23520=>12016, +23523=>12017, +23530=>12018, +23533=>12019, +23535=>12020, +23537=>12021, +23538=>12022, +23539=>12023, +23540=>12024, +23543=>12025, +23549=>12026, +23550=>12027, +23552=>12028, +23554=>12029, +23555=>12030, +23557=>12031, +23564=>12032, +23568=>12033, +23570=>12034, +23571=>12035, +23575=>12036, +23577=>12037, +23579=>12038, +23582=>12039, +23583=>12040, +23584=>12041, +23585=>12042, +23587=>12043, +23590=>12044, +23592=>12045, +23593=>12046, +23594=>12047, +23595=>12048, +23597=>12049, +23598=>12050, +23599=>12051, +23600=>12052, +23602=>12053, +23603=>12054, +23605=>12055, +23606=>12056, +23619=>12057, +23620=>12058, +23622=>12059, +23623=>12060, +23628=>12061, +23629=>12062, +23634=>12063, +23635=>12064, +23636=>12065, +23638=>12066, +23639=>12067, +23640=>12068, +23642=>12069, +23643=>12070, +23644=>12071, +23645=>12072, +23647=>12073, +23655=>12074, +23657=>12075, +23658=>12076, +23659=>12077, +23661=>12078, +23664=>12079, +23666=>12080, +23667=>12081, +23668=>12082, +23669=>12083, +23670=>12084, +23671=>12085, +23672=>12086, +23675=>12087, +23676=>12088, +23677=>12089, +23678=>12090, +23680=>12091, +23683=>12092, +23684=>12093, +23685=>12094, +23686=>12095, +23687=>12096, +23689=>12097, +23690=>12098, +23691=>12099, +23694=>12100, +23695=>12101, +23698=>12102, +23699=>12103, +23701=>12104, +23709=>12105, +23710=>12106, +23711=>12107, +23712=>12108, +23716=>12109, +23717=>12110, +23718=>12111, +23719=>12112, +23720=>12113, +23722=>12114, +23726=>12115, +23727=>12116, +23728=>12117, +23730=>12118, +23732=>12119, +23734=>12120, +23737=>12121, +23738=>12122, +23739=>12123, +23740=>12124, +23742=>12125, +23744=>12126, +23746=>12127, +23747=>12128, +23749=>12129, +23750=>12130, +23751=>12131, +23752=>12132, +23753=>12133, +23754=>12134, +23756=>12135, +23757=>12136, +23758=>12137, +23759=>12138, +23760=>12139, +23761=>12140, +23763=>12141, +23764=>12142, +23765=>12143, +23766=>12144, +23767=>12145, +23768=>12146, +23770=>12147, +23771=>12148, +23772=>12149, +23773=>12150, +23774=>12151, +23775=>12152, +23776=>12153, +23778=>12154, +23779=>12155, +23783=>12156, +23785=>12157, +23787=>12158, +23788=>12159, +23790=>12160, +23791=>12161, +23793=>12162, +23794=>12163, +23795=>12164, +23797=>12165, +23799=>12166, +23800=>12167, +23801=>12168, +23802=>12169, +23804=>12170, +23806=>12171, +23807=>12172, +23808=>12173, +23809=>12174, +23812=>12175, +23813=>12176, +23816=>12177, +23817=>12178, +23818=>12179, +23819=>12180, +23820=>12181, +23823=>12182, +23824=>12183, +23825=>12184, +23826=>12185, +23827=>12186, +23829=>12187, +23832=>12188, +23833=>12189, +23834=>12190, +23836=>12191, +23837=>12192, +23839=>12193, +23840=>12194, +23841=>12195, +23842=>12196, +23843=>12197, +23845=>12198, +23848=>12199, +23850=>12200, +23851=>12201, +23855=>12202, +23856=>12203, +23857=>12204, +23858=>12205, +23859=>12206, +23861=>12207, +23862=>12208, +23863=>12209, +23864=>12210, +23865=>12211, +23866=>12212, +23867=>12213, +23868=>12214, +23871=>12215, +23872=>12216, +23873=>12217, +23874=>12218, +23875=>12219, +23876=>12220, +23877=>12221, +23878=>12222, +23880=>12223, +23881=>12224, +23885=>12225, +23886=>12226, +23887=>12227, +23889=>12228, +23890=>12229, +23891=>12230, +23892=>12231, +23893=>12232, +23894=>12233, +23895=>12234, +23897=>12235, +23898=>12236, +23900=>12237, +23902=>12238, +23903=>12239, +23904=>12240, +23905=>12241, +23906=>12242, +23907=>12243, +23908=>12244, +23909=>12245, +23910=>12246, +23911=>12247, +23912=>12248, +23914=>12249, +23917=>12250, +23918=>12251, +23920=>12252, +23921=>12253, +23922=>12254, +23923=>12255, +23925=>12256, +23926=>12257, +23927=>12258, +23928=>12259, +23929=>12260, +23930=>12261, +23931=>12262, +23932=>12263, +23933=>12264, +23934=>12265, +23935=>12266, +23936=>12267, +23939=>12268, +23941=>12269, +23942=>12270, +23944=>12271, +23945=>12272, +23946=>12273, +23947=>12274, +23948=>12275, +23949=>12276, +23950=>12277, +23951=>12278, +23952=>12279, +23953=>12280, +23954=>12281, +23955=>12282, +23956=>12283, +23957=>12284, +23958=>12285, +23960=>12286, +23962=>12287, +23963=>12288, +23964=>12289, +23966=>12290, +23967=>12291, +23969=>12292, +23970=>12293, +23971=>12294, +23972=>12295, +23973=>12296, +23974=>12297, +23976=>12298, +23977=>12299, +23978=>12300, +23979=>12301, +23980=>12302, +23981=>12303, +23982=>12304, +23983=>12305, +23984=>12306, +23985=>12307, +23986=>12308, +23987=>12309, +23988=>12310, +23989=>12311, +23990=>12312, +23993=>12313, +23995=>12314, +23997=>12315, +23998=>12316, +23999=>12317, +24000=>12318, +24001=>12319, +24002=>12320, +24003=>12321, +24004=>12322, +24006=>12323, +24007=>12324, +24008=>12325, +24009=>12326, +24010=>12327, +24012=>12328, +24014=>12329, +24015=>12330, +24016=>12331, +24017=>12332, +24019=>12333, +24021=>12334, +24022=>12335, +24023=>12336, +24024=>12337, +24025=>12338, +24026=>12339, +24028=>12340, +24031=>12341, +24032=>12342, +24035=>12343, +24036=>12344, +24042=>12345, +24044=>12346, +24045=>12347, +24053=>12348, +24054=>12349, +24056=>12350, +24057=>12351, +24058=>12352, +24059=>12353, +24060=>12354, +24063=>12355, +24064=>12356, +24068=>12357, +24071=>12358, +24073=>12359, +24074=>12360, +24075=>12361, +24077=>12362, +24078=>12363, +24082=>12364, +24083=>12365, +24087=>12366, +24094=>12367, +24095=>12368, +24096=>12369, +24097=>12370, +24098=>12371, +24099=>12372, +24100=>12373, +24104=>12374, +24105=>12375, +24106=>12376, +24108=>12377, +24111=>12378, +24112=>12379, +24114=>12380, +24116=>12381, +24117=>12382, +24121=>12383, +24122=>12384, +24126=>12385, +24127=>12386, +24129=>12387, +24134=>12388, +24135=>12389, +24136=>12390, +24137=>12391, +24138=>12392, +24139=>12393, +24141=>12394, +24142=>12395, +24143=>12396, +24144=>12397, +24145=>12398, +24146=>12399, +24147=>12400, +24150=>12401, +24153=>12402, +24154=>12403, +24156=>12404, +24157=>12405, +24160=>12406, +24164=>12407, +24165=>12408, +24166=>12409, +24167=>12410, +24168=>12411, +24169=>12412, +24170=>12413, +24173=>12414, +24174=>12415, +24175=>12416, +24176=>12417, +24177=>12418, +24181=>12419, +24183=>12420, +24193=>12421, +24194=>12422, +24195=>12423, +24197=>12424, +24200=>12425, +24201=>12426, +24204=>12427, +24205=>12428, +24206=>12429, +24210=>12430, +24216=>12431, +24219=>12432, +24221=>12433, +24225=>12434, +24226=>12435, +24227=>12436, +24228=>12437, +24232=>12438, +24233=>12439, +24234=>12440, +24236=>12441, +24238=>12442, +24239=>12443, +24240=>12444, +24241=>12445, +24242=>12446, +24244=>12447, +24250=>12448, +24251=>12449, +24252=>12450, +24253=>12451, +24255=>12452, +24256=>12453, +24257=>12454, +24258=>12455, +24259=>12456, +24260=>12457, +24261=>12458, +24262=>12459, +24263=>12460, +24264=>12461, +24267=>12462, +24268=>12463, +24269=>12464, +24270=>12465, +24271=>12466, +24272=>12467, +24276=>12468, +24277=>12469, +24279=>12470, +24280=>12471, +24281=>12472, +24282=>12473, +24284=>12474, +24285=>12475, +24286=>12476, +24292=>12477, +24293=>12478, +24294=>12479, +24295=>12480, +24297=>12481, +24299=>12482, +24301=>12483, +24302=>12484, +24303=>12485, +24304=>12486, +24305=>12487, +24306=>12488, +24309=>12489, +24312=>12490, +24313=>12491, +24315=>12492, +24316=>12493, +24317=>12494, +24325=>12495, +24326=>12496, +24327=>12497, +24329=>12498, +24332=>12499, +24333=>12500, +24334=>12501, +24336=>12502, +24338=>12503, +24340=>12504, +24342=>12505, +24345=>12506, +24346=>12507, +24348=>12508, +24349=>12509, +24350=>12510, +24353=>12511, +24354=>12512, +24355=>12513, +24356=>12514, +24360=>12515, +24363=>12516, +24364=>12517, +24366=>12518, +24368=>12519, +24370=>12520, +24372=>12521, +24374=>12522, +24375=>12523, +24376=>12524, +24379=>12525, +24381=>12526, +24382=>12527, +24383=>12528, +24385=>12529, +24386=>12530, +24387=>12531, +24388=>12532, +24389=>12533, +24391=>12534, +24393=>12535, +24394=>12536, +24395=>12537, +24397=>12538, +24399=>12539, +24401=>12540, +24404=>12541, +24410=>12542, +24411=>12543, +24412=>12544, +24414=>12545, +24415=>12546, +24416=>12547, +24419=>12548, +24421=>12549, +24423=>12550, +24424=>12551, +24427=>12552, +24430=>12553, +24431=>12554, +24434=>12555, +24436=>12556, +24437=>12557, +24438=>12558, +24440=>12559, +24442=>12560, +24445=>12561, +24446=>12562, +24447=>12563, +24451=>12564, +24454=>12565, +24461=>12566, +24462=>12567, +24463=>12568, +24467=>12569, +24468=>12570, +24470=>12571, +24474=>12572, +24475=>12573, +24477=>12574, +24479=>12575, +24482=>12576, +24483=>12577, +24484=>12578, +24485=>12579, +24486=>12580, +24487=>12581, +24491=>12582, +24492=>12583, +24495=>12584, +24496=>12585, +24497=>12586, +24498=>12587, +24499=>12588, +24500=>12589, +24502=>12590, +24504=>12591, +24506=>12592, +24507=>12593, +24510=>12594, +24511=>12595, +24512=>12596, +24513=>12597, +24514=>12598, +24519=>12599, +24520=>12600, +24522=>12601, +24523=>12602, +24526=>12603, +24531=>12604, +24532=>12605, +24533=>12606, +24538=>12607, +24539=>12608, +24540=>12609, +24542=>12610, +24543=>12611, +24546=>12612, +24547=>12613, +24549=>12614, +24550=>12615, +24552=>12616, +24553=>12617, +24556=>12618, +24559=>12619, +24560=>12620, +24562=>12621, +24563=>12622, +24564=>12623, +24566=>12624, +24567=>12625, +24569=>12626, +24570=>12627, +24572=>12628, +24583=>12629, +24584=>12630, +24585=>12631, +24587=>12632, +24588=>12633, +24592=>12634, +24593=>12635, +24595=>12636, +24599=>12637, +24600=>12638, +24602=>12639, +24606=>12640, +24607=>12641, +24610=>12642, +24611=>12643, +24612=>12644, +24620=>12645, +24621=>12646, +24622=>12647, +24624=>12648, +24625=>12649, +24626=>12650, +24627=>12651, +24628=>12652, +24630=>12653, +24631=>12654, +24632=>12655, +24633=>12656, +24634=>12657, +24637=>12658, +24638=>12659, +24640=>12660, +24644=>12661, +24645=>12662, +24646=>12663, +24647=>12664, +24648=>12665, +24649=>12666, +24650=>12667, +24652=>12668, +24654=>12669, +24655=>12670, +24657=>12671, +24659=>12672, +24660=>12673, +24662=>12674, +24663=>12675, +24664=>12676, +24667=>12677, +24668=>12678, +24670=>12679, +24671=>12680, +24672=>12681, +24673=>12682, +24677=>12683, +24678=>12684, +24686=>12685, +24689=>12686, +24690=>12687, +24692=>12688, +24693=>12689, +24695=>12690, +24702=>12691, +24704=>12692, +24705=>12693, +24706=>12694, +24709=>12695, +24710=>12696, +24711=>12697, +24712=>12698, +24714=>12699, +24715=>12700, +24718=>12701, +24719=>12702, +24720=>12703, +24721=>12704, +24723=>12705, +24725=>12706, +24727=>12707, +24728=>12708, +24729=>12709, +24732=>12710, +24734=>12711, +24737=>12712, +24738=>12713, +24740=>12714, +24741=>12715, +24743=>12716, +24745=>12717, +24746=>12718, +24750=>12719, +24752=>12720, +24755=>12721, +24759=>12722, +24761=>12723, +24762=>12724, +24765=>12725, +24766=>12726, +24767=>12727, +24768=>12728, +24769=>12729, +24770=>12730, +24771=>12731, +24772=>12732, +24775=>12733, +24776=>12734, +24777=>12735, +24780=>12736, +24781=>12737, +24782=>12738, +24783=>12739, +24784=>12740, +24786=>12741, +24787=>12742, +24788=>12743, +24790=>12744, +24791=>12745, +24793=>12746, +24795=>12747, +24798=>12748, +24802=>12749, +24803=>12750, +24804=>12751, +24805=>12752, +24810=>12753, +24821=>12754, +24823=>12755, +24824=>12756, +24828=>12757, +24829=>12758, +24830=>12759, +24831=>12760, +24834=>12761, +24835=>12762, +24836=>12763, +24837=>12764, +24839=>12765, +24842=>12766, +24843=>12767, +24844=>12768, +24848=>12769, +24849=>12770, +24850=>12771, +24851=>12772, +24852=>12773, +24854=>12774, +24855=>12775, +24856=>12776, +24857=>12777, +24861=>12778, +24862=>12779, +24865=>12780, +24866=>12781, +24869=>12782, +24872=>12783, +24873=>12784, +24874=>12785, +24876=>12786, +24877=>12787, +24878=>12788, +24879=>12789, +24880=>12790, +24881=>12791, +24882=>12792, +24883=>12793, +24885=>12794, +24886=>12795, +24888=>12796, +24889=>12797, +24890=>12798, +24891=>12799, +24892=>12800, +24893=>12801, +24896=>12802, +24897=>12803, +24898=>12804, +24899=>12805, +24900=>12806, +24901=>12807, +24902=>12808, +24903=>12809, +24905=>12810, +24909=>12811, +24911=>12812, +24912=>12813, +24914=>12814, +24915=>12815, +24916=>12816, +24918=>12817, +24919=>12818, +24921=>12819, +24923=>12820, +24924=>12821, +24926=>12822, +24928=>12823, +24929=>12824, +24933=>12825, +24934=>12826, +24937=>12827, +24940=>12828, +24941=>12829, +24943=>12830, +24945=>12831, +24946=>12832, +24948=>12833, +24952=>12834, +24953=>12835, +24954=>12836, +24955=>12837, +24956=>12838, +24957=>12839, +24958=>12840, +24959=>12841, +24960=>12842, +24961=>12843, +24963=>12844, +24964=>12845, +24965=>12846, +24966=>12847, +24967=>12848, +24968=>12849, +24969=>12850, +24972=>12851, +24973=>12852, +24975=>12853, +24979=>12854, +24981=>12855, +24982=>12856, +24983=>12857, +24984=>12858, +24985=>12859, +24987=>12860, +24988=>12861, +24990=>12862, +24991=>12863, +24992=>12864, +24993=>12865, +24994=>12866, +24995=>12867, +24997=>12868, +24998=>12869, +25002=>12870, +25005=>12871, +25007=>12872, +25008=>12873, +25009=>12874, +25011=>12875, +25012=>12876, +25013=>12877, +25016=>12878, +25017=>12879, +25018=>12880, +25019=>12881, +25020=>12882, +25021=>12883, +25023=>12884, +25024=>12885, +25025=>12886, +25027=>12887, +25028=>12888, +25029=>12889, +25030=>12890, +25037=>12891, +25038=>12892, +25039=>12893, +25040=>12894, +25043=>12895, +25045=>12896, +25046=>12897, +25047=>12898, +25048=>12899, +25049=>12900, +25050=>12901, +25051=>12902, +25052=>12903, +25053=>12904, +25056=>12905, +25057=>12906, +25058=>12907, +25060=>12908, +25061=>12909, +25063=>12910, +25065=>12911, +25066=>12912, +25067=>12913, +25068=>12914, +25069=>12915, +25070=>12916, +25071=>12917, +25072=>12918, +25073=>12919, +25075=>12920, +25076=>12921, +25081=>12922, +25083=>12923, +25085=>12924, +25089=>12925, +25090=>12926, +25091=>12927, +25092=>12928, +25093=>12929, +25097=>12930, +25107=>12931, +25113=>12932, +25116=>12933, +25117=>12934, +25118=>12935, +25120=>12936, +25123=>12937, +25126=>12938, +25128=>12939, +25129=>12940, +25131=>12941, +25133=>12942, +25135=>12943, +25137=>12944, +25141=>12945, +12094=>12946, +25142=>12946, +25144=>12947, +25145=>12948, +25146=>12949, +25147=>12950, +25148=>12951, +25154=>12952, +25156=>12953, +25157=>12954, +25158=>12955, +25162=>12956, +25167=>12957, +25168=>12958, +25173=>12959, +25174=>12960, +25175=>12961, +25177=>12962, +25178=>12963, +25180=>12964, +25181=>12965, +25182=>12966, +25183=>12967, +25184=>12968, +25185=>12969, +25186=>12970, +25188=>12971, +25189=>12972, +25192=>12973, +25201=>12974, +25202=>12975, +25204=>12976, +25205=>12977, +25207=>12978, +25208=>12979, +25210=>12980, +25211=>12981, +25213=>12982, +25217=>12983, +25218=>12984, +25219=>12985, +25221=>12986, +25222=>12987, +25223=>12988, +25224=>12989, +25227=>12990, +25228=>12991, +25229=>12992, +25230=>12993, +25231=>12994, +25232=>12995, +25236=>12996, +25241=>12997, +25244=>12998, +25245=>12999, +25246=>13000, +25251=>13001, +25254=>13002, +25255=>13003, +25257=>13004, +25258=>13005, +25261=>13006, +25262=>13007, +25263=>13008, +25264=>13009, +25266=>13010, +25267=>13011, +25268=>13012, +25270=>13013, +25271=>13014, +25272=>13015, +25274=>13016, +25278=>13017, +25280=>13018, +25281=>13019, +25283=>13020, +25291=>13021, +25295=>13022, +25297=>13023, +25301=>13024, +25309=>13025, +25310=>13026, +25312=>13027, +25313=>13028, +25316=>13029, +25322=>13030, +25323=>13031, +25328=>13032, +25330=>13033, +25333=>13034, +25336=>13035, +25337=>13036, +25338=>13037, +25339=>13038, +25344=>13039, +25347=>13040, +25348=>13041, +25349=>13042, +25350=>13043, +25354=>13044, +25355=>13045, +25356=>13046, +25357=>13047, +25359=>13048, +25360=>13049, +25362=>13050, +25363=>13051, +25364=>13052, +25365=>13053, +25367=>13054, +25368=>13055, +25369=>13056, +25372=>13057, +25382=>13058, +25383=>13059, +25385=>13060, +25388=>13061, +25389=>13062, +25390=>13063, +25392=>13064, +25393=>13065, +25395=>13066, +25396=>13067, +25397=>13068, +25398=>13069, +25399=>13070, +25400=>13071, +25403=>13072, +25404=>13073, +25407=>13074, +25408=>13075, +25409=>13076, +25412=>13077, +25415=>13078, +25416=>13079, +25418=>13080, +25425=>13081, +25426=>13082, +25427=>13083, +25428=>13084, +25430=>13085, +25431=>13086, +25432=>13087, +25433=>13088, +25434=>13089, +25435=>13090, +25436=>13091, +25437=>13092, +25440=>13093, +25444=>13094, +25445=>13095, +25446=>13096, +25450=>13097, +25452=>13098, +25455=>13099, +25456=>13100, +25459=>13101, +25460=>13102, +25461=>13103, +25464=>13104, +25465=>13105, +25468=>13106, +25469=>13107, +25470=>13108, +25471=>13109, +25473=>13110, +25477=>13111, +25478=>13112, +25483=>13113, +25485=>13114, +25489=>13115, +25491=>13116, +25492=>13117, +25493=>13118, +25495=>13119, +25497=>13120, +25498=>13121, +25499=>13122, +25500=>13123, +25501=>13124, +25502=>13125, +25503=>13126, +25505=>13127, +25508=>13128, +25510=>13129, +25515=>13130, +25519=>13131, +25521=>13132, +25522=>13133, +25525=>13134, +25526=>13135, +25529=>13136, +25531=>13137, +25533=>13138, +25535=>13139, +25537=>13140, +25538=>13141, +25539=>13142, +25541=>13143, +25543=>13144, +25544=>13145, +25546=>13146, +25547=>13147, +25548=>13148, +25553=>13149, +25555=>13150, +25556=>13151, +25557=>13152, +25559=>13153, +25560=>13154, +25561=>13155, +25563=>13156, +25564=>13157, +25565=>13158, +25567=>13159, +25570=>13160, +25572=>13161, +25573=>13162, +25574=>13163, +25575=>13164, +25576=>13165, +25579=>13166, +25580=>13167, +25583=>13168, +25584=>13169, +25585=>13170, +25587=>13171, +25589=>13172, +25591=>13173, +25593=>13174, +25594=>13175, +25595=>13176, +25596=>13177, +25598=>13178, +25603=>13179, +25604=>13180, +25606=>13181, +25607=>13182, +25608=>13183, +25609=>13184, +25610=>13185, +25614=>13186, +25617=>13187, +25618=>13188, +25621=>13189, +25622=>13190, +25624=>13191, +25625=>13192, +25626=>13193, +25629=>13194, +25631=>13195, +25634=>13196, +25635=>13197, +25636=>13198, +25637=>13199, +25639=>13200, +25640=>13201, +25641=>13202, +25643=>13203, +25646=>13204, +25647=>13205, +25648=>13206, +25649=>13207, +25650=>13208, +25651=>13209, +25653=>13210, +25655=>13211, +25656=>13212, +25657=>13213, +25659=>13214, +25660=>13215, +25662=>13216, +25664=>13217, +25666=>13218, +25667=>13219, +25673=>13220, +25675=>13221, +25676=>13222, +25677=>13223, +25678=>13224, +25679=>13225, +25680=>13226, +25683=>13227, +25685=>13228, +25686=>13229, +25687=>13230, +25689=>13231, +25690=>13232, +25691=>13233, +25693=>13234, +25696=>13235, +25697=>13236, +25698=>13237, +25699=>13238, +25700=>13239, +25701=>13240, +25702=>13241, +25704=>13242, +25706=>13243, +25707=>13244, +25708=>13245, +25710=>13246, +25712=>13247, +25713=>13248, +25714=>13249, +25716=>13250, +25717=>13251, +25719=>13252, +25724=>13253, +25725=>13254, +25726=>13255, +25727=>13256, +25728=>13257, +25729=>13258, +25731=>13259, +25734=>13260, +25737=>13261, +25738=>13262, +25739=>13263, +25740=>13264, +25741=>13265, +25742=>13266, +25743=>13267, +25744=>13268, +25748=>13269, +25751=>13270, +25752=>13271, +25754=>13272, +25755=>13273, +25756=>13274, +25757=>13275, +25760=>13276, +25761=>13277, +25762=>13278, +25766=>13279, +25767=>13280, +25768=>13281, +25770=>13282, +25775=>13283, +25777=>13284, +25780=>13285, +25782=>13286, +25785=>13287, +25789=>13288, +25795=>13289, +25798=>13290, +25800=>13291, +25801=>13292, +25804=>13293, +25807=>13294, +25809=>13295, +25811=>13296, +25813=>13297, +25814=>13298, +25817=>13299, +25819=>13300, +25820=>13301, +25821=>13302, +25823=>13303, +25825=>13304, +25827=>13305, +25829=>13306, +25831=>13307, +25832=>13308, +25833=>13309, +25834=>13310, +25835=>13311, +25837=>13312, +25838=>13313, +25843=>13314, +25845=>13315, +25846=>13316, +25848=>13317, +25849=>13318, +25853=>13319, +25855=>13320, +25857=>13321, +25858=>13322, +25859=>13323, +25861=>13324, +25863=>13325, +25864=>13326, +25866=>13327, +25867=>13328, +25868=>13329, +25869=>13330, +25870=>13331, +25872=>13332, +25873=>13333, +25875=>13334, +25877=>13335, +25879=>13336, +25882=>13337, +25884=>13338, +25886=>13339, +25887=>13340, +25888=>13341, +25889=>13342, +25894=>13343, +25895=>13344, +25896=>13345, +25897=>13346, +25901=>13347, +25904=>13348, +25905=>13349, +25906=>13350, +25907=>13351, +25911=>13352, +25914=>13353, +25916=>13354, +25917=>13355, +25920=>13356, +25921=>13357, +25922=>13358, +25923=>13359, +25924=>13360, +25926=>13361, +25927=>13362, +25930=>13363, +25931=>13364, +25933=>13365, +25934=>13366, +25936=>13367, +25938=>13368, +25939=>13369, +25940=>13370, +25944=>13371, +25946=>13372, +25948=>13373, +25951=>13374, +25952=>13375, +25953=>13376, +25956=>13377, +25957=>13378, +25959=>13379, +25960=>13380, +25961=>13381, +25962=>13382, +25965=>13383, +25966=>13384, +25967=>13385, +25969=>13386, +25971=>13387, +25974=>13388, +25977=>13389, +25978=>13390, +25979=>13391, +25980=>13392, +25981=>13393, +25982=>13394, +25983=>13395, +25984=>13396, +25985=>13397, +25988=>13398, +25989=>13399, +25990=>13400, +25992=>13401, +25993=>13402, +25994=>13403, +25997=>13404, +25998=>13405, +25999=>13406, +26002=>13407, +26004=>13408, +26006=>13409, +26008=>13410, +26010=>13411, +26013=>13412, +26014=>13413, +26016=>13414, +26018=>13415, +26019=>13416, +26022=>13417, +26024=>13418, +26026=>13419, +26030=>13420, +26033=>13421, +26034=>13422, +26035=>13423, +26036=>13424, +26037=>13425, +26038=>13426, +26040=>13427, +26042=>13428, +26043=>13429, +26046=>13430, +26047=>13431, +26048=>13432, +26050=>13433, +26055=>13434, +26056=>13435, +26057=>13436, +26058=>13437, +26061=>13438, +26064=>13439, +26065=>13440, +26067=>13441, +26068=>13442, +26069=>13443, +26072=>13444, +26073=>13445, +26074=>13446, +26075=>13447, +26076=>13448, +26077=>13449, +26078=>13450, +26079=>13451, +26081=>13452, +26083=>13453, +26084=>13454, +26090=>13455, +26091=>13456, +26098=>13457, +26099=>13458, +26100=>13459, +26101=>13460, +26104=>13461, +26105=>13462, +26107=>13463, +26108=>13464, +26109=>13465, +26110=>13466, +26111=>13467, +26113=>13468, +26116=>13469, +26117=>13470, +26119=>13471, +26120=>13472, +26121=>13473, +26123=>13474, +26125=>13475, +26128=>13476, +26129=>13477, +26130=>13478, +26134=>13479, +26135=>13480, +26136=>13481, +26138=>13482, +26139=>13483, +26140=>13484, +26142=>13485, +26145=>13486, +26146=>13487, +26147=>13488, +26148=>13489, +26150=>13490, +26153=>13491, +26154=>13492, +26155=>13493, +26156=>13494, +26158=>13495, +26160=>13496, +26162=>13497, +26163=>13498, +26167=>13499, +26168=>13500, +26169=>13501, +26170=>13502, +26171=>13503, +26173=>13504, +26175=>13505, +26176=>13506, +26180=>13507, +26181=>13508, +26182=>13509, +26183=>13510, +26184=>13511, +26185=>13512, +26186=>13513, +26189=>13514, +26190=>13515, +26192=>13516, +26193=>13517, +26200=>13518, +26201=>13519, +26203=>13520, +26204=>13521, +26206=>13522, +26208=>13523, +26210=>13524, +26211=>13525, +26213=>13526, +26215=>13527, +26217=>13528, +26218=>13529, +26219=>13530, +26220=>13531, +26221=>13532, +26225=>13533, +26226=>13534, +26227=>13535, +26229=>13536, +26232=>13537, +26233=>13538, +26235=>13539, +26236=>13540, +26237=>13541, +26239=>13542, +26240=>13543, +26241=>13544, +26243=>13545, +26245=>13546, +26246=>13547, +26250=>13548, +26251=>13549, +26253=>13550, +26254=>13551, +26255=>13552, +26256=>13553, +26258=>13554, +26259=>13555, +26260=>13556, +26261=>13557, +26264=>13558, +26265=>13559, +26266=>13560, +26267=>13561, +26268=>13562, +26270=>13563, +26271=>13564, +26272=>13565, +26273=>13566, +26275=>13567, +26276=>13568, +26277=>13569, +26278=>13570, +26281=>13571, +26282=>13572, +26284=>13573, +26285=>13574, +26287=>13575, +26288=>13576, +26289=>13577, +26290=>13578, +26291=>13579, +26293=>13580, +26294=>13581, +26295=>13582, +26296=>13583, +26298=>13584, +26299=>13585, +26300=>13586, +26301=>13587, +26303=>13588, +26304=>13589, +26305=>13590, +26306=>13591, +26307=>13592, +26309=>13593, +26312=>13594, +26314=>13595, +26315=>13596, +26316=>13597, +26317=>13598, +26318=>13599, +26319=>13600, +26320=>13601, +26321=>13602, +26322=>13603, +26323=>13604, +26324=>13605, +26325=>13606, +26327=>13607, +26328=>13608, +26330=>13609, +26334=>13610, +26335=>13611, +26337=>13612, +26338=>13613, +26339=>13614, +26340=>13615, +26341=>13616, +26343=>13617, +26344=>13618, +26346=>13619, +26347=>13620, +26349=>13621, +26350=>13622, +26351=>13623, +26353=>13624, +26357=>13625, +26358=>13626, +26362=>13627, +26363=>13628, +26365=>13629, +26369=>13630, +26370=>13631, +26372=>13632, +26373=>13633, +26374=>13634, +26375=>13635, +26380=>13636, +26382=>13637, +26383=>13638, +26385=>13639, +26386=>13640, +26387=>13641, +26390=>13642, +26392=>13643, +26393=>13644, +26394=>13645, +26396=>13646, +26398=>13647, +26400=>13648, +26401=>13649, +26402=>13650, +26403=>13651, +26404=>13652, +26405=>13653, +26409=>13654, +26414=>13655, +26416=>13656, +26418=>13657, +26419=>13658, +26422=>13659, +26423=>13660, +26424=>13661, +26425=>13662, +26427=>13663, +26428=>13664, +26430=>13665, +26431=>13666, +26433=>13667, +26436=>13668, +26437=>13669, +26439=>13670, +26442=>13671, +26443=>13672, +26445=>13673, +26450=>13674, +26452=>13675, +26453=>13676, +26455=>13677, +26456=>13678, +26457=>13679, +26458=>13680, +26459=>13681, +26461=>13682, +26466=>13683, +26467=>13684, +26468=>13685, +26470=>13686, +26471=>13687, +26475=>13688, +26476=>13689, +26478=>13690, +26484=>13691, +26486=>13692, +26488=>13693, +26489=>13694, +26490=>13695, +26491=>13696, +26493=>13697, +26496=>13698, +26498=>13699, +26499=>13700, +26501=>13701, +26502=>13702, +26504=>13703, +26506=>13704, +26508=>13705, +26509=>13706, +26510=>13707, +26511=>13708, +26513=>13709, +26514=>13710, +26515=>13711, +26516=>13712, +26518=>13713, +26521=>13714, +26523=>13715, +26527=>13716, +26528=>13717, +26529=>13718, +26532=>13719, +26534=>13720, +26537=>13721, +26540=>13722, +26542=>13723, +26545=>13724, +26546=>13725, +26548=>13726, +26553=>13727, +26554=>13728, +26555=>13729, +26556=>13730, +26557=>13731, +26558=>13732, +26559=>13733, +26560=>13734, +26562=>13735, +26565=>13736, +26566=>13737, +26567=>13738, +26568=>13739, +26569=>13740, +26570=>13741, +26571=>13742, +26572=>13743, +26573=>13744, +26574=>13745, +26581=>13746, +26582=>13747, +26583=>13748, +26587=>13749, +26591=>13750, +26593=>13751, +26595=>13752, +26596=>13753, +26598=>13754, +26599=>13755, +26600=>13756, +26602=>13757, +26603=>13758, +26605=>13759, +26606=>13760, +26610=>13761, +26613=>13762, +26614=>13763, +26615=>13764, +26616=>13765, +26617=>13766, +26618=>13767, +26619=>13768, +26620=>13769, +26622=>13770, +26625=>13771, +26626=>13772, +26627=>13773, +26628=>13774, +26630=>13775, +26637=>13776, +26640=>13777, +26642=>13778, +26644=>13779, +26645=>13780, +26648=>13781, +26649=>13782, +26650=>13783, +26651=>13784, +26652=>13785, +26654=>13786, +26655=>13787, +26656=>13788, +26658=>13789, +26659=>13790, +26660=>13791, +26661=>13792, +26662=>13793, +26663=>13794, +26664=>13795, +26667=>13796, +26668=>13797, +26669=>13798, +26670=>13799, +26671=>13800, +26672=>13801, +26673=>13802, +26676=>13803, +26677=>13804, +26678=>13805, +26682=>13806, +26683=>13807, +26687=>13808, +26695=>13809, +26699=>13810, +26701=>13811, +26703=>13812, +26706=>13813, +26710=>13814, +26711=>13815, +26712=>13816, +26713=>13817, +26714=>13818, +26715=>13819, +26716=>13820, +26717=>13821, +26718=>13822, +26719=>13823, +26730=>13824, +26732=>13825, +26733=>13826, +26734=>13827, +26735=>13828, +26736=>13829, +26737=>13830, +26738=>13831, +26739=>13832, +26741=>13833, +26744=>13834, +26745=>13835, +26746=>13836, +26747=>13837, +26748=>13838, +26749=>13839, +26750=>13840, +26751=>13841, +26752=>13842, +26754=>13843, +26756=>13844, +26759=>13845, +26760=>13846, +26761=>13847, +26762=>13848, +26763=>13849, +26764=>13850, +26765=>13851, +26766=>13852, +26768=>13853, +26769=>13854, +26770=>13855, +26772=>13856, +26773=>13857, +26774=>13858, +26777=>13859, +26778=>13860, +26779=>13861, +26780=>13862, +26782=>13863, +26784=>13864, +26785=>13865, +26787=>13866, +26788=>13867, +26789=>13868, +26793=>13869, +26794=>13870, +26795=>13871, +26796=>13872, +26798=>13873, +26801=>13874, +26802=>13875, +26804=>13876, +26806=>13877, +26807=>13878, +26808=>13879, +26809=>13880, +26810=>13881, +26811=>13882, +26812=>13883, +26813=>13884, +26814=>13885, +26815=>13886, +26817=>13887, +26819=>13888, +26820=>13889, +26821=>13890, +26822=>13891, +26823=>13892, +26824=>13893, +26826=>13894, +26828=>13895, +26830=>13896, +26831=>13897, +26832=>13898, +26833=>13899, +26835=>13900, +26836=>13901, +26841=>13902, +26843=>13903, +26844=>13904, +26845=>13905, +26846=>13906, +26849=>13907, +26850=>13908, +26852=>13909, +26853=>13910, +26854=>13911, +26856=>13912, +26857=>13913, +26858=>13914, +26859=>13915, +26860=>13916, +26861=>13917, +26863=>13918, +26866=>13919, +26867=>13920, +26868=>13921, +26870=>13922, +26871=>13923, +26872=>13924, +26875=>13925, +26877=>13926, +26878=>13927, +26879=>13928, +26880=>13929, +26882=>13930, +26883=>13931, +26884=>13932, +26886=>13933, +26887=>13934, +26888=>13935, +26889=>13936, +26890=>13937, +26892=>13938, +26897=>13939, +26899=>13940, +26900=>13941, +26901=>13942, +26902=>13943, +26903=>13944, +26904=>13945, +26905=>13946, +26906=>13947, +26907=>13948, +26908=>13949, +26909=>13950, +26910=>13951, +26913=>13952, +26914=>13953, +26915=>13954, +26917=>13955, +26918=>13956, +26919=>13957, +26920=>13958, +26921=>13959, +26922=>13960, +26923=>13961, +26924=>13962, +26926=>13963, +26927=>13964, +26929=>13965, +26930=>13966, +26931=>13967, +26933=>13968, +26934=>13969, +26935=>13970, +26936=>13971, +26938=>13972, +26939=>13973, +26940=>13974, +26942=>13975, +26944=>13976, +26945=>13977, +26947=>13978, +26948=>13979, +26949=>13980, +26950=>13981, +26951=>13982, +26952=>13983, +26953=>13984, +26955=>13985, +26956=>13986, +26957=>13987, +26958=>13988, +26959=>13989, +26960=>13990, +26961=>13991, +26962=>13992, +26965=>13993, +26966=>13994, +26968=>13995, +26969=>13996, +26971=>13997, +26972=>13998, +26975=>13999, +26977=>14000, +26978=>14001, +26980=>14002, +26981=>14003, +26983=>14004, +26985=>14005, +26986=>14006, +26988=>14007, +26991=>14008, +26992=>14009, +26994=>14010, +26995=>14011, +26996=>14012, +26998=>14013, +27002=>14014, +27003=>14015, +27005=>14016, +27006=>14017, +27007=>14018, +27009=>14019, +27011=>14020, +27013=>14021, +27018=>14022, +27019=>14023, +27020=>14024, +27022=>14025, +27023=>14026, +27024=>14027, +27025=>14028, +27026=>14029, +27027=>14030, +27030=>14031, +27031=>14032, +27033=>14033, +27034=>14034, +27037=>14035, +27038=>14036, +27039=>14037, +27040=>14038, +27041=>14039, +27042=>14040, +27043=>14041, +27044=>14042, +27045=>14043, +27046=>14044, +27049=>14045, +27052=>14046, +27055=>14047, +27056=>14048, +27058=>14049, +27059=>14050, +27061=>14051, +27062=>14052, +27064=>14053, +27065=>14054, +27066=>14055, +27068=>14056, +27069=>14057, +27070=>14058, +27072=>14059, +27074=>14060, +27075=>14061, +27076=>14062, +27077=>14063, +27078=>14064, +27079=>14065, +27080=>14066, +27081=>14067, +27087=>14068, +27089=>14069, +27090=>14070, +27091=>14071, +27093=>14072, +27094=>14073, +27095=>14074, +27096=>14075, +27097=>14076, +27098=>14077, +27100=>14078, +27101=>14079, +27102=>14080, +27105=>14081, +27106=>14082, +27107=>14083, +27108=>14084, +27109=>14085, +27110=>14086, +27112=>14087, +27113=>14088, +27114=>14089, +27115=>14090, +27116=>14091, +27118=>14092, +27119=>14093, +27120=>14094, +27121=>14095, +27124=>14096, +27125=>14097, +27126=>14098, +27127=>14099, +27128=>14100, +27129=>14101, +27130=>14102, +27131=>14103, +27132=>14104, +27134=>14105, +27136=>14106, +27139=>14107, +27140=>14108, +27142=>14109, +27143=>14110, +27144=>14111, +27145=>14112, +27147=>14113, +27148=>14114, +27149=>14115, +27150=>14116, +27151=>14117, +27152=>14118, +27153=>14119, +27154=>14120, +27156=>14121, +27157=>14122, +27158=>14123, +27162=>14124, +27163=>14125, +27164=>14126, +27165=>14127, +27168=>14128, +27170=>14129, +27172=>14130, +27173=>14131, +27174=>14132, +27175=>14133, +27177=>14134, +27179=>14135, +27180=>14136, +27181=>14137, +27182=>14138, +27184=>14139, +27186=>14140, +27187=>14141, +27188=>14142, +27190=>14143, +27191=>14144, +27195=>14145, +27196=>14146, +27199=>14147, +27200=>14148, +27201=>14149, +27202=>14150, +27203=>14151, +27205=>14152, +27206=>14153, +27209=>14154, +27210=>14155, +27212=>14156, +27213=>14157, +27214=>14158, +27215=>14159, +27217=>14160, +27218=>14161, +27219=>14162, +27220=>14163, +27221=>14164, +27222=>14165, +27223=>14166, +27226=>14167, +27228=>14168, +27229=>14169, +27230=>14170, +27232=>14171, +27235=>14172, +27236=>14173, +27238=>14174, +27239=>14175, +27240=>14176, +27241=>14177, +27242=>14178, +27243=>14179, +27244=>14180, +27245=>14181, +27246=>14182, +27247=>14183, +27248=>14184, +27250=>14185, +27251=>14186, +27252=>14187, +27253=>14188, +27254=>14189, +27255=>14190, +27256=>14191, +27258=>14192, +27259=>14193, +27261=>14194, +27262=>14195, +27263=>14196, +27265=>14197, +27266=>14198, +27267=>14199, +27269=>14200, +27270=>14201, +27271=>14202, +27272=>14203, +27274=>14204, +27275=>14205, +27276=>14206, +27277=>14207, +27279=>14208, +27282=>14209, +27283=>14210, +27285=>14211, +27286=>14212, +27288=>14213, +27289=>14214, +27290=>14215, +27291=>14216, +27293=>14217, +27294=>14218, +27295=>14219, +27297=>14220, +27300=>14221, +27301=>14222, +27302=>14223, +27303=>14224, +27304=>14225, +27306=>14226, +27309=>14227, +27310=>14228, +27312=>14229, +27313=>14230, +27314=>14231, +27316=>14232, +27317=>14233, +27318=>14234, +27319=>14235, +27321=>14236, +27322=>14237, +27324=>14238, +27325=>14239, +27326=>14240, +27327=>14241, +27328=>14242, +27329=>14243, +27330=>14244, +27332=>14245, +27333=>14246, +27334=>14247, +27335=>14248, +27336=>14249, +27337=>14250, +27338=>14251, +27339=>14252, +27340=>14253, +27341=>14254, +27342=>14255, +27343=>14256, +27344=>14257, +27345=>14258, +27346=>14259, +27348=>14260, +27349=>14261, +27350=>14262, +27351=>14263, +27352=>14264, +27353=>14265, +27356=>14266, +27360=>14267, +27361=>14268, +27362=>14269, +27363=>14270, +27364=>14271, +27365=>14272, +27366=>14273, +27369=>14274, +27371=>14275, +27373=>14276, +27374=>14277, +27375=>14278, +27376=>14279, +27377=>14280, +27378=>14281, +27380=>14282, +27381=>14283, +27382=>14284, +27383=>14285, +27385=>14286, +27386=>14287, +27388=>14288, +27389=>14289, +27390=>14290, +27391=>14291, +27392=>14292, +27393=>14293, +27394=>14294, +27395=>14295, +27397=>14296, +27398=>14297, +27399=>14298, +27400=>14299, +27401=>14300, +27403=>14301, +27404=>14302, +27405=>14303, +27406=>14304, +27408=>14305, +27409=>14306, +27411=>14307, +27412=>14308, +27413=>14309, +27415=>14310, +27416=>14311, +27417=>14312, +27418=>14313, +27419=>14314, +27420=>14315, +27421=>14316, +27423=>14317, +27429=>14318, +27430=>14319, +27432=>14320, +27433=>14321, +27434=>14322, +27435=>14323, +27436=>14324, +27437=>14325, +27438=>14326, +27439=>14327, +27440=>14328, +27441=>14329, +27443=>14330, +27444=>14331, +27445=>14332, +27446=>14333, +27448=>14334, +27451=>14335, +27452=>14336, +27455=>14337, +27456=>14338, +27457=>14339, +27458=>14340, +27460=>14341, +27461=>14342, +27464=>14343, +27466=>14344, +27467=>14345, +27469=>14346, +27470=>14347, +27471=>14348, +27473=>14349, +27474=>14350, +27475=>14351, +27476=>14352, +27477=>14353, +27478=>14354, +27479=>14355, +27480=>14356, +27482=>14357, +27483=>14358, +27484=>14359, +27485=>14360, +27486=>14361, +27488=>14362, +27496=>14363, +27497=>14364, +27499=>14365, +27500=>14366, +27501=>14367, +27502=>14368, +27503=>14369, +27504=>14370, +27505=>14371, +27507=>14372, +27508=>14373, +27509=>14374, +27510=>14375, +27514=>14376, +27517=>14377, +27518=>14378, +27519=>14379, +27520=>14380, +27525=>14381, +27528=>14382, +27532=>14383, +27534=>14384, +27535=>14385, +27536=>14386, +27537=>14387, +27540=>14388, +27541=>14389, +27543=>14390, +27545=>14391, +27548=>14392, +27549=>14393, +27551=>14394, +27552=>14395, +27554=>14396, +27555=>14397, +27557=>14398, +27558=>14399, +27559=>14400, +27560=>14401, +27561=>14402, +27564=>14403, +27565=>14404, +27568=>14405, +27569=>14406, +27574=>14407, +27576=>14408, +27577=>14409, +27580=>14410, +27581=>14411, +27582=>14412, +27584=>14413, +27587=>14414, +27588=>14415, +27591=>14416, +27592=>14417, +27593=>14418, +27594=>14419, +27596=>14420, +27598=>14421, +27600=>14422, +27601=>14423, +27608=>14424, +27610=>14425, +27612=>14426, +27613=>14427, +27614=>14428, +27615=>14429, +27616=>14430, +27618=>14431, +27619=>14432, +27620=>14433, +27621=>14434, +27622=>14435, +27623=>14436, +27624=>14437, +27625=>14438, +27628=>14439, +27629=>14440, +27630=>14441, +27632=>14442, +27633=>14443, +27634=>14444, +27636=>14445, +27638=>14446, +27639=>14447, +27640=>14448, +27642=>14449, +27643=>14450, +27644=>14451, +27646=>14452, +27648=>14453, +27649=>14454, +27650=>14455, +27651=>14456, +27652=>14457, +27657=>14458, +27658=>14459, +27659=>14460, +27662=>14461, +27666=>14462, +27671=>14463, +27676=>14464, +27677=>14465, +27678=>14466, +27680=>14467, +27685=>14468, +27693=>14469, +27697=>14470, +27699=>14471, +27702=>14472, +27703=>14473, +27705=>14474, +27706=>14475, +27707=>14476, +27708=>14477, +27710=>14478, +27711=>14479, +27715=>14480, +27716=>14481, +27717=>14482, +27720=>14483, +27723=>14484, +27724=>14485, +27725=>14486, +27726=>14487, +27727=>14488, +27729=>14489, +27730=>14490, +27731=>14491, +27734=>14492, +27736=>14493, +27737=>14494, +27738=>14495, +27746=>14496, +27747=>14497, +27749=>14498, +27750=>14499, +27751=>14500, +27755=>14501, +27756=>14502, +27757=>14503, +27758=>14504, +27759=>14505, +27761=>14506, +27763=>14507, +27765=>14508, +27767=>14509, +27768=>14510, +27770=>14511, +27771=>14512, +27772=>14513, +27775=>14514, +27776=>14515, +27780=>14516, +27783=>14517, +27786=>14518, +27787=>14519, +27789=>14520, +27790=>14521, +27793=>14522, +27794=>14523, +27797=>14524, +27798=>14525, +27799=>14526, +27800=>14527, +27802=>14528, +27804=>14529, +27805=>14530, +27806=>14531, +27808=>14532, +27810=>14533, +27816=>14534, +27820=>14535, +27823=>14536, +27824=>14537, +27828=>14538, +27829=>14539, +27830=>14540, +27831=>14541, +27834=>14542, +27840=>14543, +27841=>14544, +27842=>14545, +27843=>14546, +27846=>14547, +27847=>14548, +27848=>14549, +27851=>14550, +27853=>14551, +27854=>14552, +27855=>14553, +27857=>14554, +27858=>14555, +27864=>14556, +27865=>14557, +27866=>14558, +27868=>14559, +27869=>14560, +27871=>14561, +27876=>14562, +27878=>14563, +27879=>14564, +27881=>14565, +27884=>14566, +27885=>14567, +27890=>14568, +27892=>14569, +27897=>14570, +27903=>14571, +27904=>14572, +27906=>14573, +27907=>14574, +27909=>14575, +27910=>14576, +27912=>14577, +27913=>14578, +27914=>14579, +27917=>14580, +27919=>14581, +27920=>14582, +27921=>14583, +27923=>14584, +27924=>14585, +27925=>14586, +27926=>14587, +27928=>14588, +27932=>14589, +27933=>14590, +27935=>14591, +27936=>14592, +27937=>14593, +27938=>14594, +27939=>14595, +27940=>14596, +27942=>14597, +27944=>14598, +27945=>14599, +27948=>14600, +27949=>14601, +27951=>14602, +27952=>14603, +27956=>14604, +27958=>14605, +27959=>14606, +27960=>14607, +27962=>14608, +27967=>14609, +27968=>14610, +27970=>14611, +27972=>14612, +27977=>14613, +27980=>14614, +27984=>14615, +27989=>14616, +27990=>14617, +27991=>14618, +27992=>14619, +27995=>14620, +27997=>14621, +27999=>14622, +28001=>14623, +28002=>14624, +28004=>14625, +28005=>14626, +28007=>14627, +28008=>14628, +28011=>14629, +28012=>14630, +28013=>14631, +28016=>14632, +28017=>14633, +28018=>14634, +28019=>14635, +28021=>14636, +28022=>14637, +28026=>14638, +28027=>14639, +28029=>14640, +28030=>14641, +28031=>14642, +28032=>14643, +28033=>14644, +28035=>14645, +28036=>14646, +28038=>14647, +28042=>14648, +28043=>14649, +28045=>14650, +28047=>14651, +28048=>14652, +28050=>14653, +28054=>14654, +28055=>14655, +28056=>14656, +28057=>14657, +28058=>14658, +28060=>14659, +28066=>14660, +28069=>14661, +28076=>14662, +28077=>14663, +28080=>14664, +28081=>14665, +28083=>14666, +28084=>14667, +28086=>14668, +28087=>14669, +28089=>14670, +28090=>14671, +28091=>14672, +28092=>14673, +28093=>14674, +28094=>14675, +28097=>14676, +28098=>14677, +28099=>14678, +28104=>14679, +28105=>14680, +28106=>14681, +28109=>14682, +28110=>14683, +28111=>14684, +28112=>14685, +28114=>14686, +28115=>14687, +28116=>14688, +28117=>14689, +28119=>14690, +28122=>14691, +28123=>14692, +28124=>14693, +28127=>14694, +28130=>14695, +28131=>14696, +28133=>14697, +28135=>14698, +28136=>14699, +28137=>14700, +28141=>14701, +28143=>14702, +28144=>14703, +28146=>14704, +28148=>14705, +28152=>14706, +28157=>14707, +28158=>14708, +28159=>14709, +28160=>14710, +28161=>14711, +28162=>14712, +28163=>14713, +28164=>14714, +28166=>14715, +28167=>14716, +28168=>14717, +28169=>14718, +28171=>14719, +28175=>14720, +28178=>14721, +28179=>14722, +28181=>14723, +28184=>14724, +28185=>14725, +28187=>14726, +28188=>14727, +28190=>14728, +28191=>14729, +28194=>14730, +28199=>14731, +28200=>14732, +28202=>14733, +28206=>14734, +28208=>14735, +28209=>14736, +28211=>14737, +28213=>14738, +28214=>14739, +28215=>14740, +28217=>14741, +28219=>14742, +28220=>14743, +28221=>14744, +28223=>14745, +28224=>14746, +28225=>14747, +28226=>14748, +28229=>14749, +28230=>14750, +28231=>14751, +28232=>14752, +28233=>14753, +28234=>14754, +28235=>14755, +28236=>14756, +28239=>14757, +28240=>14758, +28241=>14759, +28242=>14760, +28245=>14761, +28247=>14762, +28249=>14763, +28250=>14764, +28252=>14765, +28253=>14766, +28256=>14767, +28257=>14768, +28258=>14769, +28259=>14770, +28260=>14771, +28261=>14772, +28262=>14773, +28263=>14774, +28264=>14775, +28265=>14776, +28266=>14777, +28268=>14778, +28269=>14779, +28272=>14780, +28273=>14781, +28274=>14782, +28275=>14783, +28276=>14784, +28277=>14785, +28278=>14786, +28279=>14787, +28280=>14788, +28281=>14789, +28282=>14790, +28283=>14791, +28284=>14792, +28285=>14793, +28288=>14794, +28289=>14795, +28290=>14796, +28292=>14797, +28295=>14798, +28296=>14799, +28298=>14800, +28299=>14801, +28300=>14802, +28301=>14803, +28302=>14804, +28305=>14805, +28306=>14806, +28307=>14807, +28308=>14808, +28309=>14809, +28311=>14810, +28313=>14811, +28314=>14812, +28315=>14813, +28318=>14814, +28320=>14815, +28321=>14816, +28323=>14817, +28324=>14818, +28326=>14819, +28328=>14820, +28329=>14821, +28331=>14822, +28332=>14823, +28333=>14824, +28334=>14825, +28336=>14826, +28339=>14827, +28341=>14828, +28344=>14829, +28345=>14830, +28348=>14831, +28350=>14832, +28351=>14833, +28352=>14834, +28355=>14835, +28358=>14836, +28360=>14837, +28361=>14838, +28362=>14839, +28365=>14840, +28368=>14841, +28370=>14842, +28374=>14843, +28376=>14844, +28377=>14845, +28379=>14846, +28380=>14847, +28381=>14848, +28387=>14849, +28391=>14850, +28394=>14851, +28395=>14852, +28397=>14853, +28398=>14854, +28400=>14855, +28401=>14856, +28403=>14857, +28405=>14858, +28406=>14859, +28410=>14860, +28411=>14861, +28412=>14862, +28413=>14863, +28414=>14864, +28416=>14865, +28419=>14866, +28420=>14867, +28421=>14868, +28423=>14869, +28424=>14870, +28426=>14871, +28427=>14872, +28428=>14873, +28429=>14874, +28430=>14875, +28432=>14876, +28433=>14877, +28434=>14878, +28438=>14879, +28439=>14880, +28440=>14881, +28441=>14882, +28443=>14883, +28444=>14884, +28445=>14885, +28446=>14886, +28447=>14887, +28449=>14888, +28453=>14889, +28454=>14890, +28455=>14891, +28456=>14892, +28462=>14893, +28464=>14894, +28468=>14895, +28469=>14896, +28471=>14897, +28473=>14898, +28474=>14899, +28475=>14900, +28476=>14901, +28477=>14902, +28480=>14903, +28482=>14904, +28483=>14905, +28484=>14906, +28485=>14907, +28488=>14908, +28489=>14909, +28490=>14910, +28492=>14911, +28494=>14912, +28495=>14913, +28496=>14914, +28498=>14915, +28499=>14916, +28501=>14917, +28502=>14918, +28503=>14919, +28506=>14920, +28507=>14921, +28509=>14922, +28511=>14923, +28512=>14924, +28513=>14925, +28515=>14926, +28517=>14927, +28519=>14928, +28520=>14929, +28521=>14930, +28522=>14931, +28523=>14932, +28524=>14933, +28529=>14934, +28531=>14935, +28533=>14936, +28534=>14937, +28537=>14938, +28539=>14939, +28541=>14940, +28542=>14941, +28545=>14942, +28546=>14943, +28547=>14944, +28549=>14945, +28554=>14946, +28555=>14947, +28559=>14948, +28560=>14949, +28561=>14950, +28562=>14951, +28563=>14952, +28564=>14953, +28565=>14954, +28566=>14955, +28568=>14956, +28569=>14957, +28570=>14958, +28571=>14959, +28573=>14960, +28574=>14961, +28575=>14962, +28578=>14963, +28579=>14964, +28581=>14965, +28582=>14966, +28584=>14967, +28586=>14968, +28587=>14969, +28588=>14970, +28589=>14971, +28591=>14972, +28592=>14973, +28594=>14974, +28596=>14975, +28597=>14976, +28599=>14977, +28600=>14978, +28602=>14979, +28603=>14980, +28604=>14981, +28605=>14982, +28606=>14983, +28607=>14984, +28612=>14985, +28613=>14986, +28614=>14987, +28615=>14988, +28616=>14989, +28618=>14990, +28619=>14991, +28620=>14992, +28621=>14993, +28622=>14994, +28623=>14995, +28624=>14996, +28627=>14997, +28628=>14998, +28630=>14999, +28631=>15000, +28633=>15001, +28634=>15002, +28636=>15003, +28637=>15004, +28642=>15005, +28643=>15006, +28645=>15007, +28646=>15008, +28647=>15009, +28648=>15010, +28649=>15011, +28650=>15012, +28652=>15013, +28653=>15014, +28658=>15015, +28659=>15016, +28660=>15017, +28661=>15018, +28662=>15019, +28663=>15020, +28664=>15021, +28665=>15022, +28667=>15023, +28669=>15024, +28671=>15025, +28672=>15026, +28673=>15027, +28674=>15028, +28675=>15029, +28676=>15030, +28679=>15031, +28680=>15032, +28682=>15033, +28684=>15034, +28685=>15035, +28686=>15036, +28688=>15037, +28690=>15038, +28691=>15039, +28692=>15040, +28694=>15041, +28695=>15042, +28697=>15043, +28700=>15044, +28702=>15045, +28705=>15046, +28706=>15047, +28708=>15048, +28709=>15049, +28710=>15050, +28713=>15051, +28714=>15052, +28715=>15053, +28716=>15054, +28717=>15055, +28718=>15056, +28719=>15057, +28721=>15058, +28723=>15059, +28724=>15060, +28726=>15061, +28727=>15062, +28728=>15063, +28730=>15064, +28731=>15065, +28732=>15066, +28733=>15067, +28735=>15068, +28736=>15069, +28737=>15070, +28738=>15071, +28741=>15072, +28742=>15073, +28743=>15074, +28744=>15075, +28745=>15076, +28746=>15077, +28747=>15078, +28749=>15079, +28750=>15080, +28752=>15081, +28754=>15082, +28755=>15083, +28756=>15084, +28758=>15085, +28759=>15086, +28761=>15087, +28762=>15088, +28763=>15089, +28764=>15090, +28767=>15091, +28768=>15092, +28769=>15093, +28770=>15094, +28773=>15095, +28774=>15096, +28776=>15097, +28777=>15098, +28778=>15099, +28782=>15100, +28785=>15101, +28786=>15102, +28787=>15103, +28788=>15104, +28791=>15105, +28793=>15106, +28794=>15107, +28795=>15108, +28797=>15109, +28801=>15110, +28802=>15111, +28803=>15112, +28804=>15113, +28806=>15114, +28807=>15115, +28808=>15116, +28811=>15117, +28812=>15118, +28813=>15119, +28815=>15120, +28816=>15121, +28817=>15122, +28819=>15123, +28823=>15124, +28824=>15125, +28826=>15126, +28827=>15127, +28830=>15128, +28831=>15129, +28832=>15130, +28833=>15131, +28834=>15132, +28835=>15133, +28836=>15134, +28837=>15135, +28838=>15136, +28839=>15137, +28840=>15138, +28841=>15139, +28842=>15140, +28848=>15141, +28850=>15142, +28852=>15143, +28853=>15144, +28854=>15145, +28858=>15146, +28862=>15147, +28863=>15148, +28868=>15149, +28869=>15150, +28870=>15151, +28871=>15152, +28873=>15153, +28875=>15154, +28876=>15155, +28877=>15156, +28878=>15157, +28880=>15158, +28881=>15159, +28882=>15160, +28883=>15161, +28884=>15162, +28885=>15163, +28886=>15164, +28887=>15165, +28890=>15166, +28892=>15167, +28893=>15168, +28894=>15169, +28896=>15170, +28897=>15171, +28898=>15172, +28899=>15173, +28901=>15174, +28906=>15175, +28910=>15176, +28912=>15177, +28913=>15178, +28914=>15179, +28915=>15180, +28917=>15181, +28918=>15182, +28920=>15183, +28922=>15184, +28923=>15185, +28924=>15186, +28926=>15187, +28927=>15188, +28928=>15189, +28929=>15190, +28930=>15191, +28931=>15192, +28932=>15193, +28933=>15194, +28934=>15195, +28935=>15196, +28936=>15197, +28939=>15198, +28940=>15199, +28941=>15200, +28942=>15201, +28943=>15202, +28945=>15203, +28946=>15204, +28948=>15205, +28951=>15206, +28955=>15207, +28956=>15208, +28957=>15209, +28958=>15210, +28959=>15211, +28960=>15212, +28962=>15213, +28963=>15214, +28964=>15215, +28965=>15216, +28967=>15217, +28968=>15218, +28969=>15219, +28970=>15220, +28971=>15221, +28972=>15222, +28973=>15223, +28974=>15224, +28978=>15225, +28979=>15226, +28980=>15227, +28981=>15228, +28983=>15229, +28984=>15230, +28985=>15231, +28986=>15232, +28987=>15233, +28988=>15234, +28989=>15235, +28990=>15236, +28991=>15237, +28992=>15238, +28993=>15239, +28994=>15240, +28995=>15241, +28996=>15242, +28998=>15243, +28999=>15244, +29000=>15245, +29003=>15246, +29005=>15247, +29007=>15248, +29008=>15249, +29009=>15250, +29011=>15251, +29012=>15252, +29013=>15253, +29014=>15254, +29015=>15255, +29016=>15256, +29017=>15257, +29018=>15258, +29019=>15259, +29021=>15260, +29023=>15261, +29024=>15262, +29025=>15263, +29027=>15264, +29029=>15265, +29034=>15266, +29035=>15267, +29037=>15268, +29039=>15269, +29040=>15270, +29041=>15271, +29044=>15272, +29045=>15273, +29046=>15274, +29047=>15275, +29049=>15276, +29051=>15277, +29052=>15278, +29054=>15279, +29055=>15280, +29056=>15281, +29057=>15282, +29058=>15283, +29059=>15284, +29061=>15285, +29062=>15286, +29063=>15287, +29064=>15288, +29065=>15289, +29067=>15290, +29068=>15291, +29069=>15292, +29070=>15293, +29072=>15294, +29073=>15295, +29075=>15296, +29077=>15297, +29078=>15298, +29082=>15299, +29083=>15300, +29084=>15301, +29085=>15302, +29086=>15303, +29089=>15304, +29090=>15305, +29091=>15306, +29092=>15307, +29093=>15308, +29094=>15309, +29095=>15310, +29097=>15311, +29098=>15312, +29099=>15313, +29101=>15314, +29102=>15315, +29103=>15316, +29104=>15317, +29106=>15318, +29108=>15319, +29110=>15320, +29111=>15321, +29112=>15322, +29114=>15323, +29115=>15324, +29116=>15325, +29117=>15326, +29119=>15327, +29120=>15328, +29122=>15329, +29124=>15330, +29125=>15331, +29126=>15332, +29127=>15333, +29129=>15334, +29130=>15335, +29131=>15336, +29132=>15337, +29133=>15338, +29135=>15339, +29136=>15340, +29137=>15341, +29139=>15342, +29142=>15343, +29143=>15344, +29144=>15345, +29146=>15346, +29147=>15347, +29149=>15348, +29150=>15349, +29153=>15350, +29154=>15351, +29155=>15352, +29156=>15353, +29160=>15354, +29161=>15355, +29162=>15356, +29163=>15357, +29164=>15358, +29167=>15359, +29168=>15360, +29169=>15361, +29170=>15362, +29171=>15363, +29173=>15364, +29174=>15365, +29175=>15366, +29176=>15367, +29178=>15368, +29179=>15369, +29181=>15370, +29183=>15371, +29184=>15372, +29185=>15373, +29186=>15374, +29187=>15375, +29188=>15376, +29189=>15377, +29191=>15378, +29192=>15379, +29193=>15380, +29194=>15381, +29195=>15382, +29196=>15383, +29198=>15384, +29199=>15385, +29201=>15386, +29202=>15387, +29203=>15388, +29204=>15389, +29205=>15390, +29206=>15391, +29207=>15392, +29208=>15393, +29209=>15394, +29210=>15395, +29212=>15396, +29214=>15397, +29215=>15398, +29216=>15399, +29217=>15400, +29218=>15401, +29219=>15402, +29220=>15403, +29221=>15404, +29222=>15405, +29223=>15406, +29225=>15407, +29227=>15408, +29229=>15409, +29230=>15410, +29231=>15411, +29235=>15412, +29236=>15413, +29244=>15414, +29248=>15415, +29249=>15416, +29250=>15417, +29251=>15418, +29252=>15419, +29253=>15420, +29254=>15421, +29257=>15422, +29258=>15423, +29259=>15424, +29262=>15425, +29263=>15426, +29264=>15427, +29265=>15428, +29267=>15429, +29268=>15430, +29269=>15431, +29271=>15432, +29274=>15433, +29276=>15434, +29278=>15435, +29280=>15436, +29283=>15437, +29284=>15438, +29285=>15439, +29288=>15440, +29290=>15441, +29291=>15442, +29292=>15443, +29293=>15444, +29296=>15445, +29297=>15446, +29299=>15447, +29300=>15448, +29302=>15449, +29303=>15450, +29304=>15451, +29307=>15452, +29308=>15453, +29314=>15454, +29315=>15455, +29317=>15456, +29318=>15457, +29319=>15458, +29320=>15459, +29321=>15460, +29324=>15461, +29326=>15462, +29328=>15463, +29329=>15464, +29331=>15465, +29332=>15466, +29333=>15467, +29335=>15468, +29336=>15469, +29337=>15470, +29338=>15471, +29339=>15472, +29340=>15473, +29341=>15474, +29342=>15475, +29344=>15476, +29345=>15477, +29347=>15478, +29348=>15479, +29349=>15480, +29350=>15481, +29352=>15482, +29353=>15483, +29354=>15484, +29355=>15485, +29358=>15486, +29361=>15487, +29362=>15488, +29363=>15489, +29365=>15490, +29370=>15491, +29371=>15492, +29372=>15493, +29373=>15494, +29374=>15495, +29375=>15496, +29381=>15497, +29382=>15498, +29383=>15499, +29385=>15500, +29386=>15501, +29387=>15502, +29388=>15503, +29391=>15504, +29393=>15505, +29395=>15506, +29396=>15507, +29397=>15508, +29398=>15509, +29400=>15510, +29402=>15511, +29403=>15512, +29404=>15513, +29405=>15514, +29407=>15515, +29410=>15516, +29411=>15517, +29412=>15518, +29413=>15519, +29414=>15520, +29415=>15521, +29418=>15522, +29419=>15523, +29429=>15524, +29430=>15525, +29438=>15526, +29439=>15527, +29440=>15528, +29442=>15529, +29444=>15530, +29445=>15531, +29446=>15532, +29447=>15533, +29448=>15534, +29449=>15535, +29451=>15536, +29452=>15537, +29453=>15538, +29455=>15539, +29456=>15540, +29457=>15541, +29458=>15542, +29460=>15543, +29464=>15544, +29465=>15545, +29466=>15546, +29471=>15547, +29472=>15548, +29475=>15549, +29476=>15550, +29478=>15551, +29479=>15552, +29480=>15553, +29485=>15554, +29487=>15555, +29488=>15556, +29490=>15557, +29491=>15558, +29493=>15559, +29498=>15560, +29500=>15561, +29501=>15562, +29504=>15563, +29506=>15564, +29507=>15565, +29510=>15566, +29511=>15567, +29512=>15568, +29513=>15569, +29514=>15570, +29515=>15571, +29516=>15572, +29518=>15573, +29519=>15574, +29521=>15575, +29523=>15576, +29524=>15577, +29525=>15578, +29526=>15579, +29528=>15580, +29529=>15581, +29530=>15582, +29531=>15583, +29532=>15584, +29533=>15585, +29534=>15586, +29535=>15587, +29537=>15588, +29538=>15589, +29539=>15590, +29540=>15591, +29541=>15592, +29542=>15593, +29543=>15594, +29545=>15595, +29550=>15596, +29553=>15597, +29555=>15598, +29556=>15599, +29558=>15600, +29561=>15601, +29565=>15602, +29567=>15603, +29569=>15604, +29570=>15605, +29571=>15606, +29573=>15607, +29574=>15608, +29576=>15609, +29578=>15610, +29580=>15611, +29581=>15612, +29583=>15613, +29584=>15614, +29586=>15615, +29587=>15616, +29588=>15617, +29589=>15618, +29591=>15619, +29592=>15620, +29593=>15621, +29594=>15622, +29596=>15623, +29597=>15624, +29598=>15625, +29600=>15626, +29601=>15627, +29603=>15628, +29604=>15629, +29605=>15630, +29606=>15631, +29607=>15632, +29608=>15633, +29610=>15634, +29612=>15635, +29613=>15636, +29617=>15637, +29620=>15638, +29621=>15639, +29622=>15640, +29624=>15641, +29625=>15642, +29628=>15643, +29629=>15644, +29630=>15645, +29631=>15646, +29633=>15647, +29635=>15648, +29636=>15649, +29637=>15650, +29638=>15651, +29639=>15652, +29643=>15653, +29644=>15654, +29646=>15655, +29650=>15656, +29651=>15657, +29652=>15658, +29653=>15659, +29654=>15660, +29655=>15661, +29656=>15662, +29658=>15663, +29659=>15664, +29660=>15665, +29661=>15666, +29663=>15667, +29665=>15668, +29666=>15669, +29667=>15670, +29668=>15671, +29670=>15672, +29672=>15673, +29674=>15674, +29675=>15675, +29676=>15676, +29678=>15677, +29679=>15678, +29680=>15679, +29681=>15680, +29683=>15681, +29684=>15682, +29685=>15683, +29686=>15684, +29687=>15685, +29688=>15686, +29689=>15687, +29690=>15688, +29691=>15689, +29692=>15690, +29693=>15691, +29695=>15692, +29696=>15693, +29697=>15694, +29698=>15695, +29700=>15696, +29703=>15697, +29704=>15698, +29707=>15699, +29708=>15700, +29709=>15701, +29710=>15702, +29713=>15703, +29714=>15704, +29715=>15705, +29716=>15706, +29717=>15707, +29718=>15708, +29719=>15709, +29720=>15710, +29721=>15711, +29724=>15712, +29725=>15713, +29726=>15714, +29727=>15715, +29728=>15716, +29729=>15717, +29731=>15718, +29732=>15719, +29735=>15720, +29737=>15721, +29739=>15722, +29741=>15723, +29743=>15724, +29745=>15725, +29746=>15726, +29751=>15727, +29752=>15728, +29753=>15729, +29754=>15730, +29755=>15731, +29757=>15732, +29758=>15733, +29760=>15734, +29762=>15735, +29763=>15736, +29764=>15737, +29765=>15738, +29766=>15739, +29767=>15740, +29768=>15741, +29769=>15742, +29770=>15743, +29772=>15744, +29773=>15745, +29774=>15746, +29775=>15747, +29776=>15748, +29777=>15749, +29778=>15750, +29779=>15751, +29780=>15752, +29782=>15753, +29784=>15754, +29789=>15755, +29792=>15756, +29793=>15757, +29794=>15758, +29796=>15759, +29797=>15760, +29798=>15761, +29799=>15762, +29800=>15763, +29803=>15764, +29804=>15765, +29806=>15766, +29807=>15767, +29809=>15768, +29810=>15769, +29811=>15770, +29812=>15771, +29813=>15772, +29816=>15773, +29817=>15774, +29818=>15775, +29819=>15776, +29820=>15777, +29821=>15778, +29823=>15779, +29826=>15780, +29828=>15781, +29829=>15782, +29830=>15783, +29832=>15784, +29834=>15785, +29836=>15786, +29837=>15787, +29839=>15788, +29841=>15789, +29842=>15790, +29843=>15791, +29844=>15792, +29845=>15793, +29846=>15794, +29847=>15795, +29848=>15796, +29849=>15797, +29850=>15798, +29851=>15799, +29853=>15800, +29855=>15801, +29856=>15802, +29857=>15803, +29858=>15804, +29860=>15805, +29861=>15806, +29866=>15807, +29867=>15808, +29868=>15809, +29869=>15810, +29870=>15811, +29871=>15812, +29873=>15813, +29874=>15814, +29875=>15815, +29876=>15816, +29877=>15817, +29878=>15818, +29879=>15819, +29880=>15820, +29881=>15821, +29883=>15822, +29884=>15823, +29886=>15824, +29887=>15825, +29888=>15826, +29889=>15827, +29890=>15828, +29891=>15829, +29892=>15830, +29893=>15831, +29894=>15832, +29895=>15833, +29896=>15834, +29897=>15835, +29899=>15836, +29900=>15837, +29901=>15838, +29902=>15839, +29904=>15840, +29905=>15841, +29907=>15842, +29909=>15843, +29910=>15844, +29911=>15845, +29912=>15846, +29913=>15847, +29915=>15848, +29917=>15849, +29919=>15850, +29921=>15851, +29925=>15852, +29927=>15853, +29928=>15854, +29929=>15855, +29930=>15856, +29931=>15857, +29932=>15858, +29933=>15859, +29936=>15860, +29937=>15861, +29938=>15862, +29939=>15863, +29941=>15864, +29944=>15865, +29945=>15866, +29946=>15867, +29947=>15868, +29948=>15869, +29949=>15870, +29950=>15871, +29952=>15872, +29953=>15873, +29954=>15874, +29955=>15875, +29957=>15876, +29958=>15877, +29959=>15878, +29960=>15879, +29961=>15880, +29962=>15881, +29963=>15882, +29966=>15883, +29968=>15884, +29970=>15885, +29972=>15886, +29973=>15887, +29974=>15888, +29975=>15889, +29979=>15890, +29981=>15891, +29982=>15892, +29984=>15893, +29985=>15894, +29986=>15895, +29988=>15896, +29990=>15897, +29991=>15898, +29994=>15899, +29998=>15900, +30004=>15901, +30006=>15902, +30009=>15903, +30012=>15904, +30013=>15905, +30015=>15906, +30017=>15907, +30018=>15908, +30019=>15909, +30020=>15910, +30022=>15911, +30023=>15912, +30025=>15913, +30026=>15914, +30029=>15915, +30032=>15916, +30033=>15917, +30034=>15918, +30035=>15919, +30037=>15920, +30038=>15921, +30039=>15922, +30040=>15923, +30046=>15924, +30047=>15925, +30048=>15926, +30049=>15927, +30051=>15928, +30052=>15929, +30055=>15930, +30056=>15931, +30057=>15932, +30060=>15933, +30061=>15934, +30062=>15935, +30063=>15936, +30064=>15937, +30065=>15938, +30067=>15939, +30069=>15940, +30071=>15941, +30074=>15942, +30075=>15943, +30076=>15944, +30077=>15945, +30078=>15946, +30080=>15947, +30081=>15948, +30082=>15949, +30084=>15950, +30085=>15951, +30088=>15952, +30089=>15953, +30090=>15954, +30092=>15955, +30093=>15956, +30094=>15957, +30096=>15958, +30099=>15959, +30101=>15960, +30104=>15961, +30107=>15962, +30108=>15963, +30110=>15964, +30114=>15965, +30118=>15966, +30119=>15967, +30120=>15968, +30121=>15969, +30122=>15970, +30125=>15971, +30134=>15972, +30135=>15973, +30138=>15974, +30139=>15975, +30143=>15976, +30144=>15977, +30145=>15978, +30150=>15979, +30155=>15980, +30156=>15981, +30158=>15982, +30159=>15983, +30160=>15984, +30161=>15985, +30163=>15986, +30167=>15987, +30170=>15988, +30172=>15989, +30173=>15990, +30175=>15991, +30176=>15992, +30177=>15993, +30181=>15994, +30185=>15995, +30188=>15996, +30189=>15997, +30190=>15998, +30191=>15999, +30194=>16000, +30195=>16001, +30197=>16002, +30198=>16003, +30199=>16004, +30200=>16005, +30202=>16006, +30203=>16007, +30205=>16008, +30206=>16009, +30212=>16010, +30214=>16011, +30215=>16012, +30216=>16013, +30217=>16014, +30222=>16015, +30223=>16016, +30225=>16017, +30226=>16018, +30227=>16019, +30228=>16020, +30230=>16021, +30234=>16022, +30236=>16023, +30237=>16024, +30243=>16025, +30248=>16026, +30252=>16027, +30254=>16028, +30255=>16029, +30257=>16030, +30258=>16031, +30262=>16032, +30263=>16033, +30265=>16034, +30266=>16035, +30269=>16036, +30273=>16037, +30276=>16038, +30277=>16039, +30280=>16040, +30282=>16041, +30283=>16042, +30286=>16043, +30287=>16044, +30288=>16045, +30289=>16046, +30290=>16047, +30291=>16048, +30293=>16049, +30295=>16050, +30297=>16051, +30298=>16052, +30299=>16053, +30301=>16054, +30304=>16055, +30305=>16056, +30310=>16057, +30312=>16058, +30314=>16059, +30323=>16060, +30324=>16061, +30325=>16062, +12136=>16063, +30326=>16063, +30327=>16064, +30329=>16065, +30330=>16066, +30335=>16067, +30336=>16068, +30337=>16069, +30339=>16070, +30341=>16071, +30345=>16072, +30346=>16073, +30348=>16074, +30349=>16075, +30351=>16076, +30352=>16077, +30354=>16078, +30356=>16079, +30357=>16080, +30359=>16081, +30360=>16082, +30363=>16083, +30364=>16084, +30365=>16085, +30366=>16086, +30367=>16087, +30368=>16088, +30369=>16089, +30370=>16090, +30371=>16091, +30373=>16092, +30374=>16093, +30375=>16094, +30376=>16095, +30377=>16096, +30378=>16097, +30379=>16098, +30380=>16099, +30381=>16100, +30383=>16101, +30384=>16102, +30387=>16103, +30389=>16104, +30390=>16105, +30391=>16106, +30393=>16107, +30395=>16108, +30396=>16109, +30397=>16110, +30398=>16111, +30400=>16112, +30401=>16113, +30403=>16114, +30404=>16115, +30407=>16116, +30409=>16117, +30411=>16118, +30412=>16119, +30419=>16120, +30421=>16121, +30425=>16122, +30426=>16123, +30428=>16124, +30429=>16125, +30432=>16126, +30434=>16127, +30438=>16128, +30440=>16129, +30441=>16130, +30442=>16131, +30443=>16132, +30444=>16133, +30445=>16134, +30448=>16135, +30451=>16136, +30453=>16137, +30454=>16138, +30455=>16139, +30458=>16140, +30459=>16141, +30461=>16142, +30463=>16143, +30464=>16144, +30466=>16145, +30467=>16146, +30469=>16147, +30470=>16148, +30474=>16149, +30476=>16150, +30478=>16151, +30479=>16152, +30480=>16153, +30481=>16154, +30482=>16155, +30483=>16156, +30484=>16157, +30485=>16158, +30486=>16159, +30487=>16160, +30488=>16161, +30491=>16162, +30492=>16163, +30493=>16164, +30494=>16165, +30497=>16166, +30499=>16167, +30500=>16168, +30501=>16169, +30503=>16170, +30506=>16171, +30507=>16172, +30508=>16173, +30510=>16174, +30512=>16175, +30513=>16176, +30514=>16177, +30515=>16178, +30516=>16179, +30521=>16180, +30523=>16181, +30525=>16182, +30526=>16183, +30527=>16184, +30530=>16185, +30532=>16186, +30533=>16187, +30534=>16188, +30536=>16189, +30537=>16190, +30538=>16191, +30539=>16192, +30540=>16193, +30541=>16194, +30542=>16195, +30546=>16196, +30547=>16197, +30548=>16198, +30549=>16199, +30550=>16200, +30551=>16201, +30552=>16202, +30553=>16203, +30556=>16204, +30557=>16205, +30559=>16206, +30560=>16207, +30564=>16208, +30567=>16209, +30569=>16210, +30570=>16211, +30573=>16212, +30574=>16213, +30575=>16214, +30576=>16215, +30577=>16216, +30578=>16217, +30579=>16218, +30580=>16219, +30581=>16220, +30582=>16221, +30583=>16222, +30584=>16223, +30586=>16224, +30587=>16225, +30588=>16226, +30593=>16227, +30594=>16228, +30595=>16229, +30598=>16230, +30599=>16231, +30600=>16232, +30601=>16233, +30602=>16234, +30603=>16235, +30607=>16236, +30608=>16237, +30611=>16238, +30612=>16239, +30613=>16240, +30614=>16241, +30615=>16242, +30617=>16243, +30618=>16244, +30619=>16245, +30620=>16246, +30621=>16247, +30625=>16248, +30627=>16249, +30628=>16250, +30630=>16251, +30632=>16252, +30635=>16253, +30638=>16254, +30639=>16255, +30641=>16256, +30642=>16257, +30644=>16258, +30646=>16259, +30647=>16260, +30648=>16261, +30649=>16262, +30650=>16263, +30654=>16264, +30656=>16265, +30657=>16266, +30658=>16267, +30659=>16268, +30660=>16269, +30661=>16270, +30662=>16271, +30664=>16272, +30665=>16273, +30666=>16274, +30667=>16275, +30668=>16276, +30670=>16277, +30671=>16278, +30672=>16279, +30673=>16280, +30674=>16281, +30675=>16282, +30676=>16283, +30677=>16284, +30678=>16285, +30680=>16286, +30681=>16287, +30685=>16288, +30686=>16289, +30687=>16290, +30688=>16291, +30689=>16292, +30692=>16293, +30694=>16294, +30696=>16295, +30698=>16296, +30704=>16297, +30705=>16298, +30706=>16299, +30708=>16300, +30709=>16301, +30711=>16302, +30713=>16303, +30714=>16304, +30715=>16305, +30716=>16306, +30723=>16307, +30724=>16308, +30725=>16309, +30726=>16310, +30727=>16311, +30728=>16312, +30730=>16313, +30731=>16314, +30734=>16315, +30735=>16316, +30736=>16317, +30739=>16318, +30741=>16319, +30745=>16320, +30747=>16321, +30750=>16322, +30752=>16323, +30753=>16324, +30754=>16325, +30756=>16326, +30760=>16327, +30762=>16328, +30763=>16329, +30766=>16330, +30767=>16331, +30769=>16332, +30770=>16333, +30771=>16334, +30773=>16335, +30774=>16336, +30781=>16337, +30783=>16338, +30785=>16339, +30786=>16340, +30788=>16341, +30790=>16342, +30792=>16343, +30793=>16344, +30794=>16345, +30795=>16346, +30797=>16347, +30799=>16348, +30801=>16349, +30803=>16350, +30804=>16351, +30808=>16352, +30809=>16353, +30810=>16354, +30811=>16355, +30812=>16356, +30814=>16357, +30815=>16358, +30816=>16359, +30817=>16360, +30818=>16361, +30819=>16362, +30821=>16363, +30822=>16364, +30823=>16365, +30825=>16366, +30832=>16367, +30833=>16368, +30834=>16369, +30835=>16370, +30836=>16371, +30837=>16372, +30838=>16373, +30840=>16374, +30841=>16375, +30842=>16376, +30843=>16377, +30845=>16378, +30846=>16379, +30847=>16380, +30848=>16381, +30849=>16382, +30850=>16383, +30851=>16384, +30852=>16385, +30853=>16386, +30854=>16387, +30856=>16388, +30858=>16389, +30859=>16390, +30863=>16391, +30864=>16392, +30866=>16393, +30868=>16394, +30869=>16395, +30870=>16396, +30873=>16397, +30877=>16398, +30878=>16399, +30880=>16400, +30882=>16401, +30884=>16402, +30886=>16403, +30888=>16404, +30890=>16405, +30891=>16406, +30892=>16407, +30894=>16408, +30895=>16409, +30901=>16410, +30902=>16411, +30903=>16412, +30907=>16413, +30909=>16414, +30911=>16415, +30912=>16416, +30914=>16417, +30915=>16418, +30916=>16419, +30918=>16420, +30919=>16421, +30920=>16422, +30924=>16423, +30925=>16424, +30926=>16425, +30927=>16426, +30929=>16427, +30930=>16428, +30931=>16429, +30934=>16430, +30935=>16431, +30936=>16432, +30939=>16433, +30940=>16434, +30941=>16435, +30942=>16436, +30943=>16437, +30944=>16438, +30945=>16439, +30946=>16440, +30948=>16441, +30949=>16442, +30950=>16443, +30953=>16444, +30954=>16445, +30955=>16446, +30957=>16447, +30958=>16448, +30960=>16449, +30961=>16450, +30963=>16451, +30965=>16452, +30966=>16453, +30968=>16454, +30969=>16455, +30971=>16456, +30972=>16457, +30974=>16458, +30975=>16459, +30976=>16460, +30978=>16461, +30979=>16462, +30980=>16463, +30982=>16464, +30983=>16465, +30984=>16466, +30985=>16467, +30986=>16468, +30987=>16469, +30988=>16470, +30989=>16471, +30991=>16472, +30992=>16473, +30993=>16474, +30994=>16475, +30996=>16476, +30997=>16477, +30998=>16478, +30999=>16479, +31000=>16480, +31002=>16481, +31003=>16482, +31004=>16483, +31005=>16484, +31007=>16485, +31008=>16486, +31009=>16487, +31010=>16488, +31011=>16489, +31013=>16490, +31015=>16491, +31016=>16492, +31017=>16493, +31021=>16494, +31022=>16495, +31023=>16496, +31024=>16497, +31026=>16498, +31027=>16499, +31029=>16500, +31030=>16501, +31031=>16502, +31032=>16503, +31033=>16504, +31037=>16505, +31039=>16506, +31042=>16507, +31043=>16508, +31044=>16509, +31045=>16510, +31047=>16511, +31050=>16512, +31051=>16513, +31052=>16514, +31053=>16515, +31054=>16516, +31055=>16517, +31056=>16518, +31057=>16519, +31058=>16520, +31060=>16521, +31061=>16522, +31064=>16523, +31065=>16524, +31073=>16525, +31075=>16526, +31076=>16527, +31078=>16528, +31081=>16529, +31082=>16530, +31083=>16531, +31084=>16532, +31086=>16533, +31088=>16534, +31089=>16535, +31090=>16536, +31091=>16537, +31092=>16538, +31093=>16539, +31094=>16540, +31097=>16541, +31099=>16542, +31100=>16543, +31101=>16544, +31102=>16545, +31103=>16546, +31106=>16547, +31107=>16548, +31110=>16549, +31111=>16550, +31112=>16551, +31113=>16552, +31115=>16553, +31116=>16554, +31120=>16555, +31121=>16556, +31122=>16557, +31123=>16558, +31124=>16559, +31125=>16560, +31126=>16561, +31127=>16562, +31128=>16563, +31129=>16564, +31131=>16565, +31132=>16566, +31133=>16567, +31134=>16568, +31135=>16569, +31136=>16570, +31137=>16571, +31138=>16572, +31139=>16573, +31140=>16574, +31141=>16575, +31144=>16576, +31145=>16577, +31147=>16578, +31148=>16579, +31149=>16580, +31151=>16581, +31154=>16582, +31156=>16583, +31157=>16584, +31158=>16585, +31159=>16586, +12145=>16587, +31160=>16587, +31164=>16588, +31167=>16589, +31170=>16590, +31172=>16591, +31173=>16592, +31175=>16593, +31176=>16594, +31178=>16595, +63893=>16595, +31180=>16596, +31182=>16597, +31183=>16598, +31184=>16599, +31187=>16600, +31188=>16601, +31190=>16602, +31191=>16603, +31193=>16604, +31194=>16605, +31195=>16606, +31196=>16607, +31197=>16608, +31198=>16609, +31200=>16610, +31201=>16611, +31202=>16612, +31205=>16613, +31208=>16614, +31210=>16615, +31212=>16616, +31214=>16617, +31217=>16618, +31218=>16619, +31219=>16620, +31220=>16621, +31221=>16622, +31222=>16623, +31223=>16624, +31225=>16625, +31226=>16626, +31228=>16627, +31230=>16628, +31231=>16629, +31233=>16630, +31236=>16631, +31237=>16632, +31239=>16633, +31240=>16634, +31241=>16635, +31242=>16636, +31244=>16637, +31247=>16638, +31248=>16639, +31249=>16640, +31250=>16641, +31251=>16642, +31253=>16643, +31254=>16644, +31256=>16645, +31257=>16646, +31259=>16647, +31260=>16648, +31261=>16649, +31263=>16650, +31265=>16651, +31266=>16652, +31268=>16653, +31269=>16654, +31270=>16655, +31271=>16656, +31272=>16657, +31273=>16658, +31274=>16659, +31275=>16660, +31276=>16661, +31277=>16662, +31279=>16663, +31280=>16664, +31282=>16665, +31284=>16666, +31285=>16667, +31286=>16668, +31288=>16669, +31290=>16670, +31294=>16671, +31297=>16672, +31298=>16673, +31299=>16674, +31300=>16675, +31301=>16676, +31303=>16677, +31304=>16678, +31305=>16679, +31306=>16680, +31307=>16681, +31311=>16682, +31312=>16683, +31314=>16684, +31315=>16685, +31316=>16686, +31317=>16687, +31318=>16688, +31320=>16689, +31321=>16690, +31322=>16691, +31323=>16692, +31324=>16693, +31325=>16694, +31326=>16695, +31327=>16696, +31328=>16697, +31331=>16698, +31332=>16699, +31333=>16700, +31334=>16701, +31335=>16702, +31336=>16703, +31338=>16704, +31340=>16705, +31341=>16706, +31342=>16707, +31343=>16708, +31345=>16709, +31346=>16710, +31347=>16711, +31349=>16712, +31355=>16713, +31356=>16714, +31357=>16715, +31358=>16716, +31362=>16717, +31365=>16718, +31367=>16719, +31369=>16720, +31370=>16721, +31371=>16722, +31372=>16723, +31374=>16724, +31375=>16725, +31376=>16726, +31379=>16727, +31380=>16728, +31385=>16729, +31386=>16730, +31387=>16731, +31390=>16732, +31393=>16733, +31394=>16734, +31395=>16735, +31396=>16736, +31399=>16737, +31403=>16738, +31407=>16739, +31408=>16740, +31409=>16741, +31410=>16742, +31412=>16743, +31413=>16744, +31415=>16745, +31416=>16746, +31417=>16747, +31419=>16748, +31420=>16749, +31421=>16750, +31422=>16751, +31424=>16752, +31425=>16753, +31426=>16754, +31427=>16755, +31430=>16756, +31433=>16757, +31436=>16758, +31437=>16759, +31438=>16760, +31439=>16761, +31440=>16762, +31441=>16763, +31442=>16764, +31443=>16765, +31444=>16766, +31445=>16767, +31447=>16768, +31448=>16769, +31450=>16770, +31451=>16771, +31452=>16772, +31453=>16773, +31457=>16774, +31458=>16775, +31460=>16776, +31463=>16777, +31464=>16778, +31465=>16779, +31467=>16780, +31468=>16781, +31470=>16782, +31472=>16783, +31473=>16784, +31474=>16785, +31475=>16786, +31476=>16787, +31477=>16788, +31479=>16789, +31480=>16790, +31483=>16791, +31484=>16792, +31486=>16793, +31488=>16794, +31489=>16795, +31490=>16796, +31493=>16797, +31495=>16798, +31497=>16799, +31500=>16800, +31501=>16801, +31502=>16802, +31504=>16803, +31506=>16804, +31507=>16805, +31510=>16806, +31511=>16807, +31512=>16808, +31514=>16809, +31516=>16810, +31517=>16811, +31519=>16812, +31521=>16813, +31522=>16814, +31523=>16815, +31527=>16816, +31529=>16817, +31533=>16818, +31535=>16819, +31536=>16820, +31538=>16821, +31540=>16822, +31541=>16823, +31542=>16824, +31543=>16825, +31545=>16826, +31547=>16827, +31549=>16828, +31551=>16829, +31552=>16830, +31553=>16831, +31554=>16832, +31555=>16833, +31556=>16834, +31560=>16835, +31562=>16836, +31565=>16837, +31566=>16838, +31571=>16839, +31573=>16840, +31575=>16841, +31577=>16842, +31580=>16843, +31582=>16844, +31583=>16845, +31585=>16846, +31587=>16847, +31588=>16848, +31589=>16849, +31590=>16850, +31592=>16851, +31593=>16852, +31594=>16853, +31595=>16854, +31596=>16855, +31597=>16856, +31599=>16857, +31600=>16858, +31603=>16859, +31604=>16860, +31606=>16861, +31608=>16862, +31610=>16863, +31612=>16864, +31613=>16865, +31615=>16866, +31617=>16867, +31618=>16868, +31619=>16869, +31620=>16870, +31622=>16871, +31623=>16872, +31624=>16873, +31625=>16874, +31626=>16875, +31628=>16876, +31630=>16877, +31631=>16878, +31633=>16879, +31634=>16880, +31635=>16881, +31638=>16882, +31640=>16883, +31641=>16884, +31642=>16885, +31643=>16886, +31646=>16887, +31647=>16888, +31648=>16889, +31651=>16890, +31652=>16891, +31653=>16892, +31662=>16893, +31663=>16894, +31664=>16895, +31666=>16896, +31667=>16897, +31669=>16898, +31670=>16899, +31671=>16900, +31673=>16901, +31674=>16902, +31675=>16903, +31676=>16904, +31677=>16905, +31678=>16906, +31679=>16907, +31682=>16908, +31683=>16909, +31685=>16910, +31688=>16911, +31690=>16912, +31693=>16913, +31694=>16914, +31695=>16915, +31696=>16916, +31698=>16917, +31700=>16918, +31701=>16919, +31702=>16920, +31703=>16921, +31704=>16922, +31707=>16923, +31708=>16924, +31710=>16925, +31711=>16926, +31712=>16927, +31714=>16928, +31715=>16929, +31719=>16930, +31720=>16931, +31723=>16932, +31724=>16933, +31725=>16934, +31727=>16935, +31728=>16936, +31730=>16937, +31732=>16938, +31733=>16939, +31734=>16940, +31736=>16941, +31737=>16942, +31738=>16943, +31739=>16944, +31741=>16945, +31743=>16946, +31745=>16947, +31746=>16948, +31747=>16949, +31748=>16950, +31749=>16951, +31750=>16952, +31752=>16953, +31753=>16954, +31754=>16955, +31758=>16956, +31760=>16957, +31761=>16958, +31762=>16959, +31763=>16960, +31764=>16961, +31765=>16962, +31767=>16963, +31768=>16964, +31769=>16965, +31770=>16966, +31771=>16967, +31772=>16968, +31773=>16969, +31776=>16970, +31778=>16971, +31780=>16972, +31781=>16973, +31784=>16974, +31785=>16975, +31788=>16976, +31789=>16977, +31790=>16978, +31791=>16979, +31792=>16980, +31793=>16981, +31794=>16982, +31795=>16983, +31796=>16984, +31797=>16985, +31798=>16986, +31799=>16987, +31801=>16988, +31802=>16989, +31803=>16990, +31804=>16991, +31810=>16992, +31812=>16993, +31813=>16994, +31814=>16995, +31815=>16996, +31816=>16997, +31817=>16998, +31818=>16999, +31819=>17000, +31822=>17001, +31823=>17002, +31824=>17003, +31825=>17004, +31826=>17005, +31827=>17006, +31828=>17007, +31829=>17008, +31830=>17009, +31831=>17010, +31832=>17011, +31833=>17012, +31834=>17013, +31835=>17014, +31837=>17015, +31838=>17016, +31841=>17017, +31842=>17018, +31843=>17019, +31845=>17020, +31846=>17021, +31847=>17022, +31848=>17023, +31851=>17024, +31853=>17025, +31855=>17026, +31856=>17027, +31857=>17028, +31861=>17029, +31862=>17030, +31863=>17031, +31864=>17032, +31865=>17033, +31866=>17034, +31870=>17035, +31871=>17036, +31872=>17037, +31873=>17038, +31874=>17039, +31875=>17040, +31876=>17041, +31877=>17042, +31878=>17043, +31879=>17044, +31880=>17045, +31882=>17046, +31883=>17047, +31884=>17048, +31885=>17049, +31886=>17050, +31887=>17051, +31888=>17052, +31891=>17053, +31892=>17054, +31894=>17055, +31897=>17056, +31898=>17057, +31899=>17058, +31904=>17059, +31905=>17060, +31907=>17061, +31910=>17062, +31911=>17063, +31912=>17064, +31913=>17065, +31915=>17066, +31916=>17067, +31917=>17068, +31919=>17069, +31920=>17070, +31924=>17071, +31925=>17072, +31926=>17073, +31927=>17074, +31928=>17075, +31930=>17076, +31931=>17077, +31935=>17078, +31936=>17079, +31938=>17080, +31939=>17081, +31940=>17082, +31942=>17083, +31945=>17084, +31947=>17085, +31950=>17086, +31951=>17087, +31952=>17088, +31953=>17089, +31954=>17090, +31955=>17091, +31956=>17092, +31960=>17093, +31962=>17094, +31963=>17095, +31969=>17096, +31970=>17097, +31971=>17098, +31972=>17099, +31973=>17100, +31974=>17101, +31977=>17102, +31978=>17103, +31979=>17104, +31980=>17105, +31981=>17106, +31982=>17107, +31985=>17108, +31987=>17109, +31989=>17110, +31991=>17111, +31994=>17112, +31996=>17113, +31997=>17114, +31999=>17115, +32001=>17116, +32003=>17117, +32012=>17118, +32014=>17119, +32015=>17120, +32017=>17121, +32018=>17122, +32022=>17123, +32024=>17124, +32029=>17125, +32030=>17126, +32031=>17127, +32035=>17128, +32036=>17129, +32037=>17130, +32038=>17131, +32040=>17132, +32041=>17133, +32042=>17134, +32044=>17135, +32045=>17136, +32046=>17137, +32052=>17138, +32053=>17139, +32054=>17140, +32055=>17141, +32056=>17142, +32059=>17143, +32061=>17144, +32062=>17145, +32065=>17146, +32067=>17147, +32069=>17148, +32071=>17149, +32072=>17150, +32073=>17151, +32074=>17152, +32075=>17153, +32076=>17154, +32077=>17155, +32079=>17156, +32081=>17157, +32082=>17158, +32083=>17159, +32084=>17160, +32085=>17161, +32086=>17162, +32087=>17163, +32088=>17164, +32089=>17165, +32090=>17166, +32091=>17167, +32092=>17168, +32095=>17169, +32096=>17170, +32099=>17171, +32100=>17172, +32101=>17173, +32103=>17174, +32105=>17175, +32106=>17176, +32107=>17177, +32108=>17178, +32109=>17179, +32111=>17180, +32112=>17181, +32116=>17182, +32117=>17183, +32120=>17184, +32122=>17185, +32123=>17186, +32124=>17187, +32125=>17188, +32126=>17189, +32127=>17190, +32128=>17191, +32130=>17192, +32132=>17193, +32133=>17194, +32135=>17195, +32138=>17196, +32139=>17197, +32140=>17198, +32141=>17199, +32142=>17200, +32144=>17201, +32145=>17202, +32146=>17203, +32148=>17204, +32149=>17205, +32150=>17206, +32151=>17207, +32152=>17208, +32153=>17209, +32154=>17210, +32155=>17211, +32157=>17212, +32159=>17213, +32160=>17214, +32161=>17215, +32164=>17216, +32165=>17217, +32167=>17218, +32168=>17219, +32169=>17220, +32170=>17221, +32175=>17222, +32181=>17223, +32182=>17224, +32183=>17225, +32188=>17226, +32192=>17227, +32193=>17228, +32194=>17229, +32195=>17230, +32197=>17231, +32198=>17232, +32200=>17233, +32201=>17234, +32204=>17235, +32205=>17236, +32206=>17237, +32207=>17238, +32208=>17239, +32211=>17240, +32213=>17241, +32214=>17242, +32218=>17243, +32219=>17244, +32220=>17245, +32223=>17246, +32226=>17247, +32228=>17248, +32229=>17249, +32231=>17250, +32234=>17251, +32235=>17252, +32237=>17253, +32238=>17254, +32240=>17255, +32243=>17256, +32245=>17257, +32247=>17258, +32248=>17259, +32250=>17260, +32252=>17261, +32253=>17262, +32254=>17263, +32255=>17264, +32256=>17265, +32257=>17266, +32258=>17267, +32259=>17268, +32260=>17269, +32261=>17270, +32262=>17271, +32263=>17272, +32268=>17273, +32269=>17274, +32270=>17275, +32271=>17276, +32274=>17277, +32275=>17278, +32276=>17279, +32277=>17280, +32278=>17281, +32279=>17282, +32280=>17283, +32281=>17284, +32282=>17285, +32284=>17286, +32288=>17287, +32289=>17288, +32290=>17289, +32292=>17290, +32293=>17291, +32294=>17292, +32296=>17293, +32297=>17294, +32298=>17295, +32300=>17296, +32303=>17297, +32304=>17298, +32307=>17299, +32312=>17300, +32314=>17301, +32316=>17302, +32319=>17303, +32320=>17304, +32322=>17305, +32323=>17306, +32324=>17307, +32328=>17308, +32329=>17309, +32330=>17310, +32331=>17311, +32332=>17312, +32333=>17313, +32334=>17314, +32335=>17315, +32336=>17316, +32337=>17317, +32339=>17318, +32342=>17319, +32343=>17320, +32344=>17321, +32345=>17322, +32347=>17323, +32348=>17324, +32349=>17325, +32351=>17326, +32352=>17327, +32353=>17328, +32355=>17329, +32356=>17330, +32357=>17331, +32358=>17332, +32359=>17333, +32360=>17334, +32364=>17335, +32369=>17336, +32370=>17337, +32372=>17338, +32373=>17339, +32374=>17340, +32375=>17341, +32376=>17342, +32378=>17343, +32379=>17344, +32383=>17345, +32384=>17346, +32385=>17347, +32387=>17348, +32388=>17349, +32389=>17350, +32390=>17351, +32391=>17352, +32393=>17353, +32395=>17354, +32398=>17355, +32400=>17356, +32401=>17357, +32402=>17358, +32405=>17359, +32407=>17360, +32409=>17361, +32410=>17362, +32413=>17363, +32414=>17364, +32430=>17365, +32436=>17366, +32443=>17367, +32444=>17368, +32470=>17369, +32484=>17370, +32492=>17371, +32505=>17372, +32522=>17373, +32528=>17374, +32542=>17375, +32567=>17376, +32569=>17377, +32571=>17378, +32572=>17379, +32573=>17380, +32574=>17381, +32575=>17382, +32576=>17383, +32577=>17384, +32579=>17385, +32582=>17386, +32583=>17387, +32584=>17388, +32585=>17389, +32586=>17390, +32587=>17391, +32589=>17392, +32591=>17393, +32594=>17394, +32595=>17395, +32598=>17396, +32601=>17397, +32603=>17398, +32604=>17399, +32605=>17400, +32606=>17401, +32608=>17402, +32611=>17403, +32612=>17404, +32613=>17405, +32614=>17406, +32615=>17407, +32619=>17408, +32620=>17409, +32621=>17410, +32623=>17411, +32627=>17412, +32629=>17413, +32630=>17414, +32632=>17415, +32634=>17416, +32635=>17417, +32636=>17418, +32637=>17419, +32639=>17420, +32640=>17421, +32642=>17422, +32643=>17423, +32644=>17424, +32647=>17425, +32649=>17426, +32651=>17427, +32653=>17428, +32655=>17429, +32656=>17430, +32657=>17431, +32658=>17432, +32659=>17433, +32661=>17434, +32662=>17435, +32663=>17436, +32664=>17437, +32665=>17438, +32667=>17439, +32668=>17440, +32672=>17441, +32674=>17442, +32675=>17443, +32678=>17444, +32680=>17445, +32682=>17446, +32683=>17447, +32684=>17448, +32685=>17449, +32686=>17450, +32689=>17451, +32691=>17452, +32692=>17453, +32693=>17454, +32694=>17455, +32695=>17456, +32698=>17457, +32699=>17458, +32702=>17459, +32704=>17460, +32706=>17461, +32707=>17462, +32708=>17463, +32710=>17464, +32711=>17465, +32712=>17466, +32713=>17467, +32715=>17468, +32717=>17469, +32719=>17470, +32720=>17471, +32721=>17472, +32723=>17473, +32726=>17474, +32727=>17475, +32729=>17476, +32730=>17477, +32731=>17478, +32732=>17479, +32733=>17480, +32734=>17481, +32738=>17482, +32739=>17483, +32740=>17484, +32743=>17485, +32744=>17486, +32746=>17487, +32747=>17488, +32748=>17489, +32749=>17490, +32751=>17491, +32754=>17492, +32756=>17493, +32757=>17494, +32758=>17495, +32759=>17496, +32760=>17497, +32762=>17498, +32765=>17499, +32766=>17500, +32767=>17501, +32770=>17502, +32775=>17503, +32776=>17504, +32777=>17505, +32778=>17506, +32782=>17507, +32783=>17508, +32785=>17509, +32787=>17510, +32794=>17511, +32795=>17512, +32797=>17513, +32798=>17514, +32799=>17515, +32801=>17516, +32803=>17517, +32804=>17518, +32811=>17519, +32813=>17520, +32815=>17521, +32816=>17522, +32818=>17523, +32820=>17524, +32825=>17525, +32826=>17526, +32828=>17527, +32830=>17528, +32832=>17529, +32833=>17530, +32836=>17531, +32837=>17532, +32839=>17533, +32840=>17534, +32841=>17535, +32846=>17536, +32847=>17537, +32848=>17538, +32849=>17539, +32851=>17540, +32853=>17541, +32855=>17542, +32857=>17543, +32859=>17544, +32860=>17545, +32861=>17546, +32863=>17547, +32864=>17548, +32865=>17549, +32866=>17550, +32867=>17551, +32868=>17552, +32869=>17553, +32870=>17554, +32871=>17555, +32872=>17556, +32875=>17557, +32876=>17558, +32877=>17559, +32878=>17560, +32884=>17561, +32888=>17562, +32890=>17563, +32891=>17564, +32892=>17565, +32897=>17566, +32898=>17567, +32904=>17568, +32906=>17569, +32909=>17570, +32910=>17571, +32911=>17572, +32912=>17573, +32913=>17574, +32914=>17575, +32916=>17576, +32917=>17577, +32919=>17578, +32921=>17579, +32926=>17580, +32931=>17581, +32934=>17582, +32935=>17583, +32936=>17584, +32940=>17585, +32944=>17586, +32947=>17587, +32949=>17588, +32950=>17589, +32952=>17590, +32953=>17591, +32955=>17592, +32965=>17593, +32967=>17594, +32968=>17595, +32969=>17596, +32970=>17597, +32971=>17598, +32975=>17599, +32976=>17600, +32977=>17601, +32978=>17602, +32979=>17603, +32980=>17604, +32981=>17605, +32984=>17606, +32991=>17607, +32992=>17608, +32994=>17609, +32995=>17610, +32998=>17611, +33006=>17612, +33013=>17613, +33015=>17614, +33017=>17615, +33019=>17616, +33022=>17617, +33023=>17618, +33024=>17619, +33025=>17620, +33027=>17621, +33028=>17622, +33031=>17623, +33032=>17624, +33035=>17625, +33036=>17626, +33045=>17627, +33047=>17628, +33049=>17629, +33052=>17630, +33053=>17631, +33055=>17632, +33056=>17633, +33057=>17634, +33058=>17635, +33059=>17636, +33060=>17637, +33061=>17638, +33062=>17639, +33063=>17640, +33064=>17641, +33065=>17642, +33066=>17643, +33067=>17644, +33069=>17645, +33070=>17646, +33072=>17647, +33075=>17648, +33076=>17649, +33077=>17650, +33079=>17651, +33082=>17652, +33083=>17653, +33084=>17654, +33085=>17655, +33087=>17656, +33088=>17657, +33089=>17658, +33090=>17659, +33091=>17660, +33092=>17661, +33093=>17662, +33095=>17663, +33097=>17664, +33101=>17665, +33103=>17666, +33106=>17667, +33111=>17668, +33112=>17669, +33115=>17670, +33116=>17671, +33117=>17672, +33118=>17673, +33119=>17674, +33122=>17675, +33123=>17676, +33124=>17677, +33128=>17678, +33130=>17679, +33132=>17680, +33135=>17681, +33138=>17682, +33139=>17683, +33141=>17684, +33142=>17685, +33143=>17686, +33153=>17687, +33155=>17688, +33156=>17689, +33157=>17690, +33158=>17691, +33159=>17692, +33161=>17693, +33163=>17694, +33164=>17695, +33165=>17696, +33166=>17697, +33168=>17698, +33170=>17699, +33171=>17700, +33172=>17701, +33173=>17702, +33174=>17703, +33175=>17704, +33177=>17705, +33182=>17706, +33183=>17707, +33185=>17708, +33186=>17709, +33188=>17710, +33189=>17711, +33191=>17712, +33195=>17713, +33196=>17714, +33197=>17715, +33198=>17716, +33199=>17717, +33200=>17718, +33201=>17719, +33202=>17720, +33204=>17721, +33205=>17722, +33206=>17723, +33207=>17724, +33208=>17725, +33209=>17726, +33212=>17727, +33220=>17728, +33221=>17729, +33223=>17730, +33224=>17731, +33227=>17732, +33230=>17733, +33232=>17734, +33233=>17735, +33234=>17736, +33235=>17737, +33236=>17738, +33237=>17739, +33238=>17740, +33239=>17741, +33241=>17742, +33243=>17743, +33244=>17744, +33245=>17745, +33246=>17746, +33249=>17747, +33250=>17748, +33252=>17749, +33253=>17750, +33254=>17751, +33257=>17752, +33259=>17753, +33262=>17754, +33263=>17755, +33264=>17756, +33265=>17757, +33266=>17758, +33269=>17759, +33270=>17760, +33271=>17761, +33272=>17762, +33273=>17763, +33277=>17764, +33279=>17765, +33283=>17766, +33291=>17767, +33294=>17768, +33295=>17769, +33297=>17770, +33299=>17771, +33301=>17772, +33302=>17773, +33303=>17774, +33304=>17775, +33305=>17776, +33306=>17777, +33309=>17778, +33312=>17779, +33316=>17780, +33317=>17781, +33318=>17782, +33319=>17783, +33321=>17784, +33326=>17785, +33330=>17786, +33338=>17787, +33340=>17788, +33341=>17789, +33343=>17790, +33344=>17791, +33345=>17792, +33346=>17793, +33347=>17794, +33349=>17795, +33350=>17796, +33352=>17797, +33354=>17798, +33356=>17799, +33357=>17800, +33358=>17801, +33360=>17802, +33361=>17803, +33362=>17804, +33363=>17805, +33364=>17806, +33365=>17807, +33366=>17808, +33367=>17809, +33371=>17810, +33372=>17811, +33373=>17812, +33374=>17813, +33376=>17814, +33377=>17815, +33378=>17816, +33379=>17817, +33381=>17818, +33383=>17819, +33385=>17820, +33386=>17821, +33388=>17822, +33389=>17823, +33397=>17824, +33398=>17825, +12171=>17826, +33400=>17826, +33403=>17827, +33404=>17828, +33408=>17829, +33409=>17830, +33411=>17831, +33413=>17832, +33414=>17833, +33415=>17834, +33417=>17835, +33420=>17836, +33424=>17837, +33427=>17838, +33428=>17839, +33429=>17840, +33430=>17841, +33434=>17842, +33435=>17843, +33438=>17844, +33440=>17845, +33442=>17846, +33443=>17847, +33447=>17848, +33458=>17849, +33461=>17850, +33462=>17851, +33466=>17852, +33468=>17853, +33471=>17854, +33472=>17855, +33474=>17856, +33475=>17857, +33477=>17858, +33478=>17859, +33481=>17860, +33488=>17861, +33494=>17862, +33497=>17863, +33498=>17864, +33501=>17865, +33506=>17866, +33512=>17867, +33513=>17868, +33514=>17869, +33516=>17870, +33517=>17871, +33518=>17872, +33520=>17873, +33522=>17874, +33523=>17875, +33525=>17876, +33526=>17877, +33528=>17878, +33530=>17879, +33532=>17880, +33533=>17881, +33534=>17882, +33535=>17883, +33536=>17884, +33546=>17885, +33547=>17886, +33549=>17887, +33552=>17888, +33554=>17889, +33555=>17890, +33558=>17891, +33560=>17892, +33561=>17893, +33565=>17894, +33566=>17895, +33567=>17896, +33568=>17897, +33569=>17898, +33570=>17899, +33571=>17900, +33572=>17901, +33573=>17902, +33574=>17903, +33577=>17904, +33578=>17905, +33582=>17906, +33584=>17907, +33586=>17908, +33591=>17909, +33595=>17910, +33597=>17911, +33598=>17912, +33599=>17913, +33601=>17914, +33602=>17915, +33604=>17916, +33605=>17917, +33608=>17918, +33610=>17919, +33611=>17920, +33612=>17921, +33613=>17922, +33614=>17923, +33619=>17924, +33621=>17925, +33622=>17926, +33623=>17927, +33624=>17928, +33625=>17929, +33629=>17930, +33634=>17931, +33648=>17932, +33649=>17933, +33650=>17934, +33651=>17935, +33652=>17936, +33653=>17937, +33654=>17938, +33657=>17939, +33658=>17940, +33662=>17941, +33663=>17942, +33664=>17943, +33665=>17944, +33666=>17945, +33667=>17946, +33668=>17947, +33671=>17948, +33672=>17949, +33675=>17950, +33676=>17951, +33677=>17952, +33679=>17953, +33680=>17954, +33681=>17955, +33684=>17956, +33685=>17957, +33687=>17958, +33689=>17959, +33690=>17960, +33693=>17961, +33695=>17962, +33697=>17963, +33699=>17964, +33700=>17965, +33701=>17966, +33702=>17967, +33708=>17968, +33709=>17969, +33710=>17970, +33711=>17971, +33717=>17972, +33723=>17973, +33726=>17974, +33727=>17975, +33730=>17976, +33731=>17977, +33732=>17978, +33734=>17979, +33736=>17980, +33737=>17981, +33739=>17982, +33741=>17983, +33742=>17984, +33744=>17985, +33745=>17986, +33746=>17987, +33747=>17988, +33749=>17989, +33751=>17990, +33753=>17991, +33754=>17992, +33755=>17993, +33758=>17994, +33762=>17995, +33763=>17996, +33764=>17997, +33766=>17998, +33767=>17999, +33768=>18000, +33771=>18001, +33772=>18002, +33773=>18003, +33774=>18004, +33779=>18005, +33780=>18006, +33781=>18007, +33782=>18008, +33783=>18009, +33786=>18010, +33787=>18011, +33788=>18012, +33790=>18013, +33791=>18014, +33792=>18015, +33794=>18016, +33797=>18017, +33800=>18018, +33801=>18019, +33808=>18020, +33810=>18021, +33811=>18022, +33812=>18023, +33813=>18024, +33814=>18025, +33815=>18026, +33817=>18027, +33818=>18028, +33819=>18029, +33822=>18030, +33823=>18031, +33824=>18032, +33825=>18033, +33826=>18034, +33827=>18035, +33833=>18036, +33834=>18037, +33835=>18038, +33837=>18039, +33838=>18040, +33839=>18041, +33840=>18042, +33842=>18043, +33843=>18044, +33844=>18045, +33846=>18046, +33847=>18047, +33849=>18048, +33850=>18049, +33851=>18050, +33854=>18051, +33855=>18052, +33856=>18053, +33857=>18054, +33858=>18055, +33859=>18056, +33860=>18057, +33861=>18058, +33863=>18059, +33864=>18060, +33866=>18061, +33867=>18062, +33868=>18063, +33869=>18064, +33870=>18065, +33871=>18066, +33872=>18067, +33875=>18068, +33876=>18069, +33877=>18070, +33878=>18071, +33880=>18072, +33885=>18073, +33886=>18074, +33887=>18075, +33888=>18076, +33890=>18077, +33893=>18078, +33895=>18079, +33896=>18080, +33898=>18081, +33902=>18082, +33904=>18083, +33906=>18084, +33908=>18085, +33913=>18086, +33915=>18087, +33916=>18088, +33917=>18089, +33918=>18090, +33919=>18091, +33920=>18092, +33921=>18093, +33923=>18094, +33924=>18095, +33925=>18096, +33926=>18097, +33930=>18098, +33933=>18099, +33935=>18100, +33936=>18101, +33937=>18102, +33938=>18103, +33941=>18104, +33942=>18105, +33944=>18106, +33946=>18107, +33947=>18108, +33949=>18109, +33950=>18110, +33951=>18111, +33952=>18112, +33954=>18113, +33955=>18114, +33956=>18115, +33957=>18116, +33958=>18117, +33959=>18118, +33960=>18119, +33961=>18120, +33962=>18121, +33963=>18122, +33964=>18123, +33965=>18124, +33966=>18125, +33968=>18126, +33969=>18127, +33971=>18128, +33973=>18129, +33974=>18130, +33975=>18131, +33979=>18132, +33982=>18133, +33986=>18134, +33987=>18135, +33989=>18136, +33990=>18137, +33991=>18138, +33992=>18139, +33996=>18140, +33998=>18141, +33999=>18142, +34002=>18143, +34004=>18144, +34005=>18145, +34007=>18146, +34008=>18147, +34009=>18148, +34010=>18149, +34011=>18150, +34012=>18151, +34014=>18152, +34017=>18153, +34018=>18154, +34020=>18155, +34023=>18156, +34024=>18157, +34025=>18158, +34026=>18159, +34027=>18160, +34029=>18161, +34033=>18162, +34034=>18163, +34035=>18164, +34036=>18165, +34037=>18166, +34038=>18167, +34039=>18168, +34040=>18169, +34041=>18170, +34042=>18171, +34043=>18172, +34046=>18173, +34048=>18174, +34049=>18175, +34050=>18176, +34051=>18177, +34052=>18178, +34053=>18179, +34054=>18180, +34055=>18181, +34056=>18182, +34057=>18183, +34058=>18184, +34059=>18185, +34061=>18186, +34062=>18187, +34063=>18188, +34064=>18189, +34066=>18190, +34069=>18191, +34070=>18192, +34072=>18193, +34073=>18194, +34075=>18195, +34076=>18196, +34077=>18197, +34080=>18198, +34082=>18199, +34084=>18200, +34085=>18201, +34087=>18202, +34088=>18203, +34089=>18204, +34090=>18205, +34094=>18206, +34095=>18207, +34096=>18208, +34097=>18209, +34098=>18210, +34099=>18211, +34100=>18212, +34101=>18213, +34102=>18214, +34110=>18215, +34111=>18216, +34112=>18217, +34114=>18218, +34116=>18219, +34117=>18220, +34119=>18221, +34123=>18222, +34124=>18223, +34125=>18224, +34127=>18225, +34128=>18226, +34129=>18227, +34132=>18228, +34135=>18229, +34138=>18230, +34139=>18231, +34140=>18232, +34141=>18233, +34143=>18234, +34144=>18235, +34145=>18236, +34147=>18237, +34149=>18238, +34150=>18239, +34151=>18240, +34155=>18241, +34156=>18242, +34158=>18243, +34159=>18244, +34160=>18245, +34161=>18246, +34163=>18247, +34165=>18248, +34166=>18249, +34168=>18250, +34172=>18251, +34173=>18252, +34175=>18253, +34176=>18254, +34177=>18255, +34178=>18256, +34179=>18257, +34182=>18258, +34185=>18259, +34187=>18260, +34189=>18261, +34190=>18262, +34192=>18263, +34194=>18264, +34195=>18265, +34197=>18266, +34198=>18267, +34199=>18268, +34200=>18269, +34201=>18270, +34202=>18271, +34205=>18272, +34206=>18273, +34208=>18274, +34209=>18275, +34210=>18276, +34211=>18277, +34213=>18278, +34215=>18279, +34219=>18280, +34220=>18281, +34221=>18282, +34225=>18283, +34226=>18284, +34227=>18285, +34228=>18286, +34229=>18287, +34230=>18288, +34232=>18289, +34235=>18290, +34236=>18291, +34237=>18292, +34238=>18293, +34239=>18294, +34240=>18295, +34242=>18296, +34243=>18297, +34244=>18298, +34245=>18299, +34246=>18300, +34247=>18301, +34248=>18302, +34250=>18303, +34251=>18304, +34252=>18305, +34257=>18306, +34258=>18307, +34260=>18308, +34262=>18309, +34263=>18310, +34264=>18311, +34265=>18312, +34266=>18313, +34267=>18314, +34270=>18315, +34271=>18316, +34272=>18317, +34273=>18318, +34274=>18319, +34275=>18320, +34278=>18321, +34279=>18322, +34280=>18323, +34283=>18324, +34284=>18325, +34285=>18326, +34286=>18327, +34287=>18328, +34288=>18329, +34289=>18330, +34290=>18331, +34291=>18332, +34293=>18333, +34295=>18334, +34296=>18335, +34300=>18336, +34301=>18337, +34302=>18338, +34304=>18339, +34305=>18340, +34306=>18341, +34307=>18342, +34312=>18343, +34313=>18344, +34314=>18345, +34316=>18346, +34317=>18347, +34318=>18348, +34319=>18349, +34320=>18350, +34322=>18351, +34323=>18352, +34324=>18353, +34325=>18354, +34327=>18355, +34328=>18356, +34329=>18357, +34331=>18358, +34332=>18359, +34333=>18360, +34335=>18361, +34336=>18362, +34337=>18363, +34339=>18364, +34340=>18365, +34341=>18366, +34342=>18367, +34344=>18368, +34346=>18369, +34347=>18370, +34348=>18371, +34350=>18372, +34351=>18373, +34352=>18374, +34353=>18375, +34354=>18376, +34355=>18377, +34356=>18378, +34357=>18379, +34358=>18380, +34359=>18381, +34361=>18382, +34363=>18383, +34365=>18384, +34366=>18385, +34368=>18386, +34369=>18387, +34370=>18388, +34371=>18389, +34372=>18390, +34373=>18391, +34374=>18392, +34375=>18393, +34376=>18394, +34377=>18395, +34378=>18396, +34379=>18397, +34380=>18398, +34386=>18399, +34387=>18400, +34390=>18401, +34391=>18402, +34392=>18403, +34393=>18404, +34395=>18405, +34397=>18406, +34400=>18407, +34401=>18408, +34403=>18409, +34404=>18410, +34405=>18411, +34406=>18412, +34408=>18413, +34409=>18414, +34410=>18415, +34413=>18416, +34415=>18417, +34416=>18418, +34418=>18419, +34419=>18420, +34420=>18421, +34421=>18422, +34422=>18423, +34423=>18424, +34424=>18425, +34435=>18426, +34436=>18427, +34437=>18428, +34438=>18429, +34439=>18430, +34440=>18431, +34441=>18432, +34446=>18433, +34447=>18434, +34448=>18435, +34449=>18436, +34450=>18437, +34452=>18438, +34454=>18439, +34455=>18440, +34456=>18441, +34457=>18442, +34458=>18443, +34459=>18444, +34462=>18445, +34463=>18446, +34464=>18447, +34465=>18448, +34466=>18449, +34469=>18450, +34470=>18451, +34475=>18452, +34477=>18453, +34478=>18454, +34482=>18455, +34483=>18456, +34487=>18457, +34488=>18458, +34489=>18459, +34491=>18460, +34492=>18461, +34493=>18462, +34494=>18463, +34495=>18464, +34497=>18465, +34498=>18466, +34499=>18467, +34501=>18468, +34504=>18469, +34508=>18470, +34509=>18471, +34514=>18472, +34515=>18473, +34517=>18474, +34518=>18475, +34519=>18476, +34522=>18477, +34524=>18478, +34525=>18479, +34528=>18480, +34529=>18481, +34530=>18482, +34531=>18483, +34533=>18484, +34534=>18485, +34535=>18486, +34536=>18487, +34538=>18488, +34539=>18489, +34540=>18490, +34543=>18491, +34549=>18492, +34550=>18493, +34551=>18494, +34555=>18495, +34556=>18496, +34557=>18497, +34559=>18498, +34561=>18499, +34564=>18500, +34565=>18501, +34571=>18502, +34572=>18503, +34574=>18504, +34575=>18505, +34576=>18506, +34577=>18507, +34580=>18508, +34582=>18509, +34585=>18510, +34587=>18511, +34589=>18512, +34591=>18513, +34592=>18514, +34596=>18515, +34598=>18516, +34599=>18517, +34600=>18518, +34602=>18519, +34603=>18520, +34604=>18521, +34605=>18522, +34607=>18523, +34608=>18524, +34610=>18525, +34611=>18526, +34613=>18527, +34614=>18528, +34616=>18529, +34617=>18530, +34618=>18531, +34620=>18532, +34621=>18533, +34624=>18534, +34625=>18535, +34626=>18536, +34627=>18537, +34628=>18538, +34629=>18539, +34630=>18540, +34634=>18541, +34635=>18542, +34637=>18543, +34639=>18544, +34640=>18545, +34641=>18546, +34642=>18547, +34644=>18548, +34646=>18549, +34648=>18550, +34650=>18551, +34651=>18552, +34652=>18553, +34653=>18554, +34654=>18555, +34655=>18556, +34657=>18557, +34658=>18558, +34663=>18559, +34664=>18560, +34665=>18561, +34666=>18562, +34667=>18563, +34668=>18564, +34669=>18565, +34671=>18566, +34673=>18567, +34674=>18568, +34675=>18569, +34677=>18570, +34679=>18571, +34681=>18572, +34682=>18573, +34687=>18574, +34688=>18575, +34689=>18576, +34694=>18577, +34695=>18578, +34697=>18579, +34698=>18580, +34700=>18581, +34702=>18582, +34703=>18583, +34704=>18584, +34705=>18585, +34706=>18586, +34708=>18587, +34709=>18588, +34710=>18589, +34712=>18590, +34713=>18591, +34714=>18592, +34715=>18593, +34716=>18594, +34717=>18595, +34720=>18596, +34721=>18597, +34723=>18598, +34724=>18599, +34725=>18600, +34726=>18601, +34727=>18602, +34729=>18603, +34730=>18604, +34734=>18605, +34736=>18606, +34737=>18607, +34738=>18608, +34740=>18609, +34742=>18610, +34743=>18611, +34744=>18612, +34745=>18613, +34748=>18614, +34750=>18615, +34751=>18616, +34753=>18617, +34754=>18618, +34755=>18619, +34757=>18620, +34759=>18621, +34761=>18622, +34764=>18623, +34765=>18624, +34767=>18625, +34768=>18626, +34772=>18627, +34773=>18628, +34774=>18629, +34775=>18630, +34776=>18631, +34777=>18632, +34778=>18633, +34780=>18634, +34781=>18635, +34782=>18636, +34783=>18637, +34785=>18638, +34786=>18639, +34788=>18640, +34790=>18641, +34791=>18642, +34792=>18643, +34793=>18644, +34795=>18645, +34797=>18646, +34800=>18647, +34801=>18648, +34803=>18649, +34804=>18650, +34805=>18651, +34807=>18652, +34808=>18653, +34810=>18654, +34812=>18655, +34813=>18656, +34815=>18657, +34816=>18658, +34817=>18659, +34818=>18660, +34820=>18661, +34823=>18662, +34824=>18663, +34825=>18664, +34827=>18665, +34828=>18666, +34829=>18667, +34830=>18668, +34831=>18669, +34834=>18670, +34836=>18671, +34839=>18672, +34840=>18673, +34841=>18674, +34842=>18675, +34844=>18676, +34845=>18677, +34846=>18678, +34848=>18679, +34852=>18680, +34853=>18681, +34854=>18682, +34855=>18683, +34856=>18684, +34857=>18685, +34858=>18686, +34859=>18687, +34860=>18688, +34861=>18689, +34862=>18690, +34863=>18691, +34864=>18692, +34867=>18693, +34868=>18694, +34869=>18695, +34871=>18696, +34872=>18697, +34874=>18698, +34877=>18699, +34878=>18700, +34879=>18701, +34881=>18702, +34882=>18703, +34883=>18704, +34887=>18705, +34888=>18706, +34889=>18707, +34891=>18708, +34894=>18709, +34895=>18710, +34896=>18711, +34897=>18712, +34898=>18713, +34901=>18714, +34902=>18715, +34904=>18716, +34906=>18717, +34908=>18718, +34910=>18719, +34911=>18720, +34912=>18721, +34918=>18722, +34919=>18723, +34922=>18724, +34925=>18725, +34927=>18726, +34929=>18727, +34931=>18728, +34932=>18729, +34933=>18730, +34934=>18731, +34936=>18732, +34938=>18733, +34939=>18734, +34940=>18735, +34944=>18736, +34947=>18737, +34950=>18738, +34951=>18739, +34953=>18740, +34954=>18741, +34956=>18742, +34958=>18743, +34959=>18744, +34960=>18745, +34961=>18746, +34963=>18747, +34964=>18748, +34965=>18749, +34967=>18750, +34968=>18751, +34969=>18752, +34970=>18753, +34971=>18754, +34973=>18755, +34974=>18756, +34975=>18757, +34976=>18758, +34977=>18759, +34979=>18760, +34981=>18761, +34982=>18762, +34983=>18763, +34984=>18764, +34985=>18765, +34986=>18766, +34988=>18767, +34990=>18768, +34991=>18769, +34992=>18770, +34994=>18771, +34995=>18772, +34996=>18773, +34997=>18774, +34998=>18775, +35000=>18776, +35001=>18777, +35002=>18778, +35003=>18779, +35005=>18780, +35006=>18781, +35007=>18782, +35008=>18783, +35011=>18784, +35012=>18785, +35015=>18786, +35016=>18787, +35019=>18788, +35020=>18789, +35021=>18790, +35024=>18791, +35025=>18792, +35027=>18793, +35030=>18794, +35031=>18795, +35034=>18796, +35035=>18797, +35038=>18798, +35040=>18799, +35041=>18800, +35046=>18801, +35047=>18802, +35049=>18803, +35050=>18804, +35051=>18805, +35052=>18806, +35053=>18807, +35054=>18808, +35055=>18809, +35058=>18810, +35061=>18811, +35062=>18812, +35063=>18813, +35066=>18814, +35067=>18815, +35071=>18816, +35072=>18817, +35073=>18818, +35075=>18819, +35076=>18820, +35077=>18821, +35078=>18822, +35080=>18823, +35081=>18824, +35083=>18825, +35084=>18826, +35085=>18827, +35086=>18828, +35087=>18829, +35089=>18830, +35092=>18831, +35093=>18832, +35094=>18833, +35095=>18834, +35096=>18835, +35100=>18836, +35101=>18837, +35102=>18838, +35103=>18839, +35104=>18840, +35106=>18841, +35107=>18842, +35108=>18843, +35110=>18844, +35111=>18845, +35112=>18846, +35113=>18847, +35116=>18848, +35117=>18849, +35118=>18850, +35119=>18851, +35121=>18852, +35125=>18853, +35127=>18854, +35129=>18855, +35130=>18856, +35132=>18857, +35133=>18858, +35134=>18859, +35135=>18860, +35136=>18861, +35138=>18862, +35139=>18863, +35141=>18864, +35142=>18865, +35144=>18866, +35145=>18867, +35146=>18868, +35147=>18869, +35148=>18870, +35149=>18871, +35150=>18872, +35151=>18873, +35152=>18874, +35153=>18875, +35154=>18876, +35155=>18877, +35156=>18878, +35157=>18879, +35159=>18880, +35160=>18881, +35161=>18882, +35162=>18883, +35163=>18884, +35164=>18885, +35169=>18886, +35170=>18887, +35171=>18888, +35173=>18889, +35175=>18890, +35176=>18891, +35177=>18892, +35179=>18893, +35181=>18894, +35182=>18895, +35184=>18896, +35185=>18897, +35187=>18898, +35188=>18899, +35189=>18900, +35190=>18901, +35191=>18902, +35192=>18903, +35193=>18904, +35194=>18905, +35196=>18906, +35197=>18907, +12177=>18908, +35198=>18908, +35200=>18909, +35202=>18910, +35204=>18911, +35205=>18912, +35207=>18913, +35208=>18914, +35209=>18915, +35210=>18916, +35212=>18917, +35213=>18918, +35214=>18919, +35216=>18920, +35217=>18921, +35218=>18922, +35220=>18923, +35221=>18924, +35223=>18925, +35225=>18926, +35226=>18927, +35227=>18928, +35228=>18929, +35229=>18930, +35230=>18931, +35231=>18932, +35232=>18933, +35234=>18934, +35235=>18935, +35236=>18936, +35237=>18937, +35239=>18938, +35240=>18939, +35241=>18940, +35243=>18941, +35245=>18942, +35246=>18943, +35248=>18944, +35249=>18945, +35251=>18946, +35252=>18947, +35253=>18948, +35254=>18949, +35256=>18950, +35257=>18951, +35259=>18952, +35260=>18953, +35262=>18954, +35267=>18955, +35277=>18956, +35283=>18957, +35284=>18958, +35285=>18959, +35287=>18960, +35288=>18961, +35289=>18962, +35291=>18963, +35293=>18964, +35295=>18965, +35296=>18966, +35297=>18967, +35298=>18968, +35300=>18969, +35303=>18970, +35304=>18971, +35305=>18972, +35306=>18973, +35308=>18974, +35309=>18975, +35310=>18976, +35312=>18977, +35313=>18978, +35314=>18979, +35317=>18980, +35319=>18981, +35321=>18982, +35322=>18983, +35323=>18984, +35324=>18985, +35325=>18986, +35326=>18987, +35327=>18988, +35332=>18989, +35333=>18990, +35334=>18991, +35337=>18992, +35339=>18993, +35341=>18994, +35343=>18995, +35345=>18996, +35346=>18997, +35348=>18998, +35351=>18999, +35353=>19000, +35354=>19001, +35356=>19002, +35358=>19003, +35360=>19004, +35361=>19005, +35362=>19006, +35364=>19007, +35366=>19008, +35367=>19009, +35368=>19010, +35369=>19011, +35371=>19012, +35372=>19013, +35374=>19014, +35375=>19015, +35376=>19016, +35378=>19017, +35379=>19018, +35381=>19019, +35383=>19020, +35384=>19021, +35385=>19022, +35387=>19023, +35388=>19024, +35389=>19025, +35391=>19026, +35392=>19027, +35394=>19028, +35395=>19029, +35396=>19030, +35397=>19031, +35399=>19032, +35401=>19033, +35402=>19034, +35403=>19035, +35404=>19036, +35405=>19037, +35407=>19038, +35409=>19039, +35411=>19040, +35414=>19041, +35415=>19042, +35417=>19043, +35418=>19044, +35420=>19045, +35421=>19046, +35423=>19047, +35424=>19048, +35428=>19049, +35429=>19050, +35431=>19051, +35432=>19052, +35434=>19053, +35439=>19054, +35444=>19055, +35446=>19056, +35447=>19057, +35448=>19058, +35450=>19059, +35451=>19060, +35453=>19061, +35454=>19062, +35456=>19063, +35457=>19064, +35458=>19065, +35459=>19066, +35464=>19067, +35467=>19068, +35468=>19069, +35470=>19070, +35471=>19071, +35472=>19072, +35476=>19073, +35478=>19074, +35479=>19075, +35481=>19076, +35483=>19077, +35484=>19078, +35485=>19079, +35487=>19080, +35490=>19081, +35495=>19082, +35497=>19083, +35498=>19084, +35499=>19085, +35501=>19086, +35502=>19087, +35503=>19088, +35505=>19089, +35507=>19090, +35508=>19091, +35509=>19092, +35511=>19093, +35512=>19094, +35514=>19095, +35515=>19096, +35517=>19097, +35518=>19098, +35520=>19099, +35521=>19100, +35523=>19101, +35525=>19102, +35526=>19103, +35528=>19104, +35530=>19105, +35532=>19106, +35534=>19107, +35536=>19108, +35539=>19109, +35540=>19110, +35541=>19111, +35544=>19112, +35545=>19113, +35546=>19114, +35549=>19115, +35551=>19116, +35552=>19117, +35553=>19118, +35555=>19119, +35557=>19120, +35560=>19121, +35561=>19122, +35562=>19123, +35564=>19124, +35567=>19125, +35568=>19126, +35570=>19127, +35572=>19128, +35573=>19129, +35577=>19130, +35579=>19131, +35581=>19132, +35583=>19133, +35587=>19134, +35590=>19135, +35592=>19136, +35593=>19137, +35595=>19138, +35596=>19139, +35597=>19140, +35599=>19141, +35601=>19142, +35602=>19143, +35603=>19144, +35605=>19145, +35608=>19146, +35612=>19147, +35614=>19148, +35615=>19149, +35616=>19150, +35618=>19151, +35619=>19152, +35620=>19153, +35621=>19154, +35623=>19155, +35625=>19156, +35626=>19157, +35630=>19158, +35631=>19159, +35632=>19160, +35633=>19161, +35634=>19162, +35636=>19163, +35637=>19164, +35638=>19165, +35639=>19166, +35640=>19167, +35642=>19168, +35643=>19169, +35644=>19170, +35645=>19171, +35647=>19172, +35648=>19173, +35649=>19174, +35650=>19175, +35651=>19176, +35652=>19177, +35653=>19178, +35654=>19179, +35655=>19180, +35656=>19181, +35658=>19182, +35659=>19183, +35660=>19184, +35661=>19185, +35664=>19186, +35665=>19187, +35666=>19188, +35667=>19189, +35668=>19190, +35669=>19191, +35671=>19192, +35675=>19193, +35677=>19194, +35678=>19195, +35679=>19196, +35680=>19197, +35681=>19198, +35682=>19199, +35683=>19200, +35684=>19201, +35685=>19202, +35687=>19203, +35688=>19204, +35689=>19205, +35690=>19206, +35693=>19207, +35694=>19208, +35697=>19209, +35698=>19210, +35699=>19211, +35701=>19212, +35702=>19213, +35704=>19214, +35705=>19215, +35706=>19216, +35707=>19217, +35708=>19218, +35710=>19219, +35711=>19220, +35713=>19221, +35714=>19222, +35715=>19223, +35716=>19224, +35717=>19225, +35718=>19226, +35719=>19227, +35720=>19228, +35721=>19229, +35723=>19230, +35724=>19231, +35725=>19232, +35727=>19233, +35728=>19234, +35729=>19235, +35732=>19236, +35735=>19237, +35736=>19238, +35737=>19239, +35738=>19240, +35739=>19241, +35741=>19242, +35743=>19243, +35756=>19244, +35761=>19245, +35771=>19246, +35783=>19247, +35792=>19248, +35818=>19249, +35849=>19250, +35870=>19251, +35896=>19252, +35897=>19253, +35898=>19254, +35899=>19255, +35900=>19256, +35901=>19257, +35902=>19258, +35903=>19259, +35904=>19260, +35906=>19261, +35907=>19262, +35908=>19263, +35909=>19264, +35914=>19265, +35915=>19266, +35917=>19267, +35918=>19268, +35919=>19269, +35921=>19270, +35922=>19271, +35923=>19272, +35924=>19273, +35926=>19274, +35927=>19275, +35928=>19276, +35929=>19277, +35931=>19278, +35932=>19279, +35933=>19280, +35934=>19281, +35935=>19282, +35936=>19283, +35939=>19284, +35940=>19285, +35941=>19286, +35942=>19287, +35943=>19288, +35944=>19289, +35945=>19290, +35948=>19291, +35949=>19292, +35950=>19293, +35951=>19294, +35952=>19295, +35953=>19296, +35954=>19297, +35956=>19298, +35957=>19299, +35958=>19300, +35959=>19301, +35963=>19302, +35964=>19303, +35965=>19304, +35966=>19305, +35967=>19306, +35968=>19307, +35969=>19308, +35971=>19309, +35972=>19310, +35974=>19311, +35975=>19312, +35976=>19313, +35979=>19314, +35981=>19315, +35982=>19316, +35983=>19317, +35984=>19318, +35985=>19319, +35986=>19320, +35987=>19321, +35989=>19322, +35990=>19323, +35991=>19324, +35993=>19325, +35994=>19326, +35995=>19327, +35996=>19328, +35999=>19329, +36003=>19330, +36004=>19331, +36005=>19332, +36006=>19333, +36013=>19334, +36014=>19335, +36017=>19336, +36021=>19337, +36025=>19338, +36030=>19339, +36038=>19340, +36041=>19341, +36043=>19342, +36044=>19343, +36045=>19344, +36046=>19345, +36047=>19346, +36048=>19347, +36052=>19348, +36054=>19349, +36055=>19350, +36056=>19351, +36057=>19352, +36059=>19353, +36061=>19354, +36063=>19355, +36069=>19356, +36072=>19357, +36073=>19358, +36078=>19359, +36079=>19360, +36080=>19361, +36081=>19362, +36082=>19363, +36083=>19364, +36085=>19365, +36086=>19366, +36087=>19367, +36088=>19368, +36089=>19369, +36095=>19370, +36096=>19371, +36097=>19372, +36098=>19373, +36099=>19374, +36102=>19375, +36103=>19376, +36105=>19377, +36108=>19378, +36110=>19379, +36113=>19380, +36114=>19381, +36115=>19382, +36116=>19383, +36117=>19384, +36119=>19385, +36120=>19386, +36121=>19387, +36122=>19388, +36128=>19389, +36177=>19390, +36178=>19391, +36183=>19392, +36191=>19393, +36197=>19394, +36200=>19395, +36201=>19396, +36202=>19397, +36204=>19398, +36206=>19399, +36207=>19400, +36209=>19401, +36210=>19402, +36216=>19403, +36217=>19404, +36218=>19405, +36219=>19406, +36220=>19407, +36221=>19408, +36222=>19409, +36223=>19410, +36224=>19411, +36226=>19412, +36227=>19413, +36230=>19414, +36231=>19415, +36232=>19416, +36233=>19417, +36236=>19418, +36237=>19419, +36238=>19420, +36239=>19421, +36240=>19422, +36242=>19423, +36243=>19424, +36246=>19425, +36247=>19426, +36248=>19427, +36250=>19428, +36251=>19429, +36252=>19430, +36253=>19431, +36254=>19432, +36256=>19433, +36257=>19434, +36258=>19435, +36260=>19436, +36261=>19437, +36262=>19438, +36263=>19439, +36265=>19440, +36266=>19441, +36267=>19442, +36268=>19443, +36269=>19444, +36270=>19445, +36271=>19446, +36272=>19447, +36278=>19448, +36279=>19449, +36281=>19450, +36283=>19451, +36285=>19452, +36288=>19453, +36289=>19454, +36290=>19455, +36293=>19456, +36295=>19457, +36296=>19458, +36297=>19459, +36298=>19460, +36301=>19461, +36304=>19462, +36306=>19463, +36307=>19464, +36308=>19465, +36309=>19466, +36312=>19467, +36313=>19468, +36316=>19469, +36320=>19470, +36321=>19471, +36322=>19472, +36325=>19473, +36326=>19474, +36327=>19475, +36329=>19476, +36333=>19477, +36334=>19478, +36336=>19479, +36337=>19480, +36338=>19481, +36340=>19482, +36342=>19483, +36348=>19484, +36350=>19485, +36351=>19486, +36352=>19487, +36353=>19488, +36354=>19489, +36355=>19490, +36356=>19491, +36358=>19492, +36359=>19493, +36360=>19494, +36363=>19495, +36365=>19496, +36366=>19497, +36369=>19498, +36370=>19499, +36371=>19500, +36373=>19501, +36374=>19502, +36375=>19503, +36376=>19504, +36377=>19505, +36378=>19506, +36379=>19507, +36380=>19508, +36384=>19509, +36385=>19510, +36388=>19511, +36389=>19512, +36390=>19513, +36391=>19514, +36392=>19515, +36395=>19516, +36397=>19517, +36400=>19518, +36402=>19519, +36403=>19520, +36406=>19521, +36407=>19522, +36408=>19523, +36411=>19524, +36412=>19525, +36414=>19526, +36415=>19527, +36419=>19528, +36421=>19529, +36422=>19530, +36429=>19531, +36430=>19532, +36431=>19533, +36432=>19534, +36435=>19535, +36436=>19536, +36438=>19537, +36439=>19538, +36440=>19539, +36442=>19540, +36443=>19541, +36444=>19542, +36445=>19543, +36446=>19544, +36447=>19545, +36448=>19546, +36449=>19547, +36450=>19548, +36452=>19549, +36453=>19550, +36455=>19551, +36456=>19552, +36458=>19553, +36459=>19554, +36462=>19555, +36465=>19556, +36467=>19557, +36469=>19558, +36471=>19559, +36472=>19560, +36473=>19561, +36475=>19562, +36477=>19563, +36478=>19564, +36480=>19565, +36482=>19566, +36483=>19567, +36484=>19568, +36486=>19569, +36488=>19570, +36492=>19571, +36494=>19572, +36501=>19573, +36502=>19574, +36503=>19575, +36504=>19576, +36505=>19577, +36507=>19578, +36509=>19579, +36511=>19580, +36512=>19581, +36514=>19582, +36515=>19583, +36516=>19584, +36519=>19585, +36520=>19586, +36521=>19587, +36525=>19588, +36526=>19589, +36528=>19590, +36529=>19591, +36531=>19592, +36532=>19593, +36533=>19594, +36534=>19595, +36535=>19596, +36536=>19597, +36537=>19598, +36539=>19599, +36540=>19600, +36541=>19601, +36542=>19602, +36543=>19603, +36545=>19604, +36546=>19605, +36547=>19606, +36548=>19607, +36549=>19608, +36550=>19609, +36551=>19610, +36552=>19611, +36553=>19612, +36559=>19613, +36560=>19614, +36561=>19615, +36563=>19616, +36565=>19617, +36566=>19618, +36567=>19619, +36568=>19620, +36569=>19621, +36570=>19622, +36572=>19623, +36573=>19624, +36574=>19625, +36576=>19626, +36577=>19627, +36578=>19628, +36579=>19629, +36581=>19630, +36582=>19631, +36583=>19632, +36584=>19633, +36585=>19634, +36586=>19635, +36588=>19636, +36589=>19637, +36590=>19638, +36591=>19639, +36592=>19640, +36593=>19641, +36595=>19642, +36596=>19643, +36597=>19644, +36598=>19645, +36599=>19646, +36605=>19647, +36607=>19648, +36608=>19649, +36609=>19650, +36610=>19651, +36612=>19652, +36614=>19653, +36616=>19654, +36619=>19655, +36620=>19656, +36621=>19657, +36622=>19658, +36623=>19659, +36624=>19660, +36625=>19661, +36627=>19662, +36630=>19663, +36631=>19664, +36632=>19665, +36633=>19666, +36634=>19667, +36640=>19668, +36641=>19669, +36642=>19670, +36643=>19671, +36644=>19672, +36647=>19673, +36648=>19674, +36651=>19675, +36652=>19676, +36653=>19677, +36654=>19678, +36656=>19679, +36657=>19680, +36658=>19681, +36660=>19682, +36661=>19683, +36662=>19684, +36663=>19685, +36665=>19686, +36666=>19687, +36668=>19688, +36669=>19689, +36672=>19690, +36673=>19691, +36675=>19692, +36679=>19693, +36680=>19694, +36682=>19695, +36683=>19696, +36684=>19697, +36687=>19698, +36688=>19699, +36689=>19700, +36690=>19701, +36691=>19702, +36693=>19703, +36694=>19704, +36695=>19705, +36696=>19706, +36697=>19707, +36698=>19708, +36699=>19709, +36700=>19710, +36701=>19711, +36702=>19712, +36704=>19713, +36707=>19714, +36709=>19715, +36714=>19716, +36736=>19717, +36748=>19718, +36754=>19719, +36765=>19720, +36768=>19721, +36769=>19722, +36770=>19723, +36772=>19724, +36773=>19725, +36775=>19726, +36778=>19727, +36780=>19728, +36787=>19729, +36788=>19730, +12193=>19731, +36789=>19731, +36791=>19732, +36792=>19733, +36794=>19734, +36795=>19735, +36796=>19736, +36799=>19737, +36800=>19738, +36803=>19739, +36806=>19740, +36809=>19741, +36810=>19742, +36811=>19743, +36812=>19744, +36813=>19745, +36815=>19746, +36818=>19747, +36822=>19748, +36823=>19749, +36826=>19750, +36832=>19751, +36833=>19752, +36835=>19753, +36839=>19754, +36844=>19755, +36847=>19756, +36849=>19757, +36850=>19758, +36853=>19759, +36854=>19760, +36858=>19761, +36859=>19762, +36860=>19763, +36862=>19764, +36863=>19765, +36871=>19766, +36872=>19767, +36876=>19768, +36878=>19769, +36883=>19770, +36888=>19771, +36892=>19772, +36900=>19773, +36901=>19774, +36903=>19775, +36904=>19776, +36905=>19777, +36906=>19778, +36907=>19779, +36908=>19780, +36912=>19781, +36913=>19782, +36915=>19783, +36916=>19784, +36919=>19785, +36921=>19786, +36922=>19787, +36925=>19788, +36927=>19789, +36928=>19790, +36931=>19791, +36933=>19792, +36934=>19793, +36936=>19794, +36937=>19795, +36938=>19796, +36940=>19797, +36950=>19798, +36953=>19799, +36954=>19800, +36957=>19801, +36959=>19802, +36961=>19803, +36964=>19804, +36966=>19805, +36967=>19806, +36970=>19807, +36971=>19808, +36972=>19809, +36975=>19810, +36976=>19811, +36977=>19812, +36979=>19813, +36982=>19814, +36985=>19815, +36987=>19816, +36990=>19817, +36997=>19818, +36998=>19819, +37001=>19820, +37004=>19821, +37005=>19822, +37006=>19823, +37010=>19824, +37012=>19825, +37014=>19826, +37016=>19827, +37018=>19828, +37020=>19829, +37022=>19830, +37023=>19831, +37024=>19832, +37028=>19833, +37029=>19834, +37031=>19835, +37032=>19836, +37033=>19837, +37035=>19838, +37037=>19839, +37042=>19840, +37047=>19841, +37052=>19842, +37053=>19843, +37055=>19844, +37056=>19845, +37058=>19846, +37059=>19847, +37062=>19848, +37064=>19849, +37065=>19850, +37067=>19851, +37068=>19852, +37069=>19853, +37074=>19854, +37076=>19855, +37077=>19856, +37078=>19857, +37080=>19858, +37081=>19859, +37082=>19860, +37086=>19861, +37088=>19862, +37091=>19863, +37092=>19864, +37093=>19865, +37097=>19866, +37098=>19867, +37100=>19868, +37102=>19869, +37104=>19870, +37105=>19871, +37106=>19872, +37107=>19873, +37110=>19874, +37111=>19875, +37113=>19876, +37114=>19877, +37115=>19878, +37116=>19879, +37119=>19880, +37120=>19881, +37121=>19882, +37123=>19883, +37125=>19884, +37127=>19885, +37128=>19886, +37130=>19887, +37131=>19888, +37132=>19889, +37133=>19890, +37134=>19891, +37135=>19892, +37136=>19893, +37137=>19894, +37139=>19895, +37141=>19896, +37143=>19897, +37144=>19898, +37146=>19899, +37147=>19900, +37148=>19901, +37149=>19902, +37151=>19903, +37152=>19904, +37153=>19905, +37156=>19906, +37157=>19907, +37158=>19908, +37160=>19909, +37161=>19910, +37162=>19911, +37163=>19912, +37164=>19913, +37166=>19914, +37171=>19915, +37173=>19916, +37175=>19917, +37176=>19918, +37179=>19919, +37180=>19920, +37181=>19921, +37182=>19922, +37183=>19923, +37184=>19924, +37185=>19925, +37186=>19926, +37188=>19927, +37189=>19928, +37191=>19929, +37201=>19930, +37203=>19931, +37204=>19932, +37205=>19933, +37206=>19934, +37208=>19935, +37209=>19936, +37211=>19937, +37212=>19938, +37215=>19939, +37216=>19940, +37222=>19941, +37223=>19942, +37224=>19943, +37227=>19944, +37229=>19945, +37235=>19946, +37242=>19947, +37243=>19948, +37244=>19949, +37248=>19950, +37249=>19951, +37250=>19952, +37251=>19953, +37252=>19954, +37254=>19955, +37256=>19956, +37258=>19957, +37262=>19958, +37263=>19959, +37267=>19960, +37268=>19961, +37269=>19962, +37271=>19963, +37272=>19964, +37273=>19965, +37277=>19966, +37278=>19967, +37279=>19968, +37280=>19969, +37281=>19970, +37284=>19971, +37285=>19972, +37286=>19973, +37287=>19974, +37288=>19975, +37289=>19976, +37296=>19977, +37297=>19978, +37298=>19979, +37299=>19980, +37302=>19981, +37303=>19982, +37304=>19983, +37305=>19984, +37307=>19985, +37308=>19986, +37309=>19987, +37310=>19988, +37311=>19989, +37314=>19990, +37316=>19991, +12196=>19992, +37318=>19992, +37320=>19993, +37328=>19994, +37334=>19995, +37338=>19996, +37339=>19997, +37342=>19998, +37343=>19999, +37344=>20000, +37345=>20001, +37346=>20002, +37349=>20003, +37350=>20004, +37352=>20005, +37354=>20006, +37355=>20007, +37356=>20008, +37357=>20009, +37358=>20010, +37359=>20011, +37360=>20012, +37361=>20013, +37362=>20014, +37363=>20015, +37364=>20016, +37366=>20017, +37368=>20018, +37371=>20019, +37372=>20020, +37373=>20021, +37374=>20022, +37375=>20023, +37378=>20024, +37379=>20025, +37381=>20026, +37382=>20027, +37383=>20028, +37386=>20029, +37387=>20030, +37388=>20031, +37391=>20032, +37394=>20033, +37395=>20034, +37398=>20035, +37399=>20036, +37400=>20037, +37401=>20038, +37402=>20039, +37403=>20040, +37404=>20041, +37405=>20042, +37407=>20043, +37408=>20044, +37409=>20045, +37410=>20046, +37412=>20047, +37416=>20048, +37417=>20049, +37418=>20050, +37419=>20051, +37420=>20052, +37421=>20053, +37423=>20054, +37425=>20055, +37426=>20056, +37429=>20057, +37430=>20058, +37435=>20059, +37436=>20060, +37441=>20061, +37442=>20062, +37443=>20063, +37444=>20064, +37446=>20065, +37447=>20066, +37450=>20067, +37451=>20068, +37452=>20069, +37454=>20070, +37455=>20071, +37456=>20072, +37458=>20073, +37459=>20074, +37460=>20075, +37462=>20076, +37464=>20077, +37465=>20078, +37468=>20079, +37469=>20080, +37471=>20081, +37472=>20082, +37473=>20083, +37475=>20084, +37476=>20085, +37477=>20086, +37479=>20087, +37480=>20088, +37481=>20089, +37482=>20090, +37483=>20091, +37486=>20092, +37487=>20093, +37488=>20094, +37489=>20095, +37490=>20096, +37491=>20097, +37493=>20098, +37494=>20099, +37495=>20100, +37497=>20101, +37500=>20102, +37501=>20103, +37502=>20104, +37505=>20105, +37506=>20106, +37508=>20107, +37510=>20108, +37511=>20109, +37512=>20110, +37513=>20111, +37514=>20112, +37515=>20113, +37516=>20114, +37517=>20115, +37519=>20116, +37520=>20117, +37522=>20118, +37524=>20119, +37525=>20120, +37527=>20121, +37529=>20122, +37531=>20123, +37533=>20124, +37534=>20125, +37535=>20126, +37537=>20127, +37538=>20128, +37540=>20129, +37543=>20130, +37549=>20131, +37551=>20132, +37552=>20133, +37554=>20134, +37555=>20135, +37556=>20136, +37557=>20137, +37558=>20138, +37560=>20139, +37562=>20140, +37565=>20141, +37566=>20142, +37567=>20143, +37568=>20144, +37570=>20145, +37572=>20146, +37574=>20147, +37577=>20148, +37578=>20149, +37579=>20150, +37581=>20151, +37582=>20152, +37584=>20153, +37585=>20154, +37587=>20155, +37588=>20156, +37589=>20157, +37590=>20158, +37591=>20159, +37592=>20160, +37593=>20161, +37594=>20162, +37595=>20163, +37596=>20164, +37598=>20165, +37600=>20166, +37601=>20167, +37602=>20168, +37607=>20169, +37609=>20170, +37611=>20171, +37612=>20172, +37618=>20173, +37619=>20174, +37620=>20175, +37621=>20176, +37623=>20177, +37625=>20178, +37626=>20179, +37627=>20180, +37629=>20181, +37630=>20182, +37631=>20183, +37632=>20184, +37634=>20185, +37635=>20186, +37636=>20187, +37637=>20188, +37641=>20189, +37642=>20190, +37643=>20191, +37644=>20192, +37645=>20193, +37646=>20194, +37647=>20195, +37649=>20196, +37651=>20197, +37652=>20198, +37654=>20199, +37655=>20200, +37660=>20201, +37661=>20202, +37662=>20203, +37665=>20204, +37667=>20205, +37668=>20206, +37669=>20207, +37671=>20208, +37673=>20209, +37674=>20210, +37676=>20211, +37677=>20212, +37680=>20213, +37681=>20214, +37684=>20215, +37685=>20216, +37687=>20217, +37689=>20218, +37690=>20219, +37691=>20220, +37692=>20221, +37693=>20222, +37695=>20223, +37698=>20224, +37700=>20225, +37701=>20226, +37704=>20227, +37705=>20228, +37706=>20229, +37708=>20230, +37710=>20231, +37711=>20232, +37712=>20233, +37713=>20234, +37714=>20235, +37715=>20236, +37717=>20237, +37718=>20238, +37719=>20239, +37721=>20240, +37722=>20241, +37724=>20242, +37725=>20243, +37726=>20244, +37727=>20245, +37728=>20246, +37729=>20247, +37730=>20248, +37731=>20249, +37734=>20250, +37735=>20251, +37736=>20252, +37739=>20253, +37741=>20254, +37742=>20255, +37743=>20256, +37745=>20257, +37746=>20258, +37747=>20259, +37748=>20260, +37751=>20261, +37752=>20262, +37753=>20263, +37755=>20264, +37756=>20265, +37757=>20266, +37759=>20267, +37760=>20268, +37761=>20269, +37763=>20270, +37765=>20271, +37766=>20272, +37768=>20273, +37769=>20274, +37771=>20275, +37772=>20276, +37773=>20277, +37774=>20278, +37776=>20279, +37777=>20280, +37778=>20281, +37779=>20282, +37780=>20283, +37781=>20284, +37783=>20285, +37785=>20286, +37786=>20287, +37787=>20288, +37788=>20289, +37789=>20290, +37790=>20291, +37791=>20292, +37792=>20293, +37793=>20294, +37796=>20295, +37797=>20296, +37800=>20297, +37803=>20298, +37805=>20299, +37807=>20300, +37809=>20301, +37810=>20302, +37812=>20303, +37814=>20304, +37815=>20305, +37817=>20306, +37818=>20307, +37819=>20308, +37820=>20309, +37821=>20310, +37822=>20311, +37824=>20312, +37825=>20313, +37826=>20314, +37828=>20315, +37829=>20316, +37830=>20317, +37833=>20318, +37835=>20319, +37838=>20320, +37839=>20321, +37840=>20322, +37842=>20323, +37843=>20324, +37844=>20325, +37845=>20326, +37849=>20327, +37850=>20328, +37851=>20329, +37856=>20330, +37859=>20331, +37861=>20332, +37862=>20333, +37863=>20334, +37865=>20335, +37866=>20336, +37867=>20337, +37868=>20338, +37869=>20339, +37870=>20340, +37871=>20341, +37872=>20342, +37873=>20343, +37874=>20344, +37875=>20345, +37876=>20346, +37878=>20347, +37880=>20348, +37882=>20349, +37883=>20350, +37884=>20351, +37885=>20352, +37886=>20353, +37887=>20354, +37888=>20355, +37889=>20356, +37890=>20357, +37892=>20358, +37893=>20359, +37894=>20360, +37895=>20361, +37896=>20362, +37897=>20363, +37898=>20364, +37900=>20365, +37901=>20366, +37902=>20367, +37903=>20368, +37905=>20369, +37909=>20370, +37910=>20371, +37911=>20372, +37914=>20373, +37915=>20374, +37916=>20375, +37918=>20376, +37919=>20377, +37921=>20378, +37922=>20379, +37923=>20380, +37924=>20381, +37925=>20382, +37929=>20383, +37930=>20384, +37931=>20385, +37932=>20386, +37933=>20387, +37935=>20388, +37936=>20389, +37937=>20390, +37940=>20391, +37942=>20392, +37943=>20393, +37945=>20394, +37947=>20395, +37948=>20396, +37949=>20397, +37952=>20398, +37953=>20399, +37954=>20400, +37955=>20401, +37957=>20402, +37958=>20403, +37959=>20404, +37960=>20405, +37961=>20406, +37963=>20407, +37965=>20408, +37966=>20409, +37967=>20410, +37968=>20411, +37969=>20412, +37971=>20413, +37973=>20414, +37974=>20415, +37975=>20416, +37976=>20417, +37977=>20418, +37978=>20419, +37979=>20420, +37980=>20421, +37981=>20422, +37982=>20423, +37983=>20424, +37985=>20425, +37986=>20426, +37988=>20427, +37990=>20428, +37991=>20429, +37992=>20430, +37993=>20431, +37994=>20432, +37996=>20433, +37998=>20434, +37999=>20435, +38001=>20436, +38003=>20437, +38004=>20438, +38005=>20439, +38006=>20440, +38008=>20441, +38010=>20442, +38011=>20443, +38016=>20444, +38017=>20445, +38018=>20446, +38019=>20447, +38020=>20448, +38033=>20449, +38038=>20450, +38040=>20451, +38087=>20452, +38095=>20453, +38099=>20454, +38100=>20455, +38106=>20456, +38118=>20457, +38139=>20458, +38172=>20459, +38176=>20460, +38183=>20461, +38195=>20462, +38205=>20463, +38211=>20464, +38216=>20465, +38219=>20466, +38229=>20467, +38234=>20468, +38240=>20469, +38254=>20470, +38260=>20471, +38261=>20472, +38264=>20473, +38265=>20474, +38266=>20475, +38267=>20476, +38268=>20477, +38269=>20478, +38270=>20479, +38273=>20480, +38276=>20481, +38277=>20482, +38279=>20483, +38280=>20484, +38282=>20485, +38285=>20486, +38288=>20487, +38290=>20488, +38293=>20489, +38294=>20490, +38295=>20491, +38297=>20492, +38298=>20493, +38299=>20494, +38300=>20495, +38301=>20496, +38302=>20497, +38303=>20498, +38304=>20499, +38306=>20500, +38310=>20501, +38311=>20502, +38314=>20503, +38318=>20504, +38319=>20505, +38320=>20506, +38321=>20507, +38323=>20508, +38324=>20509, +38325=>20510, +38327=>20511, +38328=>20512, +38330=>20513, +38336=>20514, +38337=>20515, +38338=>20516, +38340=>20517, +38341=>20518, +38343=>20519, +38345=>20520, +38349=>20521, +38350=>20522, +38351=>20523, +38353=>20524, +38354=>20525, +38355=>20526, +38359=>20527, +38360=>20528, +38361=>20529, +38362=>20530, +38363=>20531, +38365=>20532, +38367=>20533, +38368=>20534, +38371=>20535, +38372=>20536, +38374=>20537, +38375=>20538, +38380=>20539, +38399=>20540, +38407=>20541, +38419=>20542, +38424=>20543, +38427=>20544, +38430=>20545, +38432=>20546, +38435=>20547, +38436=>20548, +38437=>20549, +38438=>20550, +38439=>20551, +38440=>20552, +38441=>20553, +38443=>20554, +38444=>20555, +38445=>20556, +38447=>20557, +38448=>20558, +38455=>20559, +38456=>20560, +38457=>20561, +38458=>20562, +38462=>20563, +38465=>20564, +38467=>20565, +38474=>20566, +38478=>20567, +38479=>20568, +38481=>20569, +38482=>20570, +38483=>20571, +38486=>20572, +38487=>20573, +38489=>20574, +38490=>20575, +38492=>20576, +38494=>20577, +38496=>20578, +38501=>20579, +38502=>20580, +38507=>20581, +38509=>20582, +38510=>20583, +38511=>20584, +38513=>20585, +38521=>20586, +38522=>20587, +38523=>20588, +38524=>20589, +38526=>20590, +38527=>20591, +38528=>20592, +38529=>20593, +38530=>20594, +38531=>20595, +38532=>20596, +38535=>20597, +38537=>20598, +38540=>20599, +38545=>20600, +38546=>20601, +38547=>20602, +38550=>20603, +38554=>20604, +38557=>20605, +38558=>20606, +38559=>20607, +38560=>20608, +38561=>20609, +38562=>20610, +63985=>20611, +38563=>20611, +38564=>20612, +38565=>20613, +38566=>20614, +38569=>20615, +38571=>20616, +38572=>20617, +38573=>20618, +38574=>20619, +38575=>20620, +38578=>20621, +38581=>20622, +38583=>20623, +38586=>20624, +38591=>20625, +38594=>20626, +38595=>20627, +38600=>20628, +38602=>20629, +38603=>20630, +38608=>20631, +38609=>20632, +38611=>20633, +38612=>20634, +38615=>20635, +38616=>20636, +38618=>20637, +38621=>20638, +38622=>20639, +38623=>20640, +38625=>20641, +38628=>20642, +38629=>20643, +38630=>20644, +38631=>20645, +38635=>20646, +38636=>20647, +38637=>20648, +38638=>20649, +38640=>20650, +38641=>20651, +38644=>20652, +38645=>20653, +38648=>20654, +38650=>20655, +38652=>20656, +38653=>20657, +38655=>20658, +38658=>20659, +38659=>20660, +38661=>20661, +38666=>20662, +38667=>20663, +38668=>20664, +38672=>20665, +38673=>20666, +38674=>20667, +38676=>20668, +38677=>20669, +38679=>20670, +38680=>20671, +38681=>20672, +38682=>20673, +38683=>20674, +38685=>20675, +38687=>20676, +38688=>20677, +38689=>20678, +38690=>20679, +38691=>20680, +38692=>20681, +38693=>20682, +38694=>20683, +38696=>20684, +38697=>20685, +38699=>20686, +38700=>20687, +38702=>20688, +38703=>20689, +38705=>20690, +38707=>20691, +38708=>20692, +38709=>20693, +38710=>20694, +38711=>20695, +38714=>20696, +38715=>20697, +38716=>20698, +38719=>20699, +38720=>20700, +38721=>20701, +38723=>20702, +38725=>20703, +38726=>20704, +38727=>20705, +38729=>20706, +38730=>20707, +38731=>20708, +38732=>20709, +38733=>20710, +38734=>20711, +38735=>20712, +38736=>20713, +12205=>20714, +38737=>20714, +38740=>20715, +38741=>20716, +38743=>20717, +38744=>20718, +38748=>20719, +38749=>20720, +38751=>20721, +38755=>20722, +38756=>20723, +38758=>20724, +38759=>20725, +38762=>20726, +38763=>20727, +38764=>20728, +38765=>20729, +38766=>20730, +38767=>20731, +38768=>20732, +38769=>20733, +38770=>20734, +38773=>20735, +38775=>20736, +38776=>20737, +38777=>20738, +38778=>20739, +38779=>20740, +38781=>20741, +38782=>20742, +38783=>20743, +38784=>20744, +38785=>20745, +38786=>20746, +38787=>20747, +38788=>20748, +38790=>20749, +38791=>20750, +38792=>20751, +38793=>20752, +38794=>20753, +38796=>20754, +38798=>20755, +38800=>20756, +38803=>20757, +38805=>20758, +38806=>20759, +38807=>20760, +38809=>20761, +38810=>20762, +38811=>20763, +38812=>20764, +38813=>20765, +38814=>20766, +38815=>20767, +38817=>20768, +38818=>20769, +38820=>20770, +38821=>20771, +38823=>20772, +38824=>20773, +38825=>20774, +38826=>20775, +38828=>20776, +38830=>20777, +38832=>20778, +38833=>20779, +38835=>20780, +38837=>20781, +38838=>20782, +38839=>20783, +38840=>20784, +38841=>20785, +38842=>20786, +38843=>20787, +38844=>20788, +38846=>20789, +38847=>20790, +38848=>20791, +38849=>20792, +38850=>20793, +38852=>20794, +38853=>20795, +38855=>20796, +38856=>20797, +38858=>20798, +38861=>20799, +38862=>20800, +38863=>20801, +38864=>20802, +38865=>20803, +38866=>20804, +38868=>20805, +38869=>20806, +38870=>20807, +38871=>20808, +38872=>20809, +38874=>20810, +38875=>20811, +38877=>20812, +38879=>20813, +38880=>20814, +38881=>20815, +38882=>20816, +38883=>20817, +38884=>20818, +38885=>20819, +38888=>20820, +38894=>20821, +38895=>20822, +38896=>20823, +38897=>20824, +38898=>20825, +38900=>20826, +38903=>20827, +38904=>20828, +38905=>20829, +38906=>20830, +38907=>20831, +38908=>20832, +38909=>20833, +38910=>20834, +38912=>20835, +38916=>20836, +38921=>20837, +38923=>20838, +38925=>20839, +38932=>20840, +38933=>20841, +38934=>20842, +38937=>20843, +38938=>20844, +38939=>20845, +38941=>20846, +38942=>20847, +38943=>20848, +38944=>20849, +38946=>20850, +38947=>20851, +38949=>20852, +38951=>20853, +38952=>20854, +38953=>20855, +38954=>20856, +38955=>20857, +38956=>20858, +38958=>20859, +38959=>20860, +38961=>20861, +38962=>20862, +38963=>20863, +38964=>20864, +38965=>20865, +38966=>20866, +38969=>20867, +38970=>20868, +38972=>20869, +38974=>20870, +38975=>20871, +38976=>20872, +38977=>20873, +38978=>20874, +38979=>20875, +38980=>20876, +38981=>20877, +38983=>20878, +38984=>20879, +38985=>20880, +38986=>20881, +38987=>20882, +38991=>20883, +38992=>20884, +38993=>20885, +38994=>20886, +38997=>20887, +38998=>20888, +38999=>20889, +39002=>20890, +39004=>20891, +39005=>20892, +39007=>20893, +39008=>20894, +39009=>20895, +39011=>20896, +39012=>20897, +39014=>20898, +39016=>20899, +39017=>20900, +39018=>20901, +39021=>20902, +39022=>20903, +39026=>20904, +39051=>20905, +39054=>20906, +39058=>20907, +39061=>20908, +39065=>20909, +39075=>20910, +39081=>20911, +39082=>20912, +39083=>20913, +39084=>20914, +39085=>20915, +39088=>20916, +39090=>20917, +39092=>20918, +39093=>20919, +39095=>20920, +39096=>20921, +39097=>20922, +39098=>20923, +39099=>20924, +39101=>20925, +39102=>20926, +39103=>20927, +39104=>20928, +39105=>20929, +39106=>20930, +39107=>20931, +39109=>20932, +39111=>20933, +39113=>20934, +39114=>20935, +39115=>20936, +39116=>20937, +39117=>20938, +39119=>20939, +39120=>20940, +39124=>20941, +39126=>20942, +39127=>20943, +39132=>20944, +39133=>20945, +39137=>20946, +39139=>20947, +39140=>20948, +39141=>20949, +39142=>20950, +39148=>20951, +39150=>20952, +39152=>20953, +39153=>20954, +39155=>20955, +39157=>20956, +39158=>20957, +39159=>20958, +39160=>20959, +39161=>20960, +39162=>20961, +39163=>20962, +39167=>20963, +39168=>20964, +39169=>20965, +39170=>20966, +39172=>20967, +39174=>20968, +39175=>20969, +39176=>20970, +39179=>20971, +39182=>20972, +39183=>20973, +39188=>20974, +39189=>20975, +39190=>20976, +39191=>20977, +39193=>20978, +39194=>20979, +39196=>20980, +39197=>20981, +39199=>20982, +39200=>20983, +39202=>20984, +39203=>20985, +39204=>20986, +39205=>20987, +39206=>20988, +39207=>20989, +39209=>20990, +39210=>20991, +39211=>20992, +39212=>20993, +39213=>20994, +39215=>20995, +39216=>20996, +39217=>20997, +39218=>20998, +39220=>20999, +39221=>21000, +39222=>21001, +39224=>21002, +39225=>21003, +39226=>21004, +39227=>21005, +39229=>21006, +39232=>21007, +39233=>21008, +39234=>21009, +39236=>21010, +39238=>21011, +39239=>21012, +39245=>21013, +39246=>21014, +39247=>21015, +39248=>21016, +39251=>21017, +39254=>21018, +39256=>21019, +39257=>21020, +39258=>21021, +39259=>21022, +39261=>21023, +39263=>21024, +39264=>21025, +39265=>21026, +39268=>21027, +39270=>21028, +39283=>21029, +39288=>21030, +39289=>21031, +39291=>21032, +39294=>21033, +39298=>21034, +39299=>21035, +39305=>21036, +39308=>21037, +39310=>21038, +39322=>21039, +39323=>21040, +39324=>21041, +39325=>21042, +39326=>21043, +39327=>21044, +39328=>21045, +39329=>21046, +39330=>21047, +39331=>21048, +39332=>21049, +39334=>21050, +39335=>21051, +39337=>21052, +39338=>21053, +39339=>21054, +39343=>21055, +39344=>21056, +39346=>21057, +39349=>21058, +39350=>21059, +39351=>21060, +39352=>21061, +39353=>21062, +39354=>21063, +39355=>21064, +39356=>21065, +39357=>21066, +39358=>21067, +39359=>21068, +39360=>21069, +39362=>21070, +39363=>21071, +39364=>21072, +39365=>21073, +39366=>21074, +39367=>21075, +39368=>21076, +39369=>21077, +39370=>21078, +39371=>21079, +39372=>21080, +39373=>21081, +39374=>21082, +39375=>21083, +39379=>21084, +39382=>21085, +39383=>21086, +39386=>21087, +39388=>21088, +39390=>21089, +39392=>21090, +39395=>21091, +39396=>21092, +39397=>21093, +39398=>21094, +39399=>21095, +39400=>21096, +39401=>21097, +39402=>21098, +39403=>21099, +39404=>21100, +39406=>21101, +39407=>21102, +39408=>21103, +39410=>21104, +39411=>21105, +39412=>21106, +39413=>21107, +39414=>21108, +39415=>21109, +39416=>21110, +39417=>21111, +39418=>21112, +39419=>21113, +39420=>21114, +39421=>21115, +39422=>21116, +39424=>21117, +39426=>21118, +39427=>21119, +39428=>21120, +39430=>21121, +39431=>21122, +39432=>21123, +39433=>21124, +39434=>21125, +39435=>21126, +39436=>21127, +39440=>21128, +39441=>21129, +39442=>21130, +39443=>21131, +39444=>21132, +39445=>21133, +39447=>21134, +39448=>21135, +39450=>21136, +39451=>21137, +39452=>21138, +39453=>21139, +39454=>21140, +39455=>21141, +39456=>21142, +39457=>21143, +39458=>21144, +39459=>21145, +39460=>21146, +39461=>21147, +39462=>21148, +39463=>21149, +39464=>21150, +39465=>21151, +39466=>21152, +39468=>21153, +39471=>21154, +39473=>21155, +39474=>21156, +39475=>21157, +39476=>21158, +39477=>21159, +39481=>21160, +39482=>21161, +39483=>21162, +39484=>21163, +39485=>21164, +39487=>21165, +39494=>21166, +39495=>21167, +39496=>21168, +39497=>21169, +39499=>21170, +39500=>21171, +39502=>21172, +39504=>21173, +39505=>21174, +39506=>21175, +39507=>21176, +39508=>21177, +39510=>21178, +39512=>21179, +39513=>21180, +39516=>21181, +39517=>21182, +39518=>21183, +39520=>21184, +39521=>21185, +39523=>21186, +39526=>21187, +39527=>21188, +39528=>21189, +39529=>21190, +39531=>21191, +39538=>21192, +39555=>21193, +39561=>21194, +39565=>21195, +39566=>21196, +39572=>21197, +39573=>21198, +39577=>21199, +39590=>21200, +39593=>21201, +39594=>21202, +39595=>21203, +39596=>21204, +39597=>21205, +39598=>21206, +39602=>21207, +39603=>21208, +39604=>21209, +39605=>21210, +39609=>21211, +39611=>21212, +39613=>21213, +39614=>21214, +39615=>21215, +39619=>21216, +39620=>21217, +39622=>21218, +39623=>21219, +39624=>21220, +39625=>21221, +39626=>21222, +39629=>21223, +39630=>21224, +39632=>21225, +39639=>21226, +39641=>21227, +39642=>21228, +39643=>21229, +39644=>21230, +39645=>21231, +39646=>21232, +39648=>21233, +39650=>21234, +39651=>21235, +39652=>21236, +39653=>21237, +39655=>21238, +39656=>21239, +39657=>21240, +39658=>21241, +39660=>21242, +39664=>21243, +39665=>21244, +39666=>21245, +39667=>21246, +39668=>21247, +39669=>21248, +39670=>21249, +39671=>21250, +39672=>21251, +39674=>21252, +39676=>21253, +39677=>21254, +39678=>21255, +39679=>21256, +39680=>21257, +39681=>21258, +39682=>21259, +39684=>21260, +39685=>21261, +39687=>21262, +39689=>21263, +39690=>21264, +39691=>21265, +39692=>21266, +39694=>21267, +39696=>21268, +39697=>21269, +39698=>21270, +39700=>21271, +39701=>21272, +39702=>21273, +39703=>21274, +39704=>21275, +39705=>21276, +39707=>21277, +39708=>21278, +39709=>21279, +39710=>21280, +39712=>21281, +39713=>21282, +39716=>21283, +39718=>21284, +39720=>21285, +39722=>21286, +39723=>21287, +39724=>21288, +39725=>21289, +39728=>21290, +39731=>21291, +39732=>21292, +39733=>21293, +39734=>21294, +39735=>21295, +39736=>21296, +39737=>21297, +39738=>21298, +39741=>21299, +39742=>21300, +39743=>21301, +39744=>21302, +39750=>21303, +39754=>21304, +39755=>21305, +39756=>21306, +39760=>21307, +39762=>21308, +39763=>21309, +39765=>21310, +39766=>21311, +39767=>21312, +39769=>21313, +39771=>21314, +39772=>21315, +39773=>21316, +39774=>21317, +39775=>21318, +39776=>21319, +39777=>21320, +39778=>21321, +39779=>21322, +39780=>21323, +39781=>21324, +39782=>21325, +39783=>21326, +39784=>21327, +39785=>21328, +39786=>21329, +39787=>21330, +39788=>21331, +39789=>21332, +39790=>21333, +39792=>21334, +39793=>21335, +39794=>21336, +39795=>21337, +39797=>21338, +39798=>21339, +39800=>21340, +39801=>21341, +39802=>21342, +39803=>21343, +39804=>21344, +39805=>21345, +39806=>21346, +39807=>21347, +39808=>21348, +39810=>21349, +39812=>21350, +39813=>21351, +39814=>21352, +39815=>21353, +39816=>21354, +39817=>21355, +39818=>21356, +39819=>21357, +39820=>21358, +39821=>21359, +39823=>21360, +39827=>21361, +39828=>21362, +39829=>21363, +39830=>21364, +39831=>21365, +39832=>21366, +39833=>21367, +39835=>21368, +39836=>21369, +39839=>21370, +39840=>21371, +39841=>21372, +39842=>21373, +39843=>21374, +39844=>21375, +39845=>21376, +39846=>21377, +39847=>21378, +39848=>21379, +39849=>21380, +39852=>21381, +39855=>21382, +39856=>21383, +39857=>21384, +39858=>21385, +39859=>21386, +39860=>21387, +39861=>21388, +39862=>21389, +39863=>21390, +39864=>21391, +39865=>21392, +39866=>21393, +39867=>21394, +39868=>21395, +39869=>21396, +39870=>21397, +39871=>21398, +39874=>21399, +39875=>21400, +39876=>21401, +39877=>21402, +39878=>21403, +39880=>21404, +39883=>21405, +39884=>21406, +39885=>21407, +39886=>21408, +39887=>21409, +39888=>21410, +39889=>21411, +39890=>21412, +39891=>21413, +39893=>21414, +39895=>21415, +39896=>21416, +39897=>21417, +39898=>21418, +39900=>21419, +39902=>21420, +39903=>21421, +39904=>21422, +39907=>21423, +39909=>21424, +39910=>21425, +39913=>21426, +39916=>21427, +39917=>21428, +39918=>21429, +39919=>21430, +39921=>21431, +39922=>21432, +39923=>21433, +39925=>21434, +39926=>21435, +39927=>21436, +39928=>21437, +39929=>21438, +39930=>21439, +39931=>21440, +39932=>21441, +39934=>21442, +39936=>21443, +39937=>21444, +39938=>21445, +39939=>21446, +39940=>21447, +39941=>21448, +39942=>21449, +39943=>21450, +39946=>21451, +39947=>21452, +39948=>21453, +39950=>21454, +39951=>21455, +39953=>21456, +39956=>21457, +39957=>21458, +39958=>21459, +39959=>21460, +39960=>21461, +39961=>21462, +39962=>21463, +39963=>21464, +39964=>21465, +39965=>21466, +39966=>21467, +39967=>21468, +39969=>21469, +39970=>21470, +39972=>21471, +39974=>21472, +39975=>21473, +39978=>21474, +39979=>21475, +39980=>21476, +39982=>21477, +39983=>21478, +39984=>21479, +39988=>21480, +39990=>21481, +39992=>21482, +39994=>21483, +39996=>21484, +39997=>21485, +39999=>21486, +40000=>21487, +40001=>21488, +40002=>21489, +40003=>21490, +40004=>21491, +40006=>21492, +40007=>21493, +40010=>21494, +40011=>21495, +40012=>21496, +40013=>21497, +40014=>21498, +40015=>21499, +40016=>21500, +40017=>21501, +40019=>21502, +40021=>21503, +40025=>21504, +40026=>21505, +40027=>21506, +40028=>21507, +40030=>21508, +40032=>21509, +40033=>21510, +40034=>21511, +40035=>21512, +40036=>21513, +40037=>21514, +40038=>21515, +40040=>21516, +40041=>21517, +40042=>21518, +40043=>21519, +40044=>21520, +40046=>21521, +40047=>21522, +40048=>21523, +40049=>21524, +40050=>21525, +40051=>21526, +40052=>21527, +40053=>21528, +40054=>21529, +40055=>21530, +40057=>21531, +40059=>21532, +40061=>21533, +40062=>21534, +40064=>21535, +40067=>21536, +40068=>21537, +40073=>21538, +40074=>21539, +40076=>21540, +40079=>21541, +40083=>21542, +40086=>21543, +40087=>21544, +40088=>21545, +40089=>21546, +40093=>21547, +40106=>21548, +40108=>21549, +40111=>21550, +40121=>21551, +40126=>21552, +40127=>21553, +40128=>21554, +40129=>21555, +40130=>21556, +40136=>21557, +40137=>21558, +40145=>21559, +40146=>21560, +40154=>21561, +40155=>21562, +40160=>21563, +40161=>21564, +40163=>21565, +40164=>21566, +40166=>21567, +40167=>21568, +40168=>21569, +40170=>21570, +40171=>21571, +40173=>21572, +40174=>21573, +40175=>21574, +40176=>21575, +40177=>21576, +40178=>21577, +40181=>21578, +40183=>21579, +40184=>21580, +40185=>21581, +40186=>21582, +40187=>21583, +40188=>21584, +40189=>21585, +40190=>21586, +40191=>21587, +40192=>21588, +40193=>21589, +40194=>21590, +40195=>21591, +40196=>21592, +40197=>21593, +40200=>21594, +40202=>21595, +40203=>21596, +40204=>21597, +40205=>21598, +40206=>21599, +40207=>21600, +40208=>21601, +40209=>21602, +40210=>21603, +40211=>21604, +40212=>21605, +40214=>21606, +40215=>21607, +40216=>21608, +40217=>21609, +40218=>21610, +40220=>21611, +40222=>21612, +40224=>21613, +40225=>21614, +40226=>21615, +40228=>21616, +40229=>21617, +40231=>21618, +40233=>21619, +40234=>21620, +40235=>21621, +40236=>21622, +40237=>21623, +40238=>21624, +40241=>21625, +40242=>21626, +40243=>21627, +40244=>21628, +40245=>21629, +40246=>21630, +40247=>21631, +40248=>21632, +40249=>21633, +40250=>21634, +40252=>21635, +40253=>21636, +40254=>21637, +40256=>21638, +40257=>21639, +40259=>21640, +40260=>21641, +40261=>21642, +40262=>21643, +40263=>21644, +40264=>21645, +40265=>21646, +40266=>21647, +40267=>21648, +40268=>21649, +40269=>21650, +40270=>21651, +40271=>21652, +40272=>21653, +40276=>21654, +40277=>21655, +40278=>21656, +40279=>21657, +40280=>21658, +40281=>21659, +40282=>21660, +40283=>21661, +40286=>21662, +40287=>21663, +40290=>21664, +40291=>21665, +40292=>21666, +40293=>21667, +40294=>21668, +40295=>21669, +40296=>21670, +40297=>21671, +40299=>21672, +40301=>21673, +40302=>21674, +40304=>21675, +40305=>21676, +40307=>21677, +40308=>21678, +40309=>21679, +40310=>21680, +40311=>21681, +40312=>21682, +40313=>21683, +40314=>21684, +40315=>21685, +40316=>21686, +40317=>21687, +40318=>21688, +40319=>21689, +40320=>21690, +40321=>21691, +40322=>21692, +40323=>21693, +40324=>21694, +40325=>21695, +40326=>21696, +40328=>21697, +40330=>21698, +40331=>21699, +40332=>21700, +40333=>21701, +40334=>21702, +40335=>21703, +40336=>21704, +40337=>21705, +40338=>21706, +40340=>21707, +40341=>21708, +40342=>21709, +40343=>21710, +40345=>21711, +40347=>21712, +40348=>21713, +40349=>21714, +40350=>21715, +40351=>21716, +40352=>21717, +40353=>21718, +40354=>21719, +40355=>21720, +40356=>21721, +40358=>21722, +40359=>21723, +40360=>21724, +40362=>21725, +40363=>21726, +40364=>21727, +40365=>21728, +40366=>21729, +40368=>21730, +40369=>21731, +40370=>21732, +40371=>21733, +40373=>21734, +40374=>21735, +40375=>21736, +40376=>21737, +40377=>21738, +40378=>21739, +40381=>21740, +40382=>21741, +40383=>21742, +40385=>21743, +40387=>21744, +40389=>21745, +40390=>21746, +40391=>21747, +40392=>21748, +40393=>21749, +40394=>21750, +40395=>21751, +40396=>21752, +40397=>21753, +40398=>21754, +40399=>21755, +40400=>21756, +40401=>21757, +40402=>21758, +40404=>21759, +40405=>21760, +40406=>21761, +40408=>21762, +40411=>21763, +40412=>21764, +40413=>21765, +40414=>21766, +40415=>21767, +40416=>21768, +40417=>21769, +40418=>21770, +40419=>21771, +40420=>21772, +40423=>21773, +40424=>21774, +40425=>21775, +40426=>21776, +40427=>21777, +40428=>21778, +40429=>21779, +40430=>21780, +40432=>21781, +40433=>21782, +40436=>21783, +40437=>21784, +40438=>21785, +40439=>21786, +40443=>21787, +40444=>21788, +40445=>21789, +40446=>21790, +40447=>21791, +40448=>21792, +40449=>21793, +40450=>21794, +40451=>21795, +40452=>21796, +40453=>21797, +40454=>21798, +40455=>21799, +40456=>21800, +40457=>21801, +40458=>21802, +40459=>21803, +40461=>21804, +40462=>21805, +40463=>21806, +40464=>21807, +40465=>21808, +40466=>21809, +40467=>21810, +40468=>21811, +40470=>21812, +40471=>21813, +40472=>21814, +40473=>21815, +40476=>21816, +40484=>21817, +40487=>21818, +40494=>21819, +40496=>21820, +40500=>21821, +40507=>21822, +40508=>21823, +40512=>21824, +40525=>21825, +40528=>21826, +40530=>21827, +40531=>21828, +40532=>21829, +40534=>21830, +40537=>21831, +40541=>21832, +40543=>21833, +40544=>21834, +40545=>21835, +40546=>21836, +40549=>21837, +40558=>21838, +40559=>21839, +40562=>21840, +40564=>21841, +40566=>21842, +40567=>21843, +40568=>21844, +40571=>21845, +40576=>21846, +40577=>21847, +40579=>21848, +40580=>21849, +40581=>21850, +40582=>21851, +40585=>21852, +40586=>21853, +40588=>21854, +40589=>21855, +40590=>21856, +40591=>21857, +40592=>21858, +40593=>21859, +40596=>21860, +40597=>21861, +40598=>21862, +40600=>21863, +40601=>21864, +40602=>21865, +40603=>21866, +40604=>21867, +40606=>21868, +40608=>21869, +40609=>21870, +40610=>21871, +40611=>21872, +40612=>21873, +40615=>21874, +40616=>21875, +40618=>21876, +40619=>21877, +40620=>21878, +40621=>21879, +40622=>21880, +40624=>21881, +40625=>21882, +40626=>21883, +40627=>21884, +40630=>21885, +40631=>21886, +40633=>21887, +40634=>21888, +40636=>21889, +40639=>21890, +40640=>21891, +40641=>21892, +40642=>21893, +12232=>21894, +40643=>21894, +40645=>21895, +40646=>21896, +40647=>21897, +40648=>21898, +40650=>21899, +40651=>21900, +40656=>21901, +40658=>21902, +40659=>21903, +40661=>21904, +40662=>21905, +40663=>21906, +40665=>21907, +40666=>21908, +40673=>21909, +40675=>21910, +40676=>21911, +40678=>21912, +40683=>21913, +40684=>21914, +40685=>21915, +40686=>21916, +40688=>21917, +40689=>21918, +40691=>21919, +40693=>21920, +40694=>21921, +40696=>21922, +40698=>21923, +40704=>21924, +40705=>21925, +40706=>21926, +40707=>21927, +40708=>21928, +40709=>21929, +40710=>21930, +40711=>21931, +40712=>21932, +40714=>21933, +40716=>21934, +40719=>21935, +40721=>21936, +40722=>21937, +40724=>21938, +40726=>21939, +40728=>21940, +40730=>21941, +40731=>21942, +40732=>21943, +40733=>21944, +40734=>21945, +40735=>21946, +40737=>21947, +40739=>21948, +40740=>21949, +40741=>21950, +40742=>21951, +40743=>21952, +40744=>21953, +40745=>21954, +40746=>21955, +40747=>21956, +40749=>21957, +40750=>21958, +40752=>21959, +40753=>21960, +40754=>21961, +40755=>21962, +40756=>21963, +40757=>21964, +40758=>21965, +40760=>21966, +40762=>21967, +40764=>21968, +40767=>21969, +40768=>21970, +40769=>21971, +40770=>21972, +40771=>21973, +40773=>21974, +40774=>21975, +40775=>21976, +40776=>21977, +40777=>21978, +40780=>21979, +40781=>21980, +40782=>21981, +40787=>21982, +40789=>21983, +40790=>21984, +40791=>21985, +40792=>21986, +40794=>21987, +40795=>21988, +40797=>21989, +40798=>21990, +40802=>21991, +40804=>21992, +40805=>21993, +40807=>21994, +40808=>21995, +40809=>21996, +40811=>21997, +40813=>21998, +40814=>21999, +40815=>22000, +40816=>22001, +40817=>22002, +40819=>22003, +40820=>22004, +40821=>22005, +40822=>22006, +40824=>22007, +40825=>22008, +40826=>22009, +40827=>22010, +40828=>22011, +40829=>22012, +40830=>22013, +40833=>22014, +40834=>22015, +40846=>22016, +40847=>22017, +40849=>22018, +40850=>22019, +40851=>22020, +40854=>22021, +40855=>22022, +40856=>22023, +40861=>22024, +40862=>22025, +40865=>22026, +40866=>22027, +40867=>22028, +40868=>22029, +40869=>22030, +63788=>22031, +64013=>22032, +64014=>22033, +64015=>22034, +64017=>22035, +64019=>22036, +64020=>22037, +64024=>22038, +64031=>22039, +64032=>22040, +64033=>22041, +64035=>22042, +64036=>22043, +64039=>22044, +64040=>22045, +64041=>22046, +11905=>22047, +59413=>22047, +131207=>22048, +59414=>22048, +131209=>22049, +59415=>22049, +131276=>22050, +59416=>22050, +11908=>22051, +59417=>22051, +13427=>22052, +59418=>22052, +13383=>22053, +59419=>22053, +11912=>22054, +59420=>22054, +11915=>22055, +59421=>22055, +40884=>22056, +59422=>22056, +13726=>22057, +59423=>22057, +13850=>22058, +59424=>22058, +13838=>22059, +59425=>22059, +11916=>22060, +59426=>22060, +11927=>22061, +59427=>22061, +14702=>22062, +59428=>22062, +14616=>22063, +59429=>22063, +40885=>22064, +59430=>22064, +14799=>22065, +59431=>22065, +14815=>22066, +59432=>22066, +14963=>22067, +59433=>22067, +14800=>22068, +59434=>22068, +40886=>22069, +59435=>22069, +40887=>22070, +59436=>22070, +15182=>22071, +59437=>22071, +15470=>22072, +59438=>22072, +15584=>22073, +59439=>22073, +11943=>22074, +59440=>22074, +136663=>22075, +59441=>22075, +40888=>22076, +59442=>22076, +11946=>22077, +59443=>22077, +16470=>22078, +59444=>22078, +16735=>22079, +59445=>22079, +11950=>22080, +59446=>22080, +17207=>22081, +59447=>22081, +11955=>22082, +59448=>22082, +11958=>22083, +59449=>22083, +11959=>22084, +59450=>22084, +141711=>22085, +59451=>22085, +17329=>22086, +59452=>22086, +17324=>22087, +59453=>22087, +11963=>22088, +59454=>22088, +17373=>22089, +59455=>22089, +17622=>22090, +59456=>22090, +18017=>22091, +59457=>22091, +17996=>22092, +59458=>22092, +40889=>22093, +132361=>22093, +59459=>22093, +18211=>22094, +59460=>22094, +18217=>22095, +59461=>22095, +18300=>22096, +59462=>22096, +18317=>22097, +59463=>22097, +11978=>22098, +59464=>22098, +18759=>22099, +59465=>22099, +18810=>22100, +59466=>22100, +18813=>22101, +59467=>22101, +18818=>22102, +59468=>22102, +18819=>22103, +59469=>22103, +18821=>22104, +59470=>22104, +18822=>22105, +59471=>22105, +18847=>22106, +59472=>22106, +18843=>22107, +59473=>22107, +18871=>22108, +59474=>22108, +18870=>22109, +59475=>22109, +40890=>22110, +133533=>22110, +59476=>22110, +147966=>22111, +59477=>22111, +19619=>22112, +59478=>22112, +19615=>22113, +59479=>22113, +19616=>22114, +59480=>22114, +19617=>22115, +59481=>22115, +19575=>22116, +59482=>22116, +19618=>22117, +59483=>22117, +19731=>22118, +59484=>22118, +19732=>22119, +59485=>22119, +19733=>22120, +59486=>22120, +19734=>22121, +59487=>22121, +19735=>22122, +59488=>22122, +19736=>22123, +59489=>22123, +19737=>22124, +59490=>22124, +19886=>22125, +59491=>22125, +40891=>22126, +59492=>22126, +8364=>22353, +59244=>22353, +165=>22354, +12351=>22357, +12436=>22375, +12535=>22390, +12537=>22391, +12536=>22392, +12538=>22393, +12339=>22395, +12340=>22396, +12341=>22397, +12344=>22398, +12345=>22399, +12346=>22400, +12586=>22401, +12587=>22402, +12588=>22403, +12704=>22404, +12705=>22405, +12706=>22406, +12707=>22407, +12708=>22408, +12709=>22409, +12710=>22410, +12711=>22411, +12712=>22412, +12713=>22413, +12714=>22414, +12715=>22415, +12716=>22416, +12717=>22417, +12718=>22418, +12719=>22419, +12720=>22420, +12721=>22421, +12722=>22422, +12723=>22423, +12724=>22424, +12725=>22425, +12726=>22426, +12727=>22427, +11904=>22428, +11906=>22429, +11907=>22430, +11909=>22431, +11910=>22432, +11911=>22433, +11913=>22434, +11914=>22435, +11917=>22436, +11918=>22437, +11919=>22438, +11920=>22439, +11921=>22440, +11922=>22441, +11923=>22442, +11924=>22443, +11925=>22444, +11926=>22445, +11928=>22446, +11929=>22447, +11931=>22448, +11932=>22449, +11933=>22450, +11934=>22451, +11935=>22452, +11936=>22453, +11937=>22454, +11938=>22455, +11939=>22456, +11940=>22457, +11941=>22458, +11942=>22459, +11944=>22460, +11945=>22461, +11947=>22462, +11948=>22463, +11949=>22464, +11951=>22465, +11952=>22466, +11953=>22467, +11954=>22468, +11956=>22469, +11957=>22470, +11960=>22471, +11961=>22472, +11962=>22473, +11964=>22474, +11965=>22475, +11966=>22476, +11967=>22477, +11968=>22478, +11969=>22479, +11970=>22480, +11971=>22481, +11972=>22482, +11973=>22483, +11974=>22484, +11975=>22485, +11976=>22486, +11977=>22487, +11979=>22488, +11980=>22489, +11981=>22490, +11982=>22491, +11983=>22492, +11984=>22493, +11985=>22494, +11986=>22495, +11987=>22496, +11988=>22497, +11989=>22498, +11990=>22499, +11991=>22500, +11992=>22501, +11993=>22502, +11994=>22503, +11995=>22504, +11996=>22505, +11997=>22506, +11998=>22507, +11999=>22508, +12000=>22509, +12001=>22510, +12002=>22511, +12003=>22512, +12004=>22513, +12005=>22514, +12006=>22515, +12007=>22516, +12008=>22517, +12009=>22518, +12010=>22519, +12011=>22520, +12012=>22521, +12013=>22522, +12014=>22523, +12015=>22524, +12016=>22525, +12017=>22526, +12018=>22527, +12019=>22528, +13312=>22529, +13313=>22530, +13314=>22531, +13315=>22532, +13316=>22533, +13317=>22534, +13318=>22535, +13319=>22536, +13320=>22537, +13321=>22538, +13322=>22539, +13323=>22540, +13324=>22541, +13325=>22542, +13326=>22543, +13327=>22544, +13328=>22545, +13329=>22546, +13330=>22547, +13331=>22548, +13332=>22549, +13333=>22550, +13334=>22551, +13335=>22552, +13336=>22553, +13337=>22554, +13338=>22555, +13339=>22556, +13340=>22557, +13341=>22558, +13342=>22559, +13343=>22560, +13344=>22561, +13345=>22562, +13346=>22563, +13347=>22564, +13348=>22565, +13349=>22566, +13350=>22567, +13351=>22568, +13352=>22569, +13353=>22570, +13354=>22571, +13355=>22572, +13356=>22573, +13357=>22574, +13358=>22575, +13359=>22576, +13360=>22577, +13361=>22578, +13362=>22579, +13363=>22580, +13364=>22581, +13365=>22582, +13366=>22583, +13367=>22584, +13368=>22585, +13369=>22586, +13370=>22587, +13371=>22588, +13372=>22589, +13373=>22590, +13374=>22591, +13375=>22592, +13376=>22593, +13377=>22594, +13378=>22595, +13379=>22596, +13380=>22597, +13381=>22598, +13382=>22599, +13384=>22600, +13385=>22601, +13386=>22602, +13387=>22603, +13388=>22604, +13389=>22605, +13390=>22606, +13391=>22607, +13392=>22608, +13393=>22609, +13394=>22610, +13395=>22611, +13396=>22612, +13397=>22613, +13398=>22614, +13399=>22615, +13400=>22616, +13401=>22617, +13402=>22618, +13403=>22619, +13404=>22620, +13405=>22621, +13406=>22622, +13407=>22623, +13408=>22624, +13409=>22625, +13410=>22626, +13411=>22627, +13412=>22628, +13413=>22629, +13414=>22630, +13415=>22631, +13416=>22632, +13417=>22633, +13418=>22634, +13419=>22635, +13420=>22636, +13421=>22637, +13422=>22638, +13423=>22639, +13424=>22640, +13425=>22641, +13426=>22642, +13428=>22643, +13429=>22644, +13430=>22645, +13431=>22646, +13432=>22647, +13433=>22648, +13434=>22649, +13435=>22650, +13436=>22651, +13437=>22652, +13438=>22653, +13439=>22654, +13440=>22655, +13441=>22656, +13442=>22657, +13443=>22658, +13444=>22659, +13445=>22660, +13446=>22661, +13447=>22662, +13448=>22663, +13449=>22664, +13450=>22665, +13451=>22666, +13452=>22667, +13453=>22668, +13454=>22669, +13455=>22670, +13456=>22671, +13457=>22672, +13458=>22673, +13459=>22674, +13460=>22675, +13461=>22676, +13462=>22677, +13463=>22678, +13464=>22679, +13465=>22680, +13466=>22681, +13467=>22682, +13468=>22683, +13469=>22684, +13470=>22685, +13471=>22686, +13472=>22687, +13473=>22688, +13474=>22689, +13475=>22690, +13476=>22691, +13477=>22692, +13478=>22693, +13479=>22694, +13480=>22695, +13481=>22696, +13482=>22697, +13483=>22698, +13484=>22699, +13485=>22700, +13486=>22701, +13487=>22702, +13488=>22703, +13489=>22704, +13490=>22705, +13491=>22706, +13492=>22707, +13493=>22708, +13494=>22709, +13495=>22710, +13496=>22711, +13497=>22712, +13498=>22713, +13499=>22714, +13500=>22715, +13501=>22716, +13502=>22717, +13503=>22718, +13504=>22719, +13505=>22720, +13506=>22721, +13507=>22722, +13508=>22723, +13509=>22724, +13510=>22725, +13511=>22726, +13512=>22727, +13513=>22728, +13514=>22729, +13515=>22730, +13516=>22731, +13517=>22732, +13518=>22733, +13519=>22734, +13520=>22735, +13521=>22736, +13522=>22737, +13523=>22738, +13524=>22739, +13525=>22740, +13526=>22741, +13527=>22742, +13528=>22743, +13529=>22744, +13530=>22745, +13531=>22746, +13532=>22747, +13533=>22748, +13534=>22749, +13535=>22750, +13536=>22751, +13537=>22752, +13538=>22753, +13539=>22754, +13540=>22755, +13541=>22756, +13542=>22757, +13543=>22758, +13544=>22759, +13545=>22760, +13546=>22761, +13547=>22762, +13548=>22763, +13549=>22764, +13550=>22765, +13551=>22766, +13552=>22767, +13553=>22768, +13554=>22769, +13555=>22770, +13556=>22771, +13557=>22772, +13558=>22773, +13559=>22774, +13560=>22775, +13561=>22776, +13562=>22777, +13563=>22778, +13564=>22779, +13565=>22780, +13566=>22781, +13567=>22782, +13568=>22783, +13569=>22784, +13570=>22785, +13571=>22786, +13572=>22787, +13573=>22788, +13574=>22789, +13575=>22790, +13576=>22791, +13577=>22792, +13578=>22793, +13579=>22794, +13580=>22795, +13581=>22796, +13582=>22797, +13583=>22798, +13584=>22799, +13585=>22800, +13586=>22801, +13587=>22802, +13588=>22803, +13589=>22804, +13590=>22805, +13591=>22806, +13592=>22807, +13593=>22808, +13594=>22809, +13595=>22810, +13596=>22811, +13597=>22812, +13598=>22813, +13599=>22814, +13600=>22815, +13601=>22816, +13602=>22817, +13603=>22818, +13604=>22819, +13605=>22820, +13606=>22821, +13607=>22822, +13608=>22823, +13609=>22824, +13610=>22825, +13611=>22826, +13612=>22827, +13613=>22828, +13614=>22829, +13615=>22830, +13616=>22831, +13617=>22832, +13618=>22833, +13619=>22834, +13620=>22835, +13621=>22836, +13622=>22837, +13623=>22838, +13624=>22839, +13625=>22840, +13626=>22841, +13627=>22842, +13628=>22843, +13629=>22844, +13630=>22845, +13631=>22846, +13632=>22847, +13633=>22848, +13634=>22849, +13635=>22850, +13636=>22851, +13637=>22852, +13638=>22853, +13639=>22854, +13640=>22855, +13641=>22856, +13642=>22857, +13643=>22858, +13644=>22859, +13645=>22860, +13646=>22861, +13647=>22862, +13648=>22863, +13649=>22864, +13650=>22865, +13651=>22866, +13652=>22867, +13653=>22868, +13654=>22869, +13655=>22870, +13656=>22871, +13657=>22872, +13658=>22873, +13659=>22874, +13660=>22875, +13661=>22876, +13662=>22877, +13663=>22878, +13664=>22879, +13665=>22880, +13666=>22881, +13667=>22882, +13668=>22883, +13669=>22884, +13670=>22885, +13671=>22886, +13672=>22887, +13673=>22888, +13674=>22889, +13675=>22890, +13676=>22891, +13677=>22892, +13678=>22893, +13679=>22894, +13680=>22895, +13681=>22896, +13682=>22897, +13683=>22898, +13684=>22899, +13685=>22900, +13686=>22901, +13687=>22902, +13688=>22903, +13689=>22904, +13690=>22905, +13691=>22906, +13692=>22907, +13693=>22908, +13694=>22909, +13695=>22910, +13696=>22911, +13697=>22912, +13698=>22913, +13699=>22914, +13700=>22915, +13701=>22916, +13702=>22917, +13703=>22918, +13704=>22919, +13705=>22920, +13706=>22921, +13707=>22922, +13708=>22923, +13709=>22924, +13710=>22925, +13711=>22926, +13712=>22927, +13713=>22928, +13714=>22929, +13715=>22930, +13716=>22931, +13717=>22932, +13718=>22933, +13719=>22934, +13720=>22935, +13721=>22936, +13722=>22937, +13723=>22938, +13724=>22939, +13725=>22940, +13727=>22941, +13728=>22942, +13729=>22943, +13730=>22944, +13731=>22945, +13732=>22946, +13733=>22947, +13734=>22948, +13735=>22949, +13736=>22950, +13737=>22951, +13738=>22952, +13739=>22953, +13740=>22954, +13741=>22955, +13742=>22956, +13743=>22957, +13744=>22958, +13745=>22959, +13746=>22960, +13747=>22961, +13748=>22962, +13749=>22963, +13750=>22964, +13751=>22965, +13752=>22966, +13753=>22967, +13754=>22968, +13755=>22969, +13756=>22970, +13757=>22971, +13758=>22972, +13759=>22973, +13760=>22974, +13761=>22975, +13762=>22976, +13763=>22977, +13764=>22978, +13765=>22979, +13766=>22980, +13767=>22981, +13768=>22982, +13769=>22983, +13770=>22984, +13771=>22985, +13772=>22986, +13773=>22987, +13774=>22988, +13775=>22989, +13776=>22990, +13777=>22991, +13778=>22992, +13779=>22993, +13780=>22994, +13781=>22995, +13782=>22996, +13783=>22997, +13784=>22998, +13785=>22999, +13786=>23000, +13787=>23001, +13788=>23002, +13789=>23003, +13790=>23004, +13791=>23005, +13792=>23006, +13793=>23007, +13794=>23008, +13795=>23009, +13796=>23010, +13797=>23011, +13798=>23012, +13799=>23013, +13800=>23014, +13801=>23015, +13802=>23016, +13803=>23017, +13804=>23018, +13805=>23019, +13806=>23020, +13807=>23021, +13808=>23022, +13809=>23023, +13810=>23024, +13811=>23025, +13812=>23026, +13813=>23027, +13814=>23028, +13815=>23029, +13816=>23030, +13817=>23031, +13818=>23032, +13819=>23033, +13820=>23034, +13821=>23035, +13822=>23036, +13823=>23037, +13824=>23038, +13825=>23039, +13826=>23040, +13827=>23041, +13828=>23042, +13829=>23043, +13830=>23044, +13831=>23045, +13832=>23046, +13833=>23047, +13834=>23048, +13835=>23049, +13836=>23050, +13837=>23051, +13839=>23052, +13840=>23053, +13841=>23054, +13842=>23055, +13843=>23056, +13844=>23057, +13845=>23058, +13846=>23059, +13847=>23060, +13848=>23061, +13849=>23062, +13851=>23063, +13852=>23064, +13853=>23065, +13854=>23066, +13855=>23067, +13856=>23068, +13857=>23069, +13858=>23070, +13859=>23071, +13860=>23072, +13861=>23073, +13862=>23074, +13863=>23075, +13864=>23076, +13865=>23077, +13866=>23078, +13867=>23079, +13868=>23080, +13869=>23081, +13870=>23082, +13871=>23083, +13872=>23084, +13873=>23085, +13874=>23086, +13875=>23087, +13876=>23088, +13877=>23089, +13878=>23090, +13879=>23091, +13880=>23092, +13881=>23093, +13882=>23094, +13883=>23095, +13884=>23096, +13885=>23097, +13886=>23098, +13887=>23099, +13888=>23100, +13889=>23101, +13890=>23102, +13891=>23103, +13892=>23104, +13893=>23105, +13894=>23106, +13895=>23107, +13896=>23108, +13897=>23109, +13898=>23110, +13899=>23111, +13900=>23112, +13901=>23113, +13902=>23114, +13903=>23115, +13904=>23116, +13905=>23117, +13906=>23118, +13907=>23119, +13908=>23120, +13909=>23121, +13910=>23122, +13911=>23123, +13912=>23124, +13913=>23125, +13914=>23126, +13915=>23127, +13916=>23128, +13917=>23129, +13918=>23130, +13919=>23131, +13920=>23132, +13921=>23133, +13922=>23134, +13923=>23135, +13924=>23136, +13925=>23137, +13926=>23138, +13927=>23139, +13928=>23140, +13929=>23141, +13930=>23142, +13931=>23143, +13932=>23144, +13933=>23145, +13934=>23146, +13935=>23147, +13936=>23148, +13937=>23149, +13938=>23150, +13939=>23151, +13940=>23152, +13941=>23153, +13942=>23154, +13943=>23155, +13944=>23156, +13945=>23157, +13946=>23158, +13947=>23159, +13948=>23160, +13949=>23161, +13950=>23162, +13951=>23163, +13952=>23164, +13953=>23165, +13954=>23166, +13955=>23167, +13956=>23168, +13957=>23169, +13958=>23170, +13959=>23171, +13960=>23172, +13961=>23173, +13962=>23174, +13963=>23175, +13964=>23176, +13965=>23177, +13966=>23178, +13967=>23179, +13968=>23180, +13969=>23181, +13970=>23182, +13971=>23183, +13972=>23184, +13973=>23185, +13974=>23186, +13975=>23187, +13976=>23188, +13977=>23189, +13978=>23190, +13979=>23191, +13980=>23192, +13981=>23193, +13982=>23194, +13983=>23195, +13984=>23196, +13985=>23197, +13986=>23198, +13987=>23199, +13988=>23200, +13989=>23201, +13990=>23202, +13991=>23203, +13992=>23204, +13993=>23205, +13994=>23206, +13995=>23207, +13996=>23208, +13997=>23209, +13998=>23210, +13999=>23211, +14000=>23212, +14001=>23213, +14002=>23214, +14003=>23215, +14004=>23216, +14005=>23217, +14006=>23218, +14007=>23219, +14008=>23220, +14009=>23221, +14010=>23222, +14011=>23223, +14012=>23224, +14013=>23225, +14014=>23226, +14015=>23227, +14016=>23228, +14017=>23229, +14018=>23230, +14019=>23231, +14020=>23232, +14021=>23233, +14022=>23234, +14023=>23235, +14024=>23236, +14025=>23237, +14026=>23238, +14027=>23239, +14028=>23240, +14029=>23241, +14030=>23242, +14031=>23243, +14032=>23244, +14033=>23245, +14034=>23246, +14035=>23247, +14036=>23248, +14037=>23249, +14038=>23250, +14039=>23251, +14040=>23252, +14041=>23253, +14042=>23254, +14043=>23255, +14044=>23256, +14045=>23257, +14046=>23258, +14047=>23259, +14048=>23260, +14049=>23261, +14050=>23262, +14051=>23263, +14052=>23264, +14053=>23265, +14054=>23266, +14055=>23267, +14056=>23268, +14057=>23269, +14058=>23270, +14059=>23271, +14060=>23272, +14061=>23273, +14062=>23274, +14063=>23275, +14064=>23276, +14065=>23277, +14066=>23278, +14067=>23279, +14068=>23280, +14069=>23281, +14070=>23282, +14071=>23283, +14072=>23284, +14073=>23285, +14074=>23286, +14075=>23287, +14076=>23288, +14077=>23289, +14078=>23290, +14079=>23291, +14080=>23292, +14081=>23293, +14082=>23294, +14083=>23295, +14084=>23296, +14085=>23297, +14086=>23298, +14087=>23299, +14088=>23300, +14089=>23301, +14090=>23302, +14091=>23303, +14092=>23304, +14093=>23305, +14094=>23306, +14095=>23307, +14096=>23308, +14097=>23309, +14098=>23310, +14099=>23311, +14100=>23312, +14101=>23313, +14102=>23314, +14103=>23315, +14104=>23316, +14105=>23317, +14106=>23318, +14107=>23319, +14108=>23320, +14109=>23321, +14110=>23322, +14111=>23323, +14112=>23324, +14113=>23325, +14114=>23326, +14115=>23327, +14116=>23328, +14117=>23329, +14118=>23330, +14119=>23331, +14120=>23332, +14121=>23333, +14122=>23334, +14123=>23335, +14124=>23336, +14125=>23337, +14126=>23338, +14127=>23339, +14128=>23340, +14129=>23341, +14130=>23342, +14131=>23343, +14132=>23344, +14133=>23345, +14134=>23346, +14135=>23347, +14136=>23348, +14137=>23349, +14138=>23350, +14139=>23351, +14140=>23352, +14141=>23353, +14142=>23354, +14143=>23355, +14144=>23356, +14145=>23357, +14146=>23358, +14147=>23359, +14148=>23360, +14149=>23361, +14150=>23362, +14151=>23363, +14152=>23364, +14153=>23365, +14154=>23366, +14155=>23367, +14156=>23368, +14157=>23369, +14158=>23370, +14159=>23371, +14160=>23372, +14161=>23373, +14162=>23374, +14163=>23375, +14164=>23376, +14165=>23377, +14166=>23378, +14167=>23379, +14168=>23380, +14169=>23381, +14170=>23382, +14171=>23383, +14172=>23384, +14173=>23385, +14174=>23386, +14175=>23387, +14176=>23388, +14177=>23389, +14178=>23390, +14179=>23391, +14180=>23392, +14181=>23393, +14182=>23394, +14183=>23395, +14184=>23396, +14185=>23397, +14186=>23398, +14187=>23399, +14188=>23400, +14189=>23401, +14190=>23402, +14191=>23403, +14192=>23404, +14193=>23405, +14194=>23406, +14195=>23407, +14196=>23408, +14197=>23409, +14198=>23410, +14199=>23411, +14200=>23412, +14201=>23413, +14202=>23414, +14203=>23415, +14204=>23416, +14205=>23417, +14206=>23418, +14207=>23419, +14208=>23420, +14209=>23421, +14210=>23422, +14211=>23423, +14212=>23424, +14213=>23425, +14214=>23426, +14215=>23427, +14216=>23428, +14217=>23429, +14218=>23430, +14219=>23431, +14220=>23432, +14221=>23433, +14222=>23434, +14223=>23435, +14224=>23436, +14225=>23437, +14226=>23438, +14227=>23439, +14228=>23440, +14229=>23441, +14230=>23442, +14231=>23443, +14232=>23444, +14233=>23445, +14234=>23446, +14235=>23447, +14236=>23448, +14237=>23449, +14238=>23450, +14239=>23451, +14240=>23452, +14241=>23453, +14242=>23454, +14243=>23455, +14244=>23456, +14245=>23457, +14246=>23458, +14247=>23459, +14248=>23460, +14249=>23461, +14250=>23462, +14251=>23463, +14252=>23464, +14253=>23465, +14254=>23466, +14255=>23467, +14256=>23468, +14257=>23469, +14258=>23470, +14259=>23471, +14260=>23472, +14261=>23473, +14262=>23474, +14263=>23475, +14264=>23476, +14265=>23477, +14266=>23478, +14267=>23479, +14268=>23480, +14269=>23481, +14270=>23482, +14271=>23483, +14272=>23484, +14273=>23485, +14274=>23486, +14275=>23487, +14276=>23488, +14277=>23489, +14278=>23490, +14279=>23491, +14280=>23492, +14281=>23493, +14282=>23494, +14283=>23495, +14284=>23496, +14285=>23497, +14286=>23498, +14287=>23499, +14288=>23500, +14289=>23501, +14290=>23502, +14291=>23503, +14292=>23504, +14293=>23505, +14294=>23506, +14295=>23507, +14296=>23508, +14297=>23509, +14298=>23510, +14299=>23511, +14300=>23512, +14301=>23513, +14302=>23514, +14303=>23515, +14304=>23516, +14305=>23517, +14306=>23518, +14307=>23519, +14308=>23520, +14309=>23521, +14310=>23522, +14311=>23523, +14312=>23524, +14313=>23525, +14314=>23526, +14315=>23527, +14316=>23528, +14317=>23529, +14318=>23530, +14319=>23531, +14320=>23532, +14321=>23533, +14322=>23534, +14323=>23535, +14324=>23536, +14325=>23537, +14326=>23538, +14327=>23539, +14328=>23540, +14329=>23541, +14330=>23542, +14331=>23543, +14332=>23544, +14333=>23545, +14334=>23546, +14335=>23547, +14336=>23548, +14337=>23549, +14338=>23550, +14339=>23551, +14340=>23552, +14341=>23553, +14342=>23554, +14343=>23555, +14344=>23556, +14345=>23557, +14346=>23558, +14347=>23559, +14348=>23560, +14349=>23561, +14350=>23562, +14351=>23563, +14352=>23564, +14353=>23565, +14354=>23566, +14355=>23567, +14356=>23568, +14357=>23569, +14358=>23570, +14359=>23571, +14360=>23572, +14361=>23573, +14362=>23574, +14363=>23575, +14364=>23576, +14365=>23577, +14366=>23578, +14367=>23579, +14368=>23580, +14369=>23581, +14370=>23582, +14371=>23583, +14372=>23584, +14373=>23585, +14374=>23586, +14375=>23587, +14376=>23588, +14377=>23589, +14378=>23590, +14379=>23591, +14380=>23592, +14381=>23593, +14382=>23594, +14383=>23595, +14384=>23596, +14385=>23597, +14386=>23598, +14387=>23599, +14388=>23600, +14389=>23601, +14390=>23602, +14391=>23603, +14392=>23604, +14393=>23605, +14394=>23606, +14395=>23607, +14396=>23608, +14397=>23609, +14398=>23610, +14399=>23611, +14400=>23612, +14401=>23613, +14402=>23614, +14403=>23615, +14404=>23616, +14405=>23617, +14406=>23618, +14407=>23619, +14408=>23620, +14409=>23621, +14410=>23622, +14411=>23623, +14412=>23624, +14413=>23625, +14414=>23626, +14415=>23627, +14416=>23628, +14417=>23629, +14418=>23630, +14419=>23631, +14420=>23632, +14421=>23633, +14422=>23634, +14423=>23635, +14424=>23636, +14425=>23637, +14426=>23638, +14427=>23639, +14428=>23640, +14429=>23641, +14430=>23642, +14431=>23643, +14432=>23644, +14433=>23645, +14434=>23646, +14435=>23647, +14436=>23648, +14437=>23649, +14438=>23650, +14439=>23651, +14440=>23652, +14441=>23653, +14442=>23654, +14443=>23655, +14444=>23656, +14445=>23657, +14446=>23658, +14447=>23659, +14448=>23660, +14449=>23661, +14450=>23662, +14451=>23663, +14452=>23664, +14453=>23665, +14454=>23666, +14455=>23667, +14456=>23668, +14457=>23669, +14458=>23670, +14459=>23671, +14460=>23672, +14461=>23673, +14462=>23674, +14463=>23675, +14464=>23676, +14465=>23677, +14466=>23678, +14467=>23679, +14468=>23680, +14469=>23681, +14470=>23682, +14471=>23683, +14472=>23684, +14473=>23685, +14474=>23686, +14475=>23687, +14476=>23688, +14477=>23689, +14478=>23690, +14479=>23691, +14480=>23692, +14481=>23693, +14482=>23694, +14483=>23695, +14484=>23696, +14485=>23697, +14486=>23698, +14487=>23699, +14488=>23700, +14489=>23701, +14490=>23702, +14491=>23703, +14492=>23704, +14493=>23705, +14494=>23706, +14495=>23707, +14496=>23708, +14497=>23709, +14498=>23710, +14499=>23711, +14500=>23712, +14501=>23713, +14502=>23714, +14503=>23715, +14504=>23716, +14505=>23717, +14506=>23718, +14507=>23719, +14508=>23720, +14509=>23721, +14510=>23722, +14511=>23723, +14512=>23724, +14513=>23725, +14514=>23726, +14515=>23727, +14516=>23728, +14517=>23729, +14518=>23730, +14519=>23731, +14520=>23732, +14521=>23733, +14522=>23734, +14523=>23735, +14524=>23736, +14525=>23737, +14526=>23738, +14527=>23739, +14528=>23740, +14529=>23741, +14530=>23742, +14531=>23743, +14532=>23744, +14533=>23745, +14534=>23746, +14535=>23747, +14536=>23748, +14537=>23749, +14538=>23750, +14539=>23751, +14540=>23752, +14541=>23753, +14542=>23754, +14543=>23755, +14544=>23756, +14545=>23757, +14546=>23758, +14547=>23759, +14548=>23760, +14549=>23761, +14550=>23762, +14551=>23763, +14552=>23764, +14553=>23765, +14554=>23766, +14555=>23767, +14556=>23768, +14557=>23769, +14558=>23770, +14559=>23771, +14560=>23772, +14561=>23773, +14562=>23774, +14563=>23775, +14564=>23776, +14565=>23777, +14566=>23778, +14567=>23779, +14568=>23780, +14569=>23781, +14570=>23782, +14571=>23783, +14572=>23784, +14573=>23785, +14574=>23786, +14575=>23787, +14576=>23788, +14577=>23789, +14578=>23790, +14579=>23791, +14580=>23792, +14581=>23793, +14582=>23794, +14583=>23795, +14584=>23796, +14585=>23797, +14586=>23798, +14587=>23799, +14588=>23800, +14589=>23801, +14590=>23802, +14591=>23803, +14592=>23804, +14593=>23805, +14594=>23806, +14595=>23807, +14596=>23808, +14597=>23809, +14598=>23810, +14599=>23811, +14600=>23812, +14601=>23813, +14602=>23814, +14603=>23815, +14604=>23816, +14605=>23817, +14606=>23818, +14607=>23819, +14608=>23820, +14609=>23821, +14610=>23822, +14611=>23823, +14612=>23824, +14613=>23825, +14614=>23826, +14615=>23827, +14617=>23828, +14618=>23829, +14619=>23830, +14620=>23831, +14621=>23832, +14622=>23833, +14623=>23834, +14624=>23835, +14625=>23836, +14626=>23837, +14627=>23838, +14628=>23839, +14629=>23840, +14630=>23841, +14631=>23842, +14632=>23843, +14633=>23844, +14634=>23845, +14635=>23846, +14636=>23847, +14637=>23848, +14638=>23849, +14639=>23850, +14640=>23851, +14641=>23852, +14642=>23853, +14643=>23854, +14644=>23855, +14645=>23856, +14646=>23857, +14647=>23858, +14648=>23859, +14649=>23860, +14650=>23861, +14651=>23862, +14652=>23863, +14653=>23864, +14654=>23865, +14655=>23866, +14656=>23867, +14657=>23868, +14658=>23869, +14659=>23870, +14660=>23871, +14661=>23872, +14662=>23873, +14663=>23874, +14664=>23875, +14665=>23876, +14666=>23877, +14667=>23878, +14668=>23879, +14669=>23880, +14670=>23881, +14671=>23882, +14672=>23883, +14673=>23884, +14674=>23885, +14675=>23886, +14676=>23887, +14677=>23888, +14678=>23889, +14679=>23890, +14680=>23891, +14681=>23892, +14682=>23893, +14683=>23894, +14684=>23895, +14685=>23896, +14686=>23897, +14687=>23898, +14688=>23899, +14689=>23900, +14690=>23901, +14691=>23902, +14692=>23903, +14693=>23904, +14694=>23905, +14695=>23906, +14696=>23907, +14697=>23908, +14698=>23909, +14699=>23910, +14700=>23911, +14701=>23912, +14703=>23913, +14704=>23914, +14705=>23915, +14706=>23916, +14707=>23917, +14708=>23918, +14709=>23919, +14710=>23920, +14711=>23921, +14712=>23922, +14713=>23923, +14714=>23924, +14715=>23925, +14716=>23926, +14717=>23927, +14718=>23928, +14719=>23929, +14720=>23930, +14721=>23931, +14722=>23932, +14723=>23933, +14724=>23934, +14725=>23935, +14726=>23936, +14727=>23937, +14728=>23938, +14729=>23939, +14730=>23940, +14731=>23941, +14732=>23942, +14733=>23943, +14734=>23944, +14735=>23945, +14736=>23946, +14737=>23947, +14738=>23948, +14739=>23949, +14740=>23950, +14741=>23951, +14742=>23952, +14743=>23953, +14744=>23954, +14745=>23955, +14746=>23956, +14747=>23957, +14748=>23958, +14749=>23959, +14750=>23960, +14751=>23961, +14752=>23962, +14753=>23963, +14754=>23964, +14755=>23965, +14756=>23966, +14757=>23967, +14758=>23968, +14759=>23969, +14760=>23970, +14761=>23971, +14762=>23972, +14763=>23973, +14764=>23974, +14765=>23975, +14766=>23976, +14767=>23977, +14768=>23978, +14769=>23979, +14770=>23980, +14771=>23981, +14772=>23982, +14773=>23983, +14774=>23984, +14775=>23985, +14776=>23986, +14777=>23987, +14778=>23988, +14779=>23989, +14780=>23990, +14781=>23991, +14782=>23992, +14783=>23993, +14784=>23994, +14785=>23995, +14786=>23996, +14787=>23997, +14788=>23998, +14789=>23999, +14790=>24000, +14791=>24001, +14792=>24002, +14793=>24003, +14794=>24004, +14795=>24005, +14796=>24006, +14797=>24007, +14798=>24008, +14801=>24009, +14802=>24010, +14803=>24011, +14804=>24012, +14805=>24013, +14806=>24014, +14807=>24015, +14808=>24016, +14809=>24017, +14810=>24018, +14811=>24019, +14812=>24020, +14813=>24021, +14814=>24022, +14816=>24023, +14817=>24024, +14818=>24025, +14819=>24026, +14820=>24027, +14821=>24028, +14822=>24029, +14823=>24030, +14824=>24031, +14825=>24032, +14826=>24033, +14827=>24034, +14828=>24035, +14829=>24036, +14830=>24037, +14831=>24038, +14832=>24039, +14833=>24040, +14834=>24041, +14835=>24042, +14836=>24043, +14837=>24044, +14838=>24045, +14839=>24046, +14840=>24047, +14841=>24048, +14842=>24049, +14843=>24050, +14844=>24051, +14845=>24052, +14846=>24053, +14847=>24054, +14848=>24055, +14849=>24056, +14850=>24057, +14851=>24058, +14852=>24059, +14853=>24060, +14854=>24061, +14855=>24062, +14856=>24063, +14857=>24064, +14858=>24065, +14859=>24066, +14860=>24067, +14861=>24068, +14862=>24069, +14863=>24070, +14864=>24071, +14865=>24072, +14866=>24073, +14867=>24074, +14868=>24075, +14869=>24076, +14870=>24077, +14871=>24078, +14872=>24079, +14873=>24080, +14874=>24081, +14875=>24082, +14876=>24083, +14877=>24084, +14878=>24085, +14879=>24086, +14880=>24087, +14881=>24088, +14882=>24089, +14883=>24090, +14884=>24091, +14885=>24092, +14886=>24093, +14887=>24094, +14888=>24095, +14889=>24096, +14890=>24097, +14891=>24098, +14892=>24099, +14893=>24100, +14894=>24101, +14895=>24102, +14896=>24103, +14897=>24104, +14898=>24105, +14899=>24106, +14900=>24107, +14901=>24108, +14902=>24109, +14903=>24110, +14904=>24111, +14905=>24112, +14906=>24113, +14907=>24114, +14908=>24115, +14909=>24116, +14910=>24117, +14911=>24118, +14912=>24119, +14913=>24120, +14914=>24121, +14915=>24122, +14916=>24123, +14917=>24124, +14918=>24125, +14919=>24126, +14920=>24127, +14921=>24128, +14922=>24129, +14923=>24130, +14924=>24131, +14925=>24132, +14926=>24133, +14927=>24134, +14928=>24135, +14929=>24136, +14930=>24137, +14931=>24138, +14932=>24139, +14933=>24140, +14934=>24141, +14935=>24142, +14936=>24143, +14937=>24144, +14938=>24145, +14939=>24146, +14940=>24147, +14941=>24148, +14942=>24149, +14943=>24150, +14944=>24151, +14945=>24152, +14946=>24153, +14947=>24154, +14948=>24155, +14949=>24156, +14950=>24157, +14951=>24158, +14952=>24159, +14953=>24160, +14954=>24161, +14955=>24162, +14956=>24163, +14957=>24164, +14958=>24165, +14959=>24166, +14960=>24167, +14961=>24168, +14962=>24169, +14964=>24170, +14965=>24171, +14966=>24172, +14967=>24173, +14968=>24174, +14969=>24175, +14970=>24176, +14971=>24177, +14972=>24178, +14973=>24179, +14974=>24180, +14975=>24181, +14976=>24182, +14977=>24183, +14978=>24184, +14979=>24185, +14980=>24186, +14981=>24187, +14982=>24188, +14983=>24189, +14984=>24190, +14985=>24191, +14986=>24192, +14987=>24193, +14988=>24194, +14989=>24195, +14990=>24196, +14991=>24197, +14992=>24198, +14993=>24199, +14994=>24200, +14995=>24201, +14996=>24202, +14997=>24203, +14998=>24204, +14999=>24205, +15000=>24206, +15001=>24207, +15002=>24208, +15003=>24209, +15004=>24210, +15005=>24211, +15006=>24212, +15007=>24213, +15008=>24214, +15009=>24215, +15010=>24216, +15011=>24217, +15012=>24218, +15013=>24219, +15014=>24220, +15015=>24221, +15016=>24222, +15017=>24223, +15018=>24224, +15019=>24225, +15020=>24226, +15021=>24227, +15022=>24228, +15023=>24229, +15024=>24230, +15025=>24231, +15026=>24232, +15027=>24233, +15028=>24234, +15029=>24235, +15030=>24236, +15031=>24237, +15032=>24238, +15033=>24239, +15034=>24240, +15035=>24241, +15036=>24242, +15037=>24243, +15038=>24244, +15039=>24245, +15040=>24246, +15041=>24247, +15042=>24248, +15043=>24249, +15044=>24250, +15045=>24251, +15046=>24252, +15047=>24253, +15048=>24254, +15049=>24255, +15050=>24256, +15051=>24257, +15052=>24258, +15053=>24259, +15054=>24260, +15055=>24261, +15056=>24262, +15057=>24263, +15058=>24264, +15059=>24265, +15060=>24266, +15061=>24267, +15062=>24268, +15063=>24269, +15064=>24270, +15065=>24271, +15066=>24272, +15067=>24273, +15068=>24274, +15069=>24275, +15070=>24276, +15071=>24277, +15072=>24278, +15073=>24279, +15074=>24280, +15075=>24281, +15076=>24282, +15077=>24283, +15078=>24284, +15079=>24285, +15080=>24286, +15081=>24287, +15082=>24288, +15083=>24289, +15084=>24290, +15085=>24291, +15086=>24292, +15087=>24293, +15088=>24294, +15089=>24295, +15090=>24296, +15091=>24297, +15092=>24298, +15093=>24299, +15094=>24300, +15095=>24301, +15096=>24302, +15097=>24303, +15098=>24304, +15099=>24305, +15100=>24306, +15101=>24307, +15102=>24308, +15103=>24309, +15104=>24310, +15105=>24311, +15106=>24312, +15107=>24313, +15108=>24314, +15109=>24315, +15110=>24316, +15111=>24317, +15112=>24318, +15113=>24319, +15114=>24320, +15115=>24321, +15116=>24322, +15117=>24323, +15118=>24324, +15119=>24325, +15120=>24326, +15121=>24327, +15122=>24328, +15123=>24329, +15124=>24330, +15125=>24331, +15126=>24332, +15127=>24333, +15128=>24334, +15129=>24335, +15130=>24336, +15131=>24337, +15132=>24338, +15133=>24339, +15134=>24340, +15135=>24341, +15136=>24342, +15137=>24343, +15138=>24344, +15139=>24345, +15140=>24346, +15141=>24347, +15142=>24348, +15143=>24349, +15144=>24350, +15145=>24351, +15146=>24352, +15147=>24353, +15148=>24354, +15149=>24355, +15150=>24356, +15151=>24357, +15152=>24358, +15153=>24359, +15154=>24360, +15155=>24361, +15156=>24362, +15157=>24363, +15158=>24364, +15159=>24365, +15160=>24366, +15161=>24367, +15162=>24368, +15163=>24369, +15164=>24370, +15165=>24371, +15166=>24372, +15167=>24373, +15168=>24374, +15169=>24375, +15170=>24376, +15171=>24377, +15172=>24378, +15173=>24379, +15174=>24380, +15175=>24381, +15176=>24382, +15177=>24383, +15178=>24384, +15179=>24385, +15180=>24386, +15181=>24387, +15183=>24388, +15184=>24389, +15185=>24390, +15186=>24391, +15187=>24392, +15188=>24393, +15189=>24394, +15190=>24395, +15191=>24396, +15192=>24397, +15193=>24398, +15194=>24399, +15195=>24400, +15196=>24401, +15197=>24402, +15198=>24403, +15199=>24404, +15200=>24405, +15201=>24406, +15202=>24407, +15203=>24408, +15204=>24409, +15205=>24410, +15206=>24411, +15207=>24412, +15208=>24413, +15209=>24414, +15210=>24415, +15211=>24416, +15212=>24417, +15213=>24418, +15214=>24419, +15215=>24420, +15216=>24421, +15217=>24422, +15218=>24423, +15219=>24424, +15220=>24425, +15221=>24426, +15222=>24427, +15223=>24428, +15224=>24429, +15225=>24430, +15226=>24431, +15227=>24432, +15228=>24433, +15229=>24434, +15230=>24435, +15231=>24436, +15232=>24437, +15233=>24438, +15234=>24439, +15235=>24440, +15236=>24441, +15237=>24442, +15238=>24443, +15239=>24444, +15240=>24445, +15241=>24446, +15242=>24447, +15243=>24448, +15244=>24449, +15245=>24450, +15246=>24451, +15247=>24452, +15248=>24453, +15249=>24454, +15250=>24455, +15251=>24456, +15252=>24457, +15253=>24458, +15254=>24459, +15255=>24460, +15256=>24461, +15257=>24462, +15258=>24463, +15259=>24464, +15260=>24465, +15261=>24466, +15262=>24467, +15263=>24468, +15264=>24469, +15265=>24470, +15266=>24471, +15267=>24472, +15268=>24473, +15269=>24474, +15270=>24475, +15271=>24476, +15272=>24477, +15273=>24478, +15274=>24479, +15275=>24480, +15276=>24481, +15277=>24482, +15278=>24483, +15279=>24484, +15280=>24485, +15281=>24486, +15282=>24487, +15283=>24488, +15284=>24489, +15285=>24490, +15286=>24491, +15287=>24492, +15288=>24493, +15289=>24494, +15290=>24495, +15291=>24496, +15292=>24497, +15293=>24498, +15294=>24499, +15295=>24500, +15296=>24501, +15297=>24502, +15298=>24503, +15299=>24504, +15300=>24505, +15301=>24506, +15302=>24507, +15303=>24508, +15304=>24509, +15305=>24510, +15306=>24511, +15307=>24512, +15308=>24513, +15309=>24514, +15310=>24515, +15311=>24516, +15312=>24517, +15313=>24518, +15314=>24519, +15315=>24520, +15316=>24521, +15317=>24522, +15318=>24523, +15319=>24524, +15320=>24525, +15321=>24526, +15322=>24527, +15323=>24528, +15324=>24529, +15325=>24530, +15326=>24531, +15327=>24532, +15328=>24533, +15329=>24534, +15330=>24535, +15331=>24536, +15332=>24537, +15333=>24538, +15334=>24539, +15335=>24540, +15336=>24541, +15337=>24542, +15338=>24543, +15339=>24544, +15340=>24545, +15341=>24546, +15342=>24547, +15343=>24548, +15344=>24549, +15345=>24550, +15346=>24551, +15347=>24552, +15348=>24553, +15349=>24554, +15350=>24555, +15351=>24556, +15352=>24557, +15353=>24558, +15354=>24559, +15355=>24560, +15356=>24561, +15357=>24562, +15358=>24563, +15359=>24564, +15360=>24565, +15361=>24566, +15362=>24567, +15363=>24568, +15364=>24569, +15365=>24570, +15366=>24571, +15367=>24572, +15368=>24573, +15369=>24574, +15370=>24575, +15371=>24576, +15372=>24577, +15373=>24578, +15374=>24579, +15375=>24580, +15376=>24581, +15377=>24582, +15378=>24583, +15379=>24584, +15380=>24585, +15381=>24586, +15382=>24587, +15383=>24588, +15384=>24589, +15385=>24590, +15386=>24591, +15387=>24592, +15388=>24593, +15389=>24594, +15390=>24595, +15391=>24596, +15392=>24597, +15393=>24598, +15394=>24599, +15395=>24600, +15396=>24601, +15397=>24602, +15398=>24603, +15399=>24604, +15400=>24605, +15401=>24606, +15402=>24607, +15403=>24608, +15404=>24609, +15405=>24610, +15406=>24611, +15407=>24612, +15408=>24613, +15409=>24614, +15410=>24615, +15411=>24616, +15412=>24617, +15413=>24618, +15414=>24619, +15415=>24620, +15416=>24621, +15417=>24622, +15418=>24623, +15419=>24624, +15420=>24625, +15421=>24626, +15422=>24627, +15423=>24628, +15424=>24629, +15425=>24630, +15426=>24631, +15427=>24632, +15428=>24633, +15429=>24634, +15430=>24635, +15431=>24636, +15432=>24637, +15433=>24638, +15434=>24639, +15435=>24640, +15436=>24641, +15437=>24642, +15438=>24643, +15439=>24644, +15440=>24645, +15441=>24646, +15442=>24647, +15443=>24648, +15444=>24649, +15445=>24650, +15446=>24651, +15447=>24652, +15448=>24653, +15449=>24654, +15450=>24655, +15451=>24656, +15452=>24657, +15453=>24658, +15454=>24659, +15455=>24660, +15456=>24661, +15457=>24662, +15458=>24663, +15459=>24664, +15460=>24665, +15461=>24666, +15462=>24667, +15463=>24668, +15464=>24669, +15465=>24670, +15466=>24671, +15467=>24672, +15468=>24673, +15469=>24674, +15471=>24675, +15472=>24676, +15473=>24677, +15474=>24678, +15475=>24679, +15476=>24680, +15477=>24681, +15478=>24682, +15479=>24683, +15480=>24684, +15481=>24685, +15482=>24686, +15483=>24687, +15484=>24688, +15485=>24689, +15486=>24690, +15487=>24691, +15488=>24692, +15489=>24693, +15490=>24694, +15491=>24695, +15492=>24696, +15493=>24697, +15494=>24698, +15495=>24699, +15496=>24700, +15497=>24701, +15498=>24702, +15499=>24703, +15500=>24704, +15501=>24705, +15502=>24706, +15503=>24707, +15504=>24708, +15505=>24709, +15506=>24710, +15507=>24711, +15508=>24712, +15509=>24713, +15510=>24714, +15511=>24715, +15512=>24716, +15513=>24717, +15514=>24718, +15515=>24719, +15516=>24720, +15517=>24721, +15518=>24722, +15519=>24723, +15520=>24724, +15521=>24725, +15522=>24726, +15523=>24727, +15524=>24728, +15525=>24729, +15526=>24730, +15527=>24731, +15528=>24732, +15529=>24733, +15530=>24734, +15531=>24735, +15532=>24736, +15533=>24737, +15534=>24738, +15535=>24739, +15536=>24740, +15537=>24741, +15538=>24742, +15539=>24743, +15540=>24744, +15541=>24745, +15542=>24746, +15543=>24747, +15544=>24748, +15545=>24749, +15546=>24750, +15547=>24751, +15548=>24752, +15549=>24753, +15550=>24754, +15551=>24755, +15552=>24756, +15553=>24757, +15554=>24758, +15555=>24759, +15556=>24760, +15557=>24761, +15558=>24762, +15559=>24763, +15560=>24764, +15561=>24765, +15562=>24766, +15563=>24767, +15564=>24768, +15565=>24769, +15566=>24770, +15567=>24771, +15568=>24772, +15569=>24773, +15570=>24774, +15571=>24775, +15572=>24776, +15573=>24777, +15574=>24778, +15575=>24779, +15576=>24780, +15577=>24781, +15578=>24782, +15579=>24783, +15580=>24784, +15581=>24785, +15582=>24786, +15583=>24787, +15585=>24788, +15586=>24789, +15587=>24790, +15588=>24791, +15589=>24792, +15590=>24793, +15591=>24794, +15592=>24795, +15593=>24796, +15594=>24797, +15595=>24798, +15596=>24799, +15597=>24800, +15598=>24801, +15599=>24802, +15600=>24803, +15601=>24804, +15602=>24805, +15603=>24806, +15604=>24807, +15605=>24808, +15606=>24809, +15607=>24810, +15608=>24811, +15609=>24812, +15610=>24813, +15611=>24814, +15612=>24815, +15613=>24816, +15614=>24817, +15615=>24818, +15616=>24819, +15617=>24820, +15618=>24821, +15619=>24822, +15620=>24823, +15621=>24824, +15622=>24825, +15623=>24826, +15624=>24827, +15625=>24828, +15626=>24829, +15627=>24830, +15628=>24831, +15629=>24832, +15630=>24833, +15631=>24834, +15632=>24835, +15633=>24836, +15634=>24837, +15635=>24838, +15636=>24839, +15637=>24840, +15638=>24841, +15639=>24842, +15640=>24843, +15641=>24844, +15642=>24845, +15643=>24846, +15644=>24847, +15645=>24848, +15646=>24849, +15647=>24850, +15648=>24851, +15649=>24852, +15650=>24853, +15651=>24854, +15652=>24855, +15653=>24856, +15654=>24857, +15655=>24858, +15656=>24859, +15657=>24860, +15658=>24861, +15659=>24862, +15660=>24863, +15661=>24864, +15662=>24865, +15663=>24866, +15664=>24867, +15665=>24868, +15666=>24869, +15667=>24870, +15668=>24871, +15669=>24872, +15670=>24873, +15671=>24874, +15672=>24875, +15673=>24876, +15674=>24877, +15675=>24878, +15676=>24879, +15677=>24880, +15678=>24881, +15679=>24882, +15680=>24883, +15681=>24884, +15682=>24885, +15683=>24886, +15684=>24887, +15685=>24888, +15686=>24889, +15687=>24890, +15688=>24891, +15689=>24892, +15690=>24893, +15691=>24894, +15692=>24895, +15693=>24896, +15694=>24897, +15695=>24898, +15696=>24899, +15697=>24900, +15698=>24901, +15699=>24902, +15700=>24903, +15701=>24904, +15702=>24905, +15703=>24906, +15704=>24907, +15705=>24908, +15706=>24909, +15707=>24910, +15708=>24911, +15709=>24912, +15710=>24913, +15711=>24914, +15712=>24915, +15713=>24916, +15714=>24917, +15715=>24918, +15716=>24919, +15717=>24920, +15718=>24921, +15719=>24922, +15720=>24923, +15721=>24924, +15722=>24925, +15723=>24926, +15724=>24927, +15725=>24928, +15726=>24929, +15727=>24930, +15728=>24931, +15729=>24932, +15730=>24933, +15731=>24934, +15732=>24935, +15733=>24936, +15734=>24937, +15735=>24938, +15736=>24939, +15737=>24940, +15738=>24941, +15739=>24942, +15740=>24943, +15741=>24944, +15742=>24945, +15743=>24946, +15744=>24947, +15745=>24948, +15746=>24949, +15747=>24950, +15748=>24951, +15749=>24952, +15750=>24953, +15751=>24954, +15752=>24955, +15753=>24956, +15754=>24957, +15755=>24958, +15756=>24959, +15757=>24960, +15758=>24961, +15759=>24962, +15760=>24963, +15761=>24964, +15762=>24965, +15763=>24966, +15764=>24967, +15765=>24968, +15766=>24969, +15767=>24970, +15768=>24971, +15769=>24972, +15770=>24973, +15771=>24974, +15772=>24975, +15773=>24976, +15774=>24977, +15775=>24978, +15776=>24979, +15777=>24980, +15778=>24981, +15779=>24982, +15780=>24983, +15781=>24984, +15782=>24985, +15783=>24986, +15784=>24987, +15785=>24988, +15786=>24989, +15787=>24990, +15788=>24991, +15789=>24992, +15790=>24993, +15791=>24994, +15792=>24995, +15793=>24996, +15794=>24997, +15795=>24998, +15796=>24999, +15797=>25000, +15798=>25001, +15799=>25002, +15800=>25003, +15801=>25004, +15802=>25005, +15803=>25006, +15804=>25007, +15805=>25008, +15806=>25009, +15807=>25010, +15808=>25011, +15809=>25012, +15810=>25013, +15811=>25014, +15812=>25015, +15813=>25016, +15814=>25017, +15815=>25018, +15816=>25019, +15817=>25020, +15818=>25021, +15819=>25022, +15820=>25023, +15821=>25024, +15822=>25025, +15823=>25026, +15824=>25027, +15825=>25028, +15826=>25029, +15827=>25030, +15828=>25031, +15829=>25032, +15830=>25033, +15831=>25034, +15832=>25035, +15833=>25036, +15834=>25037, +15835=>25038, +15836=>25039, +15837=>25040, +15838=>25041, +15839=>25042, +15840=>25043, +15841=>25044, +15842=>25045, +15843=>25046, +15844=>25047, +15845=>25048, +15846=>25049, +15847=>25050, +15848=>25051, +15849=>25052, +15850=>25053, +15851=>25054, +15852=>25055, +15853=>25056, +15854=>25057, +15855=>25058, +15856=>25059, +15857=>25060, +15858=>25061, +15859=>25062, +15860=>25063, +15861=>25064, +15862=>25065, +15863=>25066, +15864=>25067, +15865=>25068, +15866=>25069, +15867=>25070, +15868=>25071, +15869=>25072, +15870=>25073, +15871=>25074, +15872=>25075, +15873=>25076, +15874=>25077, +15875=>25078, +15876=>25079, +15877=>25080, +15878=>25081, +15879=>25082, +15880=>25083, +15881=>25084, +15882=>25085, +15883=>25086, +15884=>25087, +15885=>25088, +15886=>25089, +15887=>25090, +15888=>25091, +15889=>25092, +15890=>25093, +15891=>25094, +15892=>25095, +15893=>25096, +15894=>25097, +15895=>25098, +15896=>25099, +15897=>25100, +15898=>25101, +15899=>25102, +15900=>25103, +15901=>25104, +15902=>25105, +15903=>25106, +15904=>25107, +15905=>25108, +15906=>25109, +15907=>25110, +15908=>25111, +15909=>25112, +15910=>25113, +15911=>25114, +15912=>25115, +15913=>25116, +15914=>25117, +15915=>25118, +15916=>25119, +15917=>25120, +15918=>25121, +15919=>25122, +15920=>25123, +15921=>25124, +15922=>25125, +15923=>25126, +15924=>25127, +15925=>25128, +15926=>25129, +15927=>25130, +15928=>25131, +15929=>25132, +15930=>25133, +15931=>25134, +15932=>25135, +15933=>25136, +15934=>25137, +15935=>25138, +15936=>25139, +15937=>25140, +15938=>25141, +15939=>25142, +15940=>25143, +15941=>25144, +15942=>25145, +15943=>25146, +15944=>25147, +15945=>25148, +15946=>25149, +15947=>25150, +15948=>25151, +15949=>25152, +15950=>25153, +15951=>25154, +15952=>25155, +15953=>25156, +15954=>25157, +15955=>25158, +15956=>25159, +15957=>25160, +15958=>25161, +15959=>25162, +15960=>25163, +15961=>25164, +15962=>25165, +15963=>25166, +15964=>25167, +15965=>25168, +15966=>25169, +15967=>25170, +15968=>25171, +15969=>25172, +15970=>25173, +15971=>25174, +15972=>25175, +15973=>25176, +15974=>25177, +15975=>25178, +15976=>25179, +15977=>25180, +15978=>25181, +15979=>25182, +15980=>25183, +15981=>25184, +15982=>25185, +15983=>25186, +15984=>25187, +15985=>25188, +15986=>25189, +15987=>25190, +15988=>25191, +15989=>25192, +15990=>25193, +15991=>25194, +15992=>25195, +15993=>25196, +15994=>25197, +15995=>25198, +15996=>25199, +15997=>25200, +15998=>25201, +15999=>25202, +16000=>25203, +16001=>25204, +16002=>25205, +16003=>25206, +16004=>25207, +16005=>25208, +16006=>25209, +16007=>25210, +16008=>25211, +16009=>25212, +16010=>25213, +16011=>25214, +16012=>25215, +16013=>25216, +16014=>25217, +16015=>25218, +16016=>25219, +16017=>25220, +16018=>25221, +16019=>25222, +16020=>25223, +16021=>25224, +16022=>25225, +16023=>25226, +16024=>25227, +16025=>25228, +16026=>25229, +16027=>25230, +16028=>25231, +16029=>25232, +16030=>25233, +16031=>25234, +16032=>25235, +16033=>25236, +16034=>25237, +16035=>25238, +16036=>25239, +16037=>25240, +16038=>25241, +16039=>25242, +16040=>25243, +16041=>25244, +16042=>25245, +16043=>25246, +16044=>25247, +16045=>25248, +16046=>25249, +16047=>25250, +16048=>25251, +16049=>25252, +16050=>25253, +16051=>25254, +16052=>25255, +16053=>25256, +16054=>25257, +16055=>25258, +16056=>25259, +16057=>25260, +16058=>25261, +16059=>25262, +16060=>25263, +16061=>25264, +16062=>25265, +16063=>25266, +16064=>25267, +16065=>25268, +16066=>25269, +16067=>25270, +16068=>25271, +16069=>25272, +16070=>25273, +16071=>25274, +16072=>25275, +16073=>25276, +16074=>25277, +16075=>25278, +16076=>25279, +16077=>25280, +16078=>25281, +16079=>25282, +16080=>25283, +16081=>25284, +16082=>25285, +16083=>25286, +16084=>25287, +16085=>25288, +16086=>25289, +16087=>25290, +16088=>25291, +16089=>25292, +16090=>25293, +16091=>25294, +16092=>25295, +16093=>25296, +16094=>25297, +16095=>25298, +16096=>25299, +16097=>25300, +16098=>25301, +16099=>25302, +16100=>25303, +16101=>25304, +16102=>25305, +16103=>25306, +16104=>25307, +16105=>25308, +16106=>25309, +16107=>25310, +16108=>25311, +16109=>25312, +16110=>25313, +16111=>25314, +16112=>25315, +16113=>25316, +16114=>25317, +16115=>25318, +16116=>25319, +16117=>25320, +16118=>25321, +16119=>25322, +16120=>25323, +16121=>25324, +16122=>25325, +16123=>25326, +16124=>25327, +16125=>25328, +16126=>25329, +16127=>25330, +16128=>25331, +16129=>25332, +16130=>25333, +16131=>25334, +16132=>25335, +16133=>25336, +16134=>25337, +16135=>25338, +16136=>25339, +16137=>25340, +16138=>25341, +16139=>25342, +16140=>25343, +16141=>25344, +16142=>25345, +16143=>25346, +16144=>25347, +16145=>25348, +16146=>25349, +16147=>25350, +16148=>25351, +16149=>25352, +16150=>25353, +16151=>25354, +16152=>25355, +16153=>25356, +16154=>25357, +16155=>25358, +16156=>25359, +16157=>25360, +16158=>25361, +16159=>25362, +16160=>25363, +16161=>25364, +16162=>25365, +16163=>25366, +16164=>25367, +16165=>25368, +16166=>25369, +16167=>25370, +16168=>25371, +16169=>25372, +16170=>25373, +16171=>25374, +16172=>25375, +16173=>25376, +16174=>25377, +16175=>25378, +16176=>25379, +16177=>25380, +16178=>25381, +16179=>25382, +16180=>25383, +16181=>25384, +16182=>25385, +16183=>25386, +16184=>25387, +16185=>25388, +16186=>25389, +16187=>25390, +16188=>25391, +16189=>25392, +16190=>25393, +16191=>25394, +16192=>25395, +16193=>25396, +16194=>25397, +16195=>25398, +16196=>25399, +16197=>25400, +16198=>25401, +16199=>25402, +16200=>25403, +16201=>25404, +16202=>25405, +16203=>25406, +16204=>25407, +16205=>25408, +16206=>25409, +16207=>25410, +16208=>25411, +16209=>25412, +16210=>25413, +16211=>25414, +16212=>25415, +16213=>25416, +16214=>25417, +16215=>25418, +16216=>25419, +16217=>25420, +16218=>25421, +16219=>25422, +16220=>25423, +16221=>25424, +16222=>25425, +16223=>25426, +16224=>25427, +16225=>25428, +16226=>25429, +16227=>25430, +16228=>25431, +16229=>25432, +16230=>25433, +16231=>25434, +16232=>25435, +16233=>25436, +16234=>25437, +16235=>25438, +16236=>25439, +16237=>25440, +16238=>25441, +16239=>25442, +16240=>25443, +16241=>25444, +16242=>25445, +16243=>25446, +16244=>25447, +16245=>25448, +16246=>25449, +16247=>25450, +16248=>25451, +16249=>25452, +16250=>25453, +16251=>25454, +16252=>25455, +16253=>25456, +16254=>25457, +16255=>25458, +16256=>25459, +16257=>25460, +16258=>25461, +16259=>25462, +16260=>25463, +16261=>25464, +16262=>25465, +16263=>25466, +16264=>25467, +16265=>25468, +16266=>25469, +16267=>25470, +16268=>25471, +16269=>25472, +16270=>25473, +16271=>25474, +16272=>25475, +16273=>25476, +16274=>25477, +16275=>25478, +16276=>25479, +16277=>25480, +16278=>25481, +16279=>25482, +16280=>25483, +16281=>25484, +16282=>25485, +16283=>25486, +16284=>25487, +16285=>25488, +16286=>25489, +16287=>25490, +16288=>25491, +16289=>25492, +16290=>25493, +16291=>25494, +16292=>25495, +16293=>25496, +16294=>25497, +16295=>25498, +16296=>25499, +16297=>25500, +16298=>25501, +16299=>25502, +16300=>25503, +16301=>25504, +16302=>25505, +16303=>25506, +16304=>25507, +16305=>25508, +16306=>25509, +16307=>25510, +16308=>25511, +16309=>25512, +16310=>25513, +16311=>25514, +16312=>25515, +16313=>25516, +16314=>25517, +16315=>25518, +16316=>25519, +16317=>25520, +16318=>25521, +16319=>25522, +16320=>25523, +16321=>25524, +16322=>25525, +16323=>25526, +16324=>25527, +16325=>25528, +16326=>25529, +16327=>25530, +16328=>25531, +16329=>25532, +16330=>25533, +16331=>25534, +16332=>25535, +16333=>25536, +16334=>25537, +16335=>25538, +16336=>25539, +16337=>25540, +16338=>25541, +16339=>25542, +16340=>25543, +16341=>25544, +16342=>25545, +16343=>25546, +16344=>25547, +16345=>25548, +16346=>25549, +16347=>25550, +16348=>25551, +16349=>25552, +16350=>25553, +16351=>25554, +16352=>25555, +16353=>25556, +16354=>25557, +16355=>25558, +16356=>25559, +16357=>25560, +16358=>25561, +16359=>25562, +16360=>25563, +16361=>25564, +16362=>25565, +16363=>25566, +16364=>25567, +16365=>25568, +16366=>25569, +16367=>25570, +16368=>25571, +16369=>25572, +16370=>25573, +16371=>25574, +16372=>25575, +16373=>25576, +16374=>25577, +16375=>25578, +16376=>25579, +16377=>25580, +16378=>25581, +16379=>25582, +16380=>25583, +16381=>25584, +16382=>25585, +16383=>25586, +16384=>25587, +16385=>25588, +16386=>25589, +16387=>25590, +16388=>25591, +16389=>25592, +16390=>25593, +16391=>25594, +16392=>25595, +16393=>25596, +16394=>25597, +16395=>25598, +16396=>25599, +16397=>25600, +16398=>25601, +16399=>25602, +16400=>25603, +16401=>25604, +16402=>25605, +16403=>25606, +16404=>25607, +16405=>25608, +16406=>25609, +16407=>25610, +16408=>25611, +16409=>25612, +16410=>25613, +16411=>25614, +16412=>25615, +16413=>25616, +16414=>25617, +16415=>25618, +16416=>25619, +16417=>25620, +16418=>25621, +16419=>25622, +16420=>25623, +16421=>25624, +16422=>25625, +16423=>25626, +16424=>25627, +16425=>25628, +16426=>25629, +16427=>25630, +16428=>25631, +16429=>25632, +16430=>25633, +16431=>25634, +16432=>25635, +16433=>25636, +16434=>25637, +16435=>25638, +16436=>25639, +16437=>25640, +16438=>25641, +16439=>25642, +16440=>25643, +16441=>25644, +16442=>25645, +16443=>25646, +16444=>25647, +16445=>25648, +16446=>25649, +16447=>25650, +16448=>25651, +16449=>25652, +16450=>25653, +16451=>25654, +16452=>25655, +16453=>25656, +16454=>25657, +16455=>25658, +16456=>25659, +16457=>25660, +16458=>25661, +16459=>25662, +16460=>25663, +16461=>25664, +16462=>25665, +16463=>25666, +16464=>25667, +16465=>25668, +16466=>25669, +16467=>25670, +16468=>25671, +16469=>25672, +16471=>25673, +16472=>25674, +16473=>25675, +16474=>25676, +16475=>25677, +16476=>25678, +16477=>25679, +16478=>25680, +16479=>25681, +16480=>25682, +16481=>25683, +16482=>25684, +16483=>25685, +16484=>25686, +16485=>25687, +16486=>25688, +16487=>25689, +16488=>25690, +16489=>25691, +16490=>25692, +16491=>25693, +16492=>25694, +16493=>25695, +16494=>25696, +16495=>25697, +16496=>25698, +16497=>25699, +16498=>25700, +16499=>25701, +16500=>25702, +16501=>25703, +16502=>25704, +16503=>25705, +16504=>25706, +16505=>25707, +16506=>25708, +16507=>25709, +16508=>25710, +16509=>25711, +16510=>25712, +16511=>25713, +16512=>25714, +16513=>25715, +16514=>25716, +16515=>25717, +16516=>25718, +16517=>25719, +16518=>25720, +16519=>25721, +16520=>25722, +16521=>25723, +16522=>25724, +16523=>25725, +16524=>25726, +16525=>25727, +16526=>25728, +16527=>25729, +16528=>25730, +16529=>25731, +16530=>25732, +16531=>25733, +16532=>25734, +16533=>25735, +16534=>25736, +16535=>25737, +16536=>25738, +16537=>25739, +16538=>25740, +16539=>25741, +16540=>25742, +16541=>25743, +16542=>25744, +16543=>25745, +16544=>25746, +16545=>25747, +16546=>25748, +16547=>25749, +16548=>25750, +16549=>25751, +16550=>25752, +16551=>25753, +16552=>25754, +16553=>25755, +16554=>25756, +16555=>25757, +16556=>25758, +16557=>25759, +16558=>25760, +16559=>25761, +16560=>25762, +16561=>25763, +16562=>25764, +16563=>25765, +16564=>25766, +16565=>25767, +16566=>25768, +16567=>25769, +16568=>25770, +16569=>25771, +16570=>25772, +16571=>25773, +16572=>25774, +16573=>25775, +16574=>25776, +16575=>25777, +16576=>25778, +16577=>25779, +16578=>25780, +16579=>25781, +16580=>25782, +16581=>25783, +16582=>25784, +16583=>25785, +16584=>25786, +16585=>25787, +16586=>25788, +16587=>25789, +16588=>25790, +16589=>25791, +16590=>25792, +16591=>25793, +16592=>25794, +16593=>25795, +16594=>25796, +16595=>25797, +16596=>25798, +16597=>25799, +16598=>25800, +16599=>25801, +16600=>25802, +16601=>25803, +16602=>25804, +16603=>25805, +16604=>25806, +16605=>25807, +16606=>25808, +16607=>25809, +16608=>25810, +16609=>25811, +16610=>25812, +16611=>25813, +16612=>25814, +16613=>25815, +16614=>25816, +16615=>25817, +16616=>25818, +16617=>25819, +16618=>25820, +16619=>25821, +16620=>25822, +16621=>25823, +16622=>25824, +16623=>25825, +16624=>25826, +16625=>25827, +16626=>25828, +16627=>25829, +16628=>25830, +16629=>25831, +16630=>25832, +16631=>25833, +16632=>25834, +16633=>25835, +16634=>25836, +16635=>25837, +16636=>25838, +16637=>25839, +16638=>25840, +16639=>25841, +16640=>25842, +16641=>25843, +16642=>25844, +16643=>25845, +16644=>25846, +16645=>25847, +16646=>25848, +16647=>25849, +16648=>25850, +16649=>25851, +16650=>25852, +16651=>25853, +16652=>25854, +16653=>25855, +16654=>25856, +16655=>25857, +16656=>25858, +16657=>25859, +16658=>25860, +16659=>25861, +16660=>25862, +16661=>25863, +16662=>25864, +16663=>25865, +16664=>25866, +16665=>25867, +16666=>25868, +16667=>25869, +16668=>25870, +16669=>25871, +16670=>25872, +16671=>25873, +16672=>25874, +16673=>25875, +16674=>25876, +16675=>25877, +16676=>25878, +16677=>25879, +16678=>25880, +16679=>25881, +16680=>25882, +16681=>25883, +16682=>25884, +16683=>25885, +16684=>25886, +16685=>25887, +16686=>25888, +16687=>25889, +16688=>25890, +16689=>25891, +16690=>25892, +16691=>25893, +16692=>25894, +16693=>25895, +16694=>25896, +16695=>25897, +16696=>25898, +16697=>25899, +16698=>25900, +16699=>25901, +16700=>25902, +16701=>25903, +16702=>25904, +16703=>25905, +16704=>25906, +16705=>25907, +16706=>25908, +16707=>25909, +16708=>25910, +16709=>25911, +16710=>25912, +16711=>25913, +16712=>25914, +16713=>25915, +16714=>25916, +16715=>25917, +16716=>25918, +16717=>25919, +16718=>25920, +16719=>25921, +16720=>25922, +16721=>25923, +16722=>25924, +16723=>25925, +16724=>25926, +16725=>25927, +16726=>25928, +16727=>25929, +16728=>25930, +16729=>25931, +16730=>25932, +16731=>25933, +16732=>25934, +16733=>25935, +16734=>25936, +16736=>25937, +16737=>25938, +16738=>25939, +16739=>25940, +16740=>25941, +16741=>25942, +16742=>25943, +16743=>25944, +16744=>25945, +16745=>25946, +16746=>25947, +16747=>25948, +16748=>25949, +16749=>25950, +16750=>25951, +16751=>25952, +16752=>25953, +16753=>25954, +16754=>25955, +16755=>25956, +16756=>25957, +16757=>25958, +16758=>25959, +16759=>25960, +16760=>25961, +16761=>25962, +16762=>25963, +16763=>25964, +16764=>25965, +16765=>25966, +16766=>25967, +16767=>25968, +16768=>25969, +16769=>25970, +16770=>25971, +16771=>25972, +16772=>25973, +16773=>25974, +16774=>25975, +16775=>25976, +16776=>25977, +16777=>25978, +16778=>25979, +16779=>25980, +16780=>25981, +16781=>25982, +16782=>25983, +16783=>25984, +16784=>25985, +16785=>25986, +16786=>25987, +16787=>25988, +16788=>25989, +16789=>25990, +16790=>25991, +16791=>25992, +16792=>25993, +16793=>25994, +16794=>25995, +16795=>25996, +16796=>25997, +16797=>25998, +16798=>25999, +16799=>26000, +16800=>26001, +16801=>26002, +16802=>26003, +16803=>26004, +16804=>26005, +16805=>26006, +16806=>26007, +16807=>26008, +16808=>26009, +16809=>26010, +16810=>26011, +16811=>26012, +16812=>26013, +16813=>26014, +16814=>26015, +16815=>26016, +16816=>26017, +16817=>26018, +16818=>26019, +16819=>26020, +16820=>26021, +16821=>26022, +16822=>26023, +16823=>26024, +16824=>26025, +16825=>26026, +16826=>26027, +16827=>26028, +16828=>26029, +16829=>26030, +16830=>26031, +16831=>26032, +16832=>26033, +16833=>26034, +16834=>26035, +16835=>26036, +16836=>26037, +16837=>26038, +16838=>26039, +16839=>26040, +16840=>26041, +16841=>26042, +16842=>26043, +16843=>26044, +16844=>26045, +16845=>26046, +16846=>26047, +16847=>26048, +16848=>26049, +16849=>26050, +16850=>26051, +16851=>26052, +16852=>26053, +16853=>26054, +16854=>26055, +16855=>26056, +16856=>26057, +16857=>26058, +16858=>26059, +16859=>26060, +16860=>26061, +16861=>26062, +16862=>26063, +16863=>26064, +16864=>26065, +16865=>26066, +16866=>26067, +16867=>26068, +16868=>26069, +16869=>26070, +16870=>26071, +16871=>26072, +16872=>26073, +16873=>26074, +16874=>26075, +16875=>26076, +16876=>26077, +16877=>26078, +16878=>26079, +16879=>26080, +16880=>26081, +16881=>26082, +16882=>26083, +16883=>26084, +16884=>26085, +16885=>26086, +16886=>26087, +16887=>26088, +16888=>26089, +16889=>26090, +16890=>26091, +16891=>26092, +16892=>26093, +16893=>26094, +16894=>26095, +16895=>26096, +16896=>26097, +16897=>26098, +16898=>26099, +16899=>26100, +16900=>26101, +16901=>26102, +16902=>26103, +16903=>26104, +16904=>26105, +16905=>26106, +16906=>26107, +16907=>26108, +16908=>26109, +16909=>26110, +16910=>26111, +16911=>26112, +16912=>26113, +16913=>26114, +16914=>26115, +16915=>26116, +16916=>26117, +16917=>26118, +16918=>26119, +16919=>26120, +16920=>26121, +16921=>26122, +16922=>26123, +16923=>26124, +16924=>26125, +16925=>26126, +16926=>26127, +16927=>26128, +16928=>26129, +16929=>26130, +16930=>26131, +16931=>26132, +16932=>26133, +16933=>26134, +16934=>26135, +16935=>26136, +16936=>26137, +16937=>26138, +16938=>26139, +16939=>26140, +16940=>26141, +16941=>26142, +16942=>26143, +16943=>26144, +16944=>26145, +16945=>26146, +16946=>26147, +16947=>26148, +16948=>26149, +16949=>26150, +16950=>26151, +16951=>26152, +16952=>26153, +16953=>26154, +16954=>26155, +16955=>26156, +16956=>26157, +16957=>26158, +16958=>26159, +16959=>26160, +16960=>26161, +16961=>26162, +16962=>26163, +16963=>26164, +16964=>26165, +16965=>26166, +16966=>26167, +16967=>26168, +16968=>26169, +16969=>26170, +16970=>26171, +16971=>26172, +16972=>26173, +16973=>26174, +16974=>26175, +16975=>26176, +16976=>26177, +16977=>26178, +16978=>26179, +16979=>26180, +16980=>26181, +16981=>26182, +16982=>26183, +16983=>26184, +16984=>26185, +16985=>26186, +16986=>26187, +16987=>26188, +16988=>26189, +16989=>26190, +16990=>26191, +16991=>26192, +16992=>26193, +16993=>26194, +16994=>26195, +16995=>26196, +16996=>26197, +16997=>26198, +16998=>26199, +16999=>26200, +17000=>26201, +17001=>26202, +17002=>26203, +17003=>26204, +17004=>26205, +17005=>26206, +17006=>26207, +17007=>26208, +17008=>26209, +17009=>26210, +17010=>26211, +17011=>26212, +17012=>26213, +17013=>26214, +17014=>26215, +17015=>26216, +17016=>26217, +17017=>26218, +17018=>26219, +17019=>26220, +17020=>26221, +17021=>26222, +17022=>26223, +17023=>26224, +17024=>26225, +17025=>26226, +17026=>26227, +17027=>26228, +17028=>26229, +17029=>26230, +17030=>26231, +17031=>26232, +17032=>26233, +17033=>26234, +17034=>26235, +17035=>26236, +17036=>26237, +17037=>26238, +17038=>26239, +17039=>26240, +17040=>26241, +17041=>26242, +17042=>26243, +17043=>26244, +17044=>26245, +17045=>26246, +17046=>26247, +17047=>26248, +17048=>26249, +17049=>26250, +17050=>26251, +17051=>26252, +17052=>26253, +17053=>26254, +17054=>26255, +17055=>26256, +17056=>26257, +17057=>26258, +17058=>26259, +17059=>26260, +17060=>26261, +17061=>26262, +17062=>26263, +17063=>26264, +17064=>26265, +17065=>26266, +17066=>26267, +17067=>26268, +17068=>26269, +17069=>26270, +17070=>26271, +17071=>26272, +17072=>26273, +17073=>26274, +17074=>26275, +17075=>26276, +17076=>26277, +17077=>26278, +17078=>26279, +17079=>26280, +17080=>26281, +17081=>26282, +17082=>26283, +17083=>26284, +17084=>26285, +17085=>26286, +17086=>26287, +17087=>26288, +17088=>26289, +17089=>26290, +17090=>26291, +17091=>26292, +17092=>26293, +17093=>26294, +17094=>26295, +17095=>26296, +17096=>26297, +17097=>26298, +17098=>26299, +17099=>26300, +17100=>26301, +17101=>26302, +17102=>26303, +17103=>26304, +17104=>26305, +17105=>26306, +17106=>26307, +17107=>26308, +17108=>26309, +17109=>26310, +17110=>26311, +17111=>26312, +17112=>26313, +17113=>26314, +17114=>26315, +17115=>26316, +17116=>26317, +17117=>26318, +17118=>26319, +17119=>26320, +17120=>26321, +17121=>26322, +17122=>26323, +17123=>26324, +17124=>26325, +17125=>26326, +17126=>26327, +17127=>26328, +17128=>26329, +17129=>26330, +17130=>26331, +17131=>26332, +17132=>26333, +17133=>26334, +17134=>26335, +17135=>26336, +17136=>26337, +17137=>26338, +17138=>26339, +17139=>26340, +17140=>26341, +17141=>26342, +17142=>26343, +17143=>26344, +17144=>26345, +17145=>26346, +17146=>26347, +17147=>26348, +17148=>26349, +17149=>26350, +17150=>26351, +17151=>26352, +17152=>26353, +17153=>26354, +17154=>26355, +17155=>26356, +17156=>26357, +17157=>26358, +17158=>26359, +17159=>26360, +17160=>26361, +17161=>26362, +17162=>26363, +17163=>26364, +17164=>26365, +17165=>26366, +17166=>26367, +17167=>26368, +17168=>26369, +17169=>26370, +17170=>26371, +17171=>26372, +17172=>26373, +17173=>26374, +17174=>26375, +17175=>26376, +17176=>26377, +17177=>26378, +17178=>26379, +17179=>26380, +17180=>26381, +17181=>26382, +17182=>26383, +17183=>26384, +17184=>26385, +17185=>26386, +17186=>26387, +17187=>26388, +17188=>26389, +17189=>26390, +17190=>26391, +17191=>26392, +17192=>26393, +17193=>26394, +17194=>26395, +17195=>26396, +17196=>26397, +17197=>26398, +17198=>26399, +17199=>26400, +17200=>26401, +17201=>26402, +17202=>26403, +17203=>26404, +17204=>26405, +17205=>26406, +17206=>26407, +17208=>26408, +17209=>26409, +17210=>26410, +17211=>26411, +17212=>26412, +17213=>26413, +17214=>26414, +17215=>26415, +17216=>26416, +17217=>26417, +17218=>26418, +17219=>26419, +17220=>26420, +17221=>26421, +17222=>26422, +17223=>26423, +17224=>26424, +17225=>26425, +17226=>26426, +17227=>26427, +17228=>26428, +17229=>26429, +17230=>26430, +17231=>26431, +17232=>26432, +17233=>26433, +17234=>26434, +17235=>26435, +17236=>26436, +17237=>26437, +17238=>26438, +17239=>26439, +17240=>26440, +17241=>26441, +17242=>26442, +17243=>26443, +17244=>26444, +17245=>26445, +17246=>26446, +17247=>26447, +17248=>26448, +17249=>26449, +17250=>26450, +17251=>26451, +17252=>26452, +17253=>26453, +17254=>26454, +17255=>26455, +17256=>26456, +17257=>26457, +17258=>26458, +17259=>26459, +17260=>26460, +17261=>26461, +17262=>26462, +17263=>26463, +17264=>26464, +17265=>26465, +17266=>26466, +17267=>26467, +17268=>26468, +17269=>26469, +17270=>26470, +17271=>26471, +17272=>26472, +17273=>26473, +17274=>26474, +17275=>26475, +17276=>26476, +17277=>26477, +17278=>26478, +17279=>26479, +17280=>26480, +17281=>26481, +17282=>26482, +17283=>26483, +17284=>26484, +17285=>26485, +17286=>26486, +17287=>26487, +17288=>26488, +17289=>26489, +17290=>26490, +17291=>26491, +17292=>26492, +17293=>26493, +17294=>26494, +17295=>26495, +17296=>26496, +17297=>26497, +17298=>26498, +17299=>26499, +17300=>26500, +17301=>26501, +17302=>26502, +17303=>26503, +17304=>26504, +17305=>26505, +17306=>26506, +17307=>26507, +17308=>26508, +17309=>26509, +17310=>26510, +17311=>26511, +17312=>26512, +17313=>26513, +17314=>26514, +17315=>26515, +17316=>26516, +17317=>26517, +17318=>26518, +17319=>26519, +17320=>26520, +17321=>26521, +17322=>26522, +17323=>26523, +17325=>26524, +17326=>26525, +17327=>26526, +17328=>26527, +17330=>26528, +17331=>26529, +17332=>26530, +17333=>26531, +17334=>26532, +17335=>26533, +17336=>26534, +17337=>26535, +17338=>26536, +17339=>26537, +17340=>26538, +17341=>26539, +17342=>26540, +17343=>26541, +17344=>26542, +17345=>26543, +17346=>26544, +17347=>26545, +17348=>26546, +17349=>26547, +17350=>26548, +17351=>26549, +17352=>26550, +17353=>26551, +17354=>26552, +17355=>26553, +17356=>26554, +17357=>26555, +17358=>26556, +17359=>26557, +17360=>26558, +17361=>26559, +17362=>26560, +17363=>26561, +17364=>26562, +17365=>26563, +17366=>26564, +17367=>26565, +17368=>26566, +17369=>26567, +17370=>26568, +17371=>26569, +17372=>26570, +17374=>26571, +17375=>26572, +17376=>26573, +17377=>26574, +17378=>26575, +17379=>26576, +17380=>26577, +17381=>26578, +17382=>26579, +17383=>26580, +17384=>26581, +17385=>26582, +17386=>26583, +17387=>26584, +17388=>26585, +17389=>26586, +17390=>26587, +17391=>26588, +17392=>26589, +17393=>26590, +17394=>26591, +17395=>26592, +17396=>26593, +17397=>26594, +17398=>26595, +17399=>26596, +17400=>26597, +17401=>26598, +17402=>26599, +17403=>26600, +17404=>26601, +17405=>26602, +17406=>26603, +17407=>26604, +17408=>26605, +17409=>26606, +17410=>26607, +17411=>26608, +17412=>26609, +17413=>26610, +17414=>26611, +17415=>26612, +17416=>26613, +17417=>26614, +17418=>26615, +17419=>26616, +17420=>26617, +17421=>26618, +17422=>26619, +17423=>26620, +17424=>26621, +17425=>26622, +17426=>26623, +17427=>26624, +17428=>26625, +17429=>26626, +17430=>26627, +17431=>26628, +17432=>26629, +17433=>26630, +17434=>26631, +17435=>26632, +17436=>26633, +17437=>26634, +17438=>26635, +17439=>26636, +17440=>26637, +17441=>26638, +17442=>26639, +17443=>26640, +17444=>26641, +17445=>26642, +17446=>26643, +17447=>26644, +17448=>26645, +17449=>26646, +17450=>26647, +17451=>26648, +17452=>26649, +17453=>26650, +17454=>26651, +17455=>26652, +17456=>26653, +17457=>26654, +17458=>26655, +17459=>26656, +17460=>26657, +17461=>26658, +17462=>26659, +17463=>26660, +17464=>26661, +17465=>26662, +17466=>26663, +17467=>26664, +17468=>26665, +17469=>26666, +17470=>26667, +17471=>26668, +17472=>26669, +17473=>26670, +17474=>26671, +17475=>26672, +17476=>26673, +17477=>26674, +17478=>26675, +17479=>26676, +17480=>26677, +17481=>26678, +17482=>26679, +17483=>26680, +17484=>26681, +17485=>26682, +17486=>26683, +17487=>26684, +17488=>26685, +17489=>26686, +17490=>26687, +17491=>26688, +17492=>26689, +17493=>26690, +17494=>26691, +17495=>26692, +17496=>26693, +17497=>26694, +17498=>26695, +17499=>26696, +17500=>26697, +17501=>26698, +17502=>26699, +17503=>26700, +17504=>26701, +17505=>26702, +17506=>26703, +17507=>26704, +17508=>26705, +17509=>26706, +17510=>26707, +17511=>26708, +17512=>26709, +17513=>26710, +17514=>26711, +17515=>26712, +17516=>26713, +17517=>26714, +17518=>26715, +17519=>26716, +17520=>26717, +17521=>26718, +17522=>26719, +17523=>26720, +17524=>26721, +17525=>26722, +17526=>26723, +17527=>26724, +17528=>26725, +17529=>26726, +17530=>26727, +17531=>26728, +17532=>26729, +17533=>26730, +17534=>26731, +17535=>26732, +17536=>26733, +17537=>26734, +17538=>26735, +17539=>26736, +17540=>26737, +17541=>26738, +17542=>26739, +17543=>26740, +17544=>26741, +17545=>26742, +17546=>26743, +17547=>26744, +17548=>26745, +17549=>26746, +17550=>26747, +17551=>26748, +17552=>26749, +17553=>26750, +17554=>26751, +17555=>26752, +17556=>26753, +17557=>26754, +17558=>26755, +17559=>26756, +17560=>26757, +17561=>26758, +17562=>26759, +17563=>26760, +17564=>26761, +17565=>26762, +17566=>26763, +17567=>26764, +17568=>26765, +17569=>26766, +17570=>26767, +17571=>26768, +17572=>26769, +17573=>26770, +17574=>26771, +17575=>26772, +17576=>26773, +17577=>26774, +17578=>26775, +17579=>26776, +17580=>26777, +17581=>26778, +17582=>26779, +17583=>26780, +17584=>26781, +17585=>26782, +17586=>26783, +17587=>26784, +17588=>26785, +17589=>26786, +17590=>26787, +17591=>26788, +17592=>26789, +17593=>26790, +17594=>26791, +17595=>26792, +17596=>26793, +17597=>26794, +17598=>26795, +17599=>26796, +17600=>26797, +17601=>26798, +17602=>26799, +17603=>26800, +17604=>26801, +17605=>26802, +17606=>26803, +17607=>26804, +17608=>26805, +17609=>26806, +17610=>26807, +17611=>26808, +17612=>26809, +17613=>26810, +17614=>26811, +17615=>26812, +17616=>26813, +17617=>26814, +17618=>26815, +17619=>26816, +17620=>26817, +17621=>26818, +17623=>26819, +17624=>26820, +17625=>26821, +17626=>26822, +17627=>26823, +17628=>26824, +17629=>26825, +17630=>26826, +17631=>26827, +17632=>26828, +17633=>26829, +17634=>26830, +17635=>26831, +17636=>26832, +17637=>26833, +17638=>26834, +17639=>26835, +17640=>26836, +17641=>26837, +17642=>26838, +17643=>26839, +17644=>26840, +17645=>26841, +17646=>26842, +17647=>26843, +17648=>26844, +17649=>26845, +17650=>26846, +17651=>26847, +17652=>26848, +17653=>26849, +17654=>26850, +17655=>26851, +17656=>26852, +17657=>26853, +17658=>26854, +17659=>26855, +17660=>26856, +17661=>26857, +17662=>26858, +17663=>26859, +17664=>26860, +17665=>26861, +17666=>26862, +17667=>26863, +17668=>26864, +17669=>26865, +17670=>26866, +17671=>26867, +17672=>26868, +17673=>26869, +17674=>26870, +17675=>26871, +17676=>26872, +17677=>26873, +17678=>26874, +17679=>26875, +17680=>26876, +17681=>26877, +17682=>26878, +17683=>26879, +17684=>26880, +17685=>26881, +17686=>26882, +17687=>26883, +17688=>26884, +17689=>26885, +17690=>26886, +17691=>26887, +17692=>26888, +17693=>26889, +17694=>26890, +17695=>26891, +17696=>26892, +17697=>26893, +17698=>26894, +17699=>26895, +17700=>26896, +17701=>26897, +17702=>26898, +17703=>26899, +17704=>26900, +17705=>26901, +17706=>26902, +17707=>26903, +17708=>26904, +17709=>26905, +17710=>26906, +17711=>26907, +17712=>26908, +17713=>26909, +17714=>26910, +17715=>26911, +17716=>26912, +17717=>26913, +17718=>26914, +17719=>26915, +17720=>26916, +17721=>26917, +17722=>26918, +17723=>26919, +17724=>26920, +17725=>26921, +17726=>26922, +17727=>26923, +17728=>26924, +17729=>26925, +17730=>26926, +17731=>26927, +17732=>26928, +17733=>26929, +17734=>26930, +17735=>26931, +17736=>26932, +17737=>26933, +17738=>26934, +17739=>26935, +17740=>26936, +17741=>26937, +17742=>26938, +17743=>26939, +17744=>26940, +17745=>26941, +17746=>26942, +17747=>26943, +17748=>26944, +17749=>26945, +17750=>26946, +17751=>26947, +17752=>26948, +17753=>26949, +17754=>26950, +17755=>26951, +17756=>26952, +17757=>26953, +17758=>26954, +17759=>26955, +17760=>26956, +17761=>26957, +17762=>26958, +17763=>26959, +17764=>26960, +17765=>26961, +17766=>26962, +17767=>26963, +17768=>26964, +17769=>26965, +17770=>26966, +17771=>26967, +17772=>26968, +17773=>26969, +17774=>26970, +17775=>26971, +17776=>26972, +17777=>26973, +17778=>26974, +17779=>26975, +17780=>26976, +17781=>26977, +17782=>26978, +17783=>26979, +17784=>26980, +17785=>26981, +17786=>26982, +17787=>26983, +17788=>26984, +17789=>26985, +17790=>26986, +17791=>26987, +17792=>26988, +17793=>26989, +17794=>26990, +17795=>26991, +17796=>26992, +17797=>26993, +17798=>26994, +17799=>26995, +17800=>26996, +17801=>26997, +17802=>26998, +17803=>26999, +17804=>27000, +17805=>27001, +17806=>27002, +17807=>27003, +17808=>27004, +17809=>27005, +17810=>27006, +17811=>27007, +17812=>27008, +17813=>27009, +17814=>27010, +17815=>27011, +17816=>27012, +17817=>27013, +17818=>27014, +17819=>27015, +17820=>27016, +17821=>27017, +17822=>27018, +17823=>27019, +17824=>27020, +17825=>27021, +17826=>27022, +17827=>27023, +17828=>27024, +17829=>27025, +17830=>27026, +17831=>27027, +17832=>27028, +17833=>27029, +17834=>27030, +17835=>27031, +17836=>27032, +17837=>27033, +17838=>27034, +17839=>27035, +17840=>27036, +17841=>27037, +17842=>27038, +17843=>27039, +17844=>27040, +17845=>27041, +17846=>27042, +17847=>27043, +17848=>27044, +17849=>27045, +17850=>27046, +17851=>27047, +17852=>27048, +17853=>27049, +17854=>27050, +17855=>27051, +17856=>27052, +17857=>27053, +17858=>27054, +17859=>27055, +17860=>27056, +17861=>27057, +17862=>27058, +17863=>27059, +17864=>27060, +17865=>27061, +17866=>27062, +17867=>27063, +17868=>27064, +17869=>27065, +17870=>27066, +17871=>27067, +17872=>27068, +17873=>27069, +17874=>27070, +17875=>27071, +17876=>27072, +17877=>27073, +17878=>27074, +17879=>27075, +17880=>27076, +17881=>27077, +17882=>27078, +17883=>27079, +17884=>27080, +17885=>27081, +17886=>27082, +17887=>27083, +17888=>27084, +17889=>27085, +17890=>27086, +17891=>27087, +17892=>27088, +17893=>27089, +17894=>27090, +17895=>27091, +17896=>27092, +17897=>27093, +17898=>27094, +17899=>27095, +17900=>27096, +17901=>27097, +17902=>27098, +17903=>27099, +17904=>27100, +17905=>27101, +17906=>27102, +17907=>27103, +17908=>27104, +17909=>27105, +17910=>27106, +17911=>27107, +17912=>27108, +17913=>27109, +17914=>27110, +17915=>27111, +17916=>27112, +17917=>27113, +17918=>27114, +17919=>27115, +17920=>27116, +17921=>27117, +17922=>27118, +17923=>27119, +17924=>27120, +17925=>27121, +17926=>27122, +17927=>27123, +17928=>27124, +17929=>27125, +17930=>27126, +17931=>27127, +17932=>27128, +17933=>27129, +17934=>27130, +17935=>27131, +17936=>27132, +17937=>27133, +17938=>27134, +17939=>27135, +17940=>27136, +17941=>27137, +17942=>27138, +17943=>27139, +17944=>27140, +17945=>27141, +17946=>27142, +17947=>27143, +17948=>27144, +17949=>27145, +17950=>27146, +17951=>27147, +17952=>27148, +17953=>27149, +17954=>27150, +17955=>27151, +17956=>27152, +17957=>27153, +17958=>27154, +17959=>27155, +17960=>27156, +17961=>27157, +17962=>27158, +17963=>27159, +17964=>27160, +17965=>27161, +17966=>27162, +17967=>27163, +17968=>27164, +17969=>27165, +17970=>27166, +17971=>27167, +17972=>27168, +17973=>27169, +17974=>27170, +17975=>27171, +17976=>27172, +17977=>27173, +17978=>27174, +17979=>27175, +17980=>27176, +17981=>27177, +17982=>27178, +17983=>27179, +17984=>27180, +17985=>27181, +17986=>27182, +17987=>27183, +17988=>27184, +17989=>27185, +17990=>27186, +17991=>27187, +17992=>27188, +17993=>27189, +17994=>27190, +17995=>27191, +17997=>27192, +17998=>27193, +17999=>27194, +18000=>27195, +18001=>27196, +18002=>27197, +18003=>27198, +18004=>27199, +18005=>27200, +18006=>27201, +18007=>27202, +18008=>27203, +18009=>27204, +18010=>27205, +18011=>27206, +18012=>27207, +18013=>27208, +18014=>27209, +18015=>27210, +18016=>27211, +18018=>27212, +18019=>27213, +18020=>27214, +18021=>27215, +18022=>27216, +18023=>27217, +18024=>27218, +18025=>27219, +18026=>27220, +18027=>27221, +18028=>27222, +18029=>27223, +18030=>27224, +18031=>27225, +18032=>27226, +18033=>27227, +18034=>27228, +18035=>27229, +18036=>27230, +18037=>27231, +18038=>27232, +18039=>27233, +18040=>27234, +18041=>27235, +18042=>27236, +18043=>27237, +18044=>27238, +18045=>27239, +18046=>27240, +18047=>27241, +18048=>27242, +18049=>27243, +18050=>27244, +18051=>27245, +18052=>27246, +18053=>27247, +18054=>27248, +18055=>27249, +18056=>27250, +18057=>27251, +18058=>27252, +18059=>27253, +18060=>27254, +18061=>27255, +18062=>27256, +18063=>27257, +18064=>27258, +18065=>27259, +18066=>27260, +18067=>27261, +18068=>27262, +18069=>27263, +18070=>27264, +18071=>27265, +18072=>27266, +18073=>27267, +18074=>27268, +18075=>27269, +18076=>27270, +18077=>27271, +18078=>27272, +18079=>27273, +18080=>27274, +18081=>27275, +18082=>27276, +18083=>27277, +18084=>27278, +18085=>27279, +18086=>27280, +18087=>27281, +18088=>27282, +18089=>27283, +18090=>27284, +18091=>27285, +18092=>27286, +18093=>27287, +18094=>27288, +18095=>27289, +18096=>27290, +18097=>27291, +18098=>27292, +18099=>27293, +18100=>27294, +18101=>27295, +18102=>27296, +18103=>27297, +18104=>27298, +18105=>27299, +18106=>27300, +18107=>27301, +18108=>27302, +18109=>27303, +18110=>27304, +18111=>27305, +18112=>27306, +18113=>27307, +18114=>27308, +18115=>27309, +18116=>27310, +18117=>27311, +18118=>27312, +18119=>27313, +18120=>27314, +18121=>27315, +18122=>27316, +18123=>27317, +18124=>27318, +18125=>27319, +18126=>27320, +18127=>27321, +18128=>27322, +18129=>27323, +18130=>27324, +18131=>27325, +18132=>27326, +18133=>27327, +18134=>27328, +18135=>27329, +18136=>27330, +18137=>27331, +18138=>27332, +18139=>27333, +18140=>27334, +18141=>27335, +18142=>27336, +18143=>27337, +18144=>27338, +18145=>27339, +18146=>27340, +18147=>27341, +18148=>27342, +18149=>27343, +18150=>27344, +18151=>27345, +18152=>27346, +18153=>27347, +18154=>27348, +18155=>27349, +18156=>27350, +18157=>27351, +18158=>27352, +18159=>27353, +18160=>27354, +18161=>27355, +18162=>27356, +18163=>27357, +18164=>27358, +18165=>27359, +18166=>27360, +18167=>27361, +18168=>27362, +18169=>27363, +18170=>27364, +18171=>27365, +18172=>27366, +18173=>27367, +18174=>27368, +18175=>27369, +18176=>27370, +18177=>27371, +18178=>27372, +18179=>27373, +18180=>27374, +18181=>27375, +18182=>27376, +18183=>27377, +18184=>27378, +18185=>27379, +18186=>27380, +18187=>27381, +18188=>27382, +18189=>27383, +18190=>27384, +18191=>27385, +18192=>27386, +18193=>27387, +18194=>27388, +18195=>27389, +18196=>27390, +18197=>27391, +18198=>27392, +18199=>27393, +18200=>27394, +18201=>27395, +18202=>27396, +18203=>27397, +18204=>27398, +18205=>27399, +18206=>27400, +18207=>27401, +18208=>27402, +18209=>27403, +18210=>27404, +18212=>27405, +18213=>27406, +18214=>27407, +18215=>27408, +18216=>27409, +18218=>27410, +18219=>27411, +18220=>27412, +18221=>27413, +18222=>27414, +18223=>27415, +18224=>27416, +18225=>27417, +18226=>27418, +18227=>27419, +18228=>27420, +18229=>27421, +18230=>27422, +18231=>27423, +18232=>27424, +18233=>27425, +18234=>27426, +18235=>27427, +18236=>27428, +18237=>27429, +18238=>27430, +18239=>27431, +18240=>27432, +18241=>27433, +18242=>27434, +18243=>27435, +18244=>27436, +18245=>27437, +18246=>27438, +18247=>27439, +18248=>27440, +18249=>27441, +18250=>27442, +18251=>27443, +18252=>27444, +18253=>27445, +18254=>27446, +18255=>27447, +18256=>27448, +18257=>27449, +18258=>27450, +18259=>27451, +18260=>27452, +18261=>27453, +18262=>27454, +18263=>27455, +18264=>27456, +18265=>27457, +18266=>27458, +18267=>27459, +18268=>27460, +18269=>27461, +18270=>27462, +18271=>27463, +18272=>27464, +18273=>27465, +18274=>27466, +18275=>27467, +18276=>27468, +18277=>27469, +18278=>27470, +18279=>27471, +18280=>27472, +18281=>27473, +18282=>27474, +18283=>27475, +18284=>27476, +18285=>27477, +18286=>27478, +18287=>27479, +18288=>27480, +18289=>27481, +18290=>27482, +18291=>27483, +18292=>27484, +18293=>27485, +18294=>27486, +18295=>27487, +18296=>27488, +18297=>27489, +18298=>27490, +18299=>27491, +18301=>27492, +18302=>27493, +18303=>27494, +18304=>27495, +18305=>27496, +18306=>27497, +18307=>27498, +18308=>27499, +18309=>27500, +18310=>27501, +18311=>27502, +18312=>27503, +18313=>27504, +18314=>27505, +18315=>27506, +18316=>27507, +18318=>27508, +18319=>27509, +18320=>27510, +18321=>27511, +18322=>27512, +18323=>27513, +18324=>27514, +18325=>27515, +18326=>27516, +18327=>27517, +18328=>27518, +18329=>27519, +18330=>27520, +18331=>27521, +18332=>27522, +18333=>27523, +18334=>27524, +18335=>27525, +18336=>27526, +18337=>27527, +18338=>27528, +18339=>27529, +18340=>27530, +18341=>27531, +18342=>27532, +18343=>27533, +18344=>27534, +18345=>27535, +18346=>27536, +18347=>27537, +18348=>27538, +18349=>27539, +18350=>27540, +18351=>27541, +18352=>27542, +18353=>27543, +18354=>27544, +18355=>27545, +18356=>27546, +18357=>27547, +18358=>27548, +18359=>27549, +18360=>27550, +18361=>27551, +18362=>27552, +18363=>27553, +18364=>27554, +18365=>27555, +18366=>27556, +18367=>27557, +18368=>27558, +18369=>27559, +18370=>27560, +18371=>27561, +18372=>27562, +18373=>27563, +18374=>27564, +18375=>27565, +18376=>27566, +18377=>27567, +18378=>27568, +18379=>27569, +18380=>27570, +18381=>27571, +18382=>27572, +18383=>27573, +18384=>27574, +18385=>27575, +18386=>27576, +18387=>27577, +18388=>27578, +18389=>27579, +18390=>27580, +18391=>27581, +18392=>27582, +18393=>27583, +18394=>27584, +18395=>27585, +18396=>27586, +18397=>27587, +18398=>27588, +18399=>27589, +18400=>27590, +18401=>27591, +18402=>27592, +18403=>27593, +18404=>27594, +18405=>27595, +18406=>27596, +18407=>27597, +18408=>27598, +18409=>27599, +18410=>27600, +18411=>27601, +18412=>27602, +18413=>27603, +18414=>27604, +18415=>27605, +18416=>27606, +18417=>27607, +18418=>27608, +18419=>27609, +18420=>27610, +18421=>27611, +18422=>27612, +18423=>27613, +18424=>27614, +18425=>27615, +18426=>27616, +18427=>27617, +18428=>27618, +18429=>27619, +18430=>27620, +18431=>27621, +18432=>27622, +18433=>27623, +18434=>27624, +18435=>27625, +18436=>27626, +18437=>27627, +18438=>27628, +18439=>27629, +18440=>27630, +18441=>27631, +18442=>27632, +18443=>27633, +18444=>27634, +18445=>27635, +18446=>27636, +18447=>27637, +18448=>27638, +18449=>27639, +18450=>27640, +18451=>27641, +18452=>27642, +18453=>27643, +18454=>27644, +18455=>27645, +18456=>27646, +18457=>27647, +18458=>27648, +18459=>27649, +18460=>27650, +18461=>27651, +18462=>27652, +18463=>27653, +18464=>27654, +18465=>27655, +18466=>27656, +18467=>27657, +18468=>27658, +18469=>27659, +18470=>27660, +18471=>27661, +18472=>27662, +18473=>27663, +18474=>27664, +18475=>27665, +18476=>27666, +18477=>27667, +18478=>27668, +18479=>27669, +18480=>27670, +18481=>27671, +18482=>27672, +18483=>27673, +18484=>27674, +18485=>27675, +18486=>27676, +18487=>27677, +18488=>27678, +18489=>27679, +18490=>27680, +18491=>27681, +18492=>27682, +18493=>27683, +18494=>27684, +18495=>27685, +18496=>27686, +18497=>27687, +18498=>27688, +18499=>27689, +18500=>27690, +18501=>27691, +18502=>27692, +18503=>27693, +18504=>27694, +18505=>27695, +18506=>27696, +18507=>27697, +18508=>27698, +18509=>27699, +18510=>27700, +18511=>27701, +18512=>27702, +18513=>27703, +18514=>27704, +18515=>27705, +18516=>27706, +18517=>27707, +18518=>27708, +18519=>27709, +18520=>27710, +18521=>27711, +18522=>27712, +18523=>27713, +18524=>27714, +18525=>27715, +18526=>27716, +18527=>27717, +18528=>27718, +18529=>27719, +18530=>27720, +18531=>27721, +18532=>27722, +18533=>27723, +18534=>27724, +18535=>27725, +18536=>27726, +18537=>27727, +18538=>27728, +18539=>27729, +18540=>27730, +18541=>27731, +18542=>27732, +18543=>27733, +18544=>27734, +18545=>27735, +18546=>27736, +18547=>27737, +18548=>27738, +18549=>27739, +18550=>27740, +18551=>27741, +18552=>27742, +18553=>27743, +18554=>27744, +18555=>27745, +18556=>27746, +18557=>27747, +18558=>27748, +18559=>27749, +18560=>27750, +18561=>27751, +18562=>27752, +18563=>27753, +18564=>27754, +18565=>27755, +18566=>27756, +18567=>27757, +18568=>27758, +18569=>27759, +18570=>27760, +18571=>27761, +18572=>27762, +18573=>27763, +18574=>27764, +18575=>27765, +18576=>27766, +18577=>27767, +18578=>27768, +18579=>27769, +18580=>27770, +18581=>27771, +18582=>27772, +18583=>27773, +18584=>27774, +18585=>27775, +18586=>27776, +18587=>27777, +18588=>27778, +18589=>27779, +18590=>27780, +18591=>27781, +18592=>27782, +18593=>27783, +18594=>27784, +18595=>27785, +18596=>27786, +18597=>27787, +18598=>27788, +18599=>27789, +18600=>27790, +18601=>27791, +18602=>27792, +18603=>27793, +18604=>27794, +18605=>27795, +18606=>27796, +18607=>27797, +18608=>27798, +18609=>27799, +18610=>27800, +18611=>27801, +18612=>27802, +18613=>27803, +18614=>27804, +18615=>27805, +18616=>27806, +18617=>27807, +18618=>27808, +18619=>27809, +18620=>27810, +18621=>27811, +18622=>27812, +18623=>27813, +18624=>27814, +18625=>27815, +18626=>27816, +18627=>27817, +18628=>27818, +18629=>27819, +18630=>27820, +18631=>27821, +18632=>27822, +18633=>27823, +18634=>27824, +18635=>27825, +18636=>27826, +18637=>27827, +18638=>27828, +18639=>27829, +18640=>27830, +18641=>27831, +18642=>27832, +18643=>27833, +18644=>27834, +18645=>27835, +18646=>27836, +18647=>27837, +18648=>27838, +18649=>27839, +18650=>27840, +18651=>27841, +18652=>27842, +18653=>27843, +18654=>27844, +18655=>27845, +18656=>27846, +18657=>27847, +18658=>27848, +18659=>27849, +18660=>27850, +18661=>27851, +18662=>27852, +18663=>27853, +18664=>27854, +18665=>27855, +18666=>27856, +18667=>27857, +18668=>27858, +18669=>27859, +18670=>27860, +18671=>27861, +18672=>27862, +18673=>27863, +18674=>27864, +18675=>27865, +18676=>27866, +18677=>27867, +18678=>27868, +18679=>27869, +18680=>27870, +18681=>27871, +18682=>27872, +18683=>27873, +18684=>27874, +18685=>27875, +18686=>27876, +18687=>27877, +18688=>27878, +18689=>27879, +18690=>27880, +18691=>27881, +18692=>27882, +18693=>27883, +18694=>27884, +18695=>27885, +18696=>27886, +18697=>27887, +18698=>27888, +18699=>27889, +18700=>27890, +18701=>27891, +18702=>27892, +18703=>27893, +18704=>27894, +18705=>27895, +18706=>27896, +18707=>27897, +18708=>27898, +18709=>27899, +18710=>27900, +18711=>27901, +18712=>27902, +18713=>27903, +18714=>27904, +18715=>27905, +18716=>27906, +18717=>27907, +18718=>27908, +18719=>27909, +18720=>27910, +18721=>27911, +18722=>27912, +18723=>27913, +18724=>27914, +18725=>27915, +18726=>27916, +18727=>27917, +18728=>27918, +18729=>27919, +18730=>27920, +18731=>27921, +18732=>27922, +18733=>27923, +18734=>27924, +18735=>27925, +18736=>27926, +18737=>27927, +18738=>27928, +18739=>27929, +18740=>27930, +18741=>27931, +18742=>27932, +18743=>27933, +18744=>27934, +18745=>27935, +18746=>27936, +18747=>27937, +18748=>27938, +18749=>27939, +18750=>27940, +18751=>27941, +18752=>27942, +18753=>27943, +18754=>27944, +18755=>27945, +18756=>27946, +18757=>27947, +18758=>27948, +18760=>27949, +18761=>27950, +18762=>27951, +18763=>27952, +18764=>27953, +18765=>27954, +18766=>27955, +18767=>27956, +18768=>27957, +18769=>27958, +18770=>27959, +18771=>27960, +18772=>27961, +18773=>27962, +18774=>27963, +18775=>27964, +18776=>27965, +18777=>27966, +18778=>27967, +18779=>27968, +18780=>27969, +18781=>27970, +18782=>27971, +18783=>27972, +18784=>27973, +18785=>27974, +18786=>27975, +18787=>27976, +18788=>27977, +18789=>27978, +18790=>27979, +18791=>27980, +18792=>27981, +18793=>27982, +18794=>27983, +18795=>27984, +18796=>27985, +18797=>27986, +18798=>27987, +18799=>27988, +18800=>27989, +18801=>27990, +18802=>27991, +18803=>27992, +18804=>27993, +18805=>27994, +18806=>27995, +18807=>27996, +18808=>27997, +18809=>27998, +18811=>27999, +18812=>28000, +18814=>28001, +18815=>28002, +18816=>28003, +18817=>28004, +18820=>28005, +18823=>28006, +18824=>28007, +18825=>28008, +18826=>28009, +18827=>28010, +18828=>28011, +18829=>28012, +18830=>28013, +18831=>28014, +18832=>28015, +18833=>28016, +18834=>28017, +18835=>28018, +18836=>28019, +18837=>28020, +18838=>28021, +18839=>28022, +18840=>28023, +18841=>28024, +18842=>28025, +18844=>28026, +18845=>28027, +18846=>28028, +18848=>28029, +18849=>28030, +18850=>28031, +18851=>28032, +18852=>28033, +18853=>28034, +18854=>28035, +18855=>28036, +18856=>28037, +18857=>28038, +18858=>28039, +18859=>28040, +18860=>28041, +18861=>28042, +18862=>28043, +18863=>28044, +18864=>28045, +18865=>28046, +18866=>28047, +18867=>28048, +18868=>28049, +18869=>28050, +18872=>28051, +18873=>28052, +18874=>28053, +18875=>28054, +18876=>28055, +18877=>28056, +18878=>28057, +18879=>28058, +18880=>28059, +18881=>28060, +18882=>28061, +18883=>28062, +18884=>28063, +18885=>28064, +18886=>28065, +18887=>28066, +18888=>28067, +18889=>28068, +18890=>28069, +18891=>28070, +18892=>28071, +18893=>28072, +18894=>28073, +18895=>28074, +18896=>28075, +18897=>28076, +18898=>28077, +18899=>28078, +18900=>28079, +18901=>28080, +18902=>28081, +18903=>28082, +18904=>28083, +18905=>28084, +18906=>28085, +18907=>28086, +18908=>28087, +18909=>28088, +18910=>28089, +18911=>28090, +18912=>28091, +18913=>28092, +18914=>28093, +18915=>28094, +18916=>28095, +18917=>28096, +18918=>28097, +18919=>28098, +18920=>28099, +18921=>28100, +18922=>28101, +18923=>28102, +18924=>28103, +18925=>28104, +18926=>28105, +18927=>28106, +18928=>28107, +18929=>28108, +18930=>28109, +18931=>28110, +18932=>28111, +18933=>28112, +18934=>28113, +18935=>28114, +18936=>28115, +18937=>28116, +18938=>28117, +18939=>28118, +18940=>28119, +18941=>28120, +18942=>28121, +18943=>28122, +18944=>28123, +18945=>28124, +18946=>28125, +18947=>28126, +18948=>28127, +18949=>28128, +18950=>28129, +18951=>28130, +18952=>28131, +18953=>28132, +18954=>28133, +18955=>28134, +18956=>28135, +18957=>28136, +18958=>28137, +18959=>28138, +18960=>28139, +18961=>28140, +18962=>28141, +18963=>28142, +18964=>28143, +18965=>28144, +18966=>28145, +18967=>28146, +18968=>28147, +18969=>28148, +18970=>28149, +18971=>28150, +18972=>28151, +18973=>28152, +18974=>28153, +18975=>28154, +18976=>28155, +18977=>28156, +18978=>28157, +18979=>28158, +18980=>28159, +18981=>28160, +18982=>28161, +18983=>28162, +18984=>28163, +18985=>28164, +18986=>28165, +18987=>28166, +18988=>28167, +18989=>28168, +18990=>28169, +18991=>28170, +18992=>28171, +18993=>28172, +18994=>28173, +18995=>28174, +18996=>28175, +18997=>28176, +18998=>28177, +18999=>28178, +19000=>28179, +19001=>28180, +19002=>28181, +19003=>28182, +19004=>28183, +19005=>28184, +19006=>28185, +19007=>28186, +19008=>28187, +19009=>28188, +19010=>28189, +19011=>28190, +19012=>28191, +19013=>28192, +19014=>28193, +19015=>28194, +19016=>28195, +19017=>28196, +19018=>28197, +19019=>28198, +19020=>28199, +19021=>28200, +19022=>28201, +19023=>28202, +19024=>28203, +19025=>28204, +19026=>28205, +19027=>28206, +19028=>28207, +19029=>28208, +19030=>28209, +19031=>28210, +19032=>28211, +19033=>28212, +19034=>28213, +19035=>28214, +19036=>28215, +19037=>28216, +19038=>28217, +19039=>28218, +19040=>28219, +19041=>28220, +19042=>28221, +19043=>28222, +19044=>28223, +19045=>28224, +19046=>28225, +19047=>28226, +19048=>28227, +19049=>28228, +19050=>28229, +19051=>28230, +19052=>28231, +19053=>28232, +19054=>28233, +19055=>28234, +19056=>28235, +19057=>28236, +19058=>28237, +19059=>28238, +19060=>28239, +19061=>28240, +19062=>28241, +19063=>28242, +19064=>28243, +19065=>28244, +19066=>28245, +19067=>28246, +19068=>28247, +19069=>28248, +19070=>28249, +19071=>28250, +19072=>28251, +19073=>28252, +19074=>28253, +19075=>28254, +19076=>28255, +19077=>28256, +19078=>28257, +19079=>28258, +19080=>28259, +19081=>28260, +19082=>28261, +19083=>28262, +19084=>28263, +19085=>28264, +19086=>28265, +19087=>28266, +19088=>28267, +19089=>28268, +19090=>28269, +19091=>28270, +19092=>28271, +19093=>28272, +19094=>28273, +19095=>28274, +19096=>28275, +19097=>28276, +19098=>28277, +19099=>28278, +19100=>28279, +19101=>28280, +19102=>28281, +19103=>28282, +19104=>28283, +19105=>28284, +19106=>28285, +19107=>28286, +19108=>28287, +19109=>28288, +19110=>28289, +19111=>28290, +19112=>28291, +19113=>28292, +19114=>28293, +19115=>28294, +19116=>28295, +19117=>28296, +19118=>28297, +19119=>28298, +19120=>28299, +19121=>28300, +19122=>28301, +19123=>28302, +19124=>28303, +19125=>28304, +19126=>28305, +19127=>28306, +19128=>28307, +19129=>28308, +19130=>28309, +19131=>28310, +19132=>28311, +19133=>28312, +19134=>28313, +19135=>28314, +19136=>28315, +19137=>28316, +19138=>28317, +19139=>28318, +19140=>28319, +19141=>28320, +19142=>28321, +19143=>28322, +19144=>28323, +19145=>28324, +19146=>28325, +19147=>28326, +19148=>28327, +19149=>28328, +19150=>28329, +19151=>28330, +19152=>28331, +19153=>28332, +19154=>28333, +19155=>28334, +19156=>28335, +19157=>28336, +19158=>28337, +19159=>28338, +19160=>28339, +19161=>28340, +19162=>28341, +19163=>28342, +19164=>28343, +19165=>28344, +19166=>28345, +19167=>28346, +19168=>28347, +19169=>28348, +19170=>28349, +19171=>28350, +19172=>28351, +19173=>28352, +19174=>28353, +19175=>28354, +19176=>28355, +19177=>28356, +19178=>28357, +19179=>28358, +19180=>28359, +19181=>28360, +19182=>28361, +19183=>28362, +19184=>28363, +19185=>28364, +19186=>28365, +19187=>28366, +19188=>28367, +19189=>28368, +19190=>28369, +19191=>28370, +19192=>28371, +19193=>28372, +19194=>28373, +19195=>28374, +19196=>28375, +19197=>28376, +19198=>28377, +19199=>28378, +19200=>28379, +19201=>28380, +19202=>28381, +19203=>28382, +19204=>28383, +19205=>28384, +19206=>28385, +19207=>28386, +19208=>28387, +19209=>28388, +19210=>28389, +19211=>28390, +19212=>28391, +19213=>28392, +19214=>28393, +19215=>28394, +19216=>28395, +19217=>28396, +19218=>28397, +19219=>28398, +19220=>28399, +19221=>28400, +19222=>28401, +19223=>28402, +19224=>28403, +19225=>28404, +19226=>28405, +19227=>28406, +19228=>28407, +19229=>28408, +19230=>28409, +19231=>28410, +19232=>28411, +19233=>28412, +19234=>28413, +19235=>28414, +19236=>28415, +19237=>28416, +19238=>28417, +19239=>28418, +19240=>28419, +19241=>28420, +19242=>28421, +19243=>28422, +19244=>28423, +19245=>28424, +19246=>28425, +19247=>28426, +19248=>28427, +19249=>28428, +19250=>28429, +19251=>28430, +19252=>28431, +19253=>28432, +19254=>28433, +19255=>28434, +19256=>28435, +19257=>28436, +19258=>28437, +19259=>28438, +19260=>28439, +19261=>28440, +19262=>28441, +19263=>28442, +19264=>28443, +19265=>28444, +19266=>28445, +19267=>28446, +19268=>28447, +19269=>28448, +19270=>28449, +19271=>28450, +19272=>28451, +19273=>28452, +19274=>28453, +19275=>28454, +19276=>28455, +19277=>28456, +19278=>28457, +19279=>28458, +19280=>28459, +19281=>28460, +19282=>28461, +19283=>28462, +19284=>28463, +19285=>28464, +19286=>28465, +19287=>28466, +19288=>28467, +19289=>28468, +19290=>28469, +19291=>28470, +19292=>28471, +19293=>28472, +19294=>28473, +19295=>28474, +19296=>28475, +19297=>28476, +19298=>28477, +19299=>28478, +19300=>28479, +19301=>28480, +19302=>28481, +19303=>28482, +19304=>28483, +19305=>28484, +19306=>28485, +19307=>28486, +19308=>28487, +19309=>28488, +19310=>28489, +19311=>28490, +19312=>28491, +19313=>28492, +19314=>28493, +19315=>28494, +19316=>28495, +19317=>28496, +19318=>28497, +19319=>28498, +19320=>28499, +19321=>28500, +19322=>28501, +19323=>28502, +19324=>28503, +19325=>28504, +19326=>28505, +19327=>28506, +19328=>28507, +19329=>28508, +19330=>28509, +19331=>28510, +19332=>28511, +19333=>28512, +19334=>28513, +19335=>28514, +19336=>28515, +19337=>28516, +19338=>28517, +19339=>28518, +19340=>28519, +19341=>28520, +19342=>28521, +19343=>28522, +19344=>28523, +19345=>28524, +19346=>28525, +19347=>28526, +19348=>28527, +19349=>28528, +19350=>28529, +19351=>28530, +19352=>28531, +19353=>28532, +19354=>28533, +19355=>28534, +19356=>28535, +19357=>28536, +19358=>28537, +19359=>28538, +19360=>28539, +19361=>28540, +19362=>28541, +19363=>28542, +19364=>28543, +19365=>28544, +19366=>28545, +19367=>28546, +19368=>28547, +19369=>28548, +19370=>28549, +19371=>28550, +19372=>28551, +19373=>28552, +19374=>28553, +19375=>28554, +19376=>28555, +19377=>28556, +19378=>28557, +19379=>28558, +19380=>28559, +19381=>28560, +19382=>28561, +19383=>28562, +19384=>28563, +19385=>28564, +19386=>28565, +19387=>28566, +19388=>28567, +19389=>28568, +19390=>28569, +19391=>28570, +19392=>28571, +19393=>28572, +19394=>28573, +19395=>28574, +19396=>28575, +19397=>28576, +19398=>28577, +19399=>28578, +19400=>28579, +19401=>28580, +19402=>28581, +19403=>28582, +19404=>28583, +19405=>28584, +19406=>28585, +19407=>28586, +19408=>28587, +19409=>28588, +19410=>28589, +19411=>28590, +19412=>28591, +19413=>28592, +19414=>28593, +19415=>28594, +19416=>28595, +19417=>28596, +19418=>28597, +19419=>28598, +19420=>28599, +19421=>28600, +19422=>28601, +19423=>28602, +19424=>28603, +19425=>28604, +19426=>28605, +19427=>28606, +19428=>28607, +19429=>28608, +19430=>28609, +19431=>28610, +19432=>28611, +19433=>28612, +19434=>28613, +19435=>28614, +19436=>28615, +19437=>28616, +19438=>28617, +19439=>28618, +19440=>28619, +19441=>28620, +19442=>28621, +19443=>28622, +19444=>28623, +19445=>28624, +19446=>28625, +19447=>28626, +19448=>28627, +19449=>28628, +19450=>28629, +19451=>28630, +19452=>28631, +19453=>28632, +19454=>28633, +19455=>28634, +19456=>28635, +19457=>28636, +19458=>28637, +19459=>28638, +19460=>28639, +19461=>28640, +19462=>28641, +19463=>28642, +19464=>28643, +19465=>28644, +19466=>28645, +19467=>28646, +19468=>28647, +19469=>28648, +19470=>28649, +19471=>28650, +19472=>28651, +19473=>28652, +19474=>28653, +19475=>28654, +19476=>28655, +19477=>28656, +19478=>28657, +19479=>28658, +19480=>28659, +19481=>28660, +19482=>28661, +19483=>28662, +19484=>28663, +19485=>28664, +19486=>28665, +19487=>28666, +19488=>28667, +19489=>28668, +19490=>28669, +19491=>28670, +19492=>28671, +19493=>28672, +19494=>28673, +19495=>28674, +19496=>28675, +19497=>28676, +19498=>28677, +19499=>28678, +19500=>28679, +19501=>28680, +19502=>28681, +19503=>28682, +19504=>28683, +19505=>28684, +19506=>28685, +19507=>28686, +19508=>28687, +19509=>28688, +19510=>28689, +19511=>28690, +19512=>28691, +19513=>28692, +19514=>28693, +19515=>28694, +19516=>28695, +19517=>28696, +19518=>28697, +19519=>28698, +19520=>28699, +19521=>28700, +19522=>28701, +19523=>28702, +19524=>28703, +19525=>28704, +19526=>28705, +19527=>28706, +19528=>28707, +19529=>28708, +19530=>28709, +19531=>28710, +19532=>28711, +19533=>28712, +19534=>28713, +19535=>28714, +19536=>28715, +19537=>28716, +19538=>28717, +19539=>28718, +19540=>28719, +19541=>28720, +19542=>28721, +19543=>28722, +19544=>28723, +19545=>28724, +19546=>28725, +19547=>28726, +19548=>28727, +19549=>28728, +19550=>28729, +19551=>28730, +19552=>28731, +19553=>28732, +19554=>28733, +19555=>28734, +19556=>28735, +19557=>28736, +19558=>28737, +19559=>28738, +19560=>28739, +19561=>28740, +19562=>28741, +19563=>28742, +19564=>28743, +19565=>28744, +19566=>28745, +19567=>28746, +19568=>28747, +19569=>28748, +19570=>28749, +19571=>28750, +19572=>28751, +19573=>28752, +19574=>28753, +19576=>28754, +19577=>28755, +19578=>28756, +19579=>28757, +19580=>28758, +19581=>28759, +19582=>28760, +19583=>28761, +19584=>28762, +19585=>28763, +19586=>28764, +19587=>28765, +19588=>28766, +19589=>28767, +19590=>28768, +19591=>28769, +19592=>28770, +19593=>28771, +19594=>28772, +19595=>28773, +19596=>28774, +19597=>28775, +19598=>28776, +19599=>28777, +19600=>28778, +19601=>28779, +19602=>28780, +19603=>28781, +19604=>28782, +19605=>28783, +19606=>28784, +19607=>28785, +19608=>28786, +19609=>28787, +19610=>28788, +19611=>28789, +19612=>28790, +19613=>28791, +19614=>28792, +19620=>28793, +19621=>28794, +19622=>28795, +19623=>28796, +19624=>28797, +19625=>28798, +19626=>28799, +19627=>28800, +19628=>28801, +19629=>28802, +19630=>28803, +19631=>28804, +19632=>28805, +19633=>28806, +19634=>28807, +19635=>28808, +19636=>28809, +19637=>28810, +19638=>28811, +19639=>28812, +19640=>28813, +19641=>28814, +19642=>28815, +19643=>28816, +19644=>28817, +19645=>28818, +19646=>28819, +19647=>28820, +19648=>28821, +19649=>28822, +19650=>28823, +19651=>28824, +19652=>28825, +19653=>28826, +19654=>28827, +19655=>28828, +19656=>28829, +19657=>28830, +19658=>28831, +19659=>28832, +19660=>28833, +19661=>28834, +19662=>28835, +19663=>28836, +19664=>28837, +19665=>28838, +19666=>28839, +19667=>28840, +19668=>28841, +19669=>28842, +19670=>28843, +19671=>28844, +19672=>28845, +19673=>28846, +19674=>28847, +19675=>28848, +19676=>28849, +19677=>28850, +19678=>28851, +19679=>28852, +19680=>28853, +19681=>28854, +19682=>28855, +19683=>28856, +19684=>28857, +19685=>28858, +19686=>28859, +19687=>28860, +19688=>28861, +19689=>28862, +19690=>28863, +19691=>28864, +19692=>28865, +19693=>28866, +19694=>28867, +19695=>28868, +19696=>28869, +19697=>28870, +19698=>28871, +19699=>28872, +19700=>28873, +19701=>28874, +19702=>28875, +19703=>28876, +19704=>28877, +19705=>28878, +19706=>28879, +19707=>28880, +19708=>28881, +19709=>28882, +19710=>28883, +19711=>28884, +19712=>28885, +19713=>28886, +19714=>28887, +19715=>28888, +19716=>28889, +19717=>28890, +19718=>28891, +19719=>28892, +19720=>28893, +19721=>28894, +19722=>28895, +19723=>28896, +19724=>28897, +19725=>28898, +19726=>28899, +19727=>28900, +19728=>28901, +19729=>28902, +19730=>28903, +19738=>28904, +19739=>28905, +19740=>28906, +19741=>28907, +19742=>28908, +19743=>28909, +19744=>28910, +19745=>28911, +19746=>28912, +19747=>28913, +19748=>28914, +19749=>28915, +19750=>28916, +19751=>28917, +19752=>28918, +19753=>28919, +19754=>28920, +19755=>28921, +19756=>28922, +19757=>28923, +19758=>28924, +19759=>28925, +19760=>28926, +19761=>28927, +19762=>28928, +19763=>28929, +19764=>28930, +19765=>28931, +19766=>28932, +19767=>28933, +19768=>28934, +19769=>28935, +19770=>28936, +19771=>28937, +19772=>28938, +19773=>28939, +19774=>28940, +19775=>28941, +19776=>28942, +19777=>28943, +19778=>28944, +19779=>28945, +19780=>28946, +19781=>28947, +19782=>28948, +19783=>28949, +19784=>28950, +19785=>28951, +19786=>28952, +19787=>28953, +19788=>28954, +19789=>28955, +19790=>28956, +19791=>28957, +19792=>28958, +19793=>28959, +19794=>28960, +19795=>28961, +19796=>28962, +19797=>28963, +19798=>28964, +19799=>28965, +19800=>28966, +19801=>28967, +19802=>28968, +19803=>28969, +19804=>28970, +19805=>28971, +19806=>28972, +19807=>28973, +19808=>28974, +19809=>28975, +19810=>28976, +19811=>28977, +19812=>28978, +19813=>28979, +19814=>28980, +19815=>28981, +19816=>28982, +19817=>28983, +19818=>28984, +19819=>28985, +19820=>28986, +19821=>28987, +19822=>28988, +19823=>28989, +19824=>28990, +19825=>28991, +19826=>28992, +19827=>28993, +19828=>28994, +19829=>28995, +19830=>28996, +19831=>28997, +19832=>28998, +19833=>28999, +19834=>29000, +19835=>29001, +19836=>29002, +19837=>29003, +19838=>29004, +19839=>29005, +19840=>29006, +19841=>29007, +19842=>29008, +19843=>29009, +19844=>29010, +19845=>29011, +19846=>29012, +19847=>29013, +19848=>29014, +19849=>29015, +19850=>29016, +19851=>29017, +19852=>29018, +19853=>29019, +19854=>29020, +19855=>29021, +19856=>29022, +19857=>29023, +19858=>29024, +19859=>29025, +19860=>29026, +19861=>29027, +19862=>29028, +19863=>29029, +19864=>29030, +19865=>29031, +19866=>29032, +19867=>29033, +19868=>29034, +19869=>29035, +19870=>29036, +19871=>29037, +19872=>29038, +19873=>29039, +19874=>29040, +19875=>29041, +19876=>29042, +19877=>29043, +19878=>29044, +19879=>29045, +19880=>29046, +19881=>29047, +19882=>29048, +19883=>29049, +19884=>29050, +19885=>29051, +19887=>29052, +19888=>29053, +19889=>29054, +19890=>29055, +19891=>29056, +19892=>29057, +19893=>29058, +40960=>29064, +40961=>29065, +40962=>29066, +40963=>29067, +40964=>29068, +40965=>29069, +40966=>29070, +40967=>29071, +40968=>29072, +40969=>29073, +40970=>29074, +40971=>29075, +40972=>29076, +40973=>29077, +40974=>29078, +40975=>29079, +40976=>29080, +40977=>29081, +40978=>29082, +40979=>29083, +40980=>29084, +40981=>29085, +40982=>29086, +40983=>29087, +40984=>29088, +40985=>29089, +40986=>29090, +40987=>29091, +40988=>29092, +40989=>29093, +40990=>29094, +40991=>29095, +40992=>29096, +40993=>29097, +40994=>29098, +40995=>29099, +40996=>29100, +40997=>29101, +40998=>29102, +40999=>29103, +41000=>29104, +41001=>29105, +41002=>29106, +41003=>29107, +41004=>29108, +41005=>29109, +41006=>29110, +41007=>29111, +41008=>29112, +41009=>29113, +41010=>29114, +41011=>29115, +41012=>29116, +41013=>29117, +41014=>29118, +41015=>29119, +41016=>29120, +41017=>29121, +41018=>29122, +41019=>29123, +41020=>29124, +41021=>29125, +41022=>29126, +41023=>29127, +41024=>29128, +41025=>29129, +41026=>29130, +41027=>29131, +41028=>29132, +41029=>29133, +41030=>29134, +41031=>29135, +41032=>29136, +41033=>29137, +41034=>29138, +41035=>29139, +41036=>29140, +41037=>29141, +41038=>29142, +41039=>29143, +41040=>29144, +41041=>29145, +41042=>29146, +41043=>29147, +41044=>29148, +41045=>29149, +41046=>29150, +41047=>29151, +41048=>29152, +41049=>29153, +41050=>29154, +41051=>29155, +41052=>29156, +41053=>29157, +41054=>29158, +41055=>29159, +41056=>29160, +41057=>29161, +41058=>29162, +41059=>29163, +41060=>29164, +41061=>29165, +41062=>29166, +41063=>29167, +41064=>29168, +41065=>29169, +41066=>29170, +41067=>29171, +41068=>29172, +41069=>29173, +41070=>29174, +41071=>29175, +41072=>29176, +41073=>29177, +41074=>29178, +41075=>29179, +41076=>29180, +41077=>29181, +41078=>29182, +41079=>29183, +41080=>29184, +41081=>29185, +41082=>29186, +41083=>29187, +41084=>29188, +41085=>29189, +41086=>29190, +41087=>29191, +41088=>29192, +41089=>29193, +41090=>29194, +41091=>29195, +41092=>29196, +41093=>29197, +41094=>29198, +41095=>29199, +41096=>29200, +41097=>29201, +41098=>29202, +41099=>29203, +41100=>29204, +41101=>29205, +41102=>29206, +41103=>29207, +41104=>29208, +41105=>29209, +41106=>29210, +41107=>29211, +41108=>29212, +41109=>29213, +41110=>29214, +41111=>29215, +41112=>29216, +41113=>29217, +41114=>29218, +41115=>29219, +41116=>29220, +41117=>29221, +41118=>29222, +41119=>29223, +41120=>29224, +41121=>29225, +41122=>29226, +41123=>29227, +41124=>29228, +41125=>29229, +41126=>29230, +41127=>29231, +41128=>29232, +41129=>29233, +41130=>29234, +41131=>29235, +41132=>29236, +41133=>29237, +41134=>29238, +41135=>29239, +41136=>29240, +41137=>29241, +41138=>29242, +41139=>29243, +41140=>29244, +41141=>29245, +41142=>29246, +41143=>29247, +41144=>29248, +41145=>29249, +41146=>29250, +41147=>29251, +41148=>29252, +41149=>29253, +41150=>29254, +41151=>29255, +41152=>29256, +41153=>29257, +41154=>29258, +41155=>29259, +41156=>29260, +41157=>29261, +41158=>29262, +41159=>29263, +41160=>29264, +41161=>29265, +41162=>29266, +41163=>29267, +41164=>29268, +41165=>29269, +41166=>29270, +41167=>29271, +41168=>29272, +41169=>29273, +41170=>29274, +41171=>29275, +41172=>29276, +41173=>29277, +41174=>29278, +41175=>29279, +41176=>29280, +41177=>29281, +41178=>29282, +41179=>29283, +41180=>29284, +41181=>29285, +41182=>29286, +41183=>29287, +41184=>29288, +41185=>29289, +41186=>29290, +41187=>29291, +41188=>29292, +41189=>29293, +41190=>29294, +41191=>29295, +41192=>29296, +41193=>29297, +41194=>29298, +41195=>29299, +41196=>29300, +41197=>29301, +41198=>29302, +41199=>29303, +41200=>29304, +41201=>29305, +41202=>29306, +41203=>29307, +41204=>29308, +41205=>29309, +41206=>29310, +41207=>29311, +41208=>29312, +41209=>29313, +41210=>29314, +41211=>29315, +41212=>29316, +41213=>29317, +41214=>29318, +41215=>29319, +41216=>29320, +41217=>29321, +41218=>29322, +41219=>29323, +41220=>29324, +41221=>29325, +41222=>29326, +41223=>29327, +41224=>29328, +41225=>29329, +41226=>29330, +41227=>29331, +41228=>29332, +41229=>29333, +41230=>29334, +41231=>29335, +41232=>29336, +41233=>29337, +41234=>29338, +41235=>29339, +41236=>29340, +41237=>29341, +41238=>29342, +41239=>29343, +41240=>29344, +41241=>29345, +41242=>29346, +41243=>29347, +41244=>29348, +41245=>29349, +41246=>29350, +41247=>29351, +41248=>29352, +41249=>29353, +41250=>29354, +41251=>29355, +41252=>29356, +41253=>29357, +41254=>29358, +41255=>29359, +41256=>29360, +41257=>29361, +41258=>29362, +41259=>29363, +41260=>29364, +41261=>29365, +41262=>29366, +41263=>29367, +41264=>29368, +41265=>29369, +41266=>29370, +41267=>29371, +41268=>29372, +41269=>29373, +41270=>29374, +41271=>29375, +41272=>29376, +41273=>29377, +41274=>29378, +41275=>29379, +41276=>29380, +41277=>29381, +41278=>29382, +41279=>29383, +41280=>29384, +41281=>29385, +41282=>29386, +41283=>29387, +41284=>29388, +41285=>29389, +41286=>29390, +41287=>29391, +41288=>29392, +41289=>29393, +41290=>29394, +41291=>29395, +41292=>29396, +41293=>29397, +41294=>29398, +41295=>29399, +41296=>29400, +41297=>29401, +41298=>29402, +41299=>29403, +41300=>29404, +41301=>29405, +41302=>29406, +41303=>29407, +41304=>29408, +41305=>29409, +41306=>29410, +41307=>29411, +41308=>29412, +41309=>29413, +41310=>29414, +41311=>29415, +41312=>29416, +41313=>29417, +41314=>29418, +41315=>29419, +41316=>29420, +41317=>29421, +41318=>29422, +41319=>29423, +41320=>29424, +41321=>29425, +41322=>29426, +41323=>29427, +41324=>29428, +41325=>29429, +41326=>29430, +41327=>29431, +41328=>29432, +41329=>29433, +41330=>29434, +41331=>29435, +41332=>29436, +41333=>29437, +41334=>29438, +41335=>29439, +41336=>29440, +41337=>29441, +41338=>29442, +41339=>29443, +41340=>29444, +41341=>29445, +41342=>29446, +41343=>29447, +41344=>29448, +41345=>29449, +41346=>29450, +41347=>29451, +41348=>29452, +41349=>29453, +41350=>29454, +41351=>29455, +41352=>29456, +41353=>29457, +41354=>29458, +41355=>29459, +41356=>29460, +41357=>29461, +41358=>29462, +41359=>29463, +41360=>29464, +41361=>29465, +41362=>29466, +41363=>29467, +41364=>29468, +41365=>29469, +41366=>29470, +41367=>29471, +41368=>29472, +41369=>29473, +41370=>29474, +41371=>29475, +41372=>29476, +41373=>29477, +41374=>29478, +41375=>29479, +41376=>29480, +41377=>29481, +41378=>29482, +41379=>29483, +41380=>29484, +41381=>29485, +41382=>29486, +41383=>29487, +41384=>29488, +41385=>29489, +41386=>29490, +41387=>29491, +41388=>29492, +41389=>29493, +41390=>29494, +41391=>29495, +41392=>29496, +41393=>29497, +41394=>29498, +41395=>29499, +41396=>29500, +41397=>29501, +41398=>29502, +41399=>29503, +41400=>29504, +41401=>29505, +41402=>29506, +41403=>29507, +41404=>29508, +41405=>29509, +41406=>29510, +41407=>29511, +41408=>29512, +41409=>29513, +41410=>29514, +41411=>29515, +41412=>29516, +41413=>29517, +41414=>29518, +41415=>29519, +41416=>29520, +41417=>29521, +41418=>29522, +41419=>29523, +41420=>29524, +41421=>29525, +41422=>29526, +41423=>29527, +41424=>29528, +41425=>29529, +41426=>29530, +41427=>29531, +41428=>29532, +41429=>29533, +41430=>29534, +41431=>29535, +41432=>29536, +41433=>29537, +41434=>29538, +41435=>29539, +41436=>29540, +41437=>29541, +41438=>29542, +41439=>29543, +41440=>29544, +41441=>29545, +41442=>29546, +41443=>29547, +41444=>29548, +41445=>29549, +41446=>29550, +41447=>29551, +41448=>29552, +41449=>29553, +41450=>29554, +41451=>29555, +41452=>29556, +41453=>29557, +41454=>29558, +41455=>29559, +41456=>29560, +41457=>29561, +41458=>29562, +41459=>29563, +41460=>29564, +41461=>29565, +41462=>29566, +41463=>29567, +41464=>29568, +41465=>29569, +41466=>29570, +41467=>29571, +41468=>29572, +41469=>29573, +41470=>29574, +41471=>29575, +41472=>29576, +41473=>29577, +41474=>29578, +41475=>29579, +41476=>29580, +41477=>29581, +41478=>29582, +41479=>29583, +41480=>29584, +41481=>29585, +41482=>29586, +41483=>29587, +41484=>29588, +41485=>29589, +41486=>29590, +41487=>29591, +41488=>29592, +41489=>29593, +41490=>29594, +41491=>29595, +41492=>29596, +41493=>29597, +41494=>29598, +41495=>29599, +41496=>29600, +41497=>29601, +41498=>29602, +41499=>29603, +41500=>29604, +41501=>29605, +41502=>29606, +41503=>29607, +41504=>29608, +41505=>29609, +41506=>29610, +41507=>29611, +41508=>29612, +41509=>29613, +41510=>29614, +41511=>29615, +41512=>29616, +41513=>29617, +41514=>29618, +41515=>29619, +41516=>29620, +41517=>29621, +41518=>29622, +41519=>29623, +41520=>29624, +41521=>29625, +41522=>29626, +41523=>29627, +41524=>29628, +41525=>29629, +41526=>29630, +41527=>29631, +41528=>29632, +41529=>29633, +41530=>29634, +41531=>29635, +41532=>29636, +41533=>29637, +41534=>29638, +41535=>29639, +41536=>29640, +41537=>29641, +41538=>29642, +41539=>29643, +41540=>29644, +41541=>29645, +41542=>29646, +41543=>29647, +41544=>29648, +41545=>29649, +41546=>29650, +41547=>29651, +41548=>29652, +41549=>29653, +41550=>29654, +41551=>29655, +41552=>29656, +41553=>29657, +41554=>29658, +41555=>29659, +41556=>29660, +41557=>29661, +41558=>29662, +41559=>29663, +41560=>29664, +41561=>29665, +41562=>29666, +41563=>29667, +41564=>29668, +41565=>29669, +41566=>29670, +41567=>29671, +41568=>29672, +41569=>29673, +41570=>29674, +41571=>29675, +41572=>29676, +41573=>29677, +41574=>29678, +41575=>29679, +41576=>29680, +41577=>29681, +41578=>29682, +41579=>29683, +41580=>29684, +41581=>29685, +41582=>29686, +41583=>29687, +41584=>29688, +41585=>29689, +41586=>29690, +41587=>29691, +41588=>29692, +41589=>29693, +41590=>29694, +41591=>29695, +41592=>29696, +41593=>29697, +41594=>29698, +41595=>29699, +41596=>29700, +41597=>29701, +41598=>29702, +41599=>29703, +41600=>29704, +41601=>29705, +41602=>29706, +41603=>29707, +41604=>29708, +41605=>29709, +41606=>29710, +41607=>29711, +41608=>29712, +41609=>29713, +41610=>29714, +41611=>29715, +41612=>29716, +41613=>29717, +41614=>29718, +41615=>29719, +41616=>29720, +41617=>29721, +41618=>29722, +41619=>29723, +41620=>29724, +41621=>29725, +41622=>29726, +41623=>29727, +41624=>29728, +41625=>29729, +41626=>29730, +41627=>29731, +41628=>29732, +41629=>29733, +41630=>29734, +41631=>29735, +41632=>29736, +41633=>29737, +41634=>29738, +41635=>29739, +41636=>29740, +41637=>29741, +41638=>29742, +41639=>29743, +41640=>29744, +41641=>29745, +41642=>29746, +41643=>29747, +41644=>29748, +41645=>29749, +41646=>29750, +41647=>29751, +41648=>29752, +41649=>29753, +41650=>29754, +41651=>29755, +41652=>29756, +41653=>29757, +41654=>29758, +41655=>29759, +41656=>29760, +41657=>29761, +41658=>29762, +41659=>29763, +41660=>29764, +41661=>29765, +41662=>29766, +41663=>29767, +41664=>29768, +41665=>29769, +41666=>29770, +41667=>29771, +41668=>29772, +41669=>29773, +41670=>29774, +41671=>29775, +41672=>29776, +41673=>29777, +41674=>29778, +41675=>29779, +41676=>29780, +41677=>29781, +41678=>29782, +41679=>29783, +41680=>29784, +41681=>29785, +41682=>29786, +41683=>29787, +41684=>29788, +41685=>29789, +41686=>29790, +41687=>29791, +41688=>29792, +41689=>29793, +41690=>29794, +41691=>29795, +41692=>29796, +41693=>29797, +41694=>29798, +41695=>29799, +41696=>29800, +41697=>29801, +41698=>29802, +41699=>29803, +41700=>29804, +41701=>29805, +41702=>29806, +41703=>29807, +41704=>29808, +41705=>29809, +41706=>29810, +41707=>29811, +41708=>29812, +41709=>29813, +41710=>29814, +41711=>29815, +41712=>29816, +41713=>29817, +41714=>29818, +41715=>29819, +41716=>29820, +41717=>29821, +41718=>29822, +41719=>29823, +41720=>29824, +41721=>29825, +41722=>29826, +41723=>29827, +41724=>29828, +41725=>29829, +41726=>29830, +41727=>29831, +41728=>29832, +41729=>29833, +41730=>29834, +41731=>29835, +41732=>29836, +41733=>29837, +41734=>29838, +41735=>29839, +41736=>29840, +41737=>29841, +41738=>29842, +41739=>29843, +41740=>29844, +41741=>29845, +41742=>29846, +41743=>29847, +41744=>29848, +41745=>29849, +41746=>29850, +41747=>29851, +41748=>29852, +41749=>29853, +41750=>29854, +41751=>29855, +41752=>29856, +41753=>29857, +41754=>29858, +41755=>29859, +41756=>29860, +41757=>29861, +41758=>29862, +41759=>29863, +41760=>29864, +41761=>29865, +41762=>29866, +41763=>29867, +41764=>29868, +41765=>29869, +41766=>29870, +41767=>29871, +41768=>29872, +41769=>29873, +41770=>29874, +41771=>29875, +41772=>29876, +41773=>29877, +41774=>29878, +41775=>29879, +41776=>29880, +41777=>29881, +41778=>29882, +41779=>29883, +41780=>29884, +41781=>29885, +41782=>29886, +41783=>29887, +41784=>29888, +41785=>29889, +41786=>29890, +41787=>29891, +41788=>29892, +41789=>29893, +41790=>29894, +41791=>29895, +41792=>29896, +41793=>29897, +41794=>29898, +41795=>29899, +41796=>29900, +41797=>29901, +41798=>29902, +41799=>29903, +41800=>29904, +41801=>29905, +41802=>29906, +41803=>29907, +41804=>29908, +41805=>29909, +41806=>29910, +41807=>29911, +41808=>29912, +41809=>29913, +41810=>29914, +41811=>29915, +41812=>29916, +41813=>29917, +41814=>29918, +41815=>29919, +41816=>29920, +41817=>29921, +41818=>29922, +41819=>29923, +41820=>29924, +41821=>29925, +41822=>29926, +41823=>29927, +41824=>29928, +41825=>29929, +41826=>29930, +41827=>29931, +41828=>29932, +41829=>29933, +41830=>29934, +41831=>29935, +41832=>29936, +41833=>29937, +41834=>29938, +41835=>29939, +41836=>29940, +41837=>29941, +41838=>29942, +41839=>29943, +41840=>29944, +41841=>29945, +41842=>29946, +41843=>29947, +41844=>29948, +41845=>29949, +41846=>29950, +41847=>29951, +41848=>29952, +41849=>29953, +41850=>29954, +41851=>29955, +41852=>29956, +41853=>29957, +41854=>29958, +41855=>29959, +41856=>29960, +41857=>29961, +41858=>29962, +41859=>29963, +41860=>29964, +41861=>29965, +41862=>29966, +41863=>29967, +41864=>29968, +41865=>29969, +41866=>29970, +41867=>29971, +41868=>29972, +41869=>29973, +41870=>29974, +41871=>29975, +41872=>29976, +41873=>29977, +41874=>29978, +41875=>29979, +41876=>29980, +41877=>29981, +41878=>29982, +41879=>29983, +41880=>29984, +41881=>29985, +41882=>29986, +41883=>29987, +41884=>29988, +41885=>29989, +41886=>29990, +41887=>29991, +41888=>29992, +41889=>29993, +41890=>29994, +41891=>29995, +41892=>29996, +41893=>29997, +41894=>29998, +41895=>29999, +41896=>30000, +41897=>30001, +41898=>30002, +41899=>30003, +41900=>30004, +41901=>30005, +41902=>30006, +41903=>30007, +41904=>30008, +41905=>30009, +41906=>30010, +41907=>30011, +41908=>30012, +41909=>30013, +41910=>30014, +41911=>30015, +41912=>30016, +41913=>30017, +41914=>30018, +41915=>30019, +41916=>30020, +41917=>30021, +41918=>30022, +41919=>30023, +41920=>30024, +41921=>30025, +41922=>30026, +41923=>30027, +41924=>30028, +41925=>30029, +41926=>30030, +41927=>30031, +41928=>30032, +41929=>30033, +41930=>30034, +41931=>30035, +41932=>30036, +41933=>30037, +41934=>30038, +41935=>30039, +41936=>30040, +41937=>30041, +41938=>30042, +41939=>30043, +41940=>30044, +41941=>30045, +41942=>30046, +41943=>30047, +41944=>30048, +41945=>30049, +41946=>30050, +41947=>30051, +41948=>30052, +41949=>30053, +41950=>30054, +41951=>30055, +41952=>30056, +41953=>30057, +41954=>30058, +41955=>30059, +41956=>30060, +41957=>30061, +41958=>30062, +41959=>30063, +41960=>30064, +41961=>30065, +41962=>30066, +41963=>30067, +41964=>30068, +41965=>30069, +41966=>30070, +41967=>30071, +41968=>30072, +41969=>30073, +41970=>30074, +41971=>30075, +41972=>30076, +41973=>30077, +41974=>30078, +41975=>30079, +41976=>30080, +41977=>30081, +41978=>30082, +41979=>30083, +41980=>30084, +41981=>30085, +41982=>30086, +41983=>30087, +41984=>30088, +41985=>30089, +41986=>30090, +41987=>30091, +41988=>30092, +41989=>30093, +41990=>30094, +41991=>30095, +41992=>30096, +41993=>30097, +41994=>30098, +41995=>30099, +41996=>30100, +41997=>30101, +41998=>30102, +41999=>30103, +42000=>30104, +42001=>30105, +42002=>30106, +42003=>30107, +42004=>30108, +42005=>30109, +42006=>30110, +42007=>30111, +42008=>30112, +42009=>30113, +42010=>30114, +42011=>30115, +42012=>30116, +42013=>30117, +42014=>30118, +42015=>30119, +42016=>30120, +42017=>30121, +42018=>30122, +42019=>30123, +42020=>30124, +42021=>30125, +42022=>30126, +42023=>30127, +42024=>30128, +42025=>30129, +42026=>30130, +42027=>30131, +42028=>30132, +42029=>30133, +42030=>30134, +42031=>30135, +42032=>30136, +42033=>30137, +42034=>30138, +42035=>30139, +42036=>30140, +42037=>30141, +42038=>30142, +42039=>30143, +42040=>30144, +42041=>30145, +42042=>30146, +42043=>30147, +42044=>30148, +42045=>30149, +42046=>30150, +42047=>30151, +42048=>30152, +42049=>30153, +42050=>30154, +42051=>30155, +42052=>30156, +42053=>30157, +42054=>30158, +42055=>30159, +42056=>30160, +42057=>30161, +42058=>30162, +42059=>30163, +42060=>30164, +42061=>30165, +42062=>30166, +42063=>30167, +42064=>30168, +42065=>30169, +42066=>30170, +42067=>30171, +42068=>30172, +42069=>30173, +42070=>30174, +42071=>30175, +42072=>30176, +42073=>30177, +42074=>30178, +42075=>30179, +42076=>30180, +42077=>30181, +42078=>30182, +42079=>30183, +42080=>30184, +42081=>30185, +42082=>30186, +42083=>30187, +42084=>30188, +42085=>30189, +42086=>30190, +42087=>30191, +42088=>30192, +42089=>30193, +42090=>30194, +42091=>30195, +42092=>30196, +42093=>30197, +42094=>30198, +42095=>30199, +42096=>30200, +42097=>30201, +42098=>30202, +42099=>30203, +42100=>30204, +42101=>30205, +42102=>30206, +42103=>30207, +42104=>30208, +42105=>30209, +42106=>30210, +42107=>30211, +42108=>30212, +42109=>30213, +42110=>30214, +42111=>30215, +42112=>30216, +42113=>30217, +42114=>30218, +42115=>30219, +42116=>30220, +42117=>30221, +42118=>30222, +42119=>30223, +42120=>30224, +42121=>30225, +42122=>30226, +42123=>30227, +42124=>30228, +42128=>30229, +42129=>30230, +42130=>30231, +42131=>30232, +42132=>30233, +42133=>30234, +42134=>30235, +42135=>30236, +42136=>30237, +42137=>30238, +42138=>30239, +42139=>30240, +42140=>30241, +42141=>30242, +42142=>30243, +42143=>30244, +42144=>30245, +42145=>30246, +42146=>30247, +42147=>30248, +42148=>30249, +42149=>30250, +42150=>30251, +42151=>30252, +42152=>30253, +42153=>30254, +42154=>30255, +42155=>30256, +42156=>30257, +42157=>30258, +42158=>30259, +42159=>30260, +42160=>30261, +42161=>30262, +42162=>30263, +42163=>30264, +42164=>30265, +42165=>30266, +42166=>30267, +42167=>30268, +42168=>30269, +42169=>30270, +42170=>30271, +42171=>30272, +42172=>30273, +42173=>30274, +42174=>30275, +42175=>30276, +42176=>30277, +42177=>30278, +42178=>30279, +42179=>30280, +42180=>30281, +42181=>30282, +42182=>30283, +); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/uni2cid_aj16.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/uni2cid_aj16.php new file mode 100755 index 00000000..9b20c345 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/uni2cid_aj16.php @@ -0,0 +1,15705 @@ +1, +32=>1, +33=>2, +34=>3, +35=>4, +36=>5, +37=>6, +38=>7, +39=>8, +40=>9, +41=>10, +42=>11, +43=>12, +44=>13, +8209=>14, +45=>14, +46=>15, +47=>16, +48=>17, +49=>18, +50=>19, +51=>20, +52=>21, +53=>22, +54=>23, +55=>24, +56=>25, +57=>26, +58=>27, +59=>28, +60=>29, +61=>30, +62=>31, +63=>32, +64=>33, +65=>34, +66=>35, +67=>36, +68=>37, +69=>38, +70=>39, +71=>40, +72=>41, +73=>42, +74=>43, +75=>44, +76=>45, +77=>46, +78=>47, +79=>48, +80=>49, +81=>50, +82=>51, +83=>52, +84=>53, +85=>54, +86=>55, +87=>56, +88=>57, +89=>58, +90=>59, +91=>60, +165=>61, +93=>62, +94=>63, +818=>64, +95=>64, +768=>65, +96=>65, +97=>66, +98=>67, +99=>68, +100=>69, +101=>70, +102=>71, +103=>72, +104=>73, +105=>74, +106=>75, +107=>76, +108=>77, +109=>78, +110=>79, +111=>80, +112=>81, +113=>82, +114=>83, +115=>84, +116=>85, +117=>86, +118=>87, +119=>88, +120=>89, +121=>90, +122=>91, +123=>92, +166=>93, +125=>94, +732=>95, +771=>95, +700=>96, +8217=>96, +92=>97, +699=>98, +8216=>98, +124=>99, +126=>100, +8764=>100, +161=>101, +162=>102, +163=>103, +8260=>104, +402=>105, +164=>107, +8220=>108, +171=>109, +8249=>110, +8250=>111, +64257=>112, +64258=>113, +8210=>114, +8211=>114, +183=>117, +8729=>117, +8226=>119, +8218=>120, +8222=>121, +8221=>122, +187=>123, +191=>126, +769=>127, +710=>128, +770=>128, +175=>129, +772=>129, +774=>130, +775=>131, +776=>132, +730=>133, +778=>133, +184=>134, +807=>134, +779=>135, +808=>136, +780=>137, +822=>138, +8212=>138, +198=>139, +170=>140, +321=>141, +216=>142, +338=>143, +186=>144, +230=>145, +305=>146, +322=>147, +248=>148, +339=>149, +223=>150, +173=>151, +169=>152, +172=>153, +174=>154, +178=>157, +179=>158, +181=>159, +185=>160, +188=>161, +189=>162, +190=>163, +192=>164, +193=>165, +194=>166, +195=>167, +196=>168, +197=>169, +199=>170, +200=>171, +201=>172, +202=>173, +203=>174, +204=>175, +205=>176, +206=>177, +207=>178, +208=>179, +209=>180, +210=>181, +211=>182, +212=>183, +213=>184, +214=>185, +217=>187, +218=>188, +219=>189, +220=>190, +221=>191, +222=>192, +224=>193, +225=>194, +226=>195, +227=>196, +228=>197, +229=>198, +231=>199, +232=>200, +233=>201, +234=>202, +235=>203, +236=>204, +237=>205, +238=>206, +239=>207, +240=>208, +241=>209, +242=>210, +243=>211, +244=>212, +245=>213, +246=>214, +249=>216, +250=>217, +251=>218, +252=>219, +253=>220, +254=>221, +255=>222, +352=>223, +376=>224, +381=>225, +773=>226, +8254=>226, +353=>227, +8482=>228, +382=>229, +8194=>231, +65512=>323, +65377=>327, +65378=>328, +65379=>329, +65380=>330, +65381=>331, +65382=>332, +65383=>333, +65384=>334, +65385=>335, +65386=>336, +65387=>337, +65388=>338, +65389=>339, +65390=>340, +65391=>341, +65392=>342, +65393=>343, +65394=>344, +65395=>345, +65396=>346, +65397=>347, +65398=>348, +65399=>349, +65400=>350, +65401=>351, +65402=>352, +65403=>353, +65404=>354, +65405=>355, +65406=>356, +65407=>357, +65408=>358, +65409=>359, +65410=>360, +65411=>361, +65412=>362, +65413=>363, +65414=>364, +65415=>365, +65416=>366, +65417=>367, +65418=>368, +65419=>369, +65420=>370, +65421=>371, +65422=>372, +65423=>373, +65424=>374, +65425=>375, +65426=>376, +65427=>377, +65428=>378, +65429=>379, +65430=>380, +65431=>381, +65432=>382, +65433=>383, +65434=>384, +65435=>385, +65436=>386, +65437=>387, +65438=>388, +65439=>389, +8195=>633, +12288=>633, +12289=>634, +12290=>635, +65292=>636, +65294=>637, +12539=>638, +65306=>639, +65307=>640, +65311=>641, +65281=>642, +12443=>643, +12444=>644, +180=>645, +65344=>646, +168=>647, +65342=>648, +65507=>649, +65343=>650, +12541=>651, +12542=>652, +12445=>653, +12446=>654, +12291=>655, +20189=>656, +12293=>657, +12294=>658, +12295=>659, +12540=>660, +8213=>661, +8208=>662, +65295=>663, +65340=>664, +12316=>665, +65374=>665, +8214=>666, +65372=>667, +8230=>668, +8229=>669, +65288=>674, +65289=>675, +12308=>676, +12309=>677, +65339=>678, +65341=>679, +65371=>680, +65373=>681, +12296=>682, +12297=>683, +12298=>684, +12299=>685, +12300=>686, +12301=>687, +12302=>688, +12303=>689, +12304=>690, +12305=>691, +65291=>692, +8722=>693, +65293=>693, +177=>694, +215=>695, +247=>696, +65309=>697, +8800=>698, +65308=>699, +65310=>700, +8806=>701, +8807=>702, +8734=>703, +8756=>704, +9794=>705, +9792=>706, +176=>707, +8242=>708, +8243=>709, +8451=>710, +65509=>711, +65284=>712, +65504=>713, +65505=>714, +65285=>715, +65283=>716, +65286=>717, +65290=>718, +65312=>719, +167=>720, +9734=>721, +9733=>722, +9675=>723, +9679=>724, +9678=>725, +9671=>726, +9670=>727, +9633=>728, +9632=>729, +9651=>730, +9650=>731, +9661=>732, +9660=>733, +8251=>734, +12306=>735, +8594=>736, +8592=>737, +8593=>738, +8595=>739, +12307=>740, +8712=>741, +8715=>742, +8838=>743, +8839=>744, +8834=>745, +8835=>746, +8746=>747, +8745=>748, +8743=>749, +8744=>750, +65506=>751, +8658=>752, +8660=>753, +8704=>754, +8707=>755, +8736=>756, +8869=>757, +8978=>758, +8706=>759, +8711=>760, +8801=>761, +8786=>762, +8810=>763, +8811=>764, +8730=>765, +8765=>766, +8733=>767, +8757=>768, +8747=>769, +8748=>770, +8491=>771, +8240=>772, +9839=>773, +9837=>774, +9834=>775, +8224=>776, +8225=>777, +182=>778, +9711=>779, +65296=>780, +65297=>781, +65298=>782, +65299=>783, +65300=>784, +65301=>785, +65302=>786, +65303=>787, +65304=>788, +65305=>789, +65313=>790, +65314=>791, +65315=>792, +65316=>793, +65317=>794, +65318=>795, +65319=>796, +65320=>797, +65321=>798, +65322=>799, +65323=>800, +65324=>801, +65325=>802, +65326=>803, +65327=>804, +65328=>805, +65329=>806, +65330=>807, +65331=>808, +65332=>809, +65333=>810, +65334=>811, +65335=>812, +65336=>813, +65337=>814, +65338=>815, +65345=>816, +65346=>817, +65347=>818, +65348=>819, +65349=>820, +65350=>821, +65351=>822, +65352=>823, +65353=>824, +65354=>825, +65355=>826, +65356=>827, +65357=>828, +65358=>829, +65359=>830, +65360=>831, +65361=>832, +65362=>833, +65363=>834, +65364=>835, +65365=>836, +65366=>837, +65367=>838, +65368=>839, +65369=>840, +65370=>841, +12353=>842, +12354=>843, +12355=>844, +12356=>845, +12357=>846, +12358=>847, +12359=>848, +12360=>849, +12361=>850, +12362=>851, +12363=>852, +12364=>853, +12365=>854, +12366=>855, +12367=>856, +12368=>857, +12369=>858, +12370=>859, +12371=>860, +12372=>861, +12373=>862, +12374=>863, +12375=>864, +12376=>865, +12377=>866, +12378=>867, +12379=>868, +12380=>869, +12381=>870, +12382=>871, +12383=>872, +12384=>873, +12385=>874, +12386=>875, +12387=>876, +12388=>877, +12389=>878, +12390=>879, +12391=>880, +12392=>881, +12393=>882, +12394=>883, +12395=>884, +12396=>885, +12397=>886, +12398=>887, +12399=>888, +12400=>889, +12401=>890, +12402=>891, +12403=>892, +12404=>893, +12405=>894, +12406=>895, +12407=>896, +12408=>897, +12409=>898, +12410=>899, +12411=>900, +12412=>901, +12413=>902, +12414=>903, +12415=>904, +12416=>905, +12417=>906, +12418=>907, +12419=>908, +12420=>909, +12421=>910, +12422=>911, +12423=>912, +12424=>913, +12425=>914, +12426=>915, +12427=>916, +12428=>917, +12429=>918, +12430=>919, +12431=>920, +12432=>921, +12433=>922, +12434=>923, +12435=>924, +12449=>925, +12450=>926, +12451=>927, +12452=>928, +12453=>929, +12454=>930, +12455=>931, +12456=>932, +12457=>933, +12458=>934, +12459=>935, +12460=>936, +12461=>937, +12462=>938, +12463=>939, +12464=>940, +12465=>941, +12466=>942, +12467=>943, +12468=>944, +12469=>945, +12470=>946, +12471=>947, +12472=>948, +12473=>949, +12474=>950, +12475=>951, +12476=>952, +12477=>953, +12478=>954, +12479=>955, +12480=>956, +12481=>957, +12482=>958, +12483=>959, +12484=>960, +12485=>961, +12486=>962, +12487=>963, +12488=>964, +12489=>965, +12490=>966, +12491=>967, +12492=>968, +12493=>969, +12494=>970, +12495=>971, +12496=>972, +12497=>973, +12498=>974, +12499=>975, +12500=>976, +12501=>977, +12502=>978, +12503=>979, +12504=>980, +12505=>981, +12506=>982, +12507=>983, +12508=>984, +12509=>985, +12510=>986, +12511=>987, +12512=>988, +12513=>989, +12514=>990, +12515=>991, +12516=>992, +12517=>993, +12518=>994, +12519=>995, +12520=>996, +12521=>997, +12522=>998, +12523=>999, +12524=>1000, +12525=>1001, +12526=>1002, +12527=>1003, +12528=>1004, +12529=>1005, +12530=>1006, +12531=>1007, +12532=>1008, +12533=>1009, +12534=>1010, +913=>1011, +914=>1012, +915=>1013, +916=>1014, +917=>1015, +918=>1016, +919=>1017, +920=>1018, +921=>1019, +922=>1020, +923=>1021, +924=>1022, +925=>1023, +926=>1024, +927=>1025, +928=>1026, +929=>1027, +931=>1028, +932=>1029, +933=>1030, +934=>1031, +935=>1032, +936=>1033, +937=>1034, +945=>1035, +946=>1036, +947=>1037, +948=>1038, +949=>1039, +950=>1040, +951=>1041, +952=>1042, +953=>1043, +954=>1044, +955=>1045, +956=>1046, +957=>1047, +958=>1048, +959=>1049, +960=>1050, +961=>1051, +963=>1052, +964=>1053, +965=>1054, +966=>1055, +967=>1056, +968=>1057, +969=>1058, +1040=>1059, +1041=>1060, +1042=>1061, +1043=>1062, +1044=>1063, +1045=>1064, +1025=>1065, +1046=>1066, +1047=>1067, +1048=>1068, +1049=>1069, +1050=>1070, +1051=>1071, +1052=>1072, +1053=>1073, +1054=>1074, +1055=>1075, +1056=>1076, +1057=>1077, +1058=>1078, +1059=>1079, +1060=>1080, +1061=>1081, +1062=>1082, +1063=>1083, +1064=>1084, +1065=>1085, +1066=>1086, +1067=>1087, +1068=>1088, +1069=>1089, +1070=>1090, +1071=>1091, +1072=>1092, +1073=>1093, +1074=>1094, +1075=>1095, +1076=>1096, +1077=>1097, +1105=>1098, +1078=>1099, +1079=>1100, +1080=>1101, +1081=>1102, +1082=>1103, +1083=>1104, +1084=>1105, +1085=>1106, +1086=>1107, +1087=>1108, +1088=>1109, +1089=>1110, +1090=>1111, +1091=>1112, +1092=>1113, +1093=>1114, +1094=>1115, +1095=>1116, +1096=>1117, +1097=>1118, +1098=>1119, +1099=>1120, +1100=>1121, +1101=>1122, +1102=>1123, +1103=>1124, +20124=>1125, +21782=>1126, +23043=>1127, +38463=>1128, +21696=>1129, +24859=>1130, +25384=>1131, +23030=>1132, +36898=>1133, +33909=>1134, +33564=>1135, +31312=>1136, +24746=>1137, +25569=>1138, +28197=>1139, +26093=>1140, +33894=>1141, +33446=>1142, +39925=>1143, +26771=>1144, +22311=>1145, +26017=>1146, +25201=>1147, +23451=>1148, +22992=>1149, +34427=>1150, +39156=>1151, +32098=>1152, +32190=>1153, +39822=>1154, +25110=>1155, +31903=>1156, +34999=>1157, +23433=>1158, +24245=>1159, +25353=>1160, +26263=>1161, +26696=>1162, +38343=>1163, +38797=>1164, +26447=>1165, +20197=>1166, +20234=>1167, +20301=>1168, +20381=>1169, +20553=>1170, +22258=>1171, +22839=>1172, +22996=>1173, +23041=>1174, +23561=>1175, +24799=>1176, +24847=>1177, +24944=>1178, +26131=>1179, +26885=>1180, +28858=>1181, +30031=>1182, +30064=>1183, +31227=>1184, +32173=>1185, +32239=>1186, +32963=>1187, +33806=>1188, +12176=>1189, +34915=>1189, +35586=>1190, +36949=>1191, +36986=>1192, +21307=>1193, +20117=>1194, +20133=>1195, +22495=>1196, +32946=>1197, +37057=>1198, +30959=>1199, +12032=>1200, +19968=>1200, +22769=>1201, +28322=>1202, +36920=>1203, +31282=>1204, +33576=>1205, +33419=>1206, +39983=>1207, +20801=>1208, +21360=>1209, +21693=>1210, +21729=>1211, +22240=>1212, +23035=>1213, +24341=>1214, +39154=>1215, +28139=>1216, +32996=>1217, +34093=>1218, +38498=>1219, +38512=>1220, +38560=>1221, +38907=>1222, +21515=>1223, +21491=>1224, +23431=>1225, +28879=>1226, +12155=>1227, +32701=>1227, +36802=>1228, +12204=>1229, +38632=>1229, +21359=>1230, +40284=>1231, +31418=>1232, +19985=>1233, +30867=>1234, +12165=>1235, +33276=>1235, +28198=>1236, +22040=>1237, +21764=>1238, +27421=>1239, +34074=>1240, +39995=>1241, +23013=>1242, +21417=>1243, +28006=>1244, +12128=>1245, +29916=>1245, +38287=>1246, +22082=>1247, +20113=>1248, +36939=>1249, +38642=>1250, +33615=>1251, +39180=>1252, +21473=>1253, +21942=>1254, +23344=>1255, +24433=>1256, +26144=>1257, +26355=>1258, +26628=>1259, +27704=>1260, +27891=>1261, +27945=>1262, +29787=>1263, +30408=>1264, +31310=>1265, +38964=>1266, +33521=>1267, +34907=>1268, +35424=>1269, +37613=>1270, +28082=>1271, +30123=>1272, +30410=>1273, +39365=>1274, +24742=>1275, +35585=>1276, +36234=>1277, +38322=>1278, +27022=>1279, +21421=>1280, +20870=>1281, +22290=>1282, +22576=>1283, +22852=>1284, +23476=>1285, +24310=>1286, +24616=>1287, +25513=>1288, +25588=>1289, +27839=>1290, +28436=>1291, +28814=>1292, +28948=>1293, +29017=>1294, +29141=>1295, +29503=>1296, +32257=>1297, +33398=>1298, +33489=>1299, +34199=>1300, +36960=>1301, +37467=>1302, +40219=>1303, +22633=>1304, +26044=>1305, +27738=>1306, +29989=>1307, +20985=>1308, +22830=>1309, +22885=>1310, +24448=>1311, +24540=>1312, +25276=>1313, +26106=>1314, +27178=>1315, +27431=>1316, +27572=>1317, +29579=>1318, +32705=>1319, +35158=>1320, +40236=>1321, +40206=>1322, +12009=>1323, +40644=>1323, +23713=>1324, +27798=>1325, +33659=>1326, +20740=>1327, +23627=>1328, +25014=>1329, +33222=>1330, +26742=>1331, +29281=>1332, +12036=>1333, +20057=>1333, +20474=>1334, +21368=>1335, +24681=>1336, +28201=>1337, +31311=>1338, +12211=>1339, +38899=>1339, +19979=>1340, +21270=>1341, +20206=>1342, +20309=>1343, +20285=>1344, +20385=>1345, +20339=>1346, +21152=>1347, +21487=>1348, +22025=>1349, +22799=>1350, +23233=>1351, +23478=>1352, +23521=>1353, +31185=>1354, +26247=>1355, +26524=>1356, +26550=>1357, +27468=>1358, +27827=>1359, +12117=>1360, +28779=>1360, +29634=>1361, +31117=>1362, +12146=>1363, +31166=>1363, +31292=>1364, +31623=>1365, +33457=>1366, +33499=>1367, +33540=>1368, +33655=>1369, +33775=>1370, +33747=>1371, +34662=>1372, +35506=>1373, +22057=>1374, +36008=>1375, +36838=>1376, +36942=>1377, +38686=>1378, +34442=>1379, +20420=>1380, +23784=>1381, +25105=>1382, +12123=>1383, +29273=>1383, +30011=>1384, +33253=>1385, +33469=>1386, +34558=>1387, +36032=>1388, +38597=>1389, +39187=>1390, +39381=>1391, +20171=>1392, +20250=>1393, +35299=>1394, +22238=>1395, +22602=>1396, +22730=>1397, +24315=>1398, +24555=>1399, +24618=>1400, +24724=>1401, +24674=>1402, +25040=>1403, +25106=>1404, +25296=>1405, +25913=>1406, +39745=>1407, +26214=>1408, +26800=>1409, +28023=>1410, +28784=>1411, +30028=>1412, +30342=>1413, +32117=>1414, +33445=>1415, +34809=>1416, +38283=>1417, +38542=>1418, +12185=>1419, +35997=>1419, +20977=>1420, +21182=>1421, +22806=>1422, +21683=>1423, +23475=>1424, +23830=>1425, +24936=>1426, +27010=>1427, +28079=>1428, +30861=>1429, +33995=>1430, +34903=>1431, +35442=>1432, +37799=>1433, +39608=>1434, +28012=>1435, +39336=>1436, +34521=>1437, +22435=>1438, +26623=>1439, +34510=>1440, +37390=>1441, +21123=>1442, +22151=>1443, +21508=>1444, +24275=>1445, +25313=>1446, +25785=>1447, +26684=>1448, +26680=>1449, +27579=>1450, +29554=>1451, +30906=>1452, +31339=>1453, +35226=>1454, +12179=>1455, +35282=>1455, +36203=>1456, +36611=>1457, +37101=>1458, +38307=>1459, +38548=>1460, +12208=>1461, +38761=>1461, +23398=>1462, +23731=>1463, +27005=>1464, +38989=>1465, +38990=>1466, +25499=>1467, +31520=>1468, +27179=>1469, +27263=>1470, +26806=>1471, +39949=>1472, +28511=>1473, +21106=>1474, +21917=>1475, +24688=>1476, +25324=>1477, +27963=>1478, +28167=>1479, +28369=>1480, +33883=>1481, +35088=>1482, +36676=>1483, +19988=>1484, +39993=>1485, +21494=>1486, +26907=>1487, +27194=>1488, +38788=>1489, +26666=>1490, +20828=>1491, +31427=>1492, +33970=>1493, +37340=>1494, +37772=>1495, +22107=>1496, +40232=>1497, +26658=>1498, +33541=>1499, +33841=>1500, +31909=>1501, +21000=>1502, +33477=>1503, +12129=>1504, +29926=>1504, +20094=>1505, +20355=>1506, +20896=>1507, +23506=>1508, +21002=>1509, +21208=>1510, +21223=>1511, +24059=>1512, +21914=>1513, +22570=>1514, +23014=>1515, +23436=>1516, +23448=>1517, +23515=>1518, +12082=>1519, +24178=>1519, +24185=>1520, +24739=>1521, +24863=>1522, +24931=>1523, +25022=>1524, +25563=>1525, +25954=>1526, +26577=>1527, +26707=>1528, +26874=>1529, +27454=>1530, +27475=>1531, +27735=>1532, +28450=>1533, +28567=>1534, +28485=>1535, +29872=>1536, +12130=>1537, +29976=>1537, +30435=>1538, +30475=>1539, +31487=>1540, +31649=>1541, +31777=>1542, +32233=>1543, +12152=>1544, +32566=>1544, +32752=>1545, +32925=>1546, +33382=>1547, +33694=>1548, +35251=>1549, +35532=>1550, +36011=>1551, +36996=>1552, +37969=>1553, +38291=>1554, +38289=>1555, +38306=>1556, +38501=>1557, +38867=>1558, +39208=>1559, +33304=>1560, +20024=>1561, +21547=>1562, +23736=>1563, +24012=>1564, +29609=>1565, +30284=>1566, +30524=>1567, +23721=>1568, +32747=>1569, +36107=>1570, +38593=>1571, +38929=>1572, +38996=>1573, +39000=>1574, +20225=>1575, +20238=>1576, +21361=>1577, +21916=>1578, +22120=>1579, +22522=>1580, +22855=>1581, +23305=>1582, +23492=>1583, +23696=>1584, +24076=>1585, +24190=>1586, +24524=>1587, +25582=>1588, +26426=>1589, +26071=>1590, +26082=>1591, +26399=>1592, +26827=>1593, +26820=>1594, +27231=>1595, +24112=>1596, +27589=>1597, +27671=>1598, +27773=>1599, +30079=>1600, +31048=>1601, +23395=>1602, +31232=>1603, +32000=>1604, +24509=>1605, +35215=>1606, +35352=>1607, +36020=>1608, +36215=>1609, +36556=>1610, +36637=>1611, +39138=>1612, +39438=>1613, +12004=>1614, +12225=>1614, +39740=>1614, +12018=>1615, +20096=>1615, +20605=>1616, +20736=>1617, +22931=>1618, +23452=>1619, +25135=>1620, +25216=>1621, +25836=>1622, +27450=>1623, +29344=>1624, +30097=>1625, +31047=>1626, +32681=>1627, +34811=>1628, +35516=>1629, +35696=>1630, +25516=>1631, +33738=>1632, +38816=>1633, +21513=>1634, +21507=>1635, +21931=>1636, +26708=>1637, +27224=>1638, +35440=>1639, +30759=>1640, +26485=>1641, +12233=>1642, +40653=>1642, +21364=>1643, +23458=>1644, +33050=>1645, +34384=>1646, +36870=>1647, +19992=>1648, +20037=>1649, +20167=>1650, +20241=>1651, +21450=>1652, +21560=>1653, +23470=>1654, +12088=>1655, +24339=>1655, +24613=>1656, +25937=>1657, +26429=>1658, +27714=>1659, +27762=>1660, +27875=>1661, +28792=>1662, +29699=>1663, +31350=>1664, +31406=>1665, +31496=>1666, +32026=>1667, +31998=>1668, +32102=>1669, +26087=>1670, +12124=>1671, +29275=>1671, +21435=>1672, +23621=>1673, +24040=>1674, +25298=>1675, +25312=>1676, +25369=>1677, +28192=>1678, +34394=>1679, +35377=>1680, +36317=>1681, +37624=>1682, +28417=>1683, +31142=>1684, +12226=>1685, +39770=>1685, +20136=>1686, +20139=>1687, +20140=>1688, +20379=>1689, +20384=>1690, +20689=>1691, +20807=>1692, +31478=>1693, +20849=>1694, +20982=>1695, +21332=>1696, +21281=>1697, +21375=>1698, +21483=>1699, +21932=>1700, +22659=>1701, +23777=>1702, +24375=>1703, +24394=>1704, +24623=>1705, +24656=>1706, +24685=>1707, +25375=>1708, +25945=>1709, +27211=>1710, +27841=>1711, +29378=>1712, +29421=>1713, +30703=>1714, +33016=>1715, +33029=>1716, +33288=>1717, +34126=>1718, +37111=>1719, +37857=>1720, +38911=>1721, +39255=>1722, +39514=>1723, +20208=>1724, +20957=>1725, +23597=>1726, +26241=>1727, +26989=>1728, +23616=>1729, +26354=>1730, +26997=>1731, +12127=>1732, +29577=>1732, +26704=>1733, +31873=>1734, +20677=>1735, +21220=>1736, +22343=>1737, +12081=>1738, +24062=>1738, +37670=>1739, +12100=>1740, +26020=>1740, +27427=>1741, +27453=>1742, +29748=>1743, +31105=>1744, +31165=>1745, +31563=>1746, +32202=>1747, +33465=>1748, +33740=>1749, +34943=>1750, +35167=>1751, +35641=>1752, +36817=>1753, +12198=>1754, +37329=>1754, +21535=>1755, +37504=>1756, +20061=>1757, +20534=>1758, +21477=>1759, +21306=>1760, +29399=>1761, +29590=>1762, +30697=>1763, +33510=>1764, +36527=>1765, +39366=>1766, +39368=>1767, +39378=>1768, +20855=>1769, +24858=>1770, +34398=>1771, +21936=>1772, +31354=>1773, +20598=>1774, +23507=>1775, +36935=>1776, +38533=>1777, +20018=>1778, +27355=>1779, +37351=>1780, +23633=>1781, +23624=>1782, +25496=>1783, +31391=>1784, +27795=>1785, +38772=>1786, +36705=>1787, +31402=>1788, +29066=>1789, +38536=>1790, +31874=>1791, +26647=>1792, +32368=>1793, +26705=>1794, +37740=>1795, +21234=>1796, +21531=>1797, +34219=>1798, +35347=>1799, +32676=>1800, +36557=>1801, +37089=>1802, +21350=>1803, +34952=>1804, +31041=>1805, +20418=>1806, +20670=>1807, +21009=>1808, +20804=>1809, +21843=>1810, +22317=>1811, +29674=>1812, +22411=>1813, +22865=>1814, +24418=>1815, +24452=>1816, +24693=>1817, +24950=>1818, +24935=>1819, +25001=>1820, +25522=>1821, +25658=>1822, +25964=>1823, +26223=>1824, +26690=>1825, +28179=>1826, +30054=>1827, +31293=>1828, +31995=>1829, +32076=>1830, +32153=>1831, +32331=>1832, +32619=>1833, +33550=>1834, +33610=>1835, +34509=>1836, +35336=>1837, +35427=>1838, +35686=>1839, +36605=>1840, +38938=>1841, +40335=>1842, +33464=>1843, +36814=>1844, +39912=>1845, +21127=>1846, +25119=>1847, +25731=>1848, +28608=>1849, +38553=>1850, +26689=>1851, +20625=>1852, +12107=>1853, +27424=>1853, +27770=>1854, +28500=>1855, +12147=>1856, +31348=>1856, +32080=>1857, +12174=>1858, +34880=>1858, +35363=>1859, +12105=>1860, +26376=>1860, +20214=>1861, +20537=>1862, +20518=>1863, +20581=>1864, +20860=>1865, +21048=>1866, +21091=>1867, +21927=>1868, +22287=>1869, +22533=>1870, +23244=>1871, +24314=>1872, +25010=>1873, +25080=>1874, +25331=>1875, +25458=>1876, +26908=>1877, +27177=>1878, +29309=>1879, +12125=>1880, +29356=>1880, +29486=>1881, +30740=>1882, +30831=>1883, +32121=>1884, +30476=>1885, +32937=>1886, +12178=>1887, +35211=>1887, +35609=>1888, +36066=>1889, +36562=>1890, +36963=>1891, +37749=>1892, +38522=>1893, +38997=>1894, +39443=>1895, +40568=>1896, +20803=>1897, +21407=>1898, +21427=>1899, +24187=>1900, +24358=>1901, +28187=>1902, +28304=>1903, +12126=>1904, +29572=>1904, +29694=>1905, +32067=>1906, +33335=>1907, +12180=>1908, +35328=>1908, +35578=>1909, +38480=>1910, +20046=>1911, +20491=>1912, +21476=>1913, +21628=>1914, +22266=>1915, +22993=>1916, +23396=>1917, +12080=>1918, +24049=>1918, +24235=>1919, +24359=>1920, +12094=>1921, +25144=>1921, +25925=>1922, +26543=>1923, +28246=>1924, +29392=>1925, +31946=>1926, +34996=>1927, +32929=>1928, +32993=>1929, +33776=>1930, +11969=>1931, +34382=>1931, +35463=>1932, +36328=>1933, +37431=>1934, +38599=>1935, +39015=>1936, +12238=>1937, +40723=>1937, +20116=>1938, +20114=>1939, +20237=>1940, +21320=>1941, +21577=>1942, +21566=>1943, +23087=>1944, +24460=>1945, +24481=>1946, +24735=>1947, +26791=>1948, +27278=>1949, +29786=>1950, +30849=>1951, +35486=>1952, +35492=>1953, +35703=>1954, +37264=>1955, +20062=>1956, +39881=>1957, +20132=>1958, +20348=>1959, +20399=>1960, +20505=>1961, +20502=>1962, +20809=>1963, +20844=>1964, +21151=>1965, +21177=>1966, +21246=>1967, +21402=>1968, +12061=>1969, +21475=>1969, +21521=>1970, +21518=>1971, +21897=>1972, +22353=>1973, +22434=>1974, +22909=>1975, +23380=>1976, +23389=>1977, +23439=>1978, +12079=>1979, +24037=>1979, +24039=>1980, +24055=>1981, +24184=>1982, +24195=>1983, +24218=>1984, +24247=>1985, +24344=>1986, +24658=>1987, +24908=>1988, +25239=>1989, +25304=>1990, +25511=>1991, +25915=>1992, +26114=>1993, +26179=>1994, +26356=>1995, +26477=>1996, +26657=>1997, +26775=>1998, +27083=>1999, +27743=>2000, +27946=>2001, +28009=>2002, +28207=>2003, +28317=>2004, +30002=>2005, +30343=>2006, +30828=>2007, +31295=>2008, +31968=>2009, +32005=>2010, +32024=>2011, +32094=>2012, +32177=>2013, +32789=>2014, +32771=>2015, +32943=>2016, +32945=>2017, +33108=>2018, +33167=>2019, +33322=>2020, +33618=>2021, +12175=>2022, +34892=>2022, +34913=>2023, +35611=>2024, +36002=>2025, +36092=>2026, +37066=>2027, +37237=>2028, +37489=>2029, +30783=>2030, +37628=>2031, +38308=>2032, +38477=>2033, +38917=>2034, +12217=>2035, +39321=>2035, +12220=>2036, +39640=>2036, +40251=>2037, +21083=>2038, +21163=>2039, +21495=>2040, +21512=>2041, +22741=>2042, +25335=>2043, +28640=>2044, +35946=>2045, +36703=>2046, +40633=>2047, +20811=>2048, +21051=>2049, +21578=>2050, +22269=>2051, +31296=>2052, +37239=>2053, +40288=>2054, +12234=>2055, +40658=>2055, +29508=>2056, +28425=>2057, +33136=>2058, +29969=>2059, +24573=>2060, +24794=>2061, +12219=>2062, +39592=>2062, +29403=>2063, +36796=>2064, +27492=>2065, +38915=>2066, +20170=>2067, +22256=>2068, +22372=>2069, +22718=>2070, +23130=>2071, +24680=>2072, +25031=>2073, +26127=>2074, +26118=>2075, +26681=>2076, +26801=>2077, +28151=>2078, +30165=>2079, +32058=>2080, +12169=>2081, +33390=>2081, +39746=>2082, +20123=>2083, +20304=>2084, +21449=>2085, +21766=>2086, +23919=>2087, +24038=>2088, +24046=>2089, +26619=>2090, +27801=>2091, +29811=>2092, +30722=>2093, +35408=>2094, +37782=>2095, +35039=>2096, +22352=>2097, +24231=>2098, +25387=>2099, +20661=>2100, +20652=>2101, +20877=>2102, +26368=>2103, +21705=>2104, +22622=>2105, +22971=>2106, +23472=>2107, +24425=>2108, +25165=>2109, +25505=>2110, +26685=>2111, +27507=>2112, +28168=>2113, +28797=>2114, +37319=>2115, +29312=>2116, +30741=>2117, +30758=>2118, +31085=>2119, +25998=>2120, +32048=>2121, +33756=>2122, +35009=>2123, +36617=>2124, +38555=>2125, +21092=>2126, +22312=>2127, +26448=>2128, +32618=>2129, +36001=>2130, +20916=>2131, +22338=>2132, +38442=>2133, +22586=>2134, +27018=>2135, +32948=>2136, +21682=>2137, +23822=>2138, +22524=>2139, +30869=>2140, +40442=>2141, +20316=>2142, +21066=>2143, +21643=>2144, +25662=>2145, +26152=>2146, +26388=>2147, +26613=>2148, +31364=>2149, +31574=>2150, +32034=>2151, +37679=>2152, +26716=>2153, +39853=>2154, +31545=>2155, +21273=>2156, +20874=>2157, +21047=>2158, +23519=>2159, +25334=>2160, +25774=>2161, +25830=>2162, +26413=>2163, +27578=>2164, +34217=>2165, +38609=>2166, +30352=>2167, +39894=>2168, +25420=>2169, +37638=>2170, +39851=>2171, +12139=>2172, +30399=>2172, +26194=>2173, +19977=>2174, +20632=>2175, +21442=>2176, +12077=>2177, +23665=>2177, +24808=>2178, +25746=>2179, +25955=>2180, +26719=>2181, +29158=>2182, +29642=>2183, +29987=>2184, +31639=>2185, +32386=>2186, +34453=>2187, +35715=>2188, +36059=>2189, +37240=>2190, +39184=>2191, +26028=>2192, +26283=>2193, +27531=>2194, +20181=>2195, +20180=>2196, +20282=>2197, +20351=>2198, +21050=>2199, +21496=>2200, +21490=>2201, +21987=>2202, +22235=>2203, +12064=>2204, +22763=>2204, +22987=>2205, +22985=>2206, +23039=>2207, +12070=>2208, +23376=>2208, +23629=>2209, +24066=>2210, +24107=>2211, +24535=>2212, +24605=>2213, +25351=>2214, +12096=>2215, +25903=>2215, +23388=>2216, +26031=>2217, +26045=>2218, +26088=>2219, +26525=>2220, +12108=>2221, +27490=>2221, +27515=>2222, +12114=>2223, +27663=>2223, +29509=>2224, +31049=>2225, +31169=>2226, +12151=>2227, +31992=>2227, +32025=>2228, +32043=>2229, +32930=>2230, +33026=>2231, +12164=>2232, +33267=>2232, +35222=>2233, +35422=>2234, +35433=>2235, +35430=>2236, +35468=>2237, +35566=>2238, +36039=>2239, +36060=>2240, +38604=>2241, +39164=>2242, +12013=>2243, +27503=>2243, +20107=>2244, +20284=>2245, +20365=>2246, +20816=>2247, +23383=>2248, +23546=>2249, +24904=>2250, +25345=>2251, +26178=>2252, +27425=>2253, +28363=>2254, +27835=>2255, +29246=>2256, +29885=>2257, +30164=>2258, +30913=>2259, +12144=>2260, +31034=>2260, +12157=>2261, +32780=>2261, +12159=>2262, +32819=>2262, +12163=>2263, +33258=>2263, +33940=>2264, +36766=>2265, +27728=>2266, +12229=>2267, +40575=>2267, +24335=>2268, +35672=>2269, +40235=>2270, +31482=>2271, +36600=>2272, +23437=>2273, +38635=>2274, +19971=>2275, +21489=>2276, +22519=>2277, +22833=>2278, +23241=>2279, +23460=>2280, +24713=>2281, +28287=>2282, +28422=>2283, +30142=>2284, +36074=>2285, +23455=>2286, +34048=>2287, +31712=>2288, +20594=>2289, +26612=>2290, +33437=>2291, +23649=>2292, +34122=>2293, +32286=>2294, +33294=>2295, +20889=>2296, +23556=>2297, +25448=>2298, +36198=>2299, +26012=>2300, +29038=>2301, +31038=>2302, +32023=>2303, +32773=>2304, +35613=>2305, +12190=>2306, +36554=>2306, +36974=>2307, +34503=>2308, +37034=>2309, +20511=>2310, +21242=>2311, +23610=>2312, +26451=>2313, +28796=>2314, +29237=>2315, +37196=>2316, +37320=>2317, +37675=>2318, +33509=>2319, +23490=>2320, +24369=>2321, +24825=>2322, +20027=>2323, +21462=>2324, +23432=>2325, +12095=>2326, +25163=>2326, +26417=>2327, +27530=>2328, +29417=>2329, +29664=>2330, +31278=>2331, +33131=>2332, +36259=>2333, +37202=>2334, +12216=>2335, +39318=>2335, +20754=>2336, +21463=>2337, +21610=>2338, +23551=>2339, +25480=>2340, +27193=>2341, +32172=>2342, +38656=>2343, +22234=>2344, +21454=>2345, +21608=>2346, +23447=>2347, +23601=>2348, +24030=>2349, +20462=>2350, +24833=>2351, +25342=>2352, +27954=>2353, +31168=>2354, +31179=>2355, +32066=>2356, +32333=>2357, +32722=>2358, +33261=>2359, +12168=>2360, +33311=>2360, +33936=>2361, +34886=>2362, +35186=>2363, +35728=>2364, +36468=>2365, +36655=>2366, +36913=>2367, +37195=>2368, +37228=>2369, +38598=>2370, +37276=>2371, +20160=>2372, +20303=>2373, +20805=>2374, +12055=>2375, +21313=>2375, +24467=>2376, +25102=>2377, +26580=>2378, +27713=>2379, +28171=>2380, +29539=>2381, +32294=>2382, +37325=>2383, +37507=>2384, +21460=>2385, +22809=>2386, +23487=>2387, +28113=>2388, +31069=>2389, +32302=>2390, +31899=>2391, +22654=>2392, +29087=>2393, +20986=>2394, +34899=>2395, +36848=>2396, +20426=>2397, +23803=>2398, +26149=>2399, +30636=>2400, +31459=>2401, +33308=>2402, +39423=>2403, +20934=>2404, +24490=>2405, +26092=>2406, +26991=>2407, +27529=>2408, +28147=>2409, +28310=>2410, +28516=>2411, +30462=>2412, +32020=>2413, +24033=>2414, +36981=>2415, +37255=>2416, +38918=>2417, +20966=>2418, +21021=>2419, +25152=>2420, +26257=>2421, +26329=>2422, +28186=>2423, +24246=>2424, +32210=>2425, +32626=>2426, +26360=>2427, +34223=>2428, +34295=>2429, +35576=>2430, +21161=>2431, +21465=>2432, +12069=>2433, +22899=>2433, +24207=>2434, +24464=>2435, +24661=>2436, +37604=>2437, +38500=>2438, +20663=>2439, +20767=>2440, +21213=>2441, +21280=>2442, +21319=>2443, +21484=>2444, +21736=>2445, +21830=>2446, +21809=>2447, +22039=>2448, +22888=>2449, +22974=>2450, +23100=>2451, +23477=>2452, +23558=>2453, +12073=>2454, +23567=>2454, +23569=>2455, +23578=>2456, +24196=>2457, +24202=>2458, +24288=>2459, +24432=>2460, +25215=>2461, +25220=>2462, +25307=>2463, +25484=>2464, +25463=>2465, +26119=>2466, +26124=>2467, +26157=>2468, +26230=>2469, +26494=>2470, +26786=>2471, +27167=>2472, +27189=>2473, +27836=>2474, +28040=>2475, +28169=>2476, +28248=>2477, +28988=>2478, +28966=>2479, +29031=>2480, +30151=>2481, +30465=>2482, +30813=>2483, +30977=>2484, +31077=>2485, +31216=>2486, +31456=>2487, +31505=>2488, +31911=>2489, +32057=>2490, +32918=>2491, +33750=>2492, +33931=>2493, +34121=>2494, +34909=>2495, +35059=>2496, +35359=>2497, +35388=>2498, +35412=>2499, +35443=>2500, +35937=>2501, +36062=>2502, +37284=>2503, +37478=>2504, +37758=>2505, +37912=>2506, +38556=>2507, +38808=>2508, +19978=>2509, +19976=>2510, +19998=>2511, +20055=>2512, +20887=>2513, +21104=>2514, +22478=>2515, +22580=>2516, +22732=>2517, +23330=>2518, +24120=>2519, +24773=>2520, +25854=>2521, +26465=>2522, +26454=>2523, +27972=>2524, +29366=>2525, +30067=>2526, +31331=>2527, +33976=>2528, +35698=>2529, +37304=>2530, +37664=>2531, +22065=>2532, +22516=>2533, +39166=>2534, +25325=>2535, +26893=>2536, +27542=>2537, +29165=>2538, +32340=>2539, +32887=>2540, +12170=>2541, +33394=>2541, +35302=>2542, +12215=>2543, +39135=>2543, +34645=>2544, +36785=>2545, +23611=>2546, +20280=>2547, +20449=>2548, +20405=>2549, +21767=>2550, +23072=>2551, +23517=>2552, +23529=>2553, +12092=>2554, +24515=>2554, +24910=>2555, +25391=>2556, +26032=>2557, +26187=>2558, +26862=>2559, +27035=>2560, +28024=>2561, +28145=>2562, +30003=>2563, +30137=>2564, +30495=>2565, +31070=>2566, +31206=>2567, +32051=>2568, +12162=>2569, +33251=>2569, +33455=>2570, +34218=>2571, +35242=>2572, +35386=>2573, +12189=>2574, +36523=>2574, +12191=>2575, +36763=>2575, +36914=>2576, +37341=>2577, +38663=>2578, +12040=>2579, +20154=>2579, +20161=>2580, +20995=>2581, +22645=>2582, +22764=>2583, +23563=>2584, +29978=>2585, +23613=>2586, +33102=>2587, +35338=>2588, +36805=>2589, +38499=>2590, +38765=>2591, +31525=>2592, +35535=>2593, +38920=>2594, +37218=>2595, +22259=>2596, +21416=>2597, +36887=>2598, +21561=>2599, +22402=>2600, +24101=>2601, +25512=>2602, +12116=>2603, +27700=>2603, +28810=>2604, +30561=>2605, +31883=>2606, +32736=>2607, +34928=>2608, +36930=>2609, +37204=>2610, +37648=>2611, +37656=>2612, +38543=>2613, +29790=>2614, +39620=>2615, +23815=>2616, +23913=>2617, +25968=>2618, +26530=>2619, +36264=>2620, +38619=>2621, +25454=>2622, +26441=>2623, +26905=>2624, +33733=>2625, +38935=>2626, +38592=>2627, +35070=>2628, +28548=>2629, +25722=>2630, +12072=>2631, +23544=>2631, +19990=>2632, +28716=>2633, +30045=>2634, +26159=>2635, +20932=>2636, +21046=>2637, +21218=>2638, +22995=>2639, +24449=>2640, +24615=>2641, +25104=>2642, +25919=>2643, +25972=>2644, +26143=>2645, +26228=>2646, +26866=>2647, +26646=>2648, +27491=>2649, +28165=>2650, +29298=>2651, +12131=>2652, +29983=>2652, +30427=>2653, +31934=>2654, +32854=>2655, +22768=>2656, +35069=>2657, +11972=>2658, +35199=>2658, +35488=>2659, +35475=>2660, +35531=>2661, +36893=>2662, +37266=>2663, +11992=>2664, +38738=>2664, +38745=>2665, +12011=>2666, +25993=>2666, +31246=>2667, +33030=>2668, +38587=>2669, +24109=>2670, +24796=>2671, +25114=>2672, +26021=>2673, +26132=>2674, +26512=>2675, +12143=>2676, +30707=>2676, +31309=>2677, +31821=>2678, +32318=>2679, +33034=>2680, +36012=>2681, +12186=>2682, +36196=>2682, +36321=>2683, +36447=>2684, +30889=>2685, +20999=>2686, +25305=>2687, +25509=>2688, +25666=>2689, +25240=>2690, +35373=>2691, +31363=>2692, +31680=>2693, +35500=>2694, +38634=>2695, +32118=>2696, +12166=>2697, +33292=>2697, +34633=>2698, +20185=>2699, +20808=>2700, +21315=>2701, +21344=>2702, +23459=>2703, +23554=>2704, +23574=>2705, +24029=>2706, +25126=>2707, +25159=>2708, +25776=>2709, +26643=>2710, +26676=>2711, +27849=>2712, +27973=>2713, +27927=>2714, +26579=>2715, +28508=>2716, +29006=>2717, +29053=>2718, +26059=>2719, +31359=>2720, +31661=>2721, +32218=>2722, +32330=>2723, +32680=>2724, +33146=>2725, +12167=>2726, +33307=>2726, +33337=>2727, +34214=>2728, +35438=>2729, +36046=>2730, +36341=>2731, +36984=>2732, +36983=>2733, +37549=>2734, +37521=>2735, +38275=>2736, +39854=>2737, +21069=>2738, +21892=>2739, +28472=>2740, +28982=>2741, +20840=>2742, +31109=>2743, +32341=>2744, +33203=>2745, +31950=>2746, +22092=>2747, +22609=>2748, +23720=>2749, +25514=>2750, +26366=>2751, +26365=>2752, +26970=>2753, +29401=>2754, +30095=>2755, +30094=>2756, +30990=>2757, +31062=>2758, +31199=>2759, +31895=>2760, +32032=>2761, +32068=>2762, +34311=>2763, +35380=>2764, +38459=>2765, +36961=>2766, +12239=>2767, +40736=>2767, +20711=>2768, +21109=>2769, +21452=>2770, +21474=>2771, +20489=>2772, +21930=>2773, +22766=>2774, +22863=>2775, +29245=>2776, +23435=>2777, +23652=>2778, +21277=>2779, +24803=>2780, +24819=>2781, +25436=>2782, +25475=>2783, +25407=>2784, +25531=>2785, +25805=>2786, +26089=>2787, +26361=>2788, +24035=>2789, +27085=>2790, +27133=>2791, +28437=>2792, +29157=>2793, +20105=>2794, +30185=>2795, +30456=>2796, +31379=>2797, +31967=>2798, +32207=>2799, +32156=>2800, +32865=>2801, +33609=>2802, +33624=>2803, +33900=>2804, +33980=>2805, +34299=>2806, +35013=>2807, +12187=>2808, +36208=>2808, +36865=>2809, +36973=>2810, +37783=>2811, +38684=>2812, +39442=>2813, +20687=>2814, +22679=>2815, +24974=>2816, +33235=>2817, +34101=>2818, +36104=>2819, +36896=>2820, +20419=>2821, +20596=>2822, +21063=>2823, +21363=>2824, +24687=>2825, +25417=>2826, +26463=>2827, +28204=>2828, +12188=>2829, +36275=>2829, +36895=>2830, +20439=>2831, +23646=>2832, +36042=>2833, +26063=>2834, +32154=>2835, +21330=>2836, +34966=>2837, +20854=>2838, +25539=>2839, +23384=>2840, +23403=>2841, +23562=>2842, +25613=>2843, +26449=>2844, +36956=>2845, +20182=>2846, +22810=>2847, +22826=>2848, +27760=>2849, +35409=>2850, +21822=>2851, +22549=>2852, +22949=>2853, +24816=>2854, +25171=>2855, +26561=>2856, +33333=>2857, +26965=>2858, +38464=>2859, +39364=>2860, +39464=>2861, +20307=>2862, +22534=>2863, +23550=>2864, +32784=>2865, +23729=>2866, +24111=>2867, +24453=>2868, +24608=>2869, +24907=>2870, +25140=>2871, +26367=>2872, +27888=>2873, +28382=>2874, +32974=>2875, +33151=>2876, +33492=>2877, +34955=>2878, +36024=>2879, +36864=>2880, +36910=>2881, +38538=>2882, +40667=>2883, +39899=>2884, +20195=>2885, +21488=>2886, +12068=>2887, +22823=>2887, +31532=>2888, +37261=>2889, +38988=>2890, +40441=>2891, +28381=>2892, +28711=>2893, +21331=>2894, +21828=>2895, +23429=>2896, +25176=>2897, +25246=>2898, +25299=>2899, +27810=>2900, +28655=>2901, +29730=>2902, +35351=>2903, +37944=>2904, +28609=>2905, +35582=>2906, +33592=>2907, +20967=>2908, +34552=>2909, +21482=>2910, +21481=>2911, +20294=>2912, +36948=>2913, +12192=>2914, +36784=>2914, +22890=>2915, +33073=>2916, +24061=>2917, +31466=>2918, +36799=>2919, +26842=>2920, +12181=>2921, +35895=>2921, +29432=>2922, +40008=>2923, +27197=>2924, +35504=>2925, +20025=>2926, +21336=>2927, +22022=>2928, +22374=>2929, +25285=>2930, +25506=>2931, +26086=>2932, +27470=>2933, +28129=>2934, +28251=>2935, +28845=>2936, +30701=>2937, +31471=>2938, +31658=>2939, +32187=>2940, +32829=>2941, +32966=>2942, +34507=>2943, +35477=>2944, +37723=>2945, +22243=>2946, +22727=>2947, +24382=>2948, +26029=>2949, +26262=>2950, +27264=>2951, +27573=>2952, +30007=>2953, +35527=>2954, +20516=>2955, +30693=>2956, +22320=>2957, +24347=>2958, +24677=>2959, +26234=>2960, +27744=>2961, +30196=>2962, +31258=>2963, +32622=>2964, +33268=>2965, +34584=>2966, +36933=>2967, +39347=>2968, +31689=>2969, +30044=>2970, +12149=>2971, +31481=>2971, +31569=>2972, +33988=>2973, +36880=>2974, +31209=>2975, +31378=>2976, +33590=>2977, +23265=>2978, +30528=>2979, +20013=>2980, +20210=>2981, +23449=>2982, +24544=>2983, +25277=>2984, +26172=>2985, +26609=>2986, +27880=>2987, +12173=>2988, +34411=>2988, +34935=>2989, +35387=>2990, +37198=>2991, +37619=>2992, +39376=>2993, +27159=>2994, +28710=>2995, +29482=>2996, +33511=>2997, +33879=>2998, +36015=>2999, +19969=>3000, +20806=>3001, +20939=>3002, +21899=>3003, +23541=>3004, +24086=>3005, +24115=>3006, +24193=>3007, +24340=>3008, +24373=>3009, +24427=>3010, +24500=>3011, +25074=>3012, +25361=>3013, +26274=>3014, +26397=>3015, +28526=>3016, +29266=>3017, +30010=>3018, +30522=>3019, +32884=>3020, +33081=>3021, +33144=>3022, +34678=>3023, +35519=>3024, +35548=>3025, +36229=>3026, +36339=>3027, +37530=>3028, +11985=>3029, +12199=>3029, +38263=>3029, +38914=>3030, +12227=>3031, +40165=>3031, +21189=>3032, +25431=>3033, +30452=>3034, +26389=>3035, +27784=>3036, +29645=>3037, +36035=>3038, +37806=>3039, +38515=>3040, +27941=>3041, +22684=>3042, +26894=>3043, +27084=>3044, +36861=>3045, +37786=>3046, +30171=>3047, +36890=>3048, +22618=>3049, +26626=>3050, +25524=>3051, +27131=>3052, +20291=>3053, +28460=>3054, +26584=>3055, +36795=>3056, +34086=>3057, +32180=>3058, +37716=>3059, +26943=>3060, +28528=>3061, +22378=>3062, +22775=>3063, +23340=>3064, +32044=>3065, +12118=>3066, +29226=>3066, +21514=>3067, +37347=>3068, +40372=>3069, +20141=>3070, +20302=>3071, +20572=>3072, +20597=>3073, +21059=>3074, +35998=>3075, +21576=>3076, +22564=>3077, +23450=>3078, +24093=>3079, +24213=>3080, +24237=>3081, +24311=>3082, +24351=>3083, +24716=>3084, +25269=>3085, +25402=>3086, +25552=>3087, +26799=>3088, +27712=>3089, +30855=>3090, +31118=>3091, +31243=>3092, +32224=>3093, +33351=>3094, +35330=>3095, +35558=>3096, +36420=>3097, +36883=>3098, +37048=>3099, +37165=>3100, +37336=>3101, +12237=>3102, +40718=>3102, +27877=>3103, +25688=>3104, +25826=>3105, +25973=>3106, +28404=>3107, +30340=>3108, +31515=>3109, +36969=>3110, +37841=>3111, +28346=>3112, +21746=>3113, +24505=>3114, +25764=>3115, +36685=>3116, +36845=>3117, +37444=>3118, +20856=>3119, +22635=>3120, +22825=>3121, +23637=>3122, +24215=>3123, +28155=>3124, +32399=>3125, +29980=>3126, +36028=>3127, +36578=>3128, +39003=>3129, +28857=>3130, +20253=>3131, +27583=>3132, +28593=>3133, +12133=>3134, +30000=>3134, +38651=>3135, +20814=>3136, +21520=>3137, +22581=>3138, +22615=>3139, +22956=>3140, +23648=>3141, +24466=>3142, +12099=>3143, +26007=>3143, +26460=>3144, +28193=>3145, +30331=>3146, +33759=>3147, +36077=>3148, +36884=>3149, +37117=>3150, +37709=>3151, +30757=>3152, +30778=>3153, +21162=>3154, +24230=>3155, +12063=>3156, +22303=>3156, +22900=>3157, +24594=>3158, +20498=>3159, +20826=>3160, +20908=>3161, +20941=>3162, +12049=>3163, +20992=>3163, +21776=>3164, +22612=>3165, +22616=>3166, +22871=>3167, +23445=>3168, +23798=>3169, +23947=>3170, +24764=>3171, +25237=>3172, +25645=>3173, +26481=>3174, +26691=>3175, +26812=>3176, +26847=>3177, +30423=>3178, +28120=>3179, +28271=>3180, +28059=>3181, +28783=>3182, +29128=>3183, +24403=>3184, +30168=>3185, +31095=>3186, +31561=>3187, +31572=>3188, +31570=>3189, +31958=>3190, +32113=>3191, +21040=>3192, +33891=>3193, +34153=>3194, +34276=>3195, +35342=>3196, +35588=>3197, +12182=>3198, +35910=>3198, +36367=>3199, +36867=>3200, +36879=>3201, +37913=>3202, +38518=>3203, +38957=>3204, +39472=>3205, +38360=>3206, +20685=>3207, +21205=>3208, +21516=>3209, +22530=>3210, +23566=>3211, +24999=>3212, +25758=>3213, +27934=>3214, +30643=>3215, +31461=>3216, +33012=>3217, +33796=>3218, +36947=>3219, +37509=>3220, +23776=>3221, +40199=>3222, +21311=>3223, +24471=>3224, +24499=>3225, +28060=>3226, +29305=>3227, +30563=>3228, +31167=>3229, +31716=>3230, +27602=>3231, +29420=>3232, +35501=>3233, +26627=>3234, +27233=>3235, +20984=>3236, +31361=>3237, +26932=>3238, +23626=>3239, +40182=>3240, +33515=>3241, +23493=>3242, +12195=>3243, +37193=>3243, +28702=>3244, +22136=>3245, +23663=>3246, +24775=>3247, +25958=>3248, +27788=>3249, +35930=>3250, +36929=>3251, +38931=>3252, +21585=>3253, +26311=>3254, +37389=>3255, +22856=>3256, +37027=>3257, +20869=>3258, +20045=>3259, +20970=>3260, +34201=>3261, +35598=>3262, +28760=>3263, +25466=>3264, +37707=>3265, +26978=>3266, +39348=>3267, +32260=>3268, +30071=>3269, +21335=>3270, +26976=>3271, +36575=>3272, +38627=>3273, +27741=>3274, +12038=>3275, +20108=>3275, +23612=>3276, +24336=>3277, +36841=>3278, +21250=>3279, +36049=>3280, +12161=>3281, +32905=>3281, +34425=>3282, +24319=>3283, +12103=>3284, +26085=>3284, +20083=>3285, +12042=>3286, +20837=>3286, +22914=>3287, +23615=>3288, +38894=>3289, +20219=>3290, +22922=>3291, +24525=>3292, +35469=>3293, +28641=>3294, +31152=>3295, +31074=>3296, +23527=>3297, +33905=>3298, +29483=>3299, +29105=>3300, +24180=>3301, +24565=>3302, +25467=>3303, +25754=>3304, +29123=>3305, +31896=>3306, +20035=>3307, +24316=>3308, +20043=>3309, +22492=>3310, +22178=>3311, +24745=>3312, +28611=>3313, +32013=>3314, +33021=>3315, +33075=>3316, +33215=>3317, +36786=>3318, +35223=>3319, +34468=>3320, +24052=>3321, +25226=>3322, +25773=>3323, +35207=>3324, +26487=>3325, +27874=>3326, +27966=>3327, +29750=>3328, +30772=>3329, +23110=>3330, +32629=>3331, +33453=>3332, +12218=>3333, +39340=>3333, +20467=>3334, +24259=>3335, +25309=>3336, +25490=>3337, +25943=>3338, +26479=>3339, +30403=>3340, +29260=>3341, +32972=>3342, +32954=>3343, +36649=>3344, +37197=>3345, +20493=>3346, +22521=>3347, +23186=>3348, +26757=>3349, +26995=>3350, +29028=>3351, +29437=>3352, +36023=>3353, +22770=>3354, +36064=>3355, +38506=>3356, +36889=>3357, +34687=>3358, +31204=>3359, +30695=>3360, +33833=>3361, +20271=>3362, +21093=>3363, +21338=>3364, +25293=>3365, +26575=>3366, +27850=>3367, +12137=>3368, +30333=>3368, +31636=>3369, +31893=>3370, +33334=>3371, +34180=>3372, +36843=>3373, +26333=>3374, +28448=>3375, +29190=>3376, +32283=>3377, +33707=>3378, +39361=>3379, +12008=>3380, +40614=>3380, +20989=>3381, +31665=>3382, +30834=>3383, +31672=>3384, +32903=>3385, +31560=>3386, +27368=>3387, +24161=>3388, +32908=>3389, +30033=>3390, +30048=>3391, +12043=>3392, +20843=>3392, +37474=>3393, +28300=>3394, +30330=>3395, +37271=>3396, +39658=>3397, +20240=>3398, +32624=>3399, +25244=>3400, +31567=>3401, +38309=>3402, +40169=>3403, +22138=>3404, +22617=>3405, +34532=>3406, +38588=>3407, +20276=>3408, +21028=>3409, +21322=>3410, +21453=>3411, +21467=>3412, +24070=>3413, +25644=>3414, +26001=>3415, +26495=>3416, +27710=>3417, +27726=>3418, +29256=>3419, +29359=>3420, +29677=>3421, +30036=>3422, +32321=>3423, +33324=>3424, +34281=>3425, +36009=>3426, +31684=>3427, +12196=>3428, +37318=>3428, +29033=>3429, +38930=>3430, +39151=>3431, +25405=>3432, +26217=>3433, +30058=>3434, +30436=>3435, +30928=>3436, +34115=>3437, +34542=>3438, +21290=>3439, +21329=>3440, +21542=>3441, +22915=>3442, +24199=>3443, +24444=>3444, +24754=>3445, +25161=>3446, +25209=>3447, +25259=>3448, +26000=>3449, +12112=>3450, +27604=>3450, +27852=>3451, +30130=>3452, +12138=>3453, +30382=>3453, +30865=>3454, +31192=>3455, +32203=>3456, +32631=>3457, +32933=>3458, +34987=>3459, +35513=>3460, +36027=>3461, +36991=>3462, +12206=>3463, +38750=>3463, +12214=>3464, +39131=>3464, +27147=>3465, +31800=>3466, +20633=>3467, +23614=>3468, +24494=>3469, +26503=>3470, +27608=>3471, +29749=>3472, +30473=>3473, +32654=>3474, +12240=>3475, +40763=>3475, +26570=>3476, +31255=>3477, +21305=>3478, +12134=>3479, +30091=>3479, +39661=>3480, +24422=>3481, +33181=>3482, +33777=>3483, +32920=>3484, +24380=>3485, +24517=>3486, +30050=>3487, +31558=>3488, +36924=>3489, +26727=>3490, +23019=>3491, +23195=>3492, +32016=>3493, +30334=>3494, +35628=>3495, +20469=>3496, +24426=>3497, +27161=>3498, +27703=>3499, +28418=>3500, +29922=>3501, +31080=>3502, +34920=>3503, +35413=>3504, +35961=>3505, +24287=>3506, +25551=>3507, +30149=>3508, +31186=>3509, +33495=>3510, +37672=>3511, +37618=>3512, +33948=>3513, +34541=>3514, +39981=>3515, +21697=>3516, +24428=>3517, +25996=>3518, +27996=>3519, +28693=>3520, +36007=>3521, +36051=>3522, +38971=>3523, +25935=>3524, +29942=>3525, +19981=>3526, +20184=>3527, +22496=>3528, +22827=>3529, +23142=>3530, +23500=>3531, +20904=>3532, +24067=>3533, +24220=>3534, +24598=>3535, +25206=>3536, +25975=>3537, +26023=>3538, +26222=>3539, +28014=>3540, +12119=>3541, +29238=>3541, +31526=>3542, +33104=>3543, +33178=>3544, +33433=>3545, +35676=>3546, +36000=>3547, +36070=>3548, +36212=>3549, +12201=>3550, +38428=>3550, +38468=>3551, +20398=>3552, +25771=>3553, +27494=>3554, +33310=>3555, +33889=>3556, +34154=>3557, +37096=>3558, +23553=>3559, +26963=>3560, +12213=>3561, +39080=>3561, +33914=>3562, +34135=>3563, +20239=>3564, +21103=>3565, +24489=>3566, +24133=>3567, +26381=>3568, +31119=>3569, +33145=>3570, +35079=>3571, +35206=>3572, +28149=>3573, +24343=>3574, +25173=>3575, +27832=>3576, +20175=>3577, +29289=>3578, +39826=>3579, +20998=>3580, +21563=>3581, +22132=>3582, +22707=>3583, +24996=>3584, +25198=>3585, +28954=>3586, +22894=>3587, +31881=>3588, +31966=>3589, +32027=>3590, +38640=>3591, +12098=>3592, +25991=>3592, +32862=>3593, +19993=>3594, +20341=>3595, +20853=>3596, +22592=>3597, +24163=>3598, +24179=>3599, +24330=>3600, +26564=>3601, +20006=>3602, +34109=>3603, +38281=>3604, +38491=>3605, +12150=>3606, +31859=>3606, +12212=>3607, +38913=>3607, +20731=>3608, +22721=>3609, +30294=>3610, +30887=>3611, +21029=>3612, +30629=>3613, +34065=>3614, +31622=>3615, +20559=>3616, +22793=>3617, +12122=>3618, +29255=>3618, +31687=>3619, +32232=>3620, +36794=>3621, +36820=>3622, +36941=>3623, +20415=>3624, +21193=>3625, +23081=>3626, +24321=>3627, +38829=>3628, +20445=>3629, +33303=>3630, +37610=>3631, +22275=>3632, +25429=>3633, +27497=>3634, +29995=>3635, +35036=>3636, +36628=>3637, +31298=>3638, +21215=>3639, +22675=>3640, +24917=>3641, +25098=>3642, +26286=>3643, +11935=>3644, +27597=>3644, +31807=>3645, +33769=>3646, +20515=>3647, +20472=>3648, +21253=>3649, +21574=>3650, +22577=>3651, +22857=>3652, +23453=>3653, +23792=>3654, +23791=>3655, +23849=>3656, +24214=>3657, +25265=>3658, +25447=>3659, +25918=>3660, +12101=>3661, +26041=>3661, +26379=>3662, +27861=>3663, +27873=>3664, +28921=>3665, +30770=>3666, +32299=>3667, +32990=>3668, +33459=>3669, +33804=>3670, +34028=>3671, +34562=>3672, +35090=>3673, +35370=>3674, +35914=>3675, +37030=>3676, +37586=>3677, +39165=>3678, +40179=>3679, +40300=>3680, +20047=>3681, +20129=>3682, +20621=>3683, +21078=>3684, +22346=>3685, +22952=>3686, +24125=>3687, +24536=>3688, +24537=>3689, +25151=>3690, +26292=>3691, +26395=>3692, +26576=>3693, +26834=>3694, +20882=>3695, +32033=>3696, +32938=>3697, +33192=>3698, +35584=>3699, +35980=>3700, +36031=>3701, +37502=>3702, +38450=>3703, +21536=>3704, +38956=>3705, +21271=>3706, +20693=>3707, +12056=>3708, +21340=>3708, +22696=>3709, +25778=>3710, +26420=>3711, +29287=>3712, +30566=>3713, +31302=>3714, +37350=>3715, +21187=>3716, +27809=>3717, +27526=>3718, +22528=>3719, +24140=>3720, +22868=>3721, +26412=>3722, +32763=>3723, +20961=>3724, +30406=>3725, +25705=>3726, +30952=>3727, +39764=>3728, +12231=>3729, +40635=>3729, +22475=>3730, +22969=>3731, +26151=>3732, +26522=>3733, +27598=>3734, +21737=>3735, +27097=>3736, +24149=>3737, +33180=>3738, +26517=>3739, +39850=>3740, +26622=>3741, +40018=>3742, +26717=>3743, +20134=>3744, +20451=>3745, +12060=>3746, +21448=>3746, +25273=>3747, +26411=>3748, +27819=>3749, +36804=>3750, +20397=>3751, +32365=>3752, +40639=>3753, +19975=>3754, +24930=>3755, +28288=>3756, +28459=>3757, +34067=>3758, +21619=>3759, +26410=>3760, +39749=>3761, +11922=>3762, +24051=>3762, +31637=>3763, +23724=>3764, +23494=>3765, +34588=>3766, +28234=>3767, +34001=>3768, +31252=>3769, +33032=>3770, +22937=>3771, +31885=>3772, +11936=>3773, +27665=>3773, +30496=>3774, +21209=>3775, +22818=>3776, +28961=>3777, +29279=>3778, +12141=>3779, +30683=>3779, +38695=>3780, +40289=>3781, +26891=>3782, +23167=>3783, +23064=>3784, +20901=>3785, +21517=>3786, +21629=>3787, +26126=>3788, +30431=>3789, +36855=>3790, +37528=>3791, +40180=>3792, +23018=>3793, +29277=>3794, +28357=>3795, +20813=>3796, +26825=>3797, +32191=>3798, +32236=>3799, +12207=>3800, +38754=>3800, +40634=>3801, +25720=>3802, +27169=>3803, +33538=>3804, +22916=>3805, +23391=>3806, +12113=>3807, +27611=>3807, +29467=>3808, +30450=>3809, +32178=>3810, +32791=>3811, +33945=>3812, +20786=>3813, +12106=>3814, +26408=>3814, +40665=>3815, +12140=>3816, +30446=>3816, +26466=>3817, +21247=>3818, +39173=>3819, +23588=>3820, +25147=>3821, +31870=>3822, +36016=>3823, +21839=>3824, +24758=>3825, +32011=>3826, +12200=>3827, +38272=>3827, +21249=>3828, +20063=>3829, +20918=>3830, +22812=>3831, +29242=>3832, +32822=>3833, +37326=>3834, +24357=>3835, +12142=>3836, +30690=>3836, +21380=>3837, +24441=>3838, +32004=>3839, +34220=>3840, +35379=>3841, +36493=>3842, +38742=>3843, +26611=>3844, +34222=>3845, +37971=>3846, +24841=>3847, +24840=>3848, +27833=>3849, +30290=>3850, +35565=>3851, +36664=>3852, +21807=>3853, +20305=>3854, +20778=>3855, +21191=>3856, +21451=>3857, +23461=>3858, +24189=>3859, +24736=>3860, +24962=>3861, +25558=>3862, +26377=>3863, +26586=>3864, +28263=>3865, +28044=>3866, +29494=>3867, +29495=>3868, +30001=>3869, +31056=>3870, +35029=>3871, +35480=>3872, +36938=>3873, +12194=>3874, +37009=>3874, +37109=>3875, +38596=>3876, +34701=>3877, +12067=>3878, +22805=>3878, +20104=>3879, +20313=>3880, +19982=>3881, +35465=>3882, +36671=>3883, +38928=>3884, +20653=>3885, +24188=>3886, +22934=>3887, +23481=>3888, +24248=>3889, +25562=>3890, +25594=>3891, +25793=>3892, +26332=>3893, +26954=>3894, +27096=>3895, +27915=>3896, +28342=>3897, +29076=>3898, +12132=>3899, +29992=>3899, +31407=>3900, +12154=>3901, +32650=>3901, +32768=>3902, +33865=>3903, +33993=>3904, +35201=>3905, +35617=>3906, +36362=>3907, +36965=>3908, +38525=>3909, +39178=>3910, +24958=>3911, +25233=>3912, +27442=>3913, +27779=>3914, +28020=>3915, +32716=>3916, +32764=>3917, +28096=>3918, +32645=>3919, +34746=>3920, +35064=>3921, +26469=>3922, +33713=>3923, +38972=>3924, +38647=>3925, +27931=>3926, +32097=>3927, +33853=>3928, +37226=>3929, +20081=>3930, +21365=>3931, +23888=>3932, +27396=>3933, +28651=>3934, +34253=>3935, +34349=>3936, +35239=>3937, +21033=>3938, +21519=>3939, +23653=>3940, +26446=>3941, +26792=>3942, +29702=>3943, +29827=>3944, +30178=>3945, +35023=>3946, +35041=>3947, +12197=>3948, +37324=>3948, +38626=>3949, +38520=>3950, +24459=>3951, +29575=>3952, +12148=>3953, +31435=>3953, +33870=>3954, +25504=>3955, +30053=>3956, +21129=>3957, +27969=>3958, +28316=>3959, +29705=>3960, +30041=>3961, +30827=>3962, +31890=>3963, +38534=>3964, +12015=>3965, +31452=>3965, +12243=>3966, +40845=>3966, +20406=>3967, +24942=>3968, +26053=>3969, +34396=>3970, +20102=>3971, +20142=>3972, +20698=>3973, +20001=>3974, +20940=>3975, +23534=>3976, +26009=>3977, +26753=>3978, +28092=>3979, +29471=>3980, +30274=>3981, +30637=>3982, +31260=>3983, +31975=>3984, +33391=>3985, +35538=>3986, +36988=>3987, +37327=>3988, +38517=>3989, +38936=>3990, +12050=>3991, +21147=>3991, +32209=>3992, +20523=>3993, +21400=>3994, +26519=>3995, +28107=>3996, +29136=>3997, +29747=>3998, +33256=>3999, +36650=>4000, +38563=>4001, +40023=>4002, +40607=>4003, +29792=>4004, +22593=>4005, +28057=>4006, +32047=>4007, +39006=>4008, +20196=>4009, +20278=>4010, +20363=>4011, +20919=>4012, +21169=>4013, +23994=>4014, +24604=>4015, +29618=>4016, +31036=>4017, +33491=>4018, +37428=>4019, +38583=>4020, +38646=>4021, +38666=>4022, +40599=>4023, +40802=>4024, +26278=>4025, +27508=>4026, +21015=>4027, +21155=>4028, +28872=>4029, +35010=>4030, +24265=>4031, +24651=>4032, +24976=>4033, +28451=>4034, +29001=>4035, +31806=>4036, +32244=>4037, +32879=>4038, +34030=>4039, +36899=>4040, +37676=>4041, +21570=>4042, +39791=>4043, +27347=>4044, +28809=>4045, +36034=>4046, +36335=>4047, +38706=>4048, +21172=>4049, +23105=>4050, +24266=>4051, +24324=>4052, +26391=>4053, +27004=>4054, +27028=>4055, +28010=>4056, +28431=>4057, +29282=>4058, +29436=>4059, +31725=>4060, +12156=>4061, +32769=>4061, +32894=>4062, +34635=>4063, +37070=>4064, +20845=>4065, +40595=>4066, +31108=>4067, +32907=>4068, +37682=>4069, +35542=>4070, +20525=>4071, +21644=>4072, +35441=>4073, +27498=>4074, +36036=>4075, +33031=>4076, +24785=>4077, +26528=>4078, +40434=>4079, +20121=>4080, +20120=>4081, +39952=>4082, +35435=>4083, +34241=>4084, +34152=>4085, +26880=>4086, +28286=>4087, +30871=>4088, +33109=>4089, +24332=>4090, +19984=>4091, +19989=>4092, +20010=>4093, +20017=>4094, +12034=>4095, +20022=>4095, +20028=>4096, +12035=>4097, +20031=>4097, +20034=>4098, +20054=>4099, +20056=>4100, +20098=>4101, +12037=>4102, +20101=>4102, +35947=>4103, +20106=>4104, +33298=>4105, +24333=>4106, +20110=>4107, +20126=>4108, +20127=>4109, +12039=>4110, +20128=>4110, +20130=>4111, +20144=>4112, +20147=>4113, +20150=>4114, +20174=>4115, +20173=>4116, +20164=>4117, +20166=>4118, +20162=>4119, +20183=>4120, +20190=>4121, +20205=>4122, +20191=>4123, +20215=>4124, +20233=>4125, +20314=>4126, +20272=>4127, +20315=>4128, +20317=>4129, +20311=>4130, +20295=>4131, +20342=>4132, +20360=>4133, +20367=>4134, +20376=>4135, +20347=>4136, +20329=>4137, +20336=>4138, +20369=>4139, +20335=>4140, +20358=>4141, +20374=>4142, +20760=>4143, +20436=>4144, +20447=>4145, +20430=>4146, +20440=>4147, +20443=>4148, +20433=>4149, +20442=>4150, +20432=>4151, +20452=>4152, +20453=>4153, +20506=>4154, +20520=>4155, +20500=>4156, +20522=>4157, +20517=>4158, +20485=>4159, +20252=>4160, +20470=>4161, +20513=>4162, +20521=>4163, +20524=>4164, +20478=>4165, +20463=>4166, +20497=>4167, +20486=>4168, +20547=>4169, +20551=>4170, +26371=>4171, +20565=>4172, +20560=>4173, +20552=>4174, +20570=>4175, +20566=>4176, +20588=>4177, +20600=>4178, +20608=>4179, +20634=>4180, +20613=>4181, +20660=>4182, +20658=>4183, +20681=>4184, +20682=>4185, +20659=>4186, +20674=>4187, +20694=>4188, +20702=>4189, +20709=>4190, +20717=>4191, +20707=>4192, +20718=>4193, +20729=>4194, +20725=>4195, +20745=>4196, +20737=>4197, +20738=>4198, +20758=>4199, +20757=>4200, +20756=>4201, +20762=>4202, +20769=>4203, +20794=>4204, +20791=>4205, +20796=>4206, +20795=>4207, +12041=>4208, +20799=>4208, +11918=>4209, +20800=>4209, +20818=>4210, +20812=>4211, +20820=>4212, +20834=>4213, +31480=>4214, +20841=>4215, +20842=>4216, +20846=>4217, +20864=>4218, +12044=>4219, +20866=>4219, +22232=>4220, +20876=>4221, +20873=>4222, +20879=>4223, +20881=>4224, +20883=>4225, +20885=>4226, +12045=>4227, +20886=>4227, +20900=>4228, +20902=>4229, +20898=>4230, +20905=>4231, +20906=>4232, +12046=>4233, +20907=>4233, +20915=>4234, +20913=>4235, +20914=>4236, +20912=>4237, +20917=>4238, +20925=>4239, +20933=>4240, +20937=>4241, +20955=>4242, +12047=>4243, +20960=>4243, +34389=>4244, +20969=>4245, +20973=>4246, +20976=>4247, +12048=>4248, +20981=>4248, +20990=>4249, +20996=>4250, +21003=>4251, +21012=>4252, +21006=>4253, +21031=>4254, +21034=>4255, +21038=>4256, +21043=>4257, +21049=>4258, +21071=>4259, +21060=>4260, +21067=>4261, +21068=>4262, +21086=>4263, +21076=>4264, +21098=>4265, +21108=>4266, +21097=>4267, +21107=>4268, +21119=>4269, +21117=>4270, +21133=>4271, +21140=>4272, +21138=>4273, +21105=>4274, +21128=>4275, +21137=>4276, +36776=>4277, +36775=>4278, +21164=>4279, +21165=>4280, +21180=>4281, +21173=>4282, +21185=>4283, +21197=>4284, +21207=>4285, +21214=>4286, +21219=>4287, +21222=>4288, +39149=>4289, +21216=>4290, +21235=>4291, +21237=>4292, +21240=>4293, +12051=>4294, +21241=>4294, +21254=>4295, +21256=>4296, +30008=>4297, +21261=>4298, +21264=>4299, +21263=>4300, +21269=>4301, +12052=>4301, +21274=>4302, +12053=>4302, +21283=>4303, +21295=>4304, +21297=>4305, +21299=>4306, +12054=>4307, +21304=>4307, +21312=>4308, +21318=>4309, +21317=>4310, +19991=>4311, +21321=>4312, +21325=>4313, +20950=>4314, +21342=>4315, +12057=>4316, +21353=>4316, +21358=>4317, +22808=>4318, +21371=>4319, +21367=>4320, +12058=>4321, +21378=>4321, +21398=>4322, +21408=>4323, +21414=>4324, +21413=>4325, +21422=>4326, +21424=>4327, +12059=>4328, +21430=>4328, +21443=>4329, +31762=>4330, +38617=>4331, +21471=>4332, +26364=>4333, +29166=>4334, +21486=>4335, +21480=>4336, +21485=>4337, +21498=>4338, +21505=>4339, +21565=>4340, +21568=>4341, +21548=>4342, +21549=>4343, +21564=>4344, +21550=>4345, +21558=>4346, +21545=>4347, +21533=>4348, +21582=>4349, +21647=>4350, +21621=>4351, +21646=>4352, +21599=>4353, +21617=>4354, +21623=>4355, +21616=>4356, +21650=>4357, +21627=>4358, +21632=>4359, +21622=>4360, +21636=>4361, +21648=>4362, +21638=>4363, +21703=>4364, +21666=>4365, +21688=>4366, +21669=>4367, +21676=>4368, +21700=>4369, +21704=>4370, +21672=>4371, +21675=>4372, +21698=>4373, +21668=>4374, +21694=>4375, +21692=>4376, +21720=>4377, +21733=>4378, +21734=>4379, +21775=>4380, +21780=>4381, +21757=>4382, +21742=>4383, +21741=>4384, +21754=>4385, +21730=>4386, +21817=>4387, +21824=>4388, +21859=>4389, +21836=>4390, +21806=>4391, +21852=>4392, +21829=>4393, +21846=>4394, +21847=>4395, +21816=>4396, +21811=>4397, +21853=>4398, +21913=>4399, +21888=>4400, +21679=>4401, +21898=>4402, +21919=>4403, +21883=>4404, +21886=>4405, +21912=>4406, +21918=>4407, +21934=>4408, +21884=>4409, +21891=>4410, +21929=>4411, +21895=>4412, +21928=>4413, +21978=>4414, +21957=>4415, +21983=>4416, +21956=>4417, +21980=>4418, +21988=>4419, +21972=>4420, +22036=>4421, +22007=>4422, +22038=>4423, +22014=>4424, +22013=>4425, +22043=>4426, +22009=>4427, +22094=>4428, +22096=>4429, +29151=>4430, +22068=>4431, +22070=>4432, +22066=>4433, +22072=>4434, +22123=>4435, +22116=>4436, +22063=>4437, +22124=>4438, +22122=>4439, +22150=>4440, +22144=>4441, +22154=>4442, +22176=>4443, +22164=>4444, +22159=>4445, +22181=>4446, +22190=>4447, +22198=>4448, +22196=>4449, +22210=>4450, +22204=>4451, +22209=>4452, +22211=>4453, +22208=>4454, +22216=>4455, +22222=>4456, +22225=>4457, +22227=>4458, +12062=>4459, +22231=>4459, +22254=>4460, +22265=>4461, +22272=>4462, +22271=>4463, +22276=>4464, +22281=>4465, +22280=>4466, +22283=>4467, +22285=>4468, +22291=>4469, +22296=>4470, +22294=>4471, +21959=>4472, +22300=>4473, +22310=>4474, +22327=>4475, +22328=>4476, +22350=>4477, +22331=>4478, +22336=>4479, +22351=>4480, +22377=>4481, +22464=>4482, +22408=>4483, +22369=>4484, +22399=>4485, +22409=>4486, +22419=>4487, +22432=>4488, +22451=>4489, +22436=>4490, +22442=>4491, +22448=>4492, +22467=>4493, +22470=>4494, +22484=>4495, +22482=>4496, +22483=>4497, +22538=>4498, +22486=>4499, +22499=>4500, +22539=>4501, +22553=>4502, +22557=>4503, +22642=>4504, +22561=>4505, +22626=>4506, +22603=>4507, +22640=>4508, +27584=>4509, +22610=>4510, +22589=>4511, +22649=>4512, +22661=>4513, +22713=>4514, +22687=>4515, +22699=>4516, +22714=>4517, +22750=>4518, +22715=>4519, +22712=>4520, +22702=>4521, +22725=>4522, +22739=>4523, +22737=>4524, +22743=>4525, +22745=>4526, +22744=>4527, +22757=>4528, +22748=>4529, +22756=>4530, +22751=>4531, +22767=>4532, +22778=>4533, +22777=>4534, +22779=>4535, +22780=>4536, +22781=>4537, +22786=>4538, +12065=>4538, +22794=>4539, +12066=>4539, +22800=>4540, +22811=>4541, +26790=>4542, +22821=>4543, +22828=>4544, +22829=>4545, +22834=>4546, +22840=>4547, +22846=>4548, +31442=>4549, +22869=>4550, +22864=>4551, +22862=>4552, +22874=>4553, +22872=>4554, +22882=>4555, +22880=>4556, +22887=>4557, +22892=>4558, +22889=>4559, +22904=>4560, +22913=>4561, +22941=>4562, +20318=>4563, +20395=>4564, +22947=>4565, +22962=>4566, +22982=>4567, +23016=>4568, +23004=>4569, +22925=>4570, +23001=>4571, +23002=>4572, +23077=>4573, +23071=>4574, +23057=>4575, +23068=>4576, +23049=>4577, +23066=>4578, +23104=>4579, +23148=>4580, +23113=>4581, +23093=>4582, +23094=>4583, +23138=>4584, +23146=>4585, +23194=>4586, +23228=>4587, +23230=>4588, +23243=>4589, +23234=>4590, +23229=>4591, +23267=>4592, +23255=>4593, +23270=>4594, +23273=>4595, +23254=>4596, +23290=>4597, +23291=>4598, +23308=>4599, +23307=>4600, +23318=>4601, +23346=>4602, +23248=>4603, +23338=>4604, +23350=>4605, +23358=>4606, +23363=>4607, +23365=>4608, +23360=>4609, +23377=>4610, +23381=>4611, +23386=>4612, +23387=>4613, +23397=>4614, +23401=>4615, +23408=>4616, +23411=>4617, +23413=>4618, +23416=>4619, +25992=>4620, +23418=>4621, +12071=>4622, +23424=>4622, +23427=>4623, +23462=>4624, +23480=>4625, +23491=>4626, +23495=>4627, +23497=>4628, +23508=>4629, +23504=>4630, +23524=>4631, +23526=>4632, +23522=>4633, +23518=>4634, +23525=>4635, +23531=>4636, +23536=>4637, +23542=>4638, +23539=>4639, +23557=>4640, +23559=>4641, +23560=>4642, +23565=>4643, +23571=>4644, +23584=>4645, +11920=>4646, +12074=>4646, +23586=>4646, +23592=>4647, +12075=>4648, +23608=>4648, +23609=>4649, +23617=>4650, +23622=>4651, +23630=>4652, +23635=>4653, +23632=>4654, +23631=>4655, +23409=>4656, +23660=>4657, +12076=>4658, +23662=>4658, +20066=>4659, +23670=>4660, +23673=>4661, +23692=>4662, +23697=>4663, +23700=>4664, +22939=>4665, +23723=>4666, +23739=>4667, +23734=>4668, +23740=>4669, +23735=>4670, +23749=>4671, +23742=>4672, +23751=>4673, +23769=>4674, +23785=>4675, +23805=>4676, +23802=>4677, +23789=>4678, +23948=>4679, +23786=>4680, +23819=>4681, +23829=>4682, +23831=>4683, +23900=>4684, +23839=>4685, +23835=>4686, +23825=>4687, +23828=>4688, +23842=>4689, +23834=>4690, +23833=>4691, +23832=>4692, +23884=>4693, +23890=>4694, +23886=>4695, +23883=>4696, +23916=>4697, +23923=>4698, +23926=>4699, +23943=>4700, +23940=>4701, +23938=>4702, +23970=>4703, +23965=>4704, +23980=>4705, +23982=>4706, +23997=>4707, +23952=>4708, +23991=>4709, +23996=>4710, +24009=>4711, +24013=>4712, +24019=>4713, +24018=>4714, +24022=>4715, +12078=>4716, +24027=>4716, +24043=>4717, +24050=>4718, +24053=>4719, +24075=>4720, +24090=>4721, +24089=>4722, +24081=>4723, +24091=>4724, +24118=>4725, +24119=>4726, +24132=>4727, +24131=>4728, +24128=>4729, +24142=>4730, +24151=>4731, +24148=>4732, +24159=>4733, +24162=>4734, +24164=>4735, +24135=>4736, +24181=>4737, +24182=>4738, +11923=>4739, +12083=>4739, +24186=>4739, +40636=>4740, +12084=>4741, +24191=>4741, +24224=>4742, +24257=>4743, +24258=>4744, +24264=>4745, +24272=>4746, +24271=>4747, +24278=>4748, +24291=>4749, +24285=>4750, +24282=>4751, +24283=>4752, +24290=>4753, +24289=>4754, +24296=>4755, +24297=>4756, +24300=>4757, +24305=>4758, +24307=>4759, +24304=>4760, +12085=>4761, +24308=>4761, +24312=>4762, +12086=>4763, +24318=>4763, +24323=>4764, +24329=>4765, +24413=>4766, +24412=>4767, +12087=>4768, +24331=>4768, +24337=>4769, +24342=>4770, +24361=>4771, +24365=>4772, +24376=>4773, +24385=>4774, +24392=>4775, +24396=>4776, +24398=>4777, +24367=>4778, +11924=>4779, +24401=>4779, +24406=>4780, +24407=>4781, +24409=>4782, +12090=>4783, +24417=>4783, +24429=>4784, +12091=>4785, +24435=>4785, +24439=>4786, +24451=>4787, +24450=>4788, +24447=>4789, +24458=>4790, +24456=>4791, +24465=>4792, +24455=>4793, +24478=>4794, +24473=>4795, +24472=>4796, +24480=>4797, +24488=>4798, +24493=>4799, +24508=>4800, +24534=>4801, +24571=>4802, +24548=>4803, +24568=>4804, +24561=>4805, +24541=>4806, +24755=>4807, +24575=>4808, +24609=>4809, +24672=>4810, +24601=>4811, +24592=>4812, +24617=>4813, +24590=>4814, +24625=>4815, +24603=>4816, +24597=>4817, +24619=>4818, +24614=>4819, +24591=>4820, +24634=>4821, +24666=>4822, +24641=>4823, +24682=>4824, +24695=>4825, +24671=>4826, +24650=>4827, +24646=>4828, +24653=>4829, +24675=>4830, +24643=>4831, +24676=>4832, +24642=>4833, +24684=>4834, +24683=>4835, +24665=>4836, +24705=>4837, +24717=>4838, +24807=>4839, +24707=>4840, +24730=>4841, +24708=>4842, +24731=>4843, +24726=>4844, +24727=>4845, +24722=>4846, +24743=>4847, +24715=>4848, +24801=>4849, +24760=>4850, +24800=>4851, +24787=>4852, +24756=>4853, +24560=>4854, +24765=>4855, +24774=>4856, +24757=>4857, +24792=>4858, +24909=>4859, +24853=>4860, +24838=>4861, +24822=>4862, +24823=>4863, +24832=>4864, +24820=>4865, +24826=>4866, +24835=>4867, +24865=>4868, +24827=>4869, +24817=>4870, +24845=>4871, +24846=>4872, +24903=>4873, +24894=>4874, +24872=>4875, +24871=>4876, +24906=>4877, +24895=>4878, +24892=>4879, +24876=>4880, +24884=>4881, +24893=>4882, +24898=>4883, +24900=>4884, +24947=>4885, +24951=>4886, +24920=>4887, +24921=>4888, +24922=>4889, +24939=>4890, +24948=>4891, +24943=>4892, +24933=>4893, +24945=>4894, +24927=>4895, +24925=>4896, +24915=>4897, +24949=>4898, +24985=>4899, +24982=>4900, +24967=>4901, +25004=>4902, +24980=>4903, +24986=>4904, +24970=>4905, +24977=>4906, +25003=>4907, +25006=>4908, +25036=>4909, +25034=>4910, +25033=>4911, +25079=>4912, +25032=>4913, +25027=>4914, +25030=>4915, +25018=>4916, +25035=>4917, +32633=>4918, +25037=>4919, +25062=>4920, +25059=>4921, +25078=>4922, +25082=>4923, +25076=>4924, +25087=>4925, +25085=>4926, +25084=>4927, +25086=>4928, +25088=>4929, +12093=>4930, +25096=>4930, +25097=>4931, +25101=>4932, +25100=>4933, +25108=>4934, +25115=>4935, +25118=>4936, +25121=>4937, +25130=>4938, +25134=>4939, +25136=>4940, +25138=>4941, +25139=>4942, +25153=>4943, +25166=>4944, +25182=>4945, +25187=>4946, +25179=>4947, +25184=>4948, +25192=>4949, +25212=>4950, +25218=>4951, +25225=>4952, +25214=>4953, +25234=>4954, +25235=>4955, +25238=>4956, +25300=>4957, +25219=>4958, +25236=>4959, +25303=>4960, +25297=>4961, +25275=>4962, +25295=>4963, +25343=>4964, +25286=>4965, +25812=>4966, +25288=>4967, +25308=>4968, +25292=>4969, +25290=>4970, +25282=>4971, +25287=>4972, +25243=>4973, +25289=>4974, +25356=>4975, +25326=>4976, +25329=>4977, +25383=>4978, +25346=>4979, +25352=>4980, +25327=>4981, +25333=>4982, +25424=>4983, +25406=>4984, +25421=>4985, +25628=>4986, +25423=>4987, +25494=>4988, +25486=>4989, +25472=>4990, +25515=>4991, +25462=>4992, +25507=>4993, +25487=>4994, +25481=>4995, +25503=>4996, +25525=>4997, +25451=>4998, +25449=>4999, +25534=>5000, +25577=>5001, +25536=>5002, +25542=>5003, +25571=>5004, +25545=>5005, +25554=>5006, +25590=>5007, +25540=>5008, +25622=>5009, +25652=>5010, +25606=>5011, +25619=>5012, +25638=>5013, +25654=>5014, +25885=>5015, +25623=>5016, +25640=>5017, +25615=>5018, +25703=>5019, +25711=>5020, +25718=>5021, +25678=>5022, +25898=>5023, +25749=>5024, +25747=>5025, +25765=>5026, +25769=>5027, +25736=>5028, +25788=>5029, +25818=>5030, +25810=>5031, +25797=>5032, +25799=>5033, +25787=>5034, +25816=>5035, +25794=>5036, +25841=>5037, +25831=>5038, +33289=>5039, +25824=>5040, +25825=>5041, +25260=>5042, +25827=>5043, +25839=>5044, +25900=>5045, +25846=>5046, +25844=>5047, +25842=>5048, +25850=>5049, +25856=>5050, +25853=>5051, +25880=>5052, +25884=>5053, +25861=>5054, +25892=>5055, +25891=>5056, +25899=>5057, +12097=>5058, +25908=>5058, +11929=>5059, +25909=>5059, +25911=>5060, +25910=>5061, +25912=>5062, +30027=>5063, +25928=>5064, +25942=>5065, +25941=>5066, +25933=>5067, +25944=>5068, +25950=>5069, +25949=>5070, +25970=>5071, +25976=>5072, +25986=>5073, +25987=>5074, +35722=>5075, +26011=>5076, +26015=>5077, +26027=>5078, +26039=>5079, +26051=>5080, +26054=>5081, +26049=>5082, +26052=>5083, +26060=>5084, +26066=>5085, +26075=>5086, +26073=>5087, +12102=>5088, +26080=>5088, +11931=>5089, +26081=>5089, +26097=>5090, +26482=>5091, +26122=>5092, +26115=>5093, +26107=>5094, +26483=>5095, +26165=>5096, +26166=>5097, +26164=>5098, +26140=>5099, +26191=>5100, +26180=>5101, +26185=>5102, +26177=>5103, +26206=>5104, +26205=>5105, +26212=>5106, +26215=>5107, +26216=>5108, +26207=>5109, +26210=>5110, +26224=>5111, +26243=>5112, +26248=>5113, +26254=>5114, +26249=>5115, +26244=>5116, +26264=>5117, +26269=>5118, +26305=>5119, +26297=>5120, +26313=>5121, +26302=>5122, +26300=>5123, +26308=>5124, +26296=>5125, +26326=>5126, +26330=>5127, +26336=>5128, +26175=>5129, +26342=>5130, +26345=>5131, +12104=>5132, +26352=>5132, +26357=>5133, +26359=>5134, +26383=>5135, +26390=>5136, +26398=>5137, +26406=>5138, +26407=>5139, +38712=>5140, +26414=>5141, +26431=>5142, +26422=>5143, +26433=>5144, +26424=>5145, +26423=>5146, +26438=>5147, +26462=>5148, +26464=>5149, +26457=>5150, +26467=>5151, +26468=>5152, +26505=>5153, +26480=>5154, +26537=>5155, +26492=>5156, +26474=>5157, +26508=>5158, +26507=>5159, +26534=>5160, +26529=>5161, +26501=>5162, +26551=>5163, +26607=>5164, +26548=>5165, +26604=>5166, +26547=>5167, +26601=>5168, +26552=>5169, +26596=>5170, +26590=>5171, +26589=>5172, +26594=>5173, +26606=>5174, +26553=>5175, +26574=>5176, +26566=>5177, +26599=>5178, +27292=>5179, +26654=>5180, +26694=>5181, +26665=>5182, +26688=>5183, +26701=>5184, +26674=>5185, +26702=>5186, +26803=>5187, +26667=>5188, +26713=>5189, +26723=>5190, +26743=>5191, +26751=>5192, +26783=>5193, +26767=>5194, +26797=>5195, +26772=>5196, +26781=>5197, +26779=>5198, +26755=>5199, +27310=>5200, +26809=>5201, +26740=>5202, +26805=>5203, +26784=>5204, +26810=>5205, +26895=>5206, +26765=>5207, +26750=>5208, +26881=>5209, +26826=>5210, +26888=>5211, +26840=>5212, +26914=>5213, +26918=>5214, +26849=>5215, +26892=>5216, +26829=>5217, +26836=>5218, +26855=>5219, +26837=>5220, +26934=>5221, +26898=>5222, +26884=>5223, +26839=>5224, +26851=>5225, +26917=>5226, +26873=>5227, +26848=>5228, +26863=>5229, +26920=>5230, +26922=>5231, +26906=>5232, +26915=>5233, +26913=>5234, +26822=>5235, +27001=>5236, +26999=>5237, +26972=>5238, +27000=>5239, +26987=>5240, +26964=>5241, +27006=>5242, +26990=>5243, +26937=>5244, +26996=>5245, +26941=>5246, +26969=>5247, +26928=>5248, +26977=>5249, +26974=>5250, +26973=>5251, +27009=>5252, +26986=>5253, +27058=>5254, +27054=>5255, +27088=>5256, +27071=>5257, +27073=>5258, +27091=>5259, +27070=>5260, +27086=>5261, +23528=>5262, +27082=>5263, +27101=>5264, +27067=>5265, +27075=>5266, +27047=>5267, +27182=>5268, +27025=>5269, +27040=>5270, +27036=>5271, +27029=>5272, +27060=>5273, +27102=>5274, +27112=>5275, +27138=>5276, +27163=>5277, +27135=>5278, +27402=>5279, +27129=>5280, +27122=>5281, +27111=>5282, +27141=>5283, +27057=>5284, +27166=>5285, +27117=>5286, +27156=>5287, +27115=>5288, +27146=>5289, +27154=>5290, +27329=>5291, +27171=>5292, +27155=>5293, +27204=>5294, +27148=>5295, +27250=>5296, +27190=>5297, +27256=>5298, +27207=>5299, +27234=>5300, +27225=>5301, +27238=>5302, +27208=>5303, +27192=>5304, +27170=>5305, +27280=>5306, +27277=>5307, +27296=>5308, +27268=>5309, +27298=>5310, +27299=>5311, +27287=>5312, +34327=>5313, +27323=>5314, +27331=>5315, +27330=>5316, +27320=>5317, +27315=>5318, +27308=>5319, +27358=>5320, +27345=>5321, +27359=>5322, +27306=>5323, +27354=>5324, +27370=>5325, +27387=>5326, +27397=>5327, +34326=>5328, +27386=>5329, +27410=>5330, +27414=>5331, +39729=>5332, +27423=>5333, +27448=>5334, +27447=>5335, +30428=>5336, +27449=>5337, +39150=>5338, +27463=>5339, +27459=>5340, +27465=>5341, +27472=>5342, +27481=>5343, +27476=>5344, +27483=>5345, +27487=>5346, +27489=>5347, +27512=>5348, +12109=>5349, +27513=>5349, +27519=>5350, +27520=>5351, +27524=>5352, +27523=>5353, +27533=>5354, +27544=>5355, +27541=>5356, +27550=>5357, +27556=>5358, +27562=>5359, +27563=>5360, +27567=>5361, +27570=>5362, +27569=>5363, +12110=>5364, +27571=>5364, +27575=>5365, +27580=>5366, +27590=>5367, +12111=>5368, +27595=>5368, +27603=>5369, +27615=>5370, +27628=>5371, +27627=>5372, +27635=>5373, +27631=>5374, +40638=>5375, +27656=>5376, +27667=>5377, +12115=>5378, +27668=>5378, +27675=>5379, +27684=>5380, +27683=>5381, +27742=>5382, +27733=>5383, +27746=>5384, +27754=>5385, +27778=>5386, +27789=>5387, +27802=>5388, +27777=>5389, +27803=>5390, +27774=>5391, +27752=>5392, +27763=>5393, +27794=>5394, +27792=>5395, +27844=>5396, +27889=>5397, +27859=>5398, +27837=>5399, +27863=>5400, +27845=>5401, +27869=>5402, +27822=>5403, +27825=>5404, +27838=>5405, +27834=>5406, +27867=>5407, +27887=>5408, +27865=>5409, +27882=>5410, +27935=>5411, +34893=>5412, +27958=>5413, +27947=>5414, +27965=>5415, +27960=>5416, +27929=>5417, +27957=>5418, +27955=>5419, +27922=>5420, +27916=>5421, +28003=>5422, +28051=>5423, +28004=>5424, +27994=>5425, +28025=>5426, +27993=>5427, +28046=>5428, +28053=>5429, +28644=>5430, +28037=>5431, +28153=>5432, +28181=>5433, +28170=>5434, +28085=>5435, +28103=>5436, +28134=>5437, +28088=>5438, +28102=>5439, +28140=>5440, +28126=>5441, +28108=>5442, +28136=>5443, +28114=>5444, +28101=>5445, +28154=>5446, +28121=>5447, +28132=>5448, +28117=>5449, +28138=>5450, +28142=>5451, +28205=>5452, +28270=>5453, +28206=>5454, +28185=>5455, +28274=>5456, +28255=>5457, +28222=>5458, +28195=>5459, +28267=>5460, +28203=>5461, +28278=>5462, +28237=>5463, +28191=>5464, +28227=>5465, +28218=>5466, +28238=>5467, +28196=>5468, +28415=>5469, +28189=>5470, +28216=>5471, +28290=>5472, +28330=>5473, +28312=>5474, +28361=>5475, +28343=>5476, +28371=>5477, +28349=>5478, +28335=>5479, +28356=>5480, +28338=>5481, +28372=>5482, +28373=>5483, +28303=>5484, +28325=>5485, +28354=>5486, +28319=>5487, +28481=>5488, +28433=>5489, +28748=>5490, +28396=>5491, +28408=>5492, +28414=>5493, +28479=>5494, +28402=>5495, +28465=>5496, +28399=>5497, +28466=>5498, +28364=>5499, +28478=>5500, +28435=>5501, +28407=>5502, +28550=>5503, +28538=>5504, +28536=>5505, +28545=>5506, +28544=>5507, +28527=>5508, +28507=>5509, +28659=>5510, +28525=>5511, +28546=>5512, +28540=>5513, +28504=>5514, +28558=>5515, +28561=>5516, +28610=>5517, +28518=>5518, +28595=>5519, +28579=>5520, +28577=>5521, +28580=>5522, +28601=>5523, +28614=>5524, +28586=>5525, +28639=>5526, +28629=>5527, +28652=>5528, +28628=>5529, +28632=>5530, +28657=>5531, +28654=>5532, +28635=>5533, +28681=>5534, +28683=>5535, +28666=>5536, +28689=>5537, +28673=>5538, +28687=>5539, +28670=>5540, +28699=>5541, +28698=>5542, +28532=>5543, +28701=>5544, +28696=>5545, +28703=>5546, +28720=>5547, +28734=>5548, +28722=>5549, +28753=>5550, +28771=>5551, +28825=>5552, +28818=>5553, +28847=>5554, +28913=>5555, +28844=>5556, +28856=>5557, +28851=>5558, +28846=>5559, +28895=>5560, +28875=>5561, +28893=>5562, +28889=>5563, +28937=>5564, +28925=>5565, +28956=>5566, +28953=>5567, +29029=>5568, +29013=>5569, +29064=>5570, +29030=>5571, +29026=>5572, +29004=>5573, +29014=>5574, +29036=>5575, +29071=>5576, +29179=>5577, +29060=>5578, +29077=>5579, +29096=>5580, +29100=>5581, +29143=>5582, +29113=>5583, +29118=>5584, +29138=>5585, +29129=>5586, +29140=>5587, +29134=>5588, +29152=>5589, +29164=>5590, +29159=>5591, +29173=>5592, +29180=>5593, +29177=>5594, +29183=>5595, +29197=>5596, +29200=>5597, +29211=>5598, +29224=>5599, +29229=>5600, +29228=>5601, +29232=>5602, +29234=>5603, +12120=>5604, +29243=>5604, +29244=>5605, +12121=>5606, +29247=>5606, +29248=>5607, +29254=>5608, +29259=>5609, +29272=>5610, +29300=>5611, +29310=>5612, +29314=>5613, +29313=>5614, +29319=>5615, +29330=>5616, +29334=>5617, +29346=>5618, +29351=>5619, +29369=>5620, +29362=>5621, +29379=>5622, +29382=>5623, +29380=>5624, +29390=>5625, +29394=>5626, +29410=>5627, +29408=>5628, +29409=>5629, +29433=>5630, +29431=>5631, +20495=>5632, +29463=>5633, +29450=>5634, +29468=>5635, +29462=>5636, +29469=>5637, +29492=>5638, +29487=>5639, +29481=>5640, +29477=>5641, +29502=>5642, +29518=>5643, +29519=>5644, +40664=>5645, +29527=>5646, +29546=>5647, +29544=>5648, +29552=>5649, +29560=>5650, +29557=>5651, +29563=>5652, +29562=>5653, +29640=>5654, +29619=>5655, +29646=>5656, +29627=>5657, +29632=>5658, +29669=>5659, +29678=>5660, +29662=>5661, +29858=>5662, +29701=>5663, +29807=>5664, +29733=>5665, +29688=>5666, +29746=>5667, +29754=>5668, +29781=>5669, +29759=>5670, +29791=>5671, +29785=>5672, +29761=>5673, +29788=>5674, +29801=>5675, +29808=>5676, +29795=>5677, +29802=>5678, +29814=>5679, +29822=>5680, +29835=>5681, +29854=>5682, +29863=>5683, +29898=>5684, +29903=>5685, +29908=>5686, +29681=>5687, +29920=>5688, +29923=>5689, +29927=>5690, +29929=>5691, +29934=>5692, +29938=>5693, +29936=>5694, +29937=>5695, +29944=>5696, +29943=>5697, +29956=>5698, +29955=>5699, +29957=>5700, +29964=>5701, +29966=>5702, +29965=>5703, +29973=>5704, +29971=>5705, +29982=>5706, +29990=>5707, +29996=>5708, +30012=>5709, +30020=>5710, +30029=>5711, +30026=>5712, +30025=>5713, +30043=>5714, +30022=>5715, +30042=>5716, +30057=>5717, +30052=>5718, +30055=>5719, +30059=>5720, +30061=>5721, +30072=>5722, +30070=>5723, +30086=>5724, +30087=>5725, +30068=>5726, +30090=>5727, +30089=>5728, +30082=>5729, +30100=>5730, +30106=>5731, +30109=>5732, +30117=>5733, +30115=>5734, +30146=>5735, +30131=>5736, +30147=>5737, +30133=>5738, +30141=>5739, +30136=>5740, +30140=>5741, +30129=>5742, +30157=>5743, +30154=>5744, +30162=>5745, +30169=>5746, +30179=>5747, +30174=>5748, +30206=>5749, +30207=>5750, +30204=>5751, +30209=>5752, +30192=>5753, +30202=>5754, +30194=>5755, +30195=>5756, +30219=>5757, +30221=>5758, +30217=>5759, +30239=>5760, +30247=>5761, +30240=>5762, +30241=>5763, +30242=>5764, +30244=>5765, +30260=>5766, +30256=>5767, +30267=>5768, +30279=>5769, +30280=>5770, +30278=>5771, +30300=>5772, +30296=>5773, +30305=>5774, +30306=>5775, +30312=>5776, +30313=>5777, +30314=>5778, +30311=>5779, +30316=>5780, +30320=>5781, +30322=>5782, +12136=>5783, +30326=>5783, +30328=>5784, +30332=>5785, +30336=>5786, +30339=>5787, +30344=>5788, +30347=>5789, +30350=>5790, +30358=>5791, +30355=>5792, +30361=>5793, +30362=>5794, +30384=>5795, +30388=>5796, +30392=>5797, +30393=>5798, +30394=>5799, +30402=>5800, +30413=>5801, +30422=>5802, +30418=>5803, +30430=>5804, +30433=>5805, +30437=>5806, +30439=>5807, +30442=>5808, +34351=>5809, +30459=>5810, +30472=>5811, +30471=>5812, +30468=>5813, +30505=>5814, +30500=>5815, +30494=>5816, +30501=>5817, +30502=>5818, +30491=>5819, +30519=>5820, +30520=>5821, +30535=>5822, +30554=>5823, +30568=>5824, +30571=>5825, +30555=>5826, +30565=>5827, +30591=>5828, +30590=>5829, +30585=>5830, +30606=>5831, +30603=>5832, +30609=>5833, +30624=>5834, +30622=>5835, +30640=>5836, +30646=>5837, +30649=>5838, +30655=>5839, +30652=>5840, +30653=>5841, +30651=>5842, +30663=>5843, +30669=>5844, +30679=>5845, +30682=>5846, +30684=>5847, +30691=>5848, +30702=>5849, +30716=>5850, +30732=>5851, +30738=>5852, +31014=>5853, +30752=>5854, +31018=>5855, +30789=>5856, +30862=>5857, +30836=>5858, +30854=>5859, +30844=>5860, +30874=>5861, +30860=>5862, +30883=>5863, +30901=>5864, +30890=>5865, +30895=>5866, +30929=>5867, +30918=>5868, +30923=>5869, +30932=>5870, +30910=>5871, +30908=>5872, +30917=>5873, +30922=>5874, +30956=>5875, +30951=>5876, +30938=>5877, +30973=>5878, +30964=>5879, +30983=>5880, +30994=>5881, +30993=>5882, +31001=>5883, +31020=>5884, +31019=>5885, +31040=>5886, +31072=>5887, +31063=>5888, +31071=>5889, +31066=>5890, +31061=>5891, +31059=>5892, +31098=>5893, +31103=>5894, +31114=>5895, +31133=>5896, +31143=>5897, +40779=>5898, +31146=>5899, +31150=>5900, +31155=>5901, +31161=>5902, +31162=>5903, +31177=>5904, +31189=>5905, +31207=>5906, +31212=>5907, +31201=>5908, +31203=>5909, +31240=>5910, +31245=>5911, +31256=>5912, +31257=>5913, +31264=>5914, +31263=>5915, +31104=>5916, +31281=>5917, +31291=>5918, +31294=>5919, +31287=>5920, +31299=>5921, +31319=>5922, +31305=>5923, +31329=>5924, +31330=>5925, +31337=>5926, +40861=>5927, +31344=>5928, +31353=>5929, +31357=>5930, +31368=>5931, +31383=>5932, +31381=>5933, +31384=>5934, +31382=>5935, +31401=>5936, +31432=>5937, +31408=>5938, +31414=>5939, +31429=>5940, +31428=>5941, +31423=>5942, +36995=>5943, +31431=>5944, +31434=>5945, +31437=>5946, +31439=>5947, +31445=>5948, +31443=>5949, +31449=>5950, +31450=>5951, +31453=>5952, +31457=>5953, +31458=>5954, +31462=>5955, +31469=>5956, +31472=>5957, +31490=>5958, +31503=>5959, +31498=>5960, +31494=>5961, +31539=>5962, +31512=>5963, +31513=>5964, +31518=>5965, +31541=>5966, +31528=>5967, +31542=>5968, +31568=>5969, +31610=>5970, +31492=>5971, +31565=>5972, +31499=>5973, +31564=>5974, +31557=>5975, +31605=>5976, +31589=>5977, +31604=>5978, +31591=>5979, +31600=>5980, +31601=>5981, +31596=>5982, +31598=>5983, +31645=>5984, +31640=>5985, +31647=>5986, +31629=>5987, +31644=>5988, +31642=>5989, +31627=>5990, +31634=>5991, +31631=>5992, +31581=>5993, +31641=>5994, +31691=>5995, +31681=>5996, +31692=>5997, +31695=>5998, +31668=>5999, +31686=>6000, +31709=>6001, +31721=>6002, +31761=>6003, +31764=>6004, +31718=>6005, +31717=>6006, +31840=>6007, +31744=>6008, +31751=>6009, +31763=>6010, +31731=>6011, +31735=>6012, +31767=>6013, +31757=>6014, +31734=>6015, +31779=>6016, +31783=>6017, +31786=>6018, +31775=>6019, +31799=>6020, +31787=>6021, +31805=>6022, +31820=>6023, +31811=>6024, +31828=>6025, +31823=>6026, +31808=>6027, +31824=>6028, +31832=>6029, +31839=>6030, +31844=>6031, +31830=>6032, +31845=>6033, +31852=>6034, +31861=>6035, +31875=>6036, +31888=>6037, +31908=>6038, +31917=>6039, +31906=>6040, +31915=>6041, +31905=>6042, +31912=>6043, +31923=>6044, +31922=>6045, +31921=>6046, +31918=>6047, +31929=>6048, +31933=>6049, +31936=>6050, +31941=>6051, +31938=>6052, +31960=>6053, +31954=>6054, +31964=>6055, +31970=>6056, +39739=>6057, +31983=>6058, +31986=>6059, +31988=>6060, +31990=>6061, +31994=>6062, +32006=>6063, +32002=>6064, +32028=>6065, +32021=>6066, +32010=>6067, +32069=>6068, +32075=>6069, +32046=>6070, +32050=>6071, +32063=>6072, +32053=>6073, +32070=>6074, +32115=>6075, +32086=>6076, +32078=>6077, +32114=>6078, +32104=>6079, +32110=>6080, +32079=>6081, +32099=>6082, +32147=>6083, +32137=>6084, +32091=>6085, +32143=>6086, +32125=>6087, +32155=>6088, +32186=>6089, +32174=>6090, +32163=>6091, +32181=>6092, +32199=>6093, +32189=>6094, +32171=>6095, +32317=>6096, +32162=>6097, +32175=>6098, +32220=>6099, +32184=>6100, +32159=>6101, +32176=>6102, +32216=>6103, +32221=>6104, +32228=>6105, +32222=>6106, +32251=>6107, +32242=>6108, +32225=>6109, +32261=>6110, +32266=>6111, +32291=>6112, +32289=>6113, +32274=>6114, +32305=>6115, +32287=>6116, +32265=>6117, +32267=>6118, +32290=>6119, +32326=>6120, +32358=>6121, +32315=>6122, +32309=>6123, +32313=>6124, +32323=>6125, +32311=>6126, +32306=>6127, +32314=>6128, +32359=>6129, +32349=>6130, +32342=>6131, +32350=>6132, +32345=>6133, +32346=>6134, +32377=>6135, +32362=>6136, +32361=>6137, +32380=>6138, +32379=>6139, +32387=>6140, +32213=>6141, +32381=>6142, +36782=>6143, +32383=>6144, +32392=>6145, +32393=>6146, +32396=>6147, +32402=>6148, +32400=>6149, +32403=>6150, +32404=>6151, +32406=>6152, +32398=>6153, +32411=>6154, +32412=>6155, +32568=>6156, +32570=>6157, +32581=>6158, +32588=>6159, +32589=>6160, +32590=>6161, +32592=>6162, +12153=>6163, +32593=>6163, +32597=>6164, +32596=>6165, +32600=>6166, +32607=>6167, +32608=>6168, +32616=>6169, +32617=>6170, +32615=>6171, +32632=>6172, +32642=>6173, +32646=>6174, +32643=>6175, +32648=>6176, +32647=>6177, +32652=>6178, +32660=>6179, +32670=>6180, +32669=>6181, +32666=>6182, +32675=>6183, +32687=>6184, +32690=>6185, +32697=>6186, +32686=>6187, +32694=>6188, +32696=>6189, +35697=>6190, +32709=>6191, +32710=>6192, +32714=>6193, +32725=>6194, +32724=>6195, +32737=>6196, +32742=>6197, +32745=>6198, +32755=>6199, +32761=>6200, +39132=>6201, +32774=>6202, +32772=>6203, +32779=>6204, +12158=>6205, +32786=>6205, +32792=>6206, +32793=>6207, +32796=>6208, +32801=>6209, +32808=>6210, +32831=>6211, +32827=>6212, +32842=>6213, +32838=>6214, +32850=>6215, +32856=>6216, +32858=>6217, +32863=>6218, +32866=>6219, +32872=>6220, +32883=>6221, +32882=>6222, +32880=>6223, +32886=>6224, +32889=>6225, +32893=>6226, +12160=>6227, +32895=>6227, +32900=>6228, +32902=>6229, +32901=>6230, +32923=>6231, +32915=>6232, +32922=>6233, +32941=>6234, +20880=>6235, +32940=>6236, +32987=>6237, +32997=>6238, +32985=>6239, +32989=>6240, +32964=>6241, +32986=>6242, +32982=>6243, +33033=>6244, +33007=>6245, +33009=>6246, +33051=>6247, +33065=>6248, +33059=>6249, +33071=>6250, +33099=>6251, +38539=>6252, +33094=>6253, +33086=>6254, +33107=>6255, +33105=>6256, +33020=>6257, +33137=>6258, +33134=>6259, +33125=>6260, +33126=>6261, +33140=>6262, +33155=>6263, +33160=>6264, +33162=>6265, +33152=>6266, +33154=>6267, +33184=>6268, +33173=>6269, +33188=>6270, +33187=>6271, +33119=>6272, +33171=>6273, +33193=>6274, +33200=>6275, +33205=>6276, +33214=>6277, +33208=>6278, +33213=>6279, +33216=>6280, +33218=>6281, +33210=>6282, +33225=>6283, +33229=>6284, +33233=>6285, +33241=>6286, +33240=>6287, +33224=>6288, +33242=>6289, +33247=>6290, +33248=>6291, +33255=>6292, +33274=>6293, +33275=>6294, +33278=>6295, +33281=>6296, +33282=>6297, +33285=>6298, +33287=>6299, +33290=>6300, +33293=>6301, +33296=>6302, +33302=>6303, +33321=>6304, +33323=>6305, +33336=>6306, +33331=>6307, +33344=>6308, +33369=>6309, +33368=>6310, +33373=>6311, +33370=>6312, +33375=>6313, +33380=>6314, +33378=>6315, +33384=>6316, +33386=>6317, +33387=>6318, +33326=>6319, +33393=>6320, +33399=>6321, +12171=>6322, +33400=>6322, +33406=>6323, +33421=>6324, +33426=>6325, +33451=>6326, +33439=>6327, +33467=>6328, +33452=>6329, +33505=>6330, +33507=>6331, +33503=>6332, +33490=>6333, +33524=>6334, +33523=>6335, +33530=>6336, +33683=>6337, +33539=>6338, +33531=>6339, +33529=>6340, +33502=>6341, +33542=>6342, +33500=>6343, +33545=>6344, +33497=>6345, +33589=>6346, +33588=>6347, +33558=>6348, +33586=>6349, +33585=>6350, +33600=>6351, +33593=>6352, +33616=>6353, +33605=>6354, +33583=>6355, +33579=>6356, +33559=>6357, +33560=>6358, +33669=>6359, +33690=>6360, +33706=>6361, +33695=>6362, +33698=>6363, +33686=>6364, +33571=>6365, +33678=>6366, +33671=>6367, +33674=>6368, +33660=>6369, +33717=>6370, +33651=>6371, +33653=>6372, +33696=>6373, +33673=>6374, +33704=>6375, +33780=>6376, +33811=>6377, +33771=>6378, +33742=>6379, +33789=>6380, +33795=>6381, +33752=>6382, +33803=>6383, +33729=>6384, +33783=>6385, +33799=>6386, +33760=>6387, +33778=>6388, +33805=>6389, +33826=>6390, +33824=>6391, +33725=>6392, +33848=>6393, +34054=>6394, +33787=>6395, +33901=>6396, +33834=>6397, +33852=>6398, +34138=>6399, +33924=>6400, +33911=>6401, +33899=>6402, +33965=>6403, +33902=>6404, +33922=>6405, +33897=>6406, +33862=>6407, +33836=>6408, +33903=>6409, +33913=>6410, +33845=>6411, +33994=>6412, +33890=>6413, +33977=>6414, +33983=>6415, +33951=>6416, +34009=>6417, +33997=>6418, +33979=>6419, +34010=>6420, +34000=>6421, +33985=>6422, +33990=>6423, +34006=>6424, +33953=>6425, +34081=>6426, +34047=>6427, +34036=>6428, +34071=>6429, +34072=>6430, +34092=>6431, +34079=>6432, +34069=>6433, +34068=>6434, +34044=>6435, +34112=>6436, +34147=>6437, +34136=>6438, +34120=>6439, +34113=>6440, +34306=>6441, +34123=>6442, +34133=>6443, +34176=>6444, +34212=>6445, +34184=>6446, +34193=>6447, +34186=>6448, +34216=>6449, +34157=>6450, +34196=>6451, +34203=>6452, +34282=>6453, +34183=>6454, +34204=>6455, +34167=>6456, +34174=>6457, +34192=>6458, +34249=>6459, +34234=>6460, +34255=>6461, +34233=>6462, +34256=>6463, +34261=>6464, +34269=>6465, +34277=>6466, +34268=>6467, +34297=>6468, +34314=>6469, +34323=>6470, +34315=>6471, +34302=>6472, +34298=>6473, +34310=>6474, +34338=>6475, +34330=>6476, +34352=>6477, +34367=>6478, +12172=>6479, +34381=>6479, +20053=>6480, +34388=>6481, +34399=>6482, +34407=>6483, +34417=>6484, +34451=>6485, +34467=>6486, +34473=>6487, +34474=>6488, +34443=>6489, +34444=>6490, +34486=>6491, +34479=>6492, +34500=>6493, +34502=>6494, +34480=>6495, +34505=>6496, +34851=>6497, +34475=>6498, +34516=>6499, +34526=>6500, +34537=>6501, +34540=>6502, +34527=>6503, +34523=>6504, +34543=>6505, +34578=>6506, +34566=>6507, +34568=>6508, +34560=>6509, +34563=>6510, +34555=>6511, +34577=>6512, +34569=>6513, +34573=>6514, +34553=>6515, +34570=>6516, +34612=>6517, +34623=>6518, +34615=>6519, +34619=>6520, +34597=>6521, +34601=>6522, +34586=>6523, +34656=>6524, +34655=>6525, +34680=>6526, +34636=>6527, +34638=>6528, +34676=>6529, +34647=>6530, +34664=>6531, +34670=>6532, +34649=>6533, +34643=>6534, +34659=>6535, +34666=>6536, +34821=>6537, +34722=>6538, +34719=>6539, +34690=>6540, +34735=>6541, +34763=>6542, +34749=>6543, +34752=>6544, +34768=>6545, +38614=>6546, +34731=>6547, +34756=>6548, +34739=>6549, +34759=>6550, +34758=>6551, +34747=>6552, +34799=>6553, +34802=>6554, +34784=>6555, +34831=>6556, +34829=>6557, +34814=>6558, +34806=>6559, +34807=>6560, +34830=>6561, +34770=>6562, +34833=>6563, +34838=>6564, +34837=>6565, +34850=>6566, +34849=>6567, +34865=>6568, +34870=>6569, +34873=>6570, +34855=>6571, +34875=>6572, +34884=>6573, +34882=>6574, +34898=>6575, +34905=>6576, +34910=>6577, +34914=>6578, +34923=>6579, +34945=>6580, +34942=>6581, +34974=>6582, +34933=>6583, +34941=>6584, +34997=>6585, +34930=>6586, +34946=>6587, +34967=>6588, +34962=>6589, +34990=>6590, +34969=>6591, +34978=>6592, +34957=>6593, +34980=>6594, +34992=>6595, +35007=>6596, +34993=>6597, +35011=>6598, +35012=>6599, +35028=>6600, +35032=>6601, +35033=>6602, +35037=>6603, +35065=>6604, +35074=>6605, +35068=>6606, +35060=>6607, +35048=>6608, +35058=>6609, +35076=>6610, +35084=>6611, +35082=>6612, +35091=>6613, +35139=>6614, +35102=>6615, +35109=>6616, +35114=>6617, +35115=>6618, +35137=>6619, +35140=>6620, +35131=>6621, +35126=>6622, +35128=>6623, +35148=>6624, +35101=>6625, +35168=>6626, +35166=>6627, +35174=>6628, +35172=>6629, +35181=>6630, +35178=>6631, +35183=>6632, +35188=>6633, +35191=>6634, +12177=>6635, +35198=>6635, +35203=>6636, +35208=>6637, +35210=>6638, +35219=>6639, +35224=>6640, +35233=>6641, +35241=>6642, +35238=>6643, +35244=>6644, +35247=>6645, +35250=>6646, +35258=>6647, +35261=>6648, +35263=>6649, +35264=>6650, +35290=>6651, +35292=>6652, +35293=>6653, +35303=>6654, +35316=>6655, +35320=>6656, +35331=>6657, +35350=>6658, +35344=>6659, +35340=>6660, +35355=>6661, +35357=>6662, +35365=>6663, +35382=>6664, +35393=>6665, +35419=>6666, +35410=>6667, +35398=>6668, +35400=>6669, +35452=>6670, +35437=>6671, +35436=>6672, +35426=>6673, +35461=>6674, +35458=>6675, +35460=>6676, +35496=>6677, +35489=>6678, +35473=>6679, +35493=>6680, +35494=>6681, +35482=>6682, +35491=>6683, +35524=>6684, +35533=>6685, +35522=>6686, +35546=>6687, +35563=>6688, +35571=>6689, +35559=>6690, +35556=>6691, +35569=>6692, +35604=>6693, +35552=>6694, +35554=>6695, +35575=>6696, +35550=>6697, +35547=>6698, +35596=>6699, +35591=>6700, +35610=>6701, +35553=>6702, +35606=>6703, +35600=>6704, +35607=>6705, +35616=>6706, +35635=>6707, +38827=>6708, +35622=>6709, +35627=>6710, +35646=>6711, +35624=>6712, +35649=>6713, +35660=>6714, +35663=>6715, +35662=>6716, +35657=>6717, +35670=>6718, +35675=>6719, +35674=>6720, +35691=>6721, +35679=>6722, +35692=>6723, +35695=>6724, +35700=>6725, +35709=>6726, +35712=>6727, +35724=>6728, +35726=>6729, +35730=>6730, +35731=>6731, +35734=>6732, +35737=>6733, +35738=>6734, +35898=>6735, +35905=>6736, +35903=>6737, +35912=>6738, +35916=>6739, +35918=>6740, +35920=>6741, +12183=>6742, +35925=>6742, +35938=>6743, +35948=>6744, +12184=>6745, +35960=>6745, +35962=>6746, +35970=>6747, +35977=>6748, +35973=>6749, +35978=>6750, +35981=>6751, +35982=>6752, +35988=>6753, +35964=>6754, +35992=>6755, +25117=>6756, +36013=>6757, +36010=>6758, +36029=>6759, +36018=>6760, +36019=>6761, +36014=>6762, +36022=>6763, +36040=>6764, +36033=>6765, +36068=>6766, +36067=>6767, +36058=>6768, +36093=>6769, +36090=>6770, +36091=>6771, +36100=>6772, +36101=>6773, +36106=>6774, +36103=>6775, +36111=>6776, +36109=>6777, +36112=>6778, +40782=>6779, +36115=>6780, +36045=>6781, +36116=>6782, +36118=>6783, +36199=>6784, +36205=>6785, +36209=>6786, +36211=>6787, +36225=>6788, +36249=>6789, +36290=>6790, +36286=>6791, +36282=>6792, +36303=>6793, +36314=>6794, +36310=>6795, +36300=>6796, +36315=>6797, +36299=>6798, +36330=>6799, +36331=>6800, +36319=>6801, +36323=>6802, +36348=>6803, +36360=>6804, +36361=>6805, +36351=>6806, +36381=>6807, +36382=>6808, +36368=>6809, +36383=>6810, +36418=>6811, +36405=>6812, +36400=>6813, +36404=>6814, +36426=>6815, +36423=>6816, +36425=>6817, +36428=>6818, +36432=>6819, +36424=>6820, +36441=>6821, +36452=>6822, +36448=>6823, +36394=>6824, +36451=>6825, +36437=>6826, +36470=>6827, +36466=>6828, +36476=>6829, +36481=>6830, +36487=>6831, +36485=>6832, +36484=>6833, +36491=>6834, +36490=>6835, +36499=>6836, +36497=>6837, +36500=>6838, +36505=>6839, +36522=>6840, +36513=>6841, +36524=>6842, +36528=>6843, +36550=>6844, +36529=>6845, +36542=>6846, +36549=>6847, +36552=>6848, +36555=>6849, +36571=>6850, +36579=>6851, +36604=>6852, +36603=>6853, +36587=>6854, +36606=>6855, +36618=>6856, +36613=>6857, +36629=>6858, +36626=>6859, +36633=>6860, +36627=>6861, +36636=>6862, +36639=>6863, +36635=>6864, +36620=>6865, +36646=>6866, +36659=>6867, +36667=>6868, +36665=>6869, +36677=>6870, +36674=>6871, +36670=>6872, +36684=>6873, +36681=>6874, +36678=>6875, +36686=>6876, +36695=>6877, +36700=>6878, +36706=>6879, +36707=>6880, +36708=>6881, +36764=>6882, +36767=>6883, +36771=>6884, +36781=>6885, +36783=>6886, +36791=>6887, +36826=>6888, +36837=>6889, +36834=>6890, +36842=>6891, +36847=>6892, +36999=>6893, +36852=>6894, +36869=>6895, +36857=>6896, +36858=>6897, +36881=>6898, +36885=>6899, +36897=>6900, +36877=>6901, +36894=>6902, +36886=>6903, +36875=>6904, +36903=>6905, +36918=>6906, +36917=>6907, +36921=>6908, +36856=>6909, +36943=>6910, +36944=>6911, +36945=>6912, +36946=>6913, +36878=>6914, +36937=>6915, +36926=>6916, +36950=>6917, +36952=>6918, +36958=>6919, +36968=>6920, +36975=>6921, +36982=>6922, +38568=>6923, +36978=>6924, +36994=>6925, +36989=>6926, +36993=>6927, +36992=>6928, +37002=>6929, +37001=>6930, +37007=>6931, +37032=>6932, +37039=>6933, +37041=>6934, +37045=>6935, +37090=>6936, +37092=>6937, +25160=>6938, +37083=>6939, +37122=>6940, +37138=>6941, +37145=>6942, +37170=>6943, +37168=>6944, +37194=>6945, +37206=>6946, +37208=>6947, +37219=>6948, +37221=>6949, +37225=>6950, +37235=>6951, +37234=>6952, +37259=>6953, +37257=>6954, +37250=>6955, +37282=>6956, +37291=>6957, +37295=>6958, +37290=>6959, +37301=>6960, +37300=>6961, +37306=>6962, +37312=>6963, +37313=>6964, +37321=>6965, +37323=>6966, +37328=>6967, +37334=>6968, +37343=>6969, +37345=>6970, +37339=>6971, +37372=>6972, +37365=>6973, +37366=>6974, +37406=>6975, +37375=>6976, +37396=>6977, +37420=>6978, +37397=>6979, +37393=>6980, +37470=>6981, +37463=>6982, +37445=>6983, +37449=>6984, +37476=>6985, +37448=>6986, +37525=>6987, +37439=>6988, +37451=>6989, +37456=>6990, +37532=>6991, +37526=>6992, +37523=>6993, +37531=>6994, +37466=>6995, +37583=>6996, +37561=>6997, +37559=>6998, +37609=>6999, +37647=>7000, +37626=>7001, +37700=>7002, +37678=>7003, +37657=>7004, +37666=>7005, +37658=>7006, +37667=>7007, +37690=>7008, +37685=>7009, +37691=>7010, +37724=>7011, +37728=>7012, +37756=>7013, +37742=>7014, +37718=>7015, +37808=>7016, +37804=>7017, +37805=>7018, +37780=>7019, +37817=>7020, +37846=>7021, +37847=>7022, +37864=>7023, +37861=>7024, +37848=>7025, +37827=>7026, +37853=>7027, +37840=>7028, +37832=>7029, +37860=>7030, +37914=>7031, +37908=>7032, +37907=>7033, +37891=>7034, +37895=>7035, +37904=>7036, +37942=>7037, +37931=>7038, +37941=>7039, +37921=>7040, +37946=>7041, +37953=>7042, +37970=>7043, +37956=>7044, +37979=>7045, +37984=>7046, +37986=>7047, +37982=>7048, +37994=>7049, +37417=>7050, +38000=>7051, +38005=>7052, +38007=>7053, +38013=>7054, +37978=>7055, +38012=>7056, +38014=>7057, +38017=>7058, +38015=>7059, +38274=>7060, +38279=>7061, +38282=>7062, +38292=>7063, +38294=>7064, +38296=>7065, +38297=>7066, +38304=>7067, +38312=>7068, +38311=>7069, +38317=>7070, +38332=>7071, +38331=>7072, +38329=>7073, +38334=>7074, +38346=>7075, +28662=>7076, +38339=>7077, +38349=>7078, +38348=>7079, +38357=>7080, +38356=>7081, +38358=>7082, +38364=>7083, +38369=>7084, +38373=>7085, +38370=>7086, +38433=>7087, +38440=>7088, +38446=>7089, +38447=>7090, +38466=>7091, +38476=>7092, +38479=>7093, +38475=>7094, +38519=>7095, +38492=>7096, +38494=>7097, +38493=>7098, +38495=>7099, +38502=>7100, +38514=>7101, +38508=>7102, +38541=>7103, +38552=>7104, +38549=>7105, +38551=>7106, +38570=>7107, +38567=>7108, +38577=>7109, +38578=>7110, +38576=>7111, +38580=>7112, +12202=>7113, +38582=>7113, +38584=>7114, +12203=>7115, +38585=>7115, +38606=>7116, +38603=>7117, +38601=>7118, +38605=>7119, +35149=>7120, +38620=>7121, +38669=>7122, +38613=>7123, +38649=>7124, +38660=>7125, +38662=>7126, +38664=>7127, +38675=>7128, +38670=>7129, +38673=>7130, +38671=>7131, +38678=>7132, +38681=>7133, +38692=>7134, +38698=>7135, +38704=>7136, +38713=>7137, +38717=>7138, +38718=>7139, +38724=>7140, +38726=>7141, +38728=>7142, +38722=>7143, +38729=>7144, +38748=>7145, +38752=>7146, +38756=>7147, +38758=>7148, +38760=>7149, +21202=>7150, +38763=>7151, +38769=>7152, +38777=>7153, +38789=>7154, +38780=>7155, +38785=>7156, +38778=>7157, +38790=>7158, +38795=>7159, +38799=>7160, +38800=>7161, +38812=>7162, +38824=>7163, +38822=>7164, +38819=>7165, +38835=>7166, +38836=>7167, +38851=>7168, +38854=>7169, +38856=>7170, +12209=>7171, +38859=>7171, +38876=>7172, +12210=>7173, +38893=>7173, +40783=>7174, +38898=>7175, +31455=>7176, +38902=>7177, +38901=>7178, +38927=>7179, +38924=>7180, +38968=>7181, +38948=>7182, +38945=>7183, +38967=>7184, +38973=>7185, +38982=>7186, +38991=>7187, +38987=>7188, +39019=>7189, +39023=>7190, +39024=>7191, +39025=>7192, +39028=>7193, +39027=>7194, +39082=>7195, +39087=>7196, +39089=>7197, +39094=>7198, +39108=>7199, +39107=>7200, +39110=>7201, +39145=>7202, +39147=>7203, +39171=>7204, +39177=>7205, +39186=>7206, +39188=>7207, +39192=>7208, +39201=>7209, +39197=>7210, +39198=>7211, +39204=>7212, +39200=>7213, +39212=>7214, +39214=>7215, +39229=>7216, +39230=>7217, +39234=>7218, +39241=>7219, +39237=>7220, +39248=>7221, +39243=>7222, +39249=>7223, +39250=>7224, +39244=>7225, +39253=>7226, +39319=>7227, +39320=>7228, +39333=>7229, +39341=>7230, +39342=>7231, +39356=>7232, +39391=>7233, +39387=>7234, +39389=>7235, +39384=>7236, +39377=>7237, +39405=>7238, +39406=>7239, +39409=>7240, +39410=>7241, +39419=>7242, +39416=>7243, +39425=>7244, +39439=>7245, +39429=>7246, +39394=>7247, +39449=>7248, +39467=>7249, +39479=>7250, +39493=>7251, +39490=>7252, +39488=>7253, +39491=>7254, +39486=>7255, +39509=>7256, +39501=>7257, +39515=>7258, +39511=>7259, +39519=>7260, +39522=>7261, +39525=>7262, +39524=>7263, +39529=>7264, +39531=>7265, +39530=>7266, +39597=>7267, +39600=>7268, +39612=>7269, +39616=>7270, +39631=>7271, +39633=>7272, +39635=>7273, +39636=>7274, +39646=>7275, +12221=>7276, +39647=>7276, +39650=>7277, +39651=>7278, +39654=>7279, +39663=>7280, +39659=>7281, +39662=>7282, +39668=>7283, +39665=>7284, +39671=>7285, +39675=>7286, +39686=>7287, +39704=>7288, +39706=>7289, +39711=>7290, +39714=>7291, +39715=>7292, +12222=>7293, +39717=>7293, +39719=>7294, +39720=>7295, +39721=>7296, +39722=>7297, +39726=>7298, +12223=>7299, +39727=>7299, +39730=>7300, +12224=>7300, +39748=>7301, +39747=>7302, +39759=>7303, +39757=>7304, +39758=>7305, +39761=>7306, +39768=>7307, +39796=>7308, +39827=>7309, +39811=>7310, +39825=>7311, +39830=>7312, +39831=>7313, +39839=>7314, +39840=>7315, +39848=>7316, +39860=>7317, +39872=>7318, +39882=>7319, +39865=>7320, +39878=>7321, +39887=>7322, +39889=>7323, +39890=>7324, +39907=>7325, +39906=>7326, +39908=>7327, +39892=>7328, +39905=>7329, +39994=>7330, +39922=>7331, +39921=>7332, +39920=>7333, +39957=>7334, +39956=>7335, +39945=>7336, +39955=>7337, +39948=>7338, +39942=>7339, +39944=>7340, +39954=>7341, +39946=>7342, +39940=>7343, +39982=>7344, +39963=>7345, +39973=>7346, +39972=>7347, +39969=>7348, +39984=>7349, +40007=>7350, +39986=>7351, +40006=>7352, +39998=>7353, +40026=>7354, +40032=>7355, +40039=>7356, +40054=>7357, +40056=>7358, +40167=>7359, +40172=>7360, +40176=>7361, +40201=>7362, +40200=>7363, +40171=>7364, +40195=>7365, +40198=>7366, +40234=>7367, +40230=>7368, +40367=>7369, +40227=>7370, +40223=>7371, +40260=>7372, +40213=>7373, +40210=>7374, +40257=>7375, +40255=>7376, +40254=>7377, +40262=>7378, +40264=>7379, +40285=>7380, +40286=>7381, +40292=>7382, +40273=>7383, +40272=>7384, +40281=>7385, +40306=>7386, +40329=>7387, +40327=>7388, +40363=>7389, +40303=>7390, +40314=>7391, +40346=>7392, +40356=>7393, +40361=>7394, +40370=>7395, +40388=>7396, +40385=>7397, +40379=>7398, +40376=>7399, +40378=>7400, +40390=>7401, +40399=>7402, +40386=>7403, +40409=>7404, +40403=>7405, +40440=>7406, +40422=>7407, +40429=>7408, +40431=>7409, +40445=>7410, +40474=>7411, +40475=>7412, +40478=>7413, +12228=>7414, +40565=>7414, +40569=>7415, +40573=>7416, +40577=>7417, +40584=>7418, +40587=>7419, +40588=>7420, +40594=>7421, +40597=>7422, +40593=>7423, +40605=>7424, +12230=>7425, +40613=>7425, +40617=>7426, +40632=>7427, +40618=>7428, +40621=>7429, +38753=>7430, +40652=>7431, +40654=>7432, +40655=>7433, +40656=>7434, +40660=>7435, +40668=>7436, +40670=>7437, +40669=>7438, +40672=>7439, +40677=>7440, +40680=>7441, +40687=>7442, +40692=>7443, +40694=>7444, +40695=>7445, +12235=>7446, +40697=>7446, +40699=>7447, +40700=>7448, +12236=>7449, +40701=>7449, +40711=>7450, +40712=>7451, +30391=>7452, +40725=>7453, +40737=>7454, +40748=>7455, +40766=>7456, +40778=>7457, +12241=>7457, +40786=>7458, +12242=>7458, +40788=>7459, +40803=>7460, +40799=>7461, +40800=>7462, +40801=>7463, +40806=>7464, +40807=>7465, +40812=>7466, +40810=>7467, +40823=>7468, +40818=>7469, +40822=>7470, +40853=>7471, +40860=>7472, +12244=>7472, +40864=>7473, +12245=>7473, +22575=>7474, +27079=>7475, +36953=>7476, +29796=>7477, +9472=>7479, +9473=>7480, +9474=>7481, +9475=>7482, +9476=>7483, +9477=>7484, +9478=>7485, +9479=>7486, +9480=>7487, +9481=>7488, +9482=>7489, +9483=>7490, +9484=>7491, +9485=>7492, +9486=>7493, +9487=>7494, +9488=>7495, +9489=>7496, +9490=>7497, +9491=>7498, +9492=>7499, +9493=>7500, +9494=>7501, +9495=>7502, +9496=>7503, +9497=>7504, +9498=>7505, +9499=>7506, +9500=>7507, +9501=>7508, +9502=>7509, +9503=>7510, +9504=>7511, +9505=>7512, +9506=>7513, +9507=>7514, +9508=>7515, +9509=>7516, +9510=>7517, +9511=>7518, +9512=>7519, +9513=>7520, +9514=>7521, +9515=>7522, +9516=>7523, +9517=>7524, +9518=>7525, +9519=>7526, +9520=>7527, +9521=>7528, +9522=>7529, +9523=>7530, +9524=>7531, +9525=>7532, +9526=>7533, +9527=>7534, +9528=>7535, +9529=>7536, +9530=>7537, +9531=>7538, +9532=>7539, +9533=>7540, +9534=>7541, +9535=>7542, +9536=>7543, +9537=>7544, +9538=>7545, +9539=>7546, +9540=>7547, +9541=>7548, +9542=>7549, +9543=>7550, +9544=>7551, +9545=>7552, +9546=>7553, +9547=>7554, +9312=>7555, +9313=>7556, +9314=>7557, +9315=>7558, +9316=>7559, +9317=>7560, +9318=>7561, +9319=>7562, +9320=>7563, +9321=>7564, +9322=>7565, +9323=>7566, +9324=>7567, +9325=>7568, +9326=>7569, +9327=>7570, +9328=>7571, +9329=>7572, +9330=>7573, +9331=>7574, +8544=>7575, +8545=>7576, +8546=>7577, +8547=>7578, +8548=>7579, +8549=>7580, +8550=>7581, +8551=>7582, +8552=>7583, +8553=>7584, +13129=>7585, +13076=>7586, +13133=>7588, +13095=>7590, +13110=>7592, +13137=>7593, +13069=>7595, +13094=>7596, +13099=>7598, +13130=>7599, +13212=>7601, +13213=>7602, +13214=>7603, +13198=>7604, +13199=>7605, +13252=>7606, +13217=>7607, +12317=>7608, +12319=>7609, +8470=>7610, +13261=>7611, +12964=>7613, +12965=>7614, +12966=>7615, +12967=>7616, +12968=>7617, +12849=>7618, +12850=>7619, +12857=>7620, +13182=>7621, +13181=>7622, +13180=>7623, +8750=>7624, +8721=>7625, +8735=>7629, +8895=>7630, +21854=>7633, +167133=>7641, +28976=>7644, +40407=>7646, +64054=>7651, +22169=>7654, +15694=>7655, +20448=>7660, +36544=>7663, +194797=>7665, +153716=>7670, +32363=>7671, +33606=>7672, +167670=>7673, +40572=>7677, +26171=>7680, +40628=>7682, +26629=>7687, +23650=>7693, +194780=>7695, +32353=>7697, +64070=>7700, +34083=>7706, +37292=>7707, +34796=>7715, +25620=>7724, +39506=>7727, +64074=>7732, +194692=>7734, +31774=>7739, +64016=>7746, +25681=>7747, +63980=>7750, +22625=>7751, +39002=>7752, +194679=>7754, +31153=>7758, +28678=>7760, +22218=>7770, +21085=>7774, +28497=>7776, +37297=>7777, +64106=>7788, +38960=>7795, +40629=>7797, +33802=>7807, +63939=>7808, +63890=>7809, +63891=>7810, +63897=>7811, +34847=>7813, +194575=>7814, +194771=>7816, +194584=>7817, +137754=>7825, +23643=>7826, +25890=>7831, +26618=>7834, +26766=>7836, +148432=>7838, +194848=>7839, +34110=>7861, +30562=>7877, +65041=>7887, +65042=>7888, +65075=>7890, +65073=>7892, +65074=>7893, +8285=>7897, +65049=>7897, +8282=>7898, +65072=>7898, +65077=>7899, +65078=>7900, +65081=>7901, +65082=>7902, +65095=>7903, +65096=>7904, +65079=>7905, +65080=>7906, +65087=>7907, +65088=>7908, +65085=>7909, +65086=>7910, +65089=>7911, +65090=>7912, +65091=>7913, +65092=>7914, +65083=>7915, +65084=>7916, +12436=>7958, +12437=>7959, +12438=>7960, +22099=>7963, +65508=>8005, +65287=>8006, +65282=>8007, +9665=>8009, +9655=>8010, +8681=>8011, +8679=>8012, +8678=>8013, +8680=>8014, +9634=>8015, +9831=>8016, +9825=>8017, +9828=>8018, +9826=>8019, +13216=>8020, +13218=>8021, +13220=>8022, +13221=>8023, +13207=>8024, +8467=>8025, +13208=>8026, +13235=>8027, +13234=>8028, +13233=>8029, +13232=>8030, +13189=>8031, +13190=>8032, +13191=>8033, +13259=>8034, +13200=>8035, +13268=>8036, +13206=>8037, +13090=>8038, +13078=>8039, +13080=>8040, +13077=>8041, +13059=>8042, +13091=>8043, +13143=>8044, +13122=>8045, +13113=>8046, +13115=>8047, +13056=>8048, +13105=>8049, +13127=>8050, +13086=>8051, +13098=>8052, +13183=>8054, +8481=>8055, +9742=>8056, +12342=>8057, +12320=>8058, +9352=>8062, +9353=>8063, +9354=>8064, +9355=>8065, +9356=>8066, +9357=>8067, +9358=>8068, +9359=>8069, +9360=>8070, +9332=>8071, +9333=>8072, +9334=>8073, +9335=>8074, +9336=>8075, +9337=>8076, +9338=>8077, +9339=>8078, +9340=>8079, +9341=>8080, +9342=>8081, +9343=>8082, +9344=>8083, +9345=>8084, +9346=>8085, +9347=>8086, +9348=>8087, +9349=>8088, +9350=>8089, +9351=>8090, +12881=>8091, +8560=>8092, +8561=>8093, +8562=>8094, +8563=>8095, +8564=>8096, +8565=>8097, +8566=>8098, +8567=>8099, +8568=>8100, +8569=>8101, +12882=>8102, +12883=>8103, +12884=>8104, +12885=>8105, +12886=>8106, +12887=>8107, +12888=>8108, +12889=>8109, +12890=>8110, +12891=>8111, +9372=>8112, +9373=>8113, +9374=>8114, +9375=>8115, +9376=>8116, +9377=>8117, +9378=>8118, +9379=>8119, +9380=>8120, +9381=>8121, +9382=>8122, +9383=>8123, +9384=>8124, +9385=>8125, +9386=>8126, +9387=>8127, +9388=>8128, +9389=>8129, +9390=>8130, +9391=>8131, +9392=>8132, +9393=>8133, +9394=>8134, +9395=>8135, +9396=>8136, +9397=>8137, +12867=>8138, +12861=>8139, +12863=>8140, +12852=>8141, +12856=>8142, +12851=>8143, +12860=>8144, +12866=>8145, +12862=>8146, +12854=>8147, +12853=>8148, +12859=>8149, +12864=>8150, +12858=>8151, +12976=>8152, +12973=>8153, +12969=>8154, +12975=>8155, +12948=>8156, +12970=>8157, +12952=>8158, +12971=>8159, +12946=>8160, +12945=>8161, +12947=>8162, +12972=>8163, +12974=>8164, +12950=>8165, +9131=>8174, +9132=>8175, +9133=>8176, +9127=>8178, +9128=>8179, +9129=>8180, +13260=>8182, +13061=>8183, +13215=>8186, +13219=>8187, +13222=>8188, +12958=>8191, +13192=>8192, +13193=>8193, +13256=>8194, +8749=>8195, +12848=>8197, +12842=>8198, +12843=>8199, +12844=>8200, +12845=>8201, +12846=>8202, +12847=>8203, +12855=>8204, +12865=>8205, +10145=>8206, +11013=>8207, +11014=>8208, +11015=>8209, +9673=>8210, +9824=>8211, +9829=>8212, +9827=>8213, +9830=>8214, +9728=>8215, +9729=>8216, +9730=>8217, +9731=>8218, +9758=>8219, +9756=>8220, +9757=>8221, +9759=>8222, +12953=>8223, +9450=>8224, +8554=>8225, +8555=>8226, +9601=>8230, +9602=>8231, +9603=>8232, +9604=>8233, +9605=>8234, +9606=>8235, +9607=>8236, +9608=>8237, +9615=>8238, +9614=>8239, +9613=>8240, +9612=>8241, +9611=>8242, +9610=>8243, +9609=>8244, +9620=>8245, +9621=>8246, +9581=>8247, +9582=>8248, +9584=>8249, +9583=>8250, +9552=>8251, +9566=>8252, +9578=>8253, +9569=>8254, +9698=>8255, +9699=>8256, +9701=>8257, +9700=>8258, +9585=>8261, +9586=>8262, +9587=>8263, +65040=>8268, +20956=>8284, +29081=>8285, +10102=>8286, +10103=>8287, +10104=>8288, +10105=>8289, +10106=>8290, +10107=>8291, +10108=>8292, +10109=>8293, +10110=>8294, +8570=>8298, +8571=>8299, +8575=>8303, +8458=>8304, +8457=>8305, +8507=>8307, +12292=>8308, +8646=>8309, +8644=>8310, +8645=>8311, +12535=>8313, +12536=>8314, +12537=>8315, +12538=>8316, +12957=>8319, +13179=>8323, +13107=>8327, +13134=>8328, +32394=>8359, +35100=>8360, +37704=>8361, +37512=>8362, +34012=>8363, +20425=>8364, +28859=>8365, +26161=>8366, +26824=>8367, +37625=>8368, +26363=>8369, +24389=>8370, +12033=>8371, +20008=>8371, +20193=>8372, +20220=>8373, +20224=>8374, +20227=>8375, +20281=>8376, +20310=>8377, +20370=>8378, +20362=>8379, +20378=>8380, +20372=>8381, +20429=>8382, +20544=>8383, +20514=>8384, +20479=>8385, +20510=>8386, +20550=>8387, +20592=>8388, +20546=>8389, +20628=>8390, +20724=>8391, +20696=>8392, +20810=>8393, +20836=>8394, +20893=>8395, +20926=>8396, +20972=>8397, +21013=>8398, +21148=>8399, +21158=>8400, +21184=>8401, +21211=>8402, +21248=>8403, +21284=>8405, +21362=>8406, +21395=>8407, +21426=>8408, +21469=>8409, +64014=>8410, +21660=>8411, +21642=>8412, +21673=>8413, +21759=>8414, +21894=>8415, +22361=>8416, +22373=>8417, +22444=>8418, +22472=>8419, +22471=>8420, +64015=>8421, +22686=>8423, +22706=>8424, +22795=>8425, +22867=>8426, +22875=>8427, +22877=>8428, +22883=>8429, +22948=>8430, +22970=>8431, +23382=>8432, +23488=>8433, +29999=>8434, +23512=>8435, +23582=>8437, +23718=>8438, +23738=>8439, +23797=>8440, +23847=>8441, +23891=>8442, +23874=>8444, +23917=>8445, +23992=>8446, +23993=>8447, +24016=>8448, +24353=>8449, +24372=>8450, +24423=>8451, +24503=>8452, +24542=>8453, +24669=>8454, +24709=>8455, +24714=>8456, +24798=>8457, +24789=>8458, +24864=>8459, +24818=>8460, +24849=>8461, +24887=>8462, +24880=>8463, +24984=>8464, +25107=>8465, +25254=>8466, +25589=>8467, +25696=>8468, +25757=>8469, +25806=>8470, +25934=>8471, +26112=>8472, +26133=>8473, +26121=>8474, +26158=>8475, +26148=>8477, +26213=>8478, +26199=>8479, +26201=>8480, +64018=>8481, +26227=>8482, +26265=>8483, +26272=>8484, +26290=>8485, +26303=>8486, +26362=>8487, +26382=>8488, +26470=>8490, +26555=>8491, +26706=>8492, +26560=>8493, +26692=>8495, +26831=>8496, +64019=>8497, +26984=>8498, +64020=>8499, +27032=>8500, +27106=>8501, +27184=>8502, +27243=>8503, +27206=>8504, +27251=>8505, +27262=>8506, +27362=>8507, +27364=>8508, +27606=>8509, +27711=>8510, +27740=>8511, +27782=>8512, +27759=>8513, +27866=>8514, +27908=>8515, +28039=>8516, +28015=>8517, +28054=>8518, +28076=>8519, +28111=>8520, +28152=>8521, +28146=>8522, +28156=>8523, +28217=>8524, +28252=>8525, +28199=>8526, +28220=>8527, +28351=>8528, +28552=>8529, +28597=>8530, +28661=>8531, +28677=>8532, +28679=>8533, +28712=>8534, +28805=>8535, +28843=>8536, +28943=>8537, +28932=>8538, +29020=>8539, +28998=>8540, +28999=>8541, +29121=>8543, +29182=>8544, +29361=>8545, +29374=>8546, +29476=>8547, +64022=>8548, +29559=>8549, +29629=>8550, +29641=>8551, +29654=>8552, +29667=>8553, +29650=>8554, +29703=>8555, +29685=>8556, +29734=>8557, +29738=>8558, +29737=>8559, +29742=>8560, +29833=>8562, +29855=>8563, +29953=>8564, +30063=>8565, +30338=>8566, +30364=>8567, +30366=>8568, +30363=>8569, +30374=>8570, +64023=>8571, +30534=>8572, +21167=>8573, +30753=>8574, +30798=>8575, +30820=>8576, +30842=>8577, +31024=>8578, +64024=>8579, +64025=>8580, +64026=>8581, +31124=>8582, +64027=>8583, +31131=>8584, +31441=>8585, +31463=>8586, +64028=>8587, +31467=>8588, +31646=>8589, +64029=>8590, +32072=>8591, +32183=>8593, +32160=>8594, +32214=>8595, +32338=>8596, +32583=>8597, +32673=>8598, +64030=>8599, +33537=>8600, +33634=>8601, +33663=>8602, +33735=>8603, +33782=>8604, +33864=>8605, +33972=>8606, +34131=>8607, +34137=>8608, +34155=>8609, +64031=>8610, +34224=>8611, +64032=>8612, +64033=>8613, +34823=>8614, +35061=>8615, +35346=>8616, +35383=>8617, +35449=>8618, +35495=>8619, +35518=>8620, +35551=>8621, +64034=>8622, +35574=>8623, +35667=>8624, +35711=>8625, +36080=>8626, +36084=>8627, +36114=>8628, +36214=>8629, +64035=>8630, +36559=>8631, +64037=>8633, +36967=>8634, +37086=>8635, +64038=>8636, +37141=>8637, +37159=>8638, +37338=>8639, +37335=>8640, +37342=>8641, +37357=>8642, +37358=>8643, +37348=>8644, +37349=>8645, +37382=>8646, +37392=>8647, +37386=>8648, +37434=>8649, +37440=>8650, +37436=>8651, +37454=>8652, +37465=>8653, +37457=>8654, +37433=>8655, +37479=>8656, +37543=>8657, +37495=>8658, +37496=>8659, +37607=>8660, +37591=>8661, +37593=>8662, +37584=>8663, +64039=>8664, +37589=>8665, +37600=>8666, +37587=>8667, +37669=>8668, +37665=>8669, +37627=>8670, +64040=>8671, +37662=>8672, +37631=>8673, +37661=>8674, +37634=>8675, +37744=>8676, +37719=>8677, +37796=>8678, +37830=>8679, +37854=>8680, +37880=>8681, +37937=>8682, +37957=>8683, +37960=>8684, +38290=>8685, +64041=>8687, +38557=>8688, +38575=>8689, +38707=>8690, +38715=>8691, +38723=>8692, +38733=>8693, +38735=>8694, +12205=>8695, +38737=>8695, +38999=>8697, +39013=>8698, +64042=>8699, +64043=>8700, +39207=>8701, +64044=>8702, +39326=>8703, +39502=>8704, +39641=>8705, +39644=>8706, +39797=>8707, +39794=>8708, +39823=>8709, +39857=>8710, +39867=>8711, +39936=>8712, +40304=>8713, +40299=>8714, +64045=>8715, +40473=>8716, +40657=>8717, +8364=>9354, +8486=>9355, +64256=>9358, +64259=>9359, +64260=>9360, +257=>9361, +299=>9362, +363=>9363, +275=>9364, +333=>9365, +256=>9366, +298=>9367, +362=>9368, +274=>9369, +332=>9370, +8539=>9371, +8540=>9372, +8541=>9373, +8542=>9374, +8531=>9375, +8532=>9376, +8304=>9377, +8308=>9378, +8309=>9379, +8310=>9380, +8311=>9381, +8312=>9382, +8313=>9383, +8320=>9384, +8321=>9385, +8322=>9386, +8323=>9387, +8324=>9388, +8325=>9389, +8326=>9390, +8327=>9391, +8328=>9392, +8329=>9393, +461=>9394, +282=>9395, +7868=>9397, +463=>9398, +296=>9400, +465=>9401, +467=>9403, +366=>9404, +360=>9405, +462=>9406, +283=>9407, +7869=>9409, +464=>9410, +297=>9412, +466=>9413, +468=>9415, +367=>9416, +361=>9417, +593=>9418, +8049=>9419, +8048=>9420, +509=>9421, +596=>9423, +601=>9426, +602=>9429, +603=>9432, +8051=>9433, +8050=>9434, +567=>9435, +331=>9436, +629=>9437, +652=>9438, +658=>9441, +643=>9442, +720=>9443, +8534=>9785, +8535=>9786, +8536=>9787, +8537=>9788, +8538=>9789, +12832=>10126, +12833=>10127, +12834=>10128, +12835=>10129, +12836=>10130, +12837=>10131, +12838=>10132, +12839=>10133, +12840=>10134, +12841=>10135, +12892=>10244, +12893=>10245, +12894=>10246, +12895=>10247, +12977=>10248, +12978=>10249, +12979=>10250, +12980=>10251, +12981=>10252, +12982=>10253, +12983=>10254, +12984=>10255, +12985=>10256, +12986=>10257, +12987=>10258, +12988=>10259, +12989=>10260, +12990=>10261, +12991=>10262, +9424=>10313, +9425=>10314, +9426=>10315, +9427=>10316, +9428=>10317, +9429=>10318, +9430=>10319, +9431=>10320, +9432=>10321, +9433=>10322, +9434=>10323, +9435=>10324, +9436=>10325, +9437=>10326, +9438=>10327, +9439=>10328, +9440=>10329, +9441=>10330, +9442=>10331, +9443=>10332, +9444=>10333, +9445=>10334, +9446=>10335, +9447=>10336, +9448=>10337, +9449=>10338, +9398=>10339, +9399=>10340, +9400=>10341, +9401=>10342, +9402=>10343, +9403=>10344, +9404=>10345, +9405=>10346, +9406=>10347, +9407=>10348, +9408=>10349, +9409=>10350, +9410=>10351, +9411=>10352, +9412=>10353, +9413=>10354, +9414=>10355, +9415=>10356, +9416=>10357, +9417=>10358, +9418=>10359, +9419=>10360, +9420=>10361, +9421=>10362, +9422=>10363, +9423=>10364, +13008=>10413, +13009=>10414, +13010=>10415, +13011=>10416, +13012=>10417, +13013=>10418, +13014=>10419, +13015=>10420, +13016=>10421, +13017=>10422, +13018=>10423, +13019=>10424, +13020=>10425, +13021=>10426, +13022=>10427, +13023=>10428, +13024=>10429, +13025=>10430, +13026=>10431, +13027=>10432, +13028=>10433, +13029=>10434, +13030=>10435, +13031=>10436, +13032=>10437, +13033=>10438, +13034=>10439, +13035=>10440, +13036=>10441, +13037=>10442, +13038=>10443, +13039=>10444, +13040=>10445, +13041=>10446, +13042=>10447, +13043=>10448, +13044=>10449, +13045=>10450, +13046=>10451, +13047=>10452, +13048=>10453, +13049=>10454, +13050=>10455, +13051=>10456, +13052=>10457, +13053=>10458, +13054=>10459, +12928=>10461, +12929=>10462, +12930=>10463, +12931=>10464, +12932=>10465, +12933=>10466, +12934=>10467, +12935=>10468, +12936=>10469, +12937=>10470, +12944=>10471, +12938=>10472, +12939=>10473, +12940=>10474, +12941=>10475, +12942=>10476, +12943=>10477, +12959=>10479, +12960=>10486, +12961=>10487, +12955=>10488, +12954=>10489, +12963=>10490, +12962=>10491, +12951=>10492, +12956=>10494, +12949=>10495, +9676=>10502, +9471=>10503, +10111=>10514, +9451=>10515, +9452=>10516, +9453=>10517, +9454=>10518, +9455=>10519, +9456=>10520, +9457=>10521, +9458=>10522, +9459=>10523, +9460=>10524, +8414=>11035, +13274=>11851, +8448=>11855, +13250=>11856, +8453=>11859, +13169=>11861, +13197=>11864, +13211=>11865, +13271=>11869, +13272=>11870, +13057=>11874, +13058=>11875, +13060=>11876, +13062=>11877, +13064=>11879, +13063=>11881, +13066=>11882, +13065=>11884, +13067=>11886, +13068=>11888, +13070=>11889, +13071=>11890, +13072=>11891, +13073=>11892, +13074=>11893, +13075=>11894, +13079=>11896, +13081=>11898, +13082=>11900, +13083=>11901, +13084=>11902, +13085=>11903, +13087=>11904, +13088=>11905, +13089=>11906, +13092=>11907, +13093=>11909, +13096=>11912, +13097=>11913, +13101=>11915, +13102=>11918, +13103=>11919, +13104=>11920, +13106=>11921, +13108=>11924, +13109=>11925, +13116=>11926, +13111=>11930, +13112=>11932, +13114=>11933, +13117=>11934, +13121=>11935, +13118=>11936, +13119=>11937, +13120=>11938, +13123=>11939, +13124=>11940, +13125=>11941, +13126=>11942, +13128=>11943, +13131=>11944, +13132=>11945, +13135=>11946, +13136=>11947, +13138=>11950, +13140=>11951, +13139=>11954, +13141=>11955, +13142=>11956, +8501=>12089, +976=>12090, +8714=>12091, +8463=>12092, +981=>12094, +987=>12095, +977=>12096, +9832=>12098, +9833=>12099, +9836=>12100, +12347=>12106, +12339=>12108, +12340=>12109, +12341=>12110, +8252=>12111, +8265=>12112, +8723=>12118, +8771=>12120, +8818=>12121, +8819=>12122, +12312=>12129, +12313=>12130, +65375=>12131, +65376=>12132, +9115=>12143, +9117=>12144, +9118=>12145, +9120=>12146, +9121=>12151, +9123=>12152, +9124=>12153, +9126=>12154, +9116=>12167, +9119=>12167, +9122=>12167, +9125=>12167, +9130=>12167, +9986=>12176, +12349=>12179, +12447=>12181, +8709=>12184, +8864=>12185, +8854=>12186, +8856=>12187, +8853=>12188, +8855=>12189, +9888=>12192, +9664=>12194, +9654=>12195, +8656=>12200, +8596=>12201, +8600=>12202, +8601=>12203, +8598=>12204, +8599=>12205, +8652=>12206, +8651=>12207, +12336=>12218, +8967=>12219, +10048=>12228, +10047=>12229, +9643=>12237, +9642=>12239, +10010=>12241, +9702=>12254, +10070=>12259, +65093=>12639, +65094=>12640, +64103=>13320, +64098=>13321, +32227=>13322, +12232=>13323, +40643=>13323, +28331=>13324, +64082=>13325, +64061=>13326, +64069=>13327, +64062=>13328, +27114=>13329, +28212=>13330, +64096=>13331, +64071=>13332, +64056=>13333, +64066=>13334, +64078=>13335, +34395=>13336, +64105=>13337, +64052=>13338, +64099=>13339, +25581=>13340, +25802=>13341, +30799=>13342, +64084=>13343, +63856=>13344, +64077=>13345, +64097=>13346, +64072=>13347, +64076=>13348, +64091=>13349, +64092=>13350, +64081=>13351, +64067=>13352, +64090=>13353, +28041=>13354, +29376=>13355, +194885=>13357, +64086=>13358, +64080=>13359, +64049=>13360, +64059=>13361, +24034=>13362, +64063=>13363, +64101=>13364, +21373=>13365, +64055=>13366, +64095=>13367, +24501=>13368, +64064=>13369, +64083=>13371, +64085=>13373, +64104=>13374, +64068=>13375, +64089=>13376, +26202=>13377, +64053=>13378, +64075=>13379, +64100=>13380, +64065=>13381, +64048=>13382, +64057=>13384, +64051=>13385, +27493=>13386, +64058=>13387, +27599=>13388, +64050=>13389, +25150=>13390, +64079=>13391, +63773=>13392, +63964=>13393, +63798=>13394, +28122=>13395, +63952=>13396, +26310=>13397, +27511=>13398, +64087=>13399, +37706=>13400, +37636=>13402, +133390=>13523, +35999=>13644, +11991=>13645, +11965=>13646, +158033=>13646, +37555=>13652, +38321=>13653, +194812=>13656, +194965=>13670, +194794=>13679, +26478=>13681, +11974=>13682, +194594=>13684, +156194=>13691, +13314=>13698, +26083=>13701, +134071=>13706, +171339=>13717, +194611=>13719, +24378=>13720, +11945=>13729, +20465=>13731, +63753=>13739, +11964=>13747, +194732=>13750, +26435=>13751, +133732=>13755, +35329=>13756, +25142=>13757, +21555=>13760, +23067=>13761, +25221=>13765, +194819=>13768, +21567=>13775, +27506=>13785, +29986=>13790, +19256=>13791, +24063=>13794, +194827=>13801, +29626=>13802, +134047=>13803, +194600=>13807, +194849=>13809, +194623=>13815, +194675=>13832, +11916=>13833, +11917=>13834, +23577=>13835, +131083=>13839, +23426=>13840, +194642=>13841, +11997=>13847, +11999=>13848, +39136=>13848, +11998=>13849, +169599=>13849, +14221=>13850, +11927=>13852, +14586=>13852, +194887=>13854, +11909=>13856, +20155=>13856, +131490=>13857, +13599=>13865, +194738=>13867, +11971=>13870, +35200=>13870, +31237=>13875, +35498=>13880, +32085=>13882, +28568=>13884, +25591=>13892, +30246=>13893, +11978=>13898, +163767=>13898, +146686=>13904, +13351=>13910, +33067=>13913, +194842=>13916, +11950=>13922, +154327=>13922, +194714=>13928, +194831=>13932, +22305=>13952, +135741=>13953, +194586=>13954, +64003=>13956, +21534=>13964, +15240=>13965, +20839=>13966, +63839=>13971, +20023=>13981, +11946=>13995, +150804=>13995, +24421=>13996, +23020=>13997, +194658=>13998, +24217=>14000, +13416=>14047, +40884=>14048, +21200=>14056, +38376=>14061, +26625=>14066, +195024=>14068, +195039=>14069, +153215=>14075, +11959=>14078, +36534=>14083, +63775=>14084, +63875=>14088, +31867=>14094, +63906=>14095, +63898=>14097, +11961=>14099, +32770=>14099, +157360=>14100, +11911=>14105, +132648=>14105, +131210=>14108, +133508=>14109, +194604=>14109, +11915=>14110, +13630=>14110, +21589=>14115, +22841=>14117, +23414=>14120, +194669=>14121, +23572=>14122, +14306=>14123, +23782=>14124, +20040=>14126, +194742=>14129, +158105=>14134, +25371=>14135, +26211=>14138, +194779=>14140, +27126=>14143, +27014=>14144, +27596=>14148, +28183=>14150, +27818=>14153, +11942=>14157, +20012=>14157, +29935=>14160, +30069=>14161, +30188=>14162, +30286=>14163, +16305=>14164, +30570=>14165, +30633=>14166, +31571=>14173, +16996=>14176, +194924=>14180, +32328=>14183, +132415=>14188, +11955=>14189, +156266=>14189, +33089=>14194, +17491=>14195, +33401=>14197, +11966=>14197, +64094=>14198, +11967=>14198, +64093=>14199, +11968=>14199, +20857=>14201, +33626=>14202, +17701=>14206, +34292=>14208, +131248=>14209, +34429=>14214, +13358=>14216, +35014=>14217, +18406=>14224, +36808=>14233, +166279=>14253, +167447=>14256, +38969=>14259, +39432=>14266, +39903=>14271, +148206=>14282, +21385=>14288, +64017=>14290, +194785=>14291, +146622=>14293, +132625=>14294, +19972=>14296, +19973=>14297, +19999=>14298, +20011=>14299, +20015=>14300, +20016=>14301, +20032=>14302, +20033=>14303, +20036=>14304, +11907=>14305, +20058=>14305, +20095=>14306, +20109=>14307, +20118=>14308, +20153=>14309, +20176=>14310, +20192=>14311, +20221=>14312, +20223=>14313, +20235=>14314, +20245=>14315, +20320=>14316, +20283=>14317, +20297=>14318, +20308=>14319, +20346=>14320, +20349=>14321, +20350=>14322, +20375=>14323, +20414=>14324, +20431=>14325, +20477=>14326, +20480=>14327, +20481=>14328, +20496=>14329, +20507=>14330, +20519=>14331, +20526=>14332, +20567=>14333, +20582=>14334, +20586=>14335, +20539=>14336, +20623=>14337, +20630=>14338, +20636=>14339, +20684=>14340, +20710=>14341, +20713=>14342, +20719=>14343, +20744=>14344, +20747=>14345, +20752=>14346, +20763=>14347, +20766=>14348, +20831=>14349, +20897=>14350, +20924=>14351, +20974=>14353, +20980=>14354, +20993=>14355, +11913=>14356, +20994=>14356, +21011=>14357, +21065=>14358, +21089=>14359, +21094=>14360, +21139=>14361, +21192=>14362, +21232=>14363, +21258=>14364, +21259=>14365, +21310=>14366, +21324=>14367, +21323=>14368, +21345=>14369, +21356=>14370, +21419=>14371, +21466=>14372, +21478=>14373, +21493=>14374, +21543=>14375, +21581=>14376, +21606=>14377, +21611=>14378, +21620=>14379, +21645=>14380, +21654=>14381, +21665=>14382, +21677=>14383, +21689=>14384, +21695=>14385, +21702=>14386, +21709=>14387, +21774=>14388, +21803=>14389, +21813=>14390, +21834=>14391, +21856=>14392, +21896=>14394, +21902=>14395, +22024=>14396, +22030=>14397, +22031=>14398, +22071=>14399, +22079=>14400, +22089=>14401, +22091=>14402, +22095=>14403, +22118=>14404, +22121=>14405, +22127=>14406, +22129=>14407, +22130=>14408, +22165=>14409, +22170=>14410, +22188=>14411, +22189=>14412, +22193=>14413, +22217=>14414, +22237=>14415, +22244=>14416, +22282=>14417, +22293=>14418, +22307=>14419, +22319=>14420, +22323=>14421, +22324=>14422, +22348=>14423, +22384=>14424, +22412=>14425, +22428=>14426, +22456=>14427, +22502=>14428, +22509=>14429, +22517=>14430, +22518=>14431, +22527=>14432, +22537=>14433, +22560=>14434, +22578=>14435, +22652=>14436, +22656=>14437, +22697=>14438, +22734=>14439, +22736=>14440, +22740=>14441, +22746=>14442, +22761=>14443, +22796=>14444, +22820=>14445, +22831=>14446, +22881=>14447, +22893=>14448, +22986=>14449, +22994=>14450, +23005=>14451, +23011=>14452, +23012=>14453, +23044=>14454, +23052=>14455, +23075=>14456, +23111=>14457, +23125=>14458, +23139=>14459, +23149=>14460, +23166=>14461, +23198=>14462, +23207=>14463, +23212=>14464, +23219=>14465, +23264=>14466, +23296=>14467, +23321=>14468, +23333=>14469, +23341=>14470, +23361=>14471, +23420=>14472, +23422=>14473, +23423=>14474, +23434=>14475, +11919=>14476, +23587=>14476, +23595=>14477, +23600=>14478, +23651=>14479, +23657=>14480, +23676=>14481, +23755=>14482, +23762=>14483, +23796=>14484, +23844=>14485, +23846=>14486, +23875=>14487, +23878=>14488, +23882=>14489, +23954=>14490, +23956=>14491, +23961=>14492, +23968=>14493, +24024=>14494, +24032=>14495, +24056=>14496, +24064=>14497, +24082=>14498, +24084=>14499, +24085=>14500, +24088=>14501, +24110=>14502, +24152=>14503, +24171=>14504, +24172=>14505, +24232=>14506, +24234=>14507, +24254=>14508, +24255=>14509, +24274=>14511, +24327=>14512, +24334=>14513, +24348=>14514, +24349=>14515, +24354=>14516, +24360=>14517, +24374=>14518, +24379=>14519, +24384=>14520, +12089=>14521, +24400=>14521, +24408=>14522, +24420=>14523, +24457=>14524, +24476=>14525, +24487=>14526, +24484=>14527, +24495=>14528, +24504=>14529, +11926=>14530, +24516=>14530, +24521=>14531, +24545=>14532, +24553=>14533, +24557=>14534, +24572=>14535, +24599=>14536, +24602=>14537, +24627=>14538, +24673=>14539, +24703=>14540, +24734=>14541, +24740=>14542, +24752=>14543, +24779=>14544, +24795=>14545, +24824=>14546, +24850=>14547, +24851=>14548, +24852=>14549, +24860=>14550, +24956=>14551, +24973=>14552, +24991=>14553, +25000=>14554, +25026=>14555, +25055=>14556, +25109=>14557, +25129=>14558, +25155=>14559, +25158=>14560, +11928=>14561, +25164=>14561, +25169=>14562, +25174=>14563, +25284=>14564, +25340=>14565, +25354=>14566, +25357=>14567, +25368=>14568, +25401=>14569, +25410=>14570, +25411=>14571, +25445=>14572, +25460=>14573, +25469=>14574, +25476=>14575, +25479=>14576, +25488=>14577, +25502=>14578, +25553=>14579, +25564=>14580, +25609=>14581, +25616=>14582, +25634=>14583, +25684=>14584, +25691=>14585, +25709=>14586, +25723=>14587, +25790=>14588, +25791=>14589, +25829=>14590, +25847=>14591, +25851=>14592, +25860=>14593, +25878=>14594, +25881=>14595, +25927=>14596, +25959=>14597, +25985=>14598, +25989=>14599, +26050=>14600, +26096=>14601, +26098=>14602, +26156=>14603, +26188=>14604, +26203=>14605, +26204=>14606, +26209=>14607, +26219=>14608, +26276=>14610, +26312=>14611, +26348=>14612, +26373=>14613, +26387=>14614, +26419=>14615, +26440=>14616, +26444=>14617, +26486=>14618, +26491=>14619, +26544=>14620, +26546=>14621, +26617=>14622, +26583=>14623, +26585=>14624, +26608=>14625, +26668=>14626, +26672=>14627, +26673=>14628, +26715=>14629, +26738=>14630, +26741=>14631, +26746=>14632, +26756=>14633, +26789=>14634, +26802=>14635, +26832=>14636, +26838=>14637, +26856=>14638, +26861=>14639, +26864=>14640, +26865=>14641, +26876=>14642, +26897=>14643, +26899=>14644, +26933=>14645, +26939=>14646, +26967=>14647, +26979=>14648, +26994=>14649, +27007=>14650, +27008=>14651, +27046=>14652, +27053=>14653, +27063=>14654, +27094=>14655, +27095=>14656, +27137=>14657, +27151=>14658, +27157=>14659, +27176=>14660, +27188=>14661, +27198=>14662, +27205=>14663, +27216=>14664, +27217=>14665, +27222=>14666, +27227=>14667, +27267=>14668, +27273=>14669, +27281=>14670, +27293=>14671, +27294=>14672, +27295=>14673, +27356=>14674, +27367=>14675, +27372=>14676, +27422=>14677, +27428=>14678, +27445=>14679, +27462=>14680, +27478=>14681, +27488=>14682, +27522=>14683, +27582=>14684, +27617=>14685, +27633=>14686, +27664=>14687, +27699=>14688, +27701=>14689, +11937=>14689, +11938=>14690, +27737=>14691, +27766=>14692, +27771=>14693, +27781=>14694, +27797=>14695, +27804=>14696, +27856=>14697, +27860=>14698, +27862=>14699, +27872=>14700, +27883=>14701, +27884=>14702, +27886=>14703, +27914=>14704, +27918=>14705, +27921=>14706, +27950=>14707, +27991=>14708, +27998=>14709, +28005=>14710, +28034=>14711, +28095=>14712, +28100=>14713, +28106=>14714, +28118=>14715, +28137=>14716, +28194=>14717, +28241=>14718, +28359=>14719, +28362=>14720, +28366=>14721, +28413=>14722, +28442=>14723, +28458=>14724, +28463=>14725, +28467=>14726, +28506=>14727, +28510=>14728, +28514=>14729, +28541=>14730, +28555=>14731, +28557=>14732, +28562=>14733, +28564=>14734, +28570=>14735, +28583=>14736, +28584=>14737, +28598=>14738, +28634=>14739, +28638=>14740, +28729=>14742, +28732=>14743, +28756=>14745, +28765=>14746, +28766=>14747, +28772=>14748, +11939=>14749, +28780=>14749, +28798=>14750, +28801=>14751, +28821=>14752, +28855=>14753, +28883=>14754, +28884=>14755, +28888=>14756, +28892=>14757, +28935=>14758, +28960=>14759, +28977=>14760, +29002=>14761, +29010=>14762, +29024=>14763, +29049=>14764, +29074=>14765, +29131=>14767, +29139=>14768, +29142=>14769, +29184=>14770, +29213=>14771, +29227=>14772, +29240=>14773, +29249=>14774, +29267=>14775, +29269=>14776, +29270=>14777, +29276=>14778, +29325=>14779, +11944=>14780, +29357=>14780, +29364=>14781, +29383=>14782, +29435=>14783, +29444=>14784, +29445=>14785, +29480=>14786, +29489=>14787, +29507=>14788, +29548=>14789, +29564=>14790, +29571=>14791, +29573=>14792, +29574=>14793, +29589=>14794, +29598=>14795, +29599=>14796, +29600=>14797, +29606=>14798, +29611=>14799, +29621=>14800, +29623=>14801, +29628=>14802, +29647=>14803, +29657=>14804, +29673=>14805, +29684=>14806, +29693=>14807, +29700=>14808, +29706=>14809, +29722=>14810, +29723=>14811, +29732=>14812, +29736=>14813, +29740=>14814, +29743=>14815, +29744=>14816, +29745=>14817, +29753=>14818, +29764=>14819, +29767=>14820, +29771=>14821, +29773=>14822, +29777=>14823, +29783=>14824, +29798=>14825, +29803=>14826, +29809=>14827, +29824=>14828, +29829=>14829, +29830=>14830, +29831=>14831, +29840=>14832, +29848=>14833, +29852=>14834, +29856=>14835, +29859=>14836, +29864=>14837, +29867=>14838, +29877=>14839, +29887=>14840, +29896=>14841, +29914=>14842, +29918=>14843, +30030=>14844, +30073=>14845, +30081=>14846, +30096=>14847, +12135=>14848, +30098=>14848, +30099=>14849, +30132=>14850, +30180=>14851, +30201=>14852, +30208=>14853, +30218=>14854, +30229=>14855, +30230=>14856, +30233=>14857, +30238=>14858, +30253=>14859, +30261=>14860, +30275=>14861, +30283=>14862, +30309=>14863, +30317=>14864, +30319=>14865, +30321=>14866, +30324=>14867, +30372=>14868, +30373=>14869, +30405=>14870, +30412=>14871, +30444=>14872, +30460=>14873, +30516=>14874, +30518=>14875, +30556=>14876, +30559=>14877, +30560=>14878, +30578=>14879, +30589=>14880, +30613=>14881, +30634=>14882, +30694=>14883, +30704=>14884, +30708=>14885, +30726=>14886, +30754=>14887, +30765=>14888, +30766=>14889, +30768=>14890, +30773=>14891, +30824=>14892, +30878=>14893, +30920=>14894, +30924=>14895, +30926=>14896, +30948=>14897, +30944=>14898, +30945=>14899, +30962=>14900, +30967=>14901, +30971=>14902, +31025=>14903, +11949=>14905, +31035=>14905, +31037=>14906, +31045=>14907, +31067=>14908, +31068=>14909, +31115=>14910, +31126=>14911, +31128=>14912, +12145=>14913, +31160=>14913, +31163=>14914, +31178=>14915, +31194=>14916, +31235=>14917, +31241=>14918, +31249=>14919, +31262=>14920, +31277=>14921, +31289=>14922, +31301=>14923, +31308=>14924, +31325=>14925, +31341=>14927, +31352=>14928, +31392=>14929, +31395=>14930, +31411=>14931, +31419=>14932, +31420=>14933, +31430=>14934, +31495=>14935, +31508=>14936, +31527=>14937, +31537=>14938, +31559=>14939, +31566=>14940, +31584=>14941, +31593=>14942, +31597=>14943, +31602=>14944, +31633=>14945, +31663=>14946, +31703=>14947, +31705=>14948, +31755=>14949, +31759=>14950, +31776=>14951, +31782=>14952, +31793=>14953, +31798=>14954, +31825=>14955, +31833=>14956, +31847=>14957, +31854=>14958, +31856=>14959, +31932=>14960, +31935=>14961, +31944=>14962, +31945=>14963, +31959=>14964, +31961=>14965, +31965=>14966, +31979=>14967, +32007=>14968, +32008=>14969, +32009=>14970, +32019=>14971, +32029=>14972, +32035=>14973, +32065=>14974, +32083=>14975, +32089=>14976, +32093=>14977, +32122=>14978, +32134=>14979, +32139=>14980, +32140=>14981, +32204=>14982, +32235=>14983, +32241=>14984, +32249=>14985, +32264=>14986, +32273=>14987, +32277=>14988, +32288=>14989, +32327=>14990, +32354=>14991, +32366=>14992, +32371=>14993, +32397=>14994, +32401=>14995, +32408=>14996, +32580=>14997, +32591=>14998, +11947=>14999, +11954=>14999, +32594=>14999, +11953=>15000, +32595=>15000, +32609=>15001, +32657=>15002, +32703=>15003, +32718=>15004, +32735=>15005, +32741=>15006, +32748=>15007, +32750=>15008, +32751=>15009, +32762=>15010, +32782=>15011, +32785=>15012, +32788=>15013, +32804=>15014, +32806=>15015, +32826=>15016, +32828=>15017, +32864=>15018, +32881=>15019, +32885=>15020, +32926=>15021, +32934=>15022, +32939=>15023, +32983=>15024, +32984=>15025, +33046=>15026, +33048=>15027, +33082=>15028, +33098=>15029, +33100=>15030, +33153=>15031, +33156=>15032, +33204=>15033, +33231=>15034, +33273=>15035, +33283=>15036, +33313=>15037, +33330=>15038, +33332=>15039, +33350=>15040, +33355=>15041, +33359=>15042, +33422=>15043, +33454=>15044, +33463=>15045, +33470=>15046, +33478=>15047, +33534=>15048, +33603=>15049, +33617=>15050, +33621=>15051, +33670=>15052, +33677=>15053, +33682=>15054, +33688=>15055, +33705=>15056, +33727=>15057, +33728=>15058, +33770=>15059, +33807=>15060, +33809=>15061, +33866=>15062, +33910=>15063, +33960=>15064, +33967=>15065, +33984=>15066, +33986=>15067, +34032=>15068, +34045=>15069, +34060=>15070, +34100=>15071, +34142=>15072, +34191=>15073, +34231=>15074, +34254=>15075, +34221=>15076, +34322=>15077, +34345=>15078, +34386=>15079, +34403=>15080, +34412=>15081, +34415=>15082, +34426=>15083, +34445=>15084, +34449=>15085, +34456=>15086, +34471=>15087, +34472=>15088, +34554=>15089, +34557=>15090, +34571=>15091, +34579=>15092, +34585=>15093, +34590=>15094, +34600=>15095, +34622=>15096, +34673=>15097, +34696=>15098, +34713=>15099, +34732=>15100, +34733=>15101, +34741=>15102, +34774=>15103, +34795=>15104, +34797=>15105, +34817=>15106, +34822=>15108, +34827=>15109, +34836=>15110, +34844=>15111, +34902=>15112, +34911=>15113, +11970=>15114, +34916=>15114, +34968=>15115, +34986=>15116, +35005=>15117, +35006=>15118, +35018=>15119, +35026=>15120, +35035=>15121, +35056=>15122, +35057=>15123, +35078=>15124, +35096=>15125, +35097=>15126, +35098=>15127, +35111=>15128, +35120=>15129, +35134=>15130, +35195=>15131, +35284=>15132, +35286=>15133, +35301=>15134, +35313=>15135, +35335=>15136, +35343=>15137, +35349=>15138, +35362=>15139, +35406=>15140, +35455=>15141, +35572=>15142, +35615=>15143, +35639=>15144, +35651=>15145, +35652=>15146, +35668=>15147, +35740=>15148, +35742=>15149, +35911=>15150, +35924=>15151, +35955=>15152, +36004=>15153, +36057=>15154, +36065=>15155, +36088=>15156, +36094=>15157, +36123=>15158, +36201=>15159, +36204=>15160, +36228=>15161, +36237=>15162, +36245=>15163, +36262=>15164, +36294=>15165, +36302=>15166, +36324=>15167, +36332=>15168, +36384=>15169, +36427=>15170, +36460=>15171, +36464=>15172, +36474=>15173, +36498=>15174, +36526=>15175, +36531=>15176, +36561=>15177, +36564=>15178, +36601=>15179, +36631=>15180, +36662=>15181, +36774=>15182, +12193=>15183, +36789=>15183, +11981=>15184, +36790=>15184, +36832=>15186, +36836=>15187, +36854=>15188, +36866=>15189, +36908=>15190, +36932=>15191, +37000=>15192, +37013=>15193, +37017=>15194, +37019=>15195, +37026=>15196, +37044=>15197, +37079=>15198, +37085=>15199, +37108=>15200, +37143=>15201, +37148=>15202, +37169=>15203, +37178=>15204, +37181=>15205, +37192=>15206, +37211=>15207, +37217=>15208, +37220=>15209, +37262=>15210, +37278=>15211, +37288=>15212, +37293=>15213, +37294=>15214, +37298=>15215, +37308=>15216, +37360=>15217, +37367=>15218, +37371=>15219, +37383=>15220, +37416=>15221, +37427=>15222, +37432=>15223, +37443=>15224, +37447=>15225, +37455=>15226, +37472=>15227, +37570=>15228, +37579=>15229, +37580=>15230, +37599=>15231, +37645=>15232, +37653=>15233, +37663=>15234, +37671=>15235, +37703=>15236, +37714=>15237, +37738=>15239, +37741=>15240, +37787=>15241, +37818=>15242, +37801=>15243, +37825=>15244, +37834=>15245, +37858=>15246, +37882=>15247, +37885=>15248, +37903=>15249, +37940=>15250, +37951=>15251, +37973=>15252, +37995=>15253, +38002=>15254, +11986=>15255, +38264=>15255, +38310=>15256, +38313=>15257, +38324=>15259, +38333=>15260, +38362=>15261, +11983=>15262, +11990=>15262, +38429=>15262, +38465=>15263, +38488=>15264, +38532=>15265, +38564=>15266, +38569=>15267, +38610=>15268, +195060=>15269, +38622=>15270, +38633=>15271, +38641=>15272, +38658=>15273, +38665=>15274, +38746=>15275, +38755=>15276, +38766=>15277, +38771=>15278, +38810=>15279, +38818=>15280, +38837=>15281, +38838=>15282, +38873=>15283, +38878=>15284, +38900=>15285, +38922=>15286, +38926=>15287, +38942=>15288, +38947=>15289, +38955=>15290, +38974=>15291, +38994=>15292, +38995=>15293, +39001=>15294, +39020=>15295, +39096=>15296, +39098=>15297, +39103=>15298, +39112=>15299, +39141=>15300, +39218=>15301, +39219=>15302, +39232=>15303, +39245=>15304, +39260=>15305, +39263=>15306, +39345=>15307, +39353=>15308, +39354=>15309, +39369=>15310, +39426=>15311, +39446=>15312, +39460=>15313, +39463=>15314, +39469=>15315, +39470=>15316, +39478=>15317, +39480=>15318, +39498=>15319, +39510=>15320, +39605=>15321, +39606=>15322, +39673=>15323, +39683=>15324, +39712=>15325, +39731=>15326, +39732=>15327, +39795=>15328, +39801=>15329, +39847=>15330, +39873=>15331, +39879=>15332, +39895=>15333, +39911=>15334, +39915=>15335, +39927=>15336, +39930=>15337, +39933=>15338, +39947=>15339, +39975=>15340, +39978=>15341, +39990=>15342, +40001=>15343, +40019=>15344, +40035=>15345, +40048=>15346, +40055=>15347, +40194=>15348, +40258=>15349, +40263=>15350, +40291=>15351, +40297=>15352, +40316=>15353, +40318=>15354, +40333=>15355, +40369=>15356, +40387=>15357, +40391=>15358, +40406=>15359, +40415=>15360, +40427=>15361, +40436=>15362, +40469=>15363, +40477=>15364, +40612=>15365, +40616=>15366, +40620=>15367, +40679=>15368, +40686=>15369, +40720=>15370, +40722=>15371, +40727=>15372, +40729=>15373, +40751=>15374, +40759=>15375, +40761=>15376, +40769=>15377, +40773=>15378, +40791=>15379, +40808=>15380, +40817=>15381, +40821=>15382, +40848=>15383, +40852=>15384, +40866=>15385, +13317=>15387, +194564=>15388, +22048=>15389, +24267=>15390, +11925=>15391, +144954=>15393, +28665=>15395, +28390=>15396, +29107=>15397, +11940=>15398, +64073=>15398, +11980=>15403, +64102=>15403, +23986=>15405, +20435=>15407, +20697=>15408, +20720=>15409, +20931=>15410, +22134=>15411, +27220=>15412, +27905=>15413, +28112=>15414, +28226=>15415, +28377=>15416, +29668=>15417, +29729=>15418, +30060=>15419, +30801=>15420, +34805=>15421, +144382=>15422, +29608=>15423, +15091=>15424, +13531=>15425, +17420=>15426, +16010=>15427, +40893=>15429, +19432=>15430, +40892=>15431, +16090=>15432, +15138=>15433, +40894=>15434, +17786=>15435, +16531=>15436, +18021=>15438, +16643=>15439, +17043=>15440, +18094=>15441, +13448=>15442, +140809=>15443, +63584=>15444, +63585=>15445, +63586=>15446, +63610=>15447, +63615=>15448, +8836=>15472, +8837=>15473, +8842=>15474, +8843=>15475, +8713=>15476, +8965=>15478, +8966=>15479, +8741=>15489, +8742=>15490, +8802=>15505, +8773=>15507, +8776=>15508, +8822=>15509, +8823=>15510, +8487=>15515, +8922=>15725, +8923=>15726, +8533=>15727, +8984=>15728, +7742=>15729, +7743=>15730, +504=>15731, +505=>15732, +470=>15733, +472=>15734, +474=>15735, +476=>15736, +260=>15737, +728=>15738, +317=>15739, +346=>15740, +350=>15741, +356=>15742, +377=>15743, +379=>15744, +261=>15745, +731=>15746, +318=>15747, +347=>15748, +711=>15749, +351=>15750, +357=>15751, +378=>15752, +733=>15753, +380=>15754, +340=>15755, +258=>15756, +313=>15757, +262=>15758, +268=>15759, +280=>15760, +270=>15761, +323=>15762, +327=>15763, +336=>15764, +344=>15765, +368=>15766, +354=>15767, +341=>15768, +259=>15769, +314=>15770, +263=>15771, +269=>15772, +281=>15773, +271=>15774, +273=>15775, +324=>15776, +328=>15777, +337=>15778, +345=>15779, +369=>15780, +355=>15781, +729=>15782, +264=>15783, +284=>15784, +292=>15785, +308=>15786, +348=>15787, +364=>15788, +265=>15789, +285=>15790, +293=>15791, +309=>15792, +349=>15793, +365=>15794, +625=>15795, +651=>15796, +638=>15797, +620=>15798, +622=>15799, +633=>15800, +648=>15801, +598=>15802, +627=>15803, +637=>15804, +642=>15805, +656=>15806, +635=>15807, +621=>15808, +607=>15809, +626=>15810, +669=>15811, +654=>15812, +609=>15813, +624=>15814, +641=>15815, +295=>15816, +661=>15817, +660=>15818, +614=>15819, +664=>15820, +450=>15821, +595=>15822, +599=>15823, +644=>15824, +608=>15825, +403=>15826, +616=>15827, +649=>15828, +600=>15829, +604=>15830, +606=>15831, +592=>15832, +623=>15833, +650=>15834, +612=>15835, +594=>15836, +653=>15837, +613=>15838, +674=>15839, +673=>15840, +597=>15841, +657=>15842, +634=>15843, +615=>15844, +865=>15845, +712=>15846, +716=>15847, +721=>15848, +8255=>15849, +783=>15850, +741=>15851, +742=>15852, +743=>15853, +744=>15854, +745=>15855, +805=>15858, +812=>15859, +825=>15860, +796=>15861, +799=>15862, +800=>15863, +829=>15864, +809=>15865, +815=>15866, +734=>15867, +804=>15868, +816=>15869, +828=>15870, +820=>15871, +797=>15872, +798=>15873, +792=>15874, +793=>15875, +810=>15876, +826=>15877, +827=>15878, +794=>15879, +610=>15883, +611=>15884, +618=>15885, +628=>15886, +630=>15887, +632=>15888, +640=>15889, +655=>15890, +665=>15891, +668=>15892, +671=>15893, +688=>15894, +690=>15895, +695=>15896, +705=>15897, +736=>15898, +737=>15899, +8862=>15906, +12348=>16194, +12543=>16195, +12310=>16197, +12311=>16198, +9838=>16199, +9835=>16200, +10548=>16201, +10549=>16202, +10687=>16203, +12448=>16205, +10746=>16207, +10747=>16208, +962=>16222, +9461=>16223, +9462=>16224, +9463=>16225, +9464=>16226, +9465=>16227, +9466=>16228, +9467=>16229, +9468=>16230, +9469=>16231, +9470=>16232, +9750=>16233, +9751=>16234, +9649=>16235, +12784=>16236, +12785=>16237, +12786=>16238, +12787=>16239, +12788=>16240, +12789=>16241, +12790=>16242, +12791=>16243, +12792=>16244, +12793=>16245, +12794=>16247, +12795=>16248, +12796=>16249, +12797=>16250, +12798=>16251, +12799=>16252, +9150=>16253, +9151=>16254, +9152=>16255, +9153=>16256, +9154=>16257, +9155=>16258, +9156=>16259, +9157=>16260, +9158=>16261, +9159=>16262, +9160=>16263, +9161=>16264, +9162=>16265, +9163=>16266, +9164=>16267, +10003=>16270, +9251=>16272, +9166=>16273, +9680=>16274, +9681=>16275, +9682=>16276, +9683=>16277, +8263=>16278, +8264=>16279, +8273=>16281, +8258=>16282, +12688=>16283, +12689=>16284, +12690=>16285, +12691=>16286, +12692=>16287, +12693=>16288, +12694=>16289, +12695=>16290, +12696=>16291, +12697=>16292, +12698=>16293, +12699=>16294, +12700=>16295, +12701=>16296, +12702=>16297, +12703=>16298, +9136=>16312, +9137=>16313, +9842=>16314, +9843=>16315, +9844=>16316, +9845=>16317, +9846=>16318, +9847=>16319, +9848=>16320, +9849=>16321, +9850=>16322, +9851=>16323, +9852=>16324, +9853=>16325, +12441=>16326, +12442=>16327, +8413=>16328, +20296=>16779, +20319=>16780, +20330=>16781, +20332=>16782, +20494=>16783, +20504=>16784, +20545=>16785, +20722=>16786, +20688=>16787, +20742=>16788, +20739=>16789, +20789=>16790, +20821=>16791, +20823=>16792, +13493=>16793, +20938=>16794, +20962=>16795, +21079=>16796, +21196=>16797, +21206=>16798, +21243=>16799, +21276=>16800, +21347=>16801, +21405=>16802, +21522=>16803, +21631=>16804, +21640=>16805, +21840=>16806, +21889=>16807, +21933=>16808, +21966=>16809, +22075=>16810, +22174=>16811, +22185=>16812, +22195=>16813, +22391=>16814, +22396=>16815, +135963=>16816, +22479=>16817, +22500=>16818, +22628=>16819, +22665=>16820, +136302=>16821, +22738=>16822, +22752=>16823, +34369=>16824, +22923=>16825, +22930=>16826, +22979=>16827, +23059=>16828, +23143=>16829, +23159=>16830, +23172=>16831, +23236=>16832, +137405=>16833, +23421=>16834, +23443=>16835, +23570=>16836, +64060=>16837, +136884=>16838, +23674=>16839, +23695=>16840, +23711=>16841, +23715=>16842, +23722=>16843, +23760=>16844, +138804=>16845, +23821=>16846, +23879=>16847, +23937=>16848, +23972=>16849, +23975=>16850, +24011=>16851, +24158=>16852, +24313=>16853, +24320=>16854, +24322=>16855, +24355=>16856, +24381=>16857, +24404=>16858, +24445=>16859, +24589=>16860, +24596=>16861, +24600=>16862, +24629=>16863, +24647=>16864, +24733=>16865, +24788=>16866, +24797=>16867, +24875=>16868, +25020=>16869, +25017=>16870, +25122=>16871, +25178=>16872, +25199=>16873, +25302=>16874, +25468=>16875, +25573=>16876, +25721=>16877, +25796=>16878, +25808=>16879, +25897=>16880, +26013=>16881, +26170=>16882, +26146=>16883, +26155=>16884, +26160=>16885, +26163=>16886, +26184=>16887, +143812=>16888, +26231=>16889, +26232=>16890, +26253=>16891, +26299=>16892, +26331=>16893, +26344=>16894, +26439=>16895, +26497=>16896, +26515=>16897, +26520=>16898, +26523=>16899, +26620=>16900, +26653=>16901, +26787=>16902, +26890=>16903, +26953=>16904, +144836=>16905, +26946=>16906, +26980=>16907, +27045=>16908, +27087=>16909, +15286=>16910, +15299=>16911, +27113=>16912, +27125=>16913, +145215=>16914, +27195=>16915, +145251=>16916, +27284=>16917, +27301=>16918, +15375=>16919, +27419=>16920, +27436=>16921, +27495=>16922, +27561=>16923, +27565=>16924, +27607=>16925, +27647=>16926, +27653=>16927, +27764=>16928, +27800=>16929, +27899=>16930, +27846=>16931, +27953=>16932, +27961=>16933, +27967=>16934, +27992=>16935, +28052=>16936, +28074=>16937, +28123=>16938, +28125=>16939, +28228=>16940, +28254=>16941, +28337=>16942, +28353=>16943, +28432=>16944, +28505=>16945, +28513=>16946, +28542=>16947, +28556=>16948, +28576=>16949, +28604=>16950, +28615=>16951, +28618=>16952, +28656=>16953, +28750=>16954, +28789=>16955, +28836=>16956, +28900=>16957, +28971=>16958, +28958=>16959, +28974=>16960, +29009=>16961, +29032=>16962, +29061=>16963, +29063=>16964, +29114=>16965, +29124=>16966, +29205=>16967, +15935=>16968, +29339=>16969, +149489=>16970, +29479=>16971, +29520=>16972, +29542=>16973, +29602=>16974, +29739=>16975, +29766=>16976, +29794=>16977, +29805=>16978, +29862=>16979, +29865=>16980, +29897=>16981, +29951=>16982, +29975=>16983, +16242=>16984, +30158=>16985, +30210=>16986, +30216=>16987, +30308=>16988, +30337=>16989, +30365=>16990, +30378=>16991, +30390=>16992, +30414=>16993, +30420=>16994, +30438=>16995, +30449=>16996, +30474=>16997, +30489=>16998, +30541=>16999, +30542=>17000, +30586=>17001, +30592=>17002, +30612=>17003, +30688=>17004, +152718=>17005, +30787=>17006, +30830=>17007, +30896=>17008, +152846=>17009, +30893=>17010, +30976=>17011, +31004=>17012, +31022=>17013, +31028=>17014, +31046=>17015, +31097=>17016, +31176=>17017, +153457=>17018, +31188=>17019, +31198=>17020, +31211=>17021, +31213=>17022, +31365=>17023, +154052=>17024, +31438=>17025, +31485=>17026, +31506=>17027, +31533=>17028, +31547=>17029, +31599=>17030, +31745=>17031, +31795=>17032, +155041=>17033, +31853=>17034, +31865=>17035, +31887=>17036, +31892=>17037, +31904=>17038, +31957=>17039, +32049=>17040, +32092=>17041, +32131=>17042, +32166=>17043, +32194=>17044, +32296=>17045, +32663=>17046, +32731=>17047, +32821=>17048, +32823=>17049, +32970=>17050, +32992=>17051, +33011=>17052, +33120=>17053, +33127=>17054, +33128=>17055, +33133=>17056, +33211=>17057, +33226=>17058, +33239=>17059, +17499=>17060, +33376=>17061, +33396=>17062, +158463=>17063, +33441=>17064, +33443=>17065, +33444=>17066, +33449=>17067, +33471=>17068, +33493=>17069, +33533=>17070, +33536=>17071, +33570=>17072, +33581=>17073, +33594=>17074, +33607=>17075, +33661=>17076, +33703=>17077, +33743=>17078, +33745=>17079, +33761=>17080, +33793=>17081, +33798=>17082, +33887=>17083, +33904=>17084, +33907=>17085, +33925=>17086, +33950=>17087, +33978=>17088, +159296=>17089, +34098=>17090, +34078=>17091, +34095=>17092, +34148=>17093, +34170=>17094, +34188=>17095, +34210=>17096, +34251=>17097, +34285=>17098, +34303=>17099, +34308=>17100, +34309=>17101, +34320=>17102, +159988=>17103, +34328=>17104, +34360=>17105, +34391=>17106, +34402=>17107, +17821=>17108, +34421=>17109, +34488=>17110, +34556=>17111, +34695=>17112, +17898=>17113, +34826=>17114, +34832=>17115, +35022=>17116, +161412=>17117, +35122=>17118, +35129=>17119, +35136=>17120, +35220=>17121, +35318=>17122, +35399=>17123, +35421=>17124, +35425=>17125, +35445=>17126, +35536=>17127, +35654=>17128, +35673=>17129, +35689=>17130, +35741=>17131, +35913=>17132, +35944=>17133, +36271=>17134, +36305=>17135, +36311=>17136, +36387=>17137, +36413=>17138, +36475=>17139, +164471=>17140, +18500=>17141, +36602=>17142, +36638=>17143, +36653=>17144, +36692=>17145, +164813=>17146, +36840=>17147, +36846=>17148, +36872=>17149, +36909=>17150, +37015=>17151, +37043=>17152, +37054=>17153, +37060=>17154, +37061=>17155, +37063=>17156, +37103=>17157, +37140=>17158, +37142=>17159, +37154=>17160, +37155=>17161, +37167=>17162, +37172=>17163, +37251=>17164, +37361=>17165, +37705=>17166, +37732=>17167, +37733=>17168, +37795=>17169, +37855=>17170, +37892=>17171, +37939=>17172, +37962=>17173, +37987=>17174, +38001=>17175, +38286=>17176, +38303=>17177, +38316=>17178, +38326=>17179, +38347=>17180, +38352=>17181, +38355=>17182, +18864=>17183, +38366=>17184, +38565=>17185, +38639=>17186, +38734=>17187, +38805=>17188, +38830=>17189, +38842=>17190, +38849=>17191, +38857=>17192, +38875=>17193, +38998=>17194, +39143=>17195, +39256=>17196, +39427=>17197, +39617=>17198, +39619=>17199, +39630=>17200, +39638=>17201, +39682=>17202, +39688=>17203, +19479=>17204, +39725=>17205, +39774=>17206, +39782=>17207, +39812=>17208, +39818=>17209, +39838=>17210, +39886=>17211, +39909=>17212, +39928=>17213, +39971=>17214, +40015=>17215, +40016=>17216, +40037=>17217, +40221=>17218, +40222=>17219, +40259=>17220, +40274=>17221, +40330=>17222, +40342=>17223, +40384=>17224, +40364=>17225, +40380=>17226, +172432=>17227, +40423=>17228, +40455=>17229, +40606=>17230, +40623=>17231, +40855=>17232, +131209=>17233, +19970=>17234, +19983=>17235, +19986=>17236, +20009=>17237, +20014=>17238, +20039=>17239, +131234=>17240, +20049=>17241, +13318=>17242, +131236=>17243, +20073=>17244, +20125=>17245, +13356=>17246, +20156=>17247, +20163=>17248, +20168=>17249, +20203=>17250, +20186=>17251, +20209=>17252, +20213=>17253, +20246=>17254, +20324=>17255, +20279=>17256, +20286=>17257, +20312=>17258, +131603=>17259, +20343=>17260, +20344=>17261, +20354=>17262, +20357=>17263, +20454=>17264, +20402=>17265, +20421=>17266, +20427=>17267, +20434=>17268, +13418=>17269, +20466=>17270, +20499=>17271, +20508=>17272, +20558=>17273, +20563=>17274, +20579=>17275, +20643=>17276, +20616=>17277, +20626=>17278, +20627=>17279, +20629=>17280, +20650=>17281, +131883=>17282, +20657=>17283, +20666=>17284, +20667=>17285, +20676=>17286, +20679=>17287, +20723=>17288, +131969=>17289, +20686=>17290, +131953=>17291, +20692=>17292, +20705=>17293, +13458=>17294, +132089=>17295, +20759=>17296, +132170=>17297, +20832=>17298, +132361=>17299, +20851=>17300, +20867=>17301, +20875=>17302, +13500=>17303, +20888=>17304, +20899=>17305, +20909=>17306, +13511=>17307, +132566=>17308, +20979=>17309, +21010=>17310, +21014=>17311, +132943=>17312, +21077=>17313, +21084=>17314, +21100=>17315, +21111=>17316, +21124=>17317, +21122=>17318, +133127=>17319, +21144=>17320, +133178=>17321, +21156=>17322, +21178=>17323, +21179=>17324, +21194=>17325, +21201=>17326, +133305=>17327, +21239=>17328, +21301=>17329, +21314=>17330, +133500=>17331, +133533=>17332, +21351=>17333, +21370=>17334, +21412=>17335, +21428=>17336, +133843=>17337, +21431=>17338, +21440=>17339, +133917=>17340, +13661=>17341, +13662=>17342, +21461=>17343, +13667=>17344, +21492=>17345, +21540=>17346, +21544=>17347, +13678=>17348, +21571=>17349, +21602=>17350, +21612=>17351, +21653=>17352, +21664=>17353, +21670=>17354, +21678=>17355, +21687=>17356, +21690=>17357, +21699=>17358, +134469=>17359, +21740=>17360, +21743=>17361, +21745=>17362, +21747=>17363, +21760=>17364, +21761=>17365, +21769=>17366, +21820=>17367, +21825=>17368, +13734=>17369, +21831=>17370, +13736=>17371, +21860=>17372, +134625=>17373, +21885=>17374, +21890=>17375, +21905=>17376, +13765=>17377, +21970=>17378, +134805=>17379, +134765=>17380, +21951=>17381, +21961=>17382, +21964=>17383, +21969=>17384, +21981=>17385, +13786=>17386, +21986=>17387, +134756=>17388, +21993=>17389, +22056=>17390, +135007=>17391, +22023=>17392, +22032=>17393, +22064=>17394, +13812=>17395, +22077=>17396, +22080=>17397, +22087=>17398, +22110=>17399, +22112=>17400, +22125=>17401, +13829=>17402, +22152=>17403, +22156=>17404, +22173=>17405, +22184=>17406, +22194=>17407, +22213=>17408, +22221=>17409, +22239=>17410, +22248=>17411, +22262=>17412, +22263=>17413, +135681=>17414, +135765=>17415, +22313=>17416, +135803=>17417, +22341=>17418, +22342=>17419, +22349=>17420, +135796=>17421, +22376=>17422, +22383=>17423, +22387=>17424, +22388=>17425, +22389=>17426, +22395=>17427, +135908=>17428, +135895=>17429, +22426=>17430, +22429=>17431, +22430=>17432, +22440=>17433, +22487=>17434, +135933=>17435, +22476=>17436, +135990=>17437, +136004=>17438, +22494=>17439, +22512=>17440, +13898=>17441, +22520=>17442, +22523=>17443, +22525=>17444, +22532=>17445, +22558=>17446, +22567=>17447, +22585=>17448, +136132=>17449, +22601=>17450, +22604=>17451, +22631=>17452, +22666=>17453, +22667=>17454, +22669=>17455, +22671=>17456, +22672=>17457, +22676=>17458, +22685=>17459, +22698=>17460, +22705=>17461, +136301=>17462, +22723=>17463, +22733=>17464, +22754=>17465, +22771=>17466, +22772=>17467, +22789=>17468, +22790=>17469, +22797=>17470, +22804=>17471, +136663=>17472, +13969=>17473, +22845=>17474, +13977=>17475, +22854=>17476, +13974=>17477, +158761=>17478, +22879=>17479, +136775=>17480, +22901=>17481, +22902=>17482, +22908=>17483, +22943=>17484, +22958=>17485, +22972=>17486, +22984=>17487, +22989=>17488, +23006=>17489, +23015=>17490, +23022=>17491, +136966=>17492, +137026=>17493, +14031=>17494, +23053=>17495, +23063=>17496, +23079=>17497, +23085=>17498, +23141=>17499, +23162=>17500, +23179=>17501, +23196=>17502, +23199=>17503, +23200=>17504, +23202=>17505, +23217=>17506, +23221=>17507, +23226=>17508, +23231=>17509, +23258=>17510, +23260=>17511, +23269=>17512, +23280=>17513, +23278=>17514, +23285=>17515, +23304=>17516, +23319=>17517, +23348=>17518, +23372=>17519, +23378=>17520, +23400=>17521, +23407=>17522, +23425=>17523, +23428=>17524, +137667=>17525, +23446=>17526, +23468=>17527, +14177=>17528, +14178=>17529, +23502=>17530, +23510=>17531, +14188=>17532, +14187=>17533, +23537=>17534, +23549=>17535, +14197=>17536, +23555=>17537, +23593=>17538, +138326=>17539, +23647=>17540, +23655=>17541, +23656=>17542, +23664=>17543, +138541=>17544, +138565=>17545, +138616=>17546, +138594=>17547, +23688=>17548, +23690=>17549, +14273=>17550, +138657=>17551, +138652=>17552, +23712=>17553, +23714=>17554, +23719=>17555, +138642=>17556, +23725=>17557, +23733=>17558, +138679=>17559, +23753=>17560, +138720=>17561, +138803=>17562, +23814=>17563, +23824=>17564, +23851=>17565, +23837=>17566, +23840=>17567, +23857=>17568, +23865=>17569, +14312=>17570, +23905=>17571, +23914=>17572, +14324=>17573, +23920=>17574, +139038=>17575, +14333=>17576, +23944=>17577, +14336=>17578, +23959=>17579, +23984=>17580, +23988=>17581, +139126=>17582, +24017=>17583, +24023=>17584, +139258=>17585, +24036=>17586, +24041=>17587, +14383=>17588, +14390=>17589, +14400=>17590, +24095=>17591, +24126=>17592, +24137=>17593, +14428=>17594, +24150=>17595, +14433=>17596, +24173=>17597, +24174=>17598, +139643=>17599, +24229=>17600, +24236=>17601, +24249=>17602, +24262=>17603, +24281=>17604, +140062=>17605, +24317=>17606, +24328=>17607, +140205=>17608, +24350=>17609, +24391=>17610, +24419=>17611, +24434=>17612, +24446=>17613, +24463=>17614, +24482=>17615, +24519=>17616, +24523=>17617, +24530=>17618, +24531=>17619, +24532=>17620, +24546=>17621, +24558=>17622, +24559=>17623, +24563=>17624, +14615=>17625, +24610=>17626, +24612=>17627, +14618=>17628, +24652=>17629, +24725=>17630, +24744=>17631, +141043=>17632, +24753=>17633, +24766=>17634, +24776=>17635, +24793=>17636, +24814=>17637, +24821=>17638, +24848=>17639, +24857=>17640, +24862=>17641, +24890=>17642, +14703=>17643, +24897=>17644, +24902=>17645, +24928=>17646, +141403=>17647, +24978=>17648, +24979=>17649, +24983=>17650, +24997=>17651, +25005=>17652, +141483=>17653, +25045=>17654, +25053=>17655, +25077=>17656, +141711=>17657, +25123=>17658, +25170=>17659, +25185=>17660, +25188=>17661, +25211=>17662, +25197=>17663, +25203=>17664, +25241=>17665, +25301=>17666, +142008=>17667, +25341=>17668, +25347=>17669, +25360=>17670, +142159=>17671, +142160=>17672, +25394=>17673, +25397=>17674, +25403=>17675, +25404=>17676, +25409=>17677, +25412=>17678, +25422=>17679, +142150=>17680, +25433=>17681, +142365=>17682, +142246=>17683, +25452=>17684, +25497=>17685, +142372=>17686, +25492=>17687, +25533=>17688, +25556=>17689, +25557=>17690, +25568=>17691, +25579=>17692, +25580=>17693, +25586=>17694, +25630=>17695, +25637=>17696, +25641=>17697, +25647=>17698, +25690=>17699, +25693=>17700, +25715=>17701, +25725=>17702, +25735=>17703, +25745=>17704, +25759=>17705, +25803=>17706, +25804=>17707, +25813=>17708, +25815=>17709, +142817=>17710, +25828=>17711, +25855=>17712, +14958=>17713, +25871=>17714, +25876=>17715, +14963=>17716, +25886=>17717, +25906=>17718, +25924=>17719, +25940=>17720, +25963=>17721, +25978=>17722, +25988=>17723, +25994=>17724, +26034=>17725, +26037=>17726, +26040=>17727, +26047=>17728, +26057=>17729, +26068=>17730, +15062=>17731, +26105=>17732, +26108=>17733, +26116=>17734, +26120=>17735, +26145=>17736, +26154=>17737, +26181=>17738, +26193=>17739, +26190=>17740, +15082=>17741, +143811=>17742, +143861=>17743, +143798=>17744, +26218=>17745, +26220=>17746, +26221=>17747, +26235=>17748, +26240=>17749, +26256=>17750, +26258=>17751, +15118=>17752, +26285=>17753, +26289=>17754, +26293=>17755, +15130=>17756, +15132=>17757, +15063=>17758, +26369=>17759, +26386=>17760, +144242=>17761, +26393=>17762, +144339=>17763, +144338=>17764, +26445=>17765, +26452=>17766, +26461=>17767, +144336=>17768, +144356=>17769, +144341=>17770, +26484=>17771, +144346=>17772, +26514=>17773, +144351=>17774, +33635=>17775, +26640=>17776, +26563=>17777, +26568=>17778, +26578=>17779, +26587=>17780, +26615=>17781, +144458=>17782, +144465=>17783, +144459=>17784, +26648=>17785, +26655=>17786, +26669=>17787, +144485=>17788, +26675=>17789, +26683=>17790, +26686=>17791, +26693=>17792, +26697=>17793, +26700=>17794, +26709=>17795, +26711=>17796, +15223=>17797, +26731=>17798, +26734=>17799, +26748=>17800, +26754=>17801, +26768=>17802, +26774=>17803, +15213=>17804, +26776=>17805, +26777=>17806, +26778=>17807, +26780=>17808, +26794=>17809, +26795=>17810, +26804=>17811, +26811=>17812, +26875=>17813, +144612=>17814, +144730=>17815, +26819=>17816, +26821=>17817, +26828=>17818, +26841=>17819, +26852=>17820, +26853=>17821, +26860=>17822, +26871=>17823, +26883=>17824, +26887=>17825, +15239=>17826, +144788=>17827, +15245=>17828, +26950=>17829, +26985=>17830, +26988=>17831, +27002=>17832, +27026=>17833, +15268=>17834, +27030=>17835, +27056=>17836, +27066=>17837, +27068=>17838, +27072=>17839, +27089=>17840, +144953=>17841, +144967=>17842, +144952=>17843, +27107=>17844, +27118=>17845, +27119=>17846, +27123=>17847, +15309=>17848, +27124=>17849, +27134=>17850, +27153=>17851, +27162=>17852, +27165=>17853, +145180=>17854, +27186=>17855, +27187=>17856, +27199=>17857, +27209=>17858, +27258=>17859, +27214=>17860, +27218=>17861, +27236=>17862, +145164=>17863, +27275=>17864, +15344=>17865, +27297=>17866, +145252=>17867, +27307=>17868, +27325=>17869, +27334=>17870, +27348=>17871, +27344=>17872, +27357=>17873, +145407=>17874, +145383=>17875, +27377=>17876, +27378=>17877, +27379=>17878, +27389=>17879, +145444=>17880, +27403=>17881, +27407=>17882, +27408=>17883, +27409=>17884, +145469=>17885, +27415=>17886, +15398=>17887, +27439=>17888, +27466=>17889, +27480=>17890, +27500=>17891, +27509=>17892, +11934=>17893, +27514=>17893, +27521=>17894, +27547=>17895, +27566=>17896, +146072=>17897, +27581=>17898, +27591=>17899, +27592=>17900, +27593=>17901, +27610=>17902, +27622=>17903, +27623=>17904, +27630=>17905, +27650=>17906, +27658=>17907, +27662=>17908, +27702=>17909, +146559=>17910, +27725=>17911, +27739=>17912, +27757=>17913, +27780=>17914, +27785=>17915, +15555=>17916, +27796=>17917, +27799=>17918, +27821=>17919, +27842=>17920, +15570=>17921, +27868=>17922, +27881=>17923, +27885=>17924, +146688=>17925, +27904=>17926, +27940=>17927, +27942=>17928, +27943=>17929, +27751=>17930, +27951=>17931, +27964=>17932, +27995=>17933, +28000=>17934, +28016=>17935, +28032=>17936, +28033=>17937, +28042=>17938, +28045=>17939, +28049=>17940, +28056=>17941, +146752=>17942, +146938=>17943, +146937=>17944, +146899=>17945, +28075=>17946, +28078=>17947, +28084=>17948, +28098=>17949, +27956=>17950, +28104=>17951, +28110=>17952, +28127=>17953, +28150=>17954, +28214=>17955, +28190=>17956, +15633=>17957, +28210=>17958, +28232=>17959, +28233=>17960, +28235=>17961, +28236=>17962, +28239=>17963, +28243=>17964, +28244=>17965, +28247=>17966, +28259=>17967, +15646=>17968, +28307=>17969, +28327=>17970, +28340=>17971, +28355=>17972, +28469=>17973, +28395=>17974, +28409=>17975, +28411=>17976, +28426=>17977, +28428=>17978, +28440=>17979, +28453=>17980, +28470=>17981, +28476=>17982, +147326=>17983, +28498=>17984, +28503=>17985, +28512=>17986, +28520=>17987, +28560=>17988, +28566=>17989, +28606=>17990, +28575=>17991, +28581=>17992, +28591=>17993, +15716=>17994, +28616=>17995, +28617=>17996, +28649=>17997, +147606=>17998, +28668=>17999, +28672=>18000, +28682=>18001, +28707=>18002, +147715=>18003, +28730=>18004, +28739=>18005, +28743=>18006, +28747=>18007, +15770=>18008, +28773=>18009, +28777=>18010, +28782=>18011, +28790=>18012, +28806=>18013, +28823=>18014, +147910=>18015, +28831=>18016, +28849=>18017, +147966=>18018, +28908=>18019, +28874=>18020, +28881=>18021, +28931=>18022, +28934=>18023, +28936=>18024, +28940=>18025, +15808=>18026, +28975=>18027, +29008=>18028, +29011=>18029, +29022=>18030, +15828=>18031, +29078=>18032, +29056=>18033, +29083=>18034, +29088=>18035, +29090=>18036, +29102=>18037, +29103=>18038, +148412=>18039, +29145=>18040, +29148=>18041, +29191=>18042, +15877=>18043, +29236=>18044, +29241=>18045, +29250=>18046, +29271=>18047, +29283=>18048, +149033=>18049, +29294=>18050, +29295=>18051, +29304=>18052, +29311=>18053, +29326=>18054, +149157=>18055, +29358=>18056, +29360=>18057, +29377=>18058, +15968=>18059, +29388=>18060, +15974=>18061, +15976=>18062, +29427=>18063, +29434=>18064, +29447=>18065, +29458=>18066, +29464=>18067, +29465=>18068, +16003=>18069, +29497=>18070, +29484=>18071, +29491=>18072, +29501=>18073, +29522=>18074, +16020=>18075, +29547=>18076, +149654=>18077, +29550=>18078, +29551=>18079, +29553=>18080, +29569=>18081, +29578=>18082, +29588=>18083, +29592=>18084, +29596=>18085, +29605=>18086, +29625=>18087, +29631=>18088, +29637=>18089, +29643=>18090, +29665=>18091, +29671=>18092, +29689=>18093, +29715=>18094, +29690=>18095, +29697=>18096, +29779=>18097, +29760=>18098, +29763=>18099, +29778=>18100, +29789=>18101, +29825=>18102, +29832=>18103, +150093=>18104, +29842=>18105, +29847=>18106, +29849=>18107, +29857=>18108, +29861=>18109, +29866=>18110, +29881=>18111, +29883=>18112, +29882=>18113, +29910=>18114, +29912=>18115, +29931=>18116, +150358=>18117, +29946=>18118, +150383=>18119, +29984=>18120, +29988=>18121, +29994=>18122, +16215=>18123, +150550=>18124, +30013=>18125, +30014=>18126, +30016=>18127, +30024=>18128, +30032=>18129, +30034=>18130, +30066=>18131, +30065=>18132, +30074=>18133, +30077=>18134, +30078=>18135, +30092=>18136, +16245=>18137, +30114=>18138, +16247=>18139, +30128=>18140, +30135=>18141, +30143=>18142, +30144=>18143, +30150=>18144, +30159=>18145, +30163=>18146, +30173=>18147, +30175=>18148, +30176=>18149, +30183=>18150, +30190=>18151, +30193=>18152, +30211=>18153, +30232=>18154, +30215=>18155, +30223=>18156, +16302=>18157, +151054=>18158, +30227=>18159, +30235=>18160, +30236=>18161, +151095=>18162, +30245=>18163, +30248=>18164, +30268=>18165, +30259=>18166, +151146=>18167, +16329=>18168, +30273=>18169, +151179=>18170, +30281=>18171, +30293=>18172, +16343=>18173, +30318=>18174, +30357=>18175, +30369=>18176, +30368=>18177, +30375=>18178, +30376=>18179, +30383=>18180, +151626=>18181, +30409=>18182, +151637=>18183, +30440=>18184, +151842=>18185, +30487=>18186, +30490=>18187, +30509=>18188, +30517=>18189, +151977=>18190, +16441=>18191, +152037=>18192, +152013=>18193, +30552=>18194, +152094=>18195, +30588=>18196, +152140=>18197, +16472=>18198, +30618=>18199, +30623=>18200, +30626=>18201, +30628=>18202, +30686=>18203, +30687=>18204, +30692=>18205, +30698=>18206, +30700=>18207, +30715=>18208, +152622=>18209, +30725=>18210, +30729=>18211, +30733=>18212, +30745=>18213, +30764=>18214, +30791=>18215, +30826=>18216, +152793=>18217, +30858=>18218, +30868=>18219, +30884=>18220, +30877=>18221, +30879=>18222, +30907=>18223, +30933=>18224, +30950=>18225, +30969=>18226, +30970=>18227, +30974=>18228, +152999=>18229, +30992=>18230, +31003=>18231, +31013=>18232, +31050=>18233, +31064=>18234, +16645=>18235, +31079=>18236, +31090=>18237, +31125=>18238, +31137=>18239, +31145=>18240, +31156=>18241, +31170=>18242, +31175=>18243, +31180=>18244, +31181=>18245, +31190=>18246, +16712=>18247, +153513=>18248, +153524=>18249, +16719=>18250, +31242=>18251, +31253=>18252, +31259=>18253, +16739=>18254, +31288=>18255, +31303=>18256, +31318=>18257, +31321=>18258, +31324=>18259, +31327=>18260, +31335=>18261, +31338=>18262, +31349=>18263, +31362=>18264, +31370=>18265, +31376=>18266, +31404=>18267, +154068=>18268, +16820=>18269, +31417=>18270, +31422=>18271, +16831=>18272, +31436=>18273, +31464=>18274, +31476=>18275, +154340=>18276, +154339=>18277, +154353=>18278, +31549=>18279, +31530=>18280, +31534=>18281, +31535=>18282, +16870=>18283, +16883=>18284, +31615=>18285, +31553=>18286, +16878=>18287, +31573=>18288, +31609=>18289, +31588=>18290, +31590=>18291, +31603=>18292, +154546=>18293, +16903=>18294, +31632=>18295, +31643=>18296, +16910=>18297, +31669=>18298, +31676=>18299, +31685=>18300, +31690=>18301, +154699=>18302, +154724=>18303, +31700=>18304, +31702=>18305, +31706=>18306, +31722=>18307, +31728=>18308, +31747=>18309, +31758=>18310, +31813=>18311, +31818=>18312, +31831=>18313, +31838=>18314, +31841=>18315, +31849=>18316, +31855=>18317, +155182=>18318, +155222=>18319, +155237=>18320, +31910=>18321, +155234=>18322, +31926=>18323, +31927=>18324, +155352=>18325, +31940=>18326, +155330=>18327, +31949=>18328, +155368=>18329, +155427=>18330, +31974=>18331, +155484=>18332, +31989=>18333, +32003=>18334, +17094=>18335, +32018=>18336, +32030=>18337, +155616=>18338, +155604=>18339, +32061=>18340, +32062=>18341, +32064=>18342, +32071=>18343, +155660=>18344, +155643=>18345, +17110=>18346, +32090=>18347, +32106=>18348, +32112=>18349, +17117=>18350, +32127=>18351, +155671=>18352, +32136=>18353, +32151=>18354, +155744=>18355, +32157=>18356, +32167=>18357, +32170=>18358, +32182=>18359, +32192=>18360, +32215=>18361, +32217=>18362, +32230=>18363, +17154=>18364, +155885=>18365, +64088=>18366, +32272=>18367, +32279=>18368, +32285=>18369, +32295=>18370, +32300=>18371, +32325=>18372, +32373=>18373, +32382=>18374, +32390=>18375, +32391=>18376, +17195=>18377, +32410=>18378, +17219=>18379, +32572=>18380, +32571=>18381, +32574=>18382, +32579=>18383, +13505=>18384, +156272=>18385, +156294=>18386, +32611=>18387, +32612=>18388, +32621=>18389, +32637=>18390, +32638=>18391, +32656=>18392, +20859=>18393, +146702=>18394, +32662=>18395, +32668=>18396, +32685=>18397, +156674=>18398, +32707=>18399, +32719=>18400, +32739=>18401, +32754=>18402, +32778=>18403, +32776=>18404, +32790=>18405, +32812=>18406, +32816=>18407, +32835=>18408, +32870=>18409, +32891=>18410, +32921=>18411, +32924=>18412, +32932=>18413, +32935=>18414, +32952=>18415, +157310=>18416, +32965=>18417, +32981=>18418, +32998=>18419, +33037=>18420, +33013=>18421, +33019=>18422, +17390=>18423, +33077=>18424, +33054=>18425, +17392=>18426, +33060=>18427, +33063=>18428, +33068=>18429, +157469=>18430, +33085=>18431, +17416=>18432, +33129=>18433, +17431=>18434, +17436=>18435, +33157=>18436, +17442=>18437, +33176=>18438, +33202=>18439, +33217=>18440, +33219=>18441, +33238=>18442, +33243=>18443, +157917=>18444, +33252=>18445, +157930=>18446, +33260=>18447, +33277=>18448, +33279=>18449, +158063=>18450, +33284=>18451, +158173=>18452, +33305=>18453, +33314=>18454, +158238=>18455, +33340=>18456, +33353=>18457, +33349=>18458, +158296=>18459, +17526=>18460, +17530=>18461, +33367=>18462, +158348=>18463, +33372=>18464, +33379=>18465, +158391=>18466, +17553=>18467, +33405=>18468, +33407=>18469, +33411=>18470, +33418=>18471, +33427=>18472, +33447=>18473, +33448=>18474, +33458=>18475, +33460=>18476, +33466=>18477, +33468=>18478, +33506=>18479, +33512=>18480, +33527=>18481, +33543=>18482, +33544=>18483, +33548=>18484, +33620=>18485, +33563=>18486, +33565=>18487, +33584=>18488, +33596=>18489, +33604=>18490, +33623=>18491, +17598=>18492, +17620=>18493, +17587=>18494, +33684=>18495, +33685=>18496, +33691=>18497, +33693=>18498, +33737=>18499, +33744=>18500, +33748=>18501, +33757=>18502, +33765=>18503, +33785=>18504, +33813=>18505, +158835=>18506, +33815=>18507, +33849=>18508, +33871=>18509, +33873=>18510, +33874=>18511, +33881=>18512, +33882=>18513, +33884=>18514, +158941=>18515, +33893=>18516, +33912=>18517, +33916=>18518, +33921=>18519, +17677=>18520, +33943=>18521, +33958=>18522, +33982=>18523, +17672=>18524, +33998=>18525, +33999=>18526, +34003=>18527, +159333=>18528, +34023=>18529, +34026=>18530, +34031=>18531, +34033=>18532, +34042=>18533, +34075=>18534, +34084=>18535, +34085=>18536, +34091=>18537, +34127=>18538, +34159=>18539, +17731=>18540, +34129=>18541, +34145=>18542, +34146=>18543, +159636=>18544, +34171=>18545, +34173=>18546, +34175=>18547, +34177=>18548, +34182=>18549, +34195=>18550, +34205=>18551, +34207=>18552, +159736=>18553, +159734=>18554, +159735=>18555, +34236=>18556, +34247=>18557, +34250=>18558, +34264=>18559, +34265=>18560, +34271=>18561, +34273=>18562, +34278=>18563, +34294=>18564, +34304=>18565, +34321=>18566, +34334=>18567, +34337=>18568, +34340=>18569, +34343=>18570, +160013=>18571, +34361=>18572, +34364=>18573, +160057=>18574, +34368=>18575, +34387=>18576, +34390=>18577, +34423=>18578, +34439=>18579, +34441=>18580, +34460=>18581, +34461=>18582, +34481=>18583, +34483=>18584, +34497=>18585, +34499=>18586, +34513=>18587, +34517=>18588, +34519=>18589, +34531=>18590, +34534=>18591, +17848=>18592, +34565=>18593, +34567=>18594, +34574=>18595, +34576=>18596, +34591=>18597, +34593=>18598, +34595=>18599, +34609=>18600, +34618=>18601, +34624=>18602, +34627=>18603, +34641=>18604, +34648=>18605, +34660=>18606, +34661=>18607, +34674=>18608, +34684=>18609, +160731=>18610, +160730=>18611, +34727=>18612, +34697=>18613, +34699=>18614, +34707=>18615, +34720=>18616, +160766=>18617, +17893=>18618, +34750=>18619, +160784=>18620, +34753=>18621, +34766=>18622, +34783=>18623, +160841=>18624, +34787=>18625, +34789=>18626, +34790=>18627, +34794=>18628, +34835=>18629, +34856=>18630, +34862=>18631, +34866=>18632, +34876=>18633, +17935=>18634, +34890=>18635, +34904=>18636, +161301=>18637, +161300=>18638, +34921=>18639, +161329=>18640, +34927=>18641, +34976=>18642, +35004=>18643, +35008=>18644, +161427=>18645, +35025=>18646, +35027=>18647, +17985=>18648, +35073=>18649, +161550=>18650, +35127=>18651, +161571=>18652, +35138=>18653, +35141=>18654, +35145=>18655, +161618=>18656, +35170=>18657, +35209=>18658, +35216=>18659, +35231=>18660, +35248=>18661, +35255=>18662, +35288=>18663, +35307=>18664, +18081=>18665, +35315=>18666, +35325=>18667, +35327=>18668, +18095=>18669, +35345=>18670, +35348=>18671, +162181=>18672, +35361=>18673, +35381=>18674, +35390=>18675, +35397=>18676, +35405=>18677, +35416=>18678, +35502=>18679, +35472=>18680, +35511=>18681, +35543=>18682, +35580=>18683, +162436=>18684, +35594=>18685, +35589=>18686, +35597=>18687, +35612=>18688, +35629=>18689, +18188=>18690, +35665=>18691, +35678=>18692, +35702=>18693, +35713=>18694, +35723=>18695, +35732=>18696, +35733=>18697, +35897=>18698, +162739=>18699, +35901=>18700, +162750=>18701, +162759=>18702, +35909=>18703, +35919=>18704, +35927=>18705, +35945=>18706, +35949=>18707, +163000=>18708, +35987=>18709, +35986=>18710, +35993=>18711, +18276=>18712, +35995=>18713, +36054=>18714, +36053=>18715, +163232=>18716, +36081=>18717, +163344=>18718, +36105=>18719, +36110=>18720, +36296=>18721, +36313=>18722, +36364=>18723, +18429=>18724, +36349=>18725, +36358=>18726, +163978=>18727, +36372=>18728, +36374=>18729, +36385=>18730, +36386=>18731, +36391=>18732, +164027=>18733, +18454=>18734, +36406=>18735, +36409=>18736, +36436=>18737, +36450=>18738, +36461=>18739, +36463=>18740, +36504=>18741, +36510=>18742, +36533=>18743, +36539=>18744, +164482=>18745, +18510=>18746, +164595=>18747, +36608=>18748, +36616=>18749, +36651=>18750, +36672=>18751, +36682=>18752, +36696=>18753, +164876=>18754, +36772=>18755, +36788=>18756, +164949=>18757, +36801=>18758, +36806=>18759, +64036=>18760, +36810=>18761, +36813=>18762, +36819=>18763, +36821=>18764, +36849=>18765, +36853=>18766, +36859=>18767, +36876=>18768, +36919=>18769, +165227=>18770, +36931=>18771, +36957=>18772, +165320=>18773, +165321=>18774, +36997=>18775, +37004=>18776, +37008=>18777, +37025=>18778, +18613=>18779, +37040=>18780, +37046=>18781, +37059=>18782, +37064=>18783, +165591=>18784, +37084=>18785, +37087=>18786, +165626=>18787, +37110=>18788, +37106=>18789, +37120=>18790, +37099=>18791, +37118=>18792, +37119=>18793, +37124=>18794, +37126=>18795, +37144=>18796, +37150=>18797, +37175=>18798, +37177=>18799, +37190=>18800, +37191=>18801, +37207=>18802, +37209=>18803, +37236=>18804, +37241=>18805, +37253=>18806, +37299=>18807, +37302=>18808, +37315=>18809, +37316=>18810, +166217=>18811, +166214=>18812, +37356=>18813, +37377=>18814, +37398=>18815, +37399=>18816, +166251=>18817, +37442=>18818, +37450=>18819, +37462=>18820, +37473=>18821, +37477=>18822, +37480=>18823, +166280=>18824, +37500=>18825, +37501=>18826, +37503=>18827, +37513=>18828, +37517=>18829, +37527=>18830, +37529=>18831, +37535=>18832, +37547=>18833, +166330=>18834, +166331=>18835, +37554=>18836, +37567=>18837, +37568=>18838, +37574=>18839, +37582=>18840, +37605=>18841, +37649=>18842, +166430=>18843, +166441=>18844, +37623=>18845, +37673=>18846, +166513=>18847, +166467=>18848, +37713=>18849, +37722=>18850, +37739=>18851, +37745=>18852, +37747=>18853, +37793=>18854, +166553=>18855, +166605=>18856, +37768=>18857, +37771=>18858, +37775=>18859, +37790=>18860, +37877=>18861, +166628=>18862, +166621=>18863, +37873=>18864, +37831=>18865, +37852=>18866, +37863=>18867, +37897=>18868, +37910=>18869, +37911=>18870, +37883=>18871, +37938=>18872, +37947=>18873, +166849=>18874, +166895=>18875, +37997=>18876, +37999=>18877, +38265=>18878, +38278=>18879, +38284=>18880, +38285=>18881, +167184=>18882, +167281=>18883, +38344=>18884, +167419=>18885, +167455=>18886, +38444=>18887, +38451=>18888, +38452=>18889, +167478=>18890, +38460=>18891, +38497=>18892, +167561=>18893, +38530=>18894, +167659=>18895, +38554=>18896, +167730=>18897, +18919=>18898, +38579=>18899, +38586=>18900, +38589=>18901, +18938=>18902, +167928=>18903, +38616=>18904, +38618=>18905, +38621=>18906, +18948=>18907, +38676=>18908, +38691=>18909, +18985=>18910, +38710=>18911, +38721=>18912, +38727=>18913, +38743=>18914, +38747=>18915, +38762=>18916, +168608=>18917, +168625=>18918, +38806=>18919, +38814=>18920, +38833=>18921, +38834=>18922, +38846=>18923, +38860=>18924, +38865=>18925, +38868=>18926, +38872=>18927, +38881=>18928, +38897=>18929, +38916=>18930, +38925=>18931, +38932=>18932, +38934=>18933, +19132=>18934, +169104=>18935, +38962=>18936, +38963=>18937, +38949=>18938, +38983=>18939, +39014=>18940, +39083=>18941, +39085=>18942, +39088=>18943, +169423=>18944, +39095=>18945, +39099=>18946, +39100=>18947, +39106=>18948, +39111=>18949, +39115=>18950, +39137=>18951, +39139=>18952, +39146=>18953, +39152=>18954, +39153=>18955, +39155=>18956, +39176=>18957, +19259=>18958, +169712=>18959, +39190=>18960, +39191=>18961, +169753=>18962, +39194=>18963, +39195=>18964, +39196=>18965, +169808=>18966, +39217=>18967, +39226=>18968, +39227=>18969, +39228=>18970, +39233=>18971, +39238=>18972, +39246=>18973, +39264=>18974, +39331=>18975, +39334=>18976, +39357=>18977, +39359=>18978, +39363=>18979, +39380=>18980, +39385=>18981, +39390=>18982, +170182=>18983, +39408=>18984, +39417=>18985, +39420=>18986, +39434=>18987, +39441=>18988, +39450=>18989, +39456=>18990, +39473=>18991, +39492=>18992, +39500=>18993, +39512=>18994, +19394=>18995, +39599=>18996, +19402=>18997, +39607=>18998, +19410=>18999, +39609=>19000, +170610=>19001, +39622=>19002, +39632=>19003, +39634=>19004, +39637=>19005, +39648=>19006, +39653=>19007, +39657=>19008, +39692=>19009, +39696=>19010, +39698=>19011, +39702=>19012, +39708=>19013, +39723=>19014, +39741=>19015, +19488=>19016, +39755=>19017, +39779=>19018, +39781=>19019, +39787=>19020, +39788=>19021, +39798=>19022, +39799=>19023, +39846=>19024, +39852=>19025, +171483=>19026, +39858=>19027, +39864=>19028, +39870=>19029, +39923=>19030, +39896=>19031, +39901=>19032, +39914=>19033, +39919=>19034, +39918=>19035, +171541=>19036, +171658=>19037, +171593=>19038, +39958=>19039, +39960=>19040, +39961=>19041, +39962=>19042, +39965=>19043, +39970=>19044, +39977=>19045, +171716=>19046, +39985=>19047, +39991=>19048, +40005=>19049, +40028=>19050, +171753=>19051, +40009=>19052, +40010=>19053, +171739=>19054, +40020=>19055, +40024=>19056, +40027=>19057, +40029=>19058, +40031=>19059, +40041=>19060, +40042=>19061, +40043=>19062, +40045=>19063, +40046=>19064, +40050=>19065, +40053=>19066, +40058=>19067, +40166=>19068, +40178=>19069, +40203=>19070, +171982=>19071, +171991=>19071, +40209=>19072, +40215=>19073, +40216=>19074, +172079=>19075, +19652=>19076, +172058=>19077, +40242=>19078, +19665=>19079, +40266=>19080, +40287=>19081, +40290=>19082, +172281=>19083, +172162=>19084, +40307=>19085, +40310=>19086, +40311=>19087, +40324=>19088, +40345=>19089, +40353=>19090, +40383=>19091, +40373=>19092, +40377=>19093, +40381=>19094, +40393=>19095, +40410=>19096, +40416=>19097, +40419=>19098, +19719=>19099, +40458=>19100, +40450=>19101, +40461=>19102, +40476=>19103, +40571=>19104, +139800=>19105, +40576=>19106, +40581=>19107, +40603=>19108, +172940=>19109, +40637=>19110, +173111=>19111, +40671=>19112, +40703=>19113, +40706=>19114, +19831=>19115, +40707=>19116, +40762=>19117, +40765=>19118, +40774=>19119, +40787=>19120, +40789=>19121, +40792=>19122, +173553=>19123, +40797=>19124, +173570=>19125, +40809=>19126, +40813=>19127, +40816=>19128, +173746=>19129, +11948=>19130, +13844=>19131, +14509=>19132, +15820=>19133, +16348=>19134, +17854=>19135, +17936=>19136, +19326=>19137, +19512=>19138, +19681=>19139, +19980=>19140, +20003=>19141, +20004=>19142, +20089=>19143, +20211=>19144, +20236=>19145, +20249=>19146, +20267=>19147, +20270=>19148, +20273=>19149, +20356=>19150, +20382=>19151, +20407=>19152, +20484=>19153, +20492=>19154, +20556=>19155, +20575=>19156, +20578=>19157, +20599=>19158, +20622=>19159, +20638=>19160, +20642=>19161, +20675=>19162, +20712=>19163, +20721=>19164, +20734=>19165, +20743=>19166, +20748=>19167, +20749=>19168, +20750=>19169, +20787=>19170, +20792=>19171, +20852=>19172, +20868=>19173, +20920=>19174, +20922=>19175, +20936=>19176, +20943=>19177, +20945=>19178, +20947=>19179, +20948=>19180, +20952=>19181, +20959=>19182, +20997=>19183, +21030=>19184, +21032=>19185, +21035=>19186, +21041=>19187, +21042=>19188, +21045=>19189, +21052=>19190, +21082=>19191, +21088=>19192, +21102=>19193, +21112=>19194, +21113=>19195, +21130=>19196, +21132=>19197, +21217=>19198, +21225=>19199, +21233=>19200, +21251=>19201, +21265=>19202, +21279=>19203, +21293=>19204, +21298=>19205, +21309=>19206, +21349=>19207, +21357=>19208, +21369=>19209, +21374=>19210, +21396=>19211, +21401=>19212, +21418=>19213, +21423=>19214, +21434=>19215, +21441=>19216, +21444=>19217, +21445=>19218, +21472=>19219, +21523=>19220, +21546=>19221, +21553=>19222, +21556=>19223, +21557=>19224, +21580=>19225, +21671=>19226, +21674=>19227, +21681=>19228, +21691=>19229, +21710=>19230, +21738=>19231, +21756=>19232, +21765=>19233, +21768=>19234, +21781=>19235, +21799=>19236, +21802=>19237, +21814=>19238, +21841=>19239, +21862=>19240, +21903=>19241, +21906=>19242, +21908=>19243, +21924=>19244, +21938=>19245, +21955=>19246, +21958=>19247, +21971=>19248, +21979=>19249, +21996=>19250, +21998=>19251, +22001=>19252, +22006=>19253, +22008=>19254, +22021=>19255, +22029=>19256, +22033=>19257, +22034=>19258, +22060=>19259, +22069=>19260, +22073=>19261, +22093=>19262, +22100=>19263, +22149=>19264, +22175=>19265, +22182=>19266, +22199=>19267, +22220=>19268, +22223=>19269, +22233=>19270, +22241=>19271, +22251=>19272, +22253=>19273, +22257=>19274, +22279=>19275, +22284=>19276, +22298=>19277, +22299=>19278, +22301=>19279, +22316=>19280, +22318=>19281, +22333=>19282, +22334=>19283, +22367=>19284, +22379=>19285, +22381=>19286, +22394=>19287, +22403=>19288, +22423=>19289, +22446=>19290, +22485=>19291, +22503=>19292, +22541=>19293, +22566=>19294, +22605=>19295, +22607=>19296, +22623=>19297, +22637=>19298, +22655=>19299, +22657=>19300, +22680=>19301, +22716=>19302, +22815=>19303, +22819=>19304, +22873=>19305, +22905=>19306, +22935=>19307, +22959=>19308, +22963=>19309, +23007=>19310, +23025=>19311, +23032=>19312, +23218=>19313, +23224=>19314, +23274=>19315, +23286=>19316, +23323=>19317, +23325=>19318, +23329=>19319, +23352=>19320, +23479=>19321, +23511=>19322, +23520=>19323, +23583=>19324, +23594=>19325, +23596=>19326, +23606=>19327, +23641=>19328, +23644=>19329, +23661=>19330, +23773=>19331, +23809=>19332, +23860=>19333, +23869=>19334, +23897=>19335, +23934=>19336, +23939=>19337, +24007=>19338, +24057=>19339, +24104=>19340, +24114=>19341, +24117=>19342, +24155=>19343, +24168=>19344, +24170=>19345, +24183=>19346, +24192=>19347, +24203=>19348, +24243=>19349, +24253=>19350, +24273=>19351, +24276=>19352, +24277=>19353, +24397=>19354, +24492=>19355, +24554=>19356, +24583=>19357, +24649=>19358, +24660=>19359, +24679=>19360, +24763=>19361, +24772=>19362, +24829=>19363, +24842=>19364, +24854=>19365, +24874=>19366, +24886=>19367, +24926=>19368, +24932=>19369, +24955=>19370, +24957=>19371, +24959=>19372, +24989=>19373, +25016=>19374, +25052=>19375, +25058=>19376, +25061=>19377, +25064=>19378, +25092=>19379, +25095=>19380, +25137=>19381, +25145=>19382, +25149=>19383, +25210=>19384, +25232=>19385, +25256=>19386, +25306=>19387, +25332=>19388, +25366=>19389, +25386=>19390, +25398=>19391, +25414=>19392, +25419=>19393, +25427=>19394, +25457=>19395, +25461=>19396, +25471=>19397, +25474=>19398, +25482=>19399, +25518=>19400, +25519=>19401, +25578=>19402, +25592=>19403, +25593=>19404, +25618=>19405, +25624=>19406, +25632=>19407, +25636=>19408, +25642=>19409, +25653=>19410, +25661=>19411, +25663=>19412, +25682=>19413, +25695=>19414, +25716=>19415, +25744=>19416, +25752=>19417, +25753=>19418, +25772=>19419, +25779=>19420, +25837=>19421, +25840=>19422, +25883=>19423, +25887=>19424, +25902=>19425, +25929=>19426, +25952=>19427, +26002=>19428, +26005=>19429, +26036=>19430, +26046=>19431, +26056=>19432, +26062=>19433, +26064=>19434, +26079=>19435, +26238=>19436, +26251=>19437, +26252=>19438, +26291=>19439, +26304=>19440, +26319=>19441, +26405=>19442, +26421=>19443, +26453=>19444, +26496=>19445, +26511=>19446, +26513=>19447, +26532=>19448, +26545=>19449, +26549=>19450, +26558=>19451, +26664=>19452, +26758=>19453, +26859=>19454, +26869=>19455, +26903=>19456, +26931=>19457, +26936=>19458, +26971=>19459, +26981=>19460, +27048=>19461, +27051=>19462, +27055=>19463, +27109=>19464, +27121=>19465, +27210=>19466, +27221=>19467, +27239=>19468, +27249=>19469, +27311=>19470, +27336=>19471, +27337=>19472, +27395=>19473, +27451=>19474, +27455=>19475, +27517=>19476, +27518=>19477, +27568=>19478, +27639=>19479, +27641=>19480, +27652=>19481, +27657=>19482, +27661=>19483, +27692=>19484, +27722=>19485, +27730=>19486, +27732=>19487, +27769=>19488, +27820=>19489, +27828=>19490, +27858=>19491, +28001=>19492, +28028=>19493, +28089=>19494, +28144=>19495, +28229=>19496, +28275=>19497, +28283=>19498, +28285=>19499, +28297=>19500, +28348=>19501, +28378=>19502, +28379=>19503, +28454=>19504, +28457=>19505, +28464=>19506, +28551=>19507, +28573=>19508, +28590=>19509, +28599=>19510, +28685=>19511, +28704=>19512, +28745=>19513, +28824=>19514, +28848=>19515, +28885=>19516, +28886=>19517, +28997=>19518, +29106=>19519, +29172=>19520, +29207=>19521, +29215=>19522, +29251=>19523, +29263=>19524, +29264=>19525, +29274=>19526, +29280=>19527, +29288=>19528, +29303=>19529, +29316=>19530, +29385=>19531, +29413=>19532, +29428=>19533, +29442=>19534, +29451=>19535, +29470=>19536, +29474=>19537, +29498=>19538, +29499=>19539, +29517=>19540, +29528=>19541, +29543=>19542, +29810=>19543, +29871=>19544, +29919=>19545, +29924=>19546, +29940=>19547, +29947=>19548, +29974=>19549, +29985=>19550, +30015=>19551, +30046=>19552, +30105=>19553, +30116=>19554, +30145=>19555, +30148=>19556, +30156=>19557, +30167=>19558, +30172=>19559, +30177=>19560, +30191=>19561, +30212=>19562, +30220=>19563, +30237=>19564, +30258=>19565, +30264=>19566, +30277=>19567, +30282=>19568, +30303=>19569, +30381=>19570, +30397=>19571, +30425=>19572, +30443=>19573, +30448=>19574, +30457=>19575, +30464=>19576, +30478=>19577, +30498=>19578, +30504=>19579, +30511=>19580, +30521=>19581, +30526=>19582, +30533=>19583, +30538=>19584, +30543=>19585, +30558=>19586, +30564=>19587, +30567=>19588, +30572=>19589, +30596=>19590, +30604=>19591, +30605=>19592, +30614=>19593, +30631=>19594, +30639=>19595, +30647=>19596, +30654=>19597, +30665=>19598, +30673=>19599, +30681=>19600, +30705=>19601, +30775=>19602, +30812=>19603, +30846=>19604, +30872=>19605, +30881=>19606, +30897=>19607, +30899=>19608, +30921=>19609, +30931=>19610, +30988=>19611, +31007=>19612, +31015=>19613, +31016=>19614, +31039=>19615, +31042=>19616, +31060=>19617, +31083=>19618, +31100=>19619, +31147=>19620, +31172=>19621, +31210=>19622, +31234=>19623, +31244=>19624, +31280=>19625, +31290=>19626, +31300=>19627, +31360=>19628, +31366=>19629, +31380=>19630, +31413=>19631, +31421=>19632, +31486=>19633, +31531=>19634, +31607=>19635, +31648=>19636, +31660=>19637, +31664=>19638, +31720=>19639, +31730=>19640, +31736=>19641, +31740=>19642, +31742=>19643, +31753=>19644, +31784=>19645, +31791=>19646, +31810=>19647, +31826=>19648, +31827=>19649, +31835=>19650, +31836=>19651, +31837=>19652, +31858=>19653, +31869=>19654, +31879=>19655, +31902=>19656, +31930=>19657, +31943=>19658, +31955=>19659, +31962=>19660, +32060=>19661, +32077=>19662, +32130=>19663, +32133=>19664, +32141=>19665, +32145=>19666, +32158=>19667, +32179=>19668, +32185=>19669, +32208=>19670, +32229=>19671, +32245=>19672, +32246=>19673, +32303=>19674, +32310=>19675, +32324=>19676, +32367=>19677, +32376=>19678, +32385=>19679, +32573=>19680, +32603=>19681, +32605=>19682, +32613=>19683, +32625=>19684, +32639=>19685, +32640=>19686, +32651=>19687, +32674=>19688, +32765=>19689, +32766=>19690, +32767=>19691, +32775=>19692, +32781=>19693, +32798=>19694, +32825=>19695, +32904=>19696, +32910=>19697, +32975=>19698, +32980=>19699, +33005=>19700, +33008=>19701, +33015=>19702, +33018=>19703, +33022=>19704, +33027=>19705, +33047=>19706, +33072=>19707, +33111=>19708, +33135=>19709, +33139=>19710, +33163=>19711, +33168=>19712, +33179=>19713, +33182=>19714, +33227=>19715, +33237=>19716, +33245=>19717, +33246=>19718, +33249=>19719, +33263=>19720, +33270=>19721, +33280=>19722, +33291=>19723, +33299=>19724, +33300=>19725, +33306=>19726, +33338=>19727, +33348=>19728, +33389=>19729, +33412=>19730, +33417=>19731, +33425=>19732, +33450=>19733, +33456=>19734, +33488=>19735, +33514=>19736, +33519=>19737, +33526=>19738, +33622=>19739, +33656=>19740, +33784=>19741, +33788=>19742, +33880=>19743, +33939=>19744, +33969=>19745, +33981=>19746, +34043=>19747, +34118=>19748, +34134=>19749, +34141=>19750, +34181=>19751, +34200=>19752, +34370=>19753, +34374=>19754, +34496=>19755, +34580=>19756, +34594=>19757, +34606=>19758, +34617=>19759, +34653=>19760, +34683=>19761, +34700=>19762, +34702=>19763, +34711=>19764, +34712=>19765, +34718=>19766, +34723=>19767, +34734=>19768, +34751=>19769, +34761=>19770, +34778=>19771, +34840=>19772, +34843=>19773, +34861=>19774, +34874=>19775, +34885=>19776, +34891=>19777, +34894=>19778, +34901=>19779, +34906=>19780, +34926=>19781, +34970=>19782, +34971=>19783, +34972=>19784, +35021=>19785, +35040=>19786, +35055=>19787, +35086=>19788, +35087=>19789, +35110=>19790, +35125=>19791, +35162=>19792, +35164=>19793, +35179=>19794, +35184=>19795, +35196=>19796, +35237=>19797, +35253=>19798, +35260=>19799, +35285=>19800, +35401=>19801, +35415=>19802, +35431=>19803, +35454=>19804, +35462=>19805, +35478=>19806, +35510=>19807, +35529=>19808, +35537=>19809, +35549=>19810, +35564=>19811, +35573=>19812, +35590=>19813, +35599=>19814, +35601=>19815, +35653=>19816, +35666=>19817, +35693=>19818, +35704=>19819, +35708=>19820, +35710=>19821, +35717=>19822, +35743=>19823, +35915=>19824, +35923=>19825, +35963=>19826, +36026=>19827, +36037=>19828, +36041=>19829, +36050=>19830, +36076=>19831, +36085=>19832, +36087=>19833, +36097=>19834, +36099=>19835, +36119=>19836, +36124=>19837, +36206=>19838, +36241=>19839, +36255=>19840, +36267=>19841, +36274=>19842, +36309=>19843, +36327=>19844, +36337=>19845, +36338=>19846, +36340=>19847, +36353=>19848, +36363=>19849, +36390=>19850, +36401=>19851, +36416=>19852, +36417=>19853, +36429=>19854, +36431=>19855, +36444=>19856, +36449=>19857, +36457=>19858, +36465=>19859, +36469=>19860, +36471=>19861, +36489=>19862, +36496=>19863, +36501=>19864, +36506=>19865, +36519=>19866, +36521=>19867, +36525=>19868, +36584=>19869, +36592=>19870, +36615=>19871, +36632=>19872, +36645=>19873, +36647=>19874, +36652=>19875, +36661=>19876, +36666=>19877, +36675=>19878, +36679=>19879, +36689=>19880, +36693=>19881, +36768=>19882, +36769=>19883, +36770=>19884, +36773=>19885, +36868=>19886, +36891=>19887, +36911=>19888, +36940=>19889, +36955=>19890, +36976=>19891, +36980=>19892, +36985=>19893, +37003=>19894, +37016=>19895, +37024=>19896, +37042=>19897, +37053=>19898, +37065=>19899, +37104=>19900, +37125=>19901, +37157=>19902, +37210=>19903, +37223=>19904, +37242=>19905, +37258=>19906, +37265=>19907, +37269=>19908, +37296=>19909, +37307=>19910, +37309=>19911, +37314=>19912, +37317=>19913, +37376=>19914, +37385=>19915, +37411=>19916, +37494=>19917, +37518=>19918, +37551=>19919, +37563=>19920, +37564=>19921, +37569=>19922, +37571=>19923, +37573=>19924, +37576=>19925, +37652=>19926, +37683=>19927, +37686=>19928, +37720=>19929, +37759=>19930, +37762=>19931, +37770=>19932, +37819=>19933, +37836=>19934, +37862=>19935, +37881=>19936, +37890=>19937, +37901=>19938, +37902=>19939, +37934=>19940, +37964=>19941, +38280=>19942, +38305=>19943, +38335=>19944, +38342=>19945, +38345=>19946, +38353=>19947, +38354=>19948, +38368=>19949, +38372=>19950, +38374=>19951, +38436=>19952, +38449=>19953, +38456=>19954, +38461=>19955, +38484=>19956, +38516=>19957, +38523=>19958, +38527=>19959, +38529=>19960, +38531=>19961, +38537=>19962, +38550=>19963, +38574=>19964, +38659=>19965, +38683=>19966, +38689=>19967, +38690=>19968, +38696=>19969, +38705=>19970, +38759=>19971, +38774=>19972, +38781=>19973, +38783=>19974, +38809=>19975, +38815=>19976, +38828=>19977, +38841=>19978, +38861=>19979, +38880=>19980, +38895=>19981, +38919=>19982, +38950=>19983, +38958=>19984, +39010=>19985, +39011=>19986, +39092=>19987, +39109=>19988, +39170=>19989, +39185=>19990, +39189=>19991, +39221=>19992, +39240=>19993, +39252=>19994, +39262=>19995, +39393=>19996, +39436=>19997, +39440=>19998, +39459=>19999, +39489=>20000, +39505=>20001, +39613=>20002, +39614=>20003, +39681=>20004, +39689=>20005, +39691=>20006, +39693=>20007, +39694=>20008, +39705=>20009, +39733=>20010, +39752=>20011, +39765=>20012, +39784=>20013, +39808=>20014, +39814=>20015, +39824=>20016, +39837=>20017, +39856=>20018, +39871=>20019, +39880=>20020, +39935=>20021, +39938=>20022, +39964=>20023, +39989=>20024, +40004=>20025, +40022=>20026, +40033=>20027, +40040=>20028, +40240=>20029, +40253=>20030, +40298=>20031, +40315=>20032, +40421=>20033, +40425=>20034, +40435=>20035, +40570=>20036, +40578=>20037, +40579=>20038, +40580=>20039, +40624=>20040, +40676=>20041, +40688=>20042, +40690=>20043, +40713=>20044, +40719=>20045, +40724=>20046, +40731=>20047, +40738=>20048, +40742=>20049, +40746=>20050, +40747=>20051, +40756=>20052, +40794=>20053, +40815=>20054, +40862=>20055, +40869=>20056, +131317=>20057, +151044=>20058, +151538=>20059, +163187=>20060, +194581=>20061, +194630=>20062, +194713=>20063, +194726=>20064, +194789=>20065, +195038=>20066, +13790=>20067, +40895=>20068, +40896=>20069, +40897=>20070, +40898=>20071, +172722=>20072, +131416=>20075, +132529=>20080, +132844=>20083, +134488=>20090, +154060=>20112, +14756=>20122, +14776=>20123, +142914=>20124, +14940=>20127, +133064=>20128, +143339=>20130, +162228=>20133, +15044=>20135, +15051=>20136, +14981=>20142, +15347=>20151, +27384=>20152, +15665=>20158, +147531=>20168, +15936=>20170, +14497=>20171, +158878=>20206, +18207=>20219, +162876=>20220, +18462=>20225, +39709=>20297, +39724=>20298, +20482=>20299, +20958=>20300, +21255=>20301, +23532=>20302, +63784=>20303, +26142=>20304, +63785=>20305, +28746=>20306, +64021=>20307, +21857=>20308, +27706=>20309, +31328=>20310, +156492=>20311, +34819=>20312, +38315=>20313, +38741=>20314, +171581=>20315, +173594=>20316, +900=>20317, +901=>20318, +272=>20322, +294=>20323, +306=>20324, +319=>20325, +330=>20326, +358=>20327, +307=>20328, +312=>20329, +320=>20330, +329=>20331, +359=>20332, +266=>20333, +278=>20334, +286=>20335, +290=>20336, +288=>20337, +304=>20338, +302=>20339, +310=>20340, +315=>20342, +325=>20343, +342=>20344, +370=>20345, +471=>20346, +475=>20347, +473=>20348, +469=>20349, +372=>20350, +374=>20351, +267=>20352, +279=>20353, +501=>20354, +287=>20355, +289=>20356, +303=>20357, +311=>20358, +316=>20360, +326=>20361, +343=>20362, +371=>20363, +373=>20364, +375=>20365, +8494=>20366, +8710=>20367, +8719=>20368, +8804=>20369, +8805=>20370, +9674=>20371, +902=>20427, +904=>20428, +905=>20429, +906=>20430, +938=>20431, +908=>20432, +910=>20433, +939=>20434, +911=>20435, +940=>20436, +941=>20437, +942=>20438, +943=>20439, +970=>20440, +912=>20441, +972=>20442, +973=>20443, +971=>20444, +944=>20445, +974=>20446, +1026=>20447, +1027=>20448, +1028=>20449, +1029=>20450, +1030=>20451, +1031=>20452, +1032=>20453, +1033=>20454, +1034=>20455, +1035=>20456, +1036=>20457, +1038=>20458, +1039=>20459, +1106=>20460, +1107=>20461, +1108=>20462, +1109=>20463, +1110=>20464, +1111=>20465, +1112=>20466, +1113=>20467, +1114=>20468, +1115=>20469, +1116=>20470, +1118=>20471, +1119=>20472, +9361=>20587, +9362=>20588, +20021=>21075, +20060=>21076, +20067=>21077, +20072=>21078, +20084=>21079, +20085=>21080, +20119=>21081, +20143=>21082, +20187=>21083, +20194=>21084, +20200=>21085, +20207=>21086, +20222=>21087, +20226=>21088, +20232=>21089, +20242=>21090, +20247=>21091, +20275=>21092, +20277=>21093, +20288=>21094, +20290=>21095, +20299=>21096, +20300=>21097, +20306=>21098, +20323=>21099, +20334=>21100, +20337=>21101, +20345=>21102, +20353=>21103, +20361=>21104, +20364=>21105, +20366=>21106, +20368=>21107, +20371=>21108, +20377=>21109, +20383=>21110, +20409=>21111, +20411=>21112, +20412=>21113, +20413=>21114, +20416=>21115, +20417=>21116, +20422=>21117, +20424=>21118, +20428=>21119, +20444=>21120, +20450=>21121, +20464=>21122, +20476=>21123, +20487=>21124, +20490=>21125, +20503=>21126, +20509=>21127, +20528=>21128, +20530=>21129, +20531=>21130, +20533=>21131, +20549=>21132, +20554=>21133, +20561=>21134, +20562=>21135, +20569=>21136, +20576=>21137, +20583=>21138, +20589=>21139, +20593=>21140, +20609=>21141, +20611=>21142, +20612=>21143, +20614=>21144, +20618=>21145, +20624=>21146, +20635=>21147, +20639=>21148, +20640=>21149, +20641=>21150, +20655=>21151, +20656=>21152, +20665=>21153, +20669=>21154, +20672=>21155, +20691=>21156, +20700=>21157, +20701=>21158, +20703=>21159, +20706=>21160, +20708=>21161, +20726=>21162, +20730=>21163, +20761=>21165, +20764=>21166, +20765=>21167, +20771=>21168, +20775=>21169, +20776=>21170, +20780=>21171, +20781=>21172, +20783=>21173, +20785=>21174, +20788=>21175, +20793=>21176, +20802=>21177, +20815=>21178, +20819=>21179, +20824=>21180, +20838=>21181, +20862=>21182, +20878=>21183, +20927=>21184, +20930=>21185, +20946=>21186, +20949=>21187, +20965=>21188, +20978=>21189, +20983=>21190, +21016=>21191, +21026=>21192, +21061=>21193, +21080=>21194, +21087=>21195, +21120=>21196, +21125=>21197, +21141=>21198, +21142=>21199, +21143=>21200, +21146=>21201, +21157=>21202, +21159=>21203, +21168=>21204, +21174=>21205, +21175=>21206, +21176=>21207, +21181=>21208, +21188=>21209, +21190=>21210, +21199=>21211, +21204=>21212, +21212=>21213, +21221=>21214, +21224=>21215, +21226=>21216, +21228=>21217, +21236=>21218, +21238=>21219, +21260=>21220, +21267=>21221, +21272=>21222, +21275=>21223, +21278=>21224, +21285=>21225, +21287=>21226, +21288=>21227, +21289=>21228, +21291=>21229, +21292=>21230, +21296=>21231, +21308=>21232, +21337=>21233, +21339=>21234, +21379=>21236, +21383=>21237, +21384=>21238, +21390=>21239, +21409=>21240, +21429=>21241, +21432=>21242, +21437=>21243, +21455=>21244, +21458=>21245, +21459=>21246, +21470=>21247, +21479=>21249, +21506=>21250, +21530=>21251, +21537=>21252, +21551=>21253, +21572=>21254, +21575=>21255, +21583=>21256, +21598=>21257, +21604=>21258, +21607=>21259, +21609=>21260, +21613=>21261, +21614=>21262, +21633=>21263, +21635=>21264, +21637=>21265, +21641=>21266, +21649=>21267, +21663=>21268, +21706=>21269, +21728=>21270, +21750=>21271, +21758=>21272, +21772=>21273, +21773=>21274, +21810=>21275, +21819=>21276, +21821=>21277, +21833=>21278, +21837=>21279, +21848=>21280, +21850=>21281, +21851=>21282, +21887=>21283, +21907=>21284, +21911=>21285, +21923=>21286, +21953=>21287, +21963=>21288, +21975=>21289, +21976=>21290, +21982=>21291, +22015=>21292, +22026=>21294, +22041=>21295, +22067=>21296, +22076=>21297, +22081=>21298, +22083=>21299, +22084=>21300, +22086=>21301, +22113=>21302, +22114=>21303, +22115=>21304, +22133=>21305, +22148=>21306, +22155=>21307, +22183=>21308, +22187=>21309, +22206=>21310, +22219=>21311, +22224=>21312, +22236=>21313, +22245=>21314, +22246=>21315, +22247=>21316, +22273=>21317, +22274=>21318, +22289=>21319, +22304=>21320, +22306=>21321, +22308=>21322, +22309=>21323, +22314=>21324, +22335=>21325, +22354=>21326, +22370=>21327, +22375=>21328, +22382=>21329, +22385=>21330, +22393=>21331, +22398=>21332, +22401=>21333, +22420=>21334, +22425=>21335, +22431=>21336, +22433=>21337, +22421=>21338, +22439=>21339, +22441=>21340, +22461=>21341, +22493=>21342, +22505=>21343, +22526=>21344, +22531=>21345, +22536=>21346, +22497=>21347, +22540=>21348, +22555=>21349, +22559=>21350, +22573=>21351, +22591=>21352, +22608=>21353, +22613=>21354, +22632=>21355, +22648=>21356, +22663=>21357, +22664=>21358, +22668=>21359, +22678=>21360, +22688=>21361, +22689=>21362, +22690=>21363, +22694=>21364, +22724=>21365, +22722=>21366, +22728=>21367, +22742=>21368, +22749=>21369, +22753=>21370, +22802=>21372, +22803=>21373, +22813=>21374, +22817=>21375, +22824=>21376, +22832=>21377, +22835=>21378, +22837=>21379, +22838=>21380, +22847=>21381, +22851=>21382, +22866=>21383, +22878=>21384, +22891=>21385, +22895=>21386, +22898=>21387, +22907=>21388, +22924=>21389, +22926=>21390, +22933=>21391, +22951=>21392, +22957=>21393, +22960=>21394, +22967=>21395, +22977=>21396, +22980=>21397, +23023=>21398, +23026=>21399, +23028=>21400, +23031=>21401, +23040=>21402, +23054=>21403, +23058=>21404, +23070=>21405, +23076=>21406, +23080=>21407, +23082=>21408, +23088=>21409, +23108=>21410, +23109=>21411, +23112=>21412, +23116=>21413, +23120=>21414, +23134=>21415, +23163=>21416, +23184=>21417, +23187=>21418, +23190=>21419, +23193=>21420, +23227=>21421, +23238=>21422, +23240=>21423, +23247=>21424, +23293=>21425, +23297=>21426, +23371=>21427, +23390=>21428, +23406=>21429, +23430=>21430, +23438=>21431, +23440=>21432, +23441=>21433, +23444=>21434, +23464=>21435, +23465=>21436, +23469=>21437, +23471=>21438, +23473=>21439, +23474=>21440, +23482=>21441, +23484=>21442, +23489=>21443, +23501=>21444, +23503=>21445, +23513=>21446, +23514=>21447, +23535=>21448, +23540=>21449, +23564=>21450, +23575=>21451, +23590=>21452, +23598=>21453, +23602=>21454, +23605=>21455, +23642=>21456, +23668=>21457, +23669=>21458, +23675=>21459, +23677=>21460, +23687=>21461, +23698=>21462, +23709=>21463, +23730=>21464, +23732=>21465, +23767=>21466, +23790=>21467, +23793=>21468, +23794=>21469, +23826=>21470, +23843=>21471, +23871=>21472, +23880=>21473, +23893=>21474, +23889=>21475, +23903=>21476, +23904=>21477, +23906=>21478, +23908=>21479, +23929=>21480, +23930=>21481, +23935=>21482, +23946=>21483, +23955=>21484, +23957=>21485, +23963=>21486, +23967=>21487, +23979=>21488, +24003=>21489, +24014=>21490, +24025=>21491, +24071=>21492, +24077=>21493, +24096=>21494, +24139=>21495, +24144=>21496, +24145=>21497, +24156=>21498, +24176=>21499, +24206=>21500, +24226=>21501, +24228=>21502, +24241=>21503, +24268=>21504, +24270=>21505, +24284=>21506, +24286=>21507, +24293=>21508, +24299=>21509, +24326=>21510, +24345=>21511, +24356=>21512, +24363=>21513, +24364=>21514, +24366=>21515, +24368=>21516, +24383=>21517, +24388=>21518, +24411=>21519, +24416=>21520, +24431=>21521, +24436=>21522, +24437=>21523, +24440=>21524, +24442=>21525, +24461=>21526, +24470=>21527, +24477=>21528, +24491=>21529, +24496=>21530, +24497=>21531, +24520=>21532, +24528=>21533, +24529=>21534, +24552=>21535, +24556=>21536, +24562=>21537, +24566=>21538, +24570=>21539, +24586=>21540, +24595=>21541, +24607=>21542, +24621=>21543, +24640=>21544, +24648=>21545, +24657=>21546, +24662=>21547, +24663=>21548, +24689=>21549, +24702=>21550, +24706=>21551, +24710=>21552, +24712=>21553, +24718=>21554, +24721=>21555, +24723=>21556, +24728=>21557, +24738=>21559, +24741=>21560, +24759=>21561, +24770=>21562, +24777=>21563, +24778=>21564, +24782=>21565, +24783=>21566, +24802=>21567, +24805=>21568, +24828=>21569, +24834=>21570, +24839=>21571, +24844=>21572, +24855=>21573, +24866=>21574, +24881=>21575, +24885=>21576, +24889=>21577, +24901=>21578, +24905=>21579, +24940=>21580, +24946=>21581, +24952=>21582, +24960=>21583, +24961=>21584, +24963=>21585, +24964=>21586, +24971=>21587, +24988=>21588, +24992=>21589, +25002=>21590, +25024=>21591, +25025=>21592, +25038=>21593, +25039=>21594, +25054=>21595, +25057=>21596, +25063=>21597, +25065=>21598, +25068=>21599, +25069=>21600, +25071=>21601, +25089=>21602, +25091=>21603, +25116=>21604, +25120=>21605, +25127=>21606, +25131=>21607, +25154=>21608, +25156=>21609, +25168=>21610, +25172=>21611, +25180=>21612, +25213=>21613, +25229=>21614, +25230=>21615, +25231=>21616, +25267=>21617, +25270=>21618, +25271=>21619, +25274=>21620, +25278=>21621, +25279=>21622, +25294=>21623, +25322=>21624, +25330=>21625, +25348=>21626, +25355=>21627, +25363=>21628, +25385=>21629, +25389=>21630, +25418=>21631, +25426=>21632, +25428=>21633, +25432=>21634, +25435=>21635, +25446=>21636, +25453=>21637, +25464=>21638, +25493=>21639, +25498=>21640, +25508=>21641, +25510=>21642, +25517=>21643, +25537=>21644, +25541=>21645, +25544=>21646, +25550=>21647, +25555=>21648, +25587=>21649, +25610=>21650, +25648=>21651, +25675=>21652, +25679=>21653, +25683=>21654, +25692=>21655, +25697=>21656, +25699=>21657, +25733=>21658, +25743=>21659, +25755=>21660, +25761=>21661, +25763=>21662, +25766=>21663, +25768=>21664, +25789=>21665, +25801=>21666, +25809=>21667, +25833=>21668, +25834=>21669, +25845=>21670, +25857=>21671, +25864=>21672, +25865=>21673, +25866=>21674, +25875=>21675, +25894=>21676, +25905=>21677, +25914=>21678, +25916=>21679, +25917=>21680, +25923=>21681, +25936=>21682, +25938=>21683, +25951=>21684, +25981=>21685, +26008=>21686, +26016=>21687, +26019=>21688, +26022=>21689, +26030=>21690, +26035=>21691, +26070=>21692, +26072=>21693, +26100=>21695, +26101=>21696, +26110=>21697, +26111=>21698, +26125=>21699, +26129=>21700, +26130=>21701, +26134=>21702, +26141=>21703, +26147=>21704, +26150=>21705, +26153=>21706, +26169=>21707, +26167=>21708, +26176=>21709, +26182=>21710, +26186=>21711, +26200=>21712, +26208=>21713, +26229=>21714, +26239=>21715, +26233=>21716, +26236=>21717, +26266=>21718, +26267=>21719, +26268=>21720, +26271=>21721, +26306=>21723, +26307=>21724, +26316=>21725, +26318=>21726, +26324=>21727, +26335=>21728, +26347=>21729, +26350=>21730, +26375=>21731, +26396=>21732, +26400=>21733, +26402=>21734, +26430=>21735, +26437=>21736, +26476=>21737, +26500=>21738, +26510=>21739, +26518=>21740, +26521=>21741, +26556=>21742, +26557=>21743, +26562=>21744, +26565=>21745, +26569=>21746, +26588=>21747, +26593=>21748, +26598=>21749, +26610=>21750, +26614=>21751, +26644=>21752, +26649=>21753, +26663=>21754, +26671=>21755, +26687=>21756, +26698=>21757, +26712=>21758, +26735=>21759, +26736=>21760, +26737=>21761, +26745=>21762, +26747=>21763, +26760=>21764, +26785=>21765, +26793=>21766, +26798=>21767, +26833=>21768, +26835=>21769, +26844=>21770, +26845=>21771, +26858=>21772, +26870=>21773, +26877=>21774, +26886=>21775, +26889=>21776, +26896=>21777, +26902=>21778, +26929=>21779, +26949=>21780, +26958=>21781, +26982=>21782, +26992=>21783, +26993=>21784, +27003=>21785, +27021=>21786, +27041=>21787, +27064=>21788, +27077=>21789, +27080=>21790, +27136=>21792, +27139=>21793, +27168=>21794, +27172=>21795, +27191=>21796, +27242=>21798, +27265=>21799, +27270=>21800, +27271=>21801, +27291=>21802, +27312=>21803, +27313=>21804, +27316=>21805, +27326=>21806, +27327=>21807, +27340=>21808, +27349=>21809, +27350=>21810, +27376=>21811, +27388=>21812, +27394=>21813, +27398=>21814, +27399=>21815, +27401=>21816, +27432=>21817, +27435=>21818, +27446=>21819, +27469=>21820, +27474=>21821, +27485=>21822, +27499=>21823, +27502=>21824, +27504=>21825, +27525=>21826, +27543=>21827, +27551=>21828, +27552=>21829, +27554=>21830, +27555=>21831, +27560=>21832, +27564=>21833, +27576=>21834, +27577=>21835, +27587=>21836, +27588=>21837, +27619=>21838, +27666=>21839, +27673=>21840, +27679=>21841, +27686=>21842, +27687=>21843, +27688=>21844, +27694=>21845, +27707=>21846, +27723=>21847, +27727=>21848, +27755=>21849, +27768=>21850, +27783=>21851, +27807=>21852, +27824=>21853, +27826=>21854, +27853=>21855, +27855=>21856, +27857=>21857, +27879=>21858, +27890=>21859, +27892=>21860, +27911=>21861, +27919=>21862, +27923=>21863, +27930=>21864, +27944=>21865, +27999=>21866, +28007=>21867, +28050=>21868, +28055=>21869, +28087=>21870, +28093=>21871, +28128=>21872, +28130=>21873, +28133=>21874, +28143=>21875, +28148=>21876, +28160=>21877, +28164=>21878, +28219=>21879, +28242=>21880, +28253=>21881, +28258=>21882, +28264=>21883, +28301=>21884, +28313=>21885, +28320=>21886, +28333=>21887, +28334=>21888, +28339=>21889, +28347=>21890, +28352=>21891, +28360=>21892, +28365=>21893, +28367=>21894, +28397=>21895, +28398=>21896, +28420=>21897, +28424=>21898, +28429=>21899, +28438=>21900, +28443=>21901, +28475=>21902, +28461=>21903, +28495=>21904, +28499=>21905, +28509=>21906, +28524=>21907, +28547=>21908, +28563=>21909, +28582=>21910, +28592=>21911, +28613=>21912, +28648=>21913, +28669=>21914, +28695=>21915, +28719=>21916, +28724=>21917, +28727=>21918, +28740=>21919, +28744=>21920, +28757=>21921, +28820=>21922, +28822=>21923, +28827=>21924, +28852=>21925, +28922=>21926, +28933=>21927, +28939=>21928, +28973=>21929, +28984=>21930, +28993=>21931, +29003=>21932, +29015=>21934, +29018=>21935, +29068=>21936, +29082=>21937, +29104=>21938, +29119=>21939, +29120=>21940, +29132=>21941, +29146=>21942, +29176=>21943, +29192=>21944, +29193=>21945, +29203=>21946, +29210=>21947, +29220=>21948, +29231=>21949, +29253=>21950, +29262=>21951, +29278=>21952, +29291=>21953, +29297=>21954, +29307=>21955, +29308=>21956, +29321=>21957, +29331=>21958, +29352=>21959, +29397=>21960, +29398=>21961, +29400=>21962, +29407=>21963, +29438=>21964, +29453=>21965, +29459=>21966, +29490=>21967, +29493=>21968, +29526=>21969, +29533=>21970, +29534=>21971, +29535=>21972, +29536=>21973, +29545=>21974, +29561=>21975, +29568=>21976, +29582=>21977, +29584=>21978, +29587=>21979, +29591=>21980, +29610=>21981, +29613=>21982, +29638=>21983, +29644=>21984, +29651=>21985, +29661=>21986, +29670=>21987, +29687=>21988, +29691=>21989, +29695=>21990, +29696=>21991, +29713=>21992, +29741=>21993, +29799=>21994, +29800=>21995, +29806=>21996, +29839=>21997, +29841=>21998, +29850=>21999, +29870=>22000, +29873=>22001, +29874=>22002, +29900=>22003, +29904=>22004, +29907=>22005, +29915=>22007, +29928=>22008, +29930=>22009, +29948=>22011, +29958=>22012, +29970=>22013, +29991=>22014, +29993=>22015, +30006=>22016, +30009=>22017, +30019=>22018, +30023=>22019, +30039=>22020, +30047=>22021, +30049=>22022, +30075=>22023, +30076=>22024, +30085=>22025, +30101=>22026, +30108=>22027, +30138=>22028, +30226=>22029, +30243=>22030, +30249=>22031, +30265=>22032, +30266=>22033, +30272=>22034, +30276=>22035, +30297=>22036, +30341=>22037, +30348=>22038, +30349=>22039, +30367=>22040, +30370=>22041, +30371=>22042, +30401=>22043, +30411=>22044, +30432=>22046, +30454=>22047, +30470=>22048, +30482=>22049, +30484=>22050, +30485=>22051, +30492=>22052, +30510=>22053, +30525=>22054, +30530=>22055, +30546=>22056, +30550=>22057, +30551=>22058, +30576=>22059, +30579=>22060, +30580=>22061, +30638=>22064, +30641=>22065, +30645=>22066, +30659=>22067, +30674=>22068, +30677=>22069, +30712=>22070, +30734=>22071, +30737=>22072, +30749=>22073, +30755=>22074, +30788=>22075, +30792=>22076, +30796=>22077, +30802=>22078, +30814=>22079, +30816=>22080, +30817=>22081, +30819=>22082, +30863=>22083, +30888=>22084, +30892=>22085, +30898=>22086, +30909=>22087, +30911=>22088, +30919=>22089, +30930=>22090, +30934=>22091, +30939=>22092, +30943=>22093, +30954=>22094, +30963=>22095, +30966=>22096, +30975=>22097, +30982=>22098, +31002=>22099, +31006=>22100, +31008=>22101, +31017=>22102, +31021=>22103, +31029=>22104, +31044=>22105, +31051=>22106, +31055=>22107, +31057=>22108, +31081=>22109, +31099=>22110, +31102=>22111, +31116=>22112, +31121=>22113, +31123=>22114, +31132=>22115, +31144=>22116, +31151=>22117, +31183=>22118, +31197=>22119, +31200=>22120, +31202=>22121, +31205=>22122, +31217=>22123, +31224=>22124, +31228=>22125, +31239=>22126, +31265=>22127, +31271=>22128, +31275=>22129, +31279=>22130, +31284=>22131, +31285=>22132, +31304=>22133, +31317=>22134, +31333=>22135, +31358=>22136, +31371=>22137, +31377=>22138, +31390=>22139, +31433=>22140, +31451=>22141, +31465=>22142, +31468=>22143, +31473=>22144, +31483=>22145, +31519=>22146, +31523=>22147, +31529=>22148, +31536=>22149, +31540=>22150, +31551=>22151, +31552=>22152, +31594=>22153, +31620=>22154, +31625=>22155, +31630=>22156, +31638=>22157, +31653=>22158, +31666=>22159, +31670=>22160, +31674=>22161, +31675=>22162, +31677=>22163, +31682=>22164, +31688=>22165, +31707=>22166, +31732=>22167, +31733=>22168, +31737=>22169, +31738=>22170, +31746=>22171, +31748=>22172, +31750=>22173, +31756=>22174, +31769=>22175, +31771=>22176, +31781=>22177, +31788=>22178, +31796=>22179, +31801=>22180, +31802=>22181, +31814=>22182, +31829=>22183, +31834=>22184, +31843=>22185, +31868=>22187, +31878=>22188, +31920=>22189, +31931=>22190, +31951=>22191, +31956=>22192, +31977=>22193, +32015=>22194, +32017=>22195, +32022=>22196, +32038=>22197, +32042=>22198, +32045=>22199, +32081=>22200, +32087=>22201, +32101=>22202, +32103=>22203, +32120=>22204, +32123=>22205, +32129=>22206, +32150=>22207, +32195=>22208, +32196=>22209, +32197=>22210, +32198=>22211, +32205=>22212, +32206=>22213, +32256=>22214, +32226=>22215, +32234=>22216, +32237=>22217, +32250=>22218, +32284=>22219, +32301=>22220, +32307=>22221, +32319=>22222, +32334=>22223, +32336=>22224, +32344=>22225, +32351=>22226, +32357=>22227, +32405=>22228, +32413=>22229, +32414=>22230, +32575=>22231, +32604=>22232, +32614=>22233, +32653=>22235, +32655=>22236, +32678=>22237, +32682=>22238, +32692=>22239, +32700=>22240, +32704=>22241, +32712=>22242, +32744=>22243, +32783=>22244, +32787=>22245, +32797=>22246, +32799=>22247, +32800=>22248, +32814=>22249, +32820=>22250, +32830=>22251, +32832=>22252, +32836=>22253, +32868=>22254, +32877=>22255, +32897=>22256, +32953=>22257, +32968=>22258, +32973=>22259, +32978=>22260, +33006=>22261, +33010=>22262, +33014=>22263, +33017=>22264, +33035=>22265, +33052=>22266, +33056=>22267, +33084=>22268, +33093=>22269, +33095=>22270, +33106=>22271, +33121=>22272, +33143=>22273, +33158=>22274, +33166=>22275, +33174=>22276, +33186=>22277, +33198=>22278, +33221=>22279, +33230=>22280, +33259=>22281, +33264=>22282, +33265=>22283, +33266=>22284, +33269=>22285, +33272=>22286, +33295=>22288, +33309=>22289, +33320=>22290, +33347=>22291, +33358=>22292, +33361=>22293, +33366=>22294, +33383=>22295, +33403=>22296, +33408=>22297, +33409=>22298, +33415=>22299, +33428=>22300, +33430=>22301, +33432=>22302, +33434=>22303, +33435=>22304, +33440=>22305, +33498=>22306, +33504=>22307, +33508=>22308, +33517=>22309, +33546=>22310, +33547=>22311, +33566=>22312, +33567=>22313, +33569=>22314, +33580=>22315, +33582=>22316, +33587=>22317, +33591=>22318, +33597=>22319, +33602=>22320, +33613=>22321, +33614=>22322, +33648=>22323, +33664=>22324, +33666=>22325, +33668=>22326, +33689=>22327, +33692=>22328, +33702=>22329, +33708=>22330, +33726=>22331, +33619=>22332, +33768=>22333, +33817=>22334, +33709=>22335, +33839=>22336, +33861=>22337, +33863=>22338, +33869=>22339, +33878=>22340, +33888=>22342, +33892=>22343, +33895=>22344, +33898=>22345, +33908=>22346, +33917=>22347, +33938=>22348, +33941=>22349, +33961=>22350, +33962=>22351, +33991=>22352, +33992=>22353, +33996=>22354, +34034=>22355, +34039=>22356, +34050=>22357, +34051=>22358, +34055=>22359, +34062=>22360, +34064=>22361, +34076=>22362, +34082=>22363, +34087=>22364, +34090=>22365, +34099=>22366, +34102=>22367, +34111=>22368, +34128=>22369, +34130=>22370, +34140=>22371, +34143=>22373, +34144=>22374, +34169=>22375, +34185=>22376, +34187=>22377, +34208=>22378, +34213=>22379, +34215=>22380, +34228=>22381, +34230=>22382, +34232=>22383, +34237=>22384, +34238=>22385, +34239=>22386, +34242=>22387, +34266=>22388, +34272=>22389, +34280=>22390, +34291=>22391, +34300=>22392, +34317=>22393, +34318=>22394, +34329=>22395, +34331=>22396, +34358=>22397, +34362=>22398, +34365=>22399, +34392=>22400, +34393=>22401, +34397=>22402, +34400=>22403, +34401=>22404, +34404=>22405, +34409=>22406, +34422=>22407, +34454=>22408, +34458=>22409, +34465=>22410, +34470=>22411, +34477=>22412, +34484=>22413, +34485=>22414, +34487=>22415, +34489=>22416, +34495=>22417, +34501=>22418, +34514=>22419, +34522=>22420, +34524=>22421, +34528=>22422, +34533=>22423, +34535=>22424, +34440=>22425, +34564=>22426, +34575=>22427, +34607=>22428, +34610=>22429, +34620=>22430, +34621=>22431, +34629=>22432, +34637=>22433, +34657=>22434, +34671=>22435, +34691=>22436, +34692=>22437, +34693=>22438, +34694=>22439, +34704=>22440, +34709=>22441, +34737=>22443, +34760=>22444, +34762=>22445, +34773=>22446, +34777=>22447, +34780=>22448, +34786=>22449, +34788=>22450, +34801=>22451, +34803=>22452, +34808=>22453, +34810=>22454, +34815=>22455, +34825=>22456, +34841=>22457, +34834=>22458, +34842=>22459, +34846=>22460, +34864=>22461, +34869=>22462, +34881=>22463, +34883=>22464, +34888=>22465, +34889=>22466, +34897=>22468, +34908=>22469, +34912=>22470, +34929=>22471, +34937=>22472, +34939=>22473, +34944=>22474, +34975=>22475, +34984=>22476, +35002=>22477, +35019=>22478, +35020=>22479, +35038=>22480, +35047=>22481, +35063=>22482, +35085=>22483, +35093=>22484, +35094=>22485, +35104=>22486, +35112=>22487, +35121=>22488, +35130=>22489, +35142=>22490, +35151=>22491, +35154=>22492, +35159=>22493, +35163=>22494, +35169=>22495, +35171=>22496, +35182=>22497, +35187=>22498, +35189=>22499, +35194=>22500, +35197=>22501, +35213=>22502, +35221=>22503, +35227=>22504, +35228=>22505, +35232=>22506, +35252=>22507, +35254=>22508, +35287=>22509, +35305=>22510, +35309=>22511, +35321=>22512, +35332=>22513, +35333=>22514, +35358=>22515, +35360=>22516, +35364=>22517, +35366=>22518, +35371=>22519, +35372=>22520, +35375=>22521, +35389=>22522, +35392=>22523, +35395=>22524, +35411=>22525, +35414=>22526, +35420=>22527, +35429=>22528, +35446=>22529, +35447=>22530, +35450=>22531, +35451=>22532, +35456=>22533, +35459=>22534, +35467=>22535, +35471=>22536, +35474=>22537, +35479=>22538, +35481=>22539, +35487=>22540, +35497=>22541, +35503=>22542, +35507=>22543, +35515=>22544, +35523=>22545, +35526=>22546, +35528=>22547, +35530=>22548, +35539=>22549, +35540=>22550, +35541=>22551, +35568=>22552, +35583=>22553, +35595=>22554, +35614=>22555, +35632=>22556, +35644=>22557, +35650=>22558, +35656=>22559, +35661=>22560, +35683=>22561, +35705=>22562, +35716=>22563, +35725=>22564, +35727=>22565, +35896=>22566, +35902=>22567, +35921=>22568, +35928=>22569, +35931=>22570, +35933=>22571, +35929=>22572, +35939=>22573, +35940=>22574, +35942=>22575, +35957=>22576, +35958=>22577, +35966=>22578, +35974=>22579, +35975=>22580, +35979=>22581, +35984=>22582, +35996=>22584, +36025=>22585, +36038=>22586, +36043=>22587, +36047=>22588, +36061=>22589, +36072=>22590, +36079=>22591, +36082=>22592, +36095=>22593, +36197=>22594, +36223=>22595, +36226=>22596, +36232=>22597, +36240=>22598, +36254=>22599, +36256=>22600, +36268=>22601, +36277=>22602, +36279=>22603, +36281=>22604, +36283=>22605, +36288=>22606, +36293=>22607, +36295=>22608, +36298=>22609, +36308=>22610, +36325=>22611, +36336=>22612, +36284=>22613, +36356=>22614, +36357=>22615, +36369=>22616, +36403=>22617, +36407=>22618, +36408=>22619, +36430=>22620, +36443=>22621, +36445=>22622, +36446=>22623, +36473=>22624, +36482=>22625, +36483=>22626, +36507=>22627, +36509=>22628, +36514=>22629, +36538=>22630, +36545=>22631, +36547=>22632, +36548=>22633, +36551=>22634, +36572=>22635, +36590=>22636, +36593=>22637, +36599=>22638, +36589=>22639, +36610=>22640, +36623=>22641, +36624=>22642, +36630=>22643, +36640=>22644, +36641=>22645, +36643=>22646, +36648=>22647, +36654=>22648, +36660=>22649, +36663=>22650, +36673=>22651, +36687=>22652, +36690=>22653, +36691=>22654, +36701=>22655, +36702=>22656, +36709=>22657, +36765=>22658, +36792=>22659, +36798=>22660, +36800=>22661, +36811=>22662, +36816=>22663, +36818=>22664, +36835=>22665, +36862=>22666, +36888=>22667, +36904=>22668, +36905=>22669, +36906=>22670, +36915=>22671, +36916=>22672, +36927=>22673, +36962=>22674, +36966=>22675, +36972=>22676, +37006=>22677, +37029=>22678, +37068=>22679, +37077=>22680, +37080=>22681, +37081=>22682, +37093=>22683, +37074=>22684, +37128=>22685, +37133=>22686, +37136=>22687, +37146=>22688, +37152=>22689, +37161=>22690, +37166=>22691, +37174=>22692, +37180=>22693, +37187=>22694, +37199=>22695, +37203=>22696, +37229=>22697, +37243=>22698, +37249=>22699, +37254=>22700, +37267=>22701, +37268=>22702, +37272=>22703, +37281=>22704, +37286=>22705, +37311=>22706, +37331=>22707, +37332=>22708, +37337=>22709, +37353=>22710, +37354=>22711, +37359=>22712, +37369=>22713, +37373=>22714, +37380=>22715, +37381=>22716, +37388=>22717, +37394=>22718, +37395=>22719, +37400=>22720, +37404=>22721, +37405=>22722, +37412=>22723, +37413=>22724, +37414=>22725, +37422=>22726, +37423=>22727, +37424=>22728, +37429=>22729, +37430=>22730, +37438=>22731, +37446=>22732, +37453=>22733, +37464=>22734, +37468=>22735, +37469=>22736, +37481=>22737, +37486=>22738, +37487=>22739, +37488=>22740, +37493=>22741, +37497=>22742, +37499=>22743, +37514=>22744, +37522=>22745, +37536=>22746, +37540=>22747, +37541=>22748, +37544=>22749, +37558=>22750, +37560=>22751, +37562=>22752, +37565=>22753, +37575=>22754, +37581=>22755, +37592=>22756, +37596=>22757, +37597=>22758, +37601=>22759, +37603=>22760, +37608=>22761, +37612=>22762, +37614=>22763, +37616=>22764, +37632=>22765, +37640=>22766, +37660=>22767, +37668=>22768, +37674=>22769, +37684=>22770, +37687=>22771, +37712=>22772, +37717=>22773, +37726=>22774, +37735=>22775, +37737=>22776, +37743=>22777, +37748=>22778, +37750=>22779, +37754=>22780, +37757=>22781, +37760=>22782, +37761=>22783, +37773=>22784, +37778=>22785, +37781=>22786, +37784=>22787, +37798=>22789, +37800=>22790, +37803=>22791, +37812=>22792, +37813=>22793, +37814=>22794, +37828=>22795, +37829=>22796, +37833=>22797, +37835=>22798, +37837=>22799, +37843=>22800, +37849=>22801, +37879=>22802, +37889=>22803, +37896=>22804, +37909=>22805, +37919=>22806, +37935=>22807, +37949=>22808, +37955=>22809, +37977=>22810, +37980=>22811, +37983=>22812, +37985=>22813, +37992=>22814, +37998=>22815, +38020=>22816, +38019=>22817, +38270=>22818, +38276=>22819, +38301=>22820, +38302=>22821, +38330=>22822, +38361=>22823, +38365=>22824, +38367=>22825, +38430=>22826, +38434=>22827, +38437=>22828, +38438=>22829, +38455=>22830, +38457=>22831, +38458=>22832, +38482=>22833, +38486=>22834, +38487=>22835, +38510=>22836, +38524=>22837, +38526=>22838, +38545=>22839, +38559=>22840, +38566=>22841, +38602=>22842, +38623=>22844, +38650=>22845, +38661=>22846, +38682=>22847, +38685=>22848, +38730=>22850, +38744=>22851, +38775=>22852, +38776=>22853, +38779=>22854, +38784=>22855, +38793=>22856, +38807=>22857, +38840=>22858, +38844=>22859, +38847=>22860, +38852=>22861, +38853=>22862, +38855=>22863, +38858=>22864, +38862=>22865, +38864=>22866, +38871=>22867, +38877=>22868, +38884=>22869, +38903=>22870, +38904=>22871, +38906=>22872, +38937=>22873, +38940=>22874, +38944=>22875, +38959=>22876, +38965=>22877, +38980=>22878, +38986=>22879, +38993=>22880, +39018=>22881, +39086=>22882, +39116=>22883, +39142=>22884, +39158=>22885, +39175=>22886, +39199=>22887, +39202=>22888, +39206=>22889, +39211=>22890, +39220=>22891, +39225=>22892, +39239=>22893, +39257=>22894, +39259=>22895, +39323=>22896, +39325=>22897, +39327=>22898, +39344=>22899, +39346=>22900, +39349=>22901, +39379=>22902, +39386=>22903, +39388=>22904, +39399=>22905, +39402=>22906, +39403=>22907, +39404=>22908, +39412=>22909, +39413=>22910, +39421=>22911, +39422=>22912, +39428=>22913, +39435=>22914, +39454=>22915, +39458=>22916, +39475=>22917, +39477=>22918, +39495=>22919, +39499=>22921, +39508=>22922, +39517=>22923, +39594=>22924, +39596=>22925, +39598=>22926, +39602=>22927, +39604=>22928, +39611=>22929, +39615=>22930, +39624=>22931, +39639=>22932, +39643=>22933, +39652=>22934, +39655=>22935, +39660=>22936, +39666=>22937, +39667=>22938, +39669=>22939, +39674=>22940, +39677=>22941, +39679=>22942, +39680=>22943, +39684=>22944, +39685=>22945, +39707=>22946, +39718=>22947, +39735=>22949, +39737=>22950, +39738=>22951, +39756=>22952, +39766=>22953, +39767=>22954, +39771=>22955, +39777=>22956, +39786=>22957, +39789=>22958, +39790=>22959, +39800=>22960, +39807=>22961, +39813=>22962, +39815=>22963, +39817=>22964, +39819=>22965, +39821=>22966, +39828=>22967, +39834=>22968, +39849=>22969, +39863=>22970, +39868=>22971, +39888=>22972, +39929=>22973, +39951=>22974, +39953=>22975, +39966=>22976, +39974=>22977, +39976=>22978, +39997=>22979, +40003=>22980, +40014=>22981, +40030=>22982, +40059=>22983, +40183=>22984, +40185=>22985, +40220=>22986, +40239=>22987, +40243=>22988, +40244=>22989, +40250=>22990, +40252=>22991, +40261=>22992, +40275=>22993, +40276=>22994, +40293=>22995, +40323=>22996, +40326=>22997, +40334=>22998, +40338=>22999, +40339=>23000, +40341=>23001, +40343=>23002, +40344=>23003, +40362=>23004, +40366=>23005, +40394=>23007, +40404=>23008, +40405=>23009, +40414=>23010, +40430=>23011, +40432=>23012, +40446=>23013, +40462=>23014, +40464=>23015, +40465=>23016, +40466=>23017, +40470=>23018, +40583=>23019, +40590=>23020, +40591=>23021, +40598=>23022, +40600=>23023, +40622=>23024, +40627=>23025, +40646=>23026, +40648=>23027, +40651=>23028, +40661=>23029, +40684=>23030, +40685=>23031, +40689=>23032, +40693=>23033, +40696=>23034, +40721=>23035, +40726=>23036, +40730=>23037, +40735=>23038, +40753=>23039, +40754=>23040, +40764=>23041, +40767=>23042, +40771=>23043, +40772=>23044, +40775=>23045, +40790=>23046, +40798=>23047, +40814=>23048, +40819=>23049, +40826=>23050, +40829=>23051, +40847=>23052, +40849=>23053, +40850=>23054, +40854=>23055, +40865=>23056, +40867=>23057, +); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/uni2cid_ak12.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/uni2cid_ak12.php new file mode 100755 index 00000000..6a840066 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/uni2cid_ak12.php @@ -0,0 +1,17530 @@ +1, +33=>2, +34=>3, +35=>4, +36=>5, +37=>6, +38=>7, +39=>8, +40=>9, +41=>10, +42=>11, +43=>12, +44=>13, +45=>14, +46=>15, +47=>16, +48=>17, +49=>18, +50=>19, +51=>20, +52=>21, +53=>22, +54=>23, +55=>24, +56=>25, +57=>26, +58=>27, +59=>28, +60=>29, +61=>30, +62=>31, +63=>32, +64=>33, +65=>34, +66=>35, +67=>36, +68=>37, +69=>38, +70=>39, +71=>40, +72=>41, +73=>42, +74=>43, +75=>44, +76=>45, +77=>46, +78=>47, +79=>48, +80=>49, +81=>50, +82=>51, +83=>52, +84=>53, +85=>54, +86=>55, +87=>56, +88=>57, +89=>58, +90=>59, +91=>60, +92=>61, +93=>62, +94=>63, +95=>64, +96=>65, +97=>66, +98=>67, +99=>68, +100=>69, +101=>70, +102=>71, +103=>72, +104=>73, +105=>74, +106=>75, +107=>76, +108=>77, +109=>78, +110=>79, +111=>80, +112=>81, +113=>82, +114=>83, +115=>84, +116=>85, +117=>86, +118=>87, +119=>88, +120=>89, +121=>90, +122=>91, +123=>92, +124=>93, +125=>94, +126=>95, +8361=>96, +8208=>97, +169=>98, +12644=>101, +12288=>101, +12289=>102, +12290=>103, +183=>104, +12539=>104, +8229=>105, +8943=>106, +8230=>106, +168=>107, +12291=>108, +8211=>109, +8212=>110, +8214=>111, +65340=>112, +65374=>113, +8216=>114, +8217=>115, +8220=>116, +8221=>117, +12308=>118, +12309=>119, +12296=>120, +12297=>121, +12298=>122, +12299=>123, +12300=>124, +12301=>125, +12302=>126, +12303=>127, +12304=>128, +12305=>129, +177=>130, +215=>131, +247=>132, +8800=>133, +8804=>134, +8805=>135, +8734=>136, +8756=>137, +176=>138, +8242=>139, +8243=>140, +8451=>141, +8491=>142, +65504=>143, +65505=>144, +65509=>145, +9794=>146, +9792=>147, +8736=>148, +8869=>149, +8978=>150, +8706=>151, +8711=>152, +8801=>153, +8786=>154, +167=>155, +8251=>156, +9734=>157, +9733=>158, +9675=>159, +9679=>160, +9678=>161, +9671=>162, +9670=>163, +9633=>164, +9632=>165, +9651=>166, +9650=>167, +9661=>168, +9660=>169, +8594=>170, +8592=>171, +8593=>172, +8595=>173, +8596=>174, +12307=>175, +171=>176, +187=>177, +8730=>178, +8765=>179, +8733=>180, +8757=>181, +8747=>182, +8748=>183, +8712=>184, +8715=>185, +8838=>186, +8839=>187, +8834=>188, +8835=>189, +8746=>190, +8745=>191, +8743=>192, +8744=>193, +65506=>194, +8658=>195, +8660=>196, +8704=>197, +8707=>198, +180=>199, +732=>200, +711=>201, +728=>202, +733=>203, +730=>204, +729=>205, +184=>206, +731=>207, +161=>208, +191=>209, +8758=>210, +8750=>211, +8721=>212, +8719=>213, +164=>214, +8457=>215, +8240=>216, +9665=>217, +9664=>218, +9655=>219, +9654=>220, +9828=>221, +9824=>222, +9825=>223, +9829=>224, +9831=>225, +9827=>226, +9673=>227, +9672=>228, +9635=>229, +9680=>230, +9681=>231, +9618=>232, +9636=>233, +9637=>234, +9640=>235, +9639=>236, +9638=>237, +9641=>238, +9832=>239, +9743=>240, +9742=>241, +9756=>242, +9758=>243, +182=>244, +8224=>245, +8225=>246, +8597=>247, +8599=>248, +8601=>249, +8598=>250, +8600=>251, +9837=>252, +9833=>253, +9834=>254, +9836=>255, +12927=>256, +12828=>257, +8470=>258, +13255=>259, +8482=>260, +13250=>261, +13272=>262, +8481=>263, +65281=>264, +65282=>265, +65283=>266, +65284=>267, +65285=>268, +65286=>269, +65287=>270, +65288=>271, +65289=>272, +65290=>273, +65291=>274, +65292=>275, +65293=>276, +65294=>277, +65295=>278, +65296=>279, +65297=>280, +65298=>281, +65299=>282, +65300=>283, +65301=>284, +65302=>285, +65303=>286, +65304=>287, +65305=>288, +65306=>289, +65307=>290, +65308=>291, +65309=>292, +65310=>293, +65311=>294, +65312=>295, +65313=>296, +65314=>297, +65315=>298, +65316=>299, +65317=>300, +65318=>301, +65319=>302, +65320=>303, +65321=>304, +65322=>305, +65323=>306, +65324=>307, +65325=>308, +65326=>309, +65327=>310, +65328=>311, +65329=>312, +65330=>313, +65331=>314, +65332=>315, +65333=>316, +65334=>317, +65335=>318, +65336=>319, +65337=>320, +65338=>321, +65339=>322, +65510=>323, +65341=>324, +65342=>325, +65343=>326, +65344=>327, +65345=>328, +65346=>329, +65347=>330, +65348=>331, +65349=>332, +65350=>333, +65351=>334, +65352=>335, +65353=>336, +65354=>337, +65355=>338, +65356=>339, +65357=>340, +65358=>341, +65359=>342, +65360=>343, +65361=>344, +65362=>345, +65363=>346, +65364=>347, +65365=>348, +65366=>349, +65367=>350, +65368=>351, +65369=>352, +65370=>353, +65371=>354, +65372=>355, +65373=>356, +65507=>357, +12593=>358, +12594=>359, +12595=>360, +12596=>361, +12597=>362, +12598=>363, +12599=>364, +12600=>365, +12601=>366, +12602=>367, +12603=>368, +12604=>369, +12605=>370, +12606=>371, +12607=>372, +12608=>373, +12609=>374, +12610=>375, +12611=>376, +12612=>377, +12613=>378, +12614=>379, +12615=>380, +12616=>381, +12617=>382, +12618=>383, +12619=>384, +12620=>385, +12621=>386, +12622=>387, +12623=>388, +12624=>389, +12625=>390, +12626=>391, +12627=>392, +12628=>393, +12629=>394, +12630=>395, +12631=>396, +12632=>397, +12633=>398, +12634=>399, +12635=>400, +12636=>401, +12637=>402, +12638=>403, +12639=>404, +12640=>405, +12641=>406, +12642=>407, +12643=>408, +12645=>409, +12646=>410, +12647=>411, +12648=>412, +12649=>413, +12650=>414, +12651=>415, +12652=>416, +12653=>417, +12654=>418, +12655=>419, +12656=>420, +12657=>421, +12658=>422, +12659=>423, +12660=>424, +12661=>425, +12662=>426, +12663=>427, +12664=>428, +12665=>429, +12666=>430, +12667=>431, +12668=>432, +12669=>433, +12670=>434, +12671=>435, +12672=>436, +12673=>437, +12674=>438, +12675=>439, +12676=>440, +12677=>441, +12678=>442, +12679=>443, +12680=>444, +12681=>445, +12682=>446, +12683=>447, +12684=>448, +12685=>449, +12686=>450, +8560=>451, +8561=>452, +8562=>453, +8563=>454, +8564=>455, +8565=>456, +8566=>457, +8567=>458, +8568=>459, +8569=>460, +8544=>461, +8545=>462, +8546=>463, +8547=>464, +8548=>465, +8549=>466, +8550=>467, +8551=>468, +8552=>469, +8553=>470, +913=>471, +914=>472, +915=>473, +916=>474, +917=>475, +918=>476, +919=>477, +920=>478, +921=>479, +922=>480, +923=>481, +924=>482, +925=>483, +926=>484, +927=>485, +928=>486, +929=>487, +931=>488, +932=>489, +933=>490, +934=>491, +935=>492, +936=>493, +937=>494, +945=>495, +946=>496, +947=>497, +948=>498, +949=>499, +950=>500, +951=>501, +952=>502, +953=>503, +954=>504, +955=>505, +956=>506, +957=>507, +958=>508, +959=>509, +960=>510, +961=>511, +963=>512, +964=>513, +965=>514, +966=>515, +967=>516, +968=>517, +969=>518, +9472=>519, +9474=>520, +9484=>521, +9488=>522, +9496=>523, +9492=>524, +9500=>525, +9516=>526, +9508=>527, +9524=>528, +9532=>529, +9473=>530, +9475=>531, +9487=>532, +9491=>533, +9499=>534, +9495=>535, +9507=>536, +9523=>537, +9515=>538, +9531=>539, +9547=>540, +9504=>541, +9519=>542, +9512=>543, +9527=>544, +9535=>545, +9501=>546, +9520=>547, +9509=>548, +9528=>549, +9538=>550, +9490=>551, +9489=>552, +9498=>553, +9497=>554, +9494=>555, +9493=>556, +9486=>557, +9485=>558, +9502=>559, +9503=>560, +9505=>561, +9506=>562, +9510=>563, +9511=>564, +9513=>565, +9514=>566, +9517=>567, +9518=>568, +9521=>569, +9522=>570, +9525=>571, +9526=>572, +9529=>573, +9530=>574, +9533=>575, +9534=>576, +9536=>577, +9537=>578, +9539=>579, +9540=>580, +9541=>581, +9542=>582, +9543=>583, +9544=>584, +9545=>585, +9546=>586, +13205=>587, +13206=>588, +13207=>589, +8467=>590, +13208=>591, +13252=>592, +13219=>593, +13220=>594, +13221=>595, +13222=>596, +13209=>597, +13210=>598, +13211=>599, +13212=>600, +13213=>601, +13214=>602, +13215=>603, +13216=>604, +13217=>605, +13218=>606, +13258=>607, +13197=>608, +13198=>609, +13199=>610, +13263=>611, +13192=>612, +13193=>613, +13256=>614, +13223=>615, +13224=>616, +13232=>617, +13233=>618, +13234=>619, +13235=>620, +13236=>621, +13237=>622, +13238=>623, +13239=>624, +13240=>625, +13241=>626, +13184=>627, +13185=>628, +13186=>629, +13187=>630, +13188=>631, +13242=>632, +13243=>633, +13244=>634, +13245=>635, +13246=>636, +13247=>637, +13200=>638, +13201=>639, +13202=>640, +13203=>641, +13204=>642, +8486=>643, +13248=>644, +13249=>645, +13194=>646, +13195=>647, +13196=>648, +13270=>649, +13253=>650, +13229=>651, +13230=>652, +13231=>653, +13275=>654, +13225=>655, +13226=>656, +13227=>657, +13228=>658, +13277=>659, +13264=>660, +13267=>661, +13251=>662, +13257=>663, +13276=>664, +13254=>665, +198=>666, +208=>667, +170=>668, +294=>669, +306=>670, +319=>671, +321=>672, +216=>673, +338=>674, +186=>675, +222=>676, +358=>677, +330=>678, +12896=>679, +12897=>680, +12898=>681, +12899=>682, +12900=>683, +12901=>684, +12902=>685, +12903=>686, +12904=>687, +12905=>688, +12906=>689, +12907=>690, +12908=>691, +12909=>692, +12910=>693, +12911=>694, +12912=>695, +12913=>696, +12914=>697, +12915=>698, +12916=>699, +12917=>700, +12918=>701, +12919=>702, +12920=>703, +12921=>704, +12922=>705, +12923=>706, +9424=>707, +9425=>708, +9426=>709, +9427=>710, +9428=>711, +9429=>712, +9430=>713, +9431=>714, +9432=>715, +9433=>716, +9434=>717, +9435=>718, +9436=>719, +9437=>720, +9438=>721, +9439=>722, +9440=>723, +9441=>724, +9442=>725, +9443=>726, +9444=>727, +9445=>728, +9446=>729, +9447=>730, +9448=>731, +9449=>732, +9312=>733, +9313=>734, +9314=>735, +9315=>736, +9316=>737, +9317=>738, +9318=>739, +9319=>740, +9320=>741, +9321=>742, +9322=>743, +9323=>744, +9324=>745, +9325=>746, +9326=>747, +189=>748, +8531=>749, +8532=>750, +188=>751, +190=>752, +8539=>753, +8540=>754, +8541=>755, +8542=>756, +230=>757, +273=>758, +240=>759, +295=>760, +305=>761, +307=>762, +312=>763, +320=>764, +322=>765, +248=>766, +339=>767, +223=>768, +254=>769, +359=>770, +331=>771, +329=>772, +12800=>773, +12801=>774, +12802=>775, +12803=>776, +12804=>777, +12805=>778, +12806=>779, +12807=>780, +12808=>781, +12809=>782, +12810=>783, +12811=>784, +12812=>785, +12813=>786, +12814=>787, +12815=>788, +12816=>789, +12817=>790, +12818=>791, +12819=>792, +12820=>793, +12821=>794, +12822=>795, +12823=>796, +12824=>797, +12825=>798, +12826=>799, +12827=>800, +9372=>801, +9373=>802, +9374=>803, +9375=>804, +9376=>805, +9377=>806, +9378=>807, +9379=>808, +9380=>809, +9381=>810, +9382=>811, +9383=>812, +9384=>813, +9385=>814, +9386=>815, +9387=>816, +9388=>817, +9389=>818, +9390=>819, +9391=>820, +9392=>821, +9393=>822, +9394=>823, +9395=>824, +9396=>825, +9397=>826, +9332=>827, +9333=>828, +9334=>829, +9335=>830, +9336=>831, +9337=>832, +9338=>833, +9339=>834, +9340=>835, +9341=>836, +9342=>837, +9343=>838, +9344=>839, +9345=>840, +9346=>841, +185=>842, +178=>843, +179=>844, +8308=>845, +8319=>846, +8321=>847, +8322=>848, +8323=>849, +8324=>850, +12353=>851, +12354=>852, +12355=>853, +12356=>854, +12357=>855, +12358=>856, +12359=>857, +12360=>858, +12361=>859, +12362=>860, +12363=>861, +12364=>862, +12365=>863, +12366=>864, +12367=>865, +12368=>866, +12369=>867, +12370=>868, +12371=>869, +12372=>870, +12373=>871, +12374=>872, +12375=>873, +12376=>874, +12377=>875, +12378=>876, +12379=>877, +12380=>878, +12381=>879, +12382=>880, +12383=>881, +12384=>882, +12385=>883, +12386=>884, +12387=>885, +12388=>886, +12389=>887, +12390=>888, +12391=>889, +12392=>890, +12393=>891, +12394=>892, +12395=>893, +12396=>894, +12397=>895, +12398=>896, +12399=>897, +12400=>898, +12401=>899, +12402=>900, +12403=>901, +12404=>902, +12405=>903, +12406=>904, +12407=>905, +12408=>906, +12409=>907, +12410=>908, +12411=>909, +12412=>910, +12413=>911, +12414=>912, +12415=>913, +12416=>914, +12417=>915, +12418=>916, +12419=>917, +12420=>918, +12421=>919, +12422=>920, +12423=>921, +12424=>922, +12425=>923, +12426=>924, +12427=>925, +12428=>926, +12429=>927, +12430=>928, +12431=>929, +12432=>930, +12433=>931, +12434=>932, +12435=>933, +12449=>934, +12450=>935, +12451=>936, +12452=>937, +12453=>938, +12454=>939, +12455=>940, +12456=>941, +12457=>942, +12458=>943, +12459=>944, +12460=>945, +12461=>946, +12462=>947, +12463=>948, +12464=>949, +12465=>950, +12466=>951, +12467=>952, +12468=>953, +12469=>954, +12470=>955, +12471=>956, +12472=>957, +12473=>958, +12474=>959, +12475=>960, +12476=>961, +12477=>962, +12478=>963, +12479=>964, +12480=>965, +12481=>966, +12482=>967, +12483=>968, +12484=>969, +12485=>970, +12486=>971, +12487=>972, +12488=>973, +12489=>974, +12490=>975, +12491=>976, +12492=>977, +12493=>978, +12494=>979, +12495=>980, +12496=>981, +12497=>982, +12498=>983, +12499=>984, +12500=>985, +12501=>986, +12502=>987, +12503=>988, +12504=>989, +12505=>990, +12506=>991, +12507=>992, +12508=>993, +12509=>994, +12510=>995, +12511=>996, +12512=>997, +12513=>998, +12514=>999, +12515=>1000, +12516=>1001, +12517=>1002, +12518=>1003, +12519=>1004, +12520=>1005, +12521=>1006, +12522=>1007, +12523=>1008, +12524=>1009, +12525=>1010, +12526=>1011, +12527=>1012, +12528=>1013, +12529=>1014, +12530=>1015, +12531=>1016, +12532=>1017, +12533=>1018, +12534=>1019, +1040=>1020, +1041=>1021, +1042=>1022, +1043=>1023, +1044=>1024, +1045=>1025, +1025=>1026, +1046=>1027, +1047=>1028, +1048=>1029, +1049=>1030, +1050=>1031, +1051=>1032, +1052=>1033, +1053=>1034, +1054=>1035, +1055=>1036, +1056=>1037, +1057=>1038, +1058=>1039, +1059=>1040, +1060=>1041, +1061=>1042, +1062=>1043, +1063=>1044, +1064=>1045, +1065=>1046, +1066=>1047, +1067=>1048, +1068=>1049, +1069=>1050, +1070=>1051, +1071=>1052, +1072=>1053, +1073=>1054, +1074=>1055, +1075=>1056, +1076=>1057, +1077=>1058, +1105=>1059, +1078=>1060, +1079=>1061, +1080=>1062, +1081=>1063, +1082=>1064, +1083=>1065, +1084=>1066, +1085=>1067, +1086=>1068, +1087=>1069, +1088=>1070, +1089=>1071, +1090=>1072, +1091=>1073, +1092=>1074, +1093=>1075, +1094=>1076, +1095=>1077, +1096=>1078, +1097=>1079, +1098=>1080, +1099=>1081, +1100=>1082, +1101=>1083, +1102=>1084, +1103=>1085, +44032=>1086, +44033=>1087, +44036=>1088, +44039=>1089, +44040=>1090, +44041=>1091, +44042=>1092, +44048=>1093, +44049=>1094, +44050=>1095, +44051=>1096, +44052=>1097, +44053=>1098, +44054=>1099, +44055=>1100, +44057=>1101, +44058=>1102, +44059=>1103, +44060=>1104, +44061=>1105, +44064=>1106, +44068=>1107, +44076=>1108, +44077=>1109, +44079=>1110, +44080=>1111, +44081=>1112, +44088=>1113, +44089=>1114, +44092=>1115, +44096=>1116, +44107=>1117, +44109=>1118, +44116=>1119, +44120=>1120, +44124=>1121, +44144=>1122, +44145=>1123, +44148=>1124, +44151=>1125, +44152=>1126, +44154=>1127, +44160=>1128, +44161=>1129, +44163=>1130, +44164=>1131, +44165=>1132, +44166=>1133, +44169=>1134, +44170=>1135, +44171=>1136, +44172=>1137, +44176=>1138, +44180=>1139, +44188=>1140, +44189=>1141, +44191=>1142, +44192=>1143, +44193=>1144, +44200=>1145, +44201=>1146, +44202=>1147, +44204=>1148, +44207=>1149, +44208=>1150, +44216=>1151, +44217=>1152, +44219=>1153, +44220=>1154, +44221=>1155, +44225=>1156, +44228=>1157, +44232=>1158, +44236=>1159, +44245=>1160, +44247=>1161, +44256=>1162, +44257=>1163, +44260=>1164, +44263=>1165, +44264=>1166, +44266=>1167, +44268=>1168, +44271=>1169, +44272=>1170, +44273=>1171, +44275=>1172, +44277=>1173, +44278=>1174, +44284=>1175, +44285=>1176, +44288=>1177, +44292=>1178, +44294=>1179, +44300=>1180, +44301=>1181, +44303=>1182, +44305=>1183, +44312=>1184, +44316=>1185, +44320=>1186, +44329=>1187, +44332=>1188, +44333=>1189, +44340=>1190, +44341=>1191, +44344=>1192, +44348=>1193, +44356=>1194, +44357=>1195, +44359=>1196, +44361=>1197, +44368=>1198, +44372=>1199, +44376=>1200, +44385=>1201, +44387=>1202, +44396=>1203, +44397=>1204, +44400=>1205, +44403=>1206, +44404=>1207, +44405=>1208, +44406=>1209, +44411=>1210, +44412=>1211, +44413=>1212, +44415=>1213, +44417=>1214, +44418=>1215, +44424=>1216, +44425=>1217, +44428=>1218, +44432=>1219, +44444=>1220, +44445=>1221, +44452=>1222, +44471=>1223, +44480=>1224, +44481=>1225, +44484=>1226, +44488=>1227, +44496=>1228, +44497=>1229, +44499=>1230, +44508=>1231, +44512=>1232, +44516=>1233, +44536=>1234, +44537=>1235, +44540=>1236, +44543=>1237, +44544=>1238, +44545=>1239, +44552=>1240, +44553=>1241, +44555=>1242, +44557=>1243, +44564=>1244, +44592=>1245, +44593=>1246, +44596=>1247, +44599=>1248, +44600=>1249, +44602=>1250, +44608=>1251, +44609=>1252, +44611=>1253, +44613=>1254, +44614=>1255, +44618=>1256, +44620=>1257, +44621=>1258, +44622=>1259, +44624=>1260, +44628=>1261, +44630=>1262, +44636=>1263, +44637=>1264, +44639=>1265, +44640=>1266, +44641=>1267, +44645=>1268, +44648=>1269, +44649=>1270, +44652=>1271, +44656=>1272, +44664=>1273, +44665=>1274, +44667=>1275, +44668=>1276, +44669=>1277, +44676=>1278, +44677=>1279, +44684=>1280, +44732=>1281, +44733=>1282, +44734=>1283, +44736=>1284, +44740=>1285, +44748=>1286, +44749=>1287, +44751=>1288, +44752=>1289, +44753=>1290, +44760=>1291, +44761=>1292, +44764=>1293, +44776=>1294, +44779=>1295, +44781=>1296, +44788=>1297, +44792=>1298, +44796=>1299, +44807=>1300, +44808=>1301, +44813=>1302, +44816=>1303, +44844=>1304, +44845=>1305, +44848=>1306, +44850=>1307, +44852=>1308, +44860=>1309, +44861=>1310, +44863=>1311, +44865=>1312, +44866=>1313, +44867=>1314, +44872=>1315, +44873=>1316, +44880=>1317, +44892=>1318, +44893=>1319, +44900=>1320, +44901=>1321, +44921=>1322, +44928=>1323, +44932=>1324, +44936=>1325, +44944=>1326, +44945=>1327, +44949=>1328, +44956=>1329, +44984=>1330, +44985=>1331, +44988=>1332, +44992=>1333, +44999=>1334, +45000=>1335, +45001=>1336, +45003=>1337, +45005=>1338, +45006=>1339, +45012=>1340, +45020=>1341, +45032=>1342, +45033=>1343, +45040=>1344, +45041=>1345, +45044=>1346, +45048=>1347, +45056=>1348, +45057=>1349, +45060=>1350, +45068=>1351, +45072=>1352, +45076=>1353, +45084=>1354, +45085=>1355, +45096=>1356, +45124=>1357, +45125=>1358, +45128=>1359, +45130=>1360, +45132=>1361, +45134=>1362, +45139=>1363, +45140=>1364, +45141=>1365, +45143=>1366, +45145=>1367, +45149=>1368, +45180=>1369, +45181=>1370, +45184=>1371, +45188=>1372, +45196=>1373, +45197=>1374, +45199=>1375, +45201=>1376, +45208=>1377, +45209=>1378, +45210=>1379, +45212=>1380, +45215=>1381, +45216=>1382, +45217=>1383, +45218=>1384, +45224=>1385, +45225=>1386, +45227=>1387, +45228=>1388, +45229=>1389, +45230=>1390, +45231=>1391, +45233=>1392, +45235=>1393, +45236=>1394, +45237=>1395, +45240=>1396, +45244=>1397, +45252=>1398, +45253=>1399, +45255=>1400, +45256=>1401, +45257=>1402, +45264=>1403, +45265=>1404, +45268=>1405, +45272=>1406, +45280=>1407, +45285=>1408, +45320=>1409, +45321=>1410, +45323=>1411, +45324=>1412, +45328=>1413, +45330=>1414, +45331=>1415, +45336=>1416, +45337=>1417, +45339=>1418, +45340=>1419, +45341=>1420, +45347=>1421, +45348=>1422, +45349=>1423, +45352=>1424, +45356=>1425, +45364=>1426, +45365=>1427, +45367=>1428, +45368=>1429, +45369=>1430, +45376=>1431, +45377=>1432, +45380=>1433, +45384=>1434, +45392=>1435, +45393=>1436, +45396=>1437, +45397=>1438, +45400=>1439, +45404=>1440, +45408=>1441, +45432=>1442, +45433=>1443, +45436=>1444, +45440=>1445, +45442=>1446, +45448=>1447, +45449=>1448, +45451=>1449, +45453=>1450, +45458=>1451, +45459=>1452, +45460=>1453, +45464=>1454, +45468=>1455, +45480=>1456, +45516=>1457, +45520=>1458, +45524=>1459, +45532=>1460, +45533=>1461, +45535=>1462, +45544=>1463, +45545=>1464, +45548=>1465, +45552=>1466, +45561=>1467, +45563=>1468, +45565=>1469, +45572=>1470, +45573=>1471, +45576=>1472, +45579=>1473, +45580=>1474, +45588=>1475, +45589=>1476, +45591=>1477, +45593=>1478, +45600=>1479, +45620=>1480, +45628=>1481, +45656=>1482, +45660=>1483, +45664=>1484, +45672=>1485, +45673=>1486, +45684=>1487, +45685=>1488, +45692=>1489, +45700=>1490, +45701=>1491, +45705=>1492, +45712=>1493, +45713=>1494, +45716=>1495, +45720=>1496, +45721=>1497, +45722=>1498, +45728=>1499, +45729=>1500, +45731=>1501, +45733=>1502, +45734=>1503, +45738=>1504, +45740=>1505, +45744=>1506, +45748=>1507, +45768=>1508, +45769=>1509, +45772=>1510, +45776=>1511, +45778=>1512, +45784=>1513, +45785=>1514, +45787=>1515, +45789=>1516, +45794=>1517, +45796=>1518, +45797=>1519, +45798=>1520, +45800=>1521, +45803=>1522, +45804=>1523, +45805=>1524, +45806=>1525, +45807=>1526, +45811=>1527, +45812=>1528, +45813=>1529, +45815=>1530, +45816=>1531, +45817=>1532, +45818=>1533, +45819=>1534, +45823=>1535, +45824=>1536, +45825=>1537, +45828=>1538, +45832=>1539, +45840=>1540, +45841=>1541, +45843=>1542, +45844=>1543, +45845=>1544, +45852=>1545, +45908=>1546, +45909=>1547, +45910=>1548, +45912=>1549, +45915=>1550, +45916=>1551, +45918=>1552, +45919=>1553, +45924=>1554, +45925=>1555, +45927=>1556, +45929=>1557, +45931=>1558, +45934=>1559, +45936=>1560, +45937=>1561, +45940=>1562, +45944=>1563, +45952=>1564, +45953=>1565, +45955=>1566, +45956=>1567, +45957=>1568, +45964=>1569, +45968=>1570, +45972=>1571, +45984=>1572, +45985=>1573, +45992=>1574, +45996=>1575, +46020=>1576, +46021=>1577, +46024=>1578, +46027=>1579, +46028=>1580, +46030=>1581, +46032=>1582, +46036=>1583, +46037=>1584, +46039=>1585, +46041=>1586, +46043=>1587, +46045=>1588, +46048=>1589, +46052=>1590, +46056=>1591, +46076=>1592, +46096=>1593, +46104=>1594, +46108=>1595, +46112=>1596, +46120=>1597, +46121=>1598, +46123=>1599, +46132=>1600, +46160=>1601, +46161=>1602, +46164=>1603, +46168=>1604, +46176=>1605, +46177=>1606, +46179=>1607, +46181=>1608, +46188=>1609, +46208=>1610, +46216=>1611, +46237=>1612, +46244=>1613, +46248=>1614, +46252=>1615, +46261=>1616, +46263=>1617, +46265=>1618, +46272=>1619, +46276=>1620, +46280=>1621, +46288=>1622, +46293=>1623, +46300=>1624, +46301=>1625, +46304=>1626, +46307=>1627, +46308=>1628, +46310=>1629, +46316=>1630, +46317=>1631, +46319=>1632, +46321=>1633, +46328=>1634, +46356=>1635, +46357=>1636, +46360=>1637, +46363=>1638, +46364=>1639, +46372=>1640, +46373=>1641, +46375=>1642, +46376=>1643, +46377=>1644, +46378=>1645, +46384=>1646, +46385=>1647, +46388=>1648, +46392=>1649, +46400=>1650, +46401=>1651, +46403=>1652, +46404=>1653, +46405=>1654, +46411=>1655, +46412=>1656, +46413=>1657, +46416=>1658, +46420=>1659, +46428=>1660, +46429=>1661, +46431=>1662, +46432=>1663, +46433=>1664, +46496=>1665, +46497=>1666, +46500=>1667, +46504=>1668, +46506=>1669, +46507=>1670, +46512=>1671, +46513=>1672, +46515=>1673, +46516=>1674, +46517=>1675, +46523=>1676, +46524=>1677, +46525=>1678, +46528=>1679, +46532=>1680, +46540=>1681, +46541=>1682, +46543=>1683, +46544=>1684, +46545=>1685, +46552=>1686, +46572=>1687, +46608=>1688, +46609=>1689, +46612=>1690, +46616=>1691, +46629=>1692, +46636=>1693, +46644=>1694, +46664=>1695, +46692=>1696, +46696=>1697, +46748=>1698, +46749=>1699, +46752=>1700, +46756=>1701, +46763=>1702, +46764=>1703, +46769=>1704, +46804=>1705, +46832=>1706, +46836=>1707, +46840=>1708, +46848=>1709, +46849=>1710, +46853=>1711, +46888=>1712, +46889=>1713, +46892=>1714, +46895=>1715, +46896=>1716, +46904=>1717, +46905=>1718, +46907=>1719, +46916=>1720, +46920=>1721, +46924=>1722, +46932=>1723, +46933=>1724, +46944=>1725, +46948=>1726, +46952=>1727, +46960=>1728, +46961=>1729, +46963=>1730, +46965=>1731, +46972=>1732, +46973=>1733, +46976=>1734, +46980=>1735, +46988=>1736, +46989=>1737, +46991=>1738, +46992=>1739, +46993=>1740, +46994=>1741, +46998=>1742, +46999=>1743, +47000=>1744, +47001=>1745, +47004=>1746, +47008=>1747, +47016=>1748, +47017=>1749, +47019=>1750, +47020=>1751, +47021=>1752, +47028=>1753, +47029=>1754, +47032=>1755, +47047=>1756, +47049=>1757, +47084=>1758, +47085=>1759, +47088=>1760, +47092=>1761, +47100=>1762, +47101=>1763, +47103=>1764, +47104=>1765, +47105=>1766, +47111=>1767, +47112=>1768, +47113=>1769, +47116=>1770, +47120=>1771, +47128=>1772, +47129=>1773, +47131=>1774, +47133=>1775, +47140=>1776, +47141=>1777, +47144=>1778, +47148=>1779, +47156=>1780, +47157=>1781, +47159=>1782, +47160=>1783, +47161=>1784, +47168=>1785, +47172=>1786, +47185=>1787, +47187=>1788, +47196=>1789, +47197=>1790, +47200=>1791, +47204=>1792, +47212=>1793, +47213=>1794, +47215=>1795, +47217=>1796, +47224=>1797, +47228=>1798, +47245=>1799, +47272=>1800, +47280=>1801, +47284=>1802, +47288=>1803, +47296=>1804, +47297=>1805, +47299=>1806, +47301=>1807, +47308=>1808, +47312=>1809, +47316=>1810, +47325=>1811, +47327=>1812, +47329=>1813, +47336=>1814, +47337=>1815, +47340=>1816, +47344=>1817, +47352=>1818, +47353=>1819, +47355=>1820, +47357=>1821, +47364=>1822, +47384=>1823, +47392=>1824, +47420=>1825, +47421=>1826, +47424=>1827, +47428=>1828, +47436=>1829, +47439=>1830, +47441=>1831, +47448=>1832, +47449=>1833, +47452=>1834, +47456=>1835, +47464=>1836, +47465=>1837, +47467=>1838, +47469=>1839, +47476=>1840, +47477=>1841, +47480=>1842, +47484=>1843, +47492=>1844, +47493=>1845, +47495=>1846, +47497=>1847, +47498=>1848, +47501=>1849, +47502=>1850, +47532=>1851, +47533=>1852, +47536=>1853, +47540=>1854, +47548=>1855, +47549=>1856, +47551=>1857, +47553=>1858, +47560=>1859, +47561=>1860, +47564=>1861, +47566=>1862, +47567=>1863, +47568=>1864, +47569=>1865, +47570=>1866, +47576=>1867, +47577=>1868, +47579=>1869, +47581=>1870, +47582=>1871, +47585=>1872, +47587=>1873, +47588=>1874, +47589=>1875, +47592=>1876, +47596=>1877, +47604=>1878, +47605=>1879, +47607=>1880, +47608=>1881, +47609=>1882, +47610=>1883, +47616=>1884, +47617=>1885, +47624=>1886, +47637=>1887, +47672=>1888, +47673=>1889, +47676=>1890, +47680=>1891, +47682=>1892, +47688=>1893, +47689=>1894, +47691=>1895, +47693=>1896, +47694=>1897, +47699=>1898, +47700=>1899, +47701=>1900, +47704=>1901, +47708=>1902, +47716=>1903, +47717=>1904, +47719=>1905, +47720=>1906, +47721=>1907, +47728=>1908, +47729=>1909, +47732=>1910, +47736=>1911, +47747=>1912, +47748=>1913, +47749=>1914, +47751=>1915, +47756=>1916, +47784=>1917, +47785=>1918, +47787=>1919, +47788=>1920, +47792=>1921, +47794=>1922, +47800=>1923, +47801=>1924, +47803=>1925, +47805=>1926, +47812=>1927, +47816=>1928, +47832=>1929, +47833=>1930, +47868=>1931, +47872=>1932, +47876=>1933, +47885=>1934, +47887=>1935, +47889=>1936, +47896=>1937, +47900=>1938, +47904=>1939, +47913=>1940, +47915=>1941, +47924=>1942, +47925=>1943, +47926=>1944, +47928=>1945, +47931=>1946, +47932=>1947, +47933=>1948, +47934=>1949, +47940=>1950, +47941=>1951, +47943=>1952, +47945=>1953, +47949=>1954, +47951=>1955, +47952=>1956, +47956=>1957, +47960=>1958, +47969=>1959, +47971=>1960, +47980=>1961, +48008=>1962, +48012=>1963, +48016=>1964, +48036=>1965, +48040=>1966, +48044=>1967, +48052=>1968, +48055=>1969, +48064=>1970, +48068=>1971, +48072=>1972, +48080=>1973, +48083=>1974, +48120=>1975, +48121=>1976, +48124=>1977, +48127=>1978, +48128=>1979, +48130=>1980, +48136=>1981, +48137=>1982, +48139=>1983, +48140=>1984, +48141=>1985, +48143=>1986, +48145=>1987, +48148=>1988, +48149=>1989, +48150=>1990, +48151=>1991, +48152=>1992, +48155=>1993, +48156=>1994, +48157=>1995, +48158=>1996, +48159=>1997, +48164=>1998, +48165=>1999, +48167=>2000, +48169=>2001, +48173=>2002, +48176=>2003, +48177=>2004, +48180=>2005, +48184=>2006, +48192=>2007, +48193=>2008, +48195=>2009, +48196=>2010, +48197=>2011, +48201=>2012, +48204=>2013, +48205=>2014, +48208=>2015, +48221=>2016, +48260=>2017, +48261=>2018, +48264=>2019, +48267=>2020, +48268=>2021, +48270=>2022, +48276=>2023, +48277=>2024, +48279=>2025, +48281=>2026, +48282=>2027, +48288=>2028, +48289=>2029, +48292=>2030, +48295=>2031, +48296=>2032, +48304=>2033, +48305=>2034, +48307=>2035, +48308=>2036, +48309=>2037, +48316=>2038, +48317=>2039, +48320=>2040, +48324=>2041, +48333=>2042, +48335=>2043, +48336=>2044, +48337=>2045, +48341=>2046, +48344=>2047, +48348=>2048, +48372=>2049, +48373=>2050, +48374=>2051, +48376=>2052, +48380=>2053, +48388=>2054, +48389=>2055, +48391=>2056, +48393=>2057, +48400=>2058, +48404=>2059, +48420=>2060, +48428=>2061, +48448=>2062, +48456=>2063, +48457=>2064, +48460=>2065, +48464=>2066, +48472=>2067, +48473=>2068, +48484=>2069, +48488=>2070, +48512=>2071, +48513=>2072, +48516=>2073, +48519=>2074, +48520=>2075, +48521=>2076, +48522=>2077, +48528=>2078, +48529=>2079, +48531=>2080, +48533=>2081, +48537=>2082, +48538=>2083, +48540=>2084, +48548=>2085, +48560=>2086, +48568=>2087, +48596=>2088, +48597=>2089, +48600=>2090, +48604=>2091, +48617=>2092, +48624=>2093, +48628=>2094, +48632=>2095, +48640=>2096, +48643=>2097, +48645=>2098, +48652=>2099, +48653=>2100, +48656=>2101, +48660=>2102, +48668=>2103, +48669=>2104, +48671=>2105, +48708=>2106, +48709=>2107, +48712=>2108, +48716=>2109, +48718=>2110, +48724=>2111, +48725=>2112, +48727=>2113, +48729=>2114, +48730=>2115, +48731=>2116, +48736=>2117, +48737=>2118, +48740=>2119, +48744=>2120, +48746=>2121, +48752=>2122, +48753=>2123, +48755=>2124, +48756=>2125, +48757=>2126, +48763=>2127, +48764=>2128, +48765=>2129, +48768=>2130, +48772=>2131, +48780=>2132, +48781=>2133, +48783=>2134, +48784=>2135, +48785=>2136, +48792=>2137, +48793=>2138, +48808=>2139, +48848=>2140, +48849=>2141, +48852=>2142, +48855=>2143, +48856=>2144, +48864=>2145, +48867=>2146, +48868=>2147, +48869=>2148, +48876=>2149, +48897=>2150, +48904=>2151, +48905=>2152, +48920=>2153, +48921=>2154, +48923=>2155, +48924=>2156, +48925=>2157, +48960=>2158, +48961=>2159, +48964=>2160, +48968=>2161, +48976=>2162, +48977=>2163, +48981=>2164, +49044=>2165, +49072=>2166, +49093=>2167, +49100=>2168, +49101=>2169, +49104=>2170, +49108=>2171, +49116=>2172, +49119=>2173, +49121=>2174, +49212=>2175, +49233=>2176, +49240=>2177, +49244=>2178, +49248=>2179, +49256=>2180, +49257=>2181, +49296=>2182, +49297=>2183, +49300=>2184, +49304=>2185, +49312=>2186, +49313=>2187, +49315=>2188, +49317=>2189, +49324=>2190, +49325=>2191, +49327=>2192, +49328=>2193, +49331=>2194, +49332=>2195, +49333=>2196, +49334=>2197, +49340=>2198, +49341=>2199, +49343=>2200, +49344=>2201, +49345=>2202, +49349=>2203, +49352=>2204, +49353=>2205, +49356=>2206, +49360=>2207, +49368=>2208, +49369=>2209, +49371=>2210, +49372=>2211, +49373=>2212, +49380=>2213, +49381=>2214, +49384=>2215, +49388=>2216, +49396=>2217, +49397=>2218, +49399=>2219, +49401=>2220, +49408=>2221, +49412=>2222, +49416=>2223, +49424=>2224, +49429=>2225, +49436=>2226, +49437=>2227, +49438=>2228, +49439=>2229, +49440=>2230, +49443=>2231, +49444=>2232, +49446=>2233, +49447=>2234, +49452=>2235, +49453=>2236, +49455=>2237, +49456=>2238, +49457=>2239, +49462=>2240, +49464=>2241, +49465=>2242, +49468=>2243, +49472=>2244, +49480=>2245, +49481=>2246, +49483=>2247, +49484=>2248, +49485=>2249, +49492=>2250, +49493=>2251, +49496=>2252, +49500=>2253, +49508=>2254, +49509=>2255, +49511=>2256, +49512=>2257, +49513=>2258, +49520=>2259, +49524=>2260, +49528=>2261, +49541=>2262, +49548=>2263, +49549=>2264, +49550=>2265, +49552=>2266, +49556=>2267, +49558=>2268, +49564=>2269, +49565=>2270, +49567=>2271, +49569=>2272, +49573=>2273, +49576=>2274, +49577=>2275, +49580=>2276, +49584=>2277, +49597=>2278, +49604=>2279, +49608=>2280, +49612=>2281, +49620=>2282, +49623=>2283, +49624=>2284, +49632=>2285, +49636=>2286, +49640=>2287, +49648=>2288, +49649=>2289, +49651=>2290, +49660=>2291, +49661=>2292, +49664=>2293, +49668=>2294, +49676=>2295, +49677=>2296, +49679=>2297, +49681=>2298, +49688=>2299, +49689=>2300, +49692=>2301, +49695=>2302, +49696=>2303, +49704=>2304, +49705=>2305, +49707=>2306, +49709=>2307, +49711=>2308, +49713=>2309, +49714=>2310, +49716=>2311, +49736=>2312, +49744=>2313, +49745=>2314, +49748=>2315, +49752=>2316, +49760=>2317, +49765=>2318, +49772=>2319, +49773=>2320, +49776=>2321, +49780=>2322, +49788=>2323, +49789=>2324, +49791=>2325, +49793=>2326, +49800=>2327, +49801=>2328, +49808=>2329, +49816=>2330, +49819=>2331, +49821=>2332, +49828=>2333, +49829=>2334, +49832=>2335, +49836=>2336, +49837=>2337, +49844=>2338, +49845=>2339, +49847=>2340, +49849=>2341, +49884=>2342, +49885=>2343, +49888=>2344, +49891=>2345, +49892=>2346, +49899=>2347, +49900=>2348, +49901=>2349, +49903=>2350, +49905=>2351, +49910=>2352, +49912=>2353, +49913=>2354, +49915=>2355, +49916=>2356, +49920=>2357, +49928=>2358, +49929=>2359, +49932=>2360, +49933=>2361, +49939=>2362, +49940=>2363, +49941=>2364, +49944=>2365, +49948=>2366, +49956=>2367, +49957=>2368, +49960=>2369, +49961=>2370, +49989=>2371, +50024=>2372, +50025=>2373, +50028=>2374, +50032=>2375, +50034=>2376, +50040=>2377, +50041=>2378, +50044=>2379, +50045=>2380, +50052=>2381, +50056=>2382, +50060=>2383, +50112=>2384, +50136=>2385, +50137=>2386, +50140=>2387, +50143=>2388, +50144=>2389, +50146=>2390, +50152=>2391, +50153=>2392, +50157=>2393, +50164=>2394, +50165=>2395, +50168=>2396, +50184=>2397, +50192=>2398, +50212=>2399, +50220=>2400, +50224=>2401, +50228=>2402, +50236=>2403, +50237=>2404, +50248=>2405, +50276=>2406, +50277=>2407, +50280=>2408, +50284=>2409, +50292=>2410, +50293=>2411, +50297=>2412, +50304=>2413, +50324=>2414, +50332=>2415, +50360=>2416, +50364=>2417, +50409=>2418, +50416=>2419, +50417=>2420, +50420=>2421, +50424=>2422, +50426=>2423, +50431=>2424, +50432=>2425, +50433=>2426, +50444=>2427, +50448=>2428, +50452=>2429, +50460=>2430, +50472=>2431, +50473=>2432, +50476=>2433, +50480=>2434, +50488=>2435, +50489=>2436, +50491=>2437, +50493=>2438, +50500=>2439, +50501=>2440, +50504=>2441, +50505=>2442, +50506=>2443, +50508=>2444, +50509=>2445, +50510=>2446, +50515=>2447, +50516=>2448, +50517=>2449, +50519=>2450, +50520=>2451, +50521=>2452, +50525=>2453, +50526=>2454, +50528=>2455, +50529=>2456, +50532=>2457, +50536=>2458, +50544=>2459, +50545=>2460, +50547=>2461, +50548=>2462, +50549=>2463, +50556=>2464, +50557=>2465, +50560=>2466, +50564=>2467, +50567=>2468, +50572=>2469, +50573=>2470, +50575=>2471, +50577=>2472, +50581=>2473, +50583=>2474, +50584=>2475, +50588=>2476, +50592=>2477, +50601=>2478, +50612=>2479, +50613=>2480, +50616=>2481, +50617=>2482, +50619=>2483, +50620=>2484, +50621=>2485, +50622=>2486, +50628=>2487, +50629=>2488, +50630=>2489, +50631=>2490, +50632=>2491, +50633=>2492, +50634=>2493, +50636=>2494, +50638=>2495, +50640=>2496, +50641=>2497, +50644=>2498, +50648=>2499, +50656=>2500, +50657=>2501, +50659=>2502, +50661=>2503, +50668=>2504, +50669=>2505, +50670=>2506, +50672=>2507, +50676=>2508, +50678=>2509, +50679=>2510, +50684=>2511, +50685=>2512, +50686=>2513, +50687=>2514, +50688=>2515, +50689=>2516, +50693=>2517, +50694=>2518, +50695=>2519, +50696=>2520, +50700=>2521, +50704=>2522, +50712=>2523, +50713=>2524, +50715=>2525, +50716=>2526, +50724=>2527, +50725=>2528, +50728=>2529, +50732=>2530, +50733=>2531, +50734=>2532, +50736=>2533, +50739=>2534, +50740=>2535, +50741=>2536, +50743=>2537, +50745=>2538, +50747=>2539, +50752=>2540, +50753=>2541, +50756=>2542, +50760=>2543, +50768=>2544, +50769=>2545, +50771=>2546, +50772=>2547, +50773=>2548, +50780=>2549, +50781=>2550, +50784=>2551, +50796=>2552, +50799=>2553, +50801=>2554, +50808=>2555, +50809=>2556, +50812=>2557, +50816=>2558, +50824=>2559, +50825=>2560, +50827=>2561, +50829=>2562, +50836=>2563, +50837=>2564, +50840=>2565, +50844=>2566, +50852=>2567, +50853=>2568, +50855=>2569, +50857=>2570, +50864=>2571, +50865=>2572, +50868=>2573, +50872=>2574, +50873=>2575, +50874=>2576, +50880=>2577, +50881=>2578, +50883=>2579, +50885=>2580, +50892=>2581, +50893=>2582, +50896=>2583, +50900=>2584, +50908=>2585, +50909=>2586, +50912=>2587, +50913=>2588, +50920=>2589, +50921=>2590, +50924=>2591, +50928=>2592, +50936=>2593, +50937=>2594, +50941=>2595, +50948=>2596, +50949=>2597, +50952=>2598, +50956=>2599, +50964=>2600, +50965=>2601, +50967=>2602, +50969=>2603, +50976=>2604, +50977=>2605, +50980=>2606, +50984=>2607, +50992=>2608, +50993=>2609, +50995=>2610, +50997=>2611, +50999=>2612, +51004=>2613, +51005=>2614, +51008=>2615, +51012=>2616, +51018=>2617, +51020=>2618, +51021=>2619, +51023=>2620, +51025=>2621, +51026=>2622, +51027=>2623, +51028=>2624, +51029=>2625, +51030=>2626, +51031=>2627, +51032=>2628, +51036=>2629, +51040=>2630, +51048=>2631, +51051=>2632, +51060=>2633, +51061=>2634, +51064=>2635, +51068=>2636, +51069=>2637, +51070=>2638, +51075=>2639, +51076=>2640, +51077=>2641, +51079=>2642, +51080=>2643, +51081=>2644, +51082=>2645, +51086=>2646, +51088=>2647, +51089=>2648, +51092=>2649, +51094=>2650, +51095=>2651, +51096=>2652, +51098=>2653, +51104=>2654, +51105=>2655, +51107=>2656, +51108=>2657, +51109=>2658, +51110=>2659, +51116=>2660, +51117=>2661, +51120=>2662, +51124=>2663, +51132=>2664, +51133=>2665, +51135=>2666, +51136=>2667, +51137=>2668, +51144=>2669, +51145=>2670, +51148=>2671, +51150=>2672, +51152=>2673, +51160=>2674, +51165=>2675, +51172=>2676, +51176=>2677, +51180=>2678, +51200=>2679, +51201=>2680, +51204=>2681, +51208=>2682, +51210=>2683, +51216=>2684, +51217=>2685, +51219=>2686, +51221=>2687, +51222=>2688, +51228=>2689, +51229=>2690, +51232=>2691, +51236=>2692, +51244=>2693, +51245=>2694, +51247=>2695, +51249=>2696, +51256=>2697, +51260=>2698, +51264=>2699, +51272=>2700, +51273=>2701, +51276=>2702, +51277=>2703, +51284=>2704, +51312=>2705, +51313=>2706, +51316=>2707, +51320=>2708, +51322=>2709, +51328=>2710, +51329=>2711, +51331=>2712, +51333=>2713, +51334=>2714, +51335=>2715, +51339=>2716, +51340=>2717, +51341=>2718, +51348=>2719, +51357=>2720, +51359=>2721, +51361=>2722, +51368=>2723, +51388=>2724, +51389=>2725, +51396=>2726, +51400=>2727, +51404=>2728, +51412=>2729, +51413=>2730, +51415=>2731, +51417=>2732, +51424=>2733, +51425=>2734, +51428=>2735, +51445=>2736, +51452=>2737, +51453=>2738, +51456=>2739, +51460=>2740, +51461=>2741, +51462=>2742, +51468=>2743, +51469=>2744, +51471=>2745, +51473=>2746, +51480=>2747, +51500=>2748, +51508=>2749, +51536=>2750, +51537=>2751, +51540=>2752, +51544=>2753, +51552=>2754, +51553=>2755, +51555=>2756, +51564=>2757, +51568=>2758, +51572=>2759, +51580=>2760, +51592=>2761, +51593=>2762, +51596=>2763, +51600=>2764, +51608=>2765, +51609=>2766, +51611=>2767, +51613=>2768, +51648=>2769, +51649=>2770, +51652=>2771, +51655=>2772, +51656=>2773, +51658=>2774, +51664=>2775, +51665=>2776, +51667=>2777, +51669=>2778, +51670=>2779, +51673=>2780, +51674=>2781, +51676=>2782, +51677=>2783, +51680=>2784, +51682=>2785, +51684=>2786, +51687=>2787, +51692=>2788, +51693=>2789, +51695=>2790, +51696=>2791, +51697=>2792, +51704=>2793, +51705=>2794, +51708=>2795, +51712=>2796, +51720=>2797, +51721=>2798, +51723=>2799, +51724=>2800, +51725=>2801, +51732=>2802, +51736=>2803, +51753=>2804, +51788=>2805, +51789=>2806, +51792=>2807, +51796=>2808, +51804=>2809, +51805=>2810, +51807=>2811, +51808=>2812, +51809=>2813, +51816=>2814, +51837=>2815, +51844=>2816, +51864=>2817, +51900=>2818, +51901=>2819, +51904=>2820, +51908=>2821, +51916=>2822, +51917=>2823, +51919=>2824, +51921=>2825, +51923=>2826, +51928=>2827, +51929=>2828, +51936=>2829, +51948=>2830, +51956=>2831, +51976=>2832, +51984=>2833, +51988=>2834, +51992=>2835, +52000=>2836, +52001=>2837, +52033=>2838, +52040=>2839, +52041=>2840, +52044=>2841, +52048=>2842, +52056=>2843, +52057=>2844, +52061=>2845, +52068=>2846, +52088=>2847, +52089=>2848, +52124=>2849, +52152=>2850, +52180=>2851, +52196=>2852, +52199=>2853, +52201=>2854, +52236=>2855, +52237=>2856, +52240=>2857, +52244=>2858, +52252=>2859, +52253=>2860, +52257=>2861, +52258=>2862, +52263=>2863, +52264=>2864, +52265=>2865, +52268=>2866, +52270=>2867, +52272=>2868, +52280=>2869, +52281=>2870, +52283=>2871, +52284=>2872, +52285=>2873, +52286=>2874, +52292=>2875, +52293=>2876, +52296=>2877, +52300=>2878, +52308=>2879, +52309=>2880, +52311=>2881, +52312=>2882, +52313=>2883, +52320=>2884, +52324=>2885, +52326=>2886, +52328=>2887, +52336=>2888, +52341=>2889, +52376=>2890, +52377=>2891, +52380=>2892, +52384=>2893, +52392=>2894, +52393=>2895, +52395=>2896, +52396=>2897, +52397=>2898, +52404=>2899, +52405=>2900, +52408=>2901, +52412=>2902, +52420=>2903, +52421=>2904, +52423=>2905, +52425=>2906, +52432=>2907, +52436=>2908, +52452=>2909, +52460=>2910, +52464=>2911, +52481=>2912, +52488=>2913, +52489=>2914, +52492=>2915, +52496=>2916, +52504=>2917, +52505=>2918, +52507=>2919, +52509=>2920, +52516=>2921, +52520=>2922, +52524=>2923, +52537=>2924, +52572=>2925, +52576=>2926, +52580=>2927, +52588=>2928, +52589=>2929, +52591=>2930, +52593=>2931, +52600=>2932, +52616=>2933, +52628=>2934, +52629=>2935, +52632=>2936, +52636=>2937, +52644=>2938, +52645=>2939, +52647=>2940, +52649=>2941, +52656=>2942, +52676=>2943, +52684=>2944, +52688=>2945, +52712=>2946, +52716=>2947, +52720=>2948, +52728=>2949, +52729=>2950, +52731=>2951, +52733=>2952, +52740=>2953, +52744=>2954, +52748=>2955, +52756=>2956, +52761=>2957, +52768=>2958, +52769=>2959, +52772=>2960, +52776=>2961, +52784=>2962, +52785=>2963, +52787=>2964, +52789=>2965, +52824=>2966, +52825=>2967, +52828=>2968, +52831=>2969, +52832=>2970, +52833=>2971, +52840=>2972, +52841=>2973, +52843=>2974, +52845=>2975, +52852=>2976, +52853=>2977, +52856=>2978, +52860=>2979, +52868=>2980, +52869=>2981, +52871=>2982, +52873=>2983, +52880=>2984, +52881=>2985, +52884=>2986, +52888=>2987, +52896=>2988, +52897=>2989, +52899=>2990, +52900=>2991, +52901=>2992, +52908=>2993, +52909=>2994, +52929=>2995, +52964=>2996, +52965=>2997, +52968=>2998, +52971=>2999, +52972=>3000, +52980=>3001, +52981=>3002, +52983=>3003, +52984=>3004, +52985=>3005, +52992=>3006, +52993=>3007, +52996=>3008, +53000=>3009, +53008=>3010, +53009=>3011, +53011=>3012, +53013=>3013, +53020=>3014, +53024=>3015, +53028=>3016, +53036=>3017, +53037=>3018, +53039=>3019, +53040=>3020, +53041=>3021, +53048=>3022, +53076=>3023, +53077=>3024, +53080=>3025, +53084=>3026, +53092=>3027, +53093=>3028, +53095=>3029, +53097=>3030, +53104=>3031, +53105=>3032, +53108=>3033, +53112=>3034, +53120=>3035, +53125=>3036, +53132=>3037, +53153=>3038, +53160=>3039, +53168=>3040, +53188=>3041, +53216=>3042, +53217=>3043, +53220=>3044, +53224=>3045, +53232=>3046, +53233=>3047, +53235=>3048, +53237=>3049, +53244=>3050, +53248=>3051, +53252=>3052, +53265=>3053, +53272=>3054, +53293=>3055, +53300=>3056, +53301=>3057, +53304=>3058, +53308=>3059, +53316=>3060, +53317=>3061, +53319=>3062, +53321=>3063, +53328=>3064, +53332=>3065, +53336=>3066, +53344=>3067, +53356=>3068, +53357=>3069, +53360=>3070, +53364=>3071, +53372=>3072, +53373=>3073, +53377=>3074, +53412=>3075, +53413=>3076, +53416=>3077, +53420=>3078, +53428=>3079, +53429=>3080, +53431=>3081, +53433=>3082, +53440=>3083, +53441=>3084, +53444=>3085, +53448=>3086, +53449=>3087, +53456=>3088, +53457=>3089, +53459=>3090, +53460=>3091, +53461=>3092, +53468=>3093, +53469=>3094, +53472=>3095, +53476=>3096, +53484=>3097, +53485=>3098, +53487=>3099, +53488=>3100, +53489=>3101, +53496=>3102, +53517=>3103, +53552=>3104, +53553=>3105, +53556=>3106, +53560=>3107, +53562=>3108, +53568=>3109, +53569=>3110, +53571=>3111, +53572=>3112, +53573=>3113, +53580=>3114, +53581=>3115, +53584=>3116, +53588=>3117, +53596=>3118, +53597=>3119, +53599=>3120, +53601=>3121, +53608=>3122, +53612=>3123, +53628=>3124, +53636=>3125, +53640=>3126, +53664=>3127, +53665=>3128, +53668=>3129, +53672=>3130, +53680=>3131, +53681=>3132, +53683=>3133, +53685=>3134, +53690=>3135, +53692=>3136, +53696=>3137, +53720=>3138, +53748=>3139, +53752=>3140, +53767=>3141, +53769=>3142, +53776=>3143, +53804=>3144, +53805=>3145, +53808=>3146, +53812=>3147, +53820=>3148, +53821=>3149, +53823=>3150, +53825=>3151, +53832=>3152, +53852=>3153, +53860=>3154, +53888=>3155, +53889=>3156, +53892=>3157, +53896=>3158, +53904=>3159, +53905=>3160, +53909=>3161, +53916=>3162, +53920=>3163, +53924=>3164, +53932=>3165, +53937=>3166, +53944=>3167, +53945=>3168, +53948=>3169, +53951=>3170, +53952=>3171, +53954=>3172, +53960=>3173, +53961=>3174, +53963=>3175, +53972=>3176, +53976=>3177, +53980=>3178, +53988=>3179, +53989=>3180, +54000=>3181, +54001=>3182, +54004=>3183, +54008=>3184, +54016=>3185, +54017=>3186, +54019=>3187, +54021=>3188, +54028=>3189, +54029=>3190, +54030=>3191, +54032=>3192, +54036=>3193, +54038=>3194, +54044=>3195, +54045=>3196, +54047=>3197, +54048=>3198, +54049=>3199, +54053=>3200, +54056=>3201, +54057=>3202, +54060=>3203, +54064=>3204, +54072=>3205, +54073=>3206, +54075=>3207, +54076=>3208, +54077=>3209, +54084=>3210, +54085=>3211, +54140=>3212, +54141=>3213, +54144=>3214, +54148=>3215, +54156=>3216, +54157=>3217, +54159=>3218, +54160=>3219, +54161=>3220, +54168=>3221, +54169=>3222, +54172=>3223, +54176=>3224, +54184=>3225, +54185=>3226, +54187=>3227, +54189=>3228, +54196=>3229, +54200=>3230, +54204=>3231, +54212=>3232, +54213=>3233, +54216=>3234, +54217=>3235, +54224=>3236, +54232=>3237, +54241=>3238, +54243=>3239, +54252=>3240, +54253=>3241, +54256=>3242, +54260=>3243, +54268=>3244, +54269=>3245, +54271=>3246, +54273=>3247, +54280=>3248, +54301=>3249, +54336=>3250, +54340=>3251, +54364=>3252, +54368=>3253, +54372=>3254, +54381=>3255, +54383=>3256, +54392=>3257, +54393=>3258, +54396=>3259, +54399=>3260, +54400=>3261, +54402=>3262, +54408=>3263, +54409=>3264, +54411=>3265, +54413=>3266, +54420=>3267, +54441=>3268, +54476=>3269, +54480=>3270, +54484=>3271, +54492=>3272, +54495=>3273, +54504=>3274, +54508=>3275, +54512=>3276, +54520=>3277, +54523=>3278, +54525=>3279, +54532=>3280, +54536=>3281, +54540=>3282, +54548=>3283, +54549=>3284, +54551=>3285, +54588=>3286, +54589=>3287, +54592=>3288, +54596=>3289, +54604=>3290, +54605=>3291, +54607=>3292, +54609=>3293, +54616=>3294, +54617=>3295, +54620=>3296, +54624=>3297, +54629=>3298, +54632=>3299, +54633=>3300, +54635=>3301, +54637=>3302, +54644=>3303, +54645=>3304, +54648=>3305, +54652=>3306, +54660=>3307, +54661=>3308, +54663=>3309, +54664=>3310, +54665=>3311, +54672=>3312, +54693=>3313, +54728=>3314, +54729=>3315, +54732=>3316, +54736=>3317, +54738=>3318, +54744=>3319, +54745=>3320, +54747=>3321, +54749=>3322, +54756=>3323, +54757=>3324, +54760=>3325, +54764=>3326, +54772=>3327, +54773=>3328, +54775=>3329, +54777=>3330, +54784=>3331, +54785=>3332, +54788=>3333, +54792=>3334, +54800=>3335, +54801=>3336, +54803=>3337, +54804=>3338, +54805=>3339, +54812=>3340, +54816=>3341, +54820=>3342, +54829=>3343, +54840=>3344, +54841=>3345, +54844=>3346, +54848=>3347, +54853=>3348, +54856=>3349, +54857=>3350, +54859=>3351, +54861=>3352, +54865=>3353, +54868=>3354, +54869=>3355, +54872=>3356, +54876=>3357, +54887=>3358, +54889=>3359, +54896=>3360, +54897=>3361, +54900=>3362, +54915=>3363, +54917=>3364, +54924=>3365, +54925=>3366, +54928=>3367, +54932=>3368, +54941=>3369, +54943=>3370, +54945=>3371, +54952=>3372, +54956=>3373, +54960=>3374, +54969=>3375, +54971=>3376, +54980=>3377, +54981=>3378, +54984=>3379, +54988=>3380, +54993=>3381, +54996=>3382, +54999=>3383, +55001=>3384, +55008=>3385, +55012=>3386, +55016=>3387, +55024=>3388, +55029=>3389, +55036=>3390, +55037=>3391, +55040=>3392, +55044=>3393, +55057=>3394, +55064=>3395, +55065=>3396, +55068=>3397, +55072=>3398, +55080=>3399, +55081=>3400, +55083=>3401, +55085=>3402, +55092=>3403, +55093=>3404, +55096=>3405, +55100=>3406, +55108=>3407, +55111=>3408, +55113=>3409, +55120=>3410, +55121=>3411, +55124=>3412, +55126=>3413, +55127=>3414, +55128=>3415, +55129=>3416, +55136=>3417, +55137=>3418, +55139=>3419, +55141=>3420, +55145=>3421, +55148=>3422, +55152=>3423, +55156=>3424, +55164=>3425, +55165=>3426, +55169=>3427, +55176=>3428, +55177=>3429, +55180=>3430, +55184=>3431, +55192=>3432, +55193=>3433, +55195=>3434, +55197=>3435, +20285=>3436, +20339=>3437, +20551=>3438, +20729=>3439, +21152=>3440, +21487=>3441, +21621=>3442, +21733=>3443, +22025=>3444, +23233=>3445, +23478=>3446, +26247=>3447, +26550=>3448, +26551=>3449, +26607=>3450, +27468=>3451, +29634=>3452, +30146=>3453, +31292=>3454, +33499=>3455, +33540=>3456, +34903=>3457, +34952=>3458, +35382=>3459, +36040=>3460, +63747=>3460, +36303=>3461, +36603=>3462, +36838=>3463, +39381=>3464, +21051=>3465, +21364=>3466, +21508=>3467, +24682=>3468, +24932=>3469, +27580=>3470, +29647=>3471, +33050=>3472, +35258=>3473, +12179=>3474, +35282=>3474, +38307=>3475, +20355=>3476, +21002=>3477, +22718=>3478, +22904=>3479, +23014=>3480, +12082=>3481, +24178=>3481, +24185=>3482, +25031=>3483, +25536=>3484, +26438=>3485, +26604=>3486, +26751=>3487, +28567=>3488, +30286=>3489, +30475=>3490, +30965=>3491, +31240=>3492, +31487=>3493, +31777=>3494, +32925=>3495, +12169=>3496, +33390=>3496, +33393=>3497, +35563=>3498, +38291=>3499, +20075=>3500, +21917=>3501, +26359=>3502, +28212=>3503, +30883=>3504, +31469=>3505, +33883=>3506, +35088=>3507, +34638=>3508, +38824=>3509, +21208=>3510, +22350=>3511, +22570=>3512, +23884=>3513, +24863=>3514, +25022=>3515, +25121=>3516, +25954=>3517, +26577=>3518, +27204=>3519, +28187=>3520, +12130=>3521, +29976=>3521, +30131=>3522, +30435=>3523, +30640=>3524, +32058=>3525, +37039=>3526, +37969=>3527, +37970=>3528, +40853=>3529, +21283=>3530, +23724=>3531, +30002=>3532, +32987=>3533, +37440=>3534, +38296=>3535, +21083=>3536, +22536=>3537, +23004=>3538, +23713=>3539, +23831=>3540, +24247=>3541, +24378=>3542, +24394=>3543, +24951=>3544, +27743=>3545, +30074=>3546, +30086=>3547, +31968=>3548, +32115=>3549, +32177=>3550, +32652=>3551, +33108=>3552, +33313=>3553, +34193=>3554, +35137=>3555, +35611=>3556, +37628=>3557, +38477=>3558, +64009=>3558, +40007=>3559, +20171=>3560, +20215=>3561, +20491=>3562, +20977=>3563, +22607=>3564, +24887=>3565, +24894=>3566, +24936=>3567, +25913=>3568, +27114=>3569, +28433=>3570, +30117=>3571, +30342=>3572, +30422=>3573, +31623=>3574, +33445=>3575, +33995=>3576, +37799=>3577, +38283=>3578, +21888=>3579, +23458=>3580, +22353=>3581, +31923=>3582, +32697=>3583, +37301=>3584, +20520=>3585, +21435=>3586, +23621=>3587, +24040=>3588, +25298=>3589, +25454=>3590, +25818=>3591, +25831=>3592, +28192=>3593, +28844=>3594, +31067=>3595, +36317=>3596, +36382=>3597, +36989=>3598, +37445=>3599, +37624=>3600, +20094=>3601, +20214=>3602, +20581=>3603, +12081=>3604, +24062=>3604, +24314=>3605, +24838=>3606, +26967=>3607, +33137=>3608, +34388=>3609, +36423=>3610, +37749=>3611, +39467=>3612, +20062=>3613, +20625=>3614, +26480=>3615, +26688=>3616, +20745=>3617, +21133=>3618, +21138=>3619, +27298=>3620, +30652=>3621, +37392=>3622, +40660=>3623, +21163=>3624, +24623=>3625, +36850=>3626, +20552=>3627, +25001=>3628, +25581=>3629, +25802=>3630, +26684=>3631, +27268=>3632, +28608=>3633, +33160=>3634, +35233=>3635, +38548=>3636, +22533=>3637, +29309=>3638, +12125=>3639, +29356=>3639, +29956=>3640, +32121=>3641, +32365=>3642, +32937=>3643, +12178=>3644, +35211=>3644, +64010=>3644, +35700=>3645, +36963=>3646, +40273=>3647, +25225=>3648, +27770=>3649, +28500=>3650, +32080=>3651, +32570=>3652, +35363=>3653, +20860=>3654, +24906=>3655, +31645=>3656, +35609=>3657, +37463=>3658, +37772=>3659, +20140=>3660, +20435=>3661, +20510=>3662, +20670=>3663, +20742=>3664, +21185=>3665, +21197=>3666, +21375=>3667, +22384=>3668, +22659=>3669, +24218=>3670, +24465=>3671, +24950=>3672, +25004=>3673, +25806=>3674, +25964=>3675, +26223=>3676, +26299=>3677, +26356=>3678, +63745=>3678, +26775=>3679, +28039=>3680, +28805=>3681, +28913=>3682, +29855=>3683, +29861=>3684, +29898=>3685, +30169=>3686, +30828=>3687, +30956=>3688, +31455=>3689, +31478=>3690, +32069=>3691, +32147=>3692, +32789=>3693, +32831=>3694, +33051=>3695, +33686=>3696, +35686=>3697, +36629=>3698, +36885=>3699, +37857=>3700, +38915=>3701, +38968=>3702, +39514=>3703, +39912=>3704, +20418=>3705, +21843=>3706, +22586=>3707, +22865=>3708, +63753=>3708, +23395=>3709, +23622=>3710, +24760=>3711, +25106=>3712, +26690=>3713, +26800=>3714, +26856=>3715, +28330=>3716, +30028=>3717, +30328=>3718, +30926=>3719, +31293=>3720, +31995=>3721, +32363=>3722, +32380=>3723, +35336=>3724, +35489=>3725, +35903=>3726, +38542=>3727, +40388=>3728, +21476=>3729, +21481=>3730, +21578=>3731, +21617=>3732, +22266=>3733, +22993=>3734, +23396=>3735, +23611=>3736, +24235=>3737, +25335=>3738, +25911=>3739, +25925=>3740, +25970=>3741, +26272=>3742, +26543=>3743, +27073=>3744, +27837=>3745, +30204=>3746, +30352=>3747, +30590=>3748, +31295=>3749, +32660=>3750, +32771=>3751, +32929=>3752, +33167=>3753, +33510=>3754, +33533=>3755, +33776=>3756, +34241=>3757, +34865=>3758, +34996=>3759, +35493=>3760, +36764=>3761, +37678=>3762, +38599=>3763, +39015=>3764, +12220=>3765, +39640=>3765, +12238=>3766, +40723=>3766, +21741=>3767, +26011=>3768, +26354=>3769, +26767=>3770, +31296=>3771, +12181=>3772, +35895=>3772, +40288=>3773, +22256=>3774, +22372=>3775, +23825=>3776, +26118=>3777, +26801=>3778, +26829=>3779, +28414=>3780, +29736=>3781, +34974=>3782, +39908=>3783, +27752=>3784, +12219=>3785, +39592=>3785, +20379=>3786, +20844=>3787, +20849=>3788, +21151=>3789, +23380=>3790, +12079=>3791, +24037=>3791, +24656=>3792, +24685=>3793, +25329=>3794, +25511=>3795, +25915=>3796, +29657=>3797, +31354=>3798, +34467=>3799, +36002=>3800, +38799=>3801, +20018=>3802, +63749=>3802, +23521=>3803, +12093=>3804, +25096=>3804, +26524=>3805, +12128=>3806, +29916=>3806, +31185=>3807, +33747=>3808, +35463=>3809, +35506=>3810, +36328=>3811, +36942=>3812, +37707=>3813, +38982=>3814, +24275=>3815, +64011=>3815, +27112=>3816, +34303=>3817, +37101=>3818, +20896=>3819, +23448=>3820, +23532=>3821, +24931=>3822, +26874=>3823, +27454=>3824, +28748=>3825, +29743=>3826, +29912=>3827, +31649=>3828, +32592=>3829, +33733=>3830, +35264=>3831, +36011=>3832, +38364=>3833, +39208=>3834, +21038=>3835, +24669=>3836, +25324=>3837, +36866=>3838, +20362=>3839, +20809=>3840, +21281=>3841, +22745=>3842, +24291=>3843, +26336=>3844, +27960=>3845, +28826=>3846, +29378=>3847, +29654=>3848, +31568=>3849, +33009=>3850, +37979=>3851, +21350=>3852, +25499=>3853, +32619=>3854, +20054=>3855, +20608=>3856, +22602=>3857, +22750=>3858, +24618=>3859, +24871=>3860, +25296=>3861, +27088=>3862, +39745=>3863, +23439=>3864, +32024=>3865, +32945=>3866, +36703=>3867, +20132=>3868, +20689=>3869, +21676=>3870, +21932=>3871, +23308=>3872, +23968=>3873, +24039=>3874, +25898=>3875, +25934=>3876, +26657=>3877, +27211=>3878, +29409=>3879, +30350=>3880, +30703=>3881, +32094=>3882, +32761=>3883, +33184=>3884, +34126=>3885, +34527=>3886, +36611=>3887, +36686=>3888, +37066=>3889, +39171=>3890, +39509=>3891, +39851=>3892, +19992=>3893, +20037=>3894, +20061=>3895, +20167=>3896, +20465=>3897, +20855=>3898, +21246=>3899, +21312=>3900, +12061=>3901, +21475=>3901, +21477=>3902, +63750=>3902, +21646=>3903, +22036=>3904, +22389=>3905, +22434=>3906, +23495=>3907, +23943=>3908, +24272=>3909, +25084=>3910, +25304=>3911, +25937=>3912, +26552=>3913, +26601=>3914, +27083=>3915, +27472=>3916, +27590=>3917, +27628=>3918, +27714=>3919, +28317=>3920, +28792=>3921, +29399=>3922, +29590=>3923, +29699=>3924, +30655=>3925, +30697=>3926, +31350=>3927, +32127=>3928, +32777=>3929, +12165=>3930, +33276=>3930, +33285=>3931, +33290=>3932, +33503=>3933, +34914=>3934, +35635=>3935, +36092=>3936, +36544=>3937, +36881=>3938, +37041=>3939, +37476=>3940, +37558=>3941, +39378=>3942, +39493=>3943, +40169=>3944, +40407=>3945, +12244=>3946, +40860=>3946, +63751=>3946, +63752=>3946, +22283=>3947, +23616=>3948, +33738=>3949, +38816=>3950, +38827=>3951, +40628=>3952, +21531=>3953, +31384=>3954, +32676=>3955, +35033=>3956, +36557=>3957, +37089=>3958, +22528=>3959, +23624=>3960, +25496=>3961, +31391=>3962, +23470=>3963, +12088=>3964, +24339=>3964, +31353=>3965, +31406=>3966, +33422=>3967, +36524=>3968, +20518=>3969, +21048=>3970, +21240=>3971, +21367=>3972, +22280=>3973, +25331=>3974, +25458=>3975, +27402=>3976, +28099=>3977, +30519=>3978, +21413=>3979, +29527=>3980, +34152=>3981, +36470=>3982, +38357=>3983, +26426=>3984, +27331=>3985, +28528=>3986, +35437=>3987, +36556=>3988, +39243=>3989, +26231=>3990, +27512=>3991, +36020=>3992, +12225=>3993, +39740=>3993, +21483=>3994, +22317=>3995, +22862=>3996, +25542=>3997, +27131=>3998, +29674=>3999, +30789=>4000, +31418=>4001, +31429=>4002, +31998=>4003, +33909=>4004, +35215=>4005, +36211=>4006, +36917=>4007, +38312=>4008, +21243=>4009, +22343=>4010, +30023=>4011, +31584=>4012, +33740=>4013, +37406=>4014, +27224=>4015, +20811=>4016, +21067=>4017, +21127=>4018, +25119=>4019, +26840=>4020, +26997=>4021, +38553=>4022, +20677=>4023, +21156=>4024, +21220=>4025, +25027=>4026, +12100=>4027, +26020=>4027, +26681=>4028, +27135=>4029, +29822=>4030, +31563=>4031, +33465=>4032, +33771=>4033, +35250=>4034, +35641=>4035, +36817=>4036, +39241=>4037, +20170=>4038, +22935=>4039, +25810=>4040, +26129=>4041, +27278=>4042, +29748=>4043, +31105=>4044, +31165=>4045, +33449=>4046, +34942=>4047, +34943=>4048, +35167=>4049, +37670=>4050, +20235=>4051, +21450=>4052, +24613=>4053, +25201=>4054, +27762=>4055, +32026=>4056, +32102=>4057, +20120=>4058, +20834=>4059, +30684=>4060, +32943=>4061, +20225=>4062, +20238=>4063, +20854=>4064, +20864=>4065, +21980=>4066, +22120=>4067, +22331=>4068, +22522=>4069, +22524=>4070, +22804=>4071, +22855=>4072, +22931=>4073, +23492=>4074, +23696=>4075, +23822=>4076, +12080=>4077, +24049=>4077, +24190=>4078, +24524=>4079, +25216=>4080, +26071=>4081, +26083=>4082, +26398=>4083, +26399=>4084, +26462=>4085, +26827=>4086, +26820=>4087, +27231=>4088, +27450=>4089, +27683=>4090, +27773=>4091, +27778=>4092, +28103=>4093, +29592=>4094, +29734=>4095, +29738=>4096, +29826=>4097, +29859=>4098, +30072=>4099, +30079=>4100, +30849=>4101, +30959=>4102, +31041=>4103, +31047=>4104, +31048=>4105, +31098=>4106, +31637=>4107, +32000=>4108, +32186=>4109, +32648=>4110, +32774=>4111, +32813=>4112, +32908=>4113, +35352=>4114, +35663=>4115, +35912=>4116, +63744=>4116, +36215=>4117, +37665=>4118, +37668=>4119, +39138=>4120, +39249=>4121, +39438=>4122, +39439=>4123, +39525=>4124, +40594=>4125, +32202=>4126, +20342=>4127, +21513=>4128, +25326=>4129, +26708=>4130, +12198=>4131, +37329=>4131, +63754=>4131, +21931=>4132, +20794=>4133, +23068=>4134, +25062=>4135, +25295=>4136, +63835=>4136, +25343=>4137, +37027=>4138, +35582=>4139, +63837=>4139, +26262=>4140, +29014=>4141, +38627=>4142, +25423=>4143, +25466=>4144, +21335=>4145, +26511=>4146, +26976=>4147, +28275=>4148, +30007=>4149, +32013=>4150, +34930=>4151, +22218=>4152, +23064=>4153, +20035=>4154, +20839=>4155, +22856=>4156, +63756=>4156, +26608=>4157, +32784=>4158, +12069=>4159, +22899=>4159, +63873=>4159, +24180=>4160, +63886=>4160, +25754=>4161, +63889=>4161, +31178=>4162, +63893=>4162, +24565=>4163, +63907=>4163, +24684=>4164, +25288=>4165, +25467=>4166, +63908=>4166, +23527=>4167, +63839=>4167, +63914=>4167, +23511=>4168, +21162=>4169, +22900=>4170, +24361=>4171, +24594=>4172, +63840=>4172, +29785=>4173, +39377=>4174, +28611=>4175, +33215=>4176, +36786=>4177, +24817=>4178, +33126=>4179, +23615=>4180, +63933=>4180, +23273=>4181, +35365=>4182, +26491=>4183, +63944=>4183, +32016=>4184, +63951=>4184, +33021=>4185, +23612=>4186, +27877=>4187, +63971=>4187, +21311=>4188, +63979=>4188, +28346=>4189, +63980=>4189, +22810=>4190, +33590=>4191, +63998=>4191, +20025=>4192, +63838=>4192, +20150=>4193, +20294=>4194, +21934=>4195, +22296=>4196, +22727=>4197, +24406=>4198, +26039=>4199, +26086=>4200, +27264=>4201, +27573=>4202, +28237=>4203, +30701=>4204, +31471=>4205, +31774=>4206, +32222=>4207, +34507=>4208, +34962=>4209, +37170=>4210, +37723=>4211, +25787=>4212, +28606=>4213, +29562=>4214, +30136=>4215, +36948=>4216, +21846=>4217, +22349=>4218, +25018=>4219, +25812=>4220, +26311=>4221, +28129=>4222, +28251=>4223, +28525=>4224, +28601=>4225, +30192=>4226, +32835=>4227, +33213=>4228, +34113=>4229, +35203=>4230, +35527=>4231, +35674=>4232, +37663=>4233, +27795=>4234, +30035=>4235, +31572=>4236, +36367=>4237, +36957=>4238, +21776=>4239, +22530=>4240, +22616=>4241, +24162=>4242, +25095=>4243, +25758=>4244, +26848=>4245, +30070=>4246, +31958=>4247, +64003=>4247, +34739=>4248, +40680=>4249, +20195=>4250, +22408=>4251, +22382=>4252, +12068=>4253, +22823=>4253, +23565=>4254, +23729=>4255, +24118=>4256, +24453=>4257, +25140=>4258, +25825=>4259, +29619=>4260, +33274=>4261, +34955=>4262, +36024=>4263, +38538=>4264, +40667=>4265, +23429=>4266, +64004=>4266, +24503=>4267, +24755=>4268, +20498=>4269, +12049=>4270, +20992=>4270, +21040=>4271, +22294=>4272, +22581=>4273, +22615=>4274, +23566=>4275, +23648=>4276, +23798=>4277, +23947=>4278, +24230=>4279, +64001=>4279, +24466=>4280, +24764=>4281, +25361=>4282, +25481=>4283, +25623=>4284, +26691=>4285, +26873=>4286, +27330=>4287, +28120=>4288, +28193=>4289, +28372=>4290, +28644=>4291, +29182=>4292, +30428=>4293, +30585=>4294, +31153=>4295, +31291=>4296, +33796=>4297, +35241=>4298, +36077=>4299, +36339=>4300, +36424=>4301, +36867=>4302, +36884=>4303, +36947=>4304, +37117=>4305, +37709=>4306, +38518=>4307, +38876=>4308, +27602=>4309, +28678=>4310, +29272=>4311, +29346=>4312, +29544=>4313, +30563=>4314, +31167=>4315, +31716=>4316, +32411=>4317, +35712=>4318, +63834=>4318, +22697=>4319, +24775=>4320, +25958=>4321, +26109=>4322, +26302=>4323, +27788=>4324, +28958=>4325, +29129=>4326, +35930=>4327, +38931=>4328, +20077=>4329, +31361=>4330, +20189=>4331, +20908=>4332, +20941=>4333, +21205=>4334, +21516=>4335, +24999=>4336, +26481=>4337, +26704=>4338, +26847=>4339, +27934=>4340, +64005=>4340, +28540=>4341, +30140=>4342, +30643=>4343, +31461=>4344, +33012=>4345, +33891=>4346, +37509=>4347, +20828=>4348, +12099=>4349, +26007=>4349, +26460=>4350, +26515=>4351, +30168=>4352, +31431=>4353, +33651=>4354, +12182=>4355, +35910=>4355, +36887=>4356, +38957=>4357, +23663=>4358, +33216=>4359, +33434=>4360, +36929=>4361, +36975=>4362, +37389=>4363, +24471=>4364, +23965=>4365, +27225=>4366, +29128=>4367, +30331=>4368, +31561=>4369, +34276=>4370, +35588=>4371, +37159=>4372, +39472=>4373, +21895=>4374, +63755=>4374, +25078=>4375, +63757=>4375, +30313=>4376, +63758=>4376, +32645=>4377, +63759=>4377, +34367=>4378, +63760=>4378, +34746=>4379, +63761=>4379, +35064=>4380, +63762=>4380, +37007=>4381, +63763=>4381, +27931=>4382, +63765=>4382, +28889=>4383, +63766=>4383, +29662=>4384, +63767=>4384, +32097=>4385, +33853=>4386, +63768=>4386, +37226=>4387, +63769=>4387, +39409=>4388, +63770=>4388, +20098=>4389, +63771=>4389, +21365=>4390, +63772=>4390, +27396=>4391, +63773=>4391, +27410=>4392, +28734=>4393, +29211=>4394, +63774=>4394, +34349=>4395, +63775=>4395, +40478=>4396, +63776=>4396, +21068=>4397, +36771=>4398, +23888=>4399, +63777=>4399, +25829=>4400, +25900=>4401, +27414=>4402, +28651=>4403, +63778=>4403, +31811=>4404, +32412=>4405, +34253=>4406, +63779=>4406, +35172=>4407, +63780=>4407, +35261=>4408, +25289=>4409, +63781=>4409, +33240=>4410, +63782=>4410, +34847=>4411, +63783=>4411, +24266=>4412, +63784=>4412, +26391=>4413, +63785=>4413, +28010=>4414, +63786=>4414, +29436=>4415, +63787=>4415, +29701=>4416, +29807=>4417, +34690=>4418, +37086=>4419, +63788=>4419, +20358=>4420, +63789=>4420, +23821=>4421, +24480=>4422, +33802=>4423, +20919=>4424, +63790=>4424, +25504=>4425, +63861=>4425, +30053=>4426, +63862=>4426, +20142=>4427, +63863=>4427, +20486=>4428, +20841=>4429, +63864=>4429, +20937=>4430, +63865=>4430, +26753=>4431, +63866=>4431, +27153=>4432, +31918=>4433, +31921=>4434, +31975=>4435, +63867=>4435, +33391=>4436, +63868=>4436, +35538=>4437, +63869=>4437, +36635=>4438, +37327=>4439, +63870=>4439, +20406=>4440, +20791=>4441, +21237=>4442, +63871=>4442, +21570=>4443, +63872=>4443, +24300=>4444, +63874=>4444, +24942=>4445, +25150=>4446, +26053=>4447, +63875=>4447, +27354=>4448, +28670=>4449, +63876=>4449, +31018=>4450, +63877=>4450, +34268=>4451, +34851=>4452, +38317=>4453, +63878=>4453, +39522=>4454, +39530=>4455, +63879=>4455, +40599=>4456, +63880=>4456, +40654=>4457, +63881=>4457, +12050=>4458, +21147=>4458, +63882=>4458, +26310=>4459, +63883=>4459, +27511=>4460, +63884=>4460, +28701=>4461, +31019=>4462, +36706=>4463, +63885=>4463, +38722=>4464, +24976=>4465, +63887=>4465, +25088=>4466, +63888=>4466, +25891=>4467, +28451=>4468, +63890=>4468, +29001=>4469, +63891=>4469, +29833=>4470, +63892=>4470, +32244=>4471, +63894=>4471, +32879=>4472, +63895=>4472, +34030=>4473, +63897=>4473, +36646=>4474, +63896=>4474, +36899=>4475, +63898=>4475, +37706=>4476, +63899=>4476, +20925=>4477, +21015=>4478, +63900=>4478, +21155=>4479, +63901=>4479, +27916=>4480, +28872=>4481, +63903=>4481, +35010=>4482, +63904=>4482, +24265=>4483, +63906=>4483, +25986=>4484, +27566=>4485, +63909=>4485, +28610=>4486, +31806=>4487, +63910=>4487, +29557=>4488, +63911=>4488, +20196=>4489, +63912=>4489, +20278=>4490, +22265=>4491, +63913=>4491, +23738=>4492, +23994=>4493, +63915=>4493, +24604=>4494, +63916=>4494, +29618=>4495, +63917=>4495, +31533=>4496, +32666=>4497, +63919=>4497, +32718=>4498, +32838=>4499, +63920=>4499, +36894=>4500, +37428=>4501, +63921=>4501, +38646=>4502, +63922=>4502, +38728=>4503, +63923=>4503, +38936=>4504, +63924=>4504, +40801=>4505, +20363=>4506, +63925=>4506, +28583=>4507, +31150=>4508, +63926=>4508, +37300=>4509, +63927=>4509, +38583=>4510, +63928=>4510, +21214=>4511, +63791=>4511, +25736=>4512, +25796=>4513, +63792=>4513, +27347=>4514, +63793=>4514, +28510=>4515, +28696=>4516, +29200=>4517, +63794=>4517, +30439=>4518, +63795=>4518, +12156=>4519, +32769=>4519, +63796=>4519, +34310=>4520, +63797=>4520, +34396=>4521, +63798=>4521, +36335=>4522, +63799=>4522, +36613=>4523, +38706=>4524, +63800=>4524, +39791=>4525, +63801=>4525, +40442=>4526, +63802=>4526, +12228=>4527, +40565=>4527, +30860=>4528, +63803=>4528, +31103=>4529, +63804=>4529, +32160=>4530, +63805=>4530, +33737=>4531, +63806=>4531, +37636=>4532, +63807=>4532, +12229=>4533, +40575=>4533, +63808=>4533, +40595=>4534, +35542=>4535, +63809=>4535, +22751=>4536, +63810=>4536, +24324=>4537, +63811=>4537, +26407=>4538, +28711=>4539, +29903=>4540, +31840=>4541, +63812=>4541, +32894=>4542, +63813=>4542, +20769=>4543, +28712=>4544, +29282=>4545, +63814=>4545, +30922=>4546, +63815=>4546, +36034=>4547, +63816=>4547, +36058=>4548, +36084=>4549, +38647=>4550, +63817=>4550, +20102=>4551, +63930=>4551, +20698=>4552, +63931=>4552, +23534=>4553, +63932=>4553, +24278=>4554, +26009=>4555, +63934=>4555, +29134=>4556, +63936=>4556, +30274=>4557, +63937=>4557, +30637=>4558, +32842=>4559, +34044=>4560, +63938=>4560, +36988=>4561, +63939=>4561, +39719=>4562, +12243=>4563, +40845=>4563, +63940=>4563, +22744=>4564, +63818=>4564, +23105=>4565, +23650=>4566, +63819=>4566, +27155=>4567, +63820=>4567, +28122=>4568, +63821=>4568, +28431=>4569, +63822=>4569, +30267=>4570, +32047=>4571, +63823=>4571, +32311=>4572, +63824=>4572, +34078=>4573, +35128=>4574, +37860=>4575, +38475=>4576, +63825=>4576, +21129=>4577, +63943=>4577, +26066=>4578, +26611=>4579, +63945=>4579, +27060=>4580, +27969=>4581, +63946=>4581, +28316=>4582, +63947=>4582, +28687=>4583, +29705=>4584, +63948=>4584, +29792=>4585, +30041=>4586, +63949=>4586, +30244=>4587, +30827=>4588, +63950=>4588, +35628=>4589, +39006=>4590, +63952=>4590, +20845=>4591, +63953=>4591, +25134=>4592, +63954=>4592, +38520=>4593, +63955=>4593, +20374=>4594, +20523=>4595, +63956=>4595, +23833=>4596, +63957=>4596, +28138=>4597, +63958=>4597, +32184=>4598, +36650=>4599, +63959=>4599, +24459=>4600, +63960=>4600, +24900=>4601, +63961=>4601, +26647=>4602, +63962=>4602, +38534=>4603, +63964=>4603, +21202=>4604, +63826=>4604, +32907=>4605, +63827=>4605, +20956=>4606, +63828=>4606, +20940=>4607, +63829=>4607, +26974=>4608, +31260=>4609, +63830=>4609, +32190=>4610, +63831=>4610, +33777=>4611, +63832=>4611, +38517=>4612, +63833=>4612, +20442=>4613, +21033=>4614, +63965=>4614, +21400=>4615, +21519=>4616, +63966=>4616, +21774=>4617, +23653=>4618, +63967=>4618, +24743=>4619, +26446=>4620, +63969=>4620, +26792=>4621, +63970=>4621, +28012=>4622, +29313=>4623, +29432=>4624, +29702=>4625, +63972=>4625, +29827=>4626, +30178=>4627, +63973=>4627, +31852=>4628, +32633=>4629, +63974=>4629, +32696=>4630, +33673=>4631, +35023=>4632, +63975=>4632, +35041=>4633, +63976=>4633, +12197=>4634, +37324=>4634, +63977=>4634, +37328=>4635, +38626=>4636, +63978=>4636, +39881=>4637, +21533=>4638, +63981=>4638, +28542=>4639, +29136=>4640, +63982=>4640, +29848=>4641, +63983=>4641, +34298=>4642, +63984=>4642, +36522=>4643, +38563=>4644, +63985=>4644, +40023=>4645, +63986=>4645, +40607=>4646, +63987=>4646, +26519=>4647, +63988=>4647, +28107=>4648, +63989=>4648, +29747=>4649, +33256=>4650, +63990=>4650, +38678=>4651, +30764=>4652, +12148=>4653, +31435=>4653, +63991=>4653, +31520=>4654, +63992=>4654, +31890=>4655, +63993=>4655, +25705=>4656, +29802=>4657, +30194=>4658, +30908=>4659, +30952=>4660, +12218=>4661, +39340=>4661, +39764=>4662, +12231=>4663, +40635=>4663, +23518=>4664, +24149=>4665, +28448=>4666, +33180=>4667, +33707=>4668, +37000=>4669, +19975=>4670, +21325=>4671, +23081=>4672, +24018=>4673, +24398=>4674, +24930=>4675, +25405=>4676, +26217=>4677, +26364=>4678, +28415=>4679, +28459=>4680, +28771=>4681, +30622=>4682, +33836=>4683, +34067=>4684, +34875=>4685, +36627=>4686, +39237=>4687, +39995=>4688, +21788=>4689, +25273=>4690, +26411=>4691, +27819=>4692, +33545=>4693, +35178=>4694, +38778=>4695, +20129=>4696, +22916=>4697, +24536=>4698, +24537=>4699, +26395=>4700, +32178=>4701, +32596=>4702, +33426=>4703, +33579=>4704, +33725=>4705, +36638=>4706, +37017=>4707, +22475=>4708, +22969=>4709, +23186=>4710, +23504=>4711, +26151=>4712, +26522=>4713, +26757=>4714, +27599=>4715, +29028=>4716, +32629=>4717, +36023=>4718, +36067=>4719, +36993=>4720, +39749=>4721, +33032=>4722, +35978=>4723, +38476=>4724, +39488=>4725, +12230=>4726, +40613=>4726, +23391=>4727, +27667=>4728, +29467=>4729, +30450=>4730, +30431=>4731, +33804=>4732, +20906=>4733, +35219=>4734, +20813=>4735, +20885=>4736, +21193=>4737, +26825=>4738, +27796=>4739, +30468=>4740, +30496=>4741, +32191=>4742, +32236=>4743, +12207=>4744, +38754=>4744, +40629=>4745, +28357=>4746, +34065=>4747, +20901=>4748, +21517=>4749, +21629=>4750, +26126=>4751, +26269=>4752, +26919=>4753, +28319=>4754, +12139=>4755, +30399=>4755, +30609=>4756, +33559=>4757, +33986=>4758, +34719=>4759, +37225=>4760, +37528=>4761, +40180=>4762, +34946=>4763, +20398=>4764, +20882=>4765, +21215=>4766, +22982=>4767, +24125=>4768, +24917=>4769, +25720=>4770, +25721=>4771, +26286=>4772, +26576=>4773, +27169=>4774, +27597=>4775, +12113=>4776, +27611=>4776, +29279=>4777, +29281=>4778, +29761=>4779, +30520=>4780, +12141=>4781, +30683=>4781, +32791=>4782, +33468=>4783, +33541=>4784, +35584=>4785, +35624=>4786, +35980=>4787, +12106=>4788, +26408=>4788, +27792=>4789, +29287=>4790, +12140=>4791, +30446=>4791, +30566=>4792, +31302=>4793, +40361=>4794, +27519=>4795, +27794=>4796, +22818=>4797, +26406=>4798, +33945=>4799, +21359=>4800, +22675=>4801, +22937=>4802, +24287=>4803, +25551=>4804, +26164=>4805, +26483=>4806, +28218=>4807, +29483=>4808, +31447=>4809, +33495=>4810, +37672=>4811, +21209=>4812, +24043=>4813, +25006=>4814, +25035=>4815, +25098=>4816, +25287=>4817, +25771=>4818, +12102=>4819, +26080=>4819, +26969=>4820, +27494=>4821, +12111=>4822, +27595=>4822, +28961=>4823, +29687=>4824, +30045=>4825, +32326=>4826, +33310=>4827, +33538=>4828, +34154=>4829, +35491=>4830, +36031=>4831, +38695=>4832, +40289=>4833, +22696=>4834, +40664=>4835, +20497=>4836, +21006=>4837, +21563=>4838, +21839=>4839, +12098=>4840, +25991=>4840, +27766=>4841, +32010=>4842, +32011=>4843, +32862=>4844, +34442=>4845, +12200=>4846, +38272=>4846, +38639=>4847, +21247=>4848, +27797=>4849, +29289=>4850, +21619=>4851, +23194=>4852, +23614=>4853, +23883=>4854, +24396=>4855, +24494=>4856, +26410=>4857, +26806=>4858, +26979=>4859, +28220=>4860, +28228=>4861, +30473=>4862, +12150=>4863, +31859=>4863, +32654=>4864, +34183=>4865, +35598=>4866, +36855=>4867, +38753=>4868, +40692=>4869, +23735=>4870, +24758=>4871, +24845=>4872, +25003=>4873, +25935=>4874, +26107=>4875, +26108=>4876, +27665=>4877, +27887=>4878, +29599=>4879, +29641=>4880, +32225=>4881, +38292=>4882, +23494=>4883, +34588=>4884, +35600=>4885, +21085=>4886, +21338=>4887, +25293=>4888, +25615=>4889, +25778=>4890, +26420=>4891, +27192=>4892, +27850=>4893, +29632=>4894, +29854=>4895, +31636=>4896, +31893=>4897, +32283=>4898, +33162=>4899, +33334=>4900, +34180=>4901, +36843=>4902, +38649=>4903, +39361=>4904, +20276=>4905, +21322=>4906, +21453=>4907, +21467=>4908, +25292=>4909, +25644=>4910, +25856=>4911, +26001=>4912, +27075=>4913, +27886=>4914, +28504=>4915, +29677=>4916, +30036=>4917, +30242=>4918, +30436=>4919, +30460=>4920, +30928=>4921, +30971=>4922, +63844=>4922, +31020=>4923, +32070=>4924, +33324=>4925, +34784=>4926, +36820=>4927, +38930=>4928, +39151=>4929, +21187=>4930, +25300=>4931, +25765=>4932, +28196=>4933, +28497=>4934, +30332=>4935, +36299=>4936, +37297=>4937, +37474=>4938, +39662=>4939, +39747=>4940, +20515=>4941, +20621=>4942, +22346=>4943, +22952=>4944, +23592=>4945, +24135=>4946, +24439=>4947, +25151=>4948, +25918=>4949, +12101=>4950, +26041=>4950, +26049=>4951, +26121=>4952, +26507=>4953, +27036=>4954, +28354=>4955, +30917=>4956, +32033=>4957, +32938=>4958, +33152=>4959, +33323=>4960, +33459=>4961, +33953=>4962, +34444=>4963, +35370=>4964, +35607=>4965, +37030=>4966, +38450=>4967, +40848=>4968, +20493=>4969, +20467=>4970, +22521=>4971, +24472=>4972, +25308=>4973, +25490=>4974, +26479=>4975, +28227=>4976, +28953=>4977, +30403=>4978, +32972=>4979, +32986=>4980, +35060=>4981, +35061=>4982, +35097=>4983, +36064=>4984, +36649=>4985, +37197=>4986, +38506=>4987, +20271=>4988, +20336=>4989, +24091=>4990, +26575=>4991, +26658=>4992, +12137=>4993, +30333=>4993, +30334=>4994, +39748=>4995, +24161=>4996, +27146=>4997, +29033=>4998, +29140=>4999, +30058=>5000, +32321=>5001, +34115=>5002, +34281=>5003, +39132=>5004, +20240=>5005, +31567=>5006, +32624=>5007, +38309=>5008, +20961=>5009, +24070=>5010, +26805=>5011, +27710=>5012, +27726=>5013, +27867=>5014, +29359=>5015, +31684=>5016, +33539=>5017, +27861=>5018, +29754=>5019, +20731=>5020, +21128=>5021, +22721=>5022, +25816=>5023, +27287=>5024, +29863=>5025, +30294=>5026, +30887=>5027, +34327=>5028, +38370=>5029, +38713=>5030, +21342=>5031, +24321=>5032, +35722=>5033, +36776=>5034, +36783=>5035, +37002=>5036, +21029=>5037, +30629=>5038, +40009=>5039, +40712=>5040, +19993=>5041, +20482=>5042, +20853=>5043, +23643=>5044, +24183=>5045, +26142=>5046, +26170=>5047, +26564=>5048, +26821=>5049, +28851=>5050, +29953=>5051, +30149=>5052, +31177=>5053, +31453=>5054, +36647=>5055, +39200=>5056, +39432=>5057, +20445=>5058, +22561=>5059, +22577=>5060, +23542=>5061, +26222=>5062, +27493=>5063, +27921=>5064, +28282=>5065, +28541=>5066, +29668=>5067, +29995=>5068, +33769=>5069, +35036=>5070, +35091=>5071, +35676=>5072, +36628=>5073, +20239=>5074, +20693=>5075, +21264=>5076, +12056=>5077, +21340=>5077, +23443=>5078, +24489=>5079, +63846=>5079, +26381=>5080, +31119=>5081, +33145=>5082, +33583=>5083, +34068=>5084, +35079=>5085, +35206=>5086, +36665=>5087, +36667=>5088, +64007=>5088, +39333=>5089, +39954=>5090, +26412=>5091, +20086=>5092, +20472=>5093, +22857=>5094, +23553=>5095, +23791=>5096, +23792=>5097, +25447=>5098, +26834=>5099, +28925=>5100, +29090=>5101, +29739=>5102, +32299=>5103, +34028=>5104, +34562=>5105, +36898=>5106, +37586=>5107, +40179=>5108, +19981=>5109, +63847=>5109, +20184=>5110, +20463=>5111, +20613=>5112, +21078=>5113, +21103=>5114, +21542=>5115, +21648=>5116, +22496=>5117, +22827=>5118, +23142=>5119, +23386=>5120, +23413=>5121, +23500=>5122, +24220=>5123, +25206=>5124, +25975=>5125, +26023=>5126, +28014=>5127, +28325=>5128, +12119=>5129, +29238=>5129, +31526=>5130, +31807=>5131, +12152=>5132, +32566=>5132, +33104=>5133, +33105=>5134, +33178=>5135, +33344=>5136, +33433=>5137, +33705=>5138, +35331=>5139, +36000=>5140, +36070=>5141, +36091=>5142, +36212=>5143, +36282=>5144, +37096=>5145, +37340=>5146, +12201=>5147, +38428=>5147, +38468=>5148, +39385=>5149, +40167=>5150, +21271=>5151, +63843=>5151, +20998=>5152, +21545=>5153, +22132=>5154, +22707=>5155, +22868=>5156, +22894=>5157, +24575=>5158, +24996=>5159, +25198=>5160, +26128=>5161, +27774=>5162, +28954=>5163, +30406=>5164, +31881=>5165, +31966=>5166, +32027=>5167, +33452=>5168, +36033=>5169, +38640=>5170, +20315=>5171, +24343=>5172, +24447=>5173, +25282=>5174, +23849=>5175, +26379=>5176, +26842=>5177, +30844=>5178, +32323=>5179, +40300=>5180, +19989=>5181, +20633=>5182, +12052=>5183, +21269=>5183, +21290=>5184, +21329=>5185, +22915=>5186, +23138=>5187, +24199=>5188, +24754=>5189, +24970=>5190, +25161=>5191, +25209=>5192, +26000=>5193, +26503=>5194, +27047=>5195, +12112=>5196, +27604=>5196, +27606=>5197, +27607=>5198, +27608=>5199, +27832=>5200, +29749=>5201, +30202=>5202, +30738=>5203, +30865=>5204, +31189=>5205, +31192=>5206, +31875=>5207, +32203=>5208, +32737=>5209, +32933=>5210, +33086=>5211, +33218=>5212, +33778=>5213, +34586=>5214, +35048=>5215, +35513=>5216, +35692=>5217, +36027=>5218, +37145=>5219, +12206=>5220, +38750=>5220, +12214=>5221, +39131=>5221, +12240=>5222, +40763=>5222, +22188=>5223, +23338=>5224, +24428=>5225, +25996=>5226, +27315=>5227, +27567=>5228, +27996=>5229, +28657=>5230, +28693=>5231, +29277=>5232, +29613=>5233, +36007=>5234, +36051=>5235, +38971=>5236, +24977=>5237, +27703=>5238, +32856=>5239, +39425=>5240, +20045=>5241, +20107=>5242, +20123=>5243, +20181=>5244, +20282=>5245, +20284=>5246, +20351=>5247, +20447=>5248, +20735=>5249, +21490=>5250, +21496=>5251, +21766=>5252, +21987=>5253, +22235=>5254, +12064=>5255, +22763=>5255, +22882=>5256, +23057=>5257, +23531=>5258, +23546=>5259, +23556=>5260, +24051=>5261, +24107=>5262, +24473=>5263, +24605=>5264, +25448=>5265, +26012=>5266, +26031=>5267, +26614=>5268, +26619=>5269, +26797=>5270, +27515=>5271, +27801=>5272, +27863=>5273, +28195=>5274, +28681=>5275, +29509=>5276, +30722=>5277, +31038=>5278, +31040=>5279, +31072=>5280, +31169=>5281, +31721=>5282, +32023=>5283, +32114=>5284, +32902=>5285, +33293=>5286, +33678=>5287, +34001=>5288, +34503=>5289, +35039=>5290, +35408=>5291, +35422=>5292, +35613=>5293, +36060=>5294, +36198=>5295, +36781=>5296, +37034=>5297, +39164=>5298, +39391=>5299, +40605=>5300, +21066=>5301, +26388=>5302, +20632=>5303, +21034=>5304, +12077=>5305, +23665=>5305, +25955=>5306, +27733=>5307, +29642=>5308, +29987=>5309, +30109=>5310, +31639=>5311, +33948=>5312, +37240=>5313, +38704=>5314, +20087=>5315, +25746=>5316, +27578=>5317, +63856=>5317, +29022=>5318, +34217=>5319, +19977=>5320, +26441=>5321, +26862=>5322, +28183=>5323, +33439=>5324, +34072=>5325, +34923=>5326, +25591=>5327, +28545=>5328, +37394=>5329, +39087=>5330, +19978=>5331, +20663=>5332, +20687=>5333, +20767=>5334, +21830=>5335, +21930=>5336, +22039=>5337, +23360=>5338, +23577=>5339, +23776=>5340, +24120=>5341, +24202=>5342, +24224=>5343, +24258=>5344, +24819=>5345, +26705=>5346, +27233=>5347, +28248=>5348, +29245=>5349, +29248=>5350, +29376=>5351, +63994=>5351, +30456=>5352, +31077=>5353, +31665=>5354, +32724=>5355, +35059=>5356, +35316=>5357, +35443=>5358, +35937=>5359, +36062=>5360, +38684=>5361, +22622=>5362, +63852=>5362, +29885=>5363, +36093=>5364, +21959=>5365, +31329=>5366, +32034=>5367, +63850=>5367, +12170=>5368, +33394=>5368, +29298=>5369, +12131=>5370, +29983=>5370, +29989=>5371, +31513=>5372, +22661=>5373, +22779=>5374, +23996=>5375, +24207=>5376, +24246=>5377, +24464=>5378, +24661=>5379, +25234=>5380, +25471=>5381, +25933=>5382, +26257=>5383, +26329=>5384, +26360=>5385, +26646=>5386, +26866=>5387, +29312=>5388, +29790=>5389, +31598=>5390, +32110=>5391, +32214=>5392, +32626=>5393, +32997=>5394, +33298=>5395, +34223=>5396, +35199=>5397, +35475=>5398, +36893=>5399, +37604=>5400, +12233=>5401, +40653=>5401, +12239=>5402, +40736=>5402, +12067=>5403, +22805=>5403, +22893=>5404, +24109=>5405, +24796=>5406, +26132=>5407, +26227=>5408, +26512=>5409, +27728=>5410, +28101=>5411, +28511=>5412, +12143=>5413, +30707=>5413, +30889=>5414, +33990=>5415, +37323=>5416, +37675=>5417, +20185=>5418, +20682=>5419, +20808=>5420, +21892=>5421, +23307=>5422, +23459=>5423, +25159=>5424, +25982=>5425, +26059=>5426, +28210=>5427, +29053=>5428, +29697=>5429, +29764=>5430, +29831=>5431, +29887=>5432, +30316=>5433, +31146=>5434, +32218=>5435, +32341=>5436, +32680=>5437, +33146=>5438, +33203=>5439, +33337=>5440, +34330=>5441, +34796=>5442, +35445=>5443, +36323=>5444, +36984=>5445, +37521=>5446, +37925=>5447, +39245=>5448, +39854=>5449, +21352=>5450, +23633=>5451, +26964=>5452, +27844=>5453, +27945=>5454, +28203=>5455, +12166=>5456, +33292=>5456, +34203=>5457, +35131=>5458, +35373=>5459, +35498=>5460, +63855=>5460, +63905=>5460, +38634=>5461, +40807=>5462, +21089=>5463, +26297=>5464, +27570=>5465, +32406=>5466, +34814=>5467, +36109=>5468, +38275=>5469, +38493=>5470, +25885=>5471, +28041=>5472, +29166=>5473, +22478=>5474, +22995=>5475, +23468=>5476, +24615=>5477, +24826=>5478, +25104=>5479, +26143=>5480, +26207=>5481, +29481=>5482, +29689=>5483, +30427=>5484, +30465=>5485, +63853=>5485, +31596=>5486, +32854=>5487, +32882=>5488, +33125=>5489, +35488=>5490, +37266=>5491, +19990=>5492, +21218=>5493, +27506=>5494, +27927=>5495, +31237=>5496, +31545=>5497, +32048=>5498, +36016=>5499, +21484=>5500, +22063=>5501, +22609=>5502, +23477=>5503, +12073=>5504, +23567=>5504, +23569=>5505, +24034=>5506, +25152=>5507, +25475=>5508, +25620=>5509, +26157=>5510, +26803=>5511, +27836=>5512, +28040=>5513, +28335=>5514, +28703=>5515, +28836=>5516, +29138=>5517, +29990=>5518, +30095=>5519, +30094=>5520, +30233=>5521, +31505=>5522, +31712=>5523, +31787=>5524, +32032=>5525, +32057=>5526, +34092=>5527, +34157=>5528, +34311=>5529, +35380=>5530, +36877=>5531, +36961=>5532, +37045=>5533, +37559=>5534, +38902=>5535, +39479=>5536, +20439=>5537, +23660=>5538, +26463=>5539, +28049=>5540, +31903=>5541, +32396=>5542, +35606=>5543, +36118=>5544, +36895=>5545, +23403=>5546, +24061=>5547, +25613=>5548, +33984=>5549, +36956=>5550, +39137=>5551, +29575=>5552, +63841=>5552, +63963=>5552, +23435=>5553, +24730=>5554, +26494=>5555, +28126=>5556, +35359=>5557, +35494=>5558, +36865=>5559, +38924=>5560, +21047=>5561, +28753=>5562, +30862=>5563, +37782=>5564, +34928=>5565, +37335=>5566, +20462=>5567, +21463=>5568, +22013=>5569, +22234=>5570, +22402=>5571, +22781=>5572, +23234=>5573, +23432=>5574, +23723=>5575, +23744=>5576, +24101=>5577, +24833=>5578, +25101=>5579, +12095=>5580, +25163=>5580, +25480=>5581, +25628=>5582, +25910=>5583, +25976=>5584, +63849=>5584, +27193=>5585, +27530=>5586, +12116=>5587, +27700=>5587, +27929=>5588, +28465=>5589, +29159=>5590, +29417=>5591, +29560=>5592, +29703=>5593, +29874=>5594, +30246=>5595, +30561=>5596, +31168=>5597, +31319=>5598, +31466=>5599, +31929=>5600, +32143=>5601, +32172=>5602, +32353=>5603, +32670=>5604, +33065=>5605, +33585=>5606, +33936=>5607, +34010=>5608, +34282=>5609, +34966=>5610, +35504=>5611, +35728=>5612, +36664=>5613, +36930=>5614, +36995=>5615, +37228=>5616, +37526=>5617, +37561=>5618, +38539=>5619, +38567=>5620, +38568=>5621, +38614=>5622, +38656=>5623, +38920=>5624, +12216=>5625, +39318=>5625, +39635=>5626, +39706=>5627, +21460=>5628, +22654=>5629, +22809=>5630, +23408=>5631, +23487=>5632, +28113=>5633, +28506=>5634, +29087=>5635, +29729=>5636, +29881=>5637, +32901=>5638, +33789=>5639, +24033=>5640, +24455=>5641, +24490=>5642, +24642=>5643, +26092=>5644, +26642=>5645, +26991=>5646, +27219=>5647, +27529=>5648, +27957=>5649, +28147=>5650, +29667=>5651, +30462=>5652, +30636=>5653, +31565=>5654, +32020=>5655, +33059=>5656, +33308=>5657, +33600=>5658, +34036=>5659, +34147=>5660, +35426=>5661, +35524=>5662, +37255=>5663, +37662=>5664, +38918=>5665, +39348=>5666, +25100=>5667, +34899=>5668, +36848=>5669, +37477=>5670, +23815=>5671, +23847=>5672, +23913=>5673, +29791=>5674, +33181=>5675, +34664=>5676, +28629=>5677, +25342=>5678, +63859=>5678, +32722=>5679, +35126=>5680, +35186=>5681, +19998=>5682, +20056=>5683, +20711=>5684, +21213=>5685, +21319=>5686, +25215=>5687, +26119=>5688, +32361=>5689, +34821=>5690, +38494=>5691, +20365=>5692, +21273=>5693, +22070=>5694, +22987=>5695, +23204=>5696, +12075=>5697, +23608=>5697, +23630=>5698, +23629=>5699, +24066=>5700, +24337=>5701, +24643=>5702, +26045=>5703, +26159=>5704, +26178=>5705, +26558=>5706, +26612=>5707, +29468=>5708, +12142=>5709, +30690=>5709, +12144=>5710, +31034=>5710, +32709=>5711, +33940=>5712, +33997=>5713, +35222=>5714, +35430=>5715, +35433=>5716, +35553=>5717, +12183=>5718, +35925=>5718, +35962=>5719, +22516=>5720, +23508=>5721, +24335=>5722, +24687=>5723, +25325=>5724, +26893=>5725, +27542=>5726, +28252=>5727, +29060=>5728, +31698=>5729, +34645=>5730, +35672=>5731, +63996=>5731, +36606=>5732, +12215=>5733, +39135=>5733, +39166=>5734, +20280=>5735, +20353=>5736, +20449=>5737, +21627=>5738, +23072=>5739, +23480=>5740, +24892=>5741, +26032=>5742, +26216=>5743, +29180=>5744, +30003=>5745, +31070=>5746, +32051=>5747, +33102=>5748, +12162=>5749, +33251=>5749, +33688=>5750, +34218=>5751, +34254=>5752, +34563=>5753, +35338=>5754, +12189=>5755, +36523=>5755, +12191=>5756, +36763=>5756, +36805=>5757, +22833=>5758, +23460=>5759, +23526=>5760, +24713=>5761, +23529=>5762, +23563=>5763, +12092=>5764, +24515=>5764, +27777=>5765, +28145=>5766, +28683=>5767, +29978=>5768, +33455=>5769, +35574=>5770, +20160=>5771, +63997=>5771, +12055=>5772, +21313=>5772, +38617=>5773, +12114=>5774, +27663=>5774, +20126=>5775, +20420=>5776, +20818=>5777, +21854=>5778, +23077=>5779, +23784=>5780, +25105=>5781, +12123=>5782, +29273=>5782, +33469=>5783, +33706=>5784, +34558=>5785, +34905=>5786, +35357=>5787, +38463=>5788, +38597=>5789, +39187=>5790, +40201=>5791, +40285=>5792, +22538=>5793, +23731=>5794, +23997=>5795, +24132=>5796, +24801=>5797, +63929=>5797, +24853=>5798, +25569=>5799, +27138=>5800, +63764=>5800, +63836=>5800, +63935=>5800, +28197=>5801, +37122=>5802, +37716=>5803, +38990=>5804, +39952=>5805, +40823=>5806, +23433=>5807, +23736=>5808, +25353=>5809, +26191=>5810, +26696=>5811, +30524=>5812, +38593=>5813, +38797=>5814, +38996=>5815, +39839=>5816, +26017=>5817, +35585=>5818, +36555=>5819, +38332=>5820, +21813=>5821, +23721=>5822, +24022=>5823, +24245=>5824, +26263=>5825, +30284=>5826, +33780=>5827, +38343=>5828, +22739=>5829, +25276=>5830, +29390=>5831, +40232=>5832, +20208=>5833, +22830=>5834, +24591=>5835, +26171=>5836, +27523=>5837, +31207=>5838, +40230=>5839, +21395=>5840, +21696=>5841, +22467=>5842, +23830=>5843, +24859=>5844, +26326=>5845, +28079=>5846, +30861=>5847, +33406=>5848, +38552=>5849, +38724=>5850, +21380=>5851, +25212=>5852, +25494=>5853, +28082=>5854, +32266=>5855, +33099=>5856, +38989=>5857, +27387=>5858, +32588=>5859, +40367=>5860, +40474=>5861, +20063=>5862, +20539=>5863, +20918=>5864, +22812=>5865, +24825=>5866, +25590=>5867, +26928=>5868, +29242=>5869, +32822=>5870, +37326=>5871, +24369=>5872, +32004=>5873, +33509=>5874, +63860=>5874, +33903=>5875, +33979=>5876, +34277=>5877, +36493=>5878, +20335=>5879, +22756=>5880, +23363=>5881, +24665=>5882, +25562=>5883, +25880=>5884, +25965=>5885, +26264=>5886, +26954=>5887, +27171=>5888, +27915=>5889, +28673=>5890, +29036=>5891, +30162=>5892, +30221=>5893, +31155=>5894, +31344=>5895, +12154=>5896, +32650=>5896, +35140=>5897, +35731=>5898, +37312=>5899, +38525=>5900, +39178=>5901, +22276=>5902, +24481=>5903, +26044=>5904, +28417=>5905, +30208=>5906, +31142=>5907, +35486=>5908, +39341=>5909, +12226=>5910, +39770=>5910, +40812=>5911, +20740=>5912, +25014=>5913, +25233=>5914, +27277=>5915, +33222=>5916, +20547=>5917, +22576=>5918, +24422=>5919, +28937=>5920, +12180=>5921, +35328=>5921, +35578=>5922, +23420=>5923, +34326=>5924, +20474=>5925, +20796=>5926, +22196=>5927, +22852=>5928, +25513=>5929, +28153=>5930, +23978=>5931, +26989=>5932, +20870=>5933, +20104=>5934, +20313=>5935, +22914=>5936, +27487=>5937, +27741=>5938, +29877=>5939, +30998=>5940, +33287=>5941, +33349=>5942, +33593=>5943, +36671=>5944, +36701=>5945, +39192=>5946, +20134=>5947, +22495=>5948, +24441=>5949, +26131=>5950, +63968=>5950, +30123=>5951, +32377=>5952, +35695=>5953, +36870=>5954, +39515=>5955, +22181=>5956, +22567=>5957, +23032=>5958, +23071=>5959, +23476=>5960, +24310=>5961, +25424=>5962, +25403=>5963, +26941=>5964, +27783=>5965, +27839=>5966, +28046=>5967, +28051=>5968, +28149=>5969, +28436=>5970, +28895=>5971, +28982=>5972, +29017=>5973, +29123=>5974, +29141=>5975, +30799=>5976, +30831=>5977, +31605=>5978, +32227=>5979, +32303=>5980, +34893=>5981, +36575=>5982, +37467=>5983, +40182=>5984, +24709=>5985, +28037=>5986, +29105=>5987, +38321=>5988, +21421=>5989, +26579=>5990, +28814=>5991, +28976=>5992, +29744=>5993, +33398=>5994, +33490=>5995, +38331=>5996, +39653=>5997, +40573=>5998, +26308=>5999, +29121=>6000, +33865=>6001, +63854=>6001, +22603=>6002, +23992=>6003, +24433=>6004, +26144=>6005, +26254=>6006, +27001=>6007, +27054=>6008, +27704=>6009, +27891=>6010, +28214=>6011, +28481=>6012, +28634=>6013, +28699=>6014, +28719=>6015, +29008=>6016, +29151=>6017, +29552=>6018, +29787=>6019, +29908=>6020, +30408=>6021, +31310=>6022, +32403=>6023, +33521=>6024, +35424=>6025, +36814=>6026, +37704=>6027, +38681=>6028, +20034=>6029, +20522=>6030, +21000=>6031, +21473=>6032, +26355=>6033, +27757=>6034, +28618=>6035, +29450=>6036, +30591=>6037, +31330=>6038, +33454=>6039, +34269=>6040, +34306=>6041, +35028=>6042, +35427=>6043, +35709=>6044, +35947=>6045, +37555=>6046, +38675=>6047, +38928=>6048, +20116=>6049, +20237=>6050, +20425=>6051, +20658=>6052, +21320=>6053, +21566=>6054, +21555=>6055, +21978=>6056, +22626=>6057, +22714=>6058, +22887=>6059, +23067=>6060, +23524=>6061, +24735=>6062, +25034=>6063, +25942=>6064, +26111=>6065, +26212=>6066, +26791=>6067, +27738=>6068, +28595=>6069, +28879=>6070, +29100=>6071, +29522=>6072, +31613=>6073, +34568=>6074, +35492=>6075, +39986=>6076, +40711=>6077, +23627=>6078, +27779=>6079, +29508=>6080, +12127=>6081, +29577=>6081, +37434=>6082, +28331=>6083, +29797=>6084, +30239=>6085, +31337=>6086, +32277=>6087, +34314=>6088, +20800=>6089, +22725=>6090, +25793=>6091, +29934=>6092, +29973=>6093, +30320=>6094, +32705=>6095, +37013=>6096, +38605=>6097, +39252=>6098, +28198=>6099, +12129=>6100, +29926=>6100, +31401=>6101, +31402=>6102, +33253=>6103, +34521=>6104, +34680=>6105, +35355=>6106, +23113=>6107, +23436=>6108, +23451=>6109, +26785=>6110, +26880=>6111, +28003=>6112, +29609=>6113, +29715=>6114, +29740=>6115, +30871=>6116, +32233=>6117, +32747=>6118, +33048=>6119, +33109=>6120, +33694=>6121, +35916=>6122, +38446=>6123, +63942=>6123, +38929=>6124, +12104=>6125, +26352=>6125, +24448=>6126, +26106=>6127, +26505=>6128, +27754=>6129, +29579=>6130, +20525=>6131, +23043=>6132, +27498=>6133, +30702=>6134, +22806=>6135, +23916=>6136, +24013=>6137, +29477=>6138, +30031=>6139, +20709=>6140, +20985=>6141, +22575=>6142, +22829=>6143, +22934=>6144, +23002=>6145, +23525=>6146, +23970=>6147, +25303=>6148, +25622=>6149, +25747=>6150, +25854=>6151, +26332=>6152, +27208=>6153, +29183=>6154, +29796=>6155, +31368=>6156, +31407=>6157, +32327=>6158, +32350=>6159, +32768=>6160, +33136=>6161, +34799=>6162, +35201=>6163, +35616=>6164, +36953=>6165, +36992=>6166, +39250=>6167, +24958=>6168, +27442=>6169, +28020=>6170, +32287=>6171, +35109=>6172, +36785=>6173, +20433=>6174, +20653=>6175, +20887=>6176, +21191=>6177, +22471=>6178, +22665=>6179, +23481=>6180, +24248=>6181, +24898=>6182, +27029=>6183, +28044=>6184, +28263=>6185, +28342=>6186, +29076=>6187, +29794=>6188, +12132=>6189, +29992=>6189, +29996=>6190, +32883=>6191, +33592=>6192, +33993=>6193, +36362=>6194, +37780=>6195, +37854=>6196, +20110=>6197, +20305=>6198, +20598=>6199, +20778=>6200, +12060=>6201, +21448=>6201, +21451=>6202, +21491=>6203, +23431=>6204, +23507=>6205, +23588=>6206, +24858=>6207, +24962=>6208, +26100=>6209, +12124=>6210, +29275=>6210, +29591=>6211, +29760=>6212, +30402=>6213, +31056=>6214, +31121=>6215, +31161=>6216, +32006=>6217, +12155=>6218, +32701=>6218, +33419=>6219, +34261=>6220, +34398=>6221, +36802=>6222, +36935=>6223, +37109=>6224, +37354=>6225, +38533=>6226, +12204=>6227, +38632=>6227, +38633=>6228, +21206=>6229, +24423=>6230, +26093=>6231, +26161=>6232, +26671=>6233, +29020=>6234, +31286=>6235, +37057=>6236, +38922=>6237, +20113=>6238, +27218=>6239, +27550=>6240, +28560=>6241, +29065=>6242, +32792=>6243, +33464=>6244, +34131=>6245, +36939=>6246, +38549=>6247, +38642=>6248, +38907=>6249, +34074=>6250, +39729=>6251, +20112=>6252, +29066=>6253, +38596=>6254, +20803=>6255, +21407=>6256, +21729=>6257, +22291=>6258, +22290=>6259, +22435=>6260, +23195=>6261, +23236=>6262, +23491=>6263, +24616=>6264, +24895=>6265, +25588=>6266, +27781=>6267, +27961=>6268, +28274=>6269, +28304=>6270, +29232=>6271, +29503=>6272, +29783=>6273, +33489=>6274, +34945=>6275, +36677=>6276, +36960=>6277, +38498=>6278, +39000=>6279, +40219=>6280, +12105=>6281, +26376=>6281, +36234=>6282, +37470=>6283, +20301=>6284, +20553=>6285, +20702=>6286, +21361=>6287, +22285=>6288, +22996=>6289, +23041=>6290, +23561=>6291, +24944=>6292, +26256=>6293, +28205=>6294, +29234=>6295, +29771=>6296, +32239=>6297, +32963=>6298, +33806=>6299, +33894=>6300, +34111=>6301, +34655=>6302, +34907=>6303, +35096=>6304, +35586=>6305, +36949=>6306, +12209=>6307, +38859=>6307, +39759=>6308, +20083=>6309, +20369=>6310, +20754=>6311, +20842=>6312, +21807=>6313, +21929=>6314, +23418=>6315, +23461=>6316, +24188=>6317, +24189=>6318, +24254=>6319, +24736=>6320, +24799=>6321, +24840=>6322, +24841=>6323, +25540=>6324, +25912=>6325, +26377=>6326, +26580=>6327, +26586=>6328, +26977=>6329, +26978=>6330, +27833=>6331, +27943=>6332, +28216=>6333, +28641=>6334, +29494=>6335, +29495=>6336, +29788=>6337, +30001=>6338, +30290=>6339, +32173=>6340, +33278=>6341, +33848=>6342, +35029=>6343, +35480=>6344, +35547=>6345, +35565=>6346, +36400=>6347, +36418=>6348, +36938=>6349, +36926=>6350, +36986=>6351, +12195=>6352, +37193=>6352, +37321=>6353, +37742=>6354, +22537=>6355, +27603=>6356, +12161=>6357, +32905=>6357, +32946=>6358, +20801=>6359, +22891=>6360, +23609=>6361, +28516=>6362, +29607=>6363, +32996=>6364, +36103=>6365, +37399=>6366, +38287=>6367, +12160=>6368, +32895=>6368, +25102=>6369, +28700=>6370, +32104=>6371, +34701=>6372, +22432=>6373, +24681=>6374, +24903=>6375, +27575=>6376, +35518=>6377, +37504=>6378, +38577=>6379, +12036=>6380, +20057=>6380, +21535=>6381, +28139=>6382, +34093=>6383, +38512=>6384, +12211=>6385, +38899=>6385, +39150=>6386, +25558=>6387, +27875=>6388, +12194=>6389, +37009=>6389, +20957=>6390, +25033=>6391, +33210=>6392, +40441=>6393, +20381=>6394, +20506=>6395, +20736=>6396, +23452=>6397, +24847=>6398, +25087=>6399, +25836=>6400, +26885=>6401, +27589=>6402, +30097=>6403, +30691=>6404, +32681=>6405, +33380=>6406, +34191=>6407, +34811=>6408, +12176=>6409, +34915=>6409, +35516=>6410, +35696=>6411, +37291=>6412, +12038=>6413, +20108=>6413, +20197=>6414, +20234=>6415, +22839=>6416, +23016=>6417, +24050=>6418, +24347=>6419, +24411=>6420, +24609=>6421, +29246=>6422, +29669=>6423, +30064=>6424, +63842=>6424, +30157=>6425, +31227=>6426, +12157=>6427, +32780=>6427, +12159=>6428, +32819=>6428, +32900=>6429, +33505=>6430, +33617=>6431, +36029=>6432, +36019=>6433, +36999=>6434, +39156=>6435, +39180=>6436, +28727=>6437, +30410=>6438, +32714=>6439, +32716=>6440, +32764=>6441, +35610=>6442, +12040=>6443, +20154=>6443, +20161=>6444, +20995=>6445, +21360=>6446, +21693=>6447, +63902=>6447, +22240=>6448, +23035=>6449, +23493=>6450, +24341=>6451, +24525=>6452, +28270=>6453, +32106=>6454, +33589=>6455, +34451=>6456, +35469=>6457, +38765=>6458, +38775=>6459, +12032=>6460, +19968=>6460, +20314=>6461, +20350=>6462, +22777=>6463, +12103=>6464, +26085=>6464, +28322=>6465, +36920=>6466, +37808=>6467, +39353=>6468, +20219=>6469, +22764=>6470, +22922=>6471, +23001=>6472, +24641=>6473, +31252=>6474, +33615=>6475, +36035=>6476, +12042=>6477, +20837=>6477, +21316=>6478, +20173=>6479, +21097=>6480, +23381=>6481, +33471=>6482, +20180=>6483, +21050=>6484, +63999=>6484, +21672=>6485, +22985=>6486, +23039=>6487, +12070=>6488, +23376=>6488, +23383=>6489, +23388=>6490, +24675=>6491, +24904=>6492, +28363=>6493, +28825=>6494, +63995=>6494, +29038=>6495, +29574=>6496, +29943=>6497, +30133=>6498, +30913=>6499, +32043=>6500, +32773=>6501, +12163=>6502, +33258=>6502, +33576=>6503, +34071=>6504, +34249=>6505, +35566=>6506, +36039=>6507, +38604=>6508, +20316=>6509, +21242=>6510, +22204=>6511, +26027=>6512, +26152=>6513, +28796=>6514, +28856=>6515, +29237=>6516, +32189=>6517, +33421=>6518, +37196=>6519, +38592=>6520, +40306=>6521, +23409=>6522, +26855=>6523, +27544=>6524, +28538=>6525, +30430=>6526, +23697=>6527, +26283=>6528, +28507=>6529, +31668=>6530, +31786=>6531, +34870=>6532, +38620=>6533, +19976=>6534, +20183=>6535, +21280=>6536, +22580=>6537, +22715=>6538, +22767=>6539, +22892=>6540, +23559=>6541, +24115=>6542, +24196=>6543, +24373=>6544, +25484=>6545, +26290=>6546, +26454=>6547, +27167=>6548, +27299=>6549, +27404=>6550, +28479=>6551, +29254=>6552, +29520=>6553, +29835=>6554, +31456=>6555, +31911=>6556, +33144=>6557, +33247=>6558, +33255=>6559, +33674=>6560, +33900=>6561, +34083=>6562, +34196=>6563, +34255=>6564, +35037=>6565, +36115=>6566, +37292=>6567, +12199=>6568, +38263=>6568, +38556=>6569, +20877=>6570, +21705=>6571, +22312=>6572, +23472=>6573, +25165=>6574, +26448=>6575, +26685=>6576, +26771=>6577, +28221=>6578, +28371=>6579, +28797=>6580, +32289=>6581, +35009=>6582, +36001=>6583, +36617=>6584, +40779=>6585, +40782=>6586, +29229=>6587, +31631=>6588, +35533=>6589, +37658=>6590, +20295=>6591, +20302=>6592, +20786=>6593, +21632=>6594, +22992=>6595, +24213=>6596, +25269=>6597, +26485=>6598, +26990=>6599, +27159=>6600, +27822=>6601, +28186=>6602, +29401=>6603, +29482=>6604, +30141=>6605, +31672=>6606, +32053=>6607, +33511=>6608, +33785=>6609, +33879=>6610, +34295=>6611, +35419=>6612, +36015=>6613, +36487=>6614, +36889=>6615, +37048=>6616, +38606=>6617, +40799=>6618, +21219=>6619, +21514=>6620, +23265=>6621, +23490=>6622, +25688=>6623, +25973=>6624, +28404=>6625, +29380=>6626, +30340=>6627, +31309=>6628, +31515=>6629, +31821=>6630, +32318=>6631, +32735=>6632, +33659=>6633, +35627=>6634, +36042=>6635, +12186=>6636, +36196=>6636, +36321=>6637, +36447=>6638, +36842=>6639, +36857=>6640, +36969=>6641, +37841=>6642, +20291=>6643, +20346=>6644, +20659=>6645, +20840=>6646, +20856=>6647, +21069=>6648, +21098=>6649, +22625=>6650, +22652=>6651, +22880=>6652, +23560=>6653, +23637=>6654, +24283=>6655, +24731=>6656, +25136=>6657, +26643=>6658, +27583=>6659, +27656=>6660, +28593=>6661, +29006=>6662, +29728=>6663, +12133=>6664, +30000=>6664, +30008=>6665, +30033=>6666, +30322=>6667, +31564=>6668, +31627=>6669, +31661=>6670, +31686=>6671, +32399=>6672, +35438=>6673, +36670=>6674, +36681=>6675, +37439=>6676, +37523=>6677, +37666=>6678, +37931=>6679, +38651=>6680, +39002=>6681, +39019=>6682, +39198=>6683, +20999=>6684, +64000=>6684, +25130=>6685, +25240=>6686, +27993=>6687, +30308=>6688, +31434=>6689, +31680=>6690, +32118=>6691, +21344=>6692, +23742=>6693, +24215=>6694, +28472=>6695, +28857=>6696, +31896=>6697, +38673=>6698, +39822=>6699, +40670=>6700, +25509=>6701, +25722=>6702, +34678=>6703, +19969=>6704, +20117=>6705, +20141=>6706, +20572=>6707, +20597=>6708, +21576=>6709, +22979=>6710, +23450=>6711, +24128=>6712, +24237=>6713, +24311=>6714, +24449=>6715, +24773=>6716, +25402=>6717, +25919=>6718, +25972=>6719, +26060=>6720, +26230=>6721, +26232=>6722, +26622=>6723, +26984=>6724, +27273=>6725, +27491=>6726, +27712=>6727, +28096=>6728, +28136=>6729, +28191=>6730, +28254=>6731, +28702=>6732, +28833=>6733, +29582=>6734, +29693=>6735, +30010=>6736, +30555=>6737, +30855=>6738, +31118=>6739, +31243=>6740, +31357=>6741, +31934=>6742, +32142=>6743, +33351=>6744, +35330=>6745, +35562=>6746, +35998=>6747, +37165=>6748, +37194=>6749, +37336=>6750, +37478=>6751, +37580=>6752, +37664=>6753, +38662=>6754, +38742=>6755, +38748=>6756, +38914=>6757, +12237=>6758, +40718=>6758, +21046=>6759, +21137=>6760, +21884=>6761, +22564=>6762, +24093=>6763, +24351=>6764, +24716=>6765, +25552=>6766, +26799=>6767, +28639=>6768, +31085=>6769, +31532=>6770, +33229=>6771, +34234=>6772, +35069=>6773, +35576=>6774, +36420=>6775, +37261=>6776, +38500=>6777, +38555=>6778, +38717=>6779, +38988=>6780, +12241=>6781, +40778=>6781, +20430=>6782, +20806=>6783, +20939=>6784, +21161=>6785, +22066=>6786, +24340=>6787, +24427=>6788, +25514=>6789, +25805=>6790, +26089=>6791, +26177=>6792, +26362=>6793, +26361=>6794, +26397=>6795, +26781=>6796, +26839=>6797, +27133=>6798, +28437=>6799, +28526=>6800, +29031=>6801, +29157=>6802, +12118=>6803, +29226=>6803, +29866=>6804, +30522=>6805, +31062=>6806, +31066=>6807, +31199=>6808, +31264=>6809, +31381=>6810, +31895=>6811, +31967=>6812, +32068=>6813, +32368=>6814, +32903=>6815, +34299=>6816, +34468=>6817, +35412=>6818, +35519=>6819, +36249=>6820, +36481=>6821, +36896=>6822, +36973=>6823, +37347=>6824, +38459=>6825, +38613=>6826, +12227=>6827, +40165=>6827, +26063=>6828, +31751=>6829, +12188=>6830, +36275=>6830, +37827=>6831, +23384=>6832, +23562=>6833, +21330=>6834, +25305=>6835, +29469=>6836, +20519=>6837, +23447=>6838, +24478=>6839, +24752=>6840, +24939=>6841, +26837=>6842, +28121=>6843, +29742=>6844, +31278=>6845, +32066=>6846, +32156=>6847, +32305=>6848, +33131=>6849, +36394=>6850, +36405=>6851, +37758=>6852, +37912=>6853, +20304=>6854, +22352=>6855, +24038=>6856, +24231=>6857, +25387=>6858, +32618=>6859, +20027=>6860, +20303=>6861, +20367=>6862, +20570=>6863, +23005=>6864, +32964=>6865, +21610=>6866, +21608=>6867, +22014=>6868, +22863=>6869, +23449=>6870, +24030=>6871, +24282=>6872, +26205=>6873, +26417=>6874, +26609=>6875, +26666=>6876, +27880=>6877, +27954=>6878, +28234=>6879, +28557=>6880, +28855=>6881, +29664=>6882, +30087=>6883, +31820=>6884, +32002=>6885, +32044=>6886, +32162=>6887, +12168=>6888, +33311=>6888, +34523=>6889, +35387=>6890, +35461=>6891, +12187=>6892, +36208=>6892, +36490=>6893, +36659=>6894, +36913=>6895, +37198=>6896, +37202=>6897, +37956=>6898, +39376=>6899, +12149=>6900, +31481=>6900, +31909=>6901, +20426=>6902, +20737=>6903, +20934=>6904, +22472=>6905, +23535=>6906, +23803=>6907, +26201=>6908, +27197=>6909, +27994=>6910, +28310=>6911, +28652=>6912, +28940=>6913, +30063=>6914, +31459=>6915, +34850=>6916, +36897=>6917, +36981=>6918, +38603=>6919, +39423=>6920, +33537=>6921, +20013=>6922, +20210=>6923, +34886=>6924, +37325=>6925, +21373=>6926, +27355=>6927, +26987=>6928, +27713=>6929, +33914=>6930, +22686=>6931, +24974=>6932, +26366=>6933, +25327=>6934, +28893=>6935, +29969=>6936, +30151=>6937, +32338=>6938, +33976=>6939, +35657=>6940, +36104=>6941, +20043=>6942, +21482=>6943, +21675=>6944, +22320=>6945, +22336=>6946, +24535=>6947, +25345=>6948, +25351=>6949, +25711=>6950, +12096=>6951, +25903=>6951, +26088=>6952, +26234=>6953, +26525=>6954, +26547=>6955, +12108=>6956, +27490=>6956, +27744=>6957, +27802=>6958, +28460=>6959, +30693=>6960, +30757=>6961, +31049=>6962, +31063=>6963, +32025=>6964, +32930=>6965, +33026=>6966, +12164=>6967, +33267=>6967, +33437=>6968, +33463=>6969, +34584=>6970, +35468=>6971, +36100=>6972, +36286=>6973, +36978=>6974, +30452=>6975, +31257=>6976, +31287=>6977, +32340=>6978, +32887=>6979, +21767=>6980, +21972=>6981, +22645=>6982, +25391=>6983, +25634=>6984, +26185=>6985, +26187=>6986, +26733=>6987, +27035=>6988, +27524=>6989, +27941=>6990, +28337=>6991, +29645=>6992, +29800=>6993, +29857=>6994, +30043=>6995, +30137=>6996, +30433=>6997, +30494=>6998, +30603=>6999, +31206=>7000, +32265=>7001, +32285=>7002, +33275=>7003, +34095=>7004, +34967=>7005, +35386=>7006, +36049=>7007, +36587=>7008, +12192=>7009, +36784=>7009, +63857=>7009, +36914=>7010, +37805=>7011, +38499=>7012, +38515=>7013, +38663=>7014, +20356=>7015, +21489=>7016, +23018=>7017, +23241=>7018, +24089=>7019, +26702=>7020, +29894=>7021, +30142=>7022, +31209=>7023, +31378=>7024, +33187=>7025, +34541=>7026, +36074=>7027, +36300=>7028, +36845=>7029, +26015=>7030, +26389=>7031, +22519=>7032, +28503=>7033, +32221=>7034, +36655=>7035, +37878=>7036, +38598=>7037, +24501=>7038, +25074=>7039, +28548=>7040, +19988=>7041, +20376=>7042, +20511=>7043, +21449=>7044, +21983=>7045, +23919=>7046, +24046=>7047, +27425=>7048, +27492=>7049, +30923=>7050, +31642=>7051, +36425=>7052, +12190=>7053, +36554=>7053, +63746=>7053, +36974=>7054, +25417=>7055, +25662=>7056, +30528=>7057, +31364=>7058, +37679=>7059, +38015=>7060, +40810=>7061, +25776=>7062, +28591=>7063, +29158=>7064, +29864=>7065, +29914=>7066, +31428=>7067, +31762=>7068, +32386=>7069, +31922=>7070, +32408=>7071, +35738=>7072, +36106=>7073, +38013=>7074, +39184=>7075, +39244=>7076, +21049=>7077, +23519=>7078, +25830=>7079, +26413=>7080, +32046=>7081, +20717=>7082, +21443=>7083, +63851=>7083, +22649=>7084, +24920=>7085, +24921=>7086, +25082=>7087, +26028=>7088, +31449=>7089, +35730=>7090, +35734=>7091, +20489=>7092, +20513=>7093, +21109=>7094, +21809=>7095, +23100=>7096, +24288=>7097, +24432=>7098, +24884=>7099, +25950=>7100, +26124=>7101, +26166=>7102, +26274=>7103, +27085=>7104, +28356=>7105, +28466=>7106, +29462=>7107, +30241=>7108, +31379=>7109, +33081=>7110, +33369=>7111, +33750=>7112, +33980=>7113, +20661=>7114, +22512=>7115, +23488=>7116, +23528=>7117, +24425=>7118, +25505=>7119, +30758=>7120, +32181=>7121, +33756=>7122, +34081=>7123, +37319=>7124, +37365=>7125, +20874=>7126, +26613=>7127, +31574=>7128, +36012=>7129, +20932=>7130, +22971=>7131, +24765=>7132, +34389=>7133, +20508=>7134, +21076=>7135, +23610=>7136, +24957=>7137, +25114=>7138, +25299=>7139, +64002=>7139, +25842=>7140, +26021=>7141, +28364=>7142, +30240=>7143, +33034=>7144, +36448=>7145, +38495=>7146, +38587=>7147, +20191=>7148, +21315=>7149, +21912=>7150, +22825=>7151, +24029=>7152, +25797=>7153, +27849=>7154, +28154=>7155, +29588=>7156, +31359=>7157, +12167=>7158, +33307=>7158, +34214=>7159, +36068=>7160, +36368=>7161, +36983=>7162, +37351=>7163, +38369=>7164, +38433=>7165, +38854=>7166, +20984=>7167, +21746=>7168, +21894=>7169, +24505=>7170, +25764=>7171, +28552=>7172, +32180=>7173, +36639=>7174, +36685=>7175, +37941=>7176, +20681=>7177, +23574=>7178, +27838=>7179, +28155=>7180, +29979=>7181, +30651=>7182, +31805=>7183, +31844=>7184, +35449=>7185, +35522=>7186, +22558=>7187, +22974=>7188, +24086=>7189, +25463=>7190, +29266=>7191, +30090=>7192, +30571=>7193, +35548=>7194, +36028=>7195, +36626=>7196, +24307=>7197, +26228=>7198, +28152=>7199, +32893=>7200, +33729=>7201, +35531=>7202, +12205=>7203, +38737=>7203, +39894=>7204, +21059=>7205, +26367=>7206, +28053=>7207, +28399=>7208, +32224=>7209, +35558=>7210, +36910=>7211, +36958=>7212, +39636=>7213, +21021=>7214, +21119=>7215, +21736=>7216, +24980=>7217, +25220=>7218, +25307=>7219, +26786=>7220, +26898=>7221, +26970=>7222, +27189=>7223, +28818=>7224, +28966=>7225, +30813=>7226, +30977=>7227, +30990=>7228, +31186=>7229, +31245=>7230, +32918=>7231, +12171=>7232, +33400=>7232, +33493=>7233, +33609=>7234, +34121=>7235, +35970=>7236, +36229=>7237, +37218=>7238, +37259=>7239, +37294=>7240, +20419=>7241, +22225=>7242, +29165=>7243, +30679=>7244, +34560=>7245, +35320=>7246, +12072=>7247, +23544=>7247, +24534=>7248, +26449=>7249, +37032=>7250, +21474=>7251, +22618=>7252, +23541=>7253, +24740=>7254, +24961=>7255, +25696=>7256, +32317=>7257, +32880=>7258, +34085=>7259, +37507=>7260, +25774=>7261, +20652=>7262, +23828=>7263, +26368=>7264, +22684=>7265, +25277=>7266, +25512=>7267, +26894=>7268, +27000=>7269, +27166=>7270, +28267=>7271, +30394=>7272, +31179=>7273, +33467=>7274, +33833=>7275, +35535=>7276, +36264=>7277, +36861=>7278, +37138=>7279, +37195=>7280, +37276=>7281, +37648=>7282, +37656=>7283, +37786=>7284, +38619=>7285, +39478=>7286, +39949=>7287, +19985=>7288, +30044=>7289, +31069=>7290, +31482=>7291, +31569=>7292, +31689=>7293, +32302=>7294, +33988=>7295, +36441=>7296, +36468=>7297, +36600=>7298, +36880=>7299, +26149=>7300, +26943=>7301, +29763=>7302, +20986=>7303, +26414=>7304, +40668=>7305, +20805=>7306, +24544=>7307, +27798=>7308, +34802=>7309, +34909=>7310, +34935=>7311, +24756=>7312, +33205=>7313, +33795=>7314, +36101=>7315, +21462=>7316, +21561=>7317, +22068=>7318, +23094=>7319, +23601=>7320, +28810=>7321, +32736=>7322, +32858=>7323, +33030=>7324, +33261=>7325, +36259=>7326, +37257=>7327, +39519=>7328, +40434=>7329, +20596=>7330, +20164=>7331, +21408=>7332, +24827=>7333, +28204=>7334, +23652=>7335, +20360=>7336, +20516=>7337, +21988=>7338, +23769=>7339, +24159=>7340, +24677=>7341, +26772=>7342, +27835=>7343, +28100=>7344, +29118=>7345, +30164=>7346, +30196=>7347, +30305=>7348, +31258=>7349, +31305=>7350, +32199=>7351, +32251=>7352, +32622=>7353, +33268=>7354, +34473=>7355, +36636=>7356, +38601=>7357, +39347=>7358, +12242=>7359, +40786=>7359, +21063=>7360, +21189=>7361, +39149=>7362, +35242=>7363, +19971=>7364, +26578=>7365, +28422=>7366, +20405=>7367, +23522=>7368, +26517=>7369, +27784=>7370, +63858=>7370, +28024=>7371, +29723=>7372, +30759=>7373, +37341=>7374, +37756=>7375, +34756=>7376, +31204=>7377, +31281=>7378, +24555=>7379, +20182=>7380, +21668=>7381, +21822=>7382, +22702=>7383, +22949=>7384, +24816=>7385, +25171=>7386, +25302=>7387, +26422=>7388, +26965=>7389, +33333=>7390, +38464=>7391, +39345=>7392, +39389=>7393, +20524=>7394, +21331=>7395, +21828=>7396, +22396=>7397, +25176=>7398, +25826=>7399, +26219=>7400, +26589=>7401, +28609=>7402, +28655=>7403, +29730=>7404, +29752=>7405, +35351=>7406, +37944=>7407, +21585=>7408, +22022=>7409, +22374=>7410, +24392=>7411, +24986=>7412, +27470=>7413, +28760=>7414, +28845=>7415, +32187=>7416, +35477=>7417, +22890=>7418, +33067=>7419, +25506=>7420, +30472=>7421, +32829=>7422, +36010=>7423, +22612=>7424, +25645=>7425, +27067=>7426, +23445=>7427, +24081=>7428, +28271=>7429, +34153=>7430, +20812=>7431, +21488=>7432, +22826=>7433, +24608=>7434, +24907=>7435, +27526=>7436, +27760=>7437, +27888=>7438, +31518=>7439, +32974=>7440, +33492=>7441, +36294=>7442, +37040=>7443, +39089=>7444, +25799=>7445, +28580=>7446, +25745=>7447, +25860=>7448, +20814=>7449, +21520=>7450, +12063=>7451, +22303=>7451, +35342=>7452, +24927=>7453, +26742=>7454, +30171=>7455, +31570=>7456, +32113=>7457, +36890=>7458, +22534=>7459, +27084=>7460, +33151=>7461, +35114=>7462, +36864=>7463, +38969=>7464, +20600=>7465, +22871=>7466, +22956=>7467, +25237=>7468, +36879=>7469, +39722=>7470, +24925=>7471, +29305=>7472, +38358=>7473, +22369=>7474, +23110=>7475, +24052=>7476, +25226=>7477, +25773=>7478, +25850=>7479, +26487=>7480, +27874=>7481, +27966=>7482, +29228=>7483, +29750=>7484, +30772=>7485, +32631=>7486, +33453=>7487, +36315=>7488, +38935=>7489, +21028=>7490, +22338=>7491, +26495=>7492, +29256=>7493, +29923=>7494, +36009=>7495, +36774=>7496, +37393=>7497, +38442=>7498, +12043=>7499, +20843=>7499, +21485=>7500, +25420=>7501, +20329=>7502, +21764=>7503, +24726=>7504, +25943=>7505, +27803=>7506, +28031=>7507, +29260=>7508, +29437=>7509, +31255=>7510, +35207=>7511, +12185=>7512, +35997=>7512, +24429=>7513, +28558=>7514, +28921=>7515, +33192=>7516, +24846=>7517, +20415=>7518, +63845=>7518, +20559=>7519, +25153=>7520, +12122=>7521, +29255=>7521, +31687=>7522, +32232=>7523, +32745=>7524, +36941=>7525, +38829=>7526, +39449=>7527, +36022=>7528, +22378=>7529, +24179=>7530, +26544=>7531, +33805=>7532, +35413=>7533, +21536=>7534, +23318=>7535, +24163=>7536, +24290=>7537, +24330=>7538, +25987=>7539, +32954=>7540, +34109=>7541, +38281=>7542, +38491=>7543, +20296=>7544, +21253=>7545, +21261=>7546, +21263=>7547, +21638=>7548, +21754=>7549, +22275=>7550, +24067=>7551, +24598=>7552, +25243=>7553, +25265=>7554, +25429=>7555, +27873=>7556, +28006=>7557, +30129=>7558, +30770=>7559, +32990=>7560, +33071=>7561, +33502=>7562, +33889=>7563, +33970=>7564, +34957=>7565, +35090=>7566, +36875=>7567, +37610=>7568, +39165=>7569, +39825=>7570, +24133=>7571, +26292=>7572, +64006=>7572, +26333=>7573, +28689=>7574, +29190=>7575, +20469=>7576, +21117=>7577, +24426=>7578, +24915=>7579, +26451=>7580, +27161=>7581, +28418=>7582, +29922=>7583, +31080=>7584, +34920=>7585, +35961=>7586, +39111=>7587, +39108=>7588, +39491=>7589, +21697=>7590, +31263=>7591, +26963=>7592, +35575=>7593, +35914=>7594, +12213=>7595, +39080=>7595, +39342=>7596, +24444=>7597, +25259=>7598, +30130=>7599, +12138=>7600, +30382=>7600, +34987=>7601, +36991=>7602, +38466=>7603, +21305=>7604, +24380=>7605, +24517=>7606, +27852=>7607, +63848=>7607, +29644=>7608, +30050=>7609, +12134=>7610, +30091=>7610, +31558=>7611, +33534=>7612, +39325=>7613, +20047=>7614, +36924=>7615, +19979=>7616, +20309=>7617, +21414=>7618, +22799=>7619, +24264=>7620, +26160=>7621, +27827=>7622, +29781=>7623, +33655=>7624, +34662=>7625, +36032=>7626, +36944=>7627, +38686=>7628, +39957=>7629, +22737=>7630, +23416=>7631, +34384=>7632, +35604=>7633, +40372=>7634, +23506=>7635, +24680=>7636, +24717=>7637, +26097=>7638, +27735=>7639, +28450=>7640, +28579=>7641, +28698=>7642, +32597=>7643, +32752=>7644, +38289=>7645, +38290=>7646, +38480=>7647, +38867=>7648, +21106=>7649, +36676=>7650, +20989=>7651, +21547=>7652, +21688=>7653, +21859=>7654, +21898=>7655, +27323=>7656, +28085=>7657, +32216=>7658, +33382=>7659, +37532=>7660, +38519=>7661, +40569=>7662, +21512=>7663, +21704=>7664, +30418=>7665, +34532=>7666, +38308=>7667, +38356=>7668, +38492=>7669, +20130=>7670, +20233=>7671, +23022=>7672, +23270=>7673, +24055=>7674, +24658=>7675, +25239=>7676, +26477=>7677, +26689=>7678, +27782=>7679, +28207=>7680, +32568=>7681, +32923=>7682, +33322=>7683, +38917=>7684, +20133=>7685, +20565=>7686, +21683=>7687, +22419=>7688, +22874=>7689, +23401=>7690, +23475=>7691, +25032=>7692, +26999=>7693, +28023=>7694, +28707=>7695, +34809=>7696, +35299=>7697, +35442=>7698, +35559=>7699, +36994=>7700, +39405=>7701, +39608=>7702, +21182=>7703, +26680=>7704, +20502=>7705, +24184=>7706, +26447=>7707, +33607=>7708, +12175=>7709, +34892=>7709, +64008=>7709, +20139=>7710, +21521=>7711, +22190=>7712, +29670=>7713, +37141=>7714, +38911=>7715, +39177=>7716, +39255=>7717, +12217=>7718, +39321=>7718, +22099=>7719, +22687=>7720, +34395=>7721, +35377=>7722, +25010=>7723, +27382=>7724, +29563=>7725, +36562=>7726, +27463=>7727, +38570=>7728, +39511=>7729, +22869=>7730, +29184=>7731, +36203=>7732, +12208=>7733, +38761=>7733, +20436=>7734, +23796=>7735, +24358=>7736, +25080=>7737, +26203=>7738, +27883=>7739, +28843=>7740, +12126=>7741, +29572=>7741, +29625=>7742, +29694=>7743, +30505=>7744, +30541=>7745, +32067=>7746, +32098=>7747, +32291=>7748, +33335=>7749, +34898=>7750, +36066=>7751, +37449=>7752, +39023=>7753, +23377=>7754, +12147=>7755, +31348=>7755, +12174=>7756, +34880=>7756, +12212=>7757, +38913=>7757, +23244=>7758, +20448=>7759, +21332=>7760, +22846=>7761, +23805=>7762, +25406=>7763, +28025=>7764, +29433=>7765, +33029=>7766, +33031=>7767, +33698=>7768, +37583=>7769, +38960=>7770, +20136=>7771, +20804=>7772, +21009=>7773, +22411=>7774, +24418=>7775, +27842=>7776, +28366=>7777, +28677=>7778, +28752=>7779, +28847=>7780, +29074=>7781, +29673=>7782, +29801=>7783, +63918=>7783, +33610=>7784, +34722=>7785, +34913=>7786, +36872=>7787, +37026=>7788, +37795=>7789, +39336=>7790, +20846=>7791, +24407=>7792, +24800=>7793, +24935=>7794, +26291=>7795, +34137=>7796, +36426=>7797, +37295=>7798, +38795=>7799, +20046=>7800, +20114=>7801, +21628=>7802, +22741=>7803, +22778=>7804, +22909=>7805, +23733=>7806, +24359=>7807, +12094=>7808, +25142=>7808, +25160=>7809, +26122=>7810, +26215=>7811, +27627=>7812, +28009=>7813, +28111=>7814, +28246=>7815, +28408=>7816, +28564=>7817, +28640=>7818, +28649=>7819, +28765=>7820, +29392=>7821, +29733=>7822, +29786=>7823, +29920=>7824, +30355=>7825, +31068=>7826, +31946=>7827, +32286=>7828, +32993=>7829, +33446=>7830, +33899=>7831, +33983=>7832, +34382=>7833, +34399=>7834, +34676=>7835, +35703=>7836, +35946=>7837, +37804=>7838, +38912=>7839, +39013=>7840, +24785=>7841, +25110=>7842, +37239=>7843, +23130=>7844, +26127=>7845, +28151=>7846, +28222=>7847, +29759=>7848, +39746=>7849, +24573=>7850, +24794=>7851, +31503=>7852, +21700=>7853, +24344=>7854, +27742=>7855, +27859=>7856, +27946=>7857, +28888=>7858, +32005=>7859, +34425=>7860, +35340=>7861, +40251=>7862, +21270=>7863, +21644=>7864, +23301=>7865, +27194=>7866, +12117=>7867, +28779=>7867, +30069=>7868, +31117=>7869, +12146=>7870, +31166=>7870, +33457=>7871, +33775=>7872, +35441=>7873, +35649=>7874, +36008=>7875, +38772=>7876, +25844=>7877, +25899=>7878, +30906=>7879, +30907=>7880, +31339=>7881, +20024=>7882, +21914=>7883, +22864=>7884, +23462=>7885, +24187=>7886, +24739=>7887, +25563=>7888, +27489=>7889, +26213=>7890, +26707=>7891, +28185=>7892, +29029=>7893, +29872=>7894, +32008=>7895, +36996=>7896, +39529=>7897, +39973=>7898, +27963=>7899, +28369=>7900, +63748=>7900, +29502=>7901, +35905=>7902, +38346=>7903, +20976=>7904, +24140=>7905, +24488=>7906, +24653=>7907, +24822=>7908, +24880=>7909, +24908=>7910, +26179=>7911, +26180=>7912, +27045=>7913, +27841=>7914, +28255=>7915, +28361=>7916, +28514=>7917, +29004=>7918, +29852=>7919, +30343=>7920, +31681=>7921, +31783=>7922, +33618=>7923, +34647=>7924, +36945=>7925, +38541=>7926, +12232=>7927, +40643=>7927, +21295=>7928, +22238=>7929, +24315=>7930, +24458=>7931, +24674=>7932, +24724=>7933, +25079=>7934, +26214=>7935, +26371=>7936, +27292=>7937, +28142=>7938, +28590=>7939, +28784=>7940, +29546=>7941, +32362=>7942, +33214=>7943, +33588=>7944, +34516=>7945, +35496=>7946, +36036=>7947, +21123=>7948, +29554=>7949, +23446=>7950, +27243=>7951, +37892=>7952, +21742=>7953, +22150=>7954, +23389=>7955, +25928=>7956, +25989=>7957, +26313=>7958, +26783=>7959, +28045=>7960, +28102=>7961, +12120=>7962, +29243=>7962, +32948=>7963, +37237=>7964, +39501=>7965, +20399=>7966, +20505=>7967, +21402=>7968, +21518=>7969, +21564=>7970, +21897=>7971, +21957=>7972, +24127=>7973, +24460=>7974, +26429=>7975, +29030=>7976, +29661=>7977, +36869=>7978, +21211=>7979, +21235=>7980, +22628=>7981, +22734=>7982, +28932=>7983, +29071=>7984, +29179=>7985, +34224=>7986, +35347=>7987, +26248=>7988, +63941=>7988, +34216=>7989, +21927=>7990, +26244=>7991, +29002=>7992, +33841=>7993, +21321=>7994, +21913=>7995, +27585=>7996, +24409=>7997, +24509=>7998, +25582=>7999, +26249=>8000, +28999=>8001, +35569=>8002, +36637=>8003, +40638=>8004, +20241=>8005, +25658=>8006, +28875=>8007, +30054=>8008, +34407=>8009, +24676=>8010, +35662=>8011, +40440=>8012, +20807=>8013, +20982=>8014, +21256=>8015, +27958=>8016, +33016=>8017, +12234=>8018, +40657=>8018, +26133=>8019, +27427=>8020, +28824=>8021, +30165=>8022, +21507=>8023, +23673=>8024, +32007=>8025, +35350=>8026, +12107=>8027, +27424=>8027, +27453=>8028, +27462=>8029, +21560=>8030, +24688=>8031, +27965=>8032, +32725=>8033, +33288=>8034, +20694=>8035, +20958=>8036, +21916=>8037, +22123=>8038, +22221=>8039, +23020=>8040, +23305=>8041, +24076=>8042, +24985=>8043, +24984=>8044, +25137=>8045, +26206=>8046, +26342=>8047, +29081=>8048, +29113=>8049, +29114=>8050, +29351=>8051, +31143=>8052, +31232=>8053, +32690=>8054, +35440=>8055, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +12310=>8219, +12311=>8220, +12312=>8221, +12313=>8222, +8223=>8237, +8219=>8238, +8314=>8239, +8315=>8240, +8316=>8248, +8317=>8250, +8318=>8251, +700=>8275, +8942=>8320, +8759=>8321, +10122=>8342, +10123=>8343, +10124=>8344, +10125=>8345, +10126=>8346, +10127=>8347, +10128=>8348, +10129=>8349, +10130=>8350, +10131=>8351, +9398=>8388, +9399=>8389, +9400=>8390, +9401=>8391, +9402=>8392, +9403=>8393, +9404=>8394, +9405=>8395, +9406=>8396, +9407=>8397, +9408=>8398, +9409=>8399, +9410=>8400, +9411=>8401, +9412=>8402, +9413=>8403, +9414=>8404, +9415=>8405, +9416=>8406, +9417=>8407, +9418=>8408, +9419=>8409, +9420=>8410, +9421=>8411, +9422=>8412, +9423=>8413, +8826=>8475, +8827=>8476, +8910=>8477, +8911=>8478, +8832=>8479, +8833=>8480, +8816=>8481, +8817=>8482, +8818=>8483, +8819=>8484, +8842=>8486, +8843=>8488, +8822=>8489, +8823=>8490, +8825=>8491, +8922=>8492, +8923=>8493, +8773=>8499, +8771=>8500, +8776=>8501, +8868=>8503, +8244=>8582, +9839=>8594, +8258=>8599, +10045=>8604, +8226=>8607, +8249=>8612, +8250=>8613, +10010=>8630, +10006=>8631, +9711=>8633, +10070=>8637, +9676=>8639, +9775=>8664, +12320=>8671, +10102=>8673, +10103=>8674, +10104=>8675, +10105=>8676, +10106=>8677, +10107=>8678, +10108=>8679, +10109=>8680, +10110=>8681, +10111=>8682, +12306=>8700, +12342=>8701, +8710=>8715, +8735=>8717, +8741=>8719, +8742=>8720, +8787=>8722, +8785=>8723, +8806=>8724, +8807=>8725, +8723=>8726, +8853=>8727, +8854=>8728, +8855=>8729, +8980=>8731, +8802=>8734, +9649=>8736, +8738=>8738, +8784=>8739, +8867=>8742, +8814=>8745, +8815=>8746, +8837=>8747, +8836=>8748, +8713=>8749, +8716=>8750, +8891=>8751, +8892=>8752, +8794=>8753, +8966=>8754, +12958=>8761, +8252=>8763, +9702=>8775, +9663=>8779, +9653=>8780, +9657=>8781, +9667=>8782, +9674=>8787, +12849=>8788, +12857=>8789, +13259=>8790, +9327=>8791, +9328=>8792, +9329=>8793, +9330=>8794, +9331=>8795, +8656=>8814, +8655=>8815, +8653=>8816, +8657=>8854, +8659=>8855, +8626=>8864, +8625=>8865, +8628=>8867, +8624=>8868, +8627=>8869, +8636=>8884, +8640=>8885, +8644=>8896, +8645=>8897, +9347=>9042, +9348=>9043, +9349=>9044, +9350=>9045, +9351=>9046, +12948=>9080, +12965=>9096, +8672=>9190, +8674=>9191, +8673=>9192, +8675=>9193, +8678=>9198, +8680=>9199, +8679=>9200, +8681=>9201, +9757=>9222, +9759=>9223, +12944=>9300, +12938=>9301, +12939=>9302, +12940=>9303, +12941=>9304, +12942=>9305, +12943=>9306, +12318=>9322, +12319=>9323, +8246=>9324, +8245=>9326, +12540=>9330, +44034=>9333, +44035=>9334, +44037=>9335, +44038=>9336, +44043=>9337, +44044=>9338, +44045=>9339, +44046=>9340, +44047=>9341, +44056=>9342, +44062=>9343, +44063=>9344, +44065=>9345, +44066=>9346, +44067=>9347, +44069=>9348, +44070=>9349, +44071=>9350, +44072=>9351, +44073=>9352, +44074=>9353, +44075=>9354, +44078=>9355, +44082=>9356, +44083=>9357, +44084=>9358, +44085=>9359, +44086=>9360, +44087=>9361, +44090=>9362, +44091=>9363, +44093=>9364, +44094=>9365, +44095=>9366, +44097=>9367, +44098=>9368, +44099=>9369, +44100=>9370, +44101=>9371, +44102=>9372, +44103=>9373, +44104=>9374, +44105=>9375, +44106=>9376, +44108=>9377, +44110=>9378, +44111=>9379, +44112=>9380, +44113=>9381, +44114=>9382, +44115=>9383, +44117=>9384, +44118=>9385, +44119=>9386, +44121=>9387, +44122=>9388, +44123=>9389, +44125=>9390, +44126=>9391, +44127=>9392, +44128=>9393, +44129=>9394, +44130=>9395, +44131=>9396, +44132=>9397, +44133=>9398, +44134=>9399, +44135=>9400, +44136=>9401, +44137=>9402, +44138=>9403, +44139=>9404, +44140=>9405, +44141=>9406, +44142=>9407, +44143=>9408, +44146=>9409, +44147=>9410, +44149=>9411, +44150=>9412, +44153=>9413, +44155=>9414, +44156=>9415, +44157=>9416, +44158=>9417, +44159=>9418, +44162=>9419, +44167=>9420, +44168=>9421, +44173=>9422, +44174=>9423, +44175=>9424, +44177=>9425, +44178=>9426, +44179=>9427, +44181=>9428, +44182=>9429, +44183=>9430, +44184=>9431, +44185=>9432, +44186=>9433, +44187=>9434, +44190=>9435, +44194=>9436, +44195=>9437, +44196=>9438, +44197=>9439, +44198=>9440, +44199=>9441, +44203=>9442, +44205=>9443, +44206=>9444, +44209=>9445, +44210=>9446, +44211=>9447, +44212=>9448, +44213=>9449, +44214=>9450, +44215=>9451, +44218=>9452, +44222=>9453, +44223=>9454, +44224=>9455, +44226=>9456, +44227=>9457, +44229=>9458, +44230=>9459, +44231=>9460, +44233=>9461, +44234=>9462, +44235=>9463, +44237=>9464, +44238=>9465, +44239=>9466, +44240=>9467, +44241=>9468, +44242=>9469, +44243=>9470, +44244=>9471, +44246=>9472, +44248=>9473, +44249=>9474, +44250=>9475, +44251=>9476, +44252=>9477, +44253=>9478, +44254=>9479, +44255=>9480, +44258=>9481, +44259=>9482, +44261=>9483, +44262=>9484, +44265=>9485, +44267=>9486, +44269=>9487, +44270=>9488, +44274=>9489, +44276=>9490, +44279=>9491, +44280=>9492, +44281=>9493, +44282=>9494, +44283=>9495, +44286=>9496, +44287=>9497, +44289=>9498, +44290=>9499, +44291=>9500, +44293=>9501, +44295=>9502, +44296=>9503, +44297=>9504, +44298=>9505, +44299=>9506, +44302=>9507, +44304=>9508, +44306=>9509, +44307=>9510, +44308=>9511, +44309=>9512, +44310=>9513, +44311=>9514, +44313=>9515, +44314=>9516, +44315=>9517, +44317=>9518, +44318=>9519, +44319=>9520, +44321=>9521, +44322=>9522, +44323=>9523, +44324=>9524, +44325=>9525, +44326=>9526, +44327=>9527, +44328=>9528, +44330=>9529, +44331=>9530, +44334=>9531, +44335=>9532, +44336=>9533, +44337=>9534, +44338=>9535, +44339=>9536, +44342=>9537, +44343=>9538, +44345=>9539, +44346=>9540, +44347=>9541, +44349=>9542, +44350=>9543, +44351=>9544, +44352=>9545, +44353=>9546, +44354=>9547, +44355=>9548, +44358=>9549, +44360=>9550, +44362=>9551, +44363=>9552, +44364=>9553, +44365=>9554, +44366=>9555, +44367=>9556, +44369=>9557, +44370=>9558, +44371=>9559, +44373=>9560, +44374=>9561, +44375=>9562, +44377=>9563, +44378=>9564, +44379=>9565, +44380=>9566, +44381=>9567, +44382=>9568, +44383=>9569, +44384=>9570, +44386=>9571, +44388=>9572, +44389=>9573, +44390=>9574, +44391=>9575, +44392=>9576, +44393=>9577, +44394=>9578, +44395=>9579, +44398=>9580, +44399=>9581, +44401=>9582, +44402=>9583, +44407=>9584, +44408=>9585, +44409=>9586, +44410=>9587, +44414=>9588, +44416=>9589, +44419=>9590, +44420=>9591, +44421=>9592, +44422=>9593, +44423=>9594, +44426=>9595, +44427=>9596, +44429=>9597, +44430=>9598, +44431=>9599, +44433=>9600, +44434=>9601, +44435=>9602, +44436=>9603, +44437=>9604, +44438=>9605, +44439=>9606, +44440=>9607, +44441=>9608, +44442=>9609, +44443=>9610, +44446=>9611, +44447=>9612, +44448=>9613, +44449=>9614, +44450=>9615, +44451=>9616, +44453=>9617, +44454=>9618, +44455=>9619, +44456=>9620, +44457=>9621, +44458=>9622, +44459=>9623, +44460=>9624, +44461=>9625, +44462=>9626, +44463=>9627, +44464=>9628, +44465=>9629, +44466=>9630, +44467=>9631, +44468=>9632, +44469=>9633, +44470=>9634, +44472=>9635, +44473=>9636, +44474=>9637, +44475=>9638, +44476=>9639, +44477=>9640, +44478=>9641, +44479=>9642, +44482=>9643, +44483=>9644, +44485=>9645, +44486=>9646, +44487=>9647, +44489=>9648, +44490=>9649, +44491=>9650, +44492=>9651, +44493=>9652, +44494=>9653, +44495=>9654, +44498=>9655, +44500=>9656, +44501=>9657, +44502=>9658, +44503=>9659, +44504=>9660, +44505=>9661, +44506=>9662, +44507=>9663, +44509=>9664, +44510=>9665, +44511=>9666, +44513=>9667, +44514=>9668, +44515=>9669, +44517=>9670, +44518=>9671, +44519=>9672, +44520=>9673, +44521=>9674, +44522=>9675, +44523=>9676, +44524=>9677, +44525=>9678, +44526=>9679, +44527=>9680, +44528=>9681, +44529=>9682, +44530=>9683, +44531=>9684, +44532=>9685, +44533=>9686, +44534=>9687, +44535=>9688, +44538=>9689, +44539=>9690, +44541=>9691, +44542=>9692, +44546=>9693, +44547=>9694, +44548=>9695, +44549=>9696, +44550=>9697, +44551=>9698, +44554=>9699, +44556=>9700, +44558=>9701, +44559=>9702, +44560=>9703, +44561=>9704, +44562=>9705, +44563=>9706, +44565=>9707, +44566=>9708, +44567=>9709, +44568=>9710, +44569=>9711, +44570=>9712, +44571=>9713, +44572=>9714, +44573=>9715, +44574=>9716, +44575=>9717, +44576=>9718, +44577=>9719, +44578=>9720, +44579=>9721, +44580=>9722, +44581=>9723, +44582=>9724, +44583=>9725, +44584=>9726, +44585=>9727, +44586=>9728, +44587=>9729, +44588=>9730, +44589=>9731, +44590=>9732, +44591=>9733, +44594=>9734, +44595=>9735, +44597=>9736, +44598=>9737, +44601=>9738, +44603=>9739, +44604=>9740, +44605=>9741, +44606=>9742, +44607=>9743, +44610=>9744, +44612=>9745, +44615=>9746, +44616=>9747, +44617=>9748, +44619=>9749, +44623=>9750, +44625=>9751, +44626=>9752, +44627=>9753, +44629=>9754, +44631=>9755, +44632=>9756, +44633=>9757, +44634=>9758, +44635=>9759, +44638=>9760, +44642=>9761, +44643=>9762, +44644=>9763, +44646=>9764, +44647=>9765, +44650=>9766, +44651=>9767, +44653=>9768, +44654=>9769, +44655=>9770, +44657=>9771, +44658=>9772, +44659=>9773, +44660=>9774, +44661=>9775, +44662=>9776, +44663=>9777, +44666=>9778, +44670=>9779, +44671=>9780, +44672=>9781, +44673=>9782, +44674=>9783, +44675=>9784, +44678=>9785, +44679=>9786, +44680=>9787, +44681=>9788, +44682=>9789, +44683=>9790, +44685=>9791, +44686=>9792, +44687=>9793, +44688=>9794, +44689=>9795, +44690=>9796, +44691=>9797, +44692=>9798, +44693=>9799, +44694=>9800, +44695=>9801, +44696=>9802, +44697=>9803, +44698=>9804, +44699=>9805, +44700=>9806, +44701=>9807, +44702=>9808, +44703=>9809, +44704=>9810, +44705=>9811, +44706=>9812, +44707=>9813, +44708=>9814, +44709=>9815, +44710=>9816, +44711=>9817, +44712=>9818, +44713=>9819, +44714=>9820, +44715=>9821, +44716=>9822, +44717=>9823, +44718=>9824, +44719=>9825, +44720=>9826, +44721=>9827, +44722=>9828, +44723=>9829, +44724=>9830, +44725=>9831, +44726=>9832, +44727=>9833, +44728=>9834, +44729=>9835, +44730=>9836, +44731=>9837, +44735=>9838, +44737=>9839, +44738=>9840, +44739=>9841, +44741=>9842, +44742=>9843, +44743=>9844, +44744=>9845, +44745=>9846, +44746=>9847, +44747=>9848, +44750=>9849, +44754=>9850, +44755=>9851, +44756=>9852, +44757=>9853, +44758=>9854, +44759=>9855, +44762=>9856, +44763=>9857, +44765=>9858, +44766=>9859, +44767=>9860, +44768=>9861, +44769=>9862, +44770=>9863, +44771=>9864, +44772=>9865, +44773=>9866, +44774=>9867, +44775=>9868, +44777=>9869, +44778=>9870, +44780=>9871, +44782=>9872, +44783=>9873, +44784=>9874, +44785=>9875, +44786=>9876, +44787=>9877, +44789=>9878, +44790=>9879, +44791=>9880, +44793=>9881, +44794=>9882, +44795=>9883, +44797=>9884, +44798=>9885, +44799=>9886, +44800=>9887, +44801=>9888, +44802=>9889, +44803=>9890, +44804=>9891, +44805=>9892, +44806=>9893, +44809=>9894, +44810=>9895, +44811=>9896, +44812=>9897, +44814=>9898, +44815=>9899, +44817=>9900, +44818=>9901, +44819=>9902, +44820=>9903, +44821=>9904, +44822=>9905, +44823=>9906, +44824=>9907, +44825=>9908, +44826=>9909, +44827=>9910, +44828=>9911, +44829=>9912, +44830=>9913, +44831=>9914, +44832=>9915, +44833=>9916, +44834=>9917, +44835=>9918, +44836=>9919, +44837=>9920, +44838=>9921, +44839=>9922, +44840=>9923, +44841=>9924, +44842=>9925, +44843=>9926, +44846=>9927, +44847=>9928, +44849=>9929, +44851=>9930, +44853=>9931, +44854=>9932, +44855=>9933, +44856=>9934, +44857=>9935, +44858=>9936, +44859=>9937, +44862=>9938, +44864=>9939, +44868=>9940, +44869=>9941, +44870=>9942, +44871=>9943, +44874=>9944, +44875=>9945, +44876=>9946, +44877=>9947, +44878=>9948, +44879=>9949, +44881=>9950, +44882=>9951, +44883=>9952, +44884=>9953, +44885=>9954, +44886=>9955, +44887=>9956, +44888=>9957, +44889=>9958, +44890=>9959, +44891=>9960, +44894=>9961, +44895=>9962, +44896=>9963, +44897=>9964, +44898=>9965, +44899=>9966, +44902=>9967, +44903=>9968, +44904=>9969, +44905=>9970, +44906=>9971, +44907=>9972, +44908=>9973, +44909=>9974, +44910=>9975, +44911=>9976, +44912=>9977, +44913=>9978, +44914=>9979, +44915=>9980, +44916=>9981, +44917=>9982, +44918=>9983, +44919=>9984, +44920=>9985, +44922=>9986, +44923=>9987, +44924=>9988, +44925=>9989, +44926=>9990, +44927=>9991, +44929=>9992, +44930=>9993, +44931=>9994, +44933=>9995, +44934=>9996, +44935=>9997, +44937=>9998, +44938=>9999, +44939=>10000, +44940=>10001, +44941=>10002, +44942=>10003, +44943=>10004, +44946=>10005, +44947=>10006, +44948=>10007, +44950=>10008, +44951=>10009, +44952=>10010, +44953=>10011, +44954=>10012, +44955=>10013, +44957=>10014, +44958=>10015, +44959=>10016, +44960=>10017, +44961=>10018, +44962=>10019, +44963=>10020, +44964=>10021, +44965=>10022, +44966=>10023, +44967=>10024, +44968=>10025, +44969=>10026, +44970=>10027, +44971=>10028, +44972=>10029, +44973=>10030, +44974=>10031, +44975=>10032, +44976=>10033, +44977=>10034, +44978=>10035, +44979=>10036, +44980=>10037, +44981=>10038, +44982=>10039, +44983=>10040, +44986=>10041, +44987=>10042, +44989=>10043, +44990=>10044, +44991=>10045, +44993=>10046, +44994=>10047, +44995=>10048, +44996=>10049, +44997=>10050, +44998=>10051, +45002=>10052, +45004=>10053, +45007=>10054, +45008=>10055, +45009=>10056, +45010=>10057, +45011=>10058, +45013=>10059, +45014=>10060, +45015=>10061, +45016=>10062, +45017=>10063, +45018=>10064, +45019=>10065, +45021=>10066, +45022=>10067, +45023=>10068, +45024=>10069, +45025=>10070, +45026=>10071, +45027=>10072, +45028=>10073, +45029=>10074, +45030=>10075, +45031=>10076, +45034=>10077, +45035=>10078, +45036=>10079, +45037=>10080, +45038=>10081, +45039=>10082, +45042=>10083, +45043=>10084, +45045=>10085, +45046=>10086, +45047=>10087, +45049=>10088, +45050=>10089, +45051=>10090, +45052=>10091, +45053=>10092, +45054=>10093, +45055=>10094, +45058=>10095, +45059=>10096, +45061=>10097, +45062=>10098, +45063=>10099, +45064=>10100, +45065=>10101, +45066=>10102, +45067=>10103, +45069=>10104, +45070=>10105, +45071=>10106, +45073=>10107, +45074=>10108, +45075=>10109, +45077=>10110, +45078=>10111, +45079=>10112, +45080=>10113, +45081=>10114, +45082=>10115, +45083=>10116, +45086=>10117, +45087=>10118, +45088=>10119, +45089=>10120, +45090=>10121, +45091=>10122, +45092=>10123, +45093=>10124, +45094=>10125, +45095=>10126, +45097=>10127, +45098=>10128, +45099=>10129, +45100=>10130, +45101=>10131, +45102=>10132, +45103=>10133, +45104=>10134, +45105=>10135, +45106=>10136, +45107=>10137, +45108=>10138, +45109=>10139, +45110=>10140, +45111=>10141, +45112=>10142, +45113=>10143, +45114=>10144, +45115=>10145, +45116=>10146, +45117=>10147, +45118=>10148, +45119=>10149, +45120=>10150, +45121=>10151, +45122=>10152, +45123=>10153, +45126=>10154, +45127=>10155, +45129=>10156, +45131=>10157, +45133=>10158, +45135=>10159, +45136=>10160, +45137=>10161, +45138=>10162, +45142=>10163, +45144=>10164, +45146=>10165, +45147=>10166, +45148=>10167, +45150=>10168, +45151=>10169, +45152=>10170, +45153=>10171, +45154=>10172, +45155=>10173, +45156=>10174, +45157=>10175, +45158=>10176, +45159=>10177, +45160=>10178, +45161=>10179, +45162=>10180, +45163=>10181, +45164=>10182, +45165=>10183, +45166=>10184, +45167=>10185, +45168=>10186, +45169=>10187, +45170=>10188, +45171=>10189, +45172=>10190, +45173=>10191, +45174=>10192, +45175=>10193, +45176=>10194, +45177=>10195, +45178=>10196, +45179=>10197, +45182=>10198, +45183=>10199, +45185=>10200, +45186=>10201, +45187=>10202, +45189=>10203, +45190=>10204, +45191=>10205, +45192=>10206, +45193=>10207, +45194=>10208, +45195=>10209, +45198=>10210, +45200=>10211, +45202=>10212, +45203=>10213, +45204=>10214, +45205=>10215, +45206=>10216, +45207=>10217, +45211=>10218, +45213=>10219, +45214=>10220, +45219=>10221, +45220=>10222, +45221=>10223, +45222=>10224, +45223=>10225, +45226=>10226, +45232=>10227, +45234=>10228, +45238=>10229, +45239=>10230, +45241=>10231, +45242=>10232, +45243=>10233, +45245=>10234, +45246=>10235, +45247=>10236, +45248=>10237, +45249=>10238, +45250=>10239, +45251=>10240, +45254=>10241, +45258=>10242, +45259=>10243, +45260=>10244, +45261=>10245, +45262=>10246, +45263=>10247, +45266=>10248, +45267=>10249, +45269=>10250, +45270=>10251, +45271=>10252, +45273=>10253, +45274=>10254, +45275=>10255, +45276=>10256, +45277=>10257, +45278=>10258, +45279=>10259, +45281=>10260, +45282=>10261, +45283=>10262, +45284=>10263, +45286=>10264, +45287=>10265, +45288=>10266, +45289=>10267, +45290=>10268, +45291=>10269, +45292=>10270, +45293=>10271, +45294=>10272, +45295=>10273, +45296=>10274, +45297=>10275, +45298=>10276, +45299=>10277, +45300=>10278, +45301=>10279, +45302=>10280, +45303=>10281, +45304=>10282, +45305=>10283, +45306=>10284, +45307=>10285, +45308=>10286, +45309=>10287, +45310=>10288, +45311=>10289, +45312=>10290, +45313=>10291, +45314=>10292, +45315=>10293, +45316=>10294, +45317=>10295, +45318=>10296, +45319=>10297, +45322=>10298, +45325=>10299, +45326=>10300, +45327=>10301, +45329=>10302, +45332=>10303, +45333=>10304, +45334=>10305, +45335=>10306, +45338=>10307, +45342=>10308, +45343=>10309, +45344=>10310, +45345=>10311, +45346=>10312, +45350=>10313, +45351=>10314, +45353=>10315, +45354=>10316, +45355=>10317, +45357=>10318, +45358=>10319, +45359=>10320, +45360=>10321, +45361=>10322, +45362=>10323, +45363=>10324, +45366=>10325, +45370=>10326, +45371=>10327, +45372=>10328, +45373=>10329, +45374=>10330, +45375=>10331, +45378=>10332, +45379=>10333, +45381=>10334, +45382=>10335, +45383=>10336, +45385=>10337, +45386=>10338, +45387=>10339, +45388=>10340, +45389=>10341, +45390=>10342, +45391=>10343, +45394=>10344, +45395=>10345, +45398=>10346, +45399=>10347, +45401=>10348, +45402=>10349, +45403=>10350, +45405=>10351, +45406=>10352, +45407=>10353, +45409=>10354, +45410=>10355, +45411=>10356, +45412=>10357, +45413=>10358, +45414=>10359, +45415=>10360, +45416=>10361, +45417=>10362, +45418=>10363, +45419=>10364, +45420=>10365, +45421=>10366, +45422=>10367, +45423=>10368, +45424=>10369, +45425=>10370, +45426=>10371, +45427=>10372, +45428=>10373, +45429=>10374, +45430=>10375, +45431=>10376, +45434=>10377, +45435=>10378, +45437=>10379, +45438=>10380, +45439=>10381, +45441=>10382, +45443=>10383, +45444=>10384, +45445=>10385, +45446=>10386, +45447=>10387, +45450=>10388, +45452=>10389, +45454=>10390, +45455=>10391, +45456=>10392, +45457=>10393, +45461=>10394, +45462=>10395, +45463=>10396, +45465=>10397, +45466=>10398, +45467=>10399, +45469=>10400, +45470=>10401, +45471=>10402, +45472=>10403, +45473=>10404, +45474=>10405, +45475=>10406, +45476=>10407, +45477=>10408, +45478=>10409, +45479=>10410, +45481=>10411, +45482=>10412, +45483=>10413, +45484=>10414, +45485=>10415, +45486=>10416, +45487=>10417, +45488=>10418, +45489=>10419, +45490=>10420, +45491=>10421, +45492=>10422, +45493=>10423, +45494=>10424, +45495=>10425, +45496=>10426, +45497=>10427, +45498=>10428, +45499=>10429, +45500=>10430, +45501=>10431, +45502=>10432, +45503=>10433, +45504=>10434, +45505=>10435, +45506=>10436, +45507=>10437, +45508=>10438, +45509=>10439, +45510=>10440, +45511=>10441, +45512=>10442, +45513=>10443, +45514=>10444, +45515=>10445, +45517=>10446, +45518=>10447, +45519=>10448, +45521=>10449, +45522=>10450, +45523=>10451, +45525=>10452, +45526=>10453, +45527=>10454, +45528=>10455, +45529=>10456, +45530=>10457, +45531=>10458, +45534=>10459, +45536=>10460, +45537=>10461, +45538=>10462, +45539=>10463, +45540=>10464, +45541=>10465, +45542=>10466, +45543=>10467, +45546=>10468, +45547=>10469, +45549=>10470, +45550=>10471, +45551=>10472, +45553=>10473, +45554=>10474, +45555=>10475, +45556=>10476, +45557=>10477, +45558=>10478, +45559=>10479, +45560=>10480, +45562=>10481, +45564=>10482, +45566=>10483, +45567=>10484, +45568=>10485, +45569=>10486, +45570=>10487, +45571=>10488, +45574=>10489, +45575=>10490, +45577=>10491, +45578=>10492, +45581=>10493, +45582=>10494, +45583=>10495, +45584=>10496, +45585=>10497, +45586=>10498, +45587=>10499, +45590=>10500, +45592=>10501, +45594=>10502, +45595=>10503, +45596=>10504, +45597=>10505, +45598=>10506, +45599=>10507, +45601=>10508, +45602=>10509, +45603=>10510, +45604=>10511, +45605=>10512, +45606=>10513, +45607=>10514, +45608=>10515, +45609=>10516, +45610=>10517, +45611=>10518, +45612=>10519, +45613=>10520, +45614=>10521, +45615=>10522, +45616=>10523, +45617=>10524, +45618=>10525, +45619=>10526, +45621=>10527, +45622=>10528, +45623=>10529, +45624=>10530, +45625=>10531, +45626=>10532, +45627=>10533, +45629=>10534, +45630=>10535, +45631=>10536, +45632=>10537, +45633=>10538, +45634=>10539, +45635=>10540, +45636=>10541, +45637=>10542, +45638=>10543, +45639=>10544, +45640=>10545, +45641=>10546, +45642=>10547, +45643=>10548, +45644=>10549, +45645=>10550, +45646=>10551, +45647=>10552, +45648=>10553, +45649=>10554, +45650=>10555, +45651=>10556, +45652=>10557, +45653=>10558, +45654=>10559, +45655=>10560, +45657=>10561, +45658=>10562, +45659=>10563, +45661=>10564, +45662=>10565, +45663=>10566, +45665=>10567, +45666=>10568, +45667=>10569, +45668=>10570, +45669=>10571, +45670=>10572, +45671=>10573, +45674=>10574, +45675=>10575, +45676=>10576, +45677=>10577, +45678=>10578, +45679=>10579, +45680=>10580, +45681=>10581, +45682=>10582, +45683=>10583, +45686=>10584, +45687=>10585, +45688=>10586, +45689=>10587, +45690=>10588, +45691=>10589, +45693=>10590, +45694=>10591, +45695=>10592, +45696=>10593, +45697=>10594, +45698=>10595, +45699=>10596, +45702=>10597, +45703=>10598, +45704=>10599, +45706=>10600, +45707=>10601, +45708=>10602, +45709=>10603, +45710=>10604, +45711=>10605, +45714=>10606, +45715=>10607, +45717=>10608, +45718=>10609, +45719=>10610, +45723=>10611, +45724=>10612, +45725=>10613, +45726=>10614, +45727=>10615, +45730=>10616, +45732=>10617, +45735=>10618, +45736=>10619, +45737=>10620, +45739=>10621, +45741=>10622, +45742=>10623, +45743=>10624, +45745=>10625, +45746=>10626, +45747=>10627, +45749=>10628, +45750=>10629, +45751=>10630, +45752=>10631, +45753=>10632, +45754=>10633, +45755=>10634, +45756=>10635, +45757=>10636, +45758=>10637, +45759=>10638, +45760=>10639, +45761=>10640, +45762=>10641, +45763=>10642, +45764=>10643, +45765=>10644, +45766=>10645, +45767=>10646, +45770=>10647, +45771=>10648, +45773=>10649, +45774=>10650, +45775=>10651, +45777=>10652, +45779=>10653, +45780=>10654, +45781=>10655, +45782=>10656, +45783=>10657, +45786=>10658, +45788=>10659, +45790=>10660, +45791=>10661, +45792=>10662, +45793=>10663, +45795=>10664, +45799=>10665, +45801=>10666, +45802=>10667, +45808=>10668, +45809=>10669, +45810=>10670, +45814=>10671, +45820=>10672, +45821=>10673, +45822=>10674, +45826=>10675, +45827=>10676, +45829=>10677, +45830=>10678, +45831=>10679, +45833=>10680, +45834=>10681, +45835=>10682, +45836=>10683, +45837=>10684, +45838=>10685, +45839=>10686, +45842=>10687, +45846=>10688, +45847=>10689, +45848=>10690, +45849=>10691, +45850=>10692, +45851=>10693, +45853=>10694, +45854=>10695, +45855=>10696, +45856=>10697, +45857=>10698, +45858=>10699, +45859=>10700, +45860=>10701, +45861=>10702, +45862=>10703, +45863=>10704, +45864=>10705, +45865=>10706, +45866=>10707, +45867=>10708, +45868=>10709, +45869=>10710, +45870=>10711, +45871=>10712, +45872=>10713, +45873=>10714, +45874=>10715, +45875=>10716, +45876=>10717, +45877=>10718, +45878=>10719, +45879=>10720, +45880=>10721, +45881=>10722, +45882=>10723, +45883=>10724, +45884=>10725, +45885=>10726, +45886=>10727, +45887=>10728, +45888=>10729, +45889=>10730, +45890=>10731, +45891=>10732, +45892=>10733, +45893=>10734, +45894=>10735, +45895=>10736, +45896=>10737, +45897=>10738, +45898=>10739, +45899=>10740, +45900=>10741, +45901=>10742, +45902=>10743, +45903=>10744, +45904=>10745, +45905=>10746, +45906=>10747, +45907=>10748, +45911=>10749, +45913=>10750, +45914=>10751, +45917=>10752, +45920=>10753, +45921=>10754, +45922=>10755, +45923=>10756, +45926=>10757, +45928=>10758, +45930=>10759, +45932=>10760, +45933=>10761, +45935=>10762, +45938=>10763, +45939=>10764, +45941=>10765, +45942=>10766, +45943=>10767, +45945=>10768, +45946=>10769, +45947=>10770, +45948=>10771, +45949=>10772, +45950=>10773, +45951=>10774, +45954=>10775, +45958=>10776, +45959=>10777, +45960=>10778, +45961=>10779, +45962=>10780, +45963=>10781, +45965=>10782, +45966=>10783, +45967=>10784, +45969=>10785, +45970=>10786, +45971=>10787, +45973=>10788, +45974=>10789, +45975=>10790, +45976=>10791, +45977=>10792, +45978=>10793, +45979=>10794, +45980=>10795, +45981=>10796, +45982=>10797, +45983=>10798, +45986=>10799, +45987=>10800, +45988=>10801, +45989=>10802, +45990=>10803, +45991=>10804, +45993=>10805, +45994=>10806, +45995=>10807, +45997=>10808, +45998=>10809, +45999=>10810, +46000=>10811, +46001=>10812, +46002=>10813, +46003=>10814, +46004=>10815, +46005=>10816, +46006=>10817, +46007=>10818, +46008=>10819, +46009=>10820, +46010=>10821, +46011=>10822, +46012=>10823, +46013=>10824, +46014=>10825, +46015=>10826, +46016=>10827, +46017=>10828, +46018=>10829, +46019=>10830, +46022=>10831, +46023=>10832, +46025=>10833, +46026=>10834, +46029=>10835, +46031=>10836, +46033=>10837, +46034=>10838, +46035=>10839, +46038=>10840, +46040=>10841, +46042=>10842, +46044=>10843, +46046=>10844, +46047=>10845, +46049=>10846, +46050=>10847, +46051=>10848, +46053=>10849, +46054=>10850, +46055=>10851, +46057=>10852, +46058=>10853, +46059=>10854, +46060=>10855, +46061=>10856, +46062=>10857, +46063=>10858, +46064=>10859, +46065=>10860, +46066=>10861, +46067=>10862, +46068=>10863, +46069=>10864, +46070=>10865, +46071=>10866, +46072=>10867, +46073=>10868, +46074=>10869, +46075=>10870, +46077=>10871, +46078=>10872, +46079=>10873, +46080=>10874, +46081=>10875, +46082=>10876, +46083=>10877, +46084=>10878, +46085=>10879, +46086=>10880, +46087=>10881, +46088=>10882, +46089=>10883, +46090=>10884, +46091=>10885, +46092=>10886, +46093=>10887, +46094=>10888, +46095=>10889, +46097=>10890, +46098=>10891, +46099=>10892, +46100=>10893, +46101=>10894, +46102=>10895, +46103=>10896, +46105=>10897, +46106=>10898, +46107=>10899, +46109=>10900, +46110=>10901, +46111=>10902, +46113=>10903, +46114=>10904, +46115=>10905, +46116=>10906, +46117=>10907, +46118=>10908, +46119=>10909, +46122=>10910, +46124=>10911, +46125=>10912, +46126=>10913, +46127=>10914, +46128=>10915, +46129=>10916, +46130=>10917, +46131=>10918, +46133=>10919, +46134=>10920, +46135=>10921, +46136=>10922, +46137=>10923, +46138=>10924, +46139=>10925, +46140=>10926, +46141=>10927, +46142=>10928, +46143=>10929, +46144=>10930, +46145=>10931, +46146=>10932, +46147=>10933, +46148=>10934, +46149=>10935, +46150=>10936, +46151=>10937, +46152=>10938, +46153=>10939, +46154=>10940, +46155=>10941, +46156=>10942, +46157=>10943, +46158=>10944, +46159=>10945, +46162=>10946, +46163=>10947, +46165=>10948, +46166=>10949, +46167=>10950, +46169=>10951, +46170=>10952, +46171=>10953, +46172=>10954, +46173=>10955, +46174=>10956, +46175=>10957, +46178=>10958, +46180=>10959, +46182=>10960, +46183=>10961, +46184=>10962, +46185=>10963, +46186=>10964, +46187=>10965, +46189=>10966, +46190=>10967, +46191=>10968, +46192=>10969, +46193=>10970, +46194=>10971, +46195=>10972, +46196=>10973, +46197=>10974, +46198=>10975, +46199=>10976, +46200=>10977, +46201=>10978, +46202=>10979, +46203=>10980, +46204=>10981, +46205=>10982, +46206=>10983, +46207=>10984, +46209=>10985, +46210=>10986, +46211=>10987, +46212=>10988, +46213=>10989, +46214=>10990, +46215=>10991, +46217=>10992, +46218=>10993, +46219=>10994, +46220=>10995, +46221=>10996, +46222=>10997, +46223=>10998, +46224=>10999, +46225=>11000, +46226=>11001, +46227=>11002, +46228=>11003, +46229=>11004, +46230=>11005, +46231=>11006, +46232=>11007, +46233=>11008, +46234=>11009, +46235=>11010, +46236=>11011, +46238=>11012, +46239=>11013, +46240=>11014, +46241=>11015, +46242=>11016, +46243=>11017, +46245=>11018, +46246=>11019, +46247=>11020, +46249=>11021, +46250=>11022, +46251=>11023, +46253=>11024, +46254=>11025, +46255=>11026, +46256=>11027, +46257=>11028, +46258=>11029, +46259=>11030, +46260=>11031, +46262=>11032, +46264=>11033, +46266=>11034, +46267=>11035, +46268=>11036, +46269=>11037, +46270=>11038, +46271=>11039, +46273=>11040, +46274=>11041, +46275=>11042, +46277=>11043, +46278=>11044, +46279=>11045, +46281=>11046, +46282=>11047, +46283=>11048, +46284=>11049, +46285=>11050, +46286=>11051, +46287=>11052, +46289=>11053, +46290=>11054, +46291=>11055, +46292=>11056, +46294=>11057, +46295=>11058, +46296=>11059, +46297=>11060, +46298=>11061, +46299=>11062, +46302=>11063, +46303=>11064, +46305=>11065, +46306=>11066, +46309=>11067, +46311=>11068, +46312=>11069, +46313=>11070, +46314=>11071, +46315=>11072, +46318=>11073, +46320=>11074, +46322=>11075, +46323=>11076, +46324=>11077, +46325=>11078, +46326=>11079, +46327=>11080, +46329=>11081, +46330=>11082, +46331=>11083, +46332=>11084, +46333=>11085, +46334=>11086, +46335=>11087, +46336=>11088, +46337=>11089, +46338=>11090, +46339=>11091, +46340=>11092, +46341=>11093, +46342=>11094, +46343=>11095, +46344=>11096, +46345=>11097, +46346=>11098, +46347=>11099, +46348=>11100, +46349=>11101, +46350=>11102, +46351=>11103, +46352=>11104, +46353=>11105, +46354=>11106, +46355=>11107, +46358=>11108, +46359=>11109, +46361=>11110, +46362=>11111, +46365=>11112, +46366=>11113, +46367=>11114, +46368=>11115, +46369=>11116, +46370=>11117, +46371=>11118, +46374=>11119, +46379=>11120, +46380=>11121, +46381=>11122, +46382=>11123, +46383=>11124, +46386=>11125, +46387=>11126, +46389=>11127, +46390=>11128, +46391=>11129, +46393=>11130, +46394=>11131, +46395=>11132, +46396=>11133, +46397=>11134, +46398=>11135, +46399=>11136, +46402=>11137, +46406=>11138, +46407=>11139, +46408=>11140, +46409=>11141, +46410=>11142, +46414=>11143, +46415=>11144, +46417=>11145, +46418=>11146, +46419=>11147, +46421=>11148, +46422=>11149, +46423=>11150, +46424=>11151, +46425=>11152, +46426=>11153, +46427=>11154, +46430=>11155, +46434=>11156, +46435=>11157, +46436=>11158, +46437=>11159, +46438=>11160, +46439=>11161, +46440=>11162, +46441=>11163, +46442=>11164, +46443=>11165, +46444=>11166, +46445=>11167, +46446=>11168, +46447=>11169, +46448=>11170, +46449=>11171, +46450=>11172, +46451=>11173, +46452=>11174, +46453=>11175, +46454=>11176, +46455=>11177, +46456=>11178, +46457=>11179, +46458=>11180, +46459=>11181, +46460=>11182, +46461=>11183, +46462=>11184, +46463=>11185, +46464=>11186, +46465=>11187, +46466=>11188, +46467=>11189, +46468=>11190, +46469=>11191, +46470=>11192, +46471=>11193, +46472=>11194, +46473=>11195, +46474=>11196, +46475=>11197, +46476=>11198, +46477=>11199, +46478=>11200, +46479=>11201, +46480=>11202, +46481=>11203, +46482=>11204, +46483=>11205, +46484=>11206, +46485=>11207, +46486=>11208, +46487=>11209, +46488=>11210, +46489=>11211, +46490=>11212, +46491=>11213, +46492=>11214, +46493=>11215, +46494=>11216, +46495=>11217, +46498=>11218, +46499=>11219, +46501=>11220, +46502=>11221, +46503=>11222, +46505=>11223, +46508=>11224, +46509=>11225, +46510=>11226, +46511=>11227, +46514=>11228, +46518=>11229, +46519=>11230, +46520=>11231, +46521=>11232, +46522=>11233, +46526=>11234, +46527=>11235, +46529=>11236, +46530=>11237, +46531=>11238, +46533=>11239, +46534=>11240, +46535=>11241, +46536=>11242, +46537=>11243, +46538=>11244, +46539=>11245, +46542=>11246, +46546=>11247, +46547=>11248, +46548=>11249, +46549=>11250, +46550=>11251, +46551=>11252, +46553=>11253, +46554=>11254, +46555=>11255, +46556=>11256, +46557=>11257, +46558=>11258, +46559=>11259, +46560=>11260, +46561=>11261, +46562=>11262, +46563=>11263, +46564=>11264, +46565=>11265, +46566=>11266, +46567=>11267, +46568=>11268, +46569=>11269, +46570=>11270, +46571=>11271, +46573=>11272, +46574=>11273, +46575=>11274, +46576=>11275, +46577=>11276, +46578=>11277, +46579=>11278, +46580=>11279, +46581=>11280, +46582=>11281, +46583=>11282, +46584=>11283, +46585=>11284, +46586=>11285, +46587=>11286, +46588=>11287, +46589=>11288, +46590=>11289, +46591=>11290, +46592=>11291, +46593=>11292, +46594=>11293, +46595=>11294, +46596=>11295, +46597=>11296, +46598=>11297, +46599=>11298, +46600=>11299, +46601=>11300, +46602=>11301, +46603=>11302, +46604=>11303, +46605=>11304, +46606=>11305, +46607=>11306, +46610=>11307, +46611=>11308, +46613=>11309, +46614=>11310, +46615=>11311, +46617=>11312, +46618=>11313, +46619=>11314, +46620=>11315, +46621=>11316, +46622=>11317, +46623=>11318, +46624=>11319, +46625=>11320, +46626=>11321, +46627=>11322, +46628=>11323, +46630=>11324, +46631=>11325, +46632=>11326, +46633=>11327, +46634=>11328, +46635=>11329, +46637=>11330, +46638=>11331, +46639=>11332, +46640=>11333, +46641=>11334, +46642=>11335, +46643=>11336, +46645=>11337, +46646=>11338, +46647=>11339, +46648=>11340, +46649=>11341, +46650=>11342, +46651=>11343, +46652=>11344, +46653=>11345, +46654=>11346, +46655=>11347, +46656=>11348, +46657=>11349, +46658=>11350, +46659=>11351, +46660=>11352, +46661=>11353, +46662=>11354, +46663=>11355, +46665=>11356, +46666=>11357, +46667=>11358, +46668=>11359, +46669=>11360, +46670=>11361, +46671=>11362, +46672=>11363, +46673=>11364, +46674=>11365, +46675=>11366, +46676=>11367, +46677=>11368, +46678=>11369, +46679=>11370, +46680=>11371, +46681=>11372, +46682=>11373, +46683=>11374, +46684=>11375, +46685=>11376, +46686=>11377, +46687=>11378, +46688=>11379, +46689=>11380, +46690=>11381, +46691=>11382, +46693=>11383, +46694=>11384, +46695=>11385, +46697=>11386, +46698=>11387, +46699=>11388, +46700=>11389, +46701=>11390, +46702=>11391, +46703=>11392, +46704=>11393, +46705=>11394, +46706=>11395, +46707=>11396, +46708=>11397, +46709=>11398, +46710=>11399, +46711=>11400, +46712=>11401, +46713=>11402, +46714=>11403, +46715=>11404, +46716=>11405, +46717=>11406, +46718=>11407, +46719=>11408, +46720=>11409, +46721=>11410, +46722=>11411, +46723=>11412, +46724=>11413, +46725=>11414, +46726=>11415, +46727=>11416, +46728=>11417, +46729=>11418, +46730=>11419, +46731=>11420, +46732=>11421, +46733=>11422, +46734=>11423, +46735=>11424, +46736=>11425, +46737=>11426, +46738=>11427, +46739=>11428, +46740=>11429, +46741=>11430, +46742=>11431, +46743=>11432, +46744=>11433, +46745=>11434, +46746=>11435, +46747=>11436, +46750=>11437, +46751=>11438, +46753=>11439, +46754=>11440, +46755=>11441, +46757=>11442, +46758=>11443, +46759=>11444, +46760=>11445, +46761=>11446, +46762=>11447, +46765=>11448, +46766=>11449, +46767=>11450, +46768=>11451, +46770=>11452, +46771=>11453, +46772=>11454, +46773=>11455, +46774=>11456, +46775=>11457, +46776=>11458, +46777=>11459, +46778=>11460, +46779=>11461, +46780=>11462, +46781=>11463, +46782=>11464, +46783=>11465, +46784=>11466, +46785=>11467, +46786=>11468, +46787=>11469, +46788=>11470, +46789=>11471, +46790=>11472, +46791=>11473, +46792=>11474, +46793=>11475, +46794=>11476, +46795=>11477, +46796=>11478, +46797=>11479, +46798=>11480, +46799=>11481, +46800=>11482, +46801=>11483, +46802=>11484, +46803=>11485, +46805=>11486, +46806=>11487, +46807=>11488, +46808=>11489, +46809=>11490, +46810=>11491, +46811=>11492, +46812=>11493, +46813=>11494, +46814=>11495, +46815=>11496, +46816=>11497, +46817=>11498, +46818=>11499, +46819=>11500, +46820=>11501, +46821=>11502, +46822=>11503, +46823=>11504, +46824=>11505, +46825=>11506, +46826=>11507, +46827=>11508, +46828=>11509, +46829=>11510, +46830=>11511, +46831=>11512, +46833=>11513, +46834=>11514, +46835=>11515, +46837=>11516, +46838=>11517, +46839=>11518, +46841=>11519, +46842=>11520, +46843=>11521, +46844=>11522, +46845=>11523, +46846=>11524, +46847=>11525, +46850=>11526, +46851=>11527, +46852=>11528, +46854=>11529, +46855=>11530, +46856=>11531, +46857=>11532, +46858=>11533, +46859=>11534, +46860=>11535, +46861=>11536, +46862=>11537, +46863=>11538, +46864=>11539, +46865=>11540, +46866=>11541, +46867=>11542, +46868=>11543, +46869=>11544, +46870=>11545, +46871=>11546, +46872=>11547, +46873=>11548, +46874=>11549, +46875=>11550, +46876=>11551, +46877=>11552, +46878=>11553, +46879=>11554, +46880=>11555, +46881=>11556, +46882=>11557, +46883=>11558, +46884=>11559, +46885=>11560, +46886=>11561, +46887=>11562, +46890=>11563, +46891=>11564, +46893=>11565, +46894=>11566, +46897=>11567, +46898=>11568, +46899=>11569, +46900=>11570, +46901=>11571, +46902=>11572, +46903=>11573, +46906=>11574, +46908=>11575, +46909=>11576, +46910=>11577, +46911=>11578, +46912=>11579, +46913=>11580, +46914=>11581, +46915=>11582, +46917=>11583, +46918=>11584, +46919=>11585, +46921=>11586, +46922=>11587, +46923=>11588, +46925=>11589, +46926=>11590, +46927=>11591, +46928=>11592, +46929=>11593, +46930=>11594, +46931=>11595, +46934=>11596, +46935=>11597, +46936=>11598, +46937=>11599, +46938=>11600, +46939=>11601, +46940=>11602, +46941=>11603, +46942=>11604, +46943=>11605, +46945=>11606, +46946=>11607, +46947=>11608, +46949=>11609, +46950=>11610, +46951=>11611, +46953=>11612, +46954=>11613, +46955=>11614, +46956=>11615, +46957=>11616, +46958=>11617, +46959=>11618, +46962=>11619, +46964=>11620, +46966=>11621, +46967=>11622, +46968=>11623, +46969=>11624, +46970=>11625, +46971=>11626, +46974=>11627, +46975=>11628, +46977=>11629, +46978=>11630, +46979=>11631, +46981=>11632, +46982=>11633, +46983=>11634, +46984=>11635, +46985=>11636, +46986=>11637, +46987=>11638, +46990=>11639, +46995=>11640, +46996=>11641, +46997=>11642, +47002=>11643, +47003=>11644, +47005=>11645, +47006=>11646, +47007=>11647, +47009=>11648, +47010=>11649, +47011=>11650, +47012=>11651, +47013=>11652, +47014=>11653, +47015=>11654, +47018=>11655, +47022=>11656, +47023=>11657, +47024=>11658, +47025=>11659, +47026=>11660, +47027=>11661, +47030=>11662, +47031=>11663, +47033=>11664, +47034=>11665, +47035=>11666, +47036=>11667, +47037=>11668, +47038=>11669, +47039=>11670, +47040=>11671, +47041=>11672, +47042=>11673, +47043=>11674, +47044=>11675, +47045=>11676, +47046=>11677, +47048=>11678, +47050=>11679, +47051=>11680, +47052=>11681, +47053=>11682, +47054=>11683, +47055=>11684, +47056=>11685, +47057=>11686, +47058=>11687, +47059=>11688, +47060=>11689, +47061=>11690, +47062=>11691, +47063=>11692, +47064=>11693, +47065=>11694, +47066=>11695, +47067=>11696, +47068=>11697, +47069=>11698, +47070=>11699, +47071=>11700, +47072=>11701, +47073=>11702, +47074=>11703, +47075=>11704, +47076=>11705, +47077=>11706, +47078=>11707, +47079=>11708, +47080=>11709, +47081=>11710, +47082=>11711, +47083=>11712, +47086=>11713, +47087=>11714, +47089=>11715, +47090=>11716, +47091=>11717, +47093=>11718, +47094=>11719, +47095=>11720, +47096=>11721, +47097=>11722, +47098=>11723, +47099=>11724, +47102=>11725, +47106=>11726, +47107=>11727, +47108=>11728, +47109=>11729, +47110=>11730, +47114=>11731, +47115=>11732, +47117=>11733, +47118=>11734, +47119=>11735, +47121=>11736, +47122=>11737, +47123=>11738, +47124=>11739, +47125=>11740, +47126=>11741, +47127=>11742, +47130=>11743, +47132=>11744, +47134=>11745, +47135=>11746, +47136=>11747, +47137=>11748, +47138=>11749, +47139=>11750, +47142=>11751, +47143=>11752, +47145=>11753, +47146=>11754, +47147=>11755, +47149=>11756, +47150=>11757, +47151=>11758, +47152=>11759, +47153=>11760, +47154=>11761, +47155=>11762, +47158=>11763, +47162=>11764, +47163=>11765, +47164=>11766, +47165=>11767, +47166=>11768, +47167=>11769, +47169=>11770, +47170=>11771, +47171=>11772, +47173=>11773, +47174=>11774, +47175=>11775, +47176=>11776, +47177=>11777, +47178=>11778, +47179=>11779, +47180=>11780, +47181=>11781, +47182=>11782, +47183=>11783, +47184=>11784, +47186=>11785, +47188=>11786, +47189=>11787, +47190=>11788, +47191=>11789, +47192=>11790, +47193=>11791, +47194=>11792, +47195=>11793, +47198=>11794, +47199=>11795, +47201=>11796, +47202=>11797, +47203=>11798, +47205=>11799, +47206=>11800, +47207=>11801, +47208=>11802, +47209=>11803, +47210=>11804, +47211=>11805, +47214=>11806, +47216=>11807, +47218=>11808, +47219=>11809, +47220=>11810, +47221=>11811, +47222=>11812, +47223=>11813, +47225=>11814, +47226=>11815, +47227=>11816, +47229=>11817, +47230=>11818, +47231=>11819, +47232=>11820, +47233=>11821, +47234=>11822, +47235=>11823, +47236=>11824, +47237=>11825, +47238=>11826, +47239=>11827, +47240=>11828, +47241=>11829, +47242=>11830, +47243=>11831, +47244=>11832, +47246=>11833, +47247=>11834, +47248=>11835, +47249=>11836, +47250=>11837, +47251=>11838, +47252=>11839, +47253=>11840, +47254=>11841, +47255=>11842, +47256=>11843, +47257=>11844, +47258=>11845, +47259=>11846, +47260=>11847, +47261=>11848, +47262=>11849, +47263=>11850, +47264=>11851, +47265=>11852, +47266=>11853, +47267=>11854, +47268=>11855, +47269=>11856, +47270=>11857, +47271=>11858, +47273=>11859, +47274=>11860, +47275=>11861, +47276=>11862, +47277=>11863, +47278=>11864, +47279=>11865, +47281=>11866, +47282=>11867, +47283=>11868, +47285=>11869, +47286=>11870, +47287=>11871, +47289=>11872, +47290=>11873, +47291=>11874, +47292=>11875, +47293=>11876, +47294=>11877, +47295=>11878, +47298=>11879, +47300=>11880, +47302=>11881, +47303=>11882, +47304=>11883, +47305=>11884, +47306=>11885, +47307=>11886, +47309=>11887, +47310=>11888, +47311=>11889, +47313=>11890, +47314=>11891, +47315=>11892, +47317=>11893, +47318=>11894, +47319=>11895, +47320=>11896, +47321=>11897, +47322=>11898, +47323=>11899, +47324=>11900, +47326=>11901, +47328=>11902, +47330=>11903, +47331=>11904, +47332=>11905, +47333=>11906, +47334=>11907, +47335=>11908, +47338=>11909, +47339=>11910, +47341=>11911, +47342=>11912, +47343=>11913, +47345=>11914, +47346=>11915, +47347=>11916, +47348=>11917, +47349=>11918, +47350=>11919, +47351=>11920, +47354=>11921, +47356=>11922, +47358=>11923, +47359=>11924, +47360=>11925, +47361=>11926, +47362=>11927, +47363=>11928, +47365=>11929, +47366=>11930, +47367=>11931, +47368=>11932, +47369=>11933, +47370=>11934, +47371=>11935, +47372=>11936, +47373=>11937, +47374=>11938, +47375=>11939, +47376=>11940, +47377=>11941, +47378=>11942, +47379=>11943, +47380=>11944, +47381=>11945, +47382=>11946, +47383=>11947, +47385=>11948, +47386=>11949, +47387=>11950, +47388=>11951, +47389=>11952, +47390=>11953, +47391=>11954, +47393=>11955, +47394=>11956, +47395=>11957, +47396=>11958, +47397=>11959, +47398=>11960, +47399=>11961, +47400=>11962, +47401=>11963, +47402=>11964, +47403=>11965, +47404=>11966, +47405=>11967, +47406=>11968, +47407=>11969, +47408=>11970, +47409=>11971, +47410=>11972, +47411=>11973, +47412=>11974, +47413=>11975, +47414=>11976, +47415=>11977, +47416=>11978, +47417=>11979, +47418=>11980, +47419=>11981, +47422=>11982, +47423=>11983, +47425=>11984, +47426=>11985, +47427=>11986, +47429=>11987, +47430=>11988, +47431=>11989, +47432=>11990, +47433=>11991, +47434=>11992, +47435=>11993, +47437=>11994, +47438=>11995, +47440=>11996, +47442=>11997, +47443=>11998, +47444=>11999, +47445=>12000, +47446=>12001, +47447=>12002, +47450=>12003, +47451=>12004, +47453=>12005, +47454=>12006, +47455=>12007, +47457=>12008, +47458=>12009, +47459=>12010, +47460=>12011, +47461=>12012, +47462=>12013, +47463=>12014, +47466=>12015, +47468=>12016, +47470=>12017, +47471=>12018, +47472=>12019, +47473=>12020, +47474=>12021, +47475=>12022, +47478=>12023, +47479=>12024, +47481=>12025, +47482=>12026, +47483=>12027, +47485=>12028, +47486=>12029, +47487=>12030, +47488=>12031, +47489=>12032, +47490=>12033, +47491=>12034, +47494=>12035, +47496=>12036, +47499=>12037, +47500=>12038, +47503=>12039, +47504=>12040, +47505=>12041, +47506=>12042, +47507=>12043, +47508=>12044, +47509=>12045, +47510=>12046, +47511=>12047, +47512=>12048, +47513=>12049, +47514=>12050, +47515=>12051, +47516=>12052, +47517=>12053, +47518=>12054, +47519=>12055, +47520=>12056, +47521=>12057, +47522=>12058, +47523=>12059, +47524=>12060, +47525=>12061, +47526=>12062, +47527=>12063, +47528=>12064, +47529=>12065, +47530=>12066, +47531=>12067, +47534=>12068, +47535=>12069, +47537=>12070, +47538=>12071, +47539=>12072, +47541=>12073, +47542=>12074, +47543=>12075, +47544=>12076, +47545=>12077, +47546=>12078, +47547=>12079, +47550=>12080, +47552=>12081, +47554=>12082, +47555=>12083, +47556=>12084, +47557=>12085, +47558=>12086, +47559=>12087, +47562=>12088, +47563=>12089, +47565=>12090, +47571=>12091, +47572=>12092, +47573=>12093, +47574=>12094, +47575=>12095, +47578=>12096, +47580=>12097, +47583=>12098, +47584=>12099, +47586=>12100, +47590=>12101, +47591=>12102, +47593=>12103, +47594=>12104, +47595=>12105, +47597=>12106, +47598=>12107, +47599=>12108, +47600=>12109, +47601=>12110, +47602=>12111, +47603=>12112, +47606=>12113, +47611=>12114, +47612=>12115, +47613=>12116, +47614=>12117, +47615=>12118, +47618=>12119, +47619=>12120, +47620=>12121, +47621=>12122, +47622=>12123, +47623=>12124, +47625=>12125, +47626=>12126, +47627=>12127, +47628=>12128, +47629=>12129, +47630=>12130, +47631=>12131, +47632=>12132, +47633=>12133, +47634=>12134, +47635=>12135, +47636=>12136, +47638=>12137, +47639=>12138, +47640=>12139, +47641=>12140, +47642=>12141, +47643=>12142, +47644=>12143, +47645=>12144, +47646=>12145, +47647=>12146, +47648=>12147, +47649=>12148, +47650=>12149, +47651=>12150, +47652=>12151, +47653=>12152, +47654=>12153, +47655=>12154, +47656=>12155, +47657=>12156, +47658=>12157, +47659=>12158, +47660=>12159, +47661=>12160, +47662=>12161, +47663=>12162, +47664=>12163, +47665=>12164, +47666=>12165, +47667=>12166, +47668=>12167, +47669=>12168, +47670=>12169, +47671=>12170, +47674=>12171, +47675=>12172, +47677=>12173, +47678=>12174, +47679=>12175, +47681=>12176, +47683=>12177, +47684=>12178, +47685=>12179, +47686=>12180, +47687=>12181, +47690=>12182, +47692=>12183, +47695=>12184, +47696=>12185, +47697=>12186, +47698=>12187, +47702=>12188, +47703=>12189, +47705=>12190, +47706=>12191, +47707=>12192, +47709=>12193, +47710=>12194, +47711=>12195, +47712=>12196, +47713=>12197, +47714=>12198, +47715=>12199, +47718=>12200, +47722=>12201, +47723=>12202, +47724=>12203, +47725=>12204, +47726=>12205, +47727=>12206, +47730=>12207, +47731=>12208, +47733=>12209, +47734=>12210, +47735=>12211, +47737=>12212, +47738=>12213, +47739=>12214, +47740=>12215, +47741=>12216, +47742=>12217, +47743=>12218, +47744=>12219, +47745=>12220, +47746=>12221, +47750=>12222, +47752=>12223, +47753=>12224, +47754=>12225, +47755=>12226, +47757=>12227, +47758=>12228, +47759=>12229, +47760=>12230, +47761=>12231, +47762=>12232, +47763=>12233, +47764=>12234, +47765=>12235, +47766=>12236, +47767=>12237, +47768=>12238, +47769=>12239, +47770=>12240, +47771=>12241, +47772=>12242, +47773=>12243, +47774=>12244, +47775=>12245, +47776=>12246, +47777=>12247, +47778=>12248, +47779=>12249, +47780=>12250, +47781=>12251, +47782=>12252, +47783=>12253, +47786=>12254, +47789=>12255, +47790=>12256, +47791=>12257, +47793=>12258, +47795=>12259, +47796=>12260, +47797=>12261, +47798=>12262, +47799=>12263, +47802=>12264, +47804=>12265, +47806=>12266, +47807=>12267, +47808=>12268, +47809=>12269, +47810=>12270, +47811=>12271, +47813=>12272, +47814=>12273, +47815=>12274, +47817=>12275, +47818=>12276, +47819=>12277, +47820=>12278, +47821=>12279, +47822=>12280, +47823=>12281, +47824=>12282, +47825=>12283, +47826=>12284, +47827=>12285, +47828=>12286, +47829=>12287, +47830=>12288, +47831=>12289, +47834=>12290, +47835=>12291, +47836=>12292, +47837=>12293, +47838=>12294, +47839=>12295, +47840=>12296, +47841=>12297, +47842=>12298, +47843=>12299, +47844=>12300, +47845=>12301, +47846=>12302, +47847=>12303, +47848=>12304, +47849=>12305, +47850=>12306, +47851=>12307, +47852=>12308, +47853=>12309, +47854=>12310, +47855=>12311, +47856=>12312, +47857=>12313, +47858=>12314, +47859=>12315, +47860=>12316, +47861=>12317, +47862=>12318, +47863=>12319, +47864=>12320, +47865=>12321, +47866=>12322, +47867=>12323, +47869=>12324, +47870=>12325, +47871=>12326, +47873=>12327, +47874=>12328, +47875=>12329, +47877=>12330, +47878=>12331, +47879=>12332, +47880=>12333, +47881=>12334, +47882=>12335, +47883=>12336, +47884=>12337, +47886=>12338, +47888=>12339, +47890=>12340, +47891=>12341, +47892=>12342, +47893=>12343, +47894=>12344, +47895=>12345, +47897=>12346, +47898=>12347, +47899=>12348, +47901=>12349, +47902=>12350, +47903=>12351, +47905=>12352, +47906=>12353, +47907=>12354, +47908=>12355, +47909=>12356, +47910=>12357, +47911=>12358, +47912=>12359, +47914=>12360, +47916=>12361, +47917=>12362, +47918=>12363, +47919=>12364, +47920=>12365, +47921=>12366, +47922=>12367, +47923=>12368, +47927=>12369, +47929=>12370, +47930=>12371, +47935=>12372, +47936=>12373, +47937=>12374, +47938=>12375, +47939=>12376, +47942=>12377, +47944=>12378, +47946=>12379, +47947=>12380, +47948=>12381, +47950=>12382, +47953=>12383, +47954=>12384, +47955=>12385, +47957=>12386, +47958=>12387, +47959=>12388, +47961=>12389, +47962=>12390, +47963=>12391, +47964=>12392, +47965=>12393, +47966=>12394, +47967=>12395, +47968=>12396, +47970=>12397, +47972=>12398, +47973=>12399, +47974=>12400, +47975=>12401, +47976=>12402, +47977=>12403, +47978=>12404, +47979=>12405, +47981=>12406, +47982=>12407, +47983=>12408, +47984=>12409, +47985=>12410, +47986=>12411, +47987=>12412, +47988=>12413, +47989=>12414, +47990=>12415, +47991=>12416, +47992=>12417, +47993=>12418, +47994=>12419, +47995=>12420, +47996=>12421, +47997=>12422, +47998=>12423, +47999=>12424, +48000=>12425, +48001=>12426, +48002=>12427, +48003=>12428, +48004=>12429, +48005=>12430, +48006=>12431, +48007=>12432, +48009=>12433, +48010=>12434, +48011=>12435, +48013=>12436, +48014=>12437, +48015=>12438, +48017=>12439, +48018=>12440, +48019=>12441, +48020=>12442, +48021=>12443, +48022=>12444, +48023=>12445, +48024=>12446, +48025=>12447, +48026=>12448, +48027=>12449, +48028=>12450, +48029=>12451, +48030=>12452, +48031=>12453, +48032=>12454, +48033=>12455, +48034=>12456, +48035=>12457, +48037=>12458, +48038=>12459, +48039=>12460, +48041=>12461, +48042=>12462, +48043=>12463, +48045=>12464, +48046=>12465, +48047=>12466, +48048=>12467, +48049=>12468, +48050=>12469, +48051=>12470, +48053=>12471, +48054=>12472, +48056=>12473, +48057=>12474, +48058=>12475, +48059=>12476, +48060=>12477, +48061=>12478, +48062=>12479, +48063=>12480, +48065=>12481, +48066=>12482, +48067=>12483, +48069=>12484, +48070=>12485, +48071=>12486, +48073=>12487, +48074=>12488, +48075=>12489, +48076=>12490, +48077=>12491, +48078=>12492, +48079=>12493, +48081=>12494, +48082=>12495, +48084=>12496, +48085=>12497, +48086=>12498, +48087=>12499, +48088=>12500, +48089=>12501, +48090=>12502, +48091=>12503, +48092=>12504, +48093=>12505, +48094=>12506, +48095=>12507, +48096=>12508, +48097=>12509, +48098=>12510, +48099=>12511, +48100=>12512, +48101=>12513, +48102=>12514, +48103=>12515, +48104=>12516, +48105=>12517, +48106=>12518, +48107=>12519, +48108=>12520, +48109=>12521, +48110=>12522, +48111=>12523, +48112=>12524, +48113=>12525, +48114=>12526, +48115=>12527, +48116=>12528, +48117=>12529, +48118=>12530, +48119=>12531, +48122=>12532, +48123=>12533, +48125=>12534, +48126=>12535, +48129=>12536, +48131=>12537, +48132=>12538, +48133=>12539, +48134=>12540, +48135=>12541, +48138=>12542, +48142=>12543, +48144=>12544, +48146=>12545, +48147=>12546, +48153=>12547, +48154=>12548, +48160=>12549, +48161=>12550, +48162=>12551, +48163=>12552, +48166=>12553, +48168=>12554, +48170=>12555, +48171=>12556, +48172=>12557, +48174=>12558, +48175=>12559, +48178=>12560, +48179=>12561, +48181=>12562, +48182=>12563, +48183=>12564, +48185=>12565, +48186=>12566, +48187=>12567, +48188=>12568, +48189=>12569, +48190=>12570, +48191=>12571, +48194=>12572, +48198=>12573, +48199=>12574, +48200=>12575, +48202=>12576, +48203=>12577, +48206=>12578, +48207=>12579, +48209=>12580, +48210=>12581, +48211=>12582, +48212=>12583, +48213=>12584, +48214=>12585, +48215=>12586, +48216=>12587, +48217=>12588, +48218=>12589, +48219=>12590, +48220=>12591, +48222=>12592, +48223=>12593, +48224=>12594, +48225=>12595, +48226=>12596, +48227=>12597, +48228=>12598, +48229=>12599, +48230=>12600, +48231=>12601, +48232=>12602, +48233=>12603, +48234=>12604, +48235=>12605, +48236=>12606, +48237=>12607, +48238=>12608, +48239=>12609, +48240=>12610, +48241=>12611, +48242=>12612, +48243=>12613, +48244=>12614, +48245=>12615, +48246=>12616, +48247=>12617, +48248=>12618, +48249=>12619, +48250=>12620, +48251=>12621, +48252=>12622, +48253=>12623, +48254=>12624, +48255=>12625, +48256=>12626, +48257=>12627, +48258=>12628, +48259=>12629, +48262=>12630, +48263=>12631, +48265=>12632, +48266=>12633, +48269=>12634, +48271=>12635, +48272=>12636, +48273=>12637, +48274=>12638, +48275=>12639, +48278=>12640, +48280=>12641, +48283=>12642, +48284=>12643, +48285=>12644, +48286=>12645, +48287=>12646, +48290=>12647, +48291=>12648, +48293=>12649, +48294=>12650, +48297=>12651, +48298=>12652, +48299=>12653, +48300=>12654, +48301=>12655, +48302=>12656, +48303=>12657, +48306=>12658, +48310=>12659, +48311=>12660, +48312=>12661, +48313=>12662, +48314=>12663, +48315=>12664, +48318=>12665, +48319=>12666, +48321=>12667, +48322=>12668, +48323=>12669, +48325=>12670, +48326=>12671, +48327=>12672, +48328=>12673, +48329=>12674, +48330=>12675, +48331=>12676, +48332=>12677, +48334=>12678, +48338=>12679, +48339=>12680, +48340=>12681, +48342=>12682, +48343=>12683, +48345=>12684, +48346=>12685, +48347=>12686, +48349=>12687, +48350=>12688, +48351=>12689, +48352=>12690, +48353=>12691, +48354=>12692, +48355=>12693, +48356=>12694, +48357=>12695, +48358=>12696, +48359=>12697, +48360=>12698, +48361=>12699, +48362=>12700, +48363=>12701, +48364=>12702, +48365=>12703, +48366=>12704, +48367=>12705, +48368=>12706, +48369=>12707, +48370=>12708, +48371=>12709, +48375=>12710, +48377=>12711, +48378=>12712, +48379=>12713, +48381=>12714, +48382=>12715, +48383=>12716, +48384=>12717, +48385=>12718, +48386=>12719, +48387=>12720, +48390=>12721, +48392=>12722, +48394=>12723, +48395=>12724, +48396=>12725, +48397=>12726, +48398=>12727, +48399=>12728, +48401=>12729, +48402=>12730, +48403=>12731, +48405=>12732, +48406=>12733, +48407=>12734, +48408=>12735, +48409=>12736, +48410=>12737, +48411=>12738, +48412=>12739, +48413=>12740, +48414=>12741, +48415=>12742, +48416=>12743, +48417=>12744, +48418=>12745, +48419=>12746, +48421=>12747, +48422=>12748, +48423=>12749, +48424=>12750, +48425=>12751, +48426=>12752, +48427=>12753, +48429=>12754, +48430=>12755, +48431=>12756, +48432=>12757, +48433=>12758, +48434=>12759, +48435=>12760, +48436=>12761, +48437=>12762, +48438=>12763, +48439=>12764, +48440=>12765, +48441=>12766, +48442=>12767, +48443=>12768, +48444=>12769, +48445=>12770, +48446=>12771, +48447=>12772, +48449=>12773, +48450=>12774, +48451=>12775, +48452=>12776, +48453=>12777, +48454=>12778, +48455=>12779, +48458=>12780, +48459=>12781, +48461=>12782, +48462=>12783, +48463=>12784, +48465=>12785, +48466=>12786, +48467=>12787, +48468=>12788, +48469=>12789, +48470=>12790, +48471=>12791, +48474=>12792, +48475=>12793, +48476=>12794, +48477=>12795, +48478=>12796, +48479=>12797, +48480=>12798, +48481=>12799, +48482=>12800, +48483=>12801, +48485=>12802, +48486=>12803, +48487=>12804, +48489=>12805, +48490=>12806, +48491=>12807, +48492=>12808, +48493=>12809, +48494=>12810, +48495=>12811, +48496=>12812, +48497=>12813, +48498=>12814, +48499=>12815, +48500=>12816, +48501=>12817, +48502=>12818, +48503=>12819, +48504=>12820, +48505=>12821, +48506=>12822, +48507=>12823, +48508=>12824, +48509=>12825, +48510=>12826, +48511=>12827, +48514=>12828, +48515=>12829, +48517=>12830, +48518=>12831, +48523=>12832, +48524=>12833, +48525=>12834, +48526=>12835, +48527=>12836, +48530=>12837, +48532=>12838, +48534=>12839, +48535=>12840, +48536=>12841, +48539=>12842, +48541=>12843, +48542=>12844, +48543=>12845, +48544=>12846, +48545=>12847, +48546=>12848, +48547=>12849, +48549=>12850, +48550=>12851, +48551=>12852, +48552=>12853, +48553=>12854, +48554=>12855, +48555=>12856, +48556=>12857, +48557=>12858, +48558=>12859, +48559=>12860, +48561=>12861, +48562=>12862, +48563=>12863, +48564=>12864, +48565=>12865, +48566=>12866, +48567=>12867, +48569=>12868, +48570=>12869, +48571=>12870, +48572=>12871, +48573=>12872, +48574=>12873, +48575=>12874, +48576=>12875, +48577=>12876, +48578=>12877, +48579=>12878, +48580=>12879, +48581=>12880, +48582=>12881, +48583=>12882, +48584=>12883, +48585=>12884, +48586=>12885, +48587=>12886, +48588=>12887, +48589=>12888, +48590=>12889, +48591=>12890, +48592=>12891, +48593=>12892, +48594=>12893, +48595=>12894, +48598=>12895, +48599=>12896, +48601=>12897, +48602=>12898, +48603=>12899, +48605=>12900, +48606=>12901, +48607=>12902, +48608=>12903, +48609=>12904, +48610=>12905, +48611=>12906, +48612=>12907, +48613=>12908, +48614=>12909, +48615=>12910, +48616=>12911, +48618=>12912, +48619=>12913, +48620=>12914, +48621=>12915, +48622=>12916, +48623=>12917, +48625=>12918, +48626=>12919, +48627=>12920, +48629=>12921, +48630=>12922, +48631=>12923, +48633=>12924, +48634=>12925, +48635=>12926, +48636=>12927, +48637=>12928, +48638=>12929, +48639=>12930, +48641=>12931, +48642=>12932, +48644=>12933, +48646=>12934, +48647=>12935, +48648=>12936, +48649=>12937, +48650=>12938, +48651=>12939, +48654=>12940, +48655=>12941, +48657=>12942, +48658=>12943, +48659=>12944, +48661=>12945, +48662=>12946, +48663=>12947, +48664=>12948, +48665=>12949, +48666=>12950, +48667=>12951, +48670=>12952, +48672=>12953, +48673=>12954, +48674=>12955, +48675=>12956, +48676=>12957, +48677=>12958, +48678=>12959, +48679=>12960, +48680=>12961, +48681=>12962, +48682=>12963, +48683=>12964, +48684=>12965, +48685=>12966, +48686=>12967, +48687=>12968, +48688=>12969, +48689=>12970, +48690=>12971, +48691=>12972, +48692=>12973, +48693=>12974, +48694=>12975, +48695=>12976, +48696=>12977, +48697=>12978, +48698=>12979, +48699=>12980, +48700=>12981, +48701=>12982, +48702=>12983, +48703=>12984, +48704=>12985, +48705=>12986, +48706=>12987, +48707=>12988, +48710=>12989, +48711=>12990, +48713=>12991, +48714=>12992, +48715=>12993, +48717=>12994, +48719=>12995, +48720=>12996, +48721=>12997, +48722=>12998, +48723=>12999, +48726=>13000, +48728=>13001, +48732=>13002, +48733=>13003, +48734=>13004, +48735=>13005, +48738=>13006, +48739=>13007, +48741=>13008, +48742=>13009, +48743=>13010, +48745=>13011, +48747=>13012, +48748=>13013, +48749=>13014, +48750=>13015, +48751=>13016, +48754=>13017, +48758=>13018, +48759=>13019, +48760=>13020, +48761=>13021, +48762=>13022, +48766=>13023, +48767=>13024, +48769=>13025, +48770=>13026, +48771=>13027, +48773=>13028, +48774=>13029, +48775=>13030, +48776=>13031, +48777=>13032, +48778=>13033, +48779=>13034, +48782=>13035, +48786=>13036, +48787=>13037, +48788=>13038, +48789=>13039, +48790=>13040, +48791=>13041, +48794=>13042, +48795=>13043, +48796=>13044, +48797=>13045, +48798=>13046, +48799=>13047, +48800=>13048, +48801=>13049, +48802=>13050, +48803=>13051, +48804=>13052, +48805=>13053, +48806=>13054, +48807=>13055, +48809=>13056, +48810=>13057, +48811=>13058, +48812=>13059, +48813=>13060, +48814=>13061, +48815=>13062, +48816=>13063, +48817=>13064, +48818=>13065, +48819=>13066, +48820=>13067, +48821=>13068, +48822=>13069, +48823=>13070, +48824=>13071, +48825=>13072, +48826=>13073, +48827=>13074, +48828=>13075, +48829=>13076, +48830=>13077, +48831=>13078, +48832=>13079, +48833=>13080, +48834=>13081, +48835=>13082, +48836=>13083, +48837=>13084, +48838=>13085, +48839=>13086, +48840=>13087, +48841=>13088, +48842=>13089, +48843=>13090, +48844=>13091, +48845=>13092, +48846=>13093, +48847=>13094, +48850=>13095, +48851=>13096, +48853=>13097, +48854=>13098, +48857=>13099, +48858=>13100, +48859=>13101, +48860=>13102, +48861=>13103, +48862=>13104, +48863=>13105, +48865=>13106, +48866=>13107, +48870=>13108, +48871=>13109, +48872=>13110, +48873=>13111, +48874=>13112, +48875=>13113, +48877=>13114, +48878=>13115, +48879=>13116, +48880=>13117, +48881=>13118, +48882=>13119, +48883=>13120, +48884=>13121, +48885=>13122, +48886=>13123, +48887=>13124, +48888=>13125, +48889=>13126, +48890=>13127, +48891=>13128, +48892=>13129, +48893=>13130, +48894=>13131, +48895=>13132, +48896=>13133, +48898=>13134, +48899=>13135, +48900=>13136, +48901=>13137, +48902=>13138, +48903=>13139, +48906=>13140, +48907=>13141, +48908=>13142, +48909=>13143, +48910=>13144, +48911=>13145, +48912=>13146, +48913=>13147, +48914=>13148, +48915=>13149, +48916=>13150, +48917=>13151, +48918=>13152, +48919=>13153, +48922=>13154, +48926=>13155, +48927=>13156, +48928=>13157, +48929=>13158, +48930=>13159, +48931=>13160, +48932=>13161, +48933=>13162, +48934=>13163, +48935=>13164, +48936=>13165, +48937=>13166, +48938=>13167, +48939=>13168, +48940=>13169, +48941=>13170, +48942=>13171, +48943=>13172, +48944=>13173, +48945=>13174, +48946=>13175, +48947=>13176, +48948=>13177, +48949=>13178, +48950=>13179, +48951=>13180, +48952=>13181, +48953=>13182, +48954=>13183, +48955=>13184, +48956=>13185, +48957=>13186, +48958=>13187, +48959=>13188, +48962=>13189, +48963=>13190, +48965=>13191, +48966=>13192, +48967=>13193, +48969=>13194, +48970=>13195, +48971=>13196, +48972=>13197, +48973=>13198, +48974=>13199, +48975=>13200, +48978=>13201, +48979=>13202, +48980=>13203, +48982=>13204, +48983=>13205, +48984=>13206, +48985=>13207, +48986=>13208, +48987=>13209, +48988=>13210, +48989=>13211, +48990=>13212, +48991=>13213, +48992=>13214, +48993=>13215, +48994=>13216, +48995=>13217, +48996=>13218, +48997=>13219, +48998=>13220, +48999=>13221, +49000=>13222, +49001=>13223, +49002=>13224, +49003=>13225, +49004=>13226, +49005=>13227, +49006=>13228, +49007=>13229, +49008=>13230, +49009=>13231, +49010=>13232, +49011=>13233, +49012=>13234, +49013=>13235, +49014=>13236, +49015=>13237, +49016=>13238, +49017=>13239, +49018=>13240, +49019=>13241, +49020=>13242, +49021=>13243, +49022=>13244, +49023=>13245, +49024=>13246, +49025=>13247, +49026=>13248, +49027=>13249, +49028=>13250, +49029=>13251, +49030=>13252, +49031=>13253, +49032=>13254, +49033=>13255, +49034=>13256, +49035=>13257, +49036=>13258, +49037=>13259, +49038=>13260, +49039=>13261, +49040=>13262, +49041=>13263, +49042=>13264, +49043=>13265, +49045=>13266, +49046=>13267, +49047=>13268, +49048=>13269, +49049=>13270, +49050=>13271, +49051=>13272, +49052=>13273, +49053=>13274, +49054=>13275, +49055=>13276, +49056=>13277, +49057=>13278, +49058=>13279, +49059=>13280, +49060=>13281, +49061=>13282, +49062=>13283, +49063=>13284, +49064=>13285, +49065=>13286, +49066=>13287, +49067=>13288, +49068=>13289, +49069=>13290, +49070=>13291, +49071=>13292, +49073=>13293, +49074=>13294, +49075=>13295, +49076=>13296, +49077=>13297, +49078=>13298, +49079=>13299, +49080=>13300, +49081=>13301, +49082=>13302, +49083=>13303, +49084=>13304, +49085=>13305, +49086=>13306, +49087=>13307, +49088=>13308, +49089=>13309, +49090=>13310, +49091=>13311, +49092=>13312, +49094=>13313, +49095=>13314, +49096=>13315, +49097=>13316, +49098=>13317, +49099=>13318, +49102=>13319, +49103=>13320, +49105=>13321, +49106=>13322, +49107=>13323, +49109=>13324, +49110=>13325, +49111=>13326, +49112=>13327, +49113=>13328, +49114=>13329, +49115=>13330, +49117=>13331, +49118=>13332, +49120=>13333, +49122=>13334, +49123=>13335, +49124=>13336, +49125=>13337, +49126=>13338, +49127=>13339, +49128=>13340, +49129=>13341, +49130=>13342, +49131=>13343, +49132=>13344, +49133=>13345, +49134=>13346, +49135=>13347, +49136=>13348, +49137=>13349, +49138=>13350, +49139=>13351, +49140=>13352, +49141=>13353, +49142=>13354, +49143=>13355, +49144=>13356, +49145=>13357, +49146=>13358, +49147=>13359, +49148=>13360, +49149=>13361, +49150=>13362, +49151=>13363, +49152=>13364, +49153=>13365, +49154=>13366, +49155=>13367, +49156=>13368, +49157=>13369, +49158=>13370, +49159=>13371, +49160=>13372, +49161=>13373, +49162=>13374, +49163=>13375, +49164=>13376, +49165=>13377, +49166=>13378, +49167=>13379, +49168=>13380, +49169=>13381, +49170=>13382, +49171=>13383, +49172=>13384, +49173=>13385, +49174=>13386, +49175=>13387, +49176=>13388, +49177=>13389, +49178=>13390, +49179=>13391, +49180=>13392, +49181=>13393, +49182=>13394, +49183=>13395, +49184=>13396, +49185=>13397, +49186=>13398, +49187=>13399, +49188=>13400, +49189=>13401, +49190=>13402, +49191=>13403, +49192=>13404, +49193=>13405, +49194=>13406, +49195=>13407, +49196=>13408, +49197=>13409, +49198=>13410, +49199=>13411, +49200=>13412, +49201=>13413, +49202=>13414, +49203=>13415, +49204=>13416, +49205=>13417, +49206=>13418, +49207=>13419, +49208=>13420, +49209=>13421, +49210=>13422, +49211=>13423, +49213=>13424, +49214=>13425, +49215=>13426, +49216=>13427, +49217=>13428, +49218=>13429, +49219=>13430, +49220=>13431, +49221=>13432, +49222=>13433, +49223=>13434, +49224=>13435, +49225=>13436, +49226=>13437, +49227=>13438, +49228=>13439, +49229=>13440, +49230=>13441, +49231=>13442, +49232=>13443, +49234=>13444, +49235=>13445, +49236=>13446, +49237=>13447, +49238=>13448, +49239=>13449, +49241=>13450, +49242=>13451, +49243=>13452, +49245=>13453, +49246=>13454, +49247=>13455, +49249=>13456, +49250=>13457, +49251=>13458, +49252=>13459, +49253=>13460, +49254=>13461, +49255=>13462, +49258=>13463, +49259=>13464, +49260=>13465, +49261=>13466, +49262=>13467, +49263=>13468, +49264=>13469, +49265=>13470, +49266=>13471, +49267=>13472, +49268=>13473, +49269=>13474, +49270=>13475, +49271=>13476, +49272=>13477, +49273=>13478, +49274=>13479, +49275=>13480, +49276=>13481, +49277=>13482, +49278=>13483, +49279=>13484, +49280=>13485, +49281=>13486, +49282=>13487, +49283=>13488, +49284=>13489, +49285=>13490, +49286=>13491, +49287=>13492, +49288=>13493, +49289=>13494, +49290=>13495, +49291=>13496, +49292=>13497, +49293=>13498, +49294=>13499, +49295=>13500, +49298=>13501, +49299=>13502, +49301=>13503, +49302=>13504, +49303=>13505, +49305=>13506, +49306=>13507, +49307=>13508, +49308=>13509, +49309=>13510, +49310=>13511, +49311=>13512, +49314=>13513, +49316=>13514, +49318=>13515, +49319=>13516, +49320=>13517, +49321=>13518, +49322=>13519, +49323=>13520, +49326=>13521, +49329=>13522, +49330=>13523, +49335=>13524, +49336=>13525, +49337=>13526, +49338=>13527, +49339=>13528, +49342=>13529, +49346=>13530, +49347=>13531, +49348=>13532, +49350=>13533, +49351=>13534, +49354=>13535, +49355=>13536, +49357=>13537, +49358=>13538, +49359=>13539, +49361=>13540, +49362=>13541, +49363=>13542, +49364=>13543, +49365=>13544, +49366=>13545, +49367=>13546, +49370=>13547, +49374=>13548, +49375=>13549, +49376=>13550, +49377=>13551, +49378=>13552, +49379=>13553, +49382=>13554, +49383=>13555, +49385=>13556, +49386=>13557, +49387=>13558, +49389=>13559, +49390=>13560, +49391=>13561, +49392=>13562, +49393=>13563, +49394=>13564, +49395=>13565, +49398=>13566, +49400=>13567, +49402=>13568, +49403=>13569, +49404=>13570, +49405=>13571, +49406=>13572, +49407=>13573, +49409=>13574, +49410=>13575, +49411=>13576, +49413=>13577, +49414=>13578, +49415=>13579, +49417=>13580, +49418=>13581, +49419=>13582, +49420=>13583, +49421=>13584, +49422=>13585, +49423=>13586, +49425=>13587, +49426=>13588, +49427=>13589, +49428=>13590, +49430=>13591, +49431=>13592, +49432=>13593, +49433=>13594, +49434=>13595, +49435=>13596, +49441=>13597, +49442=>13598, +49445=>13599, +49448=>13600, +49449=>13601, +49450=>13602, +49451=>13603, +49454=>13604, +49458=>13605, +49459=>13606, +49460=>13607, +49461=>13608, +49463=>13609, +49466=>13610, +49467=>13611, +49469=>13612, +49470=>13613, +49471=>13614, +49473=>13615, +49474=>13616, +49475=>13617, +49476=>13618, +49477=>13619, +49478=>13620, +49479=>13621, +49482=>13622, +49486=>13623, +49487=>13624, +49488=>13625, +49489=>13626, +49490=>13627, +49491=>13628, +49494=>13629, +49495=>13630, +49497=>13631, +49498=>13632, +49499=>13633, +49501=>13634, +49502=>13635, +49503=>13636, +49504=>13637, +49505=>13638, +49506=>13639, +49507=>13640, +49510=>13641, +49514=>13642, +49515=>13643, +49516=>13644, +49517=>13645, +49518=>13646, +49519=>13647, +49521=>13648, +49522=>13649, +49523=>13650, +49525=>13651, +49526=>13652, +49527=>13653, +49529=>13654, +49530=>13655, +49531=>13656, +49532=>13657, +49533=>13658, +49534=>13659, +49535=>13660, +49536=>13661, +49537=>13662, +49538=>13663, +49539=>13664, +49540=>13665, +49542=>13666, +49543=>13667, +49544=>13668, +49545=>13669, +49546=>13670, +49547=>13671, +49551=>13672, +49553=>13673, +49554=>13674, +49555=>13675, +49557=>13676, +49559=>13677, +49560=>13678, +49561=>13679, +49562=>13680, +49563=>13681, +49566=>13682, +49568=>13683, +49570=>13684, +49571=>13685, +49572=>13686, +49574=>13687, +49575=>13688, +49578=>13689, +49579=>13690, +49581=>13691, +49582=>13692, +49583=>13693, +49585=>13694, +49586=>13695, +49587=>13696, +49588=>13697, +49589=>13698, +49590=>13699, +49591=>13700, +49592=>13701, +49593=>13702, +49594=>13703, +49595=>13704, +49596=>13705, +49598=>13706, +49599=>13707, +49600=>13708, +49601=>13709, +49602=>13710, +49603=>13711, +49605=>13712, +49606=>13713, +49607=>13714, +49609=>13715, +49610=>13716, +49611=>13717, +49613=>13718, +49614=>13719, +49615=>13720, +49616=>13721, +49617=>13722, +49618=>13723, +49619=>13724, +49621=>13725, +49622=>13726, +49625=>13727, +49626=>13728, +49627=>13729, +49628=>13730, +49629=>13731, +49630=>13732, +49631=>13733, +49633=>13734, +49634=>13735, +49635=>13736, +49637=>13737, +49638=>13738, +49639=>13739, +49641=>13740, +49642=>13741, +49643=>13742, +49644=>13743, +49645=>13744, +49646=>13745, +49647=>13746, +49650=>13747, +49652=>13748, +49653=>13749, +49654=>13750, +49655=>13751, +49656=>13752, +49657=>13753, +49658=>13754, +49659=>13755, +49662=>13756, +49663=>13757, +49665=>13758, +49666=>13759, +49667=>13760, +49669=>13761, +49670=>13762, +49671=>13763, +49672=>13764, +49673=>13765, +49674=>13766, +49675=>13767, +49678=>13768, +49680=>13769, +49682=>13770, +49683=>13771, +49684=>13772, +49685=>13773, +49686=>13774, +49687=>13775, +49690=>13776, +49691=>13777, +49693=>13778, +49694=>13779, +49697=>13780, +49698=>13781, +49699=>13782, +49700=>13783, +49701=>13784, +49702=>13785, +49703=>13786, +49706=>13787, +49708=>13788, +49710=>13789, +49712=>13790, +49715=>13791, +49717=>13792, +49718=>13793, +49719=>13794, +49720=>13795, +49721=>13796, +49722=>13797, +49723=>13798, +49724=>13799, +49725=>13800, +49726=>13801, +49727=>13802, +49728=>13803, +49729=>13804, +49730=>13805, +49731=>13806, +49732=>13807, +49733=>13808, +49734=>13809, +49735=>13810, +49737=>13811, +49738=>13812, +49739=>13813, +49740=>13814, +49741=>13815, +49742=>13816, +49743=>13817, +49746=>13818, +49747=>13819, +49749=>13820, +49750=>13821, +49751=>13822, +49753=>13823, +49754=>13824, +49755=>13825, +49756=>13826, +49757=>13827, +49758=>13828, +49759=>13829, +49761=>13830, +49762=>13831, +49763=>13832, +49764=>13833, +49766=>13834, +49767=>13835, +49768=>13836, +49769=>13837, +49770=>13838, +49771=>13839, +49774=>13840, +49775=>13841, +49777=>13842, +49778=>13843, +49779=>13844, +49781=>13845, +49782=>13846, +49783=>13847, +49784=>13848, +49785=>13849, +49786=>13850, +49787=>13851, +49790=>13852, +49792=>13853, +49794=>13854, +49795=>13855, +49796=>13856, +49797=>13857, +49798=>13858, +49799=>13859, +49802=>13860, +49803=>13861, +49804=>13862, +49805=>13863, +49806=>13864, +49807=>13865, +49809=>13866, +49810=>13867, +49811=>13868, +49812=>13869, +49813=>13870, +49814=>13871, +49815=>13872, +49817=>13873, +49818=>13874, +49820=>13875, +49822=>13876, +49823=>13877, +49824=>13878, +49825=>13879, +49826=>13880, +49827=>13881, +49830=>13882, +49831=>13883, +49833=>13884, +49834=>13885, +49835=>13886, +49838=>13887, +49839=>13888, +49840=>13889, +49841=>13890, +49842=>13891, +49843=>13892, +49846=>13893, +49848=>13894, +49850=>13895, +49851=>13896, +49852=>13897, +49853=>13898, +49854=>13899, +49855=>13900, +49856=>13901, +49857=>13902, +49858=>13903, +49859=>13904, +49860=>13905, +49861=>13906, +49862=>13907, +49863=>13908, +49864=>13909, +49865=>13910, +49866=>13911, +49867=>13912, +49868=>13913, +49869=>13914, +49870=>13915, +49871=>13916, +49872=>13917, +49873=>13918, +49874=>13919, +49875=>13920, +49876=>13921, +49877=>13922, +49878=>13923, +49879=>13924, +49880=>13925, +49881=>13926, +49882=>13927, +49883=>13928, +49886=>13929, +49887=>13930, +49889=>13931, +49890=>13932, +49893=>13933, +49894=>13934, +49895=>13935, +49896=>13936, +49897=>13937, +49898=>13938, +49902=>13939, +49904=>13940, +49906=>13941, +49907=>13942, +49908=>13943, +49909=>13944, +49911=>13945, +49914=>13946, +49917=>13947, +49918=>13948, +49919=>13949, +49921=>13950, +49922=>13951, +49923=>13952, +49924=>13953, +49925=>13954, +49926=>13955, +49927=>13956, +49930=>13957, +49931=>13958, +49934=>13959, +49935=>13960, +49936=>13961, +49937=>13962, +49938=>13963, +49942=>13964, +49943=>13965, +49945=>13966, +49946=>13967, +49947=>13968, +49949=>13969, +49950=>13970, +49951=>13971, +49952=>13972, +49953=>13973, +49954=>13974, +49955=>13975, +49958=>13976, +49959=>13977, +49962=>13978, +49963=>13979, +49964=>13980, +49965=>13981, +49966=>13982, +49967=>13983, +49968=>13984, +49969=>13985, +49970=>13986, +49971=>13987, +49972=>13988, +49973=>13989, +49974=>13990, +49975=>13991, +49976=>13992, +49977=>13993, +49978=>13994, +49979=>13995, +49980=>13996, +49981=>13997, +49982=>13998, +49983=>13999, +49984=>14000, +49985=>14001, +49986=>14002, +49987=>14003, +49988=>14004, +49990=>14005, +49991=>14006, +49992=>14007, +49993=>14008, +49994=>14009, +49995=>14010, +49996=>14011, +49997=>14012, +49998=>14013, +49999=>14014, +50000=>14015, +50001=>14016, +50002=>14017, +50003=>14018, +50004=>14019, +50005=>14020, +50006=>14021, +50007=>14022, +50008=>14023, +50009=>14024, +50010=>14025, +50011=>14026, +50012=>14027, +50013=>14028, +50014=>14029, +50015=>14030, +50016=>14031, +50017=>14032, +50018=>14033, +50019=>14034, +50020=>14035, +50021=>14036, +50022=>14037, +50023=>14038, +50026=>14039, +50027=>14040, +50029=>14041, +50030=>14042, +50031=>14043, +50033=>14044, +50035=>14045, +50036=>14046, +50037=>14047, +50038=>14048, +50039=>14049, +50042=>14050, +50043=>14051, +50046=>14052, +50047=>14053, +50048=>14054, +50049=>14055, +50050=>14056, +50051=>14057, +50053=>14058, +50054=>14059, +50055=>14060, +50057=>14061, +50058=>14062, +50059=>14063, +50061=>14064, +50062=>14065, +50063=>14066, +50064=>14067, +50065=>14068, +50066=>14069, +50067=>14070, +50068=>14071, +50069=>14072, +50070=>14073, +50071=>14074, +50072=>14075, +50073=>14076, +50074=>14077, +50075=>14078, +50076=>14079, +50077=>14080, +50078=>14081, +50079=>14082, +50080=>14083, +50081=>14084, +50082=>14085, +50083=>14086, +50084=>14087, +50085=>14088, +50086=>14089, +50087=>14090, +50088=>14091, +50089=>14092, +50090=>14093, +50091=>14094, +50092=>14095, +50093=>14096, +50094=>14097, +50095=>14098, +50096=>14099, +50097=>14100, +50098=>14101, +50099=>14102, +50100=>14103, +50101=>14104, +50102=>14105, +50103=>14106, +50104=>14107, +50105=>14108, +50106=>14109, +50107=>14110, +50108=>14111, +50109=>14112, +50110=>14113, +50111=>14114, +50113=>14115, +50114=>14116, +50115=>14117, +50116=>14118, +50117=>14119, +50118=>14120, +50119=>14121, +50120=>14122, +50121=>14123, +50122=>14124, +50123=>14125, +50124=>14126, +50125=>14127, +50126=>14128, +50127=>14129, +50128=>14130, +50129=>14131, +50130=>14132, +50131=>14133, +50132=>14134, +50133=>14135, +50134=>14136, +50135=>14137, +50138=>14138, +50139=>14139, +50141=>14140, +50142=>14141, +50145=>14142, +50147=>14143, +50148=>14144, +50149=>14145, +50150=>14146, +50151=>14147, +50154=>14148, +50155=>14149, +50156=>14150, +50158=>14151, +50159=>14152, +50160=>14153, +50161=>14154, +50162=>14155, +50163=>14156, +50166=>14157, +50167=>14158, +50169=>14159, +50170=>14160, +50171=>14161, +50172=>14162, +50173=>14163, +50174=>14164, +50175=>14165, +50176=>14166, +50177=>14167, +50178=>14168, +50179=>14169, +50180=>14170, +50181=>14171, +50182=>14172, +50183=>14173, +50185=>14174, +50186=>14175, +50187=>14176, +50188=>14177, +50189=>14178, +50190=>14179, +50191=>14180, +50193=>14181, +50194=>14182, +50195=>14183, +50196=>14184, +50197=>14185, +50198=>14186, +50199=>14187, +50200=>14188, +50201=>14189, +50202=>14190, +50203=>14191, +50204=>14192, +50205=>14193, +50206=>14194, +50207=>14195, +50208=>14196, +50209=>14197, +50210=>14198, +50211=>14199, +50213=>14200, +50214=>14201, +50215=>14202, +50216=>14203, +50217=>14204, +50218=>14205, +50219=>14206, +50221=>14207, +50222=>14208, +50223=>14209, +50225=>14210, +50226=>14211, +50227=>14212, +50229=>14213, +50230=>14214, +50231=>14215, +50232=>14216, +50233=>14217, +50234=>14218, +50235=>14219, +50238=>14220, +50239=>14221, +50240=>14222, +50241=>14223, +50242=>14224, +50243=>14225, +50244=>14226, +50245=>14227, +50246=>14228, +50247=>14229, +50249=>14230, +50250=>14231, +50251=>14232, +50252=>14233, +50253=>14234, +50254=>14235, +50255=>14236, +50256=>14237, +50257=>14238, +50258=>14239, +50259=>14240, +50260=>14241, +50261=>14242, +50262=>14243, +50263=>14244, +50264=>14245, +50265=>14246, +50266=>14247, +50267=>14248, +50268=>14249, +50269=>14250, +50270=>14251, +50271=>14252, +50272=>14253, +50273=>14254, +50274=>14255, +50275=>14256, +50278=>14257, +50279=>14258, +50281=>14259, +50282=>14260, +50283=>14261, +50285=>14262, +50286=>14263, +50287=>14264, +50288=>14265, +50289=>14266, +50290=>14267, +50291=>14268, +50294=>14269, +50295=>14270, +50296=>14271, +50298=>14272, +50299=>14273, +50300=>14274, +50301=>14275, +50302=>14276, +50303=>14277, +50305=>14278, +50306=>14279, +50307=>14280, +50308=>14281, +50309=>14282, +50310=>14283, +50311=>14284, +50312=>14285, +50313=>14286, +50314=>14287, +50315=>14288, +50316=>14289, +50317=>14290, +50318=>14291, +50319=>14292, +50320=>14293, +50321=>14294, +50322=>14295, +50323=>14296, +50325=>14297, +50326=>14298, +50327=>14299, +50328=>14300, +50329=>14301, +50330=>14302, +50331=>14303, +50333=>14304, +50334=>14305, +50335=>14306, +50336=>14307, +50337=>14308, +50338=>14309, +50339=>14310, +50340=>14311, +50341=>14312, +50342=>14313, +50343=>14314, +50344=>14315, +50345=>14316, +50346=>14317, +50347=>14318, +50348=>14319, +50349=>14320, +50350=>14321, +50351=>14322, +50352=>14323, +50353=>14324, +50354=>14325, +50355=>14326, +50356=>14327, +50357=>14328, +50358=>14329, +50359=>14330, +50361=>14331, +50362=>14332, +50363=>14333, +50365=>14334, +50366=>14335, +50367=>14336, +50368=>14337, +50369=>14338, +50370=>14339, +50371=>14340, +50372=>14341, +50373=>14342, +50374=>14343, +50375=>14344, +50376=>14345, +50377=>14346, +50378=>14347, +50379=>14348, +50380=>14349, +50381=>14350, +50382=>14351, +50383=>14352, +50384=>14353, +50385=>14354, +50386=>14355, +50387=>14356, +50388=>14357, +50389=>14358, +50390=>14359, +50391=>14360, +50392=>14361, +50393=>14362, +50394=>14363, +50395=>14364, +50396=>14365, +50397=>14366, +50398=>14367, +50399=>14368, +50400=>14369, +50401=>14370, +50402=>14371, +50403=>14372, +50404=>14373, +50405=>14374, +50406=>14375, +50407=>14376, +50408=>14377, +50410=>14378, +50411=>14379, +50412=>14380, +50413=>14381, +50414=>14382, +50415=>14383, +50418=>14384, +50419=>14385, +50421=>14386, +50422=>14387, +50423=>14388, +50425=>14389, +50427=>14390, +50428=>14391, +50429=>14392, +50430=>14393, +50434=>14394, +50435=>14395, +50436=>14396, +50437=>14397, +50438=>14398, +50439=>14399, +50440=>14400, +50441=>14401, +50442=>14402, +50443=>14403, +50445=>14404, +50446=>14405, +50447=>14406, +50449=>14407, +50450=>14408, +50451=>14409, +50453=>14410, +50454=>14411, +50455=>14412, +50456=>14413, +50457=>14414, +50458=>14415, +50459=>14416, +50461=>14417, +50462=>14418, +50463=>14419, +50464=>14420, +50465=>14421, +50466=>14422, +50467=>14423, +50468=>14424, +50469=>14425, +50470=>14426, +50471=>14427, +50474=>14428, +50475=>14429, +50477=>14430, +50478=>14431, +50479=>14432, +50481=>14433, +50482=>14434, +50483=>14435, +50484=>14436, +50485=>14437, +50486=>14438, +50487=>14439, +50490=>14440, +50492=>14441, +50494=>14442, +50495=>14443, +50496=>14444, +50497=>14445, +50498=>14446, +50499=>14447, +50502=>14448, +50503=>14449, +50507=>14450, +50511=>14451, +50512=>14452, +50513=>14453, +50514=>14454, +50518=>14455, +50522=>14456, +50523=>14457, +50524=>14458, +50527=>14459, +50530=>14460, +50531=>14461, +50533=>14462, +50534=>14463, +50535=>14464, +50537=>14465, +50538=>14466, +50539=>14467, +50540=>14468, +50541=>14469, +50542=>14470, +50543=>14471, +50546=>14472, +50550=>14473, +50551=>14474, +50552=>14475, +50553=>14476, +50554=>14477, +50555=>14478, +50558=>14479, +50559=>14480, +50561=>14481, +50562=>14482, +50563=>14483, +50565=>14484, +50566=>14485, +50568=>14486, +50569=>14487, +50570=>14488, +50571=>14489, +50574=>14490, +50576=>14491, +50578=>14492, +50579=>14493, +50580=>14494, +50582=>14495, +50585=>14496, +50586=>14497, +50587=>14498, +50589=>14499, +50590=>14500, +50591=>14501, +50593=>14502, +50594=>14503, +50595=>14504, +50596=>14505, +50597=>14506, +50598=>14507, +50599=>14508, +50600=>14509, +50602=>14510, +50603=>14511, +50604=>14512, +50605=>14513, +50606=>14514, +50607=>14515, +50608=>14516, +50609=>14517, +50610=>14518, +50611=>14519, +50614=>14520, +50615=>14521, +50618=>14522, +50623=>14523, +50624=>14524, +50625=>14525, +50626=>14526, +50627=>14527, +50635=>14528, +50637=>14529, +50639=>14530, +50642=>14531, +50643=>14532, +50645=>14533, +50646=>14534, +50647=>14535, +50649=>14536, +50650=>14537, +50651=>14538, +50652=>14539, +50653=>14540, +50654=>14541, +50655=>14542, +50658=>14543, +50660=>14544, +50662=>14545, +50663=>14546, +50664=>14547, +50665=>14548, +50666=>14549, +50667=>14550, +50671=>14551, +50673=>14552, +50674=>14553, +50675=>14554, +50677=>14555, +50680=>14556, +50681=>14557, +50682=>14558, +50683=>14559, +50690=>14560, +50691=>14561, +50692=>14562, +50697=>14563, +50698=>14564, +50699=>14565, +50701=>14566, +50702=>14567, +50703=>14568, +50705=>14569, +50706=>14570, +50707=>14571, +50708=>14572, +50709=>14573, +50710=>14574, +50711=>14575, +50714=>14576, +50717=>14577, +50718=>14578, +50719=>14579, +50720=>14580, +50721=>14581, +50722=>14582, +50723=>14583, +50726=>14584, +50727=>14585, +50729=>14586, +50730=>14587, +50731=>14588, +50735=>14589, +50737=>14590, +50738=>14591, +50742=>14592, +50744=>14593, +50746=>14594, +50748=>14595, +50749=>14596, +50750=>14597, +50751=>14598, +50754=>14599, +50755=>14600, +50757=>14601, +50758=>14602, +50759=>14603, +50761=>14604, +50762=>14605, +50763=>14606, +50764=>14607, +50765=>14608, +50766=>14609, +50767=>14610, +50770=>14611, +50774=>14612, +50775=>14613, +50776=>14614, +50777=>14615, +50778=>14616, +50779=>14617, +50782=>14618, +50783=>14619, +50785=>14620, +50786=>14621, +50787=>14622, +50788=>14623, +50789=>14624, +50790=>14625, +50791=>14626, +50792=>14627, +50793=>14628, +50794=>14629, +50795=>14630, +50797=>14631, +50798=>14632, +50800=>14633, +50802=>14634, +50803=>14635, +50804=>14636, +50805=>14637, +50806=>14638, +50807=>14639, +50810=>14640, +50811=>14641, +50813=>14642, +50814=>14643, +50815=>14644, +50817=>14645, +50818=>14646, +50819=>14647, +50820=>14648, +50821=>14649, +50822=>14650, +50823=>14651, +50826=>14652, +50828=>14653, +50830=>14654, +50831=>14655, +50832=>14656, +50833=>14657, +50834=>14658, +50835=>14659, +50838=>14660, +50839=>14661, +50841=>14662, +50842=>14663, +50843=>14664, +50845=>14665, +50846=>14666, +50847=>14667, +50848=>14668, +50849=>14669, +50850=>14670, +50851=>14671, +50854=>14672, +50856=>14673, +50858=>14674, +50859=>14675, +50860=>14676, +50861=>14677, +50862=>14678, +50863=>14679, +50866=>14680, +50867=>14681, +50869=>14682, +50870=>14683, +50871=>14684, +50875=>14685, +50876=>14686, +50877=>14687, +50878=>14688, +50879=>14689, +50882=>14690, +50884=>14691, +50886=>14692, +50887=>14693, +50888=>14694, +50889=>14695, +50890=>14696, +50891=>14697, +50894=>14698, +50895=>14699, +50897=>14700, +50898=>14701, +50899=>14702, +50901=>14703, +50902=>14704, +50903=>14705, +50904=>14706, +50905=>14707, +50906=>14708, +50907=>14709, +50910=>14710, +50911=>14711, +50914=>14712, +50915=>14713, +50916=>14714, +50917=>14715, +50918=>14716, +50919=>14717, +50922=>14718, +50923=>14719, +50925=>14720, +50926=>14721, +50927=>14722, +50929=>14723, +50930=>14724, +50931=>14725, +50932=>14726, +50933=>14727, +50934=>14728, +50935=>14729, +50938=>14730, +50939=>14731, +50940=>14732, +50942=>14733, +50943=>14734, +50944=>14735, +50945=>14736, +50946=>14737, +50947=>14738, +50950=>14739, +50951=>14740, +50953=>14741, +50954=>14742, +50955=>14743, +50957=>14744, +50958=>14745, +50959=>14746, +50960=>14747, +50961=>14748, +50962=>14749, +50963=>14750, +50966=>14751, +50968=>14752, +50970=>14753, +50971=>14754, +50972=>14755, +50973=>14756, +50974=>14757, +50975=>14758, +50978=>14759, +50979=>14760, +50981=>14761, +50982=>14762, +50983=>14763, +50985=>14764, +50986=>14765, +50987=>14766, +50988=>14767, +50989=>14768, +50990=>14769, +50991=>14770, +50994=>14771, +50996=>14772, +50998=>14773, +51000=>14774, +51001=>14775, +51002=>14776, +51003=>14777, +51006=>14778, +51007=>14779, +51009=>14780, +51010=>14781, +51011=>14782, +51013=>14783, +51014=>14784, +51015=>14785, +51016=>14786, +51017=>14787, +51019=>14788, +51022=>14789, +51024=>14790, +51033=>14791, +51034=>14792, +51035=>14793, +51037=>14794, +51038=>14795, +51039=>14796, +51041=>14797, +51042=>14798, +51043=>14799, +51044=>14800, +51045=>14801, +51046=>14802, +51047=>14803, +51049=>14804, +51050=>14805, +51052=>14806, +51053=>14807, +51054=>14808, +51055=>14809, +51056=>14810, +51057=>14811, +51058=>14812, +51059=>14813, +51062=>14814, +51063=>14815, +51065=>14816, +51066=>14817, +51067=>14818, +51071=>14819, +51072=>14820, +51073=>14821, +51074=>14822, +51078=>14823, +51083=>14824, +51084=>14825, +51085=>14826, +51087=>14827, +51090=>14828, +51091=>14829, +51093=>14830, +51097=>14831, +51099=>14832, +51100=>14833, +51101=>14834, +51102=>14835, +51103=>14836, +51106=>14837, +51111=>14838, +51112=>14839, +51113=>14840, +51114=>14841, +51115=>14842, +51118=>14843, +51119=>14844, +51121=>14845, +51122=>14846, +51123=>14847, +51125=>14848, +51126=>14849, +51127=>14850, +51128=>14851, +51129=>14852, +51130=>14853, +51131=>14854, +51134=>14855, +51138=>14856, +51139=>14857, +51140=>14858, +51141=>14859, +51142=>14860, +51143=>14861, +51146=>14862, +51147=>14863, +51149=>14864, +51151=>14865, +51153=>14866, +51154=>14867, +51155=>14868, +51156=>14869, +51157=>14870, +51158=>14871, +51159=>14872, +51161=>14873, +51162=>14874, +51163=>14875, +51164=>14876, +51166=>14877, +51167=>14878, +51168=>14879, +51169=>14880, +51170=>14881, +51171=>14882, +51173=>14883, +51174=>14884, +51175=>14885, +51177=>14886, +51178=>14887, +51179=>14888, +51181=>14889, +51182=>14890, +51183=>14891, +51184=>14892, +51185=>14893, +51186=>14894, +51187=>14895, +51188=>14896, +51189=>14897, +51190=>14898, +51191=>14899, +51192=>14900, +51193=>14901, +51194=>14902, +51195=>14903, +51196=>14904, +51197=>14905, +51198=>14906, +51199=>14907, +51202=>14908, +51203=>14909, +51205=>14910, +51206=>14911, +51207=>14912, +51209=>14913, +51211=>14914, +51212=>14915, +51213=>14916, +51214=>14917, +51215=>14918, +51218=>14919, +51220=>14920, +51223=>14921, +51224=>14922, +51225=>14923, +51226=>14924, +51227=>14925, +51230=>14926, +51231=>14927, +51233=>14928, +51234=>14929, +51235=>14930, +51237=>14931, +51238=>14932, +51239=>14933, +51240=>14934, +51241=>14935, +51242=>14936, +51243=>14937, +51246=>14938, +51248=>14939, +51250=>14940, +51251=>14941, +51252=>14942, +51253=>14943, +51254=>14944, +51255=>14945, +51257=>14946, +51258=>14947, +51259=>14948, +51261=>14949, +51262=>14950, +51263=>14951, +51265=>14952, +51266=>14953, +51267=>14954, +51268=>14955, +51269=>14956, +51270=>14957, +51271=>14958, +51274=>14959, +51275=>14960, +51278=>14961, +51279=>14962, +51280=>14963, +51281=>14964, +51282=>14965, +51283=>14966, +51285=>14967, +51286=>14968, +51287=>14969, +51288=>14970, +51289=>14971, +51290=>14972, +51291=>14973, +51292=>14974, +51293=>14975, +51294=>14976, +51295=>14977, +51296=>14978, +51297=>14979, +51298=>14980, +51299=>14981, +51300=>14982, +51301=>14983, +51302=>14984, +51303=>14985, +51304=>14986, +51305=>14987, +51306=>14988, +51307=>14989, +51308=>14990, +51309=>14991, +51310=>14992, +51311=>14993, +51314=>14994, +51315=>14995, +51317=>14996, +51318=>14997, +51319=>14998, +51321=>14999, +51323=>15000, +51324=>15001, +51325=>15002, +51326=>15003, +51327=>15004, +51330=>15005, +51332=>15006, +51336=>15007, +51337=>15008, +51338=>15009, +51342=>15010, +51343=>15011, +51344=>15012, +51345=>15013, +51346=>15014, +51347=>15015, +51349=>15016, +51350=>15017, +51351=>15018, +51352=>15019, +51353=>15020, +51354=>15021, +51355=>15022, +51356=>15023, +51358=>15024, +51360=>15025, +51362=>15026, +51363=>15027, +51364=>15028, +51365=>15029, +51366=>15030, +51367=>15031, +51369=>15032, +51370=>15033, +51371=>15034, +51372=>15035, +51373=>15036, +51374=>15037, +51375=>15038, +51376=>15039, +51377=>15040, +51378=>15041, +51379=>15042, +51380=>15043, +51381=>15044, +51382=>15045, +51383=>15046, +51384=>15047, +51385=>15048, +51386=>15049, +51387=>15050, +51390=>15051, +51391=>15052, +51392=>15053, +51393=>15054, +51394=>15055, +51395=>15056, +51397=>15057, +51398=>15058, +51399=>15059, +51401=>15060, +51402=>15061, +51403=>15062, +51405=>15063, +51406=>15064, +51407=>15065, +51408=>15066, +51409=>15067, +51410=>15068, +51411=>15069, +51414=>15070, +51416=>15071, +51418=>15072, +51419=>15073, +51420=>15074, +51421=>15075, +51422=>15076, +51423=>15077, +51426=>15078, +51427=>15079, +51429=>15080, +51430=>15081, +51431=>15082, +51432=>15083, +51433=>15084, +51434=>15085, +51435=>15086, +51436=>15087, +51437=>15088, +51438=>15089, +51439=>15090, +51440=>15091, +51441=>15092, +51442=>15093, +51443=>15094, +51444=>15095, +51446=>15096, +51447=>15097, +51448=>15098, +51449=>15099, +51450=>15100, +51451=>15101, +51454=>15102, +51455=>15103, +51457=>15104, +51458=>15105, +51459=>15106, +51463=>15107, +51464=>15108, +51465=>15109, +51466=>15110, +51467=>15111, +51470=>15112, +51472=>15113, +51474=>15114, +51475=>15115, +51476=>15116, +51477=>15117, +51478=>15118, +51479=>15119, +51481=>15120, +51482=>15121, +51483=>15122, +51484=>15123, +51485=>15124, +51486=>15125, +51487=>15126, +51488=>15127, +51489=>15128, +51490=>15129, +51491=>15130, +51492=>15131, +51493=>15132, +51494=>15133, +51495=>15134, +51496=>15135, +51497=>15136, +51498=>15137, +51499=>15138, +51501=>15139, +51502=>15140, +51503=>15141, +51504=>15142, +51505=>15143, +51506=>15144, +51507=>15145, +51509=>15146, +51510=>15147, +51511=>15148, +51512=>15149, +51513=>15150, +51514=>15151, +51515=>15152, +51516=>15153, +51517=>15154, +51518=>15155, +51519=>15156, +51520=>15157, +51521=>15158, +51522=>15159, +51523=>15160, +51524=>15161, +51525=>15162, +51526=>15163, +51527=>15164, +51528=>15165, +51529=>15166, +51530=>15167, +51531=>15168, +51532=>15169, +51533=>15170, +51534=>15171, +51535=>15172, +51538=>15173, +51539=>15174, +51541=>15175, +51542=>15176, +51543=>15177, +51545=>15178, +51546=>15179, +51547=>15180, +51548=>15181, +51549=>15182, +51550=>15183, +51551=>15184, +51554=>15185, +51556=>15186, +51557=>15187, +51558=>15188, +51559=>15189, +51560=>15190, +51561=>15191, +51562=>15192, +51563=>15193, +51565=>15194, +51566=>15195, +51567=>15196, +51569=>15197, +51570=>15198, +51571=>15199, +51573=>15200, +51574=>15201, +51575=>15202, +51576=>15203, +51577=>15204, +51578=>15205, +51579=>15206, +51581=>15207, +51582=>15208, +51583=>15209, +51584=>15210, +51585=>15211, +51586=>15212, +51587=>15213, +51588=>15214, +51589=>15215, +51590=>15216, +51591=>15217, +51594=>15218, +51595=>15219, +51597=>15220, +51598=>15221, +51599=>15222, +51601=>15223, +51602=>15224, +51603=>15225, +51604=>15226, +51605=>15227, +51606=>15228, +51607=>15229, +51610=>15230, +51612=>15231, +51614=>15232, +51615=>15233, +51616=>15234, +51617=>15235, +51618=>15236, +51619=>15237, +51620=>15238, +51621=>15239, +51622=>15240, +51623=>15241, +51624=>15242, +51625=>15243, +51626=>15244, +51627=>15245, +51628=>15246, +51629=>15247, +51630=>15248, +51631=>15249, +51632=>15250, +51633=>15251, +51634=>15252, +51635=>15253, +51636=>15254, +51637=>15255, +51638=>15256, +51639=>15257, +51640=>15258, +51641=>15259, +51642=>15260, +51643=>15261, +51644=>15262, +51645=>15263, +51646=>15264, +51647=>15265, +51650=>15266, +51651=>15267, +51653=>15268, +51654=>15269, +51657=>15270, +51659=>15271, +51660=>15272, +51661=>15273, +51662=>15274, +51663=>15275, +51666=>15276, +51668=>15277, +51671=>15278, +51672=>15279, +51675=>15280, +51678=>15281, +51679=>15282, +51681=>15283, +51683=>15284, +51685=>15285, +51686=>15286, +51688=>15287, +51689=>15288, +51690=>15289, +51691=>15290, +51694=>15291, +51698=>15292, +51699=>15293, +51700=>15294, +51701=>15295, +51702=>15296, +51703=>15297, +51706=>15298, +51707=>15299, +51709=>15300, +51710=>15301, +51711=>15302, +51713=>15303, +51714=>15304, +51715=>15305, +51716=>15306, +51717=>15307, +51718=>15308, +51719=>15309, +51722=>15310, +51726=>15311, +51727=>15312, +51728=>15313, +51729=>15314, +51730=>15315, +51731=>15316, +51733=>15317, +51734=>15318, +51735=>15319, +51737=>15320, +51738=>15321, +51739=>15322, +51740=>15323, +51741=>15324, +51742=>15325, +51743=>15326, +51744=>15327, +51745=>15328, +51746=>15329, +51747=>15330, +51748=>15331, +51749=>15332, +51750=>15333, +51751=>15334, +51752=>15335, +51754=>15336, +51755=>15337, +51756=>15338, +51757=>15339, +51758=>15340, +51759=>15341, +51760=>15342, +51761=>15343, +51762=>15344, +51763=>15345, +51764=>15346, +51765=>15347, +51766=>15348, +51767=>15349, +51768=>15350, +51769=>15351, +51770=>15352, +51771=>15353, +51772=>15354, +51773=>15355, +51774=>15356, +51775=>15357, +51776=>15358, +51777=>15359, +51778=>15360, +51779=>15361, +51780=>15362, +51781=>15363, +51782=>15364, +51783=>15365, +51784=>15366, +51785=>15367, +51786=>15368, +51787=>15369, +51790=>15370, +51791=>15371, +51793=>15372, +51794=>15373, +51795=>15374, +51797=>15375, +51798=>15376, +51799=>15377, +51800=>15378, +51801=>15379, +51802=>15380, +51803=>15381, +51806=>15382, +51810=>15383, +51811=>15384, +51812=>15385, +51813=>15386, +51814=>15387, +51815=>15388, +51817=>15389, +51818=>15390, +51819=>15391, +51820=>15392, +51821=>15393, +51822=>15394, +51823=>15395, +51824=>15396, +51825=>15397, +51826=>15398, +51827=>15399, +51828=>15400, +51829=>15401, +51830=>15402, +51831=>15403, +51832=>15404, +51833=>15405, +51834=>15406, +51835=>15407, +51836=>15408, +51838=>15409, +51839=>15410, +51840=>15411, +51841=>15412, +51842=>15413, +51843=>15414, +51845=>15415, +51846=>15416, +51847=>15417, +51848=>15418, +51849=>15419, +51850=>15420, +51851=>15421, +51852=>15422, +51853=>15423, +51854=>15424, +51855=>15425, +51856=>15426, +51857=>15427, +51858=>15428, +51859=>15429, +51860=>15430, +51861=>15431, +51862=>15432, +51863=>15433, +51865=>15434, +51866=>15435, +51867=>15436, +51868=>15437, +51869=>15438, +51870=>15439, +51871=>15440, +51872=>15441, +51873=>15442, +51874=>15443, +51875=>15444, +51876=>15445, +51877=>15446, +51878=>15447, +51879=>15448, +51880=>15449, +51881=>15450, +51882=>15451, +51883=>15452, +51884=>15453, +51885=>15454, +51886=>15455, +51887=>15456, +51888=>15457, +51889=>15458, +51890=>15459, +51891=>15460, +51892=>15461, +51893=>15462, +51894=>15463, +51895=>15464, +51896=>15465, +51897=>15466, +51898=>15467, +51899=>15468, +51902=>15469, +51903=>15470, +51905=>15471, +51906=>15472, +51907=>15473, +51909=>15474, +51910=>15475, +51911=>15476, +51912=>15477, +51913=>15478, +51914=>15479, +51915=>15480, +51918=>15481, +51920=>15482, +51922=>15483, +51924=>15484, +51925=>15485, +51926=>15486, +51927=>15487, +51930=>15488, +51931=>15489, +51932=>15490, +51933=>15491, +51934=>15492, +51935=>15493, +51937=>15494, +51938=>15495, +51939=>15496, +51940=>15497, +51941=>15498, +51942=>15499, +51943=>15500, +51944=>15501, +51945=>15502, +51946=>15503, +51947=>15504, +51949=>15505, +51950=>15506, +51951=>15507, +51952=>15508, +51953=>15509, +51954=>15510, +51955=>15511, +51957=>15512, +51958=>15513, +51959=>15514, +51960=>15515, +51961=>15516, +51962=>15517, +51963=>15518, +51964=>15519, +51965=>15520, +51966=>15521, +51967=>15522, +51968=>15523, +51969=>15524, +51970=>15525, +51971=>15526, +51972=>15527, +51973=>15528, +51974=>15529, +51975=>15530, +51977=>15531, +51978=>15532, +51979=>15533, +51980=>15534, +51981=>15535, +51982=>15536, +51983=>15537, +51985=>15538, +51986=>15539, +51987=>15540, +51989=>15541, +51990=>15542, +51991=>15543, +51993=>15544, +51994=>15545, +51995=>15546, +51996=>15547, +51997=>15548, +51998=>15549, +51999=>15550, +52002=>15551, +52003=>15552, +52004=>15553, +52005=>15554, +52006=>15555, +52007=>15556, +52008=>15557, +52009=>15558, +52010=>15559, +52011=>15560, +52012=>15561, +52013=>15562, +52014=>15563, +52015=>15564, +52016=>15565, +52017=>15566, +52018=>15567, +52019=>15568, +52020=>15569, +52021=>15570, +52022=>15571, +52023=>15572, +52024=>15573, +52025=>15574, +52026=>15575, +52027=>15576, +52028=>15577, +52029=>15578, +52030=>15579, +52031=>15580, +52032=>15581, +52034=>15582, +52035=>15583, +52036=>15584, +52037=>15585, +52038=>15586, +52039=>15587, +52042=>15588, +52043=>15589, +52045=>15590, +52046=>15591, +52047=>15592, +52049=>15593, +52050=>15594, +52051=>15595, +52052=>15596, +52053=>15597, +52054=>15598, +52055=>15599, +52058=>15600, +52059=>15601, +52060=>15602, +52062=>15603, +52063=>15604, +52064=>15605, +52065=>15606, +52066=>15607, +52067=>15608, +52069=>15609, +52070=>15610, +52071=>15611, +52072=>15612, +52073=>15613, +52074=>15614, +52075=>15615, +52076=>15616, +52077=>15617, +52078=>15618, +52079=>15619, +52080=>15620, +52081=>15621, +52082=>15622, +52083=>15623, +52084=>15624, +52085=>15625, +52086=>15626, +52087=>15627, +52090=>15628, +52091=>15629, +52092=>15630, +52093=>15631, +52094=>15632, +52095=>15633, +52096=>15634, +52097=>15635, +52098=>15636, +52099=>15637, +52100=>15638, +52101=>15639, +52102=>15640, +52103=>15641, +52104=>15642, +52105=>15643, +52106=>15644, +52107=>15645, +52108=>15646, +52109=>15647, +52110=>15648, +52111=>15649, +52112=>15650, +52113=>15651, +52114=>15652, +52115=>15653, +52116=>15654, +52117=>15655, +52118=>15656, +52119=>15657, +52120=>15658, +52121=>15659, +52122=>15660, +52123=>15661, +52125=>15662, +52126=>15663, +52127=>15664, +52128=>15665, +52129=>15666, +52130=>15667, +52131=>15668, +52132=>15669, +52133=>15670, +52134=>15671, +52135=>15672, +52136=>15673, +52137=>15674, +52138=>15675, +52139=>15676, +52140=>15677, +52141=>15678, +52142=>15679, +52143=>15680, +52144=>15681, +52145=>15682, +52146=>15683, +52147=>15684, +52148=>15685, +52149=>15686, +52150=>15687, +52151=>15688, +52153=>15689, +52154=>15690, +52155=>15691, +52156=>15692, +52157=>15693, +52158=>15694, +52159=>15695, +52160=>15696, +52161=>15697, +52162=>15698, +52163=>15699, +52164=>15700, +52165=>15701, +52166=>15702, +52167=>15703, +52168=>15704, +52169=>15705, +52170=>15706, +52171=>15707, +52172=>15708, +52173=>15709, +52174=>15710, +52175=>15711, +52176=>15712, +52177=>15713, +52178=>15714, +52179=>15715, +52181=>15716, +52182=>15717, +52183=>15718, +52184=>15719, +52185=>15720, +52186=>15721, +52187=>15722, +52188=>15723, +52189=>15724, +52190=>15725, +52191=>15726, +52192=>15727, +52193=>15728, +52194=>15729, +52195=>15730, +52197=>15731, +52198=>15732, +52200=>15733, +52202=>15734, +52203=>15735, +52204=>15736, +52205=>15737, +52206=>15738, +52207=>15739, +52208=>15740, +52209=>15741, +52210=>15742, +52211=>15743, +52212=>15744, +52213=>15745, +52214=>15746, +52215=>15747, +52216=>15748, +52217=>15749, +52218=>15750, +52219=>15751, +52220=>15752, +52221=>15753, +52222=>15754, +52223=>15755, +52224=>15756, +52225=>15757, +52226=>15758, +52227=>15759, +52228=>15760, +52229=>15761, +52230=>15762, +52231=>15763, +52232=>15764, +52233=>15765, +52234=>15766, +52235=>15767, +52238=>15768, +52239=>15769, +52241=>15770, +52242=>15771, +52243=>15772, +52245=>15773, +52246=>15774, +52247=>15775, +52248=>15776, +52249=>15777, +52250=>15778, +52251=>15779, +52254=>15780, +52255=>15781, +52256=>15782, +52259=>15783, +52260=>15784, +52261=>15785, +52262=>15786, +52266=>15787, +52267=>15788, +52269=>15789, +52271=>15790, +52273=>15791, +52274=>15792, +52275=>15793, +52276=>15794, +52277=>15795, +52278=>15796, +52279=>15797, +52282=>15798, +52287=>15799, +52288=>15800, +52289=>15801, +52290=>15802, +52291=>15803, +52294=>15804, +52295=>15805, +52297=>15806, +52298=>15807, +52299=>15808, +52301=>15809, +52302=>15810, +52303=>15811, +52304=>15812, +52305=>15813, +52306=>15814, +52307=>15815, +52310=>15816, +52314=>15817, +52315=>15818, +52316=>15819, +52317=>15820, +52318=>15821, +52319=>15822, +52321=>15823, +52322=>15824, +52323=>15825, +52325=>15826, +52327=>15827, +52329=>15828, +52330=>15829, +52331=>15830, +52332=>15831, +52333=>15832, +52334=>15833, +52335=>15834, +52337=>15835, +52338=>15836, +52339=>15837, +52340=>15838, +52342=>15839, +52343=>15840, +52344=>15841, +52345=>15842, +52346=>15843, +52347=>15844, +52348=>15845, +52349=>15846, +52350=>15847, +52351=>15848, +52352=>15849, +52353=>15850, +52354=>15851, +52355=>15852, +52356=>15853, +52357=>15854, +52358=>15855, +52359=>15856, +52360=>15857, +52361=>15858, +52362=>15859, +52363=>15860, +52364=>15861, +52365=>15862, +52366=>15863, +52367=>15864, +52368=>15865, +52369=>15866, +52370=>15867, +52371=>15868, +52372=>15869, +52373=>15870, +52374=>15871, +52375=>15872, +52378=>15873, +52379=>15874, +52381=>15875, +52382=>15876, +52383=>15877, +52385=>15878, +52386=>15879, +52387=>15880, +52388=>15881, +52389=>15882, +52390=>15883, +52391=>15884, +52394=>15885, +52398=>15886, +52399=>15887, +52400=>15888, +52401=>15889, +52402=>15890, +52403=>15891, +52406=>15892, +52407=>15893, +52409=>15894, +52410=>15895, +52411=>15896, +52413=>15897, +52414=>15898, +52415=>15899, +52416=>15900, +52417=>15901, +52418=>15902, +52419=>15903, +52422=>15904, +52424=>15905, +52426=>15906, +52427=>15907, +52428=>15908, +52429=>15909, +52430=>15910, +52431=>15911, +52433=>15912, +52434=>15913, +52435=>15914, +52437=>15915, +52438=>15916, +52439=>15917, +52440=>15918, +52441=>15919, +52442=>15920, +52443=>15921, +52444=>15922, +52445=>15923, +52446=>15924, +52447=>15925, +52448=>15926, +52449=>15927, +52450=>15928, +52451=>15929, +52453=>15930, +52454=>15931, +52455=>15932, +52456=>15933, +52457=>15934, +52458=>15935, +52459=>15936, +52461=>15937, +52462=>15938, +52463=>15939, +52465=>15940, +52466=>15941, +52467=>15942, +52468=>15943, +52469=>15944, +52470=>15945, +52471=>15946, +52472=>15947, +52473=>15948, +52474=>15949, +52475=>15950, +52476=>15951, +52477=>15952, +52478=>15953, +52479=>15954, +52480=>15955, +52482=>15956, +52483=>15957, +52484=>15958, +52485=>15959, +52486=>15960, +52487=>15961, +52490=>15962, +52491=>15963, +52493=>15964, +52494=>15965, +52495=>15966, +52497=>15967, +52498=>15968, +52499=>15969, +52500=>15970, +52501=>15971, +52502=>15972, +52503=>15973, +52506=>15974, +52508=>15975, +52510=>15976, +52511=>15977, +52512=>15978, +52513=>15979, +52514=>15980, +52515=>15981, +52517=>15982, +52518=>15983, +52519=>15984, +52521=>15985, +52522=>15986, +52523=>15987, +52525=>15988, +52526=>15989, +52527=>15990, +52528=>15991, +52529=>15992, +52530=>15993, +52531=>15994, +52532=>15995, +52533=>15996, +52534=>15997, +52535=>15998, +52536=>15999, +52538=>16000, +52539=>16001, +52540=>16002, +52541=>16003, +52542=>16004, +52543=>16005, +52544=>16006, +52545=>16007, +52546=>16008, +52547=>16009, +52548=>16010, +52549=>16011, +52550=>16012, +52551=>16013, +52552=>16014, +52553=>16015, +52554=>16016, +52555=>16017, +52556=>16018, +52557=>16019, +52558=>16020, +52559=>16021, +52560=>16022, +52561=>16023, +52562=>16024, +52563=>16025, +52564=>16026, +52565=>16027, +52566=>16028, +52567=>16029, +52568=>16030, +52569=>16031, +52570=>16032, +52571=>16033, +52573=>16034, +52574=>16035, +52575=>16036, +52577=>16037, +52578=>16038, +52579=>16039, +52581=>16040, +52582=>16041, +52583=>16042, +52584=>16043, +52585=>16044, +52586=>16045, +52587=>16046, +52590=>16047, +52592=>16048, +52594=>16049, +52595=>16050, +52596=>16051, +52597=>16052, +52598=>16053, +52599=>16054, +52601=>16055, +52602=>16056, +52603=>16057, +52604=>16058, +52605=>16059, +52606=>16060, +52607=>16061, +52608=>16062, +52609=>16063, +52610=>16064, +52611=>16065, +52612=>16066, +52613=>16067, +52614=>16068, +52615=>16069, +52617=>16070, +52618=>16071, +52619=>16072, +52620=>16073, +52621=>16074, +52622=>16075, +52623=>16076, +52624=>16077, +52625=>16078, +52626=>16079, +52627=>16080, +52630=>16081, +52631=>16082, +52633=>16083, +52634=>16084, +52635=>16085, +52637=>16086, +52638=>16087, +52639=>16088, +52640=>16089, +52641=>16090, +52642=>16091, +52643=>16092, +52646=>16093, +52648=>16094, +52650=>16095, +52651=>16096, +52652=>16097, +52653=>16098, +52654=>16099, +52655=>16100, +52657=>16101, +52658=>16102, +52659=>16103, +52660=>16104, +52661=>16105, +52662=>16106, +52663=>16107, +52664=>16108, +52665=>16109, +52666=>16110, +52667=>16111, +52668=>16112, +52669=>16113, +52670=>16114, +52671=>16115, +52672=>16116, +52673=>16117, +52674=>16118, +52675=>16119, +52677=>16120, +52678=>16121, +52679=>16122, +52680=>16123, +52681=>16124, +52682=>16125, +52683=>16126, +52685=>16127, +52686=>16128, +52687=>16129, +52689=>16130, +52690=>16131, +52691=>16132, +52692=>16133, +52693=>16134, +52694=>16135, +52695=>16136, +52696=>16137, +52697=>16138, +52698=>16139, +52699=>16140, +52700=>16141, +52701=>16142, +52702=>16143, +52703=>16144, +52704=>16145, +52705=>16146, +52706=>16147, +52707=>16148, +52708=>16149, +52709=>16150, +52710=>16151, +52711=>16152, +52713=>16153, +52714=>16154, +52715=>16155, +52717=>16156, +52718=>16157, +52719=>16158, +52721=>16159, +52722=>16160, +52723=>16161, +52724=>16162, +52725=>16163, +52726=>16164, +52727=>16165, +52730=>16166, +52732=>16167, +52734=>16168, +52735=>16169, +52736=>16170, +52737=>16171, +52738=>16172, +52739=>16173, +52741=>16174, +52742=>16175, +52743=>16176, +52745=>16177, +52746=>16178, +52747=>16179, +52749=>16180, +52750=>16181, +52751=>16182, +52752=>16183, +52753=>16184, +52754=>16185, +52755=>16186, +52757=>16187, +52758=>16188, +52759=>16189, +52760=>16190, +52762=>16191, +52763=>16192, +52764=>16193, +52765=>16194, +52766=>16195, +52767=>16196, +52770=>16197, +52771=>16198, +52773=>16199, +52774=>16200, +52775=>16201, +52777=>16202, +52778=>16203, +52779=>16204, +52780=>16205, +52781=>16206, +52782=>16207, +52783=>16208, +52786=>16209, +52788=>16210, +52790=>16211, +52791=>16212, +52792=>16213, +52793=>16214, +52794=>16215, +52795=>16216, +52796=>16217, +52797=>16218, +52798=>16219, +52799=>16220, +52800=>16221, +52801=>16222, +52802=>16223, +52803=>16224, +52804=>16225, +52805=>16226, +52806=>16227, +52807=>16228, +52808=>16229, +52809=>16230, +52810=>16231, +52811=>16232, +52812=>16233, +52813=>16234, +52814=>16235, +52815=>16236, +52816=>16237, +52817=>16238, +52818=>16239, +52819=>16240, +52820=>16241, +52821=>16242, +52822=>16243, +52823=>16244, +52826=>16245, +52827=>16246, +52829=>16247, +52830=>16248, +52834=>16249, +52835=>16250, +52836=>16251, +52837=>16252, +52838=>16253, +52839=>16254, +52842=>16255, +52844=>16256, +52846=>16257, +52847=>16258, +52848=>16259, +52849=>16260, +52850=>16261, +52851=>16262, +52854=>16263, +52855=>16264, +52857=>16265, +52858=>16266, +52859=>16267, +52861=>16268, +52862=>16269, +52863=>16270, +52864=>16271, +52865=>16272, +52866=>16273, +52867=>16274, +52870=>16275, +52872=>16276, +52874=>16277, +52875=>16278, +52876=>16279, +52877=>16280, +52878=>16281, +52879=>16282, +52882=>16283, +52883=>16284, +52885=>16285, +52886=>16286, +52887=>16287, +52889=>16288, +52890=>16289, +52891=>16290, +52892=>16291, +52893=>16292, +52894=>16293, +52895=>16294, +52898=>16295, +52902=>16296, +52903=>16297, +52904=>16298, +52905=>16299, +52906=>16300, +52907=>16301, +52910=>16302, +52911=>16303, +52912=>16304, +52913=>16305, +52914=>16306, +52915=>16307, +52916=>16308, +52917=>16309, +52918=>16310, +52919=>16311, +52920=>16312, +52921=>16313, +52922=>16314, +52923=>16315, +52924=>16316, +52925=>16317, +52926=>16318, +52927=>16319, +52928=>16320, +52930=>16321, +52931=>16322, +52932=>16323, +52933=>16324, +52934=>16325, +52935=>16326, +52936=>16327, +52937=>16328, +52938=>16329, +52939=>16330, +52940=>16331, +52941=>16332, +52942=>16333, +52943=>16334, +52944=>16335, +52945=>16336, +52946=>16337, +52947=>16338, +52948=>16339, +52949=>16340, +52950=>16341, +52951=>16342, +52952=>16343, +52953=>16344, +52954=>16345, +52955=>16346, +52956=>16347, +52957=>16348, +52958=>16349, +52959=>16350, +52960=>16351, +52961=>16352, +52962=>16353, +52963=>16354, +52966=>16355, +52967=>16356, +52969=>16357, +52970=>16358, +52973=>16359, +52974=>16360, +52975=>16361, +52976=>16362, +52977=>16363, +52978=>16364, +52979=>16365, +52982=>16366, +52986=>16367, +52987=>16368, +52988=>16369, +52989=>16370, +52990=>16371, +52991=>16372, +52994=>16373, +52995=>16374, +52997=>16375, +52998=>16376, +52999=>16377, +53001=>16378, +53002=>16379, +53003=>16380, +53004=>16381, +53005=>16382, +53006=>16383, +53007=>16384, +53010=>16385, +53012=>16386, +53014=>16387, +53015=>16388, +53016=>16389, +53017=>16390, +53018=>16391, +53019=>16392, +53021=>16393, +53022=>16394, +53023=>16395, +53025=>16396, +53026=>16397, +53027=>16398, +53029=>16399, +53030=>16400, +53031=>16401, +53032=>16402, +53033=>16403, +53034=>16404, +53035=>16405, +53038=>16406, +53042=>16407, +53043=>16408, +53044=>16409, +53045=>16410, +53046=>16411, +53047=>16412, +53049=>16413, +53050=>16414, +53051=>16415, +53052=>16416, +53053=>16417, +53054=>16418, +53055=>16419, +53056=>16420, +53057=>16421, +53058=>16422, +53059=>16423, +53060=>16424, +53061=>16425, +53062=>16426, +53063=>16427, +53064=>16428, +53065=>16429, +53066=>16430, +53067=>16431, +53068=>16432, +53069=>16433, +53070=>16434, +53071=>16435, +53072=>16436, +53073=>16437, +53074=>16438, +53075=>16439, +53078=>16440, +53079=>16441, +53081=>16442, +53082=>16443, +53083=>16444, +53085=>16445, +53086=>16446, +53087=>16447, +53088=>16448, +53089=>16449, +53090=>16450, +53091=>16451, +53094=>16452, +53096=>16453, +53098=>16454, +53099=>16455, +53100=>16456, +53101=>16457, +53102=>16458, +53103=>16459, +53106=>16460, +53107=>16461, +53109=>16462, +53110=>16463, +53111=>16464, +53113=>16465, +53114=>16466, +53115=>16467, +53116=>16468, +53117=>16469, +53118=>16470, +53119=>16471, +53121=>16472, +53122=>16473, +53123=>16474, +53124=>16475, +53126=>16476, +53127=>16477, +53128=>16478, +53129=>16479, +53130=>16480, +53131=>16481, +53133=>16482, +53134=>16483, +53135=>16484, +53136=>16485, +53137=>16486, +53138=>16487, +53139=>16488, +53140=>16489, +53141=>16490, +53142=>16491, +53143=>16492, +53144=>16493, +53145=>16494, +53146=>16495, +53147=>16496, +53148=>16497, +53149=>16498, +53150=>16499, +53151=>16500, +53152=>16501, +53154=>16502, +53155=>16503, +53156=>16504, +53157=>16505, +53158=>16506, +53159=>16507, +53161=>16508, +53162=>16509, +53163=>16510, +53164=>16511, +53165=>16512, +53166=>16513, +53167=>16514, +53169=>16515, +53170=>16516, +53171=>16517, +53172=>16518, +53173=>16519, +53174=>16520, +53175=>16521, +53176=>16522, +53177=>16523, +53178=>16524, +53179=>16525, +53180=>16526, +53181=>16527, +53182=>16528, +53183=>16529, +53184=>16530, +53185=>16531, +53186=>16532, +53187=>16533, +53189=>16534, +53190=>16535, +53191=>16536, +53192=>16537, +53193=>16538, +53194=>16539, +53195=>16540, +53196=>16541, +53197=>16542, +53198=>16543, +53199=>16544, +53200=>16545, +53201=>16546, +53202=>16547, +53203=>16548, +53204=>16549, +53205=>16550, +53206=>16551, +53207=>16552, +53208=>16553, +53209=>16554, +53210=>16555, +53211=>16556, +53212=>16557, +53213=>16558, +53214=>16559, +53215=>16560, +53218=>16561, +53219=>16562, +53221=>16563, +53222=>16564, +53223=>16565, +53225=>16566, +53226=>16567, +53227=>16568, +53228=>16569, +53229=>16570, +53230=>16571, +53231=>16572, +53234=>16573, +53236=>16574, +53238=>16575, +53239=>16576, +53240=>16577, +53241=>16578, +53242=>16579, +53243=>16580, +53245=>16581, +53246=>16582, +53247=>16583, +53249=>16584, +53250=>16585, +53251=>16586, +53253=>16587, +53254=>16588, +53255=>16589, +53256=>16590, +53257=>16591, +53258=>16592, +53259=>16593, +53260=>16594, +53261=>16595, +53262=>16596, +53263=>16597, +53264=>16598, +53266=>16599, +53267=>16600, +53268=>16601, +53269=>16602, +53270=>16603, +53271=>16604, +53273=>16605, +53274=>16606, +53275=>16607, +53276=>16608, +53277=>16609, +53278=>16610, +53279=>16611, +53280=>16612, +53281=>16613, +53282=>16614, +53283=>16615, +53284=>16616, +53285=>16617, +53286=>16618, +53287=>16619, +53288=>16620, +53289=>16621, +53290=>16622, +53291=>16623, +53292=>16624, +53294=>16625, +53295=>16626, +53296=>16627, +53297=>16628, +53298=>16629, +53299=>16630, +53302=>16631, +53303=>16632, +53305=>16633, +53306=>16634, +53307=>16635, +53309=>16636, +53310=>16637, +53311=>16638, +53312=>16639, +53313=>16640, +53314=>16641, +53315=>16642, +53318=>16643, +53320=>16644, +53322=>16645, +53323=>16646, +53324=>16647, +53325=>16648, +53326=>16649, +53327=>16650, +53329=>16651, +53330=>16652, +53331=>16653, +53333=>16654, +53334=>16655, +53335=>16656, +53337=>16657, +53338=>16658, +53339=>16659, +53340=>16660, +53341=>16661, +53342=>16662, +53343=>16663, +53345=>16664, +53346=>16665, +53347=>16666, +53348=>16667, +53349=>16668, +53350=>16669, +53351=>16670, +53352=>16671, +53353=>16672, +53354=>16673, +53355=>16674, +53358=>16675, +53359=>16676, +53361=>16677, +53362=>16678, +53363=>16679, +53365=>16680, +53366=>16681, +53367=>16682, +53368=>16683, +53369=>16684, +53370=>16685, +53371=>16686, +53374=>16687, +53375=>16688, +53376=>16689, +53378=>16690, +53379=>16691, +53380=>16692, +53381=>16693, +53382=>16694, +53383=>16695, +53384=>16696, +53385=>16697, +53386=>16698, +53387=>16699, +53388=>16700, +53389=>16701, +53390=>16702, +53391=>16703, +53392=>16704, +53393=>16705, +53394=>16706, +53395=>16707, +53396=>16708, +53397=>16709, +53398=>16710, +53399=>16711, +53400=>16712, +53401=>16713, +53402=>16714, +53403=>16715, +53404=>16716, +53405=>16717, +53406=>16718, +53407=>16719, +53408=>16720, +53409=>16721, +53410=>16722, +53411=>16723, +53414=>16724, +53415=>16725, +53417=>16726, +53418=>16727, +53419=>16728, +53421=>16729, +53422=>16730, +53423=>16731, +53424=>16732, +53425=>16733, +53426=>16734, +53427=>16735, +53430=>16736, +53432=>16737, +53434=>16738, +53435=>16739, +53436=>16740, +53437=>16741, +53438=>16742, +53439=>16743, +53442=>16744, +53443=>16745, +53445=>16746, +53446=>16747, +53447=>16748, +53450=>16749, +53451=>16750, +53452=>16751, +53453=>16752, +53454=>16753, +53455=>16754, +53458=>16755, +53462=>16756, +53463=>16757, +53464=>16758, +53465=>16759, +53466=>16760, +53467=>16761, +53470=>16762, +53471=>16763, +53473=>16764, +53474=>16765, +53475=>16766, +53477=>16767, +53478=>16768, +53479=>16769, +53480=>16770, +53481=>16771, +53482=>16772, +53483=>16773, +53486=>16774, +53490=>16775, +53491=>16776, +53492=>16777, +53493=>16778, +53494=>16779, +53495=>16780, +53497=>16781, +53498=>16782, +53499=>16783, +53500=>16784, +53501=>16785, +53502=>16786, +53503=>16787, +53504=>16788, +53505=>16789, +53506=>16790, +53507=>16791, +53508=>16792, +53509=>16793, +53510=>16794, +53511=>16795, +53512=>16796, +53513=>16797, +53514=>16798, +53515=>16799, +53516=>16800, +53518=>16801, +53519=>16802, +53520=>16803, +53521=>16804, +53522=>16805, +53523=>16806, +53524=>16807, +53525=>16808, +53526=>16809, +53527=>16810, +53528=>16811, +53529=>16812, +53530=>16813, +53531=>16814, +53532=>16815, +53533=>16816, +53534=>16817, +53535=>16818, +53536=>16819, +53537=>16820, +53538=>16821, +53539=>16822, +53540=>16823, +53541=>16824, +53542=>16825, +53543=>16826, +53544=>16827, +53545=>16828, +53546=>16829, +53547=>16830, +53548=>16831, +53549=>16832, +53550=>16833, +53551=>16834, +53554=>16835, +53555=>16836, +53557=>16837, +53558=>16838, +53559=>16839, +53561=>16840, +53563=>16841, +53564=>16842, +53565=>16843, +53566=>16844, +53567=>16845, +53570=>16846, +53574=>16847, +53575=>16848, +53576=>16849, +53577=>16850, +53578=>16851, +53579=>16852, +53582=>16853, +53583=>16854, +53585=>16855, +53586=>16856, +53587=>16857, +53589=>16858, +53590=>16859, +53591=>16860, +53592=>16861, +53593=>16862, +53594=>16863, +53595=>16864, +53598=>16865, +53600=>16866, +53602=>16867, +53603=>16868, +53604=>16869, +53605=>16870, +53606=>16871, +53607=>16872, +53609=>16873, +53610=>16874, +53611=>16875, +53613=>16876, +53614=>16877, +53615=>16878, +53616=>16879, +53617=>16880, +53618=>16881, +53619=>16882, +53620=>16883, +53621=>16884, +53622=>16885, +53623=>16886, +53624=>16887, +53625=>16888, +53626=>16889, +53627=>16890, +53629=>16891, +53630=>16892, +53631=>16893, +53632=>16894, +53633=>16895, +53634=>16896, +53635=>16897, +53637=>16898, +53638=>16899, +53639=>16900, +53641=>16901, +53642=>16902, +53643=>16903, +53644=>16904, +53645=>16905, +53646=>16906, +53647=>16907, +53648=>16908, +53649=>16909, +53650=>16910, +53651=>16911, +53652=>16912, +53653=>16913, +53654=>16914, +53655=>16915, +53656=>16916, +53657=>16917, +53658=>16918, +53659=>16919, +53660=>16920, +53661=>16921, +53662=>16922, +53663=>16923, +53666=>16924, +53667=>16925, +53669=>16926, +53670=>16927, +53671=>16928, +53673=>16929, +53674=>16930, +53675=>16931, +53676=>16932, +53677=>16933, +53678=>16934, +53679=>16935, +53682=>16936, +53684=>16937, +53686=>16938, +53687=>16939, +53688=>16940, +53689=>16941, +53691=>16942, +53693=>16943, +53694=>16944, +53695=>16945, +53697=>16946, +53698=>16947, +53699=>16948, +53700=>16949, +53701=>16950, +53702=>16951, +53703=>16952, +53704=>16953, +53705=>16954, +53706=>16955, +53707=>16956, +53708=>16957, +53709=>16958, +53710=>16959, +53711=>16960, +53712=>16961, +53713=>16962, +53714=>16963, +53715=>16964, +53716=>16965, +53717=>16966, +53718=>16967, +53719=>16968, +53721=>16969, +53722=>16970, +53723=>16971, +53724=>16972, +53725=>16973, +53726=>16974, +53727=>16975, +53728=>16976, +53729=>16977, +53730=>16978, +53731=>16979, +53732=>16980, +53733=>16981, +53734=>16982, +53735=>16983, +53736=>16984, +53737=>16985, +53738=>16986, +53739=>16987, +53740=>16988, +53741=>16989, +53742=>16990, +53743=>16991, +53744=>16992, +53745=>16993, +53746=>16994, +53747=>16995, +53749=>16996, +53750=>16997, +53751=>16998, +53753=>16999, +53754=>17000, +53755=>17001, +53756=>17002, +53757=>17003, +53758=>17004, +53759=>17005, +53760=>17006, +53761=>17007, +53762=>17008, +53763=>17009, +53764=>17010, +53765=>17011, +53766=>17012, +53768=>17013, +53770=>17014, +53771=>17015, +53772=>17016, +53773=>17017, +53774=>17018, +53775=>17019, +53777=>17020, +53778=>17021, +53779=>17022, +53780=>17023, +53781=>17024, +53782=>17025, +53783=>17026, +53784=>17027, +53785=>17028, +53786=>17029, +53787=>17030, +53788=>17031, +53789=>17032, +53790=>17033, +53791=>17034, +53792=>17035, +53793=>17036, +53794=>17037, +53795=>17038, +53796=>17039, +53797=>17040, +53798=>17041, +53799=>17042, +53800=>17043, +53801=>17044, +53802=>17045, +53803=>17046, +53806=>17047, +53807=>17048, +53809=>17049, +53810=>17050, +53811=>17051, +53813=>17052, +53814=>17053, +53815=>17054, +53816=>17055, +53817=>17056, +53818=>17057, +53819=>17058, +53822=>17059, +53824=>17060, +53826=>17061, +53827=>17062, +53828=>17063, +53829=>17064, +53830=>17065, +53831=>17066, +53833=>17067, +53834=>17068, +53835=>17069, +53836=>17070, +53837=>17071, +53838=>17072, +53839=>17073, +53840=>17074, +53841=>17075, +53842=>17076, +53843=>17077, +53844=>17078, +53845=>17079, +53846=>17080, +53847=>17081, +53848=>17082, +53849=>17083, +53850=>17084, +53851=>17085, +53853=>17086, +53854=>17087, +53855=>17088, +53856=>17089, +53857=>17090, +53858=>17091, +53859=>17092, +53861=>17093, +53862=>17094, +53863=>17095, +53864=>17096, +53865=>17097, +53866=>17098, +53867=>17099, +53868=>17100, +53869=>17101, +53870=>17102, +53871=>17103, +53872=>17104, +53873=>17105, +53874=>17106, +53875=>17107, +53876=>17108, +53877=>17109, +53878=>17110, +53879=>17111, +53880=>17112, +53881=>17113, +53882=>17114, +53883=>17115, +53884=>17116, +53885=>17117, +53886=>17118, +53887=>17119, +53890=>17120, +53891=>17121, +53893=>17122, +53894=>17123, +53895=>17124, +53897=>17125, +53898=>17126, +53899=>17127, +53900=>17128, +53901=>17129, +53902=>17130, +53903=>17131, +53906=>17132, +53907=>17133, +53908=>17134, +53910=>17135, +53911=>17136, +53912=>17137, +53913=>17138, +53914=>17139, +53915=>17140, +53917=>17141, +53918=>17142, +53919=>17143, +53921=>17144, +53922=>17145, +53923=>17146, +53925=>17147, +53926=>17148, +53927=>17149, +53928=>17150, +53929=>17151, +53930=>17152, +53931=>17153, +53933=>17154, +53934=>17155, +53935=>17156, +53936=>17157, +53938=>17158, +53939=>17159, +53940=>17160, +53941=>17161, +53942=>17162, +53943=>17163, +53946=>17164, +53947=>17165, +53949=>17166, +53950=>17167, +53953=>17168, +53955=>17169, +53956=>17170, +53957=>17171, +53958=>17172, +53959=>17173, +53962=>17174, +53964=>17175, +53965=>17176, +53966=>17177, +53967=>17178, +53968=>17179, +53969=>17180, +53970=>17181, +53971=>17182, +53973=>17183, +53974=>17184, +53975=>17185, +53977=>17186, +53978=>17187, +53979=>17188, +53981=>17189, +53982=>17190, +53983=>17191, +53984=>17192, +53985=>17193, +53986=>17194, +53987=>17195, +53990=>17196, +53991=>17197, +53992=>17198, +53993=>17199, +53994=>17200, +53995=>17201, +53996=>17202, +53997=>17203, +53998=>17204, +53999=>17205, +54002=>17206, +54003=>17207, +54005=>17208, +54006=>17209, +54007=>17210, +54009=>17211, +54010=>17212, +54011=>17213, +54012=>17214, +54013=>17215, +54014=>17216, +54015=>17217, +54018=>17218, +54020=>17219, +54022=>17220, +54023=>17221, +54024=>17222, +54025=>17223, +54026=>17224, +54027=>17225, +54031=>17226, +54033=>17227, +54034=>17228, +54035=>17229, +54037=>17230, +54039=>17231, +54040=>17232, +54041=>17233, +54042=>17234, +54043=>17235, +54046=>17236, +54050=>17237, +54051=>17238, +54052=>17239, +54054=>17240, +54055=>17241, +54058=>17242, +54059=>17243, +54061=>17244, +54062=>17245, +54063=>17246, +54065=>17247, +54066=>17248, +54067=>17249, +54068=>17250, +54069=>17251, +54070=>17252, +54071=>17253, +54074=>17254, +54078=>17255, +54079=>17256, +54080=>17257, +54081=>17258, +54082=>17259, +54083=>17260, +54086=>17261, +54087=>17262, +54088=>17263, +54089=>17264, +54090=>17265, +54091=>17266, +54092=>17267, +54093=>17268, +54094=>17269, +54095=>17270, +54096=>17271, +54097=>17272, +54098=>17273, +54099=>17274, +54100=>17275, +54101=>17276, +54102=>17277, +54103=>17278, +54104=>17279, +54105=>17280, +54106=>17281, +54107=>17282, +54108=>17283, +54109=>17284, +54110=>17285, +54111=>17286, +54112=>17287, +54113=>17288, +54114=>17289, +54115=>17290, +54116=>17291, +54117=>17292, +54118=>17293, +54119=>17294, +54120=>17295, +54121=>17296, +54122=>17297, +54123=>17298, +54124=>17299, +54125=>17300, +54126=>17301, +54127=>17302, +54128=>17303, +54129=>17304, +54130=>17305, +54131=>17306, +54132=>17307, +54133=>17308, +54134=>17309, +54135=>17310, +54136=>17311, +54137=>17312, +54138=>17313, +54139=>17314, +54142=>17315, +54143=>17316, +54145=>17317, +54146=>17318, +54147=>17319, +54149=>17320, +54150=>17321, +54151=>17322, +54152=>17323, +54153=>17324, +54154=>17325, +54155=>17326, +54158=>17327, +54162=>17328, +54163=>17329, +54164=>17330, +54165=>17331, +54166=>17332, +54167=>17333, +54170=>17334, +54171=>17335, +54173=>17336, +54174=>17337, +54175=>17338, +54177=>17339, +54178=>17340, +54179=>17341, +54180=>17342, +54181=>17343, +54182=>17344, +54183=>17345, +54186=>17346, +54188=>17347, +54190=>17348, +54191=>17349, +54192=>17350, +54193=>17351, +54194=>17352, +54195=>17353, +54197=>17354, +54198=>17355, +54199=>17356, +54201=>17357, +54202=>17358, +54203=>17359, +54205=>17360, +54206=>17361, +54207=>17362, +54208=>17363, +54209=>17364, +54210=>17365, +54211=>17366, +54214=>17367, +54215=>17368, +54218=>17369, +54219=>17370, +54220=>17371, +54221=>17372, +54222=>17373, +54223=>17374, +54225=>17375, +54226=>17376, +54227=>17377, +54228=>17378, +54229=>17379, +54230=>17380, +54231=>17381, +54233=>17382, +54234=>17383, +54235=>17384, +54236=>17385, +54237=>17386, +54238=>17387, +54239=>17388, +54240=>17389, +54242=>17390, +54244=>17391, +54245=>17392, +54246=>17393, +54247=>17394, +54248=>17395, +54249=>17396, +54250=>17397, +54251=>17398, +54254=>17399, +54255=>17400, +54257=>17401, +54258=>17402, +54259=>17403, +54261=>17404, +54262=>17405, +54263=>17406, +54264=>17407, +54265=>17408, +54266=>17409, +54267=>17410, +54270=>17411, +54272=>17412, +54274=>17413, +54275=>17414, +54276=>17415, +54277=>17416, +54278=>17417, +54279=>17418, +54281=>17419, +54282=>17420, +54283=>17421, +54284=>17422, +54285=>17423, +54286=>17424, +54287=>17425, +54288=>17426, +54289=>17427, +54290=>17428, +54291=>17429, +54292=>17430, +54293=>17431, +54294=>17432, +54295=>17433, +54296=>17434, +54297=>17435, +54298=>17436, +54299=>17437, +54300=>17438, +54302=>17439, +54303=>17440, +54304=>17441, +54305=>17442, +54306=>17443, +54307=>17444, +54308=>17445, +54309=>17446, +54310=>17447, +54311=>17448, +54312=>17449, +54313=>17450, +54314=>17451, +54315=>17452, +54316=>17453, +54317=>17454, +54318=>17455, +54319=>17456, +54320=>17457, +54321=>17458, +54322=>17459, +54323=>17460, +54324=>17461, +54325=>17462, +54326=>17463, +54327=>17464, +54328=>17465, +54329=>17466, +54330=>17467, +54331=>17468, +54332=>17469, +54333=>17470, +54334=>17471, +54335=>17472, +54337=>17473, +54338=>17474, +54339=>17475, +54341=>17476, +54342=>17477, +54343=>17478, +54344=>17479, +54345=>17480, +54346=>17481, +54347=>17482, +54348=>17483, +54349=>17484, +54350=>17485, +54351=>17486, +54352=>17487, +54353=>17488, +54354=>17489, +54355=>17490, +54356=>17491, +54357=>17492, +54358=>17493, +54359=>17494, +54360=>17495, +54361=>17496, +54362=>17497, +54363=>17498, +54365=>17499, +54366=>17500, +54367=>17501, +54369=>17502, +54370=>17503, +54371=>17504, +54373=>17505, +54374=>17506, +54375=>17507, +54376=>17508, +54377=>17509, +54378=>17510, +54379=>17511, +54380=>17512, +54382=>17513, +54384=>17514, +54385=>17515, +54386=>17516, +54387=>17517, +54388=>17518, +54389=>17519, +54390=>17520, +54391=>17521, +54394=>17522, +54395=>17523, +54397=>17524, +54398=>17525, +54401=>17526, +54403=>17527, +54404=>17528, +54405=>17529, +54406=>17530, +54407=>17531, +54410=>17532, +54412=>17533, +54414=>17534, +54415=>17535, +54416=>17536, +54417=>17537, +54418=>17538, +54419=>17539, +54421=>17540, +54422=>17541, +54423=>17542, +54424=>17543, +54425=>17544, +54426=>17545, +54427=>17546, +54428=>17547, +54429=>17548, +54430=>17549, +54431=>17550, +54432=>17551, +54433=>17552, +54434=>17553, +54435=>17554, +54436=>17555, +54437=>17556, +54438=>17557, +54439=>17558, +54440=>17559, +54442=>17560, +54443=>17561, +54444=>17562, +54445=>17563, +54446=>17564, +54447=>17565, +54448=>17566, +54449=>17567, +54450=>17568, +54451=>17569, +54452=>17570, +54453=>17571, +54454=>17572, +54455=>17573, +54456=>17574, +54457=>17575, +54458=>17576, +54459=>17577, +54460=>17578, +54461=>17579, +54462=>17580, +54463=>17581, +54464=>17582, +54465=>17583, +54466=>17584, +54467=>17585, +54468=>17586, +54469=>17587, +54470=>17588, +54471=>17589, +54472=>17590, +54473=>17591, +54474=>17592, +54475=>17593, +54477=>17594, +54478=>17595, +54479=>17596, +54481=>17597, +54482=>17598, +54483=>17599, +54485=>17600, +54486=>17601, +54487=>17602, +54488=>17603, +54489=>17604, +54490=>17605, +54491=>17606, +54493=>17607, +54494=>17608, +54496=>17609, +54497=>17610, +54498=>17611, +54499=>17612, +54500=>17613, +54501=>17614, +54502=>17615, +54503=>17616, +54505=>17617, +54506=>17618, +54507=>17619, +54509=>17620, +54510=>17621, +54511=>17622, +54513=>17623, +54514=>17624, +54515=>17625, +54516=>17626, +54517=>17627, +54518=>17628, +54519=>17629, +54521=>17630, +54522=>17631, +54524=>17632, +54526=>17633, +54527=>17634, +54528=>17635, +54529=>17636, +54530=>17637, +54531=>17638, +54533=>17639, +54534=>17640, +54535=>17641, +54537=>17642, +54538=>17643, +54539=>17644, +54541=>17645, +54542=>17646, +54543=>17647, +54544=>17648, +54545=>17649, +54546=>17650, +54547=>17651, +54550=>17652, +54552=>17653, +54553=>17654, +54554=>17655, +54555=>17656, +54556=>17657, +54557=>17658, +54558=>17659, +54559=>17660, +54560=>17661, +54561=>17662, +54562=>17663, +54563=>17664, +54564=>17665, +54565=>17666, +54566=>17667, +54567=>17668, +54568=>17669, +54569=>17670, +54570=>17671, +54571=>17672, +54572=>17673, +54573=>17674, +54574=>17675, +54575=>17676, +54576=>17677, +54577=>17678, +54578=>17679, +54579=>17680, +54580=>17681, +54581=>17682, +54582=>17683, +54583=>17684, +54584=>17685, +54585=>17686, +54586=>17687, +54587=>17688, +54590=>17689, +54591=>17690, +54593=>17691, +54594=>17692, +54595=>17693, +54597=>17694, +54598=>17695, +54599=>17696, +54600=>17697, +54601=>17698, +54602=>17699, +54603=>17700, +54606=>17701, +54608=>17702, +54610=>17703, +54611=>17704, +54612=>17705, +54613=>17706, +54614=>17707, +54615=>17708, +54618=>17709, +54619=>17710, +54621=>17711, +54622=>17712, +54623=>17713, +54625=>17714, +54626=>17715, +54627=>17716, +54628=>17717, +54630=>17718, +54631=>17719, +54634=>17720, +54636=>17721, +54638=>17722, +54639=>17723, +54640=>17724, +54641=>17725, +54642=>17726, +54643=>17727, +54646=>17728, +54647=>17729, +54649=>17730, +54650=>17731, +54651=>17732, +54653=>17733, +54654=>17734, +54655=>17735, +54656=>17736, +54657=>17737, +54658=>17738, +54659=>17739, +54662=>17740, +54666=>17741, +54667=>17742, +54668=>17743, +54669=>17744, +54670=>17745, +54671=>17746, +54673=>17747, +54674=>17748, +54675=>17749, +54676=>17750, +54677=>17751, +54678=>17752, +54679=>17753, +54680=>17754, +54681=>17755, +54682=>17756, +54683=>17757, +54684=>17758, +54685=>17759, +54686=>17760, +54687=>17761, +54688=>17762, +54689=>17763, +54690=>17764, +54691=>17765, +54692=>17766, +54694=>17767, +54695=>17768, +54696=>17769, +54697=>17770, +54698=>17771, +54699=>17772, +54700=>17773, +54701=>17774, +54702=>17775, +54703=>17776, +54704=>17777, +54705=>17778, +54706=>17779, +54707=>17780, +54708=>17781, +54709=>17782, +54710=>17783, +54711=>17784, +54712=>17785, +54713=>17786, +54714=>17787, +54715=>17788, +54716=>17789, +54717=>17790, +54718=>17791, +54719=>17792, +54720=>17793, +54721=>17794, +54722=>17795, +54723=>17796, +54724=>17797, +54725=>17798, +54726=>17799, +54727=>17800, +54730=>17801, +54731=>17802, +54733=>17803, +54734=>17804, +54735=>17805, +54737=>17806, +54739=>17807, +54740=>17808, +54741=>17809, +54742=>17810, +54743=>17811, +54746=>17812, +54748=>17813, +54750=>17814, +54751=>17815, +54752=>17816, +54753=>17817, +54754=>17818, +54755=>17819, +54758=>17820, +54759=>17821, +54761=>17822, +54762=>17823, +54763=>17824, +54765=>17825, +54766=>17826, +54767=>17827, +54768=>17828, +54769=>17829, +54770=>17830, +54771=>17831, +54774=>17832, +54776=>17833, +54778=>17834, +54779=>17835, +54780=>17836, +54781=>17837, +54782=>17838, +54783=>17839, +54786=>17840, +54787=>17841, +54789=>17842, +54790=>17843, +54791=>17844, +54793=>17845, +54794=>17846, +54795=>17847, +54796=>17848, +54797=>17849, +54798=>17850, +54799=>17851, +54802=>17852, +54806=>17853, +54807=>17854, +54808=>17855, +54809=>17856, +54810=>17857, +54811=>17858, +54813=>17859, +54814=>17860, +54815=>17861, +54817=>17862, +54818=>17863, +54819=>17864, +54821=>17865, +54822=>17866, +54823=>17867, +54824=>17868, +54825=>17869, +54826=>17870, +54827=>17871, +54828=>17872, +54830=>17873, +54831=>17874, +54832=>17875, +54833=>17876, +54834=>17877, +54835=>17878, +54836=>17879, +54837=>17880, +54838=>17881, +54839=>17882, +54842=>17883, +54843=>17884, +54845=>17885, +54846=>17886, +54847=>17887, +54849=>17888, +54850=>17889, +54851=>17890, +54852=>17891, +54854=>17892, +54855=>17893, +54858=>17894, +54860=>17895, +54862=>17896, +54863=>17897, +54864=>17898, +54866=>17899, +54867=>17900, +54870=>17901, +54871=>17902, +54873=>17903, +54874=>17904, +54875=>17905, +54877=>17906, +54878=>17907, +54879=>17908, +54880=>17909, +54881=>17910, +54882=>17911, +54883=>17912, +54884=>17913, +54885=>17914, +54886=>17915, +54888=>17916, +54890=>17917, +54891=>17918, +54892=>17919, +54893=>17920, +54894=>17921, +54895=>17922, +54898=>17923, +54899=>17924, +54901=>17925, +54902=>17926, +54903=>17927, +54904=>17928, +54905=>17929, +54906=>17930, +54907=>17931, +54908=>17932, +54909=>17933, +54910=>17934, +54911=>17935, +54912=>17936, +54913=>17937, +54914=>17938, +54916=>17939, +54918=>17940, +54919=>17941, +54920=>17942, +54921=>17943, +54922=>17944, +54923=>17945, +54926=>17946, +54927=>17947, +54929=>17948, +54930=>17949, +54931=>17950, +54933=>17951, +54934=>17952, +54935=>17953, +54936=>17954, +54937=>17955, +54938=>17956, +54939=>17957, +54940=>17958, +54942=>17959, +54944=>17960, +54946=>17961, +54947=>17962, +54948=>17963, +54949=>17964, +54950=>17965, +54951=>17966, +54953=>17967, +54954=>17968, +54955=>17969, +54957=>17970, +54958=>17971, +54959=>17972, +54961=>17973, +54962=>17974, +54963=>17975, +54964=>17976, +54965=>17977, +54966=>17978, +54967=>17979, +54968=>17980, +54970=>17981, +54972=>17982, +54973=>17983, +54974=>17984, +54975=>17985, +54976=>17986, +54977=>17987, +54978=>17988, +54979=>17989, +54982=>17990, +54983=>17991, +54985=>17992, +54986=>17993, +54987=>17994, +54989=>17995, +54990=>17996, +54991=>17997, +54992=>17998, +54994=>17999, +54995=>18000, +54997=>18001, +54998=>18002, +55000=>18003, +55002=>18004, +55003=>18005, +55004=>18006, +55005=>18007, +55006=>18008, +55007=>18009, +55009=>18010, +55010=>18011, +55011=>18012, +55013=>18013, +55014=>18014, +55015=>18015, +55017=>18016, +55018=>18017, +55019=>18018, +55020=>18019, +55021=>18020, +55022=>18021, +55023=>18022, +55025=>18023, +55026=>18024, +55027=>18025, +55028=>18026, +55030=>18027, +55031=>18028, +55032=>18029, +55033=>18030, +55034=>18031, +55035=>18032, +55038=>18033, +55039=>18034, +55041=>18035, +55042=>18036, +55043=>18037, +55045=>18038, +55046=>18039, +55047=>18040, +55048=>18041, +55049=>18042, +55050=>18043, +55051=>18044, +55052=>18045, +55053=>18046, +55054=>18047, +55055=>18048, +55056=>18049, +55058=>18050, +55059=>18051, +55060=>18052, +55061=>18053, +55062=>18054, +55063=>18055, +55066=>18056, +55067=>18057, +55069=>18058, +55070=>18059, +55071=>18060, +55073=>18061, +55074=>18062, +55075=>18063, +55076=>18064, +55077=>18065, +55078=>18066, +55079=>18067, +55082=>18068, +55084=>18069, +55086=>18070, +55087=>18071, +55088=>18072, +55089=>18073, +55090=>18074, +55091=>18075, +55094=>18076, +55095=>18077, +55097=>18078, +55098=>18079, +55099=>18080, +55101=>18081, +55102=>18082, +55103=>18083, +55104=>18084, +55105=>18085, +55106=>18086, +55107=>18087, +55109=>18088, +55110=>18089, +55112=>18090, +55114=>18091, +55115=>18092, +55116=>18093, +55117=>18094, +55118=>18095, +55119=>18096, +55122=>18097, +55123=>18098, +55125=>18099, +55130=>18100, +55131=>18101, +55132=>18102, +55133=>18103, +55134=>18104, +55135=>18105, +55138=>18106, +55140=>18107, +55142=>18108, +55143=>18109, +55144=>18110, +55146=>18111, +55147=>18112, +55149=>18113, +55150=>18114, +55151=>18115, +55153=>18116, +55154=>18117, +55155=>18118, +55157=>18119, +55158=>18120, +55159=>18121, +55160=>18122, +55161=>18123, +55162=>18124, +55163=>18125, +55166=>18126, +55167=>18127, +55168=>18128, +55170=>18129, +55171=>18130, +55172=>18131, +55173=>18132, +55174=>18133, +55175=>18134, +55178=>18135, +55179=>18136, +55181=>18137, +55182=>18138, +55183=>18139, +55185=>18140, +55186=>18141, +55187=>18142, +55188=>18143, +55189=>18144, +55190=>18145, +55191=>18146, +55194=>18147, +55196=>18148, +55198=>18149, +55199=>18150, +55200=>18151, +55201=>18152, +55202=>18153, +55203=>18154, +); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/README.TXT b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/README.TXT new file mode 100755 index 00000000..c22085f0 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/README.TXT @@ -0,0 +1,130 @@ +TCPDF Fonts + +TCPDF supports TrueTypeUnicode (UTF-8 Unicode), OpenTypeUnicode, TrueType, OpenType, Type1, CID-0 and Core (standard) fonts. + +There are two ways to use a new font: embedding it in the PDF or not. When a font is not embedded, it is searched in the system. The advantage is that the PDF file is lighter; on the other hand, if it is not available, a substitution font is used. So it is preferable to ensure that the needed font is installed on the client systems. If the file is to be viewed by a large audience, it is recommended to embed. + +The fonts that could be not embedded are only the standard core fonts and CID-0 fonts. + +The PDF Core (standard) fonts are: + + * courier : Courier + * courierb : Courier Bold + * courierbi : Courier Bold Italic + * courieri : Courier Italic + * helvetica : Helvetica + * helveticab : Helvetica Bold + * helveticabi : Helvetica Bold Italic + * helveticai : Helvetica Italic + * symbol : Symbol + * times : Times New Roman + * timesb : Times New Roman Bold + * timesbi : Times New Roman Bold Italic + * timesi : Times New Roman Italic + * zapfdingbats : Zapf Dingbats + +Setting up a font for usage with TCPDF requires the following steps: + + 1. Convert all font filenames to lowercase and rename using the following schema: + * [basic-font-name-in-lowercase].ttf for regular font + * [basic-font-name-in-lowercase]b.ttf for bold variation + * [basic-font-name-in-lowercase]i.ttf for oblique variation + * [basic-font-name-in-lowercase]bi.ttf for bold oblique variation + + 2. Generate the font's metrics file. + * For Type1 font files this first step is not necessary because the AFM file is usually shipped with the font. In case you have only a metric file in PFM format, use the pfm2afm utility (fonts/utils/pfm2afm) to get the AFM file. If you own a Type1 font in ASCII format (.pfa), you can convert it to binary format with Type 1 utilities. + * For TrueTypeUnicode or TrueType font files, use the the provided ttf2ufm utility (fonts/utils/ttf2ufm): + + $ ttf2ufm -a -F myfont.ttf + + * For OpenTypeUnicode or OpenType font files, use the the provided ttf2ufm utility (fonts/utils/ttf2ufm): + + $ ttf2ufm -a -F myfont.otf + + 3. Run makefont.php script. + * For TrueTypeUnicode: + + $ php -q makefont.php myfont.ttf myfont.ufm + + * For OpenTypeUnicode: + + $ php -q makefont.php myfont.otf myfont.ufm + + * For TrueType: + + $ php -q makefont.php myfont.ttf myfont.afm + + * For OpenType: + + $ php -q makefont.php myfont.otf myfont.afm + + * For Type1: + + $ php -q makefont.php myfont.pfb myfont.afm + + You may also specify additional parameters: + + MakeFont(string $fontfile, string $fmfile [, boolean $embedded [, $enc="cp1252" [, $patch=array()]]]) + + * $fontfile : Path to the .ttf or .pfb file. + * $fmfile : Path to the .afm file for Type1 and TrueType or .ufm for TrueTypeUnicode. + * $embedded : Set to false to not embed the font, true otherwise (default). + * $enc : Name of the encoding table to use. Default value: cp1252. Omit this parameter for TrueType Unicode, OpenType Unicode and symbolic fonts like Symbol or ZapfDingBats. The encoding defines the association between a code (from 0 to 255) and a character. The first 128 are fixed and correspond to ASCII. The encodings are stored in .map files. Those available are: + o cp1250 (Central Europe) + o cp1251 (Cyrillic) + o cp1252 (Western Europe) + o cp1253 (Greek) + o cp1254 (Turkish) + o cp1255 (Hebrew) + o cp1257 (Baltic) + o cp1258 (Vietnamese) + o cp874 (Thai) + o iso-8859-1 (Western Europe) + o iso-8859-2 (Central Europe) + o iso-8859-4 (Baltic) + o iso-8859-5 (Cyrillic) + o iso-8859-7 (Greek) + o iso-8859-9 (Turkish) + o iso-8859-11 (Thai) + o iso-8859-15 (Western Europe) + o iso-8859-16 (Central Europe) + o koi8-r (Russian) + o koi8-u (Ukrainian) + Of course, the font must contain the characters corresponding to the chosen encoding. The encodings which begin with cp are those used by Windows; Linux systems usually use ISO. + * $patch : Optional modification of the encoding. Empty by default. This parameter gives the possibility to alter the encoding. Sometimes you may want to add some characters. For instance, ISO-8859-1 does not contain the euro symbol. To add it at position 164, pass array(164=>'Euro'). + + 4. Edit and copy resulting files by case: + * For embedded fonts: copy the resulting .php, .z and .ctg.z (if available) files to the TCPDF fonts directory. + * For not-embedding the font, edit the .php file and comment the $file entry. + * For CID-0 fonts (not embeddeed) you have to edit the .php file: + o change the font type to: $type='cidfont0'; + o set the default font width by adding the line: $dw=1000; + o remove the $enc, $file and $ctg variables definitions + o add one of the following blocks of text at the end of the file (depends by the language you are using - see the arialunicid0.php file for a working example): + + // Chinese Simplified + $enc='UniCNS-UTF16-H'; + $cidinfo=array('Registry'=>'Adobe', 'Ordering'=>'CNS1','Supplement'=>0); + include(dirname(__FILE__).'/uni2cid_ac16.php'); + + + // Chinese Traditional + $enc='UniGB-UTF16-H'; + $cidinfo=array('Registry'=>'Adobe', 'Ordering'=>'GB1','Supplement'=>2); + include(dirname(__FILE__).'/uni2cid_ag15.php'); + + + // Korean + $enc='UniKS-UTF16-H'; + $cidinfo=array('Registry'=>'Adobe', 'Ordering'=>'Korea1','Supplement'=>0); + include(dirname(__FILE__).'/uni2cid_ak12.php'); + + + // Japanese + $enc='UniJIS-UTF16-H'; + $cidinfo=array('Registry'=>'Adobe', 'Ordering'=>'Japan1','Supplement'=>5); + include(dirname(__FILE__).'/uni2cid_aj16.php'); + + o copy the .php file to the TCPDF fonts directory. + 5. Rename php font files variations using the following schema: + * [basic-font-name-in-lowercase].php for regular font + * [basic-font-name-in-lowercase]b.php for bold variation + * [basic-font-name-in-lowercase]i.php for oblique variation + * [basic-font-name-in-lowercase]bi.php for bold oblique variation + diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1250.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1250.map new file mode 100755 index 00000000..33a555ee --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1250.map @@ -0,0 +1,251 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!89 U+2030 perthousand +!8A U+0160 Scaron +!8B U+2039 guilsinglleft +!8C U+015A Sacute +!8D U+0164 Tcaron +!8E U+017D Zcaron +!8F U+0179 Zacute +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9A U+0161 scaron +!9B U+203A guilsinglright +!9C U+015B sacute +!9D U+0165 tcaron +!9E U+017E zcaron +!9F U+017A zacute +!A0 U+00A0 space +!A1 U+02C7 caron +!A2 U+02D8 breve +!A3 U+0141 Lslash +!A4 U+00A4 currency +!A5 U+0104 Aogonek +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+015E Scedilla +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+017B Zdotaccent +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+02DB ogonek +!B3 U+0142 lslash +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+0105 aogonek +!BA U+015F scedilla +!BB U+00BB guillemotright +!BC U+013D Lcaron +!BD U+02DD hungarumlaut +!BE U+013E lcaron +!BF U+017C zdotaccent +!C0 U+0154 Racute +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+0139 Lacute +!C6 U+0106 Cacute +!C7 U+00C7 Ccedilla +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0118 Eogonek +!CB U+00CB Edieresis +!CC U+011A Ecaron +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+010E Dcaron +!D0 U+0110 Dcroat +!D1 U+0143 Nacute +!D2 U+0147 Ncaron +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+0150 Ohungarumlaut +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+0158 Rcaron +!D9 U+016E Uring +!DA U+00DA Uacute +!DB U+0170 Uhungarumlaut +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+0162 Tcommaaccent +!DF U+00DF germandbls +!E0 U+0155 racute +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+013A lacute +!E6 U+0107 cacute +!E7 U+00E7 ccedilla +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+0119 eogonek +!EB U+00EB edieresis +!EC U+011B ecaron +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+010F dcaron +!F0 U+0111 dcroat +!F1 U+0144 nacute +!F2 U+0148 ncaron +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+0151 ohungarumlaut +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+0159 rcaron +!F9 U+016F uring +!FA U+00FA uacute +!FB U+0171 uhungarumlaut +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+0163 tcommaaccent +!FF U+02D9 dotaccent diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1251.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1251.map new file mode 100755 index 00000000..b5960fe4 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1251.map @@ -0,0 +1,255 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0402 afii10051 +!81 U+0403 afii10052 +!82 U+201A quotesinglbase +!83 U+0453 afii10100 +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+20AC Euro +!89 U+2030 perthousand +!8A U+0409 afii10058 +!8B U+2039 guilsinglleft +!8C U+040A afii10059 +!8D U+040C afii10061 +!8E U+040B afii10060 +!8F U+040F afii10145 +!90 U+0452 afii10099 +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9A U+0459 afii10106 +!9B U+203A guilsinglright +!9C U+045A afii10107 +!9D U+045C afii10109 +!9E U+045B afii10108 +!9F U+045F afii10193 +!A0 U+00A0 space +!A1 U+040E afii10062 +!A2 U+045E afii10110 +!A3 U+0408 afii10057 +!A4 U+00A4 currency +!A5 U+0490 afii10050 +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+0401 afii10023 +!A9 U+00A9 copyright +!AA U+0404 afii10053 +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+0407 afii10056 +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+0406 afii10055 +!B3 U+0456 afii10103 +!B4 U+0491 afii10098 +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+0451 afii10071 +!B9 U+2116 afii61352 +!BA U+0454 afii10101 +!BB U+00BB guillemotright +!BC U+0458 afii10105 +!BD U+0405 afii10054 +!BE U+0455 afii10102 +!BF U+0457 afii10104 +!C0 U+0410 afii10017 +!C1 U+0411 afii10018 +!C2 U+0412 afii10019 +!C3 U+0413 afii10020 +!C4 U+0414 afii10021 +!C5 U+0415 afii10022 +!C6 U+0416 afii10024 +!C7 U+0417 afii10025 +!C8 U+0418 afii10026 +!C9 U+0419 afii10027 +!CA U+041A afii10028 +!CB U+041B afii10029 +!CC U+041C afii10030 +!CD U+041D afii10031 +!CE U+041E afii10032 +!CF U+041F afii10033 +!D0 U+0420 afii10034 +!D1 U+0421 afii10035 +!D2 U+0422 afii10036 +!D3 U+0423 afii10037 +!D4 U+0424 afii10038 +!D5 U+0425 afii10039 +!D6 U+0426 afii10040 +!D7 U+0427 afii10041 +!D8 U+0428 afii10042 +!D9 U+0429 afii10043 +!DA U+042A afii10044 +!DB U+042B afii10045 +!DC U+042C afii10046 +!DD U+042D afii10047 +!DE U+042E afii10048 +!DF U+042F afii10049 +!E0 U+0430 afii10065 +!E1 U+0431 afii10066 +!E2 U+0432 afii10067 +!E3 U+0433 afii10068 +!E4 U+0434 afii10069 +!E5 U+0435 afii10070 +!E6 U+0436 afii10072 +!E7 U+0437 afii10073 +!E8 U+0438 afii10074 +!E9 U+0439 afii10075 +!EA U+043A afii10076 +!EB U+043B afii10077 +!EC U+043C afii10078 +!ED U+043D afii10079 +!EE U+043E afii10080 +!EF U+043F afii10081 +!F0 U+0440 afii10082 +!F1 U+0441 afii10083 +!F2 U+0442 afii10084 +!F3 U+0443 afii10085 +!F4 U+0444 afii10086 +!F5 U+0445 afii10087 +!F6 U+0446 afii10088 +!F7 U+0447 afii10089 +!F8 U+0448 afii10090 +!F9 U+0449 afii10091 +!FA U+044A afii10092 +!FB U+044B afii10093 +!FC U+044C afii10094 +!FD U+044D afii10095 +!FE U+044E afii10096 +!FF U+044F afii10097 diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1252.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1252.map new file mode 100755 index 00000000..b79015c3 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1252.map @@ -0,0 +1,251 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8A U+0160 Scaron +!8B U+2039 guilsinglleft +!8C U+0152 OE +!8E U+017D Zcaron +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9A U+0161 scaron +!9B U+203A guilsinglright +!9C U+0153 oe +!9E U+017E zcaron +!9F U+0178 Ydieresis +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+00D0 Eth +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+00DE Thorn +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+00F0 eth +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+00FE thorn +!FF U+00FF ydieresis diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1253.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1253.map new file mode 100755 index 00000000..b5d843c1 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1253.map @@ -0,0 +1,239 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9B U+203A guilsinglright +!A0 U+00A0 space +!A1 U+0385 dieresistonos +!A2 U+0386 Alphatonos +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+2015 afii00208 +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+0384 tonos +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+0388 Epsilontonos +!B9 U+0389 Etatonos +!BA U+038A Iotatonos +!BB U+00BB guillemotright +!BC U+038C Omicrontonos +!BD U+00BD onehalf +!BE U+038E Upsilontonos +!BF U+038F Omegatonos +!C0 U+0390 iotadieresistonos +!C1 U+0391 Alpha +!C2 U+0392 Beta +!C3 U+0393 Gamma +!C4 U+0394 Delta +!C5 U+0395 Epsilon +!C6 U+0396 Zeta +!C7 U+0397 Eta +!C8 U+0398 Theta +!C9 U+0399 Iota +!CA U+039A Kappa +!CB U+039B Lambda +!CC U+039C Mu +!CD U+039D Nu +!CE U+039E Xi +!CF U+039F Omicron +!D0 U+03A0 Pi +!D1 U+03A1 Rho +!D3 U+03A3 Sigma +!D4 U+03A4 Tau +!D5 U+03A5 Upsilon +!D6 U+03A6 Phi +!D7 U+03A7 Chi +!D8 U+03A8 Psi +!D9 U+03A9 Omega +!DA U+03AA Iotadieresis +!DB U+03AB Upsilondieresis +!DC U+03AC alphatonos +!DD U+03AD epsilontonos +!DE U+03AE etatonos +!DF U+03AF iotatonos +!E0 U+03B0 upsilondieresistonos +!E1 U+03B1 alpha +!E2 U+03B2 beta +!E3 U+03B3 gamma +!E4 U+03B4 delta +!E5 U+03B5 epsilon +!E6 U+03B6 zeta +!E7 U+03B7 eta +!E8 U+03B8 theta +!E9 U+03B9 iota +!EA U+03BA kappa +!EB U+03BB lambda +!EC U+03BC mu +!ED U+03BD nu +!EE U+03BE xi +!EF U+03BF omicron +!F0 U+03C0 pi +!F1 U+03C1 rho +!F2 U+03C2 sigma1 +!F3 U+03C3 sigma +!F4 U+03C4 tau +!F5 U+03C5 upsilon +!F6 U+03C6 phi +!F7 U+03C7 chi +!F8 U+03C8 psi +!F9 U+03C9 omega +!FA U+03CA iotadieresis +!FB U+03CB upsilondieresis +!FC U+03CC omicrontonos +!FD U+03CD upsilontonos +!FE U+03CE omegatonos diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1254.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1254.map new file mode 100755 index 00000000..3cc8c789 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1254.map @@ -0,0 +1,249 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8A U+0160 Scaron +!8B U+2039 guilsinglleft +!8C U+0152 OE +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9A U+0161 scaron +!9B U+203A guilsinglright +!9C U+0153 oe +!9F U+0178 Ydieresis +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+011E Gbreve +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0130 Idotaccent +!DE U+015E Scedilla +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+011F gbreve +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0131 dotlessi +!FE U+015F scedilla +!FF U+00FF ydieresis diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1255.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1255.map new file mode 100755 index 00000000..fa135306 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1255.map @@ -0,0 +1,233 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9B U+203A guilsinglright +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+20AA afii57636 +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00D7 multiply +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD sfthyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 middot +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00F7 divide +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+05B0 afii57799 +!C1 U+05B1 afii57801 +!C2 U+05B2 afii57800 +!C3 U+05B3 afii57802 +!C4 U+05B4 afii57793 +!C5 U+05B5 afii57794 +!C6 U+05B6 afii57795 +!C7 U+05B7 afii57798 +!C8 U+05B8 afii57797 +!C9 U+05B9 afii57806 +!CB U+05BB afii57796 +!CC U+05BC afii57807 +!CD U+05BD afii57839 +!CE U+05BE afii57645 +!CF U+05BF afii57841 +!D0 U+05C0 afii57842 +!D1 U+05C1 afii57804 +!D2 U+05C2 afii57803 +!D3 U+05C3 afii57658 +!D4 U+05F0 afii57716 +!D5 U+05F1 afii57717 +!D6 U+05F2 afii57718 +!D7 U+05F3 gereshhebrew +!D8 U+05F4 gershayimhebrew +!E0 U+05D0 afii57664 +!E1 U+05D1 afii57665 +!E2 U+05D2 afii57666 +!E3 U+05D3 afii57667 +!E4 U+05D4 afii57668 +!E5 U+05D5 afii57669 +!E6 U+05D6 afii57670 +!E7 U+05D7 afii57671 +!E8 U+05D8 afii57672 +!E9 U+05D9 afii57673 +!EA U+05DA afii57674 +!EB U+05DB afii57675 +!EC U+05DC afii57676 +!ED U+05DD afii57677 +!EE U+05DE afii57678 +!EF U+05DF afii57679 +!F0 U+05E0 afii57680 +!F1 U+05E1 afii57681 +!F2 U+05E2 afii57682 +!F3 U+05E3 afii57683 +!F4 U+05E4 afii57684 +!F5 U+05E5 afii57685 +!F6 U+05E6 afii57686 +!F7 U+05E7 afii57687 +!F8 U+05E8 afii57688 +!F9 U+05E9 afii57689 +!FA U+05EA afii57690 +!FD U+200E afii299 +!FE U+200F afii300 diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1257.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1257.map new file mode 100755 index 00000000..077fdc34 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1257.map @@ -0,0 +1,244 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!8D U+00A8 dieresis +!8E U+02C7 caron +!8F U+00B8 cedilla +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9B U+203A guilsinglright +!9D U+00AF macron +!9E U+02DB ogonek +!A0 U+00A0 space +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00D8 Oslash +!A9 U+00A9 copyright +!AA U+0156 Rcommaaccent +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00C6 AE +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00F8 oslash +!B9 U+00B9 onesuperior +!BA U+0157 rcommaaccent +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00E6 ae +!C0 U+0104 Aogonek +!C1 U+012E Iogonek +!C2 U+0100 Amacron +!C3 U+0106 Cacute +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+0118 Eogonek +!C7 U+0112 Emacron +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0179 Zacute +!CB U+0116 Edotaccent +!CC U+0122 Gcommaaccent +!CD U+0136 Kcommaaccent +!CE U+012A Imacron +!CF U+013B Lcommaaccent +!D0 U+0160 Scaron +!D1 U+0143 Nacute +!D2 U+0145 Ncommaaccent +!D3 U+00D3 Oacute +!D4 U+014C Omacron +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+0172 Uogonek +!D9 U+0141 Lslash +!DA U+015A Sacute +!DB U+016A Umacron +!DC U+00DC Udieresis +!DD U+017B Zdotaccent +!DE U+017D Zcaron +!DF U+00DF germandbls +!E0 U+0105 aogonek +!E1 U+012F iogonek +!E2 U+0101 amacron +!E3 U+0107 cacute +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+0119 eogonek +!E7 U+0113 emacron +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+017A zacute +!EB U+0117 edotaccent +!EC U+0123 gcommaaccent +!ED U+0137 kcommaaccent +!EE U+012B imacron +!EF U+013C lcommaaccent +!F0 U+0161 scaron +!F1 U+0144 nacute +!F2 U+0146 ncommaaccent +!F3 U+00F3 oacute +!F4 U+014D omacron +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+0173 uogonek +!F9 U+0142 lslash +!FA U+015B sacute +!FB U+016B umacron +!FC U+00FC udieresis +!FD U+017C zdotaccent +!FE U+017E zcaron +!FF U+02D9 dotaccent diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1258.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1258.map new file mode 100755 index 00000000..7032c35d --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp1258.map @@ -0,0 +1,247 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!8C U+0152 OE +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9B U+203A guilsinglright +!9C U+0153 oe +!9F U+0178 Ydieresis +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+0300 gravecomb +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+0110 Dcroat +!D1 U+00D1 Ntilde +!D2 U+0309 hookabovecomb +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+01A0 Ohorn +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+01AF Uhorn +!DE U+0303 tildecomb +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+0301 acutecomb +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+0111 dcroat +!F1 U+00F1 ntilde +!F2 U+0323 dotbelowcomb +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+01A1 ohorn +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+01B0 uhorn +!FE U+20AB dong +!FF U+00FF ydieresis diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp874.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp874.map new file mode 100755 index 00000000..16330d04 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/cp874.map @@ -0,0 +1,225 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!85 U+2026 ellipsis +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!A0 U+00A0 space +!A1 U+0E01 kokaithai +!A2 U+0E02 khokhaithai +!A3 U+0E03 khokhuatthai +!A4 U+0E04 khokhwaithai +!A5 U+0E05 khokhonthai +!A6 U+0E06 khorakhangthai +!A7 U+0E07 ngonguthai +!A8 U+0E08 chochanthai +!A9 U+0E09 chochingthai +!AA U+0E0A chochangthai +!AB U+0E0B sosothai +!AC U+0E0C chochoethai +!AD U+0E0D yoyingthai +!AE U+0E0E dochadathai +!AF U+0E0F topatakthai +!B0 U+0E10 thothanthai +!B1 U+0E11 thonangmonthothai +!B2 U+0E12 thophuthaothai +!B3 U+0E13 nonenthai +!B4 U+0E14 dodekthai +!B5 U+0E15 totaothai +!B6 U+0E16 thothungthai +!B7 U+0E17 thothahanthai +!B8 U+0E18 thothongthai +!B9 U+0E19 nonuthai +!BA U+0E1A bobaimaithai +!BB U+0E1B poplathai +!BC U+0E1C phophungthai +!BD U+0E1D fofathai +!BE U+0E1E phophanthai +!BF U+0E1F fofanthai +!C0 U+0E20 phosamphaothai +!C1 U+0E21 momathai +!C2 U+0E22 yoyakthai +!C3 U+0E23 roruathai +!C4 U+0E24 ruthai +!C5 U+0E25 lolingthai +!C6 U+0E26 luthai +!C7 U+0E27 wowaenthai +!C8 U+0E28 sosalathai +!C9 U+0E29 sorusithai +!CA U+0E2A sosuathai +!CB U+0E2B hohipthai +!CC U+0E2C lochulathai +!CD U+0E2D oangthai +!CE U+0E2E honokhukthai +!CF U+0E2F paiyannoithai +!D0 U+0E30 saraathai +!D1 U+0E31 maihanakatthai +!D2 U+0E32 saraaathai +!D3 U+0E33 saraamthai +!D4 U+0E34 saraithai +!D5 U+0E35 saraiithai +!D6 U+0E36 sarauethai +!D7 U+0E37 saraueethai +!D8 U+0E38 sarauthai +!D9 U+0E39 sarauuthai +!DA U+0E3A phinthuthai +!DF U+0E3F bahtthai +!E0 U+0E40 saraethai +!E1 U+0E41 saraaethai +!E2 U+0E42 saraothai +!E3 U+0E43 saraaimaimuanthai +!E4 U+0E44 saraaimaimalaithai +!E5 U+0E45 lakkhangyaothai +!E6 U+0E46 maiyamokthai +!E7 U+0E47 maitaikhuthai +!E8 U+0E48 maiekthai +!E9 U+0E49 maithothai +!EA U+0E4A maitrithai +!EB U+0E4B maichattawathai +!EC U+0E4C thanthakhatthai +!ED U+0E4D nikhahitthai +!EE U+0E4E yamakkanthai +!EF U+0E4F fongmanthai +!F0 U+0E50 zerothai +!F1 U+0E51 onethai +!F2 U+0E52 twothai +!F3 U+0E53 threethai +!F4 U+0E54 fourthai +!F5 U+0E55 fivethai +!F6 U+0E56 sixthai +!F7 U+0E57 seventhai +!F8 U+0E58 eightthai +!F9 U+0E59 ninethai +!FA U+0E5A angkhankhuthai +!FB U+0E5B khomutthai diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-1.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-1.map new file mode 100755 index 00000000..74fb2fe5 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-1.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+00D0 Eth +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+00DE Thorn +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+00F0 eth +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+00FE thorn +!FF U+00FF ydieresis diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-11.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-11.map new file mode 100755 index 00000000..8cf66731 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-11.map @@ -0,0 +1,248 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0E01 kokaithai +!A2 U+0E02 khokhaithai +!A3 U+0E03 khokhuatthai +!A4 U+0E04 khokhwaithai +!A5 U+0E05 khokhonthai +!A6 U+0E06 khorakhangthai +!A7 U+0E07 ngonguthai +!A8 U+0E08 chochanthai +!A9 U+0E09 chochingthai +!AA U+0E0A chochangthai +!AB U+0E0B sosothai +!AC U+0E0C chochoethai +!AD U+0E0D yoyingthai +!AE U+0E0E dochadathai +!AF U+0E0F topatakthai +!B0 U+0E10 thothanthai +!B1 U+0E11 thonangmonthothai +!B2 U+0E12 thophuthaothai +!B3 U+0E13 nonenthai +!B4 U+0E14 dodekthai +!B5 U+0E15 totaothai +!B6 U+0E16 thothungthai +!B7 U+0E17 thothahanthai +!B8 U+0E18 thothongthai +!B9 U+0E19 nonuthai +!BA U+0E1A bobaimaithai +!BB U+0E1B poplathai +!BC U+0E1C phophungthai +!BD U+0E1D fofathai +!BE U+0E1E phophanthai +!BF U+0E1F fofanthai +!C0 U+0E20 phosamphaothai +!C1 U+0E21 momathai +!C2 U+0E22 yoyakthai +!C3 U+0E23 roruathai +!C4 U+0E24 ruthai +!C5 U+0E25 lolingthai +!C6 U+0E26 luthai +!C7 U+0E27 wowaenthai +!C8 U+0E28 sosalathai +!C9 U+0E29 sorusithai +!CA U+0E2A sosuathai +!CB U+0E2B hohipthai +!CC U+0E2C lochulathai +!CD U+0E2D oangthai +!CE U+0E2E honokhukthai +!CF U+0E2F paiyannoithai +!D0 U+0E30 saraathai +!D1 U+0E31 maihanakatthai +!D2 U+0E32 saraaathai +!D3 U+0E33 saraamthai +!D4 U+0E34 saraithai +!D5 U+0E35 saraiithai +!D6 U+0E36 sarauethai +!D7 U+0E37 saraueethai +!D8 U+0E38 sarauthai +!D9 U+0E39 sarauuthai +!DA U+0E3A phinthuthai +!DF U+0E3F bahtthai +!E0 U+0E40 saraethai +!E1 U+0E41 saraaethai +!E2 U+0E42 saraothai +!E3 U+0E43 saraaimaimuanthai +!E4 U+0E44 saraaimaimalaithai +!E5 U+0E45 lakkhangyaothai +!E6 U+0E46 maiyamokthai +!E7 U+0E47 maitaikhuthai +!E8 U+0E48 maiekthai +!E9 U+0E49 maithothai +!EA U+0E4A maitrithai +!EB U+0E4B maichattawathai +!EC U+0E4C thanthakhatthai +!ED U+0E4D nikhahitthai +!EE U+0E4E yamakkanthai +!EF U+0E4F fongmanthai +!F0 U+0E50 zerothai +!F1 U+0E51 onethai +!F2 U+0E52 twothai +!F3 U+0E53 threethai +!F4 U+0E54 fourthai +!F5 U+0E55 fivethai +!F6 U+0E56 sixthai +!F7 U+0E57 seventhai +!F8 U+0E58 eightthai +!F9 U+0E59 ninethai +!FA U+0E5A angkhankhuthai +!FB U+0E5B khomutthai diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-15.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-15.map new file mode 100755 index 00000000..2689703d --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-15.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+20AC Euro +!A5 U+00A5 yen +!A6 U+0160 Scaron +!A7 U+00A7 section +!A8 U+0161 scaron +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+017D Zcaron +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+017E zcaron +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+0152 OE +!BD U+0153 oe +!BE U+0178 Ydieresis +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+00D0 Eth +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+00DE Thorn +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+00F0 eth +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+00FE thorn +!FF U+00FF ydieresis diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-16.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-16.map new file mode 100755 index 00000000..89b802a7 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-16.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0104 Aogonek +!A2 U+0105 aogonek +!A3 U+0141 Lslash +!A4 U+20AC Euro +!A5 U+201E quotedblbase +!A6 U+0160 Scaron +!A7 U+00A7 section +!A8 U+0161 scaron +!A9 U+00A9 copyright +!AA U+0218 Scommaaccent +!AB U+00AB guillemotleft +!AC U+0179 Zacute +!AD U+00AD hyphen +!AE U+017A zacute +!AF U+017B Zdotaccent +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+010C Ccaron +!B3 U+0142 lslash +!B4 U+017D Zcaron +!B5 U+201D quotedblright +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+017E zcaron +!B9 U+010D ccaron +!BA U+0219 scommaaccent +!BB U+00BB guillemotright +!BC U+0152 OE +!BD U+0153 oe +!BE U+0178 Ydieresis +!BF U+017C zdotaccent +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+0106 Cacute +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+0110 Dcroat +!D1 U+0143 Nacute +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+0150 Ohungarumlaut +!D6 U+00D6 Odieresis +!D7 U+015A Sacute +!D8 U+0170 Uhungarumlaut +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0118 Eogonek +!DE U+021A Tcommaaccent +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+0107 cacute +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+0111 dcroat +!F1 U+0144 nacute +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+0151 ohungarumlaut +!F6 U+00F6 odieresis +!F7 U+015B sacute +!F8 U+0171 uhungarumlaut +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0119 eogonek +!FE U+021B tcommaaccent +!FF U+00FF ydieresis diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-2.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-2.map new file mode 100755 index 00000000..af9588d0 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-2.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0104 Aogonek +!A2 U+02D8 breve +!A3 U+0141 Lslash +!A4 U+00A4 currency +!A5 U+013D Lcaron +!A6 U+015A Sacute +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+0160 Scaron +!AA U+015E Scedilla +!AB U+0164 Tcaron +!AC U+0179 Zacute +!AD U+00AD hyphen +!AE U+017D Zcaron +!AF U+017B Zdotaccent +!B0 U+00B0 degree +!B1 U+0105 aogonek +!B2 U+02DB ogonek +!B3 U+0142 lslash +!B4 U+00B4 acute +!B5 U+013E lcaron +!B6 U+015B sacute +!B7 U+02C7 caron +!B8 U+00B8 cedilla +!B9 U+0161 scaron +!BA U+015F scedilla +!BB U+0165 tcaron +!BC U+017A zacute +!BD U+02DD hungarumlaut +!BE U+017E zcaron +!BF U+017C zdotaccent +!C0 U+0154 Racute +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+0139 Lacute +!C6 U+0106 Cacute +!C7 U+00C7 Ccedilla +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0118 Eogonek +!CB U+00CB Edieresis +!CC U+011A Ecaron +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+010E Dcaron +!D0 U+0110 Dcroat +!D1 U+0143 Nacute +!D2 U+0147 Ncaron +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+0150 Ohungarumlaut +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+0158 Rcaron +!D9 U+016E Uring +!DA U+00DA Uacute +!DB U+0170 Uhungarumlaut +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+0162 Tcommaaccent +!DF U+00DF germandbls +!E0 U+0155 racute +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+013A lacute +!E6 U+0107 cacute +!E7 U+00E7 ccedilla +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+0119 eogonek +!EB U+00EB edieresis +!EC U+011B ecaron +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+010F dcaron +!F0 U+0111 dcroat +!F1 U+0144 nacute +!F2 U+0148 ncaron +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+0151 ohungarumlaut +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+0159 rcaron +!F9 U+016F uring +!FA U+00FA uacute +!FB U+0171 uhungarumlaut +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+0163 tcommaaccent +!FF U+02D9 dotaccent diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-4.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-4.map new file mode 100755 index 00000000..e81dd7f3 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-4.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0104 Aogonek +!A2 U+0138 kgreenlandic +!A3 U+0156 Rcommaaccent +!A4 U+00A4 currency +!A5 U+0128 Itilde +!A6 U+013B Lcommaaccent +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+0160 Scaron +!AA U+0112 Emacron +!AB U+0122 Gcommaaccent +!AC U+0166 Tbar +!AD U+00AD hyphen +!AE U+017D Zcaron +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+0105 aogonek +!B2 U+02DB ogonek +!B3 U+0157 rcommaaccent +!B4 U+00B4 acute +!B5 U+0129 itilde +!B6 U+013C lcommaaccent +!B7 U+02C7 caron +!B8 U+00B8 cedilla +!B9 U+0161 scaron +!BA U+0113 emacron +!BB U+0123 gcommaaccent +!BC U+0167 tbar +!BD U+014A Eng +!BE U+017E zcaron +!BF U+014B eng +!C0 U+0100 Amacron +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+012E Iogonek +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0118 Eogonek +!CB U+00CB Edieresis +!CC U+0116 Edotaccent +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+012A Imacron +!D0 U+0110 Dcroat +!D1 U+0145 Ncommaaccent +!D2 U+014C Omacron +!D3 U+0136 Kcommaaccent +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+0172 Uogonek +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0168 Utilde +!DE U+016A Umacron +!DF U+00DF germandbls +!E0 U+0101 amacron +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+012F iogonek +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+0119 eogonek +!EB U+00EB edieresis +!EC U+0117 edotaccent +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+012B imacron +!F0 U+0111 dcroat +!F1 U+0146 ncommaaccent +!F2 U+014D omacron +!F3 U+0137 kcommaaccent +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+0173 uogonek +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0169 utilde +!FE U+016B umacron +!FF U+02D9 dotaccent diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-5.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-5.map new file mode 100755 index 00000000..8030fd54 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-5.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0401 afii10023 +!A2 U+0402 afii10051 +!A3 U+0403 afii10052 +!A4 U+0404 afii10053 +!A5 U+0405 afii10054 +!A6 U+0406 afii10055 +!A7 U+0407 afii10056 +!A8 U+0408 afii10057 +!A9 U+0409 afii10058 +!AA U+040A afii10059 +!AB U+040B afii10060 +!AC U+040C afii10061 +!AD U+00AD hyphen +!AE U+040E afii10062 +!AF U+040F afii10145 +!B0 U+0410 afii10017 +!B1 U+0411 afii10018 +!B2 U+0412 afii10019 +!B3 U+0413 afii10020 +!B4 U+0414 afii10021 +!B5 U+0415 afii10022 +!B6 U+0416 afii10024 +!B7 U+0417 afii10025 +!B8 U+0418 afii10026 +!B9 U+0419 afii10027 +!BA U+041A afii10028 +!BB U+041B afii10029 +!BC U+041C afii10030 +!BD U+041D afii10031 +!BE U+041E afii10032 +!BF U+041F afii10033 +!C0 U+0420 afii10034 +!C1 U+0421 afii10035 +!C2 U+0422 afii10036 +!C3 U+0423 afii10037 +!C4 U+0424 afii10038 +!C5 U+0425 afii10039 +!C6 U+0426 afii10040 +!C7 U+0427 afii10041 +!C8 U+0428 afii10042 +!C9 U+0429 afii10043 +!CA U+042A afii10044 +!CB U+042B afii10045 +!CC U+042C afii10046 +!CD U+042D afii10047 +!CE U+042E afii10048 +!CF U+042F afii10049 +!D0 U+0430 afii10065 +!D1 U+0431 afii10066 +!D2 U+0432 afii10067 +!D3 U+0433 afii10068 +!D4 U+0434 afii10069 +!D5 U+0435 afii10070 +!D6 U+0436 afii10072 +!D7 U+0437 afii10073 +!D8 U+0438 afii10074 +!D9 U+0439 afii10075 +!DA U+043A afii10076 +!DB U+043B afii10077 +!DC U+043C afii10078 +!DD U+043D afii10079 +!DE U+043E afii10080 +!DF U+043F afii10081 +!E0 U+0440 afii10082 +!E1 U+0441 afii10083 +!E2 U+0442 afii10084 +!E3 U+0443 afii10085 +!E4 U+0444 afii10086 +!E5 U+0445 afii10087 +!E6 U+0446 afii10088 +!E7 U+0447 afii10089 +!E8 U+0448 afii10090 +!E9 U+0449 afii10091 +!EA U+044A afii10092 +!EB U+044B afii10093 +!EC U+044C afii10094 +!ED U+044D afii10095 +!EE U+044E afii10096 +!EF U+044F afii10097 +!F0 U+2116 afii61352 +!F1 U+0451 afii10071 +!F2 U+0452 afii10099 +!F3 U+0453 afii10100 +!F4 U+0454 afii10101 +!F5 U+0455 afii10102 +!F6 U+0456 afii10103 +!F7 U+0457 afii10104 +!F8 U+0458 afii10105 +!F9 U+0459 afii10106 +!FA U+045A afii10107 +!FB U+045B afii10108 +!FC U+045C afii10109 +!FD U+00A7 section +!FE U+045E afii10110 +!FF U+045F afii10193 diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-7.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-7.map new file mode 100755 index 00000000..be8698af --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-7.map @@ -0,0 +1,250 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+2018 quoteleft +!A2 U+2019 quoteright +!A3 U+00A3 sterling +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AF U+2015 afii00208 +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+0384 tonos +!B5 U+0385 dieresistonos +!B6 U+0386 Alphatonos +!B7 U+00B7 periodcentered +!B8 U+0388 Epsilontonos +!B9 U+0389 Etatonos +!BA U+038A Iotatonos +!BB U+00BB guillemotright +!BC U+038C Omicrontonos +!BD U+00BD onehalf +!BE U+038E Upsilontonos +!BF U+038F Omegatonos +!C0 U+0390 iotadieresistonos +!C1 U+0391 Alpha +!C2 U+0392 Beta +!C3 U+0393 Gamma +!C4 U+0394 Delta +!C5 U+0395 Epsilon +!C6 U+0396 Zeta +!C7 U+0397 Eta +!C8 U+0398 Theta +!C9 U+0399 Iota +!CA U+039A Kappa +!CB U+039B Lambda +!CC U+039C Mu +!CD U+039D Nu +!CE U+039E Xi +!CF U+039F Omicron +!D0 U+03A0 Pi +!D1 U+03A1 Rho +!D3 U+03A3 Sigma +!D4 U+03A4 Tau +!D5 U+03A5 Upsilon +!D6 U+03A6 Phi +!D7 U+03A7 Chi +!D8 U+03A8 Psi +!D9 U+03A9 Omega +!DA U+03AA Iotadieresis +!DB U+03AB Upsilondieresis +!DC U+03AC alphatonos +!DD U+03AD epsilontonos +!DE U+03AE etatonos +!DF U+03AF iotatonos +!E0 U+03B0 upsilondieresistonos +!E1 U+03B1 alpha +!E2 U+03B2 beta +!E3 U+03B3 gamma +!E4 U+03B4 delta +!E5 U+03B5 epsilon +!E6 U+03B6 zeta +!E7 U+03B7 eta +!E8 U+03B8 theta +!E9 U+03B9 iota +!EA U+03BA kappa +!EB U+03BB lambda +!EC U+03BC mu +!ED U+03BD nu +!EE U+03BE xi +!EF U+03BF omicron +!F0 U+03C0 pi +!F1 U+03C1 rho +!F2 U+03C2 sigma1 +!F3 U+03C3 sigma +!F4 U+03C4 tau +!F5 U+03C5 upsilon +!F6 U+03C6 phi +!F7 U+03C7 chi +!F8 U+03C8 psi +!F9 U+03C9 omega +!FA U+03CA iotadieresis +!FB U+03CB upsilondieresis +!FC U+03CC omicrontonos +!FD U+03CD upsilontonos +!FE U+03CE omegatonos diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-9.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-9.map new file mode 100755 index 00000000..a60bb19d --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/iso-8859-9.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+011E Gbreve +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0130 Idotaccent +!DE U+015E Scedilla +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+011F gbreve +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0131 dotlessi +!FE U+015F scedilla +!FF U+00FF ydieresis diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/koi8-r.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/koi8-r.map new file mode 100755 index 00000000..026880d6 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/koi8-r.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+2500 SF100000 +!81 U+2502 SF110000 +!82 U+250C SF010000 +!83 U+2510 SF030000 +!84 U+2514 SF020000 +!85 U+2518 SF040000 +!86 U+251C SF080000 +!87 U+2524 SF090000 +!88 U+252C SF060000 +!89 U+2534 SF070000 +!8A U+253C SF050000 +!8B U+2580 upblock +!8C U+2584 dnblock +!8D U+2588 block +!8E U+258C lfblock +!8F U+2590 rtblock +!90 U+2591 ltshade +!91 U+2592 shade +!92 U+2593 dkshade +!93 U+2320 integraltp +!94 U+25A0 filledbox +!95 U+2219 periodcentered +!96 U+221A radical +!97 U+2248 approxequal +!98 U+2264 lessequal +!99 U+2265 greaterequal +!9A U+00A0 space +!9B U+2321 integralbt +!9C U+00B0 degree +!9D U+00B2 twosuperior +!9E U+00B7 periodcentered +!9F U+00F7 divide +!A0 U+2550 SF430000 +!A1 U+2551 SF240000 +!A2 U+2552 SF510000 +!A3 U+0451 afii10071 +!A4 U+2553 SF520000 +!A5 U+2554 SF390000 +!A6 U+2555 SF220000 +!A7 U+2556 SF210000 +!A8 U+2557 SF250000 +!A9 U+2558 SF500000 +!AA U+2559 SF490000 +!AB U+255A SF380000 +!AC U+255B SF280000 +!AD U+255C SF270000 +!AE U+255D SF260000 +!AF U+255E SF360000 +!B0 U+255F SF370000 +!B1 U+2560 SF420000 +!B2 U+2561 SF190000 +!B3 U+0401 afii10023 +!B4 U+2562 SF200000 +!B5 U+2563 SF230000 +!B6 U+2564 SF470000 +!B7 U+2565 SF480000 +!B8 U+2566 SF410000 +!B9 U+2567 SF450000 +!BA U+2568 SF460000 +!BB U+2569 SF400000 +!BC U+256A SF540000 +!BD U+256B SF530000 +!BE U+256C SF440000 +!BF U+00A9 copyright +!C0 U+044E afii10096 +!C1 U+0430 afii10065 +!C2 U+0431 afii10066 +!C3 U+0446 afii10088 +!C4 U+0434 afii10069 +!C5 U+0435 afii10070 +!C6 U+0444 afii10086 +!C7 U+0433 afii10068 +!C8 U+0445 afii10087 +!C9 U+0438 afii10074 +!CA U+0439 afii10075 +!CB U+043A afii10076 +!CC U+043B afii10077 +!CD U+043C afii10078 +!CE U+043D afii10079 +!CF U+043E afii10080 +!D0 U+043F afii10081 +!D1 U+044F afii10097 +!D2 U+0440 afii10082 +!D3 U+0441 afii10083 +!D4 U+0442 afii10084 +!D5 U+0443 afii10085 +!D6 U+0436 afii10072 +!D7 U+0432 afii10067 +!D8 U+044C afii10094 +!D9 U+044B afii10093 +!DA U+0437 afii10073 +!DB U+0448 afii10090 +!DC U+044D afii10095 +!DD U+0449 afii10091 +!DE U+0447 afii10089 +!DF U+044A afii10092 +!E0 U+042E afii10048 +!E1 U+0410 afii10017 +!E2 U+0411 afii10018 +!E3 U+0426 afii10040 +!E4 U+0414 afii10021 +!E5 U+0415 afii10022 +!E6 U+0424 afii10038 +!E7 U+0413 afii10020 +!E8 U+0425 afii10039 +!E9 U+0418 afii10026 +!EA U+0419 afii10027 +!EB U+041A afii10028 +!EC U+041B afii10029 +!ED U+041C afii10030 +!EE U+041D afii10031 +!EF U+041E afii10032 +!F0 U+041F afii10033 +!F1 U+042F afii10049 +!F2 U+0420 afii10034 +!F3 U+0421 afii10035 +!F4 U+0422 afii10036 +!F5 U+0423 afii10037 +!F6 U+0416 afii10024 +!F7 U+0412 afii10019 +!F8 U+042C afii10046 +!F9 U+042B afii10045 +!FA U+0417 afii10025 +!FB U+0428 afii10042 +!FC U+042D afii10047 +!FD U+0429 afii10043 +!FE U+0427 afii10041 +!FF U+042A afii10044 diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/koi8-u.map b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/koi8-u.map new file mode 100755 index 00000000..97d9d031 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/enc/koi8-u.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+2500 SF100000 +!81 U+2502 SF110000 +!82 U+250C SF010000 +!83 U+2510 SF030000 +!84 U+2514 SF020000 +!85 U+2518 SF040000 +!86 U+251C SF080000 +!87 U+2524 SF090000 +!88 U+252C SF060000 +!89 U+2534 SF070000 +!8A U+253C SF050000 +!8B U+2580 upblock +!8C U+2584 dnblock +!8D U+2588 block +!8E U+258C lfblock +!8F U+2590 rtblock +!90 U+2591 ltshade +!91 U+2592 shade +!92 U+2593 dkshade +!93 U+2320 integraltp +!94 U+25A0 filledbox +!95 U+2022 bullet +!96 U+221A radical +!97 U+2248 approxequal +!98 U+2264 lessequal +!99 U+2265 greaterequal +!9A U+00A0 space +!9B U+2321 integralbt +!9C U+00B0 degree +!9D U+00B2 twosuperior +!9E U+00B7 periodcentered +!9F U+00F7 divide +!A0 U+2550 SF430000 +!A1 U+2551 SF240000 +!A2 U+2552 SF510000 +!A3 U+0451 afii10071 +!A4 U+0454 afii10101 +!A5 U+2554 SF390000 +!A6 U+0456 afii10103 +!A7 U+0457 afii10104 +!A8 U+2557 SF250000 +!A9 U+2558 SF500000 +!AA U+2559 SF490000 +!AB U+255A SF380000 +!AC U+255B SF280000 +!AD U+0491 afii10098 +!AE U+255D SF260000 +!AF U+255E SF360000 +!B0 U+255F SF370000 +!B1 U+2560 SF420000 +!B2 U+2561 SF190000 +!B3 U+0401 afii10023 +!B4 U+0404 afii10053 +!B5 U+2563 SF230000 +!B6 U+0406 afii10055 +!B7 U+0407 afii10056 +!B8 U+2566 SF410000 +!B9 U+2567 SF450000 +!BA U+2568 SF460000 +!BB U+2569 SF400000 +!BC U+256A SF540000 +!BD U+0490 afii10050 +!BE U+256C SF440000 +!BF U+00A9 copyright +!C0 U+044E afii10096 +!C1 U+0430 afii10065 +!C2 U+0431 afii10066 +!C3 U+0446 afii10088 +!C4 U+0434 afii10069 +!C5 U+0435 afii10070 +!C6 U+0444 afii10086 +!C7 U+0433 afii10068 +!C8 U+0445 afii10087 +!C9 U+0438 afii10074 +!CA U+0439 afii10075 +!CB U+043A afii10076 +!CC U+043B afii10077 +!CD U+043C afii10078 +!CE U+043D afii10079 +!CF U+043E afii10080 +!D0 U+043F afii10081 +!D1 U+044F afii10097 +!D2 U+0440 afii10082 +!D3 U+0441 afii10083 +!D4 U+0442 afii10084 +!D5 U+0443 afii10085 +!D6 U+0436 afii10072 +!D7 U+0432 afii10067 +!D8 U+044C afii10094 +!D9 U+044B afii10093 +!DA U+0437 afii10073 +!DB U+0448 afii10090 +!DC U+044D afii10095 +!DD U+0449 afii10091 +!DE U+0447 afii10089 +!DF U+044A afii10092 +!E0 U+042E afii10048 +!E1 U+0410 afii10017 +!E2 U+0411 afii10018 +!E3 U+0426 afii10040 +!E4 U+0414 afii10021 +!E5 U+0415 afii10022 +!E6 U+0424 afii10038 +!E7 U+0413 afii10020 +!E8 U+0425 afii10039 +!E9 U+0418 afii10026 +!EA U+0419 afii10027 +!EB U+041A afii10028 +!EC U+041B afii10029 +!ED U+041C afii10030 +!EE U+041D afii10031 +!EF U+041E afii10032 +!F0 U+041F afii10033 +!F1 U+042F afii10049 +!F2 U+0420 afii10034 +!F3 U+0421 afii10035 +!F4 U+0422 afii10036 +!F5 U+0423 afii10037 +!F6 U+0416 afii10024 +!F7 U+0412 afii10019 +!F8 U+042C afii10046 +!F9 U+042B afii10045 +!FA U+0417 afii10025 +!FB U+0428 afii10042 +!FC U+042D afii10047 +!FD U+0429 afii10043 +!FE U+0427 afii10041 +!FF U+042A afii10044 diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/freetype6.dll b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/freetype6.dll new file mode 100755 index 00000000..53878a03 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/freetype6.dll differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/makeallttffonts.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/makeallttffonts.php new file mode 100755 index 00000000..bf395872 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/makeallttffonts.php @@ -0,0 +1,71 @@ +. +// +// Additionally, you can't remove the original TCExam logo, copyrights statements +// and links to Tecnick.com and TCExam websites. +// +// See LICENSE.TXT file for more information. +//============================================================+ + +/** + * Process all TTF files on current directory to build TCPDF compatible font files. + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @copyright Copyright © 2004-2009, Nicola Asuni - Tecnick.com S.r.l. - ITALY - www.tecnick.com - info@tecnick.com + * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License + * @link www.tecnick.com + * @since 2008-12-07 + */ + +/** + */ + +// read directory for files (only graphics files). +$handle = opendir('.'); +while($file = readdir($handle)) { + $path_parts = pathinfo($file); + $file_ext = strtolower($path_parts['extension']); + if ($file_ext == 'ttf') { + exec('./ttf2ufm -a -F '.$path_parts['basename'].''); + exec('php -q makefont.php '.$path_parts['basename'].' '.$path_parts['filename'].'.ufm'); + } +} +closedir($handle); + +//============================================================+ +// END OF FILE +//============================================================+ +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/makefont.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/makefont.php new file mode 100755 index 00000000..b8ba2a98 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/makefont.php @@ -0,0 +1,610 @@ +. +// +// See LICENSE.TXT file for more information. +// ---------------------------------------------------------------------------- +// +// Description : Utility to generate font definition files fot TCPDF +// +// Authors: Nicola Asuni, Olivier Plathey, Steven Wittens +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com S.r.l. +// Via della Pace, 11 +// 09044 Quartucciu (CA) +// ITALY +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Utility to generate font definition files fot TCPDF. + * @author Nicola Asuni, Olivier Plathey, Steven Wittens + * @copyright 2004-2008 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com + * @package com.tecnick.tcpdf + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL +*/ + +/** + * + * @param string $fontfile path to font file (TTF, OTF or PFB). + * @param string $fmfile font metrics file (UFM or AFM). + * @param boolean $embedded Set to false to not embed the font, true otherwise (default). + * @param string $enc Name of the encoding table to use. Omit this parameter for TrueType Unicode, OpenType Unicode and symbolic fonts like Symbol or ZapfDingBats. + * @param array $patch Optional modification of the encoding + */ +function MakeFont($fontfile, $fmfile, $embedded=true, $enc='cp1252', $patch=array()) { + //Generate a font definition file + set_magic_quotes_runtime(0); + ini_set('auto_detect_line_endings', '1'); + if (!file_exists($fontfile)) { + die('Error: file not found: '.$fontfile); + } + if (!file_exists($fmfile)) { + die('Error: file not found: '.$fmfile); + } + $cidtogidmap = ''; + $map = array(); + $diff = ''; + $dw = 0; // default width + $ffext = strtolower(substr($fontfile, -3)); + $fmext = strtolower(substr($fmfile, -3)); + if ($fmext == 'afm') { + if (($ffext == 'ttf') OR ($ffext == 'otf')) { + $type = 'TrueType'; + } elseif ($ffext == 'pfb') { + $type = 'Type1'; + } else { + die('Error: unrecognized font file extension: '.$ffext); + } + if ($enc) { + $map = ReadMap($enc); + foreach ($patch as $cc => $gn) { + $map[$cc] = $gn; + } + } + $fm = ReadAFM($fmfile, $map); + if (isset($widths['.notdef'])) { + $dw = $widths['.notdef']; + } + if ($enc) { + $diff = MakeFontEncoding($map); + } + $fd = MakeFontDescriptor($fm, empty($map)); + } elseif ($fmext == 'ufm') { + $enc = ''; + if (($ffext == 'ttf') OR ($ffext == 'otf')) { + $type = 'TrueTypeUnicode'; + } else { + die('Error: not a TrueType font: '.$ffext); + } + $fm = ReadUFM($fmfile, $cidtogidmap); + $dw = $fm['MissingWidth']; + $fd = MakeFontDescriptor($fm, false); + } + //Start generation + $s = ' 0)) { + // assign default space width + $dw = $fm['Widths'][32]; + } else { + $dw = 600; + } + } + $s .= '$dw='.$dw.";\n"; + $w = MakeWidthArray($fm); + $s .= '$cw='.$w.";\n"; + $s .= '$enc=\''.$enc."';\n"; + $s .= '$diff=\''.$diff."';\n"; + $basename = substr(basename($fmfile), 0, -4); + if ($embedded) { + //Embedded font + if (($type == 'TrueType') OR ($type == 'TrueTypeUnicode')) { + CheckTTF($fontfile); + } + $f = fopen($fontfile,'rb'); + if (!$f) { + die('Error: Unable to open '.$fontfile); + } + $file = fread($f, filesize($fontfile)); + fclose($f); + if ($type == 'Type1') { + //Find first two sections and discard third one + $header = (ord($file{0}) == 128); + if ($header) { + //Strip first binary header + $file = substr($file, 6); + } + $pos = strpos($file, 'eexec'); + if (!$pos) { + die('Error: font file does not seem to be valid Type1'); + } + $size1 = $pos + 6; + if ($header AND (ord($file{$size1}) == 128)) { + //Strip second binary header + $file = substr($file, 0, $size1).substr($file, $size1+6); + } + $pos = strpos($file, '00000000'); + if (!$pos) { + die('Error: font file does not seem to be valid Type1'); + } + $size2 = $pos - $size1; + $file = substr($file, 0, ($size1 + $size2)); + } + $basename = strtolower($basename); + if (function_exists('gzcompress')) { + $cmp = $basename.'.z'; + SaveToFile($cmp, gzcompress($file, 9), 'b'); + $s .= '$file=\''.$cmp."';\n"; + print "Font file compressed (".$cmp.")\n"; + if (!empty($cidtogidmap)) { + $cmp = $basename.'.ctg.z'; + SaveToFile($cmp, gzcompress($cidtogidmap, 9), 'b'); + print "CIDToGIDMap created and compressed (".$cmp.")\n"; + $s .= '$ctg=\''.$cmp."';\n"; + } + } else { + $s .= '$file=\''.basename($fontfile)."';\n"; + print "Notice: font file could not be compressed (zlib extension not available)\n"; + if (!empty($cidtogidmap)) { + $cmp = $basename.'.ctg'; + $f = fopen($cmp, 'wb'); + fwrite($f, $cidtogidmap); + fclose($f); + print "CIDToGIDMap created (".$cmp.")\n"; + $s .= '$ctg=\''.$cmp."';\n"; + } + } + if($type == 'Type1') { + $s .= '$size1='.$size1.";\n"; + $s .= '$size2='.$size2.";\n"; + } else { + $s.='$originalsize='.filesize($fontfile).";\n"; + } + } else { + //Not embedded font + $s .= '$file='."'';\n"; + } + $s .= "?>"; + SaveToFile($basename.'.php',$s); + print "Font definition file generated (".$basename.".php)\n"; +} + +/** + * Read the specified encoding map. + * @param string $enc map name (see /enc/ folder for valid names). + */ +function ReadMap($enc) { + //Read a map file + $file = dirname(__FILE__).'/enc/'.strtolower($enc).'.map'; + $a = file($file); + if (empty($a)) { + die('Error: encoding not found: '.$enc); + } + $cc2gn = array(); + foreach ($a as $l) { + if ($l{0} == '!') { + $e = preg_split('/[ \\t]+/',rtrim($l)); + $cc = hexdec(substr($e[0],1)); + $gn = $e[2]; + $cc2gn[$cc] = $gn; + } + } + for($i = 0; $i <= 255; $i++) { + if(!isset($cc2gn[$i])) { + $cc2gn[$i] = '.notdef'; + } + } + return $cc2gn; +} + +/** + * Read UFM file + */ +function ReadUFM($file, &$cidtogidmap) { + //Prepare empty CIDToGIDMap + $cidtogidmap = str_pad('', (256 * 256 * 2), "\x00"); + //Read a font metric file + $a = file($file); + if (empty($a)) { + die('File not found'); + } + $widths = array(); + $fm = array(); + foreach($a as $l) { + $e = explode(' ',chop($l)); + if(count($e) < 2) { + continue; + } + $code = $e[0]; + $param = $e[1]; + if($code == 'U') { + // U 827 ; WX 0 ; N squaresubnosp ; G 675 ; + //Character metrics + $cc = (int)$e[1]; + if ($cc != -1) { + $gn = $e[7]; + $w = $e[4]; + $glyph = $e[10]; + $widths[$cc] = $w; + if($cc == ord('X')) { + $fm['CapXHeight'] = $e[13]; + } + // Set GID + if (($cc >= 0) AND ($cc < 0xFFFF) AND $glyph) { + $cidtogidmap{($cc * 2)} = chr($glyph >> 8); + $cidtogidmap{(($cc * 2) + 1)} = chr($glyph & 0xFF); + } + } + if((isset($gn) AND ($gn == '.notdef')) AND (!isset($fm['MissingWidth']))) { + $fm['MissingWidth'] = $w; + } + } elseif($code == 'FontName') { + $fm['FontName'] = $param; + } elseif($code == 'Weight') { + $fm['Weight'] = $param; + } elseif($code == 'ItalicAngle') { + $fm['ItalicAngle'] = (double)$param; + } elseif($code == 'Ascender') { + $fm['Ascender'] = (int)$param; + } elseif($code == 'Descender') { + $fm['Descender'] = (int)$param; + } elseif($code == 'UnderlineThickness') { + $fm['UnderlineThickness'] = (int)$param; + } elseif($code == 'UnderlinePosition') { + $fm['UnderlinePosition'] = (int)$param; + } elseif($code == 'IsFixedPitch') { + $fm['IsFixedPitch'] = ($param == 'true'); + } elseif($code == 'FontBBox') { + $fm['FontBBox'] = array($e[1], $e[2], $e[3], $e[4]); + } elseif($code == 'CapHeight') { + $fm['CapHeight'] = (int)$param; + } elseif($code == 'StdVW') { + $fm['StdVW'] = (int)$param; + } + } + if(!isset($fm['MissingWidth'])) { + $fm['MissingWidth'] = 600; + } + if(!isset($fm['FontName'])) { + die('FontName not found'); + } + $fm['Widths'] = $widths; + return $fm; +} + +/** + * Read AFM file + */ +function ReadAFM($file,&$map) { + //Read a font metric file + $a = file($file); + if(empty($a)) { + die('File not found'); + } + $widths = array(); + $fm = array(); + $fix = array( + 'Edot'=>'Edotaccent', + 'edot'=>'edotaccent', + 'Idot'=>'Idotaccent', + 'Zdot'=>'Zdotaccent', + 'zdot'=>'zdotaccent', + 'Odblacute' => 'Ohungarumlaut', + 'odblacute' => 'ohungarumlaut', + 'Udblacute'=>'Uhungarumlaut', + 'udblacute'=>'uhungarumlaut', + 'Gcedilla'=>'Gcommaaccent' + ,'gcedilla'=>'gcommaaccent', + 'Kcedilla'=>'Kcommaaccent', + 'kcedilla'=>'kcommaaccent', + 'Lcedilla'=>'Lcommaaccent', + 'lcedilla'=>'lcommaaccent', + 'Ncedilla'=>'Ncommaaccent', + 'ncedilla'=>'ncommaaccent', + 'Rcedilla'=>'Rcommaaccent', + 'rcedilla'=>'rcommaaccent', + 'Scedilla'=>'Scommaaccent', + 'scedilla'=>'scommaaccent', + 'Tcedilla'=>'Tcommaaccent', + 'tcedilla'=>'tcommaaccent', + 'Dslash'=>'Dcroat', + 'dslash'=>'dcroat', + 'Dmacron'=>'Dcroat', + 'dmacron'=>'dcroat', + 'combininggraveaccent'=>'gravecomb', + 'combininghookabove'=>'hookabovecomb', + 'combiningtildeaccent'=>'tildecomb', + 'combiningacuteaccent'=>'acutecomb', + 'combiningdotbelow'=>'dotbelowcomb', + 'dongsign'=>'dong' + ); + foreach($a as $l) { + $e = explode(' ', rtrim($l)); + if (count($e) < 2) { + continue; + } + $code = $e[0]; + $param = $e[1]; + if ($code == 'C') { + //Character metrics + $cc = (int)$e[1]; + $w = $e[4]; + $gn = $e[7]; + if (substr($gn, -4) == '20AC') { + $gn = 'Euro'; + } + if (isset($fix[$gn])) { + //Fix incorrect glyph name + foreach ($map as $c => $n) { + if ($n == $fix[$gn]) { + $map[$c] = $gn; + } + } + } + if (empty($map)) { + //Symbolic font: use built-in encoding + $widths[$cc] = $w; + } else { + $widths[$gn] = $w; + if($gn == 'X') { + $fm['CapXHeight'] = $e[13]; + } + } + if($gn == '.notdef') { + $fm['MissingWidth'] = $w; + } + } elseif($code == 'FontName') { + $fm['FontName'] = $param; + } elseif($code == 'Weight') { + $fm['Weight'] = $param; + } elseif($code == 'ItalicAngle') { + $fm['ItalicAngle'] = (double)$param; + } elseif($code == 'Ascender') { + $fm['Ascender'] = (int)$param; + } elseif($code == 'Descender') { + $fm['Descender'] = (int)$param; + } elseif($code == 'UnderlineThickness') { + $fm['UnderlineThickness'] = (int)$param; + } elseif($code == 'UnderlinePosition') { + $fm['UnderlinePosition'] = (int)$param; + } elseif($code == 'IsFixedPitch') { + $fm['IsFixedPitch'] = ($param == 'true'); + } elseif($code == 'FontBBox') { + $fm['FontBBox'] = array($e[1], $e[2], $e[3], $e[4]); + } elseif($code == 'CapHeight') { + $fm['CapHeight'] = (int)$param; + } elseif($code == 'StdVW') { + $fm['StdVW'] = (int)$param; + } + } + if (!isset($fm['FontName'])) { + die('FontName not found'); + } + if (!empty($map)) { + if (!isset($widths['.notdef'])) { + $widths['.notdef'] = 600; + } + if (!isset($widths['Delta']) AND isset($widths['increment'])) { + $widths['Delta'] = $widths['increment']; + } + //Order widths according to map + for ($i = 0; $i <= 255; $i++) { + if (!isset($widths[$map[$i]])) { + print "Warning: character ".$map[$i]." is missing\n"; + $widths[$i] = $widths['.notdef']; + } else { + $widths[$i] = $widths[$map[$i]]; + } + } + } + $fm['Widths'] = $widths; + return $fm; +} + +function MakeFontDescriptor($fm, $symbolic=false) { + //Ascent + $asc = (isset($fm['Ascender']) ? $fm['Ascender'] : 1000); + $fd = "array('Ascent'=>".$asc; + //Descent + $desc = (isset($fm['Descender']) ? $fm['Descender'] : -200); + $fd .= ",'Descent'=>".$desc; + //CapHeight + if (isset($fm['CapHeight'])) { + $ch = $fm['CapHeight']; + } elseif (isset($fm['CapXHeight'])) { + $ch = $fm['CapXHeight']; + } else { + $ch = $asc; + } + $fd .= ",'CapHeight'=>".$ch; + //Flags + $flags = 0; + if (isset($fm['IsFixedPitch']) AND $fm['IsFixedPitch']) { + $flags += 1<<0; + } + if ($symbolic) { + $flags += 1<<2; + } else { + $flags += 1<<5; + } + if (isset($fm['ItalicAngle']) AND ($fm['ItalicAngle'] != 0)) { + $flags += 1<<6; + } + $fd .= ",'Flags'=>".$flags; + //FontBBox + if (isset($fm['FontBBox'])) { + $fbb = $fm['FontBBox']; + } else { + $fbb = array(0, ($desc - 100), 1000, ($asc + 100)); + } + $fd .= ",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'"; + //ItalicAngle + $ia = (isset($fm['ItalicAngle']) ? $fm['ItalicAngle'] : 0); + $fd .= ",'ItalicAngle'=>".$ia; + //StemV + if (isset($fm['StdVW'])) { + $stemv = $fm['StdVW']; + } elseif (isset($fm['Weight']) AND preg_match('/(bold|black)/i', $fm['Weight'])) { + $stemv = 120; + } else { + $stemv = 70; + } + $fd .= ",'StemV'=>".$stemv; + //MissingWidth + if(isset($fm['MissingWidth'])) { + $fd .= ",'MissingWidth'=>".$fm['MissingWidth']; + } + $fd .= ')'; + return $fd; +} + +function MakeWidthArray($fm) { + //Make character width array + $s = 'array('; + $cw = $fm['Widths']; + $els = array(); + $c = 0; + foreach ($cw as $i => $w) { + if (is_numeric($i)) { + $els[] = (((($c++)%10) == 0) ? "\n" : '').$i.'=>'.$w; + } + } + $s .= implode(',', $els); + $s .= ')'; + return $s; +} + +function MakeFontEncoding($map) { + //Build differences from reference encoding + $ref = ReadMap('cp1252'); + $s = ''; + $last = 0; + for ($i = 32; $i <= 255; $i++) { + if ($map[$i] != $ref[$i]) { + if ($i != $last+1) { + $s .= $i.' '; + } + $last = $i; + $s .= '/'.$map[$i].' '; + } + } + return rtrim($s); +} + +function SaveToFile($file, $s, $mode='t') { + $f = fopen($file, 'w'.$mode); + if(!$f) { + die('Can\'t write to file '.$file); + } + fwrite($f, $s, strlen($s)); + fclose($f); +} + +function ReadShort($f) { + $a = unpack('n1n', fread($f, 2)); + return $a['n']; +} + +function ReadLong($f) { + $a = unpack('N1N', fread($f, 4)); + return $a['N']; +} + +function CheckTTF($file) { + //Check if font license allows embedding + $f = fopen($file, 'rb'); + if (!$f) { + die('Error: unable to open '.$file); + } + //Extract number of tables + fseek($f, 4, SEEK_CUR); + $nb = ReadShort($f); + fseek($f, 6, SEEK_CUR); + //Seek OS/2 table + $found = false; + for ($i = 0; $i < $nb; $i++) { + if (fread($f, 4) == 'OS/2') { + $found = true; + break; + } + fseek($f, 12, SEEK_CUR); + } + if (!$found) { + fclose($f); + return; + } + fseek($f, 4, SEEK_CUR); + $offset = ReadLong($f); + fseek($f, $offset, SEEK_SET); + //Extract fsType flags + fseek($f, 8, SEEK_CUR); + $fsType = ReadShort($f); + $rl = ($fsType & 0x02) != 0; + $pp = ($fsType & 0x04) != 0; + $e = ($fsType & 0x08) != 0; + fclose($f); + if($rl AND (!$pp) AND (!$e)) { + print "Warning: font license does not allow embedding\n"; + } +} + +$arg = $GLOBALS['argv']; +if (count($arg) >= 3) { + ob_start(); + array_shift($arg); + if (sizeof($arg) == 3) { + $arg[3] = $arg[2]; + $arg[2] = true; + } else { + if (!isset($arg[2])) { + $arg[2] = true; + } + if (!isset($arg[3])) { + $arg[3] = 'cp1252'; + } + } + if (!isset($arg[4])) { + $arg[4] = array(); + } + MakeFont($arg[0], $arg[1], $arg[2], $arg[3], $arg[4]); + $t = ob_get_clean(); + print preg_replace('!!i', "\n", $t); +} else { + print "Usage: makefont.php \n"; +} +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/pfm2afm b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/pfm2afm new file mode 100755 index 00000000..c75b565c Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/pfm2afm differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/pfm2afm.exe b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/pfm2afm.exe new file mode 100755 index 00000000..25c21fa1 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/pfm2afm.exe differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/src/pfm2afm-src.tar.gz b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/src/pfm2afm-src.tar.gz new file mode 100755 index 00000000..72abae50 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/src/pfm2afm-src.tar.gz differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/src/readme.txt b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/src/readme.txt new file mode 100755 index 00000000..6e5b40d9 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/src/readme.txt @@ -0,0 +1,17 @@ +To embed TrueType and OpenType font files, you need to extract the +font metrics from the font files and build the required tables using +the utility TTF2UFM. + +TTF2UFM is a modified version of Mark Heath's TTF 2 PT1 converter +(http://ttf2pt1.sourceforge.net/) by Steven Wittens +(http://www.acko.net/blog/ufpdf). That version has been further +modified by Ulrich Telle for use with the wxWidgets component +wxPdfDocument. + +Following changes where made: + +1) Generated AFM files contain the glyph number for each character. +2) Generated UFM files contain the bounding box for each character. +3) OpenType support has been activated for the Windows binary, + and the generated AFM/UFM files contain the associated + original Unicode codes for each character. diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/src/ttf2ufm-src.tar.gz b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/src/ttf2ufm-src.tar.gz new file mode 100755 index 00000000..2aeca608 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/src/ttf2ufm-src.tar.gz differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/ttf2ufm b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/ttf2ufm new file mode 100755 index 00000000..f81604fa Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/ttf2ufm differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/ttf2ufm.exe b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/ttf2ufm.exe new file mode 100755 index 00000000..07751055 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/ttf2ufm.exe differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/zlib1.dll b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/zlib1.dll new file mode 100755 index 00000000..31996cd3 Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/utils/zlib1.dll differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/zapfdingbats.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/zapfdingbats.php new file mode 100755 index 00000000..84fa0935 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/zapfdingbats.php @@ -0,0 +1,32 @@ +0,1=>0,2=>0,3=>0,4=>0,5=>0,6=>0,7=>0,8=>0,9=>0,10=>0,11=>0,12=>0, +13=>0,14=>0,15=>0,16=>0,17=>0,18=>0,19=>0,20=>0,21=>0,22=>0,23=>0,24=>0,25=>0, +26=>0,27=>0,28=>0,29=>0,30=>0,31=>0,32=>278,33=>974,34=>961,35=>974,36=>980, +37=>719,38=>789,39=>790,40=>791,41=>690,42=>960,43=>939,44=>549,45=>855,46=>911, +47=>933,48=>911,49=>945,50=>974,51=>755,52=>846,53=>762,54=>761,55=>571,56=>677, +57=>763,58=>760,59=>759,60=>754,61=>494,62=>552,63=>537,64=>577,65=>692,66=>786, +67=>788,68=>788,69=>790,70=>793,71=>794,72=>816,73=>823,74=>789,75=>841,76=>823, +77=>833,78=>816,79=>831,80=>923,81=>744,82=>723,83=>749,84=>790,85=>792,86=>695, +87=>776,88=>768,89=>792,90=>759,91=>707,92=>708,93=>682,94=>701,95=>826,96=>815, +97=>789,98=>789,99=>707,100=>687,101=>696,102=>689,103=>786,104=>787,105=>713, +106=>791,107=>785,108=>791,109=>873,110=>761,111=>762,112=>762,113=>759,114=>759, +115=>892,116=>892,117=>788,118=>784,119=>438,120=>138,121=>277,122=>415,123=>392, +124=>392,125=>668,126=>668,127=>0,128=>390,129=>390,130=>317,131=>317,132=>276, +133=>276,134=>509,135=>509,136=>410,137=>410,138=>234,139=>234,140=>334,141=>334, +142=>0,143=>0,144=>0,145=>0,146=>0,147=>0,148=>0,149=>0,150=>0,151=>0,152=>0, +153=>0,154=>0,155=>0,156=>0,157=>0,158=>0,159=>0,160=>0,161=>732,162=>544,163=>544, +164=>910,165=>667,166=>760,167=>760,168=>776,169=>595,170=>694,171=>626,172=>788, +173=>788,174=>788,175=>788,176=>788,177=>788,178=>788,179=>788,180=>788,181=>788, +182=>788,183=>788,184=>788,185=>788,186=>788,187=>788,188=>788,189=>788,190=>788, +191=>788,192=>788,193=>788,194=>788,195=>788,196=>788,197=>788,198=>788,199=>788, +200=>788,201=>788,202=>788,203=>788,204=>788,205=>788,206=>788,207=>788,208=>788, +209=>788,210=>788,211=>788,212=>894,213=>838,214=>1016,215=>458,216=>748,217=>924, +218=>748,219=>918,220=>927,221=>928,222=>928,223=>834,224=>873,225=>828,226=>924, +227=>924,228=>917,229=>930,230=>931,231=>463,232=>883,233=>836,234=>836,235=>867, +236=>867,237=>696,238=>696,239=>874,240=>0,241=>874,242=>760,243=>946,244=>771, +245=>865,246=>771,247=>888,248=>967,249=>888,250=>831,251=>873,252=>927,253=>970, +254=>918,255=>0); +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/zarbold.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/zarbold.php new file mode 100755 index 00000000..cbd95ae7 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/fonts/zarbold.php @@ -0,0 +1,47 @@ +733,'Descent'=>-317,'CapHeight'=>733,'Flags'=>32,'FontBBox'=>'[-126 -535 1164 1046]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600); +$up=-356; +$ut=49; +$dw=600; +$cw=array( + 0=>0,32=>227,33=>235,34=>282,35=>667,36=>458,37=>493,38=>635,39=>156,40=>303,41=>303,42=>489,43=>489,44=>237,45=>489,46=>231,47=>277, + 48=>552,49=>552,50=>552,51=>552,52=>552,53=>552,54=>552,55=>552,56=>552,57=>552,58=>231,59=>237,60=>667,61=>489,62=>667,63=>448, + 64=>917,65=>604,66=>542,67=>615,68=>708,69=>479,70=>427,71=>667,72=>688,73=>302,74=>292,75=>583,76=>469,77=>885,78=>677,79=>729, + 80=>479,81=>729,82=>542,83=>448,84=>521,85=>677,86=>615,87=>969,88=>604,89=>583,90=>594,91=>208,92=>510,93=>208,94=>469,95=>500, + 96=>333,97=>469,98=>510,99=>448,100=>521,101=>438,102=>313,103=>500,104=>552,105=>271,106=>260,107=>500,108=>271,109=>802,110=>552,111=>490, + 112=>531,113=>521,114=>396,115=>365,116=>292,117=>552,118=>479,119=>750,120=>521,121=>469,122=>448,123=>479,124=>510,125=>479,126=>667,8218=>240, + 402=>531,8222=>458,8230=>1000,8224=>438,8225=>438,710=>333,8240=>1010,352=>448,8249=>250,338=>865,8216=>240,8217=>240,8220=>317,8221=>317,8226=>281,8211=>500, + 8212=>1000,8482=>906,353=>365,8250=>250,339=>823,376=>583,160=>244,161=>317,162=>448,163=>583,164=>500,165=>583,166=>200,167=>417,168=>333,169=>765, + 170=>313,171=>417,172=>667,173=>564,174=>765,175=>333,176=>375,177=>462,178=>354,179=>354,180=>333,181=>510,182=>438,183=>198,184=>333,185=>354, + 186=>323,187=>417,188=>854,189=>854,190=>854,191=>448,192=>604,711=>333,215=>462,224=>469,226=>469,231=>448,232=>438,233=>438,234=>438,235=>438, + 238=>271,239=>271,244=>490,305=>271,247=>483,249=>552,251=>552,252=>552,255=>469,9249=>781,1548=>237,1563=>237,1567=>340,1569=>426,1570=>416,1571=>238, + 1572=>429,1573=>260,1574=>817,1575=>238,1576=>853,1577=>439,1578=>853,1579=>853,1580=>720,1581=>720,1582=>720,1583=>485,1584=>485,1585=>423,1586=>423,1587=>1016, + 1588=>1016,1589=>1128,1590=>1128,1591=>794,1592=>794,1593=>685,1594=>685,1600=>371,1601=>840,1602=>696,1603=>1148,1604=>744,1605=>514,1606=>686,1607=>439,1608=>429, + 1609=>817,1610=>817,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1632=>479,1633=>479,1634=>479,1635=>479,1636=>479,1637=>479, + 1638=>479,1639=>479,1640=>479,1641=>483,1642=>493,1645=>563,1648=>227,1649=>363,1652=>227,1662=>853,1670=>720,1688=>423,1700=>840,1705=>1148,1711=>1149,1740=>817, + 1749=>439,1764=>227,1776=>479,1777=>479,1778=>479,1779=>479,1780=>479,1781=>479,1782=>479,1783=>479,1784=>479,1785=>483,8204=>22,8205=>22,8206=>22,8207=>22, + 59424=>227,59425=>227,59426=>227,59427=>227,59428=>227,59429=>227,59430=>227,59431=>227,59432=>227,59433=>227,59434=>227,59435=>227,59436=>227,59416=>227,59437=>227,59442=>227, + 59443=>227,59444=>227,59445=>227,59446=>227,64336=>363,64337=>263,64342=>853,64343=>967,64344=>267,64345=>271,64362=>840,64363=>959,64364=>305,64365=>341,64378=>720,64379=>725, + 64380=>630,64381=>652,64394=>423,64395=>450,64398=>1148,64399=>1089,64400=>522,64401=>461,64402=>1149,64403=>1084,64404=>525,64405=>462,64508=>817,64509=>784,64606=>227,64607=>227, + 64608=>227,64609=>227,64610=>227,64754=>371,64755=>371,64756=>371,64828=>331,64829=>276,64830=>303,64831=>303,65010=>866,65136=>227,65137=>371,65138=>227,65140=>227,65142=>227, + 65143=>371,65144=>227,65145=>371,65146=>227,65147=>371,65148=>227,65149=>371,65150=>227,65151=>371,65152=>426,65153=>416,65154=>354,65155=>238,65156=>282,65157=>429,65158=>507, + 65159=>260,65160=>286,65161=>817,65162=>784,65163=>190,65164=>276,65165=>238,65166=>263,65167=>853,65168=>967,65169=>186,65170=>271,65171=>439,65172=>452,65173=>853,65174=>967, + 65175=>256,65176=>271,65177=>853,65178=>967,65179=>267,65180=>271,65181=>720,65182=>725,65183=>630,65184=>652,65185=>720,65186=>725,65187=>630,65188=>652,65189=>720,65190=>725, + 65191=>630,65192=>652,65193=>485,65194=>608,65195=>485,65196=>608,65197=>423,65198=>450,65199=>423,65200=>450,65201=>1016,65202=>1041,65203=>498,65204=>475,65205=>1016,65206=>1041, + 65207=>498,65208=>475,65209=>1128,65210=>1150,65211=>633,65212=>655,65213=>1128,65214=>1150,65215=>633,65216=>655,65217=>794,65218=>814,65219=>566,65220=>588,65221=>794,65222=>814, + 65223=>566,65224=>588,65225=>685,65226=>655,65227=>414,65228=>330,65229=>685,65230=>655,65231=>414,65232=>330,65233=>840,65234=>959,65235=>305,65236=>341,65237=>696,65238=>780, + 65239=>305,65240=>341,65241=>1148,65242=>1089,65243=>522,65244=>461,65245=>744,65246=>741,65247=>202,65248=>259,65249=>514,65250=>585,65251=>345,65252=>477,65253=>686,65254=>764, + 65255=>186,65256=>271,65257=>439,65258=>452,65259=>501,65260=>381,65261=>429,65262=>507,65263=>817,65264=>784,65265=>817,65266=>784,64510=>265,64511=>271,65269=>610,65270=>652, + 65271=>539,65272=>611,65273=>539,65274=>611,65275=>539,65276=>611,65279=>0,64486=>408,64487=>408); +$enc=''; +$diff=''; +$file='zarbold.z'; +$ctg='zarbold.ctg.z'; +$originalsize=73296; +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/htmlcolors.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/htmlcolors.php new file mode 100755 index 00000000..6893545f --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/htmlcolors.php @@ -0,0 +1,210 @@ +. +// +// See LICENSE.TXT file for more information. +// ---------------------------------------------------------------------------- +// +// Description : Array of WEB safe colors +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com S.r.l. +// Via della Pace, 11 +// 09044 Quartucciu (CA) +// ITALY +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Array of WEB safe colors. + * @author Nicola Asuni + * @copyright 2004-2009 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com + * @package com.tecnick.tcpdf + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + * @since 2.9.000 (2008-03-26) +*/ + +/** + * Array of WEB safe colors + */ +global $webcolor; +$webcolor = array ( +'aliceblue' => 'f0f8ff', +'antiquewhite' => 'faebd7', +'aqua' => '00ffff', +'aquamarine' => '7fffd4', +'azure' => 'f0ffff', +'beige' => 'f5f5dc', +'bisque' => 'ffe4c4', +'black' => '000000', +'blanchedalmond' => 'ffebcd', +'blue' => '0000ff', +'blueviolet' => '8a2be2', +'brown' => 'a52a2a', +'burlywood' => 'deb887', +'cadetblue' => '5f9ea0', +'chartreuse' => '7fff00', +'chocolate' => 'd2691e', +'coral' => 'ff7f50', +'cornflowerblue' => '6495ed', +'cornsilk' => 'fff8dc', +'crimson' => 'dc143c', +'cyan' => '00ffff', +'darkblue' => '00008b', +'darkcyan' => '008b8b', +'darkgoldenrod' => 'b8860b', +'dkgray' => 'a9a9a9', +'darkgray' => 'a9a9a9', +'darkgrey' => 'a9a9a9', +'darkgreen' => '006400', +'darkkhaki' => 'bdb76b', +'darkmagenta' => '8b008b', +'darkolivegreen' => '556b2f', +'darkorange' => 'ff8c00', +'darkorchid' => '9932cc', +'darkred' => '8b0000', +'darksalmon' => 'e9967a', +'darkseagreen' => '8fbc8f', +'darkslateblue' => '483d8b', +'darkslategray' => '2f4f4f', +'darkslategrey' => '2f4f4f', +'darkturquoise' => '00ced1', +'darkviolet' => '9400d3', +'deeppink' => 'ff1493', +'deepskyblue' => '00bfff', +'dimgray' => '696969', +'dimgrey' => '696969', +'dodgerblue' => '1e90ff', +'firebrick' => 'b22222', +'floralwhite' => 'fffaf0', +'forestgreen' => '228b22', +'fuchsia' => 'ff00ff', +'gainsboro' => 'dcdcdc', +'ghostwhite' => 'f8f8ff', +'gold' => 'ffd700', +'goldenrod' => 'daa520', +'gray' => '808080', +'grey' => '808080', +'green' => '008000', +'greenyellow' => 'adff2f', +'honeydew' => 'f0fff0', +'hotpink' => 'ff69b4', +'indianred' => 'cd5c5c', +'indigo' => '4b0082', +'ivory' => 'fffff0', +'khaki' => 'f0e68c', +'lavender' => 'e6e6fa', +'lavenderblush' => 'fff0f5', +'lawngreen' => '7cfc00', +'lemonchiffon' => 'fffacd', +'lightblue' => 'add8e6', +'lightcoral' => 'f08080', +'lightcyan' => 'e0ffff', +'lightgoldenrodyellow' => 'fafad2', +'ltgray' => 'd3d3d3', +'lightgray' => 'd3d3d3', +'lightgrey' => 'd3d3d3', +'lightgreen' => '90ee90', +'lightpink' => 'ffb6c1', +'lightsalmon' => 'ffa07a', +'lightseagreen' => '20b2aa', +'lightskyblue' => '87cefa', +'lightslategray' => '778899', +'lightslategrey' => '778899', +'lightsteelblue' => 'b0c4de', +'lightyellow' => 'ffffe0', +'lime' => '00ff00', +'limegreen' => '32cd32', +'linen' => 'faf0e6', +'magenta' => 'ff00ff', +'maroon' => '800000', +'mediumaquamarine' => '66cdaa', +'mediumblue' => '0000cd', +'mediumorchid' => 'ba55d3', +'mediumpurple' => '9370d8', +'mediumseagreen' => '3cb371', +'mediumslateblue' => '7b68ee', +'mediumspringgreen' => '00fa9a', +'mediumturquoise' => '48d1cc', +'mediumvioletred' => 'c71585', +'midnightblue' => '191970', +'mintcream' => 'f5fffa', +'mistyrose' => 'ffe4e1', +'moccasin' => 'ffe4b5', +'navajowhite' => 'ffdead', +'navy' => '000080', +'oldlace' => 'fdf5e6', +'olive' => '808000', +'olivedrab' => '6b8e23', +'orange' => 'ffa500', +'orangered' => 'ff4500', +'orchid' => 'da70d6', +'palegoldenrod' => 'eee8aa', +'palegreen' => '98fb98', +'paleturquoise' => 'afeeee', +'palevioletred' => 'd87093', +'papayawhip' => 'ffefd5', +'peachpuff' => 'ffdab9', +'peru' => 'cd853f', +'pink' => 'ffc0cb', +'plum' => 'dda0dd', +'powderblue' => 'b0e0e6', +'purple' => '800080', +'red' => 'ff0000', +'rosybrown' => 'bc8f8f', +'royalblue' => '4169e1', +'saddlebrown' => '8b4513', +'salmon' => 'fa8072', +'sandybrown' => 'f4a460', +'seagreen' => '2e8b57', +'seashell' => 'fff5ee', +'sienna' => 'a0522d', +'silver' => 'c0c0c0', +'skyblue' => '87ceeb', +'slateblue' => '6a5acd', +'slategray' => '708090', +'slategrey' => '708090', +'snow' => 'fffafa', +'springgreen' => '00ff7f', +'steelblue' => '4682b4', +'tan' => 'd2b48c', +'teal' => '008080', +'thistle' => 'd8bfd8', +'tomato' => 'ff6347', +'turquoise' => '40e0d0', +'violet' => 'ee82ee', +'wheat' => 'f5deb3', +'white' => 'ffffff', +'whitesmoke' => 'f5f5f5', +'yellow' => 'ffff00', +'yellowgreen' => '9acd32' +); + +//============================================================+ +// END OF FILE +//============================================================+ +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/images/read_me.txt b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/images/read_me.txt new file mode 100755 index 00000000..2ef419be --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/images/read_me.txt @@ -0,0 +1,3 @@ +download the TCPDF package to have this resources. + +it has been removed because of the size of the package of HTML2PDF... \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/qrcode.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/qrcode.php new file mode 100755 index 00000000..c1fad8bd --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/qrcode.php @@ -0,0 +1,2875 @@ + +// http://phpqrcode.sourceforge.net/ +// https://sourceforge.net/projects/phpqrcode/ +// +// The "PHP QR Code encoder" is based on +// "C libqrencode library" (ver. 3.1.1) +// License: GNU-LGPL 2.1 +// Copyright (C) 2006-2010 by Kentaro Fukuchi +// http://megaui.net/fukuchi/works/qrencode/index.en.html +// +// Reed-Solomon code encoder is written by Phil Karn, KA9Q. +// Copyright (C) 2002-2006 Phil Karn, KA9Q +// +// QR Code is registered trademark of DENSO WAVE INCORPORATED +// http://www.denso-wave.com/qrcode/index-e.html +// --------------------------------------------------------- +// +// Author: Nicola Asuni +// +// (c) Copyright 2010: +// Nicola Asuni +// Tecnick.com S.r.l. +// Via della Pace, 11 +// 09044 Quartucciu (CA) +// ITALY +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Class to create QR-code arrays for TCPDF class. + * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD. + * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness. + * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004. + * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode. + * + * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html). + * Please read comments on this class source file for full copyright and license information. + * + * @package com.tecnick.tcpdf + * @abstract Class for generating QR-code array for TCPDF. + * @author Nicola Asuni + * @copyright 2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + * @version 1.0.003 + */ + +// definitions +if (!defined('QRCODEDEFS')) { + + /** + * Indicate that definitions for this class are set + */ + define('QRCODEDEFS', true); + + // ----------------------------------------------------- + + // Encoding modes (characters which can be encoded in QRcode) + + /** + * Encoding mode + */ + define('QR_MODE_NL', -1); + + /** + * Encoding mode numeric (0-9). 3 characters are encoded to 10bit length. In theory, 7089 characters or less can be stored in a QRcode. + */ + define('QR_MODE_NM', 0); + + /** + * Encoding mode alphanumeric (0-9A-Z $%*+-./:) 45characters. 2 characters are encoded to 11bit length. In theory, 4296 characters or less can be stored in a QRcode. + */ + define('QR_MODE_AN', 1); + + /** + * Encoding mode 8bit byte data. In theory, 2953 characters or less can be stored in a QRcode. + */ + define('QR_MODE_8B', 2); + + /** + * Encoding mode KANJI. A KANJI character (multibyte character) is encoded to 13bit length. In theory, 1817 characters or less can be stored in a QRcode. + */ + define('QR_MODE_KJ', 3); + + /** + * Encoding mode STRUCTURED (currently unsupported) + */ + define('QR_MODE_ST', 4); + + // ----------------------------------------------------- + + // Levels of error correction. + // QRcode has a function of an error correcting for miss reading that white is black. + // Error correcting is defined in 4 level as below. + + /** + * Error correction level L : About 7% or less errors can be corrected. + */ + define('QR_ECLEVEL_L', 0); + + /** + * Error correction level M : About 15% or less errors can be corrected. + */ + define('QR_ECLEVEL_M', 1); + + /** + * Error correction level Q : About 25% or less errors can be corrected. + */ + define('QR_ECLEVEL_Q', 2); + + /** + * Error correction level H : About 30% or less errors can be corrected. + */ + define('QR_ECLEVEL_H', 3); + + // ----------------------------------------------------- + + // Version. Size of QRcode is defined as version. + // Version is from 1 to 40. + // Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. + // So version 40 is 177*177 matrix. + + /** + * Maximum QR Code version. + */ + define('QRSPEC_VERSION_MAX', 40); + + /** + * Maximum matrix size for maximum version (version 40 is 177*177 matrix). + */ + define('QRSPEC_WIDTH_MAX', 177); + + // ----------------------------------------------------- + + /** + * Matrix index to get width from $capacity array. + */ + define('QRCAP_WIDTH', 0); + + /** + * Matrix index to get number of words from $capacity array. + */ + define('QRCAP_WORDS', 1); + + /** + * Matrix index to get remainder from $capacity array. + */ + define('QRCAP_REMINDER', 2); + + /** + * Matrix index to get error correction level from $capacity array. + */ + define('QRCAP_EC', 3); + + // ----------------------------------------------------- + + // Structure (currently usupported) + + /** + * Number of header bits for structured mode + */ + define('STRUCTURE_HEADER_BITS', 20); + + /** + * Max number of symbols for structured mode + */ + define('MAX_STRUCTURED_SYMBOLS', 16); + + // ----------------------------------------------------- + + // Masks + + /** + * Down point base value for case 1 mask pattern (concatenation of same color in a line or a column) + */ + define('N1', 3); + + /** + * Down point base value for case 2 mask pattern (module block of same color) + */ + define('N2', 3); + + /** + * Down point base value for case 3 mask pattern (1:1:3:1:1(dark:bright:dark:bright:dark)pattern in a line or a column) + */ + define('N3', 40); + + /** + * Down point base value for case 4 mask pattern (ration of dark modules in whole) + */ + define('N4', 10); + + // ----------------------------------------------------- + + // Optimization settings + + /** + * if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + */ + define('QR_FIND_BEST_MASK', true); + + /** + * if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + */ + define('QR_FIND_FROM_RANDOM', 2); + + /** + * when QR_FIND_BEST_MASK === false + */ + define('QR_DEFAULT_MASK', 2); + + // ----------------------------------------------------- + +} // end of definitions + +// #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# + +if (!class_exists('QRcode', false)) { + + // for compaibility with PHP4 + if (!function_exists('str_split')) { + /** + * Convert a string to an array (needed for PHP4 compatibility) + * @param string $string The input string. + * @param int $split_length Maximum length of the chunk. + * @return If the optional split_length parameter is specified, the returned array will be broken down into chunks with each being split_length in length, otherwise each chunk will be one character in length. FALSE is returned if split_length is less than 1. If the split_length length exceeds the length of string , the entire string is returned as the first (and only) array element. + */ + function str_split($string, $split_length=1) { + if ((strlen($string) > $split_length) OR (!$split_length)) { + do { + $c = strlen($string); + $parts[] = substr($string, 0, $split_length); + $string = substr($string, $split_length); + } while ($string !== false); + } else { + $parts = array($string); + } + return $parts; + } + } + + // ##################################################### + + /** + * Class to create QR-code arrays for TCPDF class. + * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD. + * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness. + * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004. + * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode. + * + * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html). + * Please read comments on this class source file for full copyright and license information. + * + * @name QRcode + * @package com.tecnick.tcpdf + * @abstract Class for generating QR-code array for TCPDF. + * @author Nicola Asuni + * @copyright 2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + * @version 1.0.002 + */ + class QRcode { + + /** + * @var barcode array to be returned which is readable by TCPDF + * @access protected + */ + protected $barcode_array = array(); + + /** + * @var QR code version. Size of QRcode is defined as version. Version is from 1 to 40. Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. So version 40 is 177*177 matrix. + * @access protected + */ + protected $version = 0; + + /** + * @var Levels of error correction. See definitions for possible values. + * @access protected + */ + protected $level = QR_ECLEVEL_L; + + /** + * @var Encoding mode + * @access protected + */ + protected $hint = QR_MODE_8B; + + /** + * @var if true the input string will be converted to uppercase + * @access protected + */ + protected $casesensitive = true; + + /** + * @var structured QR code (not supported yet) + * @access protected + */ + protected $structured = 0; + + /** + * @var mask data + * @access protected + */ + protected $data; + + // FrameFiller + + /** + * @var width + * @access protected + */ + protected $width; + + /** + * @var frame + * @access protected + */ + protected $frame; + + /** + * @var X position of bit + * @access protected + */ + protected $x; + + /** + * @var Y position of bit + * @access protected + */ + protected $y; + + /** + * @var direction + * @access protected + */ + protected $dir; + + /** + * @var single bit + * @access protected + */ + protected $bit; + + // ---- QRrawcode ---- + + /** + * @var data code + * @access protected + */ + protected $datacode = array(); + + /** + * @var error correction code + * @access protected + */ + protected $ecccode = array(); + + /** + * @var blocks + * @access protected + */ + protected $blocks; + + /** + * @var Reed-Solomon blocks + * @access protected + */ + protected $rsblocks = array(); //of RSblock + + /** + * @var counter + * @access protected + */ + protected $count; + + /** + * @var data length + * @access protected + */ + protected $dataLength; + + /** + * @var error correction length + * @access protected + */ + protected $eccLength; + + /** + * @var b1 + * @access protected + */ + protected $b1; + + // ---- QRmask ---- + + /** + * @var run length + * @access protected + */ + protected $runLength = array(); + + // ---- QRsplit ---- + + /** + * @var input data string + * @access protected + */ + protected $dataStr = ''; + + /** + * @var input items + * @access protected + */ + protected $items; + + // Reed-Solomon items + + /** + * @var Reed-Solomon items + * @access protected + */ + protected $rsitems = array(); + + /** + * @var array of frames + * @access protected + */ + protected $frames = array(); + + /** + * @var alphabet-numeric convesion table + * @access protected + */ + protected $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, // + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, // + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, // + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, // + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 // + ); + + /** + * @var array Table of the capacity of symbols + * See Table 1 (pp.13) and Table 12-16 (pp.30-36), JIS X0510:2004. + * @access protected + */ + protected $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), // + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), // + array( 29, 70, 7, array( 15, 26, 36, 44)), // + array( 33, 100, 7, array( 20, 36, 52, 64)), // + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), // + array( 45, 196, 0, array( 40, 72, 108, 130)), // + array( 49, 242, 0, array( 48, 88, 132, 156)), // + array( 53, 292, 0, array( 60, 110, 160, 192)), // + array( 57, 346, 0, array( 72, 130, 192, 224)), // 10 + array( 61, 404, 0, array( 80, 150, 224, 264)), // + array( 65, 466, 0, array( 96, 176, 260, 308)), // + array( 69, 532, 0, array( 104, 198, 288, 352)), // + array( 73, 581, 3, array( 120, 216, 320, 384)), // + array( 77, 655, 3, array( 132, 240, 360, 432)), // 15 + array( 81, 733, 3, array( 144, 280, 408, 480)), // + array( 85, 815, 3, array( 168, 308, 448, 532)), // + array( 89, 901, 3, array( 180, 338, 504, 588)), // + array( 93, 991, 3, array( 196, 364, 546, 650)), // + array( 97, 1085, 3, array( 224, 416, 600, 700)), // 20 + array(101, 1156, 4, array( 224, 442, 644, 750)), // + array(105, 1258, 4, array( 252, 476, 690, 816)), // + array(109, 1364, 4, array( 270, 504, 750, 900)), // + array(113, 1474, 4, array( 300, 560, 810, 960)), // + array(117, 1588, 4, array( 312, 588, 870, 1050)), // 25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), // + array(125, 1828, 4, array( 360, 700, 1020, 1200)), // + array(129, 1921, 3, array( 390, 728, 1050, 1260)), // + array(133, 2051, 3, array( 420, 784, 1140, 1350)), // + array(137, 2185, 3, array( 450, 812, 1200, 1440)), // 30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), // + array(145, 2465, 3, array( 510, 924, 1350, 1620)), // + array(149, 2611, 3, array( 540, 980, 1440, 1710)), // + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), // + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), // 35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), // + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), // + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), // + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), // + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) // 40 + ); + + /** + * @var array Length indicator + * @access protected + */ + protected $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + /** + * @var array Table of the error correction code (Reed-Solomon block) + * See Table 12-16 (pp.30-36), JIS X0510:2004. + * @access protected + */ + protected $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), // + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), // + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), // + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), // + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), // + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), // + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), // + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), // 10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), // + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), // + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), // + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), // + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), // 15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), // + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), // + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), // + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), // + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), // 20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), // + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), // + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), // + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), // + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), // 25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), // + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), // + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), // + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), // + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), // 30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), // + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), // + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), // + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), // + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), // 35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), // + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), // + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), // + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), // + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)) // 40 + ); + + /** + * @var array Positions of alignment patterns. + * This array includes only the second and the third position of the alignment patterns. Rest of them can be calculated from the distance between them. + * See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + * @access protected + */ + protected $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), // 11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), // 16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), // 21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), // 26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), // 31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58) // 35-40 + ); + + /** + * @var array Version information pattern (BCH coded). + * See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + * size: [QRSPEC_VERSION_MAX - 6] + * @access protected + */ + protected $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, // + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, // + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, // + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, // + 0x27541, 0x28c69 + ); + + /** + * @var array Format information + * @access protected + */ + protected $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), // + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), // + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), // + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) // + ); + + + // ------------------------------------------------- + // ------------------------------------------------- + + + /** + * This is the class constructor. + * Creates a QRcode object + * @param string $code code to represent using QRcode + * @param string $eclevel error level:
    • L : About 7% or less errors can be corrected.
    • M : About 15% or less errors can be corrected.
    • Q : About 25% or less errors can be corrected.
    • H : About 30% or less errors can be corrected.
    + * @access public + * @since 1.0.000 + */ + public function __construct($code, $eclevel = 'L') { + $barcode_array = array(); + if ((is_null($code)) OR ($code == '\0') OR ($code == '')) { + return false; + } + // set error correction level + $this->level = array_search($eclevel, array('L', 'M', 'Q', 'H')); + if ($this->level === false) { + $this->level = QR_ECLEVEL_L; + } + if (($this->hint != QR_MODE_8B) AND ($this->hint != QR_MODE_KJ)) { + return false; + } + if (($this->version < 0) OR ($this->version > QRSPEC_VERSION_MAX)) { + return false; + } + $this->items = array(); + $this->encodeString($code); + $qrTab = $this->binarize($this->data); + $size = count($qrTab); + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach (str_split($line) as $char) { + $arrAdd[] = ($char=='1')?1:0; + } + $barcode_array['bcode'][] = $arrAdd; + } + $this->barcode_array = $barcode_array; + } + + /** + * Returns a barcode array which is readable by TCPDF + * @return array barcode array readable by TCPDF; + * @access public + */ + public function getBarcodeArray() { + return $this->barcode_array; + } + + /** + * Convert the frame in binary form + * @param array $frame array to binarize + * @return array frame in binary form + */ + protected function binarize($frame) { + $len = count($frame); + // the frame is square (width = height) + foreach ($frame as &$frameLine) { + for ($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + return $frame; + } + + /** + * Encode the input string to QR code + * @param string $string input string to encode + */ + protected function encodeString($string) { + $this->dataStr = $string; + if (!$this->casesensitive) { + $this->toUpper(); + } + $ret = $this->splitString(); + if ($ret < 0) { + return NULL; + } + $this->encodeMask(-1); + } + + /** + * Encode mask + * @param int $mask masking mode + */ + protected function encodeMask($mask) { + $spec = array(0, 0, 0, 0, 0); + $this->datacode = $this->getByteStream($this->items); + if (is_null($this->datacode)) { + return NULL; + } + $spec = $this->getEccSpec($this->version, $this->level, $spec); + $this->b1 = $this->rsBlockNum1($spec); + $this->dataLength = $this->rsDataLength($spec); + $this->eccLength = $this->rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = $this->rsBlockNum($spec); + $ret = $this->init($spec); + if ($ret < 0) { + return NULL; + } + $this->count = 0; + $this->width = $this->getWidth($this->version); + $this->frame = $this->newFrame($this->version); + $this->x = $this->width - 1; + $this->y = $this->width - 1; + $this->dir = -1; + $this->bit = -1; + // inteleaved data and ecc codes + for ($i=0; $i < ($this->dataLength + $this->eccLength); $i++) { + $code = $this->getCode(); + $bit = 0x80; + for ($j=0; $j<8; $j++) { + $addr = $this->getNextPosition(); + $this->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + // remainder bits + $j = $this->getRemainder($this->version); + for ($i=0; $i<$j; $i++) { + $addr = $this->getNextPosition(); + $this->setFrameAt($addr, 0x02); + } + // masking + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + if ($mask < 0) { + if (QR_FIND_BEST_MASK) { + $masked = $this->mask($this->width, $this->frame, $this->level); + } else { + $masked = $this->makeMask($this->width, $this->frame, (intval(QR_DEFAULT_MASK) % 8), $this->level); + } + } else { + $masked = $this->makeMask($this->width, $this->frame, $mask, $this->level); + } + if ($masked == NULL) { + return NULL; + } + $this->data = $masked; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // FrameFiller + + /** + * Set frame value at specified position + * @param array $at x,y position + * @param int $val value of the character to set + */ + protected function setFrameAt($at, $val) { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + /** + * Get frame value at specified position + * @param array $at x,y position + * @return value at specified position + */ + protected function getFrameAt($at) { + return ord($this->frame[$at['y']][$at['x']]); + } + + /** + * Return the next frame position + * @return array of x,y coordinates + */ + protected function getNextPosition() { + do { + if ($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + $x = $this->x; + $y = $this->y; + $w = $this->width; + if ($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + if ($this->dir < 0) { + if ($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if ($x == 6) { + $x--; + $y = 9; + } + } + } else { + if ($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if ($x == 6) { + $x--; + $y -= 8; + } + } + } + if (($x < 0) OR ($y < 0)) { + return NULL; + } + $this->x = $x; + $this->y = $y; + } while(ord($this->frame[$y][$x]) & 0x80); + return array('x'=>$x, 'y'=>$y); + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRrawcode + + /** + * Initialize code. + * @param array $spec array of ECC specification + * @return 0 in case of success, -1 in case of error + */ + protected function init($spec) { + $dl = $this->rsDataCodes1($spec); + $el = $this->rsEccCodes1($spec); + $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + $endfor = $this->rsBlockNum1($spec); + for ($i=0; $i < $endfor; ++$i) { + $ecc = array_slice($this->ecccode, $eccPos); + $this->rsblocks[$blockNo] = array(); + $this->rsblocks[$blockNo]['dataLength'] = $dl; + $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos); + $this->rsblocks[$blockNo]['eccLength'] = $el; + $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc); + $this->rsblocks[$blockNo]['ecc'] = $ecc; + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + if ($this->rsBlockNum2($spec) == 0) { + return 0; + } + $dl = $this->rsDataCodes2($spec); + $el = $this->rsEccCodes2($spec); + $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + if ($rs == NULL) { + return -1; + } + $endfor = $this->rsBlockNum2($spec); + for ($i=0; $i < $endfor; ++$i) { + $ecc = array_slice($this->ecccode, $eccPos); + $this->rsblocks[$blockNo] = array(); + $this->rsblocks[$blockNo]['dataLength'] = $dl; + $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos); + $this->rsblocks[$blockNo]['eccLength'] = $el; + $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc); + $this->rsblocks[$blockNo]['ecc'] = $ecc; + $this->ecccode = array_merge(array_slice($this->ecccode, 0, $eccPos), $ecc); + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + return 0; + } + + /** + * Return Reed-Solomon block code. + * @return array rsblocks + */ + protected function getCode() { + if ($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if ($col >= $this->rsblocks[0]['dataLength']) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]['data'][$col]; + } elseif ($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]['ecc'][$col]; + } else { + return 0; + } + $this->count++; + return $ret; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRmask + + /** + * Write Format Information on frame and returns the number of black bits + * @param int $width frame width + * @param array $frame frame + * @param array $mask masking mode + * @param int $level error correction level + * @return int blacks + */ + protected function writeFormatInformation($width, &$frame, $mask, $level) { + $blacks = 0; + $format = $this->getFormatInfo($mask, $level); + for ($i=0; $i<8; ++$i) { + if ($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + $frame[8][$width - 1 - $i] = chr($v); + if ($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + for ($i=0; $i<7; ++$i) { + if ($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + $frame[$width - 7 + $i][8] = chr($v); + if ($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + $format = $format >> 1; + } + return $blacks; + } + + /** + * mask0 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask0($x, $y) { + return ($x + $y) & 1; + } + + /** + * mask1 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask1($x, $y) { + return ($y & 1); + } + + /** + * mask2 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask2($x, $y) { + return ($x % 3); + } + + /** + * mask3 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask3($x, $y) { + return ($x + $y) % 3; + } + + /** + * mask4 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask4($x, $y) { + return (((int)($y / 2)) + ((int)($x / 3))) & 1; + } + + /** + * mask5 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask5($x, $y) { + return (($x * $y) & 1) + ($x * $y) % 3; + } + + /** + * mask6 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask6($x, $y) { + return ((($x * $y) & 1) + ($x * $y) % 3) & 1; + } + + /** + * mask7 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask7($x, $y) { + return ((($x * $y) % 3) + (($x + $y) & 1)) & 1; + } + + /** + * Return bitmask + * @param int $maskNo mask number + * @param int $width width + * @param array $frame frame + * @return array bitmask + */ + protected function generateMaskNo($maskNo, $width, $frame) { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($y=0; $y<$width; ++$y) { + for ($x=0; $x<$width; ++$x) { + if (ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + } + } + return $bitMask; + } + + /** + * makeMaskNo + * @param int $maskNo + * @param int $width + * @param int $s + * @param int $d + * @param boolean $maskGenOnly + * @return int b + */ + protected function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly=false) { + $b = 0; + $bitMask = array(); + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if ($maskGenOnly) { + return; + } + $d = $s; + for ($y=0; $y<$width; ++$y) { + for ($x=0; $x<$width; ++$x) { + if ($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + return $b; + } + + /** + * makeMask + * @param int $width + * @param array $frame + * @param int $maskNo + * @param int $level + * @return array mask + */ + protected function makeMask($width, $frame, $maskNo, $level) { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + return $masked; + } + + /** + * calcN1N3 + * @param int $length + * @return int demerit + */ + protected function calcN1N3($length) { + $demerit = 0; + for ($i=0; $i<$length; ++$i) { + if ($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if ($i & 1) { + if (($i >= 3) AND ($i < ($length-2)) AND ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if (($this->runLength[$i-2] == $fact) + AND ($this->runLength[$i-1] == $fact) + AND ($this->runLength[$i+1] == $fact) + AND ($this->runLength[$i+2] == $fact)) { + if (($this->runLength[$i-3] < 0) OR ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } elseif ((($i+3) >= $length) OR ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + /** + * evaluateSymbol + * @param int $width + * @param array $frame + * @return int demerit + */ + protected function evaluateSymbol($width, $frame) { + $head = 0; + $demerit = 0; + for ($y=0; $y<$width; ++$y) { + $head = 0; + $this->runLength[0] = 1; + $frameY = $frame[$y]; + if ($y > 0) { + $frameYM = $frame[$y-1]; + } + for ($x=0; $x<$width; ++$x) { + if (($x > 0) AND ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + if (($b22 | ($w22 ^ 1)) & 1) { + $demerit += N2; + } + } + if (($x == 0) AND (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } elseif ($x > 0) { + if ((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + $demerit += $this->calcN1N3($head+1); + } + for ($x=0; $x<$width; ++$x) { + $head = 0; + $this->runLength[0] = 1; + for ($y=0; $y<$width; ++$y) { + if (($y == 0) AND (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } elseif ($y > 0) { + if ((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + $demerit += $this->calcN1N3($head+1); + } + return $demerit; + } + + /** + * mask + * @param int $width + * @param array $frame + * @param int $level + * @return array best mask + */ + protected function mask($width, $frame, $level) { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + $checked_masks = array(0, 1, 2, 3, 4, 5, 6, 7); + if (QR_FIND_FROM_RANDOM !== false) { + $howManuOut = 8 - (QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; ++$i) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + } + $bestMask = $frame; + foreach ($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + if ($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + return $bestMask; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRsplit + + /** + * Return true if the character at specified position is a number + * @param string $str string + * @param int $pos characted position + * @return boolean true of false + */ + protected function isdigitat($str, $pos) { + if ($pos >= strlen($str)) { + return false; + } + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + /** + * Return true if the character at specified position is an alphanumeric character + * @param string $str string + * @param int $pos characted position + * @return boolean true of false + */ + protected function isalnumat($str, $pos) { + if ($pos >= strlen($str)) { + return false; + } + return ($this->lookAnTable(ord($str[$pos])) >= 0); + } + + /** + * identifyMode + * @param int $pos + * @return int mode + */ + protected function identifyMode($pos) { + if ($pos >= strlen($this->dataStr)) { + return QR_MODE_NL; + } + $c = $this->dataStr[$pos]; + if ($this->isdigitat($this->dataStr, $pos)) { + return QR_MODE_NM; + } elseif ($this->isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } elseif ($this->hint == QR_MODE_KJ) { + if ($pos+1 < strlen($this->dataStr)) { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if (($word >= 0x8140 && $word <= 0x9ffc) OR ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KJ; + } + } + } + return QR_MODE_8B; + } + + /** + * eatNum + * @return int run + */ + protected function eatNum() { + $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); + $p = 0; + while($this->isdigitat($this->dataStr, $p)) { + $p++; + } + $run = $p; + $mode = $this->identifyMode($p); + if ($mode == QR_MODE_8B) { + $dif = $this->estimateBitsModeNum($run) + 4 + $ln + + $this->estimateBitsMode8(1) // + 4 + l8 + - $this->estimateBitsMode8($run + 1); // - 4 - l8 + if ($dif > 0) { + return $this->eat8(); + } + } + if ($mode == QR_MODE_AN) { + $dif = $this->estimateBitsModeNum($run) + 4 + $ln + + $this->estimateBitsModeAn(1) // + 4 + la + - $this->estimateBitsModeAn($run + 1);// - 4 - la + if ($dif > 0) { + return $this->eatAn(); + } + } + $this->items = $this->appendNewInputItem($this->items, QR_MODE_NM, $run, str_split($this->dataStr)); + return $run; + } + + /** + * eatAn + * @return int run + */ + protected function eatAn() { + $la = $this->lengthIndicator(QR_MODE_AN, $this->version); + $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); + $p = 0; + while($this->isalnumat($this->dataStr, $p)) { + if ($this->isdigitat($this->dataStr, $p)) { + $q = $p; + while($this->isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = $this->estimateBitsModeAn($p) // + 4 + la + + $this->estimateBitsModeNum($q - $p) + 4 + $ln + - $this->estimateBitsModeAn($q); // - 4 - la + if ($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + $run = $p; + if (!$this->isalnumat($this->dataStr, $p)) { + $dif = $this->estimateBitsModeAn($run) + 4 + $la + + $this->estimateBitsMode8(1) // + 4 + l8 + - $this->estimateBitsMode8($run + 1); // - 4 - l8 + if ($dif > 0) { + return $this->eat8(); + } + } + $this->items = $this->appendNewInputItem($this->items, QR_MODE_AN, $run, str_split($this->dataStr)); + return $run; + } + + /** + * eatKanji + * @return int run + */ + protected function eatKanji() { + $p = 0; + while($this->identifyMode($p) == QR_MODE_KJ) { + $p += 2; + } + $this->items = $this->appendNewInputItem($this->items, QR_MODE_KJ, $p, str_split($this->dataStr)); + return $run; + } + + /** + * eat8 + * @return int run + */ + protected function eat8() { + $la = $this->lengthIndicator(QR_MODE_AN, $this->version); + $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); + $p = 1; + $dataStrLen = strlen($this->dataStr); + while($p < $dataStrLen) { + $mode = $this->identifyMode($p); + if ($mode == QR_MODE_KJ) { + break; + } + if ($mode == QR_MODE_NM) { + $q = $p; + while($this->isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = $this->estimateBitsMode8($p) // + 4 + l8 + + $this->estimateBitsModeNum($q - $p) + 4 + $ln + - $this->estimateBitsMode8($q); // - 4 - l8 + if ($dif < 0) { + break; + } else { + $p = $q; + } + } elseif ($mode == QR_MODE_AN) { + $q = $p; + while($this->isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = $this->estimateBitsMode8($p) // + 4 + l8 + + $this->estimateBitsModeAn($q - $p) + 4 + $la + - $this->estimateBitsMode8($q); // - 4 - l8 + if ($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + $run = $p; + $this->items = $this->appendNewInputItem($this->items, QR_MODE_8B, $run, str_split($this->dataStr)); + return $run; + } + + /** + * splitString + */ + protected function splitString() { + while (strlen($this->dataStr) > 0) { + if ($this->dataStr == '') { + return 0; + } + $mode = $this->identifyMode(0); + switch ($mode) { + case QR_MODE_NM: { + $length = $this->eatNum(); + break; + } + case QR_MODE_AN: { + $length = $this->eatAn(); + break; + } + case QR_MODE_KJ: { + if ($hint == QR_MODE_KJ) { + $length = $this->eatKanji(); + } else { + $length = $this->eat8(); + } + break; + } + default: { + $length = $this->eat8(); + break; + } + } + if ($length == 0) { + return 0; + } + if ($length < 0) { + return -1; + } + $this->dataStr = substr($this->dataStr, $length); + } + } + + /** + * toUpper + */ + protected function toUpper() { + $stringLen = strlen($this->dataStr); + $p = 0; + while ($p < $stringLen) { + $mode = $this->identifyMode(substr($this->dataStr, $p), $this->hint); + if ($mode == QR_MODE_KJ) { + $p += 2; + } else { + if ((ord($this->dataStr[$p]) >= ord('a')) AND (ord($this->dataStr[$p]) <= ord('z'))) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + return $this->dataStr; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRinputItem + + /** + * newInputItem + * @param int $mode + * @param int $size + * @param array $data + * @param array $bstream + * @return array input item + */ + protected function newInputItem($mode, $size, $data, $bstream=null) { + $setData = array_slice($data, 0, $size); + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0, ($size - count($setData)), 0)); + } + if (!$this->check($mode, $size, $setData)) { + return NULL; + } + $inputitem = array(); + $inputitem['mode'] = $mode; + $inputitem['size'] = $size; + $inputitem['data'] = $setData; + $inputitem['bstream'] = $bstream; + return $inputitem; + } + + /** + * encodeModeNum + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeModeNum($inputitem, $version) { + $words = (int)($inputitem['size'] / 3); + $inputitem['bstream'] = array(); + $val = 0x1; + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_NM, $version), $inputitem['size']); + for ($i=0; $i < $words; ++$i) { + $val = (ord($inputitem['data'][$i*3 ]) - ord('0')) * 100; + $val += (ord($inputitem['data'][$i*3+1]) - ord('0')) * 10; + $val += (ord($inputitem['data'][$i*3+2]) - ord('0')); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 10, $val); + } + if ($inputitem['size'] - $words * 3 == 1) { + $val = ord($inputitem['data'][$words*3]) - ord('0'); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val); + } elseif (($inputitem['size'] - ($words * 3)) == 2) { + $val = (ord($inputitem['data'][$words*3 ]) - ord('0')) * 10; + $val += (ord($inputitem['data'][$words*3+1]) - ord('0')); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 7, $val); + } + return $inputitem; + } + + /** + * encodeModeAn + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeModeAn($inputitem, $version) { + $words = (int)($inputitem['size'] / 2); + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x02); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_AN, $version), $inputitem['size']); //DEBUG + for ($i=0; $i < $words; ++$i) { + $val = (int)$this->lookAnTable(ord($inputitem['data'][$i*2 ])) * 45; + $val += (int)$this->lookAnTable(ord($inputitem['data'][$i*2+1])); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 11, $val); + } + if ($inputitem['size'] & 1) { + $val = $this->lookAnTable(ord($inputitem['data'][($words * 2)])); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 6, $val); + } + return $inputitem; + } + + /** + * encodeMode8 + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeMode8($inputitem, $version) { + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x4); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_8B, $version), $inputitem['size']); + for ($i=0; $i < $inputitem['size']; ++$i) { + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][$i])); + } + return $inputitem; + } + + /** + * encodeModeKanji + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeModeKanji($inputitem, $version) { + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x8); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_KJ, $version), (int)($inputitem['size'] / 2)); + for ($i=0; $i<$inputitem['size']; $i+=2) { + $val = (ord($inputitem['data'][$i]) << 8) | ord($inputitem['data'][$i+1]); + if ($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 13, $val); + } + return $inputitem; + } + + /** + * encodeModeStructure + * @param array $inputitem + * @return array input item + */ + protected function encodeModeStructure($inputitem) { + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x03); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][1]) - 1); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][0]) - 1); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][2])); + return $inputitem; + } + + /** + * encodeBitStream + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeBitStream($inputitem, $version) { + $inputitem['bstream'] = array(); + $words = $this->maximumWords($inputitem['mode'], $version); + if ($inputitem['size'] > $words) { + $st1 = $this->newInputItem($inputitem['mode'], $words, $inputitem['data']); + $st2 = $this->newInputItem($inputitem['mode'], $inputitem['size'] - $words, array_slice($inputitem['data'], $words)); + $st1 = $this->encodeBitStream($st1, $version); + $st2 = $this->encodeBitStream($st2, $version); + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st1['bstream']); + $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st2['bstream']); + } else { + switch($inputitem['mode']) { + case QR_MODE_NM: { + $inputitem = $this->encodeModeNum($inputitem, $version); + break; + } + case QR_MODE_AN: { + $inputitem = $this->encodeModeAn($inputitem, $version); + break; + } + case QR_MODE_8B: { + $inputitem = $this->encodeMode8($inputitem, $version); + break; + } + case QR_MODE_KJ: { + $inputitem = $this->encodeModeKanji($inputitem, $version); + break; + } + case QR_MODE_ST: { + $inputitem = $this->encodeModeStructure($inputitem); + break; + } + default: { + break; + } + } + } + return $inputitem; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRinput + + /** + * Append data to an input object. + * The data is copied and appended to the input object. + * @param array items input items + * @param int $mode encoding mode. + * @param int $size size of data (byte). + * @param array $data array of input data. + * @return items + * + */ + protected function appendNewInputItem($items, $mode, $size, $data) { + $items[] = $this->newInputItem($mode, $size, $data); + return $items; + } + + /** + * insertStructuredAppendHeader + * @param array $items + * @param int $size + * @param int $index + * @param int $parity + * @return array items + */ + protected function insertStructuredAppendHeader($items, $size, $index, $parity) { + if ($size > MAX_STRUCTURED_SYMBOLS) { + return -1; + } + if (($index <= 0) OR ($index > MAX_STRUCTURED_SYMBOLS)) { + return -1; + } + $buf = array($size, $index, $parity); + $entry = $this->newInputItem(QR_MODE_ST, 3, buf); + array_unshift($items, $entry); + return $items; + } + + /** + * calcParity + * @param array $items + * @return int parity + */ + protected function calcParity($items) { + $parity = 0; + foreach ($items as $item) { + if ($item['mode'] != QR_MODE_ST) { + for ($i=$item['size']-1; $i>=0; --$i) { + $parity ^= $item['data'][$i]; + } + } + } + return $parity; + } + + /** + * checkModeNum + * @param int $size + * @param array $data + * @return boolean true or false + */ + protected function checkModeNum($size, $data) { + for ($i=0; $i<$size; ++$i) { + if ((ord($data[$i]) < ord('0')) OR (ord($data[$i]) > ord('9'))){ + return false; + } + } + return true; + } + + /** + * estimateBitsModeNum + * @param int $size + * @return int number of bits + */ + protected function estimateBitsModeNum($size) { + $w = (int)$size / 3; + $bits = $w * 10; + switch($size - $w * 3) { + case 1: { + $bits += 4; + break; + } + case 2: { + $bits += 7; + break; + } + default: { + break; + } + } + return $bits; + } + + /** + * Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19). + * @param int $c character value + * @return value + */ + protected function lookAnTable($c) { + return (($c > 127)?-1:$this->anTable[$c]); + } + + /** + * checkModeAn + * @param int $size + * @param array $data + * @return boolean true or false + */ + protected function checkModeAn($size, $data) { + for ($i=0; $i<$size; ++$i) { + if ($this->lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + return true; + } + + /** + * estimateBitsModeAn + * @param int $size + * @return int number of bits + */ + protected function estimateBitsModeAn($size) { + $w = (int)($size / 2); + $bits = $w * 11; + if ($size & 1) { + $bits += 6; + } + return $bits; + } + + /** + * estimateBitsMode8 + * @param int $size + * @return int number of bits + */ + protected function estimateBitsMode8($size) { + return $size * 8; + } + + /** + * estimateBitsModeKanji + * @param int $size + * @return int number of bits + */ + protected function estimateBitsModeKanji($size) { + return (int)(($size / 2) * 13); + } + + /** + * checkModeKanji + * @param int $size + * @param array $data + * @return boolean true or false + */ + protected function checkModeKanji($size, $data) { + if ($size & 1) { + return false; + } + for ($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if (($val < 0x8140) OR (($val > 0x9ffc) AND ($val < 0xe040)) OR ($val > 0xebbf)) { + return false; + } + } + return true; + } + + /** + * Validate the input data. + * @param int $mode encoding mode. + * @param int $size size of data (byte). + * @param array data data to validate + * @return boolean true in case of valid data, false otherwise + */ + protected function check($mode, $size, $data) { + if ($size <= 0) { + return false; + } + switch($mode) { + case QR_MODE_NM: { + return $this->checkModeNum($size, $data); + } + case QR_MODE_AN: { + return $this->checkModeAn($size, $data); + } + case QR_MODE_KJ: { + return $this->checkModeKanji($size, $data); + } + case QR_MODE_8B: { + return true; + } + case QR_MODE_ST: { + return true; + } + default: { + break; + } + } + return false; + } + + /** + * estimateBitStreamSize + * @param array $items + * @param int $version + * @return int bits + */ + protected function estimateBitStreamSize($items, $version) { + $bits = 0; + if ($version == 0) { + $version = 1; + } + foreach ($items as $item) { + switch($item['mode']) { + case QR_MODE_NM: { + $bits = $this->estimateBitsModeNum($item['size']); + break; + } + case QR_MODE_AN: { + $bits = $this->estimateBitsModeAn($item['size']); + break; + } + case QR_MODE_8B: { + $bits = $this->estimateBitsMode8($item['size']); + break; + } + case QR_MODE_KJ: { + $bits = $this->estimateBitsModeKanji($item['size']); + break; + } + case QR_MODE_ST: { + return STRUCTURE_HEADER_BITS; + } + default: { + return 0; + } + } + $l = $this->lengthIndicator($item['mode'], $version); + $m = 1 << $l; + $num = (int)(($item['size'] + $m - 1) / $m); + $bits += $num * (4 + $l); + } + return $bits; + } + + /** + * estimateVersion + * @param array $items + * @return int version + */ + protected function estimateVersion($items) { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($items, $prev); + $version = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + return $version; + } + + /** + * lengthOfCode + * @param int $mode + * @param int $version + * @param int $bits + * @return int size + */ + protected function lengthOfCode($mode, $version, $bits) { + $payload = $bits - 4 - $this->lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NM: { + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if ($remain >= 7) { + $size += 2; + } elseif ($remain >= 4) { + $size += 1; + } + break; + } + case QR_MODE_AN: { + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if ($remain >= 6) { + ++$size; + } + break; + } + case QR_MODE_8B: { + $size = (int)($payload / 8); + break; + } + case QR_MODE_KJ: { + $size = (int)(($payload / 13) * 2); + break; + } + case QR_MODE_ST: { + $size = (int)($payload / 8); + break; + } + default: { + $size = 0; + break; + } + } + $maxsize = $this->maximumWords($mode, $version); + if ($size < 0) { + $size = 0; + } + if ($size > $maxsize) { + $size = $maxsize; + } + return $size; + } + + /** + * createBitStream + * @param array $items + * @return array of items and total bits + */ + protected function createBitStream($items) { + $total = 0; + foreach ($items as $key => $item) { + $items[$key] = $this->encodeBitStream($item, $this->version); + $bits = count($items[$key]['bstream']); + $total += $bits; + } + return array($items, $total); + } + + /** + * convertData + * @param array $items + * @return array items + */ + protected function convertData($items) { + $ver = $this->estimateVersion($items); + if ($ver > $this->version) { + $this->version = $ver; + } + for (;;) { + $cbs = $this->createBitStream($items); + $items = $cbs[0]; + $bits = $cbs[1]; + if ($bits < 0) { + return -1; + } + $ver = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($ver < 0) { + return -1; + } elseif ($ver > $this->version) { + $this->version = $ver; + } else { + break; + } + } + return $items; + } + + /** + * Append Padding Bit to bitstream + * @param array $bstream + * @return array bitstream + */ + protected function appendPaddingBit($bstream) { + $bits = count($bstream); + $maxwords = $this->getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + if ($maxbits == $bits) { + return 0; + } + if ($maxbits - $bits < 5) { + return $this->appendNum($bstream, $maxbits - $bits, 0); + } + $bits += 4; + $words = (int)(($bits + 7) / 8); + $padding = array(); + $padding = $this->appendNum($padding, $words * 8 - $bits + 4, 0); + $padlen = $maxwords - $words; + if ($padlen > 0) { + $padbuf = array(); + for ($i=0; $i<$padlen; ++$i) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + $padding = $this->appendBytes($padding, $padlen, $padbuf); + } + return $this->appendBitstream($bstream, $padding); + } + + /** + * mergeBitStream + * @param array $bstream + * @return array bitstream + */ + protected function mergeBitStream($items) { + $items = $this->convertData($items); + $bstream = array(); + foreach ($items as $item) { + $bstream = $this->appendBitstream($bstream, $item['bstream']); + } + return $bstream; + } + + /** + * Returns a stream of bits. + * @param int $items + * @return array padded merged byte stream + */ + protected function getBitStream($items) { + $bstream = $this->mergeBitStream($items); + return $this->appendPaddingBit($bstream); + } + + /** + * Pack all bit streams padding bits into a byte array. + * @param int $items + * @return array padded merged byte stream + */ + protected function getByteStream($items) { + $bstream = $this->getBitStream($items); + return $this->bitstreamToByte($bstream); + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRbitstream + + /** + * Return an array with zeros + * @param int $setLength array size + * @return array + */ + protected function allocate($setLength) { + return array_fill(0, $setLength, 0); + } + + /** + * Return new bitstream from number + * @param int $bits number of bits + * @param int $num number + * @return array bitstream + */ + protected function newFromNum($bits, $num) { + $bstream = $this->allocate($bits); + $mask = 1 << ($bits - 1); + for ($i=0; $i<$bits; ++$i) { + if ($num & $mask) { + $bstream[$i] = 1; + } else { + $bstream[$i] = 0; + } + $mask = $mask >> 1; + } + return $bstream; + } + + /** + * Return new bitstream from bytes + * @param int $size size + * @param array $data bytes + * @return array bitstream + */ + protected function newFromBytes($size, $data) { + $bstream = $this->allocate($size * 8); + $p=0; + for ($i=0; $i<$size; ++$i) { + $mask = 0x80; + for ($j=0; $j<8; ++$j) { + if ($data[$i] & $mask) { + $bstream[$p] = 1; + } else { + $bstream[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + return $bstream; + } + + /** + * Append one bitstream to another + * @param array $bitstream original bitstream + * @param array $append bitstream to append + * @return array bitstream + */ + protected function appendBitstream($bitstream, $append) { + if ((!is_array($append)) OR (count($append) == 0)) { + return $bitstream; + } + if (count($bitstream) == 0) { + return $append; + } + return array_values(array_merge($bitstream, $append)); + } + + /** + * Append one bitstream created from number to another + * @param array $bitstream original bitstream + * @param int $bits number of bits + * @param int $num number + * @return array bitstream + */ + protected function appendNum($bitstream, $bits, $num) { + if ($bits == 0) { + return 0; + } + $b = $this->newFromNum($bits, $num); + return $this->appendBitstream($bitstream, $b); + } + + /** + * Append one bitstream created from bytes to another + * @param array $bitstream original bitstream + * @param int $size size + * @param array $data bytes + * @return array bitstream + */ + protected function appendBytes($bitstream, $size, $data) { + if ($size == 0) { + return 0; + } + $b = $this->newFromBytes($size, $data); + return $this->appendBitstream($bitstream, $b); + } + + /** + * Convert bitstream to bytes + * @param array $bitstream original bitstream + * @return array of bytes + */ + protected function bitstreamToByte($bstream) { + $size = count($bstream); + if ($size == 0) { + return array(); + } + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + $p = 0; + for ($i=0; $i<$bytes; $i++) { + $v = 0; + for ($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $bstream[$p]; + $p++; + } + $data[$i] = $v; + } + if ($size & 7) { + $v = 0; + for ($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $bstream[$p]; + $p++; + } + $data[$bytes] = $v; + } + return $data; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRspec + + /** + * Replace a value on the array at the specified position + * @param array $srctab + * @param int $x X position + * @param int $y Y position + * @param string $repl value to replace + * @param int $replLen length of the repl string + * @return array srctab + */ + protected function qrstrset($srctab, $x, $y, $repl, $replLen=false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + return $srctab; + } + + /** + * Return maximum data code length (bytes) for the version. + * @param int $version version + * @param int $level error correction level + * @return int maximum size (bytes) + */ + protected function getDataLength($version, $level) { + return $this->capacity[$version][QRCAP_WORDS] - $this->capacity[$version][QRCAP_EC][$level]; + } + + /** + * Return maximum error correction code length (bytes) for the version. + * @param int $version version + * @param int $level error correction level + * @return int ECC size (bytes) + */ + protected function getECCLength($version, $level){ + return $this->capacity[$version][QRCAP_EC][$level]; + } + + /** + * Return the width of the symbol for the version. + * @param int $version version + * @return int width + */ + protected function getWidth($version) { + return $this->capacity[$version][QRCAP_WIDTH]; + } + + /** + * Return the numer of remainder bits. + * @param int $version version + * @return int number of remainder bits + */ + protected function getRemainder($version) { + return $this->capacity[$version][QRCAP_REMINDER]; + } + + /** + * Return a version number that satisfies the input code length. + * @param int $size input code length (byte) + * @param int $level error correction level + * @return int version number + */ + protected function getMinimumVersion($size, $level) { + for ($i=1; $i <= QRSPEC_VERSION_MAX; ++$i) { + $words = $this->capacity[$i][QRCAP_WORDS] - $this->capacity[$i][QRCAP_EC][$level]; + if ($words >= $size) { + return $i; + } + } + return -1; + } + + /** + * Return the size of length indicator for the mode and version. + * @param int $mode encoding mode + * @param int $version version + * @return int the size of the appropriate length indicator (bits). + */ + protected function lengthIndicator($mode, $version) { + if ($mode == QR_MODE_ST) { + return 0; + } + if ($version <= 9) { + $l = 0; + } elseif ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + return $this->lengthTableBits[$mode][$l]; + } + + /** + * Return the maximum length for the mode and version. + * @param int $mode encoding mode + * @param int $version version + * @return int the maximum length (bytes) + */ + protected function maximumWords($mode, $version) { + if ($mode == QR_MODE_ST) { + return 3; + } + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + $bits = $this->lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + if ($mode == QR_MODE_KJ) { + $words *= 2; // the number of bytes is required + } + return $words; + } + + /** + * Return an array of ECC specification. + * @param int $version version + * @param int $level error correction level + * @param array $spec an array of ECC specification contains as following: {# of type1 blocks, # of data code, # of ecc code, # of type2 blocks, # of data code} + * @return array spec + */ + protected function getEccSpec($version, $level, $spec) { + if (count($spec) < 5) { + $spec = array(0, 0, 0, 0, 0); + } + $b1 = $this->eccTable[$version][$level][0]; + $b2 = $this->eccTable[$version][$level][1]; + $data = $this->getDataLength($version, $level); + $ecc = $this->getECCLength($version, $level); + if ($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + return $spec; + } + + /** + * Put an alignment marker. + * @param array $frame frame + * @param int $width width + * @param int $ox X center coordinate of the pattern + * @param int $oy Y center coordinate of the pattern + * @return array frame + */ + protected function putAlignmentMarker($frame, $ox, $oy) { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + $yStart = $oy - 2; + $xStart = $ox - 2; + for ($y=0; $y < 5; $y++) { + $frame = $this->qrstrset($frame, $xStart, $yStart+$y, $finder[$y]); + } + return $frame; + } + + /** + * Put an alignment pattern. + * @param int $version version + * @param array $fram frame + * @param int $width width + * @return array frame + */ + protected function putAlignmentPattern($version, $frame, $width) { + if ($version < 2) { + return $frame; + } + $d = $this->alignmentPattern[$version][1] - $this->alignmentPattern[$version][0]; + if ($d < 0) { + $w = 2; + } else { + $w = (int)(($width - $this->alignmentPattern[$version][0]) / $d + 2); + } + if ($w * $w - 3 == 1) { + $x = $this->alignmentPattern[$version][0]; + $y = $this->alignmentPattern[$version][0]; + $frame = $this->putAlignmentMarker($frame, $x, $y); + return $frame; + } + $cx = $this->alignmentPattern[$version][0]; + $wo = $w - 1; + for ($x=1; $x < $wo; ++$x) { + $frame = $this->putAlignmentMarker($frame, 6, $cx); + $frame = $this->putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + $cy = $this->alignmentPattern[$version][0]; + for ($y=0; $y < $wo; ++$y) { + $cx = $this->alignmentPattern[$version][0]; + for ($x=0; $x < $wo; ++$x) { + $frame = $this->putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + return $frame; + } + + /** + * Return BCH encoded version information pattern that is used for the symbol of version 7 or greater. Use lower 18 bits. + * @param int $version version + * @return BCH encoded version information pattern + */ + protected function getVersionPattern($version) { + if (($version < 7) OR ($version > QRSPEC_VERSION_MAX)) { + return 0; + } + return $this->versionPattern[($version - 7)]; + } + + /** + * Return BCH encoded format information pattern. + * @param array $mask + * @param int $level error correction level + * @return BCH encoded format information pattern + */ + protected function getFormatInfo($mask, $level) { + if (($mask < 0) OR ($mask > 7)) { + return 0; + } + if (($level < 0) OR ($level > 3)) { + return 0; + } + return $this->formatInfo[$level][$mask]; + } + + /** + * Put a finder pattern. + * @param array $frame frame + * @param int $width width + * @param int $ox X center coordinate of the pattern + * @param int $oy Y center coordinate of the pattern + * @return array frame + */ + protected function putFinderPattern($frame, $ox, $oy) { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + for ($y=0; $y < 7; $y++) { + $frame = $this->qrstrset($frame, $ox, ($oy + $y), $finder[$y]); + } + return $frame; + } + + /** + * Return a copy of initialized frame. + * @param int $version version + * @return Array of unsigned char. + */ + protected function createFrame($version) { + $width = $this->capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + // Finder pattern + $frame = $this->putFinderPattern($frame, 0, 0); + $frame = $this->putFinderPattern($frame, $width - 7, 0); + $frame = $this->putFinderPattern($frame, 0, $width - 7); + // Separator + $yOffset = $width - 7; + for ($y=0; $y < 7; ++$y) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + ++$yOffset; + } + $setPattern = str_repeat("\xc0", 8); + $frame = $this->qrstrset($frame, 0, 7, $setPattern); + $frame = $this->qrstrset($frame, $width-8, 7, $setPattern); + $frame = $this->qrstrset($frame, 0, $width - 8, $setPattern); + // Format info + $setPattern = str_repeat("\x84", 9); + $frame = $this->qrstrset($frame, 0, 8, $setPattern); + $frame = $this->qrstrset($frame, $width - 8, 8, $setPattern, 8); + $yOffset = $width - 8; + for ($y=0; $y < 8; ++$y,++$yOffset) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + // Timing pattern + $wo = $width - 15; + for ($i=1; $i < $wo; ++$i) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + // Alignment pattern + $frame = $this->putAlignmentPattern($version, $frame, $width); + // Version information + if ($version >= 7) { + $vinf = $this->getVersionPattern($version); + $v = $vinf; + for ($x=0; $x<6; ++$x) { + for ($y=0; $y<3; ++$y) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + $v = $vinf; + for ($y=0; $y<6; ++$y) { + for ($x=0; $x<3; ++$x) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + // and a little bit... + $frame[$width - 8][8] = "\x81"; + return $frame; + } + + /** + * Set new frame for the specified version. + * @param int $version version + * @return Array of unsigned char. + */ + protected function newFrame($version) { + if (($version < 1) OR ($version > QRSPEC_VERSION_MAX)) { + return NULL; + } + if (!isset($this->frames[$version])) { + $this->frames[$version] = $this->createFrame($version); + } + if (is_null($this->frames[$version])) { + return NULL; + } + return $this->frames[$version]; + } + + /** + * Return block number 0 + * @param array $spec + * @return int value + */ + protected function rsBlockNum($spec) { + return ($spec[0] + $spec[3]); + } + + /** + * Return block number 1 + * @param array $spec + * @return int value + */ + protected function rsBlockNum1($spec) { + return $spec[0]; + } + + /** + * Return data codes 1 + * @param array $spec + * @return int value + */ + protected function rsDataCodes1($spec) { + return $spec[1]; + } + + /** + * Return ecc codes 1 + * @param array $spec + * @return int value + */ + protected function rsEccCodes1($spec) { + return $spec[2]; + } + + /** + * Return block number 2 + * @param array $spec + * @return int value + */ + protected function rsBlockNum2($spec) { + return $spec[3]; + } + + /** + * Return data codes 2 + * @param array $spec + * @return int value + */ + protected function rsDataCodes2($spec) { + return $spec[4]; + } + + /** + * Return ecc codes 2 + * @param array $spec + * @return int value + */ + protected function rsEccCodes2($spec) { + return $spec[2]; + } + + /** + * Return data length + * @param array $spec + * @return int value + */ + protected function rsDataLength($spec) { + return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); + } + + /** + * Return ecc length + * @param array $spec + * @return int value + */ + protected function rsEccLength($spec) { + return ($spec[0] + $spec[3]) * $spec[2]; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRrs + + /** + * Initialize a Reed-Solomon codec and add it to existing rsitems + * @param int $symsize symbol size, bits + * @param int $gfpoly Field generator polynomial coefficients + * @param int $fcr first root of RS code generator polynomial, index form + * @param int $prim primitive element to generate polynomial roots + * @param int $nroots RS code generator polynomial degree (number of roots) + * @param int $pad padding bytes at front of shortened block + * @return array Array of RS values:
    • mm = Bits per symbol;
    • nn = Symbols per block;
    • alpha_to = log lookup table array;
    • index_of = Antilog lookup table array;
    • genpoly = Generator polynomial array;
    • nroots = Number of generator;
    • roots = number of parity symbols;
    • fcr = First consecutive root, index form;
    • prim = Primitive element, index form;
    • iprim = prim-th root of 1, index form;
    • pad = Padding bytes in shortened block;
    • gfpoly
    . + */ + protected function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) { + foreach ($this->rsitems as $rs) { + if (($rs['pad'] != $pad) OR ($rs['nroots'] != $nroots) OR ($rs['mm'] != $symsize) + OR ($rs['gfpoly'] != $gfpoly) OR ($rs['fcr'] != $fcr) OR ($rs['prim'] != $prim)) { + continue; + } + return $rs; + } + $rs = $this->init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift($this->rsitems, $rs); + return $rs; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRrsItem + + /** + * modnn + * @param array RS values + * @param int $x X position + * @return int X osition + */ + protected function modnn($rs, $x) { + while ($x >= $rs['nn']) { + $x -= $rs['nn']; + $x = ($x >> $rs['mm']) + ($x & $rs['nn']); + } + return $x; + } + + /** + * Initialize a Reed-Solomon codec and returns an array of values. + * @param int $symsize symbol size, bits + * @param int $gfpoly Field generator polynomial coefficients + * @param int $fcr first root of RS code generator polynomial, index form + * @param int $prim primitive element to generate polynomial roots + * @param int $nroots RS code generator polynomial degree (number of roots) + * @param int $pad padding bytes at front of shortened block + * @return array Array of RS values:
    • mm = Bits per symbol;
    • nn = Symbols per block;
    • alpha_to = log lookup table array;
    • index_of = Antilog lookup table array;
    • genpoly = Generator polynomial array;
    • nroots = Number of generator;
    • roots = number of parity symbols;
    • fcr = First consecutive root, index form;
    • prim = Primitive element, index form;
    • iprim = prim-th root of 1, index form;
    • pad = Padding bytes in shortened block;
    • gfpoly
    . + */ + protected function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) { + // Based on Reed solomon encoder by Phil Karn, KA9Q (GNU-LGPLv2) + $rs = null; + // Check parameter ranges + if (($symsize < 0) OR ($symsize > 8)) { + return $rs; + } + if (($fcr < 0) OR ($fcr >= (1<<$symsize))) { + return $rs; + } + if (($prim <= 0) OR ($prim >= (1<<$symsize))) { + return $rs; + } + if (($nroots < 0) OR ($nroots >= (1<<$symsize))) { + return $rs; + } + if (($pad < 0) OR ($pad >= ((1<<$symsize) -1 - $nroots))) { + return $rs; + } + $rs = array(); + $rs['mm'] = $symsize; + $rs['nn'] = (1 << $symsize) - 1; + $rs['pad'] = $pad; + $rs['alpha_to'] = array_fill(0, ($rs['nn'] + 1), 0); + $rs['index_of'] = array_fill(0, ($rs['nn'] + 1), 0); + // PHP style macro replacement ;) + $NN =& $rs['nn']; + $A0 =& $NN; + // Generate Galois field lookup tables + $rs['index_of'][0] = $A0; // log(zero) = -inf + $rs['alpha_to'][$A0] = 0; // alpha**-inf = 0 + $sr = 1; + for ($i=0; $i<$rs['nn']; ++$i) { + $rs['index_of'][$sr] = $i; + $rs['alpha_to'][$i] = $sr; + $sr <<= 1; + if ($sr & (1 << $symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs['nn']; + } + if ($sr != 1) { + // field generator polynomial is not primitive! + return NULL; + } + // Form RS code generator polynomial from its roots + $rs['genpoly'] = array_fill(0, ($nroots + 1), 0); + $rs['fcr'] = $fcr; + $rs['prim'] = $prim; + $rs['nroots'] = $nroots; + $rs['gfpoly'] = $gfpoly; + // Find prim-th root of 1, used in decoding + for ($iprim=1; ($iprim % $prim) != 0; $iprim += $rs['nn']) { + ; // intentional empty-body loop! + } + $rs['iprim'] = (int)($iprim / $prim); + $rs['genpoly'][0] = 1; + + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs['genpoly'][$i+1] = 1; + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; --$j) { + if ($rs['genpoly'][$j] != 0) { + $rs['genpoly'][$j] = $rs['genpoly'][$j-1] ^ $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][$j]] + $root)]; + } else { + $rs['genpoly'][$j] = $rs['genpoly'][$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs['genpoly'][0] = $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][0]] + $root)]; + } + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; ++$i) { + $rs['genpoly'][$i] = $rs['index_of'][$rs['genpoly'][$i]]; + } + return $rs; + } + + /** + * Encode a Reed-Solomon codec and returns the parity array + * @param array $rs RS values + * @param array $data data + * @param array $parity parity + * @return parity array + */ + protected function encode_rs_char($rs, $data, $parity) { + $MM =& $rs['mm']; // bits per symbol + $NN =& $rs['nn']; // the total number of symbols in a RS block + $ALPHA_TO =& $rs['alpha_to']; // the address of an array of NN elements to convert Galois field elements in index (log) form to polynomial form + $INDEX_OF =& $rs['index_of']; // the address of an array of NN elements to convert Galois field elements in polynomial form to index (log) form + $GENPOLY =& $rs['genpoly']; // an array of NROOTS+1 elements containing the generator polynomial in index form + $NROOTS =& $rs['nroots']; // the number of roots in the RS code generator polynomial, which is the same as the number of parity symbols in a block + $FCR =& $rs['fcr']; // first consecutive root, index form + $PRIM =& $rs['prim']; // primitive element, index form + $IPRIM =& $rs['iprim']; // prim-th root of 1, index form + $PAD =& $rs['pad']; // the number of pad symbols in a block + $A0 =& $NN; + $parity = array_fill(0, $NROOTS, 0); + for ($i=0; $i < ($NN - $NROOTS - $PAD); $i++) { + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if ($feedback != $A0) { + // feedback term is non-zero + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($rs, $NN - $GENPOLY[$NROOTS] + $feedback); + for ($j=1; $j < $NROOTS; ++$j) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[($NROOTS - $j)])]; + } + } + // Shift + array_shift($parity); + if ($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + return $parity; + } + + } // end QRcode class + +} // END OF "class_exists QRcode" +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/tcpdf.crt b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/tcpdf.crt new file mode 100755 index 00000000..0e297241 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/tcpdf.crt @@ -0,0 +1,40 @@ +Bag Attributes + localKeyID: 7B AB 1B 7A BE 4C 85 C0 1A A6 DC 59 3F 79 48 C3 93 38 68 9C +subject=/CN=TCPDF DEMO/O=TCPDF/OU=DEMO/emailAddress=you@example.com/C=IT +issuer=/CN=TCPDF DEMO/O=TCPDF/OU=DEMO/emailAddress=you@example.com/C=IT +-----BEGIN CERTIFICATE----- +MIIC1TCCAj6gAwIBAgIKkehOL/XGkB5cjjANBgkqhkiG9w0BAQUFADBhMRMwEQYD +VQQDEwpUQ1BERiBERU1PMQ4wDAYDVQQKEwVUQ1BERjENMAsGA1UECxMEREVNTzEe +MBwGCSqGSIb3DQEJARYPeW91QGV4YW1wbGUuY29tMQswCQYDVQQGEwJJVDAeFw0w +OTA4MjExMjU0NDhaFw0xNDA4MjExMjU0NDhaMGExEzARBgNVBAMTClRDUERGIERF +TU8xDjAMBgNVBAoTBVRDUERGMQ0wCwYDVQQLEwRERU1PMR4wHAYJKoZIhvcNAQkB +Fg95b3VAZXhhbXBsZS5jb20xCzAJBgNVBAYTAklUMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDAqIL0uGKmTR98Lxx2vEEE1OGKkMXFo0JViitALe7Onhxxqx0H +XMUDKF5mvEVu1rcvh7/oAnAfrCuEpL/up3u1mQCgBE7WXBnFFE/AE3jCksh9OkS0 +Z0Xj9woN5bzxRDsGoPiOu/4xzk5qSEXt8jf2Ep90QuNkqLIRT4swAzpDbwIDAQAB +o4GTMIGQMDcGA1UdEgQwMC6gEQYDVQQDDApUQ1BERiBERU1PoAwGA1UECgwFVENQ +REagCwYDVQQLDARERU1PMDcGA1UdEQQwMC6gEQYDVQQDDApUQ1BERiBERU1PoAwG +A1UECgwFVENQREagCwYDVQQLDARERU1PMA8GCSqGSIb3LwEBCgQCBQAwCwYDVR0P +BAQDAgSQMA0GCSqGSIb3DQEBBQUAA4GBAEhTQfqX3ZNdHmpTLDbIj22RHXii2roE +OavCbu9WsHoWpva0qSd+yIoD594VHvYAd29sfzDfiN+7W0aiZfDhq5jpaSQMVlN8 +RGYMupbHY/+a9Gz1wqxnR84mlTtIkZVRYAhsfPwy6M1BEjdMqfdh9h40JIdkdjtb +8faTCfXPePWQ +-----END CERTIFICATE----- +Bag Attributes + localKeyID: 7B AB 1B 7A BE 4C 85 C0 1A A6 DC 59 3F 79 48 C3 93 38 68 9C +Key Attributes: +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQDAqIL0uGKmTR98Lxx2vEEE1OGKkMXFo0JViitALe7Onhxxqx0H +XMUDKF5mvEVu1rcvh7/oAnAfrCuEpL/up3u1mQCgBE7WXBnFFE/AE3jCksh9OkS0 +Z0Xj9woN5bzxRDsGoPiOu/4xzk5qSEXt8jf2Ep90QuNkqLIRT4swAzpDbwIDAQAB +AoGAXc+wNMmz/5Z+RlIKYia44klmqbplEx+0JULqXI4BQsrqvs67i+I4bJkznoL+ +rEIRYSuQ3sCRKFsFtckjTGpxadnxkB+uwGKc6pZChv99BFX6HFR4hgBlT/BBRAQA +hMDlM2JIRr4S4SMVXR7MHwGMUf9mUeanGLR3ZWtU3aXJrIECQQD7OaYUVYNEEnM9 +uXyjm22CuHyqyEf5gb13sK0uQty67547yJTMUQZd/sQc9KGwhzBbhrob2LO2jAhh +S+f+NSRnAkEAxFHm3fMI5RgXmswxlGm4QW07a/Ueo7ZJG6xjTkFXluJhd+XHswRD +dQIO3zG9nGjNUoeMrPhXhPvKqFc2F9RDuQJAQBEGin74N77gxqfr4ik79y8nE8J5 +oGZ2s/RJZdfFRKLg3mwbjjNHhWb4Ck5UgZkoOt8TzRApXG8/n9hktE5HFwJBALur +M5AueO1Pl5kB489lNJ9OxUQRYUXMxpxuscuoCQwSwmv0O2+0/qtG2WKhUQnI4aYo +L+FV0YwtivBb1jj3T/kCQQDIWOxq8eRowdaMzvJpRUHFgMcf1AVZExKyrugwYOWd +KNsDxC4KaQOsPt8iT/Ulo4g/MJC0HolCOhWibKmR9Ayl +-----END RSA PRIVATE KEY----- diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/tcpdf.fdf b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/tcpdf.fdf new file mode 100755 index 00000000..a8f7c35d Binary files /dev/null and b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/tcpdf.fdf differ diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/tcpdf.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/tcpdf.php new file mode 100755 index 00000000..f9549cc1 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/tcpdf.php @@ -0,0 +1,19828 @@ +. +// +// See LICENSE.TXT file for more information. +// ---------------------------------------------------------------------------- +// +// Description : This is a PHP class for generating PDF documents without +// requiring external extensions. +// +// NOTE: +// This class was originally derived in 2002 from the Public +// Domain FPDF class by Olivier Plathey (http://www.fpdf.org), +// but now is almost entirely rewritten. +// +// Main features: +// * no external libraries are required for the basic functions; +// * all ISO page formats, custom page formats, custom margins and units of measure; +// * UTF-8 Unicode and Right-To-Left languages; +// * TrueTypeUnicode, OpenTypeUnicode, TrueType, OpenType, Type1 and CID-0 fonts; +// * methods to publish some XHTML code, Javascript and Forms; +// * images, graphic (geometric figures) and transformation methods; +// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html) +// * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, QR-Code; +// * Grayscale, RGB, CMYK, Spot Colors and Transparencies; +// * automatic page header and footer management; +// * document encryption and digital signature certifications; +// * transactions to UNDO commands; +// * PDF annotations, including links, text and file attachments; +// * text rendering modes (fill, stroke and clipping); +// * multiple columns mode; +// * bookmarks and table of content; +// * text hyphenation; +// * automatic page break, line break and text alignments including justification; +// * automatic page numbering and page groups; +// * move and delete pages; +// * page compression (requires php-zlib extension); +// +// ----------------------------------------------------------- +// THANKS TO: +// +// Olivier Plathey (http://www.fpdf.org) for original FPDF. +// Efthimios Mavrogeorgiadis (emavro@yahoo.com) for suggestions on RTL language support. +// Klemen Vodopivec (http://www.fpdf.de/downloads/addons/37/) for Encryption algorithm. +// Warren Sherliker (wsherliker@gmail.com) for better image handling. +// dullus for text Justification. +// Bob Vincent (pillarsdotnet@users.sourceforge.net) for
  • value attribute. +// Patrick Benny for text stretch suggestion on Cell(). +// Johannes G�ntert for JavaScript support. +// Denis Van Nuffelen for Dynamic Form. +// Jacek Czekaj for multibyte justification +// Anthony Ferrara for the reintroduction of legacy image methods. +// Sourceforge user 1707880 (hucste) for line-trough mode. +// Larry Stanbery for page groups. +// Martin Hall-May for transparency. +// Aaron C. Spike for Polycurve method. +// Mohamad Ali Golkar, Saleh AlMatrafe, Charles Abbott for Arabic and Persian support. +// Moritz Wagner and Andreas Wurmser for graphic functions. +// Andrew Whitehead for core fonts support. +// Esteban Jo�l Mar�n for OpenType font conversion. +// Teus Hagen for several suggestions and fixes. +// Yukihiro Nakadaira for CID-0 CJK fonts fixes. +// Kosmas Papachristos for some CSS improvements. +// Marcel Partap for some fixes. +// Won Kyu Park for several suggestions, fixes and patches. +// Dominik Dzienia for QR-code support. +// Laurent Minguet for some suggestions. +// Anyone that has reported a bug or sent a suggestion. +//============================================================+ + +/** + * This is a PHP class for generating PDF documents without requiring external extensions.
    + * TCPDF project (http://www.tcpdf.org) was originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.
    + *

    TCPDF main features are:

    + *
      + *
    • no external libraries are required for the basic functions;
    • + *
    • all ISO page formats, custom page formats, custom margins and units of measure;
    • + *
    • UTF-8 Unicode and Right-To-Left languages;
    • + *
    • TrueTypeUnicode, OpenTypeUnicode, TrueType, OpenType, Type1 and CID-0 fonts;
    • + *
    • methods to publish some XHTML code, Javascript and Forms;
    • + *
    • images, graphic (geometric figures) and transformation methods; + *
    • supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)
    • + *
    • 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, QR-Code;
    • + *
    • Grayscale, RGB, CMYK, Spot Colors and Transparencies;
    • + *
    • automatic page header and footer management;
    • + *
    • document encryption and digital signature certifications;
    • + *
    • transactions to UNDO commands;
    • + *
    • PDF annotations, including links, text and file attachments;
    • + *
    • text rendering modes (fill, stroke and clipping);
    • + *
    • multiple columns mode;
    • + *
    • bookmarks and table of content;
    • + *
    • text hyphenation;
    • + *
    • automatic page break, line break and text alignments including justification;
    • + *
    • automatic page numbering and page groups;
    • + *
    • move and delete pages;
    • + *
    • page compression (requires php-zlib extension);
    • + *
    + * Tools to encode your unicode fonts are on fonts/utils directory.

    + * @package com.tecnick.tcpdf + * @abstract Class for generating PDF files on-the-fly without requiring external extensions. + * @author Nicola Asuni + * @copyright 2002-2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + * @version 5.0.002 + */ + +/** + * main configuration file + */ +require_once(dirname(__FILE__).'/config/tcpdf_config.php'); + +// includes some support files + +/** + * unicode data + */ +require_once(dirname(__FILE__).'/unicode_data.php'); + +/** + * html colors table + */ +require_once(dirname(__FILE__).'/htmlcolors.php'); + +if (!class_exists('TCPDF', false)) { + /** + * define default PDF document producer + */ + define('PDF_PRODUCER', 'TCPDF 5.0.002 (http://www.tcpdf.org)'); + + /** + * This is a PHP class for generating PDF documents without requiring external extensions.
    + * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.
    + * @name TCPDF + * @package com.tecnick.tcpdf + * @version 5.0.002 + * @author Nicola Asuni - info@tecnick.com + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + class TCPDF { + + // protected or Protected properties + + /** + * @var current page number + * @access protected + */ + protected $page; + + /** + * @var current object number + * @access protected + */ + protected $n; + + /** + * @var array of object offsets + * @access protected + */ + protected $offsets; + + /** + * @var buffer holding in-memory PDF + * @access protected + */ + protected $buffer; + + /** + * @var array containing pages + * @access protected + */ + protected $pages = array(); + + /** + * @var current document state + * @access protected + */ + protected $state; + + /** + * @var compression flag + * @access protected + */ + protected $compress; + + /** + * @var current page orientation (P = Portrait, L = Landscape) + * @access protected + */ + protected $CurOrientation; + + /** + * @var array that stores page dimensions and graphic status.
    • $this->pagedim[$this->page]['w'] => page_width_in_points
    • $this->pagedim[$this->page]['h'] => height in points
    • $this->pagedim[$this->page]['wk'] => page_width_in_points
    • $this->pagedim[$this->page]['hk'] => height
    • $this->pagedim[$this->page]['tm'] => top_margin
    • $this->pagedim[$this->page]['bm'] => bottom_margin
    • $this->pagedim[$this->page]['lm'] => left_margin
    • $this->pagedim[$this->page]['rm'] => right_margin
    • $this->pagedim[$this->page]['pb'] => auto_page_break
    • $this->pagedim[$this->page]['or'] => page_orientation
    • $this->pagedim[$this->page]['olm'] => original_left_margin
    • $this->pagedim[$this->page]['orm'] => original_right_margin
    + * @access protected + */ + protected $pagedim = array(); + + /** + * @var scale factor (number of points in user unit) + * @access protected + */ + protected $k; + + /** + * @var width of page format in points + * @access protected + */ + protected $fwPt; + + /** + * @var height of page format in points + * @access protected + */ + protected $fhPt; + + /** + * @var current width of page in points + * @access protected + */ + protected $wPt; + + /** + * @var current height of page in points + * @access protected + */ + protected $hPt; + + /** + * @var current width of page in user unit + * @access protected + */ + protected $w; + + /** + * @var current height of page in user unit + * @access protected + */ + protected $h; + + /** + * @var left margin + * @access protected + */ + protected $lMargin; + + /** + * @var top margin + * @access protected + */ + protected $tMargin; + + /** + * @var right margin + * @access protected + */ + protected $rMargin; + + /** + * @var page break margin + * @access protected + */ + protected $bMargin; + + /** + * @var cell internal padding + * @access protected + */ + //protected + public $cMargin; + + /** + * @var cell internal padding (previous value) + * @access protected + */ + protected $oldcMargin; + + /** + * @var current horizontal position in user unit for cell positioning + * @access protected + */ + protected $x; + + /** + * @var current vertical position in user unit for cell positioning + * @access protected + */ + protected $y; + + /** + * @var height of last cell printed + * @access protected + */ + protected $lasth; + + /** + * @var line width in user unit + * @access protected + */ + protected $LineWidth; + + /** + * @var array of standard font names + * @access protected + */ + protected $CoreFonts; + + /** + * @var array of used fonts + * @access protected + */ + protected $fonts = array(); + + /** + * @var array of font files + * @access protected + */ + protected $FontFiles = array(); + + /** + * @var array of encoding differences + * @access protected + */ + protected $diffs = array(); + + /** + * @var array of used images + * @access protected + */ + protected $images = array(); + + /** + * @var array of Annotations in pages + * @access protected + */ + protected $PageAnnots = array(); + + /** + * @var array of internal links + * @access protected + */ + protected $links = array(); + + /** + * @var current font family + * @access protected + */ + protected $FontFamily; + + /** + * @var current font style + * @access protected + */ + protected $FontStyle; + + /** + * @var current font ascent (distance between font top and baseline) + * @access protected + * @since 2.8.000 (2007-03-29) + */ + protected $FontAscent; + + /** + * @var current font descent (distance between font bottom and baseline) + * @access protected + * @since 2.8.000 (2007-03-29) + */ + protected $FontDescent; + + /** + * @var underlining flag + * @access protected + */ + protected $underline; + + /** + * @var overlining flag + * @access protected + */ + protected $overline; + + /** + * @var current font info + * @access protected + */ + protected $CurrentFont; + + /** + * @var current font size in points + * @access protected + */ + protected $FontSizePt; + + /** + * @var current font size in user unit + * @access protected + */ + protected $FontSize; + + /** + * @var commands for drawing color + * @access protected + */ + protected $DrawColor; + + /** + * @var commands for filling color + * @access protected + */ + protected $FillColor; + + /** + * @var commands for text color + * @access protected + */ + protected $TextColor; + + /** + * @var indicates whether fill and text colors are different + * @access protected + */ + protected $ColorFlag; + + /** + * @var automatic page breaking + * @access protected + */ + protected $AutoPageBreak; + + /** + * @var threshold used to trigger page breaks + * @access protected + */ + protected $PageBreakTrigger; + + /** + * @var flag set when processing footer + * @access protected + */ + protected $InFooter = false; + + /** + * @var zoom display mode + * @access protected + */ + protected $ZoomMode; + + /** + * @var layout display mode + * @access protected + */ + protected $LayoutMode; + + /** + * @var title + * @access protected + */ + protected $title = ''; + + /** + * @var subject + * @access protected + */ + protected $subject = ''; + + /** + * @var author + * @access protected + */ + protected $author = ''; + + /** + * @var keywords + * @access protected + */ + protected $keywords = ''; + + /** + * @var creator + * @access protected + */ + protected $creator = ''; + + /** + * @var alias for total number of pages + * @access protected + */ + protected $AliasNbPages = '{nb}'; + + /** + * @var alias for page number + * @access protected + */ + protected $AliasNumPage = '{pnb}'; + + /** + * @var right-bottom corner X coordinate of inserted image + * @since 2002-07-31 + * @author Nicola Asuni + * @access protected + */ + protected $img_rb_x; + + /** + * @var right-bottom corner Y coordinate of inserted image + * @since 2002-07-31 + * @author Nicola Asuni + * @access protected + */ + protected $img_rb_y; + + /** + * @var adjusting factor to convert pixels to user units. + * @since 2004-06-14 + * @author Nicola Asuni + * @access protected + */ + protected $imgscale = 1; + + /** + * @var boolean set to true when the input text is unicode (require unicode fonts) + * @since 2005-01-02 + * @author Nicola Asuni + * @access protected + */ + protected $isunicode = false; + + /** + * @var PDF version + * @since 1.5.3 + * @access protected + */ + protected $PDFVersion = '1.7'; + + /** + * @var Minimum distance between header and top page margin. + * @access protected + */ + protected $header_margin; + + /** + * @var Minimum distance between footer and bottom page margin. + * @access protected + */ + protected $footer_margin; + + /** + * @var original left margin value + * @access protected + * @since 1.53.0.TC013 + */ + protected $original_lMargin; + + /** + * @var original right margin value + * @access protected + * @since 1.53.0.TC013 + */ + protected $original_rMargin; + + /** + * @var Header font. + * @access protected + */ + protected $header_font; + + /** + * @var Footer font. + * @access protected + */ + protected $footer_font; + + /** + * @var Language templates. + * @access protected + */ + protected $l; + + /** + * @var Barcode to print on page footer (only if set). + * @access protected + */ + protected $barcode = false; + + /** + * @var If true prints header + * @access protected + */ + protected $print_header = true; + + /** + * @var If true prints footer. + * @access protected + */ + protected $print_footer = true; + + /** + * @var Header image logo. + * @access protected + */ + protected $header_logo = ''; + + /** + * @var Header image logo width in mm. + * @access protected + */ + protected $header_logo_width = 30; + + /** + * @var String to print as title on document header. + * @access protected + */ + protected $header_title = ''; + + /** + * @var String to print on document header. + * @access protected + */ + protected $header_string = ''; + + /** + * @var Default number of columns for html table. + * @access protected + */ + protected $default_table_columns = 4; + + + // variables for html parser + + /** + * @var HTML PARSER: array to store current link and rendering styles. + * @access protected + */ + protected $HREF = array(); + + /** + * @var store a list of available fonts on filesystem. + * @access protected + */ + protected $fontlist = array(); + + /** + * @var current foreground color + * @access protected + */ + protected $fgcolor; + + /** + * @var HTML PARSER: array of boolean values, true in case of ordered list (OL), false otherwise. + * @access protected + */ + protected $listordered = array(); + + /** + * @var HTML PARSER: array count list items on nested lists. + * @access protected + */ + protected $listcount = array(); + + /** + * @var HTML PARSER: current list nesting level. + * @access protected + */ + protected $listnum = 0; + + /** + * @var HTML PARSER: indent amount for lists. + * @access protected + */ + protected $listindent = 0; + + /** + * @var HTML PARSER: current list indententation level. + * @access protected + */ + protected $listindentlevel = 0; + + /** + * @var current background color + * @access protected + */ + protected $bgcolor; + + /** + * @var Store temporary font size in points. + * @access protected + */ + protected $tempfontsize = 10; + + /** + * @var spacer for LI tags. + * @access protected + */ + protected $lispacer = ''; + + /** + * @var default encoding + * @access protected + * @since 1.53.0.TC010 + */ + protected $encoding = 'UTF-8'; + + /** + * @var PHP internal encoding + * @access protected + * @since 1.53.0.TC016 + */ + protected $internal_encoding; + + /** + * @var indicates if the document language is Right-To-Left + * @access protected + * @since 2.0.000 + */ + protected $rtl = false; + + /** + * @var used to force RTL or LTR string inversion + * @access protected + * @since 2.0.000 + */ + protected $tmprtl = false; + + // --- Variables used for document encryption: + + /** + * Indicates whether document is protected + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $encrypted; + + /** + * U entry in pdf document + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $Uvalue; + + /** + * O entry in pdf document + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $Ovalue; + + /** + * P entry in pdf document + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $Pvalue; + + /** + * encryption object id + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $enc_obj_id; + + /** + * last RC4 key encrypted (cached for optimisation) + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $last_rc4_key; + + /** + * last RC4 computed key + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $last_rc4_key_c; + + /** + * RC4 padding + * @access protected + */ + protected $padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A"; + + /** + * RC4 encryption key + * @access protected + */ + protected $encryption_key; + + // --- bookmark --- + + /** + * Outlines for bookmark + * @access protected + * @since 2.1.002 (2008-02-12) + */ + protected $outlines = array(); + + /** + * Outline root for bookmark + * @access protected + * @since 2.1.002 (2008-02-12) + */ + protected $OutlineRoot; + + + // --- javascript and form --- + + /** + * javascript code + * @access protected + * @since 2.1.002 (2008-02-12) + */ + protected $javascript = ''; + + /** + * javascript counter + * @access protected + * @since 2.1.002 (2008-02-12) + */ + protected $n_js; + + /** + * line trough state + * @access protected + * @since 2.8.000 (2008-03-19) + */ + protected $linethrough; + + // --- Variables used for User's Rights --- + // See PDF reference chapter 8.7 Digital Signatures + + /** + * If true enables user's rights on PDF reader + * @access protected + * @since 2.9.000 (2008-03-26) + */ + protected $ur; + + /** + * Names specifying additional document-wide usage rights for the document. + * @access protected + * @since 2.9.000 (2008-03-26) + */ + protected $ur_document; + + /** + * Names specifying additional annotation-related usage rights for the document. + * @access protected + * @since 2.9.000 (2008-03-26) + */ + protected $ur_annots; + + /** + * Names specifying additional form-field-related usage rights for the document. + * @access protected + * @since 2.9.000 (2008-03-26) + */ + protected $ur_form; + + /** + * Names specifying additional signature-related usage rights for the document. + * @access protected + * @since 2.9.000 (2008-03-26) + */ + protected $ur_signature; + + /** + * Dot Per Inch Document Resolution (do not change) + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $dpi = 72; + + /** + * Array of page numbers were a new page group was started + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $newpagegroup = array(); + + /** + * Contains the number of pages of the groups + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $pagegroups; + + /** + * Contains the alias of the current page group + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $currpagegroup; + + /** + * Restrict the rendering of some elements to screen or printout. + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $visibility = 'all'; + + /** + * Print visibility. + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $n_ocg_print; + + /** + * View visibility. + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $n_ocg_view; + + /** + * Array of transparency objects and parameters. + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $extgstates; + + /** + * Set the default JPEG compression quality (1-100) + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $jpeg_quality; + + /** + * Default cell height ratio. + * @access protected + * @since 3.0.014 (2008-05-23) + */ + protected $cell_height_ratio = K_CELL_HEIGHT_RATIO; + + /** + * PDF viewer preferences. + * @access protected + * @since 3.1.000 (2008-06-09) + */ + protected $viewer_preferences; + + /** + * A name object specifying how the document should be displayed when opened. + * @access protected + * @since 3.1.000 (2008-06-09) + */ + protected $PageMode; + + /** + * Array for storing gradient information. + * @access protected + * @since 3.1.000 (2008-06-09) + */ + protected $gradients = array(); + + /** + * Array used to store positions inside the pages buffer. + * keys are the page numbers + * @access protected + * @since 3.2.000 (2008-06-26) + */ + protected $intmrk = array(); + + /** + * Array used to store content positions inside the pages buffer. + * keys are the page numbers + * @access protected + * @since 4.6.021 (2009-07-20) + */ + protected $cntmrk = array(); + + /** + * Array used to store footer positions of each page. + * @access protected + * @since 3.2.000 (2008-07-01) + */ + protected $footerpos = array(); + + + /** + * Array used to store footer length of each page. + * @access protected + * @since 4.0.014 (2008-07-29) + */ + protected $footerlen = array(); + + /** + * True if a newline is created. + * @access protected + * @since 3.2.000 (2008-07-01) + */ + protected $newline = true; + + /** + * End position of the latest inserted line + * @access protected + * @since 3.2.000 (2008-07-01) + */ + protected $endlinex = 0; + + /** + * PDF string for last line width + * @access protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleWidth = ''; + + /** + * PDF string for last line width + * @access protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleCap = '0 J'; + + /** + * PDF string for last line width + * @access protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleJoin = '0 j'; + + /** + * PDF string for last line width + * @access protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleDash = '[] 0 d'; + + /** + * True if marked-content sequence is open + * @access protected + * @since 4.0.013 (2008-07-28) + */ + protected $openMarkedContent = false; + + /** + * Count the latest inserted vertical spaces on HTML + * @access protected + * @since 4.0.021 (2008-08-24) + */ + protected $htmlvspace = 0; + + /** + * Array of Spot colors + * @access protected + * @since 4.0.024 (2008-09-12) + */ + protected $spot_colors = array(); + + /** + * Symbol used for HTML unordered list items + * @access protected + * @since 4.0.028 (2008-09-26) + */ + protected $lisymbol = ''; + + /** + * String used to mark the beginning and end of EPS image blocks + * @access protected + * @since 4.1.000 (2008-10-18) + */ + protected $epsmarker = 'x#!#EPS#!#x'; + + /** + * Array of transformation matrix + * @access protected + * @since 4.2.000 (2008-10-29) + */ + protected $transfmatrix = array(); + + /** + * Current key for transformation matrix + * @access protected + * @since 4.8.005 (2009-09-17) + */ + protected $transfmatrix_key = 0; + + /** + * Booklet mode for double-sided pages + * @access protected + * @since 4.2.000 (2008-10-29) + */ + protected $booklet = false; + + /** + * Epsilon value used for float calculations + * @access protected + * @since 4.2.000 (2008-10-29) + */ + protected $feps = 0.005; + + /** + * Array used for custom vertical spaces for HTML tags + * @access protected + * @since 4.2.001 (2008-10-30) + */ + protected $tagvspaces = array(); + + /** + * @var HTML PARSER: custom indent amount for lists. + * Negative value means disabled. + * @access protected + * @since 4.2.007 (2008-11-12) + */ + protected $customlistindent = -1; + + /** + * @var if true keeps the border open for the cell sides that cross the page. + * @access protected + * @since 4.2.010 (2008-11-14) + */ + protected $opencell = true; + + /** + * @var array of files to embedd + * @access protected + * @since 4.4.000 (2008-12-07) + */ + protected $embeddedfiles = array(); + + /** + * @var boolean true when inside html pre tag + * @access protected + * @since 4.4.001 (2008-12-08) + */ + protected $premode = false; + + /** + * Array used to store positions of graphics transformation blocks inside the page buffer. + * keys are the page numbers + * @access protected + * @since 4.4.002 (2008-12-09) + */ + protected $transfmrk = array(); + + /** + * Default color for html links + * @access protected + * @since 4.4.003 (2008-12-09) + */ + protected $htmlLinkColorArray = array(0, 0, 255); + + /** + * Default font style to add to html links + * @access protected + * @since 4.4.003 (2008-12-09) + */ + protected $htmlLinkFontStyle = 'U'; + + /** + * Counts the number of pages. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected $numpages = 0; + + /** + * Array containing page lengths in bytes. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected $pagelen = array(); + + /** + * Counts the number of pages. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected $numimages = 0; + + /** + * Store the image keys. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected $imagekeys = array(); + + /** + * Length of the buffer in bytes. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected $bufferlen = 0; + + /** + * If true enables disk caching. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected $diskcache = false; + + /** + * Counts the number of fonts. + * @access protected + * @since 4.5.000 (2009-01-02) + */ + protected $numfonts = 0; + + /** + * Store the font keys. + * @access protected + * @since 4.5.000 (2009-01-02) + */ + protected $fontkeys = array(); + + /** + * Store the font object IDs. + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected $font_obj_ids = array(); + + /** + * Store the fage status (true when opened, false when closed). + * @access protected + * @since 4.5.000 (2009-01-02) + */ + protected $pageopen = array(); + + /** + * Default monospaced font + * @access protected + * @since 4.5.025 (2009-03-10) + */ + protected $default_monospaced_font = 'courier'; + + /** + * Used to store a cloned copy of the current class object + * @access protected + * @since 4.5.029 (2009-03-19) + */ + protected $objcopy; + + /** + * Array used to store the lengths of cache files + * @access protected + * @since 4.5.029 (2009-03-19) + */ + protected $cache_file_length = array(); + + /** + * Table header content to be repeated on each new page + * @access protected + * @since 4.5.030 (2009-03-20) + */ + protected $thead = ''; + + /** + * Margins used for table header. + * @access protected + * @since 4.5.030 (2009-03-20) + */ + protected $theadMargins = array(); + + /** + * Cache array for UTF8StringToArray() method. + * @access protected + * @since 4.5.037 (2009-04-07) + */ + protected $cache_UTF8StringToArray = array(); + + /** + * Maximum size of cache array used for UTF8StringToArray() method. + * @access protected + * @since 4.5.037 (2009-04-07) + */ + protected $cache_maxsize_UTF8StringToArray = 8; + + /** + * Current size of cache array used for UTF8StringToArray() method. + * @access protected + * @since 4.5.037 (2009-04-07) + */ + protected $cache_size_UTF8StringToArray = 0; + + /** + * If true enables document signing + * @access protected + * @since 4.6.005 (2009-04-24) + */ + protected $sign = false; + + /** + * Signature data + * @access protected + * @since 4.6.005 (2009-04-24) + */ + protected $signature_data = array(); + + /** + * Signature max length + * @access protected + * @since 4.6.005 (2009-04-24) + */ + protected $signature_max_length = 11742; + + /** + * Regular expression used to find blank characters used for word-wrapping. + * @access protected + * @since 4.6.006 (2009-04-28) + */ + protected $re_spaces = '/[\s]/'; + + /** + * Signature object ID + * @access protected + * @since 4.6.022 (2009-06-23) + */ + protected $sig_obj_id = 0; + + /** + * ByteRange placemark used during signature process. + * @access protected + * @since 4.6.028 (2009-08-25) + */ + protected $byterange_string = '/ByteRange[0 ********** ********** **********]'; + + /** + * Placemark used during signature process. + * @access protected + * @since 4.6.028 (2009-08-25) + */ + protected $sig_annot_ref = '***SIGANNREF*** 0 R'; + + /** + * ID of page objects + * @access protected + * @since 4.7.000 (2009-08-29) + */ + protected $page_obj_id = array(); + + /** + * Start ID for embedded file objects + * @access protected + * @since 4.7.000 (2009-08-29) + */ + protected $embedded_start_obj_id = 100000; + + /** + * Start ID for annotation objects + * @access protected + * @since 4.7.000 (2009-08-29) + */ + protected $annots_start_obj_id = 200000; + + /** + * Max ID of annotation object + * @access protected + * @since 4.7.000 (2009-08-29) + */ + protected $annot_obj_id = 200000; + + /** + * Current ID of annotation object + * @access protected + * @since 4.8.003 (2009-09-15) + */ + protected $curr_annot_obj_id = 200000; + + /** + * List of form annotations IDs + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_obj_id = array(); + + /** + * Deafult Javascript field properties. Possible values are described on official Javascript for Acrobat API reference. Annotation options can be directly specified using the 'aopt' entry. + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128)); + + /** + * Javascript objects array + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $js_objects = array(); + + /** + * Start ID for javascript objects + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $js_start_obj_id = 300000; + + /** + * Current ID of javascript object + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $js_obj_id = 300000; + + /** + * Current form action (used during XHTML rendering) + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_action = ''; + + /** + * Current form encryption type (used during XHTML rendering) + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_enctype = 'application/x-www-form-urlencoded'; + + /** + * Current method to submit forms. + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_mode = 'post'; + + /** + * Start ID for appearance streams XObjects + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected $apxo_start_obj_id = 400000; + + /** + * Current ID of appearance streams XObjects + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected $apxo_obj_id = 400000; + + /** + * List of fonts used on form fields (fontname => fontkey). + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected $annotation_fonts = array(); + + /** + * List of radio buttons parent objects. + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected $radiobutton_groups = array(); + + /** + * List of radio group objects IDs + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected $radio_groups = array(); + + /** + * Text indentation value (used for text-indent CSS attribute) + * @access protected + * @since 4.8.006 (2009-09-23) + */ + protected $textindent = 0; + + /** + * Store page number when startTransaction() is called. + * @access protected + * @since 4.8.006 (2009-09-23) + */ + protected $start_transaction_page = 0; + + /** + * Store Y position when startTransaction() is called. + * @access protected + * @since 4.9.001 (2010-03-28) + */ + protected $start_transaction_y = 0; + + /** + * True when we are printing the thead section on a new page + * @access protected + * @since 4.8.027 (2010-01-25) + */ + protected $inthead = false; + + /** + * Array of column measures (width, space, starting Y position) + * @access protected + * @since 4.9.001 (2010-03-28) + */ + protected $columns = array(); + + /** + * Number of colums + * @access protected + * @since 4.9.001 (2010-03-28) + */ + protected $num_columns = 0; + + /** + * Current column number + * @access protected + * @since 4.9.001 (2010-03-28) + */ + protected $current_column = 0; + + /** + * Starting page for columns + * @access protected + * @since 4.9.001 (2010-03-28) + */ + protected $column_start_page = 0; + + /** + * Text rendering mode: 0 = Fill text; 1 = Stroke text; 2 = Fill, then stroke text; 3 = Neither fill nor stroke text (invisible); 4 = Fill text and add to path for clipping; 5 = Stroke text and add to path for clipping; 6 = Fill, then stroke text and add to path for clipping; 7 = Add text to path for clipping. + * @access protected + * @since 4.9.008 (2010-04-03) + */ + protected $textrendermode = 0; + + /** + * Text stroke width in doc units + * @access protected + * @since 4.9.008 (2010-04-03) + */ + protected $textstrokewidth = 0; + + /** + * @var current stroke color + * @access protected + * @since 4.9.008 (2010-04-03) + */ + protected $strokecolor; + + /** + * @var default unit of measure for document + * @access protected + * @since 5.0.000 (2010-04-22) + */ + protected $pdfunit = 'mm'; + + /** + * @var true when we are on TOC (Table Of Content) page + * @access protected + */ + protected $tocpage = false; + + /** + * @var If true convert vector images (SVG, EPS) to raster image using GD or ImageMagick library. + * @access protected + * @since 5.0.000 (2010-04-26) + */ + protected $rasterize_vector_images = false; + + /** + * @var directory used for the last SVG image + * @access protected + * @since 5.0.000 (2010-05-05) + */ + protected $svgdir = ''; + + /** + * @var Deafult unit of measure for SVG + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgunit = 'px'; + + /** + * @var array of SVG gradients + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svggradients = array(); + + /** + * @var ID of last SVG gradient + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svggradientid = 0; + + /** + * @var true when in SVG defs group + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgdefsmode = false; + + /** + * @var array of SVG defs + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgdefs = array(); + + /** + * @var true when in SVG clipPath tag + * @access protected + * @since 5.0.000 (2010-04-26) + */ + protected $svgclipmode = false; + + /** + * @var array of SVG clipPath commands + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgclippaths = array(); + + /** + * @var ID of last SVG clipPath + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgclipid = 0; + + /** + * @var svg text + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgtext = ''; + + /** + * @var array of hinheritable SVG properties + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svginheritprop = array('clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cursor', 'direction', 'fill', 'fill-opacity', 'fill-rule', 'font', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'image-rendering', 'kerning', 'letter-spacing', 'marker', 'marker-end', 'marker-mid', 'marker-start', 'pointer-events', 'shape-rendering', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-rendering', 'visibility', 'word-spacing', 'writing-mode'); + + /** + * @var array of SVG properties + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgstyles = array(array( + 'alignment-baseline' => 'auto', + 'baseline-shift' => 'baseline', + 'clip' => 'auto', + 'clip-path' => 'none', + 'clip-rule' => 'nonzero', + 'color' => 'black', + 'color-interpolation' => 'sRGB', + 'color-interpolation-filters' => 'linearRGB', + 'color-profile' => 'auto', + 'color-rendering' => 'auto', + 'cursor' => 'auto', + 'direction' => 'ltr', + 'display' => 'inline', + 'dominant-baseline' => 'auto', + 'enable-background' => 'accumulate', + 'fill' => 'black', + 'fill-opacity' => 1, + 'fill-rule' => 'nonzero', + 'filter' => 'none', + 'flood-color' => 'black', + 'flood-opacity' => 1, + 'font' => '', + 'font-family' => 'helvetica', + 'font-size' => 'medium', + 'font-size-adjust' => 'none', + 'font-stretch' => 'normal', + 'font-style' => 'normal', + 'font-variant' => 'normal', + 'font-weight' => 'normal', + 'glyph-orientation-horizontal' => '0deg', + 'glyph-orientation-vertical' => 'auto', + 'image-rendering' => 'auto', + 'kerning' => 'auto', + 'letter-spacing' => 'normal', + 'lighting-color' => 'white', + 'marker' => '', + 'marker-end' => 'none', + 'marker-mid' => 'none', + 'marker-start' => 'none', + 'mask' => 'none', + 'opacity' => 1, + 'overflow' => 'auto', + 'pointer-events' => 'visiblePainted', + 'shape-rendering' => 'auto', + 'stop-color' => 'black', + 'stop-opacity' => 1, + 'stroke' => 'none', + 'stroke-dasharray' => 'none', + 'stroke-dashoffset' => 0, + 'stroke-linecap' => 'butt', + 'stroke-linejoin' => 'miter', + 'stroke-miterlimit' => 4, + 'stroke-opacity' => 1, + 'stroke-width' => 1, + 'text-anchor' => 'start', + 'text-decoration' => 'none', + 'text-rendering' => 'auto', + 'unicode-bidi' => 'normal', + 'visibility' => 'visible', + 'word-spacing' => 'normal', + 'writing-mode' => 'lr-tb', + 'text-color' => 'black', + 'transfmatrix' => array(1, 0, 0, 1, 0, 0) + )); + + //------------------------------------------------------------ + // METHODS + //------------------------------------------------------------ + + /** + * This is the class constructor. + * It allows to set up the page format, the orientation and + * the measure unit used in all the methods (except for the font sizes). + * @since 1.0 + * @param string $orientation page orientation. Possible values are (case insensitive):
    • P or Portrait (default)
    • L or Landscape
    + * @param string $unit User measure unit. Possible values are:
    • pt: point
    • mm: millimeter (default)
    • cm: centimeter
    • in: inch

    A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. + * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).
    • 4A0
    • 2A0
    • A0
    • A1
    • A2
    • A3
    • A4 (default)
    • A5
    • A6
    • A7
    • A8
    • A9
    • A10
    • B0
    • B1
    • B2
    • B3
    • B4
    • B5
    • B6
    • B7
    • B8
    • B9
    • B10
    • C0
    • C1
    • C2
    • C3
    • C4
    • C5
    • C6
    • C7
    • C8
    • C9
    • C10
    • RA0
    • RA1
    • RA2
    • RA3
    • RA4
    • SRA0
    • SRA1
    • SRA2
    • SRA3
    • SRA4
    • LETTER
    • LEGAL
    • EXECUTIVE
    • FOLIO
    + * @param boolean $unicode TRUE means that the input text is unicode (default = true) + * @param boolean $diskcache if TRUE reduce the RAM memory usage by caching temporary data on filesystem (slower). + * @param String $encoding charset encoding; default is UTF-8 + * @access public + */ + public function __construct($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8', $diskcache=false) { + /* Set internal character encoding to ASCII */ + if (function_exists('mb_internal_encoding') AND mb_internal_encoding()) { + $this->internal_encoding = mb_internal_encoding(); + mb_internal_encoding('ASCII'); + } + // set disk caching + $this->diskcache = $diskcache ? true : false; + // set language direction + $this->rtl = false; + $this->tmprtl = false; + //Some checks + $this->_dochecks(); + //Initialization of properties + $this->isunicode = $unicode; + $this->page = 0; + $this->transfmrk[0] = array(); + $this->pagedim = array(); + $this->n = 2; + $this->buffer = ''; + $this->pages = array(); + $this->state = 0; + $this->fonts = array(); + $this->FontFiles = array(); + $this->diffs = array(); + $this->images = array(); + $this->links = array(); + $this->gradients = array(); + $this->InFooter = false; + $this->lasth = 0; + $this->FontFamily = 'helvetica'; + $this->FontStyle = ''; + $this->FontSizePt = 12; + $this->underline = false; + $this->overline = false; + $this->linethrough = false; + $this->DrawColor = '0 G'; + $this->FillColor = '0 g'; + $this->TextColor = '0 g'; + $this->ColorFlag = false; + // encryption values + $this->encrypted = false; + $this->last_rc4_key = ''; + $this->padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A"; + //Standard Unicode fonts + $this->CoreFonts = array( + 'courier'=>'Courier', + 'courierB'=>'Courier-Bold', + 'courierI'=>'Courier-Oblique', + 'courierBI'=>'Courier-BoldOblique', + 'helvetica'=>'Helvetica', + 'helveticaB'=>'Helvetica-Bold', + 'helveticaI'=>'Helvetica-Oblique', + 'helveticaBI'=>'Helvetica-BoldOblique', + 'times'=>'Times-Roman', + 'timesB'=>'Times-Bold', + 'timesI'=>'Times-Italic', + 'timesBI'=>'Times-BoldItalic', + 'symbol'=>'Symbol', + 'zapfdingbats'=>'ZapfDingbats' + ); + //Set scale factor + $this->setPageUnit($unit); + // set page format and orientation + $this->setPageFormat($format, $orientation); + //Page margins (1 cm) + $margin = 28.35 / $this->k; + $this->SetMargins($margin, $margin); + //Interior cell margin + $this->cMargin = $margin / 10; + //Line width (0.2 mm) + $this->LineWidth = 0.57 / $this->k; + $this->linestyleWidth = sprintf('%.2F w', ($this->LineWidth * $this->k)); + $this->linestyleCap = '0 J'; + $this->linestyleJoin = '0 j'; + $this->linestyleDash = '[] 0 d'; + //Automatic page break + $this->SetAutoPageBreak(true, (2 * $margin)); + //Full width display mode + $this->SetDisplayMode('fullwidth'); + //Compression + $this->SetCompression(true); + //Set default PDF version number + $this->PDFVersion = '1.7'; + $this->encoding = $encoding; + $this->HREF = array(); + $this->getFontsList(); + $this->fgcolor = array('R' => 0, 'G' => 0, 'B' => 0); + $this->strokecolor = array('R' => 0, 'G' => 0, 'B' => 0); + $this->bgcolor = array('R' => 255, 'G' => 255, 'B' => 255); + $this->extgstates = array(); + // user's rights + $this->sign = false; + $this->ur = false; + $this->ur_document = '/FullSave'; + $this->ur_annots = '/Create/Delete/Modify/Copy/Import/Export'; + $this->ur_form = '/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate'; + $this->ur_signature = '/Modify'; + // set default JPEG quality + $this->jpeg_quality = 75; + // initialize some settings + $this->utf8Bidi(array(''), ''); + // set default font + $this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt); + // check if PCRE Unicode support is enabled + if ($this->isunicode AND (@preg_match('/\pL/u', 'a') == 1)) { + // PCRE unicode support is turned ON + // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator. + // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants. + // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between. + //$this->re_spaces = '/[\s\p{Z}\p{Lo}]/u'; + $this->re_spaces = '/[\s\p{Z}]/u'; + } else { + // PCRE unicode support is turned OFF + $this->re_spaces = '/[\s]/'; + } + $this->annot_obj_id = $this->annots_start_obj_id; + $this->curr_annot_obj_id = $this->annots_start_obj_id; + $this->apxo_obj_id = $this->apxo_start_obj_id; + $this->js_obj_id = $this->js_start_obj_id; + $this->default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128)); + } + + /** + * Default destructor. + * @access public + * @since 1.53.0.TC016 + */ + public function __destruct() { + // restore internal encoding + if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) { + mb_internal_encoding($this->internal_encoding); + } + // unset all class variables + $this->_destroy(true); + } + + /** + * Set the units of measure for the document. + * @param string $unit User measure unit. Possible values are:
    • pt: point
    • mm: millimeter (default)
    • cm: centimeter
    • in: inch

    A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. + * @access public + * @since 3.0.015 (2008-06-06) + */ + public function setPageUnit($unit) { + $unit = strtolower($unit); + //Set scale factor + switch ($unit) { + // points + case 'px': + case 'pt': { + $this->k = 1; + break; + } + // millimeters + case 'mm': { + $this->k = $this->dpi / 25.4; + break; + } + // centimeters + case 'cm': { + $this->k = $this->dpi / 2.54; + break; + } + // inches + case 'in': { + $this->k = $this->dpi; + break; + } + // unsupported unit + default : { + $this->Error('Incorrect unit: '.$unit); + break; + } + } + $this->pdfunit = $unit; + if (isset($this->CurOrientation)) { + $this->setPageOrientation($this->CurOrientation); + } + } + + /** + * Set the page format + * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).
    • 4A0
    • 2A0
    • A0
    • A1
    • A2
    • A3
    • A4 (default)
    • A5
    • A6
    • A7
    • A8
    • A9
    • A10
    • B0
    • B1
    • B2
    • B3
    • B4
    • B5
    • B6
    • B7
    • B8
    • B9
    • B10
    • C0
    • C1
    • C2
    • C3
    • C4
    • C5
    • C6
    • C7
    • C8
    • C9
    • C10
    • RA0
    • RA1
    • RA2
    • RA3
    • RA4
    • SRA0
    • SRA1
    • SRA2
    • SRA3
    • SRA4
    • LETTER
    • LEGAL
    • EXECUTIVE
    • FOLIO
    + * @param string $orientation page orientation. Possible values are (case insensitive):
    • P or PORTRAIT (default)
    • L or LANDSCAPE
    + * @access public + * @since 3.0.015 (2008-06-06) + */ + public function setPageFormat($format, $orientation='P') { + //Page format + if (is_string($format)) { + // Page formats (45 standard ISO paper formats and 4 american common formats). + // Paper cordinates are calculated in this way: (inches * 72) where (1 inch = 2.54 cm) + switch (strtoupper($format)) { + case '4A0': {$format = array(4767.87,6740.79); break;} + case '2A0': {$format = array(3370.39,4767.87); break;} + case 'A0': {$format = array(2383.94,3370.39); break;} + case 'A1': {$format = array(1683.78,2383.94); break;} + case 'A2': {$format = array(1190.55,1683.78); break;} + case 'A3': {$format = array(841.89,1190.55); break;} + case 'A4': default: {$format = array(595.28,841.89); break;} + case 'A5': {$format = array(419.53,595.28); break;} + case 'A6': {$format = array(297.64,419.53); break;} + case 'A7': {$format = array(209.76,297.64); break;} + case 'A8': {$format = array(147.40,209.76); break;} + case 'A9': {$format = array(104.88,147.40); break;} + case 'A10': {$format = array(73.70,104.88); break;} + case 'B0': {$format = array(2834.65,4008.19); break;} + case 'B1': {$format = array(2004.09,2834.65); break;} + case 'B2': {$format = array(1417.32,2004.09); break;} + case 'B3': {$format = array(1000.63,1417.32); break;} + case 'B4': {$format = array(708.66,1000.63); break;} + case 'B5': {$format = array(498.90,708.66); break;} + case 'B6': {$format = array(354.33,498.90); break;} + case 'B7': {$format = array(249.45,354.33); break;} + case 'B8': {$format = array(175.75,249.45); break;} + case 'B9': {$format = array(124.72,175.75); break;} + case 'B10': {$format = array(87.87,124.72); break;} + case 'C0': {$format = array(2599.37,3676.54); break;} + case 'C1': {$format = array(1836.85,2599.37); break;} + case 'C2': {$format = array(1298.27,1836.85); break;} + case 'C3': {$format = array(918.43,1298.27); break;} + case 'C4': {$format = array(649.13,918.43); break;} + case 'C5': {$format = array(459.21,649.13); break;} + case 'C6': {$format = array(323.15,459.21); break;} + case 'C7': {$format = array(229.61,323.15); break;} + case 'C8': {$format = array(161.57,229.61); break;} + case 'C9': {$format = array(113.39,161.57); break;} + case 'C10': {$format = array(79.37,113.39); break;} + case 'RA0': {$format = array(2437.80,3458.27); break;} + case 'RA1': {$format = array(1729.13,2437.80); break;} + case 'RA2': {$format = array(1218.90,1729.13); break;} + case 'RA3': {$format = array(864.57,1218.90); break;} + case 'RA4': {$format = array(609.45,864.57); break;} + case 'SRA0': {$format = array(2551.18,3628.35); break;} + case 'SRA1': {$format = array(1814.17,2551.18); break;} + case 'SRA2': {$format = array(1275.59,1814.17); break;} + case 'SRA3': {$format = array(907.09,1275.59); break;} + case 'SRA4': {$format = array(637.80,907.09); break;} + case 'LETTER': {$format = array(612.00,792.00); break;} + case 'LEGAL': {$format = array(612.00,1008.00); break;} + case 'EXECUTIVE': {$format = array(521.86,756.00); break;} + case 'FOLIO': {$format = array(612.00,936.00); break;} + } + $this->fwPt = $format[0]; + $this->fhPt = $format[1]; + } else { + $this->fwPt = $format[0] * $this->k; + $this->fhPt = $format[1] * $this->k; + } + $this->setPageOrientation($orientation); + } + + /** + * Set page orientation. + * @param string $orientation page orientation. Possible values are (case insensitive):
    • P or PORTRAIT (default)
    • L or LANDSCAPE
    + * @param boolean $autopagebreak Boolean indicating if auto-page-break mode should be on or off. + * @param float $bottommargin bottom margin of the page. + * @access public + * @since 3.0.015 (2008-06-06) + */ + public function setPageOrientation($orientation, $autopagebreak='', $bottommargin='') { + if ($this->fwPt > $this->fhPt) { + // landscape + $default_orientation = 'L'; + } else { + // portrait + $default_orientation = 'P'; + } + $valid_orientations = array('P', 'L'); + if (empty($orientation)) { + $orientation = $default_orientation; + } else { + $orientation = $orientation[0]; + $orientation = strtoupper($orientation); + } + if (in_array($orientation, $valid_orientations) AND ($orientation != $default_orientation)) { + $this->CurOrientation = $orientation; + $this->wPt = $this->fhPt; + $this->hPt = $this->fwPt; + } else { + $this->CurOrientation = $default_orientation; + $this->wPt = $this->fwPt; + $this->hPt = $this->fhPt; + } + $this->w = $this->wPt / $this->k; + $this->h = $this->hPt / $this->k; + if ($this->empty_string($autopagebreak)) { + if (isset($this->AutoPageBreak)) { + $autopagebreak = $this->AutoPageBreak; + } else { + $autopagebreak = true; + } + } + if ($this->empty_string($bottommargin)) { + if (isset($this->bMargin)) { + $bottommargin = $this->bMargin; + } else { + // default value = 2 cm + $bottommargin = 2 * 28.35 / $this->k; + } + } + $this->SetAutoPageBreak($autopagebreak, $bottommargin); + // store page dimensions + $this->pagedim[$this->page] = array('w' => $this->wPt, 'h' => $this->hPt, 'wk' => $this->w, 'hk' => $this->h, 'tm' => $this->tMargin, 'bm' => $bottommargin, 'lm' => $this->lMargin, 'rm' => $this->rMargin, 'pb' => $autopagebreak, 'or' => $this->CurOrientation, 'olm' => $this->original_lMargin, 'orm' => $this->original_rMargin); + } + + /** + * Set regular expression to detect withespaces or word separators. + * @param string $re regular expression (leave empty for default). + * @access public + * @since 4.6.016 (2009-06-15) + */ + public function setSpacesRE($re='/[\s]/') { + // if PCRE unicode support is turned ON: + // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator. + // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants. + // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between. + $this->re_spaces = $re; + } + + /** + * Enable or disable Right-To-Left language mode + * @param Boolean $enable if true enable Right-To-Left language mode. + * @param Boolean $resetx if true reset the X position on direction change. + * @access public + * @since 2.0.000 (2008-01-03) + */ + public function setRTL($enable, $resetx=true) { + $enable = $enable ? true : false; + $resetx = ($resetx AND ($enable != $this->rtl)); + $this->rtl = $enable; + $this->tmprtl = false; + if ($resetx) { + $this->Ln(0); + } + } + + /** + * Return the RTL status + * @return boolean + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getRTL() { + return $this->rtl; + } + + /** + * Force temporary RTL language direction + * @param mixed $mode can be false, 'L' for LTR or 'R' for RTL + * @access public + * @since 2.1.000 (2008-01-09) + */ + public function setTempRTL($mode) { + $newmode = false; + switch ($mode) { + case 'ltr': + case 'LTR': + case 'L': { + if ($this->rtl) { + $newmode = 'L'; + } + break; + } + case 'rtl': + case 'RTL': + case 'R': { + if (!$this->rtl) { + $newmode = 'R'; + } + break; + } + case false: + default: { + $newmode = false; + break; + } + } + $this->tmprtl = $newmode; + } + + /** + * Return the current temporary RTL status + * @return boolean + * @access public + * @since 4.8.014 (2009-11-04) + */ + public function isRTLTextDir() { + return ($this->rtl OR ($this->tmprtl == 'R')); + } + + /** + * Set the last cell height. + * @param float $h cell height. + * @author Nicola Asuni + * @access public + * @since 1.53.0.TC034 + */ + public function setLastH($h) { + $this->lasth = $h; + } + + /** + * Get the last cell height. + * @return last cell height + * @access public + * @since 4.0.017 (2008-08-05) + */ + public function getLastH() { + return $this->lasth; + } + + /** + * Set the adjusting factor to convert pixels to user units. + * @param float $scale adjusting factor to convert pixels to user units. + * @author Nicola Asuni + * @access public + * @since 1.5.2 + */ + public function setImageScale($scale) { + $this->imgscale = $scale; + } + + /** + * Returns the adjusting factor to convert pixels to user units. + * @return float adjusting factor to convert pixels to user units. + * @author Nicola Asuni + * @access public + * @since 1.5.2 + */ + public function getImageScale() { + return $this->imgscale; + } + + /** + * Returns an array of page dimensions: + *
    • $this->pagedim[$this->page]['w'] => page_width_in_points
    • $this->pagedim[$this->page]['h'] => height in points
    • $this->pagedim[$this->page]['wk'] => page_width_in_points
    • $this->pagedim[$this->page]['hk'] => height
    • $this->pagedim[$this->page]['tm'] => top_margin
    • $this->pagedim[$this->page]['bm'] => bottom_margin
    • $this->pagedim[$this->page]['lm'] => left_margin
    • $this->pagedim[$this->page]['rm'] => right_margin
    • $this->pagedim[$this->page]['pb'] => auto_page_break
    • $this->pagedim[$this->page]['or'] => page_orientation
    • $this->pagedim[$this->page]['olm'] => original_left_margin
    • $this->pagedim[$this->page]['orm'] => original_right_margin
    + * @param int $pagenum page number (empty = current page) + * @return array of page dimensions. + * @author Nicola Asuni + * @access public + * @since 4.5.027 (2009-03-16) + */ + public function getPageDimensions($pagenum='') { + if (empty($pagenum)) { + $pagenum = $this->page; + } + return $this->pagedim[$pagenum]; + } + + /** + * Returns the page width in units. + * @param int $pagenum page number (empty = current page) + * @return int page width. + * @author Nicola Asuni + * @access public + * @since 1.5.2 + * @see getPageDimensions() + */ + public function getPageWidth($pagenum='') { + if (empty($pagenum)) { + return $this->w; + } + return $this->pagedim[$pagenum]['w']; + } + + /** + * Returns the page height in units. + * @param int $pagenum page number (empty = current page) + * @return int page height. + * @author Nicola Asuni + * @access public + * @since 1.5.2 + * @see getPageDimensions() + */ + public function getPageHeight($pagenum='') { + if (empty($pagenum)) { + return $this->h; + } + return $this->pagedim[$pagenum]['h']; + } + + /** + * Returns the page break margin. + * @param int $pagenum page number (empty = current page) + * @return int page break margin. + * @author Nicola Asuni + * @access public + * @since 1.5.2 + * @see getPageDimensions() + */ + public function getBreakMargin($pagenum='') { + if (empty($pagenum)) { + return $this->bMargin; + } + return $this->pagedim[$pagenum]['bm']; + } + + /** + * Returns the scale factor (number of points in user unit). + * @return int scale factor. + * @author Nicola Asuni + * @access public + * @since 1.5.2 + */ + public function getScaleFactor() { + return $this->k; + } + + /** + * Defines the left, top and right margins. + * @param float $left Left margin. + * @param float $top Top margin. + * @param float $right Right margin. Default value is the left one. + * @param boolean $keepmargins if true overwrites the default page margins + * @access public + * @since 1.0 + * @see SetLeftMargin(), SetTopMargin(), SetRightMargin(), SetAutoPageBreak() + */ + public function SetMargins($left, $top, $right=-1, $keepmargins=false) { + //Set left, top and right margins + $this->lMargin = $left; + $this->tMargin = $top; + if ($right == -1) { + $right = $left; + } + $this->rMargin = $right; + if ($keepmargins) { + // overwrite original values + $this->original_lMargin = $this->lMargin; + $this->original_rMargin = $this->rMargin; + } + } + + /** + * Defines the left margin. The method can be called before creating the first page. If the current abscissa gets out of page, it is brought back to the margin. + * @param float $margin The margin. + * @access public + * @since 1.4 + * @see SetTopMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins() + */ + public function SetLeftMargin($margin) { + //Set left margin + $this->lMargin=$margin; + if (($this->page > 0) AND ($this->x < $margin)) { + $this->x = $margin; + } + } + + /** + * Defines the top margin. The method can be called before creating the first page. + * @param float $margin The margin. + * @access public + * @since 1.5 + * @see SetLeftMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins() + */ + public function SetTopMargin($margin) { + //Set top margin + $this->tMargin=$margin; + if (($this->page > 0) AND ($this->y < $margin)) { + $this->y = $margin; + } + } + + /** + * Defines the right margin. The method can be called before creating the first page. + * @param float $margin The margin. + * @access public + * @since 1.5 + * @see SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins() + */ + public function SetRightMargin($margin) { + $this->rMargin=$margin; + if (($this->page > 0) AND ($this->x > ($this->w - $margin))) { + $this->x = $this->w - $margin; + } + } + + /** + * Set the internal Cell padding. + * @param float $pad internal padding. + * @access public + * @since 2.1.000 (2008-01-09) + * @see Cell(), SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins() + */ + public function SetCellPadding($pad) { + $this->cMargin = $pad; + } + + /** + * Enables or disables the automatic page breaking mode. When enabling, the second parameter is the distance from the bottom of the page that defines the triggering limit. By default, the mode is on and the margin is 2 cm. + * @param boolean $auto Boolean indicating if mode should be on or off. + * @param float $margin Distance from the bottom of the page. + * @access public + * @since 1.0 + * @see Cell(), MultiCell(), AcceptPageBreak() + */ + public function SetAutoPageBreak($auto, $margin=0) { + //Set auto page break mode and triggering margin + $this->AutoPageBreak = $auto; + $this->bMargin = $margin; + $this->PageBreakTrigger = $this->h - $margin; + } + + /** + * Defines the way the document is to be displayed by the viewer. + * @param mixed $zoom The zoom to use. It can be one of the following string values or a number indicating the zooming factor to use.
    • fullpage: displays the entire page on screen
    • fullwidth: uses maximum width of window
    • real: uses real size (equivalent to 100% zoom)
    • default: uses viewer default mode
    + * @param string $layout The page layout. Possible values are:
    • SinglePage Display one page at a time
    • OneColumn Display the pages in one column
    • TwoColumnLeft Display the pages in two columns, with odd-numbered pages on the left
    • TwoColumnRight Display the pages in two columns, with odd-numbered pages on the right
    • TwoPageLeft (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the left
    • TwoPageRight (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the right
    + * @param string $mode A name object specifying how the document should be displayed when opened:
    • UseNone Neither document outline nor thumbnail images visible
    • UseOutlines Document outline visible
    • UseThumbs Thumbnail images visible
    • FullScreen Full-screen mode, with no menu bar, window controls, or any other window visible
    • UseOC (PDF 1.5) Optional content group panel visible
    • UseAttachments (PDF 1.6) Attachments panel visible
    + * @access public + * @since 1.2 + */ + public function SetDisplayMode($zoom, $layout='SinglePage', $mode='UseNone') { + //Set display mode in viewer + if (($zoom == 'fullpage') OR ($zoom == 'fullwidth') OR ($zoom == 'real') OR ($zoom == 'default') OR (!is_string($zoom))) { + $this->ZoomMode = $zoom; + } else { + $this->Error('Incorrect zoom display mode: '.$zoom); + } + switch ($layout) { + case 'default': + case 'single': + case 'SinglePage': { + $this->LayoutMode = 'SinglePage'; + break; + } + case 'continuous': + case 'OneColumn': { + $this->LayoutMode = 'OneColumn'; + break; + } + case 'two': + case 'TwoColumnLeft': { + $this->LayoutMode = 'TwoColumnLeft'; + break; + } + case 'TwoColumnRight': { + $this->LayoutMode = 'TwoColumnRight'; + break; + } + case 'TwoPageLeft': { + $this->LayoutMode = 'TwoPageLeft'; + break; + } + case 'TwoPageRight': { + $this->LayoutMode = 'TwoPageRight'; + break; + } + default: { + $this->LayoutMode = 'SinglePage'; + } + } + switch ($mode) { + case 'UseNone': { + $this->PageMode = 'UseNone'; + break; + } + case 'UseOutlines': { + $this->PageMode = 'UseOutlines'; + break; + } + case 'UseThumbs': { + $this->PageMode = 'UseThumbs'; + break; + } + case 'FullScreen': { + $this->PageMode = 'FullScreen'; + break; + } + case 'UseOC': { + $this->PageMode = 'UseOC'; + break; + } + case '': { + $this->PageMode = 'UseAttachments'; + break; + } + default: { + $this->PageMode = 'UseNone'; + } + } + } + + /** + * Activates or deactivates page compression. When activated, the internal representation of each page is compressed, which leads to a compression ratio of about 2 for the resulting document. Compression is on by default. + * Note: the Zlib extension is required for this feature. If not present, compression will be turned off. + * @param boolean $compress Boolean indicating if compression must be enabled. + * @access public + * @since 1.4 + */ + public function SetCompression($compress) { + //Set page compression + if (function_exists('gzcompress')) { + $this->compress = $compress; + } else { + $this->compress = false; + } + } + + /** + * Defines the title of the document. + * @param string $title The title. + * @access public + * @since 1.2 + * @see SetAuthor(), SetCreator(), SetKeywords(), SetSubject() + */ + public function SetTitle($title) { + //Title of document + $this->title = $title; + } + + /** + * Defines the subject of the document. + * @param string $subject The subject. + * @access public + * @since 1.2 + * @see SetAuthor(), SetCreator(), SetKeywords(), SetTitle() + */ + public function SetSubject($subject) { + //Subject of document + $this->subject = $subject; + } + + /** + * Defines the author of the document. + * @param string $author The name of the author. + * @access public + * @since 1.2 + * @see SetCreator(), SetKeywords(), SetSubject(), SetTitle() + */ + public function SetAuthor($author) { + //Author of document + $this->author = $author; + } + + /** + * Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'. + * @param string $keywords The list of keywords. + * @access public + * @since 1.2 + * @see SetAuthor(), SetCreator(), SetSubject(), SetTitle() + */ + public function SetKeywords($keywords) { + //Keywords of document + $this->keywords = $keywords; + } + + /** + * Defines the creator of the document. This is typically the name of the application that generates the PDF. + * @param string $creator The name of the creator. + * @access public + * @since 1.2 + * @see SetAuthor(), SetKeywords(), SetSubject(), SetTitle() + */ + public function SetCreator($creator) { + //Creator of document + $this->creator = $creator; + } + + /** + * This method is automatically called in case of fatal error; it simply outputs the message and halts the execution. An inherited class may override it to customize the error handling but should always halt the script, or the resulting document would probably be invalid. + * 2004-06-11 :: Nicola Asuni : changed bold tag with strong + * @param string $msg The error message + * @access public + * @since 1.0 + */ + public function Error($msg) { + // unset all class variables + $this->_destroy(true); + // exit program and print error + die('TCPDF ERROR: '.$msg); + } + + /** + * This method begins the generation of the PDF document. + * It is not necessary to call it explicitly because AddPage() does it automatically. + * Note: no page is created by this method + * @access public + * @since 1.0 + * @see AddPage(), Close() + */ + public function Open() { + //Begin document + $this->state = 1; + } + + /** + * Terminates the PDF document. + * It is not necessary to call this method explicitly because Output() does it automatically. + * If the document contains no page, AddPage() is called to prevent from getting an invalid document. + * @access public + * @since 1.0 + * @see Open(), Output() + */ + public function Close() { + if ($this->state == 3) { + return; + } + if ($this->page == 0) { + $this->AddPage(); + } + // close page + $this->endPage(); + // close document + $this->_enddoc(); + // unset all class variables (except critical ones) + $this->_destroy(false); + } + + /** + * Move pointer at the specified document page and update page dimensions. + * @param int $pnum page number (1 ... numpages) + * @param boolean $resetmargins if true reset left, right, top margins and Y position. + * @access public + * @since 2.1.000 (2008-01-07) + * @see getPage(), lastpage(), getNumPages() + */ + public function setPage($pnum, $resetmargins=false) { + if ($pnum == $this->page) { + return; + } + if (($pnum > 0) AND ($pnum <= $this->numpages)) { + $this->state = 2; + // save current graphic settings + //$gvars = $this->getGraphicVars(); + $oldpage = $this->page; + $this->page = $pnum; + $this->wPt = $this->pagedim[$this->page]['w']; + $this->hPt = $this->pagedim[$this->page]['h']; + $this->w = $this->wPt / $this->k; + $this->h = $this->hPt / $this->k; + $this->tMargin = $this->pagedim[$this->page]['tm']; + $this->bMargin = $this->pagedim[$this->page]['bm']; + $this->original_lMargin = $this->pagedim[$this->page]['olm']; + $this->original_rMargin = $this->pagedim[$this->page]['orm']; + $this->AutoPageBreak = $this->pagedim[$this->page]['pb']; + $this->CurOrientation = $this->pagedim[$this->page]['or']; + $this->SetAutoPageBreak($this->AutoPageBreak, $this->bMargin); + // restore graphic settings + //$this->setGraphicVars($gvars); + if ($resetmargins) { + $this->lMargin = $this->pagedim[$this->page]['olm']; + $this->rMargin = $this->pagedim[$this->page]['orm']; + $this->SetY($this->tMargin); + } else { + // account for booklet mode + if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) { + $deltam = $this->pagedim[$this->page]['olm'] - $this->pagedim[$this->page]['orm']; + $this->lMargin += $deltam; + $this->rMargin -= $deltam; + } + } + } else { + $this->Error('Wrong page number on setPage() function.'); + } + } + + /** + * Reset pointer to the last document page. + * @param boolean $resetmargins if true reset left, right, top margins and Y position. + * @access public + * @since 2.0.000 (2008-01-04) + * @see setPage(), getPage(), getNumPages() + */ + public function lastPage($resetmargins=false) { + $this->setPage($this->getNumPages(), $resetmargins); + } + + /** + * Get current document page number. + * @return int page number + * @access public + * @since 2.1.000 (2008-01-07) + * @see setPage(), lastpage(), getNumPages() + */ + public function getPage() { + return $this->page; + } + + + /** + * Get the total number of insered pages. + * @return int number of pages + * @access public + * @since 2.1.000 (2008-01-07) + * @see setPage(), getPage(), lastpage() + */ + public function getNumPages() { + return $this->numpages; + } + + /** + * Adds a new TOC (Table Of Content) page to the document. + * @param string $orientation page orientation. + * @param boolean $keepmargins if true overwrites the default page margins with the current margins + * @access public + * @since 5.0.001 (2010-05-06) + * @see AddPage(), startPage(), endPage(), endTOCPage() + */ + public function addTOCPage($orientation='', $format='', $keepmargins=false) { + $this->AddPage($orientation, $format, $keepmargins, true); + } + + /** + * Terminate the current TOC (Table Of Content) page + * @access public + * @since 5.0.001 (2010-05-06) + * @see AddPage(), startPage(), endPage(), addTOCPage() + */ + public function endTOCPage() { + $this->endPage(true); + } + + /** + * Adds a new page to the document. If a page is already present, the Footer() method is called first to output the footer (if enabled). Then the page is added, the current position set to the top-left corner according to the left and top margins (or top-right if in RTL mode), and Header() is called to display the header (if enabled). + * The origin of the coordinate system is at the top-left corner (or top-right for RTL) and increasing ordinates go downwards. + * @param string $orientation page orientation. Possible values are (case insensitive):
    • P or PORTRAIT (default)
    • L or LANDSCAPE
    + * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).
    • 4A0
    • 2A0
    • A0
    • A1
    • A2
    • A3
    • A4 (default)
    • A5
    • A6
    • A7
    • A8
    • A9
    • A10
    • B0
    • B1
    • B2
    • B3
    • B4
    • B5
    • B6
    • B7
    • B8
    • B9
    • B10
    • C0
    • C1
    • C2
    • C3
    • C4
    • C5
    • C6
    • C7
    • C8
    • C9
    • C10
    • RA0
    • RA1
    • RA2
    • RA3
    • RA4
    • SRA0
    • SRA1
    • SRA2
    • SRA3
    • SRA4
    • LETTER
    • LEGAL
    • EXECUTIVE
    • FOLIO
    + * @param boolean $keepmargins if true overwrites the default page margins with the current margins + * @param boolean $tocpage if true set the tocpage state to true (the added page will be used to display Table Of Content). + * @access public + * @since 1.0 + * @see startPage(), endPage(), addTOCPage(), endTOCPage() + */ + public function AddPage($orientation='', $format='', $keepmargins=false, $tocpage=false) { + if (!isset($this->original_lMargin) OR $keepmargins) { + $this->original_lMargin = $this->lMargin; + } + if (!isset($this->original_rMargin) OR $keepmargins) { + $this->original_rMargin = $this->rMargin; + } + // terminate previous page + $this->endPage(); + // start new page + $this->startPage($orientation, $format, $tocpage); + } + + /** + * Terminate the current page + * @param boolean $tocpage if true set the tocpage state to false (end the page used to display Table Of Content). + * @access public + * @since 4.2.010 (2008-11-14) + * @see AddPage(), startPage(), addTOCPage(), endTOCPage() + */ + public function endPage($tocpage=false) { + // check if page is already closed + if (($this->page == 0) OR ($this->numpages > $this->page) OR (!$this->pageopen[$this->page])) { + return; + } + $this->InFooter = true; + // print page footer + $this->setFooter(); + // close page + $this->_endpage(); + // mark page as closed + $this->pageopen[$this->page] = false; + $this->InFooter = false; + if ($tocpage) { + $this->tocpage = false; + } + } + + /** + * Starts a new page to the document. The page must be closed using the endPage() function. + * The origin of the coordinate system is at the top-left corner and increasing ordinates go downwards. + * @param string $orientation page orientation. Possible values are (case insensitive):
    • P or PORTRAIT (default)
    • L or LANDSCAPE
    + * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).
    • 4A0
    • 2A0
    • A0
    • A1
    • A2
    • A3
    • A4 (default)
    • A5
    • A6
    • A7
    • A8
    • A9
    • A10
    • B0
    • B1
    • B2
    • B3
    • B4
    • B5
    • B6
    • B7
    • B8
    • B9
    • B10
    • C0
    • C1
    • C2
    • C3
    • C4
    • C5
    • C6
    • C7
    • C8
    • C9
    • C10
    • RA0
    • RA1
    • RA2
    • RA3
    • RA4
    • SRA0
    • SRA1
    • SRA2
    • SRA3
    • SRA4
    • LETTER
    • LEGAL
    • EXECUTIVE
    • FOLIO
    + * @param boolean $tocpage if true set the tocpage state to true (the added page will be used to display Table of Content). + * @access public + * @since 4.2.010 (2008-11-14) + * @see AddPage(), endPage(), addTOCPage(), endTOCPage() + */ + public function startPage($orientation='', $format='', $tocpage=false) { + if ($tocpage) { + $this->tocpage = true; + } + if ($this->numpages > $this->page) { + // this page has been already added + $this->setPage($this->page + 1); + $this->SetY($this->tMargin); + return; + } + // start a new page + if ($this->state == 0) { + $this->Open(); + } + ++$this->numpages; + $this->swapMargins($this->booklet); + // save current graphic settings + $gvars = $this->getGraphicVars(); + // start new page + $this->_beginpage($orientation, $format); + // mark page as open + $this->pageopen[$this->page] = true; + // restore graphic settings + $this->setGraphicVars($gvars); + // mark this point + $this->setPageMark(); + // print page header + $this->setHeader(); + // restore graphic settings + $this->setGraphicVars($gvars); + // mark this point + $this->setPageMark(); + // print table header (if any) + $this->setTableHeader(); + } + + /** + * Set start-writing mark on current page stream used to put borders and fills. + * Borders and fills are always created after content and inserted on the position marked by this method. + * This function must be called after calling Image() function for a background image. + * Background images must be always inserted before calling Multicell() or WriteHTMLCell() or WriteHTML() functions. + * @access public + * @since 4.0.016 (2008-07-30) + */ + public function setPageMark() { + $this->intmrk[$this->page] = $this->pagelen[$this->page]; + $this->setContentMark(); + } + + /** + * Set start-writing mark on selected page. + * Borders and fills are always created after content and inserted on the position marked by this method. + * @param int $page page number (default is the current page) + * @access protected + * @since 4.6.021 (2009-07-20) + */ + protected function setContentMark($page=0) { + if ($page <= 0) { + $page = $this->page; + } + if (isset($this->footerlen[$page])) { + $this->cntmrk[$page] = $this->pagelen[$page] - $this->footerlen[$page]; + } else { + $this->cntmrk[$page] = $this->pagelen[$page]; + } + } + + /** + * Set header data. + * @param string $ln header image logo + * @param string $lw header image logo width in mm + * @param string $ht string to print as title on document header + * @param string $hs string to print on document header + * @access public + */ + public function setHeaderData($ln='', $lw=0, $ht='', $hs='') { + $this->header_logo = $ln; + $this->header_logo_width = $lw; + $this->header_title = $ht; + $this->header_string = $hs; + } + + /** + * Returns header data: + *
    • $ret['logo'] = logo image
    • $ret['logo_width'] = width of the image logo in user units
    • $ret['title'] = header title
    • $ret['string'] = header description string
    + * @return array() + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getHeaderData() { + $ret = array(); + $ret['logo'] = $this->header_logo; + $ret['logo_width'] = $this->header_logo_width; + $ret['title'] = $this->header_title; + $ret['string'] = $this->header_string; + return $ret; + } + + /** + * Set header margin. + * (minimum distance between header and top page margin) + * @param int $hm distance in user units + * @access public + */ + public function setHeaderMargin($hm=10) { + $this->header_margin = $hm; + } + + /** + * Returns header margin in user units. + * @return float + * @since 4.0.012 (2008-07-24) + * @access public + */ + public function getHeaderMargin() { + return $this->header_margin; + } + + /** + * Set footer margin. + * (minimum distance between footer and bottom page margin) + * @param int $fm distance in user units + * @access public + */ + public function setFooterMargin($fm=10) { + $this->footer_margin = $fm; + } + + /** + * Returns footer margin in user units. + * @return float + * @since 4.0.012 (2008-07-24) + * @access public + */ + public function getFooterMargin() { + return $this->footer_margin; + } + /** + * Set a flag to print page header. + * @param boolean $val set to true to print the page header (default), false otherwise. + * @access public + */ + public function setPrintHeader($val=true) { + $this->print_header = $val; + } + + /** + * Set a flag to print page footer. + * @param boolean $value set to true to print the page footer (default), false otherwise. + * @access public + */ + public function setPrintFooter($val=true) { + $this->print_footer = $val; + } + + /** + * Return the right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image + * @return float + * @access public + */ + public function getImageRBX() { + return $this->img_rb_x; + } + + /** + * Return the right-bottom (or left-bottom for RTL) corner Y coordinate of last inserted image + * @return float + * @access public + */ + public function getImageRBY() { + return $this->img_rb_y; + } + + /** + * This method is used to render the page header. + * It is automatically called by AddPage() and could be overwritten in your own inherited class. + * @access public + */ + public function Header() { + $ormargins = $this->getOriginalMargins(); + $headerfont = $this->getHeaderFont(); + $headerdata = $this->getHeaderData(); + if (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) { + $this->Image(K_PATH_IMAGES.$headerdata['logo'], $this->GetX(), $this->getHeaderMargin(), $headerdata['logo_width']); + $imgy = $this->getImageRBY(); + } else { + $imgy = $this->GetY(); + } + $cell_height = round(($this->getCellHeightRatio() * $headerfont[2]) / $this->getScaleFactor(), 2); + // set starting margin for text data cell + if ($this->getRTL()) { + $header_x = $ormargins['right'] + ($headerdata['logo_width'] * 1.1); + } else { + $header_x = $ormargins['left'] + ($headerdata['logo_width'] * 1.1); + } + $this->SetTextColor(0, 0, 0); + // header title + $this->SetFont($headerfont[0], 'B', $headerfont[2] + 1); + $this->SetX($header_x); + $this->Cell(0, $cell_height, $headerdata['title'], 0, 1, '', 0, '', 0); + // header string + $this->SetFont($headerfont[0], $headerfont[1], $headerfont[2]); + $this->SetX($header_x); + $this->MultiCell(0, $cell_height, $headerdata['string'], 0, '', 0, 1, '', '', true, 0, false); + // print an ending header line + $this->SetLineStyle(array('width' => 0.85 / $this->getScaleFactor(), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); + $this->SetY((2.835 / $this->getScaleFactor()) + max($imgy, $this->GetY())); + if ($this->getRTL()) { + $this->SetX($ormargins['right']); + } else { + $this->SetX($ormargins['left']); + } + $this->Cell(0, 0, '', 'T', 0, 'C'); + } + + /** + * This method is used to render the page footer. + * It is automatically called by AddPage() and could be overwritten in your own inherited class. + * @access public + */ + public function Footer() { + $cur_y = $this->GetY(); + $ormargins = $this->getOriginalMargins(); + $this->SetTextColor(0, 0, 0); + //set style for cell border + $line_width = 0.85 / $this->getScaleFactor(); + $this->SetLineStyle(array('width' => $line_width, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); + //print document barcode + $barcode = $this->getBarcode(); + if (!empty($barcode)) { + $this->Ln($line_width); + $barcode_width = round(($this->getPageWidth() - $ormargins['left'] - $ormargins['right'])/3); + $this->write1DBarcode($barcode, 'C128B', $this->GetX(), $cur_y + $line_width, $barcode_width, (($this->getFooterMargin() / 3) - $line_width), 0.3, '', ''); + } + if (empty($this->pagegroups)) { + $pagenumtxt = $this->l['w_page'].' '.$this->getAliasNumPage().' / '.$this->getAliasNbPages(); + } else { + $pagenumtxt = $this->l['w_page'].' '.$this->getPageNumGroupAlias().' / '.$this->getPageGroupAlias(); + } + $this->SetY($cur_y); + //Print page number + if ($this->getRTL()) { + $this->SetX($ormargins['right']); + $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'L'); + } else { + $this->SetX($ormargins['left']); + $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'R'); + } + } + + /** + * This method is used to render the page header. + * @access protected + * @since 4.0.012 (2008-07-24) + */ + protected function setHeader() { + if ($this->print_header) { + $temp_thead = $this->thead; + $temp_theadMargins = $this->theadMargins; + $lasth = $this->lasth; + $this->_out('q'); + $this->rMargin = $this->original_rMargin; + $this->lMargin = $this->original_lMargin; + $this->cMargin = 0; + //set current position + if ($this->rtl) { + $this->SetXY($this->original_rMargin, $this->header_margin); + } else { + $this->SetXY($this->original_lMargin, $this->header_margin); + } + $this->SetFont($this->header_font[0], $this->header_font[1], $this->header_font[2]); + $this->Header(); + //restore position + if ($this->rtl) { + $this->SetXY($this->original_rMargin, $this->tMargin); + } else { + $this->SetXY($this->original_lMargin, $this->tMargin); + } + $this->_out('Q'); + $this->lasth = $lasth; + $this->thead = $temp_thead; + $this->theadMargins = $temp_theadMargins; + $this->newline = false; + } + } + + /** + * This method is used to render the page footer. + * @access protected + * @since 4.0.012 (2008-07-24) + */ + protected function setFooter() { + //Page footer + // save current graphic settings + $gvars = $this->getGraphicVars(); + // mark this point + $this->footerpos[$this->page] = $this->pagelen[$this->page]; + $this->_out("\n"); + if ($this->print_footer) { + $temp_thead = $this->thead; + $temp_theadMargins = $this->theadMargins; + $lasth = $this->lasth; + $this->_out('q'); + $this->rMargin = $this->original_rMargin; + $this->lMargin = $this->original_lMargin; + $this->cMargin = 0; + //set current position + $footer_y = $this->h - $this->footer_margin; + if ($this->rtl) { + $this->SetXY($this->original_rMargin, $footer_y); + } else { + $this->SetXY($this->original_lMargin, $footer_y); + } + + if (is_array($this->footer_font)){ + + $this->SetFont($this->footer_font[0], $this->footer_font[1], $this->footer_font[2]); + }else{ + $this->SetFont($this->footer_font); + } + + $this->Footer(); + //restore position + if ($this->rtl) { + $this->SetXY($this->original_rMargin, $this->tMargin); + } else { + $this->SetXY($this->original_lMargin, $this->tMargin); + } + $this->_out('Q'); + $this->lasth = $lasth; + $this->thead = $temp_thead; + $this->theadMargins = $temp_theadMargins; + } + // restore graphic settings + $this->setGraphicVars($gvars); + // calculate footer length + $this->footerlen[$this->page] = $this->pagelen[$this->page] - $this->footerpos[$this->page] + 1; + } + + /** + * This method is used to render the table header on new page (if any). + * @access protected + * @since 4.5.030 (2009-03-25) + */ + protected function setTableHeader() { + if ($this->num_columns > 1) { + // multi column mode + return; + } + if (isset($this->theadMargins['top'])) { + // restore the original top-margin + $this->tMargin = $this->theadMargins['top']; + $this->pagedim[$this->page]['tm'] = $this->tMargin; + $this->y = $this->tMargin; + } + if (!$this->empty_string($this->thead) AND (!$this->inthead)) { + // set margins + $prev_lMargin = $this->lMargin; + $prev_rMargin = $this->rMargin; + $this->lMargin = $this->pagedim[$this->page]['olm']; + $this->rMargin = $this->pagedim[$this->page]['orm']; + $this->cMargin = $this->theadMargins['cmargin']; + if ($this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + // print table header + $this->writeHTML($this->thead, false, false, false, false, ''); + // set new top margin to skip the table headers + if (!isset($this->theadMargins['top'])) { + $this->theadMargins['top'] = $this->tMargin; + } + $this->tMargin = $this->y; + $this->pagedim[$this->page]['tm'] = $this->tMargin; + $this->lasth = 0; + $this->lMargin = $prev_lMargin; + $this->rMargin = $prev_rMargin; + } + } + + /** + * Returns the current page number. + * @return int page number + * @access public + * @since 1.0 + * @see AliasNbPages(), getAliasNbPages() + */ + public function PageNo() { + return $this->page; + } + + /** + * Defines a new spot color. + * It can be expressed in RGB components or gray scale. + * The method can be called before the first page is created and the value is retained from page to page. + * @param int $c Cyan color for CMYK. Value between 0 and 255 + * @param int $m Magenta color for CMYK. Value between 0 and 255 + * @param int $y Yellow color for CMYK. Value between 0 and 255 + * @param int $k Key (Black) color for CMYK. Value between 0 and 255 + * @access public + * @since 4.0.024 (2008-09-12) + * @see SetDrawSpotColor(), SetFillSpotColor(), SetTextSpotColor() + */ + public function AddSpotColor($name, $c, $m, $y, $k) { + if (!isset($this->spot_colors[$name])) { + $i = 1 + count($this->spot_colors); + $this->spot_colors[$name] = array('i' => $i, 'c' => $c, 'm' => $m, 'y' => $y, 'k' => $k); + } + } + + /** + * Defines the color used for all drawing operations (lines, rectangles and cell borders). + * It can be expressed in RGB components or gray scale. + * The method can be called before the first page is created and the value is retained from page to page. + * @param array $color array of colors + * @access public + * @since 3.1.000 (2008-06-11) + * @see SetDrawColor() + */ + public function SetDrawColorArray($color) { + if (isset($color)) { + $color = array_values($color); + $r = isset($color[0]) ? $color[0] : -1; + $g = isset($color[1]) ? $color[1] : -1; + $b = isset($color[2]) ? $color[2] : -1; + $k = isset($color[3]) ? $color[3] : -1; + if ($r >= 0) { + $this->SetDrawColor($r, $g, $b, $k); + } + } + } + + /** + * Defines the color used for all drawing operations (lines, rectangles and cell borders). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255 + * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255 + * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255 + * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255 + * @access public + * @since 1.3 + * @see SetDrawColorArray(), SetFillColor(), SetTextColor(), Line(), Rect(), Cell(), MultiCell() + */ + public function SetDrawColor($col1=0, $col2=-1, $col3=-1, $col4=-1) { + // set default values + if (!is_numeric($col1)) { + $col1 = 0; + } + if (!is_numeric($col2)) { + $col2 = -1; + } + if (!is_numeric($col3)) { + $col3 = -1; + } + if (!is_numeric($col4)) { + $col4 = -1; + } + //Set color for all stroking operations + if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) { + // Grey scale + $this->DrawColor = sprintf('%.3F G', $col1/255); + $this->strokecolor = array('G' => $col1); + } elseif ($col4 == -1) { + // RGB + $this->DrawColor = sprintf('%.3F %.3F %.3F RG', $col1/255, $col2/255, $col3/255); + $this->strokecolor = array('R' => $col1, 'G' => $col2, 'B' => $col3); + } else { + // CMYK + $this->DrawColor = sprintf('%.3F %.3F %.3F %.3F K', $col1/100, $col2/100, $col3/100, $col4/100); + $this->strokecolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4); + } + if ($this->page > 0) { + $this->_out($this->DrawColor); + } + } + + /** + * Defines the spot color used for all drawing operations (lines, rectangles and cell borders). + * @param string $name name of the spot color + * @param int $tint the intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @access public + * @since 4.0.024 (2008-09-12) + * @see AddSpotColor(), SetFillSpotColor(), SetTextSpotColor() + */ + public function SetDrawSpotColor($name, $tint=100) { + if (!isset($this->spot_colors[$name])) { + $this->Error('Undefined spot color: '.$name); + } + $this->DrawColor = sprintf('/CS%d CS %.3F SCN', $this->spot_colors[$name]['i'], $tint/100); + if ($this->page > 0) { + $this->_out($this->DrawColor); + } + } + + /** + * Defines the color used for all filling operations (filled rectangles and cell backgrounds). + * It can be expressed in RGB components or gray scale. + * The method can be called before the first page is created and the value is retained from page to page. + * @param array $color array of colors + * @access public + * @since 3.1.000 (2008-6-11) + * @see SetFillColor() + */ + public function SetFillColorArray($color) { + if (isset($color)) { + $color = array_values($color); + $r = isset($color[0]) ? $color[0] : -1; + $g = isset($color[1]) ? $color[1] : -1; + $b = isset($color[2]) ? $color[2] : -1; + $k = isset($color[3]) ? $color[3] : -1; + if ($r >= 0) { + $this->SetFillColor($r, $g, $b, $k); + } + } + } + + /** + * Defines the color used for all filling operations (filled rectangles and cell backgrounds). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255 + * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255 + * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255 + * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255 + * @access public + * @since 1.3 + * @see SetFillColorArray(), SetDrawColor(), SetTextColor(), Rect(), Cell(), MultiCell() + */ + public function SetFillColor($col1=0, $col2=-1, $col3=-1, $col4=-1) { + // set default values + if (!is_numeric($col1)) { + $col1 = 0; + } + if (!is_numeric($col2)) { + $col2 = -1; + } + if (!is_numeric($col3)) { + $col3 = -1; + } + if (!is_numeric($col4)) { + $col4 = -1; + } + //Set color for all filling operations + if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) { + // Grey scale + $this->FillColor = sprintf('%.3F g', $col1/255); + $this->bgcolor = array('G' => $col1); + } elseif ($col4 == -1) { + // RGB + $this->FillColor = sprintf('%.3F %.3F %.3F rg', $col1/255, $col2/255, $col3/255); + $this->bgcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3); + } else { + // CMYK + $this->FillColor = sprintf('%.3F %.3F %.3F %.3F k', $col1/100, $col2/100, $col3/100, $col4/100); + $this->bgcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4); + } + $this->ColorFlag = ($this->FillColor != $this->TextColor); + if ($this->page > 0) { + $this->_out($this->FillColor); + } + } + + /** + * Defines the spot color used for all filling operations (filled rectangles and cell backgrounds). + * @param string $name name of the spot color + * @param int $tint the intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @access public + * @since 4.0.024 (2008-09-12) + * @see AddSpotColor(), SetDrawSpotColor(), SetTextSpotColor() + */ + public function SetFillSpotColor($name, $tint=100) { + if (!isset($this->spot_colors[$name])) { + $this->Error('Undefined spot color: '.$name); + } + $this->FillColor = sprintf('/CS%d cs %.3F scn', $this->spot_colors[$name]['i'], $tint/100); + $this->ColorFlag = ($this->FillColor != $this->TextColor); + if ($this->page > 0) { + $this->_out($this->FillColor); + } + } + + /** + * Defines the color used for text. It can be expressed in RGB components or gray scale. + * The method can be called before the first page is created and the value is retained from page to page. + * @param array $color array of colors + * @access public + * @since 3.1.000 (2008-6-11) + * @see SetFillColor() + */ + public function SetTextColorArray($color) { + if (isset($color)) { + $color = array_values($color); + $r = isset($color[0]) ? $color[0] : -1; + $g = isset($color[1]) ? $color[1] : -1; + $b = isset($color[2]) ? $color[2] : -1; + $k = isset($color[3]) ? $color[3] : -1; + if ($r >= 0) { + $this->SetTextColor($r, $g, $b, $k); + } + } + } + + /** + * Defines the color used for text. It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255 + * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255 + * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255 + * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255 + * @access public + * @since 1.3 + * @see SetTextColorArray(), SetDrawColor(), SetFillColor(), Text(), Cell(), MultiCell() + */ + public function SetTextColor($col1=0, $col2=-1, $col3=-1, $col4=-1) { + // set default values + if (!is_numeric($col1)) { + $col1 = 0; + } + if (!is_numeric($col2)) { + $col2 = -1; + } + if (!is_numeric($col3)) { + $col3 = -1; + } + if (!is_numeric($col4)) { + $col4 = -1; + } + //Set color for text + if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) { + // Grey scale + $this->TextColor = sprintf('%.3F g', $col1/255); + $this->fgcolor = array('G' => $col1); + } elseif ($col4 == -1) { + // RGB + $this->TextColor = sprintf('%.3F %.3F %.3F rg', $col1/255, $col2/255, $col3/255); + $this->fgcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3); + } else { + // CMYK + $this->TextColor = sprintf('%.3F %.3F %.3F %.3F k', $col1/100, $col2/100, $col3/100, $col4/100); + $this->fgcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4); + } + $this->ColorFlag = ($this->FillColor != $this->TextColor); + } + + /** + * Defines the spot color used for text. + * @param string $name name of the spot color + * @param int $tint the intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @access public + * @since 4.0.024 (2008-09-12) + * @see AddSpotColor(), SetDrawSpotColor(), SetFillSpotColor() + */ + public function SetTextSpotColor($name, $tint=100) { + if (!isset($this->spot_colors[$name])) { + $this->Error('Undefined spot color: '.$name); + } + $this->TextColor = sprintf('/CS%d cs %.3F scn', $this->spot_colors[$name]['i'], $tint/100); + $this->ColorFlag = ($this->FillColor != $this->TextColor); + if ($this->page > 0) { + $this->_out($this->TextColor); + } + } + + /** + * Returns the length of a string in user unit. A font must be selected.
    + * @param string $s The string whose length is to be computed + * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained. + * @param string $fontstyle Font style. Possible values are (case insensitive):
    • empty string: regular
    • B: bold
    • I: italic
    • U: underline
    • D: line-trough
    • O: overline
    or any combination. The default value is regular. + * @param float $fontsize Font size in points. The default value is the current size. + * @param boolean $getarray if true returns an array of characters widths, if false returns the total length. + * @return mixed int total string length or array of characted widths + * @author Nicola Asuni + * @access public + * @since 1.2 + */ + public function GetStringWidth($s, $fontname='', $fontstyle='', $fontsize=0, $getarray=false) { + return $this->GetArrStringWidth($this->utf8Bidi($this->UTF8StringToArray($s), $s, $this->tmprtl), $fontname, $fontstyle, $fontsize, $getarray); + } + + /** + * Returns the string length of an array of chars in user unit or an array of characters widths. A font must be selected.
    + * @param string $sa The array of chars whose total length is to be computed + * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained. + * @param string $fontstyle Font style. Possible values are (case insensitive):
    • empty string: regular
    • B: bold
    • I: italic
    • U: underline
    • D: line trough
    • O: overline
    or any combination. The default value is regular. + * @param float $fontsize Font size in points. The default value is the current size. + * @param boolean $getarray if true returns an array of characters widths, if false returns the total length. + * @return mixed int total string length or array of characted widths + * @author Nicola Asuni + * @access public + * @since 2.4.000 (2008-03-06) + */ + public function GetArrStringWidth($sa, $fontname='', $fontstyle='', $fontsize=0, $getarray=false) { + // store current values + if (!$this->empty_string($fontname)) { + $prev_FontFamily = $this->FontFamily; + $prev_FontStyle = $this->FontStyle; + $prev_FontSizePt = $this->FontSizePt; + $this->SetFont($fontname, $fontstyle, $fontsize); + } + // convert UTF-8 array to Latin1 if required + $sa = $this->UTF8ArrToLatin1($sa); + $w = 0; // total width + $wa = array(); // array of characters widths + foreach ($sa as $char) { + // character width + $cw = $this->GetCharWidth($char); + $wa[] = $cw; + $w += $cw; + } + // restore previous values + if (!$this->empty_string($fontname)) { + $this->SetFont($prev_FontFamily, $prev_FontStyle, $prev_FontSizePt); + } + if ($getarray) { + return $wa; + } + return $w; + } + + /** + * Returns the length of the char in user unit for the current font. + * @param int $char The char code whose length is to be returned + * @return int char width + * @author Nicola Asuni + * @access public + * @since 2.4.000 (2008-03-06) + */ + public function GetCharWidth($char) { + if ($char == 173) { + // SHY character will not be printed + return (0); + } + $cw = &$this->CurrentFont['cw']; + if (isset($cw[$char])) { + $w = $cw[$char]; + } elseif (isset($this->CurrentFont['dw'])) { + // default width + $w = $this->CurrentFont['dw']; + } elseif (isset($cw[32])) { + // default width + $w = $cw[32]; + } else { + $w = 600; + } + return ($w * $this->FontSize / 1000); + } + + /** + * Returns the numbero of characters in a string. + * @param string $s The input string. + * @return int number of characters + * @access public + * @since 2.0.0001 (2008-01-07) + */ + public function GetNumChars($s) { + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + return count($this->UTF8StringToArray($s)); + } + return strlen($s); + } + + /** + * Fill the list of available fonts ($this->fontlist). + * @access protected + * @since 4.0.013 (2008-07-28) + */ + protected function getFontsList() { + $fontsdir = opendir($this->_getfontpath()); + while (($file = readdir($fontsdir)) !== false) { + if (substr($file, -4) == '.php') { + array_push($this->fontlist, strtolower(basename($file, '.php'))); + } + } + closedir($fontsdir); + } + + /** + * Imports a TrueType, Type1, core, or CID0 font and makes it available. + * It is necessary to generate a font definition file first (read /fonts/utils/README.TXT). + * The definition file (and the font file itself when embedding) must be present either in the current directory or in the one indicated by K_PATH_FONTS if the constant is defined. If it could not be found, the error "Could not include font definition file" is generated. + * @param string $family Font family. The name can be chosen arbitrarily. If it is a standard family name, it will override the corresponding font. + * @param string $style Font style. Possible values are (case insensitive):
    • empty string: regular (default)
    • B: bold
    • I: italic
    • BI or IB: bold italic
    + * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces. + * @return array containing the font data, or false in case of error. + * @access public + * @since 1.5 + * @see SetFont() + */ + public function AddFont($family, $style='', $fontfile='') { + if ($this->empty_string($family)) { + if (!$this->empty_string($this->FontFamily)) { + $family = $this->FontFamily; + } else { + $this->Error('Empty font family'); + } + } + $family = strtolower($family); + if ((!$this->isunicode) AND ($family == 'arial')) { + $family = 'helvetica'; + } + if (($family == 'symbol') OR ($family == 'zapfdingbats')) { + $style = ''; + } + $tempstyle = strtoupper($style); + $style = ''; + // underline + if (strpos($tempstyle, 'U') !== false) { + $this->underline = true; + } else { + $this->underline = false; + } + // line-through (deleted) + if (strpos($tempstyle, 'D') !== false) { + $this->linethrough = true; + } else { + $this->linethrough = false; + } + // overline + if (strpos($tempstyle, 'O') !== false) { + $this->overline = true; + } else { + $this->overline = false; + } + // bold + if (strpos($tempstyle, 'B') !== false) { + $style .= 'B'; + } + // oblique + if (strpos($tempstyle, 'I') !== false) { + $style .= 'I'; + } + $bistyle = $style; + $fontkey = $family.$style; + $font_style = $style.($this->underline ? 'U' : '').($this->linethrough ? 'D' : '').($this->overline ? 'O' : ''); + $fontdata = array('fontkey' => $fontkey, 'family' => $family, 'style' => $font_style); + // check if the font has been already added + if ($this->getFontBuffer($fontkey) !== false) { + return $fontdata; + } + if (isset($type)) { + unset($type); + } + if (isset($cw)) { + unset($cw); + } + // get specified font directory (if any) + $fontdir = false; + if (!$this->empty_string($fontfile)) { + $fontdir = dirname($fontfile); + if ($this->empty_string($fontdir) OR ($fontdir == '.')) { + $fontdir = ''; + } else { + $fontdir .= '/'; + } + } + // search and include font file + if ($this->empty_string($fontfile) OR (!file_exists($fontfile))) { + // build a standard filenames for specified font + $fontfile1 = str_replace(' ', '', $family).strtolower($style).'.php'; + $fontfile2 = str_replace(' ', '', $family).'.php'; + // search files on various directories + if (($fontdir !== false) AND file_exists($fontdir.$fontfile1)) { + $fontfile = $fontdir.$fontfile1; + } elseif (file_exists($this->_getfontpath().$fontfile1)) { + $fontfile = $this->_getfontpath().$fontfile1; + } elseif (file_exists($fontfile1)) { + $fontfile = $fontfile1; + } elseif (($fontdir !== false) AND file_exists($fontdir.$fontfile2)) { + $fontfile = $fontdir.$fontfile2; + } elseif (file_exists($this->_getfontpath().$fontfile2)) { + $fontfile = $this->_getfontpath().$fontfile2; + } else { + $fontfile = $fontfile2; + } + } + // include font file + if (file_exists($fontfile)) { + include($fontfile); + } else { + $this->Error('Could not include font definition file: '.$family.''); + } + // check font parameters + if ((!isset($type)) OR (!isset($cw))) { + $this->Error('The font definition file has a bad format: '.$fontfile.''); + } + // SET default parameters + if (!isset($file) OR $this->empty_string($file)) { + $file = ''; + } + if (!isset($enc) OR $this->empty_string($enc)) { + $enc = ''; + } + if (!isset($cidinfo) OR $this->empty_string($cidinfo)) { + $cidinfo = array('Registry'=>'Adobe','Ordering'=>'Identity','Supplement'=>0); + $cidinfo['uni2cid'] = array(); + } + if (!isset($ctg) OR $this->empty_string($ctg)) { + $ctg = ''; + } + if (!isset($desc) OR $this->empty_string($desc)) { + $desc = array(); + } + if (!isset($up) OR $this->empty_string($up)) { + $up = -100; + } + if (!isset($ut) OR $this->empty_string($ut)) { + $ut = 50; + } + if (!isset($cw) OR $this->empty_string($cw)) { + $cw = array(); + } + if (!isset($dw) OR $this->empty_string($dw)) { + // set default width + if (isset($desc['MissingWidth']) AND ($desc['MissingWidth'] > 0)) { + $dw = $desc['MissingWidth']; + } elseif (isset($cw[32])) { + $dw = $cw[32]; + } else { + $dw = 600; + } + } + ++$this->numfonts; + if ($type == 'cidfont0') { + // register CID font (all styles at once) + $styles = array('' => '', 'B' => ',Bold', 'I' => ',Italic', 'BI' => ',BoldItalic'); + $sname = $name.$styles[$bistyle]; + // artificial bold + if (strpos($bistyle, 'B') !== false) { + if (isset($desc['StemV'])) { + $desc['StemV'] *= 2; + } else { + $desc['StemV'] = 120; + } + } + // artificial italic + if (strpos($bistyle, 'I') !== false) { + if (isset($desc['ItalicAngle'])) { + $desc['ItalicAngle'] -= 11; + } else { + $desc['ItalicAngle'] = -11; + } + } + } elseif ($type == 'core') { + $name = $this->CoreFonts[$fontkey]; + } elseif (($type == 'TrueType') OR ($type == 'Type1')) { + // ... + } elseif ($type == 'TrueTypeUnicode') { + $enc = 'Identity-H'; + } else { + $this->Error('Unknow font type: '.$type.''); + } + $this->setFontBuffer($fontkey, array('i' => $this->numfonts, 'type' => $type, 'name' => $name, 'desc' => $desc, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'dw' => $dw, 'enc' => $enc, 'cidinfo' => $cidinfo, 'file' => $file, 'ctg' => $ctg)); + if (isset($diff) AND (!empty($diff))) { + //Search existing encodings + $d = 0; + $nb = count($this->diffs); + for ($i=1; $i <= $nb; ++$i) { + if ($this->diffs[$i] == $diff) { + $d = $i; + break; + } + } + if ($d == 0) { + $d = $nb + 1; + $this->diffs[$d] = $diff; + } + $this->setFontSubBuffer($fontkey, 'diff', $d); + } + if (!$this->empty_string($file)) { + if ((strcasecmp($type,'TrueType') == 0) OR (strcasecmp($type, 'TrueTypeUnicode') == 0)) { + $this->FontFiles[$file] = array('length1' => $originalsize, 'fontdir' => $fontdir); + } elseif ($type != 'core') { + $this->FontFiles[$file] = array('length1' => $size1, 'length2' => $size2, 'fontdir' => $fontdir); + } + } + return $fontdata; + } + + /** + * Sets the font used to print character strings. + * The font can be either a standard one or a font added via the AddFont() method. Standard fonts use Windows encoding cp1252 (Western Europe). + * The method can be called before the first page is created and the font is retained from page to page. + * If you just wish to change the current font size, it is simpler to call SetFontSize(). + * Note: for the standard fonts, the font metric files must be accessible. There are three possibilities for this:
    • They are in the current directory (the one where the running script lies)
    • They are in one of the directories defined by the include_path parameter
    • They are in the directory defined by the K_PATH_FONTS constant

    + * @param string $family Family font. It can be either a name defined by AddFont() or one of the standard Type1 families (case insensitive):
    • times (Times-Roman)
    • timesb (Times-Bold)
    • timesi (Times-Italic)
    • timesbi (Times-BoldItalic)
    • helvetica (Helvetica)
    • helveticab (Helvetica-Bold)
    • helveticai (Helvetica-Oblique)
    • helveticabi (Helvetica-BoldOblique)
    • courier (Courier)
    • courierb (Courier-Bold)
    • courieri (Courier-Oblique)
    • courierbi (Courier-BoldOblique)
    • symbol (Symbol)
    • zapfdingbats (ZapfDingbats)
    It is also possible to pass an empty string. In that case, the current family is retained. + * @param string $style Font style. Possible values are (case insensitive):
    • empty string: regular
    • B: bold
    • I: italic
    • U: underline
    • D: line trough
    • O: overline
    or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats basic fonts or other fonts when not defined. + * @param float $size Font size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12 + * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces. + * @access public + * @since 1.0 + * @see AddFont(), SetFontSize() + */ + public function SetFont($family, $style='', $size=0, $fontfile='') { + //Select a font; size given in points + if ($size == 0) { + $size = $this->FontSizePt; + } + // try to add font (if not already added) + $fontdata = $this->AddFont($family, $style, $fontfile); + $this->FontFamily = $fontdata['family']; + $this->FontStyle = $fontdata['style']; + $this->CurrentFont = $this->getFontBuffer($fontdata['fontkey']); + $this->SetFontSize($size); + } + + /** + * Defines the size of the current font. + * @param float $size The size (in points) + * @access public + * @since 1.0 + * @see SetFont() + */ + public function SetFontSize($size) { + //Set font size in points + $this->FontSizePt = $size; + $this->FontSize = $size / $this->k; + if (isset($this->CurrentFont['desc']['Ascent']) AND ($this->CurrentFont['desc']['Ascent'] > 0)) { + $this->FontAscent = $this->CurrentFont['desc']['Ascent'] * $this->FontSize / 1000; + } else { + $this->FontAscent = 0.85 * $this->FontSize; + } + if (isset($this->CurrentFont['desc']['Descent']) AND ($this->CurrentFont['desc']['Descent'] <= 0)) { + $this->FontDescent = - $this->CurrentFont['desc']['Descent'] * $this->FontSize / 1000; + } else { + $this->FontDescent = 0.15 * $this->FontSize; + } + if (($this->page > 0) AND (isset($this->CurrentFont['i']))) { + $this->_out(sprintf('BT /F%d %.2F Tf ET', $this->CurrentFont['i'], $this->FontSizePt)); + } + } + + /** + * Return the font descent value + * @param string $font font name + * @param string $style font style + * @param float $size The size (in points) + * @return int font descent + * @access public + * @since 4.9.003 (2010-03-30) + */ + public function getFontDescent($font, $style='', $size=0) { + //Set font size in points + $sizek = $size / $this->k; + $fontdata = $this->AddFont($font, $style); + if (isset($fontdata['desc']['Descent']) AND ($fontdata['desc']['Descent'] <= 0)) { + $descent = - $fontdata['desc']['Descent'] * $sizek / 1000; + } else { + $descent = 0.15 * $sizek; + } + return $descent; + } + + /** + * Return the font ascent value + * @param string $font font name + * @param string $style font style + * @param float $size The size (in points) + * @return int font ascent + * @access public + * @since 4.9.003 (2010-03-30) + */ + public function getFontAscent($font, $style='', $size=0) { + //Set font size in points + $sizek = $size / $this->k; + $fontdata = $this->AddFont($font, $style); + if (isset($fontdata['desc']['Ascent']) AND ($fontdata['desc']['Ascent'] > 0)) { + $ascent = $fontdata['desc']['Ascent'] * $sizek / 1000; + } else { + $ascent = 0.85 * $sizek; + } + return $ascent; + } + + /** + * Defines the default monospaced font. + * @param string $font Font name. + * @access public + * @since 4.5.025 + */ + public function SetDefaultMonospacedFont($font) { + $this->default_monospaced_font = $font; + } + + /** + * Creates a new internal link and returns its identifier. An internal link is a clickable area which directs to another place within the document.
    + * The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is defined with SetLink(). + * @access public + * @since 1.5 + * @see Cell(), Write(), Image(), Link(), SetLink() + */ + public function AddLink() { + //Create a new internal link + $n = count($this->links) + 1; + $this->links[$n] = array(0, 0); + return $n; + } + + /** + * Defines the page and position a link points to. + * @param int $link The link identifier returned by AddLink() + * @param float $y Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page) + * @param int $page Number of target page; -1 indicates the current page. This is the default value + * @access public + * @since 1.5 + * @see AddLink() + */ + public function SetLink($link, $y=0, $page=-1) { + if ($y == -1) { + $y = $this->y; + } + if ($page == -1) { + $page = $this->page; + } + $this->links[$link] = array($page, $y); + } + + /** + * Puts a link on a rectangular area of the page. + * Text or image links are generally put via Cell(), Write() or Image(), but this method can be useful for instance to define a clickable area inside an image. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param float $w Width of the rectangle + * @param float $h Height of the rectangle + * @param mixed $link URL or identifier returned by AddLink() + * @param int $spaces number of spaces on the text to link + * @access public + * @since 1.5 + * @see AddLink(), Annotation(), Cell(), Write(), Image() + */ + public function Link($x, $y, $w, $h, $link, $spaces=0) { + $this->Annotation($x, $y, $w, $h, $link, array('Subtype'=>'Link'), $spaces); + } + + /** + * Puts a markup annotation on a rectangular area of the page. + * !!!!THE ANNOTATION SUPPORT IS NOT YET FULLY IMPLEMENTED !!!! + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param float $w Width of the rectangle + * @param float $h Height of the rectangle + * @param string $text annotation text or alternate content + * @param array $opt array of options (see section 8.4 of PDF reference 1.7). + * @param int $spaces number of spaces on the text to link + * @access public + * @since 4.0.018 (2008-08-06) + */ + public function Annotation($x, $y, $w, $h, $text, $opt=array('Subtype'=>'Text'), $spaces=0) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // recalculate coordinates to account for graphic transformations + if (isset($this->transfmatrix)) { + for ($i=$this->transfmatrix_key; $i > 0; --$i) { + $maxid = count($this->transfmatrix[$i]) - 1; + for ($j=$maxid; $j >= 0; --$j) { + $ctm = $this->transfmatrix[$i][$j]; + if (isset($ctm['a'])) { + $x = $x * $this->k; + $y = ($this->h - $y) * $this->k; + $w = $w * $this->k; + $h = $h * $this->k; + // top left + $xt = $x; + $yt = $y; + $x1 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y1 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // top right + $xt = $x + $w; + $yt = $y; + $x2 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y2 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // bottom left + $xt = $x; + $yt = $y - $h; + $x3 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y3 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // bottom right + $xt = $x + $w; + $yt = $y - $h; + $x4 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y4 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // new coordinates (rectangle area) + $x = min($x1, $x2, $x3, $x4); + $y = max($y1, $y2, $y3, $y4); + $w = (max($x1, $x2, $x3, $x4) - $x) / $this->k; + $h = ($y - min($y1, $y2, $y3, $y4)) / $this->k; + $x = $x / $this->k; + $y = $this->h - ($y / $this->k); + } + } + } + } + if ($this->page <= 0) { + $page = 1; + } else { + $page = $this->page; + } + if (!isset($this->PageAnnots[$page])) { + $this->PageAnnots[$page] = array(); + } + $this->PageAnnots[$page][] = array('x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces); + if ((($opt['Subtype'] == 'FileAttachment') OR ($opt['Subtype'] == 'Sound')) AND (!$this->empty_string($opt['FS'])) AND file_exists($opt['FS']) AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) { + $this->embeddedfiles[basename($opt['FS'])] = array('file' => $opt['FS'], 'n' => (count($this->embeddedfiles) + $this->embedded_start_obj_id)); + } + // Add widgets annotation's icons + if (isset($opt['mk']['i']) AND file_exists($opt['mk']['i'])) { + $this->Image($opt['mk']['i'], '', '', 10, 10, '', '', '', false, 300, '', false, false, 0, false, true); + } + if (isset($opt['mk']['ri']) AND file_exists($opt['mk']['ri'])) { + $this->Image($opt['mk']['ri'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true); + } + if (isset($opt['mk']['ix']) AND file_exists($opt['mk']['ix'])) { + $this->Image($opt['mk']['ix'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true); + } + ++$this->annot_obj_id; + } + + /** + * Embedd the attached files. + * @since 4.4.000 (2008-12-07) + * @access protected + * @see Annotation() + */ + protected function _putEmbeddedFiles() { + reset($this->embeddedfiles); + foreach ($this->embeddedfiles as $filename => $filedata) { + $data = file_get_contents($filedata['file']); + $filter = ''; + if ($this->compress) { + $data = gzcompress($data); + $filter = ' /Filter /FlateDecode'; + } + $this->offsets[$filedata['n']] = $this->bufferlen; + $out = $filedata['n'].' 0 obj'; + $out .= ' <>'; + $out .= ' '.$this->_getstream($data, $filedata['n']); + $out .= ' endobj'; + $this->_out($out); + } + } + + /** + * Prints a text cell at the specified position. + * The origin is on the left of the first charcter, on the baseline. + * This method allows to place a string precisely on the page. + * @param float $x Abscissa of the cell origin + * @param float $y Ordinate of the cell origin + * @param string $txt String to print + * @param int $fstroke outline size in user units (false = disable) + * @param boolean $fclip if true activate clipping mode (you must call StartTransform() before this function and StopTransform() to stop the clipping tranformation). + * @param boolean $ffill if true fills the text + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    + * @param int $ln Indicates where the current position should go after the call. Possible values are:
    • 0: to the right (or left for RTL languages)
    • 1: to the beginning of the next line
    • 2: below
    Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param string $align Allows to center or align the text. Possible values are:
    • L or empty string: left align (default value)
    • C: center
    • R: right align
    • J: justify
    + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param mixed $link URL or identifier returned by AddLink(). + * @param int $stretch stretch carachter mode:
    • 0 = disabled
    • 1 = horizontal scaling only if necessary
    • 2 = forced horizontal scaling
    • 3 = character spacing only if necessary
    • 4 = forced character spacing
    + * @param boolean $ignore_min_height if true ignore automatic minimum height value. + * @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:
    • T : cell top
    • A : font top
    • L : font baseline
    • D : font bottom
    • B : cell bottom
    + * @param string $valign text vertical alignment inside the cell. Possible values are:
    • T : top
    • C : center
    • B : bottom
    + * @param boolean $rtloff if true uses the page top-left corner as origin of axis for $x and $y initial position. + * @access public + * @since 1.0 + * @see Cell(), Write(), MultiCell(), WriteHTML(), WriteHTMLCell() + */ + public function Text($x, $y, $txt, $fstroke=false, $fclip=false, $ffill=true, $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M', $rtloff=false) { + $textrendermode = $this->textrendermode; + $textstrokewidth = $this->textstrokewidth; + $this->setTextRenderingMode($fstroke, $ffill, $fclip); + $this->SetXY($x, $y, $rtloff); + $this->Cell(0, 0, $txt, $border, $ln, $align, $fill, $link, $stretch, $ignore_min_height, $calign, $valign); + // restore previous rendering mode + $this->textrendermode = $textrendermode; + $this->textstrokewidth = $textstrokewidth; + } + + /** + * Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value. + * The default implementation returns a value according to the mode selected by SetAutoPageBreak().
    + * This method is called automatically and should not be called directly by the application. + * @return boolean + * @access public + * @since 1.4 + * @see SetAutoPageBreak() + */ + public function AcceptPageBreak() { + if ($this->num_columns > 1) { + // multi column mode + if($this->current_column < ($this->num_columns - 1)) { + // go to next column + $this->selectColumn($this->current_column + 1); + } else { + // add a new page + $this->AddPage(); + // set first column + $this->selectColumn(0); + } + // avoid page breaking from checkPageBreak() + return false; + } + return $this->AutoPageBreak; + } + + /** + * Add page if needed. + * @param float $h Cell height. Default value: 0. + * @param mixed $y starting y position, leave empty for current position. + * @param boolean $addpage if true add a page, otherwise only return the true/false state + * @return boolean true in case of page break, false otherwise. + * @since 3.2.000 (2008-07-01) + * @access protected + */ + protected function checkPageBreak($h=0, $y='', $addpage=true) { + if ($this->empty_string($y)) { + $y = $this->y; + } + if ((($y + $h) > $this->PageBreakTrigger) AND (!$this->InFooter) AND ($this->AcceptPageBreak())) { + if ($addpage) { + //Automatic page break + $x = $this->x; + $this->AddPage($this->CurOrientation); + $this->y = $this->tMargin; + $oldpage = $this->page - 1; + if ($this->rtl) { + if ($this->pagedim[$this->page]['orm'] != $this->pagedim[$oldpage]['orm']) { + $this->x = $x - ($this->pagedim[$this->page]['orm'] - $this->pagedim[$oldpage]['orm']); + } else { + $this->x = $x; + } + } else { + if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) { + $this->x = $x + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$oldpage]['olm']); + } else { + $this->x = $x; + } + } + } + return true; + } + return false; + } + + /** + * Prints a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
    + * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + * @param float $w Cell width. If 0, the cell extends up to the right margin. + * @param float $h Cell height. Default value: 0. + * @param string $txt String to print. Default value: empty string. + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    + * @param int $ln Indicates where the current position should go after the call. Possible values are:
    • 0: to the right (or left for RTL languages)
    • 1: to the beginning of the next line
    • 2: below
    + Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param string $align Allows to center or align the text. Possible values are:
    • L or empty string: left align (default value)
    • C: center
    • R: right align
    • J: justify
    + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param mixed $link URL or identifier returned by AddLink(). + * @param int $stretch stretch carachter mode:
    • 0 = disabled
    • 1 = horizontal scaling only if necessary
    • 2 = forced horizontal scaling
    • 3 = character spacing only if necessary
    • 4 = forced character spacing
    + * @param boolean $ignore_min_height if true ignore automatic minimum height value. + * @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:
    • T : cell top
    • C : center
    • B : cell bottom
    • A : font top
    • L : font baseline
    • D : font bottom
    + * @param string $valign text vertical alignment inside the cell. Possible values are:
    • T : top
    • C : center
    • B : bottom
    + * @access public + * @since 1.0 + * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak() + */ + public function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') { + if (!$ignore_min_height) { + $min_cell_height = $this->FontSize * $this->cell_height_ratio; + if ($h < $min_cell_height) { + $h = $min_cell_height; + } + } + $this->checkPageBreak($h); + $this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch, $ignore_min_height, $calign, $valign)); + } + + /** + * Removes SHY characters from text. + * @param string $txt input string + * @return string without SHY characters. + * @access public + * @since (4.5.019) 2009-02-28 + */ + public function removeSHY($txt='') { + /* + * Unicode Data + * Name : SOFT HYPHEN, commonly abbreviated as SHY + * HTML Entity (decimal): ­ + * HTML Entity (hex): ­ + * HTML Entity (named): ­ + * How to type in Microsoft Windows: [Alt +00AD] or [Alt 0173] + * UTF-8 (hex): 0xC2 0xAD (c2ad) + * UTF-8 character: chr(194).chr(173) + */ + $txt = preg_replace('/([\\xc2]{1}[\\xad]{1})/', '', $txt); + if (!$this->isunicode) { + $txt = preg_replace('/([\\xad]{1})/', '', $txt); + } + return $txt; + } + + /** + * Returns the PDF string code to print a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
    + * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + * @param float $w Cell width. If 0, the cell extends up to the right margin. + * @param float $h Cell height. Default value: 0. + * @param string $txt String to print. Default value: empty string. + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    + * @param int $ln Indicates where the current position should go after the call. Possible values are:
    • 0: to the right (or left for RTL languages)
    • 1: to the beginning of the next line
    • 2: below
    Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param string $align Allows to center or align the text. Possible values are:
    • L or empty string: left align (default value)
    • C: center
    • R: right align
    • J: justify
    + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param mixed $link URL or identifier returned by AddLink(). + * @param int $stretch stretch carachter mode:
    • 0 = disabled
    • 1 = horizontal scaling only if necessary
    • 2 = forced horizontal scaling
    • 3 = character spacing only if necessary
    • 4 = forced character spacing
    + * @param boolean $ignore_min_height if true ignore automatic minimum height value. + * @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:
    • T : cell top
    • C : center
    • B : cell bottom
    • A : font top
    • L : font baseline
    • D : font bottom
    + * @param string $valign text vertical alignment inside the cell. Possible values are:
    • T : top
    • C : center
    • B : bottom
    + * @access protected + * @since 1.0 + * @see Cell() + */ + protected function getCellCode($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') { + $txt = $this->removeSHY($txt); + $rs = ''; //string to be returned + if (!$ignore_min_height) { + $min_cell_height = $this->FontSize * $this->cell_height_ratio; + if ($h < $min_cell_height) { + $h = $min_cell_height; + } + } + $k = $this->k; + $x = $this->x; + $y = $this->y; + // cell vertical alignment + switch ($calign) { + case 'A': { + // font top + switch ($valign) { + case 'T': { + // top + $y -= ($this->LineWidth / 2); + break; + } + case 'B': { + // bottom + $y -= ($h - $this->FontAscent - $this->FontDescent - ($this->LineWidth / 2)); + break; + } + default: + case 'M': { + // center + $y -= (($h - $this->FontAscent - $this->FontDescent) / 2); + break; + } + } + break; + } + case 'L': { + // font baseline + switch ($valign) { + case 'T': { + // top + $y -= ($this->FontAscent + ($this->LineWidth / 2)); + break; + } + case 'B': { + // bottom + $y -= ($h - $this->FontDescent - ($this->LineWidth / 2)); + break; + } + default: + case 'M': { + // center + $y -= (($h + $this->FontAscent - $this->FontDescent) / 2); + break; + } + } + break; + } + case 'D': { + // font bottom + switch ($valign) { + case 'T': { + // top + $y -= ($this->FontAscent + $this->FontDescent + ($this->LineWidth / 2)); + break; + } + case 'B': { + // bottom + $y -= ($h - ($this->LineWidth / 2)); + break; + } + default: + case 'M': { + // center + $y -= (($h + $this->FontAscent + $this->FontDescent) / 2); + break; + } + } + break; + } + case 'B': { + // cell bottom + $y -= $h; + break; + } + case 'C': { + // cell center + $y -= ($h / 2); + break; + } + default: + case 'T': { + // cell top + break; + } + } + // text vertical alignment + switch ($valign) { + case 'T': { + // top + $basefonty = $y + $this->FontAscent + ($this->LineWidth / 2); + break; + } + case 'B': { + // bottom + $basefonty = $y + $h - $this->FontDescent - ($this->LineWidth / 2); + break; + } + default: + case 'M': { + // center + $basefonty = $y + (($h + $this->FontAscent - $this->FontDescent) / 2); + break; + } + } + if ($this->empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $x; + } + } + $s = ''; + // fill and borders + if (($fill == 1) OR ($border == 1)) { + if ($fill == 1) { + $op = ($border == 1) ? 'B' : 'f'; + } else { + $op = 'S'; + } + if ($this->rtl) { + $xk = (($this->x - $w) * $k); + } else { + $xk = ($this->x * $k); + } + $s .= sprintf('%.2F %.2F %.2F %.2F re %s ', $xk, (($this->h - $y) * $k), ($w * $k), (-$h * $k), $op); + } + if (is_string($border)) { + $lm = ($this->LineWidth / 2); + if (strpos($border,'L') !== false) { + if ($this->rtl) { + $xk = ($x - $w) * $k; + } else { + $xk = $x * $k; + } + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - $y + $lm) * $k), $xk, (($this->h - ($y + $h + $lm)) * $k)); + } + if (strpos($border,'T') !== false) { + if ($this->rtl) { + $xk = ($x - $w + $lm) * $k; + $xwk = ($x - $lm) * $k; + } else { + $xk = ($x - $lm) * $k; + $xwk = ($x + $w + $lm) * $k; + } + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - $y) * $k), $xwk, (($this->h - $y) * $k)); + } + if (strpos($border,'R') !== false) { + if ($this->rtl) { + $xk = $x * $k; + } else { + $xk = ($x + $w) * $k; + } + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - $y + $lm) * $k), $xk, (($this->h - ($y + $h + $lm))* $k)); + } + if (strpos($border,'B') !== false) { + if ($this->rtl) { + $xk = ($x - $w + $lm) * $k; + $xwk = ($x - $lm) * $k; + } else { + $xk = ($x - $lm) * $k; + $xwk = ($x + $w + $lm) * $k; + } + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - ($y + $h)) * $k), $xwk, (($this->h - ($y + $h)) * $k)); + } + } + if ($txt != '') { + $txt2 = $txt; + if ($this->isunicode) { + if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) { + $txt2 = $this->UTF8ToLatin1($txt2); + } else { + $unicode = $this->UTF8StringToArray($txt); // array of UTF-8 unicode values + $unicode = $this->utf8Bidi($unicode, '', $this->tmprtl); + if (defined('K_THAI_TOPCHARS') AND (K_THAI_TOPCHARS == true)) { + // ---- Fix for bug #2977340 "Incorrect Thai characters position arrangement" ---- + // NOTE: this doesn't work with HTML justification + // Symbols that could overlap on the font top (only works in LTR) + $topchar = array(3611, 3613, 3615, 3650, 3651, 3652); // chars that extends on top + $topsym = array(3633, 3636, 3637, 3638, 3639, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662); // symbols with top position + $numchars = count($unicode); // number of chars + $unik = 0; + $uniblock = array(); + $uniblock[$unik] = array(); + $uniblock[$unik][] = $unicode[0]; + // resolve overlapping conflicts by splitting the string in several parts + for ($i = 1; $i < $numchars; ++$i) { + // check if symbols overlaps at top + if (in_array($unicode[$i], $topsym) AND (in_array($unicode[($i - 1)], $topsym) OR in_array($unicode[($i - 1)], $topchar))) { + // move symbols to another array + ++$unik; + $uniblock[$unik] = array(); + $uniblock[$unik][] = $unicode[$i]; + ++$unik; + $uniblock[$unik] = array(); + $unicode[$i] = 8203; // Unicode Character 'ZERO WIDTH SPACE' (U+200B) + } else { + $uniblock[$unik][] = $unicode[$i]; + } + } + // ---- END OF Fix for bug #2977340 + } + $txt2 = $this->arrUTF8ToUTF16BE($unicode, false); + } + } + $txt2 = $this->_escape($txt2); + // text length + $txwidth = $this->GetStringWidth($txt); + $width = $txwidth; + // ratio between cell length and text length + if ($width <= 0) { + $ratio = 1; + } else { + $ratio = ($w - (2 * $this->cMargin)) / $width; + } + // stretch text if required + if (($stretch > 0) AND (($ratio < 1) OR (($ratio > 1) AND (($stretch % 2) == 0)))) { + if ($stretch > 2) { + // spacing + //Calculate character spacing in points + $char_space = (($w - $width - (2 * $this->cMargin)) * $this->k) / max($this->GetNumChars($txt)-1,1); + //Set character spacing + $rs .= sprintf('BT %.2F Tc ET ', $char_space); + } else { + // scaling + //Calculate horizontal scaling + $horiz_scale = $ratio * 100.0; + //Set horizontal scaling + $rs .= sprintf('BT %.2F Tz ET ', $horiz_scale); + } + $align = ''; + $width = $w - (2 * $this->cMargin); + } else { + $stretch == 0; + } + if ($this->ColorFlag) { + $s .= 'q '.$this->TextColor.' '; + } + // rendering mode + $s .= sprintf('BT %d Tr %.2F w ET ', $this->textrendermode, $this->textstrokewidth); + // count number of spaces + $ns = substr_count($txt, ' '); + // Justification + $spacewidth = 0; + if (($align == 'J') AND ($ns > 0)) { + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + // get string width without spaces + $width = $this->GetStringWidth(str_replace(' ', '', $txt)); + // calculate average space width + $spacewidth = -1000 * ($w - $width - (2 * $this->cMargin)) / ($ns?$ns:1) / $this->FontSize; + // set word position to be used with TJ operator + $txt2 = str_replace(chr(0).chr(32), ') '.sprintf('%.3F', $spacewidth).' (', $txt2); + $unicode_justification = true; + } else { + // get string width + $width = $txwidth; + $spacewidth = (($w - $width - (2 * $this->cMargin)) / ($ns?$ns:1)) * $this->k; + // set word spacing + $rs .= sprintf('BT %.3F Tw ET ', $spacewidth); + } + $width = $w - (2 * $this->cMargin); + } + // replace carriage return characters + $txt2 = str_replace("\r", ' ', $txt2); + switch ($align) { + case 'C': { + $dx = ($w - $width) / 2; + break; + } + case 'R': { + if ($this->rtl) { + $dx = $this->cMargin; + } else { + $dx = $w - $width - $this->cMargin; + } + break; + } + case 'L': { + if ($this->rtl) { + $dx = $w - $width - $this->cMargin; + } else { + $dx = $this->cMargin; + } + break; + } + case 'J': + default: { + $dx = $this->cMargin; + break; + } + } + if ($this->rtl) { + $xdx = $this->x - $dx - $width; + } else { + $xdx = $this->x + $dx; + } + $xdk = $xdx * $k; + // print text + $s .= sprintf('BT %.2F %.2F Td [(%s)] TJ ET', $xdk, (($this->h - $basefonty) * $k), $txt2); + if (isset($uniblock)) { + // print overlapping characters as separate string + $xshift = 0; // horizontal shift + $ty = (($this->h - $basefonty + (0.2 * $this->FontSize)) * $k); + $spw = (($w - $txwidth - (2 * $this->cMargin)) / ($ns?$ns:1)); + foreach ($uniblock as $uk => $uniarr) { + if (($uk % 2) == 0) { + // x space to skip + if ($spacewidth != 0) { + // justification shift + $xshift += (count(array_keys($uniarr, 32)) * $spw); + } + $xshift += $this->GetArrStringWidth($uniarr); // + shift justification + } else { + // character to print + $topchr = $this->arrUTF8ToUTF16BE($uniarr, false); + $topchr = $this->_escape($topchr); + $s .= sprintf(' BT %.2F %.2F Td [(%s)] TJ ET', ($xdk + ($xshift * $k)), $ty, $topchr); + } + } + } + if ($this->underline) { + $s .= ' '.$this->_dounderlinew($xdx, $basefonty, $width); + } + if ($this->linethrough) { + $s .= ' '.$this->_dolinethroughw($xdx, $basefonty, $width); + } + if ($this->overline) { + $s .= ' '.$this->_dooverlinew($xdx, $basefonty, $width); + } + if ($this->ColorFlag) { + $s .= ' Q'; + } + if ($link) { + $this->Link($xdx, $y + (($h - $this->FontSize)/2), $width, $this->FontSize, $link, $ns); + } + } + // output cell + if ($s) { + // output cell + $rs .= $s; + // reset text stretching + if ($stretch > 2) { + //Reset character horizontal spacing + $rs .= ' BT 0 Tc ET'; + } elseif ($stretch > 0) { + //Reset character horizontal scaling + $rs .= ' BT 100 Tz ET'; + } + } + // reset word spacing + if (!(($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) AND ($align == 'J')) { + $rs .= ' BT 0 Tw ET'; + } + $this->lasth = $h; + if ($ln > 0) { + //Go to the beginning of the next line + $this->y = $y + $h; + if ($ln == 1) { + if ($this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + } + } else { + // go left or right by case + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + $gstyles = ''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor."\n"; + $rs = $gstyles.$rs; + return $rs; + } + + /** + * This method allows printing text with line breaks. + * They can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the \n character). As many cells as necessary are output, one below the other.
    + * Text can be aligned, centered or justified. The cell block can be framed and the background painted. + * @param float $w Width of cells. If 0, they extend up to the right margin of the page. + * @param float $h Cell minimum height. The cell extends automatically if needed. + * @param string $txt String to print + * @param mixed $border Indicates if borders must be drawn around the cell block. The value can be either a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    + * @param string $align Allows to center or align the text. Possible values are:
    • L or empty string: left align
    • C: center
    • R: right align
    • J: justification (default value when $ishtml=false)
    + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param int $ln Indicates where the current position should go after the call. Possible values are:
    • 0: to the right
    • 1: to the beginning of the next line [DEFAULT]
    • 2: below
    + * @param float $x x position in user units + * @param float $y y position in user units + * @param boolean $reseth if true reset the last cell height (default true). + * @param int $stretch stretch carachter mode:
    • 0 = disabled
    • 1 = horizontal scaling only if necessary
    • 2 = forced horizontal scaling
    • 3 = character spacing only if necessary
    • 4 = forced character spacing
    + * @param boolean $ishtml set to true if $txt is HTML content (default = false). + * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width. + * @param float $maxh maximum height. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. This feature works only when $ishtml=false. + * @return int Return the number of cells or 1 for html mode. + * @access public + * @since 1.3 + * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), Cell(), Write(), SetAutoPageBreak() + */ + public function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0) { + if ($this->empty_string($this->lasth) OR $reseth) { + //set row height + $this->lasth = $this->FontSize * $this->cell_height_ratio; + } + if (!$this->empty_string($y)) { + $this->SetY($y); + } else { + $y = $this->GetY(); + } + // check for page break + $this->checkPageBreak($h); + $y = $this->GetY(); + // get current page number + $startpage = $this->page; + if (!$this->empty_string($x)) { + $this->SetX($x); + } else { + $x = $this->GetX(); + } + if ($this->empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + } + // store original margin values + $lMargin = $this->lMargin; + $rMargin = $this->rMargin; + if ($this->rtl) { + $this->SetRightMargin($this->w - $this->x); + $this->SetLeftMargin($this->x - $w); + } else { + $this->SetLeftMargin($this->x); + $this->SetRightMargin($this->w - $this->x - $w); + } + $starty = $this->y; + if ($autopadding) { + // Adjust internal padding + if ($this->cMargin < ($this->LineWidth / 2)) { + $this->cMargin = ($this->LineWidth / 2); + } + // Add top space if needed + if (($this->lasth - $this->FontSize) < $this->LineWidth) { + $this->y += $this->LineWidth / 2; + } + // add top padding + $this->y += $this->cMargin; + } + if ($ishtml) { + // ******* Write HTML text + $this->writeHTML($txt, true, 0, $reseth, true, $align); + $nl = 1; + } else { + // ******* Write text + $nl = $this->Write($this->lasth, $txt, '', 0, $align, true, $stretch, false, true, $maxh); + } + if ($autopadding) { + // add bottom padding + $this->y += $this->cMargin; + // Add bottom space if needed + if (($this->lasth - $this->FontSize) < $this->LineWidth) { + $this->y += $this->LineWidth / 2; + } + } + // Get end-of-text Y position + $currentY = $this->y; + // get latest page number + $endpage = $this->page; + // check if a new page has been created + if ($endpage > $startpage) { + // design borders around HTML cells. + for ($page=$startpage; $page <= $endpage; ++$page) { + $this->setPage($page); + if ($page == $startpage) { + $this->y = $starty; // put cursor at the beginning of cell on the first page + $h = $this->getPageHeight() - $starty - $this->getBreakMargin(); + $cborder = $this->getBorderMode($border, $position='start'); + } elseif ($page == $endpage) { + $this->y = $this->tMargin; // put cursor at the beginning of last page + $h = $currentY - $this->tMargin; + $cborder = $this->getBorderMode($border, $position='end'); + } else { + $this->y = $this->tMargin; // put cursor at the beginning of the current page + $h = $this->getPageHeight() - $this->tMargin - $this->getBreakMargin(); + $cborder = $this->getBorderMode($border, $position='middle'); + } + $nx = $x; + // account for margin changes + if ($page > $startpage) { + if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) { + $nx = $x + ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']); + } elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) { + $nx = $x + ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']); + } + } + $this->SetX($nx); + $ccode = $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, false); + if ($cborder OR $fill) { + $pagebuff = $this->getPageBuffer($this->page); + $pstart = substr($pagebuff, 0, $this->intmrk[$this->page]); + $pend = substr($pagebuff, $this->intmrk[$this->page]); + $this->setPageBuffer($this->page, $pstart.$ccode."\n".$pend); + $this->intmrk[$this->page] += strlen($ccode."\n"); + } + } + } else { + $h = max($h, ($currentY - $y)); + // put cursor at the beginning of text + $this->SetY($y); + $this->SetX($x); + // design a cell around the text + $ccode = $this->getCellCode($w, $h, '', $border, 1, '', $fill, '', 0, true); + if ($border OR $fill) { + if (end($this->transfmrk[$this->page]) !== false) { + $pagemarkkey = key($this->transfmrk[$this->page]); + $pagemark = &$this->transfmrk[$this->page][$pagemarkkey]; + } elseif ($this->InFooter) { + $pagemark = &$this->footerpos[$this->page]; + } else { + $pagemark = &$this->intmrk[$this->page]; + } + $pagebuff = $this->getPageBuffer($this->page); + $pstart = substr($pagebuff, 0, $pagemark); + $pend = substr($pagebuff, $pagemark); + $this->setPageBuffer($this->page, $pstart.$ccode."\n".$pend); + $pagemark += strlen($ccode."\n"); + } + } + // Get end-of-cell Y position + $currentY = $this->GetY(); + // restore original margin values + $this->SetLeftMargin($lMargin); + $this->SetRightMargin($rMargin); + if ($ln > 0) { + //Go to the beginning of the next line + $this->SetY($currentY); + if ($ln == 2) { + $this->SetX($x + $w); + } + } else { + // go left or right by case + $this->setPage($startpage); + $this->y = $y; + $this->SetX($x + $w); + } + $this->setContentMark(); + return $nl; + } + + /** + * Get the border mode accounting for multicell position (opens bottom side of multicell crossing pages) + * @param mixed $border Indicates if borders must be drawn around the cell block. The value can be either a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    + * @param string multicell position: 'start', 'middle', 'end' + * @return border mode + * @access protected + * @since 4.4.002 (2008-12-09) + */ + protected function getBorderMode($border, $position='start') { + if ((!$this->opencell) AND ($border == 1)) { + return 1; + } + $cborder = ''; + switch ($position) { + case 'start': { + if ($border == 1) { + $cborder = 'LTR'; + } else { + if (!(false === strpos($border, 'L'))) { + $cborder .= 'L'; + } + if (!(false === strpos($border, 'T'))) { + $cborder .= 'T'; + } + if (!(false === strpos($border, 'R'))) { + $cborder .= 'R'; + } + if ((!$this->opencell) AND (!(false === strpos($border, 'B')))) { + $cborder .= 'B'; + } + } + break; + } + case 'middle': { + if ($border == 1) { + $cborder = 'LR'; + } else { + if (!(false === strpos($border, 'L'))) { + $cborder .= 'L'; + } + if ((!$this->opencell) AND (!(false === strpos($border, 'T')))) { + $cborder .= 'T'; + } + if (!(false === strpos($border, 'R'))) { + $cborder .= 'R'; + } + if ((!$this->opencell) AND (!(false === strpos($border, 'B')))) { + $cborder .= 'B'; + } + } + break; + } + case 'end': { + if ($border == 1) { + $cborder = 'LRB'; + } else { + if (!(false === strpos($border, 'L'))) { + $cborder .= 'L'; + } + if ((!$this->opencell) AND (!(false === strpos($border, 'T')))) { + $cborder .= 'T'; + } + if (!(false === strpos($border, 'R'))) { + $cborder .= 'R'; + } + if (!(false === strpos($border, 'B'))) { + $cborder .= 'B'; + } + } + break; + } + default: { + $cborder = $border; + break; + } + } + return $cborder; + } + + /** + * This method returns the estimated number of lines required to print the text (not the real number just a quick estimation). + * If you want o know the exact number of lines you have to use the following technique: + *
    +		 *  // store current object
    +		 *  $pdf->startTransaction();
    +		 *  // get the number of lines for multicell
    +		 *  $lines = $pdf->MultiCell($w, 0, $txt, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
    +		 *  // restore previous object
    +		 *  $pdf = $pdf->rollbackTransaction();
    +		 * 
    + * @param string $txt text to print + * @param float $w width of cell. If 0, they extend up to the right margin of the page. + * @return int Return the estimated number of lines. + * @access public + * @since 4.5.011 + */ + public function getNumLines($txt, $w=0) { + $lines = 0; + if ($this->empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + } + // max column width + $wmax = $w - (2 * $this->cMargin); + // remove carriage returns + $txt = str_replace("\r", '', $txt); + // remove last newline (if any) + if (substr($txt,-1) == "\n") { + $txt = substr($txt, 0, -1); + } + // divide text in blocks + $txtblocks = explode("\n", $txt); + // for each text block + foreach ($txtblocks as $block) { + // estimate the number of lines + $lines += $this->empty_string($block) ? 1 : (ceil($this->GetStringWidth($block) / $wmax)); + } + // return the number of lines + return $lines; + } + + /** + * This method prints text from the current position.
    + * @param float $h Line height + * @param string $txt String to print + * @param mixed $link URL or identifier returned by AddLink() + * @param int $fill Indicates if the background must be painted (1) or transparent (0). Default value: 0. + * @param string $align Allows to center or align the text. Possible values are:
    • L or empty string: left align (default value)
    • C: center
    • R: right align
    • J: justify
    + * @param boolean $ln if true set cursor at the bottom of the line, otherwise set cursor at the top of the line. + * @param int $stretch stretch carachter mode:
    • 0 = disabled
    • 1 = horizontal scaling only if necessary
    • 2 = forced horizontal scaling
    • 3 = character spacing only if necessary
    • 4 = forced character spacing
    + * @param boolean $firstline if true prints only the first line and return the remaining string. + * @param boolean $firstblock if true the string is the starting of a line. + * @param float $maxh maximum height. The remaining unprinted text will be returned. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. + * @return mixed Return the number of cells or the remaining string if $firstline = true. + * @access public + * @since 1.5 + */ + public function Write($h, $txt, $link='', $fill=0, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0) { + if (strlen($txt) == 0) { + $txt = ' '; + } + // remove carriage returns + $s = str_replace("\r", '', $txt); + // check if string contains arabic text + if (preg_match(K_RE_PATTERN_ARABIC, $s)) { + $arabic = true; + } else { + $arabic = false; + } + // check if string contains RTL text + if ($arabic OR ($this->tmprtl == 'R') OR preg_match(K_RE_PATTERN_RTL, $txt)) { + $rtlmode = true; + } else { + $rtlmode = false; + } + // get a char width + $chrwidth = $this->GetCharWidth('.'); + // get array of unicode values + $chars = $this->UTF8StringToArray($s); + // get array of chars + $uchars = $this->UTF8ArrayToUniArray($chars); + // get the number of characters + $nb = count($chars); + // replacement for SHY character (minus symbol) + $shy_replacement = 45; + $shy_replacement_char = $this->unichr($shy_replacement); + // widht for SHY replacement + $shy_replacement_width = $this->GetCharWidth($shy_replacement); + // store current position + $prevx = $this->x; + $prevy = $this->y; + // max Y + $maxy = $this->y + $maxh - $h - (2 * $this->cMargin); + // calculate remaining line width ($w) + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + // max column width + $wmax = $w - (2 * $this->cMargin); + if ((!$firstline) AND (($chrwidth > $wmax) OR ($this->GetCharWidth($chars[0]) > $wmax))) { + // a single character do not fit on column + return ''; + } + $i = 0; // character position + $j = 0; // current starting position + $sep = -1; // position of the last blank space + $shy = false; // true if the last blank is a soft hypen (SHY) + $l = 0; // current string length + $nl = 0; //number of lines + $linebreak = false; + $pc = 0; // previous character + // for each character + while ($i < $nb) { + if (($maxh > 0) AND ($this->y >= $maxy) ) { + break; + } + //Get the current character + $c = $chars[$i]; + if ($c == 10) { // 10 = "\n" = new line + //Explicit line break + if ($align == 'J') { + if ($this->rtl) { + $talign = 'R'; + } else { + $talign = 'L'; + } + } else { + $talign = $align; + } + $tmpstr = $this->UniArrSubString($uchars, $j, $i); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($i - $j)); + if ($rtlmode) { + $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew; + } else { + $this->endlinex = $startx + $linew; + } + $w = $linew; + $tmpcmargin = $this->cMargin; + if ($maxh == 0) { + $this->cMargin = 0; + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = rtrim($tmpstr); + } + $this->Cell($w, $h, $tmpstr, 0, 1, $talign, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + $this->cMargin = $tmpcmargin; + return ($this->UniArrSubString($uchars, $i)); + } + ++$nl; + $j = $i + 1; + $l = 0; + $sep = -1; + $shy = false; + // account for margin changes + if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND (!$this->InFooter)) { + // AcceptPageBreak() may be overriden on extended classed to include margin changes + $this->AcceptPageBreak(); + } + $w = $this->getRemainingWidth(); + $wmax = $w - (2 * $this->cMargin); + } else { + // 160 is the non-breaking space. + // 173 is SHY (Soft Hypen). + // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator. + // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants. + // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between. + if (($c != 160) AND (($c == 173) OR preg_match($this->re_spaces, $this->unichr($c)))) { + // update last blank space position + $sep = $i; + // check if is a SHY + if ($c == 173) { + $shy = true; + if ($pc == 45) { + $tmp_shy_replacement_width = 0; + $tmp_shy_replacement_char = ''; + } else { + $tmp_shy_replacement_width = $shy_replacement_width; + $tmp_shy_replacement_char = $shy_replacement_char; + } + } else { + $shy = false; + } + } + // update string length + if ((($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) AND ($arabic)) { + // with bidirectional algorithm some chars may be changed affecting the line length + // *** very slow *** + $l = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, ($i - $j)), '', $this->tmprtl)); + } else { + $l += $this->GetCharWidth($c); + } + if (($l > $wmax) OR (($c == 173) AND (($l + $tmp_shy_replacement_width) > $wmax)) ) { + // we have reached the end of column + if ($sep == -1) { + // check if the line was already started + if (($this->rtl AND ($this->x <= ($this->w - $this->rMargin - $chrwidth))) + OR ((!$this->rtl) AND ($this->x >= ($this->lMargin + $chrwidth)))) { + // print a void cell and go to next line + $this->Cell($w, $h, '', 0, 1); + $linebreak = true; + if ($firstline) { + return ($this->UniArrSubString($uchars, $j)); + } + } else { + // truncate the word because do not fit on column + $tmpstr = $this->UniArrSubString($uchars, $j, $i); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($i - $j)); + if ($rtlmode) { + $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew; + } else { + $this->endlinex = $startx + $linew; + } + $w = $linew; + $tmpcmargin = $this->cMargin; + if ($maxh == 0) { + $this->cMargin = 0; + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = rtrim($tmpstr); + } + $this->Cell($w, $h, $tmpstr, 0, 1, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + $this->cMargin = $tmpcmargin; + return ($this->UniArrSubString($uchars, $i)); + } + $j = $i; + --$i; + } + } else { + // word wrapping + if ($this->rtl AND (!$firstblock)) { + $endspace = 1; + } else { + $endspace = 0; + } + if ($shy) { + // add hypen (minus symbol) at the end of the line + $shy_width = $tmp_shy_replacement_width; + if ($this->rtl) { + $shy_char_left = $tmp_shy_replacement_char; + $shy_char_right = ''; + } else { + $shy_char_left = ''; + $shy_char_right = $tmp_shy_replacement_char; + } + } else { + $shy_width = 0; + $shy_char_left = ''; + $shy_char_right = ''; + } + $tmpstr = $this->UniArrSubString($uchars, $j, ($sep + $endspace)); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, (($sep + $endspace) - $j)); + if ($rtlmode) { + $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew - $shy_width; + } else { + $this->endlinex = $startx + $linew + $shy_width; + } + $w = $linew; + $tmpcmargin = $this->cMargin; + if ($maxh == 0) { + $this->cMargin = 0; + } + } + // print the line + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = rtrim($tmpstr); + } + $this->Cell($w, $h, $shy_char_left.$tmpstr.$shy_char_right, 0, 1, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + // return the remaining text + $this->cMargin = $tmpcmargin; + return ($this->UniArrSubString($uchars, ($sep + $endspace))); + } + $i = $sep; + $sep = -1; + $shy = false; + $j = ($i+1); + } + // account for margin changes + if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND (!$this->InFooter)) { + // AcceptPageBreak() may be overriden on extended classed to include margin changes + $this->AcceptPageBreak(); + } + $w = $this->getRemainingWidth(); + $wmax = $w - (2 * $this->cMargin); + if ($linebreak) { + $linebreak = false; + } else { + ++$nl; + $l = 0; + } + } + } + // save last character + $pc = $c; + ++$i; + } // end while i < nb + // print last substring (if any) + if ($l > 0) { + switch ($align) { + case 'J': + case 'C': { + $w = $w; + break; + } + case 'L': { + if ($this->rtl) { + $w = $w; + } else { + $w = $l; + } + break; + } + case 'R': { + if ($this->rtl) { + $w = $l; + } else { + $w = $w; + } + break; + } + default: { + $w = $l; + break; + } + } + $tmpstr = $this->UniArrSubString($uchars, $j, $nb); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($nb - $j)); + if ($rtlmode) { + $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew; + } else { + $this->endlinex = $startx + $linew; + } + $w = $linew; + $tmpcmargin = $this->cMargin; + if ($maxh == 0) { + $this->cMargin = 0; + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = rtrim($tmpstr); + } + $this->Cell($w, $h, $tmpstr, 0, $ln, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + $this->cMargin = $tmpcmargin; + return ($this->UniArrSubString($uchars, $nb)); + } + ++$nl; + } + if ($firstline) { + return ''; + } + return $nl; + } + + /** + * Returns the remaining width between the current position and margins. + * @return int Return the remaining width + * @access protected + */ + protected function getRemainingWidth() { + if ($this->rtl) { + return ($this->x - $this->lMargin); + } else { + return ($this->w - $this->rMargin - $this->x); + } + } + + /** + * Extract a slice of the $strarr array and return it as string. + * @param string $strarr The input array of characters. + * @param int $start the starting element of $strarr. + * @param int $end first element that will not be returned. + * @return Return part of a string + * @access public + */ + public function UTF8ArrSubString($strarr, $start='', $end='') { + if (strlen($start) == 0) { + $start = 0; + } + if (strlen($end) == 0) { + $end = count($strarr); + } + $string = ''; + for ($i=$start; $i < $end; ++$i) { + $string .= $this->unichr($strarr[$i]); + } + return $string; + } + + /** + * Extract a slice of the $uniarr array and return it as string. + * @param string $uniarr The input array of characters. + * @param int $start the starting element of $strarr. + * @param int $end first element that will not be returned. + * @return Return part of a string + * @access public + * @since 4.5.037 (2009-04-07) + */ + public function UniArrSubString($uniarr, $start='', $end='') { + if (strlen($start) == 0) { + $start = 0; + } + if (strlen($end) == 0) { + $end = count($uniarr); + } + $string = ''; + for ($i=$start; $i < $end; ++$i) { + $string .= $uniarr[$i]; + } + return $string; + } + + /** + * Convert an array of UTF8 values to array of unicode characters + * @param string $ta The input array of UTF8 values. + * @return Return array of unicode characters + * @access public + * @since 4.5.037 (2009-04-07) + */ + public function UTF8ArrayToUniArray($ta) { + return array_map(array($this, 'unichr'), $ta); + } + + /** + * Returns the unicode caracter specified by UTF-8 value + * @param int $c UTF-8 value + * @return Returns the specified character. + * @author Miguel Perez, Nicola Asuni + * @access public + * @since 2.3.000 (2008-03-05) + */ + public function unichr($c) { + if (is_numeric($c)) + { + if (!$this->isunicode) { + return chr($c); + } elseif ($c <= 0x7F) { + // one byte + return chr( $c); + } elseif ($c <= 0x7FF) { + // two bytes + return chr(0xC0 | $c >> 6).chr(0x80 | $c & 0x3F); + } elseif ($c <= 0xFFFF) { + // three bytes + return chr(0xE0 | $c >> 12).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F); + } elseif ($c <= 0x10FFFF) { + // four bytes + return chr(0xF0 | $c >> 18).chr(0x80 | $c >> 12 & 0x3F).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F); + } else { + return ''; + } + } + } + + /** + * Return the image type given the file name or array returned by getimagesize() function. + * @param string $imgfile image file name + * @param array $iminfo array of image information returned by getimagesize() function. + * @return string image type + * @since 4.8.017 (2009-11-27) + */ + public function getImageFileType($imgfile, $iminfo=array()) { + if (isset($iminfo['mime']) AND !empty($iminfo['mime'])) { + $mime = explode('/', $iminfo['mime']); + if ((count($mime) > 1) AND ($mime[0] == 'image') AND (!empty($mime[1]))) { + return trim($mime[1]); + } + } + $type = ''; + $fileinfo = pathinfo($imgfile); + if (isset($fileinfo['extension']) AND (!$this->empty_string($fileinfo['extension']))) { + $type = strtolower(trim($fileinfo['extension'])); + } + if ($type == 'jpg') { + $type = 'jpeg'; + } + return $type; + } + + /** + * Puts an image in the page. + * The upper-left corner must be given. + * The dimensions can be specified in different ways:
      + *
    • explicit width and height (expressed in user unit)
    • + *
    • one explicit dimension, the other being calculated automatically in order to keep the original proportions
    • + *
    • no explicit dimension, in which case the image is put at 72 dpi
    + * Supported formats are JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM; + * The format can be specified explicitly or inferred from the file extension.
    + * It is possible to put a link on the image.
    + * Remark: if an image is used several times, only one copy will be embedded in the file.
    + * @param string $file Name of the file containing the image. + * @param float $x Abscissa of the upper-left corner. + * @param float $y Ordinate of the upper-left corner. + * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension. + * @param mixed $link URL or identifier returned by AddLink(). + * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
    • T: top-right for LTR or top-left for RTL
    • M: middle-right for LTR or middle-left for RTL
    • B: bottom-right for LTR or bottom-left for RTL
    • N: next line
    + * @param mixed $resize If true resize (reduce) the image to fit $w and $h (requires GD or ImageMagick library); if false do not resize; if 2 force resize in all cases (upscaling and downscaling). + * @param int $dpi dot-per-inch resolution used on resize + * @param string $palign Allows to center or align the image on the current line. Possible values are:
    • L : left align
    • C : center
    • R : right align
    • '' : empty string : left for LTR or right for RTL
    + * @param boolean $ismask true if this image is a mask, false otherwise + * @param mixed $imgmask image object returned by this function or false + * @param mixed $border Indicates if borders must be drawn around the image. The value can be either a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    + * @param boolean $fitbox If true scale image dimensions proportionally to fit within the ($w, $h) box. + * @param boolean $hidden if true do not display the image. + * @param boolean $fitonpage if true the image is resized to not exceed page dimensions. + * @return image information + * @access public + * @since 1.1 + */ + public function Image($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // get image dimensions + $imsize = @getimagesize($file); + if ($imsize === FALSE) { + // encode spaces on filename + $file = str_replace(' ', '%20', $file); + $imsize = @getimagesize($file); + if ($imsize === FALSE) { + if (($w > 0) AND ($h > 0)) { + $pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k; + $ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k; + $imsize = array($pw, $ph); + } else { + $this->Error('[Image] Unable to get image width and height: '.$file); + } + } + } + // get original image width and height in pixels + list($pixw, $pixh) = $imsize; + // calculate image width and height on document + if (($w <= 0) AND ($h <= 0)) { + // convert image size to document unit + $w = $this->pixelsToUnits($pixw); + $h = $this->pixelsToUnits($pixh); + } elseif ($w <= 0) { + $w = $h * $pixw / $pixh; + } elseif ($h <= 0) { + $h = $w * $pixh / $pixw; + } elseif ($fitbox AND ($w > 0) AND ($h > 0)) { + // scale image dimensions proportionally to fit within the ($w, $h) box + if ((($w * $pixh) / ($h * $pixw)) < 1) { + $h = $w * $pixh / $pixw; + } else { + $w = $h * $pixw / $pixh; + } + } + // Check whether we need a new page first as this does not fit + $prev_x = $this->x; + if ($this->checkPageBreak($h, $y)) { + $y = $this->y; + if ($this->rtl) { + $x += ($prev_x - $this->x); + } else { + $x += ($this->x - $prev_x); + } + } + // resize image to be contained on a single page + if ($fitonpage) { + $ratio_wh = $w / $h; + if (($y + $h) > $this->PageBreakTrigger) { + $h = $this->PageBreakTrigger - $y; + $w = $h * $ratio_wh; + } + if (($x + $w) > ($this->w - $this->rMargin)) { + $w = $this->w - $this->rMargin - $x; + $h = $w / $ratio_wh; + } + } + // calculate new minimum dimensions in pixels + $neww = round($w * $this->k * $dpi / $this->dpi); + $newh = round($h * $this->k * $dpi / $this->dpi); + // check if resize is necessary (resize is used only to reduce the image) + $newsize = ($neww * $newh); + $pixsize = ($pixw * $pixh); + if (intval($resize) == 2) { + $resize = true; + } elseif ($newsize >= $pixsize) { + $resize = false; + } + // check if image has been already added on document + $newimage = true; + if (in_array($file, $this->imagekeys)) { + $newimage = false; + // get existing image data + $info = $this->getImageBuffer($file); + // check if the newer image is larger + $oldsize = ($info['w'] * $info['h']); + if ((($oldsize < $newsize) AND ($resize)) OR (($oldsize < $pixsize) AND (!$resize))) { + $newimage = true; + } + } + if ($newimage) { + //First use of image, get info + if ($type == '') { + $type = $this->getImageFileType($file, $imsize); + } + $mqr = $this->get_mqr(); + $this->set_mqr(false); + // Specific image handlers + $mtd = '_parse'.$type; + // GD image handler function + $gdfunction = 'imagecreatefrom'.$type; + $info = false; + if ((method_exists($this, $mtd)) AND (!($resize AND function_exists($gdfunction)))) { + // TCPDF image functions + $info = $this->$mtd($file); + if ($info == 'pngalpha') { + return $this->ImagePngAlpha($file, $x, $y, $w, $h, 'PNG', $link, $align, $resize, $dpi, $palign); + } + } + if (!$info) { + if (function_exists($gdfunction)) { + // GD library + $img = $gdfunction($file); + if ($resize) { + $imgr = imagecreatetruecolor($neww, $newh); + if (($type == 'gif') OR ($type == 'png')) { + $imgr = $this->_setGDImageTransparency($imgr, $img); + } + imagecopyresampled($imgr, $img, 0, 0, 0, 0, $neww, $newh, $pixw, $pixh); + if (($type == 'gif') OR ($type == 'png')) { + $info = $this->_toPNG($imgr); + } else { + $info = $this->_toJPEG($imgr); + } + } else { + if (($type == 'gif') OR ($type == 'png')) { + $info = $this->_toPNG($img); + } else { + $info = $this->_toJPEG($img); + } + } + } elseif (extension_loaded('imagick')) { + // ImageMagick library + $img = new Imagick(); + if ($type == 'SVG') { + // get SBG file content + $svgimg = file_get_contents($file); + // get width and height + $regs = array(); + if (preg_match('/]*)>/si', $svgimg, $regs)) { + $tmp = array(); + if (preg_match('/[\s]+width[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $ow = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false) * $dpi / 72; + $svgimg = preg_replace('/[\s]+width[\s]*=[\s]*"[^"]*"/si', ' width="'.$ow.$this->pdfunit.'"', $svgimg); + } + $tmp = array(); + if (preg_match('/[\s]+height[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $oh = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false) * $dpi / 72; + $svgimg = preg_replace('/[\s]+height[\s]*=[\s]*"[^"]*"/si', ' height="'.$oh.$this->pdfunit.'"', $svgimg); + } + $tmp = array(); + if (!preg_match('/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si', $regs[1], $tmp)) { + $vbw = $ow * (72 / $dpi) * $this->imgscale * $this->k; + $vbh = $oh * (72 / $dpi) * $this->imgscale * $this->k; + $svgimg = preg_replace('/readImageBlob($svgimg); + } else { + $img->readImage($file); + } + if ($resize) { + $img->resizeImage($neww, $newh, 10, 1, false); + } + $img->setCompressionQuality($this->jpeg_quality); + $img->setImageFormat('jpeg'); + $tempname = tempnam(K_PATH_CACHE, 'jpg_'); + $img->writeImage($tempname); + $info = $this->_parsejpeg($tempname); + unlink($tempname); + $img->destroy(); + } else { + return; + } + } + if ($info === false) { + //If false, we cannot process image + return; + } + $this->set_mqr($mqr); + if ($ismask) { + // force grayscale + $info['cs'] = 'DeviceGray'; + } + $info['i'] = $this->numimages; + if (!in_array($file, $this->imagekeys)) { + ++$info['i']; + } + if ($imgmask !== false) { + $info['masked'] = $imgmask; + } + // add image to document + $this->setImageBuffer($file, $info); + } + // set alignment + $this->img_rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $this->w - $x - $w; + } + $this->img_rb_x = $ximg; + } else { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x; + } + $this->img_rb_x = $ximg + $w; + } + if ($ismask OR $hidden) { + // image is not displayed + return $info['i']; + } + $xkimg = $ximg * $this->k; + $this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q', ($w * $this->k), ($h * $this->k), $xkimg, (($this->h - ($y + $h)) * $this->k), $info['i'])); + if (!empty($border)) { + $bx = $x; + $by = $y; + $this->x = $ximg; + if ($this->rtl) { + $this->x += $w; + } + $this->y = $y; + $this->Cell($w, $h, '', $border, 0, '', 0, '', 0); + $this->x = $bx; + $this->y = $by; + } + if ($link) { + $this->Link($ximg, $y, $w, $h, $link, 0); + } + // set pointer to align the successive text/objects + switch($align) { + case 'T': { + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M': { + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B': { + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N': { + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + $this->endlinex = $this->img_rb_x; + return $info['i']; + } + + /** + * Sets the current active configuration setting of magic_quotes_runtime (if the set_magic_quotes_runtime function exist) + * @param boolean $mqr FALSE for off, TRUE for on. + * @since 4.6.025 (2009-08-17) + */ + public function set_mqr($mqr) { + if(!defined('PHP_VERSION_ID')) { + $version = PHP_VERSION; + define('PHP_VERSION_ID', (($version[0] * 10000) + ($version[2] * 100) + $version[4])); + } + if (PHP_VERSION_ID < 50300) { + @set_magic_quotes_runtime($mqr); + } + } + + /** + * Gets the current active configuration setting of magic_quotes_runtime (if the get_magic_quotes_runtime function exist) + * @return Returns 0 if magic quotes runtime is off or get_magic_quotes_runtime doesn't exist, 1 otherwise. + * @since 4.6.025 (2009-08-17) + */ + public function get_mqr() { + if(!defined('PHP_VERSION_ID')) { + $version = PHP_VERSION; + define('PHP_VERSION_ID', (($version[0] * 10000) + ($version[2] * 100) + $version[4])); + } + if (PHP_VERSION_ID < 50300) { + return @get_magic_quotes_runtime(); + } + return 0; + } + + /** + * Convert the loaded image to a JPEG and then return a structure for the PDF creator. + * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant. + * @param string $file Image file name. + * @param image $image Image object. + * return image JPEG image object. + * @access protected + */ + protected function _toJPEG($image) { + $tempname = tempnam(K_PATH_CACHE, 'jpg_'); + imagejpeg($image, $tempname, $this->jpeg_quality); + imagedestroy($image); + $retvars = $this->_parsejpeg($tempname); + // tidy up by removing temporary image + unlink($tempname); + return $retvars; + } + + /** + * Convert the loaded image to a PNG and then return a structure for the PDF creator. + * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant. + * @param string $file Image file name. + * @param image $image Image object. + * return image PNG image object. + * @access protected + * @since 4.9.016 (2010-04-20) + */ + protected function _toPNG($image) { + $tempname = tempnam(K_PATH_CACHE, 'jpg_'); + imagepng($image, $tempname); + imagedestroy($image); + $retvars = $this->_parsepng($tempname); + // tidy up by removing temporary image + unlink($tempname); + return $retvars; + } + + /** + * Set the transparency for the given GD image. + * @param image $new_image GD image object + * @param image $image GD image object. + * return GD image object. + * @access protected + * @since 4.9.016 (2010-04-20) + */ + protected function _setGDImageTransparency($new_image, $image) { + // transparency index + $tid = imagecolortransparent($image); + // default transparency color + $tcol = array('red' => 255, 'green' => 255, 'blue' => 255); + if ($tid >= 0) { + // get the colors for the transparency index + $tcol = imagecolorsforindex($image, $tid); + } + $tid = imagecolorallocate($new_image, $tcol['red'], $tcol['green'], $tcol['blue']); + imagefill($new_image, 0, 0, $tid); + imagecolortransparent($new_image, $tid); + return $new_image; + } + + /** + * Extract info from a JPEG file without using the GD library. + * @param string $file image file to parse + * @return array structure containing the image data + * @access protected + */ + protected function _parsejpeg($file) { + $a = getimagesize($file); + if (empty($a)) { + $this->Error('Missing or incorrect image file: '.$file); + } + if ($a[2] != 2) { + $this->Error('Not a JPEG file: '.$file); + } + if ((!isset($a['channels'])) OR ($a['channels'] == 3)) { + $colspace = 'DeviceRGB'; + } elseif ($a['channels'] == 4) { + $colspace = 'DeviceCMYK'; + } else { + $colspace = 'DeviceGray'; + } + $bpc = isset($a['bits']) ? $a['bits'] : 8; + $data = file_get_contents($file); + return array('w' => $a[0], 'h' => $a[1], 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'DCTDecode', 'data' => $data); + } + + /** + * Extract info from a PNG file without using the GD library. + * @param string $file image file to parse + * @return array structure containing the image data + * @access protected + */ + protected function _parsepng($file) { + $f = fopen($file, 'rb'); + if ($f === false) { + $this->Error('Can\'t open image file: '.$file); + } + //Check signature + if (fread($f, 8) != chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) { + $this->Error('Not a PNG file: '.$file); + } + //Read header chunk + fread($f, 4); + if (fread($f, 4) != 'IHDR') { + $this->Error('Incorrect PNG file: '.$file); + } + $w = $this->_freadint($f); + $h = $this->_freadint($f); + $bpc = ord(fread($f, 1)); + if ($bpc > 8) { + //$this->Error('16-bit depth not supported: '.$file); + fclose($f); + return false; + } + $ct = ord(fread($f, 1)); + if ($ct == 0) { + $colspace = 'DeviceGray'; + } elseif ($ct == 2) { + $colspace = 'DeviceRGB'; + } elseif ($ct == 3) { + $colspace = 'Indexed'; + } else { + // alpha channel + fclose($f); + return 'pngalpha'; + } + if (ord(fread($f, 1)) != 0) { + //$this->Error('Unknown compression method: '.$file); + fclose($f); + return false; + } + if (ord(fread($f, 1)) != 0) { + //$this->Error('Unknown filter method: '.$file); + fclose($f); + return false; + } + if (ord(fread($f, 1)) != 0) { + //$this->Error('Interlacing not supported: '.$file); + fclose($f); + return false; + } + fread($f, 4); + $parms = '/DecodeParms <>'; + //Scan chunks looking for palette, transparency and image data + $pal = ''; + $trns = ''; + $data = ''; + do { + $n = $this->_freadint($f); + $type = fread($f, 4); + if ($type == 'PLTE') { + //Read palette + $pal = $this->rfread($f, $n); + fread($f, 4); + } elseif ($type == 'tRNS') { + //Read transparency info + $t = $this->rfread($f, $n); + if ($ct == 0) { + $trns = array(ord(substr($t, 1, 1))); + } elseif ($ct == 2) { + $trns = array(ord(substr($t, 1, 1)), ord(substr($t, 3, 1)), ord(substr($t, 5, 1))); + } else { + $pos = strpos($t, chr(0)); + if ($pos !== false) { + $trns = array($pos); + } + } + fread($f, 4); + } elseif ($type == 'IDAT') { + //Read image data block + $data .= $this->rfread($f, $n); + fread($f, 4); + } elseif ($type == 'IEND') { + break; + } else { + $this->rfread($f, $n + 4); + } + } while ($n); + if (($colspace == 'Indexed') AND (empty($pal))) { + //$this->Error('Missing palette in '.$file); + fclose($f); + return false; + } + fclose($f); + return array('w' => $w, 'h' => $h, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'FlateDecode', 'parms' => $parms, 'pal' => $pal, 'trns' => $trns, 'data' => $data); + } + + /** + * Binary-safe and URL-safe file read. + * Reads up to length bytes from the file pointer referenced by handle. Reading stops as soon as one of the following conditions is met: length bytes have been read; EOF (end of file) is reached. + * @param resource $handle + * @param int $length + * @return Returns the read string or FALSE in case of error. + * @author Nicola Asuni + * @access protected + * @since 4.5.027 (2009-03-16) + */ + protected function rfread($handle, $length) { + $data = fread($handle, $length); + if ($data === false) { + return false; + } + $rest = $length - strlen($data); + if ($rest > 0) { + $data .= $this->rfread($handle, $rest); + } + return $data; + } + + /** + * Extract info from a PNG image with alpha channel using the GD library. + * @param string $file Name of the file containing the image. + * @param float $x Abscissa of the upper-left corner. + * @param float $y Ordinate of the upper-left corner. + * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension. + * @param mixed $link URL or identifier returned by AddLink(). + * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
    • T: top-right for LTR or top-left for RTL
    • M: middle-right for LTR or middle-left for RTL
    • B: bottom-right for LTR or bottom-left for RTL
    • N: next line
    + * @param boolean $resize If true resize (reduce) the image to fit $w and $h (requires GD library). + * @param int $dpi dot-per-inch resolution used on resize + * @param string $palign Allows to center or align the image on the current line. Possible values are:
    • L : left align
    • C : center
    • R : right align
    • '' : empty string : left for LTR or right for RTL
    + * @author Valentin Schmidt, Nicola Asuni + * @access protected + * @since 4.3.007 (2008-12-04) + * @see Image() + */ + protected function ImagePngAlpha($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='') { + // get image size + list($wpx, $hpx) = getimagesize($file); + // generate images + $img = imagecreatefrompng($file); + $imgalpha = imagecreate($wpx, $hpx); + // generate gray scale pallete + for ($c = 0; $c < 256; ++$c) { + ImageColorAllocate($imgalpha, $c, $c, $c); + } + // extract alpha channel + for ($xpx = 0; $xpx < $wpx; ++$xpx) { + for ($ypx = 0; $ypx < $hpx; ++$ypx) { + $colorindex = imagecolorat($img, $xpx, $ypx); + $col = imagecolorsforindex($img, $colorindex); + imagesetpixel($imgalpha, $xpx, $ypx, $this->getGDgamma((127 - $col['alpha']) * 255 / 127)); + } + } + // create temp alpha file + $tempfile_alpha = tempnam(K_PATH_CACHE, 'mska_'); + imagepng($imgalpha, $tempfile_alpha); + imagedestroy($imgalpha); + // extract image without alpha channel + $imgplain = imagecreatetruecolor($wpx, $hpx); + imagecopy($imgplain, $img, 0, 0, 0, 0, $wpx, $hpx); + // create temp image file + $tempfile_plain = tempnam(K_PATH_CACHE, 'mskp_'); + imagepng($imgplain, $tempfile_plain); + imagedestroy($imgplain); + // embed mask image + $imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false); + // embed image, masked with previously embedded mask + $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask); + // remove temp files + unlink($tempfile_alpha); + unlink($tempfile_plain); + } + + /** + * Correct the gamma value to be used with GD library + * @param float $v the gamma value to be corrected + * @access protected + * @since 4.3.007 (2008-12-04) + */ + protected function getGDgamma($v) { + return (pow(($v / 255), 2.2) * 255); + } + + /** + * Performs a line break. + * The current abscissa goes back to the left margin and the ordinate increases by the amount passed in parameter. + * @param float $h The height of the break. By default, the value equals the height of the last printed cell. + * @param boolean $cell if true add a cMargin to the x coordinate + * @access public + * @since 1.0 + * @see Cell() + */ + public function Ln($h='', $cell=false) { + if (($this->num_columns > 0) AND ($this->y == $this->columns[$this->current_column]['y']) AND isset($this->columns[$this->current_column]['x']) AND ($this->x == $this->columns[$this->current_column]['x'])) { + // revove vertical space from the top of the column + return; + } + if ($cell) { + $cellmargin = $this->cMargin; + } else { + $cellmargin = 0; + } + if ($this->rtl) { + $this->x = $this->w - $this->rMargin - $cellmargin; + } else { + $this->x = $this->lMargin + $cellmargin; + } + if (is_string($h)) { + $this->y += $this->lasth; + } else { + $this->y += $h; + } + $this->newline = true; + } + + /** + * Returns the relative X value of current position. + * The value is relative to the left border for LTR languages and to the right border for RTL languages. + * @return float + * @access public + * @since 1.2 + * @see SetX(), GetY(), SetY() + */ + public function GetX() { + //Get x position + if ($this->rtl) { + return ($this->w - $this->x); + } else { + return $this->x; + } + } + + /** + * Returns the absolute X value of current position. + * @return float + * @access public + * @since 1.2 + * @see SetX(), GetY(), SetY() + */ + public function GetAbsX() { + return $this->x; + } + + /** + * Returns the ordinate of the current position. + * @return float + * @access public + * @since 1.0 + * @see SetY(), GetX(), SetX() + */ + public function GetY() { + return $this->y; + } + + /** + * Defines the abscissa of the current position. + * If the passed value is negative, it is relative to the right of the page (or left if language is RTL). + * @param float $x The value of the abscissa. + * @param boolean $rtloff if true always uses the page top-left corner as origin of axis. + * @access public + * @since 1.2 + * @see GetX(), GetY(), SetY(), SetXY() + */ + public function SetX($x, $rtloff=false) { + if (!$rtloff AND $this->rtl) { + if ($x >= 0) { + $this->x = $this->w - $x; + } else { + $this->x = abs($x); + } + } else { + if ($x >= 0) { + $this->x = $x; + } else { + $this->x = $this->w + $x; + } + } + if ($this->x < 0) { + $this->x = 0; + } + if ($this->x > $this->w) { + $this->x = $this->w; + } + } + + /** + * Moves the current abscissa back to the left margin and sets the ordinate. + * If the passed value is negative, it is relative to the bottom of the page. + * @param float $y The value of the ordinate. + * @param bool $resetx if true (default) reset the X position. + * @param boolean $rtloff if true always uses the page top-left corner as origin of axis. + * @access public + * @since 1.0 + * @see GetX(), GetY(), SetY(), SetXY() + */ + public function SetY($y, $resetx=true, $rtloff=false) { + if ($resetx) { + //reset x + if (!$rtloff AND $this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + } + if ($y >= 0) { + $this->y = $y; + } else { + $this->y = $this->h + $y; + } + if ($this->y < 0) { + $this->y = 0; + } + if ($this->y > $this->h) { + $this->y = $this->h; + } + } + + /** + * Defines the abscissa and ordinate of the current position. + * If the passed values are negative, they are relative respectively to the right and bottom of the page. + * @param float $x The value of the abscissa. + * @param float $y The value of the ordinate. + * @param boolean $rtloff if true always uses the page top-left corner as origin of axis. + * @access public + * @since 1.2 + * @see SetX(), SetY() + */ + public function SetXY($x, $y, $rtloff=false) { + $this->SetY($y, false, $rtloff); + $this->SetX($x, $rtloff); + } + + /** + * Send the document to a given destination: string, local file or browser. + * In the last case, the plug-in may be used (if present) or a download ("Save as" dialog box) may be forced.
    + * The method first calls Close() if necessary to terminate the document. + * @param string $name The name of the file when saved. Note that special characters are removed and blanks characters are replaced with the underscore character. + * @param string $dest Destination where to send the document. It can take one of the following values:
    • I: send the file inline to the browser (default). The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF.
    • D: send to the browser and force a file download with the name given by name.
    • F: save to a local server file with the name given by name.
    • S: return the document as a string. name is ignored.
    • FI: equivalent to F + I option
    • FD: equivalent to F + D option
    + * @access public + * @since 1.0 + * @see Close() + */ + public function Output($name='doc.pdf', $dest='I') { + //Output PDF to some destination + //Finish document if necessary + $this->lastpage(); + if ($this->state < 3) { + $this->Close(); + } + //Normalize parameters + if (is_bool($dest)) { + $dest = $dest ? 'D' : 'F'; + } + $dest = strtoupper($dest); + if ($dest != 'F') { + $name = preg_replace('/[\s]+/', '_', $name); + $name = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $name); + } + if ($this->sign) { + // *** apply digital signature to the document *** + // get the document content + $pdfdoc = $this->getBuffer(); + // remove last newline + $pdfdoc = substr($pdfdoc, 0, -1); + // Remove the original buffer + if (isset($this->diskcache) AND $this->diskcache) { + // remove buffer file from cache + unlink($this->buffer); + } + unset($this->buffer); + // remove filler space + $byterange_string_len = strlen($this->byterange_string); + // define the ByteRange + $byte_range = array(); + $byte_range[0] = 0; + $byte_range[1] = strpos($pdfdoc, $this->byterange_string) + $byterange_string_len + 10; + $byte_range[2] = $byte_range[1] + $this->signature_max_length + 2; + $byte_range[3] = strlen($pdfdoc) - $byte_range[2]; + $pdfdoc = substr($pdfdoc, 0, $byte_range[1]).substr($pdfdoc, $byte_range[2]); + // replace the ByteRange + $byterange = sprintf('/ByteRange[0 %u %u %u]', $byte_range[1], $byte_range[2], $byte_range[3]); + $byterange .= str_repeat(' ', ($byterange_string_len - strlen($byterange))); + $pdfdoc = str_replace($this->byterange_string, $byterange, $pdfdoc); + // write the document to a temporary folder + $tempdoc = tempnam(K_PATH_CACHE, 'tmppdf_'); + $f = fopen($tempdoc, 'wb'); + if (!$f) { + $this->Error('Unable to create temporary file: '.$tempdoc); + } + $pdfdoc_length = strlen($pdfdoc); + fwrite($f, $pdfdoc, $pdfdoc_length); + fclose($f); + // get digital signature via openssl library + $tempsign = tempnam(K_PATH_CACHE, 'tmpsig_'); + if (empty($this->signature_data['extracerts'])) { + openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED); + } else { + openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED, $this->signature_data['extracerts']); + } + unlink($tempdoc); + // read signature + $signature = file_get_contents($tempsign, false, null, $pdfdoc_length); + unlink($tempsign); + // extract signature + $signature = substr($signature, (strpos($signature, "%%EOF\n\n------") + 13)); + $tmparr = explode("\n\n", $signature); + $signature = $tmparr[1]; + unset($tmparr); + // decode signature + $signature = base64_decode(trim($signature)); + // convert signature to hex + $signature = current(unpack('H*', $signature)); + $signature = str_pad($signature, $this->signature_max_length, '0'); + // Add signature to the document + $pdfdoc = substr($pdfdoc, 0, $byte_range[1]).'<'.$signature.'>'.substr($pdfdoc, ($byte_range[1])); + $this->diskcache = false; + $this->buffer = &$pdfdoc; + $this->bufferlen = strlen($pdfdoc); + } + switch($dest) { + case 'I': { + // Send PDF to the standard output + if (ob_get_contents()) { + $this->Error('Some data has already been output, can\'t send PDF file'); + } + if (php_sapi_name() != 'cli') { + //We send to a browser + header('Content-Type: application/pdf'); + if (headers_sent()) { + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + } + header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Length: '.$this->bufferlen); + header('Content-Disposition: inline; filename="'.basename($name).'";'); + } + echo $this->getBuffer(); + break; + } + case 'D': { + // Download PDF as file + if (ob_get_contents()) { + $this->Error('Some data has already been output, can\'t send PDF file'); + } + header('Content-Description: File Transfer'); + if (headers_sent()) { + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + } + header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + // force download dialog + header('Content-Type: application/force-download'); + header('Content-Type: application/octet-stream', false); + header('Content-Type: application/download', false); + header('Content-Type: application/pdf', false); + // use the Content-Disposition header to supply a recommended filename + header('Content-Disposition: attachment; filename="'.basename($name).'";'); + header('Content-Transfer-Encoding: binary'); + header('Content-Length: '.$this->bufferlen); + echo $this->getBuffer(); + break; + } + case 'F': + case 'FI': + case 'FD': { + // Save PDF to a local file + if ($this->diskcache) { + copy($this->buffer, $name); + } else { + $f = fopen($name, 'wb'); + if (!$f) { + $this->Error('Unable to create output file: '.$name); + } + fwrite($f, $this->getBuffer(), $this->bufferlen); + fclose($f); + } + if ($dest == 'FI') { + // send headers to browser + header('Content-Type: application/pdf'); + header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Length: '.filesize($name)); + header('Content-Disposition: inline; filename="'.basename($name).'";'); + // send document to the browser + echo file_get_contents($name); + } elseif ($dest == 'FD') { + // send headers to browser + if (ob_get_contents()) { + $this->Error('Some data has already been output, can\'t send PDF file'); + } + header('Content-Description: File Transfer'); + if (headers_sent()) { + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + } + header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + // force download dialog + header('Content-Type: application/force-download'); + header('Content-Type: application/octet-stream', false); + header('Content-Type: application/download', false); + header('Content-Type: application/pdf', false); + // use the Content-Disposition header to supply a recommended filename + header('Content-Disposition: attachment; filename="'.basename($name).'";'); + header('Content-Transfer-Encoding: binary'); + header('Content-Length: '.filesize($name)); + // send document to the browser + echo file_get_contents($name); + } + break; + } + case 'S': { + // Returns PDF as a string + return $this->getBuffer(); + } + default: { + $this->Error('Incorrect output destination: '.$dest); + } + } + return ''; + } + + /** + * Unset all class variables except the following critical variables: internal_encoding, state, bufferlen, buffer and diskcache. + * @param boolean $destroyall if true destroys all class variables, otherwise preserves critical variables. + * @param boolean $preserve_objcopy if true preserves the objcopy variable + * @access public + * @since 4.5.016 (2009-02-24) + */ + public function _destroy($destroyall=false, $preserve_objcopy=false) { + if ($destroyall AND isset($this->diskcache) AND $this->diskcache AND (!$preserve_objcopy) AND (!$this->empty_string($this->buffer))) { + // remove buffer file from cache + unlink($this->buffer); + } + foreach (array_keys(get_object_vars($this)) as $val) { + if ($destroyall OR ( + ($val != 'internal_encoding') + AND ($val != 'state') + AND ($val != 'bufferlen') + AND ($val != 'buffer') + AND ($val != 'diskcache') + AND ($val != 'sign') + AND ($val != 'signature_data') + AND ($val != 'signature_max_length') + AND ($val != 'byterange_string') + )) { + if ((!$preserve_objcopy OR ($val != 'objcopy')) AND isset($this->$val)) { + unset($this->$val); + } + } + } + } + + /** + * Check for locale-related bug + * @access protected + */ + protected function _dochecks() { + //Check for locale-related bug + if (1.1 == 1) { + $this->Error('Don\'t alter the locale before including class file'); + } + //Check for decimal separator + if (sprintf('%.1F', 1.0) != '1.0') { + setlocale(LC_NUMERIC, 'C'); + } + } + + /** + * Return fonts path + * @return string + * @access protected + */ + protected function _getfontpath() { + if (!defined('K_PATH_FONTS') AND is_dir(dirname(__FILE__).'/fonts')) { + define('K_PATH_FONTS', dirname(__FILE__).'/fonts/'); + } + return defined('K_PATH_FONTS') ? K_PATH_FONTS : ''; + } + + /** + * Output pages. + * @access protected + */ + protected function _putpages() { + $nb = $this->numpages; + if (!empty($this->AliasNbPages)) { + $nbs = $this->formatPageNumber($nb); + $nbu = $this->UTF8ToUTF16BE($nbs, false); // replacement for unicode font + $alias_a = $this->_escape($this->AliasNbPages); + $alias_au = $this->_escape('{'.$this->AliasNbPages.'}'); + if ($this->isunicode) { + $alias_b = $this->_escape($this->UTF8ToLatin1($this->AliasNbPages)); + $alias_bu = $this->_escape($this->UTF8ToLatin1('{'.$this->AliasNbPages.'}')); + $alias_c = $this->_escape($this->utf8StrRev($this->AliasNbPages, false, $this->tmprtl)); + $alias_cu = $this->_escape($this->utf8StrRev('{'.$this->AliasNbPages.'}', false, $this->tmprtl)); + } + } + if (!empty($this->AliasNumPage)) { + $alias_pa = $this->_escape($this->AliasNumPage); + $alias_pau = $this->_escape('{'.$this->AliasNumPage.'}'); + if ($this->isunicode) { + $alias_pb = $this->_escape($this->UTF8ToLatin1($this->AliasNumPage)); + $alias_pbu = $this->_escape($this->UTF8ToLatin1('{'.$this->AliasNumPage.'}')); + $alias_pc = $this->_escape($this->utf8StrRev($this->AliasNumPage, false, $this->tmprtl)); + $alias_pcu = $this->_escape($this->utf8StrRev('{'.$this->AliasNumPage.'}', false, $this->tmprtl)); + } + } + $pagegroupnum = 0; + $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; + for ($n=1; $n <= $nb; ++$n) { + $temppage = $this->getPageBuffer($n); + if (!empty($this->pagegroups)) { + if(isset($this->newpagegroup[$n])) { + $pagegroupnum = 0; + } + ++$pagegroupnum; + foreach ($this->pagegroups as $k => $v) { + // replace total pages group numbers + $vs = $this->formatPageNumber($v); + $vu = $this->UTF8ToUTF16BE($vs, false); + $alias_ga = $this->_escape($k); + $alias_gau = $this->_escape('{'.$k.'}'); + if ($this->isunicode) { + $alias_gb = $this->_escape($this->UTF8ToLatin1($k)); + $alias_gbu = $this->_escape($this->UTF8ToLatin1('{'.$k.'}')); + $alias_gc = $this->_escape($this->utf8StrRev($k, false, $this->tmprtl)); + $alias_gcu = $this->_escape($this->utf8StrRev('{'.$k.'}', false, $this->tmprtl)); + } + $temppage = str_replace($alias_gau, $vu, $temppage); + if ($this->isunicode) { + $temppage = str_replace($alias_gbu, $vu, $temppage); + $temppage = str_replace($alias_gcu, $vu, $temppage); + $temppage = str_replace($alias_gb, $vs, $temppage); + $temppage = str_replace($alias_gc, $vs, $temppage); + } + $temppage = str_replace($alias_ga, $vs, $temppage); + // replace page group numbers + $pvs = $this->formatPageNumber($pagegroupnum); + $pvu = $this->UTF8ToUTF16BE($pvs, false); + $pk = str_replace('{nb', '{pnb', $k); + $alias_pga = $this->_escape($pk); + $alias_pgau = $this->_escape('{'.$pk.'}'); + if ($this->isunicode) { + $alias_pgb = $this->_escape($this->UTF8ToLatin1($pk)); + $alias_pgbu = $this->_escape($this->UTF8ToLatin1('{'.$pk.'}')); + $alias_pgc = $this->_escape($this->utf8StrRev($pk, false, $this->tmprtl)); + $alias_pgcu = $this->_escape($this->utf8StrRev('{'.$pk.'}', false, $this->tmprtl)); + } + $temppage = str_replace($alias_pgau, $pvu, $temppage); + if ($this->isunicode) { + $temppage = str_replace($alias_pgbu, $pvu, $temppage); + $temppage = str_replace($alias_pgcu, $pvu, $temppage); + $temppage = str_replace($alias_pgb, $pvs, $temppage); + $temppage = str_replace($alias_pgc, $pvs, $temppage); + } + $temppage = str_replace($alias_pga, $pvs, $temppage); + } + } + if (!empty($this->AliasNbPages)) { + // replace total pages number + $temppage = str_replace($alias_au, $nbu, $temppage); + if ($this->isunicode) { + $temppage = str_replace($alias_bu, $nbu, $temppage); + $temppage = str_replace($alias_cu, $nbu, $temppage); + $temppage = str_replace($alias_b, $nbs, $temppage); + $temppage = str_replace($alias_c, $nbs, $temppage); + } + $temppage = str_replace($alias_a, $nbs, $temppage); + } + if (!empty($this->AliasNumPage)) { + // replace page number + $pnbs = $this->formatPageNumber($n); + $pnbu = $this->UTF8ToUTF16BE($pnbs, false); // replacement for unicode font + $temppage = str_replace($alias_pau, $pnbu, $temppage); + if ($this->isunicode) { + $temppage = str_replace($alias_pbu, $pnbu, $temppage); + $temppage = str_replace($alias_pcu, $pnbu, $temppage); + $temppage = str_replace($alias_pb, $pnbs, $temppage); + $temppage = str_replace($alias_pc, $pnbs, $temppage); + } + $temppage = str_replace($alias_pa, $pnbs, $temppage); + } + $temppage = str_replace($this->epsmarker, '', $temppage); + //Page + $this->page_obj_id[$n] = $this->_newobj(); + $out = '<pagedim[$n]['w'], $this->pagedim[$n]['h']); + $out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceRGB >>'; + $out .= ' /Resources 2 0 R'; + $this->_out($out); + $this->_putannotsrefs($n); + $this->_out('/Contents '.($this->n + 1).' 0 R>> endobj'); + //Page content + $p = ($this->compress) ? gzcompress($temppage) : $temppage; + $this->_newobj(); + $this->_out('<<'.$filter.'/Length '.strlen($p).'>> '.$this->_getstream($p).' endobj'); + if ($this->diskcache) { + // remove temporary files + unlink($this->pages[$n]); + } + } + //Pages root + $this->offsets[1] = $this->bufferlen; + $out = '1 0 obj <page_obj_id as $page_obj) { + $out .= ' '.$page_obj.' 0 R'; + } + $out .= ' ] /Count '.$nb.' >> endobj'; + $this->_out($out); + } + + /** + * Output references to page annotations + * @param int $n page number + * @access protected + * @author Nicola Asuni + * @since 4.7.000 (2008-08-29) + */ + protected function _putannotsrefs($n) { + if (!(isset($this->PageAnnots[$n]) OR ($this->sign AND isset($this->signature_data['cert_type'])))) { + return; + } + $out = '/Annots ['; + if (isset($this->PageAnnots[$n])) { + $num_annots = count($this->PageAnnots[$n]); + for ($i = 0; $i < $num_annots; ++$i) { + ++$this->curr_annot_obj_id; + if (!in_array($this->curr_annot_obj_id, $this->radio_groups)) { + $out .= ' '.$this->curr_annot_obj_id.' 0 R'; + } else { + ++$num_annots; + } + } + } + if (($n==1) AND $this->sign AND isset($this->signature_data['cert_type'])) { + // set reference for signature object + $out .= ' '.$this->sig_annot_ref; + } + $out .= ' ]'; + $this->_out($out); + } + + /** + * Output annotations objects for all pages. + * !!! THIS METHOD IS NOT YET COMPLETED !!! + * See section 12.5 of PDF 32000_2008 reference. + * @access protected + * @author Nicola Asuni + * @since 4.0.018 (2008-08-06) + */ + protected function _putannotsobjs() { + // reset object counter + $this->annot_obj_id = $this->annots_start_obj_id; + for ($n=1; $n <= $this->numpages; ++$n) { + if (isset($this->PageAnnots[$n])) { + // set page annotations + foreach ($this->PageAnnots[$n] as $key => $pl) { + // create annotation object for grouping radiobuttons + if (isset($this->radiobutton_groups[$n][$pl['txt']]) AND is_array($this->radiobutton_groups[$n][$pl['txt']])) { + $annots = '<<'; + $annots .= ' /Type /Annot'; + $annots .= ' /Subtype /Widget'; + $annots .= ' /T '.$this->_dataannobjstring($pl['txt']); + $annots .= ' /FT /Btn'; + $annots .= ' /Ff 49152'; + $annots .= ' /Kids ['; + foreach ($this->radiobutton_groups[$n][$pl['txt']] as $data) { + $annots .= ' '.$data['kid'].' 0 R'; + if ($data['def'] !== 'Off') { + $defval = $data['def']; + } + } + $annots .= ' ]'; + if (isset($defval)) { + $annots .= ' /V /'.$defval; + } + $annots .= ' >>'; + ++$this->annot_obj_id; + $this->offsets[$this->annot_obj_id] = $this->bufferlen; + $this->_out($this->annot_obj_id.' 0 obj '.$annots.' endobj'); + $this->form_obj_id[] = $this->annot_obj_id; + // store object id to be used on Parent entry of Kids + $this->radiobutton_groups[$n][$pl['txt']] = $this->annot_obj_id; + } + $formfield = false; + $pl['opt'] = array_change_key_case($pl['opt'], CASE_LOWER); + $a = $pl['x'] * $this->k; + $b = $this->pagedim[$n]['h'] - (($pl['y'] + $pl['h']) * $this->k); + $c = $pl['w'] * $this->k; + $d = $pl['h'] * $this->k; + $rect = sprintf('%.2F %.2F %.2F %.2F', $a, $b, $a+$c, $b+$d); + // create new annotation object + $annots = '<_textannobjstring($pl['txt']); + $annots .= ' /P '.$this->page_obj_id[$n].' 0 R'; + $annots .= ' /NM '.$this->_dataannobjstring(sprintf('%04u-%04u', $n, $key)); + $annots .= ' /M '.$this->_datestring(); + if (isset($pl['opt']['f'])) { + $val = 0; + if (is_array($pl['opt']['f'])) { + foreach ($pl['opt']['f'] as $f) { + switch (strtolower($f)) { + case 'invisible': { + $val += 1 << 0; + break; + } + case 'hidden': { + $val += 1 << 1; + break; + } + case 'print': { + $val += 1 << 2; + break; + } + case 'nozoom': { + $val += 1 << 3; + break; + } + case 'norotate': { + $val += 1 << 4; + break; + } + case 'noview': { + $val += 1 << 5; + break; + } + case 'readonly': { + $val += 1 << 6; + break; + } + case 'locked': { + $val += 1 << 8; + break; + } + case 'togglenoview': { + $val += 1 << 9; + break; + } + case 'lockedcontents': { + $val += 1 << 10; + break; + } + default: { + break; + } + } + } + } else { + $val = intval($pl['opt']['f']); + } + $annots .= ' /F '.intval($val); + } + if (isset($pl['opt']['as']) AND is_string($pl['opt']['as'])) { + $annots .= ' /AS /'.$pl['opt']['as']; + } + if (isset($pl['opt']['ap'])) { + // appearance stream + $annots .= ' /AP <<'; + if (is_array($pl['opt']['ap'])) { + foreach ($pl['opt']['ap'] as $apmode => $apdef) { + // $apmode can be: n = normal; r = rollover; d = down; + $annots .= ' /'.strtoupper($apmode); + if (is_array($apdef)) { + $annots .= ' <<'; + foreach ($apdef as $apstate => $stream) { + // reference to XObject that define the appearance for this mode-state + $apsobjid = $this->_putAPXObject($c, $d, $stream); + $annots .= ' /'.$apstate.' '.$apsobjid.' 0 R'; + } + $annots .= ' >>'; + } else { + // reference to XObject that define the appearance for this mode + $apsobjid = $this->_putAPXObject($c, $d, $apdef); + $annots .= ' '.$apsobjid.' 0 R'; + } + } + } else { + $annots .= $pl['opt']['ap']; + } + $annots .= ' >>'; + } + if (isset($pl['opt']['bs']) AND (is_array($pl['opt']['bs']))) { + $annots .= ' /BS <<'; + $annots .= ' /Type /Border'; + if (isset($pl['opt']['bs']['w'])) { + $annots .= ' /W '.intval($pl['opt']['bs']['w']); + } + $bstyles = array('S', 'D', 'B', 'I', 'U'); + if (isset($pl['opt']['bs']['s']) AND in_array($pl['opt']['bs']['s'], $bstyles)) { + $annots .= ' /S /'.$pl['opt']['bs']['s']; + } + if (isset($pl['opt']['bs']['d']) AND (is_array($pl['opt']['bs']['d']))) { + $annots .= ' /D ['; + foreach ($pl['opt']['bs']['d'] as $cord) { + $annots .= ' '.intval($cord); + } + $annots .= ']'; + } + $annots .= ' >>'; + } else { + $annots .= ' /Border ['; + if (isset($pl['opt']['border']) AND (count($pl['opt']['border']) >= 3)) { + $annots .= intval($pl['opt']['border'][0]).' '; + $annots .= intval($pl['opt']['border'][1]).' '; + $annots .= intval($pl['opt']['border'][2]); + if (isset($pl['opt']['border'][3]) AND is_array($pl['opt']['border'][3])) { + $annots .= ' ['; + foreach ($pl['opt']['border'][3] as $dash) { + $annots .= intval($dash).' '; + } + $annots .= ']'; + } + } else { + $annots .= '0 0 0'; + } + $annots .= ']'; + } + if (isset($pl['opt']['be']) AND (is_array($pl['opt']['be']))) { + $annots .= ' /BE <<'; + $bstyles = array('S', 'C'); + if (isset($pl['opt']['be']['s']) AND in_array($pl['opt']['be']['s'], $markups)) { + $annots .= ' /S /'.$pl['opt']['bs']['s']; + } else { + $annots .= ' /S /S'; + } + if (isset($pl['opt']['be']['i']) AND ($pl['opt']['be']['i'] >= 0) AND ($pl['opt']['be']['i'] <= 2)) { + $annots .= ' /I '.sprintf(' %.4F', $pl['opt']['be']['i']); + } + $annots .= '>>'; + } + if (isset($pl['opt']['c']) AND (is_array($pl['opt']['c'])) AND !empty($pl['opt']['c'])) { + $annots .= ' /C ['; + foreach ($pl['opt']['c'] as $col) { + $col = intval($col); + $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255); + $annots .= sprintf(' %.4F', $color); + } + $annots .= ']'; + } + //$annots .= ' /StructParent '; + //$annots .= ' /OC '; + $markups = array('text', 'freetext', 'line', 'square', 'circle', 'polygon', 'polyline', 'highlight', 'underline', 'squiggly', 'strikeout', 'stamp', 'caret', 'ink', 'fileattachment', 'sound'); + if (in_array(strtolower($pl['opt']['subtype']), $markups)) { + // this is a markup type + if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) { + $annots .= ' /T '.$this->_textannobjstring($pl['opt']['t']); + } + //$annots .= ' /Popup '; + if (isset($pl['opt']['ca'])) { + $annots .= ' /CA '.sprintf('%.4F', floatval($pl['opt']['ca'])); + } + if (isset($pl['opt']['rc'])) { + $annots .= ' /RC '.$this->_textannobjstring($pl['opt']['rc']); + } + $annots .= ' /CreationDate '.$this->_datestring(); + //$annots .= ' /IRT '; + if (isset($pl['opt']['subj'])) { + $annots .= ' /Subj '.$this->_textannobjstring($pl['opt']['subj']); + } + //$annots .= ' /RT '; + //$annots .= ' /IT '; + //$annots .= ' /ExData '; + } + $lineendings = array('Square', 'Circle', 'Diamond', 'OpenArrow', 'ClosedArrow', 'None', 'Butt', 'ROpenArrow', 'RClosedArrow', 'Slash'); + switch (strtolower($pl['opt']['subtype'])) { + case 'text': { + if (isset($pl['opt']['open'])) { + $annots .= ' /Open '. (strtolower($pl['opt']['open']) == 'true' ? 'true' : 'false'); + } + $iconsapp = array('Comment', 'Help', 'Insert', 'Key', 'NewParagraph', 'Note', 'Paragraph'); + if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { + $annots .= ' /Name /'.$pl['opt']['name']; + } else { + $annots .= ' /Name /Note'; + } + $statemodels = array('Marked', 'Review'); + if (isset($pl['opt']['statemodel']) AND in_array($pl['opt']['statemodel'], $statemodels)) { + $annots .= ' /StateModel /'.$pl['opt']['statemodel']; + } else { + $pl['opt']['statemodel'] = 'Marked'; + $annots .= ' /StateModel /'.$pl['opt']['statemodel']; + } + if ($pl['opt']['statemodel'] == 'Marked') { + $states = array('Accepted', 'Unmarked'); + } else { + $states = array('Accepted', 'Rejected', 'Cancelled', 'Completed', 'None'); + } + if (isset($pl['opt']['state']) AND in_array($pl['opt']['state'], $states)) { + $annots .= ' /State /'.$pl['opt']['state']; + } else { + if ($pl['opt']['statemodel'] == 'Marked') { + $annots .= ' /State /Unmarked'; + } else { + $annots .= ' /State /None'; + } + } + break; + } + case 'link': { + if(is_string($pl['txt'])) { + // external URI link + $annots .= ' /A <_dataannobjstring($this->unhtmlentities($pl['txt'])).'>>'; + } else { + // internal link + $l = $this->links[$pl['txt']]; + $annots .= sprintf(' /Dest [%d 0 R /XYZ 0 %.2F null]', (1 + (2 * $l[0])), ($this->pagedim[$l[0]]['h'] - ($l[1] * $this->k))); + } + $hmodes = array('N', 'I', 'O', 'P'); + if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmodes)) { + $annots .= ' /H /'.$pl['opt']['h']; + } else { + $annots .= ' /H /I'; + } + //$annots .= ' /PA '; + //$annots .= ' /Quadpoints '; + break; + } + case 'freetext': { + if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) { + $annots .= ' /DA ('.$pl['opt']['da'].')'; + } + if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) { + $annots .= ' /Q '.intval($pl['opt']['q']); + } + if (isset($pl['opt']['rc'])) { + $annots .= ' /RC '.$this->_textannobjstring($pl['opt']['rc']); + } + if (isset($pl['opt']['ds'])) { + $annots .= ' /DS '.$this->_textannobjstring($pl['opt']['ds']); + } + if (isset($pl['opt']['cl']) AND is_array($pl['opt']['cl'])) { + $annots .= ' /CL ['; + foreach ($pl['opt']['cl'] as $cl) { + $annots .= sprintf('%.4F ', $cl * $this->k); + } + $annots .= ']'; + } + $tfit = array('FreeText', 'FreeTextCallout', 'FreeTextTypeWriter'); + if (isset($pl['opt']['it']) AND in_array($pl['opt']['it'], $tfit)) { + $annots .= ' /IT '.$pl['opt']['it']; + } + if (isset($pl['opt']['rd']) AND is_array($pl['opt']['rd'])) { + $l = $pl['opt']['rd'][0] * $this->k; + $r = $pl['opt']['rd'][1] * $this->k; + $t = $pl['opt']['rd'][2] * $this->k; + $b = $pl['opt']['rd'][3] * $this->k; + $annots .= ' /RD ['.sprintf('%.2F %.2F %.2F %.2F', $l, $r, $t, $b).']'; + } + if (isset($pl['opt']['le']) AND in_array($pl['opt']['le'], $lineendings)) { + $annots .= ' /LE /'.$pl['opt']['le']; + } + break; + } + case 'line': { + break; + } + case 'square': { + break; + } + case 'circle': { + break; + } + case 'polygon': { + break; + } + case 'polyline': { + break; + } + case 'highlight': { + break; + } + case 'underline': { + break; + } + case 'squiggly': { + break; + } + case 'strikeout': { + break; + } + case 'stamp': { + break; + } + case 'caret': { + break; + } + case 'ink': { + break; + } + case 'popup': { + break; + } + case 'fileattachment': { + if (!isset($pl['opt']['fs'])) { + break; + } + $filename = basename($pl['opt']['fs']); + if (isset($this->embeddedfiles[$filename]['n'])) { + $annots .= ' /FS <_dataannobjstring($filename).' /EF <embeddedfiles[$filename]['n'].' 0 R>> >>'; + $iconsapp = array('Graph', 'Paperclip', 'PushPin', 'Tag'); + if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { + $annots .= ' /Name /'.$pl['opt']['name']; + } else { + $annots .= ' /Name /PushPin'; + } + } + break; + } + case 'sound': { + if (!isset($pl['opt']['fs'])) { + break; + } + $filename = basename($pl['opt']['fs']); + if (isset($this->embeddedfiles[$filename]['n'])) { + // ... TO BE COMPLETED ... + // /R /C /B /E /CO /CP + $annots .= ' /Sound <_dataannobjstring($filename).' /EF <embeddedfiles[$filename]['n'].' 0 R>> >>'; + $iconsapp = array('Speaker', 'Mic'); + if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { + $annots .= ' /Name /'.$pl['opt']['name']; + } else { + $annots .= ' /Name /Speaker'; + } + } + break; + } + case 'movie': { + break; + } + case 'widget': { + $hmode = array('N', 'I', 'O', 'P', 'T'); + if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmode)) { + $annots .= ' /H /'.$pl['opt']['h']; + } + if (isset($pl['opt']['mk']) AND (is_array($pl['opt']['mk'])) AND !empty($pl['opt']['mk'])) { + $annots .= ' /MK <<'; + if (isset($pl['opt']['mk']['r'])) { + $annots .= ' /R '.$pl['opt']['mk']['r']; + } + if (isset($pl['opt']['mk']['bc']) AND (is_array($pl['opt']['mk']['bc']))) { + $annots .= ' /BC ['; + foreach($pl['opt']['mk']['bc'] AS $col) { + $col = intval($col); + $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255); + $annots .= sprintf(' %.2F', $color); + } + $annots .= ']'; + } + if (isset($pl['opt']['mk']['bg']) AND (is_array($pl['opt']['mk']['bg']))) { + $annots .= ' /BG ['; + foreach($pl['opt']['mk']['bg'] AS $col) { + $col = intval($col); + $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255); + $annots .= sprintf(' %.2F', $color); + } + $annots .= ']'; + } + if (isset($pl['opt']['mk']['ca'])) { + $annots .= ' /CA '.$pl['opt']['mk']['ca'].''; + } + if (isset($pl['opt']['mk']['rc'])) { + $annots .= ' /RC '.$pl['opt']['mk']['ca'].''; + } + if (isset($pl['opt']['mk']['ac'])) { + $annots .= ' /AC '.$pl['opt']['mk']['ca'].''; + } + if (isset($pl['opt']['mk']['i'])) { + $info = $this->getImageBuffer($pl['opt']['mk']['i']); + if ($info !== false) { + $annots .= ' /I '.$info['n'].' 0 R'; + } + } + if (isset($pl['opt']['mk']['ri'])) { + $info = $this->getImageBuffer($pl['opt']['mk']['ri']); + if ($info !== false) { + $annots .= ' /RI '.$info['n'].' 0 R'; + } + } + if (isset($pl['opt']['mk']['ix'])) { + $info = $this->getImageBuffer($pl['opt']['mk']['ix']); + if ($info !== false) { + $annots .= ' /IX '.$info['n'].' 0 R'; + } + } + if (isset($pl['opt']['mk']['if']) AND (is_array($pl['opt']['mk']['if'])) AND !empty($pl['opt']['mk']['if'])) { + $annots .= ' /IF <<'; + $if_sw = array('A', 'B', 'S', 'N'); + if (isset($pl['opt']['mk']['if']['sw']) AND in_array($pl['opt']['mk']['if']['sw'], $if_sw)) { + $annots .= ' /SW /'.$pl['opt']['mk']['if']['sw']; + } + $if_s = array('A', 'P'); + if (isset($pl['opt']['mk']['if']['s']) AND in_array($pl['opt']['mk']['if']['s'], $if_s)) { + $annots .= ' /S /'.$pl['opt']['mk']['if']['s']; + } + if (isset($pl['opt']['mk']['if']['a']) AND (is_array($pl['opt']['mk']['if']['a'])) AND !empty($pl['opt']['mk']['if']['a'])) { + $annots .= sprintf(' /A [%.2F %.2F]', $pl['opt']['mk']['if']['a'][0], $pl['opt']['mk']['if']['a'][1]); + } + if (isset($pl['opt']['mk']['if']['fb']) AND ($pl['opt']['mk']['if']['fb'])) { + $annots .= ' /FB true'; + } + $annots .= '>>'; + } + if (isset($pl['opt']['mk']['tp']) AND ($pl['opt']['mk']['tp'] >= 0) AND ($pl['opt']['mk']['tp'] <= 6)) { + $annots .= ' /TP '.intval($pl['opt']['mk']['tp']); + } else { + $annots .= ' /TP 0'; + } + $annots .= '>>'; + } // end MK + // --- Entries for field dictionaries --- + if (isset($this->radiobutton_groups[$n][$pl['txt']])) { + // set parent + $annots .= ' /Parent '.$this->radiobutton_groups[$n][$pl['txt']].' 0 R'; + } + if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) { + $annots .= ' /T '.$this->_dataannobjstring($pl['opt']['t']); + } + if (isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])) { + $annots .= ' /TU '.$this->_dataannobjstring($pl['opt']['tu']); + } + if (isset($pl['opt']['tm']) AND is_string($pl['opt']['tm'])) { + $annots .= ' /TM '.$this->_dataannobjstring($pl['opt']['tm']); + } + if (isset($pl['opt']['ff'])) { + if (is_array($pl['opt']['ff'])) { + // array of bit settings + $flag = 0; + foreach($pl['opt']['ff'] as $val) { + $flag += 1 << ($val - 1); + } + } else { + $flag = intval($pl['opt']['ff']); + } + $annots .= ' /Ff '.$flag; + } + if (isset($pl['opt']['maxlen'])) { + $annots .= ' /MaxLen '.intval($pl['opt']['maxlen']); + } + if (isset($pl['opt']['v'])) { + $annots .= ' /V'; + if (is_array($pl['opt']['v'])) { + foreach ($pl['opt']['v'] AS $optval) { + if (is_float($optval)) { + $optval = sprintf('%.2F', $optval); + } + $annots .= ' '.$optval; + } + } else { + $annots .= ' '.$this->_textannobjstring($pl['opt']['v']); + } + } + if (isset($pl['opt']['dv'])) { + $annots .= ' /DV'; + if (is_array($pl['opt']['dv'])) { + foreach ($pl['opt']['dv'] AS $optval) { + if (is_float($optval)) { + $optval = sprintf('%.2F', $optval); + } + $annots .= ' '.$optval; + } + } else { + $annots .= ' '.$this->_textannobjstring($pl['opt']['dv']); + } + } + if (isset($pl['opt']['rv'])) { + $annots .= ' /RV'; + if (is_array($pl['opt']['rv'])) { + foreach ($pl['opt']['rv'] AS $optval) { + if (is_float($optval)) { + $optval = sprintf('%.2F', $optval); + } + $annots .= ' '.$optval; + } + } else { + $annots .= ' '.$this->_textannobjstring($pl['opt']['rv']); + } + } + if (isset($pl['opt']['a']) AND !empty($pl['opt']['a'])) { + $annots .= ' /A << '.$pl['opt']['a'].' >>'; + } + if (isset($pl['opt']['aa']) AND !empty($pl['opt']['aa'])) { + $annots .= ' /AA << '.$pl['opt']['aa'].' >>'; + } + if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) { + $annots .= ' /DA ('.$pl['opt']['da'].')'; + } + if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) { + $annots .= ' /Q '.intval($pl['opt']['q']); + } + if (isset($pl['opt']['opt']) AND (is_array($pl['opt']['opt'])) AND !empty($pl['opt']['opt'])) { + $annots .= ' /Opt ['; + foreach($pl['opt']['opt'] AS $copt) { + if (is_array($copt)) { + $annots .= ' ['.$this->_textannobjstring($copt[0]).' '.$this->_textannobjstring($copt[1]).']'; + } else { + $annots .= ' '.$this->_textannobjstring($copt); + } + } + $annots .= ']'; + } + if (isset($pl['opt']['ti'])) { + $annots .= ' /TI '.intval($pl['opt']['ti']); + } + if (isset($pl['opt']['i']) AND (is_array($pl['opt']['i'])) AND !empty($pl['opt']['i'])) { + $annots .= ' /I ['; + foreach($pl['opt']['i'] AS $copt) { + $annots .= intval($copt).' '; + } + $annots .= ']'; + } + break; + } + case 'screen': { + break; + } + case 'printermark': { + break; + } + case 'trapnet': { + break; + } + case 'watermark': { + break; + } + case '3d': { + break; + } + default: { + break; + } + } + $annots .= '>>'; + // create new annotation object + ++$this->annot_obj_id; + $this->offsets[$this->annot_obj_id] = $this->bufferlen; + $this->_out($this->annot_obj_id.' 0 obj '.$annots.' endobj'); + if ($formfield AND ! isset($this->radiobutton_groups[$n][$pl['txt']])) { + // store reference of form object + $this->form_obj_id[] = $this->annot_obj_id; + } + } + } + } // end for each page + } + + /** + * Put appearance streams XObject used to define annotation's appearance states + * @param int $w annotation width + * @param int $h annotation height + * @param string $stream appearance stream + * @return int object ID + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected function _putAPXObject($w=0, $h=0, $stream='') { + $stream = trim($stream); + ++$this->apxo_obj_id; + $this->offsets[$this->apxo_obj_id] = $this->bufferlen; + $out = $this->apxo_obj_id.' 0 obj'; + $out .= ' <<'; + $out .= ' /Type /XObject'; + $out .= ' /Subtype /Form'; + $out .= ' /FormType 1'; + if ($this->compress) { + $stream = gzcompress($stream); + $out .= ' /Filter /FlateDecode'; + } + $rect = sprintf('%.2F %.2F', $w, $h); + $out .= ' /BBox [0 0 '.$rect.']'; + $out .= ' /Matrix [1 0 0 1 0 0]'; + $out .= ' /Resources <>'; + $out .= ' /Length '.strlen($stream); + $out .= ' >>'; + $out .= ' '.$this->_getstream($stream); + $out .= ' endobj'; + $this->_out($out); + return $this->apxo_obj_id; + } + + /** + * Output fonts. + * @access protected + */ + protected function _putfonts() { + $nf = $this->n; + foreach ($this->diffs as $diff) { + //Encodings + $this->_newobj(); + $this->_out('<> endobj'); + } + $mqr = $this->get_mqr(); + $this->set_mqr(false); + foreach ($this->FontFiles as $file => $info) { + // search and get font file to embedd + $fontdir = $info['fontdir']; + $file = strtolower($file); + $fontfile = ''; + // search files on various directories + if (($fontdir !== false) AND file_exists($fontdir.$file)) { + $fontfile = $fontdir.$file; + } elseif (file_exists($this->_getfontpath().$file)) { + $fontfile = $this->_getfontpath().$file; + } elseif (file_exists($file)) { + $fontfile = $file; + } + if (!$this->empty_string($fontfile)) { + $font = file_get_contents($fontfile); + $compressed = (substr($file, -2) == '.z'); + if ((!$compressed) AND (isset($info['length2']))) { + $header = (ord($font[0]) == 128); + if ($header) { + //Strip first binary header + $font = substr($font, 6); + } + if ($header AND (ord($font[$info['length1']]) == 128)) { + //Strip second binary header + $font = substr($font, 0, $info['length1']).substr($font, ($info['length1'] + 6)); + } + } + $this->_newobj(); + $this->FontFiles[$file]['n'] = $this->n; + $out = '<_getstream($font); + $out .= ' endobj'; + $this->_out($out); + } + } + $this->set_mqr($mqr); + foreach ($this->fontkeys as $k) { + //Font objects + $this->setFontSubBuffer($k, 'n', $this->n + 1); + $font = $this->getFontBuffer($k); + $type = $font['type']; + $name = $font['name']; + if ($type == 'core') { + //Standard font + $obj_id = $this->_newobj(); + $out = '<annotation_fonts['helvetica'] = $k; + } + $out .= ' >> endobj'; + $this->_out($out); + } elseif (($type == 'Type1') OR ($type == 'TrueType')) { + //Additional Type1 or TrueType font + $obj_id = $this->_newobj(); + $out = '<n + 1).' 0 R'; + $out .= ' /FontDescriptor '.($this->n + 2).' 0 R'; + if ($font['enc']) { + if (isset($font['diff'])) { + $out .= ' /Encoding '.($nf + $font['diff']).' 0 R'; + } else { + $out .= ' /Encoding /WinAnsiEncoding'; + } + } + $out .= ' >> endobj'; + $this->_out($out); + // Widths + $this->_newobj(); + $cw = &$font['cw']; + $s = '['; + for ($i = 32; $i < 256; ++$i) { + $s .= $cw[$i].' '; + } + $this->_out($s.'] endobj'); + //Descriptor + $this->_newobj(); + $s = '< $fdv) { + if(is_float($fdv)) { + $fdv = sprintf('%.3F', $fdv); + } + $s .= ' /'.$fdk.' '.$fdv.''; + } + if (!$this->empty_string($font['file'])) { + $s .= ' /FontFile'.($type == 'Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R'; + } + $this->_out($s.'>> endobj'); + } else { + //Allow for additional types + $mtd = '_put'.strtolower($type); + if (!method_exists($this, $mtd)) { + $this->Error('Unsupported font type: '.$type); + } + $obj_id = $this->$mtd($font); + } + // store object ID for current font + $this->font_obj_ids[$k] = $obj_id; + } + } + + /** + * Outputs font widths + * @parameter array $font font data + * @parameter int $cidoffset offset for CID values + * @return PDF command string for font widths + * @author Nicola Asuni + * @access protected + * @since 4.4.000 (2008-12-07) + */ + protected function _putfontwidths($font, $cidoffset=0) { + ksort($font['cw']); + $rangeid = 0; + $range = array(); + $prevcid = -2; + $prevwidth = -1; + $interval = false; + // for each character + foreach ($font['cw'] as $cid => $width) { + $cid -= $cidoffset; + if ($width != $font['dw']) { + if ($cid == ($prevcid + 1)) { + // consecutive CID + if ($width == $prevwidth) { + if ($width == $range[$rangeid][0]) { + $range[$rangeid][] = $width; + } else { + array_pop($range[$rangeid]); + // new range + $rangeid = $prevcid; + $range[$rangeid] = array(); + $range[$rangeid][] = $prevwidth; + $range[$rangeid][] = $width; + } + $interval = true; + $range[$rangeid]['interval'] = true; + } else { + if ($interval) { + // new range + $rangeid = $cid; + $range[$rangeid] = array(); + $range[$rangeid][] = $width; + } else { + $range[$rangeid][] = $width; + } + $interval = false; + } + } else { + // new range + $rangeid = $cid; + $range[$rangeid] = array(); + $range[$rangeid][] = $width; + $interval = false; + } + $prevcid = $cid; + $prevwidth = $width; + } + } + // optimize ranges + $prevk = -1; + $nextk = -1; + $prevint = false; + foreach ($range as $k => $ws) { + $cws = count($ws); + if (($k == $nextk) AND (!$prevint) AND ((!isset($ws['interval'])) OR ($cws < 4))) { + if (isset($range[$k]['interval'])) { + unset($range[$k]['interval']); + } + $range[$prevk] = array_merge($range[$prevk], $range[$k]); + unset($range[$k]); + } else { + $prevk = $k; + } + $nextk = $k + $cws; + if (isset($ws['interval'])) { + if ($cws > 3) { + $prevint = true; + } else { + $prevint = false; + } + unset($range[$k]['interval']); + --$nextk; + } else { + $prevint = false; + } + } + // output data + $w = ''; + foreach ($range as $k => $ws) { + if (count(array_count_values($ws)) == 1) { + // interval mode is more compact + $w .= ' '.$k.' '.($k + count($ws) - 1).' '.$ws[0]; + } else { + // range mode + $w .= ' '.$k.' [ '.implode(' ', $ws).' ]'; + } + } + return '/W ['.$w.' ]'; + } + + /** + * Adds unicode fonts.
    + * Based on PDF Reference 1.3 (section 5) + * @parameter array $font font data + * @return int font object ID + * @access protected + * @author Nicola Asuni + * @since 1.52.0.TC005 (2005-01-05) + */ + protected function _puttruetypeunicode($font) { + // Type0 Font + // A composite font composed of other fonts, organized hierarchically + $obj_id = $this->_newobj(); + $out = '<n + 1).' 0 R]'; + $out .= ' >>'; + $out .= ' endobj'; + $this->_out($out); + // CIDFontType2 + // A CIDFont whose glyph descriptions are based on TrueType font technology + $this->_newobj(); + $out = '<_datastring($font['cidinfo']['Registry']); + $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering']); + $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement']; + $out .= ' /CIDSystemInfo <<'.$cidinfo.'>>'; + $out .= ' /FontDescriptor '.($this->n + 1).' 0 R'; + $out .= ' /DW '.$font['dw']; // default width + $out .= "\n".$this->_putfontwidths($font, 0); + $out .= ' /CIDToGIDMap '.($this->n + 2).' 0 R >> endobj'; + $this->_out($out); + // Font descriptor + // A font descriptor describing the CIDFont default metrics other than its glyph widths + $this->_newobj(); + $out = '< $value) { + if(is_float($value)) { + $value = sprintf('%.3F', $value); + } + $out .= ' /'.$key.' '.$value; + } + $fontdir = false; + if (!$this->empty_string($font['file'])) { + // A stream containing a TrueType font + $out .= ' /FontFile2 '.$this->FontFiles[$font['file']]['n'].' 0 R'; + $fontdir = $this->FontFiles[$font['file']]['fontdir']; + } + $out .= ' >> endobj'; + $this->_out($out); + if (isset($font['ctg']) AND (!$this->empty_string($font['ctg']))) { + $this->_newobj(); + // Embed CIDToGIDMap + // A specification of the mapping from CIDs to glyph indices + // search and get CTG font file to embedd + $ctgfile = strtolower($font['ctg']); + // search and get ctg font file to embedd + $fontfile = ''; + // search files on various directories + if (($fontdir !== false) AND file_exists($fontdir.$ctgfile)) { + $fontfile = $fontdir.$ctgfile; + } elseif (file_exists($this->_getfontpath().$ctgfile)) { + $fontfile = $this->_getfontpath().$ctgfile; + } elseif (file_exists($ctgfile)) { + $fontfile = $ctgfile; + } + if ($this->empty_string($fontfile)) { + $this->Error('Font file not found: '.$ctgfile); + } + $size = filesize($fontfile); + $out = '<_getstream(file_get_contents($fontfile)); + $out .= ' endobj'; + $this->_out($out); + } + return $obj_id; + } + + /** + * Output CID-0 fonts. + * A Type 0 CIDFont contains glyph descriptions based on the Adobe Type 1 font format + * @param array $font font data + * @return int font object ID + * @access protected + * @author Andrew Whitehead, Nicola Asuni, Yukihiro Nakadaira + * @since 3.2.000 (2008-06-23) + */ + protected function _putcidfont0($font) { + $cidoffset = 0; + if (!isset($font['cw'][1])) { + $cidoffset = 31; + } + if (isset($font['cidinfo']['uni2cid'])) { + // convert unicode to cid. + $uni2cid = $font['cidinfo']['uni2cid']; + $cw = array(); + foreach ($font['cw'] as $uni => $width) { + if (isset($uni2cid[$uni])) { + $cw[($uni2cid[$uni] + $cidoffset)] = $width; + } elseif ($uni < 256) { + $cw[$uni] = $width; + } // else unknown character + } + $font = array_merge($font, array('cw' => $cw)); + } + $name = $font['name']; + $enc = $font['enc']; + if ($enc) { + $longname = $name.'-'.$enc; + } else { + $longname = $name; + } + $obj_id = $this->_newobj(); + $out = '<n + 1).' 0 R]'; + $out .= ' >> endobj'; + $this->_out($out); + $this->_newobj(); + $out = '<_datastring($font['cidinfo']['Registry']); + $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering']); + $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement']; + $out .= ' /CIDSystemInfo <<'.$cidinfo.'>>'; + $out .= ' /FontDescriptor '.($this->n + 1).' 0 R'; + $out .= ' /DW '.$font['dw']; + $out .= "\n".$this->_putfontwidths($font, $cidoffset); + $out .= ' >> endobj'; + $this->_out($out); + $this->_newobj(); + $s = '< $v) { + if ($k != 'Style') { + if(is_float($v)) { + $v = sprintf('%.3F', $v); + } + $s .= ' /'.$k.' '.$v.''; + } + } + $this->_out($s.'>> endobj'); + return $obj_id; + } + + /** + * Output images. + * @access protected + */ + protected function _putimages() { + $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; + foreach ($this->imagekeys as $file) { + $info = $this->getImageBuffer($file); + $this->_newobj(); + $this->setImageSubBuffer($file, 'n', $this->n); + $out = '<n - 1).' 0 R'; + } + if ($info['cs'] == 'Indexed') { + $out .= ' /ColorSpace [/Indexed /DeviceRGB '.((strlen($info['pal']) / 3) - 1).' '.($this->n + 1).' 0 R]'; + } else { + $out .= ' /ColorSpace /'.$info['cs']; + if ($info['cs'] == 'DeviceCMYK') { + $out .= ' /Decode [1 0 1 0 1 0 1 0]'; + } + } + $out .= ' /BitsPerComponent '.$info['bpc']; + if (isset($info['f'])) { + $out .= ' /Filter /'.$info['f']; + } + if (isset($info['parms'])) { + $out .= ' '.$info['parms']; + } + if (isset($info['trns']) AND is_array($info['trns'])) { + $trns=''; + $count_info = count($info['trns']); + for ($i=0; $i < $count_info; ++$i) { + $trns .= $info['trns'][$i].' '.$info['trns'][$i].' '; + } + $out .= ' /Mask ['.$trns.']'; + } + $out .= ' /Length '.strlen($info['data']).' >>'; + $out .= ' '.$this->_getstream($info['data']); + $out .= ' endobj'; + $this->_out($out); + //Palette + if ($info['cs'] == 'Indexed') { + $this->_newobj(); + $pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal']; + $this->_out('<<'.$filter.'/Length '.strlen($pal).'>> '.$this->_getstream($pal).' endobj'); + } + } + } + + /** + * Output Spot Colors Resources. + * @access protected + * @since 4.0.024 (2008-09-12) + */ + protected function _putspotcolors() { + foreach ($this->spot_colors as $name => $color) { + $this->_newobj(); + $this->spot_colors[$name]['n'] = $this->n; + $out = '[/Separation /'.str_replace(' ', '#20', $name); + $out .= ' /DeviceCMYK <<'; + $out .= ' /Range [0 1 0 1 0 1 0 1] /C0 [0 0 0 0]'; + $out .= ' '.sprintf('/C1 [%.4F %.4F %.4F %.4F] ', $color['c']/100, $color['m']/100, $color['y']/100, $color['k']/100); + $out .= ' /FunctionType 2 /Domain [0 1] /N 1>>]'; + $out .= ' endobj'; + $this->_out($out); + } + } + + /** + * Output Resources Dictionary. + * @access protected + */ + protected function _putresourcedict() { + $out = '2 0 obj'; + $out .= ' << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'; + $out .= ' /Font <<'; + foreach ($this->fontkeys as $fontkey) { + $font = $this->getFontBuffer($fontkey); + $out .= ' /F'.$font['i'].' '.$font['n'].' 0 R'; + } + $out .= ' >>'; + $out .= ' /XObject <<'; + foreach ($this->imagekeys as $file) { + $info = $this->getImageBuffer($file); + $out .= ' /I'.$info['i'].' '.$info['n'].' 0 R'; + } + $out .= ' >>'; + // visibility + $out .= ' /Properties <n_ocg_print.' 0 R /OC2 '.$this->n_ocg_view.' 0 R>>'; + // transparency + $out .= ' /ExtGState <<'; + foreach ($this->extgstates as $k => $extgstate) { + if (isset($extgstate['name'])) { + $out .= ' /'.$extgstate['name']; + } else { + $out .= ' /GS'.$k; + } + $out .= ' '.$extgstate['n'].' 0 R'; + } + $out .= ' >>'; + // gradient patterns + if (isset($this->gradients) AND (count($this->gradients) > 0)) { + $out .= ' /Pattern <<'; + foreach ($this->gradients as $id => $grad) { + $out .= ' /p'.$id.' '.$grad['pattern'].' 0 R'; + } + $out .= ' >>'; + } + // gradient shadings + if (isset($this->gradients) AND (count($this->gradients) > 0)) { + $out .= ' /Shading <<'; + foreach ($this->gradients as $id => $grad) { + $out .= ' /Sh'.$id.' '.$grad['id'].' 0 R'; + } + $out .= ' >>'; + } + // spot colors + if (isset($this->spot_colors) AND (count($this->spot_colors) > 0)) { + $out .= ' /ColorSpace <<'; + foreach ($this->spot_colors as $color) { + $out .= ' /CS'.$color['i'].' '.$color['n'].' 0 R'; + } + $out .= ' >>'; + } + $out .= ' >> endobj'; + $this->_out($out); + } + + /** + * Output Resources. + * @access protected + */ + protected function _putresources() { + $this->_putextgstates(); + $this->_putocg(); + $this->_putfonts(); + $this->_putimages(); + $this->_putspotcolors(); + $this->_putshaders(); + //Resource dictionary + $this->offsets[2] = $this->bufferlen; + $this->_putresourcedict(); + $this->_putbookmarks(); + $this->_putEmbeddedFiles(); + $this->_putannotsobjs(); + $this->_putjavascript(); + // encryption + $this->_putencryption(); + } + + /** + * Adds some Metadata information (Document Information Dictionary) + * (see Chapter 14.3.3 Document Information Dictionary of PDF32000_2008.pdf Reference) + * @access protected + */ + protected function _putinfo() { + $this->_newobj(); + $out = '<<'; + if (!$this->empty_string($this->title)) { + // The document's title. + $out .= ' /Title '.$this->_textstring($this->title); + } + if (!$this->empty_string($this->author)) { + // The name of the person who created the document. + $out .= ' /Author '.$this->_textstring($this->author); + } + if (!$this->empty_string($this->subject)) { + // The subject of the document. + $out .= ' /Subject '.$this->_textstring($this->subject); + } + if (!$this->empty_string($this->keywords)) { + // Keywords associated with the document. + $out .= ' /Keywords '.$this->_textstring($this->keywords.' TCP'.'DF'); + } + if (!$this->empty_string($this->creator)) { + // If the document was converted to PDF from another format, the name of the conforming product that created the original document from which it was converted. + $out .= ' /Creator '.$this->_textstring($this->creator); + } + if (defined('PDF_PRODUCER')) { + // If the document was converted to PDF from another format, the name of the conforming product that converted it to PDF. + $out .= ' /Producer '.$this->_textstring(PDF_PRODUCER.' (TCP'.'DF)'); + } else { + // default producer + $out .= ' /Producer '.$this->_textstring('TCP'.'DF'); + } + // The date and time the document was created, in human-readable form + $out .= ' /CreationDate '.$this->_datestring(); + // The date and time the document was most recently modified, in human-readable form + $out .= ' /ModDate '.$this->_datestring(); + // A name object indicating whether the document has been modified to include trapping information + //$out .= ' /Trapped /False'); + $out .= ' >> endobj'; + $this->_out($out); + } + + /** + * Output Catalog. + * @access protected + */ + protected function _putcatalog() { + $this->_newobj(); + $out = '<< /Type /Catalog'; + $out .= ' /Pages 1 0 R'; + if ($this->ZoomMode == 'fullpage') { + $out .= ' /OpenAction [3 0 R /Fit]'; + } elseif ($this->ZoomMode == 'fullwidth') { + $out .= ' /OpenAction [3 0 R /FitH null]'; + } elseif ($this->ZoomMode == 'real') { + $out .= ' /OpenAction [3 0 R /XYZ null null 1]'; + } elseif (!is_string($this->ZoomMode)) { + $out .= ' /OpenAction [3 0 R /XYZ null null '.($this->ZoomMode / 100).']'; + } + if (isset($this->LayoutMode) AND (!$this->empty_string($this->LayoutMode))) { + $out .= ' /PageLayout /'.$this->LayoutMode; + } + if (isset($this->PageMode) AND (!$this->empty_string($this->PageMode))) { + $out .= ' /PageMode /'.$this->PageMode; + } + if (isset($this->l['a_meta_language'])) { + $out .= ' /Lang /'.$this->l['a_meta_language']; + } + $out .= ' /Names <<'; + if ((!empty($this->javascript)) OR (!empty($this->js_objects))) { + $out .= ' /JavaScript '.($this->n_js).' 0 R'; + } + $out .= ' >>'; + if (count($this->outlines) > 0) { + $out .= ' /Outlines '.$this->OutlineRoot.' 0 R'; + $out .= ' /PageMode /UseOutlines'; + } + $out .= ' '.$this->_putviewerpreferences(); + $p = $this->n_ocg_print.' 0 R'; + $v = $this->n_ocg_view.' 0 R'; + $as = '<> <>'; + $out .= ' /OCProperties <>>>'; + // AcroForm + if (!empty($this->form_obj_id) OR ($this->sign AND isset($this->signature_data['cert_type']))) { + $out .= ' /AcroForm<<'; + $objrefs = ''; + if ($this->sign AND isset($this->signature_data['cert_type'])) { + $objrefs .= $this->sig_obj_id.' 0 R'; + } + if (!empty($this->form_obj_id)) { + foreach($this->form_obj_id as $objid) { + $objrefs .= ' '.$objid.' 0 R'; + } + } + $out .= ' /Fields ['.$objrefs.']'; + $out .= ' /NeedAppearances '.(empty($this->form_obj_id)?'false':'true'); + if ($this->sign AND isset($this->signature_data['cert_type'])) { + $out .= ' /SigFlags 3'; + } + //$out .= ' /CO '; + if (isset($this->annotation_fonts) AND !empty($this->annotation_fonts)) { + $out .= ' /DR <<'; + $out .= ' /Font <<'; + foreach ($this->annotation_fonts as $font => $fontkey) { + $out .= ' /F'.($fontkey + 1).' '.$this->font_obj_ids[$font].' 0 R'; + } + $out .= ' >> >>'; + } + $out .= ' /DA (/F'.(array_search('helvetica', $this->fontkeys) + 1).' 0 Tf 0 g)'; + $out .= ' /Q '.(($this->rtl)?'2':'0'); + //$out .= ' /XFA '; + $out .= ' >>'; + // signatures + if ($this->sign AND isset($this->signature_data['cert_type'])) { + if ($this->signature_data['cert_type'] > 0) { + $out .= ' /Perms<sig_obj_id + 1).' 0 R>>'; + } else { + $out .= ' /Perms<sig_obj_id + 1).' 0 R>>'; + } + } + } + $out .= ' >> endobj'; + $this->_out($out); + } + + /** + * Output viewer preferences. + * @return string for viewer preferences + * @author Nicola asuni + * @since 3.1.000 (2008-06-09) + * @access protected + */ + protected function _putviewerpreferences() { + $out = '/ViewerPreferences <<'; + if ($this->rtl) { + $out .= ' /Direction /R2L'; + } else { + $out .= ' /Direction /L2R'; + } + if (isset($this->viewer_preferences['HideToolbar']) AND ($this->viewer_preferences['HideToolbar'])) { + $out .= ' /HideToolbar true'; + } + if (isset($this->viewer_preferences['HideMenubar']) AND ($this->viewer_preferences['HideMenubar'])) { + $out .= ' /HideMenubar true'; + } + if (isset($this->viewer_preferences['HideWindowUI']) AND ($this->viewer_preferences['HideWindowUI'])) { + $out .= ' /HideWindowUI true'; + } + if (isset($this->viewer_preferences['FitWindow']) AND ($this->viewer_preferences['FitWindow'])) { + $out .= ' /FitWindow true'; + } + if (isset($this->viewer_preferences['CenterWindow']) AND ($this->viewer_preferences['CenterWindow'])) { + $out .= ' /CenterWindow true'; + } + if (isset($this->viewer_preferences['DisplayDocTitle']) AND ($this->viewer_preferences['DisplayDocTitle'])) { + $out .= ' /DisplayDocTitle true'; + } + if (isset($this->viewer_preferences['NonFullScreenPageMode'])) { + $out .= ' /NonFullScreenPageMode /'.$this->viewer_preferences['NonFullScreenPageMode']; + } + if (isset($this->viewer_preferences['ViewArea'])) { + $out .= ' /ViewArea /'.$this->viewer_preferences['ViewArea']; + } + if (isset($this->viewer_preferences['ViewClip'])) { + $out .= ' /ViewClip /'.$this->viewer_preferences['ViewClip']; + } + if (isset($this->viewer_preferences['PrintArea'])) { + $out .= ' /PrintArea /'.$this->viewer_preferences['PrintArea']; + } + if (isset($this->viewer_preferences['PrintClip'])) { + $out .= ' /PrintClip /'.$this->viewer_preferences['PrintClip']; + } + if (isset($this->viewer_preferences['PrintScaling'])) { + $out .= ' /PrintScaling /'.$this->viewer_preferences['PrintScaling']; + } + if (isset($this->viewer_preferences['Duplex']) AND (!$this->empty_string($this->viewer_preferences['Duplex']))) { + $out .= ' /Duplex /'.$this->viewer_preferences['Duplex']; + } + if (isset($this->viewer_preferences['PickTrayByPDFSize'])) { + if ($this->viewer_preferences['PickTrayByPDFSize']) { + $out .= ' /PickTrayByPDFSize true'; + } else { + $out .= ' /PickTrayByPDFSize false'; + } + } + if (isset($this->viewer_preferences['PrintPageRange'])) { + $PrintPageRangeNum = ''; + foreach ($this->viewer_preferences['PrintPageRange'] as $k => $v) { + $PrintPageRangeNum .= ' '.($v - 1).''; + } + $out .= ' /PrintPageRange ['.substr($PrintPageRangeNum,1).']'; + } + if (isset($this->viewer_preferences['NumCopies'])) { + $out .= ' /NumCopies '.intval($this->viewer_preferences['NumCopies']); + } + $out .= ' >>'; + return $out; + } + + /** + * Output trailer. + * @access protected + */ + protected function _puttrailer() { + $out = 'trailer <<'; + $out .= ' /Size '.($this->n + 1); + $out .= ' /Root '.$this->n.' 0 R'; + $out .= ' /Info '.($this->n - 1).' 0 R'; + if ($this->encrypted) { + $out .= ' /Encrypt '.$this->enc_obj_id.' 0 R'; + $out .= ' /ID [()()]'; + } + $out .= ' >>'; + $this->_out($out); + } + + /** + * Output PDF header. + * @access protected + */ + protected function _putheader() { + $this->_out('%PDF-'.$this->PDFVersion); + } + + /** + * Output end of document (EOF). + * @access protected + */ + protected function _enddoc() { + $this->state = 1; + $this->_putheader(); + $this->_putpages(); + $this->_putresources(); + // Signature + if ($this->sign AND isset($this->signature_data['cert_type'])) { + // widget annotation for signature + $this->sig_obj_id = $this->_newobj(); + // --- replace signature ID on the first page --- + // get the document content + $pdfdoc = $this->getBuffer(); + // Remove the original buffer + if (isset($this->diskcache) AND $this->diskcache) { + // remove buffer file from cache + unlink($this->buffer); + } + unset($this->buffer); + $signature_widget_ref = sprintf('%u 0 R', $this->sig_obj_id); + $signature_widget_ref .= str_repeat(' ', (strlen($this->sig_annot_ref) - strlen($signature_widget_ref))); + $pdfdoc = str_replace($this->sig_annot_ref, $signature_widget_ref, $pdfdoc); + $this->diskcache = false; + $this->buffer = &$pdfdoc; + $this->bufferlen = strlen($pdfdoc); + // --- + $out = '<< /Type /Annot /Subtype /Widget /Rect [0 0 0 0]'; + $out .= ' /P 3 0 R'; // link to first page object + $out .= ' /FT /Sig'; + $out .= ' /T '.$this->_textstring('Signature'); + $out .= ' /Ff 0'; + $out .= ' /V '.($this->sig_obj_id + 1).' 0 R'; + $out .= ' >> endobj'; + $this->_out($out); + // signature + $this->_putsignature(); + } + // Info + $this->_putinfo(); + // Catalog + $this->_putcatalog(); + // Cross-ref + $o = $this->bufferlen; + $this->_out('xref'); + $this->_out('0 '.($this->n + 1)); + $this->_out('0000000000 65535 f '); + for ($i=1; $i <= $this->n; ++$i) { + $this->_out(sprintf('%010d 00000 n ', $this->offsets[$i])); + } + // Embedded Files + if (isset($this->embeddedfiles) AND count($this->embeddedfiles) > 0) { + $this->_out($this->embedded_start_obj_id.' '.count($this->embeddedfiles)); + foreach ($this->embeddedfiles as $filename => $filedata) { + $this->_out(sprintf('%010d 00000 n ', $this->offsets[$filedata['n']])); + } + } + // Annotation Objects + if ($this->annot_obj_id > $this->annots_start_obj_id) { + $this->_out(($this->annots_start_obj_id + 1).' '.($this->annot_obj_id - $this->annots_start_obj_id)); + for ($i = ($this->annots_start_obj_id + 1); $i <= $this->annot_obj_id; ++$i) { + $this->_out(sprintf('%010d 00000 n ', $this->offsets[$i])); + } + } + // Javascript Objects + if ($this->js_obj_id > $this->js_start_obj_id) { + $this->_out(($this->js_start_obj_id + 1).' '.($this->js_obj_id - $this->js_start_obj_id)); + for ($i = ($this->js_start_obj_id + 1); $i <= $this->js_obj_id; ++$i) { + $this->_out(sprintf('%010d 00000 n ', $this->offsets[$i])); + } + } + // Appearance streams XObjects + if ($this->apxo_obj_id > $this->apxo_start_obj_id) { + $this->_out(($this->apxo_start_obj_id + 1).' '.($this->apxo_obj_id - $this->apxo_start_obj_id)); + for ($i = ($this->apxo_start_obj_id + 1); $i <= $this->apxo_obj_id; ++$i) { + $this->_out(sprintf('%010d 00000 n ', $this->offsets[$i])); + } + } + //Trailer + $this->_puttrailer(); + $this->_out('startxref'); + $this->_out($o); + $this->_out('%%EOF'); + $this->state = 3; // end-of-doc + if ($this->diskcache) { + // remove temporary files used for images + foreach ($this->imagekeys as $key) { + // remove temporary files + unlink($this->images[$key]); + } + foreach ($this->fontkeys as $key) { + // remove temporary files + unlink($this->fonts[$key]); + } + } + } + + /** + * Initialize a new page. + * @param string $orientation page orientation. Possible values are (case insensitive):
    • P or PORTRAIT (default)
    • L or LANDSCAPE
    + * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).
    • 4A0
    • 2A0
    • A0
    • A1
    • A2
    • A3
    • A4 (default)
    • A5
    • A6
    • A7
    • A8
    • A9
    • A10
    • B0
    • B1
    • B2
    • B3
    • B4
    • B5
    • B6
    • B7
    • B8
    • B9
    • B10
    • C0
    • C1
    • C2
    • C3
    • C4
    • C5
    • C6
    • C7
    • C8
    • C9
    • C10
    • RA0
    • RA1
    • RA2
    • RA3
    • RA4
    • SRA0
    • SRA1
    • SRA2
    • SRA3
    • SRA4
    • LETTER
    • LEGAL
    • EXECUTIVE
    • FOLIO
    + * @access protected + */ + protected function _beginpage($orientation='', $format='') { + ++$this->page; + $this->setPageBuffer($this->page, ''); + // initialize array for graphics tranformation positions inside a page buffer + $this->transfmrk[$this->page] = array(); + $this->state = 2; + if ($this->empty_string($orientation)) { + if (isset($this->CurOrientation)) { + $orientation = $this->CurOrientation; + } else { + $orientation = 'P'; + } + } + if ($this->empty_string($format)) { + $this->setPageOrientation($orientation); + } else { + $this->setPageFormat($format, $orientation); + } + if ($this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + $this->y = $this->tMargin; + if (isset($this->newpagegroup[$this->page])) { + // start a new group + $n = sizeof($this->pagegroups) + 1; + $alias = '{nb'.$n.'}'; + $this->pagegroups[$alias] = 1; + $this->currpagegroup = $alias; + } elseif ($this->currpagegroup) { + ++$this->pagegroups[$this->currpagegroup]; + } + } + + /** + * Mark end of page. + * @access protected + */ + protected function _endpage() { + $this->setVisibility('all'); + $this->state = 1; + } + + /** + * Begin a new object and return the object number. + * @return int object number + * @access protected + */ + protected function _newobj() { + ++$this->n; + $this->offsets[$this->n] = $this->bufferlen; + $this->_out($this->n.' 0 obj'); + return $this->n; + } + + /** + * Underline text. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param string $txt text to underline + * @access protected + */ + protected function _dounderline($x, $y, $txt) { + $w = $this->GetStringWidth($txt); + return $this->_dounderlinew($x, $y, $w); + } + + /** + * Underline for rectangular text area. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param int $w width to underline + * @access protected + * @since 4.8.008 (2009-09-29) + */ + protected function _dounderlinew($x, $y, $w) { + $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; + return sprintf('%.2F %.2F %.2F %.2F re f', $x * $this->k, ($this->h - $y + ($linew / 2)) * $this->k, $w * $this->k, $linew); + } + + /** + * Line through text. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param string $txt text to linethrough + * @access protected + */ + protected function _dolinethrough($x, $y, $txt) { + $w = $this->GetStringWidth($txt); + return $this->_dolinethroughw($x, $y, $w); + } + + /** + * Line through for rectangular text area. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param string $txt text to linethrough + * @access protected + * @since 4.9.008 (2009-09-29) + */ + protected function _dolinethroughw($x, $y, $w) { + $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; + return sprintf('%.2F %.2F %.2F %.2F re f', $x * $this->k, ($this->h - $y + ($this->FontSize / 3) + ($linew / 2)) * $this->k, $w * $this->k, $linew); + } + + /** + * Overline text. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param string $txt text to overline + * @access protected + * @since 4.9.015 (2010-04-19) + */ + protected function _dooverline($x, $y, $txt) { + $w = $this->GetStringWidth($txt); + return $this->_dooverlinew($x, $y, $w); + } + + /** + * Overline for rectangular text area. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param int $w width to overline + * @access protected + * @since 4.9.015 (2010-04-19) + */ + protected function _dooverlinew($x, $y, $w) { + $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; + return sprintf('%.2F %.2F %.2F %.2F re f', $x * $this->k, ($this->h - $y + $this->FontAscent - ($linew / 2)) * $this->k, $w * $this->k, $linew); + + } + + /** + * Read a 4-byte integer from file. + * @param string $f file name. + * @return 4-byte integer + * @access protected + */ + protected function _freadint($f) { + $a = unpack('Ni', fread($f, 4)); + return $a['i']; + } + + /** + * Add "\" before "\", "(" and ")" + * @param string $s string to escape. + * @return string escaped string. + * @access protected + */ + protected function _escape($s) { + // the chr(13) substitution fixes the Bugs item #1421290. + return strtr($s, array(')' => '\\)', '(' => '\\(', '\\' => '\\\\', chr(13) => '\r')); + } + + /** + * Format a data string for meta information + * @param string $s data string to escape. + * @return string escaped string. + * @access protected + */ + protected function _datastring($s) { + if ($this->encrypted) { + $s = $this->_RC4($this->_objectkey($this->n), $s); + } + return '('. $this->_escape($s).')'; + } + + /** + * Format a data string for annotation objects + * @param string $s data string to escape. + * @return string escaped string. + * @access protected + */ + protected function _dataannobjstring($s) { + if ($this->encrypted) { + $s = $this->_RC4($this->_objectkey($this->annot_obj_id + 1), $s); + } + return '('. $this->_escape($s).')'; + } + + /** + * Returns a formatted date for meta information + * @return string escaped date string. + * @access protected + * @since 4.6.028 (2009-08-25) + */ + protected function _datestring() { + $current_time = substr_replace(date('YmdHisO'), '\'', (0 - 2), 0).'\''; + return $this->_datastring('D:'.$current_time); + } + + /** + * Format a text string for meta information + * @param string $s string to escape. + * @return string escaped string. + * @access protected + */ + protected function _textstring($s) { + if ($this->isunicode) { + //Convert string to UTF-16BE + $s = $this->UTF8ToUTF16BE($s, true); + } + return $this->_datastring($s); + } + + /** + * Format a UTF-8 text string for meta information on annotations + * @param string $s string to escape. + * @return string escaped string. + * @access protected + */ + protected function _textannobjstring($s) { + if ($this->isunicode) { + //Convert string to UTF-16BE + $s = $this->UTF8ToUTF16BE($s, true); + } + return $this->_dataannobjstring($s); + } + + /** + * Format a text string + * @param string $s string to escape. + * @return string escaped string. + * @access protected + */ + protected function _escapetext($s) { + if ($this->isunicode) { + if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) { + $s = $this->UTF8ToLatin1($s); + } else { + //Convert string to UTF-16BE and reverse RTL language + $s = $this->utf8StrRev($s, false, $this->tmprtl); + } + } + return $this->_escape($s); + } + + /** + * Format output stream. + * @param string $s string to output. + * @param int $n object reference for encryption mode + * @access protected + */ + protected function _getstream($s, $n=0) { + if ($this->encrypted) { + if ($n <= 0) { + // default to current object + $n = $this->n; + } + $s = $this->_RC4($this->_objectkey($n), $s); + } + return "stream\n".$s."\nendstream"; + } + + /** + * Output a stream. + * @param string $s string to output. + * @param int $n object reference for encryption mode + * @access protected + */ + protected function _putstream($s, $n=0) { + $this->_out($this->_getstream($s, $n)); + } + + /** + * Output a string to the document. + * @param string $s string to output. + * @access protected + */ + protected function _out($s) { + if ($this->state == 2) { + if ((!$this->InFooter) AND isset($this->footerlen[$this->page]) AND ($this->footerlen[$this->page] > 0)) { + // puts data before page footer + $pagebuff = $this->getPageBuffer($this->page); + $page = substr($pagebuff, 0, -$this->footerlen[$this->page]); + $footer = substr($pagebuff, -$this->footerlen[$this->page]); + $this->setPageBuffer($this->page, $page.$s."\n".$footer); + // update footer position + $this->footerpos[$this->page] += strlen($s."\n"); + } else { + $this->setPageBuffer($this->page, $s."\n", true); + } + } else { + $this->setBuffer($s."\n"); + } + } + + /** + * Converts UTF-8 strings to codepoints array.
    + * Invalid byte sequences will be replaced with 0xFFFD (replacement character)
    + * Based on: http://www.faqs.org/rfcs/rfc3629.html + *
    +		 *    Char. number range  |        UTF-8 octet sequence
    +		 *       (hexadecimal)    |              (binary)
    +		 *    --------------------+-----------------------------------------------
    +		 *    0000 0000-0000 007F | 0xxxxxxx
    +		 *    0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    +		 *    0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    +		 *    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    +		 *    ---------------------------------------------------------------------
    +		 *
    +		 *   ABFN notation:
    +		 *   ---------------------------------------------------------------------
    +		 *   UTF8-octets = *( UTF8-char )
    +		 *   UTF8-char   = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4
    +		 *   UTF8-1      = %x00-7F
    +		 *   UTF8-2      = %xC2-DF UTF8-tail
    +		 *
    +		 *   UTF8-3      = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
    +		 *                 %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
    +		 *   UTF8-4      = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
    +		 *                 %xF4 %x80-8F 2( UTF8-tail )
    +		 *   UTF8-tail   = %x80-BF
    +		 *   ---------------------------------------------------------------------
    +		 * 
    + * @param string $str string to process. + * @return array containing codepoints (UTF-8 characters values) + * @access protected + * @author Nicola Asuni + * @since 1.53.0.TC005 (2005-01-05) + */ + protected function UTF8StringToArray($str) { + if (isset($this->cache_UTF8StringToArray['_'.$str])) { + // return cached value + return($this->cache_UTF8StringToArray['_'.$str]); + } + // check cache size + if ($this->cache_size_UTF8StringToArray >= $this->cache_maxsize_UTF8StringToArray) { + // remove first element + array_shift($this->cache_UTF8StringToArray); + } + ++$this->cache_size_UTF8StringToArray; + if (!$this->isunicode) { + // split string into array of equivalent codes + $strarr = array(); + $strlen = strlen($str); + for ($i=0; $i < $strlen; ++$i) { + $strarr[] = ord($str[$i]); + } + // insert new value on cache + $this->cache_UTF8StringToArray['_'.$str] = $strarr; + return $strarr; + } + $unicode = array(); // array containing unicode values + $bytes = array(); // array containing single character byte sequences + $numbytes = 1; // number of octetc needed to represent the UTF-8 character + $str .= ''; // force $str to be a string + $length = strlen($str); + for ($i = 0; $i < $length; ++$i) { + $char = ord($str[$i]); // get one string character at time + if (count($bytes) == 0) { // get starting octect + if ($char <= 0x7F) { + $unicode[] = $char; // use the character "as is" because is ASCII + $numbytes = 1; + } elseif (($char >> 0x05) == 0x06) { // 2 bytes character (0x06 = 110 BIN) + $bytes[] = ($char - 0xC0) << 0x06; + $numbytes = 2; + } elseif (($char >> 0x04) == 0x0E) { // 3 bytes character (0x0E = 1110 BIN) + $bytes[] = ($char - 0xE0) << 0x0C; + $numbytes = 3; + } elseif (($char >> 0x03) == 0x1E) { // 4 bytes character (0x1E = 11110 BIN) + $bytes[] = ($char - 0xF0) << 0x12; + $numbytes = 4; + } else { + // use replacement character for other invalid sequences + $unicode[] = 0xFFFD; + $bytes = array(); + $numbytes = 1; + } + } elseif (($char >> 0x06) == 0x02) { // bytes 2, 3 and 4 must start with 0x02 = 10 BIN + $bytes[] = $char - 0x80; + if (count($bytes) == $numbytes) { + // compose UTF-8 bytes to a single unicode value + $char = $bytes[0]; + for ($j = 1; $j < $numbytes; ++$j) { + $char += ($bytes[$j] << (($numbytes - $j - 1) * 0x06)); + } + if ((($char >= 0xD800) AND ($char <= 0xDFFF)) OR ($char >= 0x10FFFF)) { + /* The definition of UTF-8 prohibits encoding character numbers between + U+D800 and U+DFFF, which are reserved for use with the UTF-16 + encoding form (as surrogate pairs) and do not directly represent + characters. */ + $unicode[] = 0xFFFD; // use replacement character + } else { + $unicode[] = $char; // add char to array + } + // reset data for next char + $bytes = array(); + $numbytes = 1; + } + } else { + // use replacement character for other invalid sequences + $unicode[] = 0xFFFD; + $bytes = array(); + $numbytes = 1; + } + } + // insert new value on cache + $this->cache_UTF8StringToArray['_'.$str] = $unicode; + return $unicode; + } + + /** + * Converts UTF-8 strings to UTF16-BE.
    + * @param string $str string to process. + * @param boolean $setbom if true set the Byte Order Mark (BOM = 0xFEFF) + * @return string + * @access protected + * @author Nicola Asuni + * @since 1.53.0.TC005 (2005-01-05) + * @uses UTF8StringToArray(), arrUTF8ToUTF16BE() + */ + protected function UTF8ToUTF16BE($str, $setbom=true) { + if (!$this->isunicode) { + return $str; // string is not in unicode + } + $unicode = $this->UTF8StringToArray($str); // array containing UTF-8 unicode values + return $this->arrUTF8ToUTF16BE($unicode, $setbom); + } + + /** + * Converts UTF-8 strings to Latin1 when using the standard 14 core fonts.
    + * @param string $str string to process. + * @return string + * @author Andrew Whitehead, Nicola Asuni + * @access protected + * @since 3.2.000 (2008-06-23) + */ + protected function UTF8ToLatin1($str) { + global $utf8tolatin; + if (!$this->isunicode) { + return $str; // string is not in unicode + } + $outstr = ''; // string to be returned + $unicode = $this->UTF8StringToArray($str); // array containing UTF-8 unicode values + foreach ($unicode as $char) { + if ($char < 256) { + $outstr .= chr($char); + } elseif (array_key_exists($char, $utf8tolatin)) { + // map from UTF-8 + $outstr .= chr($utf8tolatin[$char]); + } elseif ($char == 0xFFFD) { + // skip + } else { + $outstr .= '?'; + } + } + return $outstr; + } + + /** + * Converts UTF-8 characters array to array of Latin1 characters
    + * @param array $unicode array containing UTF-8 unicode values + * @return array + * @author Nicola Asuni + * @access protected + * @since 4.8.023 (2010-01-15) + */ + protected function UTF8ArrToLatin1($unicode) { + global $utf8tolatin; + if ((!$this->isunicode) OR ($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + return $unicode; // string is not in unicode + } + $outarr = array(); // array to be returned + foreach ($unicode as $char) { + if ($char < 256) { + $outarr[] = $char; + } elseif (array_key_exists($char, $utf8tolatin)) { + // map from UTF-8 + $outarr[] = $utf8tolatin[$char]; + } elseif ($char == 0xFFFD) { + // skip + } else { + $outarr[] = 63; // '?' character + } + } + return $outarr; + } + + /** + * Converts array of UTF-8 characters to UTF16-BE string.
    + * Based on: http://www.faqs.org/rfcs/rfc2781.html + *
    +		 *   Encoding UTF-16:
    +		 *
    + 		 *   Encoding of a single character from an ISO 10646 character value to
    +		 *    UTF-16 proceeds as follows. Let U be the character number, no greater
    +		 *    than 0x10FFFF.
    +		 *
    +		 *    1) If U < 0x10000, encode U as a 16-bit unsigned integer and
    +		 *       terminate.
    +		 *
    +		 *    2) Let U' = U - 0x10000. Because U is less than or equal to 0x10FFFF,
    +		 *       U' must be less than or equal to 0xFFFFF. That is, U' can be
    +		 *       represented in 20 bits.
    +		 *
    +		 *    3) Initialize two 16-bit unsigned integers, W1 and W2, to 0xD800 and
    +		 *       0xDC00, respectively. These integers each have 10 bits free to
    +		 *       encode the character value, for a total of 20 bits.
    +		 *
    +		 *    4) Assign the 10 high-order bits of the 20-bit U' to the 10 low-order
    +		 *       bits of W1 and the 10 low-order bits of U' to the 10 low-order
    +		 *       bits of W2. Terminate.
    +		 *
    +		 *    Graphically, steps 2 through 4 look like:
    +		 *    U' = yyyyyyyyyyxxxxxxxxxx
    +		 *    W1 = 110110yyyyyyyyyy
    +		 *    W2 = 110111xxxxxxxxxx
    +		 * 
    + * @param array $unicode array containing UTF-8 unicode values + * @param boolean $setbom if true set the Byte Order Mark (BOM = 0xFEFF) + * @return string + * @access protected + * @author Nicola Asuni + * @since 2.1.000 (2008-01-08) + * @see UTF8ToUTF16BE() + */ + protected function arrUTF8ToUTF16BE($unicode, $setbom=true) { + $outstr = ''; // string to be returned + if ($setbom) { + $outstr .= "\xFE\xFF"; // Byte Order Mark (BOM) + } + foreach ($unicode as $char) { + if ($char == 0xFFFD) { + $outstr .= "\xFF\xFD"; // replacement character + } elseif ($char < 0x10000) { + $outstr .= chr($char >> 0x08); + $outstr .= chr($char & 0xFF); + } else { + $char -= 0x10000; + $w1 = 0xD800 | ($char >> 0x10); + $w2 = 0xDC00 | ($char & 0x3FF); + $outstr .= chr($w1 >> 0x08); + $outstr .= chr($w1 & 0xFF); + $outstr .= chr($w2 >> 0x08); + $outstr .= chr($w2 & 0xFF); + } + } + return $outstr; + } + // ==================================================== + + /** + * Set header font. + * @param array $font font + * @access public + * @since 1.1 + */ + public function setHeaderFont($font) { + $this->header_font = $font; + } + + /** + * Get header font. + * @return array() + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getHeaderFont() { + return $this->header_font; + } + + /** + * Set footer font. + * @param array $font font + * @access public + * @since 1.1 + */ + public function setFooterFont($font) { + $this->footer_font = $font; + } + + /** + * Get Footer font. + * @return array() + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getFooterFont() { + return $this->footer_font; + } + + /** + * Set language array. + * @param array $language + * @access public + * @since 1.1 + */ + public function setLanguageArray($language) { + $this->l = $language; + if (isset($this->l['a_meta_dir'])) { + $this->rtl = $this->l['a_meta_dir']=='rtl' ? true : false; + } else { + $this->rtl = false; + } + } + + /** + * Returns the PDF data. + * @access public + */ + public function getPDFData() { + if ($this->state < 3) { + $this->Close(); + } + return $this->buffer; + } + + /** + * Output anchor link. + * @param string $url link URL or internal link (i.e.: <a href="#23">link to page 23</a>) + * @param string $name link name + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param boolean $firstline if true prints only the first line and return the remaining string. + * @param array $color array of RGB text color + * @param string $style font style (U, D, B, I) + * @param boolean $firstblock if true the string is the starting of a line. + * @return the number of cells used or the remaining text if $firstline = true; + * @access public + */ + public function addHtmlLink($url, $name, $fill=0, $firstline=false, $color='', $style=-1, $firstblock=false) { + if (!$this->empty_string($url) AND ($url[0] == '#')) { + // convert url to internal link + $page = intval(substr($url, 1)); + $url = $this->AddLink(); + $this->SetLink($url, 0, $page); + } + // store current settings + $prevcolor = $this->fgcolor; + $prevstyle = $this->FontStyle; + if (empty($color)) { + $this->SetTextColorArray($this->htmlLinkColorArray); + } else { + $this->SetTextColorArray($color); + } + if ($style == -1) { + $this->SetFont('', $this->FontStyle.$this->htmlLinkFontStyle); + } else { + $this->SetFont('', $this->FontStyle.$style); + } + $ret = $this->Write($this->lasth, $name, $url, $fill, '', false, 0, $firstline, $firstblock, 0); + // restore settings + $this->SetFont('', $prevstyle); + $this->SetTextColorArray($prevcolor); + return $ret; + } + + /** + * Returns an associative array (keys: R,G,B) from an html color name or a six-digit or three-digit hexadecimal color representation (i.e. #3FE5AA or #7FF). + * @param string $color html color + * @return array RGB color or false in case of error. + * @access public + */ + public function convertHTMLColorToDec($color='#FFFFFF') { + global $webcolor; + $returncolor = false; + $color = preg_replace('/[\s]*/', '', $color); // remove extra spaces + $color = strtolower($color); + if (($dotpos = strpos($color, '.')) !== false) { + // remove class parent (i.e.: color.red) + $color = substr($color, ($dotpos + 1)); + } + if (strlen($color) == 0) { + return false; + } + if (substr($color, 0, 3) == 'rgb') { + $codes = substr($color, 4); + $codes = str_replace(')', '', $codes); + $returncolor = explode(',', $codes, 3); + return $returncolor; + } + if (substr($color, 0, 1) != '#') { + // decode color name + if (isset($webcolor[$color])) { + $color_code = $webcolor[$color]; + } else { + return false; + } + } else { + $color_code = substr($color, 1); + } + switch (strlen($color_code)) { + case 3: { + // three-digit hexadecimal representation + $r = substr($color_code, 0, 1); + $g = substr($color_code, 1, 1); + $b = substr($color_code, 2, 1); + $returncolor['R'] = hexdec($r.$r); + $returncolor['G'] = hexdec($g.$g); + $returncolor['B'] = hexdec($b.$b); + break; + } + case 6: { + // six-digit hexadecimal representation + $returncolor['R'] = hexdec(substr($color_code, 0, 2)); + $returncolor['G'] = hexdec(substr($color_code, 2, 2)); + $returncolor['B'] = hexdec(substr($color_code, 4, 2)); + break; + } + } + return $returncolor; + } + + /** + * Converts pixels to User's Units. + * @param int $px pixels + * @return float value in user's unit + * @access public + * @see setImageScale(), getImageScale() + */ + public function pixelsToUnits($px) { + return ($px / ($this->imgscale * $this->k)); + } + + /** + * Reverse function for htmlentities. + * Convert entities in UTF-8. + * @param $text_to_convert Text to convert. + * @return string converted + * @access public + */ + public function unhtmlentities($text_to_convert) { + return html_entity_decode($text_to_convert, ENT_QUOTES, $this->encoding); + } + + // ENCRYPTION METHODS ---------------------------------- + // SINCE 2.0.000 (2008-01-02) + + /** + * Compute encryption key depending on object number where the encrypted data is stored + * @param int $n object number + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected function _objectkey($n) { + return substr($this->_md5_16($this->encryption_key.pack('VXxx', $n)), 0, 10); + } + + /** + * Put encryption on PDF document. + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected function _putencryption() { + if (!$this->encrypted) { + return; + } + $this->_newobj(); + $this->enc_obj_id = $this->n; + $out = '<< /Filter /Standard /V 1 /R 2'; + $out .= ' /O ('.$this->_escape($this->Ovalue).')'; + $out .= ' /U ('.$this->_escape($this->Uvalue).')'; + $out .= ' /P '.$this->Pvalue; + $out .= ' >> endobj'; + $this->_out($out); + } + + /** + * Returns the input text exrypted using RC4 algorithm and the specified key. + * RC4 is the standard encryption algorithm used in PDF format + * @param string $key encryption key + * @param String $text input text to be encrypted + * @return String encrypted text + * @access protected + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec + */ + protected function _RC4($key, $text) { + if ($this->last_rc4_key != $key) { + $k = str_repeat($key, ((256 / strlen($key)) + 1)); + $rc4 = range(0, 255); + $j = 0; + for ($i = 0; $i < 256; ++$i) { + $t = $rc4[$i]; + $j = ($j + $t + ord($k[$i])) % 256; + $rc4[$i] = $rc4[$j]; + $rc4[$j] = $t; + } + $this->last_rc4_key = $key; + $this->last_rc4_key_c = $rc4; + } else { + $rc4 = $this->last_rc4_key_c; + } + $len = strlen($text); + $a = 0; + $b = 0; + $out = ''; + for ($i = 0; $i < $len; ++$i) { + $a = ($a + 1) % 256; + $t = $rc4[$a]; + $b = ($b + $t) % 256; + $rc4[$a] = $rc4[$b]; + $rc4[$b] = $t; + $k = $rc4[($rc4[$a] + $rc4[$b]) % 256]; + $out .= chr(ord($text[$i]) ^ $k); + } + return $out; + } + + /** + * Encrypts a string using MD5 and returns it's value as a binary string. + * @param string $str input string + * @return String MD5 encrypted binary string + * @access protected + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec + */ + protected function _md5_16($str) { + return pack('H*', md5($str)); + } + + /** + * Compute O value (used for RC4 encryption) + * @param String $user_pass user password + * @param String $owner_pass user password + * @return String O value + * @access protected + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec + */ + protected function _Ovalue($user_pass, $owner_pass) { + $tmp = $this->_md5_16($owner_pass); + $owner_RC4_key = substr($tmp, 0, 5); + return $this->_RC4($owner_RC4_key, $user_pass); + } + + /** + * Compute U value (used for RC4 encryption) + * @return String U value + * @access protected + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec + */ + protected function _Uvalue() { + return $this->_RC4($this->encryption_key, $this->padding); + } + + /** + * Compute encryption key + * @param String $user_pass user password + * @param String $owner_pass user password + * @param String $protection protection type + * @access protected + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec + */ + protected function _generateencryptionkey($user_pass, $owner_pass, $protection) { + // Pad passwords + $user_pass = substr($user_pass.$this->padding, 0, 32); + $owner_pass = substr($owner_pass.$this->padding, 0, 32); + // Compute O value + $this->Ovalue = $this->_Ovalue($user_pass, $owner_pass); + // Compute encyption key + $tmp = $this->_md5_16($user_pass.$this->Ovalue.chr($protection)."\xFF\xFF\xFF"); + $this->encryption_key = substr($tmp, 0, 5); + // Compute U value + $this->Uvalue = $this->_Uvalue(); + // Compute P value + $this->Pvalue = -(($protection^255) + 1); + } + + /** + * Set document protection + * The permission array is composed of values taken from the following ones: + * - copy: copy text and images to the clipboard + * - print: print the document + * - modify: modify it (except for annotations and forms) + * - annot-forms: add annotations and forms + * Remark: the protection against modification is for people who have the full Acrobat product. + * If you don't set any password, the document will open as usual. If you set a user password, the PDF viewer will ask for it before displaying the document. The master password, if different from the user one, can be used to get full access. + * Note: protecting a document requires to encrypt it, which increases the processing time a lot. This can cause a PHP time-out in some cases, especially if the document contains images or fonts. + * @param Array $permissions the set of permissions. Empty by default (only viewing is allowed). (print, modify, copy, annot-forms) + * @param String $user_pass user password. Empty by default. + * @param String $owner_pass owner password. If not specified, a random value is used. + * @access public + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec + */ + public function SetProtection($permissions=array(), $user_pass='', $owner_pass=null) { + $options = array('print' => 4, 'modify' => 8, 'copy' => 16, 'annot-forms' => 32); + $protection = 192; + foreach ($permissions as $permission) { + if (!isset($options[$permission])) { + $this->Error('Incorrect permission: '.$permission); + } + $protection += $options[$permission]; + } + if ($owner_pass === null) { + $owner_pass = uniqid(rand()); + } + $this->encrypted = true; + $this->_generateencryptionkey($user_pass, $owner_pass, $protection); + } + + // END OF ENCRYPTION FUNCTIONS ------------------------- + + // START TRANSFORMATIONS SECTION ----------------------- + + /** + * Starts a 2D tranformation saving current graphic state. + * This function must be called before scaling, mirroring, translation, rotation and skewing. + * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function StartTransform() { + $this->_out('q'); + $this->transfmrk[$this->page][] = $this->pagelen[$this->page]; + ++$this->transfmatrix_key; + $this->transfmatrix[$this->transfmatrix_key] = array(); + } + + /** + * Stops a 2D tranformation restoring previous graphic state. + * This function must be called after scaling, mirroring, translation, rotation and skewing. + * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function StopTransform() { + $this->_out('Q'); + if (isset($this->transfmatrix[$this->transfmatrix_key])) { + array_pop($this->transfmatrix[$this->transfmatrix_key]); + --$this->transfmatrix_key; + } + array_pop($this->transfmrk[$this->page]); + } + /** + * Horizontal Scaling. + * @param float $s_x scaling factor for width as percent. 0 is not allowed. + * @param int $x abscissa of the scaling center. Default is current x position + * @param int $y ordinate of the scaling center. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function ScaleX($s_x, $x='', $y='') { + $this->Scale($s_x, 100, $x, $y); + } + + /** + * Vertical Scaling. + * @param float $s_y scaling factor for height as percent. 0 is not allowed. + * @param int $x abscissa of the scaling center. Default is current x position + * @param int $y ordinate of the scaling center. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function ScaleY($s_y, $x='', $y='') { + $this->Scale(100, $s_y, $x, $y); + } + + /** + * Vertical and horizontal proportional Scaling. + * @param float $s scaling factor for width and height as percent. 0 is not allowed. + * @param int $x abscissa of the scaling center. Default is current x position + * @param int $y ordinate of the scaling center. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function ScaleXY($s, $x='', $y='') { + $this->Scale($s, $s, $x, $y); + } + + /** + * Vertical and horizontal non-proportional Scaling. + * @param float $s_x scaling factor for width as percent. 0 is not allowed. + * @param float $s_y scaling factor for height as percent. 0 is not allowed. + * @param int $x abscissa of the scaling center. Default is current x position + * @param int $y ordinate of the scaling center. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Scale($s_x, $s_y, $x='', $y='') { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if (($s_x == 0) OR ($s_y == 0)) { + $this->Error('Please do not use values equal to zero for scaling'); + } + $y = ($this->h - $y) * $this->k; + $x *= $this->k; + //calculate elements of transformation matrix + $s_x /= 100; + $s_y /= 100; + $tm[0] = $s_x; + $tm[1] = 0; + $tm[2] = 0; + $tm[3] = $s_y; + $tm[4] = $x * (1 - $s_x); + $tm[5] = $y * (1 - $s_y); + //scale the coordinate system + $this->Transform($tm); + } + + /** + * Horizontal Mirroring. + * @param int $x abscissa of the point. Default is current x position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorH($x='') { + $this->Scale(-100, 100, $x); + } + + /** + * Verical Mirroring. + * @param int $y ordinate of the point. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorV($y='') { + $this->Scale(100, -100, '', $y); + } + + /** + * Point reflection mirroring. + * @param int $x abscissa of the point. Default is current x position + * @param int $y ordinate of the point. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorP($x='',$y='') { + $this->Scale(-100, -100, $x, $y); + } + + /** + * Reflection against a straight line through point (x, y) with the gradient angle (angle). + * @param float $angle gradient angle of the straight line. Default is 0 (horizontal line). + * @param int $x abscissa of the point. Default is current x position + * @param int $y ordinate of the point. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorL($angle=0, $x='',$y='') { + $this->Scale(-100, 100, $x, $y); + $this->Rotate(-2*($angle-90), $x, $y); + } + + /** + * Translate graphic object horizontally. + * @param int $t_x movement to the right (or left for RTL) + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function TranslateX($t_x) { + $this->Translate($t_x, 0); + } + + /** + * Translate graphic object vertically. + * @param int $t_y movement to the bottom + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function TranslateY($t_y) { + $this->Translate(0, $t_y); + } + + /** + * Translate graphic object horizontally and vertically. + * @param int $t_x movement to the right + * @param int $t_y movement to the bottom + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Translate($t_x, $t_y) { + //calculate elements of transformation matrix + $tm[0] = 1; + $tm[1] = 0; + $tm[2] = 0; + $tm[3] = 1; + $tm[4] = $t_x * $this->k; + $tm[5] = -$t_y * $this->k; + //translate the coordinate system + $this->Transform($tm); + } + + /** + * Rotate object. + * @param float $angle angle in degrees for counter-clockwise rotation + * @param int $x abscissa of the rotation center. Default is current x position + * @param int $y ordinate of the rotation center. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Rotate($angle, $x='', $y='') { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + $y = ($this->h - $y) * $this->k; + $x *= $this->k; + //calculate elements of transformation matrix + $tm[0] = cos(deg2rad($angle)); + $tm[1] = sin(deg2rad($angle)); + $tm[2] = -$tm[1]; + $tm[3] = $tm[0]; + $tm[4] = $x + ($tm[1] * $y) - ($tm[0] * $x); + $tm[5] = $y - ($tm[0] * $y) - ($tm[1] * $x); + //rotate the coordinate system around ($x,$y) + $this->Transform($tm); + } + + /** + * Skew horizontally. + * @param float $angle_x angle in degrees between -90 (skew to the left) and 90 (skew to the right) + * @param int $x abscissa of the skewing center. default is current x position + * @param int $y ordinate of the skewing center. default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function SkewX($angle_x, $x='', $y='') { + $this->Skew($angle_x, 0, $x, $y); + } + + /** + * Skew vertically. + * @param float $angle_y angle in degrees between -90 (skew to the bottom) and 90 (skew to the top) + * @param int $x abscissa of the skewing center. default is current x position + * @param int $y ordinate of the skewing center. default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function SkewY($angle_y, $x='', $y='') { + $this->Skew(0, $angle_y, $x, $y); + } + + /** + * Skew. + * @param float $angle_x angle in degrees between -90 (skew to the left) and 90 (skew to the right) + * @param float $angle_y angle in degrees between -90 (skew to the bottom) and 90 (skew to the top) + * @param int $x abscissa of the skewing center. default is current x position + * @param int $y ordinate of the skewing center. default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Skew($angle_x, $angle_y, $x='', $y='') { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if (($angle_x <= -90) OR ($angle_x >= 90) OR ($angle_y <= -90) OR ($angle_y >= 90)) { + $this->Error('Please use values between -90 and +90 degrees for Skewing.'); + } + $x *= $this->k; + $y = ($this->h - $y) * $this->k; + //calculate elements of transformation matrix + $tm[0] = 1; + $tm[1] = tan(deg2rad($angle_y)); + $tm[2] = tan(deg2rad($angle_x)); + $tm[3] = 1; + $tm[4] = -$tm[2] * $y; + $tm[5] = -$tm[1] * $x; + //skew the coordinate system + $this->Transform($tm); + } + + /** + * Apply graphic transformations. + * @param array $tm transformation matrix + * @access protected + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + protected function Transform($tm) { + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5])); + // add tranformation matrix + $this->transfmatrix[$this->transfmatrix_key][] = array('a' => $tm[0], 'b' => $tm[1], 'c' => $tm[2], 'd' => $tm[3], 'e' => $tm[4], 'f' => $tm[5]); + // update tranformation mark + if (end($this->transfmrk[$this->page]) !== false) { + $key = key($this->transfmrk[$this->page]); + $this->transfmrk[$this->page][$key] = $this->pagelen[$this->page]; + } + } + + // END TRANSFORMATIONS SECTION ------------------------- + + + // START GRAPHIC FUNCTIONS SECTION --------------------- + // The following section is based on the code provided by David Hernandez Sanz + + /** + * Defines the line width. By default, the value equals 0.2 mm. The method can be called before the first page is created and the value is retained from page to page. + * @param float $width The width. + * @access public + * @since 1.0 + * @see Line(), Rect(), Cell(), MultiCell() + */ + public function SetLineWidth($width) { + //Set line width + $this->LineWidth = $width; + $this->linestyleWidth = sprintf('%.2F w', ($width * $this->k)); + if ($this->page > 0) { + $this->_out($this->linestyleWidth); + } + } + + /** + * Returns the current the line width. + * @return int Line width + * @access public + * @since 2.1.000 (2008-01-07) + * @see Line(), SetLineWidth() + */ + public function GetLineWidth() { + return $this->LineWidth; + } + + /** + * Set line style. + * @param array $style Line style. Array with keys among the following: + *
      + *
    • width (float): Width of the line in user units.
    • + *
    • cap (string): Type of cap to put on the line. Possible values are: + * butt, round, square. The difference between "square" and "butt" is that + * "square" projects a flat end past the end of the line.
    • + *
    • join (string): Type of join. Possible values are: miter, round, + * bevel.
    • + *
    • dash (mixed): Dash pattern. Is 0 (without dash) or string with + * series of length values, which are the lengths of the on and off dashes. + * For example: "2" represents 2 on, 2 off, 2 on, 2 off, ...; "2,1" is 2 on, + * 1 off, 2 on, 1 off, ...
    • + *
    • phase (integer): Modifier on the dash pattern which is used to shift + * the point at which the pattern starts.
    • + *
    • color (array): Draw color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K).
    • + *
    + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function SetLineStyle($style) { + if (!is_array($style)) { + return; + } + extract($style); + if (isset($width)) { + $width_prev = $this->LineWidth; + $this->SetLineWidth($width); + $this->LineWidth = $width_prev; + } + if (isset($cap)) { + $ca = array('butt' => 0, 'round'=> 1, 'square' => 2); + if (isset($ca[$cap])) { + $this->linestyleCap = $ca[$cap].' J'; + $this->_out($this->linestyleCap); + } + } + if (isset($join)) { + $ja = array('miter' => 0, 'round' => 1, 'bevel' => 2); + if (isset($ja[$join])) { + $this->linestyleJoin = $ja[$join].' j'; + $this->_out($this->linestyleJoin); + } + } + if (isset($dash)) { + $dash_string = ''; + if ($dash) { + if (preg_match('/^.+,/', $dash) > 0) { + $tab = explode(',', $dash); + } else { + $tab = array($dash); + } + $dash_string = ''; + foreach ($tab as $i => $v) { + if ($i) { + $dash_string .= ' '; + } + $dash_string .= sprintf('%.2F', $v); + } + } + if (!isset($phase) OR !$dash) { + $phase = 0; + } + $this->linestyleDash = sprintf('[%s] %.2F d', $dash_string, $phase); + $this->_out($this->linestyleDash); + } + if (isset($color)) { + $this->SetDrawColorArray($color); + } + } + + /** + * Begin a new subpath by moving the current point to coordinates (x, y), omitting any connecting line segment. + * @param float $x Abscissa of point. + * @param float $y Ordinate of point. + * @access protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outPoint($x, $y) { + $this->_out(sprintf('%.2F %.2F m', $x * $this->k, ($this->h - $y) * $this->k)); + } + + /** + * Append a straight line segment from the current point to the point (x, y). + * The new current point shall be (x, y). + * @param float $x Abscissa of end point. + * @param float $y Ordinate of end point. + * @access protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outLine($x, $y) { + $this->_out(sprintf('%.2F %.2F l', $x * $this->k, ($this->h - $y) * $this->k)); + } + + /** + * Append a rectangle to the current path as a complete subpath, with lower-left corner (x, y) and dimensions widthand height in user space. + * @param float $x Abscissa of upper-left corner (or upper-right corner for RTL language). + * @param float $y Ordinate of upper-left corner (or upper-right corner for RTL language). + * @param float $w Width. + * @param float $h Height. + * @param string $op options + * @access protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outRect($x, $y, $w, $h, $op) { + $this->_out(sprintf('%.2F %.2F %.2F %.2F re %s', $x * $this->k, ($this->h - $y) * $this->k, $w * $this->k, -$h * $this->k, $op)); + } + + /** + * Append a cubic B�zier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using (x1, y1) and (x2, y2) as the B�zier control points. + * The new current point shall be (x3, y3). + * @param float $x1 Abscissa of control point 1. + * @param float $y1 Ordinate of control point 1. + * @param float $x2 Abscissa of control point 2. + * @param float $y2 Ordinate of control point 2. + * @param float $x3 Abscissa of end point. + * @param float $y3 Ordinate of end point. + * @access protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outCurve($x1, $y1, $x2, $y2, $x3, $y3) { + $this->_out(sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c', $x1 * $this->k, ($this->h - $y1) * $this->k, $x2 * $this->k, ($this->h - $y2) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k)); + } + + /** + * Append a cubic B�zier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using the current point and (x2, y2) as the B�zier control points. + * The new current point shall be (x3, y3). + * @param float $x2 Abscissa of control point 2. + * @param float $y2 Ordinate of control point 2. + * @param float $x3 Abscissa of end point. + * @param float $y3 Ordinate of end point. + * @access protected + * @since 4.9.019 (2010-04-26) + */ + protected function _outCurveV($x2, $y2, $x3, $y3) { + $this->_out(sprintf('%.2F %.2F %.2F %.2F v', $x2 * $this->k, ($this->h - $y2) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k)); + } + + /** + * Append a cubic B�zier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using (x1, y1) and (x3, y3) as the B�zier control points. + * The new current point shall be (x3, y3). + * @param float $x1 Abscissa of control point 1. + * @param float $y1 Ordinate of control point 1. + * @param float $x2 Abscissa of control point 2. + * @param float $y2 Ordinate of control point 2. + * @param float $x3 Abscissa of end point. + * @param float $y3 Ordinate of end point. + * @access protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outCurveY($x1, $y1, $x3, $y3) { + $this->_out(sprintf('%.2F %.2F %.2F %.2F y', $x1 * $this->k, ($this->h - $y1) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k)); + } + + /** + * Draws a line between two points. + * @param float $x1 Abscissa of first point. + * @param float $y1 Ordinate of first point. + * @param float $x2 Abscissa of second point. + * @param float $y2 Ordinate of second point. + * @param array $style Line style. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @access public + * @since 1.0 + * @see SetLineWidth(), SetDrawColor(), SetLineStyle() + */ + public function Line($x1, $y1, $x2, $y2, $style=array()) { + if (is_array($style)) { + $this->SetLineStyle($style); + } + $this->_outPoint($x1, $y1); + $this->_outLine($x2, $y2); + $this->_out('S'); + } + + /** + * Draws a rectangle. + * @param float $x Abscissa of upper-left corner (or upper-right corner for RTL language). + * @param float $y Ordinate of upper-left corner (or upper-right corner for RTL language). + * @param float $w Width. + * @param float $h Height. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $border_style Border style of rectangle. Array with keys among the following: + *
      + *
    • all: Line style of all borders. Array like for {@link SetLineStyle SetLineStyle}.
    • + *
    • L, T, R, B or combinations: Line style of left, top, right or bottom border. Array like for {@link SetLineStyle SetLineStyle}.
    • + *
    + * If a key is not present or is null, not draws the border. Default value: default line style (empty array). + * @param array $border_style Border style of rectangle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @access public + * @since 1.0 + * @see SetLineStyle() + */ + public function Rect($x, $y, $w, $h, $style='', $border_style=array(), $fill_color=array()) { + if (!(false === strpos($style, 'F')) AND !empty($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = $this->getPathPaintOperator($style); + if ((!$border_style) OR (isset($border_style['all']))) { + if (isset($border_style['all']) AND $border_style['all']) { + $this->SetLineStyle($border_style['all']); + $border_style = array(); + } + } + $this->_outRect($x, $y, $w, $h, $op); + + if ($border_style) { + $border_style2 = array(); + foreach ($border_style as $line => $value) { + $length = strlen($line); + for ($i = 0; $i < $length; ++$i) { + $border_style2[$line[$i]] = $value; + } + } + $border_style = $border_style2; + if (isset($border_style['L']) AND $border_style['L']) { + $this->Line($x, $y, $x, $y + $h, $border_style['L']); + } + if (isset($border_style['T']) AND $border_style['T']) { + $this->Line($x, $y, $x + $w, $y, $border_style['T']); + } + if (isset($border_style['R']) AND $border_style['R']) { + $this->Line($x + $w, $y, $x + $w, $y + $h, $border_style['R']); + } + if (isset($border_style['B']) AND $border_style['B']) { + $this->Line($x, $y + $h, $x + $w, $y + $h, $border_style['B']); + } + } + } + + /** + * Draws a Bezier curve. + * The Bezier curve is a tangent to the line between the control points at + * either end of the curve. + * @param float $x0 Abscissa of start point. + * @param float $y0 Ordinate of start point. + * @param float $x1 Abscissa of control point 1. + * @param float $y1 Ordinate of control point 1. + * @param float $x2 Abscissa of control point 2. + * @param float $y2 Ordinate of control point 2. + * @param float $x3 Abscissa of end point. + * @param float $y3 Ordinate of end point. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of curve. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @access public + * @see SetLineStyle() + * @since 2.1.000 (2008-01-08) + */ + public function Curve($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3, $style='', $line_style=array(), $fill_color=array()) { + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = $this->getPathPaintOperator($style); + if ($line_style) { + $this->SetLineStyle($line_style); + } + $this->_outPoint($x0, $y0); + $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3); + $this->_out($op); + } + + /** + * Draws a poly-Bezier curve. + * Each Bezier curve segment is a tangent to the line between the control points at + * either end of the curve. + * @param float $x0 Abscissa of start point. + * @param float $y0 Ordinate of start point. + * @param float $segments An array of bezier descriptions. Format: array(x1, y1, x2, y2, x3, y3). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of curve. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @access public + * @see SetLineStyle() + * @since 3.0008 (2008-05-12) + */ + public function Polycurve($x0, $y0, $segments, $style='', $line_style=array(), $fill_color=array()) { + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = $this->getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + if ($line_style) { + $this->SetLineStyle($line_style); + } + $this->_outPoint($x0, $y0); + foreach ($segments as $segment) { + list($x1, $y1, $x2, $y2, $x3, $y3) = $segment; + $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3); + } + $this->_out($op); + } + + /** + * Draws an ellipse. + * An ellipse is formed from n Bezier curves. + * @param float $x0 Abscissa of center point. + * @param float $y0 Ordinate of center point. + * @param float $rx Horizontal radius. + * @param float $ry Vertical radius (if ry = 0 then is a circle, see {@link Circle Circle}). Default value: 0. + * @param float $angle: Angle oriented (anti-clockwise). Default value: 0. + * @param float $astart: Angle start of draw line. Default value: 0. + * @param float $afinish: Angle finish of draw line. Default value: 360. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of ellipse. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @param integer $nc Number of curves used to draw a 90 degrees portion of ellipse. + * @author Nicola Asuni + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function Ellipse($x0, $y0, $rx, $ry='', $angle=0, $astart=0, $afinish=360, $style='', $line_style=array(), $fill_color=array(), $nc=2) { + if ($this->empty_string($ry) OR ($ry == 0)) { + $ry = $rx; + } + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = $this->getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + if ($line_style) { + $this->SetLineStyle($line_style); + } + $this->_outellipticalarc($x0, $y0, $rx, $ry, $angle, $astart, $afinish, false, $nc); + $this->_out($op); + } + + /** + * Append an elliptical arc to the current path. + * An ellipse is formed from n Bezier curves. + * @param float $xc Abscissa of center point. + * @param float $yc Ordinate of center point. + * @param float $rx Horizontal radius. + * @param float $ry Vertical radius (if ry = 0 then is a circle, see {@link Circle Circle}). Default value: 0. + * @param float $xang: Angle between the X-axis and the major axis of the ellipse. Default value: 0. + * @param float $angs: Angle start of draw line. Default value: 0. + * @param float $angf: Angle finish of draw line. Default value: 360. + * @param boolean $pie if true do not mark the border point (used to draw pie sectors). + * @param integer $nc Number of curves used to draw a 90 degrees portion of ellipse. + * @author Nicola Asuni + * @access protected + * @since 4.9.019 (2010-04-26) + */ + protected function _outellipticalarc($xc, $yc, $rx, $ry, $xang=0, $angs=0, $angf=360, $pie=false, $nc=2) { + $k = $this->k; + if ($nc < 2) { + $nc = 2; + } + if ($pie) { + // center of the arc + $this->_outPoint($xc, $yc); + } + $xang = deg2rad((float) $xang); + $angs = deg2rad((float) $angs); + $angf = deg2rad((float) $angf); + $as = atan2((sin($angs) / $ry), (cos($angs) / $rx)); + $af = atan2((sin($angf) / $ry), (cos($angf) / $rx)); + if ($as < 0) { + $as += (2 * M_PI); + } + if ($af < 0) { + $af += (2 * M_PI); + } + if ($as > $af) { + // reverse rotation go clockwise + $as -= (2 * M_PI); + } + $total_angle = ($af - $as); + if ($nc < 2) { + $nc = 2; + } + // total arcs to draw + $nc *= (2 * abs($total_angle) / M_PI); + $nc = round($nc) + 1; + // angle of each arc + $arcang = $total_angle / $nc; + // center point in PDF coordiantes + $x0 = $xc; + $y0 = ($this->h - $yc); + // starting angle + $ang = $as; + $alpha = sin($arcang) * ((sqrt(4 + (3 * pow(tan(($arcang) / 2), 2))) - 1) / 3); + $cos_xang = cos($xang); + $sin_xang = sin($xang); + $cos_ang = cos($ang); + $sin_ang = sin($ang); + // first arc point + $px1 = $x0 + ($rx * $cos_xang * $cos_ang) - ($ry * $sin_xang * $sin_ang); + $py1 = $y0 + ($rx * $sin_xang * $cos_ang) + ($ry * $cos_xang * $sin_ang); + // first Bezier control point + $qx1 = ($alpha * ((-$rx * $cos_xang * $sin_ang) - ($ry * $sin_xang * $cos_ang))); + $qy1 = ($alpha * ((-$rx * $sin_xang * $sin_ang) + ($ry * $cos_xang * $cos_ang))); + if ($pie) { + $this->_outLine($px1, $this->h - $py1); + } else { + $this->_outPoint($px1, $this->h - $py1); + } + // draw arcs + for ($i = 1; $i <= $nc; ++$i) { + // starting angle + $ang = $as + ($i * $arcang); + $cos_xang = cos($xang); + $sin_xang = sin($xang); + $cos_ang = cos($ang); + $sin_ang = sin($ang); + // second arc point + $px2 = $x0 + ($rx * $cos_xang * $cos_ang) - ($ry * $sin_xang * $sin_ang); + $py2 = $y0 + ($rx * $sin_xang * $cos_ang) + ($ry * $cos_xang * $sin_ang); + // second Bezier control point + $qx2 = ($alpha * ((-$rx * $cos_xang * $sin_ang) - ($ry * $sin_xang * $cos_ang))); + $qy2 = ($alpha * ((-$rx * $sin_xang * $sin_ang) + ($ry * $cos_xang * $cos_ang))); + // draw arc + $this->_outCurve(($px1 + $qx1), ($this->h - ($py1 + $qy1)), ($px2 - $qx2), ($this->h - ($py2 - $qy2)), $px2, ($this->h - $py2)); + // move to next point + $px1 = $px2; + $py1 = $py2; + $qx1 = $qx2; + $qy1 = $qy2; + } + if ($pie) { + $this->_outLine($xc, $yc); + } + } + + + /** + * Draws a circle. + * A circle is formed from n Bezier curves. + * @param float $x0 Abscissa of center point. + * @param float $y0 Ordinate of center point. + * @param float $r Radius. + * @param float $angstr: Angle start of draw line. Default value: 0. + * @param float $angend: Angle finish of draw line. Default value: 360. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of circle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array). + * @param integer $nc Number of curves used to draw a 90 degrees portion of circle. + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function Circle($x0, $y0, $r, $angstr=0, $angend=360, $style='', $line_style=array(), $fill_color=array(), $nc=2) { + $this->Ellipse($x0, $y0, $r, $r, 0, $angstr, $angend, $style, $line_style, $fill_color, $nc); + } + + /** + * Draws a polygonal line + * @param array $p Points 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1)) + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of polygon. Array with keys among the following: + *
      + *
    • all: Line style of all lines. Array like for {@link SetLineStyle SetLineStyle}.
    • + *
    • 0 to ($np - 1): Line style of each line. Array like for {@link SetLineStyle SetLineStyle}.
    • + *
    + * If a key is not present or is null, not draws the line. Default value is default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @param boolean $closed if true the polygon is closes, otherwise will remain open + * @access public + * @since 4.8.003 (2009-09-15) + */ + public function PolyLine($p, $style='', $line_style=array(), $fill_color=array()) { + $this->Polygon($p, $style, $line_style, $fill_color, false); + } + + /** + * Draws a polygon. + * @param array $p Points 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1)) + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of polygon. Array with keys among the following: + *
      + *
    • all: Line style of all lines. Array like for {@link SetLineStyle SetLineStyle}.
    • + *
    • 0 to ($np - 1): Line style of each line. Array like for {@link SetLineStyle SetLineStyle}.
    • + *
    + * If a key is not present or is null, not draws the line. Default value is default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @param boolean $closed if true the polygon is closes, otherwise will remain open + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function Polygon($p, $style='', $line_style=array(), $fill_color=array(), $closed=true) { + $nc = count($p); // number of coordinates + $np = $nc / 2; // number of points + if ($closed) { + // close polygon by adding the first 2 points at the end (one line) + for ($i = 0; $i < 4; ++$i) { + $p[$nc + $i] = $p[$i]; + } + // copy style for the last added line + if (isset($line_style[0])) { + $line_style[$np] = $line_style[0]; + } + $nc += 4; + } + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = $this->getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + $draw = true; + if ($line_style) { + if (isset($line_style['all'])) { + $this->SetLineStyle($line_style['all']); + } else { + $draw = false; + if ($op == 'B') { + // draw fill + $op = 'f'; + $this->_outPoint($p[0], $p[1]); + for ($i = 2; $i < $nc; $i = $i + 2) { + $this->_outLine($p[$i], $p[$i + 1]); + } + $this->_out($op); + } + // draw outline + $this->_outPoint($p[0], $p[1]); + for ($i = 2; $i < $nc; $i = $i + 2) { + $line_num = ($i / 2) - 1; + if (isset($line_style[$line_num])) { + if ($line_style[$line_num] != 0) { + if (is_array($line_style[$line_num])) { + $this->_out('S'); + $this->SetLineStyle($line_style[$line_num]); + $this->_outPoint($p[$i - 2], $p[$i - 1]); + $this->_outLine($p[$i], $p[$i + 1]); + $this->_out('S'); + $this->_outPoint($p[$i], $p[$i + 1]); + } else { + $this->_outLine($p[$i], $p[$i + 1]); + } + } + } else { + $this->_outLine($p[$i], $p[$i + 1]); + } + } + $this->_out($op); + } + } + if ($draw) { + $this->_outPoint($p[0], $p[1]); + for ($i = 2; $i < $nc; $i = $i + 2) { + $this->_outLine($p[$i], $p[$i + 1]); + } + $this->_out($op); + } + } + + /** + * Draws a regular polygon. + * @param float $x0 Abscissa of center point. + * @param float $y0 Ordinate of center point. + * @param float $r: Radius of inscribed circle. + * @param integer $ns Number of sides. + * @param float $angle Angle oriented (anti-clockwise). Default value: 0. + * @param boolean $draw_circle Draw inscribed circle or not. Default value: false. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of polygon sides. Array with keys among the following: + *
      + *
    • all: Line style of all sides. Array like for {@link SetLineStyle SetLineStyle}.
    • + *
    • 0 to ($ns - 1): Line style of each side. Array like for {@link SetLineStyle SetLineStyle}.
    • + *
    + * If a key is not present or is null, not draws the side. Default value is default line style (empty array). + * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array). + * @param string $circle_style Style of rendering of inscribed circle (if draws). Possible values are: + *
      + *
    • D or empty string: Draw (default).
    • + *
    • F: Fill.
    • + *
    • DF or FD: Draw and fill.
    • + *
    • CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).
    • + *
    • CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).
    • + *
    + * @param array $circle_outLine_style Line style of inscribed circle (if draws). Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $circle_fill_color Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array). + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function RegularPolygon($x0, $y0, $r, $ns, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array()) { + if (3 > $ns) { + $ns = 3; + } + if ($draw_circle) { + $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color); + } + $p = array(); + for ($i = 0; $i < $ns; ++$i) { + $a = $angle + ($i * 360 / $ns); + $a_rad = deg2rad((float) $a); + $p[] = $x0 + ($r * sin($a_rad)); + $p[] = $y0 + ($r * cos($a_rad)); + } + $this->Polygon($p, $style, $line_style, $fill_color); + } + + /** + * Draws a star polygon + * @param float $x0 Abscissa of center point. + * @param float $y0 Ordinate of center point. + * @param float $r Radius of inscribed circle. + * @param integer $nv Number of vertices. + * @param integer $ng Number of gap (if ($ng % $nv = 1) then is a regular polygon). + * @param float $angle: Angle oriented (anti-clockwise). Default value: 0. + * @param boolean $draw_circle: Draw inscribed circle or not. Default value is false. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of polygon sides. Array with keys among the following: + *
      + *
    • all: Line style of all sides. Array like for + * {@link SetLineStyle SetLineStyle}.
    • + *
    • 0 to (n - 1): Line style of each side. Array like for {@link SetLineStyle SetLineStyle}.
    • + *
    + * If a key is not present or is null, not draws the side. Default value is default line style (empty array). + * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array). + * @param string $circle_style Style of rendering of inscribed circle (if draws). Possible values are: + *
      + *
    • D or empty string: Draw (default).
    • + *
    • F: Fill.
    • + *
    • DF or FD: Draw and fill.
    • + *
    • CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).
    • + *
    • CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).
    • + *
    + * @param array $circle_outLine_style Line style of inscribed circle (if draws). Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $circle_fill_color Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array). + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function StarPolygon($x0, $y0, $r, $nv, $ng, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array()) { + if ($nv < 2) { + $nv = 2; + } + if ($draw_circle) { + $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color); + } + $p2 = array(); + $visited = array(); + for ($i = 0; $i < $nv; ++$i) { + $a = $angle + ($i * 360 / $nv); + $a_rad = deg2rad((float) $a); + $p2[] = $x0 + ($r * sin($a_rad)); + $p2[] = $y0 + ($r * cos($a_rad)); + $visited[] = false; + } + $p = array(); + $i = 0; + do { + $p[] = $p2[$i * 2]; + $p[] = $p2[($i * 2) + 1]; + $visited[$i] = true; + $i += $ng; + $i %= $nv; + } while (!$visited[$i]); + $this->Polygon($p, $style, $line_style, $fill_color); + } + + /** + * Draws a rounded rectangle. + * @param float $x Abscissa of upper-left corner. + * @param float $y Ordinate of upper-left corner. + * @param float $w Width. + * @param float $h Height. + * @param float $r the radius of the circle used to round off the corners of the rectangle. + * @param string $round_corner Draws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top left, top right, bottom right and bottom left. Default value: all rounded corner ("1111"). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $border_style Border style of rectangle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function RoundedRect($x, $y, $w, $h, $r, $round_corner='1111', $style='', $border_style=array(), $fill_color=array()) { + $this->RoundedRectXY($x, $y, $w, $h, $r, $r, $round_corner, $style, $border_style, $fill_color); + } + + /** + * Draws a rounded rectangle. + * @param float $x Abscissa of upper-left corner. + * @param float $y Ordinate of upper-left corner. + * @param float $w Width. + * @param float $h Height. + * @param float $rx the x-axis radius of the ellipse used to round off the corners of the rectangle. + * @param float $ry the y-axis radius of the ellipse used to round off the corners of the rectangle. + * @param string $round_corner Draws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top left, top right, bottom right and bottom left. Default value: all rounded corner ("1111"). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $border_style Border style of rectangle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @access public + * @since 4.9.019 (2010-04-22) + */ + public function RoundedRectXY($x, $y, $w, $h, $rx, $ry, $round_corner='1111', $style='', $border_style=array(), $fill_color=array()) { + if (($round_corner == '0000') OR (($rx == $ry) AND ($rx == 0))) { + // Not rounded + $this->Rect($x, $y, $w, $h, $style, $border_style, $fill_color); + return; + } + // Rounded + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = $this->getPathPaintOperator($style); + if ($op == 'f') { + $border_style = array(); + } + if ($border_style) { + $this->SetLineStyle($border_style); + } + $MyArc = 4 / 3 * (sqrt(2) - 1); + $this->_outPoint($x + $rx, $y); + $xc = $x + $w - $rx; + $yc = $y + $ry; + $this->_outLine($xc, $y); + if ($round_corner[0]) { + $this->_outCurve($xc + ($rx * $MyArc), $yc - $ry, $xc + $rx, $yc - ($ry * $MyArc), $xc + $rx, $yc); + } else { + $this->_outLine($x + $w, $y); + } + $xc = $x + $w - $rx; + $yc = $y + $h - $ry; + $this->_outLine($x + $w, $yc); + if ($round_corner[1]) { + $this->_outCurve($xc + $rx, $yc + ($ry * $MyArc), $xc + ($rx * $MyArc), $yc + $ry, $xc, $yc + $ry); + } else { + $this->_outLine($x + $w, $y + $h); + } + $xc = $x + $rx; + $yc = $y + $h - $ry; + $this->_outLine($xc, $y + $h); + if ($round_corner[2]) { + $this->_outCurve($xc - ($rx * $MyArc), $yc + $ry, $xc - $rx, $yc + ($ry * $MyArc), $xc - $rx, $yc); + } else { + $this->_outLine($x, $y + $h); + } + $xc = $x + $rx; + $yc = $y + $ry; + $this->_outLine($x, $yc); + if ($round_corner[3]) { + $this->_outCurve($xc - $rx, $yc - ($ry * $MyArc), $xc - ($rx * $MyArc), $yc - $ry, $xc, $yc - $ry); + } else { + $this->_outLine($x, $y); + $this->_outLine($x + $rx, $y); + } + $this->_out($op); + } + + /** + * Draws a grahic arrow. + * @parameter float $x0 Abscissa of first point. + * @parameter float $y0 Ordinate of first point. + * @parameter float $x0 Abscissa of second point. + * @parameter float $y1 Ordinate of second point. + * @parameter int $head_style (0 = draw only arrowhead arms, 1 = draw closed arrowhead, but no fill, 2 = closed and filled arrowhead, 3 = filled arrowhead) + * @parameter float $arm_size length of arrowhead arms + * @parameter int $arm_angle angle between an arm and the shaft + * @author Piotr Galecki, Nicola Asuni, Andy Meier + * @since 4.6.018 (2009-07-10) + */ + public function Arrow($x0, $y0, $x1, $y1, $head_style=0, $arm_size=5, $arm_angle=15) { + // getting arrow direction angle + // 0 deg angle is when both arms go along X axis. angle grows clockwise. + $dir_angle = atan2(($y0 - $y1), ($x0 - $x1)); + if ($dir_angle < 0) { + $dir_angle += (2 * M_PI); + } + $arm_angle = deg2rad($arm_angle); + $sx1 = $x1; + $sy1 = $y1; + if ($head_style > 0) { + // calculate the stopping point for the arrow shaft + $sx1 = $x1 + (($arm_size - $this->LineWidth) * cos($dir_angle)); + $sy1 = $y1 + (($arm_size - $this->LineWidth) * sin($dir_angle)); + } + // main arrow line / shaft + $this->Line($x0, $y0, $sx1, $sy1); + // left arrowhead arm tip + $x2L = $x1 + ($arm_size * cos($dir_angle + $arm_angle)); + $y2L = $y1 + ($arm_size * sin($dir_angle + $arm_angle)); + // right arrowhead arm tip + $x2R = $x1 + ($arm_size * cos($dir_angle - $arm_angle)); + $y2R = $y1 + ($arm_size * sin($dir_angle - $arm_angle)); + $mode = 'D'; + $style = array(); + switch ($head_style) { + case 0: { + // draw only arrowhead arms + $mode = 'D'; + $style = array(1, 1, 0); + break; + } + case 1: { + // draw closed arrowhead, but no fill + $mode = 'D'; + break; + } + case 2: { + // closed and filled arrowhead + $mode = 'DF'; + break; + } + case 3: { + // filled arrowhead + $mode = 'F'; + break; + } + } + $this->Polygon(array($x2L, $y2L, $x1, $y1, $x2R, $y2R), $mode, $style, array()); + } + + // END GRAPHIC FUNCTIONS SECTION ----------------------- + + // BIDIRECTIONAL TEXT SECTION -------------------------- + + /** + * Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/). + * @param string $str string to manipulate. + * @param bool $setbom if true set the Byte Order Mark (BOM = 0xFEFF) + * @param bool $forcertl if true forces RTL text direction + * @return string + * @access protected + * @author Nicola Asuni + * @since 2.1.000 (2008-01-08) + */ + protected function utf8StrRev($str, $setbom=false, $forcertl=false) { + return $this->utf8StrArrRev($this->UTF8StringToArray($str), $str, $setbom, $forcertl); + } + + /** + * Reverse the RLT substrings array using the Bidirectional Algorithm (http://unicode.org/reports/tr9/). + * @param array $arr array of unicode values. + * @param string $str string to manipulate (or empty value). + * @param bool $setbom if true set the Byte Order Mark (BOM = 0xFEFF) + * @param bool $forcertl if true forces RTL text direction + * @return string + * @access protected + * @author Nicola Asuni + * @since 4.9.000 (2010-03-27) + */ + protected function utf8StrArrRev($arr, $str='', $setbom=false, $forcertl=false) { + return $this->arrUTF8ToUTF16BE($this->utf8Bidi($arr, $str, $forcertl), $setbom); + } + + /** + * Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/). + * @param array $ta array of characters composing the string. + * @param string $str string to process + * @param bool $forcertl if 'R' forces RTL, if 'L' forces LTR + * @return array of unicode chars + * @author Nicola Asuni + * @access protected + * @since 2.4.000 (2008-03-06) + */ + protected function utf8Bidi($ta, $str='', $forcertl=false) { + global $unicode, $unicode_mirror, $unicode_arlet, $laa_array, $diacritics; + // paragraph embedding level + $pel = 0; + // max level + $maxlevel = 0; + if ($this->empty_string($str)) { + // create string from array + $str = $this->UTF8ArrSubString($ta); + } + // check if string contains arabic text + if (preg_match(K_RE_PATTERN_ARABIC, $str)) { + $arabic = true; + } else { + $arabic = false; + } + // check if string contains RTL text + if (!($forcertl OR $arabic OR preg_match(K_RE_PATTERN_RTL, $str))) { + return $ta; + } + + // get number of chars + $numchars = count($ta); + + if ($forcertl == 'R') { + $pel = 1; + } elseif ($forcertl == 'L') { + $pel = 0; + } else { + // P2. In each paragraph, find the first character of type L, AL, or R. + // P3. If a character is found in P2 and it is of type AL or R, then set the paragraph embedding level to one; otherwise, set it to zero. + for ($i=0; $i < $numchars; ++$i) { + $type = $unicode[$ta[$i]]; + if ($type == 'L') { + $pel = 0; + break; + } elseif (($type == 'AL') OR ($type == 'R')) { + $pel = 1; + break; + } + } + } + + // Current Embedding Level + $cel = $pel; + // directional override status + $dos = 'N'; + $remember = array(); + // start-of-level-run + $sor = $pel % 2 ? 'R' : 'L'; + $eor = $sor; + + // Array of characters data + $chardata = Array(); + + // X1. Begin by setting the current embedding level to the paragraph embedding level. Set the directional override status to neutral. Process each character iteratively, applying rules X2 through X9. Only embedding levels from 0 to 61 are valid in this phase. + // In the resolution of levels in rules I1 and I2, the maximum embedding level of 62 can be reached. + for ($i=0; $i < $numchars; ++$i) { + if ($ta[$i] == K_RLE) { + // X2. With each RLE, compute the least greater odd embedding level. + // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to neutral. + // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status. + $next_level = $cel + ($cel % 2) + 1; + if ($next_level < 62) { + $remember[] = array('num' => K_RLE, 'cel' => $cel, 'dos' => $dos); + $cel = $next_level; + $dos = 'N'; + $sor = $eor; + $eor = $cel % 2 ? 'R' : 'L'; + } + } elseif ($ta[$i] == K_LRE) { + // X3. With each LRE, compute the least greater even embedding level. + // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to neutral. + // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status. + $next_level = $cel + 2 - ($cel % 2); + if ( $next_level < 62 ) { + $remember[] = array('num' => K_LRE, 'cel' => $cel, 'dos' => $dos); + $cel = $next_level; + $dos = 'N'; + $sor = $eor; + $eor = $cel % 2 ? 'R' : 'L'; + } + } elseif ($ta[$i] == K_RLO) { + // X4. With each RLO, compute the least greater odd embedding level. + // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to right-to-left. + // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status. + $next_level = $cel + ($cel % 2) + 1; + if ($next_level < 62) { + $remember[] = array('num' => K_RLO, 'cel' => $cel, 'dos' => $dos); + $cel = $next_level; + $dos = 'R'; + $sor = $eor; + $eor = $cel % 2 ? 'R' : 'L'; + } + } elseif ($ta[$i] == K_LRO) { + // X5. With each LRO, compute the least greater even embedding level. + // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to left-to-right. + // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status. + $next_level = $cel + 2 - ($cel % 2); + if ( $next_level < 62 ) { + $remember[] = array('num' => K_LRO, 'cel' => $cel, 'dos' => $dos); + $cel = $next_level; + $dos = 'L'; + $sor = $eor; + $eor = $cel % 2 ? 'R' : 'L'; + } + } elseif ($ta[$i] == K_PDF) { + // X7. With each PDF, determine the matching embedding or override code. If there was a valid matching code, restore (pop) the last remembered (pushed) embedding level and directional override. + if (count($remember)) { + $last = count($remember ) - 1; + if (($remember[$last]['num'] == K_RLE) OR + ($remember[$last]['num'] == K_LRE) OR + ($remember[$last]['num'] == K_RLO) OR + ($remember[$last]['num'] == K_LRO)) { + $match = array_pop($remember); + $cel = $match['cel']; + $dos = $match['dos']; + $sor = $eor; + $eor = ($cel > $match['cel'] ? $cel : $match['cel']) % 2 ? 'R' : 'L'; + } + } + } elseif (($ta[$i] != K_RLE) AND + ($ta[$i] != K_LRE) AND + ($ta[$i] != K_RLO) AND + ($ta[$i] != K_LRO) AND + ($ta[$i] != K_PDF)) { + // X6. For all types besides RLE, LRE, RLO, LRO, and PDF: + // a. Set the level of the current character to the current embedding level. + // b. Whenever the directional override status is not neutral, reset the current character type to the directional override status. + if ($dos != 'N') { + $chardir = $dos; + } else { + if (isset($unicode[$ta[$i]])) { + $chardir = $unicode[$ta[$i]]; + } else { + $chardir = 'L'; + } + } + // stores string characters and other information + $chardata[] = array('char' => $ta[$i], 'level' => $cel, 'type' => $chardir, 'sor' => $sor, 'eor' => $eor); + } + } // end for each char + + // X8. All explicit directional embeddings and overrides are completely terminated at the end of each paragraph. Paragraph separators are not included in the embedding. + // X9. Remove all RLE, LRE, RLO, LRO, PDF, and BN codes. + // X10. The remaining rules are applied to each run of characters at the same level. For each run, determine the start-of-level-run (sor) and end-of-level-run (eor) type, either L or R. This depends on the higher of the two levels on either side of the boundary (at the start or end of the paragraph, the level of the 'other' run is the base embedding level). If the higher level is odd, the type is R; otherwise, it is L. + + // 3.3.3 Resolving Weak Types + // Weak types are now resolved one level run at a time. At level run boundaries where the type of the character on the other side of the boundary is required, the type assigned to sor or eor is used. + // Nonspacing marks are now resolved based on the previous characters. + $numchars = count($chardata); + + // W1. Examine each nonspacing mark (NSM) in the level run, and change the type of the NSM to the type of the previous character. If the NSM is at the start of the level run, it will get the type of sor. + $prevlevel = -1; // track level changes + $levcount = 0; // counts consecutive chars at the same level + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['type'] == 'NSM') { + if ($levcount) { + $chardata[$i]['type'] = $chardata[$i]['sor']; + } elseif ($i > 0) { + $chardata[$i]['type'] = $chardata[($i-1)]['type']; + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // W2. Search backward from each instance of a European number until the first strong type (R, L, AL, or sor) is found. If an AL is found, change the type of the European number to Arabic number. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['char'] == 'EN') { + for ($j=$levcount; $j >= 0; $j--) { + if ($chardata[$j]['type'] == 'AL') { + $chardata[$i]['type'] = 'AN'; + } elseif (($chardata[$j]['type'] == 'L') OR ($chardata[$j]['type'] == 'R')) { + break; + } + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // W3. Change all ALs to R. + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['type'] == 'AL') { + $chardata[$i]['type'] = 'R'; + } + } + + // W4. A single European separator between two European numbers changes to a European number. A single common separator between two numbers of the same type changes to that type. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if (($levcount > 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) { + if (($chardata[$i]['type'] == 'ES') AND ($chardata[($i-1)]['type'] == 'EN') AND ($chardata[($i+1)]['type'] == 'EN')) { + $chardata[$i]['type'] = 'EN'; + } elseif (($chardata[$i]['type'] == 'CS') AND ($chardata[($i-1)]['type'] == 'EN') AND ($chardata[($i+1)]['type'] == 'EN')) { + $chardata[$i]['type'] = 'EN'; + } elseif (($chardata[$i]['type'] == 'CS') AND ($chardata[($i-1)]['type'] == 'AN') AND ($chardata[($i+1)]['type'] == 'AN')) { + $chardata[$i]['type'] = 'AN'; + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // W5. A sequence of European terminators adjacent to European numbers changes to all European numbers. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['type'] == 'ET') { + if (($levcount > 0) AND ($chardata[($i-1)]['type'] == 'EN')) { + $chardata[$i]['type'] = 'EN'; + } else { + $j = $i+1; + while (($j < $numchars) AND ($chardata[$j]['level'] == $prevlevel)) { + if ($chardata[$j]['type'] == 'EN') { + $chardata[$i]['type'] = 'EN'; + break; + } elseif ($chardata[$j]['type'] != 'ET') { + break; + } + ++$j; + } + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // W6. Otherwise, separators and terminators change to Other Neutral. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if (($chardata[$i]['type'] == 'ET') OR ($chardata[$i]['type'] == 'ES') OR ($chardata[$i]['type'] == 'CS')) { + $chardata[$i]['type'] = 'ON'; + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + //W7. Search backward from each instance of a European number until the first strong type (R, L, or sor) is found. If an L is found, then change the type of the European number to L. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['char'] == 'EN') { + for ($j=$levcount; $j >= 0; $j--) { + if ($chardata[$j]['type'] == 'L') { + $chardata[$i]['type'] = 'L'; + } elseif ($chardata[$j]['type'] == 'R') { + break; + } + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // N1. A sequence of neutrals takes the direction of the surrounding strong text if the text on both sides has the same direction. European and Arabic numbers act as if they were R in terms of their influence on neutrals. Start-of-level-run (sor) and end-of-level-run (eor) are used at level run boundaries. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if (($levcount > 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) { + if (($chardata[$i]['type'] == 'N') AND ($chardata[($i-1)]['type'] == 'L') AND ($chardata[($i+1)]['type'] == 'L')) { + $chardata[$i]['type'] = 'L'; + } elseif (($chardata[$i]['type'] == 'N') AND + (($chardata[($i-1)]['type'] == 'R') OR ($chardata[($i-1)]['type'] == 'EN') OR ($chardata[($i-1)]['type'] == 'AN')) AND + (($chardata[($i+1)]['type'] == 'R') OR ($chardata[($i+1)]['type'] == 'EN') OR ($chardata[($i+1)]['type'] == 'AN'))) { + $chardata[$i]['type'] = 'R'; + } elseif ($chardata[$i]['type'] == 'N') { + // N2. Any remaining neutrals take the embedding direction + $chardata[$i]['type'] = $chardata[$i]['sor']; + } + } elseif (($levcount == 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) { + // first char + if (($chardata[$i]['type'] == 'N') AND ($chardata[$i]['sor'] == 'L') AND ($chardata[($i+1)]['type'] == 'L')) { + $chardata[$i]['type'] = 'L'; + } elseif (($chardata[$i]['type'] == 'N') AND + (($chardata[$i]['sor'] == 'R') OR ($chardata[$i]['sor'] == 'EN') OR ($chardata[$i]['sor'] == 'AN')) AND + (($chardata[($i+1)]['type'] == 'R') OR ($chardata[($i+1)]['type'] == 'EN') OR ($chardata[($i+1)]['type'] == 'AN'))) { + $chardata[$i]['type'] = 'R'; + } elseif ($chardata[$i]['type'] == 'N') { + // N2. Any remaining neutrals take the embedding direction + $chardata[$i]['type'] = $chardata[$i]['sor']; + } + } elseif (($levcount > 0) AND ((($i+1) == $numchars) OR (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] != $prevlevel))) { + //last char + if (($chardata[$i]['type'] == 'N') AND ($chardata[($i-1)]['type'] == 'L') AND ($chardata[$i]['eor'] == 'L')) { + $chardata[$i]['type'] = 'L'; + } elseif (($chardata[$i]['type'] == 'N') AND + (($chardata[($i-1)]['type'] == 'R') OR ($chardata[($i-1)]['type'] == 'EN') OR ($chardata[($i-1)]['type'] == 'AN')) AND + (($chardata[$i]['eor'] == 'R') OR ($chardata[$i]['eor'] == 'EN') OR ($chardata[$i]['eor'] == 'AN'))) { + $chardata[$i]['type'] = 'R'; + } elseif ($chardata[$i]['type'] == 'N') { + // N2. Any remaining neutrals take the embedding direction + $chardata[$i]['type'] = $chardata[$i]['sor']; + } + } elseif ($chardata[$i]['type'] == 'N') { + // N2. Any remaining neutrals take the embedding direction + $chardata[$i]['type'] = $chardata[$i]['sor']; + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // I1. For all characters with an even (left-to-right) embedding direction, those of type R go up one level and those of type AN or EN go up two levels. + // I2. For all characters with an odd (right-to-left) embedding direction, those of type L, EN or AN go up one level. + for ($i=0; $i < $numchars; ++$i) { + $odd = $chardata[$i]['level'] % 2; + if ($odd) { + if (($chardata[$i]['type'] == 'L') OR ($chardata[$i]['type'] == 'AN') OR ($chardata[$i]['type'] == 'EN')) { + $chardata[$i]['level'] += 1; + } + } else { + if ($chardata[$i]['type'] == 'R') { + $chardata[$i]['level'] += 1; + } elseif (($chardata[$i]['type'] == 'AN') OR ($chardata[$i]['type'] == 'EN')) { + $chardata[$i]['level'] += 2; + } + } + $maxlevel = max($chardata[$i]['level'],$maxlevel); + } + + // L1. On each line, reset the embedding level of the following characters to the paragraph embedding level: + // 1. Segment separators, + // 2. Paragraph separators, + // 3. Any sequence of whitespace characters preceding a segment separator or paragraph separator, and + // 4. Any sequence of white space characters at the end of the line. + for ($i=0; $i < $numchars; ++$i) { + if (($chardata[$i]['type'] == 'B') OR ($chardata[$i]['type'] == 'S')) { + $chardata[$i]['level'] = $pel; + } elseif ($chardata[$i]['type'] == 'WS') { + $j = $i+1; + while ($j < $numchars) { + if ((($chardata[$j]['type'] == 'B') OR ($chardata[$j]['type'] == 'S')) OR + (($j == ($numchars-1)) AND ($chardata[$j]['type'] == 'WS'))) { + $chardata[$i]['level'] = $pel; + break; + } elseif ($chardata[$j]['type'] != 'WS') { + break; + } + ++$j; + } + } + } + + // Arabic Shaping + // Cursively connected scripts, such as Arabic or Syriac, require the selection of positional character shapes that depend on adjacent characters. Shaping is logically applied after the Bidirectional Algorithm is used and is limited to characters within the same directional run. + if ($arabic) { + $endedletter = array(1569,1570,1571,1572,1573,1575,1577,1583,1584,1585,1586,1608,1688); + $alfletter = array(1570,1571,1573,1575); + $chardata2 = $chardata; + $laaletter = false; + $charAL = array(); + $x = 0; + for ($i=0; $i < $numchars; ++$i) { + if (($unicode[$chardata[$i]['char']] == 'AL') OR ($chardata[$i]['char'] == 32) OR ($chardata[$i]['char'] == 8204)) { + $charAL[$x] = $chardata[$i]; + $charAL[$x]['i'] = $i; + $chardata[$i]['x'] = $x; + ++$x; + } + } + $numAL = $x; + for ($i=0; $i < $numchars; ++$i) { + $thischar = $chardata[$i]; + if ($i > 0) { + $prevchar = $chardata[($i-1)]; + } else { + $prevchar = false; + } + if (($i+1) < $numchars) { + $nextchar = $chardata[($i+1)]; + } else { + $nextchar = false; + } + if ($unicode[$thischar['char']] == 'AL') { + $x = $thischar['x']; + if ($x > 0) { + $prevchar = $charAL[($x-1)]; + } else { + $prevchar = false; + } + if (($x+1) < $numAL) { + $nextchar = $charAL[($x+1)]; + } else { + $nextchar = false; + } + // if laa letter + if (($prevchar !== false) AND ($prevchar['char'] == 1604) AND (in_array($thischar['char'], $alfletter))) { + $arabicarr = $laa_array; + $laaletter = true; + if ($x > 1) { + $prevchar = $charAL[($x-2)]; + } else { + $prevchar = false; + } + } else { + $arabicarr = $unicode_arlet; + $laaletter = false; + } + if (($prevchar !== false) AND ($nextchar !== false) AND + (($unicode[$prevchar['char']] == 'AL') OR ($unicode[$prevchar['char']] == 'NSM')) AND + (($unicode[$nextchar['char']] == 'AL') OR ($unicode[$nextchar['char']] == 'NSM')) AND + ($prevchar['type'] == $thischar['type']) AND + ($nextchar['type'] == $thischar['type']) AND + ($nextchar['char'] != 1567)) { + if (in_array($prevchar['char'], $endedletter)) { + if (isset($arabicarr[$thischar['char']][2])) { + // initial + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][2]; + } + } else { + if (isset($arabicarr[$thischar['char']][3])) { + // medial + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][3]; + } + } + } elseif (($nextchar !== false) AND + (($unicode[$nextchar['char']] == 'AL') OR ($unicode[$nextchar['char']] == 'NSM')) AND + ($nextchar['type'] == $thischar['type']) AND + ($nextchar['char'] != 1567)) { + if (isset($arabicarr[$chardata[$i]['char']][2])) { + // initial + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][2]; + } + } elseif ((($prevchar !== false) AND + (($unicode[$prevchar['char']] == 'AL') OR ($unicode[$prevchar['char']] == 'NSM')) AND + ($prevchar['type'] == $thischar['type'])) OR + (($nextchar !== false) AND ($nextchar['char'] == 1567))) { + // final + if (($i > 1) AND ($thischar['char'] == 1607) AND + ($chardata[$i-1]['char'] == 1604) AND + ($chardata[$i-2]['char'] == 1604)) { + //Allah Word + // mark characters to delete with false + $chardata2[$i-2]['char'] = false; + $chardata2[$i-1]['char'] = false; + $chardata2[$i]['char'] = 65010; + } else { + if (($prevchar !== false) AND in_array($prevchar['char'], $endedletter)) { + if (isset($arabicarr[$thischar['char']][0])) { + // isolated + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][0]; + } + } else { + if (isset($arabicarr[$thischar['char']][1])) { + // final + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][1]; + } + } + } + } elseif (isset($arabicarr[$thischar['char']][0])) { + // isolated + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][0]; + } + // if laa letter + if ($laaletter) { + // mark characters to delete with false + $chardata2[($charAL[($x-1)]['i'])]['char'] = false; + } + } // end if AL (Arabic Letter) + } // end for each char + /* + * Combining characters that can occur with Arabic Shadda (0651 HEX, 1617 DEC) are replaced. + * Putting the combining mark and shadda in the same glyph allows us to avoid the two marks overlapping each other in an illegible manner. + */ + $cw = &$this->CurrentFont['cw']; + for ($i = 0; $i < ($numchars-1); ++$i) { + if (($chardata2[$i]['char'] == 1617) AND (isset($diacritics[($chardata2[$i+1]['char'])]))) { + // check if the subtitution font is defined on current font + if (isset($cw[($diacritics[($chardata2[$i+1]['char'])])])) { + $chardata2[$i]['char'] = false; + $chardata2[$i+1]['char'] = $diacritics[($chardata2[$i+1]['char'])]; + } + } + } + // remove marked characters + foreach ($chardata2 as $key => $value) { + if ($value['char'] === false) { + unset($chardata2[$key]); + } + } + $chardata = array_values($chardata2); + $numchars = count($chardata); + unset($chardata2); + unset($arabicarr); + unset($laaletter); + unset($charAL); + } + + // L2. From the highest level found in the text to the lowest odd level on each line, including intermediate levels not actually present in the text, reverse any contiguous sequence of characters that are at that level or higher. + for ($j=$maxlevel; $j > 0; $j--) { + $ordarray = Array(); + $revarr = Array(); + $onlevel = false; + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['level'] >= $j) { + $onlevel = true; + if (isset($unicode_mirror[$chardata[$i]['char']])) { + // L4. A character is depicted by a mirrored glyph if and only if (a) the resolved directionality of that character is R, and (b) the Bidi_Mirrored property value of that character is true. + $chardata[$i]['char'] = $unicode_mirror[$chardata[$i]['char']]; + } + $revarr[] = $chardata[$i]; + } else { + if ($onlevel) { + $revarr = array_reverse($revarr); + $ordarray = array_merge($ordarray, $revarr); + $revarr = Array(); + $onlevel = false; + } + $ordarray[] = $chardata[$i]; + } + } + if ($onlevel) { + $revarr = array_reverse($revarr); + $ordarray = array_merge($ordarray, $revarr); + } + $chardata = $ordarray; + } + + $ordarray = array(); + for ($i=0; $i < $numchars; ++$i) { + $ordarray[] = $chardata[$i]['char']; + } + + return $ordarray; + } + + // END OF BIDIRECTIONAL TEXT SECTION ------------------- + + /** + * Adds a bookmark. + * @param string $txt bookmark description. + * @param int $level bookmark level (minimum value is 0). + * @param float $y Ordinate of the boorkmark position (default = -1 = current position). + * @param int $page target page number (leave empty for current page). + * @access public + * @author Olivier Plathey, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + public function Bookmark($txt, $level=0, $y=-1, $page='') { + if ($level < 0) { + $level = 0; + } + if (isset($this->outlines[0])) { + $lastoutline = end($this->outlines); + $maxlevel = $lastoutline['l'] + 1; + } else { + $maxlevel = 0; + } + if ($level > $maxlevel) { + $level = $maxlevel; + } + if ($y == -1) { + $y = $this->GetY(); + } + if (empty($page)) { + $page = $this->PageNo(); + } + $this->outlines[] = array('t' => $txt, 'l' => $level, 'y' => $y, 'p' => $page); + } + + /** + * Create a bookmark PDF string. + * @access protected + * @author Olivier Plathey, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _putbookmarks() { + $nb = count($this->outlines); + if ($nb == 0) { + return; + } + // get sorting columns + $outline_p = array(); + $outline_y = array(); + foreach ($this->outlines as $key => $row) { + $outline_p[$key] = $row['p']; + $outline_k[$key] = $key; + } + // sort outlines by page and original position + array_multisort($outline_p, SORT_NUMERIC, SORT_ASC, $outline_k, SORT_NUMERIC, SORT_ASC, $this->outlines); + $lru = array(); + $level = 0; + foreach ($this->outlines as $i => $o) { + if ($o['l'] > 0) { + $parent = $lru[($o['l'] - 1)]; + //Set parent and last pointers + $this->outlines[$i]['parent'] = $parent; + $this->outlines[$parent]['last'] = $i; + if ($o['l'] > $level) { + //Level increasing: set first pointer + $this->outlines[$parent]['first'] = $i; + } + } else { + $this->outlines[$i]['parent'] = $nb; + } + if (($o['l'] <= $level) AND ($i > 0)) { + //Set prev and next pointers + $prev = $lru[$o['l']]; + $this->outlines[$prev]['next'] = $i; + $this->outlines[$i]['prev'] = $prev; + } + $lru[$o['l']] = $i; + $level = $o['l']; + } + //Outline items + $n = $this->n + 1; + foreach ($this->outlines as $i => $o) { + $this->_newobj(); + // covert HTML title to string + $nltags = '/|<\/(blockquote|dd|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|p|pre|ul|tcpdf|table|tr|td)>/si'; + $title = preg_replace($nltags, "\n", $o['t']); + $title = preg_replace("/[\r]+/si", '', $title); + $title = preg_replace("/[\n]+/si", "\n", $title); + $title = strip_tags(trim($title)); + $out = '<_textstring($title); + $out .= ' /Parent '.($n + $o['parent']).' 0 R'; + if (isset($o['prev'])) { + $out .= ' /Prev '.($n + $o['prev']).' 0 R'; + } + if (isset($o['next'])) { + $out .= ' /Next '.($n + $o['next']).' 0 R'; + } + if (isset($o['first'])) { + $out .= ' /First '.($n + $o['first']).' 0 R'; + } + if (isset($o['last'])) { + $out .= ' /Last '.($n + $o['last']).' 0 R'; + } + $out .= ' '.sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]', (1 + (2 * $o['p'])), ($this->pagedim[$o['p']]['h'] - ($o['y'] * $this->k))); + $out .= ' /Count 0 >> endobj'; + $this->_out($out); + } + //Outline root + $this->_newobj(); + $this->OutlineRoot = $this->n; + $this->_out('<< /Type /Outlines /First '.$n.' 0 R /Last '.($n + $lru[0]).' 0 R >> endobj'); + } + + // --- JAVASCRIPT ------------------------------------------------------ + + /** + * Adds a javascript + * @param string $script Javascript code + * @access public + * @author Johannes G�ntert, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + public function IncludeJS($script) { + $this->javascript .= $script; + } + + /** + * Adds a javascript object and return object ID + * @param string $script Javascript code + * @param boolean $onload if true executes this object when opening the document + * @return int internal object ID + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function addJavascriptObject($script, $onload=false) { + ++$this->js_obj_id; + $this->js_objects[$this->js_obj_id] = array('js' => $script, 'onload' => $onload); + return $this->js_obj_id; + } + + /** + * Create a javascript PDF string. + * @access protected + * @author Johannes G�ntert, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _putjavascript() { + if (empty($this->javascript) AND empty($this->js_objects)) { + return; + } + if (strpos($this->javascript, 'this.addField') > 0) { + if (!$this->ur) { + //$this->setUserRights(); + } + // the following two lines are used to avoid form fields duplication after saving + // The addField method only works on Acrobat Writer, unless the document is signed with Adobe private key (UR3) + $jsa = sprintf("ftcpdfdocsaved=this.addField('%s','%s',%d,[%.2F,%.2F,%.2F,%.2F]);", 'tcpdfdocsaved', 'text', 0, 0, 1, 0, 1); + $jsb = "getField('tcpdfdocsaved').value='saved';"; + $this->javascript = $jsa."\n".$this->javascript."\n".$jsb; + } + $this->n_js = $this->_newobj(); + $out = ' << /Names ['; + if (!empty($this->javascript)) { + $out .= ' (EmbeddedJS) '.($this->n + 1).' 0 R'; + } + if (!empty($this->js_objects)) { + foreach ($this->js_objects as $key => $val) { + if ($val['onload']) { + $out .= ' (JS'.$key.') '.$key.' 0 R'; + } + } + } + $out .= ' ] >> endobj'; + $this->_out($out); + // default Javascript object + if (!empty($this->javascript)) { + $this->_newobj(); + $out = '<< /S /JavaScript'; + $out .= ' /JS '.$this->_textstring($this->javascript); + $out .= ' >> endobj'; + $this->_out($out); + } + // additional Javascript objects + if (!empty($this->js_objects)) { + foreach ($this->js_objects as $key => $val) { + $this->offsets[$key] = $this->bufferlen; + $out = $key.' 0 obj'."\n".' << /S /JavaScript /JS '.$this->_textstring($val['js']).' >> endobj'; + $this->_out($out); + } + } + } + + /** + * Convert color to javascript color. + * @param string $color color name or #RRGGBB + * @access protected + * @author Denis Van Nuffelen, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _JScolor($color) { + static $aColors = array('transparent', 'black', 'white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'dkGray', 'gray', 'ltGray'); + if (substr($color,0,1) == '#') { + return sprintf("['RGB',%.3F,%.3F,%.3F]", hexdec(substr($color,1,2))/255, hexdec(substr($color,3,2))/255, hexdec(substr($color,5,2))/255); + } + if (!in_array($color,$aColors)) { + $this->Error('Invalid color: '.$color); + } + return 'color.'.$color; + } + + /** + * Adds a javascript form field. + * @param string $type field type + * @param string $name field name + * @param int $x horizontal position + * @param int $y vertical position + * @param int $w width + * @param int $h height + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @access protected + * @author Denis Van Nuffelen, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _addfield($type, $name, $x, $y, $w, $h, $prop) { + if ($this->rtl) { + $x = $x - $w; + } + // the followind avoid fields duplication after saving the document + $this->javascript .= "if(getField('tcpdfdocsaved').value != 'saved') {"; + $k = $this->k; + $this->javascript .= sprintf("f".$name."=this.addField('%s','%s',%d,[%.2F,%.2F,%.2F,%.2F]);", $name, $type, $this->PageNo()-1, $x*$k, ($this->h-$y)*$k+1, ($x+$w)*$k, ($this->h-$y-$h)*$k+1)."\n"; + $this->javascript .= 'f'.$name.'.textSize='.$this->FontSizePt.";\n"; + while (list($key, $val) = each($prop)) { + if (strcmp(substr($key, -5), 'Color') == 0) { + $val = $this->_JScolor($val); + } else { + $val = "'".$val."'"; + } + $this->javascript .= 'f'.$name.'.'.$key.'='.$val.";\n"; + } + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + $this->javascript .= '}'; + } + + // --- FORM FIELDS ----------------------------------------------------- + + /** + * Convert JavaScript form fields properties array to Annotation Properties array. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @return array of annotation properties + * @access protected + * @author Nicola Asuni + * @since 4.8.000 (2009-09-06) + */ + protected function getAnnotOptFromJSProp($prop) { + if (isset($prop['aopt']) AND is_array($prop['aopt'])) { + // the annotation options area lready defined + return $prop['aopt']; + } + $opt = array(); // value to be returned + // alignment: Controls how the text is laid out within the text field. + if (isset($prop['alignment'])) { + switch ($prop['alignment']) { + case 'left': { + $opt['q'] = 0; + break; + } + case 'center': { + $opt['q'] = 1; + break; + } + case 'right': { + $opt['q'] = 2; + break; + } + default: { + $opt['q'] = ($this->rtl)?2:0; + break; + } + } + } + // lineWidth: Specifies the thickness of the border when stroking the perimeter of a field's rectangle. + if (isset($prop['lineWidth'])) { + $linewidth = intval($prop['lineWidth']); + } else { + $linewidth = 1; + } + // borderStyle: The border style for a field. + if (isset($prop['borderStyle'])) { + switch ($prop['borderStyle']) { + case 'border.d': + case 'dashed': { + $opt['border'] = array(0, 0, $linewidth, array(3, 2)); + $opt['bs'] = array('w'=>$linewidth, 's'=>'D', 'd'=>array(3, 2)); + break; + } + case 'border.b': + case 'beveled': { + $opt['border'] = array(0, 0, $linewidth); + $opt['bs'] = array('w'=>$linewidth, 's'=>'B'); + break; + } + case 'border.i': + case 'inset': { + $opt['border'] = array(0, 0, $linewidth); + $opt['bs'] = array('w'=>$linewidth, 's'=>'I'); + break; + } + case 'border.u': + case 'underline': { + $opt['border'] = array(0, 0, $linewidth); + $opt['bs'] = array('w'=>$linewidth, 's'=>'U'); + break; + } + default: + case 'border.s': + case 'solid': { + $opt['border'] = array(0, 0, $linewidth); + $opt['bs'] = array('w'=>$linewidth, 's'=>'S'); + break; + } + } + } + if (isset($prop['border']) AND is_array($prop['border'])) { + $opt['border'] = $prop['border']; + } + if (!isset($opt['mk'])) { + $opt['mk'] = array(); + } + if (!isset($opt['mk']['if'])) { + $opt['mk']['if'] = array(); + } + $opt['mk']['if']['a'] = array(0.5, 0.5); + // buttonAlignX: Controls how space is distributed from the left of the button face with respect to the icon. + if (isset($prop['buttonAlignX'])) { + $opt['mk']['if']['a'][0] = $prop['buttonAlignX']; + } + // buttonAlignY: Controls how unused space is distributed from the bottom of the button face with respect to the icon. + if (isset($prop['buttonAlignY'])) { + $opt['mk']['if']['a'][1] = $prop['buttonAlignY']; + } + // buttonFitBounds: If true, the extent to which the icon may be scaled is set to the bounds of the button field. + if (isset($prop['buttonFitBounds']) AND ($prop['buttonFitBounds'] == 'true')) { + $opt['mk']['if']['fb'] = true; + } + // buttonScaleHow: Controls how the icon is scaled (if necessary) to fit inside the button face. + if (isset($prop['buttonScaleHow'])) { + switch ($prop['buttonScaleHow']) { + case 'scaleHow.proportional': { + $opt['mk']['if']['s'] = 'P'; + break; + } + case 'scaleHow.anamorphic': { + $opt['mk']['if']['s'] = 'A'; + break; + } + } + } + // buttonScaleWhen: Controls when an icon is scaled to fit inside the button face. + if (isset($prop['buttonScaleWhen'])) { + switch ($prop['buttonScaleWhen']) { + case 'scaleWhen.always': { + $opt['mk']['if']['sw'] = 'A'; + break; + } + case 'scaleWhen.never': { + $opt['mk']['if']['sw'] = 'N'; + break; + } + case 'scaleWhen.tooBig': { + $opt['mk']['if']['sw'] = 'B'; + break; + } + case 'scaleWhen.tooSmall': { + $opt['mk']['if']['sw'] = 'S'; + break; + } + } + } + // buttonPosition: Controls how the text and the icon of the button are positioned with respect to each other within the button face. + if (isset($prop['buttonPosition'])) { + switch ($prop['buttonPosition']) { + case 0: + case 'position.textOnly': { + $opt['mk']['tp'] = 0; + break; + } + case 1: + case 'position.iconOnly': { + $opt['mk']['tp'] = 1; + break; + } + case 2: + case 'position.iconTextV': { + $opt['mk']['tp'] = 2; + break; + } + case 3: + case 'position.textIconV': { + $opt['mk']['tp'] = 3; + break; + } + case 4: + case 'position.iconTextH': { + $opt['mk']['tp'] = 4; + break; + } + case 5: + case 'position.textIconH': { + $opt['mk']['tp'] = 5; + break; + } + case 6: + case 'position.overlay': { + $opt['mk']['tp'] = 6; + break; + } + } + } + // fillColor: Specifies the background color for a field. + if (isset($prop['fillColor'])) { + if (is_array($prop['fillColor'])) { + $opt['mk']['bg'] = $prop['fillColor']; + } else { + $opt['mk']['bg'] = $this->convertHTMLColorToDec($prop['fillColor']); + } + } + // strokeColor: Specifies the stroke color for a field that is used to stroke the rectangle of the field with a line as large as the line width. + if (isset($prop['strokeColor'])) { + if (is_array($prop['strokeColor'])) { + $opt['mk']['bc'] = $prop['strokeColor']; + } else { + $opt['mk']['bc'] = $this->convertHTMLColorToDec($prop['strokeColor']); + } + } + // rotation: The rotation of a widget in counterclockwise increments. + if (isset($prop['rotation'])) { + $opt['mk']['r'] = $prop['rotation']; + } + // charLimit: Limits the number of characters that a user can type into a text field. + if (isset($prop['charLimit'])) { + $opt['maxlen'] = intval($prop['charLimit']); + } + if (!isset($ff)) { + $ff = 0; + } + // readonly: The read-only characteristic of a field. If a field is read-only, the user can see the field but cannot change it. + if (isset($prop['readonly']) AND ($prop['readonly'] == 'true')) { + $ff += 1 << 0; + } + // required: Specifies whether a field requires a value. + if (isset($prop['required']) AND ($prop['required'] == 'true')) { + $ff += 1 << 1; + } + // multiline: Controls how text is wrapped within the field. + if (isset($prop['multiline']) AND ($prop['multiline'] == 'true')) { + $ff += 1 << 12; + } + // password: Specifies whether the field should display asterisks when data is entered in the field. + if (isset($prop['password']) AND ($prop['password'] == 'true')) { + $ff += 1 << 13; + } + // NoToggleToOff: If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. + if (isset($prop['NoToggleToOff']) AND ($prop['NoToggleToOff'] == 'true')) { + $ff += 1 << 14; + } + // Radio: If set, the field is a set of radio buttons. + if (isset($prop['Radio']) AND ($prop['Radio'] == 'true')) { + $ff += 1 << 15; + } + // Pushbutton: If set, the field is a pushbutton that does not retain a permanent value. + if (isset($prop['Pushbutton']) AND ($prop['Pushbutton'] == 'true')) { + $ff += 1 << 16; + } + // Combo: If set, the field is a combo box; if clear, the field is a list box. + if (isset($prop['Combo']) AND ($prop['Combo'] == 'true')) { + $ff += 1 << 17; + } + // editable: Controls whether a combo box is editable. + if (isset($prop['editable']) AND ($prop['editable'] == 'true')) { + $ff += 1 << 18; + } + // Sort: If set, the field's option items shall be sorted alphabetically. + if (isset($prop['Sort']) AND ($prop['Sort'] == 'true')) { + $ff += 1 << 19; + } + // fileSelect: If true, sets the file-select flag in the Options tab of the text field (Field is Used for File Selection). + if (isset($prop['fileSelect']) AND ($prop['fileSelect'] == 'true')) { + $ff += 1 << 20; + } + // multipleSelection: If true, indicates that a list box allows a multiple selection of items. + if (isset($prop['multipleSelection']) AND ($prop['multipleSelection'] == 'true')) { + $ff += 1 << 21; + } + // doNotSpellCheck: If true, spell checking is not performed on this editable text field. + if (isset($prop['doNotSpellCheck']) AND ($prop['doNotSpellCheck'] == 'true')) { + $ff += 1 << 22; + } + // doNotScroll: If true, the text field does not scroll and the user, therefore, is limited by the rectangular region designed for the field. + if (isset($prop['doNotScroll']) AND ($prop['doNotScroll'] == 'true')) { + $ff += 1 << 23; + } + // comb: If set to true, the field background is drawn as series of boxes (one for each character in the value of the field) and each character of the content is drawn within those boxes. The number of boxes drawn is determined from the charLimit property. It applies only to text fields. The setter will also raise if any of the following field properties are also set multiline, password, and fileSelect. A side-effect of setting this property is that the doNotScroll property is also set. + if (isset($prop['comb']) AND ($prop['comb'] == 'true')) { + $ff += 1 << 24; + } + // radiosInUnison: If false, even if a group of radio buttons have the same name and export value, they behave in a mutually exclusive fashion, like HTML radio buttons. + if (isset($prop['radiosInUnison']) AND ($prop['radiosInUnison'] == 'true')) { + $ff += 1 << 25; + } + // richText: If true, the field allows rich text formatting. + if (isset($prop['richText']) AND ($prop['richText'] == 'true')) { + $ff += 1 << 25; + } + // commitOnSelChange: Controls whether a field value is committed after a selection change. + if (isset($prop['commitOnSelChange']) AND ($prop['commitOnSelChange'] == 'true')) { + $ff += 1 << 26; + } + $opt['ff'] = $ff; + // defaultValue: The default value of a field - that is, the value that the field is set to when the form is reset. + if (isset($prop['defaultValue'])) { + $opt['dv'] = $prop['defaultValue']; + } + $f = 4; // default value for annotation flags + // readonly: The read-only characteristic of a field. If a field is read-only, the user can see the field but cannot change it. + if (isset($prop['readonly']) AND ($prop['readonly'] == 'true')) { + $f += 1 << 6; + } + // display: Controls whether the field is hidden or visible on screen and in print. + if (isset($prop['display'])) { + if ($prop['display'] == 'display.visible') { + // + } elseif ($prop['display'] == 'display.hidden') { + $f += 1 << 1; + } elseif ($prop['display'] == 'display.noPrint') { + $f -= 1 << 2; + } elseif ($prop['display'] == 'display.noView') { + $f += 1 << 5; + } + } + $opt['f'] = $f; + // currentValueIndices: Reads and writes single or multiple values of a list box or combo box. + if (isset($prop['currentValueIndices']) AND is_array($prop['currentValueIndices'])) { + $opt['i'] = $prop['currentValueIndices']; + } + // value: The value of the field data that the user has entered. + if (isset($prop['value'])) { + if (is_array($prop['value'])) { + $opt['opt'] = array(); + foreach ($prop['value'] AS $key => $optval) { + // exportValues: An array of strings representing the export values for the field. + if (isset($prop['exportValues'][$key])) { + $opt['opt'][$key] = array($prop['exportValues'][$key], $prop['value'][$key]); + } else { + $opt['opt'][$key] = $prop['value'][$key]; + } + } + } else { + $opt['v'] = $prop['value']; + } + } + // richValue: This property specifies the text contents and formatting of a rich text field. + if (isset($prop['richValue'])) { + $opt['rv'] = $prop['richValue']; + } + // submitName: If nonempty, used during form submission instead of name. Only applicable if submitting in HTML format (that is, URL-encoded). + if (isset($prop['submitName'])) { + $opt['tm'] = $prop['submitName']; + } + // name: Fully qualified field name. + if (isset($prop['name'])) { + $opt['t'] = $prop['name']; + } + // userName: The user name (short description string) of the field. + if (isset($prop['userName'])) { + $opt['tu'] = $prop['userName']; + } + // highlight: Defines how a button reacts when a user clicks it. + if (isset($prop['highlight'])) { + switch ($prop['highlight']) { + case 'none': + case 'highlight.n': { + $opt['h'] = 'N'; + break; + } + case 'invert': + case 'highlight.i': { + $opt['h'] = 'i'; + break; + } + case 'push': + case 'highlight.p': { + $opt['h'] = 'P'; + break; + } + case 'outline': + case 'highlight.o': { + $opt['h'] = 'O'; + break; + } + } + } + // Unsupported options: + // - calcOrderIndex: Changes the calculation order of fields in the document. + // - delay: Delays the redrawing of a field's appearance. + // - defaultStyle: This property defines the default style attributes for the form field. + // - style: Allows the user to set the glyph style of a check box or radio button. + // - textColor, textFont, textSize + return $opt; + } + + /** + * Set default properties for form fields. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-06) + */ + public function setFormDefaultProp($prop=array()) { + $this->default_form_prop = $prop; + } + + /** + * Return the default properties for form fields. + * @return array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-06) + */ + public function getFormDefaultProp() { + return $this->default_form_prop; + } + + /** + * Creates a text field + * @param string $name field name + * @param float $w Width of the rectangle + * @param float $h Height of the rectangle + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function TextField($name, $w, $h, $prop=array(), $opt=array(), $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if ($js) { + $this->_addfield('text', $name, $x, $y, $w, $h, $prop); + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + // get annotation data + $popt = $this->getAnnotOptFromJSProp($prop); + // set default appearance stream + $font = $this->FontFamily; + $fontkey = array_search($font, $this->fontkeys); + if (!in_array($fontkey, $this->annotation_fonts)) { + $this->annotation_fonts[$font] = $fontkey; + } + $fontstyle = sprintf('/F%d %.2F Tf %s', ($fontkey + 1), $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + $popt['ap'] = array(); + $popt['ap']['n'] = 'q BT '.$fontstyle.' ET Q'; + // merge options + $opt = array_merge($popt, $opt); + // remove some conflicting options + unset($opt['bs']); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Tx'; + $opt['t'] = $name; + /* + Additional annotation's parameters (check _putannotsobj() method): + //$opt['f'] + //$opt['ap'] + //$opt['as'] + //$opt['bs'] + //$opt['be'] + //$opt['c'] + //$opt['border'] + //$opt['h'] + //$opt['mk'] + //$opt['mk']['r'] + //$opt['mk']['bc'] + //$opt['mk']['bg'] + //$opt['mk']['ca'] + //$opt['mk']['rc'] + //$opt['mk']['ac'] + //$opt['mk']['i'] + //$opt['mk']['ri'] + //$opt['mk']['ix'] + //$opt['mk']['if'] + //$opt['mk']['if']['sw'] + //$opt['mk']['if']['s'] + //$opt['mk']['if']['a'] + //$opt['mk']['if']['fb'] + //$opt['mk']['tp'] + //$opt['tu'] + //$opt['tm'] + //$opt['ff'] + //$opt['v'] + //$opt['dv'] + //$opt['a'] + //$opt['aa'] + //$opt['q'] + */ + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a RadioButton field + * @param string $name field name + * @param int $w width + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param string $onvalue value to be returned if selected. + * @param boolean $checked define the initial state. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function RadioButton($name, $w, $prop=array(), $opt=array(), $onvalue='On', $checked=false, $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if ($js) { + $this->_addfield('radiobutton', $name, $x, $y, $w, $w, $prop); + return; + } + if ($this->empty_string($onvalue)) { + $onvalue = 'On'; + } + if ($checked) { + $defval = $onvalue; + } else { + $defval = 'Off'; + } + // set data for parent group + if (!isset($this->radiobutton_groups[$this->page])) { + $this->radiobutton_groups[$this->page] = array(); + } + if (!isset($this->radiobutton_groups[$this->page][$name])) { + $this->radiobutton_groups[$this->page][$name] = array(); + ++$this->annot_obj_id; + $this->radio_groups[] = $this->annot_obj_id; + } + // save object ID to be added on Kids entry on parent object + $this->radiobutton_groups[$this->page][$name][] = array('kid' => ($this->annot_obj_id + 1), 'def' => $defval); + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['NoToggleToOff'] = 'true'; + $prop['Radio'] = 'true'; + $prop['borderStyle'] = 'inset'; + // get annotation data + $popt = $this->getAnnotOptFromJSProp($prop); + // set additional default values + $font = 'zapfdingbats'; + $this->AddFont($font); + $fontkey = array_search($font, $this->fontkeys); + if (!in_array($fontkey, $this->annotation_fonts)) { + $this->annotation_fonts[$font] = $fontkey; + } + $fontstyle = sprintf('/F%d %.2F Tf %s', ($fontkey + 1), $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + $popt['ap'] = array(); + $popt['ap']['n'] = array(); + $popt['ap']['n'][$onvalue] = 'q BT '.$fontstyle.' 0 0 Td (8) Tj ET Q'; + $popt['ap']['n']['Off'] = 'q BT '.$fontstyle.' 0 0 Td (8) Tj ET Q'; + if (!isset($popt['mk'])) { + $popt['mk'] = array(); + } + $popt['mk']['ca'] = '(l)'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Btn'; + if ($checked) { + $opt['v'] = array('/'.$onvalue); + $opt['as'] = $onvalue; + } else { + $opt['as'] = 'Off'; + } + $this->Annotation($x, $y, $w, $w, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a List-box field + * @param string $name field name + * @param int $w width + * @param int $h height + * @param array $values array containing the list of values. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function ListBox($name, $w, $h, $values, $prop=array(), $opt=array(), $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if ($js) { + $this->_addfield('listbox', $name, $x, $y, $w, $h, $prop); + $s = ''; + foreach ($values as $value) { + $s .= "'".addslashes($value)."',"; + } + $this->javascript .= 'f'.$name.'.setItems(['.substr($s, 0, -1)."]);\n"; + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + // get annotation data + $popt = $this->getAnnotOptFromJSProp($prop); + // set additional default values + $font = $this->FontFamily; + $fontkey = array_search($font, $this->fontkeys); + if (!in_array($fontkey, $this->annotation_fonts)) { + $this->annotation_fonts[$font] = $fontkey; + } + $fontstyle = sprintf('/F%d %.2F Tf %s', ($fontkey + 1), $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + $popt['ap'] = array(); + $popt['ap']['n'] = 'q BT '.$fontstyle.' ET Q'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Ch'; + $opt['t'] = $name; + $opt['opt'] = $values; + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a Combo-box field + * @param string $name field name + * @param int $w width + * @param int $h height + * @param array $values array containing the list of values. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function ComboBox($name, $w, $h, $values, $prop=array(), $opt=array(), $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if ($js) { + $this->_addfield('combobox', $name, $x, $y, $w, $h, $prop); + $s = ''; + foreach ($values as $value) { + $s .= "'".addslashes($value)."',"; + } + $this->javascript .= 'f'.$name.'.setItems(['.substr($s, 0, -1)."]);\n"; + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['Combo'] = true; + // get annotation data + $popt = $this->getAnnotOptFromJSProp($prop); + // set additional default options + $font = $this->FontFamily; + $fontkey = array_search($font, $this->fontkeys); + if (!in_array($fontkey, $this->annotation_fonts)) { + $this->annotation_fonts[$font] = $fontkey; + } + $fontstyle = sprintf('/F%d %.2F Tf %s', ($fontkey + 1), $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + $popt['ap'] = array(); + $popt['ap']['n'] = 'q BT '.$fontstyle.' ET Q'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Ch'; + $opt['t'] = $name; + $opt['opt'] = $values; + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a CheckBox field + * @param string $name field name + * @param int $w width + * @param boolean $checked define the initial state. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param string $onvalue value to be returned if selected. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function CheckBox($name, $w, $checked=false, $prop=array(), $opt=array(), $onvalue='Yes', $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if ($js) { + $this->_addfield('checkbox', $name, $x, $y, $w, $w, $prop); + return; + } + if (!isset($prop['value'])) { + $prop['value'] = array('Yes'); + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['borderStyle'] = 'inset'; + // get annotation data + $popt = $this->getAnnotOptFromJSProp($prop); + // set additional default options + $font = 'zapfdingbats'; + $this->AddFont($font); + $fontkey = array_search($font, $this->fontkeys); + if (!in_array($fontkey, $this->annotation_fonts)) { + $this->annotation_fonts[$font] = $fontkey; + } + $fontstyle = sprintf('/F%d %.2F Tf %s', ($fontkey + 1), $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + $popt['ap'] = array(); + $popt['ap']['n'] = array(); + $popt['ap']['n']['Yes'] = 'q BT '.$fontstyle.' 0 0 Td (8) Tj ET Q'; + $popt['ap']['n']['Off'] = 'q BT '.$fontstyle.' 0 0 Td (8) Tj ET Q'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Btn'; + $opt['t'] = $name; + $opt['opt'] = array($onvalue); + if ($checked) { + $opt['v'] = array('/0'); + $opt['as'] = 'Yes'; + } else { + $opt['v'] = array('/Off'); + $opt['as'] = 'Off'; + } + $this->Annotation($x, $y, $w, $w, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a button field + * @param string $name field name + * @param int $w width + * @param int $h height + * @param string $caption caption. + * @param mixed $action action triggered by pressing the button. Use a string to specify a javascript action. Use an array to specify a form action options as on section 12.7.5 of PDF32000_2008. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function Button($name, $w, $h, $caption, $action, $prop=array(), $opt=array(), $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if ($js) { + $this->_addfield('button', $name, $this->x, $this->y, $w, $h, $prop); + $this->javascript .= 'f'.$name.".buttonSetCaption('".addslashes($caption)."');\n"; + $this->javascript .= 'f'.$name.".setAction('MouseUp','".addslashes($action)."');\n"; + $this->javascript .= 'f'.$name.".highlight='push';\n"; + $this->javascript .= 'f'.$name.".print=false;\n"; + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['Pushbutton'] = 'true'; + $prop['highlight'] = 'push'; + $prop['display'] = 'display.noPrint'; + // get annotation data + $popt = $this->getAnnotOptFromJSProp($prop); + // set additional default options + if (!isset($popt['mk'])) { + $popt['mk'] = array(); + } + $popt['mk']['ca'] = $this->_textstring($caption); + $popt['mk']['rc'] = $this->_textstring($caption); + $popt['mk']['ac'] = $this->_textstring($caption); + $font = $this->FontFamily; + $fontkey = array_search($font, $this->fontkeys); + if (!in_array($fontkey, $this->annotation_fonts)) { + $this->annotation_fonts[$font] = $fontkey; + } + $fontstyle = sprintf('/F%d %.2F Tf %s', ($fontkey + 1), $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + $popt['ap'] = array(); + $popt['ap']['n'] = 'q BT '.$fontstyle.' ET Q'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Btn'; + $opt['t'] = $caption; + $opt['v'] = $name; + if (!empty($action)) { + if (is_array($action)) { + // form action options as on section 12.7.5 of PDF32000_2008. + $opt['aa'] = '/D <<'; + $bmode = array('SubmitForm', 'ResetForm', 'ImportData'); + foreach ($action AS $key => $val) { + if (($key == 'S') AND in_array($val, $bmode)) { + $opt['aa'] .= ' /S /'.$val; + } elseif (($key == 'F') AND (!empty($val))) { + $opt['aa'] .= ' /F '.$this->_datastring($val); + } elseif (($key == 'Fields') AND is_array($val) AND !empty($val)) { + $opt['aa'] .= ' /Fields ['; + foreach ($val AS $field) { + $opt['aa'] .= ' '.$this->_textstring($field); + } + $opt['aa'] .= ']'; + } elseif (($key == 'Flags')) { + $ff = 0; + if (is_array($val)) { + foreach ($val AS $flag) { + switch ($flag) { + case 'Include/Exclude': { + $ff += 1 << 0; + break; + } + case 'IncludeNoValueFields': { + $ff += 1 << 1; + break; + } + case 'ExportFormat': { + $ff += 1 << 2; + break; + } + case 'GetMethod': { + $ff += 1 << 3; + break; + } + case 'SubmitCoordinates': { + $ff += 1 << 4; + break; + } + case 'XFDF': { + $ff += 1 << 5; + break; + } + case 'IncludeAppendSaves': { + $ff += 1 << 6; + break; + } + case 'IncludeAnnotations': { + $ff += 1 << 7; + break; + } + case 'SubmitPDF': { + $ff += 1 << 8; + break; + } + case 'CanonicalFormat': { + $ff += 1 << 9; + break; + } + case 'ExclNonUserAnnots': { + $ff += 1 << 10; + break; + } + case 'ExclFKey': { + $ff += 1 << 11; + break; + } + case 'EmbedForm': { + $ff += 1 << 13; + break; + } + } + } + } else { + $ff = intval($val); + } + $opt['aa'] .= ' /Flags '.$ff; + } + } + $opt['aa'] .= ' >>'; + } else { + // Javascript action or raw action command + $js_obj_id = $this->addJavascriptObject($action); + $opt['aa'] = '/D '.$js_obj_id.' 0 R'; + } + } + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + // --- END FORMS FIELDS ------------------------------------------------ + + /** + * Add certification signature (DocMDP or UR3) + * You can set only one signature type + * @access protected + * @author Nicola Asuni + * @since 4.6.008 (2009-05-07) + */ + protected function _putsignature() { + if ((!$this->sign) OR (!isset($this->signature_data['cert_type']))) { + return; + } + $this->_newobj(); + $out = ' << /Type /Sig'; + $out .= ' /Filter /Adobe.PPKLite'; + $out .= ' /SubFilter /adbe.pkcs7.detached'; + $out .= ' '.$this->byterange_string; + $out .= ' /Contents<>'.str_repeat(' ', $this->signature_max_length); + $out .= ' /Reference'; + $out .= ' ['; + $out .= ' << /Type /SigRef'; + if ($this->signature_data['cert_type'] > 0) { + $out .= ' /TransformMethod /DocMDP'; + $out .= ' /TransformParams'; + $out .= ' <<'; + $out .= ' /Type /TransformParams'; + $out .= ' /V /1.2'; + $out .= ' /P '.$this->signature_data['cert_type']; + } else { + $out .= ' /TransformMethod /UR3'; + $out .= ' /TransformParams'; + $out .= ' << /Type /TransformParams'; + $out .= ' /V /2.2'; + if (!$this->empty_string($this->ur_document)) { + $out .= ' /Document['.$this->ur_document.']'; + } + if (!$this->empty_string($this->ur_annots)) { + $out .= ' /Annots['.$this->ur_annots.']'; + } + if (!$this->empty_string($this->ur_form)) { + $out .= ' /Form['.$this->ur_form.']'; + } + if (!$this->empty_string($this->ur_signature)) { + $out .= ' /Signature['.$this->ur_signature.']'; + } + } + $out .= ' >> >> ]'; + if (isset($this->signature_data['info']['Name']) AND !$this->empty_string($this->signature_data['info']['Name'])) { + $out .= ' /Name '.$this->_textstring($this->signature_data['info']['Name']); + } + if (isset($this->signature_data['info']['Location']) AND !$this->empty_string($this->signature_data['info']['Location'])) { + $out .= ' /Location '.$this->_textstring($this->signature_data['info']['Location']); + } + if (isset($this->signature_data['info']['Reason']) AND !$this->empty_string($this->signature_data['info']['Reason'])) { + $out .= ' /Reason '.$this->_textstring($this->signature_data['info']['Reason']); + } + if (isset($this->signature_data['info']['ContactInfo']) AND !$this->empty_string($this->signature_data['info']['ContactInfo'])) { + $out .= ' /ContactInfo '.$this->_textstring($this->signature_data['info']['ContactInfo']); + } + $out .= ' /M '.$this->_datestring(); + $out .= ' >> endobj'; + $this->_out($out); + } + + /** + * Set User's Rights for PDF Reader + * WARNING: This works only using the Adobe private key with the setSignature() method!. + * Check the PDF Reference 8.7.1 Transform Methods, + * Table 8.105 Entries in the UR transform parameters dictionary + * @param boolean $enable if true enable user's rights on PDF reader + * @param string $document Names specifying additional document-wide usage rights for the document. The only defined value is "/FullSave", which permits a user to save the document along with modified form and/or annotation data. + * @param string $annots Names specifying additional annotation-related usage rights for the document. Valid names in PDF 1.5 and later are /Create/Delete/Modify/Copy/Import/Export, which permit the user to perform the named operation on annotations. + * @param string $form Names specifying additional form-field-related usage rights for the document. Valid names are: /Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate + * @param string $signature Names specifying additional signature-related usage rights for the document. The only defined value is /Modify, which permits a user to apply a digital signature to an existing signature form field or clear a signed signature form field. + * @access public + * @author Nicola Asuni + * @since 2.9.000 (2008-03-26) + */ + public function setUserRights( + $enable=true, + $document='/FullSave', + $annots='/Create/Delete/Modify/Copy/Import/Export', + $form='/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate', + $signature='/Modify') { + $this->ur = $enable; + $this->ur_document = $document; + $this->ur_annots = $annots; + $this->ur_form = $form; + $this->ur_signature = $signature; + if (!$this->sign) { + // This signature only works using the Adobe Private key that is unavailable! + $this->setSignature('', '', '', '', 0, array()); + } + } + + /** + * Enable document signature (requires the OpenSSL Library). + * The digital signature improve document authenticity and integrity and allows o enable extra features on Acrobat Reader. + * @param mixed $signing_cert signing certificate (string or filename prefixed with 'file://') + * @param mixed $private_key private key (string or filename prefixed with 'file://') + * @param string $private_key_password password + * @param string $extracerts specifies the name of a file containing a bunch of extra certificates to include in the signature which can for example be used to help the recipient to verify the certificate that you used. + * @param int $cert_type The access permissions granted for this document. Valid values shall be: 1 = No changes to the document shall be permitted; any change to the document shall invalidate the signature; 2 = Permitted changes shall be filling in forms, instantiating page templates, and signing; other changes shall invalidate the signature; 3 = Permitted changes shall be the same as for 2, as well as annotation creation, deletion, and modification; other changes shall invalidate the signature. + * @param array $info array of option information: Name, Location, Reason, ContactInfo. + * @access public + * @author Nicola Asuni + * @since 4.6.005 (2009-04-24) + */ + public function setSignature($signing_cert='', $private_key='', $private_key_password='', $extracerts='', $cert_type=2, $info=array()) { + // to create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt + // to convert pfx certificate to pem: openssl + // OpenSSL> pkcs12 -in -out -nodes + $this->sign = true; + $this->signature_data = array(); + if (strlen($signing_cert) == 0) { + $signing_cert = 'file://'.dirname(__FILE__).'/tcpdf.crt'; + $private_key_password = 'tcpdfdemo'; + } + if (strlen($private_key) == 0) { + $private_key = $signing_cert; + } + $this->signature_data['signcert'] = $signing_cert; + $this->signature_data['privkey'] = $private_key; + $this->signature_data['password'] = $private_key_password; + $this->signature_data['extracerts'] = $extracerts; + $this->signature_data['cert_type'] = $cert_type; + $this->signature_data['info'] = $info; + } + + /** + * Create a new page group. + * NOTE: call this function before calling AddPage() + * @param int $page starting group page (leave empty for next page). + * @access public + * @since 3.0.000 (2008-03-27) + */ + public function startPageGroup($page='') { + if (empty($page)) { + $page = $this->page + 1; + } + $this->newpagegroup[$page] = true; + } + + /** + * Defines an alias for the total number of pages. + * It will be substituted as the document is closed. + * @param string $alias The alias. + * @access public + * @since 1.4 + * @see getAliasNbPages(), PageNo(), Footer() + */ + public function AliasNbPages($alias='{nb}') { + $this->AliasNbPages = $alias; + } + + /** + * Returns the string alias used for the total number of pages. + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * @return string + * @access public + * @since 4.0.018 (2008-08-08) + * @see AliasNbPages(), PageNo(), Footer() + */ + public function getAliasNbPages() { + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + return '{'.$this->AliasNbPages.'}'; + } + return $this->AliasNbPages; + } + + /** + * Defines an alias for the page number. + * It will be substituted as the document is closed. + * @param string $alias The alias. + * @access public + * @since 4.5.000 (2009-01-02) + * @see getAliasNbPages(), PageNo(), Footer() + */ + public function AliasNumPage($alias='{pnb}') { + //Define an alias for total number of pages + $this->AliasNumPage = $alias; + } + + /** + * Returns the string alias used for the page number. + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * @return string + * @access public + * @since 4.5.000 (2009-01-02) + * @see AliasNbPages(), PageNo(), Footer() + */ + public function getAliasNumPage() { + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + return '{'.$this->AliasNumPage.'}'; + } + return $this->AliasNumPage; + } + + /** + * Return the current page in the group. + * @return current page in the group + * @access public + * @since 3.0.000 (2008-03-27) + */ + public function getGroupPageNo() { + return $this->pagegroups[$this->currpagegroup]; + } + + /** + * Returns the current group page number formatted as a string. + * @access public + * @since 4.3.003 (2008-11-18) + * @see PaneNo(), formatPageNumber() + */ + public function getGroupPageNoFormatted() { + return $this->formatPageNumber($this->getGroupPageNo()); + } + + /** + * Return the alias of the current page group + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * (will be replaced by the total number of pages in this group). + * @return alias of the current page group + * @access public + * @since 3.0.000 (2008-03-27) + */ + public function getPageGroupAlias() { + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + return '{'.$this->currpagegroup.'}'; + } + return $this->currpagegroup; + } + + /** + * Return the alias for the page number on the current page group + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * (will be replaced by the total number of pages in this group). + * @return alias of the current page group + * @access public + * @since 4.5.000 (2009-01-02) + */ + public function getPageNumGroupAlias() { + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + return '{'.str_replace('{nb', '{pnb', $this->currpagegroup).'}'; + } + return str_replace('{nb', '{pnb', $this->currpagegroup); + } + + /** + * Format the page numbers. + * This method can be overriden for custom formats. + * @param int $num page number + * @access protected + * @since 4.2.005 (2008-11-06) + */ + protected function formatPageNumber($num) { + return number_format((float)$num, 0, '', '.'); + } + + /** + * Format the page numbers on the Table Of Content. + * This method can be overriden for custom formats. + * @param int $num page number + * @access protected + * @since 4.5.001 (2009-01-04) + * @see addTOC(), addHTMLTOC() + */ + protected function formatTOCPageNumber($num) { + return number_format((float)$num, 0, '', '.'); + } + + /** + * Returns the current page number formatted as a string. + * @access public + * @since 4.2.005 (2008-11-06) + * @see PaneNo(), formatPageNumber() + */ + public function PageNoFormatted() { + return $this->formatPageNumber($this->PageNo()); + } + + /** + * Put visibility settings. + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected function _putocg() { + $this->_newobj(); + $this->n_ocg_print = $this->n; + $this->_out('<< /Type /OCG /Name '.$this->_textstring('print').' /Usage << /Print <> /View <> >> >> endobj'); + $this->_newobj(); + $this->n_ocg_view = $this->n; + $this->_out('<< /Type /OCG /Name '.$this->_textstring('view').' /Usage << /Print <> /View <> >> >> endobj'); + } + + /** + * Set the visibility of the successive elements. + * This can be useful, for instance, to put a background + * image or color that will show on screen but won't print. + * @param string $v visibility mode. Legal values are: all, print, screen. + * @access public + * @since 3.0.000 (2008-03-27) + */ + public function setVisibility($v) { + if ($this->openMarkedContent) { + // close existing open marked-content + $this->_out('EMC'); + $this->openMarkedContent = false; + } + switch($v) { + case 'print': { + $this->_out('/OC /OC1 BDC'); + $this->openMarkedContent = true; + break; + } + case 'screen': { + $this->_out('/OC /OC2 BDC'); + $this->openMarkedContent = true; + break; + } + case 'all': { + $this->_out(''); + break; + } + default: { + $this->Error('Incorrect visibility: '.$v); + break; + } + } + $this->visibility = $v; + } + + /** + * Add transparency parameters to the current extgstate + * @param array $params parameters + * @return the number of extgstates + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected function addExtGState($parms) { + $n = count($this->extgstates) + 1; + // check if this ExtGState already exist + for ($i = 1; $i < $n; ++$i) { + if ($this->extgstates[$i]['parms'] == $parms) { + // return reference to existing ExtGState + return $i; + } + } + $this->extgstates[$n]['parms'] = $parms; + return $n; + } + + /** + * Add an extgstate + * @param array $gs extgstate + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected function setExtGState($gs) { + $this->_out(sprintf('/GS%d gs', $gs)); + } + + /** + * Put extgstates for object transparency + * @param array $gs extgstate + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected function _putextgstates() { + $ne = count($this->extgstates); + for ($i = 1; $i <= $ne; ++$i) { + $this->_newobj(); + $this->extgstates[$i]['n'] = $this->n; + $out = '<< /Type /ExtGState'; + foreach ($this->extgstates[$i]['parms'] as $k => $v) { + if (is_float($v)) { + $v = sprintf('%.2F', $v); + } + $out .= ' /'.$k.' '.$v; + } + $out .= ' >> endobj'; + $this->_out($out); + } + } + + /** + * Set alpha for stroking (CA) and non-stroking (ca) operations. + * @param float $alpha real value from 0 (transparent) to 1 (opaque) + * @param string $bm blend mode, one of the following: Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity + * @access public + * @since 3.0.000 (2008-03-27) + */ + public function setAlpha($alpha, $bm='Normal') { + $gs = $this->addExtGState(array('ca' => $alpha, 'CA' => $alpha, 'BM' => '/'.$bm, 'AIS' => 'false')); + $this->setExtGState($gs); + } + + /** + * Set the default JPEG compression quality (1-100) + * @param int $quality JPEG quality, integer between 1 and 100 + * @access public + * @since 3.0.000 (2008-03-27) + */ + public function setJPEGQuality($quality) { + if (($quality < 1) OR ($quality > 100)) { + $quality = 75; + } + $this->jpeg_quality = intval($quality); + } + + /** + * Set the default number of columns in a row for HTML tables. + * @param int $cols number of columns + * @access public + * @since 3.0.014 (2008-06-04) + */ + public function setDefaultTableColumns($cols=4) { + $this->default_table_columns = intval($cols); + } + + /** + * Set the height of the cell (line height) respect the font height. + * @param int $h cell proportion respect font height (typical value = 1.25). + * @access public + * @since 3.0.014 (2008-06-04) + */ + public function setCellHeightRatio($h) { + $this->cell_height_ratio = $h; + } + + /** + * return the height of cell repect font height. + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getCellHeightRatio() { + return $this->cell_height_ratio; + } + + /** + * Set the PDF version (check PDF reference for valid values). + * Default value is 1.t + * @access public + * @since 3.1.000 (2008-06-09) + */ + public function setPDFVersion($version='1.7') { + $this->PDFVersion = $version; + } + + /** + * Set the viewer preferences dictionary controlling the way the document is to be presented on the screen or in print. + * (see Section 8.1 of PDF reference, "Viewer Preferences"). + *
    • HideToolbar boolean (Optional) A flag specifying whether to hide the viewer application's tool bars when the document is active. Default value: false.
    • HideMenubar boolean (Optional) A flag specifying whether to hide the viewer application's menu bar when the document is active. Default value: false.
    • HideWindowUI boolean (Optional) A flag specifying whether to hide user interface elements in the document's window (such as scroll bars and navigation controls), leaving only the document's contents displayed. Default value: false.
    • FitWindow boolean (Optional) A flag specifying whether to resize the document's window to fit the size of the first displayed page. Default value: false.
    • CenterWindow boolean (Optional) A flag specifying whether to position the document's window in the center of the screen. Default value: false.
    • DisplayDocTitle boolean (Optional; PDF 1.4) A flag specifying whether the window's title bar should display the document title taken from the Title entry of the document information dictionary (see Section 10.2.1, "Document Information Dictionary"). If false, the title bar should instead display the name of the PDF file containing the document. Default value: false.
    • NonFullScreenPageMode name (Optional) The document's page mode, specifying how to display the document on exiting full-screen mode:
      • UseNone Neither document outline nor thumbnail images visible
      • UseOutlines Document outline visible
      • UseThumbs Thumbnail images visible
      • UseOC Optional content group panel visible
      This entry is meaningful only if the value of the PageMode entry in the catalog dictionary (see Section 3.6.1, "Document Catalog") is FullScreen; it is ignored otherwise. Default value: UseNone.
    • ViewArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be displayed when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:
      • MediaBox
      • CropBox (default)
      • BleedBox
      • TrimBox
      • ArtBox
    • ViewClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:
      • MediaBox
      • CropBox (default)
      • BleedBox
      • TrimBox
      • ArtBox
    • PrintArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be rendered when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:
      • MediaBox
      • CropBox (default)
      • BleedBox
      • TrimBox
      • ArtBox
    • PrintClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:
      • MediaBox
      • CropBox (default)
      • BleedBox
      • TrimBox
      • ArtBox
    • PrintScaling name (Optional; PDF 1.6) The page scaling option to be selected when a print dialog is displayed for this document. Valid values are:
      • None, which indicates that the print dialog should reflect no page scaling
      • AppDefault (default), which indicates that applications should use the current print scaling
    • Duplex name (Optional; PDF 1.7) The paper handling option to use when printing the file from the print dialog. The following values are valid:
      • Simplex - Print single-sided
      • DuplexFlipShortEdge - Duplex and flip on the short edge of the sheet
      • DuplexFlipLongEdge - Duplex and flip on the long edge of the sheet
      Default value: none
    • PickTrayByPDFSize boolean (Optional; PDF 1.7) A flag specifying whether the PDF page size is used to select the input paper tray. This setting influences only the preset values used to populate the print dialog presented by a PDF viewer application. If PickTrayByPDFSize is true, the check box in the print dialog associated with input paper tray is checked. Note: This setting has no effect on Mac OS systems, which do not provide the ability to pick the input tray by size.
    • PrintPageRange array (Optional; PDF 1.7) The page numbers used to initialize the print dialog box when the file is printed. The first page of the PDF file is denoted by 1. Each pair consists of the first and last pages in the sub-range. An odd number of integers causes this entry to be ignored. Negative numbers cause the entire array to be ignored. Default value: as defined by PDF viewer application
    • NumCopies integer (Optional; PDF 1.7) The number of copies to be printed when the print dialog is opened for this file. Supported values are the integers 2 through 5. Values outside this range are ignored. Default value: as defined by PDF viewer application, but typically 1
    + * @param array $preferences array of options. + * @author Nicola Asuni + * @access public + * @since 3.1.000 (2008-06-09) + */ + public function setViewerPreferences($preferences) { + $this->viewer_preferences = $preferences; + } + + /** + * Paints color transition registration bars + * @param float $x abscissa of the top left corner of the rectangle. + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @param boolean $transition if true prints tcolor transitions to white. + * @param boolean $vertical if true prints bar vertically. + * @param string $colors colors to print, one letter per color separated by comma (for example 'A,W,R,G,B,C,M,Y,K'): A=black, W=white, R=red, G=green, B=blue, C=cyan, M=magenta, Y=yellow, K=black. + * @author Nicola Asuni + * @since 4.9.000 (2010-03-26) + * @access public + */ + public function colorRegistrationBar($x, $y, $w, $h, $transition=true, $vertical=false, $colors='A,R,G,B,C,M,Y,K') { + $bars = explode(',', $colors); + $numbars = count($bars); // number of bars to print + // set bar measures + if ($vertical) { + $coords = array(0, 0, 0, 1); + $wb = $w / $numbars; // bar width + $hb = $h; // bar height + $xd = $wb; // delta x + $yd = 0; // delta y + } else { + $coords = array(1, 0, 0, 0); + $wb = $w; // bar width + $hb = $h / $numbars; // bar height + $xd = 0; // delta x + $yd = $hb; // delta y + } + $xb = $x; + $yb = $y; + foreach ($bars as $col) { + switch ($col) { + // set transition colors + case 'A': { // BLACK + $col_a = array(255); + $col_b = array(0); + break; + } + case 'W': { // WHITE + $col_a = array(0); + $col_b = array(255); + break; + } + case 'R': { // R + $col_a = array(255,255,255); + $col_b = array(255,0,0); + break; + } + case 'G': { // G + $col_a = array(255,255,255); + $col_b = array(0,255,0); + break; + } + case 'B': { // B + $col_a = array(255,255,255); + $col_b = array(0,0,255); + break; + } + case 'C': { // C + $col_a = array(0,0,0,0); + $col_b = array(100,0,0,0); + break; + } + case 'M': { // M + $col_a = array(0,0,0,0); + $col_b = array(0,100,0,0); + break; + } + case 'Y': { // Y + $col_a = array(0,0,0,0); + $col_b = array(0,0,100,0); + break; + } + case 'K': { // K + $col_a = array(0,0,0,0); + $col_b = array(0,0,0,100); + break; + } + default: { // GRAY + $col_a = array(255); + $col_b = array(0); + break; + } + } + if ($transition) { + // color gradient + $this->LinearGradient($xb, $yb, $wb, $hb, $col_a, $col_b, $coords); + } else { + // color rectangle + $this->SetFillColorArray($col_b); + $this->Rect($xb, $yb, $wb, $hb, 'F', array()); + } + $xb += $xd; + $yb += $yd; + } + } + + /** + * Paints crop mark + * @param float $x abscissa of the crop mark center. + * @param float $y ordinate of the crop mark center. + * @param float $w width of the crop mark. + * @param float $h height of the crop mark. + * @param string $type type of crop mark, one sybol per type separated by comma: A = top left, B = top right, C = bottom left, D = bottom right. + * @param array $color crop mark color (default black). + * @author Nicola Asuni + * @since 4.9.000 (2010-03-26) + * @access public + */ + public function cropMark($x, $y, $w, $h, $type='A,B,C,D', $color=array(0,0,0)) { + $this->SetLineStyle(array('width' => (0.5 / $this->k), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $color)); + $crops = explode(',', $type); + $numcrops = count($crops); // number of crop marks to print + $dw = $w / 4; // horizontal space to leave before the intersection point + $dh = $h / 4; // vertical space to leave before the intersection point + foreach ($crops as $crop) { + switch ($crop) { + case 'A': { + $x1 = $x; + $y1 = $y - $h; + $x2 = $x; + $y2 = $y - $dh; + $x3 = $x - $w; + $y3 = $y; + $x4 = $x - $dw; + $y4 = $y; + break; + } + case 'B': { + $x1 = $x; + $y1 = $y - $h; + $x2 = $x; + $y2 = $y - $dh; + $x3 = $x + $dw; + $y3 = $y; + $x4 = $x + $w; + $y4 = $y; + break; + } + case 'C': { + $x1 = $x - $w; + $y1 = $y; + $x2 = $x - $dw; + $y2 = $y; + $x3 = $x; + $y3 = $y + $dh; + $x4 = $x; + $y4 = $y + $h; + break; + } + case 'D': { + $x1 = $x + $dw; + $y1 = $y; + $x2 = $x + $w; + $y2 = $y; + $x3 = $x; + $y3 = $y + $dh; + $x4 = $x; + $y4 = $y + $h; + break; + } + } + $this->Line($x1, $y1, $x2, $y2); + $this->Line($x3, $y3, $x4, $y4); + } + } + + /** + * Paints a registration mark + * @param float $x abscissa of the registration mark center. + * @param float $y ordinate of the registration mark center. + * @param float $r radius of the crop mark. + * @param boolean $double if true print two concentric crop marks. + * @param array $cola crop mark color (default black). + * @param array $colb second crop mark color. + * @author Nicola Asuni + * @since 4.9.000 (2010-03-26) + * @access public + */ + public function registrationMark($x, $y, $r, $double=false, $cola=array(0,0,0), $colb=array(255,255,255)) { + $line_style = array('width' => (0.5 / $this->k), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $cola); + $this->SetFillColorArray($cola); + $this->PieSector($x, $y, $r, 90, 180, 'F'); + $this->PieSector($x, $y, $r, 270, 360, 'F'); + $this->Circle($x, $y, $r, 0, 360, 'C', $line_style, array(), 8); + if ($double) { + $r2 = $r * 0.5; + $this->SetFillColorArray($colb); + $this->PieSector($x, $y, $r2, 90, 180, 'F'); + $this->PieSector($x, $y, $r2, 270, 360, 'F'); + $this->SetFillColorArray($cola); + $this->PieSector($x, $y, $r2, 0, 90, 'F'); + $this->PieSector($x, $y, $r2, 180, 270, 'F'); + $this->Circle($x, $y, $r2, 0, 360, 'C', $line_style, array(), 8); + } + } + + /** + * Paints a linear colour gradient. + * @param float $x abscissa of the top left corner of the rectangle. + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @param array $col1 first color (Grayscale, RGB or CMYK components). + * @param array $col2 second color (Grayscale, RGB or CMYK components). + * @param array $coords array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg). The default value is from left to right (x1=0, y1=0, x2=1, y2=0). + * @author Andreas W�rmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function LinearGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0,0,1,0)) { + $this->Clip($x, $y, $w, $h); + $this->Gradient(2, $coords, array(array('color' => $col1, 'offset' => 0, 'exponent' => 1), array('color' => $col2, 'offset' => 1, 'exponent' => 1)), array(), false); + } + + /** + * Paints a radial colour gradient. + * @param float $x abscissa of the top left corner of the rectangle. + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @param array $col1 first color (Grayscale, RGB or CMYK components). + * @param array $col2 second color (Grayscale, RGB or CMYK components). + * @param array $coords array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1, (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg). (fx, fy) should be inside the circle, otherwise some areas will not be defined. + * @author Andreas W�rmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function RadialGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0.5,0.5,0.5,0.5,1)) { + $this->Clip($x, $y, $w, $h); + $this->Gradient(3, $coords, array(array('color' => $col1, 'offset' => 0, 'exponent' => 1), array('color' => $col2, 'offset' => 1, 'exponent' => 1)), array(), false); + } + + /** + * Paints a coons patch mesh. + * @param float $x abscissa of the top left corner of the rectangle. + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @param array $col1 first color (lower left corner) (RGB components). + * @param array $col2 second color (lower right corner) (RGB components). + * @param array $col3 third color (upper right corner) (RGB components). + * @param array $col4 fourth color (upper left corner) (RGB components). + * @param array $coords
    • for one patch mesh: array(float x1, float y1, .... float x12, float y12): 12 pairs of coordinates (normally from 0 to 1) which specify the Bezier control points that define the patch. First pair is the lower left edge point, next is its right control point (control point 2). Then the other points are defined in the order: control point 1, edge point, control point 2 going counter-clockwise around the patch. Last (x12, y12) is the first edge point's left control point (control point 1).
    • for two or more patch meshes: array[number of patches]: arrays with the following keys for each patch: f: where to put that patch (0 = first patch, 1, 2, 3 = right, top and left of precedent patch - I didn't figure this out completely - just try and error ;-) points: 12 pairs of coordinates of the Bezier control points as above for the first patch, 8 pairs of coordinates for the following patches, ignoring the coordinates already defined by the precedent patch (I also didn't figure out the order of these - also: try and see what's happening) colors: must be 4 colors for the first patch, 2 colors for the following patches
    + * @param array $coords_min minimum value used by the coordinates. If a coordinate's value is smaller than this it will be cut to coords_min. default: 0 + * @param array $coords_max maximum value used by the coordinates. If a coordinate's value is greater than this it will be cut to coords_max. default: 1 + * @param boolean $antialias A flag indicating whether to filter the shading function to prevent aliasing artifacts. + * @author Andreas W�rmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function CoonsPatchMesh($x, $y, $w, $h, $col1=array(), $col2=array(), $col3=array(), $col4=array(), $coords=array(0.00,0.0,0.33,0.00,0.67,0.00,1.00,0.00,1.00,0.33,1.00,0.67,1.00,1.00,0.67,1.00,0.33,1.00,0.00,1.00,0.00,0.67,0.00,0.33), $coords_min=0, $coords_max=1, $antialias=false) { + $this->Clip($x, $y, $w, $h); + $n = count($this->gradients) + 1; + $this->gradients[$n] = array(); + $this->gradients[$n]['type'] = 6; //coons patch mesh + $this->gradients[$n]['coords'] = array(); + $this->gradients[$n]['antialias'] = $antialias; + $this->gradients[$n]['colors'] = array(); + $this->gradients[$n]['transparency'] = false; + //check the coords array if it is the simple array or the multi patch array + if (!isset($coords[0]['f'])) { + //simple array -> convert to multi patch array + if (!isset($col1[1])) { + $col1[1] = $col1[2] = $col1[0]; + } + if (!isset($col2[1])) { + $col2[1] = $col2[2] = $col2[0]; + } + if (!isset($col3[1])) { + $col3[1] = $col3[2] = $col3[0]; + } + if (!isset($col4[1])) { + $col4[1] = $col4[2] = $col4[0]; + } + $patch_array[0]['f'] = 0; + $patch_array[0]['points'] = $coords; + $patch_array[0]['colors'][0]['r'] = $col1[0]; + $patch_array[0]['colors'][0]['g'] = $col1[1]; + $patch_array[0]['colors'][0]['b'] = $col1[2]; + $patch_array[0]['colors'][1]['r'] = $col2[0]; + $patch_array[0]['colors'][1]['g'] = $col2[1]; + $patch_array[0]['colors'][1]['b'] = $col2[2]; + $patch_array[0]['colors'][2]['r'] = $col3[0]; + $patch_array[0]['colors'][2]['g'] = $col3[1]; + $patch_array[0]['colors'][2]['b'] = $col3[2]; + $patch_array[0]['colors'][3]['r'] = $col4[0]; + $patch_array[0]['colors'][3]['g'] = $col4[1]; + $patch_array[0]['colors'][3]['b'] = $col4[2]; + } else { + //multi patch array + $patch_array = $coords; + } + $bpcd = 65535; //16 bits per coordinate + //build the data stream + $this->gradients[$n]['stream'] = ''; + $count_patch = count($patch_array); + for ($i=0; $i < $count_patch; ++$i) { + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['f']); //start with the edge flag as 8 bit + $count_points = count($patch_array[$i]['points']); + for ($j=0; $j < $count_points; ++$j) { + //each point as 16 bit + $patch_array[$i]['points'][$j] = (($patch_array[$i]['points'][$j] - $coords_min) / ($coords_max - $coords_min)) * $bpcd; + if ($patch_array[$i]['points'][$j] < 0) { + $patch_array[$i]['points'][$j] = 0; + } + if ($patch_array[$i]['points'][$j] > $bpcd) { + $patch_array[$i]['points'][$j] = $bpcd; + } + $this->gradients[$n]['stream'] .= chr(floor($patch_array[$i]['points'][$j] / 256)); + $this->gradients[$n]['stream'] .= chr(floor($patch_array[$i]['points'][$j] % 256)); + } + $count_cols = count($patch_array[$i]['colors']); + for ($j=0; $j < $count_cols; ++$j) { + //each color component as 8 bit + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['r']); + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['g']); + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['b']); + } + } + //paint the gradient + $this->_out('/Sh'.$n.' sh'); + //restore previous Graphic State + $this->_out('Q'); + } + + /** + * Set a rectangular clipping area. + * @param float $x abscissa of the top left corner of the rectangle (or top right corner for RTL mode). + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @author Andreas W�rmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access protected + */ + protected function Clip($x, $y, $w, $h) { + if ($this->rtl) { + $x = $this->w - $x - $w; + } + //save current Graphic State + $s = 'q'; + //set clipping area + $s .= sprintf(' %.2F %.2F %.2F %.2F re W n', $x*$this->k, ($this->h-$y)*$this->k, $w*$this->k, -$h*$this->k); + //set up transformation matrix for gradient + $s .= sprintf(' %.3F 0 0 %.3F %.3F %.3F cm', $w*$this->k, $h*$this->k, $x*$this->k, ($this->h-($y+$h))*$this->k); + $this->_out($s); + } + + /** + * Output gradient. + * @param int $type type of gradient (1 Function-based shading; 2 Axial shading; 3 Radial shading; 4 Free-form Gouraud-shaded triangle mesh; 5 Lattice-form Gouraud-shaded triangle mesh; 6 Coons patch mesh; 7 Tensor-product patch mesh). (Not all types are currently supported) + * @param array $coords array of coordinates. + * @param array $stops array gradient color components: color = array of GRAY, RGB or CMYK color components; offset = (0 to 1) represents a location along the gradient vector; exponent = exponent of the exponential interpolation function (default = 1). + * @param array $background An array of colour components appropriate to the colour space, specifying a single background colour value. + * @param boolean $antialias A flag indicating whether to filter the shading function to prevent aliasing artifacts. + * @author Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function Gradient($type, $coords, $stops, $background=array(), $antialias=false) { + $n = count($this->gradients) + 1; + $this->gradients[$n] = array(); + $this->gradients[$n]['type'] = $type; + $this->gradients[$n]['coords'] = $coords; + $this->gradients[$n]['antialias'] = $antialias; + $this->gradients[$n]['colors'] = array(); + $this->gradients[$n]['transparency'] = false; + // color space + $numcolspace = count($stops[0]['color']); + $bcolor = array_values($background); + switch($numcolspace) { + case 4: { // CMYK + $this->gradients[$n]['colspace'] = 'DeviceCMYK'; + if (!empty($background)) { + $this->gradients[$n]['background'] = sprintf('%.3F %.3F %.3F %.3F', $bcolor[0]/100, $bcolor[1]/100, $bcolor[2]/100, $bcolor[3]/100); + } + break; + } + case 3: { // RGB + $this->gradients[$n]['colspace'] = 'DeviceRGB'; + if (!empty($background)) { + $this->gradients[$n]['background'] = sprintf('%.3F %.3F %.3F', $bcolor[0]/255, $bcolor[1]/255, $bcolor[2]/255); + } + break; + } + case 1: { // Gray scale + $this->gradients[$n]['colspace'] = 'DeviceGray'; + if (!empty($background)) { + $this->gradients[$n]['background'] = sprintf('%.3F', $bcolor[0]/255); + } + break; + } + } + $num_stops = count($stops); + $last_stop_id = $num_stops - 1; + foreach ($stops as $key => $stop) { + $this->gradients[$n]['colors'][$key] = array(); + // offset represents a location along the gradient vector + if (isset($stop['offset'])) { + $this->gradients[$n]['colors'][$key]['offset'] = $stop['offset']; + } else { + if ($key == 0) { + $this->gradients[$n]['colors'][$key]['offset'] = 0; + } elseif ($key == $last_stop_id) { + $this->gradients[$n]['colors'][$key]['offset'] = 1; + } else { + $offsetstep = (1 - $this->gradients[$n]['colors'][($key - 1)]['offset']) / ($num_stops - $key); + $this->gradients[$n]['colors'][$key]['offset'] = $this->gradients[$n]['colors'][($key - 1)]['offset'] + $offsetstep; + } + } + if (isset($stop['opacity'])) { + $this->gradients[$n]['colors'][$key]['opacity'] = $stop['opacity']; + if ($stop['opacity'] < 1) { + $this->gradients[$n]['transparency'] = true; + } + } else { + $this->gradients[$n]['colors'][$key]['opacity'] = 1; + } + // exponent for the exponential interpolation function + if (isset($stop['exponent'])) { + $this->gradients[$n]['colors'][$key]['exponent'] = $stop['exponent']; + } else { + $this->gradients[$n]['colors'][$key]['exponent'] = 1; + } + // set colors + $color = array_values($stop['color']); + switch($numcolspace) { + case 4: { // CMYK + $this->gradients[$n]['colors'][$key]['color'] = sprintf('%.3F %.3F %.3F %.3F', $color[0]/100, $color[1]/100, $color[2]/100, $color[3]/100); + break; + } + case 3: { // RGB + $this->gradients[$n]['colors'][$key]['color'] = sprintf('%.3F %.3F %.3F', $color[0]/255, $color[1]/255, $color[2]/255); + break; + } + case 1: { // Gray scale + $this->gradients[$n]['colors'][$key]['color'] = sprintf('%.3F', $color[0]/255); + break; + } + } + } + if ($this->gradients[$n]['transparency']) { + // paint luminosity gradient + $this->_out('/TGS'.$n.' gs'); + } + //paint the gradient + $this->_out('/Sh'.$n.' sh'); + //restore previous Graphic State + $this->_out('Q'); + } + + /** + * Output gradient shaders. + * @author Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access protected + */ + function _putshaders() { + $idt = count($this->gradients); //index for transparency gradients + foreach ($this->gradients as $id => $grad) { + if (($grad['type'] == 2) OR ($grad['type'] == 3)) { + $this->_newobj(); + $fc = $this->n; + $out = '<<'; + $out .= ' /FunctionType 3'; + $out .= ' /Domain [0 1]'; + $functions = ''; + $bounds = ''; + $encode = ''; + $i = 1; + $num_cols = count($grad['colors']); + $lastcols = $num_cols - 1; + for ($i = 1; $i < $num_cols; ++$i) { + $functions .= ($fc + $i).' 0 R '; + if ($i < $lastcols) { + $bounds .= sprintf('%.3F ', $grad['colors'][$i]['offset']); + } + $encode .= '0 1 '; + } + $out .= ' /Functions ['.trim($functions).']'; + $out .= ' /Bounds ['.trim($bounds).']'; + $out .= ' /Encode ['.trim($encode).']'; + $out .= ' >>'; + $out .= ' endobj'; + $this->_out($out); + for ($i = 1; $i < $num_cols; ++$i) { + $this->_newobj(); + $out = '<<'; + $out .= ' /FunctionType 2'; + $out .= ' /Domain [0 1]'; + $out .= ' /C0 ['.$grad['colors'][($i - 1)]['color'].']'; + $out .= ' /C1 ['.$grad['colors'][$i]['color'].']'; + $out .= ' /N '.$grad['colors'][$i]['exponent']; + $out .= ' >>'; + $out .= ' endobj'; + $this->_out($out); + } + // set transparency fuctions + if ($grad['transparency']) { + $this->_newobj(); + $ft = $this->n; + $out = '<<'; + $out .= ' /FunctionType 3'; + $out .= ' /Domain [0 1]'; + $functions = ''; + $i = 1; + $num_cols = count($grad['colors']); + for ($i = 1; $i < $num_cols; ++$i) { + $functions .= ($ft + $i).' 0 R '; + } + $out .= ' /Functions ['.trim($functions).']'; + $out .= ' /Bounds ['.trim($bounds).']'; + $out .= ' /Encode ['.trim($encode).']'; + $out .= ' >>'; + $out .= ' endobj'; + $this->_out($out); + for ($i = 1; $i < $num_cols; ++$i) { + $this->_newobj(); + $out = '<<'; + $out .= ' /FunctionType 2'; + $out .= ' /Domain [0 1]'; + $out .= ' /C0 ['.$grad['colors'][($i - 1)]['opacity'].']'; + $out .= ' /C1 ['.$grad['colors'][$i]['opacity'].']'; + $out .= ' /N '.$grad['colors'][$i]['exponent']; + $out .= ' >>'; + $out .= ' endobj'; + $this->_out($out); + } + } + } + // set shading object + $this->_newobj(); + $out = '<< /ShadingType '.$grad['type']; + if (isset($grad['colspace'])) { + $out .= ' /ColorSpace /'.$grad['colspace']; + } else { + $out .= ' /ColorSpace /DeviceRGB'; + } + if (isset($grad['background']) AND !empty($grad['background'])) { + $out .= ' /Background ['.$grad['background'].']'; + } + if (isset($grad['antialias']) AND ($grad['antialias'] === true)) { + $out .= ' /AntiAlias true'; + } + if ($grad['type'] == 2) { + $out .= ' '.sprintf('/Coords [%.3F %.3F %.3F %.3F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3]); + $out .= ' /Domain [0 1]'; + $out .= ' /Function '.$fc.' 0 R'; + $out .= ' /Extend [true true]'; + $out .= ' >>'; + } elseif ($grad['type'] == 3) { + //x0, y0, r0, x1, y1, r1 + //at this this time radius of inner circle is 0 + $out .= ' '.sprintf('/Coords [%.3F %.3F 0 %.3F %.3F %.3F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3], $grad['coords'][4]); + $out .= ' /Domain [0 1]'; + $out .= ' /Function '.$fc.' 0 R'; + $out .= ' /Extend [true true]'; + $out .= ' >>'; + } elseif ($grad['type'] == 6) { + $out .= ' /BitsPerCoordinate 16'; + $out .= ' /BitsPerComponent 8'; + $out .= ' /Decode[0 1 0 1 0 1 0 1 0 1]'; + $out .= ' /BitsPerFlag 8'; + $out .= ' /Length '.strlen($grad['stream']); + $out .= ' >>'; + $out .= ' '.$this->_getstream($grad['stream']); + } + $out .= ' endobj'; + $this->_out($out); + if ($grad['transparency']) { + $shading_transparency = preg_replace('/\/ColorSpace \/[^\s]+/si', '/ColorSpace /DeviceGray', $out); + $shading_transparency = preg_replace('/\/Function [0-9]+ /si', '/Function '.$ft.' ', $shading_transparency); + } + $this->gradients[$id]['id'] = $this->n; + // set pattern object + $this->_newobj(); + $out = '<< /Type /Pattern /PatternType 2'; + $out .= ' /Shading '.$this->gradients[$id]['id'].' 0 R'; + $out .= ' >> endobj'; + $this->_out($out); + $this->gradients[$id]['pattern'] = $this->n; + // set shading and pattern for transparency mask + if ($grad['transparency']) { + // luminosity pattern + $idgs = $id + $idt; + $this->_newobj(); + $this->_out($shading_transparency); + $this->gradients[$idgs]['id'] = $this->n; + $this->_newobj(); + $out = '<< /Type /Pattern /PatternType 2'; + $out .= ' /Shading '.$this->gradients[$idgs]['id'].' 0 R'; + $out .= ' >> endobj'; + $this->_out($out); + $this->gradients[$idgs]['pattern'] = $this->n; + // luminosity XObject + $this->_newobj(); + $filter = ($this->compress)?' /Filter /FlateDecode':''; + $out = '<< /Type /XObject /Subtype /Form /FormType 1'.$filter; + $stream = 'q /a0 gs /Pattern cs /p'.$idgs.' scn 0 0 '.$this->wPt.' '.$this->hPt.' re f Q'; + $out .= ' /Length '.strlen($stream); + $out .= ' /BBox [0 0 '.$this->wPt.' '.$this->hPt.']'; + $out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceGray >>'; + $out .= ' /Resources <<'; + $out .= ' /ExtGState << /a0 << /ca 1 /CA 1 >> >>'; + $out .= ' /Pattern << /p'.$idgs.' '.$this->gradients[$idgs]['pattern'].' 0 R >>'; + $out .= ' >>'; + $out .= ' >> '; + $out .= $this->_getstream($stream); + $out .= ' endobj'; + $this->_out($out); + // SMask + $this->_newobj(); + $out = '<< /Type /Mask /S /Luminosity /G '.($this->n - 1).' 0 R >> endobj'; + $this->_out($out); + // ExtGState + $this->_newobj(); + $out = '<< /Type /ExtGState /SMask '.($this->n - 1).' 0 R /AIS false >> endobj'; + $this->_out($out); + $this->extgstates[] = array('n' => $this->n, 'name' => 'TGS'.$id); + } + } + } + + /** + * Draw the sector of a circle. + * It can be used for instance to render pie charts. + * @param float $xc abscissa of the center. + * @param float $yc ordinate of the center. + * @param float $r radius. + * @param float $a start angle (in degrees). + * @param float $b end angle (in degrees). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param float $cw: indicates whether to go clockwise (default: true). + * @param float $o: origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). Default: 90. + * @author Maxime Delorme, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function PieSector($xc, $yc, $r, $a, $b, $style='FD', $cw=true, $o=90) { + $this->PieSectorXY($xc, $yc, $r, $r, $a, $b, $style, $cw, $o); + } + + /** + * Draw the sector of an ellipse. + * It can be used for instance to render pie charts. + * @param float $xc abscissa of the center. + * @param float $yc ordinate of the center. + * @param float $rx the x-axis radius. + * @param float $ry the y-axis radius. + * @param float $a start angle (in degrees). + * @param float $b end angle (in degrees). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param float $cw: indicates whether to go clockwise. + * @param float $o: origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). + * @param integer $nc Number of curves used to draw a 90 degrees portion of arc. + * @author Maxime Delorme, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function PieSectorXY($xc, $yc, $rx, $ry, $a, $b, $style='FD', $cw=false, $o=0, $nc=2) { + if ($this->rtl) { + $xc = $this->w - $xc; + } + $op = $this->getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + if ($cw) { + $d = $b; + $b = 360 - $a + $o; + $a = 360 - $d + $o; + } else { + $b += $o; + $a += $o; + } + $this->_outellipticalarc($xc, $yc, $rx, $ry, 0, $a, $b, true, $nc); + $this->_out($op); + } + + /** + * Embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files. + * NOTE: EPS is not yet fully implemented, use the setRasterizeVectorImages() method to enable/disable rasterization of SVG images using ImageMagick library. + * Only vector drawing is supported, not text or bitmap. + * Although the script was successfully tested with various AI format versions, best results are probably achieved with files that were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2). + * @param string $file Name of the file containing the image. + * @param float $x Abscissa of the upper-left corner. + * @param float $y Ordinate of the upper-left corner. + * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param mixed $link URL or identifier returned by AddLink(). + * @param boolean useBoundingBox specifies whether to position the bounding box (true) or the complete canvas (false) at location (x,y). Default value is true. + * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
    • T: top-right for LTR or top-left for RTL
    • M: middle-right for LTR or middle-left for RTL
    • B: bottom-right for LTR or bottom-left for RTL
    • N: next line
    + * @param string $palign Allows to center or align the image on the current line. Possible values are:
    • L : left align
    • C : center
    • R : right align
    • '' : empty string : left for LTR or right for RTL
    + * @param mixed $border Indicates if borders must be drawn around the image. The value can be either a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    + * @param boolean $fitonpage if true the image is resized to not exceed page dimensions. + * @author Valentin Schmidt, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function ImageEps($file, $x='', $y='', $w=0, $h=0, $link='', $useBoundingBox=true, $align='', $palign='', $border=0, $fitonpage=false) { + if ($this->rasterize_vector_images) { + // convert SVG to raster image using GD or ImageMagick libraries + return $this->Image($file, $x, $y, $w, $h, 'EPS', $link, $align, true, 300, $palign, false, false, $border, false, false, $fitonpage); + } + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + $k = $this->k; + $data = file_get_contents($file); + if ($data === false) { + $this->Error('EPS file not found: '.$file); + } + $regs = array(); + // EPS/AI compatibility check (only checks files created by Adobe Illustrator!) + preg_match("/%%Creator:([^\r\n]+)/", $data, $regs); # find Creator + if (count($regs) > 1) { + $version_str = trim($regs[1]); # e.g. "Adobe Illustrator(R) 8.0" + if (strpos($version_str, 'Adobe Illustrator') !== false) { + $versexp = explode(' ', $version_str); + $version = (float)array_pop($versexp); + if ($version >= 9) { + $this->Error('This version of Adobe Illustrator file is not supported: '.$file); + } + } + } + // strip binary bytes in front of PS-header + $start = strpos($data, '%!PS-Adobe'); + if ($start > 0) { + $data = substr($data, $start); + } + // find BoundingBox params + preg_match("/%%BoundingBox:([^\r\n]+)/", $data, $regs); + if (count($regs) > 1) { + list($x1, $y1, $x2, $y2) = explode(' ', trim($regs[1])); + } else { + $this->Error('No BoundingBox found in EPS file: '.$file); + } + $start = strpos($data, '%%EndSetup'); + if ($start === false) { + $start = strpos($data, '%%EndProlog'); + } + if ($start === false) { + $start = strpos($data, '%%BoundingBox'); + } + $data = substr($data, $start); + $end = strpos($data, '%%PageTrailer'); + if ($end===false) { + $end = strpos($data, 'showpage'); + } + if ($end) { + $data = substr($data, 0, $end); + } + // calculate image width and height on document + if (($w <= 0) AND ($h <= 0)) { + $w = ($x2 - $x1) / $k; + $h = ($y2 - $y1) / $k; + } elseif ($w <= 0) { + $w = ($x2-$x1) / $k * ($h / (($y2 - $y1) / $k)); + } elseif ($h <= 0) { + $h = ($y2 - $y1) / $k * ($w / (($x2 - $x1) / $k)); + } + // Check whether we need a new page first as this does not fit + $prev_x = $this->x; + if ($this->checkPageBreak($h, $y)) { + $y = $this->y; + if ($this->rtl) { + $x += ($prev_x - $this->x); + } else { + $x += ($this->x - $prev_x); + } + } + // resize image to be contained on a single page + if ($fitonpage) { + $ratio_wh = $w / $h; + if (($y + $h) > $this->PageBreakTrigger) { + $h = $this->PageBreakTrigger - $y; + $w = $h * $ratio_wh; + } + if (($x + $w) > ($this->w - $this->rMargin)) { + $w = $this->w - $this->rMargin - $x; + $h = $w / $ratio_wh; + } + } + // set scaling factors + $scale_x = $w / (($x2 - $x1) / $k); + $scale_y = $h / (($y2 - $y1) / $k); + // set alignment + $this->img_rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $this->w - $x - $w; + } + $this->img_rb_x = $ximg; + } else { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x; + } + $this->img_rb_x = $ximg + $w; + } + if ($useBoundingBox) { + $dx = $ximg * $k - $x1; + $dy = $y * $k - $y1; + } else { + $dx = $ximg * $k; + $dy = $y * $k; + } + // save the current graphic state + $this->_out('q'.$this->epsmarker); + // translate + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', 1, 0, 0, 1, $dx, $dy + ($this->hPt - (2 * $y * $k) - ($y2 - $y1)))); + // scale + if (isset($scale_x)) { + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $scale_x, 0, 0, $scale_y, $x1 * (1 - $scale_x), $y2 * (1 - $scale_y))); + } + // handle pc/unix/mac line endings + preg_match('/[\r\n]+/s', $data, $regs); + $lines = explode($regs[0], $data); + $u=0; + $cnt = count($lines); + for ($i=0; $i < $cnt; ++$i) { + $line = $lines[$i]; + if (($line == '') OR ($line[0] == '%')) { + continue; + } + $len = strlen($line); + $chunks = explode(' ', $line); + $cmd = array_pop($chunks); + // RGB + if (($cmd == 'Xa') OR ($cmd == 'XA')) { + $b = array_pop($chunks); + $g = array_pop($chunks); + $r = array_pop($chunks); + $this->_out(''.$r.' '.$g.' '.$b.' '.($cmd=='Xa'?'rg':'RG')); //substr($line, 0, -2).'rg' -> in EPS (AI8): c m y k r g b rg! + continue; + } + switch ($cmd) { + case 'm': + case 'l': + case 'v': + case 'y': + case 'c': + case 'k': + case 'K': + case 'g': + case 'G': + case 's': + case 'S': + case 'J': + case 'j': + case 'w': + case 'M': + case 'd': + case 'n': { + $this->_out($line); + break; + } + case 'x': {// custom fill color + list($c,$m,$y,$k) = $chunks; + $this->_out(''.$c.' '.$m.' '.$y.' '.$k.' k'); + break; + } + case 'X': { // custom stroke color + list($c,$m,$y,$k) = $chunks; + $this->_out(''.$c.' '.$m.' '.$y.' '.$k.' K'); + break; + } + case 'Y': + case 'N': + case 'V': + case 'L': + case 'C': { + $line[$len-1] = strtolower($cmd); + $this->_out($line); + break; + } + case 'b': + case 'B': { + $this->_out($cmd . '*'); + break; + } + case 'f': + case 'F': { + if ($u > 0) { + $isU = false; + $max = min($i+5, $cnt); + for ($j=$i+1; $j < $max; ++$j) { + $isU = ($isU OR (($lines[$j] == 'U') OR ($lines[$j] == '*U'))); + } + if ($isU) { + $this->_out('f*'); + } + } else { + $this->_out('f*'); + } + break; + } + case '*u': { + ++$u; + break; + } + case '*U': { + --$u; + break; + } + } + } + // restore previous graphic state + $this->_out($this->epsmarker.'Q'); + if (!empty($border)) { + $bx = $x; + $by = $y; + $this->x = $ximg; + if ($this->rtl) { + $this->x += $w; + } + $this->y = $y; + $this->Cell($w, $h, '', $border, 0, '', 0, '', 0); + $this->x = $bx; + $this->y = $by; + } + if ($link) { + $this->Link($ximg, $y, $w, $h, $link, 0); + } + // set pointer to align the successive text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + $this->endlinex = $this->img_rb_x; + } + + /** + * Set document barcode. + * @param string $bc barcode + * @access public + */ + public function setBarcode($bc='') { + $this->barcode = $bc; + } + + /** + * Get current barcode. + * @return string + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getBarcode() { + return $this->barcode; + } + + /** + * Print a Linear Barcode. + * @param string $code code to print + * @param string $type type of barcode (see barcodes.php for supported formats). + * @param int $x x position in user units + * @param int $y y position in user units + * @param int $w width in user units + * @param int $h height in user units + * @param float $xres width of the smallest bar in user units + * @param array $style array of options:
    • string $style['position'] barcode position inside the specified width: L = left (default for LTR); C = center; R = right (default for RTL); S = stretch
    • boolean $style['border'] if true prints a border around the barcode
    • int $style['padding'] padding to leave around the barcode in user units (set to 'auto' for automatic padding)
    • array $style['fgcolor'] color array for bars and text
    • mixed $style['bgcolor'] color array for background or false for transparent
    • boolean $style["text"] boolean if true prints text below the barcode
    • string $style['font'] font name for text
    • int $style['fontsize'] font size for text
    • int $style['stretchtext']: 0 = disabled; 1 = horizontal scaling only if necessary; 2 = forced horizontal scaling; 3 = character spacing only if necessary; 4 = forced character spacing
    + * @param string $align Indicates the alignment of the pointer next to barcode insertion relative to barcode height. The value can be:
    • T: top-right for LTR or top-left for RTL
    • M: middle-right for LTR or middle-left for RTL
    • B: bottom-right for LTR or bottom-left for RTL
    • N: next line
    + * @author Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function write1DBarcode($code, $type, $x='', $y='', $w='', $h='', $xres=0.4, $style='', $align='') { + if ($this->empty_string($code)) { + return; + } + require_once(dirname(__FILE__).'/barcodes.php'); + // save current graphic settings + $gvars = $this->getGraphicVars(); + // create new barcode object + $barcodeobj = new TCPDFBarcode($code, $type); + $arrcode = $barcodeobj->getBarcodeArray(); + if ($arrcode === false) { + $this->Error('Error in 1D barcode string'); + } + // set default values + if (!isset($style['position'])) { + if ($this->rtl) { + $style['position'] = 'R'; + } else { + $style['position'] = 'L'; + } + } + if (!isset($style['fgcolor'])) { + $style['fgcolor'] = array(0,0,0); // default black + } + if (!isset($style['bgcolor'])) { + $style['bgcolor'] = false; // default transparent + } + if (!isset($style['border'])) { + $style['border'] = false; + } + $fontsize = 0; + if (!isset($style['text'])) { + $style['text'] = false; + } + if ($style['text'] AND isset($style['font'])) { + if (isset($style['fontsize'])) { + $fontsize = $style['fontsize']; + } + $this->SetFont($style['font'], '', $fontsize); + } + if (!isset($style['stretchtext'])) { + $style['stretchtext'] = 4; + } + // set foreground color + $this->SetDrawColorArray($style['fgcolor']); + $this->SetTextColorArray($style['fgcolor']); + if ($this->empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + } + if ($this->empty_string($x)) { + $x = $this->GetX(); + } + if ($this->rtl) { + $x = $this->w - $x; + } + if ($this->empty_string($y)) { + $y = $this->GetY(); + } + if ($this->empty_string($xres)) { + $xres = 0.4; + } + if ($this->empty_string($h) OR ($h <= 0)) { + $h = $w / 3; + } + // padding + if (!isset($style['padding'])) { + $style['padding'] = 0; + } elseif ($style['padding'] === 'auto') { + $style['padding'] = $h / 4; + } + $fbw = ($arrcode['maxw'] * $xres) + (2 * $style['padding']); + $extraspace = ($this->cell_height_ratio * $fontsize / $this->k) + (2 * $style['padding']); + $prev_x = $this->x; + // maximum bar height + $barh = $h; + $h += $extraspace; + if ($this->checkPageBreak($h, $y)) { + $y = $this->GetY() + $this->cMargin; + if ($this->rtl) { + $x += ($prev_x - $this->x); + } else { + $x += ($this->x - $prev_x); + } + } + switch ($style['position']) { + case 'L': { // left + if ($this->rtl) { + $xpos = $x - $w; + } else { + $xpos = $x; + } + break; + } + case 'C': { // center + $xdiff = (($w - $fbw) / 2); + if ($this->rtl) { + $xpos = $x - $w + $xdiff; + } else { + $xpos = $x + $xdiff; + } + break; + } + case 'R': { // right + if ($this->rtl) { + $xpos = $x - $fbw; + } else { + $xpos = $x + $w - $fbw; + } + break; + } + case 'S': { // stretch + $fbw = $w; + $xres = ($w - (2 * $style['padding'])) / $arrcode['maxw']; + if ($this->rtl) { + $xpos = $x - $w; + } else { + $xpos = $x; + } + break; + } + } + $xpos_rect = $xpos; + $xpos = $xpos_rect + $style['padding']; + $xpos_text = $xpos; + // barcode is always printed in LTR direction + $tempRTL = $this->rtl; + $this->rtl = false; + // print background color + if ($style['bgcolor']) { + $this->Rect($xpos_rect, $y, $fbw, $h, $style['border'] ? 'DF' : 'F', '', $style['bgcolor']); + } elseif ($style['border']) { + $this->Rect($xpos_rect, $y, $fbw, $h, 'D'); + } + // print bars + if ($arrcode !== false) { + foreach ($arrcode['bcode'] as $k => $v) { + $bw = ($v['w'] * $xres); + if ($v['t']) { + // draw a vertical bar + $ypos = $y + $style['padding'] + ($v['p'] * $barh / $arrcode['maxh']); + $this->Rect($xpos, $ypos, $bw, ($v['h'] * $barh / $arrcode['maxh']), 'F', array(), $style['fgcolor']); + } + $xpos += $bw; + } + } + // print text + if ($style['text']) { + // print text + $this->x = $xpos_text; + $this->y = $y + $style['padding'] + $barh; + $this->Cell(($arrcode['maxw'] * $xres), ($this->cell_height_ratio * $fontsize / $this->k), $code, 0, 0, 'C', 0, '', $style['stretchtext']); + } + // restore original direction + $this->rtl = $tempRTL; + // restore previous settings + $this->setGraphicVars($gvars); + // set bottomcoordinates + $this->img_rb_y = $y + $h; + if ($this->rtl) { + // set left side coordinate + $this->img_rb_x = ($this->w - $x - $w); + } else { + // set right side coordinate + $this->img_rb_x = $x + $w; + } + // set pointer to align the successive text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + } + + /** + * This function is DEPRECATED, please use the new write1DBarcode() function. + * @param int $x x position in user units + * @param int $y y position in user units + * @param int $w width in user units + * @param int $h height position in user units + * @param string $type type of barcode (I25, C128A, C128B, C128C, C39) + * @param string $style barcode style + * @param string $font font for text + * @param int $xres x resolution + * @param string $code code to print + * @deprecated deprecated since version 3.1.000 (2008-06-10) + * @access public + * @see write1DBarcode() + */ + public function writeBarcode($x, $y, $w, $h, $type, $style, $font, $xres, $code) { + // convert old settings for the new write1DBarcode() function. + $xres = 1 / $xres; + $newstyle = array( + 'position' => 'L', + 'border' => false, + 'padding' => 0, + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, + 'text' => true, + 'font' => $font, + 'fontsize' => 8, + 'stretchtext' => 4 + ); + if ($style & 1) { + $newstyle['border'] = true; + } + if ($style & 2) { + $newstyle['bgcolor'] = false; + } + if ($style & 4) { + $newstyle['position'] = 'C'; + } elseif ($style & 8) { + $newstyle['position'] = 'L'; + } elseif ($style & 16) { + $newstyle['position'] = 'R'; + } + if ($style & 128) { + $newstyle['text'] = true; + } + if ($style & 256) { + $newstyle['stretchtext'] = 4; + } + $this->write1DBarcode($code, $type, $x, $y, $w, $h, $xres, $newstyle, ''); + } + + /** + * Print 2D Barcode. + * @param string $code code to print + * @param string $type type of barcode (see 2dbarcodes.php for supported formats). + * @param int $x x position in user units + * @param int $y y position in user units + * @param int $w width in user units + * @param int $h height in user units + * @param array $style array of options:
    • boolean $style['border'] if true prints a border around the barcode
    • int $style['padding'] padding to leave around the barcode in user units (set to 'auto' for automatic padding)
    • array $style['fgcolor'] color array for bars and text
    • mixed $style['bgcolor'] color array for background or false for transparent
    + * @param string $align Indicates the alignment of the pointer next to barcode insertion relative to barcode height. The value can be:
    • T: top-right for LTR or top-left for RTL
    • M: middle-right for LTR or middle-left for RTL
    • B: bottom-right for LTR or bottom-left for RTL
    • N: next line
    + * @author Nicola Asuni + * @since 4.5.037 (2009-04-07) + * @access public + */ + public function write2DBarcode($code, $type, $x='', $y='', $w='', $h='', $style='', $align='') { + if ($this->empty_string($code)) { + return; + } + require_once(dirname(__FILE__).'/2dbarcodes.php'); + // save current graphic settings + $gvars = $this->getGraphicVars(); + // create new barcode object + $barcodeobj = new TCPDF2DBarcode($code, $type); + $arrcode = $barcodeobj->getBarcodeArray(); + if ($arrcode === false) { + $this->Error('Error in 2D barcode string'); + } + // set default values + if (!isset($style['fgcolor'])) { + $style['fgcolor'] = array(0,0,0); // default black + } + if (!isset($style['bgcolor'])) { + $style['bgcolor'] = false; // default transparent + } + if (!isset($style['border'])) { + $style['border'] = false; + } + // set foreground color + $this->SetDrawColorArray($style['fgcolor']); + if ($this->empty_string($x)) { + $x = $this->GetX(); + } + if ($this->rtl) { + $x = $this->w - $x; + } + if ($this->empty_string($y)) { + $y = $this->GetY(); + } + if ($this->empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $x; + } + } + if ($this->empty_string($h) OR ($h <= 0)) { + // 2d barcodes are square by default + $h = $w; + } + $prev_x = $this->x; + if ($this->checkPageBreak($h, $y)) { + $y = $this->GetY() + $this->cMargin; + if ($this->rtl) { + $x += ($prev_x - $this->x); + } else { + $x += ($this->x - $prev_x); + } + } + // padding + if (!isset($style['padding'])) { + $style['padding'] = 0; + } elseif ($style['padding'] === 'auto') { + $style['padding'] = 4 * $w / (8 + $arrcode['num_cols']); + } + // calculate barcode size (excluding padding) + $bw = $w - (2 * $style['padding']); + $bh = $h - (2 * $style['padding']); + // calculate starting coordinates + if ($this->rtl) { + $xpos = $x - $w; + } else { + $xpos = $x; + } + $xpos += $style['padding']; + $ypos = $y + $style['padding']; + // barcode is always printed in LTR direction + $tempRTL = $this->rtl; + $this->rtl = false; + // print background color + if ($style['bgcolor']) { + $this->Rect($x, $y, $w, $h, $style['border'] ? 'DF' : 'F', '', $style['bgcolor']); + } elseif ($style['border']) { + $this->Rect($x, $y, $w, $h, 'D'); + } + // print barcode cells + if ($arrcode !== false) { + $rows = $arrcode['num_rows']; + $cols = $arrcode['num_cols']; + // calculate dimension of single barcode cell + $cw = $bw / $cols; + $ch = $bh / $rows; + // for each row + for ($r = 0; $r < $rows; ++$r) { + $xr = $xpos; + // for each column + for ($c = 0; $c < $cols; ++$c) { + if ($arrcode['bcode'][$r][$c] == 1) { + // draw a single barcode cell + $this->Rect($xr, $ypos, $cw, $ch, 'F', array(), $style['fgcolor']); + } + $xr += $cw; + } + $ypos += $ch; + } + } + // restore original direction + $this->rtl = $tempRTL; + // restore previous settings + $this->setGraphicVars($gvars); + // set bottomcoordinates + $this->img_rb_y = $y + $h; + if ($this->rtl) { + // set left side coordinate + $this->img_rb_x = ($this->w - $x - $w); + } else { + // set right side coordinate + $this->img_rb_x = $x + $w; + } + // set pointer to align the successive text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + } + + /** + * Returns an array containing current margins: + *
      +
    • $ret['left'] = left margin
    • +
    • $ret['right'] = right margin
    • +
    • $ret['top'] = top margin
    • +
    • $ret['bottom'] = bottom margin
    • +
    • $ret['header'] = header margin
    • +
    • $ret['footer'] = footer margin
    • +
    • $ret['cell'] = cell margin
    • + *
    + * @return array containing all margins measures + * @access public + * @since 3.2.000 (2008-06-23) + */ + public function getMargins() { + $ret = array( + 'left' => $this->lMargin, + 'right' => $this->rMargin, + 'top' => $this->tMargin, + 'bottom' => $this->bMargin, + 'header' => $this->header_margin, + 'footer' => $this->footer_margin, + 'cell' => $this->cMargin, + ); + return $ret; + } + + /** + * Returns an array containing original margins: + *
      +
    • $ret['left'] = left margin
    • +
    • $ret['right'] = right margin
    • + *
    + * @return array containing all margins measures + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getOriginalMargins() { + $ret = array( + 'left' => $this->original_lMargin, + 'right' => $this->original_rMargin + ); + return $ret; + } + + /** + * Returns the current font size. + * @return current font size + * @access public + * @since 3.2.000 (2008-06-23) + */ + public function getFontSize() { + return $this->FontSize; + } + + /** + * Returns the current font size in points unit. + * @return current font size in points unit + * @access public + * @since 3.2.000 (2008-06-23) + */ + public function getFontSizePt() { + return $this->FontSizePt; + } + + /** + * Returns the current font family name. + * @return string current font family name + * @access public + * @since 4.3.008 (2008-12-05) + */ + public function getFontFamily() { + return $this->FontFamily; + } + + /** + * Returns the current font style. + * @return string current font style + * @access public + * @since 4.3.008 (2008-12-05) + */ + public function getFontStyle() { + return $this->FontStyle; + } + + /** + * Prints a cell (rectangular area) with optional borders, background color and html text string. + * The upper-left corner of the cell corresponds to the current position. After the call, the current position moves to the right or to the next line.
    + * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + * @param float $w Cell width. If 0, the cell extends up to the right margin. + * @param float $h Cell minimum height. The cell extends automatically if needed. + * @param float $x upper-left corner X coordinate + * @param float $y upper-left corner Y coordinate + * @param string $html html text to print. Default value: empty string. + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    + * @param int $ln Indicates where the current position should go after the call. Possible values are:
    • 0: to the right (or left for RTL language)
    • 1: to the beginning of the next line
    • 2: below
    + Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param boolean $reseth if true reset the last cell height (default true). + * @param string $align Allows to center or align the text. Possible values are:
    • L : left align
    • C : center
    • R : right align
    • '' : empty string : left for LTR or right for RTL
    + * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width. + * @access public + * @uses MultiCell() + * @see Multicell(), writeHTML() + */ + public function writeHTMLCell($w, $h, $x, $y, $html='', $border=0, $ln=0, $fill=0, $reseth=true, $align='', $autopadding=true) { + return $this->MultiCell($w, $h, $html, $border, $align, $fill, $ln, $x, $y, $reseth, 0, true, $autopadding, 0); + } + + /** + * Returns the HTML DOM array. + *
    • $dom[$key]['tag'] = true if tag, false otherwise;
    • $dom[$key]['value'] = tag name or text;
    • $dom[$key]['opening'] = true if opening tag, false otherwise;
    • $dom[$key]['attribute'] = array of attributes (attribute name is the key);
    • $dom[$key]['style'] = array of style attributes (attribute name is the key);
    • $dom[$key]['parent'] = id of parent element;
    • $dom[$key]['fontname'] = font family name;
    • $dom[$key]['fontstyle'] = font style;
    • $dom[$key]['fontsize'] = font size in points;
    • $dom[$key]['bgcolor'] = RGB array of background color;
    • $dom[$key]['fgcolor'] = RGB array of foreground color;
    • $dom[$key]['width'] = width in pixels;
    • $dom[$key]['height'] = height in pixels;
    • $dom[$key]['align'] = text alignment;
    • $dom[$key]['cols'] = number of colums in table;
    • $dom[$key]['rows'] = number of rows in table;
    + * @param string $html html code + * @return array + * @access protected + * @since 3.2.000 (2008-06-20) + */ + protected function getHtmlDomArray($html) { + // define block tags + $blocktags = array('blockquote','br','dd','dl','div','dt','h1','h2','h3','h4','h5','h6','hr','li','ol','p','pre','ul','tcpdf','table','tr','td'); + // remove all unsupported tags (the line below lists all supported tags) + $html = strip_tags($html, '



    1. ', $offset)) !== false) {
      +				$html_a = substr($html, 0, $offset);
      +				$html_b = substr($html, $offset, ($pos - $offset + 11));
      +				while (preg_match("']*)>(.*?)\n(.*?)'si", $html_b)) {
      +					// preserve newlines on 'si", "\\2\\3", $html_b);
      +					$html_b = preg_replace("']*)>(.*?)[\"](.*?)'si", "\\2''\\3", $html_b);
      +				}
      +				$html = $html_a.$html_b.substr($html, $pos + 11);
      +				$offset = strlen($html_a.$html_b);
      +			}
      +			$html = preg_replace("'([\s]*)([\s]*)'si", "", $html);
      +			$offset = 0;
      +			while (($offset < strlen($html)) AND ($pos = strpos($html, '', $offset)) !== false) {
      +				$html_a = substr($html, 0, $offset);
      +				$html_b = substr($html, $offset, ($pos - $offset + 9));
      +				while (preg_match("']*)>(.*?)'si", $html_b)) {
      +					$html_b = preg_replace("']*)>(.*?)'si", "\\2\t\\4\r", $html_b);
      +					$html_b = preg_replace("']*)>(.*?)'si", "\\2\r", $html_b);
      +				}
      +				$html = $html_a.$html_b.substr($html, $pos + 9);
      +				$offset = strlen($html_a.$html_b);
      +			}
      +			$html = preg_replace("']*)>'si", "'si", "\" />", $html);
      +			$html = str_replace("\n", ' ', $html);
      +			// restore textarea newlines
      +			$html = str_replace('', "\n", $html);
      +			// remove extra spaces from code
      +			$html = preg_replace('/[\s]+<\/(table|tr|td|th|ul|ol|li|dl|dt|dd)>/', '', $html);
      +			$html = preg_replace('/[\s]+<(tr|td|th|ul|ol|li|dl|dt|dd|br)/', '<\\1', $html);
      +			$html = preg_replace('/<\/(table|tr|td|th|blockquote|dd|dt|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|ul|p)>[\s]+<', $html);
      +			$html = preg_replace('/<\/(td|th)>/', '', $html);
      +			$html = preg_replace('/<\/table>([\s]*)/', '', $html);
      +			$html = preg_replace('/[\s]*]*)>/xi', '', $html);
      +			$html = preg_replace('/]*)>/xi', '', $html);
      +			// trim string
      +			$html = preg_replace('/^[\s]+/', '', $html);
      +			$html = preg_replace('/[\s]+$/', '', $html);
      +			// pattern for generic tag
      +			$tagpattern = '/(<[^>]+>)/';
      +			// explodes the string
      +			$a = preg_split($tagpattern, $html, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
      +			// count elements
      +			$maxel = count($a);
      +			$elkey = 0;
      +			$key = 0;
      +			// create an array of elements
      +			$dom = array();
      +			$dom[$key] = array();
      +			// set first void element
      +			$dom[$key]['tag'] = false;
      +			$dom[$key]['block'] = false;
      +			$dom[$key]['value'] = '';
      +			$dom[$key]['parent'] = 0;
      +			$dom[$key]['fontname'] = $this->FontFamily;
      +			$dom[$key]['fontstyle'] = $this->FontStyle;
      +			$dom[$key]['fontsize'] = $this->FontSizePt;
      +			$dom[$key]['stroke'] = $this->textstrokewidth;
      +			$dom[$key]['fill'] = (($this->textrendermode % 2) == 0);
      +			$dom[$key]['clip'] = ($this->textrendermode > 3);
      +			$dom[$key]['line-height'] = $this->cell_height_ratio;
      +			$dom[$key]['bgcolor'] = false;
      +			$dom[$key]['fgcolor'] = $this->fgcolor;
      +			$dom[$key]['strokecolor'] = $this->strokecolor;
      +			$dom[$key]['align'] = '';
      +			$dom[$key]['listtype'] = '';
      +			$dom[$key]['text-indent'] = 0;
      +			$thead = false; // true when we are inside the THEAD tag
      +			++$key;
      +			$level = array();
      +			array_push($level, 0); // root
      +			while ($elkey < $maxel) {
      +				$dom[$key] = array();
      +				$element = $a[$elkey];
      +				$dom[$key]['elkey'] = $elkey;
      +				if (preg_match($tagpattern, $element)) {
      +					// html tag
      +					$element = substr($element, 1, -1);
      +					// get tag name
      +					preg_match('/[\/]?([a-zA-Z0-9]*)/', $element, $tag);
      +					$tagname = strtolower($tag[1]);
      +					// check if we are inside a table header
      +					if ($tagname == 'thead') {
      +						if ($element[0] == '/') {
      +							$thead = false;
      +						} else {
      +							$thead = true;
      +						}
      +						++$elkey;
      +						continue;
      +					}
      +					$dom[$key]['tag'] = true;
      +					$dom[$key]['value'] = $tagname;
      +					if (in_array($dom[$key]['value'], $blocktags)) {
      +						$dom[$key]['block'] = true;
      +					} else {
      +						$dom[$key]['block'] = false;
      +					}
      +					if ($element[0] == '/') {
      +						// *** closing html tag
      +						$dom[$key]['opening'] = false;
      +						$dom[$key]['parent'] = end($level);
      +						array_pop($level);
      +						$dom[$key]['fontname'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontname'];
      +						$dom[$key]['fontstyle'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontstyle'];
      +						$dom[$key]['fontsize'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontsize'];
      +						$dom[$key]['stroke'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['stroke'];
      +						$dom[$key]['fill'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fill'];
      +						$dom[$key]['clip'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['clip'];
      +						$dom[$key]['line-height'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['line-height'];
      +						$dom[$key]['bgcolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['bgcolor'];
      +						$dom[$key]['fgcolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fgcolor'];
      +						$dom[$key]['strokecolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['strokecolor'];
      +						$dom[$key]['align'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['align'];
      +						if (isset($dom[($dom[($dom[$key]['parent'])]['parent'])]['listtype'])) {
      +							$dom[$key]['listtype'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['listtype'];
      +						}
      +						// set the number of columns in table tag
      +						if (($dom[$key]['value'] == 'tr') AND (!isset($dom[($dom[($dom[$key]['parent'])]['parent'])]['cols']))) {
      +							$dom[($dom[($dom[$key]['parent'])]['parent'])]['cols'] = $dom[($dom[$key]['parent'])]['cols'];
      +						}
      +						if (($dom[$key]['value'] == 'td') OR ($dom[$key]['value'] == 'th')) {
      +							$dom[($dom[$key]['parent'])]['content'] = '';
      +							for ($i = ($dom[$key]['parent'] + 1); $i < $key; ++$i) {
      +								$dom[($dom[$key]['parent'])]['content'] .= $a[$dom[$i]['elkey']];
      +							}
      +							$key = $i;
      +							// mark nested tables
      +							$dom[($dom[$key]['parent'])]['content'] = str_replace('', '', $dom[($dom[$key]['parent'])]['content']);
      +							$dom[($dom[$key]['parent'])]['content'] = str_replace('', '', $dom[($dom[$key]['parent'])]['content']);
      +						}
      +						// store header rows on a new table
      +						if (($dom[$key]['value'] == 'tr') AND ($dom[($dom[$key]['parent'])]['thead'] === true)) {
      +							if ($this->empty_string($dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'])) {
      +								$dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'] = $a[$dom[($dom[($dom[$key]['parent'])]['parent'])]['elkey']];
      +							}
      +							for ($i = $dom[$key]['parent']; $i <= $key; ++$i) {
      +								$dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'] .= $a[$dom[$i]['elkey']];
      +							}
      +							if (!isset($dom[($dom[$key]['parent'])]['attribute'])) {
      +								$dom[($dom[$key]['parent'])]['attribute'] = array();
      +							}
      +							// header elements must be always contained in a single page
      +							$dom[($dom[$key]['parent'])]['attribute']['nobr'] = 'true';
      +						}
      +						if (($dom[$key]['value'] == 'table') AND (!$this->empty_string($dom[($dom[$key]['parent'])]['thead']))) {
      +							// remove the nobr attributes from the table header
      +							$dom[($dom[$key]['parent'])]['thead'] = str_replace(' nobr="true"', '', $dom[($dom[$key]['parent'])]['thead']);
      +							$dom[($dom[$key]['parent'])]['thead'] .= '';
      +						}
      +					} else {
      +						// *** opening html tag
      +						$dom[$key]['opening'] = true;
      +						$dom[$key]['parent'] = end($level);
      +						if (substr($element, -1, 1) != '/') {
      +							// not self-closing tag
      +							array_push($level, $key);
      +							$dom[$key]['self'] = false;
      +						} else {
      +							$dom[$key]['self'] = true;
      +						}
      +						// copy some values from parent
      +						$parentkey = 0;
      +						if ($key > 0) {
      +							$parentkey = $dom[$key]['parent'];
      +							$dom[$key]['fontname'] = $dom[$parentkey]['fontname'];
      +							$dom[$key]['fontstyle'] = $dom[$parentkey]['fontstyle'];
      +							$dom[$key]['fontsize'] = $dom[$parentkey]['fontsize'];
      +							$dom[$key]['stroke'] = $dom[$parentkey]['stroke'];
      +							$dom[$key]['fill'] = $dom[$parentkey]['fill'];
      +							$dom[$key]['clip'] = $dom[$parentkey]['clip'];
      +							$dom[$key]['line-height'] = $dom[$parentkey]['line-height'];
      +							$dom[$key]['bgcolor'] = $dom[$parentkey]['bgcolor'];
      +							$dom[$key]['fgcolor'] = $dom[$parentkey]['fgcolor'];
      +							$dom[$key]['strokecolor'] = $dom[$parentkey]['strokecolor'];
      +							$dom[$key]['align'] = $dom[$parentkey]['align'];
      +							$dom[$key]['listtype'] = $dom[$parentkey]['listtype'];
      +							$dom[$key]['text-indent'] = $dom[$parentkey]['text-indent'];
      +						}
      +						// get attributes
      +						preg_match_all('/([^=\s]*)=["]?([^"]*)["]?/', $element, $attr_array, PREG_PATTERN_ORDER);
      +						$dom[$key]['attribute'] = array(); // reset attribute array
      +						while (list($id, $name) = each($attr_array[1])) {
      +							$dom[$key]['attribute'][strtolower($name)] = $attr_array[2][$id];
      +						}
      +						// split style attributes
      +						if (isset($dom[$key]['attribute']['style'])) {
      +							// get style attributes
      +							preg_match_all('/([^;:\s]*):([^;]*)/', $dom[$key]['attribute']['style'], $style_array, PREG_PATTERN_ORDER);
      +							$dom[$key]['style'] = array(); // reset style attribute array
      +							while (list($id, $name) = each($style_array[1])) {
      +								$dom[$key]['style'][strtolower($name)] = trim($style_array[2][$id]);
      +							}
      +							// --- get some style attributes ---
      +							if (isset($dom[$key]['style']['font-family'])) {
      +								// font family
      +								if (isset($dom[$key]['style']['font-family'])) {
      +									$fontslist = preg_split('/[,]/', strtolower($dom[$key]['style']['font-family']));
      +									foreach ($fontslist as $font) {
      +										$font = trim(strtolower($font));
      +										if (in_array($font, $this->fontlist) OR in_array($font, $this->fontkeys)) {
      +											$dom[$key]['fontname'] = $font;
      +											break;
      +										}
      +									}
      +								}
      +							}
      +							// list-style-type
      +							if (isset($dom[$key]['style']['list-style-type'])) {
      +								$dom[$key]['listtype'] = trim(strtolower($dom[$key]['style']['list-style-type']));
      +								if ($dom[$key]['listtype'] == 'inherit') {
      +									$dom[$key]['listtype'] = $dom[$parentkey]['listtype'];
      +								}
      +							}
      +							// text-indent
      +							if (isset($dom[$key]['style']['text-indent'])) {
      +								$dom[$key]['text-indent'] = $this->getHTMLUnitToUnits($dom[$key]['style']['text-indent']);
      +								if ($dom[$key]['text-indent'] == 'inherit') {
      +									$dom[$key]['text-indent'] = $dom[$parentkey]['text-indent'];
      +								}
      +							}
      +							// font size
      +							if (isset($dom[$key]['style']['font-size'])) {
      +								$fsize = trim($dom[$key]['style']['font-size']);
      +								switch ($fsize) {
      +									// absolute-size
      +									case 'xx-small': {
      +										$dom[$key]['fontsize'] = $dom[0]['fontsize'] - 4;
      +										break;
      +									}
      +									case 'x-small': {
      +										$dom[$key]['fontsize'] = $dom[0]['fontsize'] - 3;
      +										break;
      +									}
      +									case 'small': {
      +										$dom[$key]['fontsize'] = $dom[0]['fontsize'] - 2;
      +										break;
      +									}
      +									case 'medium': {
      +										$dom[$key]['fontsize'] = $dom[0]['fontsize'];
      +										break;
      +									}
      +									case 'large': {
      +										$dom[$key]['fontsize'] = $dom[0]['fontsize'] + 2;
      +										break;
      +									}
      +									case 'x-large': {
      +										$dom[$key]['fontsize'] = $dom[0]['fontsize'] + 4;
      +										break;
      +									}
      +									case 'xx-large': {
      +										$dom[$key]['fontsize'] = $dom[0]['fontsize'] + 6;
      +										break;
      +									}
      +									// relative-size
      +									case 'smaller': {
      +										$dom[$key]['fontsize'] = $dom[$parentkey]['fontsize'] - 3;
      +										break;
      +									}
      +									case 'larger': {
      +										$dom[$key]['fontsize'] = $dom[$parentkey]['fontsize'] + 3;
      +										break;
      +									}
      +									default: {
      +										$dom[$key]['fontsize'] = $this->getHTMLUnitToUnits($fsize, $dom[$parentkey]['fontsize'], 'pt', true);
      +									}
      +								}
      +							}
      +							// line-height
      +							if (isset($dom[$key]['style']['line-height'])) {
      +								$lineheight = trim($dom[$key]['style']['line-height']);
      +								switch ($lineheight) {
      +									// A normal line height. This is default
      +									case 'normal': {
      +										$dom[$key]['line-height'] = $dom[0]['line-height'];
      +										break;
      +									}
      +									default: {
      +										if (is_numeric($lineheight)) {
      +											$lineheight = $lineheight * 100;
      +										}
      +										$dom[$key]['line-height'] = $this->getHTMLUnitToUnits($lineheight, 1, '%', true);
      +									}
      +								}
      +							}
      +							// font style
      +							if (isset($dom[$key]['style']['font-weight']) AND (strtolower($dom[$key]['style']['font-weight'][0]) == 'b')) {
      +								$dom[$key]['fontstyle'] .= 'B';
      +							}
      +							if (isset($dom[$key]['style']['font-style']) AND (strtolower($dom[$key]['style']['font-style'][0]) == 'i')) {
      +								$dom[$key]['fontstyle'] .= 'I';
      +							}
      +							// font color
      +							if (isset($dom[$key]['style']['color']) AND (!$this->empty_string($dom[$key]['style']['color']))) {
      +								$dom[$key]['fgcolor'] = $this->convertHTMLColorToDec($dom[$key]['style']['color']);
      +							}
      +							// background color
      +							if (isset($dom[$key]['style']['background-color']) AND (!$this->empty_string($dom[$key]['style']['background-color']))) {
      +								$dom[$key]['bgcolor'] = $this->convertHTMLColorToDec($dom[$key]['style']['background-color']);
      +							}
      +							// text-decoration
      +							if (isset($dom[$key]['style']['text-decoration'])) {
      +								$decors = explode(' ', strtolower($dom[$key]['style']['text-decoration']));
      +								foreach ($decors as $dec) {
      +									$dec = trim($dec);
      +									if (!$this->empty_string($dec)) {
      +										if ($dec[0] == 'u') {
      +											// underline
      +											$dom[$key]['fontstyle'] .= 'U';
      +										} elseif ($dec[0] == 'l') {
      +											// line-trough
      +											$dom[$key]['fontstyle'] .= 'D';
      +										} elseif ($dec[0] == 'o') {
      +											// overline
      +											$dom[$key]['fontstyle'] .= 'O';
      +										}
      +									}
      +								}
      +							}
      +							// check for width attribute
      +							if (isset($dom[$key]['style']['width'])) {
      +								$dom[$key]['width'] = $dom[$key]['style']['width'];
      +							}
      +							// check for height attribute
      +							if (isset($dom[$key]['style']['height'])) {
      +								$dom[$key]['height'] = $dom[$key]['style']['height'];
      +							}
      +							// check for text alignment
      +							if (isset($dom[$key]['style']['text-align'])) {
      +								$dom[$key]['align'] = strtoupper($dom[$key]['style']['text-align'][0]);
      +							}
      +							// check for border attribute
      +							if (isset($dom[$key]['style']['border'])) {
      +								$dom[$key]['attribute']['border'] = $dom[$key]['style']['border'];
      +							}
      +							// page-break-inside
      +							if (isset($dom[$key]['style']['page-break-inside']) AND ($dom[$key]['style']['page-break-inside'] == 'avoid')) {
      +								$dom[$key]['attribute']['nobr'] = 'true';
      +							}
      +							// page-break-before
      +							if (isset($dom[$key]['style']['page-break-before'])) {
      +								if ($dom[$key]['style']['page-break-before'] == 'always') {
      +									$dom[$key]['attribute']['pagebreak'] = 'true';
      +								} elseif ($dom[$key]['style']['page-break-before'] == 'left') {
      +									$dom[$key]['attribute']['pagebreak'] = 'left';
      +								} elseif ($dom[$key]['style']['page-break-before'] == 'right') {
      +									$dom[$key]['attribute']['pagebreak'] = 'right';
      +								}
      +							}
      +							// page-break-after
      +							if (isset($dom[$key]['style']['page-break-after'])) {
      +								if ($dom[$key]['style']['page-break-after'] == 'always') {
      +									$dom[$key]['attribute']['pagebreakafter'] = 'true';
      +								} elseif ($dom[$key]['style']['page-break-after'] == 'left') {
      +									$dom[$key]['attribute']['pagebreakafter'] = 'left';
      +								} elseif ($dom[$key]['style']['page-break-after'] == 'right') {
      +									$dom[$key]['attribute']['pagebreakafter'] = 'right';
      +								}
      +							}
      +						}
      +						// check for font tag
      +						if ($dom[$key]['value'] == 'font') {
      +							// font family
      +							if (isset($dom[$key]['attribute']['face'])) {
      +								$fontslist = preg_split('/[,]/', strtolower($dom[$key]['attribute']['face']));
      +								foreach ($fontslist as $font) {
      +									$font = trim(strtolower($font));
      +									if (in_array($font, $this->fontlist) OR in_array($font, $this->fontkeys)) {
      +										$dom[$key]['fontname'] = $font;
      +										break;
      +									}
      +								}
      +							}
      +							// font size
      +							if (isset($dom[$key]['attribute']['size'])) {
      +								if ($key > 0) {
      +									if ($dom[$key]['attribute']['size'][0] == '+') {
      +										$dom[$key]['fontsize'] = $dom[($dom[$key]['parent'])]['fontsize'] + intval(substr($dom[$key]['attribute']['size'], 1));
      +									} elseif ($dom[$key]['attribute']['size'][0] == '-') {
      +										$dom[$key]['fontsize'] = $dom[($dom[$key]['parent'])]['fontsize'] - intval(substr($dom[$key]['attribute']['size'], 1));
      +									} else {
      +										$dom[$key]['fontsize'] = intval($dom[$key]['attribute']['size']);
      +									}
      +								} else {
      +									$dom[$key]['fontsize'] = intval($dom[$key]['attribute']['size']);
      +								}
      +							}
      +						}
      +						// force natural alignment for lists
      +						if ((($dom[$key]['value'] == 'ul') OR ($dom[$key]['value'] == 'ol') OR ($dom[$key]['value'] == 'dl'))
      +							AND (!isset($dom[$key]['align']) OR $this->empty_string($dom[$key]['align']) OR ($dom[$key]['align'] != 'J'))) {
      +							if ($this->rtl) {
      +								$dom[$key]['align'] = 'R';
      +							} else {
      +								$dom[$key]['align'] = 'L';
      +							}
      +						}
      +						if (($dom[$key]['value'] == 'small') OR ($dom[$key]['value'] == 'sup') OR ($dom[$key]['value'] == 'sub')) {
      +							$dom[$key]['fontsize'] = $dom[$key]['fontsize'] * K_SMALL_RATIO;
      +						}
      +						if (($dom[$key]['value'] == 'strong') OR ($dom[$key]['value'] == 'b')) {
      +							$dom[$key]['fontstyle'] .= 'B';
      +						}
      +						if (($dom[$key]['value'] == 'em') OR ($dom[$key]['value'] == 'i')) {
      +							$dom[$key]['fontstyle'] .= 'I';
      +						}
      +						if ($dom[$key]['value'] == 'u') {
      +							$dom[$key]['fontstyle'] .= 'U';
      +						}
      +						if ($dom[$key]['value'] == 'del') {
      +							$dom[$key]['fontstyle'] .= 'D';
      +						}
      +						if (($dom[$key]['value'] == 'pre') OR ($dom[$key]['value'] == 'tt')) {
      +							$dom[$key]['fontname'] = $this->default_monospaced_font;
      +						}
      +						if (($dom[$key]['value'][0] == 'h') AND (intval($dom[$key]['value'][1]) > 0) AND (intval($dom[$key]['value'][1]) < 7)) {
      +							$headsize = (4 - intval($dom[$key]['value'][1])) * 2;
      +							$dom[$key]['fontsize'] = $dom[0]['fontsize'] + $headsize;
      +							$dom[$key]['fontstyle'] .= 'B';
      +						}
      +						if (($dom[$key]['value'] == 'table')) {
      +							$dom[$key]['rows'] = 0; // number of rows
      +							$dom[$key]['trids'] = array(); // IDs of TR elements
      +							$dom[$key]['thead'] = ''; // table header rows
      +						}
      +						if (($dom[$key]['value'] == 'tr')) {
      +							$dom[$key]['cols'] = 0;
      +							if ($thead) {
      +								$dom[$key]['thead'] = true;
      +								// rows on thead block are printed as a separate table
      +							} else {
      +								$dom[$key]['thead'] = false;
      +								// store the number of rows on table element
      +								++$dom[($dom[$key]['parent'])]['rows'];
      +								// store the TR elements IDs on table element
      +								array_push($dom[($dom[$key]['parent'])]['trids'], $key);
      +							}
      +						}
      +						if (($dom[$key]['value'] == 'th') OR ($dom[$key]['value'] == 'td')) {
      +							if (isset($dom[$key]['attribute']['colspan'])) {
      +								$colspan = intval($dom[$key]['attribute']['colspan']);
      +							} else {
      +								$colspan = 1;
      +							}
      +							$dom[$key]['attribute']['colspan'] = $colspan;
      +							$dom[($dom[$key]['parent'])]['cols'] += $colspan;
      +						}
      +						// set foreground color attribute
      +						if (isset($dom[$key]['attribute']['color']) AND (!$this->empty_string($dom[$key]['attribute']['color']))) {
      +							$dom[$key]['fgcolor'] = $this->convertHTMLColorToDec($dom[$key]['attribute']['color']);
      +						}
      +						// set background color attribute
      +						if (isset($dom[$key]['attribute']['bgcolor']) AND (!$this->empty_string($dom[$key]['attribute']['bgcolor']))) {
      +							$dom[$key]['bgcolor'] = $this->convertHTMLColorToDec($dom[$key]['attribute']['bgcolor']);
      +						}
      +						// set stroke color attribute
      +						if (isset($dom[$key]['attribute']['strokecolor']) AND (!$this->empty_string($dom[$key]['attribute']['strokecolor']))) {
      +							$dom[$key]['strokecolor'] = $this->convertHTMLColorToDec($dom[$key]['attribute']['strokecolor']);
      +						}
      +						// check for width attribute
      +						if (isset($dom[$key]['attribute']['width'])) {
      +							$dom[$key]['width'] = $dom[$key]['attribute']['width'];
      +						}
      +						// check for height attribute
      +						if (isset($dom[$key]['attribute']['height'])) {
      +							$dom[$key]['height'] = $dom[$key]['attribute']['height'];
      +						}
      +						// check for text alignment
      +						if (isset($dom[$key]['attribute']['align']) AND (!$this->empty_string($dom[$key]['attribute']['align'])) AND ($dom[$key]['value'] !== 'img')) {
      +							$dom[$key]['align'] = strtoupper($dom[$key]['attribute']['align'][0]);
      +						}
      +						// check for text rendering mode (the following attributes do not exist in HTML)
      +						if (isset($dom[$key]['attribute']['stroke'])) {
      +							// font stroke width
      +							$dom[$key]['stroke'] = $this->getHTMLUnitToUnits($dom[$key]['attribute']['stroke'], $dom[$key]['fontsize'], 'pt', true);
      +						}
      +						if (isset($dom[$key]['attribute']['fill'])) {
      +							// font fill
      +							if ($dom[$key]['attribute']['fill'] == 'true') {
      +								$dom[$key]['fill'] = true;
      +							} else {
      +								$dom[$key]['fill'] = false;
      +							}
      +						}
      +						if (isset($dom[$key]['attribute']['clip'])) {
      +							// clipping mode
      +							if ($dom[$key]['attribute']['clip'] == 'true') {
      +								$dom[$key]['clip'] = true;
      +							} else {
      +								$dom[$key]['clip'] = false;
      +							}
      +						}
      +					} // end opening tag
      +				} else {
      +					// text
      +					$dom[$key]['tag'] = false;
      +					$dom[$key]['block'] = false;
      +					$dom[$key]['value'] = stripslashes($this->unhtmlentities($element));
      +					$dom[$key]['parent'] = end($level);
      +				}
      +				++$elkey;
      +				++$key;
      +			}
      +			return $dom;
      +		}
      +
      +		/**
      +		 * Returns the string used to find spaces
      +		 * @return string
      +		 * @access protected
      +		 * @author Nicola Asuni
      +		 * @since 4.8.024 (2010-01-15)
      +		 */
      +		protected function getSpaceString() {
      +			$spacestr = chr(32);
      +			if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) {
      +				$spacestr = chr(0).chr(32);
      +			}
      +			return $spacestr;
      +		}
      +
      +		/**
      +		 * Allows to preserve some HTML formatting (limited support).
      + * IMPORTANT: The HTML must be well formatted - try to clean-up it using an application like HTML-Tidy before submitting. + * Supported tags are: a, b, blockquote, br, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, img, li, ol, p, pre, small, span, strong, sub, sup, table, tcpdf, td, th, thead, tr, tt, u, ul + * @param string $html text to display + * @param boolean $ln if true add a new line after text (default = true) + * @param int $fill Indicates if the background must be painted (true) or transparent (false). + * @param boolean $reseth if true reset the last cell height (default false). + * @param boolean $cell if true add the default cMargin space to each Write (default false). + * @param string $align Allows to center or align the text. Possible values are:
      • L : left align
      • C : center
      • R : right align
      • '' : empty string : left for LTR or right for RTL
      + * @access public + */ + public function writeHTML($html, $ln=true, $fill=false, $reseth=false, $cell=false, $align='') { + $gvars = $this->getGraphicVars(); + // store current values + $prevPage = $this->page; + $prevlMargin = $this->lMargin; + $prevrMargin = $this->rMargin; + $curfontname = $this->FontFamily; + $curfontstyle = $this->FontStyle; + $curfontsize = $this->FontSizePt; + $curfontascent = $this->getFontAscent($curfontname, $curfontstyle, $curfontsize); + $curfontdescent = $this->getFontDescent($curfontname, $curfontstyle, $curfontsize); + $this->newline = true; + $startlinepage = $this->page; + $minstartliney = $this->y; + $maxbottomliney = 0; + $startlinex = $this->x; + $startliney = $this->y; + $yshift = 0; + $newline = true; + $loop = 0; + $curpos = 0; + $this_method_vars = array(); + $undo = false; + $fontaligned = false; + $this->premode = false; + if (isset($this->PageAnnots[$this->page])) { + $pask = count($this->PageAnnots[$this->page]); + } else { + $pask = 0; + } + if (!$this->InFooter) { + if (isset($this->footerlen[$this->page])) { + $this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page]; + } else { + $this->footerpos[$this->page] = $this->pagelen[$this->page]; + } + $startlinepos = $this->footerpos[$this->page]; + } else { + $startlinepos = $this->pagelen[$this->page]; + } + $lalign = $align; + $plalign = $align; + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + $w -= (2 * $this->cMargin); + if ($cell) { + if ($this->rtl) { + $this->x -= $this->cMargin; + } else { + $this->x += $this->cMargin; + } + } + if ($this->customlistindent >= 0) { + $this->listindent = $this->customlistindent; + } else { + $this->listindent = $this->GetStringWidth('0000'); + } + $this->listindentlevel = 0; + // save previous states + $prev_cell_height_ratio = $this->cell_height_ratio; + $prev_listnum = $this->listnum; + $prev_listordered = $this->listordered; + $prev_listcount = $this->listcount; + $prev_lispacer = $this->lispacer; + $this->listnum = 0; + $this->listordered = array(); + $this->listcount = array(); + $this->lispacer = ''; + if (($this->empty_string($this->lasth)) OR ($reseth)) { + //set row height + $this->lasth = $this->FontSize * $this->cell_height_ratio; + } + $dom = $this->getHtmlDomArray($html); + $maxel = count($dom); + $key = 0; + while ($key < $maxel) { + if ($dom[$key]['tag'] AND isset($dom[$key]['attribute']['pagebreak'])) { + // check for pagebreak + if (($dom[$key]['attribute']['pagebreak'] == 'true') OR ($dom[$key]['attribute']['pagebreak'] == 'left') OR ($dom[$key]['attribute']['pagebreak'] == 'right')) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + if ((($dom[$key]['attribute']['pagebreak'] == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0)))) + OR (($dom[$key]['attribute']['pagebreak'] == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + } + if ($dom[$key]['tag'] AND $dom[$key]['opening'] AND isset($dom[$key]['attribute']['nobr']) AND ($dom[$key]['attribute']['nobr'] == 'true')) { + if (isset($dom[($dom[$key]['parent'])]['attribute']['nobr']) AND ($dom[($dom[$key]['parent'])]['attribute']['nobr'] == 'true')) { + $dom[$key]['attribute']['nobr'] = false; + } else { + // store current object + $this->startTransaction(); + // save this method vars + $this_method_vars['html'] = $html; + $this_method_vars['ln'] = $ln; + $this_method_vars['fill'] = $fill; + $this_method_vars['reseth'] = $reseth; + $this_method_vars['cell'] = $cell; + $this_method_vars['align'] = $align; + $this_method_vars['gvars'] = $gvars; + $this_method_vars['prevPage'] = $prevPage; + $this_method_vars['prevlMargin'] = $prevlMargin; + $this_method_vars['prevrMargin'] = $prevrMargin; + $this_method_vars['curfontname'] = $curfontname; + $this_method_vars['curfontstyle'] = $curfontstyle; + $this_method_vars['curfontsize'] = $curfontsize; + $this_method_vars['curfontascent'] = $curfontascent; + $this_method_vars['curfontdescent'] = $curfontdescent; + $this_method_vars['minstartliney'] = $minstartliney; + $this_method_vars['maxbottomliney'] = $maxbottomliney; + $this_method_vars['yshift'] = $yshift; + $this_method_vars['startlinepage'] = $startlinepage; + $this_method_vars['startlinepos'] = $startlinepos; + $this_method_vars['startlinex'] = $startlinex; + $this_method_vars['startliney'] = $startliney; + $this_method_vars['newline'] = $newline; + $this_method_vars['loop'] = $loop; + $this_method_vars['curpos'] = $curpos; + $this_method_vars['pask'] = $pask; + $this_method_vars['lalign'] = $lalign; + $this_method_vars['plalign'] = $plalign; + $this_method_vars['w'] = $w; + $this_method_vars['prev_cell_height_ratio'] = $prev_cell_height_ratio; + $this_method_vars['prev_listnum'] = $prev_listnum; + $this_method_vars['prev_listordered'] = $prev_listordered; + $this_method_vars['prev_listcount'] = $prev_listcount; + $this_method_vars['prev_lispacer'] = $prev_lispacer; + $this_method_vars['fontaligned'] = $fontaligned; + $this_method_vars['key'] = $key; + $this_method_vars['dom'] = $dom; + } + } + // print THEAD block + if (($dom[$key]['value'] == 'tr') AND isset($dom[$key]['thead']) AND $dom[$key]['thead']) { + if (isset($dom[$key]['parent']) AND isset($dom[$dom[$key]['parent']]['thead']) AND !$this->empty_string($dom[$dom[$key]['parent']]['thead'])) { + $this->inthead = true; + // print table header (thead) + $this->writeHTML($this->thead, false, false, false, false, ''); + if (($this->start_transaction_page == ($this->numpages - 1)) OR ($this->y < $this->start_transaction_y) OR ($this->checkPageBreak($this->lasth, '', false))) { + // restore previous object + $this->rollbackTransaction(true); + // restore previous values + foreach ($this_method_vars as $vkey => $vval) { + $$vkey = $vval; + } + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $pre_y = $this->y; + if ((!$this->checkPageBreak($this->PageBreakTrigger + 1)) AND ($this->y < $pre_y)) { + // fix for multicolumn mode + $startliney = $this->y; + } + $this->start_transaction_page = $this->page; + $this->start_transaction_y = $this->y; + } + } + // move $key index forward to skip THEAD block + while ( ($key < $maxel) AND (!( + ($dom[$key]['tag'] AND $dom[$key]['opening'] AND ($dom[$key]['value'] == 'tr') AND (!isset($dom[$key]['thead']) OR !$dom[$key]['thead'])) + OR ($dom[$key]['tag'] AND (!$dom[$key]['opening']) AND ($dom[$key]['value'] == 'table'))) )) { + ++$key; + } + } + if ($dom[$key]['tag'] OR ($key == 0)) { + if (isset($dom[$key]['line-height'])) { + // set line height + $this->cell_height_ratio = $dom[$key]['line-height']; + $this->lasth = $this->FontSize * $this->cell_height_ratio; + } + if ((($dom[$key]['value'] == 'table') OR ($dom[$key]['value'] == 'tr')) AND (isset($dom[$key]['align']))) { + $dom[$key]['align'] = ($this->rtl) ? 'R' : 'L'; + } + // vertically align image in line + if ((!$this->newline) AND ($dom[$key]['value'] == 'img') AND (isset($dom[$key]['attribute']['height'])) AND ($dom[$key]['attribute']['height'] > 0)) { + // get image height + $imgh = $this->getHTMLUnitToUnits($dom[$key]['attribute']['height'], $this->lasth, 'px'); + // check for automatic line break + $autolinebreak = false; + if (isset($dom[$key]['attribute']['width']) AND ($dom[$key]['attribute']['width'] > 0)) { + $imgw = $this->getHTMLUnitToUnits($dom[$key]['attribute']['width'], 1, 'px', false); + if (($this->rtl AND (($this->x - $imgw) < ($this->lMargin + $this->cMargin))) + OR (!$this->rtl AND (($this->x + $imgw) > ($this->w - $this->rMargin - $this->cMargin)))) { + // add automatic line break + $autolinebreak = true; + $this->Ln('', $cell); + // go back to evaluate this line break + --$key; + } + } + if (!$autolinebreak) { + if (!$this->InFooter) { + $pre_y = $this->y; + // check for page break + if ((!$this->checkPageBreak($imgh)) AND ($this->y < $pre_y)) { + // fix for multicolumn mode + $startliney = $this->y; + } + } + if ($this->page > $startlinepage) { + // fix line splitted over two pages + if (isset($this->footerlen[$startlinepage])) { + $curpos = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage]; + } + // line to be moved one page forward + $pagebuff = $this->getPageBuffer($startlinepage); + $linebeg = substr($pagebuff, $startlinepos, ($curpos - $startlinepos)); + $tstart = substr($pagebuff, 0, $startlinepos); + $tend = substr($this->getPageBuffer($startlinepage), $curpos); + // remove line from previous page + $this->setPageBuffer($startlinepage, $tstart.''.$tend); + $pagebuff = $this->getPageBuffer($this->page); + $tstart = substr($pagebuff, 0, $this->cntmrk[$this->page]); + $tend = substr($pagebuff, $this->cntmrk[$this->page]); + // add line start to current page + $yshift = $minstartliney - $this->y; + if ($fontaligned) { + $yshift += ($curfontsize / $this->k); + } + $try = sprintf('1 0 0 1 0 %.3F cm', ($yshift * $this->k)); + $this->setPageBuffer($this->page, $tstart."\nq\n".$try."\n".$linebeg."\nQ\n".$tend); + // shift the annotations and links + if (isset($this->PageAnnots[$this->page])) { + $next_pask = count($this->PageAnnots[$this->page]); + } else { + $next_pask = 0; + } + if (isset($this->PageAnnots[$startlinepage])) { + foreach ($this->PageAnnots[$startlinepage] as $pak => $pac) { + if ($pak >= $pask) { + $this->PageAnnots[$this->page][] = $pac; + unset($this->PageAnnots[$startlinepage][$pak]); + $npak = count($this->PageAnnots[$this->page]) - 1; + $this->PageAnnots[$this->page][$npak]['y'] -= $yshift; + } + } + } + $pask = $next_pask; + $startlinepos = $this->cntmrk[$this->page]; + $startlinepage = $this->page; + $startliney = $this->y; + } + $this->y += ((($curfontsize * $this->cell_height_ratio / $this->k) + $curfontascent - $curfontdescent) / 2) - $imgh; + $minstartliney = min($this->y, $minstartliney); + $maxbottomliney = ($startliney + ($this->FontSize * $this->cell_height_ratio)); + } + } elseif (isset($dom[$key]['fontname']) OR isset($dom[$key]['fontstyle']) OR isset($dom[$key]['fontsize'])) { + // account for different font size + $pfontname = $curfontname; + $pfontstyle = $curfontstyle; + $pfontsize = $curfontsize; + $fontname = isset($dom[$key]['fontname']) ? $dom[$key]['fontname'] : $curfontname; + $fontstyle = isset($dom[$key]['fontstyle']) ? $dom[$key]['fontstyle'] : $curfontstyle; + $fontsize = isset($dom[$key]['fontsize']) ? $dom[$key]['fontsize'] : $curfontsize; + $fontascent = $this->getFontAscent($fontname, $fontstyle, $fontsize); + $fontdescent = $this->getFontDescent($fontname, $fontstyle, $fontsize); + if (($fontname != $curfontname) OR ($fontstyle != $curfontstyle) OR ($fontsize != $curfontsize)) { + if (is_numeric($fontsize) AND ($fontsize >= 0) + AND is_numeric($curfontsize) AND ($curfontsize >= 0) + AND ($fontsize != $curfontsize) AND (!$this->newline) + AND ($key < ($maxel - 1)) + ) { + if ((!$this->newline) AND ($this->page > $startlinepage)) { + // fix lines splitted over two pages + if (isset($this->footerlen[$startlinepage])) { + $curpos = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage]; + } + // line to be moved one page forward + $pagebuff = $this->getPageBuffer($startlinepage); + $linebeg = substr($pagebuff, $startlinepos, ($curpos - $startlinepos)); + $tstart = substr($pagebuff, 0, $startlinepos); + $tend = substr($this->getPageBuffer($startlinepage), $curpos); + // remove line start from previous page + $this->setPageBuffer($startlinepage, $tstart.''.$tend); + $pagebuff = $this->getPageBuffer($this->page); + $tstart = substr($pagebuff, 0, $this->cntmrk[$this->page]); + $tend = substr($pagebuff, $this->cntmrk[$this->page]); + // add line start to current page + $yshift = $minstartliney - $this->y; + $try = sprintf('1 0 0 1 0 %.3F cm', ($yshift * $this->k)); + $this->setPageBuffer($this->page, $tstart."\nq\n".$try."\n".$linebeg."\nQ\n".$tend); + // shift the annotations and links + if (isset($this->PageAnnots[$this->page])) { + $next_pask = count($this->PageAnnots[$this->page]); + } else { + $next_pask = 0; + } + if (isset($this->PageAnnots[$startlinepage])) { + foreach ($this->PageAnnots[$startlinepage] as $pak => $pac) { + if ($pak >= $pask) { + $this->PageAnnots[$this->page][] = $pac; + unset($this->PageAnnots[$startlinepage][$pak]); + $npak = count($this->PageAnnots[$this->page]) - 1; + $this->PageAnnots[$this->page][$npak]['y'] -= $yshift; + } + } + } + $pask = $next_pask; + $startlinepos = $this->cntmrk[$this->page]; + $startlinepage = $this->page; + $startliney = $this->y; + } + if (!$dom[$key]['block']) { + $this->y += ((($curfontsize - $fontsize) * $this->cell_height_ratio / $this->k) + $curfontascent - $fontascent - $curfontdescent + $fontdescent) / 2; + $minstartliney = min($this->y, $minstartliney); + $maxbottomliney = max(($this->y + (($fontsize * $this->cell_height_ratio) / $this->k)), $maxbottomliney); + } + $fontaligned = true; + } + $this->SetFont($fontname, $fontstyle, $fontsize); + $this->lasth = $this->FontSize * $this->cell_height_ratio; + $curfontname = $fontname; + $curfontstyle = $fontstyle; + $curfontsize = $fontsize; + $curfontascent = $fontascent; + $curfontdescent = $fontdescent; + } + } + // set text rendering mode + $textstroke = isset($dom[$key]['stroke']) ? $dom[$key]['stroke'] : $this->textstrokewidth; + $textfill = isset($dom[$key]['fill']) ? $dom[$key]['fill'] : (($this->textrendermode % 2) == 0); + $textclip = isset($dom[$key]['clip']) ? $dom[$key]['clip'] : ($this->textrendermode > 3); + $this->setTextRenderingMode($textstroke, $textfill, $textclip); + if (($plalign == 'J') AND $dom[$key]['block']) { + $plalign = ''; + } + // get current position on page buffer + $curpos = $this->pagelen[$startlinepage]; + if (isset($dom[$key]['bgcolor']) AND ($dom[$key]['bgcolor'] !== false)) { + $this->SetFillColorArray($dom[$key]['bgcolor']); + $wfill = true; + } else { + $wfill = $fill | false; + } + if (isset($dom[$key]['fgcolor']) AND ($dom[$key]['fgcolor'] !== false)) { + $this->SetTextColorArray($dom[$key]['fgcolor']); + } + if (isset($dom[$key]['strokecolor']) AND ($dom[$key]['strokecolor'] !== false)) { + $this->SetDrawColorArray($dom[$key]['strokecolor']); + } + if (isset($dom[$key]['align'])) { + $lalign = $dom[$key]['align']; + } + if ($this->empty_string($lalign)) { + $lalign = $align; + } + } + // align lines + if ($this->newline AND (strlen($dom[$key]['value']) > 0) AND ($dom[$key]['value'] != 'td') AND ($dom[$key]['value'] != 'th')) { + $newline = true; + $fontaligned = false; + // we are at the beginning of a new line + if (isset($startlinex)) { + $yshift = $minstartliney - $startliney; + if (($yshift > 0) OR ($this->page > $startlinepage)) { + $yshift = 0; + } + $t_x = 0; + // the last line must be shifted to be aligned as requested + $linew = abs($this->endlinex - $startlinex); + $pstart = substr($this->getPageBuffer($startlinepage), 0, $startlinepos); + if (isset($opentagpos) AND isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)) { + $this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage]; + $midpos = min($opentagpos, $this->footerpos[$startlinepage]); + } elseif (isset($opentagpos)) { + $midpos = $opentagpos; + } elseif (isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)) { + $this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage]; + $midpos = $this->footerpos[$startlinepage]; + } else { + $midpos = 0; + } + if ($midpos > 0) { + $pmid = substr($this->getPageBuffer($startlinepage), $startlinepos, ($midpos - $startlinepos)); + $pend = substr($this->getPageBuffer($startlinepage), $midpos); + } else { + $pmid = substr($this->getPageBuffer($startlinepage), $startlinepos); + $pend = ''; + } + if ((isset($plalign) AND ((($plalign == 'C') OR ($plalign == 'J') OR (($plalign == 'R') AND (!$this->rtl)) OR (($plalign == 'L') AND ($this->rtl))))) OR ($yshift < 0)) { + // calculate shifting amount + $tw = $w; + if (($plalign == 'J') AND $this->isRTLTextDir() AND ($this->num_columns > 1)) { + $tw += $this->cMargin; + } + if ($this->lMargin != $prevlMargin) { + $tw += ($prevlMargin - $this->lMargin); + } + if ($this->rMargin != $prevrMargin) { + $tw += ($prevrMargin - $this->rMargin); + } + $one_space_width = $this->GetStringWidth(chr(32)); + $mdiff = abs($tw - $linew); + if ($plalign == 'C') { + if ($this->rtl) { + $t_x = -($mdiff / 2); + } else { + $t_x = ($mdiff / 2); + } + } elseif (($plalign == 'R') AND (!$this->rtl)) { + // right alignment on LTR document + if (intval($this->revstrpos($pmid, ')]')) == (intval($this->revstrpos($pmid, ' )]')) + 1)) { + // remove last space (if any) + $linew -= $one_space_width; + $mdiff = abs($tw - $linew); + } + $t_x = $mdiff; + } elseif (($plalign == 'L') AND ($this->rtl)) { + // left alignment on RTL document + if (($this->revstrpos($pmid, '[(') > 0) AND ((intval($this->revstrpos($pmid, '[( ')) == intval($this->revstrpos($pmid, '[('))) OR (intval($this->revstrpos($pmid, '[('.chr(0).chr(32))) == intval($this->revstrpos($pmid, '[('))))) { + // remove first space (if any) + $linew -= $one_space_width; + } + if ((strpos($pmid, '[(') > 0) AND (intval(strpos($pmid, '[(')) == (intval($this->revstrpos($pmid, '[('))))) { + // remove last space (if any) + $linew -= $one_space_width; + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + $linew -= $one_space_width; + } + } + $mdiff = abs($tw - $linew); + $t_x = -$mdiff; + } elseif (($plalign == 'J') AND ($plalign == $lalign)) { + // Justification + if ($this->isRTLTextDir()) { + $t_x = $this->lMargin - $this->endlinex + $this->cMargin; + } + $no = 0; // spaces without trim + $ns = 0; // spaces with trim + $pmidtemp = $pmid; + // escape special characters + $pmidtemp = preg_replace('/[\\\][\(]/x', '\\#!#OP#!#', $pmidtemp); + $pmidtemp = preg_replace('/[\\\][\)]/x', '\\#!#CP#!#', $pmidtemp); + // search spaces + if (preg_match_all('/\[\(([^\)]*)\)\]/x', $pmidtemp, $lnstring, PREG_PATTERN_ORDER)) { + $spacestr = $this->getSpaceString(); + $maxkk = count($lnstring[1]) - 1; + for ($kk=0; $kk <= $maxkk; ++$kk) { + // restore special characters + $lnstring[1][$kk] = str_replace('#!#OP#!#', '(', $lnstring[1][$kk]); + $lnstring[1][$kk] = str_replace('#!#CP#!#', ')', $lnstring[1][$kk]); + if ($kk == $maxkk) { + if ($this->isRTLTextDir()) { + $tvalue = ltrim($lnstring[1][$kk]); + } else { + $tvalue = rtrim($lnstring[1][$kk]); + } + } else { + $tvalue = $lnstring[1][$kk]; + } + // store number of spaces on the strings + $lnstring[2][$kk] = substr_count($lnstring[1][$kk], $spacestr); + $lnstring[3][$kk] = substr_count($tvalue, $spacestr); + // count total spaces on line + $no += $lnstring[2][$kk]; + $ns += $lnstring[3][$kk]; + $lnstring[4][$kk] = $no; + $lnstring[5][$kk] = $ns; + } + if ($this->isRTLTextDir()) { + $t_x = $this->lMargin - $this->endlinex + $this->cMargin - (($no - $ns) * $one_space_width); + } + // calculate additional space to add to each space + $spacelen = $one_space_width; + $spacewidth = ((($tw - $linew) + (($no - $ns) * $spacelen)) / ($ns?$ns:1)) * $this->k; + $spacewidthu = -1000 * (($tw - $linew) + ($no * $spacelen)) / ($ns?$ns:1) / $this->FontSize; + $nsmax = $ns; + $ns = 0; + reset($lnstring); + $offset = 0; + $strcount = 0; + $prev_epsposbeg = 0; + $textpos = 0; + if ($this->isRTLTextDir()) { + $textpos = $this->wPt; + } + global $spacew; + while (preg_match('/([0-9\.\+\-]*)[\s](Td|cm|m|l|c|re)[\s]/x', $pmid, $strpiece, PREG_OFFSET_CAPTURE, $offset) == 1) { + // check if we are inside a string section '[( ... )]' + $stroffset = strpos($pmid, '[(', $offset); + if (($stroffset !== false) AND ($stroffset <= $strpiece[2][1])) { + // set offset to the end of string section + $offset = strpos($pmid, ')]', $stroffset); + while (($offset !== false) AND ($pmid[($offset - 1)] == '\\')) { + $offset = strpos($pmid, ')]', ($offset + 1)); + } + if ($offset === false) { + $this->Error('HTML Justification: malformed PDF code.'); + } + continue; + } + if ($this->isRTLTextDir()) { + $spacew = ($spacewidth * ($nsmax - $ns)); + } else { + $spacew = ($spacewidth * $ns); + } + $offset = $strpiece[2][1] + strlen($strpiece[2][0]); + $epsposbeg = strpos($pmid, 'q'.$this->epsmarker, $offset); + $epsposend = strpos($pmid, $this->epsmarker.'Q', $offset) + strlen($this->epsmarker.'Q'); + if ((($epsposbeg > 0) AND ($epsposend > 0) AND ($offset > $epsposbeg) AND ($offset < $epsposend)) + OR (($epsposbeg === false) AND ($epsposend > 0) AND ($offset < $epsposend))) { + // shift EPS images + $trx = sprintf('1 0 0 1 %.3F 0 cm', $spacew); + $epsposbeg = strpos($pmid, 'q'.$this->epsmarker, ($prev_epsposbeg - 6)); + $pmid_b = substr($pmid, 0, $epsposbeg); + $pmid_m = substr($pmid, $epsposbeg, ($epsposend - $epsposbeg)); + $pmid_e = substr($pmid, $epsposend); + $pmid = $pmid_b."\nq\n".$trx."\n".$pmid_m."\nQ\n".$pmid_e; + $offset = $epsposend; + continue; + + } + $prev_epsposbeg = $epsposbeg; + $currentxpos = 0; + // shift blocks of code + switch ($strpiece[2][0]) { + case 'Td': + case 'cm': + case 'm': + case 'l': { + // get current X position + preg_match('/([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x', $pmid, $xmatches); + $currentxpos = $xmatches[1]; + $textpos = $currentxpos; + if (($strcount <= $maxkk) AND ($strpiece[2][0] == 'Td')) { + if ($strcount == $maxkk) { + if ($this->isRTLTextDir()) { + $tvalue = $lnstring[1][$strcount]; + } else { + $tvalue = rtrim($lnstring[1][$strcount]); + } + } else { + $tvalue = $lnstring[1][$strcount]; + } + $ns += substr_count($tvalue, $spacestr); + ++$strcount; + } + if ($this->isRTLTextDir()) { + $spacew = ($spacewidth * ($nsmax - $ns)); + } + // justify block + $pmid = preg_replace_callback('/([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x', + create_function('$matches', 'global $spacew; + $newx = sprintf("%.2F",(floatval($matches[1]) + $spacew)); + return "".$newx." ".$matches[2]." x*#!#*x".$matches[3].$matches[4];'), $pmid, 1); + break; + } + case 're': { + // justify block + preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s](re)([\s]*)/x', $pmid, $xmatches); + $currentxpos = $xmatches[1]; + global $x_diff, $w_diff; + $x_diff = 0; + $w_diff = 0; + if ($this->isRTLTextDir()) { // RTL + if ($currentxpos < $textpos) { + $x_diff = ($spacewidth * ($nsmax - $lnstring[5][$strcount])); + $w_diff = ($spacewidth * $lnstring[3][$strcount]); + } else { + if ($strcount > 0) { + $x_diff = ($spacewidth * ($nsmax - $lnstring[5][($strcount - 1)])); + $w_diff = ($spacewidth * $lnstring[3][($strcount - 1)]); + } + } + } else { // LTR + if ($currentxpos > $textpos) { + if ($strcount > 0) { + $x_diff = ($spacewidth * $lnstring[4][($strcount - 1)]); + } + $w_diff = ($spacewidth * $lnstring[3][$strcount]); + } else { + if ($strcount > 1) { + $x_diff = ($spacewidth * $lnstring[4][($strcount - 2)]); + } + if ($strcount > 0) { + $w_diff = ($spacewidth * $lnstring[3][($strcount - 1)]); + } + } + } + $pmid = preg_replace_callback('/('.$xmatches[1].')[\s]('.$xmatches[2].')[\s]('.$xmatches[3].')[\s]('.$strpiece[1][0].')[\s](re)([\s]*)/x', + create_function('$matches', 'global $x_diff, $w_diff; + $newx = sprintf("%.2F",(floatval($matches[1]) + $x_diff)); + $neww = sprintf("%.2F",(floatval($matches[3]) + $w_diff)); + return "".$newx." ".$matches[2]." ".$neww." ".$matches[4]." x*#!#*x".$matches[5].$matches[6];'), $pmid, 1); + break; + } + case 'c': { + // get current X position + preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s](c)([\s]*)/x', $pmid, $xmatches); + $currentxpos = $xmatches[1]; + // justify block + $pmid = preg_replace_callback('/('.$xmatches[1].')[\s]('.$xmatches[2].')[\s]('.$xmatches[3].')[\s]('.$xmatches[4].')[\s]('.$xmatches[5].')[\s]('.$strpiece[1][0].')[\s](c)([\s]*)/x', + create_function('$matches', 'global $spacew; + $newx1 = sprintf("%.3F",(floatval($matches[1]) + $spacew)); + $newx2 = sprintf("%.3F",(floatval($matches[3]) + $spacew)); + $newx3 = sprintf("%.3F",(floatval($matches[5]) + $spacew)); + return "".$newx1." ".$matches[2]." ".$newx2." ".$matches[4]." ".$newx3." ".$matches[6]." x*#!#*x".$matches[7].$matches[8];'), $pmid, 1); + break; + } + } + // shift the annotations and links + if (isset($this->PageAnnots[$this->page])) { + $cxpos = ($currentxpos / $this->k); + $lmpos = ($this->lMargin + $this->cMargin + $this->feps); + foreach ($this->PageAnnots[$this->page] as $pak => $pac) { + if (($pac['y'] >= $minstartliney) AND (($pac['x'] * $this->k) >= ($currentxpos - $this->feps)) AND (($pac['x'] * $this->k) <= ($currentxpos + $this->feps))) { + if ($cxpos > $lmpos) { + $this->PageAnnots[$this->page][$pak]['x'] += (($spacew - $one_space_width) / $this->k); + $this->PageAnnots[$this->page][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k); + } else { + $this->PageAnnots[$this->page][$pak]['w'] += ((($spacewidth * $pac['numspaces']) - $one_space_width) / $this->k); + } + break; + } + } + } + } // end of while + // remove markers + $pmid = str_replace('x*#!#*x', '', $pmid); + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + // multibyte characters + $spacew = $spacewidthu; + $pmidtemp = $pmid; + // escape special characters + $pmidtemp = preg_replace('/[\\\][\(]/x', '\\#!#OP#!#', $pmidtemp); + $pmidtemp = preg_replace('/[\\\][\)]/x', '\\#!#CP#!#', $pmidtemp); + $pmid = preg_replace_callback("/\[\(([^\)]*)\)\]/x", + create_function('$matches', 'global $spacew; + $matches[1] = str_replace("#!#OP#!#", "(", $matches[1]); + $matches[1] = str_replace("#!#CP#!#", ")", $matches[1]); + return "[(".str_replace(chr(0).chr(32), ") ".sprintf("%.3F", $spacew)." (", $matches[1]).")]";'), $pmidtemp); + $this->setPageBuffer($startlinepage, $pstart."\n".$pmid."\n".$pend); + $endlinepos = strlen($pstart."\n".$pmid."\n"); + } else { + // non-unicode (single-byte characters) + $rs = sprintf('%.3F Tw', $spacewidth); + $pmid = preg_replace("/\[\(/x", $rs.' [(', $pmid); + $this->setPageBuffer($startlinepage, $pstart."\n".$pmid."\nBT 0 Tw ET\n".$pend); + $endlinepos = strlen($pstart."\n".$pmid."\nBT 0 Tw ET\n"); + } + } + } // end of J + } // end if $startlinex + if (($t_x != 0) OR ($yshift < 0)) { + // shift the line + $trx = sprintf('1 0 0 1 %.3F %.3F cm', ($t_x * $this->k), ($yshift * $this->k)); + $this->setPageBuffer($startlinepage, $pstart."\nq\n".$trx."\n".$pmid."\nQ\n".$pend); + $endlinepos = strlen($pstart."\nq\n".$trx."\n".$pmid."\nQ\n"); + // shift the annotations and links + if (isset($this->PageAnnots[$this->page])) { + foreach ($this->PageAnnots[$this->page] as $pak => $pac) { + if ($pak >= $pask) { + $this->PageAnnots[$this->page][$pak]['x'] += $t_x; + $this->PageAnnots[$this->page][$pak]['y'] -= $yshift; + } + } + } + $this->y -= $yshift; + } + } + $this->newline = false; + $pbrk = $this->checkPageBreak($this->lasth); + $startlinex = $this->x; + $startliney = $this->y; + $minstartliney = $startliney; + $maxbottomliney = ($this->y + (($fontsize * $this->cell_height_ratio) / $this->k)); + $startlinepage = $this->page; + if (isset($endlinepos) AND (!$pbrk)) { + $startlinepos = $endlinepos; + } else { + if (!$this->InFooter) { + if (isset($this->footerlen[$this->page])) { + $this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page]; + } else { + $this->footerpos[$this->page] = $this->pagelen[$this->page]; + } + $startlinepos = $this->footerpos[$this->page]; + } else { + $startlinepos = $this->pagelen[$this->page]; + } + } + unset($endlinepos); + $plalign = $lalign; + if (isset($this->PageAnnots[$this->page])) { + $pask = count($this->PageAnnots[$this->page]); + } else { + $pask = 0; + } + $this->SetFont($fontname, $fontstyle, $fontsize); + if ($wfill) { + $this->SetFillColorArray($this->bgcolor); + } + } // end newline + if (isset($opentagpos)) { + unset($opentagpos); + } + if ($dom[$key]['tag']) { + if ($dom[$key]['opening']) { + // get text indentation (if any) + if (isset($dom[$key]['text-indent']) AND $dom[$key]['block']) { + $this->textindent = $dom[$key]['text-indent']; + $this->newline = true; + } + if ($dom[$key]['value'] == 'table') { + // available page width + if ($this->rtl) { + $wtmp = $this->x - $this->lMargin; + } else { + $wtmp = $this->w - $this->rMargin - $this->x; + } + if (isset($dom[$key]['attribute']['nested']) AND ($dom[$key]['attribute']['nested'] == 'true')) { + // add margin for nested tables + $wtmp -= $this->cMargin; + } + // table width + if (isset($dom[$key]['width'])) { + $table_width = $this->getHTMLUnitToUnits($dom[$key]['width'], $wtmp, 'px'); + } else { + $table_width = $wtmp; + } + } + if (($dom[$key]['value'] == 'td') OR ($dom[$key]['value'] == 'th')) { + $trid = $dom[$key]['parent']; + $table_el = $dom[$trid]['parent']; + if (!isset($dom[$table_el]['cols'])) { + $dom[$table_el]['cols'] = $dom[$trid]['cols']; + } + $oldmargin = $this->cMargin; + if (isset($dom[($dom[$trid]['parent'])]['attribute']['cellpadding'])) { + $currentcmargin = $this->getHTMLUnitToUnits($dom[($dom[$trid]['parent'])]['attribute']['cellpadding'], 1, 'px'); + } else { + $currentcmargin = 0; + } + $this->cMargin = $currentcmargin; + if (isset($dom[($dom[$trid]['parent'])]['attribute']['cellspacing'])) { + $cellspacing = $this->getHTMLUnitToUnits($dom[($dom[$trid]['parent'])]['attribute']['cellspacing'], 1, 'px'); + } else { + $cellspacing = 0; + } + if ($this->rtl) { + $cellspacingx = -$cellspacing; + } else { + $cellspacingx = $cellspacing; + } + $colspan = $dom[$key]['attribute']['colspan']; + $table_columns_width = ($table_width - ($cellspacing * ($dom[$table_el]['cols'] - 1))); + $wtmp = ($colspan * ($table_columns_width / $dom[$table_el]['cols'])) + (($colspan - 1) * $cellspacing); + if (isset($dom[$key]['width'])) { + $cellw = $this->getHTMLUnitToUnits($dom[$key]['width'], $table_columns_width, 'px'); + } else { + $cellw = $wtmp; + } + if (isset($dom[$key]['height'])) { + // minimum cell height + $cellh = $this->getHTMLUnitToUnits($dom[$key]['height'], 0, 'px'); + } else { + $cellh = 0; + } + if (isset($dom[$key]['content'])) { + $cell_content = $dom[$key]['content']; + } else { + $cell_content = ' '; + } + $tagtype = $dom[$key]['value']; + $parentid = $key; + while (($key < $maxel) AND (!(($dom[$key]['tag']) AND (!$dom[$key]['opening']) AND ($dom[$key]['value'] == $tagtype) AND ($dom[$key]['parent'] == $parentid)))) { + // move $key index forward + ++$key; + } + if (!isset($dom[$trid]['startpage'])) { + $dom[$trid]['startpage'] = $this->page; + } else { + $this->setPage($dom[$trid]['startpage']); + } + if (!isset($dom[$trid]['starty'])) { + $dom[$trid]['starty'] = $this->y; + } else { + $this->y = $dom[$trid]['starty']; + } + if (!isset($dom[$trid]['startx'])) { + $dom[$trid]['startx'] = $this->x; + } else { + $this->x += ($cellspacingx / 2); + } + if (isset($dom[$parentid]['attribute']['rowspan'])) { + $rowspan = intval($dom[$parentid]['attribute']['rowspan']); + } else { + $rowspan = 1; + } + // skip row-spanned cells started on the previous rows + if (isset($dom[$table_el]['rowspans'])) { + $rsk = 0; + $rskmax = count($dom[$table_el]['rowspans']); + while ($rsk < $rskmax) { + $trwsp = $dom[$table_el]['rowspans'][$rsk]; + $rsstartx = $trwsp['startx']; + $rsendx = $trwsp['endx']; + // account for margin changes + if ($trwsp['startpage'] < $this->page) { + if (($this->rtl) AND ($this->pagedim[$this->page]['orm'] != $this->pagedim[$trwsp['startpage']]['orm'])) { + $dl = ($this->pagedim[$this->page]['orm'] - $this->pagedim[$trwsp['startpage']]['orm']); + $rsstartx -= $dl; + $rsendx -= $dl; + } elseif ((!$this->rtl) AND ($this->pagedim[$this->page]['olm'] != $this->pagedim[$trwsp['startpage']]['olm'])) { + $dl = ($this->pagedim[$this->page]['olm'] - $this->pagedim[$trwsp['startpage']]['olm']); + $rsstartx += $dl; + $rsendx += $dl; + } + } + if (($trwsp['rowspan'] > 0) + AND ($rsstartx > ($this->x - $cellspacing - $currentcmargin - $this->feps)) + AND ($rsstartx < ($this->x + $cellspacing + $currentcmargin + $this->feps)) + AND (($trwsp['starty'] < ($this->y - $this->feps)) OR ($trwsp['startpage'] < $this->page))) { + // set the starting X position of the current cell + $this->x = $rsendx + $cellspacingx; + if (($trwsp['rowspan'] == 1) + AND (isset($dom[$trid]['endy'])) + AND (isset($dom[$trid]['endpage'])) + AND ($trwsp['endpage'] == $dom[$trid]['endpage'])) { + // set ending Y position for row + $dom[$table_el]['rowspans'][$rsk]['endy'] = max($dom[$trid]['endy'], $trwsp['endy']); + $dom[$trid]['endy'] = $dom[$table_el]['rowspans'][$rsk]['endy']; + } + $rsk = 0; + } else { + ++$rsk; + } + } + } + // add rowspan information to table element + if ($rowspan > 1) { + $trsid = array_push($dom[$table_el]['rowspans'], array('trid' => $trid, 'rowspan' => $rowspan, 'mrowspan' => $rowspan, 'colspan' => $colspan, 'startpage' => $this->page, 'startx' => $this->x, 'starty' => $this->y)); + } + $cellid = array_push($dom[$trid]['cellpos'], array('startx' => $this->x)); + if ($rowspan > 1) { + $dom[$trid]['cellpos'][($cellid - 1)]['rowspanid'] = ($trsid - 1); + } + // push background colors + if (isset($dom[$parentid]['bgcolor']) AND ($dom[$parentid]['bgcolor'] !== false)) { + $dom[$trid]['cellpos'][($cellid - 1)]['bgcolor'] = $dom[$parentid]['bgcolor']; + } + $prevLastH = $this->lasth; + // ****** write the cell content ****** + $this->MultiCell($cellw, $cellh, $cell_content, false, $lalign, false, 2, '', '', true, 0, true); + $this->lasth = $prevLastH; + $this->cMargin = $oldmargin; + $dom[$trid]['cellpos'][($cellid - 1)]['endx'] = $this->x; + // update the end of row position + if ($rowspan <= 1) { + if (isset($dom[$trid]['endy'])) { + if ($this->page == $dom[$trid]['endpage']) { + $dom[$trid]['endy'] = max($this->y, $dom[$trid]['endy']); + } elseif ($this->page > $dom[$trid]['endpage']) { + $dom[$trid]['endy'] = $this->y; + } + } else { + $dom[$trid]['endy'] = $this->y; + } + if (isset($dom[$trid]['endpage'])) { + $dom[$trid]['endpage'] = max($this->page, $dom[$trid]['endpage']); + } else { + $dom[$trid]['endpage'] = $this->page; + } + } else { + // account for row-spanned cells + $dom[$table_el]['rowspans'][($trsid - 1)]['endx'] = $this->x; + $dom[$table_el]['rowspans'][($trsid - 1)]['endy'] = $this->y; + $dom[$table_el]['rowspans'][($trsid - 1)]['endpage'] = $this->page; + } + if (isset($dom[$table_el]['rowspans'])) { + // update endy and endpage on rowspanned cells + foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) { + if ($trwsp['rowspan'] > 0) { + if (isset($dom[$trid]['endpage'])) { + if ($trwsp['endpage'] == $dom[$trid]['endpage']) { + $dom[$table_el]['rowspans'][$k]['endy'] = max($dom[$trid]['endy'], $trwsp['endy']); + } elseif ($trwsp['endpage'] < $dom[$trid]['endpage']) { + $dom[$table_el]['rowspans'][$k]['endy'] = $dom[$trid]['endy']; + $dom[$table_el]['rowspans'][$k]['endpage'] = $dom[$trid]['endpage']; + } else { + $dom[$trid]['endy'] = $this->pagedim[$dom[$trid]['endpage']]['hk'] - $this->pagedim[$dom[$trid]['endpage']]['bm']; + } + } + } + } + } + $this->x += ($cellspacingx / 2); + } else { + // opening tag (or self-closing tag) + if (!isset($opentagpos)) { + if (!$this->InFooter) { + if (isset($this->footerlen[$this->page])) { + $this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page]; + } else { + $this->footerpos[$this->page] = $this->pagelen[$this->page]; + } + $opentagpos = $this->footerpos[$this->page]; + } + } + $this->openHTMLTagHandler($dom, $key, $cell); + } + } else { + // closing tag + $this->closeHTMLTagHandler($dom, $key, $cell, $maxbottomliney); + } + } elseif (strlen($dom[$key]['value']) > 0) { + // print list-item + if (!$this->empty_string($this->lispacer)) { + $this->SetFont($pfontname, $pfontstyle, $pfontsize); + $this->lasth = $this->FontSize * $this->cell_height_ratio; + $minstartliney = $this->y; + $maxbottomliney = ($startliney + ($this->FontSize * $this->cell_height_ratio)); + $this->putHtmlListBullet($this->listnum, $this->lispacer, $pfontsize); + $this->SetFont($curfontname, $curfontstyle, $curfontsize); + $this->lasth = $this->FontSize * $this->cell_height_ratio; + if (is_numeric($pfontsize) AND ($pfontsize > 0) AND is_numeric($curfontsize) AND ($curfontsize > 0) AND ($pfontsize != $curfontsize)) { + $pfontascent = $this->getFontAscent($pfontname, $pfontstyle, $pfontsize); + $pfontdescent = $this->getFontDescent($pfontname, $pfontstyle, $pfontsize); + $this->y += ((($pfontsize - $curfontsize) * $this->cell_height_ratio / $this->k) + $pfontascent - $curfontascent - $pfontdescent + $curfontdescent) / 2; + $minstartliney = min($this->y, $minstartliney); + $maxbottomliney = max(($this->y + (($pfontsize * $this->cell_height_ratio) / $this->k)), $maxbottomliney); + } + } + // text + $this->htmlvspace = 0; + if ((!$this->premode) AND $this->isRTLTextDir()) { + // reverse spaces order + $len1 = strlen($dom[$key]['value']); + $lsp = $len1 - strlen(ltrim($dom[$key]['value'])); + $rsp = $len1 - strlen(rtrim($dom[$key]['value'])); + $tmpstr = ''; + if ($rsp > 0) { + $tmpstr .= substr($dom[$key]['value'], -$rsp); + } + $tmpstr .= trim($dom[$key]['value']); + if ($lsp > 0) { + $tmpstr .= substr($dom[$key]['value'], 0, $lsp); + } + $dom[$key]['value'] = $tmpstr; + } + if ($newline) { + if (!$this->premode) { + $prelen = strlen($dom[$key]['value']); + if ($this->isRTLTextDir()) { + $dom[$key]['value'] = rtrim($dom[$key]['value']).chr(0); + } else { + $dom[$key]['value'] = ltrim($dom[$key]['value']); + } + $postlen = strlen($dom[$key]['value']); + if (($postlen == 0) AND ($prelen > 0)) { + $dom[$key]['trimmed_space'] = true; + } + } + $newline = false; + $firstblock = true; + } else { + $firstblock = false; + } + $strrest = ''; + if ($this->rtl) { + $this->x -= $this->textindent; + } else { + $this->x += $this->textindent; + } + if (!empty($this->HREF) AND (isset($this->HREF['url']))) { + // HTML Link + $strrest = $this->addHtmlLink($this->HREF['url'], $dom[$key]['value'], $wfill, true, $this->HREF['color'], $this->HREF['style'], true); + } else { + // ****** write only until the end of the line and get the rest ****** + $strrest = $this->Write($this->lasth, $dom[$key]['value'], '', $wfill, '', false, 0, true, $firstblock, 0); + } + $this->textindent = 0; + + if (strlen($strrest) > 0) { + // store the remaining string on the previous $key position + $this->newline = true; + if ($cell) { + if ($this->rtl) { + $this->x -= $this->cMargin; + } else { + $this->x += $this->cMargin; + } + } + if ($strrest == $dom[$key]['value']) { + // used to avoid infinite loop + ++$loop; + } else { + $loop = 0; + } + if (!empty($this->HREF) AND (isset($this->HREF['url']))) { + $dom[$key]['value'] = trim($strrest); + } elseif ($this->premode) { + $dom[$key]['value'] = $strrest; + } elseif ($this->isRTLTextDir()) { + $dom[$key]['value'] = rtrim($strrest); + } else { + $dom[$key]['value'] = ltrim($strrest); + } + if ($loop < 3) { + --$key; + } + } else { + $loop = 0; + } + } + ++$key; + if (isset($dom[$key]['tag']) AND $dom[$key]['tag'] AND (!isset($dom[$key]['opening']) OR !$dom[$key]['opening']) AND isset($dom[($dom[$key]['parent'])]['attribute']['nobr']) AND ($dom[($dom[$key]['parent'])]['attribute']['nobr'] == 'true')) { + if ( (!$undo) AND (($this->start_transaction_page == ($this->numpages - 1)) OR ($this->y < $this->start_transaction_y))) { + // restore previous object + $this->rollbackTransaction(true); + // restore previous values + foreach ($this_method_vars as $vkey => $vval) { + $$vkey = $vval; + } + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $pre_y = $this->y; + if ((!$this->checkPageBreak($this->PageBreakTrigger + 1)) AND ($this->y < $pre_y)) { + $startliney = $this->y; + } + $undo = true; // avoid infinite loop + } else { + $undo = false; + } + } + } // end for each $key + // align the last line + if (isset($startlinex)) { + $yshift = $minstartliney - $startliney; + if (($yshift > 0) OR ($this->page > $startlinepage)) { + $yshift = 0; + } + $t_x = 0; + // the last line must be shifted to be aligned as requested + $linew = abs($this->endlinex - $startlinex); + $pstart = substr($this->getPageBuffer($startlinepage), 0, $startlinepos); + if (isset($opentagpos) AND isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)) { + $this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage]; + $midpos = min($opentagpos, $this->footerpos[$startlinepage]); + } elseif (isset($opentagpos)) { + $midpos = $opentagpos; + } elseif (isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)) { + $this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage]; + $midpos = $this->footerpos[$startlinepage]; + } else { + $midpos = 0; + } + if ($midpos > 0) { + $pmid = substr($this->getPageBuffer($startlinepage), $startlinepos, ($midpos - $startlinepos)); + $pend = substr($this->getPageBuffer($startlinepage), $midpos); + } else { + $pmid = substr($this->getPageBuffer($startlinepage), $startlinepos); + $pend = ''; + } + if ((isset($plalign) AND ((($plalign == 'C') OR (($plalign == 'R') AND (!$this->rtl)) OR (($plalign == 'L') AND ($this->rtl))))) OR ($yshift < 0)) { + // calculate shifting amount + $tw = $w; + if ($this->lMargin != $prevlMargin) { + $tw += ($prevlMargin - $this->lMargin); + } + if ($this->rMargin != $prevrMargin) { + $tw += ($prevrMargin - $this->rMargin); + } + $one_space_width = $this->GetStringWidth(chr(32)); + $mdiff = abs($tw - $linew); + if ($plalign == 'C') { + if ($this->rtl) { + $t_x = -($mdiff / 2); + } else { + $t_x = ($mdiff / 2); + } + } elseif (($plalign == 'R') AND (!$this->rtl)) { + // right alignment on LTR document + if (intval($this->revstrpos($pmid, ')]')) == (intval($this->revstrpos($pmid, ' )]')) + 1)) { + // remove last space (if any) + $linew -= $one_space_width; + $mdiff = abs($tw - $linew); + } + $t_x = $mdiff; + } elseif (($plalign == 'L') AND ($this->rtl)) { + // left alignment on RTL document + if (($this->revstrpos($pmid, '[(') > 0) AND ((intval($this->revstrpos($pmid, '[( ')) == intval($this->revstrpos($pmid, '[('))) OR (intval($this->revstrpos($pmid, '[('.chr(0).chr(32))) == intval($this->revstrpos($pmid, '[('))))) { + // remove first space (if any) + $linew -= $one_space_width; + } + if ((strpos($pmid, '[(') > 0) AND (intval(strpos($pmid, '[(')) == (intval($this->revstrpos($pmid, '[('))))) { + // remove last space (if any) + $linew -= $one_space_width; + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + $linew -= $one_space_width; + } + } + $mdiff = abs($tw - $linew); + $t_x = -$mdiff; + } + } // end if startlinex + if (($t_x != 0) OR ($yshift < 0)) { + // shift the line + $trx = sprintf('1 0 0 1 %.3F %.3F cm', ($t_x * $this->k), ($yshift * $this->k)); + $this->setPageBuffer($startlinepage, $pstart."\nq\n".$trx."\n".$pmid."\nQ\n".$pend); + $endlinepos = strlen($pstart."\nq\n".$trx."\n".$pmid."\nQ\n"); + // shift the annotations and links + if (isset($this->PageAnnots[$this->page])) { + foreach ($this->PageAnnots[$this->page] as $pak => $pac) { + if ($pak >= $pask) { + $this->PageAnnots[$this->page][$pak]['x'] += $t_x; + $this->PageAnnots[$this->page][$pak]['y'] -= $yshift; + } + } + } + $this->y -= $yshift; + } + } + if ($ln AND (!($cell AND ($dom[$key-1]['value'] == 'table')))) { + $this->Ln($this->lasth); + if ($this->y < $maxbottomliney) { + $this->y = $maxbottomliney; + } + } + // restore previous values + $this->setGraphicVars($gvars); + if ($this->page > $prevPage) { + $this->lMargin = $this->pagedim[$this->page]['olm']; + $this->rMargin = $this->pagedim[$this->page]['orm']; + } + // restore previous list state + $this->cell_height_ratio = $prev_cell_height_ratio; + $this->listnum = $prev_listnum; + $this->listordered = $prev_listordered; + $this->listcount = $prev_listcount; + $this->lispacer = $prev_lispacer; + unset($dom); + } + + /** + * Process opening tags. + * @param array $dom html dom array + * @param int $key current element id + * @param boolean $cell if true add the default cMargin space to each new line (default false). + * @access protected + */ + protected function openHTMLTagHandler(&$dom, $key, $cell) { + $tag = $dom[$key]; + $parent = $dom[($dom[$key]['parent'])]; + $firstorlast = ($key == 1); + // check for text direction attribute + if (isset($tag['attribute']['dir'])) { + $this->setTempRTL($tag['attribute']['dir']); + } else { + $this->tmprtl = false; + } + if ($tag['block']) { + $hbz = 0; // distance from y to line bottom + $hb = 0; // vertical space between block tags + // calculate vertical space for block tags + if (isset($this->tagvspaces[$tag['value']][0]['h']) AND ($this->tagvspaces[$tag['value']][0]['h'] >= 0)) { + $cur_h = $this->tagvspaces[$tag['value']][0]['h']; + } elseif (isset($tag['fontsize'])) { + $cur_h = ($tag['fontsize'] / $this->k) * $this->cell_height_ratio; + } else { + $cur_h = $this->FontSize * $this->cell_height_ratio; + } + if (isset($this->tagvspaces[$tag['value']][0]['n'])) { + $n = $this->tagvspaces[$tag['value']][0]['n']; + } elseif (preg_match('/[h][0-9]/', $tag['value']) > 0) { + $n = 0.6; + } else { + $n = 1; + } + $hb = ($n * $cur_h); + if (($this->htmlvspace <= 0) AND ($n > 0)) { + if (isset($parent['fontsize'])) { + $hbz = (($parent['fontsize'] / $this->k) * $this->cell_height_ratio); + } else { + $hbz = $this->FontSize * $this->cell_height_ratio; + } + } + } + //Opening tag + switch($tag['value']) { + case 'table': { + $cp = 0; + $cs = 0; + $dom[$key]['rowspans'] = array(); + if (!isset($dom[$key]['attribute']['nested']) OR ($dom[$key]['attribute']['nested'] != 'true')) { + // set table header + if (!$this->empty_string($dom[$key]['thead'])) { + // set table header + $this->thead = $dom[$key]['thead']; + if (!isset($this->theadMargins) OR (empty($this->theadMargins))) { + $this->theadMargins = array(); + $this->theadMargins['cmargin'] = $this->cMargin; + } + } + } + if (isset($tag['attribute']['cellpadding'])) { + $cp = $this->getHTMLUnitToUnits($tag['attribute']['cellpadding'], 1, 'px'); + $this->oldcMargin = $this->cMargin; + $this->cMargin = $cp; + } + if (isset($tag['attribute']['cellspacing'])) { + $cs = $this->getHTMLUnitToUnits($tag['attribute']['cellspacing'], 1, 'px'); + } + if ($this->checkPageBreak(((2 * $cp) + (2 * $cs) + $this->lasth), '', false)) { + $this->inthead = true; + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + break; + } + case 'tr': { + // array of columns positions + $dom[$key]['cellpos'] = array(); + break; + } + case 'hr': { + $wtmp = $this->w - $this->lMargin - $this->rMargin; + if ((isset($tag['attribute']['width'])) AND ($tag['attribute']['width'] != '')) { + $hrWidth = $this->getHTMLUnitToUnits($tag['attribute']['width'], $wtmp, 'px'); + } else { + $hrWidth = $wtmp; + } + if ((isset($tag['height'])) AND ($tag['height'] != '')) { + $hrHeight = $this->getHTMLUnitToUnits($tag['height'], 1, 'px'); + } else { + $hrHeight = $this->GetLineWidth(); + } + $this->addHTMLVertSpace($hbz, ($hrHeight / 2), $cell, $firstorlast); + $x = $this->GetX(); + $y = $this->GetY(); + $prevlinewidth = $this->GetLineWidth(); + $this->SetLineWidth($hrHeight); + $this->Line($x, $y, $x + $hrWidth, $y); + $this->SetLineWidth($prevlinewidth); + $this->addHTMLVertSpace(($hrHeight / 2), 0, $cell, !isset($dom[($key + 1)])); + break; + } + case 'a': { + if (array_key_exists('href', $tag['attribute'])) { + $this->HREF['url'] = $tag['attribute']['href']; + } + $this->HREF['color'] = $this->htmlLinkColorArray; + $this->HREF['style'] = $this->htmlLinkFontStyle; + if (array_key_exists('style', $tag['attribute'])) { + // get style attributes + preg_match_all('/([^;:\s]*):([^;]*)/', $tag['attribute']['style'], $style_array, PREG_PATTERN_ORDER); + $astyle = array(); + while (list($id, $name) = each($style_array[1])) { + $name = strtolower($name); + $astyle[$name] = trim($style_array[2][$id]); + } + if (isset($astyle['color'])) { + $this->HREF['color'] = $this->convertHTMLColorToDec($astyle['color']); + } + if (isset($astyle['text-decoration'])) { + $this->HREF['style'] = ''; + $decors = explode(' ', strtolower($astyle['text-decoration'])); + foreach ($decors as $dec) { + $dec = trim($dec); + if (!$this->empty_string($dec)) { + if ($dec[0] == 'u') { + // underline + $this->HREF['style'] .= 'U'; + } elseif ($dec[0] == 'l') { + // line-trough + $this->HREF['style'] .= 'D'; + } elseif ($dec[0] == 'o') { + // overline + $this->HREF['style'] .= 'O'; + } + } + } + } + } + break; + } + case 'img': { + if (isset($tag['attribute']['src'])) { + // replace relative path with real server path + if (($tag['attribute']['src'][0] == '/') AND ($_SERVER['DOCUMENT_ROOT'] != '/')) { + $findroot = strpos($tag['attribute']['src'], $_SERVER['DOCUMENT_ROOT']); + if (($findroot === false) OR ($findroot > 1)) { + $tag['attribute']['src'] = $_SERVER['DOCUMENT_ROOT'].$tag['attribute']['src']; + } + } + $tag['attribute']['src'] = urldecode($tag['attribute']['src']); + $type = $this->getImageFileType($tag['attribute']['src']); + $testscrtype = @parse_url($tag['attribute']['src']); + if (!isset($testscrtype['query']) OR empty($testscrtype['query'])) { + // convert URL to server path + $tag['attribute']['src'] = str_replace(K_PATH_URL, K_PATH_MAIN, $tag['attribute']['src']); + } + if (!isset($tag['attribute']['width'])) { + $tag['attribute']['width'] = 0; + } + if (!isset($tag['attribute']['height'])) { + $tag['attribute']['height'] = 0; + } + //if (!isset($tag['attribute']['align'])) { + // the only alignment supported is "bottom" + // further development is required for other modes. + $tag['attribute']['align'] = 'bottom'; + //} + switch($tag['attribute']['align']) { + case 'top': { + $align = 'T'; + break; + } + case 'middle': { + $align = 'M'; + break; + } + case 'bottom': { + $align = 'B'; + break; + } + default: { + $align = 'B'; + break; + } + } + $prevy = $this->y; + $xpos = $this->GetX(); + // eliminate marker spaces + if (isset($dom[($key - 1)])) { + if (($dom[($key - 1)]['value'] == ' ') OR (isset($dom[($key - 1)]['trimmed_space']))) { + $xpos -= $this->GetStringWidth(chr(32)); + } elseif ($this->rtl AND $dom[($key - 1)]['value'] == ' ') { + $xpos -= (2 * $this->GetStringWidth(chr(32))); + } + } + $imglink = ''; + if (isset($this->HREF['url']) AND !$this->empty_string($this->HREF['url'])) { + $imglink = $this->HREF['url']; + if ($imglink[0] == '#') { + // convert url to internal link + $page = intval(substr($imglink, 1)); + $imglink = $this->AddLink(); + $this->SetLink($imglink, 0, $page); + } + } + $border = 0; + if (isset($tag['attribute']['border']) AND !empty($tag['attribute']['border'])) { + // currently only support 1 (frame) or a combination of 'LTRB' + $border = $tag['attribute']['border']; + } + $iw = ''; + if (isset($tag['attribute']['width'])) { + $iw = $this->getHTMLUnitToUnits($tag['attribute']['width'], 1, 'px', false); + } + $ih = ''; + if (isset($tag['attribute']['height'])) { + $ih = $this->getHTMLUnitToUnits($tag['attribute']['height'], 1, 'px', false); + } + if (($type == 'eps') OR ($type == 'ai')) { + $this->ImageEps($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, $imglink, true, $align, '', $border, true); + } elseif ($type == 'svg') { + $this->ImageSVG($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, $imglink, $align, '', $border, true); + } else { + $this->Image($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, '', $imglink, $align, false, 300, '', false, false, $border, false, false, true); + } + switch($align) { + case 'T': { + $this->y = $prevy; + break; + } + case 'M': { + $this->y = (($this->img_rb_y + $prevy - ($tag['fontsize'] / $this->k)) / 2) ; + break; + } + case 'B': { + $this->y = $this->img_rb_y - ($tag['fontsize'] / $this->k); + break; + } + } + } + break; + } + case 'dl': { + ++$this->listnum; + if ($this->listnum == 1) { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firstorlast); + } else { + $this->addHTMLVertSpace(0, 0, $cell, $firstorlast); + } + break; + } + case 'dt': { + $this->addHTMLVertSpace($hbz, 0, $cell, $firstorlast); + break; + } + case 'dd': { + if ($this->rtl) { + $this->rMargin += $this->listindent; + } else { + $this->lMargin += $this->listindent; + } + ++$this->listindentlevel; + $this->addHTMLVertSpace($hbz, 0, $cell, $firstorlast); + break; + } + case 'ul': + case 'ol': { + ++$this->listnum; + if ($tag['value'] == 'ol') { + $this->listordered[$this->listnum] = true; + } else { + $this->listordered[$this->listnum] = false; + } + if (isset($tag['attribute']['start'])) { + $this->listcount[$this->listnum] = intval($tag['attribute']['start']) - 1; + } else { + $this->listcount[$this->listnum] = 0; + } + if ($this->rtl) { + $this->rMargin += $this->listindent; + } else { + $this->lMargin += $this->listindent; + } + ++$this->listindentlevel; + if ($this->listnum == 1) { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firstorlast); + } else { + $this->addHTMLVertSpace(0, 0, $cell, $firstorlast); + } + break; + } + case 'li': { + $this->addHTMLVertSpace($hbz, 0, $cell, $firstorlast); + if ($this->listordered[$this->listnum]) { + // ordered item + if (isset($parent['attribute']['type']) AND !$this->empty_string($parent['attribute']['type'])) { + $this->lispacer = $parent['attribute']['type']; + } elseif (isset($parent['listtype']) AND !$this->empty_string($parent['listtype'])) { + $this->lispacer = $parent['listtype']; + } elseif (isset($this->lisymbol) AND !$this->empty_string($this->lisymbol)) { + $this->lispacer = $this->lisymbol; + } else { + $this->lispacer = '#'; + } + ++$this->listcount[$this->listnum]; + if (isset($tag['attribute']['value'])) { + $this->listcount[$this->listnum] = intval($tag['attribute']['value']); + } + } else { + // unordered item + if (isset($parent['attribute']['type']) AND !$this->empty_string($parent['attribute']['type'])) { + $this->lispacer = $parent['attribute']['type']; + } elseif (isset($parent['listtype']) AND !$this->empty_string($parent['listtype'])) { + $this->lispacer = $parent['listtype']; + } elseif (isset($this->lisymbol) AND !$this->empty_string($this->lisymbol)) { + $this->lispacer = $this->lisymbol; + } else { + $this->lispacer = '!'; + } + } + break; + } + case 'blockquote': { + if ($this->rtl) { + $this->rMargin += $this->listindent; + } else { + $this->lMargin += $this->listindent; + } + ++$this->listindentlevel; + $this->addHTMLVertSpace($hbz, $hb, $cell, $firstorlast); + break; + } + case 'br': { + $this->addHTMLVertSpace($hbz, 0, $cell, $firstorlast); + break; + } + case 'div': { + $this->addHTMLVertSpace($hbz, 0, $cell, $firstorlast); + break; + } + case 'p': { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firstorlast); + break; + } + case 'pre': { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firstorlast); + $this->premode = true; + break; + } + case 'sup': { + $this->SetXY($this->GetX(), $this->GetY() - ((0.7 * $this->FontSizePt) / $this->k)); + break; + } + case 'sub': { + $this->SetXY($this->GetX(), $this->GetY() + ((0.3 * $this->FontSizePt) / $this->k)); + break; + } + case 'h1': + case 'h2': + case 'h3': + case 'h4': + case 'h5': + case 'h6': { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firstorlast); + break; + } + // Form fields (since 4.8.000 - 2009-09-07) + case 'form': { + if (isset($tag['attribute']['action'])) { + $this->form_action = $tag['attribute']['action']; + } else { + $this->form_action = K_PATH_URL.$_SERVER['SCRIPT_NAME']; + } + if (isset($tag['attribute']['enctype'])) { + $this->form_enctype = $tag['attribute']['enctype']; + } else { + $this->form_enctype = 'application/x-www-form-urlencoded'; + } + if (isset($tag['attribute']['method'])) { + $this->form_mode = $tag['attribute']['method']; + } else { + $this->form_mode = 'post'; + } + break; + } + case 'input': { + if (isset($tag['attribute']['name']) AND !$this->empty_string($tag['attribute']['name'])) { + $name = $tag['attribute']['name']; + } else { + break; + } + $prop = array(); + $opt = array(); + if (isset($tag['attribute']['value']) AND !$this->empty_string($tag['attribute']['value'])) { + $value = $tag['attribute']['value']; + } + if (isset($tag['attribute']['maxlength']) AND !$this->empty_string($tag['attribute']['maxlength'])) { + $opt['maxlen'] = intval($tag['attribute']['value']); + } + $h = $this->FontSize * $this->cell_height_ratio; + if (isset($tag['attribute']['size']) AND !$this->empty_string($tag['attribute']['size'])) { + $w = intval($tag['attribute']['size']) * $this->GetStringWidth(chr(32)) * 2; + } else { + $w = $h; + } + if (isset($tag['attribute']['checked']) AND (($tag['attribute']['checked'] == 'checked') OR ($tag['attribute']['checked'] == 'true'))) { + $checked = true; + } else { + $checked = false; + } + switch ($tag['attribute']['type']) { + case 'text': { + if (isset($value)) { + $opt['v'] = $value; + } + $this->TextField($name, $w, $h, $prop, $opt, '', '', false); + break; + } + case 'password': { + if (isset($value)) { + $opt['v'] = $value; + } + $prop['password'] = 'true'; + $this->TextField($name, $w, $h, $prop, $opt, '', '', false); + break; + } + case 'checkbox': { + $this->CheckBox($name, $w, $checked, $prop, $opt, $value, '', '', false); + break; + } + case 'radio': { + $this->RadioButton($name, $w, $prop, $opt, $value, $checked, '', '', false); + break; + } + case 'submit': { + $w = $this->GetStringWidth($value) * 1.5; + $h *= 1.6; + $prop = array('lineWidth'=>1, 'borderStyle'=>'beveled', 'fillColor'=>array(196, 196, 196), 'strokeColor'=>array(255, 255, 255)); + $action = array(); + $action['S'] = 'SubmitForm'; + $action['F'] = $this->form_action; + if ($this->form_enctype != 'FDF') { + $action['Flags'] = array('ExportFormat'); + } + if ($this->form_mode == 'get') { + $action['Flags'] = array('GetMethod'); + } + $this->Button($name, $w, $h, $value, $action, $prop, $opt, '', '', false); + break; + } + case 'reset': { + $w = $this->GetStringWidth($value) * 1.5; + $h *= 1.6; + $prop = array('lineWidth'=>1, 'borderStyle'=>'beveled', 'fillColor'=>array(196, 196, 196), 'strokeColor'=>array(255, 255, 255)); + $this->Button($name, $w, $h, $value, array('S'=>'ResetForm'), $prop, $opt, '', '', false); + break; + } + case 'file': { + $prop['fileSelect'] = 'true'; + $this->TextField($name, $w, $h, $prop, $opt, '', '', false); + if (!isset($value)) { + $value = '*'; + } + $w = $this->GetStringWidth($value) * 2; + $h *= 1.2; + $prop = array('lineWidth'=>1, 'borderStyle'=>'beveled', 'fillColor'=>array(196, 196, 196), 'strokeColor'=>array(255, 255, 255)); + $jsaction = 'var f=this.getField(\''.$name.'\'); f.browseForFileToSubmit();'; + $this->Button('FB_'.$name, $w, $h, $value, $jsaction, $prop, $opt, '', '', false); + break; + } + case 'hidden': { + if (isset($value)) { + $opt['v'] = $value; + } + $opt['f'] = array('invisible', 'hidden'); + $this->TextField($name, 0, 0, $prop, $opt, '', '', false); + break; + } + case 'image': { + // THIS TYPE MUST BE FIXED + if (isset($tag['attribute']['src']) AND !$this->empty_string($tag['attribute']['src'])) { + $img = $tag['attribute']['src']; + } else { + break; + } + $value = 'img'; + //$opt['mk'] = array('i'=>$img, 'tp'=>1, 'if'=>array('sw'=>'A', 's'=>'A', 'fb'=>false)); + if (isset($tag['attribute']['onclick']) AND !empty($tag['attribute']['onclick'])) { + $jsaction = $tag['attribute']['onclick']; + } else { + $jsaction = ''; + } + $this->Button($name, $w, $h, $value, $jsaction, $prop, $opt, '', '', false); + break; + } + case 'button': { + $w = $this->GetStringWidth($value) * 1.5; + $h *= 1.6; + $prop = array('lineWidth'=>1, 'borderStyle'=>'beveled', 'fillColor'=>array(196, 196, 196), 'strokeColor'=>array(255, 255, 255)); + if (isset($tag['attribute']['onclick']) AND !empty($tag['attribute']['onclick'])) { + $jsaction = $tag['attribute']['onclick']; + } else { + $jsaction = ''; + } + $this->Button($name, $w, $h, $value, $jsaction, $prop, $opt, '', '', false); + break; + } + } + break; + } + case 'textarea': { + $prop = array(); + $opt = array(); + if (isset($tag['attribute']['name']) AND !$this->empty_string($tag['attribute']['name'])) { + $name = $tag['attribute']['name']; + } else { + break; + } + if (isset($tag['attribute']['value']) AND !$this->empty_string($tag['attribute']['value'])) { + $opt['v'] = $tag['attribute']['value']; + } + if (isset($tag['attribute']['cols']) AND !$this->empty_string($tag['attribute']['cols'])) { + $w = intval($tag['attribute']['cols']) * $this->GetStringWidth(chr(32)) * 2; + } else { + $w = 40; + } + if (isset($tag['attribute']['rows']) AND !$this->empty_string($tag['attribute']['rows'])) { + $h = intval($tag['attribute']['rows']) * $this->FontSize * $this->cell_height_ratio; + } else { + $h = 10; + } + $prop['multiline'] = 'true'; + $this->TextField($name, $w, $h, $prop, $opt, '', '', false); + break; + } + case 'select': { + $h = $this->FontSize * $this->cell_height_ratio; + if (isset($tag['attribute']['size']) AND !$this->empty_string($tag['attribute']['size'])) { + $h *= ($tag['attribute']['size'] + 1); + } + $prop = array(); + $opt = array(); + if (isset($tag['attribute']['name']) AND !$this->empty_string($tag['attribute']['name'])) { + $name = $tag['attribute']['name']; + } else { + break; + } + $w = 0; + if (isset($tag['attribute']['opt']) AND !$this->empty_string($tag['attribute']['opt'])) { + $options = explode ("\r", $tag['attribute']['opt']); + $values = array(); + foreach ($options as $val) { + if (strpos($val, "\t") !== false) { + $opts = explode("\t", $val); + $values[] = $opts; + $w = max($w, $this->GetStringWidth($opts[1])); + } else { + $values[] = $val; + $w = max($w, $this->GetStringWidth($val)); + } + } + } else { + break; + } + $w *= 2; + if (isset($tag['attribute']['multiple']) AND ($tag['attribute']['multiple']='multiple')) { + $prop['multipleSelection'] = 'true'; + $this->ListBox($name, $w, $h, $values, $prop, $opt, '', '', false); + } else { + $this->ComboBox($name, $w, $h, $values, $prop, $opt, '', '', false); + } + break; + } + case 'tcpdf': { + if (defined('K_TCPDF_CALLS_IN_HTML') AND (K_TCPDF_CALLS_IN_HTML === true)) { + // Special tag used to call TCPDF methods + if (isset($tag['attribute']['method'])) { + $tcpdf_method = $tag['attribute']['method']; + if (method_exists($this, $tcpdf_method)) { + if (isset($tag['attribute']['params']) AND (!empty($tag['attribute']['params']))) { + $params = unserialize(urldecode($tag['attribute']['params'])); + call_user_func_array(array($this, $tcpdf_method), $params); + } else { + $this->$tcpdf_method(); + } + $this->newline = true; + } + } + } + break; + } + default: { + break; + } + } + if ($dom[$key]['self'] AND isset($dom[$key]['attribute']['pagebreakafter'])) { + $pba = $dom[$key]['attribute']['pagebreakafter']; + // check for pagebreak + if (($pba == 'true') OR ($pba == 'left') OR ($pba == 'right')) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + if ((($pba == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0)))) + OR (($pba == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + } + } + + /** + * Process closing tags. + * @param array $dom html dom array + * @param int $key current element id + * @param boolean $cell if true add the default cMargin space to each new line (default false). + * @param int $maxbottomliney maximum y value of current line + * @access protected + */ + protected function closeHTMLTagHandler(&$dom, $key, $cell, $maxbottomliney=0) { + $tag = $dom[$key]; + $parent = $dom[($dom[$key]['parent'])]; + $firstorlast = ((!isset($dom[($key + 1)])) OR ((!isset($dom[($key + 2)])) AND ($dom[($key + 1)]['value'] == 'marker'))); + $in_table_head = false; + if ($tag['block']) { + $hbz = 0; // distance from y to line bottom + $hb = 0; // vertical space between block tags + // calculate vertical space for block tags + if (isset($this->tagvspaces[$tag['value']][1]['h']) AND ($this->tagvspaces[$tag['value']][1]['h'] >= 0)) { + $pre_h = $this->tagvspaces[$tag['value']][1]['h']; + } elseif (isset($parent['fontsize'])) { + $pre_h = (($parent['fontsize'] / $this->k) * $this->cell_height_ratio); + } else { + $pre_h = $this->FontSize * $this->cell_height_ratio; + } + if (isset($this->tagvspaces[$tag['value']][1]['n'])) { + $n = $this->tagvspaces[$tag['value']][1]['n']; + } elseif (preg_match('/[h][0-9]/', $tag['value']) > 0) { + $n = 0.6; + } else { + $n = 1; + } + $hb = ($n * $pre_h); + if ($this->y < $maxbottomliney) { + $hbz = ($maxbottomliney - $this->y); + } + } + //Closing tag + switch($tag['value']) { + case 'tr': { + $table_el = $dom[($dom[$key]['parent'])]['parent']; + if (!isset($parent['endy'])) { + $dom[($dom[$key]['parent'])]['endy'] = $this->y; + $parent['endy'] = $this->y; + } + if (!isset($parent['endpage'])) { + $dom[($dom[$key]['parent'])]['endpage'] = $this->page; + $parent['endpage'] = $this->page; + } + // update row-spanned cells + if (isset($dom[$table_el]['rowspans'])) { + foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) { + $dom[$table_el]['rowspans'][$k]['rowspan'] -= 1; + if ($dom[$table_el]['rowspans'][$k]['rowspan'] == 0) { + if ($dom[$table_el]['rowspans'][$k]['endpage'] == $parent['endpage']) { + $dom[($dom[$key]['parent'])]['endy'] = max($dom[$table_el]['rowspans'][$k]['endy'], $parent['endy']); + } elseif ($dom[$table_el]['rowspans'][$k]['endpage'] > $parent['endpage']) { + $dom[($dom[$key]['parent'])]['endy'] = $dom[$table_el]['rowspans'][$k]['endy']; + $dom[($dom[$key]['parent'])]['endpage'] = $dom[$table_el]['rowspans'][$k]['endpage']; + } + } + } + // report new endy and endpage to the rowspanned cells + foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) { + if ($dom[$table_el]['rowspans'][$k]['rowspan'] == 0) { + $dom[$table_el]['rowspans'][$k]['endpage'] = max($dom[$table_el]['rowspans'][$k]['endpage'], $dom[($dom[$key]['parent'])]['endpage']); + $dom[($dom[$key]['parent'])]['endpage'] = $dom[$table_el]['rowspans'][$k]['endpage']; + $dom[$table_el]['rowspans'][$k]['endy'] = max($dom[$table_el]['rowspans'][$k]['endy'], $dom[($dom[$key]['parent'])]['endy']); + $dom[($dom[$key]['parent'])]['endy'] = $dom[$table_el]['rowspans'][$k]['endy']; + } + } + // update remaining rowspanned cells + foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) { + if ($dom[$table_el]['rowspans'][$k]['rowspan'] == 0) { + $dom[$table_el]['rowspans'][$k]['endpage'] = $dom[($dom[$key]['parent'])]['endpage']; + $dom[$table_el]['rowspans'][$k]['endy'] = $dom[($dom[$key]['parent'])]['endy']; + } + } + } + if (($this->num_columns > 1) AND ($dom[($dom[$key]['parent'])]['endy'] >= ($this->PageBreakTrigger - $this->lasth)) AND ($this->y < $dom[($dom[$key]['parent'])]['endy'])) { + $this->Ln(0, $cell); + } else { + $this->setPage($dom[($dom[$key]['parent'])]['endpage']); + $this->y = $dom[($dom[$key]['parent'])]['endy']; + if (isset($dom[$table_el]['attribute']['cellspacing'])) { + $cellspacing = $this->getHTMLUnitToUnits($dom[$table_el]['attribute']['cellspacing'], 1, 'px'); + $this->y += $cellspacing; + } + $this->Ln(0, $cell); + $this->x = $parent['startx']; + // account for booklet mode + if ($this->page > $parent['startpage']) { + if (($this->rtl) AND ($this->pagedim[$this->page]['orm'] != $this->pagedim[$parent['startpage']]['orm'])) { + $this->x -= ($this->pagedim[$this->page]['orm'] - $this->pagedim[$parent['startpage']]['orm']); + } elseif ((!$this->rtl) AND ($this->pagedim[$this->page]['olm'] != $this->pagedim[$parent['startpage']]['olm'])) { + $this->x += ($this->pagedim[$this->page]['olm'] - $this->pagedim[$parent['startpage']]['olm']); + } + } + } + break; + } + case 'tablehead': + // closing tag used for the thead part + $in_table_head = true; + $this->inthead = false; + case 'table': { + $table_el = $parent; + // draw borders + if ((isset($table_el['attribute']['border']) AND ($table_el['attribute']['border'] > 0)) + OR (isset($table_el['style']['border']) AND ($table_el['style']['border'] > 0))) { + $border = 1; + } else { + $border = 0; + } + // fix bottom line alignment of last line before page break + foreach ($dom[($dom[$key]['parent'])]['trids'] as $j => $trkey) { + // update row-spanned cells + if (isset($dom[($dom[$key]['parent'])]['rowspans'])) { + foreach ($dom[($dom[$key]['parent'])]['rowspans'] as $k => $trwsp) { + if ($trwsp['trid'] == $trkey) { + $dom[($dom[$key]['parent'])]['rowspans'][$k]['mrowspan'] -= 1; + } + if (isset($prevtrkey) AND ($trwsp['trid'] == $prevtrkey) AND ($trwsp['mrowspan'] >= 0)) { + $dom[($dom[$key]['parent'])]['rowspans'][$k]['trid'] = $trkey; + } + } + } + if (isset($prevtrkey) AND ($dom[$trkey]['startpage'] > $dom[$prevtrkey]['endpage'])) { + $pgendy = $this->pagedim[$dom[$prevtrkey]['endpage']]['hk'] - $this->pagedim[$dom[$prevtrkey]['endpage']]['bm']; + $dom[$prevtrkey]['endy'] = $pgendy; + // update row-spanned cells + if (isset($dom[($dom[$key]['parent'])]['rowspans'])) { + foreach ($dom[($dom[$key]['parent'])]['rowspans'] as $k => $trwsp) { + if (($trwsp['trid'] == $trkey) AND ($trwsp['mrowspan'] > 1) AND ($trwsp['endpage'] == $dom[$prevtrkey]['endpage'])) { + $dom[($dom[$key]['parent'])]['rowspans'][$k]['endy'] = $pgendy; + $dom[($dom[$key]['parent'])]['rowspans'][$k]['mrowspan'] = -1; + } + } + } + } + $prevtrkey = $trkey; + $table_el = $dom[($dom[$key]['parent'])]; + } + // for each row + foreach ($table_el['trids'] as $j => $trkey) { + $parent = $dom[$trkey]; + // for each cell on the row + foreach ($parent['cellpos'] as $k => $cellpos) { + if (isset($cellpos['rowspanid']) AND ($cellpos['rowspanid'] >= 0)) { + $cellpos['startx'] = $table_el['rowspans'][($cellpos['rowspanid'])]['startx']; + $cellpos['endx'] = $table_el['rowspans'][($cellpos['rowspanid'])]['endx']; + $endy = $table_el['rowspans'][($cellpos['rowspanid'])]['endy']; + $startpage = $table_el['rowspans'][($cellpos['rowspanid'])]['startpage']; + $endpage = $table_el['rowspans'][($cellpos['rowspanid'])]['endpage']; + } else { + $endy = $parent['endy']; + $startpage = $parent['startpage']; + $endpage = $parent['endpage']; + } + if ($endpage > $startpage) { + // design borders around HTML cells. + for ($page=$startpage; $page <= $endpage; ++$page) { + $this->setPage($page); + if ($page == $startpage) { + $this->y = $parent['starty']; // put cursor at the beginning of row on the first page + $ch = $this->getPageHeight() - $parent['starty'] - $this->getBreakMargin(); + $cborder = $this->getBorderMode($border, $position='start'); + } elseif ($page == $endpage) { + $this->y = $this->tMargin; // put cursor at the beginning of last page + $ch = $endy - $this->tMargin; + $cborder = $this->getBorderMode($border, $position='end'); + } else { + $this->y = $this->tMargin; // put cursor at the beginning of the current page + $ch = $this->getPageHeight() - $this->tMargin - $this->getBreakMargin(); + $cborder = $this->getBorderMode($border, $position='middle'); + } + if (isset($cellpos['bgcolor']) AND ($cellpos['bgcolor']) !== false) { + $this->SetFillColorArray($cellpos['bgcolor']); + $fill = true; + } else { + $fill = false; + } + $cw = abs($cellpos['endx'] - $cellpos['startx']); + $this->x = $cellpos['startx']; + // account for margin changes + if ($page > $startpage) { + if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) { + $this->x -= ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']); + } elseif ((!$this->rtl) AND ($this->pagedim[$page]['lm'] != $this->pagedim[$startpage]['olm'])) { + $this->x += ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']); + } + } + // design a cell around the text + $ccode = $this->FillColor."\n".$this->getCellCode($cw, $ch, '', $cborder, 1, '', $fill, '', 0, true); + if ($cborder OR $fill) { + $pagebuff = $this->getPageBuffer($this->page); + $pstart = substr($pagebuff, 0, $this->intmrk[$this->page]); + $pend = substr($pagebuff, $this->intmrk[$this->page]); + $this->setPageBuffer($this->page, $pstart.$ccode."\n".$pend); + $this->intmrk[$this->page] += strlen($ccode."\n"); + } + } + } else { + $this->setPage($startpage); + if (isset($cellpos['bgcolor']) AND ($cellpos['bgcolor']) !== false) { + $this->SetFillColorArray($cellpos['bgcolor']); + $fill = true; + } else { + $fill = false; + } + $this->x = $cellpos['startx']; + $this->y = $parent['starty']; + $cw = abs($cellpos['endx'] - $cellpos['startx']); + $ch = $endy - $parent['starty']; + // design a cell around the text + $ccode = $this->FillColor."\n".$this->getCellCode($cw, $ch, '', $border, 1, '', $fill, '', 0, true); + if ($border OR $fill) { + if (end($this->transfmrk[$this->page]) !== false) { + $pagemarkkey = key($this->transfmrk[$this->page]); + $pagemark = &$this->transfmrk[$this->page][$pagemarkkey]; + } elseif ($this->InFooter) { + $pagemark = &$this->footerpos[$this->page]; + } else { + $pagemark = &$this->intmrk[$this->page]; + } + $pagebuff = $this->getPageBuffer($this->page); + $pstart = substr($pagebuff, 0, $pagemark); + $pend = substr($pagebuff, $pagemark); + $this->setPageBuffer($this->page, $pstart.$ccode."\n".$pend); + $pagemark += strlen($ccode."\n"); + } + } + } + if (isset($table_el['attribute']['cellspacing'])) { + $cellspacing = $this->getHTMLUnitToUnits($table_el['attribute']['cellspacing'], 1, 'px'); + $this->y += $cellspacing; + } + $this->Ln(0, $cell); + $this->x = $parent['startx']; + if ($endpage > $startpage) { + if (($this->rtl) AND ($this->pagedim[$endpage]['orm'] != $this->pagedim[$startpage]['orm'])) { + $this->x += ($this->pagedim[$endpage]['orm'] - $this->pagedim[$startpage]['orm']); + } elseif ((!$this->rtl) AND ($this->pagedim[$endpage]['olm'] != $this->pagedim[$startpage]['olm'])) { + $this->x += ($this->pagedim[$endpage]['olm'] - $this->pagedim[$startpage]['olm']); + } + } + } + if (!$in_table_head) { + // we are not inside a thead section + if (isset($parent['cellpadding'])) { + $this->cMargin = $this->oldcMargin; + } + $this->lasth = $this->FontSize * $this->cell_height_ratio; + if (isset($this->theadMargins['top'])) { + if (($this->theadMargins['top'] == $this->tMargin) AND ($this->page == ($this->numpages - 1))) { + // remove last page containing only THEAD + $this->deletePage($this->numpages); + } + // restore top margin + $this->tMargin = $this->theadMargins['top']; + $this->pagedim[$this->page]['tm'] = $this->tMargin; + } + if (!isset($table_el['attribute']['nested']) OR ($table_el['attribute']['nested'] != 'true')) { + // reset main table header + $this->thead = ''; + $this->theadMargins = array(); + } + } + break; + } + case 'a': { + $this->HREF = ''; + break; + } + case 'sup': { + $this->SetXY($this->GetX(), $this->GetY() + ((0.7 * $parent['fontsize']) / $this->k)); + break; + } + case 'sub': { + $this->SetXY($this->GetX(), $this->GetY() - ((0.3 * $parent['fontsize'])/$this->k)); + break; + } + case 'div': { + $this->addHTMLVertSpace($hbz, 0, $cell, $firstorlast); + break; + } + case 'blockquote': { + if ($this->rtl) { + $this->rMargin -= $this->listindent; + } else { + $this->lMargin -= $this->listindent; + } + --$this->listindentlevel; + $this->addHTMLVertSpace($hbz, $hb, $cell, $firstorlast); + break; + } + case 'p': { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firstorlast); + break; + } + case 'pre': { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firstorlast); + $this->premode = false; + break; + } + case 'dl': { + --$this->listnum; + if ($this->listnum <= 0) { + $this->listnum = 0; + $this->addHTMLVertSpace($hbz, $hb, $cell, $firstorlast); + } else { + $this->addHTMLVertSpace(0, 0, $cell, $firstorlast); + } + $this->lasth = $this->FontSize * $this->cell_height_ratio; + break; + } + case 'dt': { + $this->lispacer = ''; + $this->addHTMLVertSpace(0, 0, $cell, $firstorlast); + break; + } + case 'dd': { + $this->lispacer = ''; + if ($this->rtl) { + $this->rMargin -= $this->listindent; + } else { + $this->lMargin -= $this->listindent; + } + --$this->listindentlevel; + $this->addHTMLVertSpace(0, 0, $cell, $firstorlast); + break; + } + case 'ul': + case 'ol': { + --$this->listnum; + $this->lispacer = ''; + if ($this->rtl) { + $this->rMargin -= $this->listindent; + } else { + $this->lMargin -= $this->listindent; + } + --$this->listindentlevel; + if ($this->listnum <= 0) { + $this->listnum = 0; + $this->addHTMLVertSpace($hbz, $hb, $cell, $firstorlast); + } else { + $this->addHTMLVertSpace(0, 0, $cell, $firstorlast); + } + $this->lasth = $this->FontSize * $this->cell_height_ratio; + break; + } + case 'li': { + $this->lispacer = ''; + $this->addHTMLVertSpace(0, 0, $cell, $firstorlast); + break; + } + case 'h1': + case 'h2': + case 'h3': + case 'h4': + case 'h5': + case 'h6': { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firstorlast); + break; + } + // Form fields (since 4.8.000 - 2009-09-07) + case 'form': { + $this->form_action = ''; + $this->form_enctype = 'application/x-www-form-urlencoded'; + break; + } + default : { + break; + } + } + if (isset($dom[($dom[$key]['parent'])]['attribute']['pagebreakafter'])) { + $pba = $dom[($dom[$key]['parent'])]['attribute']['pagebreakafter']; + // check for pagebreak + if (($pba == 'true') OR ($pba == 'left') OR ($pba == 'right')) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + if ((($pba == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0)))) + OR (($pba == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + } + $this->tmprtl = false; + } + + /** + * Add vertical spaces if needed. + * @param string $hbz Distance between current y and line bottom. + * @param string $hb The height of the break. + * @param boolean $cell if true add the default cMargin space to each new line (default false). + * @param boolean $firstorlast if true do not print additional empty lines. + * @access protected + */ + protected function addHTMLVertSpace($hbz=0, $hb=0, $cell=false, $firstorlast=false) { + if ($firstorlast) { + $this->Ln(0, $cell); + $this->htmlvspace = 0; + return; + } + if ($hb < $this->htmlvspace) { + $hd = 0; + } else { + $hd = $hb - $this->htmlvspace; + $this->htmlvspace = $hb; + } + $this->Ln(($hbz + $hd), $cell); + } + + /** + * Set the default bullet to be used as LI bullet symbol + * @param string $symbol character or string to be used (legal values are: '' = automatic, '!' = auto bullet, '#' = auto numbering, 'disc', 'disc', 'circle', 'square', '1', 'decimal', 'decimal-leading-zero', 'i', 'lower-roman', 'I', 'upper-roman', 'a', 'lower-alpha', 'lower-latin', 'A', 'upper-alpha', 'upper-latin', 'lower-greek') + * @access public + * @since 4.0.028 (2008-09-26) + */ + public function setLIsymbol($symbol='!') { + $symbol = strtolower($symbol); + switch ($symbol) { + case '!' : + case '#' : + case 'disc' : + case 'circle' : + case 'square' : + case '1': + case 'decimal': + case 'decimal-leading-zero': + case 'i': + case 'lower-roman': + case 'I': + case 'upper-roman': + case 'a': + case 'lower-alpha': + case 'lower-latin': + case 'A': + case 'upper-alpha': + case 'upper-latin': + case 'lower-greek': { + $this->lisymbol = $symbol; + break; + } + default : { + $this->lisymbol = ''; + } + } + } + + /** + * Set the booklet mode for double-sided pages. + * @param boolean $booklet true set the booklet mode on, fals eotherwise. + * @param float $inner Inner page margin. + * @param float $outer Outer page margin. + * @access public + * @since 4.2.000 (2008-10-29) + */ + public function SetBooklet($booklet=true, $inner=-1, $outer=-1) { + $this->booklet = $booklet; + if ($inner >= 0) { + $this->lMargin = $inner; + } + if ($outer >= 0) { + $this->rMargin = $outer; + } + } + + /** + * Swap the left and right margins. + * @param boolean $reverse if true swap left and right margins. + * @access protected + * @since 4.2.000 (2008-10-29) + */ + protected function swapMargins($reverse=true) { + if ($reverse) { + // swap left and right margins + $mtemp = $this->original_lMargin; + $this->original_lMargin = $this->original_rMargin; + $this->original_rMargin = $mtemp; + $deltam = $this->original_lMargin - $this->original_rMargin; + $this->lMargin += $deltam; + $this->rMargin -= $deltam; + } + } + + /** + * Set the vertical spaces for HTML tags. + * The array must have the following structure (example): + * $tagvs = array('h1' => array(0 => array('h' => '', 'n' => 2), 1 => array('h' => 1.3, 'n' => 1))); + * The first array level contains the tag names, + * the second level contains 0 for opening tags or 1 for closing tags, + * the third level contains the vertical space unit (h) and the number spaces to add (n). + * If the h parameter is not specified, default values are used. + * @param array $tagvs array of tags and relative vertical spaces. + * @access public + * @since 4.2.001 (2008-10-30) + */ + public function setHtmlVSpace($tagvs) { + $this->tagvspaces = $tagvs; + } + + /** + * Set custom width for list indentation. + * @param float $width width of the indentation. Use negative value to disable it. + * @access public + * @since 4.2.007 (2008-11-12) + */ + public function setListIndentWidth($width) { + return $this->customlistindent = floatval($width); + } + + /** + * Set the top/bottom cell sides to be open or closed when the cell cross the page. + * @param boolean $isopen if true keeps the top/bottom border open for the cell sides that cross the page. + * @access public + * @since 4.2.010 (2008-11-14) + */ + public function setOpenCell($isopen) { + $this->opencell = $isopen; + } + + /** + * Set the color and font style for HTML links. + * @param array $color RGB array of colors + * @param string $fontstyle additional font styles to add + * @access public + * @since 4.4.003 (2008-12-09) + */ + public function setHtmlLinksStyle($color=array(0,0,255), $fontstyle='U') { + $this->htmlLinkColorArray = $color; + $this->htmlLinkFontStyle = $fontstyle; + } + + /** + * Convert HTML string containing value and unit of measure to user's units or points. + * @param string $htmlval string containing values and unit + * @param string $refsize reference value in points + * @param string $defaultunit default unit (can be one of the following: %, em, ex, px, in, mm, pc, pt). + * @param boolean $point if true returns points, otherwise returns value in user's units + * @return float value in user's unit or point if $points=true + * @access public + * @since 4.4.004 (2008-12-10) + */ + public function getHTMLUnitToUnits($htmlval, $refsize=1, $defaultunit='px', $points=false) { + $supportedunits = array('%', 'em', 'ex', 'px', 'in', 'cm', 'mm', 'pc', 'pt'); + $retval = 0; + $value = 0; + $unit = 'px'; + $k = $this->k; + if ($points) { + $k = 1; + } + if (in_array($defaultunit, $supportedunits)) { + $unit = $defaultunit; + } + if (is_numeric($htmlval)) { + $value = floatval($htmlval); + } elseif (preg_match('/([0-9\.\-\+]+)/', $htmlval, $mnum)) { + $value = floatval($mnum[1]); + if (preg_match('/([a-z%]+)/', $htmlval, $munit)) { + if (in_array($munit[1], $supportedunits)) { + $unit = $munit[1]; + } + } + } + switch ($unit) { + // percentage + case '%': { + $retval = (($value * $refsize) / 100); + break; + } + // relative-size + case 'em': { + $retval = ($value * $refsize); + break; + } + case 'ex': { + $retval = $value * ($refsize / 2); + break; + } + // absolute-size + case 'in': { + $retval = ($value * $this->dpi) / $k; + break; + } + case 'cm': { + $retval = ($value / 2.54 * $this->dpi) / $k; + break; + } + case 'mm': { + $retval = ($value / 25.4 * $this->dpi) / $k; + break; + } + case 'pc': { + // one pica is 12 points + $retval = ($value * 12) / $k; + break; + } + case 'pt': { + $retval = $value / $k; + break; + } + case 'px': { + $retval = $this->pixelsToUnits($value); + break; + } + } + return $retval; + } + + /** + * Returns the Roman representation of an integer number + * @param int number to convert + * @return string roman representation of the specified number + * @access public + * @since 4.4.004 (2008-12-10) + */ + public function intToRoman($number) { + $roman = ''; + while ($number >= 1000) { + $roman .= 'M'; + $number -= 1000; + } + while ($number >= 900) { + $roman .= 'CM'; + $number -= 900; + } + while ($number >= 500) { + $roman .= 'D'; + $number -= 500; + } + while ($number >= 400) { + $roman .= 'CD'; + $number -= 400; + } + while ($number >= 100) { + $roman .= 'C'; + $number -= 100; + } + while ($number >= 90) { + $roman .= 'XC'; + $number -= 90; + } + while ($number >= 50) { + $roman .= 'L'; + $number -= 50; + } + while ($number >= 40) { + $roman .= 'XL'; + $number -= 40; + } + while ($number >= 10) { + $roman .= 'X'; + $number -= 10; + } + while ($number >= 9) { + $roman .= 'IX'; + $number -= 9; + } + while ($number >= 5) { + $roman .= 'V'; + $number -= 5; + } + while ($number >= 4) { + $roman .= 'IV'; + $number -= 4; + } + while ($number >= 1) { + $roman .= 'I'; + --$number; + } + return $roman; + } + + /** + * Output an HTML list bullet or ordered item symbol + * @param int $listdepth list nesting level + * @param string $listtype type of list + * @param float $size current font size + * @access protected + * @since 4.4.004 (2008-12-10) + */ + protected function putHtmlListBullet($listdepth, $listtype='', $size=10) { + $size /= $this->k; + $fill = ''; + $color = $this->fgcolor; + $width = 0; + $textitem = ''; + $tmpx = $this->x; + $lspace = $this->GetStringWidth(' '); + if ($listtype == '!') { + // set default list type for unordered list + $deftypes = array('disc', 'circle', 'square'); + $listtype = $deftypes[($listdepth - 1) % 3]; + } elseif ($listtype == '#') { + // set default list type for ordered list + $listtype = 'decimal'; + } + switch ($listtype) { + // unordered types + case 'none': { + break; + } + case 'disc': { + $fill = 'F'; + } + case 'circle': { + $fill .= 'D'; + $r = $size / 6; + $lspace += (2 * $r); + if ($this->rtl) { + $this->x += $lspace; + } else { + $this->x -= $lspace; + } + $this->Circle(($this->x + $r), ($this->y + ($this->lasth / 2)), $r, 0, 360, $fill, array('color'=>$color), $color, 8); + break; + } + case 'square': { + $l = $size / 3; + $lspace += $l; + if ($this->rtl) {; + $this->x += $lspace; + } else { + $this->x -= $lspace; + } + $this->Rect($this->x, ($this->y + (($this->lasth - $l)/ 2)), $l, $l, 'F', array(), $color); + break; + } + // ordered types + // $this->listcount[$this->listnum]; + // $textitem + case '1': + case 'decimal': { + $textitem = $this->listcount[$this->listnum]; + break; + } + case 'decimal-leading-zero': { + $textitem = sprintf('%02d', $this->listcount[$this->listnum]); + break; + } + case 'i': + case 'lower-roman': { + $textitem = strtolower($this->intToRoman($this->listcount[$this->listnum])); + break; + } + case 'I': + case 'upper-roman': { + $textitem = $this->intToRoman($this->listcount[$this->listnum]); + break; + } + case 'a': + case 'lower-alpha': + case 'lower-latin': { + $textitem = chr(97 + $this->listcount[$this->listnum] - 1); + break; + } + case 'A': + case 'upper-alpha': + case 'upper-latin': { + $textitem = chr(65 + $this->listcount[$this->listnum] - 1); + break; + } + case 'lower-greek': { + $textitem = $this->unichr(945 + $this->listcount[$this->listnum] - 1); + break; + } + /* + // Types to be implemented (special handling) + case 'hebrew': { + break; + } + case 'armenian': { + break; + } + case 'georgian': { + break; + } + case 'cjk-ideographic': { + break; + } + case 'hiragana': { + break; + } + case 'katakana': { + break; + } + case 'hiragana-iroha': { + break; + } + case 'katakana-iroha': { + break; + } + */ + default: { + $textitem = $this->listcount[$this->listnum]; + } + } + if (!$this->empty_string($textitem)) { + // print ordered item + if ($this->rtl) { + $textitem = '.'.$textitem; + } else { + $textitem = $textitem.'.'; + } + $lspace += $this->GetStringWidth($textitem); + if ($this->rtl) { + $this->x += $lspace; + } else { + $this->x -= $lspace; + } + $this->Write($this->lasth, $textitem, '', false, '', false, 0, false); + } + $this->x = $tmpx; + $this->lispacer = ''; + } + + /** + * Returns current graphic variables as array. + * @return array graphic variables + * @access protected + * @since 4.2.010 (2008-11-14) + */ + protected function getGraphicVars() { + $grapvars = array( + 'FontFamily' => $this->FontFamily, + 'FontStyle' => $this->FontStyle, + 'FontSizePt' => $this->FontSizePt, + 'rMargin' => $this->rMargin, + 'lMargin' => $this->lMargin, + 'cMargin' => $this->cMargin, + 'LineWidth' => $this->LineWidth, + 'linestyleWidth' => $this->linestyleWidth, + 'linestyleCap' => $this->linestyleCap, + 'linestyleJoin' => $this->linestyleJoin, + 'linestyleDash' => $this->linestyleDash, + 'textrendermode' => $this->textrendermode, + 'textstrokewidth' => $this->textstrokewidth, + 'DrawColor' => $this->DrawColor, + 'FillColor' => $this->FillColor, + 'TextColor' => $this->TextColor, + 'ColorFlag' => $this->ColorFlag, + 'bgcolor' => $this->bgcolor, + 'fgcolor' => $this->fgcolor, + 'htmlvspace' => $this->htmlvspace, + 'lasth' => $this->lasth + ); + return $grapvars; + } + + /** + * Set graphic variables. + * @param $gvars array graphic variables + * @access protected + * @since 4.2.010 (2008-11-14) + */ + protected function setGraphicVars($gvars) { + $this->FontFamily = $gvars['FontFamily']; + $this->FontStyle = $gvars['FontStyle']; + $this->FontSizePt = $gvars['FontSizePt']; + $this->rMargin = $gvars['rMargin']; + $this->lMargin = $gvars['lMargin']; + $this->cMargin = $gvars['cMargin']; + $this->LineWidth = $gvars['LineWidth']; + $this->linestyleWidth = $gvars['linestyleWidth']; + $this->linestyleCap = $gvars['linestyleCap']; + $this->linestyleJoin = $gvars['linestyleJoin']; + $this->linestyleDash = $gvars['linestyleDash']; + $this->textrendermode = $gvars['textrendermode']; + $this->textstrokewidth = $gvars['textstrokewidth']; + $this->DrawColor = $gvars['DrawColor']; + $this->FillColor = $gvars['FillColor']; + $this->TextColor = $gvars['TextColor']; + $this->ColorFlag = $gvars['ColorFlag']; + $this->bgcolor = $gvars['bgcolor']; + $this->fgcolor = $gvars['fgcolor']; + $this->htmlvspace = $gvars['htmlvspace']; + //$this->lasth = $gvars['lasth']; + $this->_out(''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor.''); + if (!$this->empty_string($this->FontFamily)) { + $this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt); + } + } + + /** + * Returns a temporary filename for caching object on filesystem. + * @param string $prefix prefix to add to filename + * return string filename. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected function getObjFilename($name) { + return tempnam(K_PATH_CACHE, $name.'_'); + } + + /** + * Writes data to a temporary file on filesystem. + * @param string $file file name + * @param mixed $data data to write on file + * @param boolean $append if true append data, false replace. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected function writeDiskCache($filename, $data, $append=false) { + if ($append) { + $fmode = 'ab+'; + } else { + $fmode = 'wb+'; + } + $f = @fopen($filename, $fmode); + if (!$f) { + $this->Error('Unable to write cache file: '.$filename); + } else { + fwrite($f, $data); + fclose($f); + } + // update file length (needed for transactions) + if (!isset($this->cache_file_length['_'.$filename])) { + $this->cache_file_length['_'.$filename] = strlen($data); + } else { + $this->cache_file_length['_'.$filename] += strlen($data); + } + } + + /** + * Read data from a temporary file on filesystem. + * @param string $file file name + * @return mixed retrieved data + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected function readDiskCache($filename) { + return file_get_contents($filename); + } + + /** + * Set buffer content (always append data). + * @param string $data data + * @access protected + * @since 4.5.000 (2009-01-02) + */ + protected function setBuffer($data) { + $this->bufferlen += strlen($data); + if ($this->diskcache) { + if (!isset($this->buffer) OR $this->empty_string($this->buffer)) { + $this->buffer = $this->getObjFilename('buffer'); + } + $this->writeDiskCache($this->buffer, $data, true); + } else { + $this->buffer .= $data; + } + } + + /** + * Get buffer content. + * @return string buffer content + * @access protected + * @since 4.5.000 (2009-01-02) + */ + protected function getBuffer() { + if ($this->diskcache) { + return $this->readDiskCache($this->buffer); + } else { + return $this->buffer; + } + } + + /** + * Set page buffer content. + * @param int $page page number + * @param string $data page data + * @param boolean $append if true append data, false replace. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected function setPageBuffer($page, $data, $append=false) { + if ($this->diskcache) { + if (!isset($this->pages[$page])) { + $this->pages[$page] = $this->getObjFilename('page'.$page); + } + $this->writeDiskCache($this->pages[$page], $data, $append); + } else { + if ($append) { + $this->pages[$page] .= $data; + } else { + $this->pages[$page] = $data; + } + } + if ($append AND isset($this->pagelen[$page])) { + $this->pagelen[$page] += strlen($data); + } else { + $this->pagelen[$page] = strlen($data); + } + } + + /** + * Get page buffer content. + * @param int $page page number + * @return string page buffer content or false in case of error + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected function getPageBuffer($page) { + if ($this->diskcache) { + return $this->readDiskCache($this->pages[$page]); + } elseif (isset($this->pages[$page])) { + return $this->pages[$page]; + } + return false; + } + + /** + * Set image buffer content. + * @param string $image image key + * @param array $data image data + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected function setImageBuffer($image, $data) { + if ($this->diskcache) { + if (!isset($this->images[$image])) { + $this->images[$image] = $this->getObjFilename('image'.$image); + } + $this->writeDiskCache($this->images[$image], serialize($data)); + } else { + $this->images[$image] = $data; + } + if (!in_array($image, $this->imagekeys)) { + $this->imagekeys[] = $image; + ++$this->numimages; + } + } + + /** + * Set image buffer content for a specified sub-key. + * @param string $image image key + * @param string $key image sub-key + * @param array $data image data + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected function setImageSubBuffer($image, $key, $data) { + if (!isset($this->images[$image])) { + $this->setImageBuffer($image, array()); + } + if ($this->diskcache) { + $tmpimg = $this->getImageBuffer($image); + $tmpimg[$key] = $data; + $this->writeDiskCache($this->images[$image], serialize($tmpimg)); + } else { + $this->images[$image][$key] = $data; + } + } + + /** + * Get image buffer content. + * @param string $image image key + * @return string image buffer content or false in case of error + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected function getImageBuffer($image) { + if ($this->diskcache AND isset($this->images[$image])) { + return unserialize($this->readDiskCache($this->images[$image])); + } elseif (isset($this->images[$image])) { + return $this->images[$image]; + } + return false; + } + + /** + * Set font buffer content. + * @param string $font font key + * @param array $data font data + * @access protected + * @since 4.5.000 (2009-01-02) + */ + protected function setFontBuffer($font, $data) { + if ($this->diskcache) { + if (!isset($this->fonts[$font])) { + $this->fonts[$font] = $this->getObjFilename('font'); + } + $this->writeDiskCache($this->fonts[$font], serialize($data)); + } else { + $this->fonts[$font] = $data; + } + if (!in_array($font, $this->fontkeys)) { + $this->fontkeys[] = $font; + } + } + + /** + * Set font buffer content. + * @param string $font font key + * @param string $key font sub-key + * @param array $data font data + * @access protected + * @since 4.5.000 (2009-01-02) + */ + protected function setFontSubBuffer($font, $key, $data) { + if (!isset($this->fonts[$font])) { + $this->setFontBuffer($font, array()); + } + if ($this->diskcache) { + $tmpfont = $this->getFontBuffer($font); + $tmpfont[$key] = $data; + $this->writeDiskCache($this->fonts[$font], serialize($tmpfont)); + } else { + $this->fonts[$font][$key] = $data; + } + } + + /** + * Get font buffer content. + * @param string $font font key + * @return string font buffer content or false in case of error + * @access protected + * @since 4.5.000 (2009-01-02) + */ + protected function getFontBuffer($font) { + if ($this->diskcache AND isset($this->fonts[$font])) { + return unserialize($this->readDiskCache($this->fonts[$font])); + } elseif (isset($this->fonts[$font])) { + return $this->fonts[$font]; + } + return false; + } + + /** + * Move a page to a previous position. + * @param int $frompage number of the source page + * @param int $topage number of the destination page (must be less than $frompage) + * @return true in case of success, false in case of error. + * @access public + * @since 4.5.000 (2009-01-02) + */ + public function movePage($frompage, $topage) { + if (($frompage > $this->numpages) OR ($frompage <= $topage)) { + return false; + } + if ($frompage == $this->page) { + // close the page before moving it + $this->endPage(); + } + // move all page-related states + $tmppage = $this->pages[$frompage]; + $tmppagedim = $this->pagedim[$frompage]; + $tmppagelen = $this->pagelen[$frompage]; + $tmpintmrk = $this->intmrk[$frompage]; + if (isset($this->footerpos[$frompage])) { + $tmpfooterpos = $this->footerpos[$frompage]; + } + if (isset($this->footerlen[$frompage])) { + $tmpfooterlen = $this->footerlen[$frompage]; + } + if (isset($this->transfmrk[$frompage])) { + $tmptransfmrk = $this->transfmrk[$frompage]; + } + if (isset($this->PageAnnots[$frompage])) { + $tmpannots = $this->PageAnnots[$frompage]; + } + if (isset($this->newpagegroup[$frompage])) { + $tmpnewpagegroup = $this->newpagegroup[$frompage]; + } + for ($i = $frompage; $i > $topage; --$i) { + $j = $i - 1; + // shift pages down + $this->pages[$i] = $this->pages[$j]; + $this->pagedim[$i] = $this->pagedim[$j]; + $this->pagelen[$i] = $this->pagelen[$j]; + $this->intmrk[$i] = $this->intmrk[$j]; + if (isset($this->footerpos[$j])) { + $this->footerpos[$i] = $this->footerpos[$j]; + } elseif (isset($this->footerpos[$i])) { + unset($this->footerpos[$i]); + } + if (isset($this->footerlen[$j])) { + $this->footerlen[$i] = $this->footerlen[$j]; + } elseif (isset($this->footerlen[$i])) { + unset($this->footerlen[$i]); + } + if (isset($this->transfmrk[$j])) { + $this->transfmrk[$i] = $this->transfmrk[$j]; + } elseif (isset($this->transfmrk[$i])) { + unset($this->transfmrk[$i]); + } + if (isset($this->PageAnnots[$j])) { + $this->PageAnnots[$i] = $this->PageAnnots[$j]; + } elseif (isset($this->PageAnnots[$i])) { + unset($this->PageAnnots[$i]); + } + if (isset($this->newpagegroup[$j])) { + $this->newpagegroup[$i] = $this->newpagegroup[$j]; + } elseif (isset($this->newpagegroup[$i])) { + unset($this->newpagegroup[$i]); + } + } + $this->pages[$topage] = $tmppage; + $this->pagedim[$topage] = $tmppagedim; + $this->pagelen[$topage] = $tmppagelen; + $this->intmrk[$topage] = $tmpintmrk; + if (isset($tmpfooterpos)) { + $this->footerpos[$topage] = $tmpfooterpos; + } elseif (isset($this->footerpos[$topage])) { + unset($this->footerpos[$topage]); + } + if (isset($tmpfooterlen)) { + $this->footerlen[$topage] = $tmpfooterlen; + } elseif (isset($this->footerlen[$topage])) { + unset($this->footerlen[$topage]); + } + if (isset($tmptransfmrk)) { + $this->transfmrk[$topage] = $tmptransfmrk; + } elseif (isset($this->transfmrk[$topage])) { + unset($this->transfmrk[$topage]); + } + if (isset($tmpannots)) { + $this->PageAnnots[$topage] = $tmpannots; + } elseif (isset($this->PageAnnots[$topage])) { + unset($this->PageAnnots[$topage]); + } + if (isset($tmpnewpagegroup)) { + $this->newpagegroup[$topage] = $tmpnewpagegroup; + } elseif (isset($this->newpagegroup[$topage])) { + unset($this->newpagegroup[$topage]); + } + // adjust outlines + $tmpoutlines = $this->outlines; + foreach ($tmpoutlines as $key => $outline) { + if (($outline['p'] >= $topage) AND ($outline['p'] < $frompage)) { + $this->outlines[$key]['p'] = $outline['p'] + 1; + } elseif ($outline['p'] == $frompage) { + $this->outlines[$key]['p'] = $topage; + } + } + // adjust links + $tmplinks = $this->links; + foreach ($tmplinks as $key => $link) { + if (($link[0] >= $topage) AND ($link[0] < $frompage)) { + $this->links[$key][0] = $link[0] + 1; + } elseif ($link[0] == $frompage) { + $this->links[$key][0] = $topage; + } + } + // adjust javascript + $tmpjavascript = $this->javascript; + global $jfrompage, $jtopage; + $jfrompage = $frompage; + $jtopage = $topage; + $this->javascript = preg_replace_callback('/this\.addField\(\'([^\']*)\',\'([^\']*)\',([0-9]+)/', + create_function('$matches', 'global $jfrompage, $jtopage; + $pagenum = intval($matches[3]) + 1; + if (($pagenum >= $jtopage) AND ($pagenum < $jfrompage)) { + $newpage = ($pagenum + 1); + } elseif ($pagenum == $jfrompage) { + $newpage = $jtopage; + } else { + $newpage = $pagenum; + } + --$newpage; + return "this.addField(\'".$matches[1]."\',\'".$matches[2]."\',".$newpage."";'), $tmpjavascript); + // return to last page + $this->lastPage(true); + return true; + } + + /** + * Remove the specified page. + * @param int $page page to remove + * @return true in case of success, false in case of error. + * @access public + * @since 4.6.004 (2009-04-23) + */ + public function deletePage($page) { + if ($page > $this->numpages) { + return false; + } + // delete current page + unset($this->pages[$page]); + unset($this->pagedim[$page]); + unset($this->pagelen[$page]); + unset($this->intmrk[$page]); + if (isset($this->footerpos[$page])) { + unset($this->footerpos[$page]); + } + if (isset($this->footerlen[$page])) { + unset($this->footerlen[$page]); + } + if (isset($this->transfmrk[$page])) { + unset($this->transfmrk[$page]); + } + if (isset($this->PageAnnots[$page])) { + unset($this->PageAnnots[$page]); + } + if (isset($this->newpagegroup[$page])) { + unset($this->newpagegroup[$page]); + } + if (isset($this->pageopen[$page])) { + unset($this->pageopen[$page]); + } + // update remaining pages + for ($i = $page; $i < $this->numpages; ++$i) { + $j = $i + 1; + // shift pages + $this->pages[$i] = $this->pages[$j]; + $this->pagedim[$i] = $this->pagedim[$j]; + $this->pagelen[$i] = $this->pagelen[$j]; + $this->intmrk[$i] = $this->intmrk[$j]; + if (isset($this->footerpos[$j])) { + $this->footerpos[$i] = $this->footerpos[$j]; + } elseif (isset($this->footerpos[$i])) { + unset($this->footerpos[$i]); + } + if (isset($this->footerlen[$j])) { + $this->footerlen[$i] = $this->footerlen[$j]; + } elseif (isset($this->footerlen[$i])) { + unset($this->footerlen[$i]); + } + if (isset($this->transfmrk[$j])) { + $this->transfmrk[$i] = $this->transfmrk[$j]; + } elseif (isset($this->transfmrk[$i])) { + unset($this->transfmrk[$i]); + } + if (isset($this->PageAnnots[$j])) { + $this->PageAnnots[$i] = $this->PageAnnots[$j]; + } elseif (isset($this->PageAnnots[$i])) { + unset($this->PageAnnots[$i]); + } + if (isset($this->newpagegroup[$j])) { + $this->newpagegroup[$i] = $this->newpagegroup[$j]; + } elseif (isset($this->newpagegroup[$i])) { + unset($this->newpagegroup[$i]); + } + if (isset($this->pageopen[$j])) { + $this->pageopen[$i] = $this->pageopen[$j]; + } elseif (isset($this->pageopen[$i])) { + unset($this->pageopen[$i]); + } + } + // remove last page + unset($this->pages[$this->numpages]); + unset($this->pagedim[$this->numpages]); + unset($this->pagelen[$this->numpages]); + unset($this->intmrk[$this->numpages]); + if (isset($this->footerpos[$this->numpages])) { + unset($this->footerpos[$this->numpages]); + } + if (isset($this->footerlen[$this->numpages])) { + unset($this->footerlen[$this->numpages]); + } + if (isset($this->transfmrk[$this->numpages])) { + unset($this->transfmrk[$this->numpages]); + } + if (isset($this->PageAnnots[$this->numpages])) { + unset($this->PageAnnots[$this->numpages]); + } + if (isset($this->newpagegroup[$this->numpages])) { + unset($this->newpagegroup[$this->numpages]); + } + if (isset($this->pageopen[$this->numpages])) { + unset($this->pageopen[$this->numpages]); + } + --$this->numpages; + $this->page = $this->numpages; + // adjust outlines + $tmpoutlines = $this->outlines; + foreach ($tmpoutlines as $key => $outline) { + if ($outline['p'] > $page) { + $this->outlines[$key]['p'] = $outline['p'] - 1; + } elseif ($outline['p'] == $page) { + unset($this->outlines[$key]); + } + } + // adjust links + $tmplinks = $this->links; + foreach ($tmplinks as $key => $link) { + if ($link[0] > $page) { + $this->links[$key][0] = $link[0] - 1; + } elseif ($link[0] == $page) { + unset($this->links[$key]); + } + } + // adjust javascript + $tmpjavascript = $this->javascript; + global $jpage; + $jpage = $page; + $this->javascript = preg_replace_callback('/this\.addField\(\'([^\']*)\',\'([^\']*)\',([0-9]+)/', + create_function('$matches', 'global $jpage; + $pagenum = intval($matches[3]) + 1; + if ($pagenum >= $jpage) { + $newpage = ($pagenum - 1); + } elseif ($pagenum == $jpage) { + $newpage = 1; + } else { + $newpage = $pagenum; + } + --$newpage; + return "this.addField(\'".$matches[1]."\',\'".$matches[2]."\',".$newpage."";'), $tmpjavascript); + // return to last page + $this->lastPage(true); + return true; + } + + /** + * Clone the specified page to a new page. + * @param int $page number of page to copy (0 = current page) + * @return true in case of success, false in case of error. + * @access public + * @since 4.9.015 (2010-04-20) + */ + public function copyPage($page=0) { + if ($page == 0) { + // default value + $page = $this->page; + } + if ($page > $this->numpages) { + return false; + } + if ($page == $this->page) { + // close the page before cloning it + $this->endPage(); + } + // copy all page-related states + ++$this->numpages; + $this->page = $this->numpages; + $this->pages[$this->page] = $this->pages[$page]; + $this->pagedim[$this->page] = $this->pagedim[$page]; + $this->pagelen[$this->page] = $this->pagelen[$page]; + $this->intmrk[$this->page] = $this->intmrk[$page]; + $this->pageopen[$this->page] = false; + if (isset($this->footerpos[$page])) { + $this->footerpos[$this->page] = $this->footerpos[$page]; + } + if (isset($this->footerlen[$page])) { + $this->footerlen[$this->page] = $this->footerlen[$page]; + } + if (isset($this->transfmrk[$page])) { + $this->transfmrk[$this->page] = $this->transfmrk[$page]; + } + if (isset($this->PageAnnots[$page])) { + $this->PageAnnots[$this->page] = $this->PageAnnots[$page]; + } + if (isset($this->newpagegroup[$page])) { + $this->newpagegroup[$this->page] = $this->newpagegroup[$page]; + } + // copy outlines + $tmpoutlines = $this->outlines; + foreach ($tmpoutlines as $key => $outline) { + if ($outline['p'] == $page) { + $this->outlines[] = array('t' => $outline['t'], 'l' => $outline['l'], 'y' => $outline['y'], 'p' => $this->page); + } + } + // copy links + $tmplinks = $this->links; + foreach ($tmplinks as $key => $link) { + if ($link[0] == $page) { + $this->links[] = array($this->page, $link[1]); + } + } + // return to last page + $this->lastPage(true); + return true; + } + + /** + * Output a Table of Content Index (TOC). + * Before calling this method you have to open the page using the addTOCPage() method. + * After calling this method you have to call endTOCPage() to close the TOC page. + * You can override this method to achieve different styles. + * @param int $page page number where this TOC should be inserted (leave empty for current page). + * @param string $numbersfont set the font for page numbers (please use monospaced font for better alignment). + * @param string $filler string used to fill the space between text and page number. + * @param string $toc_name name to use for TOC bookmark. + * @access public + * @author Nicola Asuni + * @since 4.5.000 (2009-01-02) + * @see addTOCPage(), endTOCPage(), addHTMLTOC() + */ + public function addTOC($page='', $numbersfont='', $filler='.', $toc_name='TOC') { + $fontsize = $this->FontSizePt; + $fontfamily = $this->FontFamily; + $fontstyle = $this->FontStyle; + $w = $this->w - $this->lMargin - $this->rMargin; + $spacer = $this->GetStringWidth(chr(32)) * 4; + $page_first = $this->getPage(); + $lmargin = $this->lMargin; + $rmargin = $this->rMargin; + $x_start = $this->GetX(); + if ($this->empty_string($numbersfont)) { + $numbersfont = $this->default_monospaced_font; + } + if ($this->empty_string($filler)) { + $filler = ' '; + } + if ($this->empty_string($page)) { + $gap = ' '; + } else { + $gap = ''; + } + foreach ($this->outlines as $key => $outline) { + if ($this->rtl) { + $aligntext = 'R'; + $alignnum = 'L'; + } else { + $aligntext = 'L'; + $alignnum = 'R'; + } + if ($outline['l'] == 0) { + $this->SetFont($fontfamily, $fontstyle.'B', $fontsize); + } else { + $this->SetFont($fontfamily, $fontstyle, $fontsize - $outline['l']); + } + $indent = ($spacer * $outline['l']); + if ($this->rtl) { + $this->rMargin += $indent; + $this->x -= $indent; + } else { + $this->lMargin += $indent; + $this->x += $indent; + } + $link = $this->AddLink(); + $this->SetLink($link, 0, $outline['p']); + // write the text + $this->Write(0, $outline['t'], $link, 0, $aligntext, false, 0, false, false, 0); + $this->SetFont($numbersfont, $fontstyle, $fontsize); + if ($this->empty_string($page)) { + $pagenum = $outline['p']; + } else { + // placemark to be replaced with the correct number + $pagenum = '{#'.($outline['p']).'}'; + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + $pagenum = '{'.$pagenum.'}'; + } + } + $numwidth = $this->GetStringWidth($pagenum); + if ($this->rtl) { + $tw = $this->x - $this->lMargin; + } else { + $tw = $this->w - $this->rMargin - $this->x; + } + $fw = $tw - $numwidth - $this->GetStringWidth(chr(32)); + $numfills = floor($fw / $this->GetStringWidth($filler)); + if ($numfills > 0) { + $rowfill = str_repeat($filler, $numfills); + } else { + $rowfill = ''; + } + if ($this->rtl) { + $pagenum = $pagenum.$gap.$rowfill.' '; + } else { + $pagenum = ' '.$rowfill.$gap.$pagenum; + } + // write the number + $this->Cell($tw, 0, $pagenum, 0, 1, $alignnum, 0, $link, 0); + $this->SetX($x_start); + $this->lMargin = $lmargin; + $this->rMargin = $rmargin; + } + $page_last = $this->getPage(); + $numpages = $page_last - $page_first + 1; + if (!$this->empty_string($page)) { + for ($p = $page_first; $p <= $page_last; ++$p) { + // get page data + $temppage = $this->getPageBuffer($p); + for ($n = 1; $n <= $this->numpages; ++$n) { + // update page numbers + $k = '{#'.$n.'}'; + $ku = '{'.$k.'}'; + $alias_a = $this->_escape($k); + $alias_au = $this->_escape('{'.$k.'}'); + if ($this->isunicode) { + $alias_b = $this->_escape($this->UTF8ToLatin1($k)); + $alias_bu = $this->_escape($this->UTF8ToLatin1($ku)); + $alias_c = $this->_escape($this->utf8StrRev($k, false, $this->tmprtl)); + $alias_cu = $this->_escape($this->utf8StrRev($ku, false, $this->tmprtl)); + } + if ($n >= $page) { + $np = $n + $numpages; + } else { + $np = $n; + } + $ns = $this->formatTOCPageNumber($np); + $nu = $ns; + $sdiff = strlen($k) - strlen($ns) - 1; + $sdiffu = strlen($ku) - strlen($ns) - 1; + $sfill = str_repeat($filler, $sdiff); + $sfillu = str_repeat($filler, $sdiffu); + if ($this->rtl) { + $ns = $ns.' '.$sfill; + $nu = $nu.' '.$sfillu; + } else { + $ns = $sfill.' '.$ns; + $nu = $sfillu.' '.$nu; + } + $nu = $this->UTF8ToUTF16BE($nu, false); + $temppage = str_replace($alias_au, $nu, $temppage); + if ($this->isunicode) { + $temppage = str_replace($alias_bu, $nu, $temppage); + $temppage = str_replace($alias_cu, $nu, $temppage); + $temppage = str_replace($alias_b, $ns, $temppage); + $temppage = str_replace($alias_c, $ns, $temppage); + } + $temppage = str_replace($alias_a, $ns, $temppage); + } + // save changes + $this->setPageBuffer($p, $temppage); + } + // move pages + $this->Bookmark($toc_name, 0, 0, $page_first); + for ($i = 0; $i < $numpages; ++$i) { + $this->movePage($page_last, $page); + } + } + } + + /** + * Output a Table Of Content Index (TOC) using HTML templates. + * Before calling this method you have to open the page using the addTOCPage() method. + * After calling this method you have to call endTOCPage() to close the TOC page. + * @param int $page page number where this TOC should be inserted (leave empty for current page). + * @param string $toc_name name to use for TOC bookmark. + * @param array $templates array of html templates. Use: #TOC_DESCRIPTION# for bookmark title, #TOC_PAGE_NUMBER# for page number. + * @parma boolean $correct_align if true correct the number alignment (numbers must be in monospaced font like courier and right aligned on LTR, or left aligned on RTL) + * @access public + * @author Nicola Asuni + * @since 5.0.001 (2010-05-06) + * @see addTOCPage(), endTOCPage(), addTOC() + */ + public function addHTMLTOC($page='', $toc_name='TOC', $templates=array(), $correct_align=true) { + $prev_htmlLinkColorArray = $this->htmlLinkColorArray; + $prev_htmlLinkFontStyle = $this->htmlLinkFontStyle; + // set new style for link + $this->htmlLinkColorArray = array(); + $this->htmlLinkFontStyle = ''; + $page_first = $this->getPage(); + foreach ($this->outlines as $key => $outline) { + if ($this->empty_string($page)) { + $pagenum = $outline['p']; + } else { + // placemark to be replaced with the correct number + $pagenum = '{#'.($outline['p']).'}'; + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + $pagenum = '{'.$pagenum.'}'; + } + } + // get HTML template + $row = $templates[$outline['l']]; + // replace templates with current values + $row = str_replace('#TOC_DESCRIPTION#', $outline['t'], $row); + $row = str_replace('#TOC_PAGE_NUMBER#', $pagenum, $row); + // add link to page + $row = ''.$row.''; + // write bookmark entry + $this->writeHTML($row, false, false, true, false, ''); + } + // restore link styles + $this->htmlLinkColorArray = $prev_htmlLinkColorArray; + $this->htmlLinkFontStyle = $prev_htmlLinkFontStyle; + // move TOC page and replace numbers + $page_last = $this->getPage(); + $numpages = $page_last - $page_first + 1; + if (!$this->empty_string($page)) { + for ($p = $page_first; $p <= $page_last; ++$p) { + // get page data + $temppage = $this->getPageBuffer($p); + for ($n = 1; $n <= $this->numpages; ++$n) { + // update page numbers + $k = '{#'.$n.'}'; + $ku = '{'.$k.'}'; + $alias_a = $this->_escape($k); + $alias_au = $this->_escape('{'.$k.'}'); + if ($this->isunicode) { + $alias_b = $this->_escape($this->UTF8ToLatin1($k)); + $alias_bu = $this->_escape($this->UTF8ToLatin1($ku)); + $alias_c = $this->_escape($this->utf8StrRev($k, false, $this->tmprtl)); + $alias_cu = $this->_escape($this->utf8StrRev($ku, false, $this->tmprtl)); + } + if ($n >= $page) { + $np = $n + $numpages; + } else { + $np = $n; + } + $ns = $this->formatTOCPageNumber($np); + $nu = $ns; + if ($correct_align) { + $sdiff = strlen($k) - strlen($ns); + $sdiffu = strlen($ku) - strlen($ns); + $sfill = str_repeat(' ', $sdiff); + $sfillu = str_repeat(' ', $sdiffu); + if ($this->rtl) { + $ns = $ns.$sfill; + $nu = $nu.$sfillu; + } else { + $ns = $sfill.$ns; + $nu = $sfillu.$nu; + } + } + $nu = $this->UTF8ToUTF16BE($nu, false); + $temppage = str_replace($alias_au, $nu, $temppage); + if ($this->isunicode) { + $temppage = str_replace($alias_bu, $nu, $temppage); + $temppage = str_replace($alias_cu, $nu, $temppage); + $temppage = str_replace($alias_b, $ns, $temppage); + $temppage = str_replace($alias_c, $ns, $temppage); + } + $temppage = str_replace($alias_a, $ns, $temppage); + } + // save changes + $this->setPageBuffer($p, $temppage); + } + // move pages + $this->Bookmark($toc_name, 0, 0, $page_first); + for ($i = 0; $i < $numpages; ++$i) { + $this->movePage($page_last, $page); + } + } + } + + /** + * Stores a copy of the current TCPDF object used for undo operation. + * @access public + * @since 4.5.029 (2009-03-19) + */ + public function startTransaction() { + if (isset($this->objcopy)) { + // remove previous copy + $this->commitTransaction(); + } + // record current page number and Y position + $this->start_transaction_page = $this->page; + $this->start_transaction_y = $this->y; + // clone current object + $this->objcopy = $this->objclone($this); + } + + /** + * Delete the copy of the current TCPDF object used for undo operation. + * @access public + * @since 4.5.029 (2009-03-19) + */ + public function commitTransaction() { + if (isset($this->objcopy)) { + $this->objcopy->_destroy(true, true); + unset($this->objcopy); + } + } + + /** + * This method allows to undo the latest transaction by returning the latest saved TCPDF object with startTransaction(). + * @param boolean $self if true restores current class object to previous state without the need of reassignment via the returned value. + * @return TCPDF object. + * @access public + * @since 4.5.029 (2009-03-19) + */ + public function rollbackTransaction($self=false) { + if (isset($this->objcopy)) { + if (isset($this->objcopy->diskcache) AND $this->objcopy->diskcache) { + // truncate files to previous values + foreach ($this->objcopy->cache_file_length as $file => $length) { + $file = substr($file, 1); + $handle = fopen($file, 'r+'); + ftruncate($handle, $length); + } + } + $this->_destroy(true, true); + if ($self) { + $objvars = get_object_vars($this->objcopy); + foreach ($objvars as $key => $value) { + $this->$key = $value; + } + } + return $this->objcopy; + } + return $this; + } + + /** + * Creates a copy of a class object + * @param object $object class object to be cloned + * @return cloned object + * @access public + * @since 4.5.029 (2009-03-19) + */ + public function objclone($object) { + return @clone($object); + } + + /** + * Determine whether a string is empty. + * @param string $str string to be checked + * @return boolean true if string is empty + * @access public + * @since 4.5.044 (2009-04-16) + */ + public function empty_string($str) { + return (is_null($str) OR (is_string($str) AND (strlen($str) == 0))); + } + + /** + * Find position of last occurrence of a substring in a string + * @param string $haystack The string to search in. + * @param string $needle substring to search. + * @param int $offset May be specified to begin searching an arbitrary number of characters into the string. + * @return Returns the position where the needle exists. Returns FALSE if the needle was not found. + * @access public + * @since 4.8.038 (2010-03-13) + */ + public function revstrpos($haystack, $needle, $offset = 0) { + $length = strlen($haystack); + $offset = ($offset > 0)?($length - $offset):abs($offset); + $pos = strpos(strrev($haystack), strrev($needle), $offset); + return ($pos === false)?false:($length - $pos - strlen($needle)); + } + + // --- MULTI COLUMNS METHODS ----------------------- + + /** + * Set multiple columns of the same size + * @param int $numcols number of columns (set to zero to disable columns mode) + * @param int $width column width + * @param int $y column starting Y position (leave empty for current Y position) + * @access public + * @since 4.9.001 (2010-03-28) + */ + public function setEqualColumns($numcols=0, $width=0, $y='') { + $this->columns = array(); + if ($numcols < 2) { + $numcols = 0; + $this->columns = array(); + } else { + // maximum column width + $maxwidth = ($this->w - $this->original_lMargin - $this->original_rMargin) / $numcols; + if ($width > $maxwidth) { + $width = $maxwidth; + } + if ($this->empty_string($y)) { + $y = $this->y; + } + // space between columns + $space = (($this->w - $this->original_lMargin - $this->original_rMargin - ($numcols * $width)) / ($numcols - 1)); + // fill the columns array (with, space, starting Y position) + for ($i = 0; $i < $numcols; ++$i) { + $this->columns[$i] = array('w' => $width, 's' => $space, 'y' => $y); + } + } + $this->num_columns = $numcols; + $this->current_column = 0; + $this->column_start_page = $this->page; + } + + /** + * Set columns array. + * Each column is represented by and array with the following keys: (w = width, s = space between columns, y = column top position). + * @param array $columns + * @access public + * @since 4.9.001 (2010-03-28) + */ + public function setColumnsArray($columns) { + $this->columns = $columns; + $this->num_columns = count($columns); + $this->current_column = 0; + $this->column_start_page = $this->page; + } + + /** + * Set position at a given column + * @param int $col column number (from 0 to getNumberOfColumns()-1); empty string = current column. + * @access public + * @since 4.9.001 (2010-03-28) + */ + public function selectColumn($col='') { + if (is_string($col)) { + $col = $this->current_column; + } elseif($col >= $this->num_columns) { + $col = 0; + } + if ($this->num_columns > 1) { + if ($col != $this->current_column) { + // move pointer at column top on the first page + if ($this->column_start_page == $this->page) { + $this->y = $this->columns[$col]['y']; + } else { + $this->y = $this->tMargin; + } + } + // set X position of the current column by case + $listindent = ($this->listindentlevel * $this->listindent); + if ($this->rtl) { + $x = $this->w - $this->original_rMargin - ($col * ($this->columns[$col]['w'] + $this->columns[$col]['s'])); + $this->SetRightMargin($this->w - $x + $listindent); + $this->SetLeftMargin($x - $this->columns[$col]['w']); + $this->x = $x - $listindent; + } else { + $x = $this->original_lMargin + ($col * ($this->columns[$col]['w'] + $this->columns[$col]['s'])); + $this->SetLeftMargin($x + $listindent); + $this->SetRightMargin($this->w - $x - $this->columns[$col]['w']); + $this->x = $x + $listindent; + } + $this->columns[$col]['x'] = $x; + } + $this->current_column = $col; + // fix for HTML mode + $this->newline = true; + // print HTML table header (if any) + if (!$this->empty_string($this->thead) AND (!$this->inthead)) { + // print table header + $this->writeHTML($this->thead, false, false, false, false, ''); + } + } + + /** + * Serialize an array of parameters to be used with TCPDF tag in HTML code. + * @param array $pararray parameters array + * @return sting containing serialized data + * @access public + * @since 4.9.006 (2010-04-02) + */ + public function serializeTCPDFtagParameters($pararray) { + return urlencode(serialize($pararray)); + } + + /** + * Set Text rendering mode. + * @param int $stroke outline size in user units (0 = disable). + * @param boolean $fill if true fills the text (default). + * @param boolean $clip if true activate clipping mode + * @access public + * @since 4.9.008 (2009-04-02) + */ + public function setTextRenderingMode($stroke=0, $fill=true, $clip=false) { + // Ref.: PDF 32000-1:2008 - 9.3.6 Text Rendering Mode + // convert text rendering parameters + if ($stroke < 0) { + $stroke = 0; + } + if ($fill === true) { + if ($stroke > 0) { + if ($clip === true) { + // Fill, then stroke text and add to path for clipping + $textrendermode = 6; + } else { + // Fill, then stroke text + $textrendermode = 2; + } + $textstrokewidth = $stroke; + } else { + if ($clip === true) { + // Fill text and add to path for clipping + $textrendermode = 4; + } else { + // Fill text + $textrendermode = 0; + } + } + } else { + if ($stroke > 0) { + if ($clip === true) { + // Stroke text and add to path for clipping + $textrendermode = 5; + } else { + // Stroke text + $textrendermode = 1; + } + $textstrokewidth = $stroke; + } else { + if ($clip === true) { + // Add text to path for clipping + $textrendermode = 7; + } else { + // Neither fill nor stroke text (invisible) + $textrendermode = 3; + } + } + } + $this->textrendermode = $textrendermode; + $this->textstrokewidth = $stroke * $this->k; + } + + /** + * Returns an array of chars containing soft hyphens. + * @param array $word array of chars + * @param array $patterns Array of hypenation patterns. + * @param array $dictionary Array of words to be returned without applying the hyphenation algoritm. + * @param int $leftmin Minimum number of character to leave on the left of the word without applying the hyphens. + * @param int $rightmin Minimum number of character to leave on the right of the word without applying the hyphens. + * @param int $charmin Minimum word lenght to apply the hyphenation algoritm. + * @param int $charmax Maximum lenght of broken piece of word. + * @return array text with soft hyphens + * @author Nicola Asuni + * @since 4.9.012 (2010-04-12) + * @access protected + */ + protected function hyphenateWord($word, $patterns, $dictionary=array(), $leftmin=1, $rightmin=2, $charmin=1, $charmax=8) { + $hyphenword = array(); // hyphens positions + $numchars = count($word); + if ($numchars <= $charmin) { + return $word; + } + $word_string = $this->UTF8ArrSubString($word); + // some words will be returned as-is + $pattern = '/^([a-zA-Z0-9_\.\-]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/'; + if (preg_match($pattern, $word_string) > 0) { + // email + return $word; + } + $pattern = '/(([a-zA-Z0-9\-]+\.)?)((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/'; + if (preg_match($pattern, $word_string) > 0) { + // URL + return $word; + } + if (isset($dictionary[$word_string])) { + return $this->UTF8StringToArray($dictionary[$word_string]); + } + // suround word with '_' characters + $tmpword = array_merge(array(95), $word, array(95)); + $tmpnumchars = $numchars + 2; + $maxpos = $tmpnumchars - $charmin; + for ($pos = 0; $pos < $maxpos; ++$pos) { + $imax = min(($tmpnumchars - $pos), $charmax); + for ($i = $charmin; $i <= $imax; ++$i) { + $subword = strtolower($this->UTF8ArrSubString($tmpword, $pos, $pos + $i)); + if (isset($patterns[$subword])) { + $pattern = $this->UTF8StringToArray($patterns[$subword]); + $pattern_length = count($pattern); + $digits = 1; + for ($j = 0; $j < $pattern_length; ++$j) { + // check if $pattern[$j] is a number + if (($pattern[$j] >= 48) AND ($pattern[$j] <= 57)) { + if ($j == 0) { + $zero = $pos - 1; + } else { + $zero = $pos + $j - $digits; + } + if (!isset($hyphenword[$zero]) OR ($hyphenword[$zero] != $pattern[$j])) { + $hyphenword[$zero] = $this->unichr($pattern[$j]); + } + ++$digits; + } + } + } + } + } + $inserted = 0; + $maxpos = $numchars - $rightmin; + for($i = $leftmin; $i <= $maxpos; ++$i) { + if(isset($hyphenword[$i]) AND (($hyphenword[$i] % 2) != 0)) { + // 173 = soft hyphen character + array_splice($word, $i + $inserted, 0, 173); + ++$inserted; + } + } + return $word; + } + + /** + * Returns an array of hyphenation patterns. + * @param string $file TEX file containing hypenation patterns. TEX pattrns can be downloaded from http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/ + * @return array of hyphenation patterns + * @author Nicola Asuni + * @since 4.9.012 (2010-04-12) + * @access public + */ + public function getHyphenPatternsFromTEX($file) { + // TEX patterns are available at: + // http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/ + $data = file_get_contents($file); + $patterns = array(); + // remove comments + $data = preg_replace('/\%[^\n]*/', '', $data); + // extract the patterns part + preg_match('/\\\\patterns\{([^\}]*)\}/i', $data, $matches); + $data = trim(substr($matches[0], 10, -1)); + // extract each pattern + $patterns_array = preg_split('/[\s]+/', $data); + // create new language array of patterns + $patterns = array(); + foreach($patterns_array as $val) { + if (!$this->empty_string($val)) { + $val = trim($val); + $val = str_replace('\'', '\\\'', $val); + $key = preg_replace('/[0-9]+/', '', $val); + $patterns[$key] = $val; + } + } + return $patterns; + } + + /** + * Returns text with soft hyphens. + * @param string $text text to process + * @param mixed $patterns Array of hypenation patterns or a TEX file containing hypenation patterns. TEX patterns can be downloaded from http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/ + * @param array $dictionary Array of words to be returned without applying the hyphenation algoritm. + * @param int $leftmin Minimum number of character to leave on the left of the word without applying the hyphens. + * @param int $rightmin Minimum number of character to leave on the right of the word without applying the hyphens. + * @param int $charmin Minimum word lenght to apply the hyphenation algoritm. + * @param int $charmax Maximum lenght of broken piece of word. + * @return array text with soft hyphens + * @author Nicola Asuni + * @since 4.9.012 (2010-04-12) + * @access public + */ + public function hyphenateText($text, $patterns, $dictionary=array(), $leftmin=1, $rightmin=2, $charmin=1, $charmax=8) { + global $unicode; + $text = $this->unhtmlentities($text); + $word = array(); // last word + $txtarr = array(); // text to be returned + $intag = false; // true if we are inside an HTML tag + if (!is_array($patterns)) { + $patterns = $this->getHyphenPatternsFromTEX($patterns); + } + // get array of characters + $unichars = $this->UTF8StringToArray($text); + // for each char + foreach ($unichars as $char) { + if ((!$intag) AND $unicode[$char] == 'L') { + // letter character + $word[] = $char; + } else { + // other type of character + if (!$this->empty_string($word)) { + // hypenate the word + $txtarr = array_merge($txtarr, $this->hyphenateWord($word, $patterns, $dictionary, $leftmin, $rightmin, $charmin, $charmax)); + $word = array(); + } + $txtarr[] = $char; + if (chr($char) == '<') { + // we are inside an HTML tag + $intag = true; + } elseif ($intag AND (chr($char) == '>')) { + // end of HTML tag + $intag = false; + } + } + } + if (!$this->empty_string($word)) { + // hypenate the word + $txtarr = array_merge($txtarr, $this->hyphenateWord($word, $patterns, $dictionary, $leftmin, $rightmin, $charmin, $charmax)); + } + // convert char array to string and return + return $this->UTF8ArrSubString($txtarr); + } + + /** + * Enable/disable rasterization of SVG images using ImageMagick library. + * @param boolean $mode if true enable rasterization, false otherwise. + * @access public + * @since 5.0.000 (2010-04-27) + */ + public function setRasterizeVectorImages($mode) { + $this->rasterize_vector_images = $mode; + } + + /** + * Get the Path-Painting Operators. + * @param string $style Style of rendering. Possible values are: + *
        + *
      • S or D: Stroke the path.
      • + *
      • s or d: Close and stroke the path.
      • + *
      • f or F: Fill the path, using the nonzero winding number rule to determine the region to fill.
      • + *
      • f* or F*: Fill the path, using the even-odd rule to determine the region to fill.
      • + *
      • B or FD or DF: Fill and then stroke the path, using the nonzero winding number rule to determine the region to fill.
      • + *
      • B* or F*D or DF*: Fill and then stroke the path, using the even-odd rule to determine the region to fill.
      • + *
      • b or fd or df: Close, fill, and then stroke the path, using the nonzero winding number rule to determine the region to fill.
      • + *
      • b or f*d or df*: Close, fill, and then stroke the path, using the even-odd rule to determine the region to fill.
      • + *
      • CNZ: Clipping mode using the even-odd rule to determine which regions lie inside the clipping path.
      • + *
      • CEO: Clipping mode using the nonzero winding number rule to determine which regions lie inside the clipping path
      • + *
      • n: End the path object without filling or stroking it.
      • + *
      + * @param string $default default style + * @param boolean $mode if true enable rasterization, false otherwise. + * @author Nicola Asuni + * @access protected + * @since 5.0.000 (2010-04-30) + */ + protected function getPathPaintOperator($style, $default='S') { + $op = ''; + switch($style) { + case 'S': + case 'D': { + $op = 'S'; + break; + } + case 's': + case 'd': { + $op = 's'; + break; + } + case 'f': + case 'F': { + $op = 'f'; + break; + } + case 'f*': + case 'F*': { + $op = 'f*'; + break; + } + case 'B': + case 'FD': + case 'DF': { + $op = 'B'; + break; + } + case 'B*': + case 'F*D': + case 'DF*': { + $op = 'B*'; + break; + } + case 'b': + case 'fd': + case 'df': { + $op = 'b'; + break; + } + case 'b*': + case 'f*d': + case 'df*': { + $op = 'b*'; + break; + } + case 'CNZ': { + $op = 'W n'; + break; + } + case 'CEO': { + $op = 'W* n'; + break; + } + case 'n': { + $op = 'n'; + break; + } + default: { + if (!empty($default)) { + $op = $this->getPathPaintOperator($default, ''); + } else { + $op = ''; + } + } + } + return $op; + } + + // -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- + // SVG METHODS + // -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- + + /** + * Embedd a Scalable Vector Graphics (SVG) image. + * NOTE: SVG standard is not yet fully implemented, use the setRasterizeVectorImages() method to enable/disable rasterization of SVG images using ImageMagick library. + * @param string $file Name of the SVG file. + * @param float $x Abscissa of the upper-left corner. + * @param float $y Ordinate of the upper-left corner. + * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param mixed $link URL or identifier returned by AddLink(). + * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
      • T: top-right for LTR or top-left for RTL
      • M: middle-right for LTR or middle-left for RTL
      • B: bottom-right for LTR or bottom-left for RTL
      • N: next line
      + * @param string $palign Allows to center or align the image on the current line. Possible values are:
      • L : left align
      • C : center
      • R : right align
      • '' : empty string : left for LTR or right for RTL
      + * @param mixed $border Indicates if borders must be drawn around the image. The value can be either a number:
      • 0: no border (default)
      • 1: frame
      or a string containing some or all of the following characters (in any order):
      • L: left
      • T: top
      • R: right
      • B: bottom
      + * @param boolean $fitonpage if true the image is resized to not exceed page dimensions. + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @access public + */ + public function ImageSVG($file, $x='', $y='', $w=0, $h=0, $link='', $align='', $palign='', $border=0, $fitonpage=false) { + if ($this->rasterize_vector_images) { + // convert SVG to raster image using GD or ImageMagick libraries + return $this->Image($file, $x, $y, $w, $h, 'SVG', $link, $align, true, 300, $palign, false, false, $border, false, false, false); + } + $this->svgdir = dirname($file); + $svgdata = file_get_contents($file); + if ($svgdata === false) { + $this->Error('SVG file not found: '.$file); + } + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + $k = $this->k; + $ox = 0; + $oy = 0; + $ow = $w; + $oh = $h; + $aspect_ratio_align = 'xMidYMid'; + $aspect_ratio_ms = 'meet'; + $regs = array(); + // get original image width and height + preg_match('/]*)>/si', $svgdata, $regs); + if (isset($regs[1]) AND !empty($regs[1])) { + $tmp = array(); + if (preg_match('/[\s]+x[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $ox = $this->getHTMLUnitToUnits($tmp[1], 0, $this->svgunit, false); + } + $tmp = array(); + if (preg_match('/[\s]+y[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $oy = $this->getHTMLUnitToUnits($tmp[1], 0, $this->svgunit, false); + } + $tmp = array(); + if (preg_match('/[\s]+width[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $ow = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false); + } + $tmp = array(); + if (preg_match('/[\s]+height[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $oh = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false); + } + $tmp = array(); + $view_box = array(); + if (preg_match('/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.\-]+)[\s]+([0-9\.\-]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si', $regs[1], $tmp)) { + if (count($tmp) == 5) { + array_shift($tmp); + foreach ($tmp as $key => $val) { + $view_box[$key] = $this->getHTMLUnitToUnits($val, 0, $this->svgunit, false); + } + $ox = $view_box[0]; + $oy = $view_box[1]; + } + // get aspect ratio + $tmp = array(); + if (preg_match('/[\s]+preserveAspectRatio[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $aspect_ratio = preg_split("/[\s]+/si", $tmp[1]); + switch (count($aspect_ratio)) { + case 3: { + $aspect_ratio_align = $aspect_ratio[1]; + $aspect_ratio_ms = $aspect_ratio[2]; + break; + } + case 2: { + $aspect_ratio_align = $aspect_ratio[0]; + $aspect_ratio_ms = $aspect_ratio[1]; + break; + } + case 1: { + $aspect_ratio_align = $aspect_ratio[0]; + $aspect_ratio_ms = 'meet'; + break; + } + } + } + } + } + // calculate image width and height on document + if (($w <= 0) AND ($h <= 0)) { + // convert image size to document unit + $w = $ow; + $h = $oh; + } elseif ($w <= 0) { + $w = $h * $ow / $oh; + } elseif ($h <= 0) { + $h = $w * $oh / $ow; + } + // Check whether we need a new page first as this does not fit + $prev_x = $this->x; + if ($this->checkPageBreak($h, $y)) { + $y = $this->y; + if ($this->rtl) { + $x += ($prev_x - $this->x); + } else { + $x += ($this->x - $prev_x); + } + } + // resize image to be contained on a single page + if ($fitonpage) { + $ratio_wh = $w / $h; + if (($y + $h) > $this->PageBreakTrigger) { + $h = $this->PageBreakTrigger - $y; + $w = $h * $ratio_wh; + } + if (($x + $w) > ($this->w - $this->rMargin)) { + $w = $this->w - $this->rMargin - $x; + $h = $w / $ratio_wh; + } + } + // set alignment + $this->img_rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $this->w - $x - $w; + } + $this->img_rb_x = $ximg; + } else { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x; + } + $this->img_rb_x = $ximg + $w; + } + // store current graphic vars + $gvars = $this->getGraphicVars(); + // store SVG position and scale factors + $svgoffset_x = ($ximg - $ox) * $this->k; + $svgoffset_y = -($y - $oy) * $this->k; + if (isset($view_box[2]) AND ($view_box[2] > 0) AND ($view_box[3] > 0)) { + $ow = $view_box[2]; + $oh = $view_box[3]; + } + $svgscale_x = $w / $ow; + $svgscale_y = $h / $oh; + // scaling and alignment + if ($aspect_ratio_align != 'none') { + // store current scaling values + $svgscale_old_x = $svgscale_x; + $svgscale_old_y = $svgscale_y; + // force uniform scaling + if ($aspect_ratio_ms == 'slice') { + // the entire viewport is covered by the viewBox + if ($svgscale_x > $svgscale_y) { + $svgscale_y = $svgscale_x; + } elseif ($svgscale_x < $svgscale_y) { + $svgscale_x = $svgscale_y; + } + } else { // meet + // the entire viewBox is visible within the viewport + if ($svgscale_x < $svgscale_y) { + $svgscale_y = $svgscale_x; + } elseif ($svgscale_x > $svgscale_y) { + $svgscale_x = $svgscale_y; + } + } + // correct X alignment + switch (substr($aspect_ratio_align, 1, 3)) { + case 'Min': { + // do nothing + break; + } + case 'Max': { + $svgoffset_x += (($w * $this->k) - ($ow * $this->k * $svgscale_x)); + break; + } + default: + case 'Mid': { + $svgoffset_x += ((($w * $this->k) - ($ow * $this->k * $svgscale_x)) / 2); + break; + } + } + // correct Y alignment + switch (substr($aspect_ratio_align, 5)) { + case 'Min': { + // do nothing + break; + } + case 'Max': { + $svgoffset_y -= (($h * $this->k) - ($oh * $this->k * $svgscale_y)); + break; + } + default: + case 'Mid': { + $svgoffset_y -= ((($h * $this->k) - ($oh * $this->k * $svgscale_y)) / 2); + break; + } + } + } + // save the current graphic state + $this->_out('q'.$this->epsmarker); + // set initial clipping mask + $this->Rect($x, $y, $w, $h, 'CNZ', array(), array()); + // scale and translate + $e = $ox * $this->k * (1 - $svgscale_x); + $f = ($this->h - $oy) * $this->k * (1 - $svgscale_y); + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $svgscale_x, 0, 0, $svgscale_y, $e + $svgoffset_x, $f + $svgoffset_y)); + // creates a new XML parser to be used by the other XML functions + $this->parser = xml_parser_create('UTF-8'); + // the following function allows to use parser inside object + xml_set_object($this->parser, $this); + // disable case-folding for this XML parser + xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0); + // sets the element handler functions for the XML parser + xml_set_element_handler($this->parser, 'startSVGElementHandler', 'endSVGElementHandler'); + // sets the character data handler function for the XML parser + xml_set_character_data_handler($this->parser, 'segSVGContentHandler'); + // start parsing an XML document + if(!xml_parse($this->parser, $svgdata)) { + $error_message = sprintf("SVG Error: %s at line %d", xml_error_string(xml_get_error_code($this->parser)), xml_get_current_line_number($this->parser)); + $this->Error($error_message); + } + // free this XML parser + xml_parser_free($this->parser); + // restore previous graphic state + $this->_out($this->epsmarker.'Q'); + // restore graphic vars + $this->setGraphicVars($gvars); + if (!empty($border)) { + $bx = $x; + $by = $y; + $this->x = $ximg; + if ($this->rtl) { + $this->x += $w; + } + $this->y = $y; + $this->Cell($w, $h, '', $border, 0, '', 0, '', 0); + $this->x = $bx; + $this->y = $by; + } + if ($link) { + $this->Link($ximg, $y, $w, $h, $link, 0); + } + // set pointer to align the successive text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + $this->endlinex = $this->img_rb_x; + } + + /** + * Get the tranformation matrix from SVG transform attribute + * @param string transformation + * @return array of transformations + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @access protected + */ + protected function getSVGTransformMatrix($attribute) { + // identity matrix + $tm = array(1, 0, 0, 1, 0, 0); + $continue = true; + while ($continue) { + $continue = false; + // matrix + $regs = array(); + if (preg_match('/matrix\(([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)\)/si', $attribute, $regs)) { + $attribute = str_replace($regs[0], '', $attribute); + $continue = true; + $a = $regs[1]; + $b = $regs[2]; + $c = $regs[3]; + $d = $regs[4]; + $e = $regs[5]; + $f = $regs[6]; + $tm = $this->getTransformationMatrixProduct($tm, array($a, $b, $c, $d, $e, $f)); + } + // translate x + $regs = array(); + if (preg_match('/translate\(([a-z0-9\-\.]+)\)/si', $attribute, $regs)) { + $attribute = str_replace($regs[0], 'translate('.$regs[1].',0)', $attribute); + $continue = true; + } + // translate x,y + $regs = array(); + if (preg_match('/translate\(([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)\)/si', $attribute, $regs)) { + $attribute = str_replace($regs[0], '', $attribute); + $continue = true; + $e = $regs[1]; + $f = $regs[2]; + $tm = $this->getTransformationMatrixProduct($tm, array(1, 0, 0, 1, $e, $f)); + } + // scale x + $regs = array(); + if (preg_match('/scale\(([a-z0-9\-\.]+)\)/si', $attribute, $regs)) { + $attribute = str_replace($regs[0], 'scale('.$regs[1].','.$regs[1].')', $attribute); + $continue = true; + } + // scale x,y + $regs = array(); + if (preg_match('/scale\(([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)\)/si', $attribute, $regs)) { + $attribute = str_replace($regs[0], '', $attribute); + $continue = true; + $a = $regs[1]; + if (isset($regs[2]) AND (strlen(trim($regs[2])) > 0)) { + $d = $regs[2]; + } else { + $d = $a; + } + $tm = $this->getTransformationMatrixProduct($tm, array($a, 0, 0, $d, 0, 0)); + } + // rotate ang + $regs = array(); + if (preg_match('/rotate\(([a-z0-9\-\.]+)\)/si', $attribute, $regs)) { + $attribute = str_replace($regs[0], 'rotate('.$regs[1].',0,0)', $attribute); + $continue = true; + } + // rotate ang,x,y + $regs = array(); + if (preg_match('/rotate\(([0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)\)/si', $attribute, $regs)) { + $attribute = str_replace($regs[0], '', $attribute); + $continue = true; + $ang = deg2rad($regs[1]); + $a = cos($ang); + $b = sin($ang); + $c = -$b; + $d = $a; + $x = $regs[2]; + $y = $regs[3]; + $e = ($x * (1 - $a)) - ($y * $c); + $f = ($y * (1 - $d)) - ($x * $b); + $tm = $this->getTransformationMatrixProduct($tm, array($a, $b, $c, $d, $e, $f)); + } + // skewX + $regs = array(); + if (preg_match('/skewX\(([0-9\-\.]+)\)/si', $attribute, $regs)) { + $attribute = str_replace($regs[0], '', $attribute); + $continue = true; + $c = tan(deg2rad($regs[1])); + $tm = $this->getTransformationMatrixProduct($tm, array(1, 0, $c, 1, 0, 0)); + } + // skewY + $regs = array(); + if (preg_match('/skewY\(([0-9\-\.]+)\)/si', $attribute, $regs)) { + $attribute = str_replace($regs[0], '', $attribute); + $continue = true; + $b = tan(deg2rad($regs[1])); + $tm = $this->getTransformationMatrixProduct($tm, array(1, $b, 0, 1, 0, 0)); + } + } + return $tm; + } + + /** + * Get the product of two SVG tranformation matrices + * @param array $ta first SVG tranformation matrix + * @param array $tb second SVG tranformation matrix + * @return transformation array + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @access protected + */ + protected function getTransformationMatrixProduct($ta, $tb) { + $tm = array(); + $tm[0] = ($ta[0] * $tb[0]) + ($ta[2] * $tb[1]); + $tm[1] = ($ta[1] * $tb[0]) + ($ta[3] * $tb[1]); + $tm[2] = ($ta[0] * $tb[2]) + ($ta[2] * $tb[3]); + $tm[3] = ($ta[1] * $tb[2]) + ($ta[3] * $tb[3]); + $tm[4] = ($ta[0] * $tb[4]) + ($ta[2] * $tb[5]) + $ta[4]; + $tm[5] = ($ta[1] * $tb[4]) + ($ta[3] * $tb[5]) + $ta[5]; + return $tm; + } + + /** + * Convert SVG transformation matrix to PDF. + * @param array $tm original SVG transformation matrix + * @return array transformation matrix + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected function convertSVGtMatrix($tm) { + $a = $tm[0]; + $b = -$tm[1]; + $c = -$tm[2]; + $d = $tm[3]; + $e = $this->getHTMLUnitToUnits($tm[4], 1, $this->svgunit, false) * $this->k; + $f = -$this->getHTMLUnitToUnits($tm[5], 1, $this->svgunit, false) * $this->k; + $x = 0; + $y = $this->h * $this->k; + $e = ($x * (1 - $a)) - ($y * $c) + $e; + $f = ($y * (1 - $d)) - ($x * $b) + $f; + return array($a, $b, $c, $d, $e, $f); + } + + /** + * Apply SVG graphic transformation matrix. + * @param array $tm original SVG transformation matrix + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected function SVGTransform($tm) { + $this->Transform($this->convertSVGtMatrix($tm)); + } + + /** + * Apply the requested SVG styles (*** TO BE COMPLETED ***) + * @param array $svgstyle array of SVG styles to apply + * @param array $prevsvgstyle array of previous SVG style + * @param int $x X origin of the bounding box + * @param int $y Y origin of the bounding box + * @param int $w width of the bounding box + * @param int $h height of the bounding box + * @param string $clip_function clip function + * @param array $clip_params array of parameters for clipping function + * @return object style + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @access protected + */ + protected function setSVGStyles($svgstyle, $prevsvgstyle, $x=0, $y=0, $w=1, $h=1, $clip_function='', $clip_params=array()) { + $objstyle = ''; + if(!isset($svgstyle['opacity'])) { + return $objstyle; + } + // clip-path + $regs = array(); + if (preg_match('/url\([\s]*\#([^\)]*)\)/si', $svgstyle['clip-path'], $regs)) { + $clip_path = $this->svgclippaths[$regs[1]]; + foreach ($clip_path as $cp) { + $this->startSVGElementHandler('clip-path', $cp['name'], $cp['attribs']); + } + } + //$this->SetAlpha(1); // reset alpha + // opacity + if ($svgstyle['opacity'] != 1) { + $this->SetAlpha($svgstyle['opacity']); + } + // color + $fill_color = $this->convertHTMLColorToDec($svgstyle['color']); + $this->SetFillColorArray($fill_color); + // text color + $text_color = $this->convertHTMLColorToDec($svgstyle['text-color']); + $this->SetTextColorArray($text_color); + // clip + if (preg_match('/rect\(([a-z0-9\-\.]*)[\s]*([a-z0-9\-\.]*)[\s]*([a-z0-9\-\.]*)[\s]*([a-z0-9\-\.]*)\)/si', $svgstyle['clip'], $regs)) { + $top = (isset($regs[1])?$this->getHTMLUnitToUnits($regs[1], 0, $this->svgunit, false):0); + $right = (isset($regs[2])?$this->getHTMLUnitToUnits($regs[2], 0, $this->svgunit, false):0); + $bottom = (isset($regs[3])?$this->getHTMLUnitToUnits($regs[3], 0, $this->svgunit, false):0); + $left = (isset($regs[4])?$this->getHTMLUnitToUnits($regs[4], 0, $this->svgunit, false):0); + $cx = $x + $left; + $cy = $y + $top; + $cw = $w - $left - $right; + $ch = $h - $top - $bottom; + if ($svgstyle['clip-rule'] == 'evenodd') { + $clip_rule = 'CNZ'; + } else { + $clip_rule = 'CEO'; + } + $this->Rect($cx, $cy, $cw, $ch, $clip_rule, array(), array()); + } + // fill + $regs = array(); + if (preg_match('/url\([\s]*\#([^\)]*)\)/si', $svgstyle['fill'], $regs)) { + // gradient + $gradient = $this->svggradients[$regs[1]]; + if (isset($gradient['xref'])) { + // reference to another gradient definition + $newgradient = $this->svggradients[$gradient['xref']]; + $newgradient['coords'] = $gradient['coords']; + $newgradient['mode'] = $gradient['mode']; + $newgradient['gradientUnits'] = $gradient['gradientUnits']; + if (isset($gradient['gradientTransform'])) { + $newgradient['gradientTransform'] = $gradient['gradientTransform']; + } + $gradient = $newgradient; + } + //save current Graphic State + $this->_out('q'); + //set clipping area + if (!empty($clip_function) AND method_exists($this, $clip_function)) { + $bbox = call_user_func_array(array($this, $clip_function), $clip_params); + if (is_array($bbox) AND (count($bbox) == 4)) { + list($x, $y, $w, $h) = $bbox; + } + } + if ($gradient['mode'] == 'measure') { + if (isset($gradient['gradientTransform']) AND !empty($gradient['gradientTransform'])) { + $gtm = $gradient['gradientTransform']; + // apply transformation matrix + $xa = ($gtm[0] * $gradient['coords'][0]) + ($gtm[2] * $gradient['coords'][1]) + $gtm[4]; + $ya = ($gtm[1] * $gradient['coords'][0]) + ($gtm[3] * $gradient['coords'][1]) + $gtm[5]; + $xb = ($gtm[0] * $gradient['coords'][2]) + ($gtm[2] * $gradient['coords'][3]) + $gtm[4]; + $yb = ($gtm[1] * $gradient['coords'][2]) + ($gtm[3] * $gradient['coords'][3]) + $gtm[5]; + if (isset($gradient['coords'][4])) { + $gradient['coords'][4] = sqrt(pow(($gtm[0] * $gradient['coords'][4]), 2) + pow(($gtm[1] * $gradient['coords'][4]), 2)); + } + $gradient['coords'][0] = $xa; + $gradient['coords'][1] = $ya; + $gradient['coords'][2] = $xb; + $gradient['coords'][3] = $yb; + + } + // convert SVG coordinates to user units + $gradient['coords'][0] = $this->getHTMLUnitToUnits($gradient['coords'][0], 0, $this->svgunit, false); + $gradient['coords'][1] = $this->getHTMLUnitToUnits($gradient['coords'][1], 0, $this->svgunit, false); + $gradient['coords'][2] = $this->getHTMLUnitToUnits($gradient['coords'][2], 0, $this->svgunit, false); + $gradient['coords'][3] = $this->getHTMLUnitToUnits($gradient['coords'][3], 0, $this->svgunit, false); + if (isset($gradient['coords'][4])) { + $gradient['coords'][4] = $this->getHTMLUnitToUnits($gradient['coords'][4], 0, $this->svgunit, false); + } + // shift units + if ($gradient['gradientUnits'] == 'objectBoundingBox') { + // convert to SVG coordinate system + $gradient['coords'][0] += $x; + $gradient['coords'][1] += $y; + $gradient['coords'][2] += $x; + $gradient['coords'][3] += $y; + } + // calculate percentages + $gradient['coords'][0] = ($gradient['coords'][0] - $x) / $w; + $gradient['coords'][1] = ($gradient['coords'][1] - $y) / $h; + $gradient['coords'][2] = ($gradient['coords'][2] - $x) / $w; + $gradient['coords'][3] = ($gradient['coords'][3] - $y) / $h; + if (isset($gradient['coords'][4])) { + $gradient['coords'][4] /= $w; + } + // fix values + foreach($gradient['coords'] as $key => $val) { + if ($val < 0) { + $gradient['coords'][$key] = 0; + } elseif ($val > 1) { + $gradient['coords'][$key] = 1; + } + } + if (($gradient['type'] == 2) AND ($gradient['coords'][0] == $gradient['coords'][2]) AND ($gradient['coords'][1] == $gradient['coords'][3])) { + // single color (no shading) + $gradient['coords'][0] = 1; + $gradient['coords'][1] = 0; + $gradient['coords'][2] = 0.999; + $gradient['coords'][3] = 0; + } + } + // swap Y coordinates + $tmp = $gradient['coords'][1]; + $gradient['coords'][1] = $gradient['coords'][3]; + $gradient['coords'][3] = $tmp; + // set transformation map for gradient + if (($gradient['type'] == 3) AND ($gradient['mode'] == 'measure')) { + // gradient is always circular + $cy = $this->h - $y - ($gradient['coords'][1] * ($w + $h)); + $this->_out(sprintf('%.3F 0 0 %.3F %.3F %.3F cm', $w*$this->k, $w*$this->k, $x*$this->k, $cy*$this->k)); + } else { + $this->_out(sprintf('%.3F 0 0 %.3F %.3F %.3F cm', $w*$this->k, $h*$this->k, $x*$this->k, ($this->h-($y+$h))*$this->k)); + } + if (count($gradient['stops']) > 1) { + $this->Gradient($gradient['type'], $gradient['coords'], $gradient['stops'], array(), false); + } + } elseif ($svgstyle['fill'] != 'none') { + $fill_color = $this->convertHTMLColorToDec($svgstyle['fill']); + if ($svgstyle['fill-opacity'] != 1) { + $this->SetAlpha($svgstyle['fill-opacity']); + } + $this->SetFillColorArray($fill_color); + if ($svgstyle['fill-rule'] == 'evenodd') { + $objstyle .= 'F*'; + } else { + $objstyle .= 'F'; + } + } + // stroke + if ($svgstyle['stroke'] != 'none') { + $stroke_style = array( + 'color' => $this->convertHTMLColorToDec($svgstyle['stroke']), + 'width' => $this->getHTMLUnitToUnits($svgstyle['stroke-width'], 0, $this->svgunit, false), + 'cap' => $svgstyle['stroke-linecap'], + 'join' => $svgstyle['stroke-linejoin'] + ); + if (isset($svgstyle['stroke-dasharray']) AND !empty($svgstyle['stroke-dasharray']) AND ($svgstyle['stroke-dasharray'] != 'none')) { + $stroke_style['dash'] = $svgstyle['stroke-dasharray']; + } + $this->SetLineStyle($stroke_style); + $objstyle .= 'D'; + } + // font + $regs = array(); + if (!empty($svgstyle['font'])) { + if (preg_match('/font-family[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) { + $font_family = trim($regs[1]); + } else { + $font_family = $svgstyle['font-family']; + } + if (preg_match('/font-size[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) { + $font_size = trim($regs[1]); + } else { + $font_size = $svgstyle['font-size']; + } + if (preg_match('/font-style[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) { + $font_style = trim($regs[1]); + } else { + $font_style = $svgstyle['font-style']; + } + if (preg_match('/font-weight[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) { + $font_weight = trim($regs[1]); + } else { + $font_weight = $svgstyle['font-weight']; + } + } else { + $font_family = $svgstyle['font-family']; + $font_size = $svgstyle['font-size']; + $font_style = $svgstyle['font-style']; + $font_weight = $svgstyle['font-weight']; + } + $font_size = $this->getHTMLUnitToUnits($font_size, $prevsvgstyle['font-size'], $this->svgunit, false) * $this->k; + switch ($font_style) { + case 'italic': { + $font_style = 'I'; + break; + } + case 'oblique': { + $font_style = 'I'; + break; + } + default: + case 'normal': { + $font_style = ''; + break; + } + } + switch ($font_weight) { + case 'bold': + case 'bolder': { + $font_style .= 'B'; + break; + } + } + switch ($svgstyle['text-decoration']) { + case 'underline': { + $font_style .= 'U'; + break; + } + case 'overline': { + $font_style .= 'O'; + break; + } + case 'line-through': { + $font_style .= 'D'; + break; + } + default: + case 'none': { + break; + } + } + $this->SetFont($font_family, $font_style, $font_size); + return $objstyle; + } + + /** + * Draws an SVG path + * @param string $d attribute d of the path SVG element + * @param string $style Style of rendering. Possible values are: + *
        + *
      • D or empty string: Draw (default).
      • + *
      • F: Fill.
      • + *
      • F*: Fill using the even-odd rule to determine which regions lie inside the clipping path.
      • + *
      • DF or FD: Draw and fill.
      • + *
      • DF* or FD*: Draw and fill using the even-odd rule to determine which regions lie inside the clipping path.
      • + *
      • CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).
      • + *
      • CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).
      • + *
      + * @return array of container box measures (x, y, w, h) + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @access protected + */ + protected function SVGPath($d, $style='') { + // set fill/stroke style + $op = $this->getPathPaintOperator($style, ''); + if (empty($op)) { + return; + } + $paths = array(); + preg_match_all('/([a-zA-Z])[\s]*([^a-zA-Z\"]*)/si', $d, $paths, PREG_SET_ORDER); + $x = 0; + $y = 0; + $x1 = 0; + $y1 = 0; + $x2 = 0; + $y2 = 0; + $xmin = 2147483647; + $xmax = 0; + $ymin = 2147483647; + $ymax = 0; + $relcoord = false; + // draw curve pieces + foreach ($paths as $key => $val) { + // get curve type + $cmd = trim($val[1]); + if (strtolower($cmd) == $cmd) { + // use relative coordinated instead of absolute + $relcoord = true; + $xoffset = $x; + $yoffset = $y; + } else { + $relcoord = false; + $xoffset = 0; + $yoffset = 0; + } + $params = array(); + if (isset($val[2])) { + // get curve parameters + $rawparams = preg_split('/([\,\s]+)/si', trim($val[2])); + $params = array(); + foreach ($rawparams as $ck => $cp) { + $params[$ck] = $this->getHTMLUnitToUnits($cp, 0, $this->svgunit, false); + } + } + switch (strtoupper($cmd)) { + case 'M': { // moveto + foreach ($params as $ck => $cp) { + if (($ck % 2) == 0) { + $x = $cp + $xoffset; + } else { + $y = $cp + $yoffset; + if ($ck == 1) { + $this->_outPoint($x, $y); + } else { + $this->_outLine($x, $y); + } + $xmin = min($xmin, $x); + $ymin = min($ymin, $y); + $xmax = max($xmax, $x); + $ymax = max($ymax, $y); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'L': { // lineto + foreach ($params as $ck => $cp) { + if (($ck % 2) == 0) { + $x = $cp + $xoffset; + } else { + $y = $cp + $yoffset; + $this->_outLine($x, $y); + $xmin = min($xmin, $x); + $ymin = min($ymin, $y); + $xmax = max($xmax, $x); + $ymax = max($ymax, $y); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'H': { // horizontal lineto + foreach ($params as $ck => $cp) { + $x = $cp + $xoffset; + $this->_outLine($x, $y); + $xmin = min($xmin, $x); + $xmax = max($xmax, $x); + if ($relcoord) { + $xoffset = $x; + } + } + break; + } + case 'V': { // vertical lineto + foreach ($params as $ck => $cp) { + $y = $cp + $yoffset; + $this->_outLine($x, $y); + $ymin = min($ymin, $y); + $ymax = max($ymax, $y); + if ($relcoord) { + $yoffset = $y; + } + } + break; + } + case 'C': { // curveto + foreach ($params as $ck => $cp) { + $params[$ck] = $cp; + if ((($ck + 1) % 6) == 0) { + $x1 = $params[($ck - 5)] + $xoffset; + $y1 = $params[($ck - 4)] + $yoffset; + $x2 = $params[($ck - 3)] + $xoffset; + $y2 = $params[($ck - 2)] + $yoffset; + $x = $params[($ck - 1)] + $xoffset; + $y = $params[($ck)] + $yoffset; + $this->_outCurve($x1, $y1, $x2, $y2, $x, $y); + $xmin = min($xmin, $x, $x1, $x2); + $ymin = min($ymin, $y, $y1, $y2); + $xmax = max($xmax, $x, $x1, $x2); + $ymax = max($ymax, $y, $y1, $y2); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'S': { // shorthand/smooth curveto + foreach ($params as $ck => $cp) { + $params[$ck] = $cp; + if ((($ck + 1) % 4) == 0) { + if (($key > 0) AND ((strtoupper($paths[($key - 1)][1]) == 'C') OR (strtoupper($paths[($key - 1)][1]) == 'S'))) { + $x1 = (2 * $x) - $x2; + $y1 = (2 * $y) - $y2; + } else { + $x1 = $x; + $y1 = $y; + } + $x2 = $params[($ck - 3)] + $xoffset; + $y2 = $params[($ck - 2)] + $yoffset; + $x = $params[($ck - 1)] + $xoffset; + $y = $params[($ck)] + $yoffset; + $this->_outCurve($x1, $y1, $x2, $y2, $x, $y); + $xmin = min($xmin, $x, $x1, $x2); + $ymin = min($ymin, $y, $y1, $y2); + $xmax = max($xmax, $x, $x1, $x2); + $ymax = max($ymax, $y, $y1, $y2); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'Q': { // quadratic B�zier curveto + foreach ($params as $ck => $cp) { + $params[$ck] = $cp; + if ((($ck + 1) % 4) == 0) { + // convert quadratic points to cubic points + $x1 = $params[($ck - 3)] + $xoffset; + $y1 = $params[($ck - 2)] + $yoffset; + $xa = ($x + (2 * $x1)) / 3; + $ya = ($y + (2 * $y1)) / 3; + $x = $params[($ck - 1)] + $xoffset; + $y = $params[($ck)] + $yoffset; + $xb = ($x + (2 * $x1)) / 3; + $yb = ($y + (2 * $y1)) / 3; + $this->_outCurve($xa, $ya, $xb, $yb, $x, $y); + $xmin = min($xmin, $x, $xa, $xb); + $ymin = min($ymin, $y, $ya, $yb); + $xmax = max($xmax, $x, $xa, $xb); + $ymax = max($ymax, $y, $ya, $yb); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'T': { // shorthand/smooth quadratic B�zier curveto + foreach ($params as $ck => $cp) { + $params[$ck] = $cp; + if (($ck % 2) != 0) { + if (($key > 0) AND ((strtoupper($paths[($key - 1)][1]) == 'Q') OR (strtoupper($paths[($key - 1)][1]) == 'T'))) { + $x1 = (2 * $x) - $x1; + $y1 = (2 * $y) - $y1; + } else { + $x1 = $x; + $y1 = $y; + } + // convert quadratic points to cubic points + $xa = ($x + (2 * $x1)) / 3; + $ya = ($y + (2 * $y1)) / 3; + $x = $params[($ck - 1)] + $xoffset; + $y = $params[($ck)] + $yoffset; + $xb = ($x + (2 * $x1)) / 3; + $yb = ($y + (2 * $y1)) / 3; + $this->_outCurve($xa, $ya, $xb, $yb, $x, $y); + $xmin = min($xmin, $x, $x1, $x2); + $ymin = min($ymin, $y, $y1, $y2); + $xmax = max($xmax, $x, $x1, $x2); + $ymax = max($ymax, $y, $y1, $y2); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'A': { // elliptical arc + foreach ($params as $ck => $cp) { + $params[$ck] = $cp; + if ((($ck + 1) % 7) == 0) { + $x0 = $x; + $y0 = $y; + $rx = abs($params[($ck - 6)]); + $ry = abs($params[($ck - 5)]); + $ang = -$rawparams[($ck - 4)]; + $angle = deg2rad($ang); + $fa = $rawparams[($ck - 3)]; // large-arc-flag + $fs = $rawparams[($ck - 2)]; // sweep-flag + $x = $params[($ck - 1)] + $xoffset; + $y = $params[$ck] + $yoffset; + $cos_ang = cos($angle); + $sin_ang = sin($angle); + $a = ($x0 - $x) / 2; + $b = ($y0 - $y) / 2; + $xa = ($a * $cos_ang) - ($b * $sin_ang); + $ya = ($a * $sin_ang) + ($b * $cos_ang); + $rx2 = $rx * $rx; + $ry2 = $ry * $ry; + $xa2 = $xa * $xa; + $ya2 = $ya * $ya; + $delta = ($xa2 / $rx2) + ($ya2 / $ry2); + if ($delta > 1) { + $rx *= sqrt($delta); + $ry *= sqrt($delta); + $rx2 = $rx * $rx; + $ry2 = $ry * $ry; + } + $numerator = (($rx2 * $ry2) - ($rx2 * $ya2) - ($ry2 * $xa2)); + if ($numerator < 0) { + $root = 0; + } else { + $root = sqrt($numerator / (($rx2 * $ya2) + ($ry2 * $xa2))); + } + if ($fa == $fs) { + $root *= -1; + } + $cax = $root * (($rx * $ya) / $ry); + $cay = -$root * (($ry * $xa) / $rx); + // coordinates of ellipse center + $cx = ($cax * $cos_ang) - ($cay * $sin_ang) + (($x0 + $x) / 2); + $cy = ($cax * $sin_ang) + ($cay * $cos_ang) + (($y0 + $y) / 2); + // get angles + $angs = $this->getVectorsAngle(1, 0, (($xa - $cax) / $rx), (($cay - $ya) / $ry)); + $dang = $this->getVectorsAngle((($xa - $cax) / $rx), (($ya - $cay) / $ry), ((-$xa - $cax) / $rx), ((-$ya - $cay) / $ry)); + if (($fs == 0) AND ($dang > 0)) { + $dang -= (2 * M_PI); + } elseif (($fs == 1) AND ($dang < 0)) { + $dang += (2 * M_PI); + } + $angf = $angs - $dang; + if (($fs == 1) AND ($angs > $angf)) { + $tmp = $angs; + $angs = $angf; + $angf = $tmp; + } + $angs = rad2deg($angs); + $angf = rad2deg($angf); + $pie = false; + if ((isset($paths[($key + 1)][1])) AND (trim($paths[($key + 1)][1]) == 'z')) { + $pie = true; + } + $this->_outellipticalarc($cx, $cy, $rx, $ry, $ang, $angs, $angf, $pie, 2); + $this->_outPoint($x, $y); + $xmin = min($xmin, $x); + $ymin = min($ymin, $y); + $xmax = max($xmax, $x); + $ymax = max($ymax, $y); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'Z': { + $this->_out('h'); + break; + } + } + } // end foreach + if (!empty($op)) { + $this->_out($op); + } + return array($xmin, $ymin, ($xmax - $xmin), ($ymax - $ymin)); + } + + /** + * Returns the angle in radiants between two vectors + * @param int $x1 X coordiante of first vector point + * @param int $y1 Y coordiante of first vector point + * @param int $x2 X coordiante of second vector point + * @param int $y2 Y coordiante of second vector point + * @author Nicola Asuni + * @since 5.0.000 (2010-05-04) + * @access protected + */ + protected function getVectorsAngle($x1, $y1, $x2, $y2) { + $dprod = ($x1 * $x2) + ($y1 * $y2); + $dist1 = sqrt(($x1 * $x1) + ($y1 * $y1)); + $dist2 = sqrt(($x2 * $x2) + ($y2 * $y2)); + $angle = acos($dprod / ($dist1 * $dist2)); + if (is_nan($angle)) { + $angle = M_PI; + } + if ((($x1 * $y2) - ($x2 * $y1)) < 0) { + $angle *= -1; + } + return $angle; + } + + /** + * Sets the opening SVG element handler function for the XML parser. (*** TO BE COMPLETED ***) + * @param resource $parser The first parameter, parser, is a reference to the XML parser calling the handler. + * @param string $name The second parameter, name, contains the name of the element for which this handler is called. If case-folding is in effect for this parser, the element name will be in uppercase letters. + * @param array $attribs The third parameter, attribs, contains an associative array with the element's attributes (if any). The keys of this array are the attribute names, the values are the attribute values. Attribute names are case-folded on the same criteria as element names. Attribute values are not case-folded. The original order of the attributes can be retrieved by walking through attribs the normal way, using each(). The first key in the array was the first attribute, and so on. + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @access protected + */ + protected function startSVGElementHandler($parser, $name, $attribs) { + // check if we are in clip mode + if ($this->svgclipmode) { + $this->svgclippaths[$this->svgclipid][] = array('name' => $name, 'attribs' => $attribs); + return; + } + if ($this->svgdefsmode AND !in_array($name, array('clipPath', 'linearGradient', 'radialGradient', 'stop'))) { + $this->svgdefs[$attribs['id']] = array('name' => $name, 'attribs' => $attribs); + return; + } + $clipping = false; + if ($parser == 'clip-path') { + // set clipping mode + $clipping = true; + } + // get styling properties + $prev_svgstyle = $this->svgstyles[(count($this->svgstyles) - 1)]; // previous style + $svgstyle = array(); // current style + if (isset($attribs['style'])) { + $attribs['style'] = ';'.$attribs['style']; + } + foreach ($prev_svgstyle as $key => $val) { + if (isset($attribs[$key])) { + if ($attribs[$key] == 'inherit') { + $svgstyle[$key] = $val; + } else { + $svgstyle[$key] = $attribs[$key]; + } + } elseif (isset($attribs['style'])) { + // CSS style syntax + $attrval = array(); + if (preg_match('/[;\"\s]{1}'.$key.'[\s]*:[\s]*([^;\"\s]*)/si', $attribs['style'], $attrval) AND isset($attrval[1])) { + if ($attrval[1] == 'inherit') { + $svgstyle[$key] = $val; + } else { + $svgstyle[$key] = $attrval[1]; + } + } else { + // default value + $svgstyle[$key] = $this->svgstyles[0][$key]; + } + } else { + if (in_array($key, $this->svginheritprop)) { + // inherit previous value + $svgstyle[$key] = $val; + } else { + // default value + $svgstyle[$key] = $this->svgstyles[0][$key]; + } + } + } + // transformation matrix + $tm = $this->svgstyles[(count($this->svgstyles) - 1)]['transfmatrix']; + if (isset($attribs['transform']) AND !empty($attribs['transform'])) { + $tm = $this->getTransformationMatrixProduct($tm, $this->getSVGTransformMatrix($attribs['transform'])); + } + $svgstyle['transfmatrix'] = $tm; + // process tag + switch($name) { + case 'defs': { + $this->svgdefsmode = true; + break; + } + // clipPath + case 'clipPath': { + $this->svgclipmode = true; + $this->svgclipid = $attribs['id']; + $this->svgclippaths[$this->svgclipid] = array(); + break; + } + case 'svg': { + // start of SVG object + break; + } + case 'g': { + // group together related graphics elements + array_push($this->svgstyles, $svgstyle); + $this->StartTransform(); + $this->setSVGStyles($svgstyle, $prev_svgstyle); + break; + } + case 'linearGradient': { + $this->svggradientid = $attribs['id']; + $this->svggradients[$this->svggradientid] = array(); + $this->svggradients[$this->svggradientid]['type'] = 2; + $this->svggradients[$this->svggradientid]['stops'] = array(); + if (isset($attribs['gradientUnits'])) { + $this->svggradients[$this->svggradientid]['gradientUnits'] = $attribs['gradientUnits']; + } else { + $this->svggradients[$this->svggradientid]['gradientUnits'] = 'objectBoundingBox'; + } + //$attribs['spreadMethod'] + $x1 = (isset($attribs['x1'])?$attribs['x1']:0); + $y1 = (isset($attribs['y1'])?$attribs['y1']:0); + $x2 = (isset($attribs['x2'])?$attribs['x2']:1); + $y2 = (isset($attribs['y2'])?$attribs['y2']:0); + if (isset($attribs['x1']) AND (substr($attribs['x1'], -1) != '%')) { + $this->svggradients[$this->svggradientid]['mode'] = 'measure'; + } else { + $this->svggradients[$this->svggradientid]['mode'] = 'percentage'; + } + if (isset($attribs['gradientTransform'])) { + $this->svggradients[$this->svggradientid]['gradientTransform'] = $this->getSVGTransformMatrix($attribs['gradientTransform']); + } + $this->svggradients[$this->svggradientid]['coords'] = array($x1, $y1, $x2, $y2); + if (isset($attribs['xlink:href']) AND !empty($attribs['xlink:href'])) { + // gradient is defined on another place + $this->svggradients[$this->svggradientid]['xref'] = substr($attribs['xlink:href'], 1); + } + break; + } + case 'radialGradient': { + $this->svggradientid = $attribs['id']; + $this->svggradients[$this->svggradientid] = array(); + $this->svggradients[$this->svggradientid]['type'] = 3; + $this->svggradients[$this->svggradientid]['stops'] = array(); + if (isset($attribs['gradientUnits'])) { + $this->svggradients[$this->svggradientid]['gradientUnits'] = $attribs['gradientUnits']; + } else { + $this->svggradients[$this->svggradientid]['gradientUnits'] = 'objectBoundingBox'; + } + //$attribs['spreadMethod'] + $cx = (isset($attribs['cx'])?$attribs['cx']:0.5); + $cy = (isset($attribs['cy'])?$attribs['cy']:0.5); + $fx = (isset($attribs['fx'])?$attribs['fx']:$cx); + $fy = (isset($attribs['fy'])?$attribs['fy']:$cy); + $r = (isset($attribs['r'])?$attribs['r']:0.5); + if (isset($attribs['cx']) AND (substr($attribs['cx'], -1) != '%')) { + $this->svggradients[$this->svggradientid]['mode'] = 'measure'; + } else { + $this->svggradients[$this->svggradientid]['mode'] = 'percentage'; + } + if (isset($attribs['gradientTransform'])) { + $this->svggradients[$this->svggradientid]['gradientTransform'] = $this->getSVGTransformMatrix($attribs['gradientTransform']); + } + $this->svggradients[$this->svggradientid]['coords'] = array($cx, $cy, $fx, $fy, $r); + if (isset($attribs['xlink:href']) AND !empty($attribs['xlink:href'])) { + // gradient is defined on another place + $this->svggradients[$this->svggradientid]['xref'] = substr($attribs['xlink:href'], 1); + } + break; + } + case 'stop': { + // gradient stops + if (substr($attribs['offset'], -1) == '%') { + $offset = floatval(substr($attribs['offset'], -1)) / 100; + } else { + $offset = floatval($attribs['offset']); + if ($offset > 1) { + $offset /= 100; + } + } + $stop_color = isset($svgstyle['stop-color'])?$this->convertHTMLColorToDec($svgstyle['stop-color']):'black'; + $opacity = isset($svgstyle['stop-opacity'])?$svgstyle['stop-opacity']:1; + $this->svggradients[$this->svggradientid]['stops'][] = array('offset' => $offset, 'color' => $stop_color, 'opacity' => $opacity); + break; + } + // paths + case 'path': { + $d = trim($attribs['d']); + if ($clipping) { + $this->SVGTransform($tm); + $this->SVGPath($d, 'CNZ'); + } else { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, 0, 0, 1, 1, 'SVGPath', array($d, 'CNZ')); + if (!empty($obstyle)) { + $this->SVGPath($d, $obstyle); + } + $this->StopTransform(); + } + break; + } + // shapes + case 'rect': { + $x = (isset($attribs['x'])?$this->getHTMLUnitToUnits($attribs['x'], 0, $this->svgunit, false):0); + $y = (isset($attribs['y'])?$this->getHTMLUnitToUnits($attribs['y'], 0, $this->svgunit, false):0); + $w = (isset($attribs['width'])?$this->getHTMLUnitToUnits($attribs['width'], 0, $this->svgunit, false):0); + $h = (isset($attribs['height'])?$this->getHTMLUnitToUnits($attribs['height'], 0, $this->svgunit, false):0); + $rx = (isset($attribs['rx'])?$this->getHTMLUnitToUnits($attribs['rx'], 0, $this->svgunit, false):0); + $ry = (isset($attribs['ry'])?$this->getHTMLUnitToUnits($attribs['ry'], 0, $this->svgunit, false):$rx); + if ($clipping) { + $this->SVGTransform($tm); + $this->RoundedRectXY($x, $y, $w, $h, $rx, $ry, '1111', 'CNZ', array(), array()); + } else { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'RoundedRectXY', array($x, $y, $w, $h, $rx, $ry, '1111', 'CNZ')); + if (!empty($obstyle)) { + $this->RoundedRectXY($x, $y, $w, $h, $rx, $ry, '1111', $obstyle, array(), array()); + } + $this->StopTransform(); + } + break; + } + case 'circle': { + $cx = (isset($attribs['cx'])?$this->getHTMLUnitToUnits($attribs['cx'], 0, $this->svgunit, false):0); + $cy = (isset($attribs['cy'])?$this->getHTMLUnitToUnits($attribs['cy'], 0, $this->svgunit, false):0); + $r = (isset($attribs['r'])?$this->getHTMLUnitToUnits($attribs['r'], 0, $this->svgunit, false):0); + $x = $cx - $r; + $y = $cy - $r; + $w = 2 * $r; + $h = $w; + if ($clipping) { + $this->SVGTransform($tm); + $this->Circle($cx, $cy, $r, 0, 360, 'CNZ', array(), array(), 8); + } else { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'Circle', array($cx, $cy, $r, 0, 360, 'CNZ')); + if (!empty($obstyle)) { + $this->Circle($cx, $cy, $r, 0, 360, $obstyle, array(), array(), 8); + } + $this->StopTransform(); + } + break; + } + case 'ellipse': { + $cx = (isset($attribs['cx'])?$this->getHTMLUnitToUnits($attribs['cx'], 0, $this->svgunit, false):0); + $cy = (isset($attribs['cy'])?$this->getHTMLUnitToUnits($attribs['cy'], 0, $this->svgunit, false):0); + $rx = (isset($attribs['rx'])?$this->getHTMLUnitToUnits($attribs['rx'], 0, $this->svgunit, false):0); + $ry = (isset($attribs['ry'])?$this->getHTMLUnitToUnits($attribs['ry'], 0, $this->svgunit, false):0); + $x = $cx - $rx; + $y = $cy - $ry; + $w = 2 * $rx; + $h = 2 * $ry; + if ($clipping) { + $this->SVGTransform($tm); + $this->Ellipse($cx, $cy, $rx, $ry, 0, 0, 360, 'CNZ', array(), array(), 8); + } else { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'Ellipse', array($cx, $cy, $rx, $ry, 0, 0, 360, 'CNZ')); + if (!empty($obstyle)) { + $this->Ellipse($cx, $cy, $rx, $ry, 0, 0, 360, $obstyle, array(), array(), 8); + } + $this->StopTransform(); + } + break; + } + case 'line': { + $x1 = (isset($attribs['x1'])?$this->getHTMLUnitToUnits($attribs['x1'], 0, $this->svgunit, false):0); + $y1 = (isset($attribs['y1'])?$this->getHTMLUnitToUnits($attribs['y1'], 0, $this->svgunit, false):0); + $x2 = (isset($attribs['x2'])?$this->getHTMLUnitToUnits($attribs['x2'], 0, $this->svgunit, false):0); + $y2 = (isset($attribs['y2'])?$this->getHTMLUnitToUnits($attribs['y2'], 0, $this->svgunit, false):0); + $x = $x1; + $y = $y1; + $w = abs($x2 - $x1); + $h = abs($y2 - $y1); + if (!$clipping) { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'Line', array($x1, $y1, $x2, $y2)); + $this->Line($x1, $y1, $x2, $y2); + $this->StopTransform(); + } + break; + } + case 'polyline': + case 'polygon': { + $points = (isset($attribs['points'])?$attribs['points']:'0 0'); + $points = trim($points); + // note that point may use a complex syntax not covered here + $points = preg_split('/[\,\s]+/si', $points); + if (count($points) < 4) { + break; + } + $p = array(); + $xmin = 2147483647; + $xmax = 0; + $ymin = 2147483647; + $ymax = 0; + foreach ($points as $key => $val) { + $p[$key] = $this->getHTMLUnitToUnits($val, 0, $this->svgunit, false); + if (($key % 2) == 0) { + // X coordinate + $xmin = min($xmin, $p[$key]); + $xmax = max($xmax, $p[$key]); + } else { + // Y coordinate + $ymin = min($ymin, $p[$key]); + $ymax = max($ymax, $p[$key]); + } + } + $x = $xmin; + $y = $ymin; + $w = ($xmax - $xmin); + $h = ($ymax - $ymin); + if ($name == 'polyline') { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'PolyLine', array($p, 'CNZ')); + $this->PolyLine($p, 'D', array(), array()); + $this->StopTransform(); + } else { // polygon + if ($clipping) { + $this->SVGTransform($tm); + $this->Polygon($p, 'CNZ', array(), array(), true); + } else { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'Polygon', array($p, 'CNZ')); + if (!empty($obstyle)) { + $this->Polygon($p, $obstyle, array(), array(), true); + } + $this->StopTransform(); + } + } + break; + } + // image + case 'image': { + if (!isset($attribs['xlink:href']) OR empty($attribs['xlink:href'])) { + break; + } + $x = (isset($attribs['x'])?$this->getHTMLUnitToUnits($attribs['x'], 0, $this->svgunit, false):0); + $y = (isset($attribs['y'])?$this->getHTMLUnitToUnits($attribs['y'], 0, $this->svgunit, false):0); + $w = (isset($attribs['width'])?$this->getHTMLUnitToUnits($attribs['width'], 0, $this->svgunit, false):0); + $h = (isset($attribs['height'])?$this->getHTMLUnitToUnits($attribs['height'], 0, $this->svgunit, false):0); + $img = $attribs['xlink:href']; + if (!$clipping) { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h); + // fix image path + if (!$this->empty_string($this->svgdir) AND (($img[0] == '.') OR (basename($img) == $img))) { + // replace relative path with full server path + $img = $this->svgdir.'/'.$img; + } + if (($img[0] == '/') AND ($_SERVER['DOCUMENT_ROOT'] != '/')) { + $findroot = strpos($img, $_SERVER['DOCUMENT_ROOT']); + if (($findroot === false) OR ($findroot > 1)) { + // replace relative path with full server path + $img = $_SERVER['DOCUMENT_ROOT'].$img; + } + } + $img = urldecode($img); + $testscrtype = @parse_url($img); + if (!isset($testscrtype['query']) OR empty($testscrtype['query'])) { + // convert URL to server path + $img = str_replace(K_PATH_URL, K_PATH_MAIN, $img); + } + $this->Image($img, $x, $y, $w, $h); + $this->StopTransform(); + } + break; + } + // text + case 'text': + case 'tspan': { + // only basic support - advanced features must be implemented + $x = (isset($attribs['x'])?$this->getHTMLUnitToUnits($attribs['x'], 0, $this->svgunit, false):0); + $y = (isset($attribs['y'])?$this->getHTMLUnitToUnits($attribs['y'], 0, $this->svgunit, false):0); + $svgstyle['text-color'] = $svgstyle['fill']; + $this->svgtext = ''; + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, 1, 1); + $this->SetXY($x, $y, true); + break; + } + // use + case 'use': { + if (isset($attribs['xlink:href'])) { + $use = $this->svgdefs[substr($attribs['xlink:href'], 1)]; + if (isset($attribs['xlink:href'])) { + unset($attribs['xlink:href']); + } + if (isset($attribs['id'])) { + unset($attribs['id']); + } + $attribs = array_merge($use['attribs'], $attribs); + $this->startSVGElementHandler($parser, $use['name'], $use['attribs']); + } + break; + } + default: { + break; + } + } + } + + /** + * Sets the closing SVG element handler function for the XML parser. + * @param resource $parser The first parameter, parser, is a reference to the XML parser calling the handler. + * @param string $name The second parameter, name, contains the name of the element for which this handler is called. If case-folding is in effect for this parser, the element name will be in uppercase letters. + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @access protected + */ + protected function endSVGElementHandler($parser, $name) { + switch($name) { + case 'defs': { + $this->svgdefsmode = false; + break; + } + // clipPath + case 'clipPath': { + $this->svgclipmode = false; + break; + } + case 'g': { + // ungroup: remove last style from array + array_pop($this->svgstyles); + $this->StopTransform(); + break; + } + case 'text': + case 'tspan': { + // print text + $this->Cell(0, 0, trim($this->svgtext), 0, 0, '', 0, '', 0, false, 'L', 'T'); + $this->StopTransform(); + break; + } + default: { + break; + } + } + } + + /** + * Sets the character data handler function for the XML parser. + * @param resource $parser The first parameter, parser, is a reference to the XML parser calling the handler. + * @param string $data The second parameter, data, contains the character data as a string. + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @access protected + */ + protected function segSVGContentHandler($parser, $data) { + $this->svgtext .= $data; + } + + } // END OF TCPDF CLASS +} +//============================================================+ +// END OF FILE +//============================================================+ +?> diff --git a/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/tcpdf_old.php b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/tcpdf_old.php new file mode 100755 index 00000000..33838da3 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/_tcpdf_5.0.002/tcpdf_old.php @@ -0,0 +1,19818 @@ +. +// +// See LICENSE.TXT file for more information. +// ---------------------------------------------------------------------------- +// +// Description : This is a PHP class for generating PDF documents without +// requiring external extensions. +// +// NOTE: +// This class was originally derived in 2002 from the Public +// Domain FPDF class by Olivier Plathey (http://www.fpdf.org), +// but now is almost entirely rewritten. +// +// Main features: +// * no external libraries are required for the basic functions; +// * all ISO page formats, custom page formats, custom margins and units of measure; +// * UTF-8 Unicode and Right-To-Left languages; +// * TrueTypeUnicode, OpenTypeUnicode, TrueType, OpenType, Type1 and CID-0 fonts; +// * methods to publish some XHTML code, Javascript and Forms; +// * images, graphic (geometric figures) and transformation methods; +// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html) +// * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, QR-Code; +// * Grayscale, RGB, CMYK, Spot Colors and Transparencies; +// * automatic page header and footer management; +// * document encryption and digital signature certifications; +// * transactions to UNDO commands; +// * PDF annotations, including links, text and file attachments; +// * text rendering modes (fill, stroke and clipping); +// * multiple columns mode; +// * bookmarks and table of content; +// * text hyphenation; +// * automatic page break, line break and text alignments including justification; +// * automatic page numbering and page groups; +// * move and delete pages; +// * page compression (requires php-zlib extension); +// +// ----------------------------------------------------------- +// THANKS TO: +// +// Olivier Plathey (http://www.fpdf.org) for original FPDF. +// Efthimios Mavrogeorgiadis (emavro@yahoo.com) for suggestions on RTL language support. +// Klemen Vodopivec (http://www.fpdf.de/downloads/addons/37/) for Encryption algorithm. +// Warren Sherliker (wsherliker@gmail.com) for better image handling. +// dullus for text Justification. +// Bob Vincent (pillarsdotnet@users.sourceforge.net) for
    2. value attribute. +// Patrick Benny for text stretch suggestion on Cell(). +// Johannes Gntert for JavaScript support. +// Denis Van Nuffelen for Dynamic Form. +// Jacek Czekaj for multibyte justification +// Anthony Ferrara for the reintroduction of legacy image methods. +// Sourceforge user 1707880 (hucste) for line-trough mode. +// Larry Stanbery for page groups. +// Martin Hall-May for transparency. +// Aaron C. Spike for Polycurve method. +// Mohamad Ali Golkar, Saleh AlMatrafe, Charles Abbott for Arabic and Persian support. +// Moritz Wagner and Andreas Wurmser for graphic functions. +// Andrew Whitehead for core fonts support. +// Esteban Jol Marn for OpenType font conversion. +// Teus Hagen for several suggestions and fixes. +// Yukihiro Nakadaira for CID-0 CJK fonts fixes. +// Kosmas Papachristos for some CSS improvements. +// Marcel Partap for some fixes. +// Won Kyu Park for several suggestions, fixes and patches. +// Dominik Dzienia for QR-code support. +// Laurent Minguet for some suggestions. +// Anyone that has reported a bug or sent a suggestion. +//============================================================+ + +/** + * This is a PHP class for generating PDF documents without requiring external extensions.
      + * TCPDF project (http://www.tcpdf.org) was originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.
      + *

      TCPDF main features are:

      + *
        + *
      • no external libraries are required for the basic functions;
      • + *
      • all ISO page formats, custom page formats, custom margins and units of measure;
      • + *
      • UTF-8 Unicode and Right-To-Left languages;
      • + *
      • TrueTypeUnicode, OpenTypeUnicode, TrueType, OpenType, Type1 and CID-0 fonts;
      • + *
      • methods to publish some XHTML code, Javascript and Forms;
      • + *
      • images, graphic (geometric figures) and transformation methods; + *
      • supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)
      • + *
      • 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, QR-Code;
      • + *
      • Grayscale, RGB, CMYK, Spot Colors and Transparencies;
      • + *
      • automatic page header and footer management;
      • + *
      • document encryption and digital signature certifications;
      • + *
      • transactions to UNDO commands;
      • + *
      • PDF annotations, including links, text and file attachments;
      • + *
      • text rendering modes (fill, stroke and clipping);
      • + *
      • multiple columns mode;
      • + *
      • bookmarks and table of content;
      • + *
      • text hyphenation;
      • + *
      • automatic page break, line break and text alignments including justification;
      • + *
      • automatic page numbering and page groups;
      • + *
      • move and delete pages;
      • + *
      • page compression (requires php-zlib extension);
      • + *
      + * Tools to encode your unicode fonts are on fonts/utils directory.

      + * @package com.tecnick.tcpdf + * @abstract Class for generating PDF files on-the-fly without requiring external extensions. + * @author Nicola Asuni + * @copyright 2002-2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + * @version 5.0.002 + */ + +/** + * main configuration file + */ +require_once(dirname(__FILE__).'/config/tcpdf_config.php'); + +// includes some support files + +/** + * unicode data + */ +require_once(dirname(__FILE__).'/unicode_data.php'); + +/** + * html colors table + */ +require_once(dirname(__FILE__).'/htmlcolors.php'); + +if (!class_exists('TCPDF', false)) { + /** + * define default PDF document producer + */ + define('PDF_PRODUCER', 'TCPDF 5.0.002 (http://www.tcpdf.org)'); + + /** + * This is a PHP class for generating PDF documents without requiring external extensions.
      + * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.
      + * @name TCPDF + * @package com.tecnick.tcpdf + * @version 5.0.002 + * @author Nicola Asuni - info@tecnick.com + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + class TCPDF { + + // protected or Protected properties + + /** + * @var current page number + * @access protected + */ + protected $page; + + /** + * @var current object number + * @access protected + */ + protected $n; + + /** + * @var array of object offsets + * @access protected + */ + protected $offsets; + + /** + * @var buffer holding in-memory PDF + * @access protected + */ + protected $buffer; + + /** + * @var array containing pages + * @access protected + */ + protected $pages = array(); + + /** + * @var current document state + * @access protected + */ + protected $state; + + /** + * @var compression flag + * @access protected + */ + protected $compress; + + /** + * @var current page orientation (P = Portrait, L = Landscape) + * @access protected + */ + protected $CurOrientation; + + /** + * @var array that stores page dimensions and graphic status.
      • $this->pagedim[$this->page]['w'] => page_width_in_points
      • $this->pagedim[$this->page]['h'] => height in points
      • $this->pagedim[$this->page]['wk'] => page_width_in_points
      • $this->pagedim[$this->page]['hk'] => height
      • $this->pagedim[$this->page]['tm'] => top_margin
      • $this->pagedim[$this->page]['bm'] => bottom_margin
      • $this->pagedim[$this->page]['lm'] => left_margin
      • $this->pagedim[$this->page]['rm'] => right_margin
      • $this->pagedim[$this->page]['pb'] => auto_page_break
      • $this->pagedim[$this->page]['or'] => page_orientation
      • $this->pagedim[$this->page]['olm'] => original_left_margin
      • $this->pagedim[$this->page]['orm'] => original_right_margin
      + * @access protected + */ + protected $pagedim = array(); + + /** + * @var scale factor (number of points in user unit) + * @access protected + */ + protected $k; + + /** + * @var width of page format in points + * @access protected + */ + protected $fwPt; + + /** + * @var height of page format in points + * @access protected + */ + protected $fhPt; + + /** + * @var current width of page in points + * @access protected + */ + protected $wPt; + + /** + * @var current height of page in points + * @access protected + */ + protected $hPt; + + /** + * @var current width of page in user unit + * @access protected + */ + protected $w; + + /** + * @var current height of page in user unit + * @access protected + */ + protected $h; + + /** + * @var left margin + * @access protected + */ + protected $lMargin; + + /** + * @var top margin + * @access protected + */ + protected $tMargin; + + /** + * @var right margin + * @access protected + */ + protected $rMargin; + + /** + * @var page break margin + * @access protected + */ + protected $bMargin; + + /** + * @var cell internal padding + * @access protected + */ + //protected + public $cMargin; + + /** + * @var cell internal padding (previous value) + * @access protected + */ + protected $oldcMargin; + + /** + * @var current horizontal position in user unit for cell positioning + * @access protected + */ + protected $x; + + /** + * @var current vertical position in user unit for cell positioning + * @access protected + */ + protected $y; + + /** + * @var height of last cell printed + * @access protected + */ + protected $lasth; + + /** + * @var line width in user unit + * @access protected + */ + protected $LineWidth; + + /** + * @var array of standard font names + * @access protected + */ + protected $CoreFonts; + + /** + * @var array of used fonts + * @access protected + */ + protected $fonts = array(); + + /** + * @var array of font files + * @access protected + */ + protected $FontFiles = array(); + + /** + * @var array of encoding differences + * @access protected + */ + protected $diffs = array(); + + /** + * @var array of used images + * @access protected + */ + protected $images = array(); + + /** + * @var array of Annotations in pages + * @access protected + */ + protected $PageAnnots = array(); + + /** + * @var array of internal links + * @access protected + */ + protected $links = array(); + + /** + * @var current font family + * @access protected + */ + protected $FontFamily; + + /** + * @var current font style + * @access protected + */ + protected $FontStyle; + + /** + * @var current font ascent (distance between font top and baseline) + * @access protected + * @since 2.8.000 (2007-03-29) + */ + protected $FontAscent; + + /** + * @var current font descent (distance between font bottom and baseline) + * @access protected + * @since 2.8.000 (2007-03-29) + */ + protected $FontDescent; + + /** + * @var underlining flag + * @access protected + */ + protected $underline; + + /** + * @var overlining flag + * @access protected + */ + protected $overline; + + /** + * @var current font info + * @access protected + */ + protected $CurrentFont; + + /** + * @var current font size in points + * @access protected + */ + protected $FontSizePt; + + /** + * @var current font size in user unit + * @access protected + */ + protected $FontSize; + + /** + * @var commands for drawing color + * @access protected + */ + protected $DrawColor; + + /** + * @var commands for filling color + * @access protected + */ + protected $FillColor; + + /** + * @var commands for text color + * @access protected + */ + protected $TextColor; + + /** + * @var indicates whether fill and text colors are different + * @access protected + */ + protected $ColorFlag; + + /** + * @var automatic page breaking + * @access protected + */ + protected $AutoPageBreak; + + /** + * @var threshold used to trigger page breaks + * @access protected + */ + protected $PageBreakTrigger; + + /** + * @var flag set when processing footer + * @access protected + */ + protected $InFooter = false; + + /** + * @var zoom display mode + * @access protected + */ + protected $ZoomMode; + + /** + * @var layout display mode + * @access protected + */ + protected $LayoutMode; + + /** + * @var title + * @access protected + */ + protected $title = ''; + + /** + * @var subject + * @access protected + */ + protected $subject = ''; + + /** + * @var author + * @access protected + */ + protected $author = ''; + + /** + * @var keywords + * @access protected + */ + protected $keywords = ''; + + /** + * @var creator + * @access protected + */ + protected $creator = ''; + + /** + * @var alias for total number of pages + * @access protected + */ + protected $AliasNbPages = '{nb}'; + + /** + * @var alias for page number + * @access protected + */ + protected $AliasNumPage = '{pnb}'; + + /** + * @var right-bottom corner X coordinate of inserted image + * @since 2002-07-31 + * @author Nicola Asuni + * @access protected + */ + protected $img_rb_x; + + /** + * @var right-bottom corner Y coordinate of inserted image + * @since 2002-07-31 + * @author Nicola Asuni + * @access protected + */ + protected $img_rb_y; + + /** + * @var adjusting factor to convert pixels to user units. + * @since 2004-06-14 + * @author Nicola Asuni + * @access protected + */ + protected $imgscale = 1; + + /** + * @var boolean set to true when the input text is unicode (require unicode fonts) + * @since 2005-01-02 + * @author Nicola Asuni + * @access protected + */ + protected $isunicode = false; + + /** + * @var PDF version + * @since 1.5.3 + * @access protected + */ + protected $PDFVersion = '1.7'; + + /** + * @var Minimum distance between header and top page margin. + * @access protected + */ + protected $header_margin; + + /** + * @var Minimum distance between footer and bottom page margin. + * @access protected + */ + protected $footer_margin; + + /** + * @var original left margin value + * @access protected + * @since 1.53.0.TC013 + */ + protected $original_lMargin; + + /** + * @var original right margin value + * @access protected + * @since 1.53.0.TC013 + */ + protected $original_rMargin; + + /** + * @var Header font. + * @access protected + */ + protected $header_font; + + /** + * @var Footer font. + * @access protected + */ + protected $footer_font; + + /** + * @var Language templates. + * @access protected + */ + protected $l; + + /** + * @var Barcode to print on page footer (only if set). + * @access protected + */ + protected $barcode = false; + + /** + * @var If true prints header + * @access protected + */ + protected $print_header = true; + + /** + * @var If true prints footer. + * @access protected + */ + protected $print_footer = true; + + /** + * @var Header image logo. + * @access protected + */ + protected $header_logo = ''; + + /** + * @var Header image logo width in mm. + * @access protected + */ + protected $header_logo_width = 30; + + /** + * @var String to print as title on document header. + * @access protected + */ + protected $header_title = ''; + + /** + * @var String to print on document header. + * @access protected + */ + protected $header_string = ''; + + /** + * @var Default number of columns for html table. + * @access protected + */ + protected $default_table_columns = 4; + + + // variables for html parser + + /** + * @var HTML PARSER: array to store current link and rendering styles. + * @access protected + */ + protected $HREF = array(); + + /** + * @var store a list of available fonts on filesystem. + * @access protected + */ + protected $fontlist = array(); + + /** + * @var current foreground color + * @access protected + */ + protected $fgcolor; + + /** + * @var HTML PARSER: array of boolean values, true in case of ordered list (OL), false otherwise. + * @access protected + */ + protected $listordered = array(); + + /** + * @var HTML PARSER: array count list items on nested lists. + * @access protected + */ + protected $listcount = array(); + + /** + * @var HTML PARSER: current list nesting level. + * @access protected + */ + protected $listnum = 0; + + /** + * @var HTML PARSER: indent amount for lists. + * @access protected + */ + protected $listindent = 0; + + /** + * @var HTML PARSER: current list indententation level. + * @access protected + */ + protected $listindentlevel = 0; + + /** + * @var current background color + * @access protected + */ + protected $bgcolor; + + /** + * @var Store temporary font size in points. + * @access protected + */ + protected $tempfontsize = 10; + + /** + * @var spacer for LI tags. + * @access protected + */ + protected $lispacer = ''; + + /** + * @var default encoding + * @access protected + * @since 1.53.0.TC010 + */ + protected $encoding = 'UTF-8'; + + /** + * @var PHP internal encoding + * @access protected + * @since 1.53.0.TC016 + */ + protected $internal_encoding; + + /** + * @var indicates if the document language is Right-To-Left + * @access protected + * @since 2.0.000 + */ + protected $rtl = false; + + /** + * @var used to force RTL or LTR string inversion + * @access protected + * @since 2.0.000 + */ + protected $tmprtl = false; + + // --- Variables used for document encryption: + + /** + * Indicates whether document is protected + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $encrypted; + + /** + * U entry in pdf document + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $Uvalue; + + /** + * O entry in pdf document + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $Ovalue; + + /** + * P entry in pdf document + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $Pvalue; + + /** + * encryption object id + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $enc_obj_id; + + /** + * last RC4 key encrypted (cached for optimisation) + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $last_rc4_key; + + /** + * last RC4 computed key + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected $last_rc4_key_c; + + /** + * RC4 padding + * @access protected + */ + protected $padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A"; + + /** + * RC4 encryption key + * @access protected + */ + protected $encryption_key; + + // --- bookmark --- + + /** + * Outlines for bookmark + * @access protected + * @since 2.1.002 (2008-02-12) + */ + protected $outlines = array(); + + /** + * Outline root for bookmark + * @access protected + * @since 2.1.002 (2008-02-12) + */ + protected $OutlineRoot; + + + // --- javascript and form --- + + /** + * javascript code + * @access protected + * @since 2.1.002 (2008-02-12) + */ + protected $javascript = ''; + + /** + * javascript counter + * @access protected + * @since 2.1.002 (2008-02-12) + */ + protected $n_js; + + /** + * line trough state + * @access protected + * @since 2.8.000 (2008-03-19) + */ + protected $linethrough; + + // --- Variables used for User's Rights --- + // See PDF reference chapter 8.7 Digital Signatures + + /** + * If true enables user's rights on PDF reader + * @access protected + * @since 2.9.000 (2008-03-26) + */ + protected $ur; + + /** + * Names specifying additional document-wide usage rights for the document. + * @access protected + * @since 2.9.000 (2008-03-26) + */ + protected $ur_document; + + /** + * Names specifying additional annotation-related usage rights for the document. + * @access protected + * @since 2.9.000 (2008-03-26) + */ + protected $ur_annots; + + /** + * Names specifying additional form-field-related usage rights for the document. + * @access protected + * @since 2.9.000 (2008-03-26) + */ + protected $ur_form; + + /** + * Names specifying additional signature-related usage rights for the document. + * @access protected + * @since 2.9.000 (2008-03-26) + */ + protected $ur_signature; + + /** + * Dot Per Inch Document Resolution (do not change) + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $dpi = 72; + + /** + * Array of page numbers were a new page group was started + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $newpagegroup = array(); + + /** + * Contains the number of pages of the groups + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $pagegroups; + + /** + * Contains the alias of the current page group + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $currpagegroup; + + /** + * Restrict the rendering of some elements to screen or printout. + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $visibility = 'all'; + + /** + * Print visibility. + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $n_ocg_print; + + /** + * View visibility. + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $n_ocg_view; + + /** + * Array of transparency objects and parameters. + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $extgstates; + + /** + * Set the default JPEG compression quality (1-100) + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected $jpeg_quality; + + /** + * Default cell height ratio. + * @access protected + * @since 3.0.014 (2008-05-23) + */ + protected $cell_height_ratio = K_CELL_HEIGHT_RATIO; + + /** + * PDF viewer preferences. + * @access protected + * @since 3.1.000 (2008-06-09) + */ + protected $viewer_preferences; + + /** + * A name object specifying how the document should be displayed when opened. + * @access protected + * @since 3.1.000 (2008-06-09) + */ + protected $PageMode; + + /** + * Array for storing gradient information. + * @access protected + * @since 3.1.000 (2008-06-09) + */ + protected $gradients = array(); + + /** + * Array used to store positions inside the pages buffer. + * keys are the page numbers + * @access protected + * @since 3.2.000 (2008-06-26) + */ + protected $intmrk = array(); + + /** + * Array used to store content positions inside the pages buffer. + * keys are the page numbers + * @access protected + * @since 4.6.021 (2009-07-20) + */ + protected $cntmrk = array(); + + /** + * Array used to store footer positions of each page. + * @access protected + * @since 3.2.000 (2008-07-01) + */ + protected $footerpos = array(); + + + /** + * Array used to store footer length of each page. + * @access protected + * @since 4.0.014 (2008-07-29) + */ + protected $footerlen = array(); + + /** + * True if a newline is created. + * @access protected + * @since 3.2.000 (2008-07-01) + */ + protected $newline = true; + + /** + * End position of the latest inserted line + * @access protected + * @since 3.2.000 (2008-07-01) + */ + protected $endlinex = 0; + + /** + * PDF string for last line width + * @access protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleWidth = ''; + + /** + * PDF string for last line width + * @access protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleCap = '0 J'; + + /** + * PDF string for last line width + * @access protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleJoin = '0 j'; + + /** + * PDF string for last line width + * @access protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleDash = '[] 0 d'; + + /** + * True if marked-content sequence is open + * @access protected + * @since 4.0.013 (2008-07-28) + */ + protected $openMarkedContent = false; + + /** + * Count the latest inserted vertical spaces on HTML + * @access protected + * @since 4.0.021 (2008-08-24) + */ + protected $htmlvspace = 0; + + /** + * Array of Spot colors + * @access protected + * @since 4.0.024 (2008-09-12) + */ + protected $spot_colors = array(); + + /** + * Symbol used for HTML unordered list items + * @access protected + * @since 4.0.028 (2008-09-26) + */ + protected $lisymbol = ''; + + /** + * String used to mark the beginning and end of EPS image blocks + * @access protected + * @since 4.1.000 (2008-10-18) + */ + protected $epsmarker = 'x#!#EPS#!#x'; + + /** + * Array of transformation matrix + * @access protected + * @since 4.2.000 (2008-10-29) + */ + protected $transfmatrix = array(); + + /** + * Current key for transformation matrix + * @access protected + * @since 4.8.005 (2009-09-17) + */ + protected $transfmatrix_key = 0; + + /** + * Booklet mode for double-sided pages + * @access protected + * @since 4.2.000 (2008-10-29) + */ + protected $booklet = false; + + /** + * Epsilon value used for float calculations + * @access protected + * @since 4.2.000 (2008-10-29) + */ + protected $feps = 0.005; + + /** + * Array used for custom vertical spaces for HTML tags + * @access protected + * @since 4.2.001 (2008-10-30) + */ + protected $tagvspaces = array(); + + /** + * @var HTML PARSER: custom indent amount for lists. + * Negative value means disabled. + * @access protected + * @since 4.2.007 (2008-11-12) + */ + protected $customlistindent = -1; + + /** + * @var if true keeps the border open for the cell sides that cross the page. + * @access protected + * @since 4.2.010 (2008-11-14) + */ + protected $opencell = true; + + /** + * @var array of files to embedd + * @access protected + * @since 4.4.000 (2008-12-07) + */ + protected $embeddedfiles = array(); + + /** + * @var boolean true when inside html pre tag + * @access protected + * @since 4.4.001 (2008-12-08) + */ + protected $premode = false; + + /** + * Array used to store positions of graphics transformation blocks inside the page buffer. + * keys are the page numbers + * @access protected + * @since 4.4.002 (2008-12-09) + */ + protected $transfmrk = array(); + + /** + * Default color for html links + * @access protected + * @since 4.4.003 (2008-12-09) + */ + protected $htmlLinkColorArray = array(0, 0, 255); + + /** + * Default font style to add to html links + * @access protected + * @since 4.4.003 (2008-12-09) + */ + protected $htmlLinkFontStyle = 'U'; + + /** + * Counts the number of pages. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected $numpages = 0; + + /** + * Array containing page lengths in bytes. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected $pagelen = array(); + + /** + * Counts the number of pages. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected $numimages = 0; + + /** + * Store the image keys. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected $imagekeys = array(); + + /** + * Length of the buffer in bytes. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected $bufferlen = 0; + + /** + * If true enables disk caching. + * @access protected + * @since 4.5.000 (2008-12-31) + */ + protected $diskcache = false; + + /** + * Counts the number of fonts. + * @access protected + * @since 4.5.000 (2009-01-02) + */ + protected $numfonts = 0; + + /** + * Store the font keys. + * @access protected + * @since 4.5.000 (2009-01-02) + */ + protected $fontkeys = array(); + + /** + * Store the font object IDs. + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected $font_obj_ids = array(); + + /** + * Store the fage status (true when opened, false when closed). + * @access protected + * @since 4.5.000 (2009-01-02) + */ + protected $pageopen = array(); + + /** + * Default monospaced font + * @access protected + * @since 4.5.025 (2009-03-10) + */ + protected $default_monospaced_font = 'courier'; + + /** + * Used to store a cloned copy of the current class object + * @access protected + * @since 4.5.029 (2009-03-19) + */ + protected $objcopy; + + /** + * Array used to store the lengths of cache files + * @access protected + * @since 4.5.029 (2009-03-19) + */ + protected $cache_file_length = array(); + + /** + * Table header content to be repeated on each new page + * @access protected + * @since 4.5.030 (2009-03-20) + */ + protected $thead = ''; + + /** + * Margins used for table header. + * @access protected + * @since 4.5.030 (2009-03-20) + */ + protected $theadMargins = array(); + + /** + * Cache array for UTF8StringToArray() method. + * @access protected + * @since 4.5.037 (2009-04-07) + */ + protected $cache_UTF8StringToArray = array(); + + /** + * Maximum size of cache array used for UTF8StringToArray() method. + * @access protected + * @since 4.5.037 (2009-04-07) + */ + protected $cache_maxsize_UTF8StringToArray = 8; + + /** + * Current size of cache array used for UTF8StringToArray() method. + * @access protected + * @since 4.5.037 (2009-04-07) + */ + protected $cache_size_UTF8StringToArray = 0; + + /** + * If true enables document signing + * @access protected + * @since 4.6.005 (2009-04-24) + */ + protected $sign = false; + + /** + * Signature data + * @access protected + * @since 4.6.005 (2009-04-24) + */ + protected $signature_data = array(); + + /** + * Signature max length + * @access protected + * @since 4.6.005 (2009-04-24) + */ + protected $signature_max_length = 11742; + + /** + * Regular expression used to find blank characters used for word-wrapping. + * @access protected + * @since 4.6.006 (2009-04-28) + */ + protected $re_spaces = '/[\s]/'; + + /** + * Signature object ID + * @access protected + * @since 4.6.022 (2009-06-23) + */ + protected $sig_obj_id = 0; + + /** + * ByteRange placemark used during signature process. + * @access protected + * @since 4.6.028 (2009-08-25) + */ + protected $byterange_string = '/ByteRange[0 ********** ********** **********]'; + + /** + * Placemark used during signature process. + * @access protected + * @since 4.6.028 (2009-08-25) + */ + protected $sig_annot_ref = '***SIGANNREF*** 0 R'; + + /** + * ID of page objects + * @access protected + * @since 4.7.000 (2009-08-29) + */ + protected $page_obj_id = array(); + + /** + * Start ID for embedded file objects + * @access protected + * @since 4.7.000 (2009-08-29) + */ + protected $embedded_start_obj_id = 100000; + + /** + * Start ID for annotation objects + * @access protected + * @since 4.7.000 (2009-08-29) + */ + protected $annots_start_obj_id = 200000; + + /** + * Max ID of annotation object + * @access protected + * @since 4.7.000 (2009-08-29) + */ + protected $annot_obj_id = 200000; + + /** + * Current ID of annotation object + * @access protected + * @since 4.8.003 (2009-09-15) + */ + protected $curr_annot_obj_id = 200000; + + /** + * List of form annotations IDs + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_obj_id = array(); + + /** + * Deafult Javascript field properties. Possible values are described on official Javascript for Acrobat API reference. Annotation options can be directly specified using the 'aopt' entry. + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128)); + + /** + * Javascript objects array + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $js_objects = array(); + + /** + * Start ID for javascript objects + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $js_start_obj_id = 300000; + + /** + * Current ID of javascript object + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $js_obj_id = 300000; + + /** + * Current form action (used during XHTML rendering) + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_action = ''; + + /** + * Current form encryption type (used during XHTML rendering) + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_enctype = 'application/x-www-form-urlencoded'; + + /** + * Current method to submit forms. + * @access protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_mode = 'post'; + + /** + * Start ID for appearance streams XObjects + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected $apxo_start_obj_id = 400000; + + /** + * Current ID of appearance streams XObjects + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected $apxo_obj_id = 400000; + + /** + * List of fonts used on form fields (fontname => fontkey). + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected $annotation_fonts = array(); + + /** + * List of radio buttons parent objects. + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected $radiobutton_groups = array(); + + /** + * List of radio group objects IDs + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected $radio_groups = array(); + + /** + * Text indentation value (used for text-indent CSS attribute) + * @access protected + * @since 4.8.006 (2009-09-23) + */ + protected $textindent = 0; + + /** + * Store page number when startTransaction() is called. + * @access protected + * @since 4.8.006 (2009-09-23) + */ + protected $start_transaction_page = 0; + + /** + * Store Y position when startTransaction() is called. + * @access protected + * @since 4.9.001 (2010-03-28) + */ + protected $start_transaction_y = 0; + + /** + * True when we are printing the thead section on a new page + * @access protected + * @since 4.8.027 (2010-01-25) + */ + protected $inthead = false; + + /** + * Array of column measures (width, space, starting Y position) + * @access protected + * @since 4.9.001 (2010-03-28) + */ + protected $columns = array(); + + /** + * Number of colums + * @access protected + * @since 4.9.001 (2010-03-28) + */ + protected $num_columns = 0; + + /** + * Current column number + * @access protected + * @since 4.9.001 (2010-03-28) + */ + protected $current_column = 0; + + /** + * Starting page for columns + * @access protected + * @since 4.9.001 (2010-03-28) + */ + protected $column_start_page = 0; + + /** + * Text rendering mode: 0 = Fill text; 1 = Stroke text; 2 = Fill, then stroke text; 3 = Neither fill nor stroke text (invisible); 4 = Fill text and add to path for clipping; 5 = Stroke text and add to path for clipping; 6 = Fill, then stroke text and add to path for clipping; 7 = Add text to path for clipping. + * @access protected + * @since 4.9.008 (2010-04-03) + */ + protected $textrendermode = 0; + + /** + * Text stroke width in doc units + * @access protected + * @since 4.9.008 (2010-04-03) + */ + protected $textstrokewidth = 0; + + /** + * @var current stroke color + * @access protected + * @since 4.9.008 (2010-04-03) + */ + protected $strokecolor; + + /** + * @var default unit of measure for document + * @access protected + * @since 5.0.000 (2010-04-22) + */ + protected $pdfunit = 'mm'; + + /** + * @var true when we are on TOC (Table Of Content) page + * @access protected + */ + protected $tocpage = false; + + /** + * @var If true convert vector images (SVG, EPS) to raster image using GD or ImageMagick library. + * @access protected + * @since 5.0.000 (2010-04-26) + */ + protected $rasterize_vector_images = false; + + /** + * @var directory used for the last SVG image + * @access protected + * @since 5.0.000 (2010-05-05) + */ + protected $svgdir = ''; + + /** + * @var Deafult unit of measure for SVG + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgunit = 'px'; + + /** + * @var array of SVG gradients + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svggradients = array(); + + /** + * @var ID of last SVG gradient + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svggradientid = 0; + + /** + * @var true when in SVG defs group + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgdefsmode = false; + + /** + * @var array of SVG defs + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgdefs = array(); + + /** + * @var true when in SVG clipPath tag + * @access protected + * @since 5.0.000 (2010-04-26) + */ + protected $svgclipmode = false; + + /** + * @var array of SVG clipPath commands + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgclippaths = array(); + + /** + * @var ID of last SVG clipPath + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgclipid = 0; + + /** + * @var svg text + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgtext = ''; + + /** + * @var array of hinheritable SVG properties + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svginheritprop = array('clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cursor', 'direction', 'fill', 'fill-opacity', 'fill-rule', 'font', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'image-rendering', 'kerning', 'letter-spacing', 'marker', 'marker-end', 'marker-mid', 'marker-start', 'pointer-events', 'shape-rendering', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-rendering', 'visibility', 'word-spacing', 'writing-mode'); + + /** + * @var array of SVG properties + * @access protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgstyles = array(array( + 'alignment-baseline' => 'auto', + 'baseline-shift' => 'baseline', + 'clip' => 'auto', + 'clip-path' => 'none', + 'clip-rule' => 'nonzero', + 'color' => 'black', + 'color-interpolation' => 'sRGB', + 'color-interpolation-filters' => 'linearRGB', + 'color-profile' => 'auto', + 'color-rendering' => 'auto', + 'cursor' => 'auto', + 'direction' => 'ltr', + 'display' => 'inline', + 'dominant-baseline' => 'auto', + 'enable-background' => 'accumulate', + 'fill' => 'black', + 'fill-opacity' => 1, + 'fill-rule' => 'nonzero', + 'filter' => 'none', + 'flood-color' => 'black', + 'flood-opacity' => 1, + 'font' => '', + 'font-family' => 'helvetica', + 'font-size' => 'medium', + 'font-size-adjust' => 'none', + 'font-stretch' => 'normal', + 'font-style' => 'normal', + 'font-variant' => 'normal', + 'font-weight' => 'normal', + 'glyph-orientation-horizontal' => '0deg', + 'glyph-orientation-vertical' => 'auto', + 'image-rendering' => 'auto', + 'kerning' => 'auto', + 'letter-spacing' => 'normal', + 'lighting-color' => 'white', + 'marker' => '', + 'marker-end' => 'none', + 'marker-mid' => 'none', + 'marker-start' => 'none', + 'mask' => 'none', + 'opacity' => 1, + 'overflow' => 'auto', + 'pointer-events' => 'visiblePainted', + 'shape-rendering' => 'auto', + 'stop-color' => 'black', + 'stop-opacity' => 1, + 'stroke' => 'none', + 'stroke-dasharray' => 'none', + 'stroke-dashoffset' => 0, + 'stroke-linecap' => 'butt', + 'stroke-linejoin' => 'miter', + 'stroke-miterlimit' => 4, + 'stroke-opacity' => 1, + 'stroke-width' => 1, + 'text-anchor' => 'start', + 'text-decoration' => 'none', + 'text-rendering' => 'auto', + 'unicode-bidi' => 'normal', + 'visibility' => 'visible', + 'word-spacing' => 'normal', + 'writing-mode' => 'lr-tb', + 'text-color' => 'black', + 'transfmatrix' => array(1, 0, 0, 1, 0, 0) + )); + + //------------------------------------------------------------ + // METHODS + //------------------------------------------------------------ + + /** + * This is the class constructor. + * It allows to set up the page format, the orientation and + * the measure unit used in all the methods (except for the font sizes). + * @since 1.0 + * @param string $orientation page orientation. Possible values are (case insensitive):
      • P or Portrait (default)
      • L or Landscape
      + * @param string $unit User measure unit. Possible values are:
      • pt: point
      • mm: millimeter (default)
      • cm: centimeter
      • in: inch

      A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. + * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).
      • 4A0
      • 2A0
      • A0
      • A1
      • A2
      • A3
      • A4 (default)
      • A5
      • A6
      • A7
      • A8
      • A9
      • A10
      • B0
      • B1
      • B2
      • B3
      • B4
      • B5
      • B6
      • B7
      • B8
      • B9
      • B10
      • C0
      • C1
      • C2
      • C3
      • C4
      • C5
      • C6
      • C7
      • C8
      • C9
      • C10
      • RA0
      • RA1
      • RA2
      • RA3
      • RA4
      • SRA0
      • SRA1
      • SRA2
      • SRA3
      • SRA4
      • LETTER
      • LEGAL
      • EXECUTIVE
      • FOLIO
      + * @param boolean $unicode TRUE means that the input text is unicode (default = true) + * @param boolean $diskcache if TRUE reduce the RAM memory usage by caching temporary data on filesystem (slower). + * @param String $encoding charset encoding; default is UTF-8 + * @access public + */ + public function __construct($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8', $diskcache=false) { + /* Set internal character encoding to ASCII */ + if (function_exists('mb_internal_encoding') AND mb_internal_encoding()) { + $this->internal_encoding = mb_internal_encoding(); + mb_internal_encoding('ASCII'); + } + // set disk caching + $this->diskcache = $diskcache ? true : false; + // set language direction + $this->rtl = false; + $this->tmprtl = false; + //Some checks + $this->_dochecks(); + //Initialization of properties + $this->isunicode = $unicode; + $this->page = 0; + $this->transfmrk[0] = array(); + $this->pagedim = array(); + $this->n = 2; + $this->buffer = ''; + $this->pages = array(); + $this->state = 0; + $this->fonts = array(); + $this->FontFiles = array(); + $this->diffs = array(); + $this->images = array(); + $this->links = array(); + $this->gradients = array(); + $this->InFooter = false; + $this->lasth = 0; + $this->FontFamily = 'helvetica'; + $this->FontStyle = ''; + $this->FontSizePt = 12; + $this->underline = false; + $this->overline = false; + $this->linethrough = false; + $this->DrawColor = '0 G'; + $this->FillColor = '0 g'; + $this->TextColor = '0 g'; + $this->ColorFlag = false; + // encryption values + $this->encrypted = false; + $this->last_rc4_key = ''; + $this->padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A"; + //Standard Unicode fonts + $this->CoreFonts = array( + 'courier'=>'Courier', + 'courierB'=>'Courier-Bold', + 'courierI'=>'Courier-Oblique', + 'courierBI'=>'Courier-BoldOblique', + 'helvetica'=>'Helvetica', + 'helveticaB'=>'Helvetica-Bold', + 'helveticaI'=>'Helvetica-Oblique', + 'helveticaBI'=>'Helvetica-BoldOblique', + 'times'=>'Times-Roman', + 'timesB'=>'Times-Bold', + 'timesI'=>'Times-Italic', + 'timesBI'=>'Times-BoldItalic', + 'symbol'=>'Symbol', + 'zapfdingbats'=>'ZapfDingbats' + ); + //Set scale factor + $this->setPageUnit($unit); + // set page format and orientation + $this->setPageFormat($format, $orientation); + //Page margins (1 cm) + $margin = 28.35 / $this->k; + $this->SetMargins($margin, $margin); + //Interior cell margin + $this->cMargin = $margin / 10; + //Line width (0.2 mm) + $this->LineWidth = 0.57 / $this->k; + $this->linestyleWidth = sprintf('%.2F w', ($this->LineWidth * $this->k)); + $this->linestyleCap = '0 J'; + $this->linestyleJoin = '0 j'; + $this->linestyleDash = '[] 0 d'; + //Automatic page break + $this->SetAutoPageBreak(true, (2 * $margin)); + //Full width display mode + $this->SetDisplayMode('fullwidth'); + //Compression + $this->SetCompression(true); + //Set default PDF version number + $this->PDFVersion = '1.7'; + $this->encoding = $encoding; + $this->HREF = array(); + $this->getFontsList(); + $this->fgcolor = array('R' => 0, 'G' => 0, 'B' => 0); + $this->strokecolor = array('R' => 0, 'G' => 0, 'B' => 0); + $this->bgcolor = array('R' => 255, 'G' => 255, 'B' => 255); + $this->extgstates = array(); + // user's rights + $this->sign = false; + $this->ur = false; + $this->ur_document = '/FullSave'; + $this->ur_annots = '/Create/Delete/Modify/Copy/Import/Export'; + $this->ur_form = '/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate'; + $this->ur_signature = '/Modify'; + // set default JPEG quality + $this->jpeg_quality = 75; + // initialize some settings + $this->utf8Bidi(array(''), ''); + // set default font + $this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt); + // check if PCRE Unicode support is enabled + if ($this->isunicode AND (@preg_match('/\pL/u', 'a') == 1)) { + // PCRE unicode support is turned ON + // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator. + // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants. + // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between. + //$this->re_spaces = '/[\s\p{Z}\p{Lo}]/u'; + $this->re_spaces = '/[\s\p{Z}]/u'; + } else { + // PCRE unicode support is turned OFF + $this->re_spaces = '/[\s]/'; + } + $this->annot_obj_id = $this->annots_start_obj_id; + $this->curr_annot_obj_id = $this->annots_start_obj_id; + $this->apxo_obj_id = $this->apxo_start_obj_id; + $this->js_obj_id = $this->js_start_obj_id; + $this->default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128)); + } + + /** + * Default destructor. + * @access public + * @since 1.53.0.TC016 + */ + public function __destruct() { + // restore internal encoding + if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) { + mb_internal_encoding($this->internal_encoding); + } + // unset all class variables + $this->_destroy(true); + } + + /** + * Set the units of measure for the document. + * @param string $unit User measure unit. Possible values are:
      • pt: point
      • mm: millimeter (default)
      • cm: centimeter
      • in: inch

      A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. + * @access public + * @since 3.0.015 (2008-06-06) + */ + public function setPageUnit($unit) { + $unit = strtolower($unit); + //Set scale factor + switch ($unit) { + // points + case 'px': + case 'pt': { + $this->k = 1; + break; + } + // millimeters + case 'mm': { + $this->k = $this->dpi / 25.4; + break; + } + // centimeters + case 'cm': { + $this->k = $this->dpi / 2.54; + break; + } + // inches + case 'in': { + $this->k = $this->dpi; + break; + } + // unsupported unit + default : { + $this->Error('Incorrect unit: '.$unit); + break; + } + } + $this->pdfunit = $unit; + if (isset($this->CurOrientation)) { + $this->setPageOrientation($this->CurOrientation); + } + } + + /** + * Set the page format + * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).
      • 4A0
      • 2A0
      • A0
      • A1
      • A2
      • A3
      • A4 (default)
      • A5
      • A6
      • A7
      • A8
      • A9
      • A10
      • B0
      • B1
      • B2
      • B3
      • B4
      • B5
      • B6
      • B7
      • B8
      • B9
      • B10
      • C0
      • C1
      • C2
      • C3
      • C4
      • C5
      • C6
      • C7
      • C8
      • C9
      • C10
      • RA0
      • RA1
      • RA2
      • RA3
      • RA4
      • SRA0
      • SRA1
      • SRA2
      • SRA3
      • SRA4
      • LETTER
      • LEGAL
      • EXECUTIVE
      • FOLIO
      + * @param string $orientation page orientation. Possible values are (case insensitive):
      • P or PORTRAIT (default)
      • L or LANDSCAPE
      + * @access public + * @since 3.0.015 (2008-06-06) + */ + public function setPageFormat($format, $orientation='P') { + //Page format + if (is_string($format)) { + // Page formats (45 standard ISO paper formats and 4 american common formats). + // Paper cordinates are calculated in this way: (inches * 72) where (1 inch = 2.54 cm) + switch (strtoupper($format)) { + case '4A0': {$format = array(4767.87,6740.79); break;} + case '2A0': {$format = array(3370.39,4767.87); break;} + case 'A0': {$format = array(2383.94,3370.39); break;} + case 'A1': {$format = array(1683.78,2383.94); break;} + case 'A2': {$format = array(1190.55,1683.78); break;} + case 'A3': {$format = array(841.89,1190.55); break;} + case 'A4': default: {$format = array(595.28,841.89); break;} + case 'A5': {$format = array(419.53,595.28); break;} + case 'A6': {$format = array(297.64,419.53); break;} + case 'A7': {$format = array(209.76,297.64); break;} + case 'A8': {$format = array(147.40,209.76); break;} + case 'A9': {$format = array(104.88,147.40); break;} + case 'A10': {$format = array(73.70,104.88); break;} + case 'B0': {$format = array(2834.65,4008.19); break;} + case 'B1': {$format = array(2004.09,2834.65); break;} + case 'B2': {$format = array(1417.32,2004.09); break;} + case 'B3': {$format = array(1000.63,1417.32); break;} + case 'B4': {$format = array(708.66,1000.63); break;} + case 'B5': {$format = array(498.90,708.66); break;} + case 'B6': {$format = array(354.33,498.90); break;} + case 'B7': {$format = array(249.45,354.33); break;} + case 'B8': {$format = array(175.75,249.45); break;} + case 'B9': {$format = array(124.72,175.75); break;} + case 'B10': {$format = array(87.87,124.72); break;} + case 'C0': {$format = array(2599.37,3676.54); break;} + case 'C1': {$format = array(1836.85,2599.37); break;} + case 'C2': {$format = array(1298.27,1836.85); break;} + case 'C3': {$format = array(918.43,1298.27); break;} + case 'C4': {$format = array(649.13,918.43); break;} + case 'C5': {$format = array(459.21,649.13); break;} + case 'C6': {$format = array(323.15,459.21); break;} + case 'C7': {$format = array(229.61,323.15); break;} + case 'C8': {$format = array(161.57,229.61); break;} + case 'C9': {$format = array(113.39,161.57); break;} + case 'C10': {$format = array(79.37,113.39); break;} + case 'RA0': {$format = array(2437.80,3458.27); break;} + case 'RA1': {$format = array(1729.13,2437.80); break;} + case 'RA2': {$format = array(1218.90,1729.13); break;} + case 'RA3': {$format = array(864.57,1218.90); break;} + case 'RA4': {$format = array(609.45,864.57); break;} + case 'SRA0': {$format = array(2551.18,3628.35); break;} + case 'SRA1': {$format = array(1814.17,2551.18); break;} + case 'SRA2': {$format = array(1275.59,1814.17); break;} + case 'SRA3': {$format = array(907.09,1275.59); break;} + case 'SRA4': {$format = array(637.80,907.09); break;} + case 'LETTER': {$format = array(612.00,792.00); break;} + case 'LEGAL': {$format = array(612.00,1008.00); break;} + case 'EXECUTIVE': {$format = array(521.86,756.00); break;} + case 'FOLIO': {$format = array(612.00,936.00); break;} + } + $this->fwPt = $format[0]; + $this->fhPt = $format[1]; + } else { + $this->fwPt = $format[0] * $this->k; + $this->fhPt = $format[1] * $this->k; + } + $this->setPageOrientation($orientation); + } + + /** + * Set page orientation. + * @param string $orientation page orientation. Possible values are (case insensitive):
      • P or PORTRAIT (default)
      • L or LANDSCAPE
      + * @param boolean $autopagebreak Boolean indicating if auto-page-break mode should be on or off. + * @param float $bottommargin bottom margin of the page. + * @access public + * @since 3.0.015 (2008-06-06) + */ + public function setPageOrientation($orientation, $autopagebreak='', $bottommargin='') { + if ($this->fwPt > $this->fhPt) { + // landscape + $default_orientation = 'L'; + } else { + // portrait + $default_orientation = 'P'; + } + $valid_orientations = array('P', 'L'); + if (empty($orientation)) { + $orientation = $default_orientation; + } else { + $orientation = $orientation{0}; + $orientation = strtoupper($orientation); + } + if (in_array($orientation, $valid_orientations) AND ($orientation != $default_orientation)) { + $this->CurOrientation = $orientation; + $this->wPt = $this->fhPt; + $this->hPt = $this->fwPt; + } else { + $this->CurOrientation = $default_orientation; + $this->wPt = $this->fwPt; + $this->hPt = $this->fhPt; + } + $this->w = $this->wPt / $this->k; + $this->h = $this->hPt / $this->k; + if ($this->empty_string($autopagebreak)) { + if (isset($this->AutoPageBreak)) { + $autopagebreak = $this->AutoPageBreak; + } else { + $autopagebreak = true; + } + } + if ($this->empty_string($bottommargin)) { + if (isset($this->bMargin)) { + $bottommargin = $this->bMargin; + } else { + // default value = 2 cm + $bottommargin = 2 * 28.35 / $this->k; + } + } + $this->SetAutoPageBreak($autopagebreak, $bottommargin); + // store page dimensions + $this->pagedim[$this->page] = array('w' => $this->wPt, 'h' => $this->hPt, 'wk' => $this->w, 'hk' => $this->h, 'tm' => $this->tMargin, 'bm' => $bottommargin, 'lm' => $this->lMargin, 'rm' => $this->rMargin, 'pb' => $autopagebreak, 'or' => $this->CurOrientation, 'olm' => $this->original_lMargin, 'orm' => $this->original_rMargin); + } + + /** + * Set regular expression to detect withespaces or word separators. + * @param string $re regular expression (leave empty for default). + * @access public + * @since 4.6.016 (2009-06-15) + */ + public function setSpacesRE($re='/[\s]/') { + // if PCRE unicode support is turned ON: + // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator. + // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants. + // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between. + $this->re_spaces = $re; + } + + /** + * Enable or disable Right-To-Left language mode + * @param Boolean $enable if true enable Right-To-Left language mode. + * @param Boolean $resetx if true reset the X position on direction change. + * @access public + * @since 2.0.000 (2008-01-03) + */ + public function setRTL($enable, $resetx=true) { + $enable = $enable ? true : false; + $resetx = ($resetx AND ($enable != $this->rtl)); + $this->rtl = $enable; + $this->tmprtl = false; + if ($resetx) { + $this->Ln(0); + } + } + + /** + * Return the RTL status + * @return boolean + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getRTL() { + return $this->rtl; + } + + /** + * Force temporary RTL language direction + * @param mixed $mode can be false, 'L' for LTR or 'R' for RTL + * @access public + * @since 2.1.000 (2008-01-09) + */ + public function setTempRTL($mode) { + $newmode = false; + switch ($mode) { + case 'ltr': + case 'LTR': + case 'L': { + if ($this->rtl) { + $newmode = 'L'; + } + break; + } + case 'rtl': + case 'RTL': + case 'R': { + if (!$this->rtl) { + $newmode = 'R'; + } + break; + } + case false: + default: { + $newmode = false; + break; + } + } + $this->tmprtl = $newmode; + } + + /** + * Return the current temporary RTL status + * @return boolean + * @access public + * @since 4.8.014 (2009-11-04) + */ + public function isRTLTextDir() { + return ($this->rtl OR ($this->tmprtl == 'R')); + } + + /** + * Set the last cell height. + * @param float $h cell height. + * @author Nicola Asuni + * @access public + * @since 1.53.0.TC034 + */ + public function setLastH($h) { + $this->lasth = $h; + } + + /** + * Get the last cell height. + * @return last cell height + * @access public + * @since 4.0.017 (2008-08-05) + */ + public function getLastH() { + return $this->lasth; + } + + /** + * Set the adjusting factor to convert pixels to user units. + * @param float $scale adjusting factor to convert pixels to user units. + * @author Nicola Asuni + * @access public + * @since 1.5.2 + */ + public function setImageScale($scale) { + $this->imgscale = $scale; + } + + /** + * Returns the adjusting factor to convert pixels to user units. + * @return float adjusting factor to convert pixels to user units. + * @author Nicola Asuni + * @access public + * @since 1.5.2 + */ + public function getImageScale() { + return $this->imgscale; + } + + /** + * Returns an array of page dimensions: + *
      • $this->pagedim[$this->page]['w'] => page_width_in_points
      • $this->pagedim[$this->page]['h'] => height in points
      • $this->pagedim[$this->page]['wk'] => page_width_in_points
      • $this->pagedim[$this->page]['hk'] => height
      • $this->pagedim[$this->page]['tm'] => top_margin
      • $this->pagedim[$this->page]['bm'] => bottom_margin
      • $this->pagedim[$this->page]['lm'] => left_margin
      • $this->pagedim[$this->page]['rm'] => right_margin
      • $this->pagedim[$this->page]['pb'] => auto_page_break
      • $this->pagedim[$this->page]['or'] => page_orientation
      • $this->pagedim[$this->page]['olm'] => original_left_margin
      • $this->pagedim[$this->page]['orm'] => original_right_margin
      + * @param int $pagenum page number (empty = current page) + * @return array of page dimensions. + * @author Nicola Asuni + * @access public + * @since 4.5.027 (2009-03-16) + */ + public function getPageDimensions($pagenum='') { + if (empty($pagenum)) { + $pagenum = $this->page; + } + return $this->pagedim[$pagenum]; + } + + /** + * Returns the page width in units. + * @param int $pagenum page number (empty = current page) + * @return int page width. + * @author Nicola Asuni + * @access public + * @since 1.5.2 + * @see getPageDimensions() + */ + public function getPageWidth($pagenum='') { + if (empty($pagenum)) { + return $this->w; + } + return $this->pagedim[$pagenum]['w']; + } + + /** + * Returns the page height in units. + * @param int $pagenum page number (empty = current page) + * @return int page height. + * @author Nicola Asuni + * @access public + * @since 1.5.2 + * @see getPageDimensions() + */ + public function getPageHeight($pagenum='') { + if (empty($pagenum)) { + return $this->h; + } + return $this->pagedim[$pagenum]['h']; + } + + /** + * Returns the page break margin. + * @param int $pagenum page number (empty = current page) + * @return int page break margin. + * @author Nicola Asuni + * @access public + * @since 1.5.2 + * @see getPageDimensions() + */ + public function getBreakMargin($pagenum='') { + if (empty($pagenum)) { + return $this->bMargin; + } + return $this->pagedim[$pagenum]['bm']; + } + + /** + * Returns the scale factor (number of points in user unit). + * @return int scale factor. + * @author Nicola Asuni + * @access public + * @since 1.5.2 + */ + public function getScaleFactor() { + return $this->k; + } + + /** + * Defines the left, top and right margins. + * @param float $left Left margin. + * @param float $top Top margin. + * @param float $right Right margin. Default value is the left one. + * @param boolean $keepmargins if true overwrites the default page margins + * @access public + * @since 1.0 + * @see SetLeftMargin(), SetTopMargin(), SetRightMargin(), SetAutoPageBreak() + */ + public function SetMargins($left, $top, $right=-1, $keepmargins=false) { + //Set left, top and right margins + $this->lMargin = $left; + $this->tMargin = $top; + if ($right == -1) { + $right = $left; + } + $this->rMargin = $right; + if ($keepmargins) { + // overwrite original values + $this->original_lMargin = $this->lMargin; + $this->original_rMargin = $this->rMargin; + } + } + + /** + * Defines the left margin. The method can be called before creating the first page. If the current abscissa gets out of page, it is brought back to the margin. + * @param float $margin The margin. + * @access public + * @since 1.4 + * @see SetTopMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins() + */ + public function SetLeftMargin($margin) { + //Set left margin + $this->lMargin=$margin; + if (($this->page > 0) AND ($this->x < $margin)) { + $this->x = $margin; + } + } + + /** + * Defines the top margin. The method can be called before creating the first page. + * @param float $margin The margin. + * @access public + * @since 1.5 + * @see SetLeftMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins() + */ + public function SetTopMargin($margin) { + //Set top margin + $this->tMargin=$margin; + if (($this->page > 0) AND ($this->y < $margin)) { + $this->y = $margin; + } + } + + /** + * Defines the right margin. The method can be called before creating the first page. + * @param float $margin The margin. + * @access public + * @since 1.5 + * @see SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins() + */ + public function SetRightMargin($margin) { + $this->rMargin=$margin; + if (($this->page > 0) AND ($this->x > ($this->w - $margin))) { + $this->x = $this->w - $margin; + } + } + + /** + * Set the internal Cell padding. + * @param float $pad internal padding. + * @access public + * @since 2.1.000 (2008-01-09) + * @see Cell(), SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins() + */ + public function SetCellPadding($pad) { + $this->cMargin = $pad; + } + + /** + * Enables or disables the automatic page breaking mode. When enabling, the second parameter is the distance from the bottom of the page that defines the triggering limit. By default, the mode is on and the margin is 2 cm. + * @param boolean $auto Boolean indicating if mode should be on or off. + * @param float $margin Distance from the bottom of the page. + * @access public + * @since 1.0 + * @see Cell(), MultiCell(), AcceptPageBreak() + */ + public function SetAutoPageBreak($auto, $margin=0) { + //Set auto page break mode and triggering margin + $this->AutoPageBreak = $auto; + $this->bMargin = $margin; + $this->PageBreakTrigger = $this->h - $margin; + } + + /** + * Defines the way the document is to be displayed by the viewer. + * @param mixed $zoom The zoom to use. It can be one of the following string values or a number indicating the zooming factor to use.
      • fullpage: displays the entire page on screen
      • fullwidth: uses maximum width of window
      • real: uses real size (equivalent to 100% zoom)
      • default: uses viewer default mode
      + * @param string $layout The page layout. Possible values are:
      • SinglePage Display one page at a time
      • OneColumn Display the pages in one column
      • TwoColumnLeft Display the pages in two columns, with odd-numbered pages on the left
      • TwoColumnRight Display the pages in two columns, with odd-numbered pages on the right
      • TwoPageLeft (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the left
      • TwoPageRight (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the right
      + * @param string $mode A name object specifying how the document should be displayed when opened:
      • UseNone Neither document outline nor thumbnail images visible
      • UseOutlines Document outline visible
      • UseThumbs Thumbnail images visible
      • FullScreen Full-screen mode, with no menu bar, window controls, or any other window visible
      • UseOC (PDF 1.5) Optional content group panel visible
      • UseAttachments (PDF 1.6) Attachments panel visible
      + * @access public + * @since 1.2 + */ + public function SetDisplayMode($zoom, $layout='SinglePage', $mode='UseNone') { + //Set display mode in viewer + if (($zoom == 'fullpage') OR ($zoom == 'fullwidth') OR ($zoom == 'real') OR ($zoom == 'default') OR (!is_string($zoom))) { + $this->ZoomMode = $zoom; + } else { + $this->Error('Incorrect zoom display mode: '.$zoom); + } + switch ($layout) { + case 'default': + case 'single': + case 'SinglePage': { + $this->LayoutMode = 'SinglePage'; + break; + } + case 'continuous': + case 'OneColumn': { + $this->LayoutMode = 'OneColumn'; + break; + } + case 'two': + case 'TwoColumnLeft': { + $this->LayoutMode = 'TwoColumnLeft'; + break; + } + case 'TwoColumnRight': { + $this->LayoutMode = 'TwoColumnRight'; + break; + } + case 'TwoPageLeft': { + $this->LayoutMode = 'TwoPageLeft'; + break; + } + case 'TwoPageRight': { + $this->LayoutMode = 'TwoPageRight'; + break; + } + default: { + $this->LayoutMode = 'SinglePage'; + } + } + switch ($mode) { + case 'UseNone': { + $this->PageMode = 'UseNone'; + break; + } + case 'UseOutlines': { + $this->PageMode = 'UseOutlines'; + break; + } + case 'UseThumbs': { + $this->PageMode = 'UseThumbs'; + break; + } + case 'FullScreen': { + $this->PageMode = 'FullScreen'; + break; + } + case 'UseOC': { + $this->PageMode = 'UseOC'; + break; + } + case '': { + $this->PageMode = 'UseAttachments'; + break; + } + default: { + $this->PageMode = 'UseNone'; + } + } + } + + /** + * Activates or deactivates page compression. When activated, the internal representation of each page is compressed, which leads to a compression ratio of about 2 for the resulting document. Compression is on by default. + * Note: the Zlib extension is required for this feature. If not present, compression will be turned off. + * @param boolean $compress Boolean indicating if compression must be enabled. + * @access public + * @since 1.4 + */ + public function SetCompression($compress) { + //Set page compression + if (function_exists('gzcompress')) { + $this->compress = $compress; + } else { + $this->compress = false; + } + } + + /** + * Defines the title of the document. + * @param string $title The title. + * @access public + * @since 1.2 + * @see SetAuthor(), SetCreator(), SetKeywords(), SetSubject() + */ + public function SetTitle($title) { + //Title of document + $this->title = $title; + } + + /** + * Defines the subject of the document. + * @param string $subject The subject. + * @access public + * @since 1.2 + * @see SetAuthor(), SetCreator(), SetKeywords(), SetTitle() + */ + public function SetSubject($subject) { + //Subject of document + $this->subject = $subject; + } + + /** + * Defines the author of the document. + * @param string $author The name of the author. + * @access public + * @since 1.2 + * @see SetCreator(), SetKeywords(), SetSubject(), SetTitle() + */ + public function SetAuthor($author) { + //Author of document + $this->author = $author; + } + + /** + * Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'. + * @param string $keywords The list of keywords. + * @access public + * @since 1.2 + * @see SetAuthor(), SetCreator(), SetSubject(), SetTitle() + */ + public function SetKeywords($keywords) { + //Keywords of document + $this->keywords = $keywords; + } + + /** + * Defines the creator of the document. This is typically the name of the application that generates the PDF. + * @param string $creator The name of the creator. + * @access public + * @since 1.2 + * @see SetAuthor(), SetKeywords(), SetSubject(), SetTitle() + */ + public function SetCreator($creator) { + //Creator of document + $this->creator = $creator; + } + + /** + * This method is automatically called in case of fatal error; it simply outputs the message and halts the execution. An inherited class may override it to customize the error handling but should always halt the script, or the resulting document would probably be invalid. + * 2004-06-11 :: Nicola Asuni : changed bold tag with strong + * @param string $msg The error message + * @access public + * @since 1.0 + */ + public function Error($msg) { + // unset all class variables + $this->_destroy(true); + // exit program and print error + die('TCPDF ERROR: '.$msg); + } + + /** + * This method begins the generation of the PDF document. + * It is not necessary to call it explicitly because AddPage() does it automatically. + * Note: no page is created by this method + * @access public + * @since 1.0 + * @see AddPage(), Close() + */ + public function Open() { + //Begin document + $this->state = 1; + } + + /** + * Terminates the PDF document. + * It is not necessary to call this method explicitly because Output() does it automatically. + * If the document contains no page, AddPage() is called to prevent from getting an invalid document. + * @access public + * @since 1.0 + * @see Open(), Output() + */ + public function Close() { + if ($this->state == 3) { + return; + } + if ($this->page == 0) { + $this->AddPage(); + } + // close page + $this->endPage(); + // close document + $this->_enddoc(); + // unset all class variables (except critical ones) + $this->_destroy(false); + } + + /** + * Move pointer at the specified document page and update page dimensions. + * @param int $pnum page number (1 ... numpages) + * @param boolean $resetmargins if true reset left, right, top margins and Y position. + * @access public + * @since 2.1.000 (2008-01-07) + * @see getPage(), lastpage(), getNumPages() + */ + public function setPage($pnum, $resetmargins=false) { + if ($pnum == $this->page) { + return; + } + if (($pnum > 0) AND ($pnum <= $this->numpages)) { + $this->state = 2; + // save current graphic settings + //$gvars = $this->getGraphicVars(); + $oldpage = $this->page; + $this->page = $pnum; + $this->wPt = $this->pagedim[$this->page]['w']; + $this->hPt = $this->pagedim[$this->page]['h']; + $this->w = $this->wPt / $this->k; + $this->h = $this->hPt / $this->k; + $this->tMargin = $this->pagedim[$this->page]['tm']; + $this->bMargin = $this->pagedim[$this->page]['bm']; + $this->original_lMargin = $this->pagedim[$this->page]['olm']; + $this->original_rMargin = $this->pagedim[$this->page]['orm']; + $this->AutoPageBreak = $this->pagedim[$this->page]['pb']; + $this->CurOrientation = $this->pagedim[$this->page]['or']; + $this->SetAutoPageBreak($this->AutoPageBreak, $this->bMargin); + // restore graphic settings + //$this->setGraphicVars($gvars); + if ($resetmargins) { + $this->lMargin = $this->pagedim[$this->page]['olm']; + $this->rMargin = $this->pagedim[$this->page]['orm']; + $this->SetY($this->tMargin); + } else { + // account for booklet mode + if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) { + $deltam = $this->pagedim[$this->page]['olm'] - $this->pagedim[$this->page]['orm']; + $this->lMargin += $deltam; + $this->rMargin -= $deltam; + } + } + } else { + $this->Error('Wrong page number on setPage() function.'); + } + } + + /** + * Reset pointer to the last document page. + * @param boolean $resetmargins if true reset left, right, top margins and Y position. + * @access public + * @since 2.0.000 (2008-01-04) + * @see setPage(), getPage(), getNumPages() + */ + public function lastPage($resetmargins=false) { + $this->setPage($this->getNumPages(), $resetmargins); + } + + /** + * Get current document page number. + * @return int page number + * @access public + * @since 2.1.000 (2008-01-07) + * @see setPage(), lastpage(), getNumPages() + */ + public function getPage() { + return $this->page; + } + + + /** + * Get the total number of insered pages. + * @return int number of pages + * @access public + * @since 2.1.000 (2008-01-07) + * @see setPage(), getPage(), lastpage() + */ + public function getNumPages() { + return $this->numpages; + } + + /** + * Adds a new TOC (Table Of Content) page to the document. + * @param string $orientation page orientation. + * @param boolean $keepmargins if true overwrites the default page margins with the current margins + * @access public + * @since 5.0.001 (2010-05-06) + * @see AddPage(), startPage(), endPage(), endTOCPage() + */ + public function addTOCPage($orientation='', $format='', $keepmargins=false) { + $this->AddPage($orientation, $format, $keepmargins, true); + } + + /** + * Terminate the current TOC (Table Of Content) page + * @access public + * @since 5.0.001 (2010-05-06) + * @see AddPage(), startPage(), endPage(), addTOCPage() + */ + public function endTOCPage() { + $this->endPage(true); + } + + /** + * Adds a new page to the document. If a page is already present, the Footer() method is called first to output the footer (if enabled). Then the page is added, the current position set to the top-left corner according to the left and top margins (or top-right if in RTL mode), and Header() is called to display the header (if enabled). + * The origin of the coordinate system is at the top-left corner (or top-right for RTL) and increasing ordinates go downwards. + * @param string $orientation page orientation. Possible values are (case insensitive):
      • P or PORTRAIT (default)
      • L or LANDSCAPE
      + * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).
      • 4A0
      • 2A0
      • A0
      • A1
      • A2
      • A3
      • A4 (default)
      • A5
      • A6
      • A7
      • A8
      • A9
      • A10
      • B0
      • B1
      • B2
      • B3
      • B4
      • B5
      • B6
      • B7
      • B8
      • B9
      • B10
      • C0
      • C1
      • C2
      • C3
      • C4
      • C5
      • C6
      • C7
      • C8
      • C9
      • C10
      • RA0
      • RA1
      • RA2
      • RA3
      • RA4
      • SRA0
      • SRA1
      • SRA2
      • SRA3
      • SRA4
      • LETTER
      • LEGAL
      • EXECUTIVE
      • FOLIO
      + * @param boolean $keepmargins if true overwrites the default page margins with the current margins + * @param boolean $tocpage if true set the tocpage state to true (the added page will be used to display Table Of Content). + * @access public + * @since 1.0 + * @see startPage(), endPage(), addTOCPage(), endTOCPage() + */ + public function AddPage($orientation='', $format='', $keepmargins=false, $tocpage=false) { + if (!isset($this->original_lMargin) OR $keepmargins) { + $this->original_lMargin = $this->lMargin; + } + if (!isset($this->original_rMargin) OR $keepmargins) { + $this->original_rMargin = $this->rMargin; + } + // terminate previous page + $this->endPage(); + // start new page + $this->startPage($orientation, $format, $tocpage); + } + + /** + * Terminate the current page + * @param boolean $tocpage if true set the tocpage state to false (end the page used to display Table Of Content). + * @access public + * @since 4.2.010 (2008-11-14) + * @see AddPage(), startPage(), addTOCPage(), endTOCPage() + */ + public function endPage($tocpage=false) { + // check if page is already closed + if (($this->page == 0) OR ($this->numpages > $this->page) OR (!$this->pageopen[$this->page])) { + return; + } + $this->InFooter = true; + // print page footer + $this->setFooter(); + // close page + $this->_endpage(); + // mark page as closed + $this->pageopen[$this->page] = false; + $this->InFooter = false; + if ($tocpage) { + $this->tocpage = false; + } + } + + /** + * Starts a new page to the document. The page must be closed using the endPage() function. + * The origin of the coordinate system is at the top-left corner and increasing ordinates go downwards. + * @param string $orientation page orientation. Possible values are (case insensitive):
      • P or PORTRAIT (default)
      • L or LANDSCAPE
      + * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).
      • 4A0
      • 2A0
      • A0
      • A1
      • A2
      • A3
      • A4 (default)
      • A5
      • A6
      • A7
      • A8
      • A9
      • A10
      • B0
      • B1
      • B2
      • B3
      • B4
      • B5
      • B6
      • B7
      • B8
      • B9
      • B10
      • C0
      • C1
      • C2
      • C3
      • C4
      • C5
      • C6
      • C7
      • C8
      • C9
      • C10
      • RA0
      • RA1
      • RA2
      • RA3
      • RA4
      • SRA0
      • SRA1
      • SRA2
      • SRA3
      • SRA4
      • LETTER
      • LEGAL
      • EXECUTIVE
      • FOLIO
      + * @param boolean $tocpage if true set the tocpage state to true (the added page will be used to display Table of Content). + * @access public + * @since 4.2.010 (2008-11-14) + * @see AddPage(), endPage(), addTOCPage(), endTOCPage() + */ + public function startPage($orientation='', $format='', $tocpage=false) { + if ($tocpage) { + $this->tocpage = true; + } + if ($this->numpages > $this->page) { + // this page has been already added + $this->setPage($this->page + 1); + $this->SetY($this->tMargin); + return; + } + // start a new page + if ($this->state == 0) { + $this->Open(); + } + ++$this->numpages; + $this->swapMargins($this->booklet); + // save current graphic settings + $gvars = $this->getGraphicVars(); + // start new page + $this->_beginpage($orientation, $format); + // mark page as open + $this->pageopen[$this->page] = true; + // restore graphic settings + $this->setGraphicVars($gvars); + // mark this point + $this->setPageMark(); + // print page header + $this->setHeader(); + // restore graphic settings + $this->setGraphicVars($gvars); + // mark this point + $this->setPageMark(); + // print table header (if any) + $this->setTableHeader(); + } + + /** + * Set start-writing mark on current page stream used to put borders and fills. + * Borders and fills are always created after content and inserted on the position marked by this method. + * This function must be called after calling Image() function for a background image. + * Background images must be always inserted before calling Multicell() or WriteHTMLCell() or WriteHTML() functions. + * @access public + * @since 4.0.016 (2008-07-30) + */ + public function setPageMark() { + $this->intmrk[$this->page] = $this->pagelen[$this->page]; + $this->setContentMark(); + } + + /** + * Set start-writing mark on selected page. + * Borders and fills are always created after content and inserted on the position marked by this method. + * @param int $page page number (default is the current page) + * @access protected + * @since 4.6.021 (2009-07-20) + */ + protected function setContentMark($page=0) { + if ($page <= 0) { + $page = $this->page; + } + if (isset($this->footerlen[$page])) { + $this->cntmrk[$page] = $this->pagelen[$page] - $this->footerlen[$page]; + } else { + $this->cntmrk[$page] = $this->pagelen[$page]; + } + } + + /** + * Set header data. + * @param string $ln header image logo + * @param string $lw header image logo width in mm + * @param string $ht string to print as title on document header + * @param string $hs string to print on document header + * @access public + */ + public function setHeaderData($ln='', $lw=0, $ht='', $hs='') { + $this->header_logo = $ln; + $this->header_logo_width = $lw; + $this->header_title = $ht; + $this->header_string = $hs; + } + + /** + * Returns header data: + *
      • $ret['logo'] = logo image
      • $ret['logo_width'] = width of the image logo in user units
      • $ret['title'] = header title
      • $ret['string'] = header description string
      + * @return array() + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getHeaderData() { + $ret = array(); + $ret['logo'] = $this->header_logo; + $ret['logo_width'] = $this->header_logo_width; + $ret['title'] = $this->header_title; + $ret['string'] = $this->header_string; + return $ret; + } + + /** + * Set header margin. + * (minimum distance between header and top page margin) + * @param int $hm distance in user units + * @access public + */ + public function setHeaderMargin($hm=10) { + $this->header_margin = $hm; + } + + /** + * Returns header margin in user units. + * @return float + * @since 4.0.012 (2008-07-24) + * @access public + */ + public function getHeaderMargin() { + return $this->header_margin; + } + + /** + * Set footer margin. + * (minimum distance between footer and bottom page margin) + * @param int $fm distance in user units + * @access public + */ + public function setFooterMargin($fm=10) { + $this->footer_margin = $fm; + } + + /** + * Returns footer margin in user units. + * @return float + * @since 4.0.012 (2008-07-24) + * @access public + */ + public function getFooterMargin() { + return $this->footer_margin; + } + /** + * Set a flag to print page header. + * @param boolean $val set to true to print the page header (default), false otherwise. + * @access public + */ + public function setPrintHeader($val=true) { + $this->print_header = $val; + } + + /** + * Set a flag to print page footer. + * @param boolean $value set to true to print the page footer (default), false otherwise. + * @access public + */ + public function setPrintFooter($val=true) { + $this->print_footer = $val; + } + + /** + * Return the right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image + * @return float + * @access public + */ + public function getImageRBX() { + return $this->img_rb_x; + } + + /** + * Return the right-bottom (or left-bottom for RTL) corner Y coordinate of last inserted image + * @return float + * @access public + */ + public function getImageRBY() { + return $this->img_rb_y; + } + + /** + * This method is used to render the page header. + * It is automatically called by AddPage() and could be overwritten in your own inherited class. + * @access public + */ + public function Header() { + $ormargins = $this->getOriginalMargins(); + $headerfont = $this->getHeaderFont(); + $headerdata = $this->getHeaderData(); + if (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) { + $this->Image(K_PATH_IMAGES.$headerdata['logo'], $this->GetX(), $this->getHeaderMargin(), $headerdata['logo_width']); + $imgy = $this->getImageRBY(); + } else { + $imgy = $this->GetY(); + } + $cell_height = round(($this->getCellHeightRatio() * $headerfont[2]) / $this->getScaleFactor(), 2); + // set starting margin for text data cell + if ($this->getRTL()) { + $header_x = $ormargins['right'] + ($headerdata['logo_width'] * 1.1); + } else { + $header_x = $ormargins['left'] + ($headerdata['logo_width'] * 1.1); + } + $this->SetTextColor(0, 0, 0); + // header title + $this->SetFont($headerfont[0], 'B', $headerfont[2] + 1); + $this->SetX($header_x); + $this->Cell(0, $cell_height, $headerdata['title'], 0, 1, '', 0, '', 0); + // header string + $this->SetFont($headerfont[0], $headerfont[1], $headerfont[2]); + $this->SetX($header_x); + $this->MultiCell(0, $cell_height, $headerdata['string'], 0, '', 0, 1, '', '', true, 0, false); + // print an ending header line + $this->SetLineStyle(array('width' => 0.85 / $this->getScaleFactor(), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); + $this->SetY((2.835 / $this->getScaleFactor()) + max($imgy, $this->GetY())); + if ($this->getRTL()) { + $this->SetX($ormargins['right']); + } else { + $this->SetX($ormargins['left']); + } + $this->Cell(0, 0, '', 'T', 0, 'C'); + } + + /** + * This method is used to render the page footer. + * It is automatically called by AddPage() and could be overwritten in your own inherited class. + * @access public + */ + public function Footer() { + $cur_y = $this->GetY(); + $ormargins = $this->getOriginalMargins(); + $this->SetTextColor(0, 0, 0); + //set style for cell border + $line_width = 0.85 / $this->getScaleFactor(); + $this->SetLineStyle(array('width' => $line_width, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); + //print document barcode + $barcode = $this->getBarcode(); + if (!empty($barcode)) { + $this->Ln($line_width); + $barcode_width = round(($this->getPageWidth() - $ormargins['left'] - $ormargins['right'])/3); + $this->write1DBarcode($barcode, 'C128B', $this->GetX(), $cur_y + $line_width, $barcode_width, (($this->getFooterMargin() / 3) - $line_width), 0.3, '', ''); + } + if (empty($this->pagegroups)) { + $pagenumtxt = $this->l['w_page'].' '.$this->getAliasNumPage().' / '.$this->getAliasNbPages(); + } else { + $pagenumtxt = $this->l['w_page'].' '.$this->getPageNumGroupAlias().' / '.$this->getPageGroupAlias(); + } + $this->SetY($cur_y); + //Print page number + if ($this->getRTL()) { + $this->SetX($ormargins['right']); + $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'L'); + } else { + $this->SetX($ormargins['left']); + $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'R'); + } + } + + /** + * This method is used to render the page header. + * @access protected + * @since 4.0.012 (2008-07-24) + */ + protected function setHeader() { + if ($this->print_header) { + $temp_thead = $this->thead; + $temp_theadMargins = $this->theadMargins; + $lasth = $this->lasth; + $this->_out('q'); + $this->rMargin = $this->original_rMargin; + $this->lMargin = $this->original_lMargin; + $this->cMargin = 0; + //set current position + if ($this->rtl) { + $this->SetXY($this->original_rMargin, $this->header_margin); + } else { + $this->SetXY($this->original_lMargin, $this->header_margin); + } + $this->SetFont($this->header_font[0], $this->header_font[1], $this->header_font[2]); + $this->Header(); + //restore position + if ($this->rtl) { + $this->SetXY($this->original_rMargin, $this->tMargin); + } else { + $this->SetXY($this->original_lMargin, $this->tMargin); + } + $this->_out('Q'); + $this->lasth = $lasth; + $this->thead = $temp_thead; + $this->theadMargins = $temp_theadMargins; + $this->newline = false; + } + } + + /** + * This method is used to render the page footer. + * @access protected + * @since 4.0.012 (2008-07-24) + */ + protected function setFooter() { + //Page footer + // save current graphic settings + $gvars = $this->getGraphicVars(); + // mark this point + $this->footerpos[$this->page] = $this->pagelen[$this->page]; + $this->_out("\n"); + if ($this->print_footer) { + $temp_thead = $this->thead; + $temp_theadMargins = $this->theadMargins; + $lasth = $this->lasth; + $this->_out('q'); + $this->rMargin = $this->original_rMargin; + $this->lMargin = $this->original_lMargin; + $this->cMargin = 0; + //set current position + $footer_y = $this->h - $this->footer_margin; + if ($this->rtl) { + $this->SetXY($this->original_rMargin, $footer_y); + } else { + $this->SetXY($this->original_lMargin, $footer_y); + } + $this->SetFont($this->footer_font[0], $this->footer_font[1], $this->footer_font[2]); + $this->Footer(); + //restore position + if ($this->rtl) { + $this->SetXY($this->original_rMargin, $this->tMargin); + } else { + $this->SetXY($this->original_lMargin, $this->tMargin); + } + $this->_out('Q'); + $this->lasth = $lasth; + $this->thead = $temp_thead; + $this->theadMargins = $temp_theadMargins; + } + // restore graphic settings + $this->setGraphicVars($gvars); + // calculate footer length + $this->footerlen[$this->page] = $this->pagelen[$this->page] - $this->footerpos[$this->page] + 1; + } + + /** + * This method is used to render the table header on new page (if any). + * @access protected + * @since 4.5.030 (2009-03-25) + */ + protected function setTableHeader() { + if ($this->num_columns > 1) { + // multi column mode + return; + } + if (isset($this->theadMargins['top'])) { + // restore the original top-margin + $this->tMargin = $this->theadMargins['top']; + $this->pagedim[$this->page]['tm'] = $this->tMargin; + $this->y = $this->tMargin; + } + if (!$this->empty_string($this->thead) AND (!$this->inthead)) { + // set margins + $prev_lMargin = $this->lMargin; + $prev_rMargin = $this->rMargin; + $this->lMargin = $this->pagedim[$this->page]['olm']; + $this->rMargin = $this->pagedim[$this->page]['orm']; + $this->cMargin = $this->theadMargins['cmargin']; + if ($this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + // print table header + $this->writeHTML($this->thead, false, false, false, false, ''); + // set new top margin to skip the table headers + if (!isset($this->theadMargins['top'])) { + $this->theadMargins['top'] = $this->tMargin; + } + $this->tMargin = $this->y; + $this->pagedim[$this->page]['tm'] = $this->tMargin; + $this->lasth = 0; + $this->lMargin = $prev_lMargin; + $this->rMargin = $prev_rMargin; + } + } + + /** + * Returns the current page number. + * @return int page number + * @access public + * @since 1.0 + * @see AliasNbPages(), getAliasNbPages() + */ + public function PageNo() { + return $this->page; + } + + /** + * Defines a new spot color. + * It can be expressed in RGB components or gray scale. + * The method can be called before the first page is created and the value is retained from page to page. + * @param int $c Cyan color for CMYK. Value between 0 and 255 + * @param int $m Magenta color for CMYK. Value between 0 and 255 + * @param int $y Yellow color for CMYK. Value between 0 and 255 + * @param int $k Key (Black) color for CMYK. Value between 0 and 255 + * @access public + * @since 4.0.024 (2008-09-12) + * @see SetDrawSpotColor(), SetFillSpotColor(), SetTextSpotColor() + */ + public function AddSpotColor($name, $c, $m, $y, $k) { + if (!isset($this->spot_colors[$name])) { + $i = 1 + count($this->spot_colors); + $this->spot_colors[$name] = array('i' => $i, 'c' => $c, 'm' => $m, 'y' => $y, 'k' => $k); + } + } + + /** + * Defines the color used for all drawing operations (lines, rectangles and cell borders). + * It can be expressed in RGB components or gray scale. + * The method can be called before the first page is created and the value is retained from page to page. + * @param array $color array of colors + * @access public + * @since 3.1.000 (2008-06-11) + * @see SetDrawColor() + */ + public function SetDrawColorArray($color) { + if (isset($color)) { + $color = array_values($color); + $r = isset($color[0]) ? $color[0] : -1; + $g = isset($color[1]) ? $color[1] : -1; + $b = isset($color[2]) ? $color[2] : -1; + $k = isset($color[3]) ? $color[3] : -1; + if ($r >= 0) { + $this->SetDrawColor($r, $g, $b, $k); + } + } + } + + /** + * Defines the color used for all drawing operations (lines, rectangles and cell borders). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255 + * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255 + * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255 + * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255 + * @access public + * @since 1.3 + * @see SetDrawColorArray(), SetFillColor(), SetTextColor(), Line(), Rect(), Cell(), MultiCell() + */ + public function SetDrawColor($col1=0, $col2=-1, $col3=-1, $col4=-1) { + // set default values + if (!is_numeric($col1)) { + $col1 = 0; + } + if (!is_numeric($col2)) { + $col2 = -1; + } + if (!is_numeric($col3)) { + $col3 = -1; + } + if (!is_numeric($col4)) { + $col4 = -1; + } + //Set color for all stroking operations + if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) { + // Grey scale + $this->DrawColor = sprintf('%.3F G', $col1/255); + $this->strokecolor = array('G' => $col1); + } elseif ($col4 == -1) { + // RGB + $this->DrawColor = sprintf('%.3F %.3F %.3F RG', $col1/255, $col2/255, $col3/255); + $this->strokecolor = array('R' => $col1, 'G' => $col2, 'B' => $col3); + } else { + // CMYK + $this->DrawColor = sprintf('%.3F %.3F %.3F %.3F K', $col1/100, $col2/100, $col3/100, $col4/100); + $this->strokecolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4); + } + if ($this->page > 0) { + $this->_out($this->DrawColor); + } + } + + /** + * Defines the spot color used for all drawing operations (lines, rectangles and cell borders). + * @param string $name name of the spot color + * @param int $tint the intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @access public + * @since 4.0.024 (2008-09-12) + * @see AddSpotColor(), SetFillSpotColor(), SetTextSpotColor() + */ + public function SetDrawSpotColor($name, $tint=100) { + if (!isset($this->spot_colors[$name])) { + $this->Error('Undefined spot color: '.$name); + } + $this->DrawColor = sprintf('/CS%d CS %.3F SCN', $this->spot_colors[$name]['i'], $tint/100); + if ($this->page > 0) { + $this->_out($this->DrawColor); + } + } + + /** + * Defines the color used for all filling operations (filled rectangles and cell backgrounds). + * It can be expressed in RGB components or gray scale. + * The method can be called before the first page is created and the value is retained from page to page. + * @param array $color array of colors + * @access public + * @since 3.1.000 (2008-6-11) + * @see SetFillColor() + */ + public function SetFillColorArray($color) { + if (isset($color)) { + $color = array_values($color); + $r = isset($color[0]) ? $color[0] : -1; + $g = isset($color[1]) ? $color[1] : -1; + $b = isset($color[2]) ? $color[2] : -1; + $k = isset($color[3]) ? $color[3] : -1; + if ($r >= 0) { + $this->SetFillColor($r, $g, $b, $k); + } + } + } + + /** + * Defines the color used for all filling operations (filled rectangles and cell backgrounds). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255 + * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255 + * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255 + * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255 + * @access public + * @since 1.3 + * @see SetFillColorArray(), SetDrawColor(), SetTextColor(), Rect(), Cell(), MultiCell() + */ + public function SetFillColor($col1=0, $col2=-1, $col3=-1, $col4=-1) { + // set default values + if (!is_numeric($col1)) { + $col1 = 0; + } + if (!is_numeric($col2)) { + $col2 = -1; + } + if (!is_numeric($col3)) { + $col3 = -1; + } + if (!is_numeric($col4)) { + $col4 = -1; + } + //Set color for all filling operations + if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) { + // Grey scale + $this->FillColor = sprintf('%.3F g', $col1/255); + $this->bgcolor = array('G' => $col1); + } elseif ($col4 == -1) { + // RGB + $this->FillColor = sprintf('%.3F %.3F %.3F rg', $col1/255, $col2/255, $col3/255); + $this->bgcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3); + } else { + // CMYK + $this->FillColor = sprintf('%.3F %.3F %.3F %.3F k', $col1/100, $col2/100, $col3/100, $col4/100); + $this->bgcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4); + } + $this->ColorFlag = ($this->FillColor != $this->TextColor); + if ($this->page > 0) { + $this->_out($this->FillColor); + } + } + + /** + * Defines the spot color used for all filling operations (filled rectangles and cell backgrounds). + * @param string $name name of the spot color + * @param int $tint the intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @access public + * @since 4.0.024 (2008-09-12) + * @see AddSpotColor(), SetDrawSpotColor(), SetTextSpotColor() + */ + public function SetFillSpotColor($name, $tint=100) { + if (!isset($this->spot_colors[$name])) { + $this->Error('Undefined spot color: '.$name); + } + $this->FillColor = sprintf('/CS%d cs %.3F scn', $this->spot_colors[$name]['i'], $tint/100); + $this->ColorFlag = ($this->FillColor != $this->TextColor); + if ($this->page > 0) { + $this->_out($this->FillColor); + } + } + + /** + * Defines the color used for text. It can be expressed in RGB components or gray scale. + * The method can be called before the first page is created and the value is retained from page to page. + * @param array $color array of colors + * @access public + * @since 3.1.000 (2008-6-11) + * @see SetFillColor() + */ + public function SetTextColorArray($color) { + if (isset($color)) { + $color = array_values($color); + $r = isset($color[0]) ? $color[0] : -1; + $g = isset($color[1]) ? $color[1] : -1; + $b = isset($color[2]) ? $color[2] : -1; + $k = isset($color[3]) ? $color[3] : -1; + if ($r >= 0) { + $this->SetTextColor($r, $g, $b, $k); + } + } + } + + /** + * Defines the color used for text. It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255 + * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255 + * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255 + * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255 + * @access public + * @since 1.3 + * @see SetTextColorArray(), SetDrawColor(), SetFillColor(), Text(), Cell(), MultiCell() + */ + public function SetTextColor($col1=0, $col2=-1, $col3=-1, $col4=-1) { + // set default values + if (!is_numeric($col1)) { + $col1 = 0; + } + if (!is_numeric($col2)) { + $col2 = -1; + } + if (!is_numeric($col3)) { + $col3 = -1; + } + if (!is_numeric($col4)) { + $col4 = -1; + } + //Set color for text + if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) { + // Grey scale + $this->TextColor = sprintf('%.3F g', $col1/255); + $this->fgcolor = array('G' => $col1); + } elseif ($col4 == -1) { + // RGB + $this->TextColor = sprintf('%.3F %.3F %.3F rg', $col1/255, $col2/255, $col3/255); + $this->fgcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3); + } else { + // CMYK + $this->TextColor = sprintf('%.3F %.3F %.3F %.3F k', $col1/100, $col2/100, $col3/100, $col4/100); + $this->fgcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4); + } + $this->ColorFlag = ($this->FillColor != $this->TextColor); + } + + /** + * Defines the spot color used for text. + * @param string $name name of the spot color + * @param int $tint the intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @access public + * @since 4.0.024 (2008-09-12) + * @see AddSpotColor(), SetDrawSpotColor(), SetFillSpotColor() + */ + public function SetTextSpotColor($name, $tint=100) { + if (!isset($this->spot_colors[$name])) { + $this->Error('Undefined spot color: '.$name); + } + $this->TextColor = sprintf('/CS%d cs %.3F scn', $this->spot_colors[$name]['i'], $tint/100); + $this->ColorFlag = ($this->FillColor != $this->TextColor); + if ($this->page > 0) { + $this->_out($this->TextColor); + } + } + + /** + * Returns the length of a string in user unit. A font must be selected.
      + * @param string $s The string whose length is to be computed + * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained. + * @param string $fontstyle Font style. Possible values are (case insensitive):
      • empty string: regular
      • B: bold
      • I: italic
      • U: underline
      • D: line-trough
      • O: overline
      or any combination. The default value is regular. + * @param float $fontsize Font size in points. The default value is the current size. + * @param boolean $getarray if true returns an array of characters widths, if false returns the total length. + * @return mixed int total string length or array of characted widths + * @author Nicola Asuni + * @access public + * @since 1.2 + */ + public function GetStringWidth($s, $fontname='', $fontstyle='', $fontsize=0, $getarray=false) { + return $this->GetArrStringWidth($this->utf8Bidi($this->UTF8StringToArray($s), $s, $this->tmprtl), $fontname, $fontstyle, $fontsize, $getarray); + } + + /** + * Returns the string length of an array of chars in user unit or an array of characters widths. A font must be selected.
      + * @param string $sa The array of chars whose total length is to be computed + * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained. + * @param string $fontstyle Font style. Possible values are (case insensitive):
      • empty string: regular
      • B: bold
      • I: italic
      • U: underline
      • D: line trough
      • O: overline
      or any combination. The default value is regular. + * @param float $fontsize Font size in points. The default value is the current size. + * @param boolean $getarray if true returns an array of characters widths, if false returns the total length. + * @return mixed int total string length or array of characted widths + * @author Nicola Asuni + * @access public + * @since 2.4.000 (2008-03-06) + */ + public function GetArrStringWidth($sa, $fontname='', $fontstyle='', $fontsize=0, $getarray=false) { + // store current values + if (!$this->empty_string($fontname)) { + $prev_FontFamily = $this->FontFamily; + $prev_FontStyle = $this->FontStyle; + $prev_FontSizePt = $this->FontSizePt; + $this->SetFont($fontname, $fontstyle, $fontsize); + } + // convert UTF-8 array to Latin1 if required + $sa = $this->UTF8ArrToLatin1($sa); + $w = 0; // total width + $wa = array(); // array of characters widths + foreach ($sa as $char) { + // character width + $cw = $this->GetCharWidth($char); + $wa[] = $cw; + $w += $cw; + } + // restore previous values + if (!$this->empty_string($fontname)) { + $this->SetFont($prev_FontFamily, $prev_FontStyle, $prev_FontSizePt); + } + if ($getarray) { + return $wa; + } + return $w; + } + + /** + * Returns the length of the char in user unit for the current font. + * @param int $char The char code whose length is to be returned + * @return int char width + * @author Nicola Asuni + * @access public + * @since 2.4.000 (2008-03-06) + */ + public function GetCharWidth($char) { + if ($char == 173) { + // SHY character will not be printed + return (0); + } + $cw = &$this->CurrentFont['cw']; + if (isset($cw[$char])) { + $w = $cw[$char]; + } elseif (isset($this->CurrentFont['dw'])) { + // default width + $w = $this->CurrentFont['dw']; + } elseif (isset($cw[32])) { + // default width + $w = $cw[32]; + } else { + $w = 600; + } + return ($w * $this->FontSize / 1000); + } + + /** + * Returns the numbero of characters in a string. + * @param string $s The input string. + * @return int number of characters + * @access public + * @since 2.0.0001 (2008-01-07) + */ + public function GetNumChars($s) { + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + return count($this->UTF8StringToArray($s)); + } + return strlen($s); + } + + /** + * Fill the list of available fonts ($this->fontlist). + * @access protected + * @since 4.0.013 (2008-07-28) + */ + protected function getFontsList() { + $fontsdir = opendir($this->_getfontpath()); + while (($file = readdir($fontsdir)) !== false) { + if (substr($file, -4) == '.php') { + array_push($this->fontlist, strtolower(basename($file, '.php'))); + } + } + closedir($fontsdir); + } + + /** + * Imports a TrueType, Type1, core, or CID0 font and makes it available. + * It is necessary to generate a font definition file first (read /fonts/utils/README.TXT). + * The definition file (and the font file itself when embedding) must be present either in the current directory or in the one indicated by K_PATH_FONTS if the constant is defined. If it could not be found, the error "Could not include font definition file" is generated. + * @param string $family Font family. The name can be chosen arbitrarily. If it is a standard family name, it will override the corresponding font. + * @param string $style Font style. Possible values are (case insensitive):
      • empty string: regular (default)
      • B: bold
      • I: italic
      • BI or IB: bold italic
      + * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces. + * @return array containing the font data, or false in case of error. + * @access public + * @since 1.5 + * @see SetFont() + */ + public function AddFont($family, $style='', $fontfile='') { + if ($this->empty_string($family)) { + if (!$this->empty_string($this->FontFamily)) { + $family = $this->FontFamily; + } else { + $this->Error('Empty font family'); + } + } + $family = strtolower($family); + if ((!$this->isunicode) AND ($family == 'arial')) { + $family = 'helvetica'; + } + if (($family == 'symbol') OR ($family == 'zapfdingbats')) { + $style = ''; + } + $tempstyle = strtoupper($style); + $style = ''; + // underline + if (strpos($tempstyle, 'U') !== false) { + $this->underline = true; + } else { + $this->underline = false; + } + // line-through (deleted) + if (strpos($tempstyle, 'D') !== false) { + $this->linethrough = true; + } else { + $this->linethrough = false; + } + // overline + if (strpos($tempstyle, 'O') !== false) { + $this->overline = true; + } else { + $this->overline = false; + } + // bold + if (strpos($tempstyle, 'B') !== false) { + $style .= 'B'; + } + // oblique + if (strpos($tempstyle, 'I') !== false) { + $style .= 'I'; + } + $bistyle = $style; + $fontkey = $family.$style; + $font_style = $style.($this->underline ? 'U' : '').($this->linethrough ? 'D' : '').($this->overline ? 'O' : ''); + $fontdata = array('fontkey' => $fontkey, 'family' => $family, 'style' => $font_style); + // check if the font has been already added + if ($this->getFontBuffer($fontkey) !== false) { + return $fontdata; + } + if (isset($type)) { + unset($type); + } + if (isset($cw)) { + unset($cw); + } + // get specified font directory (if any) + $fontdir = false; + if (!$this->empty_string($fontfile)) { + $fontdir = dirname($fontfile); + if ($this->empty_string($fontdir) OR ($fontdir == '.')) { + $fontdir = ''; + } else { + $fontdir .= '/'; + } + } + // search and include font file + if ($this->empty_string($fontfile) OR (!file_exists($fontfile))) { + // build a standard filenames for specified font + $fontfile1 = str_replace(' ', '', $family).strtolower($style).'.php'; + $fontfile2 = str_replace(' ', '', $family).'.php'; + // search files on various directories + if (($fontdir !== false) AND file_exists($fontdir.$fontfile1)) { + $fontfile = $fontdir.$fontfile1; + } elseif (file_exists($this->_getfontpath().$fontfile1)) { + $fontfile = $this->_getfontpath().$fontfile1; + } elseif (file_exists($fontfile1)) { + $fontfile = $fontfile1; + } elseif (($fontdir !== false) AND file_exists($fontdir.$fontfile2)) { + $fontfile = $fontdir.$fontfile2; + } elseif (file_exists($this->_getfontpath().$fontfile2)) { + $fontfile = $this->_getfontpath().$fontfile2; + } else { + $fontfile = $fontfile2; + } + } + // include font file + if (file_exists($fontfile)) { + include($fontfile); + } else { + $this->Error('Could not include font definition file: '.$family.''); + } + // check font parameters + if ((!isset($type)) OR (!isset($cw))) { + $this->Error('The font definition file has a bad format: '.$fontfile.''); + } + // SET default parameters + if (!isset($file) OR $this->empty_string($file)) { + $file = ''; + } + if (!isset($enc) OR $this->empty_string($enc)) { + $enc = ''; + } + if (!isset($cidinfo) OR $this->empty_string($cidinfo)) { + $cidinfo = array('Registry'=>'Adobe','Ordering'=>'Identity','Supplement'=>0); + $cidinfo['uni2cid'] = array(); + } + if (!isset($ctg) OR $this->empty_string($ctg)) { + $ctg = ''; + } + if (!isset($desc) OR $this->empty_string($desc)) { + $desc = array(); + } + if (!isset($up) OR $this->empty_string($up)) { + $up = -100; + } + if (!isset($ut) OR $this->empty_string($ut)) { + $ut = 50; + } + if (!isset($cw) OR $this->empty_string($cw)) { + $cw = array(); + } + if (!isset($dw) OR $this->empty_string($dw)) { + // set default width + if (isset($desc['MissingWidth']) AND ($desc['MissingWidth'] > 0)) { + $dw = $desc['MissingWidth']; + } elseif (isset($cw[32])) { + $dw = $cw[32]; + } else { + $dw = 600; + } + } + ++$this->numfonts; + if ($type == 'cidfont0') { + // register CID font (all styles at once) + $styles = array('' => '', 'B' => ',Bold', 'I' => ',Italic', 'BI' => ',BoldItalic'); + $sname = $name.$styles[$bistyle]; + // artificial bold + if (strpos($bistyle, 'B') !== false) { + if (isset($desc['StemV'])) { + $desc['StemV'] *= 2; + } else { + $desc['StemV'] = 120; + } + } + // artificial italic + if (strpos($bistyle, 'I') !== false) { + if (isset($desc['ItalicAngle'])) { + $desc['ItalicAngle'] -= 11; + } else { + $desc['ItalicAngle'] = -11; + } + } + } elseif ($type == 'core') { + $name = $this->CoreFonts[$fontkey]; + } elseif (($type == 'TrueType') OR ($type == 'Type1')) { + // ... + } elseif ($type == 'TrueTypeUnicode') { + $enc = 'Identity-H'; + } else { + $this->Error('Unknow font type: '.$type.''); + } + $this->setFontBuffer($fontkey, array('i' => $this->numfonts, 'type' => $type, 'name' => $name, 'desc' => $desc, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'dw' => $dw, 'enc' => $enc, 'cidinfo' => $cidinfo, 'file' => $file, 'ctg' => $ctg)); + if (isset($diff) AND (!empty($diff))) { + //Search existing encodings + $d = 0; + $nb = count($this->diffs); + for ($i=1; $i <= $nb; ++$i) { + if ($this->diffs[$i] == $diff) { + $d = $i; + break; + } + } + if ($d == 0) { + $d = $nb + 1; + $this->diffs[$d] = $diff; + } + $this->setFontSubBuffer($fontkey, 'diff', $d); + } + if (!$this->empty_string($file)) { + if ((strcasecmp($type,'TrueType') == 0) OR (strcasecmp($type, 'TrueTypeUnicode') == 0)) { + $this->FontFiles[$file] = array('length1' => $originalsize, 'fontdir' => $fontdir); + } elseif ($type != 'core') { + $this->FontFiles[$file] = array('length1' => $size1, 'length2' => $size2, 'fontdir' => $fontdir); + } + } + return $fontdata; + } + + /** + * Sets the font used to print character strings. + * The font can be either a standard one or a font added via the AddFont() method. Standard fonts use Windows encoding cp1252 (Western Europe). + * The method can be called before the first page is created and the font is retained from page to page. + * If you just wish to change the current font size, it is simpler to call SetFontSize(). + * Note: for the standard fonts, the font metric files must be accessible. There are three possibilities for this:
      • They are in the current directory (the one where the running script lies)
      • They are in one of the directories defined by the include_path parameter
      • They are in the directory defined by the K_PATH_FONTS constant

      + * @param string $family Family font. It can be either a name defined by AddFont() or one of the standard Type1 families (case insensitive):
      • times (Times-Roman)
      • timesb (Times-Bold)
      • timesi (Times-Italic)
      • timesbi (Times-BoldItalic)
      • helvetica (Helvetica)
      • helveticab (Helvetica-Bold)
      • helveticai (Helvetica-Oblique)
      • helveticabi (Helvetica-BoldOblique)
      • courier (Courier)
      • courierb (Courier-Bold)
      • courieri (Courier-Oblique)
      • courierbi (Courier-BoldOblique)
      • symbol (Symbol)
      • zapfdingbats (ZapfDingbats)
      It is also possible to pass an empty string. In that case, the current family is retained. + * @param string $style Font style. Possible values are (case insensitive):
      • empty string: regular
      • B: bold
      • I: italic
      • U: underline
      • D: line trough
      • O: overline
      or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats basic fonts or other fonts when not defined. + * @param float $size Font size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12 + * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces. + * @access public + * @since 1.0 + * @see AddFont(), SetFontSize() + */ + public function SetFont($family, $style='', $size=0, $fontfile='') { + //Select a font; size given in points + if ($size == 0) { + $size = $this->FontSizePt; + } + // try to add font (if not already added) + $fontdata = $this->AddFont($family, $style, $fontfile); + $this->FontFamily = $fontdata['family']; + $this->FontStyle = $fontdata['style']; + $this->CurrentFont = $this->getFontBuffer($fontdata['fontkey']); + $this->SetFontSize($size); + } + + /** + * Defines the size of the current font. + * @param float $size The size (in points) + * @access public + * @since 1.0 + * @see SetFont() + */ + public function SetFontSize($size) { + //Set font size in points + $this->FontSizePt = $size; + $this->FontSize = $size / $this->k; + if (isset($this->CurrentFont['desc']['Ascent']) AND ($this->CurrentFont['desc']['Ascent'] > 0)) { + $this->FontAscent = $this->CurrentFont['desc']['Ascent'] * $this->FontSize / 1000; + } else { + $this->FontAscent = 0.85 * $this->FontSize; + } + if (isset($this->CurrentFont['desc']['Descent']) AND ($this->CurrentFont['desc']['Descent'] <= 0)) { + $this->FontDescent = - $this->CurrentFont['desc']['Descent'] * $this->FontSize / 1000; + } else { + $this->FontDescent = 0.15 * $this->FontSize; + } + if (($this->page > 0) AND (isset($this->CurrentFont['i']))) { + $this->_out(sprintf('BT /F%d %.2F Tf ET', $this->CurrentFont['i'], $this->FontSizePt)); + } + } + + /** + * Return the font descent value + * @param string $font font name + * @param string $style font style + * @param float $size The size (in points) + * @return int font descent + * @access public + * @since 4.9.003 (2010-03-30) + */ + public function getFontDescent($font, $style='', $size=0) { + //Set font size in points + $sizek = $size / $this->k; + $fontdata = $this->AddFont($font, $style); + if (isset($fontdata['desc']['Descent']) AND ($fontdata['desc']['Descent'] <= 0)) { + $descent = - $fontdata['desc']['Descent'] * $sizek / 1000; + } else { + $descent = 0.15 * $sizek; + } + return $descent; + } + + /** + * Return the font ascent value + * @param string $font font name + * @param string $style font style + * @param float $size The size (in points) + * @return int font ascent + * @access public + * @since 4.9.003 (2010-03-30) + */ + public function getFontAscent($font, $style='', $size=0) { + //Set font size in points + $sizek = $size / $this->k; + $fontdata = $this->AddFont($font, $style); + if (isset($fontdata['desc']['Ascent']) AND ($fontdata['desc']['Ascent'] > 0)) { + $ascent = $fontdata['desc']['Ascent'] * $sizek / 1000; + } else { + $ascent = 0.85 * $sizek; + } + return $ascent; + } + + /** + * Defines the default monospaced font. + * @param string $font Font name. + * @access public + * @since 4.5.025 + */ + public function SetDefaultMonospacedFont($font) { + $this->default_monospaced_font = $font; + } + + /** + * Creates a new internal link and returns its identifier. An internal link is a clickable area which directs to another place within the document.
      + * The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is defined with SetLink(). + * @access public + * @since 1.5 + * @see Cell(), Write(), Image(), Link(), SetLink() + */ + public function AddLink() { + //Create a new internal link + $n = count($this->links) + 1; + $this->links[$n] = array(0, 0); + return $n; + } + + /** + * Defines the page and position a link points to. + * @param int $link The link identifier returned by AddLink() + * @param float $y Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page) + * @param int $page Number of target page; -1 indicates the current page. This is the default value + * @access public + * @since 1.5 + * @see AddLink() + */ + public function SetLink($link, $y=0, $page=-1) { + if ($y == -1) { + $y = $this->y; + } + if ($page == -1) { + $page = $this->page; + } + $this->links[$link] = array($page, $y); + } + + /** + * Puts a link on a rectangular area of the page. + * Text or image links are generally put via Cell(), Write() or Image(), but this method can be useful for instance to define a clickable area inside an image. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param float $w Width of the rectangle + * @param float $h Height of the rectangle + * @param mixed $link URL or identifier returned by AddLink() + * @param int $spaces number of spaces on the text to link + * @access public + * @since 1.5 + * @see AddLink(), Annotation(), Cell(), Write(), Image() + */ + public function Link($x, $y, $w, $h, $link, $spaces=0) { + $this->Annotation($x, $y, $w, $h, $link, array('Subtype'=>'Link'), $spaces); + } + + /** + * Puts a markup annotation on a rectangular area of the page. + * !!!!THE ANNOTATION SUPPORT IS NOT YET FULLY IMPLEMENTED !!!! + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param float $w Width of the rectangle + * @param float $h Height of the rectangle + * @param string $text annotation text or alternate content + * @param array $opt array of options (see section 8.4 of PDF reference 1.7). + * @param int $spaces number of spaces on the text to link + * @access public + * @since 4.0.018 (2008-08-06) + */ + public function Annotation($x, $y, $w, $h, $text, $opt=array('Subtype'=>'Text'), $spaces=0) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // recalculate coordinates to account for graphic transformations + if (isset($this->transfmatrix)) { + for ($i=$this->transfmatrix_key; $i > 0; --$i) { + $maxid = count($this->transfmatrix[$i]) - 1; + for ($j=$maxid; $j >= 0; --$j) { + $ctm = $this->transfmatrix[$i][$j]; + if (isset($ctm['a'])) { + $x = $x * $this->k; + $y = ($this->h - $y) * $this->k; + $w = $w * $this->k; + $h = $h * $this->k; + // top left + $xt = $x; + $yt = $y; + $x1 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y1 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // top right + $xt = $x + $w; + $yt = $y; + $x2 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y2 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // bottom left + $xt = $x; + $yt = $y - $h; + $x3 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y3 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // bottom right + $xt = $x + $w; + $yt = $y - $h; + $x4 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y4 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // new coordinates (rectangle area) + $x = min($x1, $x2, $x3, $x4); + $y = max($y1, $y2, $y3, $y4); + $w = (max($x1, $x2, $x3, $x4) - $x) / $this->k; + $h = ($y - min($y1, $y2, $y3, $y4)) / $this->k; + $x = $x / $this->k; + $y = $this->h - ($y / $this->k); + } + } + } + } + if ($this->page <= 0) { + $page = 1; + } else { + $page = $this->page; + } + if (!isset($this->PageAnnots[$page])) { + $this->PageAnnots[$page] = array(); + } + $this->PageAnnots[$page][] = array('x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces); + if ((($opt['Subtype'] == 'FileAttachment') OR ($opt['Subtype'] == 'Sound')) AND (!$this->empty_string($opt['FS'])) AND file_exists($opt['FS']) AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) { + $this->embeddedfiles[basename($opt['FS'])] = array('file' => $opt['FS'], 'n' => (count($this->embeddedfiles) + $this->embedded_start_obj_id)); + } + // Add widgets annotation's icons + if (isset($opt['mk']['i']) AND file_exists($opt['mk']['i'])) { + $this->Image($opt['mk']['i'], '', '', 10, 10, '', '', '', false, 300, '', false, false, 0, false, true); + } + if (isset($opt['mk']['ri']) AND file_exists($opt['mk']['ri'])) { + $this->Image($opt['mk']['ri'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true); + } + if (isset($opt['mk']['ix']) AND file_exists($opt['mk']['ix'])) { + $this->Image($opt['mk']['ix'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true); + } + ++$this->annot_obj_id; + } + + /** + * Embedd the attached files. + * @since 4.4.000 (2008-12-07) + * @access protected + * @see Annotation() + */ + protected function _putEmbeddedFiles() { + reset($this->embeddedfiles); + foreach ($this->embeddedfiles as $filename => $filedata) { + $data = file_get_contents($filedata['file']); + $filter = ''; + if ($this->compress) { + $data = gzcompress($data); + $filter = ' /Filter /FlateDecode'; + } + $this->offsets[$filedata['n']] = $this->bufferlen; + $out = $filedata['n'].' 0 obj'; + $out .= ' <>'; + $out .= ' '.$this->_getstream($data, $filedata['n']); + $out .= ' endobj'; + $this->_out($out); + } + } + + /** + * Prints a text cell at the specified position. + * The origin is on the left of the first charcter, on the baseline. + * This method allows to place a string precisely on the page. + * @param float $x Abscissa of the cell origin + * @param float $y Ordinate of the cell origin + * @param string $txt String to print + * @param int $fstroke outline size in user units (false = disable) + * @param boolean $fclip if true activate clipping mode (you must call StartTransform() before this function and StopTransform() to stop the clipping tranformation). + * @param boolean $ffill if true fills the text + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:
      • 0: no border (default)
      • 1: frame
      or a string containing some or all of the following characters (in any order):
      • L: left
      • T: top
      • R: right
      • B: bottom
      + * @param int $ln Indicates where the current position should go after the call. Possible values are:
      • 0: to the right (or left for RTL languages)
      • 1: to the beginning of the next line
      • 2: below
      Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param string $align Allows to center or align the text. Possible values are:
      • L or empty string: left align (default value)
      • C: center
      • R: right align
      • J: justify
      + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param mixed $link URL or identifier returned by AddLink(). + * @param int $stretch stretch carachter mode:
      • 0 = disabled
      • 1 = horizontal scaling only if necessary
      • 2 = forced horizontal scaling
      • 3 = character spacing only if necessary
      • 4 = forced character spacing
      + * @param boolean $ignore_min_height if true ignore automatic minimum height value. + * @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:
      • T : cell top
      • A : font top
      • L : font baseline
      • D : font bottom
      • B : cell bottom
      + * @param string $valign text vertical alignment inside the cell. Possible values are:
      • T : top
      • C : center
      • B : bottom
      + * @param boolean $rtloff if true uses the page top-left corner as origin of axis for $x and $y initial position. + * @access public + * @since 1.0 + * @see Cell(), Write(), MultiCell(), WriteHTML(), WriteHTMLCell() + */ + public function Text($x, $y, $txt, $fstroke=false, $fclip=false, $ffill=true, $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M', $rtloff=false) { + $textrendermode = $this->textrendermode; + $textstrokewidth = $this->textstrokewidth; + $this->setTextRenderingMode($fstroke, $ffill, $fclip); + $this->SetXY($x, $y, $rtloff); + $this->Cell(0, 0, $txt, $border, $ln, $align, $fill, $link, $stretch, $ignore_min_height, $calign, $valign); + // restore previous rendering mode + $this->textrendermode = $textrendermode; + $this->textstrokewidth = $textstrokewidth; + } + + /** + * Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value. + * The default implementation returns a value according to the mode selected by SetAutoPageBreak().
      + * This method is called automatically and should not be called directly by the application. + * @return boolean + * @access public + * @since 1.4 + * @see SetAutoPageBreak() + */ + public function AcceptPageBreak() { + if ($this->num_columns > 1) { + // multi column mode + if($this->current_column < ($this->num_columns - 1)) { + // go to next column + $this->selectColumn($this->current_column + 1); + } else { + // add a new page + $this->AddPage(); + // set first column + $this->selectColumn(0); + } + // avoid page breaking from checkPageBreak() + return false; + } + return $this->AutoPageBreak; + } + + /** + * Add page if needed. + * @param float $h Cell height. Default value: 0. + * @param mixed $y starting y position, leave empty for current position. + * @param boolean $addpage if true add a page, otherwise only return the true/false state + * @return boolean true in case of page break, false otherwise. + * @since 3.2.000 (2008-07-01) + * @access protected + */ + protected function checkPageBreak($h=0, $y='', $addpage=true) { + if ($this->empty_string($y)) { + $y = $this->y; + } + if ((($y + $h) > $this->PageBreakTrigger) AND (!$this->InFooter) AND ($this->AcceptPageBreak())) { + if ($addpage) { + //Automatic page break + $x = $this->x; + $this->AddPage($this->CurOrientation); + $this->y = $this->tMargin; + $oldpage = $this->page - 1; + if ($this->rtl) { + if ($this->pagedim[$this->page]['orm'] != $this->pagedim[$oldpage]['orm']) { + $this->x = $x - ($this->pagedim[$this->page]['orm'] - $this->pagedim[$oldpage]['orm']); + } else { + $this->x = $x; + } + } else { + if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) { + $this->x = $x + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$oldpage]['olm']); + } else { + $this->x = $x; + } + } + } + return true; + } + return false; + } + + /** + * Prints a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
      + * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + * @param float $w Cell width. If 0, the cell extends up to the right margin. + * @param float $h Cell height. Default value: 0. + * @param string $txt String to print. Default value: empty string. + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:
      • 0: no border (default)
      • 1: frame
      or a string containing some or all of the following characters (in any order):
      • L: left
      • T: top
      • R: right
      • B: bottom
      + * @param int $ln Indicates where the current position should go after the call. Possible values are:
      • 0: to the right (or left for RTL languages)
      • 1: to the beginning of the next line
      • 2: below
      + Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param string $align Allows to center or align the text. Possible values are:
      • L or empty string: left align (default value)
      • C: center
      • R: right align
      • J: justify
      + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param mixed $link URL or identifier returned by AddLink(). + * @param int $stretch stretch carachter mode:
      • 0 = disabled
      • 1 = horizontal scaling only if necessary
      • 2 = forced horizontal scaling
      • 3 = character spacing only if necessary
      • 4 = forced character spacing
      + * @param boolean $ignore_min_height if true ignore automatic minimum height value. + * @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:
      • T : cell top
      • C : center
      • B : cell bottom
      • A : font top
      • L : font baseline
      • D : font bottom
      + * @param string $valign text vertical alignment inside the cell. Possible values are:
      • T : top
      • C : center
      • B : bottom
      + * @access public + * @since 1.0 + * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak() + */ + public function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') { + if (!$ignore_min_height) { + $min_cell_height = $this->FontSize * $this->cell_height_ratio; + if ($h < $min_cell_height) { + $h = $min_cell_height; + } + } + $this->checkPageBreak($h); + $this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch, $ignore_min_height, $calign, $valign)); + } + + /** + * Removes SHY characters from text. + * @param string $txt input string + * @return string without SHY characters. + * @access public + * @since (4.5.019) 2009-02-28 + */ + public function removeSHY($txt='') { + /* + * Unicode Data + * Name : SOFT HYPHEN, commonly abbreviated as SHY + * HTML Entity (decimal): ­ + * HTML Entity (hex): ­ + * HTML Entity (named): ­ + * How to type in Microsoft Windows: [Alt +00AD] or [Alt 0173] + * UTF-8 (hex): 0xC2 0xAD (c2ad) + * UTF-8 character: chr(194).chr(173) + */ + $txt = preg_replace('/([\\xc2]{1}[\\xad]{1})/', '', $txt); + if (!$this->isunicode) { + $txt = preg_replace('/([\\xad]{1})/', '', $txt); + } + return $txt; + } + + /** + * Returns the PDF string code to print a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
      + * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + * @param float $w Cell width. If 0, the cell extends up to the right margin. + * @param float $h Cell height. Default value: 0. + * @param string $txt String to print. Default value: empty string. + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:
      • 0: no border (default)
      • 1: frame
      or a string containing some or all of the following characters (in any order):
      • L: left
      • T: top
      • R: right
      • B: bottom
      + * @param int $ln Indicates where the current position should go after the call. Possible values are:
      • 0: to the right (or left for RTL languages)
      • 1: to the beginning of the next line
      • 2: below
      Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param string $align Allows to center or align the text. Possible values are:
      • L or empty string: left align (default value)
      • C: center
      • R: right align
      • J: justify
      + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param mixed $link URL or identifier returned by AddLink(). + * @param int $stretch stretch carachter mode:
      • 0 = disabled
      • 1 = horizontal scaling only if necessary
      • 2 = forced horizontal scaling
      • 3 = character spacing only if necessary
      • 4 = forced character spacing
      + * @param boolean $ignore_min_height if true ignore automatic minimum height value. + * @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:
      • T : cell top
      • C : center
      • B : cell bottom
      • A : font top
      • L : font baseline
      • D : font bottom
      + * @param string $valign text vertical alignment inside the cell. Possible values are:
      • T : top
      • C : center
      • B : bottom
      + * @access protected + * @since 1.0 + * @see Cell() + */ + protected function getCellCode($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') { + $txt = $this->removeSHY($txt); + $rs = ''; //string to be returned + if (!$ignore_min_height) { + $min_cell_height = $this->FontSize * $this->cell_height_ratio; + if ($h < $min_cell_height) { + $h = $min_cell_height; + } + } + $k = $this->k; + $x = $this->x; + $y = $this->y; + // cell vertical alignment + switch ($calign) { + case 'A': { + // font top + switch ($valign) { + case 'T': { + // top + $y -= ($this->LineWidth / 2); + break; + } + case 'B': { + // bottom + $y -= ($h - $this->FontAscent - $this->FontDescent - ($this->LineWidth / 2)); + break; + } + default: + case 'M': { + // center + $y -= (($h - $this->FontAscent - $this->FontDescent) / 2); + break; + } + } + break; + } + case 'L': { + // font baseline + switch ($valign) { + case 'T': { + // top + $y -= ($this->FontAscent + ($this->LineWidth / 2)); + break; + } + case 'B': { + // bottom + $y -= ($h - $this->FontDescent - ($this->LineWidth / 2)); + break; + } + default: + case 'M': { + // center + $y -= (($h + $this->FontAscent - $this->FontDescent) / 2); + break; + } + } + break; + } + case 'D': { + // font bottom + switch ($valign) { + case 'T': { + // top + $y -= ($this->FontAscent + $this->FontDescent + ($this->LineWidth / 2)); + break; + } + case 'B': { + // bottom + $y -= ($h - ($this->LineWidth / 2)); + break; + } + default: + case 'M': { + // center + $y -= (($h + $this->FontAscent + $this->FontDescent) / 2); + break; + } + } + break; + } + case 'B': { + // cell bottom + $y -= $h; + break; + } + case 'C': { + // cell center + $y -= ($h / 2); + break; + } + default: + case 'T': { + // cell top + break; + } + } + // text vertical alignment + switch ($valign) { + case 'T': { + // top + $basefonty = $y + $this->FontAscent + ($this->LineWidth / 2); + break; + } + case 'B': { + // bottom + $basefonty = $y + $h - $this->FontDescent - ($this->LineWidth / 2); + break; + } + default: + case 'M': { + // center + $basefonty = $y + (($h + $this->FontAscent - $this->FontDescent) / 2); + break; + } + } + if ($this->empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $x; + } + } + $s = ''; + // fill and borders + if (($fill == 1) OR ($border == 1)) { + if ($fill == 1) { + $op = ($border == 1) ? 'B' : 'f'; + } else { + $op = 'S'; + } + if ($this->rtl) { + $xk = (($this->x - $w) * $k); + } else { + $xk = ($this->x * $k); + } + $s .= sprintf('%.2F %.2F %.2F %.2F re %s ', $xk, (($this->h - $y) * $k), ($w * $k), (-$h * $k), $op); + } + if (is_string($border)) { + $lm = ($this->LineWidth / 2); + if (strpos($border,'L') !== false) { + if ($this->rtl) { + $xk = ($x - $w) * $k; + } else { + $xk = $x * $k; + } + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - $y + $lm) * $k), $xk, (($this->h - ($y + $h + $lm)) * $k)); + } + if (strpos($border,'T') !== false) { + if ($this->rtl) { + $xk = ($x - $w + $lm) * $k; + $xwk = ($x - $lm) * $k; + } else { + $xk = ($x - $lm) * $k; + $xwk = ($x + $w + $lm) * $k; + } + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - $y) * $k), $xwk, (($this->h - $y) * $k)); + } + if (strpos($border,'R') !== false) { + if ($this->rtl) { + $xk = $x * $k; + } else { + $xk = ($x + $w) * $k; + } + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - $y + $lm) * $k), $xk, (($this->h - ($y + $h + $lm))* $k)); + } + if (strpos($border,'B') !== false) { + if ($this->rtl) { + $xk = ($x - $w + $lm) * $k; + $xwk = ($x - $lm) * $k; + } else { + $xk = ($x - $lm) * $k; + $xwk = ($x + $w + $lm) * $k; + } + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - ($y + $h)) * $k), $xwk, (($this->h - ($y + $h)) * $k)); + } + } + if ($txt != '') { + $txt2 = $txt; + if ($this->isunicode) { + if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) { + $txt2 = $this->UTF8ToLatin1($txt2); + } else { + $unicode = $this->UTF8StringToArray($txt); // array of UTF-8 unicode values + $unicode = $this->utf8Bidi($unicode, '', $this->tmprtl); + if (defined('K_THAI_TOPCHARS') AND (K_THAI_TOPCHARS == true)) { + // ---- Fix for bug #2977340 "Incorrect Thai characters position arrangement" ---- + // NOTE: this doesn't work with HTML justification + // Symbols that could overlap on the font top (only works in LTR) + $topchar = array(3611, 3613, 3615, 3650, 3651, 3652); // chars that extends on top + $topsym = array(3633, 3636, 3637, 3638, 3639, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662); // symbols with top position + $numchars = count($unicode); // number of chars + $unik = 0; + $uniblock = array(); + $uniblock[$unik] = array(); + $uniblock[$unik][] = $unicode[0]; + // resolve overlapping conflicts by splitting the string in several parts + for ($i = 1; $i < $numchars; ++$i) { + // check if symbols overlaps at top + if (in_array($unicode[$i], $topsym) AND (in_array($unicode[($i - 1)], $topsym) OR in_array($unicode[($i - 1)], $topchar))) { + // move symbols to another array + ++$unik; + $uniblock[$unik] = array(); + $uniblock[$unik][] = $unicode[$i]; + ++$unik; + $uniblock[$unik] = array(); + $unicode[$i] = 8203; // Unicode Character 'ZERO WIDTH SPACE' (U+200B) + } else { + $uniblock[$unik][] = $unicode[$i]; + } + } + // ---- END OF Fix for bug #2977340 + } + $txt2 = $this->arrUTF8ToUTF16BE($unicode, false); + } + } + $txt2 = $this->_escape($txt2); + // text length + $txwidth = $this->GetStringWidth($txt); + $width = $txwidth; + // ratio between cell length and text length + if ($width <= 0) { + $ratio = 1; + } else { + $ratio = ($w - (2 * $this->cMargin)) / $width; + } + // stretch text if required + if (($stretch > 0) AND (($ratio < 1) OR (($ratio > 1) AND (($stretch % 2) == 0)))) { + if ($stretch > 2) { + // spacing + //Calculate character spacing in points + $char_space = (($w - $width - (2 * $this->cMargin)) * $this->k) / max($this->GetNumChars($txt)-1,1); + //Set character spacing + $rs .= sprintf('BT %.2F Tc ET ', $char_space); + } else { + // scaling + //Calculate horizontal scaling + $horiz_scale = $ratio * 100.0; + //Set horizontal scaling + $rs .= sprintf('BT %.2F Tz ET ', $horiz_scale); + } + $align = ''; + $width = $w - (2 * $this->cMargin); + } else { + $stretch == 0; + } + if ($this->ColorFlag) { + $s .= 'q '.$this->TextColor.' '; + } + // rendering mode + $s .= sprintf('BT %d Tr %.2F w ET ', $this->textrendermode, $this->textstrokewidth); + // count number of spaces + $ns = substr_count($txt, ' '); + // Justification + $spacewidth = 0; + if (($align == 'J') AND ($ns > 0)) { + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + // get string width without spaces + $width = $this->GetStringWidth(str_replace(' ', '', $txt)); + // calculate average space width + $spacewidth = -1000 * ($w - $width - (2 * $this->cMargin)) / ($ns?$ns:1) / $this->FontSize; + // set word position to be used with TJ operator + $txt2 = str_replace(chr(0).chr(32), ') '.sprintf('%.3F', $spacewidth).' (', $txt2); + $unicode_justification = true; + } else { + // get string width + $width = $txwidth; + $spacewidth = (($w - $width - (2 * $this->cMargin)) / ($ns?$ns:1)) * $this->k; + // set word spacing + $rs .= sprintf('BT %.3F Tw ET ', $spacewidth); + } + $width = $w - (2 * $this->cMargin); + } + // replace carriage return characters + $txt2 = str_replace("\r", ' ', $txt2); + switch ($align) { + case 'C': { + $dx = ($w - $width) / 2; + break; + } + case 'R': { + if ($this->rtl) { + $dx = $this->cMargin; + } else { + $dx = $w - $width - $this->cMargin; + } + break; + } + case 'L': { + if ($this->rtl) { + $dx = $w - $width - $this->cMargin; + } else { + $dx = $this->cMargin; + } + break; + } + case 'J': + default: { + $dx = $this->cMargin; + break; + } + } + if ($this->rtl) { + $xdx = $this->x - $dx - $width; + } else { + $xdx = $this->x + $dx; + } + $xdk = $xdx * $k; + // print text + $s .= sprintf('BT %.2F %.2F Td [(%s)] TJ ET', $xdk, (($this->h - $basefonty) * $k), $txt2); + if (isset($uniblock)) { + // print overlapping characters as separate string + $xshift = 0; // horizontal shift + $ty = (($this->h - $basefonty + (0.2 * $this->FontSize)) * $k); + $spw = (($w - $txwidth - (2 * $this->cMargin)) / ($ns?$ns:1)); + foreach ($uniblock as $uk => $uniarr) { + if (($uk % 2) == 0) { + // x space to skip + if ($spacewidth != 0) { + // justification shift + $xshift += (count(array_keys($uniarr, 32)) * $spw); + } + $xshift += $this->GetArrStringWidth($uniarr); // + shift justification + } else { + // character to print + $topchr = $this->arrUTF8ToUTF16BE($uniarr, false); + $topchr = $this->_escape($topchr); + $s .= sprintf(' BT %.2F %.2F Td [(%s)] TJ ET', ($xdk + ($xshift * $k)), $ty, $topchr); + } + } + } + if ($this->underline) { + $s .= ' '.$this->_dounderlinew($xdx, $basefonty, $width); + } + if ($this->linethrough) { + $s .= ' '.$this->_dolinethroughw($xdx, $basefonty, $width); + } + if ($this->overline) { + $s .= ' '.$this->_dooverlinew($xdx, $basefonty, $width); + } + if ($this->ColorFlag) { + $s .= ' Q'; + } + if ($link) { + $this->Link($xdx, $y + (($h - $this->FontSize)/2), $width, $this->FontSize, $link, $ns); + } + } + // output cell + if ($s) { + // output cell + $rs .= $s; + // reset text stretching + if ($stretch > 2) { + //Reset character horizontal spacing + $rs .= ' BT 0 Tc ET'; + } elseif ($stretch > 0) { + //Reset character horizontal scaling + $rs .= ' BT 100 Tz ET'; + } + } + // reset word spacing + if (!(($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) AND ($align == 'J')) { + $rs .= ' BT 0 Tw ET'; + } + $this->lasth = $h; + if ($ln > 0) { + //Go to the beginning of the next line + $this->y = $y + $h; + if ($ln == 1) { + if ($this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + } + } else { + // go left or right by case + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + $gstyles = ''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor."\n"; + $rs = $gstyles.$rs; + return $rs; + } + + /** + * This method allows printing text with line breaks. + * They can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the \n character). As many cells as necessary are output, one below the other.
      + * Text can be aligned, centered or justified. The cell block can be framed and the background painted. + * @param float $w Width of cells. If 0, they extend up to the right margin of the page. + * @param float $h Cell minimum height. The cell extends automatically if needed. + * @param string $txt String to print + * @param mixed $border Indicates if borders must be drawn around the cell block. The value can be either a number:
      • 0: no border (default)
      • 1: frame
      or a string containing some or all of the following characters (in any order):
      • L: left
      • T: top
      • R: right
      • B: bottom
      + * @param string $align Allows to center or align the text. Possible values are:
      • L or empty string: left align
      • C: center
      • R: right align
      • J: justification (default value when $ishtml=false)
      + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param int $ln Indicates where the current position should go after the call. Possible values are:
      • 0: to the right
      • 1: to the beginning of the next line [DEFAULT]
      • 2: below
      + * @param float $x x position in user units + * @param float $y y position in user units + * @param boolean $reseth if true reset the last cell height (default true). + * @param int $stretch stretch carachter mode:
      • 0 = disabled
      • 1 = horizontal scaling only if necessary
      • 2 = forced horizontal scaling
      • 3 = character spacing only if necessary
      • 4 = forced character spacing
      + * @param boolean $ishtml set to true if $txt is HTML content (default = false). + * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width. + * @param float $maxh maximum height. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. This feature works only when $ishtml=false. + * @return int Return the number of cells or 1 for html mode. + * @access public + * @since 1.3 + * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), Cell(), Write(), SetAutoPageBreak() + */ + public function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0) { + if ($this->empty_string($this->lasth) OR $reseth) { + //set row height + $this->lasth = $this->FontSize * $this->cell_height_ratio; + } + if (!$this->empty_string($y)) { + $this->SetY($y); + } else { + $y = $this->GetY(); + } + // check for page break + $this->checkPageBreak($h); + $y = $this->GetY(); + // get current page number + $startpage = $this->page; + if (!$this->empty_string($x)) { + $this->SetX($x); + } else { + $x = $this->GetX(); + } + if ($this->empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + } + // store original margin values + $lMargin = $this->lMargin; + $rMargin = $this->rMargin; + if ($this->rtl) { + $this->SetRightMargin($this->w - $this->x); + $this->SetLeftMargin($this->x - $w); + } else { + $this->SetLeftMargin($this->x); + $this->SetRightMargin($this->w - $this->x - $w); + } + $starty = $this->y; + if ($autopadding) { + // Adjust internal padding + if ($this->cMargin < ($this->LineWidth / 2)) { + $this->cMargin = ($this->LineWidth / 2); + } + // Add top space if needed + if (($this->lasth - $this->FontSize) < $this->LineWidth) { + $this->y += $this->LineWidth / 2; + } + // add top padding + $this->y += $this->cMargin; + } + if ($ishtml) { + // ******* Write HTML text + $this->writeHTML($txt, true, 0, $reseth, true, $align); + $nl = 1; + } else { + // ******* Write text + $nl = $this->Write($this->lasth, $txt, '', 0, $align, true, $stretch, false, true, $maxh); + } + if ($autopadding) { + // add bottom padding + $this->y += $this->cMargin; + // Add bottom space if needed + if (($this->lasth - $this->FontSize) < $this->LineWidth) { + $this->y += $this->LineWidth / 2; + } + } + // Get end-of-text Y position + $currentY = $this->y; + // get latest page number + $endpage = $this->page; + // check if a new page has been created + if ($endpage > $startpage) { + // design borders around HTML cells. + for ($page=$startpage; $page <= $endpage; ++$page) { + $this->setPage($page); + if ($page == $startpage) { + $this->y = $starty; // put cursor at the beginning of cell on the first page + $h = $this->getPageHeight() - $starty - $this->getBreakMargin(); + $cborder = $this->getBorderMode($border, $position='start'); + } elseif ($page == $endpage) { + $this->y = $this->tMargin; // put cursor at the beginning of last page + $h = $currentY - $this->tMargin; + $cborder = $this->getBorderMode($border, $position='end'); + } else { + $this->y = $this->tMargin; // put cursor at the beginning of the current page + $h = $this->getPageHeight() - $this->tMargin - $this->getBreakMargin(); + $cborder = $this->getBorderMode($border, $position='middle'); + } + $nx = $x; + // account for margin changes + if ($page > $startpage) { + if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) { + $nx = $x + ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']); + } elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) { + $nx = $x + ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']); + } + } + $this->SetX($nx); + $ccode = $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, false); + if ($cborder OR $fill) { + $pagebuff = $this->getPageBuffer($this->page); + $pstart = substr($pagebuff, 0, $this->intmrk[$this->page]); + $pend = substr($pagebuff, $this->intmrk[$this->page]); + $this->setPageBuffer($this->page, $pstart.$ccode."\n".$pend); + $this->intmrk[$this->page] += strlen($ccode."\n"); + } + } + } else { + $h = max($h, ($currentY - $y)); + // put cursor at the beginning of text + $this->SetY($y); + $this->SetX($x); + // design a cell around the text + $ccode = $this->getCellCode($w, $h, '', $border, 1, '', $fill, '', 0, true); + if ($border OR $fill) { + if (end($this->transfmrk[$this->page]) !== false) { + $pagemarkkey = key($this->transfmrk[$this->page]); + $pagemark = &$this->transfmrk[$this->page][$pagemarkkey]; + } elseif ($this->InFooter) { + $pagemark = &$this->footerpos[$this->page]; + } else { + $pagemark = &$this->intmrk[$this->page]; + } + $pagebuff = $this->getPageBuffer($this->page); + $pstart = substr($pagebuff, 0, $pagemark); + $pend = substr($pagebuff, $pagemark); + $this->setPageBuffer($this->page, $pstart.$ccode."\n".$pend); + $pagemark += strlen($ccode."\n"); + } + } + // Get end-of-cell Y position + $currentY = $this->GetY(); + // restore original margin values + $this->SetLeftMargin($lMargin); + $this->SetRightMargin($rMargin); + if ($ln > 0) { + //Go to the beginning of the next line + $this->SetY($currentY); + if ($ln == 2) { + $this->SetX($x + $w); + } + } else { + // go left or right by case + $this->setPage($startpage); + $this->y = $y; + $this->SetX($x + $w); + } + $this->setContentMark(); + return $nl; + } + + /** + * Get the border mode accounting for multicell position (opens bottom side of multicell crossing pages) + * @param mixed $border Indicates if borders must be drawn around the cell block. The value can be either a number:
      • 0: no border (default)
      • 1: frame
      or a string containing some or all of the following characters (in any order):
      • L: left
      • T: top
      • R: right
      • B: bottom
      + * @param string multicell position: 'start', 'middle', 'end' + * @return border mode + * @access protected + * @since 4.4.002 (2008-12-09) + */ + protected function getBorderMode($border, $position='start') { + if ((!$this->opencell) AND ($border == 1)) { + return 1; + } + $cborder = ''; + switch ($position) { + case 'start': { + if ($border == 1) { + $cborder = 'LTR'; + } else { + if (!(false === strpos($border, 'L'))) { + $cborder .= 'L'; + } + if (!(false === strpos($border, 'T'))) { + $cborder .= 'T'; + } + if (!(false === strpos($border, 'R'))) { + $cborder .= 'R'; + } + if ((!$this->opencell) AND (!(false === strpos($border, 'B')))) { + $cborder .= 'B'; + } + } + break; + } + case 'middle': { + if ($border == 1) { + $cborder = 'LR'; + } else { + if (!(false === strpos($border, 'L'))) { + $cborder .= 'L'; + } + if ((!$this->opencell) AND (!(false === strpos($border, 'T')))) { + $cborder .= 'T'; + } + if (!(false === strpos($border, 'R'))) { + $cborder .= 'R'; + } + if ((!$this->opencell) AND (!(false === strpos($border, 'B')))) { + $cborder .= 'B'; + } + } + break; + } + case 'end': { + if ($border == 1) { + $cborder = 'LRB'; + } else { + if (!(false === strpos($border, 'L'))) { + $cborder .= 'L'; + } + if ((!$this->opencell) AND (!(false === strpos($border, 'T')))) { + $cborder .= 'T'; + } + if (!(false === strpos($border, 'R'))) { + $cborder .= 'R'; + } + if (!(false === strpos($border, 'B'))) { + $cborder .= 'B'; + } + } + break; + } + default: { + $cborder = $border; + break; + } + } + return $cborder; + } + + /** + * This method returns the estimated number of lines required to print the text (not the real number just a quick estimation). + * If you want o know the exact number of lines you have to use the following technique: + *
      +		 *  // store current object
      +		 *  $pdf->startTransaction();
      +		 *  // get the number of lines for multicell
      +		 *  $lines = $pdf->MultiCell($w, 0, $txt, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
      +		 *  // restore previous object
      +		 *  $pdf = $pdf->rollbackTransaction();
      +		 * 
      + * @param string $txt text to print + * @param float $w width of cell. If 0, they extend up to the right margin of the page. + * @return int Return the estimated number of lines. + * @access public + * @since 4.5.011 + */ + public function getNumLines($txt, $w=0) { + $lines = 0; + if ($this->empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + } + // max column width + $wmax = $w - (2 * $this->cMargin); + // remove carriage returns + $txt = str_replace("\r", '', $txt); + // remove last newline (if any) + if (substr($txt,-1) == "\n") { + $txt = substr($txt, 0, -1); + } + // divide text in blocks + $txtblocks = explode("\n", $txt); + // for each text block + foreach ($txtblocks as $block) { + // estimate the number of lines + $lines += $this->empty_string($block) ? 1 : (ceil($this->GetStringWidth($block) / $wmax)); + } + // return the number of lines + return $lines; + } + + /** + * This method prints text from the current position.
      + * @param float $h Line height + * @param string $txt String to print + * @param mixed $link URL or identifier returned by AddLink() + * @param int $fill Indicates if the background must be painted (1) or transparent (0). Default value: 0. + * @param string $align Allows to center or align the text. Possible values are:
      • L or empty string: left align (default value)
      • C: center
      • R: right align
      • J: justify
      + * @param boolean $ln if true set cursor at the bottom of the line, otherwise set cursor at the top of the line. + * @param int $stretch stretch carachter mode:
      • 0 = disabled
      • 1 = horizontal scaling only if necessary
      • 2 = forced horizontal scaling
      • 3 = character spacing only if necessary
      • 4 = forced character spacing
      + * @param boolean $firstline if true prints only the first line and return the remaining string. + * @param boolean $firstblock if true the string is the starting of a line. + * @param float $maxh maximum height. The remaining unprinted text will be returned. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. + * @return mixed Return the number of cells or the remaining string if $firstline = true. + * @access public + * @since 1.5 + */ + public function Write($h, $txt, $link='', $fill=0, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0) { + if (strlen($txt) == 0) { + $txt = ' '; + } + // remove carriage returns + $s = str_replace("\r", '', $txt); + // check if string contains arabic text + if (preg_match(K_RE_PATTERN_ARABIC, $s)) { + $arabic = true; + } else { + $arabic = false; + } + // check if string contains RTL text + if ($arabic OR ($this->tmprtl == 'R') OR preg_match(K_RE_PATTERN_RTL, $txt)) { + $rtlmode = true; + } else { + $rtlmode = false; + } + // get a char width + $chrwidth = $this->GetCharWidth('.'); + // get array of unicode values + $chars = $this->UTF8StringToArray($s); + // get array of chars + $uchars = $this->UTF8ArrayToUniArray($chars); + // get the number of characters + $nb = count($chars); + // replacement for SHY character (minus symbol) + $shy_replacement = 45; + $shy_replacement_char = $this->unichr($shy_replacement); + // widht for SHY replacement + $shy_replacement_width = $this->GetCharWidth($shy_replacement); + // store current position + $prevx = $this->x; + $prevy = $this->y; + // max Y + $maxy = $this->y + $maxh - $h - (2 * $this->cMargin); + // calculate remaining line width ($w) + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + // max column width + $wmax = $w - (2 * $this->cMargin); + if ((!$firstline) AND (($chrwidth > $wmax) OR ($this->GetCharWidth($chars[0]) > $wmax))) { + // a single character do not fit on column + return ''; + } + $i = 0; // character position + $j = 0; // current starting position + $sep = -1; // position of the last blank space + $shy = false; // true if the last blank is a soft hypen (SHY) + $l = 0; // current string length + $nl = 0; //number of lines + $linebreak = false; + $pc = 0; // previous character + // for each character + while ($i < $nb) { + if (($maxh > 0) AND ($this->y >= $maxy) ) { + break; + } + //Get the current character + $c = $chars[$i]; + if ($c == 10) { // 10 = "\n" = new line + //Explicit line break + if ($align == 'J') { + if ($this->rtl) { + $talign = 'R'; + } else { + $talign = 'L'; + } + } else { + $talign = $align; + } + $tmpstr = $this->UniArrSubString($uchars, $j, $i); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($i - $j)); + if ($rtlmode) { + $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew; + } else { + $this->endlinex = $startx + $linew; + } + $w = $linew; + $tmpcmargin = $this->cMargin; + if ($maxh == 0) { + $this->cMargin = 0; + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = rtrim($tmpstr); + } + $this->Cell($w, $h, $tmpstr, 0, 1, $talign, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + $this->cMargin = $tmpcmargin; + return ($this->UniArrSubString($uchars, $i)); + } + ++$nl; + $j = $i + 1; + $l = 0; + $sep = -1; + $shy = false; + // account for margin changes + if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND (!$this->InFooter)) { + // AcceptPageBreak() may be overriden on extended classed to include margin changes + $this->AcceptPageBreak(); + } + $w = $this->getRemainingWidth(); + $wmax = $w - (2 * $this->cMargin); + } else { + // 160 is the non-breaking space. + // 173 is SHY (Soft Hypen). + // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator. + // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants. + // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between. + if (($c != 160) AND (($c == 173) OR preg_match($this->re_spaces, $this->unichr($c)))) { + // update last blank space position + $sep = $i; + // check if is a SHY + if ($c == 173) { + $shy = true; + if ($pc == 45) { + $tmp_shy_replacement_width = 0; + $tmp_shy_replacement_char = ''; + } else { + $tmp_shy_replacement_width = $shy_replacement_width; + $tmp_shy_replacement_char = $shy_replacement_char; + } + } else { + $shy = false; + } + } + // update string length + if ((($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) AND ($arabic)) { + // with bidirectional algorithm some chars may be changed affecting the line length + // *** very slow *** + $l = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, ($i - $j)), '', $this->tmprtl)); + } else { + $l += $this->GetCharWidth($c); + } + if (($l > $wmax) OR (($c == 173) AND (($l + $tmp_shy_replacement_width) > $wmax)) ) { + // we have reached the end of column + if ($sep == -1) { + // check if the line was already started + if (($this->rtl AND ($this->x <= ($this->w - $this->rMargin - $chrwidth))) + OR ((!$this->rtl) AND ($this->x >= ($this->lMargin + $chrwidth)))) { + // print a void cell and go to next line + $this->Cell($w, $h, '', 0, 1); + $linebreak = true; + if ($firstline) { + return ($this->UniArrSubString($uchars, $j)); + } + } else { + // truncate the word because do not fit on column + $tmpstr = $this->UniArrSubString($uchars, $j, $i); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($i - $j)); + if ($rtlmode) { + $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew; + } else { + $this->endlinex = $startx + $linew; + } + $w = $linew; + $tmpcmargin = $this->cMargin; + if ($maxh == 0) { + $this->cMargin = 0; + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = rtrim($tmpstr); + } + $this->Cell($w, $h, $tmpstr, 0, 1, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + $this->cMargin = $tmpcmargin; + return ($this->UniArrSubString($uchars, $i)); + } + $j = $i; + --$i; + } + } else { + // word wrapping + if ($this->rtl AND (!$firstblock)) { + $endspace = 1; + } else { + $endspace = 0; + } + if ($shy) { + // add hypen (minus symbol) at the end of the line + $shy_width = $tmp_shy_replacement_width; + if ($this->rtl) { + $shy_char_left = $tmp_shy_replacement_char; + $shy_char_right = ''; + } else { + $shy_char_left = ''; + $shy_char_right = $tmp_shy_replacement_char; + } + } else { + $shy_width = 0; + $shy_char_left = ''; + $shy_char_right = ''; + } + $tmpstr = $this->UniArrSubString($uchars, $j, ($sep + $endspace)); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, (($sep + $endspace) - $j)); + if ($rtlmode) { + $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew - $shy_width; + } else { + $this->endlinex = $startx + $linew + $shy_width; + } + $w = $linew; + $tmpcmargin = $this->cMargin; + if ($maxh == 0) { + $this->cMargin = 0; + } + } + // print the line + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = rtrim($tmpstr); + } + $this->Cell($w, $h, $shy_char_left.$tmpstr.$shy_char_right, 0, 1, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + // return the remaining text + $this->cMargin = $tmpcmargin; + return ($this->UniArrSubString($uchars, ($sep + $endspace))); + } + $i = $sep; + $sep = -1; + $shy = false; + $j = ($i+1); + } + // account for margin changes + if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND (!$this->InFooter)) { + // AcceptPageBreak() may be overriden on extended classed to include margin changes + $this->AcceptPageBreak(); + } + $w = $this->getRemainingWidth(); + $wmax = $w - (2 * $this->cMargin); + if ($linebreak) { + $linebreak = false; + } else { + ++$nl; + $l = 0; + } + } + } + // save last character + $pc = $c; + ++$i; + } // end while i < nb + // print last substring (if any) + if ($l > 0) { + switch ($align) { + case 'J': + case 'C': { + $w = $w; + break; + } + case 'L': { + if ($this->rtl) { + $w = $w; + } else { + $w = $l; + } + break; + } + case 'R': { + if ($this->rtl) { + $w = $l; + } else { + $w = $w; + } + break; + } + default: { + $w = $l; + break; + } + } + $tmpstr = $this->UniArrSubString($uchars, $j, $nb); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($nb - $j)); + if ($rtlmode) { + $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew; + } else { + $this->endlinex = $startx + $linew; + } + $w = $linew; + $tmpcmargin = $this->cMargin; + if ($maxh == 0) { + $this->cMargin = 0; + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = rtrim($tmpstr); + } + $this->Cell($w, $h, $tmpstr, 0, $ln, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + $this->cMargin = $tmpcmargin; + return ($this->UniArrSubString($uchars, $nb)); + } + ++$nl; + } + if ($firstline) { + return ''; + } + return $nl; + } + + /** + * Returns the remaining width between the current position and margins. + * @return int Return the remaining width + * @access protected + */ + protected function getRemainingWidth() { + if ($this->rtl) { + return ($this->x - $this->lMargin); + } else { + return ($this->w - $this->rMargin - $this->x); + } + } + + /** + * Extract a slice of the $strarr array and return it as string. + * @param string $strarr The input array of characters. + * @param int $start the starting element of $strarr. + * @param int $end first element that will not be returned. + * @return Return part of a string + * @access public + */ + public function UTF8ArrSubString($strarr, $start='', $end='') { + if (strlen($start) == 0) { + $start = 0; + } + if (strlen($end) == 0) { + $end = count($strarr); + } + $string = ''; + for ($i=$start; $i < $end; ++$i) { + $string .= $this->unichr($strarr[$i]); + } + return $string; + } + + /** + * Extract a slice of the $uniarr array and return it as string. + * @param string $uniarr The input array of characters. + * @param int $start the starting element of $strarr. + * @param int $end first element that will not be returned. + * @return Return part of a string + * @access public + * @since 4.5.037 (2009-04-07) + */ + public function UniArrSubString($uniarr, $start='', $end='') { + if (strlen($start) == 0) { + $start = 0; + } + if (strlen($end) == 0) { + $end = count($uniarr); + } + $string = ''; + for ($i=$start; $i < $end; ++$i) { + $string .= $uniarr[$i]; + } + return $string; + } + + /** + * Convert an array of UTF8 values to array of unicode characters + * @param string $ta The input array of UTF8 values. + * @return Return array of unicode characters + * @access public + * @since 4.5.037 (2009-04-07) + */ + public function UTF8ArrayToUniArray($ta) { + return array_map(array($this, 'unichr'), $ta); + } + + /** + * Returns the unicode caracter specified by UTF-8 value + * @param int $c UTF-8 value + * @return Returns the specified character. + * @author Miguel Perez, Nicola Asuni + * @access public + * @since 2.3.000 (2008-03-05) + */ + public function unichr($c) { + if (!$this->isunicode) { + return chr($c); + } elseif ($c <= 0x7F) { + // one byte + return chr($c); + } elseif ($c <= 0x7FF) { + // two bytes + return chr(0xC0 | $c >> 6).chr(0x80 | $c & 0x3F); + } elseif ($c <= 0xFFFF) { + // three bytes + return chr(0xE0 | $c >> 12).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F); + } elseif ($c <= 0x10FFFF) { + // four bytes + return chr(0xF0 | $c >> 18).chr(0x80 | $c >> 12 & 0x3F).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F); + } else { + return ''; + } + } + + /** + * Return the image type given the file name or array returned by getimagesize() function. + * @param string $imgfile image file name + * @param array $iminfo array of image information returned by getimagesize() function. + * @return string image type + * @since 4.8.017 (2009-11-27) + */ + public function getImageFileType($imgfile, $iminfo=array()) { + if (isset($iminfo['mime']) AND !empty($iminfo['mime'])) { + $mime = explode('/', $iminfo['mime']); + if ((count($mime) > 1) AND ($mime[0] == 'image') AND (!empty($mime[1]))) { + return trim($mime[1]); + } + } + $type = ''; + $fileinfo = pathinfo($imgfile); + if (isset($fileinfo['extension']) AND (!$this->empty_string($fileinfo['extension']))) { + $type = strtolower(trim($fileinfo['extension'])); + } + if ($type == 'jpg') { + $type = 'jpeg'; + } + return $type; + } + + /** + * Puts an image in the page. + * The upper-left corner must be given. + * The dimensions can be specified in different ways:
        + *
      • explicit width and height (expressed in user unit)
      • + *
      • one explicit dimension, the other being calculated automatically in order to keep the original proportions
      • + *
      • no explicit dimension, in which case the image is put at 72 dpi
      + * Supported formats are JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM; + * The format can be specified explicitly or inferred from the file extension.
      + * It is possible to put a link on the image.
      + * Remark: if an image is used several times, only one copy will be embedded in the file.
      + * @param string $file Name of the file containing the image. + * @param float $x Abscissa of the upper-left corner. + * @param float $y Ordinate of the upper-left corner. + * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension. + * @param mixed $link URL or identifier returned by AddLink(). + * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
      • T: top-right for LTR or top-left for RTL
      • M: middle-right for LTR or middle-left for RTL
      • B: bottom-right for LTR or bottom-left for RTL
      • N: next line
      + * @param mixed $resize If true resize (reduce) the image to fit $w and $h (requires GD or ImageMagick library); if false do not resize; if 2 force resize in all cases (upscaling and downscaling). + * @param int $dpi dot-per-inch resolution used on resize + * @param string $palign Allows to center or align the image on the current line. Possible values are:
      • L : left align
      • C : center
      • R : right align
      • '' : empty string : left for LTR or right for RTL
      + * @param boolean $ismask true if this image is a mask, false otherwise + * @param mixed $imgmask image object returned by this function or false + * @param mixed $border Indicates if borders must be drawn around the image. The value can be either a number:
      • 0: no border (default)
      • 1: frame
      or a string containing some or all of the following characters (in any order):
      • L: left
      • T: top
      • R: right
      • B: bottom
      + * @param boolean $fitbox If true scale image dimensions proportionally to fit within the ($w, $h) box. + * @param boolean $hidden if true do not display the image. + * @param boolean $fitonpage if true the image is resized to not exceed page dimensions. + * @return image information + * @access public + * @since 1.1 + */ + public function Image($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // get image dimensions + $imsize = @getimagesize($file); + if ($imsize === FALSE) { + // encode spaces on filename + $file = str_replace(' ', '%20', $file); + $imsize = @getimagesize($file); + if ($imsize === FALSE) { + if (($w > 0) AND ($h > 0)) { + $pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k; + $ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k; + $imsize = array($pw, $ph); + } else { + $this->Error('[Image] Unable to get image width and height: '.$file); + } + } + } + // get original image width and height in pixels + list($pixw, $pixh) = $imsize; + // calculate image width and height on document + if (($w <= 0) AND ($h <= 0)) { + // convert image size to document unit + $w = $this->pixelsToUnits($pixw); + $h = $this->pixelsToUnits($pixh); + } elseif ($w <= 0) { + $w = $h * $pixw / $pixh; + } elseif ($h <= 0) { + $h = $w * $pixh / $pixw; + } elseif ($fitbox AND ($w > 0) AND ($h > 0)) { + // scale image dimensions proportionally to fit within the ($w, $h) box + if ((($w * $pixh) / ($h * $pixw)) < 1) { + $h = $w * $pixh / $pixw; + } else { + $w = $h * $pixw / $pixh; + } + } + // Check whether we need a new page first as this does not fit + $prev_x = $this->x; + if ($this->checkPageBreak($h, $y)) { + $y = $this->y; + if ($this->rtl) { + $x += ($prev_x - $this->x); + } else { + $x += ($this->x - $prev_x); + } + } + // resize image to be contained on a single page + if ($fitonpage) { + $ratio_wh = $w / $h; + if (($y + $h) > $this->PageBreakTrigger) { + $h = $this->PageBreakTrigger - $y; + $w = $h * $ratio_wh; + } + if (($x + $w) > ($this->w - $this->rMargin)) { + $w = $this->w - $this->rMargin - $x; + $h = $w / $ratio_wh; + } + } + // calculate new minimum dimensions in pixels + $neww = round($w * $this->k * $dpi / $this->dpi); + $newh = round($h * $this->k * $dpi / $this->dpi); + // check if resize is necessary (resize is used only to reduce the image) + $newsize = ($neww * $newh); + $pixsize = ($pixw * $pixh); + if (intval($resize) == 2) { + $resize = true; + } elseif ($newsize >= $pixsize) { + $resize = false; + } + // check if image has been already added on document + $newimage = true; + if (in_array($file, $this->imagekeys)) { + $newimage = false; + // get existing image data + $info = $this->getImageBuffer($file); + // check if the newer image is larger + $oldsize = ($info['w'] * $info['h']); + if ((($oldsize < $newsize) AND ($resize)) OR (($oldsize < $pixsize) AND (!$resize))) { + $newimage = true; + } + } + if ($newimage) { + //First use of image, get info + if ($type == '') { + $type = $this->getImageFileType($file, $imsize); + } + $mqr = $this->get_mqr(); + $this->set_mqr(false); + // Specific image handlers + $mtd = '_parse'.$type; + // GD image handler function + $gdfunction = 'imagecreatefrom'.$type; + $info = false; + if ((method_exists($this, $mtd)) AND (!($resize AND function_exists($gdfunction)))) { + // TCPDF image functions + $info = $this->$mtd($file); + if ($info == 'pngalpha') { + return $this->ImagePngAlpha($file, $x, $y, $w, $h, 'PNG', $link, $align, $resize, $dpi, $palign); + } + } + if (!$info) { + if (function_exists($gdfunction)) { + // GD library + $img = $gdfunction($file); + if ($resize) { + $imgr = imagecreatetruecolor($neww, $newh); + if (($type == 'gif') OR ($type == 'png')) { + $imgr = $this->_setGDImageTransparency($imgr, $img); + } + imagecopyresampled($imgr, $img, 0, 0, 0, 0, $neww, $newh, $pixw, $pixh); + if (($type == 'gif') OR ($type == 'png')) { + $info = $this->_toPNG($imgr); + } else { + $info = $this->_toJPEG($imgr); + } + } else { + if (($type == 'gif') OR ($type == 'png')) { + $info = $this->_toPNG($img); + } else { + $info = $this->_toJPEG($img); + } + } + } elseif (extension_loaded('imagick')) { + // ImageMagick library + $img = new Imagick(); + if ($type == 'SVG') { + // get SBG file content + $svgimg = file_get_contents($file); + // get width and height + $regs = array(); + if (preg_match('/]*)>/si', $svgimg, $regs)) { + $tmp = array(); + if (preg_match('/[\s]+width[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $ow = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false) * $dpi / 72; + $svgimg = preg_replace('/[\s]+width[\s]*=[\s]*"[^"]*"/si', ' width="'.$ow.$this->pdfunit.'"', $svgimg); + } + $tmp = array(); + if (preg_match('/[\s]+height[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $oh = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false) * $dpi / 72; + $svgimg = preg_replace('/[\s]+height[\s]*=[\s]*"[^"]*"/si', ' height="'.$oh.$this->pdfunit.'"', $svgimg); + } + $tmp = array(); + if (!preg_match('/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si', $regs[1], $tmp)) { + $vbw = $ow * (72 / $dpi) * $this->imgscale * $this->k; + $vbh = $oh * (72 / $dpi) * $this->imgscale * $this->k; + $svgimg = preg_replace('/readImageBlob($svgimg); + } else { + $img->readImage($file); + } + if ($resize) { + $img->resizeImage($neww, $newh, 10, 1, false); + } + $img->setCompressionQuality($this->jpeg_quality); + $img->setImageFormat('jpeg'); + $tempname = tempnam(K_PATH_CACHE, 'jpg_'); + $img->writeImage($tempname); + $info = $this->_parsejpeg($tempname); + unlink($tempname); + $img->destroy(); + } else { + return; + } + } + if ($info === false) { + //If false, we cannot process image + return; + } + $this->set_mqr($mqr); + if ($ismask) { + // force grayscale + $info['cs'] = 'DeviceGray'; + } + $info['i'] = $this->numimages; + if (!in_array($file, $this->imagekeys)) { + ++$info['i']; + } + if ($imgmask !== false) { + $info['masked'] = $imgmask; + } + // add image to document + $this->setImageBuffer($file, $info); + } + // set alignment + $this->img_rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $this->w - $x - $w; + } + $this->img_rb_x = $ximg; + } else { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x; + } + $this->img_rb_x = $ximg + $w; + } + if ($ismask OR $hidden) { + // image is not displayed + return $info['i']; + } + $xkimg = $ximg * $this->k; + $this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q', ($w * $this->k), ($h * $this->k), $xkimg, (($this->h - ($y + $h)) * $this->k), $info['i'])); + if (!empty($border)) { + $bx = $x; + $by = $y; + $this->x = $ximg; + if ($this->rtl) { + $this->x += $w; + } + $this->y = $y; + $this->Cell($w, $h, '', $border, 0, '', 0, '', 0); + $this->x = $bx; + $this->y = $by; + } + if ($link) { + $this->Link($ximg, $y, $w, $h, $link, 0); + } + // set pointer to align the successive text/objects + switch($align) { + case 'T': { + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M': { + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B': { + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N': { + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + $this->endlinex = $this->img_rb_x; + return $info['i']; + } + + /** + * Sets the current active configuration setting of magic_quotes_runtime (if the set_magic_quotes_runtime function exist) + * @param boolean $mqr FALSE for off, TRUE for on. + * @since 4.6.025 (2009-08-17) + */ + public function set_mqr($mqr) { + if(!defined('PHP_VERSION_ID')) { + $version = PHP_VERSION; + define('PHP_VERSION_ID', (($version{0} * 10000) + ($version{2} * 100) + $version{4})); + } + if (PHP_VERSION_ID < 50300) { + @set_magic_quotes_runtime($mqr); + } + } + + /** + * Gets the current active configuration setting of magic_quotes_runtime (if the get_magic_quotes_runtime function exist) + * @return Returns 0 if magic quotes runtime is off or get_magic_quotes_runtime doesn't exist, 1 otherwise. + * @since 4.6.025 (2009-08-17) + */ + public function get_mqr() { + if(!defined('PHP_VERSION_ID')) { + $version = PHP_VERSION; + define('PHP_VERSION_ID', (($version{0} * 10000) + ($version{2} * 100) + $version{4})); + } + if (PHP_VERSION_ID < 50300) { + return @get_magic_quotes_runtime(); + } + return 0; + } + + /** + * Convert the loaded image to a JPEG and then return a structure for the PDF creator. + * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant. + * @param string $file Image file name. + * @param image $image Image object. + * return image JPEG image object. + * @access protected + */ + protected function _toJPEG($image) { + $tempname = tempnam(K_PATH_CACHE, 'jpg_'); + imagejpeg($image, $tempname, $this->jpeg_quality); + imagedestroy($image); + $retvars = $this->_parsejpeg($tempname); + // tidy up by removing temporary image + unlink($tempname); + return $retvars; + } + + /** + * Convert the loaded image to a PNG and then return a structure for the PDF creator. + * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant. + * @param string $file Image file name. + * @param image $image Image object. + * return image PNG image object. + * @access protected + * @since 4.9.016 (2010-04-20) + */ + protected function _toPNG($image) { + $tempname = tempnam(K_PATH_CACHE, 'jpg_'); + imagepng($image, $tempname); + imagedestroy($image); + $retvars = $this->_parsepng($tempname); + // tidy up by removing temporary image + unlink($tempname); + return $retvars; + } + + /** + * Set the transparency for the given GD image. + * @param image $new_image GD image object + * @param image $image GD image object. + * return GD image object. + * @access protected + * @since 4.9.016 (2010-04-20) + */ + protected function _setGDImageTransparency($new_image, $image) { + // transparency index + $tid = imagecolortransparent($image); + // default transparency color + $tcol = array('red' => 255, 'green' => 255, 'blue' => 255); + if ($tid >= 0) { + // get the colors for the transparency index + $tcol = imagecolorsforindex($image, $tid); + } + $tid = imagecolorallocate($new_image, $tcol['red'], $tcol['green'], $tcol['blue']); + imagefill($new_image, 0, 0, $tid); + imagecolortransparent($new_image, $tid); + return $new_image; + } + + /** + * Extract info from a JPEG file without using the GD library. + * @param string $file image file to parse + * @return array structure containing the image data + * @access protected + */ + protected function _parsejpeg($file) { + $a = getimagesize($file); + if (empty($a)) { + $this->Error('Missing or incorrect image file: '.$file); + } + if ($a[2] != 2) { + $this->Error('Not a JPEG file: '.$file); + } + if ((!isset($a['channels'])) OR ($a['channels'] == 3)) { + $colspace = 'DeviceRGB'; + } elseif ($a['channels'] == 4) { + $colspace = 'DeviceCMYK'; + } else { + $colspace = 'DeviceGray'; + } + $bpc = isset($a['bits']) ? $a['bits'] : 8; + $data = file_get_contents($file); + return array('w' => $a[0], 'h' => $a[1], 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'DCTDecode', 'data' => $data); + } + + /** + * Extract info from a PNG file without using the GD library. + * @param string $file image file to parse + * @return array structure containing the image data + * @access protected + */ + protected function _parsepng($file) { + $f = fopen($file, 'rb'); + if ($f === false) { + $this->Error('Can\'t open image file: '.$file); + } + //Check signature + if (fread($f, 8) != chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) { + $this->Error('Not a PNG file: '.$file); + } + //Read header chunk + fread($f, 4); + if (fread($f, 4) != 'IHDR') { + $this->Error('Incorrect PNG file: '.$file); + } + $w = $this->_freadint($f); + $h = $this->_freadint($f); + $bpc = ord(fread($f, 1)); + if ($bpc > 8) { + //$this->Error('16-bit depth not supported: '.$file); + fclose($f); + return false; + } + $ct = ord(fread($f, 1)); + if ($ct == 0) { + $colspace = 'DeviceGray'; + } elseif ($ct == 2) { + $colspace = 'DeviceRGB'; + } elseif ($ct == 3) { + $colspace = 'Indexed'; + } else { + // alpha channel + fclose($f); + return 'pngalpha'; + } + if (ord(fread($f, 1)) != 0) { + //$this->Error('Unknown compression method: '.$file); + fclose($f); + return false; + } + if (ord(fread($f, 1)) != 0) { + //$this->Error('Unknown filter method: '.$file); + fclose($f); + return false; + } + if (ord(fread($f, 1)) != 0) { + //$this->Error('Interlacing not supported: '.$file); + fclose($f); + return false; + } + fread($f, 4); + $parms = '/DecodeParms <>'; + //Scan chunks looking for palette, transparency and image data + $pal = ''; + $trns = ''; + $data = ''; + do { + $n = $this->_freadint($f); + $type = fread($f, 4); + if ($type == 'PLTE') { + //Read palette + $pal = $this->rfread($f, $n); + fread($f, 4); + } elseif ($type == 'tRNS') { + //Read transparency info + $t = $this->rfread($f, $n); + if ($ct == 0) { + $trns = array(ord(substr($t, 1, 1))); + } elseif ($ct == 2) { + $trns = array(ord(substr($t, 1, 1)), ord(substr($t, 3, 1)), ord(substr($t, 5, 1))); + } else { + $pos = strpos($t, chr(0)); + if ($pos !== false) { + $trns = array($pos); + } + } + fread($f, 4); + } elseif ($type == 'IDAT') { + //Read image data block + $data .= $this->rfread($f, $n); + fread($f, 4); + } elseif ($type == 'IEND') { + break; + } else { + $this->rfread($f, $n + 4); + } + } while ($n); + if (($colspace == 'Indexed') AND (empty($pal))) { + //$this->Error('Missing palette in '.$file); + fclose($f); + return false; + } + fclose($f); + return array('w' => $w, 'h' => $h, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'FlateDecode', 'parms' => $parms, 'pal' => $pal, 'trns' => $trns, 'data' => $data); + } + + /** + * Binary-safe and URL-safe file read. + * Reads up to length bytes from the file pointer referenced by handle. Reading stops as soon as one of the following conditions is met: length bytes have been read; EOF (end of file) is reached. + * @param resource $handle + * @param int $length + * @return Returns the read string or FALSE in case of error. + * @author Nicola Asuni + * @access protected + * @since 4.5.027 (2009-03-16) + */ + protected function rfread($handle, $length) { + $data = fread($handle, $length); + if ($data === false) { + return false; + } + $rest = $length - strlen($data); + if ($rest > 0) { + $data .= $this->rfread($handle, $rest); + } + return $data; + } + + /** + * Extract info from a PNG image with alpha channel using the GD library. + * @param string $file Name of the file containing the image. + * @param float $x Abscissa of the upper-left corner. + * @param float $y Ordinate of the upper-left corner. + * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension. + * @param mixed $link URL or identifier returned by AddLink(). + * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
      • T: top-right for LTR or top-left for RTL
      • M: middle-right for LTR or middle-left for RTL
      • B: bottom-right for LTR or bottom-left for RTL
      • N: next line
      + * @param boolean $resize If true resize (reduce) the image to fit $w and $h (requires GD library). + * @param int $dpi dot-per-inch resolution used on resize + * @param string $palign Allows to center or align the image on the current line. Possible values are:
      • L : left align
      • C : center
      • R : right align
      • '' : empty string : left for LTR or right for RTL
      + * @author Valentin Schmidt, Nicola Asuni + * @access protected + * @since 4.3.007 (2008-12-04) + * @see Image() + */ + protected function ImagePngAlpha($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='') { + // get image size + list($wpx, $hpx) = getimagesize($file); + // generate images + $img = imagecreatefrompng($file); + $imgalpha = imagecreate($wpx, $hpx); + // generate gray scale pallete + for ($c = 0; $c < 256; ++$c) { + ImageColorAllocate($imgalpha, $c, $c, $c); + } + // extract alpha channel + for ($xpx = 0; $xpx < $wpx; ++$xpx) { + for ($ypx = 0; $ypx < $hpx; ++$ypx) { + $colorindex = imagecolorat($img, $xpx, $ypx); + $col = imagecolorsforindex($img, $colorindex); + imagesetpixel($imgalpha, $xpx, $ypx, $this->getGDgamma((127 - $col['alpha']) * 255 / 127)); + } + } + // create temp alpha file + $tempfile_alpha = tempnam(K_PATH_CACHE, 'mska_'); + imagepng($imgalpha, $tempfile_alpha); + imagedestroy($imgalpha); + // extract image without alpha channel + $imgplain = imagecreatetruecolor($wpx, $hpx); + imagecopy($imgplain, $img, 0, 0, 0, 0, $wpx, $hpx); + // create temp image file + $tempfile_plain = tempnam(K_PATH_CACHE, 'mskp_'); + imagepng($imgplain, $tempfile_plain); + imagedestroy($imgplain); + // embed mask image + $imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false); + // embed image, masked with previously embedded mask + $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask); + // remove temp files + unlink($tempfile_alpha); + unlink($tempfile_plain); + } + + /** + * Correct the gamma value to be used with GD library + * @param float $v the gamma value to be corrected + * @access protected + * @since 4.3.007 (2008-12-04) + */ + protected function getGDgamma($v) { + return (pow(($v / 255), 2.2) * 255); + } + + /** + * Performs a line break. + * The current abscissa goes back to the left margin and the ordinate increases by the amount passed in parameter. + * @param float $h The height of the break. By default, the value equals the height of the last printed cell. + * @param boolean $cell if true add a cMargin to the x coordinate + * @access public + * @since 1.0 + * @see Cell() + */ + public function Ln($h='', $cell=false) { + if (($this->num_columns > 0) AND ($this->y == $this->columns[$this->current_column]['y']) AND isset($this->columns[$this->current_column]['x']) AND ($this->x == $this->columns[$this->current_column]['x'])) { + // revove vertical space from the top of the column + return; + } + if ($cell) { + $cellmargin = $this->cMargin; + } else { + $cellmargin = 0; + } + if ($this->rtl) { + $this->x = $this->w - $this->rMargin - $cellmargin; + } else { + $this->x = $this->lMargin + $cellmargin; + } + if (is_string($h)) { + $this->y += $this->lasth; + } else { + $this->y += $h; + } + $this->newline = true; + } + + /** + * Returns the relative X value of current position. + * The value is relative to the left border for LTR languages and to the right border for RTL languages. + * @return float + * @access public + * @since 1.2 + * @see SetX(), GetY(), SetY() + */ + public function GetX() { + //Get x position + if ($this->rtl) { + return ($this->w - $this->x); + } else { + return $this->x; + } + } + + /** + * Returns the absolute X value of current position. + * @return float + * @access public + * @since 1.2 + * @see SetX(), GetY(), SetY() + */ + public function GetAbsX() { + return $this->x; + } + + /** + * Returns the ordinate of the current position. + * @return float + * @access public + * @since 1.0 + * @see SetY(), GetX(), SetX() + */ + public function GetY() { + return $this->y; + } + + /** + * Defines the abscissa of the current position. + * If the passed value is negative, it is relative to the right of the page (or left if language is RTL). + * @param float $x The value of the abscissa. + * @param boolean $rtloff if true always uses the page top-left corner as origin of axis. + * @access public + * @since 1.2 + * @see GetX(), GetY(), SetY(), SetXY() + */ + public function SetX($x, $rtloff=false) { + if (!$rtloff AND $this->rtl) { + if ($x >= 0) { + $this->x = $this->w - $x; + } else { + $this->x = abs($x); + } + } else { + if ($x >= 0) { + $this->x = $x; + } else { + $this->x = $this->w + $x; + } + } + if ($this->x < 0) { + $this->x = 0; + } + if ($this->x > $this->w) { + $this->x = $this->w; + } + } + + /** + * Moves the current abscissa back to the left margin and sets the ordinate. + * If the passed value is negative, it is relative to the bottom of the page. + * @param float $y The value of the ordinate. + * @param bool $resetx if true (default) reset the X position. + * @param boolean $rtloff if true always uses the page top-left corner as origin of axis. + * @access public + * @since 1.0 + * @see GetX(), GetY(), SetY(), SetXY() + */ + public function SetY($y, $resetx=true, $rtloff=false) { + if ($resetx) { + //reset x + if (!$rtloff AND $this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + } + if ($y >= 0) { + $this->y = $y; + } else { + $this->y = $this->h + $y; + } + if ($this->y < 0) { + $this->y = 0; + } + if ($this->y > $this->h) { + $this->y = $this->h; + } + } + + /** + * Defines the abscissa and ordinate of the current position. + * If the passed values are negative, they are relative respectively to the right and bottom of the page. + * @param float $x The value of the abscissa. + * @param float $y The value of the ordinate. + * @param boolean $rtloff if true always uses the page top-left corner as origin of axis. + * @access public + * @since 1.2 + * @see SetX(), SetY() + */ + public function SetXY($x, $y, $rtloff=false) { + $this->SetY($y, false, $rtloff); + $this->SetX($x, $rtloff); + } + + /** + * Send the document to a given destination: string, local file or browser. + * In the last case, the plug-in may be used (if present) or a download ("Save as" dialog box) may be forced.
      + * The method first calls Close() if necessary to terminate the document. + * @param string $name The name of the file when saved. Note that special characters are removed and blanks characters are replaced with the underscore character. + * @param string $dest Destination where to send the document. It can take one of the following values:
      • I: send the file inline to the browser (default). The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF.
      • D: send to the browser and force a file download with the name given by name.
      • F: save to a local server file with the name given by name.
      • S: return the document as a string. name is ignored.
      • FI: equivalent to F + I option
      • FD: equivalent to F + D option
      + * @access public + * @since 1.0 + * @see Close() + */ + public function Output($name='doc.pdf', $dest='I') { + //Output PDF to some destination + //Finish document if necessary + $this->lastpage(); + if ($this->state < 3) { + $this->Close(); + } + //Normalize parameters + if (is_bool($dest)) { + $dest = $dest ? 'D' : 'F'; + } + $dest = strtoupper($dest); + if ($dest != 'F') { + $name = preg_replace('/[\s]+/', '_', $name); + $name = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $name); + } + if ($this->sign) { + // *** apply digital signature to the document *** + // get the document content + $pdfdoc = $this->getBuffer(); + // remove last newline + $pdfdoc = substr($pdfdoc, 0, -1); + // Remove the original buffer + if (isset($this->diskcache) AND $this->diskcache) { + // remove buffer file from cache + unlink($this->buffer); + } + unset($this->buffer); + // remove filler space + $byterange_string_len = strlen($this->byterange_string); + // define the ByteRange + $byte_range = array(); + $byte_range[0] = 0; + $byte_range[1] = strpos($pdfdoc, $this->byterange_string) + $byterange_string_len + 10; + $byte_range[2] = $byte_range[1] + $this->signature_max_length + 2; + $byte_range[3] = strlen($pdfdoc) - $byte_range[2]; + $pdfdoc = substr($pdfdoc, 0, $byte_range[1]).substr($pdfdoc, $byte_range[2]); + // replace the ByteRange + $byterange = sprintf('/ByteRange[0 %u %u %u]', $byte_range[1], $byte_range[2], $byte_range[3]); + $byterange .= str_repeat(' ', ($byterange_string_len - strlen($byterange))); + $pdfdoc = str_replace($this->byterange_string, $byterange, $pdfdoc); + // write the document to a temporary folder + $tempdoc = tempnam(K_PATH_CACHE, 'tmppdf_'); + $f = fopen($tempdoc, 'wb'); + if (!$f) { + $this->Error('Unable to create temporary file: '.$tempdoc); + } + $pdfdoc_length = strlen($pdfdoc); + fwrite($f, $pdfdoc, $pdfdoc_length); + fclose($f); + // get digital signature via openssl library + $tempsign = tempnam(K_PATH_CACHE, 'tmpsig_'); + if (empty($this->signature_data['extracerts'])) { + openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED); + } else { + openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED, $this->signature_data['extracerts']); + } + unlink($tempdoc); + // read signature + $signature = file_get_contents($tempsign, false, null, $pdfdoc_length); + unlink($tempsign); + // extract signature + $signature = substr($signature, (strpos($signature, "%%EOF\n\n------") + 13)); + $tmparr = explode("\n\n", $signature); + $signature = $tmparr[1]; + unset($tmparr); + // decode signature + $signature = base64_decode(trim($signature)); + // convert signature to hex + $signature = current(unpack('H*', $signature)); + $signature = str_pad($signature, $this->signature_max_length, '0'); + // Add signature to the document + $pdfdoc = substr($pdfdoc, 0, $byte_range[1]).'<'.$signature.'>'.substr($pdfdoc, ($byte_range[1])); + $this->diskcache = false; + $this->buffer = &$pdfdoc; + $this->bufferlen = strlen($pdfdoc); + } + switch($dest) { + case 'I': { + // Send PDF to the standard output + if (ob_get_contents()) { + $this->Error('Some data has already been output, can\'t send PDF file'); + } + if (php_sapi_name() != 'cli') { + //We send to a browser + header('Content-Type: application/pdf'); + if (headers_sent()) { + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + } + header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Length: '.$this->bufferlen); + header('Content-Disposition: inline; filename="'.basename($name).'";'); + } + echo $this->getBuffer(); + break; + } + case 'D': { + // Download PDF as file + if (ob_get_contents()) { + $this->Error('Some data has already been output, can\'t send PDF file'); + } + header('Content-Description: File Transfer'); + if (headers_sent()) { + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + } + header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + // force download dialog + header('Content-Type: application/force-download'); + header('Content-Type: application/octet-stream', false); + header('Content-Type: application/download', false); + header('Content-Type: application/pdf', false); + // use the Content-Disposition header to supply a recommended filename + header('Content-Disposition: attachment; filename="'.basename($name).'";'); + header('Content-Transfer-Encoding: binary'); + header('Content-Length: '.$this->bufferlen); + echo $this->getBuffer(); + break; + } + case 'F': + case 'FI': + case 'FD': { + // Save PDF to a local file + if ($this->diskcache) { + copy($this->buffer, $name); + } else { + $f = fopen($name, 'wb'); + if (!$f) { + $this->Error('Unable to create output file: '.$name); + } + fwrite($f, $this->getBuffer(), $this->bufferlen); + fclose($f); + } + if ($dest == 'FI') { + // send headers to browser + header('Content-Type: application/pdf'); + header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Length: '.filesize($name)); + header('Content-Disposition: inline; filename="'.basename($name).'";'); + // send document to the browser + echo file_get_contents($name); + } elseif ($dest == 'FD') { + // send headers to browser + if (ob_get_contents()) { + $this->Error('Some data has already been output, can\'t send PDF file'); + } + header('Content-Description: File Transfer'); + if (headers_sent()) { + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + } + header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + // force download dialog + header('Content-Type: application/force-download'); + header('Content-Type: application/octet-stream', false); + header('Content-Type: application/download', false); + header('Content-Type: application/pdf', false); + // use the Content-Disposition header to supply a recommended filename + header('Content-Disposition: attachment; filename="'.basename($name).'";'); + header('Content-Transfer-Encoding: binary'); + header('Content-Length: '.filesize($name)); + // send document to the browser + echo file_get_contents($name); + } + break; + } + case 'S': { + // Returns PDF as a string + return $this->getBuffer(); + } + default: { + $this->Error('Incorrect output destination: '.$dest); + } + } + return ''; + } + + /** + * Unset all class variables except the following critical variables: internal_encoding, state, bufferlen, buffer and diskcache. + * @param boolean $destroyall if true destroys all class variables, otherwise preserves critical variables. + * @param boolean $preserve_objcopy if true preserves the objcopy variable + * @access public + * @since 4.5.016 (2009-02-24) + */ + public function _destroy($destroyall=false, $preserve_objcopy=false) { + if ($destroyall AND isset($this->diskcache) AND $this->diskcache AND (!$preserve_objcopy) AND (!$this->empty_string($this->buffer))) { + // remove buffer file from cache + unlink($this->buffer); + } + foreach (array_keys(get_object_vars($this)) as $val) { + if ($destroyall OR ( + ($val != 'internal_encoding') + AND ($val != 'state') + AND ($val != 'bufferlen') + AND ($val != 'buffer') + AND ($val != 'diskcache') + AND ($val != 'sign') + AND ($val != 'signature_data') + AND ($val != 'signature_max_length') + AND ($val != 'byterange_string') + )) { + if ((!$preserve_objcopy OR ($val != 'objcopy')) AND isset($this->$val)) { + unset($this->$val); + } + } + } + } + + /** + * Check for locale-related bug + * @access protected + */ + protected function _dochecks() { + //Check for locale-related bug + if (1.1 == 1) { + $this->Error('Don\'t alter the locale before including class file'); + } + //Check for decimal separator + if (sprintf('%.1F', 1.0) != '1.0') { + setlocale(LC_NUMERIC, 'C'); + } + } + + /** + * Return fonts path + * @return string + * @access protected + */ + protected function _getfontpath() { + if (!defined('K_PATH_FONTS') AND is_dir(dirname(__FILE__).'/fonts')) { + define('K_PATH_FONTS', dirname(__FILE__).'/fonts/'); + } + return defined('K_PATH_FONTS') ? K_PATH_FONTS : ''; + } + + /** + * Output pages. + * @access protected + */ + protected function _putpages() { + $nb = $this->numpages; + if (!empty($this->AliasNbPages)) { + $nbs = $this->formatPageNumber($nb); + $nbu = $this->UTF8ToUTF16BE($nbs, false); // replacement for unicode font + $alias_a = $this->_escape($this->AliasNbPages); + $alias_au = $this->_escape('{'.$this->AliasNbPages.'}'); + if ($this->isunicode) { + $alias_b = $this->_escape($this->UTF8ToLatin1($this->AliasNbPages)); + $alias_bu = $this->_escape($this->UTF8ToLatin1('{'.$this->AliasNbPages.'}')); + $alias_c = $this->_escape($this->utf8StrRev($this->AliasNbPages, false, $this->tmprtl)); + $alias_cu = $this->_escape($this->utf8StrRev('{'.$this->AliasNbPages.'}', false, $this->tmprtl)); + } + } + if (!empty($this->AliasNumPage)) { + $alias_pa = $this->_escape($this->AliasNumPage); + $alias_pau = $this->_escape('{'.$this->AliasNumPage.'}'); + if ($this->isunicode) { + $alias_pb = $this->_escape($this->UTF8ToLatin1($this->AliasNumPage)); + $alias_pbu = $this->_escape($this->UTF8ToLatin1('{'.$this->AliasNumPage.'}')); + $alias_pc = $this->_escape($this->utf8StrRev($this->AliasNumPage, false, $this->tmprtl)); + $alias_pcu = $this->_escape($this->utf8StrRev('{'.$this->AliasNumPage.'}', false, $this->tmprtl)); + } + } + $pagegroupnum = 0; + $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; + for ($n=1; $n <= $nb; ++$n) { + $temppage = $this->getPageBuffer($n); + if (!empty($this->pagegroups)) { + if(isset($this->newpagegroup[$n])) { + $pagegroupnum = 0; + } + ++$pagegroupnum; + foreach ($this->pagegroups as $k => $v) { + // replace total pages group numbers + $vs = $this->formatPageNumber($v); + $vu = $this->UTF8ToUTF16BE($vs, false); + $alias_ga = $this->_escape($k); + $alias_gau = $this->_escape('{'.$k.'}'); + if ($this->isunicode) { + $alias_gb = $this->_escape($this->UTF8ToLatin1($k)); + $alias_gbu = $this->_escape($this->UTF8ToLatin1('{'.$k.'}')); + $alias_gc = $this->_escape($this->utf8StrRev($k, false, $this->tmprtl)); + $alias_gcu = $this->_escape($this->utf8StrRev('{'.$k.'}', false, $this->tmprtl)); + } + $temppage = str_replace($alias_gau, $vu, $temppage); + if ($this->isunicode) { + $temppage = str_replace($alias_gbu, $vu, $temppage); + $temppage = str_replace($alias_gcu, $vu, $temppage); + $temppage = str_replace($alias_gb, $vs, $temppage); + $temppage = str_replace($alias_gc, $vs, $temppage); + } + $temppage = str_replace($alias_ga, $vs, $temppage); + // replace page group numbers + $pvs = $this->formatPageNumber($pagegroupnum); + $pvu = $this->UTF8ToUTF16BE($pvs, false); + $pk = str_replace('{nb', '{pnb', $k); + $alias_pga = $this->_escape($pk); + $alias_pgau = $this->_escape('{'.$pk.'}'); + if ($this->isunicode) { + $alias_pgb = $this->_escape($this->UTF8ToLatin1($pk)); + $alias_pgbu = $this->_escape($this->UTF8ToLatin1('{'.$pk.'}')); + $alias_pgc = $this->_escape($this->utf8StrRev($pk, false, $this->tmprtl)); + $alias_pgcu = $this->_escape($this->utf8StrRev('{'.$pk.'}', false, $this->tmprtl)); + } + $temppage = str_replace($alias_pgau, $pvu, $temppage); + if ($this->isunicode) { + $temppage = str_replace($alias_pgbu, $pvu, $temppage); + $temppage = str_replace($alias_pgcu, $pvu, $temppage); + $temppage = str_replace($alias_pgb, $pvs, $temppage); + $temppage = str_replace($alias_pgc, $pvs, $temppage); + } + $temppage = str_replace($alias_pga, $pvs, $temppage); + } + } + if (!empty($this->AliasNbPages)) { + // replace total pages number + $temppage = str_replace($alias_au, $nbu, $temppage); + if ($this->isunicode) { + $temppage = str_replace($alias_bu, $nbu, $temppage); + $temppage = str_replace($alias_cu, $nbu, $temppage); + $temppage = str_replace($alias_b, $nbs, $temppage); + $temppage = str_replace($alias_c, $nbs, $temppage); + } + $temppage = str_replace($alias_a, $nbs, $temppage); + } + if (!empty($this->AliasNumPage)) { + // replace page number + $pnbs = $this->formatPageNumber($n); + $pnbu = $this->UTF8ToUTF16BE($pnbs, false); // replacement for unicode font + $temppage = str_replace($alias_pau, $pnbu, $temppage); + if ($this->isunicode) { + $temppage = str_replace($alias_pbu, $pnbu, $temppage); + $temppage = str_replace($alias_pcu, $pnbu, $temppage); + $temppage = str_replace($alias_pb, $pnbs, $temppage); + $temppage = str_replace($alias_pc, $pnbs, $temppage); + } + $temppage = str_replace($alias_pa, $pnbs, $temppage); + } + $temppage = str_replace($this->epsmarker, '', $temppage); + //Page + $this->page_obj_id[$n] = $this->_newobj(); + $out = '<pagedim[$n]['w'], $this->pagedim[$n]['h']); + $out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceRGB >>'; + $out .= ' /Resources 2 0 R'; + $this->_out($out); + $this->_putannotsrefs($n); + $this->_out('/Contents '.($this->n + 1).' 0 R>> endobj'); + //Page content + $p = ($this->compress) ? gzcompress($temppage) : $temppage; + $this->_newobj(); + $this->_out('<<'.$filter.'/Length '.strlen($p).'>> '.$this->_getstream($p).' endobj'); + if ($this->diskcache) { + // remove temporary files + unlink($this->pages[$n]); + } + } + //Pages root + $this->offsets[1] = $this->bufferlen; + $out = '1 0 obj <page_obj_id as $page_obj) { + $out .= ' '.$page_obj.' 0 R'; + } + $out .= ' ] /Count '.$nb.' >> endobj'; + $this->_out($out); + } + + /** + * Output references to page annotations + * @param int $n page number + * @access protected + * @author Nicola Asuni + * @since 4.7.000 (2008-08-29) + */ + protected function _putannotsrefs($n) { + if (!(isset($this->PageAnnots[$n]) OR ($this->sign AND isset($this->signature_data['cert_type'])))) { + return; + } + $out = '/Annots ['; + if (isset($this->PageAnnots[$n])) { + $num_annots = count($this->PageAnnots[$n]); + for ($i = 0; $i < $num_annots; ++$i) { + ++$this->curr_annot_obj_id; + if (!in_array($this->curr_annot_obj_id, $this->radio_groups)) { + $out .= ' '.$this->curr_annot_obj_id.' 0 R'; + } else { + ++$num_annots; + } + } + } + if (($n==1) AND $this->sign AND isset($this->signature_data['cert_type'])) { + // set reference for signature object + $out .= ' '.$this->sig_annot_ref; + } + $out .= ' ]'; + $this->_out($out); + } + + /** + * Output annotations objects for all pages. + * !!! THIS METHOD IS NOT YET COMPLETED !!! + * See section 12.5 of PDF 32000_2008 reference. + * @access protected + * @author Nicola Asuni + * @since 4.0.018 (2008-08-06) + */ + protected function _putannotsobjs() { + // reset object counter + $this->annot_obj_id = $this->annots_start_obj_id; + for ($n=1; $n <= $this->numpages; ++$n) { + if (isset($this->PageAnnots[$n])) { + // set page annotations + foreach ($this->PageAnnots[$n] as $key => $pl) { + // create annotation object for grouping radiobuttons + if (isset($this->radiobutton_groups[$n][$pl['txt']]) AND is_array($this->radiobutton_groups[$n][$pl['txt']])) { + $annots = '<<'; + $annots .= ' /Type /Annot'; + $annots .= ' /Subtype /Widget'; + $annots .= ' /T '.$this->_dataannobjstring($pl['txt']); + $annots .= ' /FT /Btn'; + $annots .= ' /Ff 49152'; + $annots .= ' /Kids ['; + foreach ($this->radiobutton_groups[$n][$pl['txt']] as $data) { + $annots .= ' '.$data['kid'].' 0 R'; + if ($data['def'] !== 'Off') { + $defval = $data['def']; + } + } + $annots .= ' ]'; + if (isset($defval)) { + $annots .= ' /V /'.$defval; + } + $annots .= ' >>'; + ++$this->annot_obj_id; + $this->offsets[$this->annot_obj_id] = $this->bufferlen; + $this->_out($this->annot_obj_id.' 0 obj '.$annots.' endobj'); + $this->form_obj_id[] = $this->annot_obj_id; + // store object id to be used on Parent entry of Kids + $this->radiobutton_groups[$n][$pl['txt']] = $this->annot_obj_id; + } + $formfield = false; + $pl['opt'] = array_change_key_case($pl['opt'], CASE_LOWER); + $a = $pl['x'] * $this->k; + $b = $this->pagedim[$n]['h'] - (($pl['y'] + $pl['h']) * $this->k); + $c = $pl['w'] * $this->k; + $d = $pl['h'] * $this->k; + $rect = sprintf('%.2F %.2F %.2F %.2F', $a, $b, $a+$c, $b+$d); + // create new annotation object + $annots = '<_textannobjstring($pl['txt']); + $annots .= ' /P '.$this->page_obj_id[$n].' 0 R'; + $annots .= ' /NM '.$this->_dataannobjstring(sprintf('%04u-%04u', $n, $key)); + $annots .= ' /M '.$this->_datestring(); + if (isset($pl['opt']['f'])) { + $val = 0; + if (is_array($pl['opt']['f'])) { + foreach ($pl['opt']['f'] as $f) { + switch (strtolower($f)) { + case 'invisible': { + $val += 1 << 0; + break; + } + case 'hidden': { + $val += 1 << 1; + break; + } + case 'print': { + $val += 1 << 2; + break; + } + case 'nozoom': { + $val += 1 << 3; + break; + } + case 'norotate': { + $val += 1 << 4; + break; + } + case 'noview': { + $val += 1 << 5; + break; + } + case 'readonly': { + $val += 1 << 6; + break; + } + case 'locked': { + $val += 1 << 8; + break; + } + case 'togglenoview': { + $val += 1 << 9; + break; + } + case 'lockedcontents': { + $val += 1 << 10; + break; + } + default: { + break; + } + } + } + } else { + $val = intval($pl['opt']['f']); + } + $annots .= ' /F '.intval($val); + } + if (isset($pl['opt']['as']) AND is_string($pl['opt']['as'])) { + $annots .= ' /AS /'.$pl['opt']['as']; + } + if (isset($pl['opt']['ap'])) { + // appearance stream + $annots .= ' /AP <<'; + if (is_array($pl['opt']['ap'])) { + foreach ($pl['opt']['ap'] as $apmode => $apdef) { + // $apmode can be: n = normal; r = rollover; d = down; + $annots .= ' /'.strtoupper($apmode); + if (is_array($apdef)) { + $annots .= ' <<'; + foreach ($apdef as $apstate => $stream) { + // reference to XObject that define the appearance for this mode-state + $apsobjid = $this->_putAPXObject($c, $d, $stream); + $annots .= ' /'.$apstate.' '.$apsobjid.' 0 R'; + } + $annots .= ' >>'; + } else { + // reference to XObject that define the appearance for this mode + $apsobjid = $this->_putAPXObject($c, $d, $apdef); + $annots .= ' '.$apsobjid.' 0 R'; + } + } + } else { + $annots .= $pl['opt']['ap']; + } + $annots .= ' >>'; + } + if (isset($pl['opt']['bs']) AND (is_array($pl['opt']['bs']))) { + $annots .= ' /BS <<'; + $annots .= ' /Type /Border'; + if (isset($pl['opt']['bs']['w'])) { + $annots .= ' /W '.intval($pl['opt']['bs']['w']); + } + $bstyles = array('S', 'D', 'B', 'I', 'U'); + if (isset($pl['opt']['bs']['s']) AND in_array($pl['opt']['bs']['s'], $bstyles)) { + $annots .= ' /S /'.$pl['opt']['bs']['s']; + } + if (isset($pl['opt']['bs']['d']) AND (is_array($pl['opt']['bs']['d']))) { + $annots .= ' /D ['; + foreach ($pl['opt']['bs']['d'] as $cord) { + $annots .= ' '.intval($cord); + } + $annots .= ']'; + } + $annots .= ' >>'; + } else { + $annots .= ' /Border ['; + if (isset($pl['opt']['border']) AND (count($pl['opt']['border']) >= 3)) { + $annots .= intval($pl['opt']['border'][0]).' '; + $annots .= intval($pl['opt']['border'][1]).' '; + $annots .= intval($pl['opt']['border'][2]); + if (isset($pl['opt']['border'][3]) AND is_array($pl['opt']['border'][3])) { + $annots .= ' ['; + foreach ($pl['opt']['border'][3] as $dash) { + $annots .= intval($dash).' '; + } + $annots .= ']'; + } + } else { + $annots .= '0 0 0'; + } + $annots .= ']'; + } + if (isset($pl['opt']['be']) AND (is_array($pl['opt']['be']))) { + $annots .= ' /BE <<'; + $bstyles = array('S', 'C'); + if (isset($pl['opt']['be']['s']) AND in_array($pl['opt']['be']['s'], $markups)) { + $annots .= ' /S /'.$pl['opt']['bs']['s']; + } else { + $annots .= ' /S /S'; + } + if (isset($pl['opt']['be']['i']) AND ($pl['opt']['be']['i'] >= 0) AND ($pl['opt']['be']['i'] <= 2)) { + $annots .= ' /I '.sprintf(' %.4F', $pl['opt']['be']['i']); + } + $annots .= '>>'; + } + if (isset($pl['opt']['c']) AND (is_array($pl['opt']['c'])) AND !empty($pl['opt']['c'])) { + $annots .= ' /C ['; + foreach ($pl['opt']['c'] as $col) { + $col = intval($col); + $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255); + $annots .= sprintf(' %.4F', $color); + } + $annots .= ']'; + } + //$annots .= ' /StructParent '; + //$annots .= ' /OC '; + $markups = array('text', 'freetext', 'line', 'square', 'circle', 'polygon', 'polyline', 'highlight', 'underline', 'squiggly', 'strikeout', 'stamp', 'caret', 'ink', 'fileattachment', 'sound'); + if (in_array(strtolower($pl['opt']['subtype']), $markups)) { + // this is a markup type + if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) { + $annots .= ' /T '.$this->_textannobjstring($pl['opt']['t']); + } + //$annots .= ' /Popup '; + if (isset($pl['opt']['ca'])) { + $annots .= ' /CA '.sprintf('%.4F', floatval($pl['opt']['ca'])); + } + if (isset($pl['opt']['rc'])) { + $annots .= ' /RC '.$this->_textannobjstring($pl['opt']['rc']); + } + $annots .= ' /CreationDate '.$this->_datestring(); + //$annots .= ' /IRT '; + if (isset($pl['opt']['subj'])) { + $annots .= ' /Subj '.$this->_textannobjstring($pl['opt']['subj']); + } + //$annots .= ' /RT '; + //$annots .= ' /IT '; + //$annots .= ' /ExData '; + } + $lineendings = array('Square', 'Circle', 'Diamond', 'OpenArrow', 'ClosedArrow', 'None', 'Butt', 'ROpenArrow', 'RClosedArrow', 'Slash'); + switch (strtolower($pl['opt']['subtype'])) { + case 'text': { + if (isset($pl['opt']['open'])) { + $annots .= ' /Open '. (strtolower($pl['opt']['open']) == 'true' ? 'true' : 'false'); + } + $iconsapp = array('Comment', 'Help', 'Insert', 'Key', 'NewParagraph', 'Note', 'Paragraph'); + if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { + $annots .= ' /Name /'.$pl['opt']['name']; + } else { + $annots .= ' /Name /Note'; + } + $statemodels = array('Marked', 'Review'); + if (isset($pl['opt']['statemodel']) AND in_array($pl['opt']['statemodel'], $statemodels)) { + $annots .= ' /StateModel /'.$pl['opt']['statemodel']; + } else { + $pl['opt']['statemodel'] = 'Marked'; + $annots .= ' /StateModel /'.$pl['opt']['statemodel']; + } + if ($pl['opt']['statemodel'] == 'Marked') { + $states = array('Accepted', 'Unmarked'); + } else { + $states = array('Accepted', 'Rejected', 'Cancelled', 'Completed', 'None'); + } + if (isset($pl['opt']['state']) AND in_array($pl['opt']['state'], $states)) { + $annots .= ' /State /'.$pl['opt']['state']; + } else { + if ($pl['opt']['statemodel'] == 'Marked') { + $annots .= ' /State /Unmarked'; + } else { + $annots .= ' /State /None'; + } + } + break; + } + case 'link': { + if(is_string($pl['txt'])) { + // external URI link + $annots .= ' /A <_dataannobjstring($this->unhtmlentities($pl['txt'])).'>>'; + } else { + // internal link + $l = $this->links[$pl['txt']]; + $annots .= sprintf(' /Dest [%d 0 R /XYZ 0 %.2F null]', (1 + (2 * $l[0])), ($this->pagedim[$l[0]]['h'] - ($l[1] * $this->k))); + } + $hmodes = array('N', 'I', 'O', 'P'); + if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmodes)) { + $annots .= ' /H /'.$pl['opt']['h']; + } else { + $annots .= ' /H /I'; + } + //$annots .= ' /PA '; + //$annots .= ' /Quadpoints '; + break; + } + case 'freetext': { + if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) { + $annots .= ' /DA ('.$pl['opt']['da'].')'; + } + if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) { + $annots .= ' /Q '.intval($pl['opt']['q']); + } + if (isset($pl['opt']['rc'])) { + $annots .= ' /RC '.$this->_textannobjstring($pl['opt']['rc']); + } + if (isset($pl['opt']['ds'])) { + $annots .= ' /DS '.$this->_textannobjstring($pl['opt']['ds']); + } + if (isset($pl['opt']['cl']) AND is_array($pl['opt']['cl'])) { + $annots .= ' /CL ['; + foreach ($pl['opt']['cl'] as $cl) { + $annots .= sprintf('%.4F ', $cl * $this->k); + } + $annots .= ']'; + } + $tfit = array('FreeText', 'FreeTextCallout', 'FreeTextTypeWriter'); + if (isset($pl['opt']['it']) AND in_array($pl['opt']['it'], $tfit)) { + $annots .= ' /IT '.$pl['opt']['it']; + } + if (isset($pl['opt']['rd']) AND is_array($pl['opt']['rd'])) { + $l = $pl['opt']['rd'][0] * $this->k; + $r = $pl['opt']['rd'][1] * $this->k; + $t = $pl['opt']['rd'][2] * $this->k; + $b = $pl['opt']['rd'][3] * $this->k; + $annots .= ' /RD ['.sprintf('%.2F %.2F %.2F %.2F', $l, $r, $t, $b).']'; + } + if (isset($pl['opt']['le']) AND in_array($pl['opt']['le'], $lineendings)) { + $annots .= ' /LE /'.$pl['opt']['le']; + } + break; + } + case 'line': { + break; + } + case 'square': { + break; + } + case 'circle': { + break; + } + case 'polygon': { + break; + } + case 'polyline': { + break; + } + case 'highlight': { + break; + } + case 'underline': { + break; + } + case 'squiggly': { + break; + } + case 'strikeout': { + break; + } + case 'stamp': { + break; + } + case 'caret': { + break; + } + case 'ink': { + break; + } + case 'popup': { + break; + } + case 'fileattachment': { + if (!isset($pl['opt']['fs'])) { + break; + } + $filename = basename($pl['opt']['fs']); + if (isset($this->embeddedfiles[$filename]['n'])) { + $annots .= ' /FS <_dataannobjstring($filename).' /EF <embeddedfiles[$filename]['n'].' 0 R>> >>'; + $iconsapp = array('Graph', 'Paperclip', 'PushPin', 'Tag'); + if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { + $annots .= ' /Name /'.$pl['opt']['name']; + } else { + $annots .= ' /Name /PushPin'; + } + } + break; + } + case 'sound': { + if (!isset($pl['opt']['fs'])) { + break; + } + $filename = basename($pl['opt']['fs']); + if (isset($this->embeddedfiles[$filename]['n'])) { + // ... TO BE COMPLETED ... + // /R /C /B /E /CO /CP + $annots .= ' /Sound <_dataannobjstring($filename).' /EF <embeddedfiles[$filename]['n'].' 0 R>> >>'; + $iconsapp = array('Speaker', 'Mic'); + if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { + $annots .= ' /Name /'.$pl['opt']['name']; + } else { + $annots .= ' /Name /Speaker'; + } + } + break; + } + case 'movie': { + break; + } + case 'widget': { + $hmode = array('N', 'I', 'O', 'P', 'T'); + if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmode)) { + $annots .= ' /H /'.$pl['opt']['h']; + } + if (isset($pl['opt']['mk']) AND (is_array($pl['opt']['mk'])) AND !empty($pl['opt']['mk'])) { + $annots .= ' /MK <<'; + if (isset($pl['opt']['mk']['r'])) { + $annots .= ' /R '.$pl['opt']['mk']['r']; + } + if (isset($pl['opt']['mk']['bc']) AND (is_array($pl['opt']['mk']['bc']))) { + $annots .= ' /BC ['; + foreach($pl['opt']['mk']['bc'] AS $col) { + $col = intval($col); + $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255); + $annots .= sprintf(' %.2F', $color); + } + $annots .= ']'; + } + if (isset($pl['opt']['mk']['bg']) AND (is_array($pl['opt']['mk']['bg']))) { + $annots .= ' /BG ['; + foreach($pl['opt']['mk']['bg'] AS $col) { + $col = intval($col); + $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255); + $annots .= sprintf(' %.2F', $color); + } + $annots .= ']'; + } + if (isset($pl['opt']['mk']['ca'])) { + $annots .= ' /CA '.$pl['opt']['mk']['ca'].''; + } + if (isset($pl['opt']['mk']['rc'])) { + $annots .= ' /RC '.$pl['opt']['mk']['ca'].''; + } + if (isset($pl['opt']['mk']['ac'])) { + $annots .= ' /AC '.$pl['opt']['mk']['ca'].''; + } + if (isset($pl['opt']['mk']['i'])) { + $info = $this->getImageBuffer($pl['opt']['mk']['i']); + if ($info !== false) { + $annots .= ' /I '.$info['n'].' 0 R'; + } + } + if (isset($pl['opt']['mk']['ri'])) { + $info = $this->getImageBuffer($pl['opt']['mk']['ri']); + if ($info !== false) { + $annots .= ' /RI '.$info['n'].' 0 R'; + } + } + if (isset($pl['opt']['mk']['ix'])) { + $info = $this->getImageBuffer($pl['opt']['mk']['ix']); + if ($info !== false) { + $annots .= ' /IX '.$info['n'].' 0 R'; + } + } + if (isset($pl['opt']['mk']['if']) AND (is_array($pl['opt']['mk']['if'])) AND !empty($pl['opt']['mk']['if'])) { + $annots .= ' /IF <<'; + $if_sw = array('A', 'B', 'S', 'N'); + if (isset($pl['opt']['mk']['if']['sw']) AND in_array($pl['opt']['mk']['if']['sw'], $if_sw)) { + $annots .= ' /SW /'.$pl['opt']['mk']['if']['sw']; + } + $if_s = array('A', 'P'); + if (isset($pl['opt']['mk']['if']['s']) AND in_array($pl['opt']['mk']['if']['s'], $if_s)) { + $annots .= ' /S /'.$pl['opt']['mk']['if']['s']; + } + if (isset($pl['opt']['mk']['if']['a']) AND (is_array($pl['opt']['mk']['if']['a'])) AND !empty($pl['opt']['mk']['if']['a'])) { + $annots .= sprintf(' /A [%.2F %.2F]', $pl['opt']['mk']['if']['a'][0], $pl['opt']['mk']['if']['a'][1]); + } + if (isset($pl['opt']['mk']['if']['fb']) AND ($pl['opt']['mk']['if']['fb'])) { + $annots .= ' /FB true'; + } + $annots .= '>>'; + } + if (isset($pl['opt']['mk']['tp']) AND ($pl['opt']['mk']['tp'] >= 0) AND ($pl['opt']['mk']['tp'] <= 6)) { + $annots .= ' /TP '.intval($pl['opt']['mk']['tp']); + } else { + $annots .= ' /TP 0'; + } + $annots .= '>>'; + } // end MK + // --- Entries for field dictionaries --- + if (isset($this->radiobutton_groups[$n][$pl['txt']])) { + // set parent + $annots .= ' /Parent '.$this->radiobutton_groups[$n][$pl['txt']].' 0 R'; + } + if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) { + $annots .= ' /T '.$this->_dataannobjstring($pl['opt']['t']); + } + if (isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])) { + $annots .= ' /TU '.$this->_dataannobjstring($pl['opt']['tu']); + } + if (isset($pl['opt']['tm']) AND is_string($pl['opt']['tm'])) { + $annots .= ' /TM '.$this->_dataannobjstring($pl['opt']['tm']); + } + if (isset($pl['opt']['ff'])) { + if (is_array($pl['opt']['ff'])) { + // array of bit settings + $flag = 0; + foreach($pl['opt']['ff'] as $val) { + $flag += 1 << ($val - 1); + } + } else { + $flag = intval($pl['opt']['ff']); + } + $annots .= ' /Ff '.$flag; + } + if (isset($pl['opt']['maxlen'])) { + $annots .= ' /MaxLen '.intval($pl['opt']['maxlen']); + } + if (isset($pl['opt']['v'])) { + $annots .= ' /V'; + if (is_array($pl['opt']['v'])) { + foreach ($pl['opt']['v'] AS $optval) { + if (is_float($optval)) { + $optval = sprintf('%.2F', $optval); + } + $annots .= ' '.$optval; + } + } else { + $annots .= ' '.$this->_textannobjstring($pl['opt']['v']); + } + } + if (isset($pl['opt']['dv'])) { + $annots .= ' /DV'; + if (is_array($pl['opt']['dv'])) { + foreach ($pl['opt']['dv'] AS $optval) { + if (is_float($optval)) { + $optval = sprintf('%.2F', $optval); + } + $annots .= ' '.$optval; + } + } else { + $annots .= ' '.$this->_textannobjstring($pl['opt']['dv']); + } + } + if (isset($pl['opt']['rv'])) { + $annots .= ' /RV'; + if (is_array($pl['opt']['rv'])) { + foreach ($pl['opt']['rv'] AS $optval) { + if (is_float($optval)) { + $optval = sprintf('%.2F', $optval); + } + $annots .= ' '.$optval; + } + } else { + $annots .= ' '.$this->_textannobjstring($pl['opt']['rv']); + } + } + if (isset($pl['opt']['a']) AND !empty($pl['opt']['a'])) { + $annots .= ' /A << '.$pl['opt']['a'].' >>'; + } + if (isset($pl['opt']['aa']) AND !empty($pl['opt']['aa'])) { + $annots .= ' /AA << '.$pl['opt']['aa'].' >>'; + } + if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) { + $annots .= ' /DA ('.$pl['opt']['da'].')'; + } + if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) { + $annots .= ' /Q '.intval($pl['opt']['q']); + } + if (isset($pl['opt']['opt']) AND (is_array($pl['opt']['opt'])) AND !empty($pl['opt']['opt'])) { + $annots .= ' /Opt ['; + foreach($pl['opt']['opt'] AS $copt) { + if (is_array($copt)) { + $annots .= ' ['.$this->_textannobjstring($copt[0]).' '.$this->_textannobjstring($copt[1]).']'; + } else { + $annots .= ' '.$this->_textannobjstring($copt); + } + } + $annots .= ']'; + } + if (isset($pl['opt']['ti'])) { + $annots .= ' /TI '.intval($pl['opt']['ti']); + } + if (isset($pl['opt']['i']) AND (is_array($pl['opt']['i'])) AND !empty($pl['opt']['i'])) { + $annots .= ' /I ['; + foreach($pl['opt']['i'] AS $copt) { + $annots .= intval($copt).' '; + } + $annots .= ']'; + } + break; + } + case 'screen': { + break; + } + case 'printermark': { + break; + } + case 'trapnet': { + break; + } + case 'watermark': { + break; + } + case '3d': { + break; + } + default: { + break; + } + } + $annots .= '>>'; + // create new annotation object + ++$this->annot_obj_id; + $this->offsets[$this->annot_obj_id] = $this->bufferlen; + $this->_out($this->annot_obj_id.' 0 obj '.$annots.' endobj'); + if ($formfield AND ! isset($this->radiobutton_groups[$n][$pl['txt']])) { + // store reference of form object + $this->form_obj_id[] = $this->annot_obj_id; + } + } + } + } // end for each page + } + + /** + * Put appearance streams XObject used to define annotation's appearance states + * @param int $w annotation width + * @param int $h annotation height + * @param string $stream appearance stream + * @return int object ID + * @access protected + * @since 4.8.001 (2009-09-09) + */ + protected function _putAPXObject($w=0, $h=0, $stream='') { + $stream = trim($stream); + ++$this->apxo_obj_id; + $this->offsets[$this->apxo_obj_id] = $this->bufferlen; + $out = $this->apxo_obj_id.' 0 obj'; + $out .= ' <<'; + $out .= ' /Type /XObject'; + $out .= ' /Subtype /Form'; + $out .= ' /FormType 1'; + if ($this->compress) { + $stream = gzcompress($stream); + $out .= ' /Filter /FlateDecode'; + } + $rect = sprintf('%.2F %.2F', $w, $h); + $out .= ' /BBox [0 0 '.$rect.']'; + $out .= ' /Matrix [1 0 0 1 0 0]'; + $out .= ' /Resources <>'; + $out .= ' /Length '.strlen($stream); + $out .= ' >>'; + $out .= ' '.$this->_getstream($stream); + $out .= ' endobj'; + $this->_out($out); + return $this->apxo_obj_id; + } + + /** + * Output fonts. + * @access protected + */ + protected function _putfonts() { + $nf = $this->n; + foreach ($this->diffs as $diff) { + //Encodings + $this->_newobj(); + $this->_out('<> endobj'); + } + $mqr = $this->get_mqr(); + $this->set_mqr(false); + foreach ($this->FontFiles as $file => $info) { + // search and get font file to embedd + $fontdir = $info['fontdir']; + $file = strtolower($file); + $fontfile = ''; + // search files on various directories + if (($fontdir !== false) AND file_exists($fontdir.$file)) { + $fontfile = $fontdir.$file; + } elseif (file_exists($this->_getfontpath().$file)) { + $fontfile = $this->_getfontpath().$file; + } elseif (file_exists($file)) { + $fontfile = $file; + } + if (!$this->empty_string($fontfile)) { + $font = file_get_contents($fontfile); + $compressed = (substr($file, -2) == '.z'); + if ((!$compressed) AND (isset($info['length2']))) { + $header = (ord($font{0}) == 128); + if ($header) { + //Strip first binary header + $font = substr($font, 6); + } + if ($header AND (ord($font{$info['length1']}) == 128)) { + //Strip second binary header + $font = substr($font, 0, $info['length1']).substr($font, ($info['length1'] + 6)); + } + } + $this->_newobj(); + $this->FontFiles[$file]['n'] = $this->n; + $out = '<_getstream($font); + $out .= ' endobj'; + $this->_out($out); + } + } + $this->set_mqr($mqr); + foreach ($this->fontkeys as $k) { + //Font objects + $this->setFontSubBuffer($k, 'n', $this->n + 1); + $font = $this->getFontBuffer($k); + $type = $font['type']; + $name = $font['name']; + if ($type == 'core') { + //Standard font + $obj_id = $this->_newobj(); + $out = '<annotation_fonts['helvetica'] = $k; + } + $out .= ' >> endobj'; + $this->_out($out); + } elseif (($type == 'Type1') OR ($type == 'TrueType')) { + //Additional Type1 or TrueType font + $obj_id = $this->_newobj(); + $out = '<n + 1).' 0 R'; + $out .= ' /FontDescriptor '.($this->n + 2).' 0 R'; + if ($font['enc']) { + if (isset($font['diff'])) { + $out .= ' /Encoding '.($nf + $font['diff']).' 0 R'; + } else { + $out .= ' /Encoding /WinAnsiEncoding'; + } + } + $out .= ' >> endobj'; + $this->_out($out); + // Widths + $this->_newobj(); + $cw = &$font['cw']; + $s = '['; + for ($i = 32; $i < 256; ++$i) { + $s .= $cw[$i].' '; + } + $this->_out($s.'] endobj'); + //Descriptor + $this->_newobj(); + $s = '< $fdv) { + if(is_float($fdv)) { + $fdv = sprintf('%.3F', $fdv); + } + $s .= ' /'.$fdk.' '.$fdv.''; + } + if (!$this->empty_string($font['file'])) { + $s .= ' /FontFile'.($type == 'Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R'; + } + $this->_out($s.'>> endobj'); + } else { + //Allow for additional types + $mtd = '_put'.strtolower($type); + if (!method_exists($this, $mtd)) { + $this->Error('Unsupported font type: '.$type); + } + $obj_id = $this->$mtd($font); + } + // store object ID for current font + $this->font_obj_ids[$k] = $obj_id; + } + } + + /** + * Outputs font widths + * @parameter array $font font data + * @parameter int $cidoffset offset for CID values + * @return PDF command string for font widths + * @author Nicola Asuni + * @access protected + * @since 4.4.000 (2008-12-07) + */ + protected function _putfontwidths($font, $cidoffset=0) { + ksort($font['cw']); + $rangeid = 0; + $range = array(); + $prevcid = -2; + $prevwidth = -1; + $interval = false; + // for each character + foreach ($font['cw'] as $cid => $width) { + $cid -= $cidoffset; + if ($width != $font['dw']) { + if ($cid == ($prevcid + 1)) { + // consecutive CID + if ($width == $prevwidth) { + if ($width == $range[$rangeid][0]) { + $range[$rangeid][] = $width; + } else { + array_pop($range[$rangeid]); + // new range + $rangeid = $prevcid; + $range[$rangeid] = array(); + $range[$rangeid][] = $prevwidth; + $range[$rangeid][] = $width; + } + $interval = true; + $range[$rangeid]['interval'] = true; + } else { + if ($interval) { + // new range + $rangeid = $cid; + $range[$rangeid] = array(); + $range[$rangeid][] = $width; + } else { + $range[$rangeid][] = $width; + } + $interval = false; + } + } else { + // new range + $rangeid = $cid; + $range[$rangeid] = array(); + $range[$rangeid][] = $width; + $interval = false; + } + $prevcid = $cid; + $prevwidth = $width; + } + } + // optimize ranges + $prevk = -1; + $nextk = -1; + $prevint = false; + foreach ($range as $k => $ws) { + $cws = count($ws); + if (($k == $nextk) AND (!$prevint) AND ((!isset($ws['interval'])) OR ($cws < 4))) { + if (isset($range[$k]['interval'])) { + unset($range[$k]['interval']); + } + $range[$prevk] = array_merge($range[$prevk], $range[$k]); + unset($range[$k]); + } else { + $prevk = $k; + } + $nextk = $k + $cws; + if (isset($ws['interval'])) { + if ($cws > 3) { + $prevint = true; + } else { + $prevint = false; + } + unset($range[$k]['interval']); + --$nextk; + } else { + $prevint = false; + } + } + // output data + $w = ''; + foreach ($range as $k => $ws) { + if (count(array_count_values($ws)) == 1) { + // interval mode is more compact + $w .= ' '.$k.' '.($k + count($ws) - 1).' '.$ws[0]; + } else { + // range mode + $w .= ' '.$k.' [ '.implode(' ', $ws).' ]'; + } + } + return '/W ['.$w.' ]'; + } + + /** + * Adds unicode fonts.
      + * Based on PDF Reference 1.3 (section 5) + * @parameter array $font font data + * @return int font object ID + * @access protected + * @author Nicola Asuni + * @since 1.52.0.TC005 (2005-01-05) + */ + protected function _puttruetypeunicode($font) { + // Type0 Font + // A composite font composed of other fonts, organized hierarchically + $obj_id = $this->_newobj(); + $out = '<n + 1).' 0 R]'; + $out .= ' >>'; + $out .= ' endobj'; + $this->_out($out); + // CIDFontType2 + // A CIDFont whose glyph descriptions are based on TrueType font technology + $this->_newobj(); + $out = '<_datastring($font['cidinfo']['Registry']); + $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering']); + $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement']; + $out .= ' /CIDSystemInfo <<'.$cidinfo.'>>'; + $out .= ' /FontDescriptor '.($this->n + 1).' 0 R'; + $out .= ' /DW '.$font['dw']; // default width + $out .= "\n".$this->_putfontwidths($font, 0); + $out .= ' /CIDToGIDMap '.($this->n + 2).' 0 R >> endobj'; + $this->_out($out); + // Font descriptor + // A font descriptor describing the CIDFont default metrics other than its glyph widths + $this->_newobj(); + $out = '< $value) { + if(is_float($value)) { + $value = sprintf('%.3F', $value); + } + $out .= ' /'.$key.' '.$value; + } + $fontdir = false; + if (!$this->empty_string($font['file'])) { + // A stream containing a TrueType font + $out .= ' /FontFile2 '.$this->FontFiles[$font['file']]['n'].' 0 R'; + $fontdir = $this->FontFiles[$font['file']]['fontdir']; + } + $out .= ' >> endobj'; + $this->_out($out); + if (isset($font['ctg']) AND (!$this->empty_string($font['ctg']))) { + $this->_newobj(); + // Embed CIDToGIDMap + // A specification of the mapping from CIDs to glyph indices + // search and get CTG font file to embedd + $ctgfile = strtolower($font['ctg']); + // search and get ctg font file to embedd + $fontfile = ''; + // search files on various directories + if (($fontdir !== false) AND file_exists($fontdir.$ctgfile)) { + $fontfile = $fontdir.$ctgfile; + } elseif (file_exists($this->_getfontpath().$ctgfile)) { + $fontfile = $this->_getfontpath().$ctgfile; + } elseif (file_exists($ctgfile)) { + $fontfile = $ctgfile; + } + if ($this->empty_string($fontfile)) { + $this->Error('Font file not found: '.$ctgfile); + } + $size = filesize($fontfile); + $out = '<_getstream(file_get_contents($fontfile)); + $out .= ' endobj'; + $this->_out($out); + } + return $obj_id; + } + + /** + * Output CID-0 fonts. + * A Type 0 CIDFont contains glyph descriptions based on the Adobe Type 1 font format + * @param array $font font data + * @return int font object ID + * @access protected + * @author Andrew Whitehead, Nicola Asuni, Yukihiro Nakadaira + * @since 3.2.000 (2008-06-23) + */ + protected function _putcidfont0($font) { + $cidoffset = 0; + if (!isset($font['cw'][1])) { + $cidoffset = 31; + } + if (isset($font['cidinfo']['uni2cid'])) { + // convert unicode to cid. + $uni2cid = $font['cidinfo']['uni2cid']; + $cw = array(); + foreach ($font['cw'] as $uni => $width) { + if (isset($uni2cid[$uni])) { + $cw[($uni2cid[$uni] + $cidoffset)] = $width; + } elseif ($uni < 256) { + $cw[$uni] = $width; + } // else unknown character + } + $font = array_merge($font, array('cw' => $cw)); + } + $name = $font['name']; + $enc = $font['enc']; + if ($enc) { + $longname = $name.'-'.$enc; + } else { + $longname = $name; + } + $obj_id = $this->_newobj(); + $out = '<n + 1).' 0 R]'; + $out .= ' >> endobj'; + $this->_out($out); + $this->_newobj(); + $out = '<_datastring($font['cidinfo']['Registry']); + $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering']); + $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement']; + $out .= ' /CIDSystemInfo <<'.$cidinfo.'>>'; + $out .= ' /FontDescriptor '.($this->n + 1).' 0 R'; + $out .= ' /DW '.$font['dw']; + $out .= "\n".$this->_putfontwidths($font, $cidoffset); + $out .= ' >> endobj'; + $this->_out($out); + $this->_newobj(); + $s = '< $v) { + if ($k != 'Style') { + if(is_float($v)) { + $v = sprintf('%.3F', $v); + } + $s .= ' /'.$k.' '.$v.''; + } + } + $this->_out($s.'>> endobj'); + return $obj_id; + } + + /** + * Output images. + * @access protected + */ + protected function _putimages() { + $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; + foreach ($this->imagekeys as $file) { + $info = $this->getImageBuffer($file); + $this->_newobj(); + $this->setImageSubBuffer($file, 'n', $this->n); + $out = '<n - 1).' 0 R'; + } + if ($info['cs'] == 'Indexed') { + $out .= ' /ColorSpace [/Indexed /DeviceRGB '.((strlen($info['pal']) / 3) - 1).' '.($this->n + 1).' 0 R]'; + } else { + $out .= ' /ColorSpace /'.$info['cs']; + if ($info['cs'] == 'DeviceCMYK') { + $out .= ' /Decode [1 0 1 0 1 0 1 0]'; + } + } + $out .= ' /BitsPerComponent '.$info['bpc']; + if (isset($info['f'])) { + $out .= ' /Filter /'.$info['f']; + } + if (isset($info['parms'])) { + $out .= ' '.$info['parms']; + } + if (isset($info['trns']) AND is_array($info['trns'])) { + $trns=''; + $count_info = count($info['trns']); + for ($i=0; $i < $count_info; ++$i) { + $trns .= $info['trns'][$i].' '.$info['trns'][$i].' '; + } + $out .= ' /Mask ['.$trns.']'; + } + $out .= ' /Length '.strlen($info['data']).' >>'; + $out .= ' '.$this->_getstream($info['data']); + $out .= ' endobj'; + $this->_out($out); + //Palette + if ($info['cs'] == 'Indexed') { + $this->_newobj(); + $pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal']; + $this->_out('<<'.$filter.'/Length '.strlen($pal).'>> '.$this->_getstream($pal).' endobj'); + } + } + } + + /** + * Output Spot Colors Resources. + * @access protected + * @since 4.0.024 (2008-09-12) + */ + protected function _putspotcolors() { + foreach ($this->spot_colors as $name => $color) { + $this->_newobj(); + $this->spot_colors[$name]['n'] = $this->n; + $out = '[/Separation /'.str_replace(' ', '#20', $name); + $out .= ' /DeviceCMYK <<'; + $out .= ' /Range [0 1 0 1 0 1 0 1] /C0 [0 0 0 0]'; + $out .= ' '.sprintf('/C1 [%.4F %.4F %.4F %.4F] ', $color['c']/100, $color['m']/100, $color['y']/100, $color['k']/100); + $out .= ' /FunctionType 2 /Domain [0 1] /N 1>>]'; + $out .= ' endobj'; + $this->_out($out); + } + } + + /** + * Output Resources Dictionary. + * @access protected + */ + protected function _putresourcedict() { + $out = '2 0 obj'; + $out .= ' << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'; + $out .= ' /Font <<'; + foreach ($this->fontkeys as $fontkey) { + $font = $this->getFontBuffer($fontkey); + $out .= ' /F'.$font['i'].' '.$font['n'].' 0 R'; + } + $out .= ' >>'; + $out .= ' /XObject <<'; + foreach ($this->imagekeys as $file) { + $info = $this->getImageBuffer($file); + $out .= ' /I'.$info['i'].' '.$info['n'].' 0 R'; + } + $out .= ' >>'; + // visibility + $out .= ' /Properties <n_ocg_print.' 0 R /OC2 '.$this->n_ocg_view.' 0 R>>'; + // transparency + $out .= ' /ExtGState <<'; + foreach ($this->extgstates as $k => $extgstate) { + if (isset($extgstate['name'])) { + $out .= ' /'.$extgstate['name']; + } else { + $out .= ' /GS'.$k; + } + $out .= ' '.$extgstate['n'].' 0 R'; + } + $out .= ' >>'; + // gradient patterns + if (isset($this->gradients) AND (count($this->gradients) > 0)) { + $out .= ' /Pattern <<'; + foreach ($this->gradients as $id => $grad) { + $out .= ' /p'.$id.' '.$grad['pattern'].' 0 R'; + } + $out .= ' >>'; + } + // gradient shadings + if (isset($this->gradients) AND (count($this->gradients) > 0)) { + $out .= ' /Shading <<'; + foreach ($this->gradients as $id => $grad) { + $out .= ' /Sh'.$id.' '.$grad['id'].' 0 R'; + } + $out .= ' >>'; + } + // spot colors + if (isset($this->spot_colors) AND (count($this->spot_colors) > 0)) { + $out .= ' /ColorSpace <<'; + foreach ($this->spot_colors as $color) { + $out .= ' /CS'.$color['i'].' '.$color['n'].' 0 R'; + } + $out .= ' >>'; + } + $out .= ' >> endobj'; + $this->_out($out); + } + + /** + * Output Resources. + * @access protected + */ + protected function _putresources() { + $this->_putextgstates(); + $this->_putocg(); + $this->_putfonts(); + $this->_putimages(); + $this->_putspotcolors(); + $this->_putshaders(); + //Resource dictionary + $this->offsets[2] = $this->bufferlen; + $this->_putresourcedict(); + $this->_putbookmarks(); + $this->_putEmbeddedFiles(); + $this->_putannotsobjs(); + $this->_putjavascript(); + // encryption + $this->_putencryption(); + } + + /** + * Adds some Metadata information (Document Information Dictionary) + * (see Chapter 14.3.3 Document Information Dictionary of PDF32000_2008.pdf Reference) + * @access protected + */ + protected function _putinfo() { + $this->_newobj(); + $out = '<<'; + if (!$this->empty_string($this->title)) { + // The document's title. + $out .= ' /Title '.$this->_textstring($this->title); + } + if (!$this->empty_string($this->author)) { + // The name of the person who created the document. + $out .= ' /Author '.$this->_textstring($this->author); + } + if (!$this->empty_string($this->subject)) { + // The subject of the document. + $out .= ' /Subject '.$this->_textstring($this->subject); + } + if (!$this->empty_string($this->keywords)) { + // Keywords associated with the document. + $out .= ' /Keywords '.$this->_textstring($this->keywords.' TCP'.'DF'); + } + if (!$this->empty_string($this->creator)) { + // If the document was converted to PDF from another format, the name of the conforming product that created the original document from which it was converted. + $out .= ' /Creator '.$this->_textstring($this->creator); + } + if (defined('PDF_PRODUCER')) { + // If the document was converted to PDF from another format, the name of the conforming product that converted it to PDF. + $out .= ' /Producer '.$this->_textstring(PDF_PRODUCER.' (TCP'.'DF)'); + } else { + // default producer + $out .= ' /Producer '.$this->_textstring('TCP'.'DF'); + } + // The date and time the document was created, in human-readable form + $out .= ' /CreationDate '.$this->_datestring(); + // The date and time the document was most recently modified, in human-readable form + $out .= ' /ModDate '.$this->_datestring(); + // A name object indicating whether the document has been modified to include trapping information + //$out .= ' /Trapped /False'); + $out .= ' >> endobj'; + $this->_out($out); + } + + /** + * Output Catalog. + * @access protected + */ + protected function _putcatalog() { + $this->_newobj(); + $out = '<< /Type /Catalog'; + $out .= ' /Pages 1 0 R'; + if ($this->ZoomMode == 'fullpage') { + $out .= ' /OpenAction [3 0 R /Fit]'; + } elseif ($this->ZoomMode == 'fullwidth') { + $out .= ' /OpenAction [3 0 R /FitH null]'; + } elseif ($this->ZoomMode == 'real') { + $out .= ' /OpenAction [3 0 R /XYZ null null 1]'; + } elseif (!is_string($this->ZoomMode)) { + $out .= ' /OpenAction [3 0 R /XYZ null null '.($this->ZoomMode / 100).']'; + } + if (isset($this->LayoutMode) AND (!$this->empty_string($this->LayoutMode))) { + $out .= ' /PageLayout /'.$this->LayoutMode; + } + if (isset($this->PageMode) AND (!$this->empty_string($this->PageMode))) { + $out .= ' /PageMode /'.$this->PageMode; + } + if (isset($this->l['a_meta_language'])) { + $out .= ' /Lang /'.$this->l['a_meta_language']; + } + $out .= ' /Names <<'; + if ((!empty($this->javascript)) OR (!empty($this->js_objects))) { + $out .= ' /JavaScript '.($this->n_js).' 0 R'; + } + $out .= ' >>'; + if (count($this->outlines) > 0) { + $out .= ' /Outlines '.$this->OutlineRoot.' 0 R'; + $out .= ' /PageMode /UseOutlines'; + } + $out .= ' '.$this->_putviewerpreferences(); + $p = $this->n_ocg_print.' 0 R'; + $v = $this->n_ocg_view.' 0 R'; + $as = '<> <>'; + $out .= ' /OCProperties <>>>'; + // AcroForm + if (!empty($this->form_obj_id) OR ($this->sign AND isset($this->signature_data['cert_type']))) { + $out .= ' /AcroForm<<'; + $objrefs = ''; + if ($this->sign AND isset($this->signature_data['cert_type'])) { + $objrefs .= $this->sig_obj_id.' 0 R'; + } + if (!empty($this->form_obj_id)) { + foreach($this->form_obj_id as $objid) { + $objrefs .= ' '.$objid.' 0 R'; + } + } + $out .= ' /Fields ['.$objrefs.']'; + $out .= ' /NeedAppearances '.(empty($this->form_obj_id)?'false':'true'); + if ($this->sign AND isset($this->signature_data['cert_type'])) { + $out .= ' /SigFlags 3'; + } + //$out .= ' /CO '; + if (isset($this->annotation_fonts) AND !empty($this->annotation_fonts)) { + $out .= ' /DR <<'; + $out .= ' /Font <<'; + foreach ($this->annotation_fonts as $font => $fontkey) { + $out .= ' /F'.($fontkey + 1).' '.$this->font_obj_ids[$font].' 0 R'; + } + $out .= ' >> >>'; + } + $out .= ' /DA (/F'.(array_search('helvetica', $this->fontkeys) + 1).' 0 Tf 0 g)'; + $out .= ' /Q '.(($this->rtl)?'2':'0'); + //$out .= ' /XFA '; + $out .= ' >>'; + // signatures + if ($this->sign AND isset($this->signature_data['cert_type'])) { + if ($this->signature_data['cert_type'] > 0) { + $out .= ' /Perms<sig_obj_id + 1).' 0 R>>'; + } else { + $out .= ' /Perms<sig_obj_id + 1).' 0 R>>'; + } + } + } + $out .= ' >> endobj'; + $this->_out($out); + } + + /** + * Output viewer preferences. + * @return string for viewer preferences + * @author Nicola asuni + * @since 3.1.000 (2008-06-09) + * @access protected + */ + protected function _putviewerpreferences() { + $out = '/ViewerPreferences <<'; + if ($this->rtl) { + $out .= ' /Direction /R2L'; + } else { + $out .= ' /Direction /L2R'; + } + if (isset($this->viewer_preferences['HideToolbar']) AND ($this->viewer_preferences['HideToolbar'])) { + $out .= ' /HideToolbar true'; + } + if (isset($this->viewer_preferences['HideMenubar']) AND ($this->viewer_preferences['HideMenubar'])) { + $out .= ' /HideMenubar true'; + } + if (isset($this->viewer_preferences['HideWindowUI']) AND ($this->viewer_preferences['HideWindowUI'])) { + $out .= ' /HideWindowUI true'; + } + if (isset($this->viewer_preferences['FitWindow']) AND ($this->viewer_preferences['FitWindow'])) { + $out .= ' /FitWindow true'; + } + if (isset($this->viewer_preferences['CenterWindow']) AND ($this->viewer_preferences['CenterWindow'])) { + $out .= ' /CenterWindow true'; + } + if (isset($this->viewer_preferences['DisplayDocTitle']) AND ($this->viewer_preferences['DisplayDocTitle'])) { + $out .= ' /DisplayDocTitle true'; + } + if (isset($this->viewer_preferences['NonFullScreenPageMode'])) { + $out .= ' /NonFullScreenPageMode /'.$this->viewer_preferences['NonFullScreenPageMode']; + } + if (isset($this->viewer_preferences['ViewArea'])) { + $out .= ' /ViewArea /'.$this->viewer_preferences['ViewArea']; + } + if (isset($this->viewer_preferences['ViewClip'])) { + $out .= ' /ViewClip /'.$this->viewer_preferences['ViewClip']; + } + if (isset($this->viewer_preferences['PrintArea'])) { + $out .= ' /PrintArea /'.$this->viewer_preferences['PrintArea']; + } + if (isset($this->viewer_preferences['PrintClip'])) { + $out .= ' /PrintClip /'.$this->viewer_preferences['PrintClip']; + } + if (isset($this->viewer_preferences['PrintScaling'])) { + $out .= ' /PrintScaling /'.$this->viewer_preferences['PrintScaling']; + } + if (isset($this->viewer_preferences['Duplex']) AND (!$this->empty_string($this->viewer_preferences['Duplex']))) { + $out .= ' /Duplex /'.$this->viewer_preferences['Duplex']; + } + if (isset($this->viewer_preferences['PickTrayByPDFSize'])) { + if ($this->viewer_preferences['PickTrayByPDFSize']) { + $out .= ' /PickTrayByPDFSize true'; + } else { + $out .= ' /PickTrayByPDFSize false'; + } + } + if (isset($this->viewer_preferences['PrintPageRange'])) { + $PrintPageRangeNum = ''; + foreach ($this->viewer_preferences['PrintPageRange'] as $k => $v) { + $PrintPageRangeNum .= ' '.($v - 1).''; + } + $out .= ' /PrintPageRange ['.substr($PrintPageRangeNum,1).']'; + } + if (isset($this->viewer_preferences['NumCopies'])) { + $out .= ' /NumCopies '.intval($this->viewer_preferences['NumCopies']); + } + $out .= ' >>'; + return $out; + } + + /** + * Output trailer. + * @access protected + */ + protected function _puttrailer() { + $out = 'trailer <<'; + $out .= ' /Size '.($this->n + 1); + $out .= ' /Root '.$this->n.' 0 R'; + $out .= ' /Info '.($this->n - 1).' 0 R'; + if ($this->encrypted) { + $out .= ' /Encrypt '.$this->enc_obj_id.' 0 R'; + $out .= ' /ID [()()]'; + } + $out .= ' >>'; + $this->_out($out); + } + + /** + * Output PDF header. + * @access protected + */ + protected function _putheader() { + $this->_out('%PDF-'.$this->PDFVersion); + } + + /** + * Output end of document (EOF). + * @access protected + */ + protected function _enddoc() { + $this->state = 1; + $this->_putheader(); + $this->_putpages(); + $this->_putresources(); + // Signature + if ($this->sign AND isset($this->signature_data['cert_type'])) { + // widget annotation for signature + $this->sig_obj_id = $this->_newobj(); + // --- replace signature ID on the first page --- + // get the document content + $pdfdoc = $this->getBuffer(); + // Remove the original buffer + if (isset($this->diskcache) AND $this->diskcache) { + // remove buffer file from cache + unlink($this->buffer); + } + unset($this->buffer); + $signature_widget_ref = sprintf('%u 0 R', $this->sig_obj_id); + $signature_widget_ref .= str_repeat(' ', (strlen($this->sig_annot_ref) - strlen($signature_widget_ref))); + $pdfdoc = str_replace($this->sig_annot_ref, $signature_widget_ref, $pdfdoc); + $this->diskcache = false; + $this->buffer = &$pdfdoc; + $this->bufferlen = strlen($pdfdoc); + // --- + $out = '<< /Type /Annot /Subtype /Widget /Rect [0 0 0 0]'; + $out .= ' /P 3 0 R'; // link to first page object + $out .= ' /FT /Sig'; + $out .= ' /T '.$this->_textstring('Signature'); + $out .= ' /Ff 0'; + $out .= ' /V '.($this->sig_obj_id + 1).' 0 R'; + $out .= ' >> endobj'; + $this->_out($out); + // signature + $this->_putsignature(); + } + // Info + $this->_putinfo(); + // Catalog + $this->_putcatalog(); + // Cross-ref + $o = $this->bufferlen; + $this->_out('xref'); + $this->_out('0 '.($this->n + 1)); + $this->_out('0000000000 65535 f '); + for ($i=1; $i <= $this->n; ++$i) { + $this->_out(sprintf('%010d 00000 n ', $this->offsets[$i])); + } + // Embedded Files + if (isset($this->embeddedfiles) AND count($this->embeddedfiles) > 0) { + $this->_out($this->embedded_start_obj_id.' '.count($this->embeddedfiles)); + foreach ($this->embeddedfiles as $filename => $filedata) { + $this->_out(sprintf('%010d 00000 n ', $this->offsets[$filedata['n']])); + } + } + // Annotation Objects + if ($this->annot_obj_id > $this->annots_start_obj_id) { + $this->_out(($this->annots_start_obj_id + 1).' '.($this->annot_obj_id - $this->annots_start_obj_id)); + for ($i = ($this->annots_start_obj_id + 1); $i <= $this->annot_obj_id; ++$i) { + $this->_out(sprintf('%010d 00000 n ', $this->offsets[$i])); + } + } + // Javascript Objects + if ($this->js_obj_id > $this->js_start_obj_id) { + $this->_out(($this->js_start_obj_id + 1).' '.($this->js_obj_id - $this->js_start_obj_id)); + for ($i = ($this->js_start_obj_id + 1); $i <= $this->js_obj_id; ++$i) { + $this->_out(sprintf('%010d 00000 n ', $this->offsets[$i])); + } + } + // Appearance streams XObjects + if ($this->apxo_obj_id > $this->apxo_start_obj_id) { + $this->_out(($this->apxo_start_obj_id + 1).' '.($this->apxo_obj_id - $this->apxo_start_obj_id)); + for ($i = ($this->apxo_start_obj_id + 1); $i <= $this->apxo_obj_id; ++$i) { + $this->_out(sprintf('%010d 00000 n ', $this->offsets[$i])); + } + } + //Trailer + $this->_puttrailer(); + $this->_out('startxref'); + $this->_out($o); + $this->_out('%%EOF'); + $this->state = 3; // end-of-doc + if ($this->diskcache) { + // remove temporary files used for images + foreach ($this->imagekeys as $key) { + // remove temporary files + unlink($this->images[$key]); + } + foreach ($this->fontkeys as $key) { + // remove temporary files + unlink($this->fonts[$key]); + } + } + } + + /** + * Initialize a new page. + * @param string $orientation page orientation. Possible values are (case insensitive):
      • P or PORTRAIT (default)
      • L or LANDSCAPE
      + * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).
      • 4A0
      • 2A0
      • A0
      • A1
      • A2
      • A3
      • A4 (default)
      • A5
      • A6
      • A7
      • A8
      • A9
      • A10
      • B0
      • B1
      • B2
      • B3
      • B4
      • B5
      • B6
      • B7
      • B8
      • B9
      • B10
      • C0
      • C1
      • C2
      • C3
      • C4
      • C5
      • C6
      • C7
      • C8
      • C9
      • C10
      • RA0
      • RA1
      • RA2
      • RA3
      • RA4
      • SRA0
      • SRA1
      • SRA2
      • SRA3
      • SRA4
      • LETTER
      • LEGAL
      • EXECUTIVE
      • FOLIO
      + * @access protected + */ + protected function _beginpage($orientation='', $format='') { + ++$this->page; + $this->setPageBuffer($this->page, ''); + // initialize array for graphics tranformation positions inside a page buffer + $this->transfmrk[$this->page] = array(); + $this->state = 2; + if ($this->empty_string($orientation)) { + if (isset($this->CurOrientation)) { + $orientation = $this->CurOrientation; + } else { + $orientation = 'P'; + } + } + if ($this->empty_string($format)) { + $this->setPageOrientation($orientation); + } else { + $this->setPageFormat($format, $orientation); + } + if ($this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + $this->y = $this->tMargin; + if (isset($this->newpagegroup[$this->page])) { + // start a new group + $n = sizeof($this->pagegroups) + 1; + $alias = '{nb'.$n.'}'; + $this->pagegroups[$alias] = 1; + $this->currpagegroup = $alias; + } elseif ($this->currpagegroup) { + ++$this->pagegroups[$this->currpagegroup]; + } + } + + /** + * Mark end of page. + * @access protected + */ + protected function _endpage() { + $this->setVisibility('all'); + $this->state = 1; + } + + /** + * Begin a new object and return the object number. + * @return int object number + * @access protected + */ + protected function _newobj() { + ++$this->n; + $this->offsets[$this->n] = $this->bufferlen; + $this->_out($this->n.' 0 obj'); + return $this->n; + } + + /** + * Underline text. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param string $txt text to underline + * @access protected + */ + protected function _dounderline($x, $y, $txt) { + $w = $this->GetStringWidth($txt); + return $this->_dounderlinew($x, $y, $w); + } + + /** + * Underline for rectangular text area. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param int $w width to underline + * @access protected + * @since 4.8.008 (2009-09-29) + */ + protected function _dounderlinew($x, $y, $w) { + $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; + return sprintf('%.2F %.2F %.2F %.2F re f', $x * $this->k, ($this->h - $y + ($linew / 2)) * $this->k, $w * $this->k, $linew); + } + + /** + * Line through text. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param string $txt text to linethrough + * @access protected + */ + protected function _dolinethrough($x, $y, $txt) { + $w = $this->GetStringWidth($txt); + return $this->_dolinethroughw($x, $y, $w); + } + + /** + * Line through for rectangular text area. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param string $txt text to linethrough + * @access protected + * @since 4.9.008 (2009-09-29) + */ + protected function _dolinethroughw($x, $y, $w) { + $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; + return sprintf('%.2F %.2F %.2F %.2F re f', $x * $this->k, ($this->h - $y + ($this->FontSize / 3) + ($linew / 2)) * $this->k, $w * $this->k, $linew); + } + + /** + * Overline text. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param string $txt text to overline + * @access protected + * @since 4.9.015 (2010-04-19) + */ + protected function _dooverline($x, $y, $txt) { + $w = $this->GetStringWidth($txt); + return $this->_dooverlinew($x, $y, $w); + } + + /** + * Overline for rectangular text area. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param int $w width to overline + * @access protected + * @since 4.9.015 (2010-04-19) + */ + protected function _dooverlinew($x, $y, $w) { + $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; + return sprintf('%.2F %.2F %.2F %.2F re f', $x * $this->k, ($this->h - $y + $this->FontAscent - ($linew / 2)) * $this->k, $w * $this->k, $linew); + + } + + /** + * Read a 4-byte integer from file. + * @param string $f file name. + * @return 4-byte integer + * @access protected + */ + protected function _freadint($f) { + $a = unpack('Ni', fread($f, 4)); + return $a['i']; + } + + /** + * Add "\" before "\", "(" and ")" + * @param string $s string to escape. + * @return string escaped string. + * @access protected + */ + protected function _escape($s) { + // the chr(13) substitution fixes the Bugs item #1421290. + return strtr($s, array(')' => '\\)', '(' => '\\(', '\\' => '\\\\', chr(13) => '\r')); + } + + /** + * Format a data string for meta information + * @param string $s data string to escape. + * @return string escaped string. + * @access protected + */ + protected function _datastring($s) { + if ($this->encrypted) { + $s = $this->_RC4($this->_objectkey($this->n), $s); + } + return '('. $this->_escape($s).')'; + } + + /** + * Format a data string for annotation objects + * @param string $s data string to escape. + * @return string escaped string. + * @access protected + */ + protected function _dataannobjstring($s) { + if ($this->encrypted) { + $s = $this->_RC4($this->_objectkey($this->annot_obj_id + 1), $s); + } + return '('. $this->_escape($s).')'; + } + + /** + * Returns a formatted date for meta information + * @return string escaped date string. + * @access protected + * @since 4.6.028 (2009-08-25) + */ + protected function _datestring() { + $current_time = substr_replace(date('YmdHisO'), '\'', (0 - 2), 0).'\''; + return $this->_datastring('D:'.$current_time); + } + + /** + * Format a text string for meta information + * @param string $s string to escape. + * @return string escaped string. + * @access protected + */ + protected function _textstring($s) { + if ($this->isunicode) { + //Convert string to UTF-16BE + $s = $this->UTF8ToUTF16BE($s, true); + } + return $this->_datastring($s); + } + + /** + * Format a UTF-8 text string for meta information on annotations + * @param string $s string to escape. + * @return string escaped string. + * @access protected + */ + protected function _textannobjstring($s) { + if ($this->isunicode) { + //Convert string to UTF-16BE + $s = $this->UTF8ToUTF16BE($s, true); + } + return $this->_dataannobjstring($s); + } + + /** + * Format a text string + * @param string $s string to escape. + * @return string escaped string. + * @access protected + */ + protected function _escapetext($s) { + if ($this->isunicode) { + if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) { + $s = $this->UTF8ToLatin1($s); + } else { + //Convert string to UTF-16BE and reverse RTL language + $s = $this->utf8StrRev($s, false, $this->tmprtl); + } + } + return $this->_escape($s); + } + + /** + * Format output stream. + * @param string $s string to output. + * @param int $n object reference for encryption mode + * @access protected + */ + protected function _getstream($s, $n=0) { + if ($this->encrypted) { + if ($n <= 0) { + // default to current object + $n = $this->n; + } + $s = $this->_RC4($this->_objectkey($n), $s); + } + return "stream\n".$s."\nendstream"; + } + + /** + * Output a stream. + * @param string $s string to output. + * @param int $n object reference for encryption mode + * @access protected + */ + protected function _putstream($s, $n=0) { + $this->_out($this->_getstream($s, $n)); + } + + /** + * Output a string to the document. + * @param string $s string to output. + * @access protected + */ + protected function _out($s) { + if ($this->state == 2) { + if ((!$this->InFooter) AND isset($this->footerlen[$this->page]) AND ($this->footerlen[$this->page] > 0)) { + // puts data before page footer + $pagebuff = $this->getPageBuffer($this->page); + $page = substr($pagebuff, 0, -$this->footerlen[$this->page]); + $footer = substr($pagebuff, -$this->footerlen[$this->page]); + $this->setPageBuffer($this->page, $page.$s."\n".$footer); + // update footer position + $this->footerpos[$this->page] += strlen($s."\n"); + } else { + $this->setPageBuffer($this->page, $s."\n", true); + } + } else { + $this->setBuffer($s."\n"); + } + } + + /** + * Converts UTF-8 strings to codepoints array.
      + * Invalid byte sequences will be replaced with 0xFFFD (replacement character)
      + * Based on: http://www.faqs.org/rfcs/rfc3629.html + *
      +		 *    Char. number range  |        UTF-8 octet sequence
      +		 *       (hexadecimal)    |              (binary)
      +		 *    --------------------+-----------------------------------------------
      +		 *    0000 0000-0000 007F | 0xxxxxxx
      +		 *    0000 0080-0000 07FF | 110xxxxx 10xxxxxx
      +		 *    0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
      +		 *    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
      +		 *    ---------------------------------------------------------------------
      +		 *
      +		 *   ABFN notation:
      +		 *   ---------------------------------------------------------------------
      +		 *   UTF8-octets = *( UTF8-char )
      +		 *   UTF8-char   = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4
      +		 *   UTF8-1      = %x00-7F
      +		 *   UTF8-2      = %xC2-DF UTF8-tail
      +		 *
      +		 *   UTF8-3      = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
      +		 *                 %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
      +		 *   UTF8-4      = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
      +		 *                 %xF4 %x80-8F 2( UTF8-tail )
      +		 *   UTF8-tail   = %x80-BF
      +		 *   ---------------------------------------------------------------------
      +		 * 
      + * @param string $str string to process. + * @return array containing codepoints (UTF-8 characters values) + * @access protected + * @author Nicola Asuni + * @since 1.53.0.TC005 (2005-01-05) + */ + protected function UTF8StringToArray($str) { + if (isset($this->cache_UTF8StringToArray['_'.$str])) { + // return cached value + return($this->cache_UTF8StringToArray['_'.$str]); + } + // check cache size + if ($this->cache_size_UTF8StringToArray >= $this->cache_maxsize_UTF8StringToArray) { + // remove first element + array_shift($this->cache_UTF8StringToArray); + } + ++$this->cache_size_UTF8StringToArray; + if (!$this->isunicode) { + // split string into array of equivalent codes + $strarr = array(); + $strlen = strlen($str); + for ($i=0; $i < $strlen; ++$i) { + $strarr[] = ord($str{$i}); + } + // insert new value on cache + $this->cache_UTF8StringToArray['_'.$str] = $strarr; + return $strarr; + } + $unicode = array(); // array containing unicode values + $bytes = array(); // array containing single character byte sequences + $numbytes = 1; // number of octetc needed to represent the UTF-8 character + $str .= ''; // force $str to be a string + $length = strlen($str); + for ($i = 0; $i < $length; ++$i) { + $char = ord($str{$i}); // get one string character at time + if (count($bytes) == 0) { // get starting octect + if ($char <= 0x7F) { + $unicode[] = $char; // use the character "as is" because is ASCII + $numbytes = 1; + } elseif (($char >> 0x05) == 0x06) { // 2 bytes character (0x06 = 110 BIN) + $bytes[] = ($char - 0xC0) << 0x06; + $numbytes = 2; + } elseif (($char >> 0x04) == 0x0E) { // 3 bytes character (0x0E = 1110 BIN) + $bytes[] = ($char - 0xE0) << 0x0C; + $numbytes = 3; + } elseif (($char >> 0x03) == 0x1E) { // 4 bytes character (0x1E = 11110 BIN) + $bytes[] = ($char - 0xF0) << 0x12; + $numbytes = 4; + } else { + // use replacement character for other invalid sequences + $unicode[] = 0xFFFD; + $bytes = array(); + $numbytes = 1; + } + } elseif (($char >> 0x06) == 0x02) { // bytes 2, 3 and 4 must start with 0x02 = 10 BIN + $bytes[] = $char - 0x80; + if (count($bytes) == $numbytes) { + // compose UTF-8 bytes to a single unicode value + $char = $bytes[0]; + for ($j = 1; $j < $numbytes; ++$j) { + $char += ($bytes[$j] << (($numbytes - $j - 1) * 0x06)); + } + if ((($char >= 0xD800) AND ($char <= 0xDFFF)) OR ($char >= 0x10FFFF)) { + /* The definition of UTF-8 prohibits encoding character numbers between + U+D800 and U+DFFF, which are reserved for use with the UTF-16 + encoding form (as surrogate pairs) and do not directly represent + characters. */ + $unicode[] = 0xFFFD; // use replacement character + } else { + $unicode[] = $char; // add char to array + } + // reset data for next char + $bytes = array(); + $numbytes = 1; + } + } else { + // use replacement character for other invalid sequences + $unicode[] = 0xFFFD; + $bytes = array(); + $numbytes = 1; + } + } + // insert new value on cache + $this->cache_UTF8StringToArray['_'.$str] = $unicode; + return $unicode; + } + + /** + * Converts UTF-8 strings to UTF16-BE.
      + * @param string $str string to process. + * @param boolean $setbom if true set the Byte Order Mark (BOM = 0xFEFF) + * @return string + * @access protected + * @author Nicola Asuni + * @since 1.53.0.TC005 (2005-01-05) + * @uses UTF8StringToArray(), arrUTF8ToUTF16BE() + */ + protected function UTF8ToUTF16BE($str, $setbom=true) { + if (!$this->isunicode) { + return $str; // string is not in unicode + } + $unicode = $this->UTF8StringToArray($str); // array containing UTF-8 unicode values + return $this->arrUTF8ToUTF16BE($unicode, $setbom); + } + + /** + * Converts UTF-8 strings to Latin1 when using the standard 14 core fonts.
      + * @param string $str string to process. + * @return string + * @author Andrew Whitehead, Nicola Asuni + * @access protected + * @since 3.2.000 (2008-06-23) + */ + protected function UTF8ToLatin1($str) { + global $utf8tolatin; + if (!$this->isunicode) { + return $str; // string is not in unicode + } + $outstr = ''; // string to be returned + $unicode = $this->UTF8StringToArray($str); // array containing UTF-8 unicode values + foreach ($unicode as $char) { + if ($char < 256) { + $outstr .= chr($char); + } elseif (array_key_exists($char, $utf8tolatin)) { + // map from UTF-8 + $outstr .= chr($utf8tolatin[$char]); + } elseif ($char == 0xFFFD) { + // skip + } else { + $outstr .= '?'; + } + } + return $outstr; + } + + /** + * Converts UTF-8 characters array to array of Latin1 characters
      + * @param array $unicode array containing UTF-8 unicode values + * @return array + * @author Nicola Asuni + * @access protected + * @since 4.8.023 (2010-01-15) + */ + protected function UTF8ArrToLatin1($unicode) { + global $utf8tolatin; + if ((!$this->isunicode) OR ($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + return $unicode; // string is not in unicode + } + $outarr = array(); // array to be returned + foreach ($unicode as $char) { + if ($char < 256) { + $outarr[] = $char; + } elseif (array_key_exists($char, $utf8tolatin)) { + // map from UTF-8 + $outarr[] = $utf8tolatin[$char]; + } elseif ($char == 0xFFFD) { + // skip + } else { + $outarr[] = 63; // '?' character + } + } + return $outarr; + } + + /** + * Converts array of UTF-8 characters to UTF16-BE string.
      + * Based on: http://www.faqs.org/rfcs/rfc2781.html + *
      +		 *   Encoding UTF-16:
      +		 *
      + 		 *   Encoding of a single character from an ISO 10646 character value to
      +		 *    UTF-16 proceeds as follows. Let U be the character number, no greater
      +		 *    than 0x10FFFF.
      +		 *
      +		 *    1) If U < 0x10000, encode U as a 16-bit unsigned integer and
      +		 *       terminate.
      +		 *
      +		 *    2) Let U' = U - 0x10000. Because U is less than or equal to 0x10FFFF,
      +		 *       U' must be less than or equal to 0xFFFFF. That is, U' can be
      +		 *       represented in 20 bits.
      +		 *
      +		 *    3) Initialize two 16-bit unsigned integers, W1 and W2, to 0xD800 and
      +		 *       0xDC00, respectively. These integers each have 10 bits free to
      +		 *       encode the character value, for a total of 20 bits.
      +		 *
      +		 *    4) Assign the 10 high-order bits of the 20-bit U' to the 10 low-order
      +		 *       bits of W1 and the 10 low-order bits of U' to the 10 low-order
      +		 *       bits of W2. Terminate.
      +		 *
      +		 *    Graphically, steps 2 through 4 look like:
      +		 *    U' = yyyyyyyyyyxxxxxxxxxx
      +		 *    W1 = 110110yyyyyyyyyy
      +		 *    W2 = 110111xxxxxxxxxx
      +		 * 
      + * @param array $unicode array containing UTF-8 unicode values + * @param boolean $setbom if true set the Byte Order Mark (BOM = 0xFEFF) + * @return string + * @access protected + * @author Nicola Asuni + * @since 2.1.000 (2008-01-08) + * @see UTF8ToUTF16BE() + */ + protected function arrUTF8ToUTF16BE($unicode, $setbom=true) { + $outstr = ''; // string to be returned + if ($setbom) { + $outstr .= "\xFE\xFF"; // Byte Order Mark (BOM) + } + foreach ($unicode as $char) { + if ($char == 0xFFFD) { + $outstr .= "\xFF\xFD"; // replacement character + } elseif ($char < 0x10000) { + $outstr .= chr($char >> 0x08); + $outstr .= chr($char & 0xFF); + } else { + $char -= 0x10000; + $w1 = 0xD800 | ($char >> 0x10); + $w2 = 0xDC00 | ($char & 0x3FF); + $outstr .= chr($w1 >> 0x08); + $outstr .= chr($w1 & 0xFF); + $outstr .= chr($w2 >> 0x08); + $outstr .= chr($w2 & 0xFF); + } + } + return $outstr; + } + // ==================================================== + + /** + * Set header font. + * @param array $font font + * @access public + * @since 1.1 + */ + public function setHeaderFont($font) { + $this->header_font = $font; + } + + /** + * Get header font. + * @return array() + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getHeaderFont() { + return $this->header_font; + } + + /** + * Set footer font. + * @param array $font font + * @access public + * @since 1.1 + */ + public function setFooterFont($font) { + $this->footer_font = $font; + } + + /** + * Get Footer font. + * @return array() + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getFooterFont() { + return $this->footer_font; + } + + /** + * Set language array. + * @param array $language + * @access public + * @since 1.1 + */ + public function setLanguageArray($language) { + $this->l = $language; + if (isset($this->l['a_meta_dir'])) { + $this->rtl = $this->l['a_meta_dir']=='rtl' ? true : false; + } else { + $this->rtl = false; + } + } + + /** + * Returns the PDF data. + * @access public + */ + public function getPDFData() { + if ($this->state < 3) { + $this->Close(); + } + return $this->buffer; + } + + /** + * Output anchor link. + * @param string $url link URL or internal link (i.e.: <a href="#23">link to page 23</a>) + * @param string $name link name + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param boolean $firstline if true prints only the first line and return the remaining string. + * @param array $color array of RGB text color + * @param string $style font style (U, D, B, I) + * @param boolean $firstblock if true the string is the starting of a line. + * @return the number of cells used or the remaining text if $firstline = true; + * @access public + */ + public function addHtmlLink($url, $name, $fill=0, $firstline=false, $color='', $style=-1, $firstblock=false) { + if (!$this->empty_string($url) AND ($url{0} == '#')) { + // convert url to internal link + $page = intval(substr($url, 1)); + $url = $this->AddLink(); + $this->SetLink($url, 0, $page); + } + // store current settings + $prevcolor = $this->fgcolor; + $prevstyle = $this->FontStyle; + if (empty($color)) { + $this->SetTextColorArray($this->htmlLinkColorArray); + } else { + $this->SetTextColorArray($color); + } + if ($style == -1) { + $this->SetFont('', $this->FontStyle.$this->htmlLinkFontStyle); + } else { + $this->SetFont('', $this->FontStyle.$style); + } + $ret = $this->Write($this->lasth, $name, $url, $fill, '', false, 0, $firstline, $firstblock, 0); + // restore settings + $this->SetFont('', $prevstyle); + $this->SetTextColorArray($prevcolor); + return $ret; + } + + /** + * Returns an associative array (keys: R,G,B) from an html color name or a six-digit or three-digit hexadecimal color representation (i.e. #3FE5AA or #7FF). + * @param string $color html color + * @return array RGB color or false in case of error. + * @access public + */ + public function convertHTMLColorToDec($color='#FFFFFF') { + global $webcolor; + $returncolor = false; + $color = preg_replace('/[\s]*/', '', $color); // remove extra spaces + $color = strtolower($color); + if (($dotpos = strpos($color, '.')) !== false) { + // remove class parent (i.e.: color.red) + $color = substr($color, ($dotpos + 1)); + } + if (strlen($color) == 0) { + return false; + } + if (substr($color, 0, 3) == 'rgb') { + $codes = substr($color, 4); + $codes = str_replace(')', '', $codes); + $returncolor = explode(',', $codes, 3); + return $returncolor; + } + if (substr($color, 0, 1) != '#') { + // decode color name + if (isset($webcolor[$color])) { + $color_code = $webcolor[$color]; + } else { + return false; + } + } else { + $color_code = substr($color, 1); + } + switch (strlen($color_code)) { + case 3: { + // three-digit hexadecimal representation + $r = substr($color_code, 0, 1); + $g = substr($color_code, 1, 1); + $b = substr($color_code, 2, 1); + $returncolor['R'] = hexdec($r.$r); + $returncolor['G'] = hexdec($g.$g); + $returncolor['B'] = hexdec($b.$b); + break; + } + case 6: { + // six-digit hexadecimal representation + $returncolor['R'] = hexdec(substr($color_code, 0, 2)); + $returncolor['G'] = hexdec(substr($color_code, 2, 2)); + $returncolor['B'] = hexdec(substr($color_code, 4, 2)); + break; + } + } + return $returncolor; + } + + /** + * Converts pixels to User's Units. + * @param int $px pixels + * @return float value in user's unit + * @access public + * @see setImageScale(), getImageScale() + */ + public function pixelsToUnits($px) { + return ($px / ($this->imgscale * $this->k)); + } + + /** + * Reverse function for htmlentities. + * Convert entities in UTF-8. + * @param $text_to_convert Text to convert. + * @return string converted + * @access public + */ + public function unhtmlentities($text_to_convert) { + return html_entity_decode($text_to_convert, ENT_QUOTES, $this->encoding); + } + + // ENCRYPTION METHODS ---------------------------------- + // SINCE 2.0.000 (2008-01-02) + + /** + * Compute encryption key depending on object number where the encrypted data is stored + * @param int $n object number + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected function _objectkey($n) { + return substr($this->_md5_16($this->encryption_key.pack('VXxx', $n)), 0, 10); + } + + /** + * Put encryption on PDF document. + * @access protected + * @since 2.0.000 (2008-01-02) + */ + protected function _putencryption() { + if (!$this->encrypted) { + return; + } + $this->_newobj(); + $this->enc_obj_id = $this->n; + $out = '<< /Filter /Standard /V 1 /R 2'; + $out .= ' /O ('.$this->_escape($this->Ovalue).')'; + $out .= ' /U ('.$this->_escape($this->Uvalue).')'; + $out .= ' /P '.$this->Pvalue; + $out .= ' >> endobj'; + $this->_out($out); + } + + /** + * Returns the input text exrypted using RC4 algorithm and the specified key. + * RC4 is the standard encryption algorithm used in PDF format + * @param string $key encryption key + * @param String $text input text to be encrypted + * @return String encrypted text + * @access protected + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec + */ + protected function _RC4($key, $text) { + if ($this->last_rc4_key != $key) { + $k = str_repeat($key, ((256 / strlen($key)) + 1)); + $rc4 = range(0, 255); + $j = 0; + for ($i = 0; $i < 256; ++$i) { + $t = $rc4[$i]; + $j = ($j + $t + ord($k{$i})) % 256; + $rc4[$i] = $rc4[$j]; + $rc4[$j] = $t; + } + $this->last_rc4_key = $key; + $this->last_rc4_key_c = $rc4; + } else { + $rc4 = $this->last_rc4_key_c; + } + $len = strlen($text); + $a = 0; + $b = 0; + $out = ''; + for ($i = 0; $i < $len; ++$i) { + $a = ($a + 1) % 256; + $t = $rc4[$a]; + $b = ($b + $t) % 256; + $rc4[$a] = $rc4[$b]; + $rc4[$b] = $t; + $k = $rc4[($rc4[$a] + $rc4[$b]) % 256]; + $out .= chr(ord($text{$i}) ^ $k); + } + return $out; + } + + /** + * Encrypts a string using MD5 and returns it's value as a binary string. + * @param string $str input string + * @return String MD5 encrypted binary string + * @access protected + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec + */ + protected function _md5_16($str) { + return pack('H*', md5($str)); + } + + /** + * Compute O value (used for RC4 encryption) + * @param String $user_pass user password + * @param String $owner_pass user password + * @return String O value + * @access protected + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec + */ + protected function _Ovalue($user_pass, $owner_pass) { + $tmp = $this->_md5_16($owner_pass); + $owner_RC4_key = substr($tmp, 0, 5); + return $this->_RC4($owner_RC4_key, $user_pass); + } + + /** + * Compute U value (used for RC4 encryption) + * @return String U value + * @access protected + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec + */ + protected function _Uvalue() { + return $this->_RC4($this->encryption_key, $this->padding); + } + + /** + * Compute encryption key + * @param String $user_pass user password + * @param String $owner_pass user password + * @param String $protection protection type + * @access protected + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec + */ + protected function _generateencryptionkey($user_pass, $owner_pass, $protection) { + // Pad passwords + $user_pass = substr($user_pass.$this->padding, 0, 32); + $owner_pass = substr($owner_pass.$this->padding, 0, 32); + // Compute O value + $this->Ovalue = $this->_Ovalue($user_pass, $owner_pass); + // Compute encyption key + $tmp = $this->_md5_16($user_pass.$this->Ovalue.chr($protection)."\xFF\xFF\xFF"); + $this->encryption_key = substr($tmp, 0, 5); + // Compute U value + $this->Uvalue = $this->_Uvalue(); + // Compute P value + $this->Pvalue = -(($protection^255) + 1); + } + + /** + * Set document protection + * The permission array is composed of values taken from the following ones: + * - copy: copy text and images to the clipboard + * - print: print the document + * - modify: modify it (except for annotations and forms) + * - annot-forms: add annotations and forms + * Remark: the protection against modification is for people who have the full Acrobat product. + * If you don't set any password, the document will open as usual. If you set a user password, the PDF viewer will ask for it before displaying the document. The master password, if different from the user one, can be used to get full access. + * Note: protecting a document requires to encrypt it, which increases the processing time a lot. This can cause a PHP time-out in some cases, especially if the document contains images or fonts. + * @param Array $permissions the set of permissions. Empty by default (only viewing is allowed). (print, modify, copy, annot-forms) + * @param String $user_pass user password. Empty by default. + * @param String $owner_pass owner password. If not specified, a random value is used. + * @access public + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec + */ + public function SetProtection($permissions=array(), $user_pass='', $owner_pass=null) { + $options = array('print' => 4, 'modify' => 8, 'copy' => 16, 'annot-forms' => 32); + $protection = 192; + foreach ($permissions as $permission) { + if (!isset($options[$permission])) { + $this->Error('Incorrect permission: '.$permission); + } + $protection += $options[$permission]; + } + if ($owner_pass === null) { + $owner_pass = uniqid(rand()); + } + $this->encrypted = true; + $this->_generateencryptionkey($user_pass, $owner_pass, $protection); + } + + // END OF ENCRYPTION FUNCTIONS ------------------------- + + // START TRANSFORMATIONS SECTION ----------------------- + + /** + * Starts a 2D tranformation saving current graphic state. + * This function must be called before scaling, mirroring, translation, rotation and skewing. + * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function StartTransform() { + $this->_out('q'); + $this->transfmrk[$this->page][] = $this->pagelen[$this->page]; + ++$this->transfmatrix_key; + $this->transfmatrix[$this->transfmatrix_key] = array(); + } + + /** + * Stops a 2D tranformation restoring previous graphic state. + * This function must be called after scaling, mirroring, translation, rotation and skewing. + * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function StopTransform() { + $this->_out('Q'); + if (isset($this->transfmatrix[$this->transfmatrix_key])) { + array_pop($this->transfmatrix[$this->transfmatrix_key]); + --$this->transfmatrix_key; + } + array_pop($this->transfmrk[$this->page]); + } + /** + * Horizontal Scaling. + * @param float $s_x scaling factor for width as percent. 0 is not allowed. + * @param int $x abscissa of the scaling center. Default is current x position + * @param int $y ordinate of the scaling center. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function ScaleX($s_x, $x='', $y='') { + $this->Scale($s_x, 100, $x, $y); + } + + /** + * Vertical Scaling. + * @param float $s_y scaling factor for height as percent. 0 is not allowed. + * @param int $x abscissa of the scaling center. Default is current x position + * @param int $y ordinate of the scaling center. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function ScaleY($s_y, $x='', $y='') { + $this->Scale(100, $s_y, $x, $y); + } + + /** + * Vertical and horizontal proportional Scaling. + * @param float $s scaling factor for width and height as percent. 0 is not allowed. + * @param int $x abscissa of the scaling center. Default is current x position + * @param int $y ordinate of the scaling center. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function ScaleXY($s, $x='', $y='') { + $this->Scale($s, $s, $x, $y); + } + + /** + * Vertical and horizontal non-proportional Scaling. + * @param float $s_x scaling factor for width as percent. 0 is not allowed. + * @param float $s_y scaling factor for height as percent. 0 is not allowed. + * @param int $x abscissa of the scaling center. Default is current x position + * @param int $y ordinate of the scaling center. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Scale($s_x, $s_y, $x='', $y='') { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if (($s_x == 0) OR ($s_y == 0)) { + $this->Error('Please do not use values equal to zero for scaling'); + } + $y = ($this->h - $y) * $this->k; + $x *= $this->k; + //calculate elements of transformation matrix + $s_x /= 100; + $s_y /= 100; + $tm[0] = $s_x; + $tm[1] = 0; + $tm[2] = 0; + $tm[3] = $s_y; + $tm[4] = $x * (1 - $s_x); + $tm[5] = $y * (1 - $s_y); + //scale the coordinate system + $this->Transform($tm); + } + + /** + * Horizontal Mirroring. + * @param int $x abscissa of the point. Default is current x position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorH($x='') { + $this->Scale(-100, 100, $x); + } + + /** + * Verical Mirroring. + * @param int $y ordinate of the point. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorV($y='') { + $this->Scale(100, -100, '', $y); + } + + /** + * Point reflection mirroring. + * @param int $x abscissa of the point. Default is current x position + * @param int $y ordinate of the point. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorP($x='',$y='') { + $this->Scale(-100, -100, $x, $y); + } + + /** + * Reflection against a straight line through point (x, y) with the gradient angle (angle). + * @param float $angle gradient angle of the straight line. Default is 0 (horizontal line). + * @param int $x abscissa of the point. Default is current x position + * @param int $y ordinate of the point. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorL($angle=0, $x='',$y='') { + $this->Scale(-100, 100, $x, $y); + $this->Rotate(-2*($angle-90), $x, $y); + } + + /** + * Translate graphic object horizontally. + * @param int $t_x movement to the right (or left for RTL) + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function TranslateX($t_x) { + $this->Translate($t_x, 0); + } + + /** + * Translate graphic object vertically. + * @param int $t_y movement to the bottom + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function TranslateY($t_y) { + $this->Translate(0, $t_y); + } + + /** + * Translate graphic object horizontally and vertically. + * @param int $t_x movement to the right + * @param int $t_y movement to the bottom + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Translate($t_x, $t_y) { + //calculate elements of transformation matrix + $tm[0] = 1; + $tm[1] = 0; + $tm[2] = 0; + $tm[3] = 1; + $tm[4] = $t_x * $this->k; + $tm[5] = -$t_y * $this->k; + //translate the coordinate system + $this->Transform($tm); + } + + /** + * Rotate object. + * @param float $angle angle in degrees for counter-clockwise rotation + * @param int $x abscissa of the rotation center. Default is current x position + * @param int $y ordinate of the rotation center. Default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Rotate($angle, $x='', $y='') { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + $y = ($this->h - $y) * $this->k; + $x *= $this->k; + //calculate elements of transformation matrix + $tm[0] = cos(deg2rad($angle)); + $tm[1] = sin(deg2rad($angle)); + $tm[2] = -$tm[1]; + $tm[3] = $tm[0]; + $tm[4] = $x + ($tm[1] * $y) - ($tm[0] * $x); + $tm[5] = $y - ($tm[0] * $y) - ($tm[1] * $x); + //rotate the coordinate system around ($x,$y) + $this->Transform($tm); + } + + /** + * Skew horizontally. + * @param float $angle_x angle in degrees between -90 (skew to the left) and 90 (skew to the right) + * @param int $x abscissa of the skewing center. default is current x position + * @param int $y ordinate of the skewing center. default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function SkewX($angle_x, $x='', $y='') { + $this->Skew($angle_x, 0, $x, $y); + } + + /** + * Skew vertically. + * @param float $angle_y angle in degrees between -90 (skew to the bottom) and 90 (skew to the top) + * @param int $x abscissa of the skewing center. default is current x position + * @param int $y ordinate of the skewing center. default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function SkewY($angle_y, $x='', $y='') { + $this->Skew(0, $angle_y, $x, $y); + } + + /** + * Skew. + * @param float $angle_x angle in degrees between -90 (skew to the left) and 90 (skew to the right) + * @param float $angle_y angle in degrees between -90 (skew to the bottom) and 90 (skew to the top) + * @param int $x abscissa of the skewing center. default is current x position + * @param int $y ordinate of the skewing center. default is current y position + * @access public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Skew($angle_x, $angle_y, $x='', $y='') { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if (($angle_x <= -90) OR ($angle_x >= 90) OR ($angle_y <= -90) OR ($angle_y >= 90)) { + $this->Error('Please use values between -90 and +90 degrees for Skewing.'); + } + $x *= $this->k; + $y = ($this->h - $y) * $this->k; + //calculate elements of transformation matrix + $tm[0] = 1; + $tm[1] = tan(deg2rad($angle_y)); + $tm[2] = tan(deg2rad($angle_x)); + $tm[3] = 1; + $tm[4] = -$tm[2] * $y; + $tm[5] = -$tm[1] * $x; + //skew the coordinate system + $this->Transform($tm); + } + + /** + * Apply graphic transformations. + * @param array $tm transformation matrix + * @access protected + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + protected function Transform($tm) { + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5])); + // add tranformation matrix + $this->transfmatrix[$this->transfmatrix_key][] = array('a' => $tm[0], 'b' => $tm[1], 'c' => $tm[2], 'd' => $tm[3], 'e' => $tm[4], 'f' => $tm[5]); + // update tranformation mark + if (end($this->transfmrk[$this->page]) !== false) { + $key = key($this->transfmrk[$this->page]); + $this->transfmrk[$this->page][$key] = $this->pagelen[$this->page]; + } + } + + // END TRANSFORMATIONS SECTION ------------------------- + + + // START GRAPHIC FUNCTIONS SECTION --------------------- + // The following section is based on the code provided by David Hernandez Sanz + + /** + * Defines the line width. By default, the value equals 0.2 mm. The method can be called before the first page is created and the value is retained from page to page. + * @param float $width The width. + * @access public + * @since 1.0 + * @see Line(), Rect(), Cell(), MultiCell() + */ + public function SetLineWidth($width) { + //Set line width + $this->LineWidth = $width; + $this->linestyleWidth = sprintf('%.2F w', ($width * $this->k)); + if ($this->page > 0) { + $this->_out($this->linestyleWidth); + } + } + + /** + * Returns the current the line width. + * @return int Line width + * @access public + * @since 2.1.000 (2008-01-07) + * @see Line(), SetLineWidth() + */ + public function GetLineWidth() { + return $this->LineWidth; + } + + /** + * Set line style. + * @param array $style Line style. Array with keys among the following: + *
        + *
      • width (float): Width of the line in user units.
      • + *
      • cap (string): Type of cap to put on the line. Possible values are: + * butt, round, square. The difference between "square" and "butt" is that + * "square" projects a flat end past the end of the line.
      • + *
      • join (string): Type of join. Possible values are: miter, round, + * bevel.
      • + *
      • dash (mixed): Dash pattern. Is 0 (without dash) or string with + * series of length values, which are the lengths of the on and off dashes. + * For example: "2" represents 2 on, 2 off, 2 on, 2 off, ...; "2,1" is 2 on, + * 1 off, 2 on, 1 off, ...
      • + *
      • phase (integer): Modifier on the dash pattern which is used to shift + * the point at which the pattern starts.
      • + *
      • color (array): Draw color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K).
      • + *
      + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function SetLineStyle($style) { + if (!is_array($style)) { + return; + } + extract($style); + if (isset($width)) { + $width_prev = $this->LineWidth; + $this->SetLineWidth($width); + $this->LineWidth = $width_prev; + } + if (isset($cap)) { + $ca = array('butt' => 0, 'round'=> 1, 'square' => 2); + if (isset($ca[$cap])) { + $this->linestyleCap = $ca[$cap].' J'; + $this->_out($this->linestyleCap); + } + } + if (isset($join)) { + $ja = array('miter' => 0, 'round' => 1, 'bevel' => 2); + if (isset($ja[$join])) { + $this->linestyleJoin = $ja[$join].' j'; + $this->_out($this->linestyleJoin); + } + } + if (isset($dash)) { + $dash_string = ''; + if ($dash) { + if (preg_match('/^.+,/', $dash) > 0) { + $tab = explode(',', $dash); + } else { + $tab = array($dash); + } + $dash_string = ''; + foreach ($tab as $i => $v) { + if ($i) { + $dash_string .= ' '; + } + $dash_string .= sprintf('%.2F', $v); + } + } + if (!isset($phase) OR !$dash) { + $phase = 0; + } + $this->linestyleDash = sprintf('[%s] %.2F d', $dash_string, $phase); + $this->_out($this->linestyleDash); + } + if (isset($color)) { + $this->SetDrawColorArray($color); + } + } + + /** + * Begin a new subpath by moving the current point to coordinates (x, y), omitting any connecting line segment. + * @param float $x Abscissa of point. + * @param float $y Ordinate of point. + * @access protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outPoint($x, $y) { + $this->_out(sprintf('%.2F %.2F m', $x * $this->k, ($this->h - $y) * $this->k)); + } + + /** + * Append a straight line segment from the current point to the point (x, y). + * The new current point shall be (x, y). + * @param float $x Abscissa of end point. + * @param float $y Ordinate of end point. + * @access protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outLine($x, $y) { + $this->_out(sprintf('%.2F %.2F l', $x * $this->k, ($this->h - $y) * $this->k)); + } + + /** + * Append a rectangle to the current path as a complete subpath, with lower-left corner (x, y) and dimensions widthand height in user space. + * @param float $x Abscissa of upper-left corner (or upper-right corner for RTL language). + * @param float $y Ordinate of upper-left corner (or upper-right corner for RTL language). + * @param float $w Width. + * @param float $h Height. + * @param string $op options + * @access protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outRect($x, $y, $w, $h, $op) { + $this->_out(sprintf('%.2F %.2F %.2F %.2F re %s', $x * $this->k, ($this->h - $y) * $this->k, $w * $this->k, -$h * $this->k, $op)); + } + + /** + * Append a cubic Bzier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using (x1, y1) and (x2, y2) as the Bzier control points. + * The new current point shall be (x3, y3). + * @param float $x1 Abscissa of control point 1. + * @param float $y1 Ordinate of control point 1. + * @param float $x2 Abscissa of control point 2. + * @param float $y2 Ordinate of control point 2. + * @param float $x3 Abscissa of end point. + * @param float $y3 Ordinate of end point. + * @access protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outCurve($x1, $y1, $x2, $y2, $x3, $y3) { + $this->_out(sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c', $x1 * $this->k, ($this->h - $y1) * $this->k, $x2 * $this->k, ($this->h - $y2) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k)); + } + + /** + * Append a cubic Bzier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using the current point and (x2, y2) as the Bzier control points. + * The new current point shall be (x3, y3). + * @param float $x2 Abscissa of control point 2. + * @param float $y2 Ordinate of control point 2. + * @param float $x3 Abscissa of end point. + * @param float $y3 Ordinate of end point. + * @access protected + * @since 4.9.019 (2010-04-26) + */ + protected function _outCurveV($x2, $y2, $x3, $y3) { + $this->_out(sprintf('%.2F %.2F %.2F %.2F v', $x2 * $this->k, ($this->h - $y2) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k)); + } + + /** + * Append a cubic Bzier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using (x1, y1) and (x3, y3) as the Bzier control points. + * The new current point shall be (x3, y3). + * @param float $x1 Abscissa of control point 1. + * @param float $y1 Ordinate of control point 1. + * @param float $x2 Abscissa of control point 2. + * @param float $y2 Ordinate of control point 2. + * @param float $x3 Abscissa of end point. + * @param float $y3 Ordinate of end point. + * @access protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outCurveY($x1, $y1, $x3, $y3) { + $this->_out(sprintf('%.2F %.2F %.2F %.2F y', $x1 * $this->k, ($this->h - $y1) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k)); + } + + /** + * Draws a line between two points. + * @param float $x1 Abscissa of first point. + * @param float $y1 Ordinate of first point. + * @param float $x2 Abscissa of second point. + * @param float $y2 Ordinate of second point. + * @param array $style Line style. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @access public + * @since 1.0 + * @see SetLineWidth(), SetDrawColor(), SetLineStyle() + */ + public function Line($x1, $y1, $x2, $y2, $style=array()) { + if (is_array($style)) { + $this->SetLineStyle($style); + } + $this->_outPoint($x1, $y1); + $this->_outLine($x2, $y2); + $this->_out('S'); + } + + /** + * Draws a rectangle. + * @param float $x Abscissa of upper-left corner (or upper-right corner for RTL language). + * @param float $y Ordinate of upper-left corner (or upper-right corner for RTL language). + * @param float $w Width. + * @param float $h Height. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $border_style Border style of rectangle. Array with keys among the following: + *
        + *
      • all: Line style of all borders. Array like for {@link SetLineStyle SetLineStyle}.
      • + *
      • L, T, R, B or combinations: Line style of left, top, right or bottom border. Array like for {@link SetLineStyle SetLineStyle}.
      • + *
      + * If a key is not present or is null, not draws the border. Default value: default line style (empty array). + * @param array $border_style Border style of rectangle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @access public + * @since 1.0 + * @see SetLineStyle() + */ + public function Rect($x, $y, $w, $h, $style='', $border_style=array(), $fill_color=array()) { + if (!(false === strpos($style, 'F')) AND !empty($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = $this->getPathPaintOperator($style); + if ((!$border_style) OR (isset($border_style['all']))) { + if (isset($border_style['all']) AND $border_style['all']) { + $this->SetLineStyle($border_style['all']); + $border_style = array(); + } + } + $this->_outRect($x, $y, $w, $h, $op); + + if ($border_style) { + $border_style2 = array(); + foreach ($border_style as $line => $value) { + $length = strlen($line); + for ($i = 0; $i < $length; ++$i) { + $border_style2[$line[$i]] = $value; + } + } + $border_style = $border_style2; + if (isset($border_style['L']) AND $border_style['L']) { + $this->Line($x, $y, $x, $y + $h, $border_style['L']); + } + if (isset($border_style['T']) AND $border_style['T']) { + $this->Line($x, $y, $x + $w, $y, $border_style['T']); + } + if (isset($border_style['R']) AND $border_style['R']) { + $this->Line($x + $w, $y, $x + $w, $y + $h, $border_style['R']); + } + if (isset($border_style['B']) AND $border_style['B']) { + $this->Line($x, $y + $h, $x + $w, $y + $h, $border_style['B']); + } + } + } + + /** + * Draws a Bezier curve. + * The Bezier curve is a tangent to the line between the control points at + * either end of the curve. + * @param float $x0 Abscissa of start point. + * @param float $y0 Ordinate of start point. + * @param float $x1 Abscissa of control point 1. + * @param float $y1 Ordinate of control point 1. + * @param float $x2 Abscissa of control point 2. + * @param float $y2 Ordinate of control point 2. + * @param float $x3 Abscissa of end point. + * @param float $y3 Ordinate of end point. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of curve. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @access public + * @see SetLineStyle() + * @since 2.1.000 (2008-01-08) + */ + public function Curve($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3, $style='', $line_style=array(), $fill_color=array()) { + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = $this->getPathPaintOperator($style); + if ($line_style) { + $this->SetLineStyle($line_style); + } + $this->_outPoint($x0, $y0); + $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3); + $this->_out($op); + } + + /** + * Draws a poly-Bezier curve. + * Each Bezier curve segment is a tangent to the line between the control points at + * either end of the curve. + * @param float $x0 Abscissa of start point. + * @param float $y0 Ordinate of start point. + * @param float $segments An array of bezier descriptions. Format: array(x1, y1, x2, y2, x3, y3). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of curve. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @access public + * @see SetLineStyle() + * @since 3.0008 (2008-05-12) + */ + public function Polycurve($x0, $y0, $segments, $style='', $line_style=array(), $fill_color=array()) { + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = $this->getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + if ($line_style) { + $this->SetLineStyle($line_style); + } + $this->_outPoint($x0, $y0); + foreach ($segments as $segment) { + list($x1, $y1, $x2, $y2, $x3, $y3) = $segment; + $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3); + } + $this->_out($op); + } + + /** + * Draws an ellipse. + * An ellipse is formed from n Bezier curves. + * @param float $x0 Abscissa of center point. + * @param float $y0 Ordinate of center point. + * @param float $rx Horizontal radius. + * @param float $ry Vertical radius (if ry = 0 then is a circle, see {@link Circle Circle}). Default value: 0. + * @param float $angle: Angle oriented (anti-clockwise). Default value: 0. + * @param float $astart: Angle start of draw line. Default value: 0. + * @param float $afinish: Angle finish of draw line. Default value: 360. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of ellipse. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @param integer $nc Number of curves used to draw a 90 degrees portion of ellipse. + * @author Nicola Asuni + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function Ellipse($x0, $y0, $rx, $ry='', $angle=0, $astart=0, $afinish=360, $style='', $line_style=array(), $fill_color=array(), $nc=2) { + if ($this->empty_string($ry) OR ($ry == 0)) { + $ry = $rx; + } + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = $this->getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + if ($line_style) { + $this->SetLineStyle($line_style); + } + $this->_outellipticalarc($x0, $y0, $rx, $ry, $angle, $astart, $afinish, false, $nc); + $this->_out($op); + } + + /** + * Append an elliptical arc to the current path. + * An ellipse is formed from n Bezier curves. + * @param float $xc Abscissa of center point. + * @param float $yc Ordinate of center point. + * @param float $rx Horizontal radius. + * @param float $ry Vertical radius (if ry = 0 then is a circle, see {@link Circle Circle}). Default value: 0. + * @param float $xang: Angle between the X-axis and the major axis of the ellipse. Default value: 0. + * @param float $angs: Angle start of draw line. Default value: 0. + * @param float $angf: Angle finish of draw line. Default value: 360. + * @param boolean $pie if true do not mark the border point (used to draw pie sectors). + * @param integer $nc Number of curves used to draw a 90 degrees portion of ellipse. + * @author Nicola Asuni + * @access protected + * @since 4.9.019 (2010-04-26) + */ + protected function _outellipticalarc($xc, $yc, $rx, $ry, $xang=0, $angs=0, $angf=360, $pie=false, $nc=2) { + $k = $this->k; + if ($nc < 2) { + $nc = 2; + } + if ($pie) { + // center of the arc + $this->_outPoint($xc, $yc); + } + $xang = deg2rad((float) $xang); + $angs = deg2rad((float) $angs); + $angf = deg2rad((float) $angf); + $as = atan2((sin($angs) / $ry), (cos($angs) / $rx)); + $af = atan2((sin($angf) / $ry), (cos($angf) / $rx)); + if ($as < 0) { + $as += (2 * M_PI); + } + if ($af < 0) { + $af += (2 * M_PI); + } + if ($as > $af) { + // reverse rotation go clockwise + $as -= (2 * M_PI); + } + $total_angle = ($af - $as); + if ($nc < 2) { + $nc = 2; + } + // total arcs to draw + $nc *= (2 * abs($total_angle) / M_PI); + $nc = round($nc) + 1; + // angle of each arc + $arcang = $total_angle / $nc; + // center point in PDF coordiantes + $x0 = $xc; + $y0 = ($this->h - $yc); + // starting angle + $ang = $as; + $alpha = sin($arcang) * ((sqrt(4 + (3 * pow(tan(($arcang) / 2), 2))) - 1) / 3); + $cos_xang = cos($xang); + $sin_xang = sin($xang); + $cos_ang = cos($ang); + $sin_ang = sin($ang); + // first arc point + $px1 = $x0 + ($rx * $cos_xang * $cos_ang) - ($ry * $sin_xang * $sin_ang); + $py1 = $y0 + ($rx * $sin_xang * $cos_ang) + ($ry * $cos_xang * $sin_ang); + // first Bezier control point + $qx1 = ($alpha * ((-$rx * $cos_xang * $sin_ang) - ($ry * $sin_xang * $cos_ang))); + $qy1 = ($alpha * ((-$rx * $sin_xang * $sin_ang) + ($ry * $cos_xang * $cos_ang))); + if ($pie) { + $this->_outLine($px1, $this->h - $py1); + } else { + $this->_outPoint($px1, $this->h - $py1); + } + // draw arcs + for ($i = 1; $i <= $nc; ++$i) { + // starting angle + $ang = $as + ($i * $arcang); + $cos_xang = cos($xang); + $sin_xang = sin($xang); + $cos_ang = cos($ang); + $sin_ang = sin($ang); + // second arc point + $px2 = $x0 + ($rx * $cos_xang * $cos_ang) - ($ry * $sin_xang * $sin_ang); + $py2 = $y0 + ($rx * $sin_xang * $cos_ang) + ($ry * $cos_xang * $sin_ang); + // second Bezier control point + $qx2 = ($alpha * ((-$rx * $cos_xang * $sin_ang) - ($ry * $sin_xang * $cos_ang))); + $qy2 = ($alpha * ((-$rx * $sin_xang * $sin_ang) + ($ry * $cos_xang * $cos_ang))); + // draw arc + $this->_outCurve(($px1 + $qx1), ($this->h - ($py1 + $qy1)), ($px2 - $qx2), ($this->h - ($py2 - $qy2)), $px2, ($this->h - $py2)); + // move to next point + $px1 = $px2; + $py1 = $py2; + $qx1 = $qx2; + $qy1 = $qy2; + } + if ($pie) { + $this->_outLine($xc, $yc); + } + } + + + /** + * Draws a circle. + * A circle is formed from n Bezier curves. + * @param float $x0 Abscissa of center point. + * @param float $y0 Ordinate of center point. + * @param float $r Radius. + * @param float $angstr: Angle start of draw line. Default value: 0. + * @param float $angend: Angle finish of draw line. Default value: 360. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of circle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array). + * @param integer $nc Number of curves used to draw a 90 degrees portion of circle. + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function Circle($x0, $y0, $r, $angstr=0, $angend=360, $style='', $line_style=array(), $fill_color=array(), $nc=2) { + $this->Ellipse($x0, $y0, $r, $r, 0, $angstr, $angend, $style, $line_style, $fill_color, $nc); + } + + /** + * Draws a polygonal line + * @param array $p Points 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1)) + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of polygon. Array with keys among the following: + *
        + *
      • all: Line style of all lines. Array like for {@link SetLineStyle SetLineStyle}.
      • + *
      • 0 to ($np - 1): Line style of each line. Array like for {@link SetLineStyle SetLineStyle}.
      • + *
      + * If a key is not present or is null, not draws the line. Default value is default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @param boolean $closed if true the polygon is closes, otherwise will remain open + * @access public + * @since 4.8.003 (2009-09-15) + */ + public function PolyLine($p, $style='', $line_style=array(), $fill_color=array()) { + $this->Polygon($p, $style, $line_style, $fill_color, false); + } + + /** + * Draws a polygon. + * @param array $p Points 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1)) + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of polygon. Array with keys among the following: + *
        + *
      • all: Line style of all lines. Array like for {@link SetLineStyle SetLineStyle}.
      • + *
      • 0 to ($np - 1): Line style of each line. Array like for {@link SetLineStyle SetLineStyle}.
      • + *
      + * If a key is not present or is null, not draws the line. Default value is default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @param boolean $closed if true the polygon is closes, otherwise will remain open + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function Polygon($p, $style='', $line_style=array(), $fill_color=array(), $closed=true) { + $nc = count($p); // number of coordinates + $np = $nc / 2; // number of points + if ($closed) { + // close polygon by adding the first 2 points at the end (one line) + for ($i = 0; $i < 4; ++$i) { + $p[$nc + $i] = $p[$i]; + } + // copy style for the last added line + if (isset($line_style[0])) { + $line_style[$np] = $line_style[0]; + } + $nc += 4; + } + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = $this->getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + $draw = true; + if ($line_style) { + if (isset($line_style['all'])) { + $this->SetLineStyle($line_style['all']); + } else { + $draw = false; + if ($op == 'B') { + // draw fill + $op = 'f'; + $this->_outPoint($p[0], $p[1]); + for ($i = 2; $i < $nc; $i = $i + 2) { + $this->_outLine($p[$i], $p[$i + 1]); + } + $this->_out($op); + } + // draw outline + $this->_outPoint($p[0], $p[1]); + for ($i = 2; $i < $nc; $i = $i + 2) { + $line_num = ($i / 2) - 1; + if (isset($line_style[$line_num])) { + if ($line_style[$line_num] != 0) { + if (is_array($line_style[$line_num])) { + $this->_out('S'); + $this->SetLineStyle($line_style[$line_num]); + $this->_outPoint($p[$i - 2], $p[$i - 1]); + $this->_outLine($p[$i], $p[$i + 1]); + $this->_out('S'); + $this->_outPoint($p[$i], $p[$i + 1]); + } else { + $this->_outLine($p[$i], $p[$i + 1]); + } + } + } else { + $this->_outLine($p[$i], $p[$i + 1]); + } + } + $this->_out($op); + } + } + if ($draw) { + $this->_outPoint($p[0], $p[1]); + for ($i = 2; $i < $nc; $i = $i + 2) { + $this->_outLine($p[$i], $p[$i + 1]); + } + $this->_out($op); + } + } + + /** + * Draws a regular polygon. + * @param float $x0 Abscissa of center point. + * @param float $y0 Ordinate of center point. + * @param float $r: Radius of inscribed circle. + * @param integer $ns Number of sides. + * @param float $angle Angle oriented (anti-clockwise). Default value: 0. + * @param boolean $draw_circle Draw inscribed circle or not. Default value: false. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of polygon sides. Array with keys among the following: + *
        + *
      • all: Line style of all sides. Array like for {@link SetLineStyle SetLineStyle}.
      • + *
      • 0 to ($ns - 1): Line style of each side. Array like for {@link SetLineStyle SetLineStyle}.
      • + *
      + * If a key is not present or is null, not draws the side. Default value is default line style (empty array). + * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array). + * @param string $circle_style Style of rendering of inscribed circle (if draws). Possible values are: + *
        + *
      • D or empty string: Draw (default).
      • + *
      • F: Fill.
      • + *
      • DF or FD: Draw and fill.
      • + *
      • CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).
      • + *
      • CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).
      • + *
      + * @param array $circle_outLine_style Line style of inscribed circle (if draws). Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $circle_fill_color Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array). + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function RegularPolygon($x0, $y0, $r, $ns, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array()) { + if (3 > $ns) { + $ns = 3; + } + if ($draw_circle) { + $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color); + } + $p = array(); + for ($i = 0; $i < $ns; ++$i) { + $a = $angle + ($i * 360 / $ns); + $a_rad = deg2rad((float) $a); + $p[] = $x0 + ($r * sin($a_rad)); + $p[] = $y0 + ($r * cos($a_rad)); + } + $this->Polygon($p, $style, $line_style, $fill_color); + } + + /** + * Draws a star polygon + * @param float $x0 Abscissa of center point. + * @param float $y0 Ordinate of center point. + * @param float $r Radius of inscribed circle. + * @param integer $nv Number of vertices. + * @param integer $ng Number of gap (if ($ng % $nv = 1) then is a regular polygon). + * @param float $angle: Angle oriented (anti-clockwise). Default value: 0. + * @param boolean $draw_circle: Draw inscribed circle or not. Default value is false. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of polygon sides. Array with keys among the following: + *
        + *
      • all: Line style of all sides. Array like for + * {@link SetLineStyle SetLineStyle}.
      • + *
      • 0 to (n - 1): Line style of each side. Array like for {@link SetLineStyle SetLineStyle}.
      • + *
      + * If a key is not present or is null, not draws the side. Default value is default line style (empty array). + * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array). + * @param string $circle_style Style of rendering of inscribed circle (if draws). Possible values are: + *
        + *
      • D or empty string: Draw (default).
      • + *
      • F: Fill.
      • + *
      • DF or FD: Draw and fill.
      • + *
      • CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).
      • + *
      • CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).
      • + *
      + * @param array $circle_outLine_style Line style of inscribed circle (if draws). Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $circle_fill_color Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array). + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function StarPolygon($x0, $y0, $r, $nv, $ng, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array()) { + if ($nv < 2) { + $nv = 2; + } + if ($draw_circle) { + $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color); + } + $p2 = array(); + $visited = array(); + for ($i = 0; $i < $nv; ++$i) { + $a = $angle + ($i * 360 / $nv); + $a_rad = deg2rad((float) $a); + $p2[] = $x0 + ($r * sin($a_rad)); + $p2[] = $y0 + ($r * cos($a_rad)); + $visited[] = false; + } + $p = array(); + $i = 0; + do { + $p[] = $p2[$i * 2]; + $p[] = $p2[($i * 2) + 1]; + $visited[$i] = true; + $i += $ng; + $i %= $nv; + } while (!$visited[$i]); + $this->Polygon($p, $style, $line_style, $fill_color); + } + + /** + * Draws a rounded rectangle. + * @param float $x Abscissa of upper-left corner. + * @param float $y Ordinate of upper-left corner. + * @param float $w Width. + * @param float $h Height. + * @param float $r the radius of the circle used to round off the corners of the rectangle. + * @param string $round_corner Draws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top left, top right, bottom right and bottom left. Default value: all rounded corner ("1111"). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $border_style Border style of rectangle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @access public + * @since 2.1.000 (2008-01-08) + */ + public function RoundedRect($x, $y, $w, $h, $r, $round_corner='1111', $style='', $border_style=array(), $fill_color=array()) { + $this->RoundedRectXY($x, $y, $w, $h, $r, $r, $round_corner, $style, $border_style, $fill_color); + } + + /** + * Draws a rounded rectangle. + * @param float $x Abscissa of upper-left corner. + * @param float $y Ordinate of upper-left corner. + * @param float $w Width. + * @param float $h Height. + * @param float $rx the x-axis radius of the ellipse used to round off the corners of the rectangle. + * @param float $ry the y-axis radius of the ellipse used to round off the corners of the rectangle. + * @param string $round_corner Draws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top left, top right, bottom right and bottom left. Default value: all rounded corner ("1111"). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $border_style Border style of rectangle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array). + * @access public + * @since 4.9.019 (2010-04-22) + */ + public function RoundedRectXY($x, $y, $w, $h, $rx, $ry, $round_corner='1111', $style='', $border_style=array(), $fill_color=array()) { + if (($round_corner == '0000') OR (($rx == $ry) AND ($rx == 0))) { + // Not rounded + $this->Rect($x, $y, $w, $h, $style, $border_style, $fill_color); + return; + } + // Rounded + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = $this->getPathPaintOperator($style); + if ($op == 'f') { + $border_style = array(); + } + if ($border_style) { + $this->SetLineStyle($border_style); + } + $MyArc = 4 / 3 * (sqrt(2) - 1); + $this->_outPoint($x + $rx, $y); + $xc = $x + $w - $rx; + $yc = $y + $ry; + $this->_outLine($xc, $y); + if ($round_corner[0]) { + $this->_outCurve($xc + ($rx * $MyArc), $yc - $ry, $xc + $rx, $yc - ($ry * $MyArc), $xc + $rx, $yc); + } else { + $this->_outLine($x + $w, $y); + } + $xc = $x + $w - $rx; + $yc = $y + $h - $ry; + $this->_outLine($x + $w, $yc); + if ($round_corner[1]) { + $this->_outCurve($xc + $rx, $yc + ($ry * $MyArc), $xc + ($rx * $MyArc), $yc + $ry, $xc, $yc + $ry); + } else { + $this->_outLine($x + $w, $y + $h); + } + $xc = $x + $rx; + $yc = $y + $h - $ry; + $this->_outLine($xc, $y + $h); + if ($round_corner[2]) { + $this->_outCurve($xc - ($rx * $MyArc), $yc + $ry, $xc - $rx, $yc + ($ry * $MyArc), $xc - $rx, $yc); + } else { + $this->_outLine($x, $y + $h); + } + $xc = $x + $rx; + $yc = $y + $ry; + $this->_outLine($x, $yc); + if ($round_corner[3]) { + $this->_outCurve($xc - $rx, $yc - ($ry * $MyArc), $xc - ($rx * $MyArc), $yc - $ry, $xc, $yc - $ry); + } else { + $this->_outLine($x, $y); + $this->_outLine($x + $rx, $y); + } + $this->_out($op); + } + + /** + * Draws a grahic arrow. + * @parameter float $x0 Abscissa of first point. + * @parameter float $y0 Ordinate of first point. + * @parameter float $x0 Abscissa of second point. + * @parameter float $y1 Ordinate of second point. + * @parameter int $head_style (0 = draw only arrowhead arms, 1 = draw closed arrowhead, but no fill, 2 = closed and filled arrowhead, 3 = filled arrowhead) + * @parameter float $arm_size length of arrowhead arms + * @parameter int $arm_angle angle between an arm and the shaft + * @author Piotr Galecki, Nicola Asuni, Andy Meier + * @since 4.6.018 (2009-07-10) + */ + public function Arrow($x0, $y0, $x1, $y1, $head_style=0, $arm_size=5, $arm_angle=15) { + // getting arrow direction angle + // 0 deg angle is when both arms go along X axis. angle grows clockwise. + $dir_angle = atan2(($y0 - $y1), ($x0 - $x1)); + if ($dir_angle < 0) { + $dir_angle += (2 * M_PI); + } + $arm_angle = deg2rad($arm_angle); + $sx1 = $x1; + $sy1 = $y1; + if ($head_style > 0) { + // calculate the stopping point for the arrow shaft + $sx1 = $x1 + (($arm_size - $this->LineWidth) * cos($dir_angle)); + $sy1 = $y1 + (($arm_size - $this->LineWidth) * sin($dir_angle)); + } + // main arrow line / shaft + $this->Line($x0, $y0, $sx1, $sy1); + // left arrowhead arm tip + $x2L = $x1 + ($arm_size * cos($dir_angle + $arm_angle)); + $y2L = $y1 + ($arm_size * sin($dir_angle + $arm_angle)); + // right arrowhead arm tip + $x2R = $x1 + ($arm_size * cos($dir_angle - $arm_angle)); + $y2R = $y1 + ($arm_size * sin($dir_angle - $arm_angle)); + $mode = 'D'; + $style = array(); + switch ($head_style) { + case 0: { + // draw only arrowhead arms + $mode = 'D'; + $style = array(1, 1, 0); + break; + } + case 1: { + // draw closed arrowhead, but no fill + $mode = 'D'; + break; + } + case 2: { + // closed and filled arrowhead + $mode = 'DF'; + break; + } + case 3: { + // filled arrowhead + $mode = 'F'; + break; + } + } + $this->Polygon(array($x2L, $y2L, $x1, $y1, $x2R, $y2R), $mode, $style, array()); + } + + // END GRAPHIC FUNCTIONS SECTION ----------------------- + + // BIDIRECTIONAL TEXT SECTION -------------------------- + + /** + * Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/). + * @param string $str string to manipulate. + * @param bool $setbom if true set the Byte Order Mark (BOM = 0xFEFF) + * @param bool $forcertl if true forces RTL text direction + * @return string + * @access protected + * @author Nicola Asuni + * @since 2.1.000 (2008-01-08) + */ + protected function utf8StrRev($str, $setbom=false, $forcertl=false) { + return $this->utf8StrArrRev($this->UTF8StringToArray($str), $str, $setbom, $forcertl); + } + + /** + * Reverse the RLT substrings array using the Bidirectional Algorithm (http://unicode.org/reports/tr9/). + * @param array $arr array of unicode values. + * @param string $str string to manipulate (or empty value). + * @param bool $setbom if true set the Byte Order Mark (BOM = 0xFEFF) + * @param bool $forcertl if true forces RTL text direction + * @return string + * @access protected + * @author Nicola Asuni + * @since 4.9.000 (2010-03-27) + */ + protected function utf8StrArrRev($arr, $str='', $setbom=false, $forcertl=false) { + return $this->arrUTF8ToUTF16BE($this->utf8Bidi($arr, $str, $forcertl), $setbom); + } + + /** + * Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/). + * @param array $ta array of characters composing the string. + * @param string $str string to process + * @param bool $forcertl if 'R' forces RTL, if 'L' forces LTR + * @return array of unicode chars + * @author Nicola Asuni + * @access protected + * @since 2.4.000 (2008-03-06) + */ + protected function utf8Bidi($ta, $str='', $forcertl=false) { + global $unicode, $unicode_mirror, $unicode_arlet, $laa_array, $diacritics; + // paragraph embedding level + $pel = 0; + // max level + $maxlevel = 0; + if ($this->empty_string($str)) { + // create string from array + $str = $this->UTF8ArrSubString($ta); + } + // check if string contains arabic text + if (preg_match(K_RE_PATTERN_ARABIC, $str)) { + $arabic = true; + } else { + $arabic = false; + } + // check if string contains RTL text + if (!($forcertl OR $arabic OR preg_match(K_RE_PATTERN_RTL, $str))) { + return $ta; + } + + // get number of chars + $numchars = count($ta); + + if ($forcertl == 'R') { + $pel = 1; + } elseif ($forcertl == 'L') { + $pel = 0; + } else { + // P2. In each paragraph, find the first character of type L, AL, or R. + // P3. If a character is found in P2 and it is of type AL or R, then set the paragraph embedding level to one; otherwise, set it to zero. + for ($i=0; $i < $numchars; ++$i) { + $type = $unicode[$ta[$i]]; + if ($type == 'L') { + $pel = 0; + break; + } elseif (($type == 'AL') OR ($type == 'R')) { + $pel = 1; + break; + } + } + } + + // Current Embedding Level + $cel = $pel; + // directional override status + $dos = 'N'; + $remember = array(); + // start-of-level-run + $sor = $pel % 2 ? 'R' : 'L'; + $eor = $sor; + + // Array of characters data + $chardata = Array(); + + // X1. Begin by setting the current embedding level to the paragraph embedding level. Set the directional override status to neutral. Process each character iteratively, applying rules X2 through X9. Only embedding levels from 0 to 61 are valid in this phase. + // In the resolution of levels in rules I1 and I2, the maximum embedding level of 62 can be reached. + for ($i=0; $i < $numchars; ++$i) { + if ($ta[$i] == K_RLE) { + // X2. With each RLE, compute the least greater odd embedding level. + // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to neutral. + // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status. + $next_level = $cel + ($cel % 2) + 1; + if ($next_level < 62) { + $remember[] = array('num' => K_RLE, 'cel' => $cel, 'dos' => $dos); + $cel = $next_level; + $dos = 'N'; + $sor = $eor; + $eor = $cel % 2 ? 'R' : 'L'; + } + } elseif ($ta[$i] == K_LRE) { + // X3. With each LRE, compute the least greater even embedding level. + // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to neutral. + // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status. + $next_level = $cel + 2 - ($cel % 2); + if ( $next_level < 62 ) { + $remember[] = array('num' => K_LRE, 'cel' => $cel, 'dos' => $dos); + $cel = $next_level; + $dos = 'N'; + $sor = $eor; + $eor = $cel % 2 ? 'R' : 'L'; + } + } elseif ($ta[$i] == K_RLO) { + // X4. With each RLO, compute the least greater odd embedding level. + // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to right-to-left. + // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status. + $next_level = $cel + ($cel % 2) + 1; + if ($next_level < 62) { + $remember[] = array('num' => K_RLO, 'cel' => $cel, 'dos' => $dos); + $cel = $next_level; + $dos = 'R'; + $sor = $eor; + $eor = $cel % 2 ? 'R' : 'L'; + } + } elseif ($ta[$i] == K_LRO) { + // X5. With each LRO, compute the least greater even embedding level. + // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to left-to-right. + // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status. + $next_level = $cel + 2 - ($cel % 2); + if ( $next_level < 62 ) { + $remember[] = array('num' => K_LRO, 'cel' => $cel, 'dos' => $dos); + $cel = $next_level; + $dos = 'L'; + $sor = $eor; + $eor = $cel % 2 ? 'R' : 'L'; + } + } elseif ($ta[$i] == K_PDF) { + // X7. With each PDF, determine the matching embedding or override code. If there was a valid matching code, restore (pop) the last remembered (pushed) embedding level and directional override. + if (count($remember)) { + $last = count($remember ) - 1; + if (($remember[$last]['num'] == K_RLE) OR + ($remember[$last]['num'] == K_LRE) OR + ($remember[$last]['num'] == K_RLO) OR + ($remember[$last]['num'] == K_LRO)) { + $match = array_pop($remember); + $cel = $match['cel']; + $dos = $match['dos']; + $sor = $eor; + $eor = ($cel > $match['cel'] ? $cel : $match['cel']) % 2 ? 'R' : 'L'; + } + } + } elseif (($ta[$i] != K_RLE) AND + ($ta[$i] != K_LRE) AND + ($ta[$i] != K_RLO) AND + ($ta[$i] != K_LRO) AND + ($ta[$i] != K_PDF)) { + // X6. For all types besides RLE, LRE, RLO, LRO, and PDF: + // a. Set the level of the current character to the current embedding level. + // b. Whenever the directional override status is not neutral, reset the current character type to the directional override status. + if ($dos != 'N') { + $chardir = $dos; + } else { + if (isset($unicode[$ta[$i]])) { + $chardir = $unicode[$ta[$i]]; + } else { + $chardir = 'L'; + } + } + // stores string characters and other information + $chardata[] = array('char' => $ta[$i], 'level' => $cel, 'type' => $chardir, 'sor' => $sor, 'eor' => $eor); + } + } // end for each char + + // X8. All explicit directional embeddings and overrides are completely terminated at the end of each paragraph. Paragraph separators are not included in the embedding. + // X9. Remove all RLE, LRE, RLO, LRO, PDF, and BN codes. + // X10. The remaining rules are applied to each run of characters at the same level. For each run, determine the start-of-level-run (sor) and end-of-level-run (eor) type, either L or R. This depends on the higher of the two levels on either side of the boundary (at the start or end of the paragraph, the level of the 'other' run is the base embedding level). If the higher level is odd, the type is R; otherwise, it is L. + + // 3.3.3 Resolving Weak Types + // Weak types are now resolved one level run at a time. At level run boundaries where the type of the character on the other side of the boundary is required, the type assigned to sor or eor is used. + // Nonspacing marks are now resolved based on the previous characters. + $numchars = count($chardata); + + // W1. Examine each nonspacing mark (NSM) in the level run, and change the type of the NSM to the type of the previous character. If the NSM is at the start of the level run, it will get the type of sor. + $prevlevel = -1; // track level changes + $levcount = 0; // counts consecutive chars at the same level + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['type'] == 'NSM') { + if ($levcount) { + $chardata[$i]['type'] = $chardata[$i]['sor']; + } elseif ($i > 0) { + $chardata[$i]['type'] = $chardata[($i-1)]['type']; + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // W2. Search backward from each instance of a European number until the first strong type (R, L, AL, or sor) is found. If an AL is found, change the type of the European number to Arabic number. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['char'] == 'EN') { + for ($j=$levcount; $j >= 0; $j--) { + if ($chardata[$j]['type'] == 'AL') { + $chardata[$i]['type'] = 'AN'; + } elseif (($chardata[$j]['type'] == 'L') OR ($chardata[$j]['type'] == 'R')) { + break; + } + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // W3. Change all ALs to R. + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['type'] == 'AL') { + $chardata[$i]['type'] = 'R'; + } + } + + // W4. A single European separator between two European numbers changes to a European number. A single common separator between two numbers of the same type changes to that type. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if (($levcount > 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) { + if (($chardata[$i]['type'] == 'ES') AND ($chardata[($i-1)]['type'] == 'EN') AND ($chardata[($i+1)]['type'] == 'EN')) { + $chardata[$i]['type'] = 'EN'; + } elseif (($chardata[$i]['type'] == 'CS') AND ($chardata[($i-1)]['type'] == 'EN') AND ($chardata[($i+1)]['type'] == 'EN')) { + $chardata[$i]['type'] = 'EN'; + } elseif (($chardata[$i]['type'] == 'CS') AND ($chardata[($i-1)]['type'] == 'AN') AND ($chardata[($i+1)]['type'] == 'AN')) { + $chardata[$i]['type'] = 'AN'; + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // W5. A sequence of European terminators adjacent to European numbers changes to all European numbers. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['type'] == 'ET') { + if (($levcount > 0) AND ($chardata[($i-1)]['type'] == 'EN')) { + $chardata[$i]['type'] = 'EN'; + } else { + $j = $i+1; + while (($j < $numchars) AND ($chardata[$j]['level'] == $prevlevel)) { + if ($chardata[$j]['type'] == 'EN') { + $chardata[$i]['type'] = 'EN'; + break; + } elseif ($chardata[$j]['type'] != 'ET') { + break; + } + ++$j; + } + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // W6. Otherwise, separators and terminators change to Other Neutral. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if (($chardata[$i]['type'] == 'ET') OR ($chardata[$i]['type'] == 'ES') OR ($chardata[$i]['type'] == 'CS')) { + $chardata[$i]['type'] = 'ON'; + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + //W7. Search backward from each instance of a European number until the first strong type (R, L, or sor) is found. If an L is found, then change the type of the European number to L. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['char'] == 'EN') { + for ($j=$levcount; $j >= 0; $j--) { + if ($chardata[$j]['type'] == 'L') { + $chardata[$i]['type'] = 'L'; + } elseif ($chardata[$j]['type'] == 'R') { + break; + } + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // N1. A sequence of neutrals takes the direction of the surrounding strong text if the text on both sides has the same direction. European and Arabic numbers act as if they were R in terms of their influence on neutrals. Start-of-level-run (sor) and end-of-level-run (eor) are used at level run boundaries. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if (($levcount > 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) { + if (($chardata[$i]['type'] == 'N') AND ($chardata[($i-1)]['type'] == 'L') AND ($chardata[($i+1)]['type'] == 'L')) { + $chardata[$i]['type'] = 'L'; + } elseif (($chardata[$i]['type'] == 'N') AND + (($chardata[($i-1)]['type'] == 'R') OR ($chardata[($i-1)]['type'] == 'EN') OR ($chardata[($i-1)]['type'] == 'AN')) AND + (($chardata[($i+1)]['type'] == 'R') OR ($chardata[($i+1)]['type'] == 'EN') OR ($chardata[($i+1)]['type'] == 'AN'))) { + $chardata[$i]['type'] = 'R'; + } elseif ($chardata[$i]['type'] == 'N') { + // N2. Any remaining neutrals take the embedding direction + $chardata[$i]['type'] = $chardata[$i]['sor']; + } + } elseif (($levcount == 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) { + // first char + if (($chardata[$i]['type'] == 'N') AND ($chardata[$i]['sor'] == 'L') AND ($chardata[($i+1)]['type'] == 'L')) { + $chardata[$i]['type'] = 'L'; + } elseif (($chardata[$i]['type'] == 'N') AND + (($chardata[$i]['sor'] == 'R') OR ($chardata[$i]['sor'] == 'EN') OR ($chardata[$i]['sor'] == 'AN')) AND + (($chardata[($i+1)]['type'] == 'R') OR ($chardata[($i+1)]['type'] == 'EN') OR ($chardata[($i+1)]['type'] == 'AN'))) { + $chardata[$i]['type'] = 'R'; + } elseif ($chardata[$i]['type'] == 'N') { + // N2. Any remaining neutrals take the embedding direction + $chardata[$i]['type'] = $chardata[$i]['sor']; + } + } elseif (($levcount > 0) AND ((($i+1) == $numchars) OR (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] != $prevlevel))) { + //last char + if (($chardata[$i]['type'] == 'N') AND ($chardata[($i-1)]['type'] == 'L') AND ($chardata[$i]['eor'] == 'L')) { + $chardata[$i]['type'] = 'L'; + } elseif (($chardata[$i]['type'] == 'N') AND + (($chardata[($i-1)]['type'] == 'R') OR ($chardata[($i-1)]['type'] == 'EN') OR ($chardata[($i-1)]['type'] == 'AN')) AND + (($chardata[$i]['eor'] == 'R') OR ($chardata[$i]['eor'] == 'EN') OR ($chardata[$i]['eor'] == 'AN'))) { + $chardata[$i]['type'] = 'R'; + } elseif ($chardata[$i]['type'] == 'N') { + // N2. Any remaining neutrals take the embedding direction + $chardata[$i]['type'] = $chardata[$i]['sor']; + } + } elseif ($chardata[$i]['type'] == 'N') { + // N2. Any remaining neutrals take the embedding direction + $chardata[$i]['type'] = $chardata[$i]['sor']; + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // I1. For all characters with an even (left-to-right) embedding direction, those of type R go up one level and those of type AN or EN go up two levels. + // I2. For all characters with an odd (right-to-left) embedding direction, those of type L, EN or AN go up one level. + for ($i=0; $i < $numchars; ++$i) { + $odd = $chardata[$i]['level'] % 2; + if ($odd) { + if (($chardata[$i]['type'] == 'L') OR ($chardata[$i]['type'] == 'AN') OR ($chardata[$i]['type'] == 'EN')) { + $chardata[$i]['level'] += 1; + } + } else { + if ($chardata[$i]['type'] == 'R') { + $chardata[$i]['level'] += 1; + } elseif (($chardata[$i]['type'] == 'AN') OR ($chardata[$i]['type'] == 'EN')) { + $chardata[$i]['level'] += 2; + } + } + $maxlevel = max($chardata[$i]['level'],$maxlevel); + } + + // L1. On each line, reset the embedding level of the following characters to the paragraph embedding level: + // 1. Segment separators, + // 2. Paragraph separators, + // 3. Any sequence of whitespace characters preceding a segment separator or paragraph separator, and + // 4. Any sequence of white space characters at the end of the line. + for ($i=0; $i < $numchars; ++$i) { + if (($chardata[$i]['type'] == 'B') OR ($chardata[$i]['type'] == 'S')) { + $chardata[$i]['level'] = $pel; + } elseif ($chardata[$i]['type'] == 'WS') { + $j = $i+1; + while ($j < $numchars) { + if ((($chardata[$j]['type'] == 'B') OR ($chardata[$j]['type'] == 'S')) OR + (($j == ($numchars-1)) AND ($chardata[$j]['type'] == 'WS'))) { + $chardata[$i]['level'] = $pel; + break; + } elseif ($chardata[$j]['type'] != 'WS') { + break; + } + ++$j; + } + } + } + + // Arabic Shaping + // Cursively connected scripts, such as Arabic or Syriac, require the selection of positional character shapes that depend on adjacent characters. Shaping is logically applied after the Bidirectional Algorithm is used and is limited to characters within the same directional run. + if ($arabic) { + $endedletter = array(1569,1570,1571,1572,1573,1575,1577,1583,1584,1585,1586,1608,1688); + $alfletter = array(1570,1571,1573,1575); + $chardata2 = $chardata; + $laaletter = false; + $charAL = array(); + $x = 0; + for ($i=0; $i < $numchars; ++$i) { + if (($unicode[$chardata[$i]['char']] == 'AL') OR ($chardata[$i]['char'] == 32) OR ($chardata[$i]['char'] == 8204)) { + $charAL[$x] = $chardata[$i]; + $charAL[$x]['i'] = $i; + $chardata[$i]['x'] = $x; + ++$x; + } + } + $numAL = $x; + for ($i=0; $i < $numchars; ++$i) { + $thischar = $chardata[$i]; + if ($i > 0) { + $prevchar = $chardata[($i-1)]; + } else { + $prevchar = false; + } + if (($i+1) < $numchars) { + $nextchar = $chardata[($i+1)]; + } else { + $nextchar = false; + } + if ($unicode[$thischar['char']] == 'AL') { + $x = $thischar['x']; + if ($x > 0) { + $prevchar = $charAL[($x-1)]; + } else { + $prevchar = false; + } + if (($x+1) < $numAL) { + $nextchar = $charAL[($x+1)]; + } else { + $nextchar = false; + } + // if laa letter + if (($prevchar !== false) AND ($prevchar['char'] == 1604) AND (in_array($thischar['char'], $alfletter))) { + $arabicarr = $laa_array; + $laaletter = true; + if ($x > 1) { + $prevchar = $charAL[($x-2)]; + } else { + $prevchar = false; + } + } else { + $arabicarr = $unicode_arlet; + $laaletter = false; + } + if (($prevchar !== false) AND ($nextchar !== false) AND + (($unicode[$prevchar['char']] == 'AL') OR ($unicode[$prevchar['char']] == 'NSM')) AND + (($unicode[$nextchar['char']] == 'AL') OR ($unicode[$nextchar['char']] == 'NSM')) AND + ($prevchar['type'] == $thischar['type']) AND + ($nextchar['type'] == $thischar['type']) AND + ($nextchar['char'] != 1567)) { + if (in_array($prevchar['char'], $endedletter)) { + if (isset($arabicarr[$thischar['char']][2])) { + // initial + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][2]; + } + } else { + if (isset($arabicarr[$thischar['char']][3])) { + // medial + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][3]; + } + } + } elseif (($nextchar !== false) AND + (($unicode[$nextchar['char']] == 'AL') OR ($unicode[$nextchar['char']] == 'NSM')) AND + ($nextchar['type'] == $thischar['type']) AND + ($nextchar['char'] != 1567)) { + if (isset($arabicarr[$chardata[$i]['char']][2])) { + // initial + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][2]; + } + } elseif ((($prevchar !== false) AND + (($unicode[$prevchar['char']] == 'AL') OR ($unicode[$prevchar['char']] == 'NSM')) AND + ($prevchar['type'] == $thischar['type'])) OR + (($nextchar !== false) AND ($nextchar['char'] == 1567))) { + // final + if (($i > 1) AND ($thischar['char'] == 1607) AND + ($chardata[$i-1]['char'] == 1604) AND + ($chardata[$i-2]['char'] == 1604)) { + //Allah Word + // mark characters to delete with false + $chardata2[$i-2]['char'] = false; + $chardata2[$i-1]['char'] = false; + $chardata2[$i]['char'] = 65010; + } else { + if (($prevchar !== false) AND in_array($prevchar['char'], $endedletter)) { + if (isset($arabicarr[$thischar['char']][0])) { + // isolated + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][0]; + } + } else { + if (isset($arabicarr[$thischar['char']][1])) { + // final + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][1]; + } + } + } + } elseif (isset($arabicarr[$thischar['char']][0])) { + // isolated + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][0]; + } + // if laa letter + if ($laaletter) { + // mark characters to delete with false + $chardata2[($charAL[($x-1)]['i'])]['char'] = false; + } + } // end if AL (Arabic Letter) + } // end for each char + /* + * Combining characters that can occur with Arabic Shadda (0651 HEX, 1617 DEC) are replaced. + * Putting the combining mark and shadda in the same glyph allows us to avoid the two marks overlapping each other in an illegible manner. + */ + $cw = &$this->CurrentFont['cw']; + for ($i = 0; $i < ($numchars-1); ++$i) { + if (($chardata2[$i]['char'] == 1617) AND (isset($diacritics[($chardata2[$i+1]['char'])]))) { + // check if the subtitution font is defined on current font + if (isset($cw[($diacritics[($chardata2[$i+1]['char'])])])) { + $chardata2[$i]['char'] = false; + $chardata2[$i+1]['char'] = $diacritics[($chardata2[$i+1]['char'])]; + } + } + } + // remove marked characters + foreach ($chardata2 as $key => $value) { + if ($value['char'] === false) { + unset($chardata2[$key]); + } + } + $chardata = array_values($chardata2); + $numchars = count($chardata); + unset($chardata2); + unset($arabicarr); + unset($laaletter); + unset($charAL); + } + + // L2. From the highest level found in the text to the lowest odd level on each line, including intermediate levels not actually present in the text, reverse any contiguous sequence of characters that are at that level or higher. + for ($j=$maxlevel; $j > 0; $j--) { + $ordarray = Array(); + $revarr = Array(); + $onlevel = false; + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['level'] >= $j) { + $onlevel = true; + if (isset($unicode_mirror[$chardata[$i]['char']])) { + // L4. A character is depicted by a mirrored glyph if and only if (a) the resolved directionality of that character is R, and (b) the Bidi_Mirrored property value of that character is true. + $chardata[$i]['char'] = $unicode_mirror[$chardata[$i]['char']]; + } + $revarr[] = $chardata[$i]; + } else { + if ($onlevel) { + $revarr = array_reverse($revarr); + $ordarray = array_merge($ordarray, $revarr); + $revarr = Array(); + $onlevel = false; + } + $ordarray[] = $chardata[$i]; + } + } + if ($onlevel) { + $revarr = array_reverse($revarr); + $ordarray = array_merge($ordarray, $revarr); + } + $chardata = $ordarray; + } + + $ordarray = array(); + for ($i=0; $i < $numchars; ++$i) { + $ordarray[] = $chardata[$i]['char']; + } + + return $ordarray; + } + + // END OF BIDIRECTIONAL TEXT SECTION ------------------- + + /** + * Adds a bookmark. + * @param string $txt bookmark description. + * @param int $level bookmark level (minimum value is 0). + * @param float $y Ordinate of the boorkmark position (default = -1 = current position). + * @param int $page target page number (leave empty for current page). + * @access public + * @author Olivier Plathey, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + public function Bookmark($txt, $level=0, $y=-1, $page='') { + if ($level < 0) { + $level = 0; + } + if (isset($this->outlines[0])) { + $lastoutline = end($this->outlines); + $maxlevel = $lastoutline['l'] + 1; + } else { + $maxlevel = 0; + } + if ($level > $maxlevel) { + $level = $maxlevel; + } + if ($y == -1) { + $y = $this->GetY(); + } + if (empty($page)) { + $page = $this->PageNo(); + } + $this->outlines[] = array('t' => $txt, 'l' => $level, 'y' => $y, 'p' => $page); + } + + /** + * Create a bookmark PDF string. + * @access protected + * @author Olivier Plathey, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _putbookmarks() { + $nb = count($this->outlines); + if ($nb == 0) { + return; + } + // get sorting columns + $outline_p = array(); + $outline_y = array(); + foreach ($this->outlines as $key => $row) { + $outline_p[$key] = $row['p']; + $outline_k[$key] = $key; + } + // sort outlines by page and original position + array_multisort($outline_p, SORT_NUMERIC, SORT_ASC, $outline_k, SORT_NUMERIC, SORT_ASC, $this->outlines); + $lru = array(); + $level = 0; + foreach ($this->outlines as $i => $o) { + if ($o['l'] > 0) { + $parent = $lru[($o['l'] - 1)]; + //Set parent and last pointers + $this->outlines[$i]['parent'] = $parent; + $this->outlines[$parent]['last'] = $i; + if ($o['l'] > $level) { + //Level increasing: set first pointer + $this->outlines[$parent]['first'] = $i; + } + } else { + $this->outlines[$i]['parent'] = $nb; + } + if (($o['l'] <= $level) AND ($i > 0)) { + //Set prev and next pointers + $prev = $lru[$o['l']]; + $this->outlines[$prev]['next'] = $i; + $this->outlines[$i]['prev'] = $prev; + } + $lru[$o['l']] = $i; + $level = $o['l']; + } + //Outline items + $n = $this->n + 1; + foreach ($this->outlines as $i => $o) { + $this->_newobj(); + // covert HTML title to string + $nltags = '/|<\/(blockquote|dd|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|p|pre|ul|tcpdf|table|tr|td)>/si'; + $title = preg_replace($nltags, "\n", $o['t']); + $title = preg_replace("/[\r]+/si", '', $title); + $title = preg_replace("/[\n]+/si", "\n", $title); + $title = strip_tags(trim($title)); + $out = '<_textstring($title); + $out .= ' /Parent '.($n + $o['parent']).' 0 R'; + if (isset($o['prev'])) { + $out .= ' /Prev '.($n + $o['prev']).' 0 R'; + } + if (isset($o['next'])) { + $out .= ' /Next '.($n + $o['next']).' 0 R'; + } + if (isset($o['first'])) { + $out .= ' /First '.($n + $o['first']).' 0 R'; + } + if (isset($o['last'])) { + $out .= ' /Last '.($n + $o['last']).' 0 R'; + } + $out .= ' '.sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]', (1 + (2 * $o['p'])), ($this->pagedim[$o['p']]['h'] - ($o['y'] * $this->k))); + $out .= ' /Count 0 >> endobj'; + $this->_out($out); + } + //Outline root + $this->_newobj(); + $this->OutlineRoot = $this->n; + $this->_out('<< /Type /Outlines /First '.$n.' 0 R /Last '.($n + $lru[0]).' 0 R >> endobj'); + } + + // --- JAVASCRIPT ------------------------------------------------------ + + /** + * Adds a javascript + * @param string $script Javascript code + * @access public + * @author Johannes Gntert, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + public function IncludeJS($script) { + $this->javascript .= $script; + } + + /** + * Adds a javascript object and return object ID + * @param string $script Javascript code + * @param boolean $onload if true executes this object when opening the document + * @return int internal object ID + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function addJavascriptObject($script, $onload=false) { + ++$this->js_obj_id; + $this->js_objects[$this->js_obj_id] = array('js' => $script, 'onload' => $onload); + return $this->js_obj_id; + } + + /** + * Create a javascript PDF string. + * @access protected + * @author Johannes Gntert, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _putjavascript() { + if (empty($this->javascript) AND empty($this->js_objects)) { + return; + } + if (strpos($this->javascript, 'this.addField') > 0) { + if (!$this->ur) { + //$this->setUserRights(); + } + // the following two lines are used to avoid form fields duplication after saving + // The addField method only works on Acrobat Writer, unless the document is signed with Adobe private key (UR3) + $jsa = sprintf("ftcpdfdocsaved=this.addField('%s','%s',%d,[%.2F,%.2F,%.2F,%.2F]);", 'tcpdfdocsaved', 'text', 0, 0, 1, 0, 1); + $jsb = "getField('tcpdfdocsaved').value='saved';"; + $this->javascript = $jsa."\n".$this->javascript."\n".$jsb; + } + $this->n_js = $this->_newobj(); + $out = ' << /Names ['; + if (!empty($this->javascript)) { + $out .= ' (EmbeddedJS) '.($this->n + 1).' 0 R'; + } + if (!empty($this->js_objects)) { + foreach ($this->js_objects as $key => $val) { + if ($val['onload']) { + $out .= ' (JS'.$key.') '.$key.' 0 R'; + } + } + } + $out .= ' ] >> endobj'; + $this->_out($out); + // default Javascript object + if (!empty($this->javascript)) { + $this->_newobj(); + $out = '<< /S /JavaScript'; + $out .= ' /JS '.$this->_textstring($this->javascript); + $out .= ' >> endobj'; + $this->_out($out); + } + // additional Javascript objects + if (!empty($this->js_objects)) { + foreach ($this->js_objects as $key => $val) { + $this->offsets[$key] = $this->bufferlen; + $out = $key.' 0 obj'."\n".' << /S /JavaScript /JS '.$this->_textstring($val['js']).' >> endobj'; + $this->_out($out); + } + } + } + + /** + * Convert color to javascript color. + * @param string $color color name or #RRGGBB + * @access protected + * @author Denis Van Nuffelen, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _JScolor($color) { + static $aColors = array('transparent', 'black', 'white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'dkGray', 'gray', 'ltGray'); + if (substr($color,0,1) == '#') { + return sprintf("['RGB',%.3F,%.3F,%.3F]", hexdec(substr($color,1,2))/255, hexdec(substr($color,3,2))/255, hexdec(substr($color,5,2))/255); + } + if (!in_array($color,$aColors)) { + $this->Error('Invalid color: '.$color); + } + return 'color.'.$color; + } + + /** + * Adds a javascript form field. + * @param string $type field type + * @param string $name field name + * @param int $x horizontal position + * @param int $y vertical position + * @param int $w width + * @param int $h height + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @access protected + * @author Denis Van Nuffelen, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _addfield($type, $name, $x, $y, $w, $h, $prop) { + if ($this->rtl) { + $x = $x - $w; + } + // the followind avoid fields duplication after saving the document + $this->javascript .= "if(getField('tcpdfdocsaved').value != 'saved') {"; + $k = $this->k; + $this->javascript .= sprintf("f".$name."=this.addField('%s','%s',%d,[%.2F,%.2F,%.2F,%.2F]);", $name, $type, $this->PageNo()-1, $x*$k, ($this->h-$y)*$k+1, ($x+$w)*$k, ($this->h-$y-$h)*$k+1)."\n"; + $this->javascript .= 'f'.$name.'.textSize='.$this->FontSizePt.";\n"; + while (list($key, $val) = each($prop)) { + if (strcmp(substr($key, -5), 'Color') == 0) { + $val = $this->_JScolor($val); + } else { + $val = "'".$val."'"; + } + $this->javascript .= 'f'.$name.'.'.$key.'='.$val.";\n"; + } + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + $this->javascript .= '}'; + } + + // --- FORM FIELDS ----------------------------------------------------- + + /** + * Convert JavaScript form fields properties array to Annotation Properties array. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @return array of annotation properties + * @access protected + * @author Nicola Asuni + * @since 4.8.000 (2009-09-06) + */ + protected function getAnnotOptFromJSProp($prop) { + if (isset($prop['aopt']) AND is_array($prop['aopt'])) { + // the annotation options area lready defined + return $prop['aopt']; + } + $opt = array(); // value to be returned + // alignment: Controls how the text is laid out within the text field. + if (isset($prop['alignment'])) { + switch ($prop['alignment']) { + case 'left': { + $opt['q'] = 0; + break; + } + case 'center': { + $opt['q'] = 1; + break; + } + case 'right': { + $opt['q'] = 2; + break; + } + default: { + $opt['q'] = ($this->rtl)?2:0; + break; + } + } + } + // lineWidth: Specifies the thickness of the border when stroking the perimeter of a field's rectangle. + if (isset($prop['lineWidth'])) { + $linewidth = intval($prop['lineWidth']); + } else { + $linewidth = 1; + } + // borderStyle: The border style for a field. + if (isset($prop['borderStyle'])) { + switch ($prop['borderStyle']) { + case 'border.d': + case 'dashed': { + $opt['border'] = array(0, 0, $linewidth, array(3, 2)); + $opt['bs'] = array('w'=>$linewidth, 's'=>'D', 'd'=>array(3, 2)); + break; + } + case 'border.b': + case 'beveled': { + $opt['border'] = array(0, 0, $linewidth); + $opt['bs'] = array('w'=>$linewidth, 's'=>'B'); + break; + } + case 'border.i': + case 'inset': { + $opt['border'] = array(0, 0, $linewidth); + $opt['bs'] = array('w'=>$linewidth, 's'=>'I'); + break; + } + case 'border.u': + case 'underline': { + $opt['border'] = array(0, 0, $linewidth); + $opt['bs'] = array('w'=>$linewidth, 's'=>'U'); + break; + } + default: + case 'border.s': + case 'solid': { + $opt['border'] = array(0, 0, $linewidth); + $opt['bs'] = array('w'=>$linewidth, 's'=>'S'); + break; + } + } + } + if (isset($prop['border']) AND is_array($prop['border'])) { + $opt['border'] = $prop['border']; + } + if (!isset($opt['mk'])) { + $opt['mk'] = array(); + } + if (!isset($opt['mk']['if'])) { + $opt['mk']['if'] = array(); + } + $opt['mk']['if']['a'] = array(0.5, 0.5); + // buttonAlignX: Controls how space is distributed from the left of the button face with respect to the icon. + if (isset($prop['buttonAlignX'])) { + $opt['mk']['if']['a'][0] = $prop['buttonAlignX']; + } + // buttonAlignY: Controls how unused space is distributed from the bottom of the button face with respect to the icon. + if (isset($prop['buttonAlignY'])) { + $opt['mk']['if']['a'][1] = $prop['buttonAlignY']; + } + // buttonFitBounds: If true, the extent to which the icon may be scaled is set to the bounds of the button field. + if (isset($prop['buttonFitBounds']) AND ($prop['buttonFitBounds'] == 'true')) { + $opt['mk']['if']['fb'] = true; + } + // buttonScaleHow: Controls how the icon is scaled (if necessary) to fit inside the button face. + if (isset($prop['buttonScaleHow'])) { + switch ($prop['buttonScaleHow']) { + case 'scaleHow.proportional': { + $opt['mk']['if']['s'] = 'P'; + break; + } + case 'scaleHow.anamorphic': { + $opt['mk']['if']['s'] = 'A'; + break; + } + } + } + // buttonScaleWhen: Controls when an icon is scaled to fit inside the button face. + if (isset($prop['buttonScaleWhen'])) { + switch ($prop['buttonScaleWhen']) { + case 'scaleWhen.always': { + $opt['mk']['if']['sw'] = 'A'; + break; + } + case 'scaleWhen.never': { + $opt['mk']['if']['sw'] = 'N'; + break; + } + case 'scaleWhen.tooBig': { + $opt['mk']['if']['sw'] = 'B'; + break; + } + case 'scaleWhen.tooSmall': { + $opt['mk']['if']['sw'] = 'S'; + break; + } + } + } + // buttonPosition: Controls how the text and the icon of the button are positioned with respect to each other within the button face. + if (isset($prop['buttonPosition'])) { + switch ($prop['buttonPosition']) { + case 0: + case 'position.textOnly': { + $opt['mk']['tp'] = 0; + break; + } + case 1: + case 'position.iconOnly': { + $opt['mk']['tp'] = 1; + break; + } + case 2: + case 'position.iconTextV': { + $opt['mk']['tp'] = 2; + break; + } + case 3: + case 'position.textIconV': { + $opt['mk']['tp'] = 3; + break; + } + case 4: + case 'position.iconTextH': { + $opt['mk']['tp'] = 4; + break; + } + case 5: + case 'position.textIconH': { + $opt['mk']['tp'] = 5; + break; + } + case 6: + case 'position.overlay': { + $opt['mk']['tp'] = 6; + break; + } + } + } + // fillColor: Specifies the background color for a field. + if (isset($prop['fillColor'])) { + if (is_array($prop['fillColor'])) { + $opt['mk']['bg'] = $prop['fillColor']; + } else { + $opt['mk']['bg'] = $this->convertHTMLColorToDec($prop['fillColor']); + } + } + // strokeColor: Specifies the stroke color for a field that is used to stroke the rectangle of the field with a line as large as the line width. + if (isset($prop['strokeColor'])) { + if (is_array($prop['strokeColor'])) { + $opt['mk']['bc'] = $prop['strokeColor']; + } else { + $opt['mk']['bc'] = $this->convertHTMLColorToDec($prop['strokeColor']); + } + } + // rotation: The rotation of a widget in counterclockwise increments. + if (isset($prop['rotation'])) { + $opt['mk']['r'] = $prop['rotation']; + } + // charLimit: Limits the number of characters that a user can type into a text field. + if (isset($prop['charLimit'])) { + $opt['maxlen'] = intval($prop['charLimit']); + } + if (!isset($ff)) { + $ff = 0; + } + // readonly: The read-only characteristic of a field. If a field is read-only, the user can see the field but cannot change it. + if (isset($prop['readonly']) AND ($prop['readonly'] == 'true')) { + $ff += 1 << 0; + } + // required: Specifies whether a field requires a value. + if (isset($prop['required']) AND ($prop['required'] == 'true')) { + $ff += 1 << 1; + } + // multiline: Controls how text is wrapped within the field. + if (isset($prop['multiline']) AND ($prop['multiline'] == 'true')) { + $ff += 1 << 12; + } + // password: Specifies whether the field should display asterisks when data is entered in the field. + if (isset($prop['password']) AND ($prop['password'] == 'true')) { + $ff += 1 << 13; + } + // NoToggleToOff: If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. + if (isset($prop['NoToggleToOff']) AND ($prop['NoToggleToOff'] == 'true')) { + $ff += 1 << 14; + } + // Radio: If set, the field is a set of radio buttons. + if (isset($prop['Radio']) AND ($prop['Radio'] == 'true')) { + $ff += 1 << 15; + } + // Pushbutton: If set, the field is a pushbutton that does not retain a permanent value. + if (isset($prop['Pushbutton']) AND ($prop['Pushbutton'] == 'true')) { + $ff += 1 << 16; + } + // Combo: If set, the field is a combo box; if clear, the field is a list box. + if (isset($prop['Combo']) AND ($prop['Combo'] == 'true')) { + $ff += 1 << 17; + } + // editable: Controls whether a combo box is editable. + if (isset($prop['editable']) AND ($prop['editable'] == 'true')) { + $ff += 1 << 18; + } + // Sort: If set, the field's option items shall be sorted alphabetically. + if (isset($prop['Sort']) AND ($prop['Sort'] == 'true')) { + $ff += 1 << 19; + } + // fileSelect: If true, sets the file-select flag in the Options tab of the text field (Field is Used for File Selection). + if (isset($prop['fileSelect']) AND ($prop['fileSelect'] == 'true')) { + $ff += 1 << 20; + } + // multipleSelection: If true, indicates that a list box allows a multiple selection of items. + if (isset($prop['multipleSelection']) AND ($prop['multipleSelection'] == 'true')) { + $ff += 1 << 21; + } + // doNotSpellCheck: If true, spell checking is not performed on this editable text field. + if (isset($prop['doNotSpellCheck']) AND ($prop['doNotSpellCheck'] == 'true')) { + $ff += 1 << 22; + } + // doNotScroll: If true, the text field does not scroll and the user, therefore, is limited by the rectangular region designed for the field. + if (isset($prop['doNotScroll']) AND ($prop['doNotScroll'] == 'true')) { + $ff += 1 << 23; + } + // comb: If set to true, the field background is drawn as series of boxes (one for each character in the value of the field) and each character of the content is drawn within those boxes. The number of boxes drawn is determined from the charLimit property. It applies only to text fields. The setter will also raise if any of the following field properties are also set multiline, password, and fileSelect. A side-effect of setting this property is that the doNotScroll property is also set. + if (isset($prop['comb']) AND ($prop['comb'] == 'true')) { + $ff += 1 << 24; + } + // radiosInUnison: If false, even if a group of radio buttons have the same name and export value, they behave in a mutually exclusive fashion, like HTML radio buttons. + if (isset($prop['radiosInUnison']) AND ($prop['radiosInUnison'] == 'true')) { + $ff += 1 << 25; + } + // richText: If true, the field allows rich text formatting. + if (isset($prop['richText']) AND ($prop['richText'] == 'true')) { + $ff += 1 << 25; + } + // commitOnSelChange: Controls whether a field value is committed after a selection change. + if (isset($prop['commitOnSelChange']) AND ($prop['commitOnSelChange'] == 'true')) { + $ff += 1 << 26; + } + $opt['ff'] = $ff; + // defaultValue: The default value of a field - that is, the value that the field is set to when the form is reset. + if (isset($prop['defaultValue'])) { + $opt['dv'] = $prop['defaultValue']; + } + $f = 4; // default value for annotation flags + // readonly: The read-only characteristic of a field. If a field is read-only, the user can see the field but cannot change it. + if (isset($prop['readonly']) AND ($prop['readonly'] == 'true')) { + $f += 1 << 6; + } + // display: Controls whether the field is hidden or visible on screen and in print. + if (isset($prop['display'])) { + if ($prop['display'] == 'display.visible') { + // + } elseif ($prop['display'] == 'display.hidden') { + $f += 1 << 1; + } elseif ($prop['display'] == 'display.noPrint') { + $f -= 1 << 2; + } elseif ($prop['display'] == 'display.noView') { + $f += 1 << 5; + } + } + $opt['f'] = $f; + // currentValueIndices: Reads and writes single or multiple values of a list box or combo box. + if (isset($prop['currentValueIndices']) AND is_array($prop['currentValueIndices'])) { + $opt['i'] = $prop['currentValueIndices']; + } + // value: The value of the field data that the user has entered. + if (isset($prop['value'])) { + if (is_array($prop['value'])) { + $opt['opt'] = array(); + foreach ($prop['value'] AS $key => $optval) { + // exportValues: An array of strings representing the export values for the field. + if (isset($prop['exportValues'][$key])) { + $opt['opt'][$key] = array($prop['exportValues'][$key], $prop['value'][$key]); + } else { + $opt['opt'][$key] = $prop['value'][$key]; + } + } + } else { + $opt['v'] = $prop['value']; + } + } + // richValue: This property specifies the text contents and formatting of a rich text field. + if (isset($prop['richValue'])) { + $opt['rv'] = $prop['richValue']; + } + // submitName: If nonempty, used during form submission instead of name. Only applicable if submitting in HTML format (that is, URL-encoded). + if (isset($prop['submitName'])) { + $opt['tm'] = $prop['submitName']; + } + // name: Fully qualified field name. + if (isset($prop['name'])) { + $opt['t'] = $prop['name']; + } + // userName: The user name (short description string) of the field. + if (isset($prop['userName'])) { + $opt['tu'] = $prop['userName']; + } + // highlight: Defines how a button reacts when a user clicks it. + if (isset($prop['highlight'])) { + switch ($prop['highlight']) { + case 'none': + case 'highlight.n': { + $opt['h'] = 'N'; + break; + } + case 'invert': + case 'highlight.i': { + $opt['h'] = 'i'; + break; + } + case 'push': + case 'highlight.p': { + $opt['h'] = 'P'; + break; + } + case 'outline': + case 'highlight.o': { + $opt['h'] = 'O'; + break; + } + } + } + // Unsupported options: + // - calcOrderIndex: Changes the calculation order of fields in the document. + // - delay: Delays the redrawing of a field's appearance. + // - defaultStyle: This property defines the default style attributes for the form field. + // - style: Allows the user to set the glyph style of a check box or radio button. + // - textColor, textFont, textSize + return $opt; + } + + /** + * Set default properties for form fields. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-06) + */ + public function setFormDefaultProp($prop=array()) { + $this->default_form_prop = $prop; + } + + /** + * Return the default properties for form fields. + * @return array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-06) + */ + public function getFormDefaultProp() { + return $this->default_form_prop; + } + + /** + * Creates a text field + * @param string $name field name + * @param float $w Width of the rectangle + * @param float $h Height of the rectangle + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function TextField($name, $w, $h, $prop=array(), $opt=array(), $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if ($js) { + $this->_addfield('text', $name, $x, $y, $w, $h, $prop); + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + // get annotation data + $popt = $this->getAnnotOptFromJSProp($prop); + // set default appearance stream + $font = $this->FontFamily; + $fontkey = array_search($font, $this->fontkeys); + if (!in_array($fontkey, $this->annotation_fonts)) { + $this->annotation_fonts[$font] = $fontkey; + } + $fontstyle = sprintf('/F%d %.2F Tf %s', ($fontkey + 1), $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + $popt['ap'] = array(); + $popt['ap']['n'] = 'q BT '.$fontstyle.' ET Q'; + // merge options + $opt = array_merge($popt, $opt); + // remove some conflicting options + unset($opt['bs']); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Tx'; + $opt['t'] = $name; + /* + Additional annotation's parameters (check _putannotsobj() method): + //$opt['f'] + //$opt['ap'] + //$opt['as'] + //$opt['bs'] + //$opt['be'] + //$opt['c'] + //$opt['border'] + //$opt['h'] + //$opt['mk'] + //$opt['mk']['r'] + //$opt['mk']['bc'] + //$opt['mk']['bg'] + //$opt['mk']['ca'] + //$opt['mk']['rc'] + //$opt['mk']['ac'] + //$opt['mk']['i'] + //$opt['mk']['ri'] + //$opt['mk']['ix'] + //$opt['mk']['if'] + //$opt['mk']['if']['sw'] + //$opt['mk']['if']['s'] + //$opt['mk']['if']['a'] + //$opt['mk']['if']['fb'] + //$opt['mk']['tp'] + //$opt['tu'] + //$opt['tm'] + //$opt['ff'] + //$opt['v'] + //$opt['dv'] + //$opt['a'] + //$opt['aa'] + //$opt['q'] + */ + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a RadioButton field + * @param string $name field name + * @param int $w width + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param string $onvalue value to be returned if selected. + * @param boolean $checked define the initial state. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function RadioButton($name, $w, $prop=array(), $opt=array(), $onvalue='On', $checked=false, $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if ($js) { + $this->_addfield('radiobutton', $name, $x, $y, $w, $w, $prop); + return; + } + if ($this->empty_string($onvalue)) { + $onvalue = 'On'; + } + if ($checked) { + $defval = $onvalue; + } else { + $defval = 'Off'; + } + // set data for parent group + if (!isset($this->radiobutton_groups[$this->page])) { + $this->radiobutton_groups[$this->page] = array(); + } + if (!isset($this->radiobutton_groups[$this->page][$name])) { + $this->radiobutton_groups[$this->page][$name] = array(); + ++$this->annot_obj_id; + $this->radio_groups[] = $this->annot_obj_id; + } + // save object ID to be added on Kids entry on parent object + $this->radiobutton_groups[$this->page][$name][] = array('kid' => ($this->annot_obj_id + 1), 'def' => $defval); + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['NoToggleToOff'] = 'true'; + $prop['Radio'] = 'true'; + $prop['borderStyle'] = 'inset'; + // get annotation data + $popt = $this->getAnnotOptFromJSProp($prop); + // set additional default values + $font = 'zapfdingbats'; + $this->AddFont($font); + $fontkey = array_search($font, $this->fontkeys); + if (!in_array($fontkey, $this->annotation_fonts)) { + $this->annotation_fonts[$font] = $fontkey; + } + $fontstyle = sprintf('/F%d %.2F Tf %s', ($fontkey + 1), $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + $popt['ap'] = array(); + $popt['ap']['n'] = array(); + $popt['ap']['n'][$onvalue] = 'q BT '.$fontstyle.' 0 0 Td (8) Tj ET Q'; + $popt['ap']['n']['Off'] = 'q BT '.$fontstyle.' 0 0 Td (8) Tj ET Q'; + if (!isset($popt['mk'])) { + $popt['mk'] = array(); + } + $popt['mk']['ca'] = '(l)'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Btn'; + if ($checked) { + $opt['v'] = array('/'.$onvalue); + $opt['as'] = $onvalue; + } else { + $opt['as'] = 'Off'; + } + $this->Annotation($x, $y, $w, $w, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a List-box field + * @param string $name field name + * @param int $w width + * @param int $h height + * @param array $values array containing the list of values. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function ListBox($name, $w, $h, $values, $prop=array(), $opt=array(), $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if ($js) { + $this->_addfield('listbox', $name, $x, $y, $w, $h, $prop); + $s = ''; + foreach ($values as $value) { + $s .= "'".addslashes($value)."',"; + } + $this->javascript .= 'f'.$name.'.setItems(['.substr($s, 0, -1)."]);\n"; + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + // get annotation data + $popt = $this->getAnnotOptFromJSProp($prop); + // set additional default values + $font = $this->FontFamily; + $fontkey = array_search($font, $this->fontkeys); + if (!in_array($fontkey, $this->annotation_fonts)) { + $this->annotation_fonts[$font] = $fontkey; + } + $fontstyle = sprintf('/F%d %.2F Tf %s', ($fontkey + 1), $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + $popt['ap'] = array(); + $popt['ap']['n'] = 'q BT '.$fontstyle.' ET Q'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Ch'; + $opt['t'] = $name; + $opt['opt'] = $values; + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a Combo-box field + * @param string $name field name + * @param int $w width + * @param int $h height + * @param array $values array containing the list of values. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function ComboBox($name, $w, $h, $values, $prop=array(), $opt=array(), $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if ($js) { + $this->_addfield('combobox', $name, $x, $y, $w, $h, $prop); + $s = ''; + foreach ($values as $value) { + $s .= "'".addslashes($value)."',"; + } + $this->javascript .= 'f'.$name.'.setItems(['.substr($s, 0, -1)."]);\n"; + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['Combo'] = true; + // get annotation data + $popt = $this->getAnnotOptFromJSProp($prop); + // set additional default options + $font = $this->FontFamily; + $fontkey = array_search($font, $this->fontkeys); + if (!in_array($fontkey, $this->annotation_fonts)) { + $this->annotation_fonts[$font] = $fontkey; + } + $fontstyle = sprintf('/F%d %.2F Tf %s', ($fontkey + 1), $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + $popt['ap'] = array(); + $popt['ap']['n'] = 'q BT '.$fontstyle.' ET Q'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Ch'; + $opt['t'] = $name; + $opt['opt'] = $values; + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a CheckBox field + * @param string $name field name + * @param int $w width + * @param boolean $checked define the initial state. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param string $onvalue value to be returned if selected. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function CheckBox($name, $w, $checked=false, $prop=array(), $opt=array(), $onvalue='Yes', $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if ($js) { + $this->_addfield('checkbox', $name, $x, $y, $w, $w, $prop); + return; + } + if (!isset($prop['value'])) { + $prop['value'] = array('Yes'); + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['borderStyle'] = 'inset'; + // get annotation data + $popt = $this->getAnnotOptFromJSProp($prop); + // set additional default options + $font = 'zapfdingbats'; + $this->AddFont($font); + $fontkey = array_search($font, $this->fontkeys); + if (!in_array($fontkey, $this->annotation_fonts)) { + $this->annotation_fonts[$font] = $fontkey; + } + $fontstyle = sprintf('/F%d %.2F Tf %s', ($fontkey + 1), $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + $popt['ap'] = array(); + $popt['ap']['n'] = array(); + $popt['ap']['n']['Yes'] = 'q BT '.$fontstyle.' 0 0 Td (8) Tj ET Q'; + $popt['ap']['n']['Off'] = 'q BT '.$fontstyle.' 0 0 Td (8) Tj ET Q'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Btn'; + $opt['t'] = $name; + $opt['opt'] = array($onvalue); + if ($checked) { + $opt['v'] = array('/0'); + $opt['as'] = 'Yes'; + } else { + $opt['v'] = array('/Off'); + $opt['as'] = 'Off'; + } + $this->Annotation($x, $y, $w, $w, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a button field + * @param string $name field name + * @param int $w width + * @param int $h height + * @param string $caption caption. + * @param mixed $action action triggered by pressing the button. Use a string to specify a javascript action. Use an array to specify a form action options as on section 12.7.5 of PDF32000_2008. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @access public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function Button($name, $w, $h, $caption, $action, $prop=array(), $opt=array(), $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if ($js) { + $this->_addfield('button', $name, $this->x, $this->y, $w, $h, $prop); + $this->javascript .= 'f'.$name.".buttonSetCaption('".addslashes($caption)."');\n"; + $this->javascript .= 'f'.$name.".setAction('MouseUp','".addslashes($action)."');\n"; + $this->javascript .= 'f'.$name.".highlight='push';\n"; + $this->javascript .= 'f'.$name.".print=false;\n"; + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['Pushbutton'] = 'true'; + $prop['highlight'] = 'push'; + $prop['display'] = 'display.noPrint'; + // get annotation data + $popt = $this->getAnnotOptFromJSProp($prop); + // set additional default options + if (!isset($popt['mk'])) { + $popt['mk'] = array(); + } + $popt['mk']['ca'] = $this->_textstring($caption); + $popt['mk']['rc'] = $this->_textstring($caption); + $popt['mk']['ac'] = $this->_textstring($caption); + $font = $this->FontFamily; + $fontkey = array_search($font, $this->fontkeys); + if (!in_array($fontkey, $this->annotation_fonts)) { + $this->annotation_fonts[$font] = $fontkey; + } + $fontstyle = sprintf('/F%d %.2F Tf %s', ($fontkey + 1), $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + $popt['ap'] = array(); + $popt['ap']['n'] = 'q BT '.$fontstyle.' ET Q'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Btn'; + $opt['t'] = $caption; + $opt['v'] = $name; + if (!empty($action)) { + if (is_array($action)) { + // form action options as on section 12.7.5 of PDF32000_2008. + $opt['aa'] = '/D <<'; + $bmode = array('SubmitForm', 'ResetForm', 'ImportData'); + foreach ($action AS $key => $val) { + if (($key == 'S') AND in_array($val, $bmode)) { + $opt['aa'] .= ' /S /'.$val; + } elseif (($key == 'F') AND (!empty($val))) { + $opt['aa'] .= ' /F '.$this->_datastring($val); + } elseif (($key == 'Fields') AND is_array($val) AND !empty($val)) { + $opt['aa'] .= ' /Fields ['; + foreach ($val AS $field) { + $opt['aa'] .= ' '.$this->_textstring($field); + } + $opt['aa'] .= ']'; + } elseif (($key == 'Flags')) { + $ff = 0; + if (is_array($val)) { + foreach ($val AS $flag) { + switch ($flag) { + case 'Include/Exclude': { + $ff += 1 << 0; + break; + } + case 'IncludeNoValueFields': { + $ff += 1 << 1; + break; + } + case 'ExportFormat': { + $ff += 1 << 2; + break; + } + case 'GetMethod': { + $ff += 1 << 3; + break; + } + case 'SubmitCoordinates': { + $ff += 1 << 4; + break; + } + case 'XFDF': { + $ff += 1 << 5; + break; + } + case 'IncludeAppendSaves': { + $ff += 1 << 6; + break; + } + case 'IncludeAnnotations': { + $ff += 1 << 7; + break; + } + case 'SubmitPDF': { + $ff += 1 << 8; + break; + } + case 'CanonicalFormat': { + $ff += 1 << 9; + break; + } + case 'ExclNonUserAnnots': { + $ff += 1 << 10; + break; + } + case 'ExclFKey': { + $ff += 1 << 11; + break; + } + case 'EmbedForm': { + $ff += 1 << 13; + break; + } + } + } + } else { + $ff = intval($val); + } + $opt['aa'] .= ' /Flags '.$ff; + } + } + $opt['aa'] .= ' >>'; + } else { + // Javascript action or raw action command + $js_obj_id = $this->addJavascriptObject($action); + $opt['aa'] = '/D '.$js_obj_id.' 0 R'; + } + } + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + // --- END FORMS FIELDS ------------------------------------------------ + + /** + * Add certification signature (DocMDP or UR3) + * You can set only one signature type + * @access protected + * @author Nicola Asuni + * @since 4.6.008 (2009-05-07) + */ + protected function _putsignature() { + if ((!$this->sign) OR (!isset($this->signature_data['cert_type']))) { + return; + } + $this->_newobj(); + $out = ' << /Type /Sig'; + $out .= ' /Filter /Adobe.PPKLite'; + $out .= ' /SubFilter /adbe.pkcs7.detached'; + $out .= ' '.$this->byterange_string; + $out .= ' /Contents<>'.str_repeat(' ', $this->signature_max_length); + $out .= ' /Reference'; + $out .= ' ['; + $out .= ' << /Type /SigRef'; + if ($this->signature_data['cert_type'] > 0) { + $out .= ' /TransformMethod /DocMDP'; + $out .= ' /TransformParams'; + $out .= ' <<'; + $out .= ' /Type /TransformParams'; + $out .= ' /V /1.2'; + $out .= ' /P '.$this->signature_data['cert_type']; + } else { + $out .= ' /TransformMethod /UR3'; + $out .= ' /TransformParams'; + $out .= ' << /Type /TransformParams'; + $out .= ' /V /2.2'; + if (!$this->empty_string($this->ur_document)) { + $out .= ' /Document['.$this->ur_document.']'; + } + if (!$this->empty_string($this->ur_annots)) { + $out .= ' /Annots['.$this->ur_annots.']'; + } + if (!$this->empty_string($this->ur_form)) { + $out .= ' /Form['.$this->ur_form.']'; + } + if (!$this->empty_string($this->ur_signature)) { + $out .= ' /Signature['.$this->ur_signature.']'; + } + } + $out .= ' >> >> ]'; + if (isset($this->signature_data['info']['Name']) AND !$this->empty_string($this->signature_data['info']['Name'])) { + $out .= ' /Name '.$this->_textstring($this->signature_data['info']['Name']); + } + if (isset($this->signature_data['info']['Location']) AND !$this->empty_string($this->signature_data['info']['Location'])) { + $out .= ' /Location '.$this->_textstring($this->signature_data['info']['Location']); + } + if (isset($this->signature_data['info']['Reason']) AND !$this->empty_string($this->signature_data['info']['Reason'])) { + $out .= ' /Reason '.$this->_textstring($this->signature_data['info']['Reason']); + } + if (isset($this->signature_data['info']['ContactInfo']) AND !$this->empty_string($this->signature_data['info']['ContactInfo'])) { + $out .= ' /ContactInfo '.$this->_textstring($this->signature_data['info']['ContactInfo']); + } + $out .= ' /M '.$this->_datestring(); + $out .= ' >> endobj'; + $this->_out($out); + } + + /** + * Set User's Rights for PDF Reader + * WARNING: This works only using the Adobe private key with the setSignature() method!. + * Check the PDF Reference 8.7.1 Transform Methods, + * Table 8.105 Entries in the UR transform parameters dictionary + * @param boolean $enable if true enable user's rights on PDF reader + * @param string $document Names specifying additional document-wide usage rights for the document. The only defined value is "/FullSave", which permits a user to save the document along with modified form and/or annotation data. + * @param string $annots Names specifying additional annotation-related usage rights for the document. Valid names in PDF 1.5 and later are /Create/Delete/Modify/Copy/Import/Export, which permit the user to perform the named operation on annotations. + * @param string $form Names specifying additional form-field-related usage rights for the document. Valid names are: /Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate + * @param string $signature Names specifying additional signature-related usage rights for the document. The only defined value is /Modify, which permits a user to apply a digital signature to an existing signature form field or clear a signed signature form field. + * @access public + * @author Nicola Asuni + * @since 2.9.000 (2008-03-26) + */ + public function setUserRights( + $enable=true, + $document='/FullSave', + $annots='/Create/Delete/Modify/Copy/Import/Export', + $form='/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate', + $signature='/Modify') { + $this->ur = $enable; + $this->ur_document = $document; + $this->ur_annots = $annots; + $this->ur_form = $form; + $this->ur_signature = $signature; + if (!$this->sign) { + // This signature only works using the Adobe Private key that is unavailable! + $this->setSignature('', '', '', '', 0, array()); + } + } + + /** + * Enable document signature (requires the OpenSSL Library). + * The digital signature improve document authenticity and integrity and allows o enable extra features on Acrobat Reader. + * @param mixed $signing_cert signing certificate (string or filename prefixed with 'file://') + * @param mixed $private_key private key (string or filename prefixed with 'file://') + * @param string $private_key_password password + * @param string $extracerts specifies the name of a file containing a bunch of extra certificates to include in the signature which can for example be used to help the recipient to verify the certificate that you used. + * @param int $cert_type The access permissions granted for this document. Valid values shall be: 1 = No changes to the document shall be permitted; any change to the document shall invalidate the signature; 2 = Permitted changes shall be filling in forms, instantiating page templates, and signing; other changes shall invalidate the signature; 3 = Permitted changes shall be the same as for 2, as well as annotation creation, deletion, and modification; other changes shall invalidate the signature. + * @param array $info array of option information: Name, Location, Reason, ContactInfo. + * @access public + * @author Nicola Asuni + * @since 4.6.005 (2009-04-24) + */ + public function setSignature($signing_cert='', $private_key='', $private_key_password='', $extracerts='', $cert_type=2, $info=array()) { + // to create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt + // to convert pfx certificate to pem: openssl + // OpenSSL> pkcs12 -in -out -nodes + $this->sign = true; + $this->signature_data = array(); + if (strlen($signing_cert) == 0) { + $signing_cert = 'file://'.dirname(__FILE__).'/tcpdf.crt'; + $private_key_password = 'tcpdfdemo'; + } + if (strlen($private_key) == 0) { + $private_key = $signing_cert; + } + $this->signature_data['signcert'] = $signing_cert; + $this->signature_data['privkey'] = $private_key; + $this->signature_data['password'] = $private_key_password; + $this->signature_data['extracerts'] = $extracerts; + $this->signature_data['cert_type'] = $cert_type; + $this->signature_data['info'] = $info; + } + + /** + * Create a new page group. + * NOTE: call this function before calling AddPage() + * @param int $page starting group page (leave empty for next page). + * @access public + * @since 3.0.000 (2008-03-27) + */ + public function startPageGroup($page='') { + if (empty($page)) { + $page = $this->page + 1; + } + $this->newpagegroup[$page] = true; + } + + /** + * Defines an alias for the total number of pages. + * It will be substituted as the document is closed. + * @param string $alias The alias. + * @access public + * @since 1.4 + * @see getAliasNbPages(), PageNo(), Footer() + */ + public function AliasNbPages($alias='{nb}') { + $this->AliasNbPages = $alias; + } + + /** + * Returns the string alias used for the total number of pages. + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * @return string + * @access public + * @since 4.0.018 (2008-08-08) + * @see AliasNbPages(), PageNo(), Footer() + */ + public function getAliasNbPages() { + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + return '{'.$this->AliasNbPages.'}'; + } + return $this->AliasNbPages; + } + + /** + * Defines an alias for the page number. + * It will be substituted as the document is closed. + * @param string $alias The alias. + * @access public + * @since 4.5.000 (2009-01-02) + * @see getAliasNbPages(), PageNo(), Footer() + */ + public function AliasNumPage($alias='{pnb}') { + //Define an alias for total number of pages + $this->AliasNumPage = $alias; + } + + /** + * Returns the string alias used for the page number. + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * @return string + * @access public + * @since 4.5.000 (2009-01-02) + * @see AliasNbPages(), PageNo(), Footer() + */ + public function getAliasNumPage() { + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + return '{'.$this->AliasNumPage.'}'; + } + return $this->AliasNumPage; + } + + /** + * Return the current page in the group. + * @return current page in the group + * @access public + * @since 3.0.000 (2008-03-27) + */ + public function getGroupPageNo() { + return $this->pagegroups[$this->currpagegroup]; + } + + /** + * Returns the current group page number formatted as a string. + * @access public + * @since 4.3.003 (2008-11-18) + * @see PaneNo(), formatPageNumber() + */ + public function getGroupPageNoFormatted() { + return $this->formatPageNumber($this->getGroupPageNo()); + } + + /** + * Return the alias of the current page group + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * (will be replaced by the total number of pages in this group). + * @return alias of the current page group + * @access public + * @since 3.0.000 (2008-03-27) + */ + public function getPageGroupAlias() { + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + return '{'.$this->currpagegroup.'}'; + } + return $this->currpagegroup; + } + + /** + * Return the alias for the page number on the current page group + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * (will be replaced by the total number of pages in this group). + * @return alias of the current page group + * @access public + * @since 4.5.000 (2009-01-02) + */ + public function getPageNumGroupAlias() { + if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) { + return '{'.str_replace('{nb', '{pnb', $this->currpagegroup).'}'; + } + return str_replace('{nb', '{pnb', $this->currpagegroup); + } + + /** + * Format the page numbers. + * This method can be overriden for custom formats. + * @param int $num page number + * @access protected + * @since 4.2.005 (2008-11-06) + */ + protected function formatPageNumber($num) { + return number_format((float)$num, 0, '', '.'); + } + + /** + * Format the page numbers on the Table Of Content. + * This method can be overriden for custom formats. + * @param int $num page number + * @access protected + * @since 4.5.001 (2009-01-04) + * @see addTOC(), addHTMLTOC() + */ + protected function formatTOCPageNumber($num) { + return number_format((float)$num, 0, '', '.'); + } + + /** + * Returns the current page number formatted as a string. + * @access public + * @since 4.2.005 (2008-11-06) + * @see PaneNo(), formatPageNumber() + */ + public function PageNoFormatted() { + return $this->formatPageNumber($this->PageNo()); + } + + /** + * Put visibility settings. + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected function _putocg() { + $this->_newobj(); + $this->n_ocg_print = $this->n; + $this->_out('<< /Type /OCG /Name '.$this->_textstring('print').' /Usage << /Print <> /View <> >> >> endobj'); + $this->_newobj(); + $this->n_ocg_view = $this->n; + $this->_out('<< /Type /OCG /Name '.$this->_textstring('view').' /Usage << /Print <> /View <> >> >> endobj'); + } + + /** + * Set the visibility of the successive elements. + * This can be useful, for instance, to put a background + * image or color that will show on screen but won't print. + * @param string $v visibility mode. Legal values are: all, print, screen. + * @access public + * @since 3.0.000 (2008-03-27) + */ + public function setVisibility($v) { + if ($this->openMarkedContent) { + // close existing open marked-content + $this->_out('EMC'); + $this->openMarkedContent = false; + } + switch($v) { + case 'print': { + $this->_out('/OC /OC1 BDC'); + $this->openMarkedContent = true; + break; + } + case 'screen': { + $this->_out('/OC /OC2 BDC'); + $this->openMarkedContent = true; + break; + } + case 'all': { + $this->_out(''); + break; + } + default: { + $this->Error('Incorrect visibility: '.$v); + break; + } + } + $this->visibility = $v; + } + + /** + * Add transparency parameters to the current extgstate + * @param array $params parameters + * @return the number of extgstates + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected function addExtGState($parms) { + $n = count($this->extgstates) + 1; + // check if this ExtGState already exist + for ($i = 1; $i < $n; ++$i) { + if ($this->extgstates[$i]['parms'] == $parms) { + // return reference to existing ExtGState + return $i; + } + } + $this->extgstates[$n]['parms'] = $parms; + return $n; + } + + /** + * Add an extgstate + * @param array $gs extgstate + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected function setExtGState($gs) { + $this->_out(sprintf('/GS%d gs', $gs)); + } + + /** + * Put extgstates for object transparency + * @param array $gs extgstate + * @access protected + * @since 3.0.000 (2008-03-27) + */ + protected function _putextgstates() { + $ne = count($this->extgstates); + for ($i = 1; $i <= $ne; ++$i) { + $this->_newobj(); + $this->extgstates[$i]['n'] = $this->n; + $out = '<< /Type /ExtGState'; + foreach ($this->extgstates[$i]['parms'] as $k => $v) { + if (is_float($v)) { + $v = sprintf('%.2F', $v); + } + $out .= ' /'.$k.' '.$v; + } + $out .= ' >> endobj'; + $this->_out($out); + } + } + + /** + * Set alpha for stroking (CA) and non-stroking (ca) operations. + * @param float $alpha real value from 0 (transparent) to 1 (opaque) + * @param string $bm blend mode, one of the following: Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity + * @access public + * @since 3.0.000 (2008-03-27) + */ + public function setAlpha($alpha, $bm='Normal') { + $gs = $this->addExtGState(array('ca' => $alpha, 'CA' => $alpha, 'BM' => '/'.$bm, 'AIS' => 'false')); + $this->setExtGState($gs); + } + + /** + * Set the default JPEG compression quality (1-100) + * @param int $quality JPEG quality, integer between 1 and 100 + * @access public + * @since 3.0.000 (2008-03-27) + */ + public function setJPEGQuality($quality) { + if (($quality < 1) OR ($quality > 100)) { + $quality = 75; + } + $this->jpeg_quality = intval($quality); + } + + /** + * Set the default number of columns in a row for HTML tables. + * @param int $cols number of columns + * @access public + * @since 3.0.014 (2008-06-04) + */ + public function setDefaultTableColumns($cols=4) { + $this->default_table_columns = intval($cols); + } + + /** + * Set the height of the cell (line height) respect the font height. + * @param int $h cell proportion respect font height (typical value = 1.25). + * @access public + * @since 3.0.014 (2008-06-04) + */ + public function setCellHeightRatio($h) { + $this->cell_height_ratio = $h; + } + + /** + * return the height of cell repect font height. + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getCellHeightRatio() { + return $this->cell_height_ratio; + } + + /** + * Set the PDF version (check PDF reference for valid values). + * Default value is 1.t + * @access public + * @since 3.1.000 (2008-06-09) + */ + public function setPDFVersion($version='1.7') { + $this->PDFVersion = $version; + } + + /** + * Set the viewer preferences dictionary controlling the way the document is to be presented on the screen or in print. + * (see Section 8.1 of PDF reference, "Viewer Preferences"). + *
      • HideToolbar boolean (Optional) A flag specifying whether to hide the viewer application's tool bars when the document is active. Default value: false.
      • HideMenubar boolean (Optional) A flag specifying whether to hide the viewer application's menu bar when the document is active. Default value: false.
      • HideWindowUI boolean (Optional) A flag specifying whether to hide user interface elements in the document's window (such as scroll bars and navigation controls), leaving only the document's contents displayed. Default value: false.
      • FitWindow boolean (Optional) A flag specifying whether to resize the document's window to fit the size of the first displayed page. Default value: false.
      • CenterWindow boolean (Optional) A flag specifying whether to position the document's window in the center of the screen. Default value: false.
      • DisplayDocTitle boolean (Optional; PDF 1.4) A flag specifying whether the window's title bar should display the document title taken from the Title entry of the document information dictionary (see Section 10.2.1, "Document Information Dictionary"). If false, the title bar should instead display the name of the PDF file containing the document. Default value: false.
      • NonFullScreenPageMode name (Optional) The document's page mode, specifying how to display the document on exiting full-screen mode:
        • UseNone Neither document outline nor thumbnail images visible
        • UseOutlines Document outline visible
        • UseThumbs Thumbnail images visible
        • UseOC Optional content group panel visible
        This entry is meaningful only if the value of the PageMode entry in the catalog dictionary (see Section 3.6.1, "Document Catalog") is FullScreen; it is ignored otherwise. Default value: UseNone.
      • ViewArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be displayed when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:
        • MediaBox
        • CropBox (default)
        • BleedBox
        • TrimBox
        • ArtBox
      • ViewClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:
        • MediaBox
        • CropBox (default)
        • BleedBox
        • TrimBox
        • ArtBox
      • PrintArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be rendered when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:
        • MediaBox
        • CropBox (default)
        • BleedBox
        • TrimBox
        • ArtBox
      • PrintClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:
        • MediaBox
        • CropBox (default)
        • BleedBox
        • TrimBox
        • ArtBox
      • PrintScaling name (Optional; PDF 1.6) The page scaling option to be selected when a print dialog is displayed for this document. Valid values are:
        • None, which indicates that the print dialog should reflect no page scaling
        • AppDefault (default), which indicates that applications should use the current print scaling
      • Duplex name (Optional; PDF 1.7) The paper handling option to use when printing the file from the print dialog. The following values are valid:
        • Simplex - Print single-sided
        • DuplexFlipShortEdge - Duplex and flip on the short edge of the sheet
        • DuplexFlipLongEdge - Duplex and flip on the long edge of the sheet
        Default value: none
      • PickTrayByPDFSize boolean (Optional; PDF 1.7) A flag specifying whether the PDF page size is used to select the input paper tray. This setting influences only the preset values used to populate the print dialog presented by a PDF viewer application. If PickTrayByPDFSize is true, the check box in the print dialog associated with input paper tray is checked. Note: This setting has no effect on Mac OS systems, which do not provide the ability to pick the input tray by size.
      • PrintPageRange array (Optional; PDF 1.7) The page numbers used to initialize the print dialog box when the file is printed. The first page of the PDF file is denoted by 1. Each pair consists of the first and last pages in the sub-range. An odd number of integers causes this entry to be ignored. Negative numbers cause the entire array to be ignored. Default value: as defined by PDF viewer application
      • NumCopies integer (Optional; PDF 1.7) The number of copies to be printed when the print dialog is opened for this file. Supported values are the integers 2 through 5. Values outside this range are ignored. Default value: as defined by PDF viewer application, but typically 1
      + * @param array $preferences array of options. + * @author Nicola Asuni + * @access public + * @since 3.1.000 (2008-06-09) + */ + public function setViewerPreferences($preferences) { + $this->viewer_preferences = $preferences; + } + + /** + * Paints color transition registration bars + * @param float $x abscissa of the top left corner of the rectangle. + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @param boolean $transition if true prints tcolor transitions to white. + * @param boolean $vertical if true prints bar vertically. + * @param string $colors colors to print, one letter per color separated by comma (for example 'A,W,R,G,B,C,M,Y,K'): A=black, W=white, R=red, G=green, B=blue, C=cyan, M=magenta, Y=yellow, K=black. + * @author Nicola Asuni + * @since 4.9.000 (2010-03-26) + * @access public + */ + public function colorRegistrationBar($x, $y, $w, $h, $transition=true, $vertical=false, $colors='A,R,G,B,C,M,Y,K') { + $bars = explode(',', $colors); + $numbars = count($bars); // number of bars to print + // set bar measures + if ($vertical) { + $coords = array(0, 0, 0, 1); + $wb = $w / $numbars; // bar width + $hb = $h; // bar height + $xd = $wb; // delta x + $yd = 0; // delta y + } else { + $coords = array(1, 0, 0, 0); + $wb = $w; // bar width + $hb = $h / $numbars; // bar height + $xd = 0; // delta x + $yd = $hb; // delta y + } + $xb = $x; + $yb = $y; + foreach ($bars as $col) { + switch ($col) { + // set transition colors + case 'A': { // BLACK + $col_a = array(255); + $col_b = array(0); + break; + } + case 'W': { // WHITE + $col_a = array(0); + $col_b = array(255); + break; + } + case 'R': { // R + $col_a = array(255,255,255); + $col_b = array(255,0,0); + break; + } + case 'G': { // G + $col_a = array(255,255,255); + $col_b = array(0,255,0); + break; + } + case 'B': { // B + $col_a = array(255,255,255); + $col_b = array(0,0,255); + break; + } + case 'C': { // C + $col_a = array(0,0,0,0); + $col_b = array(100,0,0,0); + break; + } + case 'M': { // M + $col_a = array(0,0,0,0); + $col_b = array(0,100,0,0); + break; + } + case 'Y': { // Y + $col_a = array(0,0,0,0); + $col_b = array(0,0,100,0); + break; + } + case 'K': { // K + $col_a = array(0,0,0,0); + $col_b = array(0,0,0,100); + break; + } + default: { // GRAY + $col_a = array(255); + $col_b = array(0); + break; + } + } + if ($transition) { + // color gradient + $this->LinearGradient($xb, $yb, $wb, $hb, $col_a, $col_b, $coords); + } else { + // color rectangle + $this->SetFillColorArray($col_b); + $this->Rect($xb, $yb, $wb, $hb, 'F', array()); + } + $xb += $xd; + $yb += $yd; + } + } + + /** + * Paints crop mark + * @param float $x abscissa of the crop mark center. + * @param float $y ordinate of the crop mark center. + * @param float $w width of the crop mark. + * @param float $h height of the crop mark. + * @param string $type type of crop mark, one sybol per type separated by comma: A = top left, B = top right, C = bottom left, D = bottom right. + * @param array $color crop mark color (default black). + * @author Nicola Asuni + * @since 4.9.000 (2010-03-26) + * @access public + */ + public function cropMark($x, $y, $w, $h, $type='A,B,C,D', $color=array(0,0,0)) { + $this->SetLineStyle(array('width' => (0.5 / $this->k), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $color)); + $crops = explode(',', $type); + $numcrops = count($crops); // number of crop marks to print + $dw = $w / 4; // horizontal space to leave before the intersection point + $dh = $h / 4; // vertical space to leave before the intersection point + foreach ($crops as $crop) { + switch ($crop) { + case 'A': { + $x1 = $x; + $y1 = $y - $h; + $x2 = $x; + $y2 = $y - $dh; + $x3 = $x - $w; + $y3 = $y; + $x4 = $x - $dw; + $y4 = $y; + break; + } + case 'B': { + $x1 = $x; + $y1 = $y - $h; + $x2 = $x; + $y2 = $y - $dh; + $x3 = $x + $dw; + $y3 = $y; + $x4 = $x + $w; + $y4 = $y; + break; + } + case 'C': { + $x1 = $x - $w; + $y1 = $y; + $x2 = $x - $dw; + $y2 = $y; + $x3 = $x; + $y3 = $y + $dh; + $x4 = $x; + $y4 = $y + $h; + break; + } + case 'D': { + $x1 = $x + $dw; + $y1 = $y; + $x2 = $x + $w; + $y2 = $y; + $x3 = $x; + $y3 = $y + $dh; + $x4 = $x; + $y4 = $y + $h; + break; + } + } + $this->Line($x1, $y1, $x2, $y2); + $this->Line($x3, $y3, $x4, $y4); + } + } + + /** + * Paints a registration mark + * @param float $x abscissa of the registration mark center. + * @param float $y ordinate of the registration mark center. + * @param float $r radius of the crop mark. + * @param boolean $double if true print two concentric crop marks. + * @param array $cola crop mark color (default black). + * @param array $colb second crop mark color. + * @author Nicola Asuni + * @since 4.9.000 (2010-03-26) + * @access public + */ + public function registrationMark($x, $y, $r, $double=false, $cola=array(0,0,0), $colb=array(255,255,255)) { + $line_style = array('width' => (0.5 / $this->k), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $cola); + $this->SetFillColorArray($cola); + $this->PieSector($x, $y, $r, 90, 180, 'F'); + $this->PieSector($x, $y, $r, 270, 360, 'F'); + $this->Circle($x, $y, $r, 0, 360, 'C', $line_style, array(), 8); + if ($double) { + $r2 = $r * 0.5; + $this->SetFillColorArray($colb); + $this->PieSector($x, $y, $r2, 90, 180, 'F'); + $this->PieSector($x, $y, $r2, 270, 360, 'F'); + $this->SetFillColorArray($cola); + $this->PieSector($x, $y, $r2, 0, 90, 'F'); + $this->PieSector($x, $y, $r2, 180, 270, 'F'); + $this->Circle($x, $y, $r2, 0, 360, 'C', $line_style, array(), 8); + } + } + + /** + * Paints a linear colour gradient. + * @param float $x abscissa of the top left corner of the rectangle. + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @param array $col1 first color (Grayscale, RGB or CMYK components). + * @param array $col2 second color (Grayscale, RGB or CMYK components). + * @param array $coords array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg). The default value is from left to right (x1=0, y1=0, x2=1, y2=0). + * @author Andreas Wrmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function LinearGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0,0,1,0)) { + $this->Clip($x, $y, $w, $h); + $this->Gradient(2, $coords, array(array('color' => $col1, 'offset' => 0, 'exponent' => 1), array('color' => $col2, 'offset' => 1, 'exponent' => 1)), array(), false); + } + + /** + * Paints a radial colour gradient. + * @param float $x abscissa of the top left corner of the rectangle. + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @param array $col1 first color (Grayscale, RGB or CMYK components). + * @param array $col2 second color (Grayscale, RGB or CMYK components). + * @param array $coords array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1, (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg). (fx, fy) should be inside the circle, otherwise some areas will not be defined. + * @author Andreas Wrmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function RadialGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0.5,0.5,0.5,0.5,1)) { + $this->Clip($x, $y, $w, $h); + $this->Gradient(3, $coords, array(array('color' => $col1, 'offset' => 0, 'exponent' => 1), array('color' => $col2, 'offset' => 1, 'exponent' => 1)), array(), false); + } + + /** + * Paints a coons patch mesh. + * @param float $x abscissa of the top left corner of the rectangle. + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @param array $col1 first color (lower left corner) (RGB components). + * @param array $col2 second color (lower right corner) (RGB components). + * @param array $col3 third color (upper right corner) (RGB components). + * @param array $col4 fourth color (upper left corner) (RGB components). + * @param array $coords
      • for one patch mesh: array(float x1, float y1, .... float x12, float y12): 12 pairs of coordinates (normally from 0 to 1) which specify the Bezier control points that define the patch. First pair is the lower left edge point, next is its right control point (control point 2). Then the other points are defined in the order: control point 1, edge point, control point 2 going counter-clockwise around the patch. Last (x12, y12) is the first edge point's left control point (control point 1).
      • for two or more patch meshes: array[number of patches]: arrays with the following keys for each patch: f: where to put that patch (0 = first patch, 1, 2, 3 = right, top and left of precedent patch - I didn't figure this out completely - just try and error ;-) points: 12 pairs of coordinates of the Bezier control points as above for the first patch, 8 pairs of coordinates for the following patches, ignoring the coordinates already defined by the precedent patch (I also didn't figure out the order of these - also: try and see what's happening) colors: must be 4 colors for the first patch, 2 colors for the following patches
      + * @param array $coords_min minimum value used by the coordinates. If a coordinate's value is smaller than this it will be cut to coords_min. default: 0 + * @param array $coords_max maximum value used by the coordinates. If a coordinate's value is greater than this it will be cut to coords_max. default: 1 + * @param boolean $antialias A flag indicating whether to filter the shading function to prevent aliasing artifacts. + * @author Andreas Wrmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function CoonsPatchMesh($x, $y, $w, $h, $col1=array(), $col2=array(), $col3=array(), $col4=array(), $coords=array(0.00,0.0,0.33,0.00,0.67,0.00,1.00,0.00,1.00,0.33,1.00,0.67,1.00,1.00,0.67,1.00,0.33,1.00,0.00,1.00,0.00,0.67,0.00,0.33), $coords_min=0, $coords_max=1, $antialias=false) { + $this->Clip($x, $y, $w, $h); + $n = count($this->gradients) + 1; + $this->gradients[$n] = array(); + $this->gradients[$n]['type'] = 6; //coons patch mesh + $this->gradients[$n]['coords'] = array(); + $this->gradients[$n]['antialias'] = $antialias; + $this->gradients[$n]['colors'] = array(); + $this->gradients[$n]['transparency'] = false; + //check the coords array if it is the simple array or the multi patch array + if (!isset($coords[0]['f'])) { + //simple array -> convert to multi patch array + if (!isset($col1[1])) { + $col1[1] = $col1[2] = $col1[0]; + } + if (!isset($col2[1])) { + $col2[1] = $col2[2] = $col2[0]; + } + if (!isset($col3[1])) { + $col3[1] = $col3[2] = $col3[0]; + } + if (!isset($col4[1])) { + $col4[1] = $col4[2] = $col4[0]; + } + $patch_array[0]['f'] = 0; + $patch_array[0]['points'] = $coords; + $patch_array[0]['colors'][0]['r'] = $col1[0]; + $patch_array[0]['colors'][0]['g'] = $col1[1]; + $patch_array[0]['colors'][0]['b'] = $col1[2]; + $patch_array[0]['colors'][1]['r'] = $col2[0]; + $patch_array[0]['colors'][1]['g'] = $col2[1]; + $patch_array[0]['colors'][1]['b'] = $col2[2]; + $patch_array[0]['colors'][2]['r'] = $col3[0]; + $patch_array[0]['colors'][2]['g'] = $col3[1]; + $patch_array[0]['colors'][2]['b'] = $col3[2]; + $patch_array[0]['colors'][3]['r'] = $col4[0]; + $patch_array[0]['colors'][3]['g'] = $col4[1]; + $patch_array[0]['colors'][3]['b'] = $col4[2]; + } else { + //multi patch array + $patch_array = $coords; + } + $bpcd = 65535; //16 bits per coordinate + //build the data stream + $this->gradients[$n]['stream'] = ''; + $count_patch = count($patch_array); + for ($i=0; $i < $count_patch; ++$i) { + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['f']); //start with the edge flag as 8 bit + $count_points = count($patch_array[$i]['points']); + for ($j=0; $j < $count_points; ++$j) { + //each point as 16 bit + $patch_array[$i]['points'][$j] = (($patch_array[$i]['points'][$j] - $coords_min) / ($coords_max - $coords_min)) * $bpcd; + if ($patch_array[$i]['points'][$j] < 0) { + $patch_array[$i]['points'][$j] = 0; + } + if ($patch_array[$i]['points'][$j] > $bpcd) { + $patch_array[$i]['points'][$j] = $bpcd; + } + $this->gradients[$n]['stream'] .= chr(floor($patch_array[$i]['points'][$j] / 256)); + $this->gradients[$n]['stream'] .= chr(floor($patch_array[$i]['points'][$j] % 256)); + } + $count_cols = count($patch_array[$i]['colors']); + for ($j=0; $j < $count_cols; ++$j) { + //each color component as 8 bit + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['r']); + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['g']); + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['b']); + } + } + //paint the gradient + $this->_out('/Sh'.$n.' sh'); + //restore previous Graphic State + $this->_out('Q'); + } + + /** + * Set a rectangular clipping area. + * @param float $x abscissa of the top left corner of the rectangle (or top right corner for RTL mode). + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @author Andreas Wrmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access protected + */ + protected function Clip($x, $y, $w, $h) { + if ($this->rtl) { + $x = $this->w - $x - $w; + } + //save current Graphic State + $s = 'q'; + //set clipping area + $s .= sprintf(' %.2F %.2F %.2F %.2F re W n', $x*$this->k, ($this->h-$y)*$this->k, $w*$this->k, -$h*$this->k); + //set up transformation matrix for gradient + $s .= sprintf(' %.3F 0 0 %.3F %.3F %.3F cm', $w*$this->k, $h*$this->k, $x*$this->k, ($this->h-($y+$h))*$this->k); + $this->_out($s); + } + + /** + * Output gradient. + * @param int $type type of gradient (1 Function-based shading; 2 Axial shading; 3 Radial shading; 4 Free-form Gouraud-shaded triangle mesh; 5 Lattice-form Gouraud-shaded triangle mesh; 6 Coons patch mesh; 7 Tensor-product patch mesh). (Not all types are currently supported) + * @param array $coords array of coordinates. + * @param array $stops array gradient color components: color = array of GRAY, RGB or CMYK color components; offset = (0 to 1) represents a location along the gradient vector; exponent = exponent of the exponential interpolation function (default = 1). + * @param array $background An array of colour components appropriate to the colour space, specifying a single background colour value. + * @param boolean $antialias A flag indicating whether to filter the shading function to prevent aliasing artifacts. + * @author Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function Gradient($type, $coords, $stops, $background=array(), $antialias=false) { + $n = count($this->gradients) + 1; + $this->gradients[$n] = array(); + $this->gradients[$n]['type'] = $type; + $this->gradients[$n]['coords'] = $coords; + $this->gradients[$n]['antialias'] = $antialias; + $this->gradients[$n]['colors'] = array(); + $this->gradients[$n]['transparency'] = false; + // color space + $numcolspace = count($stops[0]['color']); + $bcolor = array_values($background); + switch($numcolspace) { + case 4: { // CMYK + $this->gradients[$n]['colspace'] = 'DeviceCMYK'; + if (!empty($background)) { + $this->gradients[$n]['background'] = sprintf('%.3F %.3F %.3F %.3F', $bcolor[0]/100, $bcolor[1]/100, $bcolor[2]/100, $bcolor[3]/100); + } + break; + } + case 3: { // RGB + $this->gradients[$n]['colspace'] = 'DeviceRGB'; + if (!empty($background)) { + $this->gradients[$n]['background'] = sprintf('%.3F %.3F %.3F', $bcolor[0]/255, $bcolor[1]/255, $bcolor[2]/255); + } + break; + } + case 1: { // Gray scale + $this->gradients[$n]['colspace'] = 'DeviceGray'; + if (!empty($background)) { + $this->gradients[$n]['background'] = sprintf('%.3F', $bcolor[0]/255); + } + break; + } + } + $num_stops = count($stops); + $last_stop_id = $num_stops - 1; + foreach ($stops as $key => $stop) { + $this->gradients[$n]['colors'][$key] = array(); + // offset represents a location along the gradient vector + if (isset($stop['offset'])) { + $this->gradients[$n]['colors'][$key]['offset'] = $stop['offset']; + } else { + if ($key == 0) { + $this->gradients[$n]['colors'][$key]['offset'] = 0; + } elseif ($key == $last_stop_id) { + $this->gradients[$n]['colors'][$key]['offset'] = 1; + } else { + $offsetstep = (1 - $this->gradients[$n]['colors'][($key - 1)]['offset']) / ($num_stops - $key); + $this->gradients[$n]['colors'][$key]['offset'] = $this->gradients[$n]['colors'][($key - 1)]['offset'] + $offsetstep; + } + } + if (isset($stop['opacity'])) { + $this->gradients[$n]['colors'][$key]['opacity'] = $stop['opacity']; + if ($stop['opacity'] < 1) { + $this->gradients[$n]['transparency'] = true; + } + } else { + $this->gradients[$n]['colors'][$key]['opacity'] = 1; + } + // exponent for the exponential interpolation function + if (isset($stop['exponent'])) { + $this->gradients[$n]['colors'][$key]['exponent'] = $stop['exponent']; + } else { + $this->gradients[$n]['colors'][$key]['exponent'] = 1; + } + // set colors + $color = array_values($stop['color']); + switch($numcolspace) { + case 4: { // CMYK + $this->gradients[$n]['colors'][$key]['color'] = sprintf('%.3F %.3F %.3F %.3F', $color[0]/100, $color[1]/100, $color[2]/100, $color[3]/100); + break; + } + case 3: { // RGB + $this->gradients[$n]['colors'][$key]['color'] = sprintf('%.3F %.3F %.3F', $color[0]/255, $color[1]/255, $color[2]/255); + break; + } + case 1: { // Gray scale + $this->gradients[$n]['colors'][$key]['color'] = sprintf('%.3F', $color[0]/255); + break; + } + } + } + if ($this->gradients[$n]['transparency']) { + // paint luminosity gradient + $this->_out('/TGS'.$n.' gs'); + } + //paint the gradient + $this->_out('/Sh'.$n.' sh'); + //restore previous Graphic State + $this->_out('Q'); + } + + /** + * Output gradient shaders. + * @author Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access protected + */ + function _putshaders() { + $idt = count($this->gradients); //index for transparency gradients + foreach ($this->gradients as $id => $grad) { + if (($grad['type'] == 2) OR ($grad['type'] == 3)) { + $this->_newobj(); + $fc = $this->n; + $out = '<<'; + $out .= ' /FunctionType 3'; + $out .= ' /Domain [0 1]'; + $functions = ''; + $bounds = ''; + $encode = ''; + $i = 1; + $num_cols = count($grad['colors']); + $lastcols = $num_cols - 1; + for ($i = 1; $i < $num_cols; ++$i) { + $functions .= ($fc + $i).' 0 R '; + if ($i < $lastcols) { + $bounds .= sprintf('%.3F ', $grad['colors'][$i]['offset']); + } + $encode .= '0 1 '; + } + $out .= ' /Functions ['.trim($functions).']'; + $out .= ' /Bounds ['.trim($bounds).']'; + $out .= ' /Encode ['.trim($encode).']'; + $out .= ' >>'; + $out .= ' endobj'; + $this->_out($out); + for ($i = 1; $i < $num_cols; ++$i) { + $this->_newobj(); + $out = '<<'; + $out .= ' /FunctionType 2'; + $out .= ' /Domain [0 1]'; + $out .= ' /C0 ['.$grad['colors'][($i - 1)]['color'].']'; + $out .= ' /C1 ['.$grad['colors'][$i]['color'].']'; + $out .= ' /N '.$grad['colors'][$i]['exponent']; + $out .= ' >>'; + $out .= ' endobj'; + $this->_out($out); + } + // set transparency fuctions + if ($grad['transparency']) { + $this->_newobj(); + $ft = $this->n; + $out = '<<'; + $out .= ' /FunctionType 3'; + $out .= ' /Domain [0 1]'; + $functions = ''; + $i = 1; + $num_cols = count($grad['colors']); + for ($i = 1; $i < $num_cols; ++$i) { + $functions .= ($ft + $i).' 0 R '; + } + $out .= ' /Functions ['.trim($functions).']'; + $out .= ' /Bounds ['.trim($bounds).']'; + $out .= ' /Encode ['.trim($encode).']'; + $out .= ' >>'; + $out .= ' endobj'; + $this->_out($out); + for ($i = 1; $i < $num_cols; ++$i) { + $this->_newobj(); + $out = '<<'; + $out .= ' /FunctionType 2'; + $out .= ' /Domain [0 1]'; + $out .= ' /C0 ['.$grad['colors'][($i - 1)]['opacity'].']'; + $out .= ' /C1 ['.$grad['colors'][$i]['opacity'].']'; + $out .= ' /N '.$grad['colors'][$i]['exponent']; + $out .= ' >>'; + $out .= ' endobj'; + $this->_out($out); + } + } + } + // set shading object + $this->_newobj(); + $out = '<< /ShadingType '.$grad['type']; + if (isset($grad['colspace'])) { + $out .= ' /ColorSpace /'.$grad['colspace']; + } else { + $out .= ' /ColorSpace /DeviceRGB'; + } + if (isset($grad['background']) AND !empty($grad['background'])) { + $out .= ' /Background ['.$grad['background'].']'; + } + if (isset($grad['antialias']) AND ($grad['antialias'] === true)) { + $out .= ' /AntiAlias true'; + } + if ($grad['type'] == 2) { + $out .= ' '.sprintf('/Coords [%.3F %.3F %.3F %.3F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3]); + $out .= ' /Domain [0 1]'; + $out .= ' /Function '.$fc.' 0 R'; + $out .= ' /Extend [true true]'; + $out .= ' >>'; + } elseif ($grad['type'] == 3) { + //x0, y0, r0, x1, y1, r1 + //at this this time radius of inner circle is 0 + $out .= ' '.sprintf('/Coords [%.3F %.3F 0 %.3F %.3F %.3F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3], $grad['coords'][4]); + $out .= ' /Domain [0 1]'; + $out .= ' /Function '.$fc.' 0 R'; + $out .= ' /Extend [true true]'; + $out .= ' >>'; + } elseif ($grad['type'] == 6) { + $out .= ' /BitsPerCoordinate 16'; + $out .= ' /BitsPerComponent 8'; + $out .= ' /Decode[0 1 0 1 0 1 0 1 0 1]'; + $out .= ' /BitsPerFlag 8'; + $out .= ' /Length '.strlen($grad['stream']); + $out .= ' >>'; + $out .= ' '.$this->_getstream($grad['stream']); + } + $out .= ' endobj'; + $this->_out($out); + if ($grad['transparency']) { + $shading_transparency = preg_replace('/\/ColorSpace \/[^\s]+/si', '/ColorSpace /DeviceGray', $out); + $shading_transparency = preg_replace('/\/Function [0-9]+ /si', '/Function '.$ft.' ', $shading_transparency); + } + $this->gradients[$id]['id'] = $this->n; + // set pattern object + $this->_newobj(); + $out = '<< /Type /Pattern /PatternType 2'; + $out .= ' /Shading '.$this->gradients[$id]['id'].' 0 R'; + $out .= ' >> endobj'; + $this->_out($out); + $this->gradients[$id]['pattern'] = $this->n; + // set shading and pattern for transparency mask + if ($grad['transparency']) { + // luminosity pattern + $idgs = $id + $idt; + $this->_newobj(); + $this->_out($shading_transparency); + $this->gradients[$idgs]['id'] = $this->n; + $this->_newobj(); + $out = '<< /Type /Pattern /PatternType 2'; + $out .= ' /Shading '.$this->gradients[$idgs]['id'].' 0 R'; + $out .= ' >> endobj'; + $this->_out($out); + $this->gradients[$idgs]['pattern'] = $this->n; + // luminosity XObject + $this->_newobj(); + $filter = ($this->compress)?' /Filter /FlateDecode':''; + $out = '<< /Type /XObject /Subtype /Form /FormType 1'.$filter; + $stream = 'q /a0 gs /Pattern cs /p'.$idgs.' scn 0 0 '.$this->wPt.' '.$this->hPt.' re f Q'; + $out .= ' /Length '.strlen($stream); + $out .= ' /BBox [0 0 '.$this->wPt.' '.$this->hPt.']'; + $out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceGray >>'; + $out .= ' /Resources <<'; + $out .= ' /ExtGState << /a0 << /ca 1 /CA 1 >> >>'; + $out .= ' /Pattern << /p'.$idgs.' '.$this->gradients[$idgs]['pattern'].' 0 R >>'; + $out .= ' >>'; + $out .= ' >> '; + $out .= $this->_getstream($stream); + $out .= ' endobj'; + $this->_out($out); + // SMask + $this->_newobj(); + $out = '<< /Type /Mask /S /Luminosity /G '.($this->n - 1).' 0 R >> endobj'; + $this->_out($out); + // ExtGState + $this->_newobj(); + $out = '<< /Type /ExtGState /SMask '.($this->n - 1).' 0 R /AIS false >> endobj'; + $this->_out($out); + $this->extgstates[] = array('n' => $this->n, 'name' => 'TGS'.$id); + } + } + } + + /** + * Draw the sector of a circle. + * It can be used for instance to render pie charts. + * @param float $xc abscissa of the center. + * @param float $yc ordinate of the center. + * @param float $r radius. + * @param float $a start angle (in degrees). + * @param float $b end angle (in degrees). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param float $cw: indicates whether to go clockwise (default: true). + * @param float $o: origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). Default: 90. + * @author Maxime Delorme, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function PieSector($xc, $yc, $r, $a, $b, $style='FD', $cw=true, $o=90) { + $this->PieSectorXY($xc, $yc, $r, $r, $a, $b, $style, $cw, $o); + } + + /** + * Draw the sector of an ellipse. + * It can be used for instance to render pie charts. + * @param float $xc abscissa of the center. + * @param float $yc ordinate of the center. + * @param float $rx the x-axis radius. + * @param float $ry the y-axis radius. + * @param float $a start angle (in degrees). + * @param float $b end angle (in degrees). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param float $cw: indicates whether to go clockwise. + * @param float $o: origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). + * @param integer $nc Number of curves used to draw a 90 degrees portion of arc. + * @author Maxime Delorme, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function PieSectorXY($xc, $yc, $rx, $ry, $a, $b, $style='FD', $cw=false, $o=0, $nc=2) { + if ($this->rtl) { + $xc = $this->w - $xc; + } + $op = $this->getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + if ($cw) { + $d = $b; + $b = 360 - $a + $o; + $a = 360 - $d + $o; + } else { + $b += $o; + $a += $o; + } + $this->_outellipticalarc($xc, $yc, $rx, $ry, 0, $a, $b, true, $nc); + $this->_out($op); + } + + /** + * Embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files. + * NOTE: EPS is not yet fully implemented, use the setRasterizeVectorImages() method to enable/disable rasterization of SVG images using ImageMagick library. + * Only vector drawing is supported, not text or bitmap. + * Although the script was successfully tested with various AI format versions, best results are probably achieved with files that were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2). + * @param string $file Name of the file containing the image. + * @param float $x Abscissa of the upper-left corner. + * @param float $y Ordinate of the upper-left corner. + * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param mixed $link URL or identifier returned by AddLink(). + * @param boolean useBoundingBox specifies whether to position the bounding box (true) or the complete canvas (false) at location (x,y). Default value is true. + * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
      • T: top-right for LTR or top-left for RTL
      • M: middle-right for LTR or middle-left for RTL
      • B: bottom-right for LTR or bottom-left for RTL
      • N: next line
      + * @param string $palign Allows to center or align the image on the current line. Possible values are:
      • L : left align
      • C : center
      • R : right align
      • '' : empty string : left for LTR or right for RTL
      + * @param mixed $border Indicates if borders must be drawn around the image. The value can be either a number:
      • 0: no border (default)
      • 1: frame
      or a string containing some or all of the following characters (in any order):
      • L: left
      • T: top
      • R: right
      • B: bottom
      + * @param boolean $fitonpage if true the image is resized to not exceed page dimensions. + * @author Valentin Schmidt, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function ImageEps($file, $x='', $y='', $w=0, $h=0, $link='', $useBoundingBox=true, $align='', $palign='', $border=0, $fitonpage=false) { + if ($this->rasterize_vector_images) { + // convert SVG to raster image using GD or ImageMagick libraries + return $this->Image($file, $x, $y, $w, $h, 'EPS', $link, $align, true, 300, $palign, false, false, $border, false, false, $fitonpage); + } + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + $k = $this->k; + $data = file_get_contents($file); + if ($data === false) { + $this->Error('EPS file not found: '.$file); + } + $regs = array(); + // EPS/AI compatibility check (only checks files created by Adobe Illustrator!) + preg_match("/%%Creator:([^\r\n]+)/", $data, $regs); # find Creator + if (count($regs) > 1) { + $version_str = trim($regs[1]); # e.g. "Adobe Illustrator(R) 8.0" + if (strpos($version_str, 'Adobe Illustrator') !== false) { + $versexp = explode(' ', $version_str); + $version = (float)array_pop($versexp); + if ($version >= 9) { + $this->Error('This version of Adobe Illustrator file is not supported: '.$file); + } + } + } + // strip binary bytes in front of PS-header + $start = strpos($data, '%!PS-Adobe'); + if ($start > 0) { + $data = substr($data, $start); + } + // find BoundingBox params + preg_match("/%%BoundingBox:([^\r\n]+)/", $data, $regs); + if (count($regs) > 1) { + list($x1, $y1, $x2, $y2) = explode(' ', trim($regs[1])); + } else { + $this->Error('No BoundingBox found in EPS file: '.$file); + } + $start = strpos($data, '%%EndSetup'); + if ($start === false) { + $start = strpos($data, '%%EndProlog'); + } + if ($start === false) { + $start = strpos($data, '%%BoundingBox'); + } + $data = substr($data, $start); + $end = strpos($data, '%%PageTrailer'); + if ($end===false) { + $end = strpos($data, 'showpage'); + } + if ($end) { + $data = substr($data, 0, $end); + } + // calculate image width and height on document + if (($w <= 0) AND ($h <= 0)) { + $w = ($x2 - $x1) / $k; + $h = ($y2 - $y1) / $k; + } elseif ($w <= 0) { + $w = ($x2-$x1) / $k * ($h / (($y2 - $y1) / $k)); + } elseif ($h <= 0) { + $h = ($y2 - $y1) / $k * ($w / (($x2 - $x1) / $k)); + } + // Check whether we need a new page first as this does not fit + $prev_x = $this->x; + if ($this->checkPageBreak($h, $y)) { + $y = $this->y; + if ($this->rtl) { + $x += ($prev_x - $this->x); + } else { + $x += ($this->x - $prev_x); + } + } + // resize image to be contained on a single page + if ($fitonpage) { + $ratio_wh = $w / $h; + if (($y + $h) > $this->PageBreakTrigger) { + $h = $this->PageBreakTrigger - $y; + $w = $h * $ratio_wh; + } + if (($x + $w) > ($this->w - $this->rMargin)) { + $w = $this->w - $this->rMargin - $x; + $h = $w / $ratio_wh; + } + } + // set scaling factors + $scale_x = $w / (($x2 - $x1) / $k); + $scale_y = $h / (($y2 - $y1) / $k); + // set alignment + $this->img_rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $this->w - $x - $w; + } + $this->img_rb_x = $ximg; + } else { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x; + } + $this->img_rb_x = $ximg + $w; + } + if ($useBoundingBox) { + $dx = $ximg * $k - $x1; + $dy = $y * $k - $y1; + } else { + $dx = $ximg * $k; + $dy = $y * $k; + } + // save the current graphic state + $this->_out('q'.$this->epsmarker); + // translate + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', 1, 0, 0, 1, $dx, $dy + ($this->hPt - (2 * $y * $k) - ($y2 - $y1)))); + // scale + if (isset($scale_x)) { + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $scale_x, 0, 0, $scale_y, $x1 * (1 - $scale_x), $y2 * (1 - $scale_y))); + } + // handle pc/unix/mac line endings + preg_match('/[\r\n]+/s', $data, $regs); + $lines = explode($regs[0], $data); + $u=0; + $cnt = count($lines); + for ($i=0; $i < $cnt; ++$i) { + $line = $lines[$i]; + if (($line == '') OR ($line{0} == '%')) { + continue; + } + $len = strlen($line); + $chunks = explode(' ', $line); + $cmd = array_pop($chunks); + // RGB + if (($cmd == 'Xa') OR ($cmd == 'XA')) { + $b = array_pop($chunks); + $g = array_pop($chunks); + $r = array_pop($chunks); + $this->_out(''.$r.' '.$g.' '.$b.' '.($cmd=='Xa'?'rg':'RG')); //substr($line, 0, -2).'rg' -> in EPS (AI8): c m y k r g b rg! + continue; + } + switch ($cmd) { + case 'm': + case 'l': + case 'v': + case 'y': + case 'c': + case 'k': + case 'K': + case 'g': + case 'G': + case 's': + case 'S': + case 'J': + case 'j': + case 'w': + case 'M': + case 'd': + case 'n': { + $this->_out($line); + break; + } + case 'x': {// custom fill color + list($c,$m,$y,$k) = $chunks; + $this->_out(''.$c.' '.$m.' '.$y.' '.$k.' k'); + break; + } + case 'X': { // custom stroke color + list($c,$m,$y,$k) = $chunks; + $this->_out(''.$c.' '.$m.' '.$y.' '.$k.' K'); + break; + } + case 'Y': + case 'N': + case 'V': + case 'L': + case 'C': { + $line{$len-1} = strtolower($cmd); + $this->_out($line); + break; + } + case 'b': + case 'B': { + $this->_out($cmd . '*'); + break; + } + case 'f': + case 'F': { + if ($u > 0) { + $isU = false; + $max = min($i+5, $cnt); + for ($j=$i+1; $j < $max; ++$j) { + $isU = ($isU OR (($lines[$j] == 'U') OR ($lines[$j] == '*U'))); + } + if ($isU) { + $this->_out('f*'); + } + } else { + $this->_out('f*'); + } + break; + } + case '*u': { + ++$u; + break; + } + case '*U': { + --$u; + break; + } + } + } + // restore previous graphic state + $this->_out($this->epsmarker.'Q'); + if (!empty($border)) { + $bx = $x; + $by = $y; + $this->x = $ximg; + if ($this->rtl) { + $this->x += $w; + } + $this->y = $y; + $this->Cell($w, $h, '', $border, 0, '', 0, '', 0); + $this->x = $bx; + $this->y = $by; + } + if ($link) { + $this->Link($ximg, $y, $w, $h, $link, 0); + } + // set pointer to align the successive text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + $this->endlinex = $this->img_rb_x; + } + + /** + * Set document barcode. + * @param string $bc barcode + * @access public + */ + public function setBarcode($bc='') { + $this->barcode = $bc; + } + + /** + * Get current barcode. + * @return string + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getBarcode() { + return $this->barcode; + } + + /** + * Print a Linear Barcode. + * @param string $code code to print + * @param string $type type of barcode (see barcodes.php for supported formats). + * @param int $x x position in user units + * @param int $y y position in user units + * @param int $w width in user units + * @param int $h height in user units + * @param float $xres width of the smallest bar in user units + * @param array $style array of options:
      • string $style['position'] barcode position inside the specified width: L = left (default for LTR); C = center; R = right (default for RTL); S = stretch
      • boolean $style['border'] if true prints a border around the barcode
      • int $style['padding'] padding to leave around the barcode in user units (set to 'auto' for automatic padding)
      • array $style['fgcolor'] color array for bars and text
      • mixed $style['bgcolor'] color array for background or false for transparent
      • boolean $style["text"] boolean if true prints text below the barcode
      • string $style['font'] font name for text
      • int $style['fontsize'] font size for text
      • int $style['stretchtext']: 0 = disabled; 1 = horizontal scaling only if necessary; 2 = forced horizontal scaling; 3 = character spacing only if necessary; 4 = forced character spacing
      + * @param string $align Indicates the alignment of the pointer next to barcode insertion relative to barcode height. The value can be:
      • T: top-right for LTR or top-left for RTL
      • M: middle-right for LTR or middle-left for RTL
      • B: bottom-right for LTR or bottom-left for RTL
      • N: next line
      + * @author Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @access public + */ + public function write1DBarcode($code, $type, $x='', $y='', $w='', $h='', $xres=0.4, $style='', $align='') { + if ($this->empty_string($code)) { + return; + } + require_once(dirname(__FILE__).'/barcodes.php'); + // save current graphic settings + $gvars = $this->getGraphicVars(); + // create new barcode object + $barcodeobj = new TCPDFBarcode($code, $type); + $arrcode = $barcodeobj->getBarcodeArray(); + if ($arrcode === false) { + $this->Error('Error in 1D barcode string'); + } + // set default values + if (!isset($style['position'])) { + if ($this->rtl) { + $style['position'] = 'R'; + } else { + $style['position'] = 'L'; + } + } + if (!isset($style['fgcolor'])) { + $style['fgcolor'] = array(0,0,0); // default black + } + if (!isset($style['bgcolor'])) { + $style['bgcolor'] = false; // default transparent + } + if (!isset($style['border'])) { + $style['border'] = false; + } + $fontsize = 0; + if (!isset($style['text'])) { + $style['text'] = false; + } + if ($style['text'] AND isset($style['font'])) { + if (isset($style['fontsize'])) { + $fontsize = $style['fontsize']; + } + $this->SetFont($style['font'], '', $fontsize); + } + if (!isset($style['stretchtext'])) { + $style['stretchtext'] = 4; + } + // set foreground color + $this->SetDrawColorArray($style['fgcolor']); + $this->SetTextColorArray($style['fgcolor']); + if ($this->empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + } + if ($this->empty_string($x)) { + $x = $this->GetX(); + } + if ($this->rtl) { + $x = $this->w - $x; + } + if ($this->empty_string($y)) { + $y = $this->GetY(); + } + if ($this->empty_string($xres)) { + $xres = 0.4; + } + if ($this->empty_string($h) OR ($h <= 0)) { + $h = $w / 3; + } + // padding + if (!isset($style['padding'])) { + $style['padding'] = 0; + } elseif ($style['padding'] === 'auto') { + $style['padding'] = $h / 4; + } + $fbw = ($arrcode['maxw'] * $xres) + (2 * $style['padding']); + $extraspace = ($this->cell_height_ratio * $fontsize / $this->k) + (2 * $style['padding']); + $prev_x = $this->x; + // maximum bar height + $barh = $h; + $h += $extraspace; + if ($this->checkPageBreak($h, $y)) { + $y = $this->GetY() + $this->cMargin; + if ($this->rtl) { + $x += ($prev_x - $this->x); + } else { + $x += ($this->x - $prev_x); + } + } + switch ($style['position']) { + case 'L': { // left + if ($this->rtl) { + $xpos = $x - $w; + } else { + $xpos = $x; + } + break; + } + case 'C': { // center + $xdiff = (($w - $fbw) / 2); + if ($this->rtl) { + $xpos = $x - $w + $xdiff; + } else { + $xpos = $x + $xdiff; + } + break; + } + case 'R': { // right + if ($this->rtl) { + $xpos = $x - $fbw; + } else { + $xpos = $x + $w - $fbw; + } + break; + } + case 'S': { // stretch + $fbw = $w; + $xres = ($w - (2 * $style['padding'])) / $arrcode['maxw']; + if ($this->rtl) { + $xpos = $x - $w; + } else { + $xpos = $x; + } + break; + } + } + $xpos_rect = $xpos; + $xpos = $xpos_rect + $style['padding']; + $xpos_text = $xpos; + // barcode is always printed in LTR direction + $tempRTL = $this->rtl; + $this->rtl = false; + // print background color + if ($style['bgcolor']) { + $this->Rect($xpos_rect, $y, $fbw, $h, $style['border'] ? 'DF' : 'F', '', $style['bgcolor']); + } elseif ($style['border']) { + $this->Rect($xpos_rect, $y, $fbw, $h, 'D'); + } + // print bars + if ($arrcode !== false) { + foreach ($arrcode['bcode'] as $k => $v) { + $bw = ($v['w'] * $xres); + if ($v['t']) { + // draw a vertical bar + $ypos = $y + $style['padding'] + ($v['p'] * $barh / $arrcode['maxh']); + $this->Rect($xpos, $ypos, $bw, ($v['h'] * $barh / $arrcode['maxh']), 'F', array(), $style['fgcolor']); + } + $xpos += $bw; + } + } + // print text + if ($style['text']) { + // print text + $this->x = $xpos_text; + $this->y = $y + $style['padding'] + $barh; + $this->Cell(($arrcode['maxw'] * $xres), ($this->cell_height_ratio * $fontsize / $this->k), $code, 0, 0, 'C', 0, '', $style['stretchtext']); + } + // restore original direction + $this->rtl = $tempRTL; + // restore previous settings + $this->setGraphicVars($gvars); + // set bottomcoordinates + $this->img_rb_y = $y + $h; + if ($this->rtl) { + // set left side coordinate + $this->img_rb_x = ($this->w - $x - $w); + } else { + // set right side coordinate + $this->img_rb_x = $x + $w; + } + // set pointer to align the successive text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + } + + /** + * This function is DEPRECATED, please use the new write1DBarcode() function. + * @param int $x x position in user units + * @param int $y y position in user units + * @param int $w width in user units + * @param int $h height position in user units + * @param string $type type of barcode (I25, C128A, C128B, C128C, C39) + * @param string $style barcode style + * @param string $font font for text + * @param int $xres x resolution + * @param string $code code to print + * @deprecated deprecated since version 3.1.000 (2008-06-10) + * @access public + * @see write1DBarcode() + */ + public function writeBarcode($x, $y, $w, $h, $type, $style, $font, $xres, $code) { + // convert old settings for the new write1DBarcode() function. + $xres = 1 / $xres; + $newstyle = array( + 'position' => 'L', + 'border' => false, + 'padding' => 0, + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, + 'text' => true, + 'font' => $font, + 'fontsize' => 8, + 'stretchtext' => 4 + ); + if ($style & 1) { + $newstyle['border'] = true; + } + if ($style & 2) { + $newstyle['bgcolor'] = false; + } + if ($style & 4) { + $newstyle['position'] = 'C'; + } elseif ($style & 8) { + $newstyle['position'] = 'L'; + } elseif ($style & 16) { + $newstyle['position'] = 'R'; + } + if ($style & 128) { + $newstyle['text'] = true; + } + if ($style & 256) { + $newstyle['stretchtext'] = 4; + } + $this->write1DBarcode($code, $type, $x, $y, $w, $h, $xres, $newstyle, ''); + } + + /** + * Print 2D Barcode. + * @param string $code code to print + * @param string $type type of barcode (see 2dbarcodes.php for supported formats). + * @param int $x x position in user units + * @param int $y y position in user units + * @param int $w width in user units + * @param int $h height in user units + * @param array $style array of options:
      • boolean $style['border'] if true prints a border around the barcode
      • int $style['padding'] padding to leave around the barcode in user units (set to 'auto' for automatic padding)
      • array $style['fgcolor'] color array for bars and text
      • mixed $style['bgcolor'] color array for background or false for transparent
      + * @param string $align Indicates the alignment of the pointer next to barcode insertion relative to barcode height. The value can be:
      • T: top-right for LTR or top-left for RTL
      • M: middle-right for LTR or middle-left for RTL
      • B: bottom-right for LTR or bottom-left for RTL
      • N: next line
      + * @author Nicola Asuni + * @since 4.5.037 (2009-04-07) + * @access public + */ + public function write2DBarcode($code, $type, $x='', $y='', $w='', $h='', $style='', $align='') { + if ($this->empty_string($code)) { + return; + } + require_once(dirname(__FILE__).'/2dbarcodes.php'); + // save current graphic settings + $gvars = $this->getGraphicVars(); + // create new barcode object + $barcodeobj = new TCPDF2DBarcode($code, $type); + $arrcode = $barcodeobj->getBarcodeArray(); + if ($arrcode === false) { + $this->Error('Error in 2D barcode string'); + } + // set default values + if (!isset($style['fgcolor'])) { + $style['fgcolor'] = array(0,0,0); // default black + } + if (!isset($style['bgcolor'])) { + $style['bgcolor'] = false; // default transparent + } + if (!isset($style['border'])) { + $style['border'] = false; + } + // set foreground color + $this->SetDrawColorArray($style['fgcolor']); + if ($this->empty_string($x)) { + $x = $this->GetX(); + } + if ($this->rtl) { + $x = $this->w - $x; + } + if ($this->empty_string($y)) { + $y = $this->GetY(); + } + if ($this->empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $x; + } + } + if ($this->empty_string($h) OR ($h <= 0)) { + // 2d barcodes are square by default + $h = $w; + } + $prev_x = $this->x; + if ($this->checkPageBreak($h, $y)) { + $y = $this->GetY() + $this->cMargin; + if ($this->rtl) { + $x += ($prev_x - $this->x); + } else { + $x += ($this->x - $prev_x); + } + } + // padding + if (!isset($style['padding'])) { + $style['padding'] = 0; + } elseif ($style['padding'] === 'auto') { + $style['padding'] = 4 * $w / (8 + $arrcode['num_cols']); + } + // calculate barcode size (excluding padding) + $bw = $w - (2 * $style['padding']); + $bh = $h - (2 * $style['padding']); + // calculate starting coordinates + if ($this->rtl) { + $xpos = $x - $w; + } else { + $xpos = $x; + } + $xpos += $style['padding']; + $ypos = $y + $style['padding']; + // barcode is always printed in LTR direction + $tempRTL = $this->rtl; + $this->rtl = false; + // print background color + if ($style['bgcolor']) { + $this->Rect($x, $y, $w, $h, $style['border'] ? 'DF' : 'F', '', $style['bgcolor']); + } elseif ($style['border']) { + $this->Rect($x, $y, $w, $h, 'D'); + } + // print barcode cells + if ($arrcode !== false) { + $rows = $arrcode['num_rows']; + $cols = $arrcode['num_cols']; + // calculate dimension of single barcode cell + $cw = $bw / $cols; + $ch = $bh / $rows; + // for each row + for ($r = 0; $r < $rows; ++$r) { + $xr = $xpos; + // for each column + for ($c = 0; $c < $cols; ++$c) { + if ($arrcode['bcode'][$r][$c] == 1) { + // draw a single barcode cell + $this->Rect($xr, $ypos, $cw, $ch, 'F', array(), $style['fgcolor']); + } + $xr += $cw; + } + $ypos += $ch; + } + } + // restore original direction + $this->rtl = $tempRTL; + // restore previous settings + $this->setGraphicVars($gvars); + // set bottomcoordinates + $this->img_rb_y = $y + $h; + if ($this->rtl) { + // set left side coordinate + $this->img_rb_x = ($this->w - $x - $w); + } else { + // set right side coordinate + $this->img_rb_x = $x + $w; + } + // set pointer to align the successive text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + } + + /** + * Returns an array containing current margins: + *
        +
      • $ret['left'] = left margin
      • +
      • $ret['right'] = right margin
      • +
      • $ret['top'] = top margin
      • +
      • $ret['bottom'] = bottom margin
      • +
      • $ret['header'] = header margin
      • +
      • $ret['footer'] = footer margin
      • +
      • $ret['cell'] = cell margin
      • + *
      + * @return array containing all margins measures + * @access public + * @since 3.2.000 (2008-06-23) + */ + public function getMargins() { + $ret = array( + 'left' => $this->lMargin, + 'right' => $this->rMargin, + 'top' => $this->tMargin, + 'bottom' => $this->bMargin, + 'header' => $this->header_margin, + 'footer' => $this->footer_margin, + 'cell' => $this->cMargin, + ); + return $ret; + } + + /** + * Returns an array containing original margins: + *
        +
      • $ret['left'] = left margin
      • +
      • $ret['right'] = right margin
      • + *
      + * @return array containing all margins measures + * @access public + * @since 4.0.012 (2008-07-24) + */ + public function getOriginalMargins() { + $ret = array( + 'left' => $this->original_lMargin, + 'right' => $this->original_rMargin + ); + return $ret; + } + + /** + * Returns the current font size. + * @return current font size + * @access public + * @since 3.2.000 (2008-06-23) + */ + public function getFontSize() { + return $this->FontSize; + } + + /** + * Returns the current font size in points unit. + * @return current font size in points unit + * @access public + * @since 3.2.000 (2008-06-23) + */ + public function getFontSizePt() { + return $this->FontSizePt; + } + + /** + * Returns the current font family name. + * @return string current font family name + * @access public + * @since 4.3.008 (2008-12-05) + */ + public function getFontFamily() { + return $this->FontFamily; + } + + /** + * Returns the current font style. + * @return string current font style + * @access public + * @since 4.3.008 (2008-12-05) + */ + public function getFontStyle() { + return $this->FontStyle; + } + + /** + * Prints a cell (rectangular area) with optional borders, background color and html text string. + * The upper-left corner of the cell corresponds to the current position. After the call, the current position moves to the right or to the next line.
      + * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + * @param float $w Cell width. If 0, the cell extends up to the right margin. + * @param float $h Cell minimum height. The cell extends automatically if needed. + * @param float $x upper-left corner X coordinate + * @param float $y upper-left corner Y coordinate + * @param string $html html text to print. Default value: empty string. + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:
      • 0: no border (default)
      • 1: frame
      or a string containing some or all of the following characters (in any order):
      • L: left
      • T: top
      • R: right
      • B: bottom
      + * @param int $ln Indicates where the current position should go after the call. Possible values are:
      • 0: to the right (or left for RTL language)
      • 1: to the beginning of the next line
      • 2: below
      + Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param boolean $reseth if true reset the last cell height (default true). + * @param string $align Allows to center or align the text. Possible values are:
      • L : left align
      • C : center
      • R : right align
      • '' : empty string : left for LTR or right for RTL
      + * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width. + * @access public + * @uses MultiCell() + * @see Multicell(), writeHTML() + */ + public function writeHTMLCell($w, $h, $x, $y, $html='', $border=0, $ln=0, $fill=0, $reseth=true, $align='', $autopadding=true) { + return $this->MultiCell($w, $h, $html, $border, $align, $fill, $ln, $x, $y, $reseth, 0, true, $autopadding, 0); + } + + /** + * Returns the HTML DOM array. + *
      • $dom[$key]['tag'] = true if tag, false otherwise;
      • $dom[$key]['value'] = tag name or text;
      • $dom[$key]['opening'] = true if opening tag, false otherwise;
      • $dom[$key]['attribute'] = array of attributes (attribute name is the key);
      • $dom[$key]['style'] = array of style attributes (attribute name is the key);
      • $dom[$key]['parent'] = id of parent element;
      • $dom[$key]['fontname'] = font family name;
      • $dom[$key]['fontstyle'] = font style;
      • $dom[$key]['fontsize'] = font size in points;
      • $dom[$key]['bgcolor'] = RGB array of background color;
      • $dom[$key]['fgcolor'] = RGB array of foreground color;
      • $dom[$key]['width'] = width in pixels;
      • $dom[$key]['height'] = height in pixels;
      • $dom[$key]['align'] = text alignment;
      • $dom[$key]['cols'] = number of colums in table;
      • $dom[$key]['rows'] = number of rows in table;
      + * @param string $html html code + * @return array + * @access protected + * @since 3.2.000 (2008-06-20) + */ + protected function getHtmlDomArray($html) { + // define block tags + $blocktags = array('blockquote','br','dd','dl','div','dt','h1','h2','h3','h4','h5','h6','hr','li','ol','p','pre','ul','tcpdf','table','tr','td'); + // remove all unsupported tags (the line below lists all supported tags) + $html = strip_tags($html, '




    3. ', $content); + $content = preg_replace('/]*)>/isU', '
      bookmark : $1
      ', $content); + $content = preg_replace('/<\/bookmark([^>]*)>/isU', '', $content); + $content = preg_replace('/]*)>/isU', '
      barcode : $1
      ', $content); + $content = preg_replace('/<\/barcode([^>]*)>/isU', '', $content); + $content = preg_replace('/]*)>/isU', '
      qrcode : $1
      ', $content); + $content = preg_replace('/<\/qrcode([^>]*)>/isU', '', $content); + + echo ' + + + '.HTML2PDF_locale::get('vue04').' HTML + + + +'.$content.' + +'; + exit; + } + + /** + * set the default margins of the page + * + * @access protected + * @param int $left (mm, left margin) + * @param int $top (mm, top margin) + * @param int $right (mm, right margin, if null => left=right) + * @param int $bottom (mm, bottom margin, if null => bottom=8mm) + */ + protected function _setDefaultMargins($left, $top, $right = null, $bottom = null) + { + if ($right===null) $right = $left; + if ($bottom===null) $bottom = 8; + + $this->_defaultLeft = $this->parsingCss->ConvertToMM($left.'mm'); + $this->_defaultTop = $this->parsingCss->ConvertToMM($top.'mm'); + $this->_defaultRight = $this->parsingCss->ConvertToMM($right.'mm'); + $this->_defaultBottom = $this->parsingCss->ConvertToMM($bottom.'mm'); + } + + /** + * create a new page + * + * @access protected + * @param mixed $format + * @param string $orientation + * @param array $background background information + * @param integer $curr real position in the html parseur (if break line in the write of a text) + * @param boolean $resetPageNumber + */ + protected function _setNewPage($format = null, $orientation = '', $background = null, $curr = null, $resetPageNumber=false) + { + $this->_firstPage = false; + + $this->_format = $format ? $format : $this->_format; + $this->_orientation = $orientation ? $orientation : $this->_orientation; + $this->_background = $background!==null ? $background : $this->_background; + $this->_maxY = 0; + $this->_maxX = 0; + $this->_maxH = 0; + $this->_maxE = 0; + + $this->pdf->SetMargins($this->_defaultLeft, $this->_defaultTop, $this->_defaultRight); + + if ($resetPageNumber) { + $this->pdf->startPageGroup(); + } + + $this->pdf->AddPage($this->_orientation, $this->_format); + + if ($resetPageNumber) { + $this->pdf->myStartPageGroup(); + } + + $this->_page++; + + if (!$this->_subPart && !$this->_isSubPart) { + if (is_array($this->_background)) { + if (isset($this->_background['color']) && $this->_background['color']) { + $this->pdf->setFillColorArray($this->_background['color']); + $this->pdf->Rect(0, 0, $this->pdf->getW(), $this->pdf->getH(), 'F'); + } + + if (isset($this->_background['img']) && $this->_background['img']) + $this->pdf->Image($this->_background['img'], $this->_background['posX'], $this->_background['posY'], $this->_background['width']); + } + + $this->_setPageHeader(); + $this->_setPageFooter(); + } + + $this->_setMargins(); + $this->pdf->setY($this->_margeTop); + + $this->_setNewPositionForNewLine($curr); + $this->_maxH = 0; + } + + /** + * set the real margin, using the default margins and the page margins + * + * @access protected + */ + protected function _setMargins() + { + // prepare the margins + $this->_margeLeft = $this->_defaultLeft + (isset($this->_background['left']) ? $this->_background['left'] : 0); + $this->_margeRight = $this->_defaultRight + (isset($this->_background['right']) ? $this->_background['right'] : 0); + $this->_margeTop = $this->_defaultTop + (isset($this->_background['top']) ? $this->_background['top'] : 0); + $this->_margeBottom = $this->_defaultBottom + (isset($this->_background['bottom']) ? $this->_background['bottom'] : 0); + + // set the PDF margins + $this->pdf->SetMargins($this->_margeLeft, $this->_margeTop, $this->_margeRight); + $this->pdf->SetAutoPageBreak(false, $this->_margeBottom); + + // set the float Margins + $this->_pageMarges = array(); + if ($this->_isInParagraph!==false) { + $this->_pageMarges[floor($this->_margeTop*100)] = array($this->_isInParagraph[0], $this->pdf->getW()-$this->_isInParagraph[1]); + } else { + $this->_pageMarges[floor($this->_margeTop*100)] = array($this->_margeLeft, $this->pdf->getW()-$this->_margeRight); + } + } + + /** + * add a debug step + * + * @access protected + * @param string $name step name + * @param boolean $level (true=up, false=down, null=nothing to do) + * @return $this + */ + protected function _DEBUG_add($name, $level=null) + { + // if true : UP + if ($level===true) $this->_debugLevel++; + + $name = str_repeat(' ', $this->_debugLevel). $name.($level===true ? ' Begin' : ($level===false ? ' End' : '')); + $time = microtime(true); + $usage = ($this->_debugOkUsage ? memory_get_usage() : 0); + $peak = ($this->_debugOkPeak ? memory_get_peak_usage() : 0); + + $this->_DEBUG_stepline( + $name, + number_format(($time - $this->_debugStartTime)*1000, 1, '.', ' ').' ms', + number_format(($time - $this->_debugLastTime)*1000, 1, '.', ' ').' ms', + number_format($usage/1024, 1, '.', ' ').' Ko', + number_format($peak/1024, 1, '.', ' ').' Ko' + ); + + $this->_debugLastTime = $time; + + // it false : DOWN + if ($level===false) $this->_debugLevel--; + + return $this; + } + + /** + * display a debug line + * + * + * @access protected + * @param string $name + * @param string $timeTotal + * @param string $timeStep + * @param string $memoryUsage + * @param string $memoryPeak + */ + protected function _DEBUG_stepline($name, $timeTotal, $timeStep, $memoryUsage, $memoryPeak) + { + $txt = str_pad($name, 30, ' ', STR_PAD_RIGHT). + str_pad($timeTotal, 12, ' ', STR_PAD_LEFT). + str_pad($timeStep, 12, ' ', STR_PAD_LEFT). + str_pad($memoryUsage, 15, ' ', STR_PAD_LEFT). + str_pad($memoryPeak, 15, ' ', STR_PAD_LEFT); + + echo '
      '.$txt.'
      '; + } + + /** + * get the Min and Max X, for Y (use the float margins) + * + * @access protected + * @param float $y + * @return array(float, float) + */ + protected function _getMargins($y) + { + $y = floor($y*100); + $x = array($this->pdf->getlMargin(), $this->pdf->getW()-$this->pdf->getrMargin()); + + foreach ($this->_pageMarges as $mY => $mX) + if ($mY<=$y) $x = $mX; + + return $x; + } + + /** + * Add margins, for a float + * + * @access protected + * @param string $float (left / right) + * @param float $xLeft + * @param float $yTop + * @param float $xRight + * @param float $yBottom + */ + protected function _addMargins($float, $xLeft, $yTop, $xRight, $yBottom) + { + // get the current float margins, for top and bottom + $oldTop = $this->_getMargins($yTop); + $oldBottom = $this->_getMargins($yBottom); + + // update the top float margin + if ($float=='left' && $oldTop[0]<$xRight) $oldTop[0] = $xRight; + if ($float=='right' && $oldTop[1]>$xLeft) $oldTop[1] = $xLeft; + + $yTop = floor($yTop*100); + $yBottom = floor($yBottom*100); + + // erase all the float margins that are smaller than the new one + foreach ($this->_pageMarges as $mY => $mX) { + if ($mY<$yTop) continue; + if ($mY>$yBottom) break; + if ($float=='left' && $this->_pageMarges[$mY][0]<$xRight) unset($this->_pageMarges[$mY]); + if ($float=='right' && $this->_pageMarges[$mY][1]>$xLeft) unset($this->_pageMarges[$mY]); + } + + // save the new Top and Bottom margins + $this->_pageMarges[$yTop] = $oldTop; + $this->_pageMarges[$yBottom] = $oldBottom; + + // sort the margins + ksort($this->_pageMarges); + + // we are just after float + $this->_isAfterFloat = true; + } + + /** + * Save old margins (push), and set new ones + * + * @access protected + * @param float $ml left margin + * @param float $mt top margin + * @param float $mr right margin + */ + protected function _saveMargin($ml, $mt, $mr) + { + // save old margins + $this->_marges[] = array('l' => $this->pdf->getlMargin(), 't' => $this->pdf->gettMargin(), 'r' => $this->pdf->getrMargin(), 'page' => $this->_pageMarges); + + // set new ones + $this->pdf->SetMargins($ml, $mt, $mr); + + // prepare for float margins + $this->_pageMarges = array(); + $this->_pageMarges[floor($mt*100)] = array($ml, $this->pdf->getW()-$mr); + } + + /** + * load the last saved margins (pop) + * + * @access protected + */ + protected function _loadMargin() + { + $old = array_pop($this->_marges); + if ($old) { + $ml = $old['l']; + $mt = $old['t']; + $mr = $old['r']; + $mP = $old['page']; + } else { + $ml = $this->_margeLeft; + $mt = 0; + $mr = $this->_margeRight; + $mP = array($mt => array($ml, $this->pdf->getW()-$mr)); + } + + $this->pdf->SetMargins($ml, $mt, $mr); + $this->_pageMarges = $mP; + } + + /** + * save the current maxs (push) + * + * @access protected + */ + protected function _saveMax() + { + $this->_maxSave[] = array($this->_maxX, $this->_maxY, $this->_maxH, $this->_maxE); + } + + /** + * load the last saved current maxs (pop) + * + * @access protected + */ + protected function _loadMax() + { + $old = array_pop($this->_maxSave); + + if ($old) { + $this->_maxX = $old[0]; + $this->_maxY = $old[1]; + $this->_maxH = $old[2]; + $this->_maxE = $old[3]; + } else { + $this->_maxX = 0; + $this->_maxY = 0; + $this->_maxH = 0; + $this->_maxE = 0; + } + } + + /** + * draw the PDF header with the HTML in page_header + * + * @access protected + */ + protected function _setPageHeader() + { + if (!count($this->_subHEADER)) return false; + + $oldParsePos = $this->_parsePos; + $oldParseCode = $this->parsingHtml->code; + + $this->_parsePos = 0; + $this->parsingHtml->code = $this->_subHEADER; + $this->_makeHTMLcode(); + + $this->_parsePos = $oldParsePos; + $this->parsingHtml->code = $oldParseCode; + } + + /** + * draw the PDF footer with the HTML in page_footer + * + * @access protected + */ + protected function _setPageFooter() + { + if (!count($this->_subFOOTER)) return false; + + $oldParsePos = $this->_parsePos; + $oldParseCode = $this->parsingHtml->code; + + $this->_parsePos = 0; + $this->parsingHtml->code = $this->_subFOOTER; + $this->_isInFooter = true; + $this->_makeHTMLcode(); + $this->_isInFooter = false; + + $this->_parsePos = $oldParsePos; + $this->parsingHtml->code = $oldParseCode; + } + + /** + * new line, with a specific height + * + * @access protected + * @param float $h + * @param integer $curr real current position in the text, if new line in the write of a text + */ + protected function _setNewLine($h, $curr = null) + { + $this->pdf->Ln($h); + $this->_setNewPositionForNewLine($curr); + } + + /** + * calculate the start position of the next line, depending on the text-align + * + * @access protected + * @param integer $curr real current position in the text, if new line in the write of a text + */ + protected function _setNewPositionForNewLine($curr = null) + { + // get the margins for the current line + list($lx, $rx) = $this->_getMargins($this->pdf->getY()); + $this->pdf->setX($lx); + $wMax = $rx-$lx; + $this->_currentH = 0; + + // if subPart => return because align left + if ($this->_subPart || $this->_isSubPart || $this->_isForOneLine) { + $this->pdf->setWordSpacing(0); + return null; + } + + // create the sub object + $sub = null; + $this->_createSubHTML($sub); + $sub->_saveMargin(0, 0, $sub->pdf->getW()-$wMax); + $sub->_isForOneLine = true; + $sub->_parsePos = $this->_parsePos; + $sub->parsingHtml->code = $this->parsingHtml->code; + + // if $curr => adapt the current position of the parsing + if ($curr!==null && $sub->parsingHtml->code[$this->_parsePos]['name']=='write') { + $txt = $sub->parsingHtml->code[$this->_parsePos]['param']['txt']; + $txt = str_replace('[[page_cu]]', $sub->pdf->getMyNumPage($this->_page), $txt); + $sub->parsingHtml->code[$this->_parsePos]['param']['txt'] = substr($txt, $curr+1); + } else + $sub->_parsePos++; + + // for each element of the parsing => load the action + $res = null; + for ($sub->_parsePos; $sub->_parsePosparsingHtml->code); $sub->_parsePos++) { + $action = $sub->parsingHtml->code[$sub->_parsePos]; + $res = $sub->_executeAction($action); + if (!$res) break; + } + + $w = $sub->_maxX; // max width + $h = $sub->_maxH; // max height + $e = ($res===null ? $sub->_maxE : 0); // maxnumber of elemets on the line + + // destroy the sub HTML + $this->_destroySubHTML($sub); + + // adapt the start of the line, depending on the text-align + if ($this->parsingCss->value['text-align']=='center') + $this->pdf->setX(($rx+$this->pdf->getX()-$w)*0.5-0.01); + else if ($this->parsingCss->value['text-align']=='right') + $this->pdf->setX($rx-$w-0.01); + else + $this->pdf->setX($lx); + + // set the height of the line + $this->_currentH = $h; + + // if justify => set the word spacing + if ($this->parsingCss->value['text-align']=='justify' && $e>1) { + $this->pdf->setWordSpacing(($wMax-$w)/($e-1)); + } else { + $this->pdf->setWordSpacing(0); + } + } + + /** + * prepare HTML2PDF::$_subobj (used for create the sub HTML2PDF objects + * + * @access protected + */ + protected function _prepareSubObj() + { + $pdf = null; + + // create the sub object + HTML2PDF::$_subobj = new HTML2PDF( + $this->_orientation, + $this->_format, + $this->_langue, + $this->_unicode, + $this->_encoding, + array($this->_defaultLeft,$this->_defaultTop,$this->_defaultRight,$this->_defaultBottom) + ); + + // init + HTML2PDF::$_subobj->setTestTdInOnePage($this->_testTdInOnepage); + HTML2PDF::$_subobj->setTestIsImage($this->_testIsImage); + HTML2PDF::$_subobj->setTestIsDeprecated($this->_testIsDeprecated); + HTML2PDF::$_subobj->setDefaultFont($this->_defaultFont); + HTML2PDF::$_subobj->parsingCss->css = &$this->parsingCss->css; + HTML2PDF::$_subobj->parsingCss->cssKeys = &$this->parsingCss->cssKeys; + + // clone font from the original PDF + HTML2PDF::$_subobj->pdf->cloneFontFrom($this->pdf); + + // remove the link to the parent + HTML2PDF::$_subobj->parsingCss->setPdfParent($pdf); + } + + /** + * create a sub HTML2PDF, to calculate the multi-tables + * + * @access protected + * @param &HTML2PDF $subHtml sub HTML2PDF to create + * @param integer $cellmargin if in a TD : cellmargin of this td + */ + protected function _createSubHTML(&$subHtml, $cellmargin=0) + { + // prepare the subObject, if never prepare before + if (HTML2PDF::$_subobj===null) { + $this->_prepareSubObj(); + } + + // calculate the width to use + if ($this->parsingCss->value['width']) { + $marge = $cellmargin*2; + $marge+= $this->parsingCss->value['padding']['l'] + $this->parsingCss->value['padding']['r']; + $marge+= $this->parsingCss->value['border']['l']['width'] + $this->parsingCss->value['border']['r']['width']; + $marge = $this->pdf->getW() - $this->parsingCss->value['width'] + $marge; + } else { + $marge = $this->_margeLeft+$this->_margeRight; + } + + // BUGFIX : we have to call the method, because of a bug in php 5.1.6 + HTML2PDF::$_subobj->pdf->getPage(); + + // clone the sub oject + $subHtml = clone HTML2PDF::$_subobj; + $subHtml->parsingCss->table = $this->parsingCss->table; + $subHtml->parsingCss->value = $this->parsingCss->value; + $subHtml->initSubHtml( + $this->_format, + $this->_orientation, + $marge, + $this->_page, + $this->_defList, + $this->pdf->getMyLastPageGroup(), + $this->pdf->getMyLastPageGroupNb() + ); + } + + /** + * destroy a subHTML2PDF + * + * @access protected + */ + protected function _destroySubHTML(&$subHtml) + { + unset($subHtml); + $subHtml = null; + } + + /** + * Convert a arabic number in roman number + * + * @access protected + * @param integer $nbArabic + * @return string $nbRoman + */ + protected function _listeArab2Rom($nbArabic) + { + $nbBaseTen = array('I','X','C','M'); + $nbBaseFive = array('V','L','D'); + $nbRoman = ''; + + if ($nbArabic<1) return $nbArabic; + if ($nbArabic>3999) return $nbArabic; + + for ($i=3; $i>=0 ; $i--) { + $chiffre=floor($nbArabic/pow(10, $i)); + if ($chiffre>=1) { + $nbArabic=$nbArabic-$chiffre*pow(10, $i); + if ($chiffre<=3) { + for ($j=$chiffre; $j>=1; $j--) { + $nbRoman=$nbRoman.$nbBaseTen[$i]; + } + } else if ($chiffre==9) { + $nbRoman=$nbRoman.$nbBaseTen[$i].$nbBaseTen[$i+1]; + } else if ($chiffre==4) { + $nbRoman=$nbRoman.$nbBaseTen[$i].$nbBaseFive[$i]; + } else { + $nbRoman=$nbRoman.$nbBaseFive[$i]; + for ($j=$chiffre-5; $j>=1; $j--) { + $nbRoman=$nbRoman.$nbBaseTen[$i]; + } + } + } + } + return $nbRoman; + } + + /** + * add a LI to the current level + * + * @access protected + */ + protected function _listeAddLi() + { + $this->_defList[count($this->_defList)-1]['nb']++; + } + + /** + * get the width to use for the column of the list + * + * @access protected + * @return string $width + */ + protected function _listeGetWidth() + { + return '7mm'; + } + + /** + * get the padding to use for the column of the list + * + * @access protected + * @return string $padding + */ + protected function _listeGetPadding() + { + return '1mm'; + } + + /** + * get the information of the li on the current level + * + * @access protected + * @return array(fontName, small size, string) + */ + protected function _listeGetLi() + { + $im = $this->_defList[count($this->_defList)-1]['img']; + $st = $this->_defList[count($this->_defList)-1]['style']; + $nb = $this->_defList[count($this->_defList)-1]['nb']; + $up = (substr($st, 0, 6)=='upper-'); + + if ($im) return array(false, false, $im); + + switch($st) + { + case 'none': + return array('helvetica', true, ' '); + + case 'upper-alpha': + case 'lower-alpha': + $str = ''; + while ($nb>26) { + $str = chr(96+$nb%26).$str; + $nb = floor($nb/26); + } + $str = chr(96+$nb).$str; + + return array('helvetica', false, ($up ? strtoupper($str) : $str).'.'); + + case 'upper-roman': + case 'lower-roman': + $str = $this->_listeArab2Rom($nb); + + return array('helvetica', false, ($up ? strtoupper($str) : $str).'.'); + + case 'decimal': + return array('helvetica', false, $nb.'.'); + + case 'square': + return array('zapfdingbats', true, chr(110)); + + case 'circle': + return array('zapfdingbats', true, chr(109)); + + case 'disc': + default: + return array('zapfdingbats', true, chr(108)); + } + } + + /** + * add a level to the list + * + * @access protected + * @param string $type : ul, ol + * @param string $style : lower-alpha, ... + * @param string $img + */ + protected function _listeAddLevel($type = 'ul', $style = '', $img = null) + { + // get the url of the image, if we want to use a image + if ($img) { + if (preg_match('/^url\(([^)]+)\)$/isU', trim($img), $match)) { + $img = $match[1]; + } else { + $img = null; + } + } else { + $img = null; + } + + // prepare the datas + if (!in_array($type, array('ul', 'ol'))) $type = 'ul'; + if (!in_array($style, array('lower-alpha', 'upper-alpha', 'upper-roman', 'lower-roman', 'decimal', 'square', 'circle', 'disc', 'none'))) $style = ''; + + if (!$style) { + if ($type=='ul') $style = 'disc'; + else $style = 'decimal'; + } + + // add the new level + $this->_defList[count($this->_defList)] = array('style' => $style, 'nb' => 0, 'img' => $img); + } + + /** + * remove a level to the list + * + * @access protected + */ + protected function _listeDelLevel() + { + if (count($this->_defList)) { + unset($this->_defList[count($this->_defList)-1]); + $this->_defList = array_values($this->_defList); + } + } + + /** + * execute the actions to convert the html + * + * @access protected + */ + protected function _makeHTMLcode() + { + // foreach elements of the parsing + for ($this->_parsePos=0; $this->_parsePosparsingHtml->code); $this->_parsePos++) { + + // get the action to do + $action = $this->parsingHtml->code[$this->_parsePos]; + + // if it is a opening of table / ul / ol + if (in_array($action['name'], array('table', 'ul', 'ol')) && !$action['close']) { + + // we will work as a sub HTML to calculate the size of the element + $this->_subPart = true; + + // get the name of the opening tag + $tagOpen = $action['name']; + + // save the actual pos on the parsing + $this->_tempPos = $this->_parsePos; + + // foreach elements, while we are in the opened tag + while (isset($this->parsingHtml->code[$this->_tempPos]) && !($this->parsingHtml->code[$this->_tempPos]['name']==$tagOpen && $this->parsingHtml->code[$this->_tempPos]['close'])) { + // make the action + $this->_executeAction($this->parsingHtml->code[$this->_tempPos]); + $this->_tempPos++; + } + + // execute the closure of the tag + if (isset($this->parsingHtml->code[$this->_tempPos])) { + $this->_executeAction($this->parsingHtml->code[$this->_tempPos]); + } + + // end of the sub part + $this->_subPart = false; + } + + // execute the action + $this->_executeAction($action); + } + } + + /** + * execute the action from the parsing + * + * @access protected + * @param array $action + */ + protected function _executeAction($action) + { + // name of the action + $fnc = ($action['close'] ? '_tag_close_' : '_tag_open_').strtoupper($action['name']); + + // parameters of the action + $param = $action['param']; + + // if it the first action of the first page, and if it is not a open tag of PAGE => create the new page + if ($fnc!='_tag_open_PAGE' && $this->_firstPage) { + $this->_setNewPage(); + } + + // the action must exist + if (!is_callable(array(&$this, $fnc))) { + throw new HTML2PDF_exception(1, strtoupper($action['name']), $this->parsingHtml->getHtmlErrorCode($action['html_pos'])); + } + + // lauch the action + $res = $this->{$fnc}($param); + + // save the name of the action + $this->_previousCall = $fnc; + + // return the result + return $res; + } + + /** + * get the position of the element on the current line, depending on his height + * + * @access protected + * @param float $h + * @return float + */ + protected function _getElementY($h) + { + if ($this->_subPart || $this->_isSubPart || !$this->_currentH || $this->_currentH<$h) + return 0; + + return ($this->_currentH-$h)*0.8; + } + + /** + * make a break line + * + * @access protected + * @param float $h current line height + * @param integer $curr real current position in the text, if new line in the write of a text + */ + protected function _makeBreakLine($h, $curr = null) + { + if ($h) { + if (($this->pdf->getY()+$h<$this->pdf->getH() - $this->pdf->getbMargin()) || $this->_isInOverflow || $this->_isInFooter) + $this->_setNewLine($h, $curr); + else + $this->_setNewPage(null, '', null, $curr); + } else { + $this->_setNewPositionForNewLine($curr); + } + + $this->_maxH = 0; + $this->_maxE = 0; + } + + /** + * display a image + * + * @access protected + * @param string $src + * @param boolean $subLi if true=image of a list + * @return boolean depending on "isForOneLine" + */ + protected function _drawImage($src, $subLi=false) + { + // get the size of the image + // WARNING : if URL, "allow_url_fopen" must turned to "on" in php.ini + $infos=@getimagesize($src); + + // if the image does not exist, or can not be loaded + if (count($infos)<2) { + // if the test is activ => exception + if ($this->_testIsImage) { + throw new HTML2PDF_exception(6, $src); + } + + // else, display a gray rectangle + $src = null; + $infos = array(16, 16); + } + + // convert the size of the image in the unit of the PDF + $imageWidth = $infos[0]/$this->pdf->getK(); + $imageHeight = $infos[1]/$this->pdf->getK(); + + // calculate the size from the css style + if ($this->parsingCss->value['width'] && $this->parsingCss->value['height']) { + $w = $this->parsingCss->value['width']; + $h = $this->parsingCss->value['height']; + } else if ($this->parsingCss->value['width']) { + $w = $this->parsingCss->value['width']; + $h = $imageHeight*$w/$imageWidth; + } else if ($this->parsingCss->value['height']) { + $h = $this->parsingCss->value['height']; + $w = $imageWidth*$h/$imageHeight; + } else { + // convert px to pt + $w = 72./96.*$imageWidth; + $h = 72./96.*$imageHeight; + } + + // are we in a float + $float = $this->parsingCss->getFloat(); + + // if we are in a float, but if something else if on the line => Break Line + if ($float && $this->_maxH) { + // make the break line (false if we are in "_isForOneLine" mode) + if (!$this->_tag_open_BR(array())) { + return false; + } + } + + // position of the image + $x = $this->pdf->getX(); + $y = $this->pdf->getY(); + + // if the image can not be put on the current line => new line + if (!$float && ($x + $w>$this->pdf->getW() - $this->pdf->getrMargin()) && $this->_maxH) { + if ($this->_isForOneLine) { + return false; + } + + // set the new line + $hnl = max($this->_maxH, $this->parsingCss->getLineHeight()); + $this->_setNewLine($hnl); + + // get the new position + $x = $this->pdf->getX(); + $y = $this->pdf->getY(); + } + + // if the image can not be put on the current page + if (($y + $h>$this->pdf->getH() - $this->pdf->getbMargin()) && !$this->_isInOverflow) { + // new page + $this->_setNewPage(); + + // get the new position + $x = $this->pdf->getX(); + $y = $this->pdf->getY(); + } + + // correction for display the image of a list + $hT = 0.80*$this->parsingCss->value['font-size']; + if ($subLi && $h<$hT) { + $y+=($hT-$h); + } + + // add the margin top + $yc = $y-$this->parsingCss->value['margin']['t']; + + // get the width and the position of the parent + $old = $this->parsingCss->getOldValues(); + if ( $old['width']) { + $parentWidth = $old['width']; + $parentX = $x; + } else { + $parentWidth = $this->pdf->getW() - $this->pdf->getlMargin() - $this->pdf->getrMargin(); + $parentX = $this->pdf->getlMargin(); + } + + // if we are in a gloat => adapt the parent position and width + if ($float) { + list($lx, $rx) = $this->_getMargins($yc); + $parentX = $lx; + $parentWidth = $rx-$lx; + } + + // calculate the position of the image, if align to the right + if ($parentWidth>$w && $float!='left') { + if ($float=='right' || $this->parsingCss->value['text-align']=='li_right') $x = $parentX + $parentWidth - $w-$this->parsingCss->value['margin']['r']-$this->parsingCss->value['margin']['l']; + } + + // display the image + if (!$this->_subPart && !$this->_isSubPart) { + if ($src) { + $this->pdf->Image($src, $x, $y, $w, $h, '', $this->_isInLink); + } else { + // rectangle if the image can not be loaded + $this->pdf->setFillColorArray(array(240, 220, 220)); + $this->pdf->Rect($x, $y, $w, $h, 'F'); + } + } + + // apply the margins + $x-= $this->parsingCss->value['margin']['l']; + $y-= $this->parsingCss->value['margin']['t']; + $w+= $this->parsingCss->value['margin']['l'] + $this->parsingCss->value['margin']['r']; + $h+= $this->parsingCss->value['margin']['t'] + $this->parsingCss->value['margin']['b']; + + if ($float=='left') { + // save the current max + $this->_maxX = max($this->_maxX, $x+$w); + $this->_maxY = max($this->_maxY, $y+$h); + + // add the image to the margins + $this->_addMargins($float, $x, $y, $x+$w, $y+$h); + + // get the new position + list($lx, $rx) = $this->_getMargins($yc); + $this->pdf->setXY($lx, $yc); + } else if ($float=='right') { + // save the current max. We don't save the X because it is not the real max of the line + $this->_maxY = max($this->_maxY, $y+$h); + + // add the image to the margins + $this->_addMargins($float, $x, $y, $x+$w, $y+$h); + + // get the new position + list($lx, $rx) = $this->_getMargins($yc); + $this->pdf->setXY($lx, $yc); + } else { + // set the new position at the end of the image + $this->pdf->setX($x+$w); + + // save the current max + $this->_maxX = max($this->_maxX, $x+$w); + $this->_maxY = max($this->_maxY, $y+$h); + $this->_maxH = max($this->_maxH, $h); + } + + return true; + } + + /** + * draw a rectangle + * + * @access protected + * @param float $x + * @param float $y + * @param float $w + * @param float $h + * @param array $border + * @param float $padding - internal marge of the rectanble => not used, but... + * @param float $margin - external marge of the rectanble + * @param array $background + * @return boolean + */ + protected function _drawRectangle($x, $y, $w, $h, $border, $padding, $margin, $background) + { + // if we are in a subpart or if height is null => return false + if ($this->_subPart || $this->_isSubPart || $h===null) return false; + + // add the margin + $x+= $margin; + $y+= $margin; + $w-= $margin*2; + $h-= $margin*2; + + // get the radius of the border + $outTL = $border['radius']['tl']; + $outTR = $border['radius']['tr']; + $outBR = $border['radius']['br']; + $outBL = $border['radius']['bl']; + + // prepare the out radius + $outTL = ($outTL[0] && $outTL[1]) ? $outTL : null; + $outTR = ($outTR[0] && $outTR[1]) ? $outTR : null; + $outBR = ($outBR[0] && $outBR[1]) ? $outBR : null; + $outBL = ($outBL[0] && $outBL[1]) ? $outBL : null; + + // prepare the in radius + $inTL = $outTL; + $inTR = $outTR; + $inBR = $outBR; + $inBL = $outBL; + + if (is_array($inTL)) { + $inTL[0]-= $border['l']['width']; + $inTL[1]-= $border['t']['width']; + } + + if (is_array($inTR)) { + $inTR[0]-= $border['r']['width']; + $inTR[1]-= $border['t']['width']; + } + + if (is_array($inBR)) { + $inBR[0]-= $border['r']['width']; + $inBR[1]-= $border['b']['width']; + } + + if (is_array($inBL)) { + $inBL[0]-= $border['l']['width']; + $inBL[1]-= $border['b']['width']; + } + + if (is_array($inTL) && ($inTL[0]<=0 || $inTL[1]<=0)) $inTL = null; + if (is_array($inTR) && ($inTR[0]<=0 || $inTR[1]<=0)) $inTR = null; + if (is_array($inBR) && ($inBR[0]<=0 || $inBR[1]<=0)) $inBR = null; + if (is_array($inBL) && ($inBL[0]<=0 || $inBL[1]<=0)) $inBL = null; + + // prepare the background color + $pdfStyle = ''; + if ($background['color']) { + $this->pdf->setFillColorArray($background['color']); + $pdfStyle.= 'F'; + } + + // if we have a background to fill => fill it with a path (because of the radius) + if ($pdfStyle) { + $this->pdf->clippingPathStart($x, $y, $w, $h, $outTL, $outTR, $outBL, $outBR); + $this->pdf->Rect($x, $y, $w, $h, $pdfStyle); + $this->pdf->clippingPathStop(); + } + + // prepare the background image + if ($background['image']) { + $iName = $background['image']; + $iPosition = $background['position']!==null ? $background['position'] : array(0, 0); + $iRepeat = $background['repeat']!==null ? $background['repeat'] : array(true, true); + + // size of the background without the borders + $bX = $x; + $bY = $y; + $bW = $w; + $bH = $h; + + if ($border['b']['width']) { + $bH-= $border['b']['width']; + } + if ($border['l']['width']) { + $bW-= $border['l']['width']; + $bX+= $border['l']['width']; + } + if ($border['t']['width']) { + $bH-= $border['t']['width']; + $bY+= $border['t']['width']; + } + if ($border['r']['width']) { + $bW-= $border['r']['width']; + } + + // get the size of the image + // WARNING : if URL, "allow_url_fopen" must turned to "on" in php.ini + $imageInfos=@getimagesize($iName); + + // if the image can not be loaded + if (count($imageInfos)<2) { + if ($this->_testIsImage) { + throw new HTML2PDF_exception(6, $iName); + } + } else { + // convert the size of the image from pixel to the unit of the PDF + $imageWidth = 72./96.*$imageInfos[0]/$this->pdf->getK(); + $imageHeight = 72./96.*$imageInfos[1]/$this->pdf->getK(); + + // prepare the position of the backgroung + if ($iRepeat[0]) $iPosition[0] = $bX; + else if (preg_match('/^([-]?[0-9\.]+)%/isU', $iPosition[0], $match)) $iPosition[0] = $bX + $match[1]*($bW-$imageWidth)/100; + else $iPosition[0] = $bX+$iPosition[0]; + + if ($iRepeat[1]) $iPosition[1] = $bY; + else if (preg_match('/^([-]?[0-9\.]+)%/isU', $iPosition[1], $match)) $iPosition[1] = $bY + $match[1]*($bH-$imageHeight)/100; + else $iPosition[1] = $bY+$iPosition[1]; + + $imageXmin = $bX; + $imageXmax = $bX+$bW; + $imageYmin = $bY; + $imageYmax = $bY+$bH; + + if (!$iRepeat[0] && !$iRepeat[1]) { + $imageXmin = $iPosition[0]; $imageXmax = $iPosition[0]+$imageWidth; + $imageYmin = $iPosition[1]; $imageYmax = $iPosition[1]+$imageHeight; + } else if ($iRepeat[0] && !$iRepeat[1]) { + $imageYmin = $iPosition[1]; $imageYmax = $iPosition[1]+$imageHeight; + } else if (!$iRepeat[0] && $iRepeat[1]) { + $imageXmin = $iPosition[0]; $imageXmax = $iPosition[0]+$imageWidth; + } + + // build the path to display the image (because of radius) + $this->pdf->clippingPathStart($bX, $bY, $bW, $bH, $inTL, $inTR, $inBL, $inBR); + + // repeat the image + for ($iY=$imageYmin; $iY<$imageYmax; $iY+=$imageHeight) { + for ($iX=$imageXmin; $iX<$imageXmax; $iX+=$imageWidth) { + $cX = null; + $cY = null; + $cW = $imageWidth; + $cH = $imageHeight; + if ($imageYmax-$iY<$imageHeight) { + $cX = $iX; + $cY = $iY; + $cH = $imageYmax-$iY; + } + if ($imageXmax-$iX<$imageWidth) { + $cX = $iX; + $cY = $iY; + $cW = $imageXmax-$iX; + } + + $this->pdf->Image($iName, $iX, $iY, $imageWidth, $imageHeight, '', ''); + } + } + + // end of the path + $this->pdf->clippingPathStop(); + } + } + + // adding some loose (0.01mm) + $loose = 0.01; + $x-= $loose; + $y-= $loose; + $w+= 2.*$loose; + $h+= 2.*$loose; + if ($border['l']['width']) $border['l']['width']+= 2.*$loose; + if ($border['t']['width']) $border['t']['width']+= 2.*$loose; + if ($border['r']['width']) $border['r']['width']+= 2.*$loose; + if ($border['b']['width']) $border['b']['width']+= 2.*$loose; + + // prepare the test on borders + $testBl = ($border['l']['width'] && $border['l']['color'][0]!==null); + $testBt = ($border['t']['width'] && $border['t']['color'][0]!==null); + $testBr = ($border['r']['width'] && $border['r']['color'][0]!==null); + $testBb = ($border['b']['width'] && $border['b']['color'][0]!==null); + + // draw the radius bottom-left + if (is_array($outBL) && ($testBb || $testBl)) { + if ($inBL) { + $courbe = array(); + $courbe[] = $x+$outBL[0]; $courbe[] = $y+$h; + $courbe[] = $x; $courbe[] = $y+$h-$outBL[1]; + $courbe[] = $x+$outBL[0]; $courbe[] = $y+$h-$border['b']['width']; + $courbe[] = $x+$border['l']['width']; $courbe[] = $y+$h-$outBL[1]; + $courbe[] = $x+$outBL[0]; $courbe[] = $y+$h-$outBL[1]; + } else { + $courbe = array(); + $courbe[] = $x+$outBL[0]; $courbe[] = $y+$h; + $courbe[] = $x; $courbe[] = $y+$h-$outBL[1]; + $courbe[] = $x+$border['l']['width']; $courbe[] = $y+$h-$border['b']['width']; + $courbe[] = $x+$outBL[0]; $courbe[] = $y+$h-$outBL[1]; + } + $this->_drawCurve($courbe, $border['l']['color']); + } + + // draw the radius left-top + if (is_array($outTL) && ($testBt || $testBl)) { + if ($inTL) { + $courbe = array(); + $courbe[] = $x; $courbe[] = $y+$outTL[1]; + $courbe[] = $x+$outTL[0]; $courbe[] = $y; + $courbe[] = $x+$border['l']['width']; $courbe[] = $y+$outTL[1]; + $courbe[] = $x+$outTL[0]; $courbe[] = $y+$border['t']['width']; + $courbe[] = $x+$outTL[0]; $courbe[] = $y+$outTL[1]; + } else { + $courbe = array(); + $courbe[] = $x; $courbe[] = $y+$outTL[1]; + $courbe[] = $x+$outTL[0]; $courbe[] = $y; + $courbe[] = $x+$border['l']['width']; $courbe[] = $y+$border['t']['width']; + $courbe[] = $x+$outTL[0]; $courbe[] = $y+$outTL[1]; + } + $this->_drawCurve($courbe, $border['t']['color']); + } + + // draw the radius top-right + if (is_array($outTR) && ($testBt || $testBr)) { + if ($inTR) { + $courbe = array(); + $courbe[] = $x+$w-$outTR[0]; $courbe[] = $y; + $courbe[] = $x+$w; $courbe[] = $y+$outTR[1]; + $courbe[] = $x+$w-$outTR[0]; $courbe[] = $y+$border['t']['width']; + $courbe[] = $x+$w-$border['r']['width']; $courbe[] = $y+$outTR[1]; + $courbe[] = $x+$w-$outTR[0]; $courbe[] = $y+$outTR[1]; + } else { + $courbe = array(); + $courbe[] = $x+$w-$outTR[0]; $courbe[] = $y; + $courbe[] = $x+$w; $courbe[] = $y+$outTR[1]; + $courbe[] = $x+$w-$border['r']['width']; $courbe[] = $y+$border['t']['width']; + $courbe[] = $x+$w-$outTR[0]; $courbe[] = $y+$outTR[1]; + } + $this->_drawCurve($courbe, $border['r']['color']); + } + + // draw the radius right-bottom + if (is_array($outBR) && ($testBb || $testBr)) { + if ($inBR) { + $courbe = array(); + $courbe[] = $x+$w; $courbe[] = $y+$h-$outBR[1]; + $courbe[] = $x+$w-$outBR[0]; $courbe[] = $y+$h; + $courbe[] = $x+$w-$border['r']['width']; $courbe[] = $y+$h-$outBR[1]; + $courbe[] = $x+$w-$outBR[0]; $courbe[] = $y+$h-$border['b']['width']; + $courbe[] = $x+$w-$outBR[0]; $courbe[] = $y+$h-$outBR[1]; + } else { + $courbe = array(); + $courbe[] = $x+$w; $courbe[] = $y+$h-$outBR[1]; + $courbe[] = $x+$w-$outBR[0]; $courbe[] = $y+$h; + $courbe[] = $x+$w-$border['r']['width']; $courbe[] = $y+$h-$border['b']['width']; + $courbe[] = $x+$w-$outBR[0]; $courbe[] = $y+$h-$outBR[1]; + } + $this->_drawCurve($courbe, $border['b']['color']); + } + + // draw the left border + if ($testBl) { + $pt = array(); + $pt[] = $x; $pt[] = $y+$h; + $pt[] = $x; $pt[] = $y+$h-$border['b']['width']; + $pt[] = $x; $pt[] = $y+$border['t']['width']; + $pt[] = $x; $pt[] = $y; + $pt[] = $x+$border['l']['width']; $pt[] = $y+$border['t']['width']; + $pt[] = $x+$border['l']['width']; $pt[] = $y+$h-$border['b']['width']; + + $bord = 3; + if (is_array($outBL)) { + $bord-=1; + $pt[3] -= $outBL[1] - $border['b']['width']; + if ($inBL) $pt[11]-= $inBL[1]; + unset($pt[0]);unset($pt[1]); + } + if (is_array($outTL)) { + $bord-=2; + $pt[5] += $outTL[1]-$border['t']['width']; + if ($inTL) $pt[9] += $inTL[1]; + unset($pt[6]);unset($pt[7]); + } + + $pt = array_values($pt); + $this->_drawLine($pt, $border['l']['color'], $border['l']['type'], $border['l']['width'], $bord); + } + + // draw the top border + if ($testBt) { + $pt = array(); + $pt[] = $x; $pt[] = $y; + $pt[] = $x+$border['l']['width']; $pt[] = $y; + $pt[] = $x+$w-$border['r']['width']; $pt[] = $y; + $pt[] = $x+$w; $pt[] = $y; + $pt[] = $x+$w-$border['r']['width']; $pt[] = $y+$border['t']['width']; + $pt[] = $x+$border['l']['width']; $pt[] = $y+$border['t']['width']; + + $bord = 3; + if (is_array($outTL)) { + $bord-=1; + $pt[2] += $outTL[0] - $border['l']['width']; + if ($inTL) $pt[10]+= $inTL[0]; + unset($pt[0]);unset($pt[1]); + } + if (is_array($outTR)) { + $bord-=2; + $pt[4] -= $outTR[0] - $border['r']['width']; + if ($inTR) $pt[8] -= $inTR[0]; + unset($pt[6]);unset($pt[7]); + } + + $pt = array_values($pt); + $this->_drawLine($pt, $border['t']['color'], $border['t']['type'], $border['t']['width'], $bord); + } + + // draw the right border + if ($testBr) { + $pt = array(); + $pt[] = $x+$w; $pt[] = $y; + $pt[] = $x+$w; $pt[] = $y+$border['t']['width']; + $pt[] = $x+$w; $pt[] = $y+$h-$border['b']['width']; + $pt[] = $x+$w; $pt[] = $y+$h; + $pt[] = $x+$w-$border['r']['width']; $pt[] = $y+$h-$border['b']['width']; + $pt[] = $x+$w-$border['r']['width']; $pt[] = $y+$border['t']['width']; + + $bord = 3; + if (is_array($outTR)) { + $bord-=1; + $pt[3] += $outTR[1] - $border['t']['width']; + if ($inTR) $pt[11]+= $inTR[1]; + unset($pt[0]);unset($pt[1]); + } + if (is_array($outBR)) { + $bord-=2; + $pt[5] -= $outBR[1] - $border['b']['width']; + if ($inBR) $pt[9] -= $inBR[1]; + unset($pt[6]);unset($pt[7]); + } + + $pt = array_values($pt); + $this->_drawLine($pt, $border['r']['color'], $border['r']['type'], $border['r']['width'], $bord); + } + + // draw the bottom border + if ($testBb) { + $pt = array(); + $pt[] = $x+$w; $pt[] = $y+$h; + $pt[] = $x+$w-$border['r']['width']; $pt[] = $y+$h; + $pt[] = $x+$border['l']['width']; $pt[] = $y+$h; + $pt[] = $x; $pt[] = $y+$h; + $pt[] = $x+$border['l']['width']; $pt[] = $y+$h-$border['b']['width']; + $pt[] = $x+$w-$border['r']['width']; $pt[] = $y+$h-$border['b']['width']; + + $bord = 3; + if (is_array($outBL)) { + $bord-=2; + $pt[4] += $outBL[0] - $border['l']['width']; + if ($inBL) $pt[8] += $inBL[0]; + unset($pt[6]);unset($pt[7]); + } + if (is_array($outBR)) { + $bord-=1; + $pt[2] -= $outBR[0] - $border['r']['width']; + if ($inBR) $pt[10]-= $inBR[0]; + unset($pt[0]);unset($pt[1]); + + } + + $pt = array_values($pt); + $this->_drawLine($pt, $border['b']['color'], $border['b']['type'], $border['b']['width'], $bord); + } + + if ($background['color']) { + $this->pdf->setFillColorArray($background['color']); + } + + return true; + } + + /** + * draw a curve (for border radius) + * + * @access protected + * @param array $pt + * @param array $color + */ + protected function _drawCurve($pt, $color) + { + $this->pdf->setFillColorArray($color); + + if (count($pt)==10) + $this->pdf->drawCurve($pt[0], $pt[1], $pt[2], $pt[3], $pt[4], $pt[5], $pt[6], $pt[7], $pt[8], $pt[9]); + else + $this->pdf->drawCorner($pt[0], $pt[1], $pt[2], $pt[3], $pt[4], $pt[5], $pt[6], $pt[7]); + } + + /** + * draw a ligne with a specific type, and specific start and end for radius + * + * @access protected + * @param array $pt + * @param float $color + * @param string $type (dashed, dotted, double, solid) + * @param float $width + * @param integer $radius (binary from 0 to 3 with 1=>start with a radius, 2=>end with a radius) + */ + protected function _drawLine($pt, $color, $type, $width, $radius=3) + { + // set the fill color + $this->pdf->setFillColorArray($color); + + // if dashed or dotted + if ($type=='dashed' || $type=='dotted') { + + // clean the end of the line, if radius + if ($radius==1) { + $tmp = array(); $tmp[]=$pt[0]; $tmp[]=$pt[1]; $tmp[]=$pt[2]; $tmp[]=$pt[3]; $tmp[]=$pt[8]; $tmp[]=$pt[9]; + $this->pdf->Polygon($tmp, 'F'); + + $tmp = array(); $tmp[]=$pt[2]; $tmp[]=$pt[3]; $tmp[]=$pt[4]; $tmp[]=$pt[5]; $tmp[]=$pt[6]; $tmp[]=$pt[7]; $tmp[]=$pt[8]; $tmp[]=$pt[9]; + $pt = $tmp; + } else if ($radius==2) { + $tmp = array(); $tmp[]=$pt[2]; $tmp[]=$pt[3]; $tmp[]=$pt[4]; $tmp[]=$pt[5]; $tmp[]=$pt[6]; $tmp[]=$pt[7]; + $this->pdf->Polygon($tmp, 'F'); + + $tmp = array(); $tmp[]=$pt[0]; $tmp[]=$pt[1]; $tmp[]=$pt[2]; $tmp[]=$pt[3]; $tmp[]=$pt[6]; $tmp[]=$pt[7]; $tmp[]=$pt[8]; $tmp[]=$pt[9]; + $pt = $tmp; + } else if ($radius==3) { + $tmp = array(); $tmp[]=$pt[0]; $tmp[]=$pt[1]; $tmp[]=$pt[2]; $tmp[]=$pt[3]; $tmp[]=$pt[10]; $tmp[]=$pt[11]; + $this->pdf->Polygon($tmp, 'F'); + + $tmp = array(); $tmp[]=$pt[4]; $tmp[]=$pt[5]; $tmp[]=$pt[6]; $tmp[]=$pt[7]; $tmp[]=$pt[8]; $tmp[]=$pt[9]; + $this->pdf->Polygon($tmp, 'F'); + + $tmp = array(); $tmp[]=$pt[2]; $tmp[]=$pt[3]; $tmp[]=$pt[4]; $tmp[]=$pt[5]; $tmp[]=$pt[8]; $tmp[]=$pt[9]; $tmp[]=$pt[10]; $tmp[]=$pt[11]; + $pt = $tmp; + } + + // horisontal or vertical line + if ($pt[2]==$pt[0]) { + $l = abs(($pt[3]-$pt[1])*0.5); + $px = 0; + $py = $width; + $x1 = $pt[0]; $y1 = ($pt[3]+$pt[1])*0.5; + $x2 = $pt[6]; $y2 = ($pt[7]+$pt[5])*0.5; + } else { + $l = abs(($pt[2]-$pt[0])*0.5); + $px = $width; + $py = 0; + $x1 = ($pt[2]+$pt[0])*0.5; $y1 = $pt[1]; + $x2 = ($pt[6]+$pt[4])*0.5; $y2 = $pt[7]; + } + + // if dashed : 3x bigger than dotted + if ($type=='dashed') { + $px = $px*3.; + $py = $py*3.; + } + $mode = ($l/($px+$py)<.5); + + // display the dotted/dashed line + for ($i=0; $l-($px+$py)*($i-0.5)>0; $i++) { + if (($i%2)==$mode) { + $j = $i-0.5; + $lx1 = $px*($j); if ($lx1<-$l) $lx1 =-$l; + $ly1 = $py*($j); if ($ly1<-$l) $ly1 =-$l; + $lx2 = $px*($j+1); if ($lx2>$l) $lx2 = $l; + $ly2 = $py*($j+1); if ($ly2>$l) $ly2 = $l; + + $tmp = array(); + $tmp[] = $x1+$lx1; $tmp[] = $y1+$ly1; + $tmp[] = $x1+$lx2; $tmp[] = $y1+$ly2; + $tmp[] = $x2+$lx2; $tmp[] = $y2+$ly2; + $tmp[] = $x2+$lx1; $tmp[] = $y2+$ly1; + $this->pdf->Polygon($tmp, 'F'); + + if ($j>0) { + $tmp = array(); + $tmp[] = $x1-$lx1; $tmp[] = $y1-$ly1; + $tmp[] = $x1-$lx2; $tmp[] = $y1-$ly2; + $tmp[] = $x2-$lx2; $tmp[] = $y2-$ly2; + $tmp[] = $x2-$lx1; $tmp[] = $y2-$ly1; + $this->pdf->Polygon($tmp, 'F'); + } + } + } + } else if ($type=='double') { + + // if double, 2 lines : 0=>1/3 and 2/3=>1 + $pt1 = $pt; + $pt2 = $pt; + + if (count($pt)==12) { + // line 1 + $pt1[0] = ($pt[0]-$pt[10])*0.33 + $pt[10]; + $pt1[1] = ($pt[1]-$pt[11])*0.33 + $pt[11]; + $pt1[2] = ($pt[2]-$pt[10])*0.33 + $pt[10]; + $pt1[3] = ($pt[3]-$pt[11])*0.33 + $pt[11]; + $pt1[4] = ($pt[4]-$pt[8])*0.33 + $pt[8]; + $pt1[5] = ($pt[5]-$pt[9])*0.33 + $pt[9]; + $pt1[6] = ($pt[6]-$pt[8])*0.33 + $pt[8]; + $pt1[7] = ($pt[7]-$pt[9])*0.33 + $pt[9]; + $pt2[10]= ($pt[10]-$pt[0])*0.33 + $pt[0]; + $pt2[11]= ($pt[11]-$pt[1])*0.33 + $pt[1]; + + // line 2 + $pt2[2] = ($pt[2] -$pt[0])*0.33 + $pt[0]; + $pt2[3] = ($pt[3] -$pt[1])*0.33 + $pt[1]; + $pt2[4] = ($pt[4] -$pt[6])*0.33 + $pt[6]; + $pt2[5] = ($pt[5] -$pt[7])*0.33 + $pt[7]; + $pt2[8] = ($pt[8] -$pt[6])*0.33 + $pt[6]; + $pt2[9] = ($pt[9] -$pt[7])*0.33 + $pt[7]; + } else { + // line 1 + $pt1[0] = ($pt[0]-$pt[6])*0.33 + $pt[6]; + $pt1[1] = ($pt[1]-$pt[7])*0.33 + $pt[7]; + $pt1[2] = ($pt[2]-$pt[4])*0.33 + $pt[4]; + $pt1[3] = ($pt[3]-$pt[5])*0.33 + $pt[5]; + + // line 2 + $pt2[6] = ($pt[6]-$pt[0])*0.33 + $pt[0]; + $pt2[7] = ($pt[7]-$pt[1])*0.33 + $pt[1]; + $pt2[4] = ($pt[4]-$pt[2])*0.33 + $pt[2]; + $pt2[5] = ($pt[5]-$pt[3])*0.33 + $pt[3]; + } + $this->pdf->Polygon($pt1, 'F'); + $this->pdf->Polygon($pt2, 'F'); + } else if ($type=='solid') { + // solid line : draw directly the polygon + $this->pdf->Polygon($pt, 'F'); + } + } + + /** + * prepare a transform matrix, only for drawing a SVG graphic + * + * @access protected + * @param string $transform + * @return array $matrix + */ + protected function _prepareTransform($transform) + { + // it can not be empty + if (!$transform) return null; + + // sctions must be like scale(...) + if (!preg_match_all('/([a-z]+)\(([^\)]*)\)/isU', $transform, $match)) return null; + + // prepare the list of the actions + $actions = array(); + + // for actions + for ($k=0; $k $j) { + $val[$i] = trim($j); + } + + // prepare the matrix, depending on the action + switch($name) + { + case 'scale': + if (!isset($val[0])) $val[0] = 1.; else $val[0] = 1.*$val[0]; + if (!isset($val[1])) $val[1] = $val[0]; else $val[1] = 1.*$val[1]; + $actions[] = array($val[0],0,0,$val[1],0,0); + break; + + case 'translate': + if (!isset($val[0])) $val[0] = 0.; else $val[0] = $this->parsingCss->ConvertToMM($val[0], $this->_isInDraw['w']); + if (!isset($val[1])) $val[1] = 0.; else $val[1] = $this->parsingCss->ConvertToMM($val[1], $this->_isInDraw['h']); + $actions[] = array(1,0,0,1,$val[0],$val[1]); + break; + + case 'rotate': + if (!isset($val[0])) $val[0] = 0.; else $val[0] = $val[0]*M_PI/180.; + if (!isset($val[1])) $val[1] = 0.; else $val[1] = $this->parsingCss->ConvertToMM($val[1], $this->_isInDraw['w']); + if (!isset($val[2])) $val[2] = 0.; else $val[2] = $this->parsingCss->ConvertToMM($val[2], $this->_isInDraw['h']); + if ($val[1] || $val[2]) $actions[] = array(1,0,0,1,-$val[1],-$val[2]); + $actions[] = array(cos($val[0]),sin($val[0]),-sin($val[0]),cos($val[0]),0,0); + if ($val[1] || $val[2]) $actions[] = array(1,0,0,1,$val[1],$val[2]); + break; + + case 'skewx': + if (!isset($val[0])) $val[0] = 0.; else $val[0] = $val[0]*M_PI/180.; + $actions[] = array(1,0,tan($val[0]),1,0,0); + break; + + case 'skewy': + if (!isset($val[0])) $val[0] = 0.; else $val[0] = $val[0]*M_PI/180.; + $actions[] = array(1,tan($val[0]),0,1,0,0); + break; + case 'matrix': + if (!isset($val[0])) $val[0] = 0.; else $val[0] = $val[0]*1.; + if (!isset($val[1])) $val[1] = 0.; else $val[1] = $val[1]*1.; + if (!isset($val[2])) $val[2] = 0.; else $val[2] = $val[2]*1.; + if (!isset($val[3])) $val[3] = 0.; else $val[3] = $val[3]*1.; + if (!isset($val[4])) $val[4] = 0.; else $val[4] = $this->parsingCss->ConvertToMM($val[4], $this->_isInDraw['w']); + if (!isset($val[5])) $val[5] = 0.; else $val[5] = $this->parsingCss->ConvertToMM($val[5], $this->_isInDraw['h']); + $actions[] =$val; + break; + } + } + + // if ther is no actions => return + if (!$actions) return null; + + // get the first matrix + $m = $actions[0]; unset($actions[0]); + + // foreach matrix => multiply to the last matrix + foreach ($actions as $n) { + $m = array( + $m[0]*$n[0]+$m[2]*$n[1], + $m[1]*$n[0]+$m[3]*$n[1], + $m[0]*$n[2]+$m[2]*$n[3], + $m[1]*$n[2]+$m[3]*$n[3], + $m[0]*$n[4]+$m[2]*$n[5]+$m[4], + $m[1]*$n[4]+$m[3]*$n[5]+$m[5] + ); + } + + // return the matrix + return $m; + } + + /** + * @access protected + * @param &array $cases + * @param &array $corr + */ + protected function _calculateTableCellSize(&$cases, &$corr) + { + if (!isset($corr[0])) return true; + + // for each cell without colspan, we get the max width for each column + $sw = array(); + for ($x=0; $x1) { + + // sum the max width of each column in colspan + $s = 0; for ($i=0; $i<$corr[$y][$x][2]; $i++) $s+= $sw[$x+$i]; + + // if the max width is < the width of the cell with colspan => we adapt the width of each max width + if ($s>0 && $s<$cases[$corr[$y][$x][1]][$corr[$y][$x][0]]['w']) { + for ($i=0; $i<$corr[$y][$x][2]; $i++) { + $sw[$x+$i] = $sw[$x+$i]/$s*$cases[$corr[$y][$x][1]][$corr[$y][$x][0]]['w']; + } + } + } + } + } + + // set the new width, for each cell + for ($x=0; $x1) { + + // sum the max height of each line in rowspan + $s = 0; for ($i=0; $i<$corr[$y][$x][3]; $i++) $s+= $sh[$y+$i]; + + // if the max height is < the height of the cell with rowspan => we adapt the height of each max height + if ($s>0 && $s<$cases[$corr[$y][$x][1]][$corr[$y][$x][0]]['h']) { + for ($i=0; $i<$corr[$y][$x][3]; $i++) { + $sh[$y+$i] = $sh[$y+$i]/$s*$cases[$corr[$y][$x][1]][$corr[$y][$x][0]]['h']; + } + } + } + } + } + + // set the new height, for each cell + for ($y=0; $y_isForOneLine) return false; + if ($this->_debugActif) $this->_DEBUG_add('PAGE '.($this->_page+1), true); + + $newPageSet= (!isset($param['pageset']) || $param['pageset']!='old'); + + $resetPageNumber = (isset($param['pagegroup']) && $param['pagegroup']=='new'); + + $this->_maxH = 0; + + // if new page set asked + if ($newPageSet) { + $this->_subHEADER = array(); + $this->_subFOOTER = array(); + + // orientation + $orientation = ''; + if (isset($param['orientation'])) { + $param['orientation'] = strtolower($param['orientation']); + if ($param['orientation']=='p') $orientation = 'P'; + if ($param['orientation']=='portrait') $orientation = 'P'; + + if ($param['orientation']=='l') $orientation = 'L'; + if ($param['orientation']=='paysage') $orientation = 'L'; + if ($param['orientation']=='landscape') $orientation = 'L'; + } + + // format + $format = null; + if (isset($param['format'])) { + $format = strtolower($param['format']); + if (preg_match('/^([0-9]+)x([0-9]+)$/isU', $format, $match)) { + $format = array(intval($match[1]), intval($match[2])); + } + } + + // background + $background = array(); + if (isset($param['backimg'])) { + $background['img'] = isset($param['backimg']) ? $param['backimg'] : ''; // src of the image + $background['posX'] = isset($param['backimgx']) ? $param['backimgx'] : 'center'; // horizontale position of the image + $background['posY'] = isset($param['backimgy']) ? $param['backimgy'] : 'middle'; // vertical position of the image + $background['width'] = isset($param['backimgw']) ? $param['backimgw'] : '100%'; // width of the image (100% = page width) + + // convert the src of the image, if parameters + $background['img'] = str_replace('&', '&', $background['img']); + + // convert the positions + if ($background['posX']=='left') $background['posX'] = '0%'; + if ($background['posX']=='center') $background['posX'] = '50%'; + if ($background['posX']=='right') $background['posX'] = '100%'; + if ($background['posY']=='top') $background['posY'] = '0%'; + if ($background['posY']=='middle') $background['posY'] = '50%'; + if ($background['posY']=='bottom') $background['posY'] = '100%'; + + if ($background['img']) { + // get the size of the image + // WARNING : if URL, "allow_url_fopen" must turned to "on" in php.ini + $infos=@getimagesize($background['img']); + if (count($infos)>1) { + $imageWidth = $this->parsingCss->ConvertToMM($background['width'], $this->pdf->getW()); + $imageHeight = $imageWidth*$infos[1]/$infos[0]; + + $background['width'] = $imageWidth; + $background['posX'] = $this->parsingCss->ConvertToMM($background['posX'], $this->pdf->getW() - $imageWidth); + $background['posY'] = $this->parsingCss->ConvertToMM($background['posY'], $this->pdf->getH() - $imageHeight); + } else { + $background = array(); + } + } else { + $background = array(); + } + } + + // margins of the page + $background['top'] = isset($param['backtop']) ? $param['backtop'] : '0'; + $background['bottom'] = isset($param['backbottom']) ? $param['backbottom'] : '0'; + $background['left'] = isset($param['backleft']) ? $param['backleft'] : '0'; + $background['right'] = isset($param['backright']) ? $param['backright'] : '0'; + + // if no unit => mm + if (preg_match('/^([0-9]*)$/isU', $background['top'])) $background['top'] .= 'mm'; + if (preg_match('/^([0-9]*)$/isU', $background['bottom'])) $background['bottom'] .= 'mm'; + if (preg_match('/^([0-9]*)$/isU', $background['left'])) $background['left'] .= 'mm'; + if (preg_match('/^([0-9]*)$/isU', $background['right'])) $background['right'] .= 'mm'; + + // convert to mm + $background['top'] = $this->parsingCss->ConvertToMM($background['top'], $this->pdf->getH()); + $background['bottom'] = $this->parsingCss->ConvertToMM($background['bottom'], $this->pdf->getH()); + $background['left'] = $this->parsingCss->ConvertToMM($background['left'], $this->pdf->getW()); + $background['right'] = $this->parsingCss->ConvertToMM($background['right'], $this->pdf->getW()); + + // get the background color + $res = false; + $background['color'] = isset($param['backcolor']) ? $this->parsingCss->convertToColor($param['backcolor'], $res) : null; + if (!$res) $background['color'] = null; + + $this->parsingCss->save(); + $this->parsingCss->analyse('PAGE', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + // new page + $this->_setNewPage($format, $orientation, $background, null, $resetPageNumber); + + // automatic footer + if (isset($param['footer'])) { + $lst = explode(';', $param['footer']); + foreach ($lst as $key => $val) $lst[$key] = trim(strtolower($val)); + $page = in_array('page', $lst); + $date = in_array('date', $lst); + $hour = in_array('heure', $lst); + $form = in_array('form', $lst); + } else { + $page = null; + $date = null; + $hour = null; + $form = null; + } + $this->pdf->SetMyFooter($page, $date, $hour, $form); + // else => we use the last page set used + } else { + $this->parsingCss->save(); + $this->parsingCss->analyse('PAGE', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + $this->_setNewPage(null, null, null, null, $resetPageNumber); + } + + return true; + } + + /** + * tag : PAGE + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_PAGE($param) + { + if ($this->_isForOneLine) return false; + + $this->_maxH = 0; + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + if ($this->_debugActif) $this->_DEBUG_add('PAGE '.$this->_page, false); + + return true; + } + + /** + * tag : PAGE_HEADER + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_PAGE_HEADER($param) + { + if ($this->_isForOneLine) return false; + + $this->_subHEADER = array(); + for ($this->_parsePos; $this->_parsePosparsingHtml->code); $this->_parsePos++) { + $action = $this->parsingHtml->code[$this->_parsePos]; + if ($action['name']=='page_header') $action['name']='page_header_sub'; + $this->_subHEADER[] = $action; + if (strtolower($action['name'])=='page_header_sub' && $action['close']) break; + } + + $this->_setPageHeader(); + + return true; + } + + /** + * tag : PAGE_FOOTER + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_PAGE_FOOTER($param) + { + if ($this->_isForOneLine) return false; + + $this->_subFOOTER = array(); + for ($this->_parsePos; $this->_parsePosparsingHtml->code); $this->_parsePos++) { + $action = $this->parsingHtml->code[$this->_parsePos]; + if ($action['name']=='page_footer') $action['name']='page_footer_sub'; + $this->_subFOOTER[] = $action; + if (strtolower($action['name'])=='page_footer_sub' && $action['close']) break; + } + + $this->_setPageFooter(); + + return true; + } + + /** + * It is not a real tag. Does not use it directly + * + * @param array $param + * @return boolean + */ + protected function _tag_open_PAGE_HEADER_SUB($param) + { + if ($this->_isForOneLine) return false; + + // save the current stat + $this->_subSTATES = array(); + $this->_subSTATES['x'] = $this->pdf->getX(); + $this->_subSTATES['y'] = $this->pdf->getY(); + $this->_subSTATES['s'] = $this->parsingCss->value; + $this->_subSTATES['t'] = $this->parsingCss->table; + $this->_subSTATES['ml'] = $this->_margeLeft; + $this->_subSTATES['mr'] = $this->_margeRight; + $this->_subSTATES['mt'] = $this->_margeTop; + $this->_subSTATES['mb'] = $this->_margeBottom; + $this->_subSTATES['mp'] = $this->_pageMarges; + + // new stat for the header + $this->_pageMarges = array(); + $this->_margeLeft = $this->_defaultLeft; + $this->_margeRight = $this->_defaultRight; + $this->_margeTop = $this->_defaultTop; + $this->_margeBottom = $this->_defaultBottom; + $this->pdf->SetMargins($this->_margeLeft, $this->_margeTop, $this->_margeRight); + $this->pdf->SetAutoPageBreak(false, $this->_margeBottom); + $this->pdf->setXY($this->_defaultLeft, $this->_defaultTop); + + $this->parsingCss->initStyle(); + $this->parsingCss->resetStyle(); + $this->parsingCss->value['width'] = $this->pdf->getW() - $this->_defaultLeft - $this->_defaultRight; + $this->parsingCss->table = array(); + + $this->parsingCss->save(); + $this->parsingCss->analyse('page_header_sub', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + $this->_setNewPositionForNewLine(); + return true; + } + + /** + * It is not a real tag. Does not use it directly + * + * @param array $param + * @return boolean + */ + protected function _tag_close_PAGE_HEADER_SUB($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->load(); + + // restore the stat + $this->parsingCss->value = $this->_subSTATES['s']; + $this->parsingCss->table = $this->_subSTATES['t']; + $this->_pageMarges = $this->_subSTATES['mp']; + $this->_margeLeft = $this->_subSTATES['ml']; + $this->_margeRight = $this->_subSTATES['mr']; + $this->_margeTop = $this->_subSTATES['mt']; + $this->_margeBottom = $this->_subSTATES['mb']; + $this->pdf->SetMargins($this->_margeLeft, $this->_margeTop, $this->_margeRight); + $this->pdf->setbMargin($this->_margeBottom); + $this->pdf->SetAutoPageBreak(false, $this->_margeBottom); + $this->pdf->setXY($this->_subSTATES['x'], $this->_subSTATES['y']); + + $this->parsingCss->fontSet(); + $this->_maxH = 0; + + return true; + } + + /** + * It is not a real tag. Does not use it directly + * + * @param array $param + * @return boolean + */ + protected function _tag_open_PAGE_FOOTER_SUB($param) + { + if ($this->_isForOneLine) return false; + + // save the current stat + $this->_subSTATES = array(); + $this->_subSTATES['x'] = $this->pdf->getX(); + $this->_subSTATES['y'] = $this->pdf->getY(); + $this->_subSTATES['s'] = $this->parsingCss->value; + $this->_subSTATES['t'] = $this->parsingCss->table; + $this->_subSTATES['ml'] = $this->_margeLeft; + $this->_subSTATES['mr'] = $this->_margeRight; + $this->_subSTATES['mt'] = $this->_margeTop; + $this->_subSTATES['mb'] = $this->_margeBottom; + $this->_subSTATES['mp'] = $this->_pageMarges; + + // new stat for the footer + $this->_pageMarges = array(); + $this->_margeLeft = $this->_defaultLeft; + $this->_margeRight = $this->_defaultRight; + $this->_margeTop = $this->_defaultTop; + $this->_margeBottom = $this->_defaultBottom; + $this->pdf->SetMargins($this->_margeLeft, $this->_margeTop, $this->_margeRight); + $this->pdf->SetAutoPageBreak(false, $this->_margeBottom); + $this->pdf->setXY($this->_defaultLeft, $this->_defaultTop); + + $this->parsingCss->initStyle(); + $this->parsingCss->resetStyle(); + $this->parsingCss->value['width'] = $this->pdf->getW() - $this->_defaultLeft - $this->_defaultRight; + $this->parsingCss->table = array(); + + // we create a sub HTML2PFDF, and we execute on it the content of the footer, to get the height of it + $sub = null; + $this->_createSubHTML($sub); + $sub->parsingHtml->code = $this->parsingHtml->getLevel($this->_parsePos); + $sub->_makeHTMLcode(); + $this->pdf->setY($this->pdf->getH() - $sub->_maxY - $this->_defaultBottom - 0.01); + $this->_destroySubHTML($sub); + + $this->parsingCss->save(); + $this->parsingCss->analyse('page_footer_sub', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + $this->_setNewPositionForNewLine(); + + return true; + } + + /** + * It is not a real tag. Does not use it directly + * + * @param array $param + * @return boolean + */ + protected function _tag_close_PAGE_FOOTER_SUB($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->load(); + + $this->parsingCss->value = $this->_subSTATES['s']; + $this->parsingCss->table = $this->_subSTATES['t']; + $this->_pageMarges = $this->_subSTATES['mp']; + $this->_margeLeft = $this->_subSTATES['ml']; + $this->_margeRight = $this->_subSTATES['mr']; + $this->_margeTop = $this->_subSTATES['mt']; + $this->_margeBottom = $this->_subSTATES['mb']; + $this->pdf->SetMargins($this->_margeLeft, $this->_margeTop, $this->_margeRight); + $this->pdf->SetAutoPageBreak(false, $this->_margeBottom); + $this->pdf->setXY($this->_subSTATES['x'], $this->_subSTATES['y']); + + $this->parsingCss->fontSet(); + $this->_maxH = 0; + + return true; + } + + /** + * tag : NOBREAK + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_NOBREAK($param) + { + if ($this->_isForOneLine) return false; + + $this->_maxH = 0; + + // create a sub HTML2PDF to execute the content of the tag, to get the dimensions + $sub = null; + $this->_createSubHTML($sub); + $sub->parsingHtml->code = $this->parsingHtml->getLevel($this->_parsePos); + $sub->_makeHTMLcode(); + $y = $this->pdf->getY(); + + // if the content does not fit on the page => new page + if ( + $sub->_maxY < ($this->pdf->getH() - $this->pdf->gettMargin()-$this->pdf->getbMargin()) && + $y + $sub->_maxY>=($this->pdf->getH() - $this->pdf->getbMargin()) + ) { + $this->_setNewPage(); + } + + // destroy the sub HTML2PDF + $this->_destroySubHTML($sub); + + return true; + } + + + /** + * tag : NOBREAK + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_NOBREAK($param) + { + if ($this->_isForOneLine) return false; + + $this->_maxH = 0; + + return true; + } + + /** + * tag : DIV + * mode : OPEN + * + * @param array $param + * @param string $other name of tag that used the div tag + * @return boolean + */ + protected function _tag_open_DIV($param, $other = 'div') + { + if ($this->_isForOneLine) return false; + if ($this->_debugActif) $this->_DEBUG_add(strtoupper($other), true); + + $this->parsingCss->save(); + $this->parsingCss->analyse($other, $param); + $this->parsingCss->fontSet(); + + // for fieldset and legend + if (in_array($other, array('fieldset', 'legend'))) { + if (isset($param['moveTop'])) $this->parsingCss->value['margin']['t'] += $param['moveTop']; + if (isset($param['moveLeft'])) $this->parsingCss->value['margin']['l'] += $param['moveLeft']; + if (isset($param['moveDown'])) $this->parsingCss->value['margin']['b'] += $param['moveDown']; + } + + $alignObject = null; + if ($this->parsingCss->value['margin-auto']) $alignObject = 'center'; + + $marge = array(); + $marge['l'] = $this->parsingCss->value['border']['l']['width'] + $this->parsingCss->value['padding']['l']+0.03; + $marge['r'] = $this->parsingCss->value['border']['r']['width'] + $this->parsingCss->value['padding']['r']+0.03; + $marge['t'] = $this->parsingCss->value['border']['t']['width'] + $this->parsingCss->value['padding']['t']+0.03; + $marge['b'] = $this->parsingCss->value['border']['b']['width'] + $this->parsingCss->value['padding']['b']+0.03; + + // extract the content of the div + $level = $this->parsingHtml->getLevel($this->_parsePos); + + // create a sub HTML2PDF to get the dimensions of the content of the div + $w = 0; $h = 0; + if (count($level)) { + $sub = null; + $this->_createSubHTML($sub); + $sub->parsingHtml->code = $level; + $sub->_makeHTMLcode(); + $w = $sub->_maxX; + $h = $sub->_maxY; + $this->_destroySubHTML($sub); + } + $wReel = $w; + $hReel = $h; + + $w+= $marge['l']+$marge['r']+0.001; + $h+= $marge['t']+$marge['b']+0.001; + + if ($this->parsingCss->value['overflow']=='hidden') { + $overW = max($w, $this->parsingCss->value['width']); + $overH = max($h, $this->parsingCss->value['height']); + $overflow = true; + $this->parsingCss->value['old_maxX'] = $this->_maxX; + $this->parsingCss->value['old_maxY'] = $this->_maxY; + $this->parsingCss->value['old_maxH'] = $this->_maxH; + $this->parsingCss->value['old_overflow'] = $this->_isInOverflow; + $this->_isInOverflow = true; + } else { + $overW = null; + $overH = null; + $overflow = false; + $this->parsingCss->value['width'] = max($w, $this->parsingCss->value['width']); + $this->parsingCss->value['height'] = max($h, $this->parsingCss->value['height']); + } + + switch($this->parsingCss->value['rotate']) + { + case 90: + $tmp = $overH; $overH = $overW; $overW = $tmp; + $tmp = $hReel; $hReel = $wReel; $wReel = $tmp; + unset($tmp); + $w = $this->parsingCss->value['height']; + $h = $this->parsingCss->value['width']; + $tX =-$h; + $tY = 0; + break; + + case 180: + $w = $this->parsingCss->value['width']; + $h = $this->parsingCss->value['height']; + $tX = -$w; + $tY = -$h; + break; + + case 270: + $tmp = $overH; $overH = $overW; $overW = $tmp; + $tmp = $hReel; $hReel = $wReel; $wReel = $tmp; + unset($tmp); + $w = $this->parsingCss->value['height']; + $h = $this->parsingCss->value['width']; + $tX = 0; + $tY =-$w; + break; + + default: + $w = $this->parsingCss->value['width']; + $h = $this->parsingCss->value['height']; + $tX = 0; + $tY = 0; + break; + } + + if (!$this->parsingCss->value['position']) { + if ( + $w < ($this->pdf->getW() - $this->pdf->getlMargin()-$this->pdf->getrMargin()) && + $this->pdf->getX() + $w>=($this->pdf->getW() - $this->pdf->getrMargin()) + ) + $this->_tag_open_BR(array()); + + if ( + ($h < ($this->pdf->getH() - $this->pdf->gettMargin()-$this->pdf->getbMargin())) && + ($this->pdf->getY() + $h>=($this->pdf->getH() - $this->pdf->getbMargin())) && + !$this->_isInOverflow + ) + $this->_setNewPage(); + + $old = $this->parsingCss->getOldValues(); + $parentWidth = $old['width'] ? $old['width'] : $this->pdf->getW() - $this->pdf->getlMargin() - $this->pdf->getrMargin(); + + if ($parentWidth>$w) { + if ($alignObject=='center') $this->pdf->setX($this->pdf->getX() + ($parentWidth-$w)*0.5); + else if ($alignObject=='right') $this->pdf->setX($this->pdf->getX() + $parentWidth-$w); + } + + $this->parsingCss->setPosition(); + } else { + $old = $this->parsingCss->getOldValues(); + $parentWidth = $old['width'] ? $old['width'] : $this->pdf->getW() - $this->pdf->getlMargin() - $this->pdf->getrMargin(); + + if ($parentWidth>$w) { + if ($alignObject=='center') $this->pdf->setX($this->pdf->getX() + ($parentWidth-$w)*0.5); + else if ($alignObject=='right') $this->pdf->setX($this->pdf->getX() + $parentWidth-$w); + } + + $this->parsingCss->setPosition(); + $this->_saveMax(); + $this->_maxX = 0; + $this->_maxY = 0; + $this->_maxH = 0; + $this->_maxE = 0; + } + + if ($this->parsingCss->value['rotate']) { + $this->pdf->startTransform(); + $this->pdf->setRotation($this->parsingCss->value['rotate']); + $this->pdf->setTranslate($tX, $tY); + } + + $this->_drawRectangle( + $this->parsingCss->value['x'], + $this->parsingCss->value['y'], + $this->parsingCss->value['width'], + $this->parsingCss->value['height'], + $this->parsingCss->value['border'], + $this->parsingCss->value['padding'], + 0, + $this->parsingCss->value['background'] + ); + + $marge = array(); + $marge['l'] = $this->parsingCss->value['border']['l']['width'] + $this->parsingCss->value['padding']['l']+0.03; + $marge['r'] = $this->parsingCss->value['border']['r']['width'] + $this->parsingCss->value['padding']['r']+0.03; + $marge['t'] = $this->parsingCss->value['border']['t']['width'] + $this->parsingCss->value['padding']['t']+0.03; + $marge['b'] = $this->parsingCss->value['border']['b']['width'] + $this->parsingCss->value['padding']['b']+0.03; + + $this->parsingCss->value['width'] -= $marge['l']+$marge['r']; + $this->parsingCss->value['height']-= $marge['t']+$marge['b']; + + $xCorr = 0; + $yCorr = 0; + if (!$this->_subPart && !$this->_isSubPart) { + switch($this->parsingCss->value['text-align']) + { + case 'right': + $xCorr = ($this->parsingCss->value['width']-$wReel); + break; + case 'center': + $xCorr = ($this->parsingCss->value['width']-$wReel)*0.5; + break; + } + if ($xCorr>0) $xCorr=0; + switch($this->parsingCss->value['vertical-align']) + { + case 'bottom': + $yCorr = ($this->parsingCss->value['height']-$hReel); + break; + case 'middle': + $yCorr = ($this->parsingCss->value['height']-$hReel)*0.5; + break; + } + } + + if ($overflow) { + $overW-= $marge['l']+$marge['r']; + $overH-= $marge['t']+$marge['b']; + $this->pdf->clippingPathStart( + $this->parsingCss->value['x']+$marge['l'], + $this->parsingCss->value['y']+$marge['t'], + $this->parsingCss->value['width'], + $this->parsingCss->value['height'] + ); + + $this->parsingCss->value['x']+= $xCorr; + + // marges from the dimension of the content + $mL = $this->parsingCss->value['x']+$marge['l']; + $mR = $this->pdf->getW() - $mL - $overW; + } else { + // marges from the dimension of the div + $mL = $this->parsingCss->value['x']+$marge['l']; + $mR = $this->pdf->getW() - $mL - $this->parsingCss->value['width']; + } + + $x = $this->parsingCss->value['x']+$marge['l']; + $y = $this->parsingCss->value['y']+$marge['t']+$yCorr; + $this->_saveMargin($mL, 0, $mR); + $this->pdf->setXY($x, $y); + + $this->_setNewPositionForNewLine(); + + return true; + } + + /** + * tag : BLOCKQUOTE + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_BLOCKQUOTE($param) + { + return $this->_tag_open_DIV($param, 'blockquote'); + } + + /** + * tag : LEGEND + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_LEGEND($param) + { + return $this->_tag_open_DIV($param, 'legend'); + } + + /** + * tag : FIELDSET + * mode : OPEN + * + * @author Pavel Kochman + * @param array $param + * @return boolean + */ + protected function _tag_open_FIELDSET($param) + { + + $this->parsingCss->save(); + $this->parsingCss->analyse('fieldset', $param); + + // get height of LEGEND element and make fieldset corrections + for ($tempPos = $this->_parsePos + 1; $tempPosparsingHtml->code); $tempPos++) { + $action = $this->parsingHtml->code[$tempPos]; + if ($action['name'] == 'fieldset') break; + if ($action['name'] == 'legend' && !$action['close']) { + $legendOpenPos = $tempPos; + + $sub = null; + $this->_createSubHTML($sub); + $sub->parsingHtml->code = $this->parsingHtml->getLevel($tempPos - 1); + + $res = null; + for ($sub->_parsePos = 0; $sub->_parsePosparsingHtml->code); $sub->_parsePos++) { + $action = $sub->parsingHtml->code[$sub->_parsePos]; + $sub->_executeAction($action); + + if ($action['name'] == 'legend' && $action['close']) + break; + } + + $legendH = $sub->_maxY; + $this->_destroySubHTML($sub); + + $move = $this->parsingCss->value['padding']['t'] + $this->parsingCss->value['border']['t']['width'] + 0.03; + + $param['moveTop'] = $legendH / 2; + + $this->parsingHtml->code[$legendOpenPos]['param']['moveTop'] = - ($legendH / 2 + $move); + $this->parsingHtml->code[$legendOpenPos]['param']['moveLeft'] = 2 - $this->parsingCss->value['border']['l']['width'] - $this->parsingCss->value['padding']['l']; + $this->parsingHtml->code[$legendOpenPos]['param']['moveDown'] = $move; + break; + } + } + $this->parsingCss->load(); + + return $this->_tag_open_DIV($param, 'fieldset'); + } + + /** + * tag : DIV + * mode : CLOSE + * + * @param array $param + * @param string $other name of tag that used the div tag + * @return boolean + */ + protected function _tag_close_DIV($param, $other='div') + { + if ($this->_isForOneLine) return false; + + if ($this->parsingCss->value['overflow']=='hidden') { + $this->_maxX = $this->parsingCss->value['old_maxX']; + $this->_maxY = $this->parsingCss->value['old_maxY']; + $this->_maxH = $this->parsingCss->value['old_maxH']; + $this->_isInOverflow = $this->parsingCss->value['old_overflow']; + $this->pdf->clippingPathStop(); + } + + if ($this->parsingCss->value['rotate']) + $this->pdf->stopTransform(); + + $marge = array(); + $marge['l'] = $this->parsingCss->value['border']['l']['width'] + $this->parsingCss->value['padding']['l']+0.03; + $marge['r'] = $this->parsingCss->value['border']['r']['width'] + $this->parsingCss->value['padding']['r']+0.03; + $marge['t'] = $this->parsingCss->value['border']['t']['width'] + $this->parsingCss->value['padding']['t']+0.03; + $marge['b'] = $this->parsingCss->value['border']['b']['width'] + $this->parsingCss->value['padding']['b']+0.03; + + $x = $this->parsingCss->value['x']; + $y = $this->parsingCss->value['y']; + $w = $this->parsingCss->value['width']+$marge['l']+$marge['r']+$this->parsingCss->value['margin']['r']; + $h = $this->parsingCss->value['height']+$marge['t']+$marge['b']+$this->parsingCss->value['margin']['b']; + + switch($this->parsingCss->value['rotate']) + { + case 90: + $t = $w; $w = $h; $h = $t; + break; + + case 270: + $t = $w; $w = $h; $h = $t; + break; + + default: + break; + } + + + if ($this->parsingCss->value['position']!='absolute') { + $this->pdf->setXY($x+$w, $y); + + $this->_maxX = max($this->_maxX, $x+$w); + $this->_maxY = max($this->_maxY, $y+$h); + $this->_maxH = max($this->_maxH, $h); + } else { + $this->pdf->setXY($this->parsingCss->value['xc'], $this->parsingCss->value['yc']); + + $this->_loadMax(); + } + + $block = ($this->parsingCss->value['display']!='inline' && $this->parsingCss->value['position']!='absolute'); + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + $this->_loadMargin(); + + if ($block) $this->_tag_open_BR(array()); + if ($this->_debugActif) $this->_DEBUG_add(strtoupper($other), false); + + return true; + } + + /** + * tag : BLOCKQUOTE + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_BLOCKQUOTE($param) + { + return $this->_tag_close_DIV($param, 'blockquote'); + } + + /** + * tag : FIELDSET + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_FIELDSET($param) + { + return $this->_tag_close_DIV($param, 'fieldset'); + } + + /** + * tag : LEGEND + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_LEGEND($param) + { + return $this->_tag_close_DIV($param, 'legend'); + } + + /** + * tag : BARCODE + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_BARCODE($param) + { + // for compatibility with old versions < 3.29 + $lstBarcode = array(); + $lstBarcode['UPC_A'] = 'UPCA'; + $lstBarcode['CODE39'] = 'C39'; + + if (!isset($param['type'])) $param['type'] = 'C39'; + if (!isset($param['value'])) $param['value'] = 0; + if (!isset($param['label'])) $param['label'] = 'label'; + if (!isset($param['style']['color'])) $param['style']['color'] = '#000000'; + + if ($this->_testIsDeprecated && (isset($param['bar_h']) || isset($param['bar_w']))) + throw new HTML2PDF_exception(9, array('BARCODE', 'bar_h, bar_w')); + + $param['type'] = strtoupper($param['type']); + if (isset($lstBarcode[$param['type']])) $param['type'] = $lstBarcode[$param['type']]; + + $this->parsingCss->save(); + $this->parsingCss->analyse('barcode', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + $x = $this->pdf->getX(); + $y = $this->pdf->getY(); + $w = $this->parsingCss->value['width']; if (!$w) $w = $this->parsingCss->ConvertToMM('50mm'); + $h = $this->parsingCss->value['height']; if (!$h) $h = $this->parsingCss->ConvertToMM('10mm'); + $txt = ($param['label']!=='none' ? $this->parsingCss->value['font-size'] : false); + $c = $this->parsingCss->value['color']; + $infos = $this->pdf->myBarcode($param['value'], $param['type'], $x, $y, $w, $h, $txt, $c); + + $this->_maxX = max($this->_maxX, $x+$infos[0]); + $this->_maxY = max($this->_maxY, $y+$infos[1]); + $this->_maxH = max($this->_maxH, $infos[1]); + $this->_maxE++; + + $this->pdf->setXY($x+$infos[0], $y); + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : BARCODE + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_BARCODE($param) + { + // there is nothing to do here + + return true; + } + + /** + * tag : QRCODE + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_QRCODE($param) + { + if ($this->_testIsDeprecated && (isset($param['size']) || isset($param['noborder']))) + throw new HTML2PDF_exception(9, array('QRCODE', 'size, noborder')); + + if ($this->_debugActif) $this->_DEBUG_add('QRCODE'); + + if (!isset($param['value'])) $param['value'] = ''; + if (!isset($param['ec'])) $param['ec'] = 'H'; + if (!isset($param['style']['color'])) $param['style']['color'] = '#000000'; + if (!isset($param['style']['background-color'])) $param['style']['background-color'] = '#FFFFFF'; + if (isset($param['style']['border'])) { + $borders = $param['style']['border']!='none'; + unset($param['style']['border']); + } else { + $borders = true; + } + + if ($param['value']==='') return true; + if (!in_array($param['ec'], array('L', 'M', 'Q', 'H'))) $param['ec'] = 'H'; + + $this->parsingCss->save(); + $this->parsingCss->analyse('qrcode', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + $x = $this->pdf->getX(); + $y = $this->pdf->getY(); + $w = $this->parsingCss->value['width']; + $h = $this->parsingCss->value['height']; + $size = max($w, $h); if (!$size) $size = $this->parsingCss->ConvertToMM('50mm'); + + $style = array( + 'fgcolor' => $this->parsingCss->value['color'], + 'bgcolor' => $this->parsingCss->value['background']['color'], + ); + + if ($borders) { + $style['border'] = true; + $style['padding'] = 'auto'; + } else { + $style['border'] = false; + $style['padding'] = 0; + } + + if (!$this->_subPart && !$this->_isSubPart) { + $this->pdf->write2DBarcode($param['value'], 'QRCODE,'.$param['ec'], $x, $y, $size, $size, $style); + } + + $this->_maxX = max($this->_maxX, $x+$size); + $this->_maxY = max($this->_maxY, $y+$size); + $this->_maxH = max($this->_maxH, $size); + $this->_maxE++; + + $this->pdf->setX($x+$size); + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : QRCODE + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_QRCODE($param) + { + // there is nothing to do here + + return true; + } + + /** + * tag : BOOKMARK + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_BOOKMARK($param) + { + $titre = isset($param['title']) ? trim($param['title']) : ''; + $level = isset($param['level']) ? floor($param['level']) : 0; + + if ($level<0) $level = 0; + if ($titre) $this->pdf->Bookmark($titre, $level, -1); + + return true; + } + + /** + * tag : BOOKMARK + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_BOOKMARK($param) + { + // there is nothing to do here + + return true; + } + + /** + * this is not a real TAG, it is just to write texts + * + * @param array $param + * @return boolean + */ + protected function _tag_open_WRITE($param) + { + $fill = ($this->parsingCss->value['background']['color']!==null && $this->parsingCss->value['background']['image']===null); + if (in_array($this->parsingCss->value['id_tag'], array('fieldset', 'legend', 'div', 'table', 'tr', 'td', 'th'))) { + $fill = false; + } + + // get the text to write + $txt = $param['txt']; + + if ($this->_isAfterFloat) { + $txt = ltrim($txt); + $this->_isAfterFloat = false; + } + + $txt = str_replace('[[page_nb]]', $this->pdf->getMyAliasNbPages(), $txt); + $txt = str_replace('[[page_cu]]', $this->pdf->getMyNumPage($this->_page), $txt); + + if ($this->parsingCss->value['text-transform']!='none') { + if ($this->parsingCss->value['text-transform']=='capitalize') + $txt = ucwords($txt); + else if ($this->parsingCss->value['text-transform']=='uppercase') + $txt = strtoupper($txt); + else if ($this->parsingCss->value['text-transform']=='lowercase') + $txt = strtolower($txt); + } + + // size of the text + $h = 1.08*$this->parsingCss->value['font-size']; + $dh = $h*$this->parsingCss->value['mini-decal']; + $lh = $this->parsingCss->getLineHeight(); + + // identify the align + $align = 'L'; + if ($this->parsingCss->value['text-align']=='li_right') { + $w = $this->parsingCss->value['width']; + $align = 'R'; + } + + // calculate the width of each words, and of all the sentence + $w = 0; + $words = explode(' ', $txt); + foreach ($words as $k => $word) { + $words[$k] = array($word, $this->pdf->GetStringWidth($word)); + $w+= $words[$k][1]; + } + $space = $this->pdf->GetStringWidth(' '); + $w+= $space*(count($words)-1); + + // position in the text + $currPos = 0; + + // the bigger width of the text, after automatic break line + $maxX = 0; + + // position of the text + $x = $this->pdf->getX(); + $y = $this->pdf->getY(); + $dy = $this->_getElementY($lh); + + // margins + list($left, $right) = $this->_getMargins($y); + + // number of lines after automatic break line + $nb = 0; + + // while we have words, and the text does not fit on the line => we cut the sentence + while ($x+$w>$right && $x<$right+$space && count($words)) { + // adding words 1 by 1 to fit on the line + $i=0; + $old = array('', 0); + $str = $words[0]; + $add = false; + while (($x+$str[1])<$right) { + $i++; + $add = true; + + array_shift($words); + $old = $str; + + if (!count($words)) break; + $str[0].= ' '.$words[0][0]; + $str[1]+= $space+$words[0][1]; + } + $str = $old; + + // if nothing fit on the line, and if the first word does not fit on the line => the word is too long, we put it + if ($i==0 && (($left+$words[0][1])>=$right)) { + $str = $words[0]; + array_shift($words); + $i++; + $add = true; + } + $currPos+= ($currPos ? 1 : 0)+strlen($str[0]); + + // write the extract sentence that fit on the page + $wc = ($align=='L' ? $str[1] : $this->parsingCss->value['width']); + if ($right - $left<$wc) $wc = $right - $left; + + if (strlen($str[0])) { + $this->pdf->setXY($this->pdf->getX(), $y+$dh+$dy); + $this->pdf->Cell($wc, $h, $str[0], 0, 0, $align, $fill, $this->_isInLink); + $this->pdf->setXY($this->pdf->getX(), $y); + } + $this->_maxH = max($this->_maxH, $lh); + + // max width + $maxX = max($maxX, $this->pdf->getX()); + + // new position and new width for the "while" + $w-= $str[1]; + $y = $this->pdf->getY(); + $x = $this->pdf->getX(); + $dy = $this->_getElementY($lh); + + // if we have again words to write + if (count($words)) { + // remove the space at the end + if ($add) $w-= $space; + + // if we don't add any word, and if the first word is empty => useless space to skip + if (!$add && $words[0][0]==='') { + array_shift($words); + } + + // if it is just to calculate for one line => adding the number of words + if ($this->_isForOneLine) { + $this->_maxE+= $i; + $this->_maxX = max($this->_maxX, $maxX); + return null; + } + + // automatic line break + $this->_tag_open_BR(array('style' => ''), $currPos); + + // new position + $y = $this->pdf->getY(); + $x = $this->pdf->getX(); + $dy = $this->_getElementY($lh); + + // if the next line does not fit on the page => new page + if ($y + $h>=$this->pdf->getH() - $this->pdf->getbMargin()) { + if (!$this->_isInOverflow && !$this->_isInFooter) { + $this->_setNewPage(null, '', null, $currPos); + $y = $this->pdf->getY(); + $x = $this->pdf->getX(); + $dy = $this->_getElementY($lh); + } + } + + // if more than 10000 line => error + $nb++; + if ($nb>10000) { + $txt = ''; foreach ($words as $k => $word) $txt.= ($k ? ' ' : '').$word[0]; + throw new HTML2PDF_exception(2, array($txt, $right-$left, $w)); + } + + // new margins for the new line + list($left, $right) = $this->_getMargins($y); + } + } + + // if we have words after automatic cut, it is because they fit on the line => we write the text + if (count($words)) { + $txt = ''; foreach ($words as $k => $word) $txt.= ($k ? ' ' : '').$word[0]; + $w+= $this->pdf->getWordSpacing()*(count($words)); + $this->pdf->setXY($this->pdf->getX(), $y+$dh+$dy); + $this->pdf->Cell(($align=='L' ? $w : $this->parsingCss->value['width']), $h, $txt, 0, 0, $align, $fill, $this->_isInLink); + $this->pdf->setXY($this->pdf->getX(), $y); + $this->_maxH = max($this->_maxH, $lh); + $this->_maxE+= count($words); + } + + $maxX = max($maxX, $this->pdf->getX()); + $maxY = $this->pdf->getY()+$h; + + $this->_maxX = max($this->_maxX, $maxX); + $this->_maxY = max($this->_maxY, $maxY); + + return true; + } + + /** + * tag : BR + * mode : OPEN + * + * @param array $param + * @param integer $curr real position in the html parseur (if break line in the write of a text) + * @return boolean + */ + protected function _tag_open_BR($param, $curr = null) + { + if ($this->_isForOneLine) return false; + + $h = max($this->_maxH, $this->parsingCss->getLineHeight()); + + if ($this->_maxH==0) $this->_maxY = max($this->_maxY, $this->pdf->getY()+$h); + + $this->_makeBreakLine($h, $curr); + + $this->_maxH = 0; + $this->_maxE = 0; + + return true; + } + + /** + * tag : HR + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_HR($param) + { + if ($this->_isForOneLine) return false; + $oldAlign = $this->parsingCss->value['text-align']; + $this->parsingCss->value['text-align'] = 'left'; + + if ($this->_maxH) $this->_tag_open_BR($param); + + $fontSize = $this->parsingCss->value['font-size']; + $this->parsingCss->value['font-size']=$fontSize*0.5; $this->_tag_open_BR($param); + $this->parsingCss->value['font-size']=0; + + $param['style']['width'] = '100%'; + + $this->parsingCss->save(); + $this->parsingCss->value['height']=$this->parsingCss->ConvertToMM('1mm'); + + $this->parsingCss->analyse('hr', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + $h = $this->parsingCss->value['height']; + if ($h) $h-= $this->parsingCss->value['border']['t']['width']+$this->parsingCss->value['border']['b']['width']; + if ($h<=0) $h = $this->parsingCss->value['border']['t']['width']+$this->parsingCss->value['border']['b']['width']; + + $this->_drawRectangle($this->pdf->getX(), $this->pdf->getY(), $this->parsingCss->value['width'], $h, $this->parsingCss->value['border'], 0, 0, $this->parsingCss->value['background']); + $this->_maxH = $h; + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + $this->_tag_open_BR($param); + + $this->parsingCss->value['font-size']=$fontSize*0.5; $this->_tag_open_BR($param); + $this->parsingCss->value['font-size']=$fontSize; + + $this->parsingCss->value['text-align'] = $oldAlign; + $this->_setNewPositionForNewLine(); + + return true; + } + + /** + * tag : B + * mode : OPEN + * + * @param array $param + * @param string $other + * @return boolean + */ + protected function _tag_open_B($param, $other = 'b') + { + $this->parsingCss->save(); + $this->parsingCss->value['font-bold'] = true; + $this->parsingCss->analyse($other, $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : STRONG + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_STRONG($param) + { + return $this->_tag_open_B($param, 'strong'); + } + + /** + * tag : B + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_B($param) + { + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : STRONG + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_STRONG($param) + { + return $this->_tag_close_B($param); + } + + /** + * tag : I + * mode : OPEN + * + * @param array $param + * @param string $other + * @return boolean + */ + protected function _tag_open_I($param, $other = 'i') + { + $this->parsingCss->save(); + $this->parsingCss->value['font-italic'] = true; + $this->parsingCss->analyse($other, $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : ADDRESS + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_ADDRESS($param) + { + return $this->_tag_open_I($param, 'address'); + } + + /** + * tag : CITE + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_CITE($param) + { + return $this->_tag_open_I($param, 'cite'); + } + + /** + * tag : EM + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_EM($param) + { + return $this->_tag_open_I($param, 'em'); + } + + /** + * tag : SAMP + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_SAMP($param) + { + return $this->_tag_open_I($param, 'samp'); + } + + /** + * tag : I + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_I($param) + { + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : ADDRESS + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_ADDRESS($param) + { + return $this->_tag_close_I($param); + } + + /** + * tag : CITE + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_CITE($param) + { + return $this->_tag_close_I($param); + } + + /** + * tag : EM + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_EM($param) + { + return $this->_tag_close_I($param); + } + + /** + * tag : SAMP + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_SAMP($param) + { + return $this->_tag_close_I($param); + } + + /** + * tag : S + * mode : OPEN + * + * @param array $param + * @param string $other + * @return boolean + */ + protected function _tag_open_S($param, $other = 's') + { + $this->parsingCss->save(); + $this->parsingCss->value['font-linethrough'] = true; + $this->parsingCss->analyse($other, $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : DEL + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_DEL($param) + { + return $this->_tag_open_S($param, 'del'); + } + + /** + * tag : S + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_S($param) + { + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : DEL + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_DEL($param) + { + return $this->_tag_close_S($param); + } + + /** + * tag : U + * mode : OPEN + * + * @param array $param + * @param string $other + * @return boolean + */ + protected function _tag_open_U($param, $other='u') + { + $this->parsingCss->save(); + $this->parsingCss->value['font-underline'] = true; + $this->parsingCss->analyse($other, $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : INS + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_INS($param) + { + return $this->_tag_open_U($param, 'ins'); + } + + /** + * tag : U + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_U($param) + { + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : INS + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_INS($param) + { + return $this->_tag_close_U($param); + } + + /** + * tag : A + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_A($param) + { + $this->_isInLink = str_replace('&', '&', isset($param['href']) ? $param['href'] : ''); + + if (isset($param['name'])) { + $name = $param['name']; + if (!isset($this->_lstAnchor[$name])) $this->_lstAnchor[$name] = array($this->pdf->AddLink(), false); + + if (!$this->_lstAnchor[$name][1]) { + $this->_lstAnchor[$name][1] = true; + $this->pdf->SetLink($this->_lstAnchor[$name][0], -1, -1); + } + } + + if (preg_match('/^#([^#]+)$/isU', $this->_isInLink, $match)) { + $name = $match[1]; + if (!isset($this->_lstAnchor[$name])) $this->_lstAnchor[$name] = array($this->pdf->AddLink(), false); + + $this->_isInLink = $this->_lstAnchor[$name][0]; + } + + $this->parsingCss->save(); + $this->parsingCss->value['font-underline'] = true; + $this->parsingCss->value['color'] = array(20, 20, 250); + $this->parsingCss->analyse('a', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : A + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_A($param) + { + $this->_isInLink = ''; + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : H1 + * mode : OPEN + * + * @param array $param + * @param string $other + * @return boolean + */ + protected function _tag_open_H1($param, $other = 'h1') + { + if ($this->_isForOneLine) return false; + + if ($this->_maxH) $this->_tag_open_BR(array()); + $this->parsingCss->save(); + $this->parsingCss->value['font-bold'] = true; + + $size = array('h1' => '28px', 'h2' => '24px', 'h3' => '20px', 'h4' => '16px', 'h5' => '12px', 'h6' => '9px'); + $this->parsingCss->value['margin']['l'] = 0; + $this->parsingCss->value['margin']['r'] = 0; + $this->parsingCss->value['margin']['t'] = $this->parsingCss->ConvertToMM('16px'); + $this->parsingCss->value['margin']['b'] = $this->parsingCss->ConvertToMM('16px'); + $this->parsingCss->value['font-size'] = $this->parsingCss->ConvertToMM($size[$other]); + + $this->parsingCss->analyse($other, $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + $this->_setNewPositionForNewLine(); + + return true; + } + + /** + * tag : H2 + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_H2($param) + { + return $this->_tag_open_H1($param, 'h2'); + } + + /** + * tag : H3 + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_H3($param) + { + return $this->_tag_open_H1($param, 'h3'); + } + + /** + * tag : H4 + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_H4($param) + { + return $this->_tag_open_H1($param, 'h4'); + } + + /** + * tag : H5 + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_H5($param) + { + return $this->_tag_open_H1($param, 'h5'); + } + + /** + * tag : H6 + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_H6($param) + { + return $this->_tag_open_H1($param, 'h6'); + } + + /** + * tag : H1 + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_H1($param) + { + if ($this->_isForOneLine) return false; + + $this->_maxH+= $this->parsingCss->value['margin']['b']; + $h = max($this->_maxH, $this->parsingCss->getLineHeight()); + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + $this->_makeBreakLine($h); + $this->_maxH = 0; + + $this->_maxY = max($this->_maxY, $this->pdf->getY()); + + return true; + } + + /** + * tag : H2 + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_H2($param) + { + return $this->_tag_close_H1($param); + } + + /** + * tag : H3 + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_H3($param) + { + return $this->_tag_close_H1($param); + } + + /** + * tag : H4 + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_H4($param) + { + return $this->_tag_close_H1($param); + } + + /** + * tag : H5 + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_H5($param) + { + return $this->_tag_close_H1($param); + } + + /** + * tag : H6 + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_H6($param) + { + return $this->_tag_close_H1($param); + } + + /** + * tag : SPAN + * mode : OPEN + * + * @param array $param + * @param string $other + * @return boolean + */ + protected function _tag_open_SPAN($param, $other = 'span') + { + $this->parsingCss->save(); + $this->parsingCss->analyse($other, $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : FONT + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_FONT($param) + { + return $this->_tag_open_SPAN($param, 'font'); + } + + /** + * tag : LABEL + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_LABEL($param) + { + return $this->_tag_open_SPAN($param, 'label'); + } + + /** + * tag : SPAN + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_SPAN($param) + { + $this->parsingCss->restorePosition(); + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : FONT + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_FONT($param) + { + return $this->_tag_close_SPAN($param); + } + + /** + * tag : LABEL + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_LABEL($param) + { + return $this->_tag_close_SPAN($param); + } + + /** + * tag : P + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_P($param) + { + if ($this->_isForOneLine) return false; + + if (!in_array($this->_previousCall, array('_tag_close_P', '_tag_close_UL'))) { + if ($this->_maxH) $this->_tag_open_BR(array()); + } + + $this->parsingCss->save(); + $this->parsingCss->analyse('p', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + // cancel the effects of the setPosition + $this->pdf->setXY($this->pdf->getX()-$this->parsingCss->value['margin']['l'], $this->pdf->getY()-$this->parsingCss->value['margin']['t']); + + list($mL, $mR) = $this->_getMargins($this->pdf->getY()); + $mR = $this->pdf->getW()-$mR; + $mL+= $this->parsingCss->value['margin']['l']+$this->parsingCss->value['padding']['l']; + $mR+= $this->parsingCss->value['margin']['r']+$this->parsingCss->value['padding']['r']; + $this->_saveMargin($mL, 0, $mR); + + if ($this->parsingCss->value['text-indent']>0) { + $y = $this->pdf->getY()+$this->parsingCss->value['margin']['t']+$this->parsingCss->value['padding']['t']; + $this->_pageMarges[floor($y*100)] = array($mL+$this->parsingCss->value['text-indent'], $this->pdf->getW()-$mR); + $y+= $this->parsingCss->getLineHeight()*0.1; + $this->_pageMarges[floor($y*100)] = array($mL, $this->pdf->getW()-$mR); + } + $this->_makeBreakLine($this->parsingCss->value['margin']['t']+$this->parsingCss->value['padding']['t']); + $this->_isInParagraph = array($mL, $mR); + return true; + } + + /** + * tag : P + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_P($param) + { + if ($this->_isForOneLine) return false; + + if ($this->_maxH) $this->_tag_open_BR(array()); + $this->_isInParagraph = false; + $this->_loadMargin(); + $h = $this->parsingCss->value['margin']['b']+$this->parsingCss->value['padding']['b']; + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + $this->_makeBreakLine($h); + + return true; + } + + /** + * tag : PRE + * mode : OPEN + * + * @param array $param + * @param string $other + * @return boolean + */ + protected function _tag_open_PRE($param, $other = 'pre') + { + if ($other=='pre' && $this->_maxH) $this->_tag_open_BR(array()); + + $this->parsingCss->save(); + $this->parsingCss->value['font-family'] = 'courier'; + $this->parsingCss->analyse($other, $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + if ($other=='pre') return $this->_tag_open_DIV($param, $other); + + return true; + } + + /** + * tag : CODE + * mode : OPEN + * + * @param array $param + * @param string $other + * @return boolean + */ + protected function _tag_open_CODE($param) + { + return $this->_tag_open_PRE($param, 'code'); + } + + /** + * tag : PRE + * mode : CLOSE + * + * @param array $param + * @param string $other + * @return boolean + */ + protected function _tag_close_PRE($param, $other = 'pre') + { + if ($other=='pre') { + if ($this->_isForOneLine) return false; + + $this->_tag_close_DIV($param, $other); + $this->_tag_open_BR(array()); + } + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : CODE + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_CODE($param) + { + return $this->_tag_close_PRE($param, 'code'); + } + + /** + * tag : BIG + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_BIG($param) + { + $this->parsingCss->save(); + $this->parsingCss->value['mini-decal']-= $this->parsingCss->value['mini-size']*0.12; + $this->parsingCss->value['mini-size'] *= 1.2; + $this->parsingCss->analyse('big', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + return true; + } + + /** + * tag : BIG + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_BIG($param) + { + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : SMALL + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_SMALL($param) + { + $this->parsingCss->save(); + $this->parsingCss->value['mini-decal']+= $this->parsingCss->value['mini-size']*0.05; + $this->parsingCss->value['mini-size'] *= 0.82; + $this->parsingCss->analyse('small', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + return true; + } + + /** + * tag : SMALL + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_SMALL($param) + { + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : SUP + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_SUP($param) + { + $this->parsingCss->save(); + $this->parsingCss->value['mini-decal']-= $this->parsingCss->value['mini-size']*0.15; + $this->parsingCss->value['mini-size'] *= 0.75; + $this->parsingCss->analyse('sup', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : SUP + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_SUP($param) + { + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : SUB + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_SUB($param) + { + $this->parsingCss->save(); + $this->parsingCss->value['mini-decal']+= $this->parsingCss->value['mini-size']*0.15; + $this->parsingCss->value['mini-size'] *= 0.75; + $this->parsingCss->analyse('sub', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + return true; + } + + /** + * tag : SUB + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_SUB($param) + { + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : UL + * mode : OPEN + * + * @param array $param + * @param string $other + * @return boolean + */ + protected function _tag_open_UL($param, $other = 'ul') + { + if ($this->_isForOneLine) return false; + + if (!in_array($this->_previousCall, array('_tag_close_P', '_tag_close_UL'))) { + if ($this->_maxH) $this->_tag_open_BR(array()); + if (!count($this->_defList)) $this->_tag_open_BR(array()); + } + + if (!isset($param['style']['width'])) $param['allwidth'] = true; + $param['cellspacing'] = 0; + + // a list is like a table + $this->_tag_open_TABLE($param, $other); + + // add a level of list + $this->_listeAddLevel($other, $this->parsingCss->value['list-style-type'], $this->parsingCss->value['list-style-image']); + + return true; + } + + /** + * tag : OL + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_OL($param) + { + return $this->_tag_open_UL($param, 'ol'); + } + + /** + * tag : UL + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_UL($param) + { + if ($this->_isForOneLine) return false; + + $this->_tag_close_TABLE($param); + + $this->_listeDelLevel(); + + if (!$this->_subPart) { + if (!count($this->_defList)) $this->_tag_open_BR(array()); + } + + return true; + } + + /** + * tag : OL + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_OL($param) + { + return $this->_tag_close_UL($param); + } + + /** + * tag : LI + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_LI($param) + { + if ($this->_isForOneLine) return false; + + $this->_listeAddLi(); + + if (!isset($param['style']['width'])) $param['style']['width'] = '100%'; + + $paramPUCE = $param; + + $inf = $this->_listeGetLi(); + if ($inf[0]) { + $paramPUCE['style']['font-family'] = $inf[0]; + $paramPUCE['style']['text-align'] = 'li_right'; + $paramPUCE['style']['vertical-align'] = 'top'; + $paramPUCE['style']['width'] = $this->_listeGetWidth(); + $paramPUCE['style']['padding-right'] = $this->_listeGetPadding(); + $paramPUCE['txt'] = $inf[2]; + } else { + $paramPUCE['style']['text-align'] = 'li_right'; + $paramPUCE['style']['vertical-align'] = 'top'; + $paramPUCE['style']['width'] = $this->_listeGetWidth(); + $paramPUCE['style']['padding-right'] = $this->_listeGetPadding(); + $paramPUCE['src'] = $inf[2]; + $paramPUCE['sub_li'] = true; + } + + $this->_tag_open_TR($param, 'li'); + + $this->parsingCss->save(); + + // if small LI + if ($inf[1]) { + $this->parsingCss->value['mini-decal']+= $this->parsingCss->value['mini-size']*0.045; + $this->parsingCss->value['mini-size'] *= 0.75; + } + + // if we are in a sub html => prepare. Else : display + if ($this->_subPart) { + // TD for the puce + $tmpPos = $this->_tempPos; + $tmpLst1 = $this->parsingHtml->code[$tmpPos+1]; + $tmpLst2 = $this->parsingHtml->code[$tmpPos+2]; + $this->parsingHtml->code[$tmpPos+1] = array(); + $this->parsingHtml->code[$tmpPos+1]['name'] = (isset($paramPUCE['src'])) ? 'img' : 'write'; + $this->parsingHtml->code[$tmpPos+1]['param'] = $paramPUCE; unset($this->parsingHtml->code[$tmpPos+1]['param']['style']['width']); + $this->parsingHtml->code[$tmpPos+1]['close'] = 0; + $this->parsingHtml->code[$tmpPos+2] = array(); + $this->parsingHtml->code[$tmpPos+2]['name'] = 'li'; + $this->parsingHtml->code[$tmpPos+2]['param'] = $paramPUCE; + $this->parsingHtml->code[$tmpPos+2]['close'] = 1; + $this->_tag_open_TD($paramPUCE, 'li_sub'); + $this->_tag_close_TD($param); + $this->_tempPos = $tmpPos; + $this->parsingHtml->code[$tmpPos+1] = $tmpLst1; + $this->parsingHtml->code[$tmpPos+2] = $tmpLst2; + } else { + // TD for the puce + $this->_tag_open_TD($paramPUCE, 'li_sub'); + unset($paramPUCE['style']['width']); + if (isset($paramPUCE['src'])) $this->_tag_open_IMG($paramPUCE); + else $this->_tag_open_WRITE($paramPUCE); + $this->_tag_close_TD($paramPUCE); + } + $this->parsingCss->load(); + + + // TD for the content + $this->_tag_open_TD($param, 'li'); + + return true; + } + + /** + * tag : LI + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_LI($param) + { + if ($this->_isForOneLine) return false; + + $this->_tag_close_TD($param); + + $this->_tag_close_TR($param); + + return true; + } + + /** + * tag : TBODY + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_TBODY($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->save(); + $this->parsingCss->analyse('tbody', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : TBODY + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_TBODY($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : THEAD + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_THEAD($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->save(); + $this->parsingCss->analyse('thead', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + // if we are in a sub part, save the number of the first TR in the thead + if ($this->_subPart) { + HTML2PDF::$_tables[$param['num']]['thead']['tr'][0] = HTML2PDF::$_tables[$param['num']]['tr_curr']; + HTML2PDF::$_tables[$param['num']]['thead']['code'] = array(); + for ($pos=$this->_tempPos; $posparsingHtml->code); $pos++) { + $action = $this->parsingHtml->code[$pos]; + if (strtolower($action['name'])=='thead') $action['name'] = 'thead_sub'; + HTML2PDF::$_tables[$param['num']]['thead']['code'][] = $action; + if (strtolower($action['name'])=='thead_sub' && $action['close']) break; + } + } else { + $level = $this->parsingHtml->getLevel($this->_parsePos); + $this->_parsePos+= count($level); + HTML2PDF::$_tables[$param['num']]['tr_curr']+= count(HTML2PDF::$_tables[$param['num']]['thead']['tr']); + } + + return true; + } + + /** + * tag : THEAD + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_THEAD($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + // if we are in a sub HTM, construct the list of the TR in the thead + if ($this->_subPart) { + $min = HTML2PDF::$_tables[$param['num']]['thead']['tr'][0]; + $max = HTML2PDF::$_tables[$param['num']]['tr_curr']-1; + HTML2PDF::$_tables[$param['num']]['thead']['tr'] = range($min, $max); + } + + return true; + } + + /** + * tag : TFOOT + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_TFOOT($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->save(); + $this->parsingCss->analyse('tfoot', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + // if we are in a sub part, save the number of the first TR in the tfoot + if ($this->_subPart) { + HTML2PDF::$_tables[$param['num']]['tfoot']['tr'][0] = HTML2PDF::$_tables[$param['num']]['tr_curr']; + HTML2PDF::$_tables[$param['num']]['tfoot']['code'] = array(); + for ($pos=$this->_tempPos; $posparsingHtml->code); $pos++) { + $action = $this->parsingHtml->code[$pos]; + if (strtolower($action['name'])=='tfoot') $action['name'] = 'tfoot_sub'; + HTML2PDF::$_tables[$param['num']]['tfoot']['code'][] = $action; + if (strtolower($action['name'])=='tfoot_sub' && $action['close']) break; + } + } else { + $level = $this->parsingHtml->getLevel($this->_parsePos); + $this->_parsePos+= count($level); + HTML2PDF::$_tables[$param['num']]['tr_curr']+= count(HTML2PDF::$_tables[$param['num']]['tfoot']['tr']); + } + + return true; + } + + /** + * tag : TFOOT + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_TFOOT($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + // if we are in a sub HTM, construct the list of the TR in the tfoot + if ($this->_subPart) { + $min = HTML2PDF::$_tables[$param['num']]['tfoot']['tr'][0]; + $max = HTML2PDF::$_tables[$param['num']]['tr_curr']-1; + HTML2PDF::$_tables[$param['num']]['tfoot']['tr'] = range($min, $max); + } + + return true; + } + + /** + * It is not a real TAG, does not use it ! + * + * @param array $param + * @return boolean + */ + protected function _tag_open_THEAD_SUB($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->save(); + $this->parsingCss->analyse('thead', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * It is not a real TAG, does not use it ! + * + * @param array $param + * @return boolean + */ + protected function _tag_close_THEAD_SUB($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * It is not a real TAG, does not use it ! + * + * @param array $param + * @return boolean + */ + protected function _tag_open_TFOOT_SUB($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->save(); + $this->parsingCss->analyse('tfoot', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * It is not a real TAG, does not use it ! + * + * @param array $param + * @return boolean + */ + protected function _tag_close_TFOOT_SUB($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : FORM + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_FORM($param) + { + $this->parsingCss->save(); + $this->parsingCss->analyse('form', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + $this->pdf->setFormDefaultProp( + array( + 'lineWidth'=>1, + 'borderStyle'=>'solid', + 'fillColor'=>array(220, 220, 255), + 'strokeColor'=>array(128, 128, 200) + ) + ); + + $this->_isInForm = isset($param['action']) ? $param['action'] : ''; + + return true; + } + + /** + * tag : FORM + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_FORM($param) + { + $this->_isInForm = false; + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : TABLE + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_TABLE($param, $other = 'table') + { + if ($this->_maxH) { + if ($this->_isForOneLine) return false; + $this->_tag_open_BR(array()); + } + + if ($this->_isForOneLine) { + $this->_maxX = $this->pdf->getW() - $this->pdf->getlMargin() - $this->pdf->getrMargin(); + return false; + } + + $this->_maxH = 0; + + $alignObject = isset($param['align']) ? strtolower($param['align']) : 'left'; + if (isset($param['align'])) unset($param['align']); + if (!in_array($alignObject, array('left', 'center', 'right'))) $alignObject = 'left'; + + $this->parsingCss->save(); + $this->parsingCss->analyse($other, $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + if ($this->parsingCss->value['margin-auto']) $alignObject = 'center'; + + // collapse table ? + $collapse = false; + if ($other=='table') { + $collapse = isset($this->parsingCss->value['border']['collapse']) ? $this->parsingCss->value['border']['collapse'] : false; + } + + // if collapse => no borders for the table, only for TD + if ($collapse) { + $param['style']['border'] = 'none'; + $param['cellspacing'] = 0; + $none = $this->parsingCss->readBorder('none'); + $this->parsingCss->value['border']['t'] = $none; + $this->parsingCss->value['border']['r'] = $none; + $this->parsingCss->value['border']['b'] = $none; + $this->parsingCss->value['border']['l'] = $none; + } + + // if we are in a SUB html => prepare the properties of the table + if ($this->_subPart) { + if ($this->_debugActif) $this->_DEBUG_add('Table n'.$param['num'], true); + HTML2PDF::$_tables[$param['num']] = array(); + HTML2PDF::$_tables[$param['num']]['border'] = isset($param['border']) ? $this->parsingCss->readBorder($param['border']) : null; + HTML2PDF::$_tables[$param['num']]['cellpadding'] = $this->parsingCss->ConvertToMM(isset($param['cellpadding']) ? $param['cellpadding'] : '1px'); + HTML2PDF::$_tables[$param['num']]['cellspacing'] = $this->parsingCss->ConvertToMM(isset($param['cellspacing']) ? $param['cellspacing'] : '2px'); + HTML2PDF::$_tables[$param['num']]['cases'] = array(); // properties of each TR/TD + HTML2PDF::$_tables[$param['num']]['corr'] = array(); // link between TR/TD and colspan/rowspan + HTML2PDF::$_tables[$param['num']]['corr_x'] = 0; // position in 'cases' + HTML2PDF::$_tables[$param['num']]['corr_y'] = 0; // position in 'cases' + HTML2PDF::$_tables[$param['num']]['td_curr'] = 0; // current column + HTML2PDF::$_tables[$param['num']]['tr_curr'] = 0; // current row + HTML2PDF::$_tables[$param['num']]['curr_x'] = $this->pdf->getX(); + HTML2PDF::$_tables[$param['num']]['curr_y'] = $this->pdf->getY(); + HTML2PDF::$_tables[$param['num']]['width'] = 0; // global width + HTML2PDF::$_tables[$param['num']]['height'] = 0; // global height + HTML2PDF::$_tables[$param['num']]['align'] = $alignObject; + HTML2PDF::$_tables[$param['num']]['marge'] = array(); + HTML2PDF::$_tables[$param['num']]['marge']['t'] = $this->parsingCss->value['padding']['t']+$this->parsingCss->value['border']['t']['width']+HTML2PDF::$_tables[$param['num']]['cellspacing']*0.5; + HTML2PDF::$_tables[$param['num']]['marge']['r'] = $this->parsingCss->value['padding']['r']+$this->parsingCss->value['border']['r']['width']+HTML2PDF::$_tables[$param['num']]['cellspacing']*0.5; + HTML2PDF::$_tables[$param['num']]['marge']['b'] = $this->parsingCss->value['padding']['b']+$this->parsingCss->value['border']['b']['width']+HTML2PDF::$_tables[$param['num']]['cellspacing']*0.5; + HTML2PDF::$_tables[$param['num']]['marge']['l'] = $this->parsingCss->value['padding']['l']+$this->parsingCss->value['border']['l']['width']+HTML2PDF::$_tables[$param['num']]['cellspacing']*0.5; + HTML2PDF::$_tables[$param['num']]['page'] = 0; // number of pages + HTML2PDF::$_tables[$param['num']]['new_page'] = true; // flag : new page for the current TR + HTML2PDF::$_tables[$param['num']]['style_value'] = null; // CSS style of the table + HTML2PDF::$_tables[$param['num']]['thead'] = array(); // properties on the thead + HTML2PDF::$_tables[$param['num']]['tfoot'] = array(); // properties on the tfoot + HTML2PDF::$_tables[$param['num']]['thead']['tr'] = array(); // list of the TRs in the thead + HTML2PDF::$_tables[$param['num']]['tfoot']['tr'] = array(); // list of the TRs in the tfoot + HTML2PDF::$_tables[$param['num']]['thead']['height'] = 0; // thead height + HTML2PDF::$_tables[$param['num']]['tfoot']['height'] = 0; // tfoot height + HTML2PDF::$_tables[$param['num']]['thead']['code'] = array(); // HTML content of the thead + HTML2PDF::$_tables[$param['num']]['tfoot']['code'] = array(); // HTML content of the tfoot + HTML2PDF::$_tables[$param['num']]['cols'] = array(); // properties of the COLs + + $this->_saveMargin($this->pdf->getlMargin(), $this->pdf->gettMargin(), $this->pdf->getrMargin()); + + $this->parsingCss->value['width']-= HTML2PDF::$_tables[$param['num']]['marge']['l'] + HTML2PDF::$_tables[$param['num']]['marge']['r']; + } else { + // we start from the first page and the first page of the table + HTML2PDF::$_tables[$param['num']]['page'] = 0; + HTML2PDF::$_tables[$param['num']]['td_curr'] = 0; + HTML2PDF::$_tables[$param['num']]['tr_curr'] = 0; + HTML2PDF::$_tables[$param['num']]['td_x'] = HTML2PDF::$_tables[$param['num']]['marge']['l']+HTML2PDF::$_tables[$param['num']]['curr_x']; + HTML2PDF::$_tables[$param['num']]['td_y'] = HTML2PDF::$_tables[$param['num']]['marge']['t']+HTML2PDF::$_tables[$param['num']]['curr_y']; + + // draw the borders/background of the first page/part of the table + $this->_drawRectangle( + HTML2PDF::$_tables[$param['num']]['curr_x'], + HTML2PDF::$_tables[$param['num']]['curr_y'], + HTML2PDF::$_tables[$param['num']]['width'], + isset(HTML2PDF::$_tables[$param['num']]['height'][0]) ? HTML2PDF::$_tables[$param['num']]['height'][0] : null, + $this->parsingCss->value['border'], + $this->parsingCss->value['padding'], + 0, + $this->parsingCss->value['background'] + ); + + HTML2PDF::$_tables[$param['num']]['style_value'] = $this->parsingCss->value; + } + + return true; + } + + /** + * tag : TABLE + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_TABLE($param) + { + if ($this->_isForOneLine) return false; + + $this->_maxH = 0; + + // if we are in a sub HTML + if ($this->_subPart) { + // calculate the size of each case + $this->_calculateTableCellSize(HTML2PDF::$_tables[$param['num']]['cases'], HTML2PDF::$_tables[$param['num']]['corr']); + + // calculate the height of the thead and the tfoot + $lst = array('thead', 'tfoot'); + foreach ($lst as $mode) { + HTML2PDF::$_tables[$param['num']][$mode]['height'] = 0; + foreach (HTML2PDF::$_tables[$param['num']][$mode]['tr'] as $tr) { + // hauteur de la ligne tr + $h = 0; + for ($i=0; $iparsingCss->getOldValues(); + $parentWidth = $old['width'] ? $old['width'] : $this->pdf->getW() - $this->pdf->getlMargin() - $this->pdf->getrMargin(); + $x = HTML2PDF::$_tables[$param['num']]['curr_x']; + $w = HTML2PDF::$_tables[$param['num']]['width']; + if ($parentWidth>$w) { + if (HTML2PDF::$_tables[$param['num']]['align']=='center') + $x = $x + ($parentWidth-$w)*0.5; + else if (HTML2PDF::$_tables[$param['num']]['align']=='right') + $x = $x + $parentWidth-$w; + + HTML2PDF::$_tables[$param['num']]['curr_x'] = $x; + } + + // calculate the height of the table + HTML2PDF::$_tables[$param['num']]['height'] = array(); + + // minimum of the height because of margins, and of the thead and tfoot height + $h0 = HTML2PDF::$_tables[$param['num']]['marge']['t'] + HTML2PDF::$_tables[$param['num']]['marge']['b']; + $h0+= HTML2PDF::$_tables[$param['num']]['thead']['height'] + HTML2PDF::$_tables[$param['num']]['tfoot']['height']; + + // max height of the page + $max = $this->pdf->getH() - $this->pdf->getbMargin(); + + // current position on the page + $y = HTML2PDF::$_tables[$param['num']]['curr_y']; + $height = $h0; + + // we get the height of each line + for ($k=0; $k skip + if (in_array($k, HTML2PDF::$_tables[$param['num']]['thead']['tr'])) continue; + if (in_array($k, HTML2PDF::$_tables[$param['num']]['tfoot']['tr'])) continue; + + // height of the line + $th = 0; + $h = 0; + for ($i=0; $i new page + if ($y+$h+$height>$max) { + if ($height==$h0) $height = null; + HTML2PDF::$_tables[$param['num']]['height'][] = $height; + $height = $h0; + $y = $this->_margeTop; + } + $height+= $th; + } + + // if ther is a height at the end, add it + if ($height!=$h0 || $k==0) HTML2PDF::$_tables[$param['num']]['height'][] = $height; + } else { + // if we have tfoor, draw it + if (count(HTML2PDF::$_tables[$param['num']]['tfoot']['code'])) { + $tmpTR = HTML2PDF::$_tables[$param['num']]['tr_curr']; + $tmpTD = HTML2PDF::$_tables[$param['num']]['td_curr']; + $oldParsePos = $this->_parsePos; + $oldParseCode = $this->parsingHtml->code; + + HTML2PDF::$_tables[$param['num']]['tr_curr'] = HTML2PDF::$_tables[$param['num']]['tfoot']['tr'][0]; + HTML2PDF::$_tables[$param['num']]['td_curr'] = 0; + $this->_parsePos = 0; + $this->parsingHtml->code = HTML2PDF::$_tables[$param['num']]['tfoot']['code']; + $this->_isInTfoot = true; + $this->_makeHTMLcode(); + $this->_isInTfoot = false; + + $this->_parsePos = $oldParsePos; + $this->parsingHtml->code = $oldParseCode; + HTML2PDF::$_tables[$param['num']]['tr_curr'] = $tmpTR; + HTML2PDF::$_tables[$param['num']]['td_curr'] = $tmpTD; + } + + // get the positions of the end of the table + $x = HTML2PDF::$_tables[$param['num']]['curr_x'] + HTML2PDF::$_tables[$param['num']]['width']; + if (count(HTML2PDF::$_tables[$param['num']]['height'])>1) + $y = $this->_margeTop+HTML2PDF::$_tables[$param['num']]['height'][count(HTML2PDF::$_tables[$param['num']]['height'])-1]; + else if (count(HTML2PDF::$_tables[$param['num']]['height'])==1) + $y = HTML2PDF::$_tables[$param['num']]['curr_y']+HTML2PDF::$_tables[$param['num']]['height'][count(HTML2PDF::$_tables[$param['num']]['height'])-1]; + else + $y = HTML2PDF::$_tables[$param['num']]['curr_y']; + + $this->_maxX = max($this->_maxX, $x); + $this->_maxY = max($this->_maxY, $y); + + $this->pdf->setXY($this->pdf->getlMargin(), $y); + + $this->_loadMargin(); + + if ($this->_debugActif) $this->_DEBUG_add('Table '.$param['num'], false); + } + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + + return true; + } + + /** + * tag : COL + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_COL($param) + { + $span = isset($param['span']) ? $param['span'] : 1; + for ($k=0; $k<$span; $k++) + HTML2PDF::$_tables[$param['num']]['cols'][] = $param; + } + + /** + * tag : COL + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_COL($param) + { + // there is nothing to do here + + return true; + } + + /** + * tag : TR + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_TR($param, $other = 'tr') + { + if ($this->_isForOneLine) return false; + + $this->_maxH = 0; + + $this->parsingCss->save(); + $this->parsingCss->analyse($other, $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + // position in the table + HTML2PDF::$_tables[$param['num']]['tr_curr']++; + HTML2PDF::$_tables[$param['num']]['td_curr']= 0; + + // if we are not in a sub html + if (!$this->_subPart) { + + // Y after the row + $ty=null; + for ($ii=0; $ii new page + if (!$this->_isInTfoot && HTML2PDF::$_tables[$param['num']]['td_y'] + HTML2PDF::$_tables[$param['num']]['marge']['b'] + $ty +$hfoot> $this->pdf->getH() - $this->pdf->getbMargin()) { + + // fi ther is a tfoot => draw it + if (count(HTML2PDF::$_tables[$param['num']]['tfoot']['code'])) { + $tmpTR = HTML2PDF::$_tables[$param['num']]['tr_curr']; + $tmpTD = HTML2PDF::$_tables[$param['num']]['td_curr']; + $oldParsePos = $this->_parsePos; + $oldParseCode = $this->parsingHtml->code; + + HTML2PDF::$_tables[$param['num']]['tr_curr'] = HTML2PDF::$_tables[$param['num']]['tfoot']['tr'][0]; + HTML2PDF::$_tables[$param['num']]['td_curr'] = 0; + $this->_parsePos = 0; + $this->parsingHtml->code = HTML2PDF::$_tables[$param['num']]['tfoot']['code']; + $this->_isInTfoot = true; + $this->_makeHTMLcode(); + $this->_isInTfoot = false; + + $this->_parsePos = $oldParsePos; + $this->parsingHtml->code = $oldParseCode; + HTML2PDF::$_tables[$param['num']]['tr_curr'] = $tmpTR; + HTML2PDF::$_tables[$param['num']]['td_curr'] = $tmpTD; + } + + // new page + HTML2PDF::$_tables[$param['num']]['new_page'] = true; + $this->_setNewPage(); + + // new position + HTML2PDF::$_tables[$param['num']]['page']++; + HTML2PDF::$_tables[$param['num']]['curr_y'] = $this->pdf->getY(); + HTML2PDF::$_tables[$param['num']]['td_y'] = HTML2PDF::$_tables[$param['num']]['curr_y']+HTML2PDF::$_tables[$param['num']]['marge']['t']; + + // if we have the height of the tbale on the page => draw borders and background + if (isset(HTML2PDF::$_tables[$param['num']]['height'][HTML2PDF::$_tables[$param['num']]['page']])) { + $old = $this->parsingCss->value; + $this->parsingCss->value = HTML2PDF::$_tables[$param['num']]['style_value']; + + $this->_drawRectangle( + HTML2PDF::$_tables[$param['num']]['curr_x'], + HTML2PDF::$_tables[$param['num']]['curr_y'], + HTML2PDF::$_tables[$param['num']]['width'], + HTML2PDF::$_tables[$param['num']]['height'][HTML2PDF::$_tables[$param['num']]['page']], + $this->parsingCss->value['border'], + $this->parsingCss->value['padding'], + HTML2PDF::$_tables[$param['num']]['cellspacing']*0.5, + $this->parsingCss->value['background'] + ); + + $this->parsingCss->value = $old; + } + } + + // if we are in a new page, and if we have a thead => draw it + if (HTML2PDF::$_tables[$param['num']]['new_page'] && count(HTML2PDF::$_tables[$param['num']]['thead']['code'])) { + HTML2PDF::$_tables[$param['num']]['new_page'] = false; + $tmpTR = HTML2PDF::$_tables[$param['num']]['tr_curr']; + $tmpTD = HTML2PDF::$_tables[$param['num']]['td_curr']; + $oldParsePos = $this->_parsePos; + $oldParseCode = $this->parsingHtml->code; + + HTML2PDF::$_tables[$param['num']]['tr_curr'] = HTML2PDF::$_tables[$param['num']]['thead']['tr'][0]; + HTML2PDF::$_tables[$param['num']]['td_curr'] = 0; + $this->_parsePos = 0; + $this->parsingHtml->code = HTML2PDF::$_tables[$param['num']]['thead']['code']; + $this->_isInThead = true; + $this->_makeHTMLcode(); + $this->_isInThead = false; + + $this->_parsePos = $oldParsePos; + $this->parsingHtml->code = $oldParseCode; + HTML2PDF::$_tables[$param['num']]['tr_curr'] = $tmpTR; + HTML2PDF::$_tables[$param['num']]['td_curr'] = $tmpTD; + HTML2PDF::$_tables[$param['num']]['new_page'] = true; + } + // else (in a sub HTML) + } else { + // prepare it + HTML2PDF::$_tables[$param['num']]['cases'][HTML2PDF::$_tables[$param['num']]['tr_curr']-1] = array(); + if (!isset(HTML2PDF::$_tables[$param['num']]['corr'][HTML2PDF::$_tables[$param['num']]['corr_y']])) + HTML2PDF::$_tables[$param['num']]['corr'][HTML2PDF::$_tables[$param['num']]['corr_y']] = array(); + + HTML2PDF::$_tables[$param['num']]['corr_x']=0; + while(isset(HTML2PDF::$_tables[$param['num']]['corr'][HTML2PDF::$_tables[$param['num']]['corr_y']][HTML2PDF::$_tables[$param['num']]['corr_x']])) + HTML2PDF::$_tables[$param['num']]['corr_x']++; + } + + return true; + } + + /** + * tag : TR + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_TR($param) + { + if ($this->_isForOneLine) return false; + + $this->_maxH = 0; + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + // if we are not in a sub HTML + if (!$this->_subPart) { + + // Y of the current line + $ty=null; + for ($ii=0; $ii_isForOneLine) return false; + + $this->_maxH = 0; + + $param['cellpadding'] = HTML2PDF::$_tables[$param['num']]['cellpadding'].'mm'; + $param['cellspacing'] = HTML2PDF::$_tables[$param['num']]['cellspacing'].'mm'; + + // specific style for LI + if ($other=='li') { + $specialLi = true; + } else { + $specialLi = false; + if ($other=='li_sub') { + $param['style']['border'] = 'none'; + $param['style']['background-color'] = 'transparent'; + $param['style']['background-image'] = 'none'; + $param['style']['background-position'] = ''; + $param['style']['background-repeat'] = ''; + $other = 'li'; + } + } + + // get the properties of the TD + $x = HTML2PDF::$_tables[$param['num']]['td_curr']; + $y = HTML2PDF::$_tables[$param['num']]['tr_curr']-1; + $colspan = isset($param['colspan']) ? $param['colspan'] : 1; + $rowspan = isset($param['rowspan']) ? $param['rowspan'] : 1; + + // flag for collapse table + $collapse = false; + + // specific traitment for TD and TH + if (in_array($other, array('td', 'th'))) { + // id of the column + $numCol = isset(HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['Xr']) ? HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['Xr'] : HTML2PDF::$_tables[$param['num']]['corr_x']; + + // we get the properties of the COL tag, if exist + if (isset(HTML2PDF::$_tables[$param['num']]['cols'][$numCol])) { + + $colParam = HTML2PDF::$_tables[$param['num']]['cols'][$numCol]; + + // for colspans => we get all the neede widths + $colParam['style']['width'] = array(); + for ($k=0; $k<$colspan; $k++) { + if (isset(HTML2PDF::$_tables[$param['num']]['cols'][$numCol+$k]['style']['width'])) { + $colParam['style']['width'][] = HTML2PDF::$_tables[$param['num']]['cols'][$numCol+$k]['style']['width']; + } + } + + // calculate the total width of the column + $total = ''; + $last = $this->parsingCss->getLastWidth(); + if (count($colParam['style']['width'])) { + $total = $colParam['style']['width'][0]; unset($colParam['style']['width'][0]); + foreach ($colParam['style']['width'] as $width) { + if (substr($total, -1)=='%' && substr($width, -1)=='%') + $total = (str_replace('%', '', $total)+str_replace('%', '', $width)).'%'; + else + $total = ($this->parsingCss->ConvertToMM($total, $last) + $this->parsingCss->ConvertToMM($width, $last)).'mm'; + } + } + + // get the final width + if ($total) { + $colParam['style']['width'] = $total; + } else { + unset($colParam['style']['width']); + } + + + // merge the styles of the COL and the TD + $param['style'] = array_merge($colParam['style'], $param['style']); + + // merge the class of the COL and the TD + if (isset($colParam['class'])) { + $param['class'] = $colParam['class'].(isset($param['class']) ? ' '.$param['class'] : ''); + } + } + + $collapse = isset($this->parsingCss->value['border']['collapse']) ? $this->parsingCss->value['border']['collapse'] : false; + } + + $this->parsingCss->save(); + + // legacy for TD and TH + $legacy = null; + if (in_array($other, array('td', 'th'))) { + $legacy = array(); + + $old = $this->parsingCss->getLastValue('background'); + if ($old && ($old['color'] || $old['image'])) + $legacy['background'] = $old; + + if (HTML2PDF::$_tables[$param['num']]['border']) { + $legacy['border'] = array(); + $legacy['border']['l'] = HTML2PDF::$_tables[$param['num']]['border']; + $legacy['border']['t'] = HTML2PDF::$_tables[$param['num']]['border']; + $legacy['border']['r'] = HTML2PDF::$_tables[$param['num']]['border']; + $legacy['border']['b'] = HTML2PDF::$_tables[$param['num']]['border']; + } + } + $return = $this->parsingCss->analyse($other, $param, $legacy); + + if ($specialLi) { + $this->parsingCss->value['width']-= $this->parsingCss->ConvertToMM($this->_listeGetWidth()); + $this->parsingCss->value['width']-= $this->parsingCss->ConvertToMM($this->_listeGetPadding()); + } + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + // if tale collapse => modify the borders + if ($collapse) { + if (!$this->_subPart) { + if ( + (HTML2PDF::$_tables[$param['num']]['tr_curr']>1 && !HTML2PDF::$_tables[$param['num']]['new_page']) || + (!$this->_isInThead && count(HTML2PDF::$_tables[$param['num']]['thead']['code'])) + ) { + $this->parsingCss->value['border']['t'] = $this->parsingCss->readBorder('none'); + } + } + + if (HTML2PDF::$_tables[$param['num']]['td_curr']>0) { + if (!$return) $this->parsingCss->value['width']+= $this->parsingCss->value['border']['l']['width']; + $this->parsingCss->value['border']['l'] = $this->parsingCss->readBorder('none'); + } + } + + // margins of the table + $marge = array(); + $marge['t'] = $this->parsingCss->value['padding']['t']+0.5*HTML2PDF::$_tables[$param['num']]['cellspacing']+$this->parsingCss->value['border']['t']['width']; + $marge['r'] = $this->parsingCss->value['padding']['r']+0.5*HTML2PDF::$_tables[$param['num']]['cellspacing']+$this->parsingCss->value['border']['r']['width']; + $marge['b'] = $this->parsingCss->value['padding']['b']+0.5*HTML2PDF::$_tables[$param['num']]['cellspacing']+$this->parsingCss->value['border']['b']['width']; + $marge['l'] = $this->parsingCss->value['padding']['l']+0.5*HTML2PDF::$_tables[$param['num']]['cellspacing']+$this->parsingCss->value['border']['l']['width']; + + // if we are in a sub HTML + if ($this->_subPart) { + // new position in the table + HTML2PDF::$_tables[$param['num']]['td_curr']++; + HTML2PDF::$_tables[$param['num']]['cases'][$y][$x] = array(); + HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['w'] = 0; + HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['h'] = 0; + HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['dw'] = 0; + HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['colspan'] = $colspan; + HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['rowspan'] = $rowspan; + HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['Xr'] = HTML2PDF::$_tables[$param['num']]['corr_x']; + HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['Yr'] = HTML2PDF::$_tables[$param['num']]['corr_y']; + + // prepare the mapping for rowspan and colspan + for ($j=0; $j<$rowspan; $j++) { + for ($i=0; $i<$colspan; $i++) { + HTML2PDF::$_tables[$param['num']]['corr'] + [HTML2PDF::$_tables[$param['num']]['corr_y']+$j] + [HTML2PDF::$_tables[$param['num']]['corr_x']+$i] = ($i+$j>0) ? '' : array($x,$y,$colspan,$rowspan); + } + } + HTML2PDF::$_tables[$param['num']]['corr_x']+= $colspan; + while (isset(HTML2PDF::$_tables[$param['num']]['corr'][HTML2PDF::$_tables[$param['num']]['corr_y']][HTML2PDF::$_tables[$param['num']]['corr_x']])) { + HTML2PDF::$_tables[$param['num']]['corr_x']++; + } + + // extract the content of the TD, and calculate his size + $level = $this->parsingHtml->getLevel($this->_tempPos); + $this->_createSubHTML($this->_subHtml); + $this->_subHtml->parsingHtml->code = $level; + $this->_subHtml->_makeHTMLcode(); + $this->_tempPos+= count($level); + } else { + // new position in the table + HTML2PDF::$_tables[$param['num']]['td_curr']++; + HTML2PDF::$_tables[$param['num']]['td_x']+= HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['dw']; + + // borders and background of the TD + $this->_drawRectangle( + HTML2PDF::$_tables[$param['num']]['td_x'], + HTML2PDF::$_tables[$param['num']]['td_y'], + HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['w'], + HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['h'], + $this->parsingCss->value['border'], + $this->parsingCss->value['padding'], + HTML2PDF::$_tables[$param['num']]['cellspacing']*0.5, + $this->parsingCss->value['background'] + ); + + $this->parsingCss->value['width'] = HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['w'] - $marge['l'] - $marge['r']; + + // marges = size of the TD + $mL = HTML2PDF::$_tables[$param['num']]['td_x']+$marge['l']; + $mR = $this->pdf->getW() - $mL - $this->parsingCss->value['width']; + $this->_saveMargin($mL, 0, $mR); + + // position of the content, from vertical-align + $hCorr = HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['h']; + $hReel = HTML2PDF::$_tables[$param['num']]['cases'][$y][$x]['real_h']; + switch($this->parsingCss->value['vertical-align']) + { + case 'bottom': + $yCorr = $hCorr-$hReel; + break; + + case 'middle': + $yCorr = ($hCorr-$hReel)*0.5; + break; + + case 'top': + default: + $yCorr = 0; + break; + } + + // position of the content + $x = HTML2PDF::$_tables[$param['num']]['td_x']+$marge['l']; + $y = HTML2PDF::$_tables[$param['num']]['td_y']+$marge['t']+$yCorr; + $this->pdf->setXY($x, $y); + $this->_setNewPositionForNewLine(); + } + + return true; + } + + /** + * tag : TD + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_TD($param) + { + if ($this->_isForOneLine) return false; + + $this->_maxH = 0; + + // get the margins + $marge = array(); + $marge['t'] = $this->parsingCss->value['padding']['t']+0.5*HTML2PDF::$_tables[$param['num']]['cellspacing']+$this->parsingCss->value['border']['t']['width']; + $marge['r'] = $this->parsingCss->value['padding']['r']+0.5*HTML2PDF::$_tables[$param['num']]['cellspacing']+$this->parsingCss->value['border']['r']['width']; + $marge['b'] = $this->parsingCss->value['padding']['b']+0.5*HTML2PDF::$_tables[$param['num']]['cellspacing']+$this->parsingCss->value['border']['b']['width']; + $marge['l'] = $this->parsingCss->value['padding']['l']+0.5*HTML2PDF::$_tables[$param['num']]['cellspacing']+$this->parsingCss->value['border']['l']['width']; + $marge['t']+= 0.001; + $marge['r']+= 0.001; + $marge['b']+= 0.001; + $marge['l']+= 0.001; + + // if we are in a sub HTML + if ($this->_subPart) { + + // it msut take only one page + if ($this->_testTdInOnepage && $this->_subHtml->pdf->getPage()>1) { + throw new HTML2PDF_exception(7); + } + + // size of the content of the TD + $w0 = $this->_subHtml->_maxX + $marge['l'] + $marge['r']; + $h0 = $this->_subHtml->_maxY + $marge['t'] + $marge['b']; + + // size from the CSS style + $w2 = $this->parsingCss->value['width'] + $marge['l'] + $marge['r']; + $h2 = $this->parsingCss->value['height'] + $marge['t'] + $marge['b']; + + // final size of the TD + HTML2PDF::$_tables[$param['num']]['cases'][HTML2PDF::$_tables[$param['num']]['tr_curr']-1][HTML2PDF::$_tables[$param['num']]['td_curr']-1]['w'] = max(array($w0, $w2)); + HTML2PDF::$_tables[$param['num']]['cases'][HTML2PDF::$_tables[$param['num']]['tr_curr']-1][HTML2PDF::$_tables[$param['num']]['td_curr']-1]['h'] = max(array($h0, $h2)); + + // real position of the content + HTML2PDF::$_tables[$param['num']]['cases'][HTML2PDF::$_tables[$param['num']]['tr_curr']-1][HTML2PDF::$_tables[$param['num']]['td_curr']-1]['real_w'] = $w0; + HTML2PDF::$_tables[$param['num']]['cases'][HTML2PDF::$_tables[$param['num']]['tr_curr']-1][HTML2PDF::$_tables[$param['num']]['td_curr']-1]['real_h'] = $h0; + + // destroy the sub HTML + $this->_destroySubHTML($this->_subHtml); + } else { + $this->_loadMargin(); + + HTML2PDF::$_tables[$param['num']]['td_x']+= HTML2PDF::$_tables[$param['num']]['cases'][HTML2PDF::$_tables[$param['num']]['tr_curr']-1][HTML2PDF::$_tables[$param['num']]['td_curr']-1]['w']; + } + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + + /** + * tag : TH + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_TH($param) + { + if ($this->_isForOneLine) return false; + + $this->parsingCss->save(); + $this->parsingCss->value['font-bold'] = true; + + $this->_tag_open_TD($param, 'th'); + + return true; + } + + /** + * tag : TH + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_TH($param) + { + if ($this->_isForOneLine) return false; + + $this->_tag_close_TD($param); + + $this->parsingCss->load(); + + return true; + } + + /** + * tag : IMG + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_IMG($param) + { + $src = str_replace('&', '&', $param['src']); + + $this->parsingCss->save(); + $this->parsingCss->value['width'] = 0; + $this->parsingCss->value['height'] = 0; + $this->parsingCss->value['border'] = array('type' => 'none', 'width' => 0, 'color' => array(0, 0, 0)); + $this->parsingCss->value['background'] = array('color' => null, 'image' => null, 'position' => null, 'repeat' => null); + $this->parsingCss->analyse('img', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + $res = $this->_drawImage($src, isset($param['sub_li'])); + if (!$res) return $res; + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + $this->_maxE++; + + return true; + } + + /** + * tag : SELECT + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_SELECT($param) + { + if (!isset($param['name'])) { + $param['name'] = 'champs_pdf_'.(count($this->_lstField)+1); + } + + $param['name'] = strtolower($param['name']); + + if (isset($this->_lstField[$param['name']])) { + $this->_lstField[$param['name']]++; + } else { + $this->_lstField[$param['name']] = 1; + } + + $this->parsingCss->save(); + $this->parsingCss->analyse('select', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + $this->_lstSelect = array(); + $this->_lstSelect['name'] = $param['name']; + $this->_lstSelect['multi'] = isset($param['multiple']) ? true : false; + $this->_lstSelect['size'] = isset($param['size']) ? $param['size'] : 1; + $this->_lstSelect['options'] = array(); + + if ($this->_lstSelect['multi'] && $this->_lstSelect['size']<3) $this->_lstSelect['size'] = 3; + + return true; + } + + /** + * tag : OPTION + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_OPTION($param) + { + // get the content of the option : it is the text of the option + $level = $this->parsingHtml->getLevel($this->_parsePos); + $this->_parsePos+= count($level); + $value = isset($param['value']) ? $param['value'] : 'aut_tag_open_opt_'.(count($this->_lstSelect)+1); + + $this->_lstSelect['options'][$value] = isset($level[0]['param']['txt']) ? $level[0]['param']['txt'] : ''; + + return true; + } + + /** + * tag : OPTION + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_OPTION($param) + { + // nothing to do here + + return true; + } + + /** + * tag : SELECT + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_SELECT() + { + // position of the select + $x = $this->pdf->getX(); + $y = $this->pdf->getY(); + $f = 1.08*$this->parsingCss->value['font-size']; + + // width + $w = $this->parsingCss->value['width']; if (!$w) $w = 50; + + // height (automatic) + $h = ($f*1.07*$this->_lstSelect['size'] + 1); + + $prop = $this->parsingCss->getFormStyle(); + + // multy select + if ($this->_lstSelect['multi']) { + $prop['multipleSelection'] = 'true'; + } + + + // single or multi select + if ($this->_lstSelect['size']>1) { + $this->pdf->ListBox($this->_lstSelect['name'], $w, $h, $this->_lstSelect['options'], $prop); + } else { + $this->pdf->ComboBox($this->_lstSelect['name'], $w, $h, $this->_lstSelect['options'], $prop); + } + + $this->_maxX = max($this->_maxX, $x+$w); + $this->_maxY = max($this->_maxY, $y+$h); + $this->_maxH = max($this->_maxH, $h); + $this->_maxE++; + $this->pdf->setX($x+$w); + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + $this->_lstSelect = array(); + + return true; + } + + /** + * tag : TEXTAREA + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_TEXTAREA($param) + { + if (!isset($param['name'])) { + $param['name'] = 'champs_pdf_'.(count($this->_lstField)+1); + } + + $param['name'] = strtolower($param['name']); + + if (isset($this->_lstField[$param['name']])) { + $this->_lstField[$param['name']]++; + } else { + $this->_lstField[$param['name']] = 1; + } + + $this->parsingCss->save(); + $this->parsingCss->analyse('textarea', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + $x = $this->pdf->getX(); + $y = $this->pdf->getY(); + $fx = 0.65*$this->parsingCss->value['font-size']; + $fy = 1.08*$this->parsingCss->value['font-size']; + + // extract the content the textarea : value + $level = $this->parsingHtml->getLevel($this->_parsePos); + $this->_parsePos+= count($level); + + // automatic size, from cols and rows properties + $w = $fx*(isset($param['cols']) ? $param['cols'] : 22)+1; + $h = $fy*1.07*(isset($param['rows']) ? $param['rows'] : 3)+3; + + $prop = $this->parsingCss->getFormStyle(); + + $prop['multiline'] = true; + $prop['value'] = isset($level[0]['param']['txt']) ? $level[0]['param']['txt'] : ''; + + $this->pdf->TextField($param['name'], $w, $h, $prop, array(), $x, $y); + + $this->_maxX = max($this->_maxX, $x+$w); + $this->_maxY = max($this->_maxY, $y+$h); + $this->_maxH = max($this->_maxH, $h); + $this->_maxE++; + $this->pdf->setX($x+$w); + + return true; + } + + /** + * tag : TEXTAREA + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_TEXTAREA() + { + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : INPUT + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_INPUT($param) + { + if (!isset($param['name'])) $param['name'] = 'champs_pdf_'.(count($this->_lstField)+1); + if (!isset($param['value'])) $param['value'] = ''; + if (!isset($param['type'])) $param['type'] = 'text'; + + $param['name'] = strtolower($param['name']); + $param['type'] = strtolower($param['type']); + + // the type must be valid + if (!in_array($param['type'], array('text', 'checkbox', 'radio', 'hidden', 'submit', 'reset', 'button'))) { + $param['type'] = 'text'; + } + + if (isset($this->_lstField[$param['name']])) { + $this->_lstField[$param['name']]++; + } else { + $this->_lstField[$param['name']] = 1; + } + + $this->parsingCss->save(); + $this->parsingCss->analyse('input', $param); + $this->parsingCss->setPosition(); + $this->parsingCss->fontSet(); + + $name = $param['name']; + + $x = $this->pdf->getX(); + $y = $this->pdf->getY(); + $f = 1.08*$this->parsingCss->value['font-size']; + + $prop = $this->parsingCss->getFormStyle(); + + switch($param['type']) + { + case 'checkbox': + $w = 3; + $h = $w; + if ($h<$f) $y+= ($f-$h)*0.5; + $checked = (isset($param['checked']) && $param['checked']=='checked'); + $this->pdf->CheckBox($name, $w, $checked, $prop, array(), ($param['value'] ? $param['value'] : 'Yes'), $x, $y); + break; + + case 'radio': + $w = 3; + $h = $w; + if ($h<$f) $y+= ($f-$h)*0.5; + $checked = (isset($param['checked']) && $param['checked']=='checked'); + $this->pdf->RadioButton($name, $w, $prop, array(), ($param['value'] ? $param['value'] : 'On'), $checked, $x, $y); + break; + + case 'hidden': + $w = 0; + $h = 0; + $prop['value'] = $param['value']; + $this->pdf->TextField($name, $w, $h, $prop, array(), $x, $y); + break; + + case 'text': + $w = $this->parsingCss->value['width']; if (!$w) $w = 40; + $h = $f*1.3; + $prop['value'] = $param['value']; + $this->pdf->TextField($name, $w, $h, $prop, array(), $x, $y); + break; + + case 'submit': + $w = $this->parsingCss->value['width']; if (!$w) $w = 40; + $h = $this->parsingCss->value['height']; if (!$h) $h = $f*1.3; + $action = array('S'=>'SubmitForm', 'F'=>$this->_isInForm, 'Flags'=>array('ExportFormat')); + $this->pdf->Button($name, $w, $h, $param['value'], $action, $prop, array(), $x, $y); + break; + + case 'reset': + $w = $this->parsingCss->value['width']; if (!$w) $w = 40; + $h = $this->parsingCss->value['height']; if (!$h) $h = $f*1.3; + $action = array('S'=>'ResetForm'); + $this->pdf->Button($name, $w, $h, $param['value'], $action, $prop, array(), $x, $y); + break; + + case 'button': + $w = $this->parsingCss->value['width']; if (!$w) $w = 40; + $h = $this->parsingCss->value['height']; if (!$h) $h = $f*1.3; + $action = isset($param['onclick']) ? $param['onclick'] : ''; + $this->pdf->Button($name, $w, $h, $param['value'], $action, $prop, array(), $x, $y); + break; + + default: + $w = 0; + $h = 0; + break; + } + + $this->_maxX = max($this->_maxX, $x+$w); + $this->_maxY = max($this->_maxY, $y+$h); + $this->_maxH = max($this->_maxH, $h); + $this->_maxE++; + $this->pdf->setX($x+$w); + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + + return true; + } + + /** + * tag : DRAW + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_DRAW($param) + { + if ($this->_isForOneLine) return false; + if ($this->_debugActif) $this->_DEBUG_add('DRAW', true); + + $this->parsingCss->save(); + $this->parsingCss->analyse('draw', $param); + $this->parsingCss->fontSet(); + + $alignObject = null; + if ($this->parsingCss->value['margin-auto']) $alignObject = 'center'; + + $overW = $this->parsingCss->value['width']; + $overH = $this->parsingCss->value['height']; + $this->parsingCss->value['old_maxX'] = $this->_maxX; + $this->parsingCss->value['old_maxY'] = $this->_maxY; + $this->parsingCss->value['old_maxH'] = $this->_maxH; + + $w = $this->parsingCss->value['width']; + $h = $this->parsingCss->value['height']; + + if (!$this->parsingCss->value['position']) { + if ( + $w < ($this->pdf->getW() - $this->pdf->getlMargin()-$this->pdf->getrMargin()) && + $this->pdf->getX() + $w>=($this->pdf->getW() - $this->pdf->getrMargin()) + ) + $this->_tag_open_BR(array()); + + if ( + ($h < ($this->pdf->getH() - $this->pdf->gettMargin()-$this->pdf->getbMargin())) && + ($this->pdf->getY() + $h>=($this->pdf->getH() - $this->pdf->getbMargin())) && + !$this->_isInOverflow + ) + $this->_setNewPage(); + + $old = $this->parsingCss->getOldValues(); + $parentWidth = $old['width'] ? $old['width'] : $this->pdf->getW() - $this->pdf->getlMargin() - $this->pdf->getrMargin(); + + if ($parentWidth>$w) { + if ($alignObject=='center') $this->pdf->setX($this->pdf->getX() + ($parentWidth-$w)*0.5); + else if ($alignObject=='right') $this->pdf->setX($this->pdf->getX() + $parentWidth-$w); + } + + $this->parsingCss->setPosition(); + } else { + $old = $this->parsingCss->getOldValues(); + $parentWidth = $old['width'] ? $old['width'] : $this->pdf->getW() - $this->pdf->getlMargin() - $this->pdf->getrMargin(); + + if ($parentWidth>$w) { + if ($alignObject=='center') $this->pdf->setX($this->pdf->getX() + ($parentWidth-$w)*0.5); + else if ($alignObject=='right') $this->pdf->setX($this->pdf->getX() + $parentWidth-$w); + } + + $this->parsingCss->setPosition(); + $this->_saveMax(); + $this->_maxX = 0; + $this->_maxY = 0; + $this->_maxH = 0; + $this->_maxE = 0; + } + + $this->_drawRectangle( + $this->parsingCss->value['x'], + $this->parsingCss->value['y'], + $this->parsingCss->value['width'], + $this->parsingCss->value['height'], + $this->parsingCss->value['border'], + $this->parsingCss->value['padding'], + 0, + $this->parsingCss->value['background'] + ); + + $marge = array(); + $marge['l'] = $this->parsingCss->value['border']['l']['width']; + $marge['r'] = $this->parsingCss->value['border']['r']['width']; + $marge['t'] = $this->parsingCss->value['border']['t']['width']; + $marge['b'] = $this->parsingCss->value['border']['b']['width']; + + $this->parsingCss->value['width'] -= $marge['l']+$marge['r']; + $this->parsingCss->value['height']-= $marge['t']+$marge['b']; + + $overW-= $marge['l']+$marge['r']; + $overH-= $marge['t']+$marge['b']; + + // clipping to draw only in the size opf the DRAW tag + $this->pdf->clippingPathStart( + $this->parsingCss->value['x']+$marge['l'], + $this->parsingCss->value['y']+$marge['t'], + $this->parsingCss->value['width'], + $this->parsingCss->value['height'] + ); + + // left and right of the DRAW tag + $mL = $this->parsingCss->value['x']+$marge['l']; + $mR = $this->pdf->getW() - $mL - $overW; + + // position of the DRAW tag + $x = $this->parsingCss->value['x']+$marge['l']; + $y = $this->parsingCss->value['y']+$marge['t']; + + // prepare the drawing area + $this->_saveMargin($mL, 0, $mR); + $this->pdf->setXY($x, $y); + + // we are in a draw tag + $this->_isInDraw = array( + 'x' => $x, + 'y' => $y, + 'w' => $overW, + 'h' => $overH, + ); + + // init the translate matrix : (0,0) => ($x, $y) + $this->pdf->doTransform(array(1,0,0,1,$x,$y)); + $this->pdf->SetAlpha(1.); + return true; + } + + /** + * tag : DRAW + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_DRAW($param) + { + if ($this->_isForOneLine) return false; + + $this->pdf->SetAlpha(1.); + $this->pdf->undoTransform(); + $this->pdf->clippingPathStop(); + + $this->_maxX = $this->parsingCss->value['old_maxX']; + $this->_maxY = $this->parsingCss->value['old_maxY']; + $this->_maxH = $this->parsingCss->value['old_maxH']; + + $marge = array(); + $marge['l'] = $this->parsingCss->value['border']['l']['width']; + $marge['r'] = $this->parsingCss->value['border']['r']['width']; + $marge['t'] = $this->parsingCss->value['border']['t']['width']; + $marge['b'] = $this->parsingCss->value['border']['b']['width']; + + $x = $this->parsingCss->value['x']; + $y = $this->parsingCss->value['y']; + $w = $this->parsingCss->value['width']+$marge['l']+$marge['r']; + $h = $this->parsingCss->value['height']+$marge['t']+$marge['b']; + + if ($this->parsingCss->value['position']!='absolute') { + $this->pdf->setXY($x+$w, $y); + + $this->_maxX = max($this->_maxX, $x+$w); + $this->_maxY = max($this->_maxY, $y+$h); + $this->_maxH = max($this->_maxH, $h); + $this->_maxE++; + } else { + // position + $this->pdf->setXY($this->parsingCss->value['xc'], $this->parsingCss->value['yc']); + + $this->_loadMax(); + } + + $block = ($this->parsingCss->value['display']!='inline' && $this->parsingCss->value['position']!='absolute'); + + $this->parsingCss->load(); + $this->parsingCss->fontSet(); + $this->_loadMargin(); + + if ($block) $this->_tag_open_BR(array()); + if ($this->_debugActif) $this->_DEBUG_add('DRAW', false); + + $this->_isInDraw = null; + + return true; + } + + /** + * tag : LINE + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_LINE($param) + { + if (!$this->_isInDraw) throw new HTML2PDF_exception(8, 'LINE'); + + $this->pdf->doTransform(isset($param['transform']) ? $this->_prepareTransform($param['transform']) : null); + $this->parsingCss->save(); + $styles = $this->parsingCss->getSvgStyle('path', $param); + $styles['fill'] = null; + $style = $this->pdf->svgSetStyle($styles); + + $x1 = isset($param['x1']) ? $this->parsingCss->ConvertToMM($param['x1'], $this->_isInDraw['w']) : 0.; + $y1 = isset($param['y1']) ? $this->parsingCss->ConvertToMM($param['y1'], $this->_isInDraw['h']) : 0.; + $x2 = isset($param['x2']) ? $this->parsingCss->ConvertToMM($param['x2'], $this->_isInDraw['w']) : 0.; + $y2 = isset($param['y2']) ? $this->parsingCss->ConvertToMM($param['y2'], $this->_isInDraw['h']) : 0.; + $this->pdf->svgLine($x1, $y1, $x2, $y2); + + $this->pdf->undoTransform(); + $this->parsingCss->load(); + } + + /** + * tag : RECT + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_RECT($param) + { + if (!$this->_isInDraw) throw new HTML2PDF_exception(8, 'RECT'); + + $this->pdf->doTransform(isset($param['transform']) ? $this->_prepareTransform($param['transform']) : null); + $this->parsingCss->save(); + $styles = $this->parsingCss->getSvgStyle('path', $param); + $style = $this->pdf->svgSetStyle($styles); + + $x = isset($param['x']) ? $this->parsingCss->ConvertToMM($param['x'], $this->_isInDraw['w']) : 0.; + $y = isset($param['y']) ? $this->parsingCss->ConvertToMM($param['y'], $this->_isInDraw['h']) : 0.; + $w = isset($param['w']) ? $this->parsingCss->ConvertToMM($param['w'], $this->_isInDraw['w']) : 0.; + $h = isset($param['h']) ? $this->parsingCss->ConvertToMM($param['h'], $this->_isInDraw['h']) : 0.; + + $this->pdf->svgRect($x, $y, $w, $h, $style); + + $this->pdf->undoTransform(); + $this->parsingCss->load(); + } + + /** + * tag : CIRCLE + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_CIRCLE($param) + { + if (!$this->_isInDraw) throw new HTML2PDF_exception(8, 'CIRCLE'); + + $this->pdf->doTransform(isset($param['transform']) ? $this->_prepareTransform($param['transform']) : null); + $this->parsingCss->save(); + $styles = $this->parsingCss->getSvgStyle('path', $param); + $style = $this->pdf->svgSetStyle($styles); + + $cx = isset($param['cx']) ? $this->parsingCss->ConvertToMM($param['cx'], $this->_isInDraw['w']) : 0.; + $cy = isset($param['cy']) ? $this->parsingCss->ConvertToMM($param['cy'], $this->_isInDraw['h']) : 0.; + $r = isset($param['r']) ? $this->parsingCss->ConvertToMM($param['r'], $this->_isInDraw['w']) : 0.; + $this->pdf->svgEllipse($cx, $cy, $r, $r, $style); + + $this->pdf->undoTransform(); + $this->parsingCss->load(); + } + + /** + * tag : ELLIPSE + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_ELLIPSE($param) + { + if (!$this->_isInDraw) throw new HTML2PDF_exception(8, 'ELLIPSE'); + + $this->pdf->doTransform(isset($param['transform']) ? $this->_prepareTransform($param['transform']) : null); + $this->parsingCss->save(); + $styles = $this->parsingCss->getSvgStyle('path', $param); + $style = $this->pdf->svgSetStyle($styles); + + $cx = isset($param['cx']) ? $this->parsingCss->ConvertToMM($param['cx'], $this->_isInDraw['w']) : 0.; + $cy = isset($param['cy']) ? $this->parsingCss->ConvertToMM($param['cy'], $this->_isInDraw['h']) : 0.; + $rx = isset($param['ry']) ? $this->parsingCss->ConvertToMM($param['rx'], $this->_isInDraw['w']) : 0.; + $ry = isset($param['rx']) ? $this->parsingCss->ConvertToMM($param['ry'], $this->_isInDraw['h']) : 0.; + $this->pdf->svgEllipse($cx, $cy, $rx, $ry, $style); + + $this->pdf->undoTransform(); + $this->parsingCss->load(); + } + + + /** + * tag : POLYLINE + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_POLYLINE($param) + { + if (!$this->_isInDraw) throw new HTML2PDF_exception(8, 'POLYGON'); + + $this->pdf->doTransform(isset($param['transform']) ? $this->_prepareTransform($param['transform']) : null); + $this->parsingCss->save(); + $styles = $this->parsingCss->getSvgStyle('path', $param); + $style = $this->pdf->svgSetStyle($styles); + + $path = isset($param['points']) ? $param['points'] : null; + if ($path) { + $path = str_replace(',', ' ', $path); + $path = preg_replace('/[\s]+/', ' ', trim($path)); + + // prepare the path + $path = explode(' ', $path); + foreach ($path as $k => $v) { + $path[$k] = trim($v); + if ($path[$k]==='') unset($path[$k]); + } + $path = array_values($path); + + $actions = array(); + for ($k=0; $kparsingCss->ConvertToMM($path[$k+0], $this->_isInDraw['w']), + $this->parsingCss->ConvertToMM($path[$k+1], $this->_isInDraw['h']) + ); + } + + // drawing + $this->pdf->svgPolygone($actions, $style); + } + + $this->pdf->undoTransform(); + $this->parsingCss->load(); + } + + /** + * tag : POLYGON + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_POLYGON($param) + { + if (!$this->_isInDraw) throw new HTML2PDF_exception(8, 'POLYGON'); + + $this->pdf->doTransform(isset($param['transform']) ? $this->_prepareTransform($param['transform']) : null); + $this->parsingCss->save(); + $styles = $this->parsingCss->getSvgStyle('path', $param); + $style = $this->pdf->svgSetStyle($styles); + + $path = (isset($param['points']) ? $param['points'] : null); + if ($path) { + $path = str_replace(',', ' ', $path); + $path = preg_replace('/[\s]+/', ' ', trim($path)); + + // prepare the path + $path = explode(' ', $path); + foreach ($path as $k => $v) { + $path[$k] = trim($v); + if ($path[$k]==='') unset($path[$k]); + } + $path = array_values($path); + + $actions = array(); + for ($k=0; $kparsingCss->ConvertToMM($path[$k+0], $this->_isInDraw['w']), + $this->parsingCss->ConvertToMM($path[$k+1], $this->_isInDraw['h']) + ); + } + $actions[] = array('z'); + + // drawing + $this->pdf->svgPolygone($actions, $style); + } + + $this->pdf->undoTransform(); + $this->parsingCss->load(); + } + + /** + * tag : PATH + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_PATH($param) + { + if (!$this->_isInDraw) throw new HTML2PDF_exception(8, 'PATH'); + + $this->pdf->doTransform(isset($param['transform']) ? $this->_prepareTransform($param['transform']) : null); + $this->parsingCss->save(); + $styles = $this->parsingCss->getSvgStyle('path', $param); + $style = $this->pdf->svgSetStyle($styles); + + $path = isset($param['d']) ? $param['d'] : null; + + if ($path) { + // prepare the path + $path = str_replace(',', ' ', $path); + $path = preg_replace('/([a-zA-Z])([0-9\.\-])/', '$1 $2', $path); + $path = preg_replace('/([0-9\.])([a-zA-Z])/', '$1 $2', $path); + $path = preg_replace('/[\s]+/', ' ', trim($path)); + $path = preg_replace('/ ([a-z]{2})/', '$1', $path); + + $path = explode(' ', $path); + foreach ($path as $k => $v) { + $path[$k] = trim($v); + if ($path[$k]==='') unset($path[$k]); + } + $path = array_values($path); + + // read each actions in the path + $actions = array(); + $action = array(); + $lastAction = null; // last action found + for ($k=0; $kparsingCss->ConvertToMM($path[$k+0], $this->_isInDraw['w']); // x1 + $action[] = $this->parsingCss->ConvertToMM($path[$k+1], $this->_isInDraw['h']); // y1 + $action[] = $this->parsingCss->ConvertToMM($path[$k+2], $this->_isInDraw['w']); // x2 + $action[] = $this->parsingCss->ConvertToMM($path[$k+3], $this->_isInDraw['h']); // y2 + $action[] = $this->parsingCss->ConvertToMM($path[$k+4], $this->_isInDraw['w']); // x + $action[] = $this->parsingCss->ConvertToMM($path[$k+5], $this->_isInDraw['h']); // y + $k+= 6; + break; + + case 'Q': + case 'S': + case 'q': + case 's': + $action[] = $this->parsingCss->ConvertToMM($path[$k+0], $this->_isInDraw['w']); // x2 + $action[] = $this->parsingCss->ConvertToMM($path[$k+1], $this->_isInDraw['h']); // y2 + $action[] = $this->parsingCss->ConvertToMM($path[$k+2], $this->_isInDraw['w']); // x + $action[] = $this->parsingCss->ConvertToMM($path[$k+3], $this->_isInDraw['h']); // y + $k+= 4; + break; + + case 'A': + case 'a': + $action[] = $this->parsingCss->ConvertToMM($path[$k+0], $this->_isInDraw['w']); // rx + $action[] = $this->parsingCss->ConvertToMM($path[$k+1], $this->_isInDraw['h']); // ry + $action[] = 1.*$path[$k+2]; // angle de deviation de l'axe X + $action[] = ($path[$k+3]=='1') ? 1 : 0; // large-arc-flag + $action[] = ($path[$k+4]=='1') ? 1 : 0; // sweep-flag + $action[] = $this->parsingCss->ConvertToMM($path[$k+5], $this->_isInDraw['w']); // x + $action[] = $this->parsingCss->ConvertToMM($path[$k+6], $this->_isInDraw['h']); // y + $k+= 7; + break; + + case 'M': + case 'L': + case 'T': + case 'm': + case 'l': + case 't': + $action[] = $this->parsingCss->ConvertToMM($path[$k+0], $this->_isInDraw['w']); // x + $action[] = $this->parsingCss->ConvertToMM($path[$k+1], $this->_isInDraw['h']); // y + $k+= 2; + break; + + case 'H': + case 'h': + $action[] = $this->parsingCss->ConvertToMM($path[$k+0], $this->_isInDraw['w']); // x + $k+= 1; + break; + + case 'V': + case 'v': + $action[] = $this->parsingCss->ConvertToMM($path[$k+0], $this->_isInDraw['h']); // y + $k+= 1; + break; + + case 'z': + case 'Z': + default: + break; + } + // add the action + $actions[] = $action; + } + + // drawing + $this->pdf->svgPolygone($actions, $style); + } + + $this->pdf->undoTransform(); + $this->parsingCss->load(); + } + + /** + * tag : G + * mode : OPEN + * + * @param array $param + * @return boolean + */ + protected function _tag_open_G($param) + { + if (!$this->_isInDraw) throw new HTML2PDF_exception(8, 'G'); + + $this->pdf->doTransform(isset($param['transform']) ? $this->_prepareTransform($param['transform']) : null); + $this->parsingCss->save(); + $styles = $this->parsingCss->getSvgStyle('path', $param); + $style = $this->pdf->svgSetStyle($styles); + } + + /** + * tag : G + * mode : CLOSE + * + * @param array $param + * @return boolean + */ + protected function _tag_close_G($param) + { + $this->pdf->undoTransform(); + $this->parsingCss->load(); + } + + /** + * new page for the automatic Index, does not use thie method. Only HTML2PDF_myPdf could use it !!!! + * + * @param &int $page + * @return integer $oldPage + */ + public function _INDEX_NewPage(&$page) + { + if ($page) { + $oldPage = $this->pdf->getPage(); + $this->pdf->setPage($page); + $this->pdf->setXY($this->_margeLeft, $this->_margeTop); + $this->_maxH = 0; + $page++; + return $oldPage; + } else { + $this->_setNewPage(); + return null; + } + } + + } +} \ No newline at end of file diff --git a/Societes/ric/Html2pdf/lib/locale/ca.csv b/Societes/ric/Html2pdf/lib/locale/ca.csv new file mode 100755 index 00000000..94b11128 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/locale/ca.csv @@ -0,0 +1,21 @@ +"err01","L'etiqueta <[[OTHER]]> encara no existeix.

      Si voleu afegir-la, heu de crear els mètodes o_[[OTHER]] (per l'obertura) i c_[[OTHER]] (pel tancament) seguint el model de les etiquetes existents.

      A més, si creeu nous mètodes, envieu-ho a webmaster@html2pdf.fr per tal d'afegir-los a les següents versions d'HTML2PDF, i que tothom en pugui gaudir." +"err02","Frase de 1000 línies => massa llarga
      Frase : [[OTHER_0]]
      Mida casella : [[OTHER_1]]
      Mida text : [[OTHER_2]]
      " +"err03","Codi HTML no vàlid, una etiqueta té un tancament de més : <[[OTHER]]>" +"err04","Codi HTML no vàlid, les etiquetes no estan tancades en l'ordre correcte.
      Estat :
      [[OTHER]]
      " +"err05","Codi HTML no vàlid, totes les etiquetes han de tenir el seu tancament.
      Estat :
      [[OTHER]]
      " +"err06","Impossible carregar la imatge [[OTHER]]" +"err07","El contingut d'una etiqueta TD no quep en una sola pàgina" +"err08","<[[OTHER]]> tag not in a <DRAW> tag" +"err09","The using of the <[[OTHER_0]]>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI" +"txt01","ERROR n°" +"txt02","Fitxer :" +"txt03","Línia :" +"pdf01","Document generat el [[date_d]]/[[date_m]]/[[date_y]]" +"pdf02","Document generat a les [[date_h]]:[[date_i]]" +"pdf03","Document generat el [[date_d]]/[[date_m]]/[[date_y]] a les [[date_h]]:[[date_i]]" +"pdf04","Pàgina [[page_cu]]/[[page_nb]]" +"pdf05","Els formularis requereixen l'ús de l'Adobe Reader 9" +"vue01","CAPÇALERA" +"vue02","PEU DE PÀGINA" +"vue03","PÀGINA" +"vue04","Visualització" diff --git a/Societes/ric/Html2pdf/lib/locale/cs.csv b/Societes/ric/Html2pdf/lib/locale/cs.csv new file mode 100755 index 00000000..5e21fd73 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/locale/cs.csv @@ -0,0 +1,21 @@ +"err01","Element <[[OTHER]]> neexistuje.

      Pokud ho chcete přidat, musíte vytvořit metodu o_[[OTHER]] (pro otevření) a c_[[OTHER]] (pro zavření) k začlenění do modelu jako existující element.

      Pokud vytvoříte metodu, nebojte se poslat email na webmaster@html2pdf.fr k zařazení do další verze HTML2PDF." +"err02","Sentence of 1000 lines => too long
      Sentence : [[OTHER_0]]
      Width box : [[OTHER_1]]
      Length text : [[OTHER_2]]
      " +"err03","Chyba v HTML, element je příliš mnohokrát zavřen: <[[OTHER]]>" +"err04","Chyba v HTML, element není uzavřen ve správném pořadí.
      Stav :
      [[OTHER]]
      " +"err05","Chyba v HTML, všechny elementy musí být zavřeny.
      Stav :
      [[OTHER]]
      " +"err06","Menohu načíst orbázek [[OTHER]]" +"err07","Obsah TD elementu se nevejde na jednu stránku" +"err08","<[[OTHER]]> element není v <DRAW> elementu" +"err09","The using of the <[[OTHER_0]]>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI" +"txt01","CHYBA č." +"txt02","Soubor :" +"txt03","Řádek :" +"pdf01","Dokument vytvořen dne [[date_d]].[[date_m]].[[date_y]]" +"pdf02","Dokument vytvořen v [[date_h]]:[[date_i]]" +"pdf03","Dokument vytvořen dne [[date_d]].[[date_m]].[[date_y]] v [[date_h]]:[[date_i]]" +"pdf04","Stránka [[page_cu]]/[[page_nb]]" +"pdf05","Formuláře vyžadují Adobe Reader 9" +"vue01","HLAVIČKA" +"vue02","PATIČKA" +"vue03","STRÁNKA" +"vue04","POHLED" diff --git a/Societes/ric/Html2pdf/lib/locale/da.csv b/Societes/ric/Html2pdf/lib/locale/da.csv new file mode 100755 index 00000000..83a6453e --- /dev/null +++ b/Societes/ric/Html2pdf/lib/locale/da.csv @@ -0,0 +1,21 @@ +"err01","Tag <[[OTHER]]> endnu ikke eksisterer.

      Hvis du ønsker at tilføje det, skal du oprette de metoder o_[[OTHER]] (for åbning) og c_[[OTHER]] (for lukning) ved at følge den model af eksisterende tags.

      Hvis du opretter disse metoder, så tøv ikke med at send mig en e-mail til webmaster@html2pdf.fr til indsat dem i den næste version af HTML2PDF." +"err02","Sætning af 1000 lines => er for lang
      sætning : [[OTHER_0]]
      Bredde boksen : [[OTHER_1]]
      Længde tekst : [[OTHER_2]]
      " +"err03","HTML-kode er ugyldig, et tag er lukket for mange gange: <[[OTHER]]>" +"err04","HTML-kode er ugyldig, tags er ikke afsluttet på en ordentlig måde.
      Status :
      [[OTHER]]
      " +"err05","HTML-kode er ugyldig, alle tags skal lukkes.
      Status :
      [[OTHER]]
      " +"err06","Umuligt at indlæse billedet [[OTHER]]" +"err07","Indholdet af en TD tag ikke passer på én side" +"err08","<[[OTHER]]> tag not in a <DRAW> tag" +"err09","The using of the <[[OTHER_0]]>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI" +"txt01","FEJL n°" +"txt02","File :" +"txt03","Linje :" +"pdf01","Siden oprettet d. [[date_y]]-[[date_m]]-[[date_d]]" +"pdf02","Siden oprettet d. [[date_h]]:[[date_i]]" +"pdf03","Siden oprettet d. [[date_y]]-[[date_m]]-[[date_d]] at [[date_h]]:[[date_i]]" +"pdf04","Side [[page_cu]]/[[page_nb]]" +"pdf05","De formularer kræver brug af Adobe Reader 9" +"vue01","HEADER" +"vue02","FOOTER" +"vue03","PAGE" +"vue04","View" diff --git a/Societes/ric/Html2pdf/lib/locale/de.csv b/Societes/ric/Html2pdf/lib/locale/de.csv new file mode 100755 index 00000000..d5403eb1 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/locale/de.csv @@ -0,0 +1,21 @@ +"err01","Das Tag <[[OTHER]]> existiert noch nicht.

      Wenn Sie es hinzufügen möchten, sollen Sie die Methodeno_[[OTHER]] (zu öffnen) und c_[[OTHER]] (zu schließen) nach dem Modell den existierenden Tags.

      Wenn Sie diese Methoden außerdem aufbauen, bitte teilen Sie sie duch eine E-Mail an meine Adresse : webmaster@html2pdf.fr, so daß sie künftig in die nächste Version von HTML2PDF erscheinen." +"err02","1000-Linien Satz => zu lang
      Satz : [[OTHER_0]]
      Breite des Eingabefelds : [[OTHER_1]]
      Länge des Texts : [[OTHER_2]]
      " +"err03","Falsches HTML Code, überzähliges geschloßene Tag : <[[OTHER]]>" +"err04","Falsches HTML Code, die Tags sind nicht in richtiger Ordnung geschloßen.
      Status :
      [[OTHER]]
      " +"err05","Falsches HTML Code, alle Tags sollen geschloßen sein.
      Status :
      [[OTHER]]
      " +"err06","Ladung des Bilds unmöglich [[OTHER]]" +"err07","Er Inhalt eines TD-Tag passt nicht nur auf einer Seite" +"err08","<[[OTHER]]> tag not in a <DRAW> tag" +"err09","The using of the <[[OTHER_0]]>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI" +"txt01","Fehler n°" +"txt02","Datei :" +"txt03","Linie :" +"pdf01","Datei aufgebaut am [[date_d]]/[[date_m]]/[[date_y]]" +"pdf02","Datei aufgebaut um [[date_h]]:[[date_m]]" +"pdf03","Datei aufgebaut am [[date_d]]/[[date_m]]/[[date_y]] um [[date_h]]:[[date_i]]" +"pdf04","Seite [[page_cu]]/[[page_nb]]" +"pdf05","Die Formulare benötigen Sie den Adobe Reader 9" +"vue01","Seite-Header" +"vue02","Fußzeile" +"vue03","Seite" +"vue04","Visualisierung" diff --git a/Societes/ric/Html2pdf/lib/locale/en.csv b/Societes/ric/Html2pdf/lib/locale/en.csv new file mode 100755 index 00000000..8c0e7573 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/locale/en.csv @@ -0,0 +1,21 @@ +"err01","The tag <[[OTHER]]> does not yet exist.

      If you want to add it, you must create the methods o_[[OTHER]] (for opening) and c_[[OTHER]] (for closure) by following the model of existing tags.

      If you create these methods, do not hesitate to send me an email to webmaster@html2pdf.fr to included them in the next version of HTML2PDF." +"err02","Sentence of 1000 lines => too long
      Sentence : [[OTHER_0]]
      Width box : [[OTHER_1]]
      Length text : [[OTHER_2]]
      " +"err03","HTML code invalid, a tag is closed too many times: <[[OTHER]]>" +"err04","HTML code invalid, the tags are not closed in an orderly fashion.
      Status :
      [[OTHER]]
      " +"err05","HTML code invalid, all tags must be closed.
      Status :
      [[OTHER]]
      " +"err06","Impossible to load the image [[OTHER]]" +"err07","The content of a TD tag does not fit on only one page" +"err08","<[[OTHER]]> tag not in a <DRAW> tag" +"err09","The using of the <[[OTHER_0]]>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI" +"txt01","ERROR n°" +"txt02","File :" +"txt03","Line :" +"pdf01","Document generated on [[date_y]]-[[date_m]]-[[date_d]]" +"pdf02","Document generated at [[date_h]]:[[date_i]]" +"pdf03","Document generated on [[date_y]]-[[date_m]]-[[date_d]] at [[date_h]]:[[date_i]]" +"pdf04","Page [[page_cu]]/[[page_nb]]" +"pdf05","The forms require the use of Adobe Reader 9" +"vue01","HEADER" +"vue02","FOOTER" +"vue03","PAGE" +"vue04","View" diff --git a/Societes/ric/Html2pdf/lib/locale/es.csv b/Societes/ric/Html2pdf/lib/locale/es.csv new file mode 100755 index 00000000..ed0ccd15 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/locale/es.csv @@ -0,0 +1,21 @@ +"err01","La etiqueta <[[OTHER]]> todavía no existe.

      Si quiere añadirla, debe crear los métodos o_[[OTHER]] (para la apertura) y c_[[OTHER]] (para el cierre) siguiendo el modelo de las etiquetas existentes.

      Si crea nuevos métodos, envíelos a webmaster@html2pdf.fr para añadirlos a las siguientes versiones de HTML2PDF, y que todo el mundo se pueda beneficiar." +"err02","Frase de 1000 líneas => demasiado larga
      Frase : [[OTHER_0]]
      Tamaño casilla : [[OTHER_1]]
      Tamaño texto : [[OTHER_2]]
      " +"err03","Código HTML no válido, una etiqueta tiene un cierre de más : <[[OTHER]]>" +"err04","Código HTML no válido, las etiquetas no estan cerradas en el orden correcto.
      Estado :
      [[OTHER]]
      " +"err05","Código HTML no válido, todas las etiquetas deben tener su cierre.
      Estado :
      [[OTHER]]
      " +"err06","Imposible cargar la imagen [[OTHER]]" +"err07","El contenido de una etiqueta TD no encaja en una sola página" +"err08","<[[OTHER]]> tag not in a <DRAW> tag" +"err09","The using of the <[[OTHER_0]]>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI" +"txt01","ERROR n°" +"txt02","Fichero :" +"txt03","Línea :" +"pdf01","Documento generado el [[date_d]]/[[date_m]]/[[date_y]]" +"pdf02","Documento generado a las [[date_h]]:[[date_i]]" +"pdf03","Documento generado el [[date_d]]/[[date_m]]/[[date_y]] a las [[date_h]]:[[date_i]]" +"pdf04","Página [[page_cu]]/[[page_nb]]" +"pdf05","Los formularios requieren el uso de Adobe Reader 9" +"vue01","ENCABEZADO" +"vue02","PIE DE PÁGINA" +"vue03","PÁGINA" +"vue04","Visualización" diff --git a/Societes/ric/Html2pdf/lib/locale/fr.csv b/Societes/ric/Html2pdf/lib/locale/fr.csv new file mode 100755 index 00000000..db4bd879 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/locale/fr.csv @@ -0,0 +1,21 @@ +"err01","La balise <[[OTHER]]> n'existe pas encore.

      Si vous voulez la rajouter, vous devez créer les méthodes o_[[OTHER]] (pour l'ouverture) et c_[[OTHER]] (pour la fermeture) en suivant le modèle des balises existantes.

      De plus, si vous créez ces méthodes, n'hésitez pas à en faire profiter tout le monde en m'écrivant sur webmaster@html2pdf.fr afin qu'elles se retrouvent dans la prochaine version d'HTML2PDF." +"err02","Phrase de 1000 lignes => trop long
      Phrase : [[OTHER_0]]
      Largeur case : [[OTHER_1]]
      Longueur text : [[OTHER_2]]
      " +"err03","Code HTML non valide, une balise est fermée en trop : <[[OTHER]]>" +"err04","Code HTML non valide, les balises ne sont pas fermées dans le bon ordre.
      Etat :
      [[OTHER]]
      " +"err05","Code HTML non valide, toutes les balises doivent être fermées.
      Etat :
      [[OTHER]]
      " +"err06","Impossible de charger l'image [[OTHER]]" +"err07","le contenu d'une balise TD ne rentre pas sur une seule page" +"err08","Balise <[[OTHER]]> non contenu dans une balise <DRAW>" +"err09","L'utilisation de la balise <[[OTHER_0]]> a changé, vous ne pouvez plus utiliser [[OTHER_1]]. Lisez le WIKI" +"txt01","ERREUR n°" +"txt02","Fichier :" +"txt03","Ligne :" +"pdf01","Document généré le [[date_d]]/[[date_m]]/[[date_y]]" +"pdf02","Document généré à [[date_h]]:[[date_i]]" +"pdf03","Document généré le [[date_d]]/[[date_m]]/[[date_y]] à [[date_h]]:[[date_i]]" +"pdf04","Page [[page_cu]]/[[page_nb]]" +"pdf05","Les formulaires nécessitent l'utilisation de Adobe Reader 9" +"vue01","HEADER" +"vue02","FOOTER" +"vue03","PAGE" +"vue04","Restitution" diff --git a/Societes/ric/Html2pdf/lib/locale/it.csv b/Societes/ric/Html2pdf/lib/locale/it.csv new file mode 100755 index 00000000..c7a35053 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/locale/it.csv @@ -0,0 +1,21 @@ +"err01","Il tag <[[OTHER]]> non esiste ancora.

      Se si desidera aggiungere, è necessario creare metodi o_[[OTHER]] (di apertura) e C_[[OTHER]] (per la chiusura) secondo il modello esistente di tag.

      Inoltre, se si creare questi metodi, non esitate a portare il mondo intero ha scritto su webmaster@html2pdf.fr in modo che alla fine nella prossima versione di HTML2PDF." +"err02","Citazione di 1000 linee => troppo lungo
      frase : [[OTHER_0]]
      casella Larghezza : [[OTHER_1]]
      Lunghezza testo : [[OTHER_2]]
      " +"err03","HTML non valido, un tag è chiusa troppo <[[OTHER]]>" +"err04","HTML non validi, i tag non sono chiusi nel corretto ordine.
      Stato :
      [[OTHER]]
      " +"err05","HTML non valido, tutte le tag deve essere chiuso.
      Stato :
      [[OTHER]]
      " +"err06","Impossibile caricare l'immagine [[OTHER]]" +"err07","il contenuto di un tag TD non rientra in una sola pagina" +"err08","<[[OTHER]]> tag not in a <DRAW> tag" +"err09","The using of the <[[OTHER_0]]>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI" +"txt01","ERRORE n°" +"txt02","File :" +"txt03","Linea :" +"pdf01","Documento generato il [[date_d]]/[[date_m]]/[[date_y]]" +"pdf02","Documento generato [[date_h]]:[[date_i]]" +"pdf03","Documento generato il [[date_d]]/[[date_m]]/[[date_y]] nel [[date_h]]:[[date_i]]" +"pdf04","Pagina [[page_cu]]/[[page_nb]]" +"pdf05","I moduli richiedono l'uso di Adobe Reader 9" +"vue01","HEADER" +"vue02","FOOTER" +"vue03","PAGINA" +"vue04","Visualization" diff --git a/Societes/ric/Html2pdf/lib/locale/nl.csv b/Societes/ric/Html2pdf/lib/locale/nl.csv new file mode 100755 index 00000000..696aae64 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/locale/nl.csv @@ -0,0 +1,21 @@ +"err01","De tag <[[OTHER]]> bestaat nog niet.

      Om deze toe te voegen, gebruik de methods o_[[OTHER]] (om te openen) en c_[[OTHER]] (om te sluiten) volgens het model van de bestaande tags.

      Als u deze methods maakt, stuur deze dan a.u.b. via e-mail naar webmaster@html2pdf.fr voor opname in de volgende versie van HTML2PDF." +"err02","Zin van 1000 regels => te lang
      Zin : [[OTHER_0]]
      Kaderbreedte : [[OTHER_1]]
      Tekstlengte : [[OTHER_2]]
      " +"err03","Ongeldige HTML code, overvloedig afgesloten tag : <[[OTHER]]>" +"err04","Ongeldige HTML code, de tags zijn niet correct afgesloten.
      Status :
      [[OTHER]]
      " +"err05","Ongeldige HTML code, alle tags dienen te zijn gesloten.
      Status :
      [[OTHER]]
      " +"err06","Kan afbeelding niet laden: [[OTHER]]" +"err07","De inhoud van de cel () past niet op een pagina" +"err08","<[[OTHER]]> tag not in a <DRAW> tag" +"err09","The using of the <[[OTHER_0]]>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI" +"txt01","Fout nr" +"txt02","Bestand :" +"txt03","Regel :" +"pdf01","Document gemaakt op [[date_d]]-[[date_m]]-[[date_y]]" +"pdf02","Document gemaakt om [[date_h]]:[[date_i]]" +"pdf03","Document gemaakt op [[date_d]]-[[date_m]]-[[date_y]] om [[date_h]]:[[date_i]]" +"pdf04","Pagina [[page_cu]] van [[page_nb]]" +"pdf05","De formulieren vereisen het gebruik van Adobe Reader 9" +"vue01","Paginakop" +"vue02","Paginavoet" +"vue03","Pagina" +"vue04","Bekijken" diff --git a/Societes/ric/Html2pdf/lib/locale/pt.csv b/Societes/ric/Html2pdf/lib/locale/pt.csv new file mode 100755 index 00000000..faa0d6f0 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/locale/pt.csv @@ -0,0 +1,21 @@ +"err01","A tag <[[OTHER]]> ainda não existe.

      Se você quer inserí-la, deve criar os métodos o_[[OTHER]] (para abrí-la) e c_[[OTHER]] (para fechá-la) seguindo o modelo das tags existentes.

      Se você criar novos métodos, os envie para webmaster@html2pdf.fr para que as próximas versões de HTML2PDF, e o restante do mundo se beneficie com isso." +"err02","Frase de 1000 linhas => muito grande
      Frase : [[OTHER_0]]
      Tamanho do quadro : [[OTHER_1]]
      Tamanho do texto : [[OTHER_2]]
      " +"err03","Código HTML não válido, uma tag está com fechamento sobrando : <[[OTHER]]>" +"err04","Código HTML não válido, as tags não estão fechadas na ordem correta.
      Estado :
      [[OTHER]]
      " +"err05","Código HTML não válido, todas as tags devem ser fechadas.
      Estado :
      [[OTHER]]
      " +"err06","Impossível carregar imagem [[OTHER]]" +"err07","O conteúdo de uma tag TD não se encaixa em apenas uma página" +"err08","<[[OTHER]]> tag not in a <DRAW> tag" +"err09","The using of the <[[OTHER_0]]>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI" +"txt01","ERRO n°" +"txt02","Arquivo :" +"txt03","Linha :" +"pdf01","Documento generado em [[date_d]]/[[date_m]]/[[date_y]]" +"pdf02","Documento generado às [[date_h]]:[[date_i]]" +"pdf03","Documento generado em [[date_d]]/[[date_m]]/[[date_y]] às [[date_h]]:[[date_i]]" +"pdf04","Página [[page_cu]]/[[page_nb]]" +"pdf05","Os formulários exigem a utilização do Adobe Reader 9" +"vue01","CABEÇALHO" +"vue02","RODAPÉ" +"vue03","PÁGINA" +"vue04","Visualização" diff --git a/Societes/ric/Html2pdf/lib/locale/tr.csv b/Societes/ric/Html2pdf/lib/locale/tr.csv new file mode 100755 index 00000000..883d5b82 --- /dev/null +++ b/Societes/ric/Html2pdf/lib/locale/tr.csv @@ -0,0 +1,21 @@ +"err01","<[[OTHER]]> etiketi bulunamadý.

      Eklemek isterseniz, o_[[OTHER]] þeklinde açýp, c_[[OTHER]] þeklinde kapatabilirsiniz.

      Bu þekilde etiketler üretirseniz lütfen daha sonraki HTML2PDF versiyonuna eklenmek üzere bana gönderin. ( webmaster@html2pdf.fr )." +"err02","Ýçerik 1000 satýrdan fazla ve gerekenden uzun
      Konu : [[OTHER_0]]
      Geniþlik : [[OTHER_1]]
      Yazý boyutu : [[OTHER_2]]
      " +"err03","HTML kodu hatalý, etiket birden fazla defa kapatýlmýþ: <[[OTHER]]>" +"err04","HTML kodu hatalý, etiketler gereken düzen içinde kapatýlmamýþ.
      Durum :
      [[OTHER]]
      " +"err05","HTML kodu hatalý, bütün etiketler kapatýlmalý.
      Durum :
      [[OTHER]]
      " +"err06","Resim dosyasý okunamýyor [[OTHER]]" +"err07","TD içeriði bir sayfaya sýðmýyor" +"err08","<[[OTHER]]> tag not in a <DRAW> tag" +"err09","The using of the <[[OTHER_0]]>> tag has changed, you can not use [[OTHER_1]] anymore. Read the WIKI" +"txt01","HATA n°" +"txt02","Dosya :" +"txt03","Satýr :" +"pdf01","Doküman üretilme tarihi [[date_y]]-[[date_m]]-[[date_d]]" +"pdf02","Doküman üretilme tarihi [[date_h]]:[[date_i]]" +"pdf03","Doküman üretilme tarihi [[date_y]]-[[date_m]]-[[date_d]] saati [[date_h]]:[[date_i]]" +"pdf04","Sayfa [[page_cu]]/[[page_nb]]" +"pdf05","Adobe Reader 9 gerektirir" +"vue01","DOSYA ÜSTÜ" +"vue02","DOSYA ALTI" +"vue03","SAYFA" +"vue04","Görünüm" diff --git a/Societes/ric/Js/societe.js b/Societes/ric/Js/societe.js new file mode 100755 index 00000000..d678f2d5 --- /dev/null +++ b/Societes/ric/Js/societe.js @@ -0,0 +1,19 @@ +// focntions spécifiques à la sosciété + +/* +function college_police() +{ + if ($("#idPolice_C" ).val()>"") + { + window.location.assign($("#racineWeb" ).val()+"Collegepolice/"); + } +} +*/ + +function tester_js_sosiete() +{ + v_msg="Spécifique à BICOR-VIE!"; + v_msgEng="Spécial for BICOR-VIE!"; + alert_ebene(v_msg, v_msgEng); +} + diff --git a/Societes/ric/Logos/fond.png b/Societes/ric/Logos/fond.png new file mode 100644 index 00000000..ba9cd7ee Binary files /dev/null and b/Societes/ric/Logos/fond.png differ diff --git a/Societes/ric/Logos/garants/tests_l:ogo b/Societes/ric/Logos/garants/tests_l:ogo new file mode 100644 index 00000000..dc81c57c --- /dev/null +++ b/Societes/ric/Logos/garants/tests_l:ogo @@ -0,0 +1 @@ +tests_l:ogo \ No newline at end of file diff --git a/Societes/ric/Logos/logo_societe.png b/Societes/ric/Logos/logo_societe.png new file mode 100755 index 00000000..b7804f5b Binary files /dev/null and b/Societes/ric/Logos/logo_societe.png differ diff --git a/Societes/ric/Logos/logo_societe_ebene.png b/Societes/ric/Logos/logo_societe_ebene.png new file mode 100755 index 00000000..0602b334 Binary files /dev/null and b/Societes/ric/Logos/logo_societe_ebene.png differ diff --git a/Societes/ric/Photos/2175220_259321.bin b/Societes/ric/Photos/2175220_259321.bin new file mode 100755 index 00000000..f6841d82 Binary files /dev/null and b/Societes/ric/Photos/2175220_259321.bin differ diff --git a/Societes/ric/Photos/2175230_546947.bin b/Societes/ric/Photos/2175230_546947.bin new file mode 100755 index 00000000..cbf1c094 Binary files /dev/null and b/Societes/ric/Photos/2175230_546947.bin differ diff --git a/Societes/ric/Photos/2176634_654536.bin b/Societes/ric/Photos/2176634_654536.bin new file mode 100755 index 00000000..3ccf1a7f Binary files /dev/null and b/Societes/ric/Photos/2176634_654536.bin differ diff --git a/Societes/ric/Photos/2176636_401611.bin b/Societes/ric/Photos/2176636_401611.bin new file mode 100755 index 00000000..df92b9e4 Binary files /dev/null and b/Societes/ric/Photos/2176636_401611.bin differ diff --git a/Societes/ric/Photos/2176636_401611.jpg b/Societes/ric/Photos/2176636_401611.jpg new file mode 100755 index 00000000..1c40239b Binary files /dev/null and b/Societes/ric/Photos/2176636_401611.jpg differ diff --git a/Societes/ric/Photos/2249016_191857.bin b/Societes/ric/Photos/2249016_191857.bin new file mode 100755 index 00000000..f9853eef Binary files /dev/null and b/Societes/ric/Photos/2249016_191857.bin differ diff --git a/Societes/ric/Photos/ESI0003992001_153790.bin b/Societes/ric/Photos/ESI0003992001_153790.bin new file mode 100755 index 00000000..2e6b07cd Binary files /dev/null and b/Societes/ric/Photos/ESI0003992001_153790.bin differ diff --git a/Societes/ric/Photos/ESI0003992001_222994.bin b/Societes/ric/Photos/ESI0003992001_222994.bin new file mode 100755 index 00000000..4eab182c Binary files /dev/null and b/Societes/ric/Photos/ESI0003992001_222994.bin differ diff --git a/Societes/ric/Photos/ESI0003992001_493106.bin b/Societes/ric/Photos/ESI0003992001_493106.bin new file mode 100755 index 00000000..53ddb478 Binary files /dev/null and b/Societes/ric/Photos/ESI0003992001_493106.bin differ diff --git a/Societes/ric/Photos/ESI0003992001_662811.bin b/Societes/ric/Photos/ESI0003992001_662811.bin new file mode 100755 index 00000000..236bc0b1 Binary files /dev/null and b/Societes/ric/Photos/ESI0003992001_662811.bin differ diff --git a/Societes/ric/Photos/ESI6920000204_885724.bin b/Societes/ric/Photos/ESI6920000204_885724.bin new file mode 100755 index 00000000..089a66a7 Binary files /dev/null and b/Societes/ric/Photos/ESI6920000204_885724.bin differ diff --git a/Societes/ric/Photos/ESI6920000204_992914.bin b/Societes/ric/Photos/ESI6920000204_992914.bin new file mode 100755 index 00000000..9c24362b Binary files /dev/null and b/Societes/ric/Photos/ESI6920000204_992914.bin differ diff --git a/Societes/ric/Photos/ESI6924000501_313941.bin b/Societes/ric/Photos/ESI6924000501_313941.bin new file mode 100755 index 00000000..f2531bf4 Binary files /dev/null and b/Societes/ric/Photos/ESI6924000501_313941.bin differ diff --git a/Societes/ric/Photos/ESI6924000501_458449.bin b/Societes/ric/Photos/ESI6924000501_458449.bin new file mode 100755 index 00000000..d7c7bbc4 Binary files /dev/null and b/Societes/ric/Photos/ESI6924000501_458449.bin differ diff --git a/Societes/ric/Photos/ESI6924000501_523338.bin b/Societes/ric/Photos/ESI6924000501_523338.bin new file mode 100755 index 00000000..f3991675 Binary files /dev/null and b/Societes/ric/Photos/ESI6924000501_523338.bin differ diff --git a/Societes/ric/Photos/ESI6924000501_588291.bin b/Societes/ric/Photos/ESI6924000501_588291.bin new file mode 100755 index 00000000..8cc082bd Binary files /dev/null and b/Societes/ric/Photos/ESI6924000501_588291.bin differ diff --git a/Societes/ric/Photos/ESI6924000502_546150.bin b/Societes/ric/Photos/ESI6924000502_546150.bin new file mode 100755 index 00000000..68603b38 Binary files /dev/null and b/Societes/ric/Photos/ESI6924000502_546150.bin differ diff --git a/Societes/ric/Photos/ESI6926000102_941709.bin b/Societes/ric/Photos/ESI6926000102_941709.bin new file mode 100755 index 00000000..54421ea9 Binary files /dev/null and b/Societes/ric/Photos/ESI6926000102_941709.bin differ diff --git a/Societes/ric/Photos/ESI6931000101_900548.bin b/Societes/ric/Photos/ESI6931000101_900548.bin new file mode 100755 index 00000000..362b4118 Binary files /dev/null and b/Societes/ric/Photos/ESI6931000101_900548.bin differ diff --git a/Societes/ric/Photos/ESI6931000103_195456.jpg b/Societes/ric/Photos/ESI6931000103_195456.jpg new file mode 100755 index 00000000..a2f33542 Binary files /dev/null and b/Societes/ric/Photos/ESI6931000103_195456.jpg differ diff --git a/Societes/ric/Photos/ESI6931000103_233698.jpg b/Societes/ric/Photos/ESI6931000103_233698.jpg new file mode 100755 index 00000000..a2f33542 Binary files /dev/null and b/Societes/ric/Photos/ESI6931000103_233698.jpg differ diff --git a/Societes/ric/Photos/ESI6931000103_372773.bin b/Societes/ric/Photos/ESI6931000103_372773.bin new file mode 100755 index 00000000..70fd0843 Binary files /dev/null and b/Societes/ric/Photos/ESI6931000103_372773.bin differ diff --git a/Societes/ric/Photos/ESI6931000103_372773.jpg b/Societes/ric/Photos/ESI6931000103_372773.jpg new file mode 100755 index 00000000..a2f33542 Binary files /dev/null and b/Societes/ric/Photos/ESI6931000103_372773.jpg differ diff --git a/Societes/ric/Photos/ESI6932000101_343040.bin b/Societes/ric/Photos/ESI6932000101_343040.bin new file mode 100755 index 00000000..dfcfb52d Binary files /dev/null and b/Societes/ric/Photos/ESI6932000101_343040.bin differ diff --git a/Societes/ric/Photos/ESI6932000101_705629.bin b/Societes/ric/Photos/ESI6932000101_705629.bin new file mode 100755 index 00000000..2be6f175 Binary files /dev/null and b/Societes/ric/Photos/ESI6932000101_705629.bin differ diff --git a/Societes/ric/Photos/ESI6932000101_951389.bin b/Societes/ric/Photos/ESI6932000101_951389.bin new file mode 100755 index 00000000..f429393e Binary files /dev/null and b/Societes/ric/Photos/ESI6932000101_951389.bin differ diff --git a/Societes/ric/Photos/ESI6932000102_607877.bin b/Societes/ric/Photos/ESI6932000102_607877.bin new file mode 100755 index 00000000..ec553ac1 Binary files /dev/null and b/Societes/ric/Photos/ESI6932000102_607877.bin differ diff --git a/Societes/ric/Photos/ESI6932000103_92247.bin b/Societes/ric/Photos/ESI6932000103_92247.bin new file mode 100755 index 00000000..b7afca98 Binary files /dev/null and b/Societes/ric/Photos/ESI6932000103_92247.bin differ diff --git a/Societes/ric/Photos/ESI6932000104_356513.bin b/Societes/ric/Photos/ESI6932000104_356513.bin new file mode 100755 index 00000000..5cb89d80 Binary files /dev/null and b/Societes/ric/Photos/ESI6932000104_356513.bin differ diff --git a/Societes/ric/Photos/ESI6932000104_986916.bin b/Societes/ric/Photos/ESI6932000104_986916.bin new file mode 100755 index 00000000..4e932679 Binary files /dev/null and b/Societes/ric/Photos/ESI6932000104_986916.bin differ diff --git a/Societes/ric/Photos/ESI6933000101_125387.bin b/Societes/ric/Photos/ESI6933000101_125387.bin new file mode 100755 index 00000000..16777ed5 Binary files /dev/null and b/Societes/ric/Photos/ESI6933000101_125387.bin differ diff --git a/Societes/ric/Photos/ESI6933000101_262415.bin b/Societes/ric/Photos/ESI6933000101_262415.bin new file mode 100755 index 00000000..9cf274e4 Binary files /dev/null and b/Societes/ric/Photos/ESI6933000101_262415.bin differ diff --git a/Societes/ric/Photos/ESI6933000102_614174.bin b/Societes/ric/Photos/ESI6933000102_614174.bin new file mode 100755 index 00000000..c22c8e44 Binary files /dev/null and b/Societes/ric/Photos/ESI6933000102_614174.bin differ diff --git a/Societes/ric/Photos/ESI6933000102_832977.bin b/Societes/ric/Photos/ESI6933000102_832977.bin new file mode 100755 index 00000000..61bce848 Binary files /dev/null and b/Societes/ric/Photos/ESI6933000102_832977.bin differ diff --git a/Societes/ric/Photos/ESI6933000102_832977.jpg b/Societes/ric/Photos/ESI6933000102_832977.jpg new file mode 100755 index 00000000..d52db0da Binary files /dev/null and b/Societes/ric/Photos/ESI6933000102_832977.jpg differ diff --git a/Societes/ric/Photos/ESI6933000102_997363.bin b/Societes/ric/Photos/ESI6933000102_997363.bin new file mode 100755 index 00000000..b0878d95 Binary files /dev/null and b/Societes/ric/Photos/ESI6933000102_997363.bin differ diff --git a/Societes/ric/Photos/ESI6933000103_28793.bin b/Societes/ric/Photos/ESI6933000103_28793.bin new file mode 100755 index 00000000..ee0fbf92 Binary files /dev/null and b/Societes/ric/Photos/ESI6933000103_28793.bin differ diff --git a/Societes/ric/Photos/ESI6933000103_28793.jpg b/Societes/ric/Photos/ESI6933000103_28793.jpg new file mode 100755 index 00000000..6ffae75f Binary files /dev/null and b/Societes/ric/Photos/ESI6933000103_28793.jpg differ diff --git a/Societes/ric/Photos/ESI6933000103_348886.bin b/Societes/ric/Photos/ESI6933000103_348886.bin new file mode 100755 index 00000000..a3908e9a Binary files /dev/null and b/Societes/ric/Photos/ESI6933000103_348886.bin differ diff --git a/Societes/ric/Photos/ESI6939000501_744100.bin b/Societes/ric/Photos/ESI6939000501_744100.bin new file mode 100644 index 00000000..edf62bf7 Binary files /dev/null and b/Societes/ric/Photos/ESI6939000501_744100.bin differ diff --git a/Societes/ric/Photos/ESI6939000502_178723.bin b/Societes/ric/Photos/ESI6939000502_178723.bin new file mode 100644 index 00000000..45e7f37a Binary files /dev/null and b/Societes/ric/Photos/ESI6939000502_178723.bin differ diff --git a/Societes/ric/Photos/ESI6939000503_684446.bin b/Societes/ric/Photos/ESI6939000503_684446.bin new file mode 100644 index 00000000..5435da72 Binary files /dev/null and b/Societes/ric/Photos/ESI6939000503_684446.bin differ diff --git a/Societes/ric/Photos/ESI6940000101_243239.bin b/Societes/ric/Photos/ESI6940000101_243239.bin new file mode 100644 index 00000000..e86c6a5b Binary files /dev/null and b/Societes/ric/Photos/ESI6940000101_243239.bin differ diff --git a/Societes/ric/Photos/ESI6941000101_683864.bin b/Societes/ric/Photos/ESI6941000101_683864.bin new file mode 100644 index 00000000..f62319a1 Binary files /dev/null and b/Societes/ric/Photos/ESI6941000101_683864.bin differ diff --git a/Societes/ric/Photos/ESI6941000201_180639.bin b/Societes/ric/Photos/ESI6941000201_180639.bin new file mode 100644 index 00000000..958408ff Binary files /dev/null and b/Societes/ric/Photos/ESI6941000201_180639.bin differ diff --git a/Societes/ric/Photos/ESI6941000301_810980.bin b/Societes/ric/Photos/ESI6941000301_810980.bin new file mode 100644 index 00000000..f4a377aa Binary files /dev/null and b/Societes/ric/Photos/ESI6941000301_810980.bin differ diff --git a/Societes/ric/Tarifs/Controleur/Ajaxactesgarantiestatus.php b/Societes/ric/Tarifs/Controleur/Ajaxactesgarantiestatus.php new file mode 100755 index 00000000..8b40ed43 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Ajaxactesgarantiestatus.php @@ -0,0 +1,60 @@ +trancheage = (new Trancheage())->getListe(); + $this->capitalfraisfuneraire = (new Capitalfraisfuneraire())->getListe(); + $periodicite = $this->periodicite->getListe(); + + $idPolice = $_SESSION['idPolice_d_C']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $_SESSION['choixForfait'] = "forfait"; + + /*if(isset($_SESSION['idGarbase'])){ + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + //unset($_SESSION['idGarbase']); + }else{ + $codeLienParente = $this->requete->getParametreFormulaire("codeLienParente"); + $_SESSION['codeLienParente'] = $codeLienParente; + $codeGarantie = $this->requete->getParametreFormulaire("codeGarantie"); + $_SESSION['codeGarantie'] = $codeGarantie; + } + */ + $idGarbase = $this->requete->getParametreFormulaire("idGarbase"); + $_SESSION['idGarbase'] = $idGarbase; + $codeLienParente = $this->requete->getParametreFormulaire("codeLienParente"); + $_SESSION['codeLienParente'] = $codeLienParente; + $codeGarantie = $this->requete->getParametreFormulaire("codeGarantie"); + $_SESSION['codeGarantie'] = $codeGarantie; + + $forfaitTaux = $this->college_temp->getTauxForfait(); + $observation = $this->college_temp->getObservationplafond(); + $nomStatus = $this->college_temp->getNomStatus($codeLienParente); + $garanties_lien_parente = $this->college_temp->getGarantieLienParente($idCollegeTemp, $codeLienParente); + $prime_colleges = $this->college_temp->getPrimesCollege($idCollegeTemp); + $collegelienparenteTemp = $this->college_temp->getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente); + $garantie = $this->college_temp->getNomGarantie($codeGarantie); + //var_dump($garantie);die(); + + $ticketModerateurStatut = $collegelienparenteTemp['ticketModerateurStatus']; + $codeProduit = $collegelienparenteTemp['codeProduit']; + //$_SESSION['codeProduit'] = $codeProduit; + + + $familleacte = $this->familleacte->getFamilleActeGarantie($idCollegeTemp,$codeProduit,$codeLienParente,$codeGarantie,$ticketModerateurStatut); + + + // + $actes = $this->familleacte->getActesGarantieLienParente($idCollegeTemp,$codeProduit,$codeLienParente,$codeGarantie,$ticketModerateurStatut); + + + $this->genererVueAjax(array + ('trancheage' => $this->trancheage, 'capitalfraisfuneraire' => $this->capitalfraisfuneraire, + 'prime_colleges' => $prime_colleges, 'collegelienparenteTemp' => $collegelienparenteTemp, + 'garanties_lien_parente' => $garanties_lien_parente,'forfaitTaux' => $forfaitTaux, + 'nomStatus' => $nomStatus, 'familleacte' => $familleacte, 'garantie' => $garantie, + 'periodicite' => $periodicite,'actes' => $actes, 'observation' => $observation + )); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Ajaxcorpsacte.php b/Societes/ric/Tarifs/Controleur/Ajaxcorpsacte.php new file mode 100755 index 00000000..af987a21 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Ajaxcorpsacte.php @@ -0,0 +1,14 @@ +periodicite->getListe(); + $forfaitTaux = $this->college_temp->getTauxForfait(); + $observation = $this->college_temp->getObservationplafond(); + + $_SESSION['choixForfait'] = "forfait"; + + $actes = $this->familleacte->getActe(); + + + $this->genererVueAjax(array('forfaitTaux' => $forfaitTaux,'actes' => $actes, + 'periodicite' => $periodicite,'observation' => $observation)); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Ajaxcorpsfamilleacte.php b/Societes/ric/Tarifs/Controleur/Ajaxcorpsfamilleacte.php new file mode 100755 index 00000000..4d4137d0 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Ajaxcorpsfamilleacte.php @@ -0,0 +1,12 @@ +periodicite->getListe(); + $forfaitTaux = $this->college_temp->getTauxForfait(); + $observation = $this->college_temp->getObservationplafond(); + $familleacte = $this->familleacte->getFamilleacte(); + + $_SESSION['choixForfait'] = "forfait"; + + $this->genererVueAjax(array('forfaitTaux' => $forfaitTaux,'familleacte' => $familleacte, + 'periodicite' => $periodicite,'observation' => $observation)); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Ajaxgarantiescollege.php b/Societes/ric/Tarifs/Controleur/Ajaxgarantiescollege.php new file mode 100755 index 00000000..fa5533e5 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Ajaxgarantiescollege.php @@ -0,0 +1,43 @@ +trancheage = (new Trancheage())->getListe(); + $this->capitalfraisfuneraire = (new Capitalfraisfuneraire())->getListe(); + + $idPolice = ($_SESSION['modeDevis'] == "0") ? $_SESSION['idPolice_C'] : $_SESSION['idPolice_d_C']; + + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $codeProduit = $_SESSION['codeProduit']; + + $reseausoins = $this->reseausoins->getReseauProduit($codeProduit); + + $collegeTemp = $this->college_temp->getCollegeTemp($idCollegeTemp); + $codeLienParente = $this->requete->getParametreFormulaire("codeLienParente"); + + $_SESSION['codeLienParente']= $codeLienParente; + + $forfaitTaux = $this->college_temp->getTauxForfait(); + $nomStatus = $this->college_temp->getNomStatus($codeLienParente); + $garanties_lien_parente = $this->college_temp->getGarantieLienParente($idCollegeTemp, $codeLienParente); + + $prime_colleges = $this->college_temp->getPrimesCollege($idCollegeTemp); + $collegelienparenteTemp = $this->college_temp->getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente); + $populationstatut = $this->college_temp->getPopulationStatut($idCollegeTemp, $codeLienParente); + $lienParente = $this->college_temp->getNomStatus($codeLienParente); + + + $forfaitHonoraire = $this->college_temp->getTauxForfait($forfaitHonoraire ); + $forfaitAppelFond = $this->college_temp->getTauxForfait( $forfaitAppelFond ); + $forfaitAppelCotisation = $this->college_temp->getTauxForfait($forfaitAppelCotisation ); + + + $this->genererVueAjax( + array('trancheage' => $this->trancheage, 'capitalfraisfuneraire' => $this->capitalfraisfuneraire, + 'prime_colleges' => $prime_colleges, 'collegelienparenteTemp' => $collegelienparenteTemp, + 'garanties_lien_parente' => $garanties_lien_parente,'forfaitTaux' => $forfaitTaux, + 'nomStatus' => $nomStatus,'collegeTemp' => $collegeTemp,'reseausoins' => $reseausoins, + 'populationstatut' => $populationstatut, 'lienParente' => $lienParente,'forfaitHonoraire' => $forfaitHonoraire, 'forfaitAppelFond' => $forfaitAppelFond, 'forfaitAppelCotisation' => $forfaitAppelCotisation, + )); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Ajaxmajcollege.php b/Societes/ric/Tarifs/Controleur/Ajaxmajcollege.php new file mode 100755 index 00000000..f314d973 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Ajaxmajcollege.php @@ -0,0 +1,84 @@ +trancheage = (new Trancheage())->getListe(); + $this->capitalfraisfuneraire = (new Capitalfraisfuneraire())->getListe(); + $this->lienparente_societe = (new Lienparente_societe())->getListe(); + + + $idPolice = ($_SESSION['modeDevis'] == "0") ? $_SESSION['idPolice_C'] : $_SESSION['idPolice_d_C']; + $codeGcAssureur = ($_SESSION['modeDevis'] == "0") ? $_SESSION['codeGcAssureur'] : $_SESSION['codeGcAssureur_d']; + + + + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + //var_dump($idCollegeTemp); + + $budgetDefini = ($_SESSION['modeDevis'] == "0") ? $_SESSION['budgetDefini_C'] : "0"; + $codeTypeGarant = $_SESSION['codeTypeGarant']; + + + + $codeProduit = $_SESSION['codeProduit']; + + $codeTypeTarifActe = "TCOL"; + + $typeTarifActe = $this->college_temp->getTypeTarifActe(); + + + $tarifacte = $this->tarifacte->getTarifActeByType($codeTypeTarifActe); + + $produit = $this->produit->getProduitGarant($codeGcAssureur); + + $collegetype = $this->produit->getListeCollegeType(); + $etendueterritoire = $this->produit->getlisteTerritoire(); + $typeremboursement = $this->produit->getlisteTypeRemboursement(); + + $tm = $this->produit->getTicketModerateurProduit($codeProduit, $codeGcAssureur); + + $ticketModerateurCollege = $tm['ticketModerateur']; + + $collegeTemp = $this->college_temp->getCollegeTemp($idCollegeTemp); + + $_SESSION['nomGarant'] = $this->college_temp->getNomGarant($codeGcAssureur); + + $bareme = $this->college_temp->getBaremeProduit($codeProduit, $codeGcAssureur); + + //$tarifacte = $this->tarifacte->getTarifActeByType($codeTypeTarifActe); + $reseausoins = $this->reseausoins->getReseauProduit($codeProduit); + + $garantiesbase = $this->college_temp->getGarBaseCollege($idCollegeTemp); + $garoptionnelles = $this->college_temp->getGarOptCollege($idCollegeTemp); + $garoptacquises = $this->college_temp->getGarOptCollegeAcq($idCollegeTemp); + $tableau_prestations = $this->college_temp->getPrestation($idCollegeTemp); + + $codeLienParente = $_SESSION['codeLienParente_C']; + $garanties_lien_parente = $this->college_temp->getGarantieLienParente($idCollegeTemp, $codeLienParente); + $prime_colleges = $this->college_temp->getPrimesCollege($idCollegeTemp); + $collegelienparenteTemp = $this->college_temp->getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente); + //$typeTarifActe = $this->college_temp->getTypeTarifActe($codeGcAssureur); + $forfaitTaux = $this->college_temp->getTauxForfait(); + $lienParente = $this->college_temp->getNomStatus($codeLienParente); + + $collegelienparenteTemp = $this->college_temp->getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente); + $baseTarif = $this->college_temp->getBaseTarifCollege(); + + $plafondFamille = $this->college_temp->getPlafondFamille($codeProduit,$codeGcAssureur); + $plafondIndividu = $this->college_temp->getPlafondIndividu($codeProduit,$codeGcAssureur); + + $optionstarif = ($_SESSION['modeDevis'] == "0") ? array() : $this->college_temp->getoptionstarif($idPolice); + + $this->genererVueAjax(array('collegeTemp' => $collegeTemp, 'produit' => $produit, 'collegetype' => $collegetype, + 'garantiesbase' => $garantiesbase, 'garoptionnelles' => $garoptionnelles, 'etendueterritoire' => $etendueterritoire, + 'garoptacquises' => $garoptacquises, 'rachattm' => $this->rachattm, 'typeremboursement' => $typeremboursement, + 'tableau_prestations' => $tableau_prestations, 'ouinonimposerplafond' => $this->ouinonimposerplafond, + 'trancheage' => $this->trancheage, 'capitalfraisfuneraire' => $this->capitalfraisfuneraire,'typeTarifActe'=>$typeTarifActe, + 'prime_colleges' => $prime_colleges, 'lienparente_societe' => $this->lienparente_societe, 'ouinonbudget' => $this->ouinonbudget, + 'collegelienparenteTemp' => $collegelienparenteTemp, 'garanties_lien_parente' => $garanties_lien_parente, + 'reseausoins' => $reseausoins,'tarifacte' => $tarifacte,'forfaitTaux' => $forfaitTaux,'lienParente' => $lienParente, + 'bareme' => $bareme,'ticketModerateurCollege' => $ticketModerateurCollege,'baseTarif' => $baseTarif,'plafondFamille'=>$plafondFamille, + 'plafondIndividu' => $plafondIndividu, 'optionstarif' => $optionstarif)); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Ajaxparticularitestatuscollege.php b/Societes/ric/Tarifs/Controleur/Ajaxparticularitestatuscollege.php new file mode 100755 index 00000000..60420bc4 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Ajaxparticularitestatuscollege.php @@ -0,0 +1,16 @@ +requete->getParametreFormulaire("codeLienParente"); + + $lienParente = $this->college_temp->getNomStatus($codeLienParente); + + var_dump($idCollegeTemp, $codeLienParente); + + $collegelienparenteTemp = $this->college_temp->getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente); + + $this->genererVueAjax(array('lienParente' => $lienParente, + 'collegelienparenteTemp' => $collegelienparenteTemp)); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Ajaxprimescategorie.php b/Societes/ric/Tarifs/Controleur/Ajaxprimescategorie.php new file mode 100755 index 00000000..c77612a6 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Ajaxprimescategorie.php @@ -0,0 +1,40 @@ +requete->getParametreFormulaire("codeProduit"); + + $codeBaseTarification = $this->requete->getParametreFormulaire("codeBaseTarification"); + + $prime_colleges = $this->college_temp->changercategorieprimecollege_temp($codeProduit, $codeGcAssureur); + + $forfaitTaux = $this->college_temp->getTauxForfait(); + + $plafondFamille = $this->college_temp->getPlafondFamille($codeProduit,$codeGcAssureur); + + $plafondIndividu = $this->college_temp->getPlafondIndividu($codeProduit,$codeGcAssureur); + + $primesTrancheAge = $this->college_temp->getPrimeTrancheAge($codeProduit,$codeGcAssureur); + + $primesTotalTrancheAge = $this->college_temp->getPrimeTotalTrancheAge($codeProduit,$codeGcAssureur); + + $codeModecalculPrime = $this->college_temp->getModecalculprimeproduit($codeProduit,$codeGcAssureur); + + $this->genererVueAjax(array('prime_colleges' => $prime_colleges, + 'forfaitTaux' => $forfaitTaux, + 'plafondFamille' => $plafondFamille, + 'plafondIndividu' => $plafondIndividu, + 'primesTrancheAge' => $primesTrancheAge, + 'codeModecalculPrime' => $codeModecalculPrime, + 'codeBaseTarification' => $codeBaseTarification, + 'primesTotalTrancheAge' => $primesTotalTrancheAge, + 'ouinonautoriser' => $this->ouinonautoriser + )); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Ajaxrecapitulercollege.php b/Societes/ric/Tarifs/Controleur/Ajaxrecapitulercollege.php new file mode 100755 index 00000000..38c037a2 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Ajaxrecapitulercollege.php @@ -0,0 +1,15 @@ +college_temp->getCollegeTemp($idCollegeTemp); + + + $codeModecalculPrime = $this->college_temp->getModecalculprimeCollegeTemp($idCollegeTemp); + + $this->genererVueAjax(array( + 'collegeTemp' => $collegeTemp, + 'codeModecalculPrime' => $codeModecalculPrime + )); +?> + diff --git a/Societes/ric/Tarifs/Controleur/Ajaxrecapitulerconsultercollege.php b/Societes/ric/Tarifs/Controleur/Ajaxrecapitulerconsultercollege.php new file mode 100755 index 00000000..214a81e0 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Ajaxrecapitulerconsultercollege.php @@ -0,0 +1,14 @@ +college_temp->getCollegeTemp($idCollegeTemp); + + $codeGcAssureur = $collegeTemp['codeGcAssureur']; + $codeProduit = $collegeTemp['codeProduit']; + + $codeModecalculPrime = $this->college_temp->getModecalculprimeproduit($codeProduit,$codeGcAssureur); + + $this->genererVueAjax(array('collegeTemp' => $collegeTemp, 'codeModecalculPrime' => $codeModecalculPrime)); +?> + diff --git a/Societes/ric/Tarifs/Controleur/Avenantannulation.php b/Societes/ric/Tarifs/Controleur/Avenantannulation.php new file mode 100755 index 00000000..68d7e766 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantannulation.php @@ -0,0 +1,34 @@ +editionpieceavenant_societe->get_edition_avenant_annulation(); + + // Un peu d'espace avant le dé but du corps + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("ANNULATION DU CONTRAT")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Cell(0,$ht0,convertirc("De convention expresse entre les parties, le présent contrat est annulé dans tous ses effets."),0,1,'L',false); + $pdf->Cell(0,$ht0,convertirc("Motif : " . $corpsavenant['motifAvenant']),0,1,'L',false); + + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantannulationquittance.php b/Societes/ric/Tarifs/Controleur/Avenantannulationquittance.php new file mode 100755 index 00000000..9873f181 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantannulationquittance.php @@ -0,0 +1,34 @@ +editionpieceavenant_societe->get_edition_avenant_annulation(); + $corpsavenant = $this->editionpieceavenant_societe->get_edition_avenant_annulation_emission(); + + // Un peu d'espace avant le dé but du corps + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("ANNULATION DE QUITTANCE")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Cell(0,$ht0,convertirc("Cet avenant annulle les la facturation des avenant ci-dessous :"),0,1,'L',false); + $pdf->Cell(0,$ht0,convertirc("Motif : " . $corpsavenant['motifAvenant']),0,1,'L',false); + + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantassuresajoutesrenouvellement.php b/Societes/ric/Tarifs/Controleur/Avenantassuresajoutesrenouvellement.php new file mode 100755 index 00000000..c1f3625b --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantassuresajoutesrenouvellement.php @@ -0,0 +1,98 @@ +editionpieceavenant_societe->get_edition_avenant_assures_ajoutes_renouvellement(); + + $donnees_total = null; + + if(count($corpsavenant)>"0") + { + $donnees_total = $corpsavenant['0']; + } + + // Un peu d'espace avant le dé but du corps + // $pdf->Ln(15); + // $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("LISTE DES ASSURES AJOUTES LORS DU RENOUVELLEMENT")),0,1,'C',false); + + + + $idCollege = "0"; + $numeroAdherent = ""; + + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(0,$ht,convertirc(_('Edité le').' : '.heureCouranteLang($_SESSION['lang'])),0,1,'R',false); + + $tp = 7; + + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(6,$ht,convertirc(_("Lien")),1,0,'C',false); + $pdf->Cell(69,$ht,convertirc(_("Bénéficiaire")),1,0,'C',false); + $pdf->Cell(22,$ht,convertirc(_("Numéro")),1,0,'C',false); + $pdf->Cell(8,$ht,convertirc(_("Sexe")),1,0,'C',false); + $pdf->Cell(16,$ht,convertirc(_("Naissance")),1,0,'C',false); + + $pdf->Cell(21,$ht,convertirc(_("Prime HT")),1,0,'C',false); + $pdf->Cell(15,$ht,convertirc((isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes")),1,0,'C',false); + $pdf->Cell(12,$ht,convertirc(_("Cartes")),1,0,'C',false); + $pdf->Cell(21,$ht,convertirc(_("Prime TTC")),1,1,'C',false); + + foreach ($corpsavenant as $donnee) + { + if($idCollege!=$donnee['idCollege']) + { + $pdf->SetFont('Arial','BIU', $tp); + $pdf->Cell(190,$ht,convertirc(_("Collège")." : ".$donnee['libelleCollege']),1,1,'C',false); + } + + if($numeroAdherent!=$donnee['numeroAdherent']) + { + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(190,$ht,convertirc(_("Famille")." : ".$donnee['adherent']),1,1,'C',false); + } + + $pdf->SetFont('Arial','', $tp); + + $pdf->Cell(6,$ht,convertirc($donnee['codeLienParente']),1,0,'C',false); + $pdf->Cell(69,$ht,convertirc($donnee['beneficiaire']),1,0,'L',false); + $pdf->Cell(22,$ht,convertirc($donnee['numeroBeneficiaire']),1,0,'C',false); + $pdf->Cell(8,$ht,convertirc($donnee['sexe']),1,0,'C',false); + $pdf->Cell(16,$ht, dateLang($donnee['dateNaissance'], $_SESSION['lang']),1,0,'C',false); + + $pdf->Cell(21,$ht,convertirc(format_N($donnee['primeHt'])),1,0,'C',false); + $pdf->Cell(15,$ht,convertirc(format_N($donnee['taxe'])),1,0,'C',false); + $pdf->Cell(12,$ht,convertirc(format_N($donnee['fraisCarte'])),1,0,'C',false); + $pdf->Cell(21,$ht,convertirc(format_N($donnee['primeTtc'])),1,1,'C',false); + + $idCollege = $donnee['idCollege']; + $numeroAdherent = $donnee['numeroAdherent']; + } + + // Totaux + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(121,$ht,convertirc(_("Totaux") . " => " . format_N($donnees_total['nbEmissionTotal']) . " " . _("Lignes") ),1,0,'C',false); + + $pdf->Cell(21,$ht,convertirc(format_N($donnees_total['primeHtTotal'])),1,0,'C',false); + $pdf->Cell(15,$ht,convertirc(format_N($donnees_total['taxeTotal'])),1,0,'C',false); + $pdf->Cell(12,$ht,convertirc(format_N($donnees_total['fraisCarteTotal'])),1,0,'C',false); + $pdf->Cell(21,$ht,convertirc(format_N($donnees_total['primeTtcTotal'])),1,1,'C',false); + + // $tp = 9; + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantassuresajoutesrenouvellementexport.php b/Societes/ric/Tarifs/Controleur/Avenantassuresajoutesrenouvellementexport.php new file mode 100755 index 00000000..66a0336e --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantassuresajoutesrenouvellementexport.php @@ -0,0 +1,54 @@ +editionpieceavenant_societe->get_edition_avenant_assures_ajoutes_renouvellement_export(); + + $feuille->setTitle(_('AVT ASS AVEC PRIME')); + + $feuille->setCellValue('A6', "LISTE DES ASSURES AJOUTES LORS DU RENOUVELLEMENT"); + + $feuille->mergeCells('A6:E6'); + + $feuille->getStyle('A6')->getAlignment()->applyFromArray + ( + array + ( + 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, + ) + ); + + $headerXLS = array( + _('Collège'), + _('Famille'), + _('Lien'), + _('Bénéficiaire'), + _("Numéro"), + _('Sexe'), + _('Naissance'), + + _('Téléphone'), + _('E-mail'), + + _('Prime HT'), + _('Taxes'), + _('Cartes'), + _('Prime TTC') + ); + + $dataXLS = array(); + + foreach ($corpsavenant as $donnee) + { + $dataXLS[]=$donnee; + } + + $feuille->fromArray($headerXLS, NULL, 'A7', true); + $feuille->fromArray($dataXLS, NULL, 'A8', true); + + //Forcer le téléchargement vers le navigateur; + $fichier = 'Temp/TMP_AVT_AJ_REN'."_".uniqid().".xlsx"; + + // Piedavenant + // require_once 'Piedavenantexport.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantassuresnonrenouveles.php b/Societes/ric/Tarifs/Controleur/Avenantassuresnonrenouveles.php new file mode 100755 index 00000000..564f6aea --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantassuresnonrenouveles.php @@ -0,0 +1,78 @@ +editionpieceavenant_societe->get_edition_avenant_assures_non_renouveles(); + + $donnees_total = null; + + if(count($corpsavenant)>"0") + { + $donnees_total = $corpsavenant['0']; + } + + // Un peu d'espace avant le dé but du corps + // $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("LISTE DES ASSURES NON RENOUVELES")),0,1,'C',false); + + $idCollege = "0"; + $numeroAdherent = ""; + + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(0,$ht,convertirc(_('Edité le').' : '.heureCouranteLang($_SESSION['lang'])),0,1,'R',false); + + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(10,$ht,convertirc(_("Lien")),1,0,'C',false); + $pdf->Cell(80,$ht,convertirc(_("Bénéficiaire")),1,0,'C',false); + $pdf->Cell(25,$ht,convertirc(_("Numéro")),1,0,'C',false); + $pdf->Cell(10,$ht,convertirc(_("Sexe")),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc(_("Naissance")),1,0,'C',false); + $pdf->Cell(45,$ht,convertirc(_('Téléphone')),1,1,'C',false); + + foreach ($corpsavenant as $donnee) + { + if($idCollege!=$donnee['idCollege']) + { + $pdf->SetFont('Arial','BIU', $tp); + $pdf->Cell(190,$ht,convertirc(_("Collège")." : ".$donnee['libelleCollege']),1,1,'C',false); + } + + if($numeroAdherent!=$donnee['numeroAdherent']) + { + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(190,$ht,convertirc(_("Famille")." : ".$donnee['adherent']),1,1,'C',false); + } + + $pdf->SetFont('Arial','', $tp); + + $pdf->Cell(10,$ht,convertirc($donnee['codeLienParente']),1,0,'C',false); + $pdf->Cell(80,$ht,convertirc($donnee['beneficiaire']),1,0,'L',false); + $pdf->Cell(25,$ht,convertirc($donnee['numeroBeneficiaire']),1,0,'C',false); + $pdf->Cell(10,$ht,convertirc($donnee['sexe']),1,0,'C',false); + $pdf->Cell(20,$ht, dateLang($donnee['dateNaissance'], $_SESSION['lang']),1,0,'C',false); + $pdf->Cell(45,$ht,substr(convertirc($donnee['telephonePortable']),0,28),1,1,'C',false); + + $idCollege = $donnee['idCollege']; + $numeroAdherent = $donnee['numeroAdherent']; + } + + // Totaux + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(190,$ht,convertirc(_("Totaux") . " => " . format_N($donnees_total['nbEmissionTotal']) . " " . _("Lignes") ),1,1,'C',false); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantassuresnonrenouvelesexport.php b/Societes/ric/Tarifs/Controleur/Avenantassuresnonrenouvelesexport.php new file mode 100755 index 00000000..ab286e62 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantassuresnonrenouvelesexport.php @@ -0,0 +1,48 @@ +editionpieceavenant_societe->get_edition_avenant_assures_non_renouveles_export(); + + $feuille->setTitle(_('AVT ASS NON RENOUV')); + + $feuille->setCellValue('A6', "LISTE DES ASSURES NON RENOUVELES"); + + $feuille->mergeCells('A6:E6'); + + $feuille->getStyle('A6')->getAlignment()->applyFromArray + ( + array + ( + 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, + ) + ); + + $headerXLS = array( + _('Collège'), + _('Famille'), + _('Lien'), + _('Bénéficiaire'), + _("Numéro"), + _('Sexe'), + _('Naissance'), + _('Téléphone'), + _('E-mail') + ); + + $dataXLS = array(); + + foreach ($corpsavenant as $donnee) + { + $dataXLS[]=$donnee; + } + + $feuille->fromArray($headerXLS, NULL, 'A7', true); + $feuille->fromArray($dataXLS, NULL, 'A8', true); + + //Forcer le téléchargement vers le navigateur; + $fichier = 'Temp/TMP_AVT_ASS_NON_REN'."_".uniqid().".xlsx"; + + // Piedavenant + // require_once 'Piedavenantexport.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantavoir.php b/Societes/ric/Tarifs/Controleur/Avenantavoir.php new file mode 100755 index 00000000..ca0725db --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantavoir.php @@ -0,0 +1,68 @@ +editionpieceavenant_societe->get_edition_avenant_primes(); + + $pdf->Ln(5); + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0, convertirc(_("FACTURE AVOIR No")) . " " . $entetevenant['idAvenant'] ,0,1,'C',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + $pdf->Cell(0,$ht0, convertirc(_("Détail Facture")) ,0,1,'L',false); + + $pdf->SetFont('Arial','', $tp); + + // $pdf->Ln(5); + + // Rectangle 1 + // $x=53; $y = 95; $w=95; $h=40; $r=3.50; + $x=53; $y = 99; $w=95; $h=40; $r=3.50; + $pdf->RoundedRect($x, $y, $w, $h, $r, '1111'); + + $ht2=7; + $pdf->Cell(110,$ht2,convertirc(_("P Nette")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeNette'])),0,1,'L',false); + + $pdf->Cell(110,$ht2,convertirc(_("Accessoires")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['accessoire'] + $corpsavenant['fraisCarte'])),0,1,'L',false); + + $pdf->Cell(110,$ht2,convertirc(_("Prime HT")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeHt'])),0,1,'L',false); + + $pdf->Cell(110,$ht2,convertirc((isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['taxe'])),0,1,'L',false); + + // Total + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(110,$ht2,convertirc(_("Prime TTC")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtcInitial'])),0,1,'L',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','IU', $tp); + $pdf->Cell(0,6,convertirc(_('Arrêté la présente facture avoir à la somme de').' : '),0,1,'C',false); + $pdf->SetFont('Arial','BI', $tp); + $pdf->SetFillColor(135,206,250); // bleu + $pdf->Cell(0,10, convetirEnLettre(abs($corpsavenant['primeTtcInitial']), $_SESSION['lang'])." ".$_SESSION['devise_C'],1,1,'C',true); + + $pdf->Ln(5); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantchangementcollege.php b/Societes/ric/Tarifs/Controleur/Avenantchangementcollege.php new file mode 100755 index 00000000..a13d3174 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantchangementcollege.php @@ -0,0 +1,65 @@ +editionpieceavenant_societe->get_edition_avenant_changementcollege(); + + $donnees_total = null; + + if(count($corpsavenant)>"0") + { + $donnees_total = $corpsavenant['0']; + } + + // Un peu d'espace avant le dé but du corps + // $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("CHANGEMENT DE COLLGE LORS DU RENOUVELLEMENT")),0,1,'C',false); + + + $idCollegeOld = "0"; + + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(0,$ht,convertirc(_('Edité le').' : '.heureCouranteLang($_SESSION['lang'])),0,1,'R',false); + + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(90,$ht,convertirc(_("Famille")),1,0,'C',false); + $pdf->Cell(25,$ht,convertirc(_("Numéro")),1,0,'C',false); + $pdf->Cell(75,$ht,convertirc(_("Nouveau Collège")),1,1,'C',false); + + foreach ($corpsavenant as $donnee) + { + if($idCollegeOld!=$donnee['idCollegeOld']) + { + $pdf->SetFont('Arial','BIU', $tp); + $pdf->Cell(190,$ht,convertirc(_("Ancien Collège")." : ".$donnee['libelleCollegeOld']),1,1,'C',false); + } + + $pdf->SetFont('Arial','', $tp); + + $pdf->Cell(90,$ht,convertirc($donnee['adherent']),1,0,'L',false); + $pdf->Cell(25,$ht,convertirc($donnee['numeroAdherent']),1,0,'C',false); + $pdf->Cell(75,$ht,convertirc($donnee['libelleCollegeNew']),1,1,'C',false); + + $idCollegeOld = $donnee['idCollegeOld']; + } + + // Totaux + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(190,$ht,convertirc(_("Totaux") . " => " . format_N($donnees_total['nbEmissionTotal']) . " " . _("Lignes") ),1,1,'C',false); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantchangementcollegeavenant.php b/Societes/ric/Tarifs/Controleur/Avenantchangementcollegeavenant.php new file mode 100755 index 00000000..af024c1d --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantchangementcollegeavenant.php @@ -0,0 +1,70 @@ +editionpieceavenant_societe->get_edition_avenant_primes(); + + // Un peu d'espace avant le dé but du corps + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("AVENANT CHANGEMENT DE COLLEGE")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("A la demande du souscripteur et d’un commun accord entre les parties, Les personnes dont la liste est jointe en annexe ont changé de collège. + +Cette opération a généré une quittance de " . format_N($corpsavenant['primeTtc']) . " " . $_SESSION['devise_C'] . " décomptée ainsi qu’il suit :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $ht2=7; + $pdf->Cell(90,$ht2,convertirc(_("P Nette")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeNette'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Accessoires")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['accessoire'] + $corpsavenant['fraisCarte'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Prime HT")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeHt'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc((isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['taxe'])),0,1,'L',false); + + // Total + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(90,$ht2,convertirc(_("Prime TTC")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtcInitial'])),0,1,'L',false); + + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("Il n’est autrement dérogé aux autres termes du présent Contrat."); + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantchangementcollegeexport.php b/Societes/ric/Tarifs/Controleur/Avenantchangementcollegeexport.php new file mode 100755 index 00000000..227913af --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantchangementcollegeexport.php @@ -0,0 +1,43 @@ +editionpieceavenant_societe->get_edition_avenant_changementcollege_export(); + + $feuille->setTitle(_('AVT ASS CGT CLG')); + + $feuille->setCellValue('A6', "CHANGEMENT DE COLLGE LORS DU RENOUVELLEMENT"); + + $feuille->mergeCells('A6:E6'); + + $feuille->getStyle('A6')->getAlignment()->applyFromArray + ( + array + ( + 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, + ) + ); + + $headerXLS = array( + _('Ancien Collège'), + _('Famille'), + _('Numéro'), + _('Nouveau Collège') + ); + + $dataXLS = array(); + + foreach ($corpsavenant as $donnee) + { + $dataXLS[]=$donnee; + } + + $feuille->fromArray($headerXLS, NULL, 'A7', true); + $feuille->fromArray($dataXLS, NULL, 'A8', true); + + //Forcer le téléchargement vers le navigateur; + $fichier = 'Temp/TMP_AVT_CGT_COL'."_".uniqid().".xlsx"; + + // Piedavenant + // require_once 'Piedavenantexport.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantchangementcollegeliste.php b/Societes/ric/Tarifs/Controleur/Avenantchangementcollegeliste.php new file mode 100755 index 00000000..eab1bf45 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantchangementcollegeliste.php @@ -0,0 +1,73 @@ +editionpieceavenant_societe->get_edition_avenant_changementcollege(); + $corpsavenant = $this->editionpieceavenant_societe->get_edition_avenant_changementcollege_beneficiaire(); + + $donnees_total = null; + + if(count($corpsavenant)>"0") + { + $donnees_total = $corpsavenant['0']; + } + + // Un peu d'espace avant le dé but du corps + // $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("LISTE DES PERSONNES AYANT CHANGE DE COLLGE")),0,1,'C',false); + + + $idCollegeOld = "0"; + + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(0,$ht,convertirc(_('Edité le').' : '.heureCouranteLang($_SESSION['lang'])),0,1,'R',false); + + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(90,$ht,convertirc(_("Bénéficiaire")),1,0,'C',false); + $pdf->Cell(25,$ht,convertirc(_("Numéro")),1,0,'C',false); + $pdf->Cell(75,$ht,convertirc(_("Nouveau Collège")),1,1,'C',false); + + foreach ($corpsavenant as $donnee) + { + if($idCollegeOld!=$donnee['idCollegeOld']) + { + $pdf->SetFont('Arial','BIU', $tp); + $pdf->Cell(190,$ht,convertirc(_("Ancien Collège")." : ".$donnee['libelleCollegeOld']),1,1,'C',false); + } + + $pdf->SetFont('Arial','', $tp); + + /* + $pdf->Cell(90,$ht,convertirc($donnee['adherent']),1,0,'L',false); + $pdf->Cell(25,$ht,convertirc($donnee['numeroAdherent']),1,0,'C',false); + $pdf->Cell(75,$ht,convertirc($donnee['libelleCollegeNew']),1,1,'C',false); + */ + + $pdf->Cell(90,$ht,convertirc($donnee['beneficiaire']),1,0,'L',false); + $pdf->Cell(25,$ht,convertirc($donnee['numeroBeneficiaire']),1,0,'C',false); + $pdf->Cell(75,$ht,convertirc($donnee['libelleCollegeNew']),1,1,'C',false); + + + $idCollegeOld = $donnee['idCollegeOld']; + } + + // Totaux + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(190,$ht,convertirc(_("Totaux") . " => " . format_N($donnees_total['nbEmissionTotal']) . " " . _("Lignes") ),1,1,'C',false); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantchangementcollegelisteexport.php b/Societes/ric/Tarifs/Controleur/Avenantchangementcollegelisteexport.php new file mode 100755 index 00000000..ec84c29e --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantchangementcollegelisteexport.php @@ -0,0 +1,43 @@ +editionpieceavenant_societe->get_edition_avenant_changementcollege_export(); + + $feuille->setTitle(_('AVT ASS CGT CLG')); + + $feuille->setCellValue('A6', "CHANGEMENT DE COLLGE PAR AVENANT"); + + $feuille->mergeCells('A6:E6'); + + $feuille->getStyle('A6')->getAlignment()->applyFromArray + ( + array + ( + 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, + ) + ); + + $headerXLS = array( + _('Ancien Collège'), + _('Famille'), + _('Numéro'), + _('Nouveau Collège') + ); + + $dataXLS = array(); + + foreach ($corpsavenant as $donnee) + { + $dataXLS[]=$donnee; + } + + $feuille->fromArray($headerXLS, NULL, 'A7', true); + $feuille->fromArray($dataXLS, NULL, 'A8', true); + + //Forcer le téléchargement vers le navigateur; + $fichier = 'Temp/TMP_AVT_CGT_COL'."_".uniqid().".xlsx"; + + // Piedavenant + // require_once 'Piedavenantexport.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantchangementeffet.php b/Societes/ric/Tarifs/Controleur/Avenantchangementeffet.php new file mode 100755 index 00000000..af53425f --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantchangementeffet.php @@ -0,0 +1,30 @@ +editionpieceavenant_societe->get_edition_avenant_changement_effet(); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("CHANGEMENT DE PRISE D'EFFET")),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("A la demande du souscripteur et d’un commun accord entre les parties, il est convenu que la date de prise d’effet initialement prévu au " . dateLang($corpsavenant['dateEffetInitial']) . " est reportée au " . dateLang($corpsavenant['dateEffet']) . " + +Il n’est rien changé ni dérogé aux autres clauses et conditions du contrat."); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(10); + + require_once 'Piedavenant.php'; +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantconditionsparticulieres.php b/Societes/ric/Tarifs/Controleur/Avenantconditionsparticulieres.php new file mode 100755 index 00000000..be54678b --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantconditionsparticulieres.php @@ -0,0 +1,118 @@ +editionpieceavenant_societe->get_edition_avenant_primes(); + + // Un peu d'espace avant le dé but du corps + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("CONDITIONS PARTICULIERES")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + + $pdf->SetFont('Arial','', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("TEXTE A METTRE ICI")),0,1,'C',false); + +/* + $text = convertirc("A la demande du souscripteur et d’un commun accord entre les parties, il est convenu que les garanties de la police susvisée, sont renouvelées dans tous leurs effets pour la allant du " . dateLang($entetevenant['dateEffet']) . " au " . dateLang($entetevenant['dateFin']) . " pour les familles dont liste en annexe, et ce conformément au tableau des garanties ci-joint."); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $text = convertirc("En conséquence, le Souscripteur s’engage à payer à la signature du présent avenant, la somme de " . format_N($corpsavenant['primeTtc']) . " " . $_SESSION['devise_C'] . " décomptée comme suit :"); + + $pdf->MultiCell(0, $ht, $text); +*/ + + $pdf->Ln(5); + + $ht2=7; + $pdf->Cell(90,$ht2,convertirc(_("P Nette")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeNette'])),0,1,'L',false); + + /* + $pdf->Cell(90,$ht2,convertirc(_("Com Court")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['commission'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Com Commer")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['commissionAutre'])),0,1,'L',false); + */ + + $pdf->Cell(90,$ht2,convertirc(_("Accessoires")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['accessoire'] + $corpsavenant['fraisCarte'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Prime HT")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeHt'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc((isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['taxe'])),0,1,'L',false); + + // Total + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(90,$ht2,convertirc(_("Prime TTC")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtcInitial'])),0,1,'L',false); + + /* + $pdf->Cell(90,$ht2,convertirc(_("Tx Intérêt")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht,convertirc(" : ".$corpsavenant['tauxInteret']),0,1,'L',false); + */ + + /* + $pdf->Cell(90,$ht2,convertirc(_("Intérêts")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['interet'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Nouv Prime")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtc'])),0,1,'L',false); + */ + +/* +primeNette +commission +commissionAutre +primeNetteStat +accessoire +primeHt +taxe +fraisCarte +primeTtcInitial +interet +primeTtc +*/ + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("Somme que le souscripteur s’engage à payer à la signature du présent contrat, les garanties n’étant acquises aux assurés qu’après paiement intégral de la prime ou de la fraction de prime convenue (ART. 13 du code CIMA)."); + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantfacture.php b/Societes/ric/Tarifs/Controleur/Avenantfacture.php new file mode 100755 index 00000000..ba806be0 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantfacture.php @@ -0,0 +1,68 @@ +editionpieceavenant_societe->get_edition_avenant_primes(); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0, _("FACTURE No") . " AV/" . $entetevenant['idAvenant'] ,0,1,'C',false); + + $pdf->SetFont('Arial','BIU', $tp); + $pdf->Cell(0,$ht0, convertirc(_("Détail Facture")) ,0,1,'L',false); + + $pdf->SetFont('Arial','', $tp); + + $x=53; $y = 90; $w=95; $h=40; $r=3.50; + $pdf->RoundedRect($x, $y, $w, $h, $r, '1111'); + + $ht2=7; + $pdf->Cell(110,$ht2,convertirc(_("P Nette")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeNette'])),0,1,'L',false); + + $pdf->Cell(110,$ht2,convertirc(_("Accessoires")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['accessoire'] + $corpsavenant['fraisCarte'])),0,1,'L',false); + + $pdf->Cell(110,$ht2,convertirc(_("Prime HT")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeHt'])),0,1,'L',false); + + $pdf->Cell(110,$ht2,convertirc((isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['taxe'])),0,1,'L',false); + + // Total + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(110,$ht2,convertirc(_("Prime TTC")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtcInitial'])),0,1,'L',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','IU', $tp); + $pdf->Cell(0,6,convertirc(_('Arrêté la présente facture à la somme de').' : '),0,1,'C',false); + $pdf->SetFont('Arial','BI', $tp); + $pdf->SetFillColor(135,206,250); // bleu + $pdf->Cell(0,10, convetirEnLettre($corpsavenant['primeTtcInitial'], $_SESSION['lang'])." ".$_SESSION['devise_C'],1,1,'C',true); + + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BI', 7); + + $text = convertirc("Article 13 du Code CIMA : La prise d’effet du contrat est subordonnée au paiement de la prime. Toutefois, s’il a été +convenu d’un délai de paiement avec l'assureur, le contrat sera résilié de plein droit à défaut de +paiement de la prime dans le délai convenu, la portion de prime courue restant acquise à l’assureur."); + $pdf->MultiCell(0, $ht, $text); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantincorporation.php b/Societes/ric/Tarifs/Controleur/Avenantincorporation.php new file mode 100755 index 00000000..dbaf360d --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantincorporation.php @@ -0,0 +1,115 @@ +editionpieceavenant_societe->get_edition_avenant_primes(); + + // Un peu d'espace avant le dé but du corps + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("AVENANT D’INCORPORATION")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("A la demande du souscripteur et d’un commun accord entre les parties, la (les) personne(s) dont la liste est jointe en annexe est (sont) incorporée(s) au présent contrat aux conditions indiquées à la dite annexe. + +Compte tenu de ce qui précède, il sera perçu au comptant à la signature du présent avenant, la somme de " . format_N($corpsavenant['primeTtc']) . " " . $_SESSION['devise_C'] . " décomptée ainsi qu’il suit :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $text = convertirc("Il en résulte que le sourscripteur paiera, à la signature du présent avenant, la somme de " . format_N($corpsavenant['primeTtc']) . " " . $_SESSION['devise_C'] . ", frais et taxes inclus, selon le détail ci-dessous :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $ht2=7; + $pdf->Cell(90,$ht2,convertirc(_("P Nette")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeNette'])),0,1,'L',false); + + /* + $pdf->Cell(90,$ht2,convertirc(_("Com Court")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['commission'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Com Commer")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['commissionAutre'])),0,1,'L',false); + */ + + $pdf->Cell(90,$ht2,convertirc(_("Accessoires")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['accessoire'] + $corpsavenant['fraisCarte'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Prime HT")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeHt'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc((isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['taxe'])),0,1,'L',false); + + // Total + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(90,$ht2,convertirc(_("Prime TTC")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtcInitial'])),0,1,'L',false); + + /* + $pdf->Cell(90,$ht2,convertirc(_("Tx Intérêt")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht,convertirc(" : ".$corpsavenant['tauxInteret']),0,1,'L',false); + */ + + /* + $pdf->Cell(90,$ht2,convertirc(_("Intérêts")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['interet'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Nouv Prime")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtc'])),0,1,'L',false); + */ + +/* +primeNette +commission +commissionAutre +primeNetteStat +accessoire +primeHt +taxe +fraisCarte +primeTtcInitial +interet +primeTtc +*/ + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("Il n’est autrement dérogé aux autres termes du présent Contrat."); + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantincorporationacte.php b/Societes/ric/Tarifs/Controleur/Avenantincorporationacte.php new file mode 100755 index 00000000..070a7e8f --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantincorporationacte.php @@ -0,0 +1,66 @@ +editionpieceavenant_societe->get_edition_avenant_importation_acte(); + + // Un peu d'espace avant le dé but du corps + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("AVENANT D’INCORPORATION D'ACTE")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("A la demande du souscripteur et d’un commun accord entre les parties, la (les) acte(s) dont la liste est ci-dessous est (sont) incorporé(s) au présent contrat."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(60,$ht,convertirc(_("Collège")),1,0,'C',false); + $pdf->Cell(65,$ht,convertirc(_('Garantie')),1,0,'C',false); + $pdf->Cell(65,$ht,convertirc(_('Acte')),1,1,'C',false); + + // var_dump($corpsavenant); + $pdf->SetFont('Arial','', $tp); + + foreach ($corpsavenant as $donnee) + { + $garantie = convertirc($donnee['garantieEng']); + $acte = convertirc($donnee['acte']); + if (est_anglophone()) + { + $garantie = convertirc($donnee['garantieEng']); + $acte = convertirc($donnee['acteEng']); + } + + $pdf->Cell(60,$ht,convertirc($donnee['libelleCollege']),1,0,'L',false); + $pdf->Cell(65,$ht, $garantie,1,0,'L',false); + $pdf->Cell(65,$ht, $acte,1,1,'L',false); + } + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("Il n’est autrement dérogé aux autres termes du présent Contrat."); + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantincorporationgarantie.php b/Societes/ric/Tarifs/Controleur/Avenantincorporationgarantie.php new file mode 100755 index 00000000..21e94e57 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantincorporationgarantie.php @@ -0,0 +1,62 @@ +editionpieceavenant_societe->get_edition_avenant_importation_garantie(); + + // Un peu d'espace avant le dé but du corps + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("AVENANT D’INCORPORATION DE GARANTIE")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("A la demande du souscripteur et d’un commun accord entre les parties, la (les) garantie(s) dont la liste est ci-dessous est (sont) incorporée(s) au présent contrat."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(95,$ht,convertirc(_("Collège")),1,0,'C',false); + $pdf->Cell(95,$ht,convertirc(_('Garantie')),1,1,'C',false); + + // var_dump($corpsavenant); + $pdf->SetFont('Arial','', $tp); + + foreach ($corpsavenant as $donnee) + { + $garantie = convertirc($donnee['garantieEng']); + if (est_anglophone()) + { + $garantie = convertirc($donnee['garantieEng']); + } + + $pdf->Cell(95,$ht,convertirc($donnee['libelleCollege']),1,0,'L',false); + $pdf->Cell(95,$ht, $garantie,1,1,'L',false); + } + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("Il n’est autrement dérogé aux autres termes du présent Contrat."); + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantlisteassures.php b/Societes/ric/Tarifs/Controleur/Avenantlisteassures.php new file mode 100755 index 00000000..ade52c71 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantlisteassures.php @@ -0,0 +1,78 @@ +editionpieceavenant_societe->get_edition_avenant_listeassures(); + + $donnees_total = null; + + if(count($corpsavenant)>"0") + { + $donnees_total = $corpsavenant['0']; + } + + // Un peu d'espace avant le dé but du corps + // $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("LISTE DES ASSURES SANS PRIMES")),0,1,'C',false); + + $idCollege = "0"; + $numeroAdherent = ""; + + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(0,$ht,convertirc(_('Edité le').' : '.heureCouranteLang($_SESSION['lang'])),0,1,'R',false); + + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(10,$ht,convertirc(_("Lien")),1,0,'C',false); + $pdf->Cell(80,$ht,convertirc(_("Bénéficiaire")),1,0,'C',false); + $pdf->Cell(25,$ht,convertirc(_("Numéro")),1,0,'C',false); + $pdf->Cell(10,$ht,convertirc(_("Sexe")),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc(_("Naissance")),1,0,'C',false); + $pdf->Cell(45,$ht,convertirc(_('Téléphone')),1,1,'C',false); + + foreach ($corpsavenant as $donnee) + { + if($idCollege!=$donnee['idCollege']) + { + $pdf->SetFont('Arial','BIU', $tp); + $pdf->Cell(190,$ht,convertirc(_("Collège")." : ".$donnee['libelleCollege']),1,1,'C',false); + } + + if($numeroAdherent!=$donnee['numeroAdherent']) + { + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(190,$ht,convertirc(_("Famille")." : ".$donnee['adherent']),1,1,'C',false); + } + + $pdf->SetFont('Arial','', $tp); + + $pdf->Cell(10,$ht,convertirc($donnee['codeLienParente']),1,0,'C',false); + $pdf->Cell(80,$ht,convertirc($donnee['beneficiaire']),1,0,'L',false); + $pdf->Cell(25,$ht,convertirc($donnee['numeroBeneficiaire']),1,0,'C',false); + $pdf->Cell(10,$ht,convertirc($donnee['sexe']),1,0,'C',false); + $pdf->Cell(20,$ht, dateLang($donnee['dateNaissance'], $_SESSION['lang']),1,0,'C',false); + $pdf->Cell(45,$ht,substr(convertirc($donnee['telephonePortable']),0,28),1,1,'C',false); + + $idCollege = $donnee['idCollege']; + $numeroAdherent = $donnee['numeroAdherent']; + } + + // Totaux + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(190,$ht,convertirc(_("Totaux") . " => " . format_N($donnees_total['nbEmissionTotal']) . " " . _("Lignes") ),1,1,'C',false); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantlisteassuresajour.php b/Societes/ric/Tarifs/Controleur/Avenantlisteassuresajour.php new file mode 100755 index 00000000..c11d5c61 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantlisteassuresajour.php @@ -0,0 +1,80 @@ +editionpieceavenant_societe->get_edition_avenant_listeassures_a_jour(); + + $donnees_total = null; + + if(count($corpsavenant)>"0") + { + $donnees_total = $corpsavenant['0']; + } + + // Un peu d'espace avant le dé but du corps + // $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("LISTE DES ASSURES A JOUR A LA DATE DE L'AVENANT")),0,1,'C',false); + // Liste assurés à jour à la date avenant + + $idCollege = "0"; + $numeroAdherent = ""; + + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(0,$ht,convertirc(_('Edité le').' : '.heureCouranteLang($_SESSION['lang'])),0,1,'R',false); + + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(10,$ht,convertirc(_("Lien")),1,0,'C',false); + $pdf->Cell(80,$ht,convertirc(_("Bénéficiaire")),1,0,'C',false); + $pdf->Cell(25,$ht,convertirc(_("Numéro")),1,0,'C',false); + $pdf->Cell(10,$ht,convertirc(_("Sexe")),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc(_("Naissance")),1,0,'C',false); + $pdf->Cell(45,$ht,convertirc(_('Téléphone')),1,1,'C',false); + + foreach ($corpsavenant as $donnee) + { + if($idCollege!=$donnee['idCollege']) + { + $pdf->SetFont('Arial','BIU', $tp); + $pdf->Cell(190,$ht,convertirc(_("Collège")." : ".$donnee['libelleCollege']),1,1,'C',false); + } + + if($numeroAdherent!=$donnee['numeroAdherent']) + { + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(190,$ht,convertirc(_("Famille")." : ".$donnee['adherent']),1,1,'C',false); + } + + $pdf->SetFont('Arial','', $tp); + + $pdf->Cell(10,$ht,convertirc($donnee['codeLienParente']),1,0,'C',false); + $pdf->Cell(80,$ht,convertirc($donnee['beneficiaire']),1,0,'L',false); + $pdf->Cell(25,$ht,convertirc($donnee['numeroBeneficiaire']),1,0,'C',false); + $pdf->Cell(10,$ht,convertirc($donnee['sexe']),1,0,'C',false); + $pdf->Cell(20,$ht, dateLang($donnee['dateNaissance'], $_SESSION['lang']),1,0,'C',false); + $pdf->Cell(45,$ht,substr(convertirc($donnee['telephonePortable']),0,28),1,1,'C',false); + + $idCollege = $donnee['idCollege']; + $numeroAdherent = $donnee['numeroAdherent']; + } + + // Totaux + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(190,$ht,convertirc(_("Totaux") . " => " . format_N($donnees_total['nbEmissionTotal']) . " " . _("Lignes") ),1,1,'C',false); + + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantlisteassuresajourexport.php b/Societes/ric/Tarifs/Controleur/Avenantlisteassuresajourexport.php new file mode 100755 index 00000000..ef26ac98 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantlisteassuresajourexport.php @@ -0,0 +1,50 @@ +editionpieceavenant_societe->get_edition_avenant_listeassures_a_jour_export(); + + $feuille->setTitle(_('AVT ASS A JOUR')); + + $feuille->setCellValue('A6', "LISTE DES ASSURES A JOUR A LA DATE DE L'AVENANT"); + + $feuille->mergeCells('A6:E6'); + + $feuille->getStyle('A6')->getAlignment()->applyFromArray + ( + array + ( + 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, + ) + ); + + $headerXLS = array( + _('Collège'), + _('Famille'), + _('Lien'), + _('Bénéficiaire'), + _("Numéro"), + _('Sexe'), + _('Naissance'), + _('Téléphone'), + _('E-mail'), + _('Prime Ttc') + ); + + + $dataXLS = array(); + + foreach ($corpsavenant as $donnee) + { + $dataXLS[]=$donnee; + } + + $feuille->fromArray($headerXLS, NULL, 'A7', true); + $feuille->fromArray($dataXLS, NULL, 'A8', true); + + //Forcer le téléchargement vers le navigateur; + $fichier = 'Temp/TMP_AVT_ASS_A_JOUR'."_".uniqid().".xlsx"; + + // Piedavenant + // require_once 'Piedavenantexport.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantlisteassuresexport.php b/Societes/ric/Tarifs/Controleur/Avenantlisteassuresexport.php new file mode 100755 index 00000000..f60c1212 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantlisteassuresexport.php @@ -0,0 +1,48 @@ +editionpieceavenant_societe->get_edition_avenant_listeassures_export(); + + $feuille->setTitle(_('AVT ASS SANS PRIME')); + + $feuille->setCellValue('A6', "KANE => LISTE DES ASSURES SANS PRIMES"); + + $feuille->mergeCells('A6:E6'); + + $feuille->getStyle('A6')->getAlignment()->applyFromArray + ( + array + ( + 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, + ) + ); + + $headerXLS = array( + _('Collège'), + _('Famille'), + _('Lien'), + _('Bénéficiaire'), + _("Numéro"), + _('Sexe'), + _('Naissance'), + _('Téléphone'), + _('E-mail') + ); + + $dataXLS = array(); + + foreach ($corpsavenant as $donnee) + { + $dataXLS[]=$donnee; + } + + $feuille->fromArray($headerXLS, NULL, 'A7', true); + $feuille->fromArray($dataXLS, NULL, 'A8', true); + + //Forcer le téléchargement vers le navigateur; + $fichier = 'Temp/TMP_AVT_ASS_SP'."_".uniqid().".xlsx"; + + // Piedavenant + // require_once 'Piedavenantexport.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantlisteassuresprimes.php b/Societes/ric/Tarifs/Controleur/Avenantlisteassuresprimes.php new file mode 100755 index 00000000..be475d93 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantlisteassuresprimes.php @@ -0,0 +1,98 @@ +editionpieceavenant_societe->get_edition_avenant_listeassures_primes(); + + $donnees_total = null; + + if(count($corpsavenant)>"0") + { + $donnees_total = $corpsavenant['0']; + } + + // Un peu d'espace avant le dé but du corps + // $pdf->Ln(15); + // $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("LISTE DES ASSURES AVEC PRIMES")),0,1,'C',false); + + + + $idCollege = "0"; + $numeroAdherent = ""; + + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(0,$ht,convertirc(_('Edité le').' : '.heureCouranteLang($_SESSION['lang'])),0,1,'R',false); + + $tp = 7; + + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(6,$ht,convertirc(_("Lien")),1,0,'C',false); + $pdf->Cell(70,$ht,convertirc(_("Bénéficiaire")),1,0,'C',false); + $pdf->Cell(21,$ht,convertirc(_("Numéro")),1,0,'C',false); + $pdf->Cell(8,$ht,convertirc(_("Sexe")),1,0,'C',false); + $pdf->Cell(16,$ht,convertirc(_("Naissance")),1,0,'C',false); + + $pdf->Cell(21,$ht,convertirc(_("Prime HT")),1,0,'C',false); + $pdf->Cell(15,$ht,convertirc((isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes")),1,0,'C',false); + $pdf->Cell(12,$ht,convertirc(_("Cartes")),1,0,'C',false); + $pdf->Cell(21,$ht,convertirc(_("Prime TTC")),1,1,'C',false); + + foreach ($corpsavenant as $donnee) + { + if($idCollege!=$donnee['idCollege']) + { + $pdf->SetFont('Arial','BIU', $tp); + $pdf->Cell(190,$ht,convertirc(_("Collège")." : ".$donnee['libelleCollege']),1,1,'C',false); + } + + if($numeroAdherent!=$donnee['numeroAdherent']) + { + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(190,$ht,convertirc(_("Famille")." : ".$donnee['adherent']),1,1,'C',false); + } + + $pdf->SetFont('Arial','', $tp); + + $pdf->Cell(6,$ht,convertirc($donnee['codeLienParente']),1,0,'C',false); + $pdf->Cell(70,$ht,convertirc($donnee['beneficiaire']),1,0,'L',false); + $pdf->Cell(21,$ht,convertirc($donnee['numeroBeneficiaire']),1,0,'C',false); + $pdf->Cell(8,$ht,convertirc($donnee['sexe']),1,0,'C',false); + $pdf->Cell(16,$ht, dateLang($donnee['dateNaissance'], $_SESSION['lang']),1,0,'C',false); + + $pdf->Cell(21,$ht,convertirc(format_N($donnee['primeHt'])),1,0,'C',false); + $pdf->Cell(15,$ht,convertirc(format_N($donnee['taxe'])),1,0,'C',false); + $pdf->Cell(12,$ht,convertirc(format_N($donnee['fraisCarte'])),1,0,'C',false); + $pdf->Cell(21,$ht,convertirc(format_N($donnee['primeTtc'])),1,1,'C',false); + + $idCollege = $donnee['idCollege']; + $numeroAdherent = $donnee['numeroAdherent']; + } + + // Totaux + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(121,$ht,convertirc(_("Totaux") . " => " . format_N($donnees_total['nbEmissionTotal']) . " " . _("Lignes") ),1,0,'C',false); + + $pdf->Cell(21,$ht,convertirc(format_N($donnees_total['primeHtTotal'])),1,0,'C',false); + $pdf->Cell(15,$ht,convertirc(format_N($donnees_total['taxeTotal'])),1,0,'C',false); + $pdf->Cell(12,$ht,convertirc(format_N($donnees_total['fraisCarteTotal'])),1,0,'C',false); + $pdf->Cell(21,$ht,convertirc(format_N($donnees_total['primeTtcTotal'])),1,1,'C',false); + + // $tp = 9; + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantlisteassuresprimesexport.php b/Societes/ric/Tarifs/Controleur/Avenantlisteassuresprimesexport.php new file mode 100755 index 00000000..d20ed166 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantlisteassuresprimesexport.php @@ -0,0 +1,50 @@ +editionpieceavenant_societe->get_edition_avenant_listeassures_primes_export(); + + $feuille->setTitle(_('AVT ASS AVEC PRIME')); + + $feuille->setCellValue('A6', "LISTE DES ASSURES AVEC PRIMES"); + + $feuille->mergeCells('A6:E6'); + + $feuille->getStyle('A6')->getAlignment()->applyFromArray + ( + array + ( + 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, + ) + ); + + $headerXLS = array( + _('Collège'), + _('Famille'), + _('Lien'), + _('Bénéficiaire'), + _("Numéro"), + _('Sexe'), + _('Naissance'), + _('Prime HT'), + _('Taxes'), + _('Cartes'), + _('Prime TTC') + ); + + $dataXLS = array(); + + foreach ($corpsavenant as $donnee) + { + $dataXLS[]=$donnee; + } + + $feuille->fromArray($headerXLS, NULL, 'A7', true); + $feuille->fromArray($dataXLS, NULL, 'A8', true); + + //Forcer le téléchargement vers le navigateur; + $fichier = 'Temp/TMP_AVT_ASS_PM'."_".uniqid().".xlsx"; + + // Piedavenant + // require_once 'Piedavenantexport.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantmodele.php b/Societes/ric/Tarifs/Controleur/Avenantmodele.php new file mode 100755 index 00000000..d3f781d2 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantmodele.php @@ -0,0 +1,89 @@ +editionpieceavenant_societe->get_edition_avenant_primes(); + + // Un peu d'espace avant le dé but du corps + // $pdf->Ln(15); + $pdf->Ln(5); + + $text = convertirc("D'un commun accord entre les parties, il est convenu que les personnes dont la liste est jointe en annexe ne bénéficient plus des garanties de la police ci-dessus référencée. + +Il en résulte que la Compagnie ristournera, à la signature du présent avenant, la somme de " . format_N(-$corpsavenant['primeTtc']) . " " . $_SESSION['devise_C'] . ", frais et taxes inclus, selon le détail ci-dessous :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $ht2=7; + $pdf->Cell(90,$ht2,convertirc(_("P Nette")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeNette'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Com Court")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['commission'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Com Commer")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['commissionAutre'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Accessoires")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['accessoire'] + $corpsavenant['fraisCarte'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Prime HT")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeHt'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc((isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['taxe'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Prime TTC")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtcInitial'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Tx Intérêt")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht,convertirc(" : ".$corpsavenant['tauxInteret']),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Intérêts")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['interet'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Nouv Prime")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtc'])),0,1,'L',false); + +/* +primeNette +commission +commissionAutre +primeNetteStat +accessoire +primeHt +taxe +fraisCarte +primeTtcInitial +interet +primeTtc +*/ + + $pdf->Ln(10); + + $text = convertirc("Le présent avenant est fait aux mêmes clauses et conditions que la police sus-désignée, à laquelle il sera annexé."); + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantremiseenvigeur.php b/Societes/ric/Tarifs/Controleur/Avenantremiseenvigeur.php new file mode 100755 index 00000000..ac827e39 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantremiseenvigeur.php @@ -0,0 +1,37 @@ +editionpieceavenant_societe->get_edition_avenant_remise_en_vigueur(); + + // Un peu d'espace avant le dé but du corps + // $pdf->Ln(15); + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("REMISE EN VIGUEUR DU CONTRAT")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("A la demande Souscripteur et d’un commun accord entre les parties, les garanties de la présente police sont pour compter du " . dateLang($corpsavenant['dateEffet']) . " remises en vigueur dans tous leurs effets. + +Il n’est autrement dérogé aux autres termes du présent Contrat."); + + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantremiseenvigeurassure.php b/Societes/ric/Tarifs/Controleur/Avenantremiseenvigeurassure.php new file mode 100755 index 00000000..af8547b2 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantremiseenvigeurassure.php @@ -0,0 +1,37 @@ +editionpieceavenant_societe->get_edition_avenant_remise_en_vigueur(); + + // Un peu d'espace avant le dé but du corps + // $pdf->Ln(15); + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("REMISE EN VIGUEUR DE CERTAINS ASSURES")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("A la demande Souscripteur et d’un commun accord entre les parties, les personnes dont la liste est jointe en annexe sont pour compter du " . dateLang($corpsavenant['dateEffet']) . " remises en vigueur dans tous leurs effets. + +Il n’est autrement dérogé aux autres termes du présent Contrat."); + + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantrenouvellement.php b/Societes/ric/Tarifs/Controleur/Avenantrenouvellement.php new file mode 100755 index 00000000..dc63a07b --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantrenouvellement.php @@ -0,0 +1,103 @@ +editionpieceavenant_societe->get_edition_avenant_primes(); + + // Un peu d'espace avant le dé but du corps + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("AVENANT DE RENOUVELLEMENT")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("A la demande du souscripteur et d’un commun accord entre les parties, il est convenu que les garanties de la police susvisée, sont renouvelées dans tous leurs effets pour la période allant du " . dateLang($entetevenant['dateEffet']) . " au " . dateLang($entetevenant['dateFin']) . " pour les familles dont liste en annexe, et ce conformément au tableau des garanties ci-joint."); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $text = convertirc("En conséquence, le Souscripteur s’engage à payer à la signature du présent avenant, la somme de " . format_N($corpsavenant['primeTtc']) . " " . $_SESSION['devise_C'] . " décomptée comme suit :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $ht2=7; + $pdf->Cell(90,$ht2,convertirc(_("P Nette")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeNette'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Accessoires")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['accessoire'] + $corpsavenant['fraisCarte'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Prime HT")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeHt'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc((isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['taxe'])),0,1,'L',false); + + // Total + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(90,$ht2,convertirc(_("Prime TTC")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtcInitial'])),0,1,'L',false); + + /* + $pdf->Cell(90,$ht2,convertirc(_("Tx Intérêt")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht,convertirc(" : ".$corpsavenant['tauxInteret']),0,1,'L',false); + */ + + /* + $pdf->Cell(90,$ht2,convertirc(_("Intérêts")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['interet'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Nouv Prime")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtc'])),0,1,'L',false); + */ + +/* +primeNette +commission +commissionAutre +primeNetteStat +accessoire +primeHt +taxe +fraisCarte +primeTtcInitial +interet +primeTtc +*/ + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("Il n’est pas autrement dérogé aux autres clauses et conditions tant générales que particulières de la Police."); + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantresiliation.php b/Societes/ric/Tarifs/Controleur/Avenantresiliation.php new file mode 100755 index 00000000..34ea6ac7 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantresiliation.php @@ -0,0 +1,119 @@ +editionpieceavenant_societe->get_edition_avenant_primes(); + + // Un peu d'espace avant le dé but du corps + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("RESILIATION DU CONTRAT")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("Le souscripteur déclare et la Compagnie lui en donne acte que la police ci-dessus référencée est résiliée dans tous ses effets à compter du " . dateLang($entetevenant['dateEffet']) . "."); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', $tp); + $pdf->Cell(20,$ht0,convertirc("Motif de résiliation"),0,0,'L',false); + $pdf->SetFont('Arial','', $tp); + $pdf->Cell(0,$ht0,convertirc($entetevenant['motifAvenant']),0,1,'L',false); + + $pdf->Ln(5); + + $text = convertirc("Il en résulte que la Compagnie ristournera, à la signature du présent avenant, la somme de " . format_N(-$corpsavenant['primeTtc']) . " " . $_SESSION['devise_C'] . ", frais et taxes inclus, selon le détail ci-dessous :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $ht2=7; + $pdf->Cell(90,$ht2,convertirc(_("P Nette")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeNette'])),0,1,'L',false); + + /* + $pdf->Cell(90,$ht2,convertirc(_("Com Court")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['commission'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Com Commer")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['commissionAutre'])),0,1,'L',false); + */ + + $pdf->Cell(90,$ht2,convertirc(_("Accessoires")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['accessoire'] + $corpsavenant['fraisCarte'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Prime HT")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeHt'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc((isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['taxe'])),0,1,'L',false); + + // Total + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(90,$ht2,convertirc(_("Prime TTC")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtcInitial'])),0,1,'L',false); + + /* + $pdf->Cell(90,$ht2,convertirc(_("Tx Intérêt")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht,convertirc(" : ".$corpsavenant['tauxInteret']),0,1,'L',false); + */ + + /* + $pdf->Cell(90,$ht2,convertirc(_("Intérêts")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['interet'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Nouv Prime")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtc'])),0,1,'L',false); + */ + +/* +primeNette +commission +commissionAutre +primeNetteStat +accessoire +primeHt +taxe +fraisCarte +primeTtcInitial +interet +primeTtc +*/ + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("Le présent avenant est fait aux mêmes clauses et conditions que la police sus-désignée, à laquelle il sera annexé."); + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantretrait.php b/Societes/ric/Tarifs/Controleur/Avenantretrait.php new file mode 100755 index 00000000..0bd51043 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantretrait.php @@ -0,0 +1,102 @@ +editionpieceavenant_societe->get_edition_avenant_primes(); + + // Un peu d'espace avant le dé but du corps + // $pdf->Ln(15); + $pdf->Ln(5); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("D'un commun accord entre les parties, il est convenu que les personnes dont la liste est jointe en annexe ne bénéficient plus des garanties de la police ci-dessus référencée. + +Il en résulte que la Compagnie ristournera, à la signature du présent avenant, la somme de " . format_N(-$corpsavenant['primeTtc']) . " " . $_SESSION['devise_C'] . ", frais et taxes inclus, selon le détail ci-dessous :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $ht2=7; + $pdf->Cell(90,$ht2,convertirc(_("P Nette")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeNette'])),0,1,'L',false); + + /* + $pdf->Cell(90,$ht2,convertirc(_("Com Court")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['commission'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Com Commer")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['commissionAutre'])),0,1,'L',false); + */ + + $pdf->Cell(90,$ht2,convertirc(_("Accessoires")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['accessoire'] + $corpsavenant['fraisCarte'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Prime HT")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeHt'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc((isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['taxe'])),0,1,'L',false); + + // Total + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(90,$ht2,convertirc(_("Prime TTC")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtcInitial'])),0,1,'L',false); + + /* + $pdf->Cell(90,$ht2,convertirc(_("Tx Intérêt")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht,convertirc(" : ".$corpsavenant['tauxInteret']),0,1,'L',false); + */ + + /* + $pdf->Cell(90,$ht2,convertirc(_("Intérêts")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['interet'])),0,1,'L',false); + + $pdf->Cell(90,$ht2,convertirc(_("Nouv Prime")),0,0,'C',false); + $pdf->Cell(4,$ht2,"=",0,0,'C',false); + $pdf->Cell(60,$ht2,convertirc(format_N($corpsavenant['primeTtc'])),0,1,'L',false); + */ + +/* +primeNette +commission +commissionAutre +primeNetteStat +accessoire +primeHt +taxe +fraisCarte +primeTtcInitial +interet +primeTtc +*/ + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("Le présent avenant est fait aux mêmes clauses et conditions que la police sus-désignée, à laquelle il sera annexé."); + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantretraitacte.php b/Societes/ric/Tarifs/Controleur/Avenantretraitacte.php new file mode 100755 index 00000000..2abb4f37 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantretraitacte.php @@ -0,0 +1,66 @@ +editionpieceavenant_societe->get_edition_avenant_importation_acte(); + + // Un peu d'espace avant le dé but du corps + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("AVENANT DE RETRAIT D'ACTE")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("A la demande du souscripteur et d’un commun accord entre les parties, la (les) acte(s) dont la liste est ci-dessous est (sont) retiré(s) du présent contrat."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(60,$ht,convertirc(_("Collège")),1,0,'C',false); + $pdf->Cell(65,$ht,convertirc(_('Garantie')),1,0,'C',false); + $pdf->Cell(65,$ht,convertirc(_('Acte')),1,1,'C',false); + + // var_dump($corpsavenant); + $pdf->SetFont('Arial','', $tp); + + foreach ($corpsavenant as $donnee) + { + $garantie = convertirc($donnee['garantieEng']); + $acte = convertirc($donnee['acte']); + if (est_anglophone()) + { + $garantie = convertirc($donnee['garantieEng']); + $acte = convertirc($donnee['acteEng']); + } + + $pdf->Cell(60,$ht,convertirc($donnee['libelleCollege']),1,0,'L',false); + $pdf->Cell(65,$ht, $garantie,1,0,'L',false); + $pdf->Cell(65,$ht, $acte,1,1,'L',false); + } + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("Il n’est autrement dérogé aux autres termes du présent Contrat."); + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantretraitgarantie.php b/Societes/ric/Tarifs/Controleur/Avenantretraitgarantie.php new file mode 100755 index 00000000..5b6ba8fe --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantretraitgarantie.php @@ -0,0 +1,62 @@ +editionpieceavenant_societe->get_edition_avenant_importation_garantie(); + + // Un peu d'espace avant le dé but du corps + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("AVENANT DE RETRAIT DE GARANTIE")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("A la demande du souscripteur et d’un commun accord entre les parties, la (les) garantie(s) dont la liste est ci-dessous est (sont) retirée(s) du présent contrat."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BI', $tp); + + $pdf->Cell(95,$ht,convertirc(_("Collège")),1,0,'C',false); + $pdf->Cell(95,$ht,convertirc(_('Garantie')),1,1,'C',false); + + // var_dump($corpsavenant); + $pdf->SetFont('Arial','', $tp); + + foreach ($corpsavenant as $donnee) + { + $garantie = convertirc($donnee['garantieEng']); + if (est_anglophone()) + { + $garantie = convertirc($donnee['garantieEng']); + } + + $pdf->Cell(95,$ht,convertirc($donnee['libelleCollege']),1,0,'L',false); + $pdf->Cell(95,$ht, $garantie,1,1,'L',false); + } + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("Il n’est autrement dérogé aux autres termes du présent Contrat."); + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantsuspension.php b/Societes/ric/Tarifs/Controleur/Avenantsuspension.php new file mode 100755 index 00000000..272f0a95 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantsuspension.php @@ -0,0 +1,35 @@ +editionpieceavenant_societe->get_edition_avenant_suspension(); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("SUSPENSION DU CONTRAT")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("A demande du Souscripteur et d’un commun accord entre les parties les garanties du présent contrat sont suspendues dans tous leurs effets à compter du " . dateLang($corpsavenant['dateEffet']) . " pour le motif suivant : " . +$corpsavenant['motifAvenant'] . ". + +A défaut de remise en vigueur dans le délai d’un an, le contrat sera résilié de plein droit, les primes échues restant acquises à la compagnie. + +Il n’est autrement dérogé aux autres termes du présent Contrat."); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(10); + + require_once 'Piedavenant.php'; +?> diff --git a/Societes/ric/Tarifs/Controleur/Avenantsuspensionassure.php b/Societes/ric/Tarifs/Controleur/Avenantsuspensionassure.php new file mode 100755 index 00000000..fa7d097b --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Avenantsuspensionassure.php @@ -0,0 +1,40 @@ +editionpieceavenant_societe->get_edition_avenant_suspension(); + + // Un peu d'espace avant le dé but du corps + // $pdf->Ln(15); + $pdf->Ln(5); + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->Cell(0,$ht0,convertirc(_("SUSPENSION DE CERTAINS ASSURES")),0,1,'C',false); + + $pdf->SetFont('Arial','', $tp); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', $tp); + + $text = convertirc("A demande du Souscripteur et d’un commun accord entre les parties les personnes dont la liste est jointe en annexe sont suspendues à compter du " . dateLang($corpsavenant['dateEffet']) . " pour le motif suivant : " . +$corpsavenant['motifAvenant'] . ". + +A défaut de remise en vigueur dans le délai d’un an, les primes échues restant acquises à la compagnie. + +Il n’est autrement dérogé aux autres termes du présent Contrat."); + + $pdf->MultiCell(0, $ht, $text); + + // Un peu d'espace avant le pied de page + $pdf->Ln(10); + + // Piedavenant + require_once 'Piedavenant.php'; + +?> diff --git a/Societes/ric/Tarifs/Controleur/Bordereaucommission.php b/Societes/ric/Tarifs/Controleur/Bordereaucommission.php new file mode 100755 index 00000000..18417fcc --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Bordereaucommission.php @@ -0,0 +1,409 @@ +police_societe = new Police_sodciete(); + + $entetecp = $this->police->getEnteteCP($idPolice); + $quittances = $this->police_societe->getQuittanceplus($idPolice); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=6; + $htext=6; + // Logo + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + + $pdf->Cell(100); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(0,$ht,convertirc("Edité le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'R',false); + + // Police Arial gras 15 + $pdf->SetFont('Arial','B',10); + + $pdf->Ln(10); + // Décalage à droite + $pdf->Cell(40); + + $pdf->SetFillColor(217,237,247); // bleu + // Titre + $pdf->Cell(120,$ht,convertirc("BORDEREAU D'EMISSION DE LA COMMISSION DE ".$entetecp['nomSociete']),1,0,'C',true); + + // Saut de ligne + $pdf->Ln(20); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $garant = $entetecp['garant']; + + if(strlen($garant) > "24"){ + $garant = $entetecp['codeGcassureur']; + + // substr($chaine, 0, 45) + } + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$garant),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $dureeOld = dateDifferenceMois($entetecp['dateEffet'],$entetecp['dateEcheance'])+1; + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dureeOld." mois"),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $echeanceanTimeStamp = strtotime($entetecp['echeancean']); + + $dateecheancean = date('d/m/Y', strtotime('+1 day', $echeanceanTimeStamp)); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dateecheancean),0,0,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".substr($entetecp['nomClient'], 0, 24)),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $accessoire = $entetecp['accessoire']+$entetecp['accessoireGarant']+$entetecp['assesoireApporteur']; + + $primeNetteProrata = ($dureeOld*$entetecp['primeNette'])/12; + $primeTtcProrata = $primeNetteProrata + $accessoire+$entetecp['taxe']; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeNetteProrata),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeTtcProrata),1,1,'C',false); + + $pdf->Ln(5); + + if ($entetecp['nbEcheance'] > "1"){ + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME QUITTANCE (prochaines écheances)"),0,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Quittance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + foreach($quittances as $quittance) + { + $pdf->SetFont('Arial','', 9); + $pdf->Cell(50,$ht,convertirc(dateLang($quittance['datePaiement'],$_SESSION['lang'])." - No : ".$quittance['numeroQuittance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($quittance['primeplus']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['accessoire']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeTtc']),1,1,'C',false); + } + + $pdf->Ln(5); + } + + $dateEffetTimeStamp = strtotime($entetecp['dateEcheancePolice']); + $dateEcheanceTimeStamp = strtotime($entetecp['dateEcheancePolice']); + + $dateEffet = date('d/m/Y', strtotime('+1 day', $dateEffetTimeStamp)); + $dateEcheance = date('d/m/Y', strtotime('+1 year', $dateEcheanceTimeStamp)); + + + $dureeNew = dateDifferenceMois($dateEffet,$dateEcheance)+1; + + $primeNetteEmission = ($entetecp['primeNetteEmission']*$dureeNew)/$dureeOld; + + + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+$ht,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+$ht,convertirc("Du ".$dateEffet." au ".$dateEcheance),1,0,'C',false); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+$ht,convertirc("PRIME ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->SetFillColor(217,237,247); // bleu + // Titre + $pdf->Cell(0,$ht,convertirc("COMMISSIONNEMENT"),1,0,'C',true); + $pdf->Ln(8); + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("PRIME A PERCEVOIR PAR LE GARANT:"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc($entetecp['garant']),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Prime nette"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($primeNetteProrata)),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['accessoireGarant'])),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taxes"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['taxe'])),0,1,'L',false); + + $pdf->Cell(100); + + $primeTtcProrataGarant = $primeNetteProrata + $entetecp['accessoireGarant']+ $entetecp['taxe']; + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($primeTtcProrataGarant)),0,1,'L',false); + + if($entetecp['codeApporteur']=="AUC"){ + $primeNetteProrataApporteur = "0"; + }else{ + $primeNetteProrataApporteur = $primeNetteProrata; + } + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("COMMISSION D'APPORT DE L'INTERMEDIAIRE:"),'T',0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(0,$ht,convertirc($entetecp['apporteur']),'T',1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taux"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".$entetecp['tauxCommission']."%"),0,0,'L',false); + $pdf->Ln(); + + $montantCommission = round($primeNetteProrataApporteur*$entetecp['tauxCommission']/100); + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Montant"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($montantCommission)),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['assesoireApporteur'])),0,1,'L',false); + + $pdf->Cell(100); + + $totalCommission = $montantCommission + $entetecp['assesoireApporteur']; + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($totalCommission)),0,1,'L',false); + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("HONORAIRE A REGLER AU GESTIONNAIRE:"),'T',0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(0,$ht,convertirc($entetecp['nomSociete']),'T',1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taux"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".$entetecp['tauxCommissionGerant']."%"),0,0,'L',false); + $pdf->Ln(); + + $montantHonoraire = round($primeNetteProrata*$entetecp['tauxCommissionGerant']/100); + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Montant"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($montantHonoraire)),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['accessoire'])),0,1,'L',false); + + $totalHonoraire = $montantHonoraire + $entetecp['accessoire']; + + $pdf->Cell(100); + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($totalHonoraire)),0,1,'L',false); + + + + + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png',10,265,190); + } + + } + + $fichier="Temp/TMP_Bordereaucommission"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      diff --git a/Societes/ric/Tarifs/Controleur/Bordereaucommissioncourtier.php b/Societes/ric/Tarifs/Controleur/Bordereaucommissioncourtier.php new file mode 100755 index 00000000..49586985 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Bordereaucommissioncourtier.php @@ -0,0 +1,374 @@ +police_societe = new Police_sodciete(); + + $entetecp = $this->police->getEnteteCP($idPolice); + $quittances = $this->police_societe->getQuittanceplus($idPolice); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=6; + $htext=6; + // Logo + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + + $pdf->Cell(100); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(0,$ht,convertirc("Edité le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'R',false); + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + + $pdf->Ln(10); + // Police Arial gras 15 + $pdf->SetFont('Arial','B',10); + + // Décalage à droite + $pdf->Cell(40); + + $pdf->SetFillColor(217,237,247); // bleu + // Titre + $pdf->Cell(120,$ht,convertirc("BORDEREAU D'EMISSION DE LA COMMISSION DE ".$entetecp['nomSociete']),1,0,'C',true); + + // Saut de ligne + $pdf->Ln(20); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $garant = $entetecp['garant']; + + if(strlen($garant) > "24"){ + $garant = $entetecp['codeGcassureur']; + } + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$garant),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $dureeOld = dateDifferenceMois($entetecp['dateEffet'],$entetecp['dateEcheance'])+1; + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dureeOld." mois"),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $echeanceanTimeStamp = strtotime($entetecp['echeancean']); + + $dateecheancean = date('d/m/Y', strtotime('+1 day', $echeanceanTimeStamp)); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dateecheancean),0,0,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".substr($entetecp['nomClient'], 0, 24)),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $accessoire = $entetecp['accessoire']+$entetecp['accessoireGarant']+$entetecp['assesoireApporteur']; + + $primeNetteProrata = ($dureeOld*$entetecp['primeNette'])/12; + $primeTtcProrata = $primeNetteProrata + $accessoire+$entetecp['taxe']; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeNetteProrata),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeTtcProrata),1,1,'C',false); + + $pdf->Ln(5); + + if ($entetecp['nbEcheance'] > "1"){ + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME QUITTANCE (prochaines écheances)"),0,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Quittance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + foreach($quittances as $quittance) + { + $pdf->SetFont('Arial','', 9); + $pdf->Cell(50,$ht,convertirc(dateLang($quittance['datePaiement'],$_SESSION['lang'])." - No : ".$quittance['numeroQuittance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($quittance['primeplus']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['accessoire']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeTtc']),1,1,'C',false); + } + + $pdf->Ln(5); + } + + $dateEffetTimeStamp = strtotime($entetecp['dateEcheancePolice']); + $dateEcheanceTimeStamp = strtotime($entetecp['dateEcheancePolice']); + + $dateEffet = date('d/m/Y', strtotime('+1 day', $dateEffetTimeStamp)); + $dateEcheance = date('d/m/Y', strtotime('+1 year', $dateEcheanceTimeStamp)); + + + $dureeNew = dateDifferenceMois($dateEffet,$dateEcheance)+1; + + $primeNetteEmission = ($entetecp['primeNetteEmission']*$dureeNew)/$dureeOld; + + + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+$ht,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+$ht,convertirc("Du ".$dateEffet." au ".$dateEcheance),1,0,'C',false); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+$ht,convertirc("PRIME ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->SetFillColor(217,237,247); // bleu + // Titre + $pdf->Cell(0,$ht,convertirc("COMMISSIONNEMENT"),1,0,'C',true); + $pdf->Ln(8); + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("PRIME A PERCEVOIR PAR LE GARANT:"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc($entetecp['garant']),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Prime nette"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($primeNetteProrata)),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['accessoireGarant'])),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taxes"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['taxe'])),0,1,'L',false); + + $pdf->Cell(100); + + $primeTtcProrataGarant = $primeNetteProrata + $entetecp['accessoireGarant']+ $entetecp['taxe']; + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($primeTtcProrataGarant)),0,1,'L',false); + + if($entetecp['codeApporteur']=="AUC"){ + $primeNetteProrataApporteur = "0"; + }else{ + $primeNetteProrataApporteur = $primeNetteProrata; + } + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("COMMISSION D'APPORT DE L'INTERMEDIAIRE:"),'T',0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(0,$ht,convertirc($entetecp['apporteur']),'T',1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taux"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".$entetecp['tauxCommission']."%"),0,0,'L',false); + $pdf->Ln(); + + $montantCommission = round($primeNetteProrataApporteur*$entetecp['tauxCommission']/100); + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Montant"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($montantCommission)),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".$entetecp['assesoireApporteur']),0,1,'L',false); + + $pdf->Cell(100); + + $totalCommission = $montantCommission + $entetecp['assesoireApporteur']; + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($totalCommission)),0,1,'L',false); + + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png',10,265,190); + } + + } + + $fichier="Temp/TMP_Bordereaucommissioncourtier"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Bordereaucommissioncourtiereng.php b/Societes/ric/Tarifs/Controleur/Bordereaucommissioncourtiereng.php new file mode 100755 index 00000000..b777ac8b --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Bordereaucommissioncourtiereng.php @@ -0,0 +1,394 @@ +police_societe = new Police_sodciete(); + + $idAvenant = $this->requete->getParametreFormulaire("idAvenant"); + $numeroAvenant_cp=0; + $numeroAvenant = $_SESSION['numeroAvenant_cp'] ; + $p_emission = $numeroAvenant['numeroAvenant']; + + $entetecp = $this->police_societe->getEnteteCP($idPolice,$p_emission); + + $collegecps = $this->police_societe->getCollegesCpLienParente($idPolice); + //$collegecp2s = $this->police_societe->getCollegesCpLienParente($idPolice); + $garantiescollegecps = $this->police_societe->getGarantiesCollegesCpLienParente($idPolice); + $tableaupretationcps = $this->police_societe->gettableauPrestationsCpLienParente($idPolice); + + + $codeGarant = $this->police_societe->getcodeGarant($idPolice); + $codeGcAssureur = $codeGarant['codeGcAssureur']; + $infosDuGarant = $this->police_societe->getInfosGarant($codeGcAssureur); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=8; + $htext=6; + // Logo + //$pdf->Image($_SESSION['lienLogo'],10,6,30); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',13); + + + +// Décalage à droite + $pdf->Cell(30); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(0,$ht,convertirc("BORDEREAU D'EMISSION DE LA PRIME"),1,0,'C',true); + + // Saut de ligne + $pdf->Ln(20); + //encadrer + $pdf->Rect(10,30,190,65); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + + $pdf->SetFont('Arial','',9); + + + if(strlen($entetecp['garant']) > "40"){ + + $pdf->Cell(17,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->Cell(85,$ht,convertirc(":".$entetecp['garant']),0,0,'L',false); + } + else{ + $pdf->Cell(30,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['libellePolice']) > "30"){ + $pdf->Cell(22,$ht,convertirc("Police : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65, 4, $entetecp['libellePolice'],0); + }else{ + $pdf->Cell(32,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + } + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['nomClient'])> "30"){ + $pdf->Cell(22,$ht,convertirc("Souscripteur : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65,4,convertirc($entetecp['nomClient']),0); + } + else{ + + $pdf->Cell(32,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(77,$ht,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->Ln(); + } + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + + + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +/////////////////// + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $accessoire = $entetecp['accessoire']; + $ht=10; + + //$primeNetteProrata = ($dureeOld*$entetecp['primeNette'])/12; + $primeNetteProrata = $entetecp['primeNette']; + $primeTtcProrata = $primeNetteProrata + $accessoire+$entetecp['taxe']; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeTtcProrata),1,1,'C',false); + + $pdf->Ln(5); + + if ($entetecp['nbEcheance'] > "1"){ + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME QUITTANCE (prochaines écheances)"),0,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(50,$ht,convertirc("Quittance"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + foreach($quittances as $quittance) + { + $pdf->SetFont('Arial','', 9); + $pdf->Cell(50,$ht,convertirc(dateLang($quittance['datePaiement'],$_SESSION['lang'])." - No : ".$quittance['numeroQuittance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($quittance['primeplus']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['accessoire']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeTtc']),1,1,'C',false); + } + + $pdf->Ln(5); + } + + $dateEffetTimeStamp = strtotime($entetecp['dateEcheancePolice']); + $dateEcheanceTimeStamp = strtotime($entetecp['dateEcheancePolice']); + + $dateEffet = date('d/m/Y', strtotime('+1 day', $dateEffetTimeStamp)); + $dateEcheance = date('d/m/Y', strtotime('+1 year', $dateEcheanceTimeStamp)); + + + $dureeNew = dateDifferenceMois($dateEffet,$dateEcheance)+1; + + $primeNetteEmission = ($entetecp['primeNetteEmission']*$dureeNew)/$dureeOld; + + + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+2,convertirc("Du ".$dateEffet." au ".$dateEcheance),1,0,'C',false); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+2,convertirc("PRIME PREVISIONNELLE ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(0,$ht,convertirc("COMMISSIONNEMENT"),1,0,'C',true); + $pdf->Ln(8); + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(80,$ht,convertirc("PRIME A PERCEVOIR PAR LE GARANT:"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc($entetecp['garant']),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Prime nette"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($primeNetteProrata)),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['accessoireGarant'])),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taxes"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['taxe'])),0,1,'L',false); + + $pdf->Cell(100); + + $primeTtcProrataGarant = $primeNetteProrata + $entetecp['accessoireGarant']+ $entetecp['taxe']; + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($primeTtcProrataGarant)),0,1,'L',false); + + if($entetecp['codeApporteur']=="AUC"){ + $primeNetteProrataApporteur = "0"; + }else{ + $primeNetteProrataApporteur = $primeNetteProrata; + } + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("COMMISSION D'APPORT DE L'INTERMEDIAIRE:"),'T',0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(0,$ht,convertirc($entetecp['apporteur']),'T',1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taux"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".$entetecp['tauxCommission']."%"),0,0,'L',false); + $pdf->Ln(); + + $montantCommission = round($primeNetteProrataApporteur*$entetecp['tauxCommission']/100); + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Montant"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($montantCommission)),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".$entetecp['assesoireApporteur']),0,1,'L',false); + + $pdf->Cell(100); + + $totalCommission = $montantCommission + $entetecp['assesoireApporteur']; + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($totalCommission)),0,1,'L',false); + + $pdf->Cell(190,0,convertirc(""),1,0,'L',false); + + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png',10,280,190); + } + + } + + $fichier="Temp/TMP_Bordereaucommissioncourtier"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Bordereaucommissioneng.php b/Societes/ric/Tarifs/Controleur/Bordereaucommissioneng.php new file mode 100755 index 00000000..fe26cb27 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Bordereaucommissioneng.php @@ -0,0 +1,460 @@ +police_societe = new Police_sodciete(); + + $idAvenant = $this->requete->getParametreFormulaire("idAvenant"); + $numeroAvenant_cp=0; + $numeroAvenant = $_SESSION['numeroAvenant_cp'] ; + $p_emission = $numeroAvenant['numeroAvenant']; + + $entetecp = $this->police_societe->getEnteteCP($idPolice,$p_emission); + + $collegecps = $this->police_societe->getCollegesCpLienParente($idPolice); + //$collegecp2s = $this->police_societe->getCollegesCpLienParente($idPolice); + $garantiescollegecps = $this->police_societe->getGarantiesCollegesCpLienParente($idPolice); + $tableaupretationcps = $this->police_societe->gettableauPrestationsCpLienParente($idPolice); + + + $codeGarant = $this->police_societe->getcodeGarant($idPolice); + $codeGcAssureur = $codeGarant['codeGcAssureur']; + $infosDuGarant = $this->police_societe->getInfosGarant($codeGcAssureur); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=8; + $htext=6; + // Logo + //$pdf->Image($_SESSION['lienLogo'],10,6,30); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',13); + + + +// Décalage à droite + $pdf->Cell(30); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(0,$ht,convertirc("BORDEREAU D'EMISSION DE LA PRIME"),1,0,'C',true); + + // Saut de ligne + $pdf->Ln(20); + //encadrer + $pdf->Rect(10,30,190,65); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + $pdf->SetFont('Arial','',9); + + if(strlen($entetecp['garant']) > "40"){ + $pdf->Cell(17,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->Cell(85,$ht,convertirc(":".$entetecp['garant']),0,0,'L',false); + } + else{ + $pdf->Cell(30,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['libellePolice']) > "30"){ + $pdf->Cell(22,$ht,convertirc("Police : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65, 4, $entetecp['libellePolice'],0); + }else{ + $pdf->Cell(32,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + } + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['nomClient'])> "30"){ + $pdf->Cell(22,$ht,convertirc("Souscripteur : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65,4,convertirc($entetecp['nomClient']),0); + } + else{ + + $pdf->Cell(32,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(77,$ht,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->Ln(); + } + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + + + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +/////////////////// + + $pdf->Ln(10); + + $pdf->SetFont('Arial','',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $accessoire = $entetecp['accessoire']; + $ht=10; + + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeTtc']),1,1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+2,convertirc("Du ".dateLang($entetecp['dateEffet'], $_SESSION['lang'])." au ".dateLang($entetecp['dateEcheance'], $_SESSION['lang'])),1,0,'C',false); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+2,convertirc("PRIME ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B',15); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(0,$ht,convertirc("COMMISSIONNEMENT"),1,0,'C',true); + $pdf->Ln(8); +/* + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("PRIME A PERCEVOIR PAR LE GARANT:"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc($entetecp['garant']),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Prime nette"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['primeNette'])),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($accessoire)),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taxes"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['taxe'])),0,1,'L',false); + + $pdf->Cell(100); + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($entetecp['primeTtc'])),0,1,'L',false); + + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("COMMISSION D'APPORT DE L'INTERMEDIAIRE:"),'T',0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(0,$ht,convertirc($entetecp['apporteur']),'T',1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taux"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".$entetecp['tauxCommission']."%"),0,0,'L',false); + $pdf->Ln(); + + $montantCommission = round($entetecp['primeNette']*$entetecp['tauxCommission']/100); + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Montant"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($montantCommission)),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['assesoireApporteur'])),0,1,'L',false); + + $pdf->Cell(100); + + $totalCommission = $montantCommission + $entetecp['assesoireApporteur']; + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($totalCommission)),0,1,'L',false); + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("HONORAIRE A REGLER AU GESTIONNAIRE:"),'T',0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(0,$ht,convertirc($entetecp['nomSociete']),'T',1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("taux"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".$entetecp['tauxCommissionGerant']."%"),0,0,'L',false); + $pdf->Ln(); + + $montantHonoraire = round($entetecp['primeNette']*$entetecp['tauxCommissionGerant']/100); + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Montant"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($montantHonoraire)),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['accessoire'])),0,1,'L',false); + + $totalHonoraire = $montantHonoraire + $entetecp['accessoire']; + + $pdf->Cell(100); + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($totalHonoraire)),0,1,'L',false); + + $pdf->Ln(3); +//*/ +/// +$pdf->SetFont('Arial','BU',10); +$pdf->Cell(80,$ht,convertirc("PRIME A PERCEVOIR PAR LE GARANT:"),0,0,'L',false); +$pdf->SetFont('Arial','B',10); +$pdf->Cell(20,$ht,convertirc($entetecp['garant']),0,1,'L',false); + +$pdf->SetFont('Arial','',9); +$pdf->Cell(40,5,convertirc("Prime nette"),0,0,'L',false); +$pdf->SetFont('Arial','',9); +$pdf->Cell(20,5,convertirc(": ".format_N($entetecp['primeNette'])),0,0,'L',false); +$pdf->Ln(); +$pdf->SetFont('Arial','',9); +$pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); +$pdf->SetFont('Arial','',9); +$pdf->Cell(20,5,convertirc(": ".format_N($entetecp['accessoireGarant'])),0,1,'L',false); + +$pdf->SetFont('Arial','',9); +$pdf->Cell(40,5,convertirc("Taxes d'enregistrement"),0,0,'L',false); +$pdf->SetFont('Arial','',9); +$pdf->Cell(20,5,convertirc(": ".format_N($entetecp['taxeEmission'])),0,1,'L',false); + +$pdf->Cell(100); +$totalgarant= $entetecp['primeNette'] + $entetecp['accessoireGarant'] + $entetecp['taxeEmission']; + +$pdf->SetFont('Arial','B',9); +$pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); +$pdf->SetFont('Arial','B',9); +$pdf->Cell(2,5,convertirc(format_N($totalgarant)),0,1,'L',false); + + +$pdf->SetFont('Arial','BU',10); +$pdf->Cell(100,$ht,convertirc("COMMISSION D'APPORT DE L'INTERMEDIAIRE:"),'T',0,'L',false); +$pdf->SetFont('Arial','B',10); +$pdf->Cell(0,$ht,convertirc($entetecp['apporteur']),'T',1,'L',false); + +$pdf->SetFont('Arial','',9); +$pdf->Cell(40,5,convertirc("Taux"),0,0,'L',false); +$pdf->SetFont('Arial','',9); +$pdf->Cell(20,5,convertirc(": ".$entetecp['tauxCommission']."%"),0,0,'L',false); +$pdf->Ln(); + +$montantCommission = round($entetecp['primeNette']*$entetecp['tauxCommission']/100); +$pdf->SetFont('Arial','',9); +$pdf->Cell(40,5,convertirc("Montant"),0,0,'L',false); +$pdf->SetFont('Arial','',9); +$pdf->Cell(20,5,convertirc(": ".format_N($montantCommission)),0,1,'L',false); + +$pdf->SetFont('Arial','',9); +$pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); +$pdf->SetFont('Arial','',9); +$pdf->Cell(20,5,convertirc(": ".format_N($entetecp['assesoireApporteur'])),0,1,'L',false); + +$pdf->Cell(100); + +$totalCommission = $montantCommission + $entetecp['assesoireApporteur']; + +$pdf->SetFont('Arial','B',9); +$pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); +$pdf->SetFont('Arial','B',9); +$pdf->Cell(2,5,convertirc(format_N($totalCommission)),0,1,'L',false); + +$pdf->SetFont('Arial','BU',10); +$pdf->Cell(100,$ht,convertirc("HONORAIRE A REGLER AU GESTIONNAIRE:"),'T',0,'L',false); +$pdf->SetFont('Arial','B',10); +$pdf->Cell(0,$ht,convertirc($entetecp['nomSociete']),'T',1,'L',false); + +$pdf->SetFont('Arial','',9); +$pdf->Cell(40,5,convertirc("Taux"),0,0,'L',false); +$pdf->SetFont('Arial','',9); +$pdf->Cell(20,5,convertirc(": ".$entetecp['tauxCommissionGerant']."%"),0,0,'L',false); +$pdf->Ln(); + +$montantHonoraire = round($entetecp['primeNette']*$entetecp['tauxCommissionGerant']/100); +$pdf->SetFont('Arial','',9); +$pdf->Cell(40,5,convertirc("Montant"),0,0,'L',false); +$pdf->SetFont('Arial','',9); +$pdf->Cell(20,5,convertirc(": ".format_N($montantHonoraire)),0,1,'L',false); + +$pdf->SetFont('Arial','',9); +$pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); +$pdf->SetFont('Arial','',9); + +$pdf->Cell(20,5,convertirc(": ".format_N($entetecp['accessoireGestionEmission'])),0,1,'L',false); + +$totalHonoraire = $montantHonoraire + $entetecp['accessoireGestionEmission']; + +$pdf->Cell(100); + +$pdf->SetFont('Arial','B',9); +$pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); +$pdf->SetFont('Arial','B',9); +$pdf->Cell(2,5,convertirc(format_N($totalHonoraire)),0,1,'L',false); + +$pdf->Ln(3); +/// + + $pdf->SetFont('Arial','',9); + //$pdf->Cell(0,$ht,convertirc("Edité le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'R',false); + $pdf->Cell(190,0,convertirc(""),1,0,'L',false); + + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,280,190); + } + } + $fichier="Temp/TMP_Bordereaucommission"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Bordereauprime.php b/Societes/ric/Tarifs/Controleur/Bordereauprime.php new file mode 100755 index 00000000..73d1d2ca --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Bordereauprime.php @@ -0,0 +1,408 @@ +police_societe = new Police_sodciete(); + + $entetecp = $this->police->getEnteteCP($idPolice); + $quittances = $this->police_societe->getQuittanceplus($idPolice); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=6; + $htext=6; + // Logo + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + + $pdf->Cell(100); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(0,$ht,convertirc("Edité le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'R',false); + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + + $pdf->Ln(10); + + // Décalage à droite + $pdf->Cell(50); + + $pdf->SetFillColor(217,237,247); // bleu + // Titre + $pdf->Cell(110,$ht,convertirc("BORDEREAU D'EMISSION DE LA PRIME"),1,0,'C',true); + + // Saut de ligne + $pdf->Ln(20); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $garant = $entetecp['garant']; + + if(strlen($garant) > "24"){ + $garant = $entetecp['codeGcassureur']; + } + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$garant),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $dureeOld = dateDifferenceMois($entetecp['dateEffet'],$entetecp['dateEcheance'])+1; + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dureeOld." mois"),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $echeanceanTimeStamp = strtotime($entetecp['echeancean']); + + $dateecheancean = date('d/m/Y', strtotime('+1 day', $echeanceanTimeStamp)); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dateecheancean),0,0,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".substr($entetecp['nomClient'], 0, 24)),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $accessoire = $entetecp['accessoire']+$entetecp['accessoireGarant']+$entetecp['assesoireApporteur']; + + $primeNetteProrata = ($dureeOld*$entetecp['primeNette'])/12; + $primeTtcProrata = $primeNetteProrata + $accessoire+$entetecp['taxe']; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeNetteProrata),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeTtcProrata),1,1,'C',false); + + $pdf->Ln(5); + + if ($entetecp['nbEcheance'] > "1"){ + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME QUITTANCE (prochaines écheances)"),0,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Quittance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + foreach($quittances as $quittance) + { + $pdf->SetFont('Arial','', 9); + $pdf->Cell(50,$ht,convertirc(dateLang($quittance['datePaiement'],$_SESSION['lang'])." - No : ".$quittance['numeroQuittance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($quittance['primeplus']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['accessoire']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeTtc']),1,1,'C',false); + } + + $pdf->Ln(5); + } + + $dateEffetTimeStamp = strtotime($entetecp['dateEcheancePolice']); + $dateEcheanceTimeStamp = strtotime($entetecp['dateEcheancePolice']); + + $dateEffet = date('d/m/Y', strtotime('+1 day', $dateEffetTimeStamp)); + $dateEcheance = date('d/m/Y', strtotime('+1 year', $dateEcheanceTimeStamp)); + + + $dureeNew = dateDifferenceMois($dateEffet,$dateEcheance)+1; + + $primeNetteEmission = ($entetecp['primeNetteEmission']*$dureeNew)/$dureeOld; + + + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+$ht,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+$ht,convertirc("Du ".$dateEffet." au ".$dateEcheance),1,0,'C',false); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+$ht,convertirc("PRIME ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->SetFillColor(217,237,247); // bleu + // Titre + $pdf->Cell(0,$ht,convertirc("COMMISSIONNEMENT"),1,0,'C',true); + $pdf->Ln(8); + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("PRIME A PERCEVOIR PAR LE GARANT:"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc($entetecp['garant']),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Prime nette"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($primeNetteProrata)),0,0,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['accessoireGarant'])),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taxes"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['taxe'])),0,1,'L',false); + + $pdf->Cell(100); + + $primeTtcProrataGarant = $primeNetteProrata + $entetecp['accessoireGarant']+ $entetecp['taxe']; + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($primeTtcProrataGarant)),0,1,'L',false); + + if($entetecp['codeApporteur']=="AUC"){ + $primeNetteProrataApporteur = "0"; + }else{ + $primeNetteProrataApporteur = $primeNetteProrata; + } + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("COMMISSION D'APPORT DE L'INTERMEDIAIRE:"),'T',0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(0,$ht,convertirc($entetecp['apporteur']),'T',1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taux"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".$entetecp['tauxCommission']."%"),0,0,'L',false); + $pdf->Ln(); + + $montantCommission = round($primeNetteProrataApporteur*$entetecp['tauxCommission']/100); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Montant"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($montantCommission)),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['assesoireApporteur'])),0,1,'L',false); + + $pdf->Cell(100); + + $totalCommission = $montantCommission + $entetecp['assesoireApporteur']; + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($totalCommission)),0,1,'L',false); + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("HONORAIRE A REGLER AU GESTIONNAIRE:"),'T',0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(0,$ht,convertirc($entetecp['nomSociete']),'T',1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taux"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".$entetecp['tauxCommissionGerant']."%"),0,0,'L',false); + $pdf->Ln(); + + $montantHonoraire = round($primeNetteProrata*$entetecp['tauxCommissionGerant']/100); + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Montant"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($montantHonoraire)),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['accessoire'])),0,1,'L',false); + + $totalHonoraire = $montantHonoraire + $entetecp['accessoire']; + + $pdf->Cell(100); + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($totalHonoraire)),0,1,'L',false); + + $pdf->Ln(3); + + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png',10,265,190); + } + + } + + $fichier="Temp/TMP_Bordereauprime"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Bordereauprimeeng.php b/Societes/ric/Tarifs/Controleur/Bordereauprimeeng.php new file mode 100755 index 00000000..26cad2ba --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Bordereauprimeeng.php @@ -0,0 +1,377 @@ +police_societe = new Police_sodciete(); + + $idAvenant = $this->requete->getParametreFormulaire("idAvenant"); + $numeroAvenant_cp=0; + $numeroAvenant = $_SESSION['numeroAvenant_cp'] ; + $p_emission = $numeroAvenant['numeroAvenant']; + + $entetecp = $this->police_societe->getEnteteCP($idPolice,$p_emission); + //highlight_string(""); + + $collegecps = $this->police_societe->getCollegesCpLienParente($idPolice); + //$collegecp2s = $this->police_societe->getCollegesCpLienParente($idPolice); + $garantiescollegecps = $this->police_societe->getGarantiesCollegesCpLienParente($idPolice); + $tableaupretationcps = $this->police_societe->gettableauPrestationsCpLienParente($idPolice); + + $codeGarant = $this->police_societe->getcodeGarant($idPolice); + + $codeGcAssureur = $codeGarant['codeGcAssureur']; + $infosDuGarant = $this->police_societe->getInfosGarant($codeGcAssureur); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=8; + $htext=6; + // Logo + //$pdf->Image($_SESSION['lienLogo'],10,6,30); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + + +// Décalage à droite + $pdf->Cell(30); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(0,$ht,convertirc("BORDEREAU D'EMISSION DE LA PRIME"),1,0,'C',true); + + // Saut de ligne + $pdf->Ln(20); + //encadrer + $pdf->Rect(10,30,190,65); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + + $pdf->SetFont('Arial','',9); + + + if(strlen($entetecp['garant']) > "40"){ + + $pdf->Cell(17,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->Cell(85,$ht,convertirc(":".$entetecp['garant']),0,0,'L',false); + } + else{ + $pdf->Cell(30,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + + + + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['libellePolice']) > "30"){ + $pdf->Cell(22,$ht,convertirc("Police : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65, 4, $entetecp['libellePolice'],0); + }else{ + $pdf->Cell(32,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + } + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['nomClient'])> "30"){ + $pdf->Cell(22,$ht,convertirc("Souscripteur : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65,4,convertirc($entetecp['nomClient']),0); + } + else{ + + $pdf->Cell(32,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(77,$ht,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->Ln(); + } + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + + + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +/////////////////// + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $accessoire = $entetecp['accessoire']; + $ht= 10; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeTtc']),1,1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+2,convertirc("Du ".dateLang($entetecp['dateEffetprochain'], $_SESSION['lang'])." au ".dateLang($entetecp['dateFinprochain'])),1,0,'C',false); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+2,convertirc("PRIME PREVISIONNELLE ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B',15); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(0,$ht,convertirc("COMMISSIONNEMENT"),1,0,'C',true); + $pdf->Ln(8); +/// + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(80,$ht,convertirc("PRIME A PERCEVOIR PAR LE GARANT:"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc($entetecp['garant']),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Prime nette"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['primeNette'])),0,0,'L',false); + $pdf->Ln(); + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['accessoireGarant'])),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taxes d'enregistrement"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['taxeEmission'])),0,1,'L',false); + + $pdf->Cell(100); + $totalgarant= $entetecp['primeNette'] + $entetecp['accessoireGarant'] + $entetecp['taxeEmission']; + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($totalgarant)),0,1,'L',false); + + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("COMMISSION D'APPORT DE L'INTERMEDIAIRE:"),'T',0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(0,$ht,convertirc($entetecp['apporteur']),'T',1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taux"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".$entetecp['tauxCommission']."%"),0,0,'L',false); + $pdf->Ln(); + + $montantCommission = round($entetecp['primeNette']*$entetecp['tauxCommission']/100); + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Montant"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($montantCommission)),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['assesoireApporteur'])),0,1,'L',false); + + $pdf->Cell(100); + + $totalCommission = $montantCommission + $entetecp['assesoireApporteur']; + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($totalCommission)),0,1,'L',false); + + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,$ht,convertirc("HONORAIRE A REGLER AU GESTIONNAIRE:"),'T',0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(0,$ht,convertirc($entetecp['nomSociete']),'T',1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Taux"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".$entetecp['tauxCommissionGerant']."%"),0,0,'L',false); + $pdf->Ln(); + + $montantHonoraire = round($entetecp['primeNette']*$entetecp['tauxCommissionGerant']/100); + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Montant"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc(": ".format_N($montantHonoraire)),0,1,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(40,5,convertirc("Accessoires"),0,0,'L',false); + $pdf->SetFont('Arial','',9); + + $pdf->Cell(20,5,convertirc(": ".format_N($entetecp['accessoireGestionEmission'])),0,1,'L',false); + + $totalHonoraire = $montantHonoraire + $entetecp['accessoireGestionEmission']; + + $pdf->Cell(100); + + $pdf->SetFont('Arial','B',9); + $pdf->Cell(15,5,convertirc("Total: "),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(2,5,convertirc(format_N($totalHonoraire)),0,1,'L',false); + + $pdf->Ln(3); +/// + + +// $pdf->SetFont('Arial','',9); +// $pdf->Cell(0,$ht,convertirc("Edité le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'R',false); + $pdf->Cell(190,0,convertirc(""),1,0,'L',false); + $pdf->Ln(10); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,280,190); + } + } + $fichier="Temp/TMP_Bordereauprime"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Conditionparticulieresuiteeng.php b/Societes/ric/Tarifs/Controleur/Conditionparticulieresuiteeng.php new file mode 100755 index 00000000..8468b1c8 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Conditionparticulieresuiteeng.php @@ -0,0 +1,308 @@ +police_societe = new Police_sodciete(); + + $idAvenant = $this->requete->getParametreFormulaire("idAvenant"); + $numeroAvenant_cp=0; + $numeroAvenant = $_SESSION['numeroAvenant_cp'] ; + $p_emission = $numeroAvenant['numeroAvenant']; + + $entetecp = $this->police_societe->getEnteteCP($idPolice,$p_emission); + //highlight_string(""); + + $collegecps = $this->police_societe->getCollegesCpLienParente($idPolice); + //$collegecp2s = $this->police_societe->getCollegesCpLienParente($idPolice); + $garantiescollegecps = $this->police_societe->getGarantiesCollegesCpLienParente($idPolice); + $tableaupretationcps = $this->police_societe->gettableauPrestationsCpLienParente($idPolice); + $conditionsparticuliers = $this->police_societe->getconditionsparticuliers($idPolice); + $codeGarant = $this->police_societe->getcodeGarant($idPolice); + + $codeGcAssureur = $codeGarant['codeGcAssureur']; + $infosDuGarant = $this->police_societe->getInfosGarant($codeGcAssureur); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=10; + $htext=6; + // Logo + //$pdf->Image($_SESSION['lienLogo'],10,6,30); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',12); + + + + // Décalage à droite + $pdf->Cell(30); + + $pdf->SetFont('Arial','B',11); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $text = convertirc("SUITE DES CONDITIONS PARTICULIERES DE L'AVENANT N° ".$numeroAvenant['numeroAvenant']); + $text .= convertirc(" A LA POLICE N° ".$entetecp['numeroPoliceGarant']." SOUCRITE PAR LA SOCIETE ".$entetecp['libellePolice']); + $text .= convertirc("AUPRES DE ".$entetecp['garant']); + $pdf->MultiCell(150,5, $text,1,'C',true); + + /*$pdf->Cell(30,5,convertirc(""),0,0,'C',false); + $pdf->Cell(0,5,convertirc(""),'LTR',1,'C',true); + $pdf->Cell(30,5,convertirc(""),0,0,'C',false); + $pdf->Cell(0,5,convertirc("SUITE DES CONDITIONS PARTICULIERES DE L'AVENANT N°".$numeroAvenant['numeroAvenant']),'LR',1,'C',true); + $pdf->Cell(30,5,convertirc(""),0,0,'C',false); + $pdf->Cell(0,5,convertirc("A LA POLICE N°".$entetecp['numeroPoliceGarant']." SOUCRITE PAR LA SOCIETE ".$entetecp['libellePolice']),'LR',1,'C',true); + $pdf->Cell(30,5,convertirc(""),0,0,'C',false); + $pdf->Cell(0,5,convertirc("AUPRES DE ".$entetecp['garant']),'LR',1,'C',true); + $pdf->Cell(30,5,convertirc(""),0,0,'C',false); + $pdf->Cell(0,5,convertirc(""),'LBR',1,'C',true);*/ + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BU',13); + + $pdf->Cell(50,8,convertirc("OBJET DE L'AVENANT"),0,1,'L',false); + + $pdf->SetFont('Arial','',11); + + $pdf->Cell(50,8,convertirc("Le présent avenant a pour objet de régulariser les mouvements d'effectifs listés sur les états en annexe."),0,1,'L',false); + + $pdf->SetFont('Arial','BUI',13); + + $pdf->Cell(50,8,convertirc("PRIME NETTE ANNUELLE"),0,1,'L',false); + $pdf->Ln(5); + $pdf->SetFont('Arial','',10); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(65,5,convertirc("Colleges"),'LTR',0,'C',false); + $pdf->Cell(30,5,convertirc("Nombre de"),'LTR',0,'C',false); + $pdf->Cell(40,5,convertirc("Prime nette annuelle"),'LTR',0,'C',false); + $pdf->Cell(35,5,convertirc("TOTAL"),'LTR',1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(65,5,convertirc(""),'LBR',0,'C',false); + $pdf->Cell(30,5,convertirc("famille(s)"),'LBR',0,'C',false); + $pdf->Cell(40,5,convertirc("par famille"),'LBR',0,'C',false); + $pdf->Cell(35,5,convertirc(""),'LBR',1,'C',false); + foreach($conditionsparticuliers as $conditionsparticulier){ + + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->SetFont('Arial','', 8); + $pdf->Cell(65,5,convertirc(substr($conditionsparticulier['libelleCollege'] ,0,40)),'LBR',0,'C',false); + $pdf->SetFont('Arial','', 8); + $pdf->Cell(30,5,convertirc(format_N($conditionsparticulier['nbPersonneCol'])),'LBR',0,'C',false); + $pdf->Cell(40,5,convertirc(format_N($conditionsparticulier['primeHt'])),'LBR',0,'C',false); + $pdf->Cell(35,5,convertirc(format_N($conditionsparticulier['primeHtTCol'])),'LBR',1,'C',false); + + } + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Total Prime nette Annuelle"),'LBR',0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['@primeTotaleHT'])),'LBR',1,'C',false); + // Saut de ligne + $pdf->Ln(10); + $pdf->SetFont('Arial','BUI',13); + + $pdf->Cell(0,8,convertirc("PRIME A REGLER A LA SIGNATURE DE L'AVENANT"),0,1,'L',false); + $pdf->SetFont('Arial','',11); + $pdf->Cell(10,2,convertirc(""),0,0,'L',false); + $pdf->Cell(50,8,convertirc("La prime est payable au comptant une seule fois."),0,1,'L',false); + $pdf->Cell(10,2,convertirc(""),0,0,'L',false); + $pdf->Cell(135,8,convertirc("Le souscripteur réglera à la signature du présent avenant la somme totale de "),0,0,'L',false); + $pdf->SetFont('Arial','BU',11); + $pdf->Cell(20,8,convertirc(format_N($conditionsparticulier['@primeTotaleHT'])." F CFA "),0,1,'L',false); + $pdf->SetFont('Arial','',11); + $pdf->Cell(10,2,convertirc(""),0,0,'L',false); + $pdf->Cell(50,8,convertirc("pour la période d'assurance du ".dateToFrench($entetecp['dateEffetPolice'],'j F Y')." au ".dateToFrench($entetecp['dateEcheancePolice'],'j F Y')." décomptée ci-dessous."),0,1,'L',false); + $pdf->Ln(5); + + + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Prime nette d'incorporation du ".dateToFrench($entetecp['dateEffetPolice'],'j F Y')." au ".dateToFrench($entetecp['dateEcheancePolice'],'j F Y')),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier[''])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Prime nette de retrait du ".dateToFrench($entetecp['dateEffetPolice'],'j F Y')." au ".dateToFrench($entetecp['dateEcheancePolice'],'j F Y')),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier[''])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Prime nette à percevoir "),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['@primeTotaleHT'])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Accessoires"),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['@accessoireTSC'])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Taxes d'enregistrement"),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['@taxe'])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(125,5,convertirc("PRIME TOTALE A PERCEVOIR"),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['primeTotaleTTC'])),1,1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','BI',10); + $pdf->Cell(0,5,convertirc("IL N'EST PAS AUTREMENT DEROGE AUX CLAUSES ET"),'LTR',1,'C',false); + $pdf->Cell(0,5,convertirc("CONDITIONS DE LA POLICE ETDESA VENANTS PRECEDENTS"),'LBR',1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','',10); + $pdf->Cell(10,5,convertirc(""),0,0,'L',false); + $pdf->Cell(45,5,convertirc("Etabli à".$_SESSION['villeSociete'].", le ".dateToFrench("now" ,'l j F Y') ),0,1,'L',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,5,convertirc("LE SOUSCRIPTEUR"),0,0,'C',false); + $pdf->Cell(90,5,convertirc("LA COMPAGNIE"),0,1,'C',false); + + +/*////////// + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Compagnie"),0,0,'L',false); + + + if(strlen($entetecp['garant']) > "40"){ + $pdf->SetFont('Arial','B',7); + $pdf->Cell(50,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + else{ + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +/////////////////////////////////*/ + $pdf->Ln(30); + +/// + + +// $pdf->SetFont('Arial','',9); +// $pdf->Cell(0,$ht,convertirc("Edité le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'R',false); + + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,270,190); + } + } + $fichier="Temp/TMP_SUITE_DES_CONDITIONS_PARTICULIERES"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Conditionparticulieresuiteincorporationeng.php b/Societes/ric/Tarifs/Controleur/Conditionparticulieresuiteincorporationeng.php new file mode 100755 index 00000000..636fb22a --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Conditionparticulieresuiteincorporationeng.php @@ -0,0 +1,305 @@ +police_societe = new Police_sodciete(); + + + $idAvenant = $this->requete->getParametreFormulaire("idAvenant"); + $numeroAvenant_cp=0; + $numeroAvenant = $_SESSION['numeroAvenant_cp'] ; + $p_emission = $numeroAvenant['numeroAvenant']; + + $debutStat = $this->requete->getParametreDate("debutStat"); + $finStat = $this->requete->getParametreDate("finStat"); + + $numeroAvenant = $this->police->getNumeroAvenant($idAvenant); + + $_SESSION['numeroAvenant_cp'] = $numeroAvenant; + $_SESSION['debutStat'] = $debutStat; + $_SESSION['finStat'] = $finStat; + $entetecp = $this->police_societe->getEnteteCP($idPolice,$p_emission); + + + $collegecps = $this->police_societe->getCollegesCpLienParente($idPolice); + //$collegecp2s = $this->police_societe->getCollegesCpLienParente($idPolice); + + $garantiescollegecps = $this->police_societe->getGarantiesCollegesCpLienParente($idPolice); + $tableaupretationcps = $this->police_societe->gettableauPrestationsCpLienParente($idPolice); + $conditionsparticuliers = $this->police_societe->getconditionsparticuliersincorporation($idPolice,$debutStat,$finStat); + $codeGarant = $this->police_societe->getcodeGarant($idPolice); + + $codeGcAssureur = $codeGarant['codeGcAssureur']; + $infosDuGarant = $this->police_societe->getInfosGarant($codeGcAssureur); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=10; + $htext=6; + // Logo + //$pdf->Image($_SESSION['lienLogo'],10,6,30); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',11); + + + + // Décalage à droite + $pdf->Cell(30); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $text = convertirc("SUITE DES CONDITIONS PARTICULIERES DE L'AVENANT N° ".$numeroAvenant['numeroAvenant']); + $text .= convertirc(" A LA POLICE N° ".$entetecp['numeroPoliceGarant']." SOUCRITE PAR LA SOCIETE ".$entetecp['libellePolice']); + $text .= convertirc("AUPRES DE ".$entetecp['garant']); + $pdf->MultiCell(150,5, $text,1,'C',true); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BU',13); + + $pdf->Cell(50,8,convertirc("OBJET DE L'AVENANT"),0,1,'L',false); + + $pdf->SetFont('Arial','',11); + + $pdf->Cell(50,8,convertirc("Le présent avenant a pour objet de régulariser les mouvements d'effectifs listés sur les états en annexe."),0,1,'L',false); + + $pdf->SetFont('Arial','BUI',13); + + $pdf->Cell(50,8,convertirc("PRIME NETTE ANNUELLE"),0,1,'L',false); + $pdf->Ln(5); + $pdf->SetFont('Arial','',10); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(65,5,convertirc("Colleges"),'LTR',0,'C',false); + $pdf->Cell(30,5,convertirc("Nombre de"),'LTR',0,'C',false); + $pdf->Cell(40,5,convertirc("Prime nette annuelle"),'LTR',0,'C',false); + $pdf->Cell(35,5,convertirc("TOTAL"),'LTR',1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(65,5,convertirc(""),'LBR',0,'C',false); + $pdf->Cell(30,5,convertirc("famille(s)"),'LBR',0,'C',false); + $pdf->Cell(40,5,convertirc("par famille"),'LBR',0,'C',false); + $pdf->Cell(35,5,convertirc(""),'LBR',1,'C',false); + foreach($conditionsparticuliers as $conditionsparticulier){ + + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->SetFont('Arial','', 8); + $pdf->Cell(65,5,convertirc(substr($conditionsparticulier['libelleCollege'] ,0,40)),'LBR',0,'C',false); + $pdf->SetFont('Arial','', 8); + $pdf->Cell(30,5,convertirc(format_N($conditionsparticulier['nbPersonneCol'])),'LBR',0,'C',false); + $pdf->Cell(40,5,convertirc(format_N($conditionsparticulier['primeHt'])),'LBR',0,'C',false); + $pdf->Cell(35,5,convertirc(format_N($conditionsparticulier['primeHtTCol'])),'LBR',1,'C',false); + + } + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Total Prime nette Annuelle"),'LBR',0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['@primeTotaleHT'])),'LBR',1,'C',false); + // Saut de ligne + $pdf->Ln(10); + $pdf->SetFont('Arial','BUI',13); + + $pdf->Cell(0,8,convertirc("PRIME A REGLER A LA SIGNATURE DE L'AVENANT"),0,1,'L',false); + $pdf->SetFont('Arial','',11); + $pdf->Cell(10,2,convertirc(""),0,0,'L',false); + $pdf->Cell(50,8,convertirc("La prime est payable au comptant une seule fois."),0,1,'L',false); + $pdf->Cell(10,2,convertirc(""),0,0,'L',false); + $pdf->Cell(135,8,convertirc("Le souscripteur réglera à la signature du présent avenant la somme totale de "),0,0,'L',false); + $pdf->SetFont('Arial','BU',11); + $pdf->Cell(20,8,convertirc(format_N($conditionsparticulier['@primeTotaleHT'])." F CFA "),0,1,'L',false); + $pdf->SetFont('Arial','',11); + $pdf->Cell(10,2,convertirc(""),0,0,'L',false); + $pdf->Cell(50,8,convertirc("pour la période d'assurance du ".dateToFrench($entetecp['dateEffetPolice'],'j F Y')." au ".dateToFrench($entetecp['dateEcheancePolice'],'j F Y')." décomptée ci-dessous."),0,1,'L',false); + $pdf->Ln(5); + + + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Prime nette d'incorporation du ".dateToFrench($entetecp['dateEffetPolice'],'j F Y')." au ".dateToFrench($entetecp['dateEcheancePolice'],'j F Y')),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier[''])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Prime nette de retrait du ".dateToFrench($entetecp['dateEffetPolice'],'j F Y')." au ".dateToFrench($entetecp['dateEcheancePolice'],'j F Y')),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier[''])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Prime nette à percevoir "),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['@primeTotaleHT'])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Accessoires"),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['@accessoireTSC'])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Taxes d'enregistrement"),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['@taxe'])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(125,5,convertirc("PRIME TOTALE A PERCEVOIR"),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['primeTotaleTTC'])),1,1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','BI',10); + $pdf->Cell(0,5,convertirc("IL N'EST PAS AUTREMENT DEROGE AUX CLAUSES ET"),'LTR',1,'C',false); + $pdf->Cell(0,5,convertirc("CONDITIONS DE LA POLICE ETDESA VENANTS PRECEDENTS"),'LBR',1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','',10); + $pdf->Cell(10,5,convertirc(""),0,0,'L',false); + $pdf->Cell(45,5,convertirc("Etabli en 2 exemplaires originaux à Abidjan, le ".dateToFrench("now" ,'l j F Y') ),0,1,'L',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,5,convertirc("LE SOUSCRIPTEUR"),0,0,'C',false); + $pdf->Cell(90,5,convertirc("LA COMPAGNIE"),0,1,'C',false); + + +/*////////// + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Compagnie"),0,0,'L',false); + + + if(strlen($entetecp['garant']) > "40"){ + $pdf->SetFont('Arial','B',7); + $pdf->Cell(50,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + else{ + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +/////////////////////////////////*/ + $pdf->Ln(30); + +/// + + +// $pdf->SetFont('Arial','',9); +// $pdf->Cell(0,$ht,convertirc("Edité le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'R',false); + + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,270,190); + } + } + $fichier="Temp/TMP_SUITE_DES_CONDITIONS_PARTICULIERES_INCORPORATION"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Conditionparticulieresuiteretraiteng.php b/Societes/ric/Tarifs/Controleur/Conditionparticulieresuiteretraiteng.php new file mode 100755 index 00000000..88809cfd --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Conditionparticulieresuiteretraiteng.php @@ -0,0 +1,304 @@ +police_societe = new Police_sodciete(); + + $idAvenant = $this->requete->getParametreFormulaire("idAvenant"); + $numeroAvenant_cp=0; + $numeroAvenant = $_SESSION['numeroAvenant_cp'] ; + $p_emission = $numeroAvenant['numeroAvenant']; + + $debutStat = $this->requete->getParametreDate("debutStat"); + $finStat = $this->requete->getParametreDate("finStat"); + + $numeroAvenant = $this->police->getNumeroAvenant($idAvenant); + + $_SESSION['numeroAvenant_cp'] = $numeroAvenant; + $_SESSION['debutStat'] = $debutStat; + $_SESSION['finStat'] = $finStat; + $entetecp = $this->police_societe->getEnteteCP($idPolice,$p_emission); + + + $collegecps = $this->police_societe->getCollegesCpLienParente($idPolice); + //$collegecp2s = $this->police_societe->getCollegesCpLienParente($idPolice); + + $garantiescollegecps = $this->police_societe->getGarantiesCollegesCpLienParente($idPolice); + $tableaupretationcps = $this->police_societe->gettableauPrestationsCpLienParente($idPolice); + + $conditionsparticuliers = $this->police_societe->getconditionsparticuliersretrait($idPolice,$debutStat,$finStat); + $codeGarant = $this->police_societe->getcodeGarant($idPolice); + + $codeGcAssureur = $codeGarant['codeGcAssureur']; + $infosDuGarant = $this->police_societe->getInfosGarant($codeGcAssureur); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=10; + $htext=6; + // Logo + //$pdf->Image($_SESSION['lienLogo'],10,6,30); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',12); + + + + // Décalage à droite + $pdf->Cell(30); + $pdf->SetFont('Arial','B',11); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $text = convertirc("SUITE DES CONDITIONS PARTICULIERES DE L'AVENANT N° ".$numeroAvenant['numeroAvenant']); + $text .= convertirc(" A LA POLICE N° ".$entetecp['numeroPoliceGarant']." SOUCRITE PAR LA SOCIETE ".$entetecp['libellePolice']); + $text .= convertirc("AUPRES DE ".$entetecp['garant']); + $pdf->MultiCell(150,5, $text,1,'C',true); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BU',13); + + $pdf->Cell(50,8,convertirc("OBJET DE L'AVENANT"),0,1,'L',false); + + $pdf->SetFont('Arial','',11); + + $pdf->Cell(50,8,convertirc("Le présent avenant a pour objet de régulariser les mouvements d'effectifs listés sur les états en annexe."),0,1,'L',false); + + $pdf->SetFont('Arial','BUI',13); + + $pdf->Cell(50,8,convertirc("PRIME NETTE ANNUELLE"),0,1,'L',false); + $pdf->Ln(5); + $pdf->SetFont('Arial','',10); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(65,5,convertirc("Colleges"),'LTR',0,'C',false); + $pdf->Cell(30,5,convertirc("Nombre de"),'LTR',0,'C',false); + $pdf->Cell(40,5,convertirc("Prime nette annuelle"),'LTR',0,'C',false); + $pdf->Cell(35,5,convertirc("TOTAL"),'LTR',1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(65,5,convertirc(""),'LBR',0,'C',false); + $pdf->Cell(30,5,convertirc("famille(s)"),'LBR',0,'C',false); + $pdf->Cell(40,5,convertirc("par famille"),'LBR',0,'C',false); + $pdf->Cell(35,5,convertirc(""),'LBR',1,'C',false); + foreach($conditionsparticuliers as $conditionsparticulier){ + + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->SetFont('Arial','', 8); + $pdf->Cell(65,5,convertirc(substr($conditionsparticulier['libelleCollege'] ,0,40)),'LBR',0,'C',false); + $pdf->SetFont('Arial','', 8); + $pdf->Cell(30,5,convertirc(format_N($conditionsparticulier['nbPersonneCol'])),'LBR',0,'C',false); + $pdf->Cell(40,5,convertirc(format_N($conditionsparticulier['primeHt'])),'LBR',0,'C',false); + $pdf->Cell(35,5,convertirc(format_N($conditionsparticulier['primeHtTCol'])),'LBR',1,'C',false); + + } + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Total Prime nette Annuelle"),'LBR',0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['@primeTotaleHT'])),'LBR',1,'C',false); + // Saut de ligne + $pdf->Ln(10); + $pdf->SetFont('Arial','BUI',13); + + $pdf->Cell(0,8,convertirc("PRIME A REGLER A LA SIGNATURE DE L'AVENANT"),0,1,'L',false); + $pdf->SetFont('Arial','',11); + $pdf->Cell(10,2,convertirc(""),0,0,'L',false); + $pdf->Cell(50,8,convertirc("La prime est payable au comptant une seule fois."),0,1,'L',false); + $pdf->Cell(10,2,convertirc(""),0,0,'L',false); + $pdf->Cell(135,8,convertirc("Le souscripteur réglera à la signature du présent avenant la somme totale de "),0,0,'L',false); + $pdf->SetFont('Arial','BU',11); + $pdf->Cell(20,8,convertirc(format_N($conditionsparticulier['@primeTotaleHT'])." F CFA "),0,1,'L',false); + $pdf->SetFont('Arial','',11); + $pdf->Cell(10,2,convertirc(""),0,0,'L',false); + $pdf->Cell(50,8,convertirc("pour la période d'assurance du ".dateToFrench($entetecp['dateEffetPolice'],'j F Y')." au ".dateToFrench($entetecp['dateEcheancePolice'],'j F Y')." décomptée ci-dessous."),0,1,'L',false); + $pdf->Ln(5); + + + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Prime nette d'incorporation du ".dateToFrench($entetecp['dateEffetPolice'],'j F Y')." au ".dateToFrench($entetecp['dateEcheancePolice'],'j F Y')),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier[''])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Prime nette de retrait du ".dateToFrench($entetecp['dateEffetPolice'],'j F Y')." au ".dateToFrench($entetecp['dateEcheancePolice'],'j F Y')),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier[''])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Prime nette à percevoir "),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['@primeTotaleHT'])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Accessoires"),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['@accessoireTSC'])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->Cell(125,5,convertirc("Taxes d'enregistrement"),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['@taxe'])),1,1,'C',false); + $pdf->Cell(10,5,convertirc(""),0,0,'C',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(125,5,convertirc("PRIME TOTALE A PERCEVOIR"),1,0,'C',false); + $pdf->Cell(45,5,convertirc(format_N($conditionsparticulier['primeTotaleTTC'])),1,1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','BI',10); + $pdf->Cell(0,5,convertirc("IL N'EST PAS AUTREMENT DEROGE AUX CLAUSES ET"),'LTR',1,'C',false); + $pdf->Cell(0,5,convertirc("CONDITIONS DE LA POLICE ETDESA VENANTS PRECEDENTS"),'LBR',1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','',10); + $pdf->Cell(10,5,convertirc(""),0,0,'L',false); + $pdf->Cell(45,5,convertirc("Etabli en 2 exemplaires originaux à Abidjan, le ".dateToFrench("now" ,'l j F Y') ),0,1,'L',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','BU',10); + $pdf->Cell(100,5,convertirc("LE SOUSCRIPTEUR"),0,0,'C',false); + $pdf->Cell(90,5,convertirc("LA COMPAGNIE"),0,1,'C',false); + + +/*////////// + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Compagnie"),0,0,'L',false); + + + if(strlen($entetecp['garant']) > "40"){ + $pdf->SetFont('Arial','B',7); + $pdf->Cell(50,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + else{ + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35,$htext,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(50,$htext,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(35,$htext,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$htext,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +/////////////////////////////////*/ + $pdf->Ln(30); + +/// + + +// $pdf->SetFont('Arial','',9); +// $pdf->Cell(0,$ht,convertirc("Edité le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'R',false); + + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,270,190); + } + } + $fichier="Temp/TMP_SUITE_DES_CONDITIONS_PARTICULIERES_RETRAIT"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Consultercollegeindex.php b/Societes/ric/Tarifs/Controleur/Consultercollegeindex.php new file mode 100755 index 00000000..8f43e49f --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Consultercollegeindex.php @@ -0,0 +1,118 @@ +requete->existeParametre("id")) + { + $_SESSION['idCollege']=$this->requete->getParametre("id"); + + $user = $_SESSION['login']; + + $idCollege = $_SESSION['idCollege']; + + $_SESSION['idCollege_C'] = $_SESSION['idCollege']; + + + $idCollegeTemp = $this->college_temp->initModifCollege($idCollege, $user); + + + $_SESSION['idCollegeTemp'] = $idCollegeTemp; + + $_SESSION['codeLienParente_C'] = "A"; + + $this->rediriger("Consultercollege"); + } + else + { + require_once $_SESSION['dossierSociete'].'/Tarifs/Modele/Trancheage.php'; + require_once $_SESSION['dossierSociete'].'/Tarifs/Modele/Capitalfraisfuneraire.php'; + require_once $_SESSION['dossierSociete'].'/Tarifs/Modele/Lienparente_societe.php'; + + $this->trancheage = (new Trancheage())->getListe(); + $this->capitalfraisfuneraire = (new Capitalfraisfuneraire())->getListe(); + $this->lienparente_societe = (new Lienparente_societe())->getListe(); + + $_SESSION['nomFormulaire'] = "frmmodifiercollege"; + + $_SESSION['vueCollege'] = "Consultercollege"; + + $idCollege = $_SESSION['idCollege']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $collegeTemp = $this->college_temp->getCollegeTemp($idCollegeTemp); + + $garantiesbase = $this->college_temp->getGarBaseCollege($idCollegeTemp); + $garoptionnelles = $this->college_temp->getGarOptCollege($idCollegeTemp); + $garoptacquises = $this->college_temp->getGarOptCollegeAcq($idCollegeTemp); + + $codeLienParente = $_SESSION['codeLienParente_C']; + + $garanties_lien_parente = $this->college_temp->getGarantieLienParente($idCollegeTemp, $codeLienParente); + $prime_colleges = $this->college_temp->getPrimesCollege($idCollegeTemp); + $collegelienparenteTemp = $this->college_temp->getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente); + + $codeTypeTarifActe = $collegeTemp['codeTypeTarifActe']; + $codeProduit = $collegeTemp['codeProduit']; + $codeGcAssureur = $collegeTemp['codeGcAssureur']; + $codeReseau = $collegeTemp['codeReseau']; + + //var_dump($codeReseau); die(); + + $idPolice = $collegeTemp['idPolice']; + $typeGarant = $this->college_temp->getTypeGarantPolice($idPolice); + + $_SESSION['codeProduit'] = $codeProduit; + $_SESSION['codeGcAssureur'] = $codeGcAssureur; + $_SESSION['codeTypeGarant'] = $typeGarant['codeTypeGarant']; + $_SESSION['forfait'] = "1"; + $_SESSION['codeTypeTarifActe'] = $codeTypeTarifActe; + + $produit = $this->produit->getProduitGarant($codeGcAssureur); + + $collegetype = $this->produit->getListeCollegeType(); + $etendueterritoire = $this->produit->getlisteTerritoire(); + $typeremboursement = $this->produit->getlisteTypeRemboursement(); + $tarifacte = $this->tarifacte->getTarifActeByType($codeTypeTarifActe); + $reseausoins = $this->reseausoins->getReseauProduit($codeProduit); + + $tm = $this->produit->getTicketModerateurProduit($codeProduit, $codeGcAssureur); + + $ticketModerateurCollege = $tm['ticketModerateur']; + + $nomGarant = $this->college_temp->getNomGarant($codeGcAssureur); + + + $typeTarifActe = $this->college_temp->getTypeTarifActe(); + + + $tarifacte = $this->tarifacte->getTarifActeByType($codeTypeTarifActe); + + $forfaitTaux = $this->college_temp->getTauxForfait(); + $lienParente = $this->college_temp->getNomStatus($codeLienParente); + + $bareme = $this->college_temp->getBaremeProduit($codeProduit, $codeGcAssureur); + + + $baseTarif = $this->college_temp->getBaseTarifCollege(); + $plafondFamille = $this->college_temp->getPlafondFamille($codeProduit,$codeGcAssureur); + $plafondIndividu = $this->college_temp->getPlafondIndividu($codeProduit,$codeGcAssureur); + + $codeModecalculPrime = $this->college_temp->getModecalculprimeproduit($codeProduit,$codeGcAssureur); + $codeBaseTarification = $this->requete->getParametreFormulaire("codeBaseTarification"); + + $primesTrancheAge = $this->college_temp->getPrimeTrancheAge($codeProduit,$codeGcAssureur); + + $primesTotalTrancheAge = $this->college_temp->getPrimeTotalTrancheAge($codeProduit,$codeGcAssureur); + + $modifierBareme = $this->college_temp->getmodifierBareme(); + + $this->genererVue(array('collegeTemp' => $collegeTemp, 'produit' => $produit, 'collegetype' => $collegetype, + 'garantiesbase' => $garantiesbase, 'garoptionnelles' => $garoptionnelles,'etendueterritoire' => $etendueterritoire, + 'garoptacquises' => $garoptacquises, 'rachattm' => $this->rachattm, 'typeremboursement' => $typeremboursement, + 'tarifacte' => $tarifacte,'reseausoins' => $reseausoins, 'codeModecalculPrime'=> $codeModecalculPrime, + 'trancheage' => $this->trancheage, 'capitalfraisfuneraire' => $this->capitalfraisfuneraire,'typeTarifActe' => $typeTarifActe, + 'prime_colleges' => $prime_colleges, 'lienparente_societe' => $this->lienparente_societe,'forfaitTaux' => $forfaitTaux, + 'collegelienparenteTemp' => $collegelienparenteTemp, 'garanties_lien_parente' => $garanties_lien_parente, + 'lienParente' => $lienParente,'bareme' => $bareme,'ticketModerateurCollege' => $ticketModerateurCollege,'baseTarif' => $baseTarif, + 'plafondFamille'=>$plafondFamille,'plafondIndividu' => $plafondIndividu, 'ouinonbudget' => $this->ouinonbudget, 'nomGarant' => $nomGarant, + 'codeBaseTarification' => $codeBaseTarification, 'primesTrancheAge' => $primesTrancheAge, 'primesTotalTrancheAge'=> $primesTotalTrancheAge, + 'modifierBareme'=> $modifierBareme)); + } +?> diff --git a/Societes/ric/Tarifs/Controleur/Courriercontrateng.php b/Societes/ric/Tarifs/Controleur/Courriercontrateng.php new file mode 100755 index 00000000..aa0af04e --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Courriercontrateng.php @@ -0,0 +1,133 @@ +police_societe = new Police_sodciete(); + + $idAvenant = $this->requete->getParametreFormulaire("idAvenant"); + $numeroAvenant_cp=0; + $numeroAvenant = $_SESSION['numeroAvenant_cp'] ; + $p_emission = $numeroAvenant['numeroAvenant']; + + $entetecp = $this->police_societe->getEnteteCP($idPolice,$p_emission); + //highlight_string(""); + + $collegecps = $this->police_societe->getCollegesCpLienParente($idPolice); + //$collegecp2s = $this->police_societe->getCollegesCpLienParente($idPolice); + $garantiescollegecps = $this->police_societe->getGarantiesCollegesCpLienParente($idPolice); + $tableaupretationcps = $this->police_societe->gettableauPrestationsCpLienParente($idPolice); + $conditionsparticuliers = $this->police_societe->getconditionsparticuliers($idPolice); + $codeGarant = $this->police_societe->getcodeGarant($idPolice); + + $codeGcAssureur = $codeGarant['codeGcAssureur']; + $infosDuGarant = $this->police_societe->getInfosGarant($codeGcAssureur); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=10; + $htext=6; + // Logo + //$pdf->Image($_SESSION['lienLogo'],10,6,30); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',12); + + + + // Décalage à droite + $pdf->Cell(30); + + $pdf->SetFont('Arial','B',11); + + $pdf->SetFillColor(153,255,153); // bleu + /* Titre + $text = convertirc("SUITE DES CONDITIONS PARTICULIERES DE L'AVENANT N° ".$numeroAvenant['numeroAvenant']); + $text .= convertirc(" A LA POLICE N° ".$entetecp['numeroPoliceGarant']." SOUCRITE PAR LA SOCIETE ".$entetecp['libellePolice']); + $text .= convertirc("AUPRES DE ".$entetecp['garant']); + $pdf->MultiCell(150,5, $text,1,'C',true); + */ + + $pdf->Ln(40); + + $pdf->Cell(50,6,convertirc($entetecp['garant']),0,1,'L',false); + $pdf->Cell(50,6,convertirc(strtoupper($infosDuGarant['siglerepresentant'].'. '.$infosDuGarant['representant'])),0,1,'L',false); + $pdf->Cell(50,6,convertirc(strtoupper($infosDuGarant['servicerepresentant'])),0,1,'L',false); + + $pdf->SetFont('Arial','BU',11); + $pdf->Cell(50,6,convertirc($_SESSION['villeSociete']),0,1,'L',false); + + $pdf->Ln(20); + $pdf->SetFont('Arial','',11); + $pdf->Cell(45,5,convertirc($_SESSION['villeSociete'].", le ".dateToFrench("now" ,'l j F Y') ),0,1,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','BU',13); + + $pdf->Cell(50,8,convertirc("OBJET : TRANSISSION DE CONTRAT"),0,1,'L',false); + + $pdf->SetFont('Arial','',11); + $pdf->Ln(5); + + $pdf->Cell(50,8,convertirc($infosDuGarant['siglerepresentant'].', '),0,1,'L',false); + + $pdf->Ln(5); + + $pdf->MultiCell(170,4,convertirc("Nous avons le plaisir de vous transmettre sous ce pli les pièces contractuelles relatives au(x) contrat(x) ci-dessous cité(s) :"),0,1); + + $pdf->Ln(5); + $pdf->SetFont('Arial','B',11); + $pdf->Cell(20,5,convertirc("Ordre"),1,0,'C',false); + $pdf->Cell(110,5,convertirc("NOM POLICE"),1,0,'C',false); + $pdf->Cell(50,5,convertirc("NUMERO POLICE"),1,1,'C',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(20,5,convertirc("01"),1,0,'C',false); + $pdf->Cell(110,5,convertirc($entetecp['libellePolice']),1,0,'C',false); + $pdf->Cell(50,5,convertirc($entetecp['numeroPolice']),1,1,'C',false); + $pdf->Ln(10); + $pdf->SetFont('Arial','',11); + + $pdf->Cell(0,8,convertirc("Tout en vous souhaitant bonne réception,"),0,1,'L',false); + + + $pdf->Cell(0,8,convertirc("Nous vous prions d'agréer, ".$infosDuGarant['siglerepresentant'].", l'expression de nos sentiments distingués."),0,1,'L',false); + + $pdf->SetFont('Arial','B',11); + $pdf->Ln(10); + + + $pdf->Cell(50,6,convertirc(strtoupper($_SESSION['nomUtilisateur'].' '.$_SESSION['prenomsUtilisateur'])),0,1,'L',false); + $pdf->Cell(50,6,convertirc($_SESSION['profil']),0,1,'L',false); + + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,270,190); + } + } + $fichier="Temp/TMP_SUITE_DES_CONDITIONS_PARTICULIERES"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Cpscat5.php b/Societes/ric/Tarifs/Controleur/Cpscat5.php new file mode 100755 index 00000000..087487c2 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Cpscat5.php @@ -0,0 +1,555 @@ +police->getEnteteCP($idPolice); + $collegecps = $this->police->getCollegesCP($idPolice); + $collegecp2s = $this->police->getCollegesCP($idPolice); + $garantiescollegecps = $this->police->getGarantiesCollegesCP($idPolice); + $tableaupretationcps = $this->police->gettableauPrestationsCP($idPolice); + // $tableauajustementcps = $this->police->gettableauAjustementCP($idPolice); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=10; + + $pdf->SetMargins(10, 10, 10) ; + + $pdf->SetFont('Arial','B', 15); + + $pdf->SetY(40); + + $pdf->SetFillColor(135,206,250); // bleu + + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(0,$ht,convertirc("CONTRAT D'ASSURANCE SANTE"),1,1,'C',true); + } + else + { + $pdf->Cell(0,$ht,convertirc("CONTRAT - D'ASSURANCE SANTE INDIVIDUEL"),1,1,'C',true); + } + + $pdf->SetFont(''); + + $pdf->Ln(15); + + $pdf->Cell(50,$ht,convertirc("No POLICE"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['numeroPolice']),0,1,'L',false); + + $pdf->Cell(50,$ht,convertirc("SOUSCRITE PAR"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['nomClient']),0,1,'L',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Cell(50,$ht,convertirc("Dont le Siège Social est"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['adresseGeo']),0,1,'L',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("En qualité de CONTRACTANT "),0,0,'C',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("Auprès de "),0,1,'C',false); + + $pdf->SetFont('Arial','B', 15); + $pdf->Cell(0,$ht,convertirc($entetecp['garant']),0,1,'C',false); + + + $pdf->SetFont('Arial','', 10); + + $pdf->Cell(0,$ht,convertirc("En qualité d'ASSUREUR "),0,1,'C',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("Le présent contrat est constitué et régi par les CONDITIONS PARTICULIERES, les DISPOSITIONS"),0,1,'C',false); + $pdf->Cell(0,$ht,convertirc("SPECIALES ainsi que par les CONDITIONS GENERALES."),0,1,'C',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("Il a pour objet la garantie suivante :"),0,1,'C',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','B', 13); + $pdf->Cell(0,$ht,convertirc("MALADIE - HOSPITALISATION – MATERNITE"),0,1,'C',false); + + + $pdf->AddPage(); + $ht=6; + + $pdf->SetFont('Arial','B', 15); + $pdf->Cell(0,$ht,convertirc("CONDITIONS PARTICULIERES"),0,1,'C',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc($entetecp['nomClient']),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Déclare souscrire aux conditions générales et dispositions spéciales du Contrat "); + $text .= convertirc("d'Assurance Maladie Groupe et celles particulières qui suivent, auprès de ".$_SESSION['nomSociete']); + $text .= convertirc(" en faveur des personnes à assurer, pour les Garanties et moyennant les Cotisations ci-après :"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 1 : PERSONNES A ASSURER"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Les membres du Personnel de l'assuré âgés de plus de 18 ans et de moins de 70 ans à "); + $text .= convertirc("l'entrée dans l'assurance selon la répartition suivante :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(30,$ht,convertirc("Catégorie"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Nb Adh"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Nb Dép"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Prime Adh"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Prime Dép"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Prime Tot"),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + + foreach ($collegecps as $collegecp) + { + $pdf->Cell(30,$ht,convertirc($collegecp['codeProduit']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['nbAdherent']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['nbAyantdroit']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeTtcAdherent']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeTtcBeneficiaire']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeTtcTotal']),1,1,'C',false); + } + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(30,$ht,convertirc("Totaux : "),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($entetecp['nbAdherent']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($entetecp['nbAyantdroit']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($entetecp['primeTtcAdherent']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($entetecp['primeTtcBeneficiaire']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($entetecp['primeTtcTotal']),1,1,'C',false); + + + $pdf->Ln(5); + + $pdf->SetFont('Arial','', 9); + $text = convertirc("En dehors de cette tranche d'âge la couverture fait l'objet d'un accord spécial entre le souscripteur et l'Assureur."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $text = convertirc("A partir de 60 ans, un examen médical est obligatoire pour chaque assuré."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 2 : PRISE D’EFFET ET MODE DE FONCTIONNEMENT DE VITALIS SANTE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Sous réserve d'acceptation par l'Assureur, les garanties prennent effet pour chaque personne à assurer: +- Dès la date d'effet du contrat pour les personnes à assurer se trouvant déjà au service du Contractant. + +- Directement après la date de leurs admissions au Service du Contractant pour les personnes engagées postérieurement à la date d'effet du contrat. Le Représentant du Contractant doit être en étroite collaboration avec ACTIVA ASSURANCES CAMEROUN. Une prime calculée au prorata est payable immédiatement pour toute personne devenue Adhérent pendant la période de couverture. + +- Ainsi, chaque assuré aura une carte d’assurance maladie qu’il va présenter aux prestataires de soins et ceux-ci vont vérifier à partir de ses empreintes digitales son identité et sa limite de couverture via l’application de ACTIVA SANTE. Cela va permettre aussi à l’assuré de voir en temps réel où il en est avec sa limite de couverture."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("Dans le but d’offrir une meilleure prise en charge, chaque membre principal au contrat doit remplir un formulaire de déclaration dans un délai d’un mois à partir de la réception du formulaire."); + $pdf->MultiCell(0, $ht, $text); + + // $pdf->Ln(5); + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("Article 3 : DUREE DU CONTRAT"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Le présent contrat est souscrit pour une durée de ".$entetecp['dureePeriodicite']." à compter du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']." +Il sera renouvelable tacitement dans les conditions prévues à l'article 6 des présentes conditions particulières sauf résiliation avec un préavis de un mois avant son échéance."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $text = convertirc("Aucune obligation de renouvellement du contrat n’incombe aux parties. ".$_SESSION['nomSociete']." se réserve le droit de refuser ou de restreindre les conditions de couverture à l'égard de tous les Membres ou de tout Membre en accordant à l'assuré un délai de préavis d’un mois selon les conditions prévues à l’article 6 des présentes conditions particulières."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(5); + + $pdf->Cell(0,$ht,convertirc("Article 4 : DES GARANTIES"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("4.1.A. PRESTATIONS"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("La garantie maladie offre le paiement des frais pour les soins de santé à la suite de maladie, d'accident ou de maternité. Ainsi, sont prises en charge les prestations médicales suivantes : +- soins ambulatoires: le patient va voir un medecin, celui-ci lui prescrit des medicaments. Sur presentation de sa carte, il va prendre les medicaments à la pharmacie et rentre les prendre chez lui à la maison, +- hospitalisation: le patient va à l’hopital et y reste jusqu’à ce que il soit guerri, +- maternité (sauf pour les dépendants): sont couverts tous les soins pre-natals et post-natals. Il est à noter que les conditions de prématurité ne sont pas couvertes, +- Tous les traitements médicaux et les médicaments prescrits par un médecin diplômé et enregistré et qui a été autorisé par le Ministère de la Santé. Notre régime médical donne accès à des spécialités et à des médicaments génériques. +Cependant, les spécialités doivent être prescrites par un médecin spécialiste, sauf en cas d'urgence par autorisation préalable +- Les garanties de couverture concernent le personnel assuré; son conjoint ainsi que leurs enfants à charge jusqu'à 21 ans et prolongé jusqu'à 25 ans si l'enfant est encore étudiant sur présentation d’une attestation de scolarité et d’un extrait d’acte de naissance (ou équivalent pour les enfants adoptifs). +- Frais d'Ambulance pour les cas d'urgence d'un hôpital à un autre et d'un lieu d'accident à l'hôpital en cas d'accident sur le territoire burundais. Le service ambulance s’appliquera aux assurés malades qui devront être traités dans un hôpital désigné, à partir d’une zone où les équipements indispensables n’existent pas, sans toutefois dépasser 120.000 FBu durant toute la période couverture (et dans la limite annuelle du patient hospitalisé). +- Le remboursement sera basé sur le tarif le plus cher selon la catégorie dans laquelle vous êtes assuré localement. +- La chambre individuelle est couverte +- Ajout automatique d'un nouveau-né et/ou conjoint sans prime supplémentaire à l'exception des frais de carte +- Ajout automatique d'un nouvel adhérent avec une prime calculée au prorata +- Suppression automatique pour l'agent qui quitte le groupe et remboursement de 75% de la prime non consommée calculée au prorata, si aucun service médical n'a été payé pour lui et les personnes à sa charge; + +- L'émission de cartes d'assurance maladie dans les 7 jours suivant la notification et/ou preuve de paiement. +- Les cartes d'assurance maladie portent un numéro de téléphone que le patient peut appeler si nécessaire. Il y aura également un gestionnaire de sinistre désigné spécifiquement en charge de la COOPERATIVE. +- La liste de tous les partenaires de ACTIVA ASSURANCES CAMEROUN est jointe à ce contrat, +- Le remboursement sera basé sur le tarif le plus cher des prestataires de la catégorie 5 pour les frais déboursés chez un prestataire qui n'a pas de partenariat avec ACTIVA ASSURANCES CAMEROUN et qui n'a pas été résilié ou suspendu pour faute ou mauvaises pratiques. +- Délai maximum de remboursement en cas de paiement direct là où il n’y a pas de partenariat et après réception de tous les documents requis : 2 jours +- Gestion commune avec l'employeur ou Représentant du groupe des cas de fraudes +- Les frais funéraires en cas de décès d'un membre assuré ou son bénéficiaire sont payables endeans 24 heures suivant la réception de l'avis de décès à l'Employeur(Représentant du groupe) ou à la personne qu'il peut désigner. +- La liste du personnel ainsi que les rapports de consommations médicales seront fournis mensuellement. +- En cas de dépassement des limites de l'assuré au cours de la période d'assurance, ACTIVA ASSURANCES CAMEROUN peut le couvrir sans prime supplémentaire si le taux de sinistralité du groupe COOPERATIVE Personnel est inférieur à 60%."); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("4.1. B. REMBOURSEMENT DES SOINS"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("Aucun acte médical, appareil, opération ou hospitalisation, n'est pris en charge s'il n'a été ordonné par une personne titulaire d'un diplôme de médecin, chirurgien ou chirurgien - dentiste. +Aucun acte n'est pris en charge s'il n'est exécuté par une personne qualifiée et dans un établissement officiellement autorisé par le Ministère de la santé qui, sauf cas de force majeure, doit être conventionné par l'Assureur. +Le payement direct qui consiste à ce que l'assuré paie la totalité de la facture des prestations médicales et se fait rembourser chez l'Assureur n'est utilisé qu'à titre exceptionnel. +A cet effet, le prestataire ou l'assuré le cas échéant, devra remettre à l'Assureur les notes d'honoraires ou de frais et les ordonnances acquittées, datées et mentionnant les noms et prénoms de l'Assuré qu'elles concernent. +Les notes doivent indiquer la nature et la date des soins donnés en distinguant le coût de chacun des actes pratiqués. +Les ordonnances doivent porter lisiblement les noms et prénoms de l'assuré et s'accompagner des justificatifs de payement des produits pharmaceutiques."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("4.1. C.ETENDUE DE LA GARANTIE MALADIE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("La garantie englobe la personne assurée elle-même, son conjoint ainsi que leurs enfants légalement à charge de moins de 21 ans ou de moins de 25 ans s'ils sont encore étudiants."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->AddPage(); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("4.1. D.PRESTATIONS ET TAUX GARANTIS"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("Les prestations et les taux garantis sont décrits, selon la catégorie, dans le tableau ci-dessous :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(100,$ht,convertirc("Type de Prestataire"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Taux Garantie(%)"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Ticket Modérateur(%)"),1,1,'C',false); + + $categorie = ""; + + foreach ($tableaupretationcps as $tableaupretationcp) + { + if($categorie!=$tableaupretationcp['libelleCollege']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(180,$ht,convertirc($tableaupretationcp['codeProduit']." : ".$tableaupretationcp['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + } + $pdf->Cell(100,$ht,convertirc($tableaupretationcp['reseausoin']),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("100"-$tableaupretationcp['tm']),1,0,'C',false); + $pdf->Cell(40,$ht,$tableaupretationcp['tm'],1,1,'C',false); + + $categorie = $tableaupretationcp['libelleCollege']; + } + + // $pdf->AddPage(); + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("PLAFONDS ANNUELS PAR FAMILLE"),0,1,'L',false); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(2); + + $pdf->Cell(100,$ht,convertirc("Garantie"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Plafond"),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc("Par Bén."),1,1,'C',false); + + $produit = ""; + + foreach ($garantiescollegecps as $garantiescollegecp) + { + if($produit!=$garantiescollegecp['libelleCollege']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(160,$ht,convertirc($garantiescollegecp['codeProduit']." : ".$garantiescollegecp['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + } + $pdf->Cell(100,$ht,convertirc($garantiescollegecp['garantie']),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($garantiescollegecp['plafond']),1,0,'C',false); + + $champApplication = ($garantiescollegecp['champApplication']=="1"); + + if($champApplication == TRUE) + $check = "4"; + else + $check = ""; + + $pdf->SetFont('ZapfDingbats','', 9); + $pdf->Cell(20, $ht, $check,1,1,'C',false); + $pdf->SetFont('Arial','', 9); + + $produit = $garantiescollegecp['libelleCollege']; + } + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("4.2. CESSATION DES GARANTIES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Les garanties cessent collectivement le jour de la résiliation du contrat ou de l’échéance de celui-ci et individuellement, le jour où la personne assurée atteint la limite de couverture, quitte le service du Contractant, ou décède. + +En cas de fraude avérée, l'Assureur se réserve le droit de radier l'assuré concerné. L'ensemble des garanties offertes à la personne Assurée doivent être annulées à partir de la date où nous avons eu connaissance de la fraude. Les primes payées ne sont pas remboursables et le Membre ne sera plus admissible comme personne assurée pour les périodes futures"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(5); + + // $pdf->AddPage(); + + $pdf->Cell(0,$ht,convertirc("4.3. SUSPENSION DES GARANTIES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Les garanties sont suspendues collectivement si les primes ne sont pas payées dans les TRENTE (30) jours à partir de la prise d'effet du contrat. +Les garanties reprendront effet immédiatement après le paiement de la totalité des primes en souffrance au moment de la suspension."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(5); + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 5 : COTISATIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Les garanties définies ci-dessus sont accordées moyennant des cotisations de :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Cell(50,$ht,convertirc("Type assuré"),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc("Nb"),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("P. Base"),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("Prime Tot"),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + + $produit = ""; + + foreach ($collegecp2s as $collegecp2) + { + if($produit!=$collegecp2['libelleCollege']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(170,$ht,convertirc($collegecp2['codeProduit']." : ".$collegecp2['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + } + + $pdf->Cell(50,$ht,convertirc(_('Adhérent')),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($collegecp2['nbAdherent']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeFamille']),1,0,'C',false); + // $pdf->Cell(30,$ht,format_N($collegecp2['primeHt']),1,0,'C',false); + // $pdf->Cell(30,$ht,format_N($collegecp2['fraisCarte']),1,0,'C',false); + // $pdf->Cell(30,$ht,format_N($collegecp2['primeTtcAdherent']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeTtcAdherent_total']),1,1,'C',false); + + $pdf->Cell(50,$ht,convertirc(_('Dépendant')),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($collegecp2['nbAyantdroit']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeBeneficiaire']),1,0,'C',false); + // $pdf->Cell(30,$ht,format_N($collegecp2['primeHtBeneficiaire']),1,0,'C',false); + // $pdf->Cell(30,$ht,format_N($collegecp2['fraisCarteBeneficiaire']),1,0,'C',false); + // $pdf->Cell(30,$ht,format_N($collegecp2['primeTtcBeneficiaire']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeTtcBeneficiaire_total']),1,1,'C',false); + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(50,$ht,convertirc("Total"),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($collegecp2['nbAssure']),1,0,'C',false); + // $pdf->Cell(120,$ht,convertirc(""),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc(""),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeTtcTotal']),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + } + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(50,$ht,convertirc("Total Général"),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($entetecp['nbAssure']),1,0,'C',false); + // $pdf->Cell(120,$ht,convertirc(""),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc(""),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($entetecp['primeTtcTotal']),1,1,'C',false); + // } + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 6 : RENOUVELEMENT ET CLAUSE D'AJUSTEMENT DE LA PRIME"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Un mois avant l'échéance, un avenant provisionnel de renouvellement sera envoyé à l’assuré pour le règlement d'un acompte sur le renouvellement. +La prime définie ci-dessus fera l'objet dans les conditions ci-après d'un ajustement en fonction des résultats de Sinistres sur primes nettes(déduction faite des taxes et commissions des intermédiaires) après la clôture de chaque exercice. + +Pour associer l’assuré à l'évolution des consommations, un rapport d’utilisation trimestriel lui sera régulièrement transmis."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 7: EXCLUSIONS GENERALES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("- Ophtalmologie,et toutes les maladies chroniques comme le diabète, le VIH, les hépatites A,B,C... +- Les conditions de prématurité +- Traitement cosmétique et chirurgie esthétique +- Blessures dues à la participation aux jeux et activités dangereuses +- Blessures dues à la participation aux greves et émeutes +- Traitement de fécondité à savoir les frais de traitement liés à la stérilité et à l’impuissance +- Traitement prophylactique, les compléments alimentaires +- Cardiopathie ischemique +- Automutilation intentionnelle,suicide ou influence de l’alcool ou de la drogue +- Cancers de la peau,cancers in situ et mélanomes in situ (sauf les melanones malins) +- Les voyages en avion, sauf si le Membre (ayant payé le billet) voyage dans un avion conçu pour transporter des passagers +- Coût d’appareils auditifs, à moins qu’il résulte d’un accident +- Dépression nerveuse, psychonévrose, à moins qu’il ne résulte d’un accident"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 8 : DISPOSITIONS FINALES"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Lors de l'exécution des actes, examens ou traitements des assurés, le professionnel de santé ou l'établissement de soins est seul et unique responsable des complications, incidents ou accidents pouvant survenir dans la pratique de l'art médical. +En aucun cas, la responsabilité de l'Assureur ne pourra être invoquée pour des faits relevant de la responsabilité du professionnel de santé ou de l'établissement de soins. +Le contrat sera établi en deux (2) exemplaires et prend effet sous réserve des dispositions de l'Article II des CONDITIONS PARTICULIERES."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + // DEBUT TEXTE LIBRE + if ($entetecp['texteCp']>" ") + { + $pdf->AddPage(); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("ANNEXES AUX CONDITIONS PARTICULIERES"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc($entetecp['texteCp']); + + $pdf->MultiCell(0, $ht, $text); + } + // FIN TEXTE LIBRE + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Fait à ".$_SESSION['villeSociete'].", le ".$entetecp['dateJour']),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("POUR VITALIS SANTE"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("POUR L’ASSURE"),0,1,'R',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("LE PRODUCTEUR"),0,1,'L',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("LA DIRECTION"),0,1,'L',false); + + $fichier="Temp/TMP_cp_cat5"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Cpscat5eng.php b/Societes/ric/Tarifs/Controleur/Cpscat5eng.php new file mode 100755 index 00000000..88115fad --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Cpscat5eng.php @@ -0,0 +1,564 @@ +police->getEnteteCP($idPolice); + $collegecps = $this->police->getCollegesCP($idPolice); + $collegecp2s = $this->police->getCollegesCP($idPolice); + $garantiescollegecps = $this->police->getGarantiesCollegesCP($idPolice); + $tableaupretationcps = $this->police->gettableauPrestationsCP($idPolice); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=10; + + $pdf->SetMargins(10, 10, 10) ; + + $pdf->SetFont('Arial','B', 15); + + $pdf->SetY(40); + + $pdf->SetFillColor(135,206,250); // bleu + + $pdf->Cell(0,$ht,convertirc("ACTIVA SANTE – HEALTH INSURANCE"),1,1,'C',true); + + $pdf->SetFont(''); + + $pdf->Ln(15); + + $pdf->Cell(45,$ht,convertirc("No Policy"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['numeroPolice']),0,1,'L',false); + + $pdf->Cell(45,$ht,convertirc("SUBSCRIBER"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['nomClient']),0,1,'L',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Cell(45,$ht,convertirc("Headquarter"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['adresseGeo']),0,1,'L',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("As Insured"),0,0,'C',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("Near "),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B', 15); + $pdf->Cell(0,$ht,convertirc($entetecp['nomSociete']),0,1,'C',false); + + + $pdf->Ln(15); + + $pdf->SetFont('Arial','', 10); + $pdf->Cell(0,$ht,convertirc("The future contract will cover the following guarantees :"),0,1,'C',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','B', 13); + $pdf->Cell(0,$ht,convertirc("DISEASE-HOSPITALIZATION-MATERNITY-OPHTHALOMOLOGY-DENTAL"),0,1,'C',false); + + + $pdf->AddPage(); + $ht=6; + + $pdf->SetFont('Arial','B', 15); + $pdf->Cell(0,$ht,convertirc("PARTICULAR DISPOSITIONS"),0,1,'C',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc($entetecp['nomClient']),0,1,'L',false); + + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Declares to subscribe to the general terms and conditions and special provisions of the Group Heath Insurance Agreement and the following particulars with ".$entetecp['nomSociete']." for the persons to be insured, for the guarantees and for the following contribution :"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 1 : PEOPLE TO BE ASSURED"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Staff members of the insured person over the age of 18 and under 70 at the time of entry into the insurance according to the following breakdown:"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(30,$ht,convertirc("Category"),1,0,'C',false); + $pdf->Cell(25,$ht,convertirc("Nb members"),1,0,'C',false); + $pdf->Cell(25,$ht,convertirc("Nb Dep"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Premium member"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Premium Dep"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Tot premium"),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + + foreach ($collegecps as $collegecp) + { + $pdf->Cell(30,$ht,convertirc($collegecp['codeProduit']),1,0,'C',false); + $pdf->Cell(25,$ht,format_N($collegecp['nbAdherent']),1,0,'C',false); + $pdf->Cell(25,$ht,format_N($collegecp['nbAyantdroit']),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($collegecp['primeTtcAdherent']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeTtcBeneficiaire']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeTtcTotal']),1,1,'C',false); + } + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(30,$ht,convertirc("Totaux : "),1,0,'C',false); + $pdf->Cell(25,$ht,format_N($entetecp['nbAdherent']),1,0,'C',false); + $pdf->Cell(25,$ht,format_N($entetecp['nbAyantdroit']),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($entetecp['primeTtcAdherent']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($entetecp['primeTtcBeneficiaire']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($entetecp['primeTtcTotal']),1,1,'C',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','', 9); + $text = convertirc("Outside this age group the cover is the subject of a special agreement between the subscriber and the Insurer."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $text = convertirc("From the age of 60, a medical examination is compulsory for individual insured persons."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 2: TAKING EFFECT AND MODE OF OPERATION OF ACTIVA SANTE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Subject to acceptance by the Insurer, the benefits take effect for each person to be insured: +- From the effective date of the contract for persons to be insured who are already in the Contractor's service. +- Directly after the date of their admission to the Contractor's Department for persons hired after the effective date of the contract. The Contractor's Human Resources Department must be in close collaboration with BICOR LIFE AND CAPITALIZATION. A prorated premium is payable immediately to any person who becomes a Member during the period of coverage. +- Thus, each insured will have a health insurance card that he will present to health care providers and they will verify from his fingerprints his identity and coverage limit via the application of ACTIVA SANTE. This will also allow the insured to see in real time where he is with his limit of coverage."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("In order to provide better support, each member of the contract must complete a declaration form within one month of receiving the form."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + // $pdf->Ln(5); + $pdf->AddPage(); + + $pdf->Cell(0,$ht,convertirc("Article 3: DURATION OF THE FUTURE CONTRACT"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("The contract will be signed for a period of ".$entetecp['dureePeriodiciteEng']." from ".$entetecp['dateEffet']." to ".$entetecp['dateEcheance'].". +It will be tacitly renewable under the conditions set out in article 6 of these special conditions, unless terminated with one month’s notice before its expiry. +No obligation to renew the contract is incubent upon the parties. ACTIVA ASSURANCES CAMEROUN reserves the right to refuse or restrict the terms of coverage for all Members or any Member by granting the insured person a notice period of one month in accordance with the conditions set out in article 6 of these special conditions."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("Article 4 : BENEFITS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("4.1.A. ADVANTAGES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("The health insurance offers the payment of expenses for health care as a result of accident or maternity sickness. + +Thus, the following medical benefits are covered: +-outpatient, hospitalization, maternity, ophthalmology, dentistry and chronic diseases. + +-conditions of prematurity are covered + +-MRI and other special tests are all covered + +-Indirect payment: the beneficiary pays his contribution while obtaining the medical service and the provider requests refund or difference to ACTIVA ASSURANCES CAMEROUN (applicable for options with co-payment) + +- All medical treatments and medications prescribed by a qualified and registered doctor and which has been authorized by the Ministry of Health. Our medical plan provides access to specialties and generic drugs. +However, specialties must be prescribed by a medical specialist, except in case of emergency by prior authorization. + +-Coverage guarantees concern the insured staff, spouse and their dependent children up to age 21 and extended to 25 if the child is still a student upon presentation of a certificate of education and an extract from the birth certificate (or equivalent for adopted children). + +-Ambulance costs for emergency cases from one hospital to another and from an accident site to the hospital in the event of an accident on CAMEORUN territory. The ambulance service will apply to sick insured persons who are to be treated in a designated hospital, from an area where necessary equipment does not exist, but without exceeding Bif 500,000 during the entire coverage period (and within the annual limit of the hospitalized) + +-Treatments in all partner hospitals in East African countries. The insured will go to an appropriate institution according to the partnership of the insurer. He will have to notify the insurer at least 3 days before to allow him to notify the insured persons designated by the insured (only for those who have extraterritorial coverage). + +-Treatments in India if necessary, based on a medical report from a specialist doctor attestating tha the same services can not be offerered in East African countries with the prior approval of ACTIVA ASSURANCES CAMEROUN. + +-The extension in East African countries is covered within the limit of coverage for dependents of the insured. + +-The refund will be based on the most expensive rate depending on the category in which you are insured locally. + +-Accommodation of a parent for children under 12 years old in the hospital. This will only apply to coverage abroad + +-The single room is covered + +-Automatic addition of a newborn and/or spouse without additional premium except card fees + +-Automatic addition of a new member with a prorated premium + +-Automatic deletion for the agent leaving the group and refund of 75% of the unutilized premium calculated + +-pro rata, if no medical service has been paid for him and his dependents + +-The issue of health insurance cards within 7 days of notification and/or proof of payment. + +-Health insurance cards carry a telephone number which the patient can call if necessary. There will also be a designated claims manager specifically in charge of ".$entetecp['nomClient'].". + +-The list of all ACTIVA ASSURANCES CAMEROUN partners is attached to this technical offer + +-The refund will be based on the most expensive rate depending on the category in which you are insured locally. +For expenses paid to a provider who has no partnership with ACTIVA ASSURANCES CAMEROUN and which has not been terminated or suspended for fault or bad practice. + +-Maximum repayment period in case of direct payment where there is no partnership and after receipt of all required documents: 2 days + +-Joint management with the employer of cases of fraud + +-Funeral expenses in the event of the death on an insured member or his beneficiary are payable within 24 hours of receipt of the death notice to the employer or to the person he may designate. + +-The list of staff and reports of medical consumption will be provided monthly. + +-If the limit of the insured person is exceeded during the insurance period, ACTIVA ASSURANCES CAMEROUN may cover him without additional premium if the loss ratio of the ".$entetecp['nomClient']." Group is less than 60%."); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("4.1. B. REIMBURSEMENT OF CARE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("No medical act, device, operation or hospitalization is supported if it has not been ordered by a person holding a doctor’s degree, surgeon or dental surgeon. + +No act is taken in charge if it is not performed by a qualified person and in an establishment officially authorized by the Ministry of Health which, except in cases of major force, must be agreed by the insurer. + +The system of payment of benefits invoices is in principle the Third party paying by which the beneficiary of the insurance sickness only pays the agreed co-payment and the care provider is paid the balance of his bill by the insurer. + +The direct payment which consists in the fact that the insured person pays the entire bill for the medical services and is reimbursed by the insured is only used in exceptional circumstances. + +For this purpose, the service provider or the insured if applicable, must submit to the insurer the notes of fees or expenses and the orders paid, dated and mentioning the names and forenames of the insured concerned. The notes must indicate the nature and the date of the care given by distinguishing the cost of each of the acts performed. + +Prescriptions must clearly bear the name and surname of the insured and be accompanied by proof of payment of pharmaceutical products."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("4.1. C.EXTENT OF THE DISEASE GUARANTEE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("The coverage includes the insured person himself, his spouse and their legally dependent children under 21 or under 25 if they are still students. + +This coverage is also extended to staff who fall ill while on a work mission or on annual leave recognized by the contractor. + +In the latter case, the reimbursement will be made on the basis of the KIRA Hospital rate for members of the first category or the Reference Public Hospital for members of the other categories after deduction of the co-payment mentioned in the table of benefits and limits."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->AddPage(); + + // $pdf->Ln(2); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("4.1. D.BENEFITS AND GUARANTEED RATE"),0,1,'L',false); + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("Benefits and guaranteed rates are described, by category, in the tables below :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(100,$ht,convertirc("Type of provider"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Rate guarantee(%)"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Co-payment(%)"),1,1,'C',false); + + $categorie = ""; + + foreach ($tableaupretationcps as $tableaupretationcp) + { + if($categorie!=$tableaupretationcp['libelleCollege']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(180,$ht,convertirc($tableaupretationcp['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + } + $pdf->Cell(100,$ht,convertirc($tableaupretationcp['reseausoinEng']),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("100"-$tableaupretationcp['tm']),1,0,'C',false); + $pdf->Cell(40,$ht,$tableaupretationcp['tm'],1,1,'C',false); + + $categorie = $tableaupretationcp['libelleCollege']; + } + + $pdf->AddPage(); + // $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("LIMITS PER FAMILY OR PER MEMBER"),0,1,'L',false); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(2); + + $pdf->Cell(100,$ht,convertirc("Garantee"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Limit"),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc("Per Ben."),1,1,'C',false); + + $produit = ""; + + foreach ($garantiescollegecps as $garantiescollegecp) + { + if($produit!=$garantiescollegecp['libelleCollege']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(160,$ht,convertirc($garantiescollegecp['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + } + $pdf->Cell(100,$ht,convertirc($garantiescollegecp['garantieEng']),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($garantiescollegecp['plafond']),1,0,'C',false); + + $champApplication = ($garantiescollegecp['champApplication']=="1"); + + if($champApplication == TRUE) + $check = "4"; + else + $check = ""; + + $pdf->SetFont('ZapfDingbats','', 9); + $pdf->Cell(20, $ht, $check,1,1,'C',false); + $pdf->SetFont('Arial','', 9); + + $produit = $garantiescollegecp['libelleCollege']; + } + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("4.2. TERMINATION OF GUARANTEES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Collateral ceases collectively on the day of termination of the contract or on its due date and individually, on the day the insured person reaches the limit of coverage, leaves the contractor’s service, or dies. +In case of proven fraud, the insurer reserves the right to cancel the insured concerned. All the benefits offered to the insured person must be canceled from the date we became aware of the fraud. Premiums paid are not refundable and the member will no longer be eligible as an insured person for future periods."); + $pdf->MultiCell(0, $ht, $text); + + + // $pdf->AddPage(); + $pdf->Ln(10); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("4.3. SUSPENSION OF GUARANTEES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Collateral is suspended collectively if the premiums are not paid within THIRTY (30) days of the effective date of the policy and individually if the premiums are not paid immediately after the insured’s membership."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $text = convertirc("Guarantees will resume immediately upon payment of all outstanding premiums at the time of suspens."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 5 : CONTRIBUTIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("The guarantees defined above will be granted with :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Cell(50,$ht,convertirc("Insured type"),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc("Nb"),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("Basic premium"),1,0,'C',false); + // $pdf->Cell(30,$ht,convertirc("Net premium"),1,0,'C',false); + // $pdf->Cell(30,$ht,convertirc("Card"),1,0,'C',false); + // $pdf->Cell(30,$ht,convertirc("Premium Ttc"),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("Tot Premium"),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + + $produit = ""; + + foreach ($collegecp2s as $collegecp2) + { + if($produit!=$collegecp2['libelleCollege']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(170,$ht,convertirc($collegecp2['codeProduit']." : ".$collegecp2['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + } + + $pdf->Cell(50,$ht,convertirc(_('Adhérent')),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($collegecp2['nbAdherent']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeFamille']),1,0,'C',false); + // $pdf->Cell(30,$ht,format_N($collegecp2['primeHt']),1,0,'C',false); + // $pdf->Cell(30,$ht,format_N($collegecp2['fraisCarte']),1,0,'C',false); + // $pdf->Cell(30,$ht,format_N($collegecp2['primeTtcAdherent']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeTtcAdherent_total']),1,1,'C',false); + + $pdf->Cell(50,$ht,convertirc(_('Dépendant')),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($collegecp2['nbAyantdroit']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeBeneficiaire']),1,0,'C',false); + // $pdf->Cell(30,$ht,format_N($collegecp2['primeHtBeneficiaire']),1,0,'C',false); + // $pdf->Cell(30,$ht,format_N($collegecp2['fraisCarteBeneficiaire']),1,0,'C',false); + // $pdf->Cell(30,$ht,format_N($collegecp2['primeTtcBeneficiaire']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeTtcBeneficiaire_total']),1,1,'C',false); + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(50,$ht,convertirc("Total"),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($collegecp2['nbAssure']),1,0,'C',false); + // $pdf->Cell(120,$ht,convertirc(""),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc(""),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeTtcTotal']),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + } + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 6: RENEWAL AND PREMIUM ADJUSTEMENT CLAUSE"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("One month before the expiry, a provisional renewal rider will be sent to the insured for payment of a deposit on the renewal. +The premium defined above will be adjusted in accordance with the results of net premium claims (net of taxes and commissions of intermediaries) after the end of each financial year. +To associate the insured with changes in consumptions, quarterly usage report will be regularly transmitted. "); + $pdf->MultiCell(0, $ht, $text); + + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("Article 7: GENERAL EXCLUSIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("- Cosmetic treatment and cosmetic surgery +- Injuries due to participation in games and dangerous activities +- Injuries due to participation in strikes and riots +- Fertility treatment, namely treatment costs related to infertility and impotence +- Prophylactic treatment, dietary supplements +-Ischemic heart disease +- Intentional self-harm, suicide or the influence of alcohol or drugs +- Skin cancers, in situ cancers and melanomas in situ (except malignant melanomas) +- Air travel, unless the Member (having paid for the ticket) travels in an airplane designed to carry passengers +- Cost of hearing aids, unless resulting from an accident +- Nervous breakdown, psychoneurosis, unless it results from an accident"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 8: FINAL PROVISIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("When performing the acts, examinations or treatments of the insured, the health professional or the care establishment is the sole and sole responsible for complications, incidents or accidents that may occur in the practice of the medical art. +In no event shall the Insurer's liability be invoked for matters that are the responsibility of the health professional or the health care facility. +The contract will be established in two (2) copies and takes effect subject to the provisions of Article II of the PARTICULAR CONDITIONS, the ".$entetecp['dateEffet']); + $pdf->MultiCell(0, $ht, $text); + + // DEBUT TEXTE LIBRE + if ($entetecp['texteCp']>" ") + { + $pdf->AddPage(); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("ANNEXES TO THE PARTICULAR CONDITIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc($entetecp['texteCp']); + + $pdf->MultiCell(0, $ht, $text); + } + // FIN TEXTE LIBRE + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Done at ".$_SESSION['villeSociete']." ".$entetecp['dateJour']."."),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("FOR ACTIVA ASSURANCES CAMEROUN"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("FOR INSURED"),0,1,'R',false); + + $pdf->Ln(20); + + $pdf->Cell(0,$ht,convertirc("UNDERWRITTER"),0,1,'L',false); + + $pdf->Ln(20); + + $pdf->Cell(0,$ht,convertirc("EXECUTIVE MANAGEMENT"),0,1,'L',false); + + $fichier="Temp/TMP_pc_cat5"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Cpstandard.php b/Societes/ric/Tarifs/Controleur/Cpstandard.php new file mode 100755 index 00000000..e0d8a4f1 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Cpstandard.php @@ -0,0 +1,1498 @@ +police_societe = new Police_sodciete(); + + $entetecp = $this->police->getEnteteCP($idPolice); + $quittances = $this->police_societe->getQuittanceplus($idPolice); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=6; + + //var_dump($entetecp['typeGarant']); + // Logo + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + + $pdf->Ln(15); + + // Décalage à droite + $pdf->Cell(60); + $pdf->SetFillColor(217,237,247); // bleu + // Titre + $pdf->Cell(90,$ht,convertirc("CONDITIONS PARTICULIERES"),1,0,'C',true); + + // Saut de ligne + $pdf->Ln(20); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $garant = $entetecp['garant']; + + + if(strlen($garant) > "24"){ + $garant = $entetecp['codeGcassureur']; + } + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$garant),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $dureeOld = dateDifferenceMois($entetecp['dateEffet'],$entetecp['dateEcheance'])+1; + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dureeOld." mois"),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $echeanceanTimeStamp = strtotime($entetecp['echeancean']); + + $dateecheancean = date('d/m/Y', strtotime('+1 day', $echeanceanTimeStamp)); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dateecheancean),0,0,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".substr($entetecp['nomClient'], 0, 24)),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $accessoire = $entetecp['accessoire']+$entetecp['accessoireGarant']+$entetecp['assesoireApporteur']; + + $pdf->SetFont('Arial','B', 9); + + $primeNetteProrata = ($dureeOld*$entetecp['primeNette'])/12; + $primeTtcProrata = $primeNetteProrata + $accessoire+$entetecp['taxe']; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeNetteProrata),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeTtcProrata),1,1,'C',false); + + $pdf->Ln(5); + + if ($entetecp['nbEcheance'] > "1"){ + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME QUITTANCE (prochaines écheances)"),0,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Quittance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + foreach($quittances as $quittance) + { + $pdf->SetFont('Arial','', 9); + $pdf->Cell(50,$ht,convertirc(dateLang($quittance['datePaiement'],$_SESSION['lang'])." - No : ".$quittance['numeroQuittance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($quittance['primeplus']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['accessoire']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeTtc']),1,1,'C',false); + } + + $pdf->Ln(5); + } + + $dateEffetTimeStamp = strtotime($entetecp['dateEcheancePolice']); + $dateEcheanceTimeStamp = strtotime($entetecp['dateEcheancePolice']); + + $dateEffet = date('d/m/Y', strtotime('+1 day', $dateEffetTimeStamp)); + $dateEcheance = date('d/m/Y', strtotime('+1 year', $dateEcheanceTimeStamp)); + + $dureeNew = dateDifferenceMois($dateEffet,$dateEcheance)+1; + + $primeNetteEmission = ($entetecp['primeNetteEmission']*$dureeNew)/$dureeOld; + + + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+$ht,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+$ht,convertirc("Du ".$dateEffet." au ".$dateEcheance),1,0,'C',false); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+$ht,convertirc("PRIME ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(40,$ht,convertirc("OBJET:"),0,0,'R',false); + $pdf->SetFont('Arial','',10); + $pdf->Cell(8); + $pdf->Cell(40,$ht,convertirc($entetecp['typeavenant']),0,0,'C',false); + + $pdf->Ln(25); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Etabli à ".$_SESSION['villeSociete']." en 2 exemplaires, le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'C',false); + + $pdf->Ln(35); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(40,$ht,convertirc("AU SOUSCRIPTEUR"),0,0,'L',false); + + $pdf->Cell(105); + $pdf->Cell(40,$ht,convertirc("A LA COMPAGNIE"),0,1,'L',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','', 8); + $pdf->Cell(0,$ht,convertirc("(Exemplaire à conserver par le souscripteur)"),0,0,'C',false); + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png',10,265,190); + } + + } + + $pdf->AddPage(); + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + + + + $pdf->Ln(15); + + // Décalage à droite + $pdf->Cell(60); + $pdf->SetFillColor(217,237,247); // bleu + + // Titre + $pdf->Cell(90,$ht,convertirc("CONDITIONS PARTICULIERES"),1,0,'C',true); + + // Saut de ligne + $pdf->Ln(20); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $garant = $entetecp['garant']; + + if(strlen($garant) > "24"){ + $garant = $entetecp['codeGcassureur']; + } + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$garant),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $dureeOld = dateDifferenceMois($entetecp['dateEffet'],$entetecp['dateEcheance'])+1; + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dureeOld." mois"),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $echeanceanTimeStamp = strtotime($entetecp['echeancean']); + + $dateecheancean = date('d/m/Y', strtotime('+1 day', $echeanceanTimeStamp)); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dateecheancean),0,0,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".substr($entetecp['nomClient'], 0, 24)),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $primeNetteProrata = ($dureeOld*$entetecp['primeNette'])/12; + $primeTtcProrata = $primeNetteProrata + $accessoire+$entetecp['taxe']; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeNetteProrata),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeTtcProrata),1,1,'C',false); + + $pdf->Ln(5); + + if ($entetecp['nbEcheance'] > "1"){ + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME QUITTANCE (prochaines écheances)"),0,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Quittance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + foreach($quittances as $quittance) + { + $pdf->SetFont('Arial','', 9); + $pdf->Cell(50,$ht,convertirc(dateLang($quittance['datePaiement'],$_SESSION['lang'])." - No : ".$quittance['numeroQuittance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($quittance['primeplus']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['accessoire']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeTtc']),1,1,'C',false); + } + + $pdf->Ln(5); + } + + $dateEffetTimeStamp = strtotime($entetecp['dateEcheancePolice']); + $dateEcheanceTimeStamp = strtotime($entetecp['dateEcheancePolice']); + + $dateEffet = date('d/m/Y', strtotime('+1 day', $dateEffetTimeStamp)); + $dateEcheance = date('d/m/Y', strtotime('+1 year', $dateEcheanceTimeStamp)); + + + $dureeNew = dateDifferenceMois($dateEffet,$dateEcheance)+1; + + $primeNetteEmission = ($entetecp['primeNetteEmission']*$dureeNew)/$dureeOld; + + + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+$ht,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+$ht,convertirc("Du ".$dateEffet." au ".$dateEcheance),1,0,'C',false); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+$ht,convertirc("PRIME ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(40,$ht,convertirc("OBJET:"),0,0,'R',false); + $pdf->SetFont('Arial','',10); + $pdf->Cell(8); + $pdf->Cell(40,$ht,convertirc($entetecp['typeavenant']),0,0,'C',false); + + $pdf->Ln(25); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Etabli à ".$_SESSION['villeSociete']." en 2 exemplaires, le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'C',false); + + $pdf->Ln(35); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(40,$ht,convertirc("AU SOUSCRIPTEUR"),0,0,'L',false); + + $pdf->Cell(105); + $pdf->Cell(40,$ht,convertirc("A LA COMPAGNIE"),0,1,'L',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','', 8); + $pdf->Cell(0,$ht,convertirc("(Exemplaire à retourner signé par le souscripteur)"),0,0,'C',false); + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png',10,265,190); + } + + } + + + $pdf->AddPage(); + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + + $pdf->Ln(15); + + // Décalage à droite + $pdf->Cell(60); + $pdf->SetFillColor(217,237,247); // bleu + // Titre + $pdf->Cell(90,$ht,convertirc("CONDITIONS PARTICULIERES"),1,0,'C',true); + + // Saut de ligne + $pdf->Ln(20); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $garant = $entetecp['garant']; + + if(strlen($garant) > "24"){ + $garant = $entetecp['codeGcassureur']; + } + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$garant),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $dureeOld = dateDifferenceMois($entetecp['dateEffet'],$entetecp['dateEcheance'])+1; + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dureeOld." mois"),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $echeanceanTimeStamp = strtotime($entetecp['echeancean']); + + $dateecheancean = date('d/m/Y', strtotime('+1 day', $echeanceanTimeStamp)); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dateecheancean),0,0,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".substr($entetecp['nomClient'], 0, 24)),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $primeNetteProrata = ($dureeOld*$entetecp['primeNette'])/12; + $primeTtcProrata = $primeNetteProrata + $accessoire+$entetecp['taxe']; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeNetteProrata),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeTtcProrata),1,1,'C',false); + + $pdf->Ln(5); + + if ($entetecp['nbEcheance'] > "1"){ + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME QUITTANCE (prochaines écheances)"),0,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Quittance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + foreach($quittances as $quittance) + { + $pdf->SetFont('Arial','', 9); + $pdf->Cell(50,$ht,convertirc(dateLang($quittance['datePaiement'],$_SESSION['lang'])." - No : ".$quittance['numeroQuittance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($quittance['primeplus']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['accessoire']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeTtc']),1,1,'C',false); + } + + $pdf->Ln(5); + } + + $dateEffetTimeStamp = strtotime($entetecp['dateEcheancePolice']); + $dateEcheanceTimeStamp = strtotime($entetecp['dateEcheancePolice']); + + $dateEffet = date('d/m/Y', strtotime('+1 day', $dateEffetTimeStamp)); + $dateEcheance = date('d/m/Y', strtotime('+1 year', $dateEcheanceTimeStamp)); + + + $dureeNew = dateDifferenceMois($dateEffet,$dateEcheance)+1; + + $primeNetteEmission = ($entetecp['primeNetteEmission']*$dureeNew)/$dureeOld; + + + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+$ht,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+$ht,convertirc("Du ".$dateEffet." au ".$dateEcheance),1,0,'C',false); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+$ht,convertirc("PRIME ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(40,$ht,convertirc("OBJET:"),0,0,'R',false); + $pdf->SetFont('Arial','',10); + $pdf->Cell(8); + $pdf->Cell(40,$ht,convertirc($entetecp['typeavenant']),0,0,'C',false); + + $pdf->Ln(25); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Etabli à ".$_SESSION['villeSociete']." en 2 exemplaires, le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'C',false); + + $pdf->Ln(35); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(40,$ht,convertirc("AU SOUSCRIPTEUR"),0,0,'L',false); + + $pdf->Cell(105); + $pdf->Cell(40,$ht,convertirc("A LA COMPAGNIE"),0,1,'L',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','', 8); + $pdf->Cell(0,$ht,convertirc("(Copie Intermédiaire)"),0,0,'C',false); + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png',10,265,190); + } + + } + + + $pdf->AddPage(); + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + + + + $pdf->Ln(15); + + // Décalage à droite + $pdf->Cell(60); + $pdf->SetFillColor(217,237,247); // bleu + // Titre + $pdf->Cell(90,$ht,convertirc("CONDITIONS PARTICULIERES"),1,0,'C',true); + + // Saut de ligne + $pdf->Ln(20); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $garant = $entetecp['garant']; + + if(strlen($garant) > "24"){ + $garant = $entetecp['codeGcassureur']; + } + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$garant),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $dureeOld = dateDifferenceMois($entetecp['dateEffet'],$entetecp['dateEcheance'])+1; + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dureeOld." mois"),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $echeanceanTimeStamp = strtotime($entetecp['echeancean']); + + $dateecheancean = date('d/m/Y', strtotime('+1 day', $echeanceanTimeStamp)); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dateecheancean),0,0,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".substr($entetecp['nomClient'], 0, 24)),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $primeNetteProrata = ($dureeOld*$entetecp['primeNette'])/12; + $primeTtcProrata = $primeNetteProrata + $accessoire+$entetecp['taxe']; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeNetteProrata),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeTtcProrata),1,1,'C',false); + + $pdf->Ln(5); + +if ($entetecp['nbEcheance'] > "1"){ + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME QUITTANCE (prochaines écheances)"),0,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Quittance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + foreach($quittances as $quittance) + { + $pdf->SetFont('Arial','', 9); + $pdf->Cell(50,$ht,convertirc(dateLang($quittance['datePaiement'],$_SESSION['lang'])." - No : ".$quittance['numeroQuittance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($quittance['primeplus']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['accessoire']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeTtc']),1,1,'C',false); + } + + $pdf->Ln(5); + } + + $dateEffetTimeStamp = strtotime($entetecp['dateEcheancePolice']); + $dateEcheanceTimeStamp = strtotime($entetecp['dateEcheancePolice']); + + $dateEffet = date('d/m/Y', strtotime('+1 day', $dateEffetTimeStamp)); + $dateEcheance = date('d/m/Y', strtotime('+1 year', $dateEcheanceTimeStamp)); + + + $dureeNew = dateDifferenceMois($dateEffet,$dateEcheance)+1; + + $primeNetteEmission = ($entetecp['primeNetteEmission']*$dureeNew)/$dureeOld; + + + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+$ht,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+$ht,convertirc("Du ".$dateEffet." au ".$dateEcheance),1,0,'C',false); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+$ht,convertirc("PRIME ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(40,$ht,convertirc("OBJET:"),0,0,'R',false); + $pdf->SetFont('Arial','',10); + $pdf->Cell(8); + $pdf->Cell(40,$ht,convertirc($entetecp['typeavenant']),0,0,'C',false); + + $pdf->Ln(25); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Etabli à ".$_SESSION['villeSociete']." en 2 exemplaires, le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'C',false); + + $pdf->Ln(35); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(40,$ht,convertirc("AU SOUSCRIPTEUR"),0,0,'L',false); + + $pdf->Cell(105); + $pdf->Cell(40,$ht,convertirc("A LA COMPAGNIE"),0,1,'L',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','', 8); + $pdf->Cell(0,$ht,convertirc("(Copie Compagnie)"),0,0,'C',false); + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png',10,265,190); + } + + } + + $pdf->AddPage(); + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + + + + $pdf->Ln(15); + + // Décalage à droite + $pdf->Cell(60); + $pdf->SetFillColor(217,237,247); // bleu + // Titre + $pdf->Cell(90,$ht,convertirc("CONDITIONS PARTICULIERES"),1,0,'C',true); + + // Saut de ligne + $pdf->Ln(20); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $garant = $entetecp['garant']; + + if(strlen($garant) > "24"){ + $garant = $entetecp['codeGcassureur']; + } + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$garant),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $dureeOld = dateDifferenceMois($entetecp['dateEffet'],$entetecp['dateEcheance'])+1; + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dureeOld." mois"),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $echeanceanTimeStamp = strtotime($entetecp['echeancean']); + + $dateecheancean = date('d/m/Y', strtotime('+1 day', $echeanceanTimeStamp)); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dateecheancean),0,0,'L',false); + $pdf->Ln(); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".substr($entetecp['nomClient'], 0, 24)),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $primeNetteProrata = ($dureeOld*$entetecp['primeNette'])/12; + $primeTtcProrata = $primeNetteProrata + $accessoire+$entetecp['taxe']; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeNetteProrata),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($primeTtcProrata),1,1,'C',false); + + $pdf->Ln(5); + + if ($entetecp['nbEcheance'] > "1"){ + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME QUITTANCE (prochaines écheances)"),0,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(50,$ht,convertirc("Quittance"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + foreach($quittances as $quittance) + { + $pdf->SetFont('Arial','', 9); + $pdf->Cell(50,$ht,convertirc(dateLang($quittance['datePaiement'],$_SESSION['lang'])." - No : ".$quittance['numeroQuittance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($quittance['primeplus']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['accessoire']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($quittance['primeTtc']),1,1,'C',false); + } + + $pdf->Ln(5); + } + + $dateEffetTimeStamp = strtotime($entetecp['dateEcheancePolice']); + $dateEcheanceTimeStamp = strtotime($entetecp['dateEcheancePolice']); + + $dateEffet = date('d/m/Y', strtotime('+1 day', $dateEffetTimeStamp)); + $dateEcheance = date('d/m/Y', strtotime('+1 year', $dateEcheanceTimeStamp)); + + + $dureeNew = dateDifferenceMois($dateEffet,$dateEcheance)+1; + + $primeNetteEmission = ($entetecp['primeNetteEmission']*$dureeNew)/$dureeOld; + + + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+$ht,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+$ht,convertirc("Du ".$dateEffet." au ".$dateEcheance),1,0,'C',false); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+$ht,convertirc("PRIME ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+$ht,format_N($primeNetteEmission),1,0,'C',false); + $pdf->Cell(36,$ht+$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de l'effectif "); + $text .= convertirc("réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(40,$ht,convertirc("OBJET:"),0,0,'R',false); + $pdf->SetFont('Arial','',10); + $pdf->Cell(8); + $pdf->Cell(40,$ht,convertirc($entetecp['typeavenant']),0,0,'C',false); + + $pdf->Ln(25); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Etabli à ".$_SESSION['villeSociete']." en 2 exemplaires, le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'C',false); + + $pdf->Ln(35); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(40,$ht,convertirc("AU SOUSCRIPTEUR"),0,0,'L',false); + + $pdf->Cell(105); + $pdf->Cell(40,$ht,convertirc("A LA COMPAGNIE"),0,1,'L',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','', 8); + $pdf->Cell(0,$ht,convertirc("(Copie Gestionnaire)"),0,0,'C',false); + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png',10,265,190); + } + + } + + + + $fichier="Temp/TMP_conditions_particulieres"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Cpstandardeng.php b/Societes/ric/Tarifs/Controleur/Cpstandardeng.php new file mode 100755 index 00000000..b1148db3 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Cpstandardeng.php @@ -0,0 +1,1343 @@ +police_societe = new Police_sodciete(); + + $idAvenant = $this->requete->getParametreFormulaire("idAvenant"); + $numeroAvenant_cp=0; + $numeroAvenant = $_SESSION['numeroAvenant_cp'] ; + $p_emission = $numeroAvenant['numeroAvenant']; + + + $entetecp = $this->police_societe->getEnteteCP($idPolice,$p_emission); + $collegecps = $this->police_societe->getCollegesCpLienParente($idPolice); + //$collegecp2s = $this->police_societe->getCollegesCpLienParente($idPolice); + $garantiescollegecps = $this->police_societe->getGarantiesCollegesCpLienParente($idPolice); + $tableaupretationcps = $this->police_societe->gettableauPrestationsCpLienParente($idPolice); + + $codeGarant = $this->police_societe->getcodeGarant($idPolice); + $codeGcAssureur = $codeGarant['codeGcAssureur']; + $infosDuGarant = $this->police_societe->getInfosGarant($codeGcAssureur); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=9; + // Logo +// $pdf->Image($_SESSION['lienLogo'],10,6,30); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + $ht=9; + + + // Décalage à droite + $pdf->Cell(60); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(90,$ht,convertirc("CONDITIONS PARTICULIERES"),1,0,'C',true); + $pdf->Ln(20); + // Saut de ligne + + + //encadrer + $pdf->Rect(10,30,190,70); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + + $pdf->SetFont('Arial','',9); + + + if(strlen($entetecp['garant']) > "40"){ + + $pdf->Cell(17,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->Cell(85,$ht,convertirc(":".$entetecp['garant']),0,0,'L',false); + } + else{ + + + $pdf->Cell(30,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + + + + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['libellePolice']) > "30"){ + $pdf->Cell(22,$ht,convertirc("Police : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65, 4, $entetecp['libellePolice'],0); + }else{ + $pdf->Cell(32,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + } + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['nomClient'])> "30"){ + $pdf->Cell(22,$ht,convertirc("Souscripteur : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65,4,convertirc($entetecp['nomClient']),0); + } + else{ + + $pdf->Cell(32,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(77,$ht,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->Ln(); + } + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + + + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +/////////////////// + $pdf->Ln(10); + + $pdf->SetFont('Arial','B',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $accessoire = $entetecp['accessoire']; + $ht = 10; + + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeTtc']),1,1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+2,convertirc("Du ".dateLang($entetecp['dateEffetprochain'], $_SESSION['lang'])." au ".dateLang($entetecp['dateFinprochain'])),1,0,'C',false); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); +$text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+2,convertirc("PRIME PREVISIONNELLE ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); +$text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(40,$ht,convertirc("OBJET : "),0,0,'C',false); + $pdf->SetFont('Arial','',10); + if ($entetecp['numeroAvenant']=='1'|| $entetecp['numeroAvenant']=='2'){ + $pdf->Cell(40,$ht,convertirc('AVENANT AFFAIRE NOUVELLE'),0,0,'C',false); + }else{ + $pdf->Cell(40,$ht,convertirc('INCORPORATION'),0,0,'C',false); + } + + $pdf->Ln(25); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Etabli à ".$_SESSION['villeSociete'].", le ".dateToFrench("now" ,'l j F Y')." à ".$entetecp['HeureJour']),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("AU SOUSCRIPTEUR"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("A LA COMPAGNIE"),0,1,'R',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', 8); + $pdf->Cell(0,$ht,convertirc("(Exemplaire à conserver par le souscripteur)"),0,0,'C',false); + + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,270,190); + } + } + $pdf->AddPage(); + + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + //$pdf->Image($_SESSION['lienLogo'],10,6,30); + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + + $ht=9; + + // Décalage à droite + $pdf->Cell(60); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(90,$ht,convertirc("CONDITIONS PARTICULIERES"),1,0,'C',true); + $pdf->Ln(20); + // Saut de ligne + + + //encadrer + $pdf->Rect(10,30,190,70); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Compagnie"),0,0,'L',false); + + + if(strlen($entetecp['garant']) > "40"){ + $pdf->SetFont('Arial','B',8); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + else{ + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + + + + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['libellePolice']) > "30"){ + $pdf->Cell(22,$ht,convertirc("Police : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65, 4, $entetecp['libellePolice'],0); + }else{ + $pdf->Cell(32,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + } + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['nomClient'])> "30"){ + $pdf->Cell(22,$ht,convertirc("Souscripteur : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65,4,convertirc($entetecp['nomClient']),0); + } + else{ + + $pdf->Cell(32,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(77,$ht,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->Ln(); + } + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + + + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +/////////////////// + $pdf->Ln(10); + + $pdf->SetFont('Arial','B',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $accessoire = $entetecp['accessoire']; + $ht = 10; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeTtc']),1,1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+2,convertirc("Du ".dateLang($entetecp['dateEffetprochain'], $_SESSION['lang'])." au ".dateLang($entetecp['dateFinprochain'])),1,0,'C',false); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); +$text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+2,convertirc("PRIME PREVISIONNELLE ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); +$text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(40,$ht,convertirc("OBJET : "),0,0,'C',false); + $pdf->SetFont('Arial','',10); + if ($entetecp['numeroAvenant']=='1'|| $entetecp['numeroAvenant']=='2'){ + $pdf->Cell(40,$ht,convertirc('AVENANT AFFAIRE NOUVELLE'),0,0,'C',false); + }else{ + $pdf->Cell(40,$ht,convertirc('INCORPORATION'),0,0,'C',false); + } + + $pdf->Ln(25); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Etabli à ".$_SESSION['villeSociete'].", le ".dateToFrench("now" ,'l j F Y')." à ".$entetecp['HeureJour']),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("AU SOUSCRIPTEUR"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("A LA COMPAGNIE"),0,1,'R',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', 8); + $pdf->Cell(0,$ht,convertirc("(Exemplaire à retourner signé par le souscripteur)"),0,0,'C',false); + //$pdf->Ln(20); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,270,190); + } + } + + $pdf->AddPage(); + + //$pdf->Image($_SESSION['lienLogo'],10,6,30); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + $ht=9; + + + // Décalage à droite + $pdf->Cell(60); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(90,$ht,convertirc("CONDITIONS PARTICULIERES"),1,0,'C',true); + $pdf->Ln(20); + // Saut de ligne + + + //encadrer + $pdf->Rect(10,30,190,70); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Compagnie"),0,0,'L',false); + + + if(strlen($entetecp['garant']) > "40"){ + $pdf->SetFont('Arial','B',8); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + else{ + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + + + + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['libellePolice']) > "30"){ + $pdf->Cell(22,$ht,convertirc("Police : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65, 4, $entetecp['libellePolice'],0); + }else{ + $pdf->Cell(32,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + } + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['nomClient'])> "30"){ + $pdf->Cell(22,$ht,convertirc("Souscripteur : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65,4,convertirc($entetecp['nomClient']),0); + } + else{ + + $pdf->Cell(32,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(77,$ht,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->Ln(); + } + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + + + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +/////////////////// + $pdf->Ln(10); + + $pdf->SetFont('Arial','B',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $accessoire = $entetecp['accessoire']; + $ht = 10; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeTtc']),1,1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+2,convertirc("Du ".dateLang($entetecp['dateEffetprochain'], $_SESSION['lang'])." au ".dateLang($entetecp['dateFinprochain'])),1,0,'C',false); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); +$text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+2,convertirc("PRIME PREVISIONNELLE ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); +$text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(40,$ht,convertirc("OBJET : "),0,0,'C',false); + $pdf->SetFont('Arial','',10); + if ($entetecp['numeroAvenant']=='1'|| $entetecp['numeroAvenant']=='2'){ + $pdf->Cell(40,$ht,convertirc('AVENANT AFFAIRE NOUVELLE'),0,0,'C',false); + }else{ + $pdf->Cell(40,$ht,convertirc('INCORPORATION'),0,0,'C',false); + } + + $pdf->Ln(25); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Etabli à ".$_SESSION['villeSociete'].", le ".dateToFrench("now" ,'l j F Y')." à ".$entetecp['HeureJour']),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("AU SOUSCRIPTEUR"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("A LA COMPAGNIE"),0,1,'R',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', 8); + $pdf->Cell(0,$ht,convertirc("(Copie Intermédiaire)"),0,0,'C',false); + + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,270,190); + } + } + + $pdf->AddPage(); + + //$pdf->Image($_SESSION['lienLogo'],10,6,30); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + $ht=9; + + + // Décalage à droite + $pdf->Cell(60); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(90,$ht,convertirc("CONDITIONS PARTICULIERES"),1,0,'C',true); + $pdf->Ln(20); + // Saut de ligne + + + //encadrer + $pdf->Rect(10,30,190,70); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Compagnie"),0,0,'L',false); + + + if(strlen($entetecp['garant']) > "40"){ + $pdf->SetFont('Arial','B',8); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + else{ + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + + + + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['libellePolice']) > "30"){ + $pdf->Cell(22,$ht,convertirc("Police : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65, 4, $entetecp['libellePolice'],0); + }else{ + $pdf->Cell(32,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + } + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['nomClient'])> "30"){ + $pdf->Cell(22,$ht,convertirc("Souscripteur : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65,4,convertirc($entetecp['nomClient']),0); + } + else{ + + $pdf->Cell(32,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(77,$ht,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->Ln(); + } + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + + + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +/////////////////// + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $accessoire = $entetecp['accessoire']; + $ht = 10; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeTtc']),1,1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+2,convertirc("Du ".dateLang($entetecp['dateEffetprochain'], $_SESSION['lang'])." au ".dateLang($entetecp['dateFinprochain'])),1,0,'C',false); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+2,convertirc("PRIME PREVISIONNELLE ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(40,$ht,convertirc("OBJET : "),0,0,'C',false); + $pdf->SetFont('Arial','',10); + if ($entetecp['numeroAvenant']=='1'|| $entetecp['numeroAvenant']=='2'){ + $pdf->Cell(40,$ht,convertirc('AVENANT AFFAIRE NOUVELLE'),0,0,'C',false); + }else{ + $pdf->Cell(40,$ht,convertirc('INCORPORATION'),0,0,'C',false); + } + + $pdf->Ln(25); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Etabli à ".$_SESSION['villeSociete'].", le ".dateToFrench("now" ,'l j F Y')." à ".$entetecp['HeureJour']),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("AU SOUSCRIPTEUR"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("A LA COMPAGNIE"),0,1,'R',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', 8); + $pdf->Cell(0,$ht,convertirc("(Copie Compagnie)"),0,0,'C',false); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,270,190); + } + } + + $pdf->AddPage(); + + //$pdf->Image($_SESSION['lienLogo'],10,6,30); + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + + $ht=9; + + // Décalage à droite + $pdf->Cell(60); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(90,$ht,convertirc("CONDITIONS PARTICULIERES"),1,0,'C',true); + $pdf->Ln(20); + // Saut de ligne + + + //encadrer + $pdf->Rect(10,30,190,70); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Compagnie"),0,0,'L',false); + + + if(strlen($entetecp['garant']) > "40"){ + $pdf->SetFont('Arial','B',8); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + else{ + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + + + + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['libellePolice']) > "30"){ + $pdf->Cell(22,$ht,convertirc("Police : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65, 4, $entetecp['libellePolice'],0); + }else{ + $pdf->Cell(32,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + } + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['nomClient'])> "30"){ + $pdf->Cell(22,$ht,convertirc("Souscripteur : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65,4,convertirc($entetecp['nomClient']),0); + } + else{ + + $pdf->Cell(32,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(77,$ht,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->Ln(); + } + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + + + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +/////////////////// + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B',10); + + $pdf->Cell(0,$ht,convertirc("PRIME AU COMPTANT (à regler à la signature des présentes)"),0,1,'C',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(50,$ht,convertirc("Période d'assurance"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime nette"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(36,$ht,convertirc("Prime additionnelle"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Accessoires"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Taxes"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(26,$ht,convertirc("Prime Totale"),1,1,'C',true); + + $pdf->SetFont('Arial','B', 9); + + $accessoire = $entetecp['accessoire']; + + $ht= 10; + + $pdf->Cell(50,$ht,convertirc("Du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeNette']),1,0,'C',false); + $pdf->Cell(36,$ht,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($accessoire),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['taxe']),1,0,'C',false); + $pdf->Cell(26,$ht,format_N($entetecp['primeTtc']),1,1,'C',false); + + $pdf->Ln(5); + $pdf->SetFont('Arial','', 9); + $pdf->Cell(0,$ht+2,convertirc("PRIME TERME (prochaine prime)"),1,1,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht+2,convertirc("Du ".dateLang($entetecp['dateEffetprochain'], $_SESSION['lang'])." au ".dateLang($entetecp['dateFinprochain'])),1,0,'C',false); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + // FIN TEXTE LIBRE + + $pdf->Ln(5); + + $pdf->Cell(50,$ht+2,convertirc("PRIME PREVISIONNELLE ANNUELLE"),0,0,'C',false); + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(26,$ht+2,format_N($entetecp['primeProchaine']),1,0,'C',false); + + $pdf->Cell(36,$ht+2,format_N($entetecp['primeadditionnelle']),1,0,'C',false); + //$pdf->Cell(78,$ht,,1,0,'C',false); + $pdf->SetFont('Arial','', 8); + $text = convertirc("(Prime de base susceptible d'être modifiée en fonction de "); + $text .= convertirc("l'effectif réellement assuré, l'application de la clause d'ajustement "); + $text .= convertirc("d'ajustement et du taux de taxe en vigueur)"); + $pdf->MultiCell(78, 4, $text,1); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(40,$ht,convertirc("OBJET : "),0,0,'C',false); + $pdf->SetFont('Arial','',10); + if ($entetecp['numeroAvenant']=='1'|| $entetecp['numeroAvenant']=='2'){ + $pdf->Cell(40,$ht,convertirc('AVENANT AFFAIRE NOUVELLE'),0,0,'C',false); + }else{ + $pdf->Cell(40,$ht,convertirc('INCORPORATION'),0,0,'C',false); + } + + $pdf->Ln(25); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Etabli à ".$_SESSION['villeSociete'].", le ".dateToFrench("now" ,'l j F Y')." à ".$entetecp['HeureJour']),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("AU SOUSCRIPTEUR"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("A LA COMPAGNIE"),0,1,'R',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','', 8); + $pdf->Cell(0,$ht,convertirc("(Copie Gestionnaire)"),0,0,'C',false); + + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,270,190); + } + } + + + $fichier="Temp/TMP_conditions_particulieres"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Creercollegedenregistrer.php b/Societes/ric/Tarifs/Controleur/Creercollegedenregistrer.php new file mode 100755 index 00000000..db26fde9 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Creercollegedenregistrer.php @@ -0,0 +1,60 @@ +requete->getParametre("codeProduit"); + $libelleCollege = $this->requete->getParametreFormulaire("libelleCollege"); + $nbAdherent = $this->requete->getParametreFormulaire("nbAdherent","numerique"); + $nbAyantdroit = $this->requete->getParametreFormulaire("nbAyantdroit","numerique"); + $primeFamille = $this->requete->getParametreFormulaire("primeFamille","numerique"); + $surprimeAnt = $this->requete->getParametreFormulaire("surprimeAnt","numerique"); + $rachatTm = $this->requete->getParametre("rachatTm"); + $tauxRachatTm = $this->requete->getParametreFormulaire("tauxRachatTm","numerique"); + $tauxRachatTm = $this->requete->getParametreFormulaire("tauxRachatTm","numerique"); + $tauxPrimeRachatTm = $this->requete->getParametreFormulaire("tauxPrimeRachatTm","numerique"); + $cplFuneraire = $this->requete->getParametreFormulaire("cplFuneraire","numerique"); + $fraisCarte = $this->requete->getParametreFormulaire("fraisCarte","numerique"); + $imposerPlafond = $this->requete->getParametreFormulaire("imposerPlafond"); + $numeroOptionTarif = $this->requete->getParametreFormulaire("numeroOptionTarif"); + + $tauxPrimeFraisFuneraire = $this->requete->getParametreFormulaire("tauxPrimeFraisFuneraire","numerique"); + $ageMoyen = $this->requete->getParametreFormulaire("ageMoyen","numerique"); + $delaiCarenceCollege = $this->requete->getParametreFormulaire("delaiCarenceCollege","numerique"); + + $plafondAdherent = $this->requete->getParametreFormulaire("plafondAdherent","numerique"); + $plafondBeneficiaire = $this->requete->getParametreFormulaire("plafondBeneficiaire","numerique"); + + $codeTrancheAge = $this->requete->getParametreFormulaire("codeTrancheAge"); + $codeCapital = $this->requete->getParametreFormulaire("codeCapital"); + + $accessoireManuel = $this->requete->getParametreFormulaire("accessoireManuel","numerique"); + + $codeCollegeType = $this->requete->getParametreFormulaire("codeCollegeType"); + + + $forfaitHonoraire = $this->requete->getParametreFormulaire("forfaitHonoraire"); + $forfaitAppelFond = $this->requete->getParametreFormulaire("forfaitAppelFond"); + $forfaitAppelCotisation = $this->requete->getParametreFormulaire("forfaitAppelCotisation"); + + + $this->college_temp->recapituler($idCollegeTemp, $codeProduit, $libelleCollege, $nbAdherent, $nbAyantdroit, + $primeFamille, $surprimeAnt, $rachatTm, $cplFuneraire, $tauxRachatTm, $tauxPrimeRachatTm, $fraisCarte, + $imposerPlafond, $numeroOptionTarif, $tauxPrimeFraisFuneraire, $ageMoyen, $delaiCarenceCollege, + $plafondAdherent, $plafondBeneficiaire, $codeTrancheAge, $codeCapital, $accessoireManuel, $codeCollegeType, $plafondAdherent, $forfaitHonoraire, $forfaitAppelFond); + + if($this->requete->existeParametre("btn_recap")) + { + $this->rediriger("Creercolleged"); + } + else + { + $this->college_temp->enregistrer($idCollegeTemp); + $this->rediriger("Fichedevis"); + } + */ + + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $this->college_temp->enregistrer($idCollegeTemp); + $this->rediriger("Fichedevis"); + +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Creercollegedindex.php b/Societes/ric/Tarifs/Controleur/Creercollegedindex.php new file mode 100755 index 00000000..f721927e --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Creercollegedindex.php @@ -0,0 +1,84 @@ +trancheage = (new Trancheage())->getListe(); + $this->capitalfraisfuneraire = (new Capitalfraisfuneraire())->getListe(); + $this->lienparente_societe = (new Lienparente_societe())->getListe(); + + $_SESSION['vueCollege'] = "Creercolleged"; + + $idPolice = $_SESSION['idPolice_d_C']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $budgetDefini = "0"; //$_SESSION['budgetDefini_C']; + $codeTypeGarant = $_SESSION['codeTypeGarant']; + + $codeProduit = $_SESSION['codeProduit']; + + $codeTypeTarifActe = "TCOL"; + + $codeGcAssureur = $_SESSION['codeGcAssureur_d']; + + $produit = $this->produit->getProduitGarant($codeGcAssureur); + + $collegetype = $this->produit->getListeCollegeType(); + + $etendueterritoire = $this->produit->getlisteTerritoire(); + $typeremboursement = $this->produit->getlisteTypeRemboursement(); + $tm = $this->produit->getTicketModerateurProduit($codeProduit, $codeGcAssureur); + + $ticketModerateurCollege = is_array($tm) ? $tm['ticketModerateur'] : "0"; + + $collegeTemp = $this->college_temp->getCollegeTemp($idCollegeTemp); + $baseTarif = $this->college_temp->getBaseTarifCollege(); + + $typeTarifActe = $this->college_temp->getTypeTarifActe(); + + + $tarifacte = $this->tarifacte->getTarifActeByType($codeTypeTarifActe); + + $reseausoins = $this->reseausoins->getReseauProduit($codeProduit); + + $garantiesbase = $this->college_temp->getGarBaseCollege($idCollegeTemp); + + $garoptionnelles = $this->college_temp->getGarOptCollege($idCollegeTemp); + $garoptacquises = $this->college_temp->getGarOptCollegeAcq($idCollegeTemp); + $tableau_prestations = $this->college_temp->getPrestation($idCollegeTemp); + + $_SESSION['nomGarant'] = $this->college_temp->getNomGarant($codeGcAssureur); + + + $codeLienParente = $_SESSION['codeLienParente_C']; + $garanties_lien_parente = $this->college_temp->getGarantieLienParente($idCollegeTemp, $codeLienParente); + + $prime_colleges = $this->college_temp->getPrimesCollege($idCollegeTemp); + + $forfaitTaux = $this->college_temp->getTauxForfait(); + $lienParente = $this->college_temp->getNomStatus($codeLienParente); + + $bareme = $this->college_temp->getBaremeProduit($codeProduit, $codeGcAssureur); + + $collegelienparenteTemp = $this->college_temp->getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente); + + $plafondFamille = $this->college_temp->getPlafondFamille($codeProduit,$codeGcAssureur); + $plafondIndividu = $this->college_temp->getPlafondIndividu($codeProduit,$codeGcAssureur); + + $codeModecalculPrime = $this->college_temp->getModecalculprimeCollegeTemp($idCollegeTemp); + + $optionstarif = $this->college_temp->getoptionstarif($idPolice); + + $this->genererVue(array('collegeTemp' => $collegeTemp, 'produit' => $produit, 'collegetype' => $collegetype, + 'garantiesbase' => $garantiesbase, 'garoptionnelles' => $garoptionnelles, 'etendueterritoire' => $etendueterritoire, + 'garoptacquises' => $garoptacquises, 'rachattm' => $this->rachattm, 'typeremboursement' => $typeremboursement, + 'tableau_prestations' => $tableau_prestations, 'ouinonimposerplafond' => $this->ouinonimposerplafond, + 'trancheage' => $this->trancheage, 'capitalfraisfuneraire' => $this->capitalfraisfuneraire,'typeTarifActe'=>$typeTarifActe, + 'prime_colleges' => $prime_colleges, 'lienparente_societe' => $this->lienparente_societe, 'ouinonbudget' => $this->ouinonbudget, + 'collegelienparenteTemp' => $collegelienparenteTemp, 'garanties_lien_parente' => $garanties_lien_parente, + 'reseausoins' => $reseausoins,'tarifacte' => $tarifacte,'forfaitTaux' => $forfaitTaux,'lienParente' => $lienParente, + 'bareme' => $bareme,'ticketModerateurCollege' => $ticketModerateurCollege, 'baseTarif' => $baseTarif,'plafondFamille'=>$plafondFamille, + 'plafondIndividu' => $plafondIndividu, 'codeModecalculPrime' => $codeModecalculPrime, 'optionstarif' => $optionstarif)); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Creercollegedinitcollege.php b/Societes/ric/Tarifs/Controleur/Creercollegedinitcollege.php new file mode 100755 index 00000000..799cab09 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Creercollegedinitcollege.php @@ -0,0 +1,31 @@ +requete->getSession()->getAttribut('login'); + + $idCollegeTemp = $this->college_temp->initCollege($idPolice, $user); + + $_SESSION['codeLienParente_C'] = "A";*/ + + $idPolice = $_SESSION['idPolice_d_C']; + + $garant = $this->college_temp->getGarantPolice($idPolice); + $typeGarant = $this->college_temp->getTypeGarantPolice($idPolice); + + + $_SESSION['codeGcAssureur_d'] = $garant['codeGcAssureur']; + $_SESSION['codeTypeGarant'] = $typeGarant['codeTypeGarant']; + + $user = $this->requete->getSession()->getAttribut('login'); + + $idCollegeTemp = $this->college_temp->initCollege($idPolice, $garant['codeGcAssureur'], $user); + + $budgetDefini = "0"; + + + $_SESSION['codeProduit'] = "C1"; + $_SESSION['codeTypeTarifActe'] = ""; + $_SESSION['codeLienParente_C'] = "A"; + + $this->rediriger("Creercolleged"); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Creercollegeenregistrer.php b/Societes/ric/Tarifs/Controleur/Creercollegeenregistrer.php new file mode 100755 index 00000000..b69a1730 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Creercollegeenregistrer.php @@ -0,0 +1,9 @@ +college_temp->enregistrer($idCollegeTemp); + + $this->rediriger("Collegepolice"); + +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Creercollegeindex.php b/Societes/ric/Tarifs/Controleur/Creercollegeindex.php new file mode 100755 index 00000000..b7a00b05 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Creercollegeindex.php @@ -0,0 +1,88 @@ +trancheage = (new Trancheage())->getListe(); + $this->capitalfraisfuneraire = (new Capitalfraisfuneraire())->getListe(); + $this->lienparente_societe = (new Lienparente_societe())->getListe(); + + $_SESSION['vueCollege'] = "Creercollege"; + + $idPolice = $_SESSION['idPolice_C']; + + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $budgetDefini = $_SESSION['budgetDefini_C']; + $codeTypeGarant = $_SESSION['codeTypeGarant']; + $codeProduit = $_SESSION['codeProduit']; + $codeTypeTarifActe = "TCOL"; + + + $_SESSION['nomFormulaire'] = "frmcreercollege"; + + $codeGcAssureur = $_SESSION['codeGcAssureur']; + + $produit = $this->produit->getProduitGarant($codeGcAssureur); + + + + $collegetype = $this->produit->getListeCollegeType(); + $etendueterritoire = $this->produit->getlisteTerritoire(); + $typeremboursement = $this->produit->getlisteTypeRemboursement(); + $tm = $this->produit->getTicketModerateurProduit($codeProduit, $codeGcAssureur); + + $ticketModerateurCollege = is_array($tm) ? $tm['ticketModerateur'] : "0"; + + $collegeTemp = $this->college_temp->getCollegeTemp($idCollegeTemp); + + + + $baseTarif = $this->college_temp->getBaseTarifCollege(); + + $typeTarifActe = $this->college_temp->getTypeTarifActe(); + + + $tarifacte = $this->tarifacte->getTarifActeByType($codeTypeTarifActe); + + $reseausoins = $this->reseausoins->getReseauProduit($codeProduit); + + $garantiesbase = $this->college_temp->getGarBaseCollege($idCollegeTemp); + $garoptionnelles = $this->college_temp->getGarOptCollege($idCollegeTemp); + $garoptacquises = $this->college_temp->getGarOptCollegeAcq($idCollegeTemp); + $tableau_prestations = $this->college_temp->getPrestation($idCollegeTemp); + + $_SESSION['nomGarant'] = $this->college_temp->getNomGarant($codeGcAssureur); + + + $codeLienParente = $_SESSION['codeLienParente_C']; + $garanties_lien_parente = $this->college_temp->getGarantieLienParente($idCollegeTemp, $codeLienParente); + + $prime_colleges = $this->college_temp->getPrimesCollege($idCollegeTemp); + + + $forfaitTaux = $this->college_temp->getTauxForfait(); + $lienParente = $this->college_temp->getNomStatus($codeLienParente); + + $bareme = $this->college_temp->getBaremeProduit($codeProduit, $codeGcAssureur); + + $collegelienparenteTemp = $this->college_temp->getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente); + + $plafondFamille = $this->college_temp->getPlafondFamille($codeProduit,$codeGcAssureur); + $plafondIndividu = $this->college_temp->getPlafondIndividu($codeProduit,$codeGcAssureur); + + $codeModecalculPrime = $this->college_temp->getModecalculprimeCollegeTemp($idCollegeTemp); + + + $this->genererVue(array('collegeTemp' => $collegeTemp, 'produit' => $produit, 'collegetype' => $collegetype, + 'garantiesbase' => $garantiesbase, 'garoptionnelles' => $garoptionnelles, 'etendueterritoire' => $etendueterritoire, + 'garoptacquises' => $garoptacquises, 'rachattm' => $this->rachattm, 'typeremboursement' => $typeremboursement, + 'tableau_prestations' => $tableau_prestations, 'ouinonimposerplafond' => $this->ouinonimposerplafond, + 'trancheage' => $this->trancheage, 'capitalfraisfuneraire' => $this->capitalfraisfuneraire,'typeTarifActe'=>$typeTarifActe, + 'prime_colleges' => $prime_colleges, 'lienparente_societe' => $this->lienparente_societe, 'ouinonbudget' => $this->ouinonbudget, + 'collegelienparenteTemp' => $collegelienparenteTemp, 'garanties_lien_parente' => $garanties_lien_parente, + 'reseausoins' => $reseausoins,'tarifacte' => $tarifacte,'forfaitTaux' => $forfaitTaux,'lienParente' => $lienParente, + 'bareme' => $bareme,'ticketModerateurCollege' => $ticketModerateurCollege, 'baseTarif' => $baseTarif,'plafondFamille'=>$plafondFamille, + 'plafondIndividu' => $plafondIndividu, 'codeModecalculPrime' => $codeModecalculPrime)); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Creercollegeinitcollege.php b/Societes/ric/Tarifs/Controleur/Creercollegeinitcollege.php new file mode 100755 index 00000000..13958366 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Creercollegeinitcollege.php @@ -0,0 +1,23 @@ +college_temp->getGarantPolice($idPolice); + $typeGarant = $this->college_temp->getTypeGarantPolice($idPolice); + + + $_SESSION['codeGcAssureur'] = $garant['codeGcAssureur']; + $_SESSION['codeTypeGarant'] = $typeGarant['codeTypeGarant']; + + $user = $this->requete->getSession()->getAttribut('login'); + + $idCollegeTemp = $this->college_temp->initCollege($idPolice, $garant['codeGcAssureur'], $user); + + $budgetDefini = "0"; + + + $_SESSION['codeProduit'] = "C1"; + $_SESSION['codeTypeTarifActe'] = ""; + $_SESSION['codeLienParente_C'] = "A"; + + $this->rediriger("Creercollege"); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Deviscat5.php b/Societes/ric/Tarifs/Controleur/Deviscat5.php new file mode 100755 index 00000000..52d7ddd5 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Deviscat5.php @@ -0,0 +1,617 @@ +police->getEnteteCP($idPolice); + $collegecps = $this->police->getCollegesCP($idPolice); + $collegecp2s = $this->police->getCollegesCP($idPolice); + $garantiescollegecps = $this->police->getGarantiesCollegesCP($idPolice); + $tableaupretationcps = $this->police->gettableauPrestationsCP($idPolice); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=10; + + $pdf->SetMargins(10, 10, 10) ; + + $pdf->SetFont('Arial','B', 15); + + $pdf->SetY(40); + + $pdf->SetFillColor(135,206,250); // bleu + + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(0,$ht,convertirc("PROPOSITION DE CONTRAT - D'ASSURANCE SANTE"),1,1,'C',true); + } + else + { + $pdf->Cell(0,$ht,convertirc("PROPOSITION DE CONTRAT - D'ASSURANCE SANTE INDIVIDUEL"),1,1,'C',true); + } + + $pdf->SetFont(''); + + $pdf->Ln(15); + + $pdf->Cell(45,$ht,convertirc("No DEVIS"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['numeroPolice']),0,1,'L',false); + + $pdf->Cell(45,$ht,convertirc("CLIENT"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['nomClient']),0,1,'L',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Cell(45,$ht,convertirc("Dont le Siège Social est"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['adresseGeo']),0,1,'L',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("En qualité d'Assuré "),0,0,'C',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("Auprès de "),0,1,'C',false); + + $pdf->SetFont('Arial','B', 15); + $pdf->Cell(0,$ht,convertirc($entetecp['nomSociete']),0,1,'C',false); + + + $pdf->SetFont('Arial','', 10); + + $pdf->Cell(0,$ht,convertirc("En qualité d'ASSUREUR "),0,1,'C',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("Le futur contrat aura pour objet la garantie suivante :"),0,1,'C',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','B', 13); + $pdf->Cell(0,$ht,convertirc("MALADIE - HOSPITALISATION – MATERNITE"),0,1,'C',false); + + + $pdf->AddPage(); + $ht=6; + + $pdf->SetFont('Arial','B', 15); + $pdf->Cell(0,$ht,convertirc("DISPOSITIONS PARTICULIERES"),0,1,'C',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc($entetecp['nomClient']),0,1,'L',false); + + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Déclare souscrire aux conditions générales et dispositions spéciales du Contrat "); + $text .= convertirc("d'Assurance Maladie Groupe et celles particulières qui suivent, auprès de ".$_SESSION['nomSociete']); + $text .= convertirc(" en faveur des personnes à assurer, pour les Garanties et moyennant les Cotisations ci-après :"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 1 : PERSONNES A ASSURER"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Les membres du Personnel de l'assuré âgés de plus de 18 ans et de moins de 70 ans à "); + $text .= convertirc("l'entrée dans l'assurance selon la répartition suivante :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(30,$ht,convertirc("Catégorie"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Nb Adh"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Nb Dép"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Prime Adh"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Prime Dép"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Prime Tot"),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + + $oldnumeroOptionTarif = "0"; + + $nbAdherent = "0"; + $nbAyantdroit = "0"; + $primeTtcAdherent = "0"; + $primeTtcBeneficiaire = "0"; + $primeTtcTotal = "0"; + + $opt = "0"; + + foreach ($collegecps as $collegecp) + { + $numeroOptionTarif = $collegecp['numeroOptionTarif']; + + if ($oldnumeroOptionTarif<>$numeroOptionTarif && $oldnumeroOptionTarif <> "0") + { + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(30,$ht,convertirc("Totaux : Option ".$oldnumeroOptionTarif),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbAdherent),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbAyantdroit),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeTtcAdherent),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeTtcBeneficiaire),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeTtcTotal),1,1,'C',false); + + $nbAdherent = "0"; + $nbAyantdroit = "0"; + $primeTtcAdherent = "0"; + $primeTtcBeneficiaire = "0"; + $primeTtcTotal = "0"; + + $pdf->Ln(5); + } + + if($opt!=$collegecp['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(180,$ht,convertirc("Option ".$collegecp['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + } + + $pdf->SetFont('Arial','', 9); + + $pdf->Cell(180,$ht,convertirc($collegecp['libelleCollege']),1,1,'C',false); + + $pdf->Cell(30,$ht,convertirc($collegecp['codeProduit']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['nbAdherent']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['nbAyantdroit']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeTtcAdherent']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeTtcBeneficiaire']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeTtcTotal']),1,1,'C',false); + + $nbAdherent += $collegecp['nbAdherent']; + $nbAyantdroit += $collegecp['nbAyantdroit']; + $primeTtcAdherent += $collegecp['primeTtcAdherent']; + $primeTtcBeneficiaire += $collegecp['primeTtcBeneficiaire']; + $primeTtcTotal += $collegecp['primeTtcTotal']; + + $oldnumeroOptionTarif = $numeroOptionTarif; + $opt = $collegecp['numeroOptionTarif']; + } + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(30,$ht,convertirc("Totaux : Option ".$numeroOptionTarif),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbAdherent),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbAyantdroit),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeTtcAdherent),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeTtcBeneficiaire),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeTtcTotal),1,1,'C',false); + + $pdf->Ln(5); + + // $pdf->SetFont('Arial','', 9); + $text = convertirc("En dehors de cette tranche d'âge la couverture fait l'objet d'un accord spécial entre le souscripteur et l'Assureur."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $text = convertirc("A partir de 60 ans, un examen médical est obligatoire pour chaque assuré."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 2 : PRISE D’EFFET ET MODE DE FONCTIONNEMENT DE ACTIVA SANTE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Sous réserve d'acceptation par l'Assureur, les garanties prennent effet pour chaque personne à assurer: +- Dès la date d'effet du contrat pour les personnes à assurer se trouvant déjà au service du Contractant. + +- Directement après la date de leurs admissions au Service du Contractant pour les personnes engagées postérieurement à la date d'effet du contrat. Le Représentant du Contractant doit être en étroite collaboration avec ACTIVA ASSURANCES CAMEROUN. Une prime calculée au prorata est payable immédiatement pour toute personne devenue Adhérent pendant la période de couverture. + +- Ainsi, chaque assuré aura une carte d’assurance maladie qu’il va présenter aux prestataires de soins et ceux-ci vont vérifier à partir de ses empreintes digitales son identité et sa limite de couverture via l’application de ACTIVA SANTE. Cela va permettre aussi à l’assuré de voir en temps réel où il en est avec sa limite de couverture."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("Dans le but d’offrir une meilleure prise en charge, chaque membre principal au contrat doit remplir un formulaire de déclaration dans un délai d’un mois à partir de la réception du formulaire."); + $pdf->MultiCell(0, $ht, $text); + + // $pdf->Ln(5); + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("Article 3 : DUREE DU FUTUR CONTRAT"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Le présent contrat est souscrit pour une duré de ".$entetecp['dureePeriodicite']." à compter du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']." +Il sera renouvelable tacitement dans les conditions prévues à l'article 8 des présentes conditions particulières sauf résiliation avec un préavis de un mois avant son échéance."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $text = convertirc("Aucune obligation de renouvellement du contrat n’incombe aux parties. ".$_SESSION['nomSociete']." se réserve le droit de refuser ou de restreindre les conditions de couverture à l'égard de tous les Membres ou de tout Membre en accordant à l'assuré un délai de préavis d’un mois selon les conditions prévues à l’article 6 des présentes conditions particulières."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(5); + + $pdf->Cell(0,$ht,convertirc("Article 4 : DES GARANTIES"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("4.1.A. PRESTATIONS"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("La garantie maladie offre le paiement des frais pour les soins de santé à la suite de maladie, d'accident ou de maternité. Ainsi, sont prises en charge les prestations médicales suivantes : +- soins ambulatoires: le patient va voir un medecin, celui-ci lui prescrit des medicaments. Sur presentation de sa carte, il va prendre les medicaments à la pharmacie et rentre les prendre chez lui à la maison, +- hospitalisation: le patient va à l’hopital et y reste jusqu’à ce que il soit guerri, +- maternité (sauf pour les dépendants): sont couverts tous les soins pre-natals et post-natals. Il est à noter que les conditions de prématurité ne sont pas couvertes, +- Tous les traitements médicaux et les médicaments prescrits par un médecin diplômé et enregistré et qui a été autorisé par le Ministère de la Santé. Notre régime médical donne accès à des spécialités et à des médicaments génériques. +Cependant, les spécialités doivent être prescrites par un médecin spécialiste, sauf en cas d'urgence par autorisation préalable +- Les garanties de couverture concernent le personnel assuré; son conjoint ainsi que leurs enfants à charge jusqu'à 21 ans et prolongé jusqu'à 25 ans si l'enfant est encore étudiant sur présentation d’une attestation de scolarité et d’un extrait d’acte de naissance (ou équivalent pour les enfants adoptifs). +- Frais d'Ambulance pour les cas d'urgence d'un hôpital à un autre et d'un lieu d'accident à l'hôpital en cas d'accident sur le territoire burundais. Le service ambulance s’appliquera aux assurés malades qui devront être traités dans un hôpital désigné, à partir d’une zone où les équipements indispensables n’existent pas, sans toutefois dépasser 120.000 FBu durant toute la période couverture (et dans la limite annuelle du patient hospitalisé). +- Le remboursement sera basé sur le tarif le plus cher selon la catégorie dans laquelle vous êtes assuré localement. +- La chambre individuelle est couverte +- Ajout automatique d'un nouveau-né et/ou conjoint sans prime supplémentaire à l'exception des frais de carte +- Ajout automatique d'un nouvel adhérent avec une prime calculée au prorata +- Suppression automatique pour l'agent qui quitte le groupe et remboursement de 75% de la prime non consommée calculée au prorata, si aucun service médical n'a été payé pour lui et les personnes à sa charge; + +- L'émission de cartes d'assurance maladie dans les 7 jours suivant la notification et/ou preuve de paiement. +- Les cartes d'assurance maladie portent un numéro de téléphone que le patient peut appeler si nécessaire. Il y aura également un gestionnaire de sinistre désigné spécifiquement en charge de la COOPERATIVE. +- La liste de tous les partenaires de ACTIVA ASSURANCES CAMEROUN est jointe à ce contrat, +- Le remboursement sera basé sur le tarif le plus cher des prestataires de la catégorie 5 pour les frais déboursés chez un prestataire qui n'a pas de partenariat avec ACTIVA ASSURANCES CAMEROUN et qui n'a pas été résilié ou suspendu pour faute ou mauvaises pratiques. +- Délai maximum de remboursement en cas de paiement direct là où il n’y a pas de partenariat et après réception de tous les documents requis : 2 jours +- Gestion commune avec l'employeur ou Représentant du groupe des cas de fraudes +- Les frais funéraires en cas de décès d'un membre assuré ou son bénéficiaire sont payables endeans 24 heures suivant la réception de l'avis de décès à l'Employeur(Représentant du groupe) ou à la personne qu'il peut désigner. +- La liste du personnel ainsi que les rapports de consommations médicales seront fournis mensuellement. +- En cas de dépassement des limites de l'assuré au cours de la période d'assurance, ACTIVA ASSURANCES CAMEROUN peut le couvrir sans prime supplémentaire si le taux de sinistralité du groupe COOPERATIVE Personnel est inférieur à 60%."); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("4.1. B. REMBOURSEMENT DES SOINS"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("Aucun acte médical, appareil, opération ou hospitalisation, n'est pris en charge s'il n'a été ordonné par une personne titulaire d'un diplôme de médecin, chirurgien ou chirurgien - dentiste. +Aucun acte n'est pris en charge s'il n'est exécuté par une personne qualifiée et dans un établissement officiellement autorisé par le Ministère de la santé qui, sauf cas de force majeure, doit être conventionné par l'Assureur. +Le payement direct qui consiste à ce que l'assuré paie la totalité de la facture des prestations médicales et se fait rembourser chez l'Assureur n'est utilisé qu'à titre exceptionnel. +A cet effet, le prestataire ou l'assuré le cas échéant, devra remettre à l'Assureur les notes d'honoraires ou de frais et les ordonnances acquittées, datées et mentionnant les noms et prénoms de l'Assuré qu'elles concernent. +Les notes doivent indiquer la nature et la date des soins donnés en distinguant le coût de chacun des actes pratiqués. +Les ordonnances doivent porter lisiblement les noms et prénoms de l'assuré et s'accompagner des justificatifs de payement des produits pharmaceutiques."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("4.1. C.ETENDUE DE LA GARANTIE MALADIE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("La garantie englobe la personne assurée elle-même, son conjoint ainsi que leurs enfants légalement à charge de moins de 21 ans ou de moins de 25 ans s'ils sont encore étudiants."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->AddPage(); + + // $pdf->Ln(2); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("4.1. D.PRESTATIONS ET TAUX GARANTIS"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("Les prestations et les taux garantis sont décrits, selon la catégorie, dans le tableaux ci-dessous :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(100,$ht,convertirc("Type de Prestataire"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Taux Garantie(%)"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Ticket Modérateur(%)"),1,1,'C',false); + + $opt = "0"; + $idCollege = "0"; + + foreach ($tableaupretationcps as $tableaupretationcp) + { + if($opt!=$tableaupretationcp['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(180,$ht,convertirc("Option ".$tableaupretationcp['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $opt = $tableaupretationcp['numeroOptionTarif']; + } + + if($idCollege!=$tableaupretationcp['idCollege']) + { + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(180,$ht,convertirc("Option ".$tableaupretationcp['numeroOptionTarif']." => ".$tableaupretationcp['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $idCollege = $tableaupretationcp['idCollege']; + } + + $pdf->Cell(100,$ht,convertirc($tableaupretationcp['reseausoin']),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("100"-$tableaupretationcp['tm']),1,0,'C',false); + $pdf->Cell(40,$ht,$tableaupretationcp['tm'],1,1,'C',false); + + $opt = $tableaupretationcp['numeroOptionTarif']; + $idCollege = $tableaupretationcp['idCollege']; + } + + $pdf->AddPage(); + // $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("PLAFONDS ANNUELS PAR FAMILLE"),0,1,'L',false); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(2); + + $pdf->Cell(100,$ht,convertirc("Garantie"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Plafond"),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc("Par Bén."),1,1,'C',false); + + $opt = "0"; + $idCollege = "0"; + + foreach ($garantiescollegecps as $garantiescollegecp) + { + if($opt!=$garantiescollegecp['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(160,$ht,convertirc("Option ".$garantiescollegecp['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $opt = $garantiescollegecp['numeroOptionTarif']; + } + + if($idCollege!=$garantiescollegecp['idCollege']) + { + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(160,$ht,convertirc("Option ".$garantiescollegecp['numeroOptionTarif']." => ".$garantiescollegecp['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $idCollege = $garantiescollegecp['idCollege']; + } + + $pdf->Cell(100,$ht,convertirc($garantiescollegecp['garantie']),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($garantiescollegecp['plafond']),1,0,'C',false); + + $champApplication = ($garantiescollegecp['champApplication']=="1"); + + if($champApplication == TRUE) + $check = "4"; + else + $check = ""; + + $pdf->SetFont('ZapfDingbats','', 9); + $pdf->Cell(20, $ht, $check,1,1,'C',false); + $pdf->SetFont('Arial','', 9); + + $opt = $garantiescollegecp['numeroOptionTarif']; + $idCollege = $garantiescollegecp['idCollege']; + } + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("4.2. CESSATION DES GARANTIES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Les garanties cessent collectivement le jour de la résiliation du contrat ou de l’échéance de celui-ci et individuellement, le jour où la personne assurée atteint la limite de couverture, quitte le service du Contractant, ou décède. + +En cas de fraude avérée, l'Assureur se réserve le droit de radier l'assuré concerné. L'ensemble des garanties offertes à la personne Assurée doivent être annulées à partir de la date où nous avons eu connaissance de la fraude. Les primes payées ne sont pas remboursables et le Membre ne sera plus admissible comme personne assurée pour les périodes futures"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(5); + + // $pdf->AddPage(); + + $pdf->Cell(0,$ht,convertirc("4.3. SUSPENSION DES GARANTIES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Les garanties sont suspendues collectivement si les primes ne sont pas payées dans les TRENTE (30) jours à partir de la prise d'effet du contrat. +Les garanties reprendront effet immédiatement après le paiement de la totalité des primes en souffrance au moment de la suspension."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(5); + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 5 : COTISATIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Les garanties définies ci-dessus seront accordées moyennant des cotisations de :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Cell(50,$ht,convertirc("Type assuré"),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc("Nb"),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("P. Base"),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("Prime Tot"),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + + $opt = "0"; + + foreach ($collegecp2s as $collegecp2) + { + if($opt!=$collegecp2['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(170,$ht,convertirc("Option ".$collegecp2['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + } + + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(170,$ht,convertirc("Option ".$collegecp2['numeroOptionTarif']." => ".$collegecp2['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $idCollege = $collegecp2['idCollege']; + + $pdf->Cell(50,$ht,convertirc(_('Adhérent')),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($collegecp2['nbAdherent']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeFamille']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeTtcAdherent_total']),1,1,'C',false); + + $pdf->Cell(50,$ht,convertirc(_('Dépendant')),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($collegecp2['nbAyantdroit']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeBeneficiaire']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeTtcBeneficiaire_total']),1,1,'C',false); + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(50,$ht,convertirc("Total"),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($collegecp2['nbAssure']),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc(""),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeTtcTotal']),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + + $opt = $collegecp2['numeroOptionTarif']; + } + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 6 : RENOUVELEMENT ET CLAUSE D'AJUSTEMENT"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Un mois avant l'échéance, un avenant provisionnel de renouvellement sera envoyé à l’assuré pour le règlement d'un acompte sur le renouvellement. +La prime définie ci-dessus fera l'objet dans les conditions ci-après d'un ajustement en fonction des résultats de Sinistres sur primes nettes(déduction faite des taxes et commissions des intermédiaires) après la clôture de chaque exercice. + +Pour associer l’assuré à l'évolution des consommations, un rapport d’utilisation trimestriel lui sera régulièrement transmis."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 7: EXCLUSIONS GENERALES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("- Ophtalmologie,et toutes les maladies chroniques comme le diabète, le VIH, les hépatites A,B,C... +- Les conditions de prématurité +- Traitement cosmétique et chirurgie esthétique +- Blessures dues à la participation aux jeux et activités dangereuses +- Blessures dues à la participation aux greves et émeutes +- Traitement de fécondité à savoir les frais de traitement liés à la stérilité et à l’impuissance +- Traitement prophylactique, les compléments alimentaires +- Cardiopathie ischemique +- Automutilation intentionnelle,suicide ou influence de l’alcool ou de la drogue +- Cancers de la peau,cancers in situ et mélanomes in situ (sauf les melanones malins) +- Les voyages en avion, sauf si le Membre (ayant payé le billet) voyage dans un avion conçu pour transporter des passagers +- Coût d’appareils auditifs, à moins qu’il résulte d’un accident +- Dépression nerveuse, psychonévrose, à moins qu’il ne résulte d’un accident"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 8 : DISPOSITIONS FINALES"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Lors de l'exécution des actes, examens ou traitements des assurés, le professionnel de santé ou l'établissement de soins est seul et unique responsable des complications, incidents ou accidents pouvant survenir dans la pratique de l'art médical. +En aucun cas, la responsabilité de l'Assureur ne pourra être invoquée pour des faits relevant de la responsabilité du professionnel de santé ou de l'établissement de soins. +Le contrat sera établi en deux (2) exemplaires et prend effet sous réserve des dispositions de l'Article II des CONDITIONS PARTICULIERES."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + // DEBUT TEXTE LIBRE + if ($entetecp['texteCp']>" ") + { + $pdf->AddPage(); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("ANNEXES AUX CONDITIONS PARTICULIERES"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc($entetecp['texteCp']); + + $pdf->MultiCell(0, $ht, $text); + } + // FIN TEXTE LIBRE + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Fait à ".$_SESSION['villeSociete'].", le ".$entetecp['dateJour']),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("POUR ACTIVA ASSURANCES CAMEROUN"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("POUR L’ASSURE"),0,1,'R',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("LE PRODUCTEUR"),0,1,'L',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("LA DIRECTION"),0,1,'L',false); + + $fichier="Temp/TMP_devis_cat5"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Deviscat5eng.php b/Societes/ric/Tarifs/Controleur/Deviscat5eng.php new file mode 100755 index 00000000..0af4022e --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Deviscat5eng.php @@ -0,0 +1,639 @@ +police->getEnteteCP($idPolice); + $collegecps = $this->police->getCollegesCP($idPolice); + $collegecp2s = $this->police->getCollegesCP($idPolice); + $garantiescollegecps = $this->police->getGarantiesCollegesCP($idPolice); + $tableaupretationcps = $this->police->gettableauPrestationsCP($idPolice); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=10; + + $pdf->SetMargins(10, 10, 10) ; + + $pdf->SetFont('Arial','B', 15); + + $pdf->SetY(40); + + $pdf->SetFillColor(135,206,250); // bleu + + $pdf->Cell(0,$ht,convertirc("ACTIVA SANTE PROPOSAL – HEALTH INSURANCE"),1,1,'C',true); + + $pdf->SetFont(''); + + $pdf->Ln(15); + + $pdf->Cell(45,$ht,convertirc("No Quotation"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['numeroPolice']),0,1,'L',false); + + $pdf->Cell(45,$ht,convertirc("CLIENT"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['nomClient']),0,1,'L',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Cell(45,$ht,convertirc("Headquarter"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['adresseGeo']),0,1,'L',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("As Insured"),0,0,'C',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("Near "),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B', 15); + $pdf->Cell(0,$ht,convertirc($entetecp['nomSociete']),0,1,'C',false); + + + $pdf->Ln(15); + + $pdf->SetFont('Arial','', 10); + $pdf->Cell(0,$ht,convertirc("The future contract will cover the following guarantees :"),0,1,'C',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','B', 13); + $pdf->Cell(0,$ht,convertirc("DISEASE-HOSPITALIZATION-MATERNITY-OPHTHALOMOLOGY-DENTAL"),0,1,'C',false); + + + $pdf->AddPage(); + $ht=6; + + $pdf->SetFont('Arial','B', 15); + $pdf->Cell(0,$ht,convertirc("PARTICULAR DISPOSITIONS"),0,1,'C',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc($entetecp['nomClient']),0,1,'L',false); + + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Declares to subscribe to the general terms and conditions and special provisions of the Group Heath Insurance Agreement and the following particulars with ".$entetecp['nomSociete']." for the persons to be insured, for the guarantees and for the following contribution :"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 1 : PEOPLE TO BE ASSURED"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Staff members of the insured person over the age of 18 and under 70 at the time of entry into the insurance according to the following breakdown:"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(30,$ht,convertirc("Category"),1,0,'C',false); + $pdf->Cell(25,$ht,convertirc("Nb members"),1,0,'C',false); + $pdf->Cell(25,$ht,convertirc("Nb Dep"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Premium member"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Premium Dep"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Tot premium"),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + + $oldnumeroOptionTarif = "0"; + + $nbAdherent = "0"; + $nbAyantdroit = "0"; + $primeTtcAdherent = "0"; + $primeTtcBeneficiaire = "0"; + $primeTtcTotal = "0"; + + $opt = "0"; + + foreach ($collegecps as $collegecp) + { + $numeroOptionTarif = $collegecp['numeroOptionTarif']; + + if ($oldnumeroOptionTarif<>$numeroOptionTarif && $oldnumeroOptionTarif <> "0") + { + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(30,$ht,convertirc("Total : Option ".$oldnumeroOptionTarif),1,0,'C',false); + $pdf->Cell(25,$ht,format_N($nbAdherent),1,0,'C',false); + $pdf->Cell(25,$ht,format_N($nbAyantdroit),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($primeTtcAdherent),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeTtcBeneficiaire),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeTtcTotal),1,1,'C',false); + + $nbAdherent = "0"; + $nbAyantdroit = "0"; + $primeTtcAdherent = "0"; + $primeTtcBeneficiaire = "0"; + $primeTtcTotal = "0"; + + $pdf->Ln(5); + } + + if($opt!=$collegecp['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(180,$ht,convertirc("Option ".$collegecp['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + } + + $pdf->SetFont('Arial','', 9); + + $pdf->Cell(180,$ht,convertirc($collegecp['libelleCollege']),1,1,'C',false); + + $pdf->Cell(30,$ht,convertirc($collegecp['codeProduit']),1,0,'C',false); + $pdf->Cell(25,$ht,format_N($collegecp['nbAdherent']),1,0,'C',false); + $pdf->Cell(25,$ht,format_N($collegecp['nbAyantdroit']),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($collegecp['primeTtcAdherent']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeTtcBeneficiaire']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeTtcTotal']),1,1,'C',false); + + $nbAdherent += $collegecp['nbAdherent']; + $nbAyantdroit += $collegecp['nbAyantdroit']; + $primeTtcAdherent += $collegecp['primeTtcAdherent']; + $primeTtcBeneficiaire += $collegecp['primeTtcBeneficiaire']; + $primeTtcTotal += $collegecp['primeTtcTotal']; + + $oldnumeroOptionTarif = $numeroOptionTarif; + $opt = $collegecp['numeroOptionTarif']; + } + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(30,$ht,convertirc("Total : Option ".$oldnumeroOptionTarif),1,0,'C',false); + $pdf->Cell(25,$ht,format_N($nbAdherent),1,0,'C',false); + $pdf->Cell(25,$ht,format_N($nbAyantdroit),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($primeTtcAdherent),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeTtcBeneficiaire),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeTtcTotal),1,1,'C',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','', 9); + $text = convertirc("Outside this age group the cover is the subject of a special agreement between the subscriber and the Insurer."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $text = convertirc("From the age of 60, a medical examination is compulsory for individual insured persons."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 2: TAKING EFFECT AND MODE OF OPERATION OF ACTIVA SANTE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Subject to acceptance by the Insurer, the benefits take effect for each person to be insured: +- From the effective date of the contract for persons to be insured who are already in the Contractor's service. +- Directly after the date of their admission to the Contractor's Department for persons hired after the effective date of the contract. The Contractor's Human Resources Department must be in close collaboration with BICOR LIFE AND CAPITALIZATION. A prorated premium is payable immediately to any person who becomes a Member during the period of coverage. +- Thus, each insured will have a health insurance card that he will present to health care providers and they will verify from his fingerprints his identity and coverage limit via the application of ACTIVA SANTE. This will also allow the insured to see in real time where he is with his limit of coverage."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("In order to provide better support, each member of the contract must complete a declaration form within one month of receiving the form."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + // $pdf->Ln(5); + $pdf->AddPage(); + + $pdf->Cell(0,$ht,convertirc("Article 3: DURATION OF THE FUTURE CONTRACT"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("The contract will be signed for a period of ".$entetecp['dureePeriodiciteEng']." from ".$entetecp['dateEffet']." to ".$entetecp['dateEcheance'].". +It will be tacitly renewable under the conditions set out in article 6 of these special conditions, unless terminated with one month’s notice before its expiry. +No obligation to renew the contract is incubent upon the parties. ACTIVA ASSURANCES CAMEROUN reserves the right to refuse or restrict the terms of coverage for all Members or any Member by granting the insured person a notice period of one month in accordance with the conditions set out in article 6 of these special conditions."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("Article 4 : BENEFITS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("4.1.A. ADVANTAGES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("The health insurance offers the payment of expenses for health care as a result of accident or maternity sickness. + +Thus, the following medical benefits are covered: +-outpatient, hospitalization, maternity, ophthalmology, dentistry and chronic diseases. + +-conditions of prematurity are covered + +-MRI and other special tests are all covered + +-Indirect payment: the beneficiary pays his contribution while obtaining the medical service and the provider requests refund or difference to ACTIVA ASSURANCES CAMEROUN (applicable for options with co-payment) + +- All medical treatments and medications prescribed by a qualified and registered doctor and which has been authorized by the Ministry of Health. Our medical plan provides access to specialties and generic drugs. +However, specialties must be prescribed by a medical specialist, except in case of emergency by prior authorization. + +-Coverage guarantees concern the insured staff, spouse and their dependent children up to age 21 and extended to 25 if the child is still a student upon presentation of a certificate of education and an extract from the birth certificate (or equivalent for adopted children). + +-Ambulance costs for emergency cases from one hospital to another and from an accident site to the hospital in the event of an accident on CAMEORUN territory. The ambulance service will apply to sick insured persons who are to be treated in a designated hospital, from an area where necessary equipment does not exist, but without exceeding Bif 500,000 during the entire coverage period (and within the annual limit of the hospitalized) + +-Treatments in all partner hospitals in East African countries. The insured will go to an appropriate institution according to the partnership of the insurer. He will have to notify the insurer at least 3 days before to allow him to notify the insured persons designated by the insured (only for those who have extraterritorial coverage). + +-Treatments in India if necessary, based on a medical report from a specialist doctor attestating tha the same services can not be offerered in East African countries with the prior approval of ACTIVA ASSURANCES CAMEROUN. + +-The extension in East African countries is covered within the limit of coverage for dependents of the insured. + +-The refund will be based on the most expensive rate depending on the category in which you are insured locally. + +-Accommodation of a parent for children under 12 years old in the hospital. This will only apply to coverage abroad + +-The single room is covered + +-Automatic addition of a newborn and/or spouse without additional premium except card fees + +-Automatic addition of a new member with a prorated premium + +-Automatic deletion for the agent leaving the group and refund of 75% of the unutilized premium calculated + +-pro rata, if no medical service has been paid for him and his dependents + +-The issue of health insurance cards within 7 days of notification and/or proof of payment. + +-Health insurance cards carry a telephone number which the patient can call if necessary. There will also be a designated claims manager specifically in charge of ".$entetecp['nomClient'].". + +-The list of all ACTIVA ASSURANCES CAMEROUN partners is attached to this technical offer + +-The refund will be based on the most expensive rate depending on the category in which you are insured locally. +For expenses paid to a provider who has no partnership with ACTIVA ASSURANCES CAMEROUN and which has not been terminated or suspended for fault or bad practice. + +-Maximum repayment period in case of direct payment where there is no partnership and after receipt of all required documents: 2 days + +-Joint management with the employer of cases of fraud + +-Funeral expenses in the event of the death on an insured member or his beneficiary are payable within 24 hours of receipt of the death notice to the employer or to the person he may designate. + +-The list of staff and reports of medical consumption will be provided monthly. + +-If the limit of the insured person is exceeded during the insurance period, ACTIVA ASSURANCES CAMEROUN may cover him without additional premium if the loss ratio of the ".$entetecp['nomClient']." Group is less than 60%."); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("4.1. B. REIMBURSEMENT OF CARE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("No medical act, device, operation or hospitalization is supported if it has not been ordered by a person holding a doctor’s degree, surgeon or dental surgeon. + +No act is taken in charge if it is not performed by a qualified person and in an establishment officially authorized by the Ministry of Health which, except in cases of major force, must be agreed by the insurer. + +The system of payment of benefits invoices is in principle the Third party paying by which the beneficiary of the insurance sickness only pays the agreed co-payment and the care provider is paid the balance of his bill by the insurer. + +The direct payment which consists in the fact that the insured person pays the entire bill for the medical services and is reimbursed by the insured is only used in exceptional circumstances. + +For this purpose, the service provider or the insured if applicable, must submit to the insurer the notes of fees or expenses and the orders paid, dated and mentioning the names and forenames of the insured concerned. The notes must indicate the nature and the date of the care given by distinguishing the cost of each of the acts performed. + +Prescriptions must clearly bear the name and surname of the insured and be accompanied by proof of payment of pharmaceutical products."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("4.1. C.EXTENT OF THE DISEASE GUARANTEE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("The coverage includes the insured person himself, his spouse and their legally dependent children under 21 or under 25 if they are still students. + +This coverage is also extended to staff who fall ill while on a work mission or on annual leave recognized by the contractor. + +In the latter case, the reimbursement will be made on the basis of the KIRA Hospital rate for members of the first category or the Reference Public Hospital for members of the other categories after deduction of the co-payment mentioned in the table of benefits and limits."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->AddPage(); + + // $pdf->Ln(2); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("4.1. D.BENEFITS AND GUARANTEED RATE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("Benefits and guaranteed rates are described, by category, in the tables below :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(100,$ht,convertirc("Type of provider"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Rate guarantee(%)"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Co-payment(%)"),1,1,'C',false); + + $opt = "0"; + $idCollege = "0"; + + foreach ($tableaupretationcps as $tableaupretationcp) + { + if($opt!=$tableaupretationcp['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(180,$ht,convertirc("Option ".$tableaupretationcp['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $opt = $tableaupretationcp['numeroOptionTarif']; + } + + if($idCollege!=$tableaupretationcp['idCollege']) + { + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(180,$ht,convertirc("Option ".$tableaupretationcp['numeroOptionTarif']." => ".$tableaupretationcp['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $idCollege = $tableaupretationcp['idCollege']; + } + + $pdf->Cell(100,$ht,convertirc($tableaupretationcp['reseausoinEng']),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("100"-$tableaupretationcp['tm']),1,0,'C',false); + $pdf->Cell(40,$ht,$tableaupretationcp['tm'],1,1,'C',false); + + $opt = $tableaupretationcp['numeroOptionTarif']; + $idCollege = $tableaupretationcp['idCollege']; + } + + $pdf->AddPage(); + // $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("LIMITS PER FAMILY OR PER MEMBER"),0,1,'L',false); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(2); + + $pdf->Cell(100,$ht,convertirc("Garantee"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Limit"),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc("Per Ben."),1,1,'C',false); + + $opt = "0"; + $idCollege = "0"; + + foreach ($garantiescollegecps as $garantiescollegecp) + { + if($opt!=$garantiescollegecp['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(160,$ht,convertirc("Option ".$garantiescollegecp['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $opt = $garantiescollegecp['numeroOptionTarif']; + } + + if($idCollege!=$garantiescollegecp['idCollege']) + { + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(160,$ht,convertirc("Option ".$garantiescollegecp['numeroOptionTarif']." => ".$garantiescollegecp['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $idCollege = $garantiescollegecp['idCollege']; + } + + $pdf->Cell(100,$ht,convertirc($garantiescollegecp['garantieEng']),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($garantiescollegecp['plafond']),1,0,'C',false); + + $champApplication = ($garantiescollegecp['champApplication']=="1"); + + if($champApplication == TRUE) + $check = "4"; + else + $check = ""; + + $pdf->SetFont('ZapfDingbats','', 9); + $pdf->Cell(20, $ht, $check,1,1,'C',false); + $pdf->SetFont('Arial','', 9); + + $opt = $garantiescollegecp['numeroOptionTarif']; + $idCollege = $garantiescollegecp['idCollege']; + } + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("4.2. TERMINATION OF GUARANTEES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Collateral ceases collectively on the day of termination of the contract or on its due date and individually, on the day the insured person reaches the limit of coverage, leaves the contractor’s service, or dies. +In case of proven fraud, the insurer reserves the right to cancel the insured concerned. All the benefits offered to the insured person must be canceled from the date we became aware of the fraud. Premiums paid are not refundable and the member will no longer be eligible as an insured person for future periods."); + $pdf->MultiCell(0, $ht, $text); + + + // $pdf->AddPage(); + $pdf->Ln(10); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("4.3. SUSPENSION OF GUARANTEES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Collateral is suspended collectively if the premiums are not paid within THIRTY (30) days of the effective date of the policy and individually if the premiums are not paid immediately after the insured’s membership."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $text = convertirc("Guarantees will resume immediately upon payment of all outstanding premiums at the time of suspens."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 5 : CONTRIBUTIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("The guarantees defined above will be granted with :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht,convertirc("Insured type"),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc("Nb"),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("Basic premium"),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("Tot Premium"),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + + $opt = "0"; + + foreach ($collegecp2s as $collegecp2) + { + if($opt!=$collegecp2['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(170,$ht,convertirc("Option ".$collegecp2['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + } + + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(170,$ht,convertirc("Option ".$collegecp2['numeroOptionTarif']." => ".$collegecp2['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $idCollege = $collegecp2['idCollege']; + + $pdf->Cell(50,$ht,convertirc(_('Adhérent')),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($collegecp2['nbAdherent']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeFamille']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeTtcAdherent_total']),1,1,'C',false); + + $pdf->Cell(50,$ht,convertirc(_('Dépendant')),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($collegecp2['nbAyantdroit']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeBeneficiaire']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeTtcBeneficiaire_total']),1,1,'C',false); + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(50,$ht,convertirc("Total"),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($collegecp2['nbAssure']),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc(""),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp2['primeTtcTotal']),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + + $opt = $collegecp2['numeroOptionTarif']; + } + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 6: RENEWAL AND PREMIUM ADJUSTEMENT CLAUSE"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("One month before the expiry, a provisional renewal rider will be sent to the insured for payment of a deposit on the renewal. +The premium defined above will be adjusted in accordance with the results of net premium claims (net of taxes and commissions of intermediaries) after the end of each financial year. +To associate the insured with changes in consumptions, quarterly usage report will be regularly transmitted. "); + $pdf->MultiCell(0, $ht, $text); + + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("Article 7: GENERAL EXCLUSIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("- Cosmetic treatment and cosmetic surgery +- Injuries due to participation in games and dangerous activities +- Injuries due to participation in strikes and riots +- Fertility treatment, namely treatment costs related to infertility and impotence +- Prophylactic treatment, dietary supplements +-Ischemic heart disease +- Intentional self-harm, suicide or the influence of alcohol or drugs +- Skin cancers, in situ cancers and melanomas in situ (except malignant melanomas) +- Air travel, unless the Member (having paid for the ticket) travels in an airplane designed to carry passengers +- Cost of hearing aids, unless resulting from an accident +- Nervous breakdown, psychoneurosis, unless it results from an accident"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 8: FINAL PROVISIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("When performing the acts, examinations or treatments of the insured, the health professional or the care establishment is the sole and sole responsible for complications, incidents or accidents that may occur in the practice of the medical art. +In no event shall the Insurer's liability be invoked for matters that are the responsibility of the health professional or the health care facility. +The contract will be established in two (2) copies and takes effect subject to the provisions of Article II of the PARTICULAR CONDITIONS, the ".$entetecp['dateEffet']); + $pdf->MultiCell(0, $ht, $text); + + // DEBUT TEXTE LIBRE + if ($entetecp['texteCp']>" ") + { + $pdf->AddPage(); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("ANNEXES TO THE PARTICULAR CONDITIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc($entetecp['texteCp']); + + $pdf->MultiCell(0, $ht, $text); + } + // FIN TEXTE LIBRE + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Done at ".$_SESSION['villeSociete']." ".$entetecp['dateJour']."."),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("FOR ACTIVA ASSURANCES CAMEROUN"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("FOR INSURED"),0,1,'R',false); + + $pdf->Ln(20); + + $pdf->Cell(0,$ht,convertirc("UNDERWRITTER"),0,1,'L',false); + + $pdf->Ln(20); + + $pdf->Cell(0,$ht,convertirc("EXECUTIVE MANAGEMENT"),0,1,'L',false); + + $fichier="Temp/TMP_proposal_cat5"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Devisstandard.php b/Societes/ric/Tarifs/Controleur/Devisstandard.php new file mode 100755 index 00000000..88cbc941 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Devisstandard.php @@ -0,0 +1,669 @@ +police_societe = new Police_d_sodciete(); + + $entetecp = $this->police->getEnteteCP($idPolice); + $collegecps = $this->police_societe->getCollegesCpLienParente($idPolice); + // $collegecp2s = $this->police_societe->getCollegesCpLienParente($idPolice); + $garantiescollegecps = $this->police_societe->getGarantiesCollegesCpLienParente($idPolice); + $tableaupretationcps = $this->police_societe->gettableauPrestationsCpLienParente($idPolice); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=10; + + $pdf->SetMargins(10, 10, 10) ; + + $pdf->SetFont('Arial','B', 15); + + $pdf->SetY(40); + + $pdf->SetFillColor(135,206,250); // bleu + + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(0,$ht,convertirc("PROPOSITION DE CONTRAT - D'ASSURANCE SANTE"),1,1,'C',true); + } + else + { + $pdf->Cell(0,$ht,convertirc("PROPOSITION DE CONTRAT - D'ASSURANCE SANTE INDIVIDUEL"),1,1,'C',true); + } + + $pdf->SetFont(''); + + $pdf->Ln(15); + + $pdf->Cell(45,$ht,convertirc("No DEVIS"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['numeroPolice']),0,1,'L',false); + + $pdf->Cell(45,$ht,convertirc("CLIENT"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['nomClient']),0,1,'L',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Cell(45,$ht,convertirc("Dont le Siège Social est"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['adresseGeo']),0,1,'L',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("En qualité d'Assuré "),0,0,'C',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("Auprès de "),0,1,'C',false); + + $pdf->SetFont('Arial','B', 15); + $pdf->Cell(0,$ht,convertirc($entetecp['nomSociete']),0,1,'C',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Cell(0,$ht,convertirc("En qualité d'ASSUREUR "),0,1,'C',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("Le futur contrat aura pour objet la garantie suivante :"),0,1,'C',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','B', 13); + $pdf->Cell(0,$ht,convertirc("MALADIE - HOSPITALISATION - MATERNITE - OPHTALMOLOGIE - DENTISTERIE"),0,1,'C',false); + + + $pdf->AddPage(); + $ht=6; + + $pdf->SetFont('Arial','B', 15); + $pdf->Cell(0,$ht,convertirc("DISPOSITIONS PARTICULIERES"),0,1,'C',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc($entetecp['nomClient']),0,1,'L',false); + + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Déclare souscrire aux conditions générales et dispositions spéciales du Contrat "); + $text .= convertirc("d'Assurance Maladie Groupe et celles particulières qui suivent, auprès de ".$_SESSION['nomSociete']); + $text .= convertirc(" en faveur des personnes à assurer, pour les Garanties et moyennant les Cotisations ci-après :"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 1 : PERSONNES A ASSURER"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Les membres du Personnel de l'assuré âgés de plus de 18 ans et de moins de 70 ans à "); + $text .= convertirc("l'entrée dans l'assurance selon la répartition suivante :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(60,$ht,convertirc("Lien Parenté"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Prime Ht"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Pop"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Prime Tot"),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + + $oldnumeroOptionTarif = "0"; + + $nbPersonne = "0"; + $nbPersonneCollege = "0"; + $nbPersonneOption = "0"; + + $primeHtOption = "0"; + $primeHtCollee = "0"; + + $opt = "0"; + // $idCollege = "0"; + $oldidCollege = "0"; + $primeHtLienParenteTotal = "0"; + $primeHtLienParenteCollege = "0"; + $idCollegeNew = "0"; + + $accessoireTotal = "0"; + $primeHtTotal = "0"; + $taxeTotal = "0"; + $primeTtcTotal = "0"; + + foreach ($collegecps as $collegecp) + { + $numeroOptionTarif = $collegecp['numeroOptionTarif']; + $idCollege = $collegecp['idCollege']; + + if ($oldnumeroOptionTarif<>$numeroOptionTarif && $oldnumeroOptionTarif <> "0") + { + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(90,$ht,convertirc("Totaux Collège"),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbPersonneCollege),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeHtCollege-$accessoireCollege),1,1,'C',false); + + $pdf->Cell(60,$ht,convertirc("Accessoires : ".format_N($accessoireCollege)),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Taxes : ".format_N($taxeCollege)),1,0,'C',false); + $pdf->Cell(60,$ht,convertirc("Ttc : ".format_N($primeTtcCollege)),1,1,'C',false); + + $pdf->Cell(90,$ht,convertirc("Totaux : Option ".$oldnumeroOptionTarif),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbPersonneOption),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeHtOption-$accessoireOption),1,1,'C',false); + + $pdf->Cell(60,$ht,convertirc("Accessoires : ".format_N($accessoireOption)),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Taxes : ".format_N($taxeOption)),1,0,'C',false); + $pdf->Cell(60,$ht,convertirc("Ttc : ".format_N($primeTtcOption)),1,1,'C',false); + + $pdf->Ln(5); + + $oldidCollege = "0"; + } + + if ($oldidCollege<>$idCollege && $oldidCollege <> "0") + { + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(90,$ht,convertirc("Totaux Collège"),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbPersonneCollege),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeHtCollege-$accessoireCollege),1,1,'C',false); + + $pdf->Cell(60,$ht,convertirc("Accessoires : ".format_N($accessoireCollege)),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Taxes : ".format_N($taxeCollege)),1,0,'C',false); + $pdf->Cell(60,$ht,convertirc("Ttc : ".format_N($primeTtcCollege)),1,1,'C',false); + } + + if($opt!=$collegecp['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(150,$ht,convertirc("Option ".$collegecp['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + } + + if($idCollegeNew!=$collegecp['idCollege']) + { + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(150,$ht,convertirc($collegecp['produit']." => ".$collegecp['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $idCollegeNew = $collegecp['idCollege']; + } + + $pdf->SetFont('Arial','', 9); + + $pdf->Cell(60,$ht,convertirc($collegecp['lienparente']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeHt']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['nbPersonne']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeHtLienParente']),1,1,'C',false); + + $primeHtOption = $collegecp['primeHtOption']; + $nbPersonneOption = $collegecp['nbPersonneOption']; + $accessoireOption = $collegecp['accessoireOption']; + $primeHtOption = $collegecp['primeHtOption']; + $taxeOption = $collegecp['taxeOption']; + $primeTtcOption = $collegecp['primeTtcOption']; + + $nbPersonneCollege = $collegecp['nbPersonneCollege']; + // $primeHtCollege = $collegecp['primeHtLienParente']; + $accessoireCollege = $collegecp['accessoireCollege']; + $primeHtCollege = $collegecp['primeHtCollege']; + $taxeCollege = $collegecp['taxeCollege']; + $primeTtcCollege = $collegecp['primeTtcCollege']; + + // $nbPersonne += $collegecp['nbPersonne']; + // $primeHtLienParenteTotal += $collegecp['primeHtLienParente']; + + $oldnumeroOptionTarif = $numeroOptionTarif; + $opt = $collegecp['numeroOptionTarif']; + $oldidCollege = $idCollege; + } + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(90,$ht,convertirc("Totaux Collège"),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbPersonneCollege),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeHtCollege-$accessoireCollege),1,1,'C',false); + + $pdf->Cell(60,$ht,convertirc("Accessoires : ".format_N($accessoireCollege)),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Taxes : ".format_N($taxeCollege)),1,0,'C',false); + $pdf->Cell(60,$ht,convertirc("Ttc : ".format_N($primeTtcCollege)),1,1,'C',false); + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(90,$ht,convertirc("Totaux : Option ".$numeroOptionTarif),1,0,'C',false); + + $pdf->Cell(30,$ht,format_N($nbPersonneOption),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeHtOption-$accessoireOption),1,1,'C',false); + + $pdf->Cell(60,$ht,convertirc("Accessoires : ".format_N($accessoireOption)),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Taxes : ".format_N($taxeOption)),1,0,'C',false); + $pdf->Cell(60,$ht,convertirc("Ttc : ".format_N($primeTtcOption)),1,1,'C',false); + + $pdf->Ln(5); + + $text = convertirc("En dehors de cette tranche d'âge la couverture fait l'objet d'un accord spécial entre le souscripteur et l'Assureur."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $text = convertirc("A partir de 60 ans, un examen médical est obligatoire pour chaque assuré."); + $pdf->MultiCell(0, $ht, $text); + + // $pdf->Ln(5); + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 2 : PRISE D’EFFET ET MODE DE FONCTIONNEMENT DE ACTIVA SANTE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Sous réserve d'acceptation par l'Assureur, les garanties prennent effet pour chaque personne à assurer : "); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("- Dès la date d'effet du contrat pour les personnes à assurer se trouvant déjà au service du Contractant."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("- Directement après la date de leur admission au Service du Contractant pour les personnes engagées "); + $text .= convertirc("postérieurement à la date d'effet du contrat. Le Departement des Ressources Humaines du Contractant doit être en étroite collaboration avec "); + $text .= convertirc($_SESSION['nomSociete'] . ". Une prime calculée au prorata est payable immédiatement pour toute personne devenue Adhérent pendant la période de couverture."); + $pdf->MultiCell(0, $ht, $text); + $text = convertirc("- Ainsi, chaque assuré aura une carte d’assurance maladie qu’il va présenter aux prestataires de soins et ceux-ci vont vérifier à partir de ses empreintes digitales son identité et sa limite de couverture via l’application de ACTIVA SANTE. Cela va permettre aussi à l’assuré de voir en temps réel où il en est avec sa limite de couverture. "); + $pdf->MultiCell(0, $ht, $text); + $text = convertirc("- NB : Pour les assurés individuels, ils doivent attendre une période d’un mois avant de bénéficier de l’assurance santé ; exception faite des cas d’accident. +Aussi, les assurés individuels doivent attendre une période de 10 mois avant de bénéficier de la couverture maternité. "); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("Dans le but d’offrir une meilleure prise en charge, chaque membre principal au contrat doit remplir un formulaire de déclaration dans un délai d’un mois à partir de la réception du formulaire."); + $pdf->MultiCell(0, $ht, $text); + + + $pdf->SetFont('Arial','B', 10); + + // $pdf->Ln(5); + $pdf->AddPage(); + + $pdf->Cell(0,$ht,convertirc("Article 3 : DUREE DU FUTUR CONTRAT"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Le contrat sera souscrit pour une durée de ".$entetecp['dureePeriodicite']." à compter du ".$entetecp['dateEffet']." au ".$entetecp['dateEcheance']." +Il sera renouvelable tacitement dans les conditions prévues à l'article 6 des présentes conditions particulières sauf résiliation avec un préavis de un mois avant son échéance."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + + $pdf->Cell(0,$ht,convertirc("Article 4 : DES GARANTIES"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("4.1.A. PRESTATIONS"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("La garantie maladie offre le paiement des frais pour les soins de santé à la suite de maladie d'accident ou de maternité. +Ainsi, sont prises en charge les prestations médicales suivantes : +- Soins ambulatoires, hospitalisation , maternité (sauf pour les dépendants), ophtalmologie, dentisterie et maladies chroniques. +- Les conditions de prématurité sont couvertes +- L'IRM et d'autres tests spéciaux sont tous couverts +- Paiement indirect : le bénéficiaire paie sa contribution pendant l'obtention du service médical et le prestataire demande +le remboursement ou la différence à ACTIVA ASSURANCES CAMEROUN (applicable pour les options avec ticket modérateur) +- Tous les traitements médicaux et les médicaments doivent prescrits par un médecin diplômé et enregistré et qui a été autorisé par le Ministère de la Santé. Notre régime médical donne accès à des spécialités et à des médicaments génériques. Cependant, les spécialités doivent être prescrites par un médecin spécialiste, sauf en cas d'urgence par autorisation préalable +- Les garanties de couverture concernent le personnel assuré; son conjoint ainsi que leurs enfants à charge jusqu'à 21 ans et prolongé jusqu'à 25 ans si l'enfant est encore étudiant sur présentation d’une attestation de scolarité et d’un extrait d’acte de naissance (ou équivalent pour les enfants adoptifs). +- Frais d'Ambulance pour les cas d'urgence d'un hôpital à un autre et d'un lieu d'accident à l'hôpital en cas d'accident sur le territoire burundais. Le service ambulance s’appliquera aux assurés malades qui devont être traité dans un hôpital désigné, à partir d’une zone où les équipements indispensables n’existent pas, sans toutefois dépasser 500.000.FBu. durant toute la période de couverture (et dans la limite annuelle du patient hospitalisé). +- Traitement dans tous les hôpitaux partenaires des pays d'Afrique de l'Est. L'assuré ira dans un établissement approprié selon le partenariat de l'assureur. Il devra aviser l'assureur immédiatement afin de lui permettre d'aviser les prestataires partenaires (seulement pour ceux qui ont une couverture extraterritoriale) +- Traitement en Inde et en Afrique du Sud le cas échéant, sur base d'un rapport médical d'un médecin spécialiste attestant que les mêmes services ne peuvent pas être offerts dans les pays de l'Afrique de l'Est avec l'assistance préalable de ACTIVA ASSURANCES CAMEROUN (seulement pour ceux qui ont une couverture extraterritoriale) +- L'extension dans les pays de l'Afrique de l'Est est couverte dans la limite de la couverture pour tous les assurés. Le remboursement sera basé sur le tarif le plus cher selon la catégorie dans laquelle vous êtes assurés localement. +- L'hébergement d'un parent pour les enfants de moins de 12 ans à l'hôpital, cela ne s'appliquera qu'à la couverture à l'étranger +- La chambre individuelle est couverte +- Ajout automatique d'un nouveau-né et/ou conjoint sans prime supplémentaire à l'exception des frais de carte +- Ajout automatique d'un nouvel adhérent avec une prime calculée au prorata +- Suppression automatique pour l'agent qui quitte le groupe et remboursement de 75% de la prime non consommée calculée au prorata, si aucun service médical n'a été payé pour lui et les personnes à sa charge +- L'émission de cartes d'assurance maladie dans les 7 jours suivant la notification et/ou preuve de paiement. +- Les cartes d'assurance maladie portent un numéro de téléphone que le patient peut appeler si nécessaire. Il y aura également un gestionnaire de sinistre désigné spécifiquement en charge de l'assuré. +- La liste de tous les partenaires de ACTIVA ASSURANCES CAMEROUN est jointe à cette offre technique +- Le remboursement sera basé sur le tarif le plus cher selon la catégorie dans laquelle vous êtes assuré localement.pour les frais déboursés chez un prestataire qui n'a pas de partenariat avec ACTIVA ASSURANCES CAMEROUN et qui n'a pas été résilié ou suspendu pour faute ou mauvaises pratiques. +- Délai maximum de remboursement en cas de paiement direct là où il n y a pas de partenariat et après réception de tous les documents requis : 2 jours +- Gestion commune avec l'employeur des cas de fraudes +- Les frais funéraires en cas de décès d'un membre assuré ou son bénéficiaire sont payables endeans 24 heures suivant la réception de l'avis de décès à l'Employeur ou à la personne qu'il peut désigner. +- La liste du personnel ainsi que les rapports de consommations médicales seront fournis mensuellement. +- En cas de dépassement des limites de l'assuré au cours de la période d'assurance, ACTIVA ASSURANCES CAMEROUN peut le couvrir sans prime supplémentaire si le taux de sinistralité du groupe est inférieur à 60%."); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("4.1. B. REMBOURSEMENT DES SOINS"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("Aucun acte médical, appareil, opération ou hospitalisation, n'est pris en charge s'il n'a été ordonné par une personne titulaire d'un diplôme de médecin, chirurgien ou chirurgien - dentiste. +Aucun acte n'est pris en charge s'il n'est exécuté par une personne qualifiée et dans un établissement officiellement autorisé par le Ministère de la santé qui, sauf cas de force majeure, doit être conventionné par l'Assureur."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("Le système de règlement des factures des prestations est en principe le Tiers payant par lequel le bénéficiaire de l'assurance maladie ne paie que le ticket modérateur convenu et le prestataire des soins se fait payer le solde de sa facture par l'Assureur."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("Le payement direct qui consiste à ce que l'assuré paie la totalité de la facture des prestations médicales et se fait rembourser chez l'Assureur n'est utilisé qu'à titre exceptionnel."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("A cet effet, le prestataire ou l'assuré le cas échéant, devra remettre à l'Assureur les notes d'honoraires ou de frais et les ordonnances acquittées, datées et mentionnant les noms et prénoms de l'Assuré qu'elles concernent."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("Les notes doivent indiquer la nature et la date des soins donnés en distinguant le coût de chacun des actes pratiqués."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("Les ordonnances doivent porter lisiblement les noms et prénoms de l'assuré et s'accompagner des justificatifs de payement des produits pharmaceutiques."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("4.1. C.ETENDUE DE LA GARANTIE MALADIE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("La garantie englobe la personne assurée elle-même, son conjoint ainsi que leurs enfants légalement à charge de moins de 21 ans ou de moins de 25 ans s'ils sont encore étudiants."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $text = convertirc("Cette couverture est également étendue au personnel qui tomberait malade à l'étranger étant en mission de travail ou en congé annuel reconnu par le contractant."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $text = convertirc("Dans ce dernier cas, le remboursement se fera sur base du tarif de l'Hôpital privé du CAMEROUN pour les adhérents de la première catégorie ou de l'Hôpital Public de référence du CAMEROUN pour les adhérents des autres catégories après déduction du ticket modérateur mentionné dans le tableau des prestations et plafonds."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->AddPage(); + + // $pdf->Ln(2); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("4.1. D.PRESTATIONS ET TAUX GARANTIS"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("Les prestations et les taux garantis sont décrits, selon la catégorie, dans le tableaux ci-dessous :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(100,$ht,convertirc("Type de Prestataire"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Taux Garantie(%)"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Ticket Modérateur(%)"),1,1,'C',false); + + $opt = "0"; + $idCollege = "0"; + $codeLienParente = "0"; + $ref = "0"; + $refNew = "-1"; + + + foreach ($tableaupretationcps as $tableaupretationcp) + { + if($opt!=$tableaupretationcp['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(180,$ht,convertirc("Option ".$tableaupretationcp['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $opt = $tableaupretationcp['numeroOptionTarif']; + } + + if($refNew!=$ref) + { + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(180,$ht,convertirc($tableaupretationcp['libelleAffichage']),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + $idCollege = $tableaupretationcp['idCollege']; + $codeLienParente = $tableaupretationcp['codeLienParente']; + $refNew=$tableaupretationcp['idCollege'] . $tableaupretationcp['codeLienParente']; + } + + $pdf->Cell(100,$ht,convertirc($tableaupretationcp['reseausoin']),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("100"-$tableaupretationcp['tm']),1,0,'C',false); + $pdf->Cell(40,$ht,$tableaupretationcp['tm'],1,1,'C',false); + + $opt = $tableaupretationcp['numeroOptionTarif']; + $idCollege = $tableaupretationcp['idCollege']; + $codeLienParente = $tableaupretationcp['codeLienParente']; + $ref=$tableaupretationcp['idCollege'] . $tableaupretationcp['codeLienParente']; + } + + $pdf->AddPage(); + // $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("PLAFONDS ANNUELS PAR FAMILLE"),0,1,'L',false); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(2); + + $pdf->Cell(100,$ht,convertirc("Garantie"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Plafond"),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc("Par Bén."),1,1,'C',false); + + $opt = "0"; + $idCollege = "0"; + $codeLienParente = "0"; + $ref = "0"; + $refNew = "-1"; + + foreach ($garantiescollegecps as $garantiescollegecp) + { + if($opt!=$garantiescollegecp['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(160,$ht,convertirc("Option ".$garantiescollegecp['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $opt = $garantiescollegecp['numeroOptionTarif']; + } + + if($refNew!=$garantiescollegecp['idCollege'] . $garantiescollegecp['codeLienParente']) + { + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(160,$ht,convertirc($garantiescollegecp['libelleAffichage'] . " => Plafofond individuel => " . format_N($garantiescollegecp['plafondBeneficiaire'])),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $idCollege = $garantiescollegecp['idCollege']; + $codeLienParente = $garantiescollegecp['codeLienParente']; + $refNew=$garantiescollegecp['idCollege'] . $garantiescollegecp['codeLienParente']; + } + + $pdf->Cell(100,$ht,convertirc($garantiescollegecp['garantie']),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($garantiescollegecp['plafond']),1,0,'C',false); + + $champApplication = ($garantiescollegecp['champApplication']=="1"); + + if($champApplication == TRUE) + $check = "4"; + else + $check = ""; + + $pdf->SetFont('ZapfDingbats','', 9); + $pdf->Cell(20, $ht, $check,1,1,'C',false); + $pdf->SetFont('Arial','', 9); + + $opt = $garantiescollegecp['numeroOptionTarif']; + $idCollege = $garantiescollegecp['idCollege']; + $ref=$garantiescollegecp['idCollege'] . $garantiescollegecp['codeLienParente']; + } + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("4.2. CESSATION DES GARANTIES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Les garanties cessent collectivement le jour de la résiliation du contrat ou de l’echeance de celui-ci et individuellement, le jour où la personne assurée atteint la limite de couverture, quitte le service du Contractant, ou décède."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + $text = convertirc("En cas de fraude avérée, l'Assureur se réserve le droit de radier l'assuré concerné. L'ensemble des garanties offertes à la personne Assurée doivent être annulées à partir de la date où nous avons eu connaissance de la fraude. Les primes payées ne sont pas remboursables et le Membre ne sera plus admissible comme personne assurée pour les périodes futures."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(5); + + // $pdf->AddPage(); + + $pdf->Cell(0,$ht,convertirc("4.3. SUSPENSION DES GARANTIES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Les garanties sont suspendues collectivement si les primes ne sont pas payées dans les TRENTE (30) jours à partir de la prise d'effet du contrat et individuellement si les primes ne sont pas payées immédiatement après l'adhésion de l'assuré."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("Les garanties reprendront effet immédiatement après le paiement de la totalité des primes en souffrance au moment de la suspension."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + + $pdf->Cell(0,$ht,convertirc("Article 5 : RENOUVELEMENT ET CLAUSE D'AJUSTEMENT"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Un mois avant l'échéance, un avenant provisionnel de renouvellement sera envoyé à l’assuré pour le règlement d'un acompte sur le renouvellement."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("La prime définie ci-dessus fera l'objet dans les conditions ci-après d'un ajustement en fonction des résultats de Sinistres sur primes nettes(déduction faite des taxes et commissions des intermédiaires) après la clôture de chaque exercice."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $text = convertirc("Pour associer l’assuré à l'évolution des consommations, un rapport d’utilisation trimestriel lui sera régulièrement transmis."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 6: EXCLUSIONS GENERALES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("- Traitement cosmétique et chirurgie esthétique +- Blessures dues à la participation aux jeux et activités dangereuses +- Blessures dues à la participation aux greves et émeutes +- Traitement de fécondité à savoir les frais de traitement liés à la stérilité et à l'impuissance +- Traitement prophylactique, les compléments alimentaires +- Cardiopathie ischemique +- Automutilation intentionnelle,suicide ou influence de l'alcool ou de la drogue +- Cancers de la peau,cancers in situ et mélanomes in situ (sauf les melanones malins) +- Les voyages en avion, sauf si le Membre (ayant payé le billet) voyage dans un avion conçu pour transporter des passagers +- Coût d'appareils auditifs, à moins qu’il résulte d’un accident +- Dépression nerveuse, psychonévrose, à moins qu'il ne résulte d'un accident +- Frais recouvrables en vertu de la Loi sur l’Indemnisation des Accidents du Travail ou les services publics de santé, y compris les régimes d’indemnisation de l'INSS ou tout autre régime sauf sur demande préalable de l’assuré et moyennant une prime correspondante"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 7 : DISPOSITIONS FINALES"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Lors de l'exécution des actes, examens ou traitements des assurés, le professionnel de santé ou l'établissement de soins est seul et unique responsable des complications, incidents ou accidents pouvant survenir dans la pratique de l'art médical."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $text = convertirc("En aucun cas, la responsabilité de l'Assureur ne pourra être invoquée pour des faits relevant de la responsabilité du professionnel de santé ou de l'établissement de soins."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $text = convertirc("Le contrat sera établi en deux (2) exemplaires et prend effet sous réserve des dispositions de l'Article II des CONDITIONS PARTICULIERES, le ".$entetecp['dateEffet']); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + // DEBUT TEXTE LIBRE + if ($entetecp['texteCp']>" ") + { + $pdf->AddPage(); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("ANNEXES AUX CONDITIONS PARTICULIERES"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc($entetecp['texteCp']); + + $pdf->MultiCell(0, $ht, $text); + } + // FIN TEXTE LIBRE + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Fait à ".$_SESSION['villeSociete'].", le ".$entetecp['dateJour']),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("POUR ACTIVA ASSURANCES CAMEROUN"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("POUR L’ASSURE"),0,1,'R',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("LE PRODUCTEUR"),0,1,'L',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("LA DIRECTION"),0,1,'L',false); + + $fichier="Temp/TMP_devis"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Devisstandardeng.php b/Societes/ric/Tarifs/Controleur/Devisstandardeng.php new file mode 100755 index 00000000..a0257246 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Devisstandardeng.php @@ -0,0 +1,681 @@ +police_societe = new Police_d_sodciete(); + + $entetecp = $this->police->getEnteteCP($idPolice); + $collegecps = $this->police_societe->getCollegesCpLienParente($idPolice); + $collegecp2s = $this->police_societe->getCollegesCpLienParente($idPolice); + $garantiescollegecps = $this->police_societe->getGarantiesCollegesCpLienParente($idPolice); + $tableaupretationcps = $this->police_societe->gettableauPrestationsCpLienParente($idPolice); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=10; + + $pdf->SetMargins(10, 10, 10) ; + + $pdf->SetFont('Arial','B', 15); + + $pdf->SetY(40); + + $pdf->SetFillColor(135,206,250); // bleu + + $pdf->Cell(0,$ht,convertirc("ACTIVA SANTE PROPOSAL – HEALTH INSURANCE"),1,1,'C',true); + + $pdf->SetFont(''); + + $pdf->Ln(15); + + $pdf->Cell(45,$ht,convertirc("No Quotation"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['numeroPolice']),0,1,'L',false); + + $pdf->Cell(45,$ht,convertirc("CLIENT"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['nomClient']),0,1,'L',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Cell(45,$ht,convertirc("Headquarter"),0,0,'L',false); + $pdf->Cell(0,$ht,convertirc(": ".$entetecp['adresseGeo']),0,1,'L',false); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("As Insured"),0,0,'C',false); + + $pdf->SetFont('Arial','', 10); + + $pdf->Ln(15); + + $pdf->Cell(0,$ht,convertirc("Near "),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','B', 15); + $pdf->Cell(0,$ht,convertirc($entetecp['nomSociete']),0,1,'C',false); + + + $pdf->Ln(15); + + $pdf->SetFont('Arial','', 10); + $pdf->Cell(0,$ht,convertirc("The future contract will cover the following guarantees :"),0,1,'C',false); + + $pdf->Ln(15); + + $pdf->SetFont('Arial','B', 13); + $pdf->Cell(0,$ht,convertirc("DISEASE-HOSPITALIZATION-MATERNITY-OPHTHALOMOLOGY-DENTAL"),0,1,'C',false); + + + $pdf->AddPage(); + $ht=6; + + $pdf->SetFont('Arial','B', 15); + $pdf->Cell(0,$ht,convertirc("PARTICULAR DISPOSITIONS"),0,1,'C',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc($entetecp['nomClient']),0,1,'L',false); + + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Declares to subscribe to the general terms and conditions and special provisions of the Group Heath Insurance Agreement and the following particulars with ".$entetecp['nomSociete']." for the persons to be insured, for the guarantees and for the following contribution :"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 1 : PEOPLE TO BE ASSURED"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Staff members of the insured person over the age of 18 and under 70 at the time of entry into the insurance according to the following breakdown:"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','B', 10); + + /* + $pdf->Cell(30,$ht,convertirc("Category"),1,0,'C',false); + $pdf->Cell(25,$ht,convertirc("Nb members"),1,0,'C',false); + $pdf->Cell(25,$ht,convertirc("Nb Dep"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Premium member"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Premium Dep"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Tot premium"),1,1,'C',false); + */ + + $pdf->Cell(60,$ht,convertirc("Link"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc(_("PRIME")),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Pop"),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc(_("Prime Tot")),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + + $oldnumeroOptionTarif = "0"; + + $nbPersonne = "0"; + $nbPersonneCollege = "0"; + $nbPersonneOption = "0"; + + $primeHtOption = "0"; + $primeHtCollee = "0"; + + $opt = "0"; + // $idCollege = "0"; + $oldidCollege = "0"; + $primeHtLienParenteTotal = "0"; + $primeHtLienParenteCollege = "0"; + $idCollegeNew = "0"; + + $accessoireTotal = "0"; + $primeHtTotal = "0"; + $taxeTotal = "0"; + $primeTtcTotal = "0"; + + foreach ($collegecps as $collegecp) + { + $numeroOptionTarif = $collegecp['numeroOptionTarif']; + $idCollege = $collegecp['idCollege']; + + if ($oldnumeroOptionTarif<>$numeroOptionTarif && $oldnumeroOptionTarif <> "0") + { + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(90,$ht,convertirc(_("Totaux Collège")),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbPersonneCollege),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeHtCollege-$accessoireCollege),1,1,'C',false); + + $pdf->Cell(60,$ht,convertirc(_("Accessoires"). " : ".format_N($accessoireCollege)),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc(_("Taxes") . " : ".format_N($taxeCollege)),1,0,'C',false); + $pdf->Cell(60,$ht,convertirc(_("Ttc"). " : ".format_N($primeTtcCollege)),1,1,'C',false); + + $pdf->Cell(90,$ht,convertirc(_("Totaux") . " : Option ".$oldnumeroOptionTarif),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbPersonneOption),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeHtOption-$accessoireOption),1,1,'C',false); + + $pdf->Cell(60,$ht,convertirc(_("Accessoires"). " : ".format_N($accessoireOption)),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc(_("Taxes") . " : ".format_N($taxeOption)),1,0,'C',false); + $pdf->Cell(60,$ht,convertirc(_("Ttc"). " : ".format_N($primeTtcOption)),1,1,'C',false); + + $pdf->Ln(5); + + $oldidCollege = "0"; + } + + if ($oldidCollege<>$idCollege && $oldidCollege <> "0") + { + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(90,$ht,convertirc("Totaux Collège"),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbPersonneCollege),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeHtCollege-$accessoireCollege),1,1,'C',false); + + $pdf->Cell(60,$ht,convertirc("Accessoires : ".format_N($accessoireCollege)),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Taxes : ".format_N($taxeCollege)),1,0,'C',false); + $pdf->Cell(60,$ht,convertirc("Ttc : ".format_N($primeTtcCollege)),1,1,'C',false); + } + + if($opt!=$collegecp['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(150,$ht,convertirc("Option ".$collegecp['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + } + + if($idCollegeNew!=$collegecp['idCollege']) + { + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(150,$ht,convertirc($collegecp['produit']." => ".$collegecp['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $idCollegeNew = $collegecp['idCollege']; + } + + $pdf->SetFont('Arial','', 9); + + $pdf->Cell(60,$ht,convertirc($collegecp['lienparenteEng']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeHt']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['nbPersonne']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['primeHtLienParente']),1,1,'C',false); + + $primeHtOption = $collegecp['primeHtOption']; + $nbPersonneOption = $collegecp['nbPersonneOption']; + $accessoireOption = $collegecp['accessoireOption']; + $primeHtOption = $collegecp['primeHtOption']; + $taxeOption = $collegecp['taxeOption']; + $primeTtcOption = $collegecp['primeTtcOption']; + + $nbPersonneCollege = $collegecp['nbPersonneCollege']; + // $primeHtCollege = $collegecp['primeHtLienParente']; + $accessoireCollege = $collegecp['accessoireCollege']; + $primeHtCollege = $collegecp['primeHtCollege']; + $taxeCollege = $collegecp['taxeCollege']; + $primeTtcCollege = $collegecp['primeTtcCollege']; + + // $nbPersonne += $collegecp['nbPersonne']; + // $primeHtLienParenteTotal += $collegecp['primeHtLienParente']; + + $oldnumeroOptionTarif = $numeroOptionTarif; + $opt = $collegecp['numeroOptionTarif']; + $oldidCollege = $idCollege; + } + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(90,$ht,convertirc("Totaux Collège"),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbPersonneCollege),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeHtCollege-$accessoireCollege),1,1,'C',false); + + $pdf->Cell(60,$ht,convertirc("Accessoires : ".format_N($accessoireCollege)),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Taxes : ".format_N($taxeCollege)),1,0,'C',false); + $pdf->Cell(60,$ht,convertirc("Ttc : ".format_N($primeTtcCollege)),1,1,'C',false); + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(90,$ht,convertirc("Totaux : Option ".$numeroOptionTarif),1,0,'C',false); + + $pdf->Cell(30,$ht,format_N($nbPersonneOption),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($primeHtOption-$accessoireOption),1,1,'C',false); + + $pdf->Cell(60,$ht,convertirc("Accessoires : ".format_N($accessoireOption)),1,0,'C',false); + $pdf->Cell(30,$ht,convertirc("Taxes : ".format_N($taxeOption)),1,0,'C',false); + $pdf->Cell(60,$ht,convertirc("Ttc : ".format_N($primeTtcOption)),1,1,'C',false); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','', 9); + $text = convertirc("Outside this age group the cover is the subject of a special agreement between the subscriber and the Insurer."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $text = convertirc("From the age of 60, a medical examination is compulsory for individual insured persons."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 2: TAKING EFFECT AND MODE OF OPERATION OF ACTIVA SANTE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Subject to acceptance by the Insurer, the benefits take effect for each person to be insured: +- From the effective date of the contract for persons to be insured who are already in the Contractor's service. +- Directly after the date of their admission to the Contractor's Department for persons hired after the effective date of the contract. The Contractor's Human Resources Department must be in close collaboration with BICOR LIFE AND CAPITALIZATION. A prorated premium is payable immediately to any person who becomes a Member during the period of coverage. +- Thus, each insured will have a health insurance card that he will present to health care providers and they will verify from his fingerprints his identity and coverage limit via the application of ACTIVA SANTE. This will also allow the insured to see in real time where he is with his limit of coverage."); + $pdf->MultiCell(0, $ht, $text); + + $text = convertirc("In order to provide better support, each member of the contract must complete a declaration form within one month of receiving the form."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + // $pdf->Ln(5); + $pdf->AddPage(); + + $pdf->Cell(0,$ht,convertirc("Article 3: DURATION OF THE FUTURE CONTRACT"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("The contract will be signed for a period of ".$entetecp['dureePeriodiciteEng']." from ".$entetecp['dateEffet']." to ".$entetecp['dateEcheance'].". +It will be tacitly renewable under the conditions set out in article 6 of these special conditions, unless terminated with one month’s notice before its expiry. +No obligation to renew the contract is incubent upon the parties. ACTIVA ASSURANCES CAMEROUN reserves the right to refuse or restrict the terms of coverage for all Members or any Member by granting the insured person a notice period of one month in accordance with the conditions set out in article 6 of these special conditions."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("Article 4 : BENEFITS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("4.1.A. ADVANTAGES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("The health insurance offers the payment of expenses for health care as a result of accident or maternity sickness. + +Thus, the following medical benefits are covered: +-outpatient, hospitalization, maternity, ophthalmology, dentistry and chronic diseases. + +-conditions of prematurity are covered + +-MRI and other special tests are all covered + +-Indirect payment: the beneficiary pays his contribution while obtaining the medical service and the provider requests refund or difference to ACTIVA ASSURANCES CAMEROUN (applicable for options with co-payment) + +- All medical treatments and medications prescribed by a qualified and registered doctor and which has been authorized by the Ministry of Health. Our medical plan provides access to specialties and generic drugs. +However, specialties must be prescribed by a medical specialist, except in case of emergency by prior authorization. + +-Coverage guarantees concern the insured staff, spouse and their dependent children up to age 21 and extended to 25 if the child is still a student upon presentation of a certificate of education and an extract from the birth certificate (or equivalent for adopted children). + +-Ambulance costs for emergency cases from one hospital to another and from an accident site to the hospital in the event of an accident on CAMEORUN territory. The ambulance service will apply to sick insured persons who are to be treated in a designated hospital, from an area where necessary equipment does not exist, but without exceeding Bif 500,000 during the entire coverage period (and within the annual limit of the hospitalized) + +-Treatments in all partner hospitals in East African countries. The insured will go to an appropriate institution according to the partnership of the insurer. He will have to notify the insurer at least 3 days before to allow him to notify the insured persons designated by the insured (only for those who have extraterritorial coverage). + +-Treatments in India if necessary, based on a medical report from a specialist doctor attestating tha the same services can not be offerered in East African countries with the prior approval of ACTIVA ASSURANCES CAMEROUN. + +-The extension in East African countries is covered within the limit of coverage for dependents of the insured. + +-The refund will be based on the most expensive rate depending on the category in which you are insured locally. + +-Accommodation of a parent for children under 12 years old in the hospital. This will only apply to coverage abroad + +-The single room is covered + +-Automatic addition of a newborn and/or spouse without additional premium except card fees + +-Automatic addition of a new member with a prorated premium + +-Automatic deletion for the agent leaving the group and refund of 75% of the unutilized premium calculated + +-pro rata, if no medical service has been paid for him and his dependents + +-The issue of health insurance cards within 7 days of notification and/or proof of payment. + +-Health insurance cards carry a telephone number which the patient can call if necessary. There will also be a designated claims manager specifically in charge of ".$entetecp['nomClient'].". + +-The list of all ACTIVA ASSURANCES CAMEROUN partners is attached to this technical offer + +-The refund will be based on the most expensive rate depending on the category in which you are insured locally. +For expenses paid to a provider who has no partnership with ACTIVA ASSURANCES CAMEROUN and which has not been terminated or suspended for fault or bad practice. + +-Maximum repayment period in case of direct payment where there is no partnership and after receipt of all required documents: 2 days + +-Joint management with the employer of cases of fraud + +-Funeral expenses in the event of the death on an insured member or his beneficiary are payable within 24 hours of receipt of the death notice to the employer or to the person he may designate. + +-The list of staff and reports of medical consumption will be provided monthly. + +-If the limit of the insured person is exceeded during the insurance period, ACTIVA ASSURANCES CAMEROUN may cover him without additional premium if the loss ratio of the ".$entetecp['nomClient']." Group is less than 60%."); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("4.1. B. REIMBURSEMENT OF CARE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("No medical act, device, operation or hospitalization is supported if it has not been ordered by a person holding a doctor’s degree, surgeon or dental surgeon. + +No act is taken in charge if it is not performed by a qualified person and in an establishment officially authorized by the Ministry of Health which, except in cases of major force, must be agreed by the insurer. + +The system of payment of benefits invoices is in principle the Third party paying by which the beneficiary of the insurance sickness only pays the agreed co-payment and the care provider is paid the balance of his bill by the insurer. + +The direct payment which consists in the fact that the insured person pays the entire bill for the medical services and is reimbursed by the insured is only used in exceptional circumstances. + +For this purpose, the service provider or the insured if applicable, must submit to the insurer the notes of fees or expenses and the orders paid, dated and mentioning the names and forenames of the insured concerned. The notes must indicate the nature and the date of the care given by distinguishing the cost of each of the acts performed. + +Prescriptions must clearly bear the name and surname of the insured and be accompanied by proof of payment of pharmaceutical products."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("4.1. C.EXTENT OF THE DISEASE GUARANTEE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("The coverage includes the insured person himself, his spouse and their legally dependent children under 21 or under 25 if they are still students. + +This coverage is also extended to staff who fall ill while on a work mission or on annual leave recognized by the contractor. + +In the latter case, the reimbursement will be made on the basis of the KIRA Hospital rate for members of the first category or the Reference Public Hospital for members of the other categories after deduction of the co-payment mentioned in the table of benefits and limits."); + $pdf->MultiCell(0, $ht, $text); + + + $pdf->AddPage(); + + // $pdf->Ln(2); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("4.1. D.BENEFITS AND GUARANTEED RATE"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $pdf->Ln(2); + + $text = convertirc("Benefits and guaranteed rates are described, by category, in the tables below :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(100,$ht,convertirc("Type of provider"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Rate guarantee(%)"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Co-payment(%)"),1,1,'C',false); + + $opt = "0"; + $idCollege = "0"; + $codeLienParente = "0"; + $ref = "0"; + $refNew = "-1"; + + + foreach ($tableaupretationcps as $tableaupretationcp) + { + if($opt!=$tableaupretationcp['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(180,$ht,convertirc("Option ".$tableaupretationcp['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $opt = $tableaupretationcp['numeroOptionTarif']; + } + + if($refNew!=$ref) + { + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(180,$ht,convertirc($tableaupretationcp['libelleAffichageEng']),1,1,'C',false); + + $pdf->SetFont('Arial','', 9); + $idCollege = $tableaupretationcp['idCollege']; + $codeLienParente = $tableaupretationcp['codeLienParente']; + $refNew=$tableaupretationcp['idCollege'] . $tableaupretationcp['codeLienParente']; + } + + $pdf->Cell(100,$ht,convertirc($tableaupretationcp['reseausoin']),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("100"-$tableaupretationcp['tm']),1,0,'C',false); + $pdf->Cell(40,$ht,$tableaupretationcp['tm'],1,1,'C',false); + + $opt = $tableaupretationcp['numeroOptionTarif']; + $idCollege = $tableaupretationcp['idCollege']; + $codeLienParente = $tableaupretationcp['codeLienParente']; + $ref=$tableaupretationcp['idCollege'] . $tableaupretationcp['codeLienParente']; + } + + + $pdf->AddPage(); + // $pdf->Ln(5); + + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(0,$ht,convertirc("LIMITS PER FAMILY OR PER MEMBER"),0,1,'L',false); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Ln(2); + + $pdf->Cell(100,$ht,convertirc("Garantee"),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Limit"),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc("Per Ben."),1,1,'C',false); + + $opt = "0"; + $idCollege = "0"; + $codeLienParente = "0"; + $ref = "0"; + $refNew = "-1"; + + foreach ($garantiescollegecps as $garantiescollegecp) + { + if($opt!=$garantiescollegecp['numeroOptionTarif']) + { + $pdf->SetFont('Arial','BU', 10); + $pdf->Cell(160,$ht,convertirc("Option ".$garantiescollegecp['numeroOptionTarif']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $opt = $garantiescollegecp['numeroOptionTarif']; + } + + if($refNew!=$garantiescollegecp['idCollege'] . $garantiescollegecp['codeLienParente']) + { + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(160,$ht,convertirc($garantiescollegecp['libelleAffichageEng'] . " => Plafofond individuel => " . format_N($garantiescollegecp['plafondBeneficiaire'])),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $idCollege = $garantiescollegecp['idCollege']; + $codeLienParente = $garantiescollegecp['codeLienParente']; + $refNew=$garantiescollegecp['idCollege'] . $garantiescollegecp['codeLienParente']; + } + + $pdf->Cell(100,$ht,convertirc($garantiescollegecp['garantie']),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($garantiescollegecp['plafond']),1,0,'C',false); + + $champApplication = ($garantiescollegecp['champApplication']=="1"); + + if($champApplication == TRUE) + $check = "4"; + else + $check = ""; + + $pdf->SetFont('ZapfDingbats','', 9); + $pdf->Cell(20, $ht, $check,1,1,'C',false); + $pdf->SetFont('Arial','', 9); + + $opt = $garantiescollegecp['numeroOptionTarif']; + $idCollege = $garantiescollegecp['idCollege']; + $ref=$garantiescollegecp['idCollege'] . $garantiescollegecp['codeLienParente']; + } + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("4.2. TERMINATION OF GUARANTEES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Collateral ceases collectively on the day of termination of the contract or on its due date and individually, on the day the insured person reaches the limit of coverage, leaves the contractor’s service, or dies. +In case of proven fraud, the insurer reserves the right to cancel the insured concerned. All the benefits offered to the insured person must be canceled from the date we became aware of the fraud. Premiums paid are not refundable and the member will no longer be eligible as an insured person for future periods."); + $pdf->MultiCell(0, $ht, $text); + + + // $pdf->AddPage(); + $pdf->Ln(10); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("4.3. SUSPENSION OF GUARANTEES"),0,1,'L',false); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("Collateral is suspended collectively if the premiums are not paid within THIRTY (30) days of the effective date of the policy and individually if the premiums are not paid immediately after the insured’s membership."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $text = convertirc("Guarantees will resume immediately upon payment of all outstanding premiums at the time of suspens."); + $pdf->MultiCell(0, $ht, $text); + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 5 : CONTRIBUTIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("The guarantees defined above will be granted with :"); + + $pdf->MultiCell(0, $ht, $text); + + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(50,$ht,convertirc("Insured type"),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc("Nb"),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("Basic premium"),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("Tot Premium"),1,1,'C',false); + + $pdf->AddPage(); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 6: RENEWAL AND PREMIUM ADJUSTEMENT CLAUSE"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("One month before the expiry, a provisional renewal rider will be sent to the insured for payment of a deposit on the renewal. +The premium defined above will be adjusted in accordance with the results of net premium claims (net of taxes and commissions of intermediaries) after the end of each financial year. +To associate the insured with changes in consumptions, quarterly usage report will be regularly transmitted. "); + $pdf->MultiCell(0, $ht, $text); + + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + $pdf->Cell(0,$ht,convertirc("Article 7: GENERAL EXCLUSIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("- Cosmetic treatment and cosmetic surgery +- Injuries due to participation in games and dangerous activities +- Injuries due to participation in strikes and riots +- Fertility treatment, namely treatment costs related to infertility and impotence +- Prophylactic treatment, dietary supplements +-Ischemic heart disease +- Intentional self-harm, suicide or the influence of alcohol or drugs +- Skin cancers, in situ cancers and melanomas in situ (except malignant melanomas) +- Air travel, unless the Member (having paid for the ticket) travels in an airplane designed to carry passengers +- Cost of hearing aids, unless resulting from an accident +- Nervous breakdown, psychoneurosis, unless it results from an accident"); + $pdf->MultiCell(0, $ht, $text); + + $pdf->Ln(5); + + $pdf->SetFont('Arial','B', 10); + + $pdf->Cell(0,$ht,convertirc("Article 8: FINAL PROVISIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc("When performing the acts, examinations or treatments of the insured, the health professional or the care establishment is the sole and sole responsible for complications, incidents or accidents that may occur in the practice of the medical art. +In no event shall the Insurer's liability be invoked for matters that are the responsibility of the health professional or the health care facility. +The contract will be established in two (2) copies and takes effect subject to the provisions of Article II of the PARTICULAR CONDITIONS, the ".$entetecp['dateEffet']); + $pdf->MultiCell(0, $ht, $text); + + // DEBUT TEXTE LIBRE + if ($entetecp['texteCp']>" ") + { + $pdf->AddPage(); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("ANNEXES TO THE PARTICULAR CONDITIONS"),0,1,'L',false); + + $pdf->Ln(2); + + $pdf->SetFont('Arial','', 9); + + $text = convertirc($entetecp['texteCp']); + + $pdf->MultiCell(0, $ht, $text); + } + // FIN TEXTE LIBRE + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Done at ".$_SESSION['villeSociete']." ".$entetecp['dateJour']."."),0,1,'C',false); + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("FOR ACTIVA ASSURANCES CAMEROUN"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("FOR INSURED"),0,1,'R',false); + + $pdf->Ln(20); + + $pdf->Cell(0,$ht,convertirc("UNDERWRITTER"),0,1,'L',false); + + $pdf->Ln(20); + + $pdf->Cell(0,$ht,convertirc("EXECUTIVE MANAGEMENT"),0,1,'L',false); + + $fichier="Temp/TMP_proposal"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Editioncarteassure.php b/Societes/ric/Tarifs/Controleur/Editioncarteassure.php new file mode 100755 index 00000000..879d0022 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Editioncarteassure.php @@ -0,0 +1,178 @@ + rendre la carte personalisable par societeuser +// Fond blanc +$pdf->SetFillColor(255, 255, 255); +$pdf->Rect(0, 0, 85.6, 54, 'F'); + +// LOGO SOCIÉTÉ en haut à gauche +if (file_exists($logoSocietePath)) { + $pdf->Image($logoSocietePath, 3, 3, 15); +} + +$logoGarantPath = (!is_null($assure["logo_garant"])) ? $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/'.$assure["logo_garant"] : $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; + +if (!is_file($logoGarantPath)) { + $logoGarantPath = $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; +} + +// LOGO GARANT en haut à droite +if (is_file($logoGarantPath)) { + $pdf->Image($logoGarantPath, 67, 1, 15); +} + +// EN-TÊTE : "CARTE D'ASSURANCE" +$pdf->SetFont('Arial', 'B', 8); +$pdf->SetTextColor(33, 46, 83); +$pdf->SetXY(0, 5); +$pdf->Cell(85.6, 4, mb_convert_encoding(_('CARTE SANTÉ'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +$pdf->SetTextColor(0); + +// Informations de contact de la société +$pdf->SetFont('Arial', '', 5); +$pdf->SetXY(0, 9); +$pdf->MultiCell(85.6, 3, mb_convert_encoding(_('Siège social').': '. $assure['adresseGeoSociete'].' ', "ISO-8859-1", "UTF-8"), 0, 'C'); + +$pdf->SetXY(0, 12); +$pdf->Cell(85.6, 3, mb_convert_encoding(_('Tél.').': '.$assure['telephoneSociete'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); + +// Ligne séparatrice +$pdf->Line(5, 15, 80, 15); + +// Section "Bénéficiaire" +$pdf->SetFont('Arial', 'BUI', 7); +//$pdf->SetXY(5, 17); +$pdf->SetXY(13, 16); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Bénéficiaire'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Matricule - en gras et rouge +$pdf->SetFont('Arial', '', 6); +// $pdf->SetXY(5, 21); +$pdf->SetXY(5, 19); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(25, 3, ' : '.$assure['numeroBeneficiaire'], 0, 1); +$pdf->SetTextColor(0); + +// Nom +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 22); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(30, 3, ' : '.substr(mb_convert_encoding($assure['nomBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Prénoms +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 25); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(25, 3, ' : '.substr(mb_convert_encoding($assure['prenomsBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Né(e) le - si disponible +if (!empty($assure['dateNaissance'])) { + $pdf->SetFont('Arial', '', 6); + $pdf->SetXY(5, 28); + $pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Né(e) le'), "ISO-8859-1", "UTF-8"), 0, 0); + $pdf->SetFont('Arial', 'B', 6); + $pdf->Cell(25, 3, ' : '.dateLang($assure['dateNaissance'], $_SESSION['lang']), 0, 1); +} + +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 31); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Statut'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(28, 3, ' : '.substr(mb_convert_encoding($assure['lienparente'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +/* kane 17/02/2026 à 06h => recherche meilleure place QR code*/ +// ============ AJOUT DU QR CODE ============ +if (file_exists($qrCodePath)) { + $qrX = 5; // Position X (à droite) + $qrY = 34; // Position Y (en bas) + $qrSize = 18; // Taille du QR code (10mm) + + $pdf->Image($qrCodePath, $qrX, $qrY, $qrSize, $qrSize); + + unlink($qrCodePath); // ✅ Suppression immédiate après usage + + $this->carte->enregistrerqrcodeath($assure['idBeneficiaire'], $qrFile); +} +// ========================================== + +// Section "Assuré Principal" +$pdf->SetFont('Arial', 'BUI', 7); +$pdf->SetXY(28, 37); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Assuré Principal'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Numéro assuré - en gras et rouge +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(25, 41); +$pdf->Cell(10, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(0, 3, ' : '.$assure['numeroAdherent'], 0, 1); +$pdf->SetTextColor(0); + +// Nom et Prénoms assuré +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(25, 44); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(0, 3, substr(mb_convert_encoding($assure['adherent'], "ISO-8859-1", "UTF-8"), 0, 15), 0, 1); + +// Photo de l'assuré (positionnée à droite) - taille réduite +$photo=$assure['lienPhoto']; +$faceRegistered=$assure['faceRegistered']; +$photoPath = ""; +$photoX = 57; +$photoY = 17; + +// Vérifier si l'URL est accessible +$headers = null; +$temp = ""; +if($photo>" " && $faceRegistered=="1") +{ + $photoPath = $_SESSION['dossierPhoto_C'].$_SESSION['dossierSociete'].'/Photos/'.$assure['lienPhoto']; + $headers = @get_headers($photoPath); +} + +if ($headers) { + $data = decryptImage($photoPath); + $data = base64_decode($data); + $temp = $_SESSION['lienPhotoFace'].'tmp_'.uniqid().'.jpg'; + file_put_contents($temp, $data); + $pdf->Image($temp, $photoX, $photoY, 25, 25); // Réduction de 30x30 à 25x25 + unlink($temp); +} else { + // Cadre pour la photo si non disponible + $pdf->Rect($photoX, $photoY, 25, 25); + $pdf->SetFont('Arial', '', 4); + $pdf->SetXY($photoX, $photoY + 12); + $pdf->Cell(25, 3, mb_convert_encoding(_('Photo non disponible'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +} + +/* +var_dump( + array( + "faceRegistered" => $faceRegistered, + "photoPath" => $photoPath, + "temp" => $temp, + ) +); +echo "

      "; +*/ + +// Nom du souscripteur en bas +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetXY(0, 49); +$pdf->Cell(85.6, 3, mb_convert_encoding($assure['souscripteur'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Editioncarteassure_2026_02_16.php b/Societes/ric/Tarifs/Controleur/Editioncarteassure_2026_02_16.php new file mode 100755 index 00000000..dcd5192f --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Editioncarteassure_2026_02_16.php @@ -0,0 +1,141 @@ + rendre la carte personalisable par societeuser +// Fond blanc +$pdf->SetFillColor(255, 255, 255); + +$pdf->Rect(0, 0, 85.6, 54, 'F'); + +// LOGO SOCIÉTÉ en haut à gauche +if (file_exists($logoSocietePath)) { + $pdf->Image($logoSocietePath, 3, 3, 15); +} + +$logoGarantPath = (!is_null($assure["logo_garant"])) ? $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/'.$assure["logo_garant"] : ''; + +if (!is_file($logoGarantPath)) { + $logoGarantPath = $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; +} + +if (is_file($logoGarantPath)) { + $pdf->Image($logoGarantPath, 67, 1, 15); +} + +// EN-TÊTE : "CARTE D'ASSURANCE" +$pdf->SetFont('Arial', 'B', 8); +$pdf->SetTextColor(33, 46, 83); +$pdf->SetXY(0, 5); +// $pdf->Cell(85.6, 4, utf8_decode(_('CARTE SANTÉ')), 0, 1, 'C'); +$pdf->Cell(85.6, 4, mb_convert_encoding(_('CARTE SANTÉ'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +$pdf->SetTextColor(0); + +// Informations de contact de la société +$pdf->SetFont('Arial', '', 5); +$pdf->SetXY(0, 9); + +$pdf->MultiCell(85.6, 3, mb_convert_encoding(_('Siège social').': '. $assure['adresseGeoSociete'].' ', "ISO-8859-1", "UTF-8"), 0, 'C'); + +$pdf->SetXY(0, 12); +$pdf->Cell(85.6, 3, mb_convert_encoding(_('Tél.').': '.$assure['telephoneSociete'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); + +// Ligne séparatrice +$pdf->Line(5, 15, 80, 15); + +// Section "Bénéficiaire" +$pdf->SetFont('Arial', 'BUI', 7); +$pdf->SetXY(5, 17); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Bénéficiaire'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Matricule - en gras et rouge +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 21); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(25, 3, ' : '.$assure['numeroBeneficiaire'], 0, 1); +$pdf->SetTextColor(0); + +// Nom +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 24); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(30, 3, ' : '.substr(mb_convert_encoding($assure['nomBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Prénoms +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 27); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(25, 3, ' : '.substr(mb_convert_encoding($assure['prenomsBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Né(e) le - si disponible +if (!empty($assure['dateNaissance'])) { + $pdf->SetFont('Arial', '', 6); + $pdf->SetXY(5, 30); + $pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Né(e) le'), "ISO-8859-1", "UTF-8"), 0, 0); + $pdf->SetFont('Arial', 'B', 6); + $pdf->Cell(25, 3, ' : '.dateLang($assure['dateNaissance'], $_SESSION['lang']), 0, 1); +} + +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 33); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Statut'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(28, 3, ' : '.substr(mb_convert_encoding($assure['lienparente'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Section "Assuré Principal" +$pdf->SetFont('Arial', 'BUI', 7); +$pdf->SetXY(5, 38); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Assuré Principal'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Numéro assuré - en gras et rouge +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 42); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(25, 3, ' : '.$assure['numeroAdherent'], 0, 1); +$pdf->SetTextColor(0); + +// Nom et Prénoms assuré +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 45); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom & prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(15, 3, ' : '.substr(mb_convert_encoding($assure['adherent'], "ISO-8859-1", "UTF-8"), 0, 15), 0, 1); + +// Photo de l'assuré (positionnée à droite) - taille réduite +// $photoPath = $_SESSION['dossierPhoto_C'].$_SESSION['dossierSociete'].'/Photos/'.$assure['lienPhoto']; +$photo=$assure['lienPhoto']; +$faceRegistered=$assure['faceRegistered']; + +$photoPath = $_SESSION['lienPhotoFace'].$assure['lienPhoto']; +$photoX = 57; +$photoY = 17; + +if($faceRegistered=="1" && file_exists($photoPath)) +{ + $data = decryptImage($photoPath); + $data = base64_decode($data); + $temp = $_SESSION['lienPhotoFace'].'tmp_'.uniqid().'.jpg'; + file_put_contents($temp, $data); + $pdf->Image($temp, $photoX, $photoY, 25, 25); // Réduction de 30x30 à 25x25 + unlink($temp); +} else { + // Cadre pour la photo si non disponible + $pdf->Rect($photoX, $photoY, 25, 25); + $pdf->SetFont('Arial', '', 4); + $pdf->SetXY($photoX, $photoY + 12); + // $messagePhotoManquant=_('Photo non disponible'); + $messagePhotoManquant="X"; + $pdf->Cell(25, 3, mb_convert_encoding($messagePhotoManquant, "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +} + +// Nom du souscripteur en bas +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetXY(0, 49); +$pdf->Cell(85.6, 3, mb_convert_encoding($assure['souscripteur'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); diff --git a/Societes/ric/Tarifs/Controleur/Editioncarteassure_2026_02_17_06h.php b/Societes/ric/Tarifs/Controleur/Editioncarteassure_2026_02_17_06h.php new file mode 100755 index 00000000..30274f20 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Editioncarteassure_2026_02_17_06h.php @@ -0,0 +1,158 @@ + rendre la carte personalisable par societeuser +// Fond blanc +$pdf->SetFillColor(255, 255, 255); +$pdf->Rect(0, 0, 85.6, 54, 'F'); + +// LOGO SOCIÉTÉ en haut à gauche +if (file_exists($logoSocietePath)) { + $pdf->Image($logoSocietePath, 3, 3, 15); +} + +$logoGarantPath = (!is_null($assure["logo_garant"])) ? $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/'.$assure["logo_garant"] : $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; + +if (!is_file($logoGarantPath)) { + $logoGarantPath = $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; +} + +// LOGO GARANT en haut à droite +if (is_file($logoGarantPath)) { + $pdf->Image($logoGarantPath, 67, 1, 15); +} + +// EN-TÊTE : "CARTE D'ASSURANCE" +$pdf->SetFont('Arial', 'B', 8); +$pdf->SetTextColor(33, 46, 83); +$pdf->SetXY(0, 5); +$pdf->Cell(85.6, 4, mb_convert_encoding(_('CARTE SANTÉ'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +$pdf->SetTextColor(0); + +// Informations de contact de la société +$pdf->SetFont('Arial', '', 5); +$pdf->SetXY(0, 9); +$pdf->MultiCell(85.6, 3, mb_convert_encoding(_('Siège social').': '. $assure['adresseGeoSociete'].' ', "ISO-8859-1", "UTF-8"), 0, 'C'); + +$pdf->SetXY(0, 12); +$pdf->Cell(85.6, 3, mb_convert_encoding(_('Tél.').': '.$assure['telephoneSociete'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); + +// Ligne séparatrice +$pdf->Line(5, 15, 80, 15); + +// Section "Bénéficiaire" +$pdf->SetFont('Arial', 'BUI', 7); +$pdf->SetXY(5, 17); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Bénéficiaire'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Matricule - en gras et rouge +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 21); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(25, 3, ' : '.$assure['numeroBeneficiaire'], 0, 1); +$pdf->SetTextColor(0); + +// Nom +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 24); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(30, 3, ' : '.substr(mb_convert_encoding($assure['nomBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Prénoms +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 27); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(25, 3, ' : '.substr(mb_convert_encoding($assure['prenomsBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Né(e) le - si disponible +if (!empty($assure['dateNaissance'])) { + $pdf->SetFont('Arial', '', 6); + $pdf->SetXY(5, 30); + $pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Né(e) le'), "ISO-8859-1", "UTF-8"), 0, 0); + $pdf->SetFont('Arial', 'B', 6); + $pdf->Cell(25, 3, ' : '.dateLang($assure['dateNaissance'], $_SESSION['lang']), 0, 1); +} + +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 33); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Statut'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(28, 3, ' : '.substr(mb_convert_encoding($assure['lienparente'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Section "Assuré Principal" +$pdf->SetFont('Arial', 'BUI', 7); +$pdf->SetXY(5, 38); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Assuré Principal'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Numéro assuré - en gras et rouge +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 42); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(25, 3, ' : '.$assure['numeroAdherent'], 0, 1); +$pdf->SetTextColor(0); + +// Nom et Prénoms assuré +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 45); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom & prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(15, 3, ' : '.substr(mb_convert_encoding($assure['adherent'], "ISO-8859-1", "UTF-8"), 0, 15), 0, 1); + +// Photo de l'assuré (positionnée à droite) - taille réduite +$photoPath = $_SESSION['dossierPhoto_C'].$_SESSION['dossierSociete'].'/Photos/'.$assure['lienPhoto']; +$photoX = 57; +$photoY = 17; + +// Vérifier si l'URL est accessible +$headers = @get_headers($photoPath); + +if (!empty($assure['lienPhoto']) && $headers && strpos($headers[0], '200')) { + $pdf->Image($photoPath, $photoX, $photoY, 25, 25); +} else { + // Cadre pour la photo si non disponible + $pdf->Rect($photoX, $photoY, 25, 25); + $pdf->SetFont('Arial', '', 4); + $pdf->SetXY($photoX, $photoY + 12); + $pdf->Cell(25, 3, mb_convert_encoding(_('Photo non disponible'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +} + +// ============ AJOUT DU QR CODE ============ +// Position : en bas à droite de la carte +if (file_exists($qrCodePath)) { + $qrX = 60; // Position X (à droite) + $qrY = 43; // Position Y (en bas) + $qrSize = 10; // Taille du QR code (10mm) + + $pdf->Image($qrCodePath, $qrX, $qrY, $qrSize, $qrSize); + + /* + // Supprimer le fichier temporaire après utilisation + @unlink($qrCodePath); + */ + // Enregistrer le qrCodePath dans la BDD + // $this->carte->enregistrerqrcodeath($assure['idBeneficiaire'], $qrCodePath); + $this->carte->enregistrerqrcodeath($assure['idBeneficiaire'], $qrFile); +} +// ========================================== + +// Nom du souscripteur en bas +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetXY(0, 49); +$pdf->Cell(85.6, 3, mb_convert_encoding($assure['souscripteur'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Editioncarteassure_claude.php b/Societes/ric/Tarifs/Controleur/Editioncarteassure_claude.php new file mode 100755 index 00000000..4a63e10b --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Editioncarteassure_claude.php @@ -0,0 +1,162 @@ + rendre la carte personalisable par societeuser +// Fond blanc +$pdf->SetFillColor(255, 255, 255); +$pdf->Rect(0, 0, 85.6, 54, 'F'); + +// LOGO SOCIÉTÉ en haut à gauche +if (file_exists($logoSocietePath)) { + $pdf->Image($logoSocietePath, 3, 3, 15); +} + +$logoGarantPath = (!is_null($assure["logo_garant"])) ? $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/'.$assure["logo_garant"] : $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; + +if (!is_file($logoGarantPath)) { + $logoGarantPath = $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; +} + +// LOGO GARANT en haut à droite +if (is_file($logoGarantPath)) { + $pdf->Image($logoGarantPath, 67, 1, 15); +} + +// EN-TÊTE : "CARTE D'ASSURANCE" +$pdf->SetFont('Arial', 'B', 8); +$pdf->SetTextColor(33, 46, 83); +$pdf->SetXY(0, 5); +$pdf->Cell(85.6, 4, mb_convert_encoding(_('CARTE SANTÉ'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +$pdf->SetTextColor(0); + +// Informations de contact de la société +$pdf->SetFont('Arial', '', 5); +$pdf->SetXY(0, 9); +$pdf->MultiCell(85.6, 3, mb_convert_encoding(_('Siège social').': '. $assure['adresseGeoSociete'].' ', "ISO-8859-1", "UTF-8"), 0, 'C'); + +$pdf->SetXY(0, 12); +$pdf->Cell(85.6, 3, mb_convert_encoding(_('Tél.').': '.$assure['telephoneSociete'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); + +// Ligne séparatrice +$pdf->Line(5, 15, 80, 15); + +// Section "Bénéficiaire" +$pdf->SetFont('Arial', 'BUI', 7); +$pdf->SetXY(5, 17); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Bénéficiaire'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Matricule - en gras et rouge +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 21); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(25, 3, ' : '.$assure['numeroBeneficiaire'], 0, 1); +$pdf->SetTextColor(0); + +// Nom +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 24); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(30, 3, ' : '.substr(mb_convert_encoding($assure['nomBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Prénoms +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 27); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(25, 3, ' : '.substr(mb_convert_encoding($assure['prenomsBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Né(e) le - si disponible +if (!empty($assure['dateNaissance'])) { + $pdf->SetFont('Arial', '', 6); + $pdf->SetXY(5, 30); + $pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Né(e) le'), "ISO-8859-1", "UTF-8"), 0, 0); + $pdf->SetFont('Arial', 'B', 6); + $pdf->Cell(25, 3, ' : '.dateLang($assure['dateNaissance'], $_SESSION['lang']), 0, 1); +} + +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 33); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Statut'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(28, 3, ' : '.substr(mb_convert_encoding($assure['lienparente'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Section "Assuré Principal" +$pdf->SetFont('Arial', 'BUI', 7); +$pdf->SetXY(5, 38); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Assuré Principal'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Numéro assuré - en gras et rouge +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 42); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(25, 3, ' : '.$assure['numeroAdherent'], 0, 1); +$pdf->SetTextColor(0); + +// Nom et Prénoms assuré +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 45); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom & prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(15, 3, ' : '.substr(mb_convert_encoding($assure['adherent'], "ISO-8859-1", "UTF-8"), 0, 15), 0, 1); + +// Photo de l'assuré (positionnée à droite) - taille réduite +$photoPath = $_SESSION['dossierPhoto_C'].$_SESSION['dossierSociete'].'/Photos/'.$assure['lienPhoto']; +$photoX = 57; +$photoY = 17; + +// Vérifier si l'URL est accessible +$headers = @get_headers($photoPath); + +if (!empty($assure['lienPhoto']) && $headers && strpos($headers[0], '200')) { + $pdf->Image($photoPath, $photoX, $photoY, 25, 25); +} else { + // Cadre pour la photo si non disponible + $pdf->Rect($photoX, $photoY, 25, 25); + $pdf->SetFont('Arial', '', 4); + $pdf->SetXY($photoX, $photoY + 12); + $pdf->Cell(25, 3, mb_convert_encoding(_('Photo non disponible'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +} + +// ============ AJOUT DU QR CODE ============ +// Position : en bas à droite de la carte +if (file_exists($qrCodePath)) { + $qrX = 60; // Position X (à droite) + $qrY = 43; // Position Y (en bas) + $qrSize = 10; // Taille du QR code (10mm) + + $pdf->Image($qrCodePath, $qrX, $qrY, $qrSize, $qrSize); + + // Supprimer le fichier temporaire après utilisation + @unlink($qrCodePath); +} +// ========================================== + +// Nom du souscripteur en bas +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetXY(0, 49); +$pdf->Cell(85.6, 3, mb_convert_encoding($assure['souscripteur'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Editioncarteassure_erreur_adiafi.php b/Societes/ric/Tarifs/Controleur/Editioncarteassure_erreur_adiafi.php new file mode 100755 index 00000000..f56b0dcd --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Editioncarteassure_erreur_adiafi.php @@ -0,0 +1,168 @@ + rendre la carte personalisable par societeuser +// Fond blanc +$pdf->SetFillColor(255, 255, 255); +$pdf->Rect(0, 0, 85.6, 54, 'F'); + +// LOGO SOCIÉTÉ en haut à gauche +if (file_exists($logoSocietePath)) { + $pdf->Image($logoSocietePath, 3, 3, 15); +} + +$logoGarantPath = (!is_null($assure["logo_garant"])) ? $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/'.$assure["logo_garant"] : $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; + +if (!is_file($logoGarantPath)) { + $logoGarantPath = $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; +} + +// LOGO GARANT en haut à droite +if (is_file($logoGarantPath)) { + $pdf->Image($logoGarantPath, 67, 1, 15); +} + +// EN-TÊTE : "CARTE D'ASSURANCE" +$pdf->SetFont('Arial', 'B', 8); +$pdf->SetTextColor(33, 46, 83); +$pdf->SetXY(0, 5); +$pdf->Cell(85.6, 4, mb_convert_encoding(_('CARTE SANTÉ'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +$pdf->SetTextColor(0); + +// Informations de contact de la société +$pdf->SetFont('Arial', '', 5); +$pdf->SetXY(0, 9); +$pdf->MultiCell(85.6, 3, mb_convert_encoding(_('Siège social').': '. $assure['adresseGeoSociete'].' ', "ISO-8859-1", "UTF-8"), 0, 'C'); + +$pdf->SetXY(0, 12); +$pdf->Cell(85.6, 3, mb_convert_encoding(_('Tél.').': '.$assure['telephoneSociete'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); + +// Ligne séparatrice +$pdf->Line(5, 15, 80, 15); + +// Section "Bénéficiaire" +$pdf->SetFont('Arial', 'BUI', 7); +//$pdf->SetXY(5, 17); +$pdf->SetXY(13, 16); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Bénéficiaire'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Matricule - en gras et rouge +$pdf->SetFont('Arial', '', 6); +// $pdf->SetXY(5, 21); +$pdf->SetXY(5, 19); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(25, 3, ' : '.$assure['numeroBeneficiaire'], 0, 1); +$pdf->SetTextColor(0); + +// Nom +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 22); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(30, 3, ' : '.substr(mb_convert_encoding($assure['nomBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Prénoms +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 25); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(25, 3, ' : '.substr(mb_convert_encoding($assure['prenomsBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Né(e) le - si disponible +if (!empty($assure['dateNaissance'])) { + $pdf->SetFont('Arial', '', 6); + $pdf->SetXY(5, 28); + $pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Né(e) le'), "ISO-8859-1", "UTF-8"), 0, 0); + $pdf->SetFont('Arial', 'B', 6); + $pdf->Cell(25, 3, ' : '.dateLang($assure['dateNaissance'], $_SESSION['lang']), 0, 1); +} + +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 31); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Statut'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(28, 3, ' : '.substr(mb_convert_encoding($assure['lienparente'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +/* kane 17/02/2026 à 06h => recherche meilleure place QR code*/ +// ============ AJOUT DU QR CODE ============ +// Position : en bas à droite de la carte +// Position : en bas à gauche de la carte +if (file_exists($qrCodePath)) { + /* + $qrX = 60; // Position X (à droite) + $qrY = 43; // Position Y (en bas) + $qrSize = 10; // Taille du QR code (10mm) + */ + + $qrX = 5; // Position X (à droite) + $qrY = 34; // Position Y (en bas) + $qrSize = 18; // Taille du QR code (10mm) + + $pdf->Image($qrCodePath, $qrX, $qrY, $qrSize, $qrSize); + + /* + // Supprimer le fichier temporaire après utilisation + @unlink($qrCodePath); + */ + // Enregistrer le qrCodePath dans la BDD + // $this->carte->enregistrerqrcodeath($assure['idBeneficiaire'], $qrCodePath); + $this->carte->enregistrerqrcodeath($assure['idBeneficiaire'], $qrFile); +} +// ========================================== + +// Section "Assuré Principal" +$pdf->SetFont('Arial', 'BUI', 7); +$pdf->SetXY(28, 37); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Assuré Principal'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Numéro assuré - en gras et rouge +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(25, 41); +$pdf->Cell(10, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(0, 3, ' : '.$assure['numeroAdherent'], 0, 1); +$pdf->SetTextColor(0); + +// Nom et Prénoms assuré +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(25, 44); +// $pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom & prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(0, 3, substr(mb_convert_encoding($assure['adherent'], "ISO-8859-1", "UTF-8"), 0, 15), 0, 1); + +// Photo de l'assuré (positionnée à droite) - taille réduite +$photoPath = $_SESSION['dossierPhoto_C'].$_SESSION['dossierSociete'].'/Photos/'.$assure['lienPhoto']; +$photoX = 57; +$photoY = 17; + +// Vérifier si l'URL est accessible +$headers = @get_headers($photoPath); + +if (!empty($assure['lienPhoto']) && $headers && strpos($headers[0], '200')) { + $pdf->Image($photoPath, $photoX, $photoY, 25, 25); +} else { + // Cadre pour la photo si non disponible + $pdf->Rect($photoX, $photoY, 25, 25); + $pdf->SetFont('Arial', '', 4); + $pdf->SetXY($photoX, $photoY + 12); + $pdf->Cell(25, 3, mb_convert_encoding(_('Photo non disponible'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +} + +// Nom du souscripteur en bas +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetXY(0, 49); +$pdf->Cell(85.6, 3, mb_convert_encoding($assure['souscripteur'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Editioncarteassure_new_bon.php b/Societes/ric/Tarifs/Controleur/Editioncarteassure_new_bon.php new file mode 100755 index 00000000..6e9ab646 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Editioncarteassure_new_bon.php @@ -0,0 +1,180 @@ + rendre la carte personalisable par societeuser +// Fond blanc +$pdf->SetFillColor(255, 255, 255); +$pdf->Rect(0, 0, 85.6, 54, 'F'); + +// LOGO SOCIÉTÉ en haut à gauche +if (file_exists($logoSocietePath)) { + $pdf->Image($logoSocietePath, 3, 3, 15); +} + +$logoGarantPath = (!is_null($assure["logo_garant"])) ? $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/'.$assure["logo_garant"] : $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; + +if (!is_file($logoGarantPath)) { + $logoGarantPath = $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; +} + +// LOGO GARANT en haut à droite +if (is_file($logoGarantPath)) { + $pdf->Image($logoGarantPath, 67, 1, 15); +} + +// EN-TÊTE : "CARTE D'ASSURANCE" +$pdf->SetFont('Arial', 'B', 8); +$pdf->SetTextColor(33, 46, 83); +$pdf->SetXY(0, 5); +$pdf->Cell(85.6, 4, mb_convert_encoding(_('CARTE SANTÉ'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +$pdf->SetTextColor(0); + +// Informations de contact de la société +$pdf->SetFont('Arial', '', 5); +$pdf->SetXY(0, 9); +$pdf->MultiCell(85.6, 3, mb_convert_encoding(_('Siège social').': '. $assure['adresseGeoSociete'].' ', "ISO-8859-1", "UTF-8"), 0, 'C'); + +$pdf->SetXY(0, 12); +$pdf->Cell(85.6, 3, mb_convert_encoding(_('Tél.').': '.$assure['telephoneSociete'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); + +// Ligne séparatrice +$pdf->Line(5, 15, 80, 15); + +// Section "Bénéficiaire" +$pdf->SetFont('Arial', 'BUI', 7); +//$pdf->SetXY(5, 17); +$pdf->SetXY(13, 16); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Bénéficiaire'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Matricule - en gras et rouge +$pdf->SetFont('Arial', '', 6); +// $pdf->SetXY(5, 21); +$pdf->SetXY(5, 19); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(25, 3, ' : '.$assure['numeroBeneficiaire'], 0, 1); +$pdf->SetTextColor(0); + +// Nom +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 22); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(30, 3, ' : '.substr(mb_convert_encoding($assure['nomBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Prénoms +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 25); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(25, 3, ' : '.substr(mb_convert_encoding($assure['prenomsBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Né(e) le - si disponible +if (!empty($assure['dateNaissance'])) { + $pdf->SetFont('Arial', '', 6); + $pdf->SetXY(5, 28); + $pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Né(e) le'), "ISO-8859-1", "UTF-8"), 0, 0); + $pdf->SetFont('Arial', 'B', 6); + $pdf->Cell(25, 3, ' : '.dateLang($assure['dateNaissance'], $_SESSION['lang']), 0, 1); +} + +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 31); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Statut'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(28, 3, ' : '.substr(mb_convert_encoding($assure['lienparente'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +/* kane 17/02/2026 à 06h => recherche meilleure place QR code*/ +// ============ AJOUT DU QR CODE ============ +// Position : en bas à droite de la carte +// Position : en bas à gauche de la carte +if (file_exists($qrCodePath)) { + /* + $qrX = 60; // Position X (à droite) + $qrY = 43; // Position Y (en bas) + $qrSize = 10; // Taille du QR code (10mm) + */ + + $qrX = 5; // Position X (à droite) + $qrY = 34; // Position Y (en bas) + $qrSize = 18; // Taille du QR code (10mm) + + $pdf->Image($qrCodePath, $qrX, $qrY, $qrSize, $qrSize); + + /* + // Supprimer le fichier temporaire après utilisation + @unlink($qrCodePath); + */ + // Enregistrer le qrCodePath dans la BDD + // $this->carte->enregistrerqrcodeath($assure['idBeneficiaire'], $qrCodePath); + $this->carte->enregistrerqrcodeath($assure['idBeneficiaire'], $qrFile); +} +// ========================================== + +// Section "Assuré Principal" +$pdf->SetFont('Arial', 'BUI', 7); +$pdf->SetXY(28, 37); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Assuré Principal'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Numéro assuré - en gras et rouge +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(25, 41); +$pdf->Cell(10, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(0, 3, ' : '.$assure['numeroAdherent'], 0, 1); +$pdf->SetTextColor(0); + +// Nom et Prénoms assuré +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(25, 44); +// $pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom & prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(0, 3, substr(mb_convert_encoding($assure['adherent'], "ISO-8859-1", "UTF-8"), 0, 15), 0, 1); + +// Photo de l'assuré (positionnée à droite) - taille réduite +// $photoPath = $_SESSION['dossierPhoto_C'].$_SESSION['dossierSociete'].'/Photos/'.$assure['lienPhoto']; +$photo=$assure['lienPhoto']; +$faceRegistered=$assure['faceRegistered']; + +$photoPath = $_SESSION['lienPhotoFace'].$assure['lienPhoto']; +$photoX = 57; +$photoY = 17; + +// Vérifier si l'URL est accessible +$headers = @get_headers($photoPath); + +//if($faceRegistered=="1" && file_exists($photoPath)) +// if (!empty($assure['lienPhoto']) && $headers && strpos($headers[0], '200')) { +if ($faceRegistered=="1" && !empty($assure['lienPhoto']) && $headers && strpos($headers[0], '200')) { + $data = decryptImage($photoPath); + $data = base64_decode($data); + $temp = $_SESSION['lienPhotoFace'].'tmp_'.uniqid().'.jpg'; + file_put_contents($temp, $data); + // $pdf->Image($photoPath, $photoX, $photoY, 25, 25); + $pdf->Image($temp, $photoX, $photoY, 25, 25); // Réduction de 30x30 à 25x25 + unlink($temp); +} else { + // Cadre pour la photo si non disponible + $pdf->Rect($photoX, $photoY, 25, 25); + $pdf->SetFont('Arial', '', 4); + $pdf->SetXY($photoX, $photoY + 12); + $pdf->Cell(25, 3, mb_convert_encoding(_('Photo non disponible'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +} + +// Nom du souscripteur en bas +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetXY(0, 49); +$pdf->Cell(85.6, 3, mb_convert_encoding($assure['souscripteur'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Enteteavenant.php b/Societes/ric/Tarifs/Controleur/Enteteavenant.php new file mode 100755 index 00000000..3bf85bb2 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Enteteavenant.php @@ -0,0 +1,194 @@ +editionpieceavenant_societe->get_edition_avenant_entete(); + + $pdf = new FPDF_Protection('P','mm','A4'); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $pdf->SetMargins(10, 10, 10) ; + + $pdf->SetFont('Arial','BIU', $tp); + + $pdf->SetLineStyle(array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); + + // Rectangle 1 + // $x=10; $y = 10; $w=94; $h=57; $r=3.50; + $x=10; $y = 10; $w=94; $h=63; $r=3.50; + $pdf->RoundedRect($x, $y, $w, $h, $r, '1111'); + + // Ligne 1 + $x1=10; $y1 = 17; $x2=104; $y2=17; + $pdf->Line($x1, $y1, $x2, $y2); + + // Rectangle 2 + // $x=107; $y = 10; $w=94; $h=57; $r=3.50; + $x=107; $y = 10; $w=94; $h=63; $r=3.50; + $pdf->RoundedRect($x, $y, $w, $h, $r, '1111'); + + // Ligne 2 + $x1=107; $y1 = 17; $x2=201; $y2=17; + $pdf->Line($x1, $y1, $x2, $y2); + + // Titres des zones + $pdf->Cell(94,$ht0,convertirc(_("Souscripteur")),0,0,'C',false); + $pdf->Cell(2,$ht0,"",0,0,'L',false); + $pdf->Cell(94,$ht0,convertirc(_("Emission")),0,1,'C',false); + // Fin Titres des zones + + // L1 + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Numéro")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(73,$ht,convertirc($entetevenant['numeroClient']),0,0,'L',false); + + $pdf->Cell(4,$ht0,"",0,0,'L',false); + + $pdf->SetFont('Arial','BI', $tp); + // $pdf->Cell(20,$ht,convertirc(_("Emission")),0,0,'L',false); + $pdf->Cell(20,$ht,convertirc(_("Contrat")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + // $pdf->Cell(73,$ht,convertirc($entetevenant['numeroEmission']),0,1,'L',false); + $pdf->Cell(73,$ht,convertirc($entetevenant['libellePolice']),0,1,'L',false); + // Fin L1 + + // L2 + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Nom")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(73,$ht,convertirc($entetevenant['souscripteur']),0,0,'L',false); + + $pdf->Cell(4,$ht0,"",0,0,'L',false); + + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Sytème")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(73,$ht,convertirc(dateheureLang($entetevenant['dateSysteme'])),0,1,'L',false); + // Fin L2 + + // L3 + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Adresse")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(73,$ht,convertirc($entetevenant['boitepostale']),0,0,'L',false); + + $pdf->Cell(4,$ht0,"",0,0,'L',false); + + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("N° Police")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(73,$ht,convertirc($entetevenant['numeroPolice'] . " (ID => ".$entetevenant['idPolice']. ")"),0,1,'L',false); + // Fin L3 + + // L3 + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Rég Com")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(7373,$ht,convertirc($entetevenant['registreCommerce']),0,0,'L',false); + + + $pdf->Cell(4,$ht0,"",0,0,'L',false); + + // L4 + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Avenant")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(73,$ht,convertirc($entetevenant['numeroAvenant']),0,1,'L',false); + // Fin L4 + + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Téléphone")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(73,$ht,substr(convertirc($entetevenant['telephone']),0,40),0,0,'L',false); + + + $pdf->Cell(4,$ht0,"",0,0,'L',false); + + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Effet")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(73,$ht, dateLang($entetevenant['dateEffet']),0,1,'L',false); + + // L5 + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Email")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(73,$ht,substr(convertirc($entetevenant['email']),0,45),0,0,'L',false); + + $pdf->Cell(4,$ht0,"",0,0,'L',false); + + // Fin L5 + + // L6 + + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Expiration")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(28,$ht, dateLang($entetevenant['dateFin']),0,1,'L',false); + + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,("Profession"),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $secteuractivite = $entetevenant['secteuractivite']; + if (est_anglophone()) + { + $secteuractivite = $entetevenant['secteuractiviteEng']; + } + $pdf->Cell(73,$ht,convertirc($secteuractivite),0,0,'L',false); + + $pdf->Cell(4,$ht0,"",0,0,'L',false); + + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Durée")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(10,$ht, $entetevenant['dureeAvenant'],0,0,'L',false); + $pdf->Cell(10,$ht, convertirc(_("Jours")),0,1,'L',false); + + // Fin L6 + + // L7 + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Pt Vente")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(73,$ht,convertirc($entetevenant['pointvente']),0,0,'L',false); + + $pdf->Cell(4,$ht0,"",0,0,'L',false); + + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Type")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $typecontrat = $entetevenant['typecontrat']; + if (est_anglophone()) + { + $typecontrat = $entetevenant['typecontratEng']; + } + $pdf->Cell(73,$ht,convertirc($typecontrat),0,1,'L',false); + // Fin L7 + + // L8 + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Apporteur")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $pdf->Cell(73,$ht,convertirc($entetevenant['apporteur']),0,0,'L',false); + + $pdf->Cell(4,$ht0,"",0,0,'L',false); + + $pdf->SetFont('Arial','BI', $tp); + $pdf->Cell(20,$ht,convertirc(_("Mouvement")),0,0,'L',false); + $pdf->SetFont('Arial','I', $tp); + $libelleAvenant = $entetevenant['libelleAvenant']; + if (est_anglophone()) + { + $libelleAvenant = $entetevenant['libelleAvenantEng']; + } + $pdf->Cell(73,$ht,convertirc($libelleAvenant),0,1,'L',false); + // Fin L8 + + // Un peu d'espace avant l ecorps + $pdf->Ln(5); +?> diff --git a/Societes/ric/Tarifs/Controleur/Enteteavenantexport.php b/Societes/ric/Tarifs/Controleur/Enteteavenantexport.php new file mode 100755 index 00000000..069de775 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Enteteavenantexport.php @@ -0,0 +1,34 @@ +editionpieceavenant_societe->get_edition_avenant_entete(); + + $feuille->setCellValue('A1', _("Souscripteur")); + $feuille->setCellValue('B1', $entetevenant['souscripteur']); + + $feuille->setCellValue('D1', _("No Police")); + $feuille->setCellValue('E1', $entetevenant['numeroPolice']); + + // + + $feuille->setCellValue('A2', _("Effet")); + $feuille->setCellValue('B2', dateLang($entetevenant['dateEffet'])); + + $feuille->setCellValue('D2', _("Expiration")); + $feuille->setCellValue('E2', dateLang($entetevenant['dateFin'])); + + // + + $feuille->setCellValue('A3', _("Pt Vente")); + $feuille->setCellValue('B3', $entetevenant['pointvente']); + + $feuille->setCellValue('D3', _("Type")); + $feuille->setCellValue('E3', $entetevenant['typecontrat']); + + // + + $feuille->setCellValue('A4', _("Apporteur")); + $feuille->setCellValue('B4', $entetevenant['apporteur']); + + $feuille->setCellValue('D4', _("Mouvement")); + $feuille->setCellValue('E4', $entetevenant['libelleAvenant']); + +?> diff --git a/Societes/ric/Tarifs/Controleur/Entetecontrat.php b/Societes/ric/Tarifs/Controleur/Entetecontrat.php new file mode 100755 index 00000000..849c36e0 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Entetecontrat.php @@ -0,0 +1,144 @@ +Cell(30); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(0,$ht,convertirc("BORDEREAU D'EMISSION DE LA PRIME"),1,0,'C',true); + */ + // Saut de ligne + $pdf->Ln(20); + //encadrer + $pdf->Rect(10,30,190,65); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + + $pdf->SetFont('Arial','',9); + + + if(strlen($entetecp['garant']) > "40"){ + + $pdf->Cell(17,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->Cell(85,$ht,convertirc(":".$entetecp['garant']),0,0,'L',false); + } + else{ + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + + + + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['libellePolice']) > "30"){ + $pdf->Cell(22,$ht,convertirc("Police : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65, 4, $entetecp['libellePolice'],0); + }else{ + $pdf->Cell(32,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + } + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['nomClient'])> "30"){ + $pdf->Cell(22,$ht,convertirc("Souscripteur : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65,4,convertirc($entetecp['nomClient']),0); + } + else{ + + $pdf->Cell(32,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(77,$ht,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->Ln(); + } + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + + + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +/////////////////// +?> diff --git a/Societes/ric/Tarifs/Controleur/Etatincorporationparpoliceetcollege.php b/Societes/ric/Tarifs/Controleur/Etatincorporationparpoliceetcollege.php new file mode 100755 index 00000000..83a7ec04 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Etatincorporationparpoliceetcollege.php @@ -0,0 +1,229 @@ +setHeaderData($garant); + + +$ht0 = 8; +$ht = 6; +$tp = 8; +$idCollege = "0"; +$numeroAdherent = ""; +$count = 0; +$rows = 0; +$groupedData=array(); +foreach ($detailEmission as $item) { + // $collegeKey = $item['libelleCollege']; + $collegeKey = $item['idCollege']; + $adherentKey = $item['numeroAdherent']; + + if (!isset($groupedData[$collegeKey])) { + $groupedData[$collegeKey] = []; + } + + if (!isset($groupedData[$collegeKey][$adherentKey])) { + $groupedData[$collegeKey][$adherentKey] = []; + } + + $groupedData[$collegeKey][$adherentKey][] = $item; +} + + +foreach ($groupedData as $collegeKey => $groupCollege) { + // echo "Group for key1: $collegeKey\n"; + // $pdf->SetFont('Arial','B', 12); + // $pdf->Cell(190,$ht,convertirc($collegeKey),0,1,'C',false); + // $pdf->SetFont('Arial','BI', $tp); + $pdf->AddPage(); + $pdf->SetFillColor(226, 238, 253); // Blue color for the header background + $pdf->SetDrawColor(0, 0, 253); // Blue color for the header background + + // $pdf->Cell(190, 7,$pdf->convert_utf8('PRIME AU COMPTANT (à régler à la signature des présentes) '), 1, 1, 'C', true); + $pdf->SetFont('Arial', 'B', 14); + $pdf->SetTextColor(0, 0, 255); + $pdf->MultiCell(195, 5,$pdf->convert_utf8(" + ETAT DES INCORPORATIONS PAR POLICE ET COLLEGE + + "), 0, 'C',true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->Ln(5); + $pdf->SetFillColor(255,255,255); // Blue color for the header background + $pdf->SetFont('Arial', 'B', 10); + + $pdf->SetTextColor(128, 0, 255); + $codegarant = $enteteEmission['codeGcAssureur']; + $pdf->Cell(30, 7,$pdf->convert_utf8("Garant "), 0, 0, 'L', true); + $pdf->Cell(20, 7,$pdf->convert_utf8($codegarant), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8($garant), 0, 1, 'L', true); + // $pdf->Cell(40, 7,$pdf->convert_utf8("OBJET DE L'AVENANT "), 0, 0, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->Cell(20, 7,$pdf->convert_utf8("Période du: "), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8(dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])." Au ".dateLang($enteteEmission['dateFin'], $_SESSION['lang'])), 0, 0, 'L', true); + + $pdf->Cell(10, 7,$pdf->convert_utf8("Statut(s) concerné(s): ('A','C','D','E','G','K','X')"), 0, 1, 'L', true); + // $pdf->Ln(20); + + $pdf->SetTextColor(192, 0, 192); + $pdf->Cell(30, 7,$pdf->convert_utf8("Souscripteur "), 0, 0, 'L', true); + $pdf->Cell(20, 7,$pdf->convert_utf8($enteteEmission['souscripteur']), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8($enteteEmission['souscripteur']), 0, 1, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->SetTextColor(0, 0, 128); + $pdf->Cell(30, 7,$pdf->convert_utf8("Police: "), 0, 0, 'L', true); + $pdf->Cell(30, 7,$pdf->convert_utf8($enteteEmission['numeroPolice']), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8($enteteEmission['libellePolice']), 0, 1, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->SetTextColor(128, 0, 0); + $pdf->Cell(30, 7,$pdf->convert_utf8("Collège: "), 0, 0, 'L', true); + $libelleCollege = $pdf->findColleLibelleById($detailEmission,$collegeKey,'libelleCollege'); + $pdf->Cell(30, 7,$pdf->convert_utf8($pdf->convert_utf8($collegeKey)), 0, 0, 'L', true); + $pdf->Cell(80, 7,$pdf->convert_utf8($pdf->convert_utf8($libelleCollege)), 0, 1, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + foreach ($groupCollege as $adherentKey => $groupAdherent) { + // echo " Subgroup for key2: $adherentKey\n"; + // $pdf->Cell(190,$ht,convertirc($adherentKey),0,1,'C',false); + $count=0; + foreach ($groupAdherent as $beneficiaire) { + // echo " - {$item['adherent']}\n"; + // $pdf->Cell(190,$ht,convertirc($item['adherent']),0,1,'C',false); + // $pdf->Cell(20,$ht,convertirc($beneficiaire['numeroAdherent']),1,0,'C',false); + if($count==0){ + // $pdf->SetFont('Arial','BI', $tp); + $pdf->SetFont('Arial', 'B', 8); + + $pdf->SetFillColor(226, 238, 253); // Blue color for the header background + // $pdf->SetFont('Arial', 'B', 9); + $pdf->SetDrawColor(0, 0, 0); + // $pdf->Cell(190,$ht,convertirc(_("Famille")." : ".$beneficiaire['adherent']),0,1,'C',false); + $pdf->Cell(20,$ht,convertirc(_("Assuré")),1,0,'C',true); + $pdf->Cell(20,$ht,convertirc(_("Matricule")),1,0,'C',true); + $pdf->Cell(80,$ht,convertirc(_("Bénéficiaire")),1,0,'C',true); + $pdf->Cell(10,$ht,convertirc(_("Satut")),1,0,'C',true); + $pdf->Cell(10,$ht,convertirc(_("Genre")),1,0,'C',true); + $pdf->Cell(30,$ht,convertirc(_("Date de naissance")),1,0,'C',true); + $pdf->Cell(20,$ht,convertirc(_("Date effet")),1,1,'C',true); + // $pdf->Cell(20,$ht,convertirc(_("Date sortie")),1,1,'C',false); + + $pdf->SetFillColor(255); + + } + $pdf->SetFont('Arial', '', 8); + + + $pdf->Cell(20,$ht,convertirc($beneficiaire['numeroAdherent']),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc($beneficiaire['numeroBeneficiaire']),1,0,'L',false); + $pdf->Cell(80,$ht,convertirc($beneficiaire['beneficiaire']),1,0,'L',false); + $pdf->Cell(10,$ht,convertirc($beneficiaire['codeLienParente']),1,0,'C',false); + $pdf->Cell(10,$ht,convertirc($beneficiaire['sexe']),1,0,'C',false); + $pdf->Cell(30,$ht, dateLang($beneficiaire['dateNaissance'], $_SESSION['lang']),1,0,'C',false); + $pdf->Cell(20,$ht, dateLang($beneficiaire['dateEffet'], $_SESSION['lang']),1,1,'C',false); + + $count++; + if($count == sizeof($groupAdherent)){ + $pdf->Cell(100,$ht,'',0,0,'C',false); + $pdf->SetFont('Arial','B', $tp); + $pdf->Cell(90,$ht,convertirc(_("Effectif famille")." : ".$count),0,1,'R',false); + $pdf->SetFont('Arial','', $tp); + } + + } + } + + $recapCollege = $this->editionpieceavenant_societe->get_edition_emission_recap_college($collegeKey); + // var_dump($recapCollege); + $nbr_assures = 0; + $nbr_conjoints = 0; + $nbr_enfants = 0; + $nbr_geniteurs = 0; + $nbr_autres_conjoints = 0; + $nbr_enfant_sup = 0; + $nbr_autres_parents = 0; + $nbr_ascendants = 0; + $totalCollege = 0; + + // die(); + foreach ($recapCollege as $recap) { + // echo $recap['codeLienParente'] . "\n"; + if($recap['codeLienParente'] =='A') + $nbr_assures = $recap['effectif']; + if($recap['codeLienParente'] =='C') + $nbr_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='D') + $nbr_autres_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='E') + $nbr_enfants = $recap['effectif']; + if($recap['codeLienParente'] =='O') + $nbr_autres_parents = $recap['effectif']; + if($recap['codeLienParente'] =='F') + $nbr_ascendants = $recap['effectif']; + $totalCollege = $nbr_assures + $nbr_conjoints + $nbr_autres_conjoints + $nbr_enfants + $nbr_autres_parents + $nbr_ascendants; + // if($recap['codeLienParente'] =='F') + // $nbr_autres_parents = $recap['effectif']; + } + + $data = array( + array($pdf->convert_utf8('Assuré(e)s : '.format_N($nbr_assures)), $pdf->convert_utf8('Géniteur (Ascendant) : '.format_N($nbr_ascendants)), $pdf->convert_utf8('Autre(s) parent(s) : '.format_N($nbr_autres_parents))), + array('Conjoint(e)s : '.format_N($nbr_conjoints), 'Autres conjoint(es) : '.format_N($nbr_autres_conjoints)), + array('Enfants : '.format_N($nbr_enfants), $pdf->convert_utf8("Enfant(s) supplémentaire(s) : 0 ")), + ); + + $titre = "Effectif collège ".$libelleCollege.' :'.format_N($totalCollege); + $pdf->RecapEffectif($data,$pdf->GetX(),$pdf->GetY(),$titre); + + // echo "\n"; +} + + $recap_police = $this->editionpieceavenant_societe->get_edition_emission_recap_police(); + // var_dump($recap_police); + $nbr_assures = 0; + $nbr_conjoints = 0; + $nbr_enfants = 0; + $nbr_geniteurs = 0; + $nbr_autres_conjoints = 0; + $nbr_enfant_sup = 0; + $nbr_autres_parents = 0; + $nbr_ascendants = 0; + $totalPolice = 0; + + // die(); + foreach ($recap_police as $recap) { + // echo $recap['codeLienParente'] . "\n"; + if($recap['codeLienParente'] =='A') + $nbr_assures = $recap['effectif']; + if($recap['codeLienParente'] =='C') + $nbr_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='D') + $nbr_autres_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='E') + $nbr_enfants = $recap['effectif']; + if($recap['codeLienParente'] =='O') + $nbr_autres_parents = $recap['effectif']; + if($recap['codeLienParente'] =='F') + $nbr_ascendants = $recap['effectif']; + $totalPolice = $nbr_assures + $nbr_conjoints + $nbr_autres_conjoints + $nbr_enfants + $nbr_autres_parents + $nbr_ascendants; + // if($recap['codeLienParente'] =='F') + // $nbr_autres_parents = $recap['effectif']; + } + +// var_dump($detailEmission); +if(sizeof($detailEmission)>0){ + $pdf->Ln(5); + $data = array( + array($pdf->convert_utf8('Assuré(e)s : '.format_N($nbr_assures)), $pdf->convert_utf8('Géniteur (Ascendant) : '.format_N($nbr_ascendants)), $pdf->convert_utf8('Autre(s) parent(s) : '.format_N($nbr_autres_parents))), + array('Conjoint(e)s : '.format_N($nbr_conjoints), 'Autres conjoint(es) : '.format_N($nbr_autres_conjoints)), + array('Enfants : '.format_N($nbr_enfants), $pdf->convert_utf8("Enfant(s) supplémentaire(s) : 0 ")), + ); + + $titre = "Effectif police ".$enteteEmission['numeroPolice'].' :'.format_N($totalPolice); + $pdf->RecapEffectif($data,$pdf->GetX(),$pdf->GetY(),$titre); +} + + + + + + diff --git a/Societes/ric/Tarifs/Controleur/Etatprimecollege.php b/Societes/ric/Tarifs/Controleur/Etatprimecollege.php new file mode 100755 index 00000000..7cd14495 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Etatprimecollege.php @@ -0,0 +1,317 @@ +police_societe = new Police_sodciete(); + + $entetecp = $this->police_societe->getEnteteCP($idPolice); + $collegecps = $this->police_societe->getCollegesCpLienParente($idPolice); + $garantiescollegecps = $this->police_societe->getGarantiesCollegesCpLienParente($idPolice); + $tableaupretationcps = $this->police_societe->gettableauPrestationsCpLienParente($idPolice); + $nombrestatut = $this->police_societe->getnombrestatutpolice($idPolice); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=6; + $htext=6; + // Logo + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($entetecp['codeGcassureur']).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,20); + } + + // Police Arial gras 15 + $pdf->SetFont('Arial','B',10); + + // Décalage à droite + $pdf->Cell(60); + + $pdf->SetFillColor(217,237,247); // bleu + // Titre + $pdf->Cell(90,$ht,convertirc("PRIME COLLEGE"),1,0,'C',true); + + // Saut de ligne + $pdf->Ln(20); + + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + $garant = $entetecp['garant']; + + if(strlen($garant) > "24"){ + $garant = $entetecp['codeGcassureur']; + } + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$garant),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $dureeOld = dateDifferenceMois($entetecp['dateEffet'],$entetecp['dateEcheance'])+1; + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$dureeOld." mois"),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + //dateLang($this->nettoyer($police['dateEffet']), $_SESSION['lang']) + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Date Effet"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dateEffet']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Date Echéance"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dateEcheance']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',10); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(40,$ht,convertirc("Numéro de police"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + + $pdf->SetFont('Arial','',10); + $pdf->Cell(35); + $pdf->Cell(40,$ht,convertirc("Date d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dateAvenant']),0,0,'L',false); + + $pdf->Ln(10); + + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(90,$ht,convertirc("Statut"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(40,$ht,convertirc("Prime nette HT"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(20,$ht,convertirc("Effectif"),1,0,'C',true); + $pdf->SetFillColor(217,237,247); // bleu + $pdf->Cell(40,$ht,convertirc("Prime Totale HT"),1,1,'C',true); + + $pdf->SetFont('Arial','', 9); + + $nbPersonne = "0"; + $nbPersonneCollege = "0"; + $nbPersonneOption = "0"; + + $primeHtOption = "0"; + $primeHtCollee = "0"; + + // $idCollege = "0"; + $oldidCollege = "0"; + $primeHtLienParenteTotal = "0"; + $primeHtLienParenteCollege = "0"; + $idCollegeNew = "0"; + + $accessoireTotal = "0"; + $primeHtTotal = "0"; + $taxeTotal = "0"; + $primeTtcTotal = "0"; + + foreach ($collegecps as $collegecp) + { + $idCollege = $collegecp['idCollege']; + + $entetecollege = $this->police_societe->getCollegesCp($idCollege); + + $primeHtOption = $collegecp['primeHtOption']; + $nbPersonneOption = $collegecp['nbPersonneOption']; + $accessoireOption = $collegecp['accessoireOption']; + + $taxeOption = $collegecp['taxeOption']; + $primeTtcOption = $collegecp['primeTtcOption']; + + $nbPersonneCollege = $collegecp['nbPersonneCollege']; + + + $fraisCarte = $entetecollege['fraisCarteCollege']; + $accessoireCollege = $entetecollege['accessoireCollege']; + + $primeHtCollege = $entetecollege['primeHtCollege']; + $taxeCollege = $entetecollege['taxeCollege']; + $primeTtcCollege = $entetecollege['primeTtcCollege']; + + + if ($oldidCollege<>$idCollege && $oldidCollege <> "0") + { + + $primeHtCollegeProrata = ($dureeOld*$primeHtCollege)/12; + $primeTtcCollegeProrata = ($dureeOld*$primeTtcCollege)/12; + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(130,$ht,convertirc("Sous-Total HT"),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($nbPersonneCollege),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($primeHtCollegeProrata-$accessoireCollege),1,1,'C',false); + + $pdf->Cell(80,$ht,convertirc("Accessoires : ".format_N($accessoireCollege)),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Taxes : ".format_N($taxeCollege)),1,0,'C',false); + $pdf->Cell(70,$ht,convertirc("Sous-Total TTC: ".format_N($primeTtcCollegeProrata)),1,1,'C',false); + } + + if($idCollegeNew!=$collegecp['idCollege']) + { + $pdf->SetFont('Arial','BI', 9); + $pdf->Cell(190,$ht,convertirc($collegecp['produit']." => ".$collegecp['libelleCollege']),1,1,'C',false); + $pdf->SetFont('Arial','', 9); + $idCollegeNew = $collegecp['idCollege']; + } + + $pdf->SetFont('Arial','', 9); + + $pdf->Cell(90,$ht,convertirc($collegecp['lienparente']),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($collegecp['primeBase']),1,0,'C',false); + + $pdf->Cell(20,$ht,format_N($collegecp['nbPersonne']),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($collegecp['nbPersonne']*$collegecp['primeNette']),1,1,'C',false); + + // $nbPersonne += $collegecp['nbPersonne']; + // $primeHtLienParenteTotal += $collegecp['primeHtLienParente']; + + $oldidCollege = $idCollege; + } + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(130,$ht,convertirc("Sous-Total HT"),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($nbPersonneCollege),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($primeHtCollege-$accessoireCollege),1,1,'C',false); + + $pdf->Cell(90,$ht,convertirc("Accessoires : ".format_N($accessoireCollege)." - Frais Cartes : ".format_N($fraisCarte)),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Taxes : ".format_N($taxeCollege)),1,0,'C',false); + $pdf->Cell(60,$ht,convertirc("Sous-Total TTC : ".format_N($primeTtcCollege)),1,1,'C',false); + + $pdf->SetFont('Arial','B', 9); + + $pdf->Cell(130,$ht,convertirc("Total HT :"),1,0,'C',false); + $pdf->Cell(20,$ht,format_N($nbPersonneOption),1,0,'C',false); + $pdf->Cell(40,$ht,format_N($primeHtOption-$accessoireOption),1,1,'C',false); + + $pdf->Cell(90,$ht,convertirc("Accessoires : ".format_N($accessoireOption)." - Frais Cartes : ".format_N($fraisCarte)),1,0,'C',false); + $pdf->Cell(40,$ht,convertirc("Taxes : ".format_N($taxeOption)),1,0,'C',false); + $pdf->Cell(60,$ht,convertirc("Total TTC : ".format_N($primeTtcOption)),1,1,'C',false); + + // FIN TEXTE LIBRE + + $pdf->Ln(20); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Fait à ".$_SESSION['villeSociete']." en 2 exemplaires, le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'C',false); + + $pdf->Ln(1); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("AU SOUSCRIPTEUR"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("A LA COMPAGNIE"),0,1,'R',false); + + if ($entetecp['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($entetecp['codeGcassureur']).'.png',10,265,190); + } + + } + + + $fichier="Temp/TMP_primecollege"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Etatprimecollegeeng.php b/Societes/ric/Tarifs/Controleur/Etatprimecollegeeng.php new file mode 100755 index 00000000..cb4d2960 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Etatprimecollegeeng.php @@ -0,0 +1,353 @@ +police_societe = new Police_sodciete(); + + $idAvenant = $this->requete->getParametreFormulaire("idAvenant"); + $numeroAvenant_cp=0; + $numeroAvenant = $_SESSION['numeroAvenant_cp'] ; + $p_emission = $numeroAvenant['numeroAvenant']; + + $entetecp = $this->police_societe->getEnteteCP($idPolice,$p_emission); + $collegecps = $this->police_societe->getCollegesCpLienParente($idPolice); + $garantiescollegecps = $this->police_societe->getGarantiesCollegesCpLienParente($idPolice); + $tableaupretationcps = $this->police_societe->gettableauPrestationsCpLienParente($idPolice); + + + $codeGarant = $this->police_societe->getcodeGarant($idPolice); + + $codeGcAssureur = $codeGarant['codeGcAssureur']; + $infosDuGarant = $this->police_societe->getInfosGarant($codeGcAssureur); + + $pdf = new FPDF_Protection(); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + $userPassword = ''; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->AliasNbPages(); + $pdf->AddPage(); + + $ht=8; + // Logo + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/logo_'.strtolower($codeGcAssureur).'.png',10,5,30); + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + }else{ + $pdf->Image($_SESSION['lienLogo'],10,6,30); + } + // Police Arial gras 15 + $pdf->SetFont('Arial','B',15); + + + +// Décalage à droite + $pdf->Cell(30); + + $pdf->SetFillColor(153,255,153); // bleu + // Titre + $pdf->Cell(0,$ht,convertirc("BORDEREAU D'EMISSION DE LA PRIME"),1,0,'C',true); + require_once 'Entetecontrat.php'; + +/* + // Saut de ligne + $pdf->Ln(20); + //encadrer + $pdf->Rect(10,30,190,65); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeGcassureur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if($entetecp['codeTypeContrat'] == "G") + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE GROUPE"),0,0,'L',false); + } + else + { + $pdf->Cell(32,$ht,convertirc("Nature du risque"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": SANTE INDIVIDUELLE"),0,0,'L',false); + } + $pdf->Ln(); + + + $pdf->SetFont('Arial','',9); + + + if(strlen($entetecp['garant']) > "40"){ + + $pdf->Cell(17,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->Cell(85,$ht,convertirc(":".$entetecp['garant']),0,0,'L',false); + } + else{ + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Compagnie"),0,0,'L',false); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['garant']),0,0,'L',false); + } + + + + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['libellePolice']) > "30"){ + $pdf->Cell(22,$ht,convertirc("Police : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65, 4, $entetecp['libellePolice'],0); + }else{ + $pdf->Cell(32,$ht,convertirc("Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['libellePolice']),0,0,'L',false); + $pdf->Ln(); + } + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Code Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['codeApporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° Interne Police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroPolice']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Intermédiaire"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['apporteur']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Durée"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['dureePeriodicite']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("N° Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroClient']),0,0,'L',false); + + $pdf->SetFont('Arial','',9); + if(strlen($entetecp['nomClient'])> "30"){ + $pdf->Cell(22,$ht,convertirc("Souscripteur : "),0,0,'L',false); + $pdf->SetFont('Arial','B',8); + $pdf->MultiCell(65,4,convertirc($entetecp['nomClient']),0); + } + else{ + + $pdf->Cell(32,$ht,convertirc("Souscripteur"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(77,$ht,convertirc(": ".$entetecp['nomClient']),0,0,'L',false); + $pdf->Ln(); + } + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Echéance annuelle"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['echeancean']),0,0,'L',false); + + + + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("Fractionnement prime"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['fractionnement']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Adresse postale"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['boitepostale']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° d'avenant"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroAvenant']),0,0,'L',false); + $pdf->Ln(); + + $pdf->SetFont('Arial','',9); + $pdf->Cell(30,$ht,convertirc("Numéro police"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(72,$ht,convertirc(": ".$entetecp['numeroPoliceGarant']),0,0,'L',false); + $pdf->SetFont('Arial','',9); + $pdf->Cell(32,$ht,convertirc("N° quittance"),0,0,'L',false); + $pdf->SetFont('Arial','B',9); + $pdf->Cell(20,$ht,convertirc(": ".$entetecp['numeroQuittancePlus']),0,0,'L',false); +//////////////////*/ + $pdf->Ln(10); + + + $pdf->SetFont('Arial','B', 10); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(60,$ht,convertirc("Statut"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(50,$ht,convertirc("Prime nette HT"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(30,$ht,convertirc("Effectif"),1,0,'C',true); + $pdf->SetFillColor(153,255,153); // bleu + $pdf->Cell(50,$ht,convertirc("Prime Totale HT"),1,1,'C',true); + + $pdf->SetFont('Arial','', 9); + + $nbPersonne = "0"; + $nbPersonneCollege = "0"; + $nbPersonneOption = "0"; + + $primeHtOption = "0"; + $primeHtCollee = "0"; + + // $idCollege = "0"; + $oldidCollege = "0"; + $primeHtLienParenteTotal = "0"; + $primeHtLienParenteCollege = "0"; + $idCollegeNew = "0"; + + $accessoireTotal = "0"; + $primeHtTotal = "0"; + $taxeTotal = "0"; + $primeTtcTotal = "0"; + $ht = 6; + foreach ($collegecps as $collegecp) + { + $idCollege = $collegecp['idCollege']; + + if ($oldidCollege<>$idCollege && $oldidCollege <> "0") + { + $pdf->SetTextColor(130,15,150); + + $pdf->SetFont('Arial','B', 9); + $pdf->Cell(110,$ht,convertirc("Sous-Total HT :".format_N($primeHtCollege)),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbPersonneCollege),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($primeHtCollege),1,1,'C',false); + + $pdf->SetTextColor(0,0,0); + $pdf->Cell(60,$ht,convertirc("Accessoires : ".format_N($accessoireCollege)),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("Taxes : ".format_N($taxeCollege)),1,0,'C',false); + $pdf->Cell(80,$ht,convertirc("Sous-Total TTC: ".format_N($primeTtcCollege)),1,1,'C',false); + $primeHtCollege= 0; + $nbPersonneCollege=0; + $accessoireCollege=0; + $primeTtcCollege =0; + $taxeCollege = 0; + } + + if($idCollegeNew!=$collegecp['idCollege']) + { + $pdf->SetFont('Arial','BI', 9); + $pdf->SetTextColor(0,0,250); + $pdf->Cell(190,$ht,convertirc($collegecp['produit']." => ".$collegecp['libelleCollege']),'TB',1,'C',false); + $pdf->SetFont('Arial','', 9); + $idCollegeNew = $collegecp['idCollege']; + } + $pdf->SetTextColor(0,0,0); + + $pdf->SetFont('Arial','', 9); + + $pdf->Cell(60,$ht,convertirc($collegecp['lienparente']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp['primeHt']),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($collegecp['nbPersonne']),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($collegecp['primeHtLienParente']),1,1,'C',false); + + $primeHtOption = $collegecp['primeHtOption']; + $nbPersonneOption = $collegecp['nbPersonneOption']; + $accessoireOption = $collegecp['accessoireOption']; + $primeHtOption = $collegecp['primeHtOption']; + $taxeOption = $collegecp['taxeOption']; + $primeTtcOption = $collegecp['primeTtcOption']; + + $nbPersonneCollege += $collegecp['nbPersonne']; + // $primeHtCollege = $collegecp['primeHtLienParente']; + $accessoireCollege += $collegecp['accessoireCollege']; + $primeHtCollege += $collegecp['primeHtCollege']; + $taxeCollege += $collegecp['taxeCollege']; + $primeTtcCollege += $collegecp['primeTtcCollege']; + + // $nbPersonne += $collegecp['nbPersonne']; + // $primeHtLienParenteTotal += $collegecp['primeHtLienParente']; + + $oldidCollege = $idCollege; + + $primeHtCollegett += $collegecp['primeHtCollege']; + $nbPersonneCollegett += $collegecp['nbPersonne']; + $accessoireCollegett += $collegecp['accessoireCollege']; + $taxeCollegett += $collegecp['taxeCollege']; + $primeTtcCollegett += $collegecp['primeTtcCollege']; + } + + $pdf->SetFont('Arial','B', 9); + $pdf->SetTextColor(130,15,150); + + $pdf->Cell(110,$ht,convertirc("Sous-Total HT :" .format_N($primeHtCollege)),1,0,'C',false); + $pdf->Cell(30,$ht,format_N($nbPersonneCollege),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($primeHtCollege),1,1,'C',false); + $pdf->SetTextColor(0,0,0); + $pdf->Cell(60,$ht,convertirc("Accessoires : ".format_N($accessoireCollege)),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("Taxes : ".format_N($taxeCollege)),1,0,'C',false); + $pdf->Cell(80,$ht,convertirc("Sous-Total TTC : ".format_N($primeTtcCollege)),1,1,'C',false); + + $pdf->Ln(8); + + $pdf->SetFont('Arial','B', 9); + $pdf->SetTextColor(250,0,0); + + $pdf->Cell(110,$ht,convertirc("Total HT :".format_N($primeHtCollegett)),1,0,'C',false); + + $pdf->Cell(30,$ht,format_N($nbPersonneCollegett),1,0,'C',false); + $pdf->Cell(50,$ht,format_N($primeHtCollegett),1,1,'C',false); + + + $pdf->SetTextColor(250,0,0); + $pdf->Cell(60,$ht,convertirc("Accessoires : ".format_N($accessoireCollegett)),1,0,'C',false); + $pdf->Cell(50,$ht,convertirc("Taxes : ".format_N($taxeCollegett)),1,0,'C',false); + $pdf->Cell(80,$ht,convertirc("Total TTC : ".format_N($primeTtcCollegett)),1,1,'C',false); + $pdf->SetTextColor(0,0,0); + + // FIN TEXTE LIBRE + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BI', 10); + + $pdf->Cell(0,$ht,convertirc("Fait à ".$_SESSION['villeSociete']." en 2 exemplaires, le ".$entetecp['dateJour']." à ".$entetecp['HeureJour']),0,1,'C',false); + + $pdf->Ln(1); + + $pdf->SetFont('Arial','B', 10); + + $pdf->SetFont('Arial','BU', 10); + + $pdf->Cell(0,$ht,convertirc("AU SOUSCRIPTEUR"),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc("A LA COMPAGNIE"),0,1,'R',false); + + $pdf->Cell(190,0,convertirc(""),1,0,'L',false); + + if ($infosDuGarant['typeGarant']=="1"){ + if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,280,190); + } + } + $fichier="Temp/TMP_primecollege"."_".uniqid().".pdf"; + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Etatretraitparpoliceetcollege.php b/Societes/ric/Tarifs/Controleur/Etatretraitparpoliceetcollege.php new file mode 100755 index 00000000..bfdc3296 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Etatretraitparpoliceetcollege.php @@ -0,0 +1,233 @@ +setHeaderData($garant); + + +$ht0 = 8; +$ht = 6; +$tp = 8; +$idCollege = "0"; +$numeroAdherent = ""; +$count = 0; +$rows = 0; +// $detailEmissionRetraits=[]; +$recap_police = []; +$recapCollege = []; +$groupedData=array(); +foreach ($detailEmissionRetraits as $item) { + $collegeKey = $item['idCollege']; + $adherentKey = $item['numeroAdherent']; + + if (!isset($groupedData[$collegeKey])) { + $groupedData[$collegeKey] = []; + } + + if (!isset($groupedData[$collegeKey][$adherentKey])) { + $groupedData[$collegeKey][$adherentKey] = []; + } + + $groupedData[$collegeKey][$adherentKey][] = $item; +} + + +foreach ($groupedData as $collegeKey => $groupCollege) { + $pdf->AddPage(); + $pdf->SetFillColor(226, 238, 253); // Blue color for the header background + $pdf->SetDrawColor(0, 0, 253); // Blue color for the header background + + // $pdf->Cell(190, 7,$pdf->convert_utf8('PRIME AU COMPTANT (à régler à la signature des présentes) '), 1, 1, 'C', true); + $pdf->SetFont('Arial', 'B', 14); + $pdf->SetTextColor(0, 0, 255); + $pdf->MultiCell(195, 5,$pdf->convert_utf8(" + ETAT DES ASSURES ET DEPENDANTS RETIRES PAR POLICE ET PAR COLLEGE + + "), 0, 'C',true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->Ln(5); + $pdf->SetFillColor(255,255,255); // Blue color for the header background + $pdf->SetFont('Arial', 'B', 10); + + $pdf->SetTextColor(128, 0, 255); + $codegarant = $enteteEmission['codeGcAssureur']; + $pdf->Cell(30, 7,$pdf->convert_utf8("Garant "), 0, 0, 'L', true); + $pdf->Cell(20, 7,$pdf->convert_utf8($codegarant), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8($garant), 0, 1, 'L', true); + // $pdf->Cell(40, 7,$pdf->convert_utf8("OBJET DE L'AVENANT "), 0, 0, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->Cell(20, 7,$pdf->convert_utf8("Période du: "), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8(dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])." Au ".dateLang($enteteEmission['dateFin'], $_SESSION['lang'])), 0, 0, 'L', true); + + $pdf->Cell(10, 7,$pdf->convert_utf8("Statut(s) concerné(s): ('A','C','D','E','G','K','X')"), 0, 1, 'L', true); + // $pdf->Ln(20); + + $pdf->SetTextColor(192, 0, 192); + $pdf->Cell(30, 7,$pdf->convert_utf8("Souscripteur "), 0, 0, 'L', true); + $pdf->Cell(20, 7,$pdf->convert_utf8($enteteEmission['souscripteur']), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8($enteteEmission['souscripteur']), 0, 1, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->SetTextColor(0, 0, 128); + $pdf->Cell(30, 7,$pdf->convert_utf8("Police: "), 0, 0, 'L', true); + $pdf->Cell(20, 7,$pdf->convert_utf8($enteteEmission['numeroPolice']), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8($enteteEmission['libellePolice']), 0, 1, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->SetTextColor(128, 0, 0); + $pdf->Cell(30, 7,$pdf->convert_utf8("Collège: "), 0, 0, 'L', true); + $libelleCollege = $pdf->findColleLibelleById($detailEmissionRetraits,$collegeKey,'libelleCollege'); + $pdf->Cell(10, 7,$pdf->convert_utf8($pdf->convert_utf8($collegeKey)), 0, 0, 'L', true); + $pdf->Cell(80, 7,$pdf->convert_utf8($pdf->convert_utf8($libelleCollege)), 0, 1, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + foreach ($groupCollege as $adherentKey => $groupAdherent) { + // echo " Subgroup for key2: $adherentKey\n"; + // $pdf->Cell(190,$ht,convertirc($adherentKey),0,1,'C',false); + $count=0; + foreach ($groupAdherent as $beneficiaire) { + // echo " - {$item['adherent']}\n"; + // $pdf->Cell(190,$ht,convertirc($item['adherent']),0,1,'C',false); + // $pdf->Cell(20,$ht,convertirc($beneficiaire['numeroAdherent']),1,0,'C',false); + if($count==0){ + // $pdf->SetFont('Arial','BI', $tp); + $pdf->SetFont('Arial', 'B', 8); + + $pdf->SetFillColor(226, 238, 253); // Blue color for the header background + // $pdf->SetFont('Arial', 'B', 9); + $pdf->SetDrawColor(0, 0, 0); + // $pdf->Cell(190,$ht,convertirc(_("Famille")." : ".$beneficiaire['adherent']),0,1,'C',false); + $pdf->Cell(20,$ht,convertirc(_("Assuré")),1,0,'C',true); + $pdf->Cell(20,$ht,convertirc(_("Matricule")),1,0,'C',true); + $pdf->Cell(60,$ht,convertirc(_("Bénéficiaire")),1,0,'C',true); + $pdf->Cell(10,$ht,convertirc(_("Satut")),1,0,'C',true); + $pdf->Cell(10,$ht,convertirc(_("Genre")),1,0,'C',true); + $pdf->Cell(30,$ht,convertirc(_("Date de naissance")),1,0,'C',true); + $pdf->Cell(20,$ht,convertirc(_("Date effet")),1,0,'C',true); + $pdf->Cell(20,$ht,convertirc(_("Date sortie")),1,1,'C',true); + + $pdf->SetFillColor(255); + + } + $pdf->SetFont('Arial', '', 8); + + + $pdf->Cell(20,$ht,convertirc($beneficiaire['numeroAdherent']),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc($beneficiaire['numeroBeneficiaire']),1,0,'L',false); + $pdf->Cell(60,$ht,convertirc($beneficiaire['beneficiaire']),1,0,'L',false); + $pdf->Cell(10,$ht,convertirc($beneficiaire['codeLienParente']),1,0,'C',false); + $pdf->Cell(10,$ht,convertirc($beneficiaire['sexe']),1,0,'C',false); + $pdf->Cell(30,$ht, dateLang($beneficiaire['dateNaissance'], $_SESSION['lang']),1,0,'C',false); + $pdf->Cell(20,$ht, dateLang($beneficiaire['dateEffet'], $_SESSION['lang']),1,0,'C',false); + $pdf->Cell(20,$ht, dateLang($beneficiaire['dateSortie'], $_SESSION['lang']),1,1,'C',false); + + + $count++; + if($count == sizeof($groupAdherent)){ + $pdf->Cell(100,$ht,'',0,0,'C',false); + $pdf->SetFont('Arial','B', $tp); + $pdf->Cell(90,$ht,convertirc(_("Effectif famille")." : ".$count),0,1,'R',false); + $pdf->SetFont('Arial','', $tp); + } + + } + } + + $recapCollege = $this->editionpieceavenant_societe->get_edition_emission_recap_college_retrait($collegeKey); + // var_dump($recapCollege); + $nbr_assures = 0; + $nbr_conjoints = 0; + $nbr_enfants = 0; + $nbr_geniteurs = 0; + $nbr_autres_conjoints = 0; + $nbr_enfant_sup = 0; + $nbr_autres_parents = 0; + $nbr_ascendants = 0; + $totalCollege = 0; + + // die(); + foreach ($recapCollege as $recap) { + // echo $recap['codeLienParente'] . "\n"; + if($recap['codeLienParente'] =='A') + $nbr_assures = $recap['effectif']; + if($recap['codeLienParente'] =='C') + $nbr_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='D') + $nbr_autres_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='E') + $nbr_enfants = $recap['effectif']; + if($recap['codeLienParente'] =='O') + $nbr_autres_parents = $recap['effectif']; + if($recap['codeLienParente'] =='F') + $nbr_ascendants = $recap['effectif']; + $totalCollege = $nbr_assures + $nbr_conjoints + $nbr_autres_conjoints + $nbr_enfants + $nbr_autres_parents + $nbr_ascendants; + // if($recap['codeLienParente'] =='F') + // $nbr_autres_parents = $recap['effectif']; + } + + $data = array( + array($pdf->convert_utf8('Assuré(e)s : '.format_N($nbr_assures)), $pdf->convert_utf8('Géniteur (Ascendant) : '.format_N($nbr_ascendants)), $pdf->convert_utf8('Autre(s) parent(s) : '.format_N($nbr_autres_parents))), + array('Conjoint(e)s : '.format_N($nbr_conjoints), 'Autres conjoint(es) : '.format_N($nbr_autres_conjoints)), + array('Enfants : '.format_N($nbr_enfants), $pdf->convert_utf8("Enfant(s) supplémentaire(s) : 0 ")), + ); + + $titre = "Effectif collège ".$libelleCollege.' :'.format_N($totalCollege); + $pdf->RecapEffectif($data,$pdf->GetX(),$pdf->GetY(),$titre); + + // echo "\n"; +} + + $recap_police = $this->editionpieceavenant_societe->get_edition_emission_recap_police_retraits(); + // var_dump($recap_police); + $nbr_assures = 0; + $nbr_conjoints = 0; + $nbr_enfants = 0; + $nbr_geniteurs = 0; + $nbr_autres_conjoints = 0; + $nbr_enfant_sup = 0; + $nbr_autres_parents = 0; + $nbr_ascendants = 0; + $totalPolice = 0; + + // die(); + foreach ($recap_police as $recap) { + // echo $recap['codeLienParente'] . "\n"; + if($recap['codeLienParente'] =='A') + $nbr_assures = $recap['effectif']; + if($recap['codeLienParente'] =='C') + $nbr_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='D') + $nbr_autres_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='E') + $nbr_enfants = $recap['effectif']; + if($recap['codeLienParente'] =='O') + $nbr_autres_parents = $recap['effectif']; + if($recap['codeLienParente'] =='F') + $nbr_ascendants = $recap['effectif']; + $totalPolice = $nbr_assures + $nbr_conjoints + $nbr_autres_conjoints + $nbr_enfants + $nbr_autres_parents + $nbr_ascendants; + // if($recap['codeLienParente'] =='F') + // $nbr_autres_parents = $recap['effectif']; + } + + + +// $pdf->RecapEffectif($data,$pdf->GetX(),$pdf->GetY(),$titre); + + +if(sizeof($detailEmissionRetraits)>0){ + $pdf->Ln(5); + $data = array( + array($pdf->convert_utf8('Assuré(e)s : '.format_N($nbr_assures)), $pdf->convert_utf8('Géniteur (Ascendant) : '.format_N($nbr_ascendants)), $pdf->convert_utf8('Autre(s) parent(s) : '.format_N($nbr_autres_parents))), + array('Conjoint(e)s : '.format_N($nbr_conjoints), 'Autres conjoint(es) : '.format_N($nbr_autres_conjoints)), + array('Enfants : '.format_N($nbr_enfants), $pdf->convert_utf8("Enfant(s) supplémentaire(s) : 0 ")), + ); + +$titre = "Effectif police ".$enteteEmission['numeroPolice'].' :'.format_N($totalPolice); +$pdf->RecapEffectif($data,$pdf->GetX(),$pdf->GetY(),$titre); +} + + + + + + diff --git a/Societes/ric/Tarifs/Controleur/Fpdf.php b/Societes/ric/Tarifs/Controleur/Fpdf.php new file mode 100755 index 00000000..51f6ba13 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Fpdf.php @@ -0,0 +1,569 @@ +police_societe = new Police_sodciete(); +$idPolice = $_SESSION['idPolice_C']; + +// $codeGarant = $this->police_societe->getcodeGarant($idPolice); +// $codeGcAssureur = $codeGarant['codeGcAssureur']; +// $infosDuGarant = $this->police_societe->getInfosGarant($codeGcAssureur); + +$enteteEmission = $this->editionpieceavenant_societe->get_edition_emission_entete(); +$detailEmission = $this->editionpieceavenant_societe->get_edition_emission_detail(); +$detailEmissionRetraits = $this->editionpieceavenant_societe->get_edition_emission_detail_retrait(); +// var_dump($detailEmissionRetraits); +// var_dump($detailEmission); + +class PDF extends FPDF { + private $headerData; + function Header() { + + $this->SetFont('helvetica', '', 8); + + + $dateEtHeure = date("d/m/Y H:i:s"); + + $this->Cell(80, 10, $this->headerData, 0,0,'L',false,''); + + $this->SetX(110); + + $this->Cell(80, 10, 'Edition du : '.$dateEtHeure, 0,0,'R',false,''); + + $this->Ln(10); + + + } + public function setHeaderData($title) { + $this->headerData = $title; + } + + function Footer() { + $this->SetY(-15); + $this->SetFont('Arial', 'I', 8); + $this->Cell(0, 10, 'Page ' . $this->PageNo(), 0, 0, 'C'); + } + + // function CreateTable($header, $data) { + // // Table header + // $this->SetFont('Arial', 'B', 10); + // foreach ($header as $col) { + // $this->Cell(30, 10, $col, 1); + // } + // $this->Ln(); + + // // Table data + // $this->SetFont('Arial', '', 10); + // foreach ($data as $row) { + // foreach ($row as $col) { + // $this->Cell(30, 10, $col, 1); + // } + // $this->Ln(); + // } + // } + + + function PageTitle($title) { + // Set background color + // Set font and font size + $this->SetFont('Arial', 'B', 16); + + // Calculate the width of the title + $titleWidth = $this->GetStringWidth($title); + + // Calculate the X coordinate to center the title + $x = (210 - $titleWidth) / 2; // Assuming standard page width (210 units) + + // Move to the calculated X coordinate + $this->SetX($x); + + // Add the centered title + $this->Cell($this->w/2, 15, $title, 1, 0, 'C', false); + } + + function AddTableHeader() { + // Set background color for the table header + $this->SetFillColor(226, 238, 253); // RGB values for blue + $this->SetTextColor(0, 0, 0); // RGB values for white text + $this->SetFont('Arial', 'B', 12); + + // Create table header cells + $this->Cell(190, 10, 'Conditions particulieres', 1, 0, 'C', true); + $this->Ln(); + $this->Ln(); + + // Reset background color and text color for the content + $this->SetFillColor(255, 255, 255); // Reset to default white background + $this->SetTextColor(0, 0, 0); // Reset to default black text + } + + function AddTableRow($col1, $col2) { + // Add data to the table + $this->Cell(40, 10, $col1, 1); + $this->Cell(45, 10, $col2, 1); + + $this->Cell(40, 10, $col1, 1); + $this->Cell(45, 10, $col2, 1); + } + + function CreateTableConditionParticulieres($data, $x, $y,$borderColor, $verticalColor, $horizontalColor) { + // $this->Ln(10); + + $this->SetX($x); + $this->SetFont('Arial', '', 9); + + // Set the border color + + // Header row with blue background + $this->SetFillColor(226, 238, 253); + // $this->SetTextColor(0); // White text + $this->SetFont('Arial', 'B', 12); + + $this->Cell(190, 9,'CONDITIONS PARTICULIERES ', 1, 1, 'C', true); + $this->Ln(5); + $this->SetDrawColor($borderColor[0], $borderColor[1], $borderColor[2]); + // Set vertical border color + // $this->SetDrawColor($verticalColor[0], $verticalColor[1], $verticalColor[2]); + + // $this->Ln(); // Move to the next line for the data + + // Reset colors and font for data rows + $this->SetFillColor(255); // Reset background color + $this->SetTextColor(0); // Reset text color + $this->SetFont('Arial', '', 9); + + foreach ($data as $row) { + // Set horizontal border color + // $this->SetDrawColor($horizontalColor[0], $horizontalColor[1], $horizontalColor[2]); + for ($i = 0; $i < count($row); $i++) { + + if($i==0){ + $parties = explode(":", $row[$i]); + $key= $parties[0]; + $val= $parties[1]; + + $this->SetFont('Arial', '', 10); + $this->Cell(35, 10, $key, 1); + + $this->SetFont('Arial', 'B', 10); + $this->Cell(60, 10, ': '.$val, 1); + + + } + else{ + $parties = explode(":", $row[$i]); + $key= $parties[0]; + $val= $parties[1]; + + $this->SetFont('Arial', '', 10); + $this->Cell(45, 10, $key, 1); + + $this->SetFont('Arial', 'B', 10); + $this->Cell(50, 10, ': '.$val, 1); + + } + $this->SetFont('Arial', '', 10); + + + + } + $this->Ln(); // Move to the next line for the next row + } + // Reset the border color to default (black) + $this->SetDrawColor(0, 0, 0); + } + + + + + function RecapEffectif($data, $x, $y,$titre) { + // $this->Ln(10); + + $this->SetX($x); + $this->SetFont('Arial', '', 10); + + // Set the border color + + // Header row with blue background + // $this->SetFillColor(255, 255, 255); + $this->SetTextColor(128,0,0); // White text + $this->SetFont('Arial', 'B', 10); + // Set the current position + // $this->SetX(20); + // $this->SetY(30); + + // Create a rectangle at the current position + $this->Rect($x, $y-1, 190, 39, 'D'); + $this->Cell(180, 9,$this->convert_utf8($titre), 0, 1, 'L', true); + $this->SetTextColor(0); // White text + + // $this->Ln(5); + $this->SetDrawColor(0); + // Set vertical border color + // $this->SetDrawColor($verticalColor[0], $verticalColor[1], $verticalColor[2]); + + // $this->Ln(); // Move to the next line for the data + + // Reset colors and font for data rows + $this->SetFillColor(255); // Reset background color + $this->SetTextColor(0); // Reset text color + $this->SetFont('Arial', '', 10); + + foreach ($data as $row) { + // Set horizontal border color + // $this->SetDrawColor($horizontalColor[0], $horizontalColor[1], $horizontalColor[2]); + for ($i = 0; $i < count($row); $i++) { + + if($i==0){ + $parties = explode(":", $row[$i]); + $key= $parties[0]; + $val= $parties[1]; + $this->SetFont('Arial', '', 10); + $this->Cell(30, 10, $key, 0); + $this->SetFont('Arial', 'B', 10); + $this->Cell(30, 10, ': '.$val, 0); + } + else if($i==1){ + $parties = explode(":", $row[$i]); + $key= $parties[0]; + $val= $parties[1]; + $this->SetFont('Arial', '', 10); + $this->Cell(50, 10, $key, 0); + $this->SetFont('Arial', 'B', 10); + $this->Cell(30, 10, ': '.$val, 0); + } + else{ + $parties = explode(":", $row[$i]); + $key= $parties[0]; + $val= $parties[1]; + $this->SetFont('Arial', '', 10); + $this->Cell(30, 10, $key, 0); + $this->SetFont('Arial', 'B', 10); + $this->Cell(25, 10, ': '.$val, 0); + } + $this->SetFont('Arial', '', 10); + + + + } + $this->Ln(); // Move to the next line for the next row + } + // Reset the border color to default (black) + $this->SetDrawColor(0, 0, 0); + } + + function findColleLibelleById($list, $id, $field) { + foreach ($list as $item) { + if ($item['idCollege'] == $id) { + return $item[$field]; + } + } + + // Return null if ID is not found + return null; + } + + + + + + function convert_utf8($text){ + return iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $text); + } + + function CreatePrimeTableHeader() { + $this->SetFillColor(226, 238, 253); // Blue color for the header background + $this->SetFont('Arial', 'B', 8); + $this->SetDrawColor(0, 0, 0); + + + // Create header cells + + $headers = array($this->convert_utf8("Période d'assurance"), 'Prime nette', 'Prime additionnelle', 'Accessoires', 'Taxe', 'Prime totale'); + $count = 0; + foreach ($headers as $header) { + if($count ==0){ + $this->Cell(45, 9, $header, 1, 0, 'C', true); // Border around each cell with blue background + } + else{ + $this->Cell(29, 9, $header, 1, 0, 'C', true); + } + $count++; + } + + $this->Ln(); // Move to the next line for the data + } + + function CreatePrimeTable($debut,$fin,$enteteEmission) { + // Set font and fill color + $this->SetFont('Arial', '',8); + $this->SetFillColor(255); // Reset fill color to white + + // Sample data for the table + // $periode = 'Du '.$debut.' Au '.$fin; + $periode = $debut.' Au '.$fin; + + $data = array($periode, format_N($enteteEmission['primeNette']), '........', format_N($enteteEmission['accessoire']), format_N($enteteEmission['taxe']), format_N($enteteEmission['primeTtc'])); + $this->SetFont('Arial', 'B', 8); + // Create data cells + $count = 0; + $isLn=0; + foreach ($data as $cell) { + if($count == sizeof($data)-1) + $isLn=1; + // $this->Cell(32, 8, $cell, 1); + // $this->MultiCell(0, 10, $cell); + if($count ==0){ + // $this->Cell(40, 12, $cell, 1, $isLn, 'C', true); // Border around each cell with blue background + $this->Cell(45, 9, $cell, 1, $isLn, 'C', true); // + // $this->MultiCell(40, 5,$this->convert_utf8($cell), 0, 'L',false); + } + else{ + $this->Cell(29, 9, $cell, 1, $isLn, 'C', true); + } + $count++; + // $this->Ln(); + } + $this->SetFont('Arial', '', 8); + + + $this->Ln(3); // Move to the next line for the next row + } + + + function CreateDetailFamilleTable($data){ + + $this->SetFillColor(226, 238, 253); // Blue color for the header background + $this->SetFont('Arial', 'B', 9); + $this->SetDrawColor(0, 0, 0); + + + // Create header cells + + $headers = array($this->convert_utf8("Assuré(s)"), 'Matricule', 'Souscripteur', 'Nom', $this->convert_utf8('Prénoms'), 'Statut', 'Genre', $this->convert_utf8('Né(e) le'), $this->convert_utf8("Date d'éffet")); + $count = 0; + foreach ($headers as $header) { + if($count ==4){ + $this->Cell(30, 12, $header, 1, 0, 'C', true); // Border around each cell with blue background + } + else{ + $this->Cell(20, 12, $header, 1, 0, 'C', true); + } + $count++; + } + + $this->Ln(); // Move to the next line for the data + + // Set font and fill color + $this->SetFont('Arial', '',8); + $this->SetFillColor(255); // Reset fill color to white + + // Sample data for the table + // $periode = 'Du '.$debut.' Au '.$fin; + // $periode = $debut.' Au '.$fin; + + + + $this->SetFont('Arial', 'B', 7); + $count = 0; + $isLn=0; + foreach ($data as $row) { + $count = 0; + foreach ($row as $col) { + // $this->Cell(20, 10, $col, 1); + + if($count ==4){ + $this->Cell(30, 8, $col, 1, $isLn, 'C', true); // + } + else{ + $this->Cell(20, 8, $col, 1, $isLn, 'C', true); + } + $count ++; + } + $this->Ln(); // Move to the next line after each row + } + + // $this->Cell(150, 8, '', 0, 1, 'C', true); // + $this->Ln(1); + $this->Cell(40, 8, 'Effectif famille: '.sizeof($data), 0, 1, 'L', true); // + + $this->SetFont('Arial', '', 8); + + + $this->Ln(3); // Move to the next line for the next row + + } + + + + function CreateDetailFamilleEntete(){ + $this->Ln(20); // Move to the next line for the next row + + $this->SetFillColor(226, 238, 253); // Blue color for the header background + $this->SetFont('Arial', 'B', 9); + $this->SetDrawColor(0, 0, 0); + // Create header cells + $headers = array($this->convert_utf8("Assuré(s)"), 'Matricule', 'Souscripteur', 'Nom', $this->convert_utf8('Prénoms'), 'Statut', 'Genre', $this->convert_utf8('Né(e) le'), $this->convert_utf8("Date d'éffet")); + $count = 0; + foreach ($headers as $header) { + if($count ==4){ + $this->Cell(30, 12, $header, 1, 0, 'C', true); // Border around each cell with blue background + } + else{ + $this->Cell(20, 12, $header, 1, 0, 'C', true); + } + $count++; + } + $this->Ln(3); // Move to the next line for the next row + } + + function CreateDetailFamilleRow($data){ + $this->SetFont('Arial', 'B', 9); + $this->SetDrawColor(0, 0, 0); + // Set font and fill color + $this->SetFont('Arial', '',8); + $this->SetFillColor(255); // Reset fill color to white + + // Sample data for the table + // $periode = 'Du '.$debut.' Au '.$fin; + // $periode = $debut.' Au '.$fin; + + + + $this->SetFont('Arial', 'B', 7); + $count = 0; + $isLn=0; + foreach ($data as $row) { + $count = 0; + foreach ($row as $col) { + // $this->Cell(20, 10, $col, 1); + + if($count ==4){ + $this->Cell(30, 8, $col, 1, $isLn, 'C', true); // + } + else{ + $this->Cell(20, 8, $col, 1, $isLn, 'C', true); + } + $count ++; + } + $this->Ln(); // Move to the next line after each row + } + + // $this->Cell(150, 8, '', 0, 1, 'C', true); // + $this->Ln(1); + $this->Cell(40, 8, 'Effectif famille: '.sizeof($data), 0, 1, 'L', true); // + + $this->SetFont('Arial', '', 8); + + + $this->Ln(3); // Move to the next line for the next row + + } + + + function CreateTablePrimeTerme($debut,$fin) { + // Set font + // $this->Ln(); + // $this->Ln(); + + $this->SetFont('Arial', '', 9); + + // Add table header + // $this->Cell(190, 4,'', 0, 1, 'C', true); + $this->Cell(190, 8,'PRIME TERME (prochaine prime)', 1, 1, 'C', true); + $this->SetFont('Arial', 'B', 9); + + $periode = $debut.' Au '.$fin; + $this->Cell(45, 16,$periode, 1, 0, 'C', true); + $this->Cell(29, 16,'..............', 1, 0, 'C', true); + $this->Cell(29, 16,'..............', 1, 0, 'C', true); + + // $this->Cell(30, 12,"(Prime de base peut être modifiée par rapport à la réelle + // vraiment assuré, l'application de la clause + // d'ajustement et le niveau de taux en vigueur) + // ", 1, 0, 'C', true); + + // $this->SetFillColor(255, 255, 255); // Red color + + + + // $this->Cell(90, 24,"", 1, 0, 'C', true); + // Set the coordinates for the last cell + // $this->SetXY(20, $this->GetY() + 10); // Move to the next line + $this->SetFont('Arial', '',9); + + // Last cell as a MultiCell + $this->MultiCell(87, 4,$this->convert_utf8("(Prime de base peut être modifié par rapport à la réelle vraiment assuré, l'application de la clause d'ajustement et le niveau de taux en vigueur) + "), 1, 'L'); + + // $this->Rect($this->GetX()-80, $this->GetY(), 90, 5, 'D'); + // $this->Cell(40,24,"(Prime de base peut être modifié par rapport à la réelle",); + // Set initial position + // $x = 151; + // $y = 180; + $this->SetFont('Arial', '', 8); + + // $this->SetXY(151, 180); + // $this->Cell(40, 16, $this->convert_utf8('(Prime de base peut être modifié par')); + + // $this->SetXY(151, 182); + + // $this->Cell(40, 16, $this->convert_utf8('(rapport à la réelle à la réelle vraiment')); + // $this->SetXY(151, 184); + + // $this->Cell(40, 16, $this->convert_utf8("( assuré , l'application de la clause")); + // $this->SetXY(151, 186); + + // $this->Cell(40, 16, $this->convert_utf8("d'ajustement et le niveau de taux en")); + + // $this->SetXY(151, 188); + + // $this->Cell(40, 16, $this->convert_utf8("vigueur)")); + + // $this->SetXY(175, 180); + // $this->SetFont('Arial', '', 12); + // $this->Cell(40, 10, 'Cell 1'); + // $this->Ln(3); // Move to the next line for the next row + + +} + +function CreateTablePrimeAnnuelle() { + // Set font + // $this->Ln(); + $this->SetFont('Arial', 'B', 16); + + + $this->SetFillColor(255, 255, 255); // White background + $this->SetDrawColor(255, 255, 255); // White color + $this->SetFont('Arial', '', 10); + + $this->Cell(45, 24,'Prime annuelle', 1, 0, 'C', true); + $this->SetFont('Arial', '', 9); + + $this->SetDrawColor(0, 0, 0); // White color + $this->SetFont('Arial', 'B', 9); + + $this->Cell(29, 24,'.............', 1, 0, 'R', true); + $this->Cell(29, 24,'..............', 1, 0, 'C', true); + // $this->Cell(90, 24,"", 1, 0, 'C', true); + $this->SetFont('Arial', '',9); + + $this->MultiCell(88, 6,$this->convert_utf8("(Prime de base peut être modifié par rapport à la réelle vraiment assuré, l'application de la clause d'ajustement et le niveau de taux en vigueur) + "), 1, 'L'); + $this->SetFont('Arial', '', 8); + $this->Ln(3); + +} + +function commenceParVoyelle($chaine) { + $voyelles = array('a', 'e', 'i', 'o', 'u', 'y'); // Ajoutez 'y' si vous souhaitez le considérer comme une voyelle + + $premierCaractere = mb_strtolower(mb_substr($chaine, 0, 1)); + + return in_array($premierCaractere, $voyelles); +} +} + +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Modifiercollegedenregistrer.php b/Societes/ric/Tarifs/Controleur/Modifiercollegedenregistrer.php new file mode 100755 index 00000000..98a40c19 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Modifiercollegedenregistrer.php @@ -0,0 +1,14 @@ +college_temp->modifiercollege($idCollegeTemp, $idCollege); + $this->rediriger("Fichedevis"); + +?> + + + + + + diff --git a/Societes/ric/Tarifs/Controleur/Modifiercollegedindex.php b/Societes/ric/Tarifs/Controleur/Modifiercollegedindex.php new file mode 100755 index 00000000..3dba7c63 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Modifiercollegedindex.php @@ -0,0 +1,134 @@ +requete->existeParametre("id")) + { + $_SESSION['idCollege']=$this->requete->getParametre("id"); + $user = $_SESSION['login']; + $idCollege = $_SESSION['idCollege']; + + $idCollegeTemp = $this->college_temp->initModifCollege($idCollege, $user); + + $_SESSION['idCollegeTemp'] = $idCollegeTemp; + + $_SESSION['codeLienParente_C'] = "A"; + + $this->rediriger("Modifiercolleged"); + } + else + { + require_once $_SESSION['dossierSociete'].'/Tarifs/Modele/Trancheage.php'; + require_once $_SESSION['dossierSociete'].'/Tarifs/Modele/Capitalfraisfuneraire.php'; + require_once $_SESSION['dossierSociete'].'/Tarifs/Modele/Lienparente_societe.php'; + + $this->trancheage = (new Trancheage())->getListe(); + $this->capitalfraisfuneraire = (new Capitalfraisfuneraire())->getListe(); + $this->lienparente_societe = (new Lienparente_societe())->getListe(); + + $idPolice = $_SESSION['idPolice_d_C']; + $idCollege = $_SESSION['idCollege']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + /* + $produit = $this->produit->getListe(); + $collegetype = $this->produit->getListeCollegeType(); + + $collegeTemp = $this->college_temp->getCollegeTemp($idCollegeTemp); + $garantiesbase = $this->college_temp->getGarBaseCollege($idCollegeTemp); + $garoptionnelles = $this->college_temp->getGarOptCollege($idCollegeTemp); + $garoptacquises = $this->college_temp->getGarOptCollegeAcq($idCollegeTemp); + + $optionstarif = $this->college_temp->getoptionstarif($idPolice); + + $codeLienParente = $_SESSION['codeLienParente_C']; + + $garanties_lien_parente = $this->college_temp->getGarantieLienParente($idCollegeTemp, $codeLienParente); + $prime_colleges = $this->college_temp->getPrimesCollege($idCollegeTemp); + $collegelienparenteTemp = $this->college_temp->getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente); + + $this->genererVue(array('collegeTemp' => $collegeTemp, 'produit' => $produit, 'collegetype' => $collegetype, + 'garantiesbase' => $garantiesbase, 'garoptionnelles' => $garoptionnelles, 'ouinonbudget' => $this->ouinonbudget, + 'garoptacquises' => $garoptacquises, 'rachattm' => $this->rachattm, + 'ouinonimposerplafond' => $this->ouinonimposerplafond, 'optionstarif' => $optionstarif, + 'trancheage' => $this->trancheage, 'capitalfraisfuneraire' => $this->capitalfraisfuneraire, + 'prime_colleges' => $prime_colleges, 'lienparente_societe' => $this->lienparente_societe, + 'collegelienparenteTemp' => $collegelienparenteTemp, 'garanties_lien_parente' => $garanties_lien_parente)); + */ + + $collegeTemp = $this->college_temp->getCollegeTemp($idCollegeTemp); + $garantiesbase = $this->college_temp->getGarBaseCollege($idCollegeTemp); + $garoptionnelles = $this->college_temp->getGarOptCollege($idCollegeTemp); + $garoptacquises = $this->college_temp->getGarOptCollegeAcq($idCollegeTemp); + + $codeLienParente = $_SESSION['codeLienParente_C']; + + $garanties_lien_parente = $this->college_temp->getGarantieLienParente($idCollegeTemp, $codeLienParente); + $prime_colleges = $this->college_temp->getPrimesCollege($idCollegeTemp); + $collegelienparenteTemp = $this->college_temp->getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente); + + $codeTypeTarifActe = $collegeTemp['codeTypeTarifActe']; + $codeProduit = $collegeTemp['codeProduit']; + $codeGcAssureur = $collegeTemp['codeGcAssureur']; + $idPolice = $collegeTemp['idPolice']; + $typeGarant = $this->college_temp->getTypeGarantPolice($idPolice); + + $_SESSION['codeProduit'] = $codeProduit; + $_SESSION['codeGcAssureur_d'] = $codeGcAssureur; + $_SESSION['codeTypeGarant'] = $typeGarant['codeTypeGarant']; + $_SESSION['forfait'] = "1"; + $_SESSION['codeTypeTarifActe'] = $codeTypeTarifActe; + + $_SESSION['vueCollege'] = "Modifiercolleged"; + + $produit = $this->produit->getProduitGarant($codeGcAssureur); + $collegetype = $this->produit->getListeCollegeType(); + $etendueterritoire = $this->produit->getlisteTerritoire(); + $typeremboursement = $this->produit->getlisteTypeRemboursement(); + $tarifacte = $this->tarifacte->getTarifActeByType($codeTypeTarifActe); + $reseausoins = $this->reseausoins->getReseauProduit($codeProduit); + + $tm = $this->produit->getTicketModerateurProduit($codeProduit, $codeGcAssureur); + + $ticketModerateurCollege = $tm['ticketModerateur']; + + $_SESSION['nomGarant'] = $this->college_temp->getNomGarant($codeGcAssureur); + + $typeTarifActe = $this->college_temp->getTypeTarifActe(); + + + $tarifacte = $this->tarifacte->getTarifActeByType($codeTypeTarifActe); + + $forfaitTaux = $this->college_temp->getTauxForfait(); + $lienParente = $this->college_temp->getNomStatus($codeLienParente); + + $bareme = $this->college_temp->getBaremeProduit($codeProduit, $codeGcAssureur); + + $baseTarif = $this->college_temp->getBaseTarifCollege(); + $plafondFamille = $this->college_temp->getPlafondFamille($codeProduit,$codeGcAssureur); + $plafondIndividu = $this->college_temp->getPlafondIndividu($codeProduit,$codeGcAssureur); + + $codeModecalculPrime = $this->college_temp->getModecalculprimeproduit($codeProduit,$codeGcAssureur); + $optionstarif = $this->college_temp->getoptionstarif($idPolice); + + + if($codeModecalculPrime == "TA"){ + $this->college_temp->initprimeTranche($codeProduit,$codeGcAssureur, $idCollegeTemp); + } + + $modifierBareme = $this->college_temp->getmodifierBareme(); + + $primesTrancheAge = $this->college_temp->getPrimeTrancheAge($codeProduit,$codeGcAssureur); + + $primesTotalTrancheAge = $this->college_temp->getPrimeTotalTrancheAge($codeProduit,$codeGcAssureur); + + $this->genererVue(array('collegeTemp' => $collegeTemp, 'produit' => $produit, 'collegetype' => $collegetype, + 'garantiesbase' => $garantiesbase, 'garoptionnelles' => $garoptionnelles,'etendueterritoire' => $etendueterritoire, + 'garoptacquises' => $garoptacquises, 'rachattm' => $this->rachattm, 'typeremboursement' => $typeremboursement, + 'ouinonimposerplafond' => $this->ouinonimposerplafond, 'tarifacte' => $tarifacte,'reseausoins' => $reseausoins, + 'trancheage' => $this->trancheage, 'capitalfraisfuneraire' => $this->capitalfraisfuneraire,'typeTarifActe' => $typeTarifActe, + 'prime_colleges' => $prime_colleges, 'lienparente_societe' => $this->lienparente_societe,'forfaitTaux' => $forfaitTaux, + 'collegelienparenteTemp' => $collegelienparenteTemp, 'garanties_lien_parente' => $garanties_lien_parente, 'optionstarif' => $optionstarif, + 'lienParente' => $lienParente,'bareme' => $bareme,'ticketModerateurCollege' => $ticketModerateurCollege,'baseTarif' => $baseTarif, + 'plafondFamille'=>$plafondFamille,'plafondIndividu' => $plafondIndividu, 'ouinonbudget' => $this->ouinonbudget, 'modifierBareme'=> $modifierBareme, + 'codeModecalculPrime'=> $codeModecalculPrime, 'primesTrancheAge' => $primesTrancheAge, 'primesTotalTrancheAge'=> $primesTotalTrancheAge)); + + } +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/Modifiercollegeenregistrer.php b/Societes/ric/Tarifs/Controleur/Modifiercollegeenregistrer.php new file mode 100755 index 00000000..749a494f --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Modifiercollegeenregistrer.php @@ -0,0 +1,9 @@ +college_temp->modifiercollege($idCollegeTemp, $idCollege); + + $this->rediriger("Collegepolice"); + +?> diff --git a/Societes/ric/Tarifs/Controleur/Modifiercollegeindex.php b/Societes/ric/Tarifs/Controleur/Modifiercollegeindex.php new file mode 100755 index 00000000..97e0636f --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Modifiercollegeindex.php @@ -0,0 +1,100 @@ +requete->existeParametre("id")) + { + $_SESSION['idCollege']=$this->requete->getParametre("id"); + $user = $_SESSION['login']; + $idCollege = $_SESSION['idCollege']; + + $idCollegeTemp = $this->college_temp->initModifCollege($idCollege, $user); + + $_SESSION['idCollegeTemp'] = $idCollegeTemp; + + $_SESSION['codeLienParente_C'] = "A"; + + $this->rediriger("Modifiercollege"); + } + else + { + require_once $_SESSION['dossierSociete'].'/Tarifs/Modele/Trancheage.php'; + require_once $_SESSION['dossierSociete'].'/Tarifs/Modele/Capitalfraisfuneraire.php'; + require_once $_SESSION['dossierSociete'].'/Tarifs/Modele/Lienparente_societe.php'; + + $this->trancheage = (new Trancheage())->getListe(); + $this->capitalfraisfuneraire = (new Capitalfraisfuneraire())->getListe(); + $this->lienparente_societe = (new Lienparente_societe())->getListe(); + + + $_SESSION['nomFormulaire'] = "frmmodifiercollege"; + + $idCollege = $_SESSION['idCollege']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $collegeTemp = $this->college_temp->getCollegeTemp($idCollegeTemp); + $garantiesbase = $this->college_temp->getGarBaseCollege($idCollegeTemp); + $garoptionnelles = $this->college_temp->getGarOptCollege($idCollegeTemp); + $garoptacquises = $this->college_temp->getGarOptCollegeAcq($idCollegeTemp); + + $codeLienParente = $_SESSION['codeLienParente_C']; + + $garanties_lien_parente = $this->college_temp->getGarantieLienParente($idCollegeTemp, $codeLienParente); + $prime_colleges = $this->college_temp->getPrimesCollege($idCollegeTemp); + $collegelienparenteTemp = $this->college_temp->getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente); + + $codeTypeTarifActe = $collegeTemp['codeTypeTarifActe']; + $codeProduit = $collegeTemp['codeProduit']; + $codeGcAssureur = $collegeTemp['codeGcAssureur']; + $idPolice = $collegeTemp['idPolice']; + $typeGarant = $this->college_temp->getTypeGarantPolice($idPolice); + + $_SESSION['codeProduit'] = $codeProduit; + $_SESSION['codeGcAssureur'] = $codeGcAssureur; + $_SESSION['codeTypeGarant'] = $typeGarant['codeTypeGarant']; + $_SESSION['forfait'] = "1"; + $_SESSION['codeTypeTarifActe'] = $codeTypeTarifActe; + + $_SESSION['vueCollege'] = "Modifiercollege"; + + $produit = $this->produit->getProduitGarant($codeGcAssureur); + $collegetype = $this->produit->getListeCollegeType(); + $etendueterritoire = $this->produit->getlisteTerritoire(); + $typeremboursement = $this->produit->getlisteTypeRemboursement(); + $tarifacte = $this->tarifacte->getTarifActeByType($codeTypeTarifActe); + $reseausoins = $this->reseausoins->getReseauProduit($codeProduit); + + $tm = $this->produit->getTicketModerateurProduit($codeProduit, $codeGcAssureur); + + $ticketModerateurCollege = $tm['ticketModerateur']; + + $_SESSION['nomGarant'] = $this->college_temp->getNomGarant($codeGcAssureur); + + $typeTarifActe = $this->college_temp->getTypeTarifActe(); + + + $tarifacte = $this->tarifacte->getTarifActeByType($codeTypeTarifActe); + + $forfaitTaux = $this->college_temp->getTauxForfait(); + $lienParente = $this->college_temp->getNomStatus($codeLienParente); + + $bareme = $this->college_temp->getBaremeProduit($codeProduit, $codeGcAssureur); + + $baseTarif = $this->college_temp->getBaseTarifCollege(); + $plafondFamille = $this->college_temp->getPlafondFamille($codeProduit,$codeGcAssureur); + $plafondIndividu = $this->college_temp->getPlafondIndividu($codeProduit,$codeGcAssureur); + + $codeModecalculPrime = $this->college_temp->getModecalculprimeproduit($codeProduit,$codeGcAssureur); + + if($codeModecalculPrime == "TA"){ + $this->college_temp->initprimeTranche($codeProduit,$codeGcAssureur, $idCollegeTemp); + } + + $this->genererVue(array('collegeTemp' => $collegeTemp, 'produit' => $produit, 'collegetype' => $collegetype, + 'garantiesbase' => $garantiesbase, 'garoptionnelles' => $garoptionnelles,'etendueterritoire' => $etendueterritoire, + 'garoptacquises' => $garoptacquises, 'rachattm' => $this->rachattm, 'typeremboursement' => $typeremboursement, + 'ouinonimposerplafond' => $this->ouinonimposerplafond, 'tarifacte' => $tarifacte,'reseausoins' => $reseausoins, + 'trancheage' => $this->trancheage, 'capitalfraisfuneraire' => $this->capitalfraisfuneraire,'typeTarifActe' => $typeTarifActe, + 'prime_colleges' => $prime_colleges, 'lienparente_societe' => $this->lienparente_societe,'forfaitTaux' => $forfaitTaux, + 'collegelienparenteTemp' => $collegelienparenteTemp, 'garanties_lien_parente' => $garanties_lien_parente, + 'lienParente' => $lienParente,'bareme' => $bareme,'ticketModerateurCollege' => $ticketModerateurCollege,'baseTarif' => $baseTarif, + 'plafondFamille'=>$plafondFamille,'plafondIndividu' => $plafondIndividu, 'ouinonbudget' => $this->ouinonbudget)); + } +?> diff --git a/Societes/ric/Tarifs/Controleur/Mouvementeffectif.php b/Societes/ric/Tarifs/Controleur/Mouvementeffectif.php new file mode 100755 index 00000000..0a4043eb --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Mouvementeffectif.php @@ -0,0 +1,10 @@ +Ln(5); + + $pdf->SetFont('Arial','BI', $tp); + + if (est_anglophone()) + { + $pdf->Cell(0,$ht,convertirc("Done at " . $_SESSION['villeSociete'].", on ".dateLang($entetevenant['dateSysteme'])),0,1,'C',false); + } + else + { + $pdf->Cell(0,$ht,convertirc("Fait à " . $_SESSION['villeSociete'].", le ".dateLang($entetevenant['dateSysteme'])),0,1,'C',false); + } + + $pdf->Ln(10); + + $pdf->SetFont('Arial','BU', $tp); + + $pdf->Cell(0,$ht,convertirc(_("Le Souscripteur")),0,0,'L',false); + + $pdf->Cell(0,$ht,convertirc(_("Pour l'assureur")),0,0,'R',false); + + $nomEtatAvenant = $_SESSION['nomEtatAvenant']; + + // création du fichier + $uniqid = uniqid(); + $to_upload="Temp/TMP_$nomEtatAvenant"."_"."$uniqid.pdf"; + $fichierTemp="Temp/$uniqid.pdf"; + + $pdf->Output($fichierTemp,"F"); + + // $fichier = pdf_to_image($fichierTemp, $to_upload, $uniqid, "0"); // => Pour cnvertir en image => eviter la cibversion en Word + $fichier = $fichierTemp; + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/Piedavenantexport.php b/Societes/ric/Tarifs/Controleur/Piedavenantexport.php new file mode 100755 index 00000000..04f00f05 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/Piedavenantexport.php @@ -0,0 +1,13 @@ +save($fichier); + + $t_html ='
      '; + $t_html .=' '._("TELECHARGER").' '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/SuiteConditionparticulieres.php b/Societes/ric/Tarifs/Controleur/SuiteConditionparticulieres.php new file mode 100755 index 00000000..ec9d061a --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/SuiteConditionparticulieres.php @@ -0,0 +1,126 @@ +setHeaderData($garant); + +$pdf->AddPage(); + + +$pdf->SetFillColor(221, 255, 255); // Blue color for the header background + + +// $pdf->Cell(190, 7,$pdf->convert_utf8('PRIME AU COMPTANT (à régler à la signature des présentes) '), 1, 1, 'C', true); +$pdf->SetFont('Arial', 'B', 10); +// $pdf->MultiCell(195, 5,$pdf->convert_utf8(" +// SUITE DES CONDITIONS PARTICULIERES DE L’AVENANT N°".$enteteEmission['numeroAvenant']." A LA POLICE N°".$enteteEmission['numeroPolice']." SOUSCRITE PAR ".$souscripteur." AUPRES DE ".$garant." + +// "), 1, 'C',true); + + +$pdf->MultiCell(195, 5,$pdf->convert_utf8(" +SUITE DES CONDITIONS PARTICULIERES DE LA POLICE N°".$enteteEmission['numeroPolice']." SOUSCRITE PAR ".$souscripteur." AUPRES DE ".$garant." + +"), 1, 'C',true); + +$pdf->Ln(5); + +// $x = $pdf->GetX(); +// $y = $pdf->GetY(); +// $pdf->SetLineWidth(0.5); +// $pdf->Line($x, $y + 10, $pdf->GetX(), $y + 10); + +$pdf->SetFillColor(255,255,255); // Blue color for the header background + +// $pdf->Cell(190, 7,$pdf->convert_utf8("OBJET DE L'AVENANT "), 0, 1, 'L', true); +$pdf->Cell(190, 7,$pdf->convert_utf8("OBJET "), 0, 1, 'L', true); + +$pdf->SetFont('Arial', '', 10); +// $enteteEmission['dateEffet'],$enteteEmission['dateFin'] +// dateLang($entete['dateEffetPolice'], $_SESSION['lang']). +// $pdf->MultiCell(195, 5,$pdf->convert_utf8(" +// Le présent avenant a pour objet la régularisation des incorporations et des retraits du contrat de la période du ".dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])." au ".dateLang($enteteEmission['dateFin'], $_SESSION['lang'])." +// "), 0, 'L',false); +$pdf->MultiCell(195, 5,$pdf->convert_utf8(" +Le présent document a pour objet la régularisation des incorporations et des retraits du contrat de la période du ".dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])." au ".dateLang($enteteEmission['dateFin'], $_SESSION['lang'])." +"), 0, 'L',false); +$pdf->SetFont('Arial', 'B', 10); +$pdf->Ln(); +$pdf->Cell(190, 7,$pdf->convert_utf8("PRIME "), 0, 1, 'L', true); + +$pdf->Cell(10, 7,$pdf->convert_utf8(""), 0, 0, 'L', true); +$pdf->Cell(180, 7,$pdf->convert_utf8("PRIME NETTE ANNUELLE "), 0, 1, 'L', true); + +$pdf->SetFont('Arial', '', 10); + +$pdf->Cell(190, 7,$pdf->convert_utf8("Les garanties du présent contrat sont accordées moyennant les primes ci-après :"), 0, 1, 'L', true); + +$pdf->SetDrawColor(0,0,0); // Blue color for the header background + +$pdf->Cell(44, 7,$pdf->convert_utf8("Collège"), 1, 0, 'C', true); +$pdf->Cell(52, 7,$pdf->convert_utf8("Nombre de bénéficiaires"), 1, 0, 'C', true); +$pdf->Cell(57, 7,$pdf->convert_utf8("Prime annuelle par personne"), 1, 0, 'C', true); +$pdf->Cell(41, 7,$pdf->convert_utf8("Total"),1, 1, 'C', true); + +$pdf->Cell(44, 7,$pdf->convert_utf8("............"), 1, 0, 'C', true); +$pdf->Cell(52, 7,$pdf->convert_utf8("............"), 1, 0, 'C', true); +$pdf->Cell(57, 7,$pdf->convert_utf8("............"), 1, 0, 'C', true); +$pdf->Cell(41, 7,$pdf->convert_utf8("............."),1, 1, 'C', true); + +$pdf->Cell(44, 7,$pdf->convert_utf8("............."), 1, 0, 'C', true); +$pdf->Cell(52, 7,$pdf->convert_utf8(".............."), 1, 0, 'C', true); +$pdf->Cell(57, 7,$pdf->convert_utf8(".............."), 1, 0, 'C', true); +$pdf->Cell(41, 7,$pdf->convert_utf8("..............."),1, 1, 'C', true); + +$pdf->Cell(153, 7,$pdf->convert_utf8("TOTAL PRIME NETTE ANNUELLE"), 1, 0, 'C', true); +$pdf->Cell(41, 7,$pdf->convert_utf8("................"), 1, 1, 'C', true); +$pdf->Ln(5); + +$pdf->SetFont('Arial', 'B', 10); +$pdf->Cell(10, 7,$pdf->convert_utf8(""), 0, 0, 'L', true); +$pdf->Ln(5); +$pdf->Cell(180, 7,$pdf->convert_utf8("PRIME A REGLER A LA SIGNATURE DE LA POLICE "), 0, 1, 'L', true); +$pdf->SetFont('Arial', '', 10); +// $pdf->MultiCell(87, 6,$pdf->convert_utf8($pdf->convert_utf8("La prime est payable en une seule fois. +// Le souscripteur réglera à la signature du présent avenant la somme totale de 4 437 345 F.CFA pour la période d’assurance du 1er Janvier au 31 Décembre 2023 décomptée ci-dessous : +// ")), 1, 'L'); + +// $pdf->Cell(190, 7,$pdf->convert_utf8("La prime est payable en une seule fois. +// Le souscripteur réglera à la signature du présent avenant la somme totale de 4 437 345 F.CFA pour la période d’assurance du 1er Janvier au 31 Décembre 2023 décomptée ci-dessous :"), 0, 1, 'L', true); + +$pdf->MultiCell(195, 5,$pdf->convert_utf8(" +La prime est payable en une seule fois. +Le souscripteur réglera à la signature du présent avenant la somme totale de ........... F.CFA pour la période d’assurance du 1er Janvier au 31 Décembre 2023 décomptée ci-dessous :"), 0, 'L',false); +$pdf->Ln(); +$pdf->Cell(150, 7,$pdf->convert_utf8("Prime nette d’incorporation du ".dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])." au ".dateLang($enteteEmission['dateFin'], $_SESSION['lang']).""), 1, 0, 'C', true); +$pdf->Cell(40, 7,$pdf->convert_utf8("........."), 1, 1, 'C', true); + +$pdf->Cell(150, 7,$pdf->convert_utf8("Prime nette de retrait du ".dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])." au ".dateLang($enteteEmission['dateFin'], $_SESSION['lang']).""), 1, 0, 'C', true); +$pdf->Cell(40, 7,$pdf->convert_utf8("..............."), 1, 1, 'C', true); + +$pdf->Cell(150, 7,$pdf->convert_utf8("Prime nette à percevoir"), 1, 0, 'C', true); +$pdf->Cell(40, 7,format_N($enteteEmission['primeNette']), 1, 1, 'C', true); + +$pdf->Cell(150, 7,$pdf->convert_utf8("Accessoires"), 1, 0, 'C', true); +$pdf->Cell(40, 7,format_N($enteteEmission['accessoire']), 1, 1, 'C', true); + +$pdf->Cell(150, 7,$pdf->convert_utf8("Taxe"), 1, 0, 'C', true); +$pdf->Cell(40, 7,format_N($enteteEmission['taxe']), 1, 1, 'C', true); + +$pdf->Cell(150, 7,$pdf->convert_utf8("PRIME TOTALE A PERCEVOIR"), 1, 0, 'C', true); +$pdf->Cell(40, 7,format_N($enteteEmission['primeTtc']), 1, 1, 'C', true); +$pdf->Ln(); +$pdf->MultiCell(195, 5,$pdf->convert_utf8("IL N’EST PAS AUTREMENT DEROGE AUX CLAUSES ET CONDITIONS DE LA POLICE ET DES AVENANTS PRECEDENTS."), 0, 'L',false); +$pdf->SetDrawColor('255','255','255'); +$pdf->Cell(120, 7,$pdf->convert_utf8(""), 1, 0, 'C', true); +$pdf->SetFont('Arial', '', 8); +$pdf->Cell(70, 7,$pdf->convert_utf8("Etabli en 2 exemplaires originaux "), 1, 1, 'C', true); +$pdf->Cell(120, 7,$pdf->convert_utf8(""), 1, 0, 'C', true); +$pdf->Cell(70, 7,$pdf->convert_utf8("à Abidjan, le ".date("d/m/Y H:i:s")), 1, 1, 'C', true); + +$pdf->SetFont('Arial', 'B', 11); + +$pdf->Cell(50, 7,'LE SOUSCRIPTEUR ',0, 0, 'L'); +$pdf->Cell(95, 7,' ',0, 0, ''); +$pdf->Cell(50, 7,'LA COMPAGNIE ',0, 1, 'L'); + + + diff --git a/Societes/ric/Tarifs/Controleur/avenants/Enteteavenant.php b/Societes/ric/Tarifs/Controleur/avenants/Enteteavenant.php new file mode 100755 index 00000000..b1086c67 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/avenants/Enteteavenant.php @@ -0,0 +1,114 @@ +SetAutoPageBreak(true, 10); // Set a maximum height for automatic page breaks +$title="Avenant incorporation"; +// $pdf->setHeaderData($enteteEmission['libelleAvenant']); +$pdf->setHeaderData("MCI CARE CI"); + +// Add page title +// $pdf->SetMargins(10, 10, 10); +$pdf->AddPage(); + +$pdf->SetFillColor(200, 220, 255); // Light blue fill color +$pdf->SetDrawColor(247, 247, 249); // Red border color +$pdf->SetLineWidth(0.5); +$pdf->SetDrawColor(0,0,0); // Red border color +$pdf->SetLineWidth(0); + +$intermediaire = $enteteEmission['apporteur']; +if (!empty($intermediaire) && strlen($intermediaire) > 25) + $intermediaire = substr($intermediaire, 0, 25) . "..."; +$souscripteur = $enteteEmission['souscripteur']; +if(strlen($souscripteur)>25) + $souscripteur = substr($souscripteur, 0, 25) . "..."; + +$garant = $enteteEmission['garant']; +if (!empty($garant) && strlen($garant) > 25) + $garant = substr($garant, 0, 25) . "..."; +$data = array( + array('Compagnie: '.$garant, 'Nature de risque: Assurance maladie'), + array('Code Compagnie : '.$enteteEmission['codeGcAssureur'], 'Police: '.$enteteEmission['libellePolice']), + array($pdf->convert_utf8('Intermédiaire: '.$intermediaire), $pdf->convert_utf8('Numéro Interne police: '.$enteteEmission['numeroPoliceGarant'])), + array($pdf->convert_utf8('Code Intermédiaire: '.$enteteEmission['apporteur']), $pdf->convert_utf8('Durée: '.$enteteEmission['dureeAvenant'])), + array("Souscripteur: ".$souscripteur, $pdf->convert_utf8('Echéance annuelle: '.dateLang($enteteEmission['dateEcheance'], $_SESSION['lang']))), + array($pdf->convert_utf8('Numéro de compte: 4315'), 'Fractionnement de la prime: '.$enteteEmission['fractionnement']), + array('Adresse postale: '.$enteteEmission['boitepostale'], $pdf->convert_utf8("Date d'éffet: ").dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])), + array($pdf->convert_utf8('Numéro police: '.$enteteEmission['numeroPolice']), $pdf->convert_utf8("Numero d'émission: ".$enteteEmission['numeroEmission'])) + + // Add more rows as needed +); + +$borderColor = array(255, 255, 255); +$verticalColor = array(255, 0, 0); // Red +$horizontalColor = array(0, 0, 0); // Blue +$pdf->CreateTableConditionParticulieres($data, 10, $pdf->GetY(),$borderColor,$verticalColor, $horizontalColor); + + +$pdf->SetDrawColor(247, 247, 249); + +$pdf->Cell(190, 7,$pdf->convert_utf8('PRIME AU COMPTANT (à régler à la signature des présentes) '), 1, 1, 'C', true); + +$pdf->CreatePrimeTableHeader(); + +$pdf->CreatePrimeTable(dateLang($enteteEmission['dateEffet'], $_SESSION['lang']),dateLang($enteteEmission['dateFin'], $_SESSION['lang']),$enteteEmission); +// $pdf->Ln(); +// $pdf->Ln(); +$pdf->CreateTablePrimeTerme(dateLang($enteteEmission['dateEffet'], $_SESSION['lang']),dateLang($enteteEmission['dateFin'], $_SESSION['lang'])); + +// $pdf->Ln(1); +$pdf->Ln(); + +$pdf->CreateTablePrimeAnnuelle(); + +$pdf->Ln(); +$pdf->SetFont('Arial', '', 10); +// Save current Y position +$yPos = $pdf->GetY(); +$text = "OBJET: "; +$pdf->Cell(60, 7,"OBJET: ",0, 0, 'C', true); +// $pdf->SetLineWidth(0.01); // Set line width (adjust as needed) +// $pdf->Line(10, $yPos + 9, 200, $yPos + 9); // Draw a line at the bottom of the cell + +$pdf->SetFont('Arial', '', 10); +$voyelles = array('a', 'e', 'i', 'o', 'u', 'y'); +// $chaine = "Exemple"; +// $type_aveant = 'Avenant de'.$pdf->convert_utf8($enteteEmission['libelleAvenant']); +// if ($pdf->commenceParVoyelle($chaine)) { +// $type_aveant = "Avenant d'".$pdf->convert_utf8($enteteEmission['libelleAvenant']); +// } +$type_aveant = "AVENANT DE REGULARISATION DE MOUVEMENTS D'EFFECTIFS"; +$pdf->Cell(130, 7,strtoupper($type_aveant),0, 1, 'L', true); + +$currentDate = new DateTime(); +// $formattedDate = $currentDate->format('l, F j, Y'); +$formattedDate = $currentDate->format('l j F Y'); +$pdf->SetFont('Arial', 'B', 9); + +$pdf->Ln(5); + +$pdf->Cell(190, 7,$pdf->convert_utf8("Etabli à ABIDJAN en 2 exemplaires, le : ".$formattedDate),0, 1, 'C', true); + +$pdf->Ln(5); +$pdf->SetFont('Arial', 'B', 10); + +$pdf->Cell(50, 7,'AU SOUSCRIPTEUR ',0, 0, 'L'); +$pdf->Cell(95, 7,' ',0, 0, ''); +$pdf->Cell(50, 7,'COMPAGNIE ',0, 1, 'L'); + +$pdf->Ln(15); +$pdf->SetFont('Arial', '', 7); + +$pdf->Cell(190, 7,'Copie gestionnaire',0, 1, 'C'); \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/avenants/Etatincorporationparpoliceetcollege.php b/Societes/ric/Tarifs/Controleur/avenants/Etatincorporationparpoliceetcollege.php new file mode 100755 index 00000000..83a7ec04 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/avenants/Etatincorporationparpoliceetcollege.php @@ -0,0 +1,229 @@ +setHeaderData($garant); + + +$ht0 = 8; +$ht = 6; +$tp = 8; +$idCollege = "0"; +$numeroAdherent = ""; +$count = 0; +$rows = 0; +$groupedData=array(); +foreach ($detailEmission as $item) { + // $collegeKey = $item['libelleCollege']; + $collegeKey = $item['idCollege']; + $adherentKey = $item['numeroAdherent']; + + if (!isset($groupedData[$collegeKey])) { + $groupedData[$collegeKey] = []; + } + + if (!isset($groupedData[$collegeKey][$adherentKey])) { + $groupedData[$collegeKey][$adherentKey] = []; + } + + $groupedData[$collegeKey][$adherentKey][] = $item; +} + + +foreach ($groupedData as $collegeKey => $groupCollege) { + // echo "Group for key1: $collegeKey\n"; + // $pdf->SetFont('Arial','B', 12); + // $pdf->Cell(190,$ht,convertirc($collegeKey),0,1,'C',false); + // $pdf->SetFont('Arial','BI', $tp); + $pdf->AddPage(); + $pdf->SetFillColor(226, 238, 253); // Blue color for the header background + $pdf->SetDrawColor(0, 0, 253); // Blue color for the header background + + // $pdf->Cell(190, 7,$pdf->convert_utf8('PRIME AU COMPTANT (à régler à la signature des présentes) '), 1, 1, 'C', true); + $pdf->SetFont('Arial', 'B', 14); + $pdf->SetTextColor(0, 0, 255); + $pdf->MultiCell(195, 5,$pdf->convert_utf8(" + ETAT DES INCORPORATIONS PAR POLICE ET COLLEGE + + "), 0, 'C',true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->Ln(5); + $pdf->SetFillColor(255,255,255); // Blue color for the header background + $pdf->SetFont('Arial', 'B', 10); + + $pdf->SetTextColor(128, 0, 255); + $codegarant = $enteteEmission['codeGcAssureur']; + $pdf->Cell(30, 7,$pdf->convert_utf8("Garant "), 0, 0, 'L', true); + $pdf->Cell(20, 7,$pdf->convert_utf8($codegarant), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8($garant), 0, 1, 'L', true); + // $pdf->Cell(40, 7,$pdf->convert_utf8("OBJET DE L'AVENANT "), 0, 0, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->Cell(20, 7,$pdf->convert_utf8("Période du: "), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8(dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])." Au ".dateLang($enteteEmission['dateFin'], $_SESSION['lang'])), 0, 0, 'L', true); + + $pdf->Cell(10, 7,$pdf->convert_utf8("Statut(s) concerné(s): ('A','C','D','E','G','K','X')"), 0, 1, 'L', true); + // $pdf->Ln(20); + + $pdf->SetTextColor(192, 0, 192); + $pdf->Cell(30, 7,$pdf->convert_utf8("Souscripteur "), 0, 0, 'L', true); + $pdf->Cell(20, 7,$pdf->convert_utf8($enteteEmission['souscripteur']), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8($enteteEmission['souscripteur']), 0, 1, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->SetTextColor(0, 0, 128); + $pdf->Cell(30, 7,$pdf->convert_utf8("Police: "), 0, 0, 'L', true); + $pdf->Cell(30, 7,$pdf->convert_utf8($enteteEmission['numeroPolice']), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8($enteteEmission['libellePolice']), 0, 1, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->SetTextColor(128, 0, 0); + $pdf->Cell(30, 7,$pdf->convert_utf8("Collège: "), 0, 0, 'L', true); + $libelleCollege = $pdf->findColleLibelleById($detailEmission,$collegeKey,'libelleCollege'); + $pdf->Cell(30, 7,$pdf->convert_utf8($pdf->convert_utf8($collegeKey)), 0, 0, 'L', true); + $pdf->Cell(80, 7,$pdf->convert_utf8($pdf->convert_utf8($libelleCollege)), 0, 1, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + foreach ($groupCollege as $adherentKey => $groupAdherent) { + // echo " Subgroup for key2: $adherentKey\n"; + // $pdf->Cell(190,$ht,convertirc($adherentKey),0,1,'C',false); + $count=0; + foreach ($groupAdherent as $beneficiaire) { + // echo " - {$item['adherent']}\n"; + // $pdf->Cell(190,$ht,convertirc($item['adherent']),0,1,'C',false); + // $pdf->Cell(20,$ht,convertirc($beneficiaire['numeroAdherent']),1,0,'C',false); + if($count==0){ + // $pdf->SetFont('Arial','BI', $tp); + $pdf->SetFont('Arial', 'B', 8); + + $pdf->SetFillColor(226, 238, 253); // Blue color for the header background + // $pdf->SetFont('Arial', 'B', 9); + $pdf->SetDrawColor(0, 0, 0); + // $pdf->Cell(190,$ht,convertirc(_("Famille")." : ".$beneficiaire['adherent']),0,1,'C',false); + $pdf->Cell(20,$ht,convertirc(_("Assuré")),1,0,'C',true); + $pdf->Cell(20,$ht,convertirc(_("Matricule")),1,0,'C',true); + $pdf->Cell(80,$ht,convertirc(_("Bénéficiaire")),1,0,'C',true); + $pdf->Cell(10,$ht,convertirc(_("Satut")),1,0,'C',true); + $pdf->Cell(10,$ht,convertirc(_("Genre")),1,0,'C',true); + $pdf->Cell(30,$ht,convertirc(_("Date de naissance")),1,0,'C',true); + $pdf->Cell(20,$ht,convertirc(_("Date effet")),1,1,'C',true); + // $pdf->Cell(20,$ht,convertirc(_("Date sortie")),1,1,'C',false); + + $pdf->SetFillColor(255); + + } + $pdf->SetFont('Arial', '', 8); + + + $pdf->Cell(20,$ht,convertirc($beneficiaire['numeroAdherent']),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc($beneficiaire['numeroBeneficiaire']),1,0,'L',false); + $pdf->Cell(80,$ht,convertirc($beneficiaire['beneficiaire']),1,0,'L',false); + $pdf->Cell(10,$ht,convertirc($beneficiaire['codeLienParente']),1,0,'C',false); + $pdf->Cell(10,$ht,convertirc($beneficiaire['sexe']),1,0,'C',false); + $pdf->Cell(30,$ht, dateLang($beneficiaire['dateNaissance'], $_SESSION['lang']),1,0,'C',false); + $pdf->Cell(20,$ht, dateLang($beneficiaire['dateEffet'], $_SESSION['lang']),1,1,'C',false); + + $count++; + if($count == sizeof($groupAdherent)){ + $pdf->Cell(100,$ht,'',0,0,'C',false); + $pdf->SetFont('Arial','B', $tp); + $pdf->Cell(90,$ht,convertirc(_("Effectif famille")." : ".$count),0,1,'R',false); + $pdf->SetFont('Arial','', $tp); + } + + } + } + + $recapCollege = $this->editionpieceavenant_societe->get_edition_emission_recap_college($collegeKey); + // var_dump($recapCollege); + $nbr_assures = 0; + $nbr_conjoints = 0; + $nbr_enfants = 0; + $nbr_geniteurs = 0; + $nbr_autres_conjoints = 0; + $nbr_enfant_sup = 0; + $nbr_autres_parents = 0; + $nbr_ascendants = 0; + $totalCollege = 0; + + // die(); + foreach ($recapCollege as $recap) { + // echo $recap['codeLienParente'] . "\n"; + if($recap['codeLienParente'] =='A') + $nbr_assures = $recap['effectif']; + if($recap['codeLienParente'] =='C') + $nbr_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='D') + $nbr_autres_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='E') + $nbr_enfants = $recap['effectif']; + if($recap['codeLienParente'] =='O') + $nbr_autres_parents = $recap['effectif']; + if($recap['codeLienParente'] =='F') + $nbr_ascendants = $recap['effectif']; + $totalCollege = $nbr_assures + $nbr_conjoints + $nbr_autres_conjoints + $nbr_enfants + $nbr_autres_parents + $nbr_ascendants; + // if($recap['codeLienParente'] =='F') + // $nbr_autres_parents = $recap['effectif']; + } + + $data = array( + array($pdf->convert_utf8('Assuré(e)s : '.format_N($nbr_assures)), $pdf->convert_utf8('Géniteur (Ascendant) : '.format_N($nbr_ascendants)), $pdf->convert_utf8('Autre(s) parent(s) : '.format_N($nbr_autres_parents))), + array('Conjoint(e)s : '.format_N($nbr_conjoints), 'Autres conjoint(es) : '.format_N($nbr_autres_conjoints)), + array('Enfants : '.format_N($nbr_enfants), $pdf->convert_utf8("Enfant(s) supplémentaire(s) : 0 ")), + ); + + $titre = "Effectif collège ".$libelleCollege.' :'.format_N($totalCollege); + $pdf->RecapEffectif($data,$pdf->GetX(),$pdf->GetY(),$titre); + + // echo "\n"; +} + + $recap_police = $this->editionpieceavenant_societe->get_edition_emission_recap_police(); + // var_dump($recap_police); + $nbr_assures = 0; + $nbr_conjoints = 0; + $nbr_enfants = 0; + $nbr_geniteurs = 0; + $nbr_autres_conjoints = 0; + $nbr_enfant_sup = 0; + $nbr_autres_parents = 0; + $nbr_ascendants = 0; + $totalPolice = 0; + + // die(); + foreach ($recap_police as $recap) { + // echo $recap['codeLienParente'] . "\n"; + if($recap['codeLienParente'] =='A') + $nbr_assures = $recap['effectif']; + if($recap['codeLienParente'] =='C') + $nbr_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='D') + $nbr_autres_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='E') + $nbr_enfants = $recap['effectif']; + if($recap['codeLienParente'] =='O') + $nbr_autres_parents = $recap['effectif']; + if($recap['codeLienParente'] =='F') + $nbr_ascendants = $recap['effectif']; + $totalPolice = $nbr_assures + $nbr_conjoints + $nbr_autres_conjoints + $nbr_enfants + $nbr_autres_parents + $nbr_ascendants; + // if($recap['codeLienParente'] =='F') + // $nbr_autres_parents = $recap['effectif']; + } + +// var_dump($detailEmission); +if(sizeof($detailEmission)>0){ + $pdf->Ln(5); + $data = array( + array($pdf->convert_utf8('Assuré(e)s : '.format_N($nbr_assures)), $pdf->convert_utf8('Géniteur (Ascendant) : '.format_N($nbr_ascendants)), $pdf->convert_utf8('Autre(s) parent(s) : '.format_N($nbr_autres_parents))), + array('Conjoint(e)s : '.format_N($nbr_conjoints), 'Autres conjoint(es) : '.format_N($nbr_autres_conjoints)), + array('Enfants : '.format_N($nbr_enfants), $pdf->convert_utf8("Enfant(s) supplémentaire(s) : 0 ")), + ); + + $titre = "Effectif police ".$enteteEmission['numeroPolice'].' :'.format_N($totalPolice); + $pdf->RecapEffectif($data,$pdf->GetX(),$pdf->GetY(),$titre); +} + + + + + + diff --git a/Societes/ric/Tarifs/Controleur/avenants/Etatretraitparpoliceetcollege.php b/Societes/ric/Tarifs/Controleur/avenants/Etatretraitparpoliceetcollege.php new file mode 100755 index 00000000..bfdc3296 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/avenants/Etatretraitparpoliceetcollege.php @@ -0,0 +1,233 @@ +setHeaderData($garant); + + +$ht0 = 8; +$ht = 6; +$tp = 8; +$idCollege = "0"; +$numeroAdherent = ""; +$count = 0; +$rows = 0; +// $detailEmissionRetraits=[]; +$recap_police = []; +$recapCollege = []; +$groupedData=array(); +foreach ($detailEmissionRetraits as $item) { + $collegeKey = $item['idCollege']; + $adherentKey = $item['numeroAdherent']; + + if (!isset($groupedData[$collegeKey])) { + $groupedData[$collegeKey] = []; + } + + if (!isset($groupedData[$collegeKey][$adherentKey])) { + $groupedData[$collegeKey][$adherentKey] = []; + } + + $groupedData[$collegeKey][$adherentKey][] = $item; +} + + +foreach ($groupedData as $collegeKey => $groupCollege) { + $pdf->AddPage(); + $pdf->SetFillColor(226, 238, 253); // Blue color for the header background + $pdf->SetDrawColor(0, 0, 253); // Blue color for the header background + + // $pdf->Cell(190, 7,$pdf->convert_utf8('PRIME AU COMPTANT (à régler à la signature des présentes) '), 1, 1, 'C', true); + $pdf->SetFont('Arial', 'B', 14); + $pdf->SetTextColor(0, 0, 255); + $pdf->MultiCell(195, 5,$pdf->convert_utf8(" + ETAT DES ASSURES ET DEPENDANTS RETIRES PAR POLICE ET PAR COLLEGE + + "), 0, 'C',true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->Ln(5); + $pdf->SetFillColor(255,255,255); // Blue color for the header background + $pdf->SetFont('Arial', 'B', 10); + + $pdf->SetTextColor(128, 0, 255); + $codegarant = $enteteEmission['codeGcAssureur']; + $pdf->Cell(30, 7,$pdf->convert_utf8("Garant "), 0, 0, 'L', true); + $pdf->Cell(20, 7,$pdf->convert_utf8($codegarant), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8($garant), 0, 1, 'L', true); + // $pdf->Cell(40, 7,$pdf->convert_utf8("OBJET DE L'AVENANT "), 0, 0, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->Cell(20, 7,$pdf->convert_utf8("Période du: "), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8(dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])." Au ".dateLang($enteteEmission['dateFin'], $_SESSION['lang'])), 0, 0, 'L', true); + + $pdf->Cell(10, 7,$pdf->convert_utf8("Statut(s) concerné(s): ('A','C','D','E','G','K','X')"), 0, 1, 'L', true); + // $pdf->Ln(20); + + $pdf->SetTextColor(192, 0, 192); + $pdf->Cell(30, 7,$pdf->convert_utf8("Souscripteur "), 0, 0, 'L', true); + $pdf->Cell(20, 7,$pdf->convert_utf8($enteteEmission['souscripteur']), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8($enteteEmission['souscripteur']), 0, 1, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->SetTextColor(0, 0, 128); + $pdf->Cell(30, 7,$pdf->convert_utf8("Police: "), 0, 0, 'L', true); + $pdf->Cell(20, 7,$pdf->convert_utf8($enteteEmission['numeroPolice']), 0, 0, 'L', true); + $pdf->Cell(60, 7,$pdf->convert_utf8($enteteEmission['libellePolice']), 0, 1, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + $pdf->SetTextColor(128, 0, 0); + $pdf->Cell(30, 7,$pdf->convert_utf8("Collège: "), 0, 0, 'L', true); + $libelleCollege = $pdf->findColleLibelleById($detailEmissionRetraits,$collegeKey,'libelleCollege'); + $pdf->Cell(10, 7,$pdf->convert_utf8($pdf->convert_utf8($collegeKey)), 0, 0, 'L', true); + $pdf->Cell(80, 7,$pdf->convert_utf8($pdf->convert_utf8($libelleCollege)), 0, 1, 'L', true); + $pdf->SetTextColor(0, 0, 0); + + foreach ($groupCollege as $adherentKey => $groupAdherent) { + // echo " Subgroup for key2: $adherentKey\n"; + // $pdf->Cell(190,$ht,convertirc($adherentKey),0,1,'C',false); + $count=0; + foreach ($groupAdherent as $beneficiaire) { + // echo " - {$item['adherent']}\n"; + // $pdf->Cell(190,$ht,convertirc($item['adherent']),0,1,'C',false); + // $pdf->Cell(20,$ht,convertirc($beneficiaire['numeroAdherent']),1,0,'C',false); + if($count==0){ + // $pdf->SetFont('Arial','BI', $tp); + $pdf->SetFont('Arial', 'B', 8); + + $pdf->SetFillColor(226, 238, 253); // Blue color for the header background + // $pdf->SetFont('Arial', 'B', 9); + $pdf->SetDrawColor(0, 0, 0); + // $pdf->Cell(190,$ht,convertirc(_("Famille")." : ".$beneficiaire['adherent']),0,1,'C',false); + $pdf->Cell(20,$ht,convertirc(_("Assuré")),1,0,'C',true); + $pdf->Cell(20,$ht,convertirc(_("Matricule")),1,0,'C',true); + $pdf->Cell(60,$ht,convertirc(_("Bénéficiaire")),1,0,'C',true); + $pdf->Cell(10,$ht,convertirc(_("Satut")),1,0,'C',true); + $pdf->Cell(10,$ht,convertirc(_("Genre")),1,0,'C',true); + $pdf->Cell(30,$ht,convertirc(_("Date de naissance")),1,0,'C',true); + $pdf->Cell(20,$ht,convertirc(_("Date effet")),1,0,'C',true); + $pdf->Cell(20,$ht,convertirc(_("Date sortie")),1,1,'C',true); + + $pdf->SetFillColor(255); + + } + $pdf->SetFont('Arial', '', 8); + + + $pdf->Cell(20,$ht,convertirc($beneficiaire['numeroAdherent']),1,0,'C',false); + $pdf->Cell(20,$ht,convertirc($beneficiaire['numeroBeneficiaire']),1,0,'L',false); + $pdf->Cell(60,$ht,convertirc($beneficiaire['beneficiaire']),1,0,'L',false); + $pdf->Cell(10,$ht,convertirc($beneficiaire['codeLienParente']),1,0,'C',false); + $pdf->Cell(10,$ht,convertirc($beneficiaire['sexe']),1,0,'C',false); + $pdf->Cell(30,$ht, dateLang($beneficiaire['dateNaissance'], $_SESSION['lang']),1,0,'C',false); + $pdf->Cell(20,$ht, dateLang($beneficiaire['dateEffet'], $_SESSION['lang']),1,0,'C',false); + $pdf->Cell(20,$ht, dateLang($beneficiaire['dateSortie'], $_SESSION['lang']),1,1,'C',false); + + + $count++; + if($count == sizeof($groupAdherent)){ + $pdf->Cell(100,$ht,'',0,0,'C',false); + $pdf->SetFont('Arial','B', $tp); + $pdf->Cell(90,$ht,convertirc(_("Effectif famille")." : ".$count),0,1,'R',false); + $pdf->SetFont('Arial','', $tp); + } + + } + } + + $recapCollege = $this->editionpieceavenant_societe->get_edition_emission_recap_college_retrait($collegeKey); + // var_dump($recapCollege); + $nbr_assures = 0; + $nbr_conjoints = 0; + $nbr_enfants = 0; + $nbr_geniteurs = 0; + $nbr_autres_conjoints = 0; + $nbr_enfant_sup = 0; + $nbr_autres_parents = 0; + $nbr_ascendants = 0; + $totalCollege = 0; + + // die(); + foreach ($recapCollege as $recap) { + // echo $recap['codeLienParente'] . "\n"; + if($recap['codeLienParente'] =='A') + $nbr_assures = $recap['effectif']; + if($recap['codeLienParente'] =='C') + $nbr_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='D') + $nbr_autres_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='E') + $nbr_enfants = $recap['effectif']; + if($recap['codeLienParente'] =='O') + $nbr_autres_parents = $recap['effectif']; + if($recap['codeLienParente'] =='F') + $nbr_ascendants = $recap['effectif']; + $totalCollege = $nbr_assures + $nbr_conjoints + $nbr_autres_conjoints + $nbr_enfants + $nbr_autres_parents + $nbr_ascendants; + // if($recap['codeLienParente'] =='F') + // $nbr_autres_parents = $recap['effectif']; + } + + $data = array( + array($pdf->convert_utf8('Assuré(e)s : '.format_N($nbr_assures)), $pdf->convert_utf8('Géniteur (Ascendant) : '.format_N($nbr_ascendants)), $pdf->convert_utf8('Autre(s) parent(s) : '.format_N($nbr_autres_parents))), + array('Conjoint(e)s : '.format_N($nbr_conjoints), 'Autres conjoint(es) : '.format_N($nbr_autres_conjoints)), + array('Enfants : '.format_N($nbr_enfants), $pdf->convert_utf8("Enfant(s) supplémentaire(s) : 0 ")), + ); + + $titre = "Effectif collège ".$libelleCollege.' :'.format_N($totalCollege); + $pdf->RecapEffectif($data,$pdf->GetX(),$pdf->GetY(),$titre); + + // echo "\n"; +} + + $recap_police = $this->editionpieceavenant_societe->get_edition_emission_recap_police_retraits(); + // var_dump($recap_police); + $nbr_assures = 0; + $nbr_conjoints = 0; + $nbr_enfants = 0; + $nbr_geniteurs = 0; + $nbr_autres_conjoints = 0; + $nbr_enfant_sup = 0; + $nbr_autres_parents = 0; + $nbr_ascendants = 0; + $totalPolice = 0; + + // die(); + foreach ($recap_police as $recap) { + // echo $recap['codeLienParente'] . "\n"; + if($recap['codeLienParente'] =='A') + $nbr_assures = $recap['effectif']; + if($recap['codeLienParente'] =='C') + $nbr_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='D') + $nbr_autres_conjoints = $recap['effectif']; + if($recap['codeLienParente'] =='E') + $nbr_enfants = $recap['effectif']; + if($recap['codeLienParente'] =='O') + $nbr_autres_parents = $recap['effectif']; + if($recap['codeLienParente'] =='F') + $nbr_ascendants = $recap['effectif']; + $totalPolice = $nbr_assures + $nbr_conjoints + $nbr_autres_conjoints + $nbr_enfants + $nbr_autres_parents + $nbr_ascendants; + // if($recap['codeLienParente'] =='F') + // $nbr_autres_parents = $recap['effectif']; + } + + + +// $pdf->RecapEffectif($data,$pdf->GetX(),$pdf->GetY(),$titre); + + +if(sizeof($detailEmissionRetraits)>0){ + $pdf->Ln(5); + $data = array( + array($pdf->convert_utf8('Assuré(e)s : '.format_N($nbr_assures)), $pdf->convert_utf8('Géniteur (Ascendant) : '.format_N($nbr_ascendants)), $pdf->convert_utf8('Autre(s) parent(s) : '.format_N($nbr_autres_parents))), + array('Conjoint(e)s : '.format_N($nbr_conjoints), 'Autres conjoint(es) : '.format_N($nbr_autres_conjoints)), + array('Enfants : '.format_N($nbr_enfants), $pdf->convert_utf8("Enfant(s) supplémentaire(s) : 0 ")), + ); + +$titre = "Effectif police ".$enteteEmission['numeroPolice'].' :'.format_N($totalPolice); +$pdf->RecapEffectif($data,$pdf->GetX(),$pdf->GetY(),$titre); +} + + + + + + diff --git a/Societes/ric/Tarifs/Controleur/avenants/Fpdf.php b/Societes/ric/Tarifs/Controleur/avenants/Fpdf.php new file mode 100755 index 00000000..51f6ba13 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/avenants/Fpdf.php @@ -0,0 +1,569 @@ +police_societe = new Police_sodciete(); +$idPolice = $_SESSION['idPolice_C']; + +// $codeGarant = $this->police_societe->getcodeGarant($idPolice); +// $codeGcAssureur = $codeGarant['codeGcAssureur']; +// $infosDuGarant = $this->police_societe->getInfosGarant($codeGcAssureur); + +$enteteEmission = $this->editionpieceavenant_societe->get_edition_emission_entete(); +$detailEmission = $this->editionpieceavenant_societe->get_edition_emission_detail(); +$detailEmissionRetraits = $this->editionpieceavenant_societe->get_edition_emission_detail_retrait(); +// var_dump($detailEmissionRetraits); +// var_dump($detailEmission); + +class PDF extends FPDF { + private $headerData; + function Header() { + + $this->SetFont('helvetica', '', 8); + + + $dateEtHeure = date("d/m/Y H:i:s"); + + $this->Cell(80, 10, $this->headerData, 0,0,'L',false,''); + + $this->SetX(110); + + $this->Cell(80, 10, 'Edition du : '.$dateEtHeure, 0,0,'R',false,''); + + $this->Ln(10); + + + } + public function setHeaderData($title) { + $this->headerData = $title; + } + + function Footer() { + $this->SetY(-15); + $this->SetFont('Arial', 'I', 8); + $this->Cell(0, 10, 'Page ' . $this->PageNo(), 0, 0, 'C'); + } + + // function CreateTable($header, $data) { + // // Table header + // $this->SetFont('Arial', 'B', 10); + // foreach ($header as $col) { + // $this->Cell(30, 10, $col, 1); + // } + // $this->Ln(); + + // // Table data + // $this->SetFont('Arial', '', 10); + // foreach ($data as $row) { + // foreach ($row as $col) { + // $this->Cell(30, 10, $col, 1); + // } + // $this->Ln(); + // } + // } + + + function PageTitle($title) { + // Set background color + // Set font and font size + $this->SetFont('Arial', 'B', 16); + + // Calculate the width of the title + $titleWidth = $this->GetStringWidth($title); + + // Calculate the X coordinate to center the title + $x = (210 - $titleWidth) / 2; // Assuming standard page width (210 units) + + // Move to the calculated X coordinate + $this->SetX($x); + + // Add the centered title + $this->Cell($this->w/2, 15, $title, 1, 0, 'C', false); + } + + function AddTableHeader() { + // Set background color for the table header + $this->SetFillColor(226, 238, 253); // RGB values for blue + $this->SetTextColor(0, 0, 0); // RGB values for white text + $this->SetFont('Arial', 'B', 12); + + // Create table header cells + $this->Cell(190, 10, 'Conditions particulieres', 1, 0, 'C', true); + $this->Ln(); + $this->Ln(); + + // Reset background color and text color for the content + $this->SetFillColor(255, 255, 255); // Reset to default white background + $this->SetTextColor(0, 0, 0); // Reset to default black text + } + + function AddTableRow($col1, $col2) { + // Add data to the table + $this->Cell(40, 10, $col1, 1); + $this->Cell(45, 10, $col2, 1); + + $this->Cell(40, 10, $col1, 1); + $this->Cell(45, 10, $col2, 1); + } + + function CreateTableConditionParticulieres($data, $x, $y,$borderColor, $verticalColor, $horizontalColor) { + // $this->Ln(10); + + $this->SetX($x); + $this->SetFont('Arial', '', 9); + + // Set the border color + + // Header row with blue background + $this->SetFillColor(226, 238, 253); + // $this->SetTextColor(0); // White text + $this->SetFont('Arial', 'B', 12); + + $this->Cell(190, 9,'CONDITIONS PARTICULIERES ', 1, 1, 'C', true); + $this->Ln(5); + $this->SetDrawColor($borderColor[0], $borderColor[1], $borderColor[2]); + // Set vertical border color + // $this->SetDrawColor($verticalColor[0], $verticalColor[1], $verticalColor[2]); + + // $this->Ln(); // Move to the next line for the data + + // Reset colors and font for data rows + $this->SetFillColor(255); // Reset background color + $this->SetTextColor(0); // Reset text color + $this->SetFont('Arial', '', 9); + + foreach ($data as $row) { + // Set horizontal border color + // $this->SetDrawColor($horizontalColor[0], $horizontalColor[1], $horizontalColor[2]); + for ($i = 0; $i < count($row); $i++) { + + if($i==0){ + $parties = explode(":", $row[$i]); + $key= $parties[0]; + $val= $parties[1]; + + $this->SetFont('Arial', '', 10); + $this->Cell(35, 10, $key, 1); + + $this->SetFont('Arial', 'B', 10); + $this->Cell(60, 10, ': '.$val, 1); + + + } + else{ + $parties = explode(":", $row[$i]); + $key= $parties[0]; + $val= $parties[1]; + + $this->SetFont('Arial', '', 10); + $this->Cell(45, 10, $key, 1); + + $this->SetFont('Arial', 'B', 10); + $this->Cell(50, 10, ': '.$val, 1); + + } + $this->SetFont('Arial', '', 10); + + + + } + $this->Ln(); // Move to the next line for the next row + } + // Reset the border color to default (black) + $this->SetDrawColor(0, 0, 0); + } + + + + + function RecapEffectif($data, $x, $y,$titre) { + // $this->Ln(10); + + $this->SetX($x); + $this->SetFont('Arial', '', 10); + + // Set the border color + + // Header row with blue background + // $this->SetFillColor(255, 255, 255); + $this->SetTextColor(128,0,0); // White text + $this->SetFont('Arial', 'B', 10); + // Set the current position + // $this->SetX(20); + // $this->SetY(30); + + // Create a rectangle at the current position + $this->Rect($x, $y-1, 190, 39, 'D'); + $this->Cell(180, 9,$this->convert_utf8($titre), 0, 1, 'L', true); + $this->SetTextColor(0); // White text + + // $this->Ln(5); + $this->SetDrawColor(0); + // Set vertical border color + // $this->SetDrawColor($verticalColor[0], $verticalColor[1], $verticalColor[2]); + + // $this->Ln(); // Move to the next line for the data + + // Reset colors and font for data rows + $this->SetFillColor(255); // Reset background color + $this->SetTextColor(0); // Reset text color + $this->SetFont('Arial', '', 10); + + foreach ($data as $row) { + // Set horizontal border color + // $this->SetDrawColor($horizontalColor[0], $horizontalColor[1], $horizontalColor[2]); + for ($i = 0; $i < count($row); $i++) { + + if($i==0){ + $parties = explode(":", $row[$i]); + $key= $parties[0]; + $val= $parties[1]; + $this->SetFont('Arial', '', 10); + $this->Cell(30, 10, $key, 0); + $this->SetFont('Arial', 'B', 10); + $this->Cell(30, 10, ': '.$val, 0); + } + else if($i==1){ + $parties = explode(":", $row[$i]); + $key= $parties[0]; + $val= $parties[1]; + $this->SetFont('Arial', '', 10); + $this->Cell(50, 10, $key, 0); + $this->SetFont('Arial', 'B', 10); + $this->Cell(30, 10, ': '.$val, 0); + } + else{ + $parties = explode(":", $row[$i]); + $key= $parties[0]; + $val= $parties[1]; + $this->SetFont('Arial', '', 10); + $this->Cell(30, 10, $key, 0); + $this->SetFont('Arial', 'B', 10); + $this->Cell(25, 10, ': '.$val, 0); + } + $this->SetFont('Arial', '', 10); + + + + } + $this->Ln(); // Move to the next line for the next row + } + // Reset the border color to default (black) + $this->SetDrawColor(0, 0, 0); + } + + function findColleLibelleById($list, $id, $field) { + foreach ($list as $item) { + if ($item['idCollege'] == $id) { + return $item[$field]; + } + } + + // Return null if ID is not found + return null; + } + + + + + + function convert_utf8($text){ + return iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $text); + } + + function CreatePrimeTableHeader() { + $this->SetFillColor(226, 238, 253); // Blue color for the header background + $this->SetFont('Arial', 'B', 8); + $this->SetDrawColor(0, 0, 0); + + + // Create header cells + + $headers = array($this->convert_utf8("Période d'assurance"), 'Prime nette', 'Prime additionnelle', 'Accessoires', 'Taxe', 'Prime totale'); + $count = 0; + foreach ($headers as $header) { + if($count ==0){ + $this->Cell(45, 9, $header, 1, 0, 'C', true); // Border around each cell with blue background + } + else{ + $this->Cell(29, 9, $header, 1, 0, 'C', true); + } + $count++; + } + + $this->Ln(); // Move to the next line for the data + } + + function CreatePrimeTable($debut,$fin,$enteteEmission) { + // Set font and fill color + $this->SetFont('Arial', '',8); + $this->SetFillColor(255); // Reset fill color to white + + // Sample data for the table + // $periode = 'Du '.$debut.' Au '.$fin; + $periode = $debut.' Au '.$fin; + + $data = array($periode, format_N($enteteEmission['primeNette']), '........', format_N($enteteEmission['accessoire']), format_N($enteteEmission['taxe']), format_N($enteteEmission['primeTtc'])); + $this->SetFont('Arial', 'B', 8); + // Create data cells + $count = 0; + $isLn=0; + foreach ($data as $cell) { + if($count == sizeof($data)-1) + $isLn=1; + // $this->Cell(32, 8, $cell, 1); + // $this->MultiCell(0, 10, $cell); + if($count ==0){ + // $this->Cell(40, 12, $cell, 1, $isLn, 'C', true); // Border around each cell with blue background + $this->Cell(45, 9, $cell, 1, $isLn, 'C', true); // + // $this->MultiCell(40, 5,$this->convert_utf8($cell), 0, 'L',false); + } + else{ + $this->Cell(29, 9, $cell, 1, $isLn, 'C', true); + } + $count++; + // $this->Ln(); + } + $this->SetFont('Arial', '', 8); + + + $this->Ln(3); // Move to the next line for the next row + } + + + function CreateDetailFamilleTable($data){ + + $this->SetFillColor(226, 238, 253); // Blue color for the header background + $this->SetFont('Arial', 'B', 9); + $this->SetDrawColor(0, 0, 0); + + + // Create header cells + + $headers = array($this->convert_utf8("Assuré(s)"), 'Matricule', 'Souscripteur', 'Nom', $this->convert_utf8('Prénoms'), 'Statut', 'Genre', $this->convert_utf8('Né(e) le'), $this->convert_utf8("Date d'éffet")); + $count = 0; + foreach ($headers as $header) { + if($count ==4){ + $this->Cell(30, 12, $header, 1, 0, 'C', true); // Border around each cell with blue background + } + else{ + $this->Cell(20, 12, $header, 1, 0, 'C', true); + } + $count++; + } + + $this->Ln(); // Move to the next line for the data + + // Set font and fill color + $this->SetFont('Arial', '',8); + $this->SetFillColor(255); // Reset fill color to white + + // Sample data for the table + // $periode = 'Du '.$debut.' Au '.$fin; + // $periode = $debut.' Au '.$fin; + + + + $this->SetFont('Arial', 'B', 7); + $count = 0; + $isLn=0; + foreach ($data as $row) { + $count = 0; + foreach ($row as $col) { + // $this->Cell(20, 10, $col, 1); + + if($count ==4){ + $this->Cell(30, 8, $col, 1, $isLn, 'C', true); // + } + else{ + $this->Cell(20, 8, $col, 1, $isLn, 'C', true); + } + $count ++; + } + $this->Ln(); // Move to the next line after each row + } + + // $this->Cell(150, 8, '', 0, 1, 'C', true); // + $this->Ln(1); + $this->Cell(40, 8, 'Effectif famille: '.sizeof($data), 0, 1, 'L', true); // + + $this->SetFont('Arial', '', 8); + + + $this->Ln(3); // Move to the next line for the next row + + } + + + + function CreateDetailFamilleEntete(){ + $this->Ln(20); // Move to the next line for the next row + + $this->SetFillColor(226, 238, 253); // Blue color for the header background + $this->SetFont('Arial', 'B', 9); + $this->SetDrawColor(0, 0, 0); + // Create header cells + $headers = array($this->convert_utf8("Assuré(s)"), 'Matricule', 'Souscripteur', 'Nom', $this->convert_utf8('Prénoms'), 'Statut', 'Genre', $this->convert_utf8('Né(e) le'), $this->convert_utf8("Date d'éffet")); + $count = 0; + foreach ($headers as $header) { + if($count ==4){ + $this->Cell(30, 12, $header, 1, 0, 'C', true); // Border around each cell with blue background + } + else{ + $this->Cell(20, 12, $header, 1, 0, 'C', true); + } + $count++; + } + $this->Ln(3); // Move to the next line for the next row + } + + function CreateDetailFamilleRow($data){ + $this->SetFont('Arial', 'B', 9); + $this->SetDrawColor(0, 0, 0); + // Set font and fill color + $this->SetFont('Arial', '',8); + $this->SetFillColor(255); // Reset fill color to white + + // Sample data for the table + // $periode = 'Du '.$debut.' Au '.$fin; + // $periode = $debut.' Au '.$fin; + + + + $this->SetFont('Arial', 'B', 7); + $count = 0; + $isLn=0; + foreach ($data as $row) { + $count = 0; + foreach ($row as $col) { + // $this->Cell(20, 10, $col, 1); + + if($count ==4){ + $this->Cell(30, 8, $col, 1, $isLn, 'C', true); // + } + else{ + $this->Cell(20, 8, $col, 1, $isLn, 'C', true); + } + $count ++; + } + $this->Ln(); // Move to the next line after each row + } + + // $this->Cell(150, 8, '', 0, 1, 'C', true); // + $this->Ln(1); + $this->Cell(40, 8, 'Effectif famille: '.sizeof($data), 0, 1, 'L', true); // + + $this->SetFont('Arial', '', 8); + + + $this->Ln(3); // Move to the next line for the next row + + } + + + function CreateTablePrimeTerme($debut,$fin) { + // Set font + // $this->Ln(); + // $this->Ln(); + + $this->SetFont('Arial', '', 9); + + // Add table header + // $this->Cell(190, 4,'', 0, 1, 'C', true); + $this->Cell(190, 8,'PRIME TERME (prochaine prime)', 1, 1, 'C', true); + $this->SetFont('Arial', 'B', 9); + + $periode = $debut.' Au '.$fin; + $this->Cell(45, 16,$periode, 1, 0, 'C', true); + $this->Cell(29, 16,'..............', 1, 0, 'C', true); + $this->Cell(29, 16,'..............', 1, 0, 'C', true); + + // $this->Cell(30, 12,"(Prime de base peut être modifiée par rapport à la réelle + // vraiment assuré, l'application de la clause + // d'ajustement et le niveau de taux en vigueur) + // ", 1, 0, 'C', true); + + // $this->SetFillColor(255, 255, 255); // Red color + + + + // $this->Cell(90, 24,"", 1, 0, 'C', true); + // Set the coordinates for the last cell + // $this->SetXY(20, $this->GetY() + 10); // Move to the next line + $this->SetFont('Arial', '',9); + + // Last cell as a MultiCell + $this->MultiCell(87, 4,$this->convert_utf8("(Prime de base peut être modifié par rapport à la réelle vraiment assuré, l'application de la clause d'ajustement et le niveau de taux en vigueur) + "), 1, 'L'); + + // $this->Rect($this->GetX()-80, $this->GetY(), 90, 5, 'D'); + // $this->Cell(40,24,"(Prime de base peut être modifié par rapport à la réelle",); + // Set initial position + // $x = 151; + // $y = 180; + $this->SetFont('Arial', '', 8); + + // $this->SetXY(151, 180); + // $this->Cell(40, 16, $this->convert_utf8('(Prime de base peut être modifié par')); + + // $this->SetXY(151, 182); + + // $this->Cell(40, 16, $this->convert_utf8('(rapport à la réelle à la réelle vraiment')); + // $this->SetXY(151, 184); + + // $this->Cell(40, 16, $this->convert_utf8("( assuré , l'application de la clause")); + // $this->SetXY(151, 186); + + // $this->Cell(40, 16, $this->convert_utf8("d'ajustement et le niveau de taux en")); + + // $this->SetXY(151, 188); + + // $this->Cell(40, 16, $this->convert_utf8("vigueur)")); + + // $this->SetXY(175, 180); + // $this->SetFont('Arial', '', 12); + // $this->Cell(40, 10, 'Cell 1'); + // $this->Ln(3); // Move to the next line for the next row + + +} + +function CreateTablePrimeAnnuelle() { + // Set font + // $this->Ln(); + $this->SetFont('Arial', 'B', 16); + + + $this->SetFillColor(255, 255, 255); // White background + $this->SetDrawColor(255, 255, 255); // White color + $this->SetFont('Arial', '', 10); + + $this->Cell(45, 24,'Prime annuelle', 1, 0, 'C', true); + $this->SetFont('Arial', '', 9); + + $this->SetDrawColor(0, 0, 0); // White color + $this->SetFont('Arial', 'B', 9); + + $this->Cell(29, 24,'.............', 1, 0, 'R', true); + $this->Cell(29, 24,'..............', 1, 0, 'C', true); + // $this->Cell(90, 24,"", 1, 0, 'C', true); + $this->SetFont('Arial', '',9); + + $this->MultiCell(88, 6,$this->convert_utf8("(Prime de base peut être modifié par rapport à la réelle vraiment assuré, l'application de la clause d'ajustement et le niveau de taux en vigueur) + "), 1, 'L'); + $this->SetFont('Arial', '', 8); + $this->Ln(3); + +} + +function commenceParVoyelle($chaine) { + $voyelles = array('a', 'e', 'i', 'o', 'u', 'y'); // Ajoutez 'y' si vous souhaitez le considérer comme une voyelle + + $premierCaractere = mb_strtolower(mb_substr($chaine, 0, 1)); + + return in_array($premierCaractere, $voyelles); +} +} + +?> \ No newline at end of file diff --git a/Societes/ric/Tarifs/Controleur/avenants/Piedavenant.php b/Societes/ric/Tarifs/Controleur/avenants/Piedavenant.php new file mode 100755 index 00000000..1abaf7b3 --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/avenants/Piedavenant.php @@ -0,0 +1,56 @@ +police_societe = new Police_sodciete(); + // $idPolice = $_SESSION['idPolice_C']; + + // $codeGarant = $this->police_societe->getcodeGarant($idPolice); + // $codeGcAssureur = $codeGarant['codeGcAssureur']; + // $infosDuGarant = $this->police_societe->getInfosGarant($codeGcAssureur); + + // // Un peu d'espace avant le pied + // $pdf->Ln(5); + + // $pdf->SetFont('Arial','BI', $tp); + + // if (est_anglophone()) + // { + // $pdf->Cell(0,$ht,convertirc("Done at " . $_SESSION['villeSociete'].", on ".dateCouranteLang($_SESSION['lang'])),0,1,'C',false); + // } + // else + // { + // $pdf->Cell(0,$ht,convertirc("Fait à " . $_SESSION['villeSociete'].", le ".dateCouranteLang($_SESSION['lang'])),0,1,'C',false); + // } + + // $pdf->Ln(10); + + // $pdf->SetFont('Arial','BU', $tp); + + // $pdf->Cell(0,$ht,convertirc(_("Le Souscripteur")),0,0,'L',false); + + // $pdf->Cell(0,$ht,convertirc(_("Pour le Gestionnaire")),0,0,'R',false); + + $nomEtatAvenant = $_SESSION['nomEtatAvenant']; + // if ($infosDuGarant['typeGarant']=="1"){ + // if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png')){ + // $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_'.strtolower($codeGcAssureur).'.png',10,270,190); + // } + // }else{ + // if (file_exists($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_vitalis.jpg')){ + // $pdf->Image($_SESSION['dossierSociete'].'/Tarifs/Img/garants/pied_vitalis.jpg',10,270,190); + // } + // } + // // créatiob du fichier + // // $fichier="Temp/TMP_Edition_Avenant"."_".uniqid().".pdf"; + $fichier="Temp/TMP_" . $nomEtatAvenant . "_".uniqid().".pdf"; + + $pdf->Output($fichier,"F"); + + $t_html ='
      '; + $t_html .=' TELECHARGER '; + $t_html .='
      diff --git a/Societes/ric/Tarifs/Controleur/avenants/SuiteConditionparticulieres.php b/Societes/ric/Tarifs/Controleur/avenants/SuiteConditionparticulieres.php new file mode 100755 index 00000000..ec9d061a --- /dev/null +++ b/Societes/ric/Tarifs/Controleur/avenants/SuiteConditionparticulieres.php @@ -0,0 +1,126 @@ +setHeaderData($garant); + +$pdf->AddPage(); + + +$pdf->SetFillColor(221, 255, 255); // Blue color for the header background + + +// $pdf->Cell(190, 7,$pdf->convert_utf8('PRIME AU COMPTANT (à régler à la signature des présentes) '), 1, 1, 'C', true); +$pdf->SetFont('Arial', 'B', 10); +// $pdf->MultiCell(195, 5,$pdf->convert_utf8(" +// SUITE DES CONDITIONS PARTICULIERES DE L’AVENANT N°".$enteteEmission['numeroAvenant']." A LA POLICE N°".$enteteEmission['numeroPolice']." SOUSCRITE PAR ".$souscripteur." AUPRES DE ".$garant." + +// "), 1, 'C',true); + + +$pdf->MultiCell(195, 5,$pdf->convert_utf8(" +SUITE DES CONDITIONS PARTICULIERES DE LA POLICE N°".$enteteEmission['numeroPolice']." SOUSCRITE PAR ".$souscripteur." AUPRES DE ".$garant." + +"), 1, 'C',true); + +$pdf->Ln(5); + +// $x = $pdf->GetX(); +// $y = $pdf->GetY(); +// $pdf->SetLineWidth(0.5); +// $pdf->Line($x, $y + 10, $pdf->GetX(), $y + 10); + +$pdf->SetFillColor(255,255,255); // Blue color for the header background + +// $pdf->Cell(190, 7,$pdf->convert_utf8("OBJET DE L'AVENANT "), 0, 1, 'L', true); +$pdf->Cell(190, 7,$pdf->convert_utf8("OBJET "), 0, 1, 'L', true); + +$pdf->SetFont('Arial', '', 10); +// $enteteEmission['dateEffet'],$enteteEmission['dateFin'] +// dateLang($entete['dateEffetPolice'], $_SESSION['lang']). +// $pdf->MultiCell(195, 5,$pdf->convert_utf8(" +// Le présent avenant a pour objet la régularisation des incorporations et des retraits du contrat de la période du ".dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])." au ".dateLang($enteteEmission['dateFin'], $_SESSION['lang'])." +// "), 0, 'L',false); +$pdf->MultiCell(195, 5,$pdf->convert_utf8(" +Le présent document a pour objet la régularisation des incorporations et des retraits du contrat de la période du ".dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])." au ".dateLang($enteteEmission['dateFin'], $_SESSION['lang'])." +"), 0, 'L',false); +$pdf->SetFont('Arial', 'B', 10); +$pdf->Ln(); +$pdf->Cell(190, 7,$pdf->convert_utf8("PRIME "), 0, 1, 'L', true); + +$pdf->Cell(10, 7,$pdf->convert_utf8(""), 0, 0, 'L', true); +$pdf->Cell(180, 7,$pdf->convert_utf8("PRIME NETTE ANNUELLE "), 0, 1, 'L', true); + +$pdf->SetFont('Arial', '', 10); + +$pdf->Cell(190, 7,$pdf->convert_utf8("Les garanties du présent contrat sont accordées moyennant les primes ci-après :"), 0, 1, 'L', true); + +$pdf->SetDrawColor(0,0,0); // Blue color for the header background + +$pdf->Cell(44, 7,$pdf->convert_utf8("Collège"), 1, 0, 'C', true); +$pdf->Cell(52, 7,$pdf->convert_utf8("Nombre de bénéficiaires"), 1, 0, 'C', true); +$pdf->Cell(57, 7,$pdf->convert_utf8("Prime annuelle par personne"), 1, 0, 'C', true); +$pdf->Cell(41, 7,$pdf->convert_utf8("Total"),1, 1, 'C', true); + +$pdf->Cell(44, 7,$pdf->convert_utf8("............"), 1, 0, 'C', true); +$pdf->Cell(52, 7,$pdf->convert_utf8("............"), 1, 0, 'C', true); +$pdf->Cell(57, 7,$pdf->convert_utf8("............"), 1, 0, 'C', true); +$pdf->Cell(41, 7,$pdf->convert_utf8("............."),1, 1, 'C', true); + +$pdf->Cell(44, 7,$pdf->convert_utf8("............."), 1, 0, 'C', true); +$pdf->Cell(52, 7,$pdf->convert_utf8(".............."), 1, 0, 'C', true); +$pdf->Cell(57, 7,$pdf->convert_utf8(".............."), 1, 0, 'C', true); +$pdf->Cell(41, 7,$pdf->convert_utf8("..............."),1, 1, 'C', true); + +$pdf->Cell(153, 7,$pdf->convert_utf8("TOTAL PRIME NETTE ANNUELLE"), 1, 0, 'C', true); +$pdf->Cell(41, 7,$pdf->convert_utf8("................"), 1, 1, 'C', true); +$pdf->Ln(5); + +$pdf->SetFont('Arial', 'B', 10); +$pdf->Cell(10, 7,$pdf->convert_utf8(""), 0, 0, 'L', true); +$pdf->Ln(5); +$pdf->Cell(180, 7,$pdf->convert_utf8("PRIME A REGLER A LA SIGNATURE DE LA POLICE "), 0, 1, 'L', true); +$pdf->SetFont('Arial', '', 10); +// $pdf->MultiCell(87, 6,$pdf->convert_utf8($pdf->convert_utf8("La prime est payable en une seule fois. +// Le souscripteur réglera à la signature du présent avenant la somme totale de 4 437 345 F.CFA pour la période d’assurance du 1er Janvier au 31 Décembre 2023 décomptée ci-dessous : +// ")), 1, 'L'); + +// $pdf->Cell(190, 7,$pdf->convert_utf8("La prime est payable en une seule fois. +// Le souscripteur réglera à la signature du présent avenant la somme totale de 4 437 345 F.CFA pour la période d’assurance du 1er Janvier au 31 Décembre 2023 décomptée ci-dessous :"), 0, 1, 'L', true); + +$pdf->MultiCell(195, 5,$pdf->convert_utf8(" +La prime est payable en une seule fois. +Le souscripteur réglera à la signature du présent avenant la somme totale de ........... F.CFA pour la période d’assurance du 1er Janvier au 31 Décembre 2023 décomptée ci-dessous :"), 0, 'L',false); +$pdf->Ln(); +$pdf->Cell(150, 7,$pdf->convert_utf8("Prime nette d’incorporation du ".dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])." au ".dateLang($enteteEmission['dateFin'], $_SESSION['lang']).""), 1, 0, 'C', true); +$pdf->Cell(40, 7,$pdf->convert_utf8("........."), 1, 1, 'C', true); + +$pdf->Cell(150, 7,$pdf->convert_utf8("Prime nette de retrait du ".dateLang($enteteEmission['dateEffet'], $_SESSION['lang'])." au ".dateLang($enteteEmission['dateFin'], $_SESSION['lang']).""), 1, 0, 'C', true); +$pdf->Cell(40, 7,$pdf->convert_utf8("..............."), 1, 1, 'C', true); + +$pdf->Cell(150, 7,$pdf->convert_utf8("Prime nette à percevoir"), 1, 0, 'C', true); +$pdf->Cell(40, 7,format_N($enteteEmission['primeNette']), 1, 1, 'C', true); + +$pdf->Cell(150, 7,$pdf->convert_utf8("Accessoires"), 1, 0, 'C', true); +$pdf->Cell(40, 7,format_N($enteteEmission['accessoire']), 1, 1, 'C', true); + +$pdf->Cell(150, 7,$pdf->convert_utf8("Taxe"), 1, 0, 'C', true); +$pdf->Cell(40, 7,format_N($enteteEmission['taxe']), 1, 1, 'C', true); + +$pdf->Cell(150, 7,$pdf->convert_utf8("PRIME TOTALE A PERCEVOIR"), 1, 0, 'C', true); +$pdf->Cell(40, 7,format_N($enteteEmission['primeTtc']), 1, 1, 'C', true); +$pdf->Ln(); +$pdf->MultiCell(195, 5,$pdf->convert_utf8("IL N’EST PAS AUTREMENT DEROGE AUX CLAUSES ET CONDITIONS DE LA POLICE ET DES AVENANTS PRECEDENTS."), 0, 'L',false); +$pdf->SetDrawColor('255','255','255'); +$pdf->Cell(120, 7,$pdf->convert_utf8(""), 1, 0, 'C', true); +$pdf->SetFont('Arial', '', 8); +$pdf->Cell(70, 7,$pdf->convert_utf8("Etabli en 2 exemplaires originaux "), 1, 1, 'C', true); +$pdf->Cell(120, 7,$pdf->convert_utf8(""), 1, 0, 'C', true); +$pdf->Cell(70, 7,$pdf->convert_utf8("à Abidjan, le ".date("d/m/Y H:i:s")), 1, 1, 'C', true); + +$pdf->SetFont('Arial', 'B', 11); + +$pdf->Cell(50, 7,'LE SOUSCRIPTEUR ',0, 0, 'L'); +$pdf->Cell(95, 7,' ',0, 0, ''); +$pdf->Cell(50, 7,'LA COMPAGNIE ',0, 1, 'L'); + + + diff --git a/Societes/ric/Tarifs/Img/1.jpg b/Societes/ric/Tarifs/Img/1.jpg new file mode 100755 index 00000000..78ea2866 Binary files /dev/null and b/Societes/ric/Tarifs/Img/1.jpg differ diff --git a/Societes/ric/Tarifs/Img/cadredetailsstats.jpg b/Societes/ric/Tarifs/Img/cadredetailsstats.jpg new file mode 100755 index 00000000..c100f687 Binary files /dev/null and b/Societes/ric/Tarifs/Img/cadredetailsstats.jpg differ diff --git a/Societes/ric/Tarifs/Img/favicon.png b/Societes/ric/Tarifs/Img/favicon.png new file mode 100755 index 00000000..e1fc9969 Binary files /dev/null and b/Societes/ric/Tarifs/Img/favicon.png differ diff --git a/Societes/ric/Tarifs/Img/garants/logo_ACTIVA.jpg b/Societes/ric/Tarifs/Img/garants/logo_ACTIVA.jpg new file mode 100755 index 00000000..b3afe815 Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/logo_ACTIVA.jpg differ diff --git a/Societes/ric/Tarifs/Img/garants/logo_ASSUREUR TEST PROSPECT.jpg b/Societes/ric/Tarifs/Img/garants/logo_ASSUREUR TEST PROSPECT.jpg new file mode 100755 index 00000000..b3afe815 Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/logo_ASSUREUR TEST PROSPECT.jpg differ diff --git a/Societes/ric/Tarifs/Img/garants/logo_allianzci.png b/Societes/ric/Tarifs/Img/garants/logo_allianzci.png new file mode 100755 index 00000000..90e77179 Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/logo_allianzci.png differ diff --git a/Societes/ric/Tarifs/Img/garants/logo_amsa.png b/Societes/ric/Tarifs/Img/garants/logo_amsa.png new file mode 100755 index 00000000..94a091fd Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/logo_amsa.png differ diff --git a/Societes/ric/Tarifs/Img/garants/logo_garant.png b/Societes/ric/Tarifs/Img/garants/logo_garant.png new file mode 100755 index 00000000..12dae131 Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/logo_garant.png differ diff --git a/Societes/ric/Tarifs/Img/garants/logo_gna.png b/Societes/ric/Tarifs/Img/garants/logo_gna.png new file mode 100755 index 00000000..2ec75a11 Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/logo_gna.png differ diff --git a/Societes/ric/Tarifs/Img/garants/logo_gna1.png b/Societes/ric/Tarifs/Img/garants/logo_gna1.png new file mode 100755 index 00000000..413ceeb5 Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/logo_gna1.png differ diff --git a/Societes/ric/Tarifs/Img/garants/logo_mci.png b/Societes/ric/Tarifs/Img/garants/logo_mci.png new file mode 100755 index 00000000..90e77179 Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/logo_mci.png differ diff --git a/Societes/ric/Tarifs/Img/garants/logo_mcicareci.png b/Societes/ric/Tarifs/Img/garants/logo_mcicareci.png new file mode 100755 index 00000000..28285349 Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/logo_mcicareci.png differ diff --git a/Societes/ric/Tarifs/Img/garants/logo_nsia.png b/Societes/ric/Tarifs/Img/garants/logo_nsia.png new file mode 100755 index 00000000..87cf2592 Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/logo_nsia.png differ diff --git a/Societes/ric/Tarifs/Img/garants/logo_sidam.png b/Societes/ric/Tarifs/Img/garants/logo_sidam.png new file mode 100755 index 00000000..d38ab83c Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/logo_sidam.png differ diff --git a/Societes/ric/Tarifs/Img/garants/pied_gna.png b/Societes/ric/Tarifs/Img/garants/pied_gna.png new file mode 100755 index 00000000..70720c1b Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/pied_gna.png differ diff --git a/Societes/ric/Tarifs/Img/garants/pied_sidam.jfif b/Societes/ric/Tarifs/Img/garants/pied_sidam.jfif new file mode 100755 index 00000000..cf9fa6f3 Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/pied_sidam.jfif differ diff --git a/Societes/ric/Tarifs/Img/garants/pied_sidam.png b/Societes/ric/Tarifs/Img/garants/pied_sidam.png new file mode 100755 index 00000000..f2a7cead Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/pied_sidam.png differ diff --git a/Societes/ric/Tarifs/Img/garants/pied_vitalis.jpg b/Societes/ric/Tarifs/Img/garants/pied_vitalis.jpg new file mode 100755 index 00000000..73423cd1 Binary files /dev/null and b/Societes/ric/Tarifs/Img/garants/pied_vitalis.jpg differ diff --git a/Societes/ric/Tarifs/Img/libellestatistique.jpg b/Societes/ric/Tarifs/Img/libellestatistique.jpg new file mode 100755 index 00000000..10610e00 Binary files /dev/null and b/Societes/ric/Tarifs/Img/libellestatistique.jpg differ diff --git a/Societes/ric/Tarifs/Img/losange.jpg b/Societes/ric/Tarifs/Img/losange.jpg new file mode 100755 index 00000000..5b26a234 Binary files /dev/null and b/Societes/ric/Tarifs/Img/losange.jpg differ diff --git a/Societes/ric/Tarifs/Img/losange2.jpg b/Societes/ric/Tarifs/Img/losange2.jpg new file mode 100755 index 00000000..46c13b04 Binary files /dev/null and b/Societes/ric/Tarifs/Img/losange2.jpg differ diff --git a/Societes/ric/Tarifs/Img/newkit1.jpg b/Societes/ric/Tarifs/Img/newkit1.jpg new file mode 100755 index 00000000..42db4926 Binary files /dev/null and b/Societes/ric/Tarifs/Img/newkit1.jpg differ diff --git a/Societes/ric/Tarifs/Img/newkit2.jpg b/Societes/ric/Tarifs/Img/newkit2.jpg new file mode 100755 index 00000000..2626f15e Binary files /dev/null and b/Societes/ric/Tarifs/Img/newkit2.jpg differ diff --git a/Societes/ric/Tarifs/Img/newkit3.jpg b/Societes/ric/Tarifs/Img/newkit3.jpg new file mode 100755 index 00000000..300037ea Binary files /dev/null and b/Societes/ric/Tarifs/Img/newkit3.jpg differ diff --git a/Societes/ric/Tarifs/Img/newkit4.jpg b/Societes/ric/Tarifs/Img/newkit4.jpg new file mode 100755 index 00000000..3182c25c Binary files /dev/null and b/Societes/ric/Tarifs/Img/newkit4.jpg differ diff --git a/Societes/ric/Tarifs/Img/newkit5.jpg b/Societes/ric/Tarifs/Img/newkit5.jpg new file mode 100755 index 00000000..de7485bd Binary files /dev/null and b/Societes/ric/Tarifs/Img/newkit5.jpg differ diff --git a/Societes/ric/Tarifs/Img/newkit6.jpg b/Societes/ric/Tarifs/Img/newkit6.jpg new file mode 100755 index 00000000..34792d61 Binary files /dev/null and b/Societes/ric/Tarifs/Img/newkit6.jpg differ diff --git a/Societes/ric/Tarifs/Img/newkit7.jpg b/Societes/ric/Tarifs/Img/newkit7.jpg new file mode 100755 index 00000000..3422384f Binary files /dev/null and b/Societes/ric/Tarifs/Img/newkit7.jpg differ diff --git a/Societes/ric/Tarifs/Img/newkit8.jpg b/Societes/ric/Tarifs/Img/newkit8.jpg new file mode 100755 index 00000000..452ee695 Binary files /dev/null and b/Societes/ric/Tarifs/Img/newkit8.jpg differ diff --git a/Societes/ric/Tarifs/Img/newkit9.jpg b/Societes/ric/Tarifs/Img/newkit9.jpg new file mode 100755 index 00000000..3dd0ac4f Binary files /dev/null and b/Societes/ric/Tarifs/Img/newkit9.jpg differ diff --git a/Societes/ric/Tarifs/Modele/Adherent_temp_societe.php b/Societes/ric/Tarifs/Modele/Adherent_temp_societe.php new file mode 100755 index 00000000..0b4d25a8 --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Adherent_temp_societe.php @@ -0,0 +1,13 @@ +executerRequete($sql, array($idCollege, $dateEntree, $user, $prorata)); + return $adherent_temp->fetch(PDO::FETCH_ASSOC); + } +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Avenant.php b/Societes/ric/Tarifs/Modele/Avenant.php new file mode 100755 index 00000000..37659bfa --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Avenant.php @@ -0,0 +1,234 @@ +executerRequete($sql, array($idPolice)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getAvenantimportation($idPolice) + { + $sql = 'call sp_avenants_police_importation(?)'; + + $resultat = $this->executerRequete($sql, array($idPolice)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getListe($idPolice) + { + $sql = 'SELECT A.id as `code`, concat(B.libelle, " du ",DATE_FORMAT(dateEffet, "%d/%m/%Y")) as libelle + from avenant A + join typeavenant B on (B.codeTypeAvenant=A.codeTypeAvenant) + where (idPolice=?) and (B.ajoutAliment="1") + order by numeroAvenant DESC'; + + $liste = $this->executerRequete($sql, array($idPolice)); + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function getListeToutes($idPolice) + { + $sql = 'SELECT A.id as `code`, concat(IFNULL(B.libelle, B.codeTypeAvenant), " du ",DATE_FORMAT(dateEffet, "%d/%m/%Y")) as libelle + from avenant A + left join typeavenant B on (B.codeTypeAvenant=A.codeTypeAvenant) + where (idPolice=?) order by numeroAvenant DESC'; + + $liste = $this->executerRequete($sql, array($idPolice)); + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + + public function getdateavenant($idAvenant, $idPolice) + { + if ($idAvenant > 0){ + $sql = 'select fn_get_date_avenant(?) as dateAvenant'; + $resultat = $this->executerRequete($sql, array($idAvenant)); + }else{ + $sql = 'select fn_get_date_effet_police(?) as dateAvenant'; + $resultat = $this->executerRequete($sql, array($idPolice)); + } + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + return $ligne['dateAvenant']; + } + + public function getListeEnCours($idPolice) + { + if (est_anglophone()) + { + $sql = 'SELECT A.id AS `code`, CONCAT(B.libelleEng, " of ",DATE_FORMAT(A.dateEffet, "%d/%m/%Y")) AS libelle + FROM avenant A + JOIN typeavenant B ON (B.codeTypeAvenant=A.codeTypeAvenant) + JOIN police P ON (P.id=A.idPolice) + WHERE (A.idPolice=?) AND (B.ajoutAliment="1") + AND (A.dateEffet>=P.dateEffet) + ORDER BY A.numeroAvenant DESC;'; + } + else + { + $sql = 'SELECT A.id AS `code`, CONCAT(B.libelle, " du ",DATE_FORMAT(A.dateEffet, "%d/%m/%Y")) AS libelle + FROM avenant A + JOIN typeavenant B ON (B.codeTypeAvenant=A.codeTypeAvenant) + JOIN police P ON (P.id=A.idPolice) + WHERE (A.idPolice=?) AND (B.ajoutAliment="1") + AND (A.dateEffet>=P.dateEffet) + ORDER BY A.numeroAvenant DESC;'; + } + + + $liste = $this->executerRequete($sql, array($idPolice)); + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + public function getListeEnCoursrp($idPolice) + { + if (est_anglophone()) + { + $sql = 'SELECT A.id AS `code`, + CONCAT(B.libelleEng, " of ",DATE_FORMAT(A.dateEffet, "%d/%m/%Y")," || ",A.numeroAvenant) AS libelle + A.numeroAvenant + FROM avenant A + JOIN typeavenant B ON (B.codeTypeAvenant=A.codeTypeAvenant) + JOIN police P ON (P.id=A.idPolice) + WHERE (A.idPolice=?) AND (B.ajoutAliment="1") + AND (A.dateEffet>=P.dateEffet) AND A.codeTypeAvenant IN ("AFN","REN","QTM") + ORDER BY A.numeroAvenant DESC;'; + } + else + { + $sql = 'SELECT A.id AS `code`, + CONCAT(B.libelle, " du ",DATE_FORMAT(A.dateEffet, "%d/%m/%Y")," || ",A.numeroAvenant) AS libelle + FROM avenant A + JOIN typeavenant B ON (B.codeTypeAvenant=A.codeTypeAvenant) + JOIN police P ON (P.id=A.idPolice) + WHERE (A.idPolice=?) AND (B.ajoutAliment="1") + AND (A.dateEffet>=P.dateEffet) AND A.codeTypeAvenant IN ("AFN","REN","QTM") + ORDER BY A.numeroAvenant DESC;'; + } + + + $liste = $this->executerRequete($sql, array($idPolice)); + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function getunavenant($idAvenant) + { + $sql = 'select * from vw_avenants where idavenant=?'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function getListePieceAvenant($codeTypeAvenant) + { + $sql = ' CALL sp_afficher_edition_piece_avenant(?);'; + + $liste = $this->executerRequete($sql,array($codeTypeAvenant)); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function getLienEditionPieceAvenant($codeTypeAvenant, $codeEtat) + { + if (est_anglophone()) + { + $sql = 'call sp_get_lien_edition_piece_avenant_eng(?, ?)'; + } + else + { + $sql = 'call sp_get_lien_edition_piece_avenant(?, ?)'; + } + + $liste = $this->executerRequete($sql, array($codeTypeAvenant, $codeEtat)); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + + public function getAvenantAfacturer($dateDebut,$dateFin) + { + $user = $_SESSION['login']; + $idSaisie = $_SESSION['idSaisie']; + $idPolice = $_SESSION['idPolice_C'] ; + + if (est_anglophone()) + { + $sql = "CALL sp_avenants_a_facturer(?, ?, ?,?,?);"; + } + else + { + $sql = "CALL sp_avenants_a_facturer(?, ?, ?,?,?);"; + + } + + + $liste = $this->executerRequete($sql, array($idPolice,$user,$idSaisie,$dateDebut,$dateFin)); + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function selectionnerAvenant($id,$choix){ + $sql = "CALL sp_selection_avenant_a_facture(?, ?);"; + $this->executerRequete($sql, array($id,$choix)); + } + + public function majAccessoirePrime($id,$accessoire){ + $sql = "CALL sp_maj_accessoire_prime(?, ?);"; + $this->executerRequete($sql, array($id,$accessoire)); + } + + public function majAccessoirePrimeGarant($id,$accessoire){ + $sql = "CALL sp_maj_accessoire_garant_prime(?, ?);"; + $this->executerRequete($sql, array($id,$accessoire)); + } + + public function majAccessoirePrimeGestionnaire($id,$accessoire){ + $sql = "CALL sp_maj_accessoire_gestionnaire_prime(?, ?);"; + $this->executerRequete($sql, array($id,$accessoire)); + } + + public function listerAvenantAfacturer() + { + $user = $_SESSION['login']; + $idSaisie = $_SESSION['idSaisie']; + $idPolice = $_SESSION['idPolice_C'] ; + + if (est_anglophone()) + { + $sql = "CALL sp_lister_avenants_a_facturer(?, ?, ?);"; + } + else + { + $sql = "CALL sp_lister_avenants_a_facturer(?, ?, ?);"; + + } + + + $liste = $this->executerRequete($sql, array($idPolice,$user,$idSaisie)); + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function getAvenantExportPdf($idPolice,$idAvenant) + { + // $sql = 'call sp_avenants_police(?)'; + // $query = "SELECT * FROM beneficiaireprime WHERE idPolice=? and idAvenant=? "; + // $query = "SELECT * FROM beneficiaireprime WHERE idPolice=? and idAvenant=? "; + + // $resultat = $this->executerRequete($query, array($idPolice,$idAvenant)); + // $query = "SELECT * FROM beneficiaireprime WHERE idPolice=? and idAvenant=? "; + + // $resultat = $this->executerRequete($query, array($idPolice,$idAvenant)); + $query = "SELECT * FROM beneficiaireprime"; + + $resultat = $this->executerRequete($query); + + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + +} diff --git a/Societes/ric/Tarifs/Modele/Beneficiaire_temp_societe.php b/Societes/ric/Tarifs/Modele/Beneficiaire_temp_societe.php new file mode 100755 index 00000000..5c6aaeb2 --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Beneficiaire_temp_societe.php @@ -0,0 +1,112 @@ +executerRequete($sql, array($idAdherent, $dateEntree, $user, $prorata, $fraisCarte, $codeLienParente)); + return $adherent_temp->fetch(PDO::FETCH_ASSOC); + } + + public function getListeBeneficiaire_temp() + { + $user = $_SESSION['login']; + + $sql = 'call sp_afficher_beneficiaire_resiliation(?);'; + + $beneficiaires = $this->executerRequete($sql, array($user)); + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + public function getListeBeneficiaire_temp_Ren() + { + $user = $_SESSION['login']; + + $sql = 'call sp_afficher_beneficiaire_renouvellement(?);'; + + $beneficiaires = $this->executerRequete($sql, array($user)); + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + public function getListeBeneficiaire_temp_Ret() + { + $user = $_SESSION['login']; + + $sql = 'call sp_afficher_beneficiaire_a_retirer(?);'; + + $beneficiaires = $this->executerRequete($sql, array($user)); + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + public function getListeBeneficiaire_temp_Ret_Selection() + { + $user = $_SESSION['login']; + + $sql = 'call sp_afficher_beneficiaire_retrait(?);'; + + $beneficiaires = $this->executerRequete($sql, array($user)); + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + + public function recapitulerretrait() + { + $user = $_SESSION['login']; + + $sql = 'call sp_recapituler_retrait(?);'; + + $this->executerRequete($sql, array($user)); + } + + public function selectionretrait($idBeneficiaire, $choix) { + $sql = 'call sp_selection_retrait(?, ?)'; + $this->executerRequete($sql, array($idBeneficiaire, $choix)); + } + + public function selectionlimite($idBeneficiaire, $choix) { + $sql = 'update beneficiaire_temp set choix=? WHERE (id=?);'; + $this->executerRequete($sql, array($choix, $idBeneficiaire)); + } + + public function selectionlimitetout($idCollegeTemp, $choix) { + $sql = 'update beneficiaire_temp set choix=? WHERE (idCollegeTemp=?);'; + $this->executerRequete($sql, array($choix, $idCollegeTemp)); + } + + public function getListeBeneficiaire_temp_limite($id_college_temp) + { + $user = $_SESSION['login']; + + $sql = 'call sp_afficher_beneficiaire_limite(?, ?);'; + + $beneficiaires = $this->executerRequete($sql, array($id_college_temp, $user)); + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + public function appliquertauxristourne($tauxRistourne) + { + $user = $_SESSION['login']; + + $sql = 'call sp_appliquer_taux_ristourne(?, ?);'; + + $this->executerRequete($sql, array($user, $tauxRistourne)); + } + + public function get_frais_carte_college($idCollege) + { + // $idCollege = $_SESSION['idCollege_C']; + + $sql = 'select fn_get_frais_carte_college(?) as fraisCarte'; + + $resultat = $this->executerRequete($sql, array($idCollege)); + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + + return $ligne['fraisCarte']; + } + +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Beneficiairesociete.php b/Societes/ric/Tarifs/Modele/Beneficiairesociete.php new file mode 100755 index 00000000..70138c73 --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Beneficiairesociete.php @@ -0,0 +1,1228 @@ +executerRequete($sql); + return $beneficiaire; + } + + public function getBeneficiaires($nomBeneficiaire, $prenomsBeneficiaire, $telephonePortable, $email) + { + $nomBeneficiaire = contruireParamLike($nomBeneficiaire); + $prenomsBeneficiaire = contruireParamLike($prenomsBeneficiaire); + $telephonePortable = contruireParamLike($telephonePortable); + $email = contruireParamLike($email); + + $sql = 'call sp_get_beneficiaires(?, ?, ?, ?, ?);'; + + $adherent = $this->executerRequete($sql, array($_SESSION['codeSociete'], $nomBeneficiaire, $prenomsBeneficiaire, $telephonePortable, $email)); + return $adherent; + } + + public function getBeneficiairesAdh($numeroAdherent) { + $sql = 'call sp_r_recherche_beneficiaire_no_adh(?, ?);'; + + $beneficiaires = $this->executerRequete($sql, array($_SESSION['codeSociete'], $numeroAdherent)); + return $beneficiaires; + } + + public function getBeneficiaire($numeroBeneficiaire) + { + + $sql = 'call sp_r_recherche_beneficiaire_no(?, ?);'; + + $beneficiaire = $this->executerRequete($sql, array($_SESSION['codeSociete'], $numeroBeneficiaire)); + return $beneficiaire; + } + + public function getBeneficiaireId($idBeneficiaire) + { + $sql = 'call sp_get_beneficiaire_id(?);'; + $beneficiaire = $this->executerRequete($sql, array($idBeneficiaire)); + return $beneficiaire->fetch(PDO::FETCH_ASSOC); + } + + + public function getPrimeBeneficiaire($idBeneficiaire) + { + $sql = 'call sp_get_prime_beneficiaire(?);'; + $resultat = $this->executerRequete($sql, array($idBeneficiaire)); + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function getNombreBeneficiaires() + { + $sql = 'select count(*) as nbBeneficiaires FROM adherent A WHERE (A.codeSociete=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'])); + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + return $ligne['nbBeneficiaires']; + } + + public function getIdBeneficiaire($numeroBeneficiaire) { + $sql = 'SELECT id FROM beneficiaire WHERE (codeSociete=?) AND (numeroBeneficiaire=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $numeroBeneficiaire)); + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + return $ligne['id']; + } + + public function getIdPremierBeneficiaire($idAdherent) { + $sql = 'SELECT id FROM beneficiaire WHERE (idAdherent=?)'; + $resultat = $this->executerRequete($sql, array($idAdherent)); + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + return $ligne['id']; + } + public function getContexteBeneficiaireId($id) + { + + $sql = 'call sp_r_get_beneficiaire_id(?);'; + + $resultat = $this->executerRequete($sql, array($id)); + $context = $resultat->fetch(PDO::FETCH_ASSOC); + + $_SESSION['idClient_C'] = $context['idClient']; + $_SESSION['numeroClient_C'] = $context['numeroClient']; + $_SESSION['nomClient_C'] = $context['nomClient']; + $_SESSION['codeLangueClient'] = $context['codeLangueClient']; + $_SESSION['codeLangueAdherent'] = $context['codeLangueAdherent']; + + $_SESSION['idPolice_C'] = $context['idPolice']; + $_SESSION['numeroPolice_C'] = $context['numeroPolice']; + + $_SESSION['idAdherent_C'] = $context['idAdherent']; + $_SESSION['numeroAdherent_C'] = $context['numeroAdherent']; + $_SESSION['nomAdherent_C'] = $context['nomAdherent']; + $_SESSION['idCollege_C'] = $context['idCollege']; + + $_SESSION['idBeneficiaire_C'] = $context['idBeneficiaire']; + $_SESSION['numeroBeneficiaire_C'] = $context['numeroBeneficiaire']; + $_SESSION['nomBeneficiaire_C'] = $context['nomBeneficiaire']; + $_SESSION['email_C'] = $context['email']; + $_SESSION['telephonePortable_C'] = $context['telephonePortable']; + $_SESSION['lienPhoto_C'] = $context['lienPhoto']; + $_SESSION['codeLienParente_C'] = $context['codeLienParente']; + + $_SESSION['codeEtatBeneficiaire_C'] = $context['codeEtatBeneficiaire']; + $_SESSION['codeEtatAdherent_C'] = $context['codeEtatAdherent']; + $_SESSION['exercieReference_C'] = $context['exercieReference']; + $_SESSION['idEntetecontrat'] = $context['idEntetecontrat']; + + $_SESSION['codeLocalite'] = $context['codeLocalite']; + + // $_SESSION['etatbeneficiaire_C'] = $context['etatbeneficiaire']; + if (est_anglophone()) + { + $_SESSION['etatbeneficiaire_C'] = $context['etatbeneficiaireEng']; + } + else + { + $_SESSION['etatbeneficiaire_C'] = $context['etatbeneficiaire']; + } + + $_SESSION['adherent_C'] = $context['nomAdherent']; + $_SESSION['beneficiaire_C'] = $context['nomBeneficiaire']; + $_SESSION['enVigueur_C'] = $context['enVigueur']; + + $_SESSION['decede_C'] = $context['decede']; + $_SESSION['dateDeces_C'] = $context['dateDeces']; + $_SESSION['fraisFuneraireDemande_C'] = $context['fraisFuneraireDemande']; + $_SESSION['fraisFunerairePaye_C'] = $context['fraisFunerairePaye']; + + $_SESSION['dateEcheancePolice_C'] = $context['dateEcheancePolice']; + + $_SESSION['garantieArchive_C'] = $context['garantieArchive']; + + // vérifier que la photo du bénéficiaire existe + if ($_SESSION['lienPhoto_C']>" ") + { + if(!file_exists($_SESSION['dossierSociete'].'/Photos/'.$_SESSION['lienPhoto_C'])) + { + $_SESSION['lienPhoto_C'] = ""; + } + } + } + + public function getContexteBeneficiaireAssure($id) { + $sql = 'SELECT A.idAdherent, A.numeroAdherent, B.telephonePortable, + concat(B.prenomsAdherent," ",B.nomAdherent) as nomAdherent, + A.id as idBeneficiaire, A.numeroBeneficiaire, B.email, A.lienPhoto, + concat(A.prenomsBeneficiaire," ",A.nomBeneficiaire) as nomBeneficiaire, codeLienParente, Cl.garantieArchive + FROM beneficiaire A + JOIN adherent B ON (B.id=A.idAdherent) + left join college Cl on (Cl.id=A.idCollege) + WHERE (A.idAdherent=?) AND(A.id=?)'; + + $resultat = $this->executerRequete($sql, array($_SESSION['idAdherent_C'], $id)); + + if ($resultat->rowCount()==0) + { + $sql = 'SELECT A.idAdherent, A.numeroAdherent, B.telephonePortable, + concat(B.prenomsAdheren," ",B.nomAdherent) as nomAdherent, A.enVigueur, + A.id as idBeneficiaire, A.numeroBeneficiaire, B.email, A.lienPhoto, + concat(A.prenomsBeneficiaire," ",A.nomBeneficiaire) as nomBeneficiaire, codeLienParente, + A.decede, A.dateDeces, A.fraisFuneraireDemande, A.fraisFunerairePaye, Cl.garantieArchive + FROM beneficiaire A + JOIN adherent B ON (B.id=A.idAdherent) + left join college Cl on (Cl.id=A.idCollege) + WHERE (A.idAdherent=?) + AND (A.codeLienParente="A")'; + + $resultat = $this->executerRequete($sql, array($_SESSION['idAdherent_C'])); + } + $context = $resultat->fetch(PDO::FETCH_ASSOC); + $_SESSION['idBeneficiaire_C'] = $context['idBeneficiaire']; + $_SESSION['numeroBeneficiaire_C'] = $context['numeroBeneficiaire']; + $_SESSION['nomBeneficiaire_C'] = $context['nomBeneficiaire']; + $_SESSION['email_C'] = $context['email']; + $_SESSION['telephonePortable_C'] = $context['telephonePortable']; + $_SESSION['lienPhoto_C'] = $context['lienPhoto']; + $_SESSION['codeLienParente_C'] = $context['codeLienParente']; + $_SESSION['beneficiaire_C'] = $context['nomBeneficiaire']; + $_SESSION['enVigueur_C'] = $context['enVigueur']; + + $_SESSION['decede_C'] = $context['decede']; + $_SESSION['dateDeces_C'] = $context['dateDeces']; + $_SESSION['fraisFuneraireDemande_C'] = $context['fraisFuneraireDemande']; + $_SESSION['fraisFunerairePaye_C'] = $context['fraisFunerairePaye']; + $_SESSION['garantieArchive_C'] = $context['garantieArchive']; + + // vérifier que la photo du bénéficiaire existe + if ($_SESSION['lienPhoto_C']>" ") + { + if(!file_exists($_SESSION['dossierSociete'].'/Photos/'.$_SESSION['lienPhoto_C'])) + { + $_SESSION['lienPhoto_C'] = ""; + } + } + + } + + public function getContexteAdherentId($id) { + $sql = 'SELECT A.id AS idAdherent, A.numeroAdherent, A.nom AS nomAdherent, A.prenoms AS prenomsAdherent, + CONCAT(A.nom," ",A.prenoms) AS nomCompletAdherent, telephonePortable, email, + codeProduit, idCollege, fn_exercice_adherent(A.id, A.dateEffet) AS exercieReference, + fn_id_entetecontrat_police(A.idPolice, A.dateEffet) AS idEntetecontrat + FROM adherent A WHERE (A.codeSociete=?) AND (A.id=?)'; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + $context = $resultat->fetch(PDO::FETCH_ASSOC); + $_SESSION['idAdherent_C'] = $context['idAdherent']; + $_SESSION['numeroAdherent_C'] = $context['numeroAdherent']; + $_SESSION['nomAdherent_C'] = $context['nomAdherent']; + $_SESSION['codeProduit_C'] = $context['codeProduit']; + $_SESSION['idCollege_C'] = $context['idCollege']; + + $_SESSION['adherent_C'] = $context['nomCompletAdherent']; + $_SESSION['exercieReference_C'] = $context['exercieReference']; + $_SESSION['idEntetecontrat'] = $context['idEntetecontrat']; + } + + public function existeligne($numeroAdherent) { + $sql = 'select id FROM adherent WHERE (codeSociete=?) and (numeroAdherent=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'],$numeroAdherent)); + return ($resultat->rowCount() > 0); + } + + public function ajouter($idAdherent, $numeroBeneficiaire, $nomBeneficiaire, + $prenomsBeneficiaire, $codeLienParente, $codeNaturePiece, $numeroPiece, $sexe, $codeGroupeSanguin, + $dateNaissance, $telephonePortable, $dateEntree, $dateCre, $user, $idAvenant, $fraisCarte) + { + $dernierNumeroBeneficiaire = '1'; + $sql = 'INSERT INTO beneficiaire ( + codeSociete, + idPolice, + numeroPolice, + codeProduit, + idCollege, + idAdherent, + numeroAdherent, + rachatTm, + deduireComm, + numeroBeneficiaire, + nomBeneficiaire, + prenomsBeneficiaire, + codeLienParente, + codeNaturePiece, + numeroPiece, + sexe, + codeGroupeSanguin, + dateNaissance, + telephonePortable, + dateEntree, + dateCre, + `user`, + cplFuneraire, + primeFamille, + primeBeneficiaire, + primeCplFuneraire, + surprimeOption, + surprimeTm, + surprimeAnt, + commission, + commissionAutre, + primeNette, + primeNetteStat, + accessoire, + primeHt, + taxe, + fraisCarte, + primeTtc, + idAvenant, + ratioAvenant, + dateEffet, + codeEtatFacturation, + delaiCarence + ) + + select + A.codeSociete, + A.idPolice, + A.numeroPolice, + A.codeProduit, + A.idCollege, + A.id as idAdherent, + A.numeroAdherent, + A.rachatTm, + A.deduireComm, + concat(A.numeroAdherent, fn_numordre(A.dernierNumeroBeneficiaire+1, 2)), + ?, + ?, + ?, + ?, + ?, + ?, + ?, + ?, + ?, + ?, + ?, + ?, + B.cplFuneraireBeneficiaire, + -- BN.primeFamille, + CASE WHEN BN.codeEtatFacturation="1" THEN 0 ELSE BN.primeFamille END as primeFamille, + BN.primeBeneficiaire, + BN.primeCplFuneraire, + BN.surprimeOption, + BN.surprimeTm, + BN.surprimeAnt, + BN.commission, + BN.commissionAutre, + BN.primeNette, + BN.primeNetteStat, + BN.accessoire, + BN.primeHt, + BN.taxe, + -- BN.fraisCarte, + ?, + BN.primeTtc, + ?, + BN.ratioAvenant, + BN.dateEffet, + BN.codeEtatFacturation, + BN.delaiCarence + from adherent A + join beneficiaire_temp BN on (BN.idAdherent=A.id) + join college B ON (B.id=A.idCollege) + WHERE (A.id=?) and (BN.user=?)'; + + $this->executerRequete($sql, array($nomBeneficiaire, $prenomsBeneficiaire, $codeLienParente, $codeNaturePiece, $numeroPiece, $sexe, + $codeGroupeSanguin, $dateNaissance, $telephonePortable, $dateEntree, $dateCre, $user, $fraisCarte, $idAvenant, $idAdherent, $user)); + + $dernierId = $this->dernierId(); + + $sql = 'insert into beneficiaireprime + ( + codeSociete, + idPolice, + idAvenant, + dateEffet, + enVigueur, + idBeneficiaire, + numeroBeneficiaire, + primeNette, + primeCplFuneraire, + commission, + commissionAutre, + primeNetteStat, + accessoire, + primeHt, + taxe, + fraisCarte, + primeTtc, + dateSysteme, + codeUtilisateur, + idEmission, + numeroEmission, + idAdherent, + exercice, + exercieReference, + dateEffetPolice, + dateFinPolice, + dateEffetAdherent, + dateEffetBeneficiaire, + codeProduit, + codeLienParente, + idCollege, + codeEtatFacturation, + userFacturation, + dateFacturation, + idEntetecontrat + ) + select + A.codeSociete, + A.idPolice, + A.idAvenant, + A.dateEffet, + A.enVigueur, + A.id as idBeneficiaire, + A.numeroBeneficiaire, + A.primeNette, + A.primeCplFuneraire, + A.commission, + A.commissionAutre, + A.primeNetteStat, + A.accessoire, + A.primeHt, + A.taxe, + A.fraisCarte, + A.primeTtc, + now() as dateSysteme, + A.`user` as codeUtilisateur, + "0" idEmission, + "0" numeroEmission, + A.idAdherent, + year(A.dateEffet) as exercice, + year(B.dateEffet) as exercieReference, + B.dateEffet as dateEffetPolice, + B.dateFin as dateFinPolice, + Ad.dateEffet as dateEffetAdherent, + A.dateEffet as dateEffetBeneficiaire, + A.codeProduit, + A.codeLienParente, + A.idCollege, + A.codeEtatFacturation, + CASE WHEN A.codeEtatFacturation="1" THEN A.`user` ELSE "" END as userFacturation, + CASE WHEN A.codeEtatFacturation="1" THEN now() ELSE null END as dateFacturation, + fn_id_entetecontrat_police(A.idPolice, A.dateEffet) as idEntetecontrat + from beneficiaire A + join police B on (B.id=A.idPolice) + join adherent Ad on (Ad.id=A.idAdherent) + where (A.id=?);'; + + $this->executerRequete($sql, array($dernierId)); + + $sql = 'delete from beneficiaire_temp where (`user`=?)'; + $this->executerRequete($sql, array($user)); + + // On va cumuler plafond frais funéraire et complément frais funéraire + $sql = 'call sp_maj_plafond_funeraire(?);'; + $this->executerRequete($sql, array($idAdherent)); + // + + // return $this->dernierId(); + return $dernierId; + } + + public function modifier($id, $nomBeneficiaire, $prenomsBeneficiaire, $codeLienParente, $codeNaturePiece, $numeroPiece, + $sexe, $codeGroupeSanguin, $dateNaissance, $telephonePortable, $dateEntree, $primeFamille, $primeBeneficiaire) + { + $sql = 'UPDATE beneficiaire SET nomBeneficiaire=?, prenomsBeneficiaire=?, codeLienParente=?, codeNaturePiece=?, numeroPiece=?, + sexe=?, codeGroupeSanguin=?, dateNaissance=?, telephonePortable=?, dateEntree=?, primeFamille=?, primeBeneficiaire=? where (id=?)'; + + $this->executerRequete($sql, array($nomBeneficiaire, $prenomsBeneficiaire, $codeLienParente, $codeNaturePiece, $numeroPiece, + $sexe, $codeGroupeSanguin, $dateNaissance, $telephonePortable, $dateEntree, $primeFamille, $primeBeneficiaire, $id)); + } + + public function supprimer($idBeneficiaire) { + $user = $_SESSION['login']; + + $sql = 'call sp_supprimer_beneficiaire(?, ?)'; + + $resultat = $this->executerRequete($sql, array($idBeneficiaire, $user)); + + $idPolice = $_SESSION['idPolice_C']; + $this->getNbassure($idPolice); + } + + public function supprimerempreinte($motif) + { + $idBeneficiaire = $_SESSION['idBeneficiaire_C']; + $user = $_SESSION['login']; + + $sql = 'call sp_r_supprimer_empreinte(?, ?, ?);'; + + $this->executerRequete($sql, array($idBeneficiaire, $user, $motif)); + } + + public function formaterNumeroAdherent($racineNoAdherent,$numeroAdherent) + { + $idPolice = $_SESSION['idPolice_C']; + /* + $numeroAdherent = "000000".$numeroAdherent; + $numeroAdherent = substr($numeroAdherent, -7); + $numeroAdherent = $racineNoAdherent.$numeroAdherent; + return $numeroAdherent; + */ + + $sql = 'call sp_formater_numero_adherent(?)'; + + $resultat = $this->executerRequete($sql, array($idPolice)); + + $adh = $resultat->fetch(PDO::FETCH_ASSOC); + + $numeroAdherent = $adh['numeroAdherent']; + + return $numeroAdherent; + + } + + public function ajouterAdherent($idAdherent) + { + $sql = 'call sp_enregistrer_premier_beneficiaire(?)'; + + $resultat = $this->executerRequete($sql, array($idAdherent)); + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + $dernierIdBeneficiaire = $ligne['dernierIdBeneficiaire']; + return $dernierIdBeneficiaire; + } + + public function getBeneficiairesId($id) + { + $sql = 'call sp_get_beneficiaires_adherent(?, ?);'; + + $beneficiaires = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + public function getBeneficiairesAfacturer($idPolice) + { + $sql = 'call sp_beneficiaires_a_facturer(?)'; + + $beneficiaires = $this->executerRequete($sql, array($idPolice)); + + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + public function getTotalAfacturer($idPolice) + { + $sql = 'call sp_total_beneficiaires_a_facturer(?)'; + + $totaafacturer = $this->executerRequete($sql, array($idPolice)); + + return $totaafacturer->fetch(PDO::FETCH_ASSOC); + } + + public function getNbAfacturer($idPolice) { + $sql = 'select count(*) as nb FROM beneficiaire A WHERE (A.idPolice=?) + AND (A.codeEtatFacturation ="9") AND (A.primeTtc!=0)'; + + $resultat = $this->executerRequete($sql, array($idPolice)); + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + return $ligne['nb']; + } + + public function selectionfacturation($idBeneficiairePrime, $choix) + { + // $sql = 'update beneficiaire set codeEtatFacturation=? WHERE (id=?)'; + + $sql = 'call sp_select_un_beneficiaire_a_facturer(?, ?);'; + + $this->executerRequete($sql, array($idBeneficiairePrime, $choix)); + + } + + public function selectionnertout($idPolice, $choix) + { + $sql = 'call sp_select_beneficiaire_a_facturer(?, ?);'; + + $this->executerRequete($sql, array($idPolice, $choix)); + } + + public function majEtatFacturation($idPolice, $numeroEmission, $idEmission) + { + /* + $sql = 'INSERT INTO beneficiairequittance (codeSociete, idEmission, numeroEmission, idBeneficiaire, + numeroBeneficiaire, primeNette, commission, primeHt, taxe, fraisCarte, primeTtc, idPolice) + + SELECT codeSociete, ? AS idEmission, ? AS numeroEmission, id AS idBeneficiaire, numeroBeneficiaire, + primeNette, commission, primeHt, taxe, fraisCarte, primeTtc, A.idPolice + FROM beneficiaire A WHERE (A.codeSociete=?) AND (A.idPolice=?) + AND (A.codeEtatFacturation ="9") AND (A.primeTtc!=0)'; + + $this->executerRequete($sql, array($idEmission, $numeroEmission, $_SESSION['codeSociete'], $idPolice)); + + $sql = 'update beneficiaire set codeEtatFacturation="1" WHERE (codeSociete=?) AND (idPolice=?) + AND (codeEtatFacturation="9") AND (primeTtc!=0)'; + + $this->executerRequete($sql, array($_SESSION['codeSociete'], $idPolice)); + */ + + $sql = 'call sp_maj_etat_facturation(?, ?, ?);'; + $this->executerRequete($sql, array($idPolice, $numeroEmission, $idEmission)); + } + + public function getDenierNumeroBeneficiaire($idAdherent) + { + $sql = 'select dernierNumeroBeneficiaire from adherent WHERE (id=?)'; + $resultat = $this->executerRequete($sql, array($idAdherent)); + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + return $ligne['dernierNumeroBeneficiaire']; + } + + public function setDenierNumeroBeneficiaire($idAdherent, $dernierNumeroBeneficiaire) + { + $sql = 'update adherent set dernierNumeroBeneficiaire=? WHERE (id=?)'; + $this->executerRequete($sql, array($dernierNumeroBeneficiaire, $idAdherent)); + } + + + public function changerPhoto($id, $nomImage) + { + $sql = 'update beneficiaire set lienPhoto=? WHERE (id=?)'; + $this->executerRequete($sql, array($nomImage, $id)); + } + + public function getListeAssure() { + $numeroAdherent = $_SESSION['numeroAdherent_C']; + $sql = 'SELECT numeroBeneficiaire as `code`, prenomsBeneficiaire AS libelle + FROM beneficiaire WHERE numeroAdherent=? ORDER BY 2'; + + $liste = $this->executerRequete($sql, array($numeroAdherent)); + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function Rqlisteassure($numeroBeneficiaire1, $numeroBeneficiaire2, $nomBeneficiaire, + $prenomsBeneficiaire, $date1, $date2, $date3, $date4) + { + $nomBeneficiaire = contruireParamLike($nomBeneficiaire); + $prenomsBeneficiaire = contruireParamLike($prenomsBeneficiaire); + + If($numeroBeneficiaire1=="0") + { + $numeroBeneficiaire1=""; + } + + $sql = 'SELECT B.nomAdherent, B.prenomsAdherent, B.numeroAdherent, B.numeroPolice, + B.policeAssistance, A.numeroBeneficiaire, A.prenomsBeneficiaire, A.nomBeneficiaire, + A.codeLienParente, A.codeSexe, + DATE_FORMAT(A.dateNaissance, "%d/%m/%Y") AS dateNaissance_fr, + fn_age(A.dateNaissance) as age, + DATE_FORMAT(A.dateEntree, "%d/%m/%Y") AS dateEntree_fr, + DATE_FORMAT(A.dateSortie, "%d/%m/%Y") AS dateSortie_fr + FROM beneficiaire A + JOIN adherent B ON (B.id=A.idAdherent) + WHERE (A.numeroBeneficiaire BETWEEN ? AND ?) + AND (A.nomBeneficiaire LIKE ?) AND (A.prenomsBeneficiaire LIKE ?) + AND (A.dateNaissance BETWEEN ? AND ?) AND (A.dateEntree BETWEEN ? AND ?) + ORDER BY B.nomAdherent, B.prenomsAdherent, A.codeLienParente, + A.prenomsBeneficiaire, A.nomBeneficiaire'; + + $liste = $this->executerRequete($sql, array($numeroBeneficiaire1, $numeroBeneficiaire2, $nomBeneficiaire, + $prenomsBeneficiaire, $date1, $date2, $date3, $date4)); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function imposerprime($idAdherent, $idBeneficiaire, $primeNette, $commission, $commissionAutre, $primeHt, $accessoire, + $taxe, $fraisCarte, $primeTtc, $primeNetteStat) + { + $user = $_SESSION['login']; + + $sql = 'call sp_imposer_prime_beneficiaire(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);'; + + $this->executerRequete($sql, array($idAdherent, $idBeneficiaire, $primeNette, $commission, $commissionAutre, $accessoire, $primeHt, + $taxe, $fraisCarte, $primeTtc, $primeNetteStat, $user)); + } + + public function getTotalBeneficiairesId($idAdherent) { + $sql = 'select IFNULL(sum(primeNette),"0") as primeNette, IFNULL(sum(commission),"0") as commission, + IFNULL(sum(primeHt),"0") as primeHt, IFNULL(sum(taxe),"0") as taxe, + IFNULL(sum(fraisCarte),"0") as fraisCarte, IFNULL(sum(primeTtc),"0") as primeTtc + FROM beneficiaire A WHERE (idAdherent=?) and (A.supprime!="1")'; + + $resultat = $this->executerRequete($sql, array($idAdherent)); + // return $resultat->fetch(PDO::FETCH_ASSOC); + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function getNbassure($idPolice) { + // nb famille et de dépendants + $sql = 'select + ifnull(sum(case when codeLienParente="A" then "1" else "0" end), "0") as ndAdh, + ifnull(SUM(case when codeLienParente="A" then "0" else "1" end), "0") as ndDep, + ifnull(SUM(case when codeEtatBeneficiaire="V" then "1" else "0" end), "0") as ndActif + from beneficiaire where (codeSociete=?) AND (idPolice=?) and (supprime!="1")'; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + $effectif = $resultat->fetch(PDO::FETCH_ASSOC); + + $_SESSION['ndAdh_C'] = $effectif['ndAdh']; + $_SESSION['ndDep_C'] = $effectif['ndDep']; + $_SESSION['ndActif_C'] = $effectif['ndActif']; + } + + public function getBeneficiairesAexporter($idPolice, $dateAnalyse) + { + if (est_anglophone()) + { + $sql = 'call sp_export_assure_eng(?, ?);'; + } + else + { + $sql = 'call sp_export_assure(?, ?);'; + } + + $beneficiaires = $this->executerRequete($sql, array($idPolice, $dateAnalyse)); + + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + public function getBeneficiairesAexporterSansFormat($idPolice, $dateAnalyse) + { + if (est_anglophone()) + { + $sql = 'call sp_export_assure_sans_format_eng(?, ?);'; + } + else + { + $sql = 'call sp_export_assure_sans_format(?, ?);'; + } + + $beneficiaires = $this->executerRequete($sql, array($idPolice, $dateAnalyse)); + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + public function getBeneficiairesAimprimer($idPolice, $dateAnalyse) + { + if (est_anglophone()) + { + $sql = 'call sp_imprimer_assure_eng(?, ?);'; + } + else + { + $sql = 'call sp_imprimer_assure(?, ?);'; + } + + $beneficiaires = $this->executerRequete($sql, array($idPolice, $dateAnalyse)); + + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + public function getEnteteBeneficiairesAimprimer($idPolice) + { + $sql = 'call sp_entete_liste_assure(?);'; + + $entete = $this->executerRequete($sql, array($idPolice)); + return $entete->fetch(PDO::FETCH_ASSOC); + } + + public function changeretat($idbeneficiaire, $codeEtatbeneficiaire, $motifEtat, $dateEtat) + { + $user = $_SESSION['login']; + $sql = 'call sp_changer_etat_beneficiaire(?, ?, ?, ?, ?)'; + $this->executerRequete($sql, array($idbeneficiaire, $codeEtatbeneficiaire, $motifEtat, $dateEtat, $user)); + } + + public function majdatesortie($idbeneficiaire, $dateSortie, $motifSortie) + { + + $user = $_SESSION['login']; + + $sql = 'call sp_maj_date_sortie(?, ?, ?, ?)'; + + $this->executerRequete($sql, array($idbeneficiaire, $user, $dateSortie, $motifSortie)); + } + + public function getBeneficiairesActifs($dateAnalyse) + { + $sql = 'call sp_assures_actifs(?);'; + + $resultat = $this->executerRequete($sql, array($dateAnalyse)); + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + + public function getBeneficiairesActifsExport($dateAnalyse) + { + $sql = 'call sp_assures_actifs_export(?);'; + + $resultat = $this->executerRequete($sql, array($dateAnalyse)); + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getempreintesupprimers() + { + $idBeneficiaire = $_SESSION['idBeneficiaire_C']; + + $sql = 'call sp_empreintes_supprimees(?);'; + + $resultat = $this->executerRequete($sql, array($idBeneficiaire)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function gethistoempreintesupprimers($debut, $fin) + { + $sql = 'call sp_histo_suppression_empreintes(?, ?);'; + + $resultat = $this->executerRequete($sql, array($debut, $fin)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getModeleAssures() + { + $sql = 'CALL sp_export_modele_assure();'; + + $beneficiaires = $this->executerRequete($sql); + + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + + public function initIinsererLigneModeleAssure() + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'CALL sp_init_inserer_ligne_modele_assure(?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user)); + } + + public function insererLigneModeleAssure($idAvenant, $categorie, $numeroAdherent, $noFamille, $nom, $prenoms, $codeLienParente, + $codeNaturePiece, $numeroPiece, $sexe, $codeGroupeSanguin, $dateNaissance, $telephonePortable, $email) + { + $idSaisie = $_SESSION['idSaisie']; + $user = $_SESSION['login']; + + $sql = 'call sp_inserer_ligne_modele_assure(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);'; + + $resultat = $this->executerRequete($sql, array($idAvenant, $user, $idSaisie, $categorie, $numeroAdherent, $noFamille, $nom, $prenoms, $codeLienParente, + $codeNaturePiece, $numeroPiece, $sexe, $codeGroupeSanguin, $dateNaissance, $telephonePortable, $email)); + } + + + public function getListeAssuresImportes() + { + $user = $_SESSION['login']; + $idPolice = $_SESSION['idPolice_C']; + + $sql = 'CALL sp_afficher_lignes_importees(?, ?);'; + + $beneficiaires = $this->executerRequete($sql, array($idPolice, $user)); + + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + public function gererIncorporationSurFamExistante() + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'CALL sp_gerer_incorporation_sur_fam_existante(?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user)); + } + + + public function calculerprimeimportee() + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + // $sql = 'CALL sp_calculer_prime_importee(?, ?);'; + $sql = 'CALL sp_calculer_prime_importee_lien_parente(?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user)); + } + + public function enregistrerparamimportassure($nomOrigine, $nouveau_fichier, $taille) + { + $idPolice = $_SESSION['idPolice_C']; + $codeSociete = $_SESSION['codeSociete']; + $user = $_SESSION['login']; + //$cheminFichier = $_SESSION['dossierGed'].$nouveau_fichier; + $cheminFichier = $nouveau_fichier; + + $sql = 'call sp_r_enregistrer_param_import_assure(?, ?, ?, ?, ?, ?);'; + + $this->executerRequete($sql, array($idPolice, $codeSociete, $nomOrigine, $cheminFichier, $taille, $user)); + } + + public function getFichierImport() + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'CALL sp_afficher_fichier_import(?, ?);'; + + $resultat = $this->executerRequete($sql, array($idPolice, $user)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function exclureligneimportee($idBeneficiairemodel, $exclure) + { + $sql = 'call sp_r_exclure_ligne_importee(?, ?)'; + + $this->executerRequete($sql, array($idBeneficiairemodel, $exclure)); + } + + public function getListeAdherentImportes($idCollege) + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'CALL sp_afficher_adherents_importees(?, ?, ?)'; + + $beneficiaires = $this->executerRequete($sql, array($idPolice, $user, $idCollege)); + + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + public function getListeAdherentImportesCollege($idCollege) + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'CALL sp_afficher_adherents_importees_college(?, ?, ?)'; + + $beneficiaires = $this->executerRequete($sql, array($idPolice, $user, $idCollege)); + + + return $beneficiaires->fetchAll(PDO::FETCH_ASSOC); + } + + public function ajouterunadherentaucollege($idBeneficiairemodel, $idCollege) + { + $user = $_SESSION['login']; + + $sql = 'call sp_r_ajouter_adherent_importee_college(?, ?, ?)'; + + $this->executerRequete($sql, array($user, $idBeneficiairemodel, $idCollege)); + } + + + public function retirerunadherentaucollege($idBeneficiairemodel) + { + $user = $_SESSION['login']; + + $sql = 'call sp_r_retirer_adherent_importee_college(?, ?)'; + + $this->executerRequete($sql, array($user, $idBeneficiairemodel)); + } + + public function getnbadhimpsanscollege() + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'SELECT fn_nb_adh_imp_sans_college(?, ?) AS nb_adh;'; + + $resultat = $this->executerRequete($sql, array($idPolice, $user)); + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + + return $ligne['nb_adh']; + } + + public function incorpoerassuresimportes() + { + $user = $_SESSION['login']; + $idPolice = $_SESSION['idPolice_C']; + + $sql = 'call sp_incorporer_assures_importes(?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user)); + } + + public function ajoutertousadherentaucollege($idCollege) + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'call sp_r_ajouter_tous_adherent_importee_college(?, ?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user, $idCollege)); + } + + public function ajoutersanscollegeadherentaucollege($idCollege) + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'call sp_r_ajouter_adherent_sans_college_importee_college(?, ?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user, $idCollege)); + } + + // retirertousadherentaucollege + public function retirertousadherentaucollege($idCollege) + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'call sp_r_retirer_tous_adherent_importee_college(?, ?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user, $idCollege)); + } + + public function majetape() + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'CALL sp_r_maj_etape_3_import_assure(?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user)); + } + + public function getadhimpfamillesansadherent() + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'CALL sp_adh_imp_famille_sans_adherent(?, ?);'; + + $resultat = $this->executerRequete($sql, array($idPolice, $user)); + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + + return $ligne['noFamille']; + } + + public function getadhimpfamilleplusieursadherent() + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'CALL sp_adh_imp_famille_plusieurs_adherent(?, ?);'; + + $resultat = $this->executerRequete($sql, array($idPolice, $user)); + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + + return $ligne['noFamille']; + } + + public function getadhimpfamilleexistantsansadherent() + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + + $sql = 'CALL sp_adh_imp_famille_existant_sans_adherent(?, ?);'; + + $resultat = $this->executerRequete($sql, array($idPolice, $user)); + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + + return $ligne['noFamille']; + } + + public function getBeneficiairesNonFature($idPolice) + { + $sql = 'call sp_beneficiaires_non_factures(?)'; + + $resultat = $this->executerRequete($sql, array($idPolice)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function afficherfacturationpolice($debut, $fin) + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + $idSaisie = $_SESSION['idSaisie']; + + $sql = 'call sp_afficher_facturation_police(?, ?, ?, ?, ?)'; + + $resultat = $this->executerRequete($sql, array($idPolice, $user, $idSaisie, $debut, $fin)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function initfacturationpolice() + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + $idSaisie = $_SESSION['idSaisie']; + + $sql = 'CALL sp_init_facturation_police(?, ?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user, $idSaisie)); + } + + public function selectionnertoutlignesafacturer($choix, $debut, $fin) + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + $idSaisie = $_SESSION['idSaisie']; + + $sql = 'call sp_select_tous_beneficiaire_a_facturer(?, ?, ?, ?, ?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user, $idSaisie, $debut, $fin, $choix)); + } + + public function selectionnerunelignesafacturer($idBeneficiairePrimeTemp, $choix, $debut, $fin) + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + $idSaisie = $_SESSION['idSaisie']; + + $sql = 'call sp_select_un_beneficiaire_a_facturer(?, ?, ?, ?, ?, ?, ?);'; + + $resultat = $this->executerRequete($sql, array($idPolice, $user, $idSaisie, $debut, $fin, $idBeneficiairePrimeTemp, $choix)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + + } + + public function affichertotalfacturationpolice($debut, $fin) + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + $idSaisie = $_SESSION['idSaisie']; + + $sql = 'call sp_recap_beneficiaire_a_facturer(?, ?, ?, ?, ?)'; + + $resultat = $this->executerRequete($sql, array($idPolice, $user, $idSaisie, $debut, $fin)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + + public function initecheancierfacturation($debut, $fin) + { + $codeSociete = $_SESSION['codeSociete']; + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + $idSaisie = $_SESSION['idSaisie']; + + $sql = 'call sp_init_echeancier_facturation(?, ?, ?, ?, ?, ?, ?)'; + + $resultat = $this->executerRequete($sql, array($codeSociete, $idPolice, $user, $idSaisie, $debut, $fin, $_SESSION['lang'])); + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + + return $ligne['idEmission_temp']; + } + + public function majaccessoiresfacturation($fraisCarte, $debut, $fin) + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + $idSaisie = $_SESSION['idSaisie']; + + + $sql = 'call sp_maj_accessoires_facturation(?, ?, ?, ?, ?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user, $idSaisie, $debut, $fin, $fraisCarte)); + } + + public function majprimesfacturation($idCollege, $old_primeNette, $nv_primeNette, $debut, $fin) + { + $idPolice = $_SESSION['idPolice_C']; + $user = $_SESSION['login']; + $idSaisie = $_SESSION['idSaisie']; + + $sql = 'call sp_maj_primes_facturation(?, ?, ?, ?, ?, ?, ?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user, $idSaisie, $debut, $fin, $idCollege, $old_primeNette, $nv_primeNette)); + } + + public function gethistoenrollementempreinte($debut, $fin) + { + $sql = 'call sp_histo_enrollement_empreinte(?, ?);'; + + $resultat = $this->executerRequete($sql, array($debut, $fin)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getentetecontrat($idEntetecontrat) + { + $sql = 'SELECT * FROM entetecontrat WHERE id=? limit 1;'; + + $resultat = $this->executerRequete($sql, array($idEntetecontrat)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function getlisteentetecontratadherent($idAdherent) + { + $sql = 'call sp_get_entete_contrat_adherent(?)'; + + $resultat = $this->executerRequete($sql, array($idAdherent)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getlisteentetecontratbeneficiaire($idBeneficiaire) + { + $sql = 'call sp_get_entete_contrat_beneficiaire(?)'; + + $resultat = $this->executerRequete($sql, array($idBeneficiaire)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function controlerplafondbeneficiaireannuel($idBeneficiaire) + { + $sql = 'select fn_control_plafond_beneficiaire_courant(?) as controlerPlafondBeneficiaire;'; + + $resultat = $this->executerRequete($sql, array($idBeneficiaire)); + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + $_SESSION['controlerPlafondBeneficiaire'] = $ligne['controlerPlafondBeneficiaire']; + + $idAdherent = $_SESSION['idAdherent_C']; + + $this->controlerplafondadherentannuel($idAdherent); + } + + public function controlerplafondadherentannuel($idAdherent) + { + $sql = 'select fn_control_plafond_adherent_courant(?) as controlerPlafondAdherent;'; + + $resultat = $this->executerRequete($sql, array($idAdherent)); + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + $_SESSION['controlerPlafondAdherent'] = $ligne['controlerPlafondAdherent']; + } + + public function calculerprimeimporteedevis() + { + $idPolice = $_SESSION['idPolice_d_C']; + $user = $_SESSION['login']; + $numeroOptionTarif = $_SESSION['numeroOptionTarif']; + + $sql = 'CALL sp_calculer_prime_importee_lien_parente_devis(?, ?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user, $numeroOptionTarif)); + } + + public function incorpoerassuresimportesdevis() + { + $user = $_SESSION['login']; + $idPolice = $_SESSION['idPolice_d_C']; + $numeroOptionTarif = $_SESSION['numeroOptionTarif']; + + $sql = 'call sp_incorporer_assures_importes_devis(?, ?, ?);'; + + $this->executerRequete($sql, array($idPolice, $user, $numeroOptionTarif)); + } +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Capitalfraisfuneraire.php b/Societes/ric/Tarifs/Modele/Capitalfraisfuneraire.php new file mode 100755 index 00000000..7b7dfcbf --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Capitalfraisfuneraire.php @@ -0,0 +1,15 @@ +executerRequete($sql,array($_SESSION['codeSociete'])); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/College_temp.php b/Societes/ric/Tarifs/Modele/College_temp.php new file mode 100755 index 00000000..827efb84 --- /dev/null +++ b/Societes/ric/Tarifs/Modele/College_temp.php @@ -0,0 +1,2015 @@ +executerRequete($sql, array($idCollegeTemp, $codeGarantie)); + } + + public function getCollegeTemp($idCollegeTemp) + { + //$sql = 'call sp_afficher_college_temp_mcicareci(?)'; + $sql = 'call sp_afficher_college_temp_saas(?)'; + + + $collegeTemp = $this->executerRequete($sql, array($idCollegeTemp)); + + return $collegeTemp->fetch(); + } + + public function getBaseTarifCollege() + { + if (est_anglophone()){ + $sql = "select codeBaseTarification as code, libelleEng as libelle + from basetarification where (codeBaseTarification IN ('FAM', 'IND', 'AUC')) + ORDER BY ordre;"; + }else{ + $sql = "select codeBaseTarification as code, libelle + from basetarification where (codeBaseTarification IN ('FAM', 'IND', 'AUC')) + ORDER BY ordre;"; + + } + + $liste = $this->executerRequete($sql); + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function getCollegeTempPolice($idPolice, $user) + { + $sql = 'select * from college_temp where (idPolice=?) and (user=?)'; + + $collegeTemp = $this->executerRequete($sql, array($idPolice, $user)); + return $collegeTemp->fetchAll(PDO::FETCH_ASSOC); + } + + + public function getCollegeTempPoliceRen($idPolice, $user) + { + $sql = 'select * from college_ren_temp where (idPolice=?) and (user=?) order by codeProduit, libelleCollege'; + + $collegeTemp = $this->executerRequete($sql, array($idPolice, $user)); + return $collegeTemp->fetchAll(PDO::FETCH_ASSOC); + } + + public function getGarCollege($idCollegeTemp) + { + $sql = 'select * from garantie_temp where (idCollegeTemp=?) order by ordre'; + $garanties = $this->executerRequete($sql, array($idCollegeTemp)); + return $garanties; + } + + public function getGarAddCollege($idCollegeTemp) + { + $sql = 'select A.*, B.plafond as plafondOld, B.plafond+A.plafond as plafondNew from garantieaddition_temp A + join garantie_temp B on (B.user=A.user) and (B.idCollegeTemp=A.idCollegeTemp) and (B.codeGarantie=A.codeGarantie) + where (A.idCollegeTemp=?) order by A.ordre'; + + $garanties = $this->executerRequete($sql, array($idCollegeTemp)); + return $garanties; + } + + public function getGarBaseCollege($idCollegeTemp) + { + $sql = 'select * from garantie_temp where (idCollegeTemp=?) and (optionnelle!="1") order by ordre'; + $garanties = $this->executerRequete($sql, array($idCollegeTemp)); + return $garanties; + } + + public function getGarOptCollege($idCollegeTemp) + { + $sql = 'select A.*, IFNULL(B.idCollegeTemp,"0") as idCollegeTemp + from garantie A + left join garantie_temp B on (B.idCollegeTemp=?) and (B.codeSociete=A.codeSociete) and (B.codeGarantie=A.codeGarantie) + Where (A.optionnelle="1") order by A.ordre'; + + $garanties = $this->executerRequete($sql, array($idCollegeTemp)); + return $garanties; + } + + public function getGarOptCollegeAcq($idCollegeTemp) + { + $sql = 'select * from garantie_temp where (idCollegeTemp=?) and (optionnelle="1") order by ordre'; + $garanties = $this->executerRequete($sql, array($idCollegeTemp)); + return $garanties; + } + + public function getPrestation($idCollegeTemp) + { + $sql = 'select A.*, B.libelle as reseausoin from prestation_temp A + join reseausoins B on (B.codeReseau=A.codeReseau) + where (A.idCollegeTemp=?) order by A.tmBase, A.tm'; + + $prestations = $this->executerRequete($sql, array($idCollegeTemp)); + return $prestations; + } + + public function supprimer($idCollegeTemp) { + $sql = 'DELETE FROM college_temp WHERE (id=?)'; + $this->executerRequete($sql, array($idCollegeTemp)); + + $sql = 'DELETE FROM garantie_temp WHERE (idCollegeTemp=?)'; + $this->executerRequete($sql, array($idCollegeTemp)); + } + + public function supprimergarantie($idGarantie) { + $sql = 'DELETE FROM garantie_temp WHERE (id=?)'; + $this->executerRequete($sql, array($idGarantie)); + } + + + + public function initCollege($idPolice, $codeGcAssureur, $user) + { + $codeSociete = $_SESSION['codeSociete']; + + $this->viderfamilleacteproduitlienparente(); + $this->videractecollegelienparente_temp(); + + + $sql = 'CALL sp_init_college(?, ?, ?, ?);'; + + + $this->executerRequete($sql, array($idPolice, $codeSociete, $codeGcAssureur, $user)); + + $resultat = $this->executerRequete($sql, array($idPolice, $codeSociete, $codeGcAssureur, $user)); + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + + $idCollegeTemp = $ligne['idCollegeTemp']; + + $_SESSION['idCollegeTemp'] = $idCollegeTemp; + + return $idCollegeTemp; + } + + //($idCollege, $codeGcAssureur, $user) + + public function initModifCollege($idCollege, $user) + { + $this->viderCollegTemp($user); + + $sql = 'CALL sp_init_modifier_college(?, ?);'; + + $this->executerRequete($sql, array($idCollege, $user)); + + $resultat = $this->executerRequete($sql, array($idCollege, $user)); + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + + $idCollegeTemp = $ligne['idCollegeTemp']; + + $_SESSION['idCollegeTemp'] = $idCollegeTemp; + + return $idCollegeTemp; + } + + public function recapituler($idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif) + { + $codeSociete = $_SESSION['codeSociete']; + $nbAdherent = preg_replace('/\s+/', '', $nbAdherent); + $nbAyantdroit = preg_replace('/\s+/', '', $nbAyantdroit); + + $plafondAdherent = str_replace(' ', '', $plafondAdherent); + + $sql = 'call sp_recapituler_college_temp_lienparente_saas(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?)'; + + $this->executerRequete($sql, array($codeSociete,$idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif)); + } + + public function maj($idCollegeTemp, $codeProduit, $libelleCollege, $nbAdherent, $nbAyantdroit, $primeFamille, + $surprimeAnt, $rachatTm, $cplFuneraire, $tauxRachatTm, $tauxPrimeRachatTm) + { + $sql = 'call sp_maj_college_temp(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; + + $this->executerRequete($sql, array($idCollegeTemp, $codeProduit, $libelleCollege, $nbAdherent, $nbAyantdroit, + $primeFamille, $surprimeAnt, $rachatTm, $cplFuneraire, $tauxRachatTm, $tauxPrimeRachatTm)); + } + + public function enregistrer($idCollegeTemp) + { + $sql = 'call sp_creer_college(?)'; + //var_dump($idCollegeTemp); + + $this->executerRequete($sql, array($idCollegeTemp)); + + } + + public function modifiercollege($idCollegeTemp, $idCollege) + { + $user = $_SESSION['login']; + + $sql = 'call sp_modifier_college_lien_parente(?, ?, ?)'; + $this->executerRequete($sql, array($idCollegeTemp, $idCollege, $user)); + } + + + public function ajouterGarantieCollege($idCollege, $idCollegeTemp) + { + $sql = 'delete from garantiecollege where idCollege=?'; + $this->executerRequete($sql, array($idCollege)); + + $sql = 'insert into garantiecollege (codeSociete, idCollege, idPolice, numeroPolice, codeGarantie, garantie, garantieEng, optionnelle, + additionnelle, tauxPlafond, forfaitPlafond, primeOption, user, plafond, plafondLettre, primeFamille, ordre, champApplication, + tauxPrime, capital, primeParTete) + + select codeSociete, ? as idCollege, idPolice, numeroPolice, codeGarantie, garantie, garantieEng, optionnelle, + additionnelle, tauxPlafond, forfaitPlafond, primeOption, user, plafond, plafondLettre, primeFamille, ordre, champApplication, + tauxPrime, capital, primeParTete + from garantie_temp where idCollegeTemp=?'; + + $this->executerRequete($sql, array($idCollege, $idCollegeTemp)); + } + + public function ajouterTableauPrestation($idCollege, $idCollegeTemp) + { + $sql = 'delete from prestationcollege where idCollege=?'; + $this->executerRequete($sql, array($idCollege)); + + $sql = 'INSERT INTO prestationcollege ( + codeSociete, + idCollege, + idPolice, + numeroPolice, + codeProduit, + codeReseau, + tm, + `user`, + dateSysteme, + tmBase, + rachatTm, + tauxRachatTm + ) + SELECT + codeSociete, + ? as idCollege, + idPolice, + numeroPolice, + codeProduit, + codeReseau, + tm, + `user`, + dateSysteme, + tmBase, + rachatTm, + tauxRachatTm + FROM prestation_temp where idCollegeTemp=?'; + + $this->executerRequete($sql, array($idCollege, $idCollegeTemp)); + } + + public function initGarantieCollege($idCollegeTemp) + { + $sql = 'insert into garantie_temp + ( + codeSociete, + idCollegeTemp, + idPolice, + numeroPolice, + codeGarantie, + garantie, + garantieEng, + optionnelle, + additionnelle, + tauxPlafond, + forfaitPlafond, + user, + plafond, + ordre, + plafondLettre, + champApplication, + primeParTete + ) + select + A.codeSociete, + B.id as idCollegeTemp, + B.idPolice, + B.numeroPolice, + A.codeGarantie, + A.libelle as garantie, + A.libelleEng as garantieEng, + A.optionnelle, + A.additionnelle, + A.tauxPlafond, + A.forfaitPlafond, + B.user, + ROUND((B.primeFamille*A.tauxPlafond),0)+A.forfaitPlafond as plafond, + A.ordre, A.plafondLettre, + A.champApplication, + A.primeParTete + from garantie A + join college_temp B on (B.codeSociete=A.codeSociete) + Where (B.id=?) and optionnelle!="1"'; + + $this->executerRequete($sql, array($idCollegeTemp)); + } + + public function initPrestationCollege($idCollegeTemp) + { + $user = $_SESSION['login']; + $codeProduitBase = $_SESSION['codeProduitBase']; + + $sql = 'call sp_init_prestation_college(?, ?, ?)'; + + $this->executerRequete($sql, array($idCollegeTemp, $codeProduitBase, $user)); + } + + public function initModifGarantieCollege($idCollegeTemp) + { + $sql = 'insert into garantie_temp + ( + codeSociete, + idCollege, + idCollegeTemp, + idPolice, + numeroPolice, + codeGarantie, + garantie, + garantieEng, + optionnelle, + additionnelle, + tauxPlafond, + forfaitPlafond, + primeOption, + user, + plafond, + ordre, + plafondLettre, + primeFamille, + champApplication, + primeParTete + ) + select + A.codeSociete, + A.idCollege, + B.id as idCollegeTemp, + B.idPolice, + B.numeroPolice, + A.codeGarantie, + A.garantie, + A.garantieEng, + A.optionnelle, + A.additionnelle, + A.tauxPlafond, + A.forfaitPlafond, + A.primeOption, + B.user, + A.plafond, + A.ordre, A.plafondLettre, + A.primeFamille, + A.champApplication, + A.primeParTete + from garantiecollege A + join college_temp B on (B.codeSociete=A.codeSociete) and (B.idCollege=A.idCollege) + Where (B.id=?)'; + + $this->executerRequete($sql, array($idCollegeTemp)); + } + + public function initModifPrestation($idCollegeTemp) + { + $sql = 'insert into prestation_temp ( + codeSociete, + idCollegeTemp, + idCollege, + idPolice, + numeroPolice, + codeProduit, + codeReseau, + tm, + user, + dateSysteme, + tmBase, + rachatTm, + tauxRachatTm, + tauxPrimeRachatTm + ) + select + A.codeSociete, + B.id as idCollegeTemp, + B.idCollege, + B.idPolice, + B.numeroPolice, + A.codeProduit, + A.codeReseau, + A.tm, + B.user, + now() as dateSysteme, + A.tmBase, + B.rachatTm, + B.tauxRachatTm, + B.tauxPrimeRachatTm + from prestationcollege A + join college_temp B on (B.codeSociete=A.codeSociete) and (B.idCollege=A.idCollege) + Where (B.id=?)'; + + $this->executerRequete($sql, array($idCollegeTemp)); + } + + public function majtauxplafond($idGarantie, $tauxPlafond) + { + $sql = 'update garantie_temp set tauxPlafond=? where (id=?)'; + $this->executerRequete($sql, array($tauxPlafond, $idGarantie)); + + $sql = 'update garantie_temp set plafond= ROUND((primeFamille*tauxPlafond),0)+forfaitPlafond where (id=?)'; + $this->executerRequete($sql, array($idGarantie)); + } + + public function imposerplafond($idGarantie, $plafond) + { + $sql = 'update garantie_temp set plafond=? where (id=?)'; + $this->executerRequete($sql, array($plafond, $idGarantie)); + } + + public function majtm($idPrestation, $tm) + { + $sql = 'update prestation_temp set tm=? where (id=?)'; + $this->executerRequete($sql, array($tm, $idPrestation)); + } + + public function majtmprestatairenplus($idPrestation, $tm) + { + $sql = 'update prestationcollegeplus set tm=? where (id=?)'; + $this->executerRequete($sql, array($tm, $idPrestation)); + } + + public function retirerprestatairenplus($idPrestation) + { + $sql = 'delete from prestationcollegeplus where (id=?)'; + $this->executerRequete($sql, array($idPrestation)); + } + + public function ajouterunprestataireenplus($codePrestataire) + { + $idCollege = $_SESSION['idCollege']; + $user = $_SESSION['login']; + + $sql = 'call sp_ajouterprestataireenplus(?, ?, ?)'; + $this->executerRequete($sql, array($idCollege, $codePrestataire, $user)); + } + + public function ajouterunprestataireenmoins($codePrestataire) + { + $idCollege = $_SESSION['idCollege']; + $user = $_SESSION['login']; + + $sql = 'call sp_ajouterprestataireenmoins(?, ?, ?)'; + $this->executerRequete($sql, array($idCollege, $codePrestataire, $user)); + } + + public function retirerprestatairenmoins($idPrestation) + { + $sql = 'delete from prestationcollegemoins where (id=?)'; + $this->executerRequete($sql, array($idPrestation)); + } + + // ajouterunprestatairetm + public function ajouterunprestatairetm($codePrestataire) + { + $idCollege = $_SESSION['idCollege']; + $user = $_SESSION['login']; + + $sql = 'call sp_ajouterprestatairetm(?, ?, ?)'; + $this->executerRequete($sql, array($idCollege, $codePrestataire, $user)); + } + + public function retirerprestatairetm($idPrestation) + { + $sql = 'delete from prestationcollegetm where (id=?)'; + $this->executerRequete($sql, array($idPrestation)); + } + + public function majtmprestatairetm($idPrestation, $tm) + { + $sql = 'update prestationcollegetm set tm=? where (id=?)'; + $this->executerRequete($sql, array($tm, $idPrestation)); + } + + public function majPrimeOpt($idGarantie, $primeOption) + { + $sql = 'call sp_maj_prime_opt(?, ?)'; + + $this->executerRequete($sql, array($idGarantie, $primeOption)); + } + + public function majPlafondOpt($idGarantie, $plafondOption) + { + $sql = 'call sp_maj_plafond_opt(?, ?)'; + + $this->executerRequete($sql, array($idGarantie, $plafondOption)); + } + + public function majlibgar($idGarantie, $libellegarantie) + { + $sql = 'update garantie_temp set garantie=? where (id=?)'; + $this->executerRequete($sql, array($libellegarantie, $idGarantie)); + } + + public function viderCollegTemp($user) + { + /* + $sql = 'DELETE FROM college_temp WHERE (user=?)'; + $this->executerRequete($sql, array($user)); + + $sql = 'DELETE FROM garantie_temp WHERE (user=?)'; + $this->executerRequete($sql, array($user)); + + $sql = 'DELETE FROM prestation_temp WHERE (user=?)'; + $this->executerRequete($sql, array($user)); + */ + + $sql = 'call sp_vider_college_temp(?)'; + $this->executerRequete($sql, array($user)); + } + + public function init_changement_college($idAdherent) + { + $user = $_SESSION['login']; + $sql = 'call sp_init_changement_college(?, ?)'; + + $college_temp = $this->executerRequete($sql, array($idAdherent, $user)); + return $college_temp->fetch(); + } + + public function changer_college_temp($idAdherent, $idCollege) + { + $user = $_SESSION['login']; + $sql = 'call sp_changer_college_temp(?, ?, ?)'; + + $college_temp = $this->executerRequete($sql, array($idAdherent, $idCollege, $user)); + return $college_temp->fetch(); + } + + public function changer_college($idAdherent) + { + $user = $_SESSION['login']; + $sql = 'call sp_changer_college(?, ?)'; + $this->executerRequete($sql, array($idAdherent, $user)); + } + + public function getCollegesPolice() + { + $user = $_SESSION['login']; + $sql = 'SELECT * FROM college_temp WHERE (user=?) order by libelleCollege'; + $college = $this->executerRequete($sql, array($user)); + return $college; + } + + public function getTotaldcollege($idPolice) { + $user = $_SESSION['login']; + $sql = 'call sp_totalcollege_temp(?, ?)'; + $totalcollege = $this->executerRequete($sql, array($idPolice, $user)); + return $totalcollege->fetch(PDO::FETCH_ASSOC); + } + + public function selectioncollegetemp($idCollegeTemp, $choix) { + $sql = 'update college_temp set choix=? WHERE (id=?)'; + $this->executerRequete($sql, array($choix, $idCollegeTemp)); + } + + public function majplafondadd($idGarantie, $plafond) + { + $sql = 'update garantieaddition_temp set plafond=? where (id=?)'; + $this->executerRequete($sql, array($plafond, $idGarantie)); + } + + public function majprimeadd($idGarantie, $primeOption) + { + $sql = 'update garantieaddition_temp set primeOption=? where (id=?)'; + $this->executerRequete($sql, array($primeOption, $idGarantie)); + } + + public function recapituler_maj_limite_college($idCollegeTemp) + { + $user = $_SESSION['login']; + $sql = 'call sp_recapituller_maj_limite_college(?, ?)'; + + $this->executerRequete($sql, array($idCollegeTemp, $user)); + } + + public function modifierlimitecollegetemp($idCollegeTemp) + { + $user = $_SESSION['login']; + $sql = 'call sp_modifier_limite_college_temp(?)'; + $this->executerRequete($sql, array($idCollegeTemp, $user)); + } + + public function getCollegepoliceId($idCollege) { + $sql = 'SELECT A.id AS idCollege, A.*, B.libelle as produit + from college A + join produit B on (B.codeSociete=A.codeSociete) AND (B.codeProduit=A.codeProduit) + where A.id=?'; + + $college = $this->executerRequete($sql, array($idCollege)); + return $college->fetch(); + } + + public function getprestatairehorsreseau($idCollege) { + $sql = 'call sp_getprestatairehorsreseau(?);'; + + $college = $this->executerRequete($sql, array($idCollege)); + return $college->fetchAll(PDO::FETCH_ASSOC); + } + + public function getprestataireenplus($idCollege) { + $sql = 'call sp_getprestataireenplus(?);'; + + $college = $this->executerRequete($sql, array($idCollege)); + return $college->fetchAll(PDO::FETCH_ASSOC); + } + + // Prestataires en moins + public function getprestatairereseau($idCollege) { + $sql = 'call sp_getprestatairereseau(?);'; + + $college = $this->executerRequete($sql, array($idCollege)); + return $college->fetchAll(PDO::FETCH_ASSOC); + } + + public function getprestataireenmoins($idCollege) { + $sql = 'call sp_getprestataireenmoins(?);'; + + $college = $this->executerRequete($sql, array($idCollege)); + return $college->fetchAll(PDO::FETCH_ASSOC); + } + + public function getListeCollege($idPolice) { + $sql = 'SELECT id as code, CONCAT(codeProduit, " : ", libelleCollege) as libelle FROM college + where (idPolice=?) order by 2'; + $liste = $this->executerRequete($sql, array($idPolice)); + return $liste; + // return $liste->fetch(PDO::FETCH_ASSOC); + } + + // Prestataires dérogation TM + public function getprestatairereseautm($idCollege) { + $sql = 'call sp_getprestatairereseau_tm(?);'; + + $college = $this->executerRequete($sql, array($idCollege)); + return $college->fetchAll(PDO::FETCH_ASSOC); + } + + public function getprestatairetm($idCollege) { + $sql = 'call sp_getprestataire_tm(?);'; + + $college = $this->executerRequete($sql, array($idCollege)); + return $college->fetchAll(PDO::FETCH_ASSOC); + } + + + public function majchampapplicationplafond($idGarantie, $choix) + { + /* + $sql = 'update garantie_temp set champApplication=? where (id=?)'; + $this->executerRequete($sql, array($choix, $idGarantie)); + */ + $sql = 'update garantie_temp set champApplication=?, primeParTete=? where (id=?)'; + $this->executerRequete($sql, array($choix, $choix, $idGarantie)); + } + + public function changercategorieprimecollege_temp($codeProduit, $codeGcAssureur) + { + $user = $_SESSION['login']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + + $sql = 'CALL sp_changer_categorie_prime_college_temp(?, ?, ?, ?);'; + + //var_dump($idCollegeTemp, $codeProduit, $codeGcAssureur, $user); + $resultat = $this->executerRequete($sql, array($idCollegeTemp, $codeProduit, $codeGcAssureur, $user)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function maj_libelle_college($idCollegeTemp, $nouvLibelleCollege) + { + $sql = 'CALL sp_maj_libelle_college(?, ?);'; + + $this->executerRequete($sql, array($idCollegeTemp, $nouvLibelleCollege)); + } + + + + public function getPrimesCollege($idCollegeTemp) + { + if (est_anglophone()) + { + $sql = 'CALL sp_get_primes_college_temp_eng(?);'; + } + else + { + $sql = 'CALL sp_get_primes_college_temp(?);'; + } + + $resultat = $this->executerRequete($sql, array($idCollegeTemp)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getPrimeMincollege($idPrime){ + $sql = "select primeMin + from primecollege_temp + where id=?;"; + + $resultat = $this->executerRequete($sql, array($idPrime)); + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function getStatut($idPrime){ + $sql = "select codeLienParente + from primecollege_temp + where id=?;"; + + $resultat = $this->executerRequete($sql, array($idPrime)); + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + + public function getIdCollegeTemp($idPrime){ + $sql = "select idCollegeTemp + from primecollege_temp + where id=?;"; + + $resultat = $this->executerRequete($sql, array($idPrime)); + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function getNombreFamille($idCollegeTemp){ + $sql = "select population + from primecollege_temp + where idCollegeTemp=? + and codeLienParente='A';"; + + $resultat = $this->executerRequete($sql, array($idCollegeTemp)); + return $resultat->fetch(PDO::FETCH_ASSOC); + + } + + + public function getNombreDependants($idCollegeTemp){ + $sql = "select SUM(population) as nbdependant + from primecollege_temp + where idCollegeTemp=? + and codeLienParente<>'A';"; + + $resultat = $this->executerRequete($sql, array($idCollegeTemp)); + return $resultat->fetch(PDO::FETCH_ASSOC); + + } + + public function majprimecollege($idPrime, $prime) + { + + $sql = 'UPDATE primecollege_temp SET + prime=?, + primeTarif=?, + maj = "1" + WHERE (id=?)'; + + $this->executerRequete($sql, array($prime, $prime, $idPrime)); + } + + public function majpopulationcollege($idPrime, $population) + { + + + $sql = 'UPDATE primecollege_temp SET + population=?, + maj = "1" + WHERE (id=?)'; + $this->executerRequete($sql, array($population, $idPrime)); + } + + public function majforfaitcollege($idPrime, $forfait) + { + $sql = 'update primecollege_temp set forfait=? where (id=?)'; + $this->executerRequete($sql, array($forfait, $idPrime)); + } + + + public function majplafondcollege($idPrime, $plafond) + { + + $sql = 'UPDATE primecollege_temp SET + forfaitPlafond=?, + plafondBeneficiaire=?, + maj = "1" + WHERE (id=?);'; + $this->executerRequete($sql, array($plafond, $plafond, $idPrime)); + + } + + public function majplafondfamille($plafond) + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = "update primecollege_temp + set forfait = 1, forfaitPlafond=?, plafondBeneficiaire=? + where (idCollegeTemp=?) and codeLienParente='A';"; + $this->executerRequete($sql, array($plafond, $plafond, $idCollegeTemp)); + + } + + + public function majplafondIndividu($plafond) + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = "update primecollege_temp + set forfait = 1, forfaitPlafond=?, plafondBeneficiaire=? + where (idCollegeTemp=?);"; + $this->executerRequete($sql, array($plafond, $plafond, $idCollegeTemp)); + + } + + + public function ajouterPrimesCollege($idCollege, $idCollegeTemp) + { + $sql = 'call sp_ajouter_prime_college(?, ?)'; + + $this->executerRequete($sql, array($idCollege, $idCollegeTemp)); + } + + public function getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente) + { + $sql = 'call sp_afficher_college_lien_parente_temp(?, ?)'; + + $collegeTemp = $this->executerRequete($sql, array($idCollegeTemp, $codeLienParente)); + + return $collegeTemp->fetch(); + } + + public function getGarantieLienParente($idCollegeTemp, $codeLienParente) + { + if (est_anglophone()) + { + $sql = 'CALL sp_afficher_garantie_college_lien_parente_temp_eng(?, ?);'; + } + else + { + $sql = 'CALL sp_afficher_garantie_college_lien_parente_temp(?, ?);'; + } + + $resultat = $this->executerRequete($sql, array($idCollegeTemp, $codeLienParente)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getGarantieConsulter($idCollege, $codeProduit) + { + + $sql = 'CALL sp_afficher_garantie_college(?, ?);'; + + $resultat = $this->executerRequete($sql, array($idCollege, $codeProduit)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + + public function enregistrercollegelienparentetemp($idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification, $seuilRdCollege, $plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $ticketModerateurHorsReseau, $ageLimiteEnfantEleve, $numeroOptionTarif) + { + + $plafondAdherent = str_replace(' ', '', $plafondAdherent); + + $sql = 'call sp_enregistrer_college_lien_parente_temp(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, + ?,?,?,?,?,?,?,?,?,?,?,?,?,?);'; + + $this->executerRequete($sql, array($idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege, + $delaiCarenceCollege, $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification, $seuilRdCollege, $plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $ticketModerateurHorsReseau, $ageLimiteEnfantEleve, $numeroOptionTarif)); + } + + public function getprestationlienparente($idCollegeTemp, $codeLienParente) + { + if (est_anglophone()) + { + $sql = 'call sp_get_prestation_lien_parente_temp_eng(?, ?)'; + } + else + { + $sql = 'call sp_get_prestation_lien_parente_temp(?, ?)'; + } + + $resultat = $this->executerRequete($sql, array($idCollegeTemp, $codeLienParente)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getreseauhorslienparente($idCollegeTemp, $codeLienParente) + { + if (est_anglophone()) + { + $sql = 'call sp_get_reseaus_hors_lien_parente_eng(?, ?, ?)'; + } + else + { + $sql = 'call sp_get_reseaus_hors_lien_parente(?, ?, ?)'; + } + + $codeSociete = $_SESSION['codeSociete']; + + $resultat = $this->executerRequete($sql, array($codeSociete, $idCollegeTemp, $codeLienParente)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function majtmlienparente($idPrestation, $tm) + { + $sql = 'update prestationlienparente_temp set tm=? where (id=?)'; + $this->executerRequete($sql, array($tm, $idPrestation)); + } + + public function ajoutertousreseaulienparente($idCollegeTemp, $codeLienParente) + { + $sql = 'call sp_r_ajouter_tous_reseau_lien_parente_temp(?, ?, ?)'; + + $this->executerRequete($sql, array($idCollegeTemp, $codeLienParente)); + } + + public function retirerunreseaulienparente($idCollegeTemp, $codeLienParente, $codeReseau) + { + $sql = 'call sp_r_retirer_reseau_lien_parente_temp(?, ?, ?)'; + + $this->executerRequete($sql, array($idCollegeTemp, $codeLienParente, $codeReseau)); + } + + public function ajouterunreseaulienparente($idCollegeTemp, $codeLienParente, $codeReseau) + { + $sql = 'call sp_r_ajouter_reseau_lien_parente_temp(?, ?, ?)'; + + $this->executerRequete($sql, array($idCollegeTemp, $codeLienParente, $codeReseau)); + } + + public function imposerplafondlienparente($idGarantie, $plafond) + { + $sql = 'update garantielienparente_temp set plafond=? where (id=?)'; + $this->executerRequete($sql, array($plafond, $idGarantie)); + } + + public function majpopulationcollegeliste() + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = 'call sp_maj_population_college_liste_temp(?)'; + + $this->executerRequete($sql, array($idCollegeTemp)); + } + + public function majpopulationcollegelistevalide() + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = 'call sp_maj_population_college_liste_valide(?)'; + + $this->executerRequete($sql, array($idCollegeTemp)); + } + + public function getNomStatus($codeLienParente) + { + $sql = 'SELECT codeLienParente, libelle, libelleEng FROM lienparente + WHERE codeLienParente=?;'; + + $resultat = $this->executerRequete($sql, array($codeLienParente)); + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function getNomGarant($codeGcAssureur) + { + $sql = 'SELECT libelle FROM gc_assureur + WHERE codeGcAssureur=?;'; + + $resultat = $this->executerRequete($sql, array($codeGcAssureur))->fetch(PDO::FETCH_ASSOC); + + return $resultat['libelle']; + } + + public function getTauxForfait(){ + if (est_anglophone()){ + $sql = "SELECT id AS code, libelleEng AS libelle + FROM choixforfaittaux + where id='1';"; + }else{ + $sql = "SELECT id AS code, libelle + FROM choixforfaittaux + where id='1';"; + } + $resultat = $this->executerRequete($sql); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getObservationplafond(){ + if (est_anglophone()){ + $sql = "SELECT codeObservation AS code, libelleEng AS libelle + FROM observationsplafond order by libelle;"; + }else{ + $sql = "SELECT codeObservation AS code, libelle + FROM observationsplafond order by libelle;"; + } + $resultat = $this->executerRequete($sql); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getNomGarantie($codeGarantie) + { + $sql = 'SELECT codeGarantie, libelle, libelleEng FROM garantie + WHERE codeSociete = ? and codeGarantie=?;'; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'],$codeGarantie)); + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + + public function getBaremeProduit($codeProduit, $codeGcAssureur){ + + $sql = "SELECT id AS code, libelle + FROM baremepriseencharge + WHERE codeProduit=? + AND codeGcAssureur=?;"; + + $resultat = $this->executerRequete($sql, array($codeProduit,$codeGcAssureur)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + ///////////////////////////////////particulariteStatus////////////////////////////////////////// + + public function majageLimiteStatutcollege_temp($ageLimiteStatus, $codeLienParente){ + + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + switch ($codeLienParente): + case "A": + $sql = 'update college_temp set ageLimiteAdherent=? where (id=?)'; + $this->executerRequete($sql, array($ageLimiteStatus, $idCollegeTemp)); + break; + case "C": + $sql = 'update college_temp set ageLimiteConjoint=? where (id=?)'; + $this->executerRequete($sql, array($ageLimiteStatus, $idCollegeTemp)); + break; + case "D": + $sql = 'update college_temp set ageLimiteAutreConjoint=? where (id=?)'; + $this->executerRequete($sql, array($ageLimiteStatus, $idCollegeTemp)); + break; + case "E": + $sql = 'update college_temp set ageLimiteEnfant=? where (id=?)'; + $this->executerRequete($sql, array($ageLimiteStatus, $idCollegeTemp)); + break; + case "F": + $sql = 'update college_temp set ageLimiteAscendant=? where (id=?)'; + $this->executerRequete($sql, array($ageLimiteStatus, $idCollegeTemp)); + break; + case "O": + $sql = 'update college_temp set ageLimiteAutre=? where (id=?)'; + $this->executerRequete($sql, array($ageLimiteStatus, $idCollegeTemp)); + endswitch; + } + + + public function majageLimiteStatus($idCollege, $ageLimiteStatus, $codeLienParente) + { + $this->majageLimiteStatutcollege_temp($ageLimiteStatus, $codeLienParente); + + $sql = 'update collegelienparente_temp set ageLimiteStatus=? where (id=?)'; + $this->executerRequete($sql, array($ageLimiteStatus, $idCollege)); + } + + public function majageLimiteStatutElevecollege_temp($ageLimiteStatus, $codeLienParente){ + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = 'update college_temp set ageLimiteEnfantEleve=? where (id=?)'; + $this->executerRequete($sql, array($ageLimiteStatus, $idCollegeTemp)); + } + + + public function majageLimiteStatusEleve($idCollege, $ageLimiteStatusEleve, $codeLienParente) + { + $this->majageLimiteStatutElevecollege_temp($ageLimiteStatus, $codeLienParente); + + $sql = 'update collegelienparente_temp set ageLimiteStatusEleve=? where (id=?)'; + $this->executerRequete($sql, array($ageLimiteStatusEleve, $idCollege)); + } + + public function majticketModerateurStatuscollege_temp($ticketModerateurStatus, $codeLienParente){ + + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + switch ($codeLienParente): + case "A": + $sql = 'update college_temp set ticketModerateurAdherent=? where (id=?)'; + $this->executerRequete($sql, array($ticketModerateurStatus, $idCollegeTemp)); + break; + case "C": + $sql = 'update college_temp set ticketModerateurConjoint=? where (id=?)'; + $this->executerRequete($sql, array($ticketModerateurStatus, $idCollegeTemp)); + break; + case "D": + $sql = 'update college_temp set ticketModerateurAutreConjoint=? where (id=?)'; + $this->executerRequete($sql, array($ticketModerateurStatus, $idCollegeTemp)); + break; + case "E": + $sql = 'update college_temp set ticketModerateurEnfant=? where (id=?)'; + $this->executerRequete($sql, array($ticketModerateurStatus, $idCollegeTemp)); + break; + case "F": + $sql = 'update college_temp set ticketModerateurAscendant=? where (id=?)'; + $this->executerRequete($sql, array($ticketModerateurStatus, $idCollegeTemp)); + break; + case "O": + $sql = 'update college_temp set ticketModerateurAutre=? where (id=?)'; + $this->executerRequete($sql, array($ticketModerateurStatus, $idCollegeTemp)); + endswitch; + } + + public function majticketModerateurStatus($idCollege, $ticketModerateurStatus, $codeLienParente) + { + $this->majticketModerateurStatuscollege_temp($ticketModerateurStatus, $codeLienParente); + + $sql = 'update collegelienparente_temp set ticketModerateurStatus=? where (id=?)'; + $this->executerRequete($sql, array($ticketModerateurStatus, $idCollege)); + } + + public function majticketModerateurStatusElevecollege_temp($ticketModerateurStatus, $codeLienParente){ + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = 'update college_temp set ticketModerateurEnfantEleve=? where (id=?)'; + $this->executerRequete($sql, array($ticketModerateurStatus, $idCollegeTemp)); + } + + + public function majticketModerateurStatusEleve($idCollege, $ticketModerateurStatusEleve, $codeLienParente) + { + $this->majticketModerateurStatusElevecollege_temp($ticketModerateurStatus, $codeLienParente); + + $sql = 'update collegelienparente_temp set ticketModerateurStatusEleve=? where (id=?)'; + $this->executerRequete($sql, array($ticketModerateurStatusEleve, $idCollege)); + + } + + + public function majsurprimeOptioncollege_temp($surprimeOption, $codeLienParente){ + + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + switch ($codeLienParente): + case "A": + $sql = 'update college_temp set surprimeOptionAdherent=? where (id=?)'; + $this->executerRequete($sql, array($surprimeOption, $idCollegeTemp)); + break; + case "C": + $sql = 'update college_temp set surprimeOptionConjoint=? where (id=?)'; + $this->executerRequete($sql, array($surprimeOption, $idCollegeTemp)); + break; + case "D": + $sql = 'update college_temp set surprimeOptionAutreConjoint=? where (id=?)'; + $this->executerRequete($sql, array($surprimeOption, $idCollegeTemp)); + break; + case "E": + $sql = 'update college_temp set surprimeOptionEnfant=? where (id=?)'; + $this->executerRequete($sql, array($surprimeOption, $idCollegeTemp)); + break; + case "F": + $sql = 'update college_temp set surprimeOptionAscendant=? where (id=?)'; + $this->executerRequete($sql, array($surprimeOption, $idCollegeTemp)); + break; + case "O": + $sql = 'update college_temp set surprimeOptionAutre=? where (id=?)'; + $this->executerRequete($sql, array($surprimeOption, $idCollegeTemp)); + endswitch; + } + + public function majsurprimeOptionstatus($idCollege, $surprimeOption, $codeLienParente) + { + $this->majsurprimeOptioncollege_temp($surprimeOption, $codeLienParente); + + $sql = 'update collegelienparente_temp set surprimeOption=? where (id=?)'; + $this->executerRequete($sql, array($surprimeOption, $idCollege)); + } + + public function majsurprimeOptionstatuselevecollege_temp($surprimeOption, $codeLienParente){ + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = 'update college_temp set surprimeOptionEnfantEleve=? where (id=?)'; + $this->executerRequete($sql, array($surprimeOption, $idCollegeTemp)); + } + + + public function majsurprimeOptionstatuseleve($idCollege, $surprimeOption, $codeLienParente) + { + $this->majsurprimeOptionstatuselevecollege_temp($surprimeOption, $codeLienParente); + + $sql = 'update collegelienparente_temp set surprimeOptionEleve=? where (id=?)'; + $this->executerRequete($sql, array($surprimeOption, $idCollege)); + + } + + ///////////////////////////////////garantielienparente_temp/////////////////////////////////// + public function majgarantielienparente($idGarantie){ + + $sql = 'call sp_maj_garantielienparente_temp(?);'; + $this->executerRequete($sql, array($idGarantie)); + + } + + + public function majforfaitgarantie($idGarantie, $forfait) + { + $sql = 'update garantielienparente_temp set forfait=? where (id=?)'; + $this->executerRequete($sql, array($forfait, $idGarantie)); + } + + public function majplafondgarantie($idGarantie, $plafond, $choixForfait) + { + if($choixForfait =="1"){ + $sql = 'update garantielienparente_temp set + forfaitPlafond=?,plafond=? + where (id=?)'; + $this->executerRequete($sql, array($plafond, $plafond, $idGarantie)); + }else{ + $sql = 'update garantielienparente_temp set + tauxPlafond=?,tauxPlafondLimiteAdherent=?,tauxPlafondLimiteBeneficiaire=? + where (id=?)'; + $this->executerRequete($sql, array($plafond, $plafond, $plafond, $idGarantie)); + } + } + + public function majnbretransactiongarantie($idGarantie, $nbreTransaction) + { + $sql = 'update garantielienparente_temp set nbreTransaction=? where (id=?)'; + $this->executerRequete($sql, array($nbreTransaction, $idGarantie)); + } + + public function majperiodicitegarantie($idGarantie, $codePeriodicite) + { + $sql = 'update garantielienparente_temp set codePeriodicite=? where (id=?)'; + $this->executerRequete($sql, array($codePeriodicite, $idGarantie)); + } + + public function majdelaicarencegarantie($idGarantie, $delaiCarenceFamilleActe){ + $sql = 'update garantielienparente_temp set delaiCarenceFamilleActe=? where (id=?)'; + $this->executerRequete($sql, array($delaiCarenceFamilleActe, $idGarantie)); + + } + + public function majticketmoderateurgarantie($idGarantie, $ticketModerateur) + { + $sql = 'update garantielienparente_temp set ticketModerateur=? where (id=?)'; + $this->executerRequete($sql, array($ticketModerateur, $idGarantie)); + } + + public function trouvelibelleobservationplafond($codeObservation){ + $codeSociete = $_SESSION['codeSociete']; + if (est_anglophone()){ + $sql = 'SELECT id, libelleEng as libelle FROM observationsplafond WHERE (codeSociete=?) AND (codeObservation=?)'; + }else{ + $sql = 'SELECT id, libelle FROM observationsplafond WHERE (codeSociete=?) AND (codeObservation=?)'; + } + + $resultat = $this->executerRequete($sql, array($codeSociete, $codeObservation)); + + return $resultat->fetch(); + } + + public function majplafondlettregarantie($idGarantie, $codeObservation) + { + $plafondLettre = $this->trouvelibelleobservationplafond($codeObservation); + + $sql = 'update garantielienparente_temp set plafondLettre=?, codeObservation=? where (id=?)'; + $this->executerRequete($sql, array($plafondLettre['libelle'], $codeObservation, $idGarantie)); + } + + ///////////////////////////////////familleacte/////////////////////////////////////////////// + + public function existeligne($codeLienParente){ + + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = 'SELECT id FROM p_familleacte_produit_lienparente_temp + WHERE (codeSociete=?) and (idCollegeTemp=?) and (codeLienParente=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $idCollegeTemp, $codeLienParente)); + return ($resultat->rowCount() > 0); + } + + public function majforfaitfamilleacte($idFamilleacte, $forfait) + { + $sql = 'update p_familleacte_produit_lienparente_temp set forfait=? where (id=?)'; + $this->executerRequete($sql, array($forfait, $idFamilleacte)); + } + + public function majplafondfamilleacte($idFamilleacte, $plafond, $choixForfait) + { + if($choixForfait =="1"){ + $sql = 'update p_familleacte_produit_lienparente_temp set forfaitPlafond=?,tauxPlafond=0 where (id=?)'; + $this->executerRequete($sql, array($plafond, $idFamilleacte)); + }else{ + $sql = 'update p_familleacte_produit_lienparente_temp set tauxPlafond=?, forfaitPlafond=0 where (id=?)'; + $this->executerRequete($sql, array($plafond, $idFamilleacte)); + } + } + + public function majnbretransactionfamilleacte($idFamilleacte, $nbreTransaction) + { + $sql = 'update p_familleacte_produit_lienparente_temp set nbreTransaction=? where (id=?)'; + $this->executerRequete($sql, array($nbreTransaction, $idFamilleacte)); + } + + public function majperiodicitefamilleacte($idFamilleacte, $codePeriodicite) + { + $sql = 'update p_familleacte_produit_lienparente_temp set codePeriodicite=? where (id=?)'; + $this->executerRequete($sql, array($codePeriodicite, $idFamilleacte)); + } + + public function majobservationfamilleacte($idFamilleacte, $codeObservation) + { + //var_dump($codeObservation); + if($codeObservation=="IL"){ + $sql = 'update p_familleacte_produit_lienparente_temp + set codeObservation=?, + forfaitPlafond =9999999999 + where (id=?)'; + }else{ + $sql = 'update p_familleacte_produit_lienparente_temp set codeObservation=? where (id=?)'; + } + + $this->executerRequete($sql, array($codeObservation, $idFamilleacte)); + } + + public function majdelaicarencefamilleacte($idFamilleacte, $delaiCarenceFamilleActe){ + $sql = 'update p_familleacte_produit_lienparente_temp set delaiCarenceFamilleActe=? where (id=?)'; + $this->executerRequete($sql, array($delaiCarenceFamilleActe, $idFamilleacte)); + + } + + + public function majticketmoderateurfamilleacte($idFamilleacte, $ticketModerateur) + { + $sql = 'update p_familleacte_produit_lienparente_temp set ticketModerateur=? where (id=?)'; + $this->executerRequete($sql, array($ticketModerateur, $idFamilleacte)); + } + + + ////////////////////////////actes////////////////////////////////// + + public function majforfaitacte($idActe, $forfait) + { + $sql = 'update p_acte_collegelienparente_temp set forfait=? where (id=?)'; + $this->executerRequete($sql, array($forfait, $idActe)); + } + + public function majplafondacte($idActe, $plafond, $choixForfait) + { + if($choixForfait =="1"){ + $sql = 'update p_acte_collegelienparente_temp set forfaitPlafond=? where (id=?)'; + $this->executerRequete($sql, array($plafond, $idActe)); + }else{ + $sql = 'update p_acte_collegelienparente_temp set tauxPlafond=? where (id=?)'; + $this->executerRequete($sql, array($plafond, $idActe)); + } + } + + public function majnbretransactionacte($idActe, $nbreTransaction) + { + $sql = 'update p_acte_collegelienparente_temp set nbreTransaction=? where (id=?)'; + $this->executerRequete($sql, array($nbreTransaction, $idActe)); + } + + public function majperiodiciteacte($idActe, $codePeriodicite) + { + $sql = 'update p_acte_collegelienparente_temp set codePeriodicite=? where (id=?)'; + $this->executerRequete($sql, array($codePeriodicite, $idActe)); + } + + + public function majobservationacte($idActe, $codeObservation) + { + if($codeObservation=="EP"){ + $sql = 'update p_acte_collegelienparente_temp set codeObservation=?, ententePrealable="1" where (id=?)'; + }elseif($codeObservation=="IL"){ + $sql = 'update p_acte_collegelienparente_temp + set codeObservation=?, + ententePrealable="0", + forfaitPlafond =9999999999 + where (id=?)'; + }else{ + $sql = 'update p_acte_collegelienparente_temp set codeObservation=?, ententePrealable="0" where (id=?)'; + } + + $this->executerRequete($sql, array($codeObservation, $idActe)); + } + + public function majdelaicarenceacte($idActe, $delaiCarenceActe){ + $sql = 'update p_acte_collegelienparente_temp set delaiCarenceActe=? where (id=?)'; + $this->executerRequete($sql, array($delaiCarenceActe, $idActe)); + + } + + public function majticketmoderateuracte($idActe, $ticketModerateur) + { + $sql = 'update p_acte_collegelienparente_temp set ticketModerateur=? where (id=?)'; + $this->executerRequete($sql, array($ticketModerateur, $idActe)); + } + + //////////////////////////////ToutFamilleacte/////////////////////////////////// + + public function majtoutforfaitfamilleacte($forfaitFamilleActe){ + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + $sql = 'UPDATE p_familleacte_produit_lienparente_temp SET forfait=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($forfaitFamilleActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + } + + + public function majtoutplafondfamilleacte($plafondFamilleActe, $choixForfait) + { + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + if($choixForfait =="1"){ + $sql = 'update p_familleacte_produit_lienparente_temp set forfaitPlafond=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($plafondFamilleActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + }else{ + $sql = 'update p_familleacte_produit_lienparente_temp set tauxPlafond=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($plafondFamilleActe)); + } + } + + public function majtoutnbretransactionfamilleacte($nbreTransactionFamilleActe) + { + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + $sql = 'update p_familleacte_produit_lienparente_temp set nbreTransaction=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($nbreTransactionFamilleActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + } + + + public function majtoutperiodicitefamilleacte($codePeriodiciteFamilleActe) + { + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + $sql = 'update p_familleacte_produit_lienparente_temp set codePeriodicite=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($codePeriodiciteFamilleActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + } + + public function majtoutdelaicarencefamilleacte($delaiCarenceFamilleActe){ + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + $sql = 'update p_familleacte_produit_lienparente_temp set delaiCarenceFamilleActe=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($delaiCarenceFamilleActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + + } + + public function majtoutticketmoderateurfamilleacte($ticketModerateurFamilleActe) + { + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + $sql = 'update p_familleacte_produit_lienparente_temp set ticketModerateur=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($ticketModerateurFamilleActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + } + + // 05-11-2020 + + public function viderfamilleacteproduitlienparente(){ + $sql = 'DELETE FROM p_familleacte_produit_lienparente_temp;'; + $this->executerRequete($sql); + } + + public function videractecollegelienparente_temp(){ + $sql = 'DELETE FROM p_acte_collegelienparente_temp;'; + $this->executerRequete($sql); + } + + //////////////////////////////Toutacte/////////////////////////////////// + + public function majtoutforfaitacte($forfaitActe){ + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + $sql = 'update p_acte_collegelienparente_temp set forfait=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($forfaitActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + } + + + public function majtoutplafondacte($plafondActe, $choixForfait) + { + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + if($choixForfait =="1"){ + $sql = 'update p_acte_collegelienparente_temp set forfaitPlafond=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($plafondActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + }else{ + $sql = 'update p_acte_collegelienparente_temp set tauxPlafond=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($plafondActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + } + } + + public function majtoutnbretransactionacte($nbreTransactionActe) + { + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + $sql = 'update p_acte_collegelienparente_temp set nbreTransaction=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($nbreTransactionActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + } + + + public function majtoutcodeperiodiciteacte($codePeriodiciteActe) + { + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + $sql = 'update p_acte_collegelienparente_temp set codePeriodicite=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($codePeriodiciteActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + } + + public function majtoutobservationacte($codeObservationActe) + { + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + $sql = 'update p_acte_collegelienparente_temp set codeObservation=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($codeObservationActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + } + + public function majtoutdelaicarenceacte($delaiCarenceActe){ + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + $sql = 'update p_acte_collegelienparente_temp set delaiCarenceActe=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($delaiCarenceActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + + } + + public function majtoutticketmoderateuracte($ticketModerateurActe) + { + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + $sql = 'update p_acte_collegelienparente_temp set ticketModerateur=? + WHERE (codeSociete=? AND idCollegeTemp=? AND + codeLienParente=? AND codeGarantie=?);'; + $this->executerRequete($sql, array($ticketModerateurActe,$codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + } + + ///////////////////////////////// + public function getGarantPolice($idPolice){ + $sql = 'SELECT id, codeGcAssureur + FROM police + WHERE id = ?'; + + $garant = $this->executerRequete($sql, array($idPolice)); + return $garant->fetch(); + } + + public function getTypeGarantPolice($idPolice){ + + $garant = $this->getGarantPolice($idPolice); + + if(!empty($garant['codeGcAssureur'])){ + $sql = 'SELECT a.typeGarant AS idTypeGarant, b.codeTypeGarant + FROM gc_assureur a + JOIN gc_typegarant b ON (b.id = a.typeGarant) + WHERE a.codeSociete =? + AND a.codeGcAssureur = ?;'; + $typeGarant = $this->executerRequete($sql, array($_SESSION['codeSociete'], $garant['codeGcAssureur'])); + + return $typeGarant->fetch(); + }else{ + return false; + } + } + + public function getTypeTarifActe(){ + + if (est_anglophone()) + { + $sql = "SELECT codeTypeTarifActe AS code, libelleEng AS libelle + FROM p_typetarifacte + WHERE codeSociete =? + AND codeTypeTarifActe IN ('TCOL');"; + }else{ + $sql = "SELECT codeTypeTarifActe AS code, libelle + FROM p_typetarifacte + WHERE codeSociete =? + AND codeTypeTarifActe IN ('TCOL');"; + } + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'])); + return $resultat->fetchAll(); + } + + public function getPopulationStatut($idCollegeTemp,$codeLienParente){ + + $sql = "SELECT codeLienParente, population + FROM primecollege_temp + WHERE (codeSociete = ?) + AND (codeLienParente = ?) + AND (idCollegeTemp = ?);"; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'],$codeLienParente,$idCollegeTemp)); + return $resultat->fetch(); + } + + public function dupliquerstatut($codeLienParente){ + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeProduit = $_SESSION['codeProduit']; + $user = $_SESSION['login']; + + + $sql = 'CALL sp_dupliquer_statut(?,?,?,?,?);'; + $this->executerRequete($sql, array($codeSociete, $idCollegeTemp, $user)); + } + + public function chargerbareme($idBaremePriseEnCharge,$idCollegeTemp,$codeLienParente){ + + $user = $_SESSION['login']; + + $sql = 'CALL sp_inserer_bareme_collegetemp(?, ?, ?, ?);'; + + $this->executerRequete($sql, array($idBaremePriseEnCharge,$idCollegeTemp,$codeLienParente,$user)); + + } + + + public function majprimebase($codeBaseTarification, $codeProduit, $codeGcAssureur) + { + $codeSociete = $_SESSION['codeSociete']; + $user = $_SESSION['login']; + + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + if($codeBaseTarification=="FAM"){ + $sql = "CALL sp_maj_prime_base_famille(?,?,?,?,?)"; + }elseif($codeBaseTarification=="IND"){ + $sql = "CALL sp_maj_prime_base_individu(?,?,?,?,?)"; + }else{ + $sql = "CALL sp_maj_prime_base_aucune(?,?,?,?,?)"; + } + + $this->executerRequete($sql, array($codeSociete,$codeProduit,$codeGcAssureur,$user, $idCollegeTemp)); + } + + public function getPlafondFamille($codeProduit,$codeGcAssureur) + { + $sql = "SELECT fn_plafond_famille_produit(?,?) AS plafondAdherent;"; + + $resultat = $this->executerRequete($sql, array($codeProduit,$codeGcAssureur))->fetch(); + + return $resultat['plafondAdherent']; + } + + public function getPlafondIndividu($codeProduit,$codeGcAssureur) + { + $sql = "SELECT fn_plafond_individu_produit(?,?) AS plafondIndividu;"; + + $resultat = $this->executerRequete($sql, array($codeProduit,$codeGcAssureur))->fetch(); + + return $resultat['plafondIndividu']; + } + + public function getBaremeConsultation($idBaremePriseEnCharge){ + + $sql = "SELECT id AS code, libelle + FROM baremepriseencharge + WHERE id=?;"; + + $resultat = $this->executerRequete($sql, array($idBaremePriseEnCharge)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function initbaremecollege($idBaremePriseEnCharge) + { + $user = $_SESSION['login']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = 'CALL sp_init_bareme(?, ?, ?);'; + + $this->executerRequete($sql, array($idCollegeTemp, $idBaremePriseEnCharge,$user)); + } + + public function getPrimeEnfantSup($codeProduit, $codeGcAssureur) + { + + $sql = "SELECT fn_prime_enfant_supplementaire_produit(?, ?, ?) AS primeEnfantSupplementaire;"; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $codeProduit,$codeGcAssureur))->fetch(); + + return $resultat['primeEnfantSupplementaire']; + + } + + public function getModecalculprimeproduit($codeProduit, $codeGcAssureur) + { + $sql = "SELECT fn_modecalcul_prime_produit(?, ?, ?) AS codeModecalculPrime;"; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $codeProduit,$codeGcAssureur))->fetch(); + + return $resultat['codeModecalculPrime']; + + } + + + public function getPrimeTrancheAge($codeProduit,$codeGcAssureur) + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $user = $_SESSION['login']; + + + $sql = "CALL sp_affiche_primeproduit_trancheage_temp(?, ?, ?, ?, ?);"; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $codeProduit, $codeGcAssureur, $idCollegeTemp, $user)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function majnbrefamillecollege($idPrime, $nbreParFamille) + { + $sql = 'UPDATE primecollege_temp SET + nbreParFamille=?, + maj = "1" + WHERE (id=?)'; + $this->executerRequete($sql, array($nbreParFamille, $idPrime)); + } + + public function majprimesupplementairecollege($idPrime, $prime) + { + + $sql = 'UPDATE primecollege_temp SET + primeSupplementaire=?, + maj = "1" + WHERE (id=?)'; + $this->executerRequete($sql, array($prime, $idPrime)); + + } + + public function majprimetrancheage($idPrime,$prime) + { + $sql = 'UPDATE primeproduittrancheage_collegetemp SET + prime=? + WHERE (id=?);'; + $this->executerRequete($sql, array($prime, $idPrime)); + } + + public function majpopulationtranche($idPrime,$population) + { + $sql = 'CALL sp_maj_population_trancheage_temp(?, ?);'; + $this->executerRequete($sql, array($population, $idPrime)); + } + + public function getPrimeTotalTrancheAge($codeProduit,$codeGcAssureur) + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = "CALL sp_affiche_prime_total_trancheage_temp(?, ?, ?, ?);"; + + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $codeProduit, $codeGcAssureur, $idCollegeTemp)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function recapitulerTrancheage($idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif) + { + $codeSociete = $_SESSION['codeSociete']; + $nbAdherent = '0'; + $nbAyantdroit = '0'; + + $plafondAdherent = str_replace(' ', '', $plafondAdherent); + + $sql = 'call sp_recapituler_college_temp_trancheage_saas(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?);'; + + $this->executerRequete($sql, array($codeSociete,$idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif)); + } + + public function getModecalculprimeCollegeTemp($idCollegeTemp) + { + $sql = "SELECT fn_modecalcul_prime_college_temp(?) AS codeModecalculPrime;"; + + $resultat = $this->executerRequete($sql, array($idCollegeTemp))->fetch(); + + return $resultat['codeModecalculPrime']; + + } + + + public function init_trancheage_temp($codeProduit, $codeGcAssureur) + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $user = $_SESSION['login']; + + $sql = "CALL sp_init_primeproduit_trancheage_temp(?, ?, ?, ?, ?);"; + + $this->executerRequete($sql, array($_SESSION['codeSociete'], $codeProduit, $codeGcAssureur, $idCollegeTemp, $user)); + + } + + public function init_primelienparente_temp($codeProduit, $codeGcAssureur) + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $user = $_SESSION['login']; + + $sql = "CALL sp_init_prime_college(?, ?, ?, ?);"; + + + $this->executerRequete($sql, array($idCollegeTemp, $codeProduit, $codeGcAssureur, $user)); + + } + + public function init_prime_base_tarif_temp($codeProduit, $codeGcAssureur, $codeBaseTarification) + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $user = $_SESSION['login']; + + $sql = "CALL sp_init_prime_college_base_tarif(?, ?, ?, ?, ?);"; + + $this->executerRequete($sql, array($idCollegeTemp, $codeProduit, $codeGcAssureur, $user, $codeBaseTarification)); + + } + + public function majautorisercollege($idPrime,$autorise) + { + $sql = 'UPDATE primecollege_temp SET + autoriserSupplement=?, + maj = "1" + WHERE (id=?);'; + + $this->executerRequete($sql, array($autorise, $idPrime)); + } + + public function initprimeTranche($codeProduit,$codeGcAssureur, $idCollegeTemp) + { + $codeSociete = $_SESSION['codeSociete']; + $user = $_SESSION['login']; + + $sql = 'CALL sp_init_modifier_primeproduit_trancheage_temp(?,?,?,?,?);'; + + $this->executerRequete($sql, array($codeSociete, $codeProduit, $codeGcAssureur, $idCollegeTemp, $user)); + } + + public function majagemincollege($idPrime,$ageMin) + { + $sql = 'UPDATE primecollege_temp SET + ageMinimum=?, + maj = "1" + WHERE (id=?);'; + + $this->executerRequete($sql, array($ageMin, $idPrime)); + } + + public function majagemaxcollege($idPrime,$ageMax) + { + $sql = 'UPDATE primecollege_temp SET + ageMaximum=?, + maj = "1" + WHERE (id=?);'; + + $this->executerRequete($sql, array($ageMax, $idPrime)); + } + + public function majforfaithonoraire($idCollegeTemp ,$forfait) + { + $sql = 'UPDATE college_temp SET + forfaitHonoraire=? + WHERE (id=?);'; + + $this->executerRequete($sql, array($forfait, $idCollegeTemp)); + + } + + public function majforfaitappelfond($idCollegeTemp ,$forfait) + { + $sql = 'UPDATE college_temp SET + forfaitAppelFond=? + WHERE (id=?);'; + + $this->executerRequete($sql, array($forfait, $idCollegeTemp)); + + } + + public function majforfaitappelcotisation($idCollegeTemp ,$forfait) + { + $sql = 'UPDATE college_temp SET + forfaitAppelCotisation=? + WHERE (id=?);'; + + $this->executerRequete($sql, array($forfait, $idCollegeTemp)); + + } + + public function getmodifierBareme() + { + $codeSociete = $_SESSION['codeSociete']; + $codeUtilisateur = $_SESSION['login']; + + $sql = "SELECT fn_get_modifier_bareme(?, ?) AS modifierBareme;"; + + $resultat = $this->executerRequete($sql, array($codeSociete,$codeUtilisateur))->fetch(); + + return $resultat['modifierBareme']; + + } + + public function getoptionstarif($idPolice) { + $sql = 'SELECT numeroOptionTarif as code, libelleOptionTarif as libelle from d_optionstarif where (idPolice=?) order by 1'; + $liste = $this->executerRequete($sql, array($idPolice)); + return $liste; + } +} + + diff --git a/Societes/ric/Tarifs/Modele/College_temp_d.php b/Societes/ric/Tarifs/Modele/College_temp_d.php new file mode 100755 index 00000000..9f0c11fa --- /dev/null +++ b/Societes/ric/Tarifs/Modele/College_temp_d.php @@ -0,0 +1,1125 @@ +executerRequete($sql, array($idCollegeTemp, $codeGarantie)); + } + + public function getCollegeTemp($idCollegeTemp) + { + $sql = 'call sp_afficher_college_temp_saas(?)'; + + + $collegeTemp = $this->executerRequete($sql, array($idCollegeTemp)); + + return $collegeTemp->fetch(); + } + + public function getCollegeTempPolice($idPolice, $user) + { + $sql = 'select * from college_temp where (idPolice=?) and (user=?)'; + + $collegeTemp = $this->executerRequete($sql, array($idPolice, $user)); + return $collegeTemp->fetchAll(PDO::FETCH_ASSOC); + } + + + public function getCollegeTempPoliceRen($idPolice, $user) + { + $sql = 'select * from college_ren_temp where (idPolice=?) and (user=?) order by codeProduit, libelleCollege'; + + $collegeTemp = $this->executerRequete($sql, array($idPolice, $user)); + return $collegeTemp->fetchAll(PDO::FETCH_ASSOC); + } + + public function getGarCollege($idCollegeTemp) + { + $sql = 'select * from garantie_temp where (idCollegeTemp=?) order by ordre'; + $garanties = $this->executerRequete($sql, array($idCollegeTemp)); + return $garanties; + } + + public function getGarAddCollege($idCollegeTemp) + { + $sql = 'select A.*, B.plafond as plafondOld, B.plafond+A.plafond as plafondNew from garantieaddition_temp A + join garantie_temp B on (B.user=A.user) and (B.idCollegeTemp=A.idCollegeTemp) and (B.codeGarantie=A.codeGarantie) + where (A.idCollegeTemp=?) order by A.ordre'; + + $garanties = $this->executerRequete($sql, array($idCollegeTemp)); + return $garanties; + } + + public function getGarBaseCollege($idCollegeTemp) + { + $sql = 'select * from garantie_temp where (idCollegeTemp=?) and (optionnelle!="1") order by ordre'; + $garanties = $this->executerRequete($sql, array($idCollegeTemp)); + return $garanties; + } + + public function getGarOptCollege($idCollegeTemp) + { + $sql = 'select A.*, IFNULL(B.idCollegeTemp,"0") as idCollegeTemp + from garantie A + left join garantie_temp B on (B.idCollegeTemp=?) and (B.codeSociete=A.codeSociete) and (B.codeGarantie=A.codeGarantie) + Where (A.optionnelle="1") order by A.ordre'; + + $garanties = $this->executerRequete($sql, array($idCollegeTemp)); + return $garanties; + } + + public function getGarOptCollegeAcq($idCollegeTemp) + { + $sql = 'select * from garantie_temp where (idCollegeTemp=?) and (optionnelle="1") order by ordre'; + $garanties = $this->executerRequete($sql, array($idCollegeTemp)); + return $garanties; + } + + public function getPrestation($idCollegeTemp) + { + $sql = 'select A.*, B.libelle as reseausoin from prestation_temp A + join reseausoins B on (B.codeReseau=A.codeReseau) + where (A.idCollegeTemp=?) order by A.tmBase, A.tm'; + + $prestations = $this->executerRequete($sql, array($idCollegeTemp)); + + return $prestations->fetchAll(PDO::FETCH_ASSOC); + } + + public function supprimer($idCollegeTemp) { + $sql = 'DELETE FROM college_temp WHERE (id=?)'; + $this->executerRequete($sql, array($idCollegeTemp)); + + $sql = 'DELETE FROM garantie_temp WHERE (idCollegeTemp=?)'; + $this->executerRequete($sql, array($idCollegeTemp)); + } + + public function supprimergarantie($idGarantie) { + $sql = 'DELETE FROM garantie_temp WHERE (id=?)'; + $this->executerRequete($sql, array($idGarantie)); + } + + public function initCollege($idPolice, $codeGcAssureur, $user) + { + $codeSociete = $_SESSION['codeSociete']; + $numeroOptionTarif = $_SESSION['numeroOptionTarif']; + + //$this->viderfamilleacteproduitlienparente(); + //$this->videractecollegelienparente_temp(); + + + $sql = 'CALL sp_init_college_d(?, ?, ?, ?, ?);'; + + + $this->executerRequete($sql, array($idPolice, $codeSociete, $codeGcAssureur, $numeroOptionTarif, $user)); + + $resultat = $this->executerRequete($sql, array($idPolice, $codeSociete, $codeGcAssureur, $numeroOptionTarif, $user)); + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + + $idCollegeTemp = $ligne['idCollegeTemp']; + + $_SESSION['idCollegeTemp'] = $idCollegeTemp; + + return $idCollegeTemp; + } + + public function initModifCollege($idCollege, $user) + { + $sql = 'CALL sp_init_modifier_college_d(?, ?);'; + + $this->executerRequete($sql, array($idCollege, $user)); + + $resultat = $this->executerRequete($sql, array($idCollege, $user)); + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + + $idCollegeTemp = $ligne['idCollegeTemp']; + + $_SESSION['idCollegeTemp'] = $idCollegeTemp; + + return $idCollegeTemp; + + } + + public function recapituler($idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif) + { + $codeSociete = $_SESSION['codeSociete']; + $nbAdherent = preg_replace('/\s+/', '', $nbAdherent); + $nbAyantdroit = preg_replace('/\s+/', '', $nbAyantdroit); + + $plafondAdherent = str_replace(' ', '', $plafondAdherent); + + /* + var_dump(array($codeSociete,$idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif)); + + die(); + */ + + $sql = 'call sp_recapituler_college_temp_lienparente_saas(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?)'; + + $this->executerRequete($sql, array($codeSociete,$idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif)); + } + + public function maj($idCollegeTemp, $codeProduit, $libelleCollege, $nbAdherent, $nbAyantdroit, $primeFamille, + $surprimeAnt, $rachatTm, $cplFuneraire, $tauxRachatTm, $tauxPrimeRachatTm) + { + $sql = 'call sp_maj_college_temp(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; + + $this->executerRequete($sql, array($idCollegeTemp, $codeProduit, $libelleCollege, $nbAdherent, $nbAyantdroit, + $primeFamille, $surprimeAnt, $rachatTm, $cplFuneraire, $tauxRachatTm, $tauxPrimeRachatTm)); + } + + public function enregistrer($idCollegeTemp) + { + $sql = 'call sp_creer_college_d(?)'; + $this->executerRequete($sql, array($idCollegeTemp)); + } + + public function modifiercollege($idCollegeTemp, $idCollege) + { + $user = $_SESSION['login']; + $sql = 'call sp_modifier_college_lien_parente_d(?, ?, ?)'; + $this->executerRequete($sql, array($idCollegeTemp, $idCollege, $user)); + } + + public function ajouterGarantieCollege($idCollege, $idCollegeTemp) + { + $sql = 'delete from d_garantiecollege where idCollege=?'; + $this->executerRequete($sql, array($idCollege)); + + $sql = 'insert into d_garantiecollege (codeSociete, idCollege, idPolice, numeroPolice, codeGarantie, garantie, garantieEng, optionnelle, + additionnelle, tauxPlafond, forfaitPlafond, primeOption, user, plafond, plafondLettre, primeFamille, ordre, champApplication, + tauxPrime, capital, primeParTete) + + select codeSociete, ? as idCollege, idPolice, numeroPolice, codeGarantie, garantie, garantieEng, optionnelle, + additionnelle, tauxPlafond, forfaitPlafond, primeOption, user, plafond, plafondLettre, primeFamille, ordre, champApplication, + tauxPrime, capital, primeParTete + from garantie_temp where idCollegeTemp=?'; + + $this->executerRequete($sql, array($idCollege, $idCollegeTemp)); + } + + public function ajouterTableauPrestation($idCollege, $idCollegeTemp) + { + $sql = 'delete from d_prestationcollege where idCollege=?'; + $this->executerRequete($sql, array($idCollege)); + + $sql = 'insert into d_prestationcollege ( + codeSociete, + idCollege, + idPolice, + numeroPolice, + codeProduit, + codeReseau, + tm, + `user`, + dateSysteme, + tmBase, + rachatTm, + tauxRachatTm + ) + + select + codeSociete, + ? as idCollege, + idPolice, + numeroPolice, + codeProduit, + codeReseau, + tm, + `user`, + dateSysteme, + tmBase, + rachatTm, + tauxRachatTm + from prestation_temp where idCollegeTemp=?'; + + $this->executerRequete($sql, array($idCollege, $idCollegeTemp)); + } + + public function initGarantieCollege($idCollegeTemp) + { + $sql = 'insert into garantie_temp + ( + codeSociete, + idCollegeTemp, + idPolice, + numeroPolice, + codeGarantie, + garantie, + garantieEng, + optionnelle, + additionnelle, + tauxPlafond, + forfaitPlafond, + user, + plafond, + ordre, + plafondLettre, + champApplication, + primeParTete + ) + select + A.codeSociete, + B.id as idCollegeTemp, + B.idPolice, + B.numeroPolice, + A.codeGarantie, + A.libelle as garantie, + A.libelleEng as garantieEng, + A.optionnelle, + A.additionnelle, + A.tauxPlafond, + A.forfaitPlafond, + B.user, + ROUND((B.primeFamille*A.tauxPlafond),0)+A.forfaitPlafond as plafond, + A.ordre, A.plafondLettre, + A.champApplication, + A.primeParTete + from garantie A + join college_temp B on (B.codeSociete=A.codeSociete) + Where (B.id=?) and optionnelle!="1"'; + + $this->executerRequete($sql, array($idCollegeTemp)); + } + + public function initPrestationCollege($idCollegeTemp) + { + $user = $_SESSION['login']; + $codeProduitBase = $_SESSION['codeProduitBase']; + + $sql = 'call sp_init_prestation_college(?, ?, ?)'; + + $this->executerRequete($sql, array($idCollegeTemp, $codeProduitBase, $user)); + } + + public function initModifGarantieCollege($idCollegeTemp) + { + $sql = 'insert into garantie_temp + ( + codeSociete, + idCollege, + idCollegeTemp, + idPolice, + numeroPolice, + codeGarantie, + garantie, + garantieEng, + optionnelle, + additionnelle, + tauxPlafond, + forfaitPlafond, + primeOption, + user, + plafond, + ordre, + plafondLettre, + primeFamille, + champApplication, + primeParTete + ) + select + A.codeSociete, + A.idCollege, + B.id as idCollegeTemp, + B.idPolice, + B.numeroPolice, + A.codeGarantie, + A.garantie, + A.garantieEng, + A.optionnelle, + A.additionnelle, + A.tauxPlafond, + A.forfaitPlafond, + A.primeOption, + B.user, + A.plafond, + A.ordre, A.plafondLettre, + A.primeFamille, + A.champApplication, + A.primeParTete + from d_garantiecollege A + join college_temp B on (B.codeSociete=A.codeSociete) and (B.idCollege=A.idCollege) + Where (B.id=?)'; + + $this->executerRequete($sql, array($idCollegeTemp)); + } + + public function initModifPrestation($idCollegeTemp) + { + $sql = 'insert into prestation_temp ( + codeSociete, + idCollegeTemp, + idCollege, + idPolice, + numeroPolice, + codeProduit, + codeReseau, + tm, + user, + dateSysteme, + tmBase, + rachatTm, + tauxRachatTm, + tauxPrimeRachatTm + ) + select + A.codeSociete, + B.id as idCollegeTemp, + B.idCollege, + B.idPolice, + B.numeroPolice, + A.codeProduit, + A.codeReseau, + A.tm, + B.user, + now() as dateSysteme, + A.tmBase, + B.rachatTm, + B.tauxRachatTm, + B.tauxPrimeRachatTm + from d_prestationcollege A + join college_temp B on (B.codeSociete=A.codeSociete) and (B.idCollege=A.idCollege) + Where (B.id=?)'; + + $this->executerRequete($sql, array($idCollegeTemp)); + } + + public function majtauxplafond($idGarantie, $tauxPlafond) + { + $sql = 'update garantie_temp set tauxPlafond=? where (id=?)'; + $this->executerRequete($sql, array($tauxPlafond, $idGarantie)); + + $sql = 'update garantie_temp set plafond= ROUND((primeFamille*tauxPlafond),0)+forfaitPlafond where (id=?)'; + $this->executerRequete($sql, array($idGarantie)); + } + + public function imposerplafond($idGarantie, $plafond) + { + $sql = 'update garantie_temp set plafond=? where (id=?)'; + $this->executerRequete($sql, array($plafond, $idGarantie)); + } + + public function majtm($idPrestation, $tm) + { + $sql = 'update prestation_temp set tm=? where (id=?)'; + $this->executerRequete($sql, array($tm, $idPrestation)); + } + + public function majPrimeOpt($idGarantie, $primeOption) + { + $sql = 'call sp_maj_prime_opt(?, ?)'; + + $this->executerRequete($sql, array($idGarantie, $primeOption)); + } + + public function majPlafondOpt($idGarantie, $plafondOption) + { + $sql = 'call sp_maj_plafond_opt(?, ?)'; + + $this->executerRequete($sql, array($idGarantie, $plafondOption)); + } + + public function majlibgar($idGarantie, $libellegarantie) + { + $sql = 'update garantie_temp set garantie=? where (id=?)'; + $this->executerRequete($sql, array($libellegarantie, $idGarantie)); + } + + public function viderCollegTemp($user) + { + /* + $sql = 'DELETE FROM college_temp WHERE (user=?)'; + $this->executerRequete($sql, array($user)); + + $sql = 'DELETE FROM garantie_temp WHERE (user=?)'; + $this->executerRequete($sql, array($user)); + + $sql = 'DELETE FROM prestation_temp WHERE (user=?)'; + $this->executerRequete($sql, array($user)); + */ + + $sql = 'call sp_vider_college_temp(?)'; + $this->executerRequete($sql, array($user)); + } + + public function changer_college_temp($idAdherent, $idCollege) + { + $user = $_SESSION['login']; + $sql = 'call sp_changer_college_temp_d(?, ?, ?)'; + + $college_temp = $this->executerRequete($sql, array($idAdherent, $idCollege, $user)); + return $college_temp->fetch(); + } + + public function getCollegesPolice() + { + $user = $_SESSION['login']; + $sql = 'SELECT * FROM college_temp WHERE (user=?) order by libelleCollege'; + $college = $this->executerRequete($sql, array($user)); + return $college; + } + + public function getTotaldcollege($idPolice) { + $user = $_SESSION['login']; + $sql = 'call sp_totalcollege_temp_d(?, ?)'; + $totalcollege = $this->executerRequete($sql, array($idPolice, $user)); + return $totalcollege->fetch(PDO::FETCH_ASSOC); + } + + public function selectioncollegetemp($idCollegeTemp, $choix) { + $sql = 'update college_temp set choix=? WHERE (id=?)'; + $this->executerRequete($sql, array($choix, $idCollegeTemp)); + } + + public function majplafondadd($idGarantie, $plafond) + { + $sql = 'update garantieaddition_temp set plafond=? where (id=?)'; + $this->executerRequete($sql, array($plafond, $idGarantie)); + } + + public function majprimeadd($idGarantie, $primeOption) + { + $sql = 'update garantieaddition_temp set primeOption=? where (id=?)'; + $this->executerRequete($sql, array($primeOption, $idGarantie)); + } + + public function recapituler_maj_limite_college($idCollegeTemp) + { + $user = $_SESSION['login']; + $sql = 'call sp_recapituller_maj_limite_college(?, ?)'; + + $this->executerRequete($sql, array($idCollegeTemp, $user)); + } + + public function modifierlimitecollegetemp($idCollegeTemp) + { + $user = $_SESSION['login']; + $sql = 'call sp_modifier_limite_college_temp(?)'; + $this->executerRequete($sql, array($idCollegeTemp, $user)); + } + + public function getoptionstarif($idPolice) { + $sql = 'SELECT numeroOptionTarif as code, libelleOptionTarif as libelle from d_optionstarif where (idPolice=?) order by 1'; + $liste = $this->executerRequete($sql, array($idPolice)); + return $liste; + } + + public function nouvelleoptiontarif() + { + $user = $_SESSION['login']; + $idPolice = $_SESSION['idPolice_d_C']; + + $sql = 'call sp_d_nouvelle_option_tarif(?, ?)'; + + $resultat = $this->executerRequete($sql, array($idPolice, $user)); + $ligne = $resultat->fetch(); + $_SESSION['numeroOptionTarif'] = $ligne['numeroOptionTarif']; + } + + public function getPrimesCollege($idCollegeTemp) + { + if (est_anglophone()) + { + $sql = 'CALL sp_get_primes_college_temp_eng(?);'; + } + else + { + $sql = 'CALL sp_get_primes_college_temp(?);'; + } + + $resultat = $this->executerRequete($sql, array($idCollegeTemp)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function majprimecollege($idPrime, $prime) + { + + $sql = 'UPDATE primecollege_temp SET + prime=?, + primeTarif=?, + maj = "1" + WHERE (id=?)'; + + $this->executerRequete($sql, array($prime, $prime, $idPrime)); + } + + public function majpopulationcollege($idPrime, $population) + { + $sql = 'UPDATE primecollege_temp SET + population=?, + maj = "1" + WHERE (id=?)'; + $this->executerRequete($sql, array($population, $idPrime)); + } + + + public function ajouterPrimesCollege($idCollege, $idCollegeTemp) + { + $sql = 'call sp_ajouter_prime_college_d(?, ?)'; + + $this->executerRequete($sql, array($idCollege, $idCollegeTemp)); + } + + public function getCollegeLienParenteTemp($idCollegeTemp, $codeLienParente) + { + $sql = 'call sp_afficher_college_lien_parente_temp(?, ?)'; + + $collegeTemp = $this->executerRequete($sql, array($idCollegeTemp, $codeLienParente)); + + return $collegeTemp->fetch(); + } + + public function getGarantieLienParente($idCollegeTemp, $codeLienParente) + { + if (est_anglophone()) + { + $sql = 'CALL sp_afficher_garantie_college_lien_parente_temp_eng(?, ?);'; + } + else + { + $sql = 'CALL sp_afficher_garantie_college_lien_parente_temp(?, ?);'; + } + + $resultat = $this->executerRequete($sql, array($idCollegeTemp, $codeLienParente)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function enregistrercollegelienparentetemp($idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification, $seuilRdCollege, $plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $ticketModerateurHorsReseau, $ageLimiteEnfantEleve, $numeroOptionTarif) + { + + $plafondAdherent = str_replace(' ', '', $plafondAdherent); + + $sql = 'call sp_enregistrer_college_lien_parente_temp_d(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, + ?,?,?,?,?,?,?,?,?,?,?,?,?,?);'; + + $this->executerRequete($sql, array($idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege, + $delaiCarenceCollege, $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification, $seuilRdCollege, $plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $ticketModerateurHorsReseau, $ageLimiteEnfantEleve, $numeroOptionTarif)); + } + + public function getprestationlienparente($idCollegeTemp, $codeLienParente) + { + if (est_anglophone()) + { + $sql = 'call sp_get_prestation_lien_parente_temp_eng(?, ?)'; + } + else + { + $sql = 'call sp_get_prestation_lien_parente_temp(?, ?)'; + } + + $resultat = $this->executerRequete($sql, array($idCollegeTemp, $codeLienParente)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getreseauhorslienparente($idCollegeTemp, $codeLienParente) + { + if (est_anglophone()) + { + $sql = 'call sp_get_reseaus_hors_lien_parente_eng(?, ?, ?)'; + } + else + { + $sql = 'call sp_get_reseaus_hors_lien_parente(?, ?, ?)'; + } + + $codeSociete = $_SESSION['codeSociete']; + + $resultat = $this->executerRequete($sql, array($codeSociete, $idCollegeTemp, $codeLienParente)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function majtmlienparente($idPrestation, $tm) + { + $sql = 'update prestationlienparente_temp set tm=? where (id=?)'; + $this->executerRequete($sql, array($tm, $idPrestation)); + } + + public function ajoutertousreseaulienparente($idCollegeTemp, $codeLienParente) + { + $sql = 'call sp_r_ajouter_tous_reseau_lien_parente_temp(?, ?, ?)'; + + $this->executerRequete($sql, array($idCollegeTemp, $codeLienParente)); + } + + public function retirerunreseaulienparente($idCollegeTemp, $codeLienParente, $codeReseau) + { + $sql = 'call sp_r_retirer_reseau_lien_parente_temp(?, ?, ?)'; + + $this->executerRequete($sql, array($idCollegeTemp, $codeLienParente, $codeReseau)); + } + + public function ajouterunreseaulienparente($idCollegeTemp, $codeLienParente, $codeReseau) + { + $sql = 'call sp_r_ajouter_reseau_lien_parente_temp(?, ?, ?)'; + + $this->executerRequete($sql, array($idCollegeTemp, $codeLienParente, $codeReseau)); + } + + public function imposerplafondlienparente($idGarantie, $plafond) + { + $sql = 'update garantielienparente_temp set plafond=? where (id=?)'; + $this->executerRequete($sql, array($plafond, $idGarantie)); + } + + public function majpopulationcollegeliste() + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = 'call sp_maj_population_college_liste_temp(?)'; + + $this->executerRequete($sql, array($idCollegeTemp)); + } + + public function getGarantPolice($idPolice){ + $sql = 'SELECT id, codeGcAssureur + FROM d_police + WHERE id = ?'; + + $garant = $this->executerRequete($sql, array($idPolice)); + return $garant->fetch(); + } + + public function getTypeGarantPolice($idPolice){ + + $garant = $this->getGarantPolice($idPolice); + + if(!empty($garant['codeGcAssureur'])){ + $sql = 'SELECT a.typeGarant AS idTypeGarant, b.codeTypeGarant + FROM gc_assureur a + JOIN gc_typegarant b ON (b.id = a.typeGarant) + WHERE a.codeSociete =? + AND a.codeGcAssureur = ?;'; + $typeGarant = $this->executerRequete($sql, array($_SESSION['codeSociete'], $garant['codeGcAssureur'])); + + return $typeGarant->fetch(); + }else{ + return false; + } + } + + public function getBaseTarifCollege() + { + if (est_anglophone()){ + $sql = "select codeBaseTarification as code, libelleEng as libelle + from basetarification where (codeBaseTarification IN ('FAM', 'IND', 'AUC')) + ORDER BY ordre;"; + }else{ + $sql = "select codeBaseTarification as code, libelle + from basetarification where (codeBaseTarification IN ('FAM', 'IND', 'AUC')) + ORDER BY ordre;"; + + } + + $liste = $this->executerRequete($sql); + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function getTypeTarifActe(){ + + if (est_anglophone()) + { + $sql = "SELECT codeTypeTarifActe AS code, libelleEng AS libelle + FROM p_typetarifacte + WHERE codeSociete =? + AND codeTypeTarifActe IN ('TCOL');"; + }else{ + $sql = "SELECT codeTypeTarifActe AS code, libelle + FROM p_typetarifacte + WHERE codeSociete =? + AND codeTypeTarifActe IN ('TCOL');"; + } + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'])); + return $resultat->fetchAll(); + } + + public function getNomGarant($codeGcAssureur) + { + $sql = 'SELECT libelle FROM gc_assureur + WHERE codeGcAssureur=?;'; + + $resultat = $this->executerRequete($sql, array($codeGcAssureur))->fetch(PDO::FETCH_ASSOC); + + return $resultat['libelle']; + } + + public function getTauxForfait(){ + if (est_anglophone()){ + $sql = "SELECT id AS code, libelleEng AS libelle + FROM choixforfaittaux + where id='1';"; + }else{ + $sql = "SELECT id AS code, libelle + FROM choixforfaittaux + where id='1';"; + } + $resultat = $this->executerRequete($sql); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getNomStatus($codeLienParente) + { + $sql = 'SELECT codeLienParente, libelle, libelleEng FROM lienparente + WHERE codeLienParente=?;'; + + $resultat = $this->executerRequete($sql, array($codeLienParente)); + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function getBaremeProduit($codeProduit, $codeGcAssureur){ + + $sql = "SELECT id AS code, libelle + FROM baremepriseencharge + WHERE codeProduit=? + AND codeGcAssureur=?;"; + + $resultat = $this->executerRequete($sql, array($codeProduit,$codeGcAssureur)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getPlafondFamille($codeProduit,$codeGcAssureur) + { + $sql = "SELECT fn_plafond_famille_produit(?,?) AS plafondAdherent;"; + + $resultat = $this->executerRequete($sql, array($codeProduit,$codeGcAssureur))->fetch(); + + return $resultat['plafondAdherent']; + } + + public function getPlafondIndividu($codeProduit,$codeGcAssureur) + { + $sql = "SELECT fn_plafond_individu_produit(?,?) AS plafondIndividu;"; + + $resultat = $this->executerRequete($sql, array($codeProduit,$codeGcAssureur))->fetch(); + + return $resultat['plafondIndividu']; + } + + public function getModecalculprimeCollegeTemp($idCollegeTemp) + { + $sql = "SELECT fn_modecalcul_prime_college_temp(?) AS codeModecalculPrime;"; + + $resultat = $this->executerRequete($sql, array($idCollegeTemp))->fetch(); + + return $resultat['codeModecalculPrime']; + + } + + public function getPopulationStatut($idCollegeTemp,$codeLienParente){ + + $sql = "SELECT codeLienParente, population + FROM primecollege_temp + WHERE (codeSociete = ?) + AND (codeLienParente = ?) + AND (idCollegeTemp = ?);"; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'],$codeLienParente,$idCollegeTemp)); + return $resultat->fetch(); + } + + public function init_primelienparente_temp($codeProduit, $codeGcAssureur) + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $user = $_SESSION['login']; + + $sql = "CALL sp_init_prime_college(?, ?, ?, ?);"; + + + $this->executerRequete($sql, array($idCollegeTemp, $codeProduit, $codeGcAssureur, $user)); + + } + + public function init_trancheage_temp($codeProduit, $codeGcAssureur) + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $user = $_SESSION['login']; + + $sql = "CALL sp_init_primeproduit_trancheage_temp(?, ?, ?, ?, ?);"; + + $this->executerRequete($sql, array($_SESSION['codeSociete'], $codeProduit, $codeGcAssureur, $idCollegeTemp, $user)); + + } + + public function initbaremecollege($idBaremePriseEnCharge) + { + $user = $_SESSION['login']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = 'CALL sp_init_bareme(?, ?, ?);'; + + $this->executerRequete($sql, array($idCollegeTemp, $idBaremePriseEnCharge,$user)); + } + + public function changercategorieprimecollege_temp($codeProduit, $codeGcAssureur) + { + $user = $_SESSION['login']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + + $sql = 'CALL sp_changer_categorie_prime_college_temp(?, ?, ?, ?);'; + + //var_dump($idCollegeTemp, $codeProduit, $codeGcAssureur, $user); + $resultat = $this->executerRequete($sql, array($idCollegeTemp, $codeProduit, $codeGcAssureur, $user)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getPrimeTrancheAge($codeProduit,$codeGcAssureur) + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $user = $_SESSION['login']; + + + $sql = "CALL sp_affiche_primeproduit_trancheage_temp(?, ?, ?, ?, ?);"; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $codeProduit, $codeGcAssureur, $idCollegeTemp, $user)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getPrimeTotalTrancheAge($codeProduit,$codeGcAssureur) + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + + $sql = "CALL sp_affiche_prime_total_trancheage_temp(?, ?, ?, ?);"; + + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $codeProduit, $codeGcAssureur, $idCollegeTemp)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function getModecalculprimeproduit($codeProduit, $codeGcAssureur) + { + $sql = "SELECT fn_modecalcul_prime_produit(?, ?, ?) AS codeModecalculPrime;"; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $codeProduit,$codeGcAssureur))->fetch(); + + return $resultat['codeModecalculPrime']; + + } + + public function init_prime_base_tarif_temp($codeProduit, $codeGcAssureur, $codeBaseTarification) + { + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $user = $_SESSION['login']; + + $sql = "CALL sp_init_prime_college_base_tarif(?, ?, ?, ?, ?);"; + + $this->executerRequete($sql, array($idCollegeTemp, $codeProduit, $codeGcAssureur, $user, $codeBaseTarification)); + + } + + public function getPrimeMincollege($idPrime){ + $sql = "select primeMin + from primecollege_temp + where id=?;"; + + $resultat = $this->executerRequete($sql, array($idPrime)); + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function recapitulerTrancheage($idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif) + { + $codeSociete = $_SESSION['codeSociete']; + $nbAdherent = '0'; + $nbAyantdroit = '0'; + + $plafondAdherent = str_replace(' ', '', $plafondAdherent); + + $sql = 'call sp_recapituler_college_temp_trancheage_saas(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?);'; + + $this->executerRequete($sql, array($codeSociete,$idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif)); + } + + public function majplafondcollege($idPrime, $plafond) + { + + $sql = 'UPDATE primecollege_temp SET + forfaitPlafond=?, + plafondBeneficiaire=?, + maj = "1" + WHERE (id=?);'; + $this->executerRequete($sql, array($plafond, $plafond, $idPrime)); + + } + + public function majnbrefamillecollege($idPrime, $nbreParFamille) + { + $sql = 'UPDATE primecollege_temp SET + nbreParFamille=?, + maj = "1" + WHERE (id=?)'; + $this->executerRequete($sql, array($nbreParFamille, $idPrime)); + } + + public function majautorisercollege($idPrime,$autorise) + { + $sql = 'UPDATE primecollege_temp SET + autoriserSupplement=?, + maj = "1" + WHERE (id=?);'; + + $this->executerRequete($sql, array($autorise, $idPrime)); + } + + public function majprimesupplementairecollege($idPrime, $prime) + { + + $sql = 'UPDATE primecollege_temp SET + primeSupplementaire=?, + maj = "1" + WHERE (id=?)'; + $this->executerRequete($sql, array($prime, $idPrime)); + + } + + public function majagemincollege($idPrime,$ageMin) + { + $sql = 'UPDATE primecollege_temp SET + ageMinimum=?, + maj = "1" + WHERE (id=?);'; + + $this->executerRequete($sql, array($ageMin, $idPrime)); + } + + public function majagemaxcollege($idPrime,$ageMax) + { + $sql = 'UPDATE primecollege_temp SET + ageMaximum=?, + maj = "1" + WHERE (id=?);'; + + $this->executerRequete($sql, array($ageMax, $idPrime)); + } + + public function majprimetrancheage($idPrime,$prime) + { + $sql = 'CALL sp_maj_prime_trancheage_temp(?, ?)'; + + $this->executerRequete($sql, array($prime, $idPrime)); + } + + public function majpopulationtranche($idPrime,$population) + { + $sql = 'CALL sp_maj_population_trancheage_temp(?, ?);'; + $this->executerRequete($sql, array($population, $idPrime)); + } + + public function recapitulerDevis($idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif) + { + $codeSociete = $_SESSION['codeSociete']; + $nbAdherent = preg_replace('/\s+/', '', $nbAdherent); + $nbAyantdroit = preg_replace('/\s+/', '', $nbAyantdroit); + + $plafondAdherent = str_replace(' ', '', $plafondAdherent); + + + $sql = 'call sp_recapituler_college_temp_lienparente_saas_devis(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?)'; + + $this->executerRequete($sql, array($codeSociete,$idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif)); + } + + public function recapitulerTrancheageDevis($idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif) + { + $codeSociete = $_SESSION['codeSociete']; + $nbAdherent = '0'; + $nbAyantdroit = '0'; + + $plafondAdherent = str_replace(' ', '', $plafondAdherent); + + $sql = 'call sp_recapituler_college_temp_trancheage_saas_devis(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?);'; + + $this->executerRequete($sql, array($codeSociete,$idCollegeTemp,$codeProduit,$codeCollegeType,$codeReseau, + $codeTypeRemboursement,$codeTerritoire,$codeLienParente,$libelleCollege,$ticketModerateurCollege,$delaiCarenceCollege, + $plafondCollege,$idPolice,$numeroPolice,$accessoireManuel,$rachatTm,$tauxRachatTm,$tauxPrimeRachatTm,$budgetDefini, + $montantBudget,$nbAdherent,$nbAyantdroit,$codeTypeTarifActe,$codeTarifActe,$codeGcAssureur,$idBaremePriseEnCharge, + $codeBaseTarification,$seuilRdCollege,$plafondAdherent,$forfaitHonoraire,$forfaitAppelFond,$forfaitAppelCotisation, + $numeroOptionTarif)); + } + + public function initprimeTranche($codeProduit,$codeGcAssureur, $idCollegeTemp) + { + $codeSociete = $_SESSION['codeSociete']; + $user = $_SESSION['login']; + + $sql = 'CALL sp_init_modifier_primeproduit_trancheage_temp_d(?,?,?,?,?);'; + + $this->executerRequete($sql, array($codeSociete, $codeProduit, $codeGcAssureur, $idCollegeTemp, $user)); + } + + public function getmodifierBareme() + { + $codeSociete = $_SESSION['codeSociete']; + $codeUtilisateur = $_SESSION['login']; + + $sql = "SELECT fn_get_modifier_bareme(?, ?) AS modifierBareme;"; + + $resultat = $this->executerRequete($sql, array($codeSociete,$codeUtilisateur))->fetch(); + + return $resultat['modifierBareme']; + + } +} diff --git a/Societes/ric/Tarifs/Modele/Editionpiece.php b/Societes/ric/Tarifs/Modele/Editionpiece.php new file mode 100755 index 00000000..92abface --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Editionpiece.php @@ -0,0 +1,37 @@ +executerRequete($sql,array($_SESSION['codeSociete'])); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function getListeAvenant($codeTypeAvenant) + { + if (est_anglophone()) + { + $sql = 'SELECT codeTrancheAge AS `code`, libelleTrancheAgeEng AS libelle FROM trancheage WHERE (codeSociete=?) ORDER BY ordre'; + } + else + { + $sql = 'SELECT codeTrancheAge AS `code`, libelleTrancheAge AS libelle FROM trancheage WHERE (codeSociete=?) ORDER BY ordre'; + } + + $liste = $this->executerRequete($sql,array($_SESSION['codeSociete'])); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Editionpieceavenant_societe.php b/Societes/ric/Tarifs/Modele/Editionpieceavenant_societe.php new file mode 100755 index 00000000..442704da --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Editionpieceavenant_societe.php @@ -0,0 +1,460 @@ +executerRequete($sql, array($codeTypeAvenant)); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + + public function afficherlisteeditionpieceavenant($codeTypeAvenant) + { + $sql = 'call sp_afficher_edition_piece_avenant(?)'; + + $resultat = $this->executerRequete($sql, array($codeTypeAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getLienEditionPieceAvenant($codeTypeAvenant, $codeEtat) + { + if (est_anglophone()) + { + $sql = 'call sp_get_lien_edition_piece_avenant_eng(?, ?)'; + } + else + { + $sql = 'call sp_get_lien_edition_piece_avenant(?, ?)'; + } + + $resultat = $this->executerRequete($sql, array($codeTypeAvenant, $codeEtat)); + + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + + return $ligne['lienEtat']; + } + + // les fonctions pour éditer + public function get_edition_avenant_entete() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_entete(?);'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + + + public function get_edition_avenant_primes() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_primes(?);'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + /* + public function get_edition_avenant_primes() + { + $idAvenant = $_SESSION['idAvenant_C']; + $debutStat = $_SESSION['debutStat'] ; + $finStat = $_SESSION['finStat']; + $idPolice = $_SESSION['idPolice_C']; + + + if($debutStat==$finStat){ + $sql = 'call sp_edition_avenant_primesRet_rp(?);'; + $resultat = $this->executerRequete($sql, array($idAvenant)); + } + else{ + + $sql = 'call sp_edition_avenant_primePeriodeRet_rp(?,?,?);'; + $resultat = $this->executerRequete($sql, array($idPolice,$debutStat,$finStat)); + } + return $resultat->fetch(PDO::FETCH_ASSOC); + } + */ + + public function get_edition_avenant_listeassures() + { + $idAvenant = $_SESSION['idAvenant_C']; + + + $sql = 'call sp_edition_avenant_listeassures(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_listeassures_primes_INC() + { + + $idAvenant = $_SESSION['idAvenant_C']; + $debutStat = $_SESSION['debutStat'] ; + $finStat = $_SESSION['finStat']; + $idPolice = $_SESSION['idPolice_C']; + + + $sql = 'call sp_edition_avenant_listeassures_primesInc_rp(?,?,?)'; + + $resultat = $this->executerRequete($sql, array($idPolice,$debutStat,$finStat)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + public function get_edition_avenant_listeassures_primes_ret() + { + + $idAvenant = $_SESSION['idAvenant_C']; + $debutStat = $_SESSION['debutStat'] ; + $finStat = $_SESSION['finStat']; + $idPolice = $_SESSION['idPolice_C']; + + + $sql = 'call sp_edition_avenant_listeassures_primesRet_rp(?,?,?)'; + + $resultat = $this->executerRequete($sql, array($idPolice,$debutStat,$finStat)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + public function get_edition_avenant_listeassures_primes() + { + $idAvenant = $_SESSION['idAvenant_C']; + + // $sql = 'call sp_edition_avenant_listeassures_primes_rp(?)'; + $sql = 'call sp_edition_avenant_listeassures_primes(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_changement_effet() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_changement_effet(?);'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_annulation() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_annulation(?);'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_suspension() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_suspension(?);'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_remise_en_vigueur() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_remise_en_vigueur(?);'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_changementcollege() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_changementcollege(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_changementcollege_beneficiaire() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_changementcollege_beneficiaire(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_assures_ajoutes_renouvellement() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_assures_ajoutes_renouvellement(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_assures_non_renouveles() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_assures_non_renouveles(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_listeassures_a_jour() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_listeassures_a_jour(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + // 09/12/2020 => export + public function get_edition_avenant_listeassures_export() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_listeassures_export(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_listeassures_primes_export() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_listeassures_primes_export(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_listeassures_a_jour_export() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_listeassures_a_jour_export(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_assures_non_renouveles_export() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_assures_non_renouveles_export(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_assures_ajoutes_renouvellement_export() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_assures_ajoutes_renouvellement_export(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_changementcollege_export() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_changementcollege_export(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_primes_detail() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_primes_detail(?);'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + public function get_edition_avenant_primes_inc() + { + $idAvenant = $_SESSION['idAvenant_C']; + $debutStat = $_SESSION['debutStat'] ; + $finStat = $_SESSION['finStat']; + $idPolice = $_SESSION['idPolice_C']; + + if($debutStat==$finStat){ + $sql = 'call sp_edition_avenant_primesInc_rp(?);'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + } + else{ + + $sql = 'call sp_edition_avenant_primePeriodeInc_rp(?,?,?);'; + $resultat = $this->executerRequete($sql, array($idPolice,$debutStat,$finStat)); + } + return $resultat->fetch(PDO::FETCH_ASSOC); + } + + public function get_edition_emission_entete() + { + $idEmission = $_SESSION['idEmission']; + // var_dump($idEmission); + $sql = 'call sp_edition_emission_entete(?);'; + + $resultat = $this->executerRequete($sql, array($idEmission)); + + // return $resultat->fetch(PDO::FETCH_ASSOC); + return $resultat->fetch(PDO::FETCH_ASSOC); + } + public function get_edition_emission_detail() + { + $idEmission = $_SESSION['idEmission']; + // var_dump($idEmission); + $sql = 'call sp_edition_emission_detail(?);'; + + $resultat = $this->executerRequete($sql, array($idEmission)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_emission_recap_college($idCollege) + { + $idEmission = $_SESSION['idEmission']; + // var_dump($idEmission); + $sql = 'call sp_edition_emission_recap_college(?,?);'; + + $resultat = $this->executerRequete($sql, array($idEmission,$idCollege)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_emission_recap_police() + { + $idEmission = $_SESSION['idEmission']; + // var_dump($idEmission); + $sql = 'call sp_edition_emission_recap(?);'; + + $resultat = $this->executerRequete($sql, array($idEmission)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + //Pour les retraits + + public function get_edition_emission_detail_retrait() + { + $idEmission = $_SESSION['idEmission']; + // var_dump($idEmission); + $sql = 'call sp_edition_emission_detail_retraits(?);'; + + $resultat = $this->executerRequete($sql, array($idEmission)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_emission_recap_college_retrait($idCollege) + { + $idEmission = $_SESSION['idEmission']; + // var_dump($idEmission); + $sql = 'call sp_edition_emission_recap_college_retraits(?,?);'; + + $resultat = $this->executerRequete($sql, array($idEmission,$idCollege)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_emission_recap_police_retraits() + { + $idEmission = $_SESSION['idEmission']; + // var_dump($idEmission); + $sql = 'call sp_edition_emission_recap_retraits(?);'; + + $resultat = $this->executerRequete($sql, array($idEmission)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_annulation_emission() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_changementcollege(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_importation_garantie() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_incorporation_garantie(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function get_edition_avenant_importation_acte() + { + $idAvenant = $_SESSION['idAvenant_C']; + + $sql = 'call sp_edition_avenant_incorporation_acte(?)'; + + $resultat = $this->executerRequete($sql, array($idAvenant)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Familleacte.php b/Societes/ric/Tarifs/Modele/Familleacte.php new file mode 100755 index 00000000..b9fbbad7 --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Familleacte.php @@ -0,0 +1,164 @@ +executerRequete($sql, array($codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getActe(){ + $codeSociete = $_SESSION['codeSociete']; + $idCollegeTemp = $_SESSION['idCollegeTemp']; + $codeLienParente = $_SESSION['codeLienParente']; + $codeGarantie = $_SESSION['codeGarantie']; + + $sql = 'SELECT * FROM p_acte_collegelienparente_temp + WHERE (codeSociete=? AND idCollegeTemp=? AND codeLienParente=? AND codeGarantie=?) + ORDER BY libelle;'; + $resultat = $this->executerRequete($sql, array($codeSociete,$idCollegeTemp,$codeLienParente,$codeGarantie)); + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function existeFamilleacteProduitStatus($codeGarantie,$codeProduit,$codeLienParente,$idCollegeTemp){ + + $codeSociete = $_SESSION['codeSociete']; + + $sql = 'SELECT id FROM p_familleacte_produit_lienparente_temp + WHERE codeSociete = ? + AND codeGarantie = ? + AND codeProduit = ? + AND codeLienParente = ? + AND idCollegeTemp = ?;'; + + $resultat = $this->executerRequete($sql, array($codeSociete,$codeGarantie,$codeProduit,$codeLienParente,$idCollegeTemp)); + return ($resultat->rowCount() > 0); + } + + + public function existeActeProduitStatus($codeGarantie,$codeProduit,$codeLienParente,$idCollegeTemp){ + + $codeSociete = $_SESSION['codeSociete']; + + $sql = 'SELECT id FROM p_acte_collegelienparente_temp + WHERE codeSociete = ? + AND codeGarantie = ? + AND codeProduit = ? + AND codeLienParente = ? + AND idCollegeTemp = ? + AND codeActe NOT IN + ( + SELECT codeActe + FROM p_exclusionacteproduit + WHERE codeSociete = ? + AND codeProduit = ? + );'; + + $resultat = $this->executerRequete($sql, array($codeSociete,$codeGarantie,$codeProduit,$codeLienParente,$idCollegeTemp, + $codeSociete,$codeProduit)); + return ($resultat->rowCount() > 0); + } + + public function getFamilleActeGarantie($idCollegeTemp,$codeProduit,$codeLienParente,$codeGarantie,$ticketModerateurStatut) + { + $codeSociete = $_SESSION['codeSociete']; + //var_dump($codeSociete);die(); + $user = $_SESSION['login']; + + + //if ($this->existeFamilleacteProduitStatus($codeGarantie,$codeProduit,$codeLienParente,$idCollegeTemp)){ + + /* + $sql = "SELECT A.*, B.libelle As periodicite, + B.libelleEng As periodiciteEng + FROM p_familleacte_produit_lienparente_temp A + left join periodicite B on (A.codePeriodicite=B.codePeriodicite) + WHERE A.codeSociete = ? + AND A.codeGarantie = ? + AND A.codeProduit = ? + AND A.codeLienParente = ? + AND A.idCollegeTemp = ?;"; + $resultat = $this->executerRequete($sql, array($codeSociete,$codeGarantie,$codeProduit,$codeLienParente,$idCollegeTemp)); + } else{ + $sql = "CALL sp_afficher_familleacte_collegelienparente_temp(?,?,?,?,?,?,?)"; + $resultat = $this->executerRequete($sql, array($codeSociete,$idCollegeTemp,$codeProduit,$codeLienParente,$codeGarantie,$user,$ticketModerateurStatut)); + } + */ + + $sql = "SELECT A.*, B.libelle As periodicite, + B.libelleEng As periodiciteEng + FROM p_familleacte_produit_lienparente_temp A + left join periodicite B on (A.codePeriodicite=B.codePeriodicite) + WHERE A.codeSociete = ? + AND A.codeGarantie = ? + AND A.codeProduit = ? + AND A.codeLienParente = ? + AND A.codeFamilleActe !='A000' + AND A.idCollegeTemp = ?;"; + + + + $resultat = $this->executerRequete($sql, array($codeSociete,$codeGarantie,$codeProduit,$codeLienParente,$idCollegeTemp)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function getActesGarantieLienParente($idCollegeTemp,$codeProduit,$codeLienParente,$codeGarantie,$ticketModerateurStatut) + { + $codeSociete = $_SESSION['codeSociete']; + $user = $_SESSION['login']; + $codeTarifActe = $_SESSION['codeTarifActe']; + + //var_dump($codeTarifActe); + + /*if ($this->existeActeProduitStatus($codeGarantie,$codeProduit,$codeLienParente,$idCollegeTemp)){ + $sql = "SELECT * FROM p_acte_collegelienparente_temp + WHERE codeSociete = ? + AND codeGarantie = ? + AND codeProduit = ? + AND codeLienParente = ? + AND idCollegeTemp = ? + AND codeActe NOT IN + ( + SELECT codeActe + FROM p_exclusionacteproduit + WHERE codeSociete = ? + AND codeProduit = ? + );"; + $resultat = $this->executerRequete($sql, array($codeSociete,$codeGarantie,$codeProduit,$codeLienParente,$idCollegeTemp, + $codeSociete,$codeProduit)); + } else{ + $sql = "CALL sp_afficher_actes_collegelienparente_temp(?,?,?,?,?,?,?,?);"; + $resultat = $this->executerRequete($sql, array($codeSociete,$idCollegeTemp,$codeProduit,$codeLienParente,$codeGarantie,$user,$ticketModerateurStatut,$codeTarifActe)); + }*/ + + $sql = "SELECT * FROM p_acte_collegelienparente_temp + WHERE codeSociete = ? + AND codeGarantie = ? + AND codeProduit = ? + AND codeLienParente = ? + AND idCollegeTemp = ? + AND codeActe NOT IN + ( + SELECT codeActe + FROM p_exclusionacteproduit + WHERE codeSociete = ? + AND codeProduit = ? + );"; + $resultat = $this->executerRequete($sql, array($codeSociete,$codeGarantie,$codeProduit,$codeLienParente,$idCollegeTemp, + $codeSociete,$codeProduit)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Lienparente_societe.php b/Societes/ric/Tarifs/Modele/Lienparente_societe.php new file mode 100755 index 00000000..addd1e97 --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Lienparente_societe.php @@ -0,0 +1,103 @@ +executerRequete($sql); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function getListeConsultation() + { + $idCollege = $_SESSION['idCollege']; + + if (est_anglophone()) + { + $sql = 'SELECT codeLienParente as `code`, libelleEng as libelle + FROM lienparente + WHERE codeLienParente IN ( + SELECT codeLienParente + FROM primecollege_temp + WHERE (idCollege = ?) + AND (population > 0) + ) + order by ordre, libelle'; + } + else + { + $sql = 'SELECT codeLienParente as `code`, libelle + FROM lienparente + WHERE codeLienParente IN ( + SELECT codeLienParente + FROM primecollege_temp + WHERE (idCollege = ?) + AND (population > 0) + ) + order by ordre, libelle'; + } + + $liste = $this->executerRequete($sql,array($idCollege)); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function getListeSubstitut() + { + if (est_anglophone()) + { + $sql = 'SELECT codeLienParente as `code`, libelleEng as libelle FROM liensubstitut order by ordre, libelle'; + } + else + { + $sql = 'SELECT codeLienParente as `code`, libelle FROM liensubstitut order by ordre, libelle'; + } + + $liste = $this->executerRequete($sql); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function getListeDependant() + { + if (est_anglophone()) + { + $sql = 'SELECT codeLienParente AS `code`, libelleEng as libelle FROM lienparente WHERE codeLienParente!="A" ORDER BY ordre, libelle'; + } + else + { + $sql = 'SELECT codeLienParente AS `code`, libelle FROM lienparente WHERE codeLienParente!="A" ORDER BY ordre, libelle'; + } + + $liste = $this->executerRequete($sql); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function getListeAdherent() + { + if (est_anglophone()) + { + $sql = 'SELECT codeLienParente AS `code`, libelleEng as libelle FROM lienparente WHERE codeLienParente="A" ORDER BY ordre, libelle'; + } + else + { + $sql = 'SELECT codeLienParente AS `code`, libelle FROM lienparente WHERE codeLienParente="A" ORDER BY ordre, libelle'; + } + + $liste = $this->executerRequete($sql); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Police.php b/Societes/ric/Tarifs/Modele/Police.php new file mode 100755 index 00000000..a0527cee --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Police.php @@ -0,0 +1,667 @@ +executerRequete($sql, array($_SESSION['codeSociete'], $numeroClient)); + return $polices; + } + + public function getPolicesId($id) { + $sql = 'SELECT A.id, A.codeSociete, A.idClient, A.numeroClient, numeroPolice, numeroPoliceSociete, numeroDevis, + B.libelle As typeAvenant, dateEffet, dateFin, dateEcheance, numeroAvenant, dateAvenant, ADDDATE(A.dateEcheance, +1) as DateRenouvellement, + D.libelle as etatPolice, A.codeFractionnement, T.libelle As typeContrat, IFNULL(A.primeFamille,"0") as primeFamille, + IFNULL(A.primeBeneficiaire,"0") as primeBeneficiaire, rachatTm, rachatTm, TM.libelle as rachattm, garantieArchive, collegeArchive, A.gestionConfiee + FROM police A + left join typecontrat T on (T.codeTypeContrat=A.codeTypeContrat) + left join typeavenant B on (B.codeTypeAvenant=A.codeTypeAvenant) + left join etatpolice D on (D.codeEtatPolice=A.codeEtatPolice) + left join rachattm TM on (TM.codeRachatTm=A.rachatTm) + WHERE (A.codeSociete=?) AND (A.idClient=?) order by A.id'; + + $polices = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + return $polices; + } + + public function getPolice($numeroPolice) + { + $sql = 'call sp_getPoliceNo(?, ?);'; + + $police = $this->executerRequete($sql, array($_SESSION['codeSociete'], $numeroPolice)); + + if ($police->rowCount() > 0) + return $police->fetch(); + else + throw new Exception("Aucune police ne correspond au numéo '$numeroPolice'"); + } + + public function getPoliceId($id) + { + $sql = 'call sp_getPoliceId(?, ?);'; + + $police = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + + return $police->fetch(PDO::FETCH_ASSOC); + /* + if ($police->rowCount() > 0) + return $police->fetch(); + else + throw new Exception("Aucune police ne correspond au ie '$id'"); + */ + } + + public function getPoliceIdSimple($id) { + $sql = 'SELECT A.* FROM police A WHERE (A.codeSociete=?) AND (A.id=?)'; + $police = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + if ($police->rowCount() > 0) + return $police->fetch(); + else + throw new Exception("Aucune police ne correspond au ie '$id'"); + } + + + public function getTextecp($id) { + $sql = 'select texteCp from police where (id=?)'; + $textecp = $this->executerRequete($sql, array($id)); + return $textecp->fetch(); + } + + public function enregistrertexteCp($texteCp, $idPolice) { + $sql = 'update police set texteCp=? where (id=?)'; + $this->executerRequete($sql, array($texteCp, $idPolice)); + } + + public function getNombrePolices($numeroClient) + { + $sql = 'select count(*) as nbPolices FROM polices A WHERE (A.codeSociete=?) AND (A.numeroClient=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $numeroClient)); + $ligne = $resultat->fetch(); + return $ligne['nbPolices']; + } + + public function getNombrePolicesId($id) + { + $sql = 'select count(*) as nbPolices FROM police A WHERE (A.codeSociete=?) AND (A.id=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + $ligne = $resultat->fetch(); + return $ligne['nbPolices']; + } + + public function getContextePoliceId($id) + { + $sql = 'SELECT + A.idClient, + A.numeroClient, + A.id AS idPolice, + A.numeroPolice, + IFNULL(B.tauxTaxe,"0") AS tauxTaxe, + A.codeEtape, + IFNULL(A.tauxCommission,"0") AS tauxCommission, + IFNULL(A.tauxCommissionAutre,"0") AS tauxCommissionAutre, + IFNULL(A.primeFamille,"0") AS primeFamille, + IFNULL(A.primeBeneficiaire,"0") AS primeBeneficiaire, + rachatTm, + TM.libelle AS rachattm, + garantieArchive, + collegeArchive, + A.codeTypeAvenant, + ADDDATE(A.dateEcheance, +1) AS DateRenouvellement, + A.dateEffet, + A.dateFin, + A.dateEcheance, + dateAvenant, + A.deduireComm, + A.codeEtatPolice, + A.gestionConfiee, + A.codeTypeContrat + FROM police A + LEFT JOIN typecontrat B ON (B.codeTypeContrat=A.codeTypeContrat) + left join rachattm TM on (TM.codeRachatTm=A.rachatTm) + WHERE (A.codeSociete=?) AND (A.id=?)'; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + + $context = $resultat->fetch(PDO::FETCH_ASSOC); + + // $context = $resultat->fetch(); + + + /* + $sql = 'call sp_get_contexte_police_id(?);'; + + $resultat = $this->executerRequete($sql, array($id)); + + $context = $resultat->fetch(); + // $context = $resultat->fetch(PDO::FETCH_ASSOC); + */ + + + $_SESSION['idClient_C'] = $context['idClient']; + $_SESSION['numeroClient_C'] = $context['numeroClient']; + $_SESSION['idPolice_C'] = $context['idPolice']; + $_SESSION['numeroPolice_C'] = $context['numeroPolice']; + $_SESSION['codeTypeContrat'] = $context['codeTypeContrat']; + $_SESSION['codeEtape_C'] = $context['codeEtape']; + $_SESSION['tauxTaxe_C'] = $context['tauxTaxe']; + $_SESSION['tauxCommission_C'] = $context['tauxCommission']; + $_SESSION['tauxCommissionAutre_C'] = $context['tauxCommissionAutre']; + $_SESSION['deduireComm_C'] = $context['deduireComm']; + $_SESSION['codeTypeAvenant_C'] = $context['codeTypeAvenant']; + $_SESSION['codeEtatPolice_C'] = $context['codeEtatPolice']; + + $_SESSION['dateEffet_C'] = $context['dateEffet']; + $_SESSION['dateFin_C'] = $context['dateFin']; + $_SESSION['dateEcheance_C'] = $context['dateEcheance']; + + $_SESSION['DateRenouvellement_C'] = $context['DateRenouvellement']; + + $_SESSION['dateAvenant_C'] = $context['dateAvenant']; + + $_SESSION['idPoliceAjax'] = $_SESSION['idPolice_C']; + + $_SESSION['primeFamille_C'] = $context['primeFamille']; + $_SESSION['primeBeneficiaire_C'] = $context['primeBeneficiaire']; + + $_SESSION['rachatTm_C'] = $context['rachatTm']; + + // $_SESSION['garantieArchive_C'] = $context['garantieArchive']; + $_SESSION['collegeArchive_C'] = $context['collegeArchive']; + + $_SESSION['idAdherent_C'] = ""; + $_SESSION['numeroAdherent_C'] = ""; + $_SESSION['nomAdherent_C'] = ""; + + $_SESSION['idBeneficiaire_C'] = ""; + $_SESSION['numeroBeneficiaire_C'] = ""; + $_SESSION['nomBeneficiaire_C'] = ""; + $_SESSION['lienPhoto_C'] = ""; + + $_SESSION['beneficiaire_C'] = ""; + $_SESSION['adherent_C'] = ""; + $_SESSION['enVigueur_C'] = ""; + + $_SESSION['decede_C'] = "0"; + $_SESSION['dateDeces_C'] = ""; + $_SESSION['fraisFuneraireDemande_C'] = "0"; + $_SESSION['fraisFunerairePaye_C'] = "0"; + + // nb famille et de dépendants + $sql = 'select + ifnull(sum(case when codeLienParente="A" then "1" else "0" end), "0") as ndAdh, + ifnull(SUM(case when codeLienParente="A" then "0" else "1" end), "0") as ndDep, + ifnull(SUM(case when codeEtatBeneficiaire="V" then "1" else "0" end), "0") as ndActif + from beneficiaire where (codeSociete=?) AND (idPolice=?) and (supprime!="1")'; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + $effectif = $resultat->fetch(); + + $_SESSION['ndAdh_C'] = $effectif['ndAdh']; + $_SESSION['ndDep_C'] = $effectif['ndDep']; + $_SESSION['ndActif_C'] = $effectif['ndActif']; + } + + public function getDenierNumeroPolice($annee) + { + $sql = 'select dernierNumeroPolice from numerotationpolice WHERE (codeSociete=? AND annee=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'],$annee)); + + if ($resultat->rowCount() == 0) + { + $sql = 'insert into numerotationpolice (codeSociete, annee, dernierNumeroPolice) values (?,?,?)'; + $this->executerRequete($sql, array($_SESSION['codeSociete'],$annee,"0")); + return "1"; + } else + { + $ligne = $resultat->fetch(); + return $ligne['dernierNumeroPolice']+1; + } + } + + public function setDenierNumeroPolice($annee,$dernierNumeroPolice) + { + $sql = 'update numerotationpolice set dernierNumeroPolice=? WHERE (codeSociete=? AND annee=?)'; + $this->executerRequete($sql, array($dernierNumeroPolice, $_SESSION['codeSociete'], $annee)); + } + + public function ajouter($codeSociete, $idClient, $numeroClient, $numeroPolice, $numeroPoliceSociete, $codeTypeContrat, + $dateEffet, $dateFin, $dateEcheance, $numeroAvenant, $codeTypeAvenant, $dateAvenant, $codeApporteur, + $codeGestionnaire, $dateCre, $userCre, $codeEtatPolice, $codeFractionnement, $codePeriodicite, $tauxCommission, + $primeFamille, $primeBeneficiaire, $rachatTm, $deduireComm, $taciteReconduction, $tauxRachatTm, $codeCommercial, + $tauxCommissionAutre, $speciale, $limiteConsommation, $tauxRistourne, $remplacementAdherent) + { + + $sql = 'INSERT INTO police (codeSociete, idClient, numeroClient, numeroPolice, numeroPoliceSociete, + codeTypeContrat, dateEffet, dateFin, dateEcheance, numeroAvenant, codeTypeAvenant, dateAvenant, + codeApporteur, codeGestionnaire, dateCre, userCre, codeEtatPolice, codeFractionnement, codePeriodicite, tauxCommission, + primeFamille, primeBeneficiaire, rachatTm, deduireComm, taciteReconduction, tauxRachatTm, codeCommercial, + tauxCommissionAutre, speciale, limiteConsommation, tauxRistourne, remplacementAdherent) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; + + $this->executerRequete($sql, array($codeSociete, $idClient, $numeroClient, $numeroPolice, $numeroPoliceSociete, $codeTypeContrat, + $dateEffet, $dateFin, $dateEcheance, $numeroAvenant, $codeTypeAvenant, $dateAvenant, $codeApporteur, + $codeGestionnaire, $dateCre, $userCre, $codeEtatPolice, $codeFractionnement, $codePeriodicite, $tauxCommission, + $primeFamille, $primeBeneficiaire, $rachatTm, $deduireComm, $taciteReconduction, $tauxRachatTm, $codeCommercial, + $tauxCommissionAutre, $speciale, $limiteConsommation, $tauxRistourne, $remplacementAdherent)); + + $dernierId=$this->dernierId(); + + $sql = 'insert into avenant (codeSociete, idPolice, numeroPolice, codeTypeAvenant, numeroAvenant, dateEffet, dateCre, user, dateSysteme) + select codeSociete, id as idPolice, numeroPolice, codeTypeAvenant, numeroAvenant, dateEffet, dateCre, userCre as `user`, dateSysteme + from police where (id=?)'; + + $this->executerRequete($sql, array($dernierId)); + + $sql = 'call sp_creer_contrat(?, ?)'; + $this->executerRequete($sql, array($dernierId, $userCre)); + + return $dernierId; + + } + + public function modifier($id, $tauxCommission, $primeFamille, $primeBeneficiaire, $codeApporteur, $codeCommercial, + $tauxCommissionAutre, $speciale, $limiteConsommation, $tauxRistourne, $remplacementAdherent) + { + $user = $_SESSION['login']; + + $sql = 'call sp_modifier_police(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; + + $this->executerRequete($sql, array($id, $tauxCommission, $codeApporteur, $codeCommercial, + $tauxCommissionAutre, $speciale, $limiteConsommation, $tauxRistourne, $remplacementAdherent, $user)); + } + + public function initresiliation($idPolice) + { + $dateAvenant = $_SESSION['dateAvenant_C']; + $motifAvenant = $_SESSION['motifAvenant_C']; + $user = $_SESSION['login']; + + $sql = 'call sp_init_resiliation(?, ?, ?, ?)'; + $this->executerRequete($sql, array($idPolice, $dateAvenant, $user, $motifAvenant)); + } + + public function initretrait($idPolice) + { + $dateAvenant = $_SESSION['dateAvenant_C']; + $motifAvenant = $_SESSION['motifAvenant_C']; + $user = $_SESSION['login']; + $idSaisie = $_SESSION['idSaisie']; + /* + $sql = 'call sp_init_retrait(?, ?, ?, ?, ?)'; + $this->executerRequete($sql, array($idPolice, $dateAvenant, $user, $motifAvenant, $idSaisie)); + */ + $sql = 'call sp_init_retrait(?, ?, ?, ?)'; + $this->executerRequete($sql, array($idPolice, $dateAvenant, $user, $motifAvenant)); + } + + public function initrerenouvellement($idPolice) + { + $dateAvenant = $_SESSION['dateAvenant_C']; + $dateEcheanceRen = $_SESSION['dateEcheanceRen_C']; + $user = $_SESSION['login']; + + $sql = 'call sp_init_renouvellement(?, ?, ?, ?)'; + $this->executerRequete($sql, array($idPolice, $dateAvenant, $user, $dateEcheanceRen)); + } + + public function initLimiteAdditionnelle($idPolice, $dateAvenant) + { + $user = $_SESSION['login']; + + $sql = 'call sp_init_limite_additionnelle(?, ?, ?)'; + $this->executerRequete($sql, array($idPolice, $dateAvenant, $user)); + } + + public function getAvenantTemp() { + $user = $_SESSION['login']; + $sql = 'SELECT * FROM avenant_temp WHERE (`user`=?) order by id desc'; + $resultat = $this->executerRequete($sql, array($user)); + return $resultat->fetch(); + } + + public function getEmissionTemp() { + $user = $_SESSION['login']; + $sql = 'SELECT * FROM emission_temp WHERE (`user`=?)'; + $resultat = $this->executerRequete($sql, array($user)); + return $resultat->fetch(); + } + + public function creeravenant($idPolice, $codeTypeAvenant, $motifAvenant, $dateAvenant) + { + $user = $_SESSION['login']; + $sql = 'call sp_creer_avenant(?, ?, ?, ?, ?)'; + $this->executerRequete($sql, array($idPolice, $codeTypeAvenant, $motifAvenant, $dateAvenant, $user)); + } + + public function enregistrerresiliation() + { + $user = $_SESSION['login']; + $idPolice = $_SESSION['idPolice_C']; + + $sql = 'call sp_avenant_resiliation(?, ?)'; + $this->executerRequete($sql, array($idPolice, $user)); + } + + public function enregistrerretrait() + { + $user = $_SESSION['login']; + $idPolice = $_SESSION['idPolice_C']; + + $sql = 'call sp_avenant_retrait(?, ?)'; + $this->executerRequete($sql, array($idPolice, $user)); + } + + public function enregistrerrenouvellement() + { + $user = $_SESSION['login']; + $idPolice = $_SESSION['idPolice_C']; + + $sql = 'call sp_avenant_renouvellement(?, ?)'; + $this->executerRequete($sql, array($idPolice, $user)); + } + + public function getIdPolice($numeroPolice) { + $sql = 'SELECT id FROM police WHERE (codeSociete=?) AND (numeroPolice=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $numeroPolice)); + $ligne = $resultat->fetch(); + return $ligne['id']; + } + + public function existeligne($numeroPolice) { + $sql = 'select id FROM police WHERE (codeSociete=?) and (numeroPolice=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'],$numeroPolice)); + return ($resultat->rowCount() > 0); + } + + public function formaterNumeroPolice($annee,$numeroPolice) { + $numeroPolice = "00000".$numeroPolice; + $numeroPolice = substr($numeroPolice, -6); + $numeroPolice = $annee.$numeroPolice; + return $numeroPolice; + } + + public function supprimer($idPolice) { + $sql = 'select id from college where (idPolice=?) limit 1'; + $resultat = $this->executerRequete($sql, array($idPolice)); + + if($resultat->rowCount() == 0) + { + $sql = 'DELETE FROM police WHERE (id=?)'; + $this->executerRequete($sql, array($idPolice)); + + $sql = 'DELETE FROM contrat WHERE (idPolice=?)'; + $this->executerRequete($sql, array($idPolice)); + + return true; + } + else + { + return false; + } + } + + public function getExisteQuittance($idPolice) { + $sql = 'select id from emission where (idPolice=?) limit 1'; + $resultat = $this->executerRequete($sql, array($idPolice)); + + if($resultat->rowCount() == 0) + { + return "0"; + } + else + { + return "Q"; + } + } + + public function archivergarantie($id) { + $sql = 'UPDATE police SET garantieArchive="1" where (id=?)'; + $this->executerRequete($sql, array($id)); + } + + public function archivercollege($id) { + $sql = 'UPDATE police SET collegeArchive="1" where (id=?)'; + $this->executerRequete($sql, array($id)); + } + + public function getContexteAjaxPolice($id) + { + $sql = 'SELECT A.id as idPolice FROM police A WHERE (A.id=?)'; + $resultat = $this->executerRequete($sql, array($id)); + $context = $resultat->fetch(); + $_SESSION['idPoliceAjax'] = $context['idPolice']; + $_SESSION['idPolice_C'] = $_SESSION['idPoliceAjax']; + } + + public function getEnteteCP($idPolice) + { + $numeroAvenant_cp = $_SESSION['numeroAvenant_cp'] ; + + $sql = 'call sp_entete_cp(?,?);'; + + $entete = $this->executerRequete($sql, array($idPolice,$numeroAvenant_cp)); + return $entete->fetch(PDO::FETCH_ASSOC); + } + + public function getCollegesCP($idPolice) + { + $sql = 'call sp_collesges_police(?);'; + + $colleges = $this->executerRequete($sql, array($idPolice)); + return $colleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function getGarantiesCollegesCP($idPolice) + { + $sql = 'call sp_garanties_colleges_police(?);'; + + $garantiescolleges = $this->executerRequete($sql, array($idPolice)); + return $garantiescolleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function gettableauPrestationsCP($idPolice) + { + $sql = 'call sp_tableau_prestation_police(?);'; + + $colleges = $this->executerRequete($sql, array($idPolice)); + return $colleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function getRapportSpPolice($idPolice, $dateReference) + { + $user = $_SESSION['login']; + + $sql = 'call sp_rapport_sp_police(?, ?, ?);'; + + $sppolice = $this->executerRequete($sql, array($idPolice, $dateReference, $user)); + return $sppolice->fetch(PDO::FETCH_ASSOC); + } + + public function getConsommationPolice($idPolice, $dateReference) + { + $sql = 'call sp_consommation_police(?, ?);'; + + $consommationpolice = $this->executerRequete($sql, array($idPolice, $dateReference)); + return $consommationpolice->fetch(PDO::FETCH_ASSOC); + } + + public function getExisteConsommationPolice($idPolice) + { + $dj = date("Y-m-d"); + $sql = 'call sp_consommation_police(?, ?);'; + + $resultat = $this->executerRequete($sql, array($idPolice, $dj)); + $ligne = $resultat->fetch(PDO::FETCH_ASSOC); + $consommationpolice = $ligne['consommation']; + + if($consommationpolice>"0") + { + return "C"; + } + else + { + return "0"; + } + } + + public function gettableauAjustementCP() + { + $sql = 'call sp_tableau_ajustement();'; + + $tableauajustementcps = $this->executerRequete($sql); + return $tableauajustementcps->fetchAll(PDO::FETCH_ASSOC); + } + + public function getClientsearchPol($numeroPolice) + { + $sql = 'select id as idPolice from police WHERE (codeSociete=?) AND (numeroPolice=?)'; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'],$numeroPolice)); + + if ($resultat->rowCount() == 0) + { + return "0"; + } else + { + $ligne = $resultat->fetch(); + return $ligne['idPolice']; + } + } + + public function getClientsearchPolId($idPolice) + { + $sql = 'select id as idPolice from police WHERE (codeSociete=?) AND (id=?)'; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'],$idPolice)); + + if ($resultat->rowCount() == 0) + { + return "0"; + } else + { + $ligne = $resultat->fetch(); + return $ligne['idPolice']; + } + } + + public function recapituler_maj_limite_police() + { + $user = $_SESSION['login']; + $sql = 'call sp_recapituller_maj_limite_police(?)'; + + $this->executerRequete($sql, array($user)); + } + + public function enregistrerlimiteadditionnelle() + { + $user = $_SESSION['login']; + $idPolice = $_SESSION['idPolice_C']; + + $sql = 'call sp_avenant_limite_additionnelle(?, ?)'; + $this->executerRequete($sql, array($idPolice, $user)); + } + + public function getContexteClientId($idPolice) { + $sql = 'SELECT A.id as idClient, A.numeroClient, concat(A.nom," ",A.prenoms) as nomClient, A.codeLangueClient + FROM clients A join police B on (B.idClient=A.id) WHERE (B.id=?)'; + + $resultat = $this->executerRequete($sql, array($idPolice)); + + $context = $resultat->fetch(); + $_SESSION['idClient_C'] = $context['idClient']; + $_SESSION['numeroClient_C'] = $context['numeroClient']; + $_SESSION['nomClient_C'] = $context['nomClient']; + $_SESSION['idClientAjax'] = $context['idClient']; + $_SESSION['codeLangueClient'] = $context['codeLangueClient']; + } + + // Polices non renouvellées + + public function etatpolnonren() + { + $dj = date("Y-m-d"); + + $sql = 'call sp_polices_non_renouvellees(?);'; + + $resultat = $this->executerRequete($sql, array($dj)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + public function activergc($idPolice) + { + $user = $_SESSION['login']; + $sql = 'call sp_activergc(?, ?);'; + $this->executerRequete($sql, array($idPolice, $user)); + } + + public function desactivergc($idPolice) + { + $user = $_SESSION['login']; + $sql = 'call sp_desactivergc(?, ?);'; + $this->executerRequete($sql, array($idPolice, $user)); + } + + public function getRapportSpPoliceEntete($idPolice, $dateReference) + { + $sql = 'call sp_rapport_sp_police_entete(?, ?);'; + + $sppolice = $this->executerRequete($sql, array($idPolice, $dateReference)); + + return $sppolice->fetch(PDO::FETCH_ASSOC); + } + + public function getRapportSpPolicePol($idPolice, $dateReference) + { + $user = $_SESSION['login']; + + $sql = 'call sp_rapport_sp_police_pol(?, ?, ?);'; + + $sppolice = $this->executerRequete($sql, array($idPolice, $dateReference, $user)); + + return $sppolice->fetch(PDO::FETCH_ASSOC); + } + + public function getRapportSpPoliceCat($idPolice, $dateReference) + { + $user = $_SESSION['login']; + + $sql = 'call sp_rapport_sp_police_cat(?, ?, ?);'; + + $sppolice = $this->executerRequete($sql, array($idPolice, $dateReference, $user)); + + return $sppolice->fetchAll(PDO::FETCH_ASSOC); + } + + public function getRapportSpPoliceCol($idPolice, $dateReference) + { + $user = $_SESSION['login']; + + $sql = 'call sp_rapport_sp_police_col(?, ?, ?);'; + + $sppolice = $this->executerRequete($sql, array($idPolice, $dateReference, $user)); + + return $sppolice->fetchAll(PDO::FETCH_ASSOC); + } + + public function getsyntheseconsopolice() + { + $idPolice = $_SESSION['idPolice_C']; + + $sql = 'call sp_synthese_consommation_police(?);'; + + $sppolice = $this->executerRequete($sql, array($idPolice)); + + return $sppolice->fetchAll(PDO::FETCH_ASSOC); + } + +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Police_d.php b/Societes/ric/Tarifs/Modele/Police_d.php new file mode 100755 index 00000000..144b153b --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Police_d.php @@ -0,0 +1,348 @@ +executerRequete($sql, array($_SESSION['codeSociete'], $numeroClient)); + return $polices; + } + + public function getPolicesId($id) { + $sql = 'SELECT A.id, A.codeSociete, A.idClient, A.numeroClient, numeroPolice, numeroPoliceSociete, numeroContrat, + B.libelle As typeAvenant, dateEffet, dateFin, dateEcheance, numeroAvenant, dateAvenant, ADDDATE(A.dateEcheance, +1) as DateRenouvellement, + D.libelle as etatPolice, A.codeFractionnement, T.libelle As typeContrat, IFNULL(A.primeFamille,"0") as primeFamille, + IFNULL(A.primeBeneficiaire,"0") as primeBeneficiaire, rachatTm, rachatTm, TM.libelle as rachattm, garantieArchive, collegeArchive + FROM d_police A + left join typecontrat T on (T.codeTypeContrat=A.codeTypeContrat) + left join typeavenant B on (B.codeTypeAvenant=A.codeTypeAvenant) + left join etatpolice D on (D.codeEtatPolice=A.codeEtatPolice) + left join rachattm TM on (TM.codeRachatTm=A.rachatTm) + WHERE (A.codeSociete=?) AND (A.idClient=?) order by A.id'; + + $polices = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + return $polices; + } + + public function getPolice($numeroPolice) + { + $sql = 'call sp_d_getPoliceNo(?, ?);'; + + $police = $this->executerRequete($sql, array($_SESSION['codeSociete'], $numeroPolice)); + + if ($police->rowCount() > 0) + return $police->fetch(); + else + throw new Exception("Aucun devis ne correspond au numéo '$numeroPolice'"); + } + + public function getPoliceId($id) + { + $sql = 'call sp_d_getPoliceId(?, ?);'; + + $police = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + + if ($police->rowCount() > 0) + return $police->fetch(); + else + throw new Exception("Aucun devis ne correspond au ie '$id'"); + } + + public function getPoliceIdSimple($id) { + $sql = 'SELECT A.* FROM d_police A WHERE (A.codeSociete=?) AND (A.id=?)'; + $police = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + if ($police->rowCount() > 0) + return $police->fetch(); + else + throw new Exception("Aucun devis ne correspond au ie '$id'"); + } + + public function getNombrePolices($numeroClient) + { + $sql = 'select count(*) as nbPolices FROM d_polices A WHERE (A.codeSociete=?) AND (A.numeroClient=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $numeroClient)); + $ligne = $resultat->fetch(); + return $ligne['nbPolices']; + } + + public function getNombrePolicesId($id) + { + $sql = 'select count(*) as nbPolices FROM d_police A WHERE (A.codeSociete=?) AND (A.id=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + $ligne = $resultat->fetch(); + return $ligne['nbPolices']; + } + + public function getContextePoliceId($id) { + $sql = 'SELECT A.idClient, A.numeroClient, A.id AS idPolice, A.numeroPolice, A.transforme, A.numeroContrat, + IFNULL(B.tauxTaxe,"0") AS tauxTaxe, A.codeEtape, IFNULL(A.tauxCommission,"0") AS tauxCommission, + IFNULL(A.primeFamille,"0") as primeFamille, IFNULL(A.primeBeneficiaire,"0") as primeBeneficiaire, rachatTm, + TM.libelle as rachattm, garantieArchive, collegeArchive, A.codeTypeAvenant, ADDDATE(A.dateEcheance, +1) as DateRenouvellement, + A.dateEffet, A.dateFin, A.dateEcheance, dateAvenant, A.deduireComm, A.codeEtatPolice + FROM d_police A + LEFT JOIN typecontrat B ON (B.codeTypeContrat=A.codeTypeContrat) + left join rachattm TM on (TM.codeRachatTm=A.rachatTm) + WHERE (A.codeSociete=?) AND (A.id=?)'; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $id)); + $context = $resultat->fetch(); + + $_SESSION['idClient_d_C'] = $context['idClient']; + $_SESSION['numeroClient_d_C'] = $context['numeroClient']; + $_SESSION['idPolice_d_C'] = $context['idPolice']; + $_SESSION['numeroPolice_d_C'] = $context['numeroPolice']; + $_SESSION['codeEtape_d_C'] = $context['codeEtape']; + $_SESSION['tauxTaxe_d_C'] = $context['tauxTaxe']; + $_SESSION['tauxCommission_d_C'] = $context['tauxCommission']; + $_SESSION['deduireComm_d_C'] = $context['deduireComm']; + + $_SESSION['dateEffet_d_C'] = $context['dateEffet']; + $_SESSION['dateFin_d_C'] = $context['dateFin']; + $_SESSION['dateEcheance_d_C'] = $context['dateEcheance']; + + $_SESSION['dateAvenant_d_C'] = $context['dateAvenant']; + + $_SESSION['idPolice_d_Ajax'] = $_SESSION['idPolice_d_C']; + + $_SESSION['rachatTm_d_C'] = $context['rachatTm']; + + $_SESSION['collegeArchive_d_C'] = $context['collegeArchive']; + } + + public function getDenierNumeroPolice($annee) + { + $sql = 'select dernierNumeroPolice from d_numerotationpolice WHERE (codeSociete=? AND annee=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'],$annee)); + + if ($resultat->rowCount() == 0) + { + $sql = 'insert into d_numerotationpolice (codeSociete, annee, dernierNumeroPolice) values (?,?,?)'; + $this->executerRequete($sql, array($_SESSION['codeSociete'],$annee,"0")); + return "1"; + } else + { + $ligne = $resultat->fetch(); + return $ligne['dernierNumeroPolice']+1; + } + } + + public function setDenierNumeroPolice($annee,$dernierNumeroPolice) + { + $sql = 'update d_numerotationpolice set dernierNumeroPolice=? WHERE (codeSociete=? AND annee=?)'; + $this->executerRequete($sql, array($dernierNumeroPolice, $_SESSION['codeSociete'], $annee)); + } + + public function ajouter($codeSociete, $idClient, $numeroClient, $numeroPolice, $numeroPoliceSociete, $codeTypeContrat, + $dateEffet, $dateFin, $dateEcheance, $numeroAvenant, $codeTypeAvenant, $dateAvenant, $codeApporteur, $codeCommercial, $codeGestionnaire, + $dateCre, $userCre, $codeEtatPolice, $codeFractionnement, $codePeriodicite, $tauxCommission, $tauxCommissionAutre, $primeFamille, $primeBeneficiaire, + $rachatTm, $deduireComm, $taciteReconduction, $tauxRachatTm, $tauxRistourne) + { + + $sql = 'INSERT INTO d_police (codeSociete, idClient, numeroClient, numeroPolice, numeroPoliceSociete, + codeTypeContrat, dateEffet, dateFin, dateEcheance, numeroAvenant, codeTypeAvenant, dateAvenant, + codeApporteur, codeCommercial, codeGestionnaire, dateCre, userCre, codeEtatPolice, codeFractionnement, codePeriodicite, tauxCommission, tauxCommissionAutre, + primeFamille, primeBeneficiaire, rachatTm, deduireComm, taciteReconduction, tauxRachatTm, tauxRistourne) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; + + $this->executerRequete($sql, array($codeSociete, $idClient, $numeroClient, $numeroPolice, $numeroPoliceSociete, $codeTypeContrat, + $dateEffet, $dateFin, $dateEcheance, $numeroAvenant, $codeTypeAvenant, $dateAvenant, $codeApporteur, $codeCommercial, $codeGestionnaire, + $dateCre, $userCre, $codeEtatPolice, $codeFractionnement, $codePeriodicite, $tauxCommission, $tauxCommissionAutre, $primeFamille, $primeBeneficiaire, + $rachatTm, $deduireComm, $taciteReconduction, $tauxRachatTm, $tauxRistourne)); + + $dernierId=$this->dernierId(); + + $sql = 'insert into d_optionstarif (idPolice, numeroOptionTarif, libelleOptionTarif, user) + select id as idPolice, "1" numeroOptionTarif, "Option 1" libelleOptionTarif, userCre from d_police where (id=?)'; + + $this->executerRequete($sql, array($dernierId)); + + return $dernierId; + + } + + public function modifier($id, $codeTypeContrat, $codeApporteur, $tauxCommission, $codePeriodicite, + $rachatTm, $tauxRachatTm, $dateEffet, $dateEcheance, $codeCommercial, $tauxCommissionAutre, $tauxRistourne) + { + $sql = 'UPDATE d_police SET + codeTypeContrat =?, + codeApporteur =?, + tauxCommission =?, + codePeriodicite =?, + rachatTm =?, + tauxRachatTm =?, + dateEffet =?, + dateEcheance =?, + codeCommercial =?, + tauxCommissionAutre =?, + tauxRistourne =? + where (id=?)'; + + $this->executerRequete($sql, array($codeTypeContrat, $codeApporteur, $tauxCommission, $codePeriodicite, + $rachatTm, $tauxRachatTm, $dateEffet, $dateEcheance, $codeCommercial, $tauxCommissionAutre, $tauxRistourne, $id)); + } + + public function getIdPolice($numeroPolice) { + $sql = 'SELECT id FROM d_police WHERE (codeSociete=?) AND (numeroPolice=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'], $numeroPolice)); + $ligne = $resultat->fetch(); + return $ligne['id']; + } + + public function existeligne($numeroPolice) { + $sql = 'select id FROM d_police WHERE (codeSociete=?) and (numeroPolice=?)'; + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'],$numeroPolice)); + return ($resultat->rowCount() > 0); + } + + public function formaterNumeroPolice($annee,$numeroPolice) { + $numeroPolice = "00000".$numeroPolice; + $numeroPolice = substr($numeroPolice, -6); + $numeroPolice = "D".$annee.$numeroPolice; + return $numeroPolice; + } + + public function supprimer($idPolice) { + $sql = 'select id from d_college where (idPolice=?) limit 1'; + $resultat = $this->executerRequete($sql, array($idPolice)); + + if($resultat->rowCount() == 0) + { + $sql = 'DELETE FROM d_police WHERE (id=?)'; + $this->executerRequete($sql, array($idPolice)); + return true; + } + else + { + return false; + } + } + + public function archivergarantie($id) { + $sql = 'UPDATE d_police SET garantieArchive="1" where (id=?)'; + $this->executerRequete($sql, array($id)); + } + + public function archivercollege($id) { + $sql = 'UPDATE d_police SET collegeArchive="1" where (id=?)'; + $this->executerRequete($sql, array($id)); + } + + public function getContexteAjaxPolice($id) + { + $sql = 'SELECT A.id as idPolice FROM d_police A WHERE (A.id=?)'; + $resultat = $this->executerRequete($sql, array($id)); + $context = $resultat->fetch(); + $_SESSION['idPolice_d_Ajax'] = $context['idPolice']; + } + + public function getCollegesCP($idPolice) + { + $sql = 'call sp_collesges_d_police(?);'; + + $colleges = $this->executerRequete($sql, array($idPolice)); + return $colleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function getGarantiesCollegesCP($idPolice) + { + $sql = 'call sp_garanties_colleges_d_police(?);'; + + $garantiescolleges = $this->executerRequete($sql, array($idPolice)); + return $garantiescolleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function gettableauPrestationsCP($idPolice) + { + $sql = 'call sp_tableau_prestation_d_police(?);'; + + $colleges = $this->executerRequete($sql, array($idPolice)); + return $colleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function getClientsearchPol($numeroPolice) + { + $sql = 'select id as idPolice FROM d_police WHERE (codeSociete=?) AND (numeroPolice=?)'; + + $resultat = $this->executerRequete($sql, array($_SESSION['codeSociete'],$numeroPolice)); + + if ($resultat->rowCount() == 0) + { + return "0"; + } else + { + $ligne = $resultat->fetch(); + return $ligne['idPolice']; + } + } + + public function transformer($idDevis, $numeroOptionTarif) + { + $user = $_SESSION['login']; + + $sql = 'call sp_transformer_devis(?, ?, ?);'; + + $resultat = $this->executerRequete($sql, array($idDevis, $user, $numeroOptionTarif)); + + if ($resultat->rowCount() == 0) + { + return "0"; + } else + { + $ligne = $resultat->fetch(); + return $ligne['idPolice']; + } + } + + public function getContexteClientId($idPolice) { + $sql = 'SELECT A.id as idClient, A.numeroClient, concat(A.nom," ",A.prenoms) as nomClient + FROM d_clients A join d_police B on (B.idClient=A.id) WHERE (B.id=?)'; + + $resultat = $this->executerRequete($sql, array($idPolice)); + + $context = $resultat->fetch(); + $_SESSION['idClient_d_C'] = $context['idClient']; + $_SESSION['numeroClient_d_C'] = $context['numeroClient']; + $_SESSION['nomClient_d_C'] = $context['nomClient']; + $_SESSION['idClient_d_Ajax'] = $context['idClient']; + } + + public function getEnteteCP($idPolice) + { + $sql = 'call sp_entete_devis(?);'; + + $entete = $this->executerRequete($sql, array($idPolice)); + return $entete->fetch(PDO::FETCH_ASSOC); + } + + public function nouvelleoptiontarif($idPolice) + { + $sql = 'insert into d_optionstarif (idPolice, numeroOptionTarif, libelleOptionTarif, user) + select id as idPolice, "1" numeroOptionTarif, "Option 1" libelleOptionTarif, userCre from d_police where (id=?)'; + + $this->executerRequete($sql, array($dernierId)); + + return $dernierId; + + } + + public function getTextecp($id) { + $sql = 'select texteCp from d_police where (id=?)'; + $textecp = $this->executerRequete($sql, array($id)); + return $textecp->fetch(); + } + + public function enregistrertexteCp($texteCp, $idPolice) { + $sql = 'update d_police set texteCp=? where (id=?)'; + $this->executerRequete($sql, array($texteCp, $idPolice)); + } +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Police_d_sodciete.php b/Societes/ric/Tarifs/Modele/Police_d_sodciete.php new file mode 100755 index 00000000..b189806e --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Police_d_sodciete.php @@ -0,0 +1,57 @@ +executerRequete($sql, array($idPolice)); + return $colleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function getGarantiesCollegesCP($idPolice) + { + $sql = 'call sp_garanties_colleges_d_police(?);'; + + $garantiescolleges = $this->executerRequete($sql, array($idPolice)); + return $garantiescolleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function getGarantiesCollegesCpLienParente($idPolice) + { + // $sql = 'call sp_garanties_colleges_d_police(?);'; + $sql = 'call sp_garanties_colleges_d_police_lien_parente(?);'; + + $garantiescolleges = $this->executerRequete($sql, array($idPolice)); + return $garantiescolleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function gettableauPrestationsCP($idPolice) + { + $sql = 'call sp_tableau_prestation_d_police(?);'; + + $colleges = $this->executerRequete($sql, array($idPolice)); + return $colleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function gettableauPrestationsCpLienParente($idPolice) + { + // $sql = 'call sp_tableau_prestation_d_police(?);'; + $sql = 'call sp_tableau_prestation_d_police_lien_parente(?);'; + + $colleges = $this->executerRequete($sql, array($idPolice)); + return $colleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function getEnteteCP($idPolice) + { + $sql = 'call sp_entete_devis(?);'; + + $entete = $this->executerRequete($sql, array($idPolice)); + return $entete->fetch(PDO::FETCH_ASSOC); + } + +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Police_sodciete.php b/Societes/ric/Tarifs/Modele/Police_sodciete.php new file mode 100755 index 00000000..3772220d --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Police_sodciete.php @@ -0,0 +1,152 @@ +executerRequete($sql, array($idPolice)); + return $colleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function getGarantiesCollegesCP($idPolice) + { + $sql = 'call sp_garanties_colleges_d_police(?);'; + + $garantiescolleges = $this->executerRequete($sql, array($idPolice)); + return $garantiescolleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function getGarantiesCollegesCpLienParente($idPolice) + { + // $sql = 'call sp_garanties_colleges_d_police(?);'; + $sql = 'call sp_garanties_colleges_police_lien_parente(?);'; + + $garantiescolleges = $this->executerRequete($sql, array($idPolice)); + return $garantiescolleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function gettableauPrestationsCP($idPolice) + { + $sql = 'call sp_tableau_prestation_d_police(?);'; + + $colleges = $this->executerRequete($sql, array($idPolice)); + return $colleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function gettableauPrestationsCpLienParente($idPolice) + { + // $sql = 'call sp_tableau_prestation_d_police(?);'; + $sql = 'call sp_tableau_prestation_police_lien_parente(?);'; + + $colleges = $this->executerRequete($sql, array($idPolice)); + return $colleges->fetchAll(PDO::FETCH_ASSOC); + } + + public function getEnteteCP($idPolice,$p_emission) + { + //$sql = 'call sp_entete_devis(?);'; + + $sql = 'call sp_entete_cp(?,?);'; + + $entete = $this->executerRequete($sql, array($idPolice,$p_emission)); + return $entete->fetch(PDO::FETCH_ASSOC); + } + + public function getQuittanceplus($idPolice) + { + + $sql = 'SELECT A.*, (A.primeadditionnelle) AS primeplus + FROM quittance A WHERE A.idPolice =? + AND A.datePaiement BETWEEN A.dateEffetPolice AND CURDATE() AND A.regle = "0";'; + + $entete = $this->executerRequete($sql, array($idPolice)); + return $entete->fetch(PDO::FETCH_ASSOC); + + } + + public function getnombrestatutpolice($idPolice){ + + $sql= "SELECT + id AS idCollege, + fn_nb_beneficiaire_police2(idPolice) AS nbpolice, + fn_nb_statut_police(idPolice,'A') AS nbassure, + fn_nb_statut_police(idPolice,'C') AS nbconjoint, + fn_nb_statut_police(idPolice,'D') AS nbautreconjoint, + fn_nb_statut_police(idPolice,'E') AS nbenfant, + fn_nb_statut_police(idPolice,'F') AS nbgeniteur, + fn_nb_statut_police(idPolice,'O') AS nbautreparent, + fn_nb_statut_police(idPolice,'X') AS nbenfantsup + FROM college WHERE idPolice=?"; + + $liste = $this->executerRequete($sql, array($idPolice)); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + + public function getCollegesCp($idCollege) + { + $sql = 'SELECT * FROM college WHERE id =?;'; + + $resultat = $this->executerRequete($sql, array($idCollege)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + } + public function getcodeGarant($idPolice) + { + $sql = 'SELECT codeGcAssureur FROM police WHERE id=?;'; + + $resultat = $this->executerRequete($sql, array($idPolice)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + + } + public function getconditionsparticuliers($idPolice) + { + $sql = 'CALL sp_suite_condition_partTsColleges_rp(?)'; + + $resultat = $this->executerRequete($sql, array($idPolice)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + + } + public function getconditionsparticuliersincorporation($idPolice,$debutStat,$finStat) + { + $sql = 'CALL sp_suite_con_partTsCollegesIncorpo_rp(?,?,?)'; + + $resultat = $this->executerRequete($sql, array($idPolice,$debutStat,$finStat)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + + } + public function getconditionsparticuliersretrait($idPolice,$debutStat,$finStat) + { + $sql = 'CALL sp_suite_con_partTsCollegesRetrait_rp(?,?,?)'; + + $resultat = $this->executerRequete($sql, array($idPolice,$debutStat,$finStat)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + + } + public function getInfosGarant($codeGcAssureur) + { + $sql = 'SELECT * FROM gc_assureur WHERE codeGcAssureur=?;'; + + $resultat = $this->executerRequete($sql, array($codeGcAssureur)); + + return $resultat->fetch(PDO::FETCH_ASSOC); + + } + public static function dateToFrench($date, $format) + { + $english_days = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'); + $french_days = array('lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche'); + $english_months = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); + $french_months = array('janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'); + return str_replace($english_months, $french_months, str_replace($english_days, $french_days, date($format, strtotime($date) ) ) ); + } +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Tarif.php b/Societes/ric/Tarifs/Modele/Tarif.php new file mode 100755 index 00000000..b70a4b0b --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Tarif.php @@ -0,0 +1,163 @@ +executerRequete($sql, array($_SESSION['codeSociete'], $idPolice, $primeNette, $fraisCarte, $tauxCommissionGestion, $tauxCommission, $tauxCommissionAutre, $tauxTaxe)); + return $prime->fetch(PDO::FETCH_ASSOC); + } + + /* + public function calculerPrimeBen() + { + // dateSortie, primeNette, commission, primeHt, taxe, fraisCarte, primeTtc + + $idAdherent = $_SESSION['idAdherent_C']; + $idBeneficiaire = $_SESSION['idBeneficiaire_C']; + + $sql = 'SELECT codeProduit, codeLienParente, sexe, dateNaissance, dateEntree, IFNULL(primeFamille,"0") as primeFamille, + IFNULL(primeBeneficiaire,"0") as primeBeneficiaire FROM beneficiaire WHERE id=?'; + $resultat = $this->executerRequete($sql, array($idBeneficiaire)); + $beneficiaire = $resultat->fetch(); + + $codeLienParente = $beneficiaire['codeLienParente']; + $sexe = $beneficiaire['sexe']; + $dateNaissance = $beneficiaire['dateNaissance']; + $dateEntree = $beneficiaire['dateEntree']; + + $primeFamille = $beneficiaire['primeFamille']; + $primeBeneficiaire = $beneficiaire['primeBeneficiaire']; + + $age = age($dateNaissance , $dateEntree); + + // Pour Rdaiant + $codeEtape = $_SESSION['codeEtape_C']; + if($codeEtape=='1') + { + $accessoire = 15000; + } + else + { + $accessoire = 12000; + } + + if($codeLienParente=='A') + { + $primeBase = $primeFamille; + } + else + { + $primeBase = $primeBeneficiaire; + } + + $surprimeMaladie = 0; + $surprimeAge = 0; + $primeNette = $primeBase + $surprimeMaladie + $surprimeAge; + $commission = round(($primeNette*$_SESSION['tauxCommission_C'])/100); + $commissionAutre = round(($primeNette*$_SESSION['tauxCommission_C'])/100); + $primeHt = $primeNette + $commission; + $taxe = round(($primeHt*$_SESSION['tauxTaxe_C'])/100); + $fraisCarte = $accessoire; + $primeTtc = $primeHt+$taxe+$fraisCarte; + + $sql = 'update beneficiaire set primeNette=?, commission=?, primeHt=?, taxe=?, fraisCarte=?, primeTtc=? WHERE (id=?)'; + $this->executerRequete($sql, array($primeNette, $commission, $primeHt, $taxe, $fraisCarte, $primeTtc, $idBeneficiaire)); + + $sql = 'select IFNULL(sum(primeNette),"0") as primeNette, IFNULL(sum(commission),"0") as commission, + IFNULL(sum(primeHt),"0") as primeHt, IFNULL(sum(taxe),"0") as taxe, + IFNULL(sum(fraisCarte),"0") as fraisCarte, IFNULL(sum(primeTtc),"0") as primeTtc + from beneficiaire WHERE (idAdherent=?)'; + $resultat = $this->executerRequete($sql, array($idAdherent)); + $primeAdherent = $resultat->fetch(); + + $sql = 'update adherent set primeNette=?, commission=?, primeHt=?, taxe=?, fraisCarte=?, primeTtc=? WHERE (id=?)'; + $this->executerRequete($sql, array($primeAdherent['primeNette'], $primeAdherent['commission'],$primeAdherent['primeHt'], + $primeAdherent['taxe'], $primeAdherent['fraisCarte'] , $primeAdherent['primeTtc'], $idAdherent)); + } + */ + + /* + public function calculerPrimeCol() + { + // dateSortie, primeNette, commission, primeHt, taxe, fraisCarte, primeTtc + + $idAdherent = $_SESSION['idAdherent_C']; + $idBeneficiaire = $_SESSION['idBeneficiaire_C']; + + $sql = 'SELECT codeProduit, codeLienParente, sexe, dateNaissance, dateEntree, IFNULL(primeFamille,"0") as primeFamille, + IFNULL(primeBeneficiaire,"0") as primeBeneficiaire FROM beneficiaire WHERE id=?'; + $resultat = $this->executerRequete($sql, array($idBeneficiaire)); + $beneficiaire = $resultat->fetch(); + + $codeLienParente = $beneficiaire['codeLienParente']; + $sexe = $beneficiaire['sexe']; + $dateNaissance = $beneficiaire['dateNaissance']; + $dateEntree = $beneficiaire['dateEntree']; + + $primeFamille = $beneficiaire['primeFamille']; + $primeBeneficiaire = $beneficiaire['primeBeneficiaire']; + + $age = age($dateNaissance , $dateEntree); + + + // Pour Rdaiant + $codeEtape = $_SESSION['codeEtape_C']; + if($codeEtape=='1') + { + $accessoire = 15000; + } + else + { + $accessoire = 12000; + } + + if($codeLienParente=='A') + { + $primeBase = $primeFamille; + } + else + { + $primeBase = $primeBeneficiaire; + } + + + $surprimeMaladie = 0; + $surprimeAge = 0; + $primeNette = $primeBase + $surprimeMaladie + $surprimeAge; + $commission = round(($primeNette*$_SESSION['tauxCommission_C'])/100); + $commissionAutre = round(($primeNette*$_SESSION['tauxCommission_C'])/100); + $primeHt = $primeNette + $commission; + $taxe = round(($primeHt*$_SESSION['tauxTaxe_C'])/100); + $fraisCarte = $accessoire; + $primeTtc = $primeHt+$taxe+$fraisCarte; + + $sql = 'update beneficiaire set primeNette=?, commission=?, primeHt=?, taxe=?, fraisCarte=?, primeTtc=? WHERE (id=?)'; + $this->executerRequete($sql, array($primeNette, $commission, $primeHt, $taxe, $fraisCarte, $primeTtc, $idBeneficiaire)); + + $sql = 'select IFNULL(sum(primeNette),"0") as primeNette, IFNULL(sum(commission),"0") as commission, + IFNULL(sum(primeHt),"0") as primeHt, IFNULL(sum(taxe),"0") as taxe, + IFNULL(sum(fraisCarte),"0") as fraisCarte, IFNULL(sum(primeTtc),"0") as primeTtc + from beneficiaire WHERE (idAdherent=?)'; + $resultat = $this->executerRequete($sql, array($idAdherent)); + $primeAdherent = $resultat->fetch(); + + $sql = 'update adherent set primeNette=?, commission=?, primeHt=?, taxe=?, fraisCarte=?, primeTtc=? WHERE (id=?)'; + $this->executerRequete($sql, array($primeAdherent['primeNette'], $primeAdherent['commission'],$primeAdherent['primeHt'], + $primeAdherent['taxe'], $primeAdherent['fraisCarte'] , $primeAdherent['primeTtc'], $idAdherent)); + } + */ +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Tariffraisfunerairetrancheage.php b/Societes/ric/Tarifs/Modele/Tariffraisfunerairetrancheage.php new file mode 100755 index 00000000..c368d480 --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Tariffraisfunerairetrancheage.php @@ -0,0 +1,22 @@ +executerRequete($sql,array($_SESSION['codeSociete'])); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Modele/Trancheage.php b/Societes/ric/Tarifs/Modele/Trancheage.php new file mode 100755 index 00000000..55d3cd30 --- /dev/null +++ b/Societes/ric/Tarifs/Modele/Trancheage.php @@ -0,0 +1,22 @@ +executerRequete($sql,array($_SESSION['codeSociete'])); + + return $liste->fetchAll(PDO::FETCH_ASSOC); + } + +} \ No newline at end of file diff --git a/Societes/ric/Tarifs/Vue/Ajaxactesgarantiestatus.php b/Societes/ric/Tarifs/Vue/Ajaxactesgarantiestatus.php new file mode 100755 index 00000000..1892201e --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Ajaxactesgarantiestatus.php @@ -0,0 +1,271 @@ +nettoyer($garantie['codeGarantie']); + $garantie = $this->nettoyer($garantie['libelle']); + $codeLienParente = $this->nettoyer($nomStatus['codeLienParente']); + $nomStatus = $this->nettoyer($nomStatus['libelle']); + + if (est_anglophone()) + { + $garantie = $this->nettoyer($garantie['libelleEng']); + $nomStatus = $this->nettoyer($nomStatus['libelleEng']); + } + + $codeProduit = $this->nettoyer($collegelienparenteTemp['codeProduit']); +?> + + \ No newline at end of file diff --git a/Societes/ric/Tarifs/Vue/Ajaxcorpsacte.php b/Societes/ric/Tarifs/Vue/Ajaxcorpsacte.php new file mode 100755 index 00000000..9762818d --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Ajaxcorpsacte.php @@ -0,0 +1,69 @@ + +
      + + + + + + + + + + + + + + + + + + nettoyer($v['id']); + $libelle = $this->nettoyer($v['libelle']); + if (est_anglophone()) + { + $libelle = $this->nettoyer($v['libelleEng']); + } + ?> + + + + + + + + + + + + +
      + + + nettoyer($v['forfaitPlafond'])) : $this->nettoyer($v['tauxPlafond']); ?>"> + + + + + + + + + + +
      +
      \ No newline at end of file diff --git a/Societes/ric/Tarifs/Vue/Ajaxcorpsfamilleacte.php b/Societes/ric/Tarifs/Vue/Ajaxcorpsfamilleacte.php new file mode 100755 index 00000000..8ecfa38d --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Ajaxcorpsfamilleacte.php @@ -0,0 +1,71 @@ + +
      + + + + + + + + + + + + + + + + + + nettoyer($v['id']); + $codeFamilleActe = $this->nettoyer($v['codeFamilleActe']); + $libelle = $this->nettoyer($v['libelle']); + if (est_anglophone()) + { + $libelle = $this->nettoyer($v['libelleEng']); + } + + ?> + + + + + + + + + + + + +
      + + + nettoyer($v['forfaitPlafond'])) : $this->nettoyer($v['tauxPlafond']); ?>" + onChange="ajax_maj_plafond_familleacte_produit_lienparente('', this.value, this)"> + + + + + + + + + + +
      +
      \ No newline at end of file diff --git a/Societes/ric/Tarifs/Vue/Ajaxgarantiescollege.php b/Societes/ric/Tarifs/Vue/Ajaxgarantiescollege.php new file mode 100755 index 00000000..c555e38d --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Ajaxgarantiescollege.php @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + nettoyer($garantiebase['id']); + $codeGarantie = $this->nettoyer($garantiebase['codeGarantie']); + $codeLienParente = $this->nettoyer($garantiebase['codeLienParente']); + $garantie = $this->nettoyer($garantiebase['garantie']); + $plafondModifiable = $this->nettoyer($garantiebase['plafondModifiable']); + + if (est_anglophone()) + { + $garantie = $this->nettoyer($garantiebase['garantieEng']); + } + //echo $idGarbase; + ?> + + + + + + +
      + diff --git a/Societes/ric/Tarifs/Vue/Ajaxgarantiesconsultercollege.php b/Societes/ric/Tarifs/Vue/Ajaxgarantiesconsultercollege.php new file mode 100755 index 00000000..4702ae43 --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Ajaxgarantiesconsultercollege.php @@ -0,0 +1,140 @@ +
      +
      +
      + + + + + + + + + + + + nettoyer($prime_college['id']); + $forfait=$this->nettoyer($prime_college['forfait']); + + if($forfait=="1"){ + $plafond = format_N($this->nettoyer($prime_college['forfaitPlafond'])); + }else{ + $plafond = $this->nettoyer($prime_college['tauxPlafond']).' %'; + } + ?> + + + + + + + + +
      nettoyer($prime_college['lienparente']) ?>nettoyer($prime_college['prime'])) ?>nettoyer($prime_college['population'])) ?>
      + nettoyer($lienParente['codeLienParente']); + $nomStatus = $this->nettoyer($lienParente['libelle']); + $eleve = "Elève"; + if (est_anglophone()) + { + $nomStatus = $this->nettoyer($lienParente['libelleEng']); + $eleve = "Student"; + } + + $idCollege = $collegelienparenteTemp['id']; + + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Particularité du statut
      nettoyer($collegelienparenteTemp['ageLimiteStatus']); ?>nettoyer($collegelienparenteTemp['ageLimiteStatusEleve']); ?>nettoyer($collegelienparenteTemp['ageLimiteStatus']); ?>nettoyer($collegelienparenteTemp['ageLimiteStatus']); ?>
      nettoyer($collegelienparenteTemp['ticketModerateurStatus']);?>nettoyer($collegelienparenteTemp['ticketModerateurStatusEleve']);?>nettoyer($collegelienparenteTemp['ticketModerateurStatus']);?>
      nettoyer($collegelienparenteTemp['surprimeOption']); ?>nettoyer($collegelienparenteTemp['surprimeOptionEleve']); ?>nettoyer($collegelienparenteTemp['surprimeOption']); ?>
      +
      +
      + + + + + + + + + + + + + + nettoyer($garantiebase['id']); + $garantie = $this->nettoyer($garantiebase['garantie']); + $plafondModifiable = $this->nettoyer($garantiebase['plafondModifiable']); + if (est_anglophone()) + { + $garantie = $this->nettoyer($garantiebase['garantieEng']); + } + + if($this->nettoyer($garantiebase['forfait']== "1")){ + $plafond = format_N($this->nettoyer($garantiebase['plafond'])); + }else{ + $plafond = $this->nettoyer($garantiebase['tauxPlafond']); + } + ?> + + + + + + + + + + +
      nettoyer($garantiebase['nbreTransaction']); ?>nettoyer($garantiebase['periodicite']); ?>nettoyer($garantiebase['delaiCarenceFamilleActe']); ?>nettoyer($garantiebase['ticketModerateur']); ?>
      +
      + +
      +
      + +
      +
      +
      +
      \ No newline at end of file diff --git a/Societes/ric/Tarifs/Vue/Ajaxmajcollege.php b/Societes/ric/Tarifs/Vue/Ajaxmajcollege.php new file mode 100755 index 00000000..e8ee5625 --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Ajaxmajcollege.php @@ -0,0 +1,247 @@ + + + + + + + +nettoyer($collegeTemp['idCollege']); +?> + + + + + "0"):?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + +
      + + +
      + +
      +
      + + + +
      + + +
      + +
      +
      +
      + +
      +
      +
      + +
      +
      + +
      + + + +
      + + + + + + + + + + + +
      + + + + + +
      + + + + +
      + +
      +
      + + + "> +
      diff --git a/Societes/ric/Tarifs/Vue/Ajaxmajcolleged.php b/Societes/ric/Tarifs/Vue/Ajaxmajcolleged.php new file mode 100755 index 00000000..47e1fa79 --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Ajaxmajcolleged.php @@ -0,0 +1,265 @@ + + + + + + + + /> + +nettoyer($collegeTemp['idCollege']); + +?> + + + + "0"):?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Option + +
      + + + +
      Option + +
      + + +
      + +
      +
      + + + +
      + + +
      + +
      +
      +
      + +
      +
      +
      + +
      +
      + +
      + + + +
      + + + + + + + + + + + +
      + + + + + +
      + + + + +
      + +
      +
      + + + "> +
      diff --git a/Societes/ric/Tarifs/Vue/Ajaxparticularitestatuscollege.php b/Societes/ric/Tarifs/Vue/Ajaxparticularitestatuscollege.php new file mode 100755 index 00000000..bfc26b9a --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Ajaxparticularitestatuscollege.php @@ -0,0 +1,98 @@ +nettoyer($lienParente['codeLienParente']); + $nomStatus = $this->nettoyer($lienParente['libelle']); + $eleve = "Elève"; + if (est_anglophone()) + { + $nomStatus = $this->nettoyer($lienParente['libelleEng']); + $eleve = "Student"; + } + + $idCollege = $collegelienparenteTemp['id']; + +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Particularité du statut
      + + + + + + + +
      + + + + + +
      + + + + + +
      diff --git a/Societes/ric/Tarifs/Vue/Ajaxprimescategorie.php b/Societes/ric/Tarifs/Vue/Ajaxprimescategorie.php new file mode 100755 index 00000000..7171669f --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Ajaxprimescategorie.php @@ -0,0 +1,264 @@ + + + + + +" disabled > + + + + + + + + + + + + + + + + + + + + nettoyer($prime_college['id']); + + $codeLienParente=$this->nettoyer($prime_college['codeLienParente']); + + $pop = $this->nettoyer($prime_college['population']); + + + $lienparente = $this->nettoyer($prime_college['lienparente']); + + if (est_anglophone()){ + $lienparente = $this->nettoyer($prime_college['lienparenteEng']); + } + + $ageMin = $this->nettoyer($prime_college['ageMinimum']); + $ageMax = $this->nettoyer($prime_college['ageMaximum']); + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      +
      +
      + + + + + + + + + + + + + + + + nettoyer($prime_college['id']); + + $codeLienParente=$this->nettoyer($prime_college['codeLienParente']); + $lienparente = $this->nettoyer($prime_college['lienparente']); + + if (est_anglophone()){ + $lienparente = $this->nettoyer($prime_college['lienparenteEng']); + } + + $ageMin = $this->nettoyer($prime_college['ageMinimum']); + $ageMax = $this->nettoyer($prime_college['ageMaximum']); + ?> + + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + + + + + + + + + + + +
      +
      +
      + + + + + + + + + + + + + + + + + + + nettoyer($v['id']); + + $libelle = $this->nettoyer($v['libelleTrancheAge']); + + if (est_anglophone()){ + $libelle = $this->nettoyer($v['libelleTrancheAgeEng']); + } + + $population = $this->nettoyer($v['population']); + + $primeTotal = $this->nettoyer($v['primeTotal']); + + $i++; + ?> + + + + + + + + + + +
      + + + + + +
      +
      +
      +
      + diff --git a/Societes/ric/Tarifs/Vue/Ajaxrecapitulercollege.php b/Societes/ric/Tarifs/Vue/Ajaxrecapitulercollege.php new file mode 100755 index 00000000..cf13c6c2 --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Ajaxrecapitulercollege.php @@ -0,0 +1,427 @@ +" disabled > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      " >" >
      nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionGestionCollege']))?>
      nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['accessoireGarantCollege']))?>
      nettoyer($collegeTemp['accessoireIntermediaireCollege']))?>
      nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeCollege']))?>
      nettoyer($collegeTemp['fraisCarteCollege']))?>
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      " >" >
      nettoyer($collegeTemp['primeTtcAdherent']))?> nettoyer($collegeTemp['primeTtcAdherent_total']))?> nettoyer($collegeTemp['primeTtcConjoint']))?> nettoyer($collegeTemp['primeTtcConjoint_total']))?> nettoyer($collegeTemp['primeTtcEnfant']))?> nettoyer($collegeTemp['primeTtcEnfant_total']))?> nettoyer($collegeTemp['primeTtcAscendant']))?> nettoyer($collegeTemp['primeTtcAscendant_total']))?> nettoyer($collegeTemp['primeTtcAutre']))?> nettoyer($collegeTemp['primeTtcAutre_total']))?> nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatAdherent']))?> nettoyer($collegeTemp['primeNetteStatAdherent_total']))?> nettoyer($collegeTemp['primeNetteStatConjoint']))?> nettoyer($collegeTemp['primeNetteStatConjoint_total']))?> nettoyer($collegeTemp['primeNetteStatEnfant']))?> nettoyer($collegeTemp['primeNetteStatEnfant_total']))?> nettoyer($collegeTemp['primeNetteStatAscendant']))?> nettoyer($collegeTemp['primeNetteStatAscendant_total']))?> nettoyer($collegeTemp['primeNetteStatAutre']))?> nettoyer($collegeTemp['primeNetteStatAutre_total']))?> nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeAdherent']))?> nettoyer($collegeTemp['primeAdherent_total']))?> nettoyer($collegeTemp['primeConjoint']))?> nettoyer($collegeTemp['primeConjoint_total']))?> nettoyer($collegeTemp['primeEnfant']))?> nettoyer($collegeTemp['primeEnfant_total']))?> nettoyer($collegeTemp['primeAscendant']))?> nettoyer($collegeTemp['primeAscendant_total']))?> nettoyer($collegeTemp['primeAutre']))?> nettoyer($collegeTemp['primeAutre_total']))?> nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['surprimeOptionAdherent']))?> nettoyer($collegeTemp['surprimeOptionAdherent_total']))?> nettoyer($collegeTemp['surprimeOptionConjoint']))?> nettoyer($collegeTemp['surprimeOptionConjoint_total']))?> nettoyer($collegeTemp['surprimeOptionEnfant']))?> nettoyer($collegeTemp['surprimeOptionEnfant_total']))?> nettoyer($collegeTemp['surprimeOptionAscendant']))?> nettoyer($collegeTemp['surprimeOptionAscendant_total']))?> nettoyer($collegeTemp['surprimeOptionAutre']))?> nettoyer($collegeTemp['surprimeOptionAutre_total']))?> nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteAdherent']))?> nettoyer($collegeTemp['primeNetteAdherent_total']))?> nettoyer($collegeTemp['primeNetteConjoint']))?> nettoyer($collegeTemp['primeNetteConjoint_total']))?> nettoyer($collegeTemp['primeNetteEnfant']))?> nettoyer($collegeTemp['primeNetteEnfant_total']))?> nettoyer($collegeTemp['primeNetteAscendant']))?> nettoyer($collegeTemp['primeNetteAscendant_total']))?> nettoyer($collegeTemp['primeNetteAutre']))?> nettoyer($collegeTemp['primeNetteAutre_total']))?> nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionGestionAdherent']))?> nettoyer($collegeTemp['commissionGestionAdherent_total']))?> nettoyer($collegeTemp['commissionGestionConjoint']))?> nettoyer($collegeTemp['commissionGestionConjoint_total']))?> nettoyer($collegeTemp['commissionGestionEnfant']))?> nettoyer($collegeTemp['commissionGestionEnfant_total']))?> nettoyer($collegeTemp['commissionGestionAscendant']))?> nettoyer($collegeTemp['commissionGestionAscendant_total']))?> nettoyer($collegeTemp['commissionGestionAutre']))?> nettoyer($collegeTemp['commissionGestionAutre_total']))?> nettoyer($collegeTemp['commissionGestionCollege']))?>
      nettoyer($collegeTemp['commissionAdherent']))?> nettoyer($collegeTemp['commissionAdherent_total']))?> nettoyer($collegeTemp['commissionConjoint']))?> nettoyer($collegeTemp['commissionConjoint_total']))?> nettoyer($collegeTemp['commissionEnfant']))?> nettoyer($collegeTemp['commissionEnfant_total']))?> nettoyer($collegeTemp['commissionAscendant']))?> nettoyer($collegeTemp['commissionAscendant_total']))?> nettoyer($collegeTemp['commissionBrokerAutre']))?> nettoyer($collegeTemp['commissionBrokerAutre_total']))?> nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreAdherent']))?> nettoyer($collegeTemp['commissionAutreAdherent_total']))?> nettoyer($collegeTemp['commissionAutreConjoint']))?> nettoyer($collegeTemp['commissionAutreConjoint_total']))?> nettoyer($collegeTemp['commissionAutreEnfant']))?> nettoyer($collegeTemp['commissionAutreEnfant_total']))?> nettoyer($collegeTemp['commissionAutreAscendant']))?> nettoyer($collegeTemp['commissionAutreAscendant_total']))?> nettoyer($collegeTemp['commissionAutreAutre']))?> nettoyer($collegeTemp['commissionAutreAutre_total']))?> nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireAdherent']))?> nettoyer($collegeTemp['accessoireAdherent_total']))?> nettoyer($collegeTemp['accessoireConjoint']))?> nettoyer($collegeTemp['accessoireConjoint_total']))?> nettoyer($collegeTemp['accessoireEnfant']))?> nettoyer($collegeTemp['accessoireEnfant_total']))?> nettoyer($collegeTemp['accessoireAscendant']))?> nettoyer($collegeTemp['accessoireAscendant_total']))?> nettoyer($collegeTemp['accessoireAutre']))?> nettoyer($collegeTemp['accessoireAutre_total']))?> nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['accessoireGarantAdherent']))?> nettoyer($collegeTemp['accessoireGarantAdherent_total']))?> nettoyer($collegeTemp['accessoireGarantConjoint']))?> nettoyer($collegeTemp['accessoireGarantConjoint_total']))?> nettoyer($collegeTemp['accessoireGarantEnfant']))?> nettoyer($collegeTemp['accessoireGarantEnfant_total']))?> nettoyer($collegeTemp['accessoireGarantAscendant']))?> nettoyer($collegeTemp['accessoireGarantAscendant_total']))?> nettoyer($collegeTemp['accessoireGarantAutre']))?> nettoyer($collegeTemp['accessoireGarantAutre_total']))?> nettoyer($collegeTemp['accessoireGarantCollege']))?>
      nettoyer($collegeTemp['accessoireIntermediaireAdherent']))?> nettoyer($collegeTemp['accessoireIntermediaireAdherent_total']))?> nettoyer($collegeTemp['accessoireIntermediaireConjoint']))?> nettoyer($collegeTemp['accessoireIntermediaireConjoint_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAutreConjoint']))?> nettoyer($collegeTemp['accessoireIntermediaireAutreConjoint_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAscendant']))?> nettoyer($collegeTemp['accessoireIntermediaireAscendant_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAutre']))?> nettoyer($collegeTemp['accessoireIntermediaireAutre_total']))?> nettoyer($collegeTemp['accessoireIntermediaireCollege']))?>
      nettoyer($collegeTemp['primeHtAdherent']))?> nettoyer($collegeTemp['primeHtAdherent_total']))?> nettoyer($collegeTemp['primeHtConjoint']))?> nettoyer($collegeTemp['primeHtConjoint_total']))?> nettoyer($collegeTemp['primeHtEnfant']))?> nettoyer($collegeTemp['primeHtEnfant_total']))?> nettoyer($collegeTemp['primeHtAscendant']))?> nettoyer($collegeTemp['primeHtAscendant_total']))?> nettoyer($collegeTemp['primeHtAutre']))?> nettoyer($collegeTemp['primeHtAutre_total']))?> nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeAdherent']))?> nettoyer($collegeTemp['taxeAdherent_total']))?> nettoyer($collegeTemp['taxeConjoint']))?> nettoyer($collegeTemp['taxeConjoint_total']))?> nettoyer($collegeTemp['taxeEnfant']))?> nettoyer($collegeTemp['taxeEnfant_total']))?> nettoyer($collegeTemp['taxeAscendant']))?> nettoyer($collegeTemp['taxeAscendant_total']))?> nettoyer($collegeTemp['taxeAutre']))?> nettoyer($collegeTemp['taxeAutre_total']))?> nettoyer($collegeTemp['taxeCollege']))?>
      nettoyer($collegeTemp['fraisCarteAdherent']))?> nettoyer($collegeTemp['fraisCarteAdherent_total']))?> nettoyer($collegeTemp['fraisCarteConjoint']))?> nettoyer($collegeTemp['fraisCarteConjoint_total']))?> nettoyer($collegeTemp['fraisCarteEnfant']))?> nettoyer($collegeTemp['fraisCarteEnfant_total']))?> nettoyer($collegeTemp['fraisCarteAscendant']))?> nettoyer($collegeTemp['fraisCarteAscendant_total']))?> nettoyer($collegeTemp['fraisCarteAutre']))?> nettoyer($collegeTemp['fraisCarteAutre_total']))?> nettoyer($collegeTemp['fraisCarteCollege']))?>
      + \ No newline at end of file diff --git a/Societes/ric/Tarifs/Vue/Ajaxrecapitulerconsultercollege.php b/Societes/ric/Tarifs/Vue/Ajaxrecapitulerconsultercollege.php new file mode 100755 index 00000000..921b0bdb --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Ajaxrecapitulerconsultercollege.php @@ -0,0 +1,465 @@ +
      +" disabled > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionGestionCollege']))?>
      nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['accessoireGarantCollege']))?>
      nettoyer($collegeTemp['accessoireIntermediaireCollege']))?>
      nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeCollege']))?>
      nettoyer($collegeTemp['fraisCarteCollege']))?>
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      nettoyer($collegeTemp['primeTtcAdherent']))?> nettoyer($collegeTemp['primeTtcAdherent_total']))?> nettoyer($collegeTemp['primeTtcConjoint']))?> nettoyer($collegeTemp['primeTtcConjoint_total']))?> nettoyer($collegeTemp['primeTtcEnfant']))?> nettoyer($collegeTemp['primeTtcEnfant_total']))?> nettoyer($collegeTemp['primeTtcAscendant']))?> nettoyer($collegeTemp['primeTtcAscendant_total']))?> nettoyer($collegeTemp['primeTtcAutre']))?> nettoyer($collegeTemp['primeTtcAutre_total']))?> nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatAdherent']))?> nettoyer($collegeTemp['primeNetteStatAdherent_total']))?> nettoyer($collegeTemp['primeNetteStatConjoint']))?> nettoyer($collegeTemp['primeNetteStatConjoint_total']))?> nettoyer($collegeTemp['primeNetteStatEnfant']))?> nettoyer($collegeTemp['primeNetteStatEnfant_total']))?> nettoyer($collegeTemp['primeNetteStatAscendant']))?> nettoyer($collegeTemp['primeNetteStatAscendant_total']))?> nettoyer($collegeTemp['primeNetteStatAutre']))?> nettoyer($collegeTemp['primeNetteStatAutre_total']))?> nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeAdherent']))?> nettoyer($collegeTemp['primeAdherent_total']))?> nettoyer($collegeTemp['primeConjoint']))?> nettoyer($collegeTemp['primeConjoint_total']))?> nettoyer($collegeTemp['primeEnfant']))?> nettoyer($collegeTemp['primeEnfant_total']))?> nettoyer($collegeTemp['primeAscendant']))?> nettoyer($collegeTemp['primeAscendant_total']))?> nettoyer($collegeTemp['primeAutre']))?> nettoyer($collegeTemp['primeAutre_total']))?> nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['surprimeOptionAdherent']))?> nettoyer($collegeTemp['surprimeOptionAdherent_total']))?> nettoyer($collegeTemp['surprimeOptionConjoint']))?> nettoyer($collegeTemp['surprimeOptionConjoint_total']))?> nettoyer($collegeTemp['surprimeOptionEnfant']))?> nettoyer($collegeTemp['surprimeOptionEnfant_total']))?> nettoyer($collegeTemp['surprimeOptionAscendant']))?> nettoyer($collegeTemp['surprimeOptionAscendant_total']))?> nettoyer($collegeTemp['surprimeOptionAutre']))?> nettoyer($collegeTemp['surprimeOptionAutre_total']))?> nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteAdherent']))?> nettoyer($collegeTemp['primeNetteAdherent_total']))?> nettoyer($collegeTemp['primeNetteConjoint']))?> nettoyer($collegeTemp['primeNetteConjoint_total']))?> nettoyer($collegeTemp['primeNetteEnfant']))?> nettoyer($collegeTemp['primeNetteEnfant_total']))?> nettoyer($collegeTemp['primeNetteAscendant']))?> nettoyer($collegeTemp['primeNetteAscendant_total']))?> nettoyer($collegeTemp['primeNetteAutre']))?> nettoyer($collegeTemp['primeNetteAutre_total']))?> nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionGestionAdherent']))?> nettoyer($collegeTemp['commissionGestionAdherent_total']))?> nettoyer($collegeTemp['commissionGestionConjoint']))?> nettoyer($collegeTemp['commissionGestionConjoint_total']))?> nettoyer($collegeTemp['commissionGestionEnfant']))?> nettoyer($collegeTemp['commissionGestionEnfant_total']))?> nettoyer($collegeTemp['commissionGestionAscendant']))?> nettoyer($collegeTemp['commissionGestionAscendant_total']))?> nettoyer($collegeTemp['commissionGestionAutre']))?> nettoyer($collegeTemp['commissionGestionAutre_total']))?> nettoyer($collegeTemp['commissionGestionCollege']))?>
      nettoyer($collegeTemp['commissionAdherent']))?> nettoyer($collegeTemp['commissionAdherent_total']))?> nettoyer($collegeTemp['commissionConjoint']))?> nettoyer($collegeTemp['commissionConjoint_total']))?> nettoyer($collegeTemp['commissionEnfant']))?> nettoyer($collegeTemp['commissionEnfant_total']))?> nettoyer($collegeTemp['commissionAscendant']))?> nettoyer($collegeTemp['commissionAscendant_total']))?> nettoyer($collegeTemp['commissionBrokerAutre']))?> nettoyer($collegeTemp['commissionBrokerAutre_total']))?> nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreAdherent']))?> nettoyer($collegeTemp['commissionAutreAdherent_total']))?> nettoyer($collegeTemp['commissionAutreConjoint']))?> nettoyer($collegeTemp['commissionAutreConjoint_total']))?> nettoyer($collegeTemp['commissionAutreEnfant']))?> nettoyer($collegeTemp['commissionAutreEnfant_total']))?> nettoyer($collegeTemp['commissionAutreAscendant']))?> nettoyer($collegeTemp['commissionAutreAscendant_total']))?> nettoyer($collegeTemp['commissionAutreAutre']))?> nettoyer($collegeTemp['commissionAutreAutre_total']))?> nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireAdherent']))?> nettoyer($collegeTemp['accessoireAdherent_total']))?> nettoyer($collegeTemp['accessoireConjoint']))?> nettoyer($collegeTemp['accessoireConjoint_total']))?> nettoyer($collegeTemp['accessoireEnfant']))?> nettoyer($collegeTemp['accessoireEnfant_total']))?> nettoyer($collegeTemp['accessoireAscendant']))?> nettoyer($collegeTemp['accessoireAscendant_total']))?> nettoyer($collegeTemp['accessoireAutre']))?> nettoyer($collegeTemp['accessoireAutre_total']))?> nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['accessoireGarantAdherent']))?> nettoyer($collegeTemp['accessoireGarantAdherent_total']))?> nettoyer($collegeTemp['accessoireGarantConjoint']))?> nettoyer($collegeTemp['accessoireGarantConjoint_total']))?> nettoyer($collegeTemp['accessoireGarantEnfant']))?> nettoyer($collegeTemp['accessoireGarantEnfant_total']))?> nettoyer($collegeTemp['accessoireGarantAscendant']))?> nettoyer($collegeTemp['accessoireGarantAscendant_total']))?> nettoyer($collegeTemp['accessoireGarantAutre']))?> nettoyer($collegeTemp['accessoireGarantAutre_total']))?> nettoyer($collegeTemp['accessoireGarantCollege']))?>
      nettoyer($collegeTemp['accessoireIntermediaireAdherent']))?> nettoyer($collegeTemp['accessoireIntermediaireAdherent_total']))?> nettoyer($collegeTemp['accessoireIntermediaireConjoint']))?> nettoyer($collegeTemp['accessoireIntermediaireConjoint_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAutreConjoint']))?> nettoyer($collegeTemp['accessoireIntermediaireAutreConjoint_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAscendant']))?> nettoyer($collegeTemp['accessoireIntermediaireAscendant_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAutre']))?> nettoyer($collegeTemp['accessoireIntermediaireAutre_total']))?> nettoyer($collegeTemp['accessoireIntermediaireCollege']))?>
      nettoyer($collegeTemp['primeHtAdherent']))?> nettoyer($collegeTemp['primeHtAdherent_total']))?> nettoyer($collegeTemp['primeHtConjoint']))?> nettoyer($collegeTemp['primeHtConjoint_total']))?> nettoyer($collegeTemp['primeHtEnfant']))?> nettoyer($collegeTemp['primeHtEnfant_total']))?> nettoyer($collegeTemp['primeHtAscendant']))?> nettoyer($collegeTemp['primeHtAscendant_total']))?> nettoyer($collegeTemp['primeHtAutre']))?> nettoyer($collegeTemp['primeHtAutre_total']))?> nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeAdherent']))?> nettoyer($collegeTemp['taxeAdherent_total']))?> nettoyer($collegeTemp['taxeConjoint']))?> nettoyer($collegeTemp['taxeConjoint_total']))?> nettoyer($collegeTemp['taxeEnfant']))?> nettoyer($collegeTemp['taxeEnfant_total']))?> nettoyer($collegeTemp['taxeAscendant']))?> nettoyer($collegeTemp['taxeAscendant_total']))?> nettoyer($collegeTemp['taxeAutre']))?> nettoyer($collegeTemp['taxeAutre_total']))?> nettoyer($collegeTemp['taxeCollege']))?>
      nettoyer($collegeTemp['fraisCarteAdherent']))?> nettoyer($collegeTemp['fraisCarteAdherent_total']))?> nettoyer($collegeTemp['fraisCarteConjoint']))?> nettoyer($collegeTemp['fraisCarteConjoint_total']))?> nettoyer($collegeTemp['fraisCarteEnfant']))?> nettoyer($collegeTemp['fraisCarteEnfant_total']))?> nettoyer($collegeTemp['fraisCarteAscendant']))?> nettoyer($collegeTemp['fraisCarteAscendant_total']))?> nettoyer($collegeTemp['fraisCarteAutre']))?> nettoyer($collegeTemp['fraisCarteAutre_total']))?> nettoyer($collegeTemp['fraisCarteCollege']))?>
      + +
      \ No newline at end of file diff --git a/Societes/ric/Tarifs/Vue/Consultercollege.php b/Societes/ric/Tarifs/Vue/Consultercollege.php new file mode 100755 index 00000000..2a3365f5 --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Consultercollege.php @@ -0,0 +1,1046 @@ +titre = "INTER-SANTE - Consultation collège"; + + $controlPlafondAdherent = $_SESSION['controlPlafondAdherent']; + $controlPlafondBeneficiaire = $_SESSION['controlPlafondBeneficiaire']; + + $_SESSION['imposerPlafond'] = "1"; +?> + + + + + + + + + + + + + + + /> + + + + + + + +
      + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + +
      + + + +
      + + + +
      + + + + + +
      + + + +
      + + + + + + + + + + + +
      + + + + + +
      + + + + + +
      + + + "> + + "> + + "> +
      +
      + + + + + +
      + " disabled > + + + + + + + + + + + + + + + + + + + nettoyer($prime_college['id']); + + $pop = ($this->nettoyer($prime_college['population'])=="0")? "1":$this->nettoyer($prime_college['population']); + + $codeLienParente=$this->nettoyer($prime_college['codeLienParente']); + + $autoriserSupplement = ($this->nettoyer($prime_college['autoriserSupplement'])=="1")? "Oui" : "Non"; + + if (est_anglophone()){ + $autoriserSupplement = ($this->nettoyer($prime_college['autoriserSupplement'])=="1")? "Yes" : "No"; + } + + $ageMin = $this->nettoyer($prime_college['ageMinimum']); + $ageMax = $this->nettoyer($prime_college['ageMaximum']); + + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      nettoyer($prime_college['lienparente']) ?> + + + + + + + + + + + + + + + +
      + +
      +
      +
      + + + + + + + + + + + + + + + + nettoyer($prime_college['id']); + + $codeLienParente = $this->nettoyer($prime_college['codeLienParente']); + + $autoriserSupplement = ($this->nettoyer($prime_college['autoriserSupplement'])=="1")? "Oui" : "Non"; + + if (est_anglophone()){ + $autoriserSupplement = ($this->nettoyer($prime_college['autoriserSupplement'])=="1")? "Yes" : "No"; + } + + $ageMin = $this->nettoyer($prime_college['ageMinimum']); + $ageMax = $this->nettoyer($prime_college['ageMaximum']); + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      nettoyer($prime_college['lienparente']) ?> + + + + + + + + + + + +
      +
      +
      + + + + + + + + + + + + + + + + + + + nettoyer($v['id']); + + $libelle = $this->nettoyer($v['libelleTrancheAge']); + + if (est_anglophone()){ + $libelle = $this->nettoyer($v['libelleTrancheAgeEng']); + } + + $population = $this->nettoyer($v['population']); + + $primeTotal = $this->nettoyer($v['primeTotal']); + + $i++; + ?> + + + + + + + + + + +
      + + + + + +
      +
      +
      +
      + +
      + +
      + " disabled > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionGestionCollege']))?>
      nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['accessoireGarantCollege']))?>
      nettoyer($collegeTemp['accessoireIntermediaireCollege']))?>
      nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeCollege']))?>
      nettoyer($collegeTemp['fraisCarteCollege']))?>
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      nettoyer($collegeTemp['primeTtcAdherent']))?> nettoyer($collegeTemp['primeTtcAdherent_total']))?> nettoyer($collegeTemp['primeTtcConjoint']))?> nettoyer($collegeTemp['primeTtcConjoint_total']))?> nettoyer($collegeTemp['primeTtcEnfant']))?> nettoyer($collegeTemp['primeTtcEnfant_total']))?> nettoyer($collegeTemp['primeTtcAscendant']))?> nettoyer($collegeTemp['primeTtcAscendant_total']))?> nettoyer($collegeTemp['primeTtcAutre']))?> nettoyer($collegeTemp['primeTtcAutre_total']))?> nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatAdherent']))?> nettoyer($collegeTemp['primeNetteStatAdherent_total']))?> nettoyer($collegeTemp['primeNetteStatConjoint']))?> nettoyer($collegeTemp['primeNetteStatConjoint_total']))?> nettoyer($collegeTemp['primeNetteStatEnfant']))?> nettoyer($collegeTemp['primeNetteStatEnfant_total']))?> nettoyer($collegeTemp['primeNetteStatAscendant']))?> nettoyer($collegeTemp['primeNetteStatAscendant_total']))?> nettoyer($collegeTemp['primeNetteStatAutre']))?> nettoyer($collegeTemp['primeNetteStatAutre_total']))?> nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeAdherent']))?> nettoyer($collegeTemp['primeAdherent_total']))?> nettoyer($collegeTemp['primeConjoint']))?> nettoyer($collegeTemp['primeConjoint_total']))?> nettoyer($collegeTemp['primeEnfant']))?> nettoyer($collegeTemp['primeEnfant_total']))?> nettoyer($collegeTemp['primeAscendant']))?> nettoyer($collegeTemp['primeAscendant_total']))?> nettoyer($collegeTemp['primeAutre']))?> nettoyer($collegeTemp['primeAutre_total']))?> nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['surprimeOptionAdherent']))?> nettoyer($collegeTemp['surprimeOptionAdherent_total']))?> nettoyer($collegeTemp['surprimeOptionConjoint']))?> nettoyer($collegeTemp['surprimeOptionConjoint_total']))?> nettoyer($collegeTemp['surprimeOptionEnfant']))?> nettoyer($collegeTemp['surprimeOptionEnfant_total']))?> nettoyer($collegeTemp['surprimeOptionAscendant']))?> nettoyer($collegeTemp['surprimeOptionAscendant_total']))?> nettoyer($collegeTemp['surprimeOptionAutre']))?> nettoyer($collegeTemp['surprimeOptionAutre_total']))?> nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteAdherent']))?> nettoyer($collegeTemp['primeNetteAdherent_total']))?> nettoyer($collegeTemp['primeNetteConjoint']))?> nettoyer($collegeTemp['primeNetteConjoint_total']))?> nettoyer($collegeTemp['primeNetteEnfant']))?> nettoyer($collegeTemp['primeNetteEnfant_total']))?> nettoyer($collegeTemp['primeNetteAscendant']))?> nettoyer($collegeTemp['primeNetteAscendant_total']))?> nettoyer($collegeTemp['primeNetteAutre']))?> nettoyer($collegeTemp['primeNetteAutre_total']))?> nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionGestionAdherent']))?> nettoyer($collegeTemp['commissionGestionAdherent_total']))?> nettoyer($collegeTemp['commissionGestionConjoint']))?> nettoyer($collegeTemp['commissionGestionConjoint_total']))?> nettoyer($collegeTemp['commissionGestionEnfant']))?> nettoyer($collegeTemp['commissionGestionEnfant_total']))?> nettoyer($collegeTemp['commissionGestionAscendant']))?> nettoyer($collegeTemp['commissionGestionAscendant_total']))?> nettoyer($collegeTemp['commissionGestionAutre']))?> nettoyer($collegeTemp['commissionGestionAutre_total']))?> nettoyer($collegeTemp['commissionGestionCollege']))?>
      nettoyer($collegeTemp['commissionAdherent']))?> nettoyer($collegeTemp['commissionAdherent_total']))?> nettoyer($collegeTemp['commissionConjoint']))?> nettoyer($collegeTemp['commissionConjoint_total']))?> nettoyer($collegeTemp['commissionEnfant']))?> nettoyer($collegeTemp['commissionEnfant_total']))?> nettoyer($collegeTemp['commissionAscendant']))?> nettoyer($collegeTemp['commissionAscendant_total']))?> nettoyer($collegeTemp['commissionBrokerAutre']))?> nettoyer($collegeTemp['commissionBrokerAutre_total']))?> nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreAdherent']))?> nettoyer($collegeTemp['commissionAutreAdherent_total']))?> nettoyer($collegeTemp['commissionAutreConjoint']))?> nettoyer($collegeTemp['commissionAutreConjoint_total']))?> nettoyer($collegeTemp['commissionAutreEnfant']))?> nettoyer($collegeTemp['commissionAutreEnfant_total']))?> nettoyer($collegeTemp['commissionAutreAscendant']))?> nettoyer($collegeTemp['commissionAutreAscendant_total']))?> nettoyer($collegeTemp['commissionAutreAutre']))?> nettoyer($collegeTemp['commissionAutreAutre_total']))?> nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireAdherent']))?> nettoyer($collegeTemp['accessoireAdherent_total']))?> nettoyer($collegeTemp['accessoireConjoint']))?> nettoyer($collegeTemp['accessoireConjoint_total']))?> nettoyer($collegeTemp['accessoireEnfant']))?> nettoyer($collegeTemp['accessoireEnfant_total']))?> nettoyer($collegeTemp['accessoireAscendant']))?> nettoyer($collegeTemp['accessoireAscendant_total']))?> nettoyer($collegeTemp['accessoireAutre']))?> nettoyer($collegeTemp['accessoireAutre_total']))?> nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['accessoireGarantAdherent']))?> nettoyer($collegeTemp['accessoireGarantAdherent_total']))?> nettoyer($collegeTemp['accessoireGarantConjoint']))?> nettoyer($collegeTemp['accessoireGarantConjoint_total']))?> nettoyer($collegeTemp['accessoireGarantEnfant']))?> nettoyer($collegeTemp['accessoireGarantEnfant_total']))?> nettoyer($collegeTemp['accessoireGarantAscendant']))?> nettoyer($collegeTemp['accessoireGarantAscendant_total']))?> nettoyer($collegeTemp['accessoireGarantAutre']))?> nettoyer($collegeTemp['accessoireGarantAutre_total']))?> nettoyer($collegeTemp['accessoireGarantCollege']))?>
      nettoyer($collegeTemp['accessoireIntermediaireAdherent']))?> nettoyer($collegeTemp['accessoireIntermediaireAdherent_total']))?> nettoyer($collegeTemp['accessoireIntermediaireConjoint']))?> nettoyer($collegeTemp['accessoireIntermediaireConjoint_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAutreConjoint']))?> nettoyer($collegeTemp['accessoireIntermediaireAutreConjoint_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAscendant']))?> nettoyer($collegeTemp['accessoireIntermediaireAscendant_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAutre']))?> nettoyer($collegeTemp['accessoireIntermediaireAutre_total']))?> nettoyer($collegeTemp['accessoireIntermediaireCollege']))?>
      nettoyer($collegeTemp['primeHtAdherent']))?> nettoyer($collegeTemp['primeHtAdherent_total']))?> nettoyer($collegeTemp['primeHtConjoint']))?> nettoyer($collegeTemp['primeHtConjoint_total']))?> nettoyer($collegeTemp['primeHtEnfant']))?> nettoyer($collegeTemp['primeHtEnfant_total']))?> nettoyer($collegeTemp['primeHtAscendant']))?> nettoyer($collegeTemp['primeHtAscendant_total']))?> nettoyer($collegeTemp['primeHtAutre']))?> nettoyer($collegeTemp['primeHtAutre_total']))?> nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeAdherent']))?> nettoyer($collegeTemp['taxeAdherent_total']))?> nettoyer($collegeTemp['taxeConjoint']))?> nettoyer($collegeTemp['taxeConjoint_total']))?> nettoyer($collegeTemp['taxeEnfant']))?> nettoyer($collegeTemp['taxeEnfant_total']))?> nettoyer($collegeTemp['taxeAscendant']))?> nettoyer($collegeTemp['taxeAscendant_total']))?> nettoyer($collegeTemp['taxeAutre']))?> nettoyer($collegeTemp['taxeAutre_total']))?> nettoyer($collegeTemp['taxeCollege']))?>
      nettoyer($collegeTemp['fraisCarteAdherent']))?> nettoyer($collegeTemp['fraisCarteAdherent_total']))?> nettoyer($collegeTemp['fraisCarteConjoint']))?> nettoyer($collegeTemp['fraisCarteConjoint_total']))?> nettoyer($collegeTemp['fraisCarteEnfant']))?> nettoyer($collegeTemp['fraisCarteEnfant_total']))?> nettoyer($collegeTemp['fraisCarteAscendant']))?> nettoyer($collegeTemp['fraisCarteAscendant_total']))?> nettoyer($collegeTemp['fraisCarteAutre']))?> nettoyer($collegeTemp['fraisCarteAutre_total']))?> nettoyer($collegeTemp['fraisCarteCollege']))?>
      + +
      +
      + + +
      +

      +
      + + + + + + + + diff --git a/Societes/ric/Tarifs/Vue/Creercollege.php b/Societes/ric/Tarifs/Vue/Creercollege.php new file mode 100755 index 00000000..290e5cc0 --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Creercollege.php @@ -0,0 +1,754 @@ +nettoyer($collegeTemp['idCollegeTemp']); + + $idCollege = $this->nettoyer($collegeTemp['idCollege']); +?> + + + + + + + + + + +
      +
      + + + "0"):?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Option + +
      + + + +
      + + +
      + +
      +
      + + + +
      + + +
      + +
      +
      +
      + +
      +
      +
      + +
      +
      + +
      + + + +
      + + + + + + + + + + + +
      + + + + + +
      + + + + +
      + +
      +
      + + + "> +
      +
      + +
      + " disabled > + + + + + + + + + + + + + +
      +
      + +
      + " disabled > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      " >
      nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionGestionCollege']))?>
      nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['accessoireGarantCollege']))?>
      nettoyer($collegeTemp['accessoireIntermediaireCollege']))?>
      nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeCollege']))?>
      nettoyer($collegeTemp['fraisCarteCollege']))?>
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      " >
      nettoyer($collegeTemp['primeTtcAdherent']))?> nettoyer($collegeTemp['primeTtcAdherent_total']))?> nettoyer($collegeTemp['primeTtcConjoint']))?> nettoyer($collegeTemp['primeTtcConjoint_total']))?> nettoyer($collegeTemp['primeTtcEnfant']))?> nettoyer($collegeTemp['primeTtcEnfant_total']))?> nettoyer($collegeTemp['primeTtcAscendant']))?> nettoyer($collegeTemp['primeTtcAscendant_total']))?> nettoyer($collegeTemp['primeTtcAutre']))?> nettoyer($collegeTemp['primeTtcAutre_total']))?> nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatAdherent']))?> nettoyer($collegeTemp['primeNetteStatAdherent_total']))?> nettoyer($collegeTemp['primeNetteStatConjoint']))?> nettoyer($collegeTemp['primeNetteStatConjoint_total']))?> nettoyer($collegeTemp['primeNetteStatEnfant']))?> nettoyer($collegeTemp['primeNetteStatEnfant_total']))?> nettoyer($collegeTemp['primeNetteStatAscendant']))?> nettoyer($collegeTemp['primeNetteStatAscendant_total']))?> nettoyer($collegeTemp['primeNetteStatAutre']))?> nettoyer($collegeTemp['primeNetteStatAutre_total']))?> nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeAdherent']))?> nettoyer($collegeTemp['primeAdherent_total']))?> nettoyer($collegeTemp['primeConjoint']))?> nettoyer($collegeTemp['primeConjoint_total']))?> nettoyer($collegeTemp['primeEnfant']))?> nettoyer($collegeTemp['primeEnfant_total']))?> nettoyer($collegeTemp['primeAscendant']))?> nettoyer($collegeTemp['primeAscendant_total']))?> nettoyer($collegeTemp['primeAutre']))?> nettoyer($collegeTemp['primeAutre_total']))?> nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['surprimeOptionAdherent']))?> nettoyer($collegeTemp['surprimeOptionAdherent_total']))?> nettoyer($collegeTemp['surprimeOptionConjoint']))?> nettoyer($collegeTemp['surprimeOptionConjoint_total']))?> nettoyer($collegeTemp['surprimeOptionEnfant']))?> nettoyer($collegeTemp['surprimeOptionEnfant_total']))?> nettoyer($collegeTemp['surprimeOptionAscendant']))?> nettoyer($collegeTemp['surprimeOptionAscendant_total']))?> nettoyer($collegeTemp['surprimeOptionAutre']))?> nettoyer($collegeTemp['surprimeOptionAutre_total']))?> nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteAdherent']))?> nettoyer($collegeTemp['primeNetteAdherent_total']))?> nettoyer($collegeTemp['primeNetteConjoint']))?> nettoyer($collegeTemp['primeNetteConjoint_total']))?> nettoyer($collegeTemp['primeNetteEnfant']))?> nettoyer($collegeTemp['primeNetteEnfant_total']))?> nettoyer($collegeTemp['primeNetteAscendant']))?> nettoyer($collegeTemp['primeNetteAscendant_total']))?> nettoyer($collegeTemp['primeNetteAutre']))?> nettoyer($collegeTemp['primeNetteAutre_total']))?> nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionGestionAdherent']))?> nettoyer($collegeTemp['commissionGestionAdherent_total']))?> nettoyer($collegeTemp['commissionGestionConjoint']))?> nettoyer($collegeTemp['commissionGestionConjoint_total']))?> nettoyer($collegeTemp['commissionGestionEnfant']))?> nettoyer($collegeTemp['commissionGestionEnfant_total']))?> nettoyer($collegeTemp['commissionGestionAscendant']))?> nettoyer($collegeTemp['commissionGestionAscendant_total']))?> nettoyer($collegeTemp['commissionGestionAutre']))?> nettoyer($collegeTemp['commissionGestionAutre_total']))?> nettoyer($collegeTemp['commissionGestionCollege']))?>
      nettoyer($collegeTemp['commissionAdherent']))?> nettoyer($collegeTemp['commissionAdherent_total']))?> nettoyer($collegeTemp['commissionConjoint']))?> nettoyer($collegeTemp['commissionConjoint_total']))?> nettoyer($collegeTemp['commissionEnfant']))?> nettoyer($collegeTemp['commissionEnfant_total']))?> nettoyer($collegeTemp['commissionAscendant']))?> nettoyer($collegeTemp['commissionAscendant_total']))?> nettoyer($collegeTemp['commissionBrokerAutre']))?> nettoyer($collegeTemp['commissionBrokerAutre_total']))?> nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreAdherent']))?> nettoyer($collegeTemp['commissionAutreAdherent_total']))?> nettoyer($collegeTemp['commissionAutreConjoint']))?> nettoyer($collegeTemp['commissionAutreConjoint_total']))?> nettoyer($collegeTemp['commissionAutreEnfant']))?> nettoyer($collegeTemp['commissionAutreEnfant_total']))?> nettoyer($collegeTemp['commissionAutreAscendant']))?> nettoyer($collegeTemp['commissionAutreAscendant_total']))?> nettoyer($collegeTemp['commissionAutreAutre']))?> nettoyer($collegeTemp['commissionAutreAutre_total']))?> nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireAdherent']))?> nettoyer($collegeTemp['accessoireAdherent_total']))?> nettoyer($collegeTemp['accessoireConjoint']))?> nettoyer($collegeTemp['accessoireConjoint_total']))?> nettoyer($collegeTemp['accessoireEnfant']))?> nettoyer($collegeTemp['accessoireEnfant_total']))?> nettoyer($collegeTemp['accessoireAscendant']))?> nettoyer($collegeTemp['accessoireAscendant_total']))?> nettoyer($collegeTemp['accessoireAutre']))?> nettoyer($collegeTemp['accessoireAutre_total']))?> nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['accessoireGarantAdherent']))?> nettoyer($collegeTemp['accessoireGarantAdherent_total']))?> nettoyer($collegeTemp['accessoireGarantConjoint']))?> nettoyer($collegeTemp['accessoireGarantConjoint_total']))?> nettoyer($collegeTemp['accessoireGarantEnfant']))?> nettoyer($collegeTemp['accessoireGarantEnfant_total']))?> nettoyer($collegeTemp['accessoireGarantAscendant']))?> nettoyer($collegeTemp['accessoireGarantAscendant_total']))?> nettoyer($collegeTemp['accessoireGarantAutre']))?> nettoyer($collegeTemp['accessoireGarantAutre_total']))?> nettoyer($collegeTemp['accessoireGarantCollege']))?>
      nettoyer($collegeTemp['accessoireIntermediaireAdherent']))?> nettoyer($collegeTemp['accessoireIntermediaireAdherent_total']))?> nettoyer($collegeTemp['accessoireIntermediaireConjoint']))?> nettoyer($collegeTemp['accessoireIntermediaireConjoint_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAutreConjoint']))?> nettoyer($collegeTemp['accessoireIntermediaireAutreConjoint_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAscendant']))?> nettoyer($collegeTemp['accessoireIntermediaireAscendant_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAutre']))?> nettoyer($collegeTemp['accessoireIntermediaireAutre_total']))?> nettoyer($collegeTemp['accessoireIntermediaireCollege']))?>
      nettoyer($collegeTemp['primeHtAdherent']))?> nettoyer($collegeTemp['primeHtAdherent_total']))?> nettoyer($collegeTemp['primeHtConjoint']))?> nettoyer($collegeTemp['primeHtConjoint_total']))?> nettoyer($collegeTemp['primeHtEnfant']))?> nettoyer($collegeTemp['primeHtEnfant_total']))?> nettoyer($collegeTemp['primeHtAscendant']))?> nettoyer($collegeTemp['primeHtAscendant_total']))?> nettoyer($collegeTemp['primeHtAutre']))?> nettoyer($collegeTemp['primeHtAutre_total']))?> nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeAdherent']))?> nettoyer($collegeTemp['taxeAdherent_total']))?> nettoyer($collegeTemp['taxeConjoint']))?> nettoyer($collegeTemp['taxeConjoint_total']))?> nettoyer($collegeTemp['taxeEnfant']))?> nettoyer($collegeTemp['taxeEnfant_total']))?> nettoyer($collegeTemp['taxeAscendant']))?> nettoyer($collegeTemp['taxeAscendant_total']))?> nettoyer($collegeTemp['taxeAutre']))?> nettoyer($collegeTemp['taxeAutre_total']))?> nettoyer($collegeTemp['taxeCollege']))?>
      nettoyer($collegeTemp['fraisCarteAdherent']))?> nettoyer($collegeTemp['fraisCarteAdherent_total']))?> nettoyer($collegeTemp['fraisCarteConjoint']))?> nettoyer($collegeTemp['fraisCarteConjoint_total']))?> nettoyer($collegeTemp['fraisCarteEnfant']))?> nettoyer($collegeTemp['fraisCarteEnfant_total']))?> nettoyer($collegeTemp['fraisCarteAscendant']))?> nettoyer($collegeTemp['fraisCarteAscendant_total']))?> nettoyer($collegeTemp['fraisCarteAutre']))?> nettoyer($collegeTemp['fraisCarteAutre_total']))?> nettoyer($collegeTemp['fraisCarteCollege']))?>
      + +
      +
      + + + diff --git a/Societes/ric/Tarifs/Vue/Creercolleged.php b/Societes/ric/Tarifs/Vue/Creercolleged.php new file mode 100755 index 00000000..60de7ac1 --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Creercolleged.php @@ -0,0 +1,778 @@ +nettoyer($collegeTemp['idCollegeTemp']); + + $idCollege = $this->nettoyer($collegeTemp['idCollege']); +?> + +
      + +
      + +
      + +
      +
      + + + + + + + + + /> + + + + + "0"):?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Option + +
      + + + +
      Option + +
      + + +
      + +
      +
      + + + +
      + + +
      + +
      +
      +
      + +
      +
      +
      + +
      +
      + +
      + + + +
      + + + + + + + + + + + +
      + + + + + +
      + + + + +
      + +
      +
      + + + "> +
      +
      + +
      + " disabled > + + + + + + + + + + + + + +
      +
      + +
      + " disabled > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      " >" >
      nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionGestionCollege']))?>
      nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['accessoireGarantCollege']))?>
      nettoyer($collegeTemp['accessoireIntermediaireCollege']))?>
      nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeCollege']))?>
      nettoyer($collegeTemp['fraisCarteCollege']))?>
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      " >" >
      nettoyer($collegeTemp['primeTtcAdherent']))?> nettoyer($collegeTemp['primeTtcAdherent_total']))?> nettoyer($collegeTemp['primeTtcConjoint']))?> nettoyer($collegeTemp['primeTtcConjoint_total']))?> nettoyer($collegeTemp['primeTtcEnfant']))?> nettoyer($collegeTemp['primeTtcEnfant_total']))?> nettoyer($collegeTemp['primeTtcAscendant']))?> nettoyer($collegeTemp['primeTtcAscendant_total']))?> nettoyer($collegeTemp['primeTtcAutre']))?> nettoyer($collegeTemp['primeTtcAutre_total']))?> nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatAdherent']))?> nettoyer($collegeTemp['primeNetteStatAdherent_total']))?> nettoyer($collegeTemp['primeNetteStatConjoint']))?> nettoyer($collegeTemp['primeNetteStatConjoint_total']))?> nettoyer($collegeTemp['primeNetteStatEnfant']))?> nettoyer($collegeTemp['primeNetteStatEnfant_total']))?> nettoyer($collegeTemp['primeNetteStatAscendant']))?> nettoyer($collegeTemp['primeNetteStatAscendant_total']))?> nettoyer($collegeTemp['primeNetteStatAutre']))?> nettoyer($collegeTemp['primeNetteStatAutre_total']))?> nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeAdherent']))?> nettoyer($collegeTemp['primeAdherent_total']))?> nettoyer($collegeTemp['primeConjoint']))?> nettoyer($collegeTemp['primeConjoint_total']))?> nettoyer($collegeTemp['primeEnfant']))?> nettoyer($collegeTemp['primeEnfant_total']))?> nettoyer($collegeTemp['primeAscendant']))?> nettoyer($collegeTemp['primeAscendant_total']))?> nettoyer($collegeTemp['primeAutre']))?> nettoyer($collegeTemp['primeAutre_total']))?> nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['surprimeOptionAdherent']))?> nettoyer($collegeTemp['surprimeOptionAdherent_total']))?> nettoyer($collegeTemp['surprimeOptionConjoint']))?> nettoyer($collegeTemp['surprimeOptionConjoint_total']))?> nettoyer($collegeTemp['surprimeOptionEnfant']))?> nettoyer($collegeTemp['surprimeOptionEnfant_total']))?> nettoyer($collegeTemp['surprimeOptionAscendant']))?> nettoyer($collegeTemp['surprimeOptionAscendant_total']))?> nettoyer($collegeTemp['surprimeOptionAutre']))?> nettoyer($collegeTemp['surprimeOptionAutre_total']))?> nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteAdherent']))?> nettoyer($collegeTemp['primeNetteAdherent_total']))?> nettoyer($collegeTemp['primeNetteConjoint']))?> nettoyer($collegeTemp['primeNetteConjoint_total']))?> nettoyer($collegeTemp['primeNetteEnfant']))?> nettoyer($collegeTemp['primeNetteEnfant_total']))?> nettoyer($collegeTemp['primeNetteAscendant']))?> nettoyer($collegeTemp['primeNetteAscendant_total']))?> nettoyer($collegeTemp['primeNetteAutre']))?> nettoyer($collegeTemp['primeNetteAutre_total']))?> nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionGestionAdherent']))?> nettoyer($collegeTemp['commissionGestionAdherent_total']))?> nettoyer($collegeTemp['commissionGestionConjoint']))?> nettoyer($collegeTemp['commissionGestionConjoint_total']))?> nettoyer($collegeTemp['commissionGestionEnfant']))?> nettoyer($collegeTemp['commissionGestionEnfant_total']))?> nettoyer($collegeTemp['commissionGestionAscendant']))?> nettoyer($collegeTemp['commissionGestionAscendant_total']))?> nettoyer($collegeTemp['commissionGestionAutre']))?> nettoyer($collegeTemp['commissionGestionAutre_total']))?> nettoyer($collegeTemp['commissionGestionCollege']))?>
      nettoyer($collegeTemp['commissionAdherent']))?> nettoyer($collegeTemp['commissionAdherent_total']))?> nettoyer($collegeTemp['commissionConjoint']))?> nettoyer($collegeTemp['commissionConjoint_total']))?> nettoyer($collegeTemp['commissionEnfant']))?> nettoyer($collegeTemp['commissionEnfant_total']))?> nettoyer($collegeTemp['commissionAscendant']))?> nettoyer($collegeTemp['commissionAscendant_total']))?> nettoyer($collegeTemp['commissionBrokerAutre']))?> nettoyer($collegeTemp['commissionBrokerAutre_total']))?> nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreAdherent']))?> nettoyer($collegeTemp['commissionAutreAdherent_total']))?> nettoyer($collegeTemp['commissionAutreConjoint']))?> nettoyer($collegeTemp['commissionAutreConjoint_total']))?> nettoyer($collegeTemp['commissionAutreEnfant']))?> nettoyer($collegeTemp['commissionAutreEnfant_total']))?> nettoyer($collegeTemp['commissionAutreAscendant']))?> nettoyer($collegeTemp['commissionAutreAscendant_total']))?> nettoyer($collegeTemp['commissionAutreAutre']))?> nettoyer($collegeTemp['commissionAutreAutre_total']))?> nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireAdherent']))?> nettoyer($collegeTemp['accessoireAdherent_total']))?> nettoyer($collegeTemp['accessoireConjoint']))?> nettoyer($collegeTemp['accessoireConjoint_total']))?> nettoyer($collegeTemp['accessoireEnfant']))?> nettoyer($collegeTemp['accessoireEnfant_total']))?> nettoyer($collegeTemp['accessoireAscendant']))?> nettoyer($collegeTemp['accessoireAscendant_total']))?> nettoyer($collegeTemp['accessoireAutre']))?> nettoyer($collegeTemp['accessoireAutre_total']))?> nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['accessoireGarantAdherent']))?> nettoyer($collegeTemp['accessoireGarantAdherent_total']))?> nettoyer($collegeTemp['accessoireGarantConjoint']))?> nettoyer($collegeTemp['accessoireGarantConjoint_total']))?> nettoyer($collegeTemp['accessoireGarantEnfant']))?> nettoyer($collegeTemp['accessoireGarantEnfant_total']))?> nettoyer($collegeTemp['accessoireGarantAscendant']))?> nettoyer($collegeTemp['accessoireGarantAscendant_total']))?> nettoyer($collegeTemp['accessoireGarantAutre']))?> nettoyer($collegeTemp['accessoireGarantAutre_total']))?> nettoyer($collegeTemp['accessoireGarantCollege']))?>
      nettoyer($collegeTemp['accessoireIntermediaireAdherent']))?> nettoyer($collegeTemp['accessoireIntermediaireAdherent_total']))?> nettoyer($collegeTemp['accessoireIntermediaireConjoint']))?> nettoyer($collegeTemp['accessoireIntermediaireConjoint_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAutreConjoint']))?> nettoyer($collegeTemp['accessoireIntermediaireAutreConjoint_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAscendant']))?> nettoyer($collegeTemp['accessoireIntermediaireAscendant_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAutre']))?> nettoyer($collegeTemp['accessoireIntermediaireAutre_total']))?> nettoyer($collegeTemp['accessoireIntermediaireCollege']))?>
      nettoyer($collegeTemp['primeHtAdherent']))?> nettoyer($collegeTemp['primeHtAdherent_total']))?> nettoyer($collegeTemp['primeHtConjoint']))?> nettoyer($collegeTemp['primeHtConjoint_total']))?> nettoyer($collegeTemp['primeHtEnfant']))?> nettoyer($collegeTemp['primeHtEnfant_total']))?> nettoyer($collegeTemp['primeHtAscendant']))?> nettoyer($collegeTemp['primeHtAscendant_total']))?> nettoyer($collegeTemp['primeHtAutre']))?> nettoyer($collegeTemp['primeHtAutre_total']))?> nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeAdherent']))?> nettoyer($collegeTemp['taxeAdherent_total']))?> nettoyer($collegeTemp['taxeConjoint']))?> nettoyer($collegeTemp['taxeConjoint_total']))?> nettoyer($collegeTemp['taxeEnfant']))?> nettoyer($collegeTemp['taxeEnfant_total']))?> nettoyer($collegeTemp['taxeAscendant']))?> nettoyer($collegeTemp['taxeAscendant_total']))?> nettoyer($collegeTemp['taxeAutre']))?> nettoyer($collegeTemp['taxeAutre_total']))?> nettoyer($collegeTemp['taxeCollege']))?>
      nettoyer($collegeTemp['fraisCarteAdherent']))?> nettoyer($collegeTemp['fraisCarteAdherent_total']))?> nettoyer($collegeTemp['fraisCarteConjoint']))?> nettoyer($collegeTemp['fraisCarteConjoint_total']))?> nettoyer($collegeTemp['fraisCarteEnfant']))?> nettoyer($collegeTemp['fraisCarteEnfant_total']))?> nettoyer($collegeTemp['fraisCarteAscendant']))?> nettoyer($collegeTemp['fraisCarteAscendant_total']))?> nettoyer($collegeTemp['fraisCarteAutre']))?> nettoyer($collegeTemp['fraisCarteAutre_total']))?> nettoyer($collegeTemp['fraisCarteCollege']))?>
      + +
      +
      +
      + + diff --git a/Societes/ric/Tarifs/Vue/Modifiercollege.php b/Societes/ric/Tarifs/Vue/Modifiercollege.php new file mode 100755 index 00000000..392462f7 --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Modifiercollege.php @@ -0,0 +1,310 @@ +titre = "INTER-SANTE - Modification collège"; + $_SESSION['imposerPlafond'] = $this->nettoyer($collegeTemp['imposerPlafond']); + + $controlPlafondAdherent = $_SESSION['controlPlafondAdherent']; + $controlPlafondBeneficiaire = $_SESSION['controlPlafondBeneficiaire']; + + $_SESSION['imposerPlafond'] = "1"; + + $idCollege = $this->nettoyer($collegeTemp['idCollege']); +?> + +
      + ".$idCollege ?> + + + + + + + + + + + +
      +
      + + + "0"):?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + +
      + + + +
      + + + +
      + + +
      + +
      +
      +
      + +
      +
      +
      + +
      +
      + +
      + + + +
      + + + + + + + + + + + +
      + + + + + +
      + + + + +
      + +
      +
      + + + "> +
      +
      + +
      + " disabled > + + + + + + + + + + + + nettoyer($prime_college['id']); + + $pop = ($this->nettoyer($prime_college['population'])=="0")? "1":$this->nettoyer($prime_college['population']); + ?> + + + + + + + + + +
      nettoyer($prime_college['lienparente']) ?> + + + + + +
      +
      + +
      + +
      +
      +
      + + diff --git a/Societes/ric/Tarifs/Vue/Modifiercolleged.php b/Societes/ric/Tarifs/Vue/Modifiercolleged.php new file mode 100755 index 00000000..87226df2 --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Modifiercolleged.php @@ -0,0 +1,1290 @@ +titre = "INTER-SANTE - Modification collège du devis"; + $_SESSION['imposerPlafond'] = $this->nettoyer($collegeTemp['imposerPlafond']); + $_SESSION['numeroOptionTarif'] = $this->nettoyer($collegeTemp['numeroOptionTarif']); + $idCollege = $this->nettoyer($collegeTemp['idCollege']); + $_SESSION['idCollege_d_C'] = $idCollege; + + + $controlPlafondAdherent = $_SESSION['controlPlafondAdherent']; + $controlPlafondBeneficiaire = $_SESSION['controlPlafondBeneficiaire']; + + $_SESSION['imposerPlafond'] = "1"; + + $garantieArchive = $this->nettoyer($collegeTemp['garantieArchive']); + + $codeBaseTarification = $this->nettoyer($collegeTemp['codeBaseTarification']); + +?> + +
      + +
      + + + + + ". _("Modifier College")." ID : ".$idCollege ?> + + "._("Consulter College")." ID : ".$idCollege ?> + + +
      + + + + + + + /> + + + + + + + + +
      +
      + + + "0"):?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Option + +
      + + + +
      Option + +
      + + + +
      + + + +
      + + +
      + +
      +
      +
      + +
      +
      +
      + +
      +
      + +
      + + + +
      + + + + + + + + + + + +
      + + + + + +
      + + + + +
      + +
      +
      + + + "> +
      +
      + +
      + " disabled > + + + + + + + + + + + + nettoyer($prime_college['id']); + + $pop = ($this->nettoyer($prime_college['population'])=="0")? "1":$this->nettoyer($prime_college['population']); + ?> + + + + + + + + + +
      nettoyer($prime_college['lienparente']) ?> + + + + + +
      +
      + +
      + +
      +
      + +
      + + + + + + + + + + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Option + +
      + + + +
      + + + +
      + + + +
      + + + + + +
      + + + +
      + + + + + + + + + + + +
      + + + + + +
      + + + + + +
      + + + "> + + "> + + "> +
      +
      + + + + + +
      + " disabled > + + + + + + + + + + + + + + + + + + + nettoyer($prime_college['id']); + + $pop = ($this->nettoyer($prime_college['population'])=="0")? "1":$this->nettoyer($prime_college['population']); + + $codeLienParente=$this->nettoyer($prime_college['codeLienParente']); + + $autoriserSupplement = ($this->nettoyer($prime_college['autoriserSupplement'])=="1")? "Oui" : "Non"; + + if (est_anglophone()){ + $autoriserSupplement = ($this->nettoyer($prime_college['autoriserSupplement'])=="1")? "Yes" : "No"; + } + + $ageMin = $this->nettoyer($prime_college['ageMinimum']); + $ageMax = $this->nettoyer($prime_college['ageMaximum']); + + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      nettoyer($prime_college['lienparente']) ?> + + + + + + + + + + + + + + + +
      + +
      +
      +
      + + + + + + + + + + + + + + + + nettoyer($prime_college['id']); + + $codeLienParente = $this->nettoyer($prime_college['codeLienParente']); + + $autoriserSupplement = ($this->nettoyer($prime_college['autoriserSupplement'])=="1")? "Oui" : "Non"; + + if (est_anglophone()){ + $autoriserSupplement = ($this->nettoyer($prime_college['autoriserSupplement'])=="1")? "Yes" : "No"; + } + + $ageMin = $this->nettoyer($prime_college['ageMinimum']); + $ageMax = $this->nettoyer($prime_college['ageMaximum']); + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      nettoyer($prime_college['lienparente']) ?> + + + + + + + + + + + +
      +
      +
      + + + + + + + + + + + + + + + + + + + nettoyer($v['id']); + + $libelle = $this->nettoyer($v['libelleTrancheAge']); + + if (est_anglophone()){ + $libelle = $this->nettoyer($v['libelleTrancheAgeEng']); + } + + $population = $this->nettoyer($v['population']); + + $primeTotal = $this->nettoyer($v['primeTotal']); + + $i++; + ?> + + + + + + + + + + +
      + + + + + +
      +
      +
      +
      + +
      + +
      + " disabled > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionGestionCollege']))?>
      nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['accessoireGarantCollege']))?>
      nettoyer($collegeTemp['accessoireIntermediaireCollege']))?>
      nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeCollege']))?>
      nettoyer($collegeTemp['fraisCarteCollege']))?>
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      nettoyer($collegeTemp['primeTtcAdherent']))?> nettoyer($collegeTemp['primeTtcAdherent_total']))?> nettoyer($collegeTemp['primeTtcConjoint']))?> nettoyer($collegeTemp['primeTtcConjoint_total']))?> nettoyer($collegeTemp['primeTtcEnfant']))?> nettoyer($collegeTemp['primeTtcEnfant_total']))?> nettoyer($collegeTemp['primeTtcAscendant']))?> nettoyer($collegeTemp['primeTtcAscendant_total']))?> nettoyer($collegeTemp['primeTtcAutre']))?> nettoyer($collegeTemp['primeTtcAutre_total']))?> nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatAdherent']))?> nettoyer($collegeTemp['primeNetteStatAdherent_total']))?> nettoyer($collegeTemp['primeNetteStatConjoint']))?> nettoyer($collegeTemp['primeNetteStatConjoint_total']))?> nettoyer($collegeTemp['primeNetteStatEnfant']))?> nettoyer($collegeTemp['primeNetteStatEnfant_total']))?> nettoyer($collegeTemp['primeNetteStatAscendant']))?> nettoyer($collegeTemp['primeNetteStatAscendant_total']))?> nettoyer($collegeTemp['primeNetteStatAutre']))?> nettoyer($collegeTemp['primeNetteStatAutre_total']))?> nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeAdherent']))?> nettoyer($collegeTemp['primeAdherent_total']))?> nettoyer($collegeTemp['primeConjoint']))?> nettoyer($collegeTemp['primeConjoint_total']))?> nettoyer($collegeTemp['primeEnfant']))?> nettoyer($collegeTemp['primeEnfant_total']))?> nettoyer($collegeTemp['primeAscendant']))?> nettoyer($collegeTemp['primeAscendant_total']))?> nettoyer($collegeTemp['primeAutre']))?> nettoyer($collegeTemp['primeAutre_total']))?> nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['surprimeOptionAdherent']))?> nettoyer($collegeTemp['surprimeOptionAdherent_total']))?> nettoyer($collegeTemp['surprimeOptionConjoint']))?> nettoyer($collegeTemp['surprimeOptionConjoint_total']))?> nettoyer($collegeTemp['surprimeOptionEnfant']))?> nettoyer($collegeTemp['surprimeOptionEnfant_total']))?> nettoyer($collegeTemp['surprimeOptionAscendant']))?> nettoyer($collegeTemp['surprimeOptionAscendant_total']))?> nettoyer($collegeTemp['surprimeOptionAutre']))?> nettoyer($collegeTemp['surprimeOptionAutre_total']))?> nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteAdherent']))?> nettoyer($collegeTemp['primeNetteAdherent_total']))?> nettoyer($collegeTemp['primeNetteConjoint']))?> nettoyer($collegeTemp['primeNetteConjoint_total']))?> nettoyer($collegeTemp['primeNetteEnfant']))?> nettoyer($collegeTemp['primeNetteEnfant_total']))?> nettoyer($collegeTemp['primeNetteAscendant']))?> nettoyer($collegeTemp['primeNetteAscendant_total']))?> nettoyer($collegeTemp['primeNetteAutre']))?> nettoyer($collegeTemp['primeNetteAutre_total']))?> nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionGestionAdherent']))?> nettoyer($collegeTemp['commissionGestionAdherent_total']))?> nettoyer($collegeTemp['commissionGestionConjoint']))?> nettoyer($collegeTemp['commissionGestionConjoint_total']))?> nettoyer($collegeTemp['commissionGestionEnfant']))?> nettoyer($collegeTemp['commissionGestionEnfant_total']))?> nettoyer($collegeTemp['commissionGestionAscendant']))?> nettoyer($collegeTemp['commissionGestionAscendant_total']))?> nettoyer($collegeTemp['commissionGestionAutre']))?> nettoyer($collegeTemp['commissionGestionAutre_total']))?> nettoyer($collegeTemp['commissionGestionCollege']))?>
      nettoyer($collegeTemp['commissionAdherent']))?> nettoyer($collegeTemp['commissionAdherent_total']))?> nettoyer($collegeTemp['commissionConjoint']))?> nettoyer($collegeTemp['commissionConjoint_total']))?> nettoyer($collegeTemp['commissionEnfant']))?> nettoyer($collegeTemp['commissionEnfant_total']))?> nettoyer($collegeTemp['commissionAscendant']))?> nettoyer($collegeTemp['commissionAscendant_total']))?> nettoyer($collegeTemp['commissionBrokerAutre']))?> nettoyer($collegeTemp['commissionBrokerAutre_total']))?> nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreAdherent']))?> nettoyer($collegeTemp['commissionAutreAdherent_total']))?> nettoyer($collegeTemp['commissionAutreConjoint']))?> nettoyer($collegeTemp['commissionAutreConjoint_total']))?> nettoyer($collegeTemp['commissionAutreEnfant']))?> nettoyer($collegeTemp['commissionAutreEnfant_total']))?> nettoyer($collegeTemp['commissionAutreAscendant']))?> nettoyer($collegeTemp['commissionAutreAscendant_total']))?> nettoyer($collegeTemp['commissionAutreAutre']))?> nettoyer($collegeTemp['commissionAutreAutre_total']))?> nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireAdherent']))?> nettoyer($collegeTemp['accessoireAdherent_total']))?> nettoyer($collegeTemp['accessoireConjoint']))?> nettoyer($collegeTemp['accessoireConjoint_total']))?> nettoyer($collegeTemp['accessoireEnfant']))?> nettoyer($collegeTemp['accessoireEnfant_total']))?> nettoyer($collegeTemp['accessoireAscendant']))?> nettoyer($collegeTemp['accessoireAscendant_total']))?> nettoyer($collegeTemp['accessoireAutre']))?> nettoyer($collegeTemp['accessoireAutre_total']))?> nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['accessoireGarantAdherent']))?> nettoyer($collegeTemp['accessoireGarantAdherent_total']))?> nettoyer($collegeTemp['accessoireGarantConjoint']))?> nettoyer($collegeTemp['accessoireGarantConjoint_total']))?> nettoyer($collegeTemp['accessoireGarantEnfant']))?> nettoyer($collegeTemp['accessoireGarantEnfant_total']))?> nettoyer($collegeTemp['accessoireGarantAscendant']))?> nettoyer($collegeTemp['accessoireGarantAscendant_total']))?> nettoyer($collegeTemp['accessoireGarantAutre']))?> nettoyer($collegeTemp['accessoireGarantAutre_total']))?> nettoyer($collegeTemp['accessoireGarantCollege']))?>
      nettoyer($collegeTemp['accessoireIntermediaireAdherent']))?> nettoyer($collegeTemp['accessoireIntermediaireAdherent_total']))?> nettoyer($collegeTemp['accessoireIntermediaireConjoint']))?> nettoyer($collegeTemp['accessoireIntermediaireConjoint_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAutreConjoint']))?> nettoyer($collegeTemp['accessoireIntermediaireAutreConjoint_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAscendant']))?> nettoyer($collegeTemp['accessoireIntermediaireAscendant_total']))?> nettoyer($collegeTemp['accessoireIntermediaireAutre']))?> nettoyer($collegeTemp['accessoireIntermediaireAutre_total']))?> nettoyer($collegeTemp['accessoireIntermediaireCollege']))?>
      nettoyer($collegeTemp['primeHtAdherent']))?> nettoyer($collegeTemp['primeHtAdherent_total']))?> nettoyer($collegeTemp['primeHtConjoint']))?> nettoyer($collegeTemp['primeHtConjoint_total']))?> nettoyer($collegeTemp['primeHtEnfant']))?> nettoyer($collegeTemp['primeHtEnfant_total']))?> nettoyer($collegeTemp['primeHtAscendant']))?> nettoyer($collegeTemp['primeHtAscendant_total']))?> nettoyer($collegeTemp['primeHtAutre']))?> nettoyer($collegeTemp['primeHtAutre_total']))?> nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeAdherent']))?> nettoyer($collegeTemp['taxeAdherent_total']))?> nettoyer($collegeTemp['taxeConjoint']))?> nettoyer($collegeTemp['taxeConjoint_total']))?> nettoyer($collegeTemp['taxeEnfant']))?> nettoyer($collegeTemp['taxeEnfant_total']))?> nettoyer($collegeTemp['taxeAscendant']))?> nettoyer($collegeTemp['taxeAscendant_total']))?> nettoyer($collegeTemp['taxeAutre']))?> nettoyer($collegeTemp['taxeAutre_total']))?> nettoyer($collegeTemp['taxeCollege']))?>
      nettoyer($collegeTemp['fraisCarteAdherent']))?> nettoyer($collegeTemp['fraisCarteAdherent_total']))?> nettoyer($collegeTemp['fraisCarteConjoint']))?> nettoyer($collegeTemp['fraisCarteConjoint_total']))?> nettoyer($collegeTemp['fraisCarteEnfant']))?> nettoyer($collegeTemp['fraisCarteEnfant_total']))?> nettoyer($collegeTemp['fraisCarteAscendant']))?> nettoyer($collegeTemp['fraisCarteAscendant_total']))?> nettoyer($collegeTemp['fraisCarteAutre']))?> nettoyer($collegeTemp['fraisCarteAutre_total']))?> nettoyer($collegeTemp['fraisCarteCollege']))?>
      + +
      +
      + + + + +
      \ No newline at end of file diff --git a/Societes/ric/Tarifs/Vue/Modifiercolleged_save.php b/Societes/ric/Tarifs/Vue/Modifiercolleged_save.php new file mode 100755 index 00000000..0cc77eab --- /dev/null +++ b/Societes/ric/Tarifs/Vue/Modifiercolleged_save.php @@ -0,0 +1,563 @@ +titre = "INTER-SANTE - Modification collège du devis"; + $_SESSION['imposerPlafond'] = $this->nettoyer($collegeTemp['imposerPlafond']); + $_SESSION['numeroOptionTarif'] = $this->nettoyer($collegeTemp['numeroOptionTarif']); + $idCollege = $this->nettoyer($collegeTemp['idCollege']); + $_SESSION['idCollege_d_C'] = $idCollege; + + + $controlPlafondAdherent = $_SESSION['controlPlafondAdherent']; + $controlPlafondBeneficiaire = $_SESSION['controlPlafondBeneficiaire']; + + $_SESSION['imposerPlafond'] = "1"; +?> + +
      + +
      + +
      + + + + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + +
      + + + + + + + + + + + + + + + + + + + + +
      Option + + + + + +
      + + + +
      + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + +
      + + + +
      + +
      +
      + + + + + + + + + + + + + + + + + nettoyer($prime_college['id']); + ?> + + + + + + + + + + + + + + + + + +
      nettoyer($prime_college['lienparente']) ?>nettoyer($prime_college['primeTarif'])) ?>nettoyer($prime_college['prime'])) ?> + + + +
      " ._("liste temporaire") ?>" > " ._("liste validée") ?>" >
      +
      + +
      + + + + + + + + + + + + nettoyer($garantiebase['id']); + $garantie = $this->nettoyer($garantiebase['garantie']); + $plafondModifiable = $this->nettoyer($garantiebase['plafondModifiable']); + if (est_anglophone()) + { + $garantie = $this->nettoyer($garantiebase['garantieEng']); + } + ?> + + + + + + + +
      nettoyer($garantiebase['plafond'])) ?> + + + + + +
      +
      + +
      +
      + +
      +
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      " >
      nettoyer($collegeTemp['primeTtcAdherent']))?> nettoyer($collegeTemp['primeTtcAdherent_total']))?> nettoyer($collegeTemp['primeTtcConjoint']))?> nettoyer($collegeTemp['primeTtcConjoint_total']))?> nettoyer($collegeTemp['primeTtcEnfant']))?> nettoyer($collegeTemp['primeTtcEnfant_total']))?> nettoyer($collegeTemp['primeTtcEnfantMajeur']))?> nettoyer($collegeTemp['primeTtcEnfantMajeur_total']))?> nettoyer($collegeTemp['primeTtcAutre']))?> nettoyer($collegeTemp['primeTtcAutre_total']))?> nettoyer($collegeTemp['primeTtcCollege']))?>
      nettoyer($collegeTemp['primeNetteStatAdherent']))?> nettoyer($collegeTemp['primeNetteStatAdherent_total']))?> nettoyer($collegeTemp['primeNetteStatConjoint']))?> nettoyer($collegeTemp['primeNetteStatConjoint_total']))?> nettoyer($collegeTemp['primeNetteStatEnfant']))?> nettoyer($collegeTemp['primeNetteStatEnfant_total']))?> nettoyer($collegeTemp['primeNetteStatEnfantMajeur']))?> nettoyer($collegeTemp['primeNetteStatEnfantMajeur_total']))?> nettoyer($collegeTemp['primeNetteStatAutre']))?> nettoyer($collegeTemp['primeNetteStatAutre_total']))?> nettoyer($collegeTemp['primeNetteStatCollege']))?>
      nettoyer($collegeTemp['primeAdherent']))?> nettoyer($collegeTemp['primeAdherent_total']))?> nettoyer($collegeTemp['primeConjoint']))?> nettoyer($collegeTemp['primeConjoint_total']))?> nettoyer($collegeTemp['primeEnfant']))?> nettoyer($collegeTemp['primeEnfant_total']))?> nettoyer($collegeTemp['primeEnfantMajeur']))?> nettoyer($collegeTemp['primeEnfantMajeur_total']))?> nettoyer($collegeTemp['primeAutre']))?> nettoyer($collegeTemp['primeAutre_total']))?> nettoyer($collegeTemp['primeCollege']))?>
      nettoyer($collegeTemp['primeCplFuneraireAdherent']))?> nettoyer($collegeTemp['primeCplFuneraireAdherent_total']))?> nettoyer($collegeTemp['primeCplFuneraireConjoint']))?> nettoyer($collegeTemp['primeCplFuneraireConjoint_total']))?> nettoyer($collegeTemp['primeCplFuneraireEnfant']))?> nettoyer($collegeTemp['primeCplFuneraireEnfant_total']))?> nettoyer($collegeTemp['primeCplFuneraireEnfantMajeur']))?> nettoyer($collegeTemp['primeCplFuneraireEnfantMajeur_total']))?> nettoyer($collegeTemp['primeCplFuneraireAutre']))?> nettoyer($collegeTemp['primeCplFuneraireAutre_total']))?> nettoyer($collegeTemp['primeCplFuneraireCollege']))?>
      nettoyer($collegeTemp['surprimeOptionAdherent']))?> nettoyer($collegeTemp['surprimeOptionAdherent_total']))?> nettoyer($collegeTemp['surprimeOptionConjoint']))?> nettoyer($collegeTemp['surprimeOptionConjoint_total']))?> nettoyer($collegeTemp['surprimeOptionEnfant']))?> nettoyer($collegeTemp['surprimeOptionEnfant_total']))?> nettoyer($collegeTemp['surprimeOptionEnfantMajeur']))?> nettoyer($collegeTemp['surprimeOptionEnfantMajeur_total']))?> nettoyer($collegeTemp['surprimeOptionAutre']))?> nettoyer($collegeTemp['surprimeOptionAutre_total']))?> nettoyer($collegeTemp['surprimeOptionCollege']))?>
      nettoyer($collegeTemp['primeNetteAdherent']))?> nettoyer($collegeTemp['primeNetteAdherent_total']))?> nettoyer($collegeTemp['primeNetteConjoint']))?> nettoyer($collegeTemp['primeNetteConjoint_total']))?> nettoyer($collegeTemp['primeNetteEnfant']))?> nettoyer($collegeTemp['primeNetteEnfant_total']))?> nettoyer($collegeTemp['primeNetteEnfantMajeur']))?> nettoyer($collegeTemp['primeNetteEnfantMajeur_total']))?> nettoyer($collegeTemp['primeNetteAutre']))?> nettoyer($collegeTemp['primeNetteAutre_total']))?> nettoyer($collegeTemp['primeNetteCollege']))?>
      nettoyer($collegeTemp['commissionAdherent']))?> nettoyer($collegeTemp['commissionAdherent_total']))?> nettoyer($collegeTemp['commissionConjoint']))?> nettoyer($collegeTemp['commissionConjoint_total']))?> nettoyer($collegeTemp['commissionEnfant']))?> nettoyer($collegeTemp['commissionEnfant_total']))?> nettoyer($collegeTemp['commissionEnfantMajeur']))?> nettoyer($collegeTemp['commissionEnfantMajeur_total']))?> nettoyer($collegeTemp['commissionBrokerAutre']))?> nettoyer($collegeTemp['commissionBrokerAutre_total']))?> nettoyer($collegeTemp['commissionCollege']))?>
      nettoyer($collegeTemp['commissionAutreAdherent']))?> nettoyer($collegeTemp['commissionAutreAdherent_total']))?> nettoyer($collegeTemp['commissionAutreConjoint']))?> nettoyer($collegeTemp['commissionAutreConjoint_total']))?> nettoyer($collegeTemp['commissionAutreEnfant']))?> nettoyer($collegeTemp['commissionAutreEnfant_total']))?> nettoyer($collegeTemp['commissionAutreEnfantMajeur']))?> nettoyer($collegeTemp['commissionAutreEnfantMajeur_total']))?> nettoyer($collegeTemp['commissionAutreAutre']))?> nettoyer($collegeTemp['commissionAutreAutre_total']))?> nettoyer($collegeTemp['commissionAutreCollege']))?>
      nettoyer($collegeTemp['accessoireAdherent']))?> nettoyer($collegeTemp['accessoireAdherent_total']))?> nettoyer($collegeTemp['accessoireConjoint']))?> nettoyer($collegeTemp['accessoireConjoint_total']))?> nettoyer($collegeTemp['accessoireEnfant']))?> nettoyer($collegeTemp['accessoireEnfant_total']))?> nettoyer($collegeTemp['accessoireEnfantMajeur']))?> nettoyer($collegeTemp['accessoireEnfantMajeur_total']))?> nettoyer($collegeTemp['accessoireAutre']))?> nettoyer($collegeTemp['accessoireAutre_total']))?> nettoyer($collegeTemp['accessoireCollege']))?>
      nettoyer($collegeTemp['primeHtAdherent']))?> nettoyer($collegeTemp['primeHtAdherent_total']))?> nettoyer($collegeTemp['primeHtConjoint']))?> nettoyer($collegeTemp['primeHtConjoint_total']))?> nettoyer($collegeTemp['primeHtEnfant']))?> nettoyer($collegeTemp['primeHtEnfant_total']))?> nettoyer($collegeTemp['primeHtEnfantMajeur']))?> nettoyer($collegeTemp['primeHtEnfantMajeur_total']))?> nettoyer($collegeTemp['primeHtAutre']))?> nettoyer($collegeTemp['primeHtAutre_total']))?> nettoyer($collegeTemp['primeHtCollege']))?>
      nettoyer($collegeTemp['taxeAdherent']))?> nettoyer($collegeTemp['taxeAdherent_total']))?> nettoyer($collegeTemp['taxeConjoint']))?> nettoyer($collegeTemp['taxeConjoint_total']))?> nettoyer($collegeTemp['taxeEnfant']))?> nettoyer($collegeTemp['taxeEnfant_total']))?> nettoyer($collegeTemp['taxeEnfantMajeur']))?> nettoyer($collegeTemp['taxeEnfantMajeur_total']))?> nettoyer($collegeTemp['taxeAutre']))?> nettoyer($collegeTemp['taxeAutre_total']))?> nettoyer($collegeTemp['taxeCollege']))?>
      + + + +
      +

      +
      + +
      + + + + + \ No newline at end of file diff --git a/Societes/ric/images/favicon.ico b/Societes/ric/images/favicon.ico new file mode 100755 index 00000000..acac4a8a Binary files /dev/null and b/Societes/ric/images/favicon.ico differ diff --git a/Societes/ric/images/logo.ico b/Societes/ric/images/logo.ico new file mode 100755 index 00000000..acac4a8a Binary files /dev/null and b/Societes/ric/images/logo.ico differ diff --git a/Societes/ric/images/logo_etat.png b/Societes/ric/images/logo_etat.png new file mode 100755 index 00000000..1b557d83 Binary files /dev/null and b/Societes/ric/images/logo_etat.png differ diff --git a/Societes/ric/images/tempon_medecin.jpg b/Societes/ric/images/tempon_medecin.jpg new file mode 100755 index 00000000..bc268d7b Binary files /dev/null and b/Societes/ric/images/tempon_medecin.jpg differ diff --git a/Societes/ric/jpgraph/Examples/accbarex1.php b/Societes/ric/jpgraph/Examples/accbarex1.php new file mode 100755 index 00000000..bf36ca21 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/accbarex1.php @@ -0,0 +1,41 @@ +cleartheme(); +$graph->SetScale("textlin"); + +$graph->SetShadow(); +$graph->img->SetMargin(40,30,20,40); + +// Create the bar plots +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$b1plot->value->Show(); +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); +$b2plot->value->Show(); + +// Create the grouped bar plot +$gbplot = new AccBarPlot(array($b1plot,$b2plot)); + +// ...and add it to the graPH +$graph->Add($gbplot); + +$graph->title->Set("Accumulated bar plots"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/accbarframeex01.php b/Societes/ric/jpgraph/Examples/accbarframeex01.php new file mode 100755 index 00000000..8b56876c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/accbarframeex01.php @@ -0,0 +1,31 @@ +SetScale('textlin'); +$graph->SetMarginColor('white'); + +// Setup title +$graph->title->Set('Acc bar with gradient'); + +// Create the first bar +$bplot = new BarPlot($datay1); +$bplot->SetFillGradient('AntiqueWhite2','AntiqueWhite4:0.8',GRAD_VERT); +$bplot->SetColor('darkred'); + +// Create the second bar +$bplot2 = new BarPlot($datay2); +$bplot2->SetFillGradient('olivedrab1','olivedrab4',GRAD_VERT); +$bplot2->SetColor('darkgreen'); + +// And join them in an accumulated bar +$accbplot = new AccBarPlot(array($bplot,$bplot2)); +$graph->Add($accbplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/accbarframeex02.php b/Societes/ric/jpgraph/Examples/accbarframeex02.php new file mode 100755 index 00000000..aa150dec --- /dev/null +++ b/Societes/ric/jpgraph/Examples/accbarframeex02.php @@ -0,0 +1,33 @@ +SetScale('textlin'); +$graph->SetMarginColor('white'); + +// Setup title +$graph->title->Set('Acc bar with gradient'); + +// Create the first bar +$bplot = new BarPlot($datay1); +$bplot->SetFillGradient('AntiqueWhite2','AntiqueWhite4:0.8',GRAD_VERT); +$bplot->SetColor('darkred'); + +// Create the second bar +$bplot2 = new BarPlot($datay2); +$bplot2->SetFillGradient('olivedrab1','olivedrab4',GRAD_VERT); +$bplot2->SetColor('darkgreen'); + +// And join them in an accumulated bar +$accbplot = new AccBarPlot(array($bplot,$bplot2)); +$accbplot->SetColor('red'); +$accbplot->SetWeight(1); +$graph->Add($accbplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/accbarframeex03.php b/Societes/ric/jpgraph/Examples/accbarframeex03.php new file mode 100755 index 00000000..37f3157b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/accbarframeex03.php @@ -0,0 +1,35 @@ +SetScale('textlin'); +$graph->SetMarginColor('white'); + +// Setup title +$graph->title->Set('Acc bar with gradient'); + +// Create the first bar +$bplot = new BarPlot($datay1); +$bplot->SetFillGradient('AntiqueWhite2','AntiqueWhite4:0.8',GRAD_VERT); +$bplot->SetColor('darkred'); +$bplot->SetWeight(0); + +// Create the second bar +$bplot2 = new BarPlot($datay2); +$bplot2->SetFillGradient('olivedrab1','olivedrab4',GRAD_VERT); +$bplot2->SetColor('darkgreen'); +$bplot2->SetWeight(0); + +// And join them in an accumulated bar +$accbplot = new AccBarPlot(array($bplot,$bplot2)); +$accbplot->SetColor('darkgray'); +$accbplot->SetWeight(1); +$graph->Add($accbplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/alphabarex1.php b/Societes/ric/jpgraph/Examples/alphabarex1.php new file mode 100755 index 00000000..1fcc713e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/alphabarex1.php @@ -0,0 +1,75 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->img->SetMargin(40,80,30,40); + +// Adjust the position of the legend box +$graph->legend->Pos(0.02,0.15); + +// Adjust the color for theshadow of the legend +$graph->legend->SetShadow('darkgray@0.5'); +$graph->legend->SetFillColor('lightblue@0.3'); + +// Get localised version of the month names +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +// Set a nice summer (in Stockholm) image +$graph->SetBackgroundImage('stship.jpg',BGIMG_COPY); + +// Set axis titles and fonts +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetColor('white'); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('white'); + +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('white'); + +//$graph->ygrid->Show(false); +$graph->ygrid->SetColor('white@0.5'); + +// Setup graph title +$graph->title->Set('Using alpha blending with a background'); +// Some extra margin (from the top) +$graph->title->SetMargin(3); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Create the three var series we will combine +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +// Setup the colors with 40% transparency (alpha channel) +$bplot1->SetFillColor('orange@0.4'); +$bplot2->SetFillColor('brown@0.4'); +$bplot3->SetFillColor('darkgreen@0.4'); + +// Setup legends +$bplot1->SetLegend('Label 1'); +$bplot2->SetLegend('Label 2'); +$bplot3->SetLegend('Label 3'); + +// Setup each bar with a shadow of 50% transparency +$bplot1->SetShadow('black@0.4'); +$bplot2->SetShadow('black@0.4'); +$bplot3->SetShadow('black@0.4'); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/antispamex01.php b/Societes/ric/jpgraph/Examples/antispamex01.php new file mode 100755 index 00000000..57fe6099 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/antispamex01.php @@ -0,0 +1,18 @@ +Rand(5); + +// Stroke random cahllenge +if( $spam->Stroke() === false ) { + die('Illegal or no data to plot'); +} + +?> + diff --git a/Societes/ric/jpgraph/Examples/aqua_example.php b/Societes/ric/jpgraph/Examples/aqua_example.php new file mode 100755 index 00000000..9c5a650b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/aqua_example.php @@ -0,0 +1,58 @@ + array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ), + 1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ), + 2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ), + 3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ), + 4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ), + 5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ), + 6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ), + 7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ), + 8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ), +); + + +// Create the graph. These two calls are always required +$graph = new Graph(400,300); + +$graph->SetScale("textlin"); +if ($theme) { + $graph->SetTheme(new $theme()); +} +$theme_class = new AquaTheme; +$graph->SetTheme($theme_class); + +$plot = array(); +// Create the bar plots +for ($i = 0; $i < 4; $i++) { + $plot[$i] = new BarPlot($data[$i]); + $plot[$i]->SetLegend('plot'.($i+1)); +} +//$acc1 = new AccBarPlot(array($plot[0], $plot[1])); +//$acc1->value->Show(); +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] )); + +for ($i = 4; $i < 8; $i++) { + $plot[$i] = new LinePlot($data[$i]); + $plot[$i]->SetLegend('plot'.$i); + $plot[$i]->value->Show(); +} + +$graph->Add($gbplot); +$graph->Add($plot[4]); + +$title = "AquaTheme Example"; +$title = mb_convert_encoding($title,'UTF-8'); +$graph->title->Set($title); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/axislabelbkgex01.php b/Societes/ric/jpgraph/Examples/axislabelbkgex01.php new file mode 100755 index 00000000..99c098c2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/axislabelbkgex01.php @@ -0,0 +1,35 @@ +SetScale('intlin'); +$graph->SetMargin(30,15,40,30); +$graph->SetMarginColor('white'); +$graph->SetFrame(true,'blue',3); + +$graph->title->Set('Label background'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->subtitle->SetColor('darkred'); +$graph->subtitle->Set('"LABELBKG_NONE"'); + +$graph->SetAxisLabelBackground(LABELBKG_NONE,'orange','red','lightblue','red'); + +// Use Ariel font +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->xgrid->Show(); + +// Create the plot line +$p1 = new LinePlot($ydata); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/axislabelbkgex02.php b/Societes/ric/jpgraph/Examples/axislabelbkgex02.php new file mode 100755 index 00000000..2b1740fd --- /dev/null +++ b/Societes/ric/jpgraph/Examples/axislabelbkgex02.php @@ -0,0 +1,37 @@ +SetScale('intlin'); +$graph->SetMargin(30,15,40,30); +$graph->SetMarginColor('white'); +$graph->SetFrame(true,'blue',3); + +$graph->title->Set('Label background'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->subtitle->SetColor('darkred'); +$graph->subtitle->Set('"LABELBKG_XAXIS"'); + +$graph->SetAxisLabelBackground(LABELBKG_XAXIS,'orange','red','lightblue','red'); + +// Use Ariel font +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->xgrid->Show(); + +// Create the plot line +$p1 = new LinePlot($ydata); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/axislabelbkgex03.php b/Societes/ric/jpgraph/Examples/axislabelbkgex03.php new file mode 100755 index 00000000..9e557112 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/axislabelbkgex03.php @@ -0,0 +1,37 @@ +SetScale('intlin'); +$graph->SetMargin(30,15,40,30); +$graph->SetMarginColor('white'); +$graph->SetFrame(true,'blue',3); + +$graph->title->Set('Label background'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->subtitle->SetColor('darkred'); +$graph->subtitle->Set('"LABELBKG_YAXIS"'); + +$graph->SetAxisLabelBackground(LABELBKG_YAXIS,'orange','red','lightblue','red'); + +// Use Ariel font +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->xgrid->Show(); + +// Create the plot line +$p1 = new LinePlot($ydata); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/axislabelbkgex04.php b/Societes/ric/jpgraph/Examples/axislabelbkgex04.php new file mode 100755 index 00000000..eb55a5ff --- /dev/null +++ b/Societes/ric/jpgraph/Examples/axislabelbkgex04.php @@ -0,0 +1,37 @@ +SetScale('intlin'); +$graph->SetMargin(30,15,40,30); +$graph->SetMarginColor('white'); +$graph->SetFrame(true,'blue',3); + +$graph->title->Set('Label background'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->subtitle->SetColor('darkred'); +$graph->subtitle->Set('"LABELBKG_YAXISFULL"'); + +$graph->SetAxisLabelBackground(LABELBKG_YAXISFULL,'orange','red','lightblue','red'); + +// Use Ariel font +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->xgrid->Show(); + +// Create the plot line +$p1 = new LinePlot($ydata); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/axislabelbkgex05.php b/Societes/ric/jpgraph/Examples/axislabelbkgex05.php new file mode 100755 index 00000000..29a04f07 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/axislabelbkgex05.php @@ -0,0 +1,37 @@ +SetScale('intlin'); +$graph->SetMargin(30,15,40,30); +$graph->SetMarginColor('white'); +$graph->SetFrame(true,'blue',3); + +$graph->title->Set('Label background'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->subtitle->SetColor('darkred'); +$graph->subtitle->Set('"LABELBKG_XAXISFULL"'); + +$graph->SetAxisLabelBackground(LABELBKG_XAXISFULL,'orange','red','lightblue','red'); + +// Use Ariel font +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->xgrid->Show(); + +// Create the plot line +$p1 = new LinePlot($ydata); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/axislabelbkgex06.php b/Societes/ric/jpgraph/Examples/axislabelbkgex06.php new file mode 100755 index 00000000..8ad0d812 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/axislabelbkgex06.php @@ -0,0 +1,37 @@ +SetScale('intlin'); +$graph->SetMargin(30,15,40,30); +$graph->SetMarginColor('white'); +$graph->SetFrame(true,'blue',3); + +$graph->title->Set('Label background'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->subtitle->SetColor('darkred'); +$graph->subtitle->Set('"LABELBKG_XYFULL"'); + +$graph->SetAxisLabelBackground(LABELBKG_XYFULL,'orange','red','lightblue','red'); + +// Use Ariel font +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->xgrid->Show(); + +// Create the plot line +$p1 = new LinePlot($ydata); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/axislabelbkgex07.php b/Societes/ric/jpgraph/Examples/axislabelbkgex07.php new file mode 100755 index 00000000..c23d07fc --- /dev/null +++ b/Societes/ric/jpgraph/Examples/axislabelbkgex07.php @@ -0,0 +1,37 @@ +SetScale('intlin'); +$graph->SetMargin(30,15,40,30); +$graph->SetMarginColor('white'); +$graph->SetFrame(true,'blue',3); + +$graph->title->Set('Label background'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->subtitle->SetColor('darkred'); +$graph->subtitle->Set('"LABELBKG_XY"'); + +$graph->SetAxisLabelBackground(LABELBKG_XY,'orange','red','lightblue','red'); + +// Use Ariel font +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->xgrid->Show(); + +// Create the plot line +$p1 = new LinePlot($ydata); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/background_type_ex0.php b/Societes/ric/jpgraph/Examples/background_type_ex0.php new file mode 100755 index 00000000..d8148425 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/background_type_ex0.php @@ -0,0 +1,39 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMargin(40,40,50,50); + +// Setup the grid and plotarea box +$graph->ygrid->SetLineStyle('dashed'); +$graph->ygrid->setColor('darkgray'); +$graph->SetBox(true); + +// Steup graph titles +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->Set('Using background image'); +$graph->subtitle->SetFont(FF_COURIER,FS_BOLD,11); +$graph->subtitle->Set('"BGIMG_COPY"'); +$graph->subtitle->SetColor('darkred'); + +// Add background with 25% mix +$graph->SetBackgroundImage('heat1.jpg',BGIMG_COPY); +$graph->SetBackgroundImageMix(25); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor("blue"); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/background_type_ex1.php b/Societes/ric/jpgraph/Examples/background_type_ex1.php new file mode 100755 index 00000000..3491ab51 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/background_type_ex1.php @@ -0,0 +1,39 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMargin(40,40,50,50); + +// Setup the grid and plotarea box +$graph->ygrid->SetLineStyle('dashed'); +$graph->ygrid->setColor('darkgray'); +$graph->SetBox(true); + +// Steup graph titles +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->Set('Using background image'); +$graph->subtitle->SetFont(FF_COURIER,FS_BOLD,11); +$graph->subtitle->Set('"BGIMG_CENTER"'); +$graph->subtitle->SetColor('darkred'); + +// Add background with 25% mix +$graph->SetBackgroundImage('heat1.jpg',BGIMG_CENTER); +$graph->SetBackgroundImageMix(25); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor("blue"); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/background_type_ex2.php b/Societes/ric/jpgraph/Examples/background_type_ex2.php new file mode 100755 index 00000000..9ccdf08f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/background_type_ex2.php @@ -0,0 +1,39 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMargin(40,40,50,50); + +// Setup the grid and plotarea box +$graph->ygrid->SetLineStyle('dashed'); +$graph->ygrid->setColor('darkgray'); +$graph->SetBox(true); + +// Steup graph titles +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->Set('Using background image'); +$graph->subtitle->SetFont(FF_COURIER,FS_BOLD,11); +$graph->subtitle->Set('"BGIMG_FREE"'); +$graph->subtitle->SetColor('darkred'); + +// Add background with 25% mix +$graph->SetBackgroundImage('heat1.jpg',BGIMG_FREE); +$graph->SetBackgroundImageMix(25); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor("blue"); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/background_type_ex3.php b/Societes/ric/jpgraph/Examples/background_type_ex3.php new file mode 100755 index 00000000..f0e5f592 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/background_type_ex3.php @@ -0,0 +1,39 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMargin(40,40,50,50); + +// Setup the grid and plotarea box +$graph->ygrid->SetLineStyle('dashed'); +$graph->ygrid->setColor('darkgray'); +$graph->SetBox(true); + +// Steup graph titles +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->Set('Using background image'); +$graph->subtitle->SetFont(FF_COURIER,FS_BOLD,11); +$graph->subtitle->Set('"BGIMG_FILLPLOT"'); +$graph->subtitle->SetColor('darkred'); + +// Add background with 25% mix +$graph->SetBackgroundImage('heat1.jpg',BGIMG_FILLPLOT); +$graph->SetBackgroundImageMix(25); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor("blue"); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/background_type_ex4.php b/Societes/ric/jpgraph/Examples/background_type_ex4.php new file mode 100755 index 00000000..cfca2f9c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/background_type_ex4.php @@ -0,0 +1,39 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMargin(40,40,50,50); + +// Setup the grid and plotarea box +$graph->ygrid->SetLineStyle('dashed'); +$graph->ygrid->setColor('darkgray'); +$graph->SetBox(true); + +// Steup graph titles +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->Set('Using background image'); +$graph->subtitle->SetFont(FF_COURIER,FS_BOLD,11); +$graph->subtitle->Set('"BGIMG_FILLFRAME"'); +$graph->subtitle->SetColor('darkred'); + +// Add background with 25% mix +$graph->SetBackgroundImage('heat1.jpg',BGIMG_FILLFRAME); +$graph->SetBackgroundImageMix(25); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor("blue"); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/backgroundex01.php b/Societes/ric/jpgraph/Examples/backgroundex01.php new file mode 100755 index 00000000..1e0525f1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/backgroundex01.php @@ -0,0 +1,50 @@ +clearTheme(); +$graph->img->SetMargin(40,180,40,40); +$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLPLOT); + +$graph->img->SetAntiAliasing("white"); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Background image"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Slightly adjust the legend from it's default position in the +// top right corner. +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Create the first line +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$p1->SetLegend("Triumph Tiger -98"); +$graph->Add($p1); + +// ... and the second +$p2 = new LinePlot($data2y); +$p2->mark->SetType(MARK_STAR); +$p2->mark->SetFillColor("red"); +$p2->mark->SetWidth(4); +$p2->SetColor("red"); +$p2->SetCenter(); +$p2->SetLegend("New tiger -99"); +$graph->Add($p2); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/backgroundex02.php b/Societes/ric/jpgraph/Examples/backgroundex02.php new file mode 100755 index 00000000..f7cef691 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/backgroundex02.php @@ -0,0 +1,50 @@ +clearTheme(); +$graph->img->SetMargin(40,180,40,40); +$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME); + +$graph->img->SetAntiAliasing(); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Background image"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Slightly adjust the legend from it's default position in the +// top right corner. +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Create the first line +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$p1->SetLegend("Triumph Tiger -98"); +$graph->Add($p1); + +// ... and the second +$p2 = new LinePlot($data2y); +$p2->mark->SetType(MARK_STAR); +$p2->mark->SetFillColor("red"); +$p2->mark->SetWidth(4); +$p2->SetColor("red"); +$p2->SetCenter(); +$p2->SetLegend("New tiger -99"); +$graph->Add($p2); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/backgroundex03.php b/Societes/ric/jpgraph/Examples/backgroundex03.php new file mode 100755 index 00000000..1d490d35 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/backgroundex03.php @@ -0,0 +1,50 @@ +clearTheme(); +$graph->img->SetMargin(40,180,40,40); +$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_COPY); + +$graph->img->SetAntiAliasing("white"); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Background image"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Slightly adjust the legend from it's default position in the +// top right corner. +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Create the first line +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$p1->SetLegend("Triumph Tiger -98"); +$graph->Add($p1); + +// ... and the second +$p2 = new LinePlot($data2y); +$p2->mark->SetType(MARK_STAR); +$p2->mark->SetFillColor("red"); +$p2->mark->SetWidth(4); +$p2->SetColor("red"); +$p2->SetCenter(); +$p2->SetLegend("New tiger -99"); +$graph->Add($p2); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/balloonex1.php b/Societes/ric/jpgraph/Examples/balloonex1.php new file mode 100755 index 00000000..26e82ead --- /dev/null +++ b/Societes/ric/jpgraph/Examples/balloonex1.php @@ -0,0 +1,55 @@ +clearTheme(); +$graph->SetScale("linlin"); +$graph->img->SetMargin(40,100,40,40); +$graph->SetShadow(); +$graph->title->Set("Example of ballon scatter plot"); +// Use a lot of grace to get large scales +$graph->yaxis->scale->SetGrace(50,10); + +// Make sure X-axis as at the bottom of the graph +$graph->xaxis->SetPos('min'); + +// Create the scatter plot +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); + +// Uncomment the following two lines to display the values +$sp1->value->Show(); +$sp1->value->SetFont(FF_FONT1,FS_BOLD); + +// Specify the callback +$sp1->mark->SetCallback("FCallback"); + +// Setup the legend for plot +$sp1->SetLegend('Year 2002'); + +// Add the scatter plot to the graph +$graph->Add($sp1); + +// ... and send to browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/balloonex2.php b/Societes/ric/jpgraph/Examples/balloonex2.php new file mode 100755 index 00000000..111db130 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/balloonex2.php @@ -0,0 +1,80 @@ +clearTheme(); +$graph->SetScale("intlin"); +$graph->SetMargin(40,40,40,40); +$graph->SetMarginColor('wheat'); + +$graph->title->Set("Example of ballon scatter plot with X,Y callback"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->SetMargin(10); + +// Use a lot of grace to get large scales since the ballon have +// size and we don't want them to collide with the X-axis +$graph->yaxis->scale->SetGrace(50,10); +$graph->xaxis->scale->SetGrace(50,10); + +// Make sure X-axis as at the bottom of the graph and not at the default Y=0 +$graph->xaxis->SetPos('min'); + +// Set X-scale to start at 0 +$graph->xscale->SetAutoMin(0); + +// Create the scatter plot +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); + +// Uncomment the following two lines to display the values +$sp1->value->Show(); +$sp1->value->SetFont(FF_FONT1,FS_BOLD); + +// Specify the callback +$sp1->mark->SetCallbackYX("FCallback"); + +// Add the scatter plot to the graph +$graph->Add($sp1); + +// ... and send to browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/bar2scalesex1.php b/Societes/ric/jpgraph/Examples/bar2scalesex1.php new file mode 100755 index 00000000..e1f42190 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bar2scalesex1.php @@ -0,0 +1,49 @@ +clearTheme(); +$graph->title->Set('Example with 2 scale bars'); + +// Setup Y and Y2 scales with some "grace" +$graph->SetScale("textlin"); +$graph->SetY2Scale("lin"); +$graph->yaxis->scale->SetGrace(30); +$graph->y2axis->scale->SetGrace(30); + +//$graph->ygrid->Show(true,true); +$graph->ygrid->SetColor('gray','lightgray@0.5'); + +// Setup graph colors +$graph->SetMarginColor('white'); +$graph->y2axis->SetColor('darkred'); + + +// Create the "dummy" 0 bplot +$bplotzero = new BarPlot($datazero); + +// Create the "Y" axis group +$ybplot1 = new BarPlot($datay); +$ybplot1->value->Show(); +$ybplot = new GroupBarPlot(array($ybplot1,$bplotzero)); + +// Create the "Y2" axis group +$ybplot2 = new BarPlot($datay2); +$ybplot2->value->Show(); +$ybplot2->value->SetColor('darkred'); +$ybplot2->SetFillColor('darkred'); +$y2bplot = new GroupBarPlot(array($bplotzero,$ybplot2)); + +// Add the grouped bar plots to the graph +$graph->Add($ybplot); +$graph->AddY2($y2bplot); + +// .. and finally stroke the image back to browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bar_csimex1.php b/Societes/ric/jpgraph/Examples/bar_csimex1.php new file mode 100755 index 00000000..6ae7dbfe --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bar_csimex1.php @@ -0,0 +1,52 @@ +SetScale("textlin"); +$graph->img->SetMargin(60,30,20,40); +$graph->yaxis->SetTitleMargin(45); +$graph->yaxis->scale->SetGrace(30); +$graph->SetShadow(); + +// Turn the tickmarks +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Create targets for the image maps. One for each column +$targ=array("bar_clsmex1.php#1","bar_clsmex1.php#2","bar_clsmex1.php#3","bar_clsmex1.php#4","bar_clsmex1.php#5","bar_clsmex1.php#6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$bplot->SetCSIMTargets($targ,$alts); +$bplot->SetFillColor("orange"); + +// Use a shadow on the bar graphs (just use the default settings) +$bplot->SetShadow(); +$bplot->value->SetFormat(" $ %2.1f",70); +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$bplot->value->SetColor("blue"); +$bplot->value->Show(); + +$graph->Add($bplot); + +$graph->title->Set("Image maps barex1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + + +?> diff --git a/Societes/ric/jpgraph/Examples/bar_csimex2.php b/Societes/ric/jpgraph/Examples/bar_csimex2.php new file mode 100755 index 00000000..5a0cbce8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bar_csimex2.php @@ -0,0 +1,51 @@ +SetScale("textlin"); +$graph->img->SetMargin(40,30,20,40); +$graph->SetShadow(); + +// Create the bar plots +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$targ=array("bar_clsmex2.php#1","bar_clsmex2.php#2","bar_clsmex2.php#3", +"bar_clsmex2.php#4","bar_clsmex2.php#5","bar_clsmex2.php#6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$b1plot->SetCSIMTargets($targ,$alts); + +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); +$targ=array("bar_clsmex2.php#7","bar_clsmex2.php#8","bar_clsmex2.php#9", +"bar_clsmex2.php#10","bar_clsmex2.php#11","bar_clsmex2.php#12"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$b2plot->SetCSIMTargets($targ,$alts); + +// Create the grouped bar plot +$abplot = new AccBarPlot(array($b1plot,$b2plot)); + +$abplot->SetShadow(); +$abplot->value->Show(); + +// ...and add it to the graPH +$graph->Add($abplot); + +$graph->title->Set("Image map barex2"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> diff --git a/Societes/ric/jpgraph/Examples/bar_csimex3.php b/Societes/ric/jpgraph/Examples/bar_csimex3.php new file mode 100755 index 00000000..6640319d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bar_csimex3.php @@ -0,0 +1,88 @@ +SetAngle(90); +$graph->SetScale("textlin"); + +// The negative margins are necessary since we +// have rotated the image 90 degress and shifted the +// meaning of width, and height. This means that the +// left and right margins now becomes top and bottom +// calculated with the image width and not the height. +$graph->img->SetMargin(-80,-80,210,210); + +$graph->SetMarginColor('white'); + +// Setup title for graph +$graph->title->Set('Horizontal bar graph'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->subtitle->Set("With image map\nNote: The URL just points back to this image"); + +// Setup X-axis. +$graph->xaxis->SetTitle("X-title",'center'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetAngle(90); +$graph->xaxis->SetTitleMargin(30); +$graph->xaxis->SetLabelMargin(15); +$graph->xaxis->SetLabelAlign('right','center'); + +// Setup Y-axis + +// First we want it at the bottom, i.e. the 'max' value of the +// x-axis +$graph->yaxis->SetPos('max'); + +// Arrange the title +$graph->yaxis->SetTitle("Turnaround (mkr)",'center'); +$graph->yaxis->SetTitleSide(SIDE_RIGHT); +$graph->yaxis->title->SetFont(FF_FONT2,FS_BOLD); +$graph->yaxis->title->SetAngle(0); +$graph->yaxis->title->Align('center','top'); +$graph->yaxis->SetTitleMargin(30); + +// Arrange the labels +$graph->yaxis->SetLabelSide(SIDE_RIGHT); +$graph->yaxis->SetLabelAlign('center','top'); + +// Create the bar plots with image maps +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$targ=array("bar_clsmex2.php#1","bar_clsmex2.php#2","bar_clsmex2.php#3", + "bar_clsmex2.php#4","bar_clsmex2.php#5","bar_clsmex2.php#6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$b1plot->SetCSIMTargets($targ,$alts); + +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); +$targ=array("bar_clsmex2.php#7","bar_clsmex2.php#8","bar_clsmex2.php#9", + "bar_clsmex2.php#10","bar_clsmex2.php#11","bar_clsmex2.php#12"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$b2plot->SetCSIMTargets($targ,$alts); + +// Create the accumulated bar plot +$abplot = new AccBarPlot(array($b1plot,$b2plot)); +$abplot->SetShadow(); + +// We want to display the value of each bar at the top +$abplot->value->Show(); +$abplot->value->SetFont(FF_FONT1,FS_NORMAL); +$abplot->value->SetAlign('left','center'); +$abplot->value->SetColor("black","darkred"); +$abplot->value->SetFormat('%.1f mkr'); + +// ...and add it to the graph +$graph->Add($abplot); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> diff --git a/Societes/ric/jpgraph/Examples/barcode_errhandling_ex0.php b/Societes/ric/jpgraph/Examples/barcode_errhandling_ex0.php new file mode 100755 index 00000000..4f5b5393 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barcode_errhandling_ex0.php @@ -0,0 +1,16 @@ +Stroke('abc123'); +} catch( JpGraphException $e ) { + //echo 'Error: ' . $e->getMessage()."\n"; + JpGraphError::Raise($e->getMessage()); +} + +?> diff --git a/Societes/ric/jpgraph/Examples/barcode_ex0.php b/Societes/ric/jpgraph/Examples/barcode_ex0.php new file mode 100755 index 00000000..021b5c7c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barcode_ex0.php @@ -0,0 +1,11 @@ +Stroke('ABC123'); + +?> diff --git a/Societes/ric/jpgraph/Examples/barcode_ex1.php b/Societes/ric/jpgraph/Examples/barcode_ex1.php new file mode 100755 index 00000000..df7653b5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barcode_ex1.php @@ -0,0 +1,14 @@ +SetModuleWidth(2); +$e->SetHeight(20); +echo nl2br($e->Stroke('3125134772')); + + +?> diff --git a/Societes/ric/jpgraph/Examples/barcode_ex2.php b/Societes/ric/jpgraph/Examples/barcode_ex2.php new file mode 100755 index 00000000..8fce58e6 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barcode_ex2.php @@ -0,0 +1,14 @@ +SetModuleWidth(2); +$e->SetHeight(70); +$ps = $e->Stroke('3125134772'); +echo nl2br(htmlspecialchars($ps)); + +?> diff --git a/Societes/ric/jpgraph/Examples/barcode_ex3.php b/Societes/ric/jpgraph/Examples/barcode_ex3.php new file mode 100755 index 00000000..a63f4ad4 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barcode_ex3.php @@ -0,0 +1,17 @@ +"; +$encoder = BarcodeFactory::Create(ENCODING_CODEI25); +$e = BackendFactory::Create(BACKEND_PS,$encoder); +$e->SetModuleWidth(2); +$e->SetHeight(70); +$e->SetEPS(); +$ps = $e->Stroke('3125134772'); +echo nl2br(htmlspecialchars($ps)); + + +?> diff --git a/Societes/ric/jpgraph/Examples/barcode_ex4.php b/Societes/ric/jpgraph/Examples/barcode_ex4.php new file mode 100755 index 00000000..721b56ba --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barcode_ex4.php @@ -0,0 +1,12 @@ +SetModuleWidth(2); +$e->Stroke('1234'); + +?> diff --git a/Societes/ric/jpgraph/Examples/barcode_usps_example.php b/Societes/ric/jpgraph/Examples/barcode_usps_example.php new file mode 100755 index 00000000..a1212f27 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barcode_usps_example.php @@ -0,0 +1,74 @@ +_USPS_chkd(substr($data,8)); + $data = '420'. $aZIP . '~191' . $aServiceType . $aDUNS . $aSeqNbr; + return $data . $cd; + } + + // Get type 2 of confirmation code (without ZIP) + function GetPIC($aServiceType,$aDUNS,$aSeqNbr) { + // Convert to USPS format with AI=91 + $data = '91' . $aServiceType . $aDUNS . $aSeqNbr; + $cd = $this->_USPS_chkd($data); + return $data . $cd; + } + +} + +$usps = new USPS_Confirmation(); +$zip = '92663'; +$service = '21'; +$DUNS = '805213907'; +$seqnr = '04508735'; +$data = $usps->GetPICwithZIP($zip,$service,$DUNS,$seqnr); +//$data = $usps->GetPIC('01','123456789','00000001'); + +$encoder = BarcodeFactory::Create(ENCODING_EAN128); +$e = BackendFactory::Create(BACKEND_IMAGE,$encoder); +$e->SetModuleWidth(2); +$e->SetFont(FF_ARIAL,FS_NORMAL,14); +$e->Stroke($data); + +?> diff --git a/Societes/ric/jpgraph/Examples/barcsim_details.php b/Societes/ric/jpgraph/Examples/barcsim_details.php new file mode 100755 index 00000000..68fb2166 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barcsim_details.php @@ -0,0 +1,10 @@ +'.basename(__FILE__).'
      .'; +} +else { + echo 'Some details on bar with id='.$_GET['id']; +} + +?> diff --git a/Societes/ric/jpgraph/Examples/barcsim_popup.php b/Societes/ric/jpgraph/Examples/barcsim_popup.php new file mode 100755 index 00000000..57864584 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barcsim_popup.php @@ -0,0 +1,41 @@ +SetScale("textlin"); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Create targets for the image maps so that the details are opened in a separate window +$fmtStr = "javascript:window.open('barcsim_details.php?id=%d','_new','width=500,height=300');void(0)"; +$n = count($datay); +$targ=array(); +$alts=array(); +for($i=0; $i < $n; ++$i) { + $targ[$i] = sprintf($fmtStr,$i+1); + $alts[$i] = 'val=%d'; + // Note: The format placeholder val=%d will be replaced by the actual value in the ouput HTML by the + // library so that when the user hoovers the mouse over the bar the actual numerical value of the bar + // will be dísplayed +} +$bplot->SetCSIMTargets($targ,$alts); + +// Add plot to graph +$graph->Add($bplot); + +// Setup the title, also wih a CSIM area +$graph->title->Set("CSIM with popup windows"); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +// Assume we can give more details on the graph +$graph->title->SetCSIMTarget(sprintf($fmtStr,-1),'Title for Bar'); + +// Send back the HTML page which will call this script again to retrieve the image. +$graph->StrokeCSIM(); + +?> diff --git a/Societes/ric/jpgraph/Examples/barformatcallbackex1.php b/Societes/ric/jpgraph/Examples/barformatcallbackex1.php new file mode 100755 index 00000000..f49a9e28 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barformatcallbackex1.php @@ -0,0 +1,30 @@ +SetScale("textlin"); + +// Create a bar plots +$bar1 = new BarPlot($data); + +// Setup the callback function +$bar1->value->SetFormatCallback("cbFmtPercentage"); +$bar1->value->Show(); + +// Add the plot to the graph +$graph->Add($bar1); + +// .. and send the graph back to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradex1.php b/Societes/ric/jpgraph/Examples/bargradex1.php new file mode 100755 index 00000000..f8543f5e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradex1.php @@ -0,0 +1,48 @@ +clearTheme(); +$graph->img->SetMargin(60,20,35,75); +$graph->SetScale("textlin"); +$graph->SetMarginColor("lightblue:1.1"); +$graph->SetShadow(); + +// Set up the title for the graph +$graph->title->Set("Bar gradient with left reflection"); +$graph->title->SetMargin(8); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor("darkred"); + +// Setup font for axis +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10); + +// Show 0 label on Y-axis (default is not to show) +$graph->yscale->ticks->SupressZeroLabel(false); + +// Setup X-axis labels +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetLabelAngle(50); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy:0.9","navy:1.85",GRAD_LEFT_REFLECTION); + +// Set color for the frame of each bar +$bplot->SetColor("white"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradex2.php b/Societes/ric/jpgraph/Examples/bargradex2.php new file mode 100755 index 00000000..4f6203ed --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradex2.php @@ -0,0 +1,49 @@ +clearTheme(); +$graph->img->SetMargin(60,20,30,50); +$graph->SetScale("textlin"); +$graph->SetMarginColor("silver"); +$graph->SetShadow(); + +// Set up the title for the graph +$graph->title->Set("Example negative bars"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,18); +$graph->title->SetColor("darkred"); + +// Setup font for axis +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,12); +$graph->xaxis->SetColor("black","red"); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,11); + +// Show 0 label on Y-axis (default is not to show) +$graph->yscale->ticks->SupressZeroLabel(false); + +// Setup X-axis labels +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetLabelAngle(50); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","steelblue",GRAD_MIDVER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradex3.php b/Societes/ric/jpgraph/Examples/bargradex3.php new file mode 100755 index 00000000..f496c793 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradex3.php @@ -0,0 +1,51 @@ +clearTheme(); +$graph->img->SetMargin(60,20,30,50); +$graph->SetScale("textlin"); +$graph->SetMarginColor("silver"); +$graph->SetShadow(); + +// Set up the title for the graph +$graph->title->Set("Example negative bars"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,16); +$graph->title->SetColor("darkred"); + +// Setup font for axis +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10); + +// Show 0 label on Y-axis (default is not to show) +$graph->yscale->ticks->SupressZeroLabel(false); + +// Setup X-axis labels +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetLabelAngle(50); + +// Set X-axis at the minimum value of Y-axis (default will be at 0) +$graph->xaxis->SetPos("min"); // "min" will position the x-axis at the minimum value of the Y-axis + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","steelblue",GRAD_MIDVER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradex4.php b/Societes/ric/jpgraph/Examples/bargradex4.php new file mode 100755 index 00000000..7ea199ad --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradex4.php @@ -0,0 +1,48 @@ +clearTheme(); +$graph->img->SetMargin(60,30,30,40); +$graph->SetScale("textlin"); +$graph->SetMarginColor("teal"); +$graph->SetShadow(); + +// Set up the title for the graph +$graph->title->Set("Bargraph with small variations"); +$graph->title->SetColor("white"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); + +// Setup color for axis and labels +$graph->xaxis->SetColor("black","white"); +$graph->yaxis->SetColor("black","white"); + +// Setup font for axis +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10); + +// Setup X-axis title (color & font) +$graph->xaxis->title->Set("X-axis"); +$graph->xaxis->title->SetColor("white"); +$graph->xaxis->title->SetFont(FF_VERDANA,FS_BOLD,10); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$tcol=array(100,100,255); +$fcol=array(255,100,100); +$bplot->SetFillGradient($fcol,$tcol,GRAD_HOR); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradex5.php b/Societes/ric/jpgraph/Examples/bargradex5.php new file mode 100755 index 00000000..a61d96b8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradex5.php @@ -0,0 +1,53 @@ +clearTheme(); +$graph->img->SetMargin(60,30,30,40); +$graph->SetScale("textlin"); +$graph->SetMarginColor("teal"); +$graph->SetShadow(); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// This is how you make the bar graph start from something other than 0 +$bplot->SetYMin(0.302); + +// Setup color for gradient fill style +$tcol=array(100,100,255); +$fcol=array(255,100,100); +$bplot->SetFillGradient($fcol,$tcol,GRAD_HOR); +$bplot->SetFillColor("orange"); +$graph->Add($bplot); + +// Set up the title for the graph +$graph->title->Set("Bargraph which doesn't start from y=0"); +$graph->title->SetColor("yellow"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); + +// Setup color for axis and labels +$graph->xaxis->SetColor("black","white"); +$graph->yaxis->SetColor("black","white"); + +// Setup font for axis +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10); + +// Setup X-axis title (color & font) +$graph->xaxis->title->Set("X-axis"); +$graph->xaxis->title->SetColor("white"); +$graph->xaxis->title->SetFont(FF_VERDANA,FS_BOLD,10); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradex6.php b/Societes/ric/jpgraph/Examples/bargradex6.php new file mode 100755 index 00000000..f0d09b3a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradex6.php @@ -0,0 +1,52 @@ +clearTheme(); +$graph->img->SetMargin(60,150,30,50); +$graph->SetScale("textlin"); +$graph->SetMarginColor("silver"); +$graph->SetShadow(); + +// Set up the title for the graph +$graph->title->Set("Example negative bars"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,16); +$graph->title->SetColor("darkred"); + +// Setup font for axis +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10); + +// Show 0 label on Y-axis (default is not to show) +$graph->yscale->ticks->SupressZeroLabel(false); + +// Setup X-axis labels +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetLabelAngle(50); + +// Set X-axis at the minimum value of Y-axis (default will be at 0) +$graph->xaxis->SetPos("min"); // "min" will position the x-axis at the minimum value of the Y-axis + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); +$bplot->SetLegend("Result 1999","blue"); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","steelblue",GRAD_MIDVER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradsmallex1.php b/Societes/ric/jpgraph/Examples/bargradsmallex1.php new file mode 100755 index 00000000..83908a97 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradsmallex1.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_MIDVER"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_MIDVER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradsmallex2.php b/Societes/ric/jpgraph/Examples/bargradsmallex2.php new file mode 100755 index 00000000..1aa1037a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradsmallex2.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_MIDHOR"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_MIDHOR); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradsmallex3.php b/Societes/ric/jpgraph/Examples/bargradsmallex3.php new file mode 100755 index 00000000..c5d31c13 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradsmallex3.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_HOR"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_HOR); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradsmallex4.php b/Societes/ric/jpgraph/Examples/bargradsmallex4.php new file mode 100755 index 00000000..030942d5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradsmallex4.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_VER"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_VER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradsmallex5.php b/Societes/ric/jpgraph/Examples/bargradsmallex5.php new file mode 100755 index 00000000..8028269f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradsmallex5.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_WIDE_MIDVER"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_WIDE_MIDVER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradsmallex6.php b/Societes/ric/jpgraph/Examples/bargradsmallex6.php new file mode 100755 index 00000000..9b1e45b8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradsmallex6.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_WIDE_MIDHOR"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_WIDE_MIDHOR); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradsmallex7.php b/Societes/ric/jpgraph/Examples/bargradsmallex7.php new file mode 100755 index 00000000..5f011aa9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradsmallex7.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_CENTER"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_CENTER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bargradsmallex8.php b/Societes/ric/jpgraph/Examples/bargradsmallex8.php new file mode 100755 index 00000000..f95cb49a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bargradsmallex8.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_RAISED_PANEL"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient('navy','orange',GRAD_RAISED_PANEL); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/barimgex1.php b/Societes/ric/jpgraph/Examples/barimgex1.php new file mode 100755 index 00000000..f4053cb7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barimgex1.php @@ -0,0 +1,30 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$graph->title->Set('Images on top of bars'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,13); + +$graph->SetTitleBackground('lightblue:1.1',TITLEBKG_STYLE1,TITLEBKG_FRAME_BEVEL); + +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetWidth(0.5); + +$lplot = new LinePlot($datay); +$lplot->SetColor('white@1'); +$lplot->SetBarCenter(); +$lplot->mark->SetType(MARK_IMG_LBALL,'red'); + +$graph->Add($bplot); +$graph->Add($lplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/barintex1.php b/Societes/ric/jpgraph/Examples/barintex1.php new file mode 100755 index 00000000..0dcc6ccb --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barintex1.php @@ -0,0 +1,49 @@ +clearTheme(); +$graph->img->SetMargin(40,30,30,40); +$graph->SetScale("textint"); +$graph->SetShadow(); +$graph->SetFrame(false); // No border around the graph + +// Add some grace to the top so that the scale doesn't +// end exactly at the max value. +$graph->yaxis->scale->SetGrace(100); + +// Setup X-axis labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +$graph->xaxis->SetFont(FF_FONT2); + +// Setup graph title ands fonts +$graph->title->Set("Example of integer Y-scale"); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->xaxis->title->Set("Year 2002"); +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetWidth(0.5); +$bplot->SetShadow(); + +// Setup the values that are displayed on top of each bar +$bplot->value->Show(); +// Must use TTF fonts if we want text at an arbitrary angle +$bplot->value->SetFont(FF_ARIAL,FS_BOLD); +$bplot->value->SetAngle(45); +// Black color for positive values and darkred for negative values +$bplot->value->SetColor("black","darkred"); +$graph->Add($bplot); + +// Finally stroke the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/barintex2.php b/Societes/ric/jpgraph/Examples/barintex2.php new file mode 100755 index 00000000..e764ebe3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barintex2.php @@ -0,0 +1,58 @@ +clearTheme(); +$graph->img->SetMargin(40,30,40,40); +$graph->SetScale("textint"); +$graph->SetFrame(true,'blue',1); +$graph->SetColor('lightblue'); +$graph->SetMarginColor('lightblue'); + +// Add some grace to the top so that the scale doesn't +// end exactly at the max value. +//$graph->yaxis->scale->SetGrace(20); + +// Setup X-axis labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +$graph->xaxis->SetFont(FF_FONT1); +$graph->xaxis->SetColor('darkblue','black'); + +// Stup "hidden" y-axis by given it the same color +// as the background +$graph->yaxis->SetColor('lightblue','darkblue'); +$graph->ygrid->SetColor('white'); + +// Setup graph title ands fonts +$graph->title->Set('Example of integer Y-scale'); +$graph->subtitle->Set('(With "hidden" y-axis)'); + +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->xaxis->title->Set("Year 2002"); +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor('darkblue'); +$bplot->SetColor('darkblue'); +$bplot->SetWidth(0.5); +$bplot->SetShadow('darkgray'); + +// Setup the values that are displayed on top of each bar +$bplot->value->Show(); +// Must use TTF fonts if we want text at an arbitrary angle +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,8); +$bplot->value->SetFormat('$%d'); +// Black color for positive values and darkred for negative values +$bplot->value->SetColor("black","darkred"); +$graph->Add($bplot); + +// Finally stroke the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/barline_csimex1.php b/Societes/ric/jpgraph/Examples/barline_csimex1.php new file mode 100755 index 00000000..1ab37ec5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barline_csimex1.php @@ -0,0 +1,42 @@ +SetScale("textlin"); +$graph->img->SetMargin(40,20,30,40); +$graph->title->Set("CSIM example with bar and line"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Setup axis titles +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->mark->SetType(MARK_FILLEDCIRCLE); +$lineplot->mark->SetWidth(5); +$lineplot->mark->SetColor('black'); +$lineplot->mark->SetFillColor('red'); +$lineplot->SetCSIMTargets($targ,$alt); + +// Create line plot +$barplot=new barPlot($ydata2); +$barplot->SetCSIMTargets($targ,$alt); + +// Add the plots to the graph +$graph->Add($lineplot); +$graph->Add($barplot); + +$graph->StrokeCSIM(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/barlinealphaex1.php b/Societes/ric/jpgraph/Examples/barlinealphaex1.php new file mode 100755 index 00000000..95c8b98e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barlinealphaex1.php @@ -0,0 +1,74 @@ +GetShortMonth(); + +// Create the graph. +$graph = new Graph(300,200); +$graph->SetScale("textlin"); +$graph->SetMarginColor('white'); + +// Adjust the margin slightly so that we use the +// entire area (since we don't use a frame) +$graph->SetMargin(30,1,20,5); + +// Box around plotarea +$graph->SetBox(); + +// No frame around the image +$graph->SetFrame(false); + +// Setup the tab title +$graph->tabtitle->Set('Year 2003'); +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,10); + +// Setup the X and Y grid +$graph->ygrid->SetFill(true,'#DDDDDD@0.5','#BBBBBB@0.5'); +$graph->ygrid->SetLineStyle('dashed'); +$graph->ygrid->SetColor('gray'); +$graph->xgrid->Show(); +$graph->xgrid->SetLineStyle('dashed'); +$graph->xgrid->SetColor('gray'); + +// Setup month as labels on the X-axis +$graph->xaxis->SetTickLabels($months); +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->xaxis->SetLabelAngle(45); + +// Create a bar pot +$bplot = new BarPlot($ydata); +$bplot->SetWidth(0.6); +$fcol='#440000'; +$tcol='#FF9090'; + +$bplot->SetFillGradient($fcol,$tcol,GRAD_LEFT_REFLECTION); + +// Set line weigth to 0 so that there are no border +// around each bar +$bplot->SetWeight(0); + +$graph->Add($bplot); + +// Create filled line plot +$lplot = new LinePlot($ydata2); +$lplot->SetFillColor('skyblue@0.5'); +$lplot->SetColor('navy@0.7'); +$lplot->SetBarCenter(); + +$lplot->mark->SetType(MARK_SQUARE); +$lplot->mark->SetColor('blue@0.5'); +$lplot->mark->SetFillColor('lightblue'); +$lplot->mark->SetSize(6); + +$graph->Add($lplot); + +// .. and finally send it back to the browser +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/barlinefreq_csimex1.php b/Societes/ric/jpgraph/Examples/barlinefreq_csimex1.php new file mode 100755 index 00000000..00c5977d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barlinefreq_csimex1.php @@ -0,0 +1,100 @@ +CheckCSIMCache('auto'); + +// Setup some basic graph parameters +$graph->SetScale("textlin"); +$graph->SetY2Scale('lin',0,100); +$graph->img->SetMargin(50,70,30,40); +$graph->yaxis->SetTitleMargin(30); +$graph->SetMarginColor('#EEEEEE'); + +// Setup titles and fonts +$graph->title->Set("Frequence plot"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Turn the tickmarks +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +$graph->y2axis->SetTickSide(SIDE_RIGHT); +$graph->y2axis->SetColor('black','blue'); +$graph->y2axis->SetLabelFormat('%3d.0%%'); + +// Create a bar pot +$bplot = new BarPlot($data_freq); + +// Create targets and alt texts for the image maps. One for each bar +// (In this example this is just "dummy" targets) +$targ=array("#1","#2","#3","#4","#5","#6","#7"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$bplot->SetCSIMTargets($targ,$alts); + + +// Create accumulative graph +$lplot = new LinePlot($data_accfreq); + +// We want the line plot data point in the middle of the bars +$lplot->SetBarCenter(); + +// Use transperancy +$lplot->SetFillColor('lightblue@0.6'); +$lplot->SetColor('blue@0.6'); +//$lplot->SetColor('blue'); +$graph->AddY2($lplot); + + +// Setup the bars +$bplot->SetFillColor("orange@0.2"); +$bplot->SetValuePos('center'); +$bplot->value->SetFormat("%d"); +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$bplot->value->Show(); + +// Add it to the graph +$graph->Add($bplot); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> diff --git a/Societes/ric/jpgraph/Examples/barlinefreqex1.php b/Societes/ric/jpgraph/Examples/barlinefreqex1.php new file mode 100755 index 00000000..6c5155c2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barlinefreqex1.php @@ -0,0 +1,84 @@ +clearTheme(); + +// Setup some basic graph parameters +$graph->SetScale("textlin"); +$graph->SetY2Scale('lin',0,100); +$graph->img->SetMargin(50,70,30,40); +$graph->yaxis->SetTitleMargin(30); +$graph->SetMarginColor('#EEEEEE'); + +// Setup titles and fonts +$graph->title->Set("Frequence plot"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Turn the tickmarks +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +$graph->y2axis->SetTickSide(SIDE_RIGHT); +$graph->y2axis->SetColor('black','blue'); +$graph->y2axis->SetLabelFormat('%3d.0%%'); + +// Create a bar pot +$bplot = new BarPlot($data_freq); + +// Create accumulative graph +$lplot = new LinePlot($data_accfreq); + +// We want the line plot data point in the middle of the bars +$lplot->SetBarCenter(); + +// Use transperancy +$lplot->SetFillColor('lightblue@0.6'); +$lplot->SetColor('blue@0.6'); +$graph->AddY2($lplot); + +// Setup the bars +$bplot->SetFillColor("orange@0.2"); +$bplot->SetValuePos('center'); +$bplot->value->SetFormat("%d"); +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$bplot->value->Show(); + +// Add it to the graph +$graph->Add($bplot); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/barpatternex1.php b/Societes/ric/jpgraph/Examples/barpatternex1.php new file mode 100755 index 00000000..13af270f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barpatternex1.php @@ -0,0 +1,34 @@ +clearTheme(); + +$graph->SetScale("textlin"); + +$graph->SetMarginColor('navy:1.9'); +$graph->SetBox(); + +$graph->title->Set('Bar Pattern'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,20); + +$graph->SetTitleBackground('lightblue:1.3',TITLEBKG_STYLE2,TITLEBKG_FRAME_BEVEL); +$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'lightblue','blue'); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor('darkorange'); +$bplot->SetWidth(0.6); + +$bplot->SetPattern(PATTERN_CROSS1,'navy'); + +$graph->Add($bplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/barscalecallbackex1.php b/Societes/ric/jpgraph/Examples/barscalecallbackex1.php new file mode 100755 index 00000000..555341ba --- /dev/null +++ b/Societes/ric/jpgraph/Examples/barscalecallbackex1.php @@ -0,0 +1,64 @@ +clearTheme(); +$graph->img->SetMargin(80,30,30,40); +$graph->SetScale('textint'); +$graph->SetShadow(); +$graph->SetFrame(false); // No border around the graph + +// Add some grace to the top so that the scale doesn't +// end exactly at the max value. +// The grace value is the percetage of additional scale +// value we add. Specifying 50 means that we add 50% of the +// max value +$graph->yaxis->scale->SetGrace(50); +$graph->yaxis->SetLabelFormatCallback('separator1000'); + +// Setup X-axis labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +$graph->xaxis->SetFont(FF_FONT2); + +// Setup graph title ands fonts +$graph->title->Set('Example of Y-scale callback formatting'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor('orange'); +$bplot->SetWidth(0.5); +$bplot->SetShadow(); + +// Setup the values that are displayed on top of each bar +$bplot->value->Show(); + +// Must use TTF fonts if we want text at an arbitrary angle +$bplot->value->SetFont(FF_ARIAL,FS_BOLD); +$bplot->value->SetAngle(45); +$bplot->value->SetFormatCallback('separator1000_usd'); + +// Black color for positive values and darkred for negative values +$bplot->value->SetColor('black','darkred'); +$graph->Add($bplot); + +// Finally stroke the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bartutex1.php b/Societes/ric/jpgraph/Examples/bartutex1.php new file mode 100755 index 00000000..791a1c36 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bartutex1.php @@ -0,0 +1,34 @@ +clearTheme(); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Set title and subtitle +$graph->title->Set("Elementary barplot with a text scale"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +//$b1->SetAbsWidth(6); +//$b1->SetShadow(); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/bartutex12.php b/Societes/ric/jpgraph/Examples/bartutex12.php new file mode 100755 index 00000000..c8db0cfc --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bartutex12.php @@ -0,0 +1,89 @@ +clearTheme(); +$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME); +$graph->SetShadow(); + +// Use text X-scale so we can text labels on the X-axis +$graph->SetScale("textlin"); + +// Y2-axis is linear +$graph->SetY2Scale("lin"); + +// Color the two Y-axis to make them easier to associate +// to the corresponding plot (we keep the axis black though) +$graph->yaxis->SetColor("black","red"); +$graph->y2axis->SetColor("black","orange"); + +// Set title and subtitle +$graph->title->Set("Combined bar and line plot"); +$graph->subtitle->Set("100 data points, X-Scale: 'text'"); + +// Use built in font (don't need TTF support) +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Make the margin around the plot a little bit bigger then default +$graph->img->SetMargin(40,140,40,80); + +// Slightly adjust the legend from it's default position in the +// top right corner to middle right side +$graph->legend->Pos(0.03,0.5,"right","center"); + +// Display every 6:th tickmark +$graph->xaxis->SetTextTickInterval(6); + +// Label every 2:nd tick mark +$graph->xaxis->SetTextLabelInterval(2); + +// Setup the labels +$graph->xaxis->SetTickLabels($databarx); +$graph->xaxis->SetLabelAngle(90); + +// Create a red line plot +$p1 = new LinePlot($datay); +$p1->SetColor("red"); +$p1->SetLegend("Pressure"); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +$b1->SetFillColor("orange"); +$b1->SetAbsWidth(8); + +// Drop shadow on bars adjust the default values a little bit +$b1->SetShadow("steelblue",2,2); + +// The order the plots are added determines who's ontop +$graph->Add($p1); +$graph->AddY2($b1); + +// Finally output the image +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/bartutex2.php b/Societes/ric/jpgraph/Examples/bartutex2.php new file mode 100755 index 00000000..28bae4cc --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bartutex2.php @@ -0,0 +1,39 @@ +GetShortMonth(); + +// New graph with a drop shadow +$graph = new Graph(300,200,'auto'); +$graph->clearTheme(); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Specify X-labels +$graph->xaxis->SetTickLabels($months); + +// Set title and subtitle +$graph->title->Set("Textscale with specified labels"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); + +//$b1->SetAbsWidth(6); +//$b1->SetShadow(); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/bartutex3.php b/Societes/ric/jpgraph/Examples/bartutex3.php new file mode 100755 index 00000000..ce0378d7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bartutex3.php @@ -0,0 +1,43 @@ +GetShortMonth(); + +srand ((double) microtime() * 1000000); +for( $i=0; $i<25; ++$i) { + $databary[]=rand(1,50); + $databarx[]=$months[$i%12]; +} + +// New graph with a drop shadow +$graph = new Graph(300,200,'auto'); +$graph->clearTheme(); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Specify X-labels +$graph->xaxis->SetTickLabels($databarx); + +// Set title and subtitle +$graph->title->Set("Bar tutorial example 3"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +//$b1->SetAbsWidth(6); +//$b1->SetShadow(); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/bartutex4.php b/Societes/ric/jpgraph/Examples/bartutex4.php new file mode 100755 index 00000000..9a36b737 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bartutex4.php @@ -0,0 +1,46 @@ +GetShortMonth(); + +srand ((double) microtime() * 1000000); +for( $i=0; $i<25; ++$i) { + $databary[]=rand(1,50); + $databarx[]=$months[$i%12]; +} + +// New graph with a drop shadow +$graph = new Graph(300,200,'auto'); +$graph->clearTheme(); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Specify X-labels +//$databarx = array('tXi','','','xxx','','','iXii','','','OOO','','','tOO'); +$graph->xaxis->SetFont(FF_FONT1,FS_NORMAL); +$graph->xaxis->SetTickLabels($databarx); +$graph->xaxis->SetTextLabelInterval(3); + +// Set title and subtitle +$graph->title->Set("Displaying only every third label"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +//$b1->SetAbsWidth(6); +//$b1->SetShadow(); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/bartutex5.php b/Societes/ric/jpgraph/Examples/bartutex5.php new file mode 100755 index 00000000..75f3b6c2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bartutex5.php @@ -0,0 +1,44 @@ +GetShortMonth(); + +srand ((double) microtime() * 1000000); +for( $i=0; $i<25; ++$i) { + $databary[]=rand(1,50); + $databarx[]=$months[$i%12]; +} + +// New graph with a drop shadow +$graph = new Graph(300,200,'auto'); +$graph->clearTheme(); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Specify X-labels +$graph->xaxis->SetTickLabels($databarx); +$graph->xaxis->SetTextLabelInterval(1); +$graph->xaxis->SetTextTickInterval(3); + +// Set title and subtitle +$graph->title->Set("Bar tutorial example 5"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +$b1->SetWidth(0.4); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/bartutex6.php b/Societes/ric/jpgraph/Examples/bartutex6.php new file mode 100755 index 00000000..ffad0a23 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bartutex6.php @@ -0,0 +1,46 @@ +GetShortMonth(); +srand ((double) microtime() * 1000000); +for( $i=0; $i<25; ++$i) { + $databary[]=rand(1,50); + $databarx[]=$months[$i%12]; +} + +// New graph with a drop shadow +$graph = new Graph(300,200,'auto'); +$graph->clearTheme(); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Specify X-labels +$graph->xaxis->SetTickLabels($databarx); +$graph->xaxis->SetTextLabelInterval(3); + +// Hide the tick marks +$graph->xaxis->HideTicks(); + +// Set title and subtitle +$graph->title->Set("Bar tutorial example 6"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +$b1->SetWidth(0.4); + + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/basic_contourex01.php b/Societes/ric/jpgraph/Examples/basic_contourex01.php new file mode 100755 index 00000000..75d765a9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/basic_contourex01.php @@ -0,0 +1,40 @@ +SetScale('intint'); + +// Adjust the margins to fit the margin +$graph->SetMargin(30,100,40,30); + +// Setup +$graph->title->Set('Basic contour plot'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// A simple contour plot with default arguments (e.g. 10 isobar lines) +$cp = new ContourPlot($data); + +// Display the legend +$cp->ShowLegend(); + +$graph->Add($cp); + +// ... and send the graph back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/basic_contourex02.php b/Societes/ric/jpgraph/Examples/basic_contourex02.php new file mode 100755 index 00000000..f63a650d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/basic_contourex02.php @@ -0,0 +1,43 @@ +SetScale('intint'); + +// Show axis on all sides +$graph->SetAxisStyle(AXSTYLE_BOXOUT); + +// Adjust the margins to fit the margin +$graph->SetMargin(30,100,40,30); + +// Setup +$graph->title->Set('Basic contour plot with multiple axis'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// A simple contour plot with default arguments (e.g. 10 isobar lines) +$cp = new ContourPlot($data); + +// Display the legend +$cp->ShowLegend(); + +$graph->Add($cp); + +// ... and send the graph back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/basic_contourex03-1.php b/Societes/ric/jpgraph/Examples/basic_contourex03-1.php new file mode 100755 index 00000000..26a01de6 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/basic_contourex03-1.php @@ -0,0 +1,40 @@ +SetScale('intint'); + +// Show axis on all sides +$graph->SetAxisStyle(AXSTYLE_BOXOUT); + +// Adjust the margins to fit the margin +$graph->SetMargin(30,100,40,30); + +// Setup +$graph->title->Set('Basic contour plot with multiple axis'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// A simple contour plot with default arguments (e.g. 10 isobar lines) +$cp = new ContourPlot($data,10,1); + +// Display the legend +$cp->ShowLegend(); + +$graph->Add($cp); + +// ... and send the graph back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/basic_contourex03-2.php b/Societes/ric/jpgraph/Examples/basic_contourex03-2.php new file mode 100755 index 00000000..02b9376c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/basic_contourex03-2.php @@ -0,0 +1,40 @@ +SetScale('intint'); + +// Show axis on all sides +$graph->SetAxisStyle(AXSTYLE_BOXOUT); + +// Adjust the margins to fit the margin +$graph->SetMargin(30,100,40,30); + +// Setup +$graph->title->Set('Basic contour plot with multiple axis'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// A simple contour plot with default arguments (e.g. 10 isobar lines) +$cp = new ContourPlot($data,10,2); + +// Display the legend +$cp->ShowLegend(); + +$graph->Add($cp); + +// ... and send the graph back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/basic_contourex03-3.php b/Societes/ric/jpgraph/Examples/basic_contourex03-3.php new file mode 100755 index 00000000..1de30b70 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/basic_contourex03-3.php @@ -0,0 +1,40 @@ +SetScale('intint'); + +// Show axis on all sides +$graph->SetAxisStyle(AXSTYLE_BOXOUT); + +// Adjust the margins to fit the margin +$graph->SetMargin(30,100,40,30); + +// Setup +$graph->title->Set('Basic contour plot with multiple axis'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// A simple contour plot with default arguments (e.g. 10 isobar lines) +$cp = new ContourPlot($data,10,3); + +// Display the legend +$cp->ShowLegend(); + +$graph->Add($cp); + +// ... and send the graph back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/basic_contourex04.php b/Societes/ric/jpgraph/Examples/basic_contourex04.php new file mode 100755 index 00000000..c32e8384 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/basic_contourex04.php @@ -0,0 +1,43 @@ +SetScale('intint'); + +// Show axis on all sides +$graph->SetAxisStyle(AXSTYLE_BOXOUT); + +// Adjust the margins to fit the margin +$graph->SetMargin(30,100,40,30); + +// Setup +$graph->title->Set('Basic contour plot with multiple axis'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// A simple contour plot with default arguments (e.g. 10 isobar lines) +$cp = new ContourPlot($data,5); + +// Display the legend +$cp->ShowLegend(); + +$graph->Add($cp); + +// ... and send the graph back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/basic_contourex05.php b/Societes/ric/jpgraph/Examples/basic_contourex05.php new file mode 100755 index 00000000..61936fce --- /dev/null +++ b/Societes/ric/jpgraph/Examples/basic_contourex05.php @@ -0,0 +1,46 @@ +SetScale('intint'); + +// Show axis on all sides +$graph->SetAxisStyle(AXSTYLE_BOXOUT); + +// Adjust the margins to fit the margin +$graph->SetMargin(30,100,40,30); + +// Setup +$graph->title->Set('Basic contour plot with multiple axis'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// A simple contour plot with default arguments (e.g. 10 isobar lines) +$cp = new ContourPlot($data); + +// Flip the data around its center line +$cp->SetInvert(); + +// Display the legend +$cp->ShowLegend(); + +$graph->Add($cp); + +// ... and send the graph back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/bezierex1.php b/Societes/ric/jpgraph/Examples/bezierex1.php new file mode 100755 index 00000000..e7f1f5ec --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bezierex1.php @@ -0,0 +1,54 @@ +Get(50); + +// Create the graph +$g = new Graph(300,200); +$g->clearTheme(); +$g->SetMargin(30,20,40,30); +$g->title->Set("Bezier interpolation"); +$g->title->SetFont(FF_ARIAL,FS_NORMAL,12); +$g->subtitle->Set('(Control points shown in red)'); +$g->subtitle->SetColor('darkred'); +$g->SetMarginColor('lightblue'); + +//$g->img->SetAntiAliasing(); + +// We need a linlin scale since we provide both +// x and y coordinates for the data points. +$g->SetScale('linlin'); + +// We want 1 decimal for the X-label +$g->xaxis->SetLabelFormat('%1.1f'); + +// We use a scatterplot to illustrate the original +// contro points. +$bplot = new ScatterPlot($ydata,$xdata); +$bplot->mark->SetFillColor('red@0.3'); +$bplot->mark->SetColor('red@0.5'); + +// And a line plot to stroke the smooth curve we got +// from the original control points +$lplot = new LinePlot($newy,$newx); +$lplot->SetColor('navy'); + +// Add the plots to the graph and stroke +$g->Add($lplot); +$g->Add($bplot); +$g->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/bkgimgflagex1.php b/Societes/ric/jpgraph/Examples/bkgimgflagex1.php new file mode 100755 index 00000000..ed2d8d8c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bkgimgflagex1.php @@ -0,0 +1,79 @@ +clearTheme(); +$graph->SetScale('textlin'); +$graph->SetMargin(40,20,20,40); +$graph->SetMarginColor('white:0.9'); +$graph->SetColor('white'); +$graph->SetShadow(); + +// Adjust the position of the legend box +$graph->legend->Pos(0.03,0.10); + +// Adjust the color for theshadow of the legend +$graph->legend->SetShadow('darkgray@0.5'); +$graph->legend->SetFillColor('lightblue@0.1'); +$graph->legend->Hide(); + +// Get localised version of the month names +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); +$graph->SetBackgroundCountryFlag('mais',BGIMG_COPY,50); + +// Set axis titles and fonts +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetColor('white'); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('navy'); + +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('navy'); + +//$graph->ygrid->Show(false); +$graph->ygrid->SetColor('white@0.5'); + +// Setup graph title +$graph->title->Set('Using a country flag background'); + +// Some extra margin (from the top) +$graph->title->SetMargin(3); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Create the three var series we will combine +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +// Setup the colors with 40% transparency (alpha channel) +$bplot1->SetFillColor('yellow@0.4'); +$bplot2->SetFillColor('red@0.4'); +$bplot3->SetFillColor('darkgreen@0.4'); + +// Setup legends +$bplot1->SetLegend('Label 1'); +$bplot2->SetLegend('Label 2'); +$bplot3->SetLegend('Label 3'); + +// Setup each bar with a shadow of 50% transparency +$bplot1->SetShadow('black@0.4'); +$bplot2->SetShadow('black@0.4'); +$bplot3->SetShadow('black@0.4'); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bkgimgflagex2.php b/Societes/ric/jpgraph/Examples/bkgimgflagex2.php new file mode 100755 index 00000000..91876fa8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bkgimgflagex2.php @@ -0,0 +1,83 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMargin(40,20,20,40); +$graph->SetMarginColor('white:0.9'); +$graph->SetColor('white'); +$graph->SetShadow(); + +// Apply a perspective transformation at the end +$graph->Set3DPerspective(SKEW3D_UP,100,180); + +// Adjust the position of the legend box +$graph->legend->Pos(0.03,0.10); + +// Adjust the color for theshadow of the legend +$graph->legend->SetShadow('darkgray@0.5'); +$graph->legend->SetFillColor('lightblue@0.1'); +$graph->legend->Hide(); + +// Get localised version of the month names +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +$graph->SetBackgroundCountryFlag('mais',BGIMG_COPY,50); + +// Set axis titles and fonts +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetColor('white'); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('navy'); + +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('navy'); + +//$graph->ygrid->Show(false); +$graph->ygrid->SetColor('white@0.5'); + +// Setup graph title +$graph->title->Set('Using a country flag background'); + +// Some extra margin (from the top) +$graph->title->SetMargin(3); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Create the three var series we will combine +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +// Setup the colors with 40% transparency (alpha channel) +$bplot1->SetFillColor('yellow@0.4'); +$bplot2->SetFillColor('red@0.4'); +$bplot3->SetFillColor('darkgreen@0.4'); + +// Setup legends +$bplot1->SetLegend('Label 1'); +$bplot2->SetLegend('Label 2'); +$bplot3->SetLegend('Label 3'); + +// Setup each bar with a shadow of 50% transparency +$bplot1->SetShadow('black@0.4'); +$bplot2->SetShadow('black@0.4'); +$bplot3->SetShadow('black@0.4'); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bkgimgflagex3.php b/Societes/ric/jpgraph/Examples/bkgimgflagex3.php new file mode 100755 index 00000000..2f2c50c5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bkgimgflagex3.php @@ -0,0 +1,83 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMargin(40,20,20,40); +$graph->SetMarginColor('white:0.9'); +$graph->SetColor('white'); +$graph->SetShadow(); + +// Apply a perspective transformation at the end +$graph->Set3DPerspective(SKEW3D_DOWN,100,180); + +// Adjust the position of the legend box +$graph->legend->Pos(0.03,0.10); + +// Adjust the color for theshadow of the legend +$graph->legend->SetShadow('darkgray@0.5'); +$graph->legend->SetFillColor('lightblue@0.1'); +$graph->legend->Hide(); + +// Get localised version of the month names +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +$graph->SetBackgroundCountryFlag('mais',BGIMG_COPY,50); + +// Set axis titles and fonts +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetColor('white'); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('navy'); + +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('navy'); + +//$graph->ygrid->Show(false); +$graph->ygrid->SetColor('white@0.5'); + +// Setup graph title +$graph->title->Set('Using a country flag background'); + +// Some extra margin (from the top) +$graph->title->SetMargin(3); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Create the three var series we will combine +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +// Setup the colors with 40% transparency (alpha channel) +$bplot1->SetFillColor('yellow@0.4'); +$bplot2->SetFillColor('red@0.4'); +$bplot3->SetFillColor('darkgreen@0.4'); + +// Setup legends +$bplot1->SetLegend('Label 1'); +$bplot2->SetLegend('Label 2'); +$bplot3->SetLegend('Label 3'); + +// Setup each bar with a shadow of 50% transparency +$bplot1->SetShadow('black@0.4'); +$bplot2->SetShadow('black@0.4'); +$bplot3->SetShadow('black@0.4'); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bkgimgflagex4.php b/Societes/ric/jpgraph/Examples/bkgimgflagex4.php new file mode 100755 index 00000000..5930a7cd --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bkgimgflagex4.php @@ -0,0 +1,83 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMargin(40,20,20,40); +$graph->SetMarginColor('white:0.9'); +$graph->SetColor('white'); +$graph->SetShadow(); + +// Apply a perspective transformation at the end +$graph->Set3DPerspective(SKEW3D_LEFT,350,320,true); + +// Adjust the position of the legend box +$graph->legend->Pos(0.03,0.10); + +// Adjust the color for theshadow of the legend +$graph->legend->SetShadow('darkgray@0.5'); +$graph->legend->SetFillColor('lightblue@0.1'); +$graph->legend->Hide(); + +// Get localised version of the month names +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +$graph->SetBackgroundCountryFlag('mais',BGIMG_COPY,50); + +// Set axis titles and fonts +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetColor('white'); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('navy'); + +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('navy'); + +//$graph->ygrid->Show(false); +$graph->ygrid->SetColor('white@0.5'); + +// Setup graph title +$graph->title->Set('Using a country flag background'); + +// Some extra margin (from the top) +$graph->title->SetMargin(3); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Create the three var series we will combine +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +// Setup the colors with 40% transparency (alpha channel) +$bplot1->SetFillColor('yellow@0.4'); +$bplot2->SetFillColor('red@0.4'); +$bplot3->SetFillColor('darkgreen@0.4'); + +// Setup legends +$bplot1->SetLegend('Label 1'); +$bplot2->SetLegend('Label 2'); +$bplot3->SetLegend('Label 3'); + +// Setup each bar with a shadow of 50% transparency +$bplot1->SetShadow('black@0.4'); +$bplot2->SetShadow('black@0.4'); +$bplot3->SetShadow('black@0.4'); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/bkgimgflagex5.php b/Societes/ric/jpgraph/Examples/bkgimgflagex5.php new file mode 100755 index 00000000..351ee961 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/bkgimgflagex5.php @@ -0,0 +1,83 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMargin(40,20,20,40); +$graph->SetMarginColor('white:0.9'); +$graph->SetColor('white'); +$graph->SetShadow(); + +// Apply a perspective transformation at the end +$graph->Set3DPerspective(SKEW3D_RIGHT,350,320,true); + +// Adjust the position of the legend box +$graph->legend->Pos(0.03,0.10); + +// Adjust the color for theshadow of the legend +$graph->legend->SetShadow('darkgray@0.5'); +$graph->legend->SetFillColor('lightblue@0.1'); +$graph->legend->Hide(); + +// Get localised version of the month names +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +$graph->SetBackgroundCountryFlag('mais',BGIMG_COPY,50); + +// Set axis titles and fonts +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetColor('white'); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('navy'); + +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('navy'); + +//$graph->ygrid->Show(false); +$graph->ygrid->SetColor('white@0.5'); + +// Setup graph title +$graph->title->Set('Using a country flag background'); + +// Some extra margin (from the top) +$graph->title->SetMargin(3); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Create the three var series we will combine +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +// Setup the colors with 40% transparency (alpha channel) +$bplot1->SetFillColor('yellow@0.4'); +$bplot2->SetFillColor('red@0.4'); +$bplot3->SetFillColor('darkgreen@0.4'); + +// Setup legends +$bplot1->SetLegend('Label 1'); +$bplot2->SetLegend('Label 2'); +$bplot3->SetLegend('Label 3'); + +// Setup each bar with a shadow of 50% transparency +$bplot1->SetShadow('black@0.4'); +$bplot2->SetShadow('black@0.4'); +$bplot3->SetShadow('black@0.4'); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/blueblack400x300grad.png b/Societes/ric/jpgraph/Examples/blueblack400x300grad.png new file mode 100755 index 00000000..8852862a Binary files /dev/null and b/Societes/ric/jpgraph/Examples/blueblack400x300grad.png differ diff --git a/Societes/ric/jpgraph/Examples/boxstockcsimex1.php b/Societes/ric/jpgraph/Examples/boxstockcsimex1.php new file mode 100755 index 00000000..1cb765d3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/boxstockcsimex1.php @@ -0,0 +1,37 @@ +SetScale("textlin"); +$graph->SetMarginColor('lightblue'); +$graph->title->Set('Box Stock chart example'); + +// Create a new stock plot +$p1 = new BoxPlot($datay); + +// Setup URL target for image map +$p1->SetCSIMTargets(array('#1','#2','#3','#4','#5')); + +// Width of the bars (in pixels) +$p1->SetWidth(9); + +//$p1->SetCenter(); +// Uncomment the following line to hide the horizontal end lines +//$p1->HideEndLines(); + +// Add the plot to the graph and send it back to the browser +$graph->Add($p1); +$graph->StrokeCSIM(); + +?> diff --git a/Societes/ric/jpgraph/Examples/boxstockex1.php b/Societes/ric/jpgraph/Examples/boxstockex1.php new file mode 100755 index 00000000..ff2a0439 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/boxstockex1.php @@ -0,0 +1,34 @@ +clearTheme(); +$graph->SetScale('textlin'); +$graph->SetMarginColor('lightblue'); +$graph->title->Set('Box Stock chart example'); + +// Create a new stock plot +$p1 = new BoxPlot($datay); + +// Width of the bars (in pixels) +$p1->SetWidth(9); + +// Uncomment the following line to hide the horizontal end lines +//$p1->HideEndLines(); + +// Add the plot to the graph and send it back to the browser +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/boxstockex2.php b/Societes/ric/jpgraph/Examples/boxstockex2.php new file mode 100755 index 00000000..2f7338a6 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/boxstockex2.php @@ -0,0 +1,39 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMarginColor('lightblue'); +$graph->title->Set('Box Stock chart example'); +$graph->subtitle->Set('(Indented X-axis)'); + +// Create a new stock plot +$p1 = new BoxPlot($datay); + +// Width of the bars (in pixels) +$p1->SetWidth(9); + +// Indent bars so they dont start and end at the edge of the +// plot area +$p1->SetCenter(); + +// Uncomment the following line to hide the horizontal end lines +//$p1->HideEndLines(); + +// Add the plot to the graph and send it back to the browser +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/builtinplotmarksex1.php b/Societes/ric/jpgraph/Examples/builtinplotmarksex1.php new file mode 100755 index 00000000..5d265fac --- /dev/null +++ b/Societes/ric/jpgraph/Examples/builtinplotmarksex1.php @@ -0,0 +1,66 @@ +SetMargin(30,20,60,20); +$graph->SetMarginColor('white'); +$graph->SetScale("linlin"); + +// Hide the frame around the graph +$graph->SetFrame(false); + +// Setup title +$graph->title->Set("Using Builtin PlotMarks"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); + +// Note: requires jpgraph 1.12p or higher +// $graph->SetBackgroundGradient('blue','navy:0.5',GRAD_HOR,BGRAD_PLOT); +$graph->tabtitle->Set('Region 1' ); +$graph->tabtitle->SetWidth(TABTITLE_WIDTHFULL); + +// Enable X and Y Grid +$graph->xgrid->Show(); +$graph->xgrid->SetColor('gray@0.5'); +$graph->ygrid->SetColor('gray@0.5'); + +// Format the legend box +$graph->legend->SetColor('navy'); +$graph->legend->SetFillColor('lightgreen'); +$graph->legend->SetLineWeight(1); +$graph->legend->SetFont(FF_ARIAL,FS_BOLD,8); +$graph->legend->SetShadow('gray@0.4',3); +$graph->legend->SetAbsPos(15,120,'right','bottom'); + +// Create the line plots + +$p1 = new LinePlot($datay1); +$p1->SetColor("red"); +$p1->SetFillColor("yellow@0.5"); +$p1->SetWeight(2); +$p1->mark->SetType(MARK_IMG_DIAMOND,5,0.6); +$p1->SetLegend('2006'); +$graph->Add($p1); + +$p2 = new LinePlot($datay2); +$p2->SetColor("darkgreen"); +$p2->SetWeight(2); +$p2->SetLegend('2001'); +$p2->mark->SetType(MARK_IMG_MBALL,'red'); +$graph->Add($p2); + +// Add a vertical line at the end scale position '7' +$l1 = new PlotLine(VERTICAL,7); +$graph->Add($l1); + +// Output the graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/canvas_jpgarchex.php b/Societes/ric/jpgraph/Examples/canvas_jpgarchex.php new file mode 100755 index 00000000..a67c0cbe --- /dev/null +++ b/Societes/ric/jpgraph/Examples/canvas_jpgarchex.php @@ -0,0 +1,143 @@ +SetMargin(2,3,2,3); +$g->SetMarginColor("teal"); +$g->InitFrame(); + +// ... and a scale +$scale = new CanvasScale($g); +$scale->Set(0,$xmax,0,$ymax); + +// ... we need shape since we want the indented rectangle +$shape = new Shape($g,$scale); +$shape->SetColor('black'); + +// ... basic parameters for the overall image +$l = 2; // Left margin +$r = 18; // Row number to start the lowest line on +$width = 16; // Total width + +// Setup the two basic rectangle text object we will use +$tt = new CanvasRectangleText(); +$tt->SetFont(FF_ARIAL,FS_NORMAL,14); +$tt->SetFillColor(''); +$tt->SetColor(''); +$tt->SetFontColor('navy'); + +$t = new CanvasRectangleText(); +$t->SetFont(FF_ARIAL,FS_NORMAL,14); +$t->SetFillColor('goldenrod1'); +$t->SetFontColor('navy'); + + +// Now start drawing the arch overview from the bottom and up +// This is all pretty manual and one day I will write a proper +// framework to make it easy to construct these types of architecture +// overviews. But for now, just plain old coordinates.. + +// Line: GD Library and image libraries +$h=3; +$s = 3; $d=$l + $width-9; +$t->SetFillColor('cadetblue3'); +$t->Set("TTF",$d,$r+2,$s,1); +$t->Stroke($g->img,$scale); +$t->Set("PNG",$d+$s,$r+2,$s,1); +$t->Stroke($g->img,$scale); +$t->Set("JPEG",$d+2*$s,$r+2,$s,1); +$t->Stroke($g->img,$scale); +$shape->IndentedRectangle($l,$r,$width,$h,$s*3,1,2,'lightgreen'); +$tt->Set("GD Basic library\n(1.8.x or 2.x)",$l,$r,$width,$h-1); +$tt->Stroke($g->img,$scale); + + +// Area: Basic internal JpGraph architecture +$t->SetFillColor('goldenrod1'); +$h = 2; +$r -= $h; $d=8; +$t->Set("Image primitives\n(RGB, Anti-aliasing,\nGD Abstraction)",$l,$r-0.5,$width*0.5,$h+0.5); +$t->Stroke($g->img,$scale); +$t->Set("Image Cache &\nStreaming",$l+0.5*$width,$r,$width*0.4,$h); +$t->Stroke($g->img,$scale); + +$r -= $h; $d=8; +$t->Set("2D Rot & Transformation",$l,$r,$width*0.5,$h-0.5); $t->Stroke($g->img,$scale); + + +$r -= 2; $h = 4; +$shape->IndentedRectangle($l,$r,$width*0.9,$h,$d,2,3,'goldenrod1'); +$tt->Set("Axis, Labelling, (Auto)-Scaling",$l,$r,$width*0.9,$h-2); $tt->Stroke($g->img,$scale); + +$r -= 1; +$shape->IndentedRectangle($l,$r,$width,7,$width*0.9,6,3,'goldenrod1'); +$tt->Set("Error handling & Utility classes",$l,$r,$width,1); $tt->Stroke($g->img,$scale); + + +// Area: Top area with graph components +$t->SetFillColor('gold1'); +$r -= 3; +$w = $width*0.55/4; $h = 2; +$t->Set("Gantt\nGraph",$l,$r,$w,$h); +$t->Stroke($g->img,$scale); + +$t->Set("Pie\nGraph",$l+$w,$r,$w,$h); +$t->Stroke($g->img,$scale); +$t->Set("Radar\nGraph",$l+$w*2,$r,$w,$h); +$t->Stroke($g->img,$scale); + +$shape->IndentedRectangle($l,$r,$width,3,4*$w,2,0,'gold1'); +$tt->Set("Base Graph\n(Orthogonal\ncoordinate system)",$l+4*$w,$r,$width-$w*4,3); +$tt->Stroke($g->img,$scale); + +$r -= 2; +$d = 0.7; +$shape->IndentedRectangle($l+3*$w,$r,$w,4, $w*$d,2,0,'gold1'); +$t->Set("Canv\nUtil",$l+3*$w,$r,$w*$d,$h); $t->Stroke($g->img,$scale); +$tt->Set("Canvas\nGraph",$l+3*$w,$r+2,$w,2); $tt->Stroke($g->img,$scale); + +// Top line of plotting plugins +$t->SetFillColor('cyan'); +$t->Set("Gantt\nPlot",$l,$r,$w,$h); $t->Stroke($g->img,$scale); +$t->Set("2D\nPlot",$l+$w,$r,$w/2,$h); $t->Stroke($g->img,$scale); +$t->Set("3D\nPlot",$l+$w+$w/2,$r,$w/2,$h);$t->Stroke($g->img,$scale); +$t->Set("Radar\nPlot",$l+2*$w,$r,$w,$h); $t->Stroke($g->img,$scale); + +$wp = ($width - 4*$w)/4; +$t->Set("Error\nPlot",$l+4*$w,$r,$wp,$h); $t->Stroke($g->img,$scale); +$t->Set("Line\nPlot",$l+4*$w+$wp,$r,$wp,$h); $t->Stroke($g->img,$scale); +$t->Set("Bar\nPlot",$l+4*$w+2*$wp,$r,$wp,$h); $t->Stroke($g->img,$scale); +$t->Set("Scatter\nPlot",$l+4*$w+3*$wp,$r,$wp,$h); $t->Stroke($g->img,$scale); + +// Show application top +$r -= 2.5; $h=2; +$t->SetFillColor('blue'); +$t->SetFontColor('white'); +$t->SetFont(FF_ARIAL,FS_BOLD,20); +$t->Set("PHP Application",$l,$r,$width,$h); $t->Stroke($g->img,$scale); + +// Stroke title +$r = 0.5; +$tt->SetFontColor('black'); +$tt->SetFont(FF_TIMES,FS_BOLD,28); +$tt->Set("JpGraph Architecture Overview",$l,$r,$width,1); +$tt->Stroke($g->img,$scale); + +// Stroke footer +$tt->SetFont(FF_VERDANA,FS_NORMAL,10); +$tt->Set("Generated: ".date("ymd H:m",time()),0.1,$ymax*0.95); +$tt->Stroke($g->img,$scale); + +// .. and stream it all back +$g->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/canvasbezierex1.php b/Societes/ric/jpgraph/Examples/canvasbezierex1.php new file mode 100755 index 00000000..36febdf5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/canvasbezierex1.php @@ -0,0 +1,40 @@ +title->Set('Bezier line with control points'); + +// Setup control point for bezier +$p = array(3,6, + 6,9, + 5,3, + 7,4); + +// Visualize control points +$shape->SetColor('blue'); +$shape->Line($p[0],$p[1],$p[2],$p[3]); +$shape->FilledCircle($p[2],$p[3],-6); + +$shape->SetColor('red'); +$shape->Line($p[4],$p[5],$p[6],$p[7]); +$shape->FilledCircle($p[4],$p[5],-6); + +// Draw bezier +$shape->SetColor('black'); +$shape->Bezier($p); + +// Frame it with a square +$shape->SetColor('navy'); +$shape->Rectangle(0.5,2,9.5,9.5); + +// ... and stroke it +$g->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/canvasex01.php b/Societes/ric/jpgraph/Examples/canvasex01.php new file mode 100755 index 00000000..68839155 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/canvasex01.php @@ -0,0 +1,37 @@ +SetMargin(5,11,6,11); +$g->SetShadow(); +$g->SetMarginColor("teal"); + +// We need to stroke the plotarea and margin before we add the +// text since we otherwise would overwrite the text. +$g->InitFrame(); + +// Draw a text box in the middle +$txt="This\nis\na TEXT!!!"; +$t = new Text($txt,200,10); +$t->SetFont(FF_ARIAL,FS_BOLD,40); + +// How should the text box interpret the coordinates? +$t->Align('center','top'); + +// How should the paragraph be aligned? +$t->ParagraphAlign('center'); + +// Add a box around the text, white fill, black border and gray shadow +$t->SetBox("white","black","gray"); + +// Stroke the text +$t->Stroke($g->img); + +// Stroke the graph +$g->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/canvasex02.php b/Societes/ric/jpgraph/Examples/canvasex02.php new file mode 100755 index 00000000..20807622 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/canvasex02.php @@ -0,0 +1,42 @@ +SetMargin(5,11,6,11); +$g->SetShadow(); +$g->SetMarginColor("teal"); + +// We need to stroke the plotarea and margin before we add the +// text since we otherwise would overwrite the text. +$g->InitFrame(); + +// Add a black line +$g->img->SetColor('black'); +$g->img->Line(0,0,100,100); + +// .. and a circle (x,y,diameter) +$g->img->Circle(100,100,50); + +// .. and a filled circle (x,y,diameter) +$g->img->SetColor('red'); +$g->img->FilledCircle(200,100,50); + +// .. add a rectangle +$g->img->SetColor('green'); +$g->img->FilledRectangle(10,10,50,50); + +// .. add a filled rounded rectangle +$g->img->SetColor('green'); +$g->img->FilledRoundedRectangle(300,30,350,80,10); +// .. with a darker border +$g->img->SetColor('darkgreen'); +$g->img->RoundedRectangle(300,30,350,80,10); + +// Stroke the graph +$g->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/canvasex03.php b/Societes/ric/jpgraph/Examples/canvasex03.php new file mode 100755 index 00000000..dad3c55b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/canvasex03.php @@ -0,0 +1,58 @@ +SetMargin(5,11,6,11); +$g->SetShadow(); +$g->SetMarginColor("teal"); + +// We need to stroke the plotarea and margin before we add the +// text since we otherwise would overwrite the text. +$g->InitFrame(); + +// Create a new scale +$scale = new CanvasScale($g); +$scale->Set(0,$xmax,0,$ymax); + +// The shape class is wrapper around the Imgae class which translates +// the coordinates for us +$shape = new Shape($g,$scale); +$shape->SetColor('black'); + + +// Add a black line +$shape->SetColor('black'); +$shape->Line(0,0,20,20); + +// .. and a circle (x,y,diameter) +$shape->Circle(5,14,2); + +// .. and a filled circle (x,y,diameter) +$shape->SetColor('red'); +$shape->FilledCircle(11,8,3); + +// .. add a rectangle +$shape->SetColor('green'); +$shape->FilledRectangle(15,8,19,14); + +// .. add a filled rounded rectangle +$shape->SetColor('green'); +$shape->FilledRoundedRectangle(2,3,8,6); +// .. with a darker border +$shape->SetColor('darkgreen'); +$shape->RoundedRectangle(2,3,8,6); + + +// Stroke the graph +$g->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/canvasex04.php b/Societes/ric/jpgraph/Examples/canvasex04.php new file mode 100755 index 00000000..3e6ac9f9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/canvasex04.php @@ -0,0 +1,58 @@ +SetMargin(5,11,6,11); +$g->SetShadow(); +$g->SetMarginColor("teal"); + +// We need to stroke the plotarea and margin before we add the +// text since we otherwise would overwrite the text. +$g->InitFrame(); + +// Create a new scale +$scale = new CanvasScale($g); +$scale->Set(0,$xmax,0,$ymax); + +// The shape class is wrapper around the Imgae class which translates +// the coordinates for us +$shape = new Shape($g,$scale); +$shape->SetColor('black'); + + +// Add a black line +$shape->SetColor('black'); +$shape->Line(0,0,20,20); + +// .. and a circle (x,y,diameter) +$shape->Circle(5,14,2); + +// .. and a filled circle (x,y,diameter) +$shape->SetColor('red'); +$shape->FilledCircle(11,8,3); + +// .. add a rectangle +$shape->SetColor('green'); +$shape->FilledRectangle(15,8,19,14); + +// .. add a filled rounded rectangle +$shape->SetColor('green'); +$shape->FilledRoundedRectangle(2,3,8,6); +// .. with a darker border +$shape->SetColor('darkgreen'); +$shape->RoundedRectangle(2,3,8,6); + + +// Stroke the graph +$g->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/canvasex05.php b/Societes/ric/jpgraph/Examples/canvasex05.php new file mode 100755 index 00000000..46139842 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/canvasex05.php @@ -0,0 +1,58 @@ +SetMargin(5,11,6,11); +$g->SetShadow(); +$g->SetMarginColor("teal"); + +// We need to stroke the plotarea and margin before we add the +// text since we otherwise would overwrite the text. +$g->InitFrame(); + +// Create a new scale +$scale = new CanvasScale($g); +$scale->Set(0,$xmax,0,$ymax); + +// The shape class is wrapper around the Imgae class which translates +// the coordinates for us +$shape = new Shape($g,$scale); +$shape->SetColor('black'); + + +// Add a black line +$shape->SetColor('black'); +$shape->Line(0,0,20,20); + +// .. and a circle (x,y,diameter) +$shape->Circle(5,14,2); + +// .. and a filled circle (x,y,diameter) +$shape->SetColor('red'); +$shape->FilledCircle(11,8,3); + +// .. add a rectangle +$shape->SetColor('green'); +$shape->FilledRectangle(15,8,19,14); + +// .. add a filled rounded rectangle +$shape->SetColor('green'); +$shape->FilledRoundedRectangle(2,3,8,6); +// .. with a darker border +$shape->SetColor('darkgreen'); +$shape->RoundedRectangle(2,3,8,6); + + +// Stroke the graph +$g->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/canvasex06.php b/Societes/ric/jpgraph/Examples/canvasex06.php new file mode 100755 index 00000000..b475c68d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/canvasex06.php @@ -0,0 +1,42 @@ +SetMargin(5,11,6,11); +$g->SetShadow(); +$g->SetMarginColor("teal"); + +// We need to stroke the plotarea and margin before we add the +// text since we otherwise would overwrite the text. +$g->InitFrame(); + +// Create a new scale +$scale = new CanvasScale($g); +$scale->Set(0,$xmax,0,$ymax); + +// The shape class is wrapper around the Imgae class which translates +// the coordinates for us +$shape = new Shape($g,$scale); +$shape->SetColor('black'); + +$shape->IndentedRectangle(1,2,15,15,8,8,CORNER_TOPLEFT,'khaki'); + +$shape->IndentedRectangle(1,20,15,15,8,8,CORNER_BOTTOMLEFT,'khaki'); + +$shape->IndentedRectangle(20,2,15,15,8,8,CORNER_TOPRIGHT,'khaki'); + +$shape->IndentedRectangle(20,20,15,15,8,8,CORNER_BOTTOMRIGHT,'khaki'); + +// Stroke the graph +$g->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/canvaspiralex1.php b/Societes/ric/jpgraph/Examples/canvaspiralex1.php new file mode 100755 index 00000000..5d72b920 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/canvaspiralex1.php @@ -0,0 +1,78 @@ +SetColor($color1); + $img->Line($x,$y,$x+$s1*$w,$y); + } + else { + $x = $x + $s2*$w*$r; + $w = (1-$r)*$w; + $h = $h / (1-$r) * $r; + $s2 *= -1; + $img->SetColor($color1); + $img->Line($x,$y,$x,$y-$s2*$h); + } + $img->SetColor($color2); + $img->FilledRectangle($x-1,$y-1,$x+1,$y+1); + $img->Arc($x,$y,2*$w+1,2*$h+1,$sa,$ea); + $img->Arc($x,$y,2*$w,2*$h,$sa,$ea); + $img->Arc($x,$y,2*$w-1,2*$h-1,$sa,$ea); + $img->Line($x_old,$y_old,$x,$y); + $x_old=$x; $y_old=$y; + } +} + +$g = new CanvasGraph($w,$h); +//$gr = 1.61803398874989484820; + +$p = SeaShell($g->img,0,20,$w-1,$h-21,$r,19); +$g->img->SetColor('black'); +$g->img->Rectangle(0,20,$w-1,$h-1); +$g->img->SetFont(FF_FONT2,FS_BOLD); +$g->img->SetTextAlign('center','top'); +$g->img->StrokeText($w/2,0,"Canvas Spiral"); + +$g->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/ccbp_ex1.php b/Societes/ric/jpgraph/Examples/ccbp_ex1.php new file mode 100755 index 00000000..5071fd34 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ccbp_ex1.php @@ -0,0 +1,36 @@ +SetTitle('Buffer penetration','(history added)'); +$graph->SetColorMap(0); + + // Two "fake tasks with hostory +$datax=array(75,83); $datay=array(110,64); +$datax1 = array(33,50,67,83); $datay1 = array(86,76,80,64); +$datax2 = array(18,47,58,75); $datay2 = array(80,97,105,110); + +$sp = new ScatterPlot($datay,$datax); +$sp->mark->SetType(MARK_DIAMOND); +$sp->mark->SetFillColor('white'); +$sp->mark->SetSize(12); + +$sp_hist = array(); +$sp_hist[0] = new LinePlot($datay1,$datax1); +$sp_hist[0]->SetWeight(1); +$sp_hist[0]->SetColor('white'); + +$sp_hist[1] = new LinePlot($datay2,$datax2); +$sp_hist[1]->SetWeight(1); +$sp_hist[1]->SetColor('white'); + +$graph->Add($sp_hist); +$graph->Add($sp); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/ccbp_ex2.php b/Societes/ric/jpgraph/Examples/ccbp_ex2.php new file mode 100755 index 00000000..c5decd30 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ccbp_ex2.php @@ -0,0 +1,36 @@ +SetTitle('Buffer penetration','(history added)'); +$graph->SetColorMap(1); + + // Two "fake tasks with hostory +$datax=array(75,83); $datay=array(110,64); +$datax1 = array(33,50,67,83); $datay1 = array(86,76,80,64); +$datax2 = array(18,47,58,75); $datay2 = array(80,97,105,110); + +$sp = new ScatterPlot($datay,$datax); +$sp->mark->SetType(MARK_DIAMOND); +$sp->mark->SetFillColor('white'); +$sp->mark->SetSize(12); + +$sp_hist = array(); +$sp_hist[0] = new LinePlot($datay1,$datax1); +$sp_hist[0]->SetWeight(1); +$sp_hist[0]->SetColor('white'); + +$sp_hist[1] = new LinePlot($datay2,$datax2); +$sp_hist[1]->SetWeight(1); +$sp_hist[1]->SetColor('white'); + +$graph->Add($sp_hist); +$graph->Add($sp); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/ccbpgraph.class.php b/Societes/ric/jpgraph/Examples/ccbpgraph.class.php new file mode 100755 index 00000000..3afac9bd --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ccbpgraph.class.php @@ -0,0 +1,258 @@ +iWidth = $aWidth; + $this->iHeight = $aHeight; + } + /** + * Set the title and subtitle for the graph + * + * @param string $aTitle + * @param string $aSubTitle + */ + public function SetTitle($aTitle, $aSubTitle) { + $this->iTitle = $aTitle; + $this->iSubTitle = $aSubTitle; + } + /** + * Set the x-axis min and max values + * + * @param int $aMin + * @param int $aMax + */ + public function SetXMinMax($aMin, $aMax) { + $this->iXMin = floor($aMin/CCBPGraph::TickStep)*CCBPGraph::TickStep; + $this->iXMax = ceil($aMax/CCBPGraph::TickStep)*CCBPGraph::TickStep; + } + /** + * Specify what color map to use + * + * @param int $aMap + */ + public function SetColorMap($aMap) { + $this->iColorMap = $aMap % CCBPGraph::NColorMaps; + } + /** + * Set the y-axis min and max values + * + * @param int $aMin + * @param int $aMax + */ + public function SetYMinMax($aMin,$aMax) { + $this->iYMin = floor($aMin/CCBPGraph::TickStep)*CCBPGraph::TickStep; + $this->iYMax = ceil($aMax/CCBPGraph::TickStep)*CCBPGraph::TickStep; + } + /** + * Set the specification of the color backgrounds and also the + * optional exact colors to be used + * + * @param mixed $aSpec An array of 3 1x2 arrays. Each array specify the + * color indication value at x=0 and x=max x in order to determine the slope + * @param mixed $aColors An array with four elements specifying the colors + * of each color indicator + */ + public function SetColorIndication(array $aSpec,array $aColors=null) { + if( count($aSpec) !== 3 ) { + JpgraphError::Raise('Specification of scale values for background indicators must be an array with three elements.'); + } + $this->iColorInd = $aSpec; + if( $aColors !== null ) { + if( is_array($aColors) && count($aColors) == 4 ) { + $this->iColorSpec = $aColors; + } + else { + JpGraphError::Raise('Color specification for background indication must have four colors.'); + } + } + } + /** + * Construct the graph + * + */ + private function Init() { + + // Setup limits for color indications + $lowx = $this->iXMin; $highx= $this->iXMax; + $lowy = $this->iYMin; $highy = $this->iYMax; + $width=$this->iWidth; $height=$this->iHeight; + + // Margins + $lm=50; $rm=40; + $tm=60; $bm=40; + + if( $width <= 300 || $height <= 250 ) { + $labelsize = 8; + $lm=25; $rm=25; + $tm=45; $bm=25; + } + elseif( $width <= 450 || $height <= 300 ) { + $labelsize = 8; + $lm=30; $rm=30; + $tm=50; $bm=30; + } + elseif( $width <= 600 || $height <= 400 ) { + $labelsize = 9; + } + else { + $labelsize = 11; + } + + if( $this->iSubTitle == '' ) { + $tm -= $labelsize+4; + } + + $graph = new Graph($width,$height); + $graph->clearTheme(); + $graph->SetScale('intint',$lowy,$highy,$lowx,$highx); + $graph->SetMargin($lm,$rm,$tm,$bm); + $graph->SetMarginColor($this->iMarginColor[$this->iColorMap]); + $graph->SetClipping(); + + $graph->title->Set($this->iTitle); + $graph->subtitle->Set($this->iSubTitle); + + $graph->title->SetFont(FF_ARIAL,FS_BOLD,$labelsize+4); + $graph->subtitle->SetFont(FF_ARIAL,FS_BOLD,$labelsize+1); + + $graph->SetBox(true,'black@0.3'); + + $graph->xaxis->SetFont(FF_ARIAL,FS_BOLD,$labelsize); + $graph->yaxis->SetFont(FF_ARIAL,FS_BOLD,$labelsize); + + $graph->xaxis->scale->ticks->Set(CCBPGraph::TickStep,CCBPGraph::TickStep); + $graph->yaxis->scale->ticks->Set(CCBPGraph::TickStep,CCBPGraph::TickStep); + + $graph->xaxis->HideZeroLabel(); + $graph->yaxis->HideZeroLabel(); + + $graph->xaxis->SetLabelFormatString('%d%%'); + $graph->yaxis->SetLabelFormatString('%d%%'); + + // For the x-axis we adjust the color so labels on the left of the Y-axis are in black + $n1 = floor(abs($this->iXMin/25))+1; + $n2 = floor($this->iXMax/25); + if( $this->iColorMap == 0 ) { + $xlcolors=array(); + for( $i = 0; $i < $n1; ++$i ) { + $xlcolors[$i] = 'black'; + } + for( $i = 0; $i < $n2; ++$i ) { + $xlcolors[$n1+$i] = 'lightgray:1.5'; + } + $graph->xaxis->SetColor('gray',$xlcolors); + $graph->yaxis->SetColor('gray','lightgray:1.5'); + } + else { + $graph->xaxis->SetColor('darkgray','darkgray:0.8'); + $graph->yaxis->SetColor('darkgray','darkgray:0.8'); + } + $graph->SetGridDepth(DEPTH_FRONT); + $graph->ygrid->SetColor('gray@0.6'); + $graph->ygrid->SetLineStyle('dotted'); + + $graph->ygrid->Show(); + + $graph->xaxis->SetWeight(1); + $graph->yaxis->SetWeight(1); + + $ytitle = new Text(CCBPGraph::YTitle,floor($lm*.75),($height-$tm-$bm)/2+$tm); + #$ytitle->SetFont(FF_VERA,FS_BOLD,$labelsize+1); + $ytitle->SetAlign('right','center'); + $ytitle->SetAngle(90); + $graph->Add($ytitle); + + $xtitle = new Text(CCBPGraph::XTitle,($width-$lm-$rm)/2+$lm,$height - 10); + #$xtitle->SetFont(FF_VERA,FS_BOLD,$labelsize); + $xtitle->SetAlign('center','bottom'); + $graph->Add($xtitle); + + $df = 'D j:S M, Y'; + if( $width < 400 ) { + $df = 'D j:S M'; + } + + $time = new Text(date($df),$width-10,$height-10); + $time->SetAlign('right','bottom'); + #$time->SetFont(FF_VERA,FS_NORMAL,$labelsize-1); + $time->SetColor('darkgray'); + $graph->Add($time); + + // Use an accumulated fille line graph to create the colored bands + + $n = 3; + for( $i=0; $i < $n; ++$i ) { + $b = $this->iColorInd[$i][0]; + $k = ($this->iColorInd[$i][1] - $this->iColorInd[$i][0])/$this->iXMax; + $colarea[$i] = array( array($lowx,$lowx*$k+$b), array($highx,$highx*$k+$b) ); + } + $colarea[3] = array( array($lowx,$highy), array($highx,$highy) ); + + + $cb = array(); + for( $i=0; $i < 4; ++$i ) { + $cb[$i] = new LinePlot(array($colarea[$i][0][1],$colarea[$i][1][1]), + array($colarea[$i][0][0],$colarea[$i][1][0])); + $cb[$i]->SetFillColor($this->iColorSpec[$this->iColorMap][$i]); + $cb[$i]->SetFillFromYMin(); + } + + $graph->Add(array_slice(array_reverse($cb),0,4)); + $this->graph = $graph; + } + /** + * Add a line or scatter plot to the graph + * + * @param mixed $aPlots + */ + public function Add($aPlots) { + if( is_array($aPlots) ) { + $this->iPlots = array_merge($this->iPlots,$aPlots); + } + else { + $this->iPlots[] = $aPlots; + } + } + /** + * Stroke the graph back to the client or to a file + * + * @param mixed $aFile + */ + public function Stroke($aFile='') { + $this->Init(); + if( count($this->iPlots) > 0 ) { + $this->graph->Add($this->iPlots); + } + $this->graph->Stroke($aFile); + } +} +?> diff --git a/Societes/ric/jpgraph/Examples/centeredlineex01.php b/Societes/ric/jpgraph/Examples/centeredlineex01.php new file mode 100755 index 00000000..3642f3a4 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/centeredlineex01.php @@ -0,0 +1,35 @@ +img->SetMargin(40,40,40,40); +$graph->img->SetAntiAliasing(); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Example of line centered plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + + +// Use 20% "grace" to get slightly larger scale then min/max of +// data +$graph->yscale->SetGrace(20); + + +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$graph->Add($p1); + +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/centeredlineex02.php b/Societes/ric/jpgraph/Examples/centeredlineex02.php new file mode 100755 index 00000000..2b742290 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/centeredlineex02.php @@ -0,0 +1,30 @@ +img->SetMargin(40,40,40,40); +$graph->img->SetAntiAliasing(); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Example of filled line centered plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new LinePlot($datay); +$p1->SetFillColor("green"); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$graph->Add($p1); + +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/centeredlineex03.php b/Societes/ric/jpgraph/Examples/centeredlineex03.php new file mode 100755 index 00000000..9c182a74 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/centeredlineex03.php @@ -0,0 +1,31 @@ +img->SetMargin(40,40,40,80); +$graph->img->SetAntiAliasing(); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Example slanted X-labels"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,14); + +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,11); +$graph->xaxis->SetTickLabels($labels); +$graph->xaxis->SetLabelAngle(45); + +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$graph->Add($p1); + +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/centerlinebarex1.php b/Societes/ric/jpgraph/Examples/centerlinebarex1.php new file mode 100755 index 00000000..ccfba33d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/centerlinebarex1.php @@ -0,0 +1,34 @@ +clearTheme(); +$graph->img->SetMargin(40,80,40,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->Set('Center the line points in bars'); + +$line = new LinePlot($ydata); +$line->SetBarCenter(); +$line->SetWeight(2); + +$bar = new BarPlot($ydata); +$bar2 = new BarPlot($ydata); +$bar2->SetFillColor("red"); + +$gbar = new GroupbarPlot(array($bar,$bar2)); + +$graph->Add($gbar); +$graph->Add($line); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/checkgd.php b/Societes/ric/jpgraph/Examples/checkgd.php new file mode 100755 index 00000000..ad252bd2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/checkgd.php @@ -0,0 +1,11 @@ + diff --git a/Societes/ric/jpgraph/Examples/checkgd2.php b/Societes/ric/jpgraph/Examples/checkgd2.php new file mode 100755 index 00000000..e5e7b3c5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/checkgd2.php @@ -0,0 +1,14 @@ + diff --git a/Societes/ric/jpgraph/Examples/checkttf.php b/Societes/ric/jpgraph/Examples/checkttf.php new file mode 100755 index 00000000..5efe737f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/checkttf.php @@ -0,0 +1,22 @@ + diff --git a/Societes/ric/jpgraph/Examples/classroom.jpg b/Societes/ric/jpgraph/Examples/classroom.jpg new file mode 100755 index 00000000..f4cc06c4 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/classroom.jpg differ diff --git a/Societes/ric/jpgraph/Examples/clipping_ex1.php b/Societes/ric/jpgraph/Examples/clipping_ex1.php new file mode 100755 index 00000000..40331113 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/clipping_ex1.php @@ -0,0 +1,37 @@ +clearTheme(); +$graph->SetScale('intlin',0,10); +$graph->SetMargin(30,20,70,40); +$graph->SetMarginColor(array(177,191,174)); + +$graph->SetClipping(false); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); + +$graph->ygrid->SetLineStyle('dashed'); + +$graph->title->Set("Manual scale"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->title->SetColor('white'); +$graph->subtitle->Set("(No clipping)"); +$graph->subtitle->SetColor('white'); +$graph->subtitle->SetFont(FF_ARIAL,FS_BOLD,10); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor("red"); +$lineplot->SetWeight(2); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/clipping_ex2.php b/Societes/ric/jpgraph/Examples/clipping_ex2.php new file mode 100755 index 00000000..168a8633 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/clipping_ex2.php @@ -0,0 +1,37 @@ +clearTheme(); +$graph->SetScale('intlin',0,10); +$graph->SetMargin(30,20,70,40); +$graph->SetMarginColor(array(177,191,174)); + +$graph->SetClipping(true); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); + +$graph->ygrid->SetLineStyle('dashed'); + +$graph->title->Set("Manual scale"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->title->SetColor('white'); +$graph->subtitle->Set("(With clipping)"); +$graph->subtitle->SetColor('white'); +$graph->subtitle->SetFont(FF_ARIAL,FS_BOLD,10); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor("red"); +$lineplot->SetWeight(2); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/colormaps.php b/Societes/ric/jpgraph/Examples/colormaps.php new file mode 100755 index 00000000..2f9470f0 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/colormaps.php @@ -0,0 +1,133 @@ +img->SetColor('darkgray'); + $graph->img->Rectangle(0,0,$width-1,$height-1); + + $t = new Text($aTitle, $width/2,5); + $t->SetAlign('center','top'); + $t->SetFont(FF_ARIAL,FS_BOLD,14); + $t->Stroke($graph->img); + + // Instantiate a colormap + $cm = new ColorMap(); + $cm->InitRGB($graph->img->rgb); + + for( $mapidx=$aStart; $mapidx <= $aEnd; ++$mapidx, $ys += $ymarg ) { + + $cm->SetMap($mapidx,$aReverse); + $n = $cm->SetNumColors($n); + list( $mapidx, $maparray ) = $cm->GetCurrMap(); + $ncols = count($maparray); + $colbuckets = $cm->GetBuckets(); + + // The module width will depend on the actual number of colors + $mw = round(($width-$lmarg-$rmarg)/$n); + + // Draw color map title (name) + $t->Set('Basic colors: '.$ncols.', Total colors: '.$n); + $t->SetAlign('center','bottom'); + $t->SetAngle(0); + $t->SetFont(FF_TIMES,FS_NORMAL,14); + $t->Stroke($graph->img,$width/2,$ys-3); + + // Add the name/number of the map to the left + $t->SetAlign('right','center'); + $t->Set('Map: '.$mapidx); + $t->SetFont(FF_ARIAL,FS_NORMAL,14); + $t->Stroke($graph->img,$xs-20,round($ys+$mh/2)); + + // Setup text properties for the color names + if( $addColorNames ) { + $t->SetAngle(30); + $t->SetFont(FF_ARIAL,FS_NORMAL,12); + $t->SetAlign('right','top'); + } + + // Loop through all colors in the map + $x = $xs; $y = $ys; $k=0; + for($i=0; $i < $n; ++$i){ + $graph->img->SetColor($colbuckets[$i]); + $graph->img->FilledRectangle($x,$y,$x+$mw,$y+$mh); + + // Mark all basic colors in the map with a bar and name + if( $i % (($n-$ncols)/($ncols-1)+1) == 0 ) { + $graph->img->SetColor('black'); + $graph->img->FilledRectangle($x,$y+$mh+4,$x+$mw-1,$y+$mh+6); + if( $addColorNames ) { + $t->Set($maparray[$k++]); + $t->Stroke($graph->img,$x+$mw/2,$y+$mh+10); + } + } + $x += $mw; + } + + // Draw a border around the map + $graph->img->SetColor('black'); + $graph->img->Rectangle($xs,$ys,$xs+$mw*$n,$ys+$mh); + + } + + // Send back to client + $graph->Stroke(); + } + +} + +$driver = new ColorMapDriver(); + +$title = "Standard maps"; +$reverse = false; +$n = 64; $s=0; $e=9; +$showNames = false; + + +/* +$title = "Center maps"; +$reverse = false; +$n = 64; $s=10; $e=14; +$showNames = false; +*/ + +/* +$title = "Continues maps"; +$reverse = false; +$n = 64; $s=15; $e=21; +$showNames = false; +*/ +$driver->Draw($title,$s,$e,$n,$reverse,$showNames); + +?> diff --git a/Societes/ric/jpgraph/Examples/comb90dategraphex01.php b/Societes/ric/jpgraph/Examples/comb90dategraphex01.php new file mode 100755 index 00000000..3c9ed85a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/comb90dategraphex01.php @@ -0,0 +1,98 @@ + 359) + $data_winddirection[$i+1] = 0; + + $data_windspeed[$i+1] = $data_windspeed[$i] + rand(-2,2); + if($data_windspeed[$i+1] < 0 ) + $data_windspeed[$i+1] = 0; + + $xdata[$i] = $start + $i * SAMPLERATE; +} +$xdata[$i] = $start + $i * SAMPLERATE; + + +// Setup the Wind direction graph +$graph = new Graph(300,800); +$graph->clearTheme(); +$graph->SetMarginColor('lightgray:1.7'); +$graph->SetScale('datlin',0,360); +$graph->Set90AndMargin(50,30,60,30); +$graph->SetFrame(true,'white',0); +$graph->SetBox(); + +$graph->title->Set('Wind direction'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->title->SetMargin(10); + +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->xaxis->scale->SetDateFormat('h:i'); +$graph->xgrid->Show(); + +$graph->yaxis->SetLabelAngle(45); +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->yaxis->SetLabelMargin(0); +$graph->yaxis->scale->SetAutoMin(0); + +$line = new LinePlot($data_winddirection,$xdata); +$line->SetStepStyle(); +$line->SetColor('blue'); + +$graph->Add($line); + +// Setup the wind speed graph +$graph2 = new Graph(300,800); +$graph2->clearTheme(); +$graph2->SetScale('datlin'); +$graph2->Set90AndMargin(50,30,60,30); +$graph2->SetMarginColor('lightgray:1.7'); +$graph2->SetFrame(true,'white',0); +$graph2->SetBox(); + +$graph2->title->Set('Windspeed'); +$graph2->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph2->title->SetMargin(10); + +$graph2->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph2->xaxis->scale->SetDateFormat('h:i'); +$graph2->xgrid->Show(); + +$graph2->yaxis->SetLabelAngle(45); +$graph2->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph2->yaxis->SetLabelMargin(0); +$graph2->yaxis->scale->SetAutoMin(0); + +$line2 = new LinePlot($data_windspeed,$xdata); +$line2->SetStepStyle(); +$line2->SetColor('red'); + +$graph2->Add($line2); + +//----------------------- +// Create a multigraph +//---------------------- +$mgraph = new MGraph(); +$mgraph->SetMargin(2,2,2,2); +$mgraph->SetFrame(true,'darkgray',2); +$mgraph->SetFillColor('lightgray'); +$mgraph->Add($graph); +$mgraph->Add($graph2,300,0); +$mgraph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/comb90dategraphex02.php b/Societes/ric/jpgraph/Examples/comb90dategraphex02.php new file mode 100755 index 00000000..fa9ca713 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/comb90dategraphex02.php @@ -0,0 +1,105 @@ + 359) + $data_winddirection[$i+1] = 0; + + $data_windspeed[$i+1] = $data_windspeed[$i] + rand(-2,2); + if($data_windspeed[$i+1] < 0 ) + $data_windspeed[$i+1] = 0; + + $xdata[$i] = $start + $i * SAMPLERATE; +} +$xdata[$i] = $start + $i * SAMPLERATE; + + +DEFINE('BKG_COLOR','lightgray:1.7'); +DEFINE('WIND_HEIGHT',800); +DEFINE('WIND_WIDTH',280); + +// Setup the Wind direction graph +$graph = new Graph(WIND_WIDTH,WIND_HEIGHT); +$graph->clearTheme(); +$graph->SetMarginColor(BKG_COLOR); +$graph->SetScale('datlin',0,360); +$graph->Set90AndMargin(50,10,60,30); +$graph->SetFrame(true,'white',0); +$graph->SetBox(); + +$graph->title->Set('Wind direction'); +$graph->title->SetColor('blue'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->title->SetMargin(5); + +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->xaxis->scale->SetDateFormat('h:i'); +$graph->xgrid->Show(); + +$graph->yaxis->SetLabelAngle(90); +$graph->yaxis->SetColor('blue'); +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->yaxis->SetLabelMargin(0); +$graph->yaxis->scale->SetAutoMin(0); + +$line = new LinePlot($data_winddirection,$xdata); +$line->SetStepStyle(); +$line->SetColor('blue'); + +$graph->Add($line); + +// Setup the wind speed graph +$graph2 = new Graph(WIND_WIDTH-30,WIND_HEIGHT); +$graph2->clearTheme(); +$graph2->SetScale('datlin'); +$graph2->Set90AndMargin(5,20,60,30); +$graph2->SetMarginColor(BKG_COLOR); +$graph2->SetFrame(true,'white',0); +$graph2->SetBox(); + +$graph2->title->Set('Windspeed'); +$graph2->title->SetColor('red'); +$graph2->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph2->title->SetMargin(5); + +$graph2->xaxis->HideLabels(); +$graph2->xgrid->Show(); + +$graph2->yaxis->SetLabelAngle(90); +$graph2->yaxis->SetColor('red'); +$graph2->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph2->yaxis->SetLabelMargin(0); +$graph2->yaxis->scale->SetAutoMin(0); + +$line2 = new LinePlot($data_windspeed,$xdata); +$line2->SetStepStyle(); +$line2->SetColor('red'); + +$graph2->Add($line2); + +//----------------------- +// Create a multigraph +//---------------------- +$mgraph = new MGraph(); +$mgraph->SetMargin(2,2,2,2); +$mgraph->SetFrame(true,'darkgray',2); +$mgraph->SetFillColor(BKG_COLOR); +$mgraph->Add($graph); +$mgraph->Add($graph2,280,0); +$mgraph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/comb90dategraphex03.php b/Societes/ric/jpgraph/Examples/comb90dategraphex03.php new file mode 100755 index 00000000..eda202c9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/comb90dategraphex03.php @@ -0,0 +1,150 @@ + 359) + $data_winddirection[$i+1] = 0; + + $data_windspeed[$i+1] = $data_windspeed[$i] + rand(-2,2); + if($data_windspeed[$i+1] < 0 ) + $data_windspeed[$i+1] = 0; + + $data_windtemp[$i+1] = $data_windtemp[$i] + rand(-1.5,1.5); + + $xdata[$i] = $start + $i * SAMPLERATE; +} +$xdata[$i] = $start + $i * SAMPLERATE; + + +//DEFINE('BKG_COLOR','lightgray:1.7'); +DEFINE('BKG_COLOR','green:1.98'); +DEFINE('WIND_HEIGHT',800); +DEFINE('WIND_WIDTH',250); + +//------------------------------------------------------------------ +// Setup the Wind direction graph +//------------------------------------------------------------------ +$graph = new Graph(WIND_WIDTH,WIND_HEIGHT); +$graph->clearTheme(); +$graph->SetMarginColor(BKG_COLOR); +$graph->SetScale('datlin',0,360); +$graph->Set90AndMargin(50,10,70,30); +$graph->SetFrame(true,'white',0); +$graph->SetBox(); + +$graph->title->Set('Wind direction'); +$graph->title->SetColor('blue'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->title->SetMargin(5); + +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->xaxis->scale->SetDateFormat('H:i'); +$graph->xgrid->Show(); + +$graph->yaxis->SetLabelAngle(90); +$graph->yaxis->SetColor('blue'); +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph->yaxis->SetLabelMargin(0); +$graph->yaxis->scale->SetAutoMin(0); + +$line = new LinePlot($data_winddirection,$xdata); +$line->SetStepStyle(); +$line->SetColor('blue'); + +$graph->Add($line); + +//------------------------------------------------------------------ +// Setup the wind speed graph +//------------------------------------------------------------------ +$graph2 = new Graph(WIND_WIDTH-30,WIND_HEIGHT); +$graph2->clearTheme(); +$graph2->SetScale('datlin'); +$graph2->Set90AndMargin(5,20,70,30); +$graph2->SetMarginColor(BKG_COLOR); +$graph2->SetFrame(true,'white',0); +$graph2->SetBox(); + +$graph2->title->Set('Windspeed'); +$graph2->title->SetColor('red'); +$graph2->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph2->title->SetMargin(5); + +$graph2->xaxis->HideLabels(); +$graph2->xgrid->Show(); + +$graph2->yaxis->SetLabelAngle(90); +$graph2->yaxis->SetColor('red'); +$graph2->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph2->yaxis->SetLabelMargin(0); +$graph2->yaxis->scale->SetAutoMin(0); + +$line2 = new LinePlot($data_windspeed,$xdata); +$line2->SetStepStyle(); +$line2->SetColor('red'); + +$graph2->Add($line2); + +//------------------------------------------------------------------ +// Setup the wind temp graph +//------------------------------------------------------------------ +$graph3 = new Graph(WIND_WIDTH-30,WIND_HEIGHT); +$graph3->clearTheme(); +$graph3->SetScale('datlin'); +$graph3->Set90AndMargin(5,20,70,30); +$graph3->SetMarginColor(BKG_COLOR); +$graph3->SetFrame(true,'white',0); +$graph3->SetBox(); + +$graph3->title->Set('Temperature'); +$graph3->title->SetColor('black'); +$graph3->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph3->title->SetMargin(5); + +$graph3->xaxis->HideLabels(); +$graph3->xgrid->Show(); + +$graph3->yaxis->SetLabelAngle(90); +$graph3->yaxis->SetColor('black'); +$graph3->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9); +$graph3->yaxis->SetLabelMargin(0); +$graph3->yaxis->scale->SetAutoMin(-10); + +$line3 = new LinePlot($data_windtemp,$xdata); +$line3->SetStepStyle(); +$line3->SetColor('black'); + +$graph3->Add($line3); + +//----------------------- +// Create a multigraph +//---------------------- +$mgraph = new MGraph(); +$mgraph->SetMargin(2,2,2,2); +$mgraph->SetFrame(true,'darkgray',2); +$mgraph->SetFillColor(BKG_COLOR); +$mgraph->Add($graph,0,50); +$mgraph->Add($graph2,250,50); +$mgraph->Add($graph3,460,50); +$mgraph->title->Set('Climate diagram 12 March 2009'); +$mgraph->title->SetFont(FF_ARIAL,FS_BOLD,20); +$mgraph->title->SetMargin(8); +$mgraph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/combgraphex1.php b/Societes/ric/jpgraph/Examples/combgraphex1.php new file mode 100755 index 00000000..b03b14bb --- /dev/null +++ b/Societes/ric/jpgraph/Examples/combgraphex1.php @@ -0,0 +1,89 @@ +getTicks($datax,DSUTILS_MONTH1); + +// Now create the real graph +// Combine a line and a bar graph + +// We add some grace to the end of the X-axis scale so that the first and last +// data point isn't exactly at the very end or beginning of the scale +$grace = 400000; +$xmin = $datax[0]-$grace; +$xmax = $datax[$n-1]+$grace;; + +// Overall width of graphs +$w = 450; +// Left and right margin for each graph +$lm=25; $rm=15; + +//---------------------- +// Setup the line graph +//---------------------- +$graph = new Graph($w,250); +$graph->SetScale('linlin',0,0,$xmin,$xmax); +$graph->SetMargin($lm,$rm,10,30); +$graph->SetMarginColor('white'); +$graph->SetFrame(false); +$graph->SetBox(true); +$graph->title->Set('Example of combined graph'); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,14); +$graph->xaxis->SetTickPositions($tickPositions,$minTickPositions); +$graph->xaxis->SetLabelFormatString('My',true); +$graph->xgrid->Show(); +$p1 = new LinePlot($datay,$datax); +$graph->Add($p1); + +//---------------------- +// Setup the bar graph +//---------------------- +$graph2 = new Graph($w,110); +$graph2->SetScale('linlin',0,0,$xmin,$xmax); +$graph2->SetMargin($lm,$rm,5,10); +$graph2->SetMarginColor('white'); +$graph2->SetFrame(false); +$graph2->SetBox(true); +$graph2->xgrid->Show(); +$graph2->xaxis->SetTickPositions($tickPositions,$minTickPositions); +$graph2->xaxis->SetLabelFormatString('My',true); +$graph2->xaxis->SetPos('max'); +$graph2->xaxis->HideLabels(); +$graph2->xaxis->SetTickSide(SIDE_DOWN); +$b1 = new BarPlot($datay2,$datax); +$b1->SetFillColor('teal'); +$b1->SetColor('teal:1.2'); +$graph2->Add($b1); + +//----------------------- +// Create a multigraph +//---------------------- +$mgraph = new MGraph(); +$mgraph->SetMargin(2,2,2,2); +$mgraph->SetFrame(true,'darkgray',2); +$mgraph->Add($graph); +$mgraph->Add($graph2,0,240); +$mgraph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/combgraphex2.php b/Societes/ric/jpgraph/Examples/combgraphex2.php new file mode 100755 index 00000000..27afa832 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/combgraphex2.php @@ -0,0 +1,90 @@ +SetScale('linlin',0,0,$xmin,$xmax); +$graph->SetMargin($lm,$rm,10,30); +$graph->SetMarginColor('white'); +$graph->SetFrame(false); +$graph->SetBox(true); +$graph->title->Set('Example of combined graph with background'); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,14); +$graph->xaxis->SetTickPositions($tickPositions,$minTickPositions); +$graph->xaxis->SetLabelFormatString('My',true); +$graph->xgrid->Show(); +$p1 = new LinePlot($datay,$datax); +$graph->Add($p1); + +//---------------------- +// Setup the bar graph +//---------------------- +$graph2 = new Graph($w,110); +$graph2->SetScale('linlin',0,0,$xmin,$xmax); +$graph2->SetMargin($lm,$rm,5,10); +$graph2->SetMarginColor('white'); +$graph2->SetFrame(false); +$graph2->SetBox(true); +$graph2->xgrid->Show(); +$graph2->xaxis->SetTickPositions($tickPositions,$minTickPositions); +$graph2->xaxis->SetLabelFormatString('My',true); +$graph2->xaxis->SetPos('max'); +$graph2->xaxis->HideLabels(); +$graph2->xaxis->SetTickSide(SIDE_DOWN); +$b1 = new BarPlot($datay2,$datax); +$b1->SetFillColor('teal'); +$b1->SetColor('teal:1.2'); +$graph2->Add($b1); + +//----------------------- +// Create a multigraph +//---------------------- +$mgraph = new MGraph(); +$mgraph->SetImgFormat('jpeg',60); +$mgraph->SetMargin(2,2,2,2); +$mgraph->SetFrame(true,'darkgray',2); +$mgraph->SetBackgroundImage('tiger1.jpg'); +$mgraph->AddMix($graph,0,0,85); +$mgraph->AddMix($graph2,0,250,85); +$mgraph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/contour2_ex1.php b/Societes/ric/jpgraph/Examples/contour2_ex1.php new file mode 100755 index 00000000..764a8f29 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/contour2_ex1.php @@ -0,0 +1,50 @@ +SetMargin(30, 30, 40, 30); +$graph->SetScale('intint'); +$graph->SetMarginColor('white'); + +// Setup title of graph +$graph->title->Set('Filled contour plot'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); + +$graph->subtitle->Set('(With lines and labels)'); +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10); + +// Create a new contour plot +$cp = new FilledContourPlot($data); + +// Use only blue/red color schema +$cp->UseHighContrastColor(true); + +// Flip visually +$cp->SetInvert(); + +// Fill the contours +$cp->SetFilled(true); + +// Display the labels +$cp->ShowLabels(true,true); +$cp->SetFont(FF_ARIAL,FS_BOLD,9); +$cp->SetFontColor('white'); + +// And add the plot to the graph +$graph->Add($cp); + +// Send it back to the client +$graph->stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/contour2_ex2.php b/Societes/ric/jpgraph/Examples/contour2_ex2.php new file mode 100755 index 00000000..b702626b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/contour2_ex2.php @@ -0,0 +1,51 @@ +SetMargin(30, 30, 40, 30); +$graph->SetScale('intint'); +$graph->SetMarginColor('white'); + +// Setup title of graph +$graph->title->Set('Filled contour plot'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); + +$graph->subtitle->Set('(No lines, no labels)'); +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10); + +// Create a new contour plot +$cp = new FilledContourPlot($data); + +// Use only blue/red color schema +$cp->UseHighContrastColor(true); + +// Flip visually +$cp->SetInvert(); + +// Fill the contours +$cp->SetFilled(true); + +// No labels +$cp->ShowLabels(false); + +// No lines +$cp->ShowLines(false); + +// And add the plot to the graph +$graph->Add($cp); + +// Send it back to the client +$graph->stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/contour2_ex3.php b/Societes/ric/jpgraph/Examples/contour2_ex3.php new file mode 100755 index 00000000..93f7611d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/contour2_ex3.php @@ -0,0 +1,55 @@ +SetMargin(30, 30, 40, 30); +$graph->SetScale('intint'); +$graph->SetMarginColor('white'); + +// Setup title of graph +$graph->title->Set('Filled contour plot'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); + +$graph->subtitle->Set('(Manual colors)'); +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10); + +// Create a new contour plot with only 3 isobars +$cp = new FilledContourPlot($data,3); + +// Specify the colors manually +$isobar_colors = array('lightgray','teal:1.3','orange','red'); +$cp->SetIsobarColors($isobar_colors); + +// Use only blue/red color schema +$cp->UseHighContrastColor(true); + +// Flip visually +$cp->SetInvert(); + +// Fill the contours +$cp->SetFilled(true); + +// Display labels +$cp->ShowLabels(true); + +// No lines +$cp->ShowLines(false); + +// And add the plot to the graph +$graph->Add($cp); + +// Send it back to the client +$graph->stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/contour2_ex4.php b/Societes/ric/jpgraph/Examples/contour2_ex4.php new file mode 100755 index 00000000..79e43e89 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/contour2_ex4.php @@ -0,0 +1,47 @@ +SetMargin(30, 30, 40, 30); +$graph->SetScale('intint'); +$graph->SetMarginColor('white'); + +// Setup title of graph +$graph->title->Set('Filled contour plot'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); + +$graph->subtitle->Set('(labels follows gradients)'); +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10); + +// Create a new contour plot +$cp = new FilledContourPlot($data,8); + +// Flip visually +$cp->SetInvert(); + +// Fill the contours +$cp->SetFilled(true); + +// Display the labels +$cp->ShowLabels(true,true); +$cp->SetFont(FF_ARIAL,FS_BOLD,9); +$cp->SetFontColor('black'); + +// And add the plot to the graph +$graph->Add($cp); + +// Send it back to the client +$graph->stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/contour2_ex5.php b/Societes/ric/jpgraph/Examples/contour2_ex5.php new file mode 100755 index 00000000..1d3ac433 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/contour2_ex5.php @@ -0,0 +1,52 @@ +SetMargin(30, 30, 40, 30); +$graph->SetScale('intint'); +$graph->SetMarginColor('white'); + +// Setup title of graph +$graph->title->Set('Filled contour plot'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); + +$graph->subtitle->Set('(horizontal labels)'); +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10); + +// Create a new contour plot +$cp = new FilledContourPlot($data,8); + +// Use only black/and white schema +$cp->UseHighContrastColor(true,true); + +// Flip visually +$cp->SetInvert(); + +// Fill the contours +$cp->SetFilled(true); +// Show lines in red +$cp->ShowLines(true,'red'); + +// Display the labels +$cp->ShowLabels(true,false); +$cp->SetFont(FF_ARIAL,FS_BOLD,9); +$cp->SetFontColor('white'); + +// And add the plot to the graph +$graph->Add($cp); + +// Send it back to the client +$graph->stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/contour2_ex6.php b/Societes/ric/jpgraph/Examples/contour2_ex6.php new file mode 100755 index 00000000..49755bee --- /dev/null +++ b/Societes/ric/jpgraph/Examples/contour2_ex6.php @@ -0,0 +1,53 @@ +SetMargin(30, 30, 40, 30); +$graph->SetScale('intint'); +$graph->SetMarginColor('white'); + +// Setup title of graph +$graph->title->Set('Filled contour plot'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); + +$graph->subtitle->Set('(With lines and labels)'); +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10); + +// Create a new contour plot +$cp = new FilledContourPlot($data,7); + +// Use only blue/red color schema +$cp->UseHighContrastColor(true); + +// Flip visually +$cp->SetInvert(); + +// Fill the contours +$cp->SetFilled(true); + +// Specify method to use +$cp->SetMethod('rect'); + +// Display the labels +$cp->ShowLabels(true,true); +$cp->SetFont(FF_ARIAL,FS_BOLD,9); +$cp->SetFontColor('white'); + +// And add the plot to the graph +$graph->Add($cp); + +// Send it back to the client +$graph->stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/contour2_ex7.php b/Societes/ric/jpgraph/Examples/contour2_ex7.php new file mode 100755 index 00000000..b83d3dd9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/contour2_ex7.php @@ -0,0 +1,53 @@ +SetMargin(30, 30, 40, 30); +$graph->SetScale('intint'); +$graph->SetMarginColor('white'); + +// Setup title of graph +$graph->title->Set('Filled contour plot'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); + +$graph->subtitle->Set('(With lines and labels)'); +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10); + +// Create a new contour plot +$cp = new FilledContourPlot($data,7); + +// Use only blue/red color schema +$cp->UseHighContrastColor(true); + +// Flip visually +$cp->SetInvert(); + +// Fill the contours +$cp->SetFilled(true); + +// Specify method to use +$cp->SetMethod('tri'); + +// Display the labels +$cp->ShowLabels(true,true); +$cp->SetFont(FF_ARIAL,FS_BOLD,9); +$cp->SetFontColor('white'); + +// And add the plot to the graph +$graph->Add($cp); + +// Send it back to the client +$graph->stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/contourex01.php b/Societes/ric/jpgraph/Examples/contourex01.php new file mode 100755 index 00000000..eb2cb99c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/contourex01.php @@ -0,0 +1,48 @@ +SetMargin(40,140,60,40); + +$graph->title->Set('Example of contour plot'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +// For contour plots it is custom to use a box style ofr the axis +$graph->legend->SetPos(0.05,0.5,'right','center'); +$graph->SetScale('intint'); +$graph->SetAxisStyle(AXSTYLE_BOXOUT); +$graph->xgrid->Show(); +$graph->ygrid->Show(); + + +// A simple contour plot with default arguments (e.g. 10 isobar lines) +$cp = new ContourPlot($data); + +// Display the legend +$cp->ShowLegend(); + +// Make the isobar lines slightly thicker +$cp->SetLineWeight(2); +$graph->Add($cp); + +// ... and send the graph back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/contourex02.php b/Societes/ric/jpgraph/Examples/contourex02.php new file mode 100755 index 00000000..73dee150 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/contourex02.php @@ -0,0 +1,42 @@ +SetMargin(40,140,60,40); + +$graph->title->Set("Example of contour plot"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +// For contour plots it is custom to use a box style ofr the axis +$graph->legend->SetPos(0.05,0.5,'right','center'); +$graph->SetScale('intint'); +$graph->SetAxisStyle(AXSTYLE_BOXOUT); +$graph->xgrid->Show(); +$graph->ygrid->Show(); + + +// A simple contour plot with 12 isobar lines and flipped Y-coordinates +$cp = new ContourPlot($data,12,true); + +// Display the legend +$cp->ShowLegend(); + +// Make the isobar lines slightly thicker +$graph->Add($cp); + +// ... and send the graph back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/contourex03.php b/Societes/ric/jpgraph/Examples/contourex03.php new file mode 100755 index 00000000..ea430812 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/contourex03.php @@ -0,0 +1,51 @@ +SetMargin(40,140,60,40); + +// Enable antialias. Note with antiaaliasing only line weight=1 is supported. +$graph->img->SetAntiAliasing(); + +$graph->title->Set("Example of contour plot"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +// For contour plots it is custom to use a box style ofr the axis +$graph->legend->SetPos(0.05,0.5,'right','center'); +$graph->SetScale('intint'); +$graph->SetAxisStyle(AXSTYLE_BOXOUT); +$graph->xgrid->Show(); +$graph->ygrid->Show(); + + +// A simple contour plot with 19 isobars and flipped vertical range +$cp = new ContourPlot($data,10,true); + +// Display the legend +$cp->ShowLegend(); + +// Invert the legend to th lowest isobar is on top +$cp->Invertlegend(); +$graph->Add($cp); + +// ... and send the graph back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/contourex04.php b/Societes/ric/jpgraph/Examples/contourex04.php new file mode 100755 index 00000000..d37f13b5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/contourex04.php @@ -0,0 +1,50 @@ +SetMargin(40,140,60,40); + +$graph->title->Set("Example of interpolated contour plot"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->title->SetMargin(10); + +// For contour plots it is custom to use a box style ofr the axis +$graph->legend->SetPos(0.05,0.5,'right','center'); +$graph->SetScale('intint'); + +// Setup axis and grids +$graph->SetAxisStyle(AXSTYLE_BOXOUT); +$graph->xgrid->SetLineStyle('dashed'); +$graph->xgrid->Show(true); +$graph->ygrid->SetLineStyle('dashed'); +$graph->ygrid->Show(true); + +// A simple contour plot with 10 isobar lines and flipped Y-coordinates +// Make the data smoother by interpolate the original matrice by a factor of two +// which will make each grid cell half the original size +$cp = new ContourPlot($data,10, 2); + +$cp->UseHighContrastColor(true); + +// Display the legend +$cp->ShowLegend(); + +// Make the isobar lines slightly thicker +$graph->Add($cp); + +// ... and send the graph back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/contourex05.php b/Societes/ric/jpgraph/Examples/contourex05.php new file mode 100755 index 00000000..4af9ca8b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/contourex05.php @@ -0,0 +1,59 @@ +SetMargin(40,120,60,50); + +$graph->title->Set("Contour plot, high contrast color"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->SetMargin(10); + +// For contour plots it is custom to use a box style ofr the axis +$graph->SetScale('intint',0,56,0,56); + +// Setup axis and grids +$graph->SetAxisStyle(AXSTYLE_BOXOUT); +$graph->xgrid->Show(true); +$graph->ygrid->Show(true); + +// A simple contour plot with 10 isobar lines and flipped Y-coordinates +// Make the data smoother by interpolate the original matrice by a factor of two +// which will make each grid cell half the original size +$cp = new ContourPlot($data,10, 3); + +$cp->UseHighContrastColor(true); + +// Display the legend +$cp->ShowLegend(); + +// Make the isobar lines slightly thicker +$graph->Add($cp); + +// ... and send the graph back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/csim_in_html_ex1.php b/Societes/ric/jpgraph/Examples/csim_in_html_ex1.php new file mode 100755 index 00000000..2c08e095 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/csim_in_html_ex1.php @@ -0,0 +1,61 @@ + + + +GetHTMLImageMap($_mapname); +echo $imgmap; + +?> + +

      This is an example page with CSIM graphs with arbitrary HTML text

      + +Clicked on bar: <none>
      '; +} +else { + echo 'Clicked on bar: '.$_GET['clickedon'].''; +} +echo '

      '; +?> + +

      First we need to get hold of the image map and include it in the HTML + page.

      +

      For this graph it is:

      +'.htmlentities($imgmap).'
    4. ';?> + + tag and rebuild the +$imgtag = $graph->GetCSIMImgHTML($_mapname,$_graphfilename); +?> +

      The graph is then be displayed as shown in figure 1. With the following + created <img> tag:

      +
      
      +
      +
      + + +

      + +
      Figure 1. The included CSIM graph. +

      + + + diff --git a/Societes/ric/jpgraph/Examples/csim_in_html_ex2.php b/Societes/ric/jpgraph/Examples/csim_in_html_ex2.php new file mode 100755 index 00000000..c94bda3c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/csim_in_html_ex2.php @@ -0,0 +1,100 @@ + + + +GetHTMLImageMap($_mapname1); +$imgmap2 = $piegraph->GetHTMLImageMap($_mapname2); +echo $imgmap1; +echo $imgmap2; + +?> + +

      This is an example page with CSIM graphs with arbitrary HTML text

      + +Clicked on bar: <none>'; +} +else { + echo 'Clicked on bar: '.$_GET['clickedon'].''; +} +echo '

      '; +if( empty($_GET['pie_clickedon']) ) { + echo 'Clicked on pie slice: <none>'; +} +else { + echo 'Clicked on pie slice: '.$_GET['pie_clickedon'].''; +} +echo '

      '; +?> + +

      First we need to get hold of the image maps and include them in the HTML + page.

      +

      For these graphs the maps are:

      +
      '.htmlentities($imgmap1).'
      '; +?> +

      +and +

      +
      '.htmlentities($imgmap2).'
      '; +?> + + tags for Figure 1 & 2 and rebuild the URL arguments +$imgtag1 = $graph->GetCSIMImgHTML($_mapname1,$_graphfilename1); +$imgtag2 = $piegraph->GetCSIMImgHTML($_mapname2,$_graphfilename2); +?> +

      The graphs are then displayed as shown in figure 1 & 2. With the following + created <img> tags:

      +
      +
      +
      + +

      +Note: For the Pie the center is counted as the first slice. +

      + +

      + + + + +
      + +
      Figure 1. The included Bar CSIM graph. +

      +
      + +
      Figure 2. The included Pie CSIM graph. +

      +
      + + diff --git a/Societes/ric/jpgraph/Examples/csim_in_html_graph_ex1.php b/Societes/ric/jpgraph/Examples/csim_in_html_graph_ex1.php new file mode 100755 index 00000000..b734c860 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/csim_in_html_graph_ex1.php @@ -0,0 +1,46 @@ +SetScale('textlin'); +$graph->SetMargin(50,80,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +$n = count($datay) ; // Number of bars + +global $_wrapperfilename; + +// Create targets for the image maps. One for each column +$targ = array(); $alt = array(); $wtarg = array(); +for( $i=0; $i < $n; ++$i ) { + $urlarg = 'clickedon='.($i+1); + $targ[] = $_wrapperfilename.'?'.$urlarg; + $alt[] = 'val=%d'; + $wtarg[] = ''; +} +$bplot->SetCSIMTargets($targ,$alt,$wtarg); + +$graph->Add($bplot); + +$graph->title->Set('Multiple Image maps'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->title->SetCSIMTarget('#45','Title for Bar','_blank'); + +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetCSIMTarget('#55','Y-axis title'); +$graph->yaxis->title->Set("Y-title"); + +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetCSIMTarget('#55','X-axis title'); +$graph->xaxis->title->Set("X-title"); + +// Send back the image when we are called from within the tag +$graph->StrokeCSIMImage(); + +?> diff --git a/Societes/ric/jpgraph/Examples/csim_in_html_graph_ex2.php b/Societes/ric/jpgraph/Examples/csim_in_html_graph_ex2.php new file mode 100755 index 00000000..8c59c0c3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/csim_in_html_graph_ex2.php @@ -0,0 +1,75 @@ +SetFrame(false); + +// Setup title +$piegraph->title->Set("CSIM Center Pie plot"); +$piegraph->title->SetFont(FF_ARIAL,FS_BOLD,18); +$piegraph->title->SetMargin(8); // Add a little bit more margin from the top + +// Create the pie plot +$p1 = new PiePlotC($data); + +// Set the radius of pie (as fraction of image size) +$p1->SetSize(0.32); + +// Label font and color setup +$p1->value->SetFont(FF_ARIAL,FS_BOLD,11); +$p1->value->SetColor('white'); + +// Setup the title on the center circle +$p1->midtitle->Set("Distribution\n2008 H1"); +$p1->midtitle->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Set color for mid circle +$p1->SetMidColor('yellow'); + +// Use percentage values in the legends values (This is also the default) +$p1->SetLabelType(PIE_VALUE_PER); + +// The label array values may have printf() formatting in them. The argument to the +// form,at string will be the value of the slice (either the percetage or absolute +// depending on what was specified in the SetLabelType() above. +$lbl = array("Jan\n%.1f%%","Feb\n%.1f%%","March\n%.1f%%", + "Apr\n%.1f%%","May\n%.1f%%","Jun\n%.1f%%"); +$p1->SetLabels($lbl); + +// Add drop shadow to slices +$p1->SetShadow(); + +// Explode all slices 15 pixels +$p1->ExplodeAll(15); + +// Setup the CSIM targets +global $_wrapperfilename; +$targ = array(); $alt = array(); $wtarg = array(); +for( $i=0; $i <= $n; ++$i ) { + $urlarg = 'pie_clickedon='.($i+1); + $targ[] = $_wrapperfilename.'?'.$urlarg; + $alt[] = 'val=%d'; + $wtarg[] = ''; +} +$p1->SetCSIMTargets($targ,$alt,$wtarg); +$p1->SetMidCSIM($targ[0],$alt[0],$wtarg[0]); + +// Add plot to pie graph +$piegraph->Add($p1); + +// Send back the image when we are called from within the tag +$piegraph->StrokeCSIMImage(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/datamatrix_ex0.php b/Societes/ric/jpgraph/Examples/datamatrix_ex0.php new file mode 100755 index 00000000..8de25222 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/datamatrix_ex0.php @@ -0,0 +1,18 @@ +SetEncoding(ENCODING_ASCII); +$backend = DatamatrixBackendFactory::Create($encoder); + +// We increase the module width to 3 pixels +$backend->SetModuleWidth(3); + +try { + $backend->Stroke($data); +} catch (Exception $e) { + echo 'Datamatrix error: '.$e->GetMessage()."\n"; + exit(1); +} +?> diff --git a/Societes/ric/jpgraph/Examples/datamatrix_ex00.php b/Societes/ric/jpgraph/Examples/datamatrix_ex00.php new file mode 100755 index 00000000..1aec89f3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/datamatrix_ex00.php @@ -0,0 +1,9 @@ +Stroke($data); +?> diff --git a/Societes/ric/jpgraph/Examples/datamatrix_ex1.php b/Societes/ric/jpgraph/Examples/datamatrix_ex1.php new file mode 100755 index 00000000..a2e73583 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/datamatrix_ex1.php @@ -0,0 +1,18 @@ +SetModuleWidth(3); + +// Create the barcode from the given data string and write to output file +try { + $backend->Stroke($data); +} catch (Exception $e) { + $errstr = $e->GetMessage(); + echo "Datamatrix error message: $errstr\n"; +} + +?> diff --git a/Societes/ric/jpgraph/Examples/datamatrix_ex2.php b/Societes/ric/jpgraph/Examples/datamatrix_ex2.php new file mode 100755 index 00000000..e7c9462b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/datamatrix_ex2.php @@ -0,0 +1,21 @@ +SetEncoding(ENCODING_BASE256); + +// Create the image backend (default) +$backend = DatamatrixBackendFactory::Create($encoder); +$backend->SetModuleWidth(3); + +try { + $backend->Stroke($data); +} catch (Exception $e) { + $errstr = $e->GetMessage(); + echo "Datamatrix error message: $errstr\n"; +} + +?> diff --git a/Societes/ric/jpgraph/Examples/datamatrix_ex3.php b/Societes/ric/jpgraph/Examples/datamatrix_ex3.php new file mode 100755 index 00000000..6b6b8279 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/datamatrix_ex3.php @@ -0,0 +1,21 @@ +SetEncoding(ENCODING_BASE256); + +// Create the image backend (default) +$backend = DatamatrixBackendFactory::Create($encoder); +$backend->SetModuleWidth(3); + +try { + $backend->Stroke($data); +} catch (Exception $e) { + $errstr = $e->GetMessage(); + echo "Datamatrix error message: $errstr\n"; +} + +?> diff --git a/Societes/ric/jpgraph/Examples/datamatrix_ex4.php b/Societes/ric/jpgraph/Examples/datamatrix_ex4.php new file mode 100755 index 00000000..77b36674 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/datamatrix_ex4.php @@ -0,0 +1,25 @@ +SetEncoding(ENCODING_TEXT); + +// Create the image backend (default) +$backend = DatamatrixBackendFactory::Create($encoder); +$backend->SetModuleWidth(3); + +// Adjust the Quiet zone +$backend->SetQuietZone(10); + +// Create the barcode from the given data string and write to output file +try { + $backend->Stroke($data); +} catch (Exception $e) { + $errstr = $e->GetMessage(); + echo "Datamatrix error message: $errstr\n"; +} + +?> diff --git a/Societes/ric/jpgraph/Examples/datamatrix_ex5.php b/Societes/ric/jpgraph/Examples/datamatrix_ex5.php new file mode 100755 index 00000000..9242252e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/datamatrix_ex5.php @@ -0,0 +1,30 @@ +SetEncoding(ENCODING_TEXT); + +// Create the image backend (default) +$backend = DatamatrixBackendFactory::Create($encoder); + +// By default the module width is 2 pixel so we increase it a bit +$backend->SetModuleWidth(4); + +// Set Quiet zone +$backend->SetQuietZone(10); + +// Set other than default colors (one, zero, quiet zone/background) +$backend->SetColor('navy','white','lightgray'); + +// Create the barcode from the given data string and write to output file +try { + $backend->Stroke($data); +} catch (Exception $e) { + $errstr = $e->GetMessage(); + echo "Datamatrix error message: $errstr\n"; +} + +?> diff --git a/Societes/ric/jpgraph/Examples/datamatrix_ex6.php b/Societes/ric/jpgraph/Examples/datamatrix_ex6.php new file mode 100755 index 00000000..918bc4b1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/datamatrix_ex6.php @@ -0,0 +1,33 @@ +SetEncoding(ENCODING_TEXT); + +// Create the image backend (default) +$backend = DatamatrixBackendFactory::Create($encoder); +$backend->SetModuleWidth(5); +$backend->SetQuietZone(10); + +// Set other than default colors (one, zero, background) +$backend->SetColor('navy','white'); + +// Create the barcode from the given data string and write to output file +$dir = dirname(__FILE__); +$file = '"'.$dir.'/'.$outputfile.'"'; +try { + $backend->Stroke($data,$outputfile); + echo 'Barcode sucessfully written to file: '.$file; +} catch (Exception $e) { + $errstr = $e->GetMessage(); + $errcode = $e->GetCode(); + echo "Failed writing file: ".$file.'
      '; + echo "Datamatrix error ($errcode). Message: $errstr\n"; +} + +?> diff --git a/Societes/ric/jpgraph/Examples/datamatrix_ex7.php b/Societes/ric/jpgraph/Examples/datamatrix_ex7.php new file mode 100755 index 00000000..a27d42cf --- /dev/null +++ b/Societes/ric/jpgraph/Examples/datamatrix_ex7.php @@ -0,0 +1,22 @@ +SetEncoding(ENCODING_BASE256); + +// Create the image backend (default) +$backend = DatamatrixBackendFactory::Create($encoder, BACKEND_ASCII); +$backend->SetModuleWidth(3); + +try { + $ps_txt = $backend->Stroke($data); + echo '

      '.$ps_txt.'
      '; +} catch (Exception $e) { + $errstr = $e->GetMessage(); + echo "Datamatrix error message: $errstr\n"; +} + +?> diff --git a/Societes/ric/jpgraph/Examples/dataset01.inc.php b/Societes/ric/jpgraph/Examples/dataset01.inc.php new file mode 100755 index 00000000..6ac7f2b0 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/dataset01.inc.php @@ -0,0 +1,275 @@ + 1.0885908919277, 1 => + 0.99034385297982, 2 => 0.97005467188578, 3 => + 0.99901201350824, 4 => 1.1263167971152, 5 => + 1.0582808133448, 6 => 1.0216740689064, 7 => + 0.96626236356644, 8 => 1.0125912828768, 9 => + 0.99047473992496, 10 => 0.99102472104561, 11 => + 0.98500781573283, 12 => 0.91933668914198, 13 => + 0.92234602792711, 14 => 0.88933863410054, 15 => + 0.94236150975178, 16 => 0.98924287679116, 17 => + 1.0342765545566, 18 => 1.0538510278089, 19 => + 0.93496076181191, 20 => 0.90944479677235, 21 => + 0.80831866316983, 22 => 0.81912434615535, 23 => + 0.83143770042109, 24 => 0.86972168159496, 25 => + 0.92645774571577, 26 => 0.81169120061422, 27 => + 0.84409853057606, 28 => 0.89065856249272, 29 => + 0.83551478929348, 30 => 0.87015680306726, 31 => + 0.76063327042172, 32 => 0.82720958380697, 33 => + 0.86565279505723, 34 => 0.77858966246836, 35 => + 0.81009606378237, 36 => 0.80485136798149, 37 => + 0.82641461943804, 38 => 0.87442020676513, 39 => + 0.89589150146825, 40 => 0.92082995956816, 41 => + 0.92614241931726, 42 => 0.96915564652581, 43 => + 1.003753706293, 44 => 0.97438809368023, 45 => + 1.011556766867, 46 => 1.0785692014115, 47 => + 1.0586915420364, 48 => 1.284210059027, 49 => + 1.3424512661794, 50 => 1.1743365450983, 51 => + 1.2387345559532, 52 => 1.2485728609648, 53 => + 1.2330096418558, 54 => 1.1857882621709, 55 => + 1.2344956522411, 56 => 1.2047675730648, 57 => + 1.292419000136, 58 => 1.3405480219013, 59 => + 1.3971752198648, 60 => 1.4359555309649, 61 => + 1.3243735045701, 62 => 1.2359389187087, 63 => + 1.2201320423161, 64 => 1.3602246705197, 65 => + 1.360886940568, 66 => 1.3493553211075, 67 => + 1.4401769929405, 68 => 1.3979767849951, 69 => + 1.4545882591647, 70 => 1.337801210539, 71 => + 1.3793601365977, 72 => 1.4586769476223, 73 => + 1.5230946076475, 74 => 1.4124735946125, 75 => + 1.4030318592551, 76 => 1.349158816711, 77 => + 1.3994840622105, 78 => 1.4239672612346, 79 => + 1.40812256221, 80 => 1.4583856197192, 81 => + 1.4613314581567, 82 => 1.6756755916668, 83 => + 1.8580313939158, 84 => 1.8342360959805, 85 => + 1.9216082598086, 86 => 1.9478846253628, 87 => + 2.0244872112436, 88 => 1.9560660777181, 89 => + 1.8415152640121, 90 => 1.8471764273372, 91 => + 1.8889886695023, 92 => 1.8195007209252, 93 => + 1.8960270595999, 94 => 1.8644490575386, 95 => + 1.971196340772, 96 => 2.015583152659, 97 => + 1.9959882430428, 98 => 2.1063668082622, 99 => + 2.1719175769191, 100 => 2.1875938345039, 101 => + 2.1587594039981, 102 => 2.1278241823627, 103 => + 2.298793912594, 104 => 2.3723774302753, 105 => + 2.4413392788904, 106 => 2.4834594954125, 107 => + 2.5164271989421, 108 => 2.48274719503, 109 => + 2.4492997581034, 110 => 2.1412357263019, 111 => + 2.0314268112566, 112 => 1.9596098764628, 113 => + 2.0250983127109, 114 => 1.924959829851, 115 => + 1.9603612943993, 116 => 2.0540576271866, 117 => + 2.0568349960689, 118 => 2.0811524692325, 119 => + 2.0581964759165, 120 => 2.020162840272, 121 => + 2.0626517638667, 122 => 1.9286563823225, 123 => + 2.0127912437563, 124 => 1.9491858277931, 125 => + 1.8692310150316, 126 => 1.6993275416762, 127 => + 1.5849680675709, 128 => 1.5422481968304, 129 => + 1.603188853916, 130 => 1.6449504349551, 131 => + 1.6570332084417, 132 => 1.7563884552262, 133 => + 1.7346008663135, 134 => 1.741307942998, 135 => + 1.7415848536123, 136 => 1.7014366147405, 137 => + 1.6719646364256, 138 => 1.7092888030342, 139 => + 1.7371529028402, 140 => 1.7019154041991, 141 => + 1.7662473702497, 142 => 1.8480766044197, 143 => + 1.8355114169662, 144 => 1.7819817315586, 145 => + 1.7148079481036, 146 => 1.6241989833489, 147 => + 1.4624626548138, 148 => 1.5040542012939, 149 => + 1.442295346913, 150 => 1.4187087000604, 151 => + 1.4225097958511, 152 => 1.5001324671865, 153 => + 1.4584802723727, 154 => 1.5342572961469, 155 => + 1.514133174734, 156 => 1.5443934302345, 157 => + 1.5476883863698, 158 => 1.6080128685721, 159 => + 1.5816649899396, 160 => 1.5310436755918, 161 => + 1.518280754595, 162 => 1.5216184249044, 163 => + 1.4393414811719, 164 => 1.409379582707, 165 => + 1.436861898056, 166 => 1.4739894373751, 167 => + 1.4512785421546, 168 => 1.496057581316, 169 => + 1.3817455776456, 170 => 1.2990312802211, 171 => + 1.3073949130374, 172 => 1.2473214566896, 173 => + 1.1105915111374, 174 => 1.0420360580822, 175 => + 1.1744654786356, 176 => 1.0602876800127, 177 => + 1.074408841208, 178 => 1.18387615056, 179 => + 1.1890999077101, 180 => 1.0549293038746, 181 => + 1.0570601708416, 182 => 1.0800216692849, 183 => + 0.96274117702549, 184 => 0.9501673977047, 185 => + 0.97710108451711, 186 => 0.89886322996001, 187 => + 0.9239453369566, 188 => 0.96299807255386, 189 => + 1.0105532418267, 190 => 1.0164009465948, 191 => + 1.0413107606824, 192 => 1.0475248122459, 193 => + 1.0266007451985, 194 => 1.0159556206533, 195 => + 1.0943852922517, 196 => 1.0750418553654, 197 => + 0.97774129938915, 198 => 0.98590717162284, 199 => + 0.87713795242119, 200 => 0.90770624057599, 201 => + 0.87557547650302, 202 => 0.95754187545856, 203 => + 1.0111465867283, 204 => 0.93224663470275, 205 => + 0.93886113881632, 206 => 0.94128877256653, 207 => + 0.9559086414866, 208 => 0.97782683000598, 209 => + 1.0648991708916, 210 => 1.1759619281479, 211 => + 1.1323001889786, 212 => 1.2173222321276, 213 => + 1.192219780365, 214 => 1.1507367671992, 215 => + 1.0062415877475, 216 => 1.0017043563084, 217 => + 0.94468309902865, 218 => 0.99384124056529, 219 => + 1.0514822705943, 220 => 1.0451723914426, 221 => + 1.0776122119814, 222 => 1.2013601009631, 223 => + 1.1765086398423, 224 => 1.2387735028784, 225 => + 1.2441365026242, 226 => 1.2694500268723, 227 => + 1.2789962941485, 228 => 1.2442094256309, 229 => + 1.2352688438234, 230 => 1.2571277155372, 231 => + 1.3291795377077, 232 => 1.2703480599183, 233 => + 1.30729508393, 234 => 1.3233030218068, 235 => + 1.2861232143244, 236 => 1.3168684998023, 237 => + 1.2499001566772, 238 => 1.2622769692485, 239 => + 1.2160789893735, 240 => 1.2288877111321, 241 => + 1.222967255453, 242 => 1.2998243638567, 243 => + 1.3443008723449, 244 => 1.339680674028, 245 => + 1.3779965791538, 246 => 1.3560080691721, 247 => + 1.3470544172094, 248 => 1.3166882067851, 249 => + 1.4452459865932, 250 => 1.4514278120119, 251 => + 1.413690283372, 252 => 1.4178934332405, 253 => + 1.4237414657565, 254 => 1.3777636409301, 255 => + 1.4041849448389, 256 => 1.4049533546771, 257 => + 1.4277375831259, 258 => 1.4224090113077, 259 => + 1.4647907974628, 260 => 1.4243190632657, 261 => + 1.4286580133998, 262 => 1.4348828641501, 263 => + 1.415409243977, 264 => 1.4476028555859, 265 => + 1.4538821661641, 266 => 1.4883184435336, 267 => + 1.4205032194634, 268 => 1.3856543933372, 269 => + 1.2716906168086, 270 => 1.3462117624752, 271 => + 1.3003015423298, 272 => 1.2148491725878, 273 => + 1.2605381058318, 274 => 1.2690047369619, 275 => + 1.3327723638582, 276 => 1.3118643588249, 277 => + 1.293007944258, 278 => 1.2548761810876, 279 => + 1.3335015938603, 280 => 1.3152744239077, 281 => + 1.2564376463182, 282 => 1.2478417859372, 283 => + 1.2518821298414, 284 => 1.2036453589032, 285 => + 1.1798564480155, 286 => 1.2062515260098, 287 => + 1.2129817801455, 288 => 1.1405762096618, 289 => + 1.0161049810033, 290 => 1.0030124197677, 291 => + 1.0111565082559, 292 => 1.0084286839061, 293 => + 0.95068297130577, 294 => 1.0450005357207, 295 => + 1.211596899292, 296 => 1.3762615912002, 297 => + 1.530127116787, 298 => 1.5167370832585, 299 => + 1.6259521507076, 300 => 1.6518467383405, 301 => + 1.7713043850286, 302 => 1.6396708687084, 303 => + 1.6116177484122, 304 => 1.5225729470695, 305 => + 1.6101471149808); + + +$xdata = array( + + 0 => 444348000, 1 => 446853600, 2 => + 449532000, 3 => 452124000, 4 => 454802400, 5 => + 457394400, 6 => 460072800, 7 => 462751200, 8 => + 465343200, 9 => 468021600, 10 => 470613600, 11 => + 473292000, 12 => 475970400, 13 => 478389600, 14 => + 481068000, 15 => 483660000, 16 => 486338400, 17 => + 488930400, 18 => 491608800, 19 => 494287200, 20 => + 496879200, 21 => 499557600, 22 => 502149600, 23 => + 504828000, 24 => 507506400, 25 => 509925600, 26 => + 512604000, 27 => 515196000, 28 => 517874400, 29 => + 520466400, 30 => 523144800, 31 => 525823200, 32 => + 528415200, 33 => 531093600, 34 => 533685600, 35 => + 536364000, 36 => 539042400, 37 => 541461600, 38 => + 544140000, 39 => 546732000, 40 => 549410400, 41 => + 552002400, 42 => 554680800, 43 => 557359200, 44 => + 559951200, 45 => 562629600, 46 => 565221600, 47 => + 567900000, 48 => 570578400, 49 => 573084000, 50 => + 575762400, 51 => 578354400, 52 => 581032800, 53 => + 583624800, 54 => 586303200, 55 => 588981600, 56 => + 591573600, 57 => 594252000, 58 => 596844000, 59 => + 599522400, 60 => 602200800, 61 => 604620000, 62 => + 607298400, 63 => 609890400, 64 => 612568800, 65 => + 615160800, 66 => 617839200, 67 => 620517600, 68 => + 623109600, 69 => 625788000, 70 => 628380000, 71 => + 631058400, 72 => 633736800, 73 => 636156000, 74 => + 638834400, 75 => 641426400, 76 => 644104800, 77 => + 646696800, 78 => 649375200, 79 => 652053600, 80 => + 654645600, 81 => 657324000, 82 => 659916000, 83 => + 662594400, 84 => 665272800, 85 => 667692000, 86 => + 670370400, 87 => 672962400, 88 => 675640800, 89 => + 678232800, 90 => 680911200, 91 => 683589600, 92 => + 686181600, 93 => 688860000, 94 => 691452000, 95 => + 694130400, 96 => 696808800, 97 => 699314400, 98 => + 701992800, 99 => 704584800, 100 => 707263200, 101 => + 709855200, 102 => 712533600, 103 => 715212000, 104 => + 717804000, 105 => 720482400, 106 => 723074400, 107 => + 725752800, 108 => 728431200, 109 => 730850400, 110 => + 733528800, 111 => 736120800, 112 => 738799200, 113 => + 741391200, 114 => 744069600, 115 => 746748000, 116 => + 749340000, 117 => 752018400, 118 => 754610400, 119 => + 757288800, 120 => 759967200, 121 => 762386400, 122 => + 765064800, 123 => 767656800, 124 => 770335200, 125 => + 772927200, 126 => 775605600, 127 => 778284000, 128 => + 780876000, 129 => 783554400, 130 => 786146400, 131 => + 788824800, 132 => 791503200, 133 => 793922400, 134 => + 796600800, 135 => 799192800, 136 => 801871200, 137 => + 804463200, 138 => 807141600, 139 => 809820000, 140 => + 812412000, 141 => 815090400, 142 => 817682400, 143 => + 820360800, 144 => 823039200, 145 => 825544800, 146 => + 828223200, 147 => 830815200, 148 => 833493600, 149 => + 836085600, 150 => 838764000, 151 => 841442400, 152 => + 844034400, 153 => 846712800, 154 => 849304800, 155 => + 851983200, 156 => 854661600, 157 => 857080800, 158 => + 859759200, 159 => 862351200, 160 => 865029600, 161 => + 867621600, 162 => 870300000, 163 => 872978400, 164 => + 875570400, 165 => 878248800, 166 => 880840800, 167 => + 883519200, 168 => 886197600, 169 => 888616800, 170 => + 891295200, 171 => 893887200, 172 => 896565600, 173 => + 899157600, 174 => 901836000, 175 => 904514400, 176 => + 907106400, 177 => 909784800, 178 => 912376800, 179 => + 915055200, 180 => 917733600, 181 => 920152800, 182 => + 922831200, 183 => 925423200, 184 => 928101600, 185 => + 930693600, 186 => 933372000, 187 => 936050400, 188 => + 938642400, 189 => 941320800, 190 => 943912800, 191 => + 946591200, 192 => 949269600, 193 => 951775200, 194 => + 954453600, 195 => 957045600, 196 => 959724000, 197 => + 962316000, 198 => 964994400, 199 => 967672800, 200 => + 970264800, 201 => 972943200, 202 => 975535200, 203 => + 978213600, 204 => 980892000, 205 => 983311200, 206 => + 985989600, 207 => 988581600, 208 => 991260000, 209 => + 993852000, 210 => 996530400, 211 => 999208800, 212 => + 1001800800, 213 => 1004479200, 214 => 1007071200, + 215 => 1009749600, 216 => 1012428000, 217 => + 1014847200, 218 => 1017525600, 219 => 1020117600, + 220 => 1022796000, 221 => 1025388000, 222 => + 1028066400, 223 => 1030744800, 224 => 1033336800, + 225 => 1036015200, 226 => 1038607200, 227 => + 1041285600, 228 => 1043964000, 229 => 1046383200, + 230 => 1049061600, 231 => 1051653600, 232 => + 1054332000, 233 => 1056924000, 234 => 1059602400, + 235 => 1062280800, 236 => 1064872800, 237 => + 1067551200, 238 => 1070143200, 239 => 1072821600, + 240 => 1075500000, 241 => 1078005600, 242 => + 1080684000, 243 => 1083276000, 244 => 1085954400, + 245 => 1088546400, 246 => 1091224800, 247 => + 1093903200, 248 => 1096495200, 249 => 1099173600, + 250 => 1101765600, 251 => 1104444000, 252 => + 1107122400, 253 => 1109541600, 254 => 1112220000, + 255 => 1114812000, 256 => 1117490400, 257 => + 1120082400, 258 => 1122760800, 259 => 1125439200, + 260 => 1128031200, 261 => 1130709600, 262 => + 1133301600, 263 => 1135980000, 264 => 1138658400, + 265 => 1141077600, 266 => 1143756000, 267 => + 1146348000, 268 => 1149026400, 269 => 1151618400, + 270 => 1154296800, 271 => 1156975200, 272 => + 1159567200, 273 => 1162245600, 274 => 1164837600, + 275 => 1167516000, 276 => 1170194400, 277 => + 1172613600, 278 => 1175292000, 279 => 1177884000, + 280 => 1180562400, 281 => 1183154400, 282 => + 1185832800, 283 => 1188511200, 284 => 1191103200, + 285 => 1193781600, 286 => 1196373600, 287 => + 1199052000, 288 => 1201730400, 289 => 1204236000, + 290 => 1206914400, 291 => 1209506400, 292 => + 1212184800, 293 => 1214776800, 294 => 1217455200, + 295 => 1220133600, 296 => 1222725600, 297 => + 1225404000, 298 => 1227996000, 299 => 1230674400, + 300 => 1233352800, 301 => 1235772000, 302 => + 1238450400, 303 => 1241042400, 304 => 1243720800, + 305 => 1246312800, + ); + +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/dateaxisex1.php b/Societes/ric/jpgraph/Examples/dateaxisex1.php new file mode 100755 index 00000000..58e4348f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/dateaxisex1.php @@ -0,0 +1,55 @@ +SetMargin(40,40,30,70); +$graph->title->Set('Date: '.date('Y-m-d',$now)); +$graph->SetAlphaBlending(); + +// Setup a manual x-scale (We leave the sentinels for the +// Y-axis at 0 which will then autoscale the Y-axis.) +// We could also use autoscaling for the x-axis but then it +// probably will start a little bit earlier than the first value +// to make the first value an even number as it sees the timestamp +// as an normal integer value. +$graph->SetScale("intlin",0,200,$now,$datax[$n-1]); + +// Setup the x-axis with a format callback to convert the timestamp +// to a user readable time +$graph->xaxis->SetLabelFormatCallback('TimeCallback'); +$graph->xaxis->SetLabelAngle(90); + +// Create the line +$p1 = new LinePlot($datay,$datax); +$p1->SetColor("blue"); + +// Set the fill color partly transparent +$p1->SetFillColor("blue@0.4"); + +// Add lineplot to the graph +$graph->Add($p1); + +// Output line +$graph->Stroke(); +?> + + diff --git a/Societes/ric/jpgraph/Examples/dateaxisex2.php b/Societes/ric/jpgraph/Examples/dateaxisex2.php new file mode 100755 index 00000000..c0a306c1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/dateaxisex2.php @@ -0,0 +1,38 @@ +SetMargin(40,40,30,130); + +// Fix the Y-scale to go between [0,100] and use date for the x-axis +$graph->SetScale('datlin',0,100); +$graph->title->Set("Example on Date scale"); + +// Set the angle for the labels to 90 degrees +$graph->xaxis->SetLabelAngle(90); + +$line = new LinePlot($data,$xdata); +$line->SetLegend('Year 2005'); +$line->SetFillColor('lightblue@0.5'); +$graph->Add($line); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/dateaxisex3.php b/Societes/ric/jpgraph/Examples/dateaxisex3.php new file mode 100755 index 00000000..02db7cc5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/dateaxisex3.php @@ -0,0 +1,48 @@ +SetMargin(40,40,30,130); + +// Fix the Y-scale to go between [0,100] and use date for the x-axis +$graph->SetScale('datlin',0,100); +$graph->title->Set("Example on Date scale"); + +// Set the angle for the labels to 90 degrees +$graph->xaxis->SetLabelAngle(90); + +// It is possible to adjust the density for the X-axis as well +// The following call makes the dates a little more sparse +// $graph->SetTickDensity(TICKD_NORMAL,TICKD_SPARSE); + +// The automatic format string for dates can be overridden +// $graph->xaxis->scale->SetDateFormat('h:i'); + +// Adjust the start/end to a specific alignment +$graph->xaxis->scale->SetTimeAlign(MINADJ_15); + +$line = new LinePlot($data,$xdata); +$line->SetLegend('Year 2005'); +$line->SetFillColor('lightblue@0.5'); +$graph->Add($line); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/dateaxisex4.php b/Societes/ric/jpgraph/Examples/dateaxisex4.php new file mode 100755 index 00000000..dab6cd6f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/dateaxisex4.php @@ -0,0 +1,44 @@ +SetMargin(40,40,30,130); + +// Fix the Y-scale to go between [0,100] and use date for the x-axis +$graph->SetScale('datlin',0,100); +$graph->title->Set("Example on Date scale"); + +// Set the angle for the labels to 90 degrees +$graph->xaxis->SetLabelAngle(90); + +// The automatic format string for dates can be overridden +$graph->xaxis->scale->SetDateFormat('H:i'); + +// Adjust the start/end to a specific alignment +$graph->xaxis->scale->SetTimeAlign(MINADJ_10); + +$line = new LinePlot($data,$xdata); +$line->SetLegend('Year 2005'); +$line->SetFillColor('lightblue@0.5'); +$graph->Add($line); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/datescaleticksex01.php b/Societes/ric/jpgraph/Examples/datescaleticksex01.php new file mode 100755 index 00000000..5bdcbe54 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/datescaleticksex01.php @@ -0,0 +1,63 @@ +SetMargin(80,30,50,40); +$graph->SetMarginColor('white'); +$graph->SetScale('dateint'); +$graph->title->Set('Current Bids'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set('(Updated every 5 minutes)'); +$graph->subtitle->SetFont(FF_ARIAL,FS_ITALIC,10); + +// Enable antialias +$graph->img->SetAntiAliasing(); + +// Setup the y-axis to show currency values +$graph->yaxis->SetLabelFormatCallback('number_format'); +$graph->yaxis->SetLabelFormat('$%s'); + +//Use hour:minute format for the labels +$graph->xaxis->scale->SetDateFormat('H:i'); + +// Force labels to only be displayed every 5 minutes +$graph->xaxis->scale->ticks->Set(INTERVAL); + +// Adjust the start time for an "even" 5 minute, i.e. 5,10,15,20,25, ... +$graph->xaxis->scale->SetTimeAlign(MINADJ_5); + +// Create the plots using the dummy data created at the beginning +$line = array(); +for( $i=0; $i < $m; ++$i ) { + $line[$i] = new LinePlot($bids[$i],$times); + $line[$i]->mark->SetType(MARK_SQUARE); +} +$graph->Add($line); + +// Send the graph back to the client +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/dateutilex01.php b/Societes/ric/jpgraph/Examples/dateutilex01.php new file mode 100755 index 00000000..a534d7a4 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/dateutilex01.php @@ -0,0 +1,54 @@ +clearTheme(); + +// We set the x-scale min/max values to avoid empty space +// on the side of the plot +$graph->SetScale('intlin',0,0,min($xdata),max($xdata)); +$graph->SetMargin(60,20,40,60); + +// Setup the titles +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->Set('Development since 1984'); +$graph->subtitle->SetFont(FF_ARIAL,FS_ITALIC,10); +$graph->subtitle->Set('(Example using DateScaleUtils class)'); + +// Setup the labels to be correctly format on the X-axis +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->xaxis->SetLabelAngle(30); + +// The second paramter set to 'true' will make the library interpret the +// format string as a date format. We use a Month + Year format +$graph->xaxis->SetLabelFormatString('M, Y',true); + +// Get manual tick every second year +list($tickPos,$minTickPos) = $dateUtils->getTicks($xdata,DSUTILS_YEAR2); +$graph->xaxis->SetTickPositions($tickPos,$minTickPos); + +// First add an area plot +$lp1 = new LinePlot($ydata,$xdata); +$lp1->SetWeight(0); +$lp1->SetFillColor('orange@0.85'); +$graph->Add($lp1); + +// And then add line. We use two plots in order to get a +// more distinct border on the graph +$lp2 = new LinePlot($ydata,$xdata); +$lp2->SetColor('orange'); +$graph->Add($lp2); + +// And send back to the client +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/dateutilex02.php b/Societes/ric/jpgraph/Examples/dateutilex02.php new file mode 100755 index 00000000..8d37b7a1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/dateutilex02.php @@ -0,0 +1,48 @@ +clearTheme(); +$graph->SetScale('datlin'); +$graph->SetMargin(60,20,40,60); + +// Setup the titles +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->Set('Development since 1984'); +$graph->subtitle->SetFont(FF_ARIAL,FS_ITALIC,10); +$graph->subtitle->Set('(Example using the builtin date scale)'); + +// Setup the labels to be correctly format on the X-axis +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->xaxis->SetLabelAngle(30); + +// The second paramter set to 'true' will make the library interpret the +// format string as a date format. We use a Month + Year format +// $graph->xaxis->SetLabelFormatString('M, Y',true); + +// First add an area plot +$lp1 = new LinePlot($ydata,$xdata); +$lp1->SetWeight(0); +$lp1->SetFillColor('orange@0.85'); +$graph->Add($lp1); + +// And then add line. We use two plots in order to get a +// more distinct border on the graph +$lp2 = new LinePlot($ydata,$xdata); +$lp2->SetColor('orange'); +$graph->Add($lp2); + +// And send back to the client +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/dm_ex6.png b/Societes/ric/jpgraph/Examples/dm_ex6.png new file mode 100755 index 00000000..b389990b Binary files /dev/null and b/Societes/ric/jpgraph/Examples/dm_ex6.png differ diff --git a/Societes/ric/jpgraph/Examples/dupyaxisex1.php b/Societes/ric/jpgraph/Examples/dupyaxisex1.php new file mode 100755 index 00000000..3293db1f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/dupyaxisex1.php @@ -0,0 +1,30 @@ +E(-M_PI,M_PI,25); + +$graph = new Graph(300,200); +$graph->clearTheme(); +$graph->SetScale("linlin"); +$graph->SetMargin(50,50,20,30); +$graph->SetFrame(false); +$graph->SetBox(true,'black',2); +$graph->SetMarginColor('white'); +$graph->SetColor('lightyellow'); + +$graph->title->Set('Duplicating Y-axis'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->SetAxisStyle(AXSTYLE_YBOXIN); +$graph->xgrid->Show(); + +$lp1 = new LinePlot($ydata,$xdata); +$lp1->SetColor("blue"); +$lp1->SetWeight(2); +$graph->Add($lp1); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example0-0.php b/Societes/ric/jpgraph/Examples/example0-0.php new file mode 100755 index 00000000..d281824a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example0-0.php @@ -0,0 +1,25 @@ +SetScale('intlin'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example0.php b/Societes/ric/jpgraph/Examples/example0.php new file mode 100755 index 00000000..2667e9f8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example0.php @@ -0,0 +1,21 @@ +SetScale('textlin'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor('blue'); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example1.1.php b/Societes/ric/jpgraph/Examples/example1.1.php new file mode 100755 index 00000000..f3a1f434 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example1.1.php @@ -0,0 +1,26 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->img->SetMargin(30,90,40,50); +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->title->Set("Example 1.1 same y-values"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetLegend("Test 1"); +$lineplot->SetColor("blue"); +$lineplot->SetWeight(5); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example1.2.php b/Societes/ric/jpgraph/Examples/example1.2.php new file mode 100755 index 00000000..bbac21f1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example1.2.php @@ -0,0 +1,29 @@ +SetScale("textlin"); +$graph->img->SetMargin(30,90,40,50); +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->title->Set("Dashed lineplot"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetLegend("Test 1"); +$lineplot->SetColor("blue"); + +// Style can also be specified as SetStyle([1|2|3|4]) or +// SetStyle("solid"|"dotted"|"dashed"|"lobgdashed") +$lineplot->SetStyle("dashed"); + + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example1.php b/Societes/ric/jpgraph/Examples/example1.php new file mode 100755 index 00000000..31437f2d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example1.php @@ -0,0 +1,25 @@ +SetScale("textlin"); +$graph->img->SetMargin(50,90,40,50); +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->title->Set("Examples for graph"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetLegend("Test 1"); +$lineplot->SetColor("blue"); + + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example10.php b/Societes/ric/jpgraph/Examples/example10.php new file mode 100755 index 00000000..8b9d4c6e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example10.php @@ -0,0 +1,59 @@ +img->SetMargin(40,110,20,40); +$graph->SetScale("textlog"); +$graph->SetY2Scale("log"); +$graph->SetShadow(); + +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +$graph->yaxis->scale->ticks->SupressFirst(); +$graph->y2axis->scale->ticks->SupressFirst(); +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); +$graph->y2axis->SetColor("orange"); + +$graph->title->Set("Example 10"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetTextTickInterval(2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example11.php b/Societes/ric/jpgraph/Examples/example11.php new file mode 100755 index 00000000..898447a2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example11.php @@ -0,0 +1,50 @@ +Push(); + +// Create the graph. These two calls are always required +$graph = new Graph(300,200); +$graph->SetScale("textlin"); + +$graph->SetMargin(40,20,20,60); + +$graph->title->Set("Timing a graph"); +$graph->footer->right->Set('Timer (ms): '); +$graph->footer->right->SetFont(FF_COURIER,FS_ITALIC); +$graph->footer->SetTimer($timer); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +$lineplot2=new LinePlot($ydata2); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->Add($lineplot2); + +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("red"); +$graph->yaxis->SetWeight(2); +$graph->SetShadow(); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example13.php b/Societes/ric/jpgraph/Examples/example13.php new file mode 100755 index 00000000..c4a1155d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example13.php @@ -0,0 +1,37 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$graph->img->SetMargin(40,30,20,40); +$graph->SetShadow(); + +// Create the error plot +$errplot=new ErrorPlot($errdatay); +$errplot->SetColor("red"); +$errplot->SetWeight(2); + +// Add the plot to the graph +$graph->Add($errplot); + +$graph->title->Set("Simple error plot"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$datax = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($datax); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example14.php b/Societes/ric/jpgraph/Examples/example14.php new file mode 100755 index 00000000..5cde1f0c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example14.php @@ -0,0 +1,38 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$graph->img->SetMargin(40,30,20,40); +$graph->SetShadow(); + +// Create the error plot +$errplot=new ErrorPlot($errdatay); +$errplot->SetColor("red"); +$errplot->SetWeight(2); +$errplot->SetCenter(); + +// Add the plot to the graph +$graph->Add($errplot); + +$graph->title->Set("Simple error plot"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$datax = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($datax); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example15.php b/Societes/ric/jpgraph/Examples/example15.php new file mode 100755 index 00000000..0e6f291a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example15.php @@ -0,0 +1,41 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$graph->img->SetMargin(40,30,20,40); +$graph->SetShadow(); + +// Create the linear plot +$errplot=new ErrorLinePlot($errdatay); +$errplot->SetColor("red"); +$errplot->SetWeight(2); +$errplot->SetCenter(); +$errplot->line->SetWeight(2); +$errplot->line->SetColor("blue"); + +// Add the plot to the graph +$graph->Add($errplot); + +$graph->title->Set("Linear error plot"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$datax = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($datax); + + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example16.1.php b/Societes/ric/jpgraph/Examples/example16.1.php new file mode 100755 index 00000000..f9a6b386 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example16.1.php @@ -0,0 +1,45 @@ +clearTheme(); +$graph->SetScale('textlin'); + +$graph->img->SetMargin(40,130,20,40); +$graph->SetShadow(); + +// Create the linear error plot +$l1plot=new LinePlot($l1datay); +$l1plot->SetColor('red'); +$l1plot->SetWeight(2); +$l1plot->SetLegend('Prediction'); + +// Create the bar plot +$l2plot = new LinePlot($l2datay); +$l2plot->SetFillColor('orange'); +$l2plot->SetLegend('Result'); + +// Add the plots to the graph +$graph->Add($l2plot); +$graph->Add($l1plot); + +$graph->title->Set('Mixing line and filled line'); +$graph->xaxis->title->Set('X-title'); +$graph->yaxis->title->Set('Y-title'); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +//$graph->xaxis->SetTickLabels($datax); +//$graph->xaxis->SetTextTickInterval(2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example16.2.php b/Societes/ric/jpgraph/Examples/example16.2.php new file mode 100755 index 00000000..13af2ea5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example16.2.php @@ -0,0 +1,47 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$graph->img->SetMargin(40,130,20,40); +$graph->SetShadow(); + +// Create the linear error plot +$l1plot=new LinePlot($l1datay); +$l1plot->SetColor("red"); +$l1plot->SetWeight(2); +$l1plot->SetLegend("Prediction"); + +// Create the bar plot +$bplot = new BarPlot($l2datay); +$bplot->SetFillColor("orange"); +$bplot->SetLegend("Result"); + +// Add the plots to t'he graph +$graph->Add($l1plot); +$graph->Add($bplot); + + +$graph->title->Set("Adding a line plot to a bar graph v1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +//$graph->xaxis->SetTickLabels($datax); +//$graph->xaxis->SetTextTickInterval(2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example16.3.php b/Societes/ric/jpgraph/Examples/example16.3.php new file mode 100755 index 00000000..98df199f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example16.3.php @@ -0,0 +1,46 @@ +clearTheme(); +$graph->SetScale('textlin'); + +$graph->img->SetMargin(40,130,20,40); +$graph->SetShadow(); + +// Create the linear error plot +$l1plot=new LinePlot($l1datay); +$l1plot->SetColor('red'); +$l1plot->SetWeight(2); +$l1plot->SetLegend('Prediction'); + +// Create the bar plot +$bplot = new BarPlot($l2datay); +$bplot->SetFillColor('orange'); +$bplot->SetLegend('Result'); + +// Add the plots to t'he graph +$graph->Add($bplot); +$graph->Add($l1plot); + +$graph->title->Set('Adding a line plot to a bar graph v1'); +$graph->xaxis->title->Set('X-title'); +$graph->yaxis->title->Set('Y-title'); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->xaxis->SetTickLabels($datax); +//$graph->xaxis->SetTextTickInterval(2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example16.4.php b/Societes/ric/jpgraph/Examples/example16.4.php new file mode 100755 index 00000000..cfe1cafb --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example16.4.php @@ -0,0 +1,47 @@ +clearTheme(); +$graph->SetScale('intlin'); + +$graph->img->SetMargin(40,130,20,40); +$graph->SetShadow(); + +// Create the linear error plot +$l1plot=new LinePlot($l1datay); +$l1plot->SetColor('red'); +$l1plot->SetWeight(2); +$l1plot->SetLegend('Prediction'); + +// Create the bar plot +$bplot = new BarPlot($l2datay); +$bplot->SetFillColor('orange'); +$bplot->SetLegend('Result'); + +// Add the plots to t'he graph +$graph->Add($bplot); +$graph->Add($l1plot); + +$graph->title->Set('Adding a line plot to a bar graph v3'); +$graph->xaxis->title->Set('X-title'); +$graph->yaxis->title->Set('Y-title'); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$datax = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($datax); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example16.5.php b/Societes/ric/jpgraph/Examples/example16.5.php new file mode 100755 index 00000000..ba8248d9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example16.5.php @@ -0,0 +1,58 @@ +clearTheme(); +$graph->img->SetMargin(40,70,20,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->SetColor(array(250,250,250)); + +$graph->img->SetTransparent("white"); + +$t1 = new Text("This is a text"); +$t1->SetPos(0.5,0.5); +$t1->SetOrientation("h"); +$t1->SetFont(FF_FONT1,FS_BOLD); +$t1->SetBox("white","black","gray"); +$t1->SetColor("black"); +$graph->AddText($t1); + +// Create the linear error plot +$l1plot=new LinePlot($l1datay); +$l1plot->SetColor("blue"); +$l1plot->SetWeight(2); +$l1plot->SetLegend("Prediction"); + +// Create the bar plot +$l2plot = new BarPlot($l2datay); +$l2plot->SetFillColor("orange"); +$l2plot->SetLegend("Result"); + +// Add the plots to the graph +$graph->Add($l1plot); +$graph->Add($l2plot); + + +$graph->title->Set("Example 16.3"); +$graph->xaxis->title->Set("Month"); +$graph->yaxis->title->Set("x10,000 US$"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->xaxis->SetTickLabels($datax); +//$graph->xaxis->SetTextTickInterval(2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example16.6.php b/Societes/ric/jpgraph/Examples/example16.6.php new file mode 100755 index 00000000..3590348d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example16.6.php @@ -0,0 +1,58 @@ +GetStat(); +list( $xd, $yd ) = $lr->GetY(0,19); + +// Create the graph +$graph = new Graph(300,250); +$graph->clearTheme(); +$graph->SetScale('linlin'); + +// Setup title +$graph->title->Set("Linear regression"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +$graph->subtitle->Set('(stderr='.sprintf('%.2f',$stderr).', corr='.sprintf('%.2f',$corr).')'); +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,12); + +// make sure that the X-axis is always at the +// bottom at the plot and not just at Y=0 which is +// the default position +$graph->xaxis->SetPos('min'); + +// Create the scatter plot with some nice colors +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("red"); +$sp1->SetColor("blue"); +$sp1->SetWeight(3); +$sp1->mark->SetWidth(4); + +// Create the regression line +$lplot = new LinePlot($yd); +$lplot->SetWeight(2); +$lplot->SetColor('navy'); + +// Add the pltos to the line +$graph->Add($sp1); +$graph->Add($lplot); + +// ... and stroke +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/example16.php b/Societes/ric/jpgraph/Examples/example16.php new file mode 100755 index 00000000..d7b98e01 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example16.php @@ -0,0 +1,45 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$graph->img->SetMargin(40,30,20,40); +$graph->SetShadow(); + +// Create the linear plot +$errplot=new ErrorLinePlot($errdatay); +$errplot->SetColor("red"); +$errplot->SetWeight(2); +$errplot->SetCenter(); +$errplot->line->SetWeight(2); +$errplot->line->SetColor("blue"); + +// Setup the legends +$errplot->SetLegend("Min/Max"); +$errplot->line->SetLegend("Average"); + +// Add the plot to the graph +$graph->Add($errplot); + +$graph->title->Set("Linear error plot"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$datax = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($datax); + + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example17.php b/Societes/ric/jpgraph/Examples/example17.php new file mode 100755 index 00000000..29fb3eee --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example17.php @@ -0,0 +1,42 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->img->SetMargin(40,30,20,40); + +// Create the linear plots for each category +$dplot[] = new LinePLot($datay1); +$dplot[] = new LinePLot($datay2); +$dplot[] = new LinePLot($datay3); + +$dplot[0]->SetFillColor("red"); +$dplot[1]->SetFillColor("blue"); +$dplot[2]->SetFillColor("green"); + +// Create the accumulated graph +$accplot = new AccLinePlot($dplot); + +// Add the plot to the graph +$graph->Add($accplot); + +$graph->xaxis->SetTextTickInterval(2); +$graph->title->Set("Example 17"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example18.php b/Societes/ric/jpgraph/Examples/example18.php new file mode 100755 index 00000000..def62f11 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example18.php @@ -0,0 +1,33 @@ +clearTheme(); +$graph->SetScale("textlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("A simple bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example19.1.php b/Societes/ric/jpgraph/Examples/example19.1.php new file mode 100755 index 00000000..d5146cfd --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example19.1.php @@ -0,0 +1,36 @@ +clearTheme(); +$graph->SetScale('intlin'); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set('A basic bar graph'); +$graph->xaxis->title->Set('X-title'); +$graph->yaxis->title->Set('Y-title'); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example19.php b/Societes/ric/jpgraph/Examples/example19.php new file mode 100755 index 00000000..2d898cec --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example19.php @@ -0,0 +1,36 @@ +clearTheme(); +$graph->SetScale('textlin'); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set('A basic bar graph'); +$graph->xaxis->title->Set('X-title'); +$graph->yaxis->title->Set('Y-title'); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example2.1.php b/Societes/ric/jpgraph/Examples/example2.1.php new file mode 100755 index 00000000..1114b1a0 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example2.1.php @@ -0,0 +1,30 @@ +SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +$lineplot->value->Show(); +$lineplot->value->SetColor("red"); +$lineplot->value->SetFont(FF_FONT1,FS_BOLD); + + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Example 2.1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example2.5.php b/Societes/ric/jpgraph/Examples/example2.5.php new file mode 100755 index 00000000..a6e5535c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example2.5.php @@ -0,0 +1,26 @@ +SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Example 2.5"); +$graph->xaxis->title->Set("X-title"); +$graph->xaxis->SetPos("min"); +$graph->yaxis->title->Set("Y-title"); + + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example2.6.php b/Societes/ric/jpgraph/Examples/example2.6.php new file mode 100755 index 00000000..215eb4a5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example2.6.php @@ -0,0 +1,27 @@ +SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetStepStyle(); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Example 2.6 (Line with stepstyle)"); +$graph->xaxis->title->Set("X-title"); +$graph->xaxis->SetPos("min"); +$graph->yaxis->title->Set("Y-title"); + + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example2.php b/Societes/ric/jpgraph/Examples/example2.php new file mode 100755 index 00000000..ef3731e7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example2.php @@ -0,0 +1,33 @@ +SetScale('intlin'); + +// Setup margin and titles +$graph->SetMargin(40,20,20,40); +$graph->title->Set('Calls per operator'); +$graph->subtitle->Set('(March 12, 2008)'); +$graph->xaxis->title->Set('Operator'); +$graph->yaxis->title->Set('# of calls'); + + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example20.1.php b/Societes/ric/jpgraph/Examples/example20.1.php new file mode 100755 index 00000000..8dbab865 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example20.1.php @@ -0,0 +1,37 @@ +clearTheme(); +$graph->SetScale("textlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$bplot->value->Show(); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example20.2.php b/Societes/ric/jpgraph/Examples/example20.2.php new file mode 100755 index 00000000..337677d2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example20.2.php @@ -0,0 +1,38 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->yaxis->scale->SetGrace(20); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$bplot->value->Show(); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Bar graph with Y-scale grace"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example20.3.php b/Societes/ric/jpgraph/Examples/example20.3.php new file mode 100755 index 00000000..33ef60c1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example20.3.php @@ -0,0 +1,41 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->yaxis->scale->SetGrace(20); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,10); +$bplot->value->SetAngle(45); +$bplot->value->SetFormat('%0.1f'); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Bar graph with Y-scale grace"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example20.4.php b/Societes/ric/jpgraph/Examples/example20.4.php new file mode 100755 index 00000000..a53b5b57 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example20.4.php @@ -0,0 +1,42 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->yaxis->scale->SetGrace(20); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$bplot->SetShadow(); +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,10); +$bplot->value->SetAngle(45); +$bplot->value->SetFormat('%0.1f'); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Bar graph with drop shadow"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example20.5.php b/Societes/ric/jpgraph/Examples/example20.5.php new file mode 100755 index 00000000..adb7f40f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example20.5.php @@ -0,0 +1,48 @@ +clearTheme(); +$graph->SetScale("textlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); + +// Setup values +$bplot->value->Show(); +$bplot->value->SetFormat('%d'); +$bplot->value->SetFont(FF_FONT1,FS_BOLD); + +// Center the values in the bar +$bplot->SetValuePos('center'); + +// Make the bar a little bit wider +$bplot->SetWidth(0.7); + +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Centered values for bars"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example20.php b/Societes/ric/jpgraph/Examples/example20.php new file mode 100755 index 00000000..35f3d838 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example20.php @@ -0,0 +1,37 @@ +clearTheme(); +$graph->SetScale("textlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$bplot->SetWidth(1.0); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example21.php b/Societes/ric/jpgraph/Examples/example21.php new file mode 100755 index 00000000..6856b2cd --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example21.php @@ -0,0 +1,38 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$graph->SetShadow(); +$graph->img->SetMargin(40,30,20,40); + +// Create the bar plots +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); + +// Create the grouped bar plot +$gbplot = new GroupBarPlot(array($b1plot,$b2plot)); + +// ...and add it to the graPH +$graph->Add($gbplot); + +$graph->title->Set("Example 21"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example22.php b/Societes/ric/jpgraph/Examples/example22.php new file mode 100755 index 00000000..c461673f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example22.php @@ -0,0 +1,39 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->img->SetMargin(40,30,20,40); + +// Create the bar plots +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); + +// Create the grouped bar plot +$gbplot = new GroupBarPlot(array($b1plot,$b2plot)); +$gbplot->SetWidth(0.9); + +// ...and add it to the graPH +$graph->Add($gbplot); + +$graph->title->Set("Adjusting the width"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example23.php b/Societes/ric/jpgraph/Examples/example23.php new file mode 100755 index 00000000..dca054f9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example23.php @@ -0,0 +1,40 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$graph->SetShadow(); +$graph->img->SetMargin(40,30,20,40); + +// Create the bar plots +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); + +// Create the grouped bar plot +$gbplot = new AccBarPlot(array($b1plot,$b2plot)); + +// ...and add it to the graPH +$graph->Add($gbplot); + +$graph->title->Set("Accumulated bar plots"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example24.php b/Societes/ric/jpgraph/Examples/example24.php new file mode 100755 index 00000000..ecd5c51e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example24.php @@ -0,0 +1,47 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$graph->SetShadow(); +$graph->img->SetMargin(40,30,20,40); + +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); +$b3plot = new BarPlot($data3y); +$b3plot->SetFillColor("green"); +$b4plot = new BarPlot($data4y); +$b4plot->SetFillColor("brown"); + +// Create the accumulated bar plots +$ab1plot = new AccBarPlot(array($b1plot,$b2plot)); +$ab2plot = new AccBarPlot(array($b3plot,$b4plot)); + +// Create the grouped bar plot +$gbplot = new GroupBarPlot(array($ab1plot,$ab2plot)); + +// ...and add it to the graph +$graph->Add($gbplot); + +$graph->title->Set("Grouped Accumulated bar plots"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example25.1.php b/Societes/ric/jpgraph/Examples/example25.1.php new file mode 100755 index 00000000..3c5ea59d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example25.1.php @@ -0,0 +1,41 @@ +clearTheme(); +$graph->SetScale('textlin'); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,40,40); + +// Create a bar pot +$bplot = new BarPlot($datay); +$graph->Add($bplot); + +// Create and add a new text +$txt=new Text('This is a text'); +$txt->SetPos(10,20); +$txt->SetColor('darkred'); +$txt->SetFont(FF_FONT2,FS_BOLD); +$txt->SetBox('yellow','navy','gray@0.5'); +$graph->AddText($txt); + +// Setup the titles +$graph->title->Set("A simple bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example25.2.php b/Societes/ric/jpgraph/Examples/example25.2.php new file mode 100755 index 00000000..fbe68069 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example25.2.php @@ -0,0 +1,42 @@ +clearTheme(); +$graph->SetScale('textlin'); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); +$graph->Add($bplot); + +// Create and add a new text +$txt=new Text("This is a text\nwith many\nand even\nmore\nlines of text"); +$txt->SetPos(0.5,0.5,'center','center'); +$txt->SetFont(FF_FONT2,FS_BOLD); +$txt->ParagraphAlign('center'); +$txt->SetBox('yellow','navy','gray'); +$txt->SetColor('red'); +$graph->AddText($txt); + +// Setup the titles +$graph->title->Set("A simple bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example25.php b/Societes/ric/jpgraph/Examples/example25.php new file mode 100755 index 00000000..a326c184 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example25.php @@ -0,0 +1,40 @@ +clearTheme(); +$graph->SetScale('textlin'); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,40,40); + +// Create a bar pot +$bplot = new BarPlot($datay); +$graph->Add($bplot); + +// Create and add a new text +$txt=new Text('This is a text'); +$txt->SetPos(0,20); +$txt->SetColor('darkred'); +$txt->SetFont(FF_FONT2,FS_BOLD); +$graph->AddText($txt); + +// Setup the titles +$graph->title->Set("A simple bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example26.1.php b/Societes/ric/jpgraph/Examples/example26.1.php new file mode 100755 index 00000000..e224a987 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example26.1.php @@ -0,0 +1,21 @@ +clearTheme(); +$graph->SetShadow(); + +$graph->title->Set("A simple Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->SetLegends($gDateLocale->GetShortMonth()); +$p1->SetCenter(0.4); + +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/example26.php b/Societes/ric/jpgraph/Examples/example26.php new file mode 100755 index 00000000..071f432b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example26.php @@ -0,0 +1,17 @@ +clearTheme(); +$graph->SetShadow(); + +$graph->title->Set("A simple Pie plot"); + +$p1 = new PiePlot($data); +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/example27.1.php b/Societes/ric/jpgraph/Examples/example27.1.php new file mode 100755 index 00000000..a5efd1c4 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example27.1.php @@ -0,0 +1,24 @@ +clearTheme(); +$graph->SetShadow(); + +$graph->title->Set("A simple Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot3D($data); +$p1->SetAngle(20); +$p1->SetSize(0.5); +$p1->SetCenter(0.45); +$p1->SetLegends($gDateLocale->GetShortMonth()); + +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/example27.2.php b/Societes/ric/jpgraph/Examples/example27.2.php new file mode 100755 index 00000000..0fb9b546 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example27.2.php @@ -0,0 +1,23 @@ +clearTheme(); +$graph->SetShadow(); + +$graph->title->Set("A simple Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->ExplodeSlice(1); +$p1->SetCenter(0.45); +$p1->SetLegends($gDateLocale->GetShortMonth()); + +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/example27.3.php b/Societes/ric/jpgraph/Examples/example27.3.php new file mode 100755 index 00000000..2f8815a3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example27.3.php @@ -0,0 +1,23 @@ +clearTheme(); +$graph->SetShadow(); + +$graph->title->Set("A simple 3D Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot3D($data); +$p1->ExplodeSlice(1); +$p1->SetCenter(0.45); +$p1->SetLegends($gDateLocale->GetShortMonth()); + +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/example27.php b/Societes/ric/jpgraph/Examples/example27.php new file mode 100755 index 00000000..b89447b5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example27.php @@ -0,0 +1,23 @@ +clearTheme(); +$graph->SetShadow(); + +$graph->title->Set("A simple Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot3D($data); +$p1->SetSize(0.5); +$p1->SetCenter(0.45); +$p1->SetLegends($gDateLocale->GetShortMonth()); + +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/example28.1.php b/Societes/ric/jpgraph/Examples/example28.1.php new file mode 100755 index 00000000..f518de0b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example28.1.php @@ -0,0 +1,21 @@ +clearTheme(); +$graph->SetShadow(); + +$graph->title->Set("'earth' Theme"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->SetTheme("earth"); +$p1->SetCenter(0.5,0.55); +$p1->value->Show(false); +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/example28.2.php b/Societes/ric/jpgraph/Examples/example28.2.php new file mode 100755 index 00000000..b2f5e7e8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example28.2.php @@ -0,0 +1,21 @@ +clearTheme(); +$graph->SetShadow(); + +$graph->title->Set("'pastel' Theme"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->SetTheme("pastel"); +$p1->SetCenter(0.5,0.55); +$p1->value->Show(false); +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/example28.3.php b/Societes/ric/jpgraph/Examples/example28.3.php new file mode 100755 index 00000000..0a3ca35f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example28.3.php @@ -0,0 +1,21 @@ +clearTheme(); +$graph->SetShadow(); + +$graph->title->Set("'water' Theme"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->SetTheme("water"); +$p1->SetCenter(0.5,0.55); +$p1->value->Show(false); +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/example28.php b/Societes/ric/jpgraph/Examples/example28.php new file mode 100755 index 00000000..15fa682a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example28.php @@ -0,0 +1,21 @@ +clearTheme(); +$graph->SetShadow(); + +$graph->title->Set("'sand' Theme"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->SetTheme("sand"); +$p1->SetCenter(0.5,0.55); +$p1->value->Show(false); +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/example3.0.1.php b/Societes/ric/jpgraph/Examples/example3.0.1.php new file mode 100755 index 00000000..681fd052 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example3.0.1.php @@ -0,0 +1,42 @@ +clearTheme(); +$graph->SetScale('intlin'); +$graph->SetShadow(); + +// Setup margin and titles +$graph->SetMargin(40,20,20,40); +$graph->title->Set('Calls per operator'); +$graph->subtitle->Set('(March 12, 2008)'); +$graph->xaxis->title->Set('Operator'); +$graph->yaxis->title->Set('# of calls'); + +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD ); +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD ); + +$graph->yaxis->SetColor('blue'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor( 'blue' ); +$lineplot->SetWeight( 2 ); // Two pixel wide + + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example3.0.2.php b/Societes/ric/jpgraph/Examples/example3.0.2.php new file mode 100755 index 00000000..6b63b42a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example3.0.2.php @@ -0,0 +1,41 @@ +clearTheme(); +$graph->SetScale('intlin'); +$graph->SetShadow(); + +// Setup margin and titles +$graph->SetMargin(40,20,20,40); +$graph->title->Set('Interpolated values'); +$graph->xaxis->title->Set('x-title'); +$graph->yaxis->title->Set('y-title'); + +$graph->yaxis->title->SetFont( FF_ARIAL , FS_BOLD, 9 ); +$graph->xaxis->title->SetFont( FF_ARIAL , FS_BOLD, 9 ); + +$graph->yaxis->SetColor('blue'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor( 'blue' ); +$lineplot->SetWeight( 2 ); // Two pixel wide + + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example3.0.3.php b/Societes/ric/jpgraph/Examples/example3.0.3.php new file mode 100755 index 00000000..05806f02 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example3.0.3.php @@ -0,0 +1,41 @@ +clearTheme(); +$graph->SetScale('intlin'); +$graph->SetShadow(); + +// Setup margin and titles +$graph->SetMargin(40,20,20,40); +$graph->title->Set('NULL values'); +$graph->xaxis->title->Set('x-title'); +$graph->yaxis->title->Set('y-title'); + +$graph->yaxis->title->SetFont( FF_ARIAL , FS_BOLD, 9 ); +$graph->xaxis->title->SetFont( FF_ARIAL , FS_BOLD, 9 ); + +$graph->yaxis->SetColor('blue'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor( 'blue' ); +$lineplot->SetWeight( 2 ); // Two pixel wide + + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example3.1.1.php b/Societes/ric/jpgraph/Examples/example3.1.1.php new file mode 100755 index 00000000..846488f1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example3.1.1.php @@ -0,0 +1,44 @@ +clearTheme(); +$graph->SetScale('intlin'); +$graph->SetShadow(); + +// Setup margin and titles +$graph->SetMargin(40,20,20,40); +$graph->title->Set('Calls per operator'); +$graph->subtitle->Set('(March 12, 2008)'); +$graph->xaxis->title->Set('Operator'); +$graph->yaxis->title->Set('# of calls'); + +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD ); +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD ); + +$graph->yaxis->SetColor('blue'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor( 'blue' ); +$lineplot->SetWeight( 2 ); // Two pixel wide + +// Add an image mark scaled to 50% +$lineplot->mark->SetType(MARK_IMG_DIAMOND,'red',0.5); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example3.1.php b/Societes/ric/jpgraph/Examples/example3.1.php new file mode 100755 index 00000000..f768dc51 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example3.1.php @@ -0,0 +1,44 @@ +clearTheme(); +$graph->SetScale('intlin'); +$graph->SetShadow(); + +// Setup margin and titles +$graph->SetMargin(40,20,20,40); +$graph->title->Set('Calls per operator'); +$graph->subtitle->Set('(March 12, 2008)'); +$graph->xaxis->title->Set('Operator'); +$graph->yaxis->title->Set('# of calls'); + +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD ); +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD ); + +$graph->yaxis->SetColor('blue'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor( 'blue' ); +$lineplot->SetWeight( 2 ); // Two pixel wide +$lineplot->mark->SetType(MARK_UTRIANGLE); +$lineplot->mark->SetColor('blue'); +$lineplot->mark->SetFillColor('red'); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example3.2.1.php b/Societes/ric/jpgraph/Examples/example3.2.1.php new file mode 100755 index 00000000..8180e299 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example3.2.1.php @@ -0,0 +1,36 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->yaxis->scale->SetGrace(10,10); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->mark->SetType(MARK_CIRCLE); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Grace value, version 1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$graph->yaxis->SetWeight(2); +$graph->SetShadow(); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example3.2.2.php b/Societes/ric/jpgraph/Examples/example3.2.2.php new file mode 100755 index 00000000..57d5c29f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example3.2.2.php @@ -0,0 +1,38 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->yaxis->scale->SetGrace(10,10); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->mark->SetType(MARK_CIRCLE); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Grace value version 2"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->xaxis->SetPos('min'); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$graph->yaxis->SetWeight(2); +$graph->SetShadow(); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example3.2.php b/Societes/ric/jpgraph/Examples/example3.2.php new file mode 100755 index 00000000..b7a9b4ff --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example3.2.php @@ -0,0 +1,35 @@ +clearTheme(); +$graph->SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->mark->SetType(MARK_CIRCLE); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Example 3.2"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$graph->yaxis->SetWeight(2); +$graph->SetShadow(); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example3.3.php b/Societes/ric/jpgraph/Examples/example3.3.php new file mode 100755 index 00000000..86462f87 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example3.3.php @@ -0,0 +1,46 @@ +clearTheme(); +$graph->SetScale('intlin'); +$graph->SetShadow(); + +// Setup margin and titles +$graph->SetMargin(40,20,20,40); +$graph->title->Set('Calls per operator'); +$graph->subtitle->Set('(March 12, 2008)'); +$graph->xaxis->title->Set('Operator'); +$graph->yaxis->title->Set('# of calls'); + +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD ); +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD ); + +$graph->yaxis->SetColor('blue'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor( 'blue' ); +$lineplot->SetWeight( 2 ); // Two pixel wide +$lineplot->mark->SetType(MARK_UTRIANGLE); +$lineplot->mark->SetColor('blue'); +$lineplot->mark->SetFillColor('red'); + +$lineplot->value->Show(); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example3.4.1.php b/Societes/ric/jpgraph/Examples/example3.4.1.php new file mode 100755 index 00000000..ecab862e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example3.4.1.php @@ -0,0 +1,82 @@ + 1000, 'CM' => 900, 'D' => 500, 'CD' => 400, + 'C' => 100, 'XC' => 90, 'L' => 50, 'XL' => 40, + 'X' => 10, 'IX' => 9, 'V' => 5, 'IV' => 4, 'I' => 1); + + foreach ($lookup as $roman => $value) + { + // Determine the number of matches + $matches = intval($n / $value); + + // Store that many characters + $result .= str_repeat($roman, $matches); + + // Substract that from the number + $n = $n % $value; + } + + // The Roman numeral should be built, return it + return $result; +} + +function formatCallback($aVal) { + return '('.numberToRoman($aVal).')'; +} + + + // Some (random) data +$ydata = array(11,3,8,12,5,1,9,13,5,7); + +// Size of the overall graph +$width=350; +$height=250; + +// Create the graph and set a scale. +// These two calls are always required +$graph = new Graph($width,$height); +$graph->clearTheme(); +$graph->SetScale('intlin'); +$graph->SetShadow(); + +// Setup margin and titles +$graph->SetMargin(40,20,20,40); +$graph->title->Set('Calls per operator'); +$graph->subtitle->Set('(March 12, 2008)'); +$graph->xaxis->title->Set('Operator'); +$graph->yaxis->title->Set('# of calls'); + +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD ); +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD ); + +$graph->yaxis->SetColor('blue'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor( 'blue' ); +$lineplot->SetWeight( 2 ); // Two pixel wide +$lineplot->mark->SetType(MARK_UTRIANGLE); +$lineplot->mark->SetColor('blue'); +$lineplot->mark->SetFillColor('red'); + +$lineplot->value->Show(); +$lineplot->value->SetFont(FF_ARIAL,FS_BOLD,10); +$lineplot->value->SetColor('darkred'); +$lineplot->value->SetFormatCallback('formatCallback'); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example3.4.php b/Societes/ric/jpgraph/Examples/example3.4.php new file mode 100755 index 00000000..826593c0 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example3.4.php @@ -0,0 +1,49 @@ +clearTheme(); +$graph->SetScale('intlin'); +$graph->SetShadow(); + +// Setup margin and titles +$graph->SetMargin(40,20,20,40); +$graph->title->Set('Calls per operator'); +$graph->subtitle->Set('(March 12, 2008)'); +$graph->xaxis->title->Set('Operator'); +$graph->yaxis->title->Set('# of calls'); + +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD ); +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD ); + +$graph->yaxis->SetColor('blue'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor( 'blue' ); +$lineplot->SetWeight( 2 ); // Two pixel wide +$lineplot->mark->SetType(MARK_UTRIANGLE); +$lineplot->mark->SetColor('blue'); +$lineplot->mark->SetFillColor('red'); + +$lineplot->value->Show(); +$lineplot->value->SetFont(FF_ARIAL,FS_BOLD,10); +$lineplot->value->SetColor('darkred'); +$lineplot->value->SetFormat('(%d)'); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example3.php b/Societes/ric/jpgraph/Examples/example3.php new file mode 100755 index 00000000..b43eddb1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example3.php @@ -0,0 +1,39 @@ +clearTheme(); +$graph->SetScale('intlin'); + +// Setup margin and titles +$graph->SetMargin(40,20,20,40); +$graph->title->Set('Calls per operator'); +$graph->subtitle->Set('(March 12, 2008)'); +$graph->xaxis->title->Set('Operator'); +$graph->yaxis->title->Set('# of calls'); + +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD ); +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD ); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor( 'blue' ); +$lineplot->SetWeight( 2 ); // Two pixel wide + + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example4.php b/Societes/ric/jpgraph/Examples/example4.php new file mode 100755 index 00000000..b347dd3b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example4.php @@ -0,0 +1,46 @@ +clearTheme(); +$graph->SetScale('intlin'); +$graph->SetShadow(); + +// Setup margin and titles +$graph->SetMargin(40,20,20,40); +$graph->title->Set('Calls per operator (June,July)'); +$graph->subtitle->Set('(March 12, 2008)'); +$graph->xaxis->title->Set('Operator'); +$graph->yaxis->title->Set('# of calls'); + +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD ); +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD ); + +// Create the first data series +$lineplot=new LinePlot($ydata); +$lineplot->SetWeight( 2 ); // Two pixel wide + +// Add the plot to the graph +$graph->Add($lineplot); + +// Create the second data series +$lineplot2=new LinePlot($ydata2); +$lineplot2->SetWeight( 2 ); // Two pixel wide + +// Add the second plot to the graph +$graph->Add($lineplot2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example5.1.php b/Societes/ric/jpgraph/Examples/example5.1.php new file mode 100755 index 00000000..543d3836 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example5.1.php @@ -0,0 +1,48 @@ +clearTheme(); +$graph->img->SetMargin(40,40,20,40); +$graph->SetScale("textlin"); +$graph->SetY2Scale("lin"); +$graph->SetShadow(); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); +$graph->y2axis->SetColor("orange"); + +$graph->title->Set("Example 5"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example5.php b/Societes/ric/jpgraph/Examples/example5.php new file mode 100755 index 00000000..5d1142c9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example5.php @@ -0,0 +1,45 @@ +clearTheme(); +$graph->img->SetMargin(40,40,20,40); +$graph->SetScale("textlin"); +$graph->SetY2Scale("lin"); +$graph->SetShadow(); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); +$graph->y2axis->SetColor("orange"); + +$graph->title->Set("Example 5"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example6.1.php b/Societes/ric/jpgraph/Examples/example6.1.php new file mode 100755 index 00000000..8263b910 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example6.1.php @@ -0,0 +1,56 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetY2Scale("lin"); +$graph->SetShadow(); + +// Adjust the margin +$graph->img->SetMargin(40,40,20,70); + +// Create the two linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +// Adjust the axis color +$graph->y2axis->SetColor("orange"); +$graph->yaxis->SetColor("blue"); + +$graph->title->Set("Example 6.1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Set the colors for the plots +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +// Set the legends for the plots +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +// Adjust the legend position +$graph->legend->SetLayout(LEGEND_HOR); +$graph->legend->Pos(0.4,0.95,"center","bottom"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example6.2.php b/Societes/ric/jpgraph/Examples/example6.2.php new file mode 100755 index 00000000..a2e0b4f8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example6.2.php @@ -0,0 +1,48 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +// Adjust the margin +$graph->img->SetMargin(40,40,20,70); + +// Create the two linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetStepStyle(); + +// Adjust the axis color +$graph->yaxis->SetColor("blue"); + +$graph->title->Set("Example 6.2"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Set the colors for the plots +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +// Set the legends for the plots +$lineplot->SetLegend("Plot 1"); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Adjust the legend position +$graph->legend->SetLayout(LEGEND_HOR); +$graph->legend->Pos(0.4,0.95,"center","bottom"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example6.php b/Societes/ric/jpgraph/Examples/example6.php new file mode 100755 index 00000000..92886920 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example6.php @@ -0,0 +1,55 @@ +clearTheme(); +$graph->SetScale('textlin'); +$graph->SetY2Scale('lin'); +$graph->SetShadow(); + +// Adjust the margin +$graph->img->SetMargin(40,140,20,40); + +// Create the two linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor('orange'); +$lineplot2->SetWeight(2); + +// Adjust the axis color +$graph->y2axis->SetColor('orange'); +$graph->yaxis->SetColor('blue'); + +$graph->title->Set('Example 6'); +$graph->xaxis->title->Set('X-title'); +$graph->yaxis->title->Set('Y-title'); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Set the colors for the plots +$lineplot->SetColor('blue'); +$lineplot->SetWeight(2); +$lineplot2->SetColor('orange'); +$lineplot2->SetWeight(2); + +// Set the legends for the plots +$lineplot->SetLegend('Plot 1'); +$lineplot2->SetLegend('Plot 2'); + +// Adjust the legend position +$graph->legend->Pos(0.05,0.5,'right','center'); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example7.php b/Societes/ric/jpgraph/Examples/example7.php new file mode 100755 index 00000000..e7558f17 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example7.php @@ -0,0 +1,45 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetY2Scale("log"); +$graph->SetShadow(); +$graph->img->SetMargin(40,110,20,40); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$graph->yaxis->SetColor('blue'); + +$graph->title->Set("Example 7"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$lineplot2->SetWeight(2); + +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example8.1.php b/Societes/ric/jpgraph/Examples/example8.1.php new file mode 100755 index 00000000..cc5ce539 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example8.1.php @@ -0,0 +1,58 @@ +clearTheme(); +$graph->SetScale("textlog"); +$graph->SetY2Scale("log"); + +$graph->SetShadow(); +$graph->SetMargin(40,110,20,40); + +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +$lineplot2=new LinePlot($y2data); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->scale->ticks->SupressFirst(); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); + +$graph->title->Set("Example 8"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("blue"); +$graph->y2axis->SetColor("orange"); + +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example8.php b/Societes/ric/jpgraph/Examples/example8.php new file mode 100755 index 00000000..9cf0fda7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example8.php @@ -0,0 +1,49 @@ +clearTheme(); +$graph->SetScale("textlog"); +$graph->SetShadow(); +$graph->img->SetMargin(40,110,20,40); + +// Show the gridlines +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->title->Set("Example 8"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +// Adjust the color of the Y axis +$graph->yaxis->SetColor("blue"); + +// Specifya a legend +$lineplot->SetLegend("Plot 1"); + +// Adjust the position of the grid box +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example9.1.php b/Societes/ric/jpgraph/Examples/example9.1.php new file mode 100755 index 00000000..75e71886 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example9.1.php @@ -0,0 +1,51 @@ +clearTheme(); +$graph->SetScale("textlog"); + +$graph->img->SetMargin(40,110,20,40); +$graph->SetShadow(); + +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Specify the tick labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +$graph->xaxis->SetTextLabelInterval(2); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->title->Set("Examples 9"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example9.2.php b/Societes/ric/jpgraph/Examples/example9.2.php new file mode 100755 index 00000000..a3513fd9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example9.2.php @@ -0,0 +1,53 @@ +clearTheme(); +$graph->SetScale("textlog"); + +$graph->img->SetMargin(40,110,20,50); +$graph->SetShadow(); + +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Specify the tick labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +//$graph->xaxis->SetTextLabelInterval(2); +$graph->xaxis->SetLabelAngle(90); + + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->title->Set("Examples 9"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/example9.php b/Societes/ric/jpgraph/Examples/example9.php new file mode 100755 index 00000000..869ad346 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/example9.php @@ -0,0 +1,50 @@ +clearTheme(); +$graph->SetScale("textlog"); + +$graph->img->SetMargin(40,110,20,40); +$graph->SetShadow(); + +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Specify the tick labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->title->Set("Examples 9"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/exampleex9.php b/Societes/ric/jpgraph/Examples/exampleex9.php new file mode 100755 index 00000000..9d87985f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/exampleex9.php @@ -0,0 +1,63 @@ +SetScale("textlog"); + +$graph->img->SetMargin(40,110,20,40); + +$graph->SetY2Scale("log"); +$graph->SetShadow(); + +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +$graph->yaxis->scale->ticks->SupressFirst(); +$graph->y2axis->scale->ticks->SupressFirst(); +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); +$graph->y2axis->SetColor("orange"); + +$graph->title->Set("Examples 9"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetTextTickInterval(2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/fieldscatterex1.php b/Societes/ric/jpgraph/Examples/fieldscatterex1.php new file mode 100755 index 00000000..3a9d58eb --- /dev/null +++ b/Societes/ric/jpgraph/Examples/fieldscatterex1.php @@ -0,0 +1,91 @@ + 1 ) $f=1; + $red = floor((1-$f)*255); + $blue = floor($f*255); + $color = array($red,0,$blue); + //echo "x=$x, y=$y, blue=$blue, red=$red
      "; + return array($color,$size,$arrowsize); +} + +// Create data for a simulated pseudo-magnetic radient field +$datax = array(); +$datay = array(); +$angle = array(); +for($x=1; $x < 10; ++$x ) { + for($y=10; $y<100; $y += 10) { + $a = -1; + if( $x==$polex && $y==$poley ) continue; + if( $x==$polex ) { + if( $y > $poley ) $a=90; + else $a = 270; + } + if( $y==$poley ) { + if( $x > $polex ) $a=0; + else $a=180; + } + if( $a == -1 ) { + $d1 = $y-$poley; + $d2 = ($polex-$x)*20; + if( $y < $poley ) $d2 *= -1; + $h = sqrt($d1*$d1+$d2*$d2); + $t = -$d2/$h; + $ac = acos($t); + if( $y < $poley ) $ac += M_PI; + $a = $ac * 180/M_PI; + } + $datax[] = $x; + $datay[] = $y; + $angle[] = $a; + } +} + +// Setup the graph +$graph = new Graph(300,200); +$graph->clearTheme(); +$graph->SetScale("intlin",0,100,0,10); +$graph->SetMarginColor('lightblue'); + + +// ..and titles +$graph->title->Set("Field plot"); + +// Setup the field plot +$fp = new FieldPlot($datay,$datax,$angle); + +// Setup formatting callback +$fp->SetCallback('FldCallback'); + +// First size argument is length (in pixels of arrow) +// Second size argument is roughly size of arrow. Arrow size is specified as +// an integer in the range [0,9] +$fp->arrow->SetSize(20,2); +$fp->arrow->SetColor('navy'); + +$graph->Add($fp); + +// .. and output +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/filledgridex1.php b/Societes/ric/jpgraph/Examples/filledgridex1.php new file mode 100755 index 00000000..c38d8aac --- /dev/null +++ b/Societes/ric/jpgraph/Examples/filledgridex1.php @@ -0,0 +1,49 @@ +clearTheme(); +$graph->SetMarginColor('white'); +$graph->SetScale("textlin"); +$graph->SetFrame(false); +$graph->SetMargin(30,50,30,30); + +$graph->title->Set('Filled Y-grid'); + + +$graph->yaxis->HideZeroLabel(); +$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5'); +$graph->xgrid->Show(); + +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +// Create the first line +$p1 = new LinePlot($datay1); +$p1->SetColor("navy"); +$p1->SetLegend('Line 1'); +$graph->Add($p1); + +// Create the second line +$p2 = new LinePlot($datay2); +$p2->SetColor("red"); +$p2->SetLegend('Line 2'); +$graph->Add($p2); + +// Create the third line +$p3 = new LinePlot($datay3); +$p3->SetColor("orange"); +$p3->SetLegend('Line 3'); +$graph->Add($p3); + +$graph->legend->SetShadow('gray@0.4',5); +$graph->legend->SetPos(0.1,0.1,'right','top'); +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/filledline01.php b/Societes/ric/jpgraph/Examples/filledline01.php new file mode 100755 index 00000000..4140b299 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/filledline01.php @@ -0,0 +1,24 @@ +img->SetMargin(40,40,40,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Example of filled line plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new LinePlot($datay); +$p1->SetFillColor("orange"); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$graph->Add($p1); + +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/filledlineex01.1.php b/Societes/ric/jpgraph/Examples/filledlineex01.1.php new file mode 100755 index 00000000..7d0cfc43 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/filledlineex01.1.php @@ -0,0 +1,25 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$graph->img->SetMargin(40,40,40,40); +$graph->SetShadow(); +$graph->SetGridDepth(DEPTH_FRONT); + +$graph->title->Set("Example of filled line plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new LinePlot($datay); +$p1->SetFillColor("orange"); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$graph->Add($p1); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/filledlineex01.php b/Societes/ric/jpgraph/Examples/filledlineex01.php new file mode 100755 index 00000000..6ea2c88d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/filledlineex01.php @@ -0,0 +1,23 @@ +SetScale('textlin'); + +$graph->img->SetMargin(40,40,40,40); +$graph->SetShadow(); + +$graph->title->Set("Example of filled line plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new LinePlot($datay); +$p1->SetFillColor("orange"); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$graph->Add($p1); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/filledlineex02.php b/Societes/ric/jpgraph/Examples/filledlineex02.php new file mode 100755 index 00000000..1b4db02f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/filledlineex02.php @@ -0,0 +1,24 @@ +img->SetMargin(40,40,40,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Example of filled line plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->subtitle->Set("(Starting from Y=0)"); + +$graph->yaxis->scale->SetAutoMin(0); + +$p1 = new LinePlot($datay); +$p1->SetFillColor("orange"); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$graph->Add($p1); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/filledlineex03.php b/Societes/ric/jpgraph/Examples/filledlineex03.php new file mode 100755 index 00000000..084e655d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/filledlineex03.php @@ -0,0 +1,23 @@ +SetScale('intlin'); +$graph->title->Set('Filled line with NULL values'); +//Make sure data starts from Zero whatever data we have +$graph->yscale->SetAutoMin(0); + +$p1 = new LinePlot($datay); +$p1->SetFillColor('lightblue'); +$graph->Add($p1); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/filledstepstyleex1.php b/Societes/ric/jpgraph/Examples/filledstepstyleex1.php new file mode 100755 index 00000000..cdba4fef --- /dev/null +++ b/Societes/ric/jpgraph/Examples/filledstepstyleex1.php @@ -0,0 +1,40 @@ +clearTheme(); + +$ydata = array(5,10,15,20,15,10); + +$graph->SetScale("textlin"); +$graph->SetShadow(true); +$graph->SetMarginColor("antiquewhite"); +$graph->img->SetMargin(60,40,40,50); +$graph->img->setTransparent("white"); +$graph->xaxis->SetFont(FF_FONT1); +$graph->xaxis->setTextTickInterval(1); +$graph->xaxis->SetTextLabelInterval(1); +$graph->legend->SetFillColor("antiquewhite"); +$graph->legend->SetShadow(true); +$graph->legend->SetLayout(LEGEND_VERT); +$graph->legend->Pos(0.02,0.01); +$graph->title->Set("Step Styled Example"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot = new LinePlot($ydata); +$lineplot->SetColor("black"); +$lineplot->setFillColor("gray7"); +$lineplot->SetStepStyle(); +$lineplot->SetLegend(" 2002 "); + +// add plot to the graph +$graph->Add($lineplot); +$graph->ygrid->show(false,false); + +// display graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/fireplace.jpg b/Societes/ric/jpgraph/Examples/fireplace.jpg new file mode 100755 index 00000000..8006e3d0 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/fireplace.jpg differ diff --git a/Societes/ric/jpgraph/Examples/fixscale_radarex1.php b/Societes/ric/jpgraph/Examples/fixscale_radarex1.php new file mode 100755 index 00000000..d663d908 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/fixscale_radarex1.php @@ -0,0 +1,36 @@ +SetScale('lin',0,50); +$graph->yscale->ticks->Set(25,5); +$graph->SetColor('white'); +$graph->SetShadow(); + +$graph->SetCenter(0.5,0.55); + +$graph->axis->SetFont(FF_FONT1,FS_BOLD); +$graph->axis->SetWeight(2); + +// Uncomment the following lines to also show grid lines. +$graph->grid->SetLineStyle('dashed'); +$graph->grid->SetColor('navy@0.5'); +$graph->grid->Show(); + +$graph->ShowMinorTickMarks(); + +$graph->title->Set('Quality result'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->SetTitles(array('One','Two','Three','Four','Five','Sex','Seven','Eight','Nine','Ten')); + +$plot = new RadarPlot(array(12,35,20,30,33,15,37)); +$plot->SetLegend('Goal'); +$plot->SetColor('red','lightred'); +$plot->SetFillColor('lightblue'); +$plot->SetLineWeight(2); + +$graph->Add($plot); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/footerex1.php b/Societes/ric/jpgraph/Examples/footerex1.php new file mode 100755 index 00000000..5da1fcf4 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/footerex1.php @@ -0,0 +1,61 @@ +clearTheme(); +$graph->SetMarginColor('white'); +$graph->SetScale("textlin"); +$graph->SetFrame(false); +$graph->SetMargin(30,5,25,50); + +// Setup the tab +$graph->tabtitle->Set(' Year 2003 ' ); +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13); +$graph->tabtitle->SetColor('darkred','#E1E1FF'); + +// Enable X-grid as well +$graph->xgrid->Show(); + +// Use months as X-labels +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +$graph->footer->left->Set('L. footer'); +$graph->footer->left->SetFont(FF_ARIAL,FS_NORMAL,12); +$graph->footer->left->SetColor('darkred'); +$graph->footer->center->Set('C. footer'); +$graph->footer->center->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->footer->center->SetColor('darkred'); +$graph->footer->right->Set('R. footer'); +$graph->footer->right->SetFont(FF_ARIAL,FS_NORMAL,12); +$graph->footer->right->SetColor('darkred'); + +// Create the plot +$p1 = new LinePlot($datay1); +$p1->SetColor("navy"); + +// Use an image of favourite car as marker +$p1->mark->SetType(MARK_IMG,'saab_95.jpg',0.5); + +// Displayes value on top of marker image +$p1->value->SetFormat('%d mil'); +$p1->value->Show(); +$p1->value->SetColor('darkred'); +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10); +// Increase the margin so that the value is printed avove tje +// img marker +$p1->value->SetMargin(14); + +// Incent the X-scale so the first and last point doesn't +// fall on the edges +$p1->SetCenter(); + +$graph->Add($p1); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/funcex1.php b/Societes/ric/jpgraph/Examples/funcex1.php new file mode 100755 index 00000000..6f431030 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/funcex1.php @@ -0,0 +1,57 @@ +E(-1.2*M_PI,1.2*M_PI); + +$f = new FuncGenerator('$x*$x'); +list($x2data,$y2data) = $f->E(-2,2); + +// Setup the basic graph +$graph = new Graph(450,350); +$graph->clearTheme(); +$graph->SetScale("linlin"); +$graph->SetShadow(); +$graph->img->SetMargin(50,50,60,40); +$graph->SetBox(true,'black',2); +$graph->SetMarginColor('white'); +$graph->SetColor('lightyellow'); + +// ... and titles +$graph->title->Set('Example of Function plot'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->subtitle->Set("(With some more advanced axis formatting\nHiding first and last label)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); +$graph->xgrid->Show(); + +$graph->yaxis->SetPos(0); +$graph->yaxis->SetWeight(2); +$graph->yaxis->HideZeroLabel(); +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('black','darkblue'); +$graph->yaxis->HideTicks(true,false); +$graph->yaxis->HideFirstLastLabel(); + +$graph->xaxis->SetWeight(2); +$graph->xaxis->HideZeroLabel(); +$graph->xaxis->HideFirstLastLabel(); +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('black','darkblue'); + +$lp1 = new LinePlot($ydata,$xdata); +$lp1->SetColor('blue'); +$lp1->SetWeight(2); + +$lp2 = new LinePlot($y2data,$x2data); +list($xm,$ym)=$lp2->Max(); +$lp2->SetColor('red'); +$lp2->SetWeight(2); + + +$graph->Add($lp1); +$graph->Add($lp2); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/funcex2.php b/Societes/ric/jpgraph/Examples/funcex2.php new file mode 100755 index 00000000..3e72bda2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/funcex2.php @@ -0,0 +1,33 @@ +E(-M_PI,M_PI,25); + +$graph = new Graph(380,450); +$graph->clearTheme(); +$graph->SetScale("linlin"); +$graph->SetShadow(); +$graph->img->SetMargin(50,50,60,40); +$graph->SetBox(true,'black',2); +$graph->SetMarginColor('white'); +$graph->SetColor('lightyellow'); +$graph->SetAxisStyle(AXSTYLE_SIMPLE); + +//$graph->xaxis->SetLabelFormat('%.1f'); + +$graph->title->Set("Function plot with marker"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->subtitle->Set("(BOXOUT Axis style)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); + +$lp1 = new LinePlot($ydata,$xdata); +$lp1->mark->SetType(MARK_FILLEDCIRCLE); +$lp1->mark->SetFillColor("red"); +$lp1->SetColor("blue"); + +$graph->Add($lp1); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/funcex3.php b/Societes/ric/jpgraph/Examples/funcex3.php new file mode 100755 index 00000000..832c69f1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/funcex3.php @@ -0,0 +1,36 @@ +E(-M_PI,M_PI,25); + +$graph = new Graph(350,430); +$graph->clearTheme(); +$graph->SetScale("linlin"); +$graph->SetShadow(); +$graph->img->SetMargin(50,50,60,40); +$graph->SetBox(true,'black',2); +$graph->SetMarginColor('white'); +$graph->SetColor('lightyellow'); +$graph->SetAxisStyle(AXSTYLE_BOXIN); +$graph->xgrid->Show(); + + +//$graph->xaxis->SetLabelFormat('%.0f'); + +$graph->img->SetMargin(50,50,60,40); + +$graph->title->Set("Function plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->subtitle->Set("(BOXIN Axis style)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); + +$lp1 = new LinePlot($ydata,$xdata); +$lp1->SetColor("blue"); +$lp1->SetWeight(2); + +$graph->Add($lp1); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/funcex4.php b/Societes/ric/jpgraph/Examples/funcex4.php new file mode 100755 index 00000000..926574ba --- /dev/null +++ b/Societes/ric/jpgraph/Examples/funcex4.php @@ -0,0 +1,62 @@ +E(-1.2*M_PI,1.2*M_PI); + +$f = new FuncGenerator('$x*$x'); +list($x2data,$y2data) = $f->E(-2,2); + +// Setup the basic graph +$graph = new Graph(450,350); +$graph->clearTheme(); +$graph->SetScale("linlin"); +//$graph->SetShadow(); +$graph->img->SetMargin(5,10,60,9); +$graph->SetBox(true,'green',2); +$graph->SetMarginColor('black'); +$graph->SetColor('black'); + +// ... and titles +$graph->title->Set('Example of Function plot'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->title->SetColor('lightgreen'); +$graph->subtitle->Set("(With some more advanced axis formatting\nHiding first and last label)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); +$graph->subtitle->SetColor('lightgreen'); + +$graph->xgrid->Show(); +$graph->xgrid->SetColor('darkgreen'); +$graph->ygrid->SetColor('darkgreen'); + +$graph->yaxis->SetPos(0); +$graph->yaxis->SetWeight(2); +$graph->yaxis->HideZeroLabel(); +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('green','green'); +$graph->yaxis->HideTicks(true,true); +$graph->yaxis->HideFirstLastLabel(); + +$graph->xaxis->SetWeight(2); +$graph->xaxis->HideZeroLabel(); +$graph->xaxis->HideFirstLastLabel(); +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('green','green'); + +$lp1 = new LinePlot($ydata,$xdata); +$lp1->SetColor('yellow'); +$lp1->SetWeight(2); + +$lp2 = new LinePlot($y2data,$x2data); +list($xm,$ym)=$lp2->Max(); +$lp2->SetColor('blue'); +$lp2->SetWeight(2); + + +$graph->Add($lp1); +$graph->Add($lp2); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/gantt_samerowex1.php b/Societes/ric/jpgraph/Examples/gantt_samerowex1.php new file mode 100755 index 00000000..6c59cebd --- /dev/null +++ b/Societes/ric/jpgraph/Examples/gantt_samerowex1.php @@ -0,0 +1,63 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("Activities on same row"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); // 1=default value + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity1 = new GanttBar(0,"Activity 1","2001-12-21","2001-12-26",""); + +// Yellow diagonal line pattern on a red background +$activity1->SetPattern(BAND_RDIAG,"yellow"); +$activity1->SetFillColor("red"); + +// Set absolute height of activity +$activity1->SetHeight(16); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(0,"","2001-12-31","2002-01-2","[BO]"); + +// ADjust font for caption +$activity2->caption->SetFont(FF_ARIAL,FS_BOLD); +$activity2->caption->SetColor("darkred"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height of activity +$activity2->SetHeight(16); + +// Finally add the bar to the graph +$graph->Add($activity1); +$graph->Add($activity2); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/gantt_samerowex2.php b/Societes/ric/jpgraph/Examples/gantt_samerowex2.php new file mode 100755 index 00000000..b3e2702a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/gantt_samerowex2.php @@ -0,0 +1,65 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("Activities on same row"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set('Using break style'); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); // 1=default value + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity1 = new GanttBar(0,"Activity 1","2001-12-21","2001-12-26",""); + +// Yellow diagonal line pattern on a red background +$activity1->SetPattern(BAND_RDIAG,"yellow"); +$activity1->SetFillColor("red"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$break1 = new GanttBar(0,'',"2001-12-27","2001-12-30",""); +$break1->SetBreakStyle(true,'dotted',2); +$break1->SetColor('red'); +$graph->Add($break1); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(0,"","2001-12-31","2002-01-2","[BO]"); + +// ADjust font for caption +$activity2->caption->SetFont(FF_ARIAL,FS_BOLD); +$activity2->caption->SetColor("darkred"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity1); +$graph->Add($activity2); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/gantt_textex1.php b/Societes/ric/jpgraph/Examples/gantt_textex1.php new file mode 100755 index 00000000..dae1d56e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/gantt_textex1.php @@ -0,0 +1,96 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example with added texts"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Set table title +$graph->scale->tableTitle->Set("(Rev: 1.22)"); +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD); +$graph->scale->SetTableTitleBackground("silver"); + +// Modify the appearance of the dividing lines +$graph->scale->divider->SetWeight(3); +$graph->scale->divider->SetColor("navy"); +$graph->scale->dividerh->SetWeight(3); +$graph->scale->dividerh->SetColor("navy"); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); +$activity->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2001-12-27","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); +$activity2->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add text to top left corner of graph +$txt1 = new Text(); +$txt1->SetPos(5,2); +$txt1->Set("Note:\nEstimate done w148"); +$txt1->SetFont(FF_ARIAL,FS_BOLD,12); +$txt1->SetColor('darkred'); +$graph->Add($txt1); + +// Add text to the top bar +$txt2 = new Text(); +$txt2->SetScalePos("2002-01-01",1); +$txt2->SetFont(FF_ARIAL,FS_BOLD,12); +$txt2->SetAlign('left','center'); +$txt2->Set("Remember this!"); +$txt2->SetBox('yellow'); +$graph->Add($txt2); + + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttcolumnfontsex01.php b/Societes/ric/jpgraph/Examples/ganttcolumnfontsex01.php new file mode 100755 index 00000000..a371f875 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttcolumnfontsex01.php @@ -0,0 +1,68 @@ +SetMarginColor('gray:1.7'); +$graph->SetColor('white'); + +// Setup the graph title and title font +$graph->title->Set("Example of column fonts"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); + +// Show three headers +$graph->ShowHeaders(GANTT_HDAY | GANTT_HMONTH| GANTT_HYEAR); + +// Set the column headers and font +$graph->scale->actinfo->SetColTitles( array('Name','Start','End'),array(100)); +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_BOLD,11); + +// Some "dummy" data to be dsiplayed +$data = array( + array(0,'Group 1', '2001-11-27','2001-12-05'), + array(1,' Activity 1', '2001-11-27','2001-11-29'), + array(2,' Activity 2', '2001-11-28','2001-12-05'), + array(3,'Group 2', '2001-11-29','2001-12-10'), + array(4,' Activity 1', '2001-11-29','2001-12-03'), + array(5,' Activity 2', '2001-12-01','2001-12-10'), + +); + +// Format and add the Gantt bars to the chart +$n = count($data); +for($i=0; $i < $n; ++$i) { + if( $i === 0 || $i === 3 ) { + // Format the group bars + $bar = new GanttBar($data[$i][0],array($data[$i][1],$data[$i][2],$data[$i][3]),$data[$i][2],$data[$i][3],'',0.35); + + // For each group make the name bold but keep the dates as the default font + $bar->title->SetColumnFonts(array(array(FF_ARIAL,FS_BOLD,11))); + + // Add group markers + $bar->leftMark->SetType( MARK_LEFTTRIANGLE ); + $bar->leftMark->Show(); + $bar->rightMark->SetType( MARK_RIGHTTRIANGLE ); + $bar->rightMark->Show(); + $bar->SetFillColor('black'); + $bar->SetPattern(BAND_SOLID,'black'); + } + else { + // Format the activity bars + $bar = new GanttBar($data[$i][0],array($data[$i][1],$data[$i][2],$data[$i][3]),$data[$i][2],$data[$i][3],'',0.45); + $bar->SetPattern(BAND_RDIAG,'black'); + $bar->SetFillColor('orange'); + } + // Default font + $bar->title->SetFont(FF_ARIAL,FS_NORMAL,10); + $graph->Add($bar); +} + +// Send back the graph to the client +$graph->Stroke(); +?> + + diff --git a/Societes/ric/jpgraph/Examples/ganttconstrainex0.php b/Societes/ric/jpgraph/Examples/ganttconstrainex0.php new file mode 100755 index 00000000..8f5b72a1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttconstrainex0.php @@ -0,0 +1,38 @@ +title->Set("Example with grouping and constrains"); + +// Setup scale +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR); + +// Add the specified activities +$graph->CreateSimple($data,$constrains,$progress); + +// .. and stroke the graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/ganttconstrainex1.php b/Societes/ric/jpgraph/Examples/ganttconstrainex1.php new file mode 100755 index 00000000..7e9a3c1f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttconstrainex1.php @@ -0,0 +1,40 @@ +title->Set("Example with grouping and constrains"); + +// Setup scale +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR); + +// Add the specified activities +$graph->CreateSimple($data,$constrains,$progress); + +// .. and stroke the graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/ganttconstrainex2.php b/Societes/ric/jpgraph/Examples/ganttconstrainex2.php new file mode 100755 index 00000000..1e6bbbab --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttconstrainex2.php @@ -0,0 +1,39 @@ +title->Set("Example with grouping and constrains"); +//$graph->SetFrame(false); + +// Setup scale +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR); + +// Add the specified activities +$graph->CreateSimple($data,$constrains,$progress); + +// .. and stroke the graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/ganttcsimex01.php b/Societes/ric/jpgraph/Examples/ganttcsimex01.php new file mode 100755 index 00000000..997d3473 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttcsimex01.php @@ -0,0 +1,28 @@ +SetCSIMTarget('#','Go back 1'); +$bar1->title->SetCSIMTarget('#','Go back 1 (title)'); +$bar2 = new GanttBar(1,"Activity 2","2002-01-03","2002-01-25"); +$bar2->SetCSIMTarget('#','Go back 2'); +$bar2->title->SetCSIMTarget('#','Go back 2 (title)'); + +$graph = new GanttGraph(500); +$graph->title->Set("Example with image map"); +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); +$graph->scale->week->SetFont(FF_FONT1); + +$graph->Add(array($bar1,$bar2)); + +// And stroke +$graph->StrokeCSIM(); + + +?> + + diff --git a/Societes/ric/jpgraph/Examples/ganttcsimex02.php b/Societes/ric/jpgraph/Examples/ganttcsimex02.php new file mode 100755 index 00000000..b9dd4c66 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttcsimex02.php @@ -0,0 +1,40 @@ +title->Set("Example with image map"); +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); +$graph->scale->week->SetFont(FF_FONT1); + +$graph->CreateSimple($data,$constrains,$progress); + +// Add the specified activities +//SetupSimpleGantt($graph,$data,$constrains,$progress); + +// And stroke +$graph->StrokeCSIM(); + + +?> + + diff --git a/Societes/ric/jpgraph/Examples/ganttex00.php b/Societes/ric/jpgraph/Examples/ganttex00.php new file mode 100755 index 00000000..618b7f9d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex00.php @@ -0,0 +1,14 @@ +Add($activity); + +// Display the Gantt chart +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex01.php b/Societes/ric/jpgraph/Examples/ganttex01.php new file mode 100755 index 00000000..b3b9d535 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex01.php @@ -0,0 +1,40 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set('A main title'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set('(Draft version)'); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,'Activity 1','2001-12-21','2002-01-18'); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_LDIAG,'yellow'); +$activity->SetFillColor('red'); + +// Finally add the bar to the graph +$graph->Add($activity); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex02.php b/Societes/ric/jpgraph/Examples/ganttex02.php new file mode 100755 index 00000000..2ac42ed7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex02.php @@ -0,0 +1,42 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("Main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// Show day, week and month scale +//$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); +$graph->ShowHeaders(GANTT_HWEEK ); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_WNBR); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex03.php b/Societes/ric/jpgraph/Examples/ganttex03.php new file mode 100755 index 00000000..de528a53 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex03.php @@ -0,0 +1,42 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(7,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex04.php b/Societes/ric/jpgraph/Examples/ganttex04.php new file mode 100755 index 00000000..c9ea4cb9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex04.php @@ -0,0 +1,47 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// Create a miletone +$milestone = new MileStone(2,"Milestone",'2002-01-09','MS5'); +$milestone->caption->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->Add($milestone); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex05.php b/Societes/ric/jpgraph/Examples/ganttex05.php new file mode 100755 index 00000000..6c0ef36c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex05.php @@ -0,0 +1,48 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex06.php b/Societes/ric/jpgraph/Examples/ganttex06.php new file mode 100755 index 00000000..8cf4dbb3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex06.php @@ -0,0 +1,52 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex07.php b/Societes/ric/jpgraph/Examples/ganttex07.php new file mode 100755 index 00000000..b1eb27aa --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex07.php @@ -0,0 +1,53 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex08.php b/Societes/ric/jpgraph/Examples/ganttex08.php new file mode 100755 index 00000000..62d8947c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex08.php @@ -0,0 +1,63 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-15"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Add a right marker +$activity->rightMark->Show(); +$activity->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity->rightMark->SetWidth(13); +$activity->rightMark->SetColor("red"); +$activity->rightMark->SetFillColor("red"); +$activity->rightMark->title->Set("M5"); +$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity->rightMark->title->SetColor("white"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-10","2002-01-10"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex09.php b/Societes/ric/jpgraph/Examples/ganttex09.php new file mode 100755 index 00000000..f5fff1a1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex09.php @@ -0,0 +1,66 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Add a right marker +$activity->rightMark->Show(); +$activity->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity->rightMark->SetWidth(13); +$activity->rightMark->SetColor("red"); +$activity->rightMark->SetFillColor("red"); +$activity->rightMark->title->Set("M5"); +$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity->rightMark->title->SetColor("white"); + +// Set absolute height +$activity->SetHeight(8); + +// Finally add the bar to the graph +$graph->Add($activity); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex10.php b/Societes/ric/jpgraph/Examples/ganttex10.php new file mode 100755 index 00000000..459920cf --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex10.php @@ -0,0 +1,90 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Add a right marker +$activity->rightMark->Show(); +$activity->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity->rightMark->SetWidth(13); +$activity->rightMark->SetColor("red"); +$activity->rightMark->SetFillColor("red"); +$activity->rightMark->title->Set("M5"); +$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity->rightMark->title->SetColor("white"); + +// Set absolute height +$activity->SetHeight(1); + + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Add a right marker +$activity2->rightMark->Show(); +$activity2->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity2->rightMark->SetWidth(13); +$activity2->rightMark->SetColor("red"); +$activity2->rightMark->SetFillColor("red"); +$activity2->rightMark->title->Set("M5"); +$activity2->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity2->rightMark->title->SetColor("white"); + +// Set absolute height +$activity2->SetHeight(1); + + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex11.php b/Societes/ric/jpgraph/Examples/ganttex11.php new file mode 100755 index 00000000..2fec58bb --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex11.php @@ -0,0 +1,89 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Add a right marker +$activity->rightMark->Show(); +$activity->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity->rightMark->SetWidth(13); +$activity->rightMark->SetColor("red"); +$activity->rightMark->SetFillColor("red"); +$activity->rightMark->title->Set("M5"); +$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity->rightMark->title->SetColor("white"); + +// Set absolute height +$activity->SetHeight(10); + + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Add a right marker +$activity2->rightMark->Show(); +$activity2->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity2->rightMark->SetWidth(13); +$activity2->rightMark->SetColor("red"); +$activity2->rightMark->SetFillColor("red"); +$activity2->rightMark->title->Set("M5"); +$activity2->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity2->rightMark->title->SetColor("white"); + +// Set absolute height +$activity2->SetHeight(10); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex12.php b/Societes/ric/jpgraph/Examples/ganttex12.php new file mode 100755 index 00000000..e7adc7a9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex12.php @@ -0,0 +1,93 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(0); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Add a right marker +$activity->rightMark->Show(); +$activity->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity->rightMark->SetWidth(13); +$activity->rightMark->SetColor("red"); +$activity->rightMark->SetFillColor("red"); +$activity->rightMark->title->Set("M5"); +$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity->rightMark->title->SetColor("white"); + +// Set absolute height +$activity->SetHeight(10); + + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Add a right marker +$activity2->rightMark->Show(); +$activity2->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity2->rightMark->SetWidth(13); +$activity2->rightMark->SetColor("red"); +$activity2->rightMark->SetFillColor("red"); +$activity2->rightMark->title->Set("M5"); +$activity2->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity2->rightMark->title->SetColor("white"); + +// Set absolute height +$activity2->SetHeight(10); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex13-zoom1.php b/Societes/ric/jpgraph/Examples/ganttex13-zoom1.php new file mode 100755 index 00000000..9a8457e6 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex13-zoom1.php @@ -0,0 +1,67 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("Zooming a graph"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(zoom=0.7)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1.0); // 1=default value + +// Set zoom factor +$graph->SetZoomFactor(0.7); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity1 = new GanttBar(0,"Activity 1","2001-12-21","2002-01-07","[ER,TR]"); + +// Yellow diagonal line pattern on a red background +$activity1->SetPattern(BAND_RDIAG,"yellow"); +$activity1->SetFillColor("red"); + +// Set absolute height of activity +$activity1->SetHeight(16); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Activity 2","2001-12-21","2002-01-01","[BO,SW,JC]"); + +// ADjust font for caption +$activity2->caption->SetFont(FF_ARIAL,FS_BOLD); +$activity2->caption->SetColor("darkred"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height of activity +$activity2->SetHeight(16); + +// Finally add the bar to the graph +$graph->Add($activity1); +$graph->Add($activity2); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex13-zoom2.php b/Societes/ric/jpgraph/Examples/ganttex13-zoom2.php new file mode 100755 index 00000000..882fb7bc --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex13-zoom2.php @@ -0,0 +1,67 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("Zooming a graph"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(zoom=1.5)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1.0); // 1=default value + +// Set zoom factor +$graph->SetZoomFactor(1.5); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity1 = new GanttBar(0,"Activity 1","2001-12-21","2002-01-07","[ER,TR]"); + +// Yellow diagonal line pattern on a red background +$activity1->SetPattern(BAND_RDIAG,"yellow"); +$activity1->SetFillColor("red"); + +// Set absolute height of activity +$activity1->SetHeight(16); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Activity 2","2001-12-21","2002-01-01","[BO,SW,JC]"); + +// ADjust font for caption +$activity2->caption->SetFont(FF_ARIAL,FS_BOLD); +$activity2->caption->SetColor("darkred"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height of activity +$activity2->SetHeight(16); + +// Finally add the bar to the graph +$graph->Add($activity1); +$graph->Add($activity2); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex13.php b/Societes/ric/jpgraph/Examples/ganttex13.php new file mode 100755 index 00000000..865a4db0 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex13.php @@ -0,0 +1,64 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex13.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); // 1=default value + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity1 = new GanttBar(0,"Activity 1","2001-12-21","2002-01-07","[ER,TR]"); + +// Yellow diagonal line pattern on a red background +$activity1->SetPattern(BAND_RDIAG,"yellow"); +$activity1->SetFillColor("red"); + +// Set absolute height of activity +$activity1->SetHeight(16); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Activity 2","2001-12-21","2002-01-01","[BO,SW,JC]"); + +// ADjust font for caption +$activity2->caption->SetFont(FF_ARIAL,FS_BOLD); +$activity2->caption->SetColor("darkred"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height of activity +$activity2->SetHeight(16); + +// Finally add the bar to the graph +$graph->Add($activity1); +$graph->Add($activity2); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex14.php b/Societes/ric/jpgraph/Examples/ganttex14.php new file mode 100755 index 00000000..a53942ba --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex14.php @@ -0,0 +1,67 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex14.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); + + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex15.php b/Societes/ric/jpgraph/Examples/ganttex15.php new file mode 100755 index 00000000..ae759839 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex15.php @@ -0,0 +1,68 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex15.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); +$activity->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); +$activity2->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex16.php b/Societes/ric/jpgraph/Examples/ganttex16.php new file mode 100755 index 00000000..bf3e06fa --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex16.php @@ -0,0 +1,73 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex16.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Set table title +$graph->scale->tableTitle->Set("(Rev: 1.22)"); +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD); +$graph->scale->SetTableTitleBackground("silver"); +$graph->scale->tableTitle->Show(); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); +$activity->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); +$activity2->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex17-flag.php b/Societes/ric/jpgraph/Examples/ganttex17-flag.php new file mode 100755 index 00000000..17eaca49 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex17-flag.php @@ -0,0 +1,88 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex17.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Set table title +$graph->scale->tableTitle->Set("(Rev: 1.22)"); +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD); +$graph->scale->SetTableTitleBackground("silver"); + +// Modify the appearance of the dividing lines +$graph->scale->divider->SetWeight(3); +$graph->scale->divider->SetColor("navy"); +$graph->scale->dividerh->SetWeight(3); +$graph->scale->dividerh->SetColor("navy"); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); +$activity->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); +$activity2->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a coutnry flag +$icon = new IconPlot(); +$icon->SetAnchor('left','top'); +$icon->SetCountryFlag('norway'); +$icon->SetMix(50); +$icon->SetPos(5,5); +$graph->Add($icon); + + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex17.php b/Societes/ric/jpgraph/Examples/ganttex17.php new file mode 100755 index 00000000..cc2e7e89 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex17.php @@ -0,0 +1,78 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex17.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Set table title +$graph->scale->tableTitle->Set("(Rev: 1.22)"); +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD); +$graph->scale->SetTableTitleBackground("silver"); + +// Modify the appearance of the dividing lines +$graph->scale->divider->SetWeight(3); +$graph->scale->divider->SetColor("navy"); +$graph->scale->dividerh->SetWeight(3); +$graph->scale->dividerh->SetColor("navy"); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); +$activity->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); +$activity2->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex18.php b/Societes/ric/jpgraph/Examples/ganttex18.php new file mode 100755 index 00000000..4c4b5d91 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex18.php @@ -0,0 +1,82 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex18.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Set table title +$graph->scale->tableTitle->Set("(Rev: 1.22)"); +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD); +$graph->scale->SetTableTitleBackground("silver"); + +// Modify the appearance of the dividing lines +$graph->scale->divider->SetWeight(3); +$graph->scale->divider->SetColor("navy"); + +$graph->scale->dividerh->SetWeight(3); +$graph->scale->dividerh->SetColor("navy"); + +$graph->SetBox(true,"navy",3); + + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); +$activity->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); +$activity2->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex19.php b/Societes/ric/jpgraph/Examples/ganttex19.php new file mode 100755 index 00000000..7bb77bef --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex19.php @@ -0,0 +1,84 @@ +SetBox(); +$graph->SetShadow(); + +// Use default locale +$graph->scale->SetDateLocale(''); + +// Add title and subtitle +$graph->title->Set('Example of captions'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set('(ganttex19.php)'); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Set table title +$graph->scale->tableTitle->Set('(Rev: 1.22)'); +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD); +$graph->scale->SetTableTitleBackground('silver'); +$graph->scale->tableTitle->Show(); + +$graph->scale->divider->SetStyle('solid'); +$graph->scale->divider->SetWeight(2); +$graph->scale->divider->SetColor('black'); + + +$graph->SetBox(true,'navy',2); + + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor('white'); +$graph->scale->month->SetBackgroundColor('blue'); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,'Project','2001-12-21','2002-01-07','[50%]'); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,'yellow'); +$activity->SetFillColor('red'); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); +$activity->progress->SetPattern(BAND_HVCROSS,'blue'); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,'Project','2001-12-21','2002-01-02','[30%]'); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,'yellow'); +$activity2->SetFillColor('red'); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); +$activity2->progress->SetPattern(BAND_HVCROSS,'blue'); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine('2001-12-24','Phase 1'); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex30.php b/Societes/ric/jpgraph/Examples/ganttex30.php new file mode 100755 index 00000000..f5375004 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex30.php @@ -0,0 +1,87 @@ +SetShadow(); +$graph->SetBox(); + +// Titles for chart +$graph->title->Set("General conversion plan"); +$graph->subtitle->Set("(Revision: 2001-11-18)"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// For illustration we enable all headers. +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); + +// For the week we choose to show the start date of the week +// the default is to show week number (according to ISO 8601) +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Change the scale font +$graph->scale->week->SetFont(FF_FONT0); +$graph->scale->year->SetFont(FF_ARIAL,FS_BOLD,12); + + +// Setup some data for the gantt bars +$data = array( + array(0,"Group 1", "2001-10-29","2001-11-27",FF_FONT1,FS_BOLD,8), + array(1," Label 2", "2001-11-8","2001-12-14"), + array(2," Label 3", "2001-11-01","2001-11-8"), + array(4,"Group 2", "2001-11-07","2001-12-19",FF_FONT1,FS_BOLD,8), + array(5," Label 4", "2001-11-8","2001-12-19"), + array(6," Label 5", "2001-11-01","2001-11-8") + ); + +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + + // If you like each bar can have a shadow + // $bar->SetShadow(true,"darkgray"); + + // For illustration lets make each bar be red with yellow diagonal stripes + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("red"); + + // To indicate progress each bar can have a smaller bar within + // For illustrative purpose just set the progress to 50% for each bar + $bar->progress->Set(0.5); + + // Each bar may also have optional left and right plot marks + // As illustration lets put a filled circle with a number at the end + // of each bar + $bar->rightMark->SetType(MARK_FILLEDCIRCLE); + $bar->rightMark->SetFillColor("red"); + $bar->rightMark->SetColor("red"); + $bar->rightMark->SetWidth(10); + + // Title for the mark + $bar->rightMark->title->Set("".($i+1)); + $bar->rightMark->title->SetColor("white"); + $bar->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,10); + $bar->rightMark->Show(); + + // ... and add the bar to the gantt chart + $graph->Add($bar); +} + +// Create a milestone mark +$ms = new MileStone(7,"M5","2001-12-10","10/12"); +$ms->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($ms); + +// Create a vertical line to emphasize the milestone +$vl = new GanttVLine("2001-12-10 13:00","Phase 1","darkred"); +$vl->SetDayOffset(0.5); // Center the line in the day +$graph->Add($vl); + +// Output the graph +$graph->Stroke(); + +// EOF +?> diff --git a/Societes/ric/jpgraph/Examples/ganttex_slice.php b/Societes/ric/jpgraph/Examples/ganttex_slice.php new file mode 100755 index 00000000..5ec95bc9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttex_slice.php @@ -0,0 +1,78 @@ +SetShadow(); +$graph->SetBox(); + +// Only show part of the Gantt +$graph->SetDateRange('2001-11-22','2002-1-24'); + +// Weeks start on Sunday +$graph->scale->SetWeekStart(0); + +$graph->title->Set("General conversion plan"); +$graph->subtitle->Set("(Slice between 2001-11-22 to 2002-01-24)"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,20); + +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); +$graph->scale->week->SetFont(FF_FONT1); + + +$data = array( + array(0,"Group 1\tJohan", "2002-1-23","2002-01-28",FF_FONT1,FS_BOLD,8), + array(1," Label 2", "2001-10-26","2001-11-16"), + array(2," Label 3", "2001-11-30","2001-12-01"), + array(4,"Group 2", "2001-11-30","2001-12-22",FF_FONT1,FS_BOLD,8), + array(5," Label 4", "2001-11-30","2001-12-1"), + array(6," Label 5", "2001-12-6","2001-12-8"), + array(8," Label 8", "2001-11-30","2002-01-02") + ); + + +// make up some fictionary activity bars +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + + $bar->rightMark->Show(); + $bar->rightMark->SetType(MARK_FILLEDCIRCLE); + $bar->rightMark->SetWidth(8); + $bar->rightMark->SetColor("red"); + $bar->rightMark->SetFillColor("red"); + $bar->rightMark->title->Set($i+1); + $bar->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); + $bar->rightMark->title->SetColor("white"); + + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("red"); + $bar->progress->Set($i/10); + $bar->progress->SetPattern(GANTT_SOLID,"darkgreen"); + + $graph->Add($bar); +} + + +// The line will NOT be shown since it is outside the specified slice +$vline = new GanttVLine("2002-02-28"); +$vline->title->Set("2002-02-28"); +$vline->title->SetFont(FF_FONT1,FS_BOLD,10); +$graph->Add($vline); + +// The milestone will NOT be shown since it is outside the specified slice +$ms = new MileStone(7,"M5","2002-01-28","28/1"); +$ms->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($ms); + +$graph->Stroke(); + + +?> + + diff --git a/Societes/ric/jpgraph/Examples/gantthgridex1.php b/Societes/ric/jpgraph/Examples/gantthgridex1.php new file mode 100755 index 00000000..70a94813 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/gantthgridex1.php @@ -0,0 +1,63 @@ +title->Set("Grid example"); +$graph->subtitle->Set("(Horizontal grid)"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,14); + +// Specify what headers to show +$graph->ShowHeaders(GANTT_HMONTH|GANTT_HDAY ); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); +$graph->scale->week->SetFont(FF_FONT0); + +// Setup a horizontal grid +$graph->hgrid->Show(); +$graph->hgrid->SetRowFillColor('darkblue@0.9'); + + +for($i=0; $i 4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("red"); + $graph->Add($bar); +} + +// Setup a vertical marker line +$vline = new GanttVLine("2001-11-01"); +$vline->SetDayOffset(0.5); +$vline->title->Set("2001-11-01"); +$vline->title->SetFont(FF_FONT1,FS_BOLD,10); +$graph->Add($vline); + +// Setup a milestone +$ms = new MileStone(6,"M5","2001-11-28","28/12"); +$ms->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($ms); + +// And to show that you can also add an icon we add "Tux" +$icon = new IconPlot('penguin.png',0.05,0.95,1,15); +$icon->SetAnchor('left','bottom'); +$graph->Add($icon); + +// .. and finally send it back to the browser +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/gantthourex1.php b/Societes/ric/jpgraph/Examples/gantthourex1.php new file mode 100755 index 00000000..bfe55324 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/gantthourex1.php @@ -0,0 +1,51 @@ +SetMarginColor('blue:1.7'); +$graph->SetColor('white'); + +$graph->SetBackgroundGradient('navy','white',GRAD_HOR,BGRAD_MARGIN); +$graph->scale->hour->SetBackgroundColor('lightyellow:1.5'); +$graph->scale->hour->SetFont(FF_FONT1); +$graph->scale->day->SetBackgroundColor('lightyellow:1.5'); +$graph->scale->day->SetFont(FF_FONT1,FS_BOLD); + +$graph->title->Set("Example of hours in scale"); +$graph->title->SetColor('white'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); + +$graph->ShowHeaders(GANTT_HDAY | GANTT_HHOUR); + +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); +$graph->scale->week->SetFont(FF_FONT1); +$graph->scale->hour->SetIntervall(4); + +$graph->scale->hour->SetStyle(HOURSTYLE_HM24); +$graph->scale->day->SetStyle(DAYSTYLE_SHORTDAYDATE3); + +$data = array( + array(0," Label 1", "2001-01-26 04:00","2001-01-26 14:00"), + array(1," Label 2", "2001-01-26 10:00","2001-01-26 18:00"), + array(2," Label 3", "2001-01-26","2001-01-27 10:00") +); + + +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("red"); + $graph->Add($bar); +} + +$graph->Stroke(); + + + +?> + + diff --git a/Societes/ric/jpgraph/Examples/gantthourminex1.php b/Societes/ric/jpgraph/Examples/gantthourminex1.php new file mode 100755 index 00000000..8a76bf12 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/gantthourminex1.php @@ -0,0 +1,93 @@ +SetMarginColor('darkgreen@0.8'); +$graph->SetColor('white'); + +// We want to display day, hour and minute scales +$graph->ShowHeaders(GANTT_HDAY | GANTT_HHOUR | GANTT_HMIN); + +// We want to have the following titles in our columns +// describing each activity +$graph->scale->actinfo->SetColTitles( + array('Act','Duration','Start','Finish','Resp'));//,array(100,70,70,70)); + +// Uncomment the following line if you don't want the 3D look +// in the columns headers +//$graph->scale->actinfo->SetStyle(ACTINFO_2D); + +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); + +//These are the default values for use in the columns +//$graph->scale->actinfo->SetFontColor('black'); +//$graph->scale->actinfo->SetBackgroundColor('lightgray'); +//$graph->scale->actinfo->vgrid->SetStyle('solid'); + +$graph->scale->actinfo->vgrid->SetColor('gray'); +$graph->scale->actinfo->SetColor('darkgray'); + +// Setup day format +$graph->scale->day->SetBackgroundColor('lightyellow:1.5'); +$graph->scale->day->SetFont(FF_ARIAL); +$graph->scale->day->SetStyle(DAYSTYLE_SHORTDAYDATE1); + +// Setup hour format +$graph->scale->hour->SetIntervall(1); +$graph->scale->hour->SetBackgroundColor('lightyellow:1.5'); +$graph->scale->hour->SetFont(FF_FONT0); +$graph->scale->hour->SetStyle(HOURSTYLE_H24); +$graph->scale->hour->grid->SetColor('gray:0.8'); + +// Setup minute format +$graph->scale->minute->SetIntervall(30); +$graph->scale->minute->SetBackgroundColor('lightyellow:1.5'); +$graph->scale->minute->SetFont(FF_FONT0); +$graph->scale->minute->SetStyle(MINUTESTYLE_MM); +$graph->scale->minute->grid->SetColor('lightgray'); + +$graph->scale->tableTitle->Set('Phase 1'); +$graph->scale->tableTitle->SetFont(FF_ARIAL,FS_NORMAL,12); +$graph->scale->SetTableTitleBackground('darkgreen@0.6'); +$graph->scale->tableTitle->Show(true); + +$graph->title->Set("Example of hours & mins scale"); +$graph->title->SetColor('darkgray'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); + + +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("gray"); + $graph->Add($bar); +} + + +//$vline = new GanttVLine("2001-11-27");//d=1006858800, +$vline = new GanttVLine("2001-11-27 9:00");//d=1006858800, +$vline->SetWeight(5); +$vline->SetDayOffset(0); +$vline->title->Set("27/11 9:00"); +$vline->title->SetFont(FF_FONT1,FS_BOLD,10); +$graph->Add($vline); + +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/gantticonex1.php b/Societes/ric/jpgraph/Examples/gantticonex1.php new file mode 100755 index 00000000..b5a31976 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/gantticonex1.php @@ -0,0 +1,77 @@ +title->Set("Gantt chart with title columns and icons"); +$graph->title->SetFont(FF_ARIAL, FS_BOLD,12); +$graph->title->SetMargin(10); + +// Explicitely set the date range +// (Autoscaling will of course also work) +$graph->SetDateRange('2001-10-06','2002-4-10'); + +// 1.5 line spacing to make more room +$graph->SetVMarginFactor(1.5); + +// Setup some nonstandard colors +$graph->SetMarginColor('darkgreen@0.95'); +$graph->SetBox(true,'yellow:0.6',2); +$graph->SetFrame(true,'darkgreen',4); +$graph->scale->divider->SetColor('yellow:0.6'); +$graph->scale->dividerh->SetColor('yellow:0.6'); + +// Display month and year scale with the gridlines +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR); +$graph->scale->month->grid->SetColor('gray'); +$graph->scale->month->grid->Show(true); +$graph->scale->year->grid->SetColor('gray'); +$graph->scale->year->grid->Show(true); + +// For the titles we also add a minimum width of 100 pixels for the Task name column +$graph->scale->actinfo->SetColTitles( + array('Note','Task','Duration','Start','Finish'),array(30,100)); +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->scale->actinfo->vgrid->SetStyle('solid'); +$graph->scale->actinfo->vgrid->SetColor('gray'); + +// Uncomment this to keep the columns but show no headers +//$graph->scale->actinfo->Show(false); + +// Setup the icons we want to use +$erricon = new IconImage(GICON_FOLDER,0.6); +$startconicon = new IconImage(GICON_FOLDEROPEN,0.6); +$endconicon = new IconImage(GICON_TEXTIMPORTANT,0.5); + +// Store the icons in the first column and use plain text in the others +$data = array( + array(0,array($erricon,"Pre-study","102 days","23 Nov '01","1 Mar '02") + , "2001-11-23","2002-03-1",FF_ARIAL,FS_NORMAL,8), + array(1,array($startconicon,"Prototype","21 days","26 Oct '01","16 Nov '01"), + "2001-10-26","2001-11-16",FF_ARIAL,FS_NORMAL,8), + array(2,array($endconicon,"Report","12 days","1 Mar '02","13 Mar '02"), + "2002-03-01","2002-03-13",FF_ARIAL,FS_NORMAL,8) +); + +// Create the bars and add them to the gantt chart +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("gray"); + $bar->progress->Set(0.5); + $bar->progress->SetPattern(GANTT_SOLID,"darkgreen"); + $bar->title->SetCSIMTarget(array('#1'.$i,'#2'.$i,'#3'.$i,'#4'.$i,'#5'.$i),array('11'.$i,'22'.$i,'33'.$i)); + $graph->Add($bar); +} + +// Output the chart +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/ganttmonthyearex1.php b/Societes/ric/jpgraph/Examples/ganttmonthyearex1.php new file mode 100755 index 00000000..6bc7809c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttmonthyearex1.php @@ -0,0 +1,50 @@ +title->Set("Only month & year scale"); + +// Setup some "very" nonstandard colors +$graph->SetMarginColor('lightgreen@0.8'); +$graph->SetBox(true,'yellow:0.6',2); +$graph->SetFrame(true,'darkgreen',4); +$graph->scale->divider->SetColor('yellow:0.6'); +$graph->scale->dividerh->SetColor('yellow:0.6'); + +// Explicitely set the date range +// (Autoscaling will of course also work) +$graph->SetDateRange('2001-10-06','2002-4-01'); + +// Display month and year scale with the gridlines +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR); +$graph->scale->month->grid->SetColor('gray'); +$graph->scale->month->grid->Show(true); +$graph->scale->year->grid->SetColor('gray'); +$graph->scale->year->grid->Show(true); + +// Data for our example activities +$data = array( + array(0,"Group 1 Johan", "2001-11-23","2002-03-1",FF_FONT1,FS_BOLD,8), + array(1," Label 2", "2001-10-26","2001-11-16")); + +// Create the bars and add them to the gantt chart +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("red"); + $bar->progress->Set(0.5); + $bar->progress->SetPattern(GANTT_SOLID,"darkgreen"); + $graph->Add($bar); +} + +// Output the chart +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/ganttmonthyearex2.php b/Societes/ric/jpgraph/Examples/ganttmonthyearex2.php new file mode 100755 index 00000000..4ed50925 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttmonthyearex2.php @@ -0,0 +1,66 @@ +title->Set("Only month & year scale"); + +// Setup some "very" nonstandard colors +$graph->SetMarginColor('lightgreen@0.8'); +$graph->SetBox(true,'yellow:0.6',2); +$graph->SetFrame(true,'darkgreen',4); +$graph->scale->divider->SetColor('yellow:0.6'); +$graph->scale->dividerh->SetColor('yellow:0.6'); + +// Explicitely set the date range +// (Autoscaling will of course also work) +$graph->SetDateRange('2001-10-06','2002-4-10'); + +// Display month and year scale with the gridlines +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR); +$graph->scale->month->grid->SetColor('gray'); +$graph->scale->month->grid->Show(true); +$graph->scale->year->grid->SetColor('gray'); +$graph->scale->year->grid->Show(true); + + +// Setup activity info + +// For the titles we also add a minimum width of 100 pixels for the Task name column +$graph->scale->actinfo->SetColTitles( + array('Name','Duration','Start','Finish'),array(100)); +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->scale->actinfo->vgrid->SetStyle('solid'); +$graph->scale->actinfo->vgrid->SetColor('gray'); + +// Data for our example activities +$data = array( + array(0,array("Pre-study","102 days","23 Nov '01","1 Mar '02") + , "2001-11-23","2002-03-1",FF_ARIAL,FS_NORMAL,8), + array(1,array("Prototype","21 days","26 Oct '01","16 Nov '01"), + "2001-10-26","2001-11-16",FF_ARIAL,FS_NORMAL,8), + array(2,array("Report","12 days","1 Mar '02","13 Mar '02"), + "2002-03-01","2002-03-13",FF_ARIAL,FS_NORMAL,8) +); + +// Create the bars and add them to the gantt chart +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("gray"); + $bar->progress->Set(0.5); + $bar->progress->SetPattern(GANTT_SOLID,"darkgreen"); + $graph->Add($bar); +} + +// Output the chart +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/ganttmonthyearex3.php b/Societes/ric/jpgraph/Examples/ganttmonthyearex3.php new file mode 100755 index 00000000..fa0c3f67 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttmonthyearex3.php @@ -0,0 +1,66 @@ +title->Set("Only month & year scale"); + +// Setup some "very" nonstandard colors +$graph->SetMarginColor('lightgreen@0.8'); +$graph->SetBox(true,'yellow:0.6',2); +$graph->SetFrame(true,'darkgreen',4); +$graph->scale->divider->SetColor('yellow:0.6'); +$graph->scale->dividerh->SetColor('yellow:0.6'); + +// Explicitely set the date range +// (Autoscaling will of course also work) +$graph->SetDateRange('2001-10-06','2002-4-10'); + +// Display month and year scale with the gridlines +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR); +$graph->scale->month->grid->SetColor('gray'); +$graph->scale->month->grid->Show(true); +$graph->scale->year->grid->SetColor('gray'); +$graph->scale->year->grid->Show(true); + + +// Setup activity info + +// For the titles we also add a minimum width of 100 pixels for the Task name column +$graph->scale->actinfo->SetColTitles( + array('Type','Name','Duration','Start','Finish'),array(40,100)); +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->scale->actinfo->vgrid->SetStyle('solid'); +$graph->scale->actinfo->vgrid->SetColor('gray'); + +// Data for our example activities +$data = array( + array(0,array("","Pre-study","102 days","23 Nov '01","1 Mar '02") + , "2001-11-23","2002-03-1",FF_ARIAL,FS_NORMAL,8), + array(1,array("","Prototype","21 days","26 Oct '01","16 Nov '01"), + "2001-10-26","2001-11-16",FF_ARIAL,FS_NORMAL,8), + array(2,array("","Report","12 days","1 Mar '02","13 Mar '02"), + "2002-03-01","2002-03-13",FF_ARIAL,FS_NORMAL,8) +); + +// Create the bars and add them to the gantt chart +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("gray"); + $bar->progress->Set(0.5); + $bar->progress->SetPattern(GANTT_SOLID,"darkgreen"); + $graph->Add($bar); +} + +// Output the chart +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/ganttmonthyearex4.php b/Societes/ric/jpgraph/Examples/ganttmonthyearex4.php new file mode 100755 index 00000000..defa2e73 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttmonthyearex4.php @@ -0,0 +1,71 @@ +title->Set("Adding a spaning title"); + +// Setup some "very" nonstandard colors +$graph->SetMarginColor('lightgreen@0.8'); +$graph->SetBox(true,'yellow:0.6',2); +$graph->SetFrame(true,'darkgreen',4); +$graph->scale->divider->SetColor('yellow:0.6'); +$graph->scale->dividerh->SetColor('yellow:0.6'); + +// Explicitely set the date range +// (Autoscaling will of course also work) +$graph->SetDateRange('2001-11-06','2002-1-10'); + +// Display month and year scale with the gridlines +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR | GANTT_HWEEK ); +$graph->scale->month->grid->SetColor('gray'); +$graph->scale->month->grid->Show(true); +$graph->scale->year->grid->SetColor('gray'); +$graph->scale->year->grid->Show(true); + + +//Setup spanning title +$graph->scale->tableTitle->Set( 'Phase 1' ); +$graph->scale->tableTitle->SetFont( FF_ARIAL , FS_NORMAL , 16 ); +$graph->scale->SetTableTitleBackground( 'darkgreen@0.6' ); +$graph->scale->tableTitle->Show( true ); + +// Setup activity info + +// For the titles we also add a minimum width of 100 pixels for the Task name column +$graph->scale->actinfo->SetColTitles(array('Name','Duration','Start','Finish'),array(100)); +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->scale->actinfo->vgrid->SetStyle('solid'); +$graph->scale->actinfo->vgrid->SetColor('gray'); + +// Data for our example activities +$data = array( + array(0,array("Pre-study","102 days","23 Nov '01","1 Mar '02") + , "2001-11-23","2002-03-1",FF_ARIAL,FS_NORMAL,8), + array(1,array("Prototype","21 days","26 Oct '01","16 Nov '01"), + "2001-10-26","2001-11-16",FF_ARIAL,FS_NORMAL,8), + array(2,array("Report","12 days","1 Mar '02","13 Mar '02"), + "2002-03-01","2002-03-13",FF_ARIAL,FS_NORMAL,8) +); + +// Create the bars and add them to the gantt chart +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("gray"); + $bar->progress->Set(0.5); + $bar->progress->SetPattern(GANTT_SOLID,"darkgreen"); + $graph->Add($bar); +} + +// Output the chart +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/ganttsimpleex1.php b/Societes/ric/jpgraph/Examples/ganttsimpleex1.php new file mode 100755 index 00000000..63e4efb6 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ganttsimpleex1.php @@ -0,0 +1,31 @@ +title->Set("Gantt Graph using CreateSimple()"); + +// Setup scale +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Add the specified activities +$graph->CreateSimple($data); + +// .. and stroke the graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/grace_ex0.php b/Societes/ric/jpgraph/Examples/grace_ex0.php new file mode 100755 index 00000000..cd10df96 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/grace_ex0.php @@ -0,0 +1,59 @@ +clearTheme(); +$graph->img->SetMargin(40,30,40,50); +$graph->SetScale("textint"); +$graph->SetFrame(true,'blue',1); +$graph->SetColor('lightblue'); +$graph->SetMarginColor('lightblue'); + +// Setup X-axis labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +$graph->xaxis->SetFont(FF_FONT1); +$graph->xaxis->SetColor('darkblue','black'); + +// Setup "hidden" y-axis by given it the same color +// as the background (this could also be done by setting the weight +// to zero) +$graph->yaxis->SetColor('lightblue','darkblue'); +$graph->ygrid->SetColor('white'); + +// Setup graph title ands fonts +$graph->title->Set('Using grace = 0'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->xaxis->SetTitle('Year 2002','center'); +$graph->xaxis->SetTitleMargin(10); +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD); + +// Add some grace to the top so that the scale doesn't +// end exactly at the max value. +$graph->yaxis->scale->SetGrace(0); + + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor('darkblue'); +$bplot->SetColor('darkblue'); +$bplot->SetWidth(0.5); +$bplot->SetShadow('darkgray'); + +// Setup the values that are displayed on top of each bar +// Must use TTF fonts if we want text at an arbitrary angle +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,8); +$bplot->value->SetFormat('$%d'); +$bplot->value->SetColor('darkred'); +$bplot->value->SetAngle(45); +$graph->Add($bplot); + +// Finally stroke the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/grace_ex1.php b/Societes/ric/jpgraph/Examples/grace_ex1.php new file mode 100755 index 00000000..26c46595 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/grace_ex1.php @@ -0,0 +1,59 @@ +clearTheme(); +$graph->img->SetMargin(40,30,40,50); +$graph->SetScale("textint"); +$graph->SetFrame(true,'blue',1); +$graph->SetColor('lightblue'); +$graph->SetMarginColor('lightblue'); + +// Setup X-axis labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +$graph->xaxis->SetFont(FF_FONT1); +$graph->xaxis->SetColor('darkblue','black'); + +// Setup "hidden" y-axis by given it the same color +// as the background (this could also be done by setting the weight +// to zero) +$graph->yaxis->SetColor('lightblue','darkblue'); +$graph->ygrid->SetColor('white'); + +// Setup graph title ands fonts +$graph->title->Set('Using grace = 10%'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->xaxis->SetTitle('Year 2002','center'); +$graph->xaxis->SetTitleMargin(10); +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD); + +// Add some grace to the top so that the scale doesn't +// end exactly at the max value. +$graph->yaxis->scale->SetGrace(10); + + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor('darkblue'); +$bplot->SetColor('darkblue'); +$bplot->SetWidth(0.5); +$bplot->SetShadow('darkgray'); + +// Setup the values that are displayed on top of each bar +// Must use TTF fonts if we want text at an arbitrary angle +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,8); +$bplot->value->SetFormat('$%d'); +$bplot->value->SetColor('darkred'); +$bplot->value->SetAngle(45); +$graph->Add($bplot); + +// Finally stroke the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/grace_ex2.php b/Societes/ric/jpgraph/Examples/grace_ex2.php new file mode 100755 index 00000000..a4e84607 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/grace_ex2.php @@ -0,0 +1,59 @@ +clearTheme(); +$graph->img->SetMargin(40,30,40,50); +$graph->SetScale("textint"); +$graph->SetFrame(true,'blue',1); +$graph->SetColor('lightblue'); +$graph->SetMarginColor('lightblue'); + +// Setup X-axis labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +$graph->xaxis->SetFont(FF_FONT1); +$graph->xaxis->SetColor('darkblue','black'); + +// Setup "hidden" y-axis by given it the same color +// as the background (this could also be done by setting the weight +// to zero) +$graph->yaxis->SetColor('lightblue','darkblue'); +$graph->ygrid->SetColor('white'); + +// Setup graph title ands fonts +$graph->title->Set('Using grace = 50%'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->xaxis->SetTitle('Year 2002','center'); +$graph->xaxis->SetTitleMargin(10); +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD); + +// Add some grace to the top so that the scale doesn't +// end exactly at the max value. +$graph->yaxis->scale->SetGrace(50); + + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor('darkblue'); +$bplot->SetColor('darkblue'); +$bplot->SetWidth(0.5); +$bplot->SetShadow('darkgray'); + +// Setup the values that are displayed on top of each bar +// Must use TTF fonts if we want text at an arbitrary angle +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,8); +$bplot->value->SetFormat('$%d'); +$bplot->value->SetColor('darkred'); +$bplot->value->SetAngle(45); +$graph->Add($bplot); + +// Finally stroke the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/grace_ex3.php b/Societes/ric/jpgraph/Examples/grace_ex3.php new file mode 100755 index 00000000..0d318c7e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/grace_ex3.php @@ -0,0 +1,59 @@ +clearTheme(); +$graph->img->SetMargin(40,30,40,50); +$graph->SetScale("textint"); +$graph->SetFrame(true,'blue',1); +$graph->SetColor('lightblue'); +$graph->SetMarginColor('lightblue'); + +// Setup X-axis labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +$graph->xaxis->SetFont(FF_FONT1); +$graph->xaxis->SetColor('darkblue','black'); + +// Setup "hidden" y-axis by given it the same color +// as the background (this could also be done by setting the weight +// to zero) +$graph->yaxis->SetColor('lightblue','darkblue'); +$graph->ygrid->SetColor('white'); + +// Setup graph title ands fonts +$graph->title->Set('Using grace = 100%'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->xaxis->SetTitle('Year 2002','center'); +$graph->xaxis->SetTitleMargin(10); +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD); + +// Add some grace to the top so that the scale doesn't +// end exactly at the max value. +$graph->yaxis->scale->SetGrace(100); + + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor('darkblue'); +$bplot->SetColor('darkblue'); +$bplot->SetWidth(0.5); +$bplot->SetShadow('darkgray'); + +// Setup the values that are displayed on top of each bar +// Must use TTF fonts if we want text at an arbitrary angle +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,8); +$bplot->value->SetFormat('$%d'); +$bplot->value->SetColor('darkred'); +$bplot->value->SetAngle(45); +$graph->Add($bplot); + +// Finally stroke the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/gradbkgex1.php b/Societes/ric/jpgraph/Examples/gradbkgex1.php new file mode 100755 index 00000000..cfbaa1ff --- /dev/null +++ b/Societes/ric/jpgraph/Examples/gradbkgex1.php @@ -0,0 +1,65 @@ +clearTheme(); +$graph->SetMarginColor('white'); +$graph->SetScale("textlin",0,50); +$graph->SetMargin(30,50,30,30); + +// We must have the frame enabled to get the gradient +// However, we don't want the frame line so we set it to +// white color which makes it invisible. +$graph->SetFrame(true,'white'); + +// Setup a background gradient image +$graph->SetBackgroundGradient('blue','navy:0.5',GRAD_HOR,BGRAD_PLOT); + +// Setup the tab title +$graph->tabtitle->Set(' 3rd Division ' ); +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13); + +// Setup x,Y grid +$graph->xgrid->Show(); +$graph->xgrid->SetColor('gray@0.5'); +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); +$graph->ygrid->SetColor('gray@0.5'); + +// Setup color for axis and labels on axis +$graph->xaxis->SetColor('orange','black'); +$graph->yaxis->SetColor('orange','black'); + +// Ticks on the outsid +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Setup the legend box colors and font +$graph->legend->SetColor('white','navy'); +$graph->legend->SetFillColor('navy@0.25'); +$graph->legend->SetFont(FF_ARIAL,FS_BOLD,8); +$graph->legend->SetShadow('darkgray@0.4',3); +$graph->legend->SetPos(0.05,0.05,'right','top'); + +// Create the first line +$p1 = new LinePlot($datay1); +$p1->SetColor("red"); +$p1->SetWeight(2); +$p1->SetLegend('2002'); +$graph->Add($p1); + +// Create the second line +$p2 = new LinePlot($datay2); +$p2->SetColor("lightyellow"); +$p2->SetLegend('2001'); +$p2->SetWeight(2); +$graph->Add($p2); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/gradlinefillex1.php b/Societes/ric/jpgraph/Examples/gradlinefillex1.php new file mode 100755 index 00000000..8741edaf --- /dev/null +++ b/Societes/ric/jpgraph/Examples/gradlinefillex1.php @@ -0,0 +1,28 @@ +clearTheme(); +$graph->SetMargin(40,40,20,30); +$graph->SetScale("intlin"); +$graph->SetMarginColor('darkgreen@0.8'); + +$graph->title->Set('Gradient filled line plot'); +$graph->yscale->SetAutoMin(0); + +// Create the line +$p1 = new LinePlot($datay); +$p1->SetColor("blue"); +$p1->SetWeight(0); +$p1->SetFillGradient('red','yellow'); + +$graph->Add($p1); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/gradlinefillex2.php b/Societes/ric/jpgraph/Examples/gradlinefillex2.php new file mode 100755 index 00000000..b6f4080b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/gradlinefillex2.php @@ -0,0 +1,29 @@ +clearTheme(); +$graph->SetMargin(40,40,20,30); +$graph->SetScale("intlin"); +$graph->SetBox(); +$graph->SetMarginColor('darkgreen@0.8'); + +// Setup a background gradient image +$graph->SetBackgroundGradient('darkred','yellow',GRAD_HOR,BGRAD_PLOT); + +$graph->title->Set('Gradient filled line plot ex2'); +$graph->yscale->SetAutoMin(0); + +// Create the line +$p1 = new LinePlot($datay); +$p1->SetFillGradient('white','darkgreen'); +$graph->Add($p1); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/gradlinefillex3.php b/Societes/ric/jpgraph/Examples/gradlinefillex3.php new file mode 100755 index 00000000..bfc09ba2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/gradlinefillex3.php @@ -0,0 +1,29 @@ +clearTheme(); +$graph->SetMargin(40,40,20,30); +$graph->SetScale("intlin"); +$graph->SetBox(); +$graph->SetMarginColor('darkgreen@0.8'); + +// Setup a background gradient image +$graph->SetBackgroundGradient('darkred','yellow',GRAD_HOR,BGRAD_PLOT); + +$graph->title->Set('Gradient filled line plot ex3'); +$graph->yscale->SetAutoMin(0); + +// Create the line +$p1 = new LinePlot($datay); +$p1->SetFillGradient('white','darkgreen',4); +$graph->Add($p1); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/gradlinefillex4.php b/Societes/ric/jpgraph/Examples/gradlinefillex4.php new file mode 100755 index 00000000..7707bebc --- /dev/null +++ b/Societes/ric/jpgraph/Examples/gradlinefillex4.php @@ -0,0 +1,30 @@ +clearTheme(); +$graph->SetMargin(40,40,20,30); +$graph->SetScale("intlin"); +$graph->SetBox(); +$graph->SetMarginColor('darkgreen@0.8'); + +// Setup a background gradient image +$graph->SetBackgroundGradient('darkred','yellow',GRAD_HOR,BGRAD_PLOT); + +$graph->title->Set('Gradient filled line plot ex2'); +$graph->yscale->SetAutoMin(0); + +// Create the line +$p1 = new LinePlot($datay); +$p1->SetFillGradient('white','darkgreen'); +$p1->SetStepStyle(); +$graph->Add($p1); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/green_example.php b/Societes/ric/jpgraph/Examples/green_example.php new file mode 100755 index 00000000..4c939d2d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/green_example.php @@ -0,0 +1,58 @@ + array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ), + 1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ), + 2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ), + 3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ), + 4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ), + 5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ), + 6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ), + 7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ), + 8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ), +); + + +// Create the graph. These two calls are always required +$graph = new Graph(400,300); + +$graph->SetScale("textlin"); +if ($theme) { + $graph->SetTheme(new $theme()); +} +$theme_class = new GreenTheme; +$graph->SetTheme($theme_class); + +$plot = array(); +// Create the bar plots +for ($i = 0; $i < 4; $i++) { + $plot[$i] = new BarPlot($data[$i]); + $plot[$i]->SetLegend('plot'.($i+1)); +} +//$acc1 = new AccBarPlot(array($plot[0], $plot[1])); +//$acc1->value->Show(); +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] )); + +for ($i = 4; $i < 8; $i++) { + $plot[$i] = new LinePlot($data[$i]); + $plot[$i]->SetLegend('plot'.$i); + $plot[$i]->value->Show(); +} + +$graph->Add($gbplot); +$graph->Add($plot[4]); + +$title = "GreenTheme Example"; +$title = mb_convert_encoding($title,'UTF-8'); +$graph->title->Set($title); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/groupbarex1.php b/Societes/ric/jpgraph/Examples/groupbarex1.php new file mode 100755 index 00000000..0c4810e4 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/groupbarex1.php @@ -0,0 +1,44 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->img->SetMargin(40,30,40,40); +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->title->Set('Group bar plot'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +$bplot1->SetFillColor("orange"); +$bplot2->SetFillColor("brown"); +$bplot3->SetFillColor("darkgreen"); + +$bplot1->SetShadow(); +$bplot2->SetShadow(); +$bplot3->SetShadow(); + +$bplot1->SetShadow(); +$bplot2->SetShadow(); +$bplot3->SetShadow(); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/heat1.jpg b/Societes/ric/jpgraph/Examples/heat1.jpg new file mode 100755 index 00000000..07f04d76 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/heat1.jpg differ diff --git a/Societes/ric/jpgraph/Examples/horizbarex1.php b/Societes/ric/jpgraph/Examples/horizbarex1.php new file mode 100755 index 00000000..586eb75e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/horizbarex1.php @@ -0,0 +1,64 @@ +clearTheme(); +$graph->SetScale('textlin'); + +// Rotate graph 90 degrees and set margin +$graph->Set90AndMargin(50,20,50,30); + +// Nice shadow +$graph->SetShadow(); + +// Setup title +$graph->title->Set('Horizontal bar graph ex 1'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); + +// Setup X-axis +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,12); + +// Some extra margin looks nicer +$graph->xaxis->SetLabelMargin(10); + +// Label align for X-axis +$graph->xaxis->SetLabelAlign('right','center'); + +// Add some grace to y-axis so the bars doesn't go +// all the way to the end of the plot area +$graph->yaxis->scale->SetGrace(20); + +// We don't want to display Y-axis +$graph->yaxis->Hide(); + +// Now create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor('orange'); +$bplot->SetShadow(); + +//You can change the width of the bars if you like +//$bplot->SetWidth(0.5); + +// We want to display the value of each bar at the top +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,12); +$bplot->value->SetAlign('left','center'); +$bplot->value->SetColor('black','darkred'); +$bplot->value->SetFormat('%.1f mkr'); + +// Add the bar to the graph +$graph->Add($bplot); + +// .. and stroke the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/horizbarex2.php b/Societes/ric/jpgraph/Examples/horizbarex2.php new file mode 100755 index 00000000..fb992e9f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/horizbarex2.php @@ -0,0 +1,71 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$top = 80; +$bottom = 30; +$left = 50; +$right = 30; +$graph->Set90AndMargin($left,$right,$top,$bottom); + +// Nice shadow +$graph->SetShadow(); + +// Setup title +$graph->title->Set("Horizontal bar graph ex 2"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->subtitle->Set("(Axis at top)"); + +// Setup X-axis +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,12); + +// Some extra margin looks nicer +$graph->xaxis->SetLabelMargin(5); + +// Label align for X-axis +$graph->xaxis->SetLabelAlign('right','center'); + +// Add some grace to y-axis so the bars doesn't go +// all the way to the end of the plot area +$graph->yaxis->scale->SetGrace(20); +$graph->yaxis->SetLabelAlign('center','bottom'); +$graph->yaxis->SetLabelAngle(45); +$graph->yaxis->SetLabelFormat('%d'); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,12); + +// We don't want to display Y-axis +//$graph->yaxis->Hide(); + +// Now create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetShadow(); + +//You can change the width of the bars if you like +//$bplot->SetWidth(0.5); + +// We want to display the value of each bar at the top +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,12); +$bplot->value->SetAlign('left','center'); +$bplot->value->SetColor("black","darkred"); +$bplot->value->SetFormat('%.1f mkr'); + +// Add the bar to the graph +$graph->Add($bplot); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/horizbarex3.php b/Societes/ric/jpgraph/Examples/horizbarex3.php new file mode 100755 index 00000000..01156c45 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/horizbarex3.php @@ -0,0 +1,100 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$top = 50; +$bottom = 80; +$left = 50; +$right = 20; +$graph->Set90AndMargin($left,$right,$top,$bottom); + +$graph->xaxis->SetPos('min'); + +// Nice shadow +$graph->SetShadow(); + +// Setup title +$graph->title->Set("Horizontal bar graph ex 3"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->subtitle->Set("(Axis at bottom)"); + +// Setup X-axis +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetFont(FF_FONT2,FS_BOLD,12); + +// Some extra margin looks nicer +$graph->xaxis->SetLabelMargin(5); + +// Label align for X-axis +$graph->xaxis->SetLabelAlign('right','center'); + +// Add some grace to y-axis so the bars doesn't go +// all the way to the end of the plot area +$graph->yaxis->scale->SetGrace(20); + +// Setup the Y-axis to be displayed in the bottom of the +// graph. We also finetune the exact layout of the title, +// ticks and labels to make them look nice. +$graph->yaxis->SetPos('max'); + +// First make the labels look right +$graph->yaxis->SetLabelAlign('center','top'); +$graph->yaxis->SetLabelFormat('%d'); +$graph->yaxis->SetLabelSide(SIDE_RIGHT); + +// The fix the tick marks +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Finally setup the title +$graph->yaxis->SetTitleSide(SIDE_RIGHT); +$graph->yaxis->SetTitleMargin(35); + +// To align the title to the right use : +$graph->yaxis->SetTitle('Turnaround 2002','high'); +$graph->yaxis->title->Align('right'); + +// To center the title use : +//$graph->yaxis->SetTitle('Turnaround 2002','center'); +//$graph->yaxis->title->Align('center'); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->yaxis->title->SetAngle(0); + +$graph->yaxis->SetFont(FF_FONT2,FS_NORMAL); +// If you want the labels at an angle other than 0 or 90 +// you need to use TTF fonts +//$graph->yaxis->SetLabelAngle(0); + +// Now create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetShadow(); + +//You can change the width of the bars if you like +//$bplot->SetWidth(0.5); + +// We want to display the value of each bar at the top +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,12); +$bplot->value->SetAlign('left','center'); +$bplot->value->SetColor("black","darkred"); +$bplot->value->SetFormat('%.1f mkr'); + +// Add the bar to the graph +$graph->Add($bplot); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/horizbarex4.php b/Societes/ric/jpgraph/Examples/horizbarex4.php new file mode 100755 index 00000000..729c67b0 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/horizbarex4.php @@ -0,0 +1,49 @@ +clearTheme(); +$graph->SetScale('textlin'); + +$top = 60; +$bottom = 30; +$left = 80; +$right = 30; +$graph->Set90AndMargin($left,$right,$top,$bottom); + +// Nice shadow +$graph->SetShadow(); + +// Setup labels +$lbl = array("Andrew\nTait","Thomas\nAnderssen","Kevin\nSpacey","Nick\nDavidsson", +"David\nLindquist","Jason\nTait","Lorin\nPersson"); +$graph->xaxis->SetTickLabels($lbl); + +// Label align for X-axis +$graph->xaxis->SetLabelAlign('right','center','right'); + +// Label align for Y-axis +$graph->yaxis->SetLabelAlign('center','bottom'); + +// Titles +$graph->title->Set('Number of incidents'); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor('orange'); +$bplot->SetWidth(0.5); +$bplot->SetYMin(1990); + +$graph->Add($bplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/horizbarex6.php b/Societes/ric/jpgraph/Examples/horizbarex6.php new file mode 100755 index 00000000..344d8374 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/horizbarex6.php @@ -0,0 +1,84 @@ +clearTheme(); +$graph->SetScale("textlin"); + +// No frame around the image +$graph->SetFrame(false); + +// Rotate graph 90 degrees and set margin +$graph->Set90AndMargin(100,20,50,30); + +// Set white margin color +$graph->SetMarginColor('white'); + +// Use a box around the plot area +$graph->SetBox(); + +// Use a gradient to fill the plot area +$graph->SetBackgroundGradient('white','lightblue',GRAD_HOR,BGRAD_PLOT); + +// Setup title +$graph->title->Set("Graphic card performance"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,11); +$graph->subtitle->Set("(Non optimized)"); + +// Setup X-axis +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,8); + +// Some extra margin looks nicer +$graph->xaxis->SetLabelMargin(10); + +// Label align for X-axis +$graph->xaxis->SetLabelAlign('right','center'); + +// Add some grace to y-axis so the bars doesn't go +// all the way to the end of the plot area +$graph->yaxis->scale->SetGrace(20); + +// We don't want to display Y-axis +$graph->yaxis->Hide(); + +// Now create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetShadow(); + +//You can change the width of the bars if you like +//$bplot->SetWidth(0.5); + +// Set gradient fill for bars +$bplot->SetFillGradient('darkred','yellow',GRAD_HOR); + +// We want to display the value of each bar at the top +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,10); +//$bplot->value->SetAlign('left','center'); +$bplot->value->SetColor("white"); +$bplot->value->SetFormat('%.1f'); +$bplot->SetValuePos('max'); + +// Add the bar to the graph +$graph->Add($bplot); + +// Add some explanation text +$txt = new Text('Note: Higher value is better.'); +$txt->SetPos(190,399,'center','bottom'); +$txt->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->Add($txt); + +// .. and stroke the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/icon.jpg b/Societes/ric/jpgraph/Examples/icon.jpg new file mode 100755 index 00000000..dc3b3029 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/icon.jpg differ diff --git a/Societes/ric/jpgraph/Examples/imgmarkercsimex1.php b/Societes/ric/jpgraph/Examples/imgmarkercsimex1.php new file mode 100755 index 00000000..2c91a0dd --- /dev/null +++ b/Societes/ric/jpgraph/Examples/imgmarkercsimex1.php @@ -0,0 +1,55 @@ +SetMarginColor('white'); +$graph->SetScale("textlin"); +$graph->SetFrame(false); +$graph->SetMargin(30,5,25,20); + +// Setup the tab +$graph->tabtitle->Set(' Year 2003 ' ); +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13); +$graph->tabtitle->SetColor('darkred','#E1E1FF'); + +// Enable X-grid as well +$graph->xgrid->Show(); + +// Use months as X-labels +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +// Create the plot +$p1 = new LinePlot($datay1); +$p1->SetColor("navy"); + +$p1->SetCSIMTargets(array('#1','#2','#3','#4','#5')); + +// Use an image of favourite car as +$p1->mark->SetType(MARK_IMG,'saab_95.jpg',0.5); +//$p1->mark->SetType(MARK_SQUARE); + +// Displayes value on top of marker image +$p1->value->SetFormat('%d mil'); +$p1->value->Show(); +$p1->value->SetColor('darkred'); +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10); +// Increase the margin so that the value is printed avove tje +// img marker +$p1->value->SetMargin(14); + +// Incent the X-scale so the first and last point doesn't +// fall on the edges +$p1->SetCenter(); + +$graph->Add($p1); + +$graph->StrokeCSIM(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/imgmarkerex1.php b/Societes/ric/jpgraph/Examples/imgmarkerex1.php new file mode 100755 index 00000000..c8b88b6c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/imgmarkerex1.php @@ -0,0 +1,51 @@ +clearTheme(); +$graph->SetMarginColor('white'); +$graph->SetScale("textlin"); +$graph->SetFrame(false); +$graph->SetMargin(30,5,25,20); + +// Setup the tab +$graph->tabtitle->Set(' Year 2003 ' ); +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13); +$graph->tabtitle->SetColor('darkred','#E1E1FF'); + +// Enable X-grid as well +$graph->xgrid->Show(); + +// Use months as X-labels +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +// Create the plot +$p1 = new LinePlot($datay1); +$p1->SetColor("navy"); + +// Use an image of favourite car as marker +$p1->mark->SetType(MARK_IMG,'saab_95.jpg',0.5); + +// Displayes value on top of marker image +$p1->value->SetFormat('%d mil'); +$p1->value->Show(); +$p1->value->SetColor('darkred'); +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10); +// Increase the margin so that the value is printed avove tje +// img marker +$p1->value->SetMargin(14); + +// Incent the X-scale so the first and last point doesn't +// fall on the edges +$p1->SetCenter(); + +$graph->Add($p1); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/impulsex1.php b/Societes/ric/jpgraph/Examples/impulsex1.php new file mode 100755 index 00000000..ff893833 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/impulsex1.php @@ -0,0 +1,23 @@ +SetScale("textlin"); + +$graph->SetShadow(); +$graph->img->SetMargin(40,40,40,40); + +$graph->title->Set("Simple mpuls plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$sp1 = new ScatterPlot($datay); +$sp1->mark->SetType(MARK_SQUARE); +$sp1->SetImpuls(); + +$graph->Add($sp1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/impulsex2.php b/Societes/ric/jpgraph/Examples/impulsex2.php new file mode 100755 index 00000000..550ea510 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/impulsex2.php @@ -0,0 +1,30 @@ +clearTheme(); +$graph->SetScale("textlin"); + +$graph->SetShadow(); +$graph->img->SetMargin(40,40,40,40); + +$graph->title->Set("Impuls plot, variant 2"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->Set("Impuls respons"); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$sp1 = new ScatterPlot($datay);//,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("red"); +$sp1->mark->SetWidth(4); +$sp1->SetImpuls(); +$sp1->SetColor("blue"); +$sp1->SetWeight(3); + +$graph->Add($sp1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/impulsex3.php b/Societes/ric/jpgraph/Examples/impulsex3.php new file mode 100755 index 00000000..f7b5182e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/impulsex3.php @@ -0,0 +1,53 @@ +SetScale("intlin"); +$graph->SetShadow(); +$graph->SetBox(); + +$graph->title->Set("Impuls Example 3"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Set format callback for labels +$graph->yaxis->SetLabelFormatCallback("mycallback"); + +// Set X-axis at the minimum value of Y-axis (default will be at 0) +$graph->xaxis->SetPos("min"); // "min" will position the x-axis at the minimum value of the Y-axis + +// Extend the margin for the labels on the Y-axis and reverse the direction +// of the ticks on the Y-axis +$graph->yaxis->SetLabelMargin(12); +$graph->xaxis->SetLabelMargin(6); +$graph->yaxis->SetTickSide(SIDE_LEFT); +$graph->xaxis->SetTickSide(SIDE_DOWN); + +// Create a new impuls type scatter plot +$sp1 = new ScatterPlot($datay); +$sp1->mark->SetType(MARK_SQUARE); +$sp1->mark->SetFillColor("red"); +$sp1->SetImpuls(); +$sp1->SetColor("blue"); +$sp1->SetWeight(1); +$sp1->mark->SetWidth(3); + +$graph->Add($sp1); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/impulsex4.php b/Societes/ric/jpgraph/Examples/impulsex4.php new file mode 100755 index 00000000..e3c708e6 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/impulsex4.php @@ -0,0 +1,77 @@ +clearTheme(); +$graph->SetScale("intlin"); + +$graph->SetShadow(); +$graph->SetBox(); +$graph->title->Set("Impuls Example 4"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Set some other color then the boring default +$graph->SetColor("lightyellow"); +$graph->SetMarginColor("khaki"); + +// Set legend box specification +$graph->legend->SetFillColor("white"); +$graph->legend->SetLineWeight(2); + +// Set X-axis at the minimum value of Y-axis (default will be at 0) +$graph->xaxis->SetPos("min"); // "min" will position the x-axis at the minimum value of the Y-axis + +// Extend the margin for the labels on the Y-axis and reverse the direction +// of the ticks on the Y-axis +$graph->yaxis->SetLabelMargin(12); +$graph->xaxis->SetLabelMargin(6); +$graph->yaxis->SetTickSide(SIDE_LEFT); +$graph->xaxis->SetTickSide(SIDE_DOWN); + +// Add mark graph with static lines +$line = new PlotLine(HORIZONTAL,0,"black",2); +$graph->AddLine($line); + +// Create a new impuls type scatter plot +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_SQUARE); +$sp1->mark->SetFillColor("red"); +$sp1->mark->SetWidth(3); + +$sp1->SetImpuls(); +$sp1->SetColor("blue"); +$sp1->SetWeight(1); +$sp1->SetLegend("Non-causal signal"); + +$graph->Add($sp1); + +// Create the envelope plot +$ep1 = new LinePlot($datayenv,$datax); +$ep1->SetStyle("dotted"); +$ep1->SetLegend("Positive envelope"); + +$graph->Add($ep1); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/index.html b/Societes/ric/jpgraph/Examples/index.html new file mode 100755 index 00000000..6731a850 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/index.html @@ -0,0 +1,36 @@ +

      Examples of odometers

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + + diff --git a/Societes/ric/jpgraph/Examples/interpolation-growth-log.php b/Societes/ric/jpgraph/Examples/interpolation-growth-log.php new file mode 100755 index 00000000..c9ecd007 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/interpolation-growth-log.php @@ -0,0 +1,42 @@ +SetScale('intlog'); +$graph->SetMargin(50,50,20,30); +$graph->SetFrame(false); +$graph->SetBox(true,'black',2); +$graph->SetMarginColor('white'); +$graph->SetColor('lightyellow@0.7'); + +$graph->title->Set('Interpolation growth for size 10x10'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->xaxis->SetTitle('Interpolation factor','center'); +$graph->xaxis->SetTitleMargin(10); + +$graph->SetAxisStyle(AXSTYLE_YBOXIN); +$graph->xgrid->Show(); + +$lp1 = new LinePlot($ydata,$xdata); +$lp1->SetColor('darkred'); +$lp1->SetWeight(3); +$graph->Add($lp1); + +$graph->Stroke(); +?> + + diff --git a/Societes/ric/jpgraph/Examples/interpolation-growth.php b/Societes/ric/jpgraph/Examples/interpolation-growth.php new file mode 100755 index 00000000..e1fec180 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/interpolation-growth.php @@ -0,0 +1,42 @@ +SetScale('intint'); +$graph->SetMargin(50,50,20,30); +$graph->SetFrame(false); +$graph->SetBox(true,'black',2); +$graph->SetMarginColor('white'); +$graph->SetColor('lightyellow@0.7'); + +$graph->title->Set('Interpolation growth for size 10x10'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->xaxis->SetTitle('Interpolation factor','center'); +$graph->xaxis->SetTitleMargin(10); + +$graph->SetAxisStyle(AXSTYLE_YBOXIN); +$graph->xgrid->Show(); + +$lp1 = new LinePlot($ydata,$xdata); +$lp1->SetColor('darkred'); +$lp1->SetWeight(3); +$graph->Add($lp1); + +$graph->Stroke(); +?> + + diff --git a/Societes/ric/jpgraph/Examples/inyaxisex1.php b/Societes/ric/jpgraph/Examples/inyaxisex1.php new file mode 100755 index 00000000..cf96cb2e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/inyaxisex1.php @@ -0,0 +1,50 @@ +clearTheme(); +$graph->SetScale("linlin"); +$graph->img->SetMargin(50,50,60,40); +$graph->SetMarginColor('darkblue'); +$graph->SetColor('darkblue'); +$graph->SetAxisStyle(AXSTYLE_BOXOUT); + +$graph->title->Set("Depth curve. Dive #2"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->title->SetColor("white"); + +$graph->subtitle->Set("(Negated Y-axis)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); +$graph->subtitle->SetColor("white"); + +// Setup axis +$graph->yaxis->SetLabelFormatCallback("_cb_negate"); +$graph->xaxis->SetColor("lightblue","white"); +$graph->yaxis->SetColor("lightblue","white"); +$graph->ygrid->SetColor("blue"); + + +$lp1 = new LinePlot($ydata); +$lp1->SetColor("yellow"); +$lp1->SetWeight(2); + + +$graph->Add($lp1); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/inyaxisex2.php b/Societes/ric/jpgraph/Examples/inyaxisex2.php new file mode 100755 index 00000000..12daeafa --- /dev/null +++ b/Societes/ric/jpgraph/Examples/inyaxisex2.php @@ -0,0 +1,52 @@ +clearTheme(); +$graph->SetScale("linlin"); +$graph->img->SetMargin(50,50,60,40); +$graph->SetMarginColor('darkblue'); +$graph->SetColor('darkblue'); +$graph->SetAxisStyle(AXSTYLE_BOXOUT); +$graph->SetBackgroundImage("blueblack400x300grad.png",1); +//$graph->SetBackgroundImage("lightbluedarkblue400x300grad.png",1); + +$graph->title->Set("Depth curve. Dive #2"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->title->SetColor("white"); + +$graph->subtitle->Set("(Negated Y-axis)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); +$graph->subtitle->SetColor("white"); + +// Setup axis +$graph->yaxis->SetLabelFormatCallback("_cb_negate"); +$graph->xaxis->SetColor("lightblue","white"); +$graph->yaxis->SetColor("lightblue","white"); +$graph->ygrid->SetColor("blue"); + + +$lp1 = new LinePlot($ydata); +$lp1->SetColor("yellow"); +$lp1->SetWeight(2); + + +$graph->Add($lp1); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/inyaxisex3.php b/Societes/ric/jpgraph/Examples/inyaxisex3.php new file mode 100755 index 00000000..1678aee9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/inyaxisex3.php @@ -0,0 +1,68 @@ +clearTheme(); +$graph->SetScale("linlin"); +$graph->SetY2Scale("lin"); +$graph->SetMargin(50,50,60,40); +$graph->SetMarginColor('darkblue'); +$graph->SetColor('darkblue'); + +// Setup titles +$graph->title->Set("Inverting both Y-axis"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->title->SetColor("white"); + +$graph->subtitle->Set("(Negated Y & Y2 axis)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); +$graph->subtitle->SetColor("white"); + +// Setup axis +$graph->yaxis->SetLabelFormatCallback("_cb_negate"); +$graph->xaxis->SetColor("lightblue","white"); +$graph->yaxis->SetColor("lightblue","white"); +$graph->ygrid->SetColor("blue"); + +// Setup Y2 axis +$graph->y2axis->SetLabelFormatCallback("_cb_negate"); +$graph->y2axis->SetColor("darkred","white"); +$graph->y2scale->SetAutoMax(0); // To make sure it starts with 0 + +// Setup plot 1 +$lp1 = new LinePlot($ydata); +$lp1->SetColor("yellow"); +$lp1->SetWeight(2); +$graph->Add($lp1); + +// Setup plot 2 +$lp2 = new LinePlot($y2data); +$lp2->SetColor("darkred"); +$lp2->SetWeight(2); +$graph->AddY2($lp2); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/ironrod.jpg b/Societes/ric/jpgraph/Examples/ironrod.jpg new file mode 100755 index 00000000..0b9e8d40 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/ironrod.jpg differ diff --git a/Societes/ric/jpgraph/Examples/jpglogo.jpg b/Societes/ric/jpgraph/Examples/jpglogo.jpg new file mode 100755 index 00000000..a7f71211 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/jpglogo.jpg differ diff --git a/Societes/ric/jpgraph/Examples/ledex1.php b/Societes/ric/jpgraph/Examples/ledex1.php new file mode 100755 index 00000000..8d61f937 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex1.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_GREEN); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex10.php b/Societes/ric/jpgraph/Examples/ledex10.php new file mode 100755 index 00000000..3aa375f9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex10.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_KHAKI); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex11.php b/Societes/ric/jpgraph/Examples/ledex11.php new file mode 100755 index 00000000..857faa07 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex11.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_OLIVE); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex12.php b/Societes/ric/jpgraph/Examples/ledex12.php new file mode 100755 index 00000000..7756ea13 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex12.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_LIMEGREEN); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex13.php b/Societes/ric/jpgraph/Examples/ledex13.php new file mode 100755 index 00000000..add394d3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex13.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_FORESTGREEN); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex14.php b/Societes/ric/jpgraph/Examples/ledex14.php new file mode 100755 index 00000000..7a505999 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex14.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_TEAL); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex15.php b/Societes/ric/jpgraph/Examples/ledex15.php new file mode 100755 index 00000000..6a5bb1f6 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex15.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_STEELBLUE); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex16.php b/Societes/ric/jpgraph/Examples/ledex16.php new file mode 100755 index 00000000..08ab7312 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex16.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_NAVY); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex17.php b/Societes/ric/jpgraph/Examples/ledex17.php new file mode 100755 index 00000000..34f18cd1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex17.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_INVERTGRAY); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex2.php b/Societes/ric/jpgraph/Examples/ledex2.php new file mode 100755 index 00000000..bd196d38 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex2.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_RED); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex3.php b/Societes/ric/jpgraph/Examples/ledex3.php new file mode 100755 index 00000000..0d81b3d5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex3.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_YELLOW); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex4.1.php b/Societes/ric/jpgraph/Examples/ledex4.1.php new file mode 100755 index 00000000..81a9d1ff --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex4.1.php @@ -0,0 +1,13 @@ +SetSupersampling(2); +$led->StrokeNumber('123.',LEDC_RED); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex4.2.php b/Societes/ric/jpgraph/Examples/ledex4.2.php new file mode 100755 index 00000000..0a25bc02 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex4.2.php @@ -0,0 +1,13 @@ +SetSupersampling(4); +$led->StrokeNumber('123.',LEDC_RED); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex4.php b/Societes/ric/jpgraph/Examples/ledex4.php new file mode 100755 index 00000000..d8782e25 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex4.php @@ -0,0 +1,13 @@ +SetSupersampling(1); +$led->StrokeNumber('123.',LEDC_RED); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex5.php b/Societes/ric/jpgraph/Examples/ledex5.php new file mode 100755 index 00000000..5526063c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex5.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_BLUE); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex6.php b/Societes/ric/jpgraph/Examples/ledex6.php new file mode 100755 index 00000000..eb8c03ba --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex6.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_GRAY); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex7.php b/Societes/ric/jpgraph/Examples/ledex7.php new file mode 100755 index 00000000..da6c656b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex7.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_CHOCOLATE); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex8.php b/Societes/ric/jpgraph/Examples/ledex8.php new file mode 100755 index 00000000..2075e261 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex8.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_PERU); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex9.php b/Societes/ric/jpgraph/Examples/ledex9.php new file mode 100755 index 00000000..82837d1d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex9.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_GOLDENROD); + + + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex_cyrillic.php b/Societes/ric/jpgraph/Examples/ledex_cyrillic.php new file mode 100755 index 00000000..b85f9d31 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex_cyrillic.php @@ -0,0 +1,27 @@ +SetSupersampling(2); +$text = 'А'. + 'Б'. + 'В'. + 'Г'. + 'Д'. + 'Е'. + 'Ё'. + 'З'. + 'И'. + 'Й'. + 'К'. + 'Л'. + 'М'. + 'Н'. + 'О'. + 'П'; +$led->StrokeNumber($text, LEDC_RED); + +?> diff --git a/Societes/ric/jpgraph/Examples/ledex_cyrillic2.php b/Societes/ric/jpgraph/Examples/ledex_cyrillic2.php new file mode 100755 index 00000000..fb007144 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ledex_cyrillic2.php @@ -0,0 +1,27 @@ +SetSupersampling(2); +$text = 'Р'. + 'С'. + 'Т'. + 'У'. + 'Ф'. + 'Х'. + 'Ц'. + 'Ч'. + 'Ш'. + 'Щ'. + 'Ъ'. + 'Ы'. + 'Ь'. + 'Э'. + 'Ю'. + 'Я'; +$led->StrokeNumber($text, LEDC_RED); + +?> diff --git a/Societes/ric/jpgraph/Examples/lightbluedarkblue400x300grad.png b/Societes/ric/jpgraph/Examples/lightbluedarkblue400x300grad.png new file mode 100755 index 00000000..86092ecf Binary files /dev/null and b/Societes/ric/jpgraph/Examples/lightbluedarkblue400x300grad.png differ diff --git a/Societes/ric/jpgraph/Examples/linebarcentex1.php b/Societes/ric/jpgraph/Examples/linebarcentex1.php new file mode 100755 index 00000000..0ccb096f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/linebarcentex1.php @@ -0,0 +1,50 @@ +GetShortMonth(); + +// Create the graph. +$graph = new Graph(400,200); +$graph->clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMargin(40,130,20,40); +$graph->SetShadow(); +$graph->xaxis->SetTickLabels($datax); + +// Create the linear error plot +$l1plot=new LinePlot($l1datay); +$l1plot->SetColor("red"); +$l1plot->SetWeight(2); +$l1plot->SetLegend("Prediction"); + +//Center the line plot in the center of the bars +$l1plot->SetBarCenter(); + + +// Create the bar plot +$bplot = new BarPlot($l2datay); +$bplot->SetFillColor("orange"); +$bplot->SetLegend("Result"); + +// Add the plots to t'he graph +$graph->Add($bplot); +$graph->Add($l1plot); + + +$graph->title->Set("Adding a line plot to a bar graph v1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/linebarex1.php b/Societes/ric/jpgraph/Examples/linebarex1.php new file mode 100755 index 00000000..f970a2a4 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/linebarex1.php @@ -0,0 +1,74 @@ +clearTheme(); +$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME); +$graph->SetShadow(); + +// Use an integer X-scale +$graph->SetScale("textlin"); + +// Set title and subtitle +$graph->title->Set("Combined bar and line plot"); +$graph->subtitle->Set("100 data points, X-Scale: 'text'"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Make the margin around the plot a little bit bigger +// then default +$graph->img->SetMargin(40,140,40,80); + +// Slightly adjust the legend from it's default position in the +// top right corner to middle right side +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display every 10:th datalabel +$graph->xaxis->SetTextTickInterval(6); +$graph->xaxis->SetTextLabelInterval(2); +$graph->xaxis->SetTickLabels($databarx); +$graph->xaxis->SetLabelAngle(90); + +// Create a red line plot +$p1 = new LinePlot($datay); +$p1->SetColor("red"); +$p1->SetLegend("Pressure"); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +$b1->SetAbsWidth(6); +$b1->SetShadow(); + +// The order the plots are added determines who's ontop +$graph->Add($p1); +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/linebarex2.php b/Societes/ric/jpgraph/Examples/linebarex2.php new file mode 100755 index 00000000..4d58884a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/linebarex2.php @@ -0,0 +1,58 @@ +clearTheme(); +$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME); +$graph->SetShadow(); + +// Use an integer X-scale +$graph->SetScale("intlin"); + +// Set title and subtitle +$graph->title->Set("Combined bar and line plot"); +$graph->subtitle->Set("(\"left\" aligned bars)"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Make the margin around the plot a little bit bigger +// then default +$graph->img->SetMargin(40,120,40,40); + +// Slightly adjust the legend from it's default position in the +// top right corner to middle right side +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Create a red line plot +$p1 = new LinePlot($datay,$datax); +$p1->SetColor("red"); +$p1->SetLegend("Status one"); +$graph->Add($p1); + +// Create the bar plot +$b1 = new BarPlot($databary,$databarx); +$b1->SetLegend("Status two"); +$b1->SetAlign("left"); +$b1->SetShadow(); +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/linebarex3.php b/Societes/ric/jpgraph/Examples/linebarex3.php new file mode 100755 index 00000000..15101e38 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/linebarex3.php @@ -0,0 +1,53 @@ +clearTheme(); +$graph->img->SetMargin(40,180,40,40); +$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME); + +//$graph->img->SetAntiAliasing(); + +$graph->SetScale("intlin"); +$graph->SetShadow(); +$graph->title->Set("Combined bar and line plot"); +$graph->subtitle->Set("(\"center\" aligned bars)"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Slightly adjust the legend from it's default position in the +// top right corner. +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Create the first line + +$p1 = new LinePlot($datay,$datax); +$p1->SetWeight(1); +$p1->SetColor("red"); +$p1->SetLegend("Triumph Tiger -98"); +$graph->Add($p1); + +$b1 = new BarPlot($databary,$databarx); +$b1->SetAbsWidth(10); +$b1->SetAlign("center"); +$b1->SetShadow(); +$graph->Add($b1); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/linegraceex.php b/Societes/ric/jpgraph/Examples/linegraceex.php new file mode 100755 index 00000000..f4bbf656 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/linegraceex.php @@ -0,0 +1,30 @@ +clearTheme(); +$graph->img->SetMargin(40,40,40,40); + +$graph->img->SetAntiAliasing(); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Example of 10% top/bottom grace"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Add 10% grace to top and bottom of plot +$graph->yscale->SetGrace(10,10); + +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$graph->Add($p1); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/lineiconex1.php b/Societes/ric/jpgraph/Examples/lineiconex1.php new file mode 100755 index 00000000..21843b6b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/lineiconex1.php @@ -0,0 +1,48 @@ +clearTheme(); +$graph->SetMargin(40,40,20,30); +$graph->SetScale("textlin"); + +$graph->title->Set('Adding an icon ("tux") in the background'); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +//$graph->SetBackgroundGradient('red','blue'); + +$graph->xaxis->SetPos('min'); + +$p1 = new LinePlot($datay); +$p1->SetColor("blue"); +$p1->SetFillGradient('yellow@0.4','red@0.4'); + +$p2 = new LinePlot($datay2); +$p2->SetColor("black"); +$p2->SetFillGradient('green@0.4','white'); + +$p3 = new LinePlot($datay3); +$p3->SetColor("blue"); +$p3->SetFillGradient('navy@0.4','white@0.4'); + +$graph->Add($p1); +$graph->Add($p2); +$graph->Add($p3); + +$icon = new IconPlot('penguin.png',0.2,0.3,1,30); +$icon->SetAnchor('center','center'); +$graph->Add($icon); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/lineiconex2.php b/Societes/ric/jpgraph/Examples/lineiconex2.php new file mode 100755 index 00000000..14b4cbff --- /dev/null +++ b/Societes/ric/jpgraph/Examples/lineiconex2.php @@ -0,0 +1,31 @@ +clearTheme(); +$graph->SetMargin(40,40,20,30); +$graph->SetScale("textlin"); + +$graph->title->Set('Adding a country flag as a an icon'); + +$p1 = new LinePlot($datay); +$p1->SetColor("blue"); +$p1->SetFillGradient('yellow@0.4','red@0.4'); + +$graph->Add($p1); + +$icon = new IconPlot(); +$icon->SetCountryFlag('iceland',50,30,1.5,40,3); +$icon->SetAnchor('left','top'); +$graph->Add($icon); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/lineimagefillex1.php b/Societes/ric/jpgraph/Examples/lineimagefillex1.php new file mode 100755 index 00000000..d2fb60ae --- /dev/null +++ b/Societes/ric/jpgraph/Examples/lineimagefillex1.php @@ -0,0 +1,41 @@ +title->Set('Education growth'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->SetScale('intlin'); +$graph->SetMarginColor('white'); +$graph->SetBox(); +//$graph->img->SetAntialiasing(); + +$graph->SetGridDepth(DEPTH_FRONT); +$graph->ygrid->SetColor('gray@0.7'); +$graph->SetBackgroundImage('classroom.jpg',BGIMG_FILLPLOT); + +// Masking graph +$p1 = new LinePlot($datay); +$p1->SetFillColor('white'); +$p1->SetFillFromYMax(); +$p1->SetWeight(0); +$graph->Add($p1); + +// Line plot +$p2 = new LinePlot($datay); +$p2->SetColor('black@0.4'); +$p2->SetWeight(3); +$p2->mark->SetType(MARK_SQUARE); +$p2->mark->SetColor('orange@0.5'); +$p2->mark->SetFillColor('orange@0.3'); +$graph->Add($p2); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/linlogex1.php b/Societes/ric/jpgraph/Examples/linlogex1.php new file mode 100755 index 00000000..4c2be9de --- /dev/null +++ b/Societes/ric/jpgraph/Examples/linlogex1.php @@ -0,0 +1,64 @@ +SetScale("linlog"); +$graph->img->SetMargin(40,20,20,40); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->Set("ab/2"); +$graph->yaxis->title->Set("rho_s"); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,true); + +$errorplot=new ErrorPlot($ydata, $xdata); + +$graph->Add($errorplot); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/listallflags.php b/Societes/ric/jpgraph/Examples/listallflags.php new file mode 100755 index 00000000..68236259 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/listallflags.php @@ -0,0 +1,29 @@ +\n"; +$cols=0; +foreach ($flags->iCountryNameMap as $key => $val) { + + echo '
      '; + echo "$key
      idx=$val\n"; + + if( ++$cols == 5 ) { + echo "\n"; + $cols=0; + } +} + +echo ""; + +?> + diff --git a/Societes/ric/jpgraph/Examples/listallflags_helper.php b/Societes/ric/jpgraph/Examples/listallflags_helper.php new file mode 100755 index 00000000..52ad9f9b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/listallflags_helper.php @@ -0,0 +1,25 @@ +GetImgByIdx($idx); +header ("Content-type: image/png"); +ImagePng ($img); + +?> diff --git a/Societes/ric/jpgraph/Examples/listfontsex1.php b/Societes/ric/jpgraph/Examples/listfontsex1.php new file mode 100755 index 00000000..15ee50d1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/listfontsex1.php @@ -0,0 +1,154 @@ +Set(0,27,0,85); +$g->SetMargin(5,6,5,6); +$g->SetColor('white'); +$g->SetMarginColor("teal"); +$g->InitFrame(); + + +$t = new CanvasRectangleText(); +$t->SetFont(FF_ARIAL,FS_NORMAL,16); +$t->SetFillColor('lemonchiffon2'); +$t->SetFontColor('black'); +$t->Set("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nTTF Fonts (11pt)",0.5,19.5,26,64.5); +$t->Stroke($g->img,$scale); + +$t->SetFillColor('lemonchiffon3'); +$t->Set("\n\n\n\nBitmap Fonts",0.5,5,26,13.5); +$t->Stroke($g->img,$scale); + + +$t = new CanvasRectangleText(); +$t->SetFillColor(''); +$t->SetFontColor('black'); +$t->SetColor(''); +$t->SetShadow(''); + +$t->SetFont(FF_ARIAL,FS_BOLD,18); +$t->Set('Normal',1,1,8); +$t->Stroke($g->img,$scale); + +$t->Set('Italic style',9,1,8); +$t->Stroke($g->img,$scale); + +$t->Set('Bold style',17.5,1,8); +$t->Stroke($g->img,$scale); + + +$t->SetFillColor('yellow'); +$t->SetFontColor('black'); +$t->SetColor('black'); +$t->SetShadow('gray'); + +$r=6;$c=1;$w=7.5;$h=3.5; + +$fonts=array( + array("Font 0",FF_FONT0,FS_NORMAL), + array("",FF_FONT0,FS_ITALIC), + array("",FF_FONT0,FS_BOLD), + + array("Font 1",FF_FONT1,FS_NORMAL), + array("",FF_FONT1,FS_ITALIC), + array("Font 1 bold",FF_FONT1,FS_BOLD), + + array("Font 2",FF_FONT2,FS_NORMAL), + array("",FF_FONT2,FS_ITALIC), + array("Font 2 bold",FF_FONT2,FS_BOLD), + + array("Arial",FF_ARIAL,FS_NORMAL), + array("Arial italic",FF_ARIAL,FS_ITALIC), + array("Arial bold",FF_ARIAL,FS_BOLD), + + array("Verdana",FF_VERDANA,FS_NORMAL), + array("Verdana italic",FF_VERDANA,FS_ITALIC), + array("Verdana bold",FF_VERDANA,FS_BOLD), + + + array("Trebuche",FF_TREBUCHE,FS_NORMAL), + array("Trebuche italic",FF_TREBUCHE,FS_ITALIC), + array("Trebuche bold",FF_TREBUCHE,FS_BOLD), + + array("Georgia",FF_GEORGIA,FS_NORMAL), + array("Georgia italic",FF_GEORGIA,FS_ITALIC), + array("Georgia bold",FF_GEORGIA,FS_BOLD), + + array("Comic",FF_COMIC,FS_NORMAL), + array("",FF_COMIC,FS_ITALIC), + array("Comic bold",FF_COMIC,FS_BOLD), + + array("Courier",FF_COURIER,FS_NORMAL), + array("Courier italic",FF_COURIER,FS_ITALIC), + array("Courier bold",FF_COURIER,FS_BOLD), + + array("Times normal",FF_TIMES,FS_NORMAL), + array("Times italic",FF_TIMES,FS_ITALIC), + array("Times bold",FF_TIMES,FS_BOLD), + + array("Vera normal",FF_VERA,FS_NORMAL), + array("Vera italic",FF_VERA,FS_ITALIC), + array("Vera bold",FF_VERA,FS_BOLD), + + array("Vera mono normal",FF_VERAMONO,FS_NORMAL), + array("Vera mono italic",FF_VERAMONO,FS_ITALIC), + array("Vera mono bold",FF_VERAMONO,FS_BOLD), + + array("Vera serif normal",FF_VERASERIF,FS_NORMAL), + array("",FF_VERASERIF,FS_ITALIC), + array("Vera serif bold",FF_VERASERIF,FS_BOLD), + + array("DejaVu sans serif",FF_DV_SANSSERIF,FS_NORMAL), + array("DejaVu sans serif",FF_DV_SANSSERIF,FS_ITALIC), + array("DejaVu sans serif",FF_DV_SANSSERIF,FS_BOLD), + + array("DejaVu serif",FF_DV_SERIF,FS_NORMAL), + array("DejaVu serif",FF_DV_SERIF,FS_ITALIC), + array("DejaVu serif",FF_DV_SERIF,FS_BOLD), + + array("DejaVuMono sans serif",FF_DV_SANSSERIFMONO,FS_NORMAL), + array("DejaVuMono sans serif",FF_DV_SANSSERIFMONO,FS_ITALIC), + array("DejaVuMono sans serif",FF_DV_SANSSERIFMONO,FS_BOLD), + + array("DejaVuCond serif",FF_DV_SERIFCOND,FS_NORMAL), + array("DejaVuCond serif",FF_DV_SERIFCOND,FS_ITALIC), + array("DejaVuCond serif",FF_DV_SERIFCOND,FS_BOLD), + + array("DejaVuCond sans serif",FF_DV_SANSSERIFCOND,FS_NORMAL), + array("DejaVuCond sans serif",FF_DV_SANSSERIFCOND,FS_ITALIC), + array("DejaVuCond sans serif",FF_DV_SANSSERIFCOND,FS_BOLD), + + ); + + +$n=count($fonts); + +for( $i=0; $i < $n; ++$i ) { + + if( $i==9 ) $r += 3; + + if( $fonts[$i][0] ) { + $t->SetTxt($fonts[$i][0]); + $t->SetPos($c,$r,$w,$h); + $t->SetFont($fonts[$i][1],$fonts[$i][2],11); + $t->Stroke($g->img,$scale); + } + + $c += $w+1; + if( $c > 30-$w-2 ) { + $c = 1; + $r += 4; + } + +} + +$g->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/logbarex1.php b/Societes/ric/jpgraph/Examples/logbarex1.php new file mode 100755 index 00000000..dcaffd8f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/logbarex1.php @@ -0,0 +1,49 @@ +clearTheme(); +//$graph->img->SetMargin(50,30,50,50); +$graph->SetScale("textlog"); +//$graph->SetShadow(); + +// Setup titles for graph and axis +$graph->title->Set("Bar with logarithmic Y-scale"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,18); + +$graph->xaxis->SetTitle("2002"); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_NORMAL,16); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,16); +$graph->yaxis->SetTitle("Y-title",'center'); +$graph->yaxis->SetTitleMargin(30); + +// Setup month on X-scale +//$graph->xaxis->SetTickLabels($datax); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +//You can also set a manual base of the bars +//$bplot->SetYBase(0.001); + +/* +$bplot->SetShadow(); +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD); +$bplot->value->SetAngle(45); +$bplot->value->SetColor("black","darkred"); +*/ + +$graph->Add($bplot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/loglogex1.php b/Societes/ric/jpgraph/Examples/loglogex1.php new file mode 100755 index 00000000..31a4a52c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/loglogex1.php @@ -0,0 +1,59 @@ +SetScale("loglog"); +$graph->SetY2Scale("lin"); +$graph->y2axis->SetColor("blue","blue"); + +$graph->img->SetMargin(50,70,40,50); +$graph->title->Set("Geoelektrik"); +$graph->xaxis->title->Set("Auslage ab/2 [m]"); +$graph->yaxis->title->Set("rho_s [Ohm m]"); +$graph->y2axis->title->Set("mn/2 [m]"); +$graph->y2axis->title->SetColor("blue"); +$graph->y2axis->SetTitleMargin(35); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xgrid->Show(true,true); +$graph->ygrid->Show(true,true); + +// Create the linear plot + +$lineplot=new LinePlot($rhos,$ab2); +$lineplot->SetWeight(1); +$lineplot->mark->SetType(MARK_FILLEDCIRCLE); +$lineplot->mark->SetWidth(2); + +// Create scatter plot + +$scplot=new ScatterPlot($mn2,$ab2); +$scplot->mark->SetType(MARK_FILLEDCIRCLE); +$scplot->mark->SetColor("blue"); +$scplot->mark->SetWidth(2); + +// Add plots to the graph + +$graph->AddY2($scplot); +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/manscaleex1.php b/Societes/ric/jpgraph/Examples/manscaleex1.php new file mode 100755 index 00000000..9a7962aa --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manscaleex1.php @@ -0,0 +1,22 @@ +SetScale("textlin",3,35); +$graph->yscale->ticks->Set(8,2); + +$graph->title->Set('Manual scale, manual ticks'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$line = new LinePlot($ydata); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/manscaleex2.php b/Societes/ric/jpgraph/Examples/manscaleex2.php new file mode 100755 index 00000000..d192ed8f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manscaleex2.php @@ -0,0 +1,21 @@ +SetScale("textlin",3,35); + +$graph->title->Set('Manual scale, exact limits'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$line = new LinePlot($ydata); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/manscaleex3.php b/Societes/ric/jpgraph/Examples/manscaleex3.php new file mode 100755 index 00000000..2fdcfa28 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manscaleex3.php @@ -0,0 +1,23 @@ +SetScale("textlin",3,35); +$graph->SetTickDensity(TICKD_DENSE); +$graph->yscale->SetAutoTicks(); + +$graph->title->Set('Manual scale, auto ticks'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$line = new LinePlot($ydata); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/manscaleex4.php b/Societes/ric/jpgraph/Examples/manscaleex4.php new file mode 100755 index 00000000..4653ede6 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manscaleex4.php @@ -0,0 +1,22 @@ +SetScale("textlin",3,35); +$graph->yscale->SetAutoTicks(); + +$graph->title->Set('Manual scale, allow adjustment'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$line = new LinePlot($ydata); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/manual_textscale_ex1.php b/Societes/ric/jpgraph/Examples/manual_textscale_ex1.php new file mode 100755 index 00000000..28bae4cc --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manual_textscale_ex1.php @@ -0,0 +1,39 @@ +GetShortMonth(); + +// New graph with a drop shadow +$graph = new Graph(300,200,'auto'); +$graph->clearTheme(); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Specify X-labels +$graph->xaxis->SetTickLabels($months); + +// Set title and subtitle +$graph->title->Set("Textscale with specified labels"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); + +//$b1->SetAbsWidth(6); +//$b1->SetShadow(); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/manual_textscale_ex2.php b/Societes/ric/jpgraph/Examples/manual_textscale_ex2.php new file mode 100755 index 00000000..fa76b24e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manual_textscale_ex2.php @@ -0,0 +1,39 @@ +GetShortMonth(); + +// New graph with a drop shadow +$graph = new Graph(300,200); +$graph->clearTheme(); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale('textlin'); + +// Specify X-labels +$graph->xaxis->SetTickLabels($months); +$graph->xaxis->SetTextTickInterval(2,0); + +// Set title and subtitle +$graph->title->Set('Textscale with tickinterval=2'); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend('Temperature'); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/manual_textscale_ex3.php b/Societes/ric/jpgraph/Examples/manual_textscale_ex3.php new file mode 100755 index 00000000..c96cbf5f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manual_textscale_ex3.php @@ -0,0 +1,39 @@ +GetShortMonth(); + +// New graph with a drop shadow +$graph = new Graph(300,200); +$graph->clearTheme(); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale('textlin'); + +// Specify X-labels +$graph->xaxis->SetTickLabels($months); +$graph->xaxis->SetTextLabelInterval(2); + +// Set title and subtitle +$graph->title->Set('Textscale with tickinterval=2'); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend('Temperature'); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/manual_textscale_ex4.php b/Societes/ric/jpgraph/Examples/manual_textscale_ex4.php new file mode 100755 index 00000000..99146faf --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manual_textscale_ex4.php @@ -0,0 +1,51 @@ +GetShortMonth(); +$k=0; +for($i=0; $i < 480; ++$i) { + $datay[$i] = rand(1,40); + if( $i % DATAPERMONTH === 0 ) + $months[$i] = $m[(int)($i/DATAPERMONTH)]; + else + $months[$i] = 'xx'; +} + + +// New graph with a drop shadow +$graph = new Graph(400,200); +//$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale('textlin'); + +// Specify X-labels +$graph->xaxis->SetTickLabels($months); +$graph->xaxis->SetTextTickInterval(DATAPERMONTH,0); +$graph->xaxis->SetTextLabelInterval(2); + +// Set title and subtitle +$graph->title->Set('Textscale with tickinterval=2'); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->SetBox(true,'red'); + +// Create the bar plot +$lp1 = new LinePlot($datay); +$lp1->SetLegend('Temperature'); + +// The order the plots are added determines who's ontop +$graph->Add($lp1); + +// Finally output the image +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/manualtickex1.php b/Societes/ric/jpgraph/Examples/manualtickex1.php new file mode 100755 index 00000000..6bc3f108 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manualtickex1.php @@ -0,0 +1,72 @@ +GetTicks($datax); + +// We add some grace to the end of the X-axis scale so that the first and last +// data point isn't exactly at the very end or beginning of the scale +$grace = 400000; +$xmin = $datax[0]-$grace; +$xmax = $datax[$n-1]+$grace; + +// +// The code to setup a very basic graph +// +$graph = new Graph(400,200); +$graph->clearTheme(); + +// +// We use an integer scale on the X-axis since the positions on the X axis +// are assumed to be UNI timestamps +$graph->SetScale('intlin',0,0,$xmin,$xmax); +$graph->title->Set('Basic example with manual ticks'); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// +// Make sure that the X-axis is always at the bottom of the scale +// (By default the X-axis is alwys positioned at Y=0 so if the scale +// doesn't happen to include 0 the axis will not be shown) +$graph->xaxis->SetPos('min'); + +// Now set the tic positions +$graph->xaxis->SetTickPositions($tickPositions,$minTickPositions); + +// The labels should be formatted at dates with "Year-month" +$graph->xaxis->SetLabelFormatString('My',true); + +// Use Ariel font +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); + +// Add a X-grid +$graph->xgrid->Show(); + +// Create the plot line +$p1 = new LinePlot($datay,$datax); +$p1->SetColor('teal'); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/manualtickex1a.php b/Societes/ric/jpgraph/Examples/manualtickex1a.php new file mode 100755 index 00000000..6bc3f108 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manualtickex1a.php @@ -0,0 +1,72 @@ +GetTicks($datax); + +// We add some grace to the end of the X-axis scale so that the first and last +// data point isn't exactly at the very end or beginning of the scale +$grace = 400000; +$xmin = $datax[0]-$grace; +$xmax = $datax[$n-1]+$grace; + +// +// The code to setup a very basic graph +// +$graph = new Graph(400,200); +$graph->clearTheme(); + +// +// We use an integer scale on the X-axis since the positions on the X axis +// are assumed to be UNI timestamps +$graph->SetScale('intlin',0,0,$xmin,$xmax); +$graph->title->Set('Basic example with manual ticks'); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// +// Make sure that the X-axis is always at the bottom of the scale +// (By default the X-axis is alwys positioned at Y=0 so if the scale +// doesn't happen to include 0 the axis will not be shown) +$graph->xaxis->SetPos('min'); + +// Now set the tic positions +$graph->xaxis->SetTickPositions($tickPositions,$minTickPositions); + +// The labels should be formatted at dates with "Year-month" +$graph->xaxis->SetLabelFormatString('My',true); + +// Use Ariel font +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); + +// Add a X-grid +$graph->xgrid->Show(); + +// Create the plot line +$p1 = new LinePlot($datay,$datax); +$p1->SetColor('teal'); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/manualtickex2.php b/Societes/ric/jpgraph/Examples/manualtickex2.php new file mode 100755 index 00000000..2b21dc85 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manualtickex2.php @@ -0,0 +1,71 @@ +E(0,10); + +// Now get labels at 1/2 PI intervall +$tickPositions = array(); +$tickLabels = array(); +$tickPositions[0] = 0; +$tickLabels[0] = '0'; +for($i=1; $i/2*M_PI < 11 ; ++$i ) { + $tickPositions[$i] = $i/2*M_PI; + if( $i % 2 ) + $tickLabels[$i] = $i.'/2'.SymChar::Get('pi'); + else + $tickLabels[$i] = ($i/2).SymChar::Get('pi'); +} + +$n = count($datax); +$xmin = $datax[0]; +$xmax = $datax[$n-1]; + +// +// The code to setup a very basic graph +// +$graph = new Graph(400,200); +$graph->clearTheme(); + +// +// We use an integer scale on the X-axis since the positions on the X axis +// are assumed to be UNI timestamps +$graph->SetScale('linlin',0,0,$xmin,$xmax); +$graph->title->Set('Example with manual tick labels'); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// +// Make sure that the X-axis is always at the bottom of the scale +// (By default the X-axis is alwys positioned at Y=0 so if the scale +// doesn't happen to include 0 the axis will not be shown) +$graph->xaxis->SetPos('min'); + +// Now set the tic positions +$graph->xaxis->SetMajTickPositions($tickPositions,$tickLabels); + +// Use Times font +$graph->xaxis->SetFont(FF_TIMES,FS_NORMAL,10); +$graph->yaxis->SetFont(FF_TIMES,FS_NORMAL,10); + +// Add a X-grid +$graph->xgrid->Show(); + +// Create the plot line +$p1 = new LinePlot($datay,$datax); +$p1->SetColor('teal'); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/manualtickex3.php b/Societes/ric/jpgraph/Examples/manualtickex3.php new file mode 100755 index 00000000..ff25013b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manualtickex3.php @@ -0,0 +1,90 @@ +E(0,10); + +// Now get labels at 1/2 PI intervall +$tickPositions = array(); +$tickLabels = array(); +$tickPositions[0] = 0; +$tickLabels[0] = '0'; +for($i=1; $i/2*M_PI < 11 ; ++$i ) { + $tickPositions[$i] = $i/2*M_PI; + if( $i % 2 ) + $tickLabels[$i] = $i.'/2'.SymChar::Get('pi'); + else + $tickLabels[$i] = ($i/2).SymChar::Get('pi'); +} + +$n = count($datax); +$xmin = $datax[0]; +$xmax = $datax[$n-1]; + +// +// The code to setup a very basic graph +// +$graph = new Graph(400,200); +$graph->clearTheme(); + +// We use an integer scale on the X-axis since the positions on the X axis +// are assumed to be UNI timestamps +$graph->SetScale('linlin',0,0,$xmin,$xmax); +$graph->title->Set('Example with manual tick labels'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->SetColor('white'); + +// Setup a abackground gradient +$graph->SetBackgroundGradient('darkred:0.7', 'black', 2, BGRAD_MARGIN); +$graph->SetPlotGradient('black','darkred:0.8', 2); + +// Make sure that the X-axis is always at the bottom of the scale +// (By default the X-axis is alwys positioned at Y=0 so if the scale +// doesn't happen to include 0 the axis will not be shown) +$graph->xaxis->SetPos('min'); + +// Now set the tic positions +$graph->xaxis->SetMajTickPositions($tickPositions,$tickLabels); + +// Use Times font +$graph->xaxis->SetFont(FF_TIMES,FS_NORMAL,11); +$graph->yaxis->SetFont(FF_TIMES,FS_NORMAL,9); + +// Set colors for axis +$graph->xaxis->SetColor('lightgray'); +$graph->yaxis->SetColor('lightgray'); + +// Add a X-grid +$graph->xgrid->Show(); + +// Show ticks outwards +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->xaxis->SetLabelMargin(8); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Setup a filled y-grid +//$graph->ygrid->SetFill(true,'darkgray:1.55@0.7','darkgray:1.6@0.7'); +$graph->ygrid->SetStyle('dotted'); +$graph->xgrid->SetStyle('dashed'); + +// Create the plot line +$p1 = new LinePlot($datay,$datax); +$p1->SetWeight(2); +$p1->SetColor('orange:0.9'); +$p1->SetFillColor('white@0.7'); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/manualtickex4.php b/Societes/ric/jpgraph/Examples/manualtickex4.php new file mode 100755 index 00000000..39f8d110 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/manualtickex4.php @@ -0,0 +1,91 @@ +E(0,10); + +// Now get labels at 1/2 PI intervall +$tickPositions = array(); +$tickLabels = array(); +$tickPositions[0] = 0; +$tickLabels[0] = '0'; +for($i=1; $i/2*M_PI < 11 ; ++$i ) { + $tickPositions[$i] = $i/2*M_PI; + if( $i % 2 ) + $tickLabels[$i] = $i.'/2'.SymChar::Get('pi'); + else + $tickLabels[$i] = ($i/2).SymChar::Get('pi'); +} + +$n = count($datax); +$xmin = $datax[0]; +$xmax = $datax[$n-1]; + +// +// The code to setup a very basic graph +// +$graph = new Graph(400,200); +$graph->clearTheme(); + +// We use an integer scale on the X-axis since the positions on the X axis +// are assumed to be UNI timestamps +$graph->SetScale('linlin',0,0,$xmin,$xmax); +$graph->title->Set('Example with manual tick labels'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->SetColor('white'); + +// Setup a abackground gradient +$graph->SetBackgroundGradient('darkred:0.7', 'black', 2, BGRAD_MARGIN); +$graph->SetPlotGradient('black','darkred:0.8', 2); + +// Make sure that the X-axis is always at the bottom of the scale +// (By default the X-axis is alwys positioned at Y=0 so if the scale +// doesn't happen to include 0 the axis will not be shown) +$graph->xaxis->SetPos('min'); + +// Now set the tic positions +$graph->xaxis->SetMajTickPositions($tickPositions,$tickLabels); + +// Use Times font +$graph->xaxis->SetFont(FF_TIMES,FS_NORMAL,11); +$graph->yaxis->SetFont(FF_TIMES,FS_NORMAL,9); + +// Set colors for axis +$graph->xaxis->SetColor('lightgray'); +$graph->yaxis->SetColor('lightgray'); + +// Add a X-grid +$graph->xgrid->Show(); + +// Show ticks outwards +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->xaxis->SetLabelMargin(8); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Setup a filled y-grid +//$graph->ygrid->SetFill(true,'darkgray:1.55@0.7','darkgray:1.6@0.7'); +$graph->ygrid->SetStyle('dotted'); +$graph->xgrid->SetStyle('dashed'); + +// Create the plot line +$p1 = new LinePlot($datay,$datax); +$p1->SetWeight(2); +$p1->SetColor('orange:0.9'); +$p1->SetFillColor('white@0.7'); +$p1->SetFillFromYMin(); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/markflagex1.php b/Societes/ric/jpgraph/Examples/markflagex1.php new file mode 100755 index 00000000..138a0189 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/markflagex1.php @@ -0,0 +1,73 @@ +clearTheme(); +$graph->SetMarginColor('white'); +$graph->SetScale("textlin"); +$graph->SetFrame(false); +$graph->SetMargin(30,5,25,20); + +// Enable X-grid as well +$graph->xgrid->Show(); + +// Use months as X-labels +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +//------------------------ +// Create the plots +//------------------------ +$p1 = new LinePlot($datay[0]); +$p1->SetColor("navy"); + +// Use a flag +$p1->mark->SetType(MARK_FLAG1,197); + +// Displayes value on top of marker image +$p1->value->SetFormat('%d mil'); +$p1->value->Show(); +$p1->value->SetColor('darkred'); +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10); +// Increase the margin so that the value is printed avove tje +// img marker +$p1->value->SetMargin(14); + +// Incent the X-scale so the first and last point doesn't +// fall on the edges +$p1->SetCenter(); + +$graph->Add($p1); + +//------------ +// 2:nd plot +//------------ +$p2 = new LinePlot($datay[1]); +$p2->SetColor("navy"); + +// Use a flag +$p2->mark->SetType(MARK_FLAG1,'united states'); + +// Displayes value on top of marker image +$p2->value->SetFormat('%d mil'); +$p2->value->Show(); +$p2->value->SetColor('darkred'); +$p2->value->SetFont(FF_ARIAL,FS_BOLD,10); +// Increase the margin so that the value is printed avove tje +// img marker +$p2->value->SetMargin(14); + +// Incent the X-scale so the first and last point doesn't +// fall on the edges +$p2->SetCenter(); +$graph->Add($p2); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_csimex01.php b/Societes/ric/jpgraph/Examples/matrix_csimex01.php new file mode 100755 index 00000000..76bb0a1e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_csimex01.php @@ -0,0 +1,76 @@ +SetBackgroundGradient('lightsteelblue:0.8','lightsteelblue:0.3'); +$graph->title->Set('CSIM with matrix'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('white'); + +// Create one matrix plot +$mp = new MatrixPlot($data,1); +$mp->SetModuleSize(13,15); +$mp->SetCenterPos(0.35,0.6); +$mp->colormap->SetNullColor('gray'); + +// Setup column lablels +$mp->collabel->Set($collabels); +$mp->collabel->SetSide('top'); +$mp->collabel->SetFont(FF_ARIAL,FS_NORMAL,8); +$mp->collabel->SetFontColor('lightgray'); + +// Setup row lablels +$mp->rowlabel->Set($rowlabels); +$mp->rowlabel->SetSide('right'); +$mp->rowlabel->SetFont(FF_ARIAL,FS_NORMAL,8); +$mp->rowlabel->SetFontColor('lightgray'); + +$mp->rowlabel->SetCSIMTargets($rowlabeltargets); +$mp->collabel->SetCSIMTargets($collabeltargets); + +// Move the legend more to the right +$mp->legend->SetMargin(90); +$mp->legend->SetColor('white'); +$mp->legend->SetFont(FF_VERDANA,FS_BOLD,10); + +$mp->SetCSIMTargets($csimtargets); + +$graph->Add($mp); +$graph->StrokeCSIM(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_edgeex01.php b/Societes/ric/jpgraph/Examples/matrix_edgeex01.php new file mode 100755 index 00000000..e66fd77a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_edgeex01.php @@ -0,0 +1,53 @@ +SetMarginColor('white'); +$graph->title->Set('Adding labels on the edges'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +// Create one matrix plot +$mp = new MatrixPlot($data,1); +$mp->SetModuleSize(13,15); +$mp->SetCenterPos(0.35,0.45); +$mp->colormap->SetNullColor('gray'); + +// Setup column lablels +$mp->collabel->Set($xlabels); +$mp->collabel->SetSide('bottom'); +$mp->collabel->SetFont(FF_ARIAL,FS_NORMAL,8); +$mp->collabel->SetFontColor('darkgray'); + +// Setup row lablels +$mp->rowlabel->Set($ylabels); +$mp->rowlabel->SetSide('right'); +$mp->rowlabel->SetFont(FF_ARIAL,FS_NORMAL,8); +$mp->rowlabel->SetFontColor('darkgray'); + +// Move the legend more to the right +$mp->legend->SetMargin(90); + +$graph->Add($mp); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_edgeex02.php b/Societes/ric/jpgraph/Examples/matrix_edgeex02.php new file mode 100755 index 00000000..c07ba6a1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_edgeex02.php @@ -0,0 +1,51 @@ +title->Set('Add ine row/col labels'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +$mp = new MatrixPlot($data,1); +$mp->SetSize(0.55); +$mp->SetCenterPos(0.45, 0.45); + +$rowtitles = array(); +for( $i=0; $i < $nrow; ++$i ) { + $rowtitles[$i] = sprintf('Row: %02d',$i); +} +$coltitles = array(); +for( $i=0; $i < $ncol; ++$i ) { + $coltitles[$i] = sprintf('Col: %02d',$i); +} + +$mp->rowlabel->Set($rowtitles); +$mp->rowlabel->SetFont(FF_ARIAL,FS_NORMAL,10); +$mp->rowlabel->SetFontColor('blue'); +$mp->rowlabel->SetSide('left'); + +$mp->collabel->Set($coltitles); +$mp->collabel->SetFont(FF_ARIAL,FS_NORMAL,10); +$mp->collabel->SetFontColor('darkred'); +$mp->collabel->SetAngle(70); // 90 is default for col titles +$mp->collabel->SetSide('bottom'); + +$graph->Add($mp); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_ex0.php b/Societes/ric/jpgraph/Examples/matrix_ex0.php new file mode 100755 index 00000000..43777cf8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_ex0.php @@ -0,0 +1,28 @@ +title->Set('Basic matrix example'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +// Create a ,atrix plot using all default values +$mp = new MatrixPlot($data); +$graph->Add($mp); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_ex01.php b/Societes/ric/jpgraph/Examples/matrix_ex01.php new file mode 100755 index 00000000..d0387dd1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_ex01.php @@ -0,0 +1,38 @@ +title->Set('Possible legend positions'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +$mp = array(); +$n = 4; +$pos = array(0.3,0.33, 0.8,0.68, + 0.3,0.68, 0.8,0.33); +for($i=0; $i < $n; ++$i){ + $mp[$i] = new MatrixPlot($data); + $mp[$i]->colormap->SetMap($i); + $mp[$i]->SetModuleSize(4,5); + $mp[$i]->SetLegendLayout($i); + $mp[$i]->SetCenterPos($pos[$i*2],$pos[$i*2+1]); +} + +$graph->Add($mp); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_ex02.php b/Societes/ric/jpgraph/Examples/matrix_ex02.php new file mode 100755 index 00000000..f81e59cd --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_ex02.php @@ -0,0 +1,32 @@ +title->Set('Meshinterpolation=3'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +$mp = new MatrixPlot($data,1); +$mp->colormap->SetMap(0); +$mp->SetSize(200,160); +$mp->SetCenterPos(0.5,0.55); +$mp->legend->Show(false); +$graph->Add($mp); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_ex03.php b/Societes/ric/jpgraph/Examples/matrix_ex03.php new file mode 100755 index 00000000..a943acd0 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_ex03.php @@ -0,0 +1,36 @@ +title->Set('Adding an icon to the background'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +$mp = new MatrixPlot($data,1); +$mp->SetSize(0.6); + +$icon = new IconPlot('icon.jpg',$width-1,$height-1,0.8,50); +$icon->SetAnchor('right','bottom'); +$graph->Add($icon); + +$graph->Add($mp); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_ex04.1.php b/Societes/ric/jpgraph/Examples/matrix_ex04.1.php new file mode 100755 index 00000000..419a437a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_ex04.1.php @@ -0,0 +1,40 @@ +title->Set('Adding a background image'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->subtitle->Set('Alphablending = 0.2'); + +// Add a stretched background image +$graph->SetBackgroundImage('ironrod.jpg',BGIMG_FILLFRAME); +$graph->SetBackgroundImageMix(50); + +$mp = new MatrixPlot($data,1); +$mp->SetSize(0.65); +$mp->SetCenterPos(0.5,0.5); +$mp->SetLegendLayout(1); +$mp->SetAlpha(0.2); + +$graph->Add($mp); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_ex04.2.php b/Societes/ric/jpgraph/Examples/matrix_ex04.2.php new file mode 100755 index 00000000..6650444c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_ex04.2.php @@ -0,0 +1,40 @@ +title->Set('Adding a background image'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->subtitle->Set('Alphablending = 0.7'); + +// Add a stretched background image +$graph->SetBackgroundImage('ironrod.jpg',BGIMG_FILLFRAME); +$graph->SetBackgroundImageMix(50); + +$mp = new MatrixPlot($data,1); +$mp->SetSize(0.65); +$mp->SetCenterPos(0.5,0.5); +$mp->SetLegendLayout(1); +$mp->SetAlpha(0.7); + +$graph->Add($mp); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_ex04.php b/Societes/ric/jpgraph/Examples/matrix_ex04.php new file mode 100755 index 00000000..2917f15c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_ex04.php @@ -0,0 +1,38 @@ +title->Set('Adding a background image'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +// Add a stretched background image +$graph->SetBackgroundImage('ironrod.jpg',BGIMG_FILLFRAME); +$graph->SetBackgroundImageMix(50); + +$mp = new MatrixPlot($data,1); +$mp->SetSize(0.6); +$mp->SetCenterPos(0.5,0.5); +$mp->SetLegendLayout(1); + +$graph->Add($mp); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_ex05.php b/Societes/ric/jpgraph/Examples/matrix_ex05.php new file mode 100755 index 00000000..d3f989ea --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_ex05.php @@ -0,0 +1,31 @@ +title->Set('Using a circular module type'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +$mp = new MatrixPlot($data,2); +$mp->SetSize(0.85); +$mp->SetModuleType(1); +$mp->SetBackgroundColor('teal:1.8'); +$mp->SetCenterPos(0.5,0.45); +$mp->SetLegendLayout(1); + +$graph->Add($mp); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_ex06.php b/Societes/ric/jpgraph/Examples/matrix_ex06.php new file mode 100755 index 00000000..7c3d4727 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_ex06.php @@ -0,0 +1,75 @@ +SetBackgroundGradient('lightsteelblue:0.8','lightsteelblue:0.3'); +$graph->title->Set('Matrix with lines'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,18); +$graph->title->SetColor('white'); + +// Create two lines to add as markers +$l1 = new PlotLine(VERTICAL, 5, 'lightgray:1.5', 4); +$l2 = new PlotLine(HORIZONTAL, 3, 'lightgray:1.5', 4); + +// Create one matrix plot +$mp = new MatrixPlot($data,1); +$mp->SetModuleSize(13,15); +$mp->SetCenterPos(0.35,0.6); +$mp->colormap->SetNullColor('gray'); + +// Add lines +$mp->AddLine($l1); +$mp->AddLine($l2); +// this could also be done as +// $mp->AddLine(array($l1,$l2)); + +// Setup column lablels +$mp->collabel->Set($collabels); +$mp->collabel->SetSide('top'); +$mp->collabel->SetFont(FF_ARIAL,FS_NORMAL,8); +$mp->collabel->SetFontColor('lightgray'); + +// Setup row lablels +$mp->rowlabel->Set($rowlabels); +$mp->rowlabel->SetSide('right'); +$mp->rowlabel->SetFont(FF_ARIAL,FS_NORMAL,8); +$mp->rowlabel->SetFontColor('lightgray'); + +// Move the legend more to the right +$mp->legend->SetMargin(90); +$mp->legend->SetColor('white'); +$mp->legend->SetFont(FF_VERDANA,FS_BOLD,10); + +$graph->Add($mp); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_introex.php b/Societes/ric/jpgraph/Examples/matrix_introex.php new file mode 100755 index 00000000..fcecc40c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_introex.php @@ -0,0 +1,89 @@ +Push(); + +//-------------------------------------------------------------- +// Setup a basic matrix graph +//-------------------------------------------------------------- +$width = 740; $height = 500; +$graph = new MatrixGraph($width,$height); +$graph->SetMargin(1,2,70,1); +$graph->SetColor('white'); +$graph->SetMarginColor('#fafafa'); +$graph->title->Set('Intro matrix graph'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +// Setup the background image +$graph->SetBackgroundImage('fireplace.jpg',BGIMG_FILLPLOT); +$graph->SetBackgroundImageMix(50); + +// Setup the timer in the right footer +$graph->footer->SetTimer($timer); +$graph->footer->right->SetColor('white'); + +//-------------------------------------------------------------- +// Create the 2 matrix plots +//-------------------------------------------------------------- +$mp = array(); $n = 2; +for($i=0; $i < $n; ++$i){ + $mp[$i] = new MatrixPlot($data); + $mp[$i]->colormap->SetMap($i); + $mp[$i]->SetSize(300,250); + $mp[$i]->SetLegendLayout(1); + $mp[$i]->SetAlpha(0.2); + + // Make the legend slightly longer than default + $mp[$i]->legend->SetSize(20,280); +} +$mp[1]->colormap->SetMap(3); + +$hor1 = new LayoutHor(array($mp[0],$mp[1])); +$hor1->SetCenterPos(0.5,0.5); + +$graph->Add($hor1); + +//-------------------------------------------------------------- +// Add texts to the graph +//-------------------------------------------------------------- +$txts = array( + array('Temperature gradient',$width/2,80), + array('Heat color map',200,110), + array('High contrast map',560,110)); + +$n=count($txts); +$t=array(); +for($i=0; $i < $n; ++$i){ + $t[$i] = new Text($txts[$i][0],$txts[$i][1],$txts[$i][2]); + $t[$i]->SetFont(FF_ARIAL,FS_BOLD,14); + $t[$i]->SetColor('white'); + $t[$i]->SetAlign('center','top'); +} +$graph->Add($t); + +//-------------------------------------------------------------- +// Add Jpgraph logo to top left corner +//-------------------------------------------------------------- +$icon = new IconPlot('jpglogo.jpg',2,2,0.9,50); +$graph->Add($icon); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/matrix_layout_ex1.php b/Societes/ric/jpgraph/Examples/matrix_layout_ex1.php new file mode 100755 index 00000000..1fefb1a8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrix_layout_ex1.php @@ -0,0 +1,44 @@ +title->Set('Matrix layout example'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +$mp = array(); +$n = 5; +for($i=0; $i < $n; ++$i){ + $mp[$i] = new MatrixPlot($data); + $mp[$i]->colormap->SetMap($i); + if( $i < 2 ) + $mp[$i]->SetSize(0.35); + else + $mp[$i]->SetSize(0.21); + // We need to make the legend a bit smaller since by + // defalt has a ~45% height + $mp[$i]->legend->SetModuleSize(15,2); +} + +$hor1 = new LayoutHor(array($mp[0],$mp[1])); +$hor2 = new LayoutHor(array($mp[2],$mp[3],$mp[4])); +$vert = new LayoutVert(array($hor1,$hor2)); +$vert->SetCenterPos(0.45,0.5); + +$graph->Add($vert); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/matrixex00.php b/Societes/ric/jpgraph/Examples/matrixex00.php new file mode 100755 index 00000000..2ba5114a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/matrixex00.php @@ -0,0 +1,59 @@ +title->Set('Matrix example 00'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +//$graph->SetColor('darkgreen@0.8'); + +$mp = array(); +$n = 5; +for($i=0; $i < $n; ++$i){ + $mp[$i] = new MatrixPlot($data); + $mp[$i]->colormap->SetMap($i); + if( $i < 2 ) + $mp[$i]->SetSize(0.35); + else + $mp[$i]->SetSize(0.21); +} + +$hor1 = new LayoutHor(array($mp[0],$mp[1])); +$hor2 = new LayoutHor(array($mp[2],$mp[3],$mp[4])); +$vert = new LayoutVert(array($hor1,$hor2)); +$vert->SetCenterPos(0.45,0.5); + +//$mp = new MatrixPlot($data); +//$mp->colormap->SetMap(2); +//$mp->SetCenterPos(0.5, 0.45); +//$mp->SetLegendLayout(0); +//$mp->SetSize(0.6); +//$mp->legend->Show(false); +//$mp->SetModuleSize(5,5); + +//$mp->legend->SetModuleSize(20,4); +//$mp->legend->SetSize(20,0.5); + +//$t = new Text('A text string',10,10); +//$graph->Add($t); + +//$graph->Add($mp); + +$graph->Add($vert); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/mkgrad.php b/Societes/ric/jpgraph/Examples/mkgrad.php new file mode 100755 index 00000000..3f36b44a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/mkgrad.php @@ -0,0 +1,171 @@ +iColors = array_keys($rgb->rgb_table); + usort($this->iColors,'_cmp'); + + $this->iGradstyles = array( + "Vertical",2, + "Horizontal",1, + "Vertical from middle",3, + "Horizontal from middle",4, + "Horizontal wider middle",6, + "Vertical wider middle",7, + "Rectangle",5 ); + } + + function Run() { + + echo '

      Generate gradient background

      '; + echo '
      '; + echo ''; + echo "\n"; + echo ''; + echo "\n"; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
      Width:
      '.$this->GenHTMLInput('w',8,4,300).'
      Height:
      '.$this->GenHTMLInput('h',8,4,300).'
      From Color:
      '; + echo $this->GenHTMLSelect('fc',$this->iColors); + echo '
      To Color:
      '; + echo $this->GenHTMLSelect('tc',$this->iColors); + echo '
      Gradient style:
      '; + echo $this->GenHTMLSelectCode('s',$this->iGradstyles); + echo '
      Filename: (empty to stream)
      '; + echo $this->GenHTMLInput('fn',55,100); + echo '
      '.$this->GenHTMLSubmit('submit').'
      '; + echo '
      '; + + } + + function GenHTMLSubmit($name) { + return ''; + } + + + function GenHTMLInput($name,$len,$maxlen=100,$val='') { + return ''; + } + + function GenHTMLSelect($name,$option,$selected="",$size=0) { + $txt="\n"; + } + + function GenHTMLSelectCode($name,$option,$selected="",$size=0) { + $txt="\n"; + } + +} + +// Basic application driver + +class Driver { + var $iGraph, $iGrad; + var $iWidth,$iHeight; + var $iFromColor, $iToColor; + var $iStyle; + var $iForm; + + function Driver() { + $this->iForm = new Form(); + } + + function GenGradImage() { + + $aWidth = (int)@$_POST['w']; + $aHeight = (int)@$_POST['h']; + $aFrom = @$_POST['fc']; + $aTo = @$_POST['tc']; + $aStyle = @$_POST['s']; + $aFileName = @$_POST['fn']; + + $this->iWidth = $aWidth; + $this->iHeight = $aHeight; + $this->iFromColor = $aFrom; + $this->iToColor = $aTo; + $this->iStyle = $aStyle; + + $this->graph = new CanvasGraph($aWidth,$aHeight); + $this->grad = new Gradient($this->graph->img); + $this->grad->FilledRectangle(0,0, + $this->iWidth,$this->iHeight, + $this->iFromColor, + $this->iToColor, + $this->iStyle); + + if( $aFileName != "" ) { + $this->graph->Stroke($aFileName); + echo "Image file '$aFileName' created."; + } + else + $this->graph->Stroke(); + } + + + function Run() { + + global $HTTP_POST_VARS; + + // Two modes: + // 1) If the script is called with no posted arguments + // we show the input form. + // 2) If we have posted arguments we naivly assume that + // we are called to do the image. + + if( @$_POST['ok']===' Ok ' ) { + $this->GenGradImage(); + } + else + $this->iForm->Run(); + } +} + +$driver = new Driver(); +$driver->Run(); + +?> diff --git a/Societes/ric/jpgraph/Examples/multconstganttex01.php b/Societes/ric/jpgraph/Examples/multconstganttex01.php new file mode 100755 index 00000000..fce986e2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/multconstganttex01.php @@ -0,0 +1,30 @@ +title->Set("Example with multiple constrains"); + +$bar1 = new GanttBar(0, "Label 1", "2003-06-08", "2003-06-12"); +$bar2 = new GanttBar(1, "Label 2", "2003-06-16", "2003-06-19"); +$bar3 = new GanttBar(2, "Label 3", "2003-06-15", "2003-06-21"); + +//create constraints +$bar1->SetConstrain(1, CONSTRAIN_ENDSTART); +$bar1->SetConstrain(2, CONSTRAIN_ENDSTART); + +// Setup scale +$graph->ShowHeaders(/*GANTT_HYEAR | GANTT_HMONTH |*/ GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR); + +// Add the specified activities +$graph->Add($bar1); +$graph->Add($bar2); +$graph->Add($bar3); + +// .. and stroke the graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/mulyaxiscsimex1.php b/Societes/ric/jpgraph/Examples/mulyaxiscsimex1.php new file mode 100755 index 00000000..516aea34 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/mulyaxiscsimex1.php @@ -0,0 +1,75 @@ +SetMargin(60,180,50,40); +$graph->SetMarginColor('white'); +$graph->title->Set("Multi Y-axes with Image Map"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Setup the scales for all axes +$graph->SetScale("intlin"); +$graph->SetYScale(0,'int'); +$graph->SetYScale(1,'int'); + +// Standard Y-axis plot +$lp1 = new LinePlot($datay1); +$lp1->SetLegend('2001'); +$lp1->mark->SetType(MARK_DIAMOND); +$lp1->mark->SetWidth(15); +$lp1->mark->SetFillColor('orange'); +$lp1->SetCSIMTargets($targ1,$alts1); +$graph->yaxis->title->Set('Basic Rate'); +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->yaxis->title->SetColor('black'); +$graph->Add($lp1); + +// First multi Y-axis plot +$lp2 = new LinePlot($datay2); +$lp2->SetLegend('2002'); +$lp2->mark->SetType(MARK_DIAMOND); +$lp2->mark->SetWidth(15); +$lp2->mark->SetFillColor('darkred'); +$lp2->SetCSIMTargets($targ2,$alts2); +$graph->ynaxis[0]->SetColor('darkred'); +$graph->ynaxis[0]->title->Set('Rate A'); +$graph->ynaxis[0]->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->ynaxis[0]->title->SetColor('darkred'); +$graph->AddY(0,$lp2); + +// Second multi Y-axis plot +$lp3 = new LinePlot($datay3); +$lp3->SetLegend('2003'); +$lp3->mark->SetType(MARK_DIAMOND); +$lp3->mark->SetWidth(15); +$lp3->mark->SetFillColor('darkgreen'); +$lp3->SetCSIMTargets($targ3,$alts3); +$graph->ynaxis[1]->SetColor('darkgreen'); +$graph->ynaxis[1]->title->Set('Rate B'); +$graph->ynaxis[1]->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->ynaxis[1]->title->SetColor('darkgreen'); +$graph->AddY(1,$lp3); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); +?> diff --git a/Societes/ric/jpgraph/Examples/mulyaxisex1.php b/Societes/ric/jpgraph/Examples/mulyaxisex1.php new file mode 100755 index 00000000..d2d812bb --- /dev/null +++ b/Societes/ric/jpgraph/Examples/mulyaxisex1.php @@ -0,0 +1,47 @@ +clearTheme(); +$graph->SetMargin(40,150,40,30); +$graph->SetMarginColor('white'); + +$graph->SetScale('intlin'); +$graph->title->Set('Using multiple Y-axis'); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,14); + +$graph->SetYScale(0,'lin'); +$graph->SetYScale(1,'lin'); +$graph->SetYScale(2,'lin'); + +$p1 = new LinePlot($datay); +$graph->Add($p1); + +$p2 = new LinePlot($datay2); +$p2->SetColor('teal'); +$graph->AddY(0,$p2); +$graph->ynaxis[0]->SetColor('teal'); + +$p3 = new LinePlot($datay3); +$p3->SetColor('red'); +$graph->AddY(1,$p3); +$graph->ynaxis[1]->SetColor('red'); + +$p4 = new LinePlot($datay4); +$p4->SetColor('blue'); +$graph->AddY(2,$p4); +$graph->ynaxis[2]->SetColor('blue'); + +// Output line +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/negbarvalueex01.php b/Societes/ric/jpgraph/Examples/negbarvalueex01.php new file mode 100755 index 00000000..e1341237 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/negbarvalueex01.php @@ -0,0 +1,40 @@ +clearTheme(); +$graph->img->SetMargin(60,30,40,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +// DIsplay value at top of each bar +$bplot->value->Show(); +$bplot->SetShadow(); + +$graph->Add($bplot); + +// Position the scale at the min of the other axis +$graph->xaxis->SetPos("min"); + +// Add 10% more space at top and bottom of graph +$graph->yscale->SetGrace(10,10); + +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,12); +$graph->title->Set("Example of bar plot with absolute labels"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,16); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/new1.gif b/Societes/ric/jpgraph/Examples/new1.gif new file mode 100755 index 00000000..7c8a2962 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/new1.gif differ diff --git a/Societes/ric/jpgraph/Examples/new2.gif b/Societes/ric/jpgraph/Examples/new2.gif new file mode 100755 index 00000000..b9620d74 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/new2.gif differ diff --git a/Societes/ric/jpgraph/Examples/new_bar1.php b/Societes/ric/jpgraph/Examples/new_bar1.php new file mode 100755 index 00000000..589b4c38 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_bar1.php @@ -0,0 +1,49 @@ +SetScale("textlin"); + +$theme_class=new UniversalTheme; +$graph->SetTheme($theme_class); + +$graph->yaxis->SetTickPositions(array(0,30,60,90,120,150), array(15,45,75,105,135)); +$graph->SetBox(false); + +$graph->ygrid->SetFill(false); +$graph->xaxis->SetTickLabels(array('A','B','C','D')); +$graph->yaxis->HideLine(false); +$graph->yaxis->HideTicks(false,false); + +// Create the bar plots +$b1plot = new BarPlot($data1y); +$b2plot = new BarPlot($data2y); +$b3plot = new BarPlot($data3y); + +// Create the grouped bar plot +$gbplot = new GroupBarPlot(array($b1plot,$b2plot,$b3plot)); +// ...and add it to the graPH +$graph->Add($gbplot); + + +$b1plot->SetColor("white"); +$b1plot->SetFillColor("#cc1111"); + +$b2plot->SetColor("white"); +$b2plot->SetFillColor("#11cccc"); + +$b3plot->SetColor("white"); +$b3plot->SetFillColor("#1111cc"); + +$graph->title->Set("Bar Plots"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/new_bar3.php b/Societes/ric/jpgraph/Examples/new_bar3.php new file mode 100755 index 00000000..2d8b9e65 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_bar3.php @@ -0,0 +1,39 @@ +SetScale("textlin"); + +//$theme_class="DefaultTheme"; +//$graph->SetTheme(new $theme_class()); + +// set major and minor tick positions manually +$graph->yaxis->SetTickPositions(array(0,30,60,90,120,150), array(15,45,75,105,135)); +$graph->SetBox(false); + +//$graph->ygrid->SetColor('gray'); +$graph->ygrid->SetFill(false); +$graph->xaxis->SetTickLabels(array('A','B','C','D')); +$graph->yaxis->HideLine(false); +$graph->yaxis->HideTicks(false,false); + +// Create the bar plots +$b1plot = new BarPlot($datay); + +// ...and add it to the graPH +$graph->Add($b1plot); + + +$b1plot->SetColor("white"); +$b1plot->SetFillGradient("#4B0082","white",GRAD_LEFT_REFLECTION); +$b1plot->SetWidth(45); +$graph->title->Set("Bar Gradient(Left reflection)"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/new_bar4.php b/Societes/ric/jpgraph/Examples/new_bar4.php new file mode 100755 index 00000000..8415c09f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_bar4.php @@ -0,0 +1,43 @@ +SetScale("textlin"); + +$theme_class=new UniversalTheme; +$graph->SetTheme($theme_class); + +$graph->Set90AndMargin(50,40,40,40); +$graph->img->SetAngle(90); + +// set major and minor tick positions manually +$graph->SetBox(false); + +//$graph->ygrid->SetColor('gray'); +$graph->ygrid->Show(false); +$graph->ygrid->SetFill(false); +$graph->xaxis->SetTickLabels(array('A','B','C','D','E','F')); +$graph->yaxis->HideLine(false); +$graph->yaxis->HideTicks(false,false); + +// For background to be gradient, setfill is needed first. +$graph->SetBackgroundGradient('#00CED1', '#FFFFFF', GRAD_HOR, BGRAD_PLOT); + +// Create the bar plots +$b1plot = new BarPlot($datay); + +// ...and add it to the graPH +$graph->Add($b1plot); + +$b1plot->SetWeight(0); +$b1plot->SetFillGradient("#808000","#90EE90",GRAD_HOR); +$b1plot->SetWidth(17); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/new_bar6.php b/Societes/ric/jpgraph/Examples/new_bar6.php new file mode 100755 index 00000000..c5343169 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_bar6.php @@ -0,0 +1,103 @@ +SetScale("textlin"); +$graph->SetY2Scale("lin",0,90); +$graph->SetY2OrderBack(false); + +$graph->SetMargin(35,50,20,5); + +$theme_class = new UniversalTheme; +$graph->SetTheme($theme_class); + +$graph->yaxis->SetTickPositions(array(0,50,100,150,200,250,300,350), array(25,75,125,175,275,325)); +$graph->y2axis->SetTickPositions(array(30,40,50,60,70,80,90)); + +$months = $gDateLocale->GetShortMonth(); +$months = array_merge(array_slice($months,3,9), array_slice($months,0,3)); +$graph->SetBox(false); + +$graph->ygrid->SetFill(false); +$graph->xaxis->SetTickLabels(array('A','B','C','D')); +$graph->yaxis->HideLine(false); +$graph->yaxis->HideTicks(false,false); +// Setup month as labels on the X-axis +$graph->xaxis->SetTickLabels($months); + +// Create the bar plots +$b1plot = new BarPlot($data1y); +$b2plot = new BarPlot($data2y); + +$b3plot = new BarPlot($data3y); +$b4plot = new BarPlot($data4y); +$b5plot = new BarPlot($data5y); + +$lplot = new LinePlot($data6y); + +// Create the grouped bar plot +$gbbplot = new AccBarPlot(array($b3plot,$b4plot,$b5plot)); +$gbplot = new GroupBarPlot(array($b1plot,$b2plot,$gbbplot)); + +// ...and add it to the graPH +$graph->Add($gbplot); +$graph->AddY2($lplot); + +$b1plot->SetColor("#0000CD"); +$b1plot->SetFillColor("#0000CD"); +$b1plot->SetLegend("Cliants"); + +$b2plot->SetColor("#B0C4DE"); +$b2plot->SetFillColor("#B0C4DE"); +$b2plot->SetLegend("Machines"); + +$b3plot->SetColor("#8B008B"); +$b3plot->SetFillColor("#8B008B"); +$b3plot->SetLegend("First Track"); + +$b4plot->SetColor("#DA70D6"); +$b4plot->SetFillColor("#DA70D6"); +$b4plot->SetLegend("All"); + +$b5plot->SetColor("#9370DB"); +$b5plot->SetFillColor("#9370DB"); +$b5plot->SetLegend("Single Only"); + +$lplot->SetBarCenter(); +$lplot->SetColor("yellow"); +$lplot->SetLegend("Houses"); +$lplot->mark->SetType(MARK_X,'',1.0); +$lplot->mark->SetWeight(2); +$lplot->mark->SetWidth(8); +$lplot->mark->setColor("yellow"); +$lplot->mark->setFillColor("yellow"); + +$graph->legend->SetFrameWeight(1); +$graph->legend->SetColumns(6); +$graph->legend->SetColor('#4E4E4E','#00A78A'); + +$band = new PlotBand(VERTICAL,BAND_RDIAG,11,"max",'khaki4'); +$band->ShowFrame(true); +$band->SetOrder(DEPTH_BACK); +$graph->Add($band); + +$graph->title->Set("Combined Line and Bar plots"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/new_line1.php b/Societes/ric/jpgraph/Examples/new_line1.php new file mode 100755 index 00000000..7a8ae660 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_line1.php @@ -0,0 +1,57 @@ +SetScale("textlin"); + +$theme_class=new UniversalTheme; + +$graph->SetTheme($theme_class); +$graph->img->SetAntiAliasing(false); +$graph->title->Set('Filled Y-grid'); +$graph->SetBox(false); + +$graph->img->SetAntiAliasing(); + +$graph->yaxis->HideZeroLabel(); +$graph->yaxis->HideLine(false); +$graph->yaxis->HideTicks(false,false); + +$graph->xgrid->Show(); +$graph->xgrid->SetLineStyle("solid"); +$graph->xaxis->SetTickLabels(array('A','B','C','D')); +$graph->xgrid->SetColor('#E3E3E3'); +/* $graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLPLOT); */ + +// Create the first line +$p1 = new LinePlot($datay1); +$graph->Add($p1); +$p1->SetColor("#6495ED"); +$p1->SetLegend('Line 1'); + +// Create the second line +$p2 = new LinePlot($datay2); +$graph->Add($p2); +$p2->SetColor("#B22222"); +$p2->SetLegend('Line 2'); + +// Create the third line +$p3 = new LinePlot($datay3); +$graph->Add($p3); +$p3->SetColor("#FF1493"); +$p3->SetLegend('Line 3'); + +$graph->legend->SetFrameWeight(1); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/new_line2.php b/Societes/ric/jpgraph/Examples/new_line2.php new file mode 100755 index 00000000..8ccd2710 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_line2.php @@ -0,0 +1,57 @@ +SetScale("textlin"); + +$theme_class= new UniversalTheme; +$graph->SetTheme($theme_class); + +$graph->title->Set('Background Image'); +$graph->SetBox(false); + +$graph->yaxis->HideZeroLabel(); +$graph->yaxis->HideLine(false); +$graph->yaxis->HideTicks(false,false); + +$graph->xaxis->SetTickLabels(array('A','B','C','D')); +$graph->ygrid->SetFill(false); +$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME); + +$p1 = new LinePlot($datay1); +$graph->Add($p1); + +$p2 = new LinePlot($datay2); +$graph->Add($p2); + +$p1->SetColor("#55bbdd"); +$p1->SetLegend('Line 1'); +$p1->mark->SetType(MARK_FILLEDCIRCLE,'',1.0); +$p1->mark->SetColor('#55bbdd'); +$p1->mark->SetFillColor('#55bbdd'); +$p1->SetCenter(); + +$p2->SetColor("#aaaaaa"); +$p2->SetLegend('Line 2'); +$p2->mark->SetType(MARK_UTRIANGLE,'',1.0); +$p2->mark->SetColor('#aaaaaa'); +$p2->mark->SetFillColor('#aaaaaa'); +$p2->value->SetMargin(14); +$p2->SetCenter(); + +$graph->legend->SetFrameWeight(1); +$graph->legend->SetColor('#4E4E4E','#00A78A'); +$graph->legend->SetMarkAbsSize(8); + + +// Output line +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/new_line3.php b/Societes/ric/jpgraph/Examples/new_line3.php new file mode 100755 index 00000000..cc0ab3e5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_line3.php @@ -0,0 +1,46 @@ +SetScale("textlin",0,50); + +//$theme_class=new DefaultTheme; +//$graph->SetTheme($theme_class); + +$graph->title->Set("Filled Area"); + +$graph->SetBox(false); +$graph->yaxis->HideLine(false); +$graph->yaxis->HideTicks(false,false); +$graph->yaxis->HideZeroLabel(); + +$graph->xaxis->SetTickLabels(array('A','B','C','D','E','F','G')); + +// Create the plot +$p1 = new LinePlot($datay1); +$graph->Add($p1); + +$p2 = new LinePlot($datay2); +$graph->Add($p2); + +// Use an image of favourite car as marker +$p1->mark->SetType(MARK_IMG,'rose.gif',1.0); +$p1->SetLegend('rose'); +$p1->SetColor('#CD5C5C'); + +$p2->mark->SetType(MARK_IMG,'sunflower.gif',1.0); +$p2->SetLegend('sunflower'); +$p2->SetColor('#CD5C5C'); + +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/new_line4.php b/Societes/ric/jpgraph/Examples/new_line4.php new file mode 100755 index 00000000..f50921ea --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_line4.php @@ -0,0 +1,49 @@ +SetScale("textlin",0,50); + +$theme_class= new UniversalTheme; +$graph->SetTheme($theme_class); + +$graph->title->Set("Line Plots with Markers"); + +$graph->SetBox(false); +$graph->ygrid->SetFill(false); +$graph->yaxis->HideLine(false); +$graph->yaxis->HideTicks(false,false); +$graph->yaxis->HideZeroLabel(); + +$graph->xaxis->SetTickLabels(array('A','B','C','D','E','F','G')); +// Create the plot +$p1 = new LinePlot($datay1); +$graph->Add($p1); + +$p2 = new LinePlot($datay2); +$graph->Add($p2); + +// Use an image of favourite car as marker +$p1->mark->SetType(MARK_IMG,'new1.gif',0.8); +$p1->SetColor('#aadddd'); +$p1->value->SetFormat('%d'); +$p1->value->Show(); +$p1->value->SetColor('#55bbdd'); + +$p2->mark->SetType(MARK_IMG,'new2.gif',0.8); +$p2->SetColor('#ddaa99'); +$p2->value->SetFormat('%d'); +$p2->value->Show(); +$p2->value->SetColor('#55bbdd'); + + +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/new_line5.php b/Societes/ric/jpgraph/Examples/new_line5.php new file mode 100755 index 00000000..7a234a8c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_line5.php @@ -0,0 +1,44 @@ +SetScale("intlin",0,$aYMax=50); + +$theme_class= new UniversalTheme; +$graph->SetTheme($theme_class); + +$graph->SetMargin(40,40,50,40); + +$graph->title->Set('Inverted Y-axis'); +$graph->SetBox(false); +$graph->yaxis->HideLine(false); +$graph->yaxis->HideTicks(false,false); + +// For background to be gradient, setfill is needed first. +$graph->ygrid->SetFill(true,'#FFFFFF@0.5','#FFFFFF@0.5'); +$graph->SetBackgroundGradient('#FFFFFF', '#00FF7F', GRAD_HOR, BGRAD_PLOT); + +$graph->xaxis->SetTickLabels(array('G','F','E','D','C','B','A')); +$graph->xaxis->SetLabelMargin(20); +$graph->yaxis->SetLabelMargin(20); + +$graph->SetAxisStyle(AXSTYLE_BOXOUT); +$graph->img->SetAngle(180); + +// Create the line +$p1 = new LinePlot($datay); +$graph->Add($p1); + +$p1->SetFillGradient('#FFFFFF','#F0F8FF'); +$p1->SetColor('#aadddd'); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/new_pie1.php b/Societes/ric/jpgraph/Examples/new_pie1.php new file mode 100755 index 00000000..3c395e88 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_pie1.php @@ -0,0 +1,28 @@ +SetTheme(new $theme_class()); + +// Set A title for the plot +$graph->title->Set("A Simple Pie Plot"); +$graph->SetBox(true); + +// Create +$p1 = new PiePlot($data); +$graph->Add($p1); + +$p1->ShowBorder(); +$p1->SetColor('black'); +$p1->SetSliceColors(array('#1E90FF','#2E8B57','#ADFF2F','#DC143C','#BA55D3')); +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/new_pie2.php b/Societes/ric/jpgraph/Examples/new_pie2.php new file mode 100755 index 00000000..6e94cbff --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_pie2.php @@ -0,0 +1,55 @@ +SetShadow(); + +$theme_class= new UniversalTheme; +//$graph->SetTheme($theme_class); + +// Set A title for the plot +$graph->title->Set("Multiple - Pie plot"); + +// Create plots +$size=0.13; +$p1 = new PiePlot($data); +$graph->Add($p1); + +$p1->SetSize($size); +$p1->SetCenter(0.25,0.32); +$p1->SetSliceColors(array('#1E90FF','#2E8B57','#ADFF2F','#DC143C','#BA55D3')); +$p1->title->Set("2005"); + +$p2 = new PiePlot($data); +$graph->Add($p2); + +$p2->SetSize($size); +$p2->SetCenter(0.65,0.32); +$p2->SetSliceColors(array('#1E90FF','#2E8B57','#ADFF2F','#DC143C','#BA55D3')); +$p2->title->Set("2006"); + +$p3 = new PiePlot($data); +$graph->Add($p3); + +$p3->SetSize($size); +$p3->SetCenter(0.25,0.75); +$p3->SetSliceColors(array('#6495ED','#2E8B57','#ADFF2F','#DC143C','#BA55D3')); +$p3->title->Set("2007"); + +$p4 = new PiePlot($data); +$graph->Add($p4); + +$p4->SetSize($size); +$p4->SetCenter(0.65,0.75); +$p4->SetSliceColors(array('#6495ED','#2E8B57','#ADFF2F','#DC143C','#BA55D3')); +$p4->title->Set("2008"); + + +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/new_pie3.php b/Societes/ric/jpgraph/Examples/new_pie3.php new file mode 100755 index 00000000..81bc0f2a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_pie3.php @@ -0,0 +1,28 @@ +SetTheme($theme_class); + +// Set A title for the plot +$graph->title->Set("A Simple 3D Pie Plot"); + +// Create +$p1 = new PiePlot3D($data); +$graph->Add($p1); + +$p1->ShowBorder(); +$p1->SetColor('black'); +$p1->SetSliceColors(array('#1E90FF','#2E8B57','#ADFF2F','#BA55D3')); +$p1->ExplodeSlice(1); +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/new_pie4.php b/Societes/ric/jpgraph/Examples/new_pie4.php new file mode 100755 index 00000000..571f5ae6 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_pie4.php @@ -0,0 +1,65 @@ +SetTheme(new $theme_class()); + +// Setup background +$graph->SetBackgroundImage('worldmap1.jpg',BGIMG_FILLFRAME); + +// Setup title +$graph->title->Set("Pie plots with background image"); +$graph->title->SetColor('white'); +$graph->SetTitleBackground('#4169E1',TITLEBKG_STYLE2,TITLEBKG_FRAME_FULL,'#4169E1',10,10,true); + +$p = array(); +// Create the plots +for( $i=0; $i < $n; ++$i ) { + $p[] = new PiePlot3D($data); +} +for( $i=0; $i < $n; ++$i ) { + $graph->Add($p[$i]); +} + +// Position the four pies and change color +for( $i=0; $i < $n; ++$i ) { + $p[$i]->SetCenter($piepos[2*$i],$piepos[2*$i+1]); + $p[$i]->SetSliceColors(array('#1E90FF','#2E8B57','#ADFF2F','#DC143C','#BA55D3')); +} + +// Set the titles +for( $i=0; $i < $n; ++$i ) { + $p[$i]->title->Set($titles[$i]); + #$p[$i]->title->SetFont(FF_ARIAL,FS_NORMAL,8); +} + +for( $i=0; $i < $n; ++$i ) { + $p[$i]->value->Show(false); +} + +// Size of pie in fraction of the width of the graph +for( $i=0; $i < $n; ++$i ) { + $p[$i]->SetSize(0.13); +} + +for( $i=0; $i < $n; ++$i ) { + $p[$i]->SetEdge(false); + $p[$i]->ExplodeSlice(1,7); +} + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/new_step1.php b/Societes/ric/jpgraph/Examples/new_step1.php new file mode 100755 index 00000000..7bd0ce50 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/new_step1.php @@ -0,0 +1,36 @@ +SetScale("intlin",0,$aYMax=50); +$theme_class=new UniversalTheme; +$graph->SetTheme($theme_class); + +$graph->SetBox(false); + +$graph->title->Set('Step Line'); +$graph->ygrid->Show(true); +$graph->xgrid->Show(false); +$graph->yaxis->HideZeroLabel(); +$graph->ygrid->SetFill(true,'#FFFFFF@0.5','#FFFFFF@0.5'); +$graph->SetBackgroundGradient('blue', '#55eeff', GRAD_HOR, BGRAD_PLOT); +$graph->xaxis->SetTickLabels(array('A','B','C','D','E','F','G')); + +// Create the line +$p1 = new LinePlot($datay); +$graph->Add($p1); + +$p1->SetFillGradient('yellow','red'); +$p1->SetStepStyle(); +$p1->SetColor('#808000'); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/nullvalueex01.php b/Societes/ric/jpgraph/Examples/nullvalueex01.php new file mode 100755 index 00000000..df54e73f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/nullvalueex01.php @@ -0,0 +1,55 @@ +clearTheme(); +$graph->img->SetMargin(40,150,40,80); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +//Setup title +$graph->title->Set("Line plot with null values"); + +// Use built in font +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,14); + +// Slightly adjust the legend from it's default position +$graph->legend->Pos(0.03,0.5,"right","center"); +$graph->legend->SetFont(FF_FONT1,FS_BOLD); + +// Setup X-scale +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->xaxis->SetLabelAngle(45); + +// Create the first line +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$p1->SetLegend("Undefined\nvariant 1"); +$graph->Add($p1); + +// ... and the second +$p2 = new LinePlot($data2y); +$p2->mark->SetType(MARK_STAR); +$p2->mark->SetFillColor("red"); +$p2->mark->SetWidth(4); +$p2->SetColor("red"); +$p2->SetCenter(); +$p2->SetLegend("Undefined\nvariant 2"); +$graph->Add($p2); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/ocean_example.php b/Societes/ric/jpgraph/Examples/ocean_example.php new file mode 100755 index 00000000..8a09d59c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/ocean_example.php @@ -0,0 +1,58 @@ + array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ), + 1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ), + 2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ), + 3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ), + 4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ), + 5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ), + 6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ), + 7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ), + 8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ), +); + + +// Create the graph. These two calls are always required +$graph = new Graph(400,300); + +$graph->SetScale("textlin"); +if ($theme) { + $graph->SetTheme(new $theme()); +} +$theme_class = new OceanTheme; +$graph->SetTheme($theme_class); + +$plot = array(); +// Create the bar plots +for ($i = 0; $i < 4; $i++) { + $plot[$i] = new BarPlot($data[$i]); + $plot[$i]->SetLegend('plot'.($i+1)); +} +//$acc1 = new AccBarPlot(array($plot[0], $plot[1])); +//$acc1->value->Show(); +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] )); + +for ($i = 4; $i < 8; $i++) { + $plot[$i] = new LinePlot($data[$i]); + $plot[$i]->SetLegend('plot'.$i); + $plot[$i]->value->Show(); +} + +$graph->Add($gbplot); +$graph->Add($plot[4]); + +$title = "OceanTheme Example"; +$title = mb_convert_encoding($title,'UTF-8'); +$graph->title->Set($title); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/odoex00.php b/Societes/ric/jpgraph/Examples/odoex00.php new file mode 100755 index 00000000..e8cef552 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex00.php @@ -0,0 +1,47 @@ +SetColor('white'); +$graph->SetMarginColor('white'); +$graph->SetFrame(false); + +//--------------------------------------------------------------------- +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +//--------------------------------------------------------------------- +$odo = new Odometer(); + +//--------------------------------------------------------------------- +// Set display value for the odometer +//--------------------------------------------------------------------- +$odo->needle->Set(40); + +//--------------------------------------------------------------------- +// Add the odometer to the graph +//--------------------------------------------------------------------- +$graph->Add($odo); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odoex01.php b/Societes/ric/jpgraph/Examples/odoex01.php new file mode 100755 index 00000000..3d29aa02 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex01.php @@ -0,0 +1,69 @@ +title->Set("Odometer title"); +$graph->title->SetColor("white"); +$graph->subtitle->Set("2002-02-13"); +$graph->subtitle->SetColor("white"); + +//--------------------------------------------------------------------- +// Specify caption. +// * (This is the text at the bottom of the graph.) The margins will +// automatically adjust to fit the height of the text. A caption +// may have multiple lines by including a '\n' character in the +// string. +//--------------------------------------------------------------------- +$graph->caption->Set("First caption row\n... second row"); +$graph->caption->SetColor("white"); + +//--------------------------------------------------------------------- +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +//--------------------------------------------------------------------- +$odo = new Odometer(); + +//--------------------------------------------------------------------- +// Set color indication between values 80 and 100 as red +//--------------------------------------------------------------------- +$odo->AddIndication(80,100,"red"); + +//--------------------------------------------------------------------- +// Set display value for the odometer +//--------------------------------------------------------------------- +$odo->needle->Set(30); + +//--------------------------------------------------------------------- +// Add the odometer to the graph +//--------------------------------------------------------------------- +$graph->Add($odo); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odoex010.php b/Societes/ric/jpgraph/Examples/odoex010.php new file mode 100755 index 00000000..3c70ad2f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex010.php @@ -0,0 +1,75 @@ +AddIndication(80,100,"red"); +$odo2->AddIndication(20,30,"green"); +$odo2->AddIndication(65,100,"red"); +$odo3->AddIndication(60,90,"yellow"); +$odo3->AddIndication(90,100,"red"); + +//--------------------------------------------------------------------- +// Set display values for the odometers +//--------------------------------------------------------------------- +$odo1->needle->Set(17); +$odo2->needle->Set(47); +$odo3->needle->Set(86); + +$odo1->needle->SetFillColor("blue"); +$odo2->needle->SetFillColor("yellow:0.7"); +$odo3->needle->SetFillColor("black"); +$odo3->needle->SetColor("black"); + + +//--------------------------------------------------------------------- +// Set scale label properties +//--------------------------------------------------------------------- +$odo1->scale->label->SetColor("navy"); +$odo2->scale->label->SetColor("blue"); +$odo3->scale->label->SetColor("darkred"); + +$odo1->scale->label->SetFont(FF_FONT1); +$odo2->scale->label->SetFont(FF_FONT2,FS_BOLD); +$odo3->scale->label->SetFont(FF_ARIAL,FS_BOLD,11); + +//--------------------------------------------------------------------- +// Add the odometers to the graph using a vertical layout +//--------------------------------------------------------------------- +$l1 = new LayoutVert( array($odo1,$odo2,$odo3) ) ; +$graph->Add( $l1 ); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odoex011.php b/Societes/ric/jpgraph/Examples/odoex011.php new file mode 100755 index 00000000..cc74f4f7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex011.php @@ -0,0 +1,108 @@ +SetShadow(); + +//--------------------------------------------------------------------- +// Specify title and subtitle using default fonts +// * Note each title may be multilines by using a '\n' as a line +// divider. +//--------------------------------------------------------------------- +$graph->title->Set("Result from 2002"); +$graph->title->SetColor("white"); +$graph->subtitle->Set("O1 - W-Site"); +$graph->subtitle->SetColor("white"); + +//--------------------------------------------------------------------- +// Specify caption. +// * (This is the text at the bottom of the graph.) The margins will +// automatically adjust to fit the height of the text. A caption +// may have multiple lines by including a '\n' character in the +// string. +//--------------------------------------------------------------------- +$graph->caption->Set("Fig1. Values within 85%\nconfidence intervall"); +$graph->caption->SetColor("white"); + +//--------------------------------------------------------------------- +// We will display three odometers stacked vertically +// The first thing to do is to create them +//--------------------------------------------------------------------- +$odo1 = new Odometer(); +$odo2 = new Odometer(); +$odo3 = new Odometer(); + + +//--------------------------------------------------------------------- +// Set caption for each odometer +//--------------------------------------------------------------------- +$odo1->caption->Set("April"); +$odo1->caption->SetFont(FF_FONT2,FS_BOLD); +$odo2->caption->Set("May"); +$odo2->caption->SetFont(FF_FONT2,FS_BOLD); +$odo3->caption->Set("June"); +$odo3->caption->SetFont(FF_FONT2,FS_BOLD); + +//--------------------------------------------------------------------- +// Set Indicator bands for the odometers +//--------------------------------------------------------------------- +$odo1->AddIndication(80,100,"red"); +$odo2->AddIndication(20,30,"green"); +$odo2->AddIndication(65,100,"red"); +$odo3->AddIndication(60,90,"yellow"); +$odo3->AddIndication(90,100,"red"); + +//--------------------------------------------------------------------- +// Set display values for the odometers +//--------------------------------------------------------------------- +$odo1->needle->Set(17); +$odo2->needle->Set(47); +$odo3->needle->Set(86); + +$odo1->needle->SetFillColor("blue"); +$odo2->needle->SetFillColor("yellow:0.7"); +$odo3->needle->SetFillColor("black"); +$odo3->needle->SetColor("black"); + + +//--------------------------------------------------------------------- +// Set scale label properties +//--------------------------------------------------------------------- +$odo1->scale->label->SetColor("navy"); +$odo2->scale->label->SetColor("blue"); +$odo3->scale->label->SetColor("darkred"); + +$odo1->scale->label->SetFont(FF_FONT1); +$odo2->scale->label->SetFont(FF_FONT2,FS_BOLD); +$odo3->scale->label->SetFont(FF_ARIAL,FS_BOLD,10); + +//--------------------------------------------------------------------- +// Add the odometers to the graph using a vertical layout +//--------------------------------------------------------------------- +$l1 = new LayoutVert( array($odo1,$odo2,$odo3) ) ; +$graph->Add( $l1 ); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odoex012.php b/Societes/ric/jpgraph/Examples/odoex012.php new file mode 100755 index 00000000..b54f773d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex012.php @@ -0,0 +1,119 @@ +SetShadow(); + +//--------------------------------------------------------------------- +// Specify title and subtitle using default fonts +// * Note each title may be multilines by using a '\n' as a line +// divider. +//--------------------------------------------------------------------- +$graph->title->Set("Result from 2002"); +$graph->title->SetColor("white"); +$graph->subtitle->Set("O1 - W-Site"); +$graph->subtitle->SetColor("white"); + +//--------------------------------------------------------------------- +// Specify caption. +// * (This is the text at the bottom of the graph.) The margins will +// automatically adjust to fit the height of the text. A caption +// may have multiple lines by including a '\n' character in the +// string. +//--------------------------------------------------------------------- +$graph->caption->Set("Fig1. Values within 85%\nconfidence intervall"); +$graph->caption->SetColor("white"); + +//--------------------------------------------------------------------- +// We will display two columns where the first column has +// three odometers (same as in example 11) and the second column +// has two odoemters +// The first thing to do is to create them +//--------------------------------------------------------------------- +$odo1 = new Odometer(); +$odo2 = new Odometer(); +$odo3 = new Odometer(); +$odo4 = new Odometer(); +$odo5 = new Odometer(); + + +//--------------------------------------------------------------------- +// Set caption for each odometer +//--------------------------------------------------------------------- +$odo1->caption->Set("April"); +$odo1->caption->SetFont(FF_ARIAL,FS_BOLD); +$odo2->caption->Set("May"); +$odo2->caption->SetFont(FF_FONT2,FS_BOLD); +$odo3->caption->Set("June"); +$odo3->caption->SetFont(FF_FONT2,FS_BOLD); +$odo4->caption->Set("Daily low average"); +$odo4->caption->SetFont(FF_FONT1,FS_BOLD); +$odo5->caption->Set("Daily high average"); +$odo5->caption->SetFont(FF_FONT1,FS_BOLD); + +//--------------------------------------------------------------------- +// Set Indicator bands for the odometers +//--------------------------------------------------------------------- +$odo1->AddIndication(80,100,"red"); +$odo2->AddIndication(20,30,"green"); +$odo2->AddIndication(65,100,"red"); +$odo3->AddIndication(60,90,"yellow"); +$odo3->AddIndication(90,100,"red"); + +//--------------------------------------------------------------------- +// Set display values for the odometers +//--------------------------------------------------------------------- +$odo1->needle->Set(17); +$odo2->needle->Set(47); +$odo3->needle->Set(86); +$odo4->needle->Set(22); +$odo5->needle->Set(77); + +$odo1->needle->SetFillColor("blue"); +$odo2->needle->SetFillColor("yellow:0.7"); +$odo3->needle->SetFillColor("black"); +$odo3->needle->SetColor("black"); + + +//--------------------------------------------------------------------- +// Set scale label properties +//--------------------------------------------------------------------- +$odo1->scale->label->SetColor("navy"); +$odo2->scale->label->SetColor("blue"); +$odo3->scale->label->SetColor("darkred"); + +$odo1->scale->label->SetFont(FF_FONT1); +$odo2->scale->label->SetFont(FF_FONT2,FS_BOLD); +$odo3->scale->label->SetFont(FF_ARIAL,FS_BOLD,10); + +//--------------------------------------------------------------------- +// Add the odometers to the graph using a vertical layout +//--------------------------------------------------------------------- +$l1 = new LayoutVert( array($odo1,$odo2,$odo3) ) ; +$l2 = new LayoutVert( array($odo4,$odo5) ) ; +$l3 = new LayoutHor( array($l1,$l2) ); +$graph->Add( $l3 ); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odoex02.php b/Societes/ric/jpgraph/Examples/odoex02.php new file mode 100755 index 00000000..47ccc6ba --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex02.php @@ -0,0 +1,71 @@ +title->Set("Odometer title"); +$graph->title->SetColor("white"); +$graph->subtitle->Set("2002-02-13"); +$graph->subtitle->SetColor("white"); + +//--------------------------------------------------------------------- +// Specify caption. +// * (This is the text at the bottom of the graph.) The margins will +// automatically adjust to fit the height of the text. A caption +// may have multiple lines by including a '\n' character in the +// string. +//--------------------------------------------------------------------- +$graph->caption->Set("First caption row\n... second row"); +$graph->caption->SetColor("white"); + +//--------------------------------------------------------------------- +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +//--------------------------------------------------------------------- +$odo = new Odometer(); + +//--------------------------------------------------------------------- +// Set color indication +//--------------------------------------------------------------------- +$odo->AddIndication(0,50,"green"); +$odo->AddIndication(50,80,"yellow"); +$odo->AddIndication(80,100,"red"); + +//--------------------------------------------------------------------- +// Set display value for the odometer +//--------------------------------------------------------------------- +$odo->needle->Set(30); + +//--------------------------------------------------------------------- +// Add the odometer to the graph +//--------------------------------------------------------------------- +$graph->Add($odo); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odoex03.php b/Societes/ric/jpgraph/Examples/odoex03.php new file mode 100755 index 00000000..91ca401c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex03.php @@ -0,0 +1,83 @@ +SetShadow(); + +//--------------------------------------------------------------------- +// Specify title and subtitle using default fonts +// * Note each title may be multilines by using a '\n' as a line +// divider. +//--------------------------------------------------------------------- +$graph->title->Set("Odometer title"); +$graph->title->SetColor("white"); +$graph->subtitle->Set("2002-02-13"); +$graph->subtitle->SetColor("white"); + +//--------------------------------------------------------------------- +// Specify caption. +// * (This is the text at the bottom of the graph.) The margins will +// automatically adjust to fit the height of the text. A caption +// may have multiple lines by including a '\n' character in the +// string. +//--------------------------------------------------------------------- +$graph->caption->Set("First caption row\n... second row"); +$graph->caption->SetColor("white"); + +//--------------------------------------------------------------------- +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +//--------------------------------------------------------------------- +$odo = new Odometer(); + +//--------------------------------------------------------------------- +// Set color indication +//--------------------------------------------------------------------- +$odo->AddIndication(0,50,"green"); +$odo->AddIndication(50,80,"yellow"); +$odo->AddIndication(80,100,"red"); + +//--------------------------------------------------------------------- +// Adjust scale ticks to be shown at 10 steps interval and scale +// labels at every second tick +//--------------------------------------------------------------------- +$odo->scale->SetTicks(10,2); + +//--------------------------------------------------------------------- +// Use a bold font for tick labels +//--------------------------------------------------------------------- +$odo->scale->label->SetFont(FF_FONT1, FS_BOLD); + +//--------------------------------------------------------------------- +// Set display value for the odometer +//--------------------------------------------------------------------- +$odo->needle->Set(30); + +//--------------------------------------------------------------------- +// Add the odometer to the graph +//--------------------------------------------------------------------- +$graph->Add($odo); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odoex04.php b/Societes/ric/jpgraph/Examples/odoex04.php new file mode 100755 index 00000000..9955b7db --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex04.php @@ -0,0 +1,96 @@ +title->Set("Odometer title"); +$graph->title->SetColor("white"); +$graph->subtitle->Set("2002-02-13"); +$graph->subtitle->SetColor("white"); + +//--------------------------------------------------------------------- +// Specify caption. +// * (This is the text at the bottom of the graph.) The margins will +// automatically adjust to fit the height of the text. A caption +// may have multiple lines by including a '\n' character in the +// string. +//--------------------------------------------------------------------- +$graph->caption->Set("First caption row\n... second row"); +$graph->caption->SetColor("white"); + +//--------------------------------------------------------------------- +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +//--------------------------------------------------------------------- +$odo = new Odometer(); + +//--------------------------------------------------------------------- +// Set color indication +//--------------------------------------------------------------------- +$odo->AddIndication(0,50,"green"); +$odo->AddIndication(50,80,"yellow"); +$odo->AddIndication(80,100,"red"); + +//--------------------------------------------------------------------- +// Set the center area that will not be affected by the color bands +//--------------------------------------------------------------------- +$odo->SetCenterAreaWidth(0.4); // Fraction of radius + +//--------------------------------------------------------------------- +// Adjust scale ticks to be shown at 10 steps interval and scale +// labels at every second tick +//--------------------------------------------------------------------- +$odo->scale->SetTicks(10,2); + +//--------------------------------------------------------------------- +// Use a bold font for tick labels +//--------------------------------------------------------------------- +$odo->scale->label->SetFont(FF_FONT1, FS_BOLD); + +//--------------------------------------------------------------------- +// Set display value for the odometer +//--------------------------------------------------------------------- +$odo->needle->Set(30); + +//--------------------------------------------------------------------- +// Set a new style for the needle +//--------------------------------------------------------------------- +$odo->needle->SetStyle(NEEDLE_STYLE_MEDIUM_TRIANGLE); +$odo->needle->SetLength(0.7); // Length as 70% of the radius +$odo->needle->SetFillColor("orange"); + + +//--------------------------------------------------------------------- +// Add the odometer to the graph +//--------------------------------------------------------------------- +$graph->Add($odo); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odoex05.php b/Societes/ric/jpgraph/Examples/odoex05.php new file mode 100755 index 00000000..379a06e9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex05.php @@ -0,0 +1,123 @@ +SetColor("lightyellow"); + +//--------------------------------------------------------------------- +// Specify title and subtitle using default fonts +// * Note each title may be multilines by using a '\n' as a line +// divider. +//--------------------------------------------------------------------- +$graph->title->Set("Odometer title"); +$graph->title->SetColor("white"); +$graph->subtitle->Set("2002-02-13"); +$graph->subtitle->SetColor("white"); + +//--------------------------------------------------------------------- +// Specify caption. +// * (This is the text at the bottom of the graph.) The margins will +// automatically adjust to fit the height of the text. A caption +// may have multiple lines by including a '\n' character in the +// string. +//--------------------------------------------------------------------- +$graph->caption->Set("First caption row\n... second row"); +$graph->caption->SetColor("white"); + +//--------------------------------------------------------------------- +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +//--------------------------------------------------------------------- +$odo = new Odometer(); + +//--------------------------------------------------------------------- +// Set color indication +//--------------------------------------------------------------------- +$odo->AddIndication(0,50,"green"); +$odo->AddIndication(50,80,"yellow"); +$odo->AddIndication(80,100,"red"); + +//--------------------------------------------------------------------- +// Set the center area that will not be affected by the color bands +//--------------------------------------------------------------------- +$odo->SetCenterAreaWidth(0.4); // Fraction of radius + +//--------------------------------------------------------------------- +// Adjust scale ticks to be shown at 10 steps interval and scale +// labels at every second tick +//--------------------------------------------------------------------- +$odo->scale->SetTicks(10,2); + +//--------------------------------------------------------------------- +// Make the tick marks 2 pixel wide +//--------------------------------------------------------------------- +$odo->scale->SetTickWeight(2); + +//--------------------------------------------------------------------- +// Use a bold font for tick labels +//--------------------------------------------------------------------- +$odo->scale->label->SetFont(FF_FONT1, FS_BOLD); + +//--------------------------------------------------------------------- +// Set display value for the odometer +//--------------------------------------------------------------------- +$odo->needle->Set(78); + +//--------------------------------------------------------------------- +// Specify scale caption. Note that depending on the position of the +// indicator needle this label might be partially hidden. +//--------------------------------------------------------------------- +$odo->label->Set("% Passed"); + +//--------------------------------------------------------------------- +// Set a new style for the needle +//--------------------------------------------------------------------- +$odo->needle->SetStyle(NEEDLE_STYLE_MEDIUM_TRIANGLE); +$odo->needle->SetLength(0.7); // Length as 70% of the radius +$odo->needle->SetFillColor("orange"); + +//--------------------------------------------------------------------- +// Setup the second indicator needle +//--------------------------------------------------------------------- +$odo->needle2->Set(24); +$odo->needle2->SetStyle(NEEDLE_STYLE_SMALL_TRIANGLE); +$odo->needle2->SetLength(0.55); // Length as 70% of the radius +$odo->needle2->SetFillColor("lightgray"); +$odo->needle2->Show(); + + +//--------------------------------------------------------------------- +// Add the odometer to the graph +//--------------------------------------------------------------------- +$graph->Add($odo); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odoex06.php b/Societes/ric/jpgraph/Examples/odoex06.php new file mode 100755 index 00000000..305a5eea --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex06.php @@ -0,0 +1,122 @@ +SetColor("lightyellow"); + +//--------------------------------------------------------------------- +// Specify title and subtitle using default fonts +// * Note each title may be multilines by using a '\n' as a line +// divider. +//--------------------------------------------------------------------- +$graph->title->Set("Odometer title"); +$graph->title->SetColor("white"); +$graph->subtitle->Set("2002-02-13"); +$graph->subtitle->SetColor("white"); + +//--------------------------------------------------------------------- +// Specify caption. +// * (This is the text at the bottom of the graph.) The margins will +// automatically adjust to fit the height of the text. A caption +// may have multiple lines by including a '\n' character in the +// string. +//--------------------------------------------------------------------- +$graph->caption->Set("First caption row\n... second row"); +$graph->caption->SetColor("white"); + +//--------------------------------------------------------------------- +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +//--------------------------------------------------------------------- +$odo = new Odometer(ODO_FULL); + +//--------------------------------------------------------------------- +// Set color indication +//--------------------------------------------------------------------- +$odo->AddIndication(0,50,"green"); +$odo->AddIndication(50,80,"yellow"); +$odo->AddIndication(80,100,"red"); + +//--------------------------------------------------------------------- +// Set the center area that will not be affected by the color bands +//--------------------------------------------------------------------- +$odo->SetCenterAreaWidth(0.4); // Fraction of radius + +//--------------------------------------------------------------------- +// Adjust scale ticks to be shown at 10 steps interval and scale +// labels at every second tick +//--------------------------------------------------------------------- +$odo->scale->SetTicks(10,2); + +//--------------------------------------------------------------------- +// Make the tick marks 2 pixel wide +//--------------------------------------------------------------------- +$odo->scale->SetTickWeight(2); + +//--------------------------------------------------------------------- +// Use a bold font for tick labels +//--------------------------------------------------------------------- +$odo->scale->label->SetFont(FF_FONT1, FS_BOLD); + +//--------------------------------------------------------------------- +// Set display value for the odometer +//--------------------------------------------------------------------- +$odo->needle->Set(78); + +//--------------------------------------------------------------------- +// Specify scale caption. Note that depending on the position of the +// indicator needle this label might be partially hidden. +//--------------------------------------------------------------------- +$odo->label->Set("% Passed"); + +//--------------------------------------------------------------------- +// Set a new style for the needle +//--------------------------------------------------------------------- +$odo->needle->SetStyle(NEEDLE_STYLE_MEDIUM_TRIANGLE); +$odo->needle->SetLength(0.7); // Length as 70% of the radius +$odo->needle->SetFillColor("orange"); + +//--------------------------------------------------------------------- +// Setup the second indicator needle +//--------------------------------------------------------------------- +$odo->needle2->Set(24); +$odo->needle2->SetStyle(NEEDLE_STYLE_SMALL_TRIANGLE); +$odo->needle2->SetLength(0.55); // Length as 70% of the radius +$odo->needle2->SetFillColor("lightgray"); +$odo->needle2->Show(); + + +//--------------------------------------------------------------------- +// Add the odometer to the graph +//--------------------------------------------------------------------- +$graph->Add($odo); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odoex07.php b/Societes/ric/jpgraph/Examples/odoex07.php new file mode 100755 index 00000000..eb86ba3c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex07.php @@ -0,0 +1,126 @@ +SetColor("lightyellow"); + +//--------------------------------------------------------------------- +// Specify title and subtitle using default fonts +// * Note each title may be multilines by using a '\n' as a line +// divider. +//--------------------------------------------------------------------- +$graph->title->Set("Odometer title"); +$graph->title->SetColor("white"); +$graph->subtitle->Set("2002-02-13"); +$graph->subtitle->SetColor("white"); + +//--------------------------------------------------------------------- +// Specify caption. +// * (This is the text at the bottom of the graph.) The margins will +// automatically adjust to fit the height of the text. A caption +// may have multiple lines by including a '\n' character in the +// string. +//--------------------------------------------------------------------- +$graph->caption->Set("First caption row\n... second row"); +$graph->caption->SetColor("white"); + +//--------------------------------------------------------------------- +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +//--------------------------------------------------------------------- +$odo = new Odometer(ODO_FULL); + +//--------------------------------------------------------------------- +// Set color indication +//--------------------------------------------------------------------- +$odo->AddIndication(0,50,"green"); +$odo->AddIndication(50,80,"yellow"); +$odo->AddIndication(80,100,"red"); + +//--------------------------------------------------------------------- +// Set the center area that will not be affected by the color bands +//--------------------------------------------------------------------- +$odo->SetCenterAreaWidth(0.4); // Fraction of radius + +//--------------------------------------------------------------------- +// Adjust scale ticks to be shown at 10 steps interval and scale +// labels at every second tick +//--------------------------------------------------------------------- +$odo->scale->SetTicks(10,2); + +//--------------------------------------------------------------------- +// Make the tick marks 2 pixel wide +//--------------------------------------------------------------------- +$odo->scale->SetTickWeight(2); + +//--------------------------------------------------------------------- +// Use a bold font for tick labels +//--------------------------------------------------------------------- +$odo->scale->label->SetFont(FF_FONT1, FS_BOLD); + +//--------------------------------------------------------------------- +// Change the start and end angle for the scale +//--------------------------------------------------------------------- +$odo->scale->SetAngle(20,340); + +//--------------------------------------------------------------------- +// Set display value for the odometer +//--------------------------------------------------------------------- +$odo->needle->Set(64); + +//--------------------------------------------------------------------- +// Specify scale caption. Note that depending on the position of the +// indicator needle this label might be partially hidden. +//--------------------------------------------------------------------- +$odo->label->Set("% Passed"); + +//--------------------------------------------------------------------- +// Set a new style for the needle +//--------------------------------------------------------------------- +$odo->needle->SetStyle(NEEDLE_STYLE_MEDIUM_TRIANGLE); +$odo->needle->SetLength(0.7); // Length as 70% of the radius +$odo->needle->SetFillColor("orange"); + +//--------------------------------------------------------------------- +// Setup the second indicator needle +//--------------------------------------------------------------------- +$odo->needle2->Set(15); +$odo->needle2->SetStyle(NEEDLE_STYLE_SMALL_TRIANGLE); +$odo->needle2->SetLength(0.55); // Length as 70% of the radius +$odo->needle2->SetFillColor("lightgray"); +$odo->needle2->Show(); + + +//--------------------------------------------------------------------- +// Add the odometer to the graph +//--------------------------------------------------------------------- +$graph->Add($odo); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odoex08.php b/Societes/ric/jpgraph/Examples/odoex08.php new file mode 100755 index 00000000..39f12e7a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex08.php @@ -0,0 +1,150 @@ +SetShadow(); + +//--------------------------------------------------------------------- +// Change the color of the odometer plotcanvas. NOT the odometer +// fill color itself. +//--------------------------------------------------------------------- +$graph->SetColor("lightyellow"); + +//--------------------------------------------------------------------- +// Change the color of the margin in the graph +//--------------------------------------------------------------------- +$graph->SetMarginColor("khaki:0.6"); + +//--------------------------------------------------------------------- +// Specify title and subtitle using default fonts +// * Note each title may be multilines by using a '\n' as a line +// divider. +//--------------------------------------------------------------------- +$graph->title->Set("Odometer title"); +$graph->title->SetColor("white"); +$graph->subtitle->Set("2002-02-13"); +$graph->subtitle->SetColor("white"); + +//--------------------------------------------------------------------- +// Specify caption. +// * (This is the text at the bottom of the graph.) The margins will +// automatically adjust to fit the height of the text. A caption +// may have multiple lines by including a '\n' character in the +// string. +//--------------------------------------------------------------------- +$graph->caption->Set("First caption row\n... second row"); +$graph->caption->SetColor("white"); + +//--------------------------------------------------------------------- +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +//--------------------------------------------------------------------- +$odo = new Odometer(ODO_FULL); + +//--------------------------------------------------------------------- +// Set fill color for odometer +//--------------------------------------------------------------------- +$odo->SetColor("lightblue"); + +//--------------------------------------------------------------------- +// Set color indication +//--------------------------------------------------------------------- +$odo->AddIndication(0,50,"green"); +$odo->AddIndication(50,80,"yellow"); +$odo->AddIndication(80,100,"red"); + +//--------------------------------------------------------------------- +// Set the center area that will not be affected by the color bands +//--------------------------------------------------------------------- +$odo->SetCenterAreaWidth(0.4); // Fraction of radius + +//--------------------------------------------------------------------- +// Adjust scale ticks to be shown at 10 steps interval and scale +// labels at every second tick +//--------------------------------------------------------------------- +$odo->scale->SetTicks(10,2); + +//--------------------------------------------------------------------- +// Make the tick marks 2 pixel wide +//--------------------------------------------------------------------- +$odo->scale->SetTickWeight(2); + +//--------------------------------------------------------------------- +// Use a bold font for tick labels +//--------------------------------------------------------------------- +$odo->scale->label->SetFont(FF_FONT1, FS_BOLD); + +//--------------------------------------------------------------------- +// Change the start and end angle for the scale +//--------------------------------------------------------------------- +$odo->scale->SetAngle(20,340); + +//--------------------------------------------------------------------- +// Set display value for the odometer +//--------------------------------------------------------------------- +$odo->needle->Set(64); + +//--------------------------------------------------------------------- +// Specify scale caption. Note that depending on the position of the +// indicator needle this label might be partially hidden. +//--------------------------------------------------------------------- +$odo->label->Set("% Passed"); + +//--------------------------------------------------------------------- +// Set a new style for the needle +//--------------------------------------------------------------------- +$odo->needle->SetStyle(NEEDLE_STYLE_MEDIUM_TRIANGLE); +$odo->needle->SetLength(0.7); // Length as 70% of the radius +$odo->needle->SetFillColor("orange"); + +//--------------------------------------------------------------------- +// Setup the second indicator needle +//--------------------------------------------------------------------- +$odo->needle2->Set(15); +$odo->needle2->SetStyle(NEEDLE_STYLE_SMALL_TRIANGLE); +$odo->needle2->SetLength(0.55); // Length as 70% of the radius +$odo->needle2->SetFillColor("lightgray"); + +// Only the first needle is shown by default +$odo->needle2->Show(); + +//--------------------------------------------------------------------- +// Add a drop shadow to the indicator needles +//--------------------------------------------------------------------- +$odo->needle->SetShadow(); +$odo->needle2->SetShadow(); + +//--------------------------------------------------------------------- +// Add the odometer to the graph +//--------------------------------------------------------------------- +$graph->Add($odo); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odoex09.php b/Societes/ric/jpgraph/Examples/odoex09.php new file mode 100755 index 00000000..9fc9affe --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odoex09.php @@ -0,0 +1,49 @@ +needle->Set(17); +$odo2->needle->Set(47); +$odo3->needle->Set(86); + +//--------------------------------------------------------------------- +// Add the odometers to the graph using a vertical layout +//--------------------------------------------------------------------- +$l1 = new LayoutVert( array($odo1,$odo2,$odo3) ) ; +$graph->Add( $l1 ); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex00.php b/Societes/ric/jpgraph/Examples/odotutex00.php new file mode 100755 index 00000000..4344292d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex00.php @@ -0,0 +1,21 @@ +needle->Set(30); + +// Add the odometer to the graph +$graph->Add($odo); + +// ... and finally stroke and stream the image back to the client +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/odotutex01.php b/Societes/ric/jpgraph/Examples/odotutex01.php new file mode 100755 index 00000000..ec970cd4 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex01.php @@ -0,0 +1,21 @@ +needle->Set(30); + +// Add the odometer to the graph +$graph->Add($odo); + +// ... and finally stroke and stream the image back to the client +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/odotutex02.php b/Societes/ric/jpgraph/Examples/odotutex02.php new file mode 100755 index 00000000..a007c1b1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex02.php @@ -0,0 +1,30 @@ +title->Set("Result for 2002"); +$graph->title->SetColor("white"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->subtitle->Set("New York Office"); +$graph->subtitle->SetColor("white"); +$graph->caption->Set("Figure 1. Branch results."); +$graph->caption->SetColor("white"); + +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +$odo = new Odometer(); + +// Set display value for the odometer +$odo->needle->Set(30); + +// Add the odometer to the graph +$graph->Add($odo); + +// ... and finally stroke and stream the image back to the client +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/odotutex03.php b/Societes/ric/jpgraph/Examples/odotutex03.php new file mode 100755 index 00000000..3c0e907c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex03.php @@ -0,0 +1,30 @@ +title->Set("Result for 2002"); +$graph->title->SetColor("white"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->subtitle->Set("New York Office"); +$graph->subtitle->SetColor("white"); +$graph->caption->Set("Figure 1.This is a very, very\nlong text with multiples lines\nthat are added as a caption."); +$graph->caption->SetColor("white"); + +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +$odo = new Odometer(); + +// Set display value for the odometer +$odo->needle->Set(30); + +// Add the odometer to the graph +$graph->Add($odo); + +// ... and finally stroke and stream the image back to the client +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/odotutex04.php b/Societes/ric/jpgraph/Examples/odotutex04.php new file mode 100755 index 00000000..60c57fc7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex04.php @@ -0,0 +1,40 @@ +title->Set("Result for 2002"); +$graph->title->SetColor("white"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->subtitle->Set("New York Office"); +$graph->subtitle->SetColor("white"); +$graph->caption->Set("Figure 1.This is a very, very\nlong text with multiples lines\nthat are added as a caption."); +$graph->caption->SetColor("white"); + +// Setup colors +// Make the border 40% darker than normal "khaki" +$graph->SetMarginColor("khaki:0.6"); +$graph->SetColor("khaki"); + +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +$odo = new Odometer(); + +// Setup colors for odometyer plot +$odo->SetColor('white'); +$odo->scale->label->SetColor("darkred"); +$odo->needle->SetFillColor("yellow"); + +// Set display value for the odometer +$odo->needle->Set(30); + +// Add the odometer to the graph +$graph->Add($odo); + +// ... and finally stroke and stream the image back to the client +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/odotutex06.php b/Societes/ric/jpgraph/Examples/odotutex06.php new file mode 100755 index 00000000..4161e5fa --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex06.php @@ -0,0 +1,43 @@ +SetColor("lightyellow"); + $odo[$i]->needle->Set(80); + $odo[$i]->needle->SetStyle($nstyle[$i]); + $odo[$i]->caption->Set($captions[$i]); + $odo[$i]->caption->SetFont(FF_FONT1); + $odo[$i]->caption->SetMargin(3); +} + +// Use the automatic layout engine to positon the plots on the graph +$row1 = new LayoutHor( array($odo[0],$odo[1],$odo[2]) ); +$row2 = new LayoutHor( array($odo[3],$odo[4],$odo[5]) ); +$col1 = new LayoutVert( array($row1,$row2) ); + +// Add the odometer to the graph +$graph->Add($col1); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex07.php b/Societes/ric/jpgraph/Examples/odotutex07.php new file mode 100755 index 00000000..a1ba22bb --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex07.php @@ -0,0 +1,37 @@ +SetColor("lightyellow"); + $odo[$i]->needle->Set(75); + $odo[$i]->needle->SetStyle(NEEDLE_STYLE_ENDARROW, $astyles[$i]); + $odo[$i]->caption->SetFont(FF_FONT1,FS_BOLD); + $odo[$i]->caption->Set('Arrow: '.$acaptions[$i]); +} + +$row1 = new LayoutHor( array($odo[0],$odo[1],$odo[2]) ); +$row2 = new LayoutHor( array($odo[3],$odo[4],$odo[5]) ); +$row3 = new LayoutHor( array($odo[6],$odo[7],$odo[8]) ); +$col1 = new LayoutVert( array($row1,$row2,$row3) ); + +// Add the odometer to the graph +$graph->Add($col1); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex08.1.php b/Societes/ric/jpgraph/Examples/odotutex08.1.php new file mode 100755 index 00000000..676ac4c8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex08.1.php @@ -0,0 +1,41 @@ +title->Set('An example with thick border'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,11); + +// Add drop shadow for graph +$graph->SetShadow(); + +// Set some nonstandard colors +$color = array(205,220,205); +$graph->SetMarginColor($color); +$graph->SetColor($color); + +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +$odo = new Odometer(); +$odo->SetColor('white'); +$odo->SetBorder('darkgreen:0.8',5); + +$odo->scale->label->SetFont(FF_ARIAL,FS_BOLD,10); +$odo->scale->label->SetColor('brown:0.6'); + +// Set display value for the odometer +$odo->needle->Set(70); + +// Add drop shadow for needle +$odo->needle->SetShadow(); + +// Add the odometer to the graph +$graph->Add($odo); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex08.php b/Societes/ric/jpgraph/Examples/odotutex08.php new file mode 100755 index 00000000..8132e732 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex08.php @@ -0,0 +1,36 @@ +title->Set('An example with drop shadows'); + +// Add drop shadow for graph +$graph->SetShadow(); + +// Set some nonstandard colors +$color = array(205,220,205); +$graph->SetMarginColor($color); +$graph->SetColor($color); + +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +$odo = new Odometer(); +$odo->SetColor('white'); + +// Set display value for the odometer +$odo->needle->Set(70); + +// Add drop shadow for needle +$odo->needle->SetShadow(); + +// Add the odometer to the graph +$graph->Add($odo); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex09.php b/Societes/ric/jpgraph/Examples/odotutex09.php new file mode 100755 index 00000000..82a2c4b3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex09.php @@ -0,0 +1,38 @@ +SetColor("lightyellow"); + $odo[$i]->needle->Set(75); + $odo[$i]->needle->SetStyle(NEEDLE_STYLE_ENDARROW, $astyles[$i]); + $odo[$i]->caption->SetFont(FF_FONT1); + $odo[$i]->caption->Set($acaptions[$i]); + $odo[$i]->SetMargin(15); +} + +$row1 = new LayoutHor( array($odo[0],$odo[1],$odo[2]) ); +$row2 = new LayoutHor( array($odo[3],$odo[4],$odo[5]) ); +$row3 = new LayoutHor( array($odo[6],$odo[7],$odo[8]) ); +$col1 = new LayoutVert( array($row1,$row2,$row3) ); + +// Add the odometer to the graph +$graph->Add($col1); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex10.php b/Societes/ric/jpgraph/Examples/odotutex10.php new file mode 100755 index 00000000..f44fc5e0 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex10.php @@ -0,0 +1,43 @@ +title->Set('Example with scale indicators'); + +// Add drop shadow for graph +$graph->SetShadow(); + +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +$odo = new Odometer(ODO_HALF); + +// Add color indications +$odo->AddIndication(0,20,"green:0.7"); +$odo->AddIndication(20,30,"green:0.9"); +$odo->AddIndication(30,60,"yellow"); +$odo->AddIndication(60,80,"orange"); +$odo->AddIndication(80,100,"red"); + +// Set display value for the odometer +$odo->needle->Set(90); + +//--------------------------------------------------------------------- +// Add drop shadow for needle +//--------------------------------------------------------------------- +$odo->needle->SetShadow(); + +//--------------------------------------------------------------------- +// Add the odometer to the graph +//--------------------------------------------------------------------- +$graph->Add($odo); + +//--------------------------------------------------------------------- +// ... and finally stroke and stream the image back to the browser +//--------------------------------------------------------------------- +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex11.php b/Societes/ric/jpgraph/Examples/odotutex11.php new file mode 100755 index 00000000..f1290f7d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex11.php @@ -0,0 +1,40 @@ +title->Set('Example with scale indicators'); + +// Add drop shadow for graph +$graph->SetShadow(); + +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +$odo = new Odometer(ODO_HALF); + +// Add color indications +$odo->AddIndication(0,20,"green:0.7"); +$odo->AddIndication(20,30,"green:0.9"); +$odo->AddIndication(30,60,"yellow"); +$odo->AddIndication(60,80,"orange"); +$odo->AddIndication(80,100,"red"); + +// Set display value for the odometer +$odo->needle->Set(90); + +// Set the size of the non-colored base area to 40% of the radius +$odo->SetCenterAreaWidth(0.45); + +// Add drop shadow for needle +$odo->needle->SetShadow(); + +// Add the odometer to the graph +$graph->Add($odo); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex12.php b/Societes/ric/jpgraph/Examples/odotutex12.php new file mode 100755 index 00000000..5d030a8e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex12.php @@ -0,0 +1,47 @@ +title->Set('Example with scale indicators'); + +// Add drop shadow for graph +$graph->SetShadow(); + +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +$odo = new Odometer(ODO_HALF); + +// Add color indications +$odo->AddIndication(0,20,"green:0.7"); +$odo->AddIndication(20,30,"green:0.9"); +$odo->AddIndication(30,60,"yellow"); +$odo->AddIndication(60,80,"orange"); +$odo->AddIndication(80,100,"red"); + +// Set display value for the odometer +$odo->needle->Set(90); + +// Set the size of the non-colored base area to 40% of the radius +$odo->SetCenterAreaWidth(0.45); + +// Add drop shadow for needle +$odo->needle->SetShadow(); + +// Setup the second needle +$odo->needle2->Set(44); +$odo->needle2->Show(); +$odo->needle2->SetLength(0.4); +$odo->needle2->SetFillColor("navy"); +$odo->needle2->SetShadow(); + +// Add the odometer to the graph +$graph->Add($odo); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex13.php b/Societes/ric/jpgraph/Examples/odotutex13.php new file mode 100755 index 00000000..5c49a117 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex13.php @@ -0,0 +1,41 @@ +title->Set('Example with scale indicators'); + +// Add drop shadow for graph +$graph->SetShadow(); + +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +$odo = new Odometer(ODO_HALF); + +// Add color indications +$odo->AddIndication(0,20,"green:0.7"); +$odo->AddIndication(20,30,"green:0.9"); +$odo->AddIndication(30,60,"yellow"); +$odo->AddIndication(60,80,"orange"); +$odo->AddIndication(80,100,"red"); + +$odo->SetCenterAreaWidth(0.45); + +// Set display value for the odometer +$odo->needle->Set(90); + +// Add scale labels +$odo->label->Set("mBar"); +$odo->label->SetFont(FF_FONT2,FS_BOLD); + +// Add drop shadow for needle +$odo->needle->SetShadow(); + +// Add the odometer to the graph +$graph->Add($odo); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex14.php b/Societes/ric/jpgraph/Examples/odotutex14.php new file mode 100755 index 00000000..19e8f71b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex14.php @@ -0,0 +1,35 @@ +title->Set('Custom scale'); +$graph->title->SetColor('white'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD); + +// Add drop shadow for graph +$graph->SetShadow(); + +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +$odo = new Odometer(); +$odo->SetColor('lightyellow'); + +// Setup the scale +$odo->scale->Set(100,600); +$odo->scale->SetTicks(50,2); + +// Set display value for the odometer +$odo->needle->Set(280); + +// Add drop shadow for needle +$odo->needle->SetShadow(); + +// Add the odometer to the graph +$graph->Add($odo); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex15.php b/Societes/ric/jpgraph/Examples/odotutex15.php new file mode 100755 index 00000000..fece535e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex15.php @@ -0,0 +1,46 @@ +title->Set('Custom formatting'); +$graph->title->SetColor('white'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD); + +// Add drop shadow for graph +$graph->SetShadow(); + +// Now we need to create an odometer to add to the graph. +$odo = new Odometer(); +$odo->SetColor("lightgray:1.9"); + +// Setup the scale +$odo->scale->Set(100,600); +$odo->scale->SetTicks(50,2); +$odo->scale->SetTickColor('brown'); +$odo->scale->SetTickLength(0.05); +$odo->scale->SetTickWeight(2); + +$odo->scale->SetLabelPos(0.75); +$odo->scale->label->SetFont(FF_FONT1, FS_BOLD); +$odo->scale->label->SetColor('brown'); +$odo->scale->label->SetFont(FF_ARIAL,FS_NORMAL,10); + +// Setup a label with a degree mark +$odo->scale->SetLabelFormat('%dC'.SymChar::Get('degree')); + +// Set display value for the odometer +$odo->needle->Set(280); + +// Add drop shadow for needle +$odo->needle->SetShadow(); + +// Add the odometer to the graph +$graph->Add($odo); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex16.1.php b/Societes/ric/jpgraph/Examples/odotutex16.1.php new file mode 100755 index 00000000..c370618f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex16.1.php @@ -0,0 +1,42 @@ +SetShadow(); + +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +$odo1 = new Odometer(); +$odo2 = new Odometer(); +$odo1->SetColor("lightgray:1.9"); +$odo2->SetColor("lightgray:1.9"); + +// Adjust start and end angle for the scale +$odo2->scale->SetAngle(110,250); + +$odo1->scale->label->SetFont(FF_ARIAL,FS_BOLD,10); +$odo2->scale->label->SetFont(FF_ARIAL,FS_BOLD,10); +$odo2->AddIndication(-15,0,'lightgray'); +$odo2->AddIndication(100,115,'lightgray'); + +// Set display value for the odometer +$odo1->needle->Set(70); +$odo2->needle->Set(70); + +// Add drop shadow for needle +$odo1->needle->SetShadow(); +$odo2->needle->SetShadow(); + +// Specify the layout for the two odometers +$row = new LayoutHor( array($odo1,$odo2) ); + +// Add the odometer to the graph +$graph->Add($row); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex16.php b/Societes/ric/jpgraph/Examples/odotutex16.php new file mode 100755 index 00000000..16619f3c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex16.php @@ -0,0 +1,40 @@ +SetShadow(); + +// Now we need to create an odometer to add to the graph. +// By default the scale will be 0 to 100 +$odo1 = new Odometer(); +$odo2 = new Odometer(); +$odo1->SetColor("lightgray:1.9"); +$odo2->SetColor("lightgray:1.9"); + +// Adjust start and end angle for the scale +$odo2->scale->SetAngle(110,250); + +$odo1->scale->label->SetFont(FF_ARIAL,FS_BOLD,10); +$odo2->scale->label->SetFont(FF_ARIAL,FS_BOLD,10); + +// Set display value for the odometer +$odo1->needle->Set(70); +$odo2->needle->Set(70); + +// Add drop shadow for needle +$odo1->needle->SetShadow(); +$odo2->needle->SetShadow(); + +// Specify the layout for the two odometers +$row = new LayoutHor( array($odo1,$odo2) ); + +// Add the odometer to the graph +$graph->Add($row); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex17.php b/Societes/ric/jpgraph/Examples/odotutex17.php new file mode 100755 index 00000000..6a9abf8d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex17.php @@ -0,0 +1,46 @@ +title->Set('Manual positioning'); +$graph->title->SetColor('white'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +// Add drop shadow for graph +$graph->SetShadow(); + +// Now we need to create an odometer to add to the graph. +$odo1 = new Odometer(); +$odo2 = new Odometer(); +$odo1->SetColor('lightgray:1.9'); +$odo2->SetColor('lightgray:1.9'); + +// Set display value for the odometer +$odo1->needle->Set(37); +$odo2->needle->Set(73); + +// Add drop shadow for needle +$odo1->needle->SetShadow(); +$odo2->needle->SetShadow(); + +// Specify the position for the two odometers +$odo1->SetPos(180,110); +$odo1->SetSize(100); +$odo2->SetPos(110,250); +$odo2->SetSize(100); + +// Set captions for the odometers +$odo1->caption->Set("(x,y) = (180,120)\nradius=100"); +$odo2->caption->Set("(x,y) = (110,270)\nradius=100"); + +// Add the odometer to the graph +$graph->Add($odo1); +$graph->Add($odo2); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex18.php b/Societes/ric/jpgraph/Examples/odotutex18.php new file mode 100755 index 00000000..44bd4913 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex18.php @@ -0,0 +1,37 @@ +SetColor('lightgray:1.9'); + $odo[$i]->needle->Set(10+$i*17); + $odo[$i]->needle->SetShadow(); + if( $i < 2 ) + $fsize = 10; + else + $fsize = 8; + $odo[$i]->scale->label->SetFont(FF_ARIAL,FS_NORMAL,$fsize); + $odo[$i]->AddIndication(92,100,'red'); + $odo[$i]->AddIndication(80,92,'orange'); + $odo[$i]->AddIndication(60,80,'yellow'); +} + +// Create the layout +$row1 = new LayoutHor( array($odo[0],$odo[1]) ); +$row2 = new LayoutHor( array($odo[2],$odo[3],$odo[4]) ); +$col1 = new LayoutVert( array($row1,$row2) ); + +// Add the odometer to the graph +$graph->Add($col1); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/odotutex19.php b/Societes/ric/jpgraph/Examples/odotutex19.php new file mode 100755 index 00000000..02324b06 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/odotutex19.php @@ -0,0 +1,49 @@ +SetColor('lightgray:1.9'); + $odo[$i]->needle->Set(10+$i*17); + $odo[$i]->needle->SetShadow(); + if( $i < 2 ) + $fsize = 10; + else + $fsize = 8; + $odo[$i]->scale->label->SetFont(FF_ARIAL,FS_NORMAL,$fsize); + $odo[$i]->AddIndication(92,100,'red'); + $odo[$i]->AddIndication(80,92,'orange'); + $odo[$i]->AddIndication(60,80,'yellow'); +} + +// Create the layout +$row1 = new LayoutHor( array($odo[0],$odo[1]) ); +$row2 = new LayoutHor( array($odo[2],$odo[3],$odo[4]) ); +$col1 = new LayoutVert( array($row1,$row2) ); + +// Add the odometer to the graph +$graph->Add($col1); + +// Add an icon and text +$icon = new IconPlot('jpglogo.jpg',250,10,0.85,30); +$icon->SetAnchor('center','top'); +$graph->Add($icon); + +$t = new Text('JpGraph',250,70); +$t->SetAlign('center','top'); +#$t->SetFont(FF_VERA,FS_BOLD,11); +$t->SetColor('darkgray'); +$graph->Add($t); + +// ... and finally stroke and stream the image back to the browser +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/orange_example.php b/Societes/ric/jpgraph/Examples/orange_example.php new file mode 100755 index 00000000..adab98dc --- /dev/null +++ b/Societes/ric/jpgraph/Examples/orange_example.php @@ -0,0 +1,58 @@ + array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ), + 1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ), + 2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ), + 3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ), + 4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ), + 5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ), + 6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ), + 7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ), + 8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ), +); + + +// Create the graph. These two calls are always required +$graph = new Graph(400,300); + +$graph->SetScale("textlin"); +if ($theme) { + $graph->SetTheme(new $theme()); +} +$theme_class = new OrangeTheme; +$graph->SetTheme($theme_class); + +$plot = array(); +// Create the bar plots +for ($i = 0; $i < 4; $i++) { + $plot[$i] = new BarPlot($data[$i]); + $plot[$i]->SetLegend('plot'.($i+1)); +} +//$acc1 = new AccBarPlot(array($plot[0], $plot[1])); +//$acc1->value->Show(); +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] )); + +for ($i = 4; $i < 8; $i++) { + $plot[$i] = new LinePlot($data[$i]); + $plot[$i]->SetLegend('plot'.$i); + $plot[$i]->value->Show(); +} + +$graph->Add($gbplot); +$graph->Add($plot[4]); + +$title = "OrangeTheme Example"; +$title = mb_convert_encoding($title,'UTF-8'); +$graph->title->Set($title); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/partiallyfilledlineex1.php b/Societes/ric/jpgraph/Examples/partiallyfilledlineex1.php new file mode 100755 index 00000000..1e1cec13 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/partiallyfilledlineex1.php @@ -0,0 +1,45 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetShadow(true); +$graph->SetMarginColor("lightblue"); + +// Setup format for legend +$graph->legend->SetFillColor("antiquewhite"); +$graph->legend->SetShadow(true); + +// Setup title +$graph->title->Set("Filled Area Example"); +$graph->title->SetFont(FF_FONT2,FS_BOLD); + +// Setup semi-filled line plot +$lineplot = new LinePlot($ydata); +$lineplot->SetLegend("Semi-filled\nLineplot"); + +// Set line color +$lineplot->SetColor("black"); + +// Setup the two areas to be filled +$lineplot->AddArea(2,5,LP_AREA_FILLED,"red"); +$lineplot->AddArea(6,8,LP_AREA_FILLED,"green"); + +// Display the marks on the lines +$lineplot->mark->SetType(MARK_DIAMOND); +$lineplot->mark->SetSize(8); +$lineplot->mark->Show(); + +// add plot to the graph +$graph->Add($lineplot); + +// display graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/pastel_example.php b/Societes/ric/jpgraph/Examples/pastel_example.php new file mode 100755 index 00000000..82aeeb4c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pastel_example.php @@ -0,0 +1,57 @@ + array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ), + 1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ), + 2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ), + 3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ), + 4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ), + 5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ), + 6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ), + 7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ), + 8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ), +); + + +// Create the graph. These two calls are always required +$graph = new Graph(400,300); + +$graph->SetScale("textlin"); +if ($theme) { + $graph->SetTheme(new $theme()); +} +$theme_class = new PastelTheme; +$graph->SetTheme($theme_class); + +$plot = array(); +// Create the bar plots +for ($i = 0; $i < 4; $i++) { + $plot[$i] = new BarPlot($data[$i]); + $plot[$i]->SetLegend('plot'.($i+1)); +} +//$acc1 = new AccBarPlot(array($plot[0], $plot[1])); +//$acc1->value->Show(); +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] )); + +for ($i = 4; $i < 8; $i++) { + $plot[$i] = new LinePlot($data[$i]); + $plot[$i]->SetLegend('plot'.$i); + $plot[$i]->value->Show(); +} + +$graph->Add($gbplot); +$graph->Add($plot[4]); + +$title = "PastelTheme Example"; +$title = mb_convert_encoding($title,'UTF-8'); +$graph->title->Set($title); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/pdf417_ex0.php b/Societes/ric/jpgraph/Examples/pdf417_ex0.php new file mode 100755 index 00000000..fb197f5b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pdf417_ex0.php @@ -0,0 +1,8 @@ +Stroke($data); +?> diff --git a/Societes/ric/jpgraph/Examples/pdf417_ex1.php b/Societes/ric/jpgraph/Examples/pdf417_ex1.php new file mode 100755 index 00000000..84dd2726 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pdf417_ex1.php @@ -0,0 +1,13 @@ +Stroke($data); +} +catch(JpGraphException $e) { + echo 'PDF417 Error: '.$e->GetMessage(); +} +?> diff --git a/Societes/ric/jpgraph/Examples/pdf417_ex1b.php b/Societes/ric/jpgraph/Examples/pdf417_ex1b.php new file mode 100755 index 00000000..fad0a9e0 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pdf417_ex1b.php @@ -0,0 +1,20 @@ +Stroke($data); +} +catch(JpGraphException $e) { + echo 'PDF417 Error: '.$e->GetMessage(); +} +?> diff --git a/Societes/ric/jpgraph/Examples/pdf417_ex1c.php b/Societes/ric/jpgraph/Examples/pdf417_ex1c.php new file mode 100755 index 00000000..96a74870 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pdf417_ex1c.php @@ -0,0 +1,23 @@ +ShowText(true); + $backend->SetModuleWidth($modwidth); + $backend->Stroke($data); +} +catch(JpGraphException $e) { + echo 'PDF417 Error: '.$e->GetMessage(); +} +?> diff --git a/Societes/ric/jpgraph/Examples/pdf417_ex2.php b/Societes/ric/jpgraph/Examples/pdf417_ex2.php new file mode 100755 index 00000000..685b0c29 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pdf417_ex2.php @@ -0,0 +1,24 @@ +SetModuleWidth($modwidth); + $backend->SetHeight($height); + $backend->Stroke($data); +} +catch(JpGraphException $e) { + echo 'PDF417 Error: '.$e->GetMessage(); +} +?> diff --git a/Societes/ric/jpgraph/Examples/pdf417_ex3.php b/Societes/ric/jpgraph/Examples/pdf417_ex3.php new file mode 100755 index 00000000..ec2c7b6f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pdf417_ex3.php @@ -0,0 +1,26 @@ +SetModuleWidth($modwidth); + $backend->SetHeight($height); + $backend->NoText(!$showtext); + $backend->Stroke($data); +} +catch(JpGraphException $e) { + echo 'PDF417 Error: '.$e->GetMessage(); +} +?> diff --git a/Societes/ric/jpgraph/Examples/pdf417_ex4.php b/Societes/ric/jpgraph/Examples/pdf417_ex4.php new file mode 100755 index 00000000..5fb8e6e7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pdf417_ex4.php @@ -0,0 +1,28 @@ +SetModuleWidth($modwidth); + $backend->SetHeight($height); + $backend->NoText(!$showtext); + $backend->SetColor('black','yellow'); + $backend->Stroke($data); +} +catch(JpGraphException $e) { + echo 'PDF417 Error: '.$e->GetMessage(); +} +?> diff --git a/Societes/ric/jpgraph/Examples/pdf417_ex5.php b/Societes/ric/jpgraph/Examples/pdf417_ex5.php new file mode 100755 index 00000000..fc525bfe --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pdf417_ex5.php @@ -0,0 +1,29 @@ +SetModuleWidth($modwidth); + $backend->SetHeight($height); + $backend->NoText(!$showtext); + $backend->SetColor('black','yellow'); + $output = $backend->Stroke($data); + echo nl2br(htmlspecialchars($output)); +} +catch(JpGraphException $e) { + echo 'PDF417 Error: '.$e->GetMessage(); +} +?> diff --git a/Societes/ric/jpgraph/Examples/pdf417_ex6.php b/Societes/ric/jpgraph/Examples/pdf417_ex6.php new file mode 100755 index 00000000..9b2e14d6 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pdf417_ex6.php @@ -0,0 +1,35 @@ +SetModuleWidth($modwidth); + $backend->NoText(!$showtext); + $backend->Stroke($data); +} +catch(JpGraphException $e) { + echo 'PDF417 Error: '.$e->GetMessage(); +} +?> diff --git a/Societes/ric/jpgraph/Examples/penguin.png b/Societes/ric/jpgraph/Examples/penguin.png new file mode 100755 index 00000000..2ae426ae Binary files /dev/null and b/Societes/ric/jpgraph/Examples/penguin.png differ diff --git a/Societes/ric/jpgraph/Examples/pie3d_csimex1.php b/Societes/ric/jpgraph/Examples/pie3d_csimex1.php new file mode 100755 index 00000000..564c51f6 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pie3d_csimex1.php @@ -0,0 +1,43 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("3D Pie Client side image map"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create +$p1 = new PiePlot3D($data); +$p1->SetLegends(array("Jan (%d)","Feb","Mar","Apr","May","Jun","Jul")); +$targ=array("pie3d_csimex1.php?v=1","pie3d_csimex1.php?v=2","pie3d_csimex1.php?v=3", + "pie3d_csimex1.php?v=4","pie3d_csimex1.php?v=5","pie3d_csimex1.php?v=6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$p1->SetCSIMTargets($targ,$alts); + +// Use absolute labels +$p1->SetLabelType(1); +$p1->value->SetFormat("%d kr"); + +// Move the pie slightly to the left +$p1->SetCenter(0.4,0.5); + +$graph->Add($p1); + + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/pie3dex1.php b/Societes/ric/jpgraph/Examples/pie3dex1.php new file mode 100755 index 00000000..10e2100f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pie3dex1.php @@ -0,0 +1,32 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Example 1 3D Pie plot"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,18); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + +// Create pie plot +$p1 = new PiePlot3d($data); +$p1->SetTheme("sand"); +$p1->SetCenter(0.4); +$p1->SetAngle(30); +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,12); +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct")); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/pie3dex2.php b/Societes/ric/jpgraph/Examples/pie3dex2.php new file mode 100755 index 00000000..bd2a099b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pie3dex2.php @@ -0,0 +1,45 @@ +SetShadow(); + + +// Set A title for the plot +$graph->title->Set("Example 2 3D Pie plot"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,18); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + +// Create 3D pie plot +$p1 = new PiePlot3d($data); +$p1->SetTheme("sand"); +$p1->SetCenter(0.4); +$p1->SetSize(0.4); +$p1->SetHeight(5); + +// Adjust projection angle +$p1->SetAngle(45); + +// You can explode several slices by specifying the explode +// distance for some slices in an array +$p1->Explode(array(0,40,0,30)); + +// As a shortcut you can easily explode one numbered slice with +// $p1->ExplodeSlice(3); + +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,10); +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct")); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/pie3dex3.php b/Societes/ric/jpgraph/Examples/pie3dex3.php new file mode 100755 index 00000000..b45a2f22 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pie3dex3.php @@ -0,0 +1,42 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Example 3 3D Pie plot"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,18); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + +// Create 3D pie plot +$p1 = new PiePlot3d($data); +$p1->SetTheme("sand"); +$p1->SetCenter(0.4); +$p1->SetSize(80); + +// Adjust projection angle +$p1->SetAngle(45); + +// As a shortcut you can easily explode one numbered slice with +$p1->ExplodeSlice(3); + +// Setup the slice values +$p1->value->SetFont(FF_ARIAL,FS_BOLD,11); +$p1->value->SetColor("navy"); + +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct")); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/pie3dex4.php b/Societes/ric/jpgraph/Examples/pie3dex4.php new file mode 100755 index 00000000..0ce86e4e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pie3dex4.php @@ -0,0 +1,46 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Example 4 3D Pie plot"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,18); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + +// Create 3D pie plot +$p1 = new PiePlot3d($data); +$p1->SetTheme("sand"); +$p1->SetCenter(0.4); +$p1->SetSize(80); + +// Adjust projection angle +$p1->SetAngle(45); + +// Adjsut angle for first slice +$p1->SetStartAngle(45); + +// As a shortcut you can easily explode one numbered slice with +$p1->ExplodeSlice(3); + +// Setup slice values +$p1->value->SetFont(FF_ARIAL,FS_BOLD,11); +$p1->value->SetColor("navy"); + + +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct")); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/pie3dex5.php b/Societes/ric/jpgraph/Examples/pie3dex5.php new file mode 100755 index 00000000..6efe470f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pie3dex5.php @@ -0,0 +1,46 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Example 5 3D Pie plot"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,18); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + +// Create 3D pie plot +$p1 = new PiePlot3d($data); +$p1->SetTheme("sand"); +$p1->SetCenter(0.4); +$p1->SetSize(80); + +// Adjust projection angle +$p1->SetAngle(45); + +// Adjsut angle for first slice +$p1->SetStartAngle(45); + +// Display the slice values +$p1->value->SetFont(FF_ARIAL,FS_BOLD,11); +$p1->value->SetColor("navy"); + +// Add colored edges to the 3D pie +// NOTE: You can't have exploded slices with edges! +$p1->SetEdge("navy"); + +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct")); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/pie_csimex1.php b/Societes/ric/jpgraph/Examples/pie_csimex1.php new file mode 100755 index 00000000..50c3f700 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pie_csimex1.php @@ -0,0 +1,35 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Client side image map"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create +$p1 = new PiePlot($data); +$p1->SetCenter(0.4,0.5); + +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul")); +$targ=array("pie_csimex1.php#1","pie_csimex1.php#2","pie_csimex1.php#3", +"pie_csimex1.php#4","pie_csimex1.php#5","pie_csimex1.php#6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$p1->SetCSIMTargets($targ,$alts); + +$graph->Add($p1); + + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/piebkgex1.php b/Societes/ric/jpgraph/Examples/piebkgex1.php new file mode 100755 index 00000000..d2371c01 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/piebkgex1.php @@ -0,0 +1,94 @@ +SetMargin(1,1,40,1); +$graph->SetMarginColor('navy'); +$graph->SetShadow(false); + +// Setup background +$graph->SetBackgroundImage('worldmap1.jpg',BGIMG_FILLPLOT); + +// Setup title +$graph->title->Set("Pie plots with background image"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,20); +$graph->title->SetColor('white'); + +$p = array(); +// Create the plots +for( $i=0; $i < $n; ++$i ) { + $d = "data$i"; + $p[] = new PiePlot3D($data[$i]); +} + +// Position the four pies +for( $i=0; $i < $n; ++$i ) { + $p[$i]->SetCenter($piepos[2*$i],$piepos[2*$i+1]); +} + +// Set the titles +for( $i=0; $i < $n; ++$i ) { + $p[$i]->title->Set($titles[$i]); + $p[$i]->title->SetColor('white'); + $p[$i]->title->SetFont(FF_ARIAL,FS_BOLD,12); +} + +// Label font and color setup +for( $i=0; $i < $n; ++$i ) { + $p[$i]->value->SetFont(FF_ARIAL,FS_BOLD); + $p[$i]->value->SetColor('white'); +} + +// Show the percetages for each slice +for( $i=0; $i < $n; ++$i ) { + $p[$i]->value->Show(); +} + +// Label format +for( $i=0; $i < $n; ++$i ) { + $p[$i]->value->SetFormat("%01.1f%%"); +} + +// Size of pie in fraction of the width of the graph +for( $i=0; $i < $n; ++$i ) { + $p[$i]->SetSize(0.15); +} + +// Format the border around each slice + + +for( $i=0; $i < $n; ++$i ) { + $p[$i]->SetEdge(false); + $p[$i]->ExplodeSlice(1); +} + +// Use one legend for the whole graph +$p[0]->SetLegends(array("May","June","July","Aug")); +$graph->legend->Pos(0.05,0.35); +$graph->legend->SetShadow(false); + +for( $i=0; $i < $n; ++$i ) { + $graph->Add($p[$i]); +} + +$graph->Stroke(); +?> + + diff --git a/Societes/ric/jpgraph/Examples/piec_csimex1.php b/Societes/ric/jpgraph/Examples/piec_csimex1.php new file mode 100755 index 00000000..bffcb026 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/piec_csimex1.php @@ -0,0 +1,87 @@ +SetFrame(false); + +// Uncomment this line to add a drop shadow to the border +// $graph->SetShadow(); + +// Setup title +$graph->title->Set("CSIM Center Pie plot ex 1"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,18); +$graph->title->SetMargin(8); // Add a little bit more margin from the top + +// Create the pie plot +$p1 = new PiePlotC($data); + +// Set the radius of pie (as fraction of image size) +$p1->SetSize(0.32); + +// Move the center of the pie slightly to the top of the image +$p1->SetCenter(0.5,0.45); + +// Label font and color setup +$p1->value->SetFont(FF_ARIAL,FS_BOLD,12); +$p1->value->SetColor('white'); + +// Setup the title on the center circle +$p1->midtitle->Set("Test mid\nRow 1\nRow 2"); +$p1->midtitle->SetFont(FF_ARIAL,FS_NORMAL,14); + +// Set color for mid circle +$p1->SetMidColor('yellow'); + +// Use percentage values in the legends values (This is also the default) +$p1->SetLabelType(PIE_VALUE_PER); + +// The label array values may have printf() formatting in them. The argument to the +// form,at string will be the value of the slice (either the percetage or absolute +// depending on what was specified in the SetLabelType() above. +$lbl = array("adam\n%.1f%%","bertil\n%.1f%%","johan\n%.1f%%", + "peter\n%.1f%%","daniel\n%.1f%%","erik\n%.1f%%"); +$p1->SetLabels($lbl); + +// Uncomment this line to remove the borders around the slices +// $p1->ShowBorder(false); + +// Add drop shadow to slices +$p1->SetShadow(); + +// Explode all slices 15 pixels +$p1->ExplodeAll(15); + +// Setup the CSIM targets +$targ=array("piec_csimex1.php#1","piec_csimex1.php#2","piec_csimex1.php#3", + "piec_csimex1.php#4","piec_csimex1.php#5","piec_csimex1.php#6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$p1->SetCSIMTargets($targ,$alts); +$p1->SetMidCSIM("piec_csimex1.php#7","Center"); + + +// Setup a small help text in the image +$txt = new Text("Note: This is an example of image map. Hold\nyour mouse over the slices to see the values.\nThe URL just points back to this page"); +$txt->SetFont(FF_FONT1,FS_BOLD); +$txt->SetPos(0.5,0.97,'center','bottom'); +$txt->SetBox('yellow','black'); +$txt->SetShadow(); +$graph->AddText($txt); + +// Add plot to pie graph +$graph->Add($p1); + +// .. and send the image on it's marry way to the browser +$graph->StrokeCSIM(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/piecex1.php b/Societes/ric/jpgraph/Examples/piecex1.php new file mode 100755 index 00000000..af1f2419 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/piecex1.php @@ -0,0 +1,46 @@ +title->Set("Pie plot with center circle"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->title->SetMargin(8); // Add a little bit more margin from the top + +// Create the pie plot +$p1 = new PiePlotC($data); + +// Set size of pie +$p1->SetSize(0.32); + +// Label font and color setup +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10); +$p1->value->SetColor('black'); + +// Setup the title on the center circle +$p1->midtitle->Set("Test mid\nRow 1\nRow 2"); +$p1->midtitle->SetFont(FF_ARIAL,FS_NORMAL,10); + +// Set color for mid circle +$p1->SetMidColor('yellow'); + +// Use percentage values in the legends values (This is also the default) +$p1->SetLabelType(PIE_VALUE_PER); + +// Add plot to pie graph +$graph->Add($p1); + +// .. and send the image on it's marry way to the browser +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/piecex2.php b/Societes/ric/jpgraph/Examples/piecex2.php new file mode 100755 index 00000000..9dbe5f11 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/piecex2.php @@ -0,0 +1,70 @@ +SetFrame(false); + +// Uncomment this line to add a drop shadow to the border +// $graph->SetShadow(); + +// Setup title +$graph->title->Set("PiePlotC"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,18); +$graph->title->SetMargin(8); // Add a little bit more margin from the top + +// Create the pie plot +$p1 = new PiePlotC($data); + +// Set size of pie +$p1->SetSize(0.35); + +// Label font and color setup +$p1->value->SetFont(FF_ARIAL,FS_BOLD,12); +$p1->value->SetColor('white'); + +$p1->value->Show(); + +// Setup the title on the center circle +$p1->midtitle->Set("Test mid\nRow 1\nRow 2"); +$p1->midtitle->SetFont(FF_ARIAL,FS_NORMAL,14); + +// Set color for mid circle +$p1->SetMidColor('yellow'); + +// Use percentage values in the legends values (This is also the default) +$p1->SetLabelType(PIE_VALUE_PER); + +// The label array values may have printf() formatting in them. The argument to the +// form,at string will be the value of the slice (either the percetage or absolute +// depending on what was specified in the SetLabelType() above. +$lbl = array("adam\n%.1f%%","bertil\n%.1f%%","johan\n%.1f%%", + "peter\n%.1f%%","daniel\n%.1f%%","erik\n%.1f%%"); +$p1->SetLabels($lbl); + +// Uncomment this line to remove the borders around the slices +// $p1->ShowBorder(false); + +// Add drop shadow to slices +$p1->SetShadow(); + +// Explode all slices 15 pixels +$p1->ExplodeAll(15); + +// Add plot to pie graph +$graph->Add($p1); + +// .. and send the image on it's marry way to the browser +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/pieex1.php b/Societes/ric/jpgraph/Examples/pieex1.php new file mode 100755 index 00000000..2e221602 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pieex1.php @@ -0,0 +1,31 @@ +clearTheme(); +$graph->SetShadow(); + +// Set A title for the plot +$graph->title->Set("Example 1 Pie plot"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->title->SetColor("brown"); + +// Create pie plot +$p1 = new PiePlot($data); +//$p1->SetSliceColors(array("red","blue","yellow","green")); +$p1->SetTheme("earth"); + +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,10); +// Set how many pixels each slice should explode +$p1->Explode(array(0,15,15,25,15)); + + +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/pieex2.php b/Societes/ric/jpgraph/Examples/pieex2.php new file mode 100755 index 00000000..e13df392 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pieex2.php @@ -0,0 +1,23 @@ +clearTheme(); +$graph->SetShadow(); + +// Set A title for the plot +$graph->title->Set("Example 2 Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create +$p1 = new PiePlot($data); +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul")); +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/pieex3.php b/Societes/ric/jpgraph/Examples/pieex3.php new file mode 100755 index 00000000..e9f1c774 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pieex3.php @@ -0,0 +1,51 @@ +clearTheme(); +$graph->SetShadow(); + +// Set A title for the plot +$graph->title->Set("Multiple - Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create plots +$size=0.13; +$p1 = new PiePlot($data); +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May")); +$p1->SetSize($size); +$p1->SetCenter(0.25,0.32); +$p1->value->SetFont(FF_FONT0); +$p1->title->Set("2001"); + +$p2 = new PiePlot($data); +$p2->SetSize($size); +$p2->SetCenter(0.65,0.32); +$p2->value->SetFont(FF_FONT0); +$p2->title->Set("2002"); + +$p3 = new PiePlot($data); +$p3->SetSize($size); +$p3->SetCenter(0.25,0.75); +$p3->value->SetFont(FF_FONT0); +$p3->title->Set("2003"); + +$p4 = new PiePlot($data); +$p4->SetSize($size); +$p4->SetCenter(0.65,0.75); +$p4->value->SetFont(FF_FONT0); +$p4->title->Set("2004"); + +$graph->Add($p1); +$graph->Add($p2); +$graph->Add($p3); +$graph->Add($p4); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/pieex4.php b/Societes/ric/jpgraph/Examples/pieex4.php new file mode 100755 index 00000000..5e3ac61e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pieex4.php @@ -0,0 +1,24 @@ +clearTheme(); +$graph->SetShadow(); + +$graph->title->Set("Example 4 of pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->value->SetFont(FF_FONT1,FS_BOLD); +$p1->value->SetColor("darkred"); +$p1->SetSize(0.3); +$p1->SetCenter(0.4); +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May")); +$graph->Add($p1); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/pieex5.php b/Societes/ric/jpgraph/Examples/pieex5.php new file mode 100755 index 00000000..7552c23e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pieex5.php @@ -0,0 +1,30 @@ +clearTheme(); +$graph->SetShadow(); + +// Setup graph title +$graph->title->Set("Example 5 of pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create pie plot +$p1 = new PiePlot($data); +$p1->value->SetFont(FF_VERDANA,FS_BOLD); +$p1->value->SetColor("darkred"); +$p1->SetSize(0.3); +$p1->SetCenter(0.4); +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May")); +//$p1->SetStartAngle(M_PI/8); +$p1->ExplodeSlice(3); + +$graph->Add($p1); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/pieex6.php b/Societes/ric/jpgraph/Examples/pieex6.php new file mode 100755 index 00000000..fba34582 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pieex6.php @@ -0,0 +1,47 @@ +clearTheme(); +$graph->SetShadow(); + +// Setup title +$graph->title->Set("Example of pie plot with absolute labels"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// The pie plot +$p1 = new PiePlot($data); + +// Move center of pie to the left to make better room +// for the legend +$p1->SetCenter(0.35,0.5); + +// No border +$p1->ShowBorder(false); + +// Label font and color setup +$p1->value->SetFont(FF_FONT1,FS_BOLD); +$p1->value->SetColor("darkred"); + +// Use absolute values (type==1) +$p1->SetLabelType(PIE_VALUE_ABS); + +// Label format +$p1->value->SetFormat("$%d"); +$p1->value->Show(); + +// Size of pie in fraction of the width of the graph +$p1->SetSize(0.3); + +// Legends +$p1->SetLegends(array("May ($%d)","June ($%d)","July ($%d)","Aug ($%d)")); +$graph->legend->Pos(0.05,0.15); + +$graph->Add($p1); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/pieex7.php b/Societes/ric/jpgraph/Examples/pieex7.php new file mode 100755 index 00000000..ce0c514a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pieex7.php @@ -0,0 +1,51 @@ +clearTheme(); +$graph->SetShadow(); + +// Setup title +$graph->title->Set("Pie plot with absolute labels"); +$graph->subtitle->Set('(With hidden 0 labels)'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// The pie plot +$p1 = new PiePlot($data); + + +// Move center of pie to the left to make better room +// for the legend +$p1->SetCenter(0.35,0.5); + +// No border +$p1->ShowBorder(false); + +// Label font and color setup +$p1->value->SetFont(FF_FONT1,FS_BOLD); +$p1->value->SetColor("darkred"); + +// Use absolute values (type==1) +$p1->SetLabelType(PIE_VALUE_ABS); + +// Label format +$p1->value->SetFormat("$%d"); +$p1->value->HideZero(); +$p1->value->Show(); + +// Size of pie in fraction of the width of the graph +$p1->SetSize(0.3); + +// Legends +$p1->SetLegends(array("May ($%d)","June ($%d)","July ($%d)","Aug ($%d)")); +$graph->legend->Pos(0.05,0.2); + +$graph->Add($p1); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/pieex8.php b/Societes/ric/jpgraph/Examples/pieex8.php new file mode 100755 index 00000000..728004d5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pieex8.php @@ -0,0 +1,34 @@ +clearTheme(); +$graph->SetShadow(); + +// Title setup +$graph->title->Set("Adjusting the label pos"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Setup the pie plot +$p1 = new PiePlot($data); + +// Adjust size and position of plot +$p1->SetSize(0.4); +$p1->SetCenter(0.5,0.52); + +// Setup slice labels and move them into the plot +$p1->value->SetFont(FF_FONT1,FS_BOLD); +$p1->value->SetColor("darkred"); +$p1->SetLabelPos(0.6); + +// Finally add the plot +$graph->Add($p1); + +// ... and stroke it +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/pieex9.php b/Societes/ric/jpgraph/Examples/pieex9.php new file mode 100755 index 00000000..9d16044a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pieex9.php @@ -0,0 +1,40 @@ +clearTheme(); +$graph->SetShadow(); + +// Title setup +$graph->title->Set("Exploding all slices"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Setup the pie plot +$p1 = new PiePlot($data); + +// Adjust size and position of plot +$p1->SetSize(0.35); +$p1->SetCenter(0.5,0.52); + +// Setup slice labels and move them into the plot +$p1->value->SetFont(FF_FONT1,FS_BOLD); +$p1->value->SetColor("darkred"); +$p1->SetLabelPos(0.65); + +// Explode all slices +$p1->ExplodeAll(10); + +// Add drop shadow +$p1->SetShadow(); + +// Finally add the plot +$graph->Add($p1); + +// ... and stroke it +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/pielabelsex1.php b/Societes/ric/jpgraph/Examples/pielabelsex1.php new file mode 100755 index 00000000..d2cf93a0 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pielabelsex1.php @@ -0,0 +1,38 @@ +title->Set("Label guide lines"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + + +// Create pie plot +$p1 = new PiePlot($data); +$p1->SetCenter(0.5,0.55); +$p1->SetSize(0.3); + +// Enable and set policy for guide-lines +$p1->SetGuideLines(); +$p1->SetGuideLinesAdjust(1.4); + +// Setup the labels +$p1->SetLabelType(PIE_VALUE_PER); +$p1->value->Show(); +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$p1->value->SetFormat('%2.1f%%'); + +// Add and stroke +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/pielabelsex2.php b/Societes/ric/jpgraph/Examples/pielabelsex2.php new file mode 100755 index 00000000..bb3cc2ab --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pielabelsex2.php @@ -0,0 +1,38 @@ +title->Set("Label guide lines"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + + +// Create pie plot +$p1 = new PiePlot($data); +$p1->SetCenter(0.5,0.55); +$p1->SetSize(0.3); + +// Enable and set policy for guide-lines. Make labels line up vertically +$p1->SetGuideLines(true,false); +$p1->SetGuideLinesAdjust(1.5); + +// Setup the labels +$p1->SetLabelType(PIE_VALUE_PER); +$p1->value->Show(); +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$p1->value->SetFormat('%2.1f%%'); + +// Add and stroke +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/pielabelsex3.php b/Societes/ric/jpgraph/Examples/pielabelsex3.php new file mode 100755 index 00000000..cff6d40f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pielabelsex3.php @@ -0,0 +1,39 @@ +title->Set("Label guide lines"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + + +// Create pie plot +$p1 = new PiePlot($data); +$p1->SetCenter(0.5,0.55); +$p1->SetSize(0.3); + +// Enable and set policy for guide-lines. Make labels line up vertically +// and force guide lines to always beeing used +$p1->SetGuideLines(true,false,true); +$p1->SetGuideLinesAdjust(1.5); + +// Setup the labels +$p1->SetLabelType(PIE_VALUE_PER); +$p1->value->Show(); +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$p1->value->SetFormat('%2.1f%%'); + +// Add and stroke +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/pielabelsex4.php b/Societes/ric/jpgraph/Examples/pielabelsex4.php new file mode 100755 index 00000000..5187b3c5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pielabelsex4.php @@ -0,0 +1,38 @@ +title->Set("Label guide lines"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + + +// Create pie plot +$p1 = new PiePlot($data); +$p1->SetCenter(0.5,0.55); +$p1->SetSize(0.3); + +// Enable and set policy for guide-lines. Make labels line up vertically +$p1->SetGuideLines(true,false); +$p1->SetGuideLinesAdjust(1.1); + +// Setup the labels +$p1->SetLabelType(PIE_VALUE_PER); +$p1->value->Show(); +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$p1->value->SetFormat('%2.1f%%'); + +// Add and stroke +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/pielabelsex5.php b/Societes/ric/jpgraph/Examples/pielabelsex5.php new file mode 100755 index 00000000..22e697d3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pielabelsex5.php @@ -0,0 +1,48 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set('String labels with values'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor('black'); + +// Create pie plot +$p1 = new PiePlot($data); +$p1->SetCenter(0.5,0.5); +$p1->SetSize(0.3); + +// Setup the labels to be displayed +$p1->SetLabels($labels); + +// This method adjust the position of the labels. This is given as fractions +// of the radius of the Pie. A value < 1 will put the center of the label +// inside the Pie and a value >= 1 will pout the center of the label outside the +// Pie. By default the label is positioned at 0.5, in the middle of each slice. +$p1->SetLabelPos(1); + +// Setup the label formats and what value we want to be shown (The absolute) +// or the percentage. +$p1->SetLabelType(PIE_VALUE_PER); +$p1->value->Show(); +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$p1->value->SetColor('darkgray'); + +// Add and stroke +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/plotbanddensity_ex0.php b/Societes/ric/jpgraph/Examples/plotbanddensity_ex0.php new file mode 100755 index 00000000..3615a957 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/plotbanddensity_ex0.php @@ -0,0 +1,38 @@ +SetScale('textlin'); +$graph->SetMargin(25,10,20,25); +$graph->SetBox(true); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4'); +$band->SetDensity(10); +$band->ShowFrame(true); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_3DPLANE, Density=10'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/plotbanddensity_ex1.php b/Societes/ric/jpgraph/Examples/plotbanddensity_ex1.php new file mode 100755 index 00000000..ed07487e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/plotbanddensity_ex1.php @@ -0,0 +1,38 @@ +SetScale('textlin'); +$graph->SetMargin(25,10,20,25); +$graph->SetBox(true); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4'); +$band->SetDensity(40); +$band->ShowFrame(true); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_3DPLANE, Density=40'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/plotbanddensity_ex2.php b/Societes/ric/jpgraph/Examples/plotbanddensity_ex2.php new file mode 100755 index 00000000..908efdf5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/plotbanddensity_ex2.php @@ -0,0 +1,38 @@ +SetScale('textlin'); +$graph->SetMargin(25,10,20,25); +$graph->SetBox(true); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); +$graph->ygrid->Show(false); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4'); +$band->SetDensity(80); +$band->ShowFrame(true); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_3DPLANE, Density=80'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/plotlineex1.php b/Societes/ric/jpgraph/Examples/plotlineex1.php new file mode 100755 index 00000000..0eb2fb8c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/plotlineex1.php @@ -0,0 +1,37 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMargin(40,20,50,70); + +$graph->legend->SetPos(0.5,0.97,'center','bottom'); + +$graph->title->Set('Plot line legend'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +$graph->SetTitleBackground('lightblue:1.3',TITLEBKG_STYLE2,TITLEBKG_FRAME_BEVEL); +$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'lightblue','navy'); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->value->Show(); +$bplot->value->SetFont(FF_VERDANA,FS_BOLD,8); +$bplot->SetValuePos('top'); +$bplot->SetLegend('Bar Legend'); +$graph->Add($bplot); + +$pline = new PlotLine(HORIZONTAL,8,'red',2); +$pline->SetLegend('Line Legend'); +$graph->legend->SetColumns(10); +$graph->Add($pline); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/polar_csimex1.php b/Societes/ric/jpgraph/Examples/polar_csimex1.php new file mode 100755 index 00000000..ffaac176 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polar_csimex1.php @@ -0,0 +1,69 @@ +SetScale('log',100); +$graph->SetType(POLAR_180); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +// Set color for gradient lines +$graph->axis->SetGridColor('lightblue:0.9','lightblue:0.9','lightblue:0.9'); + +// Set label and axis colors +$graph->axis->SetColor('black','navy','darkred'); + +// Draw the ticks on the bottom side of the radius axis +$graph->axis->SetTickSide(SIDE_DOWN); + +// Increase the margin for the labels since we changed the +// side of the ticks. +$graph->axis->SetLabelMargin(6); + +// Change fonts +$graph->axis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8); + +// Setup axis title +$graph->axis->SetTitle('Coverage (in meter)','middle'); +$graph->axis->title->SetFont(FF_FONT1,FS_BOLD); + +// Setup graph title +$graph->title->Set('Polar plot #9'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Setup tab title +$graph->tabtitle->Set('Microphone #1'); +$graph->tabtitle->SetColor('brown:0.5','lightyellow'); + +// Setup the polar plot with CSIM targets for the marks +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$p->mark->SetType(MARK_SQUARE); +$p->mark->SetWidth(10); +$p->SetCSIMTargets( $targets ); + +$graph->Add($p); + +$graph->StrokeCSIM(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarclockex1.php b/Societes/ric/jpgraph/Examples/polarclockex1.php new file mode 100755 index 00000000..bdf9008e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarclockex1.php @@ -0,0 +1,55 @@ +SetScale('lin',150); + +$graph->SetMarginColor('#FFE6C0'); +$graph->SetType(POLAR_360); +$graph->SetMargin(40,40,50,40); +$graph->SetClockwise(true); + +//$graph->Set90AndMargin(60,50,70,120); + +$graph->SetBox(true); +$graph->SetFrame(false); +$graph->axis->ShowGrid(true,false,true); +$graph->axis->SetGridColor('gray','gray','gray'); + +$graph->axis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->axis->SetTitle('X-Axis','center'); + +$graph->axis->SetColor('black','black','darkred'); +$graph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8); + +$graph->title->Set('Clockwise polar plot'); +$graph->title->SetFont(FF_COMIC,FS_NORMAL,16); +$graph->title->SetColor('navy'); + + + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$graph->Add($p); + +//$p2 = new PolarPlot($data2); +//$p2->SetFillColor('red@0.5'); +//$graph->Add($p2); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarclockex2.php b/Societes/ric/jpgraph/Examples/polarclockex2.php new file mode 100755 index 00000000..11cdeca6 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarclockex2.php @@ -0,0 +1,53 @@ +SetScale('lin',150); + +$graph->SetMarginColor('#FFE6C0'); +$graph->SetType(POLAR_360); +$graph->SetClockwise(true); +$graph->Set90AndMargin(40,40,50,40); + +$graph->SetBox(true); +$graph->SetFrame(false); +$graph->axis->ShowGrid(true,false,true); +$graph->axis->SetGridColor('gray','gray','gray'); + +$graph->axis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->axis->SetTitle('X-Axis','center'); + +$graph->axis->SetColor('black','black','darkred'); +$graph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8); + +$graph->title->Set('Clockwise polar plot (rotated)'); +$graph->title->SetFont(FF_COMIC,FS_NORMAL,16); +$graph->title->SetColor('navy'); + + + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$graph->Add($p); + +//$p2 = new PolarPlot($data2); +//$p2->SetFillColor('red@0.5'); +//$graph->Add($p2); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex0-180.php b/Societes/ric/jpgraph/Examples/polarex0-180.php new file mode 100755 index 00000000..4fa344fa --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex0-180.php @@ -0,0 +1,27 @@ +SetScale('lin'); +$graph->SetMargin(35,35,25,25); +$graph->SetType(POLAR_180); + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex0.php b/Societes/ric/jpgraph/Examples/polarex0.php new file mode 100755 index 00000000..b11aa6e1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex0.php @@ -0,0 +1,26 @@ +SetScale('lin'); +$graph->SetMargin(35,35,25,25); + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex1.php b/Societes/ric/jpgraph/Examples/polarex1.php new file mode 100755 index 00000000..b0c7f8af --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex1.php @@ -0,0 +1,30 @@ +SetScale('lin'); +$graph->SetType(POLAR_180); +//$graph->SetAngle(90); +//$graph->SetMargin(30-150,30-150,30+150,30+150); +$graph->Set90AndMargin(40,40,40,40); +//$graph->axis->SetLabelAlign('right','center'); + +$p = new PolarPlot($data); +$p->SetLegend("Test"); +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex10.php b/Societes/ric/jpgraph/Examples/polarex10.php new file mode 100755 index 00000000..d864a23d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex10.php @@ -0,0 +1,66 @@ +SetScale('log',100); +$graph->SetType(POLAR_360); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +// Set color for gradient lines +$graph->axis->SetGridColor('lightblue:0.9','lightblue:0.9','lightblue:0.9'); + +// Set label and axis colors +$graph->axis->SetColor('black','navy','darkred'); + +// Draw the ticks on the bottom side of the radius axis +$graph->axis->SetTickSide(SIDE_DOWN); + +// Increase the margin for the labels since we changed the +// side of the ticks. +$graph->axis->SetLabelMargin(6); + +// Change fonts +$graph->axis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8); + + +// Setup graph title +$graph->title->Set('Polar plot #10'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Setup tab title +$graph->tabtitle->Set('Microphone #1'); +$graph->tabtitle->SetColor('brown:0.5','lightyellow'); + + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$p->mark->SetType(MARK_SQUARE); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex2.php b/Societes/ric/jpgraph/Examples/polarex2.php new file mode 100755 index 00000000..d4a9779a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex2.php @@ -0,0 +1,34 @@ +SetScale('lin'); + +$graph->title->Set('Polar plot #2'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->title->SetColor('navy'); + +// Hide last labels on the Radius axis +// They intersect with the box otherwise +$graph->axis->HideLastTickLabel(); + +$p = new PolarPlot($data); +$p->SetFillColor('lightred@0.5'); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex3-lin.php b/Societes/ric/jpgraph/Examples/polarex3-lin.php new file mode 100755 index 00000000..430438c9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex3-lin.php @@ -0,0 +1,33 @@ +SetScale('lin',200); +$graph->SetType(POLAR_180); + +$graph->title->Set('Polar plot #3'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->title->SetColor('navy'); + +$graph->axis->ShowGrid(true,false); + +$p = new PolarPlot($data); +$p->SetFillColor('lightred@0.5'); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex3.php b/Societes/ric/jpgraph/Examples/polarex3.php new file mode 100755 index 00000000..82bf18a2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex3.php @@ -0,0 +1,33 @@ +SetScale('log',100); +$graph->SetType(POLAR_180); + +$graph->title->Set('Polar plot #3'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->title->SetColor('navy'); + +$graph->axis->ShowGrid(true,false); + +$p = new PolarPlot($data); +$p->SetFillColor('lightred@0.5'); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex4.php b/Societes/ric/jpgraph/Examples/polarex4.php new file mode 100755 index 00000000..a4fb1d08 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex4.php @@ -0,0 +1,34 @@ +SetScale('log'); + +$graph->title->Set('Polar plot #4'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->title->SetColor('navy'); + +// Hide last labels on the Radius axis +// They intersect with the box otherwise +$graph->axis->HideLastTickLabel(); + +$p = new PolarPlot($data); +$p->SetFillColor('lightred@0.5'); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex5.php b/Societes/ric/jpgraph/Examples/polarex5.php new file mode 100755 index 00000000..7da58020 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex5.php @@ -0,0 +1,37 @@ +SetScale('log'); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +$graph->title->Set('Polar plot #5'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->title->SetColor('navy'); + +// Hide last labels on the Radius axis +// They intersect with the box otherwise +$graph->axis->HideLastTickLabel(); + +$p = new PolarPlot($data); +$p->SetFillColor('lightred@0.5'); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex6.php b/Societes/ric/jpgraph/Examples/polarex6.php new file mode 100755 index 00000000..21ae6a27 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex6.php @@ -0,0 +1,35 @@ +SetScale('log'); +$graph->SetType(POLAR_180); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +$graph->title->Set('Polar plot #6'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->title->SetColor('navy'); + + +$p = new PolarPlot($data); +$p->SetFillColor('lightred@0.5'); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex7-1.php b/Societes/ric/jpgraph/Examples/polarex7-1.php new file mode 100755 index 00000000..5b593a19 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex7-1.php @@ -0,0 +1,50 @@ +SetScale('log',100); +$graph->SetType(POLAR_180); +$graph->SetPlotSize(220,250); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +$graph->SetBackgroundGradient('blue:1.3','brown:1.4',GRAD_HOR,BGRAD_PLOT); + +// Set color for gradient lines +$graph->axis->SetGridColor('gray','gray','gray'); + +// Setup axis title +$graph->axis->SetTitle('Coverage (in meter)','middle'); +$graph->axis->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->title->Set('Polar plot #7'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Adjust legen box position and color +$graph->legend->SetColor('navy','darkgray'); +$graph->legend->SetFillColor('white'); +$graph->legend->SetShadow('darkgray@0.5',5); + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$p->mark->SetType(MARK_SQUARE); +$p->SetLegend("Mirophone #1\n(No amps)"); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex7-2.php b/Societes/ric/jpgraph/Examples/polarex7-2.php new file mode 100755 index 00000000..959749d2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex7-2.php @@ -0,0 +1,53 @@ +SetScale('log',100); +$graph->SetType(POLAR_360); +$graph->SetPlotSize(220,300); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +$graph->SetBackgroundGradient('blue:1.3','brown:1.4',GRAD_MIDHOR,BGRAD_PLOT); + +// Set color for gradient lines +$graph->axis->SetGridColor('gray','gray','gray'); + +$graph->title->Set('Polar plot #7-2'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Adjust legen box position and color +$graph->legend->SetColor('navy','darkgray'); +$graph->legend->SetFillColor('white'); +$graph->legend->SetShadow('darkgray@0.5',5); + +$p = new PolarPlot($data); +$p->SetFillColor('yellow@0.6'); +$p->mark->SetType(MARK_SQUARE); +$p->SetLegend("Mirophone #1\n(No amps)"); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex7.php b/Societes/ric/jpgraph/Examples/polarex7.php new file mode 100755 index 00000000..d7079a0a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex7.php @@ -0,0 +1,53 @@ +SetScale('lin',300); +$graph->SetType(POLAR_180); +$graph->SetPlotSize(220,250); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +$graph->SetBackgroundGradient('blue:1.3','brown:1.4',GRAD_HOR,BGRAD_PLOT); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +// Set color for gradient lines +$graph->axis->SetGridColor('gray','gray','gray'); + +// Setup axis title +$graph->axis->SetTitle('Coverage (in meter)','middle'); +$graph->axis->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->title->Set('Polar plot #7'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Adjust legen box position and color +$graph->legend->SetColor('navy','darkgray'); +$graph->legend->SetFillColor('white'); +$graph->legend->SetShadow('darkgray@0.5',5); + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$p->mark->SetType(MARK_SQUARE); +$p->SetLegend("Mirophone #1\n(No amps)"); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex8.php b/Societes/ric/jpgraph/Examples/polarex8.php new file mode 100755 index 00000000..8322ebcd --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex8.php @@ -0,0 +1,54 @@ +SetScale('log',100); +$graph->SetType(POLAR_180); +//$graph->SetPlotSize(250,250); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +// Set plotarea color +$graph->SetColor('lightblue'); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +// Set color for gradient lines +$graph->axis->SetGridColor('lightblue:0.8','lightblue:0.8','lightblue:0.8'); + +// Setup axis title +$graph->axis->SetTitle('Coverage (in meter)','middle'); +$graph->axis->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->title->Set('Polar plot #8'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Adjust legen box position and color +$graph->legend->SetColor('navy','darkgray'); +$graph->legend->SetFillColor('white'); +$graph->legend->SetShadow('darkgray@0.5',5); + +$p = new PolarPlot($data); +$p->SetFillColor('white@0.5'); +$p->mark->SetType(MARK_SQUARE); +$p->SetLegend("Mirophone #1\n(No amps)"); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/polarex9.php b/Societes/ric/jpgraph/Examples/polarex9.php new file mode 100755 index 00000000..ee239ec0 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/polarex9.php @@ -0,0 +1,63 @@ +SetScale('log',100); +$graph->SetType(POLAR_180); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +// Set color for gradient lines +$graph->axis->SetGridColor('lightblue:0.9','lightblue:0.9','lightblue:0.9'); + +// Set label and axis colors +$graph->axis->SetColor('black','navy','darkred'); + +// Draw the ticks on the bottom side of the radius axis +$graph->axis->SetTickSide(SIDE_DOWN); + +// Increase the margin for the labels since we changed the +// side of the ticks. +$graph->axis->SetLabelMargin(6); + +// Change fonts +$graph->axis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8); + +// Setup axis title +$graph->axis->SetTitle('Coverage (in meter)','middle'); +$graph->axis->title->SetFont(FF_FONT1,FS_BOLD); + +// Setup graph title +$graph->title->Set('Polar plot #9'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Setup tab title +$graph->tabtitle->Set('Microphone #1'); +$graph->tabtitle->SetColor('brown:0.5','lightyellow'); + + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$p->mark->SetType(MARK_SQUARE); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/prepaccdata_example.php b/Societes/ric/jpgraph/Examples/prepaccdata_example.php new file mode 100755 index 00000000..1f1fca31 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/prepaccdata_example.php @@ -0,0 +1,61 @@ +title->Set('Accumulated values with specified X-axis scale'); +$graph->SetScale('textlin'); + +// Setup margin color +$graph->SetMarginColor('green@0.95'); + +// Adjust the margin to make room for the X-labels +$graph->SetMargin(40,30,40,120); + +// Turn the tick marks out from the plot area +$graph->xaxis->SetTickSide(SIDE_BOTTOM); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +$p0 =new LinePlot($ydata[0]); +$p0->SetFillColor('sandybrown'); +$p1 =new LinePlot($ydata[1]); +$p1->SetFillColor('lightblue'); +$p2 =new LinePlot($ydata[2]); +$p2->SetFillColor('red'); +$ap = new AccLinePlot(array($p0,$p1,$p2)); + +$graph->xaxis->SetTickLabels($xdata); +$graph->xaxis->SetTextLabelInterval(4); + +// Add the plot to the graph +$graph->Add($ap); + +// Set the angle for the labels to 90 degrees +$graph->xaxis->SetLabelAngle(90); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/pushpinex1.php b/Societes/ric/jpgraph/Examples/pushpinex1.php new file mode 100755 index 00000000..4b100988 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pushpinex1.php @@ -0,0 +1,62 @@ +img->SetMargin(1,1,1,1); +$graph->SetScale('linlin',0,100,0,100); + +// We don't want any axis to be shown +$graph->xaxis->Hide(); +$graph->yaxis->Hide(); + +// Use a worldmap as the background and let it fill the plot area +$graph->SetBackgroundImage(WORLDMAP,BGIMG_FILLPLOT); + +// Setup a nice title with a striped bevel background +$graph->title->Set("Pushpin graph"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('white'); +$graph->SetTitleBackground('darkgreen',TITLEBKG_STYLE1,TITLEBKG_FRAME_BEVEL); +$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'blue','darkgreen'); + +// Finally create the scatterplot +$sp = new ScatterPlot($datay,$datax); + +// We want the markers to be an image +$sp->mark->SetType(MARK_IMG_PUSHPIN,'blue',0.6); + +// Install the Y-X callback for the markers +$sp->mark->SetCallbackYX('markCallback'); + +// ... and add it to the graph +$graph->Add($sp); + +// .. and output to browser +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/pushpinex2.php b/Societes/ric/jpgraph/Examples/pushpinex2.php new file mode 100755 index 00000000..000d1cc2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/pushpinex2.php @@ -0,0 +1,63 @@ +img->SetMargin(1,1,1,1); +$graph->SetScale('linlin',0,100,0,100); + +// We don't want any axis to be shown +$graph->xaxis->Hide(); +$graph->yaxis->Hide(); + +// Use a worldmap as the background and let it fill the plot area +$graph->SetBackgroundImage(WORLDMAP,BGIMG_FILLPLOT); + +// Setup a nice title with a striped bevel background +$graph->title->Set("Pushpin graph"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('white'); +$graph->SetTitleBackground('darkgreen',TITLEBKG_STYLE1,TITLEBKG_FRAME_BEVEL); +$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'blue','darkgreen'); + +// Finally create the lineplot +$lp = new LinePlot($datay,$datax); +$lp->SetColor('lightgray'); + +// We want the markers to be an image +$lp->mark->SetType(MARK_IMG_PUSHPIN,'blue',0.6); + +// Install the Y-X callback for the markers +$lp->mark->SetCallbackYX('markCallback'); + +// ... and add it to the graph +$graph->Add($lp); + +// .. and output to browser +$graph->Stroke(); + +?> + + diff --git a/Societes/ric/jpgraph/Examples/qr-input.txt b/Societes/ric/jpgraph/Examples/qr-input.txt new file mode 100755 index 00000000..1b3c2bcd --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qr-input.txt @@ -0,0 +1 @@ +01234567890 \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/qr_template.php b/Societes/ric/jpgraph/Examples/qr_template.php new file mode 100755 index 00000000..e54ea782 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qr_template.php @@ -0,0 +1,32 @@ +SetModuleWidth($modulewidth); + +// Set Quiet zone (this should rarely need changing from the default) +$backend->SetQuietZone($quiet); + +if( $back == BACKEND_IMAGE ) { + + $backend->Stroke($data); +} +else { + $str = $backend->Stroke($data); + echo '
      '.$str.'
      '; +} +?> diff --git a/Societes/ric/jpgraph/Examples/qrexample0.php b/Societes/ric/jpgraph/Examples/qrexample0.php new file mode 100755 index 00000000..46126fe7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample0.php @@ -0,0 +1,23 @@ +Stroke($data); +} catch (Exception $e) { + $errstr = $e->GetMessage(); + echo 'QR Code error: '.$e->GetMessage()."\n"; + exit(1); +} + +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/qrexample00.php b/Societes/ric/jpgraph/Examples/qrexample00.php new file mode 100755 index 00000000..f09fcd5d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample00.php @@ -0,0 +1,16 @@ +Stroke($data); +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/Examples/qrexample01.php b/Societes/ric/jpgraph/Examples/qrexample01.php new file mode 100755 index 00000000..af99deaf --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample01.php @@ -0,0 +1,19 @@ +SetModuleWidth(5); + +// .. send the barcode back to the browser for the data +$backend->Stroke($data); +?> diff --git a/Societes/ric/jpgraph/Examples/qrexample02.php b/Societes/ric/jpgraph/Examples/qrexample02.php new file mode 100755 index 00000000..890d616c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample02.php @@ -0,0 +1,23 @@ +SetModuleWidth(5); + + // .. send the barcode back to the browser for the data + $backend->Stroke($data); +?> diff --git a/Societes/ric/jpgraph/Examples/qrexample03.php b/Societes/ric/jpgraph/Examples/qrexample03.php new file mode 100755 index 00000000..858eede3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample03.php @@ -0,0 +1,27 @@ +SetModuleWidth(5); + + // Store the barcode in the specifed file + $backend->Stroke($data,$fileName); + list($version,$errorcorrection) = $backend->GetQRInfo(); + + echo "QR Barcode, (Version: $version-$errorcorrection), image stored in file $fileName"; +?> diff --git a/Societes/ric/jpgraph/Examples/qrexample03.png b/Societes/ric/jpgraph/Examples/qrexample03.png new file mode 100755 index 00000000..091a1cc2 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/qrexample03.png differ diff --git a/Societes/ric/jpgraph/Examples/qrexample04.php b/Societes/ric/jpgraph/Examples/qrexample04.php new file mode 100755 index 00000000..c86447ae --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample04.php @@ -0,0 +1,24 @@ +SetModuleWidth(3); + + // Store the barcode in the specifed file + $backend->Stroke($data); +?> diff --git a/Societes/ric/jpgraph/Examples/qrexample05.php b/Societes/ric/jpgraph/Examples/qrexample05.php new file mode 100755 index 00000000..96f5f47a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample05.php @@ -0,0 +1,29 @@ +SetModuleWidth(4); + + // Store the barcode in the specifed file + $backend->Stroke($data); +?> diff --git a/Societes/ric/jpgraph/Examples/qrexample06.php b/Societes/ric/jpgraph/Examples/qrexample06.php new file mode 100755 index 00000000..046627f2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample06.php @@ -0,0 +1,26 @@ +SetImgFormat('jpeg',80); + + // Set the module size + $backend->SetModuleWidth(4); + + // Store the barcode in the specifed file + $backend->Stroke($data); +?> diff --git a/Societes/ric/jpgraph/Examples/qrexample07.php b/Societes/ric/jpgraph/Examples/qrexample07.php new file mode 100755 index 00000000..68dde156 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample07.php @@ -0,0 +1,26 @@ +SetModuleWidth(4); + + // Store the barcode in the specifed file + $backend->Stroke($data); +?> diff --git a/Societes/ric/jpgraph/Examples/qrexample08.php b/Societes/ric/jpgraph/Examples/qrexample08.php new file mode 100755 index 00000000..08eb947b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample08.php @@ -0,0 +1,22 @@ +SetModuleWidth(5); + + // .. send the barcode back to the browser for the data in the file + $backend->StrokeFromFile($readFromFilename); +?> diff --git a/Societes/ric/jpgraph/Examples/qrexample09.php b/Societes/ric/jpgraph/Examples/qrexample09.php new file mode 100755 index 00000000..faa2a5de --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample09.php @@ -0,0 +1,25 @@ +SetModuleWidth(5); + + // Use blue and white colors instead + $backend->SetColor('navy','white'); + + // .. send the barcode back to the browser for the data in the file + $backend->StrokeFromFile($readFromFilename); +?> diff --git a/Societes/ric/jpgraph/Examples/qrexample10.php b/Societes/ric/jpgraph/Examples/qrexample10.php new file mode 100755 index 00000000..1232754a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample10.php @@ -0,0 +1,26 @@ +SetModuleWidth(3); + + // Set color + $backend->SetColor('brown','white'); + + // Store the barcode in the specifed file + $backend->Stroke($data); +?> diff --git a/Societes/ric/jpgraph/Examples/qrexample11.php b/Societes/ric/jpgraph/Examples/qrexample11.php new file mode 100755 index 00000000..2f3e503e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample11.php @@ -0,0 +1,26 @@ +SetModuleWidth($modulewidth); + +// Store the barcode in the specifed file +$ps_str = $backend->Stroke($data); + +echo '
      '.$ps_str.'
      '; +?> diff --git a/Societes/ric/jpgraph/Examples/qrexample12.php b/Societes/ric/jpgraph/Examples/qrexample12.php new file mode 100755 index 00000000..d1e09046 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/qrexample12.php @@ -0,0 +1,26 @@ +SetModuleWidth($modulewidth); + +// Store the barcode in the specifed file +$ps_str = $backend->Stroke($data); + +echo '
      '.$ps_str.'
      '; +?> diff --git a/Societes/ric/jpgraph/Examples/radar_csimex1.php b/Societes/ric/jpgraph/Examples/radar_csimex1.php new file mode 100755 index 00000000..1f0454d8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radar_csimex1.php @@ -0,0 +1,43 @@ +title->Set('Radar with marks'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetMargin(10); + +$graph->SetTitles($titles); +$graph->SetCenter(0.5,0.55); +$graph->HideTickMarks(); +$graph->SetColor('lightgreen@0.7'); +$graph->axis->SetColor('darkgray'); +$graph->grid->SetColor('darkgray'); +$graph->grid->Show(); + +$graph->axis->title->SetFont(FF_ARIAL,FS_NORMAL,12); +$graph->axis->title->SetMargin(5); +$graph->SetGridDepth(DEPTH_BACK); +$graph->SetSize(0.6); + +$plot = new RadarPlot($data); +$plot->SetColor('red@0.2'); +$plot->SetLineWeight(2); +$plot->SetFillColor('red@0.7'); +$plot->mark->SetType(MARK_IMG_DIAMOND,'red',0.6); +$plot->mark->SetFillColor('darkred'); +$plot->SetCSIMTargets( $targets , $alts ); + +$graph->Add($plot); +$graph->StrokeCSIM(); +?> diff --git a/Societes/ric/jpgraph/Examples/radarex1.php b/Societes/ric/jpgraph/Examples/radarex1.php new file mode 100755 index 00000000..a2103757 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarex1.php @@ -0,0 +1,16 @@ +Add($plot); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/radarex2.php b/Societes/ric/jpgraph/Examples/radarex2.php new file mode 100755 index 00000000..a1400a3f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarex2.php @@ -0,0 +1,21 @@ +title->Set('Weekly goals'); +$graph->subtitle->Set('Year 2003'); + +$plot = new RadarPlot($data); +$plot->SetFillColor('lightred'); +$graph->SetSize(0.6); +$graph->SetPos(0.5,0.6); +// Add the plot and display the graph +$graph->Add($plot); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/radarex3.php b/Societes/ric/jpgraph/Examples/radarex3.php new file mode 100755 index 00000000..18fdd902 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarex3.php @@ -0,0 +1,21 @@ +GetShortMonth(); +$graph->SetTitles($titles); + +$plot = new RadarPlot($data); +$plot->SetFillColor('lightblue'); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/radarex4.php b/Societes/ric/jpgraph/Examples/radarex4.php new file mode 100755 index 00000000..f64f6148 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarex4.php @@ -0,0 +1,28 @@ +SetShadow(); + +// Create the titles for the axis +$titles = $gDateLocale->GetShortMonth(); +$graph->SetTitles($titles); + +// Add grid lines +$graph->grid->Show(); +$graph->grid->SetLineStyle('dashed'); + +$plot = new RadarPlot($data); +$plot->SetFillColor('lightblue'); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/radarex5.php b/Societes/ric/jpgraph/Examples/radarex5.php new file mode 100755 index 00000000..6ee42aef --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarex5.php @@ -0,0 +1,26 @@ +GetShortMonth(); +$graph->SetTitles($titles); + +// Add grid lines +$graph->grid->Show(); +$graph->grid->SetColor('darkred'); +$graph->grid->SetLineStyle('dotted'); + +$plot = new RadarPlot($data); +$plot->SetFillColor('lightblue'); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/radarex6.1.php b/Societes/ric/jpgraph/Examples/radarex6.1.php new file mode 100755 index 00000000..e6f9a50e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarex6.1.php @@ -0,0 +1,45 @@ +SetShadow(); + +// Create the titles for the axis +$titles = $gDateLocale->GetShortMonth(); +$graph->SetTitles($titles); +$graph->SetColor('lightyellow'); + +// ADjust the position to make more room +// for the legend +$graph->SetCenter(0.4,0.55); +$graph->SetSize(0.6); + +// Add grid lines +$graph->grid->Show(); +$graph->grid->SetColor('darkred'); +$graph->grid->SetLineStyle('dotted'); + +$plot = new RadarPlot($data); +$plot->SetFillColor('lightblue'); +$plot->SetLegend("QA results"); + +$plot2 = new RadarPlot($data2); +$plot2->SetLegend("Target"); +$plot2->SetColor('red'); +$plot2->SetFill(false); +$plot2->SetLineWeight(2); + + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Add($plot2); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/radarex6.php b/Societes/ric/jpgraph/Examples/radarex6.php new file mode 100755 index 00000000..d702f294 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarex6.php @@ -0,0 +1,35 @@ +SetShadow(); + +// Create the titles for the axis +$titles = $gDateLocale->GetShortMonth(); +$graph->SetTitles($titles); +$graph->SetColor('lightyellow'); + +// ADjust the position to make more room +// for the legend +$graph->SetCenter(0.45,0.5); + +// Add grid lines +$graph->grid->Show(); +$graph->grid->SetColor('darkred'); +$graph->grid->SetLineStyle('dashed'); + +$plot = new RadarPlot($data); +$plot->SetFillColor('lightblue'); +$plot->SetLegend("QA results"); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/radarex7.php b/Societes/ric/jpgraph/Examples/radarex7.php new file mode 100755 index 00000000..cb44c208 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarex7.php @@ -0,0 +1,48 @@ +SetColor("white"); +$graph->SetShadow(); + +// Position the graph +$graph->SetCenter(0.4,0.55); + +// Setup the axis formatting +$graph->axis->SetFont(FF_FONT1,FS_BOLD); +$graph->axis->SetWeight(2); + +// Setup the grid lines +$graph->grid->SetLineStyle("longdashed"); +$graph->grid->SetColor("navy"); +$graph->grid->Show(); +$graph->HideTickMarks(); + +// Setup graph titles +$graph->title->Set("Quality result"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->SetTitles(array("One","Two","Three","Four","Five","Sex","Seven","Eight","Nine","Ten")); +// Create the first radar plot +$plot = new RadarPlot(array(30,80,60,40,71,81,47)); +$plot->SetLegend("Goal"); +$plot->SetColor("red","lightred"); +$plot->SetFill(false); +$plot->SetLineWeight(2); + +// Create the second radar plot +$plot2 = new RadarPlot(array(70,40,30,80,31,51,14)); +$plot2->SetLegend("Actual"); +$plot2->SetColor("blue","lightred"); + +// Add the plots to the graph +$graph->Add($plot2); +$graph->Add($plot); + +// And output the graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/radarex8.1.php b/Societes/ric/jpgraph/Examples/radarex8.1.php new file mode 100755 index 00000000..e1f1336b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarex8.1.php @@ -0,0 +1,52 @@ +img->SetAntiAliasing(); + +// Set background color and shadow +$graph->SetColor("white"); +$graph->SetShadow(); + +// Position the graph +$graph->SetCenter(0.4,0.55); + +// Setup the axis formatting +$graph->axis->SetFont(FF_FONT1,FS_BOLD); + +// Setup the grid lines +$graph->grid->SetLineStyle("solid"); +$graph->grid->SetColor("navy"); +$graph->grid->Show(); +$graph->HideTickMarks(); + +// Setup graph titles +$graph->title->Set("Quality result"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->SetTitles($gDateLocale->GetShortMonth()); + +// Create the first radar plot +$plot = new RadarPlot(array(70,80,60,90,71,81,47)); +$plot->SetLegend("Goal"); +$plot->SetColor("red","lightred"); +$plot->SetFill(false); +$plot->SetLineWeight(2); + +// Create the second radar plot +$plot2 = new RadarPlot(array(70,40,30,80,31,51,14)); +$plot2->SetLegend("Actual"); +$plot2->SetLineWeight(2); +$plot2->SetColor("blue"); +$plot2->SetFill(false); + +// Add the plots to the graph +$graph->Add($plot2); +$graph->Add($plot); + +// And output the graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/radarex8.php b/Societes/ric/jpgraph/Examples/radarex8.php new file mode 100755 index 00000000..0d6b0f87 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarex8.php @@ -0,0 +1,51 @@ +img->SetAntiAliasing(); + +// Set background color and shadow +$graph->SetColor("white"); +$graph->SetShadow(); + +// Position the graph +$graph->SetCenter(0.4,0.55); + +// Setup the axis formatting +$graph->axis->SetFont(FF_FONT1,FS_BOLD); + +// Setup the grid lines +$graph->grid->SetLineStyle("solid"); +$graph->grid->SetColor("navy"); +$graph->grid->Show(); +$graph->HideTickMarks(); + +// Setup graph titles +$graph->title->Set("Quality result"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->SetTitles($gDateLocale->GetShortMonth()); + +// Create the first radar plot +$plot = new RadarPlot(array(70,80,60,90,71,81,47)); +$plot->SetLegend("Goal"); +$plot->SetColor("red","lightred"); +$plot->SetFill(false); +$plot->SetLineWeight(2); + +// Create the second radar plot +$plot2 = new RadarPlot(array(70,40,30,80,31,51,14)); +$plot2->SetLegend("Actual"); +$plot2->SetLineWeight(2); +$plot2->SetColor("blue"); +$plot2->SetFill(false); + +// Add the plots to the graph +$graph->Add($plot2); +$graph->Add($plot); + +// And output the graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/radarex9.php b/Societes/ric/jpgraph/Examples/radarex9.php new file mode 100755 index 00000000..465ca262 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarex9.php @@ -0,0 +1,33 @@ +title->Set("Accumulated PPM"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,12); + +$graph->subtitle->Set("(according to direction)"); +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10); + + +$graph->SetTitles($titles); +$graph->SetCenter(0.5,0.55); +$graph->HideTickMarks(); +$graph->SetColor('lightyellow'); +$graph->axis->SetColor('darkgray@0.3'); +$graph->grid->SetColor('darkgray@0.3'); +$graph->grid->Show(); + +$graph->SetGridDepth(DEPTH_BACK); + +$plot = new RadarPlot($data); +$plot->SetColor('red@0.2'); +$plot->SetLineWeight(1); +$plot->SetFillColor('red@0.7'); +$graph->Add($plot); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/radarlogex1-aa.php b/Societes/ric/jpgraph/Examples/radarlogex1-aa.php new file mode 100755 index 00000000..8417fb76 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarlogex1-aa.php @@ -0,0 +1,60 @@ +SetScale('log'); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->Set('Logarithmic scale'); +$graph->title->SetMargin(10); + +// Make the radar graph fill out it's bounding box +$graph->SetPlotSize(0.8); +$graph->SetCenter(0.5,0.55); + +// Note: Enabling this results in a very noticable slow +// down of the image generation! And more load on your +// server. +$graph->img->SetAntiAliasing(); + +// Uncomment the following line if you want to supress +// minor tick marks +//$graph->yscale->ticks->SupressMinorTickMarks(); + +// We want the major tick marks to be black and minor +// slightly less noticable +$graph->yscale->ticks->SetMarkColor('black','darkgray'); + +// Set the axis title font +$graph->axis->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->axis->title->SetColor('darkred:0.8'); + +// Use blue axis +$graph->axis->SetColor('blue'); + +$plot = new RadarPlot($data); +$plot->SetLineWeight(1); +$plot->SetColor('forestgreen'); +$plot->SetFillColor('forestgreen@0.9'); + +$plot2 = new RadarPlot($data2); +$plot2->SetLineWeight(2); +$plot2->SetColor('red'); +$plot2->SetFillColor('red@0.9'); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Add($plot2); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/radarlogex1.php b/Societes/ric/jpgraph/Examples/radarlogex1.php new file mode 100755 index 00000000..2d08310e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarlogex1.php @@ -0,0 +1,55 @@ +SetScale('log'); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->Set('Logarithmic scale'); +$graph->title->SetMargin(10); + +// Make the radar graph fill out it's bounding box +$graph->SetPlotSize(0.8); +$graph->SetCenter(0.5,0.55); + +// Uncomment the following line if you want to supress +// minor tick marks +//$graph->yscale->ticks->SupressMinorTickMarks(); + +// We want the major tick marks to be black and minor +// slightly less noticable +$graph->yscale->ticks->SetMarkColor('black','darkgray'); + +// Set the axis title font +$graph->axis->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->axis->title->SetColor('darkred:0.8'); + +// Use blue axis +$graph->axis->SetColor('blue'); + +$plot = new RadarPlot($data); +$plot->SetLineWeight(1); +$plot->SetColor('forestgreen'); +$plot->SetFillColor('forestgreen@0.9'); + +$plot2 = new RadarPlot($data2); +$plot2->SetLineWeight(2); +$plot2->SetColor('red'); +$plot2->SetFillColor('red@0.9'); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Add($plot2); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/radarlogex2.php b/Societes/ric/jpgraph/Examples/radarlogex2.php new file mode 100755 index 00000000..f347141c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarlogex2.php @@ -0,0 +1,47 @@ +img->SetAntiAliasing(); + +// Make the spider graph fill out it's bounding box +$graph->SetPlotSize(0.85); + +// Use logarithmic scale (If you don't use any SetScale() +// the spider graph will default to linear scale +$graph->SetScale("log"); + +// Uncomment the following line if you want to supress +// minor tick marks +// $graph->yscale->ticks->SupressMinorTickMarks(); + +// We want the major tick marks to be black and minor +// slightly less noticable +$graph->yscale->ticks->SetMarkColor("black","darkgray"); + +// Set the axis title font +$graph->axis->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// Use blue axis +$graph->axis->SetColor("blue"); + +$plot = new RadarPlot($data); +$plot->SetLineWeight(2); +$plot->SetColor('forestgreen'); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/radarmarkex1.php b/Societes/ric/jpgraph/Examples/radarmarkex1.php new file mode 100755 index 00000000..f5595e8a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/radarmarkex1.php @@ -0,0 +1,35 @@ +title->Set('Radar with marks'); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,12); + +$graph->SetTitles($titles); +$graph->SetCenter(0.5,0.55); +$graph->HideTickMarks(); +$graph->SetColor('lightgreen@0.7'); +$graph->axis->SetColor('darkgray'); +$graph->grid->SetColor('darkgray'); +$graph->grid->Show(); + +$graph->axis->title->SetFont(FF_ARIAL,FS_NORMAL,12); +$graph->axis->title->SetMargin(5); +$graph->SetGridDepth(DEPTH_BACK); +$graph->SetSize(0.6); + +$plot = new RadarPlot($data); +$plot->SetColor('red@0.2'); +$plot->SetLineWeight(1); +$plot->SetFillColor('red@0.7'); + +$plot->mark->SetType(MARK_IMG_SBALL,'red'); + +$graph->Add($plot); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/rose.gif b/Societes/ric/jpgraph/Examples/rose.gif new file mode 100755 index 00000000..59fe6319 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/rose.gif differ diff --git a/Societes/ric/jpgraph/Examples/rose_example.php b/Societes/ric/jpgraph/Examples/rose_example.php new file mode 100755 index 00000000..7d3d7c57 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/rose_example.php @@ -0,0 +1,57 @@ + array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ), + 1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ), + 2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ), + 3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ), + 4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ), + 5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ), + 6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ), + 7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ), + 8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ), +); + +// Create the graph. These two calls are always required +$graph = new Graph(400,300); + +$graph->SetScale("textlin"); +if ($theme) { + $graph->SetTheme(new $theme()); +} +$theme_class = new RoseTheme; +$graph->SetTheme($theme_class); + +$plot = array(); +// Create the bar plots +for ($i = 0; $i < 4; $i++) { + $plot[$i] = new BarPlot($data[$i]); + $plot[$i]->SetLegend('plot'.($i+1)); +} +//$acc1 = new AccBarPlot(array($plot[0], $plot[1])); +//$acc1->value->Show(); +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] )); + +for ($i = 4; $i < 8; $i++) { + $plot[$i] = new LinePlot($data[$i]); + $plot[$i]->SetLegend('plot'.$i); + $plot[$i]->value->Show(); +} + +$graph->Add($gbplot); +$graph->Add($plot[4]); + +$title = "RoseTheme Example"; +$title = mb_convert_encoding($title,'UTF-8'); +$graph->title->Set($title); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/rotateex1.php b/Societes/ric/jpgraph/Examples/rotateex1.php new file mode 100755 index 00000000..ead398df --- /dev/null +++ b/Societes/ric/jpgraph/Examples/rotateex1.php @@ -0,0 +1,47 @@ +clearTheme(); +$graph->SetAngle(40); +$graph->img->SetMargin(80,80,80,80); +$graph->SetScale("textlin"); +$graph->SetY2Scale("lin"); +$graph->SetShadow(); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); +$graph->y2axis->SetColor("orange"); + +$graph->title->Set("Example 1 rotated graph (40 degree)"); +$graph->legend->Pos(0.05,0.1,"right","top"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/rotex0.php b/Societes/ric/jpgraph/Examples/rotex0.php new file mode 100755 index 00000000..1c241a6a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/rotex0.php @@ -0,0 +1,21 @@ +clearTheme(); +$graph->SetMargin(30,90,30,30); +$graph->SetScale("textlin"); + +$line = new LinePlot($ydata); +$line->SetLegend('2002'); +$line->SetColor('darkred'); +$line->SetWeight(2); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/rotex1.php b/Societes/ric/jpgraph/Examples/rotex1.php new file mode 100755 index 00000000..d2cec6af --- /dev/null +++ b/Societes/ric/jpgraph/Examples/rotex1.php @@ -0,0 +1,23 @@ +clearTheme(); +$graph->SetMargin(30,90,30,30); +$graph->SetScale("textlin"); + +$graph->img->SetAngle(45); + +$line = new LinePlot($ydata); +$line->SetLegend('2002'); +$line->SetColor('darkred'); +$line->SetWeight(2); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/rotex2.php b/Societes/ric/jpgraph/Examples/rotex2.php new file mode 100755 index 00000000..55d46782 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/rotex2.php @@ -0,0 +1,23 @@ +clearTheme(); +$graph->SetMargin(30,90,30,30); +$graph->SetScale("textlin"); + +$graph->img->SetAngle(90); + +$line = new LinePlot($ydata); +$line->SetLegend('2002'); +$line->SetColor('darkred'); +$line->SetWeight(2); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/rotex3.php b/Societes/ric/jpgraph/Examples/rotex3.php new file mode 100755 index 00000000..2ed76fb1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/rotex3.php @@ -0,0 +1,24 @@ +clearTheme(); +$graph->SetMargin(30,90,30,30); +$graph->SetScale("textlin"); + +$graph->img->SetAngle(45); +$graph->img->SetCenter(floor(270/2),floor(170/2)); + +$line = new LinePlot($ydata); +$line->SetLegend('2002'); +$line->SetColor('darkred'); +$line->SetWeight(2); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/rotex4.php b/Societes/ric/jpgraph/Examples/rotex4.php new file mode 100755 index 00000000..14a5fe9e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/rotex4.php @@ -0,0 +1,24 @@ +clearTheme(); +$graph->SetMargin(30,90,30,30); +$graph->SetScale("textlin"); + +$graph->img->SetAngle(90); +$graph->img->SetCenter(floor(270/2),floor(170/2)); + +$line = new LinePlot($ydata); +$line->SetLegend('2002'); +$line->SetColor('darkred'); +$line->SetWeight(2); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/rotex5.php b/Societes/ric/jpgraph/Examples/rotex5.php new file mode 100755 index 00000000..43e528a7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/rotex5.php @@ -0,0 +1,24 @@ +clearTheme(); +$graph->SetMargin(30,90,30,30); +$graph->SetScale("textlin"); + +$graph->img->SetAngle(-30); +$graph->img->SetCenter(30,170-30); + +$line = new LinePlot($ydata); +$line->SetLegend('2002'); +$line->SetColor('darkred'); +$line->SetWeight(2); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/saab_95.jpg b/Societes/ric/jpgraph/Examples/saab_95.jpg new file mode 100755 index 00000000..189b0d48 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/saab_95.jpg differ diff --git a/Societes/ric/jpgraph/Examples/scatter_csimex1.php b/Societes/ric/jpgraph/Examples/scatter_csimex1.php new file mode 100755 index 00000000..2ab4306d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/scatter_csimex1.php @@ -0,0 +1,44 @@ +SetShadow(); +$graph->SetScale("linlin"); + +//$graph->img->SetMargin(40,40,40,40); + +$graph->title->Set("Scatter plot with Image Map"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Client side image map targets +$targ=array("pie_csimex1.php#1","pie_csimex1.php#2","pie_csimex1.php#3", +"pie_csimex1.php#4","pie_csimex1.php#5","pie_csimex1.php#6", +"pie_csimex1.php#7","pie_csimex1.php#8","pie_csimex1.php#9" ); + +// Strings to put as "alts" (and "title" value) +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); + +// Create a new scatter plot +$sp1 = new ScatterPlot($datay,$datax); + +// Use diamonds as markerss +$sp1->mark->SetType(MARK_DIAMOND); +$sp1->mark->SetWidth(10); + +// Set the scatter plot image map targets +$sp1->SetCSIMTargets($targ,$alts); + +// Add the plot +$graph->Add($sp1); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> diff --git a/Societes/ric/jpgraph/Examples/scatterex1.php b/Societes/ric/jpgraph/Examples/scatterex1.php new file mode 100755 index 00000000..07fad2e3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/scatterex1.php @@ -0,0 +1,23 @@ +clearTheme(); +$graph->SetScale("linlin"); + +$graph->img->SetMargin(40,40,40,40); +$graph->SetShadow(); + +$graph->title->Set("A simple scatter plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$sp1 = new ScatterPlot($datay,$datax); + +$graph->Add($sp1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/scatterex2.php b/Societes/ric/jpgraph/Examples/scatterex2.php new file mode 100755 index 00000000..e2b73db2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/scatterex2.php @@ -0,0 +1,26 @@ +clearTheme(); +$graph->SetScale("linlin"); + +$graph->img->SetMargin(40,40,40,40); +$graph->SetShadow(); + +$graph->title->Set("A simple scatter plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("red"); +$sp1->mark->SetWidth(8); + +$graph->Add($sp1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/scatterlinkex1.php b/Societes/ric/jpgraph/Examples/scatterlinkex1.php new file mode 100755 index 00000000..c8eb3fa1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/scatterlinkex1.php @@ -0,0 +1,25 @@ +clearTheme(); +$graph->img->SetMargin(40,40,40,40); +$graph->img->SetAntiAliasing(); +$graph->SetScale("linlin"); +$graph->SetShadow(); +$graph->title->Set("Linked Scatter plot ex1"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$sp1 = new ScatterPlot($datay,$datax); +$sp1->SetLinkPoints(true,"red",2); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("navy"); +$sp1->mark->SetWidth(3); + +$graph->Add($sp1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/scatterlinkex2.php b/Societes/ric/jpgraph/Examples/scatterlinkex2.php new file mode 100755 index 00000000..b5d6f04d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/scatterlinkex2.php @@ -0,0 +1,42 @@ +clearTheme(); +$graph->SetScale("linlin"); + +$graph->img->SetMargin(40,40,40,40); + +$graph->SetShadow(); +$graph->title->Set("Linked scatter plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// 10% top and bottom grace +$graph->yscale->SetGrace(5,5); +$graph->xscale->SetGrace(1,1); + +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("red"); +$sp1->SetColor("blue"); + +//$sp1->SetWeight(3); +$sp1->mark->SetWidth(4); +$sp1->SetLinkPoints(); + +$graph->Add($sp1); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/scatterlinkex3.php b/Societes/ric/jpgraph/Examples/scatterlinkex3.php new file mode 100755 index 00000000..e8309e1b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/scatterlinkex3.php @@ -0,0 +1,44 @@ +clearTheme(); +$graph->SetScale('linlin'); +$graph->SetShadow(); +$graph->SetAxisStyle(AXSTYLE_BOXOUT); + +$graph->img->SetMargin(50,50,60,40); + +$graph->title->Set('Linked scatter plot'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->subtitle->Set('(BOXOUT Axis style)'); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); + + +// 10% top and bottom grace +$graph->yscale->SetGrace(5,5); +$graph->xscale->SetGrace(1,1); + +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor('red'); +$sp1->SetColor('blue'); + +$sp1->mark->SetWidth(4); +$sp1->link->Show(); +$sp1->link->SetStyle('dotted'); + +$graph->Add($sp1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/scatterlinkex4.php b/Societes/ric/jpgraph/Examples/scatterlinkex4.php new file mode 100755 index 00000000..34865c9f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/scatterlinkex4.php @@ -0,0 +1,44 @@ +clearTheme(); +$graph->SetScale('linlin'); +$graph->SetShadow(); +$graph->SetAxisStyle(AXSTYLE_BOXIN); + +$graph->img->SetMargin(50,50,60,40); + +$graph->title->Set('Linked scatter plot'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->subtitle->Set('(BOXIN Axis style)'); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); + +// 10% top and bottom grace +$graph->yscale->SetGrace(5,5); +$graph->xscale->SetGrace(1,1); + +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor('red'); +$sp1->SetColor('blue'); + +$sp1->mark->SetWidth(4); +$sp1->link->Show(); +$sp1->link->SetWeight(2); +$sp1->link->SetColor('red@0.7'); + + +$graph->Add($sp1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/scatterrotex1.php b/Societes/ric/jpgraph/Examples/scatterrotex1.php new file mode 100755 index 00000000..ca0b12f1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/scatterrotex1.php @@ -0,0 +1,36 @@ +clearTheme(); +$graph->SetScale("linlin"); + +$graph->Set90AndMargin(40,40,40,40); +$graph->SetShadow(); + +$graph->title->Set("A 90 degrees rotated scatter plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Adjust the label align for X-axis so they look good rotated +$graph->xaxis->SetLabelAlign('right','center','right'); + +// Adjust the label align for Y-axis so they look good rotated +$graph->yaxis->SetLabelAlign('center','bottom'); + +$graph->xaxis->SetTitle('X-Axis title','low'); +$graph->xaxis->title->SetAngle(90); +$graph->xaxis->title->SetMargin(15); + +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("red"); +$sp1->mark->SetWidth(5); + +$graph->Add($sp1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/show-example.php b/Societes/ric/jpgraph/Examples/show-example.php new file mode 100755 index 00000000..b95ac274 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/show-example.php @@ -0,0 +1,24 @@ + + + + + Test suite for JpGraph - <?php echo $target; ?> + + + + "; + else + echo ""; + ?> + + + diff --git a/Societes/ric/jpgraph/Examples/show-image.php b/Societes/ric/jpgraph/Examples/show-image.php new file mode 100755 index 00000000..85a987cd --- /dev/null +++ b/Societes/ric/jpgraph/Examples/show-image.php @@ -0,0 +1,10 @@ + + + + + Image <?php echo basename($target); ?> + + +<?php echo basename($target); ?> + + diff --git a/Societes/ric/jpgraph/Examples/show-source.php b/Societes/ric/jpgraph/Examples/show-source.php new file mode 100755 index 00000000..248f2dee --- /dev/null +++ b/Societes/ric/jpgraph/Examples/show-source.php @@ -0,0 +1 @@ + diff --git a/Societes/ric/jpgraph/Examples/smallstaticbandsex1.php b/Societes/ric/jpgraph/Examples/smallstaticbandsex1.php new file mode 100755 index 00000000..c78fc8bc --- /dev/null +++ b/Societes/ric/jpgraph/Examples/smallstaticbandsex1.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_RDIAG,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->Add($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_RDIAG'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/smallstaticbandsex10.php b/Societes/ric/jpgraph/Examples/smallstaticbandsex10.php new file mode 100755 index 00000000..88a091ca --- /dev/null +++ b/Societes/ric/jpgraph/Examples/smallstaticbandsex10.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_DIAGCROSS,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->Add($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_DIAGCROSS'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/smallstaticbandsex11.php b/Societes/ric/jpgraph/Examples/smallstaticbandsex11.php new file mode 100755 index 00000000..88a091ca --- /dev/null +++ b/Societes/ric/jpgraph/Examples/smallstaticbandsex11.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_DIAGCROSS,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->Add($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_DIAGCROSS'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/smallstaticbandsex2.php b/Societes/ric/jpgraph/Examples/smallstaticbandsex2.php new file mode 100755 index 00000000..d9add7af --- /dev/null +++ b/Societes/ric/jpgraph/Examples/smallstaticbandsex2.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_LDIAG,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->Add($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_LDIAG'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/smallstaticbandsex3.php b/Societes/ric/jpgraph/Examples/smallstaticbandsex3.php new file mode 100755 index 00000000..aa2a94d7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/smallstaticbandsex3.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_SOLID,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->Add($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_SOLID'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/smallstaticbandsex4.php b/Societes/ric/jpgraph/Examples/smallstaticbandsex4.php new file mode 100755 index 00000000..e4bd999c --- /dev/null +++ b/Societes/ric/jpgraph/Examples/smallstaticbandsex4.php @@ -0,0 +1,42 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4'); +$band->SetDensity(80); +$band->ShowFrame(true); +$graph->Add($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_3DPLANE, Density=60'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/smallstaticbandsex5.php b/Societes/ric/jpgraph/Examples/smallstaticbandsex5.php new file mode 100755 index 00000000..d7f9ebb2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/smallstaticbandsex5.php @@ -0,0 +1,42 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_HVCROSS,15,35,'khaki4'); +$band->ShowFrame(true); +$band->SetOrder(DEPTH_FRONT); +$graph->Add($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_HVCROSS, In front'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/smallstaticbandsex6.php b/Societes/ric/jpgraph/Examples/smallstaticbandsex6.php new file mode 100755 index 00000000..506e1a80 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/smallstaticbandsex6.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_VLINE,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->Add($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_VLINE'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/smallstaticbandsex7.php b/Societes/ric/jpgraph/Examples/smallstaticbandsex7.php new file mode 100755 index 00000000..e07dc6a9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/smallstaticbandsex7.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_HLINE,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->Add($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_HLINE'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/smallstaticbandsex8.php b/Societes/ric/jpgraph/Examples/smallstaticbandsex8.php new file mode 100755 index 00000000..6fbe40fb --- /dev/null +++ b/Societes/ric/jpgraph/Examples/smallstaticbandsex8.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->Add($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_3DPLANE'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/smallstaticbandsex9.php b/Societes/ric/jpgraph/Examples/smallstaticbandsex9.php new file mode 100755 index 00000000..b6126d80 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/smallstaticbandsex9.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_HVCROSS,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->Add($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_HVCROSS'); + + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/softy_example.php b/Societes/ric/jpgraph/Examples/softy_example.php new file mode 100755 index 00000000..4d21fc98 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/softy_example.php @@ -0,0 +1,58 @@ + array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ), + 1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ), + 2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ), + 3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ), + 4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ), + 5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ), + 6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ), + 7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ), + 8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ), +); + + +// Create the graph. These two calls are always required +$graph = new Graph(400,300); + +$graph->SetScale("textlin"); +if ($theme) { + $graph->SetTheme(new $theme()); +} +$theme_class = new SoftyTheme; +$graph->SetTheme($theme_class); + +$plot = array(); +// Create the bar plots +for ($i = 0; $i < 4; $i++) { + $plot[$i] = new BarPlot($data[$i]); + $plot[$i]->SetLegend('plot'.($i+1)); +} +//$acc1 = new AccBarPlot(array($plot[0], $plot[1])); +//$acc1->value->Show(); +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] )); + +for ($i = 4; $i < 8; $i++) { + $plot[$i] = new LinePlot($data[$i]); + $plot[$i]->SetLegend('plot'.$i); + $plot[$i]->value->Show(); +} + +$graph->Add($gbplot); +$graph->Add($plot[4]); + +$title = "SoftyTheme Example"; +$title = mb_convert_encoding($title,'UTF-8'); +$graph->title->Set($title); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/splineex1.php b/Societes/ric/jpgraph/Examples/splineex1.php new file mode 100755 index 00000000..c1de05ff --- /dev/null +++ b/Societes/ric/jpgraph/Examples/splineex1.php @@ -0,0 +1,56 @@ +Get(50); + +// Create the graph +$g = new Graph(300,200); +$g->clearTheme(); +$g->SetMargin(30,20,40,30); +$g->title->Set("Natural cubic splines"); +$g->title->SetFont(FF_ARIAL,FS_NORMAL,12); +$g->subtitle->Set('(Control points shown in red)'); +$g->subtitle->SetColor('darkred'); +$g->SetMarginColor('lightblue'); + +//$g->img->SetAntiAliasing(); + +// We need a linlin scale since we provide both +// x and y coordinates for the data points. +$g->SetScale('linlin'); + +// We want 1 decimal for the X-label +$g->xaxis->SetLabelFormat('%1.1f'); + +// We use a scatterplot to illustrate the original +// contro points. +$splot = new ScatterPlot($ydata,$xdata); + +// +$splot->mark->SetFillColor('red@0.3'); +$splot->mark->SetColor('red@0.5'); + +// And a line plot to stroke the smooth curve we got +// from the original control points +$lplot = new LinePlot($newy,$newx); +$lplot->SetColor('navy'); + +// Add the plots to the graph and stroke +$g->Add($lplot); +$g->Add($splot); +$g->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/staticbandbarex1.php b/Societes/ric/jpgraph/Examples/staticbandbarex1.php new file mode 100755 index 00000000..9397e14e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/staticbandbarex1.php @@ -0,0 +1,53 @@ +clearTheme(); +$graph->img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("(Department X)"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$graph->Add(new PlotBand(HORIZONTAL,BAND_HLINE,0,10)); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/staticbandbarex2.php b/Societes/ric/jpgraph/Examples/staticbandbarex2.php new file mode 100755 index 00000000..2f90cab1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/staticbandbarex2.php @@ -0,0 +1,53 @@ +clearTheme(); +$graph->img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("(Department X)"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$graph->Add(new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","red",2)); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/staticbandbarex3.php b/Societes/ric/jpgraph/Examples/staticbandbarex3.php new file mode 100755 index 00000000..76184f2f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/staticbandbarex3.php @@ -0,0 +1,59 @@ +clearTheme(); +$graph->img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("(Department X)"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add upper and lower band and use no frames +$uband=new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","green"); +$uband->ShowFrame(false); +$lband=new PlotBand(HORIZONTAL,BAND_LDIAG,"min",0,"red"); +$lband->ShowFrame(false); + +$graph->Add($uband); +$graph->Add($lband); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/staticbandbarex4.php b/Societes/ric/jpgraph/Examples/staticbandbarex4.php new file mode 100755 index 00000000..e111ebc1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/staticbandbarex4.php @@ -0,0 +1,61 @@ +clearTheme(); +$graph->img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("(Department X)"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add upper and lower band and use no frames +$uband=new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","green"); +$uband->ShowFrame(false); +$uband->SetDensity(50); // 50% line density +$lband=new PlotBand(HORIZONTAL,BAND_LDIAG,"min",0,"red"); +$lband->ShowFrame(false); +$lband->SetDensity(20); // 20% line density + +$graph->Add($uband); +$graph->Add($lband); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/staticbandbarex5.php b/Societes/ric/jpgraph/Examples/staticbandbarex5.php new file mode 100755 index 00000000..26893a55 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/staticbandbarex5.php @@ -0,0 +1,64 @@ +clearTheme(); +$graph->img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("(Department X)"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add upper and lower band and use no frames +$band[0]=new PlotBand(HORIZONTAL,BAND_RDIAG,10,20,"green"); +$band[0]->ShowFrame(false); +$band[0]->SetDensity(30); +$band[1]=new PlotBand(HORIZONTAL,BAND_LDIAG,-20,-10,"red"); +$band[1]->ShowFrame(false); +$band[1]->SetDensity(40); +$band[2]=new PlotBand(HORIZONTAL,BAND_LDIAG,"min",-20,"red"); +$band[2]->ShowFrame(false); +$band[2]->SetDensity(80); + +// We can also add band in an array +$graph->Add($band); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/staticbandbarex6.php b/Societes/ric/jpgraph/Examples/staticbandbarex6.php new file mode 100755 index 00000000..7237c2be --- /dev/null +++ b/Societes/ric/jpgraph/Examples/staticbandbarex6.php @@ -0,0 +1,74 @@ +clearTheme(); +$graph->img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("Shows some possible patterns for bands"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetShadow(); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add upper and lower band and use no frames +$band[0]=new PlotBand(HORIZONTAL,BAND_RDIAG,10,20,"green"); +$band[0]->ShowFrame(false); +$band[1]=new PlotBand(HORIZONTAL,BAND_LDIAG,-20,-10,"red"); +$band[1]->ShowFrame(false); +$band[1]->SetDensity(20); +$band[2]=new PlotBand(HORIZONTAL,BAND_DIAGCROSS,"min",-20,"red"); +$band[2]->ShowFrame(false); +$band[2]->SetDensity(40); +$band[3]=new PlotBand(VERTICAL,BAND_HLINE,0,1,"darkgray"); +$band[3]->ShowFrame(false); +$band[3]->SetOrder(DEPTH_FRONT); +$band[4]=new PlotBand(VERTICAL,BAND_HVCROSS,5,"max","darkgray"); +$band[4]->ShowFrame(false); +$band[4]->SetOrder(DEPTH_FRONT); +$band[5]=new PlotBand(HORIZONTAL,BAND_SOLID,20,"max","lightgreen"); +$band[6]=new PlotBand(HORIZONTAL,BAND_3DPLANE,-10,0,"blue"); +$band[6]->SetDensity(70); +$graph->Add($band); + +$graph->AddLine(new PlotLine(HORIZONTAL,0,"black",2)); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/staticbandbarex7.php b/Societes/ric/jpgraph/Examples/staticbandbarex7.php new file mode 100755 index 00000000..c6fbe031 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/staticbandbarex7.php @@ -0,0 +1,63 @@ +clearTheme(); +$graph->img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("Use of static line, 3D and solid band"); + +// Turn off Y-grid (it's on by default) +$graph->ygrid->Show(false); + +// Add 10% grace ("space") at top of Y-scale. +$graph->yscale->SetGrace(10); +$graph->yscale->SetAutoMin(-20); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetShadow("darkblue"); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add upper and lower band and use no frames +$band[0]=new PlotBand(HORIZONTAL,BAND_3DPLANE,"min",0,"blue"); +$band[0]->ShowFrame(false); +$band[0]->SetDensity(20); +$band[1]=new PlotBand(HORIZONTAL,BAND_SOLID,0,"max","steelblue"); +$band[1]->ShowFrame(false); +$graph->Add($band); + +$graph->Add(new PlotLine(HORIZONTAL,0,"black",2)); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/staticlinebarex1.php b/Societes/ric/jpgraph/Examples/staticlinebarex1.php new file mode 100755 index 00000000..016e0e5e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/staticlinebarex1.php @@ -0,0 +1,56 @@ +clearTheme(); +$graph->img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("(Department X)"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetShadow(); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add mark graph with static lines +$graph->AddLine(new PlotLine(HORIZONTAL,0,"black",2)); +$graph->AddLine(new PlotLine(VERTICAL,3,"black",2)); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/stockex1.php b/Societes/ric/jpgraph/Examples/stockex1.php new file mode 100755 index 00000000..694fabaa --- /dev/null +++ b/Societes/ric/jpgraph/Examples/stockex1.php @@ -0,0 +1,34 @@ +clearTheme(); +$graph->SetScale("textlin"); +$graph->SetMarginColor('lightblue'); +$graph->title->Set('Stockchart example'); + +// Create a new stock plot +$p1 = new StockPlot($datay); + +// Width of the bars (in pixels) +$p1->SetWidth(9); + +// Uncomment the following line to hide the horizontal end lines +//$p1->HideEndLines(); + +// Add the plot to the graph and send it back to the browser +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/stockex2.php b/Societes/ric/jpgraph/Examples/stockex2.php new file mode 100755 index 00000000..e038cca0 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/stockex2.php @@ -0,0 +1,39 @@ +SetScale("textlin"); +$graph->SetMarginColor('white'); +$graph->SetFrame(false); +$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5'); +$graph->SetBox(); + +$graph->tabtitle->Set(' Week 34 '); +$graph->tabtitle->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Get week days in curent locale +$days = $gDateLocale->GetShortDay(); +array_shift($days); // Start on monday +$graph->xaxis->SetTickLabels($days); + +// Create stock plot +$p1 = new StockPlot($datay); + +// Indent plot so first and last bar isn't on the edges +$p1->SetCenter(); + +// Add and stroke +$graph->Add($p1); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/stship.jpg b/Societes/ric/jpgraph/Examples/stship.jpg new file mode 100755 index 00000000..7f3bae62 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/stship.jpg differ diff --git a/Societes/ric/jpgraph/Examples/sunflower.gif b/Societes/ric/jpgraph/Examples/sunflower.gif new file mode 100755 index 00000000..b83709f8 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/sunflower.gif differ diff --git a/Societes/ric/jpgraph/Examples/sunspotsex1.php b/Societes/ric/jpgraph/Examples/sunspotsex1.php new file mode 100755 index 00000000..d5edb83e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/sunspotsex1.php @@ -0,0 +1,51 @@ + $datarow ) { + $split = preg_split('/[\s]+/',$datarow); + $aYears[] = substr(trim($split[0]),0,4); + $aSunspots[] = trim($split[1]); + } +} + +$year = array(); +$ydata = array(); +readsunspotdata('yearssn.txt',$year,$ydata); + + // Width and height of the graph +$width = 600; $height = 200; + +// Create a graph instance +$graph = new Graph($width,$height); + +// Specify what scale we want to use, +// int = integer scale for the X-axis +// int = integer scale for the Y-axis +$graph->SetScale('intint'); + +// Setup a title for the graph +$graph->title->Set('Sunspot example'); + +// Setup titles and X-axis labels +$graph->xaxis->title->Set('(year from 1701)'); + +// Setup Y-axis title +$graph->yaxis->title->Set('(# sunspots)'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/sunspotsex2.php b/Societes/ric/jpgraph/Examples/sunspotsex2.php new file mode 100755 index 00000000..817db158 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/sunspotsex2.php @@ -0,0 +1,52 @@ + $datarow ) { + $split = preg_split('/[\s]+/',$datarow); + $aYears[] = substr(trim($split[0]),0,4); + $aSunspots[] = trim($split[1]); + } +} + +$year = array(); +$ydata = array(); +readsunspotdata('yearssn.txt',$year,$ydata); + + // Width and height of the graph +$width = 600; $height = 200; + +// Create a graph instance +$graph = new Graph($width,$height); + +// Specify what scale we want to use, +// int = integer scale for the X-axis +// int = integer scale for the Y-axis +$graph->SetScale('intint'); + +// Setup a title for the graph +$graph->title->Set('Sunspot example'); + +// Setup titles and X-axis labels +$graph->xaxis->title->Set('(year from 1701)'); + +// Setup Y-axis title +$graph->yaxis->title->Set('(# sunspots)'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetFillColor('orange@0.5'); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/sunspotsex3.php b/Societes/ric/jpgraph/Examples/sunspotsex3.php new file mode 100755 index 00000000..cf54cb44 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/sunspotsex3.php @@ -0,0 +1,53 @@ + $datarow ) { + $split = preg_split('/[\s]+/',$datarow); + $aYears[] = substr(trim($split[0]),0,4); + $aSunspots[] = trim($split[1]); + } +} + +$year = array(); +$ydata = array(); +readsunspotdata('yearssn.txt',$year,$ydata); + + // Width and height of the graph +$width = 600; $height = 200; + +// Create a graph instance +$graph = new Graph($width,$height); + +// Specify what scale we want to use, +// int = integer scale for the X-axis +// int = integer scale for the Y-axis +$graph->SetScale('intint'); + +// Setup a title for the graph +$graph->title->Set('Sunspot example'); + +// Setup titles and X-axis labels +$graph->xaxis->title->Set('(year from 1701)'); +$graph->xaxis->SetTickLabels($year); + +// Setup Y-axis title +$graph->yaxis->title->Set('(# sunspots)'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetFillColor('orange@0.5'); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/sunspotsex4.php b/Societes/ric/jpgraph/Examples/sunspotsex4.php new file mode 100755 index 00000000..e0877e03 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/sunspotsex4.php @@ -0,0 +1,53 @@ + $datarow ) { + $split = preg_split('/[\s]+/',$datarow); + $aYears[] = substr(trim($split[0]),0,4); + $aSunspots[] = trim($split[1]); + } +} + +$year = array(); +$ydata = array(); +readsunspotdata('yearssn.txt',$year,$ydata); + + // Width and height of the graph +$width = 600; $height = 200; + +// Create a graph instance +$graph = new Graph($width,$height); + +// Specify what scale we want to use, +// int = integer scale for the X-axis +// int = integer scale for the Y-axis +$graph->SetScale('intint',0,0,0,max($year)-min($year)+1); + +// Setup a title for the graph +$graph->title->Set('Sunspot example'); + +// Setup titles and X-axis labels +$graph->xaxis->title->Set('(year from 1701)'); +$graph->xaxis->SetTickLabels($year); + +// Setup Y-axis title +$graph->yaxis->title->Set('(# sunspots)'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetFillColor('orange@0.5'); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/sunspotsex5.php b/Societes/ric/jpgraph/Examples/sunspotsex5.php new file mode 100755 index 00000000..3d7322a2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/sunspotsex5.php @@ -0,0 +1,57 @@ + $datarow ) { + $split = preg_split('/[\s]+/',$datarow); + $aYears[] = substr(trim($split[0]),0,4); + $aSunspots[] = trim($split[1]); + } +} + +$year = array(); +$ydata = array(); +readsunspotdata('yearssn.txt',$year,$ydata); + +function year_callback($aLabel) { + return 1700+(int)$aLabel; +} + + // Width and height of the graph +$width = 600; $height = 200; + +// Create a graph instance +$graph = new Graph($width,$height); + +// Specify what scale we want to use, +// int = integer scale for the X-axis +// int = integer scale for the Y-axis +$graph->SetScale('intint'); + +// Setup a title for the graph +$graph->title->Set('Sunspot example'); + +// Setup titles and X-axis labels +$graph->xaxis->title->Set('(year from 1701)'); +$graph->xaxis->SetLabelFormatCallback('year_callback'); + +// Setup Y-axis title +$graph->yaxis->title->Set('(# sunspots)'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetFillColor('orange@0.5'); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/sunspotsex6.php b/Societes/ric/jpgraph/Examples/sunspotsex6.php new file mode 100755 index 00000000..2efe6448 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/sunspotsex6.php @@ -0,0 +1,52 @@ + $datarow ) { + $split = preg_split('/[\s]+/',$datarow); + $aYears[] = substr(trim($split[0]),0,4); + $aSunspots[] = trim($split[1]); + } +} + +$year = array(); +$ydata = array(); +readsunspotdata('yearssn.txt',$year,$ydata); + + // Width and height of the graph +$width = 600; $height = 200; + +// Create a graph instance +$graph = new Graph($width,$height); + +// Specify what scale we want to use, +// int = integer scale for the X-axis +// int = integer scale for the Y-axis +$graph->SetScale('intint'); + +// Setup a title for the graph +$graph->title->Set('Sunspot example'); + +// Setup titles and X-axis labels +$graph->xaxis->title->Set('(year from 1701)'); + +// Setup Y-axis title +$graph->yaxis->title->Set('(# sunspots)'); + +// Create the bar plot +$barplot=new BarPlot($ydata); + +// Add the plot to the graph +$graph->Add($barplot); + +// Display the graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/sunspotsex7.php b/Societes/ric/jpgraph/Examples/sunspotsex7.php new file mode 100755 index 00000000..b104f9fe --- /dev/null +++ b/Societes/ric/jpgraph/Examples/sunspotsex7.php @@ -0,0 +1,56 @@ + $datarow ) { + $split = preg_split('/[\s]+/',$datarow); + $aYears[] = substr(trim($split[0]),0,4); + $aSunspots[] = trim($split[1]); + } +} + +$year = array(); +$ydata = array(); +readsunspotdata('yearssn.txt',$year,$ydata); + +// Just keep the last 20 values in the arrays +$year = array_slice($year, -20); +$ydata = array_slice($ydata, -20); + + // Width and height of the graph +$width = 600; $height = 200; + +// Create a graph instance +$graph = new Graph($width,$height); + +// Specify what scale we want to use, +// text = txt scale for the X-axis +// int = integer scale for the Y-axis +$graph->SetScale('textint'); + +// Setup a title for the graph +$graph->title->Set('Sunspot example'); + +// Setup titles and X-axis labels +$graph->xaxis->title->Set('(year)'); +$graph->xaxis->SetTickLabels($year); + +// Setup Y-axis title +$graph->yaxis->title->Set('(# sunspots)'); + +// Create the bar plot +$barplot=new BarPlot($ydata); + +// Add the plot to the graph +$graph->Add($barplot); + +// Display the graph +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/table_flagex1.php b/Societes/ric/jpgraph/Examples/table_flagex1.php new file mode 100755 index 00000000..8729561d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_flagex1.php @@ -0,0 +1,70 @@ +Set($data); +$table->SetFont(FF_TIMES,FS_NORMAL,11); + +// Adjust the font for row 0 and 6 +$table->SetColFont(0,FF_ARIAL,FS_BOLD,11); +$table->SetRowFont(6,FF_TIMES,FS_BOLD,12); + +// Set the minimum heigth/width +$table->SetMinRowHeight(2,10); +$table->SetMinColWidth(70); + +// Add some padding (in pixels) +$table->SetRowPadding(2,0); +$table->SetRowGrid(6,1,'darkgray',TGRID_DOUBLE2); + +// Setup the grid +$table->SetGrid(0); +$table->SetRowGrid(6,1,'black',TGRID_DOUBLE2); + +// Merge all cells in row 0 +$table->MergeRow(0); + +// Set aligns +$table->SetAlign(3,0,6,6,'right'); +$table->SetRowAlign(1,'center'); +$table->SetRowAlign(2,'center'); + +// Set background colors +$table->SetRowFillColor(0,'lightgray@0.5'); +$table->SetColFillColor(0,'lightgray@0.5'); + +// Add the country flags in row 1 +$n = count($countries); +for($i=0; $i < $n; ++$i ) { + $table->SetCellCountryFlag(1,$i+1,$countries[$i],0.5); + $table->SetCellImageConstrain(1,$i+1,TIMG_HEIGHT,20); +} + +// Add the table to the graph +$graph->Add($table); + +// Send back the table graph to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_howto1.php b/Societes/ric/jpgraph/Examples/table_howto1.php new file mode 100755 index 00000000..bb50fa03 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_howto1.php @@ -0,0 +1,21 @@ +Set($data); + +// Add the table to the graph +$graph->Add($table); + +// ... and send back the table to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_howto2.php b/Societes/ric/jpgraph/Examples/table_howto2.php new file mode 100755 index 00000000..69d25e6b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_howto2.php @@ -0,0 +1,25 @@ +Set($data); + +// Merge all cellsn in the rectangle with +// top left corner = (0,2) and bottom right = (1,3) +$table->MergeCells(0,2,1,3); + +// Add the table to the graph +$graph->Add($table); + +// ... and send back the table to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_howto3.php b/Societes/ric/jpgraph/Examples/table_howto3.php new file mode 100755 index 00000000..26417b4a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_howto3.php @@ -0,0 +1,24 @@ +Set($data); + +// Merge all cells in row 0 +$table->MergeRow(0); + +// Add table to graph +$graph->Add($table); + +// ... and send back the table to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_howto4.php b/Societes/ric/jpgraph/Examples/table_howto4.php new file mode 100755 index 00000000..d093fcb3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_howto4.php @@ -0,0 +1,28 @@ +Set($data); + +// Merge all cells in row 0 +$table->MergeRow(0); + +// Set foreground and background color +$table->SetCellFillColor(0,0,'orange@0.7'); +$table->SetCellColor(0,0,'darkred'); + +// Add the table to the graph +$graph->Add($table); + +// and send it back to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_howto5.php b/Societes/ric/jpgraph/Examples/table_howto5.php new file mode 100755 index 00000000..252318af --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_howto5.php @@ -0,0 +1,30 @@ +Set($data); + +// Merge all cells in row 0 +$table->MergeRow(0); + +// Adjust font in cell (0,0) +$table->SetCellFont(0,0,FF_ARIAL,FS_BOLD,14); + +// Set left align for all cells in rectangle (0,0) - (0,3) +$table->SetAlign(0,0,0,3,'Left'); + +// Add table to graph +$graph->Add($table); + +// ... send it back to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_howto6.php b/Societes/ric/jpgraph/Examples/table_howto6.php new file mode 100755 index 00000000..c776494e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_howto6.php @@ -0,0 +1,32 @@ +Set($data); + +// Merge all cells in row 0 +$table->MergeRow(0); + +// Setup font and color +$table->SetCellFont(0,0,FF_ARIAL,FS_BOLD,14); +$table->SetRowFillColor(0,'orange@0.5'); +$table->SetRowColor(0,'darkred'); + +// Setup the minimum width of all columns +$table->SetMinColWidth(35); + +// Add table to the graph +$graph->Add($table); + +// ... send it back to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_howto7.1.php b/Societes/ric/jpgraph/Examples/table_howto7.1.php new file mode 100755 index 00000000..4dbe52d7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_howto7.1.php @@ -0,0 +1,34 @@ +Set($data); + +// Set default font in entire table +$table->SetFont(FF_ARIAL,FS_NORMAL,11); + +// Setup font and color for row = 2 +$table->SetRowFont(2,FF_ARIAL,FS_BOLD,11); +$table->SetRowFillColor(2,'orange@0.5'); + +// Setup minimum color width +$table->SetMinColWidth(35); + +// Setup grid on row 2 +$table->SetRowGrid(2,1,'black',TGRID_DOUBLE); + +// Add table to the graph +$graph->Add($table); + +// and send it back to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_howto7.2.php b/Societes/ric/jpgraph/Examples/table_howto7.2.php new file mode 100755 index 00000000..8a159f8a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_howto7.2.php @@ -0,0 +1,34 @@ +Set($data); + +// Set default font in entire table +$table->SetFont(FF_ARIAL,FS_NORMAL,11); + +// Setup font and color for row = 2 +$table->SetRowFont(2,FF_ARIAL,FS_BOLD,11); +$table->SetRowFillColor(2,'orange@0.5'); + +// Setup minimum color width +$table->SetMinColWidth(35); + +// Setup grid on row 2 +$table->SetRowGrid(2,1,'black',TGRID_DOUBLE2); + +// Add table to the graph +$graph->Add($table); + +// and send it back to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_howto7.php b/Societes/ric/jpgraph/Examples/table_howto7.php new file mode 100755 index 00000000..8a159f8a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_howto7.php @@ -0,0 +1,34 @@ +Set($data); + +// Set default font in entire table +$table->SetFont(FF_ARIAL,FS_NORMAL,11); + +// Setup font and color for row = 2 +$table->SetRowFont(2,FF_ARIAL,FS_BOLD,11); +$table->SetRowFillColor(2,'orange@0.5'); + +// Setup minimum color width +$table->SetMinColWidth(35); + +// Setup grid on row 2 +$table->SetRowGrid(2,1,'black',TGRID_DOUBLE2); + +// Add table to the graph +$graph->Add($table); + +// and send it back to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_howto8.php b/Societes/ric/jpgraph/Examples/table_howto8.php new file mode 100755 index 00000000..a89785b3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_howto8.php @@ -0,0 +1,43 @@ +Set($data); + +// Setup overall table font +$table->SetFont(FF_ARIAL,FS_NORMAL,11); + +// Setup font and color for row = 2 +$table->SetRowFont(2,FF_ARIAL,FS_BOLD,11); +$table->SetRowFillColor(2,'orange@0.5'); + +// Setup minimum color width +$table->SetMinColWidth(35); + +// Setup overall cell alignment for the table +$table->SetAlign('right'); + +// Setup overall table border +$table->SetBorder(0,'black'); + +// Setup overall table grid +$table->setGrid(0,'black'); + +// Set specific frid for row = 2 +$table->SetRowGrid(2,1,'black',TGRID_DOUBLE2); + +// Add the table to the graph +$graph->Add($table); + +// and send it back to the browser +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_howto9.php b/Societes/ric/jpgraph/Examples/table_howto9.php new file mode 100755 index 00000000..cf6f65f4 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_howto9.php @@ -0,0 +1,46 @@ +Set($data); + +// Setup overall table font +$table->SetFont(FF_ARIAL,FS_NORMAL,11); + +// Setup font and color for row = 2 +$table->SetRowFont(2,FF_ARIAL,FS_BOLD,11); +$table->SetRowFillColor(2,'orange@0.5'); + +// Setup minimum color width +$table->SetMinColWidth(40); + +// Setup overall cell alignment for the table +$table->SetAlign('right'); + +// Setup overall table border +$table->SetBorder(0,'black'); + +// Setup overall table grid +$table->setGrid(0,'black'); + +// Set specific frid for row = 2 +$table->SetRowGrid(2,1,'black',TGRID_DOUBLE2); + +// Setup overall number format in all cells +$table->SetNumberFormat("%0.1f"); + +// Add table to the graph +$graph->Add($table); + +// and send it back to the browser +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_mex0.php b/Societes/ric/jpgraph/Examples/table_mex0.php new file mode 100755 index 00000000..9568874e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_mex0.php @@ -0,0 +1,50 @@ +Set($data); + +// Setup fonts +$table->SetFont(FF_TIMES,FS_NORMAL,11); +$table->SetColFont(0,FF_ARIAL,FS_NORMAL,11); +$table->SetRowFont(0,FF_ARIAL,FS_NORMAL,11); +$table->SetRowFont(4,FF_TIMES,FS_BOLD,14); + +// Turn off the grid +$table->SetGrid(0); + +// Setup color +$table->SetRowFillColor(0,'lightgray@0.5'); +$table->SetRowFillColor(4,'lightgray@0.5'); +$table->SetColFillColor(0,'lightgray@0.5'); +$table->SetFillColor(0,0,4,0,'lightgray@0.5'); + +// Set default minimum column width +$table->SetMinColWidth(45); + +// Set default table alignment +$table->SetAlign('right'); + +// Add table to the graph +$graph->Add($table); + +// and send it back to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_mex00.php b/Societes/ric/jpgraph/Examples/table_mex00.php new file mode 100755 index 00000000..ecd7410d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_mex00.php @@ -0,0 +1,33 @@ +Set($data); +$table->SetFont(FF_TIMES,FS_NORMAL,11); + +// Set default table alignment +$table->SetAlign('right'); + +// Add table to graph +$graph->Add($table); + +// and send it back to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_mex1.php b/Societes/ric/jpgraph/Examples/table_mex1.php new file mode 100755 index 00000000..ce40d0e7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_mex1.php @@ -0,0 +1,56 @@ +Set($data); +$table->SetFont(FF_ARIAL,FS_NORMAL,11); + +// Setup default column width +$table->SetMinColWidth(40); + +// Setup defalt table alignment +$table->SetAlign('right'); + +// Turn off border +$table->SetBorder(0); + +// Turn off grid +$table->setGrid(0); + +// Setup font for row 4 and 0 +$table->SetRowFont(4,FF_ARIAL,FS_BOLD,11); +$table->SetRowFont(0,FF_ARIAL,FS_BOLD,11); + +// Setup color +$table->SetRowFillColor(4,'orange@0.5'); +$table->SetFillColor(0,1,0,6,'teal@0.8'); + + +// Setup grids +$table->SetRowGrid(4,1,'black',TGRID_DOUBLE2); +$table->SetColGrid(1,1,'black',TGRID_SINGLE); +$table->SetRowGrid(1,1,'black',TGRID_SINGLE); + +// Add table to the graph +$graph->Add($table); + +// Send it back to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_mex2.php b/Societes/ric/jpgraph/Examples/table_mex2.php new file mode 100755 index 00000000..a4acc9d8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_mex2.php @@ -0,0 +1,58 @@ +Set($data); +$table->SetFont(FF_ARIAL,FS_NORMAL,11); + +// Set default minimum color width +$table->SetMinColWidth(40); + +// Set default table alignment +$table->SetAlign('right'); + +// Set table border +$table->SetBorder(0); + +// Turn off grid +$table->setGrid(0); + +// Setup font +$table->SetRowFont(4,FF_ARIAL,FS_BOLD,11); +$table->SetRowFont(0,FF_ARIAL,FS_BOLD,11); + +// Setup various grid lines +$table->SetRowGrid(4,2,'black',TGRID_SINGLE); +$table->SetColGrid(1,3,'black',TGRID_SINGLE); +$table->SetRowGrid(1,1,'black',TGRID_SINGLE); + +// Setup various colors +$table->SetFillColor(0,1,0,6,'black'); +$table->SetRowColor(0,'white'); +$table->SetRowFillColor(4,'lightyellow'); +$table->SetFillColor(2,0,2,6,'lightgray'); + +// Add table to the graph +$graph->Add($table); + + +// Send back to client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_mex3.php b/Societes/ric/jpgraph/Examples/table_mex3.php new file mode 100755 index 00000000..981181c4 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_mex3.php @@ -0,0 +1,59 @@ +Set($data); +$table->SetFont(FF_ARIAL,FS_NORMAL,11); + +// Set default minimum color width +$table->SetMinColWidth(40); + +// Set default table alignment +$table->SetAlign('right'); + +// Turn off grid +$table->setGrid(0); + +// Set table border +$table->SetBorder(2); + +// Setup font +$table->SetRowFont(4,FF_ARIAL,FS_BOLD,11); +$table->SetRowFont(0,FF_ARIAL,FS_BOLD,11); +$table->SetFont(1,2,1,3,FF_ARIAL,FS_BOLD,11); + +// Setup grids +$table->SetRowGrid(4,2,'black',TGRID_SINGLE); +$table->SetColGrid(1,1,'black',TGRID_SINGLE); +$table->SetRowGrid(1,1,'black',TGRID_SINGLE); + +// Setup colors +$table->SetFillColor(0,1,0,6,'black'); +$table->SetRowColor(0,'white'); +$table->SetRowFillColor(4,'lightgray@0.3'); +$table->SetFillColor(2,0,2,6,'lightgray@0.6'); +$table->SetFillColor(1,2,1,3,'lightred'); + +// Add table to graph +$graph->Add($table); + +// Send back to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_vtext.php b/Societes/ric/jpgraph/Examples/table_vtext.php new file mode 100755 index 00000000..1b2b349a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_vtext.php @@ -0,0 +1,42 @@ +Set($data); +$table->SetAlign('right'); +$table->SetFont(FF_TIMES,FS_NORMAL,12); +$table->SetCellFont(0,0,FF_ARIAL,FS_BOLD,16); + +// Rotate the entire table 90 degrees +$table->SetTextOrientation(90); +//$table->SetCellTextOrientation(0,0,0); + +// Setup background color for header column +$table->SetColFillColor(0,'lightgray'); + +// Set the imnimum row height +$table->SetMinRowHeight(0,150); + +// Add table to graph +$graph->Add($table); + +// and send it back to the client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/table_vtext_ex1.php b/Societes/ric/jpgraph/Examples/table_vtext_ex1.php new file mode 100755 index 00000000..9581884b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/table_vtext_ex1.php @@ -0,0 +1,42 @@ +Set($data); +$table->SetFont(FF_TIMES,FS_NORMAL,11); + +// Default table alignment +$table->SetAlign('right'); + +// Adjust font in (0,0) +$table->SetCellFont(0,0,FF_TIMES,FS_BOLD,14); + +// Rotate all textxs in row 0 +$table->SetRowTextOrientation(0,90); + +// Adjust alignment in cell (0,0) +$table->SetCellAlign(0,0,'center','center'); + +// Add table to graph +$graph->Add($table); + +// Send back table to client +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/tablebarex1.php b/Societes/ric/jpgraph/Examples/tablebarex1.php new file mode 100755 index 00000000..79567164 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/tablebarex1.php @@ -0,0 +1,70 @@ +img->SetMargin($tablexpos,$rightmargin,30,$height-$tableypos); +$graph->SetScale("textlin"); +$graph->SetMarginColor('white'); + +// Setup titles and fonts +$graph->title->Set('Bar and table'); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,14); +$graph->yaxis->title->Set("Flow"); +$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,12); +$graph->yaxis->title->SetMargin(10); + +// Create the bars and the accbar plot +$bplot = new BarPlot($datay[3]); +$bplot->SetFillColor("orange"); +$bplot2 = new BarPlot($datay[2]); +$bplot2->SetFillColor("red"); +$bplot3 = new BarPlot($datay[1]); +$bplot3->SetFillColor("darkgreen"); +$accbplot = new AccBarPlot(array($bplot,$bplot2,$bplot3)); +$accbplot->value->Show(); +$graph->Add($accbplot); + +//Setup the table +$table = new GTextTable(); +$table->Set($datay); +$table->SetPos($tablexpos,$tableypos+1); + +// Basic table formatting +$table->SetFont(FF_ARIAL,FS_NORMAL,10); +$table->SetAlign('right'); +$table->SetMinColWidth($cellwidth); +$table->SetNumberFormat('%0.1f'); + +// Format table header row +$table->SetRowFillColor(0,'teal@0.7'); +$table->SetRowFont(0,FF_ARIAL,FS_BOLD,11); +$table->SetRowAlign(0,'center'); + +// .. and add it to the graph +$graph->Add($table); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/tablebarex1_csim.php b/Societes/ric/jpgraph/Examples/tablebarex1_csim.php new file mode 100755 index 00000000..96061493 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/tablebarex1_csim.php @@ -0,0 +1,72 @@ +img->SetMargin($tablexpos,$rightmargin,30,$height-$tableypos); +$graph->SetScale("textlin"); +$graph->SetMarginColor('white'); + +// Setup titles and fonts +$graph->title->Set('Bar and table'); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,14); +$graph->yaxis->title->Set("Flow"); +$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,12); +$graph->yaxis->title->SetMargin(10); + +// Create the bars and the accbar plot +$bplot = new BarPlot($datay[3]); +$bplot->SetFillColor("orange"); +$bplot2 = new BarPlot($datay[2]); +$bplot2->SetFillColor("red"); +$bplot3 = new BarPlot($datay[1]); +$bplot3->SetFillColor("darkgreen"); +$accbplot = new AccBarPlot(array($bplot,$bplot2,$bplot3)); +$accbplot->value->Show(); +$graph->Add($accbplot); + +//Setup the table +$table = new GTextTable(); +$table->Set($datay); +$table->SetPos($tablexpos,$tableypos+1); + +$table->SetCellCSIMTarget(1,1,'tableex02.php','View details'); + +// Basic table formatting +$table->SetFont(FF_ARIAL,FS_NORMAL,10); +$table->SetAlign('right'); +$table->SetMinColWidth($cellwidth); +$table->SetNumberFormat('%0.1f'); + +// Format table header row +$table->SetRowFillColor(0,'teal@0.7'); +$table->SetRowFont(0,FF_ARIAL,FS_BOLD,11); +$table->SetRowAlign(0,'center'); + +// .. and add it to the graph +$graph->Add($table); + +$graph->StrokeCSIM(); + +?> diff --git a/Societes/ric/jpgraph/Examples/tableex00.php b/Societes/ric/jpgraph/Examples/tableex00.php new file mode 100755 index 00000000..0acabaed --- /dev/null +++ b/Societes/ric/jpgraph/Examples/tableex00.php @@ -0,0 +1,25 @@ +Set($data); + +//Add table to the graph +$graph->Add($table); + +// Send back table to the client +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/tableex01.php b/Societes/ric/jpgraph/Examples/tableex01.php new file mode 100755 index 00000000..8efe9f9f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/tableex01.php @@ -0,0 +1,29 @@ +Init(); +$table->Set($data); + +$table->SetRowFont(0,FF_FONT1,FS_BOLD); +$table->SetRowColor(0,'navy'); +$table->SetRowFillColor(0,'lightgray'); + +$table->SetColFont(0,FF_FONT1,FS_BOLD); +$table->SetColColor(0,'navy'); +$table->SetColFillColor(0,'lightgray'); + +$graph->Add($table); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/tableex01_csim.php b/Societes/ric/jpgraph/Examples/tableex01_csim.php new file mode 100755 index 00000000..ff11a70b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/tableex01_csim.php @@ -0,0 +1,33 @@ +Set($data); + +$table->SetCellCSIMTarget(1,1,'tableex02.php','View details'); + +$table->SetRowFont(0,FF_FONT1,FS_BOLD); +$table->SetRowColor(0,'navy'); +$table->SetRowFillColor(0,'lightgray'); + +$table->SetColFont(0,FF_FONT1,FS_BOLD); +$table->SetColColor(0,'navy'); +$table->SetColFillColor(0,'lightgray'); + +$graph->Add($table); + +$graph->StrokeCSIM(); + +?> diff --git a/Societes/ric/jpgraph/Examples/tableex02.php b/Societes/ric/jpgraph/Examples/tableex02.php new file mode 100755 index 00000000..193f49f1 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/tableex02.php @@ -0,0 +1,33 @@ +Init(); +$table->Set($data); + +// Setup row and column headers +$table->SetRowFont(0,FF_TIMES,FS_BOLD,11); +$table->SetRowAlign(0,'left','bottom'); +$table->SetRowColor(0,'navy'); +$table->SetRowFillColor(0,'lightgray'); +$table->SetColFont(0,FF_ARIAL,FS_BOLD,11); +$table->SetColColor(0,'navy'); +$table->SetColFillColor(0,'lightgray'); + +// Highlight cell 2,3 +$table->SetCellFillColor(2,3,'yellow'); + +$graph->Add($table); +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/tableex03.php b/Societes/ric/jpgraph/Examples/tableex03.php new file mode 100755 index 00000000..5ac72151 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/tableex03.php @@ -0,0 +1,58 @@ +Init(); +$table->Set($data); +$table->SetBorder(2,'black'); + +// Setup top row with the year title +$table->MergeCells(0,0,0,6); +$table->SetRowFont(0,FF_ARIAL,FS_BOLD,16); +$table->SetRowColor(0,'navy'); +$table->SetRowAlign(0,'center'); + +// Setup quarter header +$table->MergeCells(1,1,1,3); +$table->MergeCells(1,4,1,6); +$table->SetRowAlign(1,'center'); +$table->SetRowFont(1,FF_ARIAL,FS_BOLD,10); +$table->SetRowColor(1,'navy'); +$table->SetRowFillColor(1,'lightgray'); +$table->SetRowGrid(2,'',0); // Turn off the gridline just under the top row + +// Setup row and column headers +$table->SetRowFont(2,FF_ARIAL,FS_NORMAL,11); +$table->SetRowColor(2,'navy'); +$table->SetRowFillColor(2,'lightgray'); + +$table->SetColFont(0,FF_ARIAL,FS_NORMAL,11); +$table->SetColColor(0,'navy'); +$table->SetColFillColor(0,'lightgray'); + +$table->SetCellFillColor(0,0,'lightgreen'); +$table->SetCellFillColor(1,0,'lightgreen'); +$table->SetCellFillColor(2,0,'lightgreen'); + +// Highlight cell 2,3 +$table->SetCellFillColor(4,3,'yellow'); + +$graph->Add($table); +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/tableex04.php b/Societes/ric/jpgraph/Examples/tableex04.php new file mode 100755 index 00000000..21f540d3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/tableex04.php @@ -0,0 +1,50 @@ +Init(); +$table->Set($data); +$table->SetBorder(2,'black'); + +// Highlight summation row +$table->SetRowFillColor($r-1,'yellow'); +$table->SetCellAlign($r-1,0,'right'); + +// Setup row and column headers +$table->SetRowFont(0,FF_ARIAL,FS_NORMAL,10); +$table->SetRowColor(0,'navy'); +$table->SetRowFillColor(0,'lightgray'); + +$table->SetColFont(0,FF_ARIAL,FS_NORMAL,10); +$table->SetColColor(0,'navy'); +$table->SetColFillColor(0,'lightgray'); + +$table->SetRowGrid($r-1,1,'black',TGRID_DOUBLE); + +$graph->Add($table); +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/tableex05.php b/Societes/ric/jpgraph/Examples/tableex05.php new file mode 100755 index 00000000..aad9e00d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/tableex05.php @@ -0,0 +1,53 @@ +Init(); +$table->Set($data); +$table->SetBorder(2,'black'); + +// Highlight summation row +$table->SetRowFillColor($r-1,'yellow'); +$table->SetCellAlign($r-1,0,'right'); + +// Setup row and column headers +$table->SetRowFont(0,FF_ARIAL,FS_NORMAL,10); +$table->SetRowColor(0,'navy'); +$table->SetRowFillColor(0,'lightgray'); + +$table->SetColFont(0,FF_ARIAL,FS_NORMAL,10); +$table->SetColColor(0,'navy'); +$table->SetColFillColor(0,'lightgray'); + +$table->SetRowGrid($r-1,1,'black',TGRID_DOUBLE); + +$table->SetFont(1,4,2,6,FF_TIMES,FS_NORMAL,18); +$table->SetFillColor(1,1,2,3,'red'); + +$table->MergeCol(1); +$graph->Add($table); +$graph->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/tabtitleex1.php b/Societes/ric/jpgraph/Examples/tabtitleex1.php new file mode 100755 index 00000000..b523ab4d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/tabtitleex1.php @@ -0,0 +1,50 @@ +clearTheme(); +$graph->SetMarginColor('white'); +$graph->SetScale("textlin"); +$graph->SetFrame(false); +$graph->SetMargin(30,50,30,30); + +$graph->tabtitle->Set(' Year 2003 ' ); +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13); + + +$graph->yaxis->HideZeroLabel(); +$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5'); +$graph->xgrid->Show(); + +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +// Create the first line +$p1 = new LinePlot($datay1); +$p1->SetColor("navy"); +$p1->SetLegend('Line 1'); +$graph->Add($p1); + +// Create the second line +$p2 = new LinePlot($datay2); +$p2->SetColor("red"); +$p2->SetLegend('Line 2'); +$graph->Add($p2); + +// Create the third line +$p3 = new LinePlot($datay3); +$p3->SetColor("orange"); +$p3->SetLegend('Line 3'); +$graph->Add($p3); + +$graph->legend->SetShadow('gray@0.4',5); +$graph->legend->SetPos(0.1,0.1,'right','top'); +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/testsuit.php b/Societes/ric/jpgraph/Examples/testsuit.php new file mode 100755 index 00000000..2ea2af55 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/testsuit.php @@ -0,0 +1,107 @@ +iType = $aType; + if( $aDir == '' ) { + $aDir = getcwd(); + } + if( !chdir($aDir) ) { + die("PANIC: Can't access directory : $aDir"); + } + $this->iDir = $aDir; + } + + function GetFiles() { + $d = @dir($this->iDir); + $a = array(); + while( $entry=$d->Read() ) { + if( strstr($entry,".php") && strstr($entry,"x") && !strstr($entry,"show") && !strstr($entry,"csim") ) { + $a[] = $entry; + } + } + $d->Close(); + if( count($a) == 0 ) { + die("PANIC: Apache/PHP does not have enough permission to read the scripts in directory: $this->iDir"); + } + sort($a); + return $a; + } + + function GetCSIMFiles() { + $d = @dir($this->iDir); + $a = array(); + while( $entry=$d->Read() ) { + if( strstr($entry,".php") && strstr($entry,"csim") ) { + $a[] = $entry; + } + } + $d->Close(); + if( count($a) == 0 ) { + die("PANIC: Apache/PHP does not have enough permission to read the CSIM scripts in directory: $this->iDir"); + } + sort($a); + return $a; + } + + + function Run() { + switch( $this->iType ) { + case 1: + $files = $this->GetFiles(); + break; + case 2: + $files = $this->GetCSIMFiles(); + break; + default: + die('Panic: Unknown type of test'); + break; + } + $n = count($files); + echo "

      Visual test suit for JpGraph

      "; + echo "Testtype: " . ($this->iType==1 ? ' Standard images ':' Image map tests '); + echo "
      Number of tests: $n

      "; + echo "

        "; + + for( $i=0; $i<$n; ++$i ) { + if( $this->iType ==1 ) { + echo '

      1. Filename: '.basename($files[$i])."\n"; + } + else { + echo '
      2. '.$files[$i]."\n"; + } + } + echo "
      "; + + echo "

      Done.

      "; + } +} + +$type=@$_GET['type']; +if( empty($type) ) { + $type=1; +} + +$driver = new TestDriver($type); +$driver->Run(); + +?> diff --git a/Societes/ric/jpgraph/Examples/text-example1.php b/Societes/ric/jpgraph/Examples/text-example1.php new file mode 100755 index 00000000..99de8ffe --- /dev/null +++ b/Societes/ric/jpgraph/Examples/text-example1.php @@ -0,0 +1,18 @@ +SetPos(0.05,0.5); +$t1->SetOrientation("h"); +$t1->SetFont(FF_FONT1,FS_NORMAL); +$t1->SetBox("white","black",'gray'); +$t1->SetColor("black"); +$graph->AddText($t1); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/text-example2.php b/Societes/ric/jpgraph/Examples/text-example2.php new file mode 100755 index 00000000..b20cfa8e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/text-example2.php @@ -0,0 +1,18 @@ +SetPos(0.05,100); +$t1->SetFont(FF_FONT1,FS_NORMAL); +$t1->SetBox("white","black",true); +$t1->ParagraphAlign("right"); +$t1->SetColor("black"); +$graph->AddText($t1); + +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/textalignex1.php b/Societes/ric/jpgraph/Examples/textalignex1.php new file mode 100755 index 00000000..a7b33c57 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/textalignex1.php @@ -0,0 +1,91 @@ +img; + +// Get the bounding box for text +$img->SetFont(FF_ARIAL,FS_NORMAL,16); +$tw=$img->GetBBoxWidth($txt,$angle); +$th=$img->GetBBoxHeight($txt,$angle); + +$img->SetFont(FF_ARIAL,FS_NORMAL,11); +$ch=$img->GetBBoxHeight($caption); + +// Calculate needed height for the image +$h = 3*$th+2*$ym + $ch; +$g = new CanvasGraph($w,$h); +$img = $g->img; + +// Alignment for anchor points to use +$anchors = array('left','top', + 'center','top', + 'right','top', + 'left','center', + 'center','center', + 'right','center', + 'left','bottom', + 'center','bottom', + 'right','bottom'); + +$n = count($anchors)/2; + +for( $i=0,$r=0,$c=0; $i < $n; ++$i ) { + + $x = $c*($tw+$xm)+$xm/2; + $y = $r*($th+$ym)+$ym/2-10; + + $img->SetColor('blue'); + $img->SetTextAlign($anchors[$i*2],$anchors[$i*2+1]); + $img->SetFont(FF_ARIAL,FS_NORMAL,16); + $img->StrokeText($x,$y,$txt,$angle,"left",true); + + $img->SetColor('black'); + $img->SetFont(FF_FONT1,FS_BOLD); + $img->SetTextAlign('center','top'); + $align = sprintf('("%s","%s")',$anchors[$i*2],$anchors[$i*2+1]); + $img->StrokeText($c*($tw/2+$xm)+$xm/2+$tw/2,$r*($th/2+$ym)+$th+$ym/2-4,$align); + + $c++; + if( $c==3 ) { + $c=0;$r++; + } +} + +// Draw the caption text +$img->SetTextAlign('center','bottom'); +$img->SetFont(FF_ARIAL,FS_ITALIC,11); +$img->StrokeText($w/2,$h-10,$caption,0,'left'); + +$img->SetColor('navy'); +$img->Rectangle(0,0,$w-1,$h-1); + +// .. and send back to browser +$g->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/textpalignex1.php b/Societes/ric/jpgraph/Examples/textpalignex1.php new file mode 100755 index 00000000..b4dfb36f --- /dev/null +++ b/Societes/ric/jpgraph/Examples/textpalignex1.php @@ -0,0 +1,44 @@ +img; + +// Alignment for anchor points to use +$palign = array('left','center','right'); + +$n = count($palign); +$t = new Text($txt); + +$y = $ym; +for( $i=0; $i < $n; ++$i ) { + + $x = $xm + $i*$tw; + + $t->SetColor('black'); + $t->SetAlign('left','top'); + $t->SetFont(FF_ARIAL,FS_NORMAL,11); + $t->SetBox(); + $t->SetParagraphAlign($palign[$i]); + $t->Stroke($img, $x,$y); + + $img->SetColor('black'); + $img->SetFont(FF_FONT1,FS_BOLD); + $img->SetTextAlign('center','top'); + $img->StrokeText($x+140,$y+160,'"'.$palign[$i].'"'.' pargraph align'); + +} + +// .. and send back to browser +$g->Stroke(); + +?> + diff --git a/Societes/ric/jpgraph/Examples/theme_example.php b/Societes/ric/jpgraph/Examples/theme_example.php new file mode 100755 index 00000000..6d02e472 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/theme_example.php @@ -0,0 +1,23 @@ +SetScale('textlin'); + +$theme_class = new AquaTheme; +$graph->SetTheme($theme_class); + +// after setting theme, you can change details as you want +$graph->SetFrame(true, 'lightgray'); // set frame visible + +$graph->xaxis->SetTickLabels(array('A','B','C','D')); // change xaxis lagels +$graph->title->Set("Theme Example"); // add title + +// add barplot +$bplot = new BarPlot($data1y); +$graph->Add($bplot); +$graph->SetColor('#cc1111'); // you can change color only after calling Add() + +$graph->Stroke(); diff --git a/Societes/ric/jpgraph/Examples/tiger1.jpg b/Societes/ric/jpgraph/Examples/tiger1.jpg new file mode 100755 index 00000000..99596101 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/tiger1.jpg differ diff --git a/Societes/ric/jpgraph/Examples/tiger_bkg.gif b/Societes/ric/jpgraph/Examples/tiger_bkg.gif new file mode 100755 index 00000000..3faaa174 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/tiger_bkg.gif differ diff --git a/Societes/ric/jpgraph/Examples/tiger_bkg.jpg b/Societes/ric/jpgraph/Examples/tiger_bkg.jpg new file mode 100755 index 00000000..43d45f30 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/tiger_bkg.jpg differ diff --git a/Societes/ric/jpgraph/Examples/tiger_bkg.png b/Societes/ric/jpgraph/Examples/tiger_bkg.png new file mode 100755 index 00000000..78d8e25b Binary files /dev/null and b/Societes/ric/jpgraph/Examples/tiger_bkg.png differ diff --git a/Societes/ric/jpgraph/Examples/timestampex01.php b/Societes/ric/jpgraph/Examples/timestampex01.php new file mode 100755 index 00000000..b2ee12e9 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/timestampex01.php @@ -0,0 +1,59 @@ +SetMargin(40,20,30,50); + +// Now specify the X-scale explicit but let the Y-scale be auto-scaled +$graph->SetScale("intlin",0,0,$adjstart,$adjend); +$graph->title->Set("Example on TimeStamp Callback"); + +// Setup the callback and adjust the angle of the labels +$graph->xaxis->SetLabelFormatCallback('TimeCallback'); +$graph->xaxis->SetLabelAngle(90); + +// Set the labels every 5min (i.e. 300seconds) and minor ticks every minute +$graph->xaxis->scale->ticks->Set(300,60); + +$line = new LinePlot($data,$xdata); +$line->SetColor('lightblue'); +$graph->Add($line); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/titlecsimex01.php b/Societes/ric/jpgraph/Examples/titlecsimex01.php new file mode 100755 index 00000000..a44290e5 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/titlecsimex01.php @@ -0,0 +1,62 @@ +SetScale("textlin"); +$graph->SetMargin(50,80,20,40); +$graph->yaxis->SetTitleMargin(30); +$graph->yaxis->scale->SetGrace(30); +$graph->SetShadow(); + + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Create targets for the bars image maps. One for each column +$targ=array("bar_clsmex1.php#1","bar_clsmex1.php#2","bar_clsmex1.php#3","bar_clsmex1.php#4","bar_clsmex1.php#5","bar_clsmex1.php#6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$bplot->SetCSIMTargets($targ,$alts); +$bplot->SetFillColor("orange"); +$bplot->SetLegend('Year 2001 %%','#kalle ','%s'); + +// Display the values on top of each bar +$bplot->SetShadow(); +$bplot->value->SetFormat(" $ %2.1f",70); +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$bplot->value->SetColor("blue"); +$bplot->value->Show(); + +$graph->Add($bplot); + +// Create a big "button" that has an image map action +$txt1 = new Text("A simple text with\ntwo rows"); +$txt1->SetFont(FF_ARIAL); +$txt1->SetBox('lightblue','black','white@1',5); +$txt1->SetParagraphAlign('center'); +$txt1->SetPos(40,50); +$txt1->SetCSIMTarget('#88','Text element'); +$graph->Add($txt1); + +// Add image map to the graph title as well (you can do this to the +// sub- and subsub-title as well) +$graph->title->Set("Image maps barex1"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->title->SetCSIMTarget('#45','Title for Bar'); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Setup the axis title image map and font style +$graph->yaxis->title->SetFont(FF_FONT2,FS_BOLD); +$graph->yaxis->title->SetCSIMTarget('#55','Y-axis title'); +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD); +$graph->xaxis->title->SetCSIMTarget('#55','X-axis title'); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> diff --git a/Societes/ric/jpgraph/Examples/titleex1.php b/Societes/ric/jpgraph/Examples/titleex1.php new file mode 100755 index 00000000..77baa00b --- /dev/null +++ b/Societes/ric/jpgraph/Examples/titleex1.php @@ -0,0 +1,29 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,30,30); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->Set('The Title'); +$graph->subtitle->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->subtitle->Set('The Subtitle'); +$graph->subsubtitle->SetFont(FF_ARIAL,FS_ITALIC,9); +$graph->subsubtitle->Set('The Subsubitle'); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor("blue"); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/topxaxisex1.php b/Societes/ric/jpgraph/Examples/topxaxisex1.php new file mode 100755 index 00000000..023978b8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/topxaxisex1.php @@ -0,0 +1,48 @@ +clearTheme(); +$graph->img->SetMargin(40,40,40,20); + +$graph->SetScale("linlin"); +$graph->SetShadow(); +$graph->title->Set("Top X-axis"); + +// Start at 0 +$graph->yscale->SetAutoMin(0); + +// Add some air around the Y-scale +$graph->yscale->SetGrace(100); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Adjust the X-axis +$graph->xaxis->SetPos("max"); +$graph->xaxis->SetLabelSide(SIDE_UP); +$graph->xaxis->SetTickSide(SIDE_DOWN); + +// Create the line plot +$p1 = new LinePlot($datay); +$p1->SetColor("blue"); + +// Specify marks for the line plots +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); + +// Show values +$p1->value->Show(); + +// Add lineplot to graph +$graph->Add($p1); + +// Output line +$graph->Stroke(); + +?> diff --git a/Societes/ric/jpgraph/Examples/tornado.jpg b/Societes/ric/jpgraph/Examples/tornado.jpg new file mode 100755 index 00000000..24c1ea1b Binary files /dev/null and b/Societes/ric/jpgraph/Examples/tornado.jpg differ diff --git a/Societes/ric/jpgraph/Examples/tr1.jpg b/Societes/ric/jpgraph/Examples/tr1.jpg new file mode 100755 index 00000000..f855e31e Binary files /dev/null and b/Societes/ric/jpgraph/Examples/tr1.jpg differ diff --git a/Societes/ric/jpgraph/Examples/tr2.jpg b/Societes/ric/jpgraph/Examples/tr2.jpg new file mode 100755 index 00000000..6a75e474 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/tr2.jpg differ diff --git a/Societes/ric/jpgraph/Examples/tr3.jpg b/Societes/ric/jpgraph/Examples/tr3.jpg new file mode 100755 index 00000000..799e097d Binary files /dev/null and b/Societes/ric/jpgraph/Examples/tr3.jpg differ diff --git a/Societes/ric/jpgraph/Examples/tr4.jpg b/Societes/ric/jpgraph/Examples/tr4.jpg new file mode 100755 index 00000000..fe411c1c Binary files /dev/null and b/Societes/ric/jpgraph/Examples/tr4.jpg differ diff --git a/Societes/ric/jpgraph/Examples/tr5.jpg b/Societes/ric/jpgraph/Examples/tr5.jpg new file mode 100755 index 00000000..33c97488 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/tr5.jpg differ diff --git a/Societes/ric/jpgraph/Examples/tr6.jpg b/Societes/ric/jpgraph/Examples/tr6.jpg new file mode 100755 index 00000000..81321b7d Binary files /dev/null and b/Societes/ric/jpgraph/Examples/tr6.jpg differ diff --git a/Societes/ric/jpgraph/Examples/universal_example.php b/Societes/ric/jpgraph/Examples/universal_example.php new file mode 100755 index 00000000..eae0c190 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/universal_example.php @@ -0,0 +1,58 @@ + array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ), + 1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ), + 2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ), + 3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ), + 4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ), + 5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ), + 6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ), + 7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ), + 8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ), +); + + +// Create the graph. These two calls are always required +$graph = new Graph(400,300); + +$graph->SetScale("textlin"); +if ($theme) { + $graph->SetTheme(new $theme()); +} +$theme_class = new UniversalTheme; +$graph->SetTheme($theme_class); + +$plot = array(); +// Create the bar plots +for ($i = 0; $i < 4; $i++) { + $plot[$i] = new BarPlot($data[$i]); + $plot[$i]->SetLegend('plot'.($i+1)); +} +//$acc1 = new AccBarPlot(array($plot[0], $plot[1])); +//$acc1->value->Show(); +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] )); + +for ($i = 4; $i < 8; $i++) { + $plot[$i] = new LinePlot($data[$i]); + $plot[$i]->SetLegend('plot'.$i); + $plot[$i]->value->Show(); +} + +$graph->Add($gbplot); +$graph->Add($plot[4]); + +$title = "UniversalTheme Example"; +$title = mb_convert_encoding($title,'UTF-8'); +$graph->title->Set($title); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/vivid_example.php b/Societes/ric/jpgraph/Examples/vivid_example.php new file mode 100755 index 00000000..1d227481 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/vivid_example.php @@ -0,0 +1,57 @@ + array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ), + 1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ), + 2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ), + 3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ), + 4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ), + 5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ), + 6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ), + 7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ), + 8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ), +); + +// Create the graph. These two calls are always required +$graph = new Graph(400,300); + +$graph->SetScale("textlin"); +if ($theme) { + $graph->SetTheme(new $theme()); +} +$theme_class = new VividTheme; +$graph->SetTheme($theme_class); + +$plot = array(); +// Create the bar plots +for ($i = 0; $i < 4; $i++) { + $plot[$i] = new BarPlot($data[$i]); + $plot[$i]->SetLegend('plot'.($i+1)); +} +//$acc1 = new AccBarPlot(array($plot[0], $plot[1])); +//$acc1->value->Show(); +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] )); + +for ($i = 4; $i < 8; $i++) { + $plot[$i] = new LinePlot($data[$i]); + $plot[$i]->SetLegend('plot'.$i); + $plot[$i]->value->Show(); +} + +$graph->Add($gbplot); +$graph->Add($plot[4]); + +$title = "VividTheme Example"; +$title = mb_convert_encoding($title,'UTF-8'); +$graph->title->Set($title); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/windrose_2plots_ex1.php b/Societes/ric/jpgraph/Examples/windrose_2plots_ex1.php new file mode 100755 index 00000000..7aee3154 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_2plots_ex1.php @@ -0,0 +1,44 @@ + array(10,10,13,7), + 2 => array(2,8,10), + 4 => array(1,12,22), + ); + +$data2 = array( + 4 => array(12,8,2,3), + 2 => array(5,4,4,5,2), + ); + +// Create a new small windrose graph +$graph = new WindroseGraph(660,400); +$graph->SetShadow(); + +$graph->title->Set('Two windrose plots in one graph'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->subtitle->Set('(Using Box() for each plot)'); + +$wp = new WindrosePlot($data); +$wp->SetType(WINDROSE_TYPE8); +$wp->SetSize(0.42); +$wp->SetPos(0.25,0.55); +$wp->SetBox(); + +$wp2 = new WindrosePlot($data2); +$wp2->SetType(WINDROSE_TYPE16); +$wp2->SetSize(0.42); +$wp2->SetPos(0.74,0.55); +$wp2->SetBox(); +$wp2->SetRangeColors(array('green','yellow','red','brown')); + +$graph->Add($wp); +$graph->Add($wp2); + +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_bgimg_ex1.php b/Societes/ric/jpgraph/Examples/windrose_bgimg_ex1.php new file mode 100755 index 00000000..e51372d8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_bgimg_ex1.php @@ -0,0 +1,50 @@ + array(12,8,2,3), + 6 => array(5,4,4,5,4), + ); + +$se_CompassLbl = array('O','ONO','NO','NNO','N','NNV','NV','VNV','V','VSV','SV','SSV','S','SSO','SO','OSO'); + +// Create a new small windrose graph +$graph = new WindroseGraph(400,400); +$graph->SetMargin(25,25,25,25); +$graph->SetFrame(); + +$graph->title->Set('Example with background flag'); +#$graph->title->SetFont(FF_VERA,FS_BOLD,14); + + +//$graph->SetBackgroundImage('bkgimg.jpg',BGIMG_FILLFRAME); +//$graph->SetBackgroundImageMix(90); +$graph->SetBackgroundCFlag(28,BGIMG_FILLFRAME,15); + + +$wp2 = new WindrosePlot($data2); +$wp2->SetType(WINDROSE_TYPE16); +$wp2->SetSize(0.55); +$wp2->SetPos(0.5,0.5); +$wp2->SetAntiAlias(false); + +$wp2->SetFont(FF_ARIAL,FS_BOLD,10); +$wp2->SetFontColor('black'); + +$wp2->SetCompassLabels($se_CompassLbl); +$wp2->legend->SetMargin(20,5); + +$wp2->scale->SetZFont(FF_ARIAL,FS_NORMAL,8); +$wp2->scale->SetFont(FF_ARIAL,FS_NORMAL,9); +$wp2->scale->SetLabelFillColor('white','white'); + +$wp2->SetRangeColors(array('green','yellow','red','brown')); + +$graph->Add($wp2); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex0.php b/Societes/ric/jpgraph/Examples/windrose_ex0.php new file mode 100755 index 00000000..897d4283 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex0.php @@ -0,0 +1,25 @@ + array(5,5,5,8), + 1 => array(3,4,1,4), + 'WSW' => array(1,5,5,3), + 'N' => array(2,3,8,1,1), + 15 => array(2,3,5)); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,400); +$graph->title->Set('A basic Windrose graph'); + +// Create the windrose plot. +$wp = new WindrosePlot($data); + +// Add and send back to browser +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex1.php b/Societes/ric/jpgraph/Examples/windrose_ex1.php new file mode 100755 index 00000000..e892a21e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex1.php @@ -0,0 +1,28 @@ + array(1,1,2.5,4), + 1 => array(3,4,1,4), + 'wsw' => array(1,5,5,3), + 'N' => array(2,7,5,4,2), + 15 => array(2,7,12)); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,400); + +// Setup title +$graph->title->Set('Windrose basic example'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor('navy'); + +// Create the windrose plot. +$wp = new WindrosePlot($data); +$wp->SetRadialGridStyle('solid'); +$graph->Add($wp); + +// Send the graph to the browser +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex1b.php b/Societes/ric/jpgraph/Examples/windrose_ex1b.php new file mode 100755 index 00000000..c24a98c8 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex1b.php @@ -0,0 +1,33 @@ + array(1,1,2.5,4), + 1 => array(3,4,1,4), + 'wsw' => array(1,5,5,3), + 'N' => array(2,7,5,4,2), + 15 => array(2,7,12)); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,400); +$graph->title->Set('Windrose example 1b'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor('navy'); + +// Create the windrose plot. +// The default plot will have 16 compass axis. +$wp = new WindrosePlot($data); +$wp->SetRadialGridStyle('solid'); +$graph->Add($wp); + +// Setup the range so that the values do not touch eachother +$wp->SetRanges(array(0,1,2,3,4,5,6,7,8,10)); +$wp->SetRangeStyle(RANGE_DISCRETE); // Cmp with RANGE_OVERLAPPING as default + +// Send the graph to the browser +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex2.1.php b/Societes/ric/jpgraph/Examples/windrose_ex2.1.php new file mode 100755 index 00000000..48781acc --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex2.1.php @@ -0,0 +1,49 @@ + array(1,1,6,4), + 1 => array(3,8,1,4), + 2 => array(2,7,4,4,3), + 3 => array(2,7,1,2)); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,400); + +// Setup title +$graph->title->Set('Windrose example 2'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor('navy'); + +// Create the windrose plot. +$wp = new WindrosePlot($data); + +// Make it have 8 compass direction +$wp->SetType(WINDROSE_TYPE4); + +// Setup the weight of the laegs for the different ranges +$weights = array_fill(0,8,10); +$wp->SetRangeWeights($weights); + +// Adjust the font and font color for scale labels +$wp->scale->SetFont(FF_TIMES,FS_NORMAL,11); +$wp->scale->SetFontColor('navy'); + +// Set the diametr for the plot to 160 pixels +$wp->SetSize(160); + +// Set the size of the innermost center circle to 30% of the plot size +$wp->SetZCircleSize(0.2); + +// Adjust the font and font color for compass directions +$wp->SetFont(FF_ARIAL,FS_NORMAL,12); +$wp->SetFontColor('darkgreen'); + +// Add and send back to browser +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex2.php b/Societes/ric/jpgraph/Examples/windrose_ex2.php new file mode 100755 index 00000000..23822cca --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex2.php @@ -0,0 +1,49 @@ + array(1,1,2.5,4), + 1 => array(3,4,1,4), + 3 => array(2,7,4,4,3), + 5 => array(2,7,1,2)); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,400); + +// Setup title +$graph->title->Set('Windrose example 2'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor('navy'); + +// Create the windrose plot. +$wp = new WindrosePlot($data); + +// Make it have 8 compass direction +$wp->SetType(WINDROSE_TYPE8); + +// Setup the weight of the laegs for the different ranges +$weights = array_fill(0,8,10); +$wp->SetRangeWeights($weights); + +// Adjust the font and font color for scale labels +$wp->scale->SetFont(FF_TIMES,FS_NORMAL,11); +$wp->scale->SetFontColor('navy'); + +// Set the diametr for the plot to 160 pixels +$wp->SetSize(200); + +// Set the size of the innermost center circle to 30% of the plot size +$wp->SetZCircleSize(0.2); + +// Adjust the font and font color for compass directions +$wp->SetFont(FF_ARIAL,FS_NORMAL,12); +$wp->SetFontColor('darkgreen'); + +// Add and send back the graph to the client +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex3.php b/Societes/ric/jpgraph/Examples/windrose_ex3.php new file mode 100755 index 00000000..39c12cea --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex3.php @@ -0,0 +1,73 @@ + array(1,1,2.5,4), + 1 => array(3,4,1,4), + 3 => array(2,7,4,4,3), + 5 => array(2,7,1,2)); + +$data[1] = array( + "n" => array(1,1,2.5,4), + "ssw" => array(3,4,1,4), + "se" => array(2,7,4,4,3)); + +// Store the position and size data for each plot in an +// array to make it easier to create multiple plots. +// The format choosen for the layout data is +// (type,x-pos,y-pos,size, z-circle size) +$layout = array( + array(WINDROSE_TYPE8,0.25,0.55,0.4,0.25), + array(WINDROSE_TYPE16,0.75,0.55,0.4,0.25)); + +$legendtxt = array('(m/s) Station 7','(m/s) Station 12'); + +// First create a new windrose graph with a dropshadow +$graph = new WindroseGraph(600,350); +$graph->SetShadow('darkgray'); + +// Setup titles +$graph->title->Set('Windrose example 3'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor('navy'); +$graph->subtitle->Set('(Multiple plots in the same graph)'); +$graph->subtitle->SetFont(FF_VERDANA,FS_NORMAL,9); +$graph->subtitle->SetColor('navy'); + +// Create the two windrose plots. +for( $i=0; $i < count($data); ++$i ) { + $wp[$i] = new WindrosePlot($data[$i]); + + // Make it have 8 compass direction + $wp[$i]->SetType($layout[$i][0]); + + // Adjust the font and font color for scale labels + $wp[$i]->scale->SetFont(FF_TIMES,FS_NORMAL,10); + $wp[$i]->scale->SetFontColor('navy'); + + // Set the position of the plot + $wp[$i]->SetPos($layout[$i][1],$layout[$i][2]); + + // Set the diameter for the plot to 30% of the width of the graph pixels + $wp[$i]->SetSize($layout[$i][3]); + + // Set the size of the innermost center circle to 30% of the plot size + $wp[$i]->SetZCircleSize($layout[$i][4]); + + // Adjust the font and font color for compass directions + $wp[$i]->SetFont(FF_ARIAL,FS_NORMAL,10); + $wp[$i]->SetFontColor('darkgreen'); + + // Add legend text + $wp[$i]->legend->SetText($legendtxt[$i]); + + $graph->Add($wp[$i]); +} + +// Send the graph to the browser +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex4.php b/Societes/ric/jpgraph/Examples/windrose_ex4.php new file mode 100755 index 00000000..04652041 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex4.php @@ -0,0 +1,58 @@ + array(1,1,2.5,4), + 1 => array(3,4,1,4), + 3 => array(2,7,4,4,3), + 5 => array(2,7,1,2)); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,400); + +// Setup title +$graph->title->Set('Windrose example 4'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor('navy'); + +// Create the windrose plot. +$wp = new WindrosePlot($data); + +// Adjust the font and font color for scale labels +$wp->scale->SetFont(FF_TIMES,FS_NORMAL,11); +$wp->scale->SetFontColor('navy'); + +// Set the diameter and position for plot +$wp->SetSize(190); + +// Set the size of the innermost center circle to 40% of the plot size +// Note that we can have the automatic "Zero" sum appear in our custom text +$wp->SetZCircleSize(0.38); +$wp->scale->SetZeroLabel("Station 12\n(Calm %d%%)"); + +// Adjust color and font for center circle text +$wp->scale->SetZFont(FF_ARIAL,FS_NORMAL,9); +$wp->scale->SetZFontColor('darkgreen'); + +// Adjust the font and font color for compass directions +$wp->SetFont(FF_ARIAL,FS_NORMAL,10); +$wp->SetFontColor('darkgreen'); + +// Adjust the margin to the compass directions +$wp->SetLabelMargin(50); + +// Adjust grid colors +$wp->SetGridColor('silver','blue'); + +// Add (m/s) text to legend +$wp->legend->SetText('(m/s)'); +$wp->legend->SetMargin(20,5); + +// Add and send back to client +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex5.php b/Societes/ric/jpgraph/Examples/windrose_ex5.php new file mode 100755 index 00000000..f013c3bf --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex5.php @@ -0,0 +1,94 @@ + array(1,1,2.5,4), + 1 => array(3,4,1,4), + 3 => array(2,7,4,4,3), + 5 => array(2,7,1,2)); + +// Text to be added. +$txt=array(); +$txt[0] = "It is possible to add arbitrary,multi line, text to a graph. "; +$txt[0] .= "Such a paragraph can have it's text be left, right or center "; +$txt[0] .= "aligned."; +$txt[1] = "This is an example of a right aligned paragraph."; +$txt[2] = "Finally we can show a center aligned paragraph without box."; + +// We store the layout for each of the text boxes in an array +// to keep the code clean +$txtlayout = array( + array(0.97,0.15,25,'left','black','lightblue'), + array(0.97,0.4,20,'right','black','lightblue'), + array(0.97,0.7,20,'center','darkred',false,FF_COMIC,FS_NORMAL,12), +); + +// Range colors to be used +$rangeColors = array('silver','khaki','orange','brown','blue','navy','maroon','red'); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(570,430); +$graph->title->Set('Windrose example 5'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor('navy'); + +// Setup graph background color +$graph->SetColor('darkgreen@0.7'); + +// Setup all the defined text boxes +$n = count($txt); +for( $i=0; $i < $n; ++$i ) { + $txtbox[$i] = new Text($txt[$i]); + $txtbox[$i]->SetPos($txtlayout[$i][0],$txtlayout[$i][1],'right'); + $txtbox[$i]->SetWordwrap($txtlayout[$i][2]); + $txtbox[$i]->SetParagraphAlign($txtlayout[$i][3]); + $txtbox[$i]->SetColor($txtlayout[$i][4]); + $txtbox[$i]->SetBox($txtlayout[$i][5]); + if( count($txtlayout[$i]) > 6 ) + $txtbox[$i]->SetFont($txtlayout[$i][6],$txtlayout[$i][7],$txtlayout[$i][8]); +} +$graph->Add($txtbox); + +// Create the windrose plot. +$wp = new WindrosePlot($data); + +// Set background color for plot area +$wp->SetColor('lightyellow'); + +// Add a box around the plot +$wp->SetBox(); + +// Setup the colors for the ranges +$wp->SetRangeColors($rangeColors); + +// Adjust the font and font color for scale labels +$wp->scale->SetFont(FF_ARIAL,FS_NORMAL,9); +$wp->scale->SetFontColor('navy'); + +// Set the diameter and position for plot +$wp->SetSize(190); +$wp->SetPos(0.35,0.53); + +$wp->SetZCircleSize(0.2); + +// Adjust the font and font color for compass directions +$wp->SetFont(FF_ARIAL,FS_NORMAL,10); +$wp->SetFontColor('darkgreen'); + +// Adjust the margin to the compass directions +$wp->SetLabelMargin(50); + +// Adjust grid colors +$wp->SetGridColor('silver','blue'); + +// Add (m/s) text to legend +$wp->legend->SetText('(m/s)'); +$wp->legend->SetMargin(20,5); + +// Add plot and send back to client +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex6.1.php b/Societes/ric/jpgraph/Examples/windrose_ex6.1.php new file mode 100755 index 00000000..61504c86 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex6.1.php @@ -0,0 +1,89 @@ + array(1,1,2.5,4), + '32.0' => array(3,4,1,4), + '120.5' => array(2,3,4,4,3,2,1), + '223.2' => array(2,4,1,2,2), + '285.7' => array(2,2,1,2,4,2,1,1) +); + +// This file is encode din utf-8. The two Kanji characters roughly means +// 中 = Chinese +// 文 = Sentences +$ctxt = '中文'; + +// Specify text for direction labels +$labels = array( + '120.5' => $ctxt, + '232.2' => "Reference\n#13 Ver:2"); + +// Range colors to be used +$rangeColors = array('khaki','yellow','orange','orange:0.7','brown','darkred','black'); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,450); + +// Setup title +$graph->title->Set('Using chinese charecters'); +#$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor('navy'); +$graph->subtitle->Set('(Free type plot)'); +#$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10); +$graph->subtitle->SetColor('navy'); + +// Create the windrose plot. +$wp = new WindrosePlot($data); + +// Setup a free plot +$wp->SetType(WINDROSE_TYPEFREE); + +// Setup labels +$wp->SetLabels($labels); +$wp->SetLabelPosition(LBLPOSITION_CENTER); +$wp->SetLabelMargin(30); + +// Setup the colors for the ranges +$wp->SetRangeColors($rangeColors); + +// Adjust the font and font color for scale labels +#$wp->scale->SetFont(FF_ARIAL,FS_NORMAL,9); + +// Set the diameter and position for plot +#$wp->SetSize(240); +$wp->SetSize(200); +$wp->SetZCircleSize(30); +$wp->SetPos(0.5,0.5); + +// Adjust the font and font color for compass directions +#$wp->SetFont(FF_CHINESE,FS_NORMAL,12); +$wp->SetFontColor('darkgreen'); + +// Adjust grid colors +$wp->SetGridColor('darkgreen@0.7','blue'); + +// Add (m/s) text to legend +$wp->legend->SetText('(m/s)'); +$wp->legend->SetTFontColor('blue'); + +// Set legend label font color +$wp->legend->SetLFontColor('orange:0.7'); +#$wp->legend->SetLFont(FF_ARIAL,FS_ITALIC,8); + +// Display legend values with no decimals +$wp->legend->SetFormat('%d'); + +// Set the circle font to use chinse character set +// Note: When FF_CHINESE is used the input charectr data are +// assumed to already be in utf-8 encoding +#$wp->legend->SetCFont(FF_CHINESE,FS_NORMAL,14); +$wp->legend->SetCircleText($ctxt); +$wp->legend->SetCFontColor('red'); + +// Add plot to graph and send back to client +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex6.php b/Societes/ric/jpgraph/Examples/windrose_ex6.php new file mode 100755 index 00000000..557f005a --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex6.php @@ -0,0 +1,72 @@ + array(1,1,2.5,4), + '32.0' => array(3,4,1,4), + '120.5' => array(2,3,4,4,3,2,1), + '223.2' => array(2,4,1,2,2), + '285.7' => array(2,2,1,2,4,2,1,1) +); + +// Specify text for direction labels +$labels = array( '120.5' => "Plant\n#1275", + '285.7' => "Reference\n#13 Ver:2"); + +// Range colors to be used +$rangeColors = array('khaki','yellow','orange','orange:0.7','brown','darkred','black'); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,450); + +// Setup titles +$graph->title->Set('Windrose example 6'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor('navy'); + +$graph->subtitle->Set('(Free type plot)'); +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10); +$graph->subtitle->SetColor('navy'); + +// Create the windrose plot. +$wp = new WindrosePlot($data); + +// Setup a free plot +$wp->SetType(WINDROSE_TYPEFREE); + +// Setup labels +$wp->SetLabels($labels); +$wp->SetLabelPosition(LBLPOSITION_CENTER); +$wp->SetLabelMargin(30); + +// Setup the colors for the ranges +$wp->SetRangeColors($rangeColors); + +// Adjust the font and font color for scale labels +$wp->scale->SetFont(FF_ARIAL,FS_NORMAL,9); + +// Set the diameter and position for plot +$wp->SetSize(230); +$wp->SetZCircleSize(30); + +// Adjust the font and font color for compass directions +$wp->SetFont(FF_ARIAL,FS_NORMAL,10); +$wp->SetFontColor('darkgreen'); + +// Adjust grid colors +$wp->SetGridColor('darkgreen@0.7','blue'); + +// Add (m/s) text to legend +$wp->legend->SetText('(m/s)'); + +// Display legend values with no decimals +$wp->legend->SetFormat('%d'); + +// Add plot to graph and send back to the client +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex7.1.php b/Societes/ric/jpgraph/Examples/windrose_ex7.1.php new file mode 100755 index 00000000..44987168 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex7.1.php @@ -0,0 +1,67 @@ + array(1,15,7.5,2), + 5 => array(1,1,1.5,2), + 7 => array(1,2,10,3,2), + 8 => array(2,3,1,3,1,2), + ); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(590,580); +$graph->title->Set('Japanese locale'); +#$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->title->SetColor('navy'); + +// Create the free windrose plot. +$wp = new WindrosePlot($data); +$wp->SetType(WINDROSE_TYPE8); + +// Add some "arbitrary" text to the center +$wp->scale->SetZeroLabel("SOx\n8%%"); + +// Localize the compass direction labels into Japanese +// Note: The labels for data must now also match the exact +// string for the compass directions. +// +// E   東 +// NE  北東 +// N   北 +// NW  北西 +// W   西 +// SW  南西 +// S   南 +// SE  南東 +$jp_CompassLbl = array('東','','北東','','北','','北西','', + '西','','南西','','南','','南東',''); +$wp->SetCompassLabels($jp_CompassLbl); +#$wp->SetFont(FF_MINCHO,FS_NORMAL,15); + +// Localize the "Calm" text into Swedish and make the circle +// slightly bigger than default +$jp_calmtext = '平穏'; +$wp->legend->SetCircleText($jp_calmtext); +$wp->legend->SetCircleRadius(20); +#$wp->legend->SetCFont(FF_MINCHO,FS_NORMAL,10); +$wp->legend->SetMargin(5,0); +$wp->SetPos(0.5, 0.5); + +// Adjust the displayed ranges +$ranges = array(1,3,5,8,12,19,29); +$wp->SetRanges($ranges); + +// Set the scale to always have max value of 30 +$wp->scale->Set(30,10); +#$wp->scale->SetFont(FF_VERA,FS_NORMAL,12); + +// Finally add it to the graph and send back to client +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex7.php b/Societes/ric/jpgraph/Examples/windrose_ex7.php new file mode 100755 index 00000000..b7a9b83e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex7.php @@ -0,0 +1,51 @@ + array(1,15,7.5,2), + 5 => array(1,1,1.5,2), + 7 => array(1,2,10,3,2), + 9 => array(2,3,1,3,1,2), + ); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,450); +$graph->title->Set('Windrose example 7'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->title->SetColor('navy'); + +// Create the free windrose plot. +$wp = new WindrosePlot($data); +$wp->SetType(WINDROSE_TYPE16); + +// Add some "arbitrary" text to the center +$wp->scale->SetZeroLabel("SOx\n8%%"); + +// Localize the compass direction labels into Swedish +// Note: The labels for data must now also match the exact +// string for the compass directions. +$se_CompassLbl = array('O','ONO','NO','NNO','N','NNV','NV','VNV', + 'V','VSV','SV','SSV','S','SSO','SO','OSO'); +$wp->SetCompassLabels($se_CompassLbl); + +// Localize the "Calm" text into Swedish and make the circle +// slightly bigger than default +$se_calmtext = 'Lugnt'; +$wp->legend->SetCircleText($se_calmtext); +$wp->legend->SetCircleRadius(20); + +// Adjust the displayed ranges +$ranges = array(1,3,5,8,12,19,29); +$wp->SetRanges($ranges); +//$wp->SetAntiAlias(true); + +// Set the scale to always have max value of 30 with a step +// size of 12. +$wp->scale->Set(30,12); + +// Finally add it to the graph and send back to client +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex8.1.php b/Societes/ric/jpgraph/Examples/windrose_ex8.1.php new file mode 100755 index 00000000..caaff637 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex8.1.php @@ -0,0 +1,49 @@ + array(3,2,1,2,2), + 355 => array(1,1,1.5,2), + 180 => array(1,1,1.5,2), + 150 => array(1,2,1,3), + 'S' => array(2,3,5,1), + ); + +// Add some labels for afew of the directions +$labels = array(355=>"At\nHome base",180=>"Probe\n123",150=>"Power\nplant"); + +// Define the color,weight and style of some individual radial grid lines. +$axiscolors = array(355=>"red"); +$axisweights = array(355=>8); +$axisstyles = array(355=>'solid',150=>'solid'); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,460); +$graph->title->Set('Adding label backgrounds'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->title->SetColor('navy'); + +// Create the free windrose plot. +$wp = new WindrosePlot($data); +$wp->SetType(WINDROSE_TYPEFREE); +$wp->scale->SetLabelFillColor('lightblue','black'); + +// Specify colors weights and style for the radial gridlines +$wp->SetRadialColors($axiscolors); +$wp->SetRadialWeights($axisweights); +$wp->SetRadialStyles($axisstyles); + +// Add a few labels +$wp->SetLabels($labels); + +// Add some "arbitrary" text to the center +$wp->scale->SetZeroLabel("SOx\n8%%"); + +// Finally add it to the graph and send back to client +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex8.php b/Societes/ric/jpgraph/Examples/windrose_ex8.php new file mode 100755 index 00000000..b81c874d --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex8.php @@ -0,0 +1,48 @@ + array(3,2,1,2,2), + 355 => array(1,1,1.5,2), + 180 => array(1,1,1.5,2), + 150 => array(1,2,1,3), + 'S' => array(2,3,5,1), + ); + +// Add some labels for afew of the directions +$labels = array(355=>"At\nHome base",180=>"Probe\n123",150=>"Power\nplant"); + +// Define the color,weight and style of some individual radial grid lines. +$axiscolors = array(355=>"red"); +$axisweights = array(355=>8); +$axisstyles = array(355=>'solid',150=>'solid'); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,500); +$graph->title->Set('Windrose example 8'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->title->SetColor('navy'); + +// Create the free windrose plot. +$wp = new WindrosePlot($data); +$wp->SetType(WINDROSE_TYPEFREE); + +// Specify colors weights and style for the radial gridlines +$wp->SetRadialColors($axiscolors); +$wp->SetRadialWeights($axisweights); +$wp->SetRadialStyles($axisstyles); + +// Add a few labels +$wp->SetLabels($labels); + +// Add some "arbitrary" text to the center +$wp->scale->SetZeroLabel("SOx\n8%%"); + +// Finally add it to the graph and send back to client +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex9.1.php b/Societes/ric/jpgraph/Examples/windrose_ex9.1.php new file mode 100755 index 00000000..dbdebed4 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex9.1.php @@ -0,0 +1,62 @@ + array(3,2,1,2,2), + 4 => array(1,1,1.5,2), + 6 => array(1,1,1.5,2), + 12 => array(2,3,5,1), +); + +$xpos1 = 0.26; +$xpos2 = 0.74; +$ypos1 = 0.5; +$ypos2 = 0.9; + +// First create a new windrose graph with a title +$graph = new WindroseGraph(650,350); +$graph->title->Set('Interpretation of ordinal keys'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->title->SetColor('navy'); + +// Create the first plot +$wp1 = new WindrosePlot($data); +$wp1->SetType(WINDROSE_TYPE16); + +// This is the default encoding +$wp1->SetDataKeyEncoding(KEYENCODING_ANTICLOCKWISE); +$wp1->legend->Hide(); +$wp1->SetPos($xpos1,$ypos1); +$wp1->SetSize(0.5); + +// Create the second plot +$wp2 = new WindrosePlot($data); +$wp2->SetType(WINDROSE_TYPE16); +$wp2->SetDataKeyEncoding(KEYENCODING_CLOCKWISE); +$wp2->legend->Hide(); +$wp2->SetPos($xpos2,$ypos1); +$wp2->SetSize(0.5); + +$txt1 = new Text('KEYENCODING_ANTICLOCKWISE'); +$txt1->SetFont(FF_COURIER,FS_BOLD,12); +$txt1->SetPos($xpos1,$ypos2); +$txt1->SetAlign('center','top'); + +$txt2 = new Text('KEYENCODING_CLOCKWISE'); +$txt2->SetFont(FF_COURIER,FS_BOLD,12); +$txt2->SetPos($xpos2,$ypos2); +$txt2->SetAlign('center','top'); + +// Finally add it to the graph and send back to the client +$graph->Add($wp1); +$graph->Add($txt1); + +$graph->Add($wp2); +$graph->Add($txt2); + +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_ex9.php b/Societes/ric/jpgraph/Examples/windrose_ex9.php new file mode 100755 index 00000000..53f3dda7 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_ex9.php @@ -0,0 +1,46 @@ + array(3,2,1,2,2), + 'N' => array(1,1,1.5,2), + 'nw' => array(1,1,1.5,2), + 'S' => array(2,3,5,1), + ); + +// Define the color,weight and style of some individual radial +// grid lines. Axis can be specified either by their (localized) +// label or by their index. +// Note; Depending on how many axis you have in the plot the +// index will vary between 0..n where n is the number of +// compass directions. +$axiscolors = array('nw'=>'brown'); +$axisweights = array('nw'=>8); // Could also be specified as 6 => 8 +$axisstyles = array('nw'=>'solid'); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,500); +$graph->title->Set('Windrose example 9'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->title->SetColor('navy'); + +// Create the free windrose plot. +$wp = new WindrosePlot($data); +$wp->SetType(WINDROSE_TYPE16); + +// Specify colors weights and style for the radial gridlines +$wp->SetRadialColors($axiscolors); +$wp->SetRadialWeights($axisweights); +$wp->SetRadialStyles($axisstyles); + +// Add some "arbitrary" text to the center +$wp->scale->SetZeroLabel("SOx\n8%%"); + +// Finally add it to the graph and send back to the client +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_icon_ex1.php b/Societes/ric/jpgraph/Examples/windrose_icon_ex1.php new file mode 100755 index 00000000..44811747 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_icon_ex1.php @@ -0,0 +1,33 @@ + array(1,1,2.5,4), + 1 => array(3,4,1,4), + 'wsw' => array(1,5,5,3), + 'N' => array(2,7,5,4,2), + 15 => array(2,7,12)); + +// First create a new windrose graph with a title +$graph = new WindroseGraph(400,400); + +// Creta an icon to be added to the graph +$icon = new IconPlot('tornado.jpg',10,10,1.3,50); +$icon->SetAnchor('left','top'); +$graph->Add($icon); + +// Setup title +$graph->title->Set('Windrose icon example'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor('navy'); + +// Create the windrose plot. +$wp = new WindrosePlot($data); + +// Add to graph and send back to client +$graph->Add($wp); +$graph->Stroke(); +?> + diff --git a/Societes/ric/jpgraph/Examples/windrose_layout_ex0.php b/Societes/ric/jpgraph/Examples/windrose_layout_ex0.php new file mode 100755 index 00000000..cd6f43cb --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_layout_ex0.php @@ -0,0 +1,45 @@ + array(10,10,13,7), + 2 => array(2,8,10), + 4 => array(1,12,22)), + array( + 4 => array(12,8,2,3), + 2 => array(5,4,4,5,2)), + array( + 1 => array(12,8,2,3), + 3 => array(5,4,4,5,2)), + array( + 2 => array(12,8,2,3), + 3 => array(5,4,4,5,2)), +); + +// Create a windrose graph with titles +$graph = new WindroseGraph(600,650); +$graph->SetShadow(); + +$graph->title->Set('Multiple plots with automatic layout'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +// Setup the individual windrose plots +$wp = array(); +for( $i=0; $i < 4; ++$i ) { + $wp[$i] = new WindrosePlot($data[$i]); + $wp[$i]->SetSize(0.22); + $wp[$i]->SetCenterSize(0.25); +} + +// Position with two rows. Two plots in top row and three plots in +// bottom row. +$hl1 = new LayoutHor( array( $wp[0], $wp[1] ) ); +$hl2 = new LayoutHor( array( $wp[2], $wp[3] ) ); +$vl = new LayoutVert( array( $hl1, $hl2) ); + +$graph->Add($vl); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/windrose_layout_ex1.php b/Societes/ric/jpgraph/Examples/windrose_layout_ex1.php new file mode 100755 index 00000000..d44a61c2 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/windrose_layout_ex1.php @@ -0,0 +1,58 @@ + array(10,10,13,7), + 2 => array(2,8,10), + 4 => array(1,12,22)), + array( + 4 => array(12,8,2,3), + 2 => array(5,4,4,5,2)), + array( + 1 => array(12,8,2,3), + 3 => array(5,4,4,5,2)), + array( + 2 => array(12,8,2,3), + 3 => array(5,4,4,5,2)), + array( + 4 => array(12,8,2,3), + 6 => array(5,4,4,5,2)) +); + +// Legend range colors +$rangecolors = array('green','yellow','red','brown'); + +// Create a windrose graph with titles +$graph = new WindroseGraph(750,700); + +$graph->title->Set('Multiple plots with automatic layout'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +// Setup the individual windrose plots +$wp = array(); +for( $i=0; $i < 5; ++$i ) { + $wp[$i] = new WindrosePlot($data[$i]); + $wp[$i]->SetType(WINDROSE_TYPE8); + if( $i < 2) { + $wp[$i]->SetSize(0.28); + } + else { + $wp[$i]->legend->Hide(); + $wp[$i]->SetSize(0.16); + $wp[$i]->SetCenterSize(0.25); + } + $wp[$i]->SetRangeColors($rangecolors); +} + +// Position with two rows. Two plots in top row and three plots in +// bottom row. +$hl1 = new LayoutHor( array( $wp[0], $wp[1] ) ); +$hl2 = new LayoutHor( array( $wp[2], $wp[3], $wp[4] ) ); +$vl = new LayoutVert( array( $hl1, $hl2) ); + +$graph->Add($vl); +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/worldmap1.jpg b/Societes/ric/jpgraph/Examples/worldmap1.jpg new file mode 100755 index 00000000..caa7c140 Binary files /dev/null and b/Societes/ric/jpgraph/Examples/worldmap1.jpg differ diff --git a/Societes/ric/jpgraph/Examples/y2synch.php b/Societes/ric/jpgraph/Examples/y2synch.php new file mode 100755 index 00000000..f00ad73e --- /dev/null +++ b/Societes/ric/jpgraph/Examples/y2synch.php @@ -0,0 +1,60 @@ +SetMargin(50,60,40,45); +$graph->SetMarginColor('white'); + + +// Setup the scales for X,Y and Y2 axis +$graph->SetScale("intlin"); // X and Y axis +$graph->SetY2Scale("lin"); // Y2 axis + +// Overall graph title +$graph->title->Set('Synchronized Y & Y2 scales'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// Title for X-axis +$graph->xaxis->title->Set('Measurement'); +$graph->xaxis->title->SetMargin(5); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_NORMAL,11); + +// Create Y data set +$lplot = new LinePlot($datay); +$graph->yaxis->title->Set('Celcius (C)'); +$graph->yaxis->title->SetMargin(5); +$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,11); +// ... and add the plot to the Y-axis +$graph->Add($lplot); + +// Create Y2 scale data set +$l2plot = new LinePlot($datay); +$l2plot->SetWeight(0); +$graph->y2axis->title->Set('Fahrenheit (F)'); +$graph->y2axis->title->SetMargin(5); // Some extra margin to clear labels +$graph->y2axis->title->SetFont(FF_ARIAL,FS_NORMAL,11); +$graph->y2axis->SetLabelFormatCallback('toFahrenheit'); +$graph->y2axis->SetColor('navy'); + +// ... and add the plot to the Y2-axis +$graph->AddY2($l2plot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/y2synch2.php b/Societes/ric/jpgraph/Examples/y2synch2.php new file mode 100755 index 00000000..5d6a88f4 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/y2synch2.php @@ -0,0 +1,60 @@ +SetMargin(50,60,40,45); +$graph->SetMarginColor('white'); + + +// Setup the scales for X,Y and Y2 axis +$graph->SetScale("textlin"); // X and Y axis +$graph->SetY2Scale("lin"); // Y2 axis + +// Overall graph title +$graph->title->Set('Synchronized Y & Y2 scales'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// Title for X-axis +$graph->xaxis->title->Set('Measurement'); +$graph->xaxis->title->SetMargin(5); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_NORMAL,11); + +// Create Y data set +$lplot = new BarPlot($datay); +$graph->yaxis->title->Set('Celcius (C)'); +$graph->yaxis->title->SetMargin(5); +$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,11); +// ... and add the plot to the Y-axis +$graph->Add($lplot); + +// Create Y2 scale data set +$l2plot = new LinePlot($datay); +$l2plot->SetWeight(0); +$graph->y2axis->title->Set('Fahrenheit (F)'); +$graph->y2axis->title->SetMargin(5); // Some extra margin to clear labels +$graph->y2axis->title->SetFont(FF_ARIAL,FS_NORMAL,11); +$graph->y2axis->SetLabelFormatCallback('toFahrenheit'); +$graph->y2axis->SetColor('navy'); + +// ... and add the plot to the Y2-axis +$graph->AddY2($l2plot); + +$graph->Stroke(); +?> diff --git a/Societes/ric/jpgraph/Examples/yearssn.txt b/Societes/ric/jpgraph/Examples/yearssn.txt new file mode 100755 index 00000000..bafcd7b3 --- /dev/null +++ b/Societes/ric/jpgraph/Examples/yearssn.txt @@ -0,0 +1,309 @@ +1700.5 5.0 +1701.5 11.0 +1702.5 16.0 +1703.5 23.0 +1704.5 36.0 +1705.5 58.0 +1706.5 29.0 +1707.5 20.0 +1708.5 10.0 +1709.5 8.0 +1710.5 3.0 +1711.5 0.0 +1712.5 0.0 +1713.5 2.0 +1714.5 11.0 +1715.5 27.0 +1716.5 47.0 +1717.5 63.0 +1718.5 60.0 +1719.5 39.0 +1720.5 28.0 +1721.5 26.0 +1722.5 22.0 +1723.5 11.0 +1724.5 21.0 +1725.5 40.0 +1726.5 78.0 +1727.5 122.0 +1728.5 103.0 +1729.5 73.0 +1730.5 47.0 +1731.5 35.0 +1732.5 11.0 +1733.5 5.0 +1734.5 16.0 +1735.5 34.0 +1736.5 70.0 +1737.5 81.0 +1738.5 111.0 +1739.5 101.0 +1740.5 73.0 +1741.5 40.0 +1742.5 20.0 +1743.5 16.0 +1744.5 5.0 +1745.5 11.0 +1746.5 22.0 +1747.5 40.0 +1748.5 60.0 +1749.5 80.9 +1750.5 83.4 +1751.5 47.7 +1752.5 47.8 +1753.5 30.7 +1754.5 12.2 +1755.5 9.6 +1756.5 10.2 +1757.5 32.4 +1758.5 47.6 +1759.5 54.0 +1760.5 62.9 +1761.5 85.9 +1762.5 61.2 +1763.5 45.1 +1764.5 36.4 +1765.5 20.9 +1766.5 11.4 +1767.5 37.8 +1768.5 69.8 +1769.5 106.1 +1770.5 100.8 +1771.5 81.6 +1772.5 66.5 +1773.5 34.8 +1774.5 30.6 +1775.5 7.0 +1776.5 19.8 +1777.5 92.5 +1778.5 154.4 +1779.5 125.9 +1780.5 84.8 +1781.5 68.1 +1782.5 38.5 +1783.5 22.8 +1784.5 10.2 +1785.5 24.1 +1786.5 82.9 +1787.5 132.0 +1788.5 130.9 +1789.5 118.1 +1790.5 89.9 +1791.5 66.6 +1792.5 60.0 +1793.5 46.9 +1794.5 41.0 +1795.5 21.3 +1796.5 16.0 +1797.5 6.4 +1798.5 4.1 +1799.5 6.8 +1800.5 14.5 +1801.5 34.0 +1802.5 45.0 +1803.5 43.1 +1804.5 47.5 +1805.5 42.2 +1806.5 28.1 +1807.5 10.1 +1808.5 8.1 +1809.5 2.5 +1810.5 0.0 +1811.5 1.4 +1812.5 5.0 +1813.5 12.2 +1814.5 13.9 +1815.5 35.4 +1816.5 45.8 +1817.5 41.0 +1818.5 30.1 +1819.5 23.9 +1820.5 15.6 +1821.5 6.6 +1822.5 4.0 +1823.5 1.8 +1824.5 8.5 +1825.5 16.6 +1826.5 36.3 +1827.5 49.6 +1828.5 64.2 +1829.5 67.0 +1830.5 70.9 +1831.5 47.8 +1832.5 27.5 +1833.5 8.5 +1834.5 13.2 +1835.5 56.9 +1836.5 121.5 +1837.5 138.3 +1838.5 103.2 +1839.5 85.7 +1840.5 64.6 +1841.5 36.7 +1842.5 24.2 +1843.5 10.7 +1844.5 15.0 +1845.5 40.1 +1846.5 61.5 +1847.5 98.5 +1848.5 124.7 +1849.5 96.3 +1850.5 66.6 +1851.5 64.5 +1852.5 54.1 +1853.5 39.0 +1854.5 20.6 +1855.5 6.7 +1856.5 4.3 +1857.5 22.7 +1858.5 54.8 +1859.5 93.8 +1860.5 95.8 +1861.5 77.2 +1862.5 59.1 +1863.5 44.0 +1864.5 47.0 +1865.5 30.5 +1866.5 16.3 +1867.5 7.3 +1868.5 37.6 +1869.5 74.0 +1870.5 139.0 +1871.5 111.2 +1872.5 101.6 +1873.5 66.2 +1874.5 44.7 +1875.5 17.0 +1876.5 11.3 +1877.5 12.4 +1878.5 3.4 +1879.5 6.0 +1880.5 32.3 +1881.5 54.3 +1882.5 59.7 +1883.5 63.7 +1884.5 63.5 +1885.5 52.2 +1886.5 25.4 +1887.5 13.1 +1888.5 6.8 +1889.5 6.3 +1890.5 7.1 +1891.5 35.6 +1892.5 73.0 +1893.5 85.1 +1894.5 78.0 +1895.5 64.0 +1896.5 41.8 +1897.5 26.2 +1898.5 26.7 +1899.5 12.1 +1900.5 9.5 +1901.5 2.7 +1902.5 5.0 +1903.5 24.4 +1904.5 42.0 +1905.5 63.5 +1906.5 53.8 +1907.5 62.0 +1908.5 48.5 +1909.5 43.9 +1910.5 18.6 +1911.5 5.7 +1912.5 3.6 +1913.5 1.4 +1914.5 9.6 +1915.5 47.4 +1916.5 57.1 +1917.5 103.9 +1918.5 80.6 +1919.5 63.6 +1920.5 37.6 +1921.5 26.1 +1922.5 14.2 +1923.5 5.8 +1924.5 16.7 +1925.5 44.3 +1926.5 63.9 +1927.5 69.0 +1928.5 77.8 +1929.5 64.9 +1930.5 35.7 +1931.5 21.2 +1932.5 11.1 +1933.5 5.7 +1934.5 8.7 +1935.5 36.1 +1936.5 79.7 +1937.5 114.4 +1938.5 109.6 +1939.5 88.8 +1940.5 67.8 +1941.5 47.5 +1942.5 30.6 +1943.5 16.3 +1944.5 9.6 +1945.5 33.2 +1946.5 92.6 +1947.5 151.6 +1948.5 136.3 +1949.5 134.7 +1950.5 83.9 +1951.5 69.4 +1952.5 31.5 +1953.5 13.9 +1954.5 4.4 +1955.5 38.0 +1956.5 141.7 +1957.5 190.2 +1958.5 184.8 +1959.5 159.0 +1960.5 112.3 +1961.5 53.9 +1962.5 37.6 +1963.5 27.9 +1964.5 10.2 +1965.5 15.1 +1966.5 47.0 +1967.5 93.7 +1968.5 105.9 +1969.5 105.5 +1970.5 104.5 +1971.5 66.6 +1972.5 68.9 +1973.5 38.0 +1974.5 34.5 +1975.5 15.5 +1976.5 12.6 +1977.5 27.5 +1978.5 92.5 +1979.5 155.4 +1980.5 154.6 +1981.5 140.5 +1982.5 115.9 +1983.5 66.6 +1984.5 45.9 +1985.5 17.9 +1986.5 13.4 +1987.5 29.2 +1988.5 100.2 +1989.5 157.6 +1990.5 142.6 +1991.5 145.7 +1992.5 94.3 +1993.5 54.6 +1994.5 29.9 +1995.5 17.5 +1996.5 8.6 +1997.5 21.5 +1998.5 64.3 +1999.5 93.3 +2000.5 119.6 +2001.5 111.0 +2002.5 104.0 +2003.5 63.7 +2004.5 40.4 +2005.5 29.8 +2006.5 15.2 +2007.5 7.5 +2008.5 2.9 diff --git a/Societes/ric/jpgraph/README b/Societes/ric/jpgraph/README new file mode 100755 index 00000000..cd490fdf --- /dev/null +++ b/Societes/ric/jpgraph/README @@ -0,0 +1,63 @@ +README FOR JPGRAPH 4.4.0 +========================= + +This package contains the JpGraph PHP library version 4.4.0 + +The library is Copyright (C) 2000-2010 Asial Corporatoin and +released under dual license QPL 1.0 for open source and educational +use and JpGraph Professional License for commercial use. + +Please see full license details at +http://jpgraph.net/pro/ +http://jpgraph.net/download/ + + +Requirements: +------------- +Miminum: +* PHP 5.1.0 or higher +* GD 2.0.28 or higher +Note: Earlier versions might work but is unsupported. + +Recommended: +* >= PHP 5.2.0 +* PHP Builtin GD library + +Installation +------------ +1. Make sure that the PHP version is compatible with the stated + requirements and that the PHP installation has support for + the GD library. Please run phpinfo() to check if GD library + is supported in the installation. + If the GD library doesn't seem to be installed + please consult the PHP manual under section "Image" for + instructions on where to find this library. Please refer to + the manual section "Verifying your PHP installation" + +2. Unzip and copy the files to a directory of your choice where Your + httpd sever can access them. + For a global site installation you should copy the files to + somewhere in the PHP search path. + +3. Check that the default directory paths in jpg-config.inc.php + for cache directory and TTF directory suits your installation. + Note1: The default directories are different depending on if + the library is running on Windows or UNIX. + Note2: Apache/PHP must have write permission to your cache + directory if you enable the cache feature. By default the cache + is disabled. + + +Documentation +------------- +The installation includes HTML documentation and reference guide for the +library. The portal page for all documentation is +/docs/index.html + + +Bug reports and suggestions +--------------------------- +Should be reported using the contact form at + +http://jpgraph.net/contact/ + diff --git a/Societes/ric/jpgraph/VERSION b/Societes/ric/jpgraph/VERSION new file mode 100755 index 00000000..76e176b1 --- /dev/null +++ b/Societes/ric/jpgraph/VERSION @@ -0,0 +1 @@ +Version: v4.4.0 diff --git a/Societes/ric/jpgraph/barcode/demoapp/barcode_image.php b/Societes/ric/jpgraph/barcode/demoapp/barcode_image.php new file mode 100755 index 00000000..2ad88fd6 --- /dev/null +++ b/Societes/ric/jpgraph/barcode/demoapp/barcode_image.php @@ -0,0 +1,75 @@ + 5 ) { + echo "

      Module width must be between 1 and 5 pixels

      "; +} +elseif( $data==="" ) { + echo "

      Please enter data to be encoded, select symbology and press 'Ok'.

      "; + echo "Note: Data must be valid for the choosen encoding."; +} +elseif( $code==-1 ) { + echo "

      No code symbology selected.

      "; +} +elseif( $height < 10 || $height > 500 ) { + echo "

      Height must be in range [10, 500]

      "; +} +elseif( $scale < 0.1 || $scale > 15 ) { + echo "

      Scale must be in range [0.1, 15]

      "; +} +else { + if( $code==20 ) { + $encoder = BarcodeFactory::Create(6); + $encoder->UseExtended(); + } + else { + $encoder = BarcodeFactory::Create($code); + } + $b = $backend=='EPS' ? 'PS' : $backend; + $b = substr($backend,0,5) == 'IMAGE' ? 'IMAGE' : $b; + $e = BackendFactory::Create($b,$encoder); + if( substr($backend,0,5) == 'IMAGE' ) { + if( substr($backend,5,1) == 'J' ) + $e->SetImgFormat('JPEG'); + } + if( $e ) { + if( $backend == 'EPS' ) + $e->SetEPS(); + if( $pswidth!='' ) + $modwidth = $pswidth; + $e->SetModuleWidth($modwidth); + $e->AddChecksum($checksum); + $e->NoText($notext); + $e->SetScale($scale); + $e->SetVertical($vertical); + $e->ShowFrame($showframe); + $e->SetHeight($height); + $r = $e->Stroke($data,$file,$info,$info); + if( $r ) + echo nl2br(htmlspecialchars($r)); + if( $file != '' ) + echo "

      Wrote file $file."; + } + else + echo "

      Can't create choosen backend: $backend.

      "; +} + +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/barcode/demoapp/barcode_menu.php b/Societes/ric/jpgraph/barcode/demoapp/barcode_menu.php new file mode 100755 index 00000000..ea503066 --- /dev/null +++ b/Societes/ric/jpgraph/barcode/demoapp/barcode_menu.php @@ -0,0 +1,125 @@ +

      JpGraph Barcode 1.0

      +
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Data:
      + +
      +Encoding:
      + +
      +Module width:
      + +
      +Add checksum:
      + +
      +Hide text:
      + +
      +Show frame:
      + +
      +Vertical layout:
      + +
      +Height:
      + +
      +Scale:
      + +
      +Write to file:
      + +
      +Format:
      + +
      +PS module width: + +
      +
      +(If specified will override Module width above)
      +
      +Debug info:
      + +
      +
      + +
      +
      + +

      +


      + + + diff --git a/Societes/ric/jpgraph/barcode/demoapp/index.html b/Societes/ric/jpgraph/barcode/demoapp/index.html new file mode 100755 index 00000000..e65107cb --- /dev/null +++ b/Societes/ric/jpgraph/barcode/demoapp/index.html @@ -0,0 +1,10 @@ + + + +Barcode SYSTEMTEST + + +; + + + diff --git a/Societes/ric/jpgraph/barcode/examples/barcode_errhandling_ex0.php b/Societes/ric/jpgraph/barcode/examples/barcode_errhandling_ex0.php new file mode 100755 index 00000000..4f5b5393 --- /dev/null +++ b/Societes/ric/jpgraph/barcode/examples/barcode_errhandling_ex0.php @@ -0,0 +1,16 @@ +Stroke('abc123'); +} catch( JpGraphException $e ) { + //echo 'Error: ' . $e->getMessage()."\n"; + JpGraphError::Raise($e->getMessage()); +} + +?> diff --git a/Societes/ric/jpgraph/barcode/examples/barcode_ex0.php b/Societes/ric/jpgraph/barcode/examples/barcode_ex0.php new file mode 100755 index 00000000..021b5c7c --- /dev/null +++ b/Societes/ric/jpgraph/barcode/examples/barcode_ex0.php @@ -0,0 +1,11 @@ +Stroke('ABC123'); + +?> diff --git a/Societes/ric/jpgraph/barcode/examples/barcode_ex1.php b/Societes/ric/jpgraph/barcode/examples/barcode_ex1.php new file mode 100755 index 00000000..df7653b5 --- /dev/null +++ b/Societes/ric/jpgraph/barcode/examples/barcode_ex1.php @@ -0,0 +1,14 @@ +SetModuleWidth(2); +$e->SetHeight(20); +echo nl2br($e->Stroke('3125134772')); + + +?> diff --git a/Societes/ric/jpgraph/barcode/examples/barcode_ex2.php b/Societes/ric/jpgraph/barcode/examples/barcode_ex2.php new file mode 100755 index 00000000..8fce58e6 --- /dev/null +++ b/Societes/ric/jpgraph/barcode/examples/barcode_ex2.php @@ -0,0 +1,14 @@ +SetModuleWidth(2); +$e->SetHeight(70); +$ps = $e->Stroke('3125134772'); +echo nl2br(htmlspecialchars($ps)); + +?> diff --git a/Societes/ric/jpgraph/barcode/examples/barcode_ex3.php b/Societes/ric/jpgraph/barcode/examples/barcode_ex3.php new file mode 100755 index 00000000..a63f4ad4 --- /dev/null +++ b/Societes/ric/jpgraph/barcode/examples/barcode_ex3.php @@ -0,0 +1,17 @@ +"; +$encoder = BarcodeFactory::Create(ENCODING_CODEI25); +$e = BackendFactory::Create(BACKEND_PS,$encoder); +$e->SetModuleWidth(2); +$e->SetHeight(70); +$e->SetEPS(); +$ps = $e->Stroke('3125134772'); +echo nl2br(htmlspecialchars($ps)); + + +?> diff --git a/Societes/ric/jpgraph/barcode/examples/barcode_ex4.php b/Societes/ric/jpgraph/barcode/examples/barcode_ex4.php new file mode 100755 index 00000000..721b56ba --- /dev/null +++ b/Societes/ric/jpgraph/barcode/examples/barcode_ex4.php @@ -0,0 +1,12 @@ +SetModuleWidth(2); +$e->Stroke('1234'); + +?> diff --git a/Societes/ric/jpgraph/barcode/examples/barcode_usps_example.php b/Societes/ric/jpgraph/barcode/examples/barcode_usps_example.php new file mode 100755 index 00000000..80469bea --- /dev/null +++ b/Societes/ric/jpgraph/barcode/examples/barcode_usps_example.php @@ -0,0 +1,74 @@ +_USPS_chkd(substr($data,8)); + $data = '420'. $aZIP . '~191' . $aServiceType . $aDUNS . $aSeqNbr; + return $data . $cd; + } + + // Get type 2 of confirmation code (without ZIP) + function GetPIC($aServiceType,$aDUNS,$aSeqNbr) { + // Convert to USPS format with AI=91 + $data = '91' . $aServiceType . $aDUNS . $aSeqNbr; + $cd = $this->_USPS_chkd($data); + return $data . $cd; + } + +} + +$usps = new USPS_Confirmation(); +$zip = '92663'; +$service = '21'; +$DUNS = '805213907'; +$seqnr = '04508735'; +$data = $usps->GetPICwithZIP($zip,$service,$DUNS,$seqnr); +//$data = $usps->GetPIC('01','123456789','00000001'); + +$encoder = BarcodeFactory::Create(ENCODING_EAN128); +$e = BackendFactory::Create(BACKEND_IMAGE,$encoder); +$e->SetModuleWidth(2); +$e->SetFont(FF_ARIAL,FS_NORMAL,14); +$e->Stroke($data); + +?> \ No newline at end of file diff --git a/Societes/ric/jpgraph/barcode/mkbarcode.php b/Societes/ric/jpgraph/barcode/mkbarcode.php new file mode 100755 index 00000000..57ef6ec0 --- /dev/null +++ b/Societes/ric/jpgraph/barcode/mkbarcode.php @@ -0,0 +1,281 @@ +argv = ($_SERVER['argv']); + $this->argc = ($_SERVER['argc']); + } + + function PrintUsage() { + $n = $this->argv[0]; + echo "$n -b [-r -h -c -o -m -s -y -f ] datastring \n". + "Create the specified barcode\n". + "-b What symbology to use, one of the following strings (case insensitive)\n". + " UPCA \n". + " UPCE \n". + " EAN128 \n". + " EAN13 \n". + " EAN8 \n". + " CODE11 \n". + " CODE39 \n". + " CODE128 \n". + " CODE25 \n". + " CODEI25 \n". + " CODABAR \n". + " BOOKLAND \n". + "-c Add checkdigit for symbologies where this is optional\n". + "-o Output format. 0=Image, 1=PS, 2=EPS\n". + "-m Module width\n". + "-s Scale factor\n". + "-h Show this help\n". + "-f Filename to write to\n". + "-r Rotate barcode 90 degrees\n". + "-y height Set height in pixels\n". + "-x Hide the human readable text\n". + "--silent Silent. Don't give any error mesages\n"; + exit(1); + } + + function Get() { + $barcode='code39'; + $hide=false; + $checkdigit=false; + $modulewidth=2; + $scale=1; + $output=0; + $filename=''; + $data = ''; + $rotate = false; + $silent=false; + $height = 70; + if( ($n=$this->GetNum()) > 0 ) { + $i=1; + while( $i <= $n ) { + switch( $this->argv[$i] ) { + case '-h': + $this->PrintUsage(); + exit(0); + break; + case '-b': + $barcode = $this->argv[++$i]; + break; + case '-o': + $output = (int)$this->argv[++$i]; + break; + case '-y': + $height = (int)$this->argv[++$i]; + break; + case '-x': + $hide=true; + break; + case '-r': + $rotate=true; + break; + case '-c': + $checkdigit=true; + break; + case '--silent': + $silent=true; + break; + case '-s': + $scale = (float)$this->argv[++$i]; + break; + case '-m': + $modulewidth = (float)$this->argv[++$i]; + break; + case '-f': + $filename = $this->argv[++$i]; + break; + default: + if( $data == '' ) { + $data = $this->argv[$i]; + } + else { + $this->PrintUsage(); + die("Illegal specified parameters"); + } + break; + } + ++$i; + } + + } + + if( $output < 0 || $output > 2 ) { + fwrite(STDERR,"Unkown output format ($output)\n"); + exit(1); + } + + if( $output === 0 ) { + $modulewidth = floor($modulewidth); + } + + // Sanity check + if( $modulewidth > 15 ) { + fwrite(STDERR,"Too large modulewidth\n"); + exit(1); + } + + // Sanity check + if( $height > 1000 ) { + fwrite(STDERR,"Too large height\n"); + exit(1); + } + + // Sanity check + if( $scale > 15 ) { + fwrite(STDERR,"Too large scale factor\n"); + exit(1); + } + + if( strlen($filename) > 256 ) { + fwrite(STDERR,"Too long filename\n"); + exit(1); + } + + if( trim($data) == '' ) { + fwrite(STDERR,"No input data specified\n"); + exit(1); + } + + $barcodes = array( + 'UPCA' => ENCODING_UPCA, + 'UPCE' => ENCODING_UPCE, + 'EAN128' => ENCODING_EAN128, + 'EAN13' => ENCODING_EAN13, + 'EAN8' => ENCODING_EAN8, + 'CODE11' => ENCODING_CODE11, + 'CODE39' => ENCODING_CODE39, + 'CODE128' => ENCODING_CODE128, + 'CODE25' => ENCODING_CODE25, + 'CODEI25' => ENCODING_CODEI25, + 'CODABAR' => ENCODING_CODABAR, + 'BOOKLAND' => ENCODING_BOOKLAND, + ); + $barcode = strtoupper($barcode); + if( key_exists($barcode,$barcodes) ) { + $barcode = $barcodes[$barcode]; + } + else { + fwrite(STDERR,'Specified barcode symbology ('.$barcode.") is not supported\n"); + exit(1); + } + + $ret = array( + 'barcode' => $barcode, + 'hide' => $hide, + 'modulewidth' => $modulewidth, + 'scale' => $scale, + 'output' => $output, + 'data' => $data, + 'silent' => $silent, + 'rotate' => $rotate, + 'height' => $height, + 'checkdigit' => $checkdigit, + 'filename' => $filename + ); + + return $ret; + } + + function _Dump() { + var_dump($this->argv); + } + + function GetNum() { + return $this->argc-1; + } +} + +//---------------------------------------------------------------------- +// CLASS Driver +// Main driver class to create barcodes with the parmeters specified on +// the command line. +//---------------------------------------------------------------------- +class Driver { + + private $iParams; + static public $silent=false; + + static public function ErrHandlerPS(Exception $e) { + if( !Driver::$silent ) + fwrite(STDERR,$e->getMessage()."\n"); + exit(1); + } + + static public function ErrHandlerImg(Exception $e) { + if( !Driver::$silent ) + fwrite(STDERR,$e->getMessage()."\n"); + $errobj = new JpGraphErrObjectImg(); + $errobj->Raise($e->getMessage()); + exit(1); + } + + function Run($aParams) { + + $this->iParams = $aParams; + + Driver::$silent = $aParams['silent']; + + $encoder = BarcodeFactory::Create($aParams['barcode']); + $encoder->AddChecksum($aParams['checkdigit']); + switch( $aParams['output'] ) { + case 0: + $e = BackendFactory::Create(BACKEND_IMAGE,$encoder); + set_exception_handler(array('Driver','ErrHandlerImg')); + break; + case 1: + $e = BackendFactory::Create(BACKEND_PS,$encoder); + set_exception_handler(array('Driver','ErrHandlerPS')); + break; + case 2: + $e = BackendFactory::Create(BACKEND_PS,$encoder); + $e->SetEPS(); + set_exception_handler(array('Driver','ErrHandlerPS')); + break; + } + $e->SetHeight($aParams['height']); + $e->SetVertical($aParams['rotate']); + $e->SetModuleWidth($aParams['modulewidth']); + $e->SetScale($aParams['scale']); + $e->HideText($aParams['hide']); + if( $aParams['output'] === 0 ) { + $err = $e->Stroke($aParams['data'], $aParams['filename']); + } + else { + $s = $e->Stroke($aParams['data'], $aParams['filename']); + if( $aParams['filename'] == '' ) { + // If no filename specified then return the generated postscript + echo $s; + } + } + } +} + +$pa = new ParseArgs(); +$params = $pa->Get(); +$driver = new Driver(); +$driver->Run($params); + +// Successfull termination +exit(0); + +?> diff --git a/Societes/ric/jpgraph/docs/chunkhtml/admon-bug.png b/Societes/ric/jpgraph/docs/chunkhtml/admon-bug.png new file mode 100755 index 00000000..aea64469 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/admon-bug.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/admon-bug2.png b/Societes/ric/jpgraph/docs/chunkhtml/admon-bug2.png new file mode 100755 index 00000000..36b52e54 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/admon-bug2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/admon-bug2_small.png b/Societes/ric/jpgraph/docs/chunkhtml/admon-bug2_small.png new file mode 100755 index 00000000..96ac6ae8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/admon-bug2_small.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/admon-caution.png b/Societes/ric/jpgraph/docs/chunkhtml/admon-caution.png new file mode 100755 index 00000000..ecdc0f92 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/admon-caution.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/admon-note.png b/Societes/ric/jpgraph/docs/chunkhtml/admon-note.png new file mode 100755 index 00000000..4ffa19c7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/admon-note.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/admon-tip.png b/Societes/ric/jpgraph/docs/chunkhtml/admon-tip.png new file mode 100755 index 00000000..a25faae6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/admon-tip.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/admon-warning.png b/Societes/ric/jpgraph/docs/chunkhtml/admon-warning.png new file mode 100755 index 00000000..ecdc0f92 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/admon-warning.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apa.html b/Societes/ric/jpgraph/docs/chunkhtml/apa.html new file mode 100755 index 00000000..d135e080 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apa.html @@ -0,0 +1,117 @@ +Appendix A. How this manual was produced

      Appendix A. How this manual was produced

      + +

      Unfortunately we couldn't locate any off-the-shelf system for producing this fairly + large manual with some special requirements like automatic inclusion of PHP source that + should be highlighted and in addition rendered by running the scripts and automatically + include the resulting images in the resulting manual. To solve this we have based our + solution around a DocBook5 setup with some custom steps that are described below.

      +

      DocBook5

      +

      The source for the manual is written as a number of split DocBook5 XML compliant documents using + XInclude to bring them + together into one master document.

      +

      The transformation of the XML source files was done by the means of a DocBook XSL + stylesheet using the xsltproc XSL processor. (see libxslt) The DocBook5 + style sheets can directly produce either single file HTML or chunked (many files) HTML + (or XHTML).

      +

      In addition there is a style sheet to produce FO (Formatted Objects) output which can + be further refined to PDF with the help of the fop processor (see + Apache FOP). + Unfortunately some formatting instructions in the source are lost in the transformation + to PDF output. This means that some aspects of the manual doesn't come out perfect in + the PDF output. For this reason the PDF version of the documentation should only be seen + as a complementary documentation. The master output format is the chunked HTML.

      +

      +

      Note

      +

      In formatting the chunked output we have prioritized to keep down the number + of files to avoid many pages with only a small amount of text on them. Our view + is that documentation which breaks the pages down to very low levels are + extremely tiresome to read.

      +

      +

      +

      Phing based build system

      +

      The overall build process is drive by a Phing XML build script. + Phing (See http://phing.info/trac/ ) is most easily described as a PHP version of the + Java build system Ant. It has several advantages compared with a more + traditional make setup, the build files are all written in clear XML + which makes them easy to read and maintain. In addition there are a number of built-in + commands that makes deploying and handling of files extremely easy compared with a + traditional make system which must rely on external tools to do everything.

      +

      Syntax highlighting of example code

      +

      The syntax highlighting and handling of the numerous example images initially posed a + small problem since there are no off-the-shelf good support for handling this. As a + basic requirement we needed all PHP scripts to be runnable and kept in the normal + example directories and then automatically included when the DocBook source was + processed.

      +

      What was needed was some easy way by which we could just mark in the DocBook source + (and still maintain valid DocBook XML) that we wanted a particular named example + included and either show just the image, just the source or both. In addition we + required the source to be syntax highlighted.

      +

      To handle this we had to write some custom tasks to extend Phing. In principal our + build system works as follows.

      +
      1. +

        When a new example have been added or an old one removed a special target in + our build file are run which extracts all scripts from the example sections in + the *.XML files. The name of each found example script in the XML source + corresponds to an existing PHP script in the Example directory in the JpGraph + distribution. A batch file is then automatically created which is subsequently + run and all generated images stored on disk.

        +
      2. +

        When the normal DocBook XSL processing is done all the special example markups + in the XML source is replaced with XML tags to include the image and make sure + that the referred script is a proper PHP file name.

        +
      3. +

        After the XSL process has been run all programlisting tags will have a special + token, for example "\#\#example0.php\#\#" this then instructs a + custom Phing task to replace the name in the double "#" tags + with the corresponding source (in the resulting HTML code). At the same time + this source is included it is also passed through the custom syntax highlight + filter so that it comes out as proper marked up source which is inserted + directly in the resulting HTML file.

        +
      +

      The overall build system is illustrated in Figure A.1. The documentation build process

      +

      Figure A.1. The documentation build process

      + +
      The documentation build process
      +

      +

      The way the special markup works is that whenever we want a full example (source and + image) we create a <programlisting> tag with the file name and title within (single) + "#" characters. For example to include the very first example in this manual we have the + following tags in the docbook XML source

      +

      +

      <programlisting>#example0|The very first example#</programlisting>

      +

      +

      The first part (before the "|") is the file name without extension that we want to + include and the second part (after the "|") is the title we want to use. This markup + will include both the source as well as the generated graph/image directly in the + resulting HTML.

      +

      When new examples have been added the examples target in our build file is run and + that extracts all the example script used in the book (in the above example + "example0.php") and creates a batch file which is then run to create + all the images used in the examples.

      +

      The syntax highlighting is handled by a custom written filter extensions to + Phing which internally uses the PEAR package + Pear::Text_Highlight.

      +

      Notes:

      +

      +

      1. +

        In the current setup a regular expression in the Phing build script is + responsible for replacing the markup in the programlisting with a + <figure> tag and a new <programlisting>. This should be done with a + custom XSL layer instead and we will update this for the next major + revision.

        +
      2. +

        Since the syntax highlighting makes use of HTML markup code for the colors + the PDF output does not support syntax highlighting

        +
      3. +

        For the reference manual we still use our old DB based documentation + system which stores all the methods and classes in a DB augmented with + source documentation. (We actually prefer this in front of adding a lot of + end user documentation with PHPDoc comment sin the source which have a + tendency of cluttering up the code as well as making it prone to error since + the source files have to be modified in order to update a simple typo in the + documentations. Our next step is therefor to update that old system to be + able to produce DocBook5 compliant XML for further formatting and + processing.

        +

      +

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apb.html b/Societes/ric/jpgraph/docs/chunkhtml/apb.html new file mode 100755 index 00000000..e60edfd8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apb.html @@ -0,0 +1,73 @@ +Appendix B. JpGraph Professional License

      Appendix B. JpGraph Professional License

      + +

      Single License

      + +
      1. +

        The JpGraph Professional License will be referred to as "The license" in the + remainder of this text.

        +
      2. +

        This irrevocable, perpetual license covers versions 1.x & 2.x of + JpGraph

        +
      3. +

        This license gives the holder right to install JpGraph libraries on One Server + which can run one or several virtual HTTP servers.

        +
      4. +

        The license holder is allowed to make modifications to the JpGraph sources but + in no event will the original copyright holders of this library be held + responsible for action or actions resulting from any modifications of the + source.

        +
      5. +

        The license holder is not required to publicize or otherwise make available + any software used in conjunction with JpGraph.

        +
      6. +

        The license holder may not re-distribute the library on it's own or versions + thereof to third party without prior written permission of the copyright + holder.

        +
      7. +

        JpGraph License does not allow the library to be redistributed as part of + another product.

        +
      8. +

        In no event shall the copyright notice in any of the source files supplied in + JpGraph be removed or modified.

        +
      9. +

        The names "JpGraph" or "Aditus" must not be used to endorse or promote + products derived from this software without prior written permission.

        +
      10. +

        The license may be transferred to another server by removing all installed + files from the old server.

        +
      11. +

        The wording of this license may change without notice for future versions of + JpGraph.

        +
      12. +

        By acquiring a license the licensee agrees to all terms and conditions in this + license text.

        +
      13. +

        Limitations of Liability

        +

        In no event, except for intellectual property claim, shall the initial + developers or copyright holders be liable for any damages whatsoever, including + - but not restricted to - lost revenue or profits or other direct, indirect, + special, incidental or consequential damages, even if they have been advised of + the possibility of such damages, except to the extent invariable law, if any, + provides otherwise.

        +

        In addition, in no event does this license authorize you to use JpGraph in + applications or systems where JpGraphs failure to perform can reasonably be + expected to result in a physical injury, loss of life or any economical damage. + Any such use by the licensee is entirely at the licensees own risk, and the + licensee agrees to hold the original copyright holders of JpGraph harmless from + any claims or losses relating to any such unauthorized use.

        +
      14. +

        Limited Warranty

        +

        JpGraph warrants that licensor is owner of the software with authority to + license the software to licensee and that the software does not infringe third + party intellectual property rights. Licensor agrees to indemnify, defend and + hold harmless licensee from any claims either that licensor does not own the + software or that the software infringes a third party's intellectual + property.

        +

        THE SOFTWARE AND THIS LICENSE DOCUMENT ARE PROVIDED AS IS. THE FOREGOING + WARRANTY IS IN LIEU OF ALL OTHER WARRANTIES, EXPRESS OR IMPLIED, OF ANY KIND, + INCLUDING WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE.

        +
      +
      + +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apbs02.html b/Societes/ric/jpgraph/docs/chunkhtml/apbs02.html new file mode 100755 index 00000000..2a7f2734 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apbs02.html @@ -0,0 +1,64 @@ +Bulk (Re-seller license)

      Bulk (Re-seller license)

      + +
      1. +

        The JpGraph Professional License will be referred to as "The license" in the + remainder of this text.

        +
      2. +

        This irrevocable, perpetual license covers versions 1.x & 2.x of + JpGraph

        +
      3. +

        This license gives the licensee the right to distribute the JpGraph libraries, + as part of its product portfolio and to use the Jpgraph libraries with its + hosted service offerings. Specifically this license gives the licensee the right + to deploy an unlimited number of JpGraph installations as part of their product + portfolio and offer an unlimited number of hosted services that use the JpGraph + libraries to an unlimited number of users.

        +
      4. +

        The license holder is allowed to make modifications to the JpGraph sources but + in no event will the original copyright holders of this library be held + responsible for action or actions resulting from any modifications of the + source.

        +
      5. +

        JpGraph libraries is only licensed to be redistributed as a part of the + licensees products. Specifically it may not be sold or re-distributed on it's + own.

        +
      6. +

        In no event shall the copyright notice in any of the source files supplied in + JpGraph be removed or modified.

        +
      7. +

        The names "JpGraph" or "Aditus" must not be used to endorse or promote + products derived from this software without prior written permission.

        +
      8. +

        The wording of this license may change without notice for future versions of + JpGraph.

        +
      9. +

        By acquiring a license the licensee agrees to all terms and conditions in this + license text.

        +
      10. +

        Limitations of Liability

        +

        In no event, except for intellectual property claim, shall the initial + developers or copyright holders be liable for any damages whatsoever, including + - but not restricted to - lost revenue or profits or other direct, indirect, + special, incidental or consequential damages, even if they have been advised of + the possibility of such damages, except to the extent invariable law, if any, + provides otherwise.

        +

        In addition, in no event does this license authorize you to use JpGraph in + applications or systems where JpGraphs failure to perform can reasonably be + expected to result in a physical injury, loss of life or any economical damage. + Any such use by the licensee is entirely at the licensees own risk, and the + licensee agrees to hold the original copyright holders of JpGraph harmless from + any claims or losses relating to any such unauthorized use.

        +
      11. +

        Limited Warranty

        +

        JpGraph warrants that licensor is owner of the software with authority to + license the software to licensee and that the software does not infringe third + party intellectual property rights. Licensor agrees to indemnify, defend and + hold harmless licensee from any claims either that licensor does not own the + software or that the software infringes a third party's intellectual + property.

        +

        THE SOFTWARE AND THIS LICENSE DOCUMENT ARE PROVIDED AS IS. THE FOREGOING + WARRANTY IS IN LIEU OF ALL OTHER WARRANTIES, EXPRESS OR IMPLIED, OF ANY KIND, + INCLUDING WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE.

        +
      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apc.html b/Societes/ric/jpgraph/docs/chunkhtml/apc.html new file mode 100755 index 00000000..d31498e0 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apc.html @@ -0,0 +1,1324 @@ +Appendix C. FAQ

      Appendix C. FAQ

      +
      C.1. Where should I install the library?
      C.2. Can I use JpGraph with Windows/Unix/Linux etc?
      C.3. My Web-admin does not allow PHP any write permissions and hence I can't use + the cache feature of JpGraph. Is there any way to completely turn off the + caching feature?
      C.4. After installation all I get is an empty page when I try any of the + examples?
      C.5. How can I send the generated graph to both the browser and a file at the same + time?
      C.6. What is this 'auto' I see in all the Graph() creating in the Examples + directory? Do I need it?
      C.7. The Client side image map examples does not work on my machine?
      C.8. When I run 'testsuit_jpgraph.php' I get a warning "Due to insufficient + permission the source files can't be automatically created"
      C.9. How can I pass data to my image generating script?
      C.10. How can I use data from an Excel spreadsheet?
      C.11. How do I pass data from a Database (e.g. MySQL) to a script to produce a + graph?
      C.12. I change my data but my image does not get updated? The old image is still + send back to the browser?
      C.13. Can I run JpGraph in batch-mode just outputting an image directly to a file + and not streamed back to the browser?
      C.14. Is there a mailing list for JpGraph?
      C.15. Do you offer a commercial version of JpGraph with full support and no + QPL?
      C.16. Some of my script just return a blank image and no error messages?
      C.17. I can see the generated image fine in the browser but I can't print it? +
      C.18. How can I generate an image directly to disk without streaming it back to the + browser?
      C.19. When I try to plot graphs with many 1000:s of data points I only get a blank + page. Is there a limit in JpGraph to the number of data points you can plot? +
      C.20. How can I use an image in a dynamically created PDF?
      C.21. How can I force the user to get a question to download the generated image + instead of just displaying it in the browser?
      C.22. How can I open up a CSIM link in a graph in a separate window?
      C.23. No TTF fonts are displayed.
      C.24. All my TTF fonts are yellow no matter what color I specify?
      C.25. I get an error "This PHP build has not been configured with TTF support. You + need to recompile your PHP installation with FreeType support."
      C.26. I get an error "Fatal error: Font cant be + found"
      C.27. I get the error "Can't find font file + FONT_PATHarial.ttf" (or some other font)
      C.28. I get an error "Font file ... is not readable or does not + exist"
      C.29. How can I install additional TTF font families?
      C.30. How can I display special characters that isn't available on the + keyboard?
      C.31. When I put a text object on a graph and use Set90AndMargin() it doesn't + show?
      C.32. I get an error "Error: Cannot add header information + - headers already sent ..." +
      C.33. I get an error "Unknown function + imagecreate"
      C.34. I get an error "Unknown function + imagecreatejpeg"
      C.35. I get an error "Warning: MkDir failed (Permission + denied) in jpgraph.php on line XXXX"
      C.36. I get an error "Fatal error: Undefined class name + "parent" in jpgraph.php on line xxxx"
      C.37. I get an error "Your data contains non-numeric + values."
      C.38. I get an error "Date is outside specified scale + range" trying to create a Gantt chart
      C.39. I get an error "Invalid file handle in jpgraph.php at + line XXXX"
      C.40. I get an error "Fatal error: Call to undefined + function: getcsimareas() ..." +
      C.41. I get an error "Fatal error: Call to undefined + function: imagetypes()"
      C.42. I get an error saying something like "Error: + 'parent::' not valid in context..."
      C.43. I get an error "Image cannot be displayed because it + contains errors.."
      C.44. When I use PHP5 + JpGraph 2.x I get "A plot has an + illegal scale..."
      C.45. I try to mix bar and line graphs and the bars doesn't get centered and the + labels are not correctly aligned?
      C.46. How do I turn off anti-aliasing for TTF fonts?
      C.47. The auto-scaling algorithm chooses very tight limits around my Y-values. How + do I get more "space" between the end of the scale and the min/max values? +
      C.48. I want to use autoscaling to handle the maximum value but I always want the + Y-axis to start at 0 regardless of the actual minimum value?
      C.49. I want the position of the X-axis to be at the bottom of the Y-scale and not + always at the position Y=0?
      C.50. I specify color X in the image but the color displayed is not exactly what I + specified?
      C.51. Can I have labels at an arbitrary angle on the X-axis?
      C.52. How do I invert the Y-scale so that it has the minimum value on top and the + largest value at the bottom?
      C.53. Can I have the auto-scaling algorithm restrict itself to whole + numbers?
      C.54. Is it possible to have horizontal bar graphs?
      C.55. Line weight does not seem to work in my graphs? I specify a thick line but + still get a thin line?
      C.56. How can I have more space between the Y-axis and the title?
      C.57. How can I display both X and Y values above each data point in a line, bar or + scatter plot?
      C.58. Can I display stock box-charts (open, close, high, low) with JpGraph?
      C.59. Is there any way to specify a newline in the legend box for a specific + legend?
      C.60. How can I print unicode characters?
      C.61. My background images doesn't display properly. It just shows a black solid + square?
      C.62. How do I make each bar in a bar plot have it's own color?
      C.63. How can I adjust the position of the axis title?
      C.64. How can I change the image format, i.e jpeg, gif or png?
      C.65. How do I specify the font for legends?
      C.66. When I rotate text and labels the text is not rotated correctly?
      C.67. When I rotate a paragraph (multi-line) text the paragraph is always left + aligned even though I have specified another alignment. It seems fine for + non-rotated paragraphs though. What is the problem?
      C.68. I have a huge number of data points and I only want labels (which I want to + specify as text string) and ticks on every n:th data. Can I do this?
      C.69. How can I make the labels have a 1000 comma separator?
      C.70. The Y2 axis is no longer positioned at the right side of the graph
      C.71. How can I include several graphs in the same image?
      C.72. How can I have an exploded slice with 3D pie plots?
      C.73. How can I display values for each slice close to the pie?
      C.74. How can I change between percentage and absolute values for pie slices? +
      C.75. Can I display the actual value as labels on the pie bar instead of the + percentage?
      C.76. How can I adust the start angle of the first slice?
      C.77. When I use IE v5 or v6 I can only save the generated graph image in the + browser as a BMP file even if it was generated as a JPEG or PNG encoded + image?
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      C.1.

      Where should I install the library?

      The simple answer is: Anywhere You like! Since the necessary library files + are included in Your own script with an "include" (or more likely a + require_once) statement it doesn't matter where You put the library as long as + Your scripts can access it. A common place is to store the library is in a + directory where PHP searches for include files (as specified in Your + php.ini file), for example in + "/usr/share/php" or perhaps + "/usr/local/php" depending on Your PHP configuration.

      An even simpler way is to just store the library in a directory where Your + scripts are executed from. However , this is not really recommended.

      C.2.

      Can I use JpGraph with Windows/Unix/Linux etc?

      Yes. The library itself is OS-agnostic. As long as you have a WEB server + which supports PHP 4.3.x (or above) and have the GD library. Please note though + that the behavior of PHP/Apache on Unix and Windows seems to have some subtle + differences which might affect things like path specification using '/' or '\'.

      +

      Caution

      +

      The library does not support any 64bit OS and there are known issues + with running the library on a 64bit OS (either Unix or Windows). There + are currently no plans to address this in the near future.

      +

      +

      C.3.

      My Web-admin does not allow PHP any write permissions and hence I can't use + the cache feature of JpGraph. Is there any way to completely turn off the + caching feature?

      Yes, set the constant "USE_CACHE" to FALSE in + jpg-config.php. This way will skip writing file even if a filename has been + submitted in the Graph() creation call. You can also accomplish this by not + having any file name at all in the call to Graph().

      C.4.

      After installation all I get is an empty page when I try any of the + examples?

      If the HTTP server response is truly absolutely empty (verify that by looking + at the source of the page that gets returned to the browser) then the only + answer is that the HTTP server has crashed. Most likely it is the PHP process + within the server that has crashed. Even though PHP is fairly stable there are + still ways of crashing it. To investigate this further You might try to:

      • +

        ... investigate the system log for traces of a server + crash.

        +
      • +

        ... try increase the maximum allowed memory for PHP in php.ini. As + a rule it should be a minimum of 32MB (and preferable 64MB)

        +
      • +

        ... upgrade PHP to the latest stable version (and use the compile + options shown further down in this FAQ.

        +
      • +

        ... upgrade PHP to the latest stable version (and use the compile + options shown further down in this FAQ.

        +
      • +

        ... enable all errors and warning for PHP (in php.ini) to help + track down the problem.

        +
      • +

        ... disable output buffering to get errors send back to the + browser as soon as possible (in php.ini)

        +

      C.5.

      How can I send the generated graph to both the browser and a file at the same + time?

      This is not directly supported by means of any particular option or setting + in the library but with small "trick" this is easy enough to accomplish.

      The idea is to use the _IMG_HANDLER option that forces the + Graph::Stroke() to just return the image handler and then stop. + We can then manually first send the image to the chosen file and then stream it + back to the browser using some internal methods in the library.

      The following code snippet shows how this is done

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +
      <?php
      +$graph = new Graph(400,300);  
      +<... code to generate a graph ...>  
      +// Get the  handler to prevent the library from sending the 
      +// image to the browser
      +$gdImgHandler = $graph->Stroke(_IMG_HANDLER);
      +  
      +// Stroke image to a file and  browser  
      +// Default is PNG so use ".png" as suffix 
      +$fileName = "/tmp/imagefile.png"; $graph->img->Stream($fileName);  
      + 
      +// Send it back to browser 
      +$graph->img->Headers(); 
      +$graph->img->Stream();
      +?>

      C.6.

      What is this 'auto' I see in all the Graph() creating in the Examples + directory? Do I need it?

      No. The third argument in the graph call is an optional cache file name and + is not necessary unless You want to use the caching feature of JpGraph. By + specifying 'auto' the filename is automatically created based on the name of the + script file.

      C.7.

      The Client side image map examples does not work on my machine?

      In order to run the examples the code generates HTML to read the image from + the cache directory as Apache sees it. You must adjust the image tag to have the + correct path to your cache directory.

      C.8.

      When I run 'testsuit_jpgraph.php' I get a warning "Due to insufficient + permission the source files can't be automatically created"

      This is not a serious problem. When the testsuit is run it tries to create a + symbolic link with the same base name as the individual testfile but with + extension ".phps". This is just so it is possible to click on an image and then + view the source syntax colored. If Apache doesn't have write permissions to the + directory where 'testsuit_jpgraph.php' is executed from you will get this + warning.

      If you want to use this feature just change the permissions so Apache may + write to the directory.

      C.9.

      How can I pass data to my image generating script?

      There are basically three(four) ways:

      • +

        Read the data from a file

        +
      • +

        Read the data from a DB

        +
      • +

        Pass the data in the <img> tag using URL + parameter passing. For example <img + src="myimg.php?d1=2&d2=7&d3=12" border=0> + This method is not suitable for large data sets since there is + an upper bound to the length of an URL specification (around 255 + characters)

        +
      • +

        A fourth way might be to use session variables to pass the data + between different scripts. For large data sets the only practical way is + to read the data from a file or from a DB to construct the data + vectors.

        +

      C.10.

      How can I use data from an Excel spreadsheet?

      Export the data from Excel as a CSV (Comma separated Values) file to be able + to easily read the file. Then either write your own routine to read and parse + the data from that file or use the utility class "ReadCSV" in + "jpgraph_utils.php".

      A basic example on how to do this for a line graph assuming the name of the + data file is "data.csv".

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +
      <?php include ("../jpgraph.php"); 
      +include ("../jpgraph_line.php"); 
      +include ("../jpgraph_utils.inc");  
      +$n = ReadFileData::FromCSV('data.csv',$datay); 
      +if( $n == false ) {     
      +    die("Can't read data.csv."); 
      +}  
      + 
      +// Setup the graph $graph = new Graph(400,300);
      +$graph->title->Set('Reading CSV file with '.$n.' data points');
      +$graph->SetScale("intlin");  
      + 
      +$l1 = new LinePlot($datay); 
      +$graph->Add($l1);
      +$graph->Stroke(); 
      +?>

      C.11.

      How do I pass data from a Database (e.g. MySQL) to a script to produce a + graph?

      By adding some SQL statements in Your graph scripts that creates the data + arrays from the DB.

      Watch out for empty values and strings. JpGraph doesn't know how to plot + strings. Any value passed into JpGraph should be only valid numeric data. See + the online discussions on populating from a DB Populating DB or the discussion + on how to read data from file Reading from file.

      See How to + populate arrays from mySQL +

      C.12.

      I change my data but my image does not get updated? The old image is still + send back to the browser?

      What you are seeing is a cached version of Your image. Depending on your + setup it could either be that the browser has a cached image or You are using + the built-in cache system in the library by accident.

      + Fixing the browser cache Since the script from + the browser point of view is the same it just displays the old image. To fix + this you need to turn of the browser image caching.

      Another "trick" that can be used since normally it is impossible to control + the browser for the end user is ot add a "dummy" URL argument which changes. + This way the browser will always see a new URL and then always reload that file. + This could be done for example as:

      1
      +
      echo ('<img src="graphscript.php?' .microtime().'">');

      + Fixing the library cache

      The other reason might be that You have enabled the built-in cache feature in + JpGraph. To turn it of You can either

      • +

        Not specify a cache name in the call to Graph(). Just call new + Graph(200,200) for example.

        +
      • +

        Turn off the reading from the cache by setting READ_CACHE to + false (in jpg-config.inc)

        +
      • +

        Turn off the reading and writing from the cache by setting + USE_CACHE to false (in jpg-config.php)

        +
      • +

        Use the cache but with a timeout so that the image will be + re-generated if the cached image is older then the specified timeout + value in the call to Graph().

        +

      C.13.

      Can I run JpGraph in batch-mode just outputting an image directly to a file + and not streamed back to the browser?

      Yes. Just specify an absolute file name in the call to Graph::Stroke(). To + store the image in the local temp directory use:

      1
      +
      $myGraph->Stroke("/tmp/myimage.png");

      Caution

      +

      Note: You must match the file ending Yourself to the format you have + chosen to generate the image in.

      +

      C.14.

      Is there a mailing list for JpGraph?

      No, but there is a user community forum at + http://jpgraph.intellit.nl/index.php where users discuss various + aspects of the library.

      C.15.

      Do you offer a commercial version of JpGraph with full support and no + QPL?

      Yes, For commercial (non-open-source) you will need to get the "JpGraph + Professional License". This allows you you deploy JpGraph in a commercial + context. Further details upon contact.

      C.16.

      Some of my script just return a blank image and no error messages?

      This could potentially be a lot of things depending on which browser you are + using. One thing you might want to check is that your script doesn't take to + long time. In that case they might hit the time limit for running a PHP script + as specified in php.ini. You can adjust that time limit with a call to + set_time_limit().

      If You are seeing just an empty page (really empty) then this is a sign that + Your server has crashed. Most likely an old version of PHP is being used which + has taken down the HTTP server process.

      C.17.

      I can see the generated image fine in the browser but I can't print it? +

      This is again browser dependent. Some browser does not like to print an image + which is generated on-line and does exist as a *.jpg, *.png etc file. No good + workaround has been identified short of changing browser. Some browsers (and + versions) can print others not. The only real safe way (if you need printing) is + to generate the image on disk and then have the browser read the image from + there.

      C.18.

      How can I generate an image directly to disk without streaming it back to the + browser?

      Two ways: (Preferred way) If you supply a filename in the call to + $graph->Stroke() the image will be written to that file and not be streamed back + to the browser. If you prefer to have the image going to the cache directory but + not streamed back then you could just set the '$aInlineFlag' in the initial call + to Graph() (fifth argument) to false as in +

      1
      +
      $mygraph = new Graph(200,200,"auto",0,false);

      + The "auto" argument makes an automatic file name in the cache based on the + script name. The 0 indicates that we have no timeout. The advantage with this + method is that you can specify a timeout to avoid having the image generated to + often.

      C.19.

      When I try to plot graphs with many 1000:s of data points I only get a blank + page. Is there a limit in JpGraph to the number of data points you can plot? +

      No, there is no such limit. The problem is most likely that your script takes + so long time that the PHP execution limit (as specified in php.ini) aborts the + script. If you have more than 10,000 data points JpGraph will work but doing + this kind of heavy data analysis on a WEB-server extension is probably not a + good idea to start with.

      The other reason could be that the script exhausts the allowed memory limit + for PHP as specified in the "php.ini" file. By default this is often set to 8Mb + which is to low for a complex JpGraph script. Try increasing the memory limit to + a minimum of 16Mb. For very complex graphs with 1000s of data points there might + be a need to increase the memory even further.

      C.20.

      How can I use an image in a dynamically created PDF?

      You can do this in two ways, you can either stroke the image created with the + library directly to a file where it can be used with Your PDF library of choice. + For example, using FPDF (www.fpdf.org) the Image() function would have to be used to read an + image from the filesystem.

      If You are using the PDF library (APIs included in the PHP distribution but + the library itself might require a license depending on Your usage.) you can + avoid the storage of the file by getting the image handler for the image + directly and use it with PDF.

      With the PDF library you must first open the in memory image with a call to + pdf_open_memory_image($pdf, $im). The following script places + an image from JpGraph directly into a PDF page that is returned when running + this script.

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +27
      +28
      +29
      +30
      +31
      +32
      +33
      +34
      +35
      +36
      +37
      +38
      +
      <?php  
      + 
      +$graph = new Graph(...);  
      + 
      +// Code to create the graph 
      +// .........................
      + 
      +// Put the image in a PDF page 
      +$im = $graph->Stroke(_IMG_HANDLER);  
      +$pdf = pdf_new(); 
      +pdf_open_file($pdf, '');  
      + 
      +// Convert the GD image to somehing the 
      +// PDFlibrary knows how to handle 
      +$pimg = pdf_open_memory_image($pdf, $im);
      + 
      +pdf_begin_page($pdf, 595, 842); 
      +pdf_add_outline($pdf, 'Page 1');
      +pdf_place_image($pdf, $pimg, 0, 500, 1); 
      +pdf_close_image($pdf, $pimg);
      +pdf_end_page($pdf); 
      +pdf_close($pdf);  
      + 
      +$buf = pdf_get_buffer($pdf); 
      +$len =strlen($buf);  
      + 
      +// Send PDF mime headers 
      +header('Content-type: application/pdf');
      +header("Content-Length: $len"); 
      +header("Content-Disposition: inline; filename=foo.pdf");  
      + 
      +// Send the content of the PDF file 
      + 
      +echo $buf;  
      + 
      +// .. and clean up 
      +pdf_delete($pdf);  
      +?>

      C.21.

      How can I force the user to get a question to download the generated image + instead of just displaying it in the browser?

      Change your code for creating the image:

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +
      <?php
      +$im=$graph->Stroke(_IMG_HANDLER); $filename="chart"; 
      +$file_type = "image/png";
      +$file_ending = "png"; 
      +$filename=$filename.".".$file_ending;
      + 
      +header("Content-Type: application/$file_type"); 
      +header("Content-Disposition:attachment; filename=".$filename); 
      +header("Pragma: no-cache"); 
      +header("Expires:0"); 
      +ImagePNG($im); 
      +?>

      A html link, which directs to the php page (assuming the filename is + chart.php): Download Then, if you click on the link, a download dialog appears + and you can download the "chart.png".

      Note

      +

      If you directly open chart.php, the image is directly streamed to the + browser and the download dialog will not open.

      +

      C.22.

      How can I open up a CSIM link in a graph in a separate window?

      To open a target CSIM (drill down) in a separate window some javascript in + the target link is necessary since this action must be performed in the browser. + The target URL needs top be in the form of an action to open up a window (with + any optional URL argument that might be needed). For example, assume we have a + bar graph and that theb user can click on each bar to get more details. When the + user clicks on a bar we open up the detaails witha call to the helper script + "bar_details.php" and send the parameter "id" to the script to separate the + individual bars. We would then use the following URL link (with javascript)

      1
      +
      "javascript:window.open('bar_details.php?id=%d','_new','width=500,height=300');void(0)"

      Where the '%d' placeholder must be replaced by the appropriate Id for each + bar. To assign the appropriate id we could use the following construct

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +
      <?php
      +// Create targets for the image maps so that the details are opened 
      +// in a separate window 
      +$fmtStr = "javascript:window.open('bar_details.php?id=%d','_new','width=500,height=300');
      +void(0)";  
      +$n = count($datay); 
      +$targ=array();
      +$alts=array(); 
      +for($i=0; $i < $n; ++$i) {     
      +    $targ[$i] = sprintf($fmtStr,$i+1);     
      +    $alts[$i] = 'val=%d'; 
      +}
      +                    
      +$bplot->SetCSIMTargets($targ,$alts); 
      +$graph->Add($bplot); 
      +... 
      +// Send back the HTML page to browser 
      +$graph->StrokeCSIM();  
      +?>

      It should be noted that in the above Javascript code we have used the special + window name '_new' which means that a new window will be opened each time a user + clicks on a bar. By giving the window a specific name the same window would be + re-used every time.

      C.23.

      No TTF fonts are displayed.

      There are potentially many reasons for this Please start by trying the + following bare bones PHP script to see if basic TTF support is available in the + PHP setup.

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +
      <?php 
      +// Change this defines to where Your fonts are stored 
      +DEFINE("TTF_DIR","/usr/X11R6/lib/X11/fonts/truetype/"); 
      + 
      +// Change this define to a font file that You know that You have
      +DEFINE("TTF_FONTFILE","arial.ttf"); 
      + 
      +// Text to display 
      +DEFINE("TTF_TEXT","Hello World!");  
      + 
      +$im = imagecreatetruecolor (400, 100); 
      +$white = imagecolorallocate($im, 255, 255, 255); 
      +$black = imagecolorallocate ($im, 0, 0, 0);
      + 
      +imagefilledrectangle($im,0,0,399,99,$white); 
      +imagettftext ($im, 30, 0, 10, 40,$black, TTF_DIR.TTF_FONTFILE,TTF_TEXT);  
      +header ("Content-type: image/png");
      +imagepng ($im); 
      +?>

      The above script when run should produce an image with a black text string on + a white background. If this doesn't work then there is a setup problem with PHP + + TTF.

      As a first step to resolve this recompile Your PHP4 setup using the following + basic configuration (depending on the local conditions some options/path might + have to be changed). The critical options are marked in bold.

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +
      ./configure
      +--prefix=/usr/share \ 
      +--datadir=/usr/share/php \ 
      +--with-apxs=/usr/sbin/apxs \
      +--libdir=/usr/share --includedir=/usr/include \ 
      +--bindir=/usr/bin \
      +--with-config-file-path=/etc \ 
      +--enable-mbstring --enable-mbregex \ 
      +--with-mysql \ 
      +<span class="bold"><strong>--with-gd \ 
      +--enable-gd-imgstrttf \ 
      +--enable-gd-native-ttf \
      +--with-ttf-dir=/usr/lib \ 
      +--with-freetype-dir=/usr/lib \
      +--with-zlib-dir=/usr/lib \ 
      +--with-png-dir=/usr/lib \
      +--with-jpeg-dir=/usr/lib \
      +</strong></span>--with-xpm-dir=/usr/X11R6 \
      +--with-tiff-dir=/usr/lib \ 
      +--enable-memory-limit --enable-safe-mode \
      +--bindir=/usr/bin \ 
      +--enable-bcmath -enable-calendar \ 
      +--enable-ctype --with-ftp \ 
      +--enable-magic-quotes \ 
      +--enable-inline-optimization \ 
      +--with-iconv

      If there is still no TTF fonts displayed then the next step is to upgrade + Your TTF libraries to the latest version. The FreeType version 2.1.9 is known to + work well.

      C.24.

      All my TTF fonts are yellow no matter what color I specify?

      You have a old buggy version of the FreeType library, most likely the old + FreeType I library is being used. Please upgrade to the latest version of + FreeType II.

      C.25.

      I get an error "This PHP build has not been configured with TTF support. You + need to recompile your PHP installation with FreeType support."

      This error is reported if the built-in PHP/GD function "imagettfbbox()" is not available. This is a crucial method to make + TTF fonts work with JpGraph. The most likely reason for this problem is that the + PHP configuration is faulty and does not have correct support for TTF fonts. + Please recompile PHP as shown above and make sure that the built-in version of + GD is being used and not the stand-alone library.

      C.26.

      I get an error "Fatal error: Font cant be + found"

      You have either not specified a correct path where your fonts are stored (see + top of jpg-config.inc) or you have tried to use a font you do not have + installed.

      C.27.

      I get the error "Can't find font file + FONT_PATHarial.ttf" (or some other font)

      You are most likely running on Windows. This seems to be caused by a bug in + PHP/Apache (or PHP/IIS) specifically on Windows. The problem seems to be that + PHP doesn't remember a DEFINE() setting across two or more include directive. A + simple workaround is to hard-code the font path in class TTF in file + jpgraph.php. Note: If you have this problem you will most likely also have a + problem with the path to the cache directory.

      C.28.

      I get an error "Font file ... is not readable or does not + exist"

      This error is caused by the inability of PHP/JpGraph to read the font file. + This could have several reasons:

      • +

        The file path or name is wrong and the file really doesn't exist. + Please check that the file and path (as shown in the error message) + really exists.

        +
      • +

        If the file exists it might still not be possible for PHP to read the + file due to permission problem. Please make sure that PHP can read a + file in the TTF directory. This can be verified with the following short + script

        +
        1
        +2
        +3
        +4
        +5
        +6
        +7
        +8
        +9
        +10
        +11
        +12
        +13
        +14
        +
        <?php 
        +// Change this defines to where Your fonts are stored 
        +DEFINE("TTF_DIR","/usr/X11R6/lib/X11/fonts/truetype/");
        + 
        +// Change this define to a font file that You know that You have
        +DEFINE("TTF_FONTFILE","arial.ttf");  
        + 
        +$f = TTF_DIR.TTF_FONTFILE; 
        +if( file_exists($f) === false || is_readable($f) === false ) {     
        +    echo "FAIL: Can not read font file \"$f\"."; 
        +} else {     
        +    echo "PASS: Successfully read font file \"$f\"."; 
        +} 
        +?>
        +

        If the script reports FAIL then it must be + investigated whether the file names or permissions are wrong.

        +

      C.29.

      How can I install additional TTF font families?

      See the Adding additional TTF font + families section on this site for a full explanation of the necessary + steps.

      C.30.

      How can I display special characters that isn't available on the + keyboard?

      By using the standard "&#dddd" encoding of the symbol in a text string. + For example, to get the character for the "copyright" symbol &copy; which + has the numeric code "00A9" (in Hex)

      1
      +
      $copy = sprintf('&#%04d;',hexdec('00A9'));

      In a similar way this can be used to show Greek letters, for example + "&#0946;" (beta) is displayed by

      1
      +
      $beta = sprintf('&#%04d;',hexdec('03B2'));

      Tip

      +

      Use the class "SymChar" defined in jpgraph_utils.php to get + easy access to greek and special mathematical symbols. This class allow the + specification of common symbols by name. Some examples:

      +
      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +
      // &#0948; (delta)
      +$gamma = SymChar::Get('delta'); 
      + 
      +// &#0956; (mu) 
      +$mu = SymChar::Get('mu'); 
      + 
      +// &#0960; (pi) 
      +$pi = SymChar::Get('pi'); 
      + 
      +// &#0955; (lambda) 
      +$lambda = SymChar::Get('lambda'); 
      + 
      +// &#8747; (integral sign) 
      +$integral = SymChar::Get('int'); 
      + 
      +// &#8776; (approximation sign) 
      +$approx = SymChar::Get('approx');
      +

      C.31.

      When I put a text object on a graph and use Set90AndMargin() it doesn't + show?

      The main cause for this behaviour is that the text object position is rotated + 90 degrees. For example, putting a text object at Pos(0,0) it will become + "invisible". The reason for this behaviour is that the texts position (not the + text itself) is rotated around the center of the image 90 degrees clockwise.

      For example, assuming the image is WxH in size. Rotating position (0,0) which + is the top left corner of the image gives the rotated position:

      + (0,0) => rotate 90 degrees => (W,0) +

      Now, if a string was put at position (W,0) it will be drawn outside the image + and hence become invisible.

      If You need to position text with rotated images just keep this in mind and + swap the meaning of the X and Y position since the X-position will become the Y + position and vice versa after a 90 degree rotation. Some experiments will soon + allow You to get the hang of it.

      Tip

      +

      Start with an image that is equal in W and H since this makes it easier to + understand the rotation.

      +

      C.32.

      I get an error "Error: Cannot add header information + - headers already sent ..." +

      First, this is not a problem with JpGraph per se. What has happened is that + your PHP file which produces the image has already returned some data to the + browser before the image has been sent. This is most often caused by one or more + spaces before the first "<?php" The browser will now implicitly set the + header to plain text.

      When later JpGraph tries to send the correct image header the browser gets + confused since it has already received a header for the current document. (Each + document can only have one and only one type). Check your files for any output + (even a single space) before the call to Graph::Graph() (or Graph::Stroke())

      If you are running on Windows this problem could be caused by a blank line at + the end of any of the jpgraph_*.php files. All files in jpgraph ends in a + newline which some configurations on Windows doesn't like. Remove the newline so + that the file ends just after the final "?>"

      Also remember that when you include external file using include/include_once + and so on Php include the whole content of the file; this content of the file + also include any potential carriage return/line feed or "blank" space before + "<?php" and after "?>" These "dirty characters" will stop the JpGraph + being properly sent back because they are included in the image streaming. +

      C.33.

      I get an error "Unknown function + imagecreate"

      You have not compiled PHP with support for the GD graphic library. See PHP + documentation for details. Note that you also need to configure PHP to use GD + and/or TTF fonts to get JpGraph full functionality

      C.34.

      I get an error "Unknown function + imagecreatejpeg"

      You have not compiled PHP with support for the JPG format. See PHP + documentation for details

      C.35.

      I get an error "Warning: MkDir failed (Permission + denied) in jpgraph.php on line XXXX"

      This is a permission problem. To use the cache Apache/PHP must have write + permission to the cache directory. Make sure that Apache/PHP have sufficient + permissions to write to the specified cache directory.

      C.36.

      I get an error "Fatal error: Undefined class name + "parent" in jpgraph.php on line xxxx"

      You are using an older version of PHP. JpGraph 1.x requires at least PHP + 4.3

      +

      Note

      +

      Remember that JpGraph 1.x has reached its end of life and is no longer + maintained.

      +

      +

      C.37.

      I get an error "Your data contains non-numeric + values."

      Most likely Your data really contains non-numeric data which You need to + further investigate (for example by printing out the array with a + var_dump(). One additional thing to watch out for is if the + data looks like ".56" (or "-.56") which is a shortform of "0.56". The problem is + that the number starts with an "." (dot) which is non-numeric. The solution is + to replace the single dot with a "0."

      C.38.

      I get an error "Date is outside specified scale + range" trying to create a Gantt chart

      As the error says, you start or end date for a activity is larger/smaller + than the max/min value in the scale. If you get this error and you are using + automatic scale then you are probably using a null value (empty string "") as + start or end date. Check your data

      C.39.

      I get an error "Invalid file handle in jpgraph.php at + line XXXX"

      This is a permission problem. Check that your cache directory has the right + permissions to let JpGraph access and write to it.

      C.40.

      I get an error "Fatal error: Call to undefined + function: getcsimareas() ..." +

      You have enabled the DEFINE("JPG_DEBUG",true) in jpgraph.php. + This is an internal debug flag which should always be left untouched.

      C.41.

      I get an error "Fatal error: Call to undefined + function: imagetypes()"

      You have not installed the core GD library correct. imagetypes() + is a standard GD function. Please refer to the installation section in the + manual for more information on how to verify You setup.

      C.42.

      I get an error saying something like "Error: + 'parent::' not valid in context..."

      You are most likely using the Zend cache. There is a bug with some versions + of the Zend cache together with the "parent" meta class. If the referenced + parent class is in another file that is included this problem seems to occur. + The workaround seems to be to put all classes in the same physical file or + upgrade the Zend cache to a more recent version.

      C.43.

      I get an error "Image cannot be displayed because it + contains errors.."

      First of all this is an error message from the browser and not the library. + There could be various reasons for this but the most likely scenario is that + Your installation of PHP has both enabled output buffering and enabled strict + error checking.

      What could now happen is that with output buffering enabled PHP will buffer + up any text error messages. This could for example be som "Notice:" warnings if + You have forgotten to initialize some variables. When then the library adds the + proper image header and the buffered error messages together with the image gets + sent back the browser it all falls apart.

      The browser tries to interpret both the error messages and the image data as + an image and it of course fails and gives this error message. Why? Because the + textual error messages that was buffered is interpreted as if they would belong + to the image which of course is nonsense.

      The solution is to disable output-buffering until You are convinced that Your + code is without any problem. On a development server it is recommended to always + have output buffering disabled.

      C.44.

      When I use PHP5 + JpGraph 2.x I get "A plot has an + illegal scale..."

      There have been a few reports of this problem and it seems to be due to a + faulty PHP 5.x installation. For example a standard SuSE 9.3 PHP5 installation + gives this problem. The exact reason for the problem has not been established + but it all points to a PHP5 problem since it can be solved by adjusting the PHP + installation without any change in the library.

      Step 1:

      First check that Your php.ini file have compatibility mode turned off (in + php.ini)

      1
      +
      zend.ze1_compatibility_mode=off

      + Step 2:

      If turning the compatibility mode off still doesn't solve the problem the + only remaining solution is to re-compile PHP 5. For example on our development + servers we use the following configuration Note: We place "php.ini" in + "/etc/php5/apache2" and You might want to change this to suit Your specific + setup.

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +
      ./configure
      +--prefix=/usr/share --datadir=/usr/share/php \
      +--with-apxs2=/usr/sbin/apxs2-prefork \ 
      +--libdir=/usr/share
      +--includedir=/usr/include \ 
      +--bindir=/usr/bin \
      +--with-config-file-path=/etc/php5/apache2 \ 
      +--enable-mbstring --enable-mbregex \
      +--with-mysql  \ 
      +--with-gd --enable-gd-imgstrttf --enable-gd-native-ttf \
      +--with-zlib-dir=/usr/lib \ 
      +--with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib --with-xpm-dir=/usr/X11R6 \ 
      +--with-tiff-dir=/usr/lib --with-ttf-dir=/usr/lib \
      +--with-freetype-dir=/usr/lib \ 
      +--enable-ftp \ 
      +--enable-memory-limit
      +--enable-safe-mode \ 
      +--bindir=/usr/bin \ 
      +--enable-bcmath -enable-calendar \
      +--enable-ctype --with-ftp \ 
      +--enable-magic-quotes \ 
      +--enable-inline-optimization \ 
      +--with-bz2 \ 
      +--with-iconv

      C.45.

      I try to mix bar and line graphs and the bars doesn't get centered and the + labels are not correctly aligned?

      This is a known problem. The best way to partly solve this is to make sure + you add the bar plot as the last plot to the graph. The reason behind this + problem is that plot that gets added to the graph internally makes modification + to the alignment of the plot. Since each plot does not know what other plot has + been added it will happily overwrite previous plots settings in the graph. Hence + the workaround by adding the bar last. conflicting settings.)

      C.46.

      How do I turn off anti-aliasing for TTF fonts?

      There is not any built in support in JpGraph to do this. Since the whole + purpose of TTF fonts is to provide a smooth font experience there is really no + point in wanting to do this. If you want non-aliased fonts you should use the + built-in bitmap fonts.

      C.47.

      The auto-scaling algorithm chooses very tight limits around my Y-values. How + do I get more "space" between the end of the scale and the min/max values? +

      Use the SetGrace() to specify some extra space (as percentage of + the scale) between the min/max value and the limits of the scale. For example + $graph->yscale->SetGrace(10) gives 10% extra space at the + ends.

      C.48.

      I want to use autoscaling to handle the maximum value but I always want the + Y-axis to start at 0 regardless of the actual minimum value?

      Use the SetAutoMin() method. For example as in

      1
      +2
      +3
      +4
      +5
      +
      ...
      +$graph = new Graph(400,350); 
      +$graph->SetScale("intlin");
      +$graph->yaxis->scale->SetAutoMin(0); 
      +...

      Tip

      +

      If you need to limit the maximum value but auto-scale the minimum value + use the SetAutoMax() method.

      +

      C.49.

      I want the position of the X-axis to be at the bottom of the Y-scale and not + always at the position Y=0?

      To adjust the position of the Axis Use the Axis::SetPos() + method. The argument to this method can be either the numerical scale value on + the Y-axis where the X-axis should be positioned or it can be one of the two + special value "min" or "max". In the latter case the axis will be positioned on + either the minimum or the maximum value of the scale. For example +

      1
      +2
      +3
      +
      ...
      +$graph->xaxis->SetPos("min"); 
      +...

      + Will put the X-axis at the lowest value of the Y-axis.

      Note

      +

      The same positioning is possible for the Y-axis.

      +

      C.50.

      I specify color X in the image but the color displayed is not exactly what I + specified?

      This is a result of a finite color palette for GIF, PNG formats. If you are + using anti-aliasing, perhaps a background image or even gradient fill you might + exhaust the color palette supported in the GD library. Try set the constant + USE_APPROX_COLORS to false and generate the picture again. If + you now get an error message saying that no more colors can be allocated this is + the problem. There is no good workaround if you are using GD 1.x since for PNG + the GD 1.x library does not support "True-color".

      The only real solution is to upgrade to GD 2.x to get full true-color + support. If you are using a background image try to "degrade" it to have a + smaller color palette or turn of anti-aliasing and you might have enough free + palette entries to cater for all the colors you want and still use GD 1.x

      Note

      +

      This problem is only seen in very, very old installations that use GD 1.x + library which has been deprecated since around 2005

      +

      C.51.

      Can I have labels at an arbitrary angle on the X-axis?

      Yes, almost any text can be stroked at an arbitrary angle. For example to + have the labels at 45 degrees angle use

      1
      +2
      +3
      +4
      +
      ...
      +$graph->xaxis->SetTickLabels($labels);
      +$graph->xaxis->SetLabelAngle(45); 
      +...

      Note

      +

      Internal fonts support 0 and 90 degrees text. If you need to use, say 45 + degree (or any other arbitrary angle), you must use TTF fonts.

      +

      C.52.

      How do I invert the Y-scale so that it has the minimum value on top and the + largest value at the bottom?

      The easiest way to do this is by following a two step process

      a) Negating all Your values and then

      b) Create a callback function for the Y-axis that negates all the display + values.

      What will happen now is that after the negative values have been feed into + the graph it will create a scale starting at the lowest value, say -8, then go + up to the highest, say -1. If these values are then inverted when printed it + will in affect achieve the inverted axis appearance. The code snippet below + shows a basic example of this technique.

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +
      ... // Callback to negate the argument
      +function _cb_negate($aVal) {     
      +    return round(-$aVal); 
      +}  // A fake depth curve
      +$ydata = ....  
      +// Negate all data 
      +$n = count($ydata); 
      +for($i=0; $i<$n; ++$i) {     
      +    $ydata[$i] = -$ydata[$i]; 
      +}  
      + 
      +// Basic graph setup 
      +$graph = new Graph(400,300); 
      +$graph->SetScale("linlin");  
      + 
      +// Setup axis
      +$graph->yaxis->SetLabelFormatCallback("_cb_negate"); 
      +$plot = new LinePlot($ydata,$xdata); 
      +$graph->Add($plot); 
      +$graph->Stroke();

      Two scripts that uses this technique can be found in the + Examples/ directory in the distribution, + "inyaxisex1.php" and + "inyaxisex2.php".

      C.53.

      Can I have the auto-scaling algorithm restrict itself to whole + numbers?

      Yes, use the "int" scale specification, for example + $graph->SetScale('inttext') will make the Y-axis have an + integer scale and the X-axis a text-scale

      C.54.

      Is it possible to have horizontal bar graphs?

      Yes, Just create a normal bar and call the method + Set90AndMargin() to rotate the graph.

      C.55.

      Line weight does not seem to work in my graphs? I specify a thick line but + still get a thin line?

      You have probably enabled Anti-aliasing. If anti-aliasing is enabled setting + line-weight will have no affect.

      C.56.

      How can I have more space between the Y-axis and the title?

      Use the Axis::SetTitleMargin() method. For example to have a 25 + pixels margin for the Y-title you could use: +

      1
      +
      $mygraph->yaxis->SetTitleMargin(25);

      C.57.

      How can I display both X and Y values above each data point in a line, bar or + scatter plot?

      You need to use a value formatting callback. The callback function is called + for each data point and is passed the Y-value as argument. This means that if + You also need to display the x-value it must be available in the callback + function,perhaps as a global data array.

      Something along the lines of

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +
      <?php
      +$datay = array(...); 
      +$datax = array(...);
      +$idx=0; 
      + 
      +function xyCallback($yval) {   
      +    global $datax, $idx;   
      +    return '('.$datax[$idx++].", $yval)"; 
      +} 
      + 
      +// Some more code ... 
      + 
      +$graph = new Graph(...);
      +$graph->SetScale("intlin"); 
      +$p1 = new LinePlot($datay,$datax);
      +$p1->value->SetFormatCallback('xyCallback'); 
      +$p1->value->Show(); 
      + 
      +// Some more code ... 
      + 
      +$graph->Stroke(); 
      +?>

      C.58.

      Can I display stock box-charts (open, close, high, low) with JpGraph?

      Yes, just create a StockPlot() graph.

      C.59.

      Is there any way to specify a newline in the legend box for a specific + legend?

      Yes. From version 1.8 full multi-line text paragraphs are supported. Just + make sure that your text uses double-quotes and a newline character.

      C.60.

      How can I print unicode characters?

      Use &#XXXX; format in your strings where XXXX is the decimal value for + the unicode character. You may find a list of Unicode characters and there + encodings at www.unicode.org Please observe that the encoding in the lists are + given in hexadecimal and these values must be converted to decimal.

      Note: If You are working in an UTF-8 environment then the characters may be + input directly.

      C.61.

      My background images doesn't display properly. It just shows a black solid + square?

      You are using a very old GD version (probably 2.0.1). Background images only + work with a truecolor image, (enable the USE_TRUECOLOR constant). Some people + have reported that it works as long as the background image is not in PNG + format. The drawback with truecolor images is that truefont doesn't work + properly in GD versions < 2.0.8

      C.62.

      How do I make each bar in a bar plot have it's own color?

      Specify an array as argument to BarPlot::SetColor() as in +

      1
      +
      $mybarplot->SetColor(array("red","green","blue","gray"));

      C.63.

      How can I adjust the position of the axis title?

      You can add an alignment parameter when you specify the title. You specify + one of "high", "low" or "center" as in

      1
      +2
      +3
      +
      $mygraph->xaxis->SetTitle("mytitle","high");
      +$mygraph->xaxis->SetTitle("mytitle","center");
      +$mygraph->xaxis->SetTitle("mytitle","low");

      C.64.

      How can I change the image format, i.e jpeg, gif or png?

      Use the Image::SetImgFormat() method at runtime. You can also + change the default value with the DEFAULT_GFORMAT define in + jpg-config.php. This is normally set to 'auto' format which means that JpGraph + will automatically choose the format depending on what is available.

      For example to use the JPEG format :

      1
      +
      $graph->img->SetImgFormat('jpeg');

      C.65.

      How do I specify the font for legends?

      Use the Legend::SetFont() method. As in

      1
      +
      $graph->legend->SetFont(FF_FONT1,FS_BOLD);

      C.66.

      When I rotate text and labels the text is not rotated correctly?

      Red Hat 7.2 has a bug in it's TTF libraries (FreeType 2.0.3) that comes with + the distribution. Upgrade to FreeType 2.0.9.

      C.67.

      When I rotate a paragraph (multi-line) text the paragraph is always left + aligned even though I have specified another alignment. It seems fine for + non-rotated paragraphs though. What is the problem?

      This is a limitation with the current implementation. (The reason is that GD + does not support inter-paragraph alignment so all that logic is done within the + libraries string-layout engine.

      At the moment the logic only implements this paragraph alignment for + non-rotated paragraphs.) For rotated paragraphs left-alignment will always be + used regardless of specified paragraph alignment.

      C.68.

      I have a huge number of data points and I only want labels (which I want to + specify as text string) and ticks on every n:th data. Can I do this?

      Yes. What most users stumble on is the fact that the label array must still + contain data for all the data points even though only every n:th data label is + displayed.

      This means that if your original data array only contains just the display + values it is necessary first to augment the label array with padding spaces to + fill it out.

      It is then possible to use the method + Axis::SetTextTickInterval() to specify that only every n:th + tick+label should be displayed. Something like: +

      1
      +2
      +3
      +
      // Setup the X-axis 
      +$graph->xaxis->SetTickLabels($datax);
      +$graph->xaxis->SetTextTickInterval( ... );

      C.69.

      How can I make the labels have a 1000 comma separator?

      The easiest way is to use the PHP built-in function + "number_format()" as a callback (see php manual. number_format())

      For example, to have the line plot display values using this format first + setup and install the callback function as:

      1
      +
      $lineplot->value->SetFormatCallback("number_format");

      If you instead want the Y-axis label to use this kind of formatting install + the callback using

      1
      +
      $graph->yaxis->SetLabelFormatCallback("number_format");

      C.70.

      The Y2 axis is no longer positioned at the right side of the graph

      This will happen after that You have manually specified the sclae and/or the + tick spacing. If the user manipulates the default scale the library defaults to + setting the position of the Y2 axis to the 0 X-position. It is easy to re-adjust + the Y2 axis position by calling SetPos() as the following code snippet + demonstrates +

      1
      +2
      +
      $graph->y2axis->SetPos('max');
      +$graph->y2axis->SetTitleSide('right');

      C.71.

      How can I include several graphs in the same image?

      This can be solved by a bit of extra GD code since the library by default do + not directly support this functionality. The easiest way to solve this is to + manually create a big enough empty graph with plain GD commands. Then get the + image handles from the Stroke() methods in the graphs that should be included. + It is then possible to use these handles together with the GD copy command and + copy the individual graphs to the previously created empty large GD image.

      This is illustrated in the following code snippet. In the example below we + assume that graph1 is the same size as the final combined graph we would like to + create. This way our combined graph get a background and color as specified in + the first graph.

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +
      // Assume we would like to combine graph1,2 and 3 
      + 
      +// ...... create graph 1 here....... 
      +$handle1 = $graph1->Stroke( _IMG_HANDLER);  
      + 
      +// ...... create graph 2 here.......
      +$handle2 =  $graph2->Stroke( _IMG_HANDLER);  
      + 
      +// ...... create graph 3 here....... 
      +$handle3 = $graph3->Stroke( _IMG_HANDLER);   
      + 
      +// Now create the "melting graph" which should contain all three graphs 
      +// $WIDTH1 and $HEIGHT1 are width and height of graph 1 ($handle1) 
      +// $WIDTH2 and $HEIGHT2 are width and height of graph 2 ($handle2) 
      +// $WIDTH3 and $HEIGHT3 are width and height of graph 3 ($handle3) 
      +// $x2,$x3 and $y2,$y3 shift from top left of global graph (ie position of 
      +// graph2 and graph3 in global graph)  
      +$image = imagecreatetruecolor($WIDTH1,$HEIGHT1); 
      +imagecopy($image, $handle1,0, 0, 0, 0, $WIDTH1,$HEIGHT1); 
      +imagecopy($image, $handle1,$x1,$y1,0,0,$WIDTH2,$HEIGHT2);
      +imagecopy($image, $handle1,$x2,$y2,0,0,$WIDTH3,$HEIGHT3);  
      + 
      +// Stream the result back as a PNG 
      +image header("Content-type: image/png"); 
      +imagepng ($image);

      C.72.

      How can I have an exploded slice with 3D pie plots?

      Use either Pi3DPLot::ExplodeSlice() or + Pie3DPlot::Explode() +

      C.73.

      How can I display values for each slice close to the pie?

      Use the method PiePlot::value::Show()

      C.74.

      How can I change between percentage and absolute values for pie slices? +

      Use PiePlot::SetValueType($aType) where $aType is + either PIE_VALUE_ABS or PIE_VALUE_PERCENTAGE. To + hide/show values on the pie you access the value property of the plot (just like + in line plots) If you want some special format of the string you also need to + specify a format string. By default just a number gets printed. If you (for + example) want percent with a "%" sign you should use a format string like "%d%%" + (assuming you just want to display whole numbers) +

      1
      +2
      +3
      +
      $mypieplot->value->SetFormat("%d%%");
      +$mypieplot->value->Show(); // Defaults to TRUE
      +$mypieplot->SetValueType(PIE_VALUE_PERCENTAGE);

      C.75.

      Can I display the actual value as labels on the pie bar instead of the + percentage?

      Yes, use +

      1
      +
      $pieplot->SetLabelType(PIE_LABEL_ABS);

      and + make sure labels are not hidden.

      C.76.

      How can I adust the start angle of the first slice?

      Use

      1
      +
      $pieplot->SetStartAngle(45);

      C.77.

      When I use IE v5 or v6 I can only save the generated graph image in the + browser as a BMP file even if it was generated as a JPEG or PNG encoded + image?

      This is a bug in the way IE handles HTTP headers. By default the library + sends no-cache headers to instruct the browser to always make a HTTP request to + the server. This is necessary since graph scripts normally have the same name + but the graphs may change over time and we don't want the browser to be fooled + by thinking it has already fetched the graph before.

      The only known workaround is to tell the library not to send back any + no-cache headers as illustrated below.

      1
      +2
      +
      $graph->img->SetExpired(false);                     
      +$graph->Stroke();

      The SetExpired(false) call instructs the library to not send + back any has-expired headers.

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apd.html b/Societes/ric/jpgraph/docs/chunkhtml/apd.html new file mode 100755 index 00000000..a00d44e7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apd.html @@ -0,0 +1,8 @@ +Appendix D. Named color list

      Appendix D. Named color list

      + +

      See Chapter 7. Color handling for a discussion on how to specify colors + for graphic objects in the graph.

      +

      Table D.1. Named color list

      +
      Color name RGB Triple Hex Color
      AntiqueWhite1(255,239,219)#ffefdb COLOR
      AntiqueWhite2(238,223,204)#eedfcc COLOR
      AntiqueWhite3(205,192,176)#cdc0b0 COLOR
      AntiqueWhite4(139,131,120)#8b8378 COLOR
      aliceblue(240,248,255)#f0f8ff COLOR
      antiquewhite(250,235,215)#faebd7 COLOR
      aqua(0,255,255)#00ffff COLOR
      aquamarine(127,255,212)#7fffd4 COLOR
      aquamarine1(127,255,212)#7fffd4 COLOR
      aquamarine2(118,238,198)#76eec6 COLOR
      aquamarine3(102,205,170)#66cdaa COLOR
      aquamarine4(69,139,116)#458b74 COLOR
      azure(240,255,255)#f0ffff COLOR
      azure1(240,255,255)#f0ffff COLOR
      azure2(224,238,238)#e0eeee COLOR
      azure3(193,205,205)#c1cdcd COLOR
      azure4(131,139,139)#838b8b COLOR
      beige(245,245,220)#f5f5dc COLOR
      bisque(255,228,196)#ffe4c4 COLOR
      bisque1(255,228,196)#ffe4c4 COLOR
      bisque2(238,213,183)#eed5b7 COLOR
      bisque3(205,183,158)#cdb79e COLOR
      bisque4(139,125,107)#8b7d6b COLOR
      black(0,0,0)#000000 COLOR
      blanchedalmond(255,235,205)#ffebcd COLOR
      blue(0,0,255)#0000ff COLOR
      blueviolet(138,43,226)#8a2be2 COLOR
      brown(165,42,42)#a52a2a COLOR
      brown1(255,64,64)#ff4040 COLOR
      brown2(238,59,59)#ee3b3b COLOR
      brown3(205,51,51)#cd3333 COLOR
      brown4(139,35,35)#8b2323 COLOR
      burlywood(222,184,135)#deb887 COLOR
      burlywood1(255,211,155)#ffd39b COLOR
      burlywood2(238,197,145)#eec591 COLOR
      burlywood3(205,170,125)#cdaa7d COLOR
      burlywood4(139,115,85)#8b7355 COLOR
      cadetblue(95,158,160)#5f9ea0 COLOR
      cadetblue1(152,245,255)#98f5ff COLOR
      cadetblue2(142,229,238)#8ee5ee COLOR
      cadetblue3(122,197,205)#7ac5cd COLOR
      cadetblue4(83,134,139)#53868b COLOR
      chartreuse(127,255,0)#7fff00 COLOR
      chartreuse1(127,255,0)#7fff00 COLOR
      chartreuse2(118,238,0)#76ee00 COLOR
      chartreuse3(102,205,0)#66cd00 COLOR
      chartreuse4(69,139,0)#458b00 COLOR
      chocolate(210,105,30)#d2691e COLOR
      chocolate1(255,127,36)#ff7f24 COLOR
      chocolate2(238,118,33)#ee7621 COLOR
      chocolate3(205,102,29)#cd661d COLOR
      chocolate4(139,69,19)#8b4513 COLOR
      coral(255,127,80)#ff7f50 COLOR
      coral1(255,114,86)#ff7256 COLOR
      coral2(238,106,80)#ee6a50 COLOR
      coral3(205,91,69)#cd5b45 COLOR
      coral4(139,62,47)#8b3e2f COLOR
      cornflowerblue(100,149,237)#6495ed COLOR
      cornsilk(255,248,220)#fff8dc COLOR
      cyan(0,255,255)#00ffff COLOR
      cyan1(0,255,255)#00ffff COLOR
      cyan2(0,238,238)#00eeee COLOR
      cyan3(0,205,205)#00cdcd COLOR
      cyan4(0,139,139)#008b8b COLOR
      darkblue(0,0,139)#00008b COLOR
      darkcyan(0,139,139)#008b8b COLOR
      darkgoldenrod(184,134,11)#b8860b COLOR
      darkgoldenrod1(255,185,15)#ffb90f COLOR
      darkgoldenrod2(238,173,14)#eead0e COLOR
      darkgoldenrod3(205,149,12)#cd950c COLOR
      darkgoldenrod4(139,101,8)#8b6508 COLOR
      darkgray(100,100,100)#646464 COLOR
      darkgreen(0,100,0)#006400 COLOR
      darkkhaki(189,183,107)#bdb76b COLOR
      darkmagenta(139,0,139)#8b008b COLOR
      darkolivegreen(85,107,47)#556b2f COLOR
      darkolivegreen1(202,255,112)#caff70 COLOR
      darkolivegreen2(188,238,104)#bcee68 COLOR
      darkolivegreen3(162,205,90)#a2cd5a COLOR
      darkolivegreen4(110,139,61)#6e8b3d COLOR
      darkorange(255,140,0)#ff8c00 COLOR
      darkorange1(255,127,0)#ff7f00 COLOR
      darkorange2(238,118,0)#ee7600 COLOR
      darkorange3(205,102,0)#cd6600 COLOR
      darkorange4(139,69,0)#8b4500 COLOR
      darkorchid(153,50,204)#9932cc COLOR
      darkorchid1(191,62,255)#bf3eff COLOR
      darkorchid2(178,58,238)#b23aee COLOR
      darkorchid3(154,50,205)#9a32cd COLOR
      darkorchid4(104,34,139)#68228b COLOR
      darkred(139,0,0)#8b0000 COLOR
      darksalmon(233,150,122)#e9967a COLOR
      darkseagreen(143,188,143)#8fbc8f COLOR
      darkseagreen1(193,255,193)#c1ffc1 COLOR
      darkseagreen2(180,238,180)#b4eeb4 COLOR
      darkseagreen3(155,205,155)#9bcd9b COLOR
      darkseagreen4(105,139,105)#698b69 COLOR
      darkslateblue(72,61,139)#483d8b COLOR
      darkslategray(47,79,79)#2f4f4f COLOR
      darkslategray1(151,255,255)#97ffff COLOR
      darkslategray2(141,238,238)#8deeee COLOR
      darkslategray3(121,205,205)#79cdcd COLOR
      darkslategray4(82,139,139)#528b8b COLOR
      darkturquoise(0,206,209)#00ced1 COLOR
      darkviolet(148,0,211)#9400d3 COLOR
      deepindigo(138,43,226)#8a2be2 COLOR
      deeppink(255,20,147)#ff1493 COLOR
      deeppink1(255,20,147)#ff1493 COLOR
      deeppink2(238,18,137)#ee1289 COLOR
      deeppink3(205,16,118)#cd1076 COLOR
      deeppink4(139,10,80)#8b0a50 COLOR
      deepskyblue(0,191,255)#00bfff COLOR
      deepskyblue1(0,191,255)#00bfff COLOR
      deepskyblue2(0,178,238)#00b2ee COLOR
      deepskyblue3(0,154,205)#009acd COLOR
      deepskyblue4(0,104,139)#00688b COLOR
      dimgray(105,105,105)#696969 COLOR
      dodgerblue(30,144,255)#1e90ff COLOR
      dodgerblue1(30,144,255)#1e90ff COLOR
      dodgerblue2(28,134,238)#1c86ee COLOR
      dodgerblue3(24,116,205)#1874cd COLOR
      dodgerblue4(16,78,139)#104e8b COLOR
      eggplant(144,176,168)#90b0a8 COLOR
      electricindigo(102,0,255)#6600ff COLOR
      firebrick(178,34,34)#b22222 COLOR
      firebrick1(255,48,48)#ff3030 COLOR
      firebrick2(238,44,44)#ee2c2c COLOR
      firebrick3(205,38,38)#cd2626 COLOR
      firebrick4(139,26,26)#8b1a1a COLOR
      forestgreen(34,139,34)#228b22 COLOR
      gainsboro(220,220,220)#dcdcdc COLOR
      gold(255,215,0)#ffd700 COLOR
      gold1(255,215,0)#ffd700 COLOR
      gold2(238,201,0)#eec900 COLOR
      gold3(205,173,0)#cdad00 COLOR
      gold4(139,117,0)#8b7500 COLOR
      goldenrod(218,165,32)#daa520 COLOR
      goldenrod1(255,193,37)#ffc125 COLOR
      goldenrod2(238,180,34)#eeb422 COLOR
      goldenrod3(205,155,29)#cd9b1d COLOR
      goldenrod4(139,105,20)#8b6914 COLOR
      gray(190,190,190)#bebebe COLOR
      gray1(10,10,10)#0a0a0a COLOR
      gray2(40,40,30)#28281e COLOR
      gray3(70,70,70)#464646 COLOR
      gray4(100,100,100)#646464 COLOR
      gray5(130,130,130)#828282 COLOR
      gray6(160,160,160)#a0a0a0 COLOR
      gray7(190,190,190)#bebebe COLOR
      gray8(210,210,210)#d2d2d2 COLOR
      gray9(240,240,240)#f0f0f0 COLOR
      green(0,255,0)#00ff00 COLOR
      greenyellow(173,255,47)#adff2f COLOR
      honeydew(193,205,193)#c1cdc1 COLOR
      hotpink(255,105,180)#ff69b4 COLOR
      hotpink1(255,110,180)#ff6eb4 COLOR
      hotpink2(238,106,167)#ee6aa7 COLOR
      hotpink3(205,96,144)#cd6090 COLOR
      hotpink4(139,58,98)#8b3a62 COLOR
      indianred(205,92,92)#cd5c5c COLOR
      indianred1(255,106,106)#ff6a6a COLOR
      indianred2(238,99,99)#ee6363 COLOR
      indianred3(205,85,85)#cd5555 COLOR
      indianred4(139,58,58)#8b3a3a COLOR
      indigo(75,0,130)#4b0082 COLOR
      indigodye(0,65,106)#00416a COLOR
      ivory(255,255,240)#fffff0 COLOR
      ivory1(255,255,240)#fffff0 COLOR
      ivory2(238,238,224)#eeeee0 COLOR
      ivory3(205,205,193)#cdcdc1 COLOR
      ivory4(139,139,131)#8b8b83 COLOR
      khaki(240,230,140)#f0e68c COLOR
      khaki1(255,246,143)#fff68f COLOR
      khaki2(238,230,133)#eee685 COLOR
      khaki3(205,198,115)#cdc673 COLOR
      khaki4(139,134,78)#8b864e COLOR
      lavender(230,230,250)#e6e6fa COLOR
      lavenderblush(255,240,245)#fff0f5 COLOR
      lavenderblush1(255,240,245)#fff0f5 COLOR
      lavenderblush2(238,224,229)#eee0e5 COLOR
      lavenderblush3(205,193,197)#cdc1c5 COLOR
      lavenderblush4(139,131,134)#8b8386 COLOR
      lawngreen(124,252,0)#7cfc00 COLOR
      lemonchiffon(255,250,205)#fffacd COLOR
      lemonchiffon1(255,250,205)#fffacd COLOR
      lemonchiffon2(238,233,191)#eee9bf COLOR
      lemonchiffon3(205,201,165)#cdc9a5 COLOR
      lemonchiffon4(139,137,112)#8b8970 COLOR
      lightblue(173,216,230)#add8e6 COLOR
      lightblue1(191,239,255)#bfefff COLOR
      lightblue2(178,223,238)#b2dfee COLOR
      lightblue3(154,192,205)#9ac0cd COLOR
      lightblue4(104,131,139)#68838b COLOR
      lightcoral(240,128,128)#f08080 COLOR
      lightcyan(224,255,255)#e0ffff COLOR
      lightcyan1(224,255,255)#e0ffff COLOR
      lightcyan2(209,238,238)#d1eeee COLOR
      lightcyan3(180,205,205)#b4cdcd COLOR
      lightcyan4(122,139,139)#7a8b8b COLOR
      lightgoldenrod(238,221,130)#eedd82 COLOR
      lightgoldenrod1(255,236,139)#ffec8b COLOR
      lightgoldenrod2(238,220,130)#eedc82 COLOR
      lightgoldenrod3(205,190,112)#cdbe70 COLOR
      lightgoldenrod4(139,129,76)#8b814c COLOR
      lightgoldenrodyellow(250,250,210)#fafad2 COLOR
      lightgray(211,211,211)#d3d3d3 COLOR
      lightgreen(144,238,144)#90ee90 COLOR
      lightpink(255,182,193)#ffb6c1 COLOR
      lightpink1(255,174,185)#ffaeb9 COLOR
      lightpink2(238,162,173)#eea2ad COLOR
      lightpink3(205,140,149)#cd8c95 COLOR
      lightpink4(139,95,101)#8b5f65 COLOR
      lightred(211,167,168)#d3a7a8 COLOR
      lightsalmon(255,160,122)#ffa07a COLOR
      lightsalmon1(255,160,122)#ffa07a COLOR
      lightsalmon2(238,149,114)#ee9572 COLOR
      lightsalmon3(205,129,98)#cd8162 COLOR
      lightsalmon4(139,87,66)#8b5742 COLOR
      lightseagreen(32,178,170)#20b2aa COLOR
      lightskyblue(135,206,250)#87cefa COLOR
      lightskyblue1(176,226,255)#b0e2ff COLOR
      lightskyblue2(164,211,238)#a4d3ee COLOR
      lightskyblue3(141,182,205)#8db6cd COLOR
      lightskyblue4(96,123,139)#607b8b COLOR
      lightslateblue(132,112,255)#8470ff COLOR
      lightslategray(119,136,153)#778899 COLOR
      lightsteelblue(176,196,222)#b0c4de COLOR
      lightsteelblue1(202,225,255)#cae1ff COLOR
      lightsteelblue2(188,210,238)#bcd2ee COLOR
      lightsteelblue3(162,181,205)#a2b5cd COLOR
      lightsteelblue4(110,123,139)#6e7b8b COLOR
      lightyellow(255,255,200)#ffffc8 COLOR
      lime(0,255,0)#00ff00 COLOR
      limegreen(50,205,50)#32cd32 COLOR
      linen(250,240,230)#faf0e6 COLOR
      magenta(255,0,255)#ff00ff COLOR
      magenta1(255,0,255)#ff00ff COLOR
      magenta2(238,0,238)#ee00ee COLOR
      magenta3(205,0,205)#cd00cd COLOR
      magenta4(139,0,139)#8b008b COLOR
      maroon(176,48,96)#b03060 COLOR
      maroon1(255,52,179)#ff34b3 COLOR
      maroon2(238,48,167)#ee30a7 COLOR
      maroon3(205,41,144)#cd2990 COLOR
      maroon4(139,28,98)#8b1c62 COLOR
      mediumaquamarine(102,205,170)#66cdaa COLOR
      mediumblue(0,0,205)#0000cd COLOR
      mediumorchid(186,85,211)#ba55d3 COLOR
      mediumorchid1(224,102,255)#e066ff COLOR
      mediumorchid2(209,95,238)#d15fee COLOR
      mediumorchid3(180,82,205)#b452cd COLOR
      mediumorchid4(122,55,139)#7a378b COLOR
      mediumpurple(147,112,219)#9370db COLOR
      mediumpurple1(171,130,255)#ab82ff COLOR
      mediumpurple2(159,121,238)#9f79ee COLOR
      mediumpurple3(137,104,205)#8968cd COLOR
      mediumpurple4(93,71,139)#5d478b COLOR
      mediumred(140,34,34)#8c2222 COLOR
      mediumseagreen(60,179,113)#3cb371 COLOR
      mediumslateblue(123,104,238)#7b68ee COLOR
      mediumspringgreen(0,250,154)#00fa9a COLOR
      mediumturquoise(72,209,204)#48d1cc COLOR
      mediumvioletred(199,21,133)#c71585 COLOR
      midnightblue(25,25,112)#191970 COLOR
      mintcream(245,255,250)#f5fffa COLOR
      mistyrose(255,228,225)#ffe4e1 COLOR
      mistyrose1(255,228,225)#ffe4e1 COLOR
      mistyrose2(238,213,210)#eed5d2 COLOR
      mistyrose3(205,183,181)#cdb7b5 COLOR
      mistyrose4(139,125,123)#8b7d7b COLOR
      moccasin(255,228,181)#ffe4b5 COLOR
      navajowhite(255,222,173)#ffdead COLOR
      navajowhite1(255,222,173)#ffdead COLOR
      navajowhite2(238,207,161)#eecfa1 COLOR
      navajowhite3(205,179,139)#cdb38b COLOR
      navajowhite4(139,121,94)#8b795e COLOR
      navy(0,0,128)#000080 COLOR
      oldlace(253,245,230)#fdf5e6 COLOR
      olivedrab(107,142,35)#6b8e23 COLOR
      olivedrab1(192,255,62)#c0ff3e COLOR
      olivedrab2(179,238,58)#b3ee3a COLOR
      olivedrab3(154,205,50)#9acd32 COLOR
      olivedrab4(105,139,34)#698b22 COLOR
      orange(255,165,0)#ffa500 COLOR
      orange1(255,165,0)#ffa500 COLOR
      orange2(238,154,0)#ee9a00 COLOR
      orange3(205,133,0)#cd8500 COLOR
      orange4(139,90,0)#8b5a00 COLOR
      orangered(255,69,0)#ff4500 COLOR
      orangered1(255,69,0)#ff4500 COLOR
      orangered2(238,64,0)#ee4000 COLOR
      orangered3(205,55,0)#cd3700 COLOR
      orangered4(139,37,0)#8b2500 COLOR
      orchid(218,112,214)#da70d6 COLOR
      orchid1(255,131,250)#ff83fa COLOR
      orchid2(238,122,233)#ee7ae9 COLOR
      orchid3(205,105,201)#cd69c9 COLOR
      orchid4(139,71,137)#8b4789 COLOR
      palegoldenrod(238,232,170)#eee8aa COLOR
      palegreen(152,251,152)#98fb98 COLOR
      palegreen1(154,255,154)#9aff9a COLOR
      palegreen2(144,238,144)#90ee90 COLOR
      palegreen3(124,205,124)#7ccd7c COLOR
      palegreen4(84,139,84)#548b54 COLOR
      paleturquoise(175,238,238)#afeeee COLOR
      paleturquoise1(187,255,255)#bbffff COLOR
      paleturquoise2(174,238,238)#aeeeee COLOR
      paleturquoise3(150,205,205)#96cdcd COLOR
      paleturquoise4(102,139,139)#668b8b COLOR
      palevioletred(219,112,147)#db7093 COLOR
      palevioletred1(255,130,171)#ff82ab COLOR
      palevioletred2(238,121,159)#ee799f COLOR
      palevioletred3(205,104,137)#cd6889 COLOR
      palevioletred4(139,71,93)#8b475d COLOR
      papayawhip(255,239,213)#ffefd5 COLOR
      peachPuff1(255,218,185)#ffdab9 COLOR
      peachpuff(255,218,185)#ffdab9 COLOR
      peachpuff2(238,203,173)#eecbad COLOR
      peachpuff3(205,175,149)#cdaf95 COLOR
      peachpuff4(139,119,101)#8b7765 COLOR
      peru(205,133,63)#cd853f COLOR
      pigmentindigo(75,0,130)#4b0082 COLOR
      pink(255,192,203)#ffc0cb COLOR
      pink1(255,181,197)#ffb5c5 COLOR
      pink2(238,169,184)#eea9b8 COLOR
      pink3(205,145,158)#cd919e COLOR
      pink4(139,99,108)#8b636c COLOR
      plum(221,160,221)#dda0dd COLOR
      plum1(255,187,255)#ffbbff COLOR
      plum2(238,174,238)#eeaeee COLOR
      plum3(205,150,205)#cd96cd COLOR
      plum4(139,102,139)#8b668b COLOR
      powderblue(176,224,230)#b0e0e6 COLOR
      purple(160,32,240)#a020f0 COLOR
      purple1(155,48,255)#9b30ff COLOR
      purple2(145,44,238)#912cee COLOR
      purple3(125,38,205)#7d26cd COLOR
      purple4(85,26,139)#551a8b COLOR
      red(255,0,0)#ff0000 COLOR
      rosybrown(188,143,143)#bc8f8f COLOR
      rosybrown1(255,193,193)#ffc1c1 COLOR
      rosybrown2(238,180,180)#eeb4b4 COLOR
      rosybrown3(205,155,155)#cd9b9b COLOR
      rosybrown4(139,105,105)#8b6969 COLOR
      royalblue(65,105,225)#4169e1 COLOR
      royalblue1(72,118,255)#4876ff COLOR
      royalblue2(67,110,238)#436eee COLOR
      royalblue3(58,95,205)#3a5fcd COLOR
      royalblue4(39,64,139)#27408b COLOR
      saddlebrown(139,69,19)#8b4513 COLOR
      salmon(250,128,114)#fa8072 COLOR
      salmon1(255,140,105)#ff8c69 COLOR
      salmon2(238,130,98)#ee8262 COLOR
      salmon3(205,112,84)#cd7054 COLOR
      salmon4(139,76,57)#8b4c39 COLOR
      sandybrown(244,164,96)#f4a460 COLOR
      seagreen(46,139,87)#2e8b57 COLOR
      seagreen1(84,255,159)#54ff9f COLOR
      seagreen2(78,238,148)#4eee94 COLOR
      seagreen3(67,205,128)#43cd80 COLOR
      seagreen4(46,139,87)#2e8b57 COLOR
      seashell(255,245,238)#fff5ee COLOR
      seashell1(255,245,238)#fff5ee COLOR
      seashell2(238,229,222)#eee5de COLOR
      seashell3(205,197,191)#cdc5bf COLOR
      seashell4(139,134,130)#8b8682 COLOR
      sienna(160,82,45)#a0522d COLOR
      sienna1(255,130,71)#ff8247 COLOR
      sienna2(238,121,66)#ee7942 COLOR
      sienna3(205,104,57)#cd6839 COLOR
      sienna4(139,71,38)#8b4726 COLOR
      silver(192,192,192)#c0c0c0 COLOR
      skyblue(135,206,235)#87ceeb COLOR
      skyblue1(135,206,255)#87ceff COLOR
      skyblue2(126,192,238)#7ec0ee COLOR
      skyblue3(108,166,205)#6ca6cd COLOR
      skyblue4(74,112,139)#4a708b COLOR
      slateblue(106,90,205)#6a5acd COLOR
      slateblue1(131,111,255)#836fff COLOR
      slateblue2(122,103,238)#7a67ee COLOR
      slateblue3(105,89,205)#6959cd COLOR
      slateblue4(71,60,139)#473c8b COLOR
      slategray(112,128,144)#708090 COLOR
      slategray1(198,226,255)#c6e2ff COLOR
      slategray2(185,211,238)#b9d3ee COLOR
      slategray3(159,182,205)#9fb6cd COLOR
      slategray4(108,123,139)#6c7b8b COLOR
      snow1(255,250,250)#fffafa COLOR
      snow2(238,233,233)#eee9e9 COLOR
      snow3(205,201,201)#cdc9c9 COLOR
      snow4(139,137,137)#8b8989 COLOR
      springgreen(0,255,127)#00ff7f COLOR
      springgreen1(0,255,127)#00ff7f COLOR
      springgreen2(0,238,118)#00ee76 COLOR
      springgreen3(0,205,102)#00cd66 COLOR
      springgreen4(0,139,69)#008b45 COLOR
      steelblue(70,130,180)#4682b4 COLOR
      steelblue1(99,184,255)#63b8ff COLOR
      steelblue2(92,172,238)#5cacee COLOR
      steelblue3(79,148,205)#4f94cd COLOR
      steelblue4(54,100,139)#36648b COLOR
      tan(210,180,140)#d2b48c COLOR
      tan1(255,165,79)#ffa54f COLOR
      tan2(238,154,73)#ee9a49 COLOR
      tan3(205,133,63)#cd853f COLOR
      tan4(139,90,43)#8b5a2b COLOR
      teal(0,128,128)#008080 COLOR
      thistle(216,191,216)#d8bfd8 COLOR
      thistle1(255,225,255)#ffe1ff COLOR
      thistle2(238,210,238)#eed2ee COLOR
      thistle3(205,181,205)#cdb5cd COLOR
      thistle4(139,123,139)#8b7b8b COLOR
      tomato(255,99,71)#ff6347 COLOR
      tomato1(255,99,71)#ff6347 COLOR
      tomato2(238,92,66)#ee5c42 COLOR
      tomato3(205,79,57)#cd4f39 COLOR
      tomato4(139,54,38)#8b3626 COLOR
      turquoise(64,224,208)#40e0d0 COLOR
      turquoise1(0,245,255)#00f5ff COLOR
      turquoise2(0,229,238)#00e5ee COLOR
      turquoise3(0,197,205)#00c5cd COLOR
      turquoise4(0,134,139)#00868b COLOR
      violet(238,130,238)#ee82ee COLOR
      violetred(208,32,144)#d02090 COLOR
      violetred1(255,62,150)#ff3e96 COLOR
      violetred2(238,58,140)#ee3a8c COLOR
      violetred3(205,50,120)#cd3278 COLOR
      violetred4(139,34,82)#8b2252 COLOR
      wheat(245,222,179)#f5deb3 COLOR
      wheat1(255,231,186)#ffe7ba COLOR
      wheat2(238,216,174)#eed8ae COLOR
      wheat3(205,186,150)#cdba96 COLOR
      wheat4(139,126,102)#8b7e66 COLOR
      white(255,255,255)#ffffff COLOR
      whitesmoke(245,245,245)#f5f5f5 COLOR
      yellow(255,255,0)#ffff00 COLOR
      yellow1(255,255,0)#ffff00 COLOR
      yellow2(238,238,0)#eeee00 COLOR
      yellow3(205,205,0)#cdcd00 COLOR
      yellow4(139,139,0)#8b8b00 COLOR
      yellowgreen(154,205,50)#9acd32 COLOR
      +

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ape.html b/Societes/ric/jpgraph/docs/chunkhtml/ape.html new file mode 100755 index 00000000..f09562a0 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ape.html @@ -0,0 +1,78 @@ +Appendix E. Available plot marks

      Appendix E. Available plot marks

      + +

      Plot marks can be added to almost all linear (cartesian) graph types. They are used to + emphasise the actual data points in the graph. The plot mark property is available as the + instance variable "$mark" for the plot types that support plot marks.

      +

      Built in basic plot marks

      + +

      To embellishment a line plot with one of the built-in basic plot marks, say a a red + diamond mark, at each data point the following line has to be added to the graph + script

      +

      +

      1
      +2
      +3
      +4
      +
      <?php
      +$lineplot->mark->SetType(MARK_DIAMOND);
      +$lineplot->mark->SetFillColor('red');
      +?>

      +

      +

      The rest of the basic plot marks are handled analogues.

      +

      +

      Table E.1. Built in line based plot marks

      + +
      Displayed plot markSymbolic name
      +

      +
      +

      MARK_SQUARE

      +
      +

      +
      +

      MARK_UTRIANGLE

      +
      +

      +
      +

      MARK_DTRIANGLE

      +
      +

      +
      +

      MARK_DIAMOND

      +
      +

      +
      +

      MARK_CIRCLE

      +
      +

      +
      +

      MARK_FILLEDCIRCLE

      +
      +

      +
      +

      MARK_CROSS

      +
      +

      +
      +

      MARK_STAR

      +
      +

      +
      +

      MARK_X

      +
      +

      +
      +

      MARK_LEFTTRIANGLE

      +
      +

      +
      +

      MARK_RIGHTTRIANGLE

      +
      +

      +
      +

      MARK_FLASH

      +
      +


      +

      +
      + +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apes02.html b/Societes/ric/jpgraph/docs/chunkhtml/apes02.html new file mode 100755 index 00000000..07b0ad2d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apes02.html @@ -0,0 +1,88 @@ +Built in image plot marks

      Built in image plot marks

      + +

      Since the image based plot marks only supports some colors (since there has to be a + unique image for each color) the following sections shows for each major image plot mark + what colors are available. The image shows the natural size of the plot mark, i.e. the + scale factor is =1. Only the round balls ar available natively in three different sizes. + Even though it is possible to scale up all the images arbitrarily it will cause the + images to become pixelated.

      +

      To use one of the built in image plot mark two parameters has to be given to the + SetType() method. The basic class of plot mark and the wanted color. + For example to use a green square as plot marks the following line would have to be + added

      +

      +

      1
      +2
      +3
      +
      <?php
      +$lineplot->mark->SetType(MARK_IMG_SQUARE,'green');
      +?>

      +

      +

      If a non-supported color is specified an error will be thrown.

      +

      Image plot mark: Balls

      + +

      +

      Figure E.1. Small size

      + +
      Small size
      +


      +

      +

      +

      Figure E.2. Medium size

      + +
      Medium size
      +


      +

      +

      +

      Figure E.3. Large size

      + +
      Large size
      +


      +

      +
      +

      Image plot mark: Squares

      + +

      +

      Figure E.4. Standard size

      + +
      Standard size
      +


      +

      +
      +

      Image plot mark: Diamonds

      + +

      +

      Figure E.5. Standard size

      + +
      Standard size
      +


      +

      +
      +

      Image plot mark: Stars

      + +

      +

      Figure E.6. Standard size

      + +
      Standard size
      +


      +

      +
      +

      Image plot mark: Bevels

      + +

      +

      Figure E.7. Standard size

      + +
      Standard size
      +


      +

      +
      +

      Image plot mark: Pushpins

      + +

      +

      Figure E.8. Standard size

      + +
      Standard size
      +


      +

      +
      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apf.html b/Societes/ric/jpgraph/docs/chunkhtml/apf.html new file mode 100755 index 00000000..b767772e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apf.html @@ -0,0 +1,79 @@ +Appendix F. List of all country flags

      Appendix F. List of all country flags

      + +

      All country flags are included in a pre-compiled efficient format with the library. In + addition the flags can be scaled arbitrarily and used as either background images or as plot + marks. Flags are specified by either it's index or by the using the whole or a unique part + of the country name.

      +

      The list of all flags are in simple alphabetical order, i.e. by the full name including + governance prefix e.g. "Republic". The size of the flags in this table has been chosen as + FLAGSIZE2 +

      +

      Caution

      +

      The dynamics of world politics and geographic boundaries will no doubt make the list + of included countries obsolete almost at the same time the library is released. The + intention is that all currently known country and similar geographic entities should be + included. Any missing flags shall and can not be interpreted as any political stand it + is merely a consequence of political changes since the library was released or a + possible oversight or simply a mistake either human or algorithmically in how the + country flags are produced.

      +
      +

      For more information on how to use country flags see Adding images and country flags to the background of the graph

      +

      It is also possible to easily create a flags for usage outside graphs. The following + script takes an index and flag core size as URL arguments and returns the chosen flag.

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +
      <?php
      +require_once 'jpgraph.php';
      +require_once 'jpgraph_flags.php';
      + 
      +if( empty($_GET['size']) ) {
      +    $size = FLAGSIZE1;
      +}
      +else {
      +    $size = $_GET['size'];
      +}
      + 
      +if( empty($_GET['idx']) ) {
      +    $idx = 'swdn';
      +}
      +else {
      +    $idx = $_GET['idx'];
      +}
      + 
      + 
      +$flags = new FlagImages($size) ;
      +$img = $flags->GetImgByIdx($idx);
      +header ("Content-type: image/png");
      +ImagePng ($img);
      +?>

      +

      +

      +

      Table F.1. List of all country flags sorted by country name

      + +
      Country nameShort nameIndexFlag
      Afghanistan"afgh"0
      Alderney"alde"3
      Antarctica"anta"8
      Arab Republic of Egypt"egyp"63
      Argentine Republic"arge"9
      Aruba"arub"12
      Autonomous Region of Tibet"tibe"210
      Azerbaijani Republic"azer"15
      Bangladesh"bngl"16
      Barbados"brbd"28
      Belize"blze"24
      Bolivarian Republic of Venezuela"venz"231
      British Antarctic Territory"bant"17
      British Indian Ocean Territory"brin"29
      British Overseas Territory of Anguilla"angu"7
      British Overseas Territory of Bermuda"berm"19
      British Overseas Territory of Montserrat"mont"138
      British Overseas Territory of the Cayman Islands"cyis"55
      British Overseas Territory of the Falkland Islands"fais"71
      British Overseas Territory of the Pitcairn Islands"piis"171
      Brunei Darussalam"brun"30
      Caribbean Community"cari"39
      Central African Republic"cafr"35
      Commonwealth"comn"49
      Commonwealth of Australia"astl"13
      Commonwealth of Dominica"domn"60
      Commonwealth of Independent States"cins"45
      Commonwealth of Puerto Rico"purc"174
      Commonwealth of the Bahamas"bhms"20
      Commonwealth of the Northern Mariana Islands"nmar"155
      Cook Islands"ckis"46
      Democratic Republic of Congo"zare"233
      Democratic Socialist Republic of Sri Lanka"srla"196
      Democratic and Popular Republic of Algeria"alge"4
      Dominican Republic"dore"61
      Dominion of Canada"cana"38
      England"engl"65
      Ethiopia"ethp"69
      European Union"euun"70
      Federal Republic of Germany"germ"81
      Federal Republic of Nigeria"ngra"151
      Federated States of Micronesia"micr"133
      Federation of Malaysia"mals"126
      Federative Republic of Brazil"braz"27
      French Republic"fran"76
      Gabonese Republic"gabn"78
      Gibraltar"gibr"83
      Grand Duchy of Luxembourg"luxe"120
      Hashemite Kingdom of Jordan"jord"108
      Hellenic Republic"grec"84
      Hong Kong Special Administrative Region"hokn"92
      Independent State of Papua New Guinea"pang"167
      International Committee of the Red Cross"icrc"96
      International Federation of Vexillological Associations"fiav"72
      International Olympic Committee"olym"163
      Islamic Republic of Mauritania"maur"130
      Islamic Republic of Pakistan"paks"165
      Isle of Man"isma"102
      Italian Republic"ital"104
      Jamaica"jama"105
      Japan"japa"106
      Kingdom of Bahrain"bhrn"21
      Kingdom of Belgium"belg"18
      Kingdom of Cambodia"camb"36
      Kingdom of Denmark"denm"58
      Kingdom of Lesotho"lest"116
      Kingdom of Morocco"morc"139
      Kingdom of Nepal"nepa"148
      Kingdom of Norway"norw"158
      Kingdom of Saudi Arabia"saar"179
      Kingdom of Spain"span"194
      Kingdom of Swaziland"szld"204
      Kingdom of Sweden"swdn"201
      Kingdom of Thailand"thal"209
      Kingdom of Tonga"tong"214
      Kingdom of the Netherlands"neth"149
      Kyrgyz Republic"kyrg"113
      League of Arab States"arle"10
      Lebanese Republic"leba"115
      Macao Special Administrative Region"maca"121
      Midway Islands"miis"134
      Netherlands Antilles"nean"147
      New Zealand"nwze"160
      Niue"niue"154
      Nordic Council"nord"157
      Nordic Sami Conference"sami"181
      North Atlantic Treaty Organization"nato"144
      Organization of African Unity"oaun"162
      Organization of American States"oast"161
      Organization of the Islamic Conference"isco"101
      Oriental Republic of Uruguay"urgy"226
      Overseas Department of French Guiana"frgu"77
      Overseas Department of Guadeloupe"guad"86
      Overseas Department of Martinique"mart"129
      Overseas Territory of the British Virgin Islands"bvis"34
      Peoples Republic of China"chin"43
      Principality of Andorra"andr"6
      Principality of Liechtenstein"liec"118
      Principality of Monaco"mona"136
      Principality of Seborga"sebo"184
      Province of Northern Ireland"noir"156
      Republic of Albania"alba"2
      Republic of Angola"agla"1
      Republic of Armenia"arme"11
      Republic of Austria"aust"14
      Republic of Belarus"blru"22
      Republic of Benin"bnin"25
      Republic of Bolivia"blva"23
      Republic of Botswana"bots"26
      Republic of Bulgaria"bulg"32
      Republic of Burkina"bufa"31
      Republic of Burundi"buru"33
      Republic of Cameroon"came"37
      Republic of Cape Verde"cave"40
      Republic of Chad"chad"41
      Republic of Chile"chil"42
      Republic of China"taiw"205
      Republic of Colombia"clmb"47
      Republic of Costa Rica"corc"52
      Republic of Croatia"croa"53
      Republic of Cuba"cuba"54
      Republic of Cyprus"cypr"56
      Republic of Djibouti"djib"59
      Republic of Ecuador"ecua"62
      Republic of El Salvador"elsa"64
      Republic of Equatorial Guinea"eqgu"66
      Republic of Estonia"estn"68
      Republic of Fiji"fiji"73
      Republic of Finland"finl"74
      Republic of Georgia"geor"80
      Republic of Ghana"ghan"82
      Republic of Guatemala"guat"88
      Republic of Guinea"guin"90
      Republic of Haiti"hait"91
      Republic of Honduras"hond"93
      Republic of Hungary"hung"94
      Republic of Iceland"icel"95
      Republic of India"inda"97
      Republic of Indonesia"indn"98
      Republic of Iraq"iraq"99
      Republic of Ireland"irel"100
      Republic of Kazakhstan"kazk"109
      Republic of Kenya"keny"110
      Republic of Kiribati"kirb"111
      Republic of Korea"skor"188
      Republic of Latvia"latv"114
      Republic of Liberia"libe"117
      Republic of Lithuania"lith"119
      Republic of Macedonia"mace"122
      Republic of Madagascar"mada"123
      Republic of Malawi"malw"128
      Republic of Mali"mali"125
      Republic of Malta"malt"127
      Republic of Mauritius"mrts"141
      Republic of Moldova"mold"135
      Republic of Mongolia"mong"137
      Republic of Mozambique"moza"140
      Republic of Namibia"namb"143
      Republic of Nauru"naur"145
      Republic of Nicaragua"nica"152
      Republic of Niger"nigr"153
      Republic of Palau"pala"166
      Republic of Paraguay"para"168
      Republic of Peru"peru"169
      Republic of Poland"pola"172
      Republic of Portugal"port"173
      Republic of Rwanda"rwan"178
      Republic of San Marino"sama"180
      Republic of Serbia"serb"185
      Republic of Sierra Leone"sile"186
      Republic of Singapore"sing"187
      Republic of Slovenia"slva"189
      Republic of Somaliland"smld"191
      Republic of South Africa"soaf"192
      Republic of Suriname"surn"199
      Republic of Tajikistan"tajk"207
      Republic of Tunisia"tuns"217
      Republic of Turkey"turk"218
      Republic of Uganda"ugan"221
      Republic of Uzbekistan"uzbk"228
      Republic of Vanuatu"vant"230
      Republic of Yemen"yemn"232
      Republic of Zimbabwe"zbwe"234
      Republic of the Congo"cong"51
      Republic of the Gambia"gamb"79
      Republic of the Marshall Islands"mais"124
      Republic of the Philippines"phil"170
      Republic of the Sudan"suda"198
      Romania"rmna"177
      Russian Federation"russ"176
      Saint Lucia"stlu"197
      Sark"sark"182
      Scotland"scot"183
      Secretariat of the Pacific Community"spco"195
      Slovak Republic"svka"200
      Solomon Islands"sois"193
      Somali Republic"smla"190
      State of Eritrea"erit"67
      State of Grenada"gren"85
      State of Israel"isra"103
      State of Kuwait"kuwa"112
      State of Qatar"qata"175
      State of the Vatican City"vacy"229
      Sultanate of Oman"oman"164
      Swiss Confederation"swit"202
      Syrian Arab Republic"syra"203
      Taiwan"taiw"206
      Territorial Collectivity of Mayotte"mayt"131
      Territory of American Samoa"amsa"5
      Territory of Christmas Island"chms"44
      Territory of Cocos Islands"cois"48
      Territory of French Polynesia"fpol"75
      Territory of Guam"guam"87
      Territory of New Caledonia and Dependencies"nwca"159
      Territory of Norfolk Island"nfis"150
      The Bailiwick of Guernsey"guer"89
      The Bailiwick of Jersey"jers"107
      The Czech Republic"czec"57
      Togolese Republic"togo"212
      Tokelau"toke"213
      Tristan da Cunha"trdc"215
      Tromelin"tris"216
      Turkish Republic of Northern Cyprus"ncyp"146
      Turkmenistan"tkst"211
      Tuvalu"tuva"219
      Ukraine"ukrn"222
      Union of Myanmar"myan"142
      Union of the Comoros"como"50
      United Arab Emirates"uaem"220
      United Kingdom of Great Britain"unkg"223
      United Mexican States"mexc"132
      United Nations"unna"224
      United Republic of Tanzania"tanz"208
      United States of America"unst"225
      Virgin Islands of the United States"usvs"227
      +


      +

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apg.html b/Societes/ric/jpgraph/docs/chunkhtml/apg.html new file mode 100755 index 00000000..4e911f9a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apg.html @@ -0,0 +1,201 @@ +Appendix G. List of files included in the library

      Appendix G. List of files included in the library

      + +

      In the distribution these files are stored directly under the src directory in the + distribution.

      +

      In the pro-version of the library there are also two alternative directories which + contains variations of the core src directory. These additional + directories are:

      +

      +

      stripped-src
      +

      These file are suitable to be deployed on a production server. No examples + or demo applications are included here and in addition all files have white + spaces and comments stripped which makes them significantly smaller and + hence reduce the load time of the files on a productions server.

      +
      phpExpress-src
      +

      These files are intended to be used with the PHP Accelerator from + NuSpehere. This accelerometer can be downloaded free of charge from NuSphere corporation. For a + production server this is the recommended installation since it + significantly reduces the load on the production server. See Chapter 11. NuSphere PHP accelerator for information on how to install + the freely available PHP Accelerator.

      +

      +

      +

      Table G.1. List of files included in the library

      + +
      File nameOnly Pro Version Description
      + flags.dat + + Raw data for country flag in maximum size
      + flags_thumb100x100.dat + + Raw data for country flag in size 100x100
      + flags_thumb35x35.dat + + Raw data for country flag in size 35x35
      + flags_thumb60x60.dat + + Raw data for country flag in size 60x60
      + gd_image.inc.php + + Interface classes to the low level GD library
      + imgdata_balls.inc.php + + Stored image data for marker images
      + imgdata_bevels.inc.php + + Stored image data for marker images
      + imgdata_diamonds.inc.php + + Stored image data for marker images
      + imgdata_pushpins.inc.php + + Stored image data for marker images
      + imgdata_squares.inc.php + + Stored image data for marker images
      + imgdata_stars.inc.php + + Stored image data for marker images
      + jpg-config.inc.php + + Configuration file for the library
      + jpgraph_antispam-digits.php + + Image data for CAPTCHA digits
      + jpgraph_antispam.php + + Extension module: CAPTCHA figures
      + jpgraph_bar.php + + Extension module: Bargraphs
      + jpgraph_canvas.php + + Extension module: Canvas graphs
      + jpgraph_canvtools.php + + Extension module: Tools for canvas graphs
      + jpgraph_date.php + + Extension module: Date scale handling
      + jpgraph_errhandler.inc.php + + Core module: Error handler
      + jpgraph_error.php + + Extension module: Error plots
      + jpgraph_flags.php + + Extension module: Country flags
      + jpgraph_gantt.php + + Extension module: Gantt chart
      + jpgraph_gb2312.php + + Extension module: GB2312 (Chinese) encoding
      + jpgraph_gradient.php + + Extension module: Gradient fill
      + jpgraph_iconplot.php + + Extension module: Icon images in plots
      + jpgraph_imgtrans.php + + Extension module: Image transformation
      + jpgraph_led.php + + Extension module: LED digits/numbers
      + jpgraph_legend.inc.php + + Core module: Legend handling
      + jpgraph_line.php + + Extension module: Line plot
      + jpgraph_log.php + + Extension module: Log scale
      + jpgraph_mgraph.php + + Extension module: Multigraph canvas
      + jpgraph.php + + Core module: JpGraph core module
      + jpgraph_pie3d.php + + Extension module: 3D Pie plot
      + jpgraph_pie.php + + Extension module: 2D Pie plot
      + jpgraph_plotband.php + + Extension module: Plot bands (filled areas in graphs)
      + jpgraph_plotmark.inc.php + + Extension module: Plotmark for line plots
      + jpgraph_polar.php + + Extension module: Polar plots
      + jpgraph_radar.php + + Extension module:: Radar plot
      + jpgraph_regstat.php + + Extension module: Spline and Bezier curves
      + jpgraph_rgb.inc.php + + Core module: Color handling
      + jpgraph_scatter.php + + Extension module:: Scatter plot
      + jpgraph_stock.php + + Extension module:: Stock charts
      + jpgraph_text.inc.php + + Core module: Text handling
      + jpgraph_ttf.inc.php + + Core module: TTF font handling
      + jpgraph_utils.inc.php + + Extension module:: Various utility classes
      + jpgraph_layout_vh.inc.php + + Extension utility: classes for automatic layout classes
      + jpgraph_odo.php + *Extension module: Odometer plot
      + jpgraph_windrose.php + *Extension module:: Windrose plots
      + jpgraph_table.php + *Extension module:: Graphic tables
      + jpgraph_barcode.php + *Extension module: 1D Barcodes
      + jpgraph_matrix.php + *Extension module: Matrix plots
      +

      +

      In addition to the files above the distribution contains the following directories

      +

      Table G.2. List of subdirectories in main src directory

      + +
      DirectoryOnly Pro VersionDescription
      + Examples + + JpGraph Example directory
      + lang + + Localized error messages
      + barcode + *1D Barcodes
      + datamatrix + *2D Barcode Datamatrix directory
      + pdf417 + *2D Barcode PDF417 directory
      + QR + *2D Barcode QR (Quick response) directory
      + table_examples + *Table examples
      + windrose_examples + *Windrose examples
      + odometer_examples + *Odometer examples
      + matrix_examples + *Matrix plot examples
      +

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/aph.html b/Societes/ric/jpgraph/docs/chunkhtml/aph.html new file mode 100755 index 00000000..937e9b64 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/aph.html @@ -0,0 +1,22 @@ +Appendix H. Error messages

      Appendix H. Error messages

      + +

      This list have all error messages that can be thrown by the library. In addition to the + English locale there is also a German translation (See Localizing error messages). Most error messages takes one (or several + argument that gives additional specific information and the placeholder in the error + messages shows where this additional information should be placed.

      +

      For more general information on error handling we refer to Chapter 6. Error handling

      + +

      Core error messages

      + +

      The following tables lists all error messages that can be generated by standard core + graphs types

      +

      +

      Table H.1. English error messages

      + +
      Error code Error message
      10<table border="1"><tr><td style="color:darkred; font-size:1.2em;"><b>JpGraph Error:</b> +HTTP headers have already been sent.<br>Caused by output from file <b>%s</b> at line <b>%d</b>.</td></tr><tr><td><b>Explanation:</b><br>HTTP headers have already been sent back to the browser indicating the data as text before the library got a chance to send it's image HTTP header to this browser. This makes it impossible for the library to send back image data to the browser (since that would be interpretated as text by the browser and show up as junk text).<p>Most likely you have some text in your script before the call to <i>Graph::Stroke()</i>. If this texts gets sent back to the browser the browser will assume that all data is plain text. Look for any text, even spaces and newlines, that might have been sent back to the browser. <p>For example it is a common mistake to leave a blank line before the opening "<b>&lt;?php</b>".</td></tr></table>
      11No path specified for CACHE_DIR. Please specify CACHE_DIR manually in jpg-config.inc
      12No path specified for TTF_DIR and path can not be determined automatically. Please specify TTF_DIR manually (in jpg-config.inc).
      13The installed PHP version (%s) is not compatible with this release of the library. The library requires at least PHP version %s
      1001Unknown encoder specification: %s
      1002Data validation failed. Can't encode [%s] using encoding "%s"
      1003Internal encoding error. Trying to encode %s is not possible in Code 128
      1004Internal barcode error. Unknown UPC-E encoding type: %s
      1005Internal error. Can't encode character tuple (%s, %s) in Code-128 charset C
      1006Internal encoding error for CODE 128. Trying to encode control character in CHARSET != A
      1007Internal encoding error for CODE 128. Trying to encode DEL in CHARSET != B
      1008Internal encoding error for CODE 128. Trying to encode small letters in CHARSET != B
      1009Encoding using CODE 93 is not yet supported.
      1010Encoding using POSTNET is not yet supported.
      1011Non supported barcode backend for type %s
      2001Number of colors is not the same as the number of patterns in BarPlot::SetPattern()
      2002Unknown pattern specified in call to BarPlot::SetPattern()
      2003Number of X and Y points are not equal. Number of X-points: %d Number of Y-points: %d
      2004All values for a barplot must be numeric. You have specified value nr [%d] == %s
      2005You have specified an empty array for shadow colors in the bar plot.
      2006Unknown position for values on bars : %s
      2007Cannot create GroupBarPlot from empty plot array.
      2008Group bar plot element nbr %d is undefined or empty.
      2009One of the objects submitted to GroupBar is not a BarPlot. Make sure that you create the GroupBar plot from an array of BarPlot or AccBarPlot objects. (Class = %s)
      2010Cannot create AccBarPlot from empty plot array.
      2011Acc bar plot element nbr %d is undefined or empty.
      2012One of the objects submitted to AccBar is not a BarPlot. Make sure that you create the AccBar plot from an array of BarPlot objects. (Class=%s)
      2013You have specified an empty array for shadow colors in the bar plot.
      2014Number of datapoints for each data set in accbarplot must be the same
      2015Individual bar plots in an AccBarPlot or GroupBarPlot can not have specified X-coordinates
      3001It is only possible to use either SetDateAlign() or SetTimeAlign() but not both
      4002Error in input data to LineErrorPlot. Number of data points must be a multiple of 3
      5001Unknown flag size (%d).
      5002Flag index %s does not exist.
      5003Invalid ordinal number (%d) specified for flag index.
      5004The (partial) country name %s does not have a corresponding flag image. The flag may still exist but under another name, e.g. instead of "usa" try "united states".
      6001Internal error. Height for ActivityTitles is < 0
      6002You can't specify negative sizes for Gantt graph dimensions. Use 0 to indicate that you want the library to automatically determine a dimension.
      6003Invalid format for Constrain parameter at index=%d in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Constrain-To,Constrain-Type)
      6004Invalid format for Progress parameter at index=%d in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Progress)
      6005SetScale() is not meaningful with Gantt charts.
      6006Cannot autoscale Gantt chart. No dated activities exist. [GetBarMinMax() start >= n]
      6007Sanity check for automatic Gantt chart size failed. Either the width (=%d) or height (=%d) is larger than MAX_GANTTIMG_SIZE. This could potentially be caused by a wrong date in one of the activities.
      6008You have specified a constrain from row=%d to row=%d which does not have any activity
      6009Unknown constrain type specified from row=%d to row=%d
      6010Illegal icon index for Gantt builtin icon [%d]
      6011Argument to IconImage must be string or integer
      6012Unknown type in Gantt object title specification
      6015Illegal vertical position %d
      6016Date string (%s) specified for Gantt activity can not be interpretated. Please make sure it is a valid time string, e.g. 2005-04-23 13:30
      6017Unknown date format in GanttScale (%s).
      6018Interval for minutes must divide the hour evenly, e.g. 1,5,10,12,15,20,30 etc You have specified an interval of %d minutes.
      6019The available width (%d) for minutes are to small for this scale to be displayed. Please use auto-sizing or increase the width of the graph.
      6020Interval for hours must divide the day evenly, e.g. 0:30, 1:00, 1:30, 4:00 etc. You have specified an interval of %d
      6021Unknown formatting style for week.
      6022Gantt scale has not been specified.
      6023If you display both hour and minutes the hour interval must be 1 (Otherwise it doesn't make sense to display minutes).
      6024CSIM Target must be specified as a string. Start of target is: %d
      6025CSIM Alt text must be specified as a string. Start of alt text is: %d
      6027Progress value must in range [0, 1]
      6028Specified height (%d) for gantt bar is out of range.
      6029Offset for vertical line must be in range [0,1]
      6030Unknown arrow direction for link.
      6031Unknown arrow type for link.
      6032Internal error: Unknown path type (=%d) specified for link.
      6033Array of fonts must contain arrays with 3 elements, i.e. (Family, Style, Size)
      7001Unknown gradient style (=%d).
      8001Mix value for icon must be between 0 and 100.
      8002Anchor position for icons must be one of "top", "bottom", "left", "right" or "center"
      8003It is not possible to specify both an image file and a country flag for the same icon.
      8004In order to use Country flags as icons you must include the "jpgraph_flags.php" file.
      9001Value for image transformation out of bounds. Vanishing point on horizon must be specified as a value between 0 and 1.
      10001LinePlot::SetFilled() is deprecated. Use SetFillColor()
      10002Plot too complicated for fast line Stroke. Use standard Stroke()
      10003Each plot in an accumulated lineplot must have the same number of data points.
      11001Your data contains non-numeric values.
      11002Negative data values can not be used in a log scale.
      11003Your data contains non-numeric values.
      11004Scale error for logarithmic scale. You have a problem with your data values. The max value must be greater than 0. It is mathematically impossible to have 0 in a logarithmic scale.
      11005Specifying tick interval for a logarithmic scale is undefined. Remove any calls to SetTextLabelStart() or SetTextTickInterval() on the logarithmic scale.
      12001You are using GD 2.x and are trying to use a background images on a non truecolor image. To use background images with GD 2.x it is necessary to enable truecolor by setting the USE_TRUECOLOR constant to TRUE. Due to a bug in GD 2.0.1 using any truetype fonts with truecolor images will result in very poor quality fonts.
      12002Incorrect file name for MGraph::SetBackgroundImage() : %s Must have a valid image extension (jpg,gif,png) when using auto detection of image type
      12003Unknown file extension (%s) in MGraph::SetBackgroundImage() for filename: %s
      12004The image format of your background image (%s) is not supported in your system configuration.
      12005Can't read background image: %s
      12006Illegal sizes specified for width or height when creating an image, (width=%d, height=%d)
      12007Argument to MGraph::Add() is not a valid GD image handle.
      12008Your PHP (and GD-lib) installation does not appear to support any known graphic formats.
      12009Your PHP installation does not support the chosen graphic format: %s
      12010Can't create or stream image to file %s Check that PHP has enough permission to write a file to the current directory.
      12011Can't create truecolor image. Check that you really have GD2 library installed.
      12012Can't create image. Check that you really have GD2 library installed.
      13001Unknown needle style (%d).
      13002Value for odometer (%f) is outside specified scale [%f,%f]
      14001Pie3D::ShowBorder() . Deprecated function. Use Pie3D::SetEdge() to control the edges around slices.
      14002PiePlot3D::SetAngle() 3D Pie projection angle must be between 5 and 85 degrees.
      14003Internal assertion failed. Pie3D::Pie3DSlice
      14004Slice start angle must be between 0 and 360 degrees.
      14005Pie3D Internal error: Trying to wrap twice when looking for start index
      14006Pie3D Internal Error: Z-Sorting algorithm for 3D Pies is not working properly (2). Trying to wrap twice while stroking.
      14007Width for 3D Pie is 0. Specify a size > 0
      15001PiePLot::SetTheme() Unknown theme: %s
      15002Argument to PiePlot::ExplodeSlice() must be an integer
      15003Argument to PiePlot::Explode() must be an array with integer distances.
      15004Slice start angle must be between 0 and 360 degrees.
      15005PiePlot::SetFont() is deprecated. Use PiePlot->value->SetFont() instead.
      15006PiePlot::SetSize() Radius for pie must either be specified as a fraction [0, 0.5] of the size of the image or as an absolute size in pixels in the range [10, 1000]
      15007PiePlot::SetFontColor() is deprecated. Use PiePlot->value->SetColor() instead.
      15008PiePlot::SetLabelType() Type for pie plots must be 0 or 1 (not %d).
      15009Illegal pie plot. Sum of all data is zero for Pie Plot
      15010Sum of all data is 0 for Pie.
      15011In order to use image transformation you must include the file jpgraph_imgtrans.php in your script.
      15012PiePlot::SetTheme() is no longer recommended. Use PieGraph::SetTheme()
      16001Density for pattern must be between 1 and 100. (You tried %f)
      16002No positions specified for pattern.
      16003Unknown pattern specification (%d)
      16004Min value for plotband is larger than specified max value. Please correct.
      17001Polar plots must have an even number of data point. Each data point is a tuple (angle,radius).
      17002Unknown alignment specified for X-axis title. (%s)
      17004Unknown scale type for polar graph. Must be "lin" or "log"
      18001Client side image maps not supported for RadarPlots.
      18002RadarGraph::SupressTickMarks() is deprecated. Use HideTickMarks() instead.
      18003Illegal scale for radarplot (%s). Must be 'lin' or 'log'
      18004Radar Plot size must be between 0.1 and 1. (Your value=%f)
      18005RadarPlot Unsupported Tick density: %d
      18006Minimum data %f (Radar plots should only be used when all data points > 0)
      18007Number of titles does not match number of points in plot.
      18008Each radar plot must have the same number of data points.
      19001Spline: Number of X and Y coordinates must be the same
      19002Invalid input data for spline. Two or more consecutive input X-values are equal. Each input X-value must differ since from a mathematical point of view it must be a one-to-one mapping, i.e. each X-value must correspond to exactly one Y-value.
      19003Bezier: Number of X and Y coordinates must be the same
      20001Fieldplots must have equal number of X and Y points.
      20002Fieldplots must have an angle specified for each X and Y points.
      20003Scatterplot must have equal number of X and Y points.
      21001Data values for Stock charts must contain an even multiple of %d data points.
      22001Total percentage for all windrose legs in a windrose plot can not exceed 100%% !\n(Current max is: %d)
      22002Graph is too small to have a scale. Please make the graph larger.
      22004Label specification for windrose directions must have 16 values (one for each compass direction).
      22005Line style for radial lines must be on of ("solid","dotted","dashed","longdashed")
      22006Illegal windrose type specified.
      22007To few values for the range legend.
      22008Internal error: Trying to plot free Windrose even though type is not a free windrose
      22009You have specified the same direction twice, once with an angle and once with a compass direction (%f degrees)
      22010Direction must either be a numeric value or one of the 16 compass directions
      22011Windrose index must be numeric or direction label. You have specified index=%d
      22012Windrose radial axis specification contains a direction which is not enabled.
      22013You have specified the look&feel for the same compass direction twice, once with text and once with index (Index=%d)
      22014Index for compass direction must be between 0 and 15.
      22015You have specified an undefined Windrose plot type.
      22016Windrose leg index must be numeric or direction label.
      22017Windrose data contains a direction which is not enabled. Please adjust what labels are displayed.
      22018You have specified data for the same compass direction twice, once with text and once with index (Index=%d)
      22019Index for direction must be between 0 and 15. You can't specify angles for a Regular Windplot, only index and compass directions.
      22020Windrose plot is too large to fit the specified Graph size. Please use WindrosePlot::SetSize() to make the plot smaller or increase the size of the Graph in the initial WindroseGraph() call.
      22021It is only possible to add Text, IconPlot or WindrosePlot to a Windrose Graph
      23001This marker "%s" does not exist in color with index: %d
      23002Mark color index too large for marker "%s"
      23003A filename must be specified if you set the mark type to MARK_IMG.
      24001FuncGenerator : No function specified.
      24002FuncGenerator : Syntax error in function specification
      24003DateScaleUtils: Unknown tick type specified in call to GetTicks()
      24004ReadCSV2: Column count mismatch in %s line %d
      25001This PHP installation is not configured with the GD library. Please recompile PHP with GD support to run JpGraph. (Neither function imagetypes() nor imagecreatefromstring() does exist)
      25002Your PHP installation does not seem to have the required GD library. Please see the PHP documentation on how to install and enable the GD library.
      25003General PHP error : At %s:%d : %s
      25004General PHP error : %s
      25005Can't access PHP_SELF, PHP global variable. You can't run PHP from command line if you want to use the 'auto' naming of cache or image files.
      25006Usage of FF_CHINESE (FF_BIG5) font family requires that your PHP setup has the iconv() function. By default this is not compiled into PHP (needs the "--width-iconv" when configured).
      25007You are trying to use the locale (%s) which your PHP installation does not support. Hint: Use '' to indicate the default locale for this geographic region.
      25008Image width/height argument in Graph::Graph() must be numeric
      25009You must specify what scale to use with a call to Graph::SetScale()
      25010Graph::Add() You tried to add a null plot to the graph.
      25011Graph::AddY2() You tried to add a null plot to the graph.
      25012Graph::AddYN() You tried to add a null plot to the graph.
      25013You can only add standard plots to multiple Y-axis
      25014Graph::AddText() You tried to add a null text to the graph.
      25015Graph::AddLine() You tried to add a null line to the graph.
      25016Graph::AddBand() You tried to add a null band to the graph.
      25017You are using GD 2.x and are trying to use a background images on a non truecolor image. To use background images with GD 2.x it is necessary to enable truecolor by setting the USE_TRUECOLOR constant to TRUE. Due to a bug in GD 2.0.1 using any truetype fonts with truecolor images will result in very poor quality fonts.
      25018Incorrect file name for Graph::SetBackgroundImage() : "%s" Must have a valid image extension (jpg,gif,png) when using auto detection of image type
      25019Unknown file extension (%s) in Graph::SetBackgroundImage() for filename: "%s"
      25020Graph::SetScale(): Specified Max value must be larger than the specified Min value.
      25021Unknown scale specification for Y-scale. (%s)
      25022Unknown scale specification for X-scale. (%s)
      25023Unsupported Y2 axis type: "%s" Must be one of (lin,log,int)
      25024Unsupported Y axis type: "%s" Must be one of (lin,log,int)
      25025Unsupported Tick density: %d
      25026Can't draw unspecified Y-scale. You have either: 1. Specified an Y axis for auto scaling but have not supplied any plots. 2. Specified a scale manually but have forgot to specify the tick steps
      25027Can't open cached CSIM "%s" for reading.
      25028Apache/PHP does not have permission to write to the CSIM cache directory (%s). Check permissions.
      25029Can't write CSIM "%s" for writing. Check free space and permissions.
      25030Missing script name in call to StrokeCSIM(). You must specify the name of the actual image script as the first parameter to StrokeCSIM().
      25031You must specify what scale to use with a call to Graph::SetScale().
      25032No plots for Y-axis nbr:%d
      25033 
      25034Can't draw unspecified X-scale. No plots specified.
      25035You have enabled clipping. Clipping is only supported for graphs at 0 or 90 degrees rotation. Please adjust you current angle (=%d degrees) or disable clipping.
      25036Unknown AxisStyle() : %s
      25037The image format of your background image (%s) is not supported in your system configuration.
      25038Background image seems to be of different type (has different file extension) than specified imagetype. Specified: %s File: %s
      25039Can't read background image: "%s"
      25040It is not possible to specify both a background image and a background country flag.
      25041In order to use Country flags as backgrounds you must include the "jpgraph_flags.php" file.
      25042Unknown background image layout
      25043Unknown title background style.
      25044Cannot use auto scaling since it is impossible to determine a valid min/max value of the Y-axis (only null values).
      25045Font families FF_HANDWRT and FF_BOOK are no longer available due to copyright problem with these fonts. Fonts can no longer be distributed with JpGraph. Please download fonts from http://corefonts.sourceforge.net/
      25046Specified TTF font family (id=%d) is unknown or does not exist. Please note that TTF fonts are not distributed with JpGraph for copyright reasons. You can find the MS TTF WEB-fonts (arial, courier etc) for download at http://corefonts.sourceforge.net/
      25047Style %s is not available for font family %s
      25048Unknown font style specification [%s].
      25049Font file "%s" is not readable or does not exist.
      25050First argument to Text::Text() must be a string.
      25051Invalid direction specified for text.
      25052PANIC: Internal error in SuperScript::Stroke(). Unknown vertical alignment for text
      25053PANIC: Internal error in SuperScript::Stroke(). Unknown horizontal alignment for text
      25054Internal error: Unknown grid axis %s
      25055Axis::SetTickDirection() is deprecated. Use Axis::SetTickSide() instead
      25056SetTickLabelMargin() is deprecated. Use Axis::SetLabelMargin() instead.
      25057SetTextTicks() is deprecated. Use SetTextTickInterval() instead.
      25058Text label interval must be specified >= 1.
      25059SetLabelPos() is deprecated. Use Axis::SetLabelSide() instead.
      25060Unknown alignment specified for X-axis title. (%s)
      25061Unknown alignment specified for Y-axis title. (%s)
      25062Labels at an angle are not supported on Y-axis
      25063Ticks::SetPrecision() is deprecated. Use Ticks::SetLabelFormat() (or Ticks::SetFormatCallback()) instead
      25064Minor or major step size is 0. Check that you haven't got an accidental SetTextTicks(0) in your code. If this is not the case you might have stumbled upon a bug in JpGraph. Please report this and if possible include the data that caused the problem
      25065Tick positions must be specified as an array()
      25066When manually specifying tick positions and labels the number of labels must be the same as the number of specified ticks.
      25067Your manually specified scale and ticks is not correct. The scale seems to be too small to hold any of the specified tick marks.
      25068A plot has an illegal scale. This could for example be that you are trying to use text auto scaling to draw a line plot with only one point or that the plot area is too small. It could also be that no input data value is numeric (perhaps only '-' or 'x')
      25069Grace must be larger then 0
      25070Either X or Y data arrays contains non-numeric values. Check that the data is really specified as numeric data and not as strings. It is an error to specify data for example as '-2345.2' (using quotes).
      25071You have specified a min value with SetAutoMin() which is larger than the maximum value used for the scale. This is not possible.
      25072You have specified a max value with SetAutoMax() which is smaller than the minimum value used for the scale. This is not possible.
      25073Internal error. Integer scale algorithm comparison out of bound (r=%f)
      25074Internal error. The scale range is negative (%f) [for %s scale] This problem could potentially be caused by trying to use \"illegal\" values in the input data arrays (like trying to send in strings or only NULL values) which causes the auto scaling to fail.
      25075Can't automatically determine ticks since min==max.
      25077Adjustment factor for color must be > 0
      25078Unknown color: %s
      25079Unknown color specification: %s, size=%d
      25080Alpha parameter for color must be between 0.0 and 1.0
      25081Selected graphic format is either not supported or unknown [%s]
      25082Illegal sizes specified for width or height when creating an image, (width=%d, height=%d)
      25083Illegal image size when copying image. Size for copied to image is 1 pixel or less.
      25084Failed to create temporary GD canvas. Possible Out of memory problem.
      25085An image can not be created from the supplied string. It is either in a format not supported or the string is representing an corrupt image.
      25086You only seem to have GD 1.x installed. To enable Alphablending requires GD 2.x or higher. Please install GD or make sure the constant USE_GD2 is specified correctly to reflect your installation. By default it tries to auto detect what version of GD you have installed. On some very rare occasions it may falsely detect GD2 where only GD1 is installed. You must then set USE_GD2 to false.
      25087This PHP build has not been configured with TTF support. You need to recompile your PHP installation with FreeType support.
      25088You have a misconfigured GD font support. The call to imagefontwidth() fails.
      25089You have a misconfigured GD font support. The call to imagefontheight() fails.
      25090Unknown direction specified in call to StrokeBoxedText() [%s]
      25091Internal font does not support drawing text at arbitrary angle. Use TTF fonts instead.
      25092There is either a configuration problem with TrueType or a problem reading font file "%s" Make sure file exists and is in a readable place for the HTTP process. (If 'basedir' restriction is enabled in PHP then the font file must be located in the document root.). It might also be a wrongly installed FreeType library. Try upgrading to at least FreeType 2.1.13 and recompile GD with the correct setup so it can find the new FT library.
      25093Can not read font file "%s" in call to Image::GetBBoxTTF. Please make sure that you have set a font before calling this method and that the font is installed in the TTF directory.
      25094Direction for text most be given as an angle between 0 and 90.
      25095Unknown font font family specification.
      25096Can't allocate any more colors in palette image. Image has already allocated maximum of %d colors and the palette is now full. Change to a truecolor image instead
      25097Color specified as empty string in PushColor().
      25098Negative Color stack index. Unmatched call to PopColor()
      25099Parameters for brightness and Contrast out of range [-1,1]
      25100Problem with color palette and your GD setup. Please disable anti-aliasing or use GD2 with true-color. If you have GD2 library installed please make sure that you have set the USE_GD2 constant to true and truecolor is enabled.
      25101Illegal numeric argument to SetLineStyle(): (%d)
      25102Illegal string argument to SetLineStyle(): %s
      25103Illegal argument to SetLineStyle %s
      25104Unknown line style: %s
      25105NULL data specified for a filled polygon. Check that your data is not NULL.
      25106Image::FillToBorder : Can not allocate more colors
      25107Can't write to file "%s". Check that the process running PHP has enough permission.
      25108Can't stream image. This is most likely due to a faulty PHP/GD setup. Try to recompile PHP and use the built-in GD library that comes with PHP.
      25109Your PHP (and GD-lib) installation does not appear to support any known graphic formats. You need to first make sure GD is compiled as a module to PHP. If you also want to use JPEG images you must get the JPEG library. Please see the PHP docs for details.
      25110Your PHP installation does not support the chosen graphic format: %s
      25111Can't delete cached image %s. Permission problem?
      25112Cached imagefile (%s) has file date in the future.
      25113Can't delete cached image "%s". Permission problem?
      25114PHP has not enough permissions to write to the cache file "%s". Please make sure that the user running PHP has write permission for this file if you wan to use the cache system with JpGraph.
      25115Can't set permission for cached image "%s". Permission problem?
      25116Cant open file from cache "%s"
      25117Can't open cached image "%s" for reading.
      25118Can't create directory "%s". Make sure PHP has write permission to this directory.
      25119Can't set permissions for "%s". Permission problems?
      25120Position for legend must be given as percentage in range 0-1
      25121Empty input data array specified for plot. Must have at least one data point.
      25122Stroke() must be implemented by concrete subclass to class Plot
      25123You can't use a text X-scale with specified X-coords. Use a "int" or "lin" scale instead.
      25124The input data array must have consecutive values from position 0 and forward. The given y-array starts with empty values (NULL)
      25125Illegal direction for static line
      25126Can't create truecolor image. Check that the GD2 library is properly setup with PHP.
      25127The library has been configured for automatic encoding conversion of Japanese fonts. This requires that PHP has the mb_convert_encoding() function. Your PHP installation lacks this function (PHP needs the "--enable-mbstring" when compiled).
      25128The function imageantialias() is not available in your PHP installation. Use the GD version that comes with PHP and not the standalone version.
      25129Anti-alias can not be used with dashed lines. Please disable anti-alias or use solid lines.
      25130Too small plot area. (%d x %d). With the given image size and margins there is to little space left for the plot. Increase the plot size or reduce the margins.
      25131StrokeBoxedText2() only supports TTF fonts and not built-in bitmap fonts.
      25500Multibyte strings must be enabled in the PHP installation in order to run the LED module so that the function mb_strlen() is available. See PHP documentation for more information.
      26000PDF417: The PDF417 module requires that the PHP installation must support the function bcmod(). This is normally enabled at compile time. See documentation for more information.
      26001PDF417: Number of Columns must be >= 1 and <= 30
      26002PDF417: Error level must be between 0 and 8
      26003PDF417: Invalid format for input data to encode with PDF417
      26004PDF417: Can't encode given data with error level %d and %d columns since it results in too many symbols or more than 90 rows.
      26005PDF417: Can't open file "%s" for writing
      26006PDF417: Internal error. Data files for PDF417 cluster %d is corrupted.
      26007PDF417: Internal error. GetPattern: Illegal Code Value = %d (row=%d)
      26008PDF417: Internal error. Mode not found in mode list!! mode=%d
      26009PDF417: Encode error: Illegal character. Can't encode character with ASCII code=%d
      26010PDF417: Internal error: No input data in decode.
      26011PDF417: Encoding error. Can't use numeric encoding on non-numeric data.
      26012PDF417: Internal error. No input data to decode for Binary compressor.
      26013PDF417: Internal error. Checksum error. Coefficient tables corrupted.
      26014PDF417: Internal error. No data to calculate codewords on.
      26015PDF417: Internal error. State transition table entry 0 is NULL. Entry 1 = (%s)
      26016PDF417: Internal error: Unrecognized state transition mode in decode.
      27001GTextTable: Invalid argument to Set(). Array argument must be 2 dimensional
      27002GTextTable: Invalid argument to Set()
      27003GTextTable: Wrong number of arguments to GTextTable::SetColor()
      27004GTextTable: Specified cell range to be merged is not valid.
      27005GTextTable: Cannot merge already merged cells in the range: (%d,%d) to (%d,%d)
      27006GTextTable: Column argument = %d is outside specified table size.
      27007GTextTable: Row argument = %d is outside specified table size.
      27008GTextTable: Column and row size arrays must match the dimensions of the table
      27009GTextTable: Number of table columns or rows are 0. Make sure Init() or Set() is called.
      27010GTextTable: No alignment specified in call to SetAlign()
      27011GTextTable: Unknown alignment specified in SetAlign(). Horizontal=%s, Vertical=%s
      27012GTextTable: Internal error. Invalid alignment specified =%s
      27013GTextTable: Argument to FormatNumber() must be a string.
      27014GTextTable: Table is not initilaized with either a call to Set() or Init()
      27015GTextTable: Cell image constrain type must be TIMG_WIDTH or TIMG_HEIGHT
      28001Third argument to Contour must be an array of colors.
      28002Number of colors must equal the number of isobar lines specified
      28003ContourPlot Internal Error: isobarHCrossing: Coloumn index too large (%d)
      28004ContourPlot Internal Error: isobarHCrossing: Row index too large (%d)
      28005ContourPlot Internal Error: isobarVCrossing: Row index too large (%d)
      28006ContourPlot Internal Error: isobarVCrossing: Col index too large (%d)
      28007ContourPlot interpolation factor is too large (>5)
      29201Min range value must be less or equal to max range value for colormaps
      29202The distance between min and max value is too small for numerical precision
      29203Number of color quantification level must be at least %d
      29204Number of colors (%d) is invalid for this colormap. It must be a number that can be written as: %d + k*%d
      29205Colormap specification out of range. Must be an integer in range [0,%d]
      29206Invalid object added to MatrixGraph
      29207Empty input data specified for MatrixPlot
      29208Unknown side specifiction for matrix labels "%s"
      29209CSIM Target matrix must be the same size as the data matrix (csim=%d x %d, data=%d x %d)
      29210CSIM Target for matrix labels does not match the number of labels (csim=%d, labels=%d)
      +


      + + + +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/aphs02.html b/Societes/ric/jpgraph/docs/chunkhtml/aphs02.html new file mode 100755 index 00000000..186adee1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/aphs02.html @@ -0,0 +1,203 @@ +QR 2D Barcode error messages

      QR 2D Barcode error messages

      + +

      +

      Note

      +

      These error messages are not yet localized

      +

      +

      +

      +

      Table H.2. English error messages

      + +
      Error code Error message
      + 1000 + Tilde processing is not yet supported for QR + Barcodes.
      + 1001 + Inverting the bit pattern is not supported + for QR Barcodes.
      + 1002 + Cannot read data from file %s
      + 1003 + Cannot open file %s
      + 1004 + Cannot write QR barcode to file %s
      + 1005 + Unsupported image format selected. Check + your GD installation
      + 1006 + Cannot set the selected barcode colors. + Check your GD installation and spelling of color + name
      + 1007 + +

      + JpGraph Error: HTTP headers have + already been sent. +

      +

      Caused by output from file %s at line %d.

      +

      Explanation: HTTP headers have already been sent back + to the browser indicating the data as text before the + library got a chance to send it's image HTTP header to + this browser.

      +

      This makes it impossible for the library to send back + image data to the browser (since that would be + interpreted as text by the browser and show up as junk + text). Most likely you have some text in your script + before the call to Graph::Stroke(). If this texts gets + sent back to the browser the browser will assume that + all data is plain text. Look for any text, even spaces + and newlines, that might have been sent back to the + browser. For example it is a common mistake to leave a + blank line before the opening

      +
      + 1008 + Could not create the barcode image with + image format=%s. Check your GD/PHP installation.
      + 1009 + Cannot open log file %s for writing.
      + 1010 + Cannot write log info to log file + %s.
      + 1100 + Internal error: Illegal mask pattern + selected
      + 1101 + Internal error: Trying to apply masking to + functional pattern.
      + 1102 + Internal error: applyMaskAndEval(): Found + uninitialized module in matrix when applying mask + pattern.
      + 1200 + Internal error: Was expecting %d bits in + version %d to be placed in matrix but got %d bits
      + 1201 + Internal error: Trying to position bit + outside the matrix x=%d, y=%d, size=%d, bIdx=%d
      + 1202 + Internal error: Trying to put data in + initialized bit.
      + 1203 + Internal error: Mask number for format bits + is invalid. (maskidx=%d)
      + 1204 + Internal error: Found an uninitialized bit + [val=%d] at (%d,%d) when flattening matrix
      + 1300 + Internal error: QRCapacity::getFormatBits() + Was expecting a format in range [0,31] got %d
      + 1301 + Internal error: QRCapacity::getVersionBits() + Was expecting a version in range [7,40] got %d
      + 1302 + Internal error: QRCapacity::_chkVerErr() Was + expecting version in range [1,40] and error level in range + [0,3] got (%d,%d)
      + 1303 + Internal error: + QRCapacity::getAlignmentPositions() Expected %d patterns but + found %d patterns (len=%d).
      + 1304 + Internal error: QRCapacity::%s Was expecting + a version in range [1,40] got %d
      + 1400 + QR Version must be specified as a value in + the range [1,40] got %d
      + 1401 + Input data to barcode can not be + empty.
      + 1402 + Automatic encodation mode was specified but + input data looks like specification for manual + encodation.
      + 1403 + Was expecting an array of arrays as input + data for manual encoding.
      + 1404 + Each input data array element must consist + of two entries. Element $i has of $nn entries
      + 1405 + Each input data array element must consist + of two entries with first entry being the encodation + constant and the second element the data string. Element %d + is incorrect in this respect.
      + 1406 + Was expecting either a string or an array as + input data
      + 1407 + Manual encodation mode was specified but + input data looks like specification for automatic + encodation.
      + 1408 + Input data too large to fit into one QR + Symbol
      + 1409 + The selected symbol version %d is too small + to fit the specified data and selected error correction + level.
      + 1410 + Trying to read past the last available + codeword in block split.
      + 1411 + Internal error: Expected 1 or 2 as the + number of block structures.
      + 1412 + Internal error: Too many codewords for + chosen symbol version. (negative number of pad + codewords).
      + 1413 + Internal error: splitInBytes: Expected an + even number of 8-bit blocks.
      + 1414 + Internal error: getCountBits() illegal + version number (=%d).
      + 1415 + Manually specified encodation schema + MODE_NUMERIC has no data that can be encoded using this + schema.
      + 1416 + Manually specified encodation schema + MODE_ALPHANUM has no data that can be encoded using this + schema.
      + 1417 + Manually specified encodation schema + MODE_BYTE has no data that can be encoded using this + schema.
      + 1418 + Unsupported encodation schema specified + (%d)
      + 1419 + Found character in data stream that cannot + be encoded with the selected manual encodation mode.
      + 1420 + Encodation using KANJI mode not yet + supported.
      + 1421 + Internal error: Unsupported encodation mode + doAuto().
      + 1422 + Found unknown characters in the data stream + that can't be encoded with any available encodation + mode.
      + 1423 + Kanji character set not yet + supported.
      + 1424 + Internal error: DataStorage:: Unsupported + character mode (%d) DataStorage::Remaining()
      + 1425 + Internal error: DataStorage:: Trying to + extract slice of len=%d (with type=%d) when there are only + %d elements left
      + 1426 + Internal error: DataStorage:: Trying to read + past input data length.
      + 1427 + Expected either DIGIT, ALNUM or BYTE but + found ASCII code=%d
      + 1428 + Internal error: DataStorage::Peek() Trying + to peek past input data length.
      +


      +

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/aphs03.html b/Societes/ric/jpgraph/docs/chunkhtml/aphs03.html new file mode 100755 index 00000000..e993678f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/aphs03.html @@ -0,0 +1,121 @@ +Datamatrix 2D barcode error messages

      Datamatrix 2D barcode error messages

      + +

      +

      Note

      +

      These error messages are not yet localized

      +

      +

      +

      +

      Table H.3. English error messages

      + +
      Error code Error message
      + 1 + Data is too long to fit specified symbol + size
      + 2 + The BASE256 data is too long to fit + available symbol size
      + 3 + Data must have at least three characters for + C40 encodation
      + 4 + Data must have at least three characters for + TEXT encodation
      + 5 + Internal error: (-5) Trying to read source + data past the end
      + 6 + Internal error: (-6) Trying to look ahead in + data past the end
      + 7 + Internal error: (-7) Logic error in TEXT/C40 + encodation (impossible branch)
      + 8 + The given data can not be encoded using X12 + encodation.
      + 9 + The "tilde" encoded data is not + valid.
      + 10 + Data must have at least three characters for + X12 encodation
      + 11 + Specified data can not be encoded with + datamatrix 000 140
      + 12 + Can not create image
      + 13 + Invalid color specification
      + 14 + Internal error: (-14) Index for 140 bit + placement matrix out of bounds
      + 15 + This PHP installation does not support the + chosen image encoding format
      + 16 + Internal error: (-16) Cannot instantiate + ReedSolomon
      + 20 + The specification for shape of matrix is out + of bounds (0,29)
      + 21 + Cannot open the data file specifying bit + placement for Datamatrix 200
      + 22 + Datafile for bit placement is corrupt, crc + checks fails.
      + 23 + Internal error: (-23) Output matrice is not + big enough for mapping matrice
      + 24 + Internal error: (-24) Bit sequence to be + placed is too short for the chosen output matrice
      + 25 + Internal error: (-25) Shape index out of + bounds for bit placement
      + 26 + Cannot open the data file specifying bit + placement for Datamatrix 140
      + 30 + The symbol size specified for ECC140 type + Datamatrix is not valid
      + 31 + Data is to long to fit into any available + matrice size for datamatrix 140
      + 32 + Internal error: (-32) Cannot instantiate + MasterRandom
      + 33 + Internal error: (-33) Failed to randomize + 140 bit stream
      + 34 + Cannot open file %s for writing
      + 35 + Cannot write to file %s
      + 99 + EDIFACT encodation not implemented
      + 100 + +

      + JpGraph Error: HTTP headers have + already been sent. +

      +

      Caused by output from file %s at line %d.

      +

      Explanation: HTTP headers have already been sent back + to the browser indicating the data as text before the + library got a chance to send it's image HTTP header to + this browser.

      +

      This makes it impossible for the library to send back + image data to the browser (since that would be + interpreted as text by the browser and show up as junk + text). Most likely you have some text in your script + before the call to Graph::Stroke(). If this texts gets + sent back to the browser the browser will assume that + all data is plain text. Look for any text, even spaces + and newlines, that might have been sent back to the + browser. For example it is a common mistake to leave a + blank line before the opening

      +
      +


      +

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/api.html b/Societes/ric/jpgraph/docs/chunkhtml/api.html new file mode 100755 index 00000000..2717532c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/api.html @@ -0,0 +1,126 @@ +Appendix I. Compiling PHP

      Appendix I. Compiling PHP

      + +

      Usually the included PHP version is adequate but if problems persists it is a good idea to + be able to compile PHP yourself. This way you will also be able to more quickly upgrade to + newer version of PHP which might have fix for a particular nasty bug that may have crept + in.

      +

      In the following sections we give examples of Unix shell scripts that will show typical + compile configuration for a downloaded PHP distribution. These compile configuration scripts + will make both the GD and FreeType libraries included in the executable.

      +

      In order to compile your downloaded PHP distribution first copy and save these scripts to + a local file and make that file runnable. Then run one of the selected configurations below + and do a normal "make".

      +

      Tip

      +

      When running make you can speed up the compilation by telling make to use + a number of parallel compile processes. Since most modern system have at least two cores + a typical invocation of make would be to make use of three parallel compile time + processes. This is done by using the -j argument. For example as +

      make -j3
      +
      +

      It is possible to compile PHP into (at least) three variants

      +
      1. +

        as a command line tool

        +
      2. +

        as a Apache extension module (this is probably the most common variant)

        +
      3. +

        as a CGI module to be used by a HTTP server (this is slower than running PHP + as a module since it needs to be read from disk and the process created every + time a PHP script needs to be executed.)

        +

      There is one crucial difference of importance when using PHP to generate + images. Both the CGI module and the client variant are both standalone executables so what + is the difference? The crucial difference is that the CGI module will by default output a + MIME header before it outputs data while the client version will not.

      +

      The following sections have one compile script for each of the three major + versions.

      +

      Caution

      +

      You should make sure that the proposed directory paths in the scripts match your + particular server setup as this can vary from system to system.

      +
      +

      Compiling PHP4

      + +

      Client version

      + +
      #! /bin/sh
      +./configure --prefix=/usr/share --datadir=/usr/share/php \
      +--libdir=/usr/share/php --includedir=/usr/include \
      +--bindir=/usr/bin \
      +--with-config-file-path=/etc/php4/cli \
      +--with-config-file-scan-dir=/etc/php4/cli \
      +--enable-mbstring --enable-mbregex \
      +--with-mysql  \
      +--with-gd --enable-gd-imgstrttf --enable-gd-native-ttf \
      +--with-zlib-dir=/usr/lib \
      +--with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib --with-xpm-dir=/usr/X11R6 \
      +--with-tiff-dir=/usr/lib --with-ttf-dir=/usr/lib \
      +--with-freetype-dir=/usr/lib \
      +--enable-ftp \
      +--enable-memory-limit \
      +--enable-bcmath -enable-calendar \
      +--enable-ctype --with-ftp \
      +--enable-magic-quotes \
      +--enable-inline-optimization \
      +--with-bz2 \
      +--with-iconv
      +
      +
      +
      +

      Apache module

      + +
      #! /bin/sh
      +./configure --prefix=/usr/share --datadir=/usr/share/php --with-apxs2=/usr/sbin/apxs2 \
      +--libdir=/usr/share --includedir=/usr/include \
      +--bindir=/usr/bin \
      +--with-config-file-path=/etc/php4/apache2 \
      +--enable-mbstring --enable-mbregex \
      +--with-mysql  \
      +--with-gd --enable-gd-imgstrttf --enable-gd-native-ttf \
      +--with-zlib-dir=/usr/lib \
      +--with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib --with-xpm-dir=/usr/X11R6 \
      +--with-tiff-dir=/usr/lib --with-ttf-dir=/usr/lib \
      +--with-freetype-dir=/usr/lib \
      +--enable-ftp \
      +--enable-memory-limit \
      +--bindir=/usr/bin \
      +--enable-bcmath \
      +--enable-calendar \
      +--enable-ctype \
      +--with-ftp \
      +--enable-magic-quotes \
      +--enable-inline-optimization \
      +--with-bz2 \
      +--with-iconv
      +
      +
      +
      +

      CGI extension

      + +
      #! /bin/sh
      +./configure --prefix=/usr/share --datadir=/usr/share/php \
      +--libdir=/usr/share --includedir=/usr/include \
      +--bindir=/usr/bin \
      +--with-config-file-path=/etc/php4/apache2 \
      +--with-config-file-scan=/etc/php4/apache2 \
      +--enable-mbstring --enable-mbregex \
      +--with-mysql  \
      +--with-gd --enable-gd-imgstrttf --enable-gd-native-ttf \
      +--with-zlib-dir=/usr/lib \
      +--with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib --with-xpm-dir=/usr/X11R6 \
      +--with-tiff-dir=/usr/lib --with-ttf-dir=/usr/lib \
      +--with-freetype-dir=/usr/lib \
      +--enable-ftp \
      +--enable-memory-limit \
      +--bindir=/usr/bin \
      +--enable-bcmath \
      +--enable-calendar \
      +--enable-ctype \
      +--with-ftp \
      +--enable-magic-quotes \
      +--enable-inline-optimization \
      +--with-bz2 \
      +--with-iconv
      +
      +
      +
      +
      + +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apis02.html b/Societes/ric/jpgraph/docs/chunkhtml/apis02.html new file mode 100755 index 00000000..334c152a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apis02.html @@ -0,0 +1,98 @@ +Compiling PHP5

      Compiling PHP5

      + +

      Client version

      + +
      #! /bin/sh
      +# mkphp5-cli
      +# Build a command line version of PHP5
      +./configure \
      +--prefix=/usr/share/php5 \
      +--datadir=/usr/share/php5 \
      +--libdir=/usr/share/php5 \
      +--includedir=/usr/include/php5 \
      +--enable-force-cgi-redirect \
      +--bindir=/usr/bin \
      +--with-config-file-path=/etc/php5/cli \
      +--with-config-file-scan-dir=/etc/php5/cli \
      +--enable-mbstring --enable-mbregex \
      +--with-mysql  \
      +--with-gd --enable-gd-imgstrttf --enable-gd-native-ttf \
      +--with-zlib-dir=/usr/lib \
      +--with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib --with-xpm-dir=/usr/X11R6 \
      +--with-tiff-dir=/usr/lib --with-ttf-dir=/usr/lib \
      +--with-freetype-dir=/usr/lib \
      +--enable-ftp \
      +--enable-memory-limit \ 
      +--enable-safe-mode \
      +--enable-bcmath -enable-calendar \
      +--enable-ctype \
      +--with-ftp \
      +--enable-magic-quotes \
      +--enable-inline-optimization \
      +--enable-tokenizer \
      +--with-bz2 \
      +--with-iconv \
      +--with-pear=/usr/share/php5
      +
      +
      +
      +

      Apache module

      + +
      #! /bin/sh
      +# mkphp5-sapi
      +# Build a SAPI (Apache module) version of PHP5
      +./configure --prefix=/usr/share \
      +--datadir=/usr/share/php --with-apxs2=/usr/sbin/apxs2 \
      +--libdir=/usr/share --includedir=/usr/include \
      +--bindir=/usr/bin \
      +--with-config-file-path=/etc/php5/apache2 \
      +--enable-mbstring --enable-mbregex \
      +--with-mysql  \
      +--with-gd --enable-gd-imgstrttf --enable-gd-native-ttf \
      +--with-zlib-dir=/usr/lib \
      +--with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib --with-xpm-dir=/usr/X11R6 \
      +--with-tiff-dir=/usr/lib --with-ttf-dir=/usr/lib \
      +--with-freetype-dir=/usr/lib \
      +--enable-ftp \
      +--enable-memory-limit --enable-safe-mode \
      +--bindir=/usr/bin \
      +--enable-bcmath -enable-calendar \
      +--enable-ctype --with-ftp \
      +--enable-magic-quotes \
      +--enable-inline-optimization \
      +--with-bz2 \
      +--with-iconv
      +
      +!#
      +
      +

      CGI extension

      + +
      #! /bin/sh
      +# mkphp5-cgi
      +# Build a CGI version of PHP5
      +./configure --prefix=/usr/share \
      +--datadir=/usr/share/php \
      +--libdir=/usr/share --includedir=/usr/include \
      +--enable-force-cgi-redirect \
      +--bindir=/usr/bin \
      +--with-config-file-path=/etc/php5/apache2 \
      +--enable-mbstring --enable-mbregex \
      +--with-mysql  \
      +--with-gd --enable-gd-native-ttf \
      +--with-zlib-dir=/usr/lib \
      +--with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib --with-xpm-dir=/usr/X11R6 \
      +--with-freetype-dir=/usr/lib \
      +--enable-ftp \
      +--enable-safe-mode \
      +--bindir=/usr/bin \
      +--enable-bcmath -enable-calendar \
      +--enable-ctype \
      +--enable-magic-quotes \
      +--enable-inline-optimization \
      +--enable-tokenizer \
      +--with-bz2 \
      +--with-iconv
      +
      +
      +
      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apj.html b/Societes/ric/jpgraph/docs/chunkhtml/apj.html new file mode 100755 index 00000000..76f397a3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apj.html @@ -0,0 +1,86 @@ +Appendix J. Setting up PHP5 in parallel with PHP4 in SuSE 10.1

      Appendix J. Setting up PHP5 in parallel with PHP4 in SuSE 10.1

      + +

      Even though PHP4 is officially deprecated and is no longer actively maintained a large + number of existing installations are stiil (and will be) using PHP4. For this reason it can + be important to be able to test scripts running both PHP4 and PHP5. This section shows how + to do this on Linux SuSE 10.1 installation. Other Linux dialects can use similar but not + identical setups.

      +

      SuSE 10.1 ships with Apache2 and PHP5 as standard. In order to install PHP4 in parallel + some extra work is therefore required. This chapter explains how to setup both PHP4 and PHP5 + on the same server by configuring Apache2 using virtual hosts.

      +

      We will show how to maintain a simultaneous installation of both PHP4 and PHP5 at the same + time without the need to run a switching script to select which PHP version to activate. In + this setup we have opted to configure Apache with two virtual hosts based on IP-address, one + host running PHP4 as a SAPI module and the other virtual host running PHP5 as a CGI + module.

      +

      Configuration files and directories for Apache2 in SuSE 10.1

      + +

      Before we start we give a short overview of where important configuration files and + directories for Apache2 are located in SuSE

      +

      +

      Note

      +

      The configuration files setup by SuSE is slightly different from the standard + one-single "/etc/httpd.conf" used by other systems. The way SuSE does it is to + create a hierarchy of setup files under "/etc/apache2/". While this might look + complicated at first sight it has several advantages specially when You consider + that some script have to modify and add configurations to Apache2. Doing + automatic (and safe) edits in a large config file that can also be manually + edited is almost impossible to guarantee.

      +

      +

      +

      +

      Dir: /etc/apache2/
      +

      General configuration directory for Apache2, this is where the + "httpd.conf" lives.

      +
      Dir: /etc/apache2/conf.d/
      +

      Module configuration files for loaded modules, for example php4.conf. + All the configuration files in this directory will be automatically read + by the main httpd.conf by means of an + "include conf.d/*.conf" command so the exact name + doesn't really matter as long as the file ends in "*.conf". +

      +
      Dir: /etc/apache2/vhosts.d/
      +

      Virtual host configuration files. All files in this directory will be + automatically read by the main httpd.conf the exact + name doesn't really matter as long as the file ends in + "*.conf". Note: When yast2 is used to edit + virtual hosts it will add its "yast2_*.conf" in + this directory. Unfortunately the virtual host configuration in yast2 in + not without problem (bugs) for IP based virtual hosts so we prefer to + create the configuration files manually. This will be shown later on in + this article.

      +
      File: /etc/sysconfig/apache2
      +

      This is the main Apache2 configuration file. This file is the one that + is really used to configure apache when it is started. This is also the + file that the "Yast2" HTTPD-module edits.

      +

      From our point of view the most important thing is that this is the + place where we tell Apache2 what external modules to load.

      +

      In the SuSE configuration this is done by listing all the modules in + the string variable APACHE_MODULES. In the SuSE + configuration there are no static "AddModule" directives in any of the + configuration files for Apache. Instead this is dynamically generated + each time apache is started (for example by /etc/init.d/apache2 start)

      +

      The generation of the actual module file names is quite clever in that + the script looks at the core module name in the + APACHE_MODULE variable and automatically determines the + name of the file name of the load modules. This means that for PHP we + only have to give the name "php4" or "php5" as the name of the module.

      +

      The script will then discover that the name of the file load module is + in fact "libphp4.so" or + "libphp5.so" automatically. The dynamically + created list of load modules will be written to + "/etc/apache2/sysconfig/loadmodule.conf" just + before the startup script activates apache2 daemon which will then read + the modules from this file which is included from the main + "httpd.conf" file.

      +

      +

      +
      + + + + + + + +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apjs02.html b/Societes/ric/jpgraph/docs/chunkhtml/apjs02.html new file mode 100755 index 00000000..c385024d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apjs02.html @@ -0,0 +1,21 @@ +Making sure you have the correct Apache2 setup

      Making sure you have the correct Apache2 setup

      + +

      PHP is only guaranteed to work with the Apache2 "Prefork MPM" + (Multi-Processing-Module) and you need to have apache2-prefork installed. This also + means that the APACHE_MPM in /etc/sysconfig/apache2 must NOT be set to "worker". You can + read more about the reasons for this issues in the Apache + Documentation : Thread Safety For general information about MPMs please see + Apache Documentation : + MPM +

      +

      If you use Yast2 to install Apache2 and the prefork module then all this will be + automatically setup. Before continuing please make sure that You have successfully + installed Apache2 on your server. For example by directing your favorite browser to + "http://localhost/"

      +

      +

      Note

      +

      There is no need to install the default SuSE PHP5 module since we must replace + that anyway with our own CGI version of PHP5.

      +

      +

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apjs03.html b/Societes/ric/jpgraph/docs/chunkhtml/apjs03.html new file mode 100755 index 00000000..e92bd66c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apjs03.html @@ -0,0 +1,40 @@ +Approaches to running multiple PHP versions

      Approaches to running multiple PHP versions

      + +

      There are two fundamental ways of running multiple versions of PHP on the same server.

      +

      +

      1. +

        Running multiple instances of the HTTPD demon where each instance listens + on separate addresses and/or ports.

        +

        Advantage: This is the only way to run + multiple versions of PHP as (SAPI) modules in Apache2. In addition this has + some better security since potential crashes will be isolated and not effect + the other HTTPD demons.

        +

        Drawback: Running multiple HTTPD + instances will need more system resources in terms of memory and file + handlers.

        +
      2. +

        Running one instance of the HTTPD demon which is configured to serve + multiple virtual hosts. This is the approach we have chosen.

        +

        Advantage: Minimum system overhead and + relatively easy to setup.

        +

        Drawback: Only one PHP version can be run + as a (SAPI) Apache module the other PHP versions must be + configured/installed as CGI modules. This has a slight performance impact + and might not be suitable for heavily loaded production sites. (Note: that + could be overcome with the use of fast-cgi which works by pre-loading an + instance of PHP in memory which will then be used by the Apache process. See + Apache2 documentation regarding fast-cgi for more details).

        +

        +

        Note

        +

        There are actually two versions of virtual hosts with apache. By + name pr by IP-address. In this example we have chosen to match the + virtual hosts by IP address since for a development server we want + to be able to use plain IP addresses and not have the added + complexity of setting up a full DNS server. For more details about + other differences please see the excellent Apache2 documentation. +

        +

        +

        +

      +

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apjs04.html b/Societes/ric/jpgraph/docs/chunkhtml/apjs04.html new file mode 100755 index 00000000..d27b9870 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apjs04.html @@ -0,0 +1,28 @@ +Outline of the remainder of the chapter

      Outline of the remainder of the chapter

      + +

      The approach we will use is to setup PHP4 as a (SAPI) Apache module on the default + server address and setup PHP5 as a CGI module on a virtual host.

      +

      +

      Part I - Installing PHP4 as a SAPI module in Apache.
      +

      Part 1 Installing PHP4 as a SAPI module in Apache. This sections + details how to configure and compile PHP4 as a SAPI module and then do + the necessary Apache configuration modifications to enable this new + module. By the end of this section we will have the ability to run PHP4 + scripts on our server.

      +
      Part II - Creating a virtual host
      +

      By assigning an alias IP-address on the server we can configure Apache + with a virtual server based on this address. This new virtual server + will have its own "cgi-bin/" as well as "htdocs/" directories. This part + shows how to enable this by adding suitable configurations in Apache. By + the end of this section our server will accept HTTP calls on a secondary + IP-Address and use the specified document root for this new IP-address. +

      +
      Part III - Installing PHP5 as a CGI module on the virtual host.
      +

      This final part shows how to configure and compile PHP5 as a CGI + module that we then make available for the newly created virtual host in + part 2. By the end of this module we will have PHP4 running on the + default server address and PHP5 running on the secondary virtual host. +

      +

      +

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apjs05.html b/Societes/ric/jpgraph/docs/chunkhtml/apjs05.html new file mode 100755 index 00000000..f8b36e70 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apjs05.html @@ -0,0 +1,219 @@ +Part I - Installing PHP4

      Part I - Installing PHP4

      + +

      Step one; Compiling PHP4 as a module for Apache2

      + +

      First download the latest PHP4 tar-ball from php.net or the closest mirror and + unpack it in a temporary directory.

      +

      Since we will compile PHP4 ourself we need first to make sure a number of + libraries and the corresponding header files are installed in the system in order to + be able to compile PHP4. This is done by installing a number of "*-devel.rpm" on + your server. Depending your wanted configuration different development libraries + must be made available.

      +

      At the very minimum you will need the "apache2-devel.rpm" which provides the + "/sbin/apxs2" (Apache eXtenSion 2) command used to build modules with Apache2. Other + modules you might need are

      +

      +

      • +

        jpeg-devel.rpm

        +
      • +

        png-devel.rpm

        +
      • +

        mm-devel.rpm

        +
      • +

        xml2-devel.rpm

        +
      • +

        mysql-devel.rpm

        +
      • +

        ...

        +

      +

      +

      Before you compile PHP4 you need to configure it by running the "./configure" + command with the options you want to be included in PHP4.

      +

      We use a small shell script called "mkphp4-sapi" to avoid having to re-type all + the options each time we compile a new version of PHP. The options we use for a + typical development server are (you might want to use other options)

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +
      #! /bin/sh
      +./configure --prefix=/usr/share \
      +--datadir=/usr/share/php4 \
      +--with-apxs2=/usr/sbin/apxs2 \
      +--libdir=/usr/share \
      +--includedir=/usr/include \
      +--bindir=/usr/bin \
      +--with-config-file-path=/etc/php4/apache2 \
      +--enable-mbstring --enable-mbregex \
      +--with-mysql  \
      +--with-gd --enable-gd-imgstrttf --enable-gd-native-ttf \
      +--with-zlib-dir=/usr/lib \
      +--with-png-dir=/usr/lib \
      +--with-jpeg-dir=/usr/lib --with-xpm-dir=/usr/X11R6 \
      +--with-tiff-dir=/usr/lib --with-ttf-dir=/usr/lib \
      +--with-freetype-dir=/usr/lib \
      +--enable-ftp \
      +--enable-memory-limit --enable-safe-mode \
      +--bindir=/usr/bin \
      +--enable-bcmath -enable-calendar \
      +--enable-ctype --with-ftp \
      +--enable-magic-quotes \
      +--enable-inline-optimization \
      +--with-bz2 \
      +--with-iconv

      +

      +

      However there are one thing You should take notice of. We have specified the + config file path (where the php.ini resides) to "/etc/php4/apache2/" as You can + probably guess from this naming convention it will make it possible to have + different ini files for both PHP4 and PHP5. In fact we have four different ini files + according to

      +

      +

      1. +

        "/etc/php4/apache2/php.ini" Used by the apache + SAPI module version of PHP4

        +
      2. +

        "/etc/php4/cli/php.ini" Used by the standalone + client version of PHP4 (/usr/bin/php4)

        +
      3. +

        "/etc/php5/apache2/php.ini" Used by the apache + CGI version of PHP5

        +
      4. +

        "/etc/php5/cli/php.ini" Used by the standalone + client version of PHP5 (/usr/bin/php5)

        +

      +

      +

      When you run this you might get some errors saying that the configuration file + cannot find some library. This is a sign that you might have the library installed + but not yet have the "*-devel" RPM version added to your system which is needed + since this is where all the usual header files needed for compilation would be.

      +

      So for example if you get an error like "Cannot find PNG libraries. Please check + your that the corresponding "png-devel" library is installed and if not go back to + Yast2 and install the needed "*-devel.rpm" versions of the libraries.

      +

      When You have been able to successfully run the ./configuration command it is time + to compile. Type "make" as usual but do not type "make install", now wait until the + compilation finishes.

      +

      +

      Note

      +

      If you are on a Pentium4 HT or on a real dual CPU machine you can speed up + the compilation by instead giving the "make -j3" command which will start up + 3 concurrent compilation processes.

      +

      +

      +

      Again; Do not run "make install" since this will try to modify the + configuration files in a way that isn't SuSE friendly.

      +

      The resulting PHP4 that you have built can be found in + ".libs/libphp4.so". Now we only want to copy this file to + the location of the other Apache2 modules.

      +

      +

      Note

      +

      Again, PHP is only guaranteed to work with the non-threaded version of + Apache2, which means that you should have installed the "apache2-prefork" + MPM and NOT the "apache2-worker" MPM.

      +

      +

      +

      If you have correctly installed the prefork MPM several existing modules should + now be installed in "/usr/lib/apache2-prefork/".

      +

      So the only thing that now remains is to copy + ".libs/libphp4.so" to + "/usr/apache2-prefork/" in order for Apache to find PHP4 as + a module.

      +
      +

      Step two; Enable the PHP4 module in the Apache2 configuration

      + +

      There are three steps to needed to enable PHP4 in Apache.

      +

      +

      1. +

        Add php4 to the APACHE_MODULE string in "/etc/sysconfig/apache2" in + order so that the startup script in SuSE will add the appropriate + LoadModule statement so that Apache will load PHP4 as a module. In our + case our module string will look like

        +

        +

        1
        +2
        +3
        +
        APACHE_MODULES="access actions alias auth auth_dbm autoindex cgi \
        +dir env expires include log_config mime negotiation setenvif ssl \
        +suexec userdir dav dav_svn php4 "

        +

        +
      2. +

        Telling Apache to run files ending in *.php through the PHP4 module. + This is done by specifying the MIME type which the PHP4 module + registered itself with. In addition we also tell Apache to search for + the appropriate PHP index files in case a directory name is given as the + URL. We do this by creating a file "php4.conf" with + the following content

        +

        +

        1
        +2
        +3
        +4
        +5
        +6
        +7
        +8
        +9
        +10
        +11
        +
        <IfModule sapi_apache2.c>
        +   AddType application/x-httpd-php .php3
        +   AddType application/x-httpd-php .php4
        +   AddType application/x-httpd-php .php
        +   AddType application/x-httpd-php-source .php3s
        +   AddType application/x-httpd-php-source .php4s
        +   AddType application/x-httpd-php-source .phps
        +   DirectoryIndex index.php3
        +   DirectoryIndex index.php4
        +   DirectoryIndex index.php
        +</IfModule>

        +

        +

        and place it in the "/etc/apache2/conf.d/" + directory. This will guarantee that it will be read upon startup. The + "IfModule" statement in the beginning is just to avoid + the statements to be executed in case the PHP4 module is not loaded (we + test this by checking if the "sapi_apache2.c" has been + activated in Apache).

        +
      3. +

        The final step now is to restart Apache by doing (as root)

        +

        +

        1
        +
        $> /etc/init.d/apache2 restart

        +

        +

      +

      +

      In order to verify that PHP has been enabled run a standard PHP script; for + example by copying the following script to "/srv/www/htdocs/"

      +

      +

      1
      +2
      +3
      +
      <?php 
      +phpinfo(); 
      +?>

      +

      +

      and name it as "phpinfo.php" . If you now go to your favorite + browser and run this script as "http://localhost/phpinfo.php" you should get the + standard PHP4 information presented as a quite big table.

      +
      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apjs06.html b/Societes/ric/jpgraph/docs/chunkhtml/apjs06.html new file mode 100755 index 00000000..53139e7c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apjs06.html @@ -0,0 +1,107 @@ +Part II - Creating a virtual host

      Part II - Creating a virtual host

      + +

      Step 1; Adding an alias IP-address to Your server

      + +

      In this example we will assume that the server is called "gamma" and have the + primary address "192.168.0.50". The virtual host will be called "gamma2" and will be + located at address "192.168.0.51". The easiest way to add another address alias is + to use yast2 and the network configuration module and simple add a new alias. +

      +
      +

      Step 2; Creating different document and cgi roots

      + +

      In preparation of the new virtual host we want it to have a separate document and + cgi (where we will store the PHP5 binary) roots compared with the standard server. + For this purpose we add two new directories "/srv/www/gamm2-htdocs/" and + "/srv/www/gamma2-cgi-bin/" on the server.

      +
      +

      Step 3; Configure Apache with a virtual host

      + +

      For his we add a new small config file named "gamma2_vhost.conf" (the exact name + is not important as long as it ends in *.conf) in the "/etc/apache2/vhosts.d/" + directory. The script we add is

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +27
      +28
      +29
      +30
      +31
      +32
      +33
      +34
      +35
      +36
      +
      # Setup gamma2 on secondary IP-address
      +<VirtualHost 192.168.0.51>
      + 
      + DocumentRoot /srv/www/gamma2-htdocs/
      + ServerName gamma2
      + ServerAdmin root@localhost
      + 
      + # We use a separate CGI directory
      + ScriptAlias /cgi-bin/ /srv/www/gamma2-cgi-bin/
      + 
      + # For good measure we also add recognition of PHP5 index
      + DirectoryIndex index.php5
      + 
      + # This is the two critical statement for this virtual
      + # host we activate PHP5 as a CGI module
      + Action php5-cgi /cgi-bin/php
      + AddHandler php5-cgi .php5 .php
      + 
      + <Directory /srv/www/gamma2-cgi-bin/>
      +  AllowOverride None
      +  Options +ExecCGI -Includes
      +  Order allow,deny
      +  Allow from all
      + </Directory>
      + 
      + <Directory "/srv/www/gamma2-htdocs/">
      +  Options None
      +  AllowOverride None
      +  Order allow,deny
      +  Allow from all
      +  DirectoryIndex index.html index.php
      + </Directory>
      + 
      + UserDir public_html
      + 
      +</VirtualHost>

      +

      +

      We do not go into any more detail of this configuration since it should be fairly + easy to understand. For details we refer to the Apache documentation.

      +

      What we have accomplished with this file is that when we call the server on the + second address any php file will be recognized by apache as a file to be handled by + the "php5-cgi" action. This in turn means that whenever Apache encounters a *.php5 + (or *.php) file it will run the program "/cgi-bin/php". This path in turn will be + expanded to " /srv/www/gamma2-cgi-bin/php".

      +

      In the next section we will show how to compile PHP5 and put the executable CGI + version in this directory.

      +
      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apjs07.html b/Societes/ric/jpgraph/docs/chunkhtml/apjs07.html new file mode 100755 index 00000000..08391c76 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apjs07.html @@ -0,0 +1,65 @@ +Part III - Installing PHP5

      Part III - Installing PHP5

      + +

      We are now ready for the last step which means compiling PHP5 as a CGI module for + Apache. This follows the same principle as the compilation for PHP4 as described above. + Again, we use a small configuration script "mkphp5-cgi" which is + shown below.

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +
      #! /bin/sh
      +./configure --prefix=/usr/share \
      +--datadir=/usr/share/php \
      +--libdir=/usr/share --includedir=/usr/include \
      +--enable-force-cgi-redirect \
      +--bindir=/usr/bin \
      +--with-config-file-path=/etc/php5/apache2 \
      +--enable-mbstring --enable-mbregex \
      +--with-mysql  \
      +--with-gd --enable-gd-imgstrttf --enable-gd-native-ttf \
      +--with-zlib-dir=/usr/lib \
      +--with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib \
      +--with-xpm-dir=/usr/X11R6 \
      +--with-tiff-dir=/usr/lib --with-ttf-dir=/usr/lib \
      +--with-freetype-dir=/usr/lib \
      +--enable-ftp \
      +--enable-memory-limit --enable-safe-mode \
      +--bindir=/usr/bin \
      +--enable-bcmath -enable-calendar \
      +--enable-ctype --with-ftp \
      +--enable-magic-quotes \
      +--enable-inline-optimization \
      +--with-bz2 \
      +--with-iconv

      +

      +

      Notice that as we said before we have a different configuration path for PHP5 compared + with PHP4 as shown above. Also note that in order to build the CGI module we do not + configure the "apxs2" option. After successful configuration type + "make" but do not type "make install" in order + to compile PHP5.

      +

      After the compilation have finished copy "sapi/cgi/php" to + "/srv/www/gamma2-cgi-bin/php" since this is the place where our + virtual host expects to find the PHP5 CGI module.

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apjs08.html b/Societes/ric/jpgraph/docs/chunkhtml/apjs08.html new file mode 100755 index 00000000..a01c7771 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apjs08.html @@ -0,0 +1,66 @@ +Part IV - Verifying the setup

      Part IV - Verifying the setup

      + +

      The only small thing remaining, in case You haven't done so already, is to create + suitable "php.ini" scripts that are copied to the previous + specified PHP4 and PHP5 config file directories, + "/etc/php4/apache2/" and + "/etc/php5/apache2/".

      +

      +

      Note

      +

      It is recommended to enable all warnings and errors in each php.ini file + unless You have very, very good reasons not to do this. Use the default php.ini + files in the PHP distribution as the initial template. For use with JpGraph it + is recommended to do the following modifications:

      +

      +

      1. +

        Increase maximum allowed memory to 32MB

        +
      2. +

        Increase maximum allowed script running time to 30s

        +
      3. +

        Set full error reporting

        +

      +

      +

      +

      +

      Assuming the IP-addresses shown in the configuration above we are now ready to test + out setup. In order to do this make sure that each document root have the "phpinfo.php" + test script (see above).

      +

      We can now test the different setups by using the URLs

      +

      +

      1. +

        http://192.168.0.50/phpinfo.php +

        +

        This URL would send back configuration showing that the server is running + PHP4. Verify that the config path used is set to + "/etc/php4/apache2/".

        +
      2. +

        http://192.168.0.51/phpinfo.php +

        +

        This URL would send back configuration showing that the server is running + PHP5 Verify that the config path used is set to + "/etc/php5/apache2/".

        +

      +

      +

      Troubleshooting

      + +

      +

      1. +

        If your browser asks you to download content with mime-type + "mime/x-httpd-application" when you try to visit the + PHP script it means that Apache does not yet run PHP as a module (now + module have accepted to handle the x-http-application mime type). Make + sure you have included the "php4" in the APACHE_MODULES + string as described above and that you added the + "php4.conf" file in the + "/etc/apache2/conf.d/" directory.

        +
      2. +

        We had some issues with FireFox insisting on downloading + "phpinfo.php" as a file even when other browser + showed the page properly, using "etherreal" we could + confirm that Firefox was using a previous cached version before we had + enabled PHP in the apache configuration. To solve this we had to clear + the Firefox cache.

        +

      +

      +
      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apk.html b/Societes/ric/jpgraph/docs/chunkhtml/apk.html new file mode 100755 index 00000000..ac0d0252 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apk.html @@ -0,0 +1,13 @@ +Appendix K. Why it is not possible to add a SVG backend to JpGraph

      Appendix K. Why it is not possible to add a SVG backend to JpGraph

      + +

      Background

      + +

      We have received many suggestions to add SVG as output from the library to achieve + better quality in off-screen reproduction of graphs. Adding SVG output would + significantly enhance the print quality as well as adding the possibility of + seamless zooming in graphs. For this reason we have done a brief pre-study on the + feasibility of such a backend. This short note will describe our findings.

      +
      + + +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apks02.html b/Societes/ric/jpgraph/docs/chunkhtml/apks02.html new file mode 100755 index 00000000..6fb2fd65 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apks02.html @@ -0,0 +1,13 @@ +Summary of findings

      Summary of findings

      + +

      To our surprise we have to conclude that with the current SVG standard 1.1 as well + as with the upcoming 1.2 (based on SVG-T) it will not be possible to implement a + full backend in SVG.

      +

      The primary hinder is the lack of adequate text manipulation in the current SVG + standard. In addition the implementation of the text supporting feature in current + SVG viewers range from poor and erroneous to non-existing.

      +

      The only way to solve this would be to drastically reduce some functionality of + the library in regards to text handling and require the user of the library to + supply text sizes to be used in many places of the library where that is needed. +

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apks03.html b/Societes/ric/jpgraph/docs/chunkhtml/apks03.html new file mode 100755 index 00000000..f52477f9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apks03.html @@ -0,0 +1,122 @@ +Detailing the issue

      Detailing the issue

      + +

      The core problem

      + +

      It all boils down to one critical issue:

      +

      With the current SVG 1.1 (and draft 1.2) standard there is no way to + statically find out the bounding box of an arbitrary text string for later usage + in the SVG script.

      +

      This very surprising omission in the SVG standard makes it in principal + impossible to even do such a simple thing as drawing a frame around a text + programatically since there is no easy way to find out the size, in the given + coordinate system, of the string.

      +

      Since the actual bounding box is dependent on both font, style, size, etc as + well as the actual SVG viewer text-layout engine implementation this calculation + cannot be done outside the viewer. It must be part of the SVG standard elements.

      +

      Note

      +

      Now, anyone who are familiar with SVG would jump in here and point out + that this is not entirely correct. For the specific case of a frame around a + text it would be possible to use a filter function as specified by the + standard but that is a special case that just could be used to draw an + effect that looks like a frame around a text (using the objectBoundingBox + property). It is still not possible to find out the bounding box.

      +

      The second approach would be to to add some DOM Javascript code in the SVG + script which upon execution of the script could in theory find out the + bounding box and adjust suitable attributes in the script.

      +
      +
      +

      Why is this a problem ?

      + +

      There are many places in the library where it is absolutely essential to find + out the bounding box of a text string to adjust the position of other object in + the graph. For example margins for titles, column width in gantt charts and + legends and so on. Without this functionality it will be impossible to add SVG + output without significantly reducing the functionality and in essence create a + new version of the library suitable for this reduced functionality that is + brought upon us by the use of SVG.

      +
      +

      Possible workarounds

      + +

      Looking at this from a more positive view instead of explaining why it cannot + be done there are in principal only two workarounds (neither which is a 100% + solution)

      +
      1. +

        Using a single fixed font. Restricting the library to one specific + fixed font would make it possible to calculate the bounding box for the + string. Due to differences in the existing viewers it would be necessary + to have some safety margins built in when doing this calculation. + However this would significantly impact the visual appearance of the + graphs.

        +
      2. +

        Using heuristics By establishing some "good enough" heuristics for a + plain font we can try to find a guesstimate of the size of the string. + Unfortunately it is a big difference in length between "iiiii" and + "wwwww" even though they have the same number of characters. So without + fully implementing the same algorithm as some SVG viewer text-layout + engine uses this method cannot guarantee that the text will always fit + without making the box fit the worst case. In addition this method will + have some difficulty in handling rotated text strings.

        +
      +
      +

      What would be required ?

      + +

      What would be required in the standard to solve this is a new basis element + which could be used to record the bounding box of a particular text string for + later reference. To just give some idea on what is needed some "pseudo-SVG" that + we would need is something along the lines of:

      +
      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +
      <def>
      +  <boundingbox id="bb1" 
      +               text="This is a text" style=" />
      +</def>
      +<rect x="50+#bb1.x1-10" y="50+#bb1.y1-10" 
      +      width="#bb1.width+20" 
      +      height="#bb1.height+20" />
      +<text x="50" y="50" >
      +  <tref xlink:href="#bb1" />
      +</text>
      +

      The basic idea is that in the def-section all text strings to later be used in + the script is defined together with the font (and any other formatting + applicable). These text strings are defined in the new SVG element "boundingbox" + which will calculate the bounding box of the given text. These text string is + later referenced in the actual text with a standard tref element. The bounding + box attributes can then be used in the positioning of the text with a "#" + reference based on the id of the new introduced element "boundingbox" The above + script would then draw a text string positioned at (50,50) with a frame around + it with a 10 units margin all around.

      +
      +

      DOM scripting and GetBBox()

      + +

      Since we make no claim to be experts in all aspects of the SVG standard (which + is fairly big) it might be possible that there is some way to still solve this + that has eluded us so we would be very interested in getting a second opinion of + these findings. We are aware of the SVG method GetBBox() but this would not work + in the library very well. The reason is that this is not a static function but + requires the context of a DOM script. This would require a substantially rewrite + of the library since there are graphs where every single coordinate would have + to be back-patched in the end (possible in multiple passes - since the + calculation of one bounding box would be needed to adjust another element).

      +

      This means that the script would no longer be static but would require the + library to generate "self-modifying" DOM script at the end. The logic of the + library assumes that the bounding box of text can be found out at the place of + creation and then this bounding box can be used to adjust subsequent + coordinates.

      +

      So to summarize this we do not feel that the potential back patching of every + single element in the SVG image at the end in a DOM script is a solution. +

      +
      +

      A final comment

      + +

      Since we still find it very hard to believe this giant oversight in the + standard we would be happy to receive comments on these conclusions.

      +
      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apl.html b/Societes/ric/jpgraph/docs/chunkhtml/apl.html new file mode 100755 index 00000000..1bb2a41d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apl.html @@ -0,0 +1,267 @@ +Appendix L. The JpGraph configuration file

      Appendix L. The JpGraph configuration file

      + +
      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +27
      +28
      +29
      +30
      +31
      +32
      +33
      +34
      +35
      +36
      +37
      +38
      +39
      +40
      +41
      +42
      +43
      +44
      +45
      +46
      +47
      +48
      +49
      +50
      +51
      +52
      +53
      +54
      +55
      +56
      +57
      +58
      +59
      +60
      +61
      +62
      +63
      +64
      +65
      +66
      +67
      +68
      +69
      +70
      +71
      +72
      +73
      +74
      +75
      +76
      +77
      +78
      +79
      +80
      +81
      +82
      +83
      +84
      +85
      +86
      +87
      +88
      +89
      +90
      +91
      +92
      +93
      +94
      +95
      +96
      +97
      +98
      +99
      +100
      +101
      +102
      +103
      +104
      +105
      +106
      +107
      +108
      +109
      +110
      +111
      +112
      +113
      +114
      +115
      +116
      +117
      +118
      +119
      +120
      +121
      +122
      +123
      +124
      +125
      +126
      +127
      +128
      +129
      +130
      +131
      +132
      +
      <?php
      +//=======================================================================
      +// File:        JPG-CONFIG.INC
      +// Description: Configuration file for JpGraph library
      +// Created:     2004-03-27
      +// Ver:         $Id: jpg-config.inc.php 1839 2009-09-25 12:36:15Z ljp $
      +//
      +// Copyright (c) Aditus Consulting. All rights reserved.
      +//========================================================================
      + 
      + 
      +//------------------------------------------------------------------------
      +// Directories for cache and font directory.
      +//
      +// CACHE_DIR:
      +// The full absolute name of the directory to be used to store the
      +// cached image files. This directory will not be used if the USE_CACHE
      +// define (further down) is false. If you enable the cache please note that
      +// this directory MUST be readable and writable for the process running PHP.
      +// Must end with '/'
      +//
      +// TTF_DIR:
      +// Directory where TTF fonts can be found. Must end with '/'
      +//
      +// The default values used if these defines are left commented out are:
      +//
      +// UNIX:
      +//   CACHE_DIR /tmp/jpgraph_cache/
      +//   TTF_DIR   /usr/share/fonts/truetype/
      +//   MBTTF_DIR /usr/share/fonts/truetype/
      +//
      +// WINDOWS:
      +//   CACHE_DIR $SERVER_TEMP/jpgraph_cache/
      +//   TTF_DIR   $SERVER_SYSTEMROOT/fonts/
      +//   MBTTF_DIR $SERVER_SYSTEMROOT/fonts/
      +//
      +//------------------------------------------------------------------------
      +// define('CACHE_DIR','/tmp/jpgraph_cache/');
      +// define('TTF_DIR','/usr/share/fonts/truetype/');
      +// define('MBTTF_DIR','/usr/share/fonts/truetype/');
      + 
      +//-------------------------------------------------------------------------
      +// Cache directory specification for use with CSIM graphs that are
      +// using the cache.
      +// The directory must be the filesysystem name as seen by PHP
      +// and the 'http' version must be the same directory but as
      +// seen by the HTTP server relative to the 'htdocs' ddirectory.
      +// If a relative path is specified it is taken to be relative from where
      +// the image script is executed.
      +// Note: The default setting is to create a subdirectory in the
      +// directory from where the image script is executed and store all files
      +// there. As ususal this directory must be writeable by the PHP process.
      +define('CSIMCACHE_DIR','csimcache/');
      +define('CSIMCACHE_HTTP_DIR','csimcache/');
      + 
      +//------------------------------------------------------------------------
      +// Various JpGraph Settings. Adjust accordingly to your
      +// preferences. Note that cache functionality is turned off by
      +// default (Enable by setting USE_CACHE to true)
      +//------------------------------------------------------------------------
      + 
      +// Deafult locale for error messages.
      +// This defaults to English = 'en'
      +define('DEFAULT_ERR_LOCALE','en');
      + 
      +// Deafult graphic format set to 'auto' which will automatically
      +// choose the best available format in the order png,gif,jpeg
      +// (The supported format depends on what your PHP installation supports)
      +define('DEFAULT_GFORMAT','auto');
      + 
      +// Should the cache be used at all? By setting this to false no
      +// files will be generated in the cache directory.
      +// The difference from READ_CACHE being that setting READ_CACHE to
      +// false will still create the image in the cache directory
      +// just not use it. By setting USE_CACHE=false no files will even
      +// be generated in the cache directory.
      +define('USE_CACHE',true);
      + 
      +// Should we try to find an image in the cache before generating it?
      +// Set this define to false to bypass the reading of the cache and always
      +// regenerate the image. Note that even if reading the cache is
      +// disabled the cached will still be updated with the newly generated
      +// image. Set also 'USE_CACHE' below.
      +define('READ_CACHE',true);
      + 
      +// Determine if the error handler should be image based or purely
      +// text based. Image based makes it easier since the script will
      +// always return an image even in case of errors.
      +define('USE_IMAGE_ERROR_HANDLER',true);
      + 
      +// Should the library examine the global php_errmsg string and convert
      +// any error in it to a graphical representation. This is handy for the
      +// occasions when, for example, header files cannot be found and this results
      +// in the graph not being created and just a 'red-cross' image would be seen.
      +// This should be turned off for a production site.
      +define('CATCH_PHPERRMSG',true);
      + 
      +// Determine if the library should also setup the default PHP
      +// error handler to generate a graphic error mesage. This is useful
      +// during development to be able to see the error message as an image
      +// instead as a 'red-cross' in a page where an image is expected.
      +define('INSTALL_PHP_ERR_HANDLER',false);
      + 
      +// Should usage of deprecated functions and parameters give a fatal error?
      +// (Useful to check if code is future proof.)
      +define('ERR_DEPRECATED',true);
      + 
      +// The builtin GD function imagettfbbox() fuction which calculates the bounding box for
      +// text using TTF fonts is buggy. By setting this define to true the library
      +// uses its own compensation for this bug. However this will give a
      +// slightly different visual apparance than not using this compensation.
      +// Enabling this compensation will in general give text a bit more space to more
      +// truly reflect the actual bounding box which is a bit larger than what the
      +// GD function thinks.
      +define('USE_LIBRARY_IMAGETTFBBOX',true);
      + 
      +//------------------------------------------------------------------------
      +// The following constants should rarely have to be changed !
      +//------------------------------------------------------------------------
      + 
      +// What group should the cached file belong to
      +// (Set to '' will give the default group for the 'PHP-user')
      +// Please note that the Apache user must be a member of the
      +// specified group since otherwise it is impossible for Apache
      +// to set the specified group.
      +define('CACHE_FILE_GROUP','www');
      + 
      +// What permissions should the cached file have
      +// (Set to '' will give the default persmissions for the 'PHP-user')
      +define('CACHE_FILE_MOD',0664);
      + 
      +?>
      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apm.html b/Societes/ric/jpgraph/docs/chunkhtml/apm.html new file mode 100755 index 00000000..b707e73c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apm.html @@ -0,0 +1,72 @@ +Appendix M. Theme class

      Appendix M. Theme class

      + +

      Theme class

      + +
      1. +

        Theme class test.

        +
      2. +

        This irrevocable, perpetual license covers versions 1.x & 2.x of + JpGraph

        +
      3. +

        This license gives the holder right to install JpGraph libraries on One Server + which can run one or several virtual HTTP servers.

        +
      4. +

        The license holder is allowed to make modifications to the JpGraph sources but + in no event will the original copyright holders of this library be held + responsible for action or actions resulting from any modifications of the + source.

        +
      5. +

        The license holder is not required to publicize or otherwise make available + any software used in conjunction with JpGraph.

        +
      6. +

        The license holder may not re-distribute the library on it's own or versions + thereof to third party without prior written permission of the copyright + holder.

        +
      7. +

        JpGraph License does not allow the library to be redistributed as part of + another product.

        +
      8. +

        In no event shall the copyright notice in any of the source files supplied in + JpGraph be removed or modified.

        +
      9. +

        The names "JpGraph" or "Aditus" must not be used to endorse or promote + products derived from this software without prior written permission.

        +
      10. +

        The license may be transferred to another server by removing all installed + files from the old server.

        +
      11. +

        The wording of this license may change without notice for future versions of + JpGraph.

        +
      12. +

        By acquiring a license the licensee agrees to all terms and conditions in this + license text.

        +
      13. +

        Limitations of Liability

        +

        In no event, except for intellectual property claim, shall the initial + developers or copyright holders be liable for any damages whatsoever, including + - but not restricted to - lost revenue or profits or other direct, indirect, + special, incidental or consequential damages, even if they have been advised of + the possibility of such damages, except to the extent invariable law, if any, + provides otherwise.

        +

        In addition, in no event does this license authorize you to use JpGraph in + applications or systems where JpGraphs failure to perform can reasonably be + expected to result in a physical injury, loss of life or any economical damage. + Any such use by the licensee is entirely at the licensees own risk, and the + licensee agrees to hold the original copyright holders of JpGraph harmless from + any claims or losses relating to any such unauthorized use.

        +
      14. +

        Limited Warranty

        +

        JpGraph warrants that licensor is owner of the software with authority to + license the software to licensee and that the software does not infringe third + party intellectual property rights. Licensor agrees to indemnify, defend and + hold harmless licensee from any claims either that licensor does not own the + software or that the software infringes a third party's intellectual + property.

        +

        THE SOFTWARE AND THIS LICENSE DOCUMENT ARE PROVIDED AS IS. THE FOREGOING + WARRANTY IS IN LIEU OF ALL OTHER WARRANTIES, EXPRESS OR IMPLIED, OF ANY KIND, + INCLUDING WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE.

        +
      +
      + +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/apms02.html b/Societes/ric/jpgraph/docs/chunkhtml/apms02.html new file mode 100755 index 00000000..aa81530e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/apms02.html @@ -0,0 +1,64 @@ +Bulk (Re-seller license)

      Bulk (Re-seller license)

      + +
      1. +

        The JpGraph Professional License will be referred to as "The license" in the + remainder of this text.

        +
      2. +

        This irrevocable, perpetual license covers versions 1.x & 2.x of + JpGraph

        +
      3. +

        This license gives the licensee the right to distribute the JpGraph libraries, + as part of its product portfolio and to use the Jpgraph libraries with its + hosted service offerings. Specifically this license gives the licensee the right + to deploy an unlimited number of JpGraph installations as part of their product + portfolio and offer an unlimited number of hosted services that use the JpGraph + libraries to an unlimited number of users.

        +
      4. +

        The license holder is allowed to make modifications to the JpGraph sources but + in no event will the original copyright holders of this library be held + responsible for action or actions resulting from any modifications of the + source.

        +
      5. +

        JpGraph libraries is only licensed to be redistributed as a part of the + licensees products. Specifically it may not be sold or re-distributed on it's + own.

        +
      6. +

        In no event shall the copyright notice in any of the source files supplied in + JpGraph be removed or modified.

        +
      7. +

        The names "JpGraph" or "Aditus" must not be used to endorse or promote + products derived from this software without prior written permission.

        +
      8. +

        The wording of this license may change without notice for future versions of + JpGraph.

        +
      9. +

        By acquiring a license the licensee agrees to all terms and conditions in this + license text.

        +
      10. +

        Limitations of Liability

        +

        In no event, except for intellectual property claim, shall the initial + developers or copyright holders be liable for any damages whatsoever, including + - but not restricted to - lost revenue or profits or other direct, indirect, + special, incidental or consequential damages, even if they have been advised of + the possibility of such damages, except to the extent invariable law, if any, + provides otherwise.

        +

        In addition, in no event does this license authorize you to use JpGraph in + applications or systems where JpGraphs failure to perform can reasonably be + expected to result in a physical injury, loss of life or any economical damage. + Any such use by the licensee is entirely at the licensees own risk, and the + licensee agrees to hold the original copyright holders of JpGraph harmless from + any claims or losses relating to any such unauthorized use.

        +
      11. +

        Limited Warranty

        +

        JpGraph warrants that licensor is owner of the software with authority to + license the software to licensee and that the software does not infringe third + party intellectual property rights. Licensor agrees to indemnify, defend and + hold harmless licensee from any claims either that licensor does not own the + software or that the software infringes a third party's intellectual + property.

        +

        THE SOFTWARE AND THIS LICENSE DOCUMENT ARE PROVIDED AS IS. THE FOREGOING + WARRANTY IS IN LIEU OF ALL OTHER WARRANTIES, EXPRESS OR IMPLIED, OF ANY KIND, + INCLUDING WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE.

        +
      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch01.html b/Societes/ric/jpgraph/docs/chunkhtml/ch01.html new file mode 100755 index 00000000..d7b24247 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch01.html @@ -0,0 +1,29 @@ +Chapter 1. About the library

      Chapter 1. About the library

      + +

      + What you will learn in this chapter.  + This chapter will go through what the library is, the licensing model, how it is + typically used and the detailed steps of installing it. This chapter will not + explain how to use the API in the library. It will help answering typical questions + such as "Should I use this library?", "Is the library + suitable for use in my particular environment?, "Do I have + enough knowledge to use this library?" +

      +

      What is JpGraph?

      + +

      The JpGraph library is a 2D graph plotting library for PHP5(>= 5.1) and PHP7.0. It is meant + to significantly simplify the creation of dynamic graphs using PHP scripting. The + libray can be used on its own or as an embedded part of a large WEB development + undertaking. In addition the library allows images to be created using the command + line version of PHP (the cli version).

      +
      + + + + + + + + + +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch01s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch01s02.html new file mode 100755 index 00000000..ce4dc922 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch01s02.html @@ -0,0 +1,20 @@ +Software license

      Software license

      + +

      JpGraph is released under a dual license. For non-commercial usage the library is + released under QPL 1.0 (Qt-License) and for professional use it is released under + the JpGraph Professional License. See Appendix B. JpGraph Professional License for more details regarding the exact wording of + the license. The goal the license have is to be simple, fair and help recover some + of the development cost and hosting services that the library development brings + with it.

      +

      Broadly speaking commercial use is defined as

      +

      a) The library is included as an integral part of a product that is sold with a + cost that exceeds the cost of the distribution medium.

      +

      b) The library is offered as a WEB service for a fee

      +

      c) The library is used in an intranet in a company with more than 2 + employees

      +

      One license entitles the user to install the library on one single physical + machine which may run one or several logical servers. In addition it also entitles + the license holder to install one version of the library on a separate development + server. The professional license is perpetual and is valid for one major + version.

      +
      diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch01s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch01s03.html new file mode 100755 index 00000000..e4dd3283 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch01s03.html @@ -0,0 +1,31 @@ +Versions of the library covered

      Versions of the library covered

      + +

      This manual covers versions up to v4.0 of JpGraph. There are three main branches + of the library:

      +
      The "3.x.y" and "4.x.y" branch
      +
      +

      The "4.x.y" series is the current one and is only intended to run + on PHP5 (>= 5.1) and PHP7.0.
      + The "3.x.y" series is the previous one and is only intended to run + on PHP5 (>= 5.1).
      + This code is optimized for use both with PHP as well as + the new (and bundled version) of the GD 2.x library. Hence this will + not work if you only have the older GD 1.x graphic primitive library + installed. However, all modern PHP installations since 2006 have + shipped with GD 2.x so this should not in reality be any + problem.

      +

      Caution

      +

      Please note that it is not possible to run the "3.x.y" series + on PHP7.0. If you need to run on PHP7.0 then you must use the 4.x version of the + library.

      +
      +
      The "3.x.y-p" and "4.x.y-pro" branch (The pro-version)
      +

      This is in principle the same as the "3.x.y" or "4.x.y" branch with the + difference that the pro-version includes a number of additional + modules (see Part V. Additional graph types available in the professional version) not available in the free + version. This includes both some additional graph types as well as + 1D and 2D barcodes. In addition the professional license gives three + months of email support for installing and configuring the + library.

      +
  • + diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch01s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch01s04.html new file mode 100755 index 00000000..7fe2a85c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch01s04.html @@ -0,0 +1,88 @@ +Purpose and usage

    Purpose and usage

    + +

    The purpose of the library is to make it possible to (very) easily create dynamic + images (a.k.a. graphs) using PHP scripting. The library hides as much as possible + all the details necessary to create dynamic images. Strictly speaking all the basic + low level functionality to draw images are already available in PHP since PHP comes + with the core GD library which is the very lowest layer to create images. The GD + library has graphic primitives to create lines, circles, points etc. but it has no + built-in intelligence to handle scales, labelling , colors etc. This logically makes + JpGraph library a higher type library more easily accessible than the raw GD + library.

    +

    Figure 1.1. JpGraph and PHP

    + +
    JpGraph and PHP
    +

    +

    There are several possible usage scenario for the library and it's different + parts.

    +

    The most common usage is most likely to visualize numeric data by creating basic + charts (for example line, bar or pie charts) that is included dynamically in a + WEB-page via a straight forward <img> tag. The details on how to + create dynamic graphs will be fully covered in later sections of this manual The + library itself is agnostic to where the data comes from so it could for example be + retrieved from a database, from a plain text file or perhaps from some WEB-service. + In addition to this scenario the library could be used as a tool to create dynamic + charts that are stored as image files in a directory. This makes it possible to use + the library in an off-line batch mode from the command line (most likely using the + cli =command line version of PHP). For an example of using JpGraph in batch mode see Chapter 34. Showing SPAM statistics.

    +

    In addition to these basic usage scenarios both the free and the slightly more + advanced pro-version of the library includes a multitude of additional functionality + which includes for example more advanced graph types (like spider graphs, polar + plots, contour plots etc.) and some non graph capabilities like the possibility to + create barcodes (only available in the pro-version) or to create Gantt-charts. The + usage of all of these types of graphs are explained in this manual.

    +

    +

    Caution

    +

    In order to use JpGraph the PHP installation must have support for the GD + libraries enabled. See Chapter 2 and 3 for details on checking the + installation.

    +

    +

    +

    In order to get a quick feel for how the library can be used we have included in Example 1.1. This is the very first example (example0.php) a very basic type of line graph. Don't worry + right now about the details, the message here is that it only takes six lines of + real script code to create a basic graph. Have a look at the example and see just + how much of the script makes sense without us even having discussed any API + yet.

    +

    Example 1.1. This is the very first example (example0.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(350,250);
    +$graph->SetScale('textlin');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor('blue');
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>

    Figure 1.2. This is the very first example (example0.php)

    This is the very first example (example0.php)

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch01s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch01s05.html new file mode 100755 index 00000000..b6762c16 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch01s05.html @@ -0,0 +1,18 @@ +Prerequisites for running the library

    Prerequisites for running the library

    + +

    +

    • +

      Any 32bit operating system capable of running PHP5

      +
    • +

      PHP5, requires version >= 5.1.0 (it might work with earlier versions + but this is not officially supported)

      +

      Any 32bit operating system capable of running PHP7.0(version 4.x.y only)

      +
    • +

      Enabled GD 2.x library in PHP installation. This is normally bundled + with the PHP distribution. It is strongly recommended that you use the + included version of GD with PHP and not try to install it + separately.

      +

    +

    +

    For more detailed information on PHP settings in php.ini see Verifying the PHP/GD installation

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch01s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch01s06.html new file mode 100755 index 00000000..e6816b4d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch01s06.html @@ -0,0 +1,10 @@ +Who can use the library

    Who can use the library

    + +

    Even though the library hides a lot of details it needs to be pointed out that + this is still a programmers library. It is assumed that the user of the library has + basic skills in programming PHP and is familiar, at least to a basic extent, with + the concept of objects and object oriented programming since the entire library is + built around this paradigm. Fully understanding basic concepts such as classes, + methods, class instances and class inheritage will substantially help in trying to + understand how to use the library.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch01s07.html b/Societes/ric/jpgraph/docs/chunkhtml/ch01s07.html new file mode 100755 index 00000000..1e19d39b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch01s07.html @@ -0,0 +1,33 @@ +What you can do with the library

    What you can do with the library

    + +

    One should probably differentiate between the two basic usage scenarios

    +

    +

    1. +

      Online. That is, the image is dynamically + generated when a user is viewing a particular WEB-page. This means that + the time it takes to generate the image will add to the delay the user + is experiencing when trying to view the page. (The library supports a + caching mechanism to reduce the number of times an image has to + generated, see Efficient graph generation using the built-in cache subsystem for a thorough + discussion). For this scenario one should probably keep the images as + basic as possible in order to have as small latency as possible.

      +

      In practice this means that the number of data points to visualize + should be kept in the order of hundreds and not thousands. In later + sections we will discuss in details what can be done to improve the + performance of the library.

      +

      +
    2. +

      Offline. That is, the images are generated by + some "batch" processing (possible command line based). In this scenario + the delay is not an issue and one could create much more complicated + images and process many more data points. Even though the library in + itself does not impose any restriction of the number of data points to + process the memory and time limits set for PHP will.

      +

      In practice if you need to process images with sizes above 2000x2000 + pixels resulting from processing 500,000 data points then it is probably + better to find a more suitable way to produce these graphs rather than a + PHP script (unless you are prepared to give PHP a couple of 100 MB of + allowed memory)

      +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch01s08.html b/Societes/ric/jpgraph/docs/chunkhtml/ch01s08.html new file mode 100755 index 00000000..9899ec99 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch01s08.html @@ -0,0 +1,32 @@ +What you shouldn't or cannot do with this library

    What you shouldn't or cannot do with this library

    + +

    If the primary usage is heavy scientific processing where you need to visualize + complex 2D/3D scenarios then this library is not for you. In this case it is + probably better to use one of the scientific tools like Matlab or Maple.

    +

    In addition, if you for example intend to implement a large scale project planning + tool with several thousand activities that you want to manipulate and display using + the support Gantt charts in this library this is probably stretching it a bit too + far. Again, this is probably better done with more dedicated tools like MS Project.

    +

    In addition may we again point out that the library does not officially support + any 64bit OS due to issues with PHP/GD.

    +

    +

    Note

    +

    Some of the 2D barcodes will simply not work in a 64bit OS. This is + consequence of the computation of the error correcting codes which in some + instances assumes 32bit integers. For the basic graphs there is no known + issues but since the library is not verified on a 64bit OS we do not + officially support this.

    +

    +

    +

    There is also a question on sever load that should be taken into account. Due to + the CPU intensive nature of image processing the complexity of the generated images + needs to be kept as low as possible for any sites that would expect heavy load. + Since it is normally necessary to increase the allowed memory for PHP (see Setting up your php.ini file) when working with images this could + easily make the server hit it's physical memory limit if the load is very high.

    +

    For example, the practical lowest memory that should be set for PHP when working + with images is 32MB (recommended is at least 64MB), if your system must cope with 50 + simultaneous users it means that the HTTP processes alone will need roughly 1.6GB + just to secure the basics. Handling 50 simultaneous executing image scripts will + also require some heavy processing and the server needs to have a CPU capacity to + handle this. Some discussions about dimensioning a server can be found in Efficient graph generation using the built-in cache subsystem.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch01s09.html b/Societes/ric/jpgraph/docs/chunkhtml/ch01s09.html new file mode 100755 index 00000000..1e410b23 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch01s09.html @@ -0,0 +1,368 @@ +Feature-matrix for the library

    Feature-matrix for the library

    + +

    JpGraph library is an OO graph library which makes it easy to both draw a "quick and + dirty" graph with a minimum of code and quite complex graphs which requires a very fine + grain of control. The library tries to assign sensible default values for most parameters + hence making the learning curve quite flat since for most of the time very few commands are + required to draw graphs with a pleasing esthetic look.

    +

    The following list makes no claim to be complete but it will give a birds view of some of + the main (and in some cases unique) features of the library. The list will also illustrate + the difference between the free and the pro-version.

    +

    +

    Table 1.1. Feature matrix for JpGraph library

    + +
    FeatureFree versionPro-version
    Supports PNG, GIF, JPG image formats +

    +

    +
    +

    +

    +
    Flexible scales, supports text-lin, text-log, lin-lin, lin-log, + log-lin and log-log and integer scales +

    +

    +
    +

    +

    +
    Supports both PNG, GIF and JPG graphic formats. Note that the + available formats are dependent on the specific PHP installation where + the library is used. +

    +

    +
    +

    +

    +
    Supports caching of generated graphs to lessen burden of a HTTP + server. +

    +

    +
    +

    +

    +
    Supports batch mode to only generate images to a file +

    +

    +
    +

    +

    +
    Supports client side image maps which makes it easy to produce drill + down images. +

    +

    +
    +

    +

    +
    Intelligent auto-scaling which gravitates towards esthetic values, + i.e. multiples of 2:s and 5:s +

    +

    +
    +

    +

    +
    Fully supports manual scaling, with fine grain control of position of + ticks. +

    +

    +
    +

    +

    +
    Multiple Y-axes (and scales) and multiple data series in the same + graph +

    +

    +
    +

    +

    +
    Supports background images with different formatting options +

    +

    +
    +

    +

    +
    User specified grace for auto-scaling +

    +

    +
    +

    +

    +
    Supports unlimited number of y-axes, +

    +

    +
    +

    +

    +
    Supports, line-plots, filled line-plots, accumulated line-plots, bar + plots, accumulated bar plots, grouped bar plots, error plots, line error + plots, scatter plots, gantt-charts, radar plots, 2D and 3D pie charts. +

    +

    +
    +

    +

    +
    Supports unlimited number of plots in each graph, makes it easy to + compose complex graph which consists of several plot types +

    +

    +
    +

    +

    +
    User specified position of axis +

    +

    +
    +

    +

    +
    Designed as a flexible OO framework which makes it easy to add new + types of plots +

    +

    +
    +

    +

    +
    Supports automatic legend generation with custom formatting +

    +

    +
    +

    +

    +
    Supports both vertical and horizontal grids +

    +

    +
    +

    +

    +
    Supports anti-aliasing of lines +

    +

    +
    +

    +

    +
    Supports background images as well as unlimited number of icons in + the graph +

    +

    +
    +

    +

    +
    Supports rotation of linear graphs +

    +

    +
    +

    +

    +
    More then 400 named colors +

    +

    +
    +

    +

    +
    Designed modularly - you don't have to include code which isn't used +

    +

    +
    +

    +

    +
    Supports user specified callback for fine tuning scale labels +

    +

    +
    +

    +

    +
    Support for text augmentation of graphs +

    +

    +
    +

    +

    +
    Support for PHP Accelerator +

    +

    +
    +

    +

    +
    Support for a large set of 1D barcodes (EAN-128, ...) +

    +

    +
    +

    +

    +
    Support for Windrose plots +

    +

    +
    +

    +

    +
    Support for discontinuities in graphs +

    +

    +
    +

    +

    +
    Enhanced anti-aliasing for PieCharts +

    +

    +
    +

    +

    +
    More advanced formatting of graph titles including 3D Bevel effects. +

    +

    +
    +

    +

    +
    Additional 3D Bevel formatting feature for the entire Graph +

    +

    +
    +

    +

    +
    Footer text on all graph types +

    +

    +
    +

    +

    +
    Full support for color alpha blending +

    +

    +
    +

    +

    +
    Advanced interpolation with cubic splines to get smooth curves from + just a few data points. +

    +

    +
    +

    +

    +
    Several different fill styles for line plots +

    +

    +
    +

    +

    +
    Some image 3D effects built-in without external image manipulation + programs +

    +

    +
    +

    +

    +
    Additional built-in images for plot marks including 3D rendered + markers like diamonds, squares, bevels, balls, pins etc +

    +

    +
    +

    +

    +
    Support for calculation of linear regression +

    +

    +
    +

    +

    +
    Text strings can be added to the plot using scale coordinates +

    +

    +
    +

    +

    +
    Support for all primitive URL parameter types with CSIM graphs. +

    +

    +
    +

    +

    +
    Hare/Niemeyer Integer compensation for Pie Plots +

    +

    +
    +

    +

    +
    Possibility to use Vertical Gradient fill for line plots. +

    +

    +
    +

    +

    +
    Improved error handling. The visual appearance of the error handling + now tries to mimic any windows system window (in graphic) +

    +

    +
    +

    +

    +
    Builtin support to display over 200 country flag and the possibility + to use them as icons or markers in the graphs. All the flag images are + builtin with JpGraph in an efficient pre-compiled data format. +

    +

    +
    +

    +

    +
    Support for both Chinese and Japanese character sets +

    +

    +
    +

    +

    +
    Support for custom TTF fonts +

    +

    +
    +

    +

    +
    Support for 2D contour plots of 3D functions +

    +

    +
    +

    +

    +
    Unlimited number of data points (up to memory and CPU limit of + server) +

    +

    +
    +

    +

    +
    Windrose plots + +

    +

    +
    Odometer plots + +

    +

    +
    Graphic excel like tables + +

    +

    +
    1D Linear barcodes (e.g. EAN8,13,128, Code39, 128, 2of5, Code-11, + Codabar etc) + +

    +

    +
    2D-Barcode PDF417 + +

    +

    +
    2D-Barcode Datamatrix + +

    +

    +
    2D-Barcode QR-code + +

    +

    +
    Matrix visualization + +

    +

    +
    +


    +

    +

    In addition to these high level features the library has been designed to be orthogonal + and consistent in its' naming convention. For example, to specify color each object (i.e. + axis, grids, texts, titles etc) within the graph implements the method + SetColor() with the same signature.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch01s10.html b/Societes/ric/jpgraph/docs/chunkhtml/ch01s10.html new file mode 100755 index 00000000..caab06a1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch01s10.html @@ -0,0 +1,79 @@ +Where to find additional information

    Where to find additional information

    + +

    The primary source for information is this manual together with theJpGraph web site which also + contains further links to many external sources of information.

    +

    Manuals and distributed documentation

    + +

    +

    1. +

      The JpGraph user manual (this document)

      +
    2. +

      The JpGraph API reference manual. This reference contains details + about all public APIs available together with the classes.

      +
    3. +

      JpGraph UML static class diagram. This is an experimental + documentation which shows the static class dependency between all + classes in the library.

      +
    4. +

      The JpGraph + community forum. This is a discussion board for users of + the JpGraph library where users both give examples on how they have + used the library as well as asking and answering generic and + specific questions.

      +
    5. +

      The FAQ. This is available both on-line and in Appendix C. FAQ to this manual.

      +

    +

    +
    +

    On-line documentation and resources

    + +

    The JpGraph document portal can be be found at http://jpgraph.net/doc/ + in addition to the distributed documentation there are several "HowTo" sections + which explains with some larger examples how to accomplish some specific type of + graphs and solve common problems.

    +

    In addition to the JpGraph Web site there are + a number of external sites with tutorials and examples on how JpGraph has been + used. This is not a complete list (nor will it ever be) but it lists a few of + the tutorials/examples that we are aware of. The following is a partial list of + known external tutorial showing more or less advanced examples on how to use + specific features of the library.

    +

    +

    Caution

    +

    Usual caveats apply in that we can take no responsibility for the + correctness of these tutorials since we have no influence over + them.

    +

    +

    +

    +

    Table 1.2. External JpGraph tutorial

    + +
    Name/LinkDescription
    Chart Dog Application.Application example
    + http://www.jimwrightonline.com/php/chartdog_2_0/chartdog.php
    Découverte de la librairie Php + JpGraphFrench tutorial
    + http://eric-pommereau.developpez.com/tutoriels/decouverte-jpgraph/
    Einführung zu JPGraphGerman tutorial
    + http://www.binnendijk.net/jpgraph/index.php
    Des graphes en Php avec + JpGraphFrench tutorial
    + http://www.journaldunet.com/developpeur/tutoriel/php/011121php_jpgraph.shtml
    Developing Professional Quality Graphs with + PHPEnglish tutorial
    + http://devzone.zend.com/article/1260-Developing-Professional-Quality-Graphs-with-PHP
    PHPHacks.com Posts Creating charts with + JPGraphEnglish tutorial
    + http://devzone.zend.com/article/994-PHPHacks.com-Posts-Creating-charts-with-JPGraph
    Simple linear regression with + PHPIBM developer works article
    + http://www.ibm.com/developerworks/web/library/wa-linphp2/
    Dreamweaver ArticleHow to integrate with Dreamweaver
    + http://www.adobe.com/devnet/dreamweaver/articles/php_graphics_11.html
    JPGraph Library V2.2 + TutorialTypo3 integration
    + http://typo3.org/documentation/document-library/extension-manuals/rt_jpgraphtutor/current/
    Introduction to JPGraph (Part + I)Basic introduction
    + http://www.devtutorials.info/articles/1334_Introduction_to_JPGraph__Part_I_.asp
    PHP Graphics With JpGraph + Downloadable tutorials
    + http://rosihanari.net/web-tutorial/php-graphics/
    JpGraph: PHP Graphs & Charts + On-The-FlyBasic introduction
    + http://www.communitymx.com/abstract.cfm?cid=2AB8E
    Using JpGraphJpGraph and Cake
    + http://bakery.cakephp.org/articles/view/using-jpgraph
    Create High Quality Graphs with + JpgraphBasic introduction
    + http://phpkitchen.com/2002/05/create-high-quality-graphs-with-jpgraph/
    JpGraph tutorial Integration with Prado
    + http://www.pradosoft.com/wiki/index.php/JpGraph_tutorial
    +


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch02.html new file mode 100755 index 00000000..4fd640f5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch02.html @@ -0,0 +1,72 @@ +Chapter 2. The Short Version: Installing the library (for PHP/Apache experts)

    Chapter 2. The Short Version: Installing the library (for PHP/Apache experts)

    + +

    + What you will learn in this chapter.  + This chapter will show you how to unpack the library and lists the minimum + prerequisites that is needed to get the library running. It is assumed that your are + familiar with adjusting the PHP configuration file php.ini and + that you already have a working PHP installation. +

    +

    Installing

    + +

    Please follow the steps below:

    +

    +

    1. +

      Either download the free library from http://jpgraph.net/download/ + or use your license information and download the pro-version from + http://jpgraph.net/pro/login.php. The download + is just a packed zip (or tar.gz) of php files. There are no automatic + installation scripts.

      +
    2. +

      Unpack the library where you normally store PHP libraries. This should + be in your PHP include path. When you unpack the library it will be + named "jpgraph-3.x" (where x corresponds to the version you have + downloaded).

      +
    3. +

      Now either rename the unpacked the directory to just jpgraph or if the + system us Unix based create a soft symbolic link, for example

      +

      ln -s jpgraph-2.x jpgraph

      +

      This will allow you to access the library files in your own program + for with a require_once('jpgraph/jpgraph.php')

      +
    4. +

      Make sure that the GD extension is enabled in your + php.ini file (check the output from + phpinfo() )

      +
    5. +

      [Optional] Verify that the paths defined in + jpg-config.inc.php corresponds to the server + setup. The path to your TTF fonts must be correct. If you get an error + saying that some TTF fonts cannot be found or read then the path needs + to be adjusted in this configuration file.

      +
    6. +

      [Optional] Check that you have sufficient memory and execution time + set in your php.ini file. It is recommended to + allow at least 32Mb memory for PHP if you intend to run anything else + than very basic graph scripts.

      +
    7. +

      [Optional] To allow for better debugging in conjunction with graph + scripts the output buffering should also be disabled in + php.ini

      +
    8. +

      [Optional] To avoid warning messages it might be necessary to set the + default timezone in php.ini if this has not already + been done. Starting with PHP 5.2 a warning is generated if the timezone + for PHP is not set.

      +

    +

    +

    Tip

    +

    When you install the library on a production server then you should not + install the library in the document root. Instead it should be installed so that + only the script can directly access the library files (somewhere in the PHP + path).

    +

    If you have the pro-version you really should install the pre-compiled version + of the library (available under directory PhpExpress-src. + This will significantly increase the performance of the library. The only + prerequisite is that you also need to install the (free) PhpExpress PHP + Accelerator from NuSphere Corporation. See Chapter 11. NuSphere PHP accelerator for information on how to install the + freely available PHP Accelerator.

    +
    +
    + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch02s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch02s02.html new file mode 100755 index 00000000..f3cc71b8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch02s02.html @@ -0,0 +1,14 @@ +Running the examples

    Running the examples

    + +

    The best way to verify that the installation is working is to run one of the + included example scripts. Assuming that the library is installed locally in the + document root on the HTTP server under jpgraph/ pointing the + browser to "http://localhost/jpgraph/Examples/example0.php" + should show the same image as can be seen in Example 1.1. This is the very first example (example0.php) .

    +

    In order to generate all the examples available there is a "meta script" that will + just do this. Point the browser to

    +

    "http://localhost/jpgraph/Examples/testsuit.php"

    +

    just note that this will generate a page with more than 300 examples. Depending on + the capacity of the server it might take a few seconds before this script is + done.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch02s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch02s03.html new file mode 100755 index 00000000..c12185be --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch02s03.html @@ -0,0 +1,27 @@ +Basic trouble shooting

    Basic trouble shooting

    + +

    If none of the examples above to work there is a couple of things that needs to be + checked. If not any of these quick fixes solves the problem then it is best to read + the long version of the installation instructions before continuing the trouble shooting.

    1. +

      Verify that the GD library is really working by running + phpinfo() and check that your output includes a GD + section which should show similar information as the image below

      +

      +

      Figure 2.1. phpinfo() GD sections

      + +
      phpinfo() GD sections
      +


      +

      +
    2. +

      Make sure you have enabled strict error checking and disabled output + buffering in php.ini. This might not solve the + problem by itself but it will enable (better) error messages to trouble + shoot the installation.

      +
    3. +

      Make sure that you are using a recent version of PHP (e.g. ≥ + PHP 5.2.x)

      +
    4. +

      Make sure that the path to the TTF directories are correctly specified + in jpg-cnfig.inc.php

      +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch03.html new file mode 100755 index 00000000..625e5f50 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch03.html @@ -0,0 +1,83 @@ +Chapter 3. The Long Version: Installing the Library

    Chapter 3. The Long Version: Installing the Library

    + +

    + What you will learn in this chapter.  + You will learn in detail how to configure and setup an environment to be able to + run the JpGraph library. The chapter will explain all configuration necessary in + great details and will also list some more extensive trouble shooting steps if you + encounter problems trying to get the library running. The only assumption is that + you have a working PHP installation together with your HTTP server. +

    +

    Downloading the library

    + +

    +

    Downloading the free version
    +

    Point the browser to + "http://jpgraph.net/download/" + and select the 3.x series if your are running PHP5 and the 1.x + series if you are still running a PHP4 installation.

    +

    +

    Note

    +

    The 1.x series of the library is no longer maintained so + in case you have not yet upgraded top PHP5 you should + strongly consider this.

    +

    +

    +
    Downloading the pro version
    +

    +

    1. +

      Locate your license file that was sent to you when you + purchased the library. You will need both the license + number as well as the registered license mail as stated + in the license. Your license information should look + similar to:

      +

      +

      ----------------------------------------------------------
      +: Your license key : JPGP-0920-1234657  
      +:  Name on license : A. JpGraph User 
      +:           E-mail : jpgraph-user@example.com
      +----------------------------------------------------------
      +

      +

      +
    2. +

      Point the browser to + http://jpgraph.net/pro/login.php + and enter your licence email and key on the + website.

      +

      +

      Figure 3.1. Pro-login dialogue on JpGraph Website

      + +
      Pro-login dialogue on JpGraph Website
      +


      +

      +
    3. +

      Depending on your system you should now download + either the 1.x or the (preferred) 3.x series. There is a + choice to either download the library as a "*.zip" file + or as a compressed "*.tar.gz" file (which is the + preferred format in a Unix environment). Save the + downloaded file to a temporary directory of your + choice.

      +
    4. +

      [Optional] Verify your downloaded file against the + given MD5 sum on the website. On a Unix system this can + be done by running the md5 program + and give the downloaded library as the argument.

      +

      For example: $> + md5 + jprgaph-3.0.0p.tar.gz

      +
    5. +

      Unpack the library to a suitable directory that is in + your PHP include path as is described in Installing the library

      +

    +

    +

    +

    +
    + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch03s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch03s02.html new file mode 100755 index 00000000..a70bcc0d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch03s02.html @@ -0,0 +1,296 @@ +Necessary system requirements for the library

    Necessary system requirements for the library

    + +

    In order to run the JpGraph library there are some prerequisites that must be + fulfilled. The PHP installation must have the low level graphic primitive library + "GD" enabled and if TTF fonts shall work in the graphs the FreeType 2.x library must + be enabled and installed in the PHP setup. Most modern PHP systems (since at least + 2006) usually have these extensions enabled and installed by default which means it + is usually rather simple to get the library working.

    +

    However, there are many systems out there and some older non-standard systems will + require some manual intervention to work correctly.

    +

    Caution

    +

    One more time; The library is not guaranteed to run on a 64Bit OS. We will + point out this several more time during this manual.

    +
    +

    Verifying the PHP/GD installation

    + +

    The first and most important step is to make sure that your PHP installations + has the GD library enabled. The easiest way to find out if this has been enabled + or not is to create a one line PHP program that has only one instruction, + phpinfo()

    +

    +

    1
    +
    <?php phpinfo(); ?>

    +

    +

    Store this basic program as phpinfo.php in the document + root. Then point the browser to

    +

    + http://localhost/phpinfo.php +

    +

    If the steps above was followed the browser should now show a lot of + information about the PHP installation. In order to find out if the GD have been + installed and enabled look for the GD section in the output. The figure below + shows a typical output of this section

    +

    Figure 3.2. phphinfo() GD-Information

    + +
    phphinfo() GD-Information
    +


    There are three important points to notice here.

    1. +

      The GD Version. It should be 2.0.x. The GD version has been + shipped with PHP for the last four years so this should not really + be a problem. If for some odd reason the system only have GD 1.x + installed then JpGraph 2.x, and 3.x cannot be used but it is still + possible to use JpGraph 1.x.

      +

      In addition the "bundled" version of GD should be used. This + version is maintained together with PHP and is usually much more up + to date then the stand alone GD version.

      +
    2. +

      FreeType version. This is required in order to use TTF fonts. This + should be at least version 2.3.x Previous versions of the FreeType + library have had known issues which has caused issues when used + together with JpGraph.

      +
    3. +

      The final point worth checking is what type of image encoding the + installation supports. The most common formats are PNG and JPEG. By + default the library uses the PNG encoding format so it is important + to check that the line that says "PNG Support" has "enabled" as + value. As a rule of thumb PNG usually gives the smallest sizes of + graph (best compression) so this is the recommended format. The only + exception to this rule might be if a photo is used as background in + the graph. Then it is possible that JPEG encoding gives a better + compression since this is a destructive format (while PNG is a + lossless format).

      +

      For legacy reason it is also possible to use GIF encoding if the + server supports this but if PNG is installed there are no good + technical reasons to use GIF compression format. (The only possible + usage of GIF is the ability to create an animated image by + concatenating a number of GIF images which are then displayed in + sequence. This is not possible with the (old) PNG standard.)

      +
    +

    In order to remove any remaining doubts that the installation works as + intended the following PHP script that only uses the GD library primitives + should be run. This allows troubleshooting the installation without involving + the additional complexity of JpGraph to make sure that the basics are in + place.

    +

    Store the script in Example 3.1. Verifying the GD installations (checkgd.php) your document root as + "checkgd.php"

    +

    Example 3.1. Verifying the GD installations (checkgd.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    <?php // content="text/plain; charset=utf-8"
    +$im = @imagecreate (200, 100) or die ( "cannot create a new gd image.");
    +$background_color = imagecolorallocate ($im, 240, 240, 240);
    +$border_color = imagecolorallocate ($im, 50, 50, 50);
    +$text_color = imagecolorallocate ($im, 233, 14, 91);
    + 
    +imagerectangle($im,0,0,199,99,$border_color);
    +imagestring ($im, 5, 10, 40, "a simple text string", $text_color );
    +header ("content-type: image/png");
    +imagepng ($im);
    +?>

    Figure 3.3. Verifying the GD installations (checkgd.php)

    Verifying the GD installations (checkgd.php)

    +

    Now point the browser to this file and fetch the script. This should show an + image in the browser with the text "a simple text string" similar to what is + shown in Figure 3.3. Verifying the GD installations (checkgd.php)

    +

    In order to be really sure that the GD 2.x version of the GD library is + installed (as opposed to just GD 1.x) we need to use a slightly more advanced + script that makes use of some features available in GD 2.x but not in GD 1.x. + The largest difference is the support for TrueColor images in GD 2.x so we + create a script that makes use of a truecolor canvas..

    +

    Example 3.2. Verifying GD2 (checkgd2.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +
    <?php // content="text/plain; charset=utf-8"
    +$im =  imagecreatetruecolor ( 300, 200);
    +$black = imagecolorallocate ($im,  0, 0, 0);
    +$lightgray = imagecolorallocate ($im,  230, 230, 230);
    +$darkgreen = imagecolorallocate ($im,  80, 140, 80);
    +$white = imagecolorallocate ($im,  255, 255, 255);
    + 
    +imagefilledrectangle ($im,0,0,299,199 ,$lightgray);
    +imagerectangle ($im,0,0,299,199,$black);
    +imagefilledellipse ($im,150,100,210,110,$white);
    +imagefilledellipse ($im,150,100,200,100,$darkgreen);
    +header ("Content-type: image/png");
    +imagepng ($im);
    +?>

    Figure 3.4. Verifying GD2 (checkgd2.php)

    Verifying GD2 (checkgd2.php)

    +

    In the same way as before store this file on the server and point the browser + to it. The result should be the same image as is shown in Figure 3.4. Verifying GD2 (checkgd2.php)

    +

    In order to use the library it is absolutely necessary that the + above two scrips works as described. If this is not the case the + php.ini file needs to be checked as described in + the next section.

    +
    +

    Enabling GD library in php.ini for PH5

    + +

    If neither of the two example above worked and the GD section didn't exist in + the output from phpinfo() the chances are that the GD library has + not been enabled in the php.ini file.

    +

    The first problem to solve is therefore to locate the + php.ini file in the installation. Depending on the type + of server (and OS) this can be in different places. If the system is running on + a Unix server the php.ini file is most likely stored in + either /etc/php.ini , /etc/php/php.ini + , /etc/php5/php.ini or + /etc/php5/apache/php.ini +

    +

    +

    Tip

    +

    Check the output of phpinfo() to find out what + php.ini file the installation is + reading.

    +

    +

    +

    On a windows server there is no standard location since it completely depends + on how the installation of the HTTP server and PHP was done. For example if the + WAMP server was installed and put in the top directory + c:\wamp\ the php.ini file is + installed under c:\wamp\bin\apache\apache2.2.11\bin\php.ini +

    +

    Open php.ini in a editor and locate the line

    +

    extension_dir = <some-path-here>

    +

    The directory path specified above is the directory where all PHP extension + modules are stored. On a Unix system this is typically specified as + /usr/lib/php5/extensions now examine that directory and + check if an extension called "gd.so" (for Unix) or + "gd.dll" (for Windows) exists (and is un-commented). If + this extension cannot be found then this extension needs to be installed. For + example, many Unix/Linux installation requires that the extra modules in PHP is + manually enabled/installed through the appropriate Packet manager as the example + below shows.

    +

    +

    Example 3.3. Installing GD through RPM packet manager

    + +

    +

    $/> sudo zypper install php5-gd

    +

    +


    +

    +
    +

    Verifying TTF fonts

    + +

    This section is only intended to verify if that support exists for TTF fonts. + If this does not work or if it is already known that there are no support for + TTF fonts then please go directly to Installing and configuring Font support

    +

    In order to check if basic TTF font support is available create the following + script in the document root and name it checkttf.php +

    +

    Then it is necessary to locate on the system exactly where the TTF fonts are + stored and update the defines for the paths and/or the name of the TTF fonts + that is know to exist.

    +

    +

    Example 3.4. Verifying TTF with a known font (checkttf.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php // content="text/plain; charset=utf-8"
    +// Change this defines to where Your fonts are stored
    +DEFINE("TTF_DIR","/usr/share/fonts/truetype/");
    + 
    +// Change this define to a font file that You know that You have
    +DEFINE("TTF_FONTFILE","arial.ttf");
    + 
    +// Text to display
    +DEFINE("TTF_TEXT","Hello World!");
    + 
    +$im = imagecreatetruecolor (400, 100);
    +$white = imagecolorallocate ($im, 255, 255, 255);
    +$black = imagecolorallocate ($im, 0, 0, 0);
    +$border_color = imagecolorallocate ($im, 50, 50, 50);
    + 
    +imagefilledrectangle($im,0,0,399,99,$white);
    +imagerectangle($im,0,0,399,99,$border_color);
    +imagettftext ($im, 30, 0, 90, 60, $black, TTF_DIR.TTF_FONTFILE,TTF_TEXT);
    + 
    +header ("Content-type: image/png");
    +imagepng ($im);
    +?>


    Figure 3.5. Verifying TTF with a known font (checkttf.php)

    Verifying TTF with a known font (checkttf.php)


    +

    +

    As usual point the browser to this script and fetch the image. If thing works + an image identical to what is shown in Figure 3.5. Verifying TTF with a known font (checkttf.php) should be visible.

    +

    Name of TTF font files

    + +

    The library has built in support for large number of TTF fonts, this + includes both the standard MS WEB core fonts as well as Vera and DejaVu + fonts. In addition a number of non-latin fonts are supported. This includes + both Japanese, Chinese, Hebrew and Russian fonts. See Using non-latin based fonts with JpGraph and Character encoding for more on how to use non-latin + fonts and encodings.

    +

    In order for the fonts to be usable by the library the font files must + have the following names (these are the standard names)

    +

    More information on how to use TTF fonts in scripts can be found in Chapter 8. Text and font handling

    +

    +

    Table 3.1. Latin TTF font file names

    + +
    Font family nameSymbolic nameNormal, FS_NORMALBold, FS_BOLDItalic, FS_ITALICBold italic, FS_BOLDITALIC
    CourierFF_COURIERcour.ttfcourbd.ttfcouri.ttfcourbi.ttf
    GeorgiaFF_GEORGIAgeorgia.ttfgeorgiab.ttfgeorgiai.ttf 
    TrebucheFF_TREBUCHEtrebuc.ttftrebucbd.ttftrebucit.ttftrebucbi.ttf
    VerdanaFF_VERDANAverdana.ttfverdanab.ttfverdanai.ttf 
    Times romanFF_TIMEStimes.ttftimesbd.ttftimesi.ttftimesbi.ttf
    ComicFF_COMICcomic.ttfcomicbd.ttf  
    ArialFF_ARIALarial.ttfarialbd.ttfariali.ttfarialbi.ttf
    VeraFF_VERAVera.ttfVeraBd.ttfVeraIt.ttfVeraBI.ttf
    Vera monoFF_VERAMONOVeraMono.ttfVeraMoBd.ttfVeraMoIt.ttfVeraMoBI.ttf
    Vera serifFF_VERASERIFVeraSe.ttfVeraSeBd.ttf  
    (Chinese) SimsunFF_SIMSUNsimsun.ttcsimhei.ttf  
    ChineseFF_CHINESEbkai00mp.ttf   
    (Japanese) MinchoFF_MINCHOipamp.ttf   
    (Japanese) P MinchoFF_PMINCHOipamp.ttf   
    (Japanese) GothicFF_GOTHICipag.ttf   
    (Japanese) P GothicFF_PGOTHICipagp.ttf   
    (Hebrew) DavidFF_DAVIDDAVIDNEW.TTF   
    (Hebrew) MiriamFF_MIRIAMMRIAMY.TTF   
    (Hebrew) AhronFF_AHRONahronbd.ttf   
    DejaVu Sans SerifFF_DV_SANSSERIFDejaVuSans.ttfDejaVuSans-Bold.ttf, DejaVuSans-Oblique.ttfDejaVuSans-BoldOblique.ttf
    DejaVu Sans Serif MonoFF_DV_SANSSERIFMONODejaVuSansMono.ttfDejaVuSansMono-Bold.ttfDejaVuSansMono-Oblique.ttfDejaVuSansMono-BoldOblique.ttf
    DejaVu Sans Serif CondensedFF_DV_SANSSERIFCONDDejaVuSansCondensed.ttfDejaVuSansCondensed-Bold.ttfDejaVuSansCondensed-Oblique.ttfDejaVuSansCondensed-BoldOblique.ttf
    DejaVu SerifFF_DV_SERIFDejaVuSerif.ttfDejaVuSerif-Bold.ttfDejaVuSerif-Italic.ttfDejaVuSerif-BoldItalic.ttf
    DejaVu Serif CondensedFF_DV_SERIFCONDDejaVuSerifCondensed.ttfDejaVuSerifCondensed-Bold.ttfDejaVuSerifCondensed-Italic.ttfDejaVuSerifCondensed-BoldItalic.ttf
    +


    +

    +

    +

    Note

    +

    For the DejaVu fonts there are actually two common sets of name in + usage depending on how long it has been since the fonts where + installed. The library knows of both sets of names and will try them + in order selecting to use the first one available.

    +

    +

    +
    +
    +

    Support for different image formats

    + +

    By default the standard GD image library supports the PNG graphic format.

    +

    Hence by default only PNG is supported. If JPEG support is needed this might + require additional libraries that must be installed and enabled for usage by + PHP/GD (in the php.ini file), again please see PHP + documentation for specifics. For most practical purposes PNG is a better format + since it normally achieves better compression then GIF (typically by a factor of + 2 for the types of images generated by JpGraph).

    +

    In comparison with JPEG format PNG is also better for the type of images + generated by this library.

    +

    So, the bottom line is that there should be very good reasons to choose any + other image encoding formats than PNG. By default the image format is set to + "auto". This means that JpGraph automatically chooses the best available image + encoding format using the preferred order "PNG", "GIF" and "JPG".

    +

    No support for SVG

    + +

    We have received may requests to add support for SVG image output. + Unfortunately we have investigated this and concluded that it is + (surprisingly!) not technically possible to do this. The main reason is that + with the current standard there is no way to statically determine the + bounding boxes for texts. This is further described in Appendix K. Why it is not possible to add a SVG backend to JpGraph

    +
    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch03s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch03s03.html new file mode 100755 index 00000000..53010943 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch03s03.html @@ -0,0 +1,444 @@ +Installing the library

    Installing the library

    + +

    When you have verified the necessary preconditions as described in the previous + paragraphs it is time to install the library. The "installing" part is nothing more + than copying the files in the distribution to a place in the directory structure + where you script can find the library files. On a Unix system it is common to + install PHP libraries under "/usr/share/php/". On a windows + system there is really no standard path for installing PHP libraries so you have to + decide your self.

    +

    The important thing here is that the path to the library is included in the PHP + search path, i.e. it is in one of the paths that PHP searches when it tries to + resolve a "require_once" or "include" statements. + Furthermore, the included examples and demo applications (included in the pro + version) assumes that the library is installed under the directory + "jpgraph/".

    +

    As an example the following commands will install a specific version of the + library on a Unix server. If we assume that you have downloaded the library to the + "/tmp/" directory and are already standing in this + directory the following commands will setup the library to be used

    +

    +

    root:/tmp> tar xzf jpgraph-2.5.tar.gz
    +root:/tmp> cp -r jpgraph-2.5 /usr/shar/php/
    +root:/tmp> ln -s /usr/shar/php/jpgraph-2.5 /usr/shar/php/jpgraph

    +

    +

    The last line makes a symbolic link from "jpgraph" to the actual version of the + library. This way you can try out different versions of the library without having + to make any changes in your scripts. You just point out a different version of the + library in the symbolic link.

    +

    Configuring JpGraph/PHP on a development server

    + +

    Setting up your php.ini file

    + +

    +

    Tip

    +

    To find the location of your php.ini file + create and run a script with the single line <?php + phpinfo(); ?> . The look at the output for a line saying + "php.ini file used" and you will see which + php.ini file is used.

    +

    +

    +

    Setting the memory limits

    +

    In many default configuration the allowed memory for PHP is not enough for + complex graph script since they (as many other image manipulation programs) + can require a lot of memory. On a development server there should be at + least 32MB memory allowed for the HTTP/PHP process. To verify this do the + following

    +

    +

    1. +

      Open php.ini for editing.

      +
    2. +

      Locate the line saying

      +

      memory_limit = xx

      +

      where "xx" is some number. Now make sure that you have at + least 32MB allowed by making sure the line reads

      +

      memory_limit = 32M

      +

      Note that fore very large images this might not be enough. + Consider the following example.

      +

      Assume you need to create an 1200x1024 image in true color. + Just the plain image in itself will require 1200x1020x4 bytes, + which is roughly 4.7MB RAM during internal processing the + library can need up to three times that amount of memory so this + means that just for the image the library needs around of ~15MB + of RAM. If we then take the memory needed to load PHP as well as + the entire JpGraph library and dynamically execute and parse the + library it can easily consume another ~15MB RAM. If the image is + very complex and requires a huge number of objects to be created + (a typical example is a large Gantt chart) it might be necessary + to double the allowed memory to 64MB RAM.

      +

    +

    +

    +

    Setting maximum allowed run time

    +

    By default many installations have very short maximum run time for the PHP + scripts. Common figures are 10s. For normal interactive use involving plain + text processing this is usually adequate. However, producing large and + complex images might take considerable time (as do all images processing). + For this reason the maximum time limit for PHP should be increased to a + minimum of 20s (depending on the complexity of your images as well as any + associated data processing it might be necessary to allow up to + 30-40s).

    +

    The allowed running time is controlled by the php.ini + setting

    +

    max_execution_time = xx

    +

    where "xx" is some number. Recommended setting is therefore

    +

    max_execution_time = 30

    +

    +

    Disabling output buffer

    +

    The next part of the php.ini file that might need + changing is the output buffer. In short this should be disabled and we will + shortly explain why. To check this do the following

    +
    1. +

      Open php.ini for editing

      +
    2. +

      Locate the line saying

      +

      output_buffering = xx

      +

      where "xx" is some number. Make sure that this line is + commented out, i.e. it reads

      +

      ; output_buffering = xx

      +

    This reason we want this to be commented out is that during + development we want to be able to see the potential error messages produced + by the library and having the output buffering enabled will actually prevent + this. Fully understanding why this is the case is good first step into the + added complexity of producing images with PHP compared with just outputting + text. Understanding this requires us to understand a few basic principles + about the HTTP protocol. Especially how MIME encodings of data works.

    +

    The following explanation is slightly simplified since a full description + of the HTTP protocol would bring us a bit to far in this manual

    +
    1. +

      A client (e.g. browser) requests data from the server by + issuing a GET (or possible a POST) command to the server. This + is what happens when you enter a URI i the address bar in the + browser.

      +
    2. +

      The server replies with a data stream (or an error if the + requested data wasn't available). This data stream is prepended + with header (MIME header) that tells the client (e.g. the + browser) how to interpret the data that follows. The most common + type (and the default type if no header is sent by a faulty + server) is "text/html" . This tells the client to interpret the + data as plain text with embedded HTML encoding.

      +

      When the data is to be interpreted as an image the header will + instead be one of the image headers, for example + "image/png" or "image/jpeg". When + the client receives this header it will Interpret all the + following data as an image encoded in the indicated format.

      +

      The important thing to keep in mind here is that each server + reply can have one and only one MIME type. This is the key to + further understanding the specific issues with dynamic image + generation. This explains why if a PHP script running on the + server sends a header first indicating that the following data + it sends should be interpreted by the client as an image it + cannot send both image data and some text.

      +

    We are now in a position to explain how output buffering would + make debugging more difficult.

    +

    Normally all output from a PHP script is sequentially, i.e. the header + must first be sent and then the data. If no header is sent or plain text is + sent without a header the client will interpret this as + "text/html". One purpose with "output_buffer" it to + circumvent this to allow a certain amount of output to be put in a buffer + for a while and later when some processing has determined what header should + be sent the data is prepended with the correct header and the rest of the + data is then sent.

    +

    What could now happen is the following (not unlikely scenario):

    +
    1. +

      The scripts starts executing and the image starts to be + build.

      +
    2. +

      Your script has some minor issues which produces some warnings + from PHP. These warning does not get sent directly back to the + client (the browser) to allow you to act on these warnings + instead they will be put into the output buffer. When later the + scripts starts outputting the proper image header and the image + data it gets added to the output buffer where your previous + textual PHP warning already are stored.

      +
    3. +

      Your client now receives the header that indicates that the + following data should be interpreted as an image but since that + image data is mixed with the textual warning messages it will + fail to decode the data (since it is not proper image data) and + will typical just show the image as a square with a red-cross + (FireFox) or some message along the lines of "Cannot decode image". This is all + depending on how a certain client handles a corrupt + image.

      +

    The above scenario makes it impossible to debug your script + since it will give no clue to what caused or where in your script these + warnings were generated. The way to counteract this scenario is to disable + output buffering. In this way the warning will be sent back to the client as + soon as they are generated by PHP and will allow you to act on them.

    +

    +

    Enabling adequate error checking

    +

    The final part of the php.ini file that should be + adjusted (and this is not only for the JpGraph library) is the error level. + To ensure maximum interoperability of the developed scripts they should all + run completely silent no matter what error levels are set on the server. + This means that development of all scripts should always be done with + maximum error checking enabled. The JpGraph library can safely run + completely silent even when all error checking is enabled.

    +

    The error checking should therefore be specified as

    +

    error_reporting = E_ALL | E_STRICT

    +

    to enable the highest degree of PHP error checking

    +

    +

    +

    Tip

    +

    In addition to the above setting it is a good idea to also to + makes sure that the following options are set

    +

    zend.ze1_compatibility_mode = Off

    +

    Zend engine 1 compatibility might cause problems with the + library

    +

    implicit_flush = On

    +

    This can reduce the performance and shouldn't be used on a + production server but will make all outputs sent back to the client + as soon as possible and will aid in debugging.

    +

    allow_call_time_pass_reference = Off

    +

    This is just a general good idea since call time pass references + is deprecated in PHP 5.0 and higher

    +

    display_errors = On

    +

    This makes sure all error are displayed

    +

    display_startup_errors = On

    +

    This makes sure that any initial errors thrown by PHP will be + reported

    +

    +

    +

    Setting default timezone

    +

    Starting with PHP 5.2 a warning will now be generated unless a default + time zone is explicitly specified in php.ini. To set + this find the line date.timezone in the + [Date]section and set this to valid zone. For example to + specify GMT+1 one could specify

    +

    date.timezone = Europe/Paris

    +

    Note: There should be no citation signs around the time zone.

    +

    +

    Caution

    +

    In order to use the LED module (See LED bill boards) the PHP installation must + have multi-byte strings enabled so that the function + mb_strlen() is available. This is normally + enabled at compile time for PHP by specifying the options + --enable-mbstring --enable-mbregex when configuring + the compile options.

    +

    +

    +

    +

    Caution

    +

    In order to use the PDF417 barcode module (See Chapter 25. PDF417 (2D-Barcode)) it is necessary for the PHP + installation to support the function bcmod(). + This is enabled when compiling PHP by making sure that the option + --enable-bcmath is given when configuring PHP at + compile time.

    +

    +

    +
    +

    Setting up your jpg-config.inc.php

    + +

    Apart from the standard configuration described in Installing and configuring Font support and Adapting and customizing the installation there is only one important + configuration that is specific for a development server and that is the + localization setting for error messages.

    +

    As of version 3.0.0 there are three localization options

    +
    1. +

      English error messages ("en")

      +
    2. +

      German error messages ("de")

      +
    3. +

      Production error messages ("prod"). This is not really a + localization but a different set of error messages which does + not give detailed error messages but a generic message suitable + for a production server where the end user is not helped by + detailed graph script errors. Instead a generic message is shown + together with an error code that corresponds to the detailed + error. ("prod")

      +

    In order to specify the error message localization the + following define in jpg-config.inc.php must be set the

    +

    define('DEFAULT_ERR_LOCALE','en');

    +

    The possible options are

    +

    +

    1. +

      "en", English locale

      +
    2. +

      "de", German locale

      +
    3. +

      "prod", The production version of the error messages.

      +

    +

    +

    +

    Tip

    +

    In addition to specifying the locale in the + jpg-config.inc.php file it can also be + specified dynamically in each script by calling

    +

    +

    1
    +
    JpGraphError::SetErrLocale($aLocale);

    +

    +

    +

    +
    +
    +

    Configuring JpGraph/PHP on a production server

    + +

    Setting up your php.ini file

    + +

    Apart from what is applicable to a development server as described in Configuring JpGraph/PHP on a development server the following changes should be + considered in a production environment.

    +

    + Setting the memory limits +

    +

    The one thing to keep in mind here is that each active connection will + spawn a unique PHP instance (HTTP process). This means that the memory limit + set per PHP process can cause a very high memory demand on a busy server + with many simultaneous connections. For this reason it is important that + during system test (before going into production) the actual needed memory + limit is determined.

    +

    For a busy server it is not uncommon to dimension it so it can handle 100 + simultaneous connections. If the limit of r each PHP process is set to 32MB + this means that the server needs at least ~3.2GB memory just to handle the + PHP processes (if they are all using there maximum allowed memory).

    +

    + Setting maximum allowed run time +

    +

    The same principle applies to a the allowed run time. For a production + server with high load and many simultaneous users it might be necessary to + increase the maximum allowed execution time just to be sure no process is + terminated due to it reaching its maximum allowed run time. When that + happens the PHP process will be killed an no output sent back to the client + (e.g. the browser).

    +

    + Disabling output buffer +

    +

    The output buffer should be disabled on the production server as well + since enabling this will slow down the PHP and put a higher demand on the + memory requirements.

    +

    + Enabling adequate error checking +

    +

    On a production server it is not a good idea to display all PHP error + messages to the end user so the display of error messages should be disabled + and the error messages should only be logged to a file.

    +

    Tip

    +

    On a production server it is also a good to idea to have the + following settings:

    +

    + display_errors = Off +

    +

    This makes sure that now PHP errors are displayed

    +

    + display_startup_errors = Off +

    +

    This makes sure that any initial errors thrown by PHP is not displayed + to the end user

    +

    log_errors = On

    +

    error_log = <name-of-log-file>

    +

    This makes sure all server PHP errors are logged to a specified + file

    +
    +
    +

    Setting up your jpg-config.inc.php

    + +

    On a production server it is best not to show detailed error messages to + an end user. Instead it is better to have a generic error message that + indicates a server problem and give an error code which can be decoded by + looking it up in the table in Appendix H. Error messages Using a generic error message is achieved by + setting the following define:

    +

    define('DEFAULT_ERR_LOCALE','prod');

    +
    +
    +

    Adjusting PHP include path

    + +

    As was mentioned before the library should be installed somewhere in the PHP + include path. There are two ways of configuring the include path:

    +

    +

    1. +

      setting the include path in php.ini

      +

      include_path = <file-path>

      +
    2. +

      adjusting the include path directly in the code by using the PHP + command php_ini_set() at the top of the script

      +

    +

    +

    The library examples assume that the library is available under a directory + called "jpgraph/" . This will allow the scripts to include + the library files by, for example, writing "include" or + "require_once" statements such as

    +

    require_once( 'jpgraph/jpgraph.php')

    +
    +

    Using Apache2 alias configuration during development

    + +

    +

    Note

    +

    This section only discusses alias setting using the Apache HTTP server + so this section can be skipped at first time reading the manual without + loss of continuation.

    +

    +

    Note

    +

    More detailed information on the alias directive is also available in + the official Apache documentation at http://httpd.apache.org/docs/2.2/mod/mod_alias.html

    +

    +

    +

    When accessing examples and test code through a regular bowser during + development the scripts must be available in document root (or somewhere beneath + that root) the root is traditionally named /htdocs. Having a + development code/repository directly under this root directory is not a good + idea. For example, write access to a document root (even on a development + server) should be restricted, in addition the paths given to a test team should + be the same whatever version is currently under test so storing different + versions with different names under the root is also a poor setup.

    +

    A much better and easy, approach is to use the powerful concept of alias in + Apache. This is a way of mapping a URL to a specific directory on the server. + For example if Eclipse-PDT + is used as an IDE to develop PHP it is mandatory to have a workspace setup where + all the working files resides. Assuming that a local developer has his workspace + directly in his home directory, say ~joe/workspace, we + could configure an alias so that the workspace is accessible by the alias + "http://localhost/ws/" by adding the following + configuration in the Apache setup file(s)

    +
    1
    +2
    +3
    +4
    +5
    +
    Alias /ws /home/joe/worksapce
    +<Directory /home/joe/workspace>
    +  Order allow,deny
    +  Allow from all
    +</Directory>
    +

    In this particular setup we use very liberal settings, allowing basically + everyone with server access to access the directory. Using this approach makes + it very easy to use the same test setup but allow testing of different + branches/versions of the code.

    +

    Depending on the system these configurations can reside in different places. + However, a very common structure is to keep all these small configuration files + under /etc/apache/conf.d/ The main Apache configuration + then reads all the files (regardless of there name) that are stored under this + directory.

    +

    As a final example we show a further slightly more complex example (which + actually shows how most of our developers have there systems setup for PHP5 + development). This example adds options to do directory listing and allows the + server to follow symbolic links. More information on available argument for the + directive option is available in the official Apache documentation http://httpd.apache.org/docs/2.2/mod/core.html#options

    +

    +

    Example 3.5. Alias configuration for a development server running Apache with + Eclipse-PDT

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    # Configuration for Eclipse workspace
    +#
    +<IfModule mod_php5.c>
    +      Alias /ws/ /home/joe/workspace/
    +      <Directory /home/joe/workspace/>
    +             Options         +Indexes +Multiviews +FollowSymLinks
    +             order allow,deny
    +             allow from all
    +      </Directory>
    +</IfModule>
    +


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch03s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch03s04.html new file mode 100755 index 00000000..9a2198fd --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch03s04.html @@ -0,0 +1,178 @@ +Installing and configuring Font support

    Installing and configuring Font support

    + +

    JpGraph supports two types of fonts, bitmap and TTF fonts. The advantage with + bitmap fonts are that they are supported from within the library without further + configuration. TTF fonts require some configuration and possible installation of the + actual TTF font specification file. (For more on installing TTF fonts see Configuring TTF fonts.)

    +

    The drawbacks, on the other hand, with bitmap fonts are quite a few

    +

    +

    • +

      they look quite crude and are only available in a few sizes

      +
    • +

      italic font style is not supported for bitmap fonts

      +
    • +

      they only support 7-bit ASCII characters

      +
    • +

      they only support 0 and 90 degree rotated text

      +

    +

    +

    You can read more about how to use and select among the different fonts in Chapter 8. Text and font handling

    +

    Configuring TTF fonts

    + +

    +

    Note

    +

    This could be considered an optional section since the library will + work even without TTF fonts. However, for th reasons listed previously + it is strongly recommended that TTF support is configured.

    +

    +

    +

    In the following we will assume that the FreeType library is enabled and + verified in the PHP installation (See Figure 3.2. phphinfo() GD-Information)

    +

    Due to various legal issues no TTF fonts are included in the distribution of + JpGraph since many commonly used TTF font files are copyrighted and there + distribution restricted. For the most commonly used WEB-fonts (the Microsoft + Core Fonts) the status is unclear. For many years Microsoft distributed them + freely but they are no longer available from Microsofts home page. Instead they + are available from http://corefonts.sourceforge.net/ +

    +

    There are however a fair amount of freely available high quality TTF fonts + (see below). The first thing needed is to make sure that the path defines in the + file jpg-config.inc.php corresponds to the server setup (so + that the library can find the font files)

    +
    1. +

      Open jpg-config.inc.php for editing

      +
    2. +

      Locate the define TTF_DIR (this is the define that + possible needs updating depending on your system). By default this path + will have a sensible values depending on if the library is installed on + a Windows or a Unix system.

      +
    3. +

      If you are on a Windows platform you can just point the TTF directory + path in JpGraph to use the standard Window font directory (e.g + C:\windows\fonts\)

      +
    4. +

      If you are on a Unix platform, which may not have any TTF fonts + installed, you can download and install the core MS WEB-initiative fonts + from http://corefonts.sourceforge.net/ + many Linux distributions also have automatic ways to install these + fonts. These fonts were put in the public domain by the Microsoft + Corporation but they are no longer available directly from + Microsoft.

      +
    5. +

      You can also chose to install the freely available Vera Bitstream TTF + fonts available from http://www.gnome.org/fonts/

      +
    6. +

      You can also chose to install the freely available DejaVu TTF fonts http://sourceforge.net/projects/dejavu

      +
    +

    JpGraph uses a standard naming convention for the TTF font files in order to + be able to find the correct font file that correspond to a particular font + family. This naming convention follows the standard naming of the available font + files from the distributions listed above.

    +

    If the installation of the library is made on a computer running MS Windows + then it is recommended to use the already available font files in Windows + (usually located in C:\WINDOWS\FONTS).

    +

    If the installation is made on a UNIX derivate running X11 then the font + location can differ between versions and UNIX brands. One commonly used path in + modern installations are "/usr/share/fonts/truetype/" (In + older installations it was common to put the truetype fonts under + "/usr/X11R6/lib/X11/fonts/truetype/".)

    +

    Finally we note that it is possible to install additional fonts not natively + supported by the library by using the SetUserFont() family of + methods. (In theory it is also possible to patch the jpgraph source files to + include support for other font files natively but since this requires code + modifications of the library we do not discuss this further here in the + introduction.)

    +

    Freely available TTF fonts can be found, for example, from

    +

    +

    +

    +
    +

    Using non-latin based fonts with JpGraph

    + +

    In addition to European fonts it is also possible to use non-latin based fonts + such as Cyrillic, Japanese, Chinese, Hebrew and Greek. For any of these + languages a suitable TTF font that supports the non-latin based language must be + made available to the library. Some specific rules also applies to each of the + supported languages due to the necessary character encoding needed due to + different convention when writing the character for some languages.

    +

    +

    • +

      For Cyrillic support the define LANGUAGE_CYRILLIC in + jpg-config.php must be set to + true. It is then possible to use a suitable + Cyrillic font as replacement of the ordinary font. This setting + combined with the CYRILLIC_FROM_WINDOWS and + LANGUAGE_CHARSET is used to fine tune the handling + cyrillic input. The rules are as follows:

      +

      +

      1. +

        If LANGUAGE_CYRILLIC is false no specific handling of + Cyrillic characters at all will be done.

        +
      2. +

        If CYRILLIC_FROM_WINDOWS is true then it will be assumed + the input coding by default is encoded using WINDOWS-1251.

        +

        The conversion is then done via a call to + convert_cyr_string($aTxt, 'w', 'k') + where $aTxt is replaced with the input + string to be encoded.

        +
      3. +

        If CYRILLIC_FROM_WINDOWS is false then it will be assumed + the input coding by default is encoded using KOI8-R.

        +

        The conversion is then done via the sequence of + callls

        +

        +

        1
        +2
        +3
        +4
        +
        <?php
        +$isostring = convert_cyr_string($aTxt, "k", "i");
        +$unistring = LanguageConv::iso2uni($isostring);
        +?>

        +

        +

        in oder to get a proper utf-8 internal encoding + (internally the library only uses utf-8 encoding)

        +
      4. +

        LANGUAGE_CHARSET can be used to + dynamically adjust the conversion of the input character + set when using cyrillic characters. This constant is + used to auto-detect whether cyrillic conversion is + really necessary if enabled (via the If + LANGUAGE_CYRILLIC=true) . This constant + can be set to a variable containing the currently used + character input set .A typical such string would be + 'UTF-8' or 'utf-8' (the comparison is case-insensitive). + If this charset is not 'koi8-r' nor 'windows-1251' + derivate then no conversion is done.

        +

      +

      +

      +
    • +

      For Chinese character set JpGraph supports both BIG5 and GB2312 + encoding. For BIG5 encoding the PHP installation must have support + for the "iconv()" function. Furthermore the define + CHINESE_TTF_FONT must be set to the name of the + Chinese BIG5 font that is to be used. By default this is set to + "bkai00mp.ttf". To use the Chinese BIG5 + font in the scripts one must then specify the font family as + FF_CHINESE.

      +

      To use the alternative font files + "simsun.ttc" and + "simhei.ttf" (which uses the GB2312 + encoding) the only step needed is to install those fonts in the + normal TTF font directory and then specify the font family as + FF_SIMSUN, the "simhei.ttf" is + used when the font style is specified as + FS_BOLD.

      +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch03s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch03s05.html new file mode 100755 index 00000000..01bbd5e5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch03s05.html @@ -0,0 +1,42 @@ +Adapting and customizing the installation

    Adapting and customizing the installation

    + +

    All configuration of the library is done in the file + jpg-config.inc.php. Each option in the file is extensively + documented in Appendix L. The JpGraph configuration file Here we will only cover the most important + configuration that it likely to have to be customized in order to successfully run + the library.

    +

    +

    Note

    +

    All configuration settings comes with default values that should in normal + cases be enough for a "standard" system. However for a production system you + might want to fine tune this according to your specific system setup.

    +

    +

    Tip

    +

    During development (and to some extent even on a production server) it + might be necessary to adjust some parameters in your + php.ini file. For more on this see Installing the library

    +

    +

    +

    Setting up necessary paths

    + +

    There are three categories of directory paths that can be specified. The + categories are:

    +

    +

    1. +

      Font directories, this we already touched upon in Configuring TTF fonts.

      +
    2. +

      Cache directory, the cache feature of the library is extensively + discussed in Chapter 9. Using the JpGraph cache system. The important thing to notice + here is that whatever directory you chose to use as a cache + directory it must be a directory that is writable for the process + running PHP (normally the HTTP server process, e.g. Apache)

      +
    3. +

      CSIM Cache directory (if CSIM cache feature is used). CSIM stands + for Client Side Image Maps and is a way to construct client side + drill down charts. (Today this is the only inpractice used image + mapping method but it is also possible to have Server Side Image + Maps).

      +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch03s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch03s06.html new file mode 100755 index 00000000..4df65525 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch03s06.html @@ -0,0 +1,30 @@ +Verifying the library installation

    Verifying the library installation

    + +

    After installing the library a good check that everything works is to run the + included example scripts. Worth noting is that some of the examples uses TTF fonts. + This means that if you try to run those examples on an installation that does not + have any TTF fonts configured an error message will be displayed.

    +

    Running your first example

    +

    If we assume that you have installed the library directly under the document root + on the HTTP server in a directory named "jpgraph/" you can access the + examples in the "jpgraph/Examples/" directory by pointing your + browser for example to "jpgraph/Examples/example0.php" . This + should then show the same image as is displayed in Figure 1.2. This is the very first example (example0.php)

    +

    If the above example works correctly you can run all the included examples by + pointing the browser to the script + "jpgraph/Examples/testsuit.php". This will automatically + generate all non-CSIM examples (for an explanation of CSIM graphs see ??) and show + them in one long list. Note that since this has more than 300 images it can take + some time to generate all example images.

    +

    +

    Tip

    +

    In order to generate all CSIM examples you can run the testsuit with the + URL argument ?type=2

    +

    jpgraph/Examples/testsuit.php?type=2

    +

    You will then get a number of examples of so called drill-down charts + where a number of areas of the graphs a re hotspots which can be clicked to + open a specified URL. However, in these examples all the click-URL have just + dummy values which points back to the same file.

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch03s07.html b/Societes/ric/jpgraph/docs/chunkhtml/ch03s07.html new file mode 100755 index 00000000..10437f1d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch03s07.html @@ -0,0 +1,122 @@ +Troubleshooting the installation

    Troubleshooting the installation

    + +

    Unfortunately there are many parameters in a server installation that may affect + the execution of PHP so the steps below can only give some indications of how to + further investigate some potential problems.

    +

    Experience shows that most of the trouble are caused by either an old buggy + version of the free-type TTF library or using an old antiquated version of the GD + library. So before starting trouble shooting the scripts please make sure that you + have an up to date PHP installation with the bundled version of the GD library (as + describe in the previous sections) and a working FreeType library installed.

    +
    1. +

      No image is displayed.

      +

      The first thing you should do is to isolate the problem by calling + your graph script directly in the browser. There are then two variants + of this problem.

      +

      +

      1. +

        No data is sent back from the server.

        +

        You can verify this by calling your graph script directly + in the browser and then check the source (click "view + source" menu item in the browser). If this is a truly blank + image then no data was sent back from the browser.

        +

        This means that the PHP process has been terminated + prematurely before it could send any data back. This could + be caused by either the PHP process crashing (due to a bug + in either PHP or your HTTP server) or the HTTP server + crashed. This is often due to a broken PHP installation and + more than often a problem with the True Type libraries.

        +

        It could also be caused by the PHP script running longer + than the maximum allowed execution time (as specified in + php.ini). The first thing you + should do is to increase the maximum allowed execution time. + If this does not solve the problem you should look in the + log files for both your HTTP server and PHP to try to find + clues to if the PHP process really crashed. Another + possibility is that the PHP process uses more than the + maximum allowed memory (as set in + php.ini) and then it is terminated. + So a good first step is to put some really high values for + memory and time just to take away these parameters.

        +
      2. +

        The data sent back is corrupt.

        +

        Depending on your browser this can show up differently but + a common symptom is a "red X" in the browser. In order to + debug this you should make sure that you have followed the + steps in Configuring JpGraph/PHP on a development server to make sure you + have output buffering disabled and have maximum error + checking enabled in PHP. The most common cases for this type + of problem is having enabled output buffering and some minor + errors in the script which causes PHP to emit warnings which + gets included in the image data.

        +

        A very common mistake is to have some white spaces in the + script before the opening "<?php". This + white space will be added to the output buffer and then get + mixed up with the image data causing the image data to be + corrupt. A similar problem can occur if multiple newlines + are added after the final "?>" +

        +

      +

      +
    2. +

      An error message saying "Fonts are not available or not + readable"

      +

      When an image contains TTF fonts you might get an error message saying + that the fonts are not available or not readable. If this is the case it + is first necessary to check that the font files really exist in the + directory that is specified in jpg-config.inc.php + and that they are also readable by the HTTP/PHP process. If this is the + case then it is necessary to check that the names of the font files are + the one that JpGraph assumes, see Name of TTF font files. Another problem can be if + the PHP installation is running in "safe mode" (See PHP + Manual: Security and safe mode) and has enabled strict + directory policy via an "open_basedir" restriction. This + will prevent the PHP process from reading any files outside the + specified base directory. If this is enabled there is no way around for + PHP to read any files outside this restriction and any TTF files + necessary must be moved so that they can be accessed within the realms + of the specified basedirectory.

      +

      If you are running IIS and Win2k and get the error "Can't find font" + when trying to use TTF fonts then try to change the paths to UNIX style, + i.e. "/usr/local/fonts/ttf/". Remember that the + path is absolute and not relative to the htdocs + catalogue.

      +

      If you are running on Unix server please keep in mind that file names + are case sensitive.

      +
    3. +

      An error message saying "Headers have already been + sent"

      +

      A common mistake is to have a space in the beginning of the image + script which the HTTP server will send back to the browser. The browser + now assumes that the data coming back from this script is text since it + hasn't received an explicit header. When then the image headers get sent + back to the browser to forewarn the browser of the forthcoming image + data the browser will not like that as it has already assumed the data + stream was a text stream. The browser will then give the infamous + "Headers already sent error".

      +

      Make sure that your script has no white space before the opening + "<?php" statement or a number of blank lines after + the concluding "?>"

      +
    4. +

      Issues specific to Windows and IIS

      +

      Some windows installations seems to have a problem with a PHP script + ending in more than one newline (This newline seems to be sent to the + browser and will cause a Header already sent error). To correct this + problem check all your scripts for more than one empty newline after the + ending "?>" statement. All files provided with the library + end in exactly one final newline and should not be a problem.

      +
    5. +

      TTF fonts are not displayed correctly

      +

      If the TTF fonts only shows up as yellow then the installation is used + a buggy (too old) installation of the FreeType font library and the only + thing to do is to re-install and setup PHP+GD again with a newer version + of the FreeType library. Another symptom of a an (old) buggy FreeType + library is that the fonts are not correctly rotated (the text string is + rotated but not the individual characters).

      +

    As a final advise you should read the FAQ (available in this manual + see Appendix C. FAQ) or on the JpGraph website at http://jpgraph.net/doc/faq.php

    +

    Depending on your sever it might also help to recompile PHP yourself instead of + the version included with the system. You can find typical configuration scripts to + compile PHP4 and PHP5 in the appendices, see Appendix I. Compiling PHP +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch04.html new file mode 100755 index 00000000..276750f9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch04.html @@ -0,0 +1,26 @@ +Chapter 4. Your first graph script

    Chapter 4. Your first graph script

    + +

    + What you will learn in this chapter.  + This chapter will illustrate how a basic line and bar graph can be created and it + will also show how input data should be prepared so it can be read and used by the + library. +

    +

    Some words of caution

    + +

    In order to quickly show a very first example we will create both a basic line + graph and a basic bar graph that depicts the number of sun spots (a.k.a. solar + flares) during the 19th century. The goal of this example is not to show every + possible configuration and parameter supported by the library but rather show how + simple it is to create a basic graph.

    +

    In the sections following this one we will describe more in details the + idiosyncrasies about dynamic graph generation and JpGraph so even if you don't fully + understand all the detail it will give a flavor of what is to come. As with all + complex libraries one has to start somewhere and sometimes accept some practices + without yet fully understand them. However, the goal of this manual is that after + reading it through you will fully understand every single detail shown in this + script.

    +

    So, without further due, let's start.

    +
    + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch04s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch04s02.html new file mode 100755 index 00000000..937f8fb4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch04s02.html @@ -0,0 +1,573 @@ +Graphing the number of sun spots during the 19th Century

    Graphing the number of sun spots during the 19th Century

    + +

    The historic data

    + +

    It is a well known fact that sun spots have a certain pattern and regularity. + The cause of these regular patterns are not currently fully understood (even + though investigation into this phenomenon has been made since beginning of the + 17:th century). The fact that solar storms affects the earth in terms of + interference with radio traffic and other sensitive electronic devices makes it + very interesting to keep careful records of the suns activities.

    +

    For this reason the data of solar storm is readily available and makes an + interesting first example. The data used here is taken from SIDC (The Solar + Influences Data Analysis Center) in Belgium (http://sidc.oma.be/sunspot-data/SIDCpub.php). + In this example we will use the summary historical data that shows the total + number of sun spots per year since 1700..

    +
    +

    Preparing the data

    + +

    The first step is to get the data into our PHP script which makes for a first + good discussion since all graphs needs to get data from some source. The library + itself is agnostic in regards to from where the data is collected and only needs + (and requires) data stored in a PHP array of numbers (integers or floats).

    +

    In principle the data to be plotted in the graph can come from :

    +

    +

    1. +

      Hard-coded data in the script. This is the least flexible and can + only really be recommended for examples and really static + data.

      +
    2. +

      Data stored in plain text files. (This is what we will use in this + example.)

      +
    3. +

      Data stored in binary format in flat files.

      +
    4. +

      Data stored in a database

      +
    5. +

      Data sent to the script via URI parameter passing (either GET or + POST HTTP constructs can be used).

      +

    +

    +

    What is common among all these methods is that the creator of the script has + to read the data into one (or several) data arrays that can be used by the + library. For our example the data of sunspots are stored in a plain text file in + two columns, one column for the year (with a ".5" added which indicates the + average of the year) and one column for the number of sunspots for the + corresponding year. As illustration the first 10 lines of data is shown in Figure 4.1. The first ten rows of data of sunspot activities from year + 1700.

    +

    +

    Figure 4.1. The first ten rows of data of sunspot activities from year + 1700

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    1700.5   5.0  
    +1701.5  11.0  
    +1702.5  16.0  
    +1703.5  23.0  
    +1704.5  36.0  
    +1705.5  58.0  
    +1706.5  29.0  
    +1707.5  20.0  
    +1708.5  10.0  
    +1709.5   8.0
    +


    +

    +

    From this data we need to create two arrays, one with the number of sunspots + and one with the corresponding years. If we assume that the data is stored in a + text file named "yearssn.txt" in the same directory as the + script file the function in Figure 4.2. Reading numeric tabulated sunspot data from a filewill read the data into two arrays

    +

    +

    Figure 4.2. Reading numeric tabulated sunspot data from a file

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +
    <?php
    +function readsunspotdata($aFile, &$aYears, &$aSunspots) {
    +    $lines = @file($aFile,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
    +    if( $lines === false ) {
    +        throw new JpGraphException('Can not read sunspot data file.');
    +    }
    +    foreach( $lines as $line => $datarow ) {
    +        $split = preg_split('/[\s]+/',$datarow);
    +        $aYears[] = substr(trim($split[0]),0,4);
    +        $aSunspots[] = trim($split[1]);
    +    }
    +}
    + 
    +$year = array();
    +$ydata = array();
    +readsunspotdata('yearssn.txt',$year,$ydata);
    + 
    +?>
    +


    +

    +

    In the function above we have deviated from the common practice of not + including even the most basic error handling in examples by adding an exception + in case the data file could not be read. This is to emphasize that graph scripts + which reads data from potentially disconnected sources must have real quality + error and exception handling. As this is the first example we will not discuss + the details of the error handling other than saying that the library provides + one exception class JpGraphException that is meant to be used by + clients to signal unrecoverable errors in the code. The full details on error + handling in the library is discussed in Chapter 6. Error handling

    +

    +

    Tip

    +

    In the library there is an auxiliary utility class + ReadFileData to help read data from text files. In this + class there are methods to read data from a file in either of the + following formats

    +

    +

    • +

      CSV (Comma Separated Values) format. + ReadFileData::FromCSV()

      +
    • +

      two column format (almost) as we did manually above with + ReadFileData::From2Col()

      +
    • +

      one column format + ReadFileData::From1Col()

      +

    +

    +

    +

    +

    Armed with the data in the two arrays $year and + $ydata we will now plot the data in a basic line graph with + some variations and then show the data in a bar graph.

    +
    +

    A basic line graph

    + +

    As the very first start we will create a line graph which shows sun spots as a + line graph. To keep the code focused on the graph we do not include the previous + function to read the data again in the code snippet shown below. Before we get + into the code we start by briefly discuss how your script can include the + necessary library files.

    +

    All graph scripts must include at least two files, + jpgraph.php and some plot module. If we want to create + a line plot we must include jpgraph_line.php. Slightly + depending on the server setup and what paths are defined for PHP include files + (as discussed in Adjusting PHP include path) the include paths for the + library might look a bit different. However, we recommend that you install the + library files so they can be accessed, for example using, + require_once('jpgraph/jpgraph.php') (since this is what is + assumed by the library examples). Furthermore, we would recommend that the + require_once() construct is used to avoid including the same + file multiple times.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +
    <?php
    + // Width and height of the graph
    +$width = 600; $height = 200;
    + 
    +// Create a graph instance
    +$graph = new Graph($width,$height);
    + 
    +// Specify what scale we want to use,
    +// int = integer scale for the X-axis
    +// int = integer scale for the Y-axis
    +$graph->SetScale('intint');
    + 
    +// Setup a title for the graph
    +$graph->title->Set('Sunspot example');
    + 
    +// Setup titles and X-axis labels
    +$graph->xaxis->title->Set('(year from 1701)');
    + 
    +// Setup Y-axis title
    +$graph->yaxis->title->Set('(# sunspots)');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>

    +

    +

    Before we explain this code in some more detail it is a good idea to visualize + what we get when we execute this as script. The result of running this script is + shown in Figure 4.3. Line plot showing the number of sun spots since 1700 (sunspotsex1.php)

    +

    +

    Figure 4.3. Line plot showing the number of sun spots since 1700 (sunspotsex1.php)

    Line plot showing the number of sun spots since 1700 (sunspotsex1.php)


    +

    +

    +

    Tip

    +

    You can always click on the filename in the title of a figure to view + the complete source code.

    +

    +

    +

    Let us now walk through this code in some details.

    +

    +

    Line 1-12
    +

    The size of the graph must always be specified so the first + thing to do is to create a new graph object and set the width + and height of the overall graph. All graph scripts will need to + create at least one instance of the Graph() class. + By convention in all our scripts we will name the created + instance of the Graph class "$graph"..

    +

    The second thing that all graph scripts must specify is what + kind of scales should be used. The library supports linear, + integer, logarithmic, text and date scales. Since we know that + our data consist of only integers we keep things simple and set + both the X and the Y axis scale to be integers. The scale is + specified as a string where the first half of the string + denominates the X-axis scale and the second half denominates the + Y-axis scale. So in our example we specify + 'intint'. With this explanation you can probably + guess what 'intlog' or 'linlog' would + do. Why not try it ?

    +
    Line 13-21
    +

    These lines sets some different text labels. By the naming + convention used in the library you can probably guess what all + those lines are doing. They set the overall graph title as well + as the X- and Y-axis titles. To keep the example as lean as + possible we use the default font and default size and color of + the text strings.

    +
    Line 22-27
    +

    Each graph must have at least one plot (data series) that is + added to the graph. In our case we wanted to create a line graph + so we must create an instance of the class + 'LinePlot'. We create a new instance of this + class and as a parameter use the data for the data series we + want to create the line plot from, in our case the data array + with the sun spot numbers.

    +
    Line 29
    +

    Understanding this single line is key to understanding dynamic + graph generation with PHP. This line instructs the library to + actually create the graph as an image, encode it in the chosen + image format (e.g. png, jpg, gif, etc) and stream it back to the + browser with the correct header identifying the data stream that + the client receives as a valid image stream. When the client + (most often a browser) calls the PHP script it will return data + that will make the browser think it is receiving an image and + not, as you might have done up to now from PHP scripts, text.

    +

    This is something that can be conceptually difficult to fully + understand at first and that is why we are spending the entire + next chapter Chapter 5. Fundamentals of dynamic graph generation on further exploring + this. But for now please accept that this works and by calling + the script above in your browser (it is available in the + "Examples/" directory in the + distribution as 'sunspotsex1.php') you + should get the exact same image as shown above in Figure 4.3. Line plot showing the number of sun spots since 1700 (sunspotsex1.php)

    +

    +

    +

    Let's now make a small variation of the above line graph. Let's make it a + filled line graph. instead. In order to do this we only have to add one single + line

    +

    +

    1
    +2
    +3
    +
    <?php
    +$lineplot->SetFillColor('orange@0.5');
    +?>

    +

    +

    The line above actually does two things. First it sets the basic color to + 'orange' and then it modifies this color to be 50% opaque (0.5) which makes the + grid line shine through the fill color to some extent. The whole color handling + in the library is further describe both in Appendix D. Named color list as well as in Chapter 7. Color handling. The result of adding the line above is + shown in Figure 4.4. Displaying sun spots with a semi filled line graph (sunspotsex2.php)

    +

    +

    Figure 4.4. Displaying sun spots with a semi filled line graph (sunspotsex2.php)

    Displaying sun spots with a semi filled line graph (sunspotsex2.php)


    +

    +

    Adding tick labels to the X-axis

    + +

    +

    Note

    +

    This section can be skipped at first reading since it contains + some slightly more advanced material. The reason why we have + included this section already now is that some of the issues + discussed here is an often repeated question among newcomers to the + library.

    +

    +

    +

    There is one bit of the available data that we haven't used yet and that + is the actual years. In the example above we can only see the count from + 1700. (If we just want to look at the cyclic behaviour of the number of + sunspots this is fine since what year a specific number of sunspots appeared + is not relevant.) To make it easier to see what year corresponds to the + different sunspot numbers we must change the label on the X-axis scale to + show the years instead.

    +

    There is actually a couple of ways to do this. The easiest way is to just + add the labels we have ($years) on the X-axis and instruct the + library to use them instead. This is done with a call to the method + SetTickLabels() on the X-axis. This method call takes an + array as argument and uses the values in that array to populate all labels + on major tick marks. In order to make adequate room for the scale the + library automatically selects a suitable distance between each major tick + mark.

    +

    +

    1
    +2
    +3
    +
    <?php
    +$graph->xaxis->SetTickLabels($year);
    +?>

    +

    +

    Adding this line to our previous graph will generate the graph shown in Figure 4.5. Adding tick labels to the graph (sunspotsex3.php)

    +

    +

    Figure 4.5. Adding tick labels to the graph (sunspotsex3.php)

    Adding tick labels to the graph (sunspotsex3.php)


    +

    +

    However, there is a problem in the graph above. There are valid years on + the X-axis up to "2000" but then there is a single label "320".

    +

    What is going on here? Have we already discovered + a bug in the library?

    +

    No, not really. In the way we have setup the graph we have not provided + the library with enough labels. What has happened is that the integer scale + has chosen a suitable interval between each tick label to have enough space + to be able to show the labels. As can be seen from the figure the distance + chosen with this particular graph seems to be 20 years between each tick. + The way the default labeling works is that the end tick should be labelled + and hence be an even multiple of 20 years (in this case).

    +

    Since the library needs to have tick labels for all ticks it uses the + labels we supplied as far as they go (up to 2008) but since we didn't supply + data more than up to "2008" (in the $year array) the library + does what it can do and continues with the ordinal numbers where we failed + to provide enough labels.

    +

    Now, there are a some standard ways of correcting this abomination.

    +

    +

    1. +

      We can set a manual scale to make sure the scale ends exactly + at 2008, i.e. the scale is exactly as long as our data. This is + done by submitting the wanted scale min/max as additional + argument in the SetScale() method. First the + min/max for the Y-axis and then the min/max for the X-scale. + Since we still want the Y-scale to be fully automatically + determined we just put a "0" for both min and max on the Y-scale + and specify 0 for the min x-value and then the exact number of + sunspots we have measured as the maximum x-value.

      +

      +

      1
      +2
      +3
      +
      <?php
      +$graph->SetScale('intint',0,0,0,max($year)-min($year)+1);
      +?>

      +

      +

      The result of this is shown in Figure 4.6. Manually specifying the X scale to use just the supplied X values (sunspotsex4.php)

      +

      +

      Figure 4.6. Manually specifying the X scale to use just the supplied X values (sunspotsex4.php)

      Manually specifying the X scale to use just the supplied X values (sunspotsex4.php)


      +

      +
    2. +

      An alternative way to get labels is to use a callback function + to specify the labels. This works so that the library calls the + user specified function and as argument passes the label (or the + value of the label) that the library intends to put on a tick. + The library will then use as the actual label whatever string + value we return from our function. Since we know that the + integer label 0 (the first tick) corresponds to the first value, + i.e. "1700" we can simply take whatever label we get as + argument, add "1700" and return that value. This way all labels + will be properly named and even if the scale extends far beyond + where we have data a sensible tick label will be shown.

      +

      A suitable callback function together with the method to + instruct the library to use this callback would be

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +
      <?php
      +// ...
      + 
      +// Label callback
      +function year_callback($aLabel) {
      +    return 1700+(int)$aLabel;
      +}
      + 
      +// ...
      + 
      +$graph->xaxis->SetLabelFormatCallback('year_callback');
      + 
      +// ...
      + 
      +?>

      +

      +

      and the result can be seen in Figure 4.7. Using a callback to get correct values on the x axis (sunspotsex5.php)

      +

      +

      Figure 4.7. Using a callback to get correct values on the x axis (sunspotsex5.php)

      Using a callback to get correct values on the x axis (sunspotsex5.php)


      +

      +
    3. +

      There is one more way to handle this issue which we will not + cover in detail yet. This is to use a "text" scale. The + "text"scale can be used when there is no need to show numeric + values on the axis. A typical use for text scale would be to add + labels to mark bar graphs. Of course a text can contain numeric + strings that would make it visually indistinguishable from a + "real" numeric value.

      +

      For text scales every label counts. So by default the library + will assign a tick mark for each ordinal so that every label is + used. In some cases this will just be two dense and then the + tick and the labelling can be adjusted by calling the two + methods Axis::SetTextTickInterval() and + Axis::SetTextLabelInterval() to get to a wanted + result. But for now we do not discuss this technique further + here since it would bring too far.

      +

    +

    +
    +
    +

    A basic bar graph

    + +

    As a final illustration we will show how easy it is to change the plot type. + We will make a small modification of the previous script and display the sun + spots as a bar graph instead. In order to do this we take the code from Figure 4.4. Displaying sun spots with a semi filled line graph (sunspotsex2.php) and just change the creation of an instance + of the LinePlot() class to instead be an instance of the + BarPlot() class (to make the code more readable we also change + the name of the variable where we store the instance so it makes more sense). In + order to use this class we must also change the include statement so that the + bar module is included by adding the statement + require_once('jpgraph/jpgraph_barplot.php'). The changed code + would now look like this

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +
    <?php
    +// ...
    + 
    +// Create the bar plot
    +$barplot=new BarPlot($ydata);
    + 
    +// Add the plot to the graph
    +$graph->Add($barplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    + 
    +?>

    +

    +

    and would result in the graph displayed in Figure 4.8. Changing the plot type to a bar plot instead (sunspotsex6.php)

    +

    +

    Figure 4.8. Changing the plot type to a bar plot instead (sunspotsex6.php)

    Changing the plot type to a bar plot instead (sunspotsex6.php)


    +

    +

    Since there are so many bars in small space we cannot see the individual bars + in the example in Figure 4.8. Changing the plot type to a bar plot instead (sunspotsex6.php) . So lets modify the script so that it only + shows the last 20 years of measurements so that we can see the individual bars. + To set this up there are two things we must do

    +

    +

    1. +

      Change the scale ot a text scale since we want to make sure each + value is displayed. In addition the text scale actually changes one + more thing that we haven't mentioned. Using a text scale also + changes the alignment of the labels. For linear, integer, + logarithmic scales the labels are placed cantered below the tick + marks. For text labels they are instead place in between the tick + marks. This is the most common way of displaying bar graphs. This is + one more reason to think of text scales as a special scale mostly + suitable for bar graphs.

      +
    2. +

      Add two lines of code to "chop off" the extra not wanted data in + the input data arrays.

      +

    +

    +

    The following code snippet shows the necessary modifications to the previous + script

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +
    <?php
    +// Just keep the last 20 values in the arrays
    +$year = array_slice($year, -20);
    +$ydata = array_slice($ydata, -20);
    + 
    +// ...
    + 
    +// Specify what scale we want to use,
    +// text = txt scale for the X-axis
    +// int = integer scale for the Y-axis
    +$graph->SetScale('textint');
    + 
    +// ...
    +?>

    +

    +

    The final graph with the "zoomed" last 20 years can now be seen in

    +

    +

    Figure 4.9. Sunspots zoomed to only show the last 20 years (sunspotsex7.php)

    Sunspots zoomed to only show the last 20 years (sunspotsex7.php)


    +

    +

    Since the scale is larger we can now actually see the individual bars. By + default the library choses a light blue color to fill the interior. (Try to see + what happens if you add the method call + "$barplot->SetFillColor('orange@0.5');" just after the + "$barplot" variable has been assigned the new BarPlot + object.)

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch05.html new file mode 100755 index 00000000..403837d2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch05.html @@ -0,0 +1,51 @@ +Chapter 5. Fundamentals of dynamic graph generation

    Chapter 5. Fundamentals of dynamic graph generation

    + +

    + What you will learn in this chapter.  + The purpose of this chapter is to put dynamic image generation in perspective and + illustrate how HTML tags is used to call image generating scripts. Even if You are + familiar with PHP it is strongly recommended to quickly browse through this chapter + to make sure all concepts are known. If You fully understand and can explain the + concept of MIME types, HTTP streams and why the "Headers already sent error" error is a very common + error when generating dynamic images with PHP it is probably safe to skip this + chapter. Otherwise it might be wise to read through this chapter at least + once. +

    +

    Making sense of HTTP streams and MIME types

    + +

    The following explanation is slightly simplified since a full description of the + HTTP protocol would bring us a bit too far in this manual

    1. +

      A client (e.g. browser) requests data from the server by issuing a GET + (or possible a POST) command to the server. This is what happens when + you enter a URI in the address bar in the browser.

      +
    2. +

      The server replies with a data stream (or an error if the requested + data wasn't available). This data stream is prepended with header (MIME + header) that tells the client (e.g. the browser) how to interpret the + data that follows. The most common type (and the default type if no + header is sent by a faulty server) is "text/html" . This tells the client to + interpret the data as plain text with embedded HTML encoding.

      +

      When the data is to be interpreted as an image the header will instead + be one of the image headers, for example "image/png" or "image/jpeg". When the client receives this + header it will interpret all the following data as an image encoded in + the indicated format.

      +

      The important thing to keep in mind here is that each server reply + (initiated by a call from the client) can only have one and only one + MIME type. This is the key to further understanding the specific issues + with dynamic image generation. This explains why if a PHP script running + on the server sends a header first indicating that the following data it + sends should be interpreted by the client as an image it cannot also + include text since only one header can be used for one HTTP stream. +

      +
    +

    What happens on a WEB-page with, for example, multiple <img> + tags is that the browser issues a separate GET command for each of these images. So + even though it can look like a fetching a single WEB-page can have different content + each individual request to the server only have one single MIME type.

    +
    + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch05s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch05s02.html new file mode 100755 index 00000000..ba1a9ff6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch05s02.html @@ -0,0 +1,49 @@ +What is an image?

    What is an image?

    + +

    This might be strange question and you might already now the answer but having a + true understanding will help. An image is simply a data stream of octets (bytes) + specifying the exact color of a number of pixels. A typical image uses 32 bits to + specify the color which means it can encode 2^32 different colors (Homework: How + many gray levels is possible with 32 bits?). It would be perfectly possible to send + this data stream as it is and indeed this is how the bitmap (BMP) format specifies + the data. However, image data usually have a lot of redundancies that can be used to + reduce the size of the data that needs to be transmitted to specify any given image. + These compression formats are what is more commonly known as for example PNG, JPEG + or GIF type of images. So it is actually more correct, in our view, to look upon + these formats as different compression techniques rather than as true image formats.

    +

    Contrary to popular belief it is not the suffix on a file per se that identifies a + particular file as an image on a HTTP server but rather the mapping on the server + that instructs the server to send back a particular header for a particular file + type (as identified by the file suffix), the MIME type. This might not seem like an + important distinction to make but keeping this in mind will help understanding how + images are created with a PHP script.

    +

    A normal PHP scripts sends back character data (or more likely HTML encoded + character data) that is displayed by the browser. However it is nothing that stops + the PHP script from sending back data that instead should be interpreted as an image + assuming of course we know how to create such data..

    +

    How the client (i.e. the browser) should interpret the data sent is all controlled + by the header that is sent before the data. So this now leads us to the idea that if + our PHP script by some means constructs a valid image, compressed in a known format + (say PNG), we can tell the client to interpret the data we send back as an image by + just making sure we first send a header indicating that the data is an image.

    +

    This could now lead us to the perhaps surprising but crucial insight that if we + call our script that sends back valid image data "myimage.php" + and open it in a browser, for example by opening the local URI + "http://localhost/myimage.php" for the browser this is no + different then opening an image directly (for example + "http://localhost/myimage.png")

    +

    The only difference is that in the first case (our PHP script) we create the + header and data our self and in the second case the HTTP server looks up the file + suffix (*.png) to find out what kind of header to send before reading the file and + just passing on the data to the client.

    +

    Armed with this new knowledge we realize that our PHP script is an image for all practical purposes and intent from + a clients point of view. So we could safely name our PHP script as a target for an + <img> tag. This gives us the final and most common way to + call a graph script in a HTML page.

    +

    <img src="myimage.php">

    +

    in exactly the same way as we would do with the old type of images. The "*.php" + suffix is no problem since the client (e.g. the browser) don't care what the file + ending is. It only cares about what header the server returns. If that header tells + the browser that the data received should be interpreted as a PNG image it will do + so regardless of the name of the source file on the server.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch05s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch05s03.html new file mode 100755 index 00000000..7f9b8b33 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch05s03.html @@ -0,0 +1,23 @@ +Static vs dynamic images

    Static vs dynamic images

    + +

    Having understood how we can generate images using a PHP script a new idea might + be forming. There is nothing that says that we have to create the same image using + the same data every time the graph script is called. We could for example randomly + select a pre-stored image in a directory and every time we call (the same) graph + script and new image is returned. Hence, with PHP scripts we can create dynamic + images that generate different images depending on some yet to be specified + parameters even though the script name stays the same. This is a new behaviour + compared with our normal images.

    +

    This could also lead to a new, and very real, problem which has to do with the + local caching most browsers do in order to avoid re-fetching already fetched objects + such as images. Normally a browser will check the time stamp on the file on the + server and compare with the latest fetched version it has stored locally. If the + browser sees that the file on the server is older than what it already has it will + not re-fetch the file.

    +

    Since a dynamic image is produced by a script and the script will stay the same + even if the produced image is changing (due to new data) the browser might still + think that the image has not changed since the script is the same and will not + bother re-fetching it again. The exact behavior of the browser cache is usually + adjustable by the end user and hence out of control for us who writes the script. A + simple way to always force the client to re-fetch the dynamic image is described in Forcing the browser to update your graph

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch05s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch05s04.html new file mode 100755 index 00000000..61a4611d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch05s04.html @@ -0,0 +1,36 @@ +Dynamic images on the command line

    Dynamic images on the command line

    + +

    It is also possible to generate images directly using the command line version of + PHP. This works the same way as the normal "through the browser" generation with the + exception that no HTTP headers will be generated. Only the binary image data.

    +

    This could be an effective way to make an efficient web-site by having some + automatic creation of images at regular interval (perhaps using some kind of + cron-job) that are referenced as usual (with an + <img> tag) in the scripts. This will avoid having to + re-generate the image every time a visitor hits the site.

    +

    Please make sure that you run the command line version of PHP (cli). Using the CGI + SAPI version of PHP will not work since then the HTTP headers will be generated.

    +

    +

    Note

    +

    If the CGI version is used the generation of headers may be suppressed by + adding the '-q' option.

    +

    +

    +

    You can easily check the version installed by the command line

    +

    +

    $/> php --version

    +

    +

    this should give a reply with something like

    +
    PHP 4.3.8 (cli) (built: Aug 29 2004 18:48:13) Copyright (c) 1997-2004 The PHP Group Zend Engine v1.3.0, 
    +Copyright (c) 1998-2004 Zend Technologies
    +

    The important thing here is the (cli) marker. The JpGraph library + check from what SAPI API it is invoked from and adjusts the header generation + accordingly.

    +

    If all the above requirements are met then images can be generated directly on the + command line and stored in a suitable file. For example by

    +

    +

    $/> php myimage.php > image.png

    +

    +

    Please note that the file extension on the image file should match the format in + which the image is generated.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch05s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch05s05.html new file mode 100755 index 00000000..916634fe --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch05s05.html @@ -0,0 +1,380 @@ +How to generate images with JpGraph library

    How to generate images with JpGraph library

    + +

    The two common steps for creating and using a Graph on your Web-page are

    +

    +

    1. +

      Create a script that constructs the graph, by getting the data and + specifying how the graph should look, the size, what colors to use, what + fonts to use and specifying other augmentations on the graph.

      +
    2. +

      On the HTML page where the graph(s) should be displayed include add + one or more <img> tags which links to the PHP graphs + script. Of course it is perfectly possible to call the image script + directly in the browser to just display the generated image in the + browser. This way it is possible to include any number of graphs on the + Web-page.

      +

    +

    +

    Tip

    +

    One further thing to keep in mind is that it is also possible to pass + arguments to the image script via the normal HTTP GET/POST arguments.

    +

    For example

    +

    +

    <img src="showgraph.php?a=1&b=2"> 

    +

    +

    This could be used to control the appearance of the image or perhaps send data + to the image which will be displayed. Note that this is probably not the best + way to send large amount of data to plot. Instead the only practical way, for + large data sizes, is to get all the data in the image script directly, perhaps + from a DB. Another alternative for large amount of data to be sent to the image + script is by creating a POST request to the image script. This is further + discussed in ?? (Getting hold of the data to be displayed)

    +
    +

    The standard steps of setting up a graph

    + +

    When it comes to the structure of your imaging script they will generally have + the following structure

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    <?php
    +// ... Include necessary headers 
    +require_once 'jpgraph.php';
    +require_once '....';
    + 
    +// Create the graph instance
    +$graph = new Graph($width,$height, ...); 
    + 
    +// Specify what scale should be used in the graph
    +$graph->SetScale('...');
    + 
    +// ... code to construct the graph details and plot objects
    + 
    +// Add one or many plot objects to the graph
    +$graph->Add(..); 
    + 
    +// ... and send back the graph to the client
    +$graph->Stroke();
    +?>

    +

    +

    JpGraph is completely Object oriented so all calls will be action on specific + instances of classes. One of the fundamental classes is the Graph() + class which represents the entire graph.

    +

    After the creation of the Graph() object all the code lines to + construct the details of the graph are added. The final method called in an + image script will most likely be the Graph::Stroke() method. This + will send the constructed image back to the browser. A variation of this is used + if the graph are supposed to have image maps (CSIM). In that case the final + method will be Graph::StrokeCSIM()

    +

    +

    Caution

    +

    As discussed in Making sense of HTTP streams and MIME types no text can be + returned from an image script. Beware!

    +

    +

    +

    In addition to this standard usage pattern you can also choose to:

    +

    +

    1. +

      ... send the graph directly to a file. This is done by specifying + a filename as parameter to the final Stroke() method + call. See Writing the image directly to a file for more detailed + information.

      +
    2. +

      ... access the GD image handler for further image processing (also + needed to include the image in an PDF file, see Appendix C. FAQ)

      +
    3. +

      ... make use of the built-in cache system to send back a + previously generated image. The cache system, which lessens the + burden of the PHP server, works by avoiding running all the code + that follows the initial Graph() call by checking if + the image has already been created and in that case directly send + back the previously created (and stored in a file) image file to the + browser. The filename used for the image can be either manually + selected or automatically created based on the script name. In + addition it is also possible to specify a timeout value in the + initial call to the Graph() constructor to indicate how long the + image in the cache directory should be considered valid before a new + image is generated. A full description of the JpGraph cache system + is available in Efficient graph generation using the built-in cache subsystem.

      +

      +

      Note

      +

      The cache system by default is disabled and must be + enabled by setting the proper define in the file + "jpg-config.inc"

      +

      +

      +
    4. +

      ... combine several graphs in the same image using the + MGraph() class (Multi-Graph). This is an advanced + technique described in ??.

      +

    +

    +
    +

    Choosing the image compression format for JpGraph

    + +

    By default JpGraph automatically chooses the image format to use in the order + PNG, JPEG and GIF. The exact format depends on what is available on the system + the library is installed on. There are two ways you can influence the way the + graphic format is chosen:

    +

    +

    1. +

      Change the default graphic format by changing the DEFINE (in + jpg-config.inc.php)

      +

      DEFINE('DEFAULT_GFORMAT','auto')

      +

      For example; if you by default want all your images to be + generated with JPG encodation the define should be changed to

      +

      DEFINE('DEFAULT_GFORMAT','jpg')

      +
    2. +

      By dynamically (in your script) select the wanted compression + format with a call to

      +

      Image::SetImgFormat()

      +

      For example; if you want your image to use the JPEG format

      +

      + $graph->img->SetImgFormat('jpeg')

      +

      (The above line assume that you have called your variable that + holds the instantiated Graph() object + "$graph"

      +

    +

    +
    +

    Sending back the image to the browser

    + +

    The very last statement in almost all graph scripts is the line

    +

    +

    $graph->Stroke();

    +

    +

    +

    Note

    +

    Actually there are some valid exceptions to this when you do some more + advanced graph generation involving caching together with the CSIM + functionality.

    +

    +

    +

    This line starts the actual graph creation. All method calls up to this stage + has just been to set the scene for the library and specify all necessary + parameters. It is first when you make the call to the Stroke() + method the library actually starts to build the image. Assuming there are no + errors detected when the image is generated the library will now take the + following steps in principle:

    +

    +

    1. +

      Start building the image in memory. This is done by analyzing the + specified parameters and making use of the supplied data in order to + create the various plots that have been specified.

      +
    2. +

      Check what headers are needed, i.e. what image compression are + used for the graph, and send that header back to the client.

      +

      The library also have to check how the library was called since if + it was called from the command line no MIME headers should be sent + back at all, just the raw image data. Running the command line + version of PHP will allow you to dynamically create images without + using a HTTP server.

      +
    3. +

      Send the actual image data representing the built up image back to + the client

      +

    +

    +

    The dreaded: Headers has already been sent error

    + +

    This is an error that everyone, and we really mean everyone, will see one + time or the other when producing dynamic images with PHP.

    +

    First, this is not a problem with JpGraph per se. What has happened is + that your PHP script which produces the image has already returned some data + to the client before the image header has been sent.

    +

    This is most often caused by one or more spaces before the first + "<?php" statement. What happens is that the server + normally sends back all data it finds in the files it reads. Since the + server no sees a space, a perfectly valid character, it will send that data + back to the client. However, before it does that it will automatically + generate a header. Since it has seen a normal character data it will + generate a header telling the client to expect a data stream of + characters.

    +

    When later JpGraph tries to send its image header the server will detect + that a header has already been sent and since each HTTP data stream can only + have one type (and hence only one header) it will generate an error message + which is sent back to the client.

    +

    To correct this error check your files for any output (even a single + space) before the call to Graph::Graph() (or + Graph::Stroke()) If you are running on older version of a + Windows server this problem could also be caused by blank line at the end of + the files. On some older Windows versions together with PHP4 it might also + be called by a file ending in a newline (which all the JpGraph library files + does) Remove the newline so that the file ends just after the final + "?>" Also remember that when you include external file + using include/include_once and so on PHP includes the whole + content of the file; this content of the file also includes any potential + carriage return/line feed or "blank" space before "<?php" + and after "?>" These "dirty characters" will cause the problem + just described.

    +
    +
    +

    Writing the image directly to a file

    + +

    In addition to just streaming the file back to the browser it is also possible + to write the file directly to a named file. The file name is given as an + argument to the Graph::Stroke() method. For example as

    +

    $graph->Stroke('/tmp/myimage.png');

    +

    There are three important things to note here

    1. +

      The PHP process must have write permission on the directory you + are trying to write the image file on. If you are running PHP + through your browser this means that the HTTP server process must + have write permission on that directory.

      +
    2. +

      The file suffix (e.g. '.png') should match the image + compression type used.

      +
    3. +

      If the image is streamed directly to a file and not back to the + browser the script can of course return ordinary text.

      +
    +

    Writing the image to both a file and stream it back to the + browser

    + +

    In this case you should instead use the method + Graph::StrokeStore($aFileName) which was introduced in + version 2.5 of the library. If you are on a previous version and for various + reasons cannot upgrade then you can use the following "trick" to achieve + this.

    +

    The idea is to use the _IMG_HANDLER option that forces the + Graph::Stroke() to just return the image handler and then + stop. We can then manually first send the image to the chosen file and then + stream it back to the browser using some internal methods in the library. + The following code snippet shows how this is done. +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php
    + 
    +// ... necessary includes ...
    + 
    +$graph = new Graph(400,300);
    + 
    +// ... code to generate a graph ...
    + 
    +// Get the handler to prevent the library from sending the
    +// image to the browser
    +$gdImgHandler = $graph->Stroke(_IMG_HANDLER);
    + 
    +// Stroke image to a file and browser
    + 
    +// Default is PNG so use ".png" as suffix
    +$fileName = "/tmp/imagefile.png";
    +$graph->img->Stream($fileName);
    + 
    +// Send it back to browser
    +$graph->img->Headers();
    +$graph->img->Stream();
    +?>
    +
    +
    +

    Alternatives to streaming or storing the image

    + +

    There are also two predefined filenames which have special meaning when + supplied as argument ot the Stoke() method.

    +

    +

    _IMG_AUTO
    +

    This will create a file in the same directory as the script + with the same name as the script but with the correct image + extension.

    +
    _IMG_HANDLER
    +

    Specifying this filename will not create a an image to file + nor stream it back to the browser. Instead it will instruct the + Stroke() method to just return the handle for + the GD image. This is useful if you later want to manipulate the + image in ways that are not yet supported by JpGraph. For example + include the image in a dynamically generated PDF file. See Appendix C. FAQ for a detailed example how to + include an image in a PDF generated with the "fpdf" + library.

    +

    +

    +
    +

    Forcing the browser to update your graph

    + +

    Some browser may not send back a request to the HTTP server unless the user + presses "Refresh" (F5 - in most browsers). This can lead to problems that the + user is seeing old data since the file stamp of the script might not change but + the data the script is using to create the image/graph is. A simple trick is to + add a dummy time argument which is not used in the script.

    +

    For example

    +

    <img src="myimagescript.php?dummy=\'.now()."> +

    +

    Since the dummy argument will be a new number whenever the browser checks it + the browser understands that it must re-fetch the script and force the image to + be reloaded and redisplayed.

    +

    It is also important to be aware of any internal caching the browser might do. + The general problem with dynamically generated images is that the image + generating script (file) remains the same. This makes the browser believe that + the data hasn\'t changed (since the script is the same) and if the browser + already has issued a previous GET request and has the data cached it will not + send a new GET if the time stamp on the file is the same since it then believes + it should and can use the old browser cached version.

    +
    +

    Printing the generated image

    + +

    Some browsers, most notable IE (< v7) can have issues printing a dynamic + image. This is because the designers of IE assumed that all images are + traditional images that are available as static image files. Not that they could + be dynamically generated. This unfortunately have some implications.

    +

    +

    1. +

      IE will often (always?) re-fetch the page when preparing to print. + This means that a new image will be generated and is perhaps very + different from what the user thinks he is printing (if the data is + changing rapidly).

      +
    2. +

      Some older versions of IE simply refuses to print dynamic images + if they are not available as a static "*.png", "*.jpg" etc. file. + The only known workaround is to make sure to use static + images.

      +

    +

    +

    There is one final reported problem to be aware of. Normally most browsers + will support "right-clicking" on an image to download the image locally. + However, some older versions of IE will become very confused when dynamic images + are used. This could manifest itself as that the file type is not the wanted, + for example, trying to download a "*.png" image could cause the file to be saved + as a "*.bmp" file instead.

    +

    Newer versions of IE seems to be able to handle dynamic images much + better.

    +

    It should also be mentioned that some older versions of FireFox (< v3) + could in some circumstances fetch a dynamic image twice causing unnecessary load + on the server (See FireFox + Bugzilla). However, there are no known issues with dynamic images in + current versions of FireFox and IE (i.e. IE v8).

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch05s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch05s06.html new file mode 100755 index 00000000..aa258f91 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch05s06.html @@ -0,0 +1,77 @@ +Efficient graph generation using the built-in cache subsystem

    Efficient graph generation using the built-in cache subsystem

    + +

    The full explanation of how to use the JpGraph cache system is deferred to Chapter 9. Using the JpGraph cache system so this early section is just to explain the + principles and why you probably want to read through the full chapter later + on.

    +

    The core problem is that generating images can require a lot of CPU time. If we + combine this with the interpreted nature of PHP we can get a potential lethal + performance mixture. For example, if a web page uses one dynamically generated graph + and at its peak the site has 50 hits per second this means that the PHP graph script + also has to be called 50 times a second. On a high end server a typical graph takes + in the range of 0.02s up to 0.2s (and some complex graph, for example an + anti-aliased Contour-plot, can take up to 1s) to generate using a plain + non-accelerated installation (see more on supported PHP Accelerators in Chapter 11. NuSphere PHP accelerator).

    +

    If we furthermore makes the realistic assumption that the site needs to run some + database services and generate other content as well the graph script itself might + not be allowed to use more than 50% of the available CPU bandwidth. It is now easy + to see that we are in trouble.

    +

    Continuing with the example. Assuming our graph is medium complex and takes a + whole 0.04s to generate. This means that if the server does not do anything more + than just creating images then we can crank out 1/0.04 or 25 graphs per second per + core at maximum. If we then take the 50% load into account it means that we could + only be allowed to generate ~12 graphs per second per core and remember that this + was on a high end server. If we now have more than 12 hits per second or have a more + average server with a less powerful CPU we are heading directly for a seriously + under dimensioned server.

    +

    If we assume we are running our server on a dual-core CPU this gives us an upper + practical limit of 24 graphs per second per server.

    +

    There are a couple of ways to counteract this problem but none is a 100% + solution.

    +
    1. +

      Introduce load balancing among several servers. This is a common way + to dynamically adjust to varying loads but without some serious + investments into a server farm it is still possible to overload the + system.

      +
    2. +

      Reduce the complexity of the graphs. However there is still a limit, + even very simple and basic graphs takes in the order of 0.02s on a high + end server due partly to the cost PHP parsing of all the library files. + This means that the upper limit is still valid.

      +
    3. +

      Make use of a PHP accelerator. If you are running a professional + server this is a must. We would go so far as to say that running a + professional PHP server without using any of the available PHP + accelerators borders on gross misconduct on the behalf of the + information architect that did the logical server design. Using a PHP + accelerator we can normally expect to get an almost 100% improvement. + Taking the previous example as a case we can probably expect an upper + limit of ~24 graphs per second per core instead of the normal + ~12.

      +
    4. +

      Make use of the built in cache system in JpGraph. This system if set + up correctly will avoid the problem by not having to generate the same + (or almost the same) image over and over again. The core idea of the + system is the observation that the majority of the data presented on a + WEB page is changing only very slowly compared with the hits a server + gets.

      +

      For example, if a server has a graphical overview of defects by + showing inflow/outflow there is probably a good case to state that the + data change sufficiently slowly that it is probably not necessary to + re-generate the graph more than 6 times per day (or perhaps even just + once per day).

      +

      The JpGraph cache system allows you to do just that. What you do is + specify a timeout. When the server calls the graph script the script + first checks if a previous image has been generated. If that is the case + it then checks how old the image is and if it is newer than the timeout + limit then the existing image is sent back. It is just in the case that + there isn't already any image (the script has never been run) or that + the existing image is too old (older than the specified timeout limit) + that the image gets generated again.

      +

      You could of course do all of this manually but the library has built + in support for this that will allow you to use the system without + changing a single line in your existing scripts. It is all taken care of + in the background.

      +

    For a production server the recommended setup is to use a combination + of load balancing, a suitable PHP accelerator and enabling the JpGraph cache + system.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch06.html new file mode 100755 index 00000000..01ce5dba --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch06.html @@ -0,0 +1,67 @@ +Chapter 6. Error handling

    Chapter 6. Error handling

    + +

    The problem with error messages and images

    + +

    Why a whole chapter on error handling? The answer is that error handling with + scripts that produces images requires a slightly different approach than normal + error messages. In order to appreciate the added complexity one needs to consider + how a graph script is called. Usually a graph script is called from an + <img> tag. This means that the client (e.g. the browser) + expect image data to be sent from the script. If we instead send a textual error + message the browser will not be able to display anything. It was expecting a stream + with image data and the data received was a representation of an error message which + of course cannot be interpreted as an image.

    +

    To handle this problem the error messages produced by the library are normally + generated as an image. A typical error message can be seen in Figure 6.1. Typical image error message

    +

    Figure 6.1. Typical image error message

    + +
    Typical image error message
    +

    +

    There is one exception to this rule and that is in the case of the "Headed already + sent" error message. This means that the client has already received an header and + with probability bordering on certainty this is a text header. Hence in this case it + does not make sense to send an image so this, and only this, error message is sent + as a normal "text/html" type message. A typical example how this message is shown in + the browser can be seen in Figure 6.2. The "Header already sent error message"

    +

    Figure 6.2. The "Header already sent error message"

    + +
    The "Header already sent error message"
    +

    +

    When you get this error (and we mean when - not if) take a very close look at the + text in red. This will tell you in what file and what line the erroneous output + started. In most cases this will be an innocent looking space or a tab character. It + could also be caused by multiple newlines at the end of a file. Since by definition + these mistakes can be hard to spot since spaces and tabs are not normally visible in + an editor so take care!

    +

    Catching errors in other parts of the system while creating images

    + +

    The problem described in the previous section will also apply to error + messages that are generated directly from PHP as well. In order to be able to + see any potential error messages during development it is possible to instruct + the library to intercept PHP error messages and convert them to image messages + instead. This is controlled by the two defines + INSTALL_PHP_ERR_HANDLER and CATCH_PHPERR define in + jpg-config.inc.php +

    +

    +

    INSTALL_PHP_ERR_HANDLER
    +

    Setting this define to true will make the library install a + custom error handler which will catch all PHP error messages and + convert them into an image like what can be seen in Figure 6.1. Typical image error message.

    +

    By default this is disabled.

    +
    CATCH_PHPERR
    +

    This defines control whether the library shall check for any + generated error message that are stored in the global PHP + pre-defined variable php_errmsg. This can be very + useful during development if an error has occurred prior to + calling the graph script. This error will then be displayed as + an image.

    +

    By default this is enabled.

    +

    +

    +
    +
    + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch06s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch06s02.html new file mode 100755 index 00000000..c1ac2e83 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch06s02.html @@ -0,0 +1,78 @@ +Available error messages

    Available error messages

    + +

    All error messages that can be generated by the library are listed in Appendix H. Error messages

    +

    Localizing error messages

    + +

    The library includes two (actually two and one pseudo) localizations of the + error messages. As of version 2.5 the library supports English and German error + messages. The choice of which localization of error messages that should be used + can be done in two ways; either by specifying a global define in + jpg-config.inc.php or

    +

    As of version 2.5 there are three localization options

    +
    1. +

      English error messages ("en")

      +
    2. +

      German error messages ("de")

      +
    3. +

      Production error messages. This is not really a localization but a + different set of error messages which does not give detailed error + messages but a generic message suitable for a production server + where the end user is not helped by detailed graph script errors. + Instead a generic message is shown together with an error code that + corresponds to the detailed error. ("prod")

      +

    In order to specify the error message localization the following + define in jpg-config.inc.php must be set the

    +

    define('DEFAULT_ERR_LOCALE','en');

    +

    The possible (string) options are

    +
    1. +

      "en", English locale

      +
    2. +

      "de", German locale

      +
    3. +

      "prod", The production version of the error messages.

      +

    It is also possible to dynamically set the localization of error + messages by calling the static method + JpGraphErr::SetErrLocale($aLocaleString) .For example, in order + to dynamically change to German locale the following method call would be + used:

    +

    JpGraphErr::SetErrLocale('de');

    +

    As an example of the German locale the "Header Already Sent" error message localized in + German are shown in Figure 6.3. The "Header already sent" error message using German locale

    +

    Figure 6.3. The "Header already sent" error message using German locale

    + +
    The "Header already sent" error message using German locale
    +

    +

    Note

    +

    There is one potential issue with specifying the locale dynamically. Since + the call to set the locale happens in the script at a certain point this + means that if the error occur before that point the locale change has not + yet happened and the default locale specified in + jpg-config.inc.php will be used.

    +
    +
    +

    Error messages on a production server

    + +

    On a production server it is common not to show detailed specific error + messages to the public which could potentially give a away security + vulnerabilities. For this purpose there is a "pseudo" locale of the error + messages. This is specified by setting the locale (as described above) to the + string "prod". If this is done a generic error message with an error code will + be shown instead. The custom support receiving information on this error can + then pass on the detailed error code to the development team for further + investigation. In Figure 6.4. Using the production "pseudo" locale the same error as is shown in Figure 6.1. Typical image error message is displayed using the "prod" locale. As you + can see in this case only a more end-user appropriate message together with the + error code is displayed.

    +

    Figure 6.4. Using the production "pseudo" locale

    + +
    Using the production "pseudo" locale
    +

    +

    The problem number corresponds to the error codes that are listed in Appendix H. Error messages

    +

    +

    Tip

    +

    It is possible to customize this "production" error message by + changing the actual text in the file + "lang/prod.inc.php"

    +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch06s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch06s03.html new file mode 100755 index 00000000..2c960154 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch06s03.html @@ -0,0 +1,148 @@ +Using PHP Exceptions

    Using PHP Exceptions

    + +

    Starting with version v2.5 the library now have full support for PHP5 style + exceptions. The library provides an exception class named + JpGraphException which is slightly different compared with + traditional exception classes in that this class can not only return an text string + as error but also an image. This is necessary in order to handle the case where a + script has an error and is called from within an <img> tag. The + only data that can then be displayed in a browser is image data and hence it is + necessary for the error to be formatted as an image.

    +

    In addition to providing an exception class the library also installs its own + default exception handler to properly display an image. This default exception + handler will be automatically called whenever an "uncaught" exception would + otherwise be generated. This means that it is strictly not necessary to use + "try {} catch() {}" blocks around the library scripts.

    +

    When an exception is generated the default exception handler first validates that + the exception is a proper descendant of JpGraphException and if so, + generates the image by calling the JpgraphException::Stroke() method. + If the exception is not a JpGraphException based exception then the + handler re-raises the error. This means that in script that you create that is meant + to be called from within an <img> tag all exception should be a + derivate of JpGraphException in order to properly generate an error + image.

    +

    A typical example on how to raise an exception in your own code is shown in Example 6.1. Throwing a JpGraph exception

    +

    +

    Example 6.1. Throwing a JpGraph exception

    + +
    1
    +2
    +3
    +
    <?php
    +throw new JpGraphException(' ... some error message ...');
    +?>
    +


    +

    +

    In case you need to handle the exception in a "try {} catch() {}" + block (perhaps in order to do necessary cleanup) it is important to remember to call + the Stroke() method which will create and stream the error message back + to the browser. An example of this is shown in Example 6.2. Catching a JpGraph exception and sending it back as an image to the + client

    +

    +

    Example 6.2. Catching a JpGraph exception and sending it back as an image to the + client

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +
    <?php
    +try {
    + 
    +    $graph = new Graph($width,$height);
    + 
    +    // ... Code to setup the graph
    + 
    +    if( /* some error condition */ ) {
    +        throw new JpGraphException(' ... some error message ...');
    +    }
    + 
    +} catch ( JpGraphException $e ) {
    +    // .. do necessary cleanup
    + 
    +    // Send back error message
    +    $e->Stroke();
    +}
    +?>
    +


    +

    +

    +

    Tip

    +

    Another typical augmentation of the exception handling might be to also + log an error to some logging server or plain log file. This should be done + before the call to Stroke() since that call will never + return.

    +

    +

    +

    An example of real life error handling with exception is shown in listing Preparing the data in the introductory example with Sun + spots.

    +

    Selecting between text and image based error handling

    + +

    By default an exception that occurs in the library will create an error image + as shown in the previous section. However there might be circumstance where a + text based error handling is preferred (usually when graph are created from the + command line).

    +

    This could be accomplished in two ways. By catching the exception in the + script and handle it accordingly or we could slightly modify the default + behavior of the default exception handler in the library. How this is done will + now be described.

    +

    In order to enable a text based error handler we just need to disable the + image based error handler. This is done with a call to the method

    +

    +

    • +

      JpGraphError::SetImageFlag($aFlag)

      +

    +

    +

    Since the error handling have global scope this is a static function which can + be called as the following example shows

    +

    +

    1
    +
    JpGraphError::SetImageFlag(false); // Enable text based error handling

    +

    +

    Adding the line above to a graph script will cause any error to be printed to + STDERR when the script is called from the command line. This is + a very convenient way to show errors when command line constructions like

    +

    +

    $> php mygraph.php > mygraph.png

    +

    +

    is used since writing the error to STDOUT will cause the error + message to be sent back to the console since the call above only redirected + STDOUT and not STDERR.

    +

    When the script is called from PHP embedded in a HTTP server (e.g. Apache) + there is no concept of a STDERR and the error message will just be + sent back as normal text to the browser.

    +
    +

    Writing error message to a log file (or system logger)

    + +

    In addition to the option of having the error sent back as a string to the + client it can instead be written to a named log file. The log file name is + specified with a call to the (static) method

    +

    +

    • +

      JpGraphError::SetLogFile($aFileName)

      +

    +

    +

    The file needs to be writable by the PHP process. All error messages are + appended to the end of the file and each error message is prepended by the date + and time (in RFC 2822 formatted + date).

    +

    If the filename is given as the string 'syslog' then the error + message will be written to the default system logger instead. When a script is + run from, for example, Apache this is normally on Unix + '/var/log/apache2/error_log'

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch06s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch06s04.html new file mode 100755 index 00000000..aade9b0c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch06s04.html @@ -0,0 +1,22 @@ +Adding a new locale

    Adding a new locale

    + +

    All error messages are stored in an array with a specific index that cannot be + changed. This index is used in the library to reference a specific error message.

    +

    Since error messages can also have additional parameters the error messages also + includes count that specifies how many arguments must be handled to enable some + error checking when using the error message in the code (to make sure we have enough + arguments).

    +

    The arguments are formatted in the error text in the same way as parameters in the + printf() family of functions.

    +

    To create a localized error resource file You should first copy the + "en.inc.php" to a temporary file, rename it according to + the locale you are creating and then translate each error message according to the + locale. The make sure that the file is stored under the + "jpgraph/lang/" catalogue and the new localized error + messages can be used.

    +

    For example. To create a French version of the error messages the + lang/en.inc.php should be copied to + lang/fr.inc.php and the error messages translated. The + French locale can then be used by using the string "fr" as identified + in SettErrLocale() as described above.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch07.html b/Societes/ric/jpgraph/docs/chunkhtml/ch07.html new file mode 100755 index 00000000..58f82280 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch07.html @@ -0,0 +1,40 @@ +Chapter 7. Color handling

    Chapter 7. Color handling

    + +

    An important part of creating visually clear graphs is the use of appropriate colors. + In order to simplify color handling JpGraph supports several ways to adjust and + manipulate color both by value and by name.

    +

    Almost all color setting methods (with basically only one exception) for all objects + in the graph has one of two names

    +
    • +

      SetColor(), Sets the outline color or if the object only have + one color (e.g. a font) it sets this color

      +
    • +

      SetFillColor(), Specifies the area fill color for objects + which has a concept of an area.

      +

    Both variants of methods take one argument which identifies the color by + one of the available color specification methods as described below.

    +

    Specifying colors by name

    + +

    There are a number of "standard colors" known by (more or less) illustrative + names. A list of all color names that can be used as well as actual color can be + found in Appendix D. Named color list.

    +

    For example:

    +

    +

    • +

      SetColor('white');

      +
    • +

      SetFillColor('orange');

      +

    +

    +

    +

    Tip

    +

    Always use single quotes for strings when you do not need variable + substitution since this is faster.

    +

    +

    +
    + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch07s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch07s02.html new file mode 100755 index 00000000..6947ffac --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch07s02.html @@ -0,0 +1,21 @@ +Specifying colors by RGB triples

    Specifying colors by RGB triples

    + +

    Using the named colors will of course be restricted to the colors known by the + library. If some other colors are needed then they must be specified + manually.

    +

    The first variant uses the RGB values for the color, i.e. the Red, Green and Blue + component of a color. Each component is specified as an integer in the range [0,255] + and the triple is specified as an array.

    +

    For example:

    +

    +

    • +

      SetColor( array(255,255,255));

      +
    • +

      SetColor( array(0xff,0xff,0xff));

      +
    • +

      SetFillColor( array(0x44,0x54,0xa4));

      +

    +

    +

    As usual a value of array(0,0,0) specifies black and a value of + array(255,255,255) specifies white.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch07s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch07s03.html new file mode 100755 index 00000000..13a9a045 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch07s03.html @@ -0,0 +1,18 @@ +Using HTML color specifications

    Using HTML color specifications

    + +

    The second variant is more a less a the same as the RGB triples but instead of an + array the RGB triple is specified as a string with the hexadecimal RGB values. This + is commonly known as the "HTML color specification" since this form often used when + creating WEB pages (for example in CSS sheets).

    +

    For example:

    +

    +

    • +

      SetColor('#333'), note that this is a short form for + SetColor('#333333')

      +
    • +

      SetColor('#12be7a')

      +
    • +

      SetFillColor('#99eff5')

      +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch07s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch07s04.html new file mode 100755 index 00000000..40623332 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch07s04.html @@ -0,0 +1,103 @@ +Fine tuning the color

    Fine tuning the color

    + +

    Specifying the alpha channel (color transparency)

    + +

    Colors can also be made semi-transparent by specifying a transparency value + (or as it is also known an alpha channel value). This will instruct the + library to mix the foreground color with a certain amount of the background + colors creating a "shine-through" effect.

    +

    The alpha channel is specified as a real number in the range [0.0, 1.0] where + 0.0 means no transparency and 1.0 means full transparency (i.e. only the + background color is shown). The transparency is added as a postfix to the color + specification separated by a '@' (at) character. It is often most used with area + fills (i.e. when using SetFillColor())

    +

    For example the following are valid alpha channel modifiers

    +

    +

    • +

      SetFillColor('red@0.2'), A slightly transparent red + color

      +
    • +

      SetFillColor('red@0.8'), An almost completely + transparent color

      +

    +

    +

    The result of using different alpha modifiers are shown in Figure 7.1. Using alpha channel modifiers where the blue color is made more and more + transparent to allow the red bar in the background to become more and more + visible.

    +

    +

    Figure 7.1. Using alpha channel modifiers

    + +
    Using alpha channel modifiers
    +


    +

    +

    As a final example of how to use transparency we show a graph in Figure 7.2. Making use of transparency to combine two plots (barlinealphaex1.php) that uses transparency to allow an area + plot to be mixed with a bar graph.

    +

    +

    Figure 7.2. Making use of transparency to combine two plots (barlinealphaex1.php)

    Making use of transparency to combine two plots (barlinealphaex1.php)


    +

    +

    Tip

    +

    For all graph examples shown in this manual you can always click on the + file name in the title of the graph to view the actual source that created + the graph.

    +
    +
    +

    Adjusting the brightness

    + +

    Since all colors that can be displayed on a computer can be modeled with the + appropriate RGB triple the above ways will allow you to specify any colors you + might need. However, conceptually it might be easier to think of colors in terms + of "a light blue" instead of a modified RGB triple so the library allows you to + take a basic color and apply a brightness correction factor.

    +

    The brightness factor is a postfix to the color string separated from the core + color with a ':' (colon) character. The brightness factor is a real number in + the range of [0.0, 2.0]. Using a brightness factor of 0.0 means that the color + will be black (no brightness at all) and a factor of 2.0 means that the color is + white (maximum brightness). Using a factor of 1 will leave the original color + untouched.

    +

    The brightness factor can be specified for named and HTML colors, see Figure 7.3. Adjusting brightness of named color specifier and Figure 7.4. Adjusting brightness of a HTML color specifier for more examples how the factor adjusts + the color.

    +

    For example, the following code snippets show valid color brightness + modifiers

    +

    +

    • +

      SetColor('red:0.8');, A slightly darker red + color

      +
    • +

      SetColor('red:1.5');, A brighter red color

      +
    • +

      SetColor('#3485a9:1.8);, A bright blue-greenish + color

      +

    +

    +

    Figure 7.3. Adjusting brightness of named color specifier

    + +
    Adjusting brightness of named color specifier
    +

    +

    Figure 7.4. Adjusting brightness of a HTML color specifier

    + +
    Adjusting brightness of a HTML color specifier
    +

    +

    Note

    +

    The brightness factor is a purely linear factor but due to the human eyes + non-linear sensitivity for colors the perceived difference between (for + example) "red:1.1" and "red:1.2" than between + "red:0.2" and "red:0.3" even though the + relative difference is the same.

    +
    +
    +

    Combining brightness and transparency adjustment

    + +

    It is also possible to combine the two previous discussed modifiers. This is + done by first adding the transparency specifier and then the brightness + adjustment as the following examples demonstrates.

    +

    +

    • +

      SetColor('red@0.7:1.2'), A highly transparent + slightly bright red color

      +
    • +

      SetFillColor('#4545aa@0.3:1.5'), A bright blueish + semi transparent color

      +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch07s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch07s05.html new file mode 100755 index 00000000..38d9892b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch07s05.html @@ -0,0 +1,19 @@ +Additional color handling

    Additional color handling

    + +

    Some plot types have additional color handling to facilitate easier handling and + differentiation between data sets.

    +

    +

    Pie plots
    +

    Pie plots support the concept of color-themes. A color theme is + simple a set of colors used for consecutive slices within the Pie. + How to specify color-themes is further discussed in Specifying slice colors and using themes.

    +
    Color maps
    +

    Matrix (Only available in the Pro-version) and contour plots also + have the concept of color maps. This is a range of colors used to + indicate the data in the plot. Examples of color maps can be found + in Built in color maps. (Color maps are defined + and implemented in + "jpgraph_colormap.inc.php").

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch08.html b/Societes/ric/jpgraph/docs/chunkhtml/ch08.html new file mode 100755 index 00000000..237cf394 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch08.html @@ -0,0 +1,97 @@ +Chapter 8. Text and font handling

    Chapter 8. Text and font handling

    + +

    Before reading this chapter please make sure that your installation supports TTF fonts + if you intend to use them (See Necessary system requirements for the library). The rest of this chapter assumes that a working + installation with TTF fonts is available when needed.

    +

    +

    Note

    +

    It is highly recommended to create a setup where TTF fonts work since the + visual quality is significantly better than for the built-in bitmap fonts. In + addition the bitmap fonts are restricted to only display plain 7-bit ASCII + characters which means that no accented characters can be displayed, for example + the Scandinavian characters "åäö".

    +

    +

    +

    +

    Note

    +

    All files in the library are encoded in utf-8.

    +

    +

    +

    Different types of fonts

    + +

    The library supports two fundamental types of fonts.

    +

    +

    1. +

      Bitmap fonts

      +

      There are three built in bitmap fonts. They are available as font + families FF_FONT0, FF_FONT1 and + FF_FONT2. The advantage with bitmap fonts is that they + are always available in all installations of GD. However, bitmap fonts + only supports 7-bit ASCII so if you need to display any character from + the extended character set it is not possible to use bitmap fonts. The + available sizes of the bitmap fonts are also limited, the three + available size corresponds to the three families where + FF_FONT0 is the smallest and FF_FONT2 the + largest available bitmap font.

      +

      Bitmap fonts also has a more "rugged" look since they do not use + anti-aliasing.

      +

      Example: + The following script lines shows a typical use of bit + map font specified for the title of a graph

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +
      <?php
      +$graph = new Graph(....);
      + 
      +//  Adjust the title to use the largest built-in bitmap font in bold face
      +$graph->title->SetFont(FF_FONT2,FS_BOLD);
      +?>

      +

      +

      The remainder of this chapter will describe this in more + details.

      +
    2. +

      TTF Fonts (True Type Fonts)

      +

      True Type Fonts (TTF) give a much better visual quality of the text. + They are available in all sizes and there are many more font family to + choose from. All font family specification apart from the three bitmap + fonts are TTF fonts. In order to use these fonts the installation must + be configured in the right way which is described in Necessary system requirements for the library. It is necessary to use TTF fonts in + order to display extended character sets (outside the traditional 7-bit + ASCII). TTF fonts must also be used when inserting unicode entities as + described in Inserting Unicode entities

      +

      In order to be able to use TTF fonts it is necessary to check if the + installations supports this. See Necessary system requirements for the library

      +

      Example: + The following script lines shows a typical use of the + Arial TTF fonts for the title of a graph

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +
      <?php
      +$graph = new Graph(....);
      + 
      +//  Adjust the title to use 14pt Arial bold face
      +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
      +?>

      +

      +

    +

    +
    + + + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch08s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch08s02.html new file mode 100755 index 00000000..fd6640e7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch08s02.html @@ -0,0 +1,113 @@ +Font families and font styles

    Font families and font styles

    + + +

    Default TrueType Font

    + +

    Prior to ver. 3.5, bitmap fonts are used by default which can specified from FF_FONT0 to FF_FONT2. From version 3.5, default fonts are now set to one of the open-source TrueType DejaVu font (FF_DV_SANSSERIF, DejaVuSans.ttf). This TrueType font is included in JpGraph source code (src/fonts), and there is no need to specify font for this one.

    + +

    You can change default font family by changing FF_DEFAULT defined in jpgraph_ttf.inc.php. You have to prepare your own font file as well in order to use another font.

    + +

    If Freetype library is not usable in your PHP configuration, original BITMAP font will be used for compatibility.

    +

    All graph objects that uses text allows you to specify the font to be used by + calling a SetFont() method and specifying three parameters.

    +
    + +

    +

    1. +

      The font family. This could for example be "Arial", "Times roman" for + TTF fonts or "Bitmap font medium size" when using bit-mapped fonts. The + font family is specified by using a symbolic constant that starts with + the prefix "FF_" (for Font Family). A list of all supported font + families are shown in Table 8.2. Supported Latin Font family specifiers.

      +
    2. +

      The font style. This specifies if the font should be emphasized as + italic, bold, or bold-italic. By default all fonts are rendered with the + "normal" style. The fonts style is specified with a symbolic constant + that starts with the prefix "FS_" (for Font Style). The supported font styles are:

      +

      +

      Table 8.1. Supported Font Styles

      + +
      Font style specifierDescription
      FS_NORMALNormal font style
      FS_BOLDBold font style
      FS_ITALICItalic font style
      FS_BOLDITALICBold + Italic style for font families that + support this
      +


      +

      +

      Please note that not all font families support all available styles. +

      +
    3. +

      The font size. This is specified as an integer and depicts the size of + the font given in typographic points (pt).

      +

    +

    +

    +

    Table 8.2. Supported Latin Font family specifiers

    + +
    Font family nameTypeCommentBoldItalicBI
    FF_FONT0BitmapA very small font
    FF_FONT1BitmapA medium sized font
    FF_FONT2BitmapThe largest bit mapped font
    FF_ARIALTTFArial font
    FF_VERDANATTFVerdana font
    FF_COURIERTTFFixed pitched Courier new font
    FF_BOOKTTFBookman
    FF_COMICTTFComic sans 
    FF_TIMESTTFTimes New Roman
    FF_GEORGIATTFGeorgia
    FF_TREBUCHETTFTrebuche
    FF_VERATTFGnome Vera font. All Vera family fonts are available from http://www.gnome.org/fonts/ +
    FF_VERAMONOTTFGnome Vera Mono font
    FF_VERASERIFTTFGnome Vera Serif font 
    FF_DV_SANSSERIFTTFDejaVu Font family. The DejaVu fonts are modifications of the + Bitstream Vera fonts designed to extend this original for + greater coverage of Unicode, as well as providing more styles. + These fonts are available from http://dejavu-fonts.org/ +
    FF_DV_SANSSERIFMONOTTFDejaVu Font family.
    FF_DV_SANSSERIFCONDTTFDejaVu Font family.
    FF_DV_SERIFTTFDejaVu Font family.
    FF_DV_SERIFCONDTTFDejaVu Font family.
    FF_CHINESE, FF_BIG5TTF +

    Chinese font + (both symbolic names can be used).

    +

    The actual font file name used for the Chinese font is + "bkai00mp.ttf". The name of this + file can be changed in the define + CHINESE_TTF_FONT available in the library + file jpgraph_ttf.inc.php +

    +
    FF_SIMSUNTTF +

    Chinese font. +

    +

    The actual font file name is + "simsun.ttc"

    +
    FF_MINCHOTTF +

    Japanese + font.

    +

    The actual font file name is + "ipam.ttf"

    +
    FF_PMINCHOTTF +

    Japanese + font.

    +

    The actual font file name is + "ipamp.ttf"

    +
    FF_GOTHICTTF +

    Japanese + font.

    +

    The actual font file name is + "ipag.ttf"

    +
    FF_PGOTHICTTF +

    Japanese + font.

    +

    The actual font file name is + "ipagp.ttf"

    +
    FF_DAVIDTTF +

    Hebrew + font.

    +

    The actual font file name is + "DAVIDNEW.TTF"

    +
    FF_MIRIAMTTF +

    Hebrew + font.

    +

    The actual font file name is + "MRIAMY.TTF"

    +
    FF_AHRONTTF +

    Hebrew + font.

    +

    The actual font file name is + "ahronbd.ttf"

    +
    +


    +

    +

    +

    Note

    +

    Depending on what versions of the DejaVu fonts are installed on the system + there are two naming conventions for the font files in common practice. The + library will try both naming convention to see if it can find the font + files.

    +

    +

    +

    In Figure 8.1. List of all latin TTF fonts. (listfontsex1.php) all latin fonts are shown.

    +

    +

    Figure 8.1. List of all latin TTF fonts. (listfontsex1.php)

    List of all latin TTF fonts. (listfontsex1.php)


    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch08s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch08s03.html new file mode 100755 index 00000000..6f32d659 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch08s03.html @@ -0,0 +1,48 @@ +Understanding text alignment and anchor point

    Understanding text alignment and anchor point

    + +

    When a text string position is specified that screen (or scale) position by + default gets aligned with the top left corner of the strings bounding box. We say + that the top left corner is the anchor point of the text string. The alignment of the + anchor point can be adjusted with a call to Text::SetAlignment($aHorAlign, + $vertAlign). The two arguments are given as text strings and the + admissible values for each argument are:

    +

    +

    Horizontal alignment
    +

    'left', 'center', + 'right'

    +
    Vertical alignment
    +

    'bottom', 'center' (or + 'middle') , 'top'

    +

    +

    +

    Caution

    +

    Even though from an API perspective both bitmap fonts and TTF fonts share the + same user API the implementation is vastly different. There are a number of + subtle differences in the way built-in bit-map fonts and TrueType fonts are + rendered to the screen. This means for example that the alignment of, say the + bottom of the text string, is not pixel-perfect between bitmap and TrueType + fonts However, JpGraph, abstracts away 99.9% of the differences so it will be, + for all practical uses of the library completely transparent to switch between + the different font types.

    +
    +

    Manually setting the alignment for the anchor point is mostly useful when adding + Text object to the graph to get the wanted alignment. You can see an example of how + the anchor point changes depending on how the combination of alignments are used in Figure 8.2. Illustration of anchor point alignment (textalignex1.php)

    +

    +

    Figure 8.2. Illustration of anchor point alignment (textalignex1.php)

    Illustration of anchor point alignment (textalignex1.php)


    +

    +

    +

    Note

    +

    It might seem strange to have the method name + "SetAlignment()" when it really should make more sense to use + the name "SetAnchor()". We agree. This naming scheme is due to + historical reasons.

    +

    +

    +

    +

    Note

    +

    The graph legend box also have an anchor point that is specified as the + 3:rd and 4:th argument to Legend::SetPos()

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch08s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch08s04.html new file mode 100755 index 00000000..85c22595 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch08s04.html @@ -0,0 +1,33 @@ +Rotating text

    Rotating text

    + +

    Both bit map and TTF fonts supports rotating text to different extent. With bit + map fonts it is only possible to use horizontal or vertical text, i.e. 0 or 90 + degree rotation. TTF fonts supports arbitrary angles. If you are using a bit map + font and specifies an angle other than 0 or 90 then an error will be + displayed.

    +

    The most common usage for rotating text is probably to adjust the labels on the + x-axis so they are at 45 degrees angle. To rotate the label of an axis the method + Axis::SetLabelAngle() should be used. Figure 8.3. Example of how to use rotated labels (bargradex1.php) shows an example of this (click on the filename + to view the actual code).

    +

    +

    Figure 8.3. Example of how to use rotated labels (bargradex1.php)

    Example of how to use rotated labels (bargradex1.php)


    +

    +

    In addition to axis label it is also possible to + rotate almost every other text object with the exception of graph titles which is + always horizontal. For text objects (the class Text) that can be added + to arbitrary positions on the graph the method Text::SetAngle() can be + used to specify the wanted text angle. Another common place where text labels are + rotated is when individual data points are marked with labels. This could be done + for most plot types and in Figure 8.4. Example of using rotated data point values (example20.3.php) we show an example of using this for adding + labels to a basic bar plot (click on the filename to view source).

    +

    +

    Figure 8.4. Example of using rotated data point values (example20.3.php)

    Example of using rotated data point values (example20.3.php)


    +

    +

    +

    Caution

    +

    When rotating text paragraph the alignment (within the paragraph) will + always be reset to "left". It is not possible to use "center" or "right" + paragraph alignment in rotated texts.

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch08s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch08s05.html new file mode 100755 index 00000000..8c9bbd83 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch08s05.html @@ -0,0 +1,50 @@ +Formatting text paragraphs

    Formatting text paragraphs

    + +

    The text rendering engine within the library offers some basic text paragraph + formatting.

    +

    +

    • +

      It is possible to use multi line text combined as a paragraph

      +
    • +

      It is possible to adjust the text alignment within the paragraph to be + left, right or center adjusted. This works in the same way as you would + expect in a word-processor.

      +
    • +

      If enabled the text rendering will support automatic line breaks at a + certain column. The line breaks are intelligent not to break words in + the middle.

      +

    +

    +

    All text handling is centralized to the class Text (defined in file + jpgraph_text.inc.php) which is used both to add arbitrary + text to the graph as well as internally within the library to manipulate text on + labels and titles. All such texts are an instance of the Text class.

    +

    The paragraph alignment is controlled by the method + Text::SetParagraphAlign($aAlignment). The argument is a text string + that should be one of 'left', 'right' or + 'center'.

    +

    +

    Note

    +

    Unfortunately the library does not support an "even" paragraph alignment + which in word processors adjust the kerning between individual characters to + make the text have even left and right sides. Implementing this would + require a much higher complexity than can be motivated for the type of text + needed in a graph library.

    +

    +

    +

    In the Figure 8.5. The different types of paragraph alignments (textpalignex1.php) the same text paragraph is rendered with the + possible paragraph alignments.

    +

    +

    Figure 8.5. The different types of paragraph alignments (textpalignex1.php)

    The different types of paragraph alignments (textpalignex1.php)


    +

    +

    Inserting a newline character "\n" in text will cause the text line to break and + start on the next row. Note that the newline must be surrounded with double-quotes + and not single quotes.

    +

    +

    Note

    +

    Bitmap fonts that are rotated, i.e. vertical, does not support automatic + line breaking. If line breaking is needed with vertical text then one of the + TTF fonts muts be used.

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch08s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch08s06.html new file mode 100755 index 00000000..0196744a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch08s06.html @@ -0,0 +1,41 @@ +Adding custom TTF fonts

    Adding custom TTF fonts

    + +

    In addition to the predefined fonts it is possible to easily use up to three + custom fonts. This is done by first specifying the name of the font file that should + be used and then specifying the font family as either FF_USERFONT1, + FF_USERFONT2 or FF_USERFONT3. A new font is installed + by calling one or more of the methods

    +

    +

    • +

      Graph::SetUserFont1($aNormal,$aBold,$aItalic,$aBoldIt) + (or the synonym SetUserFont() )

      +
    • +

      Graph::SetUserFont2($aNormal,$aBold,$aItalic,$aBoldIt)

      +
    • +

      Graph::SetUserFont3($aNormal,$aBold,$aItalic,$aBoldIt)

      +

    +

    +

    The argument to these methods should be the full font file name (including full + path) for the normal, bold, italic and/or bolditalic variant of the font family. All + arguments apart from "$aNormal" are optional.

    +

    An example on how this can be used to use a special font for the title of a graph + is shown in + Example 8.1. Specifying and installing a user specified font

    +

    Example 8.1. Specifying and installing a user specified font

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    <?php
    +// ...
    +$graph->SetUserFont('/usr/share/fonts/ttf/digital.ttf');
    +$graph->title->SetFont(FF_USERFONT,FS_NORMAL,12);
    +$graph->title->Set('Test title '.$pi);
    +// ...
    +?>
    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch08s07.html b/Societes/ric/jpgraph/docs/chunkhtml/ch08s07.html new file mode 100755 index 00000000..69822ba3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch08s07.html @@ -0,0 +1,101 @@ +Inserting Unicode entities

    Inserting Unicode entities

    + +

    One reason for using TTF fonts is the possibility to inserting unicode + character/entities. With this we mean characters from the extended range that are + not normally available on West european keyboards. This could for example be + classical Greek characters often used in mathematics, for example the symbol for + "pi". In order to make these and other commonly used "special" characters more + accessible the library provides a utility class that makes it easy to use these + characters without having to look up the corresponding unicode entities every + time.

    +

    In order to specify characters not available on the keyboard the normal way is to + specify there unicode code and included it in the text string with the prefix + "&#". For example the unicode for the character "pi" is "03C0" in hex so to + include this character in a text string you would have to write "This is pi + &#0960;" note that the code should be given in decimal encoding in the string + and always use 4 digits (pre-padded with 0:s as necessary). Since it is very tedious + to lookup and encode special characters the library offers a simpler way. The + SymChar class.

    +

    +

    Note

    +

    This section can be skipped at first reading without loss of + continuity.

    +

    +

    +

    The utility class "SymChar"

    + +

    As described above it is tedious to have to lookup all the character codes. To + simplify this the SymChar class allows you to find these characters with the + english common name of these symbols instead. For example to create a string + with the Greek character "pi" one would have to write the code as shown + in.

    +

    Example 8.2. Using the SymChar class to display the Greek letter "pi"

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +// ...
    +$pi = SymChar::Get('pi');
    +$graph->title->Set('Test is pi'.$pi);
    +// ...
    +?>
    +

    +

    All supported entities with there symbolic names are listed in Table 8.3. Supported character entities in class SymChar. The first argument to the static method + SymChar::Get() should be the name of the entity and if the + second optional argument is true then the capital version (if it exists) of the + symbol should be returned.

    +

    +

    Table 8.3. Supported character entities in class SymChar

    + +
    NameUnicode Unicode capitalComment
    "alpha"03B10391Greek character
    "beta"03B20392Greek character
    "gamma"03B30393Greek character
    "delta"03B40394Greek character
    "epsilon"03B50395Greek character
    "zeta"03B60396Greek character
    "ny"03B70397Greek character
    "eta"03B80398Greek character
    "theta"03B80398Greek character
    "iota"03B90399Greek character
    "kappa"03BA039AGreek character
    "lambda"03BB039BGreek character
    "mu"03BC039CGreek character
    "nu"03BD039DGreek character
    "xi"03BE039EGreek character
    "omicron"03BF039FGreek character
    "pi"03C003A0Greek character
    "rho"03C103A1Greek character
    "sigma"03C303A3Greek character
    "tau"03C403A4Greek character
    "upsilon"03C503A5Greek character
    "phi"03C603A6Greek character
    "chi"03C703A7Greek character
    "psi"03C803A8Greek character
    "omega"03C903A9Greek character
    "euro"20AC Monetary symbol
    "yen"00A5 Monetary symbol
    "pound"20A4 Monetary symbol
    "approx"2248 Mathematical
    "neq"2260 Mathematical
    "not"2310 Mathematical
    "def"2261 Mathematical
    "inf"221E Mathematical
    "sqrt"221A Mathematical
    "int"222B Mathematical
    "copy"00A9 Misc symbols
    "para"00A7 Misc symbols
    "tm"2122 Misc symbols
    "rtm"00AE Misc symbols
    +


    +

    +

    Figure 8.6. Rendered symbol characters corresponding to + + and Figure 8.7. Rendered capital symbol characters corresponding to Table 8.3. Supported character entities in class SymChar. shows how these symbol look when + they are rendered with the TTF font Times Roman 14pt. The symbols are in the same order + as in the table above and are visually grouped by there category as specified in + the column "Comment" in the table above.

    +

    +

    Figure 8.6. Rendered symbol characters corresponding to + +

    + +
    Rendered symbol characters corresponding to
    +


    +

    +

    +

    Figure 8.7. Rendered capital symbol characters corresponding to Table 8.3. Supported character entities in class SymChar.

    + +
    Rendered capital symbol characters corresponding to .
    +


    +

    +
    +

    Graph example with Greek labels

    + +

    In Figure 8.8. Specifying manual ticks as fraction of Pi. (manualtickex2.php) we have used the previous discussed + SymChar class to more readily insert "π" characters in the + X-axis label. We highlight some functionality that we haven't yet discussed in + detail

    +

    +

    1. +

      We use a utility class (FuncGenerator available in + "jpgraph_utils.inc.php") to help create + plot values from a mathematical expression. This will help create a + set of (x,y) points that can later on be used as the base for a data + series.

      +
    2. +

      The x-axis labels and the position of the tick marks on the x-axis + are manually positioned and specified to be positioned at "even" + fractions of π.

      +

    +

    +

    +

    Figure 8.8. Specifying manual ticks as fraction of Pi. (manualtickex2.php)

    Specifying manual ticks as fraction of Pi. (manualtickex2.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch08s08.html b/Societes/ric/jpgraph/docs/chunkhtml/ch08s08.html new file mode 100755 index 00000000..86de0540 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch08s08.html @@ -0,0 +1,127 @@ +Character encoding

    Character encoding

    + +

    Note

    +

    If you are not using Japanese, Chinese, Cyrillic , Greek or Hebrew + languages then this section can be safely skipped.

    +

    The core problem for the library is that it has no way of knowing in what + input encoding the string given to the library is using. Hence it is necessary to, + sometime, tell the library what input encoding is being used in order for the + library to do necessary character encoding conversion to generate UTF-8 (or UTF-16) + as needed to properly render the TTF fonts. The specific encoding options for each + major supported locale are explained below.

    +

    By default all JpGraph library files and examples are encoded in UTF-8

    +

    All defines mentioned below can be found in the file + "jpgraph_ttf.inc.php"

    +

    Japanese encoding options

    + +

    There is only one possible option that can be specified.

    +

    +

    Table 8.4. Japanese encoding options

    + +
    Symbolic definePossible values Description
    ASSUME_EUCJP_ENCODINGtrue/falseAssumes that Japanese text have been entered in EUC-JP + encoding. If this define is true then conversion from EUC-JP + to UTF8 is done automatically in the library using the + mbstring module in PHP. Note that the + multibyte extension in PHP is not normally enabled.
    +


    +

    +

    Otherwise it is assumed that the input characters are encoded in UTF-8. + Remember that to show the Japanese character sets (Kanji, Hiragana and Katakana) + one of the Japanese font families (FF_MINCHO, + FF_PMINCHO, FF_GOTHIC or FF_PGOTHIC) + must be specified.

    +

    An example of using Japanese locale together with Windrose plots can be seen + in Localizing the default names for the compass directions.

    +
    +

    Chinese encoding options

    + +

    There are no specific settings that control the encoding. The following rules + are used depending on the font is specified.

    +

    +

    1. +

      If the font is specified as FF_SIMSUN the built-in + library conversion from GB2312 to UTF-8 will be used. This + translation table is stored in the file + jpgraph_gb2312.inc.php.

      +
    2. +

      If the font is specified as FF_CHINESE then no + conversion is made since it is assumed that the input character + string is already in UTF-8 This only has the effect of changing the + font to the default Chinese font family.

      +
    3. +

      If the font is specified as FF_BIG5 then it is + assumed that the input character string is encoded in BIG5 and the + internal translation to UTF-8 is done by the iconv() + function. This means that PHP must be built with + iconv() support. By default this is not compiled + into PHP (needs the "--width-iconv" when configured). + For more on building PHP with the right options see Appendix I. Compiling PHP. If this method is not present + the library will generate the following an error message.

      +

    +

    +

    An example of using Chinese encoding with Windrose plots can be seen in Figure 21.11. Using chinese fonts (windrose_ex6.1.php) +

    +
    +

    Cyrillic encoding options

    + +

    In order to do proper translation to unicode from cyrillic the + LANGUAGE_CYRILLIC define should be set to true. If you are + running the library in multiuser environment it might be necessary to also + adjust the LANGUGAE_CHARSET define as described below.

    +

    +

    Table 8.5. Cyrillic encoding options

    + +
    Symbolic definePossible values Description
    LANGUAGE_CYRILLICtrue/false +

    Special unicode cyrillic language support

    +
    CYRILLIC_FROM_WINDOWStrue/false +

    If you are setting this config to true the conversion + will assume that the input text is encoded in windows + 1251, if false it will assume koi8-r

    +
    LANGUAGE_CHARSETstring +

    This constant is used to auto-detect whether cyrillic + conversion is really necessary if enabled. Just specify + the encoding used, e.g. 'windows-1251', with a variable + containing the input character encoding string of your + application calling JpGraph.

    +

    A typical such string would be 'UTF-8' or 'utf-8'. The + comparison is case-insensitive. If this charset is not a + 'koi8-r' or 'windows-1251' derivate then no conversion + is done. This constant can be very important in + multi-user multi-language environments where a cyrillic + conversion could be needed for some cyrillic people and + resulting in just erroneous conversions for non cyrillic + language based people.

    +

    Example: In the free project management software + dotproject.net $locale_char_set is + dynamically set by the language environment the user has + chosen.

    +

    Usage: define('LANGUAGE_CHARSET', + $locale_char_set); where + $locale_char_set is a GLOBAL (string) + variable from the application including JpGraph.

    +
    +


    +

    +
    +

    Hebrew encoding options

    + +

    There are no user adjustable settings. The conversion is made from iso to + unicode with the help of the PHP method "hebrev()" which is used to + convert logical Hebrew text to visual text. This conversion is done + automatically when the font is one of FF_DAVID, + FF_MIRIAM or FF_AHRON

    +
    +

    Greek encoding options

    + +

    In order to do proper translation to unicode from greek the + LANGUAGE_GREEK define should be specified to true.

    +

    +

    Table 8.6. Greek encoding options

    + +
    Symbolic definePossible values Description
    LANGUAGE_GREEKtrue/falseSpecial unicode greek language support
    GREEK_FROM_WINDOWStrue/falseIf you are setting this define to true the conversion of + greek characters will assume that the input text is windows + 1251
    +


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch09.html b/Societes/ric/jpgraph/docs/chunkhtml/ch09.html new file mode 100755 index 00000000..c4e548e8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch09.html @@ -0,0 +1,62 @@ +Chapter 9. Using the JpGraph cache system

    Chapter 9. Using the JpGraph cache system

    + +

    To reduce load on the web server JpGraph implements an advanced caching system which + avoids the burden of always having to run the full image script. The library supports + two primary ways of significantly increase performance, using the built in cache system + described in this section and the use of a PHP accelerator described in Chapter 11. NuSphere PHP accelerator

    +

    Depending on the complexity of the image script, for example if it is doing several DB + lookups, the use of the library cache system (which will avoid running the graph scripts + completely if possible) can make a for very drastic performance increase.

    +

    Figure 9.1. Library cache principleshows an overview of the cache system in the library.

    +

    +

    Figure 9.1. Library cache principle

    + +
    Library cache principle
    +


    +

    +

    The rationale behind this is the observation that very few graphs are really + real-time, i.e. needs to be updated absolutely every time the graphing script is called. + For many graphs in a WEB-environment one can often get good precision by restricting the + graphs to only be updated, say, a few times each day. Of course, if truly live data is + what is needed then the cache system can not be used since then, by the nature of live + data, the graph script must be called at each instance to get the latest available data, + most probably from a database.

    +

    Enabling the library cache system

    + +

    The enabling and disabling of the cache system is controlled by three defines in + jpg-config.php

    +

    +

    1. +

      DEFINE("USE_CACHE",true)

      +
    2. +

      DEFINE("READ_CACHE",true)

      +
    3. +

      DEFINE("CACHE_DIR","/tmp/jpgraph_cache/")

      +

    +

    +

    The first of these, USE_CACHE, is the master-switch which must be set + to true to enable the caching system.

    +

    The second switch, READ_CACHE very seldom needs to be changed. This + second switch basically tells whether or not JpGraph should ever look in the cache. + Setting this to false and the master-switch to true would then always generate a new + updated image file in the cache and this new image would be send back to the + browser. The main use for this (admittedly) strange setting is if you like to have + the side effect of the script that a fresh image is always stored in the cache + directory.

    +

    The third define is not really a switch but a directory specification that tells + the library what directory to use as the cache directory (where the cached images + are stored).

    +

    The cache directory (CACHE_DIR) can be set to an arbitrary directory + but the important thing to keep in mind is that the cache directory must be read and + writable for the process running PHP.

    +

    +

    Note

    +

    The directory name given should be an absolute directory path and not a file path relative to the document + root.

    +

    +

    +
    + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch09s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch09s02.html new file mode 100755 index 00000000..4da8bf65 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch09s02.html @@ -0,0 +1,25 @@ +Permission settings for the cache files

    Permission settings for the cache files

    + +

    Note: This section is only applicable to a Unix derivate + system which have the concepts of group and file + ownership.

    +

    There are two additional settings that will allow the control of the group and + file permission settings

    +

    +

    1. +

      DEFINE('CACHE_FILE_GROUP','www')

      +
    2. +

      DEFINE('CACHE_FILE_MOD',0664)

      +

    +

    +

    The CACHE_FILE_GROUP specifies what group should be set on the cached + image file. If this is left empty then the group will be the same as the process + running PHP.

    +

    The CACHE_FILE_MOD specifies the file permissions for the image file. + If this is left empty the default permissions used by PHP will be set on the + file.

    +

    When PHP is run from the command line (using the PHP CLI version) then the file + permission and group will normally be set to the one of the suer running PHP. Keep + in mind that normally ordinary users are not allowed to change the group to + 'www' (the default Apache2 group).

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch09s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch09s03.html new file mode 100755 index 00000000..e9466c69 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch09s03.html @@ -0,0 +1,188 @@ +Using the cache in your script

    Using the cache in your script

    + +

    The principle of the library cache is as follows when it is enabled.

    +

    +

    1. +

      The first time the graph script is called everything will be as usual, + the script will run and in the end the script sends back the image to + the browser. However if the caching is enabled JpGraph will + automatically have stored a copy of the generated image in the cache + directory.

      +
    2. +

      When the graph script is executed the next time it checks to see if an + image corresponding to this graph script has already been generated and + is available in the cache directory.

      +
    3. +

      If the image is available in the cache directory the library check to + see how old the image is. If the images is older than a specified limit + than it assumes that the image is out dated and runs the graph script as + usual and makes sure the newly generated image is stored in the cache + directory. Hence replacing the outdated image.

      +
    4. +

      If the image in the cache directory was current (i.e. not too old) it + is read and send back to the clients (e.g. Web-browser) without the rest + of the graph script being executed.

      +

    +

    +

    From the above description there are a couple of parameters that should be + specified, the name to use when the image is stored and the timeout value when the + image is considered too old, i.e. how long was it since the image was + generated.

    +

    The first parameter, the filename, can be either manually specified or the library + can create a filename based on the name of the graph script.

    +

    Both these parameters are specified in the initial Graph() call where + a new graph instance is created. A basic example of this is shown in Example 9.1. Using an automatic cache filename and a 60min timeout of the cached + images..

    +

    +

    Example 9.1. Using an automatic cache filename and a 60min timeout of the cached + images.

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +// ... includes
    + 
    +$graph = new Graph($width, $height, 'auto', 60);
    + 
    +// ... rest of the graph script
    + 
    +$graph->Stroke();
    +?>
    +


    +

    +

    The code in Example 9.1. Using an automatic cache filename and a 60min timeout of the cached + images.. will use an automatic filename for + the cached image and a make the image valid for 60 minutes. This means that if the + script is called again, within 60minutes, it will return the image just after the + initial Graph() call and not execute any more lines of code in the + script.

    +

    For basic usage this is all that is necessary, enable the cache in the settings + and supply a filename and a timeout value. The rest of the logic is handled by the + library.

    +

    +

    Tip

    +

    If you want the timeout value to be "forever" then you can specify a + "0" as the timeout value (or leave the parameter blank). To + regenerate the image you will have to manually remove the image files from + the cache. This removal could for example be handled by a nightly + cron-job.

    +

    +

    +

    There is however one caveat which must be understood when using the above + construction. The image/graph store in the cached file will be returned to the + browser as a side effect of the initial $graph = new Graph(). This also + means that:

    +

    No lines after the initial Graph() call will be executed in the + image script in case the image exists in the cache directory.

    +

    This is the expected behaviour since this means that no unnecessary code will be + executed in the graph script in case the image has been found in the image + cache.

    +

    However, for the case where some more control of exactly how a cached image is + sent back it is necessary to add some complexity by doing things less automatically. + This gives greater control but also is slightly more complex and is described in the + next section.

    +

    Manually controlling the cached image

    + +

    +

    Note

    +

    These utility functions were added in v3.0.5 of the library. It is still possible + to do this in previous versions but then some more code is needed to + duplicate what these methods does. If this feature is wanted then it is + strongly advised to upgrade to this or later version.

    +

    +

    +

    There are two parts to doing this manually.

    +

    +

    1. +

      Check if the cached image exists in the cache and is valid (i.e. + not too old)

      +
    2. +

      Stream the cached image file back to the browser in that + case

      +

    +

    +

    If the cached image is not valid then we just need to construct the graph as + usual and it will be stored in the cache automatically.

    +

    The following code example shows how this is done in principle in a graph + script where we use automatic naming i.e. the cached file name will get a name + based on the script name. This is done with the library utility function + GenImgName() which constructs a suitable image name from the + script name and with a proper image compression format (i.e png, jpg or + gif).

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php
    +$width = ...;
    +$height = ...;
    +$cachefilename = GenImgName();
    +$graph = new Graph($width,$height);
    + 
    +// Check if the cache file exists and is valid
    +$valid = $graph->cache->IsValid($cachefilename);
    + 
    +if( $valid ) {
    +    // The cached file is valid and we can now do any necessary
    +    // processing and then send it back to the client
    +    doSomeProcessingIfNecessary();
    + 
    +    $graph->cache->StreamImgFile($graph->img,$cachefilename);
    + 
    +} else {
    +    
    +    // The cache file is not valid or does not exists so we
    +    // must construct the graph as normal
    + 
    +    // Tell the graph that we want to cache this image
    +    $timeout = ...;
    +    $graph->SetupCache($cachefilename,$timeout);
    + 
    +    // The remainder of a normal graph script
    + 
    +    ...
    + 
    +    // .. and send back the image as usual (this will also store
    +    // a copy of the image in the cache directory)
    +    $graph->Stroke();
    +}

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch09s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch09s04.html new file mode 100755 index 00000000..5e0dcbc4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch09s04.html @@ -0,0 +1,115 @@ +Using the cache with Client Side Image Maps (CSIM)

    Using the cache with Client Side Image Maps (CSIM)

    + +

    (See Chapter 10. Using CSIM (Client side image maps) for a full description on the usage of CSIM + together with the library)

    +

    You can also use the cache system for images that uses image maps (CSIM) as well. + The cache system interface is slightly different in this case since the cache needs + to store both the cached image and the cached image-map. It also needs to change due + to the added complexity with CSIM scripts not sending back an image but rather a + pre-formatted HTML page. The two major differences from the non-CSIM cache + is:

    +

    +

    1. +

      The cached version will not be stored in the previous defined cache + directory. It uses a different cache directory.

      +
    2. +

      The script that want to make use of the cache system together with + CSIM must call an extra method, CheckCSIMCache(), to check + the cache.

      +

    +

    +

    +

    Note

    +

    Please remember that when using CSIM you must end your script with a call + to Graph::StrokeCSIM() method instead of the + Graph::Stroke() used for non-CSIM.

    +

    +

    +

    To use the cache with CSIM you have to call the + Graph::CheckCSIMCache(). As with the caching for non-CSIM you have + to supply a name to be used for the cached version (it can be manually or automatic) + as well as an optional timeout value. The default timeout value if nothing else is + specified is 60 minutes.

    +

    The name argument requires some more explanations. The file name must be specified + as a relative name.

    +

    For example "myimage" or perhaps + "firstpage/image3".

    +

    The reason for his is that a script that uses CSIM does not send back an image. + Instad it sends back a HTML page which includes the image map coordinates and has an + included "<img href=" ... ">" tag which references the image + script recursively in normal cases but if the image is found in the cache this + reference will be to a static image instead.

    +

    Depending on the installation of the library this will now end up in the directory + specified in the CSIMCACHE_DIR define. This must also be a directory + accessible by the normal HTTP/PHP process. By default, if nothing else is specified, + a directory called "csimcache" will be created in the same + directory as the image script itself.

    +

    The default value has the drawback that the directory from where the script is + executed must also be writable by the process running PHP. Best practice here is to + keep the number of writable directory for PHP down to a minimum and re-use the same + directory as is used for the standard cache.

    +

    This however, requires that the PHP and HTTP setup is such that the cache + directory is also accessible by the HTTP server from the htdocs root.

    +

    The CheckCSIMCache() method checks the cache for an existing cached + version and if found it returns it and halts execution of the script. So, this call + should be the first call after the creation of the core graph instance, i.e. + $graph = Graph($width,$height) and before any heavy work is done to + create the image so that no unnecessary work is done in case a cached image + image + map is found.

    +

    The general structure of a script that uses CSIM and cache should follow the + template shown in

    +

    +

    Example 9.2. General structure for a CSIM script that uses CSIM

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php
    +require_once( 'jpgraph.php');
    + 
    +// ... any necessary includes
    + 
    +$width = ...
    +$height = ...
    +$graph = new Graph($width,$height);
    + 
    +// Check cache and use a 10 min timeout
    +$graph->CheckCSIMCache('csim_image1',10);
    + 
    +// If a cached version exists, execution halts here
    +// and the cached HTML image map is sent back
    + 
    +// ... construct and format the graph
    + 
    +// ... finally send back the image map HTML script
    +$graph->StrokeCSIM();
    +?>
    +


    +

    +

    Please note that it is not necessary to pass any argument to the final call of + StrokeCSIM()

    +

    +

    Note

    +

    The CSIM caching works by storing two files in the cache directory. One + file being the image and the other file being the corresponding image map as + a pure HTML file. The HTML file will reference the static image.

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch10.html b/Societes/ric/jpgraph/docs/chunkhtml/ch10.html new file mode 100755 index 00000000..60624f4b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch10.html @@ -0,0 +1,59 @@ +Chapter 10. Using CSIM (Client side image maps)

    Chapter 10. Using CSIM (Client side image maps)

    + +

    Image maps makes it possible to create images with "active" areas that will react for + a mouse-click. It is then up to the designer to decide what actions should be taken. + Image map is often used to create drill-down charts where it is possible to dynamically + zoom into an image. Image maps is part of the HTML standard.

    +

    There are actually two types of images maps, client and server-side. This refers to + where the actual processing of the image click happens. Without doubt the best (and most + commonly used) type is the client side. This is also what the library supports. In the + remainder of this manual this will be referred to as CSIM, Client Side Image Maps.

    +

    The principles

    + +

    Image maps works so that each hotspot area in the graph that should be used must + have an associated URL. When the user clicks somewhere in that particular hotspot + area the browser will open the specified URL. Typical hotspot areas in the graphs + are

    +

    +

    1. +

      Texts, for example titles

      +
    2. +

      Markers in line graphs

      +
    3. +

      Slices in pie graphs

      +
    4. +

      Legends

      +
    5. +

      Bars in barplots

      +
    6. +

      etc.

      +

    +

    +

    The way the CSIM HTML standard works is that the HTML page must have a section + with coordinates that defines the various hotspots together with the associated URL + that should be called. Each section of coordinates are connected to a specific image + that is included with a standard <img> by a common id. This will + now add some complexity since the library must return an HTML page for the + coordinates and not image data as normal for the library. How this is done is the + topic of the next section.

    +

    A number of examples of CSIM graphs are included in the + Examples/ directory. Some of the available examples are + listed in Table 10.1. CSIM Examples (in Examples/ directory)

    +

    +

    Table 10.1. CSIM Examples (in Examples/ directory)

    + +
    CSIM Examples (in Examples/ directory)
    bar_csimex1.phpbar_csimex2.php
    bar_csimex3.phpbarline_csimex1.php
    barlinefreq_csimex1.phpboxstockcsimex1.php
    ganttcsimex01.phpganttcsimex02.php
    imgmarkercsimex1.phppie3d_csimex1.php
    piec_csimex1.phppie_csimex1.php
    scatter_csimex1.phptitlecsimex01.php
    +


    +

    +

    In order to easily access all of these examples it is possible to call the + testsuit.php example with an additional argument + "t=2". By following the link + "testsuit.php?t=2" a separate window will open with all the + possible CSIM examples.

    +
    + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch10s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch10s02.html new file mode 100755 index 00000000..634cb660 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch10s02.html @@ -0,0 +1,39 @@ +The basic structure of an image map script

    The basic structure of an image map script

    + +

    The basic structure for a HTML page using client side image maps will have the + following layout

    +

    +

    // Image map specification with name "mapname"
    +<MAP NAME=...>
    +... specification ...
    +</MAP>
    +
    +// Image tag
    +<img src="..." ISMAP USEMAP="mapname">
    +

    +

    +

    This poses an interesting question. Since we normally call the graphing script + directly in the <img> tag how do we get hold of the image map + (which is available only in the image script) in this "HTML wrapper" script?

    +

    In JpGraph there is actually two ways of solving this.

    +

    +

    1. +

      Use the preferred "builtin" way using the modified + Stroke() method StrokeCSIM() instead of + the standard Graph::Stroke() method.

      +
    2. +

      Directly use the Graph::GetHTMLImageMap() which gives you + fine control at the expense of more complex coding. This is necessary if + several image map graphs are needed on the same page.

      +

    +

    +

    The first (and preferred) way modifies the stroke method so that instead of + returning an image (like the standard Stroke() method) + StrokeCSIM() actually returns an HTML page containing both the + image map specification and the correct <IMG> tag.

    +

    This means that it is necessary to treat an image map returning image script + differently from a non-CSIM image script, for example it is not posible to use it + directly as the target for the "src" attribute of the + <IMG> tag since it sends back a HTML page containing both an + image tag together with an image map.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch10s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch10s03.html new file mode 100755 index 00000000..a8c492a0 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch10s03.html @@ -0,0 +1,37 @@ +Specifying targets for image map plots

    Specifying targets for image map plots

    + +

    To turn a standard image script into a CSIM script the first thing needed to do is + to supply the appropriate URL targets for the hotspots in the image. What the + hotspots represent depends on the type of plot. CSIM is supported by all graph + types.

    +

    To specify a URI link for each hotspot the SetCSIMTargets() method is + used on the graph object that should be given a hotspot.

    +

    There are two arguments to this method

    +

    +

    1. +

      $aTargets, an array of valid URL targets. One URL per hot + spot, for example if you have a 10 values bar plot you need 10 URLs. If + the SetCSIMTarget() is applied to, for example, a text then + only one URL target should be specified.

      +
    2. +

      $aAlts, an array of valid alt-texts. Many browsers (but + not all) will show this text string if the mouse hovers over a + hotspot.

      +

    +

    +

    Creating popup-windows as targets for CSIM

    + +

    URL targets specified will be opened by the browser as usual, i.e. it will + replace the current HTML page. Another common usage pattern is to opena popup + window, perhaps with a zoomed version of a graph. This can be done by adding + some javascript in the target URL. If the URL, for example, is specified + as

    +

    +

    $target = "..."; 
    +$targetURL = "javascript:window.open('$target?id=%d','_new','width=500,height=300');void(0)"

    +

    +

    clicking on a target will now open a separate window with the specified width + and height. The $target variable must be set to the wanted + URL.

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch10s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch10s04.html new file mode 100755 index 00000000..b333e530 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch10s04.html @@ -0,0 +1,130 @@ +Using StrokeCSIM()

    Using StrokeCSIM()

    + +

    The simplest way of creating a creating a CSIM image is with the + StrokeCSIM() method. As mentioned before this method actually + returns a (small) HTML page containing both the image-tag as well as the image map + specification. Hence it is not possible to use a script that ends with this method + in a standard image-tags src property.

    +

    There are two ways to create CSIM (or get hold of) the image maps

    +
    1. +

      Use the CSIM image script as the target in a standard anchor reference, + for example

      +

      +

      <a href="mycsimscript.html"> 

      +

      +

      This has the drawback that the image page will only contain the image and + nothing else.

      +
    2. +

      The other way will allow the image script to be included in an arbitrary + HTML page by just including the image script at the wanted place in the HTML + page using any of the standard "include" php statement. For example

      +

      +

      <h2> This is an CSIM image </h2>
      +
      +<?php include "mycsimscript.php" ?>

      +

      +
    +

    Note: If there are several CSIM images on the same page it is necessary to use + "include_once" in the scripts for the inclusion of + "jpgraph.php" and the other jpgraph library files since the + files will be included multiple times on the same page and one or more "Already defined error" will be displayed.

    +

    The process to replace Stroke() with StrokeCSIM() is + strait forward. Replace all existing calls to Stroke() with the + equivalent calls to StrokeCSIM().

    +

    Optional argument to StrokeCSIM()

    + +

    Once difference compared with Stroke() is that if a filename is supplied to + the StrokeCSIM() method it does not specify a file to write an + image to as is the case with Stroke(). The signature for the method is

    +

    +

    StrokeCSIM($aScriptName='auto', $aCSIMName='', $aBorder=0)

    +

    +

    The first (optional) argument is the name of the actual image script file + including the extension. So for example if the image script is called + "mycsimscript.php" the call should be

    +

    +

     $graph -> StrokeCSIM ( 'mycsimscript.php' ) 

    +

    +

    By using the predefined name 'auto'. This will be done automatically.

    +

    +

    Note

    +

    Why does the script name need to be used as the first parameter? The + reason is that in the creation of the HTML page which is sent back we + need to refer to the script in the image tag. In older versions of PHP + there where no 100% way of getting hold of the actual script name in all + circumstances and it was then necessary to specify it here. In PHP5 (and + newer version of PHP4) this is no longer a problem but this parameter is + still kept for backward compatibility.

    +

    +

    +

    The other arguments to StrokeCSIM() are optional as well. The + second argument specifies the id that connect the map with the corresponding + image. Please note that if several CSIM images are used in the same HTML page it + is necessary to specify the image map name as the second parameter since all + image maps must be unique to properly match each image map against each image. + Please consult the class reference StrokeCSIM() for more + details.

    +

    The final argument specifies whether the image should have border or + not.

    +
    +

    How does StrokeCSIM() work?

    + +

    Knowledge of the exact technical details of the way StrokeCSIM() + works is probably not needed by many people but for completeness we outline + those details in this short section.

    +

    The fundamental issue we have to solve is that we must be able to call the + image script in two modes. When the user includes the image script the + StrokeCSIM() method should return the HTML page but when the + image script is later called directly in the image tag it must not return an + HTML page but rather the actual image.

    +

    The way this is solved is by using one GET argument which is + passed on automatically when we use the image script name in the + <img>-tag.

    +

    A look at the generated HTML from StrokeCSIM() will make this clear. In Figure 10.1. Example of generated HTML code for StrokeCSIM() the resulting HTML code after + running the example script bar_csimex1.php is shown. The + argument to the src-property of the image tag is not simply the script name but + the script name with a additional argument, ?_jpg_csimd=1. This + argument is passed on to the library which then will run the script again but + this time only generate the image and not the HTML. (In the JpGraph internal + code this pre-defined argument is checked for and if it exists the image is send + back and not the HTML page.)

    +

    +

    Note

    +

    The actual string name of this parameter is defined by a + DEFINE statement in JpGraph, + _CSIM_DISPLAY.

    +

    +

    +

    +

    Figure 10.1. Example of generated HTML code for StrokeCSIM()

    + +
    <map name="__mapname1828__" id="__mapname1828__" >
    +<area shape="poly" coords="74, 210, 74, 165, 92, 165, 92, 210"  href="bar_clsmex1.php#1" title="val=12" alt="val=12"  />
    +<area shape="poly" coords="118, 210, 118, 112, 136, 112, 136, 210"  href="bar_clsmex1.php#2" title="val=26" alt="val=26"  />
    +<area shape="poly" coords="162, 210, 162, 176, 180, 176, 180, 210"  href="bar_clsmex1.php#3" title="val=9" alt="val=9"  />
    +<area shape="poly" coords="206, 210, 206, 146, 224, 146, 224, 210"  href="bar_clsmex1.php#4" title="val=17" alt="val=17"  />
    +<area shape="poly" coords="250, 210, 250, 93, 268, 93, 268, 210"  href="bar_clsmex1.php#5" title="val=31" alt="val=31"  />
    +</map>
    +<img src="bar_csimex1.php?_jpg_csimd=1" ismap="ismap" usemap="#__mapname1828__" border="0" width="310" height="250" alt="" />
    +
    +


    +

    +

    +

    Note

    +

    As the astute reader has come to realize CSIM scripts has a + performance impact in that each script has to be run twice. Once to get + hold of all the coordinates and generate the image and a second time via + the <img> tag in generated HTML. The library is intelligent enough to + minimize the code to run so that it only runs what is absolutely + necessary. This means that roughly 75% has to be run which yields a + total overhead of around 1.75 times when generating a CSIM image.

    +

    +

    +
    +

    Image maps and the cache system

    + +

    For version 1.9 and later the cache system has been extended to include the + CSIM maps as well. For each CSIM graph two files are stored in the cache, the + image file itself as well as the wrapper HTML with the actual image map.

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch10s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch10s05.html new file mode 100755 index 00000000..ded8aa2b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch10s05.html @@ -0,0 +1,34 @@ +Getting hold of the image map

    Getting hold of the image map

    + +

    There are at least two cases where the basic StrokeCSIM() method will not work. + Basically this is limited to only showing the graph in one HTML page and nothing + more. So the cases where this needs to be handled differently are

    +

    +

    1. +

      In the case where you want to store the image on disk and later use it + in an img-tag you need to get hold of the image map. +

      +
    2. +

      In order to include multiple CSIM images ona a WEB-page. (This is not + entirely true though, it is possible to include several CSIM graph + images with the use of the <iframe> tag. This in + effect creates it's own WEB page within the WEB page but we will not + discuss this further here.

      +

    +

    +

    To get hold of the image map the function Graph::GetHTMLImageMap() + should be used. This returns the coordinates for the hotsposts

    +

    An example of the use of this is shown below. With these lines the image will be + written to a file. The script then returns a HTML page which contains the Client + side image map and an img-tag which will retrieve the previously stored file.

    +

    +

    1
    +2
    +3
    +4
    +
    $graph -> Stroke ( "/usr/local/httpd/htdocs/img/image001.png" );
    + 
    +echo  $graph -> GetHTMLImageMap ( "myimagemap001" );
    +echo  "<img src=\"img/image001.png\" ISMAP USEMAP=\"#myimagemap001\" border=0>" ;

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch10s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch10s06.html new file mode 100755 index 00000000..1cf719b4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch10s06.html @@ -0,0 +1,575 @@ +Mixing several CSIM images in an HTML page with text

    Mixing several CSIM images in an HTML page with text

    + +

    As was mentioned above using StrokeCSIM() is very simple but it has + the drawback that it returns a single HTML page without any possibilities to add + additional text which makes its use fairly limited in real life situation where the + graph is part of a complex WEB-page. In this section we will discuss some best + practice to do this.

    +

    In principle there are two ways to do this

    +

    +

    1. +

      Store both the image map and the image in files which are later read + back in the HTML page. This has the advantage of being simple but the + drawback that it increases the processing time since writing and reading + from a file takes time.

      +
    2. +

      Avoiding the use of temporary file by mimicking the way + StrokeCSIM() works and od the steps + StrokeCSIM() does internally but in the script + directly. In the remainder of this section we will show how this can be + setup. That part will also introduce the method + StrokeCSIMImage() which is key to include CSIM graphs + in HTML pages.

      +

    +

    +

    Caution

    +

    Some of the described methods in this section was added in version 2.5 of the + library. In earlier versions more of this has to be done manually.

    +
    +

    Adding one CSIM graph in a HTML page

    + +

    The library has been designed to make this as painless as possible but due to + the way CSIM works there are some manual work that cannot be avoided. We will + start slowly and in detail walk through an example where we include one CSIM + graph in an arbitrary HTML page. There are a few things to keep in mind, the + rest will be taken care of automatically by the library

    +

    +

    1. +

      In the HTML page the CSIM map must be semi-manually included. (It + doesn't matter where)

      +
    2. +

      The <img> tag for rendering the image must be + semi-manually created

      +
    3. +

      The original graph script needs a minor augmentation since it + should no longer end by calling StrokeCSIM()

      +
    4. +

      Some care needs to be taken to specify what the URL:s to be called + should be

      +

    +

    +

    The library provides suitable functions for step 1 & 2 above so the only + thing that needs to be done in the HTML page is calling these functions at + suitable places. In principle the HTML page should have the structure shown in Example 10.1. Principles of including CSIM graph in a HTML page

    +

    +

    Example 10.1. Principles of including CSIM graph in a HTML page

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +
    <html>
    +<body>
    +<?php
    +// The name of the graph script file (change as needed!)
    +$_graphfilename = 'mycsimgraph.php';
    + 
    +// This is the filename of this HTML file
    +global $_wrapperfilename;
    +$_wrapperfilename = basename (__FILE__);
    + 
    +// Create a random mapname used to connect the image map with the image
    +$_mapname = '__mapname'.rand(0,1000000).'__';
    + 
    +// This is the actual graph script
    +require_once ($_graphfilename);
    + 
    +// Get hold of the image map to include it in the HTML page
    +$imgmap = $graph->GetHTMLImageMap($_mapname);
    +echo $imgmap;
    +?>
    + 
    +<p>Some arbitrary HTML text .... </p>
    + 
    +<?php
    +// We now create the <img> tag
    +$imgtag = $graph->GetCSIMImgHTML($_mapname,$_graphfilename);
    +echo $imgtag;
    +?>
    + 
    +</body>
    +</html>
    +


    +

    +

    Before we discuss the HTML code in detail lets first show what augmentation is + needed in the graph script.

    +

    Normally the graph script will end with a call to either + Graph::Stroke() or Graph::StrokeCSIM(). However, + with CSIM style graph the complication is that we need to call the script twice. + Once to get the image map and once (in the final <img> tag) to actually + generate the image. In order to separate these two cases we make use of a URL + argument which will be used as a flag so that we know how to behave in the graph + script. In conjunction with HTML skeleton shown in Example 10.1. Principles of including CSIM graph in a HTML page we need to change the graph script so that + it instead uses the method Graph::StrokeCSIMImage() so that the + last line will be changed to

    +

    +

    1
    +2
    +3
    +
    ...
    +$graph->StrokeCSIMImage();
    +?>

    +

    +

    This method will only stroke the image when the "secret" flag is passed as a + URL argument (which will be added automatically when the <img> tag is + constructed in the call to GetCSIMImgHTML() . This means that the + first time this function gets called when we do the initial + require_once() in the top of the HTML page this method will do + nothing, which is exactly what we want since we only want to include the graph + script in order to be able to do the call to GetHTMLImageMap() + later down in the script.

    +

    We are now in position to discuss the HTML script above.

    +

    +

    Line 1-2
    +

    This is the standard HTML opening tags (by choice we keep this + very simple and sloppy in these example.)

    +
    Line 3-20
    +

    This is where we include the graph script. In addition we must + also create a map name that will be used to connect an image map + with the <img> tag. We have chosen to create + a random name since the actual name is not significant. The only + criteria is that the name must be unique if there are multiple + maps in the same HTML page.

    +

    In addition we also record the name of the actual HTML page in + the variable "$wrapperfilename". This is so we can + potentially use it as a target in the image script. We could + then have targets that redisplays the same page but with + potential additional or changed URL argument.

    +
    Line 21-22
    +

    This is just an illustration that it is possible to add + arbitrary HTML markups and text on the page.

    +
    Line 23-27
    +

    This is where we generate the needed <img> tag that should + be included in the page. It is illustrative to view how the + <img> tag actually looks.

    +

    +

    1
    +2
    +
    <img src="mycsimgraph.php?_jpg_csimd=1" ismap="ismap" 
    +usemap="#__mapname987066__" border="0" width="400" height="250" alt="" />

    +

    +

    The name of the image is the specified graph name (which was + given as the second argument). As can bee seen a URL argument + "flag _jpg_csimd=2" has been added. This is the + "secret" flag that instructs StrokeCSIMImage() to + actually send back the image. The second thing to notice is the + map name. This is the random name we constructed that is used to + connect to the map we wanted to use with this image.

    +
    Line 28-30
    +

    The closing HTML tags

    +

    +

    +

    What remains is to discuss how the actual CSIM targets in the graph script + should be constructed. Again there are some choices to be made on what should + happen when a user clicks on the gaph.

    +

    +

    1. +

      Clicking on a graph should open a "popup" window

      +
    2. +

      Clicking on a graph should open the same HTML page but with some + additional URL arguments

      +
    3. +

      Clicking on a graph should open a fresh page in the browser

      +
    4. +

      Clicking on the graph should open in an existing browser + window

      +

    +

    +

    Earlier in this chapter we have shown how to handle case 1 so in the following + we will concentrate on cases 2-4. Before we start we need to discuss the third, + not yet mentioned, argument to the method SetCSIMTargets(). To + remind ourself this method is used on the various objects in a graph that can + act as hotspots. The full signature for this method is

    +

    +

    1
    +
    SetCSIMTargets($aURLTargets,$aAltTexts,$aWinTargets);

    +

    +

    The first argument specifies the URLs. Depending on the actual object this is + either a string or an array of strings.

    +

    The second argument specified the HTML "alt" texts. In most browser this is + shown as a popup text if the mouse pointer hovers over a hotspot area.

    +

    The final argument specifies the URL target window (where the link should + open). Most browser recognizes a few special targets here

    • +

      "_blank" . This will open the URL in a new browser window

      +
    • +

      "_top". Will break out of a frameset and display the target window + at top

      +
    • +

      "" (empty). Will open the target in the current window

      +
    • +

      "namedWindow". Will open the target in the named window

      +
    +

    In the discussions below we will assume that the graph is a basic barplot so + the URLs we specify are connected to each individual bar in the plot and are + specified with a call similar to

    +

    +

    1
    +
    $bplot->SetCSIMTargets($targets,$altnames,$wintargets)

    +

    +

    +

    Case 2: Opening the same page but with some different URL + arguments.

    +

    To do this we make use of the name of the HTML wrapper file we stored in + $_wrapperfilename . We can then construct the targets as shown + in Example 10.2. Creating CSIM URL targets to open in same browser window

    +

    +

    Example 10.2. Creating CSIM URL targets to open in same browser window

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +
    <?php
    +...
    +global $_wrapperfilename;
    +$n = .. ; // Number of bars
    +$targ = array(), $alt = array(); $wtarg = array();
    +for( $i=0; $i < $n; ++$i ) {
    +    $urlarg = urlencode( ... );
    +    $targ[] = $_wrapperfilename.'?'.$urlarg;
    +    $alt[] = 'val=%d';
    +    $wtarg[] = '';
    +}
    +$bplot->SetCSIMTargets($targ,$alt,$wtarg);
    +...
    +?>
    +


    +

    +

    +

    Caution

    +

    Remember to not include the "&" or the "=" used when constructing + the URL argument in the call to urlencode(). Otherwise they + will become part of the data and not separators in the URL argument + string.

    +

    +

    +

    Case 3: Open a fresh page in the browser

    +

    The following example opens the plain browser script in a fresh window. In + order to get hold of the script name we use the predefined PHP constant + __FILE__ . The target can of course be changed to any + URL.

    +

    +

    Example 10.3. Creating CSIM URL targets to open in a fresh window

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +
    <?php
    +...
    +$n = .. ; // Number of bars
    +$targ = array(), $alt = array(); $wtarg = array();
    +for( $i=0; $i < $n; ++$i ) {
    +    $urlarg = urlencode( ... );
    +    $targ[] = __FILE__.'?'.$urlarg;
    +    $alt[] = 'val=%d';
    +    $wtarg[] = '_blank';
    +}
    +$bplot->SetCSIMTargets($targ,$alt,$wtarg);
    +...
    +?>
    +


    +

    +

    Case 4: Open in an existing window/frame

    +

    By modifying the $wtarg[] line in the example above to

    +

    +

    1
    +2
    +3
    +
    <?php 
    +$wtarg[] = '';
    +?>

    +

    +

    The target will open in the existing window.

    +

    In the "Example/" directory you can find the above a + fully working script as "csim_in_html_ex1.php" (HTML + script) and "csim_in_html_graph_ex1.php" (Graph + script).

    +
    +

    Adding multiple CSIM graphs in a HTML page

    + +

    Having laid the foundation for inclusion of CSIM graphs in Adding one CSIM graph in a HTML page it is now a simple exercise to + extend this to include multiple CSIM graphs in the same HTML page. The only + modifications we have to do is to make sure that:

    +

    +

    1. +

      Each image map has a unique name

      +
    2. +

      The graph scripts must create unique instances of the main Graph + class, i.e. they cannot both have an instance called + "$graph"

      +
    3. +

      Include each graph script in turn and get the corresponding HTML + map

      +
    4. +

      Get the proper image tag for each graph

      +

    +

    +

    In Example 10.4. Example of HTML page that includes two Graph CSIM scripts + ("Examples/csim_in_html_ex2.html") we show a complete HTML script that + includes two graphs, one bar (the same as in the previous example) and one Pie + graph. For illustrative purposes we use class PieGraphC variant + which is a Pie graph with a circular middle. The result of calling this HTML + page is shown in ??

    +

    +

    Example 10.4. Example of HTML page that includes two Graph CSIM scripts + ("Examples/csim_in_html_ex2.html")

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +
    <html>
    +<body>
    + 
    +<?php
    +// The names of the graph scripts
    +$_graphfilename1 = 'csim_in_html_graph_ex1.php';
    +$_graphfilename2 = 'csim_in_html_graph_ex2.php';
    + 
    +// This is the filename of this HTML file
    +global $_wrapperfilename;
    +$_wrapperfilename = basename (__FILE__);
    + 
    +// Create a random mapname used to connect the image map with the image
    +$_mapname1 = '__mapname'.rand(0,1000000).'__';
    +$_mapname2 = '__mapname'.rand(0,1000000).'__';
    + 
    +// Get the graph scripts
    +require_once ($_graphfilename1);
    +require_once ($_graphfilename2);
    + 
    +// This line gets the image map and inserts it on the page
    +$imgmap1 = $graph->GetHTMLImageMap($_mapname1);
    +$imgmap2 = $piegraph->GetHTMLImageMap($_mapname2);
    +echo $imgmap1;
    +echo $imgmap2;
    + 
    +?>
    + 
    +<h2>This is an example page with CSIM graphs with arbitrary HTML text</h2>
    + 
    +<?php
    +if( empty($_GET['clickedon']) ) {
    +   echo '<b style="color:darkred;">Clicked on bar: &lt;none></b>';
    +}
    +else {
    +   echo '<b style="color:darkred;">Clicked on bar: '.$_GET['clickedon'].'</b>';
    +}
    +echo '<p />';
    +if( empty($_GET['pie_clickedon']) ) {
    +   echo '<b style="color:darkred;">Clicked on pie slice: &lt;none></b>';
    +}
    +else {
    +   echo '<b style="color:darkred;">Clicked on pie slice: '.$_GET['pie_clickedon'].'</b>';
    +}
    +echo '<p />';
    +?>
    + 
    +<p>First we need to get hold of the image maps and include them in the HTML
    +  page.</p>
    +<p>For these graphs the maps are:</p>
    +<?php
    +// The we display the image map as well
    +echo '<small><pre>'.htmlentities($imgmap1).'</pre></small>';
    +?>
    +<p>
    +and
    +</p>
    +<?php
    +// The we display the image map as well
    +echo '<small><pre>'.htmlentities($imgmap2).'</pre></small>';
    +?>
    + 
    +<?php
    +// Construct the <img> tags for Figure 1 &amp; 2 and rebuild the URL arguments
    +$imgtag1 = $graph->GetCSIMImgHTML($_mapname1,$_graphfilename1);
    +$imgtag2 = $piegraph->GetCSIMImgHTML($_mapname2,$_graphfilename2);
    +?>
    +<p>The graphs are then displayed as shown in figure 1 &amp; 2. With the following
    +  created &lt;img> tags:</p>
    +<small><pre>
    +<?php 
    +echo htmlentities($imgtag1); 
    +echo htmlentities($imgtag2); 
    +?>
    +</pre></small>
    + 
    +<p>
    +Note: For the Pie the center is counted as the first slice.
    +</p>
    + 
    +<p>
    +<table border=0>
    +<tr><td valign="bottom">
    +<?php
    +echo $imgtag1;
    +?>
    +<br><b>Figure 1. </b>The included Bar CSIM graph.
    +</p>
    +</td>
    +<td valign="bottom">
    +<?php
    +echo $imgtag2;
    +?>
    +<br><b>Figure 2. </b>The included Pie CSIM graph.
    +</p>
    +</td>
    +</tr>
    +</table>
    +</body>
    +</html>
    +


    +

    +

    +

    Figure 10.2. Browser window after calling HTML page in Example 10.4. Example of HTML page that includes two Graph CSIM scripts + ("Examples/csim_in_html_ex2.html") (Note: The image has been + scaled down to better fit this manual.)

    + +
    Browser window after calling HTML page in (Note: The image has been scaled down to better fit this manual.)
    +


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch12.html b/Societes/ric/jpgraph/docs/chunkhtml/ch12.html new file mode 100755 index 00000000..72216ead --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch12.html @@ -0,0 +1,105 @@ +Chapter 12. Commonalities for all graphs

    Chapter 12. Commonalities for all graphs

    + +

    All graph scripts follow, to some extent, the same structure. All scripts must start + by creating an instance of the Graph class. The Graph class represent the entire graph + and can have one or more plots build up from the data series. Almost all methods that + are used to control the appearance of the graph are methods of this class.

    +

    In order to give a feel for common objects we show examples of two of the most + commonly used graph types, cartesian graphs and pie graphs in the following two + sections.

    +

    Common objects for cartesian graphs (x-, y-graphs)

    + +

    In all documentation of the library the convention is that the instance of the + Graph class will be stored in a variable named "$graph". Most of the + parts that make up a graph are available as instance variables of the Graph class. + In order to illustrate some of the commonly used instance variables Figure 12.1. Commonly used objects in a graph (common-obj-graph.php) shows a basic graph with a number of the + objects that can be manipulated in the graph scripts.

    +

    +

    Figure 12.1. Commonly used objects in a graph (common-obj-graph.php)

    + +
    Commonly used objects in a graph (common-obj-graph.php)
    +


    +

    +

    We note a few things in Figure 12.1. Commonly used objects in a graph (common-obj-graph.php) +

    • +

      All graphs will start by including the necessary library files via one + or more "require_once" PHP statements

      +
    • +

      All graph scripts (for 2D linear type graphs) will have the following + two method calls

      +

      +

      1
      +2
      +
      $graph = new Graph($width, $height);
      +$graph->SetScale('...');

      +

      +

      These two calls create the necessary instance of the core Graph class + that represents the entire graph and specifies what scale should be used + for the y- and x-axis. In Figure 12.1. Commonly used objects in a graph (common-obj-graph.php) we + are also using a second -axis so in this case the script will also + contain a call to

      +

      +

      1
      +
      $graph->SetY2Scale('...');

      +

      +
    • +

      Most graphs will also adjust the left, right, top and bottom margin. + In Figure 12.1. Commonly used objects in a graph (common-obj-graph.php) the margins are shown with + red arrows. The margins are specified with the method

      +

      +

      1
      +
      $graph->SetMargin($left,$right,$top,$bottom);

      +

      +
    • +

      All text objects (e.g. graph and axis titles) are instances of the + common Text class. This means that the text, font, color are specified + in the same way. For example the code to set the title and subtitle in + the graph above is

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +
      $graph->title->SetFont(FF_ARIAL, FS_BOLD, 14);
      +$graph->title->Set("Using JpGraph Library");
      +$graph->title->SetMargin(10);
      + 
      +$graph->subtitle->SetFont(FF_ARIAL, FS_BOLD, 10);
      +$graph->subtitle->Set('(common objects)');

      +

      +

      In a similar way the code to set the titles of the axis are

      +

      +

      1
      +2
      +3
      +4
      +5
      +
      $graph->xaxis->title->SetFont(FF_ARIAL, FS_BOLD, 10);
      +$graph->xaxis->title->Set("X-title");
      + 
      +$graph->yaxis->title->SetFont(FF_ARIAL, FS_BOLD, 10);
      +$graph->yaxis->title->Set("Y-title");

      +

      +
    • +

      The graph uses a legend in two rows to name each data series. The + position of the legend is controlled by the script and in Figure 12.1. Commonly used objects in a graph (common-obj-graph.php) we placed it on the right side. + It is also possible to in detail to adjust the layout of the names in + the data series. For example we could change the layout of the legend to + position all the names of the data series in one row as opposed to one + column which is the default. The number of columns and/or rows is user + settable.

      +
    • +

      Finally all graphs will end with a call to Stroke() or + one of its variants (StrokeCSIM(), + StrokeCSIMIMage()). As was described in Part II this + will send back the constructed image to the client, usually a + browser.

      +
    +

    For other types of graphs (for example Gantt charts) some of the above standards + still apply but since they have a very different usage and layout the instance + variables will be different.

    +
    + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch12s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch12s02.html new file mode 100755 index 00000000..18403f00 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch12s02.html @@ -0,0 +1,60 @@ +Common object for Pie Graphs

    Common object for Pie Graphs

    + +

    For pie plots there are no concepts of axis or scales. Instead Pieplots have a + size and position within the graph. Figure 12.2. Commonly used objects in Piegraphs ( + common-obj-piegraph.php) + shows the common objects for a typical Pie graph

    +

    +

    Figure 12.2. Commonly used objects in Piegraphs ( + common-obj-piegraph.php)

    + +
    Commonly used objects in Piegraphs ( common-obj-piegraph.php)
    +


    +

    +

    The following should be noted.

    +

    +

    • +

      Instead of an instance of class Graph and instance of + class PieGraph must be used

      +

      +

      1
      +
      $graph = new PieGraph($width,$height);

      +

      +
    • +

      The title and subtitle has the same semantics as for cartesian + graphs

      +
    • +

      The pieplot is an instance of the class PiePlot which is + given the data to be used in the pieplot as first and only + argument

      +

      +

      1
      +
      $pieplot = new PiePlot($data);

      +

      +
    • +

      The size of the pieplot radius is given as fractions of the minimum of + the width and height of the graph

      +
    • +

      The position of the center of the pieplot is given as factions (width, + height) of the graph

      +
    • +

      The legend is controlled in the same way as for cartesian graphs by + accessing the instance variable "legend". In the Piegraph + in Figure 12.2. Commonly used objects in Piegraphs ( + common-obj-piegraph.php) we have changed the + layout of the legend by the two lines

      +

      +

      1
      +2
      +
      $graph->legend->SetPos(0.5,0.97,'center','bottom');
      +$graph->legend->SetColumns(3);

      +

      +

      These two method calls adjust the position and the internal layout of + the legend. The first line instructs the library to place the legend at + a point (defined in fractions of width and height) (0.5, 0.97) and align + that point with the (center, bottom) anchor point in the graph box. The + second lines specifies the number of columns to use int the + legend.

      +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch13.html b/Societes/ric/jpgraph/docs/chunkhtml/ch13.html new file mode 100755 index 00000000..63f7e13d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch13.html @@ -0,0 +1,50 @@ +Chapter 13. Getting hold of the data to be displayed

    Chapter 13. Getting hold of the data to be displayed

    + +

    The initial obstacle that must be negotiated is to get hold of the data to be + displayed since the library itself is completely agnostic to where the data comes from. + The library will use data supplied in one or more arrays and it is up to the user of the + library to get hold of the data to populate these arrays with proper data. In principle + the data can come from one of the following places

    +

    +

    1. +

      Hard-coded data in the script. This is the least flexible and can only + really be recommended for examples and really static data.

      +
    2. +

      Data stored in plain text files.

      +
    3. +

      Data stored in binary format in flat files.

      +
    4. +

      Data stored in a database

      +
    5. +

      Data sent to the script via URI parameter passing (either GET or POST HTTP + constructs can be used).

      +

    +

    +

    In the following sections we will shortly discuss each of these methods.

    +

    +

    Caution

    +

    The library assumes that the data available in an array that starts with index + 0

    +

    +

    +

    Static data

    + +

    This is the simplest way and consists of only specifying the data in one or + several usual PHP arrays directly in the graph script. For example to specify data + for a Pieplot one could use the following constructions

    +

    +

    1
    +2
    +
    $data = array(1,8,5,4,12,18);
    +$pieplot = new PiePlot ($data);

    +

    +

    This is the method used for all examples under the "Example/" + directory.

    +
    + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch13s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch13s02.html new file mode 100755 index 00000000..c57aaafc --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch13s02.html @@ -0,0 +1,164 @@ +Reading data from a file

    Reading data from a file

    + +

    The second method in order of complexity is to read the data from plain text + files. An example on how to use this was shown in Preparing the data. The library contains utility + methods to ease reading of plain textual data in one of the following + formats:

    +

    +

    1. +

      One column

      +
    2. +

      Two columns

      +
    3. +

      Comma separated values, CSV

      +

    +

    +

    The utility class to handle this is called Class ReadFileData and + contains three utility methods corresponding to the list above, they are + ReadFileData::From1Col(), ReadFileData::From2Col(), + ReadFileData::FromCSV() and + ReadFileData::FromCSV2().

    +

    These methods are described shortly below

    +

    +

    ReadFileData::From1Col($aFileName, $aCol1)
    +

    Reads data from a text file with one column of data and stores in + the supplied $aCol1 vector.

    +

    Typical data looks like

    +

    +

    1
    +2
    +3
    +
    123
    +14.5
    +19.2

    +

    +

    which would result in

    +

    +

    1
    +
    $aCol == array(123, 14.5, 19,2)

    +

    +
    ReadFileData::From2Col($aFile, $aCol1, $aCol2, $aSepChar=' + ')
    +

    Reads data from a text file with two columns separated by the + specified character.

    +

    Typical data looks like

    +

    +

    1
    +2
    +3
    +
    12,15
    +13,34
    +14,27

    +

    +

    which would result in

    +

    +

    1
    +2
    +
    $aCol1 == array(12,13,14);
    +$aCol2 == array(15,34,27);

    +

    +
    ReadFileData::FromCSV($aFile,&$aData,$aSepChar=',',$aMaxLineLength=1024)
    +

    This method reads comma separated values from a specified file. + The values are all separeted by the specified character. This method + can be seen as a generalization of From1Col() method.

    +

    Typical data looks like

    +

    +

    1
    +
    12,34,56,18,19.7,55

    +

    +

    which would result in

    +

    +

    1
    +
    $aData == array(12,34,56,18,19,7,55)

    +

    +
    ReadFileData::FromCSV2($aFile, &$aData, $aOptions = + array())
    +

    This method also reads comma separated values from a file but with + more advanced options to control how the data is read. This can be + seen as a generalization of From2Col() method.

    +

    The possible options and there default values for this method + are

    +

    +

    • +

      'separator' => ','

      +
    • +

      'enclosure' => '"'

      +
    • +

      'readlength' => 1024

      +
    • +

      'ignore_first' => false

      +
    • +

      'first_as_key' => false

      +

    +

    +

    Typical data (using the default values)

    +

    +

    1
    +2
    +3
    +
    10,55
    +12,78
    +15,98

    +

    +

    would result in

    +

    +

    1
    +2
    +3
    +4
    +
    $aData = array(
    +  0 => array(10,12,15),
    +  1 => array(55,78,98)
    +);

    +

    +

    If 'first_as_key'=>true and the data looks looks like

    +

    +

    1
    +2
    +3
    +4
    +
    "key","value"
    +10,55
    +12,78
    +15,98

    +

    +

    the data would instead be read as

    +

    +

    1
    +2
    +3
    +4
    +
    $aData = array(
    +  "key"   => array(10,12,15),
    +  "value" => array(55,78,98)
    +);

    +

    +
    ReadFileData::FromMatrix($aFile,$aSepChar=' ')
    +

    This method is especially suited o read matrix data from a file + for use with the Matrix visualization (described in Chapter 22. Matrix graphs). Each line in the file + corresponds to one row in the matrix.

    +

    Typical data can look like

    +

    +

    1
    +2
    +3
    +
    13,87,12
    +15,99,33
    +19,86,61

    +

    +

    Which wold return a matrix looking like

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    array( 
    +  array(13,87,12),
    +  array(15,99,33),
    +  array(19,86,61)
    +);

    +

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch13s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch13s03.html new file mode 100755 index 00000000..d1d9a46f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch13s03.html @@ -0,0 +1,371 @@ +Sending data to a graph script with URI arguments (GET and POST)

    Sending data to a graph script with URI arguments (GET and POST)

    + +

    In order to send data between different HTML pages (or to a specific page) there + are two ways to do this. Either by including the parameters in the URI directly, + (e.g. http://localhost/mygraph.php?d1=12) or by creating a POST request + and send to a page. The details of these two methods are discussed below.

    +

    +

    Note

    +

    There might be some confusion when to use the '&' and + when to use '&amp;' to separate variables in GET or POST + requests.

    +

    When writing URL in HTML the string should always be written with a full + entity encoding since the '&' is a special character + indicating the start of an entity that ends with an ';'. So for + example writing a URI in a HTML page should look like.

    +

    <a + href="myscript.php?idx=1&amp;start=2009&amp;end=2010">

    +

    the browser will then correctly convert the URI to single + '&' which is what should be sent to the server. When + typing URI directly in the browser (or in any plain text file) one should of + course always just use a single '&' +

    +

    +

    +

    +

    Tip

    +

    Use the method http_build_query() to build http queries from + an array with keys and values.

    +

    +

    +

    Using GET arguments

    + +

    GET arguments are the arguments that can be added as part of the URI. For + example as

    +

    +

    http://localhost/mygraph.php?id=12&start=20081223&end=20090115

    +

    +

    PHP automatically places all given arguments in the "super global" array + variable $_GET as an associative array.

    +

    There are a couple of things to note here

    +

    +

    • +

      The values in the argument string in the URI must be URL encoded, + this can easily be done with the PHP function + urlencode() (See + PHP Manual)

      +
    • +

      When the arguments are read from $_GET the must be un-quoted with + a call to urldecode()

      +
    • +

      Some browsers restrict the length of the URI that they will read + (typically < 2048bytes) which means that there is a limit on how + much data can be send as URI arguments

      +
    • +

      Some browsers will allow the syntax + "a[0]=10&a[1]=11&a[2]=12" i order to send + the array (10,11,12)

      +

    +

    +

    This way of specifying the argument string is mostly useful when

    +

    +

    • +

      The arguments are short

      +
    • +

      When the user should be able to bookmark an URI

      +
    • +

      When the data is not sensitive (since it can be seen in the + URI)

      +
    • +

      When the graph should be viewable by clicking on a link (more on + this when we compare the GET method with the POST method + below)

      +

    +

    +

    The "best practice" of using this method is to send a short key (or id) to the + graph script and the graph script itself will use this id to extract the real + data from a DB (or a plain text file). This way the same core graph script can + be used in various context to display wanted data.

    +
    +

    Using a POST request

    + +

    +

    Warning

    +

    This is a fairly advanced topic and it is recommended to use the other + methods of sending data to a script unless the specifications explicitly + demands that a POST request is constructed. Furthermore this requires a + very good understanding of HTTP request headers and the difference + between server side and browser side so if you are not sure that you + have the necessary background we strongly recommend to stay away from + this method.

    +

    +

    +

    Two of the obvious restrictions with the GET method is that a) the length of the data is restricted and b) the data is visible directly in the URI. The other + way to send data as part of the HTTP request is to use the POST method.

    +

    Unfortunately this is not as easy as just doing some magic and then we get the + same functionality as with the GET method. Even some authors get this wrong in + some very prominent PHP text books. Unfortunately it will take us too far to + discuss all the details of HTTP request headers (as described in RFC2616) + but we will explain the very basics.

    +

    First. let's state what an HTTP request is

    +

    +

    • +

      A POST HTTP request is used to send data to a specified URI from a + client. A client is normally a WEB-browser but can also (as we will + use it) be a script that sends the request to the same or to another + server. The data is URL encoded and passed in the body of the + request. There is no theoretically limit on the length of the + data.

      +

    +

    +

    A further common misunderstanding is that it is possible to use the PHP method + header() in order to create a POST request. This is even given + as an example in the notes to the header() method in the PHP manual + (See PHP + Manual). This is wrong. It is + not possible to use the + header() method to send a POST header. Trying to do this + reveals a basic misunderstanding of the role of a server and client.

    +

    +

    • +

      The header() method is used to send one or more + headers from the server to the + client (i.e. WEB-browser)

      +
    • +

      The HTTP POST request goes from the client (i.e. WEB-browser) + to the server

      +

    +

    +

    Figure 13.1. Post vs. header() data direction

    + +
    Post vs. header() data direction
    +

    Note that the image is greatly simplified to help illustrate the + vital point on data direction. For example the post request shown to + originate from a browser could originate from any client, for + example another script taking the role of a client.

    +
    +

    +

    Hence it is never possible to "simulate" a POST call with the use of the + header() function. There are basically three (correct) ways to + simulate a POST request as described below.

    +

    Before we continue lets first recapitulate the most common use of a POST + request, i.e. in a HTML form submission. When data is entered in a form on a + HTML page and the user presses the "Submit" button the data from the form is + packed as a POST request which is sent to the server at the specified URI (the + action URI). The server will the reply back to the POST request (with the data + sent back from the target of the post request) and the browser will show the + reply in the window in place of the original HTML form page.

    +

    However there is a crucial difference when we do this manually from a script + (running on the server) compared with the original form post data from the + browser to the server. After issuing a POST request (originating from a HTML + form) the browser automatically replaces the current page with the reply from + the POST request as a "new" page (by default using the same target window as the + request was made from).

    +

    This is not possible to do when sending a "fake" post request to a page since + we are not the browser. Instead what we will see in the browser is the page + sending the POST request, and not the + target of the post request. The best we can accomplish is to show the reply + inline in the calling page which are then shown in the browser.

    +

    This means that it is not possible to create a POST request and then somehow + directly show the reply as the resulting image. Instead what we can do is to + send the data to a image script (via a POST header) and then the graph script + can write the image to a file that is accessible from the server.

    +

    So to summarize. What we can do with a post request is to send the data to a + script b.php from a script a.php. The + b.php can then execute some statements, for example + creating a graph and store it on the server. This stored image can later be read + by the a.php script, for example via a <img> + tag.

    +

    How to create a POST request

    +

    There are in principle three ways of constructing a POST request to send data + to a specified URI as shown below.

    +

    After we have made the request (with any of the three methods shown below) the + server will reply back with the response created by the URI. This response is + any output sent by the script we are sending our request to. Normally this + should just be a return code indicating if the request was successful or + not.

    +

    Remember that these are calls made from the script a.php + running on server A to a script + b.php running on server B. There are no browser involved in these calls apart from the + initial request to run a.php. The figure below illustrates + the first phase when the request is sent to the B side

    +

    +

    Figure 13.2. The request phase of a POST header

    + +
    The request phase of a POST header
    +

    1. The request is initially made by calling the a.php script, + e.g. http://localhost/a.php in the browser

    +

    2. When the a.php script is executed it will create the POST + header and call script b.php o the server B (could possibly be + the same server). Since the browser is displaying script a.php + we can never change that directly but we can display the reply + from b.php in the page displayed by a.php

    +
    +


    +

    +

    Figure 13.3. The reply phase of a POST request

    + +
    The reply phase of a POST request
    +

    3. The b.php returns a reply by fir example echoing back a reply + code

    +

    4. The script running the browser receives its final data (which + is the reply from the b.php script) and then finish the original + request started in step 1.

    +
    +

    +

    Note: All the sendPostData_vX() + methods below assumes that the data is already urlencoded.

    +

    +

    1. +

      Create a stream request.

      +

      The advantage with this method is that it is available by default + in PHP >= 4.3 and of course in PHP5,6 without the need to install + additional libraries.

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +
      <?php
      +function sendPostData_v1($url, $data) { 
      +  $opts = array('http' => array(
      +    'method' => 'POST', 
      +    'header' => 
      +        "Content-type: application/x-www-form-urlencoded\r\n".
      +        "Content-Length: ".strlen($data)."\r\n".
      +    'content' => $data,
      +    ); 
      +  $stream = stream_context_create($opts); 
      +  $fp = fopen($url, 'rb', false, $stream); 
      +  if (!$fp) { // Some error handling } 
      + 
      +  // Find out what the page returns as its body 
      +  $reply = stream_get_contents($fp); 
      +  if ($reply === false) { // Some error handling } 
      + 
      +  return $reply; 
      +} 
      +?>

      +

      +
    2. +

      Open a socket directly and write to it +

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +
      <?php
      +function sendPostData_v2($url,$data,$port=80) { 
      +  $errno=-1;
      +  $errstr=''; 
      +  $fs = fsockopen($url,$port,$errno,$errstr); 
      +  if( $fs === false ) { // Some error handling } 
      + 
      +  $header = "POST $url HTTP/1.0\r\n"; 
      +  $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
      +  $header .= "Content-Length: " . strlen($data) . "\r\n\r\n"; 
      +  fputs($fs, $header . $data ); 
      + 
      +  // Find out what the page returns as its body 
      +  $reply = ''; 
      +  while( !feof($fs) ) { 
      +    $reply .= fgets($fp,8192); 
      +  } 
      +  return $reply; 
      +} 
      +?>

      +

      +
    3. +

      Use CURL to handle all the necessary + details

      +

      Note 1: This requires that curl + libraries are installed and that curl is enabled in the PHP + installations.

      +

      Note 2: Depending on the + application there might be many more options that needs to be + tweaked. The one used below are just the bare necessities.

      +

      Note 3: Using CURL is the most + general way to handle POST requests and simplifies the additional + complexity if we want to add encryption (i.e. HTTPS) in the + connection handling.

      +
      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +27
      +
      <?php
      +function sendPostData_v3($url,$data)
      +{
      +  // Initialize and get the curl handle
      +  $ch = curl_init();
      + 
      +  // Include possible headers in the reply from the server as well
      +  curl_setopt( $ch, CURLOPT_HEADER, true );
      + 
      +  // Return the reply as a string from curl_exec() instead of directly to stdout
      +  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
      + 
      +  // The URI we want to send the post data to
      +  curl_setopt($ch, CURLOPT_URL, $url);
      + 
      +  // Use the POST method
      +  curl_setopt($ch, CURLOPT_POST, true);
      + 
      +  // All the data to be sent
      +  curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
      + 
      +  $reply = curl_exec ($ch);
      + 
      +  curl_close($ch);
      +  return $reply;
      +}
      +?>
      +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch13s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch13s04.html new file mode 100755 index 00000000..15693212 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch13s04.html @@ -0,0 +1,35 @@ +Reading data from a database

    Reading data from a database

    + +

    Since there are so many databases and so many ways to organize data in tables it + is impossible to give generic examples. Instead we point out some common pitfalls + when gathering data from a database.

    +

    +

    • +

      Make sure the data is valid numeric data. It is a common mistake to + read NULL (or empty strings "") values and try to plot + them. Beware that the PHP function empty() also will return + true for 0 and "0" values so it is not enough to just test with + empty() since this will also remove all values that + happens to be valid 0 values. To avoid this use the following modified + empty method.

      +

      +

      1
      +2
      +3
      +4
      +5
      +
      function empty0($aValue){
      +    if ( !is_numeric(trim($aValue)) ) 
      +        return empty($aValue);
      +    return false;
      +}

      +

      +
    • +

      Some databases (e.g. MySQL) returns a column with decimal type values + as string in a SELECT statement which normally is handled by automatic + conversion in PHP but since PHP has different interpretation of "0.00" + and 0.00 in respect to what is interpreted as empty or not this needs to + be carefully handled.

      +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch13s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch13s05.html new file mode 100755 index 00000000..c83b6f73 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch13s05.html @@ -0,0 +1,22 @@ +Reading binary data from a file

    Reading binary data from a file

    + +

    This can be potentially dangerous since the exact format for the binary data can + differ depending on convention and system. The advantage is that it usually gives + smaller data files and is usually not as suspect to data corruption since it is not + easy to read directly into a text editor and change. In PHP a variable can be stored + in a binary format using the serialize() function and read back from a + file with unserialize()

    +

    +

    Tip

    +

    It is also possible to store binary data in a text file as a string. One + way of doing this is to do a base64 encoding of the binary data. This will + guarantee that the encoded data will only be printable characters which can + be stored in a normal string. One thing to remember is that this will + enlarge the data by roughly 30%. Another example on when base64 encoding is + useful is to store binary images in a text file. This is the way for example + all built-in images are stored in the library. The image is the re-created + from the string by first decoding the base64 data and then read in the data + with the GD function imagecreatefromstring() .

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch13s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch13s06.html new file mode 100755 index 00000000..c40e86e2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch13s06.html @@ -0,0 +1,69 @@ +Different types of NULL data handling

    Different types of NULL data handling

    + +

    In some data there might be data points missing. For example if some experimental + data is to be graphed there can be data points where the equipment was faulty and + not valid values exist. The library offers to way to handle this.

    +

    +

    1. +

      Leave the data point empty and leave a whole in the graph, for example + a break in a line plot. This happens iof the null value is specified as + either one of the following values

      +

      +

      • +

        'x' - A single character 'x'

        +
      • +

        '' - An empty string

        +
      • +

        NULL - The NULL value

        +

      +

      +
    2. +

      Ignore the data point and connect the previous and next data point + with the line in a line graph. This is accomplished by specifying the + null value as

      +

      +

      • +

        '-' - A single hyphen character

        +

      +

      +

    +

    +

    In Example 13.1. Illustration of different types of NULL values in graphs an example with the different types of + null values are shown. In these graphs the third data point is set to null with the + two different null values.

    +

    +

    Example 13.1. Illustration of different types of NULL values in graphs

    + +
    +
    +

    Figure 13.4. Original graph with all values

    + +
    Original graph with all values
    +

    +
    +

    Figure 13.5. Value at x=2 as ''

    + +
    Value at x=2 as ''
    +

    +
    +

    Figure 13.6. Value at x=2 as '-'

    + +
    Value at x=2 as '-'
    +

    +
    +
    +


    +

    +

    +

    Caution

    +

    If all values in a line plot are null values an error will be shown since + this is not considered to be a valid plot.

    +

    +

    Figure 13.7. Error when only null values are specified

    + +
    Error when only null values are specified
    +


    +

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch13s07.html b/Societes/ric/jpgraph/docs/chunkhtml/ch13s07.html new file mode 100755 index 00000000..308a58aa --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch13s07.html @@ -0,0 +1,47 @@ +Troubleshooting input data

    Troubleshooting input data

    + +

    There are two common mistakes that causes problems with input data.

    +

    +

    1. +

      The indexes in the data array has missing keys. The library assumes + that the data array has consecutive values indexed from 0 and upwards. + This means that the following data array specification is illegal

      +

      +

      1
      +
      $data = array( 1 => 23, 2 => 14, 3 => 17 ) ;

      +

      +

      The problem with the array above is that it lacks the 0 key. A similar + problem is to have a missing index, such as

      +

      +

      1
      +
      $data = array( 0 => 23, 2 => 14, 3 => 17 ) ;

      +

      +

      If E_NOTICE is not enabled in + php.ini then this mistake will give the + (slightly misleading) error message shown in Figure 13.7. Error when only null values are specified. If full error checking is + enabled in php.ini then these types of problem will give the standard + PHP error message shown in Figure 13.8. PHP (HTML) error when missing data keys. This shows a PHP setup + which has HTML errors enabled. Note the JpGraph textual error string at + the bottom of the second PHP error message box.

      +

      +

      Figure 13.8. PHP (HTML) error when missing data keys

      + +
      PHP (HTML) error when missing data keys
      +


      +

      +
    2. +

      Another typical mistake caused by "faulty data" is different + convention for specifying decimal data. PHP and the library assumes that + decimal data used "." (point) to separate the integer from the decimal + part of a number. Some locales uses "," (comma) to do this separation. + This means that the following code will not work.

      +

      +

      1
      +
      $data = array( 0 => '12,0', 1 => '18,0', 2 => '15,0' ) ;

      +

      +

      Again, if E_NOTICE is not enabled in + php.ini then this mistake will give the + (slightly misleading) error message shown in Figure 13.7. Error when only null values are specified

      +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14.html new file mode 100755 index 00000000..5e2d09d1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14.html @@ -0,0 +1,436 @@ +Chapter 14. Common features for all Cartesian (x,y) graph types

    Chapter 14. Common features for all Cartesian (x,y) graph types

    Table of Contents

    14.1. The definition of linear graphs
    14.1.1. Axis and coordinate systems
    14.1.2. Adjusting the axis look and feel
    14.1.3. Adding grid lines in the plot
    14.1.4. Predefined scientific axis setups
    14.1.5. Other possible ways to position the axis
    14.2. Specifying and formatting the overall displayed graph
    14.2.1. Adjusting size, margins and frame
    14.2.2. Adding drop shadow to the graph
    14.2.3. Formatting and specifying the titles of the graph
    14.2.4. Specifying the image format to use
    14.2.5. Generic line formatting
    14.2.6. Adding a footer to the graph
    14.2.7. Adding timing of graphs
    14.3. Adjusting the look and feel of the plot area
    14.3.1. Plot area and margin areas
    14.3.2. Clipping to the plot area
    14.4. Adjusting the position and layout of the legend
    14.5. Other formatting options of the axis
    14.5.1. Adjusting and positioning titles on the axis
    14.5.2. Adjusting the font and color of the title
    14.6. Using multiple y-axis
    14.6.1. Adding additional y-axis
    14.6.2. Using CSIM together with multiple y-axis
    14.6.3. Restrictions with multiple y-axis
    14.7. Understanding and using different scales on the axis
    14.7.1. Different scale types
    14.7.2. Manual vs automatic scale handling
    14.7.3. Major and minor ticks
    14.8. Adjusting the appearance of the scale labels
    14.8.1. Adjusting the position
    14.8.2. Adjusting font and color
    14.8.3. Adjusting the background of the labels
    14.8.4. Hiding and rotating labels
    14.8.5. Fine tuning the automatic scales
    14.8.6. Manually altering the appearance of tick marks
    14.8.7. Manually specifying scale labels
    14.8.8. Emphasize of parts of the scale
    14.8.9. Adding static lines for specific scale values in the graph
    14.9. Using a logarithmic scale
    14.10. Using a date/time scale
    14.10.1. Specifying the input data
    14.10.2. Adjusting the start and end date alignment
    14.10.3. Manually adjusting the ticks
    14.10.4. Adjusting the label format
    14.10.5. Adjusting the automatic density of date labels
    14.10.6. Creating a date/time scale with a manual label call-back
    14.10.7. Using the "DateScaleUtils" class to make manual date scale
    14.10.8. When to use manual and when to use automatic date scale?
    14.11. Adding shearing image transformation to the graph
    14.12. Rotating graphs
    14.12.1. Free rotation of the plot area
    14.12.2. Rotating the plot area 90 degree
    14.13. Using anti-aliasing in the graph generation
    14.13.1. Anti-aliasing for line drawing graphs
    14.13.2. Anti-aliasing in pie graphs
    14.13.3. Anti-aliasing in Windrose plots
    14.13.4. Anti-aliasing for Contour plots
    14.14. Adding icons (and small images) to the graph
    14.15. Adding images and country flags to the background of the graph
    14.15.1. Using country flags as backgrounds
    14.16. Using background gradients
    14.16.1. Generating gradient background off-line
    14.17. Adding arbitrary texts to the graph
    + +

    The definition of linear graphs

    + +

    With cartesian graphs we refer to all plots which have orthogonal x and y axis. + The library support the option of multiple y-scales (when applicable) but only on + x-axis can be used.

    +

    The following principle linear graph types are supported as of v2.5 (note that + some graph types may have additional subtypes that are not shown in this + overview.)

    +

    +

    Figure 14.1. Supported principle linear graph types in the library

    + +
    +
    +

    Supported principle linear graph types in the library

    +

    a) Line plot

    +

    (See Creating a line graph)

    +
    +

    Supported principle linear graph types in the library

    +

    b) Area plot

    +

    (See Creating a filled line graphs (a.k.a. area plots))

    +
    +

    Supported principle linear graph types in the library

    +

    c) Bar plot

    +

    (See Bar graphs)

    +
    +

    Supported principle linear graph types in the library

    +

    a) Field plot

    +

    (See Field plots)

    +
    +

    Supported principle linear graph types in the library

    +

    b) Error plot

    +

    (See Error plot graphs)

    +
    +

    Supported principle linear graph types in the library

    +

    c) Stock plot

    +

    (See Stock graphs)

    +
    +

    Supported principle linear graph types in the library

    +

    a) Geo-map plot

    +

    (See Creating Geo-maps)

    +
    +

    Supported principle linear graph types in the library

    +

    b) Impuls (stem) plot

    +

    (See Scatter graphs)

    +
    +

    Supported principle linear graph types in the library

    +

    c) Spline plot

    +

    (See Constructing smooth line plots with Cubic Splines)

    +
    +

    Supported principle linear graph types in the library

    +

    a) Balloon plot

    +

    (See Balloon plots)

    +
    +

    Supported principle linear graph types in the library

    +

    b) Scatter plot

    +

    (See Scatter graphs)

    +
    +

    Supported principle linear graph types in the library

    +

    c) Contour plot

    +

    (See Contour graphs )

    +
    +
    +


    +

    +

    Each of these graph types have there own section where more details can be found + by following the link under the corresponding graph icon.

    +

    Axis and coordinate systems

    + +

    The x and y axis each in a graph has an associated scale, labels, titles, grid + lines, colors and position. The axis properties are accessed as objects of the + axis instance variables in the main graph class. The axis can be access vi the + following instance variables.

    +

    +

    • +

      Graph::xaxis, The x-axis, (by default on the + bottom)

      +
    • +

      Graph::yaxis, The y-axis, (by default on the left + side)

      +
    • +

      Graph::y2axis, The second y-axis (by default on the + right side)

      +

    +

    +

    In addition the library also supports the use of multiple y-axis and they are + accessed via an instance array

    +

    +

    • +

      Graph::ynaxis[]

      +

    +

    +

    All axis in turn are instances of class Axis and hence share + common properties. The only two property that can be publicly accessed on the + axis are

    +

    +

    • +

      Axis::scale. The scale of the axis. An instance of + either LinearScale, LogScale or + DateScale. This rarely needs to be accessed + directly.

      +
    • +

      Axis::title. The axis title. On the x-axis this is + horizontal by default and on the y-axis the title is vertical by + default

      +

    +

    +

    On the other hand there are a large amount of methods that can be used on the + axis to adjust various properties. Some examples of commonly used methods are + given below. The full description of each method is given in the API + reference.

    +

    +

    • +

      Adjusting the labels

      +

      +

      • +

        Axis::SetLabelFormatString($aFormStr,$aDateFormat=false). + Specifies the labels format string assuming + printf() format if $aDate + is false and in date() format if + $aDate is true.

        +
      • +

        Axis::SetLabelFormatCallback($aCallbackFunc)

        +
      • +

        Axis::SetLabelAlign($aHorAlign, $aVertAlign='top',$aParagraphAlign='left')

        +
      • +

        Axis::HideLabels($aHide=true)

        +
      • +

        Axis::SetTicklabels($aLabels, $aLabelColors=null)

        +
      • +

        Axis::SetLabelMargin($aMargin)

        +
      • +

        Axis::SetLabelSide($aSide)

        +
      • +

        Axis::SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10)

        +
      • +

        Axis::SetLabelAngle($aAngle). Species the + angle of the label. Note: It is only possible to use + arbitrary angles if the font is a true type font. The + built in bit map fonts only supports 0 and 90 degree + text strings.

        +

      +

      +
    • +

      Adjusting the tick marks

      +

      +

      • +

        Axis::SetTickSide($aSide)

        +
      • +

        Axis::SetTickPositions($aMajPos,$aMinPos=NULL,$aLabels=NULL)

        +
      • +

        Axis::HideTicks($aHide)

        +

      +

      +
    • +

      Adjusting the actual axis

      +

      +

      • +

        Axis::HideLine($aHide=true), ONly hide + the axis but whos the labels

        +
      • +

        Axis::Hide($aHide), Hide both axis and + labels

        +
      • +

        Axis::SetWeight($aWeight), Set the weight + in pixels of the axis

        +
      • +

        Axis::SetPos($aPositionOnOtherScale) + Specifies the position of the axis on the other scale. + The position is given the scale of the other axis. There + are two special values (strings) that can be given and + those are

        +

        +

        • +

          'min' - Will position the axis + at the minimum value of the other scale

          +
        • +

          'max' - Will position the axis + at the maximum value of the other scale

          +

        +

        +

      +

      +
    • +

      Adjusting the title

      +

      +

      • +

        Axis::SetTitle($aTxt)

        +
      • +

        Axis::SetTitleMargin($aMargin)

        +
      • +

        Axis::SetTitleSide($aSide)

        +
      • +

        Axis::SetColor($aColor,$aLabelColor)

        +

      +

      +

    +

    +

    The above methods are valid for all possible axis. So for example the + following line sets the font for the labels on the x-axis

    +

    +

    1
    +
    $graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,12);

    +

    +

    and the follwing code set the font for the y-axis

    +

    +

    1
    +
    $graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,12);

    +

    +
    +

    Adjusting the axis look and feel

    + +

    The two major ways to adjust the look and feel of the axis are adjustments of + the color and the weight (i.e. width) and this can be done with the appropriate + methods as described above.

    +

    +

    • +

      Axis::SetColor($aColor,$aLabelColor), For example + $graph->xaxis->SetColor('teal'). Please note that + by default the color for the labels will be that of the line if the + label color is not explicitly specified.

      +
    • +

      Axis::SetWeight($aWeight). Specify the weight (in + pixels of the axis)

      +

    +

    +
    +

    Adding grid lines in the plot

    + +

    +

    Note

    +

    The possibility of a having different styles, colors and weight for + minor and major grid lines was added in 3.0.4 and is not available in + earlier releases.

    +

    +

    +

    Grid lines will make it easier to see where the data points are in the graph. + The grid lines are access by the properties "xgrid" and + "ygrid"of the Graph class. By default only the y-axis grid are + enabled by default. The following code example enables the major grids for both + the x- and y-axis.

    +

    +

    1
    +2
    +
    $graph_>xgrid->Show();
    +$graph->ygrid->Show();

    +

    +

    The grid lines are instances of Class Grid. and supports the + following methods

    +

    +

    • +

      Grid::SetColor($aMajColor,$aMinColor=false). Specify + the color for the major an minor grid lines

      +
    • +

      Grid::SetWeight($aMajorWeight,$aMinorWeight=1). + Specify the weight of the line for the major and minor grid + line

      +
    • +

      Grid::Show($aMajGid=true,$aMinGrid=false). Determine + which grid lines should be shown

      +
    • +

      Grid::SetLineStyle($aMajorType,$aMinorType) This + method makes it possible to adjust the line style of the grid lines + (both major and minor separately). The line style is specified as a + string and can have one of the following values

      +

      +

      • +

        "solid"

        +
      • +

        "dotted"

        +
      • +

        "dashed"

        +
      • +

        "longdashed"

        +

      +

      +
    • +

      Grid::SetFill($aFlg=true,$aColor1='lightgray',$aColor2='lightblue')

      +

    +

    +

    The last method needs an explanation. The fill refers to the possibility to + fill the space between the grid lines with alternating colors as specified in + the method call. Figure 14.2. Using alternating fill colors in the grid (filledgridex1.php) shows an example on how + this can be used to make it easier to read a plot.

    +

    +

    Figure 14.2. Using alternating fill colors in the grid (filledgridex1.php)

    Using alternating fill colors in the grid (filledgridex1.php)


    +

    +

    In the above example we have also used the possibility of using alpha-blending + (for example on the shadow on the legend box).

    +

    The example below shows how to use different styles for the major and minor + grid lines

    +

    +

    Figure 14.3. Using different grid styles for major and minor grids (gridstylesex1.php)

    Using different grid styles for major and minor grids (gridstylesex1.php)


    +

    +
    +

    Predefined scientific axis setups

    + +

    In order to make it easier to setup a couple of typical axis configuration + used in science plots there are four predefined configurations as shown in Figure 14.4. Predefined scientific axis positions .

    +

    +

    Figure 14.4. Predefined scientific axis positions

    + +
    +
    +
    Predefined scientific axis positions
    +
    +
    Predefined scientific axis positions
    +
    +
    Predefined scientific axis positions
    +
    +
    Predefined scientific axis positions
    +
    AXSTYLE_BOXOUTAXSTYLE_BOXINAXSTYLE_YBOXINAXSTYLE_YBOXOUT
    +
    +


    +

    +

    The styles can easily be setup with a call to the method

    +

    +

    • +

      Graph::SetAxisStyle($aStyle)

      +

    +

    +

    An example of using this setup of the axis is shown in Figure 14.5. Example of AXSTYLE_BOXIN axis style (funcex2.php)

    +

    +

    Figure 14.5. Example of AXSTYLE_BOXIN axis style (funcex2.php)

    Example of AXSTYLE_BOXIN axis style (funcex2.php)


    +

    +
    +

    Other possible ways to position the axis

    + +

    The axis can be manually positioned with a call to

    +

    Axis::SetPos($aPos)

    +

    The argument $aPos is normally the coordinate position on the + "other" axis where the crossing of this and the other axis should be. There are + also two special positions which are given as strings. They are + 'min' and 'max'. Not surprisingly these special + positions will always refer to the min and max scale value of the other + axis.

    +

    The position given is the scale position on the "other"axis, i.e. for the + x-axis the position specifies the crossing of the y-axis and vice versa.

    +

    Since it is possible to manually specify all aspects of the axis the table + below shows some typical common setups and the principle calls needed to achieve + the illustrated affect.

    +

    +

    Table 14.1. Axis configurations

    + +
    +

    +
    +

    This is the default setup and not extra configurations + are needed and it is the same as

    +

    +

    1
    +
    $graph->SetAxisStyle(AXSTYLE_SIMPLE);

    +

    +
    +

    +
    +

    This setup is configured by moving the x-axis to the + top

    +

    +

    1
    +2
    +3
    +
    $graph->xaxis->SetPos('max');
    +$graph->xaxis->SetLabelSide(SIDE_UP);
    +$graph->xaxis->SetTickSide(SIDE_DOWN);

    +

    +
    +

    +
    +

    This is the standard style but with an added box + around the plot area.

    +

    +

    1
    +2
    +
    $graph->SetAxisStyle(AXSTYLE_SIMPLE);
    +$graph->SetBox();

    +

    +
    +

    +
    +

    +

    1
    +2
    +3
    +4
    +
    $graph->xaxis->SetPos('max');
    +$graph->xaxis->SetLabelSide(SIDE_UP);
    +$graph->xaxis->SetTickSide(SIDE_DOWN);
    +$graph->SetBox();

    +

    +
    +

    +
    +

    This configuration locks the x- and y-axis at the + origin

    +

    +

    1
    +2
    +
    $graph->xaxis->SetPos(0);
    +$graph->yaxis->SetPos(0);

    +

    +
    +

    +
    +

    With an added box around the plot area

    +

    +

    1
    +2
    +3
    +
    $graph->xaxis->SetPos(0);
    +$graph->yaxis->SetPos(0);
    +$graph->SetBox();

    +

    +
    +


    +

    +
    +
    + + + + + + + + + + + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s02.html new file mode 100755 index 00000000..a63a5c04 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s02.html @@ -0,0 +1,526 @@ +Specifying and formatting the overall displayed graph

    Specifying and formatting the overall displayed graph

    + +

    The overall look and feel of the graph can be adjusted in a number of ways.

    +

    +

    • +

      color of the plot area

      +
    • +

      color of the margin

      +
    • +

      size of the margin (and hence the position of the plot area)

      +
    • +

      title(s) of the graph, a graph can have both a "title", "subtitle" and + a "subsubtitle"

      +
    • +

      drop shadow around the graph

      +
    • +

      adding how long time it took to generate the graph

      +

    +

    +

    Adjusting size, margins and frame

    + +

    The overall size of the graph is specified in the initial creation of the + "$graph" instance. This is mandatory.

    +

    +

    1
    +
    $graph = new Graph($width,$height);

    +

    +

    The margin determines the space between the edges of the plotarea and edge of + the graph. Please note that the edge does not include the frame around the + entire graph area, i.e. whatever weight the frame edge has it doesn't impact on + the margin area. The margin is specified in the order left,right,top and bottom + margin and the size is specified in pixels.

    +

    +

    1
    +
    $graph->SetMargin(30,10,40,20);

    +

    +

    The default margin will be as narrow as possible but still have enough space + to show the titles and labels. The final adjustments is wheter or not the graph + will have a frame or not. There are two distinctions to be made here. No frame + meaning that the margin area will not be colored (i.e. painted) and no frame as + in no edge around the graph area. The first case is achieved by calling the + SetFrame() method on the Graph class

    +

    +

    1
    +
    $graph->SetFrame(false);

    +

    +

    and the second case is achieved by setting the frame edge to have weight zero. + Since the weight is given as the third argument we wtill have to put in valid + "dummy" argument for the on/off flag and the frame color parameter.

    +

    +

    1
    +
    $graph->SetFrame(true,'black',0);

    +

    +

    Refer to Figure 12.1. Commonly used objects in a graph (common-obj-graph.php) for definitoin of plot aea + and margin.

    +
    +

    Adding drop shadow to the graph

    + +

    A graph can have a drop shadow specified with the method + SetShadow() which has the signature

    +

    +

    1
    +
    SetShadow($aShowShadow=true,$aShadowWidth=5,$aShadowColor=array(102,102,102))

    +

    +

    by default there will be no dropshadow. Note that the drop shadow is a + straight simple shadow and has no Gaussian blur.

    +
    +

    Formatting and specifying the titles of the graph

    + +

    There are three possible standard titles in the graph

    +

    +

    1. +

      $graph->title

      +
    2. +

      $graph->subtitle

      +
    3. +

      $graph->subsubtitle

      +

    +

    +

    Each title is an instance of the Text class which means it supports the + standard text adjusting methods SetFont(), Set(), + SetColor() etc. The title s will be centered on the top of the + graph area with the title highest up, subtitle below and finally the subsubtitle + below that as shown in Figure 14.6. The various titles in a graph (titleex1.php)

    +

    +

    Figure 14.6. The various titles in a graph (titleex1.php)

    The various titles in a graph (titleex1.php)


    +

    +

    In addition to the above standard titles there is also another type of graph + titles called the "Tabular title". This is a title that sits directly on the + plot area looking like a "tab" in a sorting cabinet. Figure 14.7. Tabtitle and gradient background (gradbkgex1.php) and Figure 14.8. Tabtitle and image marker in a line plot (imgmarkerex1.php) + shows examples of this.

    +

    +

    +
    +

    Figure 14.7. Tabtitle and gradient background (gradbkgex1.php)

    Tabtitle and gradient background (gradbkgex1.php)

    +
    +

    Figure 14.8. Tabtitle and image marker in a line plot (imgmarkerex1.php)

    Tabtitle and image marker in a line plot (imgmarkerex1.php)

    +
    +

    +

    +

    These type of titles are created by using the

    +

    +

    1
    +
    $graph->tabtitle

    +

    +

    property in the Graph class. For example the tabtitle in Figure 7.2. Making use of transparency to combine two plots (barlinealphaex1.php) was generated by adding the lines

    +

    +

    1
    +2
    +
    $graph->tabtitle->Set('Year 2003');
    +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,10);

    +

    +

    Adding special background to the title

    + +

    There is one more way to make the graph title stand out that. This feature + is probably one of the least known ways to adjust the graph title and is + used to put a lot of emphasis on the title by having a separate color (and + style) for the background of the graph title.

    +

    +

    Note

    +

    This feature was added by the request of one of our users who had + a company design policy that demanded these type sof formatting + options for graphs.

    +

    +

    +

    The two methods used to control this style are

    +

    +

    • +

      Graph::SetTitleBackground($aBackColor='gray', + $aStyle=TITLEBKG_STYLE1, $aFrameStyle=TITLEBKG_FRAME_NONE, + $aFrameColor='black', $aFrameWeight=1, $aBevelHeight=3, + $aEnable=true)

      +

      This method is the basic method to specify a solid color + background with the defined style and type of framing. The first + style paramatere specifies the extension of the background and + how it interacts with the frame around the image.

      +

      +

      • +

        TITLEBKG_STYLE1, The title frame will + be drawn inside the overall graph frame

        +
      • +

        TITLEBKG_STYLE2, The title frame will + extend all the way to the edge of the graph and + overwrite any graph frame

        +
      • +

        TITLEBKG_STYLE3, This is the same as + TITLEBKG_STYLE2 apart from when it is used together + with framestyle TITLEBKG_FRAME_BEVEL then the bevel + frame border is on top of the title frame + border

        +

      +

      +
    • +

      Graph::SetTitleBackgroundFillStyle($aStyle,$aColor1='black',$aColor2='white')

      +

      The method determines adjusts the way the background of the + title is filled by allowing a simple pattern filling to be set. + This pattern filling is either horizontal or vertical stripes + (lines) with user selectable colors. The possible patterns + are

      +

      +

      • +

        TITLEBKG_FILLSTYLE_HSTRIPED, The + background will have horizontal stripes with + $aColor1 on a background with + $aColor2

        +
      • +

        TITLEBKG_FILLSTYLE_HSTRIPED, The + background will have vertical stripes with + $aColor1 on a background with + $aColor2

        +
      • +

        TITLEBKG_FILLSTYLE_SOLID, The + background will only have one color specified as + $aColor1

        +

      +

      +

    +

    +

    To better show the effect of the possible combinations the table below + shows a matrix of the possible combinations and the resulting styles. To + keep the table small only the relevant top are of the graph with the title + is shown.In addition to keep the style simple we have only used shades of + gray.

    +

    +

    +
    Frame/Fill + style +

    TITLEBKG_FILLSTYLE_HSTRIPED

    +
    +

    TITLEBKG_FILLSTYLE_VSTRIPED

    +
    +

    TITLEBKG_FILLSTYLE_SOLID

    +
    +

    TITLEBKG_STYLE1,

    +

    TITLEBKG_FRAME_NONE

    +
    +

    +
    +

    +
    +

    +
    +

    TITLEBKG_STYLE2,

    +

    TITLEBKG_FRAME_NONE

    +
    +

    +
    +

    +
    +

    +
    +

    TITLEBKG_STYLE3,

    +

    TITLEBKG_FRAME_NONE

    +
    +

    +
    +

    +
    +

    +
    +

    TITLEBKG_STYLE1,

    +

    TITLEBKG_FRAME_FULL

    +
    +

    +
    +

    +
    +

    +
    +

    TITLEBKG_STYLE2,

    +

    TITLEBKG_FRAME_FULL

    +
    +

    +
    +

    +
    +

    +
    +

    TITLEBKG_STYLE3,

    +

    TITLEBKG_FRAME_FULL

    +
    +

    +
    +

    +
    +

    +
    +

    TITLEBKG_STYLE1,

    +

    TITLEBKG_FRAME_BOTTOM

    +
    +

    +
    +

    +
    +

    +
    +

    TITLEBKG_STYLE2,

    +

    TITLEBKG_FRAME_BOTTOM

    +
    +

    +
    +

    +
    +

    +
    +

    TITLEBKG_STYLE3,

    +

    TITLEBKG_FRAME_BOTTOM

    +
    +

    +
    +

    +
    +

    +
    +

    TITLEBKG_STYLE1,

    +

    TITLEBKG_FRAME_BEVEL

    +
    +

    +
    +

    +
    +

    +
    +

    TITLEBKG_STYLE2,

    +

    TITLEBKG_FRAME_BEVEL

    +
    +

    +
    +

    +
    +

    +
    +

    TITLEBKG_STYLE3,

    +

    TITLEBKG_FRAME_BEVEL

    +
    +

    +
    +

    +
    +

    +
    +

    +

    +

    Note

    +

    There is a change in the behaviour of the latest GD library that + causes style 2 and style 3 in JpGraph 2.x to be more or less visually + identical as can be seen above. Using 1.x will more clearly show the + difference. The reason is that with JpGraph 2.x we rely more heavily on + the GD built in functions while in 1.x many of the functions where + instead implemented in the library (since they weren't earlier available + in GD 1.x). The change in JpGraph 2.x was made to increase the + performance, unfortunately some minor differences exist in the way GD + 2.x handles border line cases as how to handle pixel-by-pixel accuracy + (or convention). Over time these changes will become less and less as + parts of the library will be adjusted to the new GD 2.x + behaviour.

    +

    A typical example of changed behaviour is how rectangles with + thickness > 1 are positioned. The library assumes that the top left + (0,0) corner is the very top left part of the rectangle. This is not so + with GD 2.x. Instead (0,0) is the center point on the line. If the line + has thickness=1 they are identical but not if the line has a thickness > + 1

    +
    +
    +
    +

    Specifying the image format to use

    + +

    As described in Necessary system requirements for the library the actual image compression + available depends on the system setup. Assuming the needed sewtup is done then + the image format can be specified by using the method + Graph::SetImgFormat() and specifying the wanted format as a + string. For example as

    +

    +

    1
    +
    $graph->SetImgFormat('jpg',80);

    +

    +

    The method call above selects JPEG image compression algorithm and tells the + algorithm to set the quality parameter to 80%. This additional parameter is only + applicable together with JPG formatting.

    +
    +

    Generic line formatting

    + +

    Any lines in the library can have a number of formatting option. Attributes + that can be adjusted are

    +

    +

    • +

      Lineweight (thickness). The weight is specified in pixels and can + be any integer values

      +
    • +

      Linestyle , (dashed, dotted, solid etc). The style is specified as + a string using the line method SetLineStyle().

      +

      The available line styles are

      +

      +

      • +

        'solid', A solid line

        +
      • +

        'dotted', A line with dots

        +
      • +

        'dashed', A line with short hyphens

        +
      • +

        'longdashed', A line with long hyphens

        +

      +

      +

      For example to following method call set the y-grid to use the + "dotted" style

      +

      +

      1
      +
      $graph->ygrid->SetLineStyle('dotted');

      +

      +

      The image in Figure 14.9. Different line formatting shows + example of different line formatting styles

      +

      +

      Figure 14.9. Different line formatting

      + +
      +
      +

      Different line formatting

      +

      Standard

      +
      +

      Different line formatting

      +

      Anti-aliased

      +
      +

      Different line formatting

      +

      Thick (3 pixels)

      +
      +

      Different line formatting

      +

      Dashed

      +
      +

      Different line formatting

      +

      Long-dash

      +
      +

      Different line formatting

      +

      Dotted

      +
      +
      +


      +

      +
    • +

      Color. The line color is (as usual) adjusted with the method + SetColor().

      +

      For example the following line sets the color of the x-grid to + lightblue.

      +

      +

      1
      +
      $graph->xgrid->SetColor('lightblue');

      +

      +

    +

    +

    Note

    +

    If anti-aliasing is enabled (see ??.) then all line weights will always be + interpreted as having weight 1 regardless.

    +
    +

    +

    Tip

    +

    To avoid drawing a line set the line weight to 0

    +

    +

    +
    +

    Adding a footer to the graph

    + +

    It is possible to add a footer to the graph as well. The footer can have a + left, center and right part. The footer is accessed trough the footer property + of the Graph class and its three parts "left", "right" and "center". These parts + are instances of the Text class and hence all normal text + formatting c an be applied to each part of the footer. The following code + snippet shows how the footer parts can be set.

    +

    +

    1
    +2
    +3
    +
    $graph->footer->left->Set('Left footer');
    +                        $graph->footer->center->Set('Center footer');
    +                        $graph->footer->right->Set('Right footer');

    +

    +

    An example of using a footer is shown in Figure 14.11. Adding a left,right and center footer (footerex1.php)

    +

    +

    Figure 14.10. Using a footer in a graph

    + +

    Figure 14.11. Adding a left,right and center footer (footerex1.php)

    Using a footer in a graph

    +


    +

    +
    +

    Adding timing of graphs

    + +

    The footer in the bottom of the graph can also be used to show an + approximative timing of the graph generation. This is done with the help of + class JpgTimer. This timer class offers two methods

    +

    +

    1. +

      JpgTimer::Push(), Starts a new timer and puts it at + the top of the timer stack

      +
    2. +

      JpgTimer::Pop(), Pops the timer at the top of the + stack and returns the time (in ms) since the timer was pushed

      +

    +

    +

    (The stack based design makes it possible to have multiple timers running at + the same time without interfering each other.)

    +

    The footer class (Adding a footer to the graph) have a special + provision to handle an instance of the timer class

    +

    +

    • +

      Footer::SetTimer($aTimer,$aSuffix='')

      +

      $aTimer, an instance of JpgTimer

      +

      $aSuffix, an optional suffix string that will be + added at the end of the timing value

      +

    +

    +

    At the end of the graph generation the specified timer will be sent the sign + pop and the resulting timer value will be stored in the right footer of the + graph (appended to any previous value in the footer). For example the following + simple lines would time the graph generation.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php
    +// Create a new timer instance
    +$timer = new JpgTimer();
    + 
    +// Start the timer
    +$timer->Push();
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);
    +$graph->SetScale("textlin");
    + 
    +// Make the bottom margin large enough to hold the timer value
    +$graph->SetMargin(40,20,20,60);
    + 
    +$graph->title->Set("Timing a graph");
    +$graph->footer->right->Set('Timer (ms): ');
    +$graph->footer->right->SetFont(FF_COURIER,FS_ITALIC);
    +$graph->footer->SetTimer($timer);
    + 
    +// The rest of the script as normal ..

    +

    +

    +

    Note

    +

    Remember to make the bottom margin large enough.

    +

    +

    +

    Figure 14.12. Adding a timer to the graph (in the footer) (example11.php) shows an example of using a timer to add + the time (in ms) it took to generate the graph

    +

    +

    Figure 14.12. Adding a timer to the graph (in the footer) (example11.php)

    Adding a timer to the graph (in the footer) (example11.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s03.html new file mode 100755 index 00000000..10a945a7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s03.html @@ -0,0 +1,78 @@ +Adjusting the look and feel of the plot area

    Adjusting the look and feel of the plot area

    + +

    The graph area can be divided in two parts.

    +

    +

    1. +

      The margin area

      +
    2. +

      The plot area

      +

    +

    +

    These areas can have individual background colors as well as edges of user + settable size and color. In addition it is possible to use an image as background + with different formatting options.

    +

    Plot area and margin areas

    + +

    The plot area is where the plot is drawn and the margin area is everything + outside. Methods that affect the format of the plot area are

    +

    +

    1. +

      Graph::SetMargin() , This will adjust the size (and + position) of the plot area

      +
    2. +

      Graph::SetBox($aDrawPlotFrame=true,$aPlotFrameColor=array(0,0,0),$aPlotFrameWeight=1), + This will adjust tyhe format of the edge around the plot area. By + default this is disabled.

      +

    +

    +

    In a similar way the margin areas peroperties can be adjusted with the + methods

    +

    +

    1. +

      Graph::SetMargin() , same as above

      +
    2. +

      Graph::SetMarginColor($aColor)

      +
    3. +

      Graph::SetFram($aDrawImgFrame=true,$aImgFrameColor=array(0,0,0),$aImgFrameWeight=1)

      +
    4. +

      Graph::SetFrameBevel($aDepth=3,$aBorder=false,$aBorderColor='black',$aColor1='white@0.4',$aColor2='darkgray@0.4',$aFlg=true)

      +

    +

    +
    +

    Clipping to the plot area

    + +

    When auto scaling is used no data points will ever be outside the plot area + since the scaling will make sure it covers the dynamic range of the data. + However, when setting the scale manually there is always the risk that some data + points are outside the specified scale. This could then lead to the result shown + in Figure 14.13. Original plot without clipping (clipping_ex1.php) To avoid this situation it is possible + to enable clipping to the plot region by calling the method

    +

    +

    • +

      Graph::SetClipping($aFlg)

      +

    +

    +

    This will "cut away" all parts of the plot that would otherwise be stroked + outside the plot area.Figure 14.14. Plot with clipping enabled (clipping_ex2.php) shows the result + after clipping has been enabled.

    +

    +

    +
    +

    +

    Figure 14.13. Original plot without clipping (clipping_ex1.php)

    Original plot without clipping (clipping_ex1.php)


    +

    +
    +

    +

    Figure 14.14. Plot with clipping enabled (clipping_ex2.php)

    Plot with clipping enabled (clipping_ex2.php)


    +

    +
    +

    +

    +

    +

    Note

    +

    By default clipping is disabled since it will slightly increase the + CPU load and the time to generate the graphs.

    +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s04.html new file mode 100755 index 00000000..27af6db3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s04.html @@ -0,0 +1,110 @@ +Adjusting the position and layout of the legend

    Adjusting the position and layout of the legend

    + +

    While it is not strictly necessary to use a legend in the graph ti describe the + various data series potted it is usually a good idea. With the library there are + three basic types of formatting you can do with the legend.

    +

    +

    1. +

      Adjusting basic parameters such as color and width of the edges + (frame) around the plot box as well as adding/removing a drop shadow on + the legend box.

      +
    2. +

      Adjusting the position of the legend in the graph

      +
    3. +

      Adjusting the number of columns that should be used for the internal + layout in the legend box. As default the legend uses one column.

      +

    +

    +

    In Figure 14.15. Some example of ways to position the legend box in the graph we have shown some ides on + how the legend can be positioned in the graph to give some ideas on the options + available.

    +

    +

    Figure 14.15. Some example of ways to position the legend box in the graph

    + +
    +
    Some example of ways to position the legend box in the graphSome example of ways to position the legend box in the graphSome example of ways to position the legend box in the graph
    Some example of ways to position the legend box in the graphSome example of ways to position the legend box in the graphSome example of ways to position the legend box in the graph
    Some example of ways to position the legend box in the graphSome example of ways to position the legend box in the graphSome example of ways to position the legend box in the graph
    Some example of ways to position the legend box in the graphSome example of ways to position the legend box in the graphSome example of ways to position the legend box in the graph
    Some example of ways to position the legend box in the graphSome example of ways to position the legend box in the graph +
    +
    +


    +

    +

    The way the legend is positioned is by calling one of the two methods

    +
    • +

      Legend::SetPos($aX,$aY,$aHAlign='right',$aVAlign='top')

      +
    • +

      Legend::SetAbsPos($aX,$aY,$aHAlign='right',$aVAlign='top')

      +

    The first method specifies the position in fraction of the width and + height and the second method specifies the position in absolute pixels where (0,0) + is the top left corner. The anchor point for the legend box, i.e. the point in the + legend box that should be aligned with the specified positoin, is given with the + following two parameters. The line below gives an example of specifying the legend + position

    +

    +

    1
    +
    $graph->legend->SetPos(0.5,0.98,'center','bottom');

    +

    +

    The line above will position the legend centered horizontally and the bottom of + the legend just above the the bottom edge of the graph.

    +

    +

    Tip

    +

    The legend box can also have a drop shadow. By specifying the color to be + alpha-blended it is possible create a very nice drop shadow affect onto the + graph. See Figure 14.2. Using alternating fill colors in the grid (filledgridex1.php) or Figure 14.16. Some example of different legend layouts for some examples on how this + looks.

    +

    +

    +

    +

    Tip

    +

    By default the ordering of the texts in te legend will be the same as the + order the plots are added to the graph. It is also possible to reverse this + order in the legend with a call to the method + Legend::Revers()

    +

    +

    +

    The layout of the legend box can also be adjusted by specifying how many columns + the legends should use. By default one column is used which means that all legend + texts will be on top of each other. The number of columns to be used in the legend + is specified with a call to the method

    +

    +

    • +

      Legend::SetColumns($aNbr)

      +

    +

    +

    Figure 14.16. Some example of different legend layouts shows four examples how setting different + values for the number of columns will change the layout of the legend.

    +

    Figure 14.16. Some example of different legend layouts

    + +
    Some example of different legend layouts
    +

    +

    As two special cases the one column layout (a.k.a. vertical layout) which is the + default, and the "unlimited number of columns" a.k.a. horizontal layout can also be + specified with the method

    +

    +

    • +

      Legend::SetLayout($aLayout)

      +

      $aLayout is either LEGEND_VERT or + LEGEND_HOR

      +

    +

    +

    +

    Caution

    +

    Either SetLayout() or SetColumns() should be + used but not both since the method last called will be the one that is + used.

    +

    +

    +

    +

    Tip

    +

    The vertical margin between two legend texts can be adjusted with a call + to the method

    +

    +

    • +

      Legend::SetVColMargin($aSpacing)

      +

    +

    +

    by default the margin is quite small. Note. Since the bounding box for TTF fonts and bitmapped + texts are slightly different the distance between legend texts when using a + bitmap font (the default) will be visually larger than for TTF fonts. The + default value is optimized for TTF fonts.

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s05.html new file mode 100755 index 00000000..8efb515d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s05.html @@ -0,0 +1,81 @@ +Other formatting options of the axis

    Other formatting options of the axis

    + +

    Adjusting and positioning titles on the axis

    + +

    Each title of the graph can have a title of there own. By default the x-axis + has the title on the right and the y-axis have the title in vertical at the top + of the graph. The title of the axis is accessed by the title property of the + axis for the x- and y-axis as in

    +

    Graph::xaxis::title

    +

    Graph::yaxis::title

    +

    As a continence the following there methods are provided

    +

    +

    • +

      Axis::SetTitle($aTitle,$aAdjustAlign)

      +

      This method sets the title text string and the alignnemt of the + title. For the x-axis the alignment is pecified as one of the + folliwng three strings

      +

      +

      • +

        "left"

        +
      • +

        "center"

        +
      • +

        "right"

        +

      +

      +

      For an y-axis the alignment is set with one of the following three + strings

      +

      +

      • +

        "bottom"

        +
      • +

        "middle"

        +
      • +

        "top"

        +

      +

      +
    • +

      Axis::SetTitleMargin($aMargin)

      +

      The margin is specifies as the number of pixels distance from the + axis to the title

      +
    • +

      Axis::SetTitleSide($aSideOfAxis)

      +

      The side specifies for a horizontal axis (x-axis) if the title + should be above or below the axis and for a vertical axis (y-axis) + if the title should be on the left or the right of the axis.

      +

      Y-axis defines:

      +

      +

      1. +

        SIDE_LEFT

        +
      2. +

        SIDE_RIGHT

        +

      +

      +

      X-axis defines

      +

      +

      1. +

        SIDE_TOP

        +
      2. +

        SIDE_BOTTOM

        +

      +

      +

    +

    +
    +

    Adjusting the font and color of the title

    + +

    Since the title property can be easily accessed all usual Text class property + can be used. This includes the color property. To set the font and color of the + title for the x-axis the following methods are used

    +

    +

    • +

      Graph::xaxis::title::SetFont()

      +
    • +

      Graph::xaxis::title::SetColor()

      +

    +

    +

    For the y- and y2-axis the fonts and colors are set completely + analogues.

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s06.html new file mode 100755 index 00000000..23aa889b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s06.html @@ -0,0 +1,120 @@ +Using multiple y-axis

    Using multiple y-axis

    + +

    With this feature an arbitrary number of Y-axis can be added to the right side of + the graph. The library itself doesn't impose any restrictions on the number of extra + Y-axis but from a practical concern it is most likely very difficult to interpret a + graph with more than 2-3 extra y-axis.

    +

    If there is only need for one more Y axis then the concept of the additional Y2 + axis is available as a convenient shortcut for this the most common use of an extra + y-axis. The Y2 axis is also a first class citizen in the library meaning it has all + the properties available to the "normal" Y-axis.

    +

    These extra axis inherits most of the properties of the normal Y-axis (but not + all) and the few restrictions imposed are described in Restrictions with multiple y-axis below.

    +

    Figure 14.17. Basic example of multiple y-axis (mulyaxisex1.php) shows a basic example of how to use this + feature. The color encoding maps a specific line to the corresponding axis.

    +

    +

    Figure 14.17. Basic example of multiple y-axis (mulyaxisex1.php)

    Basic example of multiple y-axis (mulyaxisex1.php)


    +

    +

    Adding additional y-axis

    + +

    Adding additional Y-axis is very similar to the way standard Y axis work. The + Y-axis are numbered [0..n] where the 0:th axis is the Y-axis furthest to the + left. At the same time as these additional Y-axis are used it is also possible + to add a Y2 axis. The difference being that the Y2 axis can have all the same + options as the Y axis.

    +

    For basic usage only three new methods are needed

    +

    +

    1. +

      Graph::SetYScale($aNbr,$aScaleType,$aMin,$aMax) +

      +

      Specifies the type of scale ('lin', 'int' or 'log') to use for the + axis number '$aNbr' +

      +
    2. +

      Graph::AddY($aNbr,$aPlot)

      +

      Add a plot to axis number '$aNbr'

      +
    3. +

      Graph::SetYDeltaDist($aDistance)

      +

      This is an optional method that if used specifies the default + number of pixels between each additional Y-axis. This value will be + used unless a specific position for the N:th axis has been + specified. By default the additional Y-axis are separated with 50 + pixels (which is what is used in Figure 14.17. Basic example of multiple y-axis (mulyaxisex1.php) +

      +

    +

    +

    In order to initialize the extra y-axis the method SetYScale() must be called. + In Figure 14.17. Basic example of multiple y-axis (mulyaxisex1.php) the following lines are used

    +

    +

    1
    +2
    +3
    +
    $graph->SetYScale(0,'lin');
    +$graph->SetYScale(1,'lin');
    +$graph->SetYScale(2,'lin');

    +

    +

    Once setup these additional Y-axis are accessed through the array

    +

    Graph::ynaxis[]

    +

    The axis are numbered from 0. By accessing the axis through this array most of + the same method as for the usual Y and Y2 axis are available. For example, the + line below will set the color of axis number 1

    +

    +

    1
    +
    $graph->ynaxis[1]->SetColor('red');

    +

    +

    Finally the plots are added to a specific axis with a call to the method + AddY() (as opposed to the regular Add() or + AddY2() methods). The first argument must be an ordinal that + specified the number of the axis that the plot should be added to.

    +
    +

    Using CSIM together with multiple y-axis

    + +

    Client Side Image Maps is fully supported and is used in the same way as CSIM + for the basic Y-axis. A short example will clarify this. The following code + snippet shows a line plot where we have added some oversized markers (in the + shape of diamonds) that will act as the image map areas for each data + series

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +...
    +$lp2 = new LinePlot($datay2);
    +$lp2->mark->SetType(MARK_DIAMOND);
    +$lp2->mark->SetWidth(15);
    +$lp2->SetCSIMTargets($targ2,$alts2);
    +$graph->AddY(0,$lp2);
    +...
    +?>

    +

    +

    As usual the targets for the image maps are specified with a call to + Plot::SetCSIMTargets(). An example of CSIM with multiple y-axis + is included in the Example directory and the resulting image is reproduced in + Figure 14.18. Illustration of mulyaxiscsimex1.php (but just as an image not as + a CSIM image)

    +

    +

    Figure 14.18. Illustration of mulyaxiscsimex1.php

    + +
    Illustration of mulyaxiscsimex1.php
    +


    +

    +
    +

    Restrictions with multiple y-axis

    + +

    +

    • +

      Only standard plots can be added to the extra Y-axis, this means + no Text objects, no PlotBand, no PlotLines, no Icons etc

      +
    • +

      No Grid lines can not be added to the extra Y-axis

      +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s07.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s07.html new file mode 100755 index 00000000..fae4c6c0 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s07.html @@ -0,0 +1,363 @@ +Understanding and using different scales on the axis

    Understanding and using different scales on the axis

    + +

    Different scale types

    + +

    The scale of the graph axis are controlled by either

    +

    +

    • +

      Graph::SetScale() which can take on of the following + strings as argument

      +

      "intint", "intlin", "intlog", "linint", "linlin", "linlog", + "logint", "loglin", "loglog", "textint", "textlin", "textlog", + "datint","datlin","datlog"

      +

      The first half of the string argument specifies the x-axis scale + and the second half of the string specifies the y-axis scale. When + an y2 or multiple y-scales (see ??

      +

    +

    +

    Numerical scale types

    + +

    The scale for a basic graph is specified with a call to + Graph::SetScale() and supplying the wanted scales for the + x- and y-axis. For numeric data there are three basic scales + available

    +

    +

    1. +

      Integer scale "int"

      +
    2. +

      Linear scale (a.k.a decimal labels)

      +
    3. +

      Logarithmic scales

      +

    +

    +

    The choice of scale will affect how the autoscaling is done and how the + labels will look. Choosing an integer scale will, as the name suggests, + restrict the labels to integer and integer interval between the scale step + (at each tick mark). The linear scale has no such restriction and can be + considered a superset of the integer scale (even though the implementation + is done in rather the opposite way). Labels for linear scale can have + fraction intervals and will shows the decimal values by default in the + labels. Finally the logarithmic scale will create a deca - logarithmic + scale.

    +

    The style of the labels can be formatted in two ways

    +

    +

    1. +

      By specifying a format string (in printf() + format) to be used by calling the method + Axis::SetLabelFormatString() The format string + is interpretated according to the second parameter. If that + parameter is "true" then the format string will be + assumed to give a date format as expected by the + date() function. This is an easy way to + translate timestamp values to proper time/date labels.

      +
    2. +

      By specifying a callback function. The callback + function/method will be called with the label as the only + argument and must return the label that should be printed + Axis::SetLabelFormatCallback()

      +

      For example. An easy way to get 1000' separators for numbers + is to add the PHP function number_format() as callback to the + wanted y-axis as in

      +

      +

      1
      +
      $graph->yaxis->SetLabelFormatCallback('number_format');

      +

      +

      Another example of using a callback function is to "revert" + the y-axis. By default the y-axis grows from the bottom and up. + But what if we want the y-axis to grow from top to bottom, i.e. + the 0-value should be at the top and the largest value at the + bottom?

      +

      The way to accomplish this is to use a negative y-scale which + the plot is made against (by negating all the data values in the + data serie). This would then give the appearance that we want + apart from the act that all labels will have a minus sign in + front of them. By creating a callback function that just returns + the absolute value of the label we can adjust that and we get + the effect that we want. Figure 14.19. Inverted y-scale to show a dive profile (inyaxisex2.php) + shows an example of a "dive-curve" where the sea-level is at the + top of the graph to give better connection to this particular + use-case.

      +

      +

      Figure 14.19. Inverted y-scale to show a dive profile (inyaxisex2.php)

      Inverted y-scale to show a dive profile (inyaxisex2.php)


      +

      +

      +

      Note

      +

      The dive profile in Figure 14.19. Inverted y-scale to show a dive profile (inyaxisex2.php) is an actual dive of one of the authors dives in the + Gulf of + Bothnia

      +

      +

      +

    +

    +
    +

    Textual scale types

    + +

    There is only one pure textual scale type

    +

    +

    1. +

      Text scale ("text")

      +

    +

    +

    This type of scale is exclusively used for the x-axis.

    +

    The primary use of this scale is to label bars in a bar graph. However, as + will be shown this can also be used at other occasions to achieve various + wanted effects. There is no concept of autoscaling for text scales. Instead + the whole purpose of this type of scale is for the user to manually supply + the wanted labels in an array using the method + Axis::SetTickLabels().

    +

    The other key difference for a text scale as compared to the numeric + scales is that the labels are positioned in between the tick marks and not + directly under them. This is the common practice to label bar graphs and + hence this is the way text scale works.

    +
    +

    Date scale types

    + +

    This scale type only has one valid scale

    +

    +

    1. +

      Date scale ("dat")

      +

    +

    +

    This specific scale type will assume that the data values are timestamps + and will properly format them to give "even" steps (in a time/date + sense).

    +
    +
    +

    Manual vs automatic scale handling

    + +

    Normally the scale is determined automatically in the library by analyzing the + input data and making sure that a suitable scale is established that fulfill the + following criteria:

    +

    +

    1. +

      The full dynamic scope of the data series can be displayed

      +
    2. +

      The step size between major tick marks (tick marks that have a + label) is a multiple of either (1, 2, 5, 10 ) * 10 ^n, where the + size of 'n' is determined by the dynamic range of the data.

      +
    3. +

      In addition the number of labels is dependent on the size of the + graph. A smaller graph will have fewer labels since there is + "physically" not enough room to show too many labels.

      +

    +

    +

    +

    Note

    +

    Internally the auto scaling algorithm has fair amount of intelligence + to try to make the scale in the same way a human would so ti. For + example the origin has a specially strong attraction meaning that the + autoscaling will try hard to make sure 0 is included in the scale as + long as it "makes sense".

    +

    +

    +

    Usually this works fine in most cases but there are always exception where + exact control over the scale is wanted. For example to be able to compare + several graphs that might otherwise get different scales. There are two ways of + manually adjusting the scales.

    +

    +

    1. +

      Manual min/max values but with the tick + marks automatically determined

      +

      In this case the exact min/max value of the scale is submitted to + the SetScale() method call to set either (or both) of the x- and + y-scale. Since the first two argument after the scale type + determines the y min/max and the fourth and fifth argument specifies + the x min/max this means that in order to specify the x scale the y + scale must have some values. If the y axis should be left alone + (i.e. to be autoscaled) then just put the "dummy" values (0,0) as + placeholder in the method call. The following examples clarifies + this.

      +

      +

      • +

        $graph->SetScale('intlin',0,0,-10,20);

        +

        Y-scale is autoscaled and the x-scale is set to + [-10,20]

        +
      • +

        $graph->SetScale('intlin',0,50);

        +

        Automatic x-scale and manual y-scale with range + [0,50]

        +
      • +

        $graph->SetScale('intlin','-10,10,-20,20);

        +

        Manual x- and y-scale

        +

      +

      +
    2. +

      Semi automatic (or semi + manual)

      +

      This is a away to lock either the min or max value and let the + auto scaling algorithm determine a suitable corresponding max and + min value. This can be very useful to make sure that for example the + 0 value is always includeded even if the minimal value is so high + that the autoscaling algorithm have chosen to start at a larger + value. These two locked down values are set with the two + methods

      +

      +

      • +

        Scale::SetAutoMin()

        +

        Example: + $graph->yaxis->scale->SetAutoMin(0); + This will lock the y-min to 0

        +
      • +

        Scale::SetAutoMax()

        +

        Example: + $graph->xaxis->scale->SetAutoMax(1000); + This will lock the x.max to 0

        +

      +

      +

    +

    +
    +

    Major and minor ticks

    + +

    The final step in understanding the scaling is to understand tick marks. There + are two types of tick marks, major and minor. Major tick marks are tick marks + that have a label associated. Up to now we have assumed that the library adjusts + where the tick marks are positioned and the inter spacing between tick marks.

    +

    The tick object is available as an instance variable of the scale class which + means that you can access and adjust the tick mark properties by + accessing:

    +

    $Graph::Axis::Scale::ticks

    +

    For further fine control of the scale it is possible to manually adjust the + major and minor ticks using one of the three methods

    +

    +

    1. +

      Adjusting how dense the auto scaling + algorithm should put the tick marks.

      +

      Even when using a fully automatic scaling it is possible to adjust + how many tick marks that the algorithm should try to place on the + scale. This is controlled with the method

      +

      +

      • +

        Graph::SetTickDensity($aYDensity, + $aXDensity)

        +

      +

      +

      The y- and x-scale density can be set to one of the following + (symbolic) values

      +

      +

      • +

        TICKD_DENSEk

        +
      • +

        TICKD_NORMAL

        +
      • +

        TICKD_SPARSE

        +
      • +

        TICKD_VERYSPARSE

        +

      +

      +

      By default the density for all scales are set to + TICKD_NORMAL +

      +

      As a comparison Figure 14.21. Fully automatic not so good scaling (manscaleex2.php) is the exact + same as Figure 14.20. Setting tick density to TICKD_DENSE (manscaleex3.php) with the difference + that in this figure the density for the y-scale has been set to + TICKD_DENSE

      +

      +

      Figure 14.20. Setting tick density to TICKD_DENSE (manscaleex3.php)

      Setting tick density to TICKD_DENSE (manscaleex3.php)


      +

      +
    2. +

      Manually specifying the step size between + each minor and major tick.

      +

      This is done using the method

      +

      LinearTicks::Set($aMajStep,$aMinStep=false)

      +

      please note that this is a method of the Tick class which is + available as an instance variable in the scale class

      +

      Example: + $graph->xaxis->scale->ticks->Set(20,5);

      +

      This type of manual positioning of the tick marks might be useful + if the scale has been set to some non-multiples of 1,2,5,10. The + following examples will clarify this. In ?? the left graph is what + we get after manually specifying the y min/max values to (3,35). In + this case the auto scaling algorithm fails to assign "nice" steps to + the y-axis so that the tick marks starts and begins at the min/max + of the scale. If we manually set the tick distance to be (8,2), i.e. + we set the major tick marks 8 units apart and the minor + (non-labeled) tick marks 2 steps apart we get the much nicer result + as shown in the right graph in ??

      +

      +

      +
      +

      +

      Figure 14.21. Fully automatic not so good scaling (manscaleex2.php)

      Fully automatic not so good scaling (manscaleex2.php)


      +

      +
      +

      +

      Figure 14.22. Manually specified tick distance which gives a much better appearance (manscaleex1.php)

      Manually specified tick distance which gives a much better appearance (manscaleex1.php)


      +

      +
      +

      +

      +

      +

      Caution

      +

      The major tick step must be an even multiple of the minor + tick step. If this is not the case the library will + automatically adjust the major step size to be the closest + multiple of the minor step size.

      +

      +

      +
    3. +

      Specify the exact position for each single + tick mark

      +

      This is often used to position only the major tick marks to be + able to have labels at very specific points in the graph. One + example of how to use this was shown in Figure 8.8. Specifying manual ticks as fraction of Pi. (manualtickex2.php) where the tick marks were + positioned at factions of π. Another typical example is to place a + label at exactly the beginning of a month. Since months have + different lengths there is no other way if 100% precision is wanted. + An example of this is shown in Figure 14.23. Manually specifying the tick position for each month (manualtickex1.php) +

      +

      +

      Figure 14.23. Manually specifying the tick position for each month (manualtickex1.php)

      Manually specifying the tick position for each month (manualtickex1.php)


      +

      +

      +

      Caution

      +

      When the tick position is manually set there should also + be a corresponding array of labels to be put at these + positions.

      +

      +

      +
    4. +

      Adjusting the size and on what side the tick + marks should be drawn

      +

      The side on the axis which has the tick marks is adjusted with a + call to

      +

      +

      • +

        Axis::SetTickSide($aTickSide)

        +

        Possible options for the tick side are

        +

        +

        • +

          SIDE_UP

          +
        • +

          SIDE_DOWN

          +
        • +

          SIDE_LEFT

          +
        • +

          SIDE_RIGHT

          +

        +

        +

      +

      +

      For example, the following lines added to a script would change + side of the labels and tick marks for the x-axis.

      +

      +

      1
      +2
      +3
      +4
      +
      <?php
      +$graph->xaxis->SetLabelPos( SIDE_UP );
      +$graph->xaxis->SetTickSide( SIDE_DOWN ); 
      +?>

      +

      +

      This technique can for example be used to put the x-axis at the + top of the graph as the following example shows.

      +

      +

      Figure 14.24. Adjusting the side which have the tick marks and position the x-axis at the top (topxaxisex1.php)

      Adjusting the side which have the tick marks and position the x-axis at the top (topxaxisex1.php)


      +

      +

    +

    +

    In passing we mention that there are additional ways to adjust the look and + feel of the tick marks which is discussed in the next section (Adjusting the appearance of the scale labels) in detail.

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s08.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s08.html new file mode 100755 index 00000000..2be3518e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s08.html @@ -0,0 +1,550 @@ +Adjusting the appearance of the scale labels

    Adjusting the appearance of the scale labels

    + +

    Since scale labels play such an important part of producing a visually pleasing + graph there are a number of ways to fine tune this appearance. In the section below + we have tried to logically group the different options to make it easier to get an + overview.

    +

    +

    Adjusting the position

    + +

    The exact position of the labels can be adjusted with the methods

    +

    +

    • +

      Axis::SetLabelAlign($aHAlign,$aVAlign='top',$aParagraphAlign='left')

      +

      With this method the anchor point for the labels can be adjusted. + The labels are positioned straight below (or on the side for + vertical axis) the corresponding tick mark and by adjusting the + anchor point in the label different effect can be achieved. By + default labels on the x-axis there anchor point on the top side in + the center. For y-axis (on the left) the anchor point is middle of + the right edge of the label.

      +
    • +

      Axis::SetLabelMargin($aMargin)

      +

      This method adjusts the distance between the corresponding tick + mark and the label it self.

      +
    • +

      Axis::SetLabelSide($aSidePos)

      +

      This method will adjust on what side the labels will be + positioned. For a horizontal axis it cna be either above or below + the axis and for a vertical axis it can be on the left or right + side. The position is defined by one of the following + self-explaining defines

      +

      +

      • +

        SIDE_LEFT

        +
      • +

        SIDE_RIGHT

        +
      • +

        SIDE_TOP

        +
      • +

        SIDE_BOTTOM

        +

      +

      +

    +

    +
    +

    Adjusting font and color

    + +

    By default the color of the labels will be the same as for the axis but it is + possible to use a different color for the labels by supplying a second argument + to the SetColor() method for the axis.

    +

    +

    • +

      Axis::SetColor($aColor,$aLabelColor=false)

      +

      There is actually a special twist to the color specification here. + If the color is specified as a single value this color value will be + used for all labels. However, if the color is specified with an + array then those colors will be used for the labels in turn. If + there are more labels then colors specified then the colors will be + used in a wrap around fashion.

      +

    +

    +

    The font family for the labels can be specified with

    +

    +

    • +

      Axis::SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10)

      +

    +

    +

    By default a bitmap font is used for the labels (since those are the only + fonts guaranteed to be available everywhere)

    +

    +

    Example 14.1. Adjusting the axis font and color

    + +
    1
    +2
    +
    $graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->xaxis->SetColor('black','blue');
    +


    +

    +
    +

    Adjusting the background of the labels

    + +

    As a kind of a very special formatting it is also possible to set a specific + background for just the labels on the graph. This is most often used when there + is background image that risks of hiding the clarity of the labels. In those + cases it can be suitable to have a some lighter background to make it easier to + read the labels.

    +

    +

    Tip

    +

    This feature can also come in handy when using the more advanced + feature of combining several graphs to amke the labels stand out.

    +

    +

    +

    The method that controls this is

    +

    +

    • +

      SetAxisLabelBackground($aType,$aXFColor='lightgray',$aXColor='black',$aYFColor='lightgray',$aYColor='black')

      +

      Possible values of the type of background are:

      +

      +

      1. +

        LABELBKG_NONE

        +
      2. +

        LABELBKG_XAXIS

        +
      3. +

        LABELBKG_YAXIS

        +
      4. +

        LABELBKG_XAXISFULL

        +
      5. +

        LABELBKG_YAXISFULL

        +
      6. +

        LABELBKG_XY

        +
      7. +

        LABELBKG_XYFULL

        +

      +

      +

    +

    +

    The way these possible background types works is best described by viewing the + example figures below

    +

    +

    +
    +

    +

    Figure 14.25. LABELBKG_NONE (axislabelbkgex01.php)

    LABELBKG_NONE (axislabelbkgex01.php)


    +

    +
    +

    +

    Figure 14.26. LABELBKG_XAXIS (axislabelbkgex02.php)

    LABELBKG_XAXIS (axislabelbkgex02.php)


    +

    +
    +

    +

    Figure 14.27. LABELBKG_YAXIS (axislabelbkgex03.php)

    LABELBKG_YAXIS (axislabelbkgex03.php)


    +

    +
    +

    +

    Figure 14.28. LABELBKG_YAXISFULL (axislabelbkgex04.php)

    LABELBKG_YAXISFULL (axislabelbkgex04.php)


    +

    +
    +

    +

    Figure 14.29. LABELBKG_XAXISFULL (axislabelbkgex05.php)

    LABELBKG_XAXISFULL (axislabelbkgex05.php)


    +

    +
    +

    +

    Figure 14.30. LABELBKG_XYFULL (axislabelbkgex06.php)

    LABELBKG_XYFULL (axislabelbkgex06.php)


    +

    +
    +

    +

    Figure 14.31. LABELBKG_XY (axislabelbkgex07.php)

    LABELBKG_XY (axislabelbkgex07.php)


    +

    +
      
    +

    +

    +
    +

    Hiding and rotating labels

    + +

    For the x-axis it is common to rotate the label to better fit long text + labels. This is done with a call to

    +

    +

    • +

      Axis::SetLabelAngle($aAngle)

      +

      Remember that in order to set an arbitrary angel on the labels the + font family must be one of the TTF font families. Bitmap fonts only + support horizontal and vertical rotation.

      +

    +

    +

    There are actually five variant for hiding the aaxis

    +

    +

    • +

      Axis::HideLabels($aHide=true)

      +

      This will hide all the labels on the axis

      +
    • +

      Axis::HideFirstLastLabels($aHide=true)

      +

      Will hide the first and last label

      +
    • +

      Axis::HideFirstLabels($aHide=true)

      +

      Will hide the first label

      +
    • +

      Axis::HideLastLabels($aHide=true)

      +

      Will hide the last label

      +
    • +

      Axis::HideZeroLabel($aHide=true)

      +

      This will avoid printing a "0.00" label. This can be useful when + the axis are set to be crossing at the origin. This was for example + used in Figure 14.5. Example of AXSTYLE_BOXIN axis style (funcex2.php)

      +

    +

    +
    +

    Fine tuning the automatic scales

    + +

    By default the auto-scaling algorithm tries ot find as tight upper and lower + bands as possible as long as they are even multiple of the chosen major step + size. In some instances some more space is needed. For example to have extra + room at the top of the graph to show data labels. In order to have some extra + space the method

    +

    +

    • +

      LinearScale::SetGrace($aGraceTop,$aGraceBottom=0)

      +

    +

    +

    should be used. This method will adjust the autos calling algorithm by adding + the specified extra "grace"at the minimum and maximum value of the scale. The + grace value is specified as an integer [0,100] and specifies a percentage to add + to the min and max value before the auto scaling is made. Depending on the scale + step and overall scale several scale values might give the same resulting scale. + For example

    +

    +

    1
    +
    $graph->yscale->scale->SetGrace(20,20);

    +

    +

    will add 20% extra values on the top and bottom values of the data series + before the auto scale is determined. The following four examples shows how this + can be used in practice. In Figure 14.32. The original graph (grace_ex0.php) a bar graph + without grace value is created. As can be seen since the scale is very tight the + labels of the individual bars are almost out of the graph plot area. In the + following three plots results of using different values for grace are + shown.

    +

    +

    +
    +

    +

    Figure 14.32. The original graph (grace_ex0.php)

    The original graph (grace_ex0.php)


    +

    +
    +

    +

    Figure 14.33. Using a 10% grace (grace_ex1.php)

    Using a 10% grace (grace_ex1.php)


    +

    +
    +

    +

    Figure 14.34. Using a 50% grace (grace_ex2.php)

    Using a 50% grace (grace_ex2.php)


    +

    +
    +

    +

    Figure 14.35. Using a 100% grace (grace_ex3.php)

    Using a 100% grace (grace_ex3.php)


    +

    +
    +

    +

    +

    We finish this section by noting that adding a large grace value might + sometimes make it necessary to move one or both of the axis manually. To explain + this we start with the graph in Figure 14.36. The original line graph (example3.2.php)

    +

    +

    Figure 14.36. The original line graph (example3.2.php)

    The original line graph (example3.2.php)


    +

    +

    as can be seen the added plot marks (see ??) are outside the boundary of the + plot area and to solve this problem we add the line

    +

    +

    1
    +
    $graph->yaxis->scale->SetGrace( 10 , 10 );

    +

    +

    to the script. This now gives the result shown in Figure 14.37. Adding grace values. Note x-axis position at y=0 (example3.2.1.php)

    +

    +

    Figure 14.37. Adding grace values. Note x-axis position at y=0 (example3.2.1.php)

    Adding grace values. Note x-axis position at y=0 (example3.2.1.php)


    +

    +

    The problem is now apparent. Since the x-axis is placed at y=0 by default the + x-axis is no longer at the bottom of the plot as was probably the intention. To + remedy this situation we have to manually place the x-axis at the minimum + y-scale position. This is done by adding the line

    +

    +

    1
    +
    $graph->xaxis->SetPos( 'min' );

    +

    +

    to the previous script. Doing this gives us back the wanted position of the + x-axis as shown in Figure 14.38. Adjusting the position of the x-axis manually (example3.2.2.php)

    +

    +

    Figure 14.38. Adjusting the position of the x-axis manually (example3.2.2.php)

    Adjusting the position of the x-axis manually (example3.2.2.php)


    +

    +
    +

    Manually altering the appearance of tick marks

    + +

    To adjust the appearance of the tick marks the following three methods can be + used

    +

    +

    • +

      Axis::SetTickSide($aSide)

      +

      For x-axis this specifies if the tick should be drawn above or + below the axis and for the y-axis it specifies if the tick marks + should be on the left or on the right of the axis. Possible values + of the side parameter are one of the following defines

      +

      +

      • +

        SIDE_LEFT

        +
      • +

        SIDE_RIGHT

        +
      • +

        SIDE_TOP

        +
      • +

        SIDE_BOTTOM

        +

      +

      +
    • +

      Axis::HideTicks($aHideMinor=true,$aHideMajor=true)

      +

      Calling this method will make it possible to hide either noe of or + both the minor or the major tick marks.

      +
    • +

      Axis::SetTickSize($aMajSize,$aMinSize=3)

      +

      This specifies the size (in pixels) of the major and minor tick + marks.

      +

    +

    +
    +

    Manually specifying scale labels

    + +

    As was mentioned before it is perfectly possible to manually specify the scale + labels. This is normally done for "text" scales that are most commonly used with + bar graphs.

    +

    Specifying a text scale for the axis (normally the x-axis) will "reserve" a + position for every data value that must be manually set. In some ways this is + the same as having a linear scale with major and minor step size set to 1.

    +

    As a very basic example of a text scale with a bar graph Figure 14.40. Manual text scale with month labels (manual_textscale_ex1.php) shows some fictive values for each + month of the year. In that example the scale has been set to a text scale and + each value has been specified as an array containing all the names of the + months.

    +

    Tip

    +

    An easy way to get hold of the names of the months is to use the library + global instance $gDateLocale of class DateLocale. + This class has several utility methods. For example the two methods

    +

    +

    • +

      GetShortMonthName($aNbr)

      +
    • +

      GetLongMonthName($aNbr)

      +

    +

    +

    will return the proper month names (in either short or short or long + format) in the current locale. For more details see Figure 14.40. Manual text scale with month labels (manual_textscale_ex1.php) +

    +
    +

    +

    Figure 14.39. Manual text scale example

    + +

    Figure 14.40. Manual text scale with month labels (manual_textscale_ex1.php)

    Manual text scale example

    +


    +

    +

    Since the manual text scale sets a scale label for every single data point + this would give problem for the case where we have a large number of data points + where it is not possible to label every data point. In order to control this the + following two methods are used

    +

    +

    • +

      Axis::SetTextTickInterval($aStep,$aStart=0)

      +

      This method controls the interval between the tick marks for a + text scale. Since by default every tick will have a label it also + specifies how dense the labels will be. The following examples + clarifies how this works

      +

      +

      Example 14.2. Adjusting manual text tick interval

      + +

      Figure 14.41. Setting text tick interval=2 (manual_textscale_ex2.php)

      Setting text tick interval=2 (manual_textscale_ex2.php)

      +


      +

      +

      In the above example only ever second text tick mark is set and + since the labels are also placed at every tick marks only every + second label are shown.

      +
    • +

      Axis::SetTextLabelInterval($aStep)

      +

      This method complements the previous method. This method + exclusively determines where the labels are place. This makes it + possible to have more tick marks than labels. The previous example + Figure 14.41. Setting text tick interval=2 (manual_textscale_ex2.php) look a bit + strange since there are no tick-marks between every second bar. A + better solution in this case would be to have tick marks between + each bar but only label every second tick mark. This is exactly what + can be done with this method. It specifies that every n:th tick mark + should have a label.

      +

      In Figure 14.42. Labels at every 2:nd tick mark (manual_textscale_ex3.php) we have used + this method instead.

      +

      +

      Example 14.3. Adjusting the interval for the labels

      + +

      Figure 14.42. Labels at every 2:nd tick mark (manual_textscale_ex3.php)

      Labels at every 2:nd tick mark (manual_textscale_ex3.php)

      +


      +

      +

    +

    +

    Finally we show an example where there is a need to combine the above two + methods to get a reasonable looking scale. This happens when there are so many + data points that it is not possible to show every tick marks. To show that text + scales can also be used with other plot types than bar we have chosen to show a + line graph where we show data that has 40 data points per month (480 data points + per year). Let us assume that in this application we want to have tick marks at + every 40 points (i.e. a total of 12 tick marks) and have labels only on every + 2:th tick label (i.e. a total of 6 labels).

    +

    +

    Caution

    +

    The label array must have labels for every tick mark even if they are + not shown.

    +

    +

    +

    +

    Example 14.4. Adjusting both text tick mark and label interval

    + +

    Figure 14.43. Tick marks every 40 points and labels every 2:nd tick mark (manual_textscale_ex4.php)

    Tick marks every 40 points and labels every 2:nd tick mark (manual_textscale_ex4.php)

    +


    +

    +

    In addition to the text scale is it in principle also possible to use a manual + scale with integer scale as shown in Graphing the number of sun spots during the 19th Century

    +

    +

    Note

    +

    It is also perfectly legal to override the default labels for the Y + (and Y2) axis in the same way as we have shown for the x-axis but this + is probably a less used scenario.

    +

    +

    +

    +

    Caution

    +

    Please note that the supplied labels will be applied to each major + tick label. If there are insufficient number of supplied labels the + non-existent positions will have the ordinal number of the label.

    +

    +

    +
    +

    Emphasize of parts of the scale

    + +

    Sometimes it is a good idea to emphasize part of the scale. It can be on + either the x- or the y-axis. The library offers the possibility to add a band + with a separate background color for part of the scale in either x, y (or both) + directions.

    +

    A plotband is defined as an instance of class PlotBand that is + added to the graph in the same way as normal plots. A plot band can have a + number of different styles to achieve the wanted affect and it can be placed + either on top or behind the plot.

    +

    An instance is created and added to the graph as shown by the following + example

    +

    +

    1
    +2
    +3
    +4
    +
    // Add a horizontal band
    +$band = new PlotBand(HORIZONTAL,BAND_RDIAG,15,35,'khaki4');
    +$band->ShowFrame(false); // No border around the plot band
    +$graph->Add($band);

    +

    +

    The code snippet above adds a horizontal band with a diagonal pattern (from + top left to bottom right). The horizontal band is shown between the y-scale + values [15,35].

    +

    The types of plotbands supported by the library is shown in the table + below

    +

    +

    Example 14.5. Different densities for plot bands

    + +
    +
    +

    +

    Figure 14.44. BAND_RDIAG (smallstaticbandsex1.php)

    BAND_RDIAG (smallstaticbandsex1.php)


    +

    +
    +

    +

    Figure 14.45. BAND_LDIAG (smallstaticbandsex2.php)

    BAND_LDIAG (smallstaticbandsex2.php)


    +

    +
    +

    +

    Figure 14.46. BAND_DIAGCROSS (smallstaticbandsex10.php)

    BAND_DIAGCROSS (smallstaticbandsex10.php)


    +

    +
    +

    +

    Figure 14.47. BAND_HLINE (smallstaticbandsex7.php)

    BAND_HLINE (smallstaticbandsex7.php)


    +

    +
    +

    +

    Figure 14.48. BAND_VLINE (smallstaticbandsex6.php)

    BAND_VLINE (smallstaticbandsex6.php)


    +

    +
    +

    +

    Figure 14.49. BAND_HVCROSS (smallstaticbandsex5.php)

    BAND_HVCROSS (smallstaticbandsex5.php)


    +

    +
    +

    +

    Figure 14.50. BAND_3DPLANE (smallstaticbandsex4.php)

    BAND_3DPLANE (smallstaticbandsex4.php)


    +

    +
    +

    +

    Figure 14.51. BAND_SOLID (smallstaticbandsex3.php)

    BAND_SOLID (smallstaticbandsex3.php)


    +

    +
    +

    +

    +
    +
    +


    +

    +

    For some of these patterns it is also possible to specify an additional + density parameter via the method PlotBand::SetDensity() that + specifies how dense the pattern should be. For example Example 14.6. Different densities for various plot bands shows three variants of the 3D plane + with different density parameters.

    +

    +

    Example 14.6. Different densities for various plot bands

    + +
    +
    +

    +

    Figure 14.52. SetDensity(10) (plotbanddensity_ex0.php)

    SetDensity(10) (plotbanddensity_ex0.php)


    +

    +
    +

    +

    Figure 14.53. SetDensity(40) (plotbanddensity_ex1.php)

    SetDensity(40) (plotbanddensity_ex1.php)


    +

    +
    +

    +

    Figure 14.54. SetDensity(80) (plotbanddensity_ex2.php)

    SetDensity(80) (plotbanddensity_ex2.php)


    +

    +
    +
    +


    +

    +

    Tip

    +

    3D planes actually carry another possible modification. You can specify + the vanish point to change the perspective used. You can't access the method + to change the horizon directly but you can access it through

    +

    +

    1
    +
     $band ->prect->SetHorizon( $aHorizon)

    +

    +

    assuming that the band is a 3D plane.

    +
    +

    To finish this section we show one slightly more creative use of background + plot bands in Figure 14.56. Creative use of plot bands (staticbandbarex7.php)

    +

    +

    Figure 14.55. Creative use of plot bands

    + +

    Figure 14.56. Creative use of plot bands (staticbandbarex7.php)

    Creative use of plot bands

    +


    +

    +
    +

    Adding static lines for specific scale values in the graph

    + +

    In addition to the plot band it is possible to add static lines to emphasize a + specific scale value. A pot line is added to the graph by creating an instance + of the class PlotLine in much the same way as for plot bands. The + following code snippets show how this can be done

    +

    +

    1
    +2
    +3
    +
    // Add mark graph with static lines
    +$line = new PlotLine(HORIZONTAL,10,"black",2);
    +$graph->AddLine($line);

    +

    +

    The above code snippets adds a black plot line (weight=2) at scale position + y=10.

    +

    In addition to using this feature to show min/max values (or perhaps critical + limits) another usage can be to show a zero-line as the following example in + Figure 14.58. Adding a static line at y=0 to simulate an extra 0-axis (impulsex4.php) shows.

    +

    +

    Figure 14.57. Use of a static line to simulate an extra x-axis at y=0

    + +

    Figure 14.58. Adding a static line at y=0 to simulate an extra 0-axis (impulsex4.php)

    Use of a static line to simulate an extra x-axis at y=0

    +


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s09.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s09.html new file mode 100755 index 00000000..a04a9d34 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s09.html @@ -0,0 +1,107 @@ +Using a logarithmic scale

    Using a logarithmic scale

    + +

    In all the previous discussion we have used linear scales. Another option is to + use a logarithmic scale. This is often used when there is a need to display both + very small and very large values in the same graph. The library supports the use of + logarithmic scales on both the x- and y-axis (as well as the optional extra + y-axis).

    +

    The logarithmic scale support is defined in the module file + "jpgraph_log.php" so this must be included in order to + access this feature.

    +

    To illustrate the use of a logarithmic scale we will make a graph which uses two + y-axis and make the second y-axis have a logarithmic scale (we will actually take + the graph in Figure 15.16. Adding and adjusting the position of the legend box (example6.php) and change the second y-axis to be a + logarithmic scale instead).

    +

    In order to use a logarithmic scale on the second (Y2) axis we only need to + change

    +

    +

    1
    +
    $graph->SetY2Scale('lin');

    +

    +

    to

    +

    +

    1
    +
    $graph->SetY2Scale('log');

    +

    +

    and the library will take care of the rest. The result of this is shown in Figure 14.59. Changing the Y2 scale from linear to logarithmic (example7.php)

    +

    +

    Figure 14.59. Changing the Y2 scale from linear to logarithmic (example7.php)

    Changing the Y2 scale from linear to logarithmic (example7.php)


    +

    +

    By default only the major grid lines on the y-axis are shown. By adding the + lines

    +

    +

    1
    +2
    +
    $graph->ygrid->Show(true,true);
    +$graph->xgrid->Show(true,false);

    +

    +

    We can enable both the x-grid lines as well as the minor grid lines on the y-axis + to get the result shown in Figure 14.60. Enabling minor grid lines on the y-axis and also grid lines on the x-axis (example8.php) below

    +

    +

    Figure 14.60. Enabling minor grid lines on the y-axis and also grid lines on the x-axis (example8.php)

    Enabling minor grid lines on the y-axis and also grid lines on the x-axis (example8.php)


    +

    +

    In addition to using a logarithmic scale on the y-axis to generate what is + commonly known as a "lin-log" scale it is also possible to use a logarithmic scale + on the x-axis to get a "log-log" plot (as is often used in electrical engineering). + An example of this is shown in Figure 14.61. An example of a log-log plot (where both the y- and x-axis use a logarithmic scale) (loglogex1.php)

    +

    +

    Figure 14.61. An example of a log-log plot (where both the y- and x-axis use a logarithmic scale) (loglogex1.php)

    An example of a log-log plot (where both the y- and x-axis use a logarithmic scale) (loglogex1.php)


    +

    +

    +

    Note

    +

    The example in Figure 14.61. An example of a log-log plot (where both the y- and x-axis use a logarithmic scale) (loglogex1.php) also makes use of + scatter plots which we have not yet introduced but is a way to draw a plot + of a number of data points specified by both there x- and + y-coordinates.

    +

    +

    +

    +

    Tip

    +

    If you think the first value of the Y-axis is to close to the first label + of the X-axis you have the option of either increasing the margin (with a + call to SetLabelMargin() ) or to hide the first label (with a + call to Axis::HideFirstTickLabel() )

    +

    +

    +

    As a final example of using a logarithmic scale we show how to combine a text + scale for the x-axis and a logarithmic scale for the y-axis. As we already shown in + Graphing the number of sun spots during the 19th Century it is possible to manually specify + the labels that should be used on the axis with a call to Axis::SetTickLabels(). + Let's make use of this and the built-in library super global variable + "$gDateLocale" which is an instance of a date utility class to get + a list of the name of all the months in a localized fashion.

    +

    To use the name of the months on the x-axis we haev to add the following two lines + to the previous example

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$montnames = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels( $montnames ); 
    +?>

    +

    +

    The result of adding these two lines are shown in Figure 14.62. Using a text-log scale (example9.php) below

    +

    +

    Figure 14.62. Using a text-log scale (example9.php)

    Using a text-log scale (example9.php)


    +

    +

    Since the name of the months are quite close we can change what labels should be + displayed as was discussed in Manually specifying scale labels to + only show every second label. Doing this change gives the result shown in Figure 14.63. Adjusting the text scale so that only every second labels are displayed. (example9.1.php)

    +

    +

    Figure 14.63. Adjusting the text scale so that only every second labels are displayed. (example9.1.php)

    Adjusting the text scale so that only every second labels are displayed. (example9.1.php)


    +

    +

    Another option if we think that the labels are too close is to rotate them. In + Figure 14.64. Rotating the x-axis labels 90 degree (example9.2.php) we have kept all labels but rotated them 90 + degree.

    +

    +

    Figure 14.64. Rotating the x-axis labels 90 degree (example9.2.php)

    Rotating the x-axis labels 90 degree (example9.2.php)


    +

    +

    +

    Caution

    +

    Remember that the built-in bitmap fonts only supports 0 and 90 degree + text. TTF fonts support texts at an arbitrary angle.

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s10.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s10.html new file mode 100755 index 00000000..554140dc --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s10.html @@ -0,0 +1,724 @@ +Using a date/time scale

    Using a date/time scale

    + +

    The easiest way to get a date time scale for the X-axis is to use the pre-defined + "dat" scale. To be able to use that it is first necessary to + include the module "jpgraph_date.php" and then specify the + scale, for example as "datlin" in the call to + Graph::SetScale() as the following code snippet shows.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +require_once( "jpgraph/jpgraph.php" );
    +require_once( "jpgraph/jpgraph_line.php" );
    +require_once( "jpgraph/jpgraph_date.php" );
    +...
    +$graph = new Graph ( ... );
    +$graph->SetScale( 'datlin' );
    +... 
    +?>

    +

    +

    It is possible to use a selectable degree of automation when dealing with date + scales. The easiest way is to let the library deal with all the details and make it + own decision on how to format the scale. Unfortunately this might not always be + exactly what was intended and hence it is also possible to give the library hints on + how the formatting should be done or specify to a great details the exact formatting + needed.

    +

    Bot the y- and the x-axis can have a date scale but the most common case is to + only use date scale on the x-axis.

    +

    Specifying the input data

    + +

    No matter how the formatting is done the input data is assumed to be a + timestamp value, i.e. the number of seconds since epoch (as defined on the local + system executing the graph). In PHP the current timestamp value is returned by + the function time().

    +

    This means that it is always mandatory to specify two input vectors for a + plot.One vector for the Y-data and one vector for the x-data. The following line + of code prepares a line plot for the use with a date scale

    +

    +

    1
    +
    $lineplot = new LinePlot( $ydata , $xdata );

    +

    +

    +

    Caution

    +

    Note the order of the data vectors. The Y-data always comes + first.

    +

    +

    +

    A first example is shown in Figure 14.65. A first date scale example (dateaxisex2.php) where we + have created a number of random points with a sample interval of 240s (chosen + completely arbitrary)

    +

    +

    Figure 14.65. A first date scale example (dateaxisex2.php)

    A first date scale example (dateaxisex2.php)


    +

    +

    Please review the script that creates this graph before continuing since we + will base all further examples on this.

    +
    +

    Adjusting the start and end date alignment

    + +

    As can be seen from the example in Figure 14.65. A first date scale example (dateaxisex2.php) the + scale starts slightly before the first data point.

    +

    Why?

    +

    This is of course by purpose in order to make the first time label start on an + "even" value, in this case on an hour. Depending on the entire interval of the + graph the start value will dynamically adjust to match the chosen date/time + interval, this could for example be on an even minute, even 30min, even hour, + even day, even week and so on. It all depends on the scale.

    +

    The alignment of the start (and end) date can also be adjusted manually by + using the two methods

    +

    +

    • +

      DateScale::SetTimeAlign($aStartAlign,$aEndAlign)

      +

      The following symbolic constants can be used to define the time + alignment

      +

      +

      1. +

        Alignment on seconds

        +

        +

        • +

          MINADJ_1, Align on a single second (This is + the lowest resolution)

          +
        • +

          MINADJ_5, Align on the nearest 5 + seconds

          +
        • +

          MINADJ_10, Align on the nearest 10 + seconds

          +
        • +

          MINADJ_15, Align on the nearest 15 + seconds

          +
        • +

          MINADJ_30, Align on the nearest 30 + seconds

          +

        +

        +
      2. +

        Alignment on minutes

        +

        +

        • +

          MINADJ_1, Align to the nearest minute

          +
        • +

          MINADJ_5, Align on the nearest 5 + minutes

          +
        • +

          MINADJ_10, Align on the nearest 10 + minutes

          +
        • +

          MINADJ_15, Align on the nearest 15 + minutes

          +
        • +

          MINADJ_30, Align on the nearest 30 + minutes

          +

        +

        +
      3. +

        Alignment on hours

        +

        +

        • +

          HOURADJ_1, Align to the nearest hour

          +
        • +

          HOURADJ_2, Align to the nearest two + hour

          +
        • +

          HOURADJ_3, Align to the nearest three + hour

          +
        • +

          HOURADJ_4, Align to the nearest four + hour

          +
        • +

          HOURADJ_6, Align to the nearest six + hour

          +
        • +

          HOURADJ_12, Align to the nearest tolw + hour

          +

        +

        +

      +

      +
    • +

      DateScale::SetDateAlign($aStartAlign,$aEndAlign)

      +

      The following symbolic constants can be used to define the date + alignment

      +

      +

      1. +

        Day alignment

        +

        +

        • +

          DAYADJ_1, Align on the start of a day

          +
        • +

          DAYADJ_7, Align on the start of a + week

          +
        • +

          DAYADJ_WEEK, Synonym to DAYADJ_7

          +

        +

        +
      2. +

        Monthly alignment

        +

        +

        • +

          MONTHADJ_1, Align on a month start

          +
        • +

          MONTHADJ_6, Align on the start of + halfyear

          +

        +

        +
      3. +

        Yearly alignment

        +

        +

        • +

          YEARADJ_1, Align on a year

          +
        • +

          YEARADJ_2, Align on a bi-yearly basis

          +
        • +

          YEARADJ_5, Align on a 5 year basis

          +

        +

        +

      +

      +

    +

    +

    Some examples will clarify the use of these methods.

    +

    +

    Example 14.7. We want the time adjustment to start on an even quarter of an hour, + i.e. an even 15 minute period.

    + +
    1
    +
    $graph->xaxis->scale->SetTimeAlign( MINADJ_15 );
    +


    +

    +

    +

    Example 14.8. We want the time to start on an even 2 hour

    + +
    1
    +
    $graph->xaxis->scale->SetTimeAlign( HOURADJ_2 );
    +


    +

    +
    +

    Manually adjusting the ticks

    + +

    Since a date scale is special case of an integer scale (the underlying format + of dates a timestamps which are large integers) it is perfectly possible to + manually adjust the interval between each label. The interval is specified in + seconds with a call to the usual

    +

    LinearTicks::Set($aMajorTicks,$aMinorTick)

    +

    as the following code snippet shows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php
    +$graph->SetScale('datint');
    + 
    +// Adjust the start time for an "even" 5 minute, i.e. 5,10,15,20,25, ...
    +$graph->xaxis->scale->SetTimeAlign(MINADJ_5);
    + 
    +// Force labels to only be displayed every 5 minutes
    +$graph->xaxis->scale->ticks->Set(5*60);
    + 
    +// Use hour:minute format for the labels
    +$graph->xaxis->scale->SetDateFormat('H:i');
    +?>

    +

    +

    In the above example the scale will start on an "even" 5 minute boundary and + then have labels every 5 minutes exactly. Of course strictly speaking the + adjustment with MINADJ_5 is not necessary but will avoid that the + scale starts on whatever happens to be the initial value of the data (which will + control how the first label is placed).

    +

    The graph in Figure 14.66. Manually adjusting the tick labels for a date scale (datescaleticksex01.php) shows an example + where an online auction is displaying how the bids are increasing from each + participant every 5 minutes. The example also shows how to adjust the label + format on the y-axis to show currency values with 1000' separator by using a + label callback (using the PHP function number_format() ).

    +

    +

    Figure 14.66. Manually adjusting the tick labels for a date scale (datescaleticksex01.php)

    Manually adjusting the tick labels for a date scale (datescaleticksex01.php)


    +

    +
    +

    Adjusting the label format

    + +

    The default label format always tries to use the shortest possible unique + string. To manually set a label format the method

    +

    +

    • +

      DateScale::SetDateFormat($aFormatString)

      +

      The format string uses the same format convention as the PHP + function date()

      +

    +

    +

    is used. For example

    +

    +

    1
    +
    $graph->xaxis->scale->SetDateFormat( 'H:i' );

    +

    +

    will display the hour (24h) and minutes in the label separated by a colon + (':'). Using this format string together with the modified start/end alignment

    +

    +

    1
    +
    $graph->xaxis->scale->SetTimeAlign(MINADJ_10);

    +

    +

    with our previous date example will give the result shown in Figure 14.67. Adjusting label formatting of a date scale (dateaxisex4.php)

    +

    +

    Figure 14.67. Adjusting label formatting of a date scale (dateaxisex4.php)

    Adjusting label formatting of a date scale (dateaxisex4.php)


    +

    +
    +

    Adjusting the automatic density of date labels

    + +

    As with the linear scale it is possible to indicate what density of scale + ticks is needed. This is (as usual) specified with a call to + Graph::SetTickDensity($aMajDensity, $aMinDensity) for example + as

    +

    +

    1
    +
    $graph->SetTickDensity( TICKD_DENSE );

    +

    +
    +

    Creating a date/time scale with a manual label call-back

    + +

    In the following we will assume that all data points are specified by a tuple + (time-value, date-value) where the + date/time is specified as a timestamp in seconds in the same format as is + returned by the PHP function time().

    +

    +

    Caution

    +

    Be careful if data is gathered from a different time zone and whether + it is given in UTC ot in the local time/date.

    +

    +

    +

    A label formatting callback routine will get called each time a label is to be + drawn on the scale. The one parameter given to the callback function is the + current time value. The returned string is then used as a label.

    +

    What we do is that we specify that the x-scale should be an ordinary integer + "int" scale (remember that the data values are timestamps which + are integers). We then install our custom label formatting callback (with a call + to Graph::SetLabelFormatCallback()) which given a timestamp returns + a suitable label as a string.

    +

    In our example we will use the PHP function date() to convert + between the time stamp value and a suitable textual representation of the + time/date value.

    +

    The callback we use is

    +

    +

    1
    +2
    +3
    +4
    +
    // The callback that converts timestamp to minutes and seconds
    +function  TimeCallback ( $aVal ) {
    +    return  Date ( 'H:i:s' , $aVal );
    +}

    +

    +

    Using some random data we can now generate the graph shown in Figure 14.68. Manually creating a date scale (dateaxisex1.php)

    +

    +

    Figure 14.68. Manually creating a date scale (dateaxisex1.php)

    Manually creating a date scale (dateaxisex1.php)


    +

    +

    In the above example we have specified the x-scale manually to make sure that + the min/max values on the X-axis exactly matches the min/max x-data values to + not leave gaps (as discussed above) between the data and the start/end of the + scale.

    +

    The defined callback function will be called for each of the displayed labels. + Since we are using an integer scale the labels will be set according to an + suitable scale when the time stamp values are interpretated as integers.

    +

    Using integer scales this will not work very well since the library determines + label positions to be at even positions (e.g. every 2,5,10, 20,50,100 etc) to + suit the auto-scaling since the library will assume that the data is integers + and not time stamp values.

    +

    The best way to solve this is to use an integer x-scale together with a + callback function with a manually specified scale.

    +

    In order to setup the scale a bit of manually work is needed. Depending on the + data to be displayed one should ensure that the scale starts and ends at + suitable times and that the tick interval chosen fits with an even multiple of + minutes, hours, days or what is best suited for the time range that is to be + displayed.

    +

    The following code example illustrates this. It creates some "fake" data that + is assumed to be sampled time based data and sets up some suitable scales and + tick interval. This script may be used as a basis for more advanced handling of + the time data.

    +

    +

    Example 14.9. Manually creating a date/time scale (timestampex01.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +
    <?php // content="text/plain; charset=utf-8"
    +// Example on how to treat and format timestamp as human readable labels
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Number of "fake" data points
    +DEFINE('NDATAPOINTS',500);
    + 
    +// Assume data points are sample every 10th second
    +DEFINE('SAMPLERATE',10); 
    + 
    +// Callback formatting function for the X-scale to convert timestamps
    +// to hour and minutes.
    +function TimeCallback($aVal) {
    +    return Date('H:i', $aVal);
    +}
    + 
    +// Get start time
    +$start = time();
    +// Set the start time to be on the closest minute just before the "start" timestamp
    +$adjstart = floor($start / 60);
    + 
    +// Create a data set in range (20,100) and X-positions
    +// We also apply a simple low pass filter on the data to make it less
    +// random and a little smoother
    +$data = array();
    +$xdata = array();
    +$data[0] = rand(20,100);
    +$xdata[0] = $adjstart;
    +for( $i=1; $i < NDATAPOINTS; ++$i ) {
    +    $data[$i] = rand(20,100)*0.2 + $data[$i-1]*0.8;
    +    $xdata[$i] = $adjstart + $i * SAMPLERATE;
    +}
    + 
    +// Assume that the data points represents data that is sampled every 10s
    +// when determing the end value on the scale. We also add some extra
    +// length to end on an even label tick.
    +$adjend = $adjstart  + (NDATAPOINTS+10)*10;
    + 
    +$graph = new Graph(500,250);
    +$graph->SetMargin(40,20,30,50);
    + 
    +// Now specify the X-scale explicit but let the Y-scale be auto-scaled
    +$graph->SetScale("intlin",0,0,$adjstart,$adjend);
    +$graph->title->Set("Example on TimeStamp Callback");
    + 
    +// Setup the callback and adjust the angle of the labels
    +$graph->xaxis->SetLabelFormatCallback('TimeCallback');
    +$graph->xaxis->SetLabelAngle(90);
    + 
    +// Set the labels every 5min (i.e. 300seconds) and minor ticks every minute
    +$graph->xaxis->scale->ticks->Set(300,60);
    + 
    +$line = new LinePlot($data,$xdata);
    +$line->SetColor('lightblue');
    +$graph->Add($line);
    + 
    +$graph->Stroke();
    +?>


    +

    +
    +

    Using the "DateScaleUtils" class to make manual date scale

    + +

    In this section we will show a very common use case where the x-axis have the + unit of timestamps and where the start of each month is labeled. This is + difficult (impossible) to do with the automatic tick marks since this requires + the distance between consecutive tick marks to be different.

    +

    +

    Warning

    +

    To use manual tick marks the basic scale should be an integer scale + since the underlying data are integer time stamps, for example + SetScale('intlin').

    +

    +

    +

    + Figure 14.69. Adding a label at the start of every month (manualtickex1a.php) shows a basic example of what we want + to achieve

    +

    +

    Figure 14.69. Adding a label at the start of every month (manualtickex1a.php)

    Adding a label at the start of every month (manualtickex1a.php)


    +

    +

    To use the manual tick marks two steps are required

    +

    +

    1. +

      Determine where the tick marks should be. Both major (which can + have a label and grid marks) and minor ticks can be specified. + Optionally if complex labels, which cannot be calculated by a format + string (either as date or printf() format) needs to be + created.

      +
    2. +

      Call the appropriate method to set the tick marks and optional + labels.

      +

    +

    +

    We remind the reader that the following methods (in class Axis) are available + to set the tick marks

    +

    +

    • +

      Axis::SetTickPositions($aMajTickPos,$aMinTickPos=NULL,$aLabels=NULL)

      +
    • +

      Axis::SetMajTickPositions($aMajTickPos,$aLabels=NULL)

      +

    +

    +

    The second method above is strictly speaking not necessary, it is just a + convenience function for those cases where only major ticks and labels should be + set.

    +

    The following related method will also be used in this example

    +

    +

    • +

      Axis::SetLabelFormatString($aFormat,$aIsDateFormat=FALSE)

      +

    +

    +

    This method has been available for a long time in the library but it has + recently gained the second argument. With this argument it is possible to tell + if the formatting string should be interpretated as format according to the + standard printf() format or if it should be interpretated as a + format string to be used with the date() function.

    +

    Finally we will use a utility function that is available in + "jpgraph_utils.inc.php" in the class + DateScaleUtils

    +

    +

    • +

      DateScaleUtils::GetTicks($aData,$aType==DSUTILS_MONTH1)

      +

      Possible values for the second argument ($aType) are

      +

      +

      +
      Date typeDescription
      DSUTILS_MONTHMajor and minor ticks on a monthly basis +
      DSUTILS_MONTH1Major and minor ticks on a monthly + basis
      DSUTILS_MONTH2Major ticks on a bi-monthly basis
      DSUTILS_MONTH3Major ticks on a tri-monthly basis
      DSUTILS_MONTH6Major on a six-monthly basis
      DSUTILS_WEEK1Major ticks on a weekly basis
      DSUTILS_WEEK2Major ticks on a bi-weekly basis
      DSUTILS_WEEK4Major ticks on a quad-weekly basis
      DSUTILS_DAY1Major ticks on a daily basis
      DSUTILS_DAY2Major ticks on a bi-daily basis
      DSUTILS_DAY4Major ticks on a quad-daily basis
      DSUTILS_YEAR1Major ticks on a yearly basis
      DSUTILS_YEAR2Major ticks on a bi-yearly basis
      DSUTILS_YEAR5Major ticks on a five-yearly basis
      +

      +

      +

    +

    +

    The DateScaleUtils::GetTicks() is a utility function that given + an array of timestamps returns an array of major and minor tick mark positions + that marks the start and middle of each month when we use the + DSUTILS_MONTH1 type specifier.

    +

    To make the graph in figure 1 we first note that it is probably a good idea to + specify the min and max value of the X-axis ourself rather than letting the auto + scale algorithm do that. Since the timestamps are possibly quite large values + and the auto scaling algorithm will try to make the start and end values be + "even" (for example multiples of 5,10,100, .. and so on).

    +

    Secondly we need to chose what scale we will use. In this case it doesn't + really matter if we chose a integer (int) or a linear (lin) scale. But since + timestamps by definition are integers we select an int scale for the X-axis.

    +

    Finally we need to decide what format to have on the labels. For this example + we chose to show it as "Dec05" to indicate "December 2005". The format string + needed to select this is "My" which we will use as argument for the + SetLabelFormatString() method. Since the width of the label is + medium wide we add some empty space on each side of the graph after we + positioned the ticks to avoid the first label "hitting" the Y-axis labels. This + could happen if the start of the first month on the axis is very near the X-Y + axis conjunction.

    +

    We will now walk through the code to create the image in Figure 14.69. Adding a label at the start of every month (manualtickex1a.php) and explain each step.

    +

    First we create some random data for the X and Y axis

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    <?php
    +$datay = array();
    +$datax = array();
    +$ts = time();
    +$n=15; // Number of data points
    +for($i=0; $i < $n; ++$i ) {
    +    $datax[$i] = $ts+$i*700000; 
    +    $datay[$i] = rand(5,60);
    +}
    +?>

    +

    +

    Then we get the tick positions for the start of the months

    +

    +

    1
    +2
    +3
    +
    <?php
    +list($tickPositions, $minTickPositions) = DateScaleUtils::GetTicks($datax);
    +?>

    +

    +

    We also add a bit of space "grace value" at the beginning and end of the axis

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$grace = 400000;
    +$xmin = $datax[0]-$grace;
    +$xmax = $datax[$n-1]+$grace;
    +?>

    +

    +

    It is now time to add the standard code to setup a basic graph. We also set + the previously calculated tick positions and the label formatting string we want + to use.

    +

    Note that we are careful at making sure the x-axis always start at the minimum + y-value (by calling SetPos() ), by default the x-axis is otherwise + positioned at y=0 and if the y-scale happens to start at, say y=10, then the + x-axis is not shown.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    <?php
    +$graph = new Graph(400,200);
    +$graph->SetScale('intlin',0,0,$xmin,$xmax);
    +$graph->title->Set('Basic example with manual ticks');
    +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
    +$graph->xaxis->SetPos('min');
    +$graph->xaxis->SetTickPositions($tickPositions,$minTickPositions);
    +$graph->xaxis->SetLabelFormatString('My',true);
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->xgrid->Show();
    +?>

    +

    +

    Finally we create and add the plot to the graph and send back the graph to the + browser.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$p1 = new LinePlot($datay,$datax);
    +$p1->SetColor('teal');
    +$graph->Add($p1);
    +$graph->Stroke();
    +?>

    +

    +
    +

    When to use manual and when to use automatic date scale?

    + +

    The previous sections showed how to make use of the utility class + DateScaleUtils to manually set the tick marks. The astute + reader will also recall the possibility to use a "date" scale, i.e. specifying + the scale for example as

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +// Use a date-integer scale
    +$graph->SetScale('datint'); 
    +?>

    +

    +

    So what is the difference and when should this be used?

    +

    The answer is that the functionality to some extent overlap but with the + manual scale creation there is the possibility to more exact specify the + distance between the label marks. By using the "Date" scale the library will + automatically adjust the labels to have a suitable distance depending on the + span of the data and the size of the graph. This is "easier" but will give + little control over the intervals.

    +

    With the manual scale, on the other hand, it is possible to exactly specify + the distance (e.g. every three month) between each label on the expense of a few + more lines of code.

    +

    There is also one more important difference an that is that with a "date" + scale the tick marks will always be adjusted so that the end and beginning of + the scale falls on a major tick marks. If the data to be visualized doesn't + completely cover this span there might be "gaps" in the data at the beginning + or/and at the end of the x-scale. With a manual scale it is possible to set the + min and max x-scale value to match exactly the min/max x-values in the data and + have the plot begin and end at exactly the beginning and end of the x-axis. This + is not possible to guarantee with a date scale.

    +

    Let's put this knowledge to use and compare "side by side" the difference + between these two ways of creating a date scale by creating a graph with the + same data but using these two different methods.

    +

    In the first example (shown in Figure 14.70. Manually specified date scale (dateutilex01.php) ) we use + a manually set tick scale with an explicitly set min/max value for the x-axis. + The labels on the graph are formatted with a call to

    +

    +

    1
    +
    $graph->xaxis->SetLabelFormatString('M, Y',true);

    +

    +

    the second parameter ('true') will make the library interpret the + format string as specifying a date format string.

    +

    +

    Figure 14.70. Manually specified date scale (dateutilex01.php)

    Manually specified date scale (dateutilex01.php)


    +

    +

    The second variant will use the exact same data but this time we will use a + date scale. This is accomplished by first including the necessary support module + jpgraph_date.php and then specifying the scale as

    +

    +

    1
    +
    $graph->SetScale('datlin');

    +

    +

    In order to make the two graphs have exactly the same label format we also use + the same format string as in the previous graph, i.e. + $graph->xaxis->SetLabelFormatString('M, Y',true);. The result + of formatting is shown in Figure 14.71. Using an automatic date scale (dateutilex02.php) .

    +

    +

    Figure 14.71. Using an automatic date scale (dateutilex02.php)

    Using an automatic date scale (dateutilex02.php)


    +

    +

    Comparing Figure 14.71. Using an automatic date scale (dateutilex02.php) . and Figure 14.70. Manually specified date scale (dateutilex01.php) we can see that with the automatic scaling + the tick marks match the beginning and ending of the x-scale but at the expense + of a small gap at the end of the data since the data doesn't extend quite as far + as the scale.

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s11.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s11.html new file mode 100755 index 00000000..32f2bf22 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s11.html @@ -0,0 +1,88 @@ +Adding shearing image transformation to the graph

    Adding shearing image transformation to the graph

    + +

    As a final "touch" on the image it is possible to apply a shearing transformation + to the generated image. This can be used to give the image a "3D" perspective. The + transformation is done by the method Graph::Set3DPerspective() It + should be noted that since these transformations are all done in PHP they are (as + all image processing) quite processor intensive.

    +

    In order to get access to the transformation functionality the module + "jpgraph_imgtrans.php" must first be included in the + script.

    +

    In Figure 14.72. Different types of shearing transformation the original image is shown in the + middle and the four types of shearing is shown around in positions indicating the + type of shearing. The symbolic name for the type of shearing is shown below each + image.

    +

    +

    Figure 14.72. Different types of shearing transformation

    + +
    +
    +

    Different types of shearing transformation

    +

    SKEW3D_UP

    +
    +

    Different types of shearing transformation

    +

    SKEW3D_LEFT

    +
    +

    Different types of shearing transformation

    +

    [Original graph]

    +
    +

    Different types of shearing transformation

    +

    SKEW3D_RIGHT

    +
    +

    Different types of shearing transformation

    +

    SKEW3D_DOWN

    +
    +
    +


    +

    +

    The transformation is specified with the method

    +

    +

    • +

      Graph::Set3DPerspective($aDir,$aAlpha=100,$aShear=120,$aQuality=false,$aFillColor='#FFFFFF',$aBorder=false,$aMinSize=true,$aHorizonPos=0.5)

      +

    +

    +

    +

    Figure 14.73. Explaining the shearing parameters

    + +
    Explaining the shearing parameters
    +


    +

    +

    The different parameters that effect the transformation can now be explained with + the help of Figure 14.73. Explaining the shearing parameters +

    +

    +

    $aDir
    +

    This is the symbolic constant to define which of the four basic + types of transformation as shown in Figure 14.72. Different types of shearing transformation +

    +
    $aAlpha
    +

    This defines the distance from the bottom of the image to the + artificial horizon

    +
    $aShear
    +

    This defines from the perspective vanish point on the artificial + horizon to the crossing of the "shearing line" on the artificial + horizon..

    +
    $aHorizPos
    +

    This specifies the distance from the left edge of the image to the + perspective vanish point

    +
    $aQuality
    +

    With this parameter set to true + the algorithm will do additional image interpolation to increase the + quality of the resulting transformation on the expense of further + processing time.

    +
    $aFillColor
    +

    Specifies the background fill color to be used. A value of false + (the default) indicates no fill

    +
    $aBorder
    +

    Add a border around the transformed image

    +
    $aMinSize
    +

    The transformed image is usually smaller than the original image + and if this parameter is set to true then the resulting image will + be as small as it can be. If it is false then the original image + size will be kept.

    +

    +

    +

    This might be regarded as "gimmick" factor but has proven useful in batch + (off-line) processing to produce a sequence of images that gives the appearance of a + graph that rotates into place.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s12.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s12.html new file mode 100755 index 00000000..7fa1f8d8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s12.html @@ -0,0 +1,146 @@ +Rotating graphs

    Rotating graphs

    + +

    The library supports an arbitrary rotation of a the plot area as well as some + special convenience method to rotate the plot area 90 degree which most often is + used to draw a horizontal bar graph instead of a (standard) vertical bar + graph.

    +

    +

    Caution

    +

    Adding a rotation transformation will make the graph generation slightly + slower since each point of the graph as to go through a transformation step + before being stroked on to the image. The library tries to mitigate this as + much as possible by using a pre-calculated transformation matrix and also + makes further optimizations for the special case of 90 degree + rotations.

    +

    +

    +

    +

    Caution

    +

    Any background images (see Adding images and country flags to the background of the graph) will not be rotated with the graph. This limitation exists since the + performance and memory usage of doing real image transformation in PHP would + be too poor. Any background images needing rotation must be rotated outside + in some image manipulation program (e.g. Gimp, IrfanView).

    +

    +

    +

    When a plot area is rotated there are two things to be aware of

    +

    +

    1. +

      individual labels on the axis are not + rotated

      +

      The design decision behind this is that bit mapped fonts cannot be + arbitrarily rotated and rotating TTF fonts will decrease (in general) + the readability. If angle rotation is needed on the labels it is still + possible to use the method Axis::SetLabelAngle()

      +

      +

      Note

      +

      Since the anchor point for labels is by default the optimum + for graph at 0 degree the anchor point and alignment for the + labels on the axis should probably be adjusted to get a better + visual appearance on the rotated graph. This is accomplished by + the method Axis::SetLabelAlign() +

      +

      +

      +
    2. +

      any background image or background gradient is + not rotated

      +

      The design decision behind this is purely computational Doing a full + image rotation would be excruciating CPU intensive using PHP.

      +

    +

    +

    Free rotation of the plot area

    + +

    The rotation of the plot area is controlled with the following two methods

    +

    +

    • +

      Image::SetAngle($aAngle)

      +

      "$Angle" = Angle of rotation specified in degrees. A + positive angle specifies a clockwise rotation.

      +
    • +

      Image::SetCenter($aX, $aY)

      +

      Specifies the center of rotation

      +

    +

    +

    The Image class is the lowest graphic layer in the library and it is access + through the instance variable "$img" of the Graph class. So for + example to rotate a plot are 45 degree the following line has to be added

    +

    +

    1
    +
    $graph->img->SetAngle(45);

    +

    +

    By default the center of rotation will be the center point of the plot area. + The following examples will clarify this. We will use the (very) basic graph + shown in Figure 14.74. Original unrotated graph (rotex0.php) to demonstrate rotation.

    +

    +

    Figure 14.74. Original unrotated graph (rotex0.php)

    Original unrotated graph (rotex0.php)


    +

    +

    In Figure 14.75. Rotating the plot area 45 degrees (rotex1.php) and Figure 14.76. Rotating the plot area 90 degrees (rotex2.php) we + have rotated the plot area around (the default) the center of the plot + area

    +

    +

    +
    +

    +

    Figure 14.75. Rotating the plot area 45 degrees (rotex1.php)

    Rotating the plot area 45 degrees (rotex1.php)


    +

    +
    +

    +

    Figure 14.76. Rotating the plot area 90 degrees (rotex2.php)

    Rotating the plot area 90 degrees (rotex2.php)


    +

    +
    +

    +

    +

    In the above two example the center of the rotation was the center point of + the plot area. If we instead change the center of rotation to be the center of + the entire graph we get the result shown in Figure 14.77. Rotating the plot area 45 degrees (rotex3.php) and + Figure 14.78. Rotating the plot area 90 degrees (rotex4.php) .

    +

    +

    +
    +

    +

    Figure 14.77. Rotating the plot area 45 degrees (rotex3.php)

    Rotating the plot area 45 degrees (rotex3.php)


    +

    +
    +

    +

    Figure 14.78. Rotating the plot area 90 degrees (rotex4.php)

    Rotating the plot area 90 degrees (rotex4.php)


    +

    +
    +

    +

    +

    As a final example in Figure 14.79. Rotating the plot area -30 degree around the bottom left corner (rotex5.php) we show the result of + rotating the plot area -30 degree around the bottom left point in the + graph

    +

    +

    Figure 14.79. Rotating the plot area -30 degree around the bottom left corner (rotex5.php)

    Rotating the plot area -30 degree around the bottom left corner (rotex5.php)


    +

    +
    +

    Rotating the plot area 90 degree

    + +

    As can be seen above in Figure 14.76. Rotating the plot area 90 degrees (rotex2.php) and Figure 14.78. Rotating the plot area 90 degrees (rotex4.php) the rotation does not alter the overall size and + margin of the graph even though we probably should do so in order to better + accommodate the rotated plot areas topography. It is of course perfectly + possible to adjust the size of the graph manually.

    +

    The slight complication with general rotation is that the margins also + rotates, this means that if the graph is rotated 90 degrees the left margin in + the image was originally the bottom margin. In additional by default the center + of the rotation is the center of the plot area and not the entire image (if all + the margins are symmetrical then they will of course coincide). This means the + center of the rotation will move with the margin (since the specify the exact + location of the plot area)..

    +

    So for the case of rotating a graph 90 degree the library provides a + convenience method to do both the rotation and specifying the margin at the same + time (to avoid the mental exercise described above) by providing the + method

    +

    +

    • +

      Set90AndMargin(($aLeft=0,$aRight=0,$aTop=0,$aBottom=0) +

      +

      Rotates the plot area 90 degrees and sets the graph margin + areas

      +

    +

    +

    This method is probably most commonly used with bar graphs to create + horizontal instead of vertical bars. See the section on bar graphs, ??, for more + example on this.

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s13.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s13.html new file mode 100755 index 00000000..c9bd57f9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s13.html @@ -0,0 +1,165 @@ +Using anti-aliasing in the graph generation

    Using anti-aliasing in the graph generation

    + +

    The library have partial support for the use of anti-aliasing when crating graphs. + The level of support is different depending on the actual graph type and there are + some caveats to be aware of.

    +

    +

    Note

    +

    One question that is often asked is why does the library not support full + anti-aliasing in every type of graphs? The answer is that since neither GD + graphic library does not support real anti-aliasing this is done in the + library itself most of the time. Doing full image anti-aliasing is very CPU + intensive and can for large graph easily take four times longer than no + anti-aliasing. In addition the way full image anti-aliasing is done is by + creating larger canvas which the graph is drawn on and then do a smoothing + operation, basically scale the image to the correct size puts some + limitation on the details resolution. For example text needs special + handling since the TTF fonts are already anti-aliased and cannot be + re-anti-aliased a second time.

    +

    +

    +

    Anti-aliasing for line drawing graphs

    + +

    This applies to all graphs that makes use if line drawing. For example line + plots and radar charts. This is the only "true" anti-aliasing done in the + library.

    +

    This anti aliasing is enabled by calling the method

    +

    +

    • +

      Image::SetAntiAliasing($aFlg=true)

      +

    +

    +

    As a concrete example the following line can be used to enable anti-aliasing + for both line and wind rose plots

    +

    +

    1
    +
    $graph->img->SetAntiAliasing();

    +

    +

    The algorithm used for line anti-aliasing makes a gradient color transition + between foreground line color and background while plotting a line using a + standard mid-point line algorithm. To achieve best visual result always use a + dark line color on a light colored background.

    +

    The images below shows the difference between a plain graph on the left and + the same graph drawn with anti-aliasing enabled on the right.

    +

    +

    +
    +

    Figure 14.80. Plain radar plot (radarex8.php)

    Plain radar plot (radarex8.php)

    +
    +

    Figure 14.81. Anti-aliased radar plot (radarex8.1.php)

    Anti-aliased radar plot (radarex8.1.php)

    +
    +

    +

    +

    There are a number of limitations with the current implementation that should + be noted. The reason these limitation exists is that for reasons of CPU load we + have chosen not to implement full anti-aliasing for arbitrary shapes.

    +

    +

    1. +

      Speed! Doing anti-aliased lines in PHP is not cheap. Anti-aliased + line drawing is roughly 6-8 times slower then lines without + anti-aliasing So using anti-aliasing isn't suitable together with + high-load often updated graphs. Remember to use the caching feature + (see Efficient graph generation using the built-in cache subsystem.)

      +
    2. +

      Lines will ignore any width and only have a single line-width of + approximately=1. It is not possible to set the line width when + anti-alias is used. (This would require a full implementation of + anti-aliased polygons which is not implemented.)

      +
    3. +

      The colors will be a little bit "weaker" since they will now not + consist of one dominant color but rather being made up by at least + two different colors.

      +
    4. +

      Anti-aliasing does not work very well together with background + images since it assumes a the same solid color on each side of the + line. Doing a more advanced anti-aliasing algorithm would simple + take to much processing power.

      +
    5. +

      Even when anti-aliasing is enabled fast line-drawing will be used + for horizontal, vertical and diagonal lines since these get sampled + at high enough frequency anyway and doesn't benefit from + anti-aliasing. This optimization has a slight visual impact, as can + be seen in Figure 14.81. Anti-aliased radar plot (radarex8.1.php) The vertical line + appear to the human eye to have a slightly different color and looks + a bit thinner.

      +

    +

    +

    +

    Note

    +

    The difference between a standard line and one line with anti-aliasing + is shown in large magnification in ??. The approach used in the library + roughly corresponds to an even weighted 3x3 Bartlett-filter. It would be + possible to apply some more advanced filtering techniques to achieve an + even better result but doing high-intensive 2D signal processing on a + HTTP-server is not a brilliant idea. The algorithm used in the library + is a reasonable trade-off between visual appearance and + efficiency.

    +

    +

    Figure 14.82. Anti-aliasing up-close. The figure shows the difference + between a standard line (on-top) and the corresponding + anti-aliased line (on-the bottom)

    + +
    +
    +

    Anti-aliasing up-close. The figure shows the difference between a standard line (on-top) and the corresponding anti-aliased line (on-the bottom)

    +
    +
    +


    +

    +

    +

    +

    +
    +

    Anti-aliasing in pie graphs

    + +

    For Pie plots a full image anti-aliasing algorithm is used. The original image + is scaled to twice it's specified with and then down sampled to the required + size. This will give a low pass filtering effect which takes the edges away from + the image and gives a smooth appearance. However the filtering is quite + processor intensive.

    +

    Anti-aliasing for pie plots are enabled by calling

    +

    +

    • +

      PieGraph::SetAntiAlising($aFlg=true)

      +

    +

    +

    as the following code snippet shows

    +

    +

    1
    +
    $piegraph->SetAntiAliasing();

    +

    +

    There is inherent limitation using this method and that is that edges on the + Pie can not be used.

    +

    The figure below shows the visual impact the anti-aliasing have on both 2D and + 3D Pie plots.

    +

    +

    Figure 14.83. Affects of using anti-alias for Pie-graphs

    + +
    +
    +

    Affects of using anti-alias for Pie-graphs

    +
    +

    Affects of using anti-alias for Pie-graphs

    +
    +

    Affects of using anti-alias for Pie-graphs

    +
    +

    Affects of using anti-alias for Pie-graphs

    +
    +
    +


    +

    +
    +

    Anti-aliasing in Windrose plots

    + +

    This uses the same algorithm as the Pie plots with similar restrictions and + limitations.

    +
    +

    Anti-aliasing for Contour plots

    + +

    This uses almost the same algorithm as Pie plots. The additional feature here + is that it is possible to specify the size of the over-sampling. This can be + value between 2-5. However, using an oversampling larger than 3 has very little + additional visual improvement but will significantly increase the processing + time.

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s14.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s14.html new file mode 100755 index 00000000..87352912 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s14.html @@ -0,0 +1,83 @@ +Adding icons (and small images) to the graph

    Adding icons (and small images) to the graph

    + +

    In addition to the standard background image you can also add an arbitrary number + of icons onto the background of the graph. These icons are created with a call to + the special Plot class IconPlot defined in the module + "jpgraph_iconplot.php". The image which is the base of the + icons can be

    +

    +

    1. +

      an arbitrary image from a file

      +
    2. +

      one of the built-in country flags

      +

    +

    +

    The basic structure of adding an icon somewhere on the graph is to first create an + instance of the IconPlot class and then position the icon at the wanted x,y-position + on the graph and finally add the object to the graph using the standard + Graph::Add() method. The constructor for the IconPlot class have + the following signature

    +

    +

    • +

      __construct($aFile='',$aX=0,$aY=0,$aScale=1.0,$aMix=100)

      +

      The parameters should be self explanatory. The $aMix + factor specifies the degree of alpha blending between the background and + the icon. A value of 100 means no blending and a value of 0 means that + the icon is not shown at all, only the background.

      +

    +

    +

    Some useful methods in this class are

    +

    +

    • +

      SetCountryFlag($aFlag,$aX=0,$aY=0,$aScale=1.0,$aMix=100,$aStdSize=3)

      +

      This method specifies that the specified country flag should be + used

      +
    • +

      SetPos($aX,$aY)

      +

      Same as the optional arguments in th constructor. The coordinates are + specified as absolute pixels where (0,0) is the top left corner.

      +
    • +

      CreateFromString($aStr)

      +

      Creates the image from a string instead of reading it from a file. +

      +
    • +

      SetScalePos($aX,$aY)

      +

      Specifes the potision using the scale coordinate as specified by the + x- and y-scales

      +
    • +

      SetAnchor($aXAnchor='left',$aYAnchor='center')

      +

      Sets the anchor point of the icon, i.e. the position in the icon that + should be aligned with the specified icon position in the graph.

      +

    +

    +

    The following short example shows how an icon is created and added to a + graph

    +

    +

    1
    +2
    +3
    +
    $icon = new IconPlot('myimage.png',0.2,0.3,1,30);
    +$icon->SetAnchor('center','center');
    +$graph->Add($icon);

    +

    +

    It is possible to control how much of the icon should be blended into the + background by specifying a percentage (1-100). The example below in Figure 14.84. Mixing an icon image into the background of the graph. The area plot in the graph uses alpha blending to achieve see-through affect (lineiconex1.php) shows how to mix in the picture of "Tux the + penguin" into the background of a filled line graph.

    +

    +

    Figure 14.84. Mixing an icon image into the background of the graph. The area plot in the graph uses alpha blending to achieve see-through affect (lineiconex1.php)

    Mixing an icon image into the background of the graph. The area plot in the graph uses alpha blending to achieve see-through affect (lineiconex1.php)


    +

    +

    To specify any of the roughly 200 country flags as an icon the first step is to + create an empty Icon and then call the IconPlot::SetCountryFlag() + method with the appropriate parameters. This is illustrated below by adding the + Icelandic flag into the background as an icon.

    +

    +

    Figure 14.85. Adding a country flag icon in the background (lineiconex2.php)

    Adding a country flag icon in the background (lineiconex2.php)


    +

    +

    +

    Caution

    +

    Some older versions of PHP (< 4.3.3 using the built-in GD) have + problems rendering blended images. If you have this problem then you need to + upgrade to a more recent version of PHP.

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s15.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s15.html new file mode 100755 index 00000000..b503464b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s15.html @@ -0,0 +1,125 @@ +Adding images and country flags to the background of the graph

    Adding images and country flags to the background of the graph

    + +

    The background can not only be a solid (or semi-transperant) color. It is also + possible to use images as backgrounds. These can be arbitrary user specified images + in any format (as determined by there file suffix). Since the library has a built in + support for all established countries (as of 20 Dec 2008) in regards to there flags + (all flags are encoded within the library) it is also possible to use a country flag + as a background. This could be considered a special case of the user defined image + background.

    +

    +

    1. +

      Graph::SetBackgroundImage($aFileName,$aBgType=BGIMG_FILLPLOT,$aImgFormat='auto')

      +
    2. +

      Graph::SetBackgroundImageMix($aMix)

      +
    3. +

      Graph::SetBackgroundImagePos($aXpos,$aYpos)

      +
    4. +

      Graph::SetBackgroundCountryFlag($aName,$aBgType=BGIMG_FILLPLOT,$aMix=100)

      +

    +

    +

    For both background images and flags it is possible to define how the image should + be used on the page with the background type parameters. This parameter specifies + how the image should be placed on the graph. The following options are + available:

    +

    +

    • +

      BGIMG_FILLPLOT . This means that the background image will be scaled + to that it exactly fits the plot area

      +
    • +

      BGIMG_FILLFRAME . This means the the background image will be scaled + so that it exactly fits the entire graph

      +
    • +

      BGIMG_COPY . This means that the background image will be copied in + tis original size without and size adjustments

      +
    • +

      BGIMG_CENTER . Almost the same as BGIMG_COPY but this also means that + the image will be automatically centered in the graph

      +
    • +

      BGIMG_FREE, This is a variant of the BGIMG_COPY but in this case the + image will be free on its own and have no color blending with the margin + color

      +

    +

    +

    To help explain these types of backgrounds they are illustrated below by adding + the image in Figure 14.87. Background image (a closeup of our burnt + server) as a background + to the plain graph in Figure 14.86. The graph that will be used to add backgrounds + to. In order not + to have the background image take to much emphasis in the graph we specify the + mixing to 25% with a call to

    +

    +

    1
    +
    $graph->SetBackgroundImageMix(25);

    +

    +

    +

    +
    +

    Figure 14.86. The graph that will be used to add backgrounds + to

    + +
    The graph that will be used to add backgrounds to
    +

    +
    +

    Figure 14.87. Background image (a closeup of our burnt + server)

    + +
    Background image (a closeup of our burnt server)
    +

    +
    +

    +

    +

    In the table below the various options for adjusting the size and position of the + background image are shown

    +

    +

    +
    +

    +

    Figure 14.88. BGIMG_COPY (background_type_ex0.php)

    BGIMG_COPY (background_type_ex0.php)


    +

    +

    BGIMG_COPY

    +
    +

    +

    Figure 14.89. BGIMG_CENTER (background_type_ex1.php)

    BGIMG_CENTER (background_type_ex1.php)


    +

    +

    BGIMG_CENTER

    +
    +

    +

    Figure 14.90. BGIMG_FREE (background_type_ex2.php)

    BGIMG_FREE (background_type_ex2.php)


    +

    +

    BGIMG_FREE

    +
    +

    +

    Figure 14.91. BGIMG_FILLPLOT (background_type_ex3.php)

    BGIMG_FILLPLOT (background_type_ex3.php)


    +

    +

    BGIMG_FILLPLOT

    +
    +

    +

    Figure 14.92. BGIMG_FILLFRAME (background_type_ex4.php)

    BGIMG_FILLFRAME (background_type_ex4.php)


    +

    +

    BGIMG_FILLFRAME

    +
     
    +

    +

    +

    +

    Using country flags as backgrounds

    + +

    The method Graph::SetBackgroundCountryFlag($aName,$aBgType,$aMix) + makes it possible to use an of the built-in country flags as a background i the + same way as any other user specified background image. All included country + flags as of Dec 2008 are listed in Appendix F. List of all country flags. The + background country flag is specified by its short name as listed in Appendix F. List of all country flags.

    +

    +

    Caution

    +

    The dynamics of world politics and geographic boundaries will no doubt + make the list of included countries obsolete almost at the same time the + library is released. The intention is that all currently known country + and similar geographic entities should be included. Any missing flags + shall and can not be interpreted as any political stand it is merely a + consequence of political changes since the library was released or a + possible oversight or simply a mistake either human or algorithmically + in how the country flags are produced.

    +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s16.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s16.html new file mode 100755 index 00000000..6edc1e59 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s16.html @@ -0,0 +1,95 @@ +Using background gradients

    Using background gradients

    + +

    A color gradient background will change the color from a start color to a finish + color in even steps (the number of steps depends on the size of the graph). The + direction of the gradient is controlled by specifying a style parameter for the + gradient. The signature for the gradient background method is

    +

    +

    1. +

      Graph::SetBackgroundGradient($aFrom='navy',$aTo='silver',$aGradType=2,$aStyle=BGRAD_FRAME)

      +

    +

    +

    The last style par mater specified where in the graph the gradient style should be + applied and the different options are

    +

    +

    • +

      BGRAD_FRAME, The entire graph frame will be filled +

      +
    • +

      BGRAD_MARGIN, Only the margin area (the graph area + outside the plot area) will be filled

      +
    • +

      GRAD_PLOT, Only the plot area will be filled

      +

    +

    +

    This is illustrated in Figure 14.93. What area of the graph the gradient should affect

    +

    +

    Figure 14.93. What area of the graph the gradient should affect

    + +
    +
    +

    What area of the graph the gradient should affect

    +

    BGRAD_FRAME

    +
    +

    What area of the graph the gradient should affect

    +

    BGRAD_MARGIN

    +
    +

    What area of the graph the gradient should affect

    +

    BGRAD_PLOT

    +
    +
    +


    +

    +

    The different types of gradient fills are shown in Figure 14.94. Different types of gradient fills where the gradient from color is + "white" and the to color is "orange"

    +

    +

    Figure 14.94. Different types of gradient fills

    + +
    +
    +

    Different types of gradient fills

    +
    +

    Different types of gradient fills

    +
    +

    Different types of gradient fills

    +
    +

    Different types of gradient fills

    +
    +

    Different types of gradient fills

    +
    +

    Different types of gradient fills

    +
    +

    Different types of gradient fills

    +
    +

    Different types of gradient fills

    +
    +

    Different types of gradient fills

    +
    +

    Different types of gradient fills

    +
    +

    Different types of gradient fills

    +
     
    +
    +


    +

    +

    Generating gradient background off-line

    + +

    A drawback of using gradient backgrounds is that they are processing intensive + and since they are generated each time the graph is generated it can take + substantive amount of time for large graphs. To help with this the library + offers a small (very simple) utility that can be tun to create gradient images + off line. These images can later on be used as (static) background images. In + the distribution there is a small utility in the + "Examples/" directory called + "mkgrad.php". Pointing the browser to this script will + show a basic form as shown in Figure 14.95. The "mkgrad" utiliy to create gradient images. The script will + allow the creation of a gradient images using any of the predefined colors and + gradient types.

    +

    +

    Figure 14.95. The "mkgrad" utiliy to create gradient images

    + +
    The "mkgrad" utiliy to create gradient images
    +


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch14s17.html b/Societes/ric/jpgraph/docs/chunkhtml/ch14s17.html new file mode 100755 index 00000000..8b1425c9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch14s17.html @@ -0,0 +1,74 @@ +Adding arbitrary texts to the graph

    Adding arbitrary texts to the graph

    + +

    In much the same was as icon images can be added to the plot so can arbitrary text + strings be added. This is done by creating an or several instances of the Text class + (one per string that is needed). This feature is typically used to add + clarifications or other information related to the actual graph.

    +

    These text instances are then added to the graph via the normal + Graph::Add() method.

    +

    The position of the text in the image/graph can be given as either absolute + pixels, fractions of the width/height of the graph or as scale values according to + the specified (or automatically determined) scale.

    +

    To show some ways of positioning the text we use a very simple bar graph not to + distract from the text. We first just add a single text line with most of the + settings there default value. We do this by adding te following lines

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +
    <?php
    +// Create an instance of the Text class and set the string at the same time
    +$txt = new Text('This is a text');
    + 
    +// Position the string at absolute pixels (0,20).
    +// ( (0,0) is the upper left corner )
    +$txt->SetPos(0, 20);
    + 
    +// Set color and fonr for the text
    +$txt->SetColor('red');
    +$txt->SetFont(FF_FONT2,FS_BOLD);
    + 
    +// ... and add the text to the graph
    +$graph->AddText($txt); 
    +?>

    +

    +

    Teh resulting graph can be seen in Figure 14.96. Adding a text object to a graph (example25.php)

    +

    +

    Figure 14.96. Adding a text object to a graph (example25.php)

    Adding a text object to a graph (example25.php)


    +

    +

    Let's make the text stand out a bit more by having a background color, framing the + text box and adding a drop shadow by using the method Text::SetBox() + The resulting graph can be seen in Figure 14.97. Making the text stand out a bit more by adding a background color and frame (example25.1.php)

    +

    +

    Figure 14.97. Making the text stand out a bit more by adding a background color and frame (example25.1.php)

    Making the text stand out a bit more by adding a background color and frame (example25.1.php)


    +

    +

    In order to use a text with several lines each line needs to be separated by a + newline ("\n'"character). The default paragraph alignment is left edge but as was + discussed in ?? paragraph alignment can be adjusted.

    +

    In our final example we a text with several line are place in the middle of the + plot area.

    +

    +

    Figure 14.98. Adding a text object with multiple rows of text. Paragraph alignment is set to "center" (example25.2.php)

    Adding a text object with multiple rows of text. Paragraph alignment is set to "center" (example25.2.php)


    +

    +

    Tip

    +

    To set the position of the text using scale positions instead use the + method

    +

    +

    • +

      Text::SetScalePos($aX,$aY)

      +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch15.html b/Societes/ric/jpgraph/docs/chunkhtml/ch15.html new file mode 100755 index 00000000..4a210b9c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch15.html @@ -0,0 +1,1821 @@ +Chapter 15. Different types of linear (cartesian) graph types

    Chapter 15. Different types of linear (cartesian) graph types

    Table of Contents

    15.1. Basic Line and area graphs
    15.1.1. Creating a line graph
    15.1.2. Automatic interpolation of unknown data
    15.1.3. Adding marks to the plot (a.k.a. plot marks)
    15.1.4. Displaying the values at the data points
    15.1.5. Adding several data series to the same graph
    15.1.6. Adding a second Y-axis
    15.1.7. Adding a legend box to the graph
    15.1.8. Changing the style of the line plot - using the step-style
    15.1.9. Optimizing line plot using "fast drawing"
    15.1.10. Creating a filled line graphs (a.k.a. area plots)
    15.1.11. Partially filled area graphs
    15.1.12. Filled lines with NULL values
    15.1.13. Accumulated line graphs
    15.1.14. Accumulated line graphs with given X-labels
    15.1.15. Constructing smooth line plots with Cubic Splines
    15.2. Bar graphs
    15.2.1. Accumulated bar plots
    15.2.2. Grouped bar plots
    15.2.3. Grouped accumulated bar graphs
    15.2.4. Horizontal bar graphs
    15.2.5. Adjusting the appearance of bar graphs
    15.3. Error plot graphs
    15.3.1. Line error plots
    15.4. Stock graphs
    15.4.1. Stock plot variant: Boxplot
    15.4.2. Image maps for Box and Stock charts
    15.5. Scatter graphs
    15.5.1. Combining marks with a line
    15.5.2. Creating impulse (or stem) - plots
    15.5.3. Field plots
    15.5.4. Balloon plots
    15.5.5. Creating Geo-maps
    15.6. Contour graphs
    15.6.1. Input data for contour graphs
    15.6.2. Creating a contour graph
    15.6.3. Adjusting the color and number of isobar lines
    15.6.4. Understanding mesh interpolation
    15.7. Combining several different plot types in the same graph
    15.8. Creating several graphs in the same image
    15.8.1. Creating a combined graph
    15.8.2. Adding background images
    15.8.3. Creating rotated combined graphs
    15.8.4. Some caveats when using MGraph
    + +

    +

    Figure 15.1. Supported linear graph types in the library

    + +
    +
    +

    Supported linear graph types in the library

    +

    a) Line plot

    +

    (See Creating a line graph)

    +
    +

    Supported linear graph types in the library

    +

    b) Area plot

    +

    (See Creating a filled line graphs (a.k.a. area plots))

    +
    +

    Supported linear graph types in the library

    +

    c) Bar plot

    +

    (See Bar graphs)

    +
    +

    Supported linear graph types in the library

    +

    a) Field plot

    +

    (See Field plots)

    +
    +

    Supported linear graph types in the library

    +

    b) Error plot

    +

    (See Error plot graphs)

    +
    +

    Supported linear graph types in the library

    +

    c) Stock plot

    +

    (See Stock graphs)

    +
    +

    Supported linear graph types in the library

    +

    a) Geo-map plot

    +

    (See Creating Geo-maps)

    +
    +

    Supported linear graph types in the library

    +

    b) Impuls (stem) plot

    +

    (See Scatter graphs)

    +
    +

    Supported linear graph types in the library

    +

    c) Spline plot

    +

    (See Constructing smooth line plots with Cubic Splines)

    +
    +

    Supported linear graph types in the library

    +

    a) Balloon plot

    +

    (See Balloon plots)

    +
    +

    Supported linear graph types in the library

    +

    b) Scatter plot

    +

    (See Scatter graphs)

    +
    +

    Supported linear graph types in the library

    +

    c) Contour plot

    +

    (See Contour graphs )

    +
    +
    +


    +

    +

    Basic Line and area graphs

    + +

    Line graphs (we will use the term line graph to refer to an entire graph and the + term line plot to refer to a single data series in a line graph) is together with + bar graphs the simplest and perhaps the most commonly used graph type. In Graphing the number of sun spots during the 19th Century we have already shown an example of a + line graph without explaining to much of the details. The remainder of the section + will go into some more details on the options available when creating a line + graph.

    +

    Creating a line graph

    + +

    A line graph always make use of one or several instances of the class + LinePlot which represent one plotted data series in the graph. In all + our example we follow the naming convention to always name the instance of the + LinePlot class as "$lineplot"

    +

    The absolutely simplest line graph that is possible to create is shown in + Figure 15.2. The most simple line graph (example0-0.php)

    +

    +

    Example 15.1. The most simple line graph (example0-0.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some (random) data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>


    Figure 15.2. The most simple line graph (example0-0.php)

    The most simple line graph (example0-0.php)


    +

    +

    There are a number of things to point out here

    +

    +

    • +

      Both the X and Y axis have been automatically scaled and since we + didn't provide any x-scale the data point have been numbered + automatically starting at 0

      +
    • +

      By default the Y-grid is enabled and displayed in a "soft" + color

      +
    • +

      By default the overall graph has a black bordered and a light gray + margin

      +
    • +

      By default the size of the margin around the plot area is + automatically calculated

      +

    +

    +

    While the above example is a perfectly fine graph it looks a bit poor and we + could probably make use of a graph title as well as titles on the axis to + explain the units we are working with. So lets change the simple graph in Figure 15.2. The most simple line graph (example0-0.php) by adding a few lines to set some titles and + get the modified graph shown in Figure 15.3. Adding some titles (example2.php)

    +

    +

    Example 15.2. Adding some titles (example2.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some (random) data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    + 
    +// Setup margin and titles
    +$graph->SetMargin(40,20,20,40);
    +$graph->title->Set('Calls per operator');
    +$graph->subtitle->Set('(March 12, 2008)');
    +$graph->xaxis->title->Set('Operator');
    +$graph->yaxis->title->Set('# of calls');
    + 
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>


    Figure 15.3. Adding some titles (example2.php)

    Adding some titles (example2.php)


    +

    +

    Worth noting in this example are

    +

    +

    • +

      The main graph class instance ($graph) is used as the base to + access most properties of the overall graph

      +
    • +

      The margins have been slightly increased to account for the titles + of the axis

      +
    • +

      The default position for the title of the x-axis is on the far + right and for the y-axis it is placed centered in the middle and + rotated in a 90 angle (vertical).

      +

    +

    +

    A nice change would now be to have the titles of the axis in a bold font and + the line plot a little bit thicker and in blue color. Let's do that by adding + the lines

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    <?php
    +$graph -> title -> SetFont ( FF_FONT1 , FS_BOLD );
    +$graph -> yaxis -> title -> SetFont ( FF_FONT1 , FS_BOLD );
    +$graph -> xaxis -> title -> SetFont ( FF_FONT1 , FS_BOLD );
    +$lineplot -> SetColor ( 'blue' );
    +$lineplot -> SetWeight ( 2 );   // Two pixel wide 
    +?>

    +

    +

    As was explained in Chapter 8. Text and font handling this will adjust + the fonts of the titles to make use of a bold variant of the built-in bitmap + fonts. Please note the consistent naming conventions used in the library. Most + objects support a common set of basic methods to adjust font, size and colors + wherever such concepts make sense.

    +

    The result of adding these lines are shown in Figure 15.4. Changing fonts of the axis titles and adjusting plot weight (example3.php) (click on the link in the title to see the full source).

    +

    +

    Figure 15.4. Changing fonts of the axis titles and adjusting plot weight (example3.php)

    Changing fonts of the axis titles and adjusting plot weight (example3.php)


    +

    +

    As a final touch lets make the y-axis have the same color as the data series + to stronger show the connection between the data and the scale. At the same time + we take the opportunity to add a drop shadow to the overall graph. We do both of + these things by adding the following two lines at appropriate places in the + script

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$graph->SetShadow();
    +$graph->yaxis->SetColor('blue');
    +?>

    +

    +

    The results is shown in Figure 15.5. Adding drop shadow and changing axis color (example3.0.1.php) below

    +

    +

    Figure 15.5. Adding drop shadow and changing axis color (example3.0.1.php)

    Adding drop shadow and changing axis color (example3.0.1.php)


    +

    +

    +

    Tip

    +

    Remember that the library has multiple ways to handle null data values + as described in Different types of NULL data handling

    +

    +

    +
    +

    Automatic interpolation of unknown data

    + +

    Line graphs supports automatic linear interpolation of missing data point if + the missing data point is replaced by a '-' (hyphen character) for more on + handling of NULLs in the input data see Different types of NULL data handling.

    +

    +

    +
    +

    Figure 15.6. Original null values (example3.0.3.php)

    Original null values (example3.0.3.php)

    +
    +

    Figure 15.7. Using '-' to get interpolated lines (example3.0.2.php)

    Using '-' to get interpolated lines (example3.0.2.php)

    +
    +

    +

    +

    There is one option to control the behavior of the interpolation together with + accumulated line plots and that is how to handle the case where the initial or + ending data are unknown.

    +

    For accumulated line plots (see below) this is especially critical since each + value is plotted with an offset of the "previous" plot and hence all values must + be known. By default if the first data value is unknown it will be set to the + same value as the first found non-null value. It is also possible, for + accumulated line plots, to force the first and last unknown value to be equal to + 0 (zero). This is controlled by the method

    +

    +

    • +

      AccLinePlot::SetInterpolateMode($aForceZero)

      +

      A value of true for the for the argument will force any first or + last unknown values to be interpreted as 0 for an accumulated line + plot.

      +

    +

    +
    +

    Adding marks to the plot (a.k.a. plot marks)

    + +

    Another common embellishment of plots is to add markers for each data point. + The library supports a large number of built-in plot marks as well as the + ability to use arbitrary images as plot marks. Plot marks are instantiated as an + instance of class PlotMark defined in the module + "jpgraph:plotmark.inc.php"

    +

    There are three types of built-in plot marks

    +

    +

    1. +

      Line based.

      +

      These marks are drawn directly by the library at the appropriate + places in the graph. These marks are simple rectangles, squares, + stars etc The size and colors (both edge and fill) are user + adjustable.

      +
    2. +

      Image based symbols.

      +

      These marks look much more "refined" and are actually small + built-in images that are scaled and placed (copied) to the + appropriate position in the graph. Since these are predefined images + they are only available in a certain number of colors and shapes. +

      +
    3. +

      Country flags

      +

      As was previously discussed the library supports (as of Dec 2008) + all known countries and it is possible to use the country flags both + as background in the graphs as well as plot marks.

      +

    +

    +

    A full list of all available built-in plot marks and there symbolic names are + given in Appendix E. Available plot marks.

    +

    For now lets keep things simple and just add a small triangle at each of the + specified data points by adding the lines

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$lineplot->mark->SetType(MARK_UTRIANGLE);
    +$lineplot->mark->SetColor('blue');
    +$lineplot->mark->SetFillColor('red');
    +?>

    +

    +

    +

    Caution

    +

    The colors of the marks will, if you don't specify them explicitly, + follow the line color. Please note that if you want different colors for + the marks and the line the call to SetColor() for the marks + must be done after the call to the SetColor() for the line + since the marks color will always be reset to the lines color when you + set the line color.

    +

    +

    +

    The result after making these modifications are shown in Figure 15.8. Adding basic plot marks to the plot (example3.1.php)

    +

    +

    Figure 15.8. Adding basic plot marks to the plot (example3.1.php)

    Adding basic plot marks to the plot (example3.1.php)


    +

    +

    +

    Tip

    +

    In addition to the built in plot marks it is also possible to use a + user specified image as a plot mark. See Figure 14.11. Adding a left,right and center footer (footerex1.php) for an example of how to use this + feature. To use this feature the plot mark type is specified as + MARK_IMG and the file name of the image is given. For + example the following line will us the image file "myimage.jpg" as plot + marks and scale the image to 50% of its original size

    +

    +

    1
    +
    $lineplot->mark->SetType(MARK_IMG,'myimage.jpg','0.5');

    +

    +

    +

    +

    As a final example we show an example of using one of the built-in image marks + by adding the line

    +

    +

    1
    +
    $lineplot->mark->SetType(MARK_IMG_DIAMOND,'red',0.5);

    +

    +

    This will add a red diamond mark scaled to 50% of its original size to better + fit the overall size of the graph. The result of adding this is shown in Figure 15.9. Using one of the built-in images as plot mark, MARK_IMG_DIAMOND (example3.1.1.php)

    +

    +

    Figure 15.9. Using one of the built-in images as plot mark, MARK_IMG_DIAMOND (example3.1.1.php)

    Using one of the built-in images as plot mark, MARK_IMG_DIAMOND (example3.1.1.php)


    +

    +

    +

    Tip

    +

    Note that some of the built in images are available in different + sizes. The reason is that even though it is possible to n scale them by + the third argument there is a visual degradation to scale an image + larger than it's original size since some pixels needs to be + interpolated. Reducing the size with a scale < 1.0 gives much better + visual appearance.

    +

    +

    +

    In order to use one of the available country flags the type is specified as + MARK_FLAG1, MARK_FLAG2, MARK_FLAG3 or + MARK_FLAG4 which represent the native size of the flag (in + increasing order). The second argument to SetType() is either the + ordinal index number of the country flag or its short name (as listed Appendix F. List of all country flags). The following example illustrates both + these methods of specifying the country flags. The two critical lines are

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$p1->mark->SetType(MARK_FLAG1,197);
    +$p2->mark->SetType(MARK_FLAG1,'united states');
    +?>

    +

    +

    and the result of creating a graph with some data using country flags as data + markers are shown in Figure 15.10. Using country flags as plot marks (markflagex1.php)

    +

    +

    Figure 15.10. Using country flags as plot marks (markflagex1.php)

    Using country flags as plot marks (markflagex1.php)


    +

    +

    In addition the plot mark formatting shown above plot marks also supports + formating through the use of a callback function. The callback function will be + passed the y-value as its only argument and the callback function must return an + array consisting of three value, weight, color and fill-color. This could be + used to for example alter the colors of the plot marks depending on the actual + value. A common use of this feature is to create "balloon" scatter plot where a + variable sized filled circle is positioned at specific data points. This is a + way t create a 2D plot which conveys three values at each data point, x,y and + size. In the section on Scatter plot (see Scatter graphs) we show an example of + this.

    +
    +

    Displaying the values at the data points

    + +

    Lets continue the previous example by making some minor adjustments to also + show the values at each data point. The data label at each data point is + represented by the instance variable "$value". This is an instance of the + class DisplayValue and all normal text attributes can be + adjusted (e.g. color, size, fonts etc). The value is applied to all + labels.

    +

    In addition to the usual text formatting it is also possible to adjust how the + numeric data labels is formatted. This is done by one of two ways.

    +

    +

    1. +

      by submitting a suitable format string. This format string follows + the same syntax as the printf() format string.

      +
    2. +

      by specifying a format callback function. This callback function + must take exactly one argument (which is the data value) and return + the wanted string that should be displayed.

      +

    +

    +

    In order to display the values the first thing that must happen is to enable + the values. This is done by a call to

    +

    +

    1
    +
    $lineplot->value->Show();

    +

    +

    The result of adding this line is shown in Figure 15.11.  (example3.3.php)

    +

    +

    Figure 15.11.  (example3.3.php)

    (example3.3.php)


    +

    +

    We can now modify the appearance of the labels by changing the font and + changing the way the labels are formatted. We do this by adding the following + lines to the previous example

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$lineplot->value->SetFont(FF_ARIAL,FS_BOLD,10);
    +$lineplot->value->SetColor('darkred');
    +$lineplot->value->SetFormat('(%d)');
    +?>

    +

    +

    The resulting graph can be seen in Figure 15.12. Changing the appearance of data labels (example3.4.php)

    +

    +

    Figure 15.12. Changing the appearance of data labels (example3.4.php)

    Changing the appearance of data labels (example3.4.php)


    +

    +

    +

    Tip

    +

    To get 1000' separators use the PHP function number_format() as a + callback function

    +

    +

    +

    +

    Tip

    +

    To use method in classes as callback the callback method has to be + specified as an array with two string entries. The first entry must be + the class and the second entry must be the method name. Note that + callback method should be static as no instance context can be + created.

    +

    +

    +

    As a final example we make use of a callback function to format the values as + Roman Numerals . The result of this can + be seen in Figure 15.13. Formatting display values as roman numerals (example3.4.1.php)

    +

    +

    Figure 15.13. Formatting display values as roman numerals (example3.4.1.php)

    Formatting display values as roman numerals (example3.4.1.php)


    +

    +
    +

    Adding several data series to the same graph

    + +

    Up to now all examples we have shown have only had one data series. As was + mentioned in the introduction a graph can have an unlimited number of data + series (plots) although from a practical consideration (and "viewability") it is + probably best to restrict the number of data series in one graph to less than + 5-6.

    +

    The steps to do this is exactly a repetition of what the examples have shown + up to now. The only thing that is needed is to create the second data series, by + creating a new instance of a the LinePlot class, set the attributes, and finally + add it to the graph.

    +

    The following lines show how to create the new data series/plot and add it to + the graph (we only show the new lines - not the full script)

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +$ydata2  = array( 1 , 19 , 15 , 7 , 22 , 14 , 5 , 9 , 21 , 13 );
    + 
    +// Create a new data series with a different color
    +$lineplot2 = new  LinePlot ( $ydata2 );
    +$lineplot2->SetWeight ( 2 );
    + 
    +// Also add the new data series to the graph
    +$graph->Add( $lineplot2 );

    +

    +

    Making these additions will create the graph in Figure 15.14. Adding a second data series (example4.php)

    +

    +

    Figure 15.14. Adding a second data series (example4.php)

    Adding a second data series (example4.php)


    +

    +

    There are two things to note here

    +

    +

    1. +

      The Y-scale has changed to accommodate the larger range of + Y-values for the second graph.

      +
    2. +

      The colors for each successive data series is allocated + automatically but of course it is also possible to set the color + manually.

      +
    3. +

      If you add several plots to the same graph they should contain the + same number of data points. This is not a requirement (the graph + will be automatically scaled to accommodate the plot with the + largest number of points) but it will not look very good since one + of the plot end in the middle of the graph.

      +

    +

    +

    +

    Caution

    +

    Do not mix both manually and automatically assigned colors. When the + library assigns colors to a new line plot it will not check if a certain + color has been previously manually set and used.

    +

    +

    +
    +

    Adding a second Y-axis

    + +

    As was discussed in Using multiple y-axis it is possible + to add multiple y-axis to a graph. The most common use of this feature is to + just use one extra y-axis with a different scale on the right side of the graph. + To make this common case as easy as possible to manage the library provides some + convenience method to work with one second y-axis (and scale).

    +

    The second y-axis is accessed through the "$y2axis" property of + the Graph class and its use is completely analogue to the primary y-axis + ("$yaxis").

    +

    As you saw in the preceding example you could add multiple plots to the same + graph and Y-axis. However what if the two plots you want to display in the graph + has very different ranges? One might for example have Y-values like above but + the other might have Y-values in the 100:s. Even though it is perfectly possible + to add them as above the graph with the smallest values will have a very low + dynamic range since the scale must accommodate for the bigger dynamic range of + the second plot. (One other way of solving this particular problem could be to + use a logarithmic y-scale).

    +

    The solution to this is to use a second Y-axis with a different scale and add + the second plot to this Y-axis instead. Let's take a look at how that is + accomplished.

    +

    First we need to create a new data array with large values and secondly we + need to specify a scale for the Y2 axis. This is done by adding the lines

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$y2data = array(354 , 200 , 265 , 99 , 111 , 91 , 198 , 225 , 293 , 251);
    +$graph->SetY2Scale('lin');
    +?>

    +

    +

    To instruct the library to add this data series to the second y-axis we have + to make use of the method

    +

    +

    • +

      Graph::AddY2()

      +

    +

    +

    which is used in analogy with the usual Graph::Add()

    +

    To make the graph easier to read we set the color of the second y-axis to be + the same as the second data series. The result of this is shown in Figure 15.15. Adding a second y-axis to the graph (example5.php) below.

    +

    +

    Figure 15.15. Adding a second y-axis to the graph (example5.php)

    Adding a second y-axis to the graph (example5.php)


    +

    +
    +

    Adding a legend box to the graph

    + +

    Once we have multiple data series there is a need to separate them and that is + usually done by adding a legend box with suitable titles. As was shown in Adjusting the position and layout of the legend it is possible to both add a + legend box and adjusts its position. Lets now continue the previous example by + adding a suitable legend box to separate the two data series.

    +

    Each plot type has a 'SetLegend()' method which is used to name + that plot in the legend. So to name the two plots in the previous example we + have been working with so far we need to add the two lines

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$lineplot->SetLegend('Plot 1');
    +$lineplot2->SetLegend('Plot 2');
    +?>

    +

    +

    As you can see the legend gets automatically sized depending on how many plots + there are that have legend texts to display. By default it is placed with it's + top right corner close to the upper right edge of the graph. Depending on the + image you might want to adjust this or you might want to add a larger margin + which is big enough to accompany the legend. Let's do both.

    +

    First we increase the right margin and then we place the legend so that it is + roughly centered in the right margin area. We will also enlarge the overall + image so the plot area doesn't get too squeezed.

    +

    The legend properties is accessed through the '$legend' property + of the graph. So in order to adjust the position (as was described in Adjusting the position and layout of the legend ) we add the line

    +

    +

    1
    +
    $graph->legend->SetPos(0.05, 0.5, 'right', 'center');

    +

    +

    This will then give the graph shown in Figure 15.16. Adding and adjusting the position of the legend box (example6.php)

    +

    +

    Figure 15.16. Adding and adjusting the position of the legend box (example6.php)

    Adding and adjusting the position of the legend box (example6.php)


    +

    +

    As a reminder we briefly discuss the working of the SetPos() + method.

    +

    The position is specified as a fraction of the overall width and height of the + entire graph. This makes it possible for to resize the graph without disturbing + the relative position of the legend. The second two arguments specifies the + anchor point in the legend box that should be aligned with the specified + position.

    +

    As can be seen in Figure 15.16. Adding and adjusting the position of the legend box (example6.php) the legends are by + default placed in a column. It is also possible to adjust this by calling either + the Legend::SetLayout() method or specifically set the number of + columns to use by calling Legend::SetColumns() . Lets change the + layout so the legend texts are set in one row and place the legend box at the + bottom of the graph. If we do this we get the result shown in Figure 15.17. Adjusting the layout of the texts in the legend box (example6.1.php)

    +

    +

    Figure 15.17. Adjusting the layout of the texts in the legend box (example6.1.php)

    Adjusting the layout of the texts in the legend box (example6.1.php)


    +

    +

    As a final example lets combine what we have learnt up to now, i.e. adding + plot marks, adding multiple data series to the same graph and adding a legend + box into one example. In Figure 15.18. Using plot marks with several data series and a legend (builtinplotmarksex1.php) we have + in addition used the feature with "tabbed" titles which is an alternative way to + put titles on graph (as discussed in Formatting and specifying the titles of the graph).

    +

    +

    Figure 15.18. Using plot marks with several data series and a legend (builtinplotmarksex1.php)

    Using plot marks with several data series and a legend (builtinplotmarksex1.php)


    +

    +
    +

    Changing the style of the line plot - using the step-style

    + +

    Step style refers to an alternate way of rendering line plots by not drawing a + direct line between two adjacent points but rather draw two segments. The first + segment being a horizontal line to the next X-value and then a vertical line + from that point to the correct Y-value at that instance. This is also known as + "zero-order hold" (as compared with the first-order hold which is an alternative + name for combining each data point with a straight line). Enabling step stylöe + is done by calling the method

    +

    +

    +

    +

    In Figure 15.19. Using the "Step style" for line plots (example6.2.php) we have enabled the step style for a + basic line graphs to illustrate this concept.

    +

    +

    Figure 15.19. Using the "Step style" for line plots (example6.2.php)

    Using the "Step style" for line plots (example6.2.php)


    +

    +
    +

    Optimizing line plot using "fast drawing"

    + +

    For line plots with a large amount of data point that is drawn with a solid + line it is possible to speed up the construction of the graph by calling the method:

    • +

      LinePlot::SetFastStroke($aFlg=true)

      +
    +

    This will avoid some of the overhead associated with drawing lines of + arbitrary style. The limitations with this optimization is

    +

    +

    1. +

      Only solid lines, no styles on the lines are allowed (including no + step-style)

      +
    2. +

      No plot marks

      +
    3. +

      No value labels

      +
    4. +

      No area plot , i.e. no filled line graphs and no filled partial + areas

      +

    +

    +

    For line plots with a large amount of data point the savings can be quite + substantially and in the order of 40-50% speedup.

    +
    +

    Creating a filled line graphs (a.k.a. area plots)

    + +

    A filled line plot (also known as an area plot) can be created in two ways + depending on whether automatic color handling is sufficient or there is a need + to manually specify the color.

    +
    1. +

      Case 1: Using automatic fill + color

      +

      In this case there is only need to tell that we want t filled line + graph by calling the method

      +

      +

      • +

        LinePlot::SetFilled($aFlg=true)

        +

      +

      +

      The color assigned to the filled area will be set + automatically

      +
    2. +

      Case 2: Setting a manual fill + color

      +

      In this case the method called to set the fill color will make an + implicit call to SetFilled(). Setting the fill color is + done by the method

      +

      +

      • +

        LinePlot::SetFillColor($aColor)

        +

      +

      +

    In Figure 15.20. A basic filled line graph (filledlineex01.php) a basic filled line + graph is shown which also have plot marks and an adjusted color so that the line + and the fill have different colors.

    +

    +

    Figure 15.20. A basic filled line graph (filledlineex01.php)

    A basic filled line graph (filledlineex01.php)


    +

    +

    There are a couple of thing worth noting

    +

    +

    • +

      If you add multiple filled line plots to one graph make sure you + add the one with the highest Y-values first since it will otherwise + overwrite the other plots and they will not be visible. Plots are + stroked in the order they are added to the graph, so the graph you + want front-most must be added last.

      +
    • +

      When using legends with filled line plot the legend will show the + fill color and not the bounding line color.

      +
    • +

      The area filled is the area between the x-axis at y=0 and the data + value

      +
    • +

      By default the line color will be the same as the fill color. This + means that if a different line color is needed then the call to + LinePlot::SetColor() must be after the call to + LinePlot::SetFillColor()

      +
    • +

      Grid lines are by default drawn behind the plot (or rather the + plot is drawn on top of the plot area). However, this can be + adjusted so that the grid lines will always be on top of the line + plots. This is done by calling the method

      +

      +

      • +

        Graph::SetGridDepth($aDepth) where + $aDepth is either + DEPTH_BACK or DEPTH_FRONT + symbolic defines

        +

      +

      +

      An alternative way of handling this is to make the fill color + semi-transparent by setting the alpha-blending for the fill color. + See Specifying the alpha channel (color transparency) and Figure 15.18. Using plot marks with several data series and a legend (builtinplotmarksex1.php) above for a real + example. Just making this grid depth adjustments will give the + result shown in Figure 15.21. Having the grid line on top of a filled line plot (filledlineex01.1.php)

      +

      +

      Figure 15.21. Having the grid line on top of a filled line plot (filledlineex01.1.php)

      Having the grid line on top of a filled line plot (filledlineex01.1.php)


      +

      +

    +

    +

    Tip

    +

    By default the fill is only done between y=0 and the line plot. In some + cases it might be useful to have the fill go all the way down to whatever + the minimum y-value is (for example if the x-axis is always positioned at + the minimum y-value). This can be accomplished by calling the method

    +

    +

    • +

      LinePlot::SetFillFromYMin($aFlg=true)

      +

    +

    +
    +

    Filling from the top

    + +

    As was mentioned in the previous paragraph the fill normally goes from the + bottom and up to the line specified by the data series. Another variant is + to have the fill go from the top of the plot area down to the line.

    +

    There is primary one use for this type of fill and that is to create a + "mask" for a background image to make the illusion that the area below the + line is filled with the image while the area above the line is the normal + plot background.

    +

    This is done by first telling the library the fill shall be from the top + with a call to the method

    +

    +

    • +

      LinePlot::SetFillFromYMax($aFlg=true)

      +

    +

    +

    then we create the data series as usual but specify the fill color as the + wanted background color and also add the image we want as a background + image.

    +

    Since we only want to use the first plot as a mask we can also specify the + line weight to 0 (to avoid the edge lines of the plot going from the first + and last point to the top. To have a nice line we can just add a second line + plot which is not filled and is just used to draw the line in our specified + color and weight.

    +

    An example of how this can look is shown in Figure 15.22. Creating the effect of an area fill with an image (lineimagefillex1.php) below which shows a fictive growth + in education which is illustrated with an old class room photography.

    +

    +

    Figure 15.22. Creating the effect of an area fill with an image (lineimagefillex1.php)

    Creating the effect of an area fill with an image (lineimagefillex1.php)


    +

    +

    +

    Tip

    +

    To have the grid lines on top of the area plot (so they are + visible since they are vy default drawn at the bottom) the depth of + the grid lines can be set with a call to the method

    +

    +

    • +

      Graph::SetGridDepth($aDepth)

      +

    +

    +

    For example as in

    +

    +

    1
    +
    $graph->SetGridDepth(DEPTH_FRONT);

    +

    +

    +

    +
    +

    Filling from 0 or from bottom

    + +

    As a complement to what was described in the previous section it is also + possible to fill from the bottom. By default an area is filled from the + 0-line to the boundary of the data series as is shown in Figure 15.23. Filling from the 0-line (The default) (manualtickex3.php) below

    +

    +

    Figure 15.23. Filling from the 0-line (The default) (manualtickex3.php)

    Filling from the 0-line (The default) (manualtickex3.php)


    +

    +

    By making a call to

    +

    +

    • +

      LinePlot::SetFillFromYMin($aFlg=true)

      +

    +

    +

    The area will instead be filled from the bottom as is shown in Figure 15.24. Filling from the bottom (manualtickex4.php)

    +

    +

    Figure 15.24. Filling from the bottom (manualtickex4.php)

    Filling from the bottom (manualtickex4.php)


    +

    +

    +

    Note

    +

    In Figure 15.23. Filling from the 0-line (The default) (manualtickex3.php) and Figure 15.24. Filling from the bottom (manualtickex4.php) we have used gradient fill in + both the plot area and the amrgin area. This is a feature that was + introduced in free-version3.0.5 and in pro-version 3.1.3p

    +

    +

    +
    +

    Using gradient fills

    + +

    In addition to the solid color fill it is also possible to use gradient + fills for are graphs. To specify a gradient fill for a line graph the + following method in LinePlot class is used

    +

    +

    • +

      LinePlot::SetFillGradient($aFromColor,$aToColor,$aNumColors=100,$aFilled=true)

      +

      $aFromColor, $aToColor, The starting + and ending color

      +

      $aNumColors=100, The number of colors to use in + the transition between from and to color

      +

      $aFilled=true, Enable/disable gradient + filling

      +

    +

    +

    Some examples of typical use of this is shown below

    +

    +

    Figure 15.25. A basic gradient fill using default values (gradlinefillex1.php)

    A basic gradient fill using default values (gradlinefillex1.php)


    +

    +

    The following two examples shows the effect of changing the number of + intermediate colors that are used to get from the "from color" and to the + "to color".

    +

    +

    +
    +

    Figure 15.26. Using the default number of intermediate colors (gradlinefillex2.php)

    Using the default number of intermediate colors (gradlinefillex2.php)

    +
    +

    Figure 15.27. Only using 4 colors in total between start and finish color (gradlinefillex3.php)

    Only using 4 colors in total between start and finish color (gradlinefillex3.php)

    +
    +

    +

    +
    +
    +

    Partially filled area graphs

    + +

    In addition to filling the entire area between the line plot and the x-axis + (at y=0) the library also offers the possibility to add areas limited by the + line and a specified interval on the x-axis. Several such areas can be added and + each area having a different color. In ?? a basic example of how this can look + is shown.

    +

    +

    Figure 15.28. Adding two partially filled areas to a line plot (partiallyfilledlineex1.php)

    Adding two partially filled areas to a line plot (partiallyfilledlineex1.php)


    +

    +

    The areas (one or more) are created by calling the method

    +

    +

    • +

      LinePlot::AddArea($aMin=0,$aMax=0,$aFilled=LP_AREA_NOT_FILLED,$aColor="gray9",$aBorder=LP_AREA_BORDER)

      +

      The extension of the area along the x-axis is given by the + $aMin and $aMax values.

      +

      The third argument specifies whether the area should be filled or + not. This argument can have the values

      +

      +

      • +

        LP_AREA_FILLED

        +
      • +

        LP_AREA_NOT_FILLED

        +

      +

      +

      The fourth argument specifies the fill color and the fifth + argument specifies if the area should have a border (edge) or not. + If the area has a border it will be the same color as the line. The + values for the fourth argument can be

      +

      +

      • +

        LP_AREA_BORDER

        +
      • +

        LP_AREA_NO_BORDER

        +

      +

      +

    +

    +
    +

    Filled lines with NULL values

    + +

    The NULL value handling follows the same principle as was described for line + plots. If the NULL value is specified as '-' the line will be interpretated but + if it is specified as 'x' it will be broken up as is shown in Figure 15.29. Area plot with 'x' NULL values (filledlineex03.php)

    +

    +

    Figure 15.29. Area plot with 'x' NULL values (filledlineex03.php)

    Area plot with 'x' NULL values (filledlineex03.php)


    +

    +
    +

    Accumulated line graphs

    + +

    Accumulated line graphs are line graphs that are "stacked" on top of each + other. That is, the values in the supplied data for the Y-axis is not the + absolute value but rather the relative value from graph below. For example if + you have two line graphs with three points each, say [3,7,5] and [6,9,7]. The + first graph will be plotted on the absolute Y-values [3,7,5] the second plot + will be plotted at [3+6, 7+9, 5+7], hence the values of the previous graphs will + be used as offsets.

    +

    An accumulated graph plot is represented by class AccLinePlot + which is a container class for line plots. This means that the + AccLinePlot needs to be "fed" a number of ordinary instances of + LinePlot.

    +

    Any number of ordinary line graphs may be added together (up to the limit of + readability of the plot).

    +

    For example, to add three line plots in an accumulated line plot graph the + following code is needed

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php
    +// First create the individual plots
    +$p1 = new LinePlot( $datay_1 );
    +$p2 = new LinePlot( $datay_2 );
    +$p3 = new LinePlot( $datay_3 ); 
    + 
    +// Then add them together to form a accumulated plot
    +$ap  = new  AccLinePlot(array( $p1 , $p2 , $p3 ));
    + 
    +// Add the accumulated line plot to the graph
    +$graph->Add ( $ap ); 
    +?>

    +

    +

    Using some random data for the areas can produce the result shown in Figure 15.30. A basic accumulated area plot (example17.php)

    +

    +

    Figure 15.30. A basic accumulated area plot (example17.php)

    A basic accumulated area plot (example17.php)


    +

    +
    +

    Accumulated line graphs with given X-labels

    + +

    Creating an accumulated line plot, (or a filled accumulated area plot), with + multiple data sets at given x-coordinates poses some specific problems when the + coordinates for the different data sets are not given at the same x-coordinates. + This is a generic problem and has nothing to do with library in particular. This + section wil deal with one possible way of handling this by making sure that + missing data points are created if they are "missing".

    +

    To understand the problem we will make one simplifications (that is of no real + consequence for the end result) that can be stated as

    +

    +

    1. +

      the X-coordinates for all data tuples are whole positive number. +

      +
    2. +

      the X-coordinates are in sorted order (non-descending)

      +

    +

    +

    The core issue can be illustrate as follows. Lets assume that we want to make + an accumulated graph showing the two data sets

    +

    +

    data set 1 == (0,5), (2,10), (3,10), (5,20)
    +data set 2 == (0,7), (1,12), (2,5),  (5,10)
    +

    +

    +

    In the above notation the tuple (0,5) means a data point with X-coordinate = 0 + and Y-coordinate = 5.

    +

    What the library now needs to do is to first plot data set 1. No problem. When + it then becomes time to plot the second data set we face an issue. The only + points where we now the Y-value of data set 1 is at the given discrete points + (0,2,3,5).

    +

    Plotting the first tuple for data set 2 shown above gives an absolute starting + point at

    +

    +

    (0,5+7) == (0,12)
    +

    +

    +

    The next data point we know for data set 2 is (1,12) so we need to plot this. + But now we can see that we do not know the value for data set 1 at X-coordinate + = 1. We only know the values at coordinates 0 and 2. This gives us a problem. We + need to know at what offset we should plot this data point in data set 2 and we + have no direct way of calculating this.

    +

    Now, one might argue that we could just interpolate between the data points + (0,5) and (2,10) the Y-value at X=1 (doing a linear interpolation this would + give the data point (1,7.5)) so why doesn't the library simply do this? It + surely could be done.

    +

    +

    Note

    +

    In real life using this approach would be much more complex. First of + all we need to create a linear succession of all X-values used in all + data sets to create an ordered set and then fill in the blanks so that + all data sets have values at all given X-coordinates. Those of you + familiar with signal processing will recognize this as an (almost) + up-sampling of the original data sets followed by a low pass filter. +

    +

    +

    +

    However, by design the library doesn't do this. The crucial observation here + is that it can not be a graphic libraries responsibility to "create" missing + data points by making assumption that a particular polynomial interpolation is + valid (in this case a first degree approximation). What if a linear + interpolation is not representative for the data set given? Perhaps a second + degree approximation would be more accurate.

    +

    So, this kind of data preparation must be done in the domain of the given data + set where knowledge of the underlying data will allow an accurate preparation of + the input to a graphing script if we insist of plotting an accumulated graph. + One could argue that accumulated data plots can only be done for data series + with the same X-coordinates.

    +

    Preparing the input data

    + +

    So what if we are still required to do an accumulated plot even when we + don't have all the data sets at the same X-coordinates? Going back to our + original two data sets, hereafter referrered to as DS1 and DS2 there are 2 + manual steps (as described above) that needs to happen.

    +

    +

    1. +

      Identify all X-data points that needs to exist

      +
    2. +

      Create values for all data sets at those points

      +

    +

    +

    So, in DS1 and DS2 the union of the two data sets X-coordinates are

    +

    +

    X_coordinates == union(DS1_x, DS2_x) == 0,1,2,3,5
    +

    +

    +

    This will force us to augment the two data sets as

    +

    +

    data set 1 == (0,5), (1,??), (2,10), (3,10), (5,20)
    +data set 2 == (0,7), (1,12), (2, 5), (3,??), (5,10)
    +

    +

    +

    Where I have added '??' to indicate values that needs to be computed in + order to draw an accumulated line/area plot at specific values. Now assume + that we are able to find the missing data for these points by some method to + be

    +

    +

    data set 1 == (0,5), (1, 8), (2,10), (3,10), (5,20)
    +data set 2 == (0,7), (1,12), (2, 5), (3, 2), (5,10)
    +

    +

    +

    Are we now ready to plot these data sets? Unfortunately not quite. The + remaining problem is that since the library only handles accumulated plots + without a given X-coordinate (using an X-coordinate for the individual line + plots will have no affect - and it's behaviour is undefined). This means + that the data points are assumed to be equ-distance apart - and this is + almost true for the data sets above. There is 1 unit between theme apart + from the two last tuples which in fact have a distance of 2 units. In fact + the library only plots data sets with a given Y-coordinate and then assumes + that the x-coordinate is a linear ordering of (0,1,2, ..)

    +

    So in order to create a linear equ-distance ordered set we need to further + augment the two data sets as

    +

    +

    data set 1 == (0,5), (1, 8), (2,10), (3,10), (4,??), (5,20)
    +data set 2 == (0,7), (1,12), (2, 5), (3, 2), (4,??), (5,10)
    +

    +

    +

    So this means that we need to manually calculate another interpolated + value. If we know we can make a linear interpolation (or perhaps find the + data at this point) it will give us

    +

    +

    data set 1 == (0,5), (1, 8), (2,10), (3,10), (4,15), (5,20)
    +data set 2 == (0,7), (1,12), (2, 5), (3, 2), (4, 6), (5,10)
    +

    +

    +

    This final data set is now ready to be sent to the + AccLinePlot class. It is left as a (non-trivial) exercise + to the reader to define and implement a function that performs the steps + outlined above to create proper data sets before reading on.

    +
    +

    Creating plots with non-trivial X-coordinates

    + +

    With non-trivial X-coordinates we mean for example timestamps or perhaps + real numbers. For timestamps it is not so difficult. What we need to do is + to identify the proper interval (in the original timestamp domain) and then + create a mapping between that domain and the natural numbers (0,1,2,3,...).

    +

    The reason for this is that the library only accepts Y-coordinates as + argument to the accumulated data series and will make the implicit + assumption that when it plots the data it will plot the data points at + consecutive values as if the X-coordinates had been given as (0,1,2,3,..). + Hence we need to manually prepare the data to match this format.

    +

    As the final step we manually set the labels for the X-axis according to + our interpretation. An example (with some code snippets) will make this + approach clear.

    +

    Example - using timestamps

    +

    Assume we have the two data sets with timestamps

    +

    +

    DS1 == (1212199200,12), (1212210000,20), (1212213600,30)
    +DS1 == (1212199200,12), (1212206400, 8)
    +

    +

    +

    and we now that the sampling interval between the data points are 7200s + (=2 min). Following the same principle as above we need to find the + additional values

    +

    +

    DS1 == (1212199200,12), (1212206400,??), (1212210000,20), (1212213600,30)
    +DS1 == (1212199200,12), (1212206400, 8), (1212210000,??), (1212213600,??)
    +

    +

    +

    further assuming that we (by some method) can find these value we can then + interpret this data as

    +

    +

    DS1 == (1212199200,12), (1212206400,16), (1212210000,20), (1212213600,30)
    +DS1 == (1212199200,12), (1212206400, 8), (1212210000, 0), (1212213600, 0)
    +

    +

    +

    In the above we have made the explicit assumption that unknown data points + at the end can be interpretated as 0 in this particular application.

    +

    We now have an ordered sequence of these tuples and we can imagine a + mapping that will allow us to write these sequences as

    +

    +

    DS1 == (0,12), (1,16), (2,20), (3,30)
    +DS1 == (0,12), (1, 8), (2, 0), (3, 0)
    +

    +

    +

    The mapping for this is xi=1212199200 + 7200*i, i=0..3 which + we use when we put the final labels in the graph.

    +

    The only steps that remain to handle timestamps is to manually replace the + X-scale (which in this case would be 0,1,2,3) with the calculated values + according to the mapping given above.

    +

    We do this by creating an array of the timestamps we need to plot and then + replace them - in situ - with an application of the standard PHP function + array_walk() which applies a user defined function to each + value in an array and replaces that value with the return value of the user + function. In this case we create a user function that implements the mapping + stated above with the additional twist that given an argument as a time + stamp it returns a suitable human format for that time stamp.

    +

    The following code fragments shows how this could be done

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    // Some userdefined human readable version of the timestamp
    +function formatDate(&$aVal) {
    +    $aVal = date('Y-m-d H:i',$aVal);
    +}
    + 
    +$timeStamps = array(212199200,1212206400,1212210000,1212213600);
    + 
    +array_walk($time,'formatDate');

    +

    +

    when we now have the labels in a nice human readable format we can put + them on the scale labels with

    +

    +

    1
    +2
    +
    $graph->xaxis->SetTickLabels($timeStamps);
    +$graph->xaxis->SetLabelAngle(90);

    +

    +

    though strictly not necessary we have also tilted the labels 90 degrees in + order to minimize the risk the labels overwrite each other.

    +

    If we still think that the labels are too close together ea we can chose + to only label every second tick mark. We do this with a call to

    +

    +

    1
    +
    $graph->xaxis->SetTextLabelInterval(2);

    +

    +

    Example using real (i.e. floating point) + x-coordinates

    +

    In principle this is handled in the same way as what we shown above for + timestamps. The additional complexity here spells rounding errors. When we + establish the equidistant interval between each data point it will be a real + number, potentially an irrational number, which means that we cannot + represent it exactly and adding the interval repeated times might cause + rounding errors if we are not careful.

    +

    Secondly we need to find a mapping between the ordered sequence of the + real numbers we have as X-coordinates and the natural numbers which are the + implicit X-coordinates assumed by the library.

    +
    +

    A full example

    + +

    In the example below we artifically create some data sets where all the + sets have values at all specified timestamps with the following code

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +
    <?php
    +//Create some test data
    +$xdata = array();
    +$ydata = array();
    + 
    +// Timestamps - 2h (=7200s) apart starting 
    +$sampling = 7200;
    +$n = 50; // data points
    + 
    +// Setup the data arrays with some random data
    +for($i=0; $i < $n; ++$i ) {
    +    $xdata[$i] = time() + $i * $sampling;
    +    $ydata[0][$i] = rand(12,15);
    +    $ydata[1][$i] = rand(100,155);
    +    $ydata[2][$i] = rand(20,30);
    +}
    +?>

    +

    +

    Since the xdata array is given as timestamps we need to make this more + human readable by converting the timestamp using the date() + function. To do this we create an axillary helper function and then use the + array_walk() standard array function to apply this + formatting to all existing values in the timestamp array as follows.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    // Formatting function to translate the timestamps into human readable labels
    +function formatDate(&$aVal) {
    +    $aVal = date('Y-m-d H:i',$aVal);
    +}
    + 
    +// Apply this format to all time values in the data to prepare it to be display
    +array_walk($time,'formatDate');

    +

    +

    The core of the script can now be written. For a change we make some + adjustment from the default values of colors and tick mark positioning as a + reminder that there is a lot of flexibility in creating the graphs.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php
    +// Create the graph. 
    +$graph  = new Graph(700, 400);
    +$graph->title->Set('Accumulated values with specified X-axis scale');
    +$graph->SetScale('datlin');
    + 
    +// Setup margin color
    +$graph->SetMarginColor('green@0.95');
    + 
    +// Adjust the margin to make room for the X-labels
    +$graph->SetMargin(40,30,40,120);
    + 
    +// Turn the tick marks out from the plot area
    +$graph->xaxis->SetTickSide(SIDE_BOTTOM);
    +$graph->yaxis->SetTickSide(SIDE_LEFT);
    + 
    +$p0 =new LinePlot($a);
    +$p0->SetFillColor('sandybrown');
    +$p1 =new LinePlot($b);
    +$p1->SetFillColor('lightblue');
    +$p2 =new LinePlot($c);
    +$p2->SetFillColor('red');
    +$ap = new AccLinePlot(array($p0,$p1,$p2));
    + 
    +$graph->xaxis->SetTickLabels($time);
    +$graph->xaxis->SetTextLabelInterval(4);
    + 
    +// Add the plot to the graph
    +$graph->Add($ap);
    + 
    +// Set the angle for the labels to 90 degrees
    +$graph->xaxis->SetLabelAngle(90);
    + 
    +// Send the graph back to the browser
    +$graph->Stroke();
    +?>

    +

    +

    The resulting image will now look something like what is shown in + ??

    +

    +

    Figure 15.31. Area plot with specified x coordinates (prepaccdata_example.php)

    Area plot with specified x coordinates (prepaccdata_example.php)


    +

    +
    +

    Helper function to create interpolated data

    + +

    The function InterpolateData() below takes two array of + arrays and one integer as arguments. The first array of arrays contains the + X-coordinates for each data set and the second array of arrays contains the + Y-coordinates for all the data sets. The final integer argument is the + distance (or sample rate) that should be assumed between each X-coordinate.

    +

    The function will return a tuple. The first element in the returned tuple + is a single array with all the X-values that should be used and the second + element is an array of arrays with all the Y-data sets with all data + specified for each X-coordinate. Any missing Y values are interpolated using + a linear interpolation schema.

    +

    So using our first example above as demonstration this would be handled as

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +
    <?php
    +$datax = array( 
    +    array(0,2,3,5),
    +    array(0,1,2,5));
    + 
    +$datay = array(
    +    array(5,10,10,20),
    +    array(7,12,5,10));
    + 
    +list($datax, $datay) = InterpolateData($datax, $datay);
    + 
    +// $datax = array(0,1,2,3,4,5)
    +// $datay = array( array(5, 8,10,10,15,20),
    +//                 array(7,12, 5, 2, 6,10));
    +?>

    +

    +

    One possible implementation of this function is given below. It has + primarily been written for clarity and not necessary high performance. To + interpolate the "missing" Y-values a linear approximation is assumed.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +
    <?php
    +function InterpolateData($aXData,$aYData,$aSampleInterval=1) {
    + 
    +    // First do some sanity checks on the input data
    +    $nx = count($aXData);
    +    $ny = count($aYData);
    +    if( $nx != $ny )
    +        return array(false,-1);
    +        
    +    for( $i=0; $i < $nx; ++$i ) {
    +         if( count($aXData[$i]) != count($aYData[$i]) )
    +             return array(false,-2);
    +    }
    + 
    +    // Create the sorted union of all X-coordinates
    +    $unionx = array_union($aXData);
    +    $length = count($unionx);
    + 
    +    // We now have to make sure that the distance between all
    +    // X-coordinates is 1 unit of the sample interval. If not
    +    // we will have to insert suitable X-value
    +    $i=1;
    +    while( $i < $length ) {
    +            $missing = 0;
    +            $diff = $unionx[$i] - $unionx[$i-1];
    +            if( $diff != $aSampleInterval ) {
    + 
    +            // Sanity check to make sure sample interval is an even multiple
    +            // of the distance between the gven X-coordinates
    +            if( $diff % $aSampleInterval !== 0 ) {
    +              return array(false,-4);
    +            }
    + 
    +                $missing = $diff / $aSampleInterval - 1;
    +                $fill = array();
    +                for( $j=0; $j < $missing; ++$j ) {
    +                        $fill[$j] = $aSampleInterval*($j+1)+$unionx[$i-1];
    +                }
    +                $unionx = array_merge(
    +                        array_slice($unionx,0,$i),$fill,array_slice($unionx,$i));
    +             }
    +             $i += $missing+1;
    +             $length += $missing;
    +    }    
    + 
    +    if( $length != count($unionx) ) {
    +        // Internal error check
    +        return array(false,-3);
    +    }
    + 
    +    // Now loop through all the individual data sets and find out 
    +    // which x-data is missing and hence needs to be interpolated
    +    $n = count($aXData);
    + 
    +    for( $i=0; $i < $n; ++$i ) {
    +            $missing_values = array_diff($unionx, $aXData[$i]);
    + 
    +            // Now find the position of each missing X-coordinate
    +            // and use that position in the corresponding Y array
    +            // to insert an interpolated value
    +            $m = count($missing_values);
    +            foreach( $missing_values as $key => $val ) {
    +                $idx = array_search($val,$unionx);
    + 
    +                // Now split the Y-array at that position and insert
    +                // a new sentinel value
    +                if( $idx >= 0 ) {
    +                        $aYData[$i] = array_merge(
    +                            array_slice($aYData[$i],0,$idx),
    +                            array(NULL),
    +                            array_slice($aYData[$i],$idx));
    +                }
    +            }
    + 
    +            // The next step is to actually calculate an interpolated value
    +            // for the Y-coordinates we don't have. As a special case any
    +            // beginning or ending non-defined coordinates are set to 0
    +    
    +            // Set all beginning NULL to 0
    +            for( $j=0; $j < $length; ++$j ) {
    +                if( $aYData[$i][$j] !== NULL )
    +                        break;
    +                $aYData[$i][$j] = 0;
    +            }
    + 
    +            // Set all ending NULL to 0
    +            for( $j=$length-1; $j >= 0; --$j ) {
    +                if( $aYData[$i][$j] !== NULL )
    +                        break;
    +                $aYData[$i][$j] = 0;
    +            }
    + 
    +            // Calculate the remaingin missing values as a linear
    +            // interpolation and keeping in mind that there might be
    +            // multiple missing values in a row.
    +            $j = 0;
    +            while($j < $length ) {
    +                if( $aYData[$i][$j] === NULL ) {
    +                        // How many unknown values in a row?
    +                        $cnt = 1;
    +                        while( $j+$cnt < $length && $aYData[$i][$j+$cnt]===NULL ) {
    +                            ++$cnt;
    +                        }
    +        
    +                        if( $cnt == 1 ) {
    +                            $aYData[$i][$j] = ($aYData[$i][$j-1]+$aYData[$i][$j+1])/2;
    +                        }
    +                        else {
    +                            $step = ($aYData[$i][$j+$cnt] - $aYData[$i][$j-1])/($cnt+1);
    +                            for( $k=1; $k <= $cnt; ++$k ) {
    +                                    $aYData[$i][$j+$k-1] = $step*$k+$aYData[$i][$j-1];
    +                            }
    +                        }
    +                }
    +                ++$j;
    +            }
    +    }
    + 
    +    return array($unionx,$aYData);
    +}
    + 
    + 
    +//------------------------------------------------------------------------
    +// Helper function to create the union of two arrays
    +//------------------------------------------------------------------------
    + 
    +// Create the sorted union of all numeric arrays given as argument
    +function array_union($a) {
    + 
    +    $n = count($a);
    +    $res = $a[0];
    +    for( $i=1; $i < $n; ++$i) {
    +            $res = _array2_union($res,$a[$i]);
    +    }
    +    sort($res);
    +    return $res;
    +};
    + 
    +// Return the union between two numeric arrays
    +function _array2_union($a,$b) {
    + 
    +    if( $a == NULL ) return $b;
    +    if( $b == NULL ) return $a;
    + 
    +    // A standard "trick" to calculate the union of two arrays
    +    return array_merge(
    +            array_intersect($a,$b),
    +            array_diff($a, $b),
    +            array_diff($b, $a));
    +}
    +?>

    +

    +
    +
    +

    Constructing smooth line plots with Cubic Splines

    + +

    The library support interpolation between data point by the use of cubic + splines. This will make the implicit assumption that the underlying phenomenon + that is plotted can be represented by a 3:rd degree polynomial between the given + data points (also known as a control points).

    +

    Cubic splines have the property that the constructed line will pass through + all control points given.

    +

    To construct a spline you both the X and Y coordinates for the known data + points are needed since the library can make no assumption on the step size + between the data points.

    +

    The cubic spline functionality in the library is encapsulated in the + class Spline which is define the module + "jpgraph_regstat.inc.php" which must be added to the + included files in the script.

    +

    The first step is to construct new Spline instance. This class is instantiated + by calling the constructor with the two known data arrays (X and Y) as + follows.

    +

    +

    1
    +
    $spline = new Spline( $xdata , $ydata );

    +

    +

    This call initializes the spline with the data points given. These data points + are also known as Control points for the spline. This helper class doesn't draw + any line itself. Instead it is merely used to get a new (larger) data array + which have all the interpolated values. These new value are then used to make + the actual line plot. This way gives great flexibility in how to use the + interpolated data points.

    +

    To get the y- and x-axis data to be plotted we call the method + Spline::Get() to get an interpolated array containing a + specified number of points. So for example the line

    +

    +

    1
    +
    list($sdatax , $sdatay) = $spline->Get( 50 );

    +

    +

    will construct the two new data arrays '$sdatax' and + '$sdatay' which contains 50 data points. These two arrays are + constructed from the control points we specified when we created the + '$spline' object. These data arrays are then used to make the + actual plot just as for a "standard" plot. In Figure 15.32. Constructing a smooth spline curve from 8 control points (splineex1.php) we have used 8 control points to construct a spline.

    +

    +

    Figure 15.32. Constructing a smooth spline curve from 8 control points (splineex1.php)

    Constructing a smooth spline curve from 8 control points (splineex1.php)


    +

    +

    In order to make the example more interesting we actually used two plots. + First a line plot to get the smooth curve and then a standard scatter plot + (discussed later in this manual) which is used to illustrate where the control + points are situated.

    +

    +

    Note

    +

    The library also support the construction of Bezier curves which is built on a similar concept of + constructing a smooth line from a number of control points, The biggest + difference between cubic splines and Bezier curves is that while a cubic + spline is always guaranteed to pass through all control point a Bezier + curve will in general not pass through any control points. Instead the + Bezier control point are outside the curve and affects the curvature of + the curve. Bezier type curves are not in general used together with data + visualization but are instead used to create specific curves, usually + for CAD and 3D graphic purposes. In the discussion of Canvas graphs, see + Canvas graphs, we discuss this + further.

    +

    +

    +
    +
    + + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch15s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch15s02.html new file mode 100755 index 00000000..4853ffdb --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch15s02.html @@ -0,0 +1,604 @@ +Bar graphs

    Bar graphs

    + +

    The library supports 2D vertical and horizontal bar plots as was shown in the + introduction section . To use bar plots the bar plot module + "jpgraph_bar.php" must be included in the script.

    +

    There are eight fundamental types of bar graphs supported by the library. Examples + of the available types are shown in Figure 15.33. Different types of supported bar graphs

    +

    +

    Figure 15.33. Different types of supported bar graphs

    + +
    +
    +

    Different types of supported bar graphs

    +

    a) Vertical + bar

    +
    +

    Different types of supported bar graphs

    +

    b) Horizontal + bar

    +
    +

    Different types of supported bar graphs

    +

    c) Vertical + accumulated bar

    +
    +

    Different types of supported bar graphs

    +

    d) Horizontal + accumulated bar

    +
    +

    Different types of supported bar graphs

    +

    e) Vertical group + bar

    +
    +

    Different types of supported bar graphs

    +

    f) Horizontal group + bar

    +
    +

    Different types of supported bar graphs

    +

    g) Vertical group + accumulated bar

    +
    +

    Different types of supported bar graphs

    +

    h) Horizontal group + accumulated bar

    +
    +
    +


    +

    +

    Using bar plots is straightforward and works in much the same way as line plots as + was discussed in the previous sections.

    +

    An instance of class BarPlot is created with the wanted data and is + then either added directly to the graph to create a basic bar plot or is enclosed in + with one of the container classes AccBarPlot or + GroupBarPlot which are then added to the graph.

    +

    There is however one crucial change that is usually made. The x-scale is usually + specified as a "text" type scale. The reasons this are primarily + two

    +

    +

    1. +

      to get the alignment of the labels to be between the tick marks and + not at the tick marks as is normal for line plots

      +
    2. +

      to get the bars to be aligned at the center between the tick + marks

      +

    +

    +

    The following two examples shows the difference between using an integer scale in + Figure 15.34. Using "int" scale for the x-axis (example19.1.php) and a text sale in Figure 15.35. Using "text" scale for the x-axis (example19.php)

    +

    +

    +
    +

    Figure 15.34. Using "int" scale for the x-axis (example19.1.php)

    Using "int" scale for the x-axis (example19.1.php)

    +
    +

    Figure 15.35. Using "text" scale for the x-axis (example19.php)

    Using "text" scale for the x-axis (example19.php)

    +
    +

    +

    +

    As can be seen in Figure 15.34. Using "int" scale for the x-axis (example19.1.php) the bars have there left + edge aligned with the data value and the tick mark (the tick mark can not be seen + since it is aligned exactly with the left edge of the bar). In contrast using a text + scale in Figure 15.35. Using "text" scale for the x-axis (example19.php) adjusts the alignment of tick marks and + labels in a way that is more commonly used with bar graphs.

    +

    Some other commonly used method to change the appearance of the bar graphs + are

    +

    +

    • +

      BarPlot::SetFillColor($aColor)

      +

      This is used to specify the fill color of the bar. The argument can + also be an array and in that case each color in the array is used for + individual successive bars.

      +
    • +

      BarPlot::SetFillGradient($aFromColor,$aToColor=null,$aStyle=null)

      +

      Specifies a gradient fill style for the bars. See ?? for + details.

      +
    • +

      BarPlot::SetPattern($aPattern, $aColor='black')

      +

      Specifies a pattern to be used to fill the bars. See ?? for + details

      +
    • +

      BarPlot::SetWidth($aWidth)

      +

      Specifies the width of the individual bars. Of this is an integer + value > 1 it is interpretated as the absolute width in pixels. If the + values instead is a real number in the range [0,1] it is interpretated + as the fraction of the width between the tick marks. By default the + width is set to 0.4

      +

    +

    +

    Accumulated bar plots

    + +

    Accumulated bar plots will show several data series stacked on top of each + other in each bar. They are the barplot variant of accumulated area plots as was + discussed previously.

    +

    An accumulated bar plot is made by aggregating one or more basic bar plots in + the container class AccBarPlot as the following code snippet + shows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +
    <?php
    +// Some data
    +$data1y = ...
    +$data2y = ...
    + 
    +// Create two bar plots
    +$b1plot = new BarPlot($data1y);
    +$b1plot->SetFillColor('orange');
    +$b2plot = new BarPlot($data2y);
    +$b2plot->SetFillColor('blue');
    + 
    +// Create the accumulated bar plot
    +$gbplot = new AccBarPlot(array($b1plot,$b2plot));
    + 
    +// Add the accumulated plot to the graph
    +$graph->Add($gbplot);
    +?>

    +

    +

    An example of an accumulated bar plot is shown in Figure 15.36. An accumulated bar plot (example23.php)

    +

    +

    Figure 15.36. An accumulated bar plot (example23.php)

    An accumulated bar plot (example23.php)


    +

    +

    There are some subtleties when it comes to the formatting of the frames a + round each bar in an accumulated bar plots that might be useful to know. The + basic ambiguity that exists is that when we stack the bars on top of each other + to create a new accumulated bar each individual bar has properties that was (or + could) be set when each individual barplot was created like the frame around the + plot.

    +

    For example, take the following basic accumulated bar plot (partial + script)

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +
    <?php
    +// Create the first bar
    +$bplot = new BarPlot($datay1);
    +$bplot->SetFillGradient('AntiqueWhite2','AntiqueWhite4:0.8',GRAD_VERT);
    +$bplot->SetColor('darkred');
    + 
    +// And the second bar
    +$bplot2 = new BarPlot($datay2);
    +$bplot2->SetFillGradient('olivedrab1','olivedrab4',GRAD_VERT);
    +$bplot2->SetColor('darkgreen');
    + 
    +// Join them in an accumulated (stacked) plot
    +$accbplot = new AccBarPlot(array($bplot,$bplot2));
    +$graph->Add($accbplot);
    +?>

    +

    +

    As you can see on line 5 and on line 10 we have set the frame color + differently in the two individual plots. However, the accumulated bar plot also + have a frame color property (and a weight as well) so what shall we use? If we + run a full example based on the lines above the result is shown in Figure 15.37. Accumulated bar with individual frame colors (accbarframeex01.php) below.

    +

    +

    Figure 15.37. Accumulated bar with individual frame colors (accbarframeex01.php)

    Accumulated bar with individual frame colors (accbarframeex01.php)


    +

    +

    As can be seen from the graph the bar around each part has the color on th + frame that was set on the individual bar. There is one exception though. The + line that separates the two bars are shared and will always follow the color of + the top bar.

    +

    If we instead specify a frame for the accbar by adding the lines

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$accbplot = new AccBarPlot(array($bplot,$bplot2));
    +$accbplot->SetColor('red');
    +$accbplot->SetWeight(1);
    +$graph->Add($accbplot);
    +?>

    +

    +

    The result would be as is shown in Figure 15.38. Accumulated bar with unit frame color (accbarframeex02.php) + and the properties of the accumulated bar takes precedence, again with one + exception. The divider lines inside the bar is still controlled by the + individual plot. By default the line weight on the accumulated bar is 0 which + means that it will not be drawn, that is why we have to set a line weight on + line 4 above.

    +

    +

    Figure 15.38. Accumulated bar with unit frame color (accbarframeex02.php)

    Accumulated bar with unit frame color (accbarframeex02.php)


    +

    +

    If we instead were to set the individual line weight to zero, i.e.

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$bplot->SetWeight(0);
    +$bplot2->SetWeight(0);
    +?>

    +

    +

    and keep the overall frame the result would become as shown in Figure 15.39. Setting individual frames to weight=0 (accbarframeex03.php) below

    +

    +

    Figure 15.39. Setting individual frames to weight=0 (accbarframeex03.php)

    Setting individual frames to weight=0 (accbarframeex03.php)


    +

    +
    +

    Grouped bar plots

    + +

    This uses the same principle as accumulated bar plots but instead of stacking + the data series on top of each other they are shown together for the same + x-value.

    +

    These types of bar graph is used to easy group two or more bars together + around each tick (x-value). The bars will be placed immediately beside each + other and as a group centered on each tick mark (or between if a text scale is + used). A grouped bar is created by aggregating two or more ordinary bar plots + and creating a GroupBarPlot +

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +
    <?php
    +// Some data
    +$data1y = ...
    +$data2y = ...
    + 
    +// Create the bar plots
    +$b1plot = new  BarPlot ( $data1y );
    +$b1plot->SetFillColor ( 'orange' );
    + 
    +$b2plot = new  BarPlot ( $data2y );
    +$b2plot->SetFillColor ( 'blue' );
    + 
    +// Create the grouped bar plot
    +$gbplot = new  GroupBarPlot (array( $b1plot , $b2plot ));
    + 
    +// Add it to the graph
    +$graph->Add ( $gbplot ); 
    +?>

    +

    +

    An example of this is shown in Figure 15.40. A grouped bar plot (example21.php)

    +

    +

    Figure 15.40. A grouped bar plot (example21.php)

    A grouped bar plot (example21.php)


    +

    +

    If the SetWidth() method is used on the + GroupBarPlot() it will affect the total width used by all the + added plots. Each individual bar width will be the same for all added bars. The + default width for grouped bar is 70% of the width between the tick marks in the + graph. In Figure 15.41. Adjusting the width of a group bar plot (example22.php) an example where the width is set + to 90% is shown.

    +

    +

    Figure 15.41. Adjusting the width of a group bar plot (example22.php)

    Adjusting the width of a group bar plot (example22.php)


    +

    +

    The number of data points in each data series must be the same. This means + that if there are no available values they should be specified as 0. An example + of this is shown in Figure 15.42. All data series in a grouped bar graph must have the same number of data points (groupbarex1.php)

    +

    +

    Figure 15.42. All data series in a grouped bar graph must have the same number of data points (groupbarex1.php)

    All data series in a grouped bar graph must have the same number of data points (groupbarex1.php)


    +

    +
    +

    Grouped accumulated bar graphs

    + +

    It is perfectly possible to combine the previous bar types to have a grouped + accumulated bar plot. This is done in a similar way by aggregating a number of + accumulated plots in a group bar plot. The following code snippte shows how this + can be done

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    <?php
    +// Create all the 4 bar plots
    +$b1plot = new  BarPlot( $data1y );
    +$b1plot->SetFillColor( "orange" );
    +$b2plot = new  BarPlot( $data2y );
    +$b2plot->SetFillColor( "blue" );
    +$b3plot = new  BarPlot( $data3y );
    +$b3plot->SetFillColor( "green" );
    +$b4plot = new  BarPlot( $data4y );
    +$b4plot->SetFillColor( "brown" );
    + 
    +// Create the accumulated bar plots
    +$ab1plot = new  AccBarPlot(array( $b1plot , $b2plot ));
    +$ab2plot = new  AccBarPlot(array( $b3plot , $b4plot ));
    + 
    +// Create the grouped bar plot
    +$gbplot = new  GroupBarPlot(array( $ab1plot , $ab2plot ));
    + 
    +// Add the combination to the graph
    +$graph->Add( $gbplot ); 
    +?>

    +

    +

    An example of this is shown in Figure 15.43. A grouped accumulated bar graph (example24.php) + below

    +

    +

    Figure 15.43. A grouped accumulated bar graph (example24.php)

    A grouped accumulated bar graph (example24.php)


    +

    +
    +

    Horizontal bar graphs

    + +

    If a large number of values to needs to be display in a bar graph it is often + better to rotated the bar graph 90 degree so that the bars are horizontal + instead. There is no special graph type for this so this is achieved by rotating + a standard vertical bar graph 90 degrees, usually with a call to

    +

    +

    • +

      Graph::Set90AndMargin()

      +

    +

    +

    The orientation of the labels of the axis will be automatically adjusted for + bar graphs. A basic example is shown in Figure 15.44. A basic horizontal bar graph (horizbarex1.php) + below

    +

    +

    Figure 15.44. A basic horizontal bar graph (horizbarex1.php)

    A basic horizontal bar graph (horizbarex1.php)


    +

    +

    The example in Figure 15.45. Using multiple line labels in a horizontal bar graph (horizbarex4.php) shows how to use multiple + lines as labels.

    +

    +

    Caution

    +

    Note that we have to use quotation marks (") and not hyphens (') in + text string where we want to embed a newline character, i.e. "\n"

    +

    +

    +

    +

    Figure 15.45. Using multiple line labels in a horizontal bar graph (horizbarex4.php)

    Using multiple line labels in a horizontal bar graph (horizbarex4.php)


    +

    +
    +

    Adjusting the appearance of bar graphs

    + +

    +

    Adjusting the width and colors

    + +

    The width of each individual bar can be specified in either an absolute + pixel size or as a fraction of the width between the major tick marks. The + method used for this is

    +

    +

    • +

      BarPlot::SetWidth($aWidth)

      +

      If $aWidth is an integer > 1 then it is + interpretated as an absolute width in pixels. If it is a + floating point number in the range [0,1] it will be + interpretated as a fraction of the width between the tick + marks.

      +

    +

    +

    +
    +

    Using gradient fill

    + +

    It is possible to use color gradient fill for the individual bars in the + bar graph.

    +

    Color gradient fill fills a rectangle with a smooth transition between two + colors. In what direction the transition goes (from left to right, down and + up, from the middle and out etc) is determined by the style of the gradient + fill. The library currently supports 8 different styles. All supported + styles are displayed in Figure 15.46. Supported gradient fills for bar plots + below.

    +

    +

    Figure 15.46. Supported gradient fills for bar plots

    + +
    +
    +

    Figure 15.47. GRAD_MIDVER (bargradsmallex1.php)

    Supported gradient fills for bar plots

    +
    +

    Figure 15.48. GRAD_MIDHOR (bargradsmallex2.php)

    Supported gradient fills for bar plots

    +
    +

    Figure 15.49. GRAD_HOR (bargradsmallex3.php)

    Supported gradient fills for bar plots

    +
    +

    Figure 15.50. GRAD_VER (bargradsmallex4.php)

    Supported gradient fills for bar plots

    +
    +

    Figure 15.51. GRAD_WIDE_MIDVER (bargradsmallex5.php)

    Supported gradient fills for bar plots

    +
    +

    Figure 15.52. GRAD_WIDE_MIDHOR (bargradsmallex6.php)

    Supported gradient fills for bar plots

    +
    +

    Figure 15.53. GRAD_CENTER (bargradsmallex7.php)

    Supported gradient fills for bar plots

    +
    +

    Figure 15.54. GRAD_RAISED_PANEL (bargradsmallex8.php)

    Supported gradient fills for bar plots

    +
    +
    +


    +

    +

    To specify a gradient fill for the bar plots you make use of the method + BarPlot::SetFillGradient() . See the class reference for + details of this function.

    +

    +

    Caution

    +

    Gradient filling is computational expensive. Large plots with + gradient fill will take in the order of 6 times longer to fill then + for a normal one-color fill. This might to some extent be helped by + making use of the cache feature of JpGraph so that the graph is only + generated a few times.

    +

    +

    +

    As a final example we show an horizontal bar graph with gradient fill on + both the background and the bars in Figure 15.55. Horizontal bar graph with gradient fill (horizbarex6.php) +

    +

    +

    Figure 15.55. Horizontal bar graph with gradient fill (horizbarex6.php)

    Horizontal bar graph with gradient fill (horizbarex6.php)


    +

    +
    +

    Using pattern fills

    + +

    As an alternative to solid and gradient fill the bars can also have a + number of patterns. This is useful for the case where black and white copies + needs to be printed. The library supports the following nine different + patterns as shown in Figure 15.56. Supported pattern fills for bar plots

    +

    +

    Figure 15.56. Supported pattern fills for bar plots

    + +
    +
    +

    Supported pattern fills for bar plots

    +
    +

    Supported pattern fills for bar plots

    +
    +

    Supported pattern fills for bar plots

    +
    +

    Supported pattern fills for bar plots

    +
    +

    Supported pattern fills for bar plots

    +
    +

    Supported pattern fills for bar plots

    +
    +

    Supported pattern fills for bar plots

    +
    +

    Supported pattern fills for bar plots

    +
    +

    Supported pattern fills for bar plots

    +
    +
    +


    +

    +

    To specify a pattern to be used the following method is used

    +

    +

    • +

      BarPlot::SetPattern($aPattern,$aColor='black')

      +

      $aPattern is one of the symbolic names as shown + in Figure 15.56. Supported pattern fills for bar plots If + $aPattern is an array then each specified + pattern will be used successively for each individual bar. If + there are more bars then pattern specified then pattern used + will be wrapped around.

      +

    +

    +
    +

    Displaying and formatting the value of the bar

    + +

    In the same way as values could be displayed on line plots they can also + be displayed on bar graphs. The formatting options for bar graphs, apart + from the basic font,color and angle, also allows the specification on where + on the bar the values should be displayed. This can be

    +
    • +

      at the bottom of the bar, "bottom"

      +
    • +

      at the middle of the bar, "middle"

      +
    • +

      at the maximum value (but still inside the bar). + "max"

      +
    • +

      at the top of the bar (outside the bar), + "top"

      +

    The position is adjusted with a call to

    +

    +

    • +

      BarPlot::SetValuePos($aPos)

      +

    +

    +

    using one of the above strings as value.

    +

    The value of the bar is enabled and controlled by accessing the "value" + property of the bar plot. The following line will enable the value (this is + done in exactly the same way as for line plots)

    +

    +

    1
    +
    $barplot->value->Show();

    +

    +

    By default the value is displayed at the top of the bar. In the same way + as for line plot it is possible to adjust the formatting of the data labels + by both using a format callback function as well as statically adjusting the + format, for example the angle of the label.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +
    // Callback function
    +function separator1000_usd($aVal) {
    +    return '$'.number_format($aVal);
    +}
    + 
    +// Must use TTF fonts if we want text at an arbitrary angle
    +$bplot->value->SetFont(FF_ARIAL,FS_BOLD);
    +$bplot->value->SetAngle(45);
    +$bplot->value->SetFormatCallback('separator1000_usd');
    + 
    +// Black color for positive values and darkred for negative values
    +$bplot->value->SetColor('black','darkred');
    +$graph->Add($bplot);

    +

    +

    There is one thing to take notice of here. The color of the label can be + different depending on whether the bar has a positive or a negative + value.

    +

    An example of using these formatting options for a bar graph is shown in + Figure 15.57. Using a callback to format the labels on a bar (barscalecallbackex1.php)

    +

    +

    Figure 15.57. Using a callback to format the labels on a bar (barscalecallbackex1.php)

    Using a callback to format the labels on a bar (barscalecallbackex1.php)


    +

    +
    +

    Adding a drop shadow to the bars

    + +

    Each bar can also have a drop shadow. This is enabled by calling

    +

    +

    • +

      BarPlot::SetShadow($aColor="black",$aHSize=3,$aVSize=3,$aShow=true)

      +

      $aColor, The color of the drop shadow

      +

      $aHSize, Horizontal size of the shadow

      +

      $aVSize, Vertical size of the shadow

      +

      $aShow, true = enable the + shadow

      +

    +

    +
    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch15s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch15s03.html new file mode 100755 index 00000000..14868729 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch15s03.html @@ -0,0 +1,71 @@ +Error plot graphs

    Error plot graphs

    + +

    Error plots are used to visually indicate uncertainty in data points. This is done + by specifying both a min and and max value for each data point.

    +

    Before error plots can be used the module "jpgraph_error.php" + must be included.

    +

    The following example illustrates a simple error bar. We will have 5 points, so we + need 10 Y-values. We also would like the error bars to be red and 2 pixels wide. All + this is accomplished by creating an instance of the ErrorPlot class in + much the same way as, for example, a normal line plot.

    +

    +

    Figure 15.58. A basic error plot (example13.php)

    A basic error plot (example13.php)


    +

    +

    There is one displeasing esthetic quality of this graph. The X-scale is just wide + enough to just accompany the number of error bars and hence the first bar is drawn + on the Y-axis and the and last bar just at the edge of the plot area.

    +

    To adjust this we can use the method ErrorPlot::SetCenter() which + will adjust the x-scale so it does not use the full width of the X-axis.

    +

    +

    Figure 15.59. Making use of SetCenter() with error plots (example14.php)

    Making use of SetCenter() with error plots (example14.php)


    +

    +

    +

    Line error plots

    + +

    A variant of the error plot graph is to use an LineErrorPlot + instead. This is almost the same as the ErrorPlot but with the + added feature that each data point also has an middle value which a line is + drawn through. This can be thought of as a line plot combined with an error + plot.

    +

    Since this also uses a line the module "jpgraph_line.php" + must be included in addition to the error module.

    +

    To control the various properties of the line drawn the "line" property of the + error line plot may be accessed. So, for example, to set the line to have weight + of 2 pixels wide and with a blue color the following two lines are needed

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$elplot->line->SetWeight ( 2 );
    +$elplot->line->SetColor ( 'blue' ); 
    +?>

    +

    +

    An example of this is shown in Figure 15.60. A basic Line error plot (example15.php) . We could + now also add a legend to none, one or both of the line types(the plain line + and/or the error bar). So for example if we wanted the legend "Min/Max" for the + red error bars and a legend "Average" for the blue line the following lines + should be added

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$errplot->SetLegend ( 'Min/Max' );
    +$errplot->line->SetLegend ( 'Average' ); 
    +?>

    +

    +

    The result is shown in Figure 15.61. A line error plot with a legend (example16.php)

    +

    +

    +
    +

    Figure 15.60. A basic Line error plot (example15.php)

    A basic Line error plot (example15.php)

    +
    +

    Figure 15.61. A line error plot with a legend (example16.php)

    A line error plot with a legend (example16.php)

    +
    +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch15s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch15s04.html new file mode 100755 index 00000000..aa7deda8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch15s04.html @@ -0,0 +1,104 @@ +Stock graphs

    Stock graphs

    + +

    Stock charts are used to display data values where one is interested in 4 + different values for each data point. This could for example be used to display a + stocks open,close, min and max value during a specific day. Hence the name Stock + chart (or Stock plot).

    +

    Stock plots are created as an instance of class StockPlot so the + module "jpgraph_stock.php" must first be included in the + script.

    +

    Figure 15.62. A stock graph (stockex1.php) illustrates a sample Stock chart plot

    +

    +

    Figure 15.62. A stock graph (stockex1.php)

    A stock graph (stockex1.php)


    +

    +

    For this type of plot the y-data array must be consist of a number of quadruples + of data where each quadruple consists of (open,close,min,max). The open and close + values determine the min max for the middle bar and the min,max determine the end + points of the "error-lines" at the top and bottom of each bar as shown in ??.

    +

    +

    +
    +

    Figure 15.63. Explaining stock graphs

    + +

    + Explaining stock graphs +

    +

    +
    +

    For this type of plot the y-data array must be consist of + a number of quadruples of data where each quadruple consists + of an even number of (open,close,min,max).

    +

    The open and close values determine the min max for the + middle bar and the min,max determine the end points of the + "error-lines" at the top and bottom of each bar as shown in + Figure 15.63. Explaining stock graphs.

    +

    Note that the data follows the rules

    +

    +

    • +

      min < max

      +
    • +

      min < min( open, close )

      +
    • +

      max > max( open, close )

      +

    +

    +
    +

    +

    +

    To separate the two cases where "open > close" or "open < close " two different + colors are used.

    +

    These colors are specified with the method

    +

    +

    • +

      StockPlot::SetColor($aFrame, $aFill='white', + $aFrameNeg='darkred', $aFillNeg='darkred')

      +

      $aFrame, $aFill, The frame and fill color + when open <= close

      +

      $aFrameNeg, $aFillNeg, The frame and fill + color when open > close

      +

    +

    +

    StockPlot::SetColor() method. By default a positive bar (close > + open) have a fill color of white and for the negative case where (close < open) + the bars have a red color.

    +

    The final possible variation of stock plots is the option to determine whether or + not the end point for the min,max lines should have the horizontal line marking the + end of the line or not. This can be adjusted with a call to method

    +

    +

    • +

      StockPlot::HideEndLines($aHide=true)

      +

    +

    +

    Stock plot variant: Boxplot

    + +

    A minor variation of stock charts is the BoxPlot plot type. this + is almost the same as StockPlot but with the very small difference + that in addition to the open,close,min, max values it is also possible to + specify a fifth, median value .

    +

    A box plot is created as in instance of class BoxPlot which is + defined in "jpgraph_stock.php"

    +

    The median lies between the open and close value and is illustrated as a + horizontal line within the bar. An example of this is shown in

    +

    +

    Figure 15.64. A typical boxplot (boxstockex1.php)

    A typical boxplot (boxstockex1.php)


    +

    +

    The color of the median line can be modified with a call to

    +

    +

    • +

      BoxPlot::SetMedianColor($aColor)

      +

    +

    +
    +

    Image maps for Box and Stock charts

    + +

    In the same way as for other plots it is possible to associate an image map + with these plots. The "hot" area for each plot is the mid "bar" section. In the + same way as other plot types the method

    +

    +

    • +

      BoxPlot::SetCSIMTargets($aTargets,$aAlts='',$aWinTargets='')

      +

    +

    +

    is used to set the URL:s for the hot areas

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch15s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch15s05.html new file mode 100755 index 00000000..0db4253e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch15s05.html @@ -0,0 +1,482 @@ +Scatter graphs

    Scatter graphs

    + +

    Scatter plots are used to display a number of data points given by there x- and + y-coordinate. The difference from a line plot is that the x-coordinate must always + be specified. Each point is stroked on the image with a mark as with line plots. The + stroked marks can also be connected with an optional line.

    +

    To use a scatter plot the module "jpgraph_scatter.php" must + first be included in the script.

    +

    +

    Note

    +

    Carefully reviewing the constructor for line plots shows that it also can + accept both a x- and y-array with coordinates. This means that a line plot + can also be used to create a scatter plot. However scatter plots have some + formatting options not available for line plots.

    +

    +

    +

    Even though the normal use of scatter plots is to supply both x- and y-coordinates + it is still perfectly possible to use a text- or int-scale for the x-coordinates to + just enumerate the points (the points will be placed along an imaginary integer + scale). This is especially useful when using the "Impulse" type of scatter plot as + shown below.

    +

    If no x-coordinates are specified each value will be placed at consecutive + x-coordinates [1,2,3,..]

    +

    A scatter plot is constructed by creating an instance of the class + ScatterPlot supplied with the proper arguments, i.e.

    +

    +

    1
    +
    $scatterplot = new ScatterPlot($ydata, $xdata);

    +

    +

    The following example shows a very basic scatter plot

    +

    +

    Example 15.3. A basic scatter plot (scatterex1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +$datax = array(3.5,3.7,3,4,6.2,6,3.5,8,14,8,11.1,13.7);
    +$datay = array(20,22,12,13,17,20,16,19,30,31,40,43);
    + 
    +$graph = new Graph(300,200);
    +$graph->SetScale("linlin");
    + 
    +$graph->img->SetMargin(40,40,40,40);        
    +$graph->SetShadow();
    + 
    +$graph->title->Set("A simple scatter plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$sp1 = new ScatterPlot($datay,$datax);
    + 
    +$graph->Add($sp1);
    +$graph->Stroke();
    + 
    +?>


    Figure 15.65. A basic scatter plot (scatterex1.php)

    A basic scatter plot (scatterex1.php)


    +

    +

    In the same way as we adjusted the look and feel for markers for line plot (see + ??) we can do the same here as shown in Figure 15.66. Adjusting the size and color of the marker (scatterex2.php)

    +

    +

    Figure 15.66. Adjusting the size and color of the marker (scatterex2.php)

    Adjusting the size and color of the marker (scatterex2.php)


    +

    +

    The marks are accessed through the instance variable + ScatterPlot::mark (in complete analogy with line plots)

    +

    Combining marks with a line

    + +

    It is possible to combine the individual data points with a line - a link. The + properties for this link can be accessed by using the instance variable + ScatterPlot::link.In order to enable the link the method + ScatterPlot::link::Show() must first be called.

    +

    +

    Note

    +

    For historical reasons there is also a utility method + ScatterPlot::SetLinkPoints() where links can be enabled and adjusted. + However, this method will be removed in future versions of the + library.

    +

    +

    +

    The properties that can be adjusted are the normal line properties, i.e. + weight, color and line style. The following code snippet shows how to add a link + line with a dotted style drawn in black to scatter plot.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +// Enable the link lines
    +$scatterplot->link->Show();
    + 
    +// Set the properties
    +$scatterplot->link->SetWeigth(1);
    +$scatterplot->link->SetColor('black');
    +$scatterplot->link->SetStyle('dotted');
    +?>

    +

    +

    In Figure 15.67. Combining data points with a dotted line (scatterlinkex3.php) and Figure 15.68. Combining data points with a red line (scatterlinkex4.php) there are two variants of adding a link + line to a scatter plot. For those figures we have also used two of the + predefined scientific axis styles (see Predefined scientific axis setups).

    +

    +

    +
    +

    Figure 15.67. Combining data points with a dotted line (scatterlinkex3.php)

    Combining data points with a dotted line (scatterlinkex3.php)

    +
    +

    Figure 15.68. Combining data points with a red line (scatterlinkex4.php)

    Combining data points with a red line (scatterlinkex4.php)

    +
    +

    +

    +
    +

    Creating impulse (or stem) - plots

    + +

    A variant of scatter plots often used electrical engineering is the stem plot + as shown in Figure 15.56. Supported pattern fills for bar plots

    +

    +

    Figure 15.69. Stem plot (impulsex1.php)

    Stem plot (impulsex1.php)


    +

    +

    This variant of the scatter plot is created by calling the method

    +

    +

    1
    +
    $scatterplot->SetStem();

    +

    +

    Tip

    +

    It is possible to create a stem graphs without any mark by specifying + the mark type as (-1) . That way only the impulse lines will be + drawn.

    +

    In order to adjust the look and feel of the stems the following methods + can be used

    +

    +

    • +

      ScatterPlot::SetWeight($aWeight)

      +
    • +

      ScatterPlot::SetColor($aColor)

      +

    +

    +

    Another example of stem plot is shown in Figure 15.70. Adjusting the overall look and feel for the stem graph (impulsex3.php) + where we have adjusted both the look and feel of the stem plot as well as the + position of the x-axis.

    +

    +

    Figure 15.70. Adjusting the overall look and feel for the stem graph (impulsex3.php)

    Adjusting the overall look and feel for the stem graph (impulsex3.php)


    +

    +

    There is also another complex impulse example shown in Figure 14.58. Adding a static line at y=0 to simulate an extra 0-axis (impulsex4.php) where we have used a PlotLine to + create a "virtual" x-axis.

    +
    +

    Field plots

    + +

    A variant of scatter plot is the so called Field Plots.

    +

    This is basically a scatter plot where each scatter point is an arrow with a + direction between 0 to 359 degrees. This effectively allows the visualization of + 3 parameters at each point (x,y and angle).

    +

    A field plot is created as an instance of class FieldPlot with + three argument

    +

    +

    • +

      an array of y-coordinates

      +
    • +

      an array of x-coordinates

      +
    • +

      an array of angles

      +

    +

    +

    as the following code snippet shows

    +

    +

    1
    +
    $fieldplot = new FieldPlot($datay, $datax, $angle);

    +

    +

    The size and color of each arrow in the field plot is controlled by accessing + the property FieldPlot::arrow and using the two methods

    +

    +

    • +

      FieldPlot::arrow->SetSize($aSize,$aArrowSize=2)

      +

      $aSize, Specifies the length (in pixels) of the + arrow

      +

      $aArrowSize, The arrow size is specified as an + integer in the range [0,9]. The possible arrow sizes are shown in + Figure 15.71. Possible sizes of arrow heads for field plots.

      +

      +

      Figure 15.71. Possible sizes of arrow heads for field plots

      + +
      Possible sizes of arrow heads for field plots
      +


      +

      +
    • +

      FieldPlot::arrow->SetColor($aColor)

      +

      The color of the arrow

      +

    +

    +

    Another way to individually format each arrow is to use a callback method. The + callback method must have three arguments x- , y-coordinates and angle. The + callback method must return an array with three elements (color,size,arrow + size). The callback method is specified by calling

    +

    +

    • +

      FieldPlot::SetCallback($aFunc)

      +

    +

    +

    Figure 15.72. A field plot (fieldscatterex1.php) shows a field plot with a callback + function.

    +

    +

    Figure 15.72. A field plot (fieldscatterex1.php)

    A field plot (fieldscatterex1.php)


    +

    +
    +

    Balloon plots

    + +

    This is a variant of scatter plot where each data point is a filled circle and + the size of the circle is dynamically adjusted. This makes it possible to + display three values at each data point (x,y,"size"). There is no need for a + specific plot type for this since these types of plots can be constructed with + an ordinary scatter plot and a mark formatting callback.

    +

    In order to specify a callback for the marks the following method is + used

    +

    +

    • +

      ScatterPlot::mark::SetCallbackYX($aFunction)

      +

      The argument for the callback function is y- and x-value for the + data point. The return value should specify the format of the marker + as an array of (width, border_color, + fill_color, filename, image scale). All values must + be included.

      +

    +

    +

    We can now create a balloon plot as follows.

    +

    +

    1. +

      Create a data array that specifies the data including both x- and + y-coordinate, color and size of the filled circle. For example + as:

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +
      $data = array(
      +    array(1,12,10,'orange'),
      +    array(3,41,15,'red'),
      +    array(4,5,19,'lightblue'),
      +    array(5,70,22,'yellow')
      +);

      +

      +
    2. +

      We must now convert this to some suitable data for a scatter plot. + The only thing to keep in mind is that we need to share the data + with the callback function and for that purpose we store the + formatting data in an external array indexed by the x,y-value.

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +
      $n = count($data);
      +for( $i=0; $i < $n; ++$i ) {
      +    
      +    $datax[$i] = $data[$i][0];
      +    $datay[$i] = $data[$i][1];
      + 
      +    
      +    $format[ strval($datax[$i]) ][ strval($datay[$i]) ] = array( $data[$i][2], $data[$i][3] );
      +    
      +}

      +

      +

      The callback function can now be specified as

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +
      function FCallback($aYVal,$aXVal) {
      +    // We need to access the global format array
      +    global $format;
      +    return array($format[ strval($aXVal) ][ strval($aYVal) ][0],'',
      +                 $format[ strval($aXVal) ][ strval($aYVal) ][1],'','');
      +}

      +

      +

      The callback function will now return the format value (size and + color) we specified originally depending on the x,y - coordinate. + The callback function can be installed with a call to

      +

      +

      1
      +
      $sp1->mark->SetCallbackYX('FCallback');

      +

      +
    3. +

      The final step is to create an ordinary scatter plot with a marker + that is specified as a filled circle

      +

      +

      1
      +2
      +
      $sp1 = new ScatterPlot($datay,$datax);
      +$sp1->mark->SetType(MARK_FILLEDCIRCLE);

      +

      +

    +

    +

    As an optional additions we can also enable the display of the values at each + data point by calling

    +

    +

    1
    +2
    +
    $sp1->value->Show();
    +$sp1->value->SetFont(FF_FONT1,FS_BOLD);

    +

    +

    Putting all these together gives the result shown in Figure 15.73. Using format callback to create a balloon plot (balloonex2.php)

    +

    +

    Figure 15.73. Using format callback to create a balloon plot (balloonex2.php)

    Using format callback to create a balloon plot (balloonex2.php)


    +

    +
    +

    Creating Geo-maps

    + +

    Geo-maps (a.k.a. Geo-charts, push-pin graphs) is used to illustrate locations + around the world by putting markers on a flat projection of the earth. A Geo-map + is done by adding a Worldmap background to a standard scatter graph. The library + includes a suitable background in the "Examples/" directory + "wordmap1.jpg". This can then be done as the following + example shows

    +

    +

    Example 15.4. An example with geo maps (pushpinex1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +DEFINE('WORLDMAP','worldmap1.jpg');
    + 
    +function markCallback($y,$x) {
    +    // Return array width
    +    // width,color,fill color, marker filename, imgscale
    +    // any value can be false, in that case the default value will
    +    // be used.
    +    // We only make one pushpin another color
    +    if( $x == 54 ) 
    +    return array(false,false,false,'red',0.8);
    +    else
    +    return array(false,false,false,'green',0.8);
    +}
    + 
    +// Data arrays
    +$datax = array(10,20,30,40,54,60,70,80);
    +$datay = array(12,23,65,18,84,28,86,44);
    + 
    +// Setup the graph
    +$graph = new Graph(400,270);
    + 
    +// We add a small 1pixel left,right,bottom margin so the plot area
    +// doesn't cover the frame around the graph.
    +$graph->img->SetMargin(1,1,1,1);
    +$graph->SetScale('linlin',0,100,0,100);
    + 
    +// We don't want any axis to be shown
    +$graph->xaxis->Hide();
    +$graph->yaxis->Hide();
    + 
    +// Use a worldmap as the background and let it fill the plot area
    +$graph->SetBackgroundImage(WORLDMAP,BGIMG_FILLPLOT);
    + 
    +// Setup a nice title with a striped bevel background
    +$graph->title->Set("Pushpin graph");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);
    +$graph->title->SetColor('white');
    +$graph->SetTitleBackground('darkgreen',TITLEBKG_STYLE1,TITLEBKG_FRAME_BEVEL);
    +$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'blue','darkgreen');
    + 
    +// Finally create the scatterplot
    +$sp = new ScatterPlot($datay,$datax);
    + 
    +// We want the markers to be an image
    +$sp->mark->SetType(MARK_IMG_PUSHPIN,'blue',0.6);
    + 
    +// Install the Y-X callback for the markers
    +$sp->mark->SetCallbackYX('markCallback');
    + 
    +// ...  and add it to the graph
    +$graph->Add($sp);    
    + 
    +// .. and output to browser
    +$graph->Stroke();
    + 
    +?>


    Figure 15.74. An example with geo maps (pushpinex1.php)

    An example with geo maps (pushpinex1.php)


    +

    +

    Another example of using worldmaps with Pie graphs is shown in Adding background images to Pie graphs

    +

    +

    Note

    +

    The library does not include any conversion utility to/from + Longitude/Latitude to UTM coordinates that could be used to + automatically position data marks on the Mercator projection map. The + options to stretch and scale the worldmap would make it rather + cumbersome to create a accurate conversion. For a good overview on this + kind of translation see Converting + Latitude/Longitude to Universal Transverse Mercator + (UTM)

    +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch15s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch15s06.html new file mode 100755 index 00000000..89aa8ff6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch15s06.html @@ -0,0 +1,436 @@ +Contour graphs

    Contour graphs

    + +

    In order to create Radar graphs the module + "jpgraph_contour.php" must first be included.

    +

    +

    Note

    +

    The Pro-version (>= v3.1) also includes a module + "jpgraph_contourf.php" which is also supports + filled contour plots as well as labelling in the plots of the isobar lines. + The pro-version also uses a more advanced adaptive-mesh algorithm that give + better resolution without manual interpolation of the original data. Both + triangular and rectangular interpolation meshes are supported. The filled + contour is described in Chapter 23. Filled contour graphs +

    +

    +

    +

    Contour plots are used to plot the isobar lines (height curves) of a three + dimensional (3D) graph. The contour plot itself is only a two-dimensional plot and + looks like an ordinary topographic map. An example of a contour graph is shown in + Figure 15.75. A basic contour graph (basic_contourex01.php)

    +

    +

    Figure 15.75. A basic contour graph (basic_contourex01.php)

    A basic contour graph (basic_contourex01.php)


    +

    +

    A contour graph is both similar and different from other types x-y graphs.

    +

    +

    • +

      A contour graph uses the standard x-y class Graph as + basic graph canvas

      +
    • +

      A contour graph has all the standard graph formatting options

      +
    • +

      The legend is automatically generated

      +
    • +

      The input data is a matrix and not an array

      +

    +

    +

    There are primarily four main parameters that can be used to control the apparency + of the contour plots

    +

    +

    1. +

      the number of isobar lines, by + default 10 isobar lines are used

      +
    2. +

      the level of data grid interpolating, + i.e. to give the appearance of smoother isobar lines it is possible to + tell the library to create a number of intermediate points between the + given points in the input data matrix. It is important to note that this + does not create any further real information it only creates smoother + lines under the assumption that it is valid to assume linear + interpolation between the original data points.

      +

      The level of interpolation is specified as an integer in the practical + range 1 to 5. A level of 1 corresponds to just keeping the original + data, a level of 2 corresponds to subdividing the original data points + in two, i.e. one extra interpolated points is created in both x- and + y-direction and so on. A level of 3 corresponds to further sub-divding + the level 2 matrix one more time.

      +

      Even though it is theoretically possible to use an arbitrary + interpolation factor the library does not allow an interpolation factor + larger than 5. The reason is purely computational since the total number + of data points increases very quickly.

      +

      For example if the original grid has size 10x10 (=100 data points) + interpolating this grid with a factor of 5 will generate a new matrix of + size 145x145 (=21025 data points).

      +
    3. +

      flip around the Y-axis. By default + the first row in the input matrix corresponds to y=0, however this also + means that the plotted contour will be flipped compared with the input + matrix since y=0 is at the bottom of the graph. If for visual appearance + reason one wants the input data matrix to have the same orientation as + the resulting graph it is possible to have the library interpret the + last row in the input data matrix as y=0 instead

      +
    4. +

      the color of the isobar lines. By + default they will be assigned from the natural color spectra with pure + dark blue corresponding to the lowest point in the plot and pure red + corresponding to the highest isobar.

      +

    +

    +

    The remaining possibilities to adjust the appearance of the contour plot + corresponds to the standard ways of changing the layout of the graph, for example + adding titles, adjusting colors and changing the type of axis to be + displayed.

    +

    The scale of the contour plot is by default the natural scale, i.e. the points are + assumed to be numbered (0..n) where n is the number of points in the corresponding + direction and also corresponds to each entry in the input data matrix.

    +

    Input data for contour graphs

    + +

    The input data to a contour graph is a matrix. The value at each entry in the + matrix represents the heights at the specified (row,col) in the matrix. In all + of our example we will use the following data matrix

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php
    +$data = array(
    +            array (0.5,1.1,1.5,1,2.0,3,3,2,1,0.1),
    +            array (1.0,1.5,3.0,5,6.0,2,1,1.2,1,4),
    +            array (0.9,2.0,2.1,3,6.0,7,3,2,1,1.4),
    +            array (1.0,1.5,3.0,4,6.0,5,2,1.5,1,2),
    +            array (0.8,2.0,3.0,3,4.0,4,3,2.4,2,3),
    +            array (0.6,1.1,1.5,1,4.0,3.5,3,2,3,4),
    +            array (1.0,1.5,3.0,5,6.0,2,1,1.2,2.7,4),
    +            array (0.8,2.0,3.0,3,5.5,6,3,2,1,1.4),
    +            array (1.0,1.5,3.0,4,6.0,5,2,1,0.5,0.2));
    +?>

    +

    +

    By default the entry (0,0), i.e. row=0, col=0 will be positioned at graph + position (0,0), i.e. the lower left corner. Since this will represent an + inverted image compare to the data matrix. In order to have the graph oriented + in the same way as the data matrix, i.e. entry (0,0) positioned in the top left + corner the method

    +

    +

    • +

      ContourPlot::SetInvert($aFlg=true)

      +

    +

    +

    In order to get a smooth contour plot it is necessary to have adequate number + of data points. What consists "adequate" number depends on the overall graph + size. The larger graph the more points are needed. To help crate smooth contour + plot the library offers automatic linear interpolation to specified depth. It is + important to note that this does not increase the accuracy. It merely creates + artificial point to draw smoother curves. This technique is described in detail + in Understanding mesh interpolation

    +

    Tip

    +

    If the data for the matrix is available in a file a convinient way to get + hold of the dat in the file is to use the utility class + ReadFileData to get hold of the data using the method + ReadFileData::FromMatrix($aFile,$aSeparator=' ') which read the + matrix from a file. Each row of the matrix must be a separate line and each + cell is separated with the character specified as the second argument. By + default a space is used as separator. All values read back are converted to + floating point numbers (double precision). The following short example shows + how easy this is to use

    +

    +

    1
    +
    $data = ReadFileData::FromMatrix('matrixdata.txt');

    +

    +
    +
    +

    Creating a contour graph

    + +

    Figure 15.75. A basic contour graph (basic_contourex01.php) shows the most basic contour plot. + This is crated by first instantiating a graph and then creating an instance of + class ContourPlot which is added to the graph.

    +

    The constructor for class ContourPlot has the following + signature

    +

    +

    • +

      ContourPlot::__construct($aDataMatrix, $aIsobar=10, + $aFactor=1, $aInvert=false, + $aIsobarColors=array())

      +

      $aDataMatrix, The input data

      +

      $aIsobar, The number of isobars if the argument is an + integer or an array specifying the exact locations of each isobar if + the argument is an array

      +

      $aFactor, Grid interpolation factor

      +

      $aInvert, Invert the data matrix so the matrix entry + (0,0) corresponds to the top left corner

      +

      $aIsobarColors, Optional specification of isobar + colors

      +

    +

    +

    This means that the common structure to create a basic contour plot will + be

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php
    +$data = array ( array ( ... ) );
    + 
    +// Basic contour graph
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intint');
    + 
    +// Adjust the margins to fit the margin
    +$graph->SetMargin(30,100,40,30);
    + 
    +// Setup
    +$graph->title->Set('Basic contour plot');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// A simple contour plot with default arguments (e.g. 10 isobar lines)
    +$cp = new ContourPlot($data);
    + 
    +// Display the legend
    +$cp->ShowLegend();
    + 
    +$graph->Add($cp);
    +?>

    +

    +

    Since the most common format for contour graphs is to show axis on all sides + we should add the line

    +

    +

    1
    +
    $graph->SetAxisStyle(AXSTYLE_BOXOUT);

    +

    +

    to our previous example so we get the effect shown in Figure 15.76. Adding axis on all sides (basic_contourex02.php) . To show the effect of flipping the + data around the center line we have to add the following line

    +

    +

    1
    +
    $cp->SetInvert();

    +

    +

    and get the result of adding this line is shown in Figure 15.77. Flipping the data around the center line (basic_contourex05.php)

    +

    +

    +
    +

    Figure 15.76. Adding axis on all sides (basic_contourex02.php)

    Adding axis on all sides (basic_contourex02.php)

    +
    +

    Figure 15.77. Flipping the data around the center line (basic_contourex05.php)

    Flipping the data around the center line (basic_contourex05.php)

    +
    +

    +

    +
    +

    Adjusting the color and number of isobar lines

    + +

    As mentioned above the library uses 10 isobar lines by default. The number of + isobar lines can be adjusted by specifying a second integer argument to the + constructor of the contour plot. For example to use only 5 isobar lines the + construction of the contour plot would be changed to

    +

    +

    1
    +
    $contourplot = new ContourPlot($data,5);

    +

    +

    The result of changing this in the previous example is shown in Figure 15.78. Using only 5 isobar lines (basic_contourex04.php)

    +

    +

    Figure 15.78. Using only 5 isobar lines (basic_contourex04.php)

    Using only 5 isobar lines (basic_contourex04.php)


    +

    +

    The values for the isobars are determined by finding the lowest and highest + point in the input data matrix and then spreading the isobars evenly between + these extreme points.

    +

    In some applications however it is necessary to have better control over where + exactly the isobars are placed and for this reason it is possible to tell the + library exactly at what values the isobars should be.

    +

    This is done by providing an array with the values of the isobars instead of a + single number in the creation of the contour plot as the following example + shows

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$isoBars = array( 0.1,  0.2,  0.3,  0.4,  0.5,  0.6 )
    +$cp = new ContourPlot($data, $isoBars); 
    +?>

    +

    +

    The isobar colors can be adjusted by specifying a color array that specifies + the color for each isobar.

    +

    However, there is some simpler changes that ca be made to change the colors + without having to go through the "trouble" of såspecifying a color array.

    +

    There are usually two reasons for changing the default color spectra.

    +

    +

    1. +

      to use more high contrast colors

      +
    2. +

      to use only black and white colors

      +

    +

    +

    This can be accomplished with a call to the method

    +

    +

    • +

      ContourPlot::UseHighContrastColor($aFlg=true,$aBW=false) +

      +

    +

    +

    as the following example shows

    +

    +

    1
    +2
    +
    $cp = new  ContourPlot( $data );
    +$cp->UseHighContrastColor( true );

    +

    +

    The above example will only use a blue to red color scale and avoid the + "low-contrast" greenish middle color spectrum colors.

    +

    By also setting the second argument to the high contrast method to true the + colors are restricted to only black and white. This will of course make it + impossible to exactly know the value each isobar represents but could be useful + for gaining some insight in the topography of a graph and would allow better + printing on black and white devices.

    +

    Specifying manual colors of the isobar can be done in two ways.

    +

    +

    1. +

      By specifying the color array as the fifth argument to the + constructor of ContourPlot as shown in Creating a contour graph

      +
    2. +

      By using the method + ContourPlot::SetIsobarColors($aColors)

      +

    +

    +

    +

    Caution

    +

    The number of colors specified must match the number of + isobars.

    +

    +

    +
    +

    Understanding mesh interpolation

    + +

    As mentioned above it is possible to use mesh interpolation to generate + smoother contour graphs. In order to better understand the effect of specifying + different interpolation factors we will show how what effect this have.

    +

    The data we will be using is given by the following data matrix

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    $data = array(
    +            array ( 12,7,3,15 ),
    +            array ( 18,5,1, 9 ),
    +            array ( 13,9,5,12),
    +            array (  5,3,8, 9 ),
    +            array (  1,8,5, 7 ));

    +

    +

    A basic contour graph using the above data is shown in Figure 15.79. Interpolation factor=1 (basic_contourex03-1.php)

    +

    +

    Figure 15.79. Interpolation factor=1 (basic_contourex03-1.php)

    Interpolation factor=1 (basic_contourex03-1.php)


    +

    +

    In order to specify a grid interpolation factor we need to specify this as the + third argument in the constructor for the contour plot. So in order to specify a + interpolation factor of 2 we would add the line

    +

    +

    1
    +
    $contourplot = new ContourPlot($data,10,3);

    +

    +

    To see the difference between different interpolation factor Figure 15.80. Interpolation factor=2 (basic_contourex03-2.php) and Figure 15.81. Interpolation factor=3 (basic_contourex03-3.php) shows the effect of using both a + grid interpolation factor of 2 and 3 on the example in Figure 15.79. Interpolation factor=1 (basic_contourex03-1.php)

    +

    +

    +
    +

    Figure 15.80. Interpolation factor=2 (basic_contourex03-2.php)

    Interpolation factor=2 (basic_contourex03-2.php)

    +
    +

    Figure 15.81. Interpolation factor=3 (basic_contourex03-3.php)

    Interpolation factor=3 (basic_contourex03-3.php)

    +
    +

    +

    +

    We can now make two observations based on the above two figures

    +

    +

    1. +

      The lines get smoother the higher interpolation factor we + use

      +
    2. +

      The automatic scale has changed. This is not surprising since we + have in effect increase the number of data points each time we + increase the interpolation factor. The scale corresponds to the + matrix size (an entry in matrix at position (r,c) corresponds to the + point (x=c,y=r) in the graph.)

      +

      Initially we had a data matrix of size 5x4=20 data points, after + doing one interpolation (factor=2) the data matrix will have a size + of 9x7=63 data points and after doing one more interpolation + (factor=3) the data matrix will have a size of 17x13=221 data + points.

      +

      If we would have done one more interpolation we would have a data + matrix of size 33x25=825 data points.

      +

      The exponential growth of the total number of data point for a + 10x10 matrix is shown in Figure 15.82. The exponential growth of the data size due to grid interpolation factor (interpolation-growth.php) . This also makes a good + example of using a logarithmic y-scale. If the graph is a straight + line when plotted against a logarithmic scale this confirms our + suspicion that this is indeed a exponentially growing function. + Figure 15.83. The exponential growth of the data size due to the grid interpolation factor (log scale) (interpolation-growth-log.php) shows a + variant with a logarithmic y-scale (which confirms our + suspicion.)

      +

    +

    +

    Tip

    +

    The helper class to do the actual interpolation can also be used directly + in other context. In order to create a new interpolated data matrix with a + specific interpolation factor the following code snippet can be used.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$dataMatrix = array( ... );
    +$factor = ... ;
    +$grid_interpolate = new Interpolate();
    +$dataMatrix = $grid_interpolate->Linear($dataMatrix, $factor);
    +?>

    +

    +
    +

    +

    Tip

    +

    There is also a utility function + doMeshInterpolate(&$aData,$aFactor) that can be + sued to interpolate a matrix in place. This creates the necessary class, + interpolates its first argument and then fills the argument with the + interpolated data. By using call by reference some data copying is + avoided.

    +

    +

    +

    +

    +
    +

    Figure 15.82. The exponential growth of the data size due to grid interpolation factor (interpolation-growth.php)

    The exponential growth of the data size due to grid interpolation factor (interpolation-growth.php)

    +
    +

    Figure 15.83. The exponential growth of the data size due to the grid interpolation factor (log scale) (interpolation-growth-log.php)

    The exponential growth of the data size due to the grid interpolation factor (log scale) (interpolation-growth-log.php)

    +
    +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch15s07.html b/Societes/ric/jpgraph/docs/chunkhtml/ch15s07.html new file mode 100755 index 00000000..aef09f4e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch15s07.html @@ -0,0 +1,61 @@ +Combining several different plot types in the same graph

    Combining several different plot types in the same graph

    + +

    It is perfectly legal to add several different plot types to the same graph. For + example to mix a line plot with a filled area plot. The different plots will be + stroked to the graph in the order they are added. This means that the plot (data + series) that should always be visible should be added last. In the example with the + filled area and a line the line should probably be added last since it otherwise + most likely will be overwritten by the filled area plot.

    +

    In Figure 15.84. Mixing a line and area plot in the same graph (example16.1.php) a basic example is shown where we have + combined a line plot with an area plot.

    +

    +

    Figure 15.84. Mixing a line and area plot in the same graph (example16.1.php)

    Mixing a line and area plot in the same graph (example16.1.php)


    +

    +

    As can be seen from looking at the source to the example in Figure 15.84. Mixing a line and area plot in the same graph (example16.1.php) there is nothing special in doing this other + then to remember to include all necessary header files. So to add and mix scatter, + line, error and stock graphs are pretty straightforward.

    +

    However, when it comes to mixing bar plots and lines (or area plot) there is a + complication. By default bar plots are centered between the tick marks since this is the standard way of displaying + bar graphs since they normally have no specific x-scale. The bars are just in an + ordered sequence.

    +

    Let's just see what happens if we create a basic bar with a text scale on the + x-axis and then also add a line plot to the same graph.

    +

    +

    Figure 15.85. Mixing a line and bar plot in the same graph (example16.3.php)

    Mixing a line and bar plot in the same graph (example16.3.php)


    +

    +

    As can be seen from Figure 15.85. Mixing a line and bar plot in the same graph (example16.3.php) the line is adjusted so + that each data point on the line coincides with the left edge of the barplot and the + bars are still positoined in the middle of the tick marks as could be expected. This + is the default behavior when combining a barplot with one of the other linear + plots.

    +

    If we instead wanted the line to be centered in the barplot (when using a text + scale) we would have to tell the line plot to position itself in the middle of the + bars with the method

    +

    +

    • +

      LinePlot::SetBarCenter()

      +

    +

    +

    Using this method would then give the result shown in Figure 15.86. Centering the line plot in the middle of the bar (linebarcentex1.php) below

    +

    +

    Figure 15.86. Centering the line plot in the middle of the bar (linebarcentex1.php)

    Centering the line plot in the middle of the bar (linebarcentex1.php)


    +

    +

    Please note that the above discussion is only valid when using a text scale. if we + instead would use (for example) an integer scale then both the bar and the line + would be positioned at the exact scale values (i.e. both bars and lines would be + left aligned) as can be seen in Figure 15.87. Mixing bar and line using an integer x-scale (example16.4.php)

    +

    +

    Figure 15.87. Mixing bar and line using an integer x-scale (example16.4.php)

    Mixing bar and line using an integer x-scale (example16.4.php)


    +

    +

    +

    Note

    +

    As can be seen in Figure 15.87. Mixing bar and line using an integer x-scale (example16.4.php) it is possible to + manually set the scale labels even if we use a linear scale like an integer + scale. We only have to keep in mind that we ned to supply labels for all the + scale labels and not just the one that are shown in case the scale is fro + example only displaying a label on every second tick.

    +

    +

    +

    An example on how to combine a scatter plot and a line plot is shown in Linear regression analysis where a linear regression + analysis is done.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch15s08.html b/Societes/ric/jpgraph/docs/chunkhtml/ch15s08.html new file mode 100755 index 00000000..2327a911 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch15s08.html @@ -0,0 +1,335 @@ +Creating several graphs in the same image

    Creating several graphs in the same image

    + +

    There are at least two reasons why one or several graphs should be combined into + the same image.

    +
    • +

      To be able to create overall graphs that are strongly connected and + cannot be separated

      +
    • +

      To reduce the download time by only have to download one image for + several graphs

      +
    • +

      By convention, some types of graphs are always combined

      +

    The library provides a convenience class , class MGraph + (for Multi Graph) that assists with this. In order to use this class the module file + "jpgraph_mgraph.php" must be included.

    +

    Figure 15.88. A combination of a line graph at top and a bar graph in the bottom (combgraphex1.php) shows an example of how this can be + used.

    +

    +

    Figure 15.88. A combination of a line graph at top and a bar graph in the bottom (combgraphex1.php)

    A combination of a line graph at top and a bar graph in the bottom (combgraphex1.php)


    +

    +

    Creating a combined graph

    + +

    In order to better understand what is involved in creating a combined graph we + will first show how this is done manually.

    +

    This is done by creating some PHP/GD code that creates a big enough empty + image with plain GD commands and then get the image handles from the graphs that + should be combined. The image handel can be returned from the + Graph::Stroke() methods in the graphs that should be included. + It is then possible to use these handles together with the GD image copy command + and copy the individual graph images onto the previously created empty large GD + image.

    +

    The following (almost complete) code shows how this can be done

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +
    <?php
    +// Assume we would like to combine graph1,2 and 3
    +// ...... create graph 1 here.......
    +$handle1 =  $graph1->Stroke( _IMG_HANDLER);
    + 
    +// ...... create graph 2 here.......
    +$handle2 =  $graph2->Stroke( _IMG_HANDLER);
    + 
    +// ...... create graph 3 here.......
    +$handle3 =  $graph3->Stroke( _IMG_HANDLER);
    + 
    + 
    +// Now create the "melting graph" which should contain all three graphs
    +// $WIDTH1 and $HEIGHT1 are width and height of graph 1 ($handle1)
    +// $WIDTH2 and $HEIGHT2 are width and height of graph 2 ($handle2)
    +// $WIDTH3 and $HEIGHT3 are width and height of graph 3 ($handle3)
    +// $x2,$x3 and $y2,$y3 shift from top left of global graph (ie position of 
    +// graph2 and graph3 in global graph)
    + 
    +$image = imagecreatetruecolor($WIDTH1,$HEIGHT1);
    +imagecopy($image, $handle1,0, 0, 0, 0, $WIDTH1,$HEIGHT1);
    +imagecopy($image, $handle2,$x1,$y1,0,0,$WIDTH2,$HEIGHT2);
    +imagecopy($image, $handle3,$x2,$y2,0,0,$WIDTH3,$HEIGHT3);
    + 
    +// Stream the result back as a PNG image
    +header("Content-type: image/png");
    +imagepng ($image);
    +?>

    +

    +

    The advantages with this fully manual method are

    +

    +

    • +

      Absolute full control on a pixel level how the graphs are + combined

      +
    • +

      Full transparency on how the combination is done

      +

    +

    +

    but on the other hand the disadvantages are

    +

    +

    • +

      Requires knowledge of the GD library

      +
    • +

      Requires re-inventing the wheel (since a lot of functionality to + manipulate the GD library is already available in the JpGraph + library)

      +

    +

    +

    It is here the class MGraph comes in. It will allow you to very + easily create a combination of several graphs without knowing all the details on + the GD library or calculating pixel positions.

    +

    This helper class abstracts away all the details about copying images as well + as offering consistent interface (almost identical with the standard Graph + class). A basic example will quickly reveal the elegance of using this helper + class.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +
    <?php
    +//--------------------------------------
    +// Graph 1
    +//--------------------------------------
    +$graph1 = new Graph(...);
    + 
    +//... [Code to create graph1] ...
    + 
    +//--------------------------------------
    +// Graph 2
    +//--------------------------------------
    +$graph2 = new Graph(...);
    + 
    +//... [Code to create graph2] ...
    + 
    +//--------------------------------------
    +// Create a combined graph
    +//--------------------------------------
    +$mgraph = new MGraph();
    +$xpos1=3;$ypos1=3;
    +$xpos2=3;$ypos2=200;
    +$mgraph->Add($graph1,$xpos1,$ypos1);
    +$mgraph->Add($graph2,$xpos2,$ypos2);
    +$mgraph->Stroke();
    +?>

    +

    +

    The above example illustrates the most basic usage of the MGraph + class.

    +

    Each graph is added to the combined graph with a call to + MGraph::Add() which in addition to the graph argument also + takes the target X and Y coordinates where the graph will be placed in the + combined image. The target X and Y coordinates are relative to any optional + specified left and top margin.

    +

    In addition to adding graphs there are some basic formatting option for the + combined graph that are listed below. The core methods provided by the + MGraph class are

    +

    +

    • +

      MGraph::MGraph($aWidth,$aHeight).

      +

      Create a new instance of the MGraph class. If the + width and height are supplied as arguments they will override the + automatically determined width and height.

      +
    • +

      MGraph::Add($aGraph,$aToX,$aToY,$aFromX,$aFromY,$aWidth,$aHeight). +

      +

      Add a new subgraph with destination position + ($aToX,$aToY). By default the whole graph image is + used. It is also possible to only specify that part of the graph + should be used. The source rectangle is specified by ($aFromX, + $aFromY, $aWidth, $aHeight).

      +
    • +

      MGraph::SetFillColor($aColor).

      +

      Background color of the combined graphs.

      +

      Example: Setting an Orange background

      +

      +

      1
      +
      $mgraph->SetFillColor('orange');

      +

      +
    • +

      MGraph::SetFrame($aShow,$aColor,$aWeight)

      +

      Adding a frame to the combined graph.

      +

      Example: To add a blue frame with a 2 pixel width

      +

      +

      1
      +
      $mgraph->SetFrame(true,'blue ',2);

      +

      +
    • +

      MGraph::SetMargin($aLeft,$aRight,$aTop,$aBottom)

      +

      Adding a margin to the image. By default the minimum necessary + size for the combined graph to hold all the added subgraphs is used. + Use this method to add some space to the edges around the combined + image. When the individual graphs are positioned (in the + Add() method) the position is counted relative to + the left and top margin.

      +

      Example: Use 10 pixel left and right margin, 5 pixel top and + bottom margin

      +

      +

      1
      +
      $mgraph->SetMargin(10,10,5,5);

      +

      +
    • +

      MGraph::SetShadow($aShowShadow=true,$aShadowWidth=4,$aShadowColor='gray@0.3')

      +

      This adds a drop shadow to the MGraph in the same way as for the + usual graph class

      +

    +

    +

    In the same way as the ordinary Graph class the MGraph class also + have a property $footer which allows the setting of a left, center and right + footer (see Adding a footer to the graph).

    +

    In addition the MGraph::Stroke() accepts a filename in the same + way as the normal Graph::Stroke()

    +
    +

    Adding background images

    + +

    In addition to the basic usage as shown above it is also possible to add a + background image in the combined graph. What is important to remember then is + that all the subgraphs are copied onto the combined graph so normally they will + be on top of the background image and hide it.

    +

    There are two ways of handling a background image

    +

    +

    1. +

      Do nothing and the background image will only "shine through" for + those areas of the combined graph that is not covered by any + subgraph.

      +
    2. +

      Specify a "blend" factor for the subgraphs that specifies how much + of the background image will be mixed with the subgraph. The blend + factor is as usual specified as an integer in the interval 0-100. + (Note: This is the same functionality as the standard + Graph::SetBackgroundImageMix() for ordinary + graphs.) A value of 0 means that 100% of the background is visible + and a value of 100 means that 0% of the background is visible.

      +

      To add a subgraphs with a blend factor the method + MGrahp::AddMix() is used. This behaves exactly as + the standard MGraph::Add() apart from the fact that the + 3:rd argument is the blend factor (after the two x and y + coordinates).

      +

      Example: Add a graph with 50% mix of the background

      +

      +

      1
      +
      $mgraph->AddMix($graph,0,0,50);

      +

      +

    +

    +

    The background image itself is added with the method

    +

    +

    • +

      MGraph::SetBackgroundImage($aFile,$aCenter_aX=TRUE,$aY=NULL) +

      +

    +

    +

    The filename specifies the full name of the background image (including + extension). Please note that the extension must be a valid image extension in + order for the library to determine the format of the image file.

    +

    The second argument can be either numeric or a boolean in which case it + specifies if the background image should be centered or if it should just be + copied from the top left position. If it is numerical it is interpretated as the + X-position for the optional X and Y coordinates specifying the position of the + top left corner of the background image.

    +

    Figure 15.89. Mixing a background image with two subgraphs. In this case the mixing factor was 85 for both subgraphs. (Note: To reduce load time the image is quite hard compressed in JPEG so there are some artifacts in high-frequency areas.) (combgraphex2.php) shows a variant of Figure 15.88. A combination of a line graph at top and a bar graph in the bottom (combgraphex1.php) where a centered background image is mixed + in with two subgraphs.

    +

    +

    Figure 15.89. Mixing a background image with two subgraphs. In this case the mixing factor was 85 for both subgraphs. (Note: To reduce load time the image is quite hard compressed in JPEG so there are some artifacts in high-frequency areas.) (combgraphex2.php)

    Mixing a background image with two subgraphs. In this case the mixing factor was 85 for both subgraphs. (Note: To reduce load time the image is quite hard compressed in JPEG so there are some artifacts in high-frequency areas.) (combgraphex2.php)


    +

    +
    +

    Creating rotated combined graphs

    + +

    There are in principle no difference when combing graphs top/bottom or + left/right. ?? shows an example of creating a graph that illustrates the + changing weather conditions measure by Wind direction, speed and temperature in + one graph with a detailed vertical scale showing the time.

    +

    Since this follows exactly the same principle laid out above the script should + be fairly self explanatory. Note that we have suppressed the x-scale on two of + the graphs to make better use of the available image size and also to create a + stronger sense of "belonging" between the individual graphs.

    +

    +

    Figure 15.90. Combining three graphs in one image (comb90dategraphex03.php)

    Combining three graphs in one image (comb90dategraphex03.php)


    +

    +
    +

    Some caveats when using MGraph

    + +

    There are some drawbacks using combined graphs

    +

    +

    • +

      CSIM Image maps can not be used with combined graphs.

      +
    • +

      Creating multiple graphs in the same script will require some + additional memory. Make sure that the memory limit in + "php.ini" is sufficient.

      +
    • +

      Adding background images can significantly increase the final size + of the image. Using the JPEG image format when photo like background + images are used gives better compressing than PNG (since JPEG is a + lossy format). For example setting the JPEG quality parameter to 60 + (default is 75).

      +

      +

      1
      +
      $mgraph->SetImgFormat('jpeg',60);

      +

      +

      +

      Tip

      +

      This setting can be used for ordinary Graphs as well. +

      +

      +

      +
    • +

      Compared with background images for ordinary graphs there is + currently no possibility for automatic re-sizing of the background + images.

      +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch16.html b/Societes/ric/jpgraph/docs/chunkhtml/ch16.html new file mode 100755 index 00000000..37bddd85 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch16.html @@ -0,0 +1,890 @@ +Chapter 16. Non-Linear graph types

    Chapter 16. Non-Linear graph types

    Table of Contents

    16.1. Pie graphs
    16.1.1. Hare/Niemeyer Integer compensation for Pie Plots
    16.1.2. 2D-Pie plots
    16.1.3. 3D-Pie plots
    16.1.4. Ring plots
    16.1.5. Exploding pie slices
    16.1.6. Specifying and adjusting labels on pie plots
    16.1.7. Adding drop shadows to the slices
    16.1.8. Adding background images to Pie graphs
    16.1.9. Specifying slice colors and using themes
    16.2. Radar graphs
    16.2.1. Adding radar plots to a radar graph
    16.2.2. Adding plot-marks to radar plots
    16.2.3. Client Side Image maps
    16.2.4. Adjusting the overall properties of the radar graph
    16.2.5. Adjusting the axis formatting
    16.2.6. Adjusting grid lines for the radar graph
    16.2.7. Using a logarithmic scale
    16.2.8. Enabling anti-aliasing for radar graphs
    16.2.9. A final example
    16.3. Polar graphs
    16.3.1. Rotating the polar graph
    16.3.2. Changing the angle direction
    16.3.3. Adding polar plots to a polar graph
    16.3.4. Adding plot-marks to polar plots
    16.3.5. Client Side Image maps
    16.3.6. Adjusting the radius scale
    16.3.7. Adjusting the grid lines
    16.3.8. Adjusting the labels
    16.4. Gantt charts
    16.4.1. The structure of a Gantt chart
    16.4.2. Creating a Gantt graph
    16.4.3. Adjusting the scale headers
    16.4.4. Adding gantt objects to the chart
    16.4.5. Additional formatting for activity bars (Gantt bars)
    16.4.6. Adding visual indication of constraints between gantt objects
    16.4.7. Grouping activities
    16.4.8. Simplifying creation of basic Gantt charts
    16.4.9. Using multiple title columns
    16.4.10. Built-in icons for use in activity titles
    16.4.11. More general Gantt formatting
    16.4.12. Localizing the Gantt chart scale
    16.4.13. CSIM Support in Gantt charts
    16.4.14. Some final Gantt graph examples
    + +

    All the plots we have discussed up to now have used some kind of x-y coordinate + system. The library supports a number of graph types that does not use rectangular axis + or scales. The supported graphs are shown below

    +

    +

    +
    +

    +

    Figure 16.1. Pie graphs

    + +
    Pie graphs
    +


    +

    +

    (See 2D-Pie plots)

    +
    +

    +

    Figure 16.2. Pie3D graphs

    + +
    Pie3D graphs
    +


    +

    +

    (See 3D-Pie plots)

    +
    +

    +

    Figure 16.3. Ring graphs

    + +
    Ring graphs
    +


    +

    +

    (See Ring plots)

    +
    +

    +

    Figure 16.4. Radar graphs

    + +
    Radar graphs
    +


    +

    +

    (See Radar graphs)

    +
    +

    +

    Figure 16.5. Polar graphs

    + +
    Polar graphs
    +


    +

    +

    (See Polar graphs)

    +
    +

    +

    Figure 16.6. Gantt charts

    + +
    Gantt charts
    +


    +

    +

    (See Gantt charts)

    +
    +

    +

    +

    Pie graphs

    + +

    The main difference compared to the previous discussed x-y plots is that to all + pie plots are added based on the class PieGraph instead of the + Graph class used for all x-y graphs.

    +

    Hare/Niemeyer Integer compensation for Pie Plots

    + +

    A problem that sometimes occur with the use of integer values for Pie charts + is the problem with rounding error. Even with correct rounding of the individual + pie slices using only integers as display values have the problem that it + sometimes doesn't sum up to 100% as illustrated in Figure 16.7. Hare/Niemeyer pie plot integer compensation

    +

    This is in many circumstances not acceptable. The library includes the + Hare/Niemeyer compensation that can be enabled. This will adjust the integer + values so that it always sum up to 100%. The result of the compensation can be + seen in Figure 16.7. Hare/Niemeyer pie plot integer compensation

    +

    +

    Figure 16.7. Hare/Niemeyer pie plot integer compensation

    + +
    +
    +

    Hare/Niemeyer pie plot integer compensation

    +

    a) Problem with integer values

    +
    +

    Hare/Niemeyer pie plot integer compensation

    +

    b) Hare/Niemeyer compensation

    +
    +
    +


    +

    +

    Note

    +

    To enable this compensation the label type should be specified as

    +

    +

    1
    +
    $pieplot->SetLabelType(PIE_VALUE_ADJPERCENTAGE);

    +

    +
    +
    +

    2D-Pie plots

    + +

    In order to create Pie plots the module "jpgraph_pie.php" + must first be included.

    +

    The principle for creating Pie graphs follows the same structure as for line + graphs. First an instance of class PieGraph is created and then one + or several instances of class PiePlot is created and added to the + PieGraph instance as the following basic example shows

    +

    +

    Example 16.1. A basic Pie graph (example26.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +$data = array(40,60,21,33);
    + 
    +$graph = new PieGraph(300,200);
    +$graph->SetShadow();
    + 
    +$graph->title->Set("A simple Pie plot");
    + 
    +$p1 = new PiePlot($data);
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>


    Figure 16.8. A basic Pie graph (example26.php)

    A basic Pie graph (example26.php)


    +

    +

    There are a few things to note here

    +

    +

    • +

      By default all pie slices have the percentage shown just outside + the slice.

      +
    • +

      The colors are automatically assigned to the slices.

      +
    • +

      The pie have the edges marked by default

      +
    • +

      The first slice start at 0 degrees (3 o'clock)

      +

    +

    +

    It is possible to adjust most of the aspects of a pie graph. in addition to + the usual graph appearance adjustments discussed in Specifying and formatting the overall displayed graph the following methods can be + used to adjust the appearance of the individual plots.

    +

    +

    • +

      PiePlot::SetStartAngle($aAngle)

      +

      Change the angle for the first slice

      +
    • +

      PiePlot::ShowBorder($aFlg=true)

      +

      Show the border around and inside the pie

      +
    • +

      PiePlot::SetColor($aColor)

      +

      Specify the color of the border of the pie

      +
    • +

      PiePlot::SetSliceColors($aColor)

      +

      Specify the color of the slices

      +
    • +

      PiePlot::SetSize($aSize)

      +

      Set the size of the pie plot. This can be specified as either a + fraction of the minimum of the graph width and height or as a + absolute size in pixels.

      +
    • +

      PiePlot::SetCenter($aX, $aY)

      +

      Position the pie on the graph

      +
    • +

      PiePlot::value

      +

      +
    • +

      PiePlot::SetLabels($aLabels, + $aLblPosAdj="auto")

      +

      Specify the labels for each pie slice

      +
    • +

      PiePlot::SetLabelType($aType)

      +

      By default the label is displayed as percentage. Using this method + it is possible to change the automatic label to show the absolute + value instead.

      +

    +

    +

    In order to show a basic addition we add a legend to the pie graph. We do this + by using the SetLegends() method. By adding the legends to the + previous example we get the result shown in Figure 16.9. Adding a legend to a pie plot (example26.1.php)

    +

    +

    Figure 16.9. Adding a legend to a pie plot (example26.1.php)

    Adding a legend to a pie plot (example26.1.php)


    +

    +

    +

    Note

    +

    In the figure above we also moved the center of the pie slightly to + the left to make more room for the legend box.

    +

    +

    +

    The text for the legends can also contain printf() style format + strings to format a number. The number passed on into this string is either the + absolute value of the slice or the percentage value. The same formatting can + also be used to format the legend labels.

    +

    Adding multiple pie plots to the same pie graph

    + +

    This is done in complete analogy with the say multiple lines were added to + a line graph. The following code snippet shows the principle

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +
    <?php
    +$piegraph = new PieGraph($width,$height);
    + 
    +$p1 = new PiePlot($data1);
    +$p1->SetSize(0.2);
    +$p1->SetCenter(0.3,0.6);
    + 
    +$p2 = new PiePlot($data2);
    +$p2->SetSize(0.2);
    +$p2->SetCenter(0.7,0.6);
    + 
    +$piegraph->Add($p1);
    +$piegraph->Add($p2);
    +?>

    +

    +

    The positioning and sizing of the plots must be done manually. In the + following example we show an example where four pie plots are added to a + graph

    +

    +

    Example 16.2. Adding several pie plots to the same pie graph (pieex3.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +// Some data
    +$data = array(40,21,17,14,23);
    + 
    +// Create the Pie Graph.
    +$graph = new PieGraph(350,300);
    +$graph->SetShadow();
    + 
    +// Set A title for the plot
    +$graph->title->Set("Multiple - Pie plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Create plots
    +$size=0.13;
    +$p1 = new PiePlot($data);
    +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May"));
    +$p1->SetSize($size);
    +$p1->SetCenter(0.25,0.32);
    +$p1->value->SetFont(FF_FONT0);
    +$p1->title->Set("2001");
    + 
    +$p2 = new PiePlot($data);
    +$p2->SetSize($size);
    +$p2->SetCenter(0.65,0.32);
    +$p2->value->SetFont(FF_FONT0);
    +$p2->title->Set("2002");
    + 
    +$p3 = new PiePlot($data);
    +$p3->SetSize($size);
    +$p3->SetCenter(0.25,0.75);
    +$p3->value->SetFont(FF_FONT0);
    +$p3->title->Set("2003");
    + 
    +$p4 = new PiePlot($data);
    +$p4->SetSize($size);
    +$p4->SetCenter(0.65,0.75);
    +$p4->value->SetFont(FF_FONT0);
    +$p4->title->Set("2004");
    + 
    +$graph->Add($p1);
    +$graph->Add($p2);
    +$graph->Add($p3);
    +$graph->Add($p4);
    + 
    +$graph->Stroke();
    + 
    +?>


    Figure 16.10. Adding several pie plots to the same pie graph (pieex3.php)

    Adding several pie plots to the same pie graph (pieex3.php)


    +

    +
    +

    Adding guide lines to Pie Plots

    + +

    For very busy Pie plots it can become too little space for the labels to + be printed just beside the pie slice. For this purpose it is possible to use + guide lines for the labels. The library will then draw a line from the + center edge of the slices to the label which will be positioned further out + from the Pie Plot.

    +

    There is one method that is primarily used to handle this

    +

    +

    • +

      PiePlot::SetGuideLines($aFlg=true, $aCurved=true, + $aAlways=false)

      +

    +

    +

    the simplest usage of this would be to add the following line to a + script

    +

    +

    1
    +
    $pieplot->SetGuideLines();

    +

    +

    Figure 16.11. Adding guide lines to a pie labels (pielabelsex1.php) shows an example of this.

    +

    This basic use of guide lines is very similar as what is produced by other + programs, e.g. Excel. In addition to the above variant it is also possible + to instruct the library to line up the labels vertically in a way that we + think is easier to read.

    +

    This is achieved by specifying the second parameter to the + SetGuideLines() to 'false' as

    +

    +

    1
    +
    $pieplot->SetGuideLines( true , false );

    +

    +

    The first parameter is to enable/disable the guide-lines. With the same + example as above this would then produce the image shown in Figure 16.12. Lining up guide lines vertically (pielabelsex2.php)

    +

    +

    +
    +

    Figure 16.11. Adding guide lines to a pie labels (pielabelsex1.php)

    Adding guide lines to a pie labels (pielabelsex1.php)

    +
    +

    Figure 16.12. Lining up guide lines vertically (pielabelsex2.php)

    Lining up guide lines vertically (pielabelsex2.php)

    +
    +

    +

    +

    It is also possible to configure the vertical distance between the labels. + By default the distance between the labels is roughly 40% of the labels font + height. By using the method PiePlot::SetGuideLinesAdjust() it + is possible to specify a fractional value which is interpretated as the + distance between the bottom of one label to the bottom of the next. This + means that specifying a value of '1.0' the labels will have no space between + them and the bottom of one label will touch the top of another label. By + default this value is 1.4.

    +

    By increasing or decreasing this value it is possible to make the labels + become positioned more or less compact. In ?? this distance is reduced to + '1.1' and as can be seen this yields much more compact labeling.

    +

    +

    Figure 16.13. Adjusting the distance between the labels for guide lines (pielabelsex4.php)

    Adjusting the distance between the labels for guide lines (pielabelsex4.php)


    +

    +

    +

    Note

    +

    Guide lines is only available for 2D Pie plots.

    +

    +

    +
    +
    +

    3D-Pie plots

    + +

    In order to create 3D Pie plots both the modules + "jpgraph_pie.php" and + "jpgraph_pie3d.php" must be included.

    +

    Creating 3D pie plots is as simple as creating normal 2D pie plots. Instead of + creating the plots as an instance of class PiePlot the plots are + created as an instance of class PiePlot3D +

    +

    If we take the plot in Figure 16.8. A basic Pie graph (example26.php) and replace the + creation of an instance of class PiePlot with creating an instance + of class PiePlot3D , i.e. replace

    +

    +

    1
    +
    $p1 = new PiePlot($data);

    +

    +

    with

    +

    +

    1
    +
    $p1 = new PiePlot3D($data);

    +

    +

    The result of this is shown in Figure 16.14. A basic 3D pie plot (example27.php)

    +

    +

    Figure 16.14. A basic 3D pie plot (example27.php)

    A basic 3D pie plot (example27.php)


    +

    +

    3D Pie plots have the same possibilities as the normal pie plots with the + added twist of a 3:rd dimension. It is possible to adjust the perspective angle + with the method SetAngle() So for example to make the pie more + "flat" the angle is made smaller angle. Setting the perspective angle to 20 + degrees in the previous example will give the following result.

    +

    +

    Figure 16.15. Adjusting the perspective angle (example27.1.php)

    Adjusting the perspective angle (example27.1.php)


    +

    +

    To give a feel for the effect of adjusting the angle Figure 16.16. Affect of adjusting the perspective angle for a 3D pie plot below shows a number of different + angles,

    +

    +

    Figure 16.16. Affect of adjusting the perspective angle for a 3D pie plot

    + +
    +
    +

    Affect of adjusting the perspective angle for a 3D pie plot

    +

    angle=10

    +
    +

    Affect of adjusting the perspective angle for a 3D pie plot

    +

    angle=20

    +
    +

    Affect of adjusting the perspective angle for a 3D pie plot

    +

    angle=30

    +
    +

    Affect of adjusting the perspective angle for a 3D pie plot

    +

    angle=40

    +
    +

    Affect of adjusting the perspective angle for a 3D pie plot

    +

    angle=50

    +
    +

    Affect of adjusting the perspective angle for a 3D pie plot

    +

    angle=60

    +
    +

    Affect of adjusting the perspective angle for a 3D pie plot

    +

    angle=70

    +
    +

    Affect of adjusting the perspective angle for a 3D pie plot

    +

    angle=10

    +
    +
    +


    +

    +
    +

    Ring plots

    + +

    There are two versions of the 2D pie plots. The normal pie plot is created as + an instance of class PiePlot. This variant is created as an + instance of class PiePlotC.

    +

    This variant is an extension of the standard PiePlot in the sense that it also + have a filled circle in the center. An example of this is shown in ??

    +

    +

    Figure 16.17. A ring plot (piecex1.php)

    A ring plot (piecex1.php)


    +

    +

    Since the PiePlotC is an extension to the basic pie plot all the + normal formatting for pie plots can also be done for a "ring" plot.

    +

    The additional formatting only concerns the filled middle circle. There are + options of adjusting size, fill color and all font properties. The following + methods are used for this

    +

    +

    • +

      PiePlotC::SetMidColor()

      +

      Set fill color of mid circle

      +
    • +

      PiePlotC::SetMidSize()

      +

      Set size (fraction of radius)

      +
    • +

      PiePlotC::SetMidTitle()

      +

      Set title string (may be multi-lined)

      +
    • +

      PiePlotC::SetMid()

      +

      Set all parameters in a single method call

      +

    +

    +

    In addition to the normal CSIM for PiePlot:s the center area is also a CSIM + hotspot. You specify the target CSIM with a call to

    +

    +

    • +

      PiePlotC::SetMidCSIM()

      +

    +

    +

    A more complex formatting of a ring plot is shown in Figure 16.18. A ring graph with several formatting options adjusted (piecex2.php) . In this example we have:

    +

    +

    • +

      hidden the frame around the pie graph

      +
    • +

      exploded all the slices

      +
    • +

      added drop shadow to the individual slices (and the center filled + circle)

      +
    • +

      specified individual multi line labels.

      +
    • +

      changed the font for the title to a TTF font.

      +

    +

    +

    +

    Figure 16.18. A ring graph with several formatting options adjusted (piecex2.php)

    A ring graph with several formatting options adjusted (piecex2.php)


    +

    +
    +

    Exploding pie slices

    + +

    One way to attract attention to some specific piece of information in a pie + chart is to "explode" one or more slices. Both 2D and 3D pies support exploding + one or several slices.

    +

    Exploding slices is accomplished by the methods

    +

    +

    • +

      PiePlot::Explode($aExplodeArr)

      +

      This method takes an array of one or more slices index to + explode

      +

      PiePlot::ExplodeAll($aRadius)

      +

      This explodes all slices in the pie

      +

      PiePlot::ExplodeSlice($aSlice, $aRadius)

      +

      This is used to explode one specific slice

      +

    +

    +

    To explode one slice the default "explode" radius the following line has to be + added

    +

    +

    1
    +
    $pieplot->ExplodeSlice( 1 );

    +

    +

    The above line would explode the second slice (slices are numbered from 0 and + upwards) the default amount. Doing this to the previous examples would result in + the following two figures

    +

    +

    +
    +

    Figure 16.19. Exploding the second slice (example27.2.php)

    Exploding the second slice (example27.2.php)

    +
    +

    Figure 16.20. Exploding the second slice (example27.3.php)

    Exploding the second slice (example27.3.php)

    +
    +

    +

    +
    +

    Specifying and adjusting labels on pie plots

    + +

    By default the values shown just outside the pie for each slice are the + percentage value for each slice. If instead the absolute value should be + displayed the SetLabelType() method must be called. To show + absolute values the following line must be added

    +

    +

    1
    +
    $pieplot->SetLabelType(PIE_VALUE_ABS);

    +

    +

    Furthermore is is possible to adjust the display value by either using a + printf() style format string (using SetFormat() ) + or by providing a formatting function callback (using + PiePlot::SetFormatCallback() ) for doing more advanced + formatting.

    +

    It is also possible to adjust the position of the labels by means of the + PiePlot::SetLabelPos() method. The argument to this method is + either the fraction of the radius or the string 'auto'. In the + latter case the library automatically determines the best position. The + following example illustrates the effect of specifying the position to 0.5, i.e. + in the middle of the radius.

    +

    +

    Figure 16.21. Adjusting the position of the pie labels (pieex8.php)

    Adjusting the position of the pie labels (pieex8.php)


    +

    +

    If this formatting is not enough it is also possible to "manually" specify the + labels for each slice individually.

    +

    This is done by using the PiePlot::SetLabels() method. This will + allow specifying individual text strings for each label. In each specification + it is possible to add a printf() formatting specification for a + number. The number passed on will be either the absolute value for the slice or + the percentage value depending on what was specified in the call to + SetLabelType().

    +

    The SetLabels() method can also take a second parameter, the + label position parameter. This is a shortcut to the + PiePlot::SetLabelPos() as described above. By default the + position will be set to 'auto' if not explicitly specified.

    +

    Note

    +

    The alignment of the labels will be different depending on whether they + are inside or outside the pie.

    +

    When the label is positioned inside the plot the center of the strings + will be aligned with the center of the slice at the specified fraction of + the radius. When positioned is outside the pie plot the alignment will + depend on the angle to avoid that the labels inadvertently writes over the + pie.

    +
    +

    When labels are specified with the PiePlot::SetLabels() method it + is possible to also specify a format placeholder (in the normal style of + printf() this placeholder will be replaced by the value of the + slice. For example a label specified as "The apple slice\n%.1f%%" + would have the percentage value on the second row. The value will either be the + absolute or the percentage depending on the setting of the + SetLabelType().. The Pie chart in Figure 16.22. Pie chart with manually specified labels for each slice (pielabelsex5.php) below shows an example where the slices + have a label just outside the perimeter of the pie.

    +

    +

    Figure 16.22. Pie chart with manually specified labels for each slice (pielabelsex5.php)

    Pie chart with manually specified labels for each slice (pielabelsex5.php)


    +

    +
    +

    Adding drop shadows to the slices

    + +

    An additional visual enhancements can be made by adding a drop shadow to the + individual slices. This is accomplished by means of the

    +

    +

    • +

      PiePlot::SetShadow()

      +

    +

    +

    method. Adding a drop shadow is often more affective if the pie has one or + more slices exploded as shown in ??

    +

    +

    Figure 16.23. Adding a drop shadow to exploded pie (pieex9.php)

    Adding a drop shadow to exploded pie (pieex9.php)


    +

    +
    +

    Adding background images to Pie graphs

    + +

    In the same way as every other graphs in the library it is possible to add a + background image to a Pie plot (see Adding images and country flags to the background of the graph). An example of this where we + have used multiple plots on a worldmap background is shown in Figure 16.24. Pie plots with a background image (piebkgex1.php)

    +

    +

    Example 16.3. Pie plots with a background image (piebkgex1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    +require_once ('jpgraph/jpgraph_pie3d.php');
    + 
    +// Some data
    +$data = array(
    +    array(80,18,15,17),
    +    array(35,28,6,34),
    +    array(10,28,10,5),
    +    array(22,22,10,17));
    + 
    +$piepos = array(0.2,0.4,0.65,0.28,0.25,0.75,0.8,0.75);
    +$titles = array('USA','Sweden','South America','Australia');
    + 
    +$n = count($piepos)/2;
    + 
    +// A new graph
    +$graph = new PieGraph(550,400,'auto');
    + 
    +// Specify margins since we put the image in the plot area
    +$graph->SetMargin(1,1,40,1);
    +$graph->SetMarginColor('navy');
    +$graph->SetShadow(false);
    + 
    +// Setup background
    +$graph->SetBackgroundImage('worldmap1.jpg',BGIMG_FILLPLOT);
    + 
    +// Setup title
    +$graph->title->Set("Pie plots with background image");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,20);
    +$graph->title->SetColor('white');
    + 
    +$p = array();
    +// Create the plots
    +for( $i=0; $i < $n; ++$i ) {
    +    $d = "data$i";
    +    $p[] = new PiePlot3D($data[$i]);
    +}
    + 
    +// Position the four pies
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->SetCenter($piepos[2*$i],$piepos[2*$i+1]);
    +}
    + 
    +// Set the titles
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->title->Set($titles[$i]);
    +    $p[$i]->title->SetColor('white');
    +    $p[$i]->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +}
    + 
    +// Label font and color setup
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->value->SetFont(FF_ARIAL,FS_BOLD);
    +    $p[$i]->value->SetColor('white');
    +}
    + 
    +// Show the percetages for each slice
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->value->Show();
    +}
    + 
    +// Label format
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->value->SetFormat("%01.1f%%");
    +}
    + 
    +// Size of pie in fraction of the width of the graph
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->SetSize(0.15);
    +}
    + 
    +// Format the border around each slice
    + 
    + 
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->SetEdge(false);
    +    $p[$i]->ExplodeSlice(1);
    +}
    + 
    +// Use one legend for the whole graph
    +$p[0]->SetLegends(array("May","June","July","Aug"));
    +$graph->legend->Pos(0.05,0.35);
    +$graph->legend->SetShadow(false);
    + 
    +for( $i=0; $i < $n; ++$i ) {
    +    $graph->Add($p[$i]);
    +}
    + 
    +$graph->Stroke();
    +?>


    Figure 16.24. Pie plots with a background image (piebkgex1.php)

    Pie plots with a background image (piebkgex1.php)


    +

    +
    +

    Specifying slice colors and using themes

    + +

    In addition to manually specifying the colors of each individual pie slice it + is possible to specify a color "theme" to be used. A color theme is nothing more + than a group of predefined colors that will be used for the slices. Each theme + is referred to by it's name (as a string) as argument for the method

    +

    +

    • +

      PiePlot::SetTheme($aTheme)

      +

    +

    +

    By default the library offers four different color themes listed below with a + small example graph using that particular theme.

    +

    +

    1. +

      "earth" colors

      +

      +

      Figure 16.25.  (example28.1.php)

      (example28.1.php)


      +

      +
    2. +

      "pastel" colors

      +

      +

      Figure 16.26.  (example28.2.php)

      (example28.2.php)


      +

      +
    3. +

      "sand" colors

      +

      +

      Figure 16.27.  (example28.php)

      (example28.php)


      +

      +
    4. +

      "water" colors

      +

      +

      Figure 16.28.  (example28.3.php)

      (example28.3.php)


      +

      +

    +

    +

    Color chart for each available theme is shown below.

    +

    Figure 16.29. Earth theme

    + +
    Earth theme
    +

    +

    Figure 16.30. Pastel theme

    + +
    Pastel theme
    +

    +

    Figure 16.31. Sand theme

    + +
    Sand theme
    +

    +

    Figure 16.32. Water theme

    + +
    Water theme
    +

    +
    +
    + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch16s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch16s02.html new file mode 100755 index 00000000..2bcec2fa --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch16s02.html @@ -0,0 +1,494 @@ +Radar graphs

    Radar graphs

    + +

    In order to create Radar graphs the module + "jpgraph_radar.php" must first be included.

    +

    Radar plots are most often used to display how a number of results compare to some + set targets. They make good use of the human ability to spot symmetry (or rather + un-symmetry). Radar plots are not suitable if high accuracy readings from the graph + are needed since, by it's nature, it can be difficult to read out very detailed + values.

    +

    Figure 16.33. A typical radar graph with two radar plots added (radarex7.php) shows a basic radar graph with two radar plots + added.

    +

    +

    Figure 16.33. A typical radar graph with two radar plots added (radarex7.php)

    A typical radar graph with two radar plots added (radarex7.php)


    +

    +

    Radar graphs are created as an instance of class RadarGraph which + inherits all common formatting options from the standard class Graph + such as titles, background colors, background titles, etc.

    +

    +

    Note

    +

    Tabbed titles cannot not be used for radar graphs since there is no + applicable concept of a plot area

    +

    +

    +

    The following facts applies to a radar graph

    +

    +

    • +

      There is one axis for each data point

      +
    • +

      Each axis may have an arbitrary title which is automatically + positioned

      +
    • +

      A radar plot may be filled or open

      +
    • +

      The first axis is always oriented vertical and is the only axis with + labels

      +
    • +

      Several radar plots can be combined in one radar graph

      +
    • +

      Axis can have either linear or logarithmic scale on the axis

      +

    +

    +

    In addition all the normal formatting of labels, background colors, grid lines, + plot colors, fill colors etc. can be adjusted. The rest of this sections will show + some of the typical formatting options available.

    +

    Adding radar plots to a radar graph

    + +

    The principle is exactly the same as for line plots but instead of an x-y + coordinate each data point represents a value on one of the axis. The number of + axis will automatically be the same as the number of data points. Even through + the library itself does not impose any restrictions on the number of axis there + is a practical limit so it is probably best to keep the number of data points + limited to around 10-12.

    +

    Typical data set for a radar plot is then given as

    +

    +

    1
    +
    $data = array( axis<1>_value, axis<2>_value, ..., axis<n>_value );

    +

    +

    The plot points are assigned to the axis in a counter-clockwise direction + starting at 12 a'clock. If clock-wise order is needed the input data must be + reversed.

    +

    Creation of a radar graph follows the now familiar steps of first creating an + instance of class RadarGraph and then adding one or several + instances of class RadarPlot as the following code snippet + shows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    <?php
    +// Some data
    +$data1 = array( ... ) ;
    +$data2 = array( ... ) ;
    + 
    +$width  = ... ;
    +$height = ... ;
    + 
    +// Setup a basic radar graph
    +$graph = new RadarGraph($width,$height);
    +$graph->SetScale('lin');
    + 
    +// Add a title to the graph
    +$graph->title->Set('Quality result');
    + 
    +// .. add any other common graph formatting
    + 
    +// Create the first radar plot with formatting
    +$plot1 = new RadarPlot($data1);
    +$plot1->SetLegend('Goal');
    +$plot1->SetColor(̈́red', 'lightred');
    + 
    +// Create the second radar plot
    +$plot2 = new RadarPlot($data2);
    +$plot2->SetLegend('Actual');
    +$plot2->SetColor('blue', 'lightred');
    + 
    +// Add the plots to the graph
    +$graph->Add($plot2);
    +$graph->Add($plot1);
    + 
    +// and display the graph
    +$graph->stroke()
    +?>

    +

    +

    As an illustration two very basic radar graphs with one radar plot each are + displayed below. The left figure uses only default values and the right figure + uses the ame data but adjusts a few properties to make the graph a bit more + interesting.

    +

    +

    +
    +

    Figure 16.34. A basic radargraph with no formatting (radarex1.php)

    A basic radargraph with no formatting (radarex1.php)

    +
    +

    Figure 16.35. A basic radargraph with minimal formatting (radarex2.php)

    A basic radargraph with minimal formatting (radarex2.php)

    +
    +

    +

    +

    Each radar plot can also have a legend. As usual the text for the legend is + created by using the method

    +

    +

    • +

      RadarPlot::SetLegend($aText)

      +

    +

    +

    The legend box is accessed through the "$legend" property of the graph and + this can be used to adjust the size, position and layout of the legend box (as + described in Adjusting the position and layout of the legend).

    +
    +

    Adding plot-marks to radar plots

    + +

    In exactly the same way as for line graphs it is possible to add plot marks in + radar plots. The mark property is accessed through the instance variable

    +

    +

    • +

      RadarPlot::mark

      +

    +

    +

    (All available plot marks are listed in Appendix E. Available plot marks)

    +

    For example to add a red ball marker the following line must be added

    +

    +

    1
    +
    $radarplot->mark->SetType(MARK_IMG_SBALL,'red');

    +

    +

    In Figure 16.36. Adding plot marks to a radar graph (radarmarkex1.php) we show a radar graph with added + plot-marks. In addition we have also chosen to hide the tick marks on the axis + and adjust some of the default colors.

    +

    +

    Figure 16.36. Adding plot marks to a radar graph (radarmarkex1.php)

    Adding plot marks to a radar graph (radarmarkex1.php)


    +

    +
    +

    Client Side Image maps

    + +

    (See Chapter 10. Using CSIM (Client side image maps) for a full description on the usage + of CSIM together with the library)

    +

    If markers are shown for the polar plot (by setting the mark property of the + plot) each marker can be a hot spot in a client side image map. The target URL + are as usual specified with the SetCSIMTargets() as the following + short code snippet shows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +// Start by specifying the proper URL targets
    +$targets  = array( "#1" , "#2" , ....... );
    +$radarplot = new RadarPlot( $data );
    +$radarplot->mark->SetType( MARK_SQUARE );
    +$radarplot->SetCSIMTargets( $targets );
    +$graph->Add( $radarplot );
    +$graph->StrokeCSIM(); 
    +?>

    +

    +
    +

    Adjusting the overall properties of the radar graph

    + +

    The scale of the axis can be either a linear or a logarithmic scale and is + specified with the method

    +

    +

    • +

      RadarGraph::SetScale($aScale, $aYMin=1, + $aYMax=1)

      +

      The scale is specified as a string and can be either + "lin" or "log"

      +

    +

    +

    The size and position of the radar graph are adjusted by the two + methods

    +

    +

    • +

      RadarGraph::SetSize($aSize)

      +

      The size is specified as a fraction of min($weight,$height) and + indicates the length of the axis.

      +
    • +

      RadarGraph::SetCenter($aXPos, $aYPos=0.5)

      +

      The center of the graph can be specified as either a fraction of + the width/height or as an absolute position.

      +

    +

    +

    The background color can be adjusted by

    +

    +

    • +

      RadarGraph::SetColor($aColor)

      +

    +

    +
    +

    Adjusting the axis formatting

    + +

    All axis have the same formatting and the axis is access through the "$axis" + property of the RadarGraph class. For example make the axis 2 pixels wide the + following lines would be needed

    +

    +

    1
    +2
    +
    $radargraph = new RadarGraph($width,$height);
    +$radargraph->axis->SetWeight(2);

    +

    +

    The axis supports all the same formatting options as for standard x-y graphs. + Some of the more commonly used methods for the axis formatting are

    +

    +

    • +

      Axis::SetColor($aColor,$aLabelColor=false)

      +

      Set the color of the axis and (optional) the labels

      +
    • +

      Axis::SetWeight($aWeight)

      +

      Specifies width in pixels of the axis

      +
    • +

      Axis::SetLabelFormatString($aFormStr,$aIsDateFormat=false)

      +

      Specify the format string to be used for the labels

      +
    • +

      Axis::SetLabelFormatCallback($aFuncName)

      +

      Set the callback function to be used for the label + formatting

      +
    • +

      Axis::SetFont($aFamily,$aStyle,$aSize)

      +

      Sets the font property for the labels of the axis. Note that this + will not effect the font property + of the title of the axis.

      +

    +

    +

    In order to specify the titles for each axis the method

    +

    +

    • +

      RadarGraph::SetTitles($aTitleArray)

      +

      The argument is an array with as many entries as there are axis + and where each entry specifies a text string which is the title of + the axis.

      +

      Example 16.4. Having the name of the months as title of the axis

      + +

      The easiest way to have the month name as titles is to use the + library global variable "$gDateLocale" as + follows

      +

      +

      1
      +2
      +
      $titles = $gDateLocale->GetShortMonth();
      +$radargraph->SetTitles( $titles );

      +

      +

      +

    +

    +

    In order to adjust the property of the title for the axis the + "$title" property of the axis is used. For example, to set the + font and color for the titles of the axis the following two lines are + needed

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$radargraph->axis->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$radargraph->axis->title->SetColor('darkred');
    +?>

    +

    +

    The tick marks can also be adjusted with the following methods

    +

    +

    • +

      RadarGraph::HideTickMarks($aFlag=true)

      +

      Hide all tick marks

      +
    • +

      RadarGraph::ShowMinorTickmarks($aFlag=true)

      +

      Enable/Disable tick marks

      +
    • +

      RadarGraph::SetTickDensity($aDensity=TICKD_NORMAL)

      +

      Adjust the tick density

      +

    +

    +
    +

    Adjusting grid lines for the radar graph

    + +

    Each major tick mark can also be connected together to create a grid in the + graph. The grid is accessed through the '$grid' property of the + graph. To enable the grid and set the line style to "dotted" the following two + lines must be added

    +

    +

    1
    +2
    +
    $radargraph->grid->Show ();
    +$radargraph->grid->SetLineStyle( 'dashed' );

    +

    +

    An example of dashed grid lines are shown in Figure 16.37. Enabling a dashed grid line (radarex4.php) . By default the grid lines have a gray color and are drawn behind the radar + plot and hence part of the grid lines are obscured.

    +

    The property of the grid lines are adjusted by accessing the + "$grid" line. The available methods to format grid lines + are:

    +

    +

    • +

      RadarGraph::grid::Show($aShowMajor=true)

      +

      Enable grid lines

      +
    • +

      RadarGraph::grid::SetColor($aMajColor)

      +

      Set the color of the grid lines

      +
    • +

      RadarGraph::grid::SetWeight($aWeight)

      +

      Set the weight of the grid line

      +
    • +

      RadarGraph::grid::SetLineStyle($aType)

      +

      Set the line style, can be one of + "dotted","dashed","long-dash","solid"

      +

    +

    +

    To make the grid lines in Figure 16.37. Enabling a dashed grid line (radarex4.php) more visible lets + change the color by using the SetColor() method on the grid. In + addition we can also adjust the background color. The result of this is shown in + Figure 16.38. Enabling a dashed grid line with red (radarex6.php)

    +

    +

    +
    +

    Figure 16.37. Enabling a dashed grid line (radarex4.php)

    Enabling a dashed grid line (radarex4.php)

    +
    +

    Figure 16.38. Enabling a dashed grid line with red (radarex6.php)

    Enabling a dashed grid line with red (radarex6.php)

    +
    +

    +

    +
    +

    Using a logarithmic scale

    + +

    In order to change the (default) linear scale o the axis to use logarithmic + scale the following line must be added:

    +

    +

    1
    +
    $graph->SetScale('log');

    +

    +

    + Figure 16.39. Using a logarithmic scale (radarlogex1.php) shows an example of a logarithmic radar + graph

    +

    +

    Figure 16.39. Using a logarithmic scale (radarlogex1.php)

    Using a logarithmic scale (radarlogex1.php)


    +

    +
    +

    Enabling anti-aliasing for radar graphs

    + +

    Radar graph are an excellent example where enabling anti-alias can make a + large visual difference. In order to enable anti-aliasing the method

    +

    +

    • +

      RadarGraph::img::SetAntiAliasing($aFlg=true)

      +

    +

    +

    must be called, for example as in

    +

    +

    1
    +
    $radargraph->img->SetAntiAliasing();

    +

    +

    To give an example of this Figure 16.40. Enabling anti-alias for the logarithmic radar example (radarlogex1-aa.php) shows an + anti-aliased version of Figure 16.39. Using a logarithmic scale (radarlogex1.php) . (Another + comparative example of enabling anti-aliasing is also given in Figure 14.80. Plain radar plot (radarex8.php) and Figure 14.81. Anti-aliased radar plot (radarex8.1.php) .)

    +

    +

    Figure 16.40. Enabling anti-alias for the logarithmic radar example (radarlogex1-aa.php)

    Enabling anti-alias for the logarithmic radar example (radarlogex1-aa.php)


    +

    +

    +

    Caution

    +

    Remember the limitation when using anti-aliasing that lines will be + given line weight=1 regardless of the specified weight.

    +

    +

    +
    +

    A final example

    + +

    As a final example we shown a radar graphs were we have adjusted many of the + available properties, such as specifying a manual scale, to achieve the result + shown in Figure 16.41. A more complex example of a radar graph with a manual scale (fixscale_radarex1.php)

    +

    +

    Example 16.5. A more complex example of a radar graph with a manual scale (fixscale_radarex1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_radar.php');
    + 
    +$graph = new RadarGraph(300,300);
    +$graph->SetScale('lin',0,50);
    +$graph->yscale->ticks->Set(25,5);
    +$graph->SetColor('white');
    +$graph->SetShadow();
    + 
    +$graph->SetCenter(0.5,0.55);
    + 
    +$graph->axis->SetFont(FF_FONT1,FS_BOLD);
    +$graph->axis->SetWeight(2);
    + 
    +// Uncomment the following lines to also show grid lines.
    +$graph->grid->SetLineStyle('dashed');
    +$graph->grid->SetColor('navy@0.5');
    +$graph->grid->Show();
    + 
    +$graph->ShowMinorTickMarks();
    + 
    +$graph->title->Set('Quality result');
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->SetTitles(array('One','Two','Three','Four','Five','Sex','Seven','Eight','Nine','Ten'));
    + 
    +$plot = new RadarPlot(array(12,35,20,30,33,15,37));
    +$plot->SetLegend('Goal');
    +$plot->SetColor('red','lightred');
    +$plot->SetFillColor('lightblue');
    +$plot->SetLineWeight(2);
    + 
    +$graph->Add($plot);
    +$graph->Stroke();
    + 
    +?>


    Figure 16.41. A more complex example of a radar graph with a manual scale (fixscale_radarex1.php)

    A more complex example of a radar graph with a manual scale (fixscale_radarex1.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch16s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch16s03.html new file mode 100755 index 00000000..ff92a62d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch16s03.html @@ -0,0 +1,313 @@ +Polar graphs

    Polar graphs

    + +

    In order to create Radar graphs the module + "jpgraph_polar.php" must first be included.

    +

    Each data point in a polar plot is represented by a tuple consisting of a radius + and an angle. The polar plot itself can be either outlined or filled. In addition + each point may have a standard marker (the same as for line and scatter plots).

    +

    The scale for the radius can be either linear or logarithmic.

    +

    A polar graph is created by creating an instance of class PolarGraph. + The polar graph type inherits all the capabilities of ordinary x,y graphs, i.e they + can have background images, background gradients, formatted titles, using tabbed + titles etc.

    +

    There are two types of polar graphs, full 360 degree view or just 180 degree view. + The figures below show the difference between these two graph types.

    +

    +

    +
    +

    Figure 16.42. A full 360 degree polar graph (polarex0.php)

    A full 360 degree polar graph (polarex0.php)

    +
    +

    Figure 16.43. A 180 degree (half) polar graph (polarex0-180.php)

    A 180 degree (half) polar graph (polarex0-180.php)

    +
    +

    +

    +

    The choice is controlled with the method

    +

    +

    • +

      PolarGraph::SetType($aType)

      +

      $aType is specified with the symbolic defines

      +

      +

      • +

        POLAR_360, The default

        +
      • +

        POLAR_180

        +

      +

      +

    +

    +

    As an example of using some more of the available formatting that is discussed in + later sections Figure 16.44. A 360 polar plot with background gradient and alpha blending (polarex7-2.php) shown a full 360 degree plot + with both background gradient as well as using alpha blending for the fill of the + polar plot.

    +

    +

    Figure 16.44. A 360 polar plot with background gradient and alpha blending (polarex7-2.php)

    A 360 polar plot with background gradient and alpha blending (polarex7-2.php)


    +

    +

    +

    Rotating the polar graph

    + +

    +

    Caution

    +

    There is a bug in versions before v3.0.4 so that a rotated polar graph + must always have equal margins on all side to work as expected.

    +

    +

    +

    By default the start angle (angle=0) is located at the 3'a clock position. By + calling the method Graph::Set90AndMargin() it is possible to rotate + the graph so that the 0-angle position is at the 6'a clock position (straight + down). This is mostly used for full 360 degree graphs.

    +
    +

    Changing the angle direction

    + +

    +

    Note

    +

    This is only available in v3.0.4 of the library and above.

    +

    +

    +

    By default the angle is counted counter-clockwise as is custom in most + application of polar plots. However, it is also possible to have the angles + counted clockwise. This is done by calling the method + Graph::SetClockwise().

    +

    In the following two examples we show a full 360 degree polar plots with + clockwise ordering in both a standard configuration and also as a 90 degrees + rotated graph.

    +

    + + + + + + + +
    +

    Figure 16.45. Clockwise polar graph (polarclockex1.php)

    Clockwise polar graph (polarclockex1.php)

    +
    +

    Figure 16.46. Rotated clockwise polar graph (polarclockex2.php)

    Rotated clockwise polar graph (polarclockex2.php)

    +
    +

    +
    +

    Adding polar plots to a polar graph

    + +

    The principle is exactly the same as for line plots but instead of an x-y + coordinate each point is represented by a angle and a radius to specify its + position. The data is given in the format

    +

    +

    1
    +
    $data = array(angle1, radius1, angle2, radius2, ...)

    +

    +

    Creation of a single polar plot follows the now familiar structure as shown in + the following code snippet

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    <?php
    +...
    +// Setup the graph
    +$graph = new PolarGraph($width,$height);
    + 
    +// Set a logarithmic scale with 100 as the maximum value, i.e. 10^2
    +$graph->SetScale('log',100);
    + 
    +// Use a full 360 degree polar graph
    +$graph->SetType(POLAR_360);
    + 
    +// Create a plot with marks
    +$polarplot = new PolarPlot($data);
    +$polarplot->mark->SetType(MARK_SQUARE);
    + 
    +// Add it to the graph
    +$graph->Add($polarplot);
    +...
    +?>

    +

    +

    Adding multiple polar plots follows the same pattern. Each polar plot is + created as an instance of class PolarPlot and then added to the + graph.

    +
    +

    Adding plot-marks to polar plots

    + +

    In exactly the same way as for line graphs it is possible to add plot marks in + radar plots. The mark property is accessed through the instance variable

    +

    +

    • +

      PolarPlot::mark

      +

    +

    +

    (All available plot marks are listed in Appendix E. Available plot marks)

    +

    For example to add a square marker (with the default color) the following line + must be added

    +

    +

    1
    +
    $polarplot->mark->SetType(MARK_SQUARE);

    +

    +

    In Figure 16.47. Adding plot marks to a polar graph (polarex7-1.php) we show a polar graph with added + plot-marks. In addition we have added a gradient background.

    +

    +

    Figure 16.47. Adding plot marks to a polar graph (polarex7-1.php)

    Adding plot marks to a polar graph (polarex7-1.php)


    +

    +
    +

    Client Side Image maps

    + +

    (See Chapter 10. Using CSIM (Client side image maps) for a full description on the usage + of CSIM together with the library)

    +

    If markers are shown for the polar plot (by setting the mark property of the + plot) each marker can be a hot spot in a client side image map. The target URL + are as usual specified with the SetCSIMTargets() as the following + short code snippet shows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +// Start by specifying the proper URL targets
    +$targets  = array( "#1" , "#2" , ....... );
    +$polarplot = new PolarPlot( $data );
    +$polarplot->mark->SetType( MARK_SQUARE );
    +$polarplot->SetCSIMTargets( targets );
    +$graph->Add( $polarplot );
    +$graph->StrokeCSIM(); 
    +?>

    +

    +
    +

    Adjusting the radius scale

    + +

    The radius axis can be shown in either a linear or logarithmic scale. This is + controlled by a call to

    +

    +

    • +

      PolarGraph::SetScale($aScale,$aRadiusMax=0)

      +

      Supported scale types for $aScale are the strings + "lin" or "log". The second argument is + an optional manual setting of the maximum scale value for the + radius.

      +

    +

    +

    The two examples below show the same plot in either linear or logarithmic + scale for the radius

    +

    +

    +
    +

    Figure 16.48. Linear scale for radius (polarex3-lin.php)

    Linear scale for radius (polarex3-lin.php)

    +
    +

    Figure 16.49. Logarithmic scale for radius (polarex3.php)

    Logarithmic scale for radius (polarex3.php)

    +
    +

    +

    +

    Please note that the maximum values of the scales are different.

    +

    By default the scale will be auto scaled depending on the data. It is also + possible to specify a manual scale by supplying an extra argument to the + SetScale() method.

    +

    The only difference from the manual scaling with the standard x-y-graphs is + that for polar graph only the maximum value is manually specified. The minimum + will always be 0 for the linear scale and a scaled value of 10 (i.e 1, 0.1, + 0.001 and so on) for the logarithmic scale.

    +

    +

    Note

    +

    The plot is always clipped to the plot area.

    +

    +

    +
    +

    Adjusting the grid lines

    + +

    The graph allows several formatting option for the grid lines. For polar plots + there are two types of grid lines, the angle and the radius grid lines.

    +

    Grid lines format is controlled by

    +

    +

    • +

      PolarAxis::ShowGrid($aMajor=true,$aMinor=false,$aAngle=true)

      +

      Decide if the major,minor and angle grid line should be displayed +

      +
    • +

      PolarAxis::SetGridColor($aMajorColor,$aMinorColor='',$aAngleColor='')

      +

      Specify the color for the major,minor and angel grid

      +
    • +

      PolarAxis::SetAngleStep($aStep)

      +

      This specifies the angle distance between two consecutive angel + scale marks in degrees. By default the step size is 15 + degrees.

      +

    +

    +

    The two example below shows a logarithmic plot with either just major grid + lines or both minor and major grid lines.

    +

    +

    +
    +

    Figure 16.50. Logarithmic scale with only major grid lines (polarex4.php)

    Logarithmic scale with only major grid lines (polarex4.php)

    +
    +

    Figure 16.51. Logarithmic scale with both major and minor grid lines (polarex5.php)

    Logarithmic scale with both major and minor grid lines (polarex5.php)

    +
    +

    +

    +
    +

    Adjusting the labels

    + +

    It is possible to individually specify different fonts and colors for the + angle and the radius labels.

    +

    +

    • +

      PolarAxis::SetFont() +

      +

      Adjust the radius font

      +
    • +

      PolarAxis::SetAngleFont()

      +

      Adjust the radius font

      +
    • +

      PolarAxis::SetColor()

      +

      Adjust the radius color

      +

    +

    +

    The following example specifies different color for the labels. it also shows + how to add both a radial axis title as well as a tabbed title. In this example + we have also chosen not to show the frame around the edge of the plot.

    +

    +

    Figure 16.52. Different colors for labels, specifying both a tabbed title as well as a axis title (polarex9.php)

    Different colors for labels, specifying both a tabbed title as well as a axis title (polarex9.php)


    +

    +

    +

    Note

    +

    As can be seen from the previous examples the angle labels have a + degree mark "°" by default if the font used is a TTF font (the degree + symbol is not available for bitmap fonts) after each label. It is + possible to select if this degree mark should be displayed or not with a + call to the method PolarAxis::SetAngleDegreeMark().

    +

    +

    +

    +

    Note

    +

    For the radius labels all standard formatting that can be done to the + x-y axis such as format string or format callbacks are supported.

    +

    +

    +

    +

    Note

    +

    A common modification for polar plots is to disable the display of the + last label when using a 360 degree plot since the last label will + "collide" with the plot box around the plot area. It is possible to + disable the last label with a call to + Axis::HideLastTickLabel() As can be see this has been + used in some of the examples in this chapter.

    +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch16s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch16s04.html new file mode 100755 index 00000000..74a9f330 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch16s04.html @@ -0,0 +1,2383 @@ +Gantt charts

    Gantt charts

    + +

    Gantt charts are used to give an easy overview of the extension in time of one or several + activities (possible grouped). In addition the gantt chart can show an ordinal relation + between one or several activities such as "activity A needs to be + finished before activity B can start".

    +

    The shape of each activity can also be adjusted as well as color and size. Some of the + capabilities of the Gantt module in the library are listed below.

    +

    +

    • +

      Overall gantt graph features

      +

      +

      • +

        Visualization of constraints between activities, start-to-start, + start-to-end, end-to-start and end-to-end

        +
      • +

        Unlimited number of activities (up to memory and time constrains + of PHP)

        +
      • +

        Full support for independent CSIM for both labels and activity + bars

        +
      • +

        Support for visualization of grouped activities

        +
      • +

        Gantt charts can be automatically sized according to the number of + bars and scale used.

        +
      • +

        Supports title and subtitle with user specified font, size and + color

        +
      • +

        Supports vertical marker lines with text

        +
      • +

        Full support for CSIM (or drill down graphs)

        +
      • +

        Alternate row colors

        +

      +

      +
    • +

      Scale features

      +

      +

      • +

        Both automatic and fully automatic scale

        +
      • +

        Flexible scale with options to display up to 6 lines of scale + headers (year,month,week,day,hour,minute)

        +
      • +

        Supports platform independent Week number calculation according to + ISO:8601

        +
      • +

        Scales grids are intelligent not to overwrite smaller resolution + scales

        +
      • +

        Scale headers can be localized

        +
      • +

        Full user configurable scales

        +
      • +

        Each scale header is configurable in terms of font, size, color, + background, grid lines etc.

        +

      +

      +
    • +

      Activity bars

      +

      +

      • +

        can have multiple patterns and colors

        +
      • +

        can have progress indicators

        +
      • +

        can have drop shadow

        +
      • +

        titles can have individual fonts, colors and backgrounds

        +
      • +

        can have captions

        +
      • +

        can have specified left- and right end markers

        +
      • +

        heights can be specified in absolute pixels or in percent of the + activity line width

        +

      +

      +
    • +

      Milestones

      +

      +

      • +

        can have user selectable shape and color

        +
      • +

        titles can have individual fonts, colors and backgrounds

        +
      • +

        can have captions

        +

      +

      +

    +

    +

    An example of a small Gantt chart is shown in Figure 16.53. A typical small Gantt chart (ganttmonthyearex2.php)

    +

    +

    Figure 16.53. A typical small Gantt chart (ganttmonthyearex2.php)

    A typical small Gantt chart (ganttmonthyearex2.php)


    +

    +

    The remainder of this section will be used to discuss most of the formatting options for + Gantt charts.

    +

    Note

    +

    There is one restrictions of the date scale and that is that it cannot have any + "holes" the dates must be continues.

    +
    +

    The structure of a Gantt chart

    + +

    To understand the terminology used for Gantt chart Figure 16.54. Building block of a Gantt chart shows a typical chart with indications of + the name of each main building block of the chart.

    +

    +

    Figure 16.54. Building block of a Gantt chart

    + +
    Building block of a Gantt chart
    +


    +

    +

    In addition to the specific Gantt formatting that will be discussed in the following + sections all the previously explained graph embellishment like the options of adding + texts, icons, changing font and color of titles, adding footers etc. are also available + for Gantt charts.

    +

    A Gantt chart is made up of four distinct areas:

    +

    +

    1. +

      On the left side there is the activity title column.

      +
    2. +

      On the top there is the scale headers (up to six headers may be + displayed)

      +
    3. +

      The actual plot area where all the activity Gantt bars and markers are + placed

      +
    4. +

      The margin area, where for example the titles are shown

      +

    +

    +

    The steps to crate a Gantt charts is similar to creating a cartesian plot. First an + instance of the main graph canvas is created (as an instance of class + GanttGraph) and then one or more "plots" are created an added to the graph. + For Gantt graph the "plots" that can be added are typically

    +

    +

    • +

      Activity bars (we will also use the name Gantt bars as synonym) that + indicates the length (and possible progress) of one activity. An activity + bar is created as an instance of class GanttBar

      +
    • +

      Milestone marks, this can be thought of as a special activity bar with + length = 0 and is often used to indicate a milestone or a deadline in the + Gantt chart. A milestone is created as an instance of class + Milestone

      +
    • +

      A phase divider, this is a vertical line that can be added at specific + dates and is often used to mark then end and beginning of phases i a + project. A divider is created as an instance of class + GanttVLine (for Gantt Vertical Line)

      +
    • +

      A background pattern for a specific date range, this is often used to + indicate holidays, public holidays or periods of special interest in the + project

      +
    • +

      An arbitrary icon, this is either a predefined image or one of the built + in markers in the library. This is created as an instance of class + IconImage

      +

    +

    +

    All these objects may be extensively modified in terms of formatting., colors (both + fill- and frame color), size, titles, style and patterns etc. All objects have basic + default values so it is not strictly speaking necessary to adjust them. However, the + basic default values will give the charts a very simple look.

    +
    +

    Creating a Gantt graph

    + +

    In order to create a Gantt graph the module "jpgraph_gantt.php" + must be included together with the core module "jpgraph.php"

    +

    A Gantt graph is created as an instance of class GanttGraph which + inherits much of the same formatting options available for standard x-y graphs, for + example titles, backgrounds, adding icons, adding texts and so on.

    +

    There is one crucial difference between all the other graph types and Gantt charts and + that is the fact that for all other graphs both the height and width of the graph must + be specified. For Gantt graphs this is not true.

    +

    Gantt graphs can be either

    +

    +

    • +

      fully automatically sized

      +
    • +

      have the width specified but the height automatically determined by the + number of activities added to the graph

      +
    • +

      fully specified with both width and height

      +

    +

    +

    This means that all the following gantt graph creations are valid

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    <?php
    +// Fully automatic
    +$ganttgraph = new GanttGraph();
    + 
    +// Semi automatic (automatically determined height)
    +$ganttgraph = new GanttGraph(800);
    + 
    +// Fully manual
    +$ganttgraph = new GanttGraph(800,500);
    +?>

    +

    +

    +

    Note

    +

    If the specified width and height is too small to have room for all the + activities specified the activities will be clipped to the specified date + range.

    +

    +

    +

    The creation of a full Gantt graph follows the now familiar pattern of

    +

    +

    1. +

      Create the graph (as shown above) and specify the overall formatting + options (e.g. titles, colors etc)

      +
    2. +

      Create the plot objects that should be added to the graph (e.g. activity + bars, milestones, icons, texts etc) and format them as wanted

      +
    3. +

      Add the object to the graph, with a call to + GanttGraph::Add(), i.e. the activities, milestones etc.

      +
    4. +

      Send the graph back to the client or save it directly to a file, with a + call to GanttGraph::Stroke()

      +

    +

    +

    Note

    +

    Even though there is no limit for the size of the Gantt chart (apart from + available memory and execution time limit specified in + "php.ini") the library defines two constants + MAX_GANTTIMG_SIZE_W and MAX_GANTTIMG_SIZE_H that sets + the maximum allowed image size for a Gantt chart. This is primarily meant to + discover scripts gone wrong that tries to make very large images (perhaps by some + non-properly terminating loops). If the overall image size becomes larger than these + limit an error message will be shown.

    +
    +
    +

    Adjusting the scale headers

    + +

    A gantt chart must always have at least one scale header and at most six scale headers + (see Figure 16.54. Building block of a Gantt chart). Usually it is not advisable to + use more than three scale headers at the same time. Having multiple scale headers allow + the specification of the same date range but with different resolutions.

    +

    The library makes six different scale headers available which is identified by a + symbolic constant that is logically combined to specify the wanted headers using the + method

    +

    +

    • +

      GanttGraph::ShowHeaders($aHeaderSelection)

      +

    +

    +

    The $aHeaderSelection argument is a binary combination of one or more of + the following specifiers that indicates the interval used in the header

    +

    +

    1. +

      GANTT_HMIN, Minute interval header (See Minute scale for label format options)

      +
    2. +

      GANTT_HHOUR, Hour interval header (See Hour scale for label format options)

      +
    3. +

      GANTT_HDAY, Day interval header (See Day scale for label format options)

      +
    4. +

      GANTT_HWEEK, Week interval header (See Week scale for label format options)

      +
    5. +

      GANTT_HMONTH, Month interval header (See Month scale for label format options)

      +
    6. +

      GANTT_HYEAR, Year interval header (See Year scale for label format options)

      +

    +

    +

    For example to show a year, month and week header the following line would be + used

    +

    +

    1
    +
    $graph->ShowHeaders( GANTT_HYEAR | GANTT_HMONTH | GANTT_HWEEK );

    +

    +

    Any combination of the listed headers above can be used. The scale headers will always + be drawn with the larger header rage on top ot a header with smaller range.

    +

    Scale headers week, day, hour , minute have a minimum span of 1 unit. This means that + if, for example, the week header is displayed the minimum width of the overall scale is + one week.

    +

    +

    Caution

    +

    The overall minimum size of the scale regardless of what scale headers are + displayed is one day. This means that it is not possible to just create a Gantt + graph with , say 6 hour.

    +

    +

    +

    Specifying the wanted headers is the first step in controlling the header. The next + step is to specify the format that should be used to print the date label in each of the + selected headers. For example the week interval header will have a label at the start of + every week. This could for example be indicated as week number, day of month, full date + and so on. In order to adjust the headers the appropriate header instance variable must + be access. The header instance variables are

    +

    +

    1. +

      Graph::scale::minute

      +
    2. +

      Graph::scale::hour

      +
    3. +

      Graph::scale::day

      +
    4. +

      Graph::scale::week

      +
    5. +

      Graph::scale::month

      +
    6. +

      Graph::scale::year

      +

    +

    +

    The connection with the scale headers are shown in Figure 16.55. The Gantt scale properties which shows a cut out part of a larger gantt + chart

    +

    +

    Figure 16.55. The Gantt scale properties

    + +
    The Gantt scale properties
    +


    +

    +

    All the headers are an instance of class HeaderProperty and supports the + following formatting methods

    +

    +

    • +

      HeaderProperty::SetFont($aFontFamily,$aFontStyle,$aFontSize)

      +

      Specify the font to be used for the label

      +
    • +

      HeaderProperty::SetFontColor($aColor)

      +

      Specify the font color to use

      +
    • +

      HeaderProperty::SetStyle($aStyle)

      +

      The style depends on the actual header and all available styles for each + header are shown below. The style specifies the format used for the scale + header label

      +
    • +

      HeaderProperty::SetBackgroundColor($aColor)

      +

      Set the header background color

      +
    • +

      HeaderProperty::SetFrameWeight($aWeight)

      +

      Specify the weight of the frame around the scale header

      +
    • +

      HeaderProperty::SetTitleVertMargin($aMargin)

      +

      Specifies the margin between this header and the next header (usually + there is no need to adjust this)

      +
    • +

      HeaderProperty::SetInterval($aInterval)

      +

      Specifies the interval between each scale label. For example specifying

      +

      +

      1
      +
      $graph->scale->hour->SetInterval(6);

      +

      +

      Will step the hour label 6 hours for each label

      +

    +

    +

    So for example to set the font of the month header the following line would be + used

    +

    +

    1
    +
    $ganttgraph->scale->month->SetFont(FF_ARIAL,FS_NORMAL,10);

    +

    +

    In addition to these methods each scale also has the property '$grid' + which determines the appearance of grid lines for that specific scale. It is possible to + adjust the appearance of the grid lines by the "normal" line methods, i.e.

    +

    +

    • +

      SetColor($aColor), Set the grid color

      +
    • +

      SetWeight($aWeight), Set the grid line weight

      +
    • +

      SetStyle($aLineStyle), Set the grid line style, i.e. + "solid", "dotted", "dashed", + "long-dashed"

      +
    • +

      Show($aFlg=true), Enable the grid line

      +

    +

    +

    So for example to enable the week grid line and set it to red color the following + lines would be needed

    +

    +

    1
    +2
    +
    $graph->scale->week->grid->Show();
    +$graph->scale->week->grid->SetColor( 'red' );

    +

    +

    The automatic grid lines have some "intelligence" so that higher resolution scales + will not cut through part ways of scale headers with lower resolution (such as a year + grid line cutting through the middle of a week).

    +

    +

    Tip

    +

    It is possible to specify a zoom factor for the scale that adjusts how wide + the automatic sized header should be. See Adjusting the scale zoom factor + for more details.

    +

    +

    +

    Minute scale

    + +

    Minute scale is enabled by adding the GANTT_HMIN in the + GanttGraph::ShowHeaders() call, for example as the following line + shows

    +

    +

    1
    +
    $graph -> ShowHeaders ( GANTT_HDAY  |  GANTT_HHOUR  |  GANTT_HMIN );

    +

    +

    The SetStyle($aStyle) method supports the following label + styles

    +

    +

    • +

      MINUTESTYLE_MM

      +

      This will display minutes as a two digit number with a leading zero if + necessary

      +
    • +

      MINUTESTYLE_CUSTOM

      +

      This will let you specify you own custom minute style by making a call + to HeaderProperty:: SetFormatString()

      +

      The format string is specified as a format string for the + date() function (See PHP + Manual)

      +

    +

    +
    +

    Hour scale

    + +

    Minute scale is enabled by adding the GANTT_HHOUR in the + GanttGraph::ShowHeaders() call, for example as the following line + shows

    +

    +

    1
    +
    $graph -> ShowHeaders ( GANTT_HDAY  |  GANTT_HHOUR  |  GANTT_HMIN );

    +

    +

    The SetStyle($aStyle) method supports the following label + styles

    +

    +

    • +

      HOURSTYLE_HM24

      +

      Will display the only the hour in military time 0-24 , for example + 13:00

      +
    • +

      HOURSTYLE_H24

      +

      Will display the hour with both hour and minute in military time 0-24, + for example 13

      +
    • +

      HOURSTYLE_HMAMPM

      +

      Will display the hour and minutes with a suitable am/pm postfix, for + example 1:30pm

      +
    • +

      HOURSTYLE_HAMPM

      +

      Will display only the hour with a suitable am/pm postfix, for example + 1pm

      +
    • +

      HOURSTYLE_CUSTOM

      +

      Custom defined format as specified with a call to + HeaderProperty::SetFormatString()

      +

      The format string is specified as a format string for the + date() function (See PHP + Manual)

      +

    +

    +

    For hours it is possible to specify the interval in either of two ways. With an + integer, e.g. 6, or as time interval, e.g. "1:30" which makes the interval one and a + half hour. The only restriction is that the interval must be a divisor of 24 since + one day is the smallest possible interval to show. This means that it is allowed to + use, for example 2,4,6,"1:30" or "0:45" as intervals but not 7, "2:45".

    +

    The code snippet below shows hot to set up a hour scale to with 45 minutes + interval and custom colors

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$graph->scale->hour->SetBackgroundColor( 'lightyellow:1.5' );
    +$graph->scale->hour->SetFont( FF_FONT1 );
    +$graph->scale->hour->SetStyle( HOURSTYLE_HMAMPM );
    +$graph->scale->hour->SetIntervall( '0:45' ); 
    +?>

    +

    +

    The example in Figure 16.56. Gantt chart with day and hour scale enabled (gantthourex1.php) below shows a gantt chart + with the day and hour scale enabled. In this example we have also added a gradient + background to show some formatting options.

    +

    +

    Figure 16.56. Gantt chart with day and hour scale enabled (gantthourex1.php)

    Gantt chart with day and hour scale enabled (gantthourex1.php)


    +

    +
    +

    Day scale

    + +

    The SetStyle($aStyle) method supports the following label + styles

    +

    +

    • +

      DAYSTYLE_ONELETTER,

      +

      On letter week day. Example "M"

      +
    • +

      DAYSTYLE_LONG,

      +

      Full week day. Example "Monday"

      +
    • +

      DAYSTYLE_LONGDAYDATE1,

      +

      Day with date. Example "Monday 23 Jun"

      +
    • +

      DAYSTYLE_LONGDAYDATE2,

      +

      Day with date+year. Example "Monday 23 Jun 2003"

      +
    • +

      DAYSTYLE_SHORT,

      +

      Short date. Example "Mon"

      +
    • +

      DAYSTYLE_SHORTDAYDATE1,

      +

      Short date+date. Example "Mon 23/6"

      +
    • +

      DAYSTYLE_SHORTDAYDATE2,

      +

      Short date+date. Example "Mon 23 Jun"

      +
    • +

      DAYSTYLE_SHORTDAYDATE3,

      +

      Short date+date. Example "Mon 23"

      +
    • +

      DAYSTYLE_SHORTDATE1,

      +

      Short date. Example "23/6"

      +
    • +

      DAYSTYLE_SHORTDATE2,

      +

      Short date. Example "23 Jun"

      +
    • +

      DAYSTYLE_SHORTDATE3,

      +

      Short date. Example "Mon 23"

      +
    • +

      DAYSTYLE_SHORTDATE4,

      +

      Short date. Example "23"

      +
    • +

      DAYSTYLE_CUSTOM,

      +

      Custom specified formatting string. Example "%A"

      +

      The format string is specified as a format string for the + strftime() function (See PHP + Manual)

      +

      +

      Caution

      +

      Note that the day format string is a format string for + strftime() while the format string for hour and + minutes are given as a format string for the date() + function. This inconsistency purely exists for historic reasons + and is kept not to break existing scripts.

      +

      +

      +

    +

    +

    Example:

    +

    +

    1
    +
    $graph->scale->day->SetStyle ( DAYSTYLE_LONG );

    +

    +

    The graphical formatting possibilities for days allow the possibility to specify a + different color for the weekend background and also for the Sunday.

    +

    +

    • +

      HeaderProperty::SetWeekendColor($aColor)

      +

      Set the background color for weekends. (Defaults to light gray)

      +
    • +

      HeaderProperty::SetSundayFontColor($aColor)

      +

      The Sunday font color. (Defaults to red)

      +

    +

    +

    In addition to this there is also a possibility to choose whether or not the + weekend background should be extended vertically down over the plot area which is + the default. Since that is a property more of the whole plot this behavior is + modified with a call to the method

    +

    +

    • +

      GanttScale::UseWeekendBackground($aFlg=true)

      +

      Example:

      +

      +

      1
      +2
      +
      // Don't use background for weekend in the plot area
      +$graph->scale->UseWeekendBackground(false);

      +

      +

    +

    +

    +

    Note

    +

    The actual text displayed is dependent on the Locale used. See Localizing the Gantt chart scale

    +

    +

    +
    +

    Week scale

    + +

    Week scales, if enabled, by default shows the week number in range 1 to 53 (as + defined by ISO-8601)

    +

    +

    Note

    +

    It might be worth pointing out here that the week number calculation is + carried out within the library and does not rely on the underlying OS date + libraries. This makes the behavior consistent over several OS:s (at least MS + Windows does not comply to ISO-8601 or supply any way of doing this through + the normal libraries, e.g. strftime())

    +

    +

    +

    The SetStyle($aStyle) method supports the following label + styles

    +

    +

    • +

      WEEKSTYLE_WNBR

      +

      Show week number. To further modify the formatting of the actual week + number it is possible to optionally supply a format string with a call + to

      +

      +

      • +

        HeaderProperty::SetLabelFormatString($aFormat)

        +

        The format for this string is the same format used for the + sprintf() function and formats the week + number given as an integer.

        +

        +

        Caution

        +

        Note that the day format string is a format string + for sprintf() while the format string + for hour and minutes are given as a format string + for the date() function. This + inconsistency purely exists for historic reasons and + is kept not to break existing scripts.

        +

        +

        +

      +

      +
    • +

      WEEKSTYLE_FIRSTDAY

      +

      Show date of first day in week.

      +
    • +

      WEEKSTYLE_FIRSTDAY2

      +

      Show date of first day in week and short month

      +
    • +

      WEEKSTYLE_FIRSTDAYWNBR

      +

      Show week number of first day in week.

      +
    • +

      WEEKSTYLE_FIRSTDAY2WNBR

      +

      Show week number of first day in week and month

      +

    +

    +

    Example:

    +

    +

    1
    +
    $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

    +

    +

    +

    Note

    +

    The actual text displayed for month is dependent on the Locale used. See + Localizing the Gantt chart scale

    +

    +

    +
    +

    Month scale

    + +

    The SetStyle($aStyle) method supports the following label + styles

    +

    +

    • +

      MONTHSTYLE_SHORTNAME

      +

      Display the month name in its locale specific short form, i.e Jan, Feb + etc

      +
    • +

      MONTHSTYLE_SHORTNAMEYEAR2

      +

      Display the month name in its locale specific short form together with + a 2 digit year , i.e Jan '01, Feb '01 etc

      +
    • +

      MONTHSTYLE_SHORTNAMEYEAR4

      +

      Display the month name in its locale specific short form together with + a 4 digit year , i.e Jan 2001, Feb 2001 etc

      +
    • +

      MONTHSTYLE_LONGNAME

      +

      Display the month name in its locale specific long name, i.e. January, + February

      +
    • +

      MONTHSTYLE_LONGNAMEYEAR2

      +

      Display the month name in its locale specific long name together with + a 2 digit year , i.e January '01, February '01 etc

      +
    • +

      MONTHSTYLE_LONGNAMEYEAR4

      +

      Display the month name in its locale specific long name together with + a 4 digit year , i.e January 2001, February 2001 etc

      +
    • +

      MONTHSTYLE_FIRSTLETTER

      +

      The first letter of the month name

      +

    +

    +

    Example:

    +

    +

    1
    +
    $graph->scale->month->SetStyle(MONTHSTYLE_LONGNAME);

    +

    +
    +

    Year scale

    + +

    Year scale has no extra formatting possibilities it is always displayed as a four + digit number , e.g. "2009"

    +
    +
    +

    Adding gantt objects to the chart

    + +

    Gantt objects are primarily instances of one of two classes

    +

    +

    1. +

      class GanttBar

      +

      This is the main activity added to a Gantt chart to show the extension in + time of one activity, a gantt bar

      +
    2. +

      class Milestone

      +

      This activity is a special case of an activity with zero extension, + usually indicating a milestone or a deadline

      +
    3. +

      class VLine

      +

      This is similar so a millstone as it has no extension in time. Instead + this object is visually represented as a vertical line that crosses the + entire graph plot area. This is often used to mark, for example, phases in a + project.

      +

    +

    +

    To add a Gantt objects there are two compulsory parameters that must be set. These + parameters specify on what row and at what date the activity should start at.

    +

    Bars and Milestones need both a vertical position and a horizontal position. The + horizontal start position is specified as a date, e.g. "2001-06-23", and the vertical + positions are specified as a number [0,1,2,3,...]. This vertical number indicates the + position from the top where the object should be placed. To understand this one could + imagine a number of "invisible" horizontal bands with a certain height. If the vertical + position is specifies as 0 the bar will be placed in the first band, specify 3 and the + bar will be placed in the fourth band and so on.

    +

    All these "invisible bands" have the same height (equ-spaced). The height of each band + is automatically determined and depends on both the method of layout ( as specified by + (GanttChart::SetLayout()) and the individual heights of the individual + bars and titles. The rules are quite simple:

    +

    +

    1. +

      If layout=GANTT_FROMTOP (the default and most common) the + height will equal the height (+ a margin) of the highest gantt bar. The + height calculation of each bar takes into account both the actual bar, the + title, and any left- right-marks (more about that later) that may be + present.

      +

      The name "fromtop" refers to that when the height is explicitly specified + the bars will usually be added from band 0 and onwards and hence being added + from the top. (This might leave empty space at the bottom of the plot area + in the graph if the height of the graph has been explicitly + specified).

      +
    2. +

      If layout=GANTT_EVEN the bars are evenly (hence the name) + spread out over the available height in the gantt chart and no consideration + is taken of the individual bars heights. Note that if you use automatic + sizing even layout cannot be used. (It just doesn't make sense). Even layout + is for those cases when a large area is specified and the bars should be + evenly distributed using the full height.

      +

    +

    +

    So in summary each object must have two position parameters.

    +

    +

    1. +

      Which row the gantt object should be drawn + on.

      +

      This should be a positive integer in the range (0, ...), It is perfectly + legal to specify a large vertical position with no other object above as + shown in Figure 16.59. Specifying a large vertical position (ganttex03.php)

      +
    2. +

      Which start and end date (or dates) the object + should have.

      +

      Start of bars are given as a date string. The format depends on the + current locale. Examples of valid date strings are

      +

      +

      • +

        "2001-10-22"

        +
      • +

        "2001-10-22"

        +
      • +

        "22 Oct 2001"

        +

      +

      +

      Even if several format are supported it is recommended to use all numeric + dates, i.e in the form "2001-10-22".

      +

      +

      Caution

      +

      Watch our for the locale used since, for example, "2008-05-10" can + have two meanings.

      +

      +

      +

      Specifying the end position may be done in two different ways, either by + the end date in the same way as for the start date. The other way is to + specify the length of the activity in number of days (and fractions + thereof). Examples of valid end dates are:

      +

      +

      • +

        "2001-11-15"

        +
      • +

        "15 Nov 2001"

        +
      • +

        22, (specifies duration of 22 days)

        +
      • +

        22.7, (specifies duration of 22.7 days)

        +

      +

      +

      Please note that duration must be specified as numerical values and not as + a string.

      +

    +

    +

    Usually at least one or more of the following parameter is also specified

    +

    +

    1. +

      The title of the gantt object

      +
    2. +

      The caption of the object. This is a text string that is drawn beside the + object on the gantt chart

      +
    3. +

      Color and any optional patterns to separate different activities

      +
    4. +

      When applicable the state of a progress indicator (see Adding progress indicators)

      +

    +

    +

    Adding Gantt activity bars

    + +

    Instances of class GanttBar is created with the constructor

    +

    +

    • +

      GanttBar::__construct($aPos,$aLabel,$aStart,$aEnd,$aCaption="",$aHeightFactor=0.6)

      +

      $aVPos The vertical position for the bar, [0..n]

      +

      $aTitle Title for the activity

      +

      $aStart Start date for the activity given as string, e.g + "2001-09-22"

      +

      $aEnd End date for activity given as either a date (a + string) or as the duration (in days) of the activity, e.g both + "2001-10-15" and 20.5 are valid inputs

      +

      $aCaption Text string (caption) to appear at the end + (right side) of the bar

      +

      $aHeight Height of bar given as either a value in range + [0,1] in which case this is interpretated as what fraction of the + vertical position should the bar occupy. The height can also be given in + absolute pixels [1..200]

      +

    +

    +

    In order to illustrate this we will create a the most basic (and simple ) Gantt + chart possible. This will consist of just a chart with one activity bar.

    +

    +

    Example 16.6. The simplest possible Gantt graph (ganttex00.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +// A new graph with automatic size
    +$graph = new GanttGraph();
    + 
    +//  A new activity on row '0'
    +$activity = new GanttBar(0,"Activity 1","2001-12-21","2002-01-19");
    +$graph->Add($activity);
    + 
    +// Display the Gantt chart
    +$graph->Stroke();
    +?>


    Figure 16.57. The simplest possible Gantt graph (ganttex00.php)

    The simplest possible Gantt graph (ganttex00.php)


    +

    +

    The example above will make use of just the default settings for all formatting + parameters but still manage to create a perfectly readable Gantt chart with only 4 + lines of real code. We can note a couple of things

    +

    +

    • +

      By default two scale headers are used, week and day resolution

      +
    • +

      Weekends will have a gray background

      +
    • +

      Sunday scale header uses red for the "Sunday"

      +

    +

    +

    Lets now take the above simple graph and make a few small alterations.

    +

    +

    • +

      We will add graph titles

      +
    • +

      We will change the pattern and color of the activity bar

      +
    • +

      We will adjust the scale headers so er have three headers and use the + date of the start day for each week (in the week scale)

      +

    +

    +

    +

    Figure 16.58. Making some minor alterations to the Gantt graph (ganttex01.php)

    Making some minor alterations to the Gantt graph (ganttex01.php)


    +

    +

    To show the effect of row positioning Figure 16.59. Specifying a large vertical position (ganttex03.php) shows + the effect of adding a bar to row 7. This will as can be seen create graph that is + mostly empty sine row 0-6 have no specified gantt objects.

    +

    +

    Figure 16.59. Specifying a large vertical position (ganttex03.php)

    Specifying a large vertical position (ganttex03.php)


    +

    +

    The height of the bars can also be adjusted. The horizontal spacing between each + bar is based on the highest single bar including the size of the title. By default + the height of the bar is 60% of the overall vertical size allocated to each row (all + the rows have the same height).

    +

    The height of the bar can be specified as either as an absolute number of pixels + or as a fraction of the row height. Since by default the bar height is 60% this + means that if any single line has, for example, a large title all the rows will be + adjusted to the same size and hence the bars will also be adjusted to fill 60% of + the new width.

    +
    +

    Adding milestones

    + +

    Instances of class Milestone is created with the constructor

    +

    +

    • +

      MileStone::__construct($aVPos,$aLabel,$aDate,$aCaption='')

      +

      $aVPos, The vertical position for the bar, [0..n]

      +

      $aTitle, Title for the activity

      +

      $aDate, Date for the milestone

      +

      $aCaption, Text to the right of the milestone

      +

    +

    +

    Valid milestones are for example

    +

    +

    1
    +2
    +
    $ms4 = new MileStone(3, 'Code complete', '2001-12-01'); 
    +$ms5 = new MileStone(3, 'Ready for test', '2002-01-06');

    +

    +

    By default milestones are rendered as a filled "Diamond" shape. This may be + optionally modified. The actual shape is specified by the 'mark' property of + milestone which is an instance of class PlotMark. See Adding markers to the Gantt bars.

    +

    To change the shape of a milestone to, say a triangle, you use the + SetType() method as in

    +

    +

    1
    +
    $ms4->mark->SetType( MARK_DTRIANGLE );

    +

    +

    An example of adding a milestone to a gantt graph is shown in Figure 16.60. Adding a milestone marker to a gantt graph (ganttex04.php)

    +

    +

    Figure 16.60. Adding a milestone marker to a gantt graph (ganttex04.php)

    Adding a milestone marker to a gantt graph (ganttex04.php)


    +

    +

    We note that;

    +

    +

    • +

      By default the title of a milestone is set in a red color. To change + the title the "$title" property of the milestone must be + accessed. For example

      +

      +

      1
      +
      $milestone->title->SetColor('black');

      +

      +
    • +

      A milestone has a caption in exactly the same way as an ordinary gantt + bar

      +
    • +

      Milestones are added to the graph with the usual + GanttGraph::Add()

      +

    +

    +
    +

    Adding vertical lines (GanttVLine)

    + +

    Instances of class GanttVLine is created with the constructor

    +

    +

    • +

      GanttVLine::__construct($aDate,$aTitle='',$aColor='darkred',$aWeight=2,$aStyle='solid')

      +

      $aDate Date for the milestone

      +

      $aTitle Title for the line. The title is displayed at the + bottom of the line

      +

      $aColor Color of the line

      +

      $aWeight Line width

      +

      $aStyle Line style, specified as a string + "dashed", "dotted" and so on

      +

    +

    +

    By default a GanttVLine will cover the entire Gantt area from the top to the + bottom. It is also possible to restrict the area that the line is spanning by + specifying the start and stop row for the line with a call to the method

    +

    +

    • +

      GanttVLine::SetRowSpan($aStart, $aEnd)

      +

    +

    +

    If the end row is left out the line will go all the way to the bottom.

    +

    +

    Note

    +

    Since there is a small margin from the top header row to the first Gantt + row this means that specifying a start row of 0 (the very first gantt row) + will leave a small margin between the line and the header row. If this is + not desirable the start row can be specified as -1 in which case the line + will go all the way up to the header row.

    +

    +

    +

    Valid creations of lines are for example

    +

    +

    1
    +2
    +3
    +
    $vline1 = new GanttVLine('2001-12-24', 'Phase 1'); 
    +$vline2 = new GanttVLine('2001-12-28', 'Phase 1', 'darkred', 5, 'dotted'); 
    +$vline2->SetRowSpan(3); // Start at row index=3 (fourth row) and go all the way to the bottom

    +

    +

    In Figure 16.61. Adding a vertical line in the Gantt graph (ganttex06.php) we have created a line with

    +

    +

    1
    +2
    +
    $vline = new GanttVLine('2001-12-24', 'Phase 1' );
    +$graph->Add( $vline );

    +

    +

    +

    Figure 16.61. Adding a vertical line in the Gantt graph (ganttex06.php)

    Adding a vertical line in the Gantt graph (ganttex06.php)


    +

    +

    We note the following

    +

    +

    • +

      The title of the vertical line is rendered at the bottom of the graph + in the margin.

      +
    • +

      By default the line is drawn at the beginning of the day of the + specified date and in a "dashed" style. This can be + modified so that the line is drawn/aligned anywhere in the specified + day. This is done by using the method + GanttVLine::SetDayOffset() with an argument specifying + the fraction of the width of a single day where the line should be + positioned.

      +

      For example, if we want to display the line in the middle of the day + we need to add the line

      +

      +

      1
      +
      $vline->SetDayOffset ( 0.5 );

      +

      +

      Adding this line to the example in Figure 16.61. Adding a vertical line in the Gantt graph (ganttex06.php) + gives the result shown in Figure 16.62. Adjusting the position of the vertical line within the day (ganttex07.php)

      +

    +

    +

    +

    Figure 16.62. Adjusting the position of the vertical line within the day (ganttex07.php)

    Adjusting the position of the vertical line within the day (ganttex07.php)


    +

    +
    +

    Illustrating break in activities

    + +

    Since the position of each activity is specified by row and date there is nothing + that prevents adding multiple activity bars to the same row. This observation makes + it possible to illustrate breaks in activities during a certain period. Figure 16.63. Adding several activity bars on the same row (gantt_samerowex1.php) shows an example of this

    +

    +

    Figure 16.63. Adding several activity bars on the same row (gantt_samerowex1.php)

    Adding several activity bars on the same row (gantt_samerowex1.php)


    +

    +

    A common variant is to have some connection between the parts in the broken + activity. This can be accomplished by using a special variant of the gantt activity + available just for this purpose.

    +

    Gantt bars have the following method available

    +

    +

    • +

      + GanttBar::SetBreakStyle($aFlg=true, $aLineStyle='dotted', + $aLineWeight=1)

      +

    +

    +

    This will draw the gantt bar almost hollow. It will just consist of the top and + bottom line of the bar. The idea to illustrate a break is to have a bar of this + style during the break. Figure 16.64. Adding a hollow "break" bar (gantt_samerowex2.php) shows an example + of this.

    +

    +

    Figure 16.64. Adding a hollow "break" bar (gantt_samerowex2.php)

    Adding a hollow "break" bar (gantt_samerowex2.php)


    +

    +
    +
    +

    Additional formatting for activity bars (Gantt bars)

    + +

    Adding markers to the Gantt bars

    + +

    Each gantt bar can have a marker either at the left or to the right of the bar. + The markers are accessed through the properties

    +

    +

    • +

      GanttBar::leftMark

      +
    • +

      GanttBar::rightMark

      +

    +

    +

    Since the markers are instances of class PlotMark all the features of + this class is available as described in Adding marks to the plot (a.k.a. plot marks) and + in Appendix E. Available plot marks.

    +

    To give a practical example of the usage of marks we will add a solid filled + circle with a title text to the right end of a activity bar by using the following + lines

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    <?php
    +// Add a right marker
    +$activity->rightMark->Show();    
    +$activity->rightMark->SetType(MARK_FILLEDCIRCLE);
    +$activity->rightMark->SetWidth(13);
    +$activity->rightMark->SetColor('red');
    +$activity->rightMark->SetFillColor('red');
    +$activity->rightMark->title->Set('M5');
    +$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$activity->rightMark->title->SetColor('white');
    +?>

    +

    +

    This would give the effect shown in Figure 16.65. Example of adding a right marker to the activity bar

    +

    +

    Figure 16.65. Example of adding a right marker to the activity bar

    + +
    Example of adding a right marker to the activity bar
    +


    +

    +

    Caution

    +

    Since the bar height is 60% of the row height this means that a large + marker will adjust the row size (since it must be large enough to make room + for the mark) and it might be necessary to compensate for this by calling + the GanttBar::SetHeight($aHeight). Remember that the reserved + height is the maximum height needed by any line. Figure 16.66. A large marker will force the row to become larger since it by default always fills 60% of the allocated height for each row (ganttex08.php) shows what happens with the bar height if + it is not adjusted.

    +

    .

    +

    +

    Figure 16.66. A large marker will force the row to become larger since it by default always fills 60% of the allocated height for each row (ganttex08.php)

    A large marker will force the row to become larger since it by default always fills 60% of the allocated height for each row (ganttex08.php)


    +

    +

    +

    Note

    +

    There are two special markers MARK_LEFTTRIANGLE and + MARK_RIGHTTRIANGLE not normally available that are used to + format the visual indication of a group bar header. See Grouping activities

    +

    +

    +
    +

    Specifying a fill pattern for the activity bar

    + +

    The pattern and color for an activity bar is specified with the method

    +

    +

    • +

      GanttBar::function + SetPattern($aPattern,$aColor="blue",$aDensity=95)

      +

    +

    +

    The available patterns together with the symbolic names are given in Table 16.1. Gantt bar patterns.

    +

    +

    Table 16.1. Gantt bar patterns

    + +
    +

    +

    GANTT_LDIAG

    +
    +

    +

    GANTT_RDIAG

    +
    +

    +

    GANTT_HLINE

    +
    +

    +

    GANTT_VLINE

    +
    +

    +

    GANTT_SOLID

    +
    +

    +

    GANTT_HVCROSS

    +
    +

    +

    GANTT_DIAGCROSS

    +
    +

    +

    GANTT_3DPLANE

    +
    +


    +

    +

    +

    Note

    +

    In Table 16.1. Gantt bar patterns.we have used different + value for the $aDensity parameter to better show the pattern. + Depending on the pattern we have used a density in the range 85 to + 95.

    +

    +

    +
    +

    Adding captions to activities

    + +

    The caption text is a text string that is shown to the right of the activity bar. + It can have different usages, for example a common use is to show the initials of + the person (or persons) responsible for completing a specific activity.

    +

    The caption is accessed through the "$caption" property of the bar. + This property is an instance of the Text class and hence inherits all the common + text formatting options.

    +

    The following line sets the caption to the string "[AG]"

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$activity->caption->Set('[AG]')
    +$activity->caption->SetFont(FF_FONT2,FS_BOLD);
    +?>

    +

    +

    Figure 16.67. Adding a caption to a Gantt bar shows a small cut out from a gantt + chart that shows the typical appearance of a gantt bar caption.

    +

    +

    Figure 16.67. Adding a caption to a Gantt bar

    + +
    Adding a caption to a Gantt bar
    +


    +

    +

    In addition to specifying the caption as shown above the caption text can also be + specified directly when creating a gantt bar as the fifth parameter as the following + example shows

    +

    +

    1
    +
    $activity = new GanttBar(0, 'Activity 1', '2001-11-21', '2001-12-20', '[BS,ER]') ;

    +

    +

    In order to specify the distance between the Gantt object and the caption text the + method

    +

    +

    • +

      GanttPlotObject::SetCaptionMargin($aMargin)

      +

    +

    +

    is used. For example, to increase the margin to 20 pixels for a gantt bar the + following line must be added

    +

    +

    1
    +
    $activity->SetCaptionTitle(20);

    +

    +
    +

    Adding progress indicators

    + +

    To indicate the progress of a specific activity it is also possible to add a + progress indicator to each bar. This progress indicator consists of a smaller bar + within the bar. By default this progress bar is black and 70% of the height of the + bar. These parameter can all be changed.

    +

    The properties for the progress indicator are accessed through the 'progress' + property and it's methods.

    +

    To set the progress for a specific activity you only specify the percent as a + fraction (0-1). As in

    +

    +

    1
    +
    $activity->progress->Set( 0.4 )

    +

    +

    In each activity uses the default format for the progress indicator, a solid bar. + To make it clearer we have also modified the caption to reflect the displayed + progress. (At the same time we also modified the scale headers just to illustrate + some more formatting options).

    +

    +

    Figure 16.68. Adding progress bars ot the gantt chart (ganttex14.php)

    Adding progress bars ot the gantt chart (ganttex14.php)


    +

    +

    To specify a different format for the progress the following method is used

    +

    +

    • +

      Progress::SetPattern($aPattern,$aColor="blue",$aDensity=98)

      +

      The parameters follow the same structure as patterns for the activity + bars

      +

    +

    +

    We can now modify the progress bar above, for example by adding the line

    +

    +

    1
    +
    $activity->progress->SetPattern( BAND_RDIAG , "blue" );

    +

    +

    and we then get the result shown in Figure 16.69. Modifying the format for the progress pattern (ganttex15.php)

    +

    +

    Figure 16.69. Modifying the format for the progress pattern (ganttex15.php)

    Modifying the format for the progress pattern (ganttex15.php)


    +

    +
    +
    +

    Adding visual indication of constraints between gantt objects

    + +

    With Gantt charts there is often the need to illustrate constrains between one or + several activities. One of the most common constrain is that on activity can't start + before some other activity has finished. The constrain is visualized as an arrow between + two gantt objects.

    +

    The library supports visualization of the following four types of constraints

    +

    +

    +
    +

    +

    Figure 16.70. Start to end constraint

    + +
    Start to end constraint
    +


    +

    +

    Start to End

    +
    +

    +

    Figure 16.71. Start to start constraint

    + +
    Start to start constraint
    +


    +

    +

    Start to Start

    +
    +

    +

    Figure 16.72. End to start constraint

    + +
    End to start constraint
    +


    +

    +

    End to Start

    +
    +

    +

    Figure 16.73. End to end constraint

    + +
    End to end constraint
    +


    +

    +

    End to End

    +
    +

    +

    +

    To visualize a constrain the method SetConstrain() is called on the first + Gantt object that is the first part of the constraint. The signature for this method + is

    +

    +

    • +

      GanttObject::SetConstrain($aRow,$aType,$aColor='black',

      +

      $aArrowSize=ARROW_S2, $aArrowType=ARROWT_SOLID)

      +

      $aRow, The target row for the constrain

      +

      $aType, The type of constraints. Can be one of the following + symbolic defines

      +

      +

      • +

        CONSTRAIN_STARTSTART

        +
      • +

        CONSTRAIN_STARTEND

        +
      • +

        CONSTRAIN_ENDSTART

        +
      • +

        CONSTRAIN_ENDEND

        +

      +

      +

      $aColor, The color of the constraint arrow

      +

      $aArrowSize, The size of the constraint arrow. Can eb one of + the following symbolic defines

      +

      +

      • +

        ARROW_S1

        +
      • +

        ARROW_S2

        +
      • +

        ARROW_S3

        +
      • +

        ARROW_S4

        +
      • +

        ARROW_S5

        +

      +

      +

      $aArrowType, specifies the visual appearance of the arrow. + Can be one of the following symbolic defines

      +

      +

      • +

        ARROWT_SOLID, Using a solid arrow and arrow + head

        +
      • +

        ARROWT_OPEN, Using an outline arrow and outline + arrow head

        +

      +

      +

    +

    +

    If we assume that the gantt chart have two activity bars (Gantt bars) defined as

    +

    +

    1
    +2
    +
    $activity1 = new GanttBar(0,'First activity','2001-01-01','2001-03-01');
    +$activity2 = new GanttBar(1,'Second activity','2001-02-01','2001-04-15');

    +

    +

    and that we need to visualize a end-to-start constraint from $activity1 + to $activity2 we must add the following statement

    +

    +

    1
    +
    $activity1->SetConstrain(1,CONSTRAIN_ENDSTART);

    +

    +

    +

    Note

    +

    The actual path followed by the arrow is controlled by some heuristics to make + it clear what the constrain is. It has been a design decision that in order to + keep the API simple the user has no further detailed controlled on the actual + path followed.

    +

    +

    +
    +

    Grouping activities

    + +

    It is common to group activities. There is no special type for activity bars that are + used to illustrate grouping. The common way of illustrating this (as have been used + above) is to add "half" a triangle marker at both ends of the bar.

    +

    The library provides two special types of marks that are handled slightly different + than other markers just to cater for illustrating groups of activities. If the left or + right marker (see the section on adding left and right markers) are of type + MARK_LEFTTRIANGLE or MARK_RIGHTTRIANGLE those triangles + will be drawn under the bars to give the effect show in the examples above.

    +

    It is also a good idea to make the grouping bars have slightly less height than normal + activity bars since the end triangles will visually "grow" the bar. Remember that the + size of the bar can be adjusted by adding an extra parameter in the creation of the bar + and can be specified as either an absolute or as a relative (0-1) value, see Adding Gantt activity bars

    +

    So to get the effect we want for a group bar we have to use the two lines

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$groupbar->leftMark->SetType( MARK_LEFTTRIANGLE );
    +$groupbar->leftMark->Show();
    +$groupbar->rightMark->SetType( MARK_RIGHTTRIANGLE );
    +$groupbar->rightMark->Show();
    +?>

    +

    +

    to add the typical group markers at the left and right end of an otherwise standard + activity bar as can bee seen in Figure 16.74. Group markers

    +

    +

    Figure 16.74. Group markers

    + +
    Group markers
    +


    +

    +

    +

    Note

    +

    Since there is not yet any formatting support to accomplish the effect of + indentation for the titles so this is accomplished by using a fixed width font + and adding spaces in front of the title.

    +

    +

    +
    +

    Simplifying creation of basic Gantt charts

    + +

    As we have shown in the previous examples constructing a Gantt chart consists of a + number of repetitive tasks; Create the individual activity bars, add possible + constraints, format them and finally add them to the graph.

    +

    Since many basic Gantt charts that doesn't need a very high degree of customization + and has an almost identical (but repetitive structure) the library offers a "wrapper" + method that takes a structured specification of the activities and implements most of + these repetitive tasks which will make the graphs scripts much simpler.

    +

    The only drawback is that in order to keep the specification simple (which is the + whole purpose) there are very limited options to format the activities.

    +

    The wrapper method has the following signature

    +

    +

    • +

      GanttGraph::function CreateSimple($aData, $aConstrains=array(), + $aProgress=array())

      +

      $aData, Specification of activities described below

      +

      $aConstraints, (optional) List of constraints

      +

      $aProgress, (optional) List of progress values

      +

    +

    +

    The specification of the activities used for this wrapper method has the following + structure

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    $spec = array(
    +    array( <act1_row>, <act1_type>, <act1_title>, <act1_start>, <act1_end>, <act1_caption>, <act1_csimtarget>, <act1_title_csimtarget> ),
    +    array( <act2_row>, <act2_type>, <act2_title>, <act2_start>, <act2_end>, <act2_caption>, <act2_csimtarget>, <act2_title_csimtarget> ),
    +    ...
    +    array( <actN_row>, <actN_type>, <actN_title>, <actN_start>, <actN_end>, <actN_caption>, <actN_csimtarget>, <actN_title_csimtarget> ));

    +

    +

    Each array within the specification creates one activity. The fields have the + following meaning

    +
    • +

      <act_row>, Which row in the gantt chart this activity + shall be drawn on

      +
    • +

      <act_type>, What type of activity is this. The type is one + of the following symbolic defines

      +

      +

      • +

        ACTYPE_NORMAL, A standard activity bar

        +
      • +

        ACTYPE_MILESTONE, A milestone activity

        +
      • +

        ACTYPE_GROUP, Create a grouping activity bar by + adding start and end group marks

        +

      +

      +
    • +

      <act_title>, The title for the activity, can be either a + text string or an array to specify several title when several title columns + have been specified

      +
    • +

      <act_start>, <act_end>, Start and end date + for the activity. For ACTYPE_MILESTONE only the <act_start> shall be + specified.

      +
    • +

      <act_caption>, The optional caption text for the + activity

      +

    The (optional) constraints specification has the following + structure

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    $constraints = array(
    +    array(<act1_row>, <act2_row>, <type>),
    +    array(<act1_row>, <act2_row>, <type>),
    +    ...
    +    array(<act1_row>, <act2_row>, <type>));

    +

    +

    +

    +

    +

    Finally the (optional) progress specification has the structure

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    $progress = array(
    +    array( <act1_row>, <act1_progress> ),
    +    array( <act2_row>, <act2_progress> ),
    +    ...
    +    array( <act2_row>, <act2_progress> ));

    +

    +

    +

    • +

      <act_row>, The row that has the activity with the specified + progress

      +
    • +

      <act_progress>, The progress value for the activity at the specified + row

      +

    +

    +

    This does perhaps not look like a simplification but the following example will show + that it really is.

    +

    The following example will create a gantt graph with two activities, one milestone and + all grouped together by a group bar. The specification for these activities will + be

    +

    +

    1
    +2
    +3
    +4
    +5
    +
     $data  = array(
    +  array( 0 , ACTYPE_GROUP ,     "Phase 1" ,         "2001-10-26" , "2001-11-23" , "" ),
    +  array( 1 , ACTYPE_NORMAL ,    "  Label 2" ,       "2001-10-26" , "2001-11-13" , "[KJ]" ),
    +  array( 2 , ACTYPE_NORMAL ,    "  Label 3" ,       "2001-11-20" , "2001-11-22" , "[EP]" ),
    +  array( 3 , ACTYPE_MILESTONE , "  Phase 1 Done" ,  "2001-11-23" , "M2" ) );

    +

    +

    Note that we use spaces to get a the titles indented according to the group + structure.

    +

    We now only need to create a very basic gantt chart with some selected scale headers + and perhaps also a title. We then call the CreateSimple() method with the + data specification above as the argument and that is all we must do.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +
    <?php
    +// Create a basic graph and set a title
    +$graph = new  GanttGraph ();
    +$graph->title->Set( "Gantt Graph using CreateSimple()" );
    + 
    +// Setup a scale
    +$graph->ShowHeaders( GANTT_HYEAR  |  GANTT_HMONTH  |  GANTT_HDAY  |  GANTT_HWEEK );
    +$graph->scale->week->SetStyle( WEEKSTYLE_FIRSTDAY );
    + 
    +// Add the specified activities
    +$graph->CreateSimple ( $data );
    + 
    +// .. and stroke the graph
    +$graph->Stroke (); 
    +?>

    +

    +

    Compare this to all the $act = new GanttBar(..) etc. we would have had to + add and format using the "manual" method of adding activities to gantt graph. A complete + example of this is shown in Figure 16.75. Using the CreateSimple() wrapper method (ganttsimpleex1.php)

    +

    +

    Figure 16.75. Using the CreateSimple() wrapper method (ganttsimpleex1.php)

    Using the CreateSimple() wrapper method (ganttsimpleex1.php)


    +

    +

    As we mentioned above the format options are very limited when using + CreateSimple() since that is the whole idea. However, there are two + methods to at least partially affect the format and the visual appearance of the + activities.

    +

    +

    • +

      GanttGraph::SetSimpleFont($aFont,$aSize)

      +

      $aFont, Font family for titles

      +

      $aSize, Font size for titles

      +
    • +

      GanttGraph::SetSimpleStyle($aPattern,$aColor,$aFillColor)

      +

      $aPattern, Specifies the pattern (if any) to use for filling + the activity bars

      +

      $aColor, The pattern color

      +

      $aFillColor, The fill color of the activity bar

      +

    +

    +
    +

    Using multiple title columns

    + +

    It is often of interest not only to show one title for a gantt bar but often one wants + to show, title, start date, end date, duration or effort and so on. Up until now we + have, to keep things simple only shown a single title for each activity. We will now + show how to use an arbitrary number of columns/titles for each gantt activity (gantt bar + or gantt milestone).

    +

    +

    Figure 16.76. Using multiple columns as titles for activties (ganttmonthyearex3.php)

    Using multiple columns as titles for activties (ganttmonthyearex3.php)


    +

    +

    To use multiple columns there are two steps needed.

    +

    +

    1. +

      The number of columns to be used as titles together with the headings and + the headings properties like text, font and color are specified

      +
    2. +

      The second step is to add the proper titles to each activity to be + displayed in the specified columns

      +

    +

    +

    To set the columns the "Activity information" property of the scale must be accessed. + To specify the headers of the title column the following method is used

    +

    +

    • +

      ActivityInfo::SetColTitles($aHeaderArray, $aMinWidths)

      +

    +

    +

    The following code excerpt shows an example on how to do this

    +

    +

    1
    +2
    +3
    +
    $graph->scale->actinfo->SetColTitles(
    +    array( 'Note', 'Task', 'Duration', 'Start', 'Finish' ),
    +    array( 30 , 100 ));

    +

    +

    Furthermore it is possible to modify the background colors and the style and colors of + the vertical dividing grid lines. In the previous image we used the lines

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$graph->scale->actinfo->SetBackgroundColor( 'green:0.5@0.5' );
    +$graph->scale->actinfo->SetFont( FF_ARIAL , FS_NORMAL , 10 );
    +$graph->scale->actinfo->vgrid->SetStyle ( 'solid' );
    +$graph->scale->actinfo->vgrid->SetColor ( 'gray' ); 
    +?>

    +

    +

    The style for the grid lines is as usual specified with one of the strings be + "solid","dashed", "dotted" or + "longdashed" as in other line formatting contexts within the library.

    +

    It is also possible to specify if a small "3D" effect should be used in the titles. By + default this is enabled. You can easily turn this of with a call to

    +

    +

    1
    +
    $graph->scale->actinfo->SetStyle( ACTINFO_2D );

    +

    +

    To adjust the colors of the vertical dividing lines in the title the method + SetColor() is used as in

    +

    +

    1
    +
    $graph->scale->actinfo->SetColor('navy');

    +

    +

    Once the format of the title column is set up the data in the columns (the texts) + needs to be entered.

    +

    This is done when the activity bars are added to the graph. By default only a single + columns is used as a title and then the title of the activity is specified as a string. + When multiple columns are used then the title of each activity is specified as an array + of texts, each entry in the array corresponding to one column.

    +

    Specifying two column titles could be done with the following creation of the activity + bar

    +

    +

    1
    +2
    +3
    +
    $title1 = '...';
    +$title2 = '...';
    +$bar = new GanttBar(0 ,array( $title1 , $title2 ), "2003-11-23" , "2003-12-05" );

    +

    + +

    Adjusting the individual fonts for each column

    + +

    Note: This feature is only available in versions >= 3.0.3 + of the library.

    +

    When using the method GanttBar::title::SetFont() the same font will + be applied to all columns for that particular activity. To specify individual fonts + for each column the method GanttBar::title::SetColumnFonts() must be + used.

    +

    This method accept an array of font arrays where each font array specifies the + font family, style and size for that particular column. If fewer fonts specification + than columns are given then the remaining columns will be using the default fonts + specification (as defined by the SetFont() method).

    +

    For example the two lines of code

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$bar->title->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$bar->title->SetColumnFonts(array(array(FF_ARIAL,FS_BOLD,11)));
    +?>

    +

    +

    will cause the first column to be set in a bold font and the remaining columns + falling back to the default non-bold font style.

    +

    A complete example on how to use this is shown in Figure 16.77. Using different fonts for individual columns (ganttcolumnfontsex01.php) below.

    +

    +

    Figure 16.77. Using different fonts for individual columns (ganttcolumnfontsex01.php)

    Using different fonts for individual columns (ganttcolumnfontsex01.php)


    +

    +
    +

    Adding an overview title for all columns

    + +

    It is possible to add a title that spans all the defined title columns. An example + of this is shown in Figure 16.78. Adding a spanning title over all title columns (ganttmonthyearex4.php) . This title is + specified with the property "$tableTitle" of the scale. Specifying a + table title will automatically adjust the height of the column titles to fit the + table title. The small code snippet below shows how to add a title.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$graph->scale->tableTitle->Set( 'Phase 1' );
    +$graph->scale->tableTitle->SetFont( FF_ARIAL , FS_NORMAL , 12 );
    +$graph->scale->SetTableTitleBackground( 'darkgreen@0.6' );
    +$graph->scale->tableTitle->Show( true );
    +?>

    +

    +

    +

    Figure 16.78. Adding a spanning title over all title columns (ganttmonthyearex4.php)

    Adding a spanning title over all title columns (ganttmonthyearex4.php)


    +

    +

    +

    Caution

    +

    Remember that the overall height available for both title column header + and the spanning column title is limited to the height of the specified + scale header. This means that having only a single scale header will not + leave enough room to add a spanning title.

    +

    +

    +
    +
    +

    Built-in icons for use in activity titles

    + +

    To assist in getting visual clues to how to interpret activities in the Gantt chart it + is possible to add icons in the title columns. These icons can also act as hot-spots in + CSIM graphs. The available built-in icons are listed in Figure 16.79. Built-in icons for Gantt charts together with there symbolic names.

    +

    In order to add an icon in a title column first an instance of class + IconPlot is created and it is then added in exactly the same was as a text + string. The signature for the constructor is

    +

    +

    • +

      IconPlot::__construct($aIcon,$aScale=1)

      +

      $aIcon, is either one of the symbolic names in Figure 16.79. Built-in icons for Gantt charts or a text string which is a filename of + an arbitrary image to use as icon.

      +

      $aScale, is the initial scaling of the image

      +

    +

    +

    For example the following code snippet adds a "folder open image" in the first column + and scaling it to be 60% of its original size

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$iconopen = new  IconImage (GICON_FOLDEROPEN , 0.6);
    +$title2 = '...' ;
    +$bar  = new  GanttBar (0 ,array( $iconopen , $title2 ), '2003-11-23' , '2003-12-05' ); 
    +?>

    +

    +

    To instead use an arbitrary image as icon the code would have to be changed to

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$iconopen = new  IconImage ('myiconimage.jpg', 0.6);
    +$title2 = '...' ;
    +$bar  = new  GanttBar (0 ,array( $iconopen , $title2 ), '2003-11-23' , '2003-12-05' ); 
    +?>

    +

    +

    +

    Figure 16.79. Built-in icons for Gantt charts

    + +
    +
    +

    Built-in icons for Gantt charts

    +

    GICON_WARNINGYELLOW

    +
    +

    Built-in icons for Gantt charts

    +

    GICON_WARNINGRED

    +
    +

    Built-in icons for Gantt charts

    +

    GICON_TEXT

    +
    +

    Built-in icons for Gantt charts

    +

    GICON_ENDCONS

    +
    +

    Built-in icons for Gantt charts

    +

    GICON_STARTCONS

    +
    +

    Built-in icons for Gantt charts

    +

    GICON_MAIL

    +
    +

    Built-in icons for Gantt charts

    +

    GICON_CALC

    +
    +

    Built-in icons for Gantt charts

    +

    GICON_MAGNIFIER

    +
    +

    Built-in icons for Gantt charts

    +

    GICON_LOCK

    +
    +

    Built-in icons for Gantt charts

    +

    GICON_STOP

    +
    +

    Built-in icons for Gantt charts

    +

    GICON_FOLDEROPEN

    +
    +

    Built-in icons for Gantt charts

    +

    GICON_FOLDER

    +
    +

    Built-in icons for Gantt charts

    +

    GICON_TEXTIMPORTANT

    +
      
    +
    +


    +

    +

    An example of using icons in the titles is shown in Figure 16.80. Adding built in icons in titles (gantticonex1.php)

    +

    +

    Figure 16.80. Adding built in icons in titles (gantticonex1.php)

    Adding built in icons in titles (gantticonex1.php)


    +

    +
    +

    More general Gantt formatting

    + +

    In this section we will show a few more ways by which you may customize the gantt + chart itself. This include among other thing

    +

    +

    • +

      Adding a table title (not to be confused with the graph title)

      +
    • +

      Adjusting appearance of the various lines in the bar chart

      +
    • +

      Adjusting the zoom factor for the width when using automatic + scaling

      +

    +

    +

    Adjusting the scale zoom factor

    + +

    By default the scale will be just wide enough to fit the chosen scale headers with + some small margins on each side. It is possible to adjust the width when using + automatic graph sizing by setting a zoom factor for the scale. The default width + corresponds to a zoom factor of 1.0.

    +

    The zoom factor is adjusted by the method

    +

    +

    • +

      GanttGraph::SetZoomFactor($aZoomFactor)

      +

      $aZoomFactor, A real number that specifies the zoom of + the date scale. A zoom factor of 2.0 will double the default horizontal + spacing.

      +

    +

    +

    In the following two examples the same Gantt chart is first shown with a scale + factor of 0.7 (=70% of the original width) and in Figure 16.82. A zoom factor of 1.5 (ganttex13-zoom2.php) a zoom factor of 1.5 (=150%) is used.

    +

    +

    Figure 16.81. A zoom factor of 0.7 (ganttex13-zoom1.php)

    A zoom factor of 0.7 (ganttex13-zoom1.php)


    +

    +

    +

    Figure 16.82. A zoom factor of 1.5 (ganttex13-zoom2.php)

    A zoom factor of 1.5 (ganttex13-zoom2.php)


    +

    +

    +

    Note

    +

    There is no limit for the zoom factor but from a practical point of view + the useful range is [0.5,3.0]

    +

    +

    +
    +

    Adding a table title

    + +

    The (default) white area in the top left of the gantt table may have a title. This + is accessed by the 'tableTitle' property of the gantt scale. Using this + is straightforward as the following code snippet shows.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$graph->scale->tableTitle->Set( '(Rev: 1.22)' );
    +$graph->scale->tableTitle->SetFont( FF_FONT1 , FS_BOLD );
    +$graph->scale->SetTableTitleBackground( 'silver' );
    +$graph->scale->tableTitle->Show (); 
    +?>

    +

    +

    The example lines above also changes the default white background to silver. An + example of this is shown in Figure 16.83. Adding a table title in the top left corner (ganttex16.php) . As can be seen the + width of the left column which holds all the titles has been adjusted to make it + wide enough to fit the table title.

    +

    +

    Figure 16.83. Adding a table title in the top left corner (ganttex16.php)

    Adding a table title in the top left corner (ganttex16.php)


    +

    +
    +

    Modifying the divider lines

    + +

    The vertical and horizontal lines between the activity titles and the plot area + and the bars can be modified by accessing the vertical divider + 'divider' and the horizontal divider 'dividerh' properties + of the scale. Figure 16.84. Gantt divider lines shows the exact location + of the divider lines.

    +

    +

    Figure 16.84. Gantt divider lines

    + +
    Gantt divider lines
    +


    +

    +

    Again, this is straightforward as the following code snippet shows.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$graph->scale->divider->SetWeight( 3 );
    +$graph->scale->divider->SetColor( 'navy' );
    +$graph->scale->dividerh->SetWeight( 3 );
    +$graph->scale->dividerh->SetColor( 'navy' ); 
    +?>

    +

    +

    An example of this can be seen in Figure 16.85. Adjusting the plot box around the gantt chart (ganttex18.php)

    +
    +

    Modifying the box around the plot

    + +

    In a similar manner to the other plots in the library the Box around the plot can + be modified with the gantt graph method 'GanttGraph::SetBox()' . The + following line will result in a thicker plot box around the plot area as can be seen + in Figure 16.85. Adjusting the plot box around the gantt chart (ganttex18.php)

    +

    +

    1
    +
    $graph->SetBox(true, 'navy', 3);

    +

    +

    +

    Figure 16.85. Adjusting the plot box around the gantt chart (ganttex18.php)

    Adjusting the plot box around the gantt chart (ganttex18.php)


    +

    +
    +

    Horizontal grids and alternating line colors

    + +

    In order to make large charts easier to read it is possible to specify alternating + an horizontal grid and optional alternating line colors in the background for Gantt + charts. The horizontal grid is accessed through the Graph::hgrid + property and the line (used in the grid) is accessed through the + Graph::hgrid::line sub-property.

    +

    In order to specify alternating line colors the following method is used

    +

    +

    • +

      HorizontalGridLine::SetRowFillColor($aColor1,$aColor2='')

      +

      $aColor1, $aColor2, alternating color for + each activity line

      +

    +

    +

    For example, to use an alternating blue background with blue grid line the + following lines would have to be added to the graph script

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +// Setup a horizontal grid
    +$graph->hgrid->Show();
    +$graph->hgrid->line->SetColor( 'lightblue' );
    +$graph->hgrid->SetRowFillColor( 'darkblue@0.9' ); 
    +?>

    +

    +

    An example,of this is shown in Figure 16.86.  (gantthgridex1.php)

    +
    +

    Adding icons to Gantt graphs

    + +

    In the same way as for ordinary x-y graphs it is possible to add small images (or + icons) to a Gantt graph by creating an instance of class IconPlot and + then adding that instance to the graph.

    +

    For example the following line will add an icon (similar to what was shown in ??) + to a gantt chart with the result shown in Figure 16.86.  (gantthgridex1.php)

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$icon = new IconPlot('penguin.png' , 0.01 , 0.95 , 1 , 15 );
    +$icon->SetAnchor('left', 'bottom');
    +$graph->Add( $icon ); 
    +?>

    +

    +

    +

    Figure 16.86.  (gantthgridex1.php)

    (gantthgridex1.php)


    +

    +
    +

    Adjusting the vertical spacing between activity bars

    + +

    By default the library adds 20% margin above and below each activity bar. In order + to set the activities closer or further away from each other the method

    +

    +

    • +

      GanttGraph::SetVMarginFactor($aFractionMargin)

      +

    +

    +

    can be used. For example

    +

    +

    1
    +
    $graph->SetVMarginFactor(0.0);

    +

    +

    will cause the gantt bars to touch each other since there will be no margins. If + we instead use

    +

    +

    1
    +
    $graph->SetVMarginFactor(1.0);

    +

    +

    we will in effect get "double-line-spacing" since we add the width of one activity + height as margin. The default 40% corresponds to

    +

    +

    1
    +
    $graph->SetVMarginFactor(0.4);

    +

    +
    +

    Adjusting the margins with auto-sizing

    + +

    It is possible to use GanttGraph::SetMargin() to specify the margin + for a Gantt graph even when the vertical height is determined automatically. For + example to generate a graph with no left, right or bottom margin the following lines + would be needed

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$graph = new GanttGraph ( 500 );
    +$graph->SetMargin (0, 0, 30, 0); 
    +?>

    +

    +
    +

    Limiting the date range for the Gantt chart

    + +

    By default the scale will be wide enough to make room for all specified + activities. It is however possible to manually set the scale range to limit the size + of the Gantt chart.

    +

    This is done by calling the method

    +

    +

    • +

      GanttGraph::SetDateRange($aStartDate, $aEndDate)

      +

    +

    +

    For example the following code snippet would set the specified start and end + date

    +

    +

    1
    +
    $graph->SetDateRange('2001-12-20', '2002-01-20');

    +

    +
    +

    Specifying the first day in the week

    + +

    By default Monday is the first day of the week. It is possible to manually set an + arbitrary start day by calling the method

    +

    +

    • +

      GanttScale::SetWeekStart($aStartDay)

      +

      $aStartDay, Specified as an integer in the range 0-6 + where 0=Sunday, 1=Monday, ..., 6=Saturday

      +

    +

    +
    +

    Adding plot icons to the graph

    + +

    In the same way as was described in Adding icons (and small images) to the graph for x-y graphs it is possible to add icons and country flags to a Gantt chart. + The following code snippet adds a Norwegian flag to the top left corner of a + graph

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    <?php
    +// Setup the Gantt graph
    +$graph = new GanttGraph();
    + 
    +// Create some activities
    +// ...
    + 
    +$icon = new IconPlot();
    +$icon->SetAnchor('left','top');
    +$icon->SetCountryFlag('norway');
    +$icon->SetPos(5,5);
    +$icon->SetMix(50);
    +$icon->SetScale(1.0);
    + 
    +// The above four method calls could also have been done as
    +// $icon->SetCountryFlag('norway', 5,5, 1.0, 50);
    + 
    +$graph->Add($icon);
    + 
    +// Any other gantt formatting
    +// ...

    +

    +

    The result of adding these lines to a typical Gantt chart is shown in Figure 16.87. Adding a country flag to the top left corner of the gantt graph (ganttex17-flag.php)

    +

    +

    Figure 16.87. Adding a country flag to the top left corner of the gantt graph (ganttex17-flag.php)

    Adding a country flag to the top left corner of the gantt graph (ganttex17-flag.php)


    +

    +

    For more details on adding icons to a graph see Adding icons (and small images) to the graph .

    +
    +

    Adding text strings to the graph

    + +

    In exactly the same way as was described in Adding arbitrary texts to the graph it is also possible to add arbitrary + formatted text paragraphs to the gantt chart.

    +

    The position of the text strings is specified as either an absolute position in + pixels (as usual the top left corner is (0,0)) or the position can be specified as a + scale position with date and row index. The following two method of the text class + is used for this

    +

    +

    • +

      Text::SetPos($aPosX, $aPosY)

      +

      Set the absolute position for the text anchor point

      +
    • +

      Text::SetScalePos($aDate,$aRow)

      +

      Set the position for the text anchor point using the actual date scale + (as the horizontal position) and the row number as the vertical + position.

      +

    +

    +

    For example the lines below show how to add one text with absolute scale position + in the top left corner and one text string at the second row at the date + "2002-01.01"

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +
    <?php
    +// Add text to top left corner of graph
    +$txt1 = new Text();
    +$txt1->SetPos(5,2);
    +$txt1->Set("Note:\nEstimate done w148");
    +$txt1->SetFont(FF_ARIAL,FS_BOLD,12);
    +$txt1->SetColor('darkred');
    +$graph->Add($txt1);
    + 
    +// Add text to the top bar
    +$txt2 = new Text();
    +$txt2->SetScalePos('2002-01-01',1);
    +$txt2->SetFont(FF_ARIAL,FS_BOLD,12);
    +$txt2->SetAlign('left','center');
    +$txt2->Set("Remember this!");
    +$txt2->SetBox('yellow');
    +$graph->Add($txt2);
    +?>

    +

    +

    The result of adding these lines to a typical gantt graph is shown in Figure 16.88. Adding two text objects to a Gantt graph (gantt_textex1.php)

    +

    +

    Figure 16.88. Adding two text objects to a Gantt graph (gantt_textex1.php)

    Adding two text objects to a Gantt graph (gantt_textex1.php)


    +

    +

    Since there is no other changes in functionality we refer to Adding arbitrary texts to the graph for a full discussion of text + paragraph features.

    +

    +

    Note

    +

    This feature was added in v2.5

    +

    +

    +
    +
    +

    Localizing the Gantt chart scale

    + +

    Since the name of the week and months are constructed by the library it must be + possible to adjust which locale should be used to construct the names.

    +

    Depending on the server setup of PHP there might be support for several locales. By + default the locale is set to use the default locale on the server.

    +

    A specific locale is specified with the locale string, for example American English is + specified with the string 'EN_US', British English with 'EN_UK' 'nl_NL' for Dutch and so + on. If the server installation does not support the specified locale an error message + like the one shown in Figure 16.89. Error message when using an unsupported Locale in Gantt chart will be shown.

    +

    +

    Tip

    +

    If the server is running on a Unix derivate the supported locales can be found + by the following command

    +

    $> locale -a

    +

    +

    +

    +

    Figure 16.89. Error message when using an unsupported Locale in Gantt chart

    + +
    Error message when using an unsupported Locale in Gantt chart
    +


    +

    +

    To set the locale the following method is used

    +

    +

    • +

      GanttScale::SetDateLocale($aLocaleString)

      +

    +

    +

    For example to set the locale to swedish the following line would be needed

    +

    +

    1
    +
    $graph->scale->SetDateLocale('sv_SE');

    +

    +

    An example of using Swedish locale is shown in Figure 16.90. Using Swedish locale. Notice the L for Lordag instead of S for Saturday (ganttex19.php)

    +

    +

    Figure 16.90. Using Swedish locale. Notice the L for Lordag instead of S for Saturday (ganttex19.php)

    Using Swedish locale. Notice the L for Lordag instead of S for Saturday (ganttex19.php)


    +

    +

    +

    Note

    +

    Internally the library uses the PHP function setlocale() and only + affects the category LC_TIME

    +

    +

    +
    +

    CSIM Support in Gantt charts

    + +

    The generic description on how to use CSIM (Client side image maps) together with the + library is fully described in Chapter 10. Using CSIM (Client side image maps) .

    +

    Adding CSIM (Client side Image Maps) to Gantt charts

    + +

    Gantt charts can have independent (different targets) hot spots in both the + activities and in the associated title (or titles) for each activity. For activities + both activity bars and milestones support CSIM functionality.

    +

    The targets and the associated "Alt" text for an activity bar is set by using one + or both of the methods

    +
    • +

      GanttPlotObject::SetCSIMTarget($aTarget,$aAlt='', + $aWinTarget='')

      +
    • +

      GanttPlotObject::SetCSIMAlt($aAlt)

      +

    The following code snippet sets CSIM targets fro bot the entire + activity bar as well as the title

    +

    +

    1
    +2
    +
    $bar->SetCSIMTarget( "http://localhost/abc/", "Alt Text for the bar" );
    +$bar->title->SetCSIMTarget( "http://localhost/abc", "Alt Text for the title" );

    +

    +

    The following properties of a Gantt object can have CSIM targets

    +

    +

    • +

      GanttPlotObject::title,

      +
    • +

      GanttPlotObject::leftmark, + BarPlot::rightmark

      +
    • +

      GanttPlotObject::caption

      +

    +

    +

    +

    Note

    +

    In the example directory there are several complete examples of how to use + CSIM together with Gantt charts.

    +

    +

    +
    +

    Specifying CSIM entries for column titles

    + +

    In exactly the same way as for a single title it is possible to specify individual + CSIM targets for each of the title columns. This is accomplished by specifying an + array for both the target and the alt text instead of a single string as arguments + for SetCSIMTarget() The following code snippet shows how to specify + that.

    +

    +

    1
    +2
    +3
    +
    $bar->title->SetCSIMTarget(
    +    array('sometarget1.html', 'sometarget1.html'),
    +    array('alttext1', 'alttext2'));

    +

    +
    +
    +

    Some final Gantt graph examples

    + +

    The example given below illustrates one or more of the features available for the + gantt graphs and shows how they may be combined to achive the wanted effect.

    +

    +

    Examples of using hours and minute scales

    + +

    +

    Figure 16.91. Using multiple title columns with a scale of one day (gantthourminex1.php)

    Using multiple title columns with a scale of one day (gantthourminex1.php)


    +

    +

    +

    Note

    +

    It is not possible to show less than one day in the scale. This is a + limitation of the library.

    +

    +

    +
    +

    Adding multiple activities with markers and indenting titles

    + +

    +

    Figure 16.92. Using multiple markers and indenting titles in the Gantt chart (ganttex30.php)

    Using multiple markers and indenting titles in the Gantt chart (ganttex30.php)


    +

    +
    +

    Using grouping of bars together with constraints

    + +

    +

    Figure 16.93. Using a grouping bar together with constraints (ganttconstrainex2.php)

    Using a grouping bar together with constraints (ganttconstrainex2.php)


    +

    +
    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch17.html b/Societes/ric/jpgraph/docs/chunkhtml/ch17.html new file mode 100755 index 00000000..2ef29f13 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch17.html @@ -0,0 +1,145 @@ +Chapter 17. Additional graph types

    Chapter 17. Additional graph types

    + +

    These chapter describes the types of graphs supported by the library that is not a + standard graph type used to display data series.

    +

    LED bill boards

    + +

    This feature allows the creation of displayed letters (some) and digits which have the + look of a 4x7 LED display.

    +

    In order to use this feature the module "jpgraph_led.php" must be + included.

    +

    +

    Caution

    +

    In order to use the LED module the PHP installation must have multi-byte + strings enabled so that the function mb_strlen() is available. This + is normally enabled at compile time for PHP by specifying the options + --enable-mbstring --enable-mbregex when configuring the compile + options.

    +

    +

    +

    The figures below shows some samples of the characters supported and the available + colors

    +

    +

    +
    +

    Figure 17.1. LEDC_GREEN (ledex1.php)

    LEDC_GREEN (ledex1.php)

    +
    +

    Figure 17.2. LEDC_RED (ledex2.php)

    LEDC_RED (ledex2.php)

    +
    +

    Figure 17.3. LEDC_YELLOW (ledex3.php)

    LEDC_YELLOW (ledex3.php)

    +
    +

    Figure 17.4. LEDC_BLUE (ledex5.php)

    LEDC_BLUE (ledex5.php)

    +
    +

    Figure 17.5. LEDC_GRAY (ledex6.php)

    LEDC_GRAY (ledex6.php)

    +
    +

    Figure 17.6. LEDC_INVERTGRAY (ledex17.php)

    LEDC_INVERTGRAY (ledex17.php)

    +
    +

    Figure 17.7. LEDC_CHOCOLATE (ledex7.php)

    LEDC_CHOCOLATE (ledex7.php)

    +
    +

    Figure 17.8. LEDC_PERU (ledex8.php)

    LEDC_PERU (ledex8.php)

    +
    +

    Figure 17.9. LEDC_GOLDENROD (ledex9.php)

    LEDC_GOLDENROD (ledex9.php)

    +
    +

    Figure 17.10. LEDC_KHAKI (ledex10.php)

    LEDC_KHAKI (ledex10.php)

    +
    +

    Figure 17.11. LEDC_OLIVE (ledex11.php)

    LEDC_OLIVE (ledex11.php)

    +
    +

    Figure 17.12. LEDC_LIMEGREEN (ledex12.php)

    LEDC_LIMEGREEN (ledex12.php)

    +
    +

    Figure 17.13. LEDC_FORESTGREEN (ledex13.php)

    LEDC_FORESTGREEN (ledex13.php)

    +
    +

    Figure 17.14. LEDC_TEAL (ledex14.php)

    LEDC_TEAL (ledex14.php)

    +
    +

    Figure 17.15. LEDC_STEELBLUE (ledex15.php)

    LEDC_STEELBLUE (ledex15.php)

    +
    +

    Figure 17.16. LEDC_NAVY (ledex16.php)

    LEDC_NAVY (ledex16.php)

    +
    +

    +

    +

    A LED display is constructed by creating an instance of class DigitalLED47

    +

    +

    • +

      DigitalLED47::__construct($aRadius = 2, $aMargin= 0.6)

      +

      The first argument specifies the radius of each "led-light" and the second + argument the margin around each character. Adjusting the radius is the only + way to adjust the size of the LED characters.

      +

    +

    +

    In order to generate the billboard the method

    +

    +

    • +

      DigitalLED47::Stroke($aValStr, $aColor , $aFileName = + '')

      +

      $aValStr, The string to be displayed

      +

      $aColor, one of the available colors as shown in the figures + above

      +

      $aFileName, An optional file name which specifies a file that + the image will be written to. No image will be streamed back to the browser + in this case.

      +

    +

    +

    is called with the string to be displayed as the first argument. The following code + snippet shows how to create a green LED bill board

    +

    +

    1
    +2
    +
    $led = new DigitalLED74();
    +$led->Stroke('0123456789. ABCDEFGHIJKL',LEDC_GREEN);

    +

    +

    In order to improve visual quality of the LED display it uses super sampling + internally to achieve the anti-alias smoothing effect. The number of oversampling is + specified with

    +

    +

    • +

      DigitalLED47::SetSupersampling($aSuperSampling)

      +

      By default a 2:times super-sampling is used. Using any value higher than 4 + does not give any visual improvements

      +

    +

    +

    In the three figures below different levels of super sampling is used, in the left + most image no super sampling is used (super sampling=1), in the middle figure super + sampling=2 (the default) and in the rightmost figure super sampling is set to 4

    +

    +

    +
    +

    Figure 17.17. Supersampling=1 (ledex4.php)

    Supersampling=1 (ledex4.php)

    +
    +

    Figure 17.18. Supersampling=2 (default) (ledex4.1.php)

    Supersampling=2 (default) (ledex4.1.php)

    +
    +

    Figure 17.19. Supersampling=4 (ledex4.2.php)

    Supersampling=4 (ledex4.2.php)

    +
    +

    +

    +

    Cyrillic character support

    + +

    In addition to most of the basic latin characters the library also have some + support for Cyrillic characters. Due to the limed resolution (4x7) some more complex + cyrillic characters are not rendered very faithfully. The available rendering for + the cyrillic alphabet is shown in Figure 17.20. LED 4x7 Cyrillic alphabet support

    +

    +

    Figure 17.20. LED 4x7 Cyrillic alphabet support

    + +
    +
    +

    LED 4x7 Cyrillic alphabet support

    +
    +

    LED 4x7 Cyrillic alphabet support

    +
    +
    +


    +

    +

    +

    Caution

    +

    Since the library internally uses utf8 character encoding it means that + the string passed on to the library must also be encoded in utf8. In case + the characters have another encoding, say cp1251, they must first be + converted to utf8. This could for example be done by the PHP function + iconv()..

    +

    +

    +

    (This is the only place in the library that is truly multi-byte text safe.)

    +
    +
    + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch17s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch17s02.html new file mode 100755 index 00000000..18462987 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch17s02.html @@ -0,0 +1,109 @@ +Captcha generation

    Captcha generation

    + +

    Captcha is an acronym for "Completely Automated Public Turing + test to tell Computers and Humans Apart." and is often used to prevent + automatic sign-ups in various WEB-based applications.

    +

    The library support generation of a simple captchas based on hand drawn "ugly" letters + and digits. They are combined into a word which can be presented as an image.

    +

    +

    Warning

    +

    It should be noted that with ample processing power and modern image analysis + it is probably not hat difficult to actually break these captchas so the usage + of these captchas in mission critical environments is entirely the + responsibility of the user.

    +

    +

    +

    The module in the library that is needed is + "jpgraph_antispam.php" and behaves as a simplified plot module.

    +

    ?? showsn an example on how this can look

    +

    +

    Figure 17.21. Sample illustration of captcha challenge (antispamex01.php)

    Sample illustration of captcha challenge (antispamex01.php)


    +

    +

    Captcha images have less functionality then the usual graphs generated with the + library in order to keep this utility reasonable small. The primary limitation is that + there are no additional formatting options for the images and the image generated will + always use the JPEG image format. Hence it is not possible to change this to use, for + example, PNG format.

    +

    Generating Captchas

    + +

    There are two basic alternatives on how to generate the content of the + captcha

    +

    +

    1. +

      Submit a string that should be used

      +
    2. +

      Automatically generate a random string. If this alternative is chosen + then the user of the library should save the created string and compare + it to what the user enters.

      +

    +

    +

    In order to write a script to generate a new challenge there are four steps to be + completed.

    +

    +

    1. +

      include the library file "jpgraph_antispam.php". + Note that there is no need to include the + "jpgraph.php" library since all functionality + is included in this library file.

      +

      +

      1
      +
      require_once "jpgraph_antispam.php";

      +

      +
    2. +

      a new instance of the class AntiSpam must be created

      +

      +

      1
      +
      $spam = new  AntiSpam();

      +

      +
    3. +

      the string to be used in the challenge must be specified. To + automatically generate a suitable string use

      +

      +

      1
      +2
      +
      // The argument determines the length of the generated string
      +$chars = $spam-> Rand(5);

      +

      +

      If instead the string to be used should be specified this string + should be specified in the initial creation of the + AntiSpam() or by calling the Set() method + as in

      +

      +

      1
      +
      $spam-> Set('aui8k');

      +

      +

      Please note that in order to minimize the risk for confusion the + letters 'O' and the number '0' (zero) is not allowed since they are too + alike and can be mistaken for each other.

      +
    4. +

      output the image with a call the method Stroke() on the + created instance of the AntiSpam class.

      +

      +

      1
      +2
      +3
      +
      if( $spam->Stroke () === false  ) {
      +    die("Illegal or no data to plot");
      +}

      +

      +

      Note that we have put a guard around the output since in the case of + an error this method will result a boolean false value. As with the + other graph types it is possible to write the generated image to a file + by submitting a file name as an argument to Stroke().

      +

    +

    +

    In order to practically use this module the challenge string is most likely passed + to the image script via a URL argument, saved to a file and the read back in the + HTML page that is providing the captcha challenge.

    +

    +

    Warning

    +

    It should be pointed out on more time that modern image analysis + technology is fairly good at automatically read these types of images and + translate it back to the letters they represent so this type of captchas + does not provide any guarantee for automatic sign-ups. There are active + academic research on how to apply various types of artificial intelligence + to read many types of captchas.

    +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch17s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch17s03.html new file mode 100755 index 00000000..b1dd1439 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch17s03.html @@ -0,0 +1,484 @@ +Canvas graphs

    Canvas graphs

    + +

    This is basically a free form blank canvas where any graphics can be drawn. Canvas + graphs area also used as the basic graph for graphic tables as described in Chapter 19. Graphical tables

    +

    The library provides two module files to aid with this + "jpgraph_canvas.php" and + "jpgraph_canvtools.php". The second module is strictly speaking + not necessary but provides a number of utility classes that makes it much easier to work + with canvas.

    +

    Canvas graphs is provided as a layer to make is easier to create arbitrary images and + still make use of some of the convenience methods available in the library (like font + and color support).

    +

    Canvas graphs makes it easy to use the low level graphic drawing primitives in the + library provided by the two classes

    +

    +

    1. +

      class Image

      +

      This is the basic low level class that encapsulates the GD library by + providing a complete framework for using graphic primitives with a coherent + API and many convenience methods.

      +
    2. +

      class RotImage

      +

      This is a descendant of class Image that in addition to the basic + primitives also provides support for rotation of graphs

      +

    +

    +

    It is possible to work at different levels of abstraction when creating a + canvas.

    +

    +

    1. +

      By only using the basic Image and RotImage classes. This can be considered + one abstraction level above the most basic GD libraries

      +
    2. +

      By making use of the functionality provided by class + CanvasGraph and the supporting classes (e.g. class + CanvasScale). By using the canvas scale class it is possible to + defining a coordinate grid on the canvas. These coordinates can then be used + instead of absolute pixels which is necessary to us ethe basic Image and + RotImage classes.

      +

    +

    +

    A concrete example of how canvas graphs can be used can be seen in Figure 8.1. List of all latin TTF fonts. (listfontsex1.php) where all the available fonts have been drawn on a + canvas.

    +

    Creating a simple canvas

    + +

    Creating a canvas gives you the opportunity draw arbitrary shapes on a "white" + piece of paper. Let's first show a simple example were we just draw a text box.

    +

    +

    Example 17.1. A simple canvas graph to draw a text box (canvasex01.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id: canvasex01.php,v 1.3 2002/10/23 08:17:23 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    + 
    +// Setup a basic canvas we can work 
    +$g = new CanvasGraph(400,300,'auto');
    +$g->SetMargin(5,11,6,11);
    +$g->SetShadow();
    +$g->SetMarginColor("teal");
    + 
    +// We need to stroke the plotarea and margin before we add the
    +// text since we otherwise would overwrite the text.
    +$g->InitFrame();
    + 
    +// Draw a text box in the middle
    +$txt="This\nis\na TEXT!!!";
    +$t = new Text($txt,200,10);
    +$t->SetFont(FF_ARIAL,FS_BOLD,40);
    + 
    +// How should the text box interpret the coordinates?
    +$t->Align('center','top');
    + 
    +// How should the paragraph be aligned?
    +$t->ParagraphAlign('center');
    + 
    +// Add a box around the text, white fill, black border and gray shadow
    +$t->SetBox("white","black","gray");
    + 
    +// Stroke the text
    +$t->Stroke($g->img);
    + 
    +// Stroke the graph
    +$g->Stroke();
    + 
    +?>


    Figure 17.22. A simple canvas graph to draw a text box (canvasex01.php)

    A simple canvas graph to draw a text box (canvasex01.php)


    +

    +

    The example in Figure 17.22. A simple canvas graph to draw a text box (canvasex01.php) starts by creating a 400x200 + sized image.

    +

    The margins are then set to to get a frame around the image.

    +

    For canvases the margins has no effect in the way coordinates are entered. Top + left is (0,0) and bottom right (including any potential margin and shadow) is the + maximum. In this case the coordinate range are X:0-399, and Y:0-199

    +

    The InitFrame() method is then called which actually strokes the + margin and plotarea to the graph. Since everything is stroked in the order the + commands are given it is necessary to make sure that the graphical objects that + should be on top are stroked last. This is different from the other graph types + since they will hide these details and stroke the details in the graph in the + correct order.

    +

    We then create a Text object, setup it's properties, including the absolute screen + position where we want the text, and then stroke it.

    +

    The Text::Align() method specifies the anchor point of the text as + explained in Chapter 8. Text and font handling

    +

    We also specify that the lines within the paragraph should be centered with a call + to Text::ParagraphAlign() Since we also choose to have a box around the + text we have to make use of the method Text::SetBox() which is used to + specify the fill color, the border color and the shadow color (if the shadow color + is set to '', no shadow will be used).

    +

    Now we are ready to stroke the text onto the canvas. In order to do so we must + specify the graphical context when stroking the text. The current graphic context is + always available in the "$img" property of the CanvasGraph + class.

    +

    This specification of the graphical context is needed to all Stroke method that is + external to the main graph class.

    +
    +

    Adding lines and rectangles to a canvas

    + +

    A canvas also makes a good background for using standard graphic primitives, for + example circles and lines. The first thing to remember is that this requires working + with absolute screen coordinates and secondly that all drawing primitives are found + in the Image Class accessible as a property of the Graph class.

    +

    This means that to draw a line between absolute coordinates (0,0) and (100,100) + the following code must be created

    +

    +

    1
    +
    $graph->img->Line(0, 0, 100, 100);

    +

    +

    The following example shows how to create some basic graphic shapes on a + canvas

    +

    +

    Example 17.2. Drawing some basic geometric shapes on a canvas (canvasex02.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id: canvasex02.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    + 
    +// Setup a basic canvas we can work 
    +$g = new CanvasGraph(400,200,'auto');
    +$g->SetMargin(5,11,6,11);
    +$g->SetShadow();
    +$g->SetMarginColor("teal");
    + 
    +// We need to stroke the plotarea and margin before we add the
    +// text since we otherwise would overwrite the text.
    +$g->InitFrame();
    + 
    +// Add a black line
    +$g->img->SetColor('black');
    +$g->img->Line(0,0,100,100);
    + 
    +// .. and a circle (x,y,diameter)
    +$g->img->Circle(100,100,50);
    + 
    +// .. and a filled circle (x,y,diameter)
    +$g->img->SetColor('red');
    +$g->img->FilledCircle(200,100,50);
    + 
    +// .. add a rectangle
    +$g->img->SetColor('green');
    +$g->img->FilledRectangle(10,10,50,50);
    + 
    +// .. add a filled rounded rectangle
    +$g->img->SetColor('green');
    +$g->img->FilledRoundedRectangle(300,30,350,80,10);
    +// .. with a darker border
    +$g->img->SetColor('darkgreen');
    +$g->img->RoundedRectangle(300,30,350,80,10);
    + 
    +// Stroke the graph
    +$g->Stroke();
    + 
    +?>


    Figure 17.23. Drawing some basic geometric shapes on a canvas (canvasex02.php)

    Drawing some basic geometric shapes on a canvas (canvasex02.php)


    +

    +
    +

    Using a canvas scale together with the shape class

    + +

    The previous method using absolute coordinates works. But it gives very little + flexibility in, for example, scaling the image. Working with absolute coordinates is + therefore not very practical and gets tedious for complex figures.

    +

    To mitigate these issues the library offers a convenience class, class + CanvasScale, this will allow the creation of a suitable scale that will + make it easier to both create and scale the graph.

    +

    In order to use a canvas scale the module + "jpgraph_canvtools.php" must first be included. In addition + to the canvas scale class this module also provides the companion Shape + class. This companion shape class is used to draw shapes using the specified scale + onto the canvas.

    +

    Using the scale is quite simple and requires only two steps

    +

    +

    1. +

      An instance of the scale class is first created with the CanvasGraph + instance as the first parameter

      +
    2. +

      The wanted scale is then specified with the wanted x and y + scales

      +

    +

    +

    The following code snippet shows how this is done

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    <?php
    +$graph = CanvasGraph(400,300);
    + 
    +// ... other canvas formatting
    + 
    +// Create a new scale
    +$scale = new CanvasScale( $graph );
    +$scale->Set($xmin, $xmax, $ymin, $ymax);
    + 
    +// ...
    +?>

    +

    +

    The next step needed to be able to create geometric shapes is to create an + instance of class Shape and give the canvas graph and the scale as the two + parameters as the following line shows.

    +

    +

    1
    +2
    +3
    +
    <?php
    +$shape = new Shape($graph, $scale);
    +?>

    +

    +

    It is now possible to create arbitrary geometric shapes by using the provided + methods in the shape class. The shape class provides the following methods

    +

    +

    • +

      Shape::SetColor($aColor)

      +
    • +

      Shape::Line($x1,$y1,$x2,$y2)

      +
    • +

      Shape::Polygon($p,$aClosed=false)

      +
    • +

      Shape::FilledPolygon($p)

      +
    • +

      Shape::Bezier($p,$aSteps=40)

      +
    • +

      Shape::Rectangle($x1,$y1,$x2,$y2)

      +
    • +

      Shape::FilledRectangle($x1,$y1,$x2,$y2)

      +
    • +

      Shape::Circle($x1,$y1,$r)

      +
    • +

      Shape::FilledCircle($x1,$y1,$r)

      +
    • +

      Shape::RoundedRectangle($x1,$y1,$x2,$y2,$r=null)

      +
    • +

      Shape::FilledRoundedRectangle($x1,$y1,$x2,$y2,$r=null)

      +
    • +

      Shape::ShadowRectangle($x1,$y1,$x2,$y2,$fcolor=false,$shadow_width=null,$shadow_color=array(102,102,102))

      +
    • +

      Shape::SetTextAlign($halign,$valign="bottom")

      +
    • +

      Shape::StrokeText($x1,$y1,$txt,$dir=0,$paragraph_align="left")

      +
    • +

      Shape:: + IndentedRectangle($xt,$yt,$w,$h,$iw=0,$ih=0,$aCorner=3,$aFillColor="",$r=4)

      +

    +

    +

    We can now show a complete example of using the shape class

    +

    +

    Example 17.3. Creating a canvas graph with a scale and using the shape class (canvasex03.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id: canvasex03.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_canvtools.php');
    + 
    +// Define work space
    +$xmax=20;
    +$ymax=20;
    + 
    +// Setup a basic canvas we can work 
    +$g = new CanvasGraph(400,200,'auto');
    +$g->SetMargin(5,11,6,11);
    +$g->SetShadow();
    +$g->SetMarginColor("teal");
    + 
    +// We need to stroke the plotarea and margin before we add the
    +// text since we otherwise would overwrite the text.
    +$g->InitFrame();
    + 
    +// Create a new scale
    +$scale = new CanvasScale($g);
    +$scale->Set(0,$xmax,0,$ymax);
    + 
    +// The shape class is wrapper around the Imgae class which translates
    +// the coordinates for us
    +$shape = new Shape($g,$scale);
    +$shape->SetColor('black');
    + 
    + 
    +// Add a black line
    +$shape->SetColor('black');
    +$shape->Line(0,0,20,20);
    + 
    +// .. and a circle (x,y,diameter)
    +$shape->Circle(5,14,2);
    + 
    +// .. and a filled circle (x,y,diameter)
    +$shape->SetColor('red');
    +$shape->FilledCircle(11,8,3);
    + 
    +// .. add a rectangle
    +$shape->SetColor('green');
    +$shape->FilledRectangle(15,8,19,14);
    + 
    +// .. add a filled rounded rectangle
    +$shape->SetColor('green');
    +$shape->FilledRoundedRectangle(2,3,8,6);
    +// .. with a darker border
    +$shape->SetColor('darkgreen');
    +$shape->RoundedRectangle(2,3,8,6);
    + 
    + 
    +// Stroke the graph
    +$g->Stroke();
    + 
    +?>


    Figure 17.24. Creating a canvas graph with a scale and using the shape class (canvasex03.php)

    Creating a canvas graph with a scale and using the shape class (canvasex03.php)


    +

    +

    To show the usefulness of using the scale class Figure 17.25. Changing the image size to create a smaller version of the previous example (canvasex04.php) shows the result after just changing the image size but keeping the code the + same. The relation between the shapes will remain the same but in a smaller format + to fit the new image size.

    +

    +

    Figure 17.25. Changing the image size to create a smaller version of the previous example (canvasex04.php)

    Changing the image size to create a smaller version of the previous example (canvasex04.php)


    +

    +

    If we instead wanted to keep the image size but shrink the shapes we could just + make the scale twice as large which would result in Figure 17.26. Keeping the image size but changing the scale (canvasex05.php)

    +

    +

    Figure 17.26. Keeping the image size but changing the scale (canvasex05.php)

    Keeping the image size but changing the scale (canvasex05.php)


    +

    +

    We previously mentioned that the Shape class was a wrapper around the image class + with one exception. The exception is that it contains one additional method which + draws an "indented rectangle". An indented rectangle is a rectangle where one of + it's four corners have been moved into the rectangle Figure 17.27. Example of using an indented rectangle (canvasex06.php) shows an example of using this shape.

    +

    +

    Figure 17.27. Example of using an indented rectangle (canvasex06.php)

    Example of using an indented rectangle (canvasex06.php)


    +

    +

    As a final note we mention the utility class class + CanvasRectangleText This can be used to add a text with a rounded + rectangle (possibly filled) onto the canvas. Figure 8.1. List of all latin TTF fonts. (listfontsex1.php) + where all the available fonts were shown were using this class.

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch18.html b/Societes/ric/jpgraph/docs/chunkhtml/ch18.html new file mode 100755 index 00000000..d6ab2829 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch18.html @@ -0,0 +1,197 @@ +Chapter 18. Miscellaneous formatting and tools

    Chapter 18. Miscellaneous formatting and tools

    + +

    This chapter tries to collect all other formatting options (and tricks) available in + the library that doesn't really fit anywhere else

    +

    Linear regression analysis

    + +

    The library offers support to do basic linear regression analysis with the help of + the utility : class LinearRegression defined in the utility module + "jpgraph_utils.inc.php". With this class it is possible to + make a linear estimation of data and calculate some of the basic statistics of the + data, i.e. correlation coefficient and standard error.

    +

    The LinearRegression class is instantiated with the data to be + analyzed and it is then possible to both get hold of the statistics that corresponds + to the data and also to automatically calculate a range of estimated y-values for a + given set of x-coordinates.

    +

    The following code snippet shows how to instantiate a regression analysis with + some data

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    <?php
    +require_once( 'jpgraph_utils.inc.php')
    + 
    +// Some data to be analyzed (both x, and y-data must be specified)
    +$datay = array( ... ) ;
    +$datax = array( ... ) ;
    + 
    +// Instantiate the linear regression class
    +$linreg = new LinearRegression($datax, $datay);
    + 
    +// Get the basic statistics
    +list( $stderr, $corr ) = $linreg->GetStat();
    + 
    +// Get a set of estimated y-value for x-values in range [0,20]
    +list($x, $esty) = $linreg->GetY(0,20)
    + 
    +...
    + 
    +?>

    +

    +

    The methods available in the LinearRegression class that can be used + are

    +

    +

    • +

      LinearRegression::GetStat()

      +

      Returns an array with (standard error, correlation coefficient, + determination coefficient)

      +

      The closer the correlation coefficient is to 1 the more of the data + variation can be explained by a linear estimate.

      +
    • +

      LinearRegression::GetAB()

      +

      Return an array of the linear coefficients (a,b) where the linear + estimation is y = a + b*x

      +
    • +

      LinearRegression::GetY($aMinX, $aMaxX, $aStep=1)

      +

      Return an array with (xdata, ydata) corresponding to an x-range + between x values in range [$aMinX, $aMaxX] + with steps of $aStep

      +

    +

    +

    The following example shows how to use this utility class to plot both the + original data as well as the estimated linear line.

    +

    +

    Example 18.1. Linear regression using utility class (example16.6.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_utils.inc.php');
    + 
    +// Create some "fake" regression data
    +$datay = array();
    +$datax = array();
    +$a= 3.2;
    +$b= 2.5;
    +for($x=0; $x < 20; ++$x) {
    +    $datax[$x] = $x;
    +    $datay[$x] = $a + $b*$x + rand(-20,20);
    +}
    + 
    +$lr = new LinearRegression($datax, $datay);
    +list( $stderr, $corr ) = $lr->GetStat();
    +list( $xd, $yd ) = $lr->GetY(0,19);
    + 
    +// Create the graph
    +$graph = new Graph(300,250);
    +$graph->SetScale('linlin');
    + 
    +// Setup title
    +$graph->title->Set("Linear regression");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +$graph->subtitle->Set('(stderr='.sprintf('%.2f',$stderr).', corr='.sprintf('%.2f',$corr).')');
    +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,12);
    + 
    +// make sure that the X-axis is always at the
    +// bottom at the plot and not just at Y=0 which is
    +// the default position
    +$graph->xaxis->SetPos('min');
    + 
    +// Create the scatter plot with some nice colors
    +$sp1 = new ScatterPlot($datay,$datax);
    +$sp1->mark->SetType(MARK_FILLEDCIRCLE);
    +$sp1->mark->SetFillColor("red");
    +$sp1->SetColor("blue");
    +$sp1->SetWeight(3);
    +$sp1->mark->SetWidth(4);
    + 
    +// Create the regression line
    +$lplot = new LinePlot($yd);
    +$lplot->SetWeight(2);
    +$lplot->SetColor('navy');
    + 
    +// Add the pltos to the line
    +$graph->Add($sp1);
    +$graph->Add($lplot);
    + 
    +// ... and stroke
    +$graph->Stroke();
    + 
    +?>


    Figure 18.1. Linear regression using utility class (example16.6.php)

    Linear regression using utility class (example16.6.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch19.html b/Societes/ric/jpgraph/docs/chunkhtml/ch19.html new file mode 100755 index 00000000..92d2b304 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch19.html @@ -0,0 +1,41 @@ +Chapter 19. Graphical tables

    Chapter 19. Graphical tables

    + +

    Introduction

    + +

    Note

    This module is only available in the pro-version of the library.

    +

    When visualizing data it is often useful to have both a quick graphical view which can + show high level trends and a detailed table view with the exact figures. The table + module supports the creation of an almost endless varieties of tables.

    +

    The table library module will allow any kind of rectangular table with an arbitrary + number of rows and columns. user selectable size, cells may be merged with other cells, + have individual background colors, different fonts and various types of borders.

    +

    Since graphic tables can be created as objects this also means that they can be added + to ordinary graph types in much the same way as for example icons and text + objects.

    +

    A good way to get an idea of the capabilities of the library is to review Figure 19.1. Standalone table examples where a number of different tables that all have + ben created with the library are shown. In the remainder of this chapter the APIs + available will be explained by means of a number of worked through examples.

    +

    Since table has full support for Client Side Image Maps (CSIM) they can also be used a + launch pad to take the user to further detailed information.

    +

    In addition to adding data tables to graphs it is also possible to create graphic + tables on the fly all by its own. This has the advantage compared with HTML tables to + allow users to make copies of the table while maintaining the exact formatting of the + table.

    +

    Figure 19.1. Standalone table examples

    + +
    Standalone table examples
    +

    +

    In addition to the standalone tables shown above another common usage is to combine a + graph and a table. An example of how this can be done is shown in Figure 19.2. Combining a graphic table and a bar graph below. The exact steps how to create this graph + is described in Case study: Adding a table to a bar graph.

    +

    Figure 19.2. Combining a graphic table and a bar graph

    + +
    Combining a graphic table and a bar graph
    +

    +
    + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch19s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch19s02.html new file mode 100755 index 00000000..cd25b089 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch19s02.html @@ -0,0 +1,699 @@ +Constructing tables

    Constructing tables

    + +

    In this section we will introduce the basic concepts of tables and explain the basic + formatting possibilities that are available.

    +

    Basic tables

    + +

    A table is created as an instance of the class GTextTable and can be + managed in much the same way as for example Icons, Texts or other plot objects. It + can be added to the graph (at specified X and Y coordinates) using the standard + Graph::Add() method.

    +

    The creation of a table starts with including the necessary file + "jpgraph_table.php" which contains the class definition for + the GTextTable class. In order to create a table we also need a graph + context to which the table can be added. This can be either one of the ordinary + graphs which used an instance of class Graph or to create a stand alone + table by using an instance of class CanvasGraph

    +

    Creating a new table is then just matter of creating a new instance of the + class GTextTable and calling the initialization method with the + desired size (in rows and columns) of the table. To display the table stand alone we + also need to create a canvas graph and then add the table to the graph.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php
    +require_once "jprgraph/jpgraph.php";
    +require_once 'jpgraph/jpgraph_canvas.php';
    +require_once "jprgaph/jpgraph_table.php";
    + 
    +// Setup a basic canvas graph context
    +$graph = new CanvasGraph(630,600);
    + 
    +// Create a basic graph
    +$table = new GTextTable();
    +$table->Init(5,7); // Create a 5 rows x 7 columns table
    + 
    +...
    + 
    +// Add the table to the graph
    +$graph->Add($table);
    + 
    +// and send back to the client
    +$graph->Stroke();
    +?>

    +

    +

    As can be seen above it is not necessary (but still possible) to specify an + explicit physical size for the table. The physical size of the table will be + automatically determined depending on the content of the table.

    +

    The cells in the table are numbered sequentially where (0,0) is the top left and + (n-1, m-1) is the bottom right cell in a table with n rows and m columns.

    +

    The next step is to populate the table with some data. The content in one cell is + specified with the using one of the following methods

    +

    +

    • +

      GTextTable::Set($aRow, $aCol, $aText)

      +

      Set the specified text in cell ($aRow, + $aCol)

      +

      GTextTable::Set($aData)

      +

      Copy the data in the two dimensional array $aData to the + table

      +
    • +

      GTextTable::SetImage($aRow, $aCol, $aText, + $aImage)

      +

      Set the specified image in cell ($aRow, + $aCol)

      +
    • +

      GTextTable::SetCellCountryFlag($aRow,$aCol,$aFlag,$aScale=1.0,$aMix=100,$aStdSize=3)

      +

      Set the specified country flag in cell ($aRow, + $aCol)

      +

    +

    +

    The Set() method is polymorphic and can be called in two different + ways.

    +

    It can either be used to specify the value of each individual cell by identifying + the cell by its row and column index (starting at 0) ways. For example to continue + the example above we set the first two cells on the first row to 1 and 2 vi the two + calls

    +

    +

    1
    +2
    +3
    +4
    +
    ...
    +$table->Set(0,0,1);
    +$table->Set(0,1,1);
    +...

    +

    +

    The second, and probably less tedious way is to setup a 2-dimensional array + (matrix) with suitable values and then pass that 2-dimensional array as the first + and only argument to the Set() method as the following example + shows

    +

    +

    1
    +2
    +3
    +
    $data = array( array( 12, 7),
    +               array( 10, 5));
    +$table->Set($data)

    +

    +

    If the table is specified by a matrix directly it is not necessary to make the + initial Init() call since it will be automatically determined by the + size of the matrix.

    +

    The following basic full example creates a 2 rows by 4 columns table with + consecutive values. Note here that we make use of CanvasGraph to + provide the graph on which to add the table. The result of this script is shown in + Figure 19.3. The most basic 2x4 table (table_howto1.php)

    +

    +

    Example 19.1. The most basic 2x4 table (table_howto1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Create a canvas graph where the table can be added
    +$graph = new CanvasGraph(70,50);
    + 
    +// Setup the basic table
    +$data = array( array(1,2,3,4),array(5,6,7,8));
    +$table = new GTextTable();
    +$table->Set($data);
    + 
    +// Add the table to the graph
    +$graph->Add($table);
    + 
    +// ... and send back the table to the client
    +$graph->Stroke();
    + 
    +?>


    Figure 19.3. The most basic 2x4 table (table_howto1.php)

    The most basic 2x4 table (table_howto1.php)


    +

    +

    In the example above we also made use of a minor shortcut. If the data to the + table is specified with a 2-dimensional array there is no need to call the + Init() method since the size will be determined by the supplied + array.

    +

    We will not yet begin discussion how to change fonts, colors and grids. Instead we + will focus on the structure of the table and introduce the merge operation.

    +
    +

    Merging cells

    + +

    The only way to change the structure (as opposed to the look & feel) of the + table is by merging two or more cells. The merge operation is done via one of three + method calls:

    +

    +

    • +

      MergeRow()

      +

      Merge all cells in a specified row

      +
    • +

      MergeCol()

      +

      Merge all cells in a specified column

      +
    • +

      MergeCells()

      +

      Merge a rectangular range of cells

      +

    +

    +

    The first two methods are really just simplifications for the third most generic + method. The first two methods merge all the cells in a specified row or column and + the third method merges any arbitrary rectangular range of cells specified by the + upper left nd lower right corner.

    +

    In addition, by default, these calls will also center align the text in the merged + cells (both horizontally and vertically). This can however be adjusted by giving the + wanted alignment as additional argument to the methods or by calling the specific + APIs that controls the alignment of the data within each cell.

    +

    The third (and most generic) method merge a range of cells specified by the top + left and bottom right corner. So, for example, the following line will merge the + rightmost four cells in the previous example

    +

    +

    1
    +
    $table->MergeCells(0,2,1,3);

    +

    +

    +

    Figure 19.4. Merging the rightmost 4 cells in the table (table_howto2.php)

    Merging the rightmost 4 cells in the table (table_howto2.php)


    +

    +

    The merged cell can later on be referenced by the top left of the original merged + cell range. This means that the merged cell in the above example is referred to as + the (0,2) cell.

    +

    If we instead wanted to merge the top row of the table we could have simplified + the call by using one of the alternative merge methods. In this case the + MergeRow() method would be applicable as in

    +

    +

    1
    +
    $table->MergeRow(0);

    +

    +

    which would then give the table as shown in Figure 19.5. Merging the top row (table_howto3.php)

    +

    +

    Figure 19.5. Merging the top row (table_howto3.php)

    Merging the top row (table_howto3.php)


    +

    +

    In summary, the following three rules apply to merging and/or merged cells

    +

    +

    • +

      It is an error to try o merge already merged cells.

      +
    • +

      A merged cell is referenced by the top left cell in the merged range. +

      +
    • +

      All formatting that can be applied to a single cell can also be + applied to a merged cell.

      +

    +

    +
    +

    Font adjustment

    + +

    The most basic way to change the look and feel of the table is to adjust the font + that is used in the different cells in the table. To adjust the font within the + table the following methods are available

    • +

      SetFont(), Specify the default font for the entire table + or for a specified range of cells

      +
    • +

      SetRowFont(), Specify the font for an entire row of cells +

      +
    • +

      SetColFont(), Specify the font for an entire column of + cells

      +
    • +

      SetCellFont(), Specify the font for a single cell

      +
    +

    By default the font in the table is set to FF_FONT1, i.e. the + built-in bit mapped font of medium size. The default color of the font is 'black'.

    +

    +

    Note

    +

    If several font settings are applied to the same cell it will be the last + method call before the table Stroke() method that will take + precedence.

    +

    +

    +

    As a simple example the following script shows how to adjust the font used in the + first merged row in the previous example.

    +

    +

    Figure 19.6. Adjusting the font in the top row (table_howto5.php)

    Adjusting the font in the top row (table_howto5.php)


    +

    +

    The font in Figure 19.6. Adjusting the font in the top row (table_howto5.php) was adjusted with a call to

    +

    +

    1
    +
    $table->SetCellFont(0,0,FF_ARIAL,FS_BOLD,14);

    +

    +

    Polymorphic SetFont()

    +

    Before finishing this section it is worth noting that the SetFont() + method is polymorphic and can be called in two different ways.

    +

    +

    1. +

      In the first way it can be called with a single font (triple) + argument. That font specification will then become the default for all + cells in the table, for example

      +

      +

      1
      +
      $table->SetFont(FF_TIMES,FS_NORMAL,12);

      +

      +

      will set the entire table to use Times TTF font.

      +
    2. +

      In the second way the first four arguments specifies a cell range (top + left, bottom right) to apply the font setting to, for example

      +

      +

      1
      +
      $table->SetFont(0,1,1,2,FF_TIMES,FS_NORMAL,12);

      +

      +

    +

    +
    +

    Color adjustment

    + +

    In order to adjust the look and feel of the table it is possible to set the + following colors of the table:

    +

    +

    • +

      The color of the text/number in each cell

      +
    • +

      The background color of each cell

      +
    • +

      The color of the grid (inside the table) and border (around the table) +

      +

    +

    +

    The font color for a cell (or range of cells) is specified with one of

    +

    +

    • +

      SetColor(), Set the color for a range of cells or the + entire table

      +
    • +

      SetRowColor(), Set the color for a specified row of cells +

      +
    • +

      SetColColor(), Set the color for a specified column of + cells

      +
    • +

      SetCellColor(), Set the color for a specified cells +

      +

    +

    +

    In a similar way the background color (or the fill color) of a cell can be + specified with

    +

    +

    • +

      SetFillColor(), Set the fill color for a range of cells + or the entire table

      +
    • +

      SetRowFillColor(), Set the fill color for a specified row + of cells

      +
    • +

      SetColFillColor(), Set the fill color for a specified + column of cells

      +
    • +

      SetCellFillColor(), Set the fill color for a specified + cells

      +

    +

    +

    The way to adjust the color of the grid and border will be discussed in the + section regarding borders and grids below.

    +

    Polymorphic SetColor() and + SetFillColor()

    +

    In the same manner as SetFont() can act on both all cells and a + specified range of cells the two color setting methods work in the same way. Both + SetColor() and SetFillColor() can both be called + either with a single argument (in which all cells will be addressed) or by giving a + range (top left and bottom right cell) to be acted upon.

    +

    The following method calls will set the background color of the first three cells + in row 2 and 3 and the entire table

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    ...
    +// First set the default fill color to lightgray
    +$table->SetFillColor('lightgray');
    + 
    +// The Set a range to yellow
    +$table->SetFillColor(2,0,3,2,'yellow');
    +...

    +

    +

    Finally we give some concluding examples to make the usage of these methods more + clear.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    ...
    +// Set the default font color for all table cells
    +$table->SetColor('darkgray');
    + 
    +// Set the font color for all cells in row one 
    +$table->SetRowColor(1,'darkgray');
    + 
    +// Set the font color for the first two cells in the second row 
    +// (row with index=1)
    +$table->SetColor(1,0,1,1,'darkgray');
    +...

    +

    +

    Note

    +

    If there are multiple color settings for the same cell then the last method + called before the final Stroke() call will be the color that shows.

    +

    For example the following script sets the color of cell (0,0) to both 'black' + and 'yellow' but since the yellow is the last method to be called this is the + color that will be used for cell (0,0)

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    ...
    +$table->SetRowColor(0,'black');
    +$table->SetColColor(0,'yellow');
    +...
    +$graph->Stroke();

    +

    +
    +

    Finally, we illustrate the usage of these method by continuing with the previous + example and coloring row 0 as shown in Figure 19.7. Merging and setting the colors the top row (table_howto4.php)

    +

    +

    Figure 19.7. Merging and setting the colors the top row (table_howto4.php)

    Merging and setting the colors the top row (table_howto4.php)


    +

    +

    The coloring in Figure 19.7. Merging and setting the colors the top row (table_howto4.php) was accomplished by adding + the following two lines to the previous script.

    +

    +

    1
    +2
    +
    $table->SetCellFillColor(0,0,'orange@0.7');
    +$table->SetCellColor(0,0,'darkred');

    +

    +

    The same effect could also have been accomplished by using the row version of the + color methods as in

    +

    +

    1
    +2
    +
    $table->SetRowFillColor(0,'orange@0.7');
    +$table->SetRowColor(0,'darkred');

    +

    +

    Which sets of methods to use in this case is a matter of personal preference since + both achieve the same effect.

    +
    +

    Adjusting table and cell sizes

    + +

    The exact size of the table can only be indirectly controlled by specifying the + width of the columns and the height of the rows. The width/height can either be + controlled individually on a row by row (or column by column) basis or by giving all + rows/columns the same width/height. This is accomplished by the methods

    +

    +

    • +

      SetMinRowHeight(), Sets the minimum height of rows +

      +
    • +

      SetMinColWidth(), Sets the minimum width of columns +

      +

    +

    +

    As can be noted from the name of the methods the width and height specified is not + necessarily the exact size of the row/column. It's just the minimum size. The actual + size is depending on the text in the cells. The row height (and column width) will + always grow in order to fit the text within the largest cell.

    +

    Polymorphic functions

    +

    The number of arguments to the two methods can in fact be either one or two. If + only one argument is supplied then it is interpretated as the minimum width/height + for all columns/rows in the table. If two arguments are used then the first argument + will specify what row/columns the height/width is specified for.

    +

    Continuing with the table in Figure 19.7. Merging and setting the colors the top row (table_howto4.php) . If we want + to make sure that all the cells in row 1 is at least 35 pixels wide we could add to + add the following in the previous script

    +

    +

    1
    +2
    +3
    +
    ...
    +$table->SetMinColWidth(35);
    +...

    +

    +

    Which would then give the table shown in Figure 19.8. Setting the minimum column width to 35 pixels. (table_howto6.php)

    +

    +

    Figure 19.8. Setting the minimum column width to 35 pixels. (table_howto6.php)

    Setting the minimum column width to 35 pixels. (table_howto6.php)


    +

    +
    +

    Fine tuning cell alignment and cell padding

    + +

    The final bit of important formatting is the ability to specify the alignment of + the data in each of the cells within the table. It is possible to specify both the + horizontal and vertical alignment. The alignment can be specified as one of

    +

    +

    • +

      Horizontal alignment: "left", "right", "center"

      +
    • +

      Vertical alignment: "top", "bottom", "center"

      +

    +

    +

    As usual there are four variants of the alignment methods

    +

    +

    • +

      SetAlign(), Set the align for a range of cells or the + entire table

      +
    • +

      SetRowAlign(), Set the alignment for an entire row +

      +
    • +

      SetColAlign(), Set the alignment for an entire column +

      +
    • +

      SetCellAlign(), Set the alignment for a specific cell +

      +

    +

    +

    Each of the methods accepts two alignment arguments, the horizontal and the + vertical alignment. We don't give any examples here since the usage of these methods + should be obvious.

    +

    +

    Note

    +

    It should be mentioned that in addition to using these methods the + alignment can also be set when using the merge methods (as discussed above). + This is purely as a convenience since it is such a common use case to adjust + the alignment when merging cells.

    +

    +

    +
    +

    Adjusting border and grid lines

    + +

    The final formatting option available is the shape, size and color of the border + and grid lines in the table. As of this writing the library supports the following + styles of grid lines.

    +

    +

    • +

      TGRID_SINGLE, a basic solid line of specified width and + color (default)

      +
    • +

      TGRID_DOUBLE, two lines of equal width separated by the + same width as the line width.

      +
    • +

      TGRID_DOUBLE2, two lines where the left/top line is twice + as thick as the bottom/right line.

      +

    +

    +

    +

    +
    +

    Figure 19.9. Double lines 1 (table_howto7.1.php)

    Double lines 1 (table_howto7.1.php)

    +
    +

    Figure 19.10. Double lines 2 (table_howto7.2.php)

    Double lines 2 (table_howto7.2.php)

    +
    +

    +

    +

    The methods available to adjust the grid lines are

    +

    +

    • +

      SetGrid(), Set the grid line style for all grid lines +

      +
    • +

      SetColGrid(), Set the specified vertical grid line +

      +
    • +

      SetRowGrid(), Set the specified horizontal grid line +

      +

    +

    +

    The borders in Figure 19.9. Double lines 1 (table_howto7.1.php) was modified by adding the + following call to the basic table script.

    +

    +

    1
    +
    $table->SetRowGrid(2,1,'black',TGRID_DOUBLE);

    +

    +

    and in Figure 19.10. Double lines 2 (table_howto7.2.php) +

    +

    +

    1
    +
    $table->SetRowGrid(2,1,'black',TGRID_DOUBLE2);

    +

    +

    The order of the arguments are 1) Row, 2) Width (weight) and 3) Line style.

    +

    Finally, in order to adjust the outer border of the table there is one last method + available

    +

    +

    • +

      SetBorder(), Set the width and color of the outer border +

      +

    +

    +

    +

    Tip

    +

    In order to remove a specific grid line or the border the width is + specified as 0

    +

    +

    +

    As a final example the following script snippet removes many of the grid lines and + borders by adding the following lines to the previous basic table script.

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    ...
    +$table->SetBorder(0);
    +$table->SetGrid(0);
    +$table->SetRowGrid(2,1,'black',TGRID_DOUBLE2);
    +...

    +

    +

    The result of this modification is shown in Figure 19.11. Removing some grid lines and border. In addition we have right aligned all the cells as is common practice for numeric data. (table_howto8.php) + below.

    +

    +

    Figure 19.11. Removing some grid lines and border. In addition we have right aligned all the cells as is common practice for numeric data. (table_howto8.php)

    Removing some grid lines and border. In addition we have right aligned all the cells as is common practice for numeric data. (table_howto8.php)


    +

    +
    +

    Specific number formatting

    + +

    The final method of formatting we will briefly touch upon is the number + formatting. By setting a specific number formatting it is possible to have numeric + values formatted in a uniform way regardless of the original format. The number + format is the same format string that would be used with the printf() + family.

    +

    The available methods for this formatting follows the usual structure

    +

    +

    • +

      SetNumberFormat(), Set the number format for a range or + the whole table

      +
    • +

      SetRowNumberFormat(), Set the number format for a + specific row

      +
    • +

      SetColNumberFormat(), Set the number format for a + specific column

      +
    • +

      SetCellNumberFormat(), Set the number format for a + specific cell

      +

    +

    +

    To illustrate the use of this formatting we start with the table in Figure 19.11. Removing some grid lines and border. In addition we have right aligned all the cells as is common practice for numeric data. (table_howto8.php) . and apply the format string + "%0.1f" which will format the values as floating point values with + one decimal. We do this by adding the method following method call

    +

    +

    1
    +
    $table->SetNumberFormat('%0.1f');

    +

    +

    +

    Figure 19.12. Applying a number format to the data in the cells (table_howto9.php)

    Applying a number format to the data in the cells (table_howto9.php)


    +

    +

    +

    Note

    +

    The number format will only set the number format it will not do any + rounding of the actual values. This is the responsibility of the client. +

    +

    +

    +
    +

    Using images and country flags in the table

    + +

    In addition to ordinary text it is also possible to have arbitrary images (read + from a file) or use one of the built-in country flags available in the library as + background images in the table cells.

    +

    +

    Note

    +

    Remember to include "jpgraph_iconplot.php" if images + should be included and "jpgraph_flags.php" if country + flags are included.

    +

    +

    +

    The methods available for this purpose are

    +

    +

    • +

      SetImage(), Set the same image for all cells or a range + of cells

      +
    • +

      SetCellImage(), Set the image for a specific cell

      +
    • +

      SetRowImage(), Set the image for a row of cells

      +
    • +

      SetColImage(), Set the image for a column of cells +

      +
    • +

      SetCellImageConstrain(), Set the height or width of an + image in a specified cell

      +
    • +

      SetCellCountryFlag(), Use a specified country flag as + image in a specified cell

      +

    +

    +

    For example, to add the United Kingdoms flag in cell (2,1) in the table one would + have to add the call

    +

    +

    1
    +
    $table->SetCellCountryFlag(2,1,'united kingdom');

    +

    +

    as usual with the background images it is possible to scale it and also adjust the + mix-in factor by using additional arguments to the above methods.

    +

    However there is on extra feature available with images and tables. If we wanted + to make sure that the flag is of a specific height or width it is possible to + specify this and have the library auto-scale the image to fit the specified + parameter.

    +

    For example to restrict the height of the UK flag set in cell (2,1) to 20 pixels + the call would be

    +

    +

    1
    +
    $table->SetCellImageConstrain(2,1,TIMG_HEIGHT,20);

    +

    +

    We conclude this section with a small example on the use of country flags in a + table in Figure 19.13. Using country flags in the table cells (table_flagex1.php)

    +

    +

    Figure 19.13. Using country flags in the table cells (table_flagex1.php)

    Using country flags in the table cells (table_flagex1.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch19s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch19s03.html new file mode 100755 index 00000000..d3483ea4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch19s03.html @@ -0,0 +1,11 @@ +CSIM Table support

    CSIM Table support

    + +

    Each cell in a table can be a hotspot target. The following line will make cell (1,1) + a hotspot

    +

    +

    1
    +
    $table->SetCellCSIMTarget(1,1,'tableex02.php','View details');

    +

    +

    As usual it is necessary to call Graph::StrokeCSIM() instead of the + ordinary Graph::Stroke() method to generate the CSIM result.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch19s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch19s04.html new file mode 100755 index 00000000..c98d4877 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch19s04.html @@ -0,0 +1,262 @@ +Table API Overview

    Table API Overview

    + +

    In this overview we do not give details about the arguments required by each method. + Instead this is meant as an overview to get a feel for what is available in the library. + All details are provided in the class reference.

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 19.1. Table API Overview
    Method nameDescription
    Constructing
    GTextTable()Create a new table
    Init()Specify table size
    Set()Specify data in table
    SetPos()Specify position of table in graph
    SetScalePos()Specify scale position of table in graph
    SetAnchorPos()Specify anchor position for table. By default the top left corner of the + table will be aligned with the specified position.
    Merging cells
    MergeCol()Merge all cells in the same column
    MergeRow()Merge all cells in the same row
    MergeCells()Merge all cells in a range
    Font specification
    SetFont()Set default font for range or entire table
    SetRowFont()Set font for a specific row
    SetColFont()Set font for a specific column
    SetCellFont()Set font for a specific cell
    Font color
    SetColor()Set default font color for range or entire table
    SetRowColor()Set font color for a specific row
    SetColColor()Set font color for a specific column
    SetCellColor()Set font color for a specific cell
    Fill color
    SetFillColor()Set fill color for range or entire table
    SetRowFillColor()Set fill color for an entire row
    SetColFillColor()Set fill color for an entire column
    SetCellFillColor()Set fill color fro a specific cell
    Alignment in cells
    SetAlign()Set default align for range or entire table
    SetRowAlign()Set align in a specific row
    SetColAlign()Set align in a specific column
    SetCellAlign()Set align in a specific cell
    Borders and grid
    SetBorder()Set weight of border around the table
    SetGrid()Set style and weight for interior grid
    SetColGrid()Specify grid for a specific column
    SetRowGrid()Specify grid for a specific row
    Background images & country + flags
    SetImage()Use the specified image as background
    SetCellImage()Use the specified image as background
    SetRowImage()Use the specified image as background
    SetColImage()Use the specified image as background
    SetCountryFlag()Use a country flag as background
    SetImageConstrain()Specify width or height for cell image (or flag)
    Width and height of + cells
    SetMinColWidth()Set minumum column width
    SetMinRowHeight()Set minimum row height
    Number formatting
    SetNumberFormat()Set number format for range or entire table
    SetRowNumberFormat()Number format fro a specific row
    SetColNumberFormat()Number format fro a specific column
    SetCellNumberFormat()Number format fro a specific cell
    Cell padding and + margins
    SetPadding()Set default padding for range or all cells
    SetRowPadding()Set padding in a specific row
    SetColPadding()Set padding in a specific column
    SetCellPadding()Set padding in a specific cell
    Text orientation
    SetTextOrientation()Set text orientation for entire table
    SetCellTextOrientation()Set text orientation for a specific cell
    CSIM Handling
    SetCellCSIMTarget()Set URL target for specified cell
    SetCSIMTarget()Set URL target for all cells. By using this method it is also possible + to have an automatic row and column index appended to the target URL as + GET parameters
    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch19s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch19s05.html new file mode 100755 index 00000000..e176b999 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch19s05.html @@ -0,0 +1,48 @@ +Examples

    Examples

    + +

    Example 1

    + +

    Table formatting, variant 1, right adjusted Times font

    +

    +

    Figure 19.14. xx (table_mex00.php)

    xx (table_mex00.php)


    +

    +
    +

    Example 2

    + +

    Table formatting, variant 1, using Times font for data and a sans serit font for + headings together with removed grid lines and filled headers.

    +

    +

    Figure 19.15. xx (table_mex0.php)

    xx (table_mex0.php)


    +

    +
    +

    Example 3

    + +

    Table formatting, variant 2, using the same sans serit font for all information + but with some grid lines.

    +

    +

    Figure 19.16. xx (table_mex1.php)

    xx (table_mex1.php)


    +

    +
    +

    Example 4

    + +

    Table formatting, variant 3, where some data is highlighted and we use a thicker + border.

    +

    +

    Figure 19.17. xx (table_mex3.php)

    xx (table_mex3.php)


    +

    +
    +

    Example 5

    + +

    Show how the table can be turned 90 degrees

    +

    +

    Figure 19.18. Vertical text (table_vtext.php)

    Vertical text (table_vtext.php)


    +

    +
    +

    Example 6

    + +

    The following example shows how to add images (icons) to a number of cells.

    +

    +

    Figure 19.19. Adding an icon (image) in a table cell (table_iconex1.php)

    Adding an icon (image) in a table cell (table_iconex1.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch19s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch19s06.html new file mode 100755 index 00000000..a830f12e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch19s06.html @@ -0,0 +1,158 @@ +Case study: Adding a table to a bar graph

    Case study: Adding a table to a bar graph

    + +

    The goal of this example is to explain in detail how to achieve the graphs shown in + Figure 19.20. Combining a bar graph and a table (tablebarex1.php)

    +

    +

    Figure 19.20. Combining a bar graph and a table (tablebarex1.php)

    Combining a bar graph and a table (tablebarex1.php)


    +

    +

    The graph in Figure 19.20. Combining a bar graph and a table (tablebarex1.php) consists of a standard accumulated + bar graph combined with a table just below the X-axis. The way to create such a graph is + very basic. First create a standard bar graph with some extra bottom margin (to make + room for the table) and then create and position the table below the graph. The only + challenge here is to make sure that the width of the table and graph matches to line up + each column under each bar.

    +

    Lets walk through the steps to do this.

    +

    The data to be plotted in the bar and in the table is created in a table as follows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    <?php
    +$datay = array(
    +    array('Jan','Feb','Mar','Apr','May','Jun'),
    +    array(12,18,19,7,17,6),
    +    array(3,5,2,7,5,25),
    +    array(6,1.5,2.4,2.1,6.9,12.3));
    +?>

    +

    +

    each line in this matrix corresponds to one row in the table and one set of bars that + will make up the accumulated bar plot.

    +

    First let's define some constants that will control the size and position of the graph + and table.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +$nbrbar = 6; // number of bars and hence number of columns in table
    +$cellwidth = 50;  // width of each column in the table
    +$tableypos = 200; // top left Y-coordinate for table
    +$tablexpos = 60;  // top left X-coordinate for table
    +$tablewidth = $nbrbar*$cellwidth; // overall table width
    +$rightmargin = 30;  // right margin in the graph
    +$topmargin = 30  // top margin of graph
    +?>

    +

    +

    The next step is to calculate a suitable size for the entire graph, i.e. the entire + image.

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$height = 320;  // a suitable height for the image
    +$width = $tablexpos+$tablewidth+$rightmargin; // the width of the image
    +?>

    +

    +

    Finally its time ot make use of these constants to rceate the basic graph. Note that + we calculate the bottom margin to just fit the tables selected Y-coordinate position.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$graph = new Graph($width,$height);    
    +$graph->img->SetMargin($tablexpos,$rightmargin,$topmargin,$height-$tableypos);
    +$graph->SetScale('textlin');
    +$graph->SetMarginColor('white');
    +?>

    +

    +

    The rest of the code to create the accumulated bar plot is pretty mundane and we just + show the code here without further comment.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php
    +// Create the bars and the accbar plot
    +$bplot = new BarPlot($datay[3]);
    +$bplot->SetFillColor('orange');
    +$bplot2 = new BarPlot($datay[2]);
    +$bplot2->SetFillColor('red');
    +$bplot3 = new BarPlot($datay[1]);
    +$bplot3->SetFillColor('darkgreen');
    +$accbplot = new AccBarPlot(array($bplot,$bplot2,$bplot3));
    +$accbplot->value->Show();
    +$graph->Add($accbplot);
    +?>

    +

    +

    It's now time to setup the table. The position of the table is determined by the + previous set constants and the original data as specified above.

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$table = new GTextTable();
    +$table->Set($datay);
    +$table->SetPos($tablexpos,$tableypos+1);
    +?>

    +

    +

    The rest of the table formatting is fairly basic and again we just show the necessary + script without further comment.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +
    <?php
    +$table->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$table->SetAlign('right');
    +$table->SetMinColWidth($cellwidth);
    +$table->SetNumberFormat('%0.1f');
    + 
    +// Format table header row
    +$table->SetRowFillColor(0,'teal@0.7');
    +$table->SetRowFont(0,FF_ARIAL,FS_BOLD,11);
    +$table->SetRowAlign(0,'center');
    + 
    +// .. and add it to the graph
    +$graph->Add($table);
    +?>

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch20.html b/Societes/ric/jpgraph/docs/chunkhtml/ch20.html new file mode 100755 index 00000000..32fac26e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch20.html @@ -0,0 +1,50 @@ +Chapter 20. Odometer

    Chapter 20. Odometer

    + +

    Introduction

    + +

    Note

    This module is only available in the pro-version of the library.

    +

    Odometer graphs uses the metaphor of an old fashioned speedometer for cars. It is + normally used to give a quick overview of one specific parameter. Experience have shown + that this type of metaphor is easily and quickly understood by most people. By adding + color indications to the odometer it is very quick to see whether or not a specific + value is within a allowed range or outside.

    +

    Figure 20.1. Odometers shows an overview of some typical + odometers created with the library.

    +

    Figure 20.1. Odometers

    + +
    Odometers
    +

    +

    Features

    + +

    Odometers produced with this package have a wide range of functionality and as you + would expect almost every bit of visual layout is in one way or the other + customisable. For simple use there are suitable default values for most parameters + which will make creation of simple Odometer just a matter of a few lines of code.

    +

    Among other things Odometers support the following features:

    +

    +

    • +

      Both half (semi-circle) and full (circle) odometers are supported +

      +
    • +

      Fully customizable scales and odometer sizes

      +
    • +

      Different size and shapes of the indicator needles

      +
    • +

      Scale color indicators

      +
    • +

      Multiple dials in the same graph

      +
    • +

      Full support for library standard fonts and colors

      +
    • +

      Automatic layout engine for multiple plots in the same graph which + aids in positioning of the graphs without having to specify pixel + coordinates

      +

    +

    +
    +
    + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch20s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch20s02.html new file mode 100755 index 00000000..85e056b4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch20s02.html @@ -0,0 +1,633 @@ +Creating and formatting basic odometer graphs

    Creating and formatting basic odometer graphs

    + +

    In order to use odometer graphs the extension module + "jpgraph_odo.php" must be included in the script (in addition + to the ordinary "jpgraph.php" code module).

    +

    The creation of Odometer graphs otherwise follows the traditional steps in the library + of creating a graph and then adding one or several plots to the canvas.

    1. +

      Create a basic canvas graph as an instance of class + OdoGraph

      +
    2. +

      Create an instance of one or several odometer plots (the dials) as + instances of class OdoPlot, set up the scale and appearance and + then add them to the graph canvas.

      +
    3. +

      Send back the graph to the client with a call to + OdoGraph::Stroke()

      +
    +

    The following script shows the principles

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +
    <?php
    +// Create a new canvas 300x200 pixels
    +$graph = new OdoGraph(300,200);
    + 
    +// Adjust parameters as needed
    +$graph->title->Set(.......)
    +$graph->caption->Set(...)
    + 
    +// Create one of more Odometer
    +$odo1 = new Odometer();
    +$odo2 = new Odometer();
    + 
    +...
    + 
    +// Adjust odometer parameters, colors etc
    +$odo1->needle->Set(21);
    +$odo2->needle->Set(47);
    + 
    +...
    + 
    +// Position the odometer plots vertically
    +$l = new LayoutVert( array($odo1, $odo2, ...) );
    + 
    +// Add the odometers with the proper layout to the canvas
    +$graph->Add( $l );
    + 
    +// If you only have a single odometer you may also write
    +// $graph->Add( $odo1 );
    + 
    +// Send back the image to the client
    +$graph->Stroke();  
    +?>

    +

    +

    +

    A basic odometer

    + +

    The following script shows the simplest possible odometer using just default + values

    +

    +

    Example 20.1. A basic odometer (odotutex00.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,140);
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer();
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(30);
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the client
    +$graph->Stroke();
    + 
    +?>


    Figure 20.2. A basic odometer (odotutex00.php)

    A basic odometer (odotutex00.php)


    +

    +

    The size of the Odometer is determined automatically to fit the given image size + as good as possible. Since the size of the odometer automatically adjust itself to + allow for any odometer caption, graph titles or graph captions there is rarely need + to manually override this automation.

    +

    However it is still possible to manually specify the absolute size (of the radius) + in pixels or as a fraction of the image size.

    +

    To set a specific value top the Odometer radius the following method is + used

    +

    +

    • +

      OdoPlot::SetSize($aRadius) +

      +

    +

    +

    Since clas OdoGraph inherits all the basic graph features we can easily augment + the graph in Figure 20.2. A basic odometer (odotutex00.php) to, for example, have titles by + adding the line

    +

    +

    1
    +
    $graph->title->Set('A suitable graph title');

    +

    +

    In the following chapters we will go through all the options that exists to modify + the size, shape and appearance of the graph.

    +

    +

    Tip

    +

    Remember that since Odometer inherits all the basic graph feature it will + support functionality like image cache (see Efficient graph generation using the built-in cache subsystem.)

    +

    +

    +
    +

    Half and Full Odometers

    + +

    Odometers comes in two fundamental shapes, full and half circle. The default if + nothing else is specified is to create a half circle. The type of odometer is + specified in the creation of the odometer.

    +

    The type is controlled by the two constants

    +

    +

    • +

      ODO_FULL Create a full circle odometer

      +
    • +

      ODO_HALF Create a half circle odometer. This is also the + default value.

      +

    +

    +

    As an example the following odometer plot instantiation will create a full + odometer plot

    +

    +

    1
    +
    $odo = new Odometer(ODO_FULL);

    +

    +

    and the following a half odometer plot

    +

    +

    1
    +
    $odo = new Odometer(ODO_HALF);

    +

    +

    In ?? an example of a very basic full circle odometer is shown

    +

    +

    Figure 20.3. A full circle odometer (odotutex01.php)

    A full circle odometer (odotutex01.php)


    +

    +
    +

    Adding titles and captions

    + +

    Remember that each graph can have a title, a subtitle and subsubtitle. In addition + the Odmeter graphs offers the possibility to have a caption string. This is a text + (much like the title) but is drawn at the bottom of the graph instead of at the top.

    +

    The following script shows how to add a tite, subtitle and caption to our previous + example

    +

    +

    Example 20.2. Adding titles and captions (odotutex02.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,180);
    + 
    +// Setup titles
    +$graph->title->Set("Result for 2002");
    +$graph->title->SetColor("white");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->subtitle->Set("New York Office");
    +$graph->subtitle->SetColor("white");
    +$graph->caption->Set("Figure 1. Branch results.");
    +$graph->caption->SetColor("white");
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer();
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(30);
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the client
    +$graph->Stroke();
    + 
    +?>


    Figure 20.4. Adding titles and captions (odotutex02.php)

    Adding titles and captions (odotutex02.php)


    +

    +

    As can be see from the figure the margins will automatically adjust to hold the + specified titles and captions.

    +

    Remember that text strings can have multiple lines by separating lines with a '\n' + character. The following example shows how to add a more descriptive caption to the + graph

    +

    +

    Example 20.3. Adding a multi line caption (odotutex03.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,200);
    + 
    +// Setup titles
    +$graph->title->Set("Result for 2002");
    +$graph->title->SetColor("white");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->subtitle->Set("New York Office");
    +$graph->subtitle->SetColor("white");
    +$graph->caption->Set("Figure 1.This is a very, very\nlong text with multiples lines\nthat are added as a caption.");
    +$graph->caption->SetColor("white");
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer();
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(30);
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the client
    +$graph->Stroke();
    + 
    +?>


    Figure 20.5. Adding a multi line caption (odotutex03.php)

    Adding a multi line caption (odotutex03.php)


    +

    +
    +

    Adjusting colors

    + +

    Almost all areas in the graph have a customizable color. This means that for the + Odometer graph itself it is possible to adjust

    +

    +

    • +

      Margin colors

      +
    • +

      The plot area (the rectangular area where the plot(s) are added

      +
    • +

      The border line colors

      +
    • +

      Shadow color

      +

    +

    +

    For example the following line changes the margin color of the graph

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +// Make the border 40% darker than normal "khaki"
    +$graph->SetMarginColor("khaki:0.6"); 
    +$graph->SetColor("khaki");
    +?>

    +

    +

    For the odometer plot itself it is possible to adjust

    +

    +

    • +

      Fascia color

      +
    • +

      Scale label color (and font)

      +
    • +

      Frame color (and width)

      +
    • +

      Indicator color (the color of the odometer "needle"

      +
    • +

      Adding colored segment for scale areas

      +

    +

    +

    For example the following lines would change the fascia, indicator and scale label + color

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$odo->SetColor("white");
    +$odo->scale->label->SetColor("blue");
    +$odo->needle->SetFillColor("yellow");
    +?>

    +

    +

    Figure 20.6. Changing colors (odotutex04.php) shows the effect of adding the two code + snippets above to our previous example.

    +

    +

    Figure 20.6. Changing colors (odotutex04.php)

    Changing colors (odotutex04.php)


    +

    +

    +
    +

    Changing indicator needle style

    + +

    The indicator is accessed through the "$needle" property of the plot. + The indicator needle for the odometer can have six basic shapes. which are set by + the method

    +

    +

    • +

      Needle::SetStyle($aStyle,$aStyleOption=null)

      +

    +

    +

    The style is defined by one of the following symbolic constants.

    +

    +

    1. +

      NEEDLE_STYLE_SIMPLE

      +
    2. +

      NEEDLE_STYLE_STRAIGHT

      +
    3. +

      NEEDLE_STYLE_ENDARROW, (default)

      +
    4. +

      NEEDLE_STYLE_SMALL_TRIANGLE

      +
    5. +

      NEEDLE_STYLE_MEDIUM_TRIANGLE

      +
    6. +

      NEEDLE_STYLE_LARGE_TRIANGLE

      +
    7. +

      NEEDLE_STYLE_HUGE_TRIANGLE

      +

    +

    +

    The following line would therefore create a plot with a "simple" indicator.

    +

    +

    1
    +
    $odo->needle->SetStyle(NEEDLE_STYLE_SIMPLE);

    +

    +

    The different styles are illustrated in Figure 20.7. Possible shapes of the odometer indicator (odotutex06.php)

    +

    +

    Figure 20.7. Possible shapes of the odometer indicator (odotutex06.php)

    Possible shapes of the odometer indicator (odotutex06.php)


    +

    +

    For the needle style "NEEDLE_STYLE_ENDARROW" it is also possible to + adjust the ending arrow. This is done by specifying the particular end arrow size as + the second parameter to SetStyle(). , the $aStyleOption + parameter.

    +

    To simplify the arrow style setting a number of predefined sizes are available. + When choosing an arrowhead the width and length are specified in three different + steps, small , medium and large.

    +

    The available end arrow styles are listed in ?? below

    +

    +

    Table 20.1. Available arrow size

    + +
    Symbolic nameDescription
    NEEDLE_ARROW_SSSmall width, small length
    NEEDLE_ARROW_SMSmall width, small length
    NEEDLE_ARROW_SLSmall width, large length
    NEEDLE_ARROW_MSMedium width, small length
    NEEDLE_ARROW_MMMedium width, small length
    NEEDLE_ARROW_MLMedium width, large length
    NEEDLE_ARROW_LSLarge width, small length
    NEEDLE_ARROW_LMLarge width, medium length
    NEEDLE_ARROW_LLLarge width, large length
    +


    +

    +

    The following code specifies a the largest available arrowhead

    +

    +

    1
    +
    $odo->needle->SetStyle(NEEDLE_STYLE_ARROWHEAD, NEEDLE_ARROW_LL);

    +

    +

    An illustration of the various arrow heads are given in Figure 20.8. Illustration of various sizes of arrow heads (odotutex07.php)

    +

    +

    Figure 20.8. Illustration of various sizes of arrow heads (odotutex07.php)

    Illustration of various sizes of arrow heads (odotutex07.php)


    +

    +

    The basic length and weight of the needle is specified with the methods

    +

    +

    • +

      Needle::SetLength($aLength)

      +
    • +

      Needle::SetWeight($aWeight)

      +

    +

    +

    The needle size is specified as fractions of the radius. So for example the + following line wold create a needle halfway into the plot area

    +

    +

    1
    +
    $odo->needle->SetLength(0.5);

    +

    +

    The default size for a needles is 60% of the radius.

    +

    +
    +

    Adding drop shadows

    + +

    It is possible to add drop shadows to both the overall graph s well as the + indicator needle. To add a drop shadow to the overall graph the method is as + usual

    +

    +

    • +

      OdoGraph::SetShadow($aShadow=true,$aColor="gray@0.5",$aDx=4,$aDy=4)

      +

    +

    +

    and to add a drop shadow to the indicator needle the method

    +

    +

    • +

      OdoNeedle::SetShadow($aShadow=true,$aColor="gray@0.5",$aDx=4,$aDy=4)

      +

    +

    +

    must be used.

    +

    The following two lines add both types of drop shadows to an odometer graph with + the result shown in ??

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$graph->SetShadow();
    +...
    +$odo->needle->SetShadow();
    +?>

    +

    +

    +

    Figure 20.9. Adding drop shadows (odotutex08.php)

    Adding drop shadows (odotutex08.php)


    +

    +
    +

    Changing sizes and margins

    + +

    The size of the odometer is automatically adjusted to fit the available space in + the image after margins for titles and captions have been taken into account. This + means that normally it is not necessary to adjust the margins manually.

    +

    The odometer plot can be adjusted with the method

    +

    +

    • +

      OdoPlot::SetSiz<e($aSize)

      +

    +

    +

    Each odometer also have a margin surrounding it. This is the amount of "space" + around each individual odometer. The amount of space is adjusted by the method

    +

    OdoPlot::SetMargin($aMargin)

    +

    If we take the example in Figure 20.8. Illustration of various sizes of arrow heads (odotutex07.php) and increase the + individual margin around all odometers they will become smaller (if we keep the + original image size) and the result is shown in Figure 20.10. Increasing the individual margins around the plots (odotutex09.php)

    +

    +

    Figure 20.10. Increasing the individual margins around the plots (odotutex09.php)

    Increasing the individual margins around the plots (odotutex09.php)


    +

    +
    +

    Adding color indications in the scale

    + +

    An odometer usually have some colored markings to indicate safe and dangerous + values. The library allows the addition of any number of colored scale areas with + one or several calls to the method

    +

    +

    • +

      OdoPlot::AddIndication($aMin,$aMax,$aColor)

      +

    +

    +

    This method allows the specification of a min and max value of the scale which + will be given the background color specified as the third parameter.

    +

    The example in Figure 20.11. Adding colored scale indicators (odotutex10.php) adds three different scale + area with 6 different scale areas

    +

    +

    Figure 20.11. Adding colored scale indicators (odotutex10.php)

    Adding colored scale indicators (odotutex10.php)


    +

    +
    +

    Changing size of the non-colored center area

    + +

    In Figure 20.11. Adding colored scale indicators (odotutex10.php) it can be seen that by default the scale + color indication goes all the way down to the base of the needle. It is however + possible to adjust this to the colored area stops a bit above the base of the + needle. The non colored area is adjusted with a call to the method

    +

    +

    • +

      OdoPlot::SetCenterAreaWidth($aWidth)

      +

      The width is specified as a fraction of the radius of the plot.

      +

    +

    +

    The following example in Figure 20.12. Adjusting the non-colored center area (odotutex11.php) set the size of this + base area to be 45% of the plot radius.

    +

    +

    Figure 20.12. Adjusting the non-colored center area (odotutex11.php)

    Adjusting the non-colored center area (odotutex11.php)


    +

    +
    +

    Using multiple indicator needles in one odometer

    + +

    In all the previous example the odometer plots have all had a single indicator. It + is however possible to add up to four indicators to each plot. This could for + example be sued to show the current value and a sliding 3-day average.

    +

    The extra needles are accessed through the properties

    +

    +

    • +

      OdoPlot::needle2

      +
    • +

      OdoPlot::needle3

      +
    • +

      OdoPlot::needle4

      +

    +

    +

    In order to enable one of these extra needles the method OdoNeedle::Show() has to + be called. The value of the indicator can then be set as the following example + shows.

    +

    +

    1
    +2
    +
    $odo->needle2->Show();
    +$odo->needle2->Set(44);

    +

    +

    By default all the needles will have the same color so the color should be + manually changed to be able to differentiate among multiple needles. The example in + Figure 20.13. Adding a second scale indicator (odotutex12.php) shows an example of this where we also have + made the second indicator a bit shorter to further make it easier to read.

    +

    +

    Figure 20.13. Adding a second scale indicator (odotutex12.php)

    Adding a second scale indicator (odotutex12.php)


    +

    +
    +

    Adding an odometer legend (label)

    + +

    Most types of odometers have a legend in the middle of the meter usually + indicating what the scale shows. The odometer have a specific text property to add + text in that position.

    +

    +

    • +

      OdoPlot::label

      +

    +

    +

    The following code adds the label "mBar" as the scale indicator and also adjusts + the default font

    +

    +

    1
    +2
    +
    $odo->label->Set("mBar");
    +$odo->label->SetFont(FF_FONT2,FS_BOLD);

    +

    +

    The result of this cane be seen in Figure 20.14. Adding a scale legend by using the label property (odotutex13.php)

    +

    +

    Figure 20.14. Adding a scale legend by using the label property (odotutex13.php)

    Adding a scale legend by using the label property (odotutex13.php)


    +

    +
    +

    Adjusting the width and color of the odometer frame (border)

    + +

    The border of the odometer plot can be adjusted with a call to

    +

    +

    • +

      OdoPlot::SetBorder($aColor,$aWidth=1)

      +

    +

    +

    The following example shows the effect of making the odometer plot border + thicker

    +

    +

    1
    +
    "=odotutex08.1|Adding a thicker border around the odometer plot"

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch20s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch20s03.html new file mode 100755 index 00000000..aec97bc8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch20s03.html @@ -0,0 +1,269 @@ +Working with the odometer scale

    Working with the odometer scale

    + +

    In the previous section we ignored the actual scale in order to focus on the + formatting options. Now we will do the (almost) opposite, only focus on how to + manipulate the scale and the scale labels.

    +

    There are a number of properties that can be adjusted in the scale.

    +

    +

    • +

      The min and max values

      +
    • +

      The fonts and for the scale

      +
    • +

      The formatting of the scale values

      +
    • +

      The start and end angles for the min and max values

      +
    • +

      The tick interval

      +
    • +

      The intervall of the scale labels

      +

    +

    +

    The scale is an instance of class OdoScale and is instantiated as an + object that is accessed through the "$scale" property of the plot

    +

    +

    • +

      OdoPlot::scale

      +

    +

    +

    Adjusting the scale, ticks and labels

    + +

    By default the scale runs between 0 (inclusively) and 100 (inclusively). trying to + set the indicator needle to a value outside this range will result in an + error.

    +

    The min an max values o the scale are specified with the method

    +

    +

    • +

      OdoScale::Set($aMin,$aMax)

      +

    +

    +

    The min/max values can be specified to any numeric value with the restriction that + $aMin <= $aMax

    +

    To adjust which scale position should have tick marks and which tick marks should + have a labels the following method is used.

    +

    +

    • +

      OdoScle::SetTicks($aTickInterval, $aLabelInterval)

      +

      The first argument specifies the tick interval, i.e. the interval tick + marks will be drawn in the odometer. The second argument specifies that + every n:th tick should have a label.

      +

    +

    +

    The following line specifies that every 20 unit of the scale should have a tick + mark and that every second tick mark should have a label

    +

    +

    1
    +
    $odo->scale->SetTicks(20,2)

    +

    +

    +

    Tip

    +

    To make sure that both the min and max value of the scale gets a tick mark + the tick multiplier should be an even divider to the scale range and the + label multiplier should be a factor in the tick multiplier.

    +

    +

    +

    Figure 20.15.  (odotutex14.php) shows and example of how to change the scale, + tick and label positions.

    +

    +

    Figure 20.15.  (odotutex14.php)

    (odotutex14.php)


    +

    +

    To adjust the appearance of the tick marks in respect to line weight, length and + color the following three methods can be used:

    +

    +

    • +

      OdoScale::SetTickLength($aLength)

      +
    • +

      OdoScale::SetTickWeight($aWeight)

      +
    • +

      OdoScale::SetTickColor('red')

      +

    +

    +

    +

    Note

    +

    The tick length of a major tick mark (which have labels) are 1.5 times + that of a minor tick mark. This factor can not be adjusted.

    +

    +

    +
    +

    Adjusting scale label format

    + +

    The following section will show hot to customize the appearance of scale and + labels.

    +

    The scale labels can, as all other texts in the library have there font and color + adjusted. The text property for the labels i accessed through the property

    +

    +

    • +

      OdoScale::label

      +

    +

    +

    Since this is a standard Text object we can adjust the font and color as the + following example shows

    +

    +

    1
    +2
    +
    $odo->scale->label->SetFont(FF_FONT1,FS_BOLD);
    +$odo->scale->label->SetColor('navy');

    +

    +

    The way the labels are formatted are controlled by a format string with the + standard "printf()" syntax, e.g "%d" (as default) displays + an integer and "%02f.1" displays a label zero padded to two positions + and with one decimal place.

    +

    The format string is applied by using the OdoScale::SetLabelFormat() + method of the scale class as in

    +

    +

    1
    +
    $odo->scale->SetLabelFormat('%d%%');

    +

    +

    The other aspect of the label formatting is exactly how the labels are positioned + within the scale. By using the method

    +

    +

    • +

      OdoScale::SetLabelPos($aPos)

      +

    +

    +

    it is possible to specify the distance from the center to the label edge. By + default this is 80% (i.e. specified as 0.8)

    +

    The following example shows the effect of applying some of these formatting + options.

    +

    +

    Example 20.4. Adjusting the scale format (odotutex15.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,170);
    + 
    +// Setup graph titles
    +$graph->title->Set('Custom formatting');
    +$graph->title->SetColor('white');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD);
    + 
    +// Add drop shadow for graph
    +$graph->SetShadow();
    + 
    +// Now we need to create an odometer to add to the graph.
    +$odo = new Odometer();
    +$odo->SetColor("lightgray:1.9");
    + 
    +// Setup the scale
    +$odo->scale->Set(100,600);
    +$odo->scale->SetTicks(50,2);
    +$odo->scale->SetTickColor('brown');
    +$odo->scale->SetTickLength(0.05);
    +$odo->scale->SetTickWeight(2);
    + 
    +$odo->scale->SetLabelPos(0.75);
    +$odo->scale->label->SetFont(FF_FONT1, FS_BOLD);
    +$odo->scale->label->SetColor('brown');
    +$odo->scale->label->SetFont(FF_ARIAL,FS_NORMAL,10);
    + 
    +// Setup a label with a degree mark
    +$odo->scale->SetLabelFormat('%dC'.SymChar::Get('degree'));
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(280);
    + 
    +// Add drop shadow for needle
    +$odo->needle->SetShadow();
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    +?>


    Figure 20.16. Adjusting the scale format (odotutex15.php)

    Adjusting the scale format (odotutex15.php)


    +

    +

    +

    Note

    +

    As can be seen in Figure 20.16. Adjusting the scale format (odotutex15.php) we have used the + utility class SymChar in order to get hold of the extended + character that represents the degree mark. Remember that in order to get the + extended character it is necessary to use a TTF scale.

    +

    +

    +
    +

    Adjusting the start and stop angle for the scale

    + +

    By default the scale labels start at 180 degree (9'a clock) and ends at 0 degree + (3'a clock). To offer full flexibility this can be adjusted.

    +

    The method used for this is

    +
    • +

      OdoScale::SetAngle($aStart, $aEnd)

      +

      the angle is counted clockwise from the 6'a clock position. This means + that the normal half odometer has a start angle of 90 degrees and an end + angle of 270 degrees.

      +

    For full circle odometers the standard start angle is 40 degrees and + the end angle is 320. This leaves a sector of 80 degrees free at the bottom of the + odometer.

    +

    For example we could decide that the scale will start and stop 20 degrees above + the horizontal line. The following example shows two odometer plots. The left uses + the default start and end angle while the right odometer plot have adjusted start + and end angles.

    +

    +

    Figure 20.17. Adjusting start and end angles of scale (odotutex16.php)

    Adjusting start and end angles of scale (odotutex16.php)


    +

    +

    To further emphasize that the scale below the start and stop angles are "invalid" + we could add a scale indicator in some gray:ish color that would signal that the + area below 0 and 100 is not a valid scale area. We can do this by setting the range + of the scale indicator to values outside the scale that would correspond to the + horizontal line.

    +

    In Figure 20.17. Adjusting start and end angles of scale (odotutex16.php) we can accomplish this by adding the + following two lines to the second odometer

    +

    +

    1
    +2
    +
    $odo2->AddIndication(-15,0,'lightgray');
    +$odo2->AddIndication(100,115,'lightgray');

    +

    +

    The result of this is shown in Figure 20.18. Adding gray areas below the min and max scale values (odotutex16.1.php)

    +

    +

    Figure 20.18. Adding gray areas below the min and max scale values (odotutex16.1.php)

    Adding gray areas below the min and max scale values (odotutex16.1.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch20s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch20s04.html new file mode 100755 index 00000000..02420ee7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch20s04.html @@ -0,0 +1,196 @@ +Adding and positioning multiple odometers to a graph

    Adding and positioning multiple odometers to a graph

    + +

    The library supports unlimited number of odometers plots in a single graph. They can + either be positioned manually within the graph by specifying absolute coordinates for + the centers of the odometers or it can be done in a semi automatically way to avoid the + hassle of calculating exact pixels positions.

    +

    +

    Tip

    +

    Remember that there is a caption property of the odometer plot as well as the + main graph class and it is suitable to add a separate caption text to every + odometer to separate them.

    +

    +

    +

    As have been shown in the previous example adding several odometer to the same graph + is simply a matter of creating multiple instances of class Odometer and + then adding them to the graph by calling the OdoGraph::Add() method.

    +

    Manual positioning

    + +

    To manually position the odometer plot the following method is used

    +

    +

    • +

      OdoPlot::SetPos($aX, $aY)

      +

      Specifies the position of the odometer plot in either absolute + coordinates (>1) or as fraction of the width/height when specified as + fractions (in range (0.0 to 1.0)

      +

    +

    +

    +

    Note

    +

    There is a minor difference when using odometer captions and specifying + the y coordinate using fractions in that the y-coordinate and the radius + will automatically adjust to the height of the caption size. This guarantees + that the total image (odometer+caption) will always occupy the same total + height in the image regardless of the size of the caption.

    +

    +

    +

    The top left corner of the graph is (0,0)

    +

    The following example manually positions to odometer plots in the graph, one at + the top right corner and one in the bottom left corner.

    +

    +

    Figure 20.19. Manually specifying the position of odometer plots (odotutex17.php)

    Manually specifying the position of odometer plots (odotutex17.php)


    +

    +
    +

    Using layout classes

    + +

    +

    Note

    +

    Those familiar with Java AWT classes will recognize this concept

    +

    +

    +

    Normally we don't want to have to calculate the absolute x and y coordinates when + positioning odometers. A much better concept would be to just tell the library to + position three odometer horizontally or perhaps vertically without us having to + figure out the exact coordinates our self.

    +

    This is where layout classes come in handy.

    +

    There are two types of layout horizontal and vertical. To specify that two + odometers should be positioned side by side (horizontal) first a new layout object + is created and then the odometer plots are added as object within the layout class. + Later on when the object are put to the image the horizontal layout class will take + all its objects and spread them out evenly along a horizontal line. The + corresponding applies to the vertical layout class with the obvious change in + direction.

    +

    The layout object are added to the graph in exactly the same was as odometers, by + calling the OdoGraph::Add() method.

    +

    The following line would create a horizontal line of odometer plots

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$row1 = new LayoutHor( array($odo1, $odo2, $odo3) );
    +$graph->Add( $row1 );
    +?>

    +

    +

    If we instead wanted the odometer stacked on top of each other the lines above + would have to be changed to

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$row1 = new LayoutVert( array($odo1, $odo2, $odo3) );
    +$graph->Add( $row1 );
    +?>

    +

    +

    There is no limit to how many object can be added to a layout class.

    +

    If it was only possible to add odometers in the creation of layout classes it + would be of limited use. The real power of layout classes is that they can be + combined.

    +

    So for example if we wanted two odometers in the top row and three in the bottom + row we can think of this as first creating two horizontal layout object which are + then in there turn layout out vertically.

    +

    The following code shows how this could be done

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    <?php
    +$row1 = new LayoutHor( array($odo1, $odo2) );
    +$row2 = new LayoutHor( array($odo3, $odo4, $odo5) );
    + 
    +// Combine the two rows in a column
    +$col1 = new LayoutVert( array($row1, $row2) );
    + 
    +// The image will now have 5 odometers!
    +$graph->Add( $col1 );
    +?>

    +

    +

    The following code shows a full example on how this is done

    +

    +

    Example 20.5. Using layout classes for automatic positioning (odotutex18.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph
    +$graph = new OdoGraph(500,180);
    + 
    +$odo = array();
    + 
    +// Now we need to create an odometer to add to the graph.
    +for( $i=0; $i < 5; ++$i ) {
    +    $odo[$i] = new Odometer();
    +    $odo[$i]->SetColor('lightgray:1.9');
    +    $odo[$i]->needle->Set(10+$i*17);
    +    $odo[$i]->needle->SetShadow();
    +    if( $i < 2 )
    +        $fsize = 10;
    +    else
    +        $fsize = 8;
    +    $odo[$i]->scale->label->SetFont(FF_ARIAL,FS_NORMAL,$fsize);
    +    $odo[$i]->AddIndication(92,100,'red');
    +    $odo[$i]->AddIndication(80,92,'orange');
    +    $odo[$i]->AddIndication(60,80,'yellow');
    +}
    + 
    +// Create the layout
    +$row1 = new LayoutHor( array($odo[0],$odo[1]) );
    +$row2 = new LayoutHor( array($odo[2],$odo[3],$odo[4]) );
    +$col1 = new LayoutVert( array($row1,$row2) );
    + 
    +// Add the odometer to the graph
    +$graph->Add($col1);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    + 
    +?>


    Figure 20.20. Using layout classes for automatic positioning (odotutex18.php)

    Using layout classes for automatic positioning (odotutex18.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch20s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch20s05.html new file mode 100755 index 00000000..711a122b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch20s05.html @@ -0,0 +1,146 @@ +Adding icon and text objects to the graph

    Adding icon and text objects to the graph

    + +

    Odometer plots supports the ordinary way of adding icon and text objects to the graph.

    +

    Adding a text object

    + +

    Text objects are added by first creating an instance of class Text + for each text needed and then adding the text to the graph with the usual call to + MatrixGraph::Add().

    +

    A basic text will only require two additional lines of code

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$txt = new Text('Simple string',20,20);
    +$graph->Add($txt); 
    +?>

    +

    +

    The following code snippet is slightly more complicated and will create a boxed + text in the upper right corner of the graph.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    <?php
    +// Add a boxed text
    +$txt = new Text();
    +$txt->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$txt->Set("Arbitrary text\non a\nMatrix Plot");
    +$txt->SetParagraphAlign('center');
    +$txt->SetPos(0.95,0.15,'right');
    +$txt->SetBox('lightyellow');
    +$txt->SetShadow();
    +$graph->Add($txt); 
    +?>

    +

    +

    The snippet above adds a text at coordinates X=20, Y=20 using the default lower + left corner as the text anchor point.

    +

    +

    Note

    +

    To add a newline you must remember to use double-quotes to enclose the + text otherwise the "\n" will only be interpreted literally.

    +

    +

    +

    +

    Note

    +

    Remember that the "text align", as adjusted with SetAlign(), + specifies the anchor point for the text, i.e. what part of the text is + aligned with the specified position.

    +

    +

    +

    To add many text strings it is often useful to specify them in an array and then + have a loop creating the text object and add the text array of all the created + objects to the graph as the following short snippet shows.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    <?php
    +//--------------------------------------------------------------
    +// Add texts to the graph
    +//--------------------------------------------------------------
    +$txts = array( 
    +    array('Textstring one ...',$tx1,$ty1),
    +    array('Textstring two ...',$tx2,$ty2),
    +    array('Textstring three ...',$tx3,$ty3),
    + 
    +$n=count($txts);
    +$t=array();
    +for($i=0; $i < $n; ++$i){
    +    $t[$i] = new Text($txts[$i][0],$txts[$i][1],$txts[$i][2]);
    +    $t[$i]->SetFont(FF_ARIAL,FS_NORMAL,12);
    +    $t[$i]->SetColor('brown');
    +    $t[$i]->SetAlign('center','top');
    +}
    +$graph->Add($t);
    +?>

    +

    +
    +

    Adding icons to the graph

    + +

    Icons are added as instances of class IconPlot to the graph (as usual + with a call to OdometerGraph::Add()). This means that to use icons the + library module "jpgraph_iconplot.php" must first be included.

    +

    The following example shows how to add a small icon in the lower right corner of + the graph. For more information on formatting icons that are added to a graph see + Adding icons (and small images) to the graph

    +

    +

    Caution

    +

    Since Odometer graphs doesn't have a ny concept of linear scale the + position of icons can only be specified as absolute pixels or as fractions + of the width/height.

    +

    +

    +

    +

    Figure 20.21. Adding an icon and text to a Odometer graph (odotutex19.php)

    Adding an icon and text to a Odometer graph (odotutex19.php)


    +

    +

    We also recall that it is possible to use country flags as icons by making use of + the method

    +

    +

    • +

      IconPlot::SetCountryFlag($aFlag,$aX=0,$aY=0,$aScale=1.0,$aMix=100,$aStdSize=3)

      +

    +

    +
    +

    Adding background images

    + +

    In just the same way as for all other plots it is possible to add a background + images, background gradients and a background flag to the graph. Since this has been + discussed several time previously in the manual we only show a simple example + here.

    +

    +

    Note

    +

    Since odometer graphs does not have the concept of plot area the + background image positioning alternative BGIMG_FILLPLOT is the + same as BGIMG_FILLFRAME as we have used in this example + below.

    +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch21.html b/Societes/ric/jpgraph/docs/chunkhtml/ch21.html new file mode 100755 index 00000000..31ef0e68 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch21.html @@ -0,0 +1,318 @@ +Chapter 21. Windrose

    Chapter 21. Windrose

    + +

    Introduction

    + +

    Note

    This module is only available in the pro-version of the library.

    +

    Windrose plots are usually used to display values which are related to compass + directions. For example it could be used to illustrate measured wind strengths over a + time period in different directions. Figure 21.1. An basic Windrose plot + Illustrates a basic example of a windrose graph with one windrose plot.

    +

    Figure 21.1. An basic Windrose plot

    + +
    An basic Windrose plot
    +

    +

    Windrose plots puts data in a number of ranges (or buckets). The number of data points + in a certain bucket is visualized by the length of the particular bucket in that + direction. The input data specifies the percentage of the overall data that belongs to + one bucket in one specific direction. By default there are eight buckets with ranges + shown in Table 21.1. Default windrose buckets. The default ranges that + is shown in the legend is standard values used in displaying wind strengths. The values + in the legend (for the buckets) is purely informational since the actual display is + controlled by the input data that only specifies a bucket number and not any absolute + data values. See more on how to specify input data in ??

    +

    +

    Table 21.1. Default windrose buckets

    + +
    Bucket nr Range of values
    0[0,1]
    1[1,2]
    2[2,3]
    3[3,5]
    4[5,6]
    5[6,10]
    6[10,13.5]
    7[13.5,99]
    +


    +

    +

    +

    Note

    +

    The default fonts for Windrose graphs are TTF fonts. This means that to run + the examples exactly as shown in this chapter TTF fonts must be installed. If + TTF fonts are not available then the font needs to be changed to one of the + built-in fonts.

    +

    +

    +

    Windrose plots also supports full image anti-aliasing to enhance the look and feel of + the graph. The image in Figure 21.1. An basic Windrose plot is using + anti-alias.

    +

    +

    Caution

    +

    To use anti alias TTF fonts must be enabled and used.

    +

    +

    +

    Features

    + +

    The Windrose extension module supports all the usual library graph capabilities + like frames, shadows, colors, titles, cache. Some of the additional Windrose graphs + capabilities are:

    +

    +

    • +

      Enhanced anti-alias capability for smooth looking graphs

      +
    • +

      Manual or automatic scale

      +
    • +

      Supports customizable compass types which allow you to choose between + 16,8 and 4 compass directions to be shown.

      +
    • +

      Supports two types of basic graphs; Free direction graphs and compass + bound graphs.

      +
    • +

      Allows data to be specified with both compass direction and angles (in + degrees)

      +
    • +

      Fully customizable fonts everywhere in the plot

      +
    • +

      Fully automatic adaptive positioning of the labels for the scale to + avoid collision with data. This can also be turned off to allow manual + positioning of the labels.

      +
    • +

      Labels have extensive formatting capabilities and supports background + colors, rounded boxes and arbitrary fonts.

      +
    • +

      Supports multiple Windrose graphs on the same image

      +
    • +

      Fully customizable size and positioning of each individual windrose + graph.

      +
    • +

      Size of windrose plots can be specified both as absolute pixels or as + fraction of the graph size.

      +
    • +

      Both manual and automatic color specifications

      +
    • +

      Both automatic and manual scaling

      +
    • +

      Intelligent positioning of angle labels with possibility for client + specification of alignment type.

      +
    • +

      Windrose graphs may have arbitrary texts blocks added to the + graph

      +

    +

    +
    +

    Different types of Windrose plots

    + +

    There are two basic types of Windrose plots:

    +

    +

    • +

      Compass type.

      +

      This type of windrose plot has either 4,8 or 16 compass direction + axis. Directions in input data is limited to one of the compass + directions in the plot. The directions are specified as ordinal number + of the direction axis.

      +

      The labels on the axis is by default short forms of the compass + directions, for example, "E", "N", "W", "S". (See ?? for how to alter + the default names of the compass directions). The ordinal number are + counted anti-clockwise from East (3 o'clock).

      +
    • +

      Free type.

      +

      This type of windrose plot has no pre-defined direction axis. + Directions in input data can be arbitrary angles (or specified as + compass directions e.g. "NW"). The 0-angle corresponds to the East + direction (3 o'clock)

      +

    +

    +

    To specify the type of plot to create the following method is used

    +

    +

    • +

      WindrosePlot::SetType($aDirection) +

      +

      $aDirection is one of the following 4 predefined + constants

      +

      +

      • +

        WINDROSE_TYPE4, Compass type with the four + core compass directions

        +
      • +

        WINDROSE_TYPE8, Compass type with eight + directions

        +
      • +

        WINDROSE_TYPE16, Compass type with sixteen + directions

        +
      • +

        WINDROSE_TYPEFREE, Free type. Data directions + can be arbitrary angles and there are no predefined labels + nor any predefined axis.

        +

      +

      +

    +

    +

    The figures below illustrates the basic principle of the different types of + windrose plots

    +

    + + + + + + + + + + + +
    +

    Figure 21.2. WINDROSE_TYPE4

    + +
    WINDROSE_TYPE4
    +

    +
    +

    Figure 21.3. WINDROSE_TYPE8

    + +
    WINDROSE_TYPE8
    +

    +
    +

    Figure 21.4. WINDROSE_TYPE16

    + +
    WINDROSE_TYPE16
    +

    +
    +

    Figure 21.5. WINDROSE_TYPEFREE

    + +
    WINDROSE_TYPEFREE
    +

    +
    +

    +

    The following line would specify a Windrose plot with all 16 compass angles

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$wp = new WindrosePlot($data);
    +$wp->SetType(WINDROSE_TYPE16); 
    +?>

    +

    +

    +

    Note

    +

    If no type is specified the plot type will default to a compass type with + 16 directions

    +

    +

    +

    Specifying input data

    + +

    Input data is in the form of a data array. Each entry in the array is itself + an array which gives the data for one direction. The data should be interpreted + as the percentage of the overall data that belongs to a certain direction and + bucket. This also means that the total sum of all data entries (for all + doirections) must be less or equal to 100. It can however be less than 100 + (indicating that some data is lost).

    +

    The first bucket, bucket 0, specifies the 0-value, i.e. what part of the data + in that direction that has no measurement (e.g. it was wind still). Since wind + still has no direction all specified bucket 0 are summarized and displayed in + the inner circle.

    +

    By default the ranges displayed on the legend are:

    +

    0-1, 1-2, 2-3, 3-5, 5-6, 6-10, 10-13.5, 13-99

    +

    This means that the first element specify the percentage of 0-1 reading the + sum of these reading will be placed in the center of the windrose plot. The + second element specifies the percentage of 1-2 readings, the third element the + percentage of 2-3 readings and so on.

    +

    The direction is specified as the key for that element. The direction can be + specified as either

    +

    +

    • +

      A string specifying any of the displayed compass directions, e.g. + "N", "SW".

      +

      +

      $data = array ( array('E' => <east_bucket0>,<east_bucket1> ... <east_bucketN> ),
      +                array('ESE' => <eastsoutheast_bucket0>, ... <eastsoutheast_bucketN> ), 
      +                ....
      +                array('NE' => <northeast_bucket0>, ... <northeast_bucketN> ), 
      +                array('ENE' => <eastnortheast_bucket0>, ... <eastnortheast_bucketN> ));

      +

      +
    • +

      An ordinal number (integer) in the range 0-15 for regular plots + which indicates the axis counting anti-clockwise from East. Please + note that only displayed axis count. Ordinal number zero specifies + the east direction

      +

      +

      $data = array ( array(0 => <east_bucket0>,<east_bucket1> ... <east_bucketN> ),
      +                array(1 => <eastsoutheast_bucket0>, ... <eastsoutheast_bucketN> ), 
      +                ....
      +                array(2 => <northeast_bucket0>, ... <northeast_bucketN> ), 
      +                array(3 => <eastnortheast_bucket0>, ... <eastnortheast_bucketN> ));

      +

      +
    • +

      A string indicating a number, e.g. '34.5' , please note that if + the angle is a fraction it must specified as a string. The library + will then automatically recognize that as a valid angle and treat it + as expected. (The reason for this is that floating point numbers + can't be used as keys in an associative array.)

      +

      +

      $data = array ( array('12.5' => <bucket0>,<bucket1> ... <bucketN> ),
      +                array('22.1' => <bucket0>, ... <bucketN> ), 
      +                ....
      +                                

      +

      +

    +

    +

    Within the same data set it is also possible to mix the styles.

    +

    +

    Caution

    +

    The library makes no data validation apart from checking that the + overall sum of the buckets can not be > 100%. It is up to the client to + make sure that the data specified makes sense.

    +

    +

    +

    If you specify a direction in the data for a compass directions that is not + displayed when using a regular Windrose plot you will get an error message to + that affect.

    +

    Below are some examples of how to specify the data which should clarify how + this works

    +

    +

    Example 21.1. Examples of input data for compass (regular) Windrose plots

    + +

    (Assuming we have all 16 axis + displayed)

    +

    +

    1
    +
    $data = array( 'N' => array(2,5,6) );

    +

    +

    This data array specifies reading in only one direction, "North", the + number of 0-readings are 2 percent, number of 0-1 readings are 5 percent + and the number of 1-2 readings are 6 percent.

    +

    +

    1
    +
    $data = array( 1 => array(2,5,6), 3 =>  array(6,3), 'NW' => array(3,2,2,2) )

    +

    +

    This data array specifies readings in three directions. As shown it is + possible to mix both ordinal number for the axis as well as the symbolic + direction name. However, it is probably best to stick with one method at + a time for clarity.

    +


    +

    +

    +

    Example 21.2.  Examples of input data for free Windrose plots

    + +

    What is special with the free type is that angles are no longer + restricted to only the 16 compass directions but arbitrary directions as + well.

    +

    +

    1
    +
    $data = array( 10 => array(2,5,6), 24 =>  array(6,3), 137 => array(3,2,2,2) )

    +

    +

    This data array specifies readings in three directions, 10 degrees, 24 + degrees and 137 degrees.

    +

    +

    1
    +
    $data = array( '21.6' => array(2,5,6), 'N' => array(6,3), 137 => array(3,2,2,2) )

    +

    +

    This data array specifies readings in three directions, 21.5 degrees, + 'North' (or 90 degrees) and finally 137 degrees. Please note that in + order to specify a fraction for an angle we must specify the direction + as a string value, i.e. '21.6'. This will then be handled automatically + be the library.

    +


    +

    +
    +
    +
    + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch21s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch21s02.html new file mode 100755 index 00000000..14696f58 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch21s02.html @@ -0,0 +1,450 @@ +Creating and formatting basic Windrose graphs

    Creating and formatting basic Windrose graphs

    + +

    Creation of windrose graphs first requires the inclusion of the library extension + module "jpgraph_windrose.php"

    +

    The creation of Windrose graphs otherwise follows the traditional steps in the library + of creating a graph and then adding one or several windrose plots to the canvas.

    1. +

      Create a basic canvas graph as an instance of class + WindroseGraph

      +
    2. +

      Create an instance of one or several windrose plots as instances of + class WindrosePlot, set up the scale and appearance and + then add them to the graph canvas.

      +
    3. +

      Send back the graph to the client with a call to + WindroseGraph::Stroke(). As usual this can be used to + either send back the graph to the client (e.g.browser) or write the graph to + a file by specifying a filename as the first argument to + WindroseGraph::Stroke().

      +
    +

    The example in Figure 21.6. A basic 16 direction windrose graph (windrose_ex0.php) show a windrose graphs using + just the default values for all parameters.

    +

    +

    Example 21.3. A basic 16 direction windrose graph (windrose_ex0.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label
    +$data = array(
    +    0 => array(5,5,5,8),
    +    1 => array(3,4,1,4),
    +    'WSW' => array(1,5,5,3),
    +    'N' => array(2,3,8,1,1),
    +    15 => array(2,3,5));
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,400);
    +$graph->title->Set('A basic Windrose graph');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Add and send back to browser
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>


    Figure 21.6. A basic 16 direction windrose graph (windrose_ex0.php)

    A basic 16 direction windrose graph (windrose_ex0.php)


    +

    +

    In the same way as for other graph types one or several Windrose plots can be added + and positioned freely in the Windrose graph by specifying the position as either + absolute coordinates or as fractions of the width/height of the overall graph.

    +

    +

    Tip

    +

    An easier way to position Windrose plots is to use layout classes as described + in Using layout classes to position Windrose plots

    +

    +

    +

    Each instance of the WindrosePlot is added to the overall graph with a + call to the standard method

    +

    +

    • +

      WindroseGraph::Add($aObject)

      +

    +

    +

    To avoid that all the plots collide in the middle the positioning and sizing methods + as shown in the previous sections should be used.

    +

    The following script shows how two plots are displayed in the same graph.

    +

    +

    Example 21.4. Adding two windrose plots to the same graph (windrose_2plots_ex1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal idex of axis as well
    +// as the direction label
    +$data = array(
    +    1 => array(10,10,13,7),
    +    2 => array(2,8,10),
    +    4 => array(1,12,22),
    +    );
    + 
    +$data2 = array(
    +    4 => array(12,8,2,3),
    +    2 => array(5,4,4,5,2),
    +    );
    + 
    +// Create a new small windrose graph
    +$graph = new WindroseGraph(660,400);
    +$graph->SetShadow();
    + 
    +$graph->title->Set('Two windrose plots in one graph');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->subtitle->Set('(Using Box() for each plot)');
    + 
    +$wp = new WindrosePlot($data);
    +$wp->SetType(WINDROSE_TYPE8);
    +$wp->SetSize(0.42);
    +$wp->SetPos(0.25,0.55);
    +$wp->SetBox();
    + 
    +$wp2 = new WindrosePlot($data2);
    +$wp2->SetType(WINDROSE_TYPE16);
    +$wp2->SetSize(0.42);
    +$wp2->SetPos(0.74,0.55);
    +$wp2->SetBox();
    +$wp2->SetRangeColors(array('green','yellow','red','brown'));
    + 
    +$graph->Add($wp);
    +$graph->Add($wp2);
    + 
    +$graph->Stroke();
    +?>


    Figure 21.7. Adding two windrose plots to the same graph (windrose_2plots_ex1.php)

    Adding two windrose plots to the same graph (windrose_2plots_ex1.php)


    +

    +

    Specifying the windrose scale

    + +

    The scale is a property of each plot and is access though the instance variable + WindrosePlot::scale. The scale consists of the epi-centric circles + that radiates from the center of the Windrose plot. The step between each circle can + be set manually or it can be done automatically by the library depending on the data + values.

    +

    (In order to keep the flow of the text this section leaves the full examples to + the example section.)

    +

    To manual set the scale of the circles the following method is used:

    +

    +

    • +

      WindrosePlotScale::SetStepSize($aMax,$aStepSize=null)

      +

      $aMax, The maximum scale value

      +

      $aStepSize, The step between each scale circle

      +

    +

    +

    By default the library tries multiple of 5:s and 2:s for a visually esthetic grid + spacing.

    +

    Other example of methods available to adjust the scale are

    +

    +

    • +

      WindrosePlotScale::SetFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10)

      +

      Specify font for all scale labels apart from the 0-label (in the + center)

      +
    • +

      WindrosePlotScale::SetZFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10)

      +

      Specify the font for the 0-label (in the center)

      +
    • +

      WindrosePlotScale::SetFontColor($aColor)

      +

      Specify font color for all scale labels apart from the 0-label (in the + center)

      +
    • +

      WindrosePlotScale::SetZFontColor($aColor)

      +

      Specify the font for the 0-label (in the center)

      +
    • +

      WindrosePlotScale::SetLabelFillColor($aBkgColor,$aBorderColor=false)

      +

      Set the background color for the labels

      +
    • +

      WindrosePlotScale::SetLabelAlign($aAlign)

      +

      Set the label text alignment

      +
    • +

      WindrosePlotScale::SetLabelFormat($aFmt)

      +

      Set the label format. This is specified as a "printf()" + format string.

      +
    • +

      WindrosePlotScale::Hide($aFlg)

      +

      Hide the scale labels

      +

    +

    +

    Examples of how to use these methods are shown in the following sections.

    +

    Specifying fonts and font colors

    + +

    Fonts can be specified for both the labels on the scale as well as separately + for the label in the center of the plot. The following code snippet shows how to + do this (we assume we have already created a windrose plot called + "windplot")

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    // Font and color for scale labels
    +$windplot->scale->SetFont(FF_VERDANA,FS_NORMAL,10);
    +$windplot->scale->SetFontColor('navy');
    +                        
    +// Font and color for the center (Zero circle) label
    +$windplot->scale->SetZFont(FF_VERDANA,FS_NORMAL,10);
    +$windplot->scale->SetZFontColor('navy');

    +

    +
    +

    Manually specifying the scale

    + +

    By default the library automatically determines a scale range and step size + taking into account the maximum value of data, size of the plot and the font + size specified for the scale labels.

    +

    However it is possible to force a manual scale and step size with a call to + Set($aMaxValue,$aStepSize). This call sets the maximum scale + value as well as the step size. The step size is optional. If the step size is + not specified it will be automatically determined.

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    // Specify both maximum value and a step size
    +$windplot->scale->Set(40,8);
    +  ...
    +// Specify just the maximum value
    +$windplot->scale->Set(40);

    +

    +

    This feature is also illustrated in Figure 21.25.  (windrose_ex7.php) in + the example part of this chapter.

    +

    +

    Note

    +

    The automatic scaling tries to first use step sizes as multiples of 5 + and then multiples of 2 to achieve a suitable spacing of the scale + lines.

    +

    +

    +

    +

    Note

    +

    It might be surprising to see that the scale steps may change when the + label font is changed. However, this is by design. The reason for this + is that there is only a certain amount of space available for the labels + between each step. In order for large fonts to fit the space between the + grids the step between each circle must be large enough.

    +

    +

    +
    +

    Specifying the label angle

    + +

    The labels for the scale is placed along a line radiating from the center of + the windrose plots. The angle for the labels can be either manually or + automatically determined.

    +

    The labels for the scale is placed along one of the sixteen compass directions + if you choose automatic positioning of the labels. By default the library tries + to choose a direction with as little data around it as possible.

    +

    To manually specify the angle a call to SetAngle($aAngle) with + the angle (in degrees) as argument.

    +

    The code snippet below shows how to do this

    +

    +

    1
    +2
    +
    // Show the labels at 45 degrees angle
    +$windplot->scale->SetAngle(45);

    +

    +

    To specify that the library should do this automatically (which is the + default) the angle is specified as the string 'auto' as

    +

    +

    1
    +2
    +
    // Let the library determine a good angle 
    +$windplot->scale->SetAngle('auto');

    +

    +
    +

    Specifying number formats for scale labels

    + +

    In the same way as for other scales in the library it is possible to specify a + "printf()" format string to adjust the appearance of the labels. By default the + label format is the same as

    +

    +

    1
    +
    $windplot->scale->SetLabelFormat('%d%%');

    +

    +
    +
    +

    Specifying direction labels

    + +

    With direction labels we mean the names of the compass directions surrounding the + windrose plot. By default they are given the English short form for the 16 discrete + compass named directions. This can also be localized (described in ??).

    +

    Specifying fonts and font colors for the axis titles (direction + labels)

    + +

    Fonts for the axis titles are specified with (with the usual arguments)

    +
    • +

      WindrosePlot::SetFont()

      +
    • +

      WindrosePlot::SetFontColor()

      +

    as the following example shows

    +

    +

    1
    +2
    +
    $windplot->SetFont(FF_TIMES,FS_BOLD,12);
    +$windplot->SetFontColor('darkgreen');

    +

    +

    Which for example could give a Windrose plot as shown in Figure 21.22.  (windrose_ex4.php)

    +
    +

    Setting arbitrary text for data directions

    + +

    Wen using the free direction windrose plots the default label is the direction + for the data in degrees. This is fully customizable by using the following + method.

    • +

      WindrosePlot::SetLabels($aLabels)

      +

      The input data to this method is an associative array where the + keys are the direction and the content is the text to be + displayed.

      +
    +

    Please note that for regular Windrose plots, i.e. with only compass direction + the label can not be changed. This is only available if the type of the windrose + plot is WINDROSE_TYPEFREE.

    +

    The following example specifies a data point at 50 degrees and a text + "Point\n#7315" as the label.

    +

    +

    Tip

    +

    Labels can contain "\n" which will be interpreted as a line break. +

    +

    +

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    $data = array( 50 => array(12,12,2) );
    +$labels = array( 50 => 'Point #7315' );
    +...
    +$windplot = new WindrosePlot();
    +$windplot->SetLabels($labels);

    +

    +

    An example of this can be seen in Figure 21.24.  (windrose_ex6.php)

    +
    +

    Adjusting the alignment and margin

    + +

    There are two basic ways of adjusting the position of the compass labels + around the plot:

    +

    +

    • +

      Adjusting the margin between the label and the outer plot + circle

      +
    • +

      Adjusting the anchor point of the labels.

      +

    +

    +

    The easiest way to explain this is to first imagine an invisible circle around + the plot. The margins specifies how far from the outer scale circle this + imaginative circle is placed.

    +

    In order to position the labels on that circle around the plot there are + several possible ways to select what point of the text should be positioned on + the circle. The easiest way is to select the center (both in X and Y directions) + of the text. This works well if all labels are roughly the same size. If there + are big difference between the smallest and largest label it might be necessary + to have a very large margin to avoid the text to "collide" with the plot.

    +

    A better way is to determine the closest point of the text to the plot and + then make that point lay on the circle. The closets point depends on what + compass direction the label is on, for example for the "East" label the closes + point is the middle of the left side of the text and for the "West" the closes + point is the middle of the right side.

    +

    The library supports both way of positioning through the method

    +
    • +

      WindrosePlot::SetLabelPosition($aPosition)

      +

      Valid values for $aPosition are LBLPOSIITON_CENTER + and LBLPOSITION_EDGE .

      +

    The following code snippet shows how to specify both margin and + position do this:

    +

    +

    1
    +2
    +
    $windplot->SetLabelMargin(30);
    +$windplot->SetLabelPosition(LBLPOSITION_EDGE);

    +

    +

    The red circle in ?? and ?? illustrates the "imaginative" circle on which the + labels are placed. The distance from the out most plot circle to the label + anchor point is the margin.

    + + + + + + + +
    +

    Figure 21.8. Positioning with LBLPOSITION_CENTER

    + +
    Positioning with LBLPOSITION_CENTER
    +

    +
    +

    Figure 21.9. Positioning with LBLPOSITION_EDGE

    + +
    Positioning with LBLPOSITION_EDGE
    +

    +
    +

    An example of this can be seen in Figure 21.24.  (windrose_ex6.php)

    +
    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch21s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch21s03.html new file mode 100755 index 00000000..3b809a67 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch21s03.html @@ -0,0 +1,365 @@ +Formatting the plot

    Formatting the plot

    + +

    Positioning the plot

    + +

    The position of the graph can be controlled with the method

    +

    +

    • +

      WindrosePlot::SetPos($aXPos,$aYPos)

      +

    +

    +

    The position can be specified as either absolute position (in pixels) or as a + fraction of width and height. The anchor for the position is the center of the + windrose plot. For example, the following line centers the plot in the graph

    +

    +

    1
    +
    $windplot->SetPos(0.5,0.5);

    +

    +
    +

    Specifying the size of the plot

    + +

    In the same way as for the position the size of the windrose plot can be specified + as either an absolute value or as a fraction of the minimum of width and height. The + size specified refers to the diameter of the plot.

    +

    The size is controlled with the the method

    +

    +

    • +

      WindrosePlot::SetSize($aDiameter) +

      +

    +

    +

    as in

    +

    +

    1
    +
    $windplot->SetSize(200);

    +

    +

    The code above sets the diameter of the plot to 200 pixels, setting the value to + 0.7 would set the diameter to 0.7 * min(WIDTH,HEIGHT) where width and height are the + size of the graph.

    +
    +

    Specifying the size of the Zero-circle (middle circle)

    + +

    The size of the middle circle (the zero-range circle) can be adjusted with the + method

    +

    +

    • +

      WindrosePlot::SetZCircleSize($aDiameter) +

      +

      $aDiameter, The diameter can be specified as either an + absolute integer value or as a fraction of the windrose plot diameter. +

      +

    +

    +

    For example the following line sets the size to 1/3 of the windrose plot.

    +

    +

    1
    +
    $windplot->SetZCircleSize(1/3);

    +

    +
    +

    Formatting the plot legend

    + +

    The legend is displayed in a fixed position just below the windrose plot as can be + seen in all the previous examples.

    +

    All legend methods is accessed through the legend property of the windrose plot as + in

    +

    +

    1
    +
    $windroseplot->legend->SetFont(...);

    +

    +

    There are four basic attributes that can be customizable for the legend as + described in the following paragraphs.

    +

    Specifying legend fonts

    + +

    To allow for maximum flexibility font can be specified for both the numerical + ranges as well as for the text under the legend. In order to avoid making the + legend to wide it is often desirable to use a smaller font for the ranges and a + slightly larger font for the actual text under the legend (as well as inside the + "calm" circle - the indicator for bucket 0).

    +

    The fonts for the legend is adjusted by the following methods

    +

    +

    • +

      SetTFont(), The text below the legend

      +
    • +

      SetLFont(), The font for the labels

      +
    • +

      SetCFont(), The font for the label inside the "calm" + circle

      +
    • +

      SetFont(), Sets all the font areas above the same + font. Note that if this method is called after one of the individual + settings previous specified (e.g. SetCFont()) they will + be overwritten.

      +

    +

    +

    The colors for the fonts are specified in an analogue way by using the methods

    +

    +

    • +

      SetTFontColor()

      +
    • +

      SetLFontColor()

      +
    • +

      SetCFontColor()

      +
    • +

      SetFontColor()

      +

    +

    +

    Figure 21.10. Windrose legend methods explains visually how these + methods are applied

    +

    Figure 21.10. Windrose legend methods

    + +
    Windrose legend methods
    +

    +

    Figure 21.11. Using chinese fonts (windrose_ex6.1.php) illustrates how two fonts were used + for the legend. For the circle we have use a Chinese font (The Kanji characters + roughly means "Chinese language")

    +

    +

    Caution

    +

    The source file (as every source file in the library) is encoded in + utf-8. For technical reasons some browsers might not render the Chinese + characters correctly when the source file is viewed.

    +

    +

    +

    +

    Figure 21.11. Using chinese fonts (windrose_ex6.1.php)

    Using chinese fonts (windrose_ex6.1.php)


    +

    +
    +

    Setting text and colors for the Zero-circle

    + +

    The "Calm" circle can have it's size, line weight and color adjusted. In + addition (as was shown in Figure 21.11. Using chinese fonts (windrose_ex6.1.php) ) specify any + text within the circle. By default the text "Calm" is printed inside the circle. + The following methods are used to adjust these properties.

    +

    +

    • +

      SetCircleWeight($aWeight)

      +
    • +

      SetCircleRadius($aRadius)

      +
    • +

      SetCircleColor($aColor)

      +
    • +

      SetCircleText($aTxt)

      +

    +

    +
    +

    Specifying number formats for ranges

    + +

    For the ranges it is possible to adjust how the numbers are formatted with a + general format string (in the style of a printf() format string). + This would allow, for example, to choose the number of decimal values to show in + the legend. The format string is specified with a call to

    +

    +

    • +

      Legend::SetFormat($aFmt).

      +

      The format will be applied to both the lower and upper range + value. This means that the actual legend range text in the legend + will be printed as [number format]-[number format].

      +

    +

    +

    The following example shows how to make sure the ranges are displayed as + integers

    +

    +

    1
    +
    $wp->legend->SetFormat('%d');

    +

    +
    +

    Specifying legend bottom text

    + +

    Finally it is also possible to specify a text at the bottom of the legend with + a call to

    +

    +

    +

    +
    +

    Specifying the numeric values displayed for the ranges

    + +

    The values displayed in the legend for the ranges can be adjusted with a call + to

    +

    +

    • +

      WindRosePlot::SetRanges($aRanges). By default the + ranges are set to 0,1,2,3,5,6,10,13.5,99.0, this means that the + ranges printed will be 1-2, 2-3, 3-5, ....

      +

    +

    +

    The following example shows how to change this to the ranges 0.000-0.001, + 0.001-0.003, 0.003-0.005

    +

    +

    1
    +2
    +
    $windplot->SetRanges(array(0.001,0.003,0.005));
    +                        $windplot->SetFormat('%.3f');

    +

    +

    As can be seen the first range (bucket 0) is not really directly printed. It + is by default indicated by the circle to the left in the legend.

    +

    In the example lines above we also changed the format to display the decimals. + Without this the default is only to show one decimal and that would show all + ranges as 0.0. An example of how this might look can be seen in figure 10 below. +

    +
    +
    +

    Adjusting the grid colors

    + +

    The colors of both the radial grid and the circular grid can be adjusted. This is + done with the method

    +

    +

    • +

      WindrosePlot::SetGridColor($aColor1,$aColor2) +

      +

    +

    +

    The first argument specifies the grid circle color and the second argument + specifies the radial grid colors.

    +
    +

    Adjusting the weight of the grid circles

    + +

    To adjust the weight (thickness) of the grid lines (both circle and radial lines) + the following method is used

    +

    +

    • +

      WindrosePlot::SetGridWeight($aWeight1,$aWeight2)

      +

      The first argument specifies the weight of the circle and the second + the weight of the radial lines.

      +

    +

    +

    Note

    +

    It is possible to have individual colors of the radial grid lines (and line + style &weight) by using any of the methods

    +

    +

    • +

      SetRadialColors()

      +
    • +

      SetRadialStyles() +

      +
    • +

      SetRadialWeight()

      +

    +

    +
    +

    +

    Note

    +

    Due to technical and performance limitations circle weight can only be + specified in the range [1,3] (inclusively).

    +

    +

    +
    +

    Adding a box around the plot

    + +

    Finally we remember that it is possible to add a rectangular box around the plot + by using the method

    +

    +

    • +

      WindrosePlot::SetBox($aColor='black', $aWeight=1, + $aStyle='solid', $aShow=true)

      +

    +

    +

    an example of this can be seen in Figure 21.7. Adding two windrose plots to the same graph (windrose_2plots_ex1.php) .

    +
    +

    Adjusting the size of the center zero circle

    + +

    The size of the center circle can be manually adjusted as either specified in + absolute number of pixels or as fractions of the windrose plot (not the entire + windrose graph). This is done with the method

    +

    +

    • +

      WindrosePlot::SetZCircleSize($aSize)

      +

    +

    +
    +

    Localizing the default names for the compass directions

    + +

    By default the compass cardinal directions are presented in English locale using + standard denominations for the 16 compass directions.

    +

    Localizing these names are done with a call to the method

    +

    +

    • +

      WindrosePlot::SetCompassLabels($aLabels)

      +

    +

    +

    The order of the names for the directions should start with the corresponding name + for "East" and then continue counter-clockwise all the way to "East North East". + Adjusting the names for the compass directions means two things:

    +

    +

    • +

      If there is named direction in the data (as key) that key must now + also be in localized form.

      +
    • +

      The displayed names for the compass direction will be shown in + localized form.

      +

    +

    +

    For example, the code snippet below shows how to localize the compass directions + into Swedish.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    ...
    +$data = array(
    +    'sso' => array(12,8,2,3),
    +    6 => array(5,4,4,5,4),
    +);
    +$se_CompassLbl =
    +array('O','ONO','NO','NNO','N','NNV','NV','VNV','V','VSV','SV','SSV','S','SSO','SO','OSO');
    +....
    +$windroseplot->SetCompassLabels($se_CompassLbl);
    +...

    +

    +

    and the following shows how to make a localization into Japanese

    +

    +

    Caution

    +

    The source file (as every source file in the library) is encoded in utf-8. + For technical reasons some browsers might not render the Japanese characters + correctly when the source file is viewed.

    +

    +

    +

    +

    Figure 21.12. Japanese locale (windrose_ex7.1.php)

    Japanese locale (windrose_ex7.1.php)


    +

    +
    +

    Adjusting the formatting of the windrose plot legs

    + +

    Specifying range colors

    + +

    To adjust the colors used for each range in the plot the method

    +

    WindrosePlot::SetRangeColors($aRangeColors) +

    +

    The following example shows how to set a red-brown color scale

    +

    +

    1
    +2
    +
    $rangeColors = array('khaki','yellow','orange','orange:0.7','brown','darkred','black');
    +$windplot->SetRangeColors($rangeColors);

    +

    +
    +

    Specifying the width of the plot "legs"

    + +

    The weight (width) of the legs used for each range in the plot is by default + set to the range 2,4,6,8,10,12,14,16,18,20 pixels.

    +

    This can be adjusted with a call to the method

    +

    +

    • +

      WindrosePlot::SetRangeWeights($aWeights) +

      +

    +

    +

    If fewer weights than ranges used are supplied the ranges will wrap-around. + The following example shows how to set a larger difference in size for the legs + between the ranges.

    +

    +

    1
    +
    $windplot->SetRangeWeights(array(2,6,10,14,18));

    +

    +
    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch21s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch21s04.html new file mode 100755 index 00000000..9ceae08c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch21s04.html @@ -0,0 +1,392 @@ +Some more advanced formatting

    Some more advanced formatting

    + +

    Turning off Anti-aliasing

    + +

    By default anti-aliasing is enabled. This has a speed penalty together with + restrictions that no background images can be used in this version of the library.

    +

    If you want to use background images or improve performance anti-aliasing can be + turned off with a call to the method

    +

    +

    • +

      WindrosePlot::SetAntiAlias($aFlag)

      +

    +

    +
    +

    More on formatting scale-labels

    + +

    Since scale labels are normal text element all normal text formatting can be used + to enhance the look &feel of the scale labels.

    +

    Adding background colors

    + +

    A simple enhancement to make the labels more visible is to add a box and a + background color for the label. This is done with a call to the method

    +

    +

    • +

      WindrosePlotScale::SetLabelFillColor($aFillColor, + $aColor)

      +

    +

    +

    The following code snippet shows how this could be done

    +

    +

    1
    +
    $windplot->scale->SetLabelFillColor('lightblue','black');

    +

    +

    +

    Figure 21.13. Adding label background (windrose_ex8.1.php)

    Adding label background (windrose_ex8.1.php)


    +

    +
    +

    Adjusting the alignment of the scale labels

    + +

    By default the scale labels are centered on the intersection between the + radial line and the grid circle. It is possible to also have the label + positioned slightly outside the circular grid. This is all controlled by the + method

    +

    +

    • +

      WindrosePlotScale::SetLabelAlign($aAlign)

      +

      Possible values for $aAlign are

      +

      +

      • +

        LBLALIGN_CENTER, The default. Center the label

        +
      • +

        LBLALIGN_TOP, Optional. Position the label slightly + outside the circular grid line.

        +

      +

      +

    +

    +
    +

    Specifying number formats

    + +

    The final formatting option is to specify the number format of the label. This + is specified as an ordinary "printf()" format string. The format is + specified with a call to

    +

    +

    • +

      WindrosePlotScale::SetLabelFormat($aFmt)

      +

    +

    +

    For example the code snippet below makes the label display 1 decimal and + adding a '%' sign.

    +

    +

    1
    +
    $windroseplot->scale->SetLabelFormat('%.1f%%');

    +

    +
    +

    Hiding the labels

    + +

    Finally it is possible to completely hide the scale labels with a call to

    +

    +

    • +

      WindrosePlotScale::Hide($aFlg=true)

      +

    +

    +
    +
    +

    Formatting the legend

    + +

    All the property for the legend is access through the legend property of the + windrose plot as shown in the examples below.

    +

    Turning off the legend

    + +

    By default the legend is shown for each plot. It can be turned off with a call + to

    +

    +

    • +

      LegendStyle::Hide()

      +

    +

    +

    as the following code snippet shows.

    +

    +

    1
    +
    $windroseplot->legend->Hide();

    +

    +
    +

    Adjusting the legend position

    + +

    In version 1.0 of Windrose plot it is not possible to fully adjust the + position of the plot legend. However, it is possible to manually adjust the + margin between

    +

    +

    • +

      the Windrose plot and the legend

      +
    • +

      ... the bottom of the box around a single plot and the + legend

      +

    +

    +

    Both these margins are adjusted with a call to

    +

    +

    • +

      Legend::SetMargin($aMarg,$aBottomMargin=5)

      +

    +

    +

    For example by adding the following lines to your script

    +

    +

    1
    +
    $windroseplot->legend->SetMargin(25);

    +

    +

    By default this margin to the Windrose plot is 10 pixels and to the bottom of + the plot box it is 5 pixels. Note that the legend positioning will automatically + adjust for any increase in the font size for the compass directions to ensure + that the legend will never collide with the labels when large fonts are + used.

    +
    +

    Adjusting the length of each legend window leg

    + +

    By default the length of each legend leg is just long enough (with a little + bit to spare) to cover the range labels just on top of the legend legs. It can + never be set to smaller than that but it can be made larger with a call to

    +

    +

    • +

      LegendStyle::SetLength($aLength)

      +

    +

    +
    +

    Adjusting how the range is displayed

    + +

    By default the range labels is displayed so that the end label of bucket + n is the same as the start label in + bucket (n+1). This behaviour can be + controlled with the method

    +

    +

    • +

      WindrosePlot::SetRangeStyle($aStyle)

      +

      $aStyle, is one of two symbolic constants

      +

      +

      1. +

        RANGE_OVERLAPPING, (The default)

        +
      2. +

        RANGE_DISCRETE, The range labels will be + distinct

        +

      +

      +

    +

    +

    Figure 21.14. Different legend label styles shows the difference between + the two legend styles

    +

    Figure 21.14. Different legend label styles

    + +
    Different legend label styles
    +

    +
    +
    +

    Highlighting specific compass directions

    + +

    In order to emphasize certain directions it is possible to individually adjust the + radial lines look & feel.

    +

    For example, assume that the direction 134º in a free plot is especially + important. In order to emphasize this we can make the radial line, solid and red + while maintaining a low profile on the other directions.

    +

    This is easily accomplished by the use of one or more of the three plot methods

    +

    +

    • +

      SetRadialColors($aColors) +

      +
    • +

      SetRadialWeights($aWeights)

      +
    • +

      SetRadialStyles($aStyles)

      +

    +

    +

    These method all take arrays as argument. The arrays specifies what direction and + what style to use. So, for example to make the "Southwest" grid red one would add + the lines

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +colors = array('sw' => 'red');
    +$windplot->SetRadialColors($colors);
    +?>

    +

    +

    As direction either the (localized) name can be used or the index/direction + depending on if it is a free or regular type of windrose type.

    +

    Any direction which hasn't been explicitly specified in the array will use the + default colors (As Specified by SetGridColor()) and the default weight + (as specified by SetGridWeight()).

    +
    +

    Including a graph in a PDF

    + +

    This information assumes that the PDFlib in installed and available in the PHP + setup being used. This very short paragraph is in no way a replacement for reading + the full PDFlib documentation. It is just intended to give some ideas on how this + can be done. This information is to large extent a repetition of what can be read in + Appendix C. FAQ

    +

    Instead of stroking the image to a file or back to the browser you can get hold of + the internal GD handle that represents the graph. This is done by specifying the + constant _IMG_HANDLER as the file name in the call to + Stroke(). This will tell the Stroke() method to return + the GD handle.

    +

    In order to use the GD handle together with the PDFlib the image must be loaded + into memory by a call to

    +

    pdf_open_memory_image($pdf, $im) +

    +

    The following snippet shows how you can produce and send back a PDF page to the + browser. Please note that this is just a code sketch and not final code

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +
    ...
    +$graph = new WindroseGraph(...);
    + 
    +// Code to create the graph
    +// .........................
    +// .........................
    + 
    +// Put the image in a PDF page by first getting the GD handle
    +$im = $graph->Stroke(_IMG_HANDLER);
    + 
    +$pdf = pdf_new();
    +pdf_open_file($pdf, "");
    + 
    +// Convert the GD image to something the
    +// PDFlibrary knows how to handle
    +$pimg = pdf_open_memory_image($pdf, $im);
    + 
    +// Setup a basic PDF page
    +pdf_begin_page($pdf, 595, 842);
    +pdf_add_outline($pdf, "Page 1");
    +pdf_place_image($pdf, $pimg, 0, 500, 1);
    +pdf_close_image($pdf, $pimg);
    +pdf_end_page($pdf);
    +pdf_close($pdf);
    + 
    +// Prepare to output the PDF page
    +$buf = pdf_get_buffer($pdf);
    +$len = strlen($buf);
    + 
    +header("Content-type: application/pdf");
    +header("Content-Length: $len");
    +header("Content-Disposition: inline; filename=foo.pdf");
    + 
    +echo $buf;
    + 
    +pdf_delete($pdf);
    +...

    +

    +
    +

    Adding a background image

    + +

    In the same way as with the other types of plots in the library there is a + possibility to add a background image in the graph. However, due to limitations with + the way the extended anti-alias in windroses is implemented it is not possible to + use background images when this (default) behavior is enabled.

    +

    (It is technically possible to correct this limitations but the performance hit of + doing this is completely unacceptable since that would require pixel-level + manipulation directly in PHP with would be prohibitively CPU expensive).

    +

    To use background images the extended anti alias feature in windrose plots must be + disabled with a call to Windrosegraph::SetAntiAlias(false)

    +

    In order to add a background image the normal method + SetBackgroundImage() is used. The following code snippet shows how + this is done.

    +

    +

    1
    +
    $graph->SetBackgroundImage('mybackground.jpg',BGIMG_FILLFRAME);

    +

    +

    The above example puts the image covering the entire graph area.

    +

    Remember that you can also adjust the mixing level of the background image with a + call to SetBackgroundImageMix($aMixLevel) This determines how much of + the image is blended with the background color. An argument of 100 takes 100 percent + of the image and a value of 0 is the same as not displaying the background image at + all.

    +

    An example of using a background image is shown in Example 10

    +

    See Adding images and country flags to the background of the graph for more general information + on background images.

    +

    +

    Tip

    +

    Remember that the method Graph::SetBackgroundImageMix($aMix) + can be used to adjust the alpha blending of the background image

    +

    +

    +
    +

    Adjusting the interpretation for ordinal keys in data

    + +

    As previously stated the position for data values in the plot, (when the ' key is + specified as an integer), is the index of the displayed axis counted + counter-clockwise from "East".

    +

    Another possibility which seems to be standard in some application of Windrose + plots is to start counting clockwise from the first axis after the "North" axis. + Depending on if the plots displays 16 , 8 or 3 axis this first axis (with ordinal + number 0) would then be either "NNE", "NE" or "E".

    +

    To adjust the interpretation the following method is used

    +

    +

    • +

      WindrosePlot::SetDataKeyEncoding($aEncoding) +

      +

      Possible values for the parameter are

      +

      +

      • +

        KEYENCODING_CLOCKWISE, This setting will + force the plot to interpret the key in the data as counted + clockwise. The axis with 0-index is taken to be the first + existing axis just to the right of "North" counted + clockwise.

        +
      • +

        KEYENCODING_ANTICLOCKWISE, This setting will + force the plot to interpret the key in the data as counted + counter-clockwise. The axis with the 0-index is the "East" + axis.

        +

      +

      +

    +

    +

    By default the setting is KEYENCODING_ANTICLOCKWISE. ?? illustrates + how the same data can be interpretated in two different way depending on this + setting. The data in both figure a) and b) was given by the array

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    $data = array(
    +    0 => array(3,2,1,2,2),
    +    4 => array(1,1,1.5,2),
    +    6 => array(1,1,1.5,2),
    +    12 => array(2,3,5,1),
    +);

    +

    +

    +

    Figure 21.15. Interpretation of ordinal keys (windrose_ex9.1.php)

    Interpretation of ordinal keys (windrose_ex9.1.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch21s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch21s05.html new file mode 100755 index 00000000..6b40d9ac --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch21s05.html @@ -0,0 +1,187 @@ +Adding icon and text objects to the graph

    Adding icon and text objects to the graph

    + +

    Windrose plots supports the ordinary way of adding icon and text objects to the graph.

    +

    Adding a text object

    + +

    Text objects are added by first creating an instance of class Text + for each text needed and then adding the text to the graph with the usual call to + WindroseGraph::Add().

    +

    A basic text will only require two additional lines of code

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$txt = new Text('Simple string',20,20);
    +$graph->Add($txt); 
    +?>

    +

    +

    The following code snippet is slightly more complicated and will create a boxed + text in the upper right corner of the graph.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    <?php
    +// Add a boxed text
    +$txt = new Text();
    +$txt->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$txt->Set("Arbitrary text\non a\nWidrose Plot");
    +$txt->SetParagraphAlign('center');
    +$txt->SetPos(0.95,0.15,'right');
    +$txt->SetBox('lightyellow');
    +$txt->SetShadow();
    +$graph->Add($txt); 
    +?>

    +

    +

    An example of adding text to a graph can for example be seen in Figure 21.23.  (windrose_ex5.php) . The snippet above adds a text at coordinates + X=20, Y=20 using the default lower left corner as the text anchor point.

    +

    +

    Note

    +

    To add a newline you must remember to use double-quotes to enclose the + text otherwise the "\n" will only be interpreted literally.

    +

    +

    +

    +

    Note

    +

    Remember that the "text align", as adjusted with SetAlign(), + specifies the anchor point for the text, i.e. what part of the text is + aligned with the specified position.

    +

    +

    +

    To add many text strings it is often useful to specify them in an array and then + have a loop creating the text object and add the text array of all the created + objects to the graph as the following short snippet shows.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    <?php
    +//--------------------------------------------------------------
    +// Add texts to the graph
    +//--------------------------------------------------------------
    +$txts = array( 
    +    array('Textstring one ...',$tx1,$ty1),
    +    array('Textstring two ...',$tx2,$ty2),
    +    array('Textstring three ...',$tx3,$ty3),
    + 
    +$n=count($txts);
    +$t=array();
    +for($i=0; $i < $n; ++$i){
    +    $t[$i] = new Text($txts[$i][0],$txts[$i][1],$txts[$i][2]);
    +    $t[$i]->SetFont(FF_ARIAL,FS_NORMAL,12);
    +    $t[$i]->SetColor('brown');
    +    $t[$i]->SetAlign('center','top');
    +}
    +$graph->Add($t);
    +?>

    +

    +
    +

    Adding icons to the graph

    + +

    Icons are added as instances of class IconPlot to the graph (as usual + with a call to WindroseGraph::Add()). This means that to use icons the + library module "jpgraph_iconplot.php" must first be included.

    +

    The following example shows how to add a small "tornado" icon in the upper left + corner of the graph. For more information on formatting icons that are added to a + graph see Adding icons (and small images) to the graph

    +

    +

    Caution

    +

    Since Windrose graphs doesn't have a ny concept of linear scale the + position of icons can only be specified as absolute pixels or fraction of + the width/height.

    +

    +

    +

    +

    Example 21.5. Adding a "tornado" icon to the top left corner (windrose_icon_ex1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    +$data = array(
    +    0 => array(1,1,2.5,4),
    +    1 => array(3,4,1,4),
    +    'wsw' => array(1,5,5,3),
    +    'N' => array(2,7,5,4,2),
    +    15 => array(2,7,12));
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,400);
    + 
    +// Creta an icon to be added to the graph
    +$icon = new IconPlot('tornado.jpg',10,10,1.3,50);
    +$icon->SetAnchor('left','top');
    +$graph->Add($icon);
    + 
    +// Setup title
    +$graph->title->Set('Windrose icon example');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Add to graph and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>


    Figure 21.16. Adding a "tornado" icon to the top left corner (windrose_icon_ex1.php)

    Adding a "tornado" icon to the top left corner (windrose_icon_ex1.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch21s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch21s06.html new file mode 100755 index 00000000..ca5e09a8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch21s06.html @@ -0,0 +1,239 @@ +Using layout classes to position Windrose plots

    Using layout classes to position Windrose plots

    + +

    Normally we don't want to have to calculate the absolute x and y coordinates when + positioning multiple Windrose plots in graph as was done in Figure 21.7. Adding two windrose plots to the same graph (windrose_2plots_ex1.php) . A much better concept would be to just tell + the library to position three windrose plots horizontally or vertically without having + to figure out the exact coordinates our self.

    +

    This is where layout classes come in handy.

    +

    There are two types of layouts; horizontal and vertical. To specify that two windroses + should be positioned side by side (horizontal) a new horizontal layout object is created + and then the two windroses plots are added as object within the horizontal layout class. + Later on when the objects are about to be stroked on the graph the horizontal layout + class will take all its objects and spread them out evenly along a horizontal line + depending on the individual size of each windrose. The same principle applies to the + vertical layout class with the obvious change in direction.

    +

    The layout object are added to the graph in exactly the same was as odometers, by + calling the WindroseGraph::Add() method.

    +

    The following line would create a horizontal line of three windrose plots

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    <?php
    +$graph = WindroseGraph($width,$height);
    + 
    +...
    +// Create three plots
    +$w1 = new WindrosePlot($data1);
    +$w1->SetSize(0.25);
    +$w2 = new WindrosePlot($data2);
    +$w2->SetSize(0.25);
    +$w3 = new WindrosePlot($data3);
    +$w3->SetSize(0.25);
    + 
    +// Position them even horizontally
    +$hor = new LayoutHor( array($w1, $w2, $w3) );
    + 
    +// add and send back to the client
    +$graph->Add($hor);
    +$graph->Stroke();
    +?>

    +

    +

    Since both horizontal en vertical layout can be combined it is possible to create + almost any rectangular layout. For example to create a 4x4 graph first two horizontal + layouts would be created and they would then be included in a vertical layout as the + following principle code snippet shows.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +
    <?php
    +$graph = WindroseGraph($width,$height);
    + 
    +...
    +// Create three plots
    +$w1 = new WindrosePlot($data1);
    +$w1->SetSize(0.24);
    +$w2 = new WindrosePlot($data2);
    +$w2->SetSize(0.24);
    +$w3 = new WindrosePlot($data3);
    +$w3->SetSize(0.24);
    +$w4 = new WindrosePlot($data4);
    +$w4->SetSize(0.24);
    + 
    +// Create the two rows
    +$hor1 = new LayoutHor( array($w1, $w2) );
    +$hor2 = new LayoutHor( array($w3, $w4) );
    + 
    +// positioned on top of each other
    +$vert = new LayoutVert( array($hor1, $hor2) );
    + 
    +// add and send back to the client
    +$graph->Add($vert);
    +$graph->Stroke();
    +?>

    +

    +

    An example of this is shown in Figure 21.17. Using layout classes to position 4 windrose plots (windrose_layout_ex0.php)

    +

    +

    Figure 21.17. Using layout classes to position 4 windrose plots (windrose_layout_ex0.php)

    Using layout classes to position 4 windrose plots (windrose_layout_ex0.php)


    +

    +

    A slightly more complex example where some more formatting have been added is shown in + Figure 21.18. Using layout classes to position 5 windrose plots (windrose_layout_ex1.php) where two larger plots are in the top + row and three smaller plots are shown in the bottom row.

    +

    +

    Example 21.6. Using layout classes to position 5 windrose plots (windrose_layout_ex1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Some data for the five windrose plots
    +$data = array(
    +    array(
    +        1 => array(10,10,13,7),
    +        2 => array(2,8,10),
    +        4 => array(1,12,22)),
    +    array(
    +        4 => array(12,8,2,3),
    +        2 => array(5,4,4,5,2)),
    +    array(
    +        1 => array(12,8,2,3),
    +        3 => array(5,4,4,5,2)),
    +    array(
    +        2 => array(12,8,2,3),
    +        3 => array(5,4,4,5,2)),
    +    array(
    +        4 => array(12,8,2,3),
    +        6 => array(5,4,4,5,2))
    +);
    + 
    +// Legend range colors
    +$rangecolors = array('green','yellow','red','brown');
    + 
    +// Create a windrose graph with titles
    +$graph = new WindroseGraph(750,700);
    + 
    +$graph->title->Set('Multiple plots with automatic layout');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +// Setup the individual windrose plots
    +$wp = array();
    +for( $i=0; $i < 5; ++$i ) {
    +    $wp[$i] = new WindrosePlot($data[$i]);
    +    $wp[$i]->SetType(WINDROSE_TYPE8);
    +    if( $i < 2) {
    +        $wp[$i]->SetSize(0.28);
    +    }
    +    else {
    +        $wp[$i]->legend->Hide();
    +        $wp[$i]->SetSize(0.16);
    +        $wp[$i]->SetCenterSize(0.25);
    +    }
    +    $wp[$i]->SetRangeColors($rangecolors);
    +}
    + 
    +// Position with two rows. Two plots in top row and three plots in
    +// bottom row.
    +$hl1 = new LayoutHor( array( $wp[0], $wp[1] ) );
    +$hl2 = new LayoutHor( array( $wp[2], $wp[3], $wp[4] ) );
    +$vl = new LayoutVert( array( $hl1, $hl2) );
    + 
    +$graph->Add($vl);
    +$graph->Stroke();
    +?>


    Figure 21.18. Using layout classes to position 5 windrose plots (windrose_layout_ex1.php)

    Using layout classes to position 5 windrose plots (windrose_layout_ex1.php)


    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch21s07.html b/Societes/ric/jpgraph/docs/chunkhtml/ch21s07.html new file mode 100755 index 00000000..38cefe98 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch21s07.html @@ -0,0 +1,1293 @@ +Example section

    Example section

    + +

    The following section is a summary with a number of examples that illustrates the + usage of the methods described in the previous sections.

    +

    Example 1

    + +

    Objectives:

    +

    +

    1. +

      Showing a complete but elementary windrose plot using mostly default + values.

      +
    2. +

      Adding and formatting a title

      +
    3. +

      Adding a legend text in order to show the units.

      +
    4. +

      Showing how to specify data using both ordinal and textual + representation of compass directions.

      +

    +

    +

    +

    Example 21.7.  (windrose_ex1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +$data = array(
    +    0 => array(1,1,2.5,4),
    +    1 => array(3,4,1,4),
    +    'wsw' => array(1,5,5,3),
    +    'N' => array(2,7,5,4,2),
    +    15 => array(2,7,12));
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,400);
    + 
    +// Setup title
    +$graph->title->Set('Windrose basic example');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    +$wp->SetRadialGridStyle('solid');
    +$graph->Add($wp);
    + 
    +// Send the graph to the browser
    +$graph->Stroke();
    +?>


    Figure 21.19.  (windrose_ex1.php)

    (windrose_ex1.php)


    +

    +
    +

    Example 2

    + +

    Objectives:

    +

    +

    1. +

      Showing how to customize the width of the windrose legs

      +
    2. +

      Showing how to only display 8 compass axis

      +
    3. +

      Showing how to set a specific size in pixels for the plot

      +
    4. +

      Showing how to adjust the size of the center circle

      +
    5. +

      Showing how to adjust scale label font &colors

      +
    6. +

      Showing how to adjust the font for the compass directions

      +

    +

    +

    +

    Example 21.8.  (windrose_ex2.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label
    +$data = array(
    +    0 => array(1,1,2.5,4),
    +    1 => array(3,4,1,4),
    +    3 => array(2,7,4,4,3),
    +    5 => array(2,7,1,2));
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,400);
    + 
    +// Setup title
    +$graph->title->Set('Windrose example 2');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Make it have 8 compass direction
    +$wp->SetType(WINDROSE_TYPE8);
    + 
    +// Setup the weight of the laegs for the different ranges
    +$weights = array_fill(0,8,10);
    +$wp->SetRangeWeights($weights);
    + 
    +// Adjust the font and font color for scale labels
    +$wp->scale->SetFont(FF_TIMES,FS_NORMAL,11);
    +$wp->scale->SetFontColor('navy');
    + 
    +// Set the diametr for the plot to 160 pixels
    +$wp->SetSize(200);
    + 
    +// Set the size of the innermost center circle to 30% of the plot size
    +$wp->SetZCircleSize(0.2);
    + 
    +// Adjust the font and font color for compass directions
    +$wp->SetFont(FF_ARIAL,FS_NORMAL,12);
    +$wp->SetFontColor('darkgreen');
    + 
    +// Add and send back the graph to the client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>


    Figure 21.20.  (windrose_ex2.php)

    (windrose_ex2.php)


    +

    +
    +

    Example 3

    + +

    Objectives:

    +

    +

    1. +

      Showing how to add multiple plots to the same graph

      +
    2. +

      Showing how to add a subtitle and a drop shadow to the graph

      +
    3. +

      Showing how to change size and position for plots

      +
    4. +

      Showing how to add legend text

      +

    +

    +

    +

    Example 21.9.  (windrose_ex3.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label
    +$data[0] = array(
    +    0 => array(1,1,2.5,4),
    +    1 => array(3,4,1,4),
    +    3 => array(2,7,4,4,3),
    +    5 => array(2,7,1,2));
    + 
    +$data[1] = array(
    +    "n" => array(1,1,2.5,4),
    +    "ssw" => array(3,4,1,4),
    +    "se" => array(2,7,4,4,3));
    + 
    +// Store the position and size data for each plot in an
    +// array to make it easier to create multiple plots.
    +// The format choosen for the layout data is
    +// (type,x-pos,y-pos,size, z-circle size)
    +$layout = array(
    +    array(WINDROSE_TYPE8,0.25,0.55,0.4,0.25),
    +    array(WINDROSE_TYPE16,0.75,0.55,0.4,0.25));
    + 
    +$legendtxt = array('(m/s) Station 7','(m/s) Station 12');
    + 
    +// First create a new windrose graph with a dropshadow
    +$graph = new WindroseGraph(600,350);
    +$graph->SetShadow('darkgray');
    + 
    +// Setup titles
    +$graph->title->Set('Windrose example 3');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    +$graph->subtitle->Set('(Multiple plots in the same graph)');
    +$graph->subtitle->SetFont(FF_VERDANA,FS_NORMAL,9);
    +$graph->subtitle->SetColor('navy');
    + 
    +// Create the two windrose plots.
    +for( $i=0; $i < count($data); ++$i ) {
    +    $wp[$i] = new WindrosePlot($data[$i]);
    + 
    +    // Make it have 8 compass direction
    +    $wp[$i]->SetType($layout[$i][0]);
    + 
    +    // Adjust the font and font color for scale labels
    +    $wp[$i]->scale->SetFont(FF_TIMES,FS_NORMAL,10);
    +    $wp[$i]->scale->SetFontColor('navy');
    + 
    +    // Set the position of the plot
    +    $wp[$i]->SetPos($layout[$i][1],$layout[$i][2]);
    + 
    +    // Set the diameter for the plot to 30% of the width of the graph pixels
    +    $wp[$i]->SetSize($layout[$i][3]);
    + 
    +    // Set the size of the innermost center circle to 30% of the plot size
    +    $wp[$i]->SetZCircleSize($layout[$i][4]);
    + 
    +    // Adjust the font and font color for compass directions
    +    $wp[$i]->SetFont(FF_ARIAL,FS_NORMAL,10);
    +    $wp[$i]->SetFontColor('darkgreen');
    + 
    +    // Add legend text
    +    $wp[$i]->legend->SetText($legendtxt[$i]);
    + 
    +    $graph->Add($wp[$i]);
    +}
    + 
    +// Send the graph to the browser
    +$graph->Stroke();
    +?>


    Figure 21.21.  (windrose_ex3.php)

    (windrose_ex3.php)


    +

    +
    +

    Example 4

    + +

    Objectives:

    +

    +

    1. +

      Showing how to add arbitrary paragraphs of text to a graph

      +
    2. +

      Showing how to manually set the grid distance

      +
    3. +

      Showing how to adjust the grid colors

      +
    4. +

      Showing how to customize the format for the displayed ranges

      +
    5. +

      Showing how to add arbitrary text to the center circle

      +
    6. +

      Showing how to adjust the margin for the legend

      +
    7. +

      Showing how to increase the margin to the compass directions

      +

    +

    +

    +

    Example 21.10.  (windrose_ex4.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label
    +$data = array(
    +    0 => array(1,1,2.5,4),
    +    1 => array(3,4,1,4),
    +    3 => array(2,7,4,4,3),
    +    5 => array(2,7,1,2));
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,400);
    + 
    +// Setup title
    +$graph->title->Set('Windrose example 4');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Adjust the font and font color for scale labels
    +$wp->scale->SetFont(FF_TIMES,FS_NORMAL,11);
    +$wp->scale->SetFontColor('navy');
    + 
    +// Set the diameter and position for plot
    +$wp->SetSize(190);
    + 
    +// Set the size of the innermost center circle to 40% of the plot size
    +// Note that we can have the automatic "Zero" sum appear in our custom text
    +$wp->SetZCircleSize(0.38);
    +$wp->scale->SetZeroLabel("Station 12\n(Calm %d%%)");
    + 
    +// Adjust color and font for center circle text
    +$wp->scale->SetZFont(FF_ARIAL,FS_NORMAL,9);
    +$wp->scale->SetZFontColor('darkgreen');
    + 
    +// Adjust the font and font color for compass directions
    +$wp->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$wp->SetFontColor('darkgreen');
    + 
    +// Adjust the margin to the compass directions
    +$wp->SetLabelMargin(50);
    + 
    +// Adjust grid colors
    +$wp->SetGridColor('silver','blue');
    + 
    +// Add (m/s) text to legend
    +$wp->legend->SetText('(m/s)');
    +$wp->legend->SetMargin(20,5);
    + 
    +// Add and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>


    Figure 21.22.  (windrose_ex4.php)

    (windrose_ex4.php)


    +

    +
    +

    Example 5

    + +

    Objectives:

    +

    +

    1. +

      Showing how to add arbitrary paragraphs of text to a graph

      +
    2. +

      Showing how to manually set the grid distance

      +
    3. +

      Showing how to add a box/frame around the individual plot

      +
    4. +

      Showing how to localize the compass directions

      +
    5. +

      Showing how to set customized colors for the ranges

      +

    +

    +

    +

    Example 21.11.  (windrose_ex5.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data
    +$data = array(
    +    0 => array(1,1,2.5,4),
    +    1 => array(3,4,1,4),
    +    3 => array(2,7,4,4,3),
    +    5 => array(2,7,1,2));
    + 
    +// Text to be added.
    +$txt=array();
    +$txt[0] = "It is possible to add arbitrary,multi line, text to a graph. ";
    +$txt[0] .= "Such a paragraph can have it's text be left, right or center ";
    +$txt[0] .= "aligned.";
    +$txt[1] = "This is an example of a right aligned paragraph.";
    +$txt[2] = "Finally we can show a center aligned paragraph without box.";
    + 
    +// We store the layout for each of the text boxes in an array
    +// to keep the code clean
    +$txtlayout = array(
    +    array(0.97,0.15,25,'left','black','lightblue'),
    +    array(0.97,0.4,20,'right','black','lightblue'),
    +    array(0.97,0.7,20,'center','darkred',false,FF_COMIC,FS_NORMAL,12),
    +);
    + 
    +// Range colors to be used
    +$rangeColors = array('silver','khaki','orange','brown','blue','navy','maroon','red');
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(570,430);
    +$graph->title->Set('Windrose example 5');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    + 
    +// Setup graph background color
    +$graph->SetColor('darkgreen@0.7');
    + 
    +// Setup all the defined text boxes
    +$n = count($txt);
    +for( $i=0; $i < $n; ++$i ) {
    +    $txtbox[$i] = new Text($txt[$i]);
    +    $txtbox[$i]->SetPos($txtlayout[$i][0],$txtlayout[$i][1],'right');
    +    $txtbox[$i]->SetWordwrap($txtlayout[$i][2]);
    +    $txtbox[$i]->SetParagraphAlign($txtlayout[$i][3]);
    +    $txtbox[$i]->SetColor($txtlayout[$i][4]);
    +    $txtbox[$i]->SetBox($txtlayout[$i][5]);
    +    if( count($txtlayout[$i]) > 6 )
    +    $txtbox[$i]->SetFont($txtlayout[$i][6],$txtlayout[$i][7],$txtlayout[$i][8]);
    +}
    +$graph->Add($txtbox);
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Set background color for plot area
    +$wp->SetColor('lightyellow');
    + 
    +// Add a box around the plot
    +$wp->SetBox();
    + 
    +// Setup the colors for the ranges
    +$wp->SetRangeColors($rangeColors);
    + 
    +// Adjust the font and font color for scale labels
    +$wp->scale->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$wp->scale->SetFontColor('navy');
    + 
    +// Set the diameter and position for plot
    +$wp->SetSize(190);
    +$wp->SetPos(0.35,0.53);
    + 
    +$wp->SetZCircleSize(0.2);
    + 
    +// Adjust the font and font color for compass directions
    +$wp->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$wp->SetFontColor('darkgreen');
    + 
    +// Adjust the margin to the compass directions
    +$wp->SetLabelMargin(50);
    + 
    +// Adjust grid colors
    +$wp->SetGridColor('silver','blue');
    + 
    +// Add (m/s) text to legend
    +$wp->legend->SetText('(m/s)');
    +$wp->legend->SetMargin(20,5);
    + 
    +// Add plot and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>


    Figure 21.23.  (windrose_ex5.php)

    (windrose_ex5.php)


    +

    +
    +

    Example 6

    + +

    Objectives:

    +

    +

    1. +

      Set range colors

      +
    2. +

      Set grid colors

      +
    3. +

      Showing how to adjust the label margin

      +
    4. +

      Showing how to change the format for displayed legend values

      +

    +

    +

    +

    Example 21.12.  (windrose_ex6.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label
    +$data = array(
    +    '10'  => array(1,1,2.5,4),
    +    '32.0' => array(3,4,1,4),
    +    '120.5' => array(2,3,4,4,3,2,1),
    +    '223.2' => array(2,4,1,2,2),
    +    '285.7' => array(2,2,1,2,4,2,1,1)
    +);
    + 
    +// Specify text for direction labels
    +$labels = array( '120.5' => "Plant\n#1275",
    +         '285.7' => "Reference\n#13 Ver:2");
    + 
    +// Range colors to be used
    +$rangeColors = array('khaki','yellow','orange','orange:0.7','brown','darkred','black');
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,450);
    + 
    +// Setup titles
    +$graph->title->Set('Windrose example 6');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    + 
    +$graph->subtitle->Set('(Free type plot)');
    +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10);
    +$graph->subtitle->SetColor('navy');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Setup a free plot
    +$wp->SetType(WINDROSE_TYPEFREE);
    + 
    +// Setup labels
    +$wp->SetLabels($labels);
    +$wp->SetLabelPosition(LBLPOSITION_CENTER);
    +$wp->SetLabelMargin(30);
    + 
    +// Setup the colors for the ranges
    +$wp->SetRangeColors($rangeColors);
    + 
    +// Adjust the font and font color for scale labels
    +$wp->scale->SetFont(FF_ARIAL,FS_NORMAL,9);
    + 
    +// Set the diameter and position for plot
    +$wp->SetSize(230);
    +$wp->SetZCircleSize(30);
    + 
    +// Adjust the font and font color for compass directions
    +$wp->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$wp->SetFontColor('darkgreen');
    + 
    +// Adjust grid colors
    +$wp->SetGridColor('darkgreen@0.7','blue');
    + 
    +// Add (m/s) text to legend
    +$wp->legend->SetText('(m/s)');
    + 
    +// Display legend values with no decimals
    +$wp->legend->SetFormat('%d');
    + 
    +// Add plot to graph and send back to the client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>


    Figure 21.24.  (windrose_ex6.php)

    (windrose_ex6.php)


    +

    +
    +

    Example 7

    + +

    Objectives:

    +

    +

    1. +

      Showing how to change the direction labels

      +
    2. +

      Adjust the displayed ranges

      +
    3. +

      Showing how to change the format for displayed legend values

      +
    4. +

      Showing how to manually setting the scale range and scale step size +

      +

    +

    +

    +

    Example 21.13.  (windrose_ex7.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +$data = array(
    +    2 => array(1,15,7.5,2),
    +    5 => array(1,1,1.5,2),
    +    7 => array(1,2,10,3,2),
    +    9 => array(2,3,1,3,1,2),
    +    );
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,450);
    +$graph->title->Set('Windrose example 7');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    +$graph->title->SetColor('navy');
    + 
    +// Create the free windrose plot.
    +$wp = new WindrosePlot($data);
    +$wp->SetType(WINDROSE_TYPE16);
    + 
    +// Add some "arbitrary" text to the center
    +$wp->scale->SetZeroLabel("SOx\n8%%");
    + 
    +// Localize the compass direction labels into Swedish
    +// Note: The labels for data must now also match the exact
    +// string for the compass directions.
    +$se_CompassLbl = array('O','ONO','NO','NNO','N','NNV','NV','VNV',
    +                          'V','VSV','SV','SSV','S','SSO','SO','OSO');
    +$wp->SetCompassLabels($se_CompassLbl);
    + 
    +// Localize the "Calm" text into Swedish and make the circle
    +// slightly bigger than default
    +$se_calmtext = 'Lugnt';
    +$wp->legend->SetCircleText($se_calmtext);
    +$wp->legend->SetCircleRadius(20);
    + 
    +// Adjust the displayed ranges
    +$ranges = array(1,3,5,8,12,19,29);
    +$wp->SetRanges($ranges);
    +//$wp->SetAntiAlias(true);
    + 
    +// Set the scale to always have max value of 30 with a step
    +// size of 12.
    +$wp->scale->Set(30,12);
    + 
    +// Finally add it to the graph and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>


    Figure 21.25.  (windrose_ex7.php)

    (windrose_ex7.php)


    +

    +
    +

    Example 8

    + +

    Objectives:

    +

    +

    1. +

      Different styles of radial grid lines for a type 8 plot

      +
    2. +

      Adding partial labels

      +

    +

    +

    +

    Example 21.14. Show how to set different styles for individual radial grid lines (windrose_ex8.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label.
    +$data = array(
    +    '45.9' => array(3,2,1,2,2),
    +    355 => array(1,1,1.5,2),
    +    180 => array(1,1,1.5,2),
    +    150 => array(1,2,1,3),
    +    'S' => array(2,3,5,1),
    +    );
    + 
    +// Add some labels for  afew of the directions
    +$labels = array(355=>"At\nHome base",180=>"Probe\n123",150=>"Power\nplant");
    + 
    +// Define the color,weight and style of some individual radial grid lines.
    +$axiscolors = array(355=>"red");
    +$axisweights = array(355=>8);
    +$axisstyles = array(355=>'solid',150=>'solid');
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,500);
    +$graph->title->Set('Windrose example 8');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    +$graph->title->SetColor('navy');
    + 
    +// Create the free windrose plot.
    +$wp = new WindrosePlot($data);
    +$wp->SetType(WINDROSE_TYPEFREE);
    + 
    +// Specify colors weights and style for the radial gridlines
    +$wp->SetRadialColors($axiscolors);
    +$wp->SetRadialWeights($axisweights);
    +$wp->SetRadialStyles($axisstyles);
    + 
    +// Add a few labels
    +$wp->SetLabels($labels);
    + 
    +// Add some "arbitrary" text to the center
    +$wp->scale->SetZeroLabel("SOx\n8%%");
    + 
    +// Finally add it to the graph and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>


    Figure 21.26. Show how to set different styles for individual radial grid lines (windrose_ex8.php)

    Show how to set different styles for individual radial grid lines (windrose_ex8.php)


    +

    +
    +

    Example 9

    + +

    Objectives:

    +

    +

    1. +

      Set radial grids for a type 16 plot

      +

    +

    +

    +

    Example 21.15.  (windrose_ex9.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label.
    +$data = array(
    +    'E' => array(3,2,1,2,2),
    +    'N' => array(1,1,1.5,2),
    +    'nw' => array(1,1,1.5,2),
    +    'S' => array(2,3,5,1),
    +    );
    + 
    +// Define the color,weight and style of some individual radial
    +// grid lines. Axis can be specified either by their (localized)
    +// label or by their index.
    +// Note; Depending on how many axis you have in the plot the
    +// index will vary between 0..n where n is the number of
    +// compass directions.
    +$axiscolors = array('nw'=>'brown');
    +$axisweights = array('nw'=>8);  // Could also be specified as 6 => 8
    +$axisstyles = array('nw'=>'solid');
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,500);
    +$graph->title->Set('Windrose example 9');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    +$graph->title->SetColor('navy');
    + 
    +// Create the free windrose plot.
    +$wp = new WindrosePlot($data);
    +$wp->SetType(WINDROSE_TYPE16);
    + 
    +// Specify colors weights and style for the radial gridlines
    +$wp->SetRadialColors($axiscolors);
    +$wp->SetRadialWeights($axisweights);
    +$wp->SetRadialStyles($axisstyles);
    + 
    +// Add some "arbitrary" text to the center
    +$wp->scale->SetZeroLabel("SOx\n8%%");
    + 
    +// Finally add it to the graph and send back to the client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>


    Figure 21.27.  (windrose_ex9.php)

    (windrose_ex9.php)


    +

    +
    +

    Example 10

    + +

    Objectives:

    +

    +

    1. +

      Showing how to add a background image which is one of the country + flags

      +

    +

    +

    +

    Example 21.16.  (windrose_bgimg_ex1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    +require_once ('jpgraph/jpgraph_flags.php');
    + 
    +// Data can be specified using both ordinal idex of axis as well
    +// as the direction label
    +$data2 = array(
    +    'vsv' => array(12,8,2,3),
    +    6 => array(5,4,4,5,4),
    +    );
    + 
    +$se_CompassLbl = array('O','ONO','NO','NNO','N','NNV','NV','VNV','V','VSV','SV','SSV','S','SSO','SO','OSO');
    + 
    +// Create a new small windrose graph
    +$graph = new WindroseGraph(400,400);
    +$graph->SetMargin(25,25,25,25);
    +$graph->SetFrame();
    + 
    +$graph->title->Set('Example with background flag');
    +#$graph->title->SetFont(FF_VERA,FS_BOLD,14);
    + 
    + 
    +//$graph->SetBackgroundImage('bkgimg.jpg',BGIMG_FILLFRAME);
    +//$graph->SetBackgroundImageMix(90);
    +$graph->SetBackgroundCFlag(28,BGIMG_FILLFRAME,15);
    + 
    + 
    +$wp2 = new WindrosePlot($data2);
    +$wp2->SetType(WINDROSE_TYPE16);
    +$wp2->SetSize(0.55);
    +$wp2->SetPos(0.5,0.5);
    +$wp2->SetAntiAlias(false);
    + 
    +$wp2->SetFont(FF_ARIAL,FS_BOLD,10);
    +$wp2->SetFontColor('black');
    + 
    +$wp2->SetCompassLabels($se_CompassLbl);
    +$wp2->legend->SetMargin(20,5);
    + 
    +$wp2->scale->SetZFont(FF_ARIAL,FS_NORMAL,8);
    +$wp2->scale->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$wp2->scale->SetLabelFillColor('white','white');
    + 
    +$wp2->SetRangeColors(array('green','yellow','red','brown'));
    + 
    +$graph->Add($wp2);
    +$graph->Stroke();
    +?>


    Figure 21.28.  (windrose_bgimg_ex1.php)

    (windrose_bgimg_ex1.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch22.html b/Societes/ric/jpgraph/docs/chunkhtml/ch22.html new file mode 100755 index 00000000..78112fe2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch22.html @@ -0,0 +1,90 @@ +Chapter 22. Matrix graphs

    Chapter 22. Matrix graphs

    + +

    Introduction

    + +

    Note

    +

    This module is only available in the pro-version of the library.

    +
    +

    Matrix graphs are used to visualize the content of a rectangular matrix. Each entry in + the matrix is mapped to a specific color which are then displayed in a rectangular plot + corresponding to the size of the input matrix. The size of each module (corresponding to + a matrix entry) is user customizable. There are two types of possible modules; circular + and rectangular shape.

    +

    In order to achieve high quality rendering when circles are used the matrix module + makes use of an optional (user settable) super-sampling to achieve an anti-alias effect + to take the edge of the filled circles.

    +

    The color assignment to each value is controlled by the selected color map. The + library first establish the min and max value in the matrix and then equates the min + value with the "lower" end of the specified color map and the max value with the + "higher" end of the color map. All values in between is linearly interpolated to a have + a color between the "low" and "high" end in relation to the value (which are guaranteed + to be between the min and max value previously established). There are several + pre-defined color maps available as well as completely user configurable color maps.

    +

    The (optional) legend shows the range associated to each color in the corresponding + plot.

    +

    +

    Tip

    +

    The library supports mesh interpolation. Mesh interpolation which by itself + doesn't produce any new data but can help produce smoother plots by creating + "false" interpolated values in between the original entries in the matrix. This + is similar to the Matlab (tm) command interp2 +

    +

    +

    +

    The overall structure and capabilities of matrix graphs follows that of other graphs + in the library, e.g. Windrose plots, in that a graph can have multiple plots, title, + footers, texts, icons, image backgrounds etc. Figure 22.1. A medium complex example to shows some capabilities of matrix plots (matrix_introex.php) shows a medium complex example of two matrix + plots in a matrix graphs which uses both a background image, icon (the logo in the top + left corner), timing of the graph and free positioned text. We have also used a small + degree of alpha blending in the plots just to let the background "shine" through a + little bit. The two plots shows the same data but uses different color maps.

    +

    +

    Figure 22.1. A medium complex example to shows some capabilities of matrix plots (matrix_introex.php)

    A medium complex example to shows some capabilities of matrix plots (matrix_introex.php)


    +

    +

    The library offers an extensive range of formatting for the appearance of the plot + when it comes to adjusting exactly how the colors are used. There are several built in + color maps as well as the possibility to specify manual color maps and adjusting the + contrast (scale range) of the plot.

    +

    Features of the matrix plots

    + +

    +

    • +

      Both manual and automatic scale range setting

      +
    • +

      Customizable legend position and layout

      +
    • +

      Row and column legends (edge labels)

      +
    • +

      Several built in color maps (22)

      +
    • +

      Option for manual specified color maps

      +
    • +

      Adjustable color contrast

      +
    • +

      Layout classes to position multiple plots in the sam graph

      +
    • +

      Both circular and rectangular module type

      +
    • +

      Mesh interpolation of input data

      +
    • +

      Flexible sizing of matrix plots both manual, automatic and a mix of + them

      +
    • +

      Alpha blending support for matrix plot

      +
    • +

      All the usual graph support for background images, text objects and + icons

      +

    +

    +
    +
    + + + + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch22s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch22s02.html new file mode 100755 index 00000000..c724a8cf --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch22s02.html @@ -0,0 +1,118 @@ +Creating and formatting a basic matrix graph

    Creating and formatting a basic matrix graph

    + +

    In order to create a matrix plot the extension module + "jpgraph_matrix.php" must be included in the script along with + the core module "jpgraph.php".

    +

    The creation of Matrix graphs otherwise follows the traditional steps in the library + of first creating a matrix graph which acts as a canvas for one or several matrix plots. + The principle steps are:

    1. +

      Create a basic matrix graph as an instance of class + MatrixGraph (in all our example we use the variable + $graph to hold this instance)

      +
    2. +

      Create an instance of one or several matrix plots as instances of + class MatrixPlot, make any necessary modifications to the + color map and appearance and then add the plots to the matrix graph + canvas.

      +
    3. +

      Send back the graph to the client with a call to + MatrixGraph::Stroke(). As usual this can be used to either + send back the graph to the client (e.g.browser) or write the graph to a file + by specifying a filename as the first argument to + MatrixGraph::Stroke().

      +
    +

    The example in Figure 22.2. A basic matrix graph with all default values (matrix_ex0.php) shows a matrix plot using just the default values for + all parameters.

    +

    +

    Example 22.1. A basic matrix graph with all default values (matrix_ex0.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +
    <?php
    +require_once('jpgraph/jpgraph.php');
    +require_once('jpgraph/jpgraph_matrix.php');
    + 
    +// Some (random) matrix
    +$data = array(
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,17,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,4,9,7,8,9,10),
    +    array(8,1,2,3,4,8,3,7,8,9,10),
    +    array(10,3,5,7,6,5,4,3,12,1,0),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +);
    + 
    +// Setup a bsic matrix graph and title
    +$graph = new MatrixGraph(400,300);
    +$graph->title->Set('Basic matrix example');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +// Create a ,atrix plot using all default values
    +$mp = new MatrixPlot($data);
    +$graph->Add($mp);
    + 
    +$graph->Stroke();
    + 
    +?>


    Figure 22.2. A basic matrix graph with all default values (matrix_ex0.php)

    A basic matrix graph with all default values (matrix_ex0.php)


    +

    +

    In the same way as for other graph types one or several Matrix plots can be added and + positioned freely in the Matrix graph by specifying the position as either absolute + coordinates or as fractions of the width/height of the overall graph.

    +

    +

    Tip

    +

    An easier way to position Matrix plots is to use layout classes as described + in Using layout classes to position matrix plots

    +

    +

    +

    +

    Tip

    +

    If the data for the matrix is available in a file a convenient way to get hold + of the dat in the file is to use the utility class ReadFileData to + get hold of the data using the method

    +

    +

    • +

      ReadFileData::FromMatrix($aFile,$aSeparator=' ') +

      +

    +

    +

    which read the matrix from a file. Each row of the matrix must be a separate + line and each cell is separated with the character specified as the second + argument. By default a space is used as separator. All values read back are + converted to floating point numbers (double precision). The following short + example shows how easy this is to use

    +

    +

    1
    +
    $data = ReadFileData::FromMatrix('matrixdata.txt');

    +

    +

    +

    +

    We will not further discuss all the standard graph formatting options such as the + ability to add title(s), footers etc. since this is covered in numerous other places in + this manual.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch22s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch22s03.html new file mode 100755 index 00000000..3e34e496 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch22s03.html @@ -0,0 +1,59 @@ +Mesh interpolating of input data

    Mesh interpolating of input data

    + +

    By using mesh interpolation it is possible to obtain a "smoother" looking matrix plot + by creating a "in-between" values in the original matrix by linear interpolation.

    +

    +

    Tip

    +

    This is also used in contour plots. See Understanding mesh interpolation for a more thorough discussion on + mesh interpolation and the implication of CPU usage.

    +

    +

    +

    The interpolation factor specifies how many times, recursively, the interpolation + should be done. Practical value ranges from 2-6. While it is possible to specify larger + values than 6 the time it takes to do the interpolation will grow exponentially in the + interpolation factor. It is also important to remember that this interpolation dos not + create any "more" information than what is already available in the matrix. In addition + it needs to be verified that such a linear interpolation of data is at all valid for the + underlying data in the matrix.

    +

    As an example the following figures show the effect of doing a 1-5 times interpolation + of the original data (same as interpolation = 1). With the chosen graph size it is no + point of interpolating further since doing 5 times interpolating will force the module + to be 1x1 pixel in order to fit within the constraints of the graph. (The original data + was 8x11 and interpolating it 5 times creates a 113x161 matrix)

    +
    +
     
    +
    +

    The different sizes of the plot is due to the fact that each cell in the matrix must + have an integer number of pixels. In the graphs above we have used the largest module + size while still fitting in the image. Hence the different appearances.

    +

    There are two ways of doing this interpolation.

    +

    +

    1. +

      When the matrix plot is created by specifying the interpolation factor as + the second argument to the plot constructor, i.e.

      +

      +

      1
      +
      $matrixplot = new MatrixPlot($data,4); // 4 times interpolation

      +

      +
    2. +

      If many plots share the same data it is more efficient to do it once in + the beginning instead of doing the interpolation each time a new matrix plot + object is created. This can be done by using the utility function

      +

      +

      • +

        doMeshInterpolate(&$aData, $aFactor)

        +

      +

      +

      As can be seen from the declaration this is a call by reference method + where the data is replaced by the new data that has been interpolated the + specified number of times. This avoids unnecessary data copying for large + matrices.

      +

    +

    +

    +

    Note

    +

    Those familiar with Matlab (tm) will recognize a similar mesh interpolation in + the interp2() function.

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch22s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch22s04.html new file mode 100755 index 00000000..9686d919 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch22s04.html @@ -0,0 +1,449 @@ +Formatting the matrix plot

    Formatting the matrix plot

    + +

    Color maps

    + +

    The color map is a property of the matrix plot and all aspects of the color map is + accessed through the "MatrixPlot::colormap" property which is an + instance of class MatrixColormap.

    +

    To adjust how the color map is used the following methods are available

    +

    +

    • +

      ColorMap::SetMap($aMap, $aInvert=false)

      +

      This is a polymorphic method that can take either a symbolic constant + as argument and in that case specifies one of the built in color maps or + it can be an array of colors which in that case specifies a manual color + map. There are several built in color maps of different types which are + referenced by an integer in range [0, 19]. A list of the built in color + maps can be found in Built in color maps

      +

      For example the specification

      +

      +

      1
      +
      $mp->colormap->SetMap(0);

      +

      +

      will make the library use the heat color map which is standard color + map that goes from black for the min value up through red, orange, + yellow and finally white for the highest value. This could be though of + as the color of a heated iron rod (the hottest iron is white + glowing).

      +

      The following manual specification uses three color plateau that the + map touches.

      +

      +

      1
      +2
      +
      $map = array( 'navy', 'gray', 'red' );
      +$mp->colormap->Set($map);

      +

      +

      would create a color map that would use 'navy' color for + the min value and 'red' for the max value and linearly + interpolate all other values for a color range continuously moving from + 'navy'-'gray'-'red'. The + color interpolation made between these values is a linear interpolation + of the corresponding RGB values which creates the illusion of a + continuous color change. The array must have at least two colors. There + is no limit on the maximum number of base colors specified. However + using more than ~7-10 colors to specify the color map is probably not to + be recommended.

      +

      If $aInvert is set to true then the color + map will be reversed so that the lowest color in the map will be the + highest and vice versa.

      +
    • +

      ColorMap::GetCurrMap()

      +

      Return the current set color map

      +
    • +

      ClorMap::SetRange($aMin,$aMax)

      +

      This is used to manually specify the min and max values to be used for + mapping matrix values to a color. Any values in the matrix that is lower + than $aMin will be set to the min color and any values + above $aMax will be set to the maximum color.

      +

      The matrix values in between will be mapped to the entire color scale. + Another way of looking at this is that this will compress the dynamic + range used or the colors. If the min and max values specified are much + higher and lower than the actual content of the matrix the result is + that most of the colors in the matrix will have "middle" colors (and + hence lower the contrast). By default the values are (0,0) which means + that the library will automatically determine the min/max value based on + the input data and use the entire range of colors specified in the color + map.

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +
      <?php
      +// This will lower the contrast by roughly 50 percent 
      +$mindataval = ... ; // The minimum data value
      +$maxdataval = ... ; // The maximum data value
      +$contrast = -0.5;  // Reduce the contrast by 50%
      +$adj = ($maxdataval-$mindataval+1)*$contrast/2;
      +$matrixplot->colormap->SetRange($mindataval+$adj, $maxdataval-$adj);
      +?>

      +

      +

      In a similar way the following code will instead increase the + "contrast" 50% by letting a large part of the data values become mapped + to the min and max color values.

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +
      <?php
      +// This will increase the contrast by roughly 50 percent 
      +$mindataval = ... ; // The minimum data value
      +$maxdataval = ... ; // The maximum data value
      +$contrast = 0.5;  // Increase the contrast by 50%
      +$adj = ($maxdataval-$mindataval+1)*$contrast/2;
      +$matrixplot->colormap->SetRange($mindataval+$adj, $maxdataval-$adj);
      +?>

      +

      +

      The three plots in Figure 22.3. The effects of changing the value range for the colormap shows the effect of + increasing and decreasing the contrast with this method.

      +

      Figure 22.3. The effects of changing the value range for the colormap

      + +
      The effects of changing the value range for the colormap
      +

      +

      Tip

      +

      When using the auto ranging (the default) the contrast can be + adjusted with a call to

      +

      +

      • +

        MatrixPlot::SetAutoContrast($aContrast) +

        +

      +

      +

      as in

      +

      +

      1
      +
      $matrixplot->SetAutoContrast(-0.3);

      +

      +
      +
    • +

      ColorMap::SetNumColors($aNum)

      +

      This is used to specify the number of discrete color steps used in the + map. By default the scale range is divided in approximately 64 color + buckets that all matrix entries are mapped into. Depending on the actual + color map the specified value might be adjusted up or down up to +/- + (p-1). Where p=number of base colors. Valid ranges are + 3-128 but is also dependent on the actual color map.

      +

      The reasons for these restriction and the adjustments are

      +

      +

      • +

        The minimum number of colors are the number of base colors + in the current color map

        +
      • +

        The number of colors must satisfy the equation

        +

        n = p + k*(p-1), k = 0, 1, 2, + ... (eq. 1)

        +

        where

        +

        +

        • +

          n = number of + colors

          +
        • +

          p = number of base colors + that specifies the map

          +

        +

        +

        The specified number of colors will be adjusted to the + closest number that satisfies (eq. 1).

        +

      +

      +
    • +

      ColorMap::SetNullColor($aColor)

      +

      If specified this determines what color will be used for any values in + the matrix that are null

      +

    +

    +
    +

    Changing the module type (rectangle vs. circle)

    + +

    By default the module type (the shape that represents one cell in the matrix) is a + rectangle. As was mentioned in the introduction this can also be a circle. This is + controlled by the method

    +

    +

    • +

      MatrixPlot::SetModuleType($aType)

      +

      $aType, 0 = Use rectangle, 1 = Use a circle

      +

    +

    +

    When using circular module type it might also be useful to specify a separate + background color for the plot since there will be some space between the circles + where the background can be seen. The plot background is specified with the + method

    +

    +

    • +

      MatrixPlot::SetBackgroundColor($aColor)

      +

    +

    +

    An example of using circular modules can be seen in Figure 22.4. Using a circular module type (matrix_ex05.php)

    +

    +

    Figure 22.4. Using a circular module type (matrix_ex05.php)

    Using a circular module type (matrix_ex05.php)


    +

    +
    +

    Adjusting the alpha blending of the plots

    + +

    By default the plots are filled with solid colors from the chosen color map. By + specifying an alpha value it is possible to let the background shine through the + matrix plot. The alpha blending is chosen by the method

    +

    +

    • +

      MatrixPlot::SetAlpha($aAlpha)

      +

      $aAlpha , 0=No transparency, 1=Full transparency (not so + useful since then only the background can be seen)

      +

    +

    +

    +

    +
    +

    Figure 22.5. Matrix alpha blending=0.2 (matrix_ex04.1.php)

    Matrix alpha blending=0.2 (matrix_ex04.1.php)

    +
    +

    Figure 22.6. Matrix alpha blending=0.7 (matrix_ex04.2.php)

    Matrix alpha blending=0.7 (matrix_ex04.2.php)

    +
    +

    +

    +

    +

    Note

    +

    As can be seen in the figures only the plot area is adjusted. The legend + is always shown with no transparency.

    +

    +

    +
    +

    Specifying the size

    + +

    There are three and disjunct way to specify the size of the matrix plot. However + the size can not be set to any pixel value. Since the matrix plot is a visualization + of a matrix the width and height must always be an even multiple of the number of + rows and columns since each cell in the matrix have an integer number of pixels as + width and height (the module size). This will sometimes force the library to adjust + a specified size so that it is an even multiple of the number of rows and columns in + the input data matrix.

    +

    For example; if the matrix has 50 columns this means that the width will only grow + and shrink by multiples of 50 pixels since each cell has an equal number of pixels. + The minimum width for such a matrix is 50 pixels.

    +

    There are three ways to specify the size:

    +

    +

    1. +

      by setting the width and height explicitly (in number of pixels).

      +

      Note that the actual rendered size might be different depending on the + input matrix size since each cell must have an integer number of pixels + and not all sizes will be even dividable with the input data matrix + size.

      +
    2. +

      by setting the width and height as fractions of the overall width and + height of the graph

      +

      Note that the actual rendered size might be different depending on the + size of the input data matrix.

      +
    3. +

      by specifying the width and height of each rendered cell (a.k.a the + module size)

      +

      This specifies the size (in pixels) of each module. The minimum size + is 1x1 pixels.

      +

    +

    +

    The size is adjusted by the following two methods

    +

    +

    • +

      MatrixPlot::SetSize($aW,$aH)

      +

      MatrixPlot::SetSize($aW)

      +

      If the two arguments are numbers in range [0.0, 1.0] it will be + interpreted as specifying the size as fractions of the overall graph + width and height. If the number are > 1 they will be interpreted as the + absolute size (in pixels). It is perfectly possible to mix teh two ways. + For example the following is a valid size specification

      +

      +

      1
      +
      $matrixplot->SetSize(250,0.6); // 250px wide and height will be ~60% of the graph height

      +

      +

      If only one argument is specified it will set both the width and + height to the specified size. If the single size is specified as a + fraction the smallest of the graph width/height will be used as the + base.

      +
    • +

      MatrixPlot::SetModuleSize($aW,$aH)

      +

      The two argument specifies the module size, i.e. the size of each cell + in the plot (in pixels).

      +

    +

    Note

    +

    The size does not effect the legend that belongs to a matrix plot.

    +

    +

    +
    +

    Specifying the position of the plot on the graph

    + +

    The position of the plot by is by default centered vertically and slightly move to + the left of the vertical center in order to compensate for the default legend that + is shown n the right of the plot. The position of the plot is specified by the + method

    +

    +

    • +

      MatrixPlot::SetCenterPos($aX,$aY)

      +

      Specifies the center of the plot to be the given x and y-coordinates. + The position can be specified in either absolute pixels or as fractions + of the width and height (or as a combination).

      +

    +

    Tip

    +

    In order to position multiple plots on the same graph it is easier to user + the layout classes (as described in Using layout classes to position matrix plots)

    +

    +

    +
    +

    Adjusting the legend

    + +

    The legend belongs to the matrix plot and not the graph. All legend are instances + of class MatrixLegend and is accessed through the property

    +

    +

    • +

      MatrixPlot::legend

      +

    +

    +

    By default the legend is enabled and positioned to the right of the plot. Both the + size and position of the legend can be manually adjusted.

    +

    There are four possible positions of the legend as shown in Figure 22.7. Matrix legend positions, on each of the four sides of the plot. + The labels of the legend will be automatically adjusted to face aways from the + plot.

    +

    Figure 22.7. Matrix legend positions

    + +
    Matrix legend positions
    +

    +

    To position the legend the following MatrixPlot method is used

    +

    +

    • +

      MatrixPlot::SetLegendLayout($aPos)

      +

      The position of the legend is specified as an integer in range [0-3] + where 0 is the right side of the plot and the remaining posiotins follow + clockwise from the right, (i.e. 1 is the bottom, 2 is the left and 3 is + the top side).

      +

    +

    +

    The following methods can be used to fine tune and adjust the legend

    +

    +

    • +

      MatrixLegend::Show($aFlg=true)

      +

      Used to enable/disable the legend. The following code line would hide + the legend

      +

      +

      1
      +
      $matrixplot->legend->Show(false);

      +

      +
    • +

      MatrixLegend::SetModuleSize($aBucketWidth,$aBucketHeight=5)

      +

      This specifies the size of each color bucket in the legend.

      +
    • +

      MatrixLegend::SetSize($aWidth,$aHeight=5)

      +

      This is an alternative way to specify the size of the legend compare + with the individual bucket specification. With this method the overall + width and height of the legend bar can be adjusted. The size can be + specified s either absolute pixels or as fraction of the width height of + the entire graph.

      +
    • +

      MatrixLegend::SetMargin($aMargin)

      +

      Specifies the margin (in pixels) between the matrix plot and the + legend.

      +
    • +

      MatrixLegend::SetLabelMargin($aMargin)

      +

      Specifies the margin between the min/max label and the legend + bar

      +
    • +

      MatrixLegend::SetFont($aFamily,$aStyle,$aSize)

      +

      Specifies the font for the label on the legend

      +
    • +

      MatrixLegend::SetFormatString($aStr)

      +

      Specifies the format string (in printf() format) to be + used when rendering the legend label

      +

    +

    +
    +

    Adding row and column legends

    + +

    +

    Note

    +

    This feature is only available in v3.0.4p and above.

    +

    +

    +

    When using matrix plots to display micro arrays it is often desirable to have + legends for each row and column. Figure 22.8. Adding row and column legends to a matrix plot (matrix_edgeex01.php) shows an example of this which helps + understand this concept.

    +

    +

    Figure 22.8. Adding row and column legends to a matrix plot (matrix_edgeex01.php)

    Adding row and column legends to a matrix plot (matrix_edgeex01.php)


    +

    +

    In the library this is modelled by the class EdgeLabel which is + instantiated in the matrix plot as

    +

    +

    • +

      MatrixPlot::collabel

      +

      Instance for horizontal labels

      +
    • +

      MatrixPlot::rowlabel

      +

      Instance for vertical labels

      +

    +

    +

    To adjust the appearance of the labels the following methods can be used:

    +

    +

    • +

      EdgeLabel::SetFont($aFF,$aFS,$aSize)

      +

      Specify the font to be used. Keep in mind that the font size should + not be larger than the module size chosen to be able to fit within the + row/column it specifies. For the default module size a font size of 8-9 + for a TTF font is usually fine. By default the labels are set in + FF_ARIAL, 8 pt size.

      +
    • +

      EdgeLabel::SetFontColor($aColor)

      +

      Specifies the font color.

      +
    • +

      EdgeLabel::SetMargin($aMargin)

      +

      Set the margin from the edge of the matrix in pixels.

      +
    • +

      EdgeLabel::SetSide($aSide)

      +

      Specifies on what side the labels should be drawn. For horizontal (x) + labels the possible sides are "left" or + "right" and for vertical (y) the possible sides are + "top" and "bottom".

      +
    • +

      EdgeLabel::Set($aLabels)

      +

      Specifies the 1-dimensional array that holds the labels to be + used.

      +
    • +

      EdgeLabel::SetAngle($aAngle)

      +

      Specify the angle to draw the label at. By default row labels are + drawn at 0 degree and column labels are drawn at 90 degrees + angle.

      +

    +

    +

    The simplest use of labels is to use the default values for all parameters and + just set the labels, i.e.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    <?php
    +$data = array( ... ) ;
    +$collabels = array( ... ) ;
    +$rowlabels = array( ... ) ;
    + 
    +$mp = new MatrixPlot($data);
    + 
    +$mp->collabel->Set($collabels);
    +$mp->rowlabel->Set($rowlabels);
    +?>

    +

    +

    Below is a final example of adding row and column labels to a matrix graph

    +

    +

    1
    +
    #=matrix_edgeex02|Adding row and column legends to a matrix plot##

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch22s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch22s05.html new file mode 100755 index 00000000..f3508cf0 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch22s05.html @@ -0,0 +1,294 @@ +Adding icon and text objects to the graph

    Adding icon and text objects to the graph

    + +

    Matrix plots supports the ordinary way of adding icon and text objects to the graph.

    +

    Adding a text object

    + +

    Text objects are added by first creating an instance of class Text + for each text needed and then adding the text to the graph with the usual call to + MatrixGraph::Add().

    +

    A basic text will only require two additional lines of code

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$txt = new Text('Simple string',20,20);
    +$graph->Add($txt); 
    +?>

    +

    +

    The following code snippet is slightly more complicated and will create a boxed + text in the upper right corner of the graph.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    <?php
    +// Add a boxed text
    +$txt = new Text();
    +$txt->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$txt->Set("Arbitrary text\non a\nMatrix Plot");
    +$txt->SetParagraphAlign('center');
    +$txt->SetPos(0.95,0.15,'right');
    +$txt->SetBox('lightyellow');
    +$txt->SetShadow();
    +$graph->Add($txt); 
    +?>

    +

    +

    The snippet above adds a text at coordinates X=20, Y=20 using the default lower + left corner as the text anchor point.

    +

    +

    Note

    +

    To add a newline you must remember to use double-quotes to enclose the + text otherwise the "\n" will only be interpreted literally.

    +

    +

    +

    +

    Note

    +

    Remember that the "text align", as adjusted with SetAlign(), + specifies the anchor point for the text, i.e. what part of the text is + aligned with the specified position.

    +

    +

    +

    To add many text strings it is often useful to specify them in an array and then + have a loop creating the text object and add the text array of all the created + objects to the graph as the following short snippet shows.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    <?php
    +//--------------------------------------------------------------
    +// Add texts to the graph
    +//--------------------------------------------------------------
    +$txts = array( 
    +    array('Textstring one ...',$tx1,$ty1),
    +    array('Textstring two ...',$tx2,$ty2),
    +    array('Textstring three ...',$tx3,$ty3),
    + 
    +$n=count($txts);
    +$t=array();
    +for($i=0; $i < $n; ++$i){
    +    $t[$i] = new Text($txts[$i][0],$txts[$i][1],$txts[$i][2]);
    +    $t[$i]->SetFont(FF_ARIAL,FS_NORMAL,12);
    +    $t[$i]->SetColor('brown');
    +    $t[$i]->SetAlign('center','top');
    +}
    +$graph->Add($t);
    +?>

    +

    +
    +

    Adding icons to the graph

    + +

    Icons are added as instances of class IconPlot to the graph (as usual + with a call to MatrixGraph::Add()). This means that to use icons the + library module "jpgraph_iconplot.php" must first be included.

    +

    The following example shows how to add a small icon in the lower right corner of + the graph. For more information on formatting icons that are added to a graph see Adding icons (and small images) to the graph

    +

    +

    Caution

    +

    Since Matrix graphs doesn't have a ny concept of linear scale the position + of icons can only be specified as absolute pixels or as fractions of the + width/height.

    +

    +

    +

    +

    Example 22.2. Adding an icon to the lower right corner (matrix_ex03.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_matrix.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    +$data = array(
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,17,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,4,9,7,8,9,10),
    +    array(8,1,2,3,4,8,3,7,8,9,10),
    +    array(10,3,5,7,6,5,4,3,12,1,0),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +);
    + 
    +// Do the meshinterpolation once for the data
    +doMeshInterpolate($data,3);
    +$r=count($data);$c=count($data[0]);
    + 
    +$width=400; $height=400;
    +$graph = new MatrixGraph($width,$height);
    +$graph->title->Set('Adding an icon to the background');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +$mp = new MatrixPlot($data,1);
    +$mp->SetSize(0.6);
    + 
    +$icon = new IconPlot('icon.jpg',$width-1,$height-1,0.8,50);
    +$icon->SetAnchor('right','bottom');
    +$graph->Add($icon);
    + 
    +$graph->Add($mp);
    +$graph->Stroke();
    + 
    +?>


    Figure 22.9. Adding an icon to the lower right corner (matrix_ex03.php)

    Adding an icon to the lower right corner (matrix_ex03.php)


    +

    +

    We also recall that it is possible to use country flags as icons by making use of + the method

    +

    +

    • +

      IconPlot::SetCountryFlag($aFlag,$aX=0,$aY=0,$aScale=1.0,$aMix=100,$aStdSize=3)

      +

    +

    +
    +

    Adding background images

    + +

    In just the same way as for all other plots it is possible to add a background + images, background gradients and a background flag to the graph. Since this has been + discussed several time previously in the manual we only show a simple example + here.

    +

    +

    Note

    +

    Since Matrix graphs does not have the concept of plot area the background + image positioning alternative BGIMG_FILLPLOT is the same as + BGIMG_FILLFRAME as we have used in this example + below.

    +

    +

    +

    +

    Example 22.3. Adding a background image to the matrix graph (matrix_ex04.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_matrix.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    +$data = array(
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,17,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,4,9,7,8,9,10),
    +    array(8,1,2,3,4,8,3,7,8,9,10),
    +    array(10,3,5,7,6,5,4,3,12,1,0),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +);
    + 
    +// Do the meshinterpolation once for the data
    +doMeshInterpolate($data,4);
    +$r=count($data);$c=count($data[0]);
    + 
    +$width=400; $height=400;
    +$graph = new MatrixGraph($width,$height);
    +$graph->title->Set('Adding a background image');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +// Add a stretched background image
    +$graph->SetBackgroundImage('ironrod.jpg',BGIMG_FILLFRAME);
    +$graph->SetBackgroundImageMix(50);
    + 
    +$mp = new MatrixPlot($data,1);
    +$mp->SetSize(0.6);
    +$mp->SetCenterPos(0.5,0.5);
    +$mp->SetLegendLayout(1);
    + 
    +$graph->Add($mp);
    +$graph->Stroke();
    + 
    +?>


    Figure 22.10. Adding a background image to the matrix graph (matrix_ex04.php)

    Adding a background image to the matrix graph (matrix_ex04.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch22s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch22s06.html new file mode 100755 index 00000000..7eb45bdb --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch22s06.html @@ -0,0 +1,48 @@ +Adding marker lines to the matrix plot

    Adding marker lines to the matrix plot

    + +

    +

    Note

    +

    This feature was added in 3.1.1p

    +

    +

    +

    In order to mark important divisions in the plot it is possible to add an instance of + class PlotLine (either horizontal or vertical line) to each plot in the + graph. For example, to add one vertical and one horizontal plot line the following lines + can be added to the matrix script

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +
    <?php
    +$mp = new MatrixPlot($data);
    + 
    +// Create two lines to add as markers
    +$l1 = new PlotLine(VERTICAL, 5, 'lightgray:1.5', 4);
    +$l2 = new PlotLine(HORIZONTAL, 3, 'lightgray:1.5', 4);
    + 
    +// Add lines to the plot
    +$mp->AddLine($l1);
    +$mp->AddLine($l2);
    +// this could also be done as
    +// $mp->AddLine(array($l1,$l2));
    + 
    +...
    +?>

    +

    +

    The example in Figure 22.11. Adding plot lines to the matrix plot (matrix_ex06.php) shows an example of this

    +

    +

    Figure 22.11. Adding plot lines to the matrix plot (matrix_ex06.php)

    Adding plot lines to the matrix plot (matrix_ex06.php)


    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch22s07.html b/Societes/ric/jpgraph/docs/chunkhtml/ch22s07.html new file mode 100755 index 00000000..40666340 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch22s07.html @@ -0,0 +1,153 @@ +Using layout classes to position matrix plots

    Using layout classes to position matrix plots

    + +

    Normally we don't want to have to calculate the absolute x and y coordinates when + positioning multiple Matrix plots in graph. A much better concept would be to just tell + the library to position three matrix plots horizontally or vertically without having to + figure out the exact coordinates our self but just evenly distribute them in the + specified direction.

    +

    This is where layout classes come in handy.

    +

    There are two types of layouts; horizontal and vertical. To specify that two matrix + plots should be positioned side by side (horizontal) a new horizontal layout object is + created and then the two matrix plots are added as object within the horizontal layout + class. Later on when the objects are about to be stroked on the graph the horizontal + layout class will take all its objects and spread them out evenly along a horizontal + line depending on the individual size of each matrix plot (including the specified + margin). The same principle applies to the vertical layout class with the obvious change + in direction.

    +

    The layout object are added to the graph in exactly the same way as ordinary matrix + plots, by calling the MatrixGraph::Add() method.

    +

    The following line would create a horizontal line of three matrix plots

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +
    <?php
    +$graph = new MatrixGraph($width,$height);
    + 
    +// additional graph formatting
    + 
    +$mp1 = new MatrixPlot($mat1);
    +$mp2 = new MatrixPlot($mat1);
    +$mp3 = new MatrixPlot($mat1);
    + 
    +$hor = new LayoutHor( array( $mp1, $mp2, $mp3) );
    + 
    +$graph->Add($hor);
    +$graph->Stroke();
    +?>

    +

    +

    A complete example of this can be seen in Figure 22.12. Using layout classes with Matrix plots (matrix_layout_ex1.php)

    +

    +

    Example 22.4. Using layout classes with Matrix plots (matrix_layout_ex1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_matrix.php');
    + 
    +$data = array(
    +array(0,1,2,3,4,5,6,7,8,9,10),
    +array(10,9,8,7,6,5,4,3,2,1,0),
    +array(0,1,2,3,4,5,6,7,8,9,10),
    +array(10,9,8,17,6,5,4,3,2,1,0),
    +array(0,1,2,3,4,4,9,7,8,9,10),
    +array(8,1,2,3,4,8,3,7,8,9,10),
    +array(10,3,5,7,6,5,4,3,12,1,0),
    +array(10,9,8,7,6,5,4,3,2,1,0),
    +);
    + 
    +doMeshInterpolate($data,4);
    + 
    +$graph = new MatrixGraph(850,580);
    +$graph->title->Set('Matrix layout example');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +$mp = array();
    +$n = 5;
    +for($i=0; $i < $n; ++$i){
    +    $mp[$i] = new MatrixPlot($data);
    +    $mp[$i]->colormap->SetMap($i);
    +    if( $i < 2 )
    +        $mp[$i]->SetSize(0.35);
    +    else
    +        $mp[$i]->SetSize(0.21);    
    +    // We need to make the legend a bit smaller since by 
    +    // defalt has a  ~45% height 
    +    $mp[$i]->legend->SetModuleSize(15,2);
    +}
    + 
    +$hor1 = new LayoutHor(array($mp[0],$mp[1]));
    +$hor2 = new LayoutHor(array($mp[2],$mp[3],$mp[4]));
    +$vert = new LayoutVert(array($hor1,$hor2));
    +$vert->SetCenterPos(0.45,0.5);
    + 
    +$graph->Add($vert);
    +$graph->Stroke();
    + 
    +?>


    Figure 22.12. Using layout classes with Matrix plots (matrix_layout_ex1.php)

    Using layout classes with Matrix plots (matrix_layout_ex1.php)


    +

    +

    When using layout classes there is one parameter of the matrix plot that can be + adjusted and that is the margin around each matrix plot. This margin is controlled by a + call to

    +

    +

    • +

      + MatrixPlot::SetMargin($aMargin) +

      +

    +

    +

    By default the margin is 20 pixels on each side. This margin also takes the legend + into consideration so the margin is counted from the edge of the legend.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch22s08.html b/Societes/ric/jpgraph/docs/chunkhtml/ch22s08.html new file mode 100755 index 00000000..3e23a020 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch22s08.html @@ -0,0 +1,50 @@ +Built in color maps

    Built in color maps

    + +

    There are three types of built in color maps

    +

    +

    1. +

      Standard maps

      +

      Includes rainbow spectrum and heat maps and combination of plain + red-green-blue maps

      +
    2. +

      Normalized center

      +

      These maps have a white:ish center. This is mostly useful to visualize the + spread from a center value

      +
    3. +

      Continues

      +

      The maps have one base color where the hue changes

      +

    +

    +

    In the color maps in the following section the black bars under some colors in the + color map shows the discrete colors (the plateaus) that the color map is made up of. All + colors in between two "barred" colors are linear interpolations.

    +

    The script that was used to generate these color maps can be found under the example + directory as "colormaps.php".

    +

    Standard maps

    + +

    To show heat gradient map 0 is the standard color map. To highlight the min and + max values (to get a high contrast) map 3 is a good choice. Map two is a standard + "rainbow" spectrum from red all up to violet.

    +

    Figure 22.13. Standard color maps

    + +
    Standard color maps
    +

    +
    +

    Normalized center

    + +

    These maps have a neutral (white) center and feathers out to the min/max value at + each end.

    +

    Figure 22.14. Centered color map

    + +
    Centered color map
    +

    +
    +

    Continues map

    + +

    These maps changes continues from the min color to the max color.

    +

    Figure 22.15. Continues color map

    + +
    Continues color map
    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch22s09.html b/Societes/ric/jpgraph/docs/chunkhtml/ch22s09.html new file mode 100755 index 00000000..6736eec5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch22s09.html @@ -0,0 +1,187 @@ +Using CSIM with matrix plots

    Using CSIM with matrix plots

    + +

    +

    Note

    +

    This feature was added in v3.1.1p

    +

    +

    +

    In the same was as most other plot types matrix plots also supports the usage of + Client Side Image Maps. (See Chapter 10. Using CSIM (Client side image maps) for a full description on the usage of CSIM in + general the library.)

    +

    The possible hotspot areas in a matrix graph are:

    +

    +

    • +

      The title

      +

      This is set (as usual with a call to) + MatrixGraph::title::SetCSIM()

      +
    • +

      Each cell in the matrix itself.

      +

      This is set with a call to MatrixPlot::SetCSIM() The input is + specified with a matrix of the same size as the input data. An error message + will be given if the sizes differ.

      +
    • +

      Each row and column label text. The input must be an array of the same + length as the number of labels.

      +

      This is specified with either (or both)

      +

      MatrixGraph::rowlabel::SetCSIM()

      +

      MatrixGraph::collabel::SetCSIM()

      +

    +

    +

    The following example shows how to add both label and data CSIM. As usual the graph + must be stroked with a call to MatrixGraph::StrokeCSIM() when using CSIM + functionality.

    +

    +

    Example 22.5. Matrix example with CSIM (matrix_csimex01.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once('jpgraph/jpgraph.php');
    +require_once('jpgraph/jpgraph_matrix.php');
    + 
    + 
    +$data = array(
    +    array(0,null,2,3,4,5,6,7,8,9,10,8,6,4,2),
    +    array(10,9,8,7,6,5,4,3,2,1,0,8,5,9,2),
    +    array(0,1,2,3,4,5,6,7,8,9,10,2,4,5,7),
    +    array(10,9,8,17,6,5,4,3,2,1,0,8,6,4,2),
    +    array(0,1,2,3,4,4,9,7,8,9,10,3,2,7,2),
    +    array(8,1,2,3,4,8,3,7,8,9,10,5,3,9,1),
    +    array(10,3,5,7,6,5,4,3,12,1,0,6,5,10,2),
    +    array(10,9,8,7,6,5,4,3,2,1,NULL,8,6,4,2),
    +);
    + 
    +$nx = count($data[0]);
    +$ny = count($data);
    + 
    +for( $i=0; $i < $ny; ++$i ) {
    +    for( $j=0; $j < $nx; ++$j ) {
    +        $csimtargets[$i][$j] = '#'.sprintf('%02sd',$i)."-".sprintf('%02sd',$j);
    +    }
    +}
    + 
    + 
    +for($i=0; $i < $nx; ++$i ) {
    +    $collabels[$i] = sprintf('column label: %02d',$i);
    +    $collabeltargets[$i] = '#'.sprintf('collabel: %02d',$i);
    + 
    +}
    +for($i=0; $i < $ny; ++$i ) {
    +    $rowlabels[$i] = sprintf('row label: %02d',$i);
    +    $rowlabeltargets[$i] = '#'.sprintf('rowlabel: %02d',$i);
    +}
    + 
    +// Setup a nasic matrix graph
    +$graph = new MatrixGraph(400,350);
    + 
    +$graph->SetBackgroundGradient('lightsteelblue:0.8','lightsteelblue:0.3');
    +$graph->title->Set('CSIM with matrix');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);
    +$graph->title->SetColor('white');
    + 
    +// Create one matrix plot
    +$mp = new MatrixPlot($data,1);
    +$mp->SetModuleSize(13,15);
    +$mp->SetCenterPos(0.35,0.6);
    +$mp->colormap->SetNullColor('gray');
    + 
    +// Setup column lablels
    +$mp->collabel->Set($collabels);
    +$mp->collabel->SetSide('top');
    +$mp->collabel->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$mp->collabel->SetFontColor('lightgray');
    + 
    +// Setup row lablels
    +$mp->rowlabel->Set($rowlabels);
    +$mp->rowlabel->SetSide('right');
    +$mp->rowlabel->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$mp->rowlabel->SetFontColor('lightgray');
    + 
    +$mp->rowlabel->SetCSIMTargets($rowlabeltargets);
    +$mp->collabel->SetCSIMTargets($collabeltargets);
    + 
    +// Move the legend more to the right
    +$mp->legend->SetMargin(90);
    +$mp->legend->SetColor('white');
    +$mp->legend->SetFont(FF_VERDANA,FS_BOLD,10);
    + 
    +$mp->SetCSIMTargets($csimtargets);
    + 
    +$graph->Add($mp);
    +$graph->StrokeCSIM();
    + 
    +?>


    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch22s10.html b/Societes/ric/jpgraph/docs/chunkhtml/ch22s10.html new file mode 100755 index 00000000..994bf9a9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch22s10.html @@ -0,0 +1,19 @@ +Matrix graph examples

    Matrix graph examples

    + +

    Example 1

    + +

    +
    +

    Example 2

    + +

    +
    +

    Example 3

    + +

    +
    +

    Example 4

    + +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch23.html b/Societes/ric/jpgraph/docs/chunkhtml/ch23.html new file mode 100755 index 00000000..0e64f785 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch23.html @@ -0,0 +1,313 @@ +Chapter 23. Filled contour graphs

    Chapter 23. Filled contour graphs

    + +

    Filled Contour graphs

    + +

    +

    Note

    +

    This section describes additional functionality available in the pro-version + v3.1p and above.

    +

    +

    +

    The use of filled ContourPlots requires the inclusion of the module + "jpgraph_contourf.php". The filled version of contour graphs + supports the following additional features compared to the regular contour graphs

    +
    • +

      Filled contour plots

      +
    • +

      Labelling of isobar lines in the contour plots

      +
    • +

      Two user selectable adaptive algorithms to determine the contours, one + rectangular and one triangular based adaptive mesh algorithm.

      +

    The enhanced contour plot is contained in the new plot class + FilledContourPlot.

    +

    As a quick introduction the two examples below shows two contour graphs which makes + use of these additional features

    +

    + + + + + + + +
    +

    Figure 23.1. Filled contour with labels (contour2_ex1.php)

    Filled contour with labels (contour2_ex1.php)

    +
    +

    Figure 23.2. Filled contour with no isobar lines (contour2_ex2.php)

    Filled contour with no isobar lines (contour2_ex2.php)

    +
    +

    +

    All basic formatting, such as specifying colors and number/location of the isobar + lines are handled in exactly the same way as described in the previous section for basic + contours.

    +

    Creating a filled contour graph

    + +

    The filled contour graph follows the exact same principles as for the non filled + graph described above. The core difference is that a filled graph is created as an + instance of class FilledContourPlot, i.e.

    +

    +

    1
    +2
    +3
    +
    <?php
    +$filledContour = new FilledContourPlot($data);
    +?>

    +

    +
    +

    Enabling and disabling contour lines

    + +

    Contour lines are controlled with the method

    +

    +

    • +

      FilledContourPlot::ShowLines($aFlg,$aColorWithFilled='black')

      +

      The $aFlg is a boolean that determines if contour lines + should be shown or not. by default they are enabled. The second argument + $aColorWithFilled determines what color the contour + lines should have when the contour is filled. If the contour is not + filled then the contour lines will have the color of the isobar.

      +

    +

    +
    +

    Specifying a filled contour

    + +

    In order to have the contour filled the method

    +
    • +

      ContourPlot::SetFilled($aFlg) Determines if the contour + should be filled or not.

      +
    +

    should be called.

    +

    Since there are n isobar lines and there needs to be n+1 colors to fill the graph there is a choice of what + side should the color for isobar line n fill. The area above or the area below the isobar. In + this library we use the convention that the color for isobar line n is used to fill the area up to the next highest + isobar n+1.

    +

    If the colors are specified manually it is important that one more color than the + number of isobar lines are specified. The convention is such that the color + specified in the first position (position = 0 ) in the color array is used to fill + the area below the lowest specified isobar.

    +

    An example will make this clear.

    +

    The graph below only uses three isobar lines (to keep things simple) which means + that we need four colors. To create such a graph we use the lines

    +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php
    +$data = array( ... );
    + 
    +$isobar_colors = array('lightgray','teal:1.3','orange','red');
    + 
    +// Create a new contour graph with three isobar lines
    +$cp = new ContourPlot($data,3);
    + 
    +// Specify the colors manually
    +$cp->SetIsobarColors($isobar_colors);
    + 
    +?>
    +

    +

    Figure 23.3. Manual colors for contour (contour2_ex3.php)

    Manual colors for contour (contour2_ex3.php)


    +

    +

    as can be seen from the labels in the graph the algorithm has resulted in three + isobar lines (as specified) at values 6.2, 10.5 and 14.8. The first color "gray" is used to fill the area + below the smallest isobar (6.2).

    +

    It should be noted that by specifying SetFilled(false) a non filled + contour graph can be created. However, the visual appearance compared with the + class ContourPlot will be slightly different. The reason is that + the filled contour plot class uses an adaptive algorithm that gives better fidelity + than the simpler non adaptive algorithm used in the standard (non-filled) contour + plot class. The contour corresponds to creating a contour with the plain contour + plot algorithm (class ContourPlot) using an interpolation factor of ~3-4.

    +
    +

    Adjusting the labels in the contour

    + +

    In order to make it easier to follow the contour labels can be added inside the + contour. The labels are placed using a heuristic algorithm that tries to place + enough labels to make the plot easy to read but not as many labels as to make it + crowded.

    +

    There are two main characteristic of the labels that can be controlled.

    +
    • +

      The font and color of the labels which are controlled by the two methods + FilledContourPlot::SetFont() and + FilledContourPlot::SetFontColor()

      +
    • +

      Whether or not the label should follow the gradient of the isobar line at + the point where the label is displayed or if it should always be drawn + horizontally.

      +
    +

    To enable or disable the display of the labels as well as determining if the label + should follow the gradient or not the method

    +

    +

    • +

      FilledContourPlot::ShowLabel($aFlg,$aFollowGradient)

      +

    +

    +

    is used. The two examples below show two variants of the same contour where the + left graph have labels which follows the gradient and the right graph have labels + that are always oriented horizontally.

    +

    + + + + + + + +
    +

    Figure 23.4. Labels that follows the gradients (contour2_ex4.php)

    Labels that follows the gradients (contour2_ex4.php)

    +
    +

    Figure 23.5. Labels that are always horizontal. In this example we have also shown how to change the colors. (contour2_ex5.php)

    Labels that are always horizontal. In this example we have also shown how to change the colors. (contour2_ex5.php)

    +
    +

    +
    +

    Selecting the adaptive method to use

    + +

    +

    Note

    +

    This section can be skipped without loss of continuity. The default method + "rectangular" recursive adaptation is good enough for most + circumstances.

    +

    +

    +

    In order to fully understand the effect of selecting which adaptive method to use + it is first necessary to understand some background on how contours are created + algorithmically.

    +

    Determining general contours for a function of two independent variables is + equivalent to the problem of finding the equivalence class of all coordinate pairs (x,y) for which for C=f(x,y) which in general is a non-linear problem. This + is an example of a problem that is computational very expensive to mathematically + solve correct but quite tractable if we view a sampled version of the function. This + means that we in general do not have access to f(x,y) instead we only know of its values at a number + of grid points. This is also the cause of visually different contour plots for the + same input data.

    +

    The difference lay in the core problem that in order to draw a continues contour + we need to interpolate the unknown values in between the known sample points. This + is therefore a degree of freedom where the actual choice of how we do the + interpolation will cause the contour to be visually different depending on our + choice.

    +

    While it would take to far in this manual to describe the full adaptive algorithm + in all details we will show the different principles that underlying the two methods + hat the user can select between.

    +

    In order to determine the isobars the given data points are considered to be + vertices in a grid where each vertice is connected with an edge. There are two basic + ways to connect the points with edges; rectangular and triangular. In the first way + four points are connected to form a square and in the second way three point are + connected to form a triangle. The so created square or triangles will be referred to + as a submesh consisting of four and three sides respectively.

    +

    To determine the isobars each submesh is recursively divided until each side is + small enough to only have one crossing isobar. The exact position of the crossing is + determined by linear interpolation between the two corresponding vertices.

    +

    The figures below shows the sequences for the triangle recursive division. The + recursion continues until each edge has exactly one crossing of an isobar.

    +

    +

    +
    +

    Figure 23.6. Triangulation step 0

    + +
    Triangulation step 0
    +

    +
    +

    Figure 23.7. Triangulation step 1

    + +
    Triangulation step 1
    +

    +
    +

    Figure 23.8. Triangulation step 2

    + +
    Triangulation step 2
    +

    +
    +

    +

    +

    In the same way the sequence of figures below shows the principle for the + quadratic recursive subdivsion of the mesh for first three steps.

    +

    +

    +
    +

    Figure 23.9. "Rectangularization" step 0

    + +
    "Rectangularization" step 0
    +

    +
    +

    Figure 23.10. "Rectangularization" step 1

    + +
    "Rectangularization" step 1
    +

    +
    +

    Figure 23.11. "Rectangularization" step 2

    + +
    "Rectangularization" step 2
    +

    +
    +

    +

    +

    Needless to say these two variants give slightly different visual appearance of + the resulting contour plot and neither of the two method can be considered "the + right method". Triangularization tends to work better (and faster) for high + frequency contour plots and gives a more "edgy" result. The quadratic subdivision + might require more recursive steps for high frequency contours but in general gives + a smoother look of the resulting contour.

    +

    By default the library uses a rectangular mesh division and that is the method + that has been used in all the previous examples. As an illustration the effect of + the method have the two figures below shows the same data as we have used in the + previous figures to display a contour plot with 7 isobars. The left figures uses a + rectangular division (the default) and the right figure uses a triangular + division.

    +

    +

    +
    +

    Figure 23.12. 7 Isobars, "rect" method (contour2_ex6.php)

    7 Isobars, "rect" method (contour2_ex6.php)

    +
    +

    Figure 23.13. 7 Isobars, "tri" method (contour2_ex7.php)

    7 Isobars, "tri" method (contour2_ex7.php)

    +
    +

    +

    +

    As can be seen in this case the triangular method favour elongated contours from + southwest to northeast while the rectangular method favours circular contours.

    +

    The way to choose what method to use is by the method

    +

    +

    • +

      FilledContourPlot::SetMethod($aMethod) +

      +

      The possible options for $aMethod are

      1. +

        "rect" - Rectangualr algortihm (default)

        +
      2. +

        "tri" - Triangular algorithm

        +
      +

    +

    +

    +

    Tip

    +

    It is possible to show the triangulation used by calling the method + FilledContourPlot::ShowTriangulation($aFlg). In the two + figures below the triangulation for the "rect" and "tri" method in the + previous examples are shown.

    +

    + + + + + + + +
    +

    Figure 23.14. Rectangular sub-division

    + +
    Rectangular sub-division
    +

    +
    +

    Figure 23.15. Triangular sub-division

    + +
    Triangular sub-division
    +

    +
    +

    +

    +

    +
    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch24.html b/Societes/ric/jpgraph/docs/chunkhtml/ch24.html new file mode 100755 index 00000000..e34d5172 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch24.html @@ -0,0 +1,81 @@ +Chapter 24. Linear Barcodes (One Dimensional Barcodes)

    Chapter 24. Linear Barcodes (One Dimensional Barcodes)

    + +

    Introduction

    + +

    Note

    This module is only available in the pro-version of the library.

    +

    With the linear (One-dimensional) barcode extension it is possible to create bar + codes using all the commonly accepted symbologies. The resulting bar code can be + created as either an image (in PNG or JPEG format) or as a Postscript file ready for + printing on high resolution printers.

    +

    The bar code extension provides extensive data verification which makes sure that + the created barcode follows the official applicable standards.

    +

    +

    Note

    +

    All generated bar codes (except CODE 11 which have little support in + Europe) have been extensively verified using Metrologic CCD-47 handhold + scanner.

    +

    +

    +

    In order to create a linear barcode the module + "jpgraph_barcode.php" must be included.

    +

    There are several types of linear barcode even though they all use the same + principle. The reason for several different types (or symbologies as it is known) is + partly to handle different requirements (for example encoding just numerical data or + both numerical and alphabetical data) and partly because they were initially created + by different companies to solve similar problems. The library supports most of the + common linear barcode. These types of barcode look like what can be usually seen on + consumer goods.

    +

    The different types of barcodes are often referred to as different + symbologies.

    +

    Most of the commonly used symbologies has been elevated to ISO/IEC standards. Some + barcode which have not yet been accepted as ISO standard are available from AIM + (http://www.aimglobal.org). In + USA the organization responsible for issuing retail codes used in barcodes are the + Uniform Code Council, (UCC) http://www.uc-council.org.

    +

    While these standards are very comprehensive they are of little interest to end + user of the barcode. For an end user the three most important question when + selecting a barcode symbology are

    +
    1. +

      What characters can be encoded in this symbology?

      +
    2. +

      How efficient is the symbology, i.e. how large will the barcode be for + a given input data string?

      +

      Linear barcodes typically encode alphanumerical strings up to maximum + of ~20 characters.

      +

      +

      Note

      +

      While many of the barcode symbologies can handle, in theory + unlimited, string lengths there are practical limitation to how + wide barcode a given reader/scanner can interpret. Most handhold + scanners can usually not reliable read a barcode wider than + ~10cm.

      +

      +

      +
    3. +

      How strong is the tolerance against physical damage, i.e. how large + percentage of the barcode can be destroyed while still be readable by a + scanner?

      +

      The tolerance for linear barcode are in general low. If one ore more + of the bars (making up the barcode) is unreadable the whole barcode is + in practice unreadable. While some barcode symbologies include a check + digit this is not enough to re-create damaged data. It is only enough to + verify with some confidence that the data is intact, however there is + still no guarantee since two errors might, by coincidence, make the + check digit correct.

      +

      A common way to strengthen linear barcodes is to make them physically + larger/taller.

      +

    While linear barcodes is still widely used in legacy applications + there are almost no new applications that uses linear barcode due in part to the + limitations listed above (poor fault tolerance and low capacity). Most new + applications uses either RFID tags or two dimensional barcodes (described in the + following chapters) which have much higher data capacity and fault tolerance.

    +
    + + + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch24s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch24s02.html new file mode 100755 index 00000000..1d722e74 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch24s02.html @@ -0,0 +1,33 @@ +How does linear barcodes work?

    How does linear barcodes work?

    + +

    Linear barcodes are created by translating the supported characters that should be + displayed into combination of narrow and wide bars which are combined into a + barcode. To identify the start and end of a barcode special "guard" patterns are + used to indicate to the scanner that the barcode starts and also identify what type + of symbology is used.

    +

    To illustrate this Figure 24.1. Understanding linear barcodes. Example with Code 25 symbology shows an enlarged + and amended barcode thats uses the Code 25 symbology and encodes the numeric string + "123". In order to illustrate the different parts we have colored the start and stop + pattern and the three digits to make it clear how it is encoded.

    +

    +

    Figure 24.1. Understanding linear barcodes. Example with Code 25 symbology

    + +
    Understanding linear barcodes. Example with Code 25 symbology
    +


    +

    +

    We have chosen to illustrate the principle with the code 25 symbology since it is + easy to understand. Each character is encoded with 5 black elements with spaces in + between, 2 wide and three narrow elements, hence the name 2 of 5 (or 25). The width + of the thinnest element is also known as the module width. Other symbologies have + more complicated patterns to achieve higher density (more encoded characters in a + given width) but the principle still stands.

    +

    The typical scanner sends out light which is reflected and is them measured as the + scanner swipes from left to right. The relative size of the black and white areas + are measured and translated back to a the encoded data.

    +

    The human readable string, usually at the bottom of the barcode is strictly + speaking not a part of the barcode. It is only there to help a human reader + interpret the barcode.

    +

    Some barcode symbologies also add a check digit at the end of the data. This check + digit (or digits) is used to verify that the interpretated data has been read + correctly.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch24s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch24s03.html new file mode 100755 index 00000000..6b30b92b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch24s03.html @@ -0,0 +1,69 @@ +Barcode symbologies

    Barcode symbologies

    + +

    Numerical only barcode symbologies

    + +

    The following supported symbologies only supports numerical data and in some + cases special characters like "-,+,:,$" . A more detailed description and + example of each barcode is given in Short description of supported symbologies

    +

    +

    • +

      Codabar. Older code not widely used today apart from some library + system primarily in USA.

      +
    • +

      Code 11. Used primarily for labeling telecommunications + equipment

      +
    • +

      EAN-13 (ISO/IEC 15420). European Article Numbering, 13-digits. + International retail product code

      +

      (Also known as UPC-13 in USA)

      +
    • +

      EAN-8. European Article Numbering, 8-digits. Compressed version of + EAN code for use on small products

      +
    • +

      Industrial 2 of 5. Older low density code not commonly used + today

      +
    • +

      Interleaved 2 of 5 (ISO/IEC 16390). Compact numeric code, widely + used in industry, driving licenses, transportation

      +
    • +

      UPC-A. Universal product code seen on almost all retail products + in the USA and Canada

      +
    • +

      UPC-E. Compressed version of UPC-A code for use on small + products

      +
    • +

      Bookland. Used to encode ISBN (International Standard Book Number) + numbers used in book and magazines

      +

    +

    +
    +

    Alphanumerical barcode symbologies

    + +

    The following supported symbologies supports alpha numerical data and in some + cases special characters like "-,+,&,#,!". A more detailed description and + example of each barcode is given in Short description of supported symbologies

    +

    +

    • +

      Code 128 (ISO/IEC 15417). A flexible high capacity code in wide + use. There are variants of Code 128 (e.g EAN-128) that impose a + strict structure of the data.

      +
    • +

      EAN 128 (ISO/IEC 15420). Structured variant of Code 128. This is + not really a barcode symbology in itself but rather a structure for + how to format the input data to Code 128.

      +
    • +

      Code 39 (ISO/IEC 16388). General purpose code. Used + worldwide.

      +

    +

    +
    +

    Which symbology should be used?

    + +

    Usually the application dictates what standard should be followed and there is + no choice other than following the applicable industry standard.

    +

    However, if the usage is strictly internal it is possible to chose any + symbology. However for generic usage we would recommends using either Code 39 or + Code 128 since they offer great flexibility, supports large character sets and + is fairly efficient in terms of space/datasize ratio.

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch24s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch24s04.html new file mode 100755 index 00000000..d96ca106 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch24s04.html @@ -0,0 +1,116 @@ +Features

    Features

    + +

    This is a summary of the features available in the JpGraph barcode extension.

    +

    +

    • +

      Supports the following symbologies (with data validation)

      +

      +

      1. +

        UPC A

        +
      2. +

        UPC E

        +
      3. +

        EAN 128

        +
      4. +

        EAN 13

        +
      5. +

        EAN 8

        +
      6. +

        CODE 11 (USD-8)

        +
      7. +

        CODE 39

        +
      8. +

        CODE 128

        +
      9. +

        Industrial 2 of 5

        +
      10. +

        Interleaved 2 of 5

        +
      11. +

        Codabar

        +
      12. +

        Bookland (ISBN)

        +

      +

      +
    • +

      Input data is verified against the official specification of each + symbologies and makes it impossible to create invalid bar codes.

      +
    • +

      Output format

      +

      +

      1. +

        Image format (either PNG or JPG encoding)

        +
      2. +

        Postscript

        +
      3. +

        Encapsulated postscript

        +

      +

      +
    • +

      Formatting options

      +

      +

      1. +

        User specified module width. This controls the width of + the smallest unity in the barcode.

        +
      2. +

        Automatic calculation of optional checksum for symbologies + where the checksum is optional

        +
      3. +

        User specified scaling of resulting bar code

        +
      4. +

        Horizontal or vertical bar code layout

        +
      5. +

        Suppression of human readable text on barcodes

        +
      6. +

        Selectable font for human readable text

        +

      +

      +

    +

    +

    +

    Note

    +

    The term "symbology" is the term used to describe the combination of + encodation method (how characters are translated to bars) and the layout of + the bars specified by a particular barcode standard. All of the listed + standard symbologies above are still widely used. Many of the symbologies + overlap in terms of functionality and multiple symbologies might be possible + to use for a particular application unless there is a strict standard that + stipulates that a particular symbology should be used.

    +

    The reason for the existence of so many symbologies with overlapping + functionality is in some cases the result of different companies early on + specifying there own patented barcodes in order to gain market shares or in + some cases lock customers to a specific brand of scanner. In other cases it + is simply the result of that earlier barcodes could not handle new + demands.

    +

    +

    +

    Sample application

    + +

    Even though primarily the JpGraph bar code extension is meant, and designed, + to be used as a library within a larger system there is a small demo web + application to allow easy creation of linear barcodes bar codes. This + application is primarily included as a demo of the features available and not as + a finalized product.

    +

    The application is available under the directory + "barcode/demoapp" as "index.html" + in the main library directory

    +

    Figure 24.2. Linear Barcode Demo application (screen shot from running in + WEB-browser) shows a screen shot of the + demo application

    +

    +

    Figure 24.2. Linear Barcode Demo application (screen shot from running in + WEB-browser)

    + +
    Linear Barcode Demo application (screen shot from running in WEB-browser)
    +


    +

    +

    We strongly suggest running this demo application to get a feel for what + formatting options and how the different symbologies behave.

    +

    +

    Tip

    +

    There is also a command line utility that allows the creation of + barcodes from the command line + "mkbarcode.php"

    +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch24s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch24s05.html new file mode 100755 index 00000000..55d730a3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch24s05.html @@ -0,0 +1,101 @@ +Creating barcodes - quick start

    Creating barcodes - quick start

    + +

    The creation of all linear barcode follows the same chema:

    +

    +

    1. +

      Create an instance of the encoder for the chosen symbology

      +
    2. +

      Create an instance of the backend for the chosen output format (image + or postscript)

      +
    3. +

      Encode the data and generate the barcode

      +

    +

    +

    Normally only three lines of code is needed to create a basic barcode.

    +

    For example, the following code will create a barcode encoded as an image + representing the data string "ABC123" using symbology "CODE 39".

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    <?php
    +require_once('jpgraph_barcode.php');
    + 
    +$symbology = BarcodeFactory::Create (ENCODING_CODE39 );
    +$barcode = BackendFactory ::Create(BACKEND_IMAGE, $symbology);
    +$barcode ->Stroke('ABC123');
    +?>

    +

    +

    The generated barcode is shown in

    +

    +

    Figure 24.3. Encoding "ABC123" with CODE 39.

    + +
    Encoding "ABC123" with CODE 39.
    +


    +

    +

    As can be seen from the code above the basic interface to the library makes use of + two abstract factories which creates the appropriate encoder and output backend. + This design makes the addition of new output formats and new symbologies transparent + for the end user of the library.

    +

    If instead we wanted to encode the data string using symbology "CODE 128" instead, + it would only be necessary to modify the first line in the above code so instead it + would become.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    <?php
    +require_once('jpgraph_barcode.php');
    + 
    +$symbology = BarcodeFactory::Create (ENCODING_CODE128 );
    +$barcode = BackendFactory ::Create(BACKEND_IMAGE, $symbology);
    +$barcode ->Stroke('ABC123');
    +?>

    +

    +

    the result of this script is shown in Figure 24.4. Encoding "ABC123" with CODE 128.

    +

    +

    Figure 24.4. Encoding "ABC123" with CODE 128.

    + +
    Encoding "ABC123" with CODE 128.
    +


    +

    +

    As can be seen in the examples above both the backend and the symbology is + specified by means of a symbolic constant. The following list shows the symbolic + constants available to specify the different supported symbologies.

    +

    +

    1. +

      ENCODING_EAN128

      +
    2. +

      ENCODING_EAN13

      +
    3. +

      ENCODING_EAN8

      +
    4. +

      ENCODING_UPCA

      +
    5. +

      ENCODING_UPCE

      +
    6. +

      ENCODING_CODE39

      +
    7. +

      ENCODING_CODE128

      +
    8. +

      ENCODING_CODE25

      +
    9. +

      ENCODING_CODEI25

      +
    10. +

      ENCODING_CODABAR

      +
    11. +

      ENCODING_CODE11

      +
    12. +

      ENCODING_BOOKLAND

      +

    +

    +

    The usage and typical application of each symbology is discussed in Short description of supported symbologies.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch24s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch24s06.html new file mode 100755 index 00000000..6d0a284f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch24s06.html @@ -0,0 +1,80 @@ +Error handling

    Error handling

    + +

    The barcode module uses the standard library error handling which mean that in + case of an error (most likely that the data validation fails) an exception will be + raised. Errors can be handled in two ways.

    +

    +

    1. +

      By enclosing the script in a try { ... } catch { ... } + statement

      +
    2. +

      By installing a custom default error handler with + set_exception_handler() when the library throws an + error the specified error handler will be called with an instance of the + JpGraphException class.

      +

    +

    +

    The following code snippet shows an example of using a try-catch statment

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +try {
    +    $encoder = BarcodeFactory::Create(ENCODING_CODE39);
    +    $e = BackendFactory::Create(BACKEND_IMAGE,$encoder);
    +    $e->Stroke('abc123');
    +} catch( JpGraphException $e ) {
    +        echo 'Error: ' . $e->getMessage()."\n";
    +}
    +?>

    +

    +

    The code when run will give the error

    +

    +

    Error: Data validation failed. Can't encode [abc123] using encoding "CODE 39" 

    +

    +

    The problem with the input data string is that Code 39 does not support encoding + lower case letters. In the case some error handling is still needed but the image + error should be displayed it is possible to re-raise the original exception as the + following example shows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +try {
    +    $encoder = BarcodeFactory::Create(ENCODING_CODE39);
    +    $e = BackendFactory::Create(BACKEND_IMAGE,$encoder);
    +    $e->Stroke('abc123');
    +} catch( JpGraphException $e ) {
    +    JpGraphError::Raise($e->getMessage());
    +}
    +?>

    +

    +

    The line

    +

    +

    1
    +
    JpGraphError::Raise($e->getMessage());

    +

    +

    will display the image error as shown in Figure 24.5. Image error - Failed barcode data validation

    +

    +

    Figure 24.5. Image error - Failed barcode data validation

    + +
    Image error - Failed barcode data validation
    +


    +

    +

    In the command line barcode utility ( Generating barcodes on the command line) the alternative method of installing a different default error handler can be + seen.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch24s07.html b/Societes/ric/jpgraph/docs/chunkhtml/ch24s07.html new file mode 100755 index 00000000..d3ca5ba5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch24s07.html @@ -0,0 +1,53 @@ +Generating barcodes on the command line

    Generating barcodes on the command line

    + +

    The library includes a command line utility as an additional example on how to use + the library.

    +

    +

    • +

      mkbarcode.php

      +

    +

    +

    This utility can be found in the "barcode/" directory. This + utility should be used from the command line as the following example shows

    +

    +

    $>php mkbarcode.php -b code39 ABC123 > barcode.png

    +

    +

    The line above will create a barcode from the data string "abc123" using the Code + 39 symbology and store the resulting image in the file + "barcode.png".

    +

    Using the command utility as above assumes that the client version of PHP is + available at the command line.

    +

    This utility has the following syntax

    +

    +

    mkbarcode.php -b <symbology> [-r -h -c -o <output format> -m <width> -s <scale>\\ 
    +-y <height> -f <filename> ] datastring
    +
    +Create the specified barcode
    +-b           What symbology to use, one of the following strings (case insensitive)
    +             UPCA
    +             UPCE
    +             EAN128
    +             EAN13
    +             EAN8
    +             CODE11
    +             CODE39
    +             CODE128
    +             CODE25
    +             CODEI25
    +             CODABAR
    +             BOOKLAND
    +-c           Add checkdigit for symbologies where this is optional
    +-o           Output format. 0=Image, 1=PS, 2=EPS
    +-m           Module width
    +-s           Scale factor
    +-h           Show this help
    +-f           Filename to write to
    +-r           Rotate barcode 90 degrees
    +-y height    Set height in pixels
    +-x           Hide the human readable text
    +--silent     Silent. Don't give any error mesages
    +

    +

    +

    If no filename is given the image will be sent back to the console which means it + should be redirected to a file.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch24s08.html b/Societes/ric/jpgraph/docs/chunkhtml/ch24s08.html new file mode 100755 index 00000000..af4a3304 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch24s08.html @@ -0,0 +1,268 @@ +Format options for barcodes

    Format options for barcodes

    + +

    Adjusting the encodation process

    + +

    For the encoding there is basically only one modification available.

    +

    For those symbologies that include an optional checksum it is possible to + enable or disable this calculation.

    +

    The following symbologies may have optional checksum character(s)

    +

    +

    1. +

      Industrial 2 of 5

      +
    2. +

      Interleaved 2 of 5

      +
    3. +

      Code 39

      +
    4. +

      Code 39 Extended

      +
    5. +

      Code 11

      +

    +

    +

    Turning on/off checksum calculation for other symbologies will have no affect. + Checksum calculation is enabled with a call to AddChecksum() on the + chosen backend.

    +

    For example to augment the previous "CODE 39" example to include the checksum + the code would be changed to

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$symbology = BarcodeFactory::Create (ENCODING_CODE39 );
    +$symbology->AddChecksum();
    +$barcode = BackendFactory ::Create('IMAGE', $symbology);
    +$barcode->Stroke('ABC123');
    +?>

    +

    +

    Which would give the result shown in Figure 24.6. Encoding "ABC123" with CODE 39 adding checksum (checksum=4).

    +

    +

    Figure 24.6. Encoding "ABC123" with CODE 39 adding checksum (checksum=4).

    + +
    Encoding "ABC123" with CODE 39 adding checksum (checksum=4).
    +


    +

    +
    +

    Selecting output format

    + +

    The output format can be adjusted by specifying/creating the appropriate + backend. The library supports image and postscript (and encapsulated postscript) + backends.

    +

    The backend is created by calling the static factory method

    +

    +

    • +

      BackendFactory::Create($aBackend,$aEncoder,$aReport=false)

      +

    +

    +

    So to create an image backend the following code is needed

    +

    +

    1
    +
    $barcode = BackendFactory::Create (BACKEND_IMAGE ,$symbology);

    +

    +

    Where "$symbology" is the chosen symbology as created by the + BarcodeFactory::Create() factory method. Please note that both + factory functions are called as static methods.

    +

    The output format is specified by using one of the following symbolic + defines

    +

    +

    1. +

      BACKEND_IMAGE, Creates a standard JPEG or PNG + (default) image

      +
    2. +

      BACKEND_PS, Creates a standard postscript file as + output. It is possible to modify this output to become EPS + (Encapsulated postscript) by calling the SetEPS() + method on the backend as the following code snippet shows

      +

      +

      1
      +2
      +
      $barcode = BackendFactory::Create (BACKEND_PS,$symbology);
      +$barcode->SetEPS()

      +

      +

      Please note that for the postscript backend the postscript code is + returned as a string from the Stroke() method.

      +

    +

    +

    To send the created stream (either image or postscript) back to the browser or + to a file the Backend::Stroke() method shall be used. The parameter + to the Stroke() method shall be the string to be encoded.

    +

    Assume we want to create an image that is sent back to the browser. We would + then use the following code

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$symbology = BarcodeFactory::Create (ENCODING_CODE128 );
    +$barcode = BackendFactory ::Create(BACKEND_IMAGE, $symbology);
    +$barcode->Stroke('ABC123');
    +?>

    +

    +

    It is also possible to write the barcode directly to a file by specifying a + second argument to the Stroke() method above. So if we instead + wanted the barcode to be stored in the file + "/tmp/barcode.png" we could write

    +

    +

    1
    +2
    +3
    +
    $symbology = BarcodeFactory::Create (ENCODING_CODE128 );
    +$barcode = BackendFactory ::Create(BACKEND_IMAGE, $symbology);
    +$barcode->Stroke('ABC123','/tmp/barcode.png');

    +

    +

    +

    Note

    +

    There is no automatic added extension to the file name.

    +

    +

    +

    Again, please note that for the Postscript background the + Backend::Stroke() method normally returns the postscript file + as a string if everything went well.

    +
    +

    Writing barcodes to a file

    + +

    This is done by adding a second argument, the file name, to the + Backend::Stroke() method. This works for all backends. The file + name should be an absolute path name. Since it is the PHP process that writes + the file the permissions must allow the PHP process to write to the directory if + PHP is called from a browser. If the command line version of PHP is used this + does of course not apply.

    +
    +

    Hiding the human readable text

    + +

    +

    • +

      Backend::HideText($aHide=true)

      +

    +

    +

    The human readable text is the string that can optionally be displayed at the + bottom of the bar. By default this is enabled.

    +
    +

    Adjusting the module width

    + +

    +

    • +

      Backend::SetModuleWidth($aWidth)

      +

    +

    +

    There are however some subtle facts regarding the module width and backend + that needs to be explained.

    +

    +

    1. +

      For image type backends the module width specifies the number of + pixels used for a module.

      +
    2. +

      For Postscript (and Encapsulated PS) backends the module width + specifies the width in points (i.e. 1/72 inch).

      +

    +

    +

    This also means that for image type backends only integer values makes + sense.

    +

    +

    Caution

    +

    Depending on the quality of the printer (and paper) very small module + width might not be readable with all bar code readers. For images it is + therefore recommended to use "2" pixels as the minimum module width and + for postscript output the minimum recommended width is "0.8" pt.

    +

    +

    +

    The following code shows how to both change the module width to 2 pixels and + hide the human readable text

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    <?php
    +$symbology = BarcodeFactory::Create (ENCODING_CODE39 );
    +$barcode = BackendFactory ::Create('IMAGE', $symbology);
    +$barcode ->SetModuleWidth (2);
    +$barcode ->HideText();
    +$barcode ->Stroke('ABC123');
    +?>

    +

    +

    which would give the result shown in Figure 24.7. Encoding "ABC123" with CODE 39, hiding the text. + below

    +

    +

    Figure 24.7. Encoding "ABC123" with CODE 39, hiding the text.

    + +
    Encoding "ABC123" with CODE 39, hiding the text.
    +


    +

    +
    +

    Setting vertical or horizontal layout

    + +

    +

    • +

      Backend::SetVertical($aVertical=true)

      +

    +

    +

    Will rotate the barcode 90 degrees to create a vertical view of the + barcode.

    +
    +

    Adjusting height of bar code

    + +

    +

    • +

      + Backend::SetHeight($aHeight)

      +

    +

    +

    The height of the bar codes is specified with the + Backend::SetHeight() method. For images the height is + interpreted as pixels and for postscript files it is interpreted as points (1 pt + = 1/72 inch)

    +
    +

    Scaling of bar codes

    + +

    +

    • +

      Backend::SetScale($aScaleFactor)

      +

    +

    +

    The scale factor is real number and specifies a scale factor for the overall + barcode image.

    +
    +

    Add frame around bar code

    + +

    +

    • +

      Backend::ShowFrame($aFlag=true)

      +

    +

    +

    This method will enable a frame around the edges of the barcode image

    +
    +

    Examples of adjusting the output

    + +

    The following example outputs a postscript file representing the bar code with + a module width of 1.2 pt, using a vertical layout and scaling the image 2 times. + For this example we are using CODE 39 with a checksum (which is automatically + generated)

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    <?php
    +$symbology = BarcodeFactory::Create (ENCODING_CODE128 );
    +$barcode = BackendFactory ::Create(BACKEND_PS, $symbology);
    +$barcode->SetVertical(true);
    +$barcode->Scale(2);
    +$barcode->SetModuleWidth(1.2);
    +$barcode ->Stroke('ABC123') ) {
    +?>

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch24s09.html b/Societes/ric/jpgraph/docs/chunkhtml/ch24s09.html new file mode 100755 index 00000000..2b68817e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch24s09.html @@ -0,0 +1,572 @@ +Short description of supported symbologies

    Short description of supported symbologies

    + +

    In the following section we will describe the requirements to encode in each of + the supported symbologies. Some symbologies have strict standard for the data to be + encoded. Trying to encode illegal (or not supported data) will result in a "Data + validation" error as shown in Figure 24.5. Image error - Failed barcode data validation.

    +

    +

    Warning

    +

    Please note that the information given here is in no way a replacement for + the official AIM and ISO standards these encoding are based on. It is + assumed that the reader have access to the official standards describing + each of these encodings before applying a particular symbology.

    +

    +

    +

    UPC A

    + +

    UPC A = Universal Product Code Version A.

    +

    UPC A encodes 12 numeric digits. The first digit identifies the number system + used. The next group of 5 digits identifies the manufacturer. This number is + assigned by the Uniform Code Council (UCC). The next 5 digits + identify the particular product and are assigned by the manufacturer. The final + digit is a check digit.

    +

    Usage

    + +

    Used for consumer goods. Is being slowly replaced by EAN13. UPCA is a + special case of EAN 13 where the first digit is always 0.

    +
    +

    Input data/character set

    + +

    Eleven digit. First digit is always 0.

    +
    +

    Checksum

    + +

    Automatic, mandatory.

    +
    +

    Example

    + +

    Encoded string = "03456781233" +

    +

    +

    Figure 24.8. UPC A Example

    + +
    UPC A Example
    +


    +

    +
    +
    +

    UPC E

    + +

    UPC E = Universal Product Code Version E.

    +

    Usage

    + +

    Same general use as UPC A. Can be considered a subset and a more compact + version of UPC A. Used where UPC A bar codes are to wide.

    +

    The 6 resulting digits is take from the UPC A according to the following 4 + rules:

    +

    +

    1. +

      If a manufacturer's number ends in 000 or 100 or 200, he has + available to him 1,000 item numbers between 00000 and 00999. The + six characters are obtained from the first two characters of the + manufacturer's number followed by the last three characters of + the item number, followed by the third character of the + manufacturer's number.

      +
    2. +

      If a manufacturer's number ends in 300, 400, 500, 600, 700, + 800 or 900, he has available to him 100 item numbers between + 00000 and 00099. The six characters are obtained from the first + three characters of the manufacturer's number followed by the + last two characters of the item number, followed by "3".

      +
    3. +

      If a manufacturer's number ends in 10, 20, 30, 40, 50, 60, 70, + 80 or 90, he has available to him 10 item numbers between 00000 + and 00009. The six characters are obtained from the first four + characters of the manufacturer's number followed by the last + character of the item number, followed by "4".

      +
    4. +

      If a manufacturer's number does not end in zero, then five + item numbers between 00005 and 00009 are available. The six + characters are obtained from all five of the manufacturer's + identification number followed by the last character of the item + number.

      +

    +

    +
    +

    Input data/character set

    + +

    Eleven digits. First digit is always 0. Data input must follow UPC rule + for construction of UPC E data.

    +
    +

    Checksum

    + +

    Automatic, mandatory

    +
    +

    Example

    + +

    Encoded string = "05510000120"

    +

    As an example of the smaller size of UPC E the same data string is also + encoded with UPC A below.

    +

    +

    +
    +

    +

    Figure 24.9. UPC E Encoding of "05510000120"

    + +
    UPC E Encoding of "05510000120"
    +


    +

    +
    +

    +

    Figure 24.10. UPC A Encoding of "05510000120"

    + +
    UPC A Encoding of "05510000120"
    +


    +

    +
    +

    +

    +
    +
    +

    EAN 8

    + +

    General purpose short barcodes

    +

    Usage

    + +

    A shorter version of EAN13 using only 7 digits + checksum digit.

    +
    +

    Input data/character set

    + +

    Seven digits.

    +
    +

    Checksum

    + +

    Automatic, mandatory

    +
    +

    Example

    + +

    Encode string = "3776221". Note the automatically added check + digit.

    +

    +

    Figure 24.11. EAN 8 Example

    + +
    EAN 8 Example
    +


    +

    +
    +
    +

    EAN 13

    + +

    The names comes from that this symbology encodes 13 characters. It is widely + used in the manufacturing industry.

    +

    The first two or three digits are a country code which identify the country in + which the manufacturer is registered. The country code is followed by 9 or 10 + data digits (depending on the length of the country code) and a finally a single + digit checksum.

    +

    Usage

    + +

    Generic code for consumer goods. Is replacing UPC-A as worldwide standard. +

    +
    +

    Input data/character set

    + +

    Twelve digits.

    +
    +

    Checksum

    + +

    Automatic, mandatory

    +
    +

    Example

    + +

    Encoded string = "377622153812" +

    +

    +

    Figure 24.12. EAN 13 Example

    + +
    EAN 13 Example
    +


    +

    +
    +
    +

    EAN 128

    + +

    +

    Note

    +

    The GS1 (www.gs1.com) organization + has renamed several barcode standards built on Code 128 such as EAN-128 + to GS1-128.

    +

    +

    +

    Usage

    + +

    EAN 128 is a CODE 128 where the data structure is strictly regulated. + Please refer to the official EAN-128 specifications for details.

    +
    +

    Input data/character set

    + +

    An alphanumeric data string following EAN 128 rules. This means for one + thing that the string must start with a FUNC1 character which is encoded + using ASCII 128 in JpGraph Barcode available as constant EA_FUNC1. The + validation routines checks these rules and will fail any data string not + following the EAN 128 rules.

    +
    +

    Checksum

    + +

    Automatic, mandatory.

    +
    +

    Example

    + +

    Encoded string = "3125134772"

    +

    +

    Figure 24.13. EAN 128 Example

    + +
    EAN 128 Example
    +


    +

    +
    +
    +

    Industrial 2 of 5

    + +

    The names comes from that each character is encoded in 5 bars and 2 of those + are 3 modules wide and the rest 1 module wide

    +

    Usage

    + +

    Old low density standard. For newer applications it should not be used. + Use interleaved 2 of 5 instead since this is a higher density code.

    +
    +

    Input data/character set

    + +

    Digits.

    +
    +

    Checksum

    + +

    Optional.

    +
    +

    Example

    + +

    Encoded string = "13729"

    +

    +

    +
    +

    +

    Figure 24.14. Industrial 2 of 5, without check + digit

    + +
    Industrial 2 of 5, without check digit
    +


    +

    +
    +

    +

    Figure 24.15. Industrial 2 of 5, with check digit

    + +
    Industrial 2 of 5, with check digit
    +


    +

    +
    +

    +

    +
    +
    +

    Interleaved 2 of 5

    + +

    The name comes from the that each data character is composed of 5 elements, + either 5 bars or 5 spaces. Two elements are 3 modules wide and three elements + have a width of 1 module. Adjacent characters are interleaved, mixing the spaces + from one character with the bars of the other.

    +

    +

    Note

    +

    This symbology is sometimes referred to as "Code 25" but since this + could also refer to "Industry 2 of 5" symbology this name is ambiguous + without further discriminating information.

    +

    +

    +

    Usage

    + +

    Various. Relative hight density numeric code. Used for example on some + driving licenses.

    +
    +

    Input data/character set

    + +

    Even length numeric string when not using checksum. Odd length string when + using checksum.

    +
    +

    Checksum

    + +

    Optional.

    +
    +

    Example

    + +

    Encoded string = "137291"

    +

    Since using a checksum requires an odd number of digits we add a '0' in + the beginning to get a data string with an even number of digits.

    +

    +

    +
    +

    +

    Figure 24.16. Industrial 2 of 5, without check + digit

    + +
    Industrial 2 of 5, without check digit
    +


    +

    +
    +

    +

    Figure 24.17. Industrial 2 of 5, with check digit

    + +
    Industrial 2 of 5, with check digit
    +


    +

    +
    +

    +

    +
    +
    +

    CODE 11 (USD 8)

    + +

    Warning

    +

    THIS IS AN EXPERIMENTAL ENCODER

    +

    Due to the lack of CCD scanners supporting this code in Europe we have not + been able to verify this Code against any scanning equipment.

    +
    +

    Usage

    + +

    Numeric only code. Used primarily on telecommunication equipment. Not + recommended for general usage. Note: This code is not widely supported by + handhold CCD scanners.

    +
    +

    Input data/character set

    + +

    Numeric including the dash "-" character.

    +
    +

    Checksum

    + +

    Optional.

    +
    +

    Example

    + +

    Encoded string = "0137291"

    +

    +

    +
    +

    +

    Figure 24.18. Code 11, without check digit

    + +
    Code 11, without check digit
    +


    +

    +
    +

    +

    Figure 24.19. Code 11, with check digit

    + +
    Code 11, with check digit
    +


    +

    +
    +

    +

    +
    +
    +

    CODE 39

    + +

    This is also known as "Code 3 of 9" or + "USD 3" . This names comes from that each + character consists of 9 elements. 5 bars and 4 spaces. Three of those elements + are 2 modules wide and the rest one module wide. Code 39 is defined in American National Standards Institute (ANSI) + standard MH10.8M-1983.

    +

    The full 128 ASCII character set can be encoded in Code 39.

    +

    Code 39 is a very widely used barcode and basically every scanner/reader on + the market is able to decode Code 39 barcodes which makes it for a very good + selection as a generic linear barcode.

    +

    Usage

    + +

    General alphanumeric data (Capitals only)

    +
    +

    Input data/character set

    + +

    Alphanumeric (CAPITALS only) including the special characters "$", "/", + "+", "%" and "*"

    +
    +

    Checksum

    + +

    Optional.

    +
    +

    Example

    + +

    Encoded string = "GRAPH12"

    +

    +

    +
    +

    +

    Figure 24.20. Code 39, without check digit

    + +
    Code 39, without check digit
    +


    +

    +
    +

    +

    Figure 24.21. Code 39, with check digit

    + +
    Code 39, with check digit
    +


    +

    +
    +

    +

    +
    +
    +

    CODE 39 Extended

    + +

    Code 39 Extended was developed to provide a means of encoding additional + characters that are not normally part of the Code 39 character set (lower case + characters and symbols).

    +

    Usage

    + +

    Same as Code 39 with the change that it supports lower case characters + ("a,b,c,d,...") but do not support the special characters "+/%$+*".

    +
    +

    Input data/character set

    + +

    Alphanumeric data.

    +
    +

    Checksum

    + +

    Optional.

    +
    +

    Example

    + +

    Encoded string = "Code39"

    +

    +

    +
    +

    +

    Figure 24.22. Code 39 Extended, without check + digit

    + +
    Code 39 Extended, without check digit
    +


    +

    +
    +

    +

    Figure 24.23. Code 39 Extended, with check digit

    + +
    Code 39 Extended, with check digit
    +


    +

    +
    +

    +

    +
    +
    +

    CODE 128

    + +

    Named so since it can encode the entire 128 ASCII character set (from ASCII 0 + to ASCII 128.)

    +

    Usage

    + +

    Generic high density code which supports the full ASCII set.

    +
    +

    Input data/character set

    + +

    Alphanumeric characters.

    +
    +

    Checksum

    + +

    Automatic, mandatory.

    +
    +

    Example

    + +

    Encoded string = "Code128"

    +

    +

    Figure 24.24. Code 128

    + +
    Code 128
    +


    +

    +
    +
    +

    CODABAR

    + +

    Codabar is primarily used in libraries in the USA. It is also sometimes used + in health care and transportation systems.

    +

    Usage

    + +

    Old, numeric + some alpha capability, code. Primarily used in the USA. +

    +
    +

    Input data/character set

    + +

    Numbers 0-9, Special characters "-$:/.+"

    +
    +

    Checksum

    + +

    None.

    +
    +

    Example

    + +

    Encoded string = "12354"

    +

    +

    Figure 24.25. Codabar

    + +
    Codabar
    +


    +

    +
    +
    +

    Bookland (ISBN)

    + +

    This is a specially formatted EAN13 Code. This is primarily used to encode the + International Standard Book Number (ISBN) + on magazines and books.

    +

    Usage

    + +

    Encodes ISBN codes in books and magazines.

    +
    +

    Input data/character set

    + +

    A valid ISBN number without last digit (check digit) and "-" signs. An + ISBN is a 10-digit number which is made up of

    +

    +

    • +

      Group identifier (1 digit, typically 0 or 1 for + English-speaking countries)

      +
    • +

      Publisher identifier

      +
    • +

      Title identifier

      +
    • +

      Check digit

      +

    +

    +
    +

    Checksum

    + +

    Automatic, mandatory.

    +
    +

    Example

    + +

    The input data must be a valid ISBN (International Standard Book Number)

    +

    Encoded string = "0-486-63926-6" +

    +

    +

    Figure 24.26. Bookland (ISBN)

    + +
    Bookland (ISBN)
    +


    +

    +

    +

    Note

    +

    The ISBN check digit "6" is automatically removed and replaced by + the EAN 13 check digit.

    +

    +

    +

    +

    Note

    +

    A bookland code will always have the digits "978" as the first + three digits (the standard also allows "979" but that is currently + not in use)

    +

    +

    +

    +

    Note

    +

    ISBN numbers are organized in Europe by:

    +

    +

    International Standard Book Number Agency, 
    +Staatsbibliothek Preussischer Kulturbesitz
    +Posdamer Strasse 33
    +D-1000 Berlin 30 Germany

    +

    +

    +

    +
    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch25.html b/Societes/ric/jpgraph/docs/chunkhtml/ch25.html new file mode 100755 index 00000000..dc7a3b38 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch25.html @@ -0,0 +1,177 @@ +Chapter 25. PDF417 (2D-Barcode)

    Chapter 25. PDF417 (2D-Barcode)

    + +

    Principle of PDF417 Barcodes

    + +

    Note

    +

    This module is only available in the pro-version of the library.

    +
    +

    +

    Caution

    +

    In order to use the PDF417 barcode module it is necessary for the PHP + installation to support the function bcmod(). This is enabled + when compiling PHP by making sure that the option --enable-bcmath + is given when configuring PHP at compile time.

    +

    +

    +

    This first section gives a very brief explanation of the general structure of PDF417 + barcodes and some capacity figures.

    +

    PDF417 was one of the first publicly available high density (capable of storing up to + 2710 data characters) two dimensional barcodes. It was originally published by Symbol + Technologies, Inc. but has since become an ISO standard. PDF417 belongs to the early two + dimensional barcodes which internally consists of a number of linear barcodes stacked on + top of each other. This is in contrast to the more modern two dimensional barcodes like + Datamatrix and QR + code which are truly two dimensional in that they have moved away from + the row thinking in the internal construction of the barcode.

    +

    PDDF417 barcodes are extensively used for example within aviation, automobile industry + and health care.

    +

    Strictly speaking it is not necessary to know this level of detail to use the PDF417 + barcode module but we would recommend to read through this at least once since some + parameters (like number of columns - explained below - that are used adjustable)

    +

    PDF417 is an acronym for Portable Data Format 4 of 17 where 4 of 17 describes the structure of + how a single data character is encoded (4 bars and 4 spaces in a 17 module wide + structure).

    +

    PDF417 standard

    + +

    The PDF417 is high capacity two dimensional barcode and is fully described in the + official standard ISO/IEC 15438:2001 available for purchase from ISO Standard Organization.

    +
    +

    Data capacity

    + +

    PDF417 is a row based 2 dimensional barcode that consists of a maximum of 90 rows + and 30 columns. The maximum number of data is dependent on

    +

    +

    • +

      The compaction mode used

      +
    • +

      The number of columns (and rows)

      +
    • +

      The error correction level

      +

    +

    +

    The maximum data size is dependent on both the compaction mode as well as the + input data. The figures listed below will give some idea on the capacity

    +

    +

    • +

      2710 digits in numeric compaction mode

      +
    • +

      1850 characters in text compaction mode

      +
    • +

      1108 bytes in byte compaction mode

      +

    +

    +

    One barcode can hold up to a maximum of 929 codewords (data count + data + error + correction)

    +
    +

    Structure of PDF417 barcodes

    + +

    A high level overview of the structure of a PDF417 barcode is shown in Figure 25.1. PDF417 Structure - Overview . A PDF417 barcode can be thought + of as a number of linear barcode stapled on top of each other. Each row in the + barcode is constructed in a similar way.

    +

    Each data word (symbol character) consists of 4 bars and four spaces in a 17 + module structure, hence the name PDF417. A more detailed explanation of a real + PDF417 barcode is shown in Figure 25.2. PDF417 Structure - Details of a real barcode

    +

    There are three distinct areas in a barcode:

    +

    +

    1. +

      Start and stop pattern (light red background + color). Used to help the scanner find the start and + beginning of the barcode. These patterns are static and are the same for + all barcodes.

      +
    2. +

      Left and right row indicators. Used + to help the scanner orient itself in the barcode. These patterns are + dependent on the actual data in the barcode to achieve maximum + contrast.

      +
    3. +

      Data and data count. This is unique + for each barcode and represents the encoded data. PDF417 specifies + several ways to encode the characters in the input data to achieve + maximum compression level based on the knowledge (and restriction) on + the input alphabet. For example, if the data is known to be only numeric + the encodation can take advantage of this and make the compaction schema + more efficient than if also alphabetical letters have to be encoded.

      +

      The way the data is encoded is user specifiable. By default the + library analyses the input data and determines an optimal mix of + encoding suitable for this particular data.

      +
    4. +

      Error correction codewords. Each + PDf417 have a user selectable error correction level. Since the barcode + have a specified size this means that the more error correction words + that are used the less data can fit. The error correction words are + added to the end of the payload data, each barcode has a minimum of 2 + error detection codewords. Up to 510 additional error correction + codewords can be added for maximum data correction.

      +

    +

    +

    +

    Figure 25.1. PDF417 Structure - Overview

    + +
    PDF417 Structure - Overview
    +


    +

    +

    In Figure 25.2. PDF417 Structure - Details of a real barcode the distinct data column + (which on each row holds one data word) are indicated at the bottom + (w1,w2,w3,w4,w5). This particular barcode have 8 rows and 5 columns which means that + the total number of data words + error correction words encoded are 8x5 = 40.

    +

    +

    Figure 25.2. PDF417 Structure - Details of a real barcode

    + +
    PDF417 Structure - Details of a real barcode
    +


    +

    +

    The data to be converted into a barcode has to go through a number of steps which + are handled by the library:

    +

    +

    1. +

      The first step is a high level compression schema known as compaction. + This schema translates the input string into a number of codewords. Each + codeword has a numeric value between 0 and 928. To achieve the highest + possible compaction and flexibility the PDF417 standard defined three + different compaction schema:

      +

      +

      • +

        numeric (encodes only digits 0-9, ASCII 30-39). This + schema can compact up to 2.9 digits per codeword (and has + the highest density)

        +
      • +

        byte (encodes ASCII 0-255). This schema can only compact + up to 1.2 bytes per codeword (and has the lowest + density)

        +
      • +

        text (which encodes ASCII 32-126). This schema can compact + up to 1.8 characters per codeword.

        +

      +

      +
    2. +

      The second step is the transformation of codeword into (4,17) symbols. + The exact symbol used is dependent on which row the codeword to be + encoded is on. Three different sets of codewords, known as clusters, are + used. This ensures that two adjacent rows uses different clusters. This + allows the barcode to be scanned without using specific divider + symbols.

      +
    3. +

      In the third step the error codewords specified are calculated and + added to the end of the payload data. The error correction uses + polynomial Reed-Solomon error correcting coding (same schema as used on + CD:s) to achieve a good balance between error correcting efficiency and + computational effort and space requirements.

      +
    4. +

      Finally these codeword are positioned sequentially in each row + starting at the top left corner down to the bottom right in between the + left and right row indicators, and the start and stop patterns.

      +

    +

    +

    By necessity this s a fairly shallow description where we have omitted many + technical details in the encodation process. We therefore refer to the official + standard which gives much more technical details on the encodation process.

    +
    +
    + + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch25s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch25s02.html new file mode 100755 index 00000000..551e50aa --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch25s02.html @@ -0,0 +1,126 @@ +Creating barcodes

    Creating barcodes

    + +

    Introduction

    + +

    The library allows the creation of PDF417 barcodes as either images (in either PNG + or JPEG format) or as a Postscript files. In addition the barcode extension provides + extensive data verification which makes it impossible to create an invalid + barcode

    +

    Verification

    + +

    The JpGraph PDF417 barcode module have been extensively verified using an + ARGOX 8213 2D CCD handhold scanner.

    +
    +

    Features

    + +

    This is a summary of the features available in the JpGraph PDF417 barcode + extension.

    +

    +

    • +

      Supports both standard and truncated PDF 417 codes

      +
    • +

      Output format

      +

      +

      1. +

        Image format, (any of the formats supported by the + library)

        +
      2. +

        Postscript

        +
      3. +

        Encapsulated postscript

        +

      +

      +
    • +

      Supports both auto and user selectable number of columns and + rows

      +
    • +

      Supports all 8 possible error correction levels

      +
    • +

      Supports all defined compaction schemes, Alpha, Numeric and Byte. + In addition the library has an optimization algorithm that will + determine the best possible encoding given a specific input + data.

      +
    • +

      User specified module height

      +
    • +

      User specified module width factor

      +
    • +

      User specified overall image scaling of resulting barcode

      +
    • +

      Horizontal or vertical barcode layout

      +
    • +

      Optional human readable text at the bottom of the barcodes with + selectable font and size

      +
    • +

      Foreground and background color specification

      +

    +

    +
    +

    Sample application

    + +

    Even though the library module is meant, and designed, to be used as a library + within a larger system there is a small demo barcode creation application + included in the distribution. This application can be used to easily create + barcode through it's WEB interface as can be seen in Figure 25.3. PDF417 WEB-based demo application

    +

    This application is primarily included as a demo on the features available in + the library and not as a finalized product.

    +

    The application is available at + "pdf417/demoapp/index.html" in the distribution.

    +

    +

    Figure 25.3. PDF417 WEB-based demo application

    + +
    PDF417 WEB-based demo application
    +


    +

    +

    The fields in the demo application has the following meaning

    +

    +

    • +

      Data: Data to be encoded. This + should be entered as a standard string.

      +
    • +

      Encoding: Determine the + compaction schema to be used

      +
    • +

      Columns: Number of data columns + to be used

      +
    • +

      Error level: What error level to + be used

      +
    • +

      Module width: Module width

      +
    • +

      Height factor: Specify the height + of the individual rows in the barcode as a multiplier of the + width.

      +
    • +

      Scale: Scale factor.

      +
    • +

      Text: Should the human readable + text be shown?

      +
    • +

      Vertical: Should the barcode use + vertical layout?

      +
    • +

      Frame: Should a frame be added to + the barcode?

      +
    • +

      Truncated: Should the barcode be + truncated?

      +
    • +

      File: If specified the output + will be written to this file

      +
    • +

      PS Module: If specified will be + used as the module width for PS

      +
    • +

      Format: If specified will set + what image encoding will be used output

      +
    • +

      Debug info: Will open a new frame + and display some internal debugging information from the + library.

      +

    +

    +
    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch25s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch25s03.html new file mode 100755 index 00000000..4572d6da --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch25s03.html @@ -0,0 +1,207 @@ +Creating barcodes

    Creating barcodes

    + +

    In order to access the PDF417 functionality the module + "pdf417/jpgraph_pdf417.php" must first be included.

    +

    Usage of PDF417 barcodes follows a similar schema as for the linear barcodes with the + concepts of an encoder and backend. The principle of the overall encodation process is + shown in Figure 25.4. Overview of the interaction between encoder and backends

    +

    +

    Figure 25.4. Overview of the interaction between encoder and backends

    + +
    Overview of the interaction between encoder and backends
    +


    +

    +

    In order to create a PDf417 barcode the following principle steps are needed

    +

    +

    1. +

      Create an instance of the PDF417 encoder (as an instance of class + PDF417Barcode )

      +
    2. +

      Create an instance of a backend to produce the wanted output (image, + postscript or encapsulated postscript) by using the static factory method + PDF417BackendFactory::Create()

      +
    3. +

      Encode data and send it back to the browser or a file with a call to the + backend Stroke() method.

      +

    +

    +

    The following script shows how to create the simplest possible barcode (in PNG format) + representing the data string "PDF-417" encoded using default number of columns and the + default error correction level

    +

    +

    Example 25.1. The most basic PDF417 script (pdf417_ex0.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    +// Create a new encoder and backend to generate PNG images
    +$backend = PDF417BackendFactory::Create(BACKEND_IMAGE,new PDF417Barcode());
    +$backend->Stroke($data);
    +?>


    Figure 25.5. The most basic PDF417 script (pdf417_ex0.php)

    The most basic PDF417 script (pdf417_ex0.php)


    +

    +

    As can bee seen from the code above the basic interface to the library makes use of + one abstract factory to create the appropriate output backend. This design makes the + addition of new output formats transparent for the end user of the library.

    +

    The example above does not have any error handling. If there is some error in the + process an exception will be thrown in the same way as in other places in the library. + The default exception will display the standard library image error box. If we instead + always wanted to do some additional processing and perhaps just display a text based + re-formatted error message we could change the above code to catch this exception as the + following example shows

    +

    +

    Example 25.2. Adding error handling (pdf417_ex1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    +try {
    +    // Create a new encoder and backend to generate PNG images
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,new PDF417Barcode());
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>


    Figure 25.6. Adding error handling (pdf417_ex1.php)

    Adding error handling (pdf417_ex1.php)


    +

    +

    when an exception is thrown it will be caught and the error string echoed. If instead + we wanted to specifically encode the data using 8-columns and using error detection + level 5 the code would have to be modified to

    +

    +

    Example 25.3. Adjusting the number of columns and error correction level (pdf417_ex1b.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    + 
    +// Setup some symbolic names for barcode specification
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$errlevel = 2;  // Use error level 2 (minimum recommended)
    + 
    +// Create a new encoder and backend to generate PNG images
    +try {
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,$encoder);
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>


    Figure 25.7. Adjusting the number of columns and error correction level (pdf417_ex1b.php)

    Adjusting the number of columns and error correction level (pdf417_ex1b.php)


    +

    +

    Later on we will go through all the different options available both on the encoder + and on the backends. But for now let's just show how easy it is to change the size of + the barcode and add a human readable text at the bottom of the bar from the example + above.

    +

    In the same way as for linear barcode the concept of "module width" is used. This is + basically the width of a unit bar in the barcode. Remember that each codeword is made up + of 17 modules where there are 4 black and 4 white areas of various width. The width of + the module is specified with the backend method

    +

    +

    • +

      Backend::SetModuleWidth($aWidth)

      +

    +

    +

    For images this is specified in pixels and for a postscript backend this is + interpretated as specifying the number of points (1 pt = 1/72 inch).

    +

    To add a human readable version of the data at the bottom of the barcode we use the + method

    +

    +

    • +

      Backend::ShowText($aShow=true)

      +

    +

    +

    Adding these tow method calls to our previous example will give us the following code + and resulting barcode.

    +

    +

    Example 25.4. Adjusting the module width and showing human readable text (pdf417_ex2.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    + 
    +// Setup some symbolic names for barcode specification
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$errlevel = 2;  // Use error level 2 (minimum recommended)
    +$modwidth = 2;  // Setup module width (in pixels)
    +$height = 3;    // Height factor
    + 
    +// Create a new encoder and backend to generate PNG images
    +try {
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,$encoder);
    +    $backend->SetModuleWidth($modwidth);
    +    $backend->SetHeight($height);
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>


    Figure 25.8. Adjusting the module width and showing human readable text (pdf417_ex2.php)

    Adjusting the module width and showing human readable text (pdf417_ex2.php)


    +

    +

    In the remainder of this chapter we will explain in more detail what other formatting + options are available.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch25s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch25s04.html new file mode 100755 index 00000000..058d4a89 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch25s04.html @@ -0,0 +1,461 @@ +Specifying the PDF417 parameters

    Specifying the PDF417 parameters

    + +

    +

    Note

    +

    The following section is not meant as a general introduction to the way PDF417 + barcode is specified. It assumes that the reader has a basic understanding of + the nature of PDF417 encoding. This section will focus on how to make use of the + methods in the library to specify the various settings for the PDF417 barcodes. +

    +

    +

    +

    Specifying encoding and input data

    + +

    The absolute simplest way of encoding data is simply to create a simple string + representing the data to be encoded and then pass that string as the first argument + to the Stroke() method in the backend. The encoder will then analyze + the input data and choose the most efficient space saving encoding schema for this + data.

    +

    The PDF417 standard allows 3 different compaction schema that can be used to + minimize the number of codewords used for a particular data string. This also means + that a particular data string may have several different valid barcodes that + visually looks different.

    +

    The available compaction modes are:

    +

    +

    • +

      Alpha compaction mode (also known as + Text compaction mode). Efficient encoding of ASCII 32-126, (inclusively) + i.e. the normal alphabet including numbers. Encodes 1.8 characters per + codeword.

      +
    • +

      Numeric compaction mode. Efficient + encoding of numeric data. For long consecutive strings of digits this + gives a better compaction than the alpha mode. Numeric compaction + encodes about 2.9 digits per codeword.

      +
    • +

      Byte compaction mode. The least + efficient encoding. Used only when there is a need to encode byte values + as is, i.e. values in the range 0-255. Please note that many barcode + readers, especially those with a keyboard wedge, don't send back the + proper encoding for ASCII values lower than 32 or higher than 126. Byte + compaction mode encodes roughly 1.2 byte per codeword.

      +

    +

    +

    When the automatic encoding is chosen this will create an optimum encoding (from a + size perspective) of the supplied data. This includes shifting encoding method in + the middle of the data one or several time depending on the structure of the data.

    +

    It is also possible to manually control the exact encodation of the input data. + This is done by supplying one or more data tuples where the first entry in the tuple + is the compaction schema and the second the data. To encode the data manually the + following structure must then be followed:

    +

    +

    Figure 25.9. Structure for manually specified encodation schema

    + +
    $data = array( array( <encoding_mode1> , <data1> ),
    +               array( <encoding_mode2> , <data2> ),
    +                         ...
    +               array( <encoding_modeN> , <dataN> ));
    +


    +

    +

    The encoding mode is specified as one of three symbolic constants

    +

    +

    • +

      USE_TC, (short for USE-TextCompaction) Use Text compaction schema

      +
    • +

      USE_NC, (short for USE-Numerical-Compaction) Use Numeric compaction + schema

      +
    • +

      USE_BC, (short for USE-ByteCompaction) Use Byte compaction schema

      +

    +

    +

    and the data is specified as a regular text string. Each section of data must + therefore have the compaction mode specified.

    +

    Example 1:

    +

    In the following example we will assume that we want to encode the data string

    +

    +

    1
    +
    $data="1234567890"

    +

    +

    To use automatic encoding then there is nothing more than specifying this data to + the Backend::Stroke() method as

    +

    +

    1
    +
    $backend->Stroke($data);

    +

    +

    If instead we wanted to make sure that only alpha mode (text) compaction schema is + used the input data would have to be changed to

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$data="1234567890" 
    +$newdata = array(array( USE_TC, $data ));
    +...
    +$backend->Stroke($newdata);
    +?>

    +

    +

    this will then force the input string to be encoded using only the text compaction + schema.

    +

    If instead we wanted to enforce only numeric compaction the code would have to be + changed to

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$data="1234567890" 
    +$newdata = array(array( USE_NC, $data ));
    +...
    +$backend->Stroke($newdata);
    +?>

    +

    +

    this will then force the input data string to be encoded using numeric compaction + schema. ∎

    +

    In the above example we just used a single compaction schema to use multiple + encodation schema we just need to split our data for each of the compaction mode we + want to use and create an input array. An example will make this clear.

    +

    Example 2:

    +

    We will assume that we want to encode the string "1234abc567" by + using numeric compaction for the first 4 digits, then use text compaction for the + three letters and finally go back to numeric compaction schema for the last three + digits. For this to work we would have to create an input array as shown below.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    <?php
    +$newdata = array(array( USE_NC, '1234'), 
    +                 array( USE_TC, 'abc'), 
    +                 array( USE_NC, '567'));
    +...
    +$backend->Stroke($newdata);
    +?>

    +

    +

    +

    +

    Note

    +

    Normally there are very few reasons to specify the encodation schema + manually and it is therefore better to let the library determine the optimum + encoding by itself.

    +

    +

    +

    Using byte compaction mode

    + +

    Using byte compaction mode is however slightly more complex. The reason is + that we need, for technical reasons, specify if the size (length) of the data to + be encoded is an even multiple of 6 or not.

    +

    Hence, there are actually two Byte code compaction schema

    +

    +

    1. +

      USE_BC_E6 (for even multiples of 6)

      +
    2. +

      USE_BC_O6 (for odd data).

      +

    +

    +

    So to encode data using byte compaction mode the following template should be + used to determine the proper byte compaction variant.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +$even6 = ( strlen($data) % 6 === 0 );
    +$newdata = array(array( $even6 ? USE_BC_E6 : USE_BC_O6, $data));
    +...
    +$backend->Stroke($newdata);
    +?>

    +

    +

    +

    Caution

    +

    Remember that strlen() is not multi byte character + encodation safe. If multi-byte characters should be encoded then the + mb_strlen() should be used.

    +

    +

    +

    +

    Caution

    +

    Note that several keyboard wedge barcode scanners do not handle byte + values < 32 or > 127 properly.

    +

    +

    +
    +
    +

    Encoder option: Adjusting the number of data columns

    + +

    PDF417 barcode is made up of a number of rows and columns. The library allows the + specification of the number of columns and it will then determine the necessary + number of rows to hold all the given data + the error correction information.

    +

    Since each row has some overhead (start/stop and sync codewords) the overall area + taken by the barcode will be minimized by trying to use as many columns as possible. + The standards allow for up to 30 columns (and 90 rows). The most practical limit is + how wide data the scanner is able to handle. Most hand hold scanner will usually not + work very reliable with barcodes which are more than ~10cm wide.

    +
    +

    Encoder option: Adjusting the error level

    + +

    All PDF417 barcodes have a minimum of two error detection codewords. Above that + the user is free to specify a higher level which will allow not only error detection + but also (some) error correction.

    +

    The error level determines how much redundancy is added in the barcode label. A + high level of redundancy ensures that a partially damaged barcode can still be + correctly read by the barcode scanner. The downside is that the higher the error + level the larger the barcode gets and since the total number of codewords in a + PDF417 barcode has a maximum limit of 928 also less real data. Table 25.1. Available error levels shows the available error levels and + how that will impact the maximum data payload. Table 25.1. Available error levels also shows the error correcting + capacity. For example using error level 4 means that 15 of the codewords can have + errors and still be corrected.

    +

    +

    Table 25.1. Available error levels

    + +
    Error level +

    Error correction

    +

    codewords

    +
    +

    Error correction

    +

    capacity

    +
    +

    Maximum

    +

    payload

    +
    +

    0

    +
    +

    2

    +
    0 +

    923

    +
    +

    1

    +
    +

    4

    +
    1 +

    921

    +
    +

    2

    +
    +

    8

    +
    3 +

    917

    +
    +

    3

    +
    +

    16

    +
    7 +

    909

    +
    +

    4

    +
    +

    32

    +
    15 +

    893

    +
    +

    5

    +
    +

    64

    +
    31 +

    861

    +
    +

    6

    +
    +

    128

    +
    63 +

    797

    +
    +

    7

    +
    +

    256

    +
    127 +

    669

    +
    +

    8

    +
    +

    512

    +
    255 +

    413

    +
    +


    +

    +

    The recommended minimum error level is a dependent on the payload size and is + given below.

    +

    +

    Table 25.2. Recommended error levels

    + +
    +

    Data codewords

    +
    +

    Recommended

    +

    error level

    +
    +

    1 to 40

    +
    +

    2

    +
    +

    41 to 160

    +
    +

    3

    +
    +

    161 to 320

    +
    +

    4

    +
    +

    321 to 863

    +
    +

    5

    +
    +


    +

    +

    Note that the number of codewords is not the same thing as, for example, the + number of digits or letters in a string to be encoded. Depending on the chosen + encoding the number of symbols per codeword is always > 1. For example in numeric + compaction mode (encoding) each codewords encode, on average, 2.93 digits.

    +

    The error level is specified as an integer in the range [0-8] inclusively and can + be specified when creating a particular encoder. For example the code below uses the + default error correction (2).

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    <?php
    +// Use 10-columns for data
    +$columns =10;
    + 
    +// Create a new encode using the default error correction
    +$encoder = new PDF417Barcode ($columns);
    +?>

    +

    +

    While the following specifies an error correction level of 6

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    <?php
    +$columns = 10; // Use 10-columns for data
    +$errlevel = 6; // Error correction level 6
    + 
    +// Create a new encode using the default error correction
    +$encoder = new PDF417Barcode ($columns, $errlevel);
    +?>

    +

    +

    In addition to specifying the number of data columns and error level in the + creation of the encoder it is also possible to adjust them afterwards.

    +

    For example, it might be necessary to create the encoder in the beginning of a + script and then use the same encoder with different settings controlled by, for + example, entries in a DB.

    +

    The two encoder methods

    +

    +

    • +

      Encoder::SetErrLevel($aErrLevel)

      +
    • +

      Encoder::SetColumns($aColumns)

      +

    +

    +

    are used for this purpose. The code snippet below does the exact same things as + the code snippet above but using these two methods after the encoder has been + instantiated instead.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +$columns = 10; // Use 10-columns for data
    +$errlevel = 6; // Error correction level 6
    + 
    +// Create a new encode using the default error correction
    +$encoder = new PDF417Barcode();
    +$encoder->SetColumns($columns);
    +$encoder->SetErrLevel($errlevel);
    +?>

    +

    +
    +

    Truncated PDF417

    + +

    +

    Warning

    +

    Not all PDF417 barcode readers can handle truncated PDF417

    +

    +

    +

    In situations where the physical size of the label is restricted one might use the + truncated version of the PDF417 code.

    +

    This works by simply stripping of some redundant information on the right side of + the barcode. This will also make the barcode more sensible for damage.

    +

    The two images below shows a normal version together with the truncated version + (both barcodes encode the same information).

    +

    +

    +
    +

    +

    Figure 25.10. Normal PDF417

    + +
    Normal PDF417
    +


    +

    +
    +

    +

    Figure 25.11. Truncated PDF417

    + +
    Truncated PDF417
    +


    +

    +
    +

    +

    +

    To use the truncated version the method the following encoder method is + used

    +

    +

    • +

      Encoder::SetTruncated($aFlg=true)

      +

    +

    +

    The following code snippet shows how this can be used

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    <?php
    +$columns = 10; // Use 10-columns for data
    +$errlevel = 4; // Error correction level 4
    +$truncated = true;
    + 
    +// Create a new encode using the default error correction
    +$encoder = new PDF417Barcode();
    +$encoder->SetTruncated($truncated);
    +$encoder->SetColumns($columns);
    +$encoder->SetErrLevel($errlevel);
    +?>

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch25s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch25s05.html new file mode 100755 index 00000000..d132f9e4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch25s05.html @@ -0,0 +1,100 @@ +Adjusting the output

    Adjusting the output

    + +

    This section deals with the way you can adjust the visual quality and appearance of + the output by adjusting a number of properties on the backend.

    +

    Output format

    + +

    By choosing the appropriate backend you can choose to generate the barcode label + as either an image (in either PNG or JPEG format) or as Postscript (both standalone + and Encapsulated postscript) . For images the PNG is strongly recommended and used + by default. The reason is that PNG is a non-destructive format and will ensure the + maximum quality of the barcodes while JPEG is not well suited for this type of + applications since it is a destructive format.

    +

    This choice is being made by creating the appropriate backend. The backend is + created by calling the factory method PDF417BackendFactory::Create() + specifying what type of backend and what encoder to use. The backend factory will + then return a suitable encoder.

    +

    The following code snippet shows how to create a backend that will generate an + image.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +
    <?php
    +// Create a new encode using the default error correction
    +// and columns
    +$encoder = new PDF417Barcode ();
    +$backend = PDF417BackendFactory::Create( BACKEND_IMAGE, $encoder);
    +?>

    +

    +

    It is also possible to have one encoder and two different backends to allow the + creation of both image and postscript output at the same time as the following + example shows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +
    <?php
    +$date='ABC123';
    +$file=' ...'; // Some filename to write the PS file to
    + 
    +// Create a new encode using the default error correction
    +// and columns
    +$encoder = new PDF417Barcode ();
    + 
    +$eImg = PDF417BackendFactory::Create( BACKEND_IMAGE, $encoder);
    +$eEPS = PDF417BackendFactory::Create( BACKEND_EPS, $encoder);
    +$eEPS->Stroke($data,$file);
    +$eImg->Stroke($data);
    +?>

    +

    +
    +

    Summary of user settings for the backend

    + +

    In the list below is a short description of the available possibilities to change + the output. For a more detailed explanation of the parameters for each method please + consult the method reference at the end of this chapter

    +

    +

    • +

      Specifying the module width. The + module width for the barcode is user selectable, For images this + specifies the number of pixels for the module and for Postscript output + this specifies the number of points (1/72 inch).

      +
    • +

      Specifying the width/height factor + Specify the height of each individual row in the barcode as a multiple + of the width. By default the height is 3x the width.

      +
    • +

      Specifying background and foreground + color The foreground color and the background color for + the barcodes are user selectable. The colors can be specified as any of + JpGraphs builtin colors.

      +
    • +

      Adding human readable text This is an + extension to the PDF417 standard. This adds a plaintext string of the + data that has been encoded under the barcode. This is useful when + debugging applications to make sure that the right values have been + read, for example, from a DB.

      +
    • +

      Rotating 90 degrees (Vertical output) This enables the barcode to be + printed vertically.

      +
    • +

      Scaling the image The resulting barcode images can be scaled by an + arbitrary factor.

      +

    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch25s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch25s06.html new file mode 100755 index 00000000..85e0355a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch25s06.html @@ -0,0 +1,64 @@ +A template to create barcodes

    A template to create barcodes

    + +

    In the example directory in the distribution ('pdf417/examples') + you can find many more examples on how to create barcodes. As a good start the following + (simple) template may be used as a base for further customizations.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +
    <?php
    +require_once('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    + 
    +// Specification for barcode
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$errlevel = 4;  // Use error level 4
    +$modwidth = 2;  // Setup module width (in pixels)
    +$height = 2;    // Height factor (=2)
    +$truncated = false; // Don't truncate 
    +$showtext = false;  // Show human readable string
    + 
    +// Create a new encoder and backend to generate images
    +try {
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $encoder->SetTruncated ($truncated); 
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,$encoder);
    +    $backend->SetModuleWidth($modwidth);
    +    $backend->SetHeight($height);
    +    $backend->NoText(!$showtext);
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch25s07.html b/Societes/ric/jpgraph/docs/chunkhtml/ch25s07.html new file mode 100755 index 00000000..a8d81af8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch25s07.html @@ -0,0 +1,340 @@ +Method reference

    Method reference

    + +

    Encoder methods

    + +

    All encoder methods are accessed on an instance of class + PDF417Barcode +

    +

    +

    1
    +2
    +3
    +
    ...
    +$encoder = new PDF417Barcode($columns,$errlevel);
    +...

    +

    +

    PDF417Barcode

    + +

    PDF417Barcode($aNumCols=10, $aErrLevel=2)

    +

    Purpose:

    +

    To create a new PDF417 encoder with a chosen number of columns and error + level. Please note that these parameters can also be adjusted using the methods + described below. The method will throw exceptions if the parmeters are outside + there valid range.

    +

    $aNumCols , an integer in the range [2,30]

    +

    $aErrLevel, an integer in the range [0,8]

    +

    Returns:

    +

    A new encoder which is used by the backend to generate the barcode + label.

    +

    Example:

    +

    +

    1
    +2
    +
    // Create a new encoder with 20 columns
    +$encoder = new PDF417Barcode(20);

    +

    +
    +

    SetColumns

    + +

    SetColumns($aCols)

    +

    Purpose:

    +

    Specify number of data columns. This should be a value in the range [2-30] + (inclusively) . Note that it is also possible to specify the number of columns + in the instantiation of the encoder.

    +

    Example:

    +

    +

    1
    +2
    +3
    +
    // Create a new encoder with 20 columns
    +$encoder = new PDF417Barcode();
    +$encoder->SetColumns(20);

    +

    +

    Note:

    +

    The number of rows will be automatically adjusted to fit the data and the + error correction codewords as specified by the error level setting. The number + of rows is not directly user configurable.

    +
    +

    SetErrLevel

    + +

    SetErrLevel($aErrLevel)

    +

    Purpose:

    +

    Specify the chosen level of error correction.

    +

    Example:

    +

    +

    1
    +2
    +
    $encoder = new PDF417Barcode();
    +$encoder->SetErrLevel(5);

    +

    +

    Note:

    +

    A high error level will limit the number of payload data since the total + number of data in the label is fixed.

    +
    +

    SetTruncated

    + +

    SetTruncated($aTrunc=true)

    +

    Purpose:

    +

    Specify that barcode should use the truncated PDF format. This will make the + barcode slightly narrower and might be used where the physical space is at + premium.

    +

    Example:

    +

    +

    1
    +2
    +
    $encoder = new  PDF417Barcode();
    +$encoder->SetTruncated ();

    +

    +

    Note:

    +

    Not all barcode scanners can handle truncated PDF417.

    +
    +
    +

    Common backend methods

    + +

    The backend is responsible for the actual output of the barcode (see Figure 25.4. Overview of the interaction between encoder and backends).

    +

    It is possible to either create an image or a postscript backend. In the creation + of the backend an instance of the encoder is given as the second argument. The + actual output from the script (to create the barcode label) is done with a call to + the Backend::Stroke() method. As usual this call should be the last + line in the script if it is used to send the image back to the browser.

    +

    The method call to Stroke() should always be guarded with a try{} catch + {} statement.

    +

    Example:

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    try {
    +    $encoder = new  PDF417Barcode( $columns, $errlevel);
    +    $backend = PDF417BackendFactory::Create( BACKEND_IMAGE, $encoder);
    + 
    +    // .. Output formatting
    +    $backend->Stroke();
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}

    +

    +

    In the example above we have chosen to create an image encoder (specified by + constant BACKEND_IMAGE) by default the image format used will be PNG + which is also the recommended format.

    +

    Stroke

    + +

    Stroke($aData, $aFile='')

    +

    Purpose:

    +

    Encode a specific data string entered as the first argument and send the + barcode output, depending on backend, either directly back to the browser as an + image or return the Postscript representation as a string.

    +

    Example:

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    <?php
    +// Data to be encoded
    +$data = ... ;
    + 
    +try {
    +    ...
    +    $backend->Stroke($data);
    +} catch( JpGraphException $e) {
    +    ...
    +}
    +?>

    +

    +
    +

    SetVertical

    + +

    SetVertical($aFlg=true)

    +

    Purpose:

    +

    Draw the barcode vertically instead of the default horizontal direction

    +

    Example:

    +

    +

    1
    +
    $backend->SetVertical();

    +

    +
    +

    SetScale

    + +

    SetScale($aScale)

    +

    Purpose:

    +

    Will arbitrary scale the generated barcode image. Scale factor is specified as + a floating point number .

    +

    Example:

    +

    +

    1
    +
    $backend->SetScale(2.5);

    +

    +
    +

    SetModuleWidth

    + +

    SetModuleWidth($aWidth)

    +

    Purpose:

    +

    Specifies the module width to be used in the barcode. The module width is + interpretated differently depending on whether it is applied on an image or a + postscript backend. The module width will determine the physical width of the + overall barcode. Please make sure that the printer has good enough resolution to + handle the chosen module width.

    +

    For image backends is specifies the number of pixels to be used for the width + of one module in the barcode. The module can be thought of as the thinnest line + printed in the barcode. Each codeword is encoded 17 modules wide where there are + 4 black and 4 white separated areas.

    +

    Even though most modern inkjet printers (2003 and later) can resolve modules + down to 1 pixels it is recommended that for inkjet printers a module width of >= + 2 is used.

    +

    For Postcript backend the module width specified the width in Postscript + points (1 point = 1/72 inch).

    +

    Example:

    +

    +

    1
    +
    $backend->SetModuleWidth(2);

    +

    +

    +

    Tip

    +

    The size of the barcode image can be fine tuned by applying an overall + scaling constant as specified with the method + SetScale().

    +

    +

    +
    +

    SetHeight

    + +

    SetHeight($aHeight)

    +

    Purpose:

    +

    Specified the height to width ratio for the individual rows in the barcode. By + default the ratio is 3, which means that the height of the rows in the barcode + is 3 times the module width. Most scanners can handle a factor between 2-5. You + should very rarely have to change this parameter.

    +

    The ratio is specified as an integer.

    +

    One reason to change this to a smaller value is to make a barcode label take + up less vertical space.

    +

    Example:

    +

    +

    1
    +
    $backend->SetHeight(2);

    +

    +

    +

    Caution

    +

    Not all barcode scanners are good at handling very small ratios. This + will also make the barcode more susceptible to damages.

    +

    +

    +
    +

    SetColor

    + +

    SetColor($aFrgColor,$aBkgColor)

    +

    Purpose:

    +

    Specify the foreground and background color for the barcode.

    +

    Example:

    +

    +

    1
    +
    $backend->SetColor( 'black', 'lightyellow');

    +

    +
    +

    ShowFrame

    + +

    ShowFrame($aFlg=true)

    +

    Purpose:

    +

    Draw a 1 pixel frame around the barcode. This is not recommended in production + since it might disturb some scanners reading. This is only useful if you need a + visual feedback on the boundaries for the image.

    +

    Example:

    +

    +

    1
    +
    backend->SetFrame();

    +

    +
    +

    ShowText

    + +

    ShowText($aFlg=true)

    +

    +

    Caution

    +

    This is an extension specific to JpGraph. Human readable text is not + part of the official PDF417 standard and hence this is disabled by + default.. There are usually no problems of including this text but it is + not recommended to do so in a production environment. This is mostly + useful when debugging an application and to make it easer to see that + the correct data is encoded as a barcode label.

    +

    +

    +

    Purpose:

    +

    Show human readable text of the encoded data underneath the barcode label.

    +

    Example:

    +

    +

    %%

    +

    +
    +

    SetFont

    + +

    SetFont($aFontFam,$aFontStyle,$aFontSize)

    +

    Purpose:

    +

    Specify the font for the human readable text underneath the barcode label.

    +

    Example:

    +

    +

    1
    +
    $backend->SetFont( FF_ARIAL, FS_NORMAL, 8);

    +

    +
    +
    +

    Image backend methods

    + +

    SetImgFormat

    + +

    SetImgFormat($aFormat)

    +

    Purpose:

    +

    Specify image format. Possible values are

    +

    +

    • +

      'auto'

      +
    • +

      'png'

      +
    • +

      'jpeg'

      +
    • +

      'gif'

      +

    +

    +

    Example:

    +

    +

    1
    +
    $backend->SetImgFormat('jpeg');

    +

    +
    +
    +

    Postscript backend methods

    + +

    +

    SetEPS($aFlg=true)

    + +

    SetEPS($aFlg=true)

    +

    Purpose:

    +

    Format the output as Encapsulated Postcript. This adds a bounding box + information to the output and makes this format suitable to be included in other + postscript files.

    +

    Example:

    +

    +

    1
    +2
    +3
    +
    $encoder = new PDF417Barcode( $columns, $errlevel);
    +$backend = PDF417BackendFactory::Create( BACKEND_PS, $encoder); 
    +$backend->SetEPS();

    +

    +
    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch25s08.html b/Societes/ric/jpgraph/docs/chunkhtml/ch25s08.html new file mode 100755 index 00000000..05de6b94 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch25s08.html @@ -0,0 +1,265 @@ +Example scripts

    Example scripts

    + +

    The following section shows some example scripts that can serve as starting points for + further development.

    +

    Showing human readable text

    + +

    +

    Example 25.5. Showing human readable text (pdf417_ex3.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    + 
    +// Setup some symbolic names for barcode specification
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$errlevel = 4;  // Use error level 4
    +$modwidth = 2;  // Setup module width (in pixels)
    +$height = 2;    // Height factor (=2)
    +$showtext = false;  // Show human readable string
    + 
    +// Create a new encoder and backend to generate PNG images
    +try {
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,$encoder);
    +    $backend->SetModuleWidth($modwidth);
    +    $backend->SetHeight($height);
    +    $backend->NoText(!$showtext);
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>


    Figure 25.12. Showing human readable text (pdf417_ex3.php)

    Showing human readable text (pdf417_ex3.php)


    +

    +
    +

    Altering colors

    + +

    +

    Example 25.6. Changing colors (pdf417_ex4.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    + 
    +// Setup some symbolic names for barcode specification
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$errlevel = 4;  // Use error level 4
    +$modwidth = 2;  // Setup module width (in pixels)
    +$height = 2;    // Height factor (=2)
    +$showtext = true;  // Show human readable string
    + 
    +try {
    +    // Create a new encoder and backend to generate PNG images
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,$encoder);
    + 
    +    $backend->SetModuleWidth($modwidth);
    +    $backend->SetHeight($height);
    +    $backend->NoText(!$showtext);
    +    $backend->SetColor('black','yellow');
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>


    Figure 25.13. Changing colors (pdf417_ex4.php)

    Changing colors (pdf417_ex4.php)


    +

    +
    +

    Creating postscript output

    + +

    +

    Example 25.7.  (pdf417_ex5.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    + 
    +// Setup some symbolic names for barcode specification
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$errlevel = 4;  // Use error level 4
    +$modwidth = 0.8;// Setup module width (in PS points)
    +$height = 3;    // Height factor (=2)
    +$showtext = true;  // Show human readable string
    + 
    +try {
    +    // Create a new encoder and backend to generate PNG images
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $backend = PDF417BackendFactory::Create(BACKEND_PS,$encoder);
    + 
    +    $backend->SetModuleWidth($modwidth);
    +    $backend->SetHeight($height);
    +    $backend->NoText(!$showtext);
    +    $backend->SetColor('black','yellow');
    +    $output = $backend->Stroke($data);
    +    echo nl2br(htmlspecialchars($output));
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>


    +

    +
    +

    Manually selecting compaction schema

    + +

    Purpose:

    +

    To show how to manually specify the compaction schema to be used for the input + data. The example below shows how to manually specify when to use numeric and when + to use text mode.

    +

    +

    Example 25.8.  (pdf417_ex6.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data1 = '12345';
    +$data2 = 'Abcdef';
    +$data3 = '6789';
    + 
    +// Manually specify several encodation schema
    +$data = array(
    +    array(USE_NC,$data1),
    +    array(USE_TC,$data2),
    +    array(USE_NC,$data3));
    + 
    +//$data = "12345Abcdef6789";
    + 
    +// Setup some symbolic names for barcode specification
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$modwidth = 2;  // Use 2 pixel module width
    +$errlevel = 2;  // Use error level 2
    +$showtext = true;  // Show human readable string
    + 
    +try {
    +    // Create a new encoder and backend to generate PNG images
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,$encoder);
    + 
    +    $backend->SetModuleWidth($modwidth);
    +    $backend->NoText(!$showtext);
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>


    Figure 25.14.  (pdf417_ex6.php)

    (pdf417_ex6.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch26.html b/Societes/ric/jpgraph/docs/chunkhtml/ch26.html new file mode 100755 index 00000000..e4d68b92 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch26.html @@ -0,0 +1,476 @@ +Chapter 26. Datamatrix (2D-Barcode)

    Chapter 26. Datamatrix (2D-Barcode)

    + +

    Principle of Datamatrix Barcodes

    + +

    Datamatrix (or Data Matrix) is a high density 2 dimensional barcode that can encode up + to 3116 characters from the entire 256 byte ASCII character set. Compared with DF417 + barcode symbology the datamatrix barcode belongs to newer family of 2 dimensional + barcodes that makes better use of both dimensions and thus can achieve higher data + capacity than the PDF417 symbology (~3kB vs ~2kB). The symbol is built on a square grid + which have a finder pattern around the edges of the symbol to allow a scanner to + identify the barcode. The finder pattern makes it possible to read the barcode + regardless of the physical orientation of the code.

    +

    In the same way as with other 2 dimensional barcodes the datamatrix code includes + error correction capability in order to be resilient towards physical damages of a code. + Originally data matrix used an older convolutional error correction schema (ECC) but + that has later been changed to use a Reed-Solomon type of error correction which is much + more efficient. The older ECC version is known as ECC 000 to ECC 140 and should be + considered obsolete and should not be used in new applications.

    +

    The newer error correction schema (with Reed-Solomon codes) is known as ECC 200 schema + and is the current and recommended schema. By default the library will use the newer + schema but support also exists for legacy applications to use the older ECC schema. (See + ??)

    +

    Figure 26.1. Datamatrix structure. shows the principle of a Datamatrix + barcode.

    +

    +

    Figure 26.1. Datamatrix structure.

    + +

    The image shows an annotated Datamatrix where the finder and synchronization + patterns have been highlighted.

    +
    Datamatrix structure.
    +


    +

    +

    Even though it is primarily designed to handle the the Western alphabet (ISO-8859/x + code tables) it will support user prepared Unicode characters through the use of the + "Extended Channel Interpretation" (ECI) mechanism. However description of the ECI + standard is out of scope for this manual and the interested reader are referred to the + official ECI standard document.

    +

    Datamatrix standard has been adopted by (among others) "The American National + Standards Institute" (ANSI) as a standard symbology and a number of industry standard + associations (e.g. EIA, SEMI, AIAG, ATA) where it has been recommended for use.

    +

    Summary of features offered in the library

    + +

    The following list summarizes the features that the library offers for Datamatrix + barcodes. Some of the terms used here assumes familiarity with Datamatrix barcodes. + All terms are also described in the remainder of this chapter.

    +

    +

    • +

      Supports both the new ECC 200 variant and the older ECC 140

      +
    • +

      Output formats

      +

      +

      1. +

        Image

        +
      2. +

        Postscript

        +
      3. +

        ASCII

        +

      +

      +
    • +

      Supports all recommended encodation formats

      +

      +

      1. +

        ASCII

        +
      2. +

        C40

        +
      3. +

        BASE256

        +
      4. +

        Text

        +
      5. +

        X12

        +

      +

      +
    • +

      Supports all specified symbol sizes

      +
    • +

      Supports both auto and user selectable encodation

      +
    • +

      Supports both auto and user selectable symbol size

      +
    • +

      Supports user specified module size

      +
    • +

      Supports custom color specification (foreground, background)

      +
    • +

      Supports user specified quiet zone

      +
    • +

      Supports easy handling of non-printable characters through the use of + special escape sequences ("Tilde" - processing)

      +
    • +

      Supports concatenated symbols

      +
    • +

      Symbols can be written directly to a file or sent back as an image to + the browser

      +

    +

    +
    +

    Limitation of the JpGraph Datamatrix implementation

    + +

    This version of the library does not support the EDIFACT compaction standard due + to the very specialized and limited use of this encodation schema.

    +
    +

    Datamatrix standard

    + +

    Datamatrix as a standard is fully described in the ISO/IEC 16022E International + Standard and is available for purchase from the ISO Standard Organization.

    +

    Additional information about Data Matrix code is available in the following United + States patents: 4,939,354; 5,053,609; 5,124,536. See US patent + Office for full disclosures of these patents.

    +
    +

    Structure of Data Matrix codes

    + +

    Datamatrix is a two-dimensional symbology in the shape of a rectangle. The size + and shape of the symbol is usually chosen either automatically or by the user. + Usually it is chosen to be the smallest size that will have enough data capacity to + encode the given data. The symbol rectangle is build up by square dots whose size + "the module" is also user specified.

    +

    The Data Matrix symbol rectangle comes in two basic shapes.

    +

    +

    1. +

      It is either a square between the sizes of 10x10 up to 144x144 modules + in even steps

      +
    2. +

      It is a rectangle between the size of 8x16 up to 16x48

      +

    +

    +

    Examples of the two basic shapes are shown in Figure 26.2. Datamatrix - Square symbol shape and Figure 26.3. Datamatrix - Rectangle symbol shape

    +

    +

    +
    +

    Figure 26.2. Datamatrix - Square symbol shape

    + +
    Datamatrix - Square symbol shape
    +

    +
    +

    Figure 26.3. Datamatrix - Rectangle symbol shape

    + +
    Datamatrix - Rectangle symbol shape
    +

    +
    +

    +

    +

    The maximum capacity for Data Matrix codes is up to 3116 numeric characters or up + to 2335 alphanumeric characters or up to 1555 bytes of binary information.

    +

    The exact number of characters that can fit in a Data Matrix symbol depends on the + actual encoding (or compaction) schema used. In short this is used to more + efficiently encode ASCII characters to fit more data into a fixed number of bytes. + For example if only numeric data is to be encoded then instead of using one byte to + hold each digit two digits is stored in a single byte hence doubling the amount of + data that can be stored in a given number of bytes.

    +

    To encode data into a Datamatrix symbol the following (principal) steps are + taken.

    +

    +

    1. +

      The input string (which can be any ASCII values between 0-255) is + encoded using the selected encoding or encodings (it is possible to + switch encoding mid-way through the string). The primary purpose of the + encoding is to compress the data into a much shorter form.

      +
    2. +

      If needed the data is padded to fill up to the capacity of the + selected symbol size.

      +
    3. +

      Once the string has been encoded (and possible padded) a number of + error correcting code words are added so that the data can be recovered + even if part of the printed symbol have been destroyed (perhaps a corner + has been teared off).

      +
    4. +

      Finally the encoded data and the error correcting words are placed in + the symbol according to an algorithm specified in the standard. This is + done by placing each bit of every data byte in a specific position in + the data matrix symbol.

      +

    +

    +

    The above explanation is by necessity simplified and for those interested into the + specific details we refer to the official standard. It is also possible to review + the code itself to understand the details.

    +
    +

    Encodation efficiency

    + +

    As explained in the previous section several compaction schema are used to encode + the data to enable more data to fit in a given symbol. Depending on the actual data + there are several compaction schema that can be used in order to achieve the + greatest possible compression. The standard specifies six different schema. The + compaction efficiency are given in Table 26.1. Datamatrix encodation efficiency.

    +

    Depending on the application the user of the library may chose to either select a + fixed encodation mode but it is usually best to let the library automatically select + a combination of encodation schema that will give the smallest possible symbol + size.

    +

    +

    Table 26.1. Datamatrix encodation efficiency

    + +
    +

    Encodation schema

    +
    +

    Characters

    +
    +

    Bits per character

    +
    ASCII

    Double digit numerics

    +

    ASCII 0-127

    +

    Extended ASCII 128-255

    +

    4

    +

    8

    +

    16

    +
    C40Primarily upper-case alphanumeric5.33
    TextPrimarily lower-case alphanumeric5.33
    X12ANSI X12 EDI data set5.33
    EDIFACTASCII values 32-946
    Base 256All byte values 0-2558
    +


    +

    +
    +

    More on ECC Datamatrix subsets

    + +

    As was mentioned in the introduction there are two main subsets of Datamatrix + symbols. Those using convolutional codes for error correction which were used for + most of the initial installations of Datamatrix systems, these earlier versions are + referenced as ECC-000 to ECC-140 (the number specifies the level of convolutional + error correcting code).

    +

    This first subset will be commonly referred to as ECC-140 in the remainder of + this manual.

    +

    The second subset is referenced ECC-200 and uses Reed-Solomon error correction + techniques. The two subsets have the following characteristic:

    +

    +

    1. +

      ECC-000 to ECC-140 symbols all have an odd number of modules along + each square side.

      +
    2. +

      ECC-200 symbols have an even number of modules on each side. ECC-200 + can have non-square symbol sizes.

      +

    +

    +

    Hence the type of encoding used is auto-discriminative. The maximum data capacity + of an ECC-200 symbol is 3116 numeric digits, or 2335 alpha numeric characters, in + the largest 144 modules square symbol.

    +

    Even though the library supports the creation of both type of Datamatrix symbols + it is recommended that all new applications uses the more modern ECC-200 subset. + This is also the recommendation in the standard. ECC-140 should only be used in + legacy system where old equipment is used which have not be upgraded to handle the + modern ECC-200 subset.

    +
    +

    Symbology Data capacity

    + +

    As was mentioned in the previous section the actual data capacity depends on the + symbol size. By default the library will select the smallest possible symbol size + that will encode a given character string with the chosen encoding (possibly + automatic). Table 2 below gives the maximum capacity for the three most common + encoding schema for each symbol size as well as robustness in each symbol specified + as the number of errors (destroyed data) that can be recovered.

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 26.2. Maximum data capacity for the different symbol sizes in ECC-200 Data + Matrix subset.
    SizeNumeric capacityAlphanumeric capacityBinary capacityMax Correctable Error/Erasure
    10 x 106312
    12 x 1210633
    14 x 14161065/7
    16 x 162416106/9
    18 x 183625167/11
    20 x 204431209/15
    22 x 2260432810/17
    24 x 2472523412/21
    26 x 2688644214/25
    32 x 32124916018/33
    36 x 361721278421/39
    40 x 4022816911224/45
    44 x 4428821414228/53
    48 x 4834825917234/65
    52 x 5240830420242/78
    64 x 6456041827856/106
    72 x 7273655036672/132
    80 x 8091268245496/180
    88 x 881152862574112/212
    96 x 9613921042694136/260
    104 x 10416321222814168/318
    120 x 120210015731048204/390
    132 x 132260819541302248/472
    144 x 144311623351556310/590
    8 x 1810633
    8 x 32201385
    12 x 263222147/11
    12 x 364431209/15
    16 x 3664463012/21
    16 x 4898724714/25
    +

    +
    +
    + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch26s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch26s02.html new file mode 100755 index 00000000..02efb801 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch26s02.html @@ -0,0 +1,641 @@ +Creating barcodes

    Creating barcodes

    + +

    In order to use datamatrix barcodes the module + "datamatrix/datamatrix.inc.php" must first be included.

    +

    Usage of Datamatrix barcodes follows a similar schema as for the linear and PDF417 + barcodes with concepts of an encoder and backend. The principle of the overall + encodation process is shown in Figure 26.4. Datamatrix encodation principle

    +

    Figure 26.4. Datamatrix encodation principle

    + +
    Datamatrix encodation principle
    +

    +

    Getting started

    + +

    Assuming that the library is installed where it can be found by PHP it is now very + simple to create a basic Data Matrix symbol using just default values. We first show + the complete first example and then discuss it. In the following scripts we will + assume that the include path has the core JpGraph directory in its path.

    +

    All barcode creation follows the following basic three steps :

    +

    +

    1. +

      Create an instance of the encoder with the chosen datamatrix layout as + an instance of class Datamatrix

      +
    2. +

      Create an instance of a suitable backend for the chosen output format + (image or postscript) by calling the + DatamatrixBackenFactory::Create()

      +
    3. +

      Encode data and send it back to the browser or to a file with a call + to the backend Backend::Stroke() method.

      +

    +

    +

    The following script shows how to create the simplest possible barcode (in PNG + format) representing the data string "The first datamatrix" encoded + using all default values. The resulting barcode is shown in Figure 26.5. The simplest possible datamatrix script (datamatrix_ex00.php)

    +

    +

    Example 26.1. The simplest possible datamatrix script (datamatrix_ex00.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = 'The first datamatrix';
    + 
    +$encoder = DatamatrixFactory::Create();
    +$backend = DatamatrixBackendFactory::Create($encoder);
    +$backend->Stroke($data);
    +?>


    Figure 26.5. The simplest possible datamatrix script (datamatrix_ex00.php)

    The simplest possible datamatrix script (datamatrix_ex00.php)


    +

    +

    (As can be seen this follows the same principles as the creation of PDF417 + symbols)

    +

    The principle is the same for all type of data matrix symbol creations. We first + create an instance of the chosen encoder. In this case a standard ECC-200 encoder by + creating an instance of class Datamatrix. We then create a suitable + backend that handles the output of the barcode. By default the output will be an + image encoded in the PNG image format.

    +

    The final step is to send back the generated image to the browser with a call to + the method Backend::Stroke() with the data to be encoded as its first + argument.

    +

    The example above does not have any error handling. If there is some error in the + process an exception will be thrown in the same way as in other places in the + library. The default exception will display a standard library image error box. An + example of this is shown in Figure 26.6. Datamatrix error image.

    +

    Figure 26.6. Datamatrix error image

    + +
    Datamatrix error image
    +

    +

    If some additional processing is necessary and just display a text based + re-formatted error message we could change the above code to catch this exception as + the following example shows.

    +

    +

    Example 26.2. Datamatrix with basic error handling (datamatrix_ex0.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = 'The first datamatrix';
    +$encoder = DatamatrixFactory::Create();
    +$encoder->SetEncoding(ENCODING_ASCII);
    +$backend = DatamatrixBackendFactory::Create($encoder);
    + 
    +// We increase the module width to 3 pixels
    +$backend->SetModuleWidth(3);
    + 
    +try {
    +    $backend->Stroke($data);
    +} catch (Exception $e) {
    +    echo 'Datamatrix error: '.$e->GetMessage()."\n";
    +    exit(1);
    +}
    +?>


    Figure 26.7. Datamatrix with basic error handling (datamatrix_ex0.php)

    Datamatrix with basic error handling (datamatrix_ex0.php)


    +

    +

    In contrast to the PDF417 encodation process there is no option to select an level + of error correction. The error correction level is automatically specified in the + standard depending on the size of the barcode. As a final initial example the next + script uses the backend method Backend::SetModuleWidth($aWidth) to + increase the width of one module.

    +

    +

    Example 26.3. Datamatrix with modified module width (datamatrix_ex1.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = '123456';
    + 
    +$encoder = DatamatrixFactory::Create();
    +$backend = DatamatrixBackendFactory::Create($encoder);
    +$backend->SetModuleWidth(3);
    + 
    +// Create the barcode from the given data string and write to output file
    +try {
    +    $backend->Stroke($data);
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    echo "Datamatrix error message: $errstr\n";
    +}
    + 
    +?>


    Figure 26.8. Datamatrix with modified module width (datamatrix_ex1.php)

    Datamatrix with modified module width (datamatrix_ex1.php)


    +

    +
    +

    Error handling

    + +

    As in other parts of the library the Datamatrix module throws an exception when an + error occurs. As shown in the previous section an error image is the default if no + explicit try {} catch {} statement is added to the script.

    +

    The script below shows how to catch the error, do some possible clean up and then + explicitly create and send back the error image.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    <?php
    +...
    +try {
    +    $backend->Stroke($data);
    +} catch( Exception $e ) {
    +    doCleanup();
    +    $errobj = new DMErrObjectImg();
    +    $errobj->Raise($e->getMessage());    
    +}
    +?>

    +

    +

    another variant of this would be to re-throw the exception after the cleanup has + been performed as the following example shows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +...
    +try {
    +    $backend->Stroke($data);
    +} catch( Exception $e ) {
    +    doCleanup();
    +    throw $e;
    +}
    +?>

    +

    +

    It is also possible to get hold of the internal error code that corresponds to + each error message by calling the PHP standard exception method + Exception::getCode() as the following example shows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    <?php
    +...
    +try {
    +    $backend->Stroke($data);
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    $errcode = $e->GetCode();
    +    echo "Datamatrix error ($errcode). Message: $errstr\n";
    +}
    +?>

    +

    +

    Table 26.3. Datamatrix error messages lists the errors that can be + thrown by the datamatrix module (the table deliberately excludes internal error + messages).

    +

    +

    Table 26.3. Datamatrix error messages

    + +
    Error numberError messages
    -1Data is too long to fit specified symbol + size
    -2The BASE256 data is too long to fit + available symbol size
    -3Data must have at least three characters + for C40 encodation
    -4Data must have at least three characters + for TEXT encodation
    -8The given data can not be encoded using X12 + encodation.
    -9The "tilde" encoded data is not + valid.
    -10Data must have at least three characters + for X12 encodation
    -11Specified data can not be encoded with + datamatrix 000 140
    -12Can not create image
    -13Invalid color specification
    -15This PHP installation does not support the + chosen image encoding format
    -20The specification for shape of matrix is + out of bounds (0,29)
    -21Cannot open the data file specifying bit + placement for Datamatrix 200
    -22Datafile for bit placement is corrupt, crc + checks fails.
    -26Cannot open the data file specifying bit + placement for Datamatrix 140
    -30The symbol size specified for ECC140 type + Datamatrix is not valid
    -31Data is too long to fit into any available + matrix size for datamatrix 140
    -34Cannot open file %s for writing.
    -35Cannot write to file %s .
    -99EDIFACT encodation not implemented
    -100 +

    Datamatrix Error: HTTP headers have already been + sent.

    +

    Caused by output from file %s at line %d

    +

    Explanation: HTTP headers have already been sent back to + the browser indicating the data as text before the library + got a chance to send it's image HTTP header to this browser. + This makes it impossible for the Datamatrix library to send + back image data to the browser (since that would be + interpretated as text by the browser and show up as junk + text).

    +

    Most likely you have some text in your script before the + call to DatamatrixBackend::Stroke().

    +

    If this texts gets sent back to the browser the browser + will assume that all data is plain text. Look for any text + (even spaces and newlines) that might have been sent back to + the browser.

    +

    For example it is a common mistake to leave a blank line + before the opening "<?php"

    +
    +


    +

    +
    +

    Encodation options

    + +

    The primary encodation option is to manually specify the shape of the Datamatrix + barcode. By default the symbol size will be chosen as the smallest possible. However + some application require that usage of a fixed size symbol shape.

    +

    The available shapes are listed in Table 26.2. Maximum data capacity for the different symbol sizes in ECC-200 Data + Matrix subset.. The wanted shape is specified when + the instance of the encoder is created or by a call to + Datamatrix::SetSize(). The shape is specified by a symbolic + constant that corresponds to each available shape in Table 26.2. Maximum data capacity for the different symbol sizes in ECC-200 Data + Matrix subset.. The symbol name is + "DMAT_<H>x<W>" where <H> is the height (in + modules) and <W> is the width (in modules). For example the + following line specifies a 24 module square symbol

    +

    +

    1
    +
    $encoder->SetSize(DMAT_24x24);

    +

    +

    In addition to the sizes specified in Table 26.2. Maximum data capacity for the different symbol sizes in ECC-200 Data + Matrix subset. there is also an option to specify + automatic sizing (which is the default). The following script sets the sizing to be + automatic.

    +

    +

    1
    +
    $encoder->SetSize(DMAT_AUTO);

    +

    +

    As was discussed in Encodation efficiency there are + several ways by which data can be encoded. By default the encoder will use an + optimal algorithm to create a combination of the available encodation schema to + create the smallest possible symbol. In some application it might however be stated + that a specific encodation method should be chosen.

    +

    The encoding method is a property of the encodation class and is set with a call + to

    +

    +

    • +

      Datamatrix::SetEncoding($aEncoding=ENCODING_ASCII) +

      +

    +

    +

    The encoding is specified as one of the symbolic constants shown in Table 26.4. Datamatrix encodation schemas

    +

    Table 26.4. Datamatrix encodation schemas

    + +
    Symbolic constantEncoding schemaCharacter set
    ENCODING_AUTO--An optimal combination of all encodation schema
    ENCODING_ASCIIASCIIMost efficient for numeric data
    ENCODING_C40C40Primarily upper-case alphanumeric
    ENCODING_TEXTTextPrimarily lower-case alphanumeric
    ENCODING_X12X12ANSI X12 EDI data set
    ENCODING_EDIFACTEDIFACTASCII values 32-94
    ENCODING_BASE256Base 256All byte values 0-255
    +

    +

    The following example sets the ASCII encodation schema

    +

    +

    1
    +
    $encoder->SetEncoding(ENCODING_ASCII);

    +

    +

    The default automatic encoding is the same as

    +

    +

    1
    +
    $encoder->SetSize(ENCODING_AUTO);

    +

    +
    +

    Processing special input characters

    + +

    In order to allow the specification of special input data in normal ASCII + encodation for easy entering from a keyboard the library supports what is commonly + known as "tilde" processing. When this is enabled (it is disabled by default) + certain character sequences that begins with a tilde sign (i.e. "~") will be + translated to a special ASCII value that cannot normally be entered from a + keyboard.

    +

    When tilde mode is enabled with a call to the method

    +

    +

    • +

      Datamatrix::SetTilde($aFlg=true)

      +

    +

    +

    Table 26.5. Tilde processing translating lists the translations + that will then be enabled on the input data. Some of the translations are technical + and requires full understanding of Datamatrix standard to be used.

    +

    Table 26.5. Tilde processing translating

    + +
    Input sequenceTranslation
    ~X : where 'X' is a character in the range [@-Z]Translates to ASCII value 0-25, i.e. ~@==0, ~A==1, ~B==2 , + ...
    ~1Represents the character FNC1. Alternate Data Type Identifier. + See Table 6: ISO 16022
    ~2nnmmfffggg +

    Structured Append. This code is only allowed in the first + position of the data. Up to 16 ECC 200 symbols may be appended + in a structured format. The structured append is specified with + symbol index, total number of symbols and a file identification.

    +

    The first two values "nn" is the position of this particular + symbol specified as two digits in the range of 01-16.

    +

    The second two values "mm" is the total number of symbols in + this structured append in the range 02-16 specified as two + digits.

    +

    The last two 3 digit codewords are the file identification + specified with digits and necessary leading 0:s to make it a + full three digits. For example. Assume that we want to encode + the 4:th symbol from a total of 9 symbols and with the file + identification "0,1". This would then be encoded as + "~20409000001". Note: Internally this is translated to three + codewords with the reserved starting codeword of ASCII + 233.

    +
    ~5 and ~6 +

    The special 05 and 06 Macros. Can only be in the first + position and is used to encode industry standard headers in + certain structured formats.

    +

    Macro 05 is translated by the barcode reader to : Symbol + prefix: chr(30) chr(05) chr(29) Symbol postfix: chr(30) chr(04) + Macro 06 is translated by the barcode reader to : Symbol prefix: + chr(30) chr(06) chr(29 Symbol postfix: chr(30) chr(04)

    +
    ~7nnnnnn +

    Extended Channel Interpretation (ECI) nnnnnn.

    +

    The ECI protocol allows the output data stream to have + interpretations different from that of the default character + set. See "Extended Channel + Interpretation Assignments" document (available + from ISO) for a list of channels and there meaning.

    +

    The ECI is identified by a 6-digit number which is encoded + according to Table 10: in the ISO 16022:2000 specification. This + is the encodation that is used for the "~7" tilde specification + of the ECI protocol.

    +
    ~9 +

    Send the special control code (ASCII=234) so that the reader + will interpret the rest of the symbol as a bar code reader + programming instruction.

    +
    ~dnnn +

    Character value as 3 digits, i.e. ~d142 means ASCII value + 142

    +
    +

    +
    +

    Creating different backends

    + +

    In order to create the actual output one or more backends must be created. The + Datamatrix supports the following backends:

    +

    +

    • +

      BACKEND_IMAGE, Create an image backend. This is the + default backend if no explicit backend is specified.

      +
    • +

      BACKEND_PS, Create a postscript backend. The text string + that represents the postscript for the barcode is returned directly from + the Backend::Stroke()

      +
    • +

      BACKEND_EPS, Create an encapsulated postscript + backend

      +
    • +

      BACKEND_ASCII, This is a special backend which will + generate an ASCII rendering of the datamatrix barcode. This is mostly + practical for technical investigations regarding the technical structure + of a Datamatrix barcode.

      +

    +

    +

    The following code snippet shows two ways of creating a barcode image + backend.

    +

    +

    1
    +2
    +
    // Create an image backend
    +$backend = DatamatrixBackendFactory::Create($encoder);

    +

    +

    +

    1
    +2
    +
    // Create an image backend
    +$backend = DatamatrixBackendFactory::Create($encoder, BACKEND_IMAGE);

    +

    +

    The following code shows a complete script to generate a postscript output

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    +$data = '0123456789';
    + 
    +// Create and set parameters for the encoder
    +$encoder = DatamatrixFactory::Create();
    + 
    +// Create the image backend (default)
    +$backend = DatamatrixBackendFactory::Create($encoder, BACKEND_PS);
    +try {
    +    $ps_txt = $backend->Stroke($data);
    +    echo '<pre>'.$ps_txt.'</pre>';
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    echo "Datamatrix error message: $errstr\n";
    +}
    +?>

    +

    +
    +

    Generic backend methods

    + +

    The following methods are available to adjust the final look and feel of the + barcode

    +

    +

    1. +

      Backend::SetColor($aOne, $aZero, + $aBackground='white')

      +

      the color of the 'black' and 'white' modules in the barcode and the + quiet area around the barcode

      +
    2. +

      Backend::SetQuietZone($aSize)

      +

      the size of the "quiet zone" in pixels for the image backend and in + points (1 pt = 1/72 inch) for the postscript backend

      +
    3. +

      Backend::SetModuleWidth($aWidth)

      +

      the module width specified in pixels for the image backend and in + points (1 pt = 1/72 inch) for the postscript backend

      +
    4. +

      Backend::Stroke($aData, $aFileName='')

      +

      create the barcode and send it back the client or store it to a file + if the second parameter is set. For postscript backends the postscript + string is returned directly from the method. (See example above)

      +

    +

    +
    +

    Image backend methods

    + +

    For the image backend it is possible to adjust the image encoding format with the + following method

    +

    +

    1. +

      Backend::SetImgFormat($aFormat,$aQuality=75)

      +

      Specify image format. Possible values are

      +

      +

      • +

        'auto'

        +
      • +

        'png'

        +
      • +

        'jpeg'

        +
      • +

        'gif'

        +

      +

      +

      For 'jpeg' format the quality parameter is a number in range [1-100] + and specified how much compression / (Data loss) should be used. 100=no + compression. Normal values are in the range [60-95]

      +

      The following example sets the image format to 'JPEG' with quality + 80.

      +

      +

      1
      +
      $backend->SetImgFormat('jpeg', 80);

      +

      +

    +

    +
    +

    Postscript backend format options

    + +

    For postscript backend it is possible to select whether the postscript should be + generated as encapsulated postscript. This is controlled by the method

    +

    +

    • +

      Backend::SetEPS($aFlg=true)

      +

    +

    +
    +

    A template to create barcodes

    + +

    In the example directory in the distribution + ('datamatrix/examples') you can find many more examples on + how to create barcodes. As a good start the following (simple) template may be used + as a base for further customizations.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = '0123456789';
    + 
    +$shape       = DMAT_AUTO;
    +$encoding    = ENCODING_AUTO;
    +$modulewidth = 3;
    +$quietzone   = 10;
    +$color1      = 'black';
    +$color0      = 'white';
    +$colorq      = 'white';
    +$outputfile  = '';
    + 
    +// Create and set parameters for the encoder
    +$encoder = DatamatrixFactory::Create($shape);
    +$encoder->SetEncoding($encoding);
    + 
    +// Create the image backend (default)
    +$backend = DatamatrixBackendFactory::Create($encoder);
    + 
    +// By default the module width is 2 pixel so we increase it a bit
    +$backend->SetModuleWidth($modulewidth);
    + 
    +// Set Quiet zone
    +$backend->SetQuietZone($quietzone);
    + 
    +// Set other than default colors (one, zero, quiet zone/background)
    +$backend->SetColor($color1, $color0, $colorq);
    + 
    +// Create the barcode from the given data string and write to output file
    +try {
    +    $backend->Stroke($data,$outputfile);
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    echo "Datamatrix error message: $errstr\n";
    +}
    +?>

    +

    +
    +

    Sample application

    + +

    As an example the library includes a WEB-based demo barcode creation application. + This application can be used to easily create barcode through it's WEB interface. It + is available at 'datamatrix/demoapp/index.html'

    +

    This application is primarily included as a demo on the features available in the + library and not as a finalized product.

    +

    Figure 26.9. Datamatrix WEB-based demo application shows a screen shot of the + application interface.

    +

    Figure 26.9. Datamatrix WEB-based demo application

    + +
    Datamatrix WEB-based demo application
    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch26s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch26s03.html new file mode 100755 index 00000000..ebac77bb --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch26s03.html @@ -0,0 +1,263 @@ +Example script

    Example script

    + +

    Example 1 - Setting the shape

    + +

    The following example shows how to

    +

    +

    • +

      Set the shape to 64x64

      +
    • +

      Use ASCII encoding

      +
    • +

      Adjust the quiet zone

      +

    +

    +

    +

    Example 26.4. Datamatrix example, setting quiet zone and ASCII encoding (datamatrix_ex4.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = 'This is a 64x64 datamatrix symbol';
    + 
    +// Create and set parameters for the encoder
    +$encoder = DatamatrixFactory::Create(DMAT_64x64);
    +$encoder->SetEncoding(ENCODING_TEXT);
    + 
    +// Create the image backend (default)
    +$backend = DatamatrixBackendFactory::Create($encoder);
    +$backend->SetModuleWidth(3);
    + 
    +// Adjust the Quiet zone
    +$backend->SetQuietZone(10);
    + 
    +// Create the barcode from the given data string and write to output file
    +try {
    +    $backend->Stroke($data);
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    echo "Datamatrix error message: $errstr\n";
    +}
    + 
    +?>


    Figure 26.10. Datamatrix example, setting quiet zone and ASCII encoding (datamatrix_ex4.php)

    Datamatrix example, setting quiet zone and ASCII encoding (datamatrix_ex4.php)


    +

    +
    +

    Example 2 - Writing to a file

    + +

    The following example shows how to generate a barcode and write it to a + file.

    +

    +

    Example 26.5. Datamatrix example, writing to a file (datamatrix_ex6.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = 'This is a datamatrix symbol';
    + 
    +$outputfile = 'dm_ex6.png';
    + 
    +// Create and set parameters for the encoder
    +$encoder = DatamatrixFactory::Create();
    +$encoder->SetEncoding(ENCODING_TEXT);
    + 
    +// Create the image backend (default)
    +$backend = DatamatrixBackendFactory::Create($encoder);
    +$backend->SetModuleWidth(5);
    +$backend->SetQuietZone(10);
    + 
    +// Set other than default colors (one, zero, background)
    +$backend->SetColor('navy','white');
    + 
    +// Create the barcode from the given data string and write to output file
    +$dir = dirname(__FILE__);
    +$file = '<span style="font-weight:bold;">"'.$dir.'/'.$outputfile.'"</span>';
    +try {
    +    $backend->Stroke($data,$outputfile);
    +    echo 'Barcode sucessfully written to file: '.$file;
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    $errcode = $e->GetCode();
    +    echo "Failed writing file: ".$file.'<br>';
    +    echo "Datamatrix error ($errcode). Message: $errstr\n";
    +}
    + 
    +?>


    +

    +
    +

    Example 3 - Creating postscript output

    + +

    The following example shows hot to generate a postscript output.

    +

    When

    +

    +

    Example 26.6. Datamatrix example, creating postscript output (datamatrix_ex7.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = 'A Datamatrix barcode';
    + 
    +// Create and set parameters for the encoder
    +$encoder = DatamatrixFactory::Create();
    +$encoder->SetEncoding(ENCODING_BASE256);
    + 
    +// Create the image backend (default)
    +$backend = DatamatrixBackendFactory::Create($encoder, BACKEND_ASCII);
    +$backend->SetModuleWidth(3);
    + 
    +try {
    +    $ps_txt = $backend->Stroke($data);
    +    echo '<pre>'.$ps_txt.'</pre>';
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    echo "Datamatrix error message: $errstr\n";
    +}
    + 
    +?>


    +

    +

    The resulting output is shown in Figure 26.11. Datamatrix postscript output below

    +

    Figure 26.11. Datamatrix postscript output

    + +
    Datamatrix postscript output
    +

    +
    +

    Example 4 - Changing background color

    + +

    The following example shows how to modify the colors in the barcode.

    +

    +

    Example 26.7. Datamatrix example, changing colors (datamatrix_ex5.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = 'This is a 20x20 symbol';
    + 
    +// Create and set parameters for the encoder
    +$encoder = DatamatrixFactory::Create(DMAT_20x20);
    +$encoder->SetEncoding(ENCODING_TEXT);
    + 
    +// Create the image backend (default)
    +$backend = DatamatrixBackendFactory::Create($encoder);
    + 
    +// By default the module width is 2 pixel so we increase it a bit
    +$backend->SetModuleWidth(4);
    + 
    +// Set Quiet zone
    +$backend->SetQuietZone(10);
    + 
    +// Set other than default colors (one, zero, quiet zone/background)
    +$backend->SetColor('navy','white','lightgray');
    + 
    +// Create the barcode from the given data string and write to output file
    +try {
    +    $backend->Stroke($data);
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    echo "Datamatrix error message: $errstr\n";
    +}
    + 
    +?>


    Figure 26.12. Datamatrix example, changing colors (datamatrix_ex5.php)

    Datamatrix example, changing colors (datamatrix_ex5.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch27.html b/Societes/ric/jpgraph/docs/chunkhtml/ch27.html new file mode 100755 index 00000000..d99ce807 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch27.html @@ -0,0 +1,1621 @@ +Chapter 27. QR (2D-Barcode)

    Chapter 27. QR (2D-Barcode)

    + +

    Principle of QR Barcodes

    + +

    Note

    This module is only available in the pro-version of the library.

    +

    QR is currently the highest capacity general two-dimensional matrix symbology + available (up to ~7Kb numeric data can be encoded) and it is designed to encode the full + 256 byte ASCII character set as well as the Kanji (Shift-JIS character set). QR code + belongs to the modern 2 dimensional codes that is designed for both high capacity as + well as to be efficient for scanner equipment to process and this is also the reason for + its name - Quick Response code.

    +

    An advantage with QR code is also there relatively small size for a given amount of + information

    +

    The QR code is available in 40 different square sizes each with a user selectable + error correction level in four steps (referred to as error correction level L,M,Q and + H). With the highest level of error correction used up to ~30% of the codewords can be + damaged and still be restored.

    +

    QR code is extensively used in some Asian countries and is finding more an more usage + to transfer medium sized information onto mobile phones where the QR codes are + interpretated by first taking a photo of the barcode with the mobile and then running a + QR decoding program on the cell phone. This has currently become the most expansive + usage of QR codes and some mobile manufactures are providing software to aid in + interpreting QR codes for free.

    +

    +

    Note

    +

    QR codes are also finding there way into public information sharing. For + example in Texas in US some cities are using QR codes to display public + information.

    +

    +

    +

    +

    Note

    +

    QR Codes can be freely used without royalties. QR Codes are copyrighted + by:

    +

    + DENSO WAVE NCORPORATED.

    +

    +

    +

    In Figure 27.1. QR Code high level structure we have amended a large version of + a basic QR code. In this figure the special finding patterns and timing patterns have + been highlighted in red and blue.

    +

    Figure 27.1. QR Code high level structure

    + +
    QR Code high level structure
    +

    +

    The images below shows some real-life creative use of QR barcodes.

    +

    +

    Figure 27.2. Creative usage of QR Barcodes

    + +
    +
    Creative usage of QR BarcodesCreative usage of QR BarcodesCreative usage of QR Barcodes
    +
    +


    +

    +

    Summary of library features

    + +

    +

    • +

      Output format

      +

      +

      1. +

        Image format

        +
      2. +

        Postscript and encapsulated postscript

        +
      3. +

        ASCII

        +

      +

      +
    • +

      Encodation formats

      +

      +

      1. +

        Numeric

        +
      2. +

        Alphanumeric

        +
      3. +

        Binary

        +

      +

      +
    • +

      Supports all specified symbol sizes

      +
    • +

      Supports both auto and user selectable encodation

      +
    • +

      Supports both auto and user selectable symbol size

      +
    • +

      Supports user specified module size

      +
    • +

      Supports custom color specification (foreground, background)

      +
    • +

      Symbols can be written directly to a file or sent back as an image to + the browser

      +

    +

    +
    +

    Limitation in the JpGraph QR implementation

    + +

    This implementation is a faithful implementation of the ISO/IEC 18004E + International Standard with one important exception. Version 1.0 does not support + the encoding of 2 byte Shift-JIS character set. This means that two byte Kanji can + only be encoded using binary data format which is less efficient than the native + Kanji encoding.

    +

    +

    Caution

    +

    The computational complexity of the encodation process makes QR code + generation slightly slower than both PDF417 and Datamatrix. The technical + reason for most of the time is the final necessary evaluation of a bitmap + mask which is chosen to give as close to 50% mix of black and white areas in + the code as possible. Unfortunately this evaluation take time proportional + to the square of the size of the matrix. This time can be noticeable when + using "large" symbol sizes. There are existing QR code libraries that cheat + on this final step and just randomly selects a bit mask to avoid this + computational intensive evaluation. This is also the cause for the visual + difference between this libraries final result and some other.

    +

    In this case we claim that this library implements the proper standard + much more faithfully than some other libraries that exists.

    +

    +

    +
    +

    QR Standard

    + +

    The QR code standard is fully described in the ISO/IEC 18004E International + Standard and is available for purchase from the ISO Standard Organization. for a nominal fee.

    +
    +

    Structure and capacity of QR barcodes

    + +

    All QR barcode have square layout made up of equal spaced square modules. + Depending on the size of the QR code a certain number of finder patterns are + included in the code to aid in scanner decoding. The standard specifies 40 versions + (sizes) of the QR code from the smallest 21x21 up to 177x177 modules in size.

    +

    Examples of two basic QR codes are shown in Figure 27.3. A small sized QR Code (version=2) and Figure 27.4. A medium sized QR code (version=13)

    +

    +

    +
    +

    Figure 27.3. A small sized QR Code (version=2)

    + +
    A small sized QR Code (version=2)
    +

    +
    +

    Figure 27.4. A medium sized QR code (version=13)

    + +
    A medium sized QR code (version=13)
    +

    +
    +

    +

    +

    Depending on the actual data there are several compaction schema that can be used + in order to achieve the greatest possible compression. The standard specifies four + different principal schema, Numeric, Alphanumeric, Binary and Kanji.

    +

    Depending on the application the user of the library may chose to either select a + fixed encodation mode or let the library automatically chose the most efficient + encodation method. It is usually best to let the library automatically select a + combination of encodation schema that will give the smallest possible symbol size.

    +

    The maximum capacity for QR codes dependent on the encodation schema (using the + lowest possible error correction overhead) are given in Table 27.1. QR Data capacity

    +

    +

    Table 27.1. QR Data capacity

    + +
    Encoding modeMaximum capacity
    Numeric7089 digits (Datamatrix=3116)
    Alphanumeric4296 characters (Datamatrix=2335)
    Binary2953 (Datamatrix=1555)
    Kanji1817 (Datamatrix NA)
    +


    +

    +

    The exact number of characters that can fit in a QR symbol depends on the actual + encoding (or compaction) schema used. In short this is used to more efficiently + encode ASCII characters to fit more data into a fixed number of bytes. For example + if only numeric data is to be encoded then instead of using one byte to hold each + digit three digits is stored in 10 bits. Which gives the equivalent capacity that 12 + digits takes only 5 bytes to encode.

    +

    To encode data into a QR symbol the following principal steps are taken.

    +

    +

    1. +

      The input string (which can be any ASCII values between 0-255) is + encoded using the selected encoding or encodings (it is possible to + switch encoding mid-way through the string). The primary purpose of the + encoding is to compress the data into a much shorter form.

      +
    2. +

      If needed the data is padded to fill up to the capacity of the + selected symbol size.

      +
    3. +

      Once the string has been encoded (and possible padded) a number of + error correcting code words are added so that the data can be recovered + even if part of the printed symbol have been destroyed (perhaps a corner + has been teared off).

      +
    4. +

      Finally the encoded data and the error correcting words are placed in + the symbol according to an algorithm specified in the standard. This is + done by placing each bit of every data byte in a specific position in + the qr matrix symbol.

      +

    +

    +

    The above explanation is by necessity simplified and for those interested into the + specific details we refer to the official standard. It is also possible to review + the code itself to understand the details.

    +
    +

    QR versions and symbol size

    + +

    As mentioned in the previous section the QR standard specifies 40 different sizes + of the QR code and the maximum data capacity will also vary depending on the size. + Table 27.2. Maximum data capacity for the + different symbol sizes in the QR-code. shows the defined sizes and for each + size specifies the possible Error correction levels and the maximum data capacity + depending on the compaction schema used.

    +

    By default the symbol size will be chosen as the smallest possible. However some + application require that usage of a fixed size symbol. The symbol size is a + parameter of the encodation schema and is adjusted in the creation of the + QREncoder. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 27.2. Maximum data capacity for the + different symbol sizes in the QR-code.
    VersionModulesECC LevelData bitsNumericAlphanumericBinaryKanji
    121x21L15241251710
    M1283420148
    Q1042716117
    H72171074
    2 25x25 L 272 77 47 32 20
    M 224 63 38 26 16
    Q 176 48 29 20 12
    H 128 34 20 14 8
    329x29L440127775332
    M352101614226
    Q27277473220
    H20858352415
    4 33x33 L 640 187 114 78 48
    M 512 149 90 62 38
    Q 384 111 67 46 28
    H 288 82 50 34 21
    537x37L86425515410665
    M6882021228452
    Q496144876037
    H368106644427
    6 41x41 L 1,088 322 195 134 82
    M 864 255 154 106 65
    Q 608 178 108 74 45
    H 480 139 84 58 36
    745x45L1,24837022415495
    M99229317812275
    Q7042071258653
    H528154936439
    8 49x49 L 1,552 461 279 192 118
    M 1,232 365 221 152 93
    Q 880 259 157 108 66
    H 688 202 122 84 52
    953x53L1,856552335230141
    M1,456432262180111
    Q1,05631218913080
    H8002351439860
    10 57x57 L 2,192 652 395 271 167
    M 1,728 513 311 213 131
    Q 1,232 364 221 151 93
    H 976 288 174 119 74
    1161x61L2,592772468321198
    M2,032604366251155
    Q1,440427259177109
    H1,12033120013785
    12 65x65 L 2,960 883 535 367 226
    M 2,320 691 419 287 177
    Q 1,648 489 296 203 125
    H 1,264 374 227 155 96
    1369x69L3,4241,022619425262
    M2,672796483331204
    Q1,952580352241149
    H1,440427259177109
    14 73x73 L 3,688 1,101 667 458 282
    M 2,920 871 528 362 223
    Q 2,088 621 376 258 159
    H 1,576 468 283 194 120
    1577x77L4,1841,250758520320
    M3,320991600412254
    Q2,360703426292180
    H1,784530321220136
    16 81x81 L 4,712 1,408 854 586 361
    M 3,624 1,082 656 450 277
    Q 2,600 775 470 322 198
    H 2,024 602 365 250 154
    1785x85L5,1761,548938644397
    M4,0561,212734504310
    Q2,936876531364224
    H2,264674408280173
    18 89x89 L 5,768 1,725 1,046 718 442
    M 4,504 1,346 816 560 345
    Q 3,176 948 574 394 243
    H 2,504 746 452 310 191
    1993x93L6,3601,9031,153792488
    M5,0161,500909624384
    Q3,5601,063644442272
    H2,728813493338208
    20 97x97 L 6,888 2,061 1,249 858 528
    M 5,352 1,600 970 666 410
    Q 3,880 1,159 702 482 297
    H 3,080 919 557 382 235
    21101x101L7,4562,2321,352929572
    M5,7121,7081,035711438
    Q4,0961,224742509314
    H3,248969587403248
    22 105x105 L 8,048 2,409 1,460 1,003 618
    M 6,256 1,872 1,134 779 480
    Q 4,544 1,358 823 565 348
    H 3,536 1,056 640 439 270
    23109x109L8,7522,6201,5881,091672
    M6,8802,0591,248857528
    Q4,9121,468890611376
    H3,7121,108672461284
    24 113x113 L 9,392 2,812 1,704 1,171 721
    M 7,312 2,188 1,326 911 561
    Q 5,312 1,588 963 661 407
    H 4,112 1,228 744 511 315
    25117x117L10,2083,0571,8531,273784
    M8,0002,3951,451997614
    Q5,7441,7181,041715440
    H4,3041,286779535330
    26 121x121 L 10,960 3,283 1,990 1,367 842
    M 8,496 2,544 1,542 1,059 652
    Q 6,032 1,804 1,094 751 462
    H 4,768 1,425 864 593 365
    27125x125L11,7443,5142,1321,465902
    M9,0242,7011,6371,125692
    Q6,4641,9331,172805496
    H5,0241,501910625385
    28 129x129 L 12,248 3,669 2,223 1,528 940
    M 9,544 2,857 1,732 1,190 732
    Q 6,968 2,085 1,263 868 534
    H 5,288 1,581 958 658 405
    29133x133L13,0483,9092,3691,6281,002
    M10,1363,0351,8391,264778
    Q7,2882,1811,322908559
    H5,6081,6771,016698430
    30 137x137 L 13,880 4,158 2,520 1,732 1,066
    M 10,984 3,289 1,994 1,370 843
    Q 7,880 2,358 1,429 982 604
    H 5,960 1,782 1,080 742 457
    31141x141L14,7444,4172,6771,8401132
    M11,6403,4862,1131,452894
    Q8,2642,4731,4991,030634
    H6,3441,8971,150790486
    32 145x145 L 15,640 4,686 2,840 1,952 1,201
    M 12,328 3,693 2,238 1,538 947
    Q 8,920 2,670 1,618 1,112 684
    H 6,760 2,022 1,226 842 518
    33149x149L16,5684,9653,0092,0681,273
    M13,0483,9092,3691,6281,002
    Q9,3682,8051,7001,168719
    H7,2082,1571,307898553
    34 153x153 L 17,528 5,253 3,183 2,188 1,347
    M 13,800 4,134 2,506 1,722 1,060
    Q 9,848 2,949 1,787 1,228 756
    H 7,688 2,301 1,394 958 590
    35157x157L18,4485,5293,3512,3031,417
    M14,4964,3432,6321,8091,113
    Q10,2883,0811,8671,283790
    H7,8882,3611,431983605
    36 161x161 L 19,472 5,836 3,537 2,431 1,496
    M 15,312 4,588 2,780 1,911 1,176
    Q 10,832 3,244 1,966 1,351 832
    H 8,432 2,524 1,530 1,051 647
    37165x165L20,5286,1533,7292,5631,577
    M15,9364,7752,8941,9891,224
    Q11,4083,4172,0711,423876
    H8,7682,6251,5911,093673
    38 169x169 L 21,616 6,479 3,927 2,699 1,661
    M 16,816 5,039 3,054 2,099 1,292
    Q 12,016 3,599 2,181 1,499 923
    H 9,136 2,735 1,658 1,139 701
    39173x173L22,4966,7434,0872,8091,729
    M17,7285,3133,2202,2131,362
    Q12,6563,7912,2981,579972
    H9,7762,9271,7741,219750
    40 177x177 L 23,648 7,089 4,296 2,953 1,817
    M 18,672 5,596 3,391 2,331 1,435
    Q 13,328 3,993 2,420 1,663 1,024
    H 10,208 3,057 1,852 1,273 784
    +
    +

    Error correction level

    + +

    As shown in Table 27.2. Maximum data capacity for the + different symbol sizes in the QR-code. the QR standard specifies + four different error correction levels. In the library the error correction can + either be set to be chosen automatically or specified manually. The properties of + the available error correction levels are given in Table 27.3. QR Error correction levels. The "Error correction capacity" column specifies how large percentage of + the codewords that can be destroyed and the code still being decoded.

    +

    +

    Table 27.3. QR Error correction levels

    + +
    Error levelSymbolic constantError correction capacity
    LQRCapacity::ErrL5 %
    MQRCapacity::ErrM15 %
    QQRCapacity::ErrQ25 %
    HQRCapacity::ErrH30 %
    +


    +

    +
    +

    Comparing the visual output with other QR-generating software

    + +

    It is possible that the JpGraph library gives a visually different result than + some other available QR encoders. As a matter of fact many QR encoders gives a + different visual result from the same input. This does not mean that one QR encoder + is more correct than any other. This is a consequence of interpretation of the + standard in a way that (without going into technical details) does not in any way + affect the decoding of the barcode. It only affects the visual appearance.

    +
    +
    + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch27s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch27s02.html new file mode 100755 index 00000000..e6933f76 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch27s02.html @@ -0,0 +1,796 @@ +Creating barcodes

    Creating barcodes

    + +

    In order to use QR codes the module "QR/qrencoder.inc.php" must + first be included.

    +

    Usage of QR codes follows a similar schema as for the linear, PDF417 and Datamatrix + barcodes with the concepts of an encoder and backend. The principle of the overall + encodation process is shown in Figure 26.4. Datamatrix encodation principle

    +

    Figure 27.5. QR Encodation Process

    + +
    QR Encodation Process
    +

    +

    Getting started

    + +

    In order to use the QR barcodes the library module + "QR/qrencoder.inc.php" must first be included in the + script.

    +

    +

    1. +

      Create an instance of the encoder and optionally specify size and + error correction level. The encoder is created as an instance of + class QREncoder

      +
    2. +

      Create an instance of a suitable backend for the chosen output format + (image or postscript) by calling the + DatamatrixBackenFactory::Create()

      +
    3. +

      Encode data and send it back to the browser or to a file with a call + to the backend Backend::Stroke() method.

      +

    +

    +

    The following script shows how to create the simplest possible QR code (in PNG + format) representing the data string "The first QR code" encoded using + all default values. The resulting QR Code is shown in Figure 27.6. The first very basic QR code (qrexample00.php)

    +

    +

    Example 27.1. The first very basic QR code (qrexample00.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +
    <?php
    +require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +// Data to be encoded
    +$data = '01234567';
    + 
    +// Create a new instance of the encoder and let the library
    +// decide a suitable QR version and error level
    +$e=new QREncoder();
    + 
    +// Use the image backend (this is also the default)
    +$b=QRCodeBackendFactory::Create($e);
    + 
    +// .. send the barcode back to the browser for the data
    +$b->Stroke($data);
    +?>


    Figure 27.6. The first very basic QR code (qrexample00.php)

    The first very basic QR code (qrexample00.php)


    +

    +

    (As can be seen this follows the same principles as the creation of Datamatrix + symbols)

    +

    The principle is the same for all type of data QR code creations. First an + instance of the chosen encoder is instantiated. In this case using all default + parameters by creating an instance of class QREncoder. We then create a + suitable backend that handles the output of the barcode. By default the output will + be an image encoded in the PNG image format.

    +

    The final step is to send back the generated image to the browser with a call to + the method Backend::Stroke() with the data to be encoded as its first + argument.

    +

    The example above does not have any error handling. If there is some error in the + process an exception will be thrown in the same way as in other places in the + library. The default exception will display a standard library image error box. An + example of this is shown in Figure 27.7. QR Error message

    +

    Figure 27.7. QR Error message

    + +
    QR Error message
    +

    +

    If some additional processing is necessary and to just display a text based + re-formatted error message we could change the above code to catch this exception as + the following example shows.

    +

    +

    Example 27.2. Adding basic exception handling (qrexample0.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +
    <?php
    +require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +// Data to be encoded
    +$data = '01234567';
    + 
    +// Create a new instance of the encoder and let the library
    +// decide a suitable QR version and error level
    +$encoder = new QREncoder(1);
    + 
    +// Use the image backend (this is also the default)
    +$backend = QRCodeBackendFactory::Create($encoder);
    + 
    +try {
    +    //     . send the QR Code back to the browser
    +    $backend->Stroke($data);
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    echo 'QR Code error: '.$e->GetMessage()."\n";
    +    exit(1);
    +}
    + 
    +?>


    Figure 27.8. Adding basic exception handling (qrexample0.php)

    Adding basic exception handling (qrexample0.php)


    +

    +

    As a final initial example the next script uses the backend method + Backend::SetModuleWidth($aWidth) to increase the size of one + module. Since a module in QR code refers to the smallest square used adjusting the + module width will also adjust the height of the overall QR code

    +

    +

    Example 27.3. Adjusting the module width for the QR code (qrexample01.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    <?php
    +require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +// Data to be encoded
    +$data = '01234567';
    + 
    +// Create a new instance of the encoder and let the library
    +// decide a suitable QR version and error level
    +$encoder = new QREncoder();
    + 
    +// Use the image backend
    +$backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +// Set the module size (quite big)
    +$backend->SetModuleWidth(5);
    + 
    +// .. send the barcode back to the browser for the data
    +$backend->Stroke($data);
    +?>


    Figure 27.9. Adjusting the module width for the QR code (qrexample01.php)

    Adjusting the module width for the QR code (qrexample01.php)


    +

    +
    +

    Error handling

    + +

    As in other parts of the library the QR module throws an exception when an error + occurs. As shown in the previous section an error image is the default if no + explicit try {} catch {} statement is added to the script.

    +

    +

    Note

    +

    The fact that an image is shown as the default exception is caused by the + library module "qrexception.inc.php" installing its own default error + handler which will be called when an exception happens. However, this + handler is intelligent enough to know if the exception is caused by the + library or not. If the exception is not caused by the library the exception + is re-thrown and the original error handler restored. This means that + JpGraph will not interfere with previously installed error handlers for + other parts of an application.

    +

    +

    +

    The script below shows how to catch the error, do some possible clean up and then + explicitly create and send back the error image.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    <?php
    +...
    +try {
    +    $backend->Stroke($data);
    +} catch( Exception $e ) {
    +    doCleanup();
    +    $errobj = new QRErrObjectImg();
    +    $errobj->Raise($e->getMessage());    
    +}
    +?>

    +

    +

    another variant of this would be to re-throw the exception after the cleanup has + been performed as the following example shows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +...
    +try {
    +    $backend->Stroke($data);
    +} catch( Exception $e ) {
    +    doCleanup();
    +    throw $e;
    +}
    +?>

    +

    +

    It is also possible to get hold of the internal error code that corresponds to + each error message by calling the PHP standard exception method + Exception::getCode() as the following example shows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    <?php
    +...
    +try {
    +    $backend->Stroke($data);
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    $errcode = $e->GetCode();
    +    echo "QR error ($errcode). Message: $errstr\n";
    +}
    +?>

    +

    +

    Table 27.4. QR Error messages lists the public errors that can be + thrown by the QR code module (the table deliberately excludes internal error + messages)

    +

    Table 27.4. QR Error messages

    + +
    Error numberError string
    1000 +

    Tilde processing is not yet supported for QR Barcodes.

    +
    1001 +

    Inverting the bit pattern is not supported for QR + Barcodes.

    +
    1002 +

    Cannot read data from file %s

    +
    1003 +

    Cannot open file %s

    +
    1004 +

    Cannot write QR barcode to file %s

    +
    1005 +

    Unsupported image format selected. Check your GD + installation

    +
    1006 +

    Cannot set the selected barcode colors. Check your GD + installation and spelling of color name

    +
    1007 +

    QR Error: HTTP headers have already been sent.

    +

    Caused by output from file %s at line %d

    +

    Explanation: HTTP headers have already been sent back to the + browser indicating the data as text before the library got a + chance to send it's image HTTP header to this browser. This + makes it impossible for the QR library to send back image data + to the browser (since that would be interpretated as text by the + browser and show up as junk text).

    +

    Most likely you have some text in your script before the call + to QRBackend::Stroke().

    +

    If this texts gets sent back to the browser the browser will + assume that all data is plain text. Look for any text (even + spaces and newlines) that might have been sent back to the + browser.

    +

    For example it is a common mistake to leave a blank line + before the opening "<?php"

    +
    1008 +

    Could not create the barcode image with image format=%s. Check + your GD/PHP installation.

    +
    1009 +

    Cannot open log file %s for writing.

    +
    1010 +

    Cannot write log info to log file %s.

    +
    1011 +

    Could not write the QR Code to file. Check the file system + permissions.

    +
    1400 +

    QR Version must be specified as a value in the range [1,40] + got %d

    +
    1401 +

    Input data to barcode can not be empty.

    +
    1402 +

    Automatic encodation mode was specified but input data looks + like specification for manual encodation.

    +
    1403 +

    Was expecting an array of arrays as input data for manual + encoding.

    +
    1404 +

    Each input data array element must consist of two entries. + Element $i has of $nn entries

    +
    1405 +

    Each input data array element must consist of two entries with + first entry being the encodation constant and the second element + the data string. Element %d is incorrect in this respect.

    +
    1406 +

    Was expecting either a string or an array as input data

    +
    1407 +

    Manual encodation mode was specified but input data looks like + specification for automatic encodation.

    +
    1408 +

    Input data too large to fit into one QR Symbol

    +
    1409 +

    The selected symbol version %d is too small to fit the + specified data and selected error correction level.

    +
    1410 +

    Trying to read past the last available codeword in block + split.

    +
    1415 +

    Manually specified encodation schema MODE_NUMERIC has no data + that can be encoded using this schema.

    +
    1416 +

    Manually specified encodation schema MODE_ALPHANUM has no data + that can be encoded using this schema.

    +
    1417 +

    Manually specified encodation schema MODE_BYTE has no data + that can be encoded using this schema.

    +
    1418 +

    Unsupported encodation schema specified (%d)

    +
    1419 +

    Found character in data stream that cannot be encoded with the + selected manual encodation mode.

    +
    1420 +

    Encodation using KANJI mode not yet supported.

    +
    1422 +

    Found unknown characters in the data stream that can't be + encoded with any available encodation mode.

    +
    1423 +

    Kanji character set not yet supported.

    +
    1427 +

    Expected either DIGIT, ALNUM or BYTE but found ASCII + code=%d

    +
    +

    +
    +

    Creating an encoder

    + +

    A QR encoder is created as an instance of class QREncoder. The + constructor have the following signature

    +

    +

    +

    +

    The following examples creates a basic encoder which will automatically select the + smallest possible size to fit the data given

    +

    +

    1
    +
    $encoder = new QREncoder();

    +

    +

    The following example will create an instance of an encoder with size 22 and error + correction level 'Q'

    +

    +

    1
    +
    $encoder = new QREncoder(22, QRCapacity::ErrQ);

    +

    +
    +

    Encodation of input data options

    + +

    The absolute simplest way of encoding data is simply to create a simple string + representing the data to be encoded and then pass that string as the first argument + to the Stroke() method in the backend. The encoder will then analyze + the input data and choose the most efficient space saving encoding schema for this + data.

    +

    +

    Note

    +

    Unless there are some really good reasons to use manual encodation it + should be left to the library to determine this in an optimal way!

    +

    +

    +

    The QR standard allows 3 different compaction schema that can be used to minimize + the number of codewords used for a particular data string. This also means that a + particular data string may have several different valid barcodes that visually looks + different.

    +

    The supported compaction modes in the library are:

    +

    +

    • +

      Alpha compaction mode Efficient + encoding of digits 0 - 9; upper case letters A -Z and nine other + characters: space, $ % * + - . / : .

      +
    • +

      Numeric compaction mode. Efficient + encoding of numeric data. For long consecutive strings of digits this + gives a better compaction than the alpha mode.

      +
    • +

      Byte compaction mode. Used only when + there is a need to encode byte values as is, i.e. values in the range + 0-255. Please note that some barcode readers, especially those with a + keyboard wedge, don't send back the proper encoding for ASCII values + lower than 32 or higher than 126.

      +

    +

    +

    When the automatic encoding is chosen this will create an optimum encoding (from a + size perspective) of the supplied data. This includes shifting encoding method in + the middle of the data one or several time depending on the structure of the data.

    +

    It is also possible to manually control the exact encodation of the input data. + This is done by supplying one or more data tuples where the first entry in the tuple + is the compaction schema and the second the data. To encode the data manually the + following structure must then be followed:

    +

    +

    Figure 27.10. Structure for manually specify QR encodation schema

    + +
    $data = array( array( <encoding_mode1> , <data1> ),
    +               array( <encoding_mode2> , <data2> ),
    +                         ...
    +               array( <encoding_modeN> , <dataN> ));
    +


    +

    +

    The encoding mode is specified as one of three symbolic constants

    +

    +

    • +

      QREncoder::MODE_NUMERIC

      +
    • +

      QREncoder::MODE_ALPHANUM

      +
    • +

      QREncoder::MODE_BYTE

      +

    +

    +

    and the data is specified as a regular text string. Each section of data must + therefore have the compaction mode specified.

    +

    In order to use a specific encodation schema one has to create an array as input + instead of the normal string input. For example, to specify an input where the + encodation should be alphanumeric encoding of the digits '0123456789' one would have + to create the array

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$data = array( array( QREncoder::MODE_ALPHANUM,'0123456789') );
    +...
    +$backend->Stroke($data)
    +?>

    +

    +

    It is also possible to use different encodings for different parts of the data in + a similar way as the following example shows

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    <?php
    +$data = array( array(QREncoder::MODE_ALPHANUM,'0123456789'),
    +               array(QREncoder::MODE_BYTE,'ABCDEFGH') 
    +             );
    +...
    +...
    +$backend->Stroke($data)
    +?>

    +

    +
    +

    Reading input data from a file

    + +

    Normally the method Backend::Stroke($aData) is sued to create a QR code from the + datastring given. This string can of course come from a database, user input or from + a file. The library provides a utility method

    +

    +

    • +

      Backend::StrokeFromFile($aFromFile,$aToFile='')

      +

      $aFromFile, The file to read the data from

      +

      $aToFile, Optional filename to write the generated QR + code to

      +

    +

    +

    which makes it easy to get data directly from a file. Otherwise it behaves exactly + the same as the normal Backend::Stroke().

    +
    +

    Creating different backends

    + +

    In order to create the actual output one or more backends must be created. The QR + Code supports the following backends:

    +

    +

    • +

      BACKEND_IMAGE, Create an image backend. This is the + default backend if no explicit backend is specified.

      +
    • +

      BACKEND_PS, Create a postscript backend. The text string + that represents the postscript for the barcode is returned directly from + the Backend::Stroke()

      +
    • +

      BACKEND_EPS, Create an encapsulated postscript + backend

      +
    • +

      BACKEND_ASCII, This is a special backend which will + generate an ASCII rendering of the datamatrix barcode. This is mostly + practical for technical investigations regarding the technical structure + of a Datamatrix barcode.

      +

    +

    +

    The following code snippet shows two ways of creating a barcode image + backend.

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$encoder = new QREncoder();
    +$backend = QRCodeBackendFactory::Create($encoder);
    +...
    +?>

    +

    +

    +

    1
    +2
    +3
    +4
    +5
    +
    <?php
    +$encoder = new QREncoder();
    +$backend = QRCodeBackendFactory::Create($encoder,BACKEND_IMAGE);
    +...
    +?>

    +

    +

    The following code shows a complete script to generate a postscript output

    +

    +

    Example 27.4. Generating Postscript output (qrexample11.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php
    +// Include the library
    +require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +// Example 11 : Generate postscript output
    + 
    +$data         = 'ABCDEFGH01234567'; // Data to be encoded
    +$version      = -1;  // -1 = Let the library decide version (same as default)
    +$corrlevel    = QRCapacity::ErrH; // Error correction level H (Highest possible)
    +$modulewidth  = 3;
    + 
    +// Create a new instance of the encoder using the specified
    +// QR version and error correction
    +$encoder = new QREncoder($version,$corrlevel);
    + 
    +// Use the image backend
    +$backend = QRCodeBackendFactory::Create($encoder, BACKEND_PS);
    + 
    +// Set the module size
    +$backend->SetModuleWidth($modulewidth);
    + 
    +// Store the barcode in the specifed file
    +$ps_str = $backend->Stroke($data);
    + 
    +echo '<pre>'.$ps_str.'</pre>';
    +?>


    +

    +

    Figure 27.11. QR Code - Example Postscript Output

    + +
    QR Code - Example Postscript Output
    +

    +
    +

    Generic backend methods

    + +

    The following methods are available to adjust the final look and feel of the + barcode

    +

    +

    1. +

      Backend::SetColor($aOne, $aZero, + $aBackground='white')

      +

      the color of the 'black' and 'white' modules in the barcode and the + quiet area around the barcode

      +
    2. +

      Backend::SetQuietZone($aSize)

      +

      the size of the "quiet zone" in pixels for the image backend and in + points (1 pt = 1/72 inch) for the postscript backend

      +
    3. +

      Backend::SetModuleWidth($aWidth)

      +

      the module width specified in pixels for the image backend and in + points (1 pt = 1/72 inch) for the postscript backend

      +
    4. +

      Backend::Stroke($aData, $aFileName='')

      +

      create the barcode and send it back the client or store it to a file + if the second parameter is set. For postscript backends the postscript + string is returned directly from the method. (See example above)

      +
    5. +

      Backend::StrokeFromFile($aFromFileName,$aFileName='')

      +

      This allows the creation of barcode directly from data in a + file.

      +

    +

    +
    +

    Image backend methods

    + +

    For the image backend it is possible to adjust the image encoding format with the + following method

    +

    +

    1. +

      + Backend::SetImgFormat($aFormat,$aQuality=75) +

      +

      Specify image format. Possible values are

      +

      +

      • +

        + 'auto' +

        +
      • +

        + 'png' +

        +
      • +

        + 'jpeg' +

        +
      • +

        + 'gif' +

        +

      +

      +

      For 'jpeg' format the quality parameter is a number in range [1-100] + and specified how much compression / (Data loss) should be used. 100=no + compression. Normal values are in the range [60-95]

      +

      The following example sets the image format to 'JPEG' with quality + 80.

      +

      +

      1
      +
      $backend->SetImgFormat('jpeg', 80);

      +

      +

    +

    +
    +

    Postscript backend methods

    + +

    For postscript backend it is possible to select whether the postscript should be + generated as encapsulated postscript. This is controlled by the method

    +

    +

    • +

      Backend::SetEPS($aFlg=true)

      +

    +

    +
    +

    A template to create barcodes

    + +

    The following (complete) script can be used as a starting point for creation of + more advanced barcode scripts

    +

    +

    Example 27.5. A QR code template (qr_template.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +
    <?php
    +require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +// Data to be encoded
    +$data         = 'ABCDEFGH01234567';
    + 
    +// QR Code specification
    +$version      = -1;                  // -1 = Let the library decide version (same as default)
    +$corrlevel    = QRCapacity::ErrM;   // Medium erro correction
    +$modulewidth  = 2;                    // Module width
    +$back         = BACKEND_IMAGE;        // Default backend
    +$quiet          = 4;                     // Same as default value
    + 
    +// Create encoder and backend
    +$encoder = new QREncoder($version, $corrlevel);
    +$backend = QRCodeBackendFactory::Create($encoder, $back);
    + 
    +// Set the module size
    +$backend->SetModuleWidth($modulewidth);
    + 
    +// Set Quiet zone (this should rarely need changing from the default)
    +$backend->SetQuietZone($quiet);
    + 
    +if( $back == BACKEND_IMAGE ) {
    + 
    +    $backend->Stroke($data);
    +}
    +else {
    +    $str = $backend->Stroke($data);
    +    echo '<pre>'.$str.'</pre>';
    +}
    +?>


    Figure 27.12. A QR code template (qr_template.php)

    A QR code template (qr_template.php)


    +

    +
    +

    Sample application

    + +

    As an example the library includes a WEB-based demo barcode creation application. + This application can be used to easily create barcode through it's WEB interface. It + is available at 'qr/demoapp/index.html'

    +

    This application is primarily included as a demo on the features available in the + library and not as a finalized product.

    +

    Figure 27.13. QR Code WEB-based demo application shows a screen shot of the application + interface.

    +

    Figure 27.13. QR Code WEB-based demo application

    + +
    QR Code WEB-based demo application
    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch27s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch27s03.html new file mode 100755 index 00000000..7ba773db --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch27s03.html @@ -0,0 +1,531 @@ +Example scripts

    Example scripts

    + +

    The following sections shows a number of example script that can be used as a base for + further refinement.

    +

    Example 1 - Store QR code to file

    + +

    QR Barcode with specified version and stored to a file

    +

    +

    Example 27.6. Storing image to a file (qrexample03.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +
    <?php
    +    // Example 3 : QR Barcode with specified version and stored to a file
    + 
    +    // Include the library
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    // Data to be encoded
    +    $data = '01234567';
    +    $version = 3;  // Use QR version 3
    +    $fileName = 'qrexample03.png';
    + 
    +    // Create a new instance of the encoder and let the library
    +    // decide a suitable error level
    +    $encoder = new QREncoder($version);
    + 
    +    // Use the image backend
    +    $backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size (quite big)
    +    $backend->SetModuleWidth(5);
    + 
    +    // Store the barcode in the specifed file
    +    $backend->Stroke($data,$fileName);
    +    list($version,$errorcorrection) = $backend->GetQRInfo();
    + 
    +    echo "QR Barcode, (<b>Version: $version-$errorcorrection</b>), image stored in file $fileName";
    +?>


    +

    +
    +

    Example 2 - Specified error correction level

    + +

    QR Barcode with specified version and error correction level

    +

    +

    Example 27.7. Specified error correction level (qrexample04.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +
    <?php
    +    // Example 4 : QR Barcode with specified version and error correction level
    + 
    +    // Include the library
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    // Data to be encoded
    +    $data = '01234567';
    +    $version = 12;  // Use QR version 4
    +    $corrlevel = QRCapacity::ErrH ; // Level H error correction (the highest possible)
    + 
    +    // Create a new instance of the encoder using the specified
    +    // QR version and error correction
    +    $encoder = new QREncoder($version,$corrlevel);
    + 
    +    // Use the image backend
    +    $backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size
    +    $backend->SetModuleWidth(3);
    + 
    +    // Store the barcode in the specifed file
    +    $backend->Stroke($data);
    +?>


    Figure 27.14. Specified error correction level (qrexample04.php)

    Specified error correction level (qrexample04.php)


    +

    +
    +

    Example 3 - Manual specified encoding

    + +

    QR Barcode with manually specified encodation

    +

    +

    Example 27.8. QR Barcode with manually specified encodation (qrexample05.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +
    <?php
    +    // Example 5 : QR Barcode with manually specified encodation
    + 
    +    // Include the library
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    // Data to be encoded
    +    // We want the data to be encoded using alphanumeric encoding even though
    +    // it is only numbers
    +    $data = array(
    +        array(QREncoder::MODE_ALPHANUM,'01234567')
    +    );
    + 
    +    $version = 3;  // Use QR version 3
    +    $corrlevel = QRCapacity::ErrH ; // Level H error correction (the highest possible)
    + 
    +    // Create a new instance of the encoder using the specified
    +    // QR version and error correction
    +    $encoder = new QREncoder($version,$corrlevel);
    + 
    +    // Use the image backend
    +    $backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size
    +    $backend->SetModuleWidth(4);
    + 
    +    // Store the barcode in the specifed file
    +    $backend->Stroke($data);
    +?>


    Figure 27.15. QR Barcode with manually specified encodation (qrexample05.php)

    QR Barcode with manually specified encodation (qrexample05.php)


    +

    +
    +

    Example 4 - JPEG image format

    + +

    QR Barcode with image in JPG format

    +

    +

    Example 27.9. QR Barcode with image in JPG format (qrexample06.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php
    +    // Example 6 : QR Barcode with image in JPG format
    + 
    +    // Include the library
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    $data      = 'ABCDEFGH01234567'; // Data to be encoded
    +    $version   = -1;  // -1 = Let the library decide version (same as default)
    +    $corrlevel = -1; // -1 = Let the library decide error correction level (same as default)
    + 
    +    // Create a new instance of the encoder using the specified
    +    // QR version and error correction
    +    $encoder = new QREncoder($version,$corrlevel);
    + 
    +    // Use the image backend
    +    $backend=QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Use JPEG format with 80% quality level
    +    $backend->SetImgFormat('jpeg',80);
    + 
    +    // Set the module size
    +    $backend->SetModuleWidth(4);
    + 
    +    // Store the barcode in the specifed file
    +    $backend->Stroke($data);
    +?>


    Figure 27.16. QR Barcode with image in JPG format (qrexample06.php)

    QR Barcode with image in JPG format (qrexample06.php)


    +

    +
    +

    Example 5 - Multiple manual encoding

    + +

    QR Barcode with multiple manually specified encodation schema.

    +

    +

    Note

    +

    Normally there would be no need to ever use manually specified + encodation)

    +

    +

    +

    +

    Example 27.10. multiple manually specified encodation schema. (qrexample07.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php
    +    // Example 7 : QR Barcode with multiple manually specified encodation schemas
    +    // (Note: Normally there would be no need to ever use manually specified encodation)
    + 
    +    // Include the library
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    // Data to be encoded
    +    $data = array(
    +        array(QREncoder::MODE_ALPHANUM,'01234567'),
    +        array(QREncoder::MODE_NUMERIC,'89012345')
    +    );
    + 
    +    // Create a new instance of the encoder (automatically determined QR version and
    +    // error correction level)
    +    $encoder = new QREncoder();
    + 
    +    // Use the image backend
    +    $backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size
    +    $backend->SetModuleWidth(4);
    + 
    +    // Store the barcode in the specifed file
    +    $backend->Stroke($data);
    +?>


    Figure 27.17. multiple manually specified encodation schema. (qrexample07.php)

    multiple manually specified encodation schema. (qrexample07.php)


    +

    +
    +

    Example 6 - Reading data from file

    + +

    QR Barcode with data read from file

    +

    +

    Example 27.11. data read from file (qrexample08.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php
    +    // Example 8 : QR Barcode with data read from file
    + 
    +    // Include the library
    +    require_once ('jpgraph/jpgraph.php');
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    $readFromFilename = 'qr-input.txt';
    + 
    +    // Create a new instance of the encoder and let the library
    +    // decide a suitable QR version and error level
    +    $encoder=new QREncoder();
    + 
    +    // Use the image backend
    +    $backend=QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size (quite big)
    +    $backend->SetModuleWidth(5);
    + 
    +    // .. send the barcode back to the browser for the data in the file
    +    $backend->StrokeFromFile($readFromFilename);
    +?>


    Figure 27.18. data read from file (qrexample08.php)

    data read from file (qrexample08.php)


    +

    +
    +

    Example 7 - Adjusting colors

    + +

    QR Barcode with data read from file and different colors

    +

    +

    Example 27.12.  (qrexample09.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +
    <?php
    +    // Example 9 : QR Barcode with data read from file and different colors
    + 
    +    // Include the library
    +    require_once ('jpgraph/jpgraph.php');
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    $readFromFilename = 'qr-input.txt';
    + 
    +    // Create a new instance of the encoder and let the library
    +    // decide a suitable QR version and error level
    +    $encoder = new QREncoder();
    + 
    +    // Use the image backend
    +    $backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size (quite big)
    +    $backend->SetModuleWidth(5);
    + 
    +    // Use blue and white colors instead
    +    $backend->SetColor('navy','white');
    + 
    +    // .. send the barcode back to the browser for the data in the file
    +    $backend->StrokeFromFile($readFromFilename);
    +?>


    Figure 27.19.  (qrexample09.php)

    (qrexample09.php)


    +

    +
    +

    Example 8 - Setting error correction level

    + +

    Specified error correction level

    +

    +

    Example 27.13. Specified error correction level (qrexample10.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php
    +    // Example 10 : Specified error correction level
    + 
    +    // Include the library
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    $data      = 'ABCDEFGH01234567'; // Data to be encoded
    +    $version   = -1;  // -1 = Let the library decide version (same as default)
    +    $corrlevel = QRCapacity::ErrH; // Error correction level H (Highest possible)
    + 
    +    // Create a new instance of the encoder using the specified
    +    // QR version and error correction
    +    $encoder = new QREncoder($version,$corrlevel);
    + 
    +    // Use the image backend
    +    $backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size
    +    $backend->SetModuleWidth(3);
    + 
    +    // Set color
    +    $backend->SetColor('brown','white');
    + 
    +    // Store the barcode in the specifed file
    +    $backend->Stroke($data);
    +?>


    Figure 27.20. Specified error correction level (qrexample10.php)

    Specified error correction level (qrexample10.php)


    +

    +
    +

    Example 9 - Generating ASCII output

    + +

    Using the ASCII backend

    +

    +

    Example 27.14. Using the ASCII backend (qrexample12.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php
    +// Include the library
    +require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +// Example 11 : Generate postscript output
    + 
    +$data         = 'ABCDEFGH01234567'; // Data to be encoded
    +$version      = -1;  // -1 = Let the library decide version (same as default)
    +$corrlevel    = QRCapacity::ErrH; // Error correction level H (Highest possible)
    +$modulewidth  = 1;
    + 
    +// Create a new instance of the encoder using the specified
    +// QR version and error correction
    +$encoder = new QREncoder($version,$corrlevel);
    + 
    +// Use the image backend
    +$backend = QRCodeBackendFactory::Create($encoder, BACKEND_ASCII);
    + 
    +// Set the module size
    +$backend->SetModuleWidth($modulewidth);
    + 
    +// Store the barcode in the specifed file
    +$ps_str = $backend->Stroke($data);
    + 
    +echo '<pre>'.$ps_str.'</pre>';
    +?>


    +

    +

    Figure 27.21. QR With ASCII rendering

    + +
    QR With ASCII rendering
    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch28.html b/Societes/ric/jpgraph/docs/chunkhtml/ch28.html new file mode 100755 index 00000000..062b0181 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch28.html @@ -0,0 +1,36 @@ +Chapter 28. Applying the prepared theme

    Chapter 28. Applying the prepared theme

    + +

    To understand how themes are used, it is easiest to look at the sample code. For example, the Aqua Theme can be applied using the following. +

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$theme_class = new AquaTheme();
    +$graph->SetTheme($theme_class);
    +?>

    +

    +

    In line 1, an instance of AquaTheme class is created, and the graph theme is changed by passing the instance to SetTheme(). To use 'GreenTheme' instead of 'AquaTheme', use the following. +

    +

    +

    1
    +
    $theme_class = new GreenTheme;

    +

    +

    All theme classes inherit the abstract 'Theme' class. +

    +

    + +

    +

    Figure 28.1. Aqua Theme (aqua_example.php)

    Aqua Theme (aqua_example.php)


    +

    Figure 28.2. Green Theme (green_example.php)

    Green Theme (green_example.php)


    +

    Figure 28.3. Ocean Theme (ocean_example.php)

    Ocean Theme (ocean_example.php)


    +

    Figure 28.4. Pastel Theme (pastel_example.php)

    Pastel Theme (pastel_example.php)


    +

    Figure 28.5. Softy Theme (softy_example.php)

    Softy Theme (softy_example.php)


    +

    Figure 28.6. Vivid Theme (vivid_example.php)

    Vivid Theme (vivid_example.php)


    +

    Figure 28.7. Orange Theme (orange_example.php)

    Orange Theme (orange_example.php)


    +

    Figure 28.8. Rose Theme (rose_example.php)

    Rose Theme (rose_example.php)


    +

    Figure 28.9. Universal Theme (universal_example.php)

    Universal Theme (universal_example.php)


    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch29.html b/Societes/ric/jpgraph/docs/chunkhtml/ch29.html new file mode 100755 index 00000000..99de4482 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch29.html @@ -0,0 +1,30 @@ +Chapter 29. Attention

    Chapter 29. Attention

    + +

    When using themes, there are some things that require particular attention.

    +

    The order of SetTheme() and changing settings

    + +

    At first, $graph->SetTheme() should be used after creating the graph, just after $graph->SetScale(). The following code is an example. +

    +

    +

    1
    +2
    +3
    +4
    +
    $graph = new Graph(750, 320, 'auto');
    +$graph->SetScale('textlin');
    +$theme_class = new AquaTheme;
    +$graph->SetTheme($theme_class);

    +

    +

    In this way, all the settings of AquaTheme(grid, background and font color etc) can be applied. Any plots after this will also use the AquaTheme settings. +Of course there are times where we only want to change individual settings and not the overall theme. For example, there is no outline around the graph in 'AquaTheme'. To add an outline we can do the following. After SetTheme(), you can use functions to change individual settings. +If you want to display an outline around the graph, add the following line to the code shown previously. +

    +

    +

    1
    +
    $graph->SetFrame(true);

    +

    +

    In this way, all the settings of AquaTheme(grid, background and font color etc) can be applied. Any plots after this will also use the AquaTheme settings. +

    +
    + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch29s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch29s02.html new file mode 100755 index 00000000..78ea2a39 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch29s02.html @@ -0,0 +1,47 @@ +Changing the display settings of line/bar graphs

    Changing the display settings of line/bar graphs

    + +

    You should be careful when adding additional lines or bars to graphs and when changing color settings etc. +

    +

    For example, in the previous version of JpGraph, after generating the 'BarPlot' instance and changing some settings, we used the Add() instance applied to $graph. But when using the theme class, this won't work. Because when Add() is called, all previous settings are ignored and the theme's defaults are used. +

    +

    To avoid this, you should change each setting individually after using Add() when you want to customize. +The following is sample code showing how to change colors in BarPlot. +

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    <?php
    +$data1y=array(47,80,40,116);
    +$bplot = new BarPlot($data1y);
    +$graph->Add($bplot);
    + 
    +// you can change properties of the plot only after calling Add()
    +$bplot->SetWeight(0);
    +$bplot->SetFillGradient('#FFAAAA:0.7', '#FFAAAA:1.2', GRAD_VER);    
    + 
    +?>

    +

    +

    If you use the code shown below, the changes made using the SetWeight() and SetFillGradient() method will be overwritten by Add() and won't be applied . +

    +

    +

    1
    +2
    +3
    +4
    +
    // this is an invalid example
    +$bplot->SetWeight(0);
    +$bplot->SetFillGradient('#FFAAAA:0.7', '#FFAAAA:1.2', GRAD_VER);    
    +$graph->Add($bplot);

    +

    +

    PiePlot settings can be changed in the same way. +For examples relating to BarPlot, please see 'new_bar1.php' on the gallery page. +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch30.html b/Societes/ric/jpgraph/docs/chunkhtml/ch30.html new file mode 100755 index 00000000..b97fc7bd --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch30.html @@ -0,0 +1,56 @@ +Chapter 30. Examples of applying a theme

    Chapter 30. Examples of applying a theme

    + +

    The following code is an example of using the theme class to customize some settings. +

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    <?php
    +$data1y=array(47,80,40,116);
    +$graph = new Graph(400, 300, 'auto');
    +$graph->SetScale('textlin');
    + 
    +$theme_class = new AquaTheme;
    +$graph->SetTheme($theme_class);
    +// after setting the theme, you can change individual details yourself
    +$graph->SetFrame(true,'lightgray');                        // make frame visible and set color
    +$graph->xaxis->SetTickLabels(array('A','B','C','D')); // change xaxis lagels
    +$graph->title->Set("Theme Example");                    // add title
    + 
    +// add barplot
    +$bplot = new BarPlot($data1y);
    + 
    +// you can change properties of the plot only after calling Add()
    +$bplot->SetWeight(0);
    +$bplot->SetFillGradient('#FFAAAA:0.7', '#FFAAAA:1.2', GRAD_VER);    
    + 
    +$graph->Stroke();
    +?>

    +

    +

    The following graph was generated using this sample program. +

    +

    +

    Figure 30.1. Theme Sample (theme_example.php)

    Theme Sample (theme_example.php)


    +

    + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch31.html b/Societes/ric/jpgraph/docs/chunkhtml/ch31.html new file mode 100755 index 00000000..2b2093a1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch31.html @@ -0,0 +1,108 @@ +Chapter 31. Creating original themes

    Chapter 31. Creating original themes

    + +

    You can create an original theme class yourself. +You can easily create new theme classes by extending the 'Theme' class and adding your own settings. +

    +

    Let's say that you like 'AquaTheme' but want to make some changes. +In 'AquaTheme', the y axis and y scale are not displayed. To change these settings and to display both, you can use the following. However, it can be time-consuming to add these lines to each graph individually. +

    +

    +

    1
    +2
    +3
    +4
    +
    <?php
    +$graph->yaxis->HideLine(false);
    +$graph->yaxis->HideTicks(false,false);
    +?>

    +

    +

    It may be easier to create a new theme based on the original but which has some different settings. Lets create 'MyAquaTheme'. +You should put the new theme class file in the 'Theme' folder, This is where all theme classes are kept. +

    +

    At first, create a file at Themes/MyAquaTheme.class.php. +The code for 'MyAquaTheme' class is the following. +

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    <?php
    +class MyAquaTheme extends AquaTheme
    +{
    +  function SetupGraph($graph) {
    +    parent::SetupGraph($graph);
    +    $graph->yaxis->HideLine(false);
    +    $graph->yaxis->HideTicks(false,false);
    +  }
    +}
    +?>

    +

    +

    When redefining a method of parent class, please call the parent method. +In this way, all settings of the parent class method are applied and you can add the original settings. +Font, x axis, y axis colors etc are all defined as class properties. The following code shows how to change these settings. +

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    <?php
    +function __construct() {
    +    $this->font_color       = '#009900';
    +    $this->background_color = '#EEFFDD';
    +    $this->axis_color       = '#00CC00';
    +    $this->grid_color       = '#33CC33';
    +}
    +?>

    +

    +

    You can set four properties, $font_color, $background_color, $axs_color and $grid_color. +You can also change values individually. +

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +
    <?php
    +class MyAquaTheme extends AquaTheme
    +{
    +    function __construct() {
    +        $this->font_color       = '#009900';
    +        $this->background_color = '#EEFFDD';
    +        $this->axis_color       = '#00CC00';
    +        $this->grid_color       = '#33CC33';
    +    }
    +  
    +    function SetupGraph($graph) {
    +        parent::SetupGraph($graph);
    +        $graph->yaxis->HideLine(false);
    +        $graph->yaxis->HideTicks(false,false);
    +    }
    +}
    +?>

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch32.html b/Societes/ric/jpgraph/docs/chunkhtml/ch32.html new file mode 100755 index 00000000..99675179 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch32.html @@ -0,0 +1,165 @@ +Chapter 32. Synchronized Y-axis

    Chapter 32. Synchronized Y-axis

    Table of Contents

    32.1. Creating two scales
    + +

    The purpose of this chapter is to show how one can have one set of data displayed with + two different scales that are still synchronized meaning that the tick marks are at + identical positions.

    +

    One classic example of when this can be useful is to show temperature in both Celsius + and Fahrenheit. Figure 32.1. Synchronized y and y2 scales (y2synch.php) below illustrates what we would like + to accomplish.

    +

    +

    Figure 32.1. Synchronized y and y2 scales (y2synch.php)

    Synchronized y and y2 scales (y2synch.php)


    +

    +

    Creating two scales

    + +

    Normally the auto scaling puts tick marks at "nice" positions that for example are + multiples of 5,2,10 and so on. This would mean that it seems like the graph in Figure 32.1. Synchronized y and y2 scales (y2synch.php) with tick positions at 59 F and 68 F can not be auto + scaled.

    +

    The simplest method of creating two scales as in the example above is to add a + secondary Y-axis, add the same plot to that axis. This would then mean that the two + axes would be identical. The magic now happens in the last step when we add a format + callback method to the second Y-axis. This format callback will be applied to each + label. All we have to do now is create a callback function that does the proper + scale conversion.

    +

    This way also means that we have too chose one of the scales as the "master" which + will be auto scaled with tick positions at "nice" intervals.

    +

    +

    Caution

    +

    For the second scale one can add the same plot or one could create a new + plot from the same data set. If the data set to be plotted is very large it + can be advantageous to create a new plot and set the line weight to 0 + (zero). This way the line will not actually be plotted and that plot time is + eliminated.

    +

    +

    +

    The script to create the graph in Figure 32.1. Synchronized y and y2 scales (y2synch.php) is given + below.

    +

    +

    Example 32.1.  (y2synch.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    + 
    +function toFahrenheit($aVal) {
    +    return round(($aVal*9/5)+32,2);
    +}
    + 
    +function toCelcius($aVal) {
    +    return round(($aVal-32)*5/9,2);
    +}
    + 
    + 
    +$datay =array(2,3,8,19,7,17,6,22);
    + 
    +// Create the graph. 
    +$graph = new Graph(400,280);
    + 
    +// Slightly bigger margins than default to make room for titles
    +$graph->SetMargin(50,60,40,45);
    +$graph->SetMarginColor('white');
    + 
    + 
    +// Setup the scales for X,Y and Y2 axis
    +$graph->SetScale("intlin"); // X and Y axis
    +$graph->SetY2Scale("lin"); // Y2 axis
    + 
    +// Overall graph title
    +$graph->title->Set('Synchronized Y & Y2 scales');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// Title for X-axis
    +$graph->xaxis->title->Set('Measurement');
    +$graph->xaxis->title->SetMargin(5);
    +$graph->xaxis->title->SetFont(FF_ARIAL,FS_NORMAL,11);
    + 
    +// Create Y data set 
    +$lplot = new LinePlot($datay);
    +$graph->yaxis->title->Set('Celcius (C)');
    +$graph->yaxis->title->SetMargin(5);
    +$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,11);
    +// ... and add the plot to the Y-axis
    +$graph->Add($lplot);
    + 
    +// Create Y2 scale data set 
    +$l2plot = new LinePlot($datay);
    +$l2plot->SetWeight(0);
    +$graph->y2axis->title->Set('Fahrenheit (F)');
    +$graph->y2axis->title->SetMargin(5); // Some extra margin to clear labels
    +$graph->y2axis->title->SetFont(FF_ARIAL,FS_NORMAL,11);
    +$graph->y2axis->SetLabelFormatCallback('toFahrenheit');
    +$graph->y2axis->SetColor('navy');
    + 
    +// ... and add the plot to the Y2-axis
    +$graph->AddY2($l2plot);
    + 
    +$graph->Stroke();
    +?>


    +

    +

    The same principle will also work with othrr plot variants, for example bar plots. + By making the first plot an instance of class BarPlot the graph in + Figure 32.2. Using a barplot with two different scales (y2synch2.php) can be created.

    +

    +

    Figure 32.2. Using a barplot with two different scales (y2synch2.php)

    Using a barplot with two different scales (y2synch2.php)


    +

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch33.html b/Societes/ric/jpgraph/docs/chunkhtml/ch33.html new file mode 100755 index 00000000..d8cea424 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch33.html @@ -0,0 +1,282 @@ +Chapter 33. USPS Confirmation Barcodes

    Chapter 33. USPS Confirmation Barcodes

    + +

    US Postal Service (USPS) uses EAN-128 barcodes to tag confirmation codes for the + sender of parcels and letters in the case the sender is a registered business entity. + The confirmation barcode gives feedback to the sender on the date, ZIP Code and the time + the article was delivered.

    +

    Figure 33.1. usps_exhibit44.png

    + +
    usps_exhibit44.png
    +

    +

    The full standard describing this is available in "Confirmation + Services Technical Guide"

    +

    In order to create labels adhering to this strict standard it is possible to use + JpGraph as a basic building block in order to create the barcode part (which uses + UCC/EAN128 as mandatory coding from 2004 and onwards). The standard describes two basic + forms of labels :

    +

    +

    1. +

      Inclusion of postal service routing information (destination ZIP code) +

      +
    2. +

      Exclusion of the destination ZIP code. This will then only include the Dun + & Bradstreet Number (DUNS). The DUNS uniquely identifies businesses at + specific geographical locations. For more information regarding this and how + to obtain such a number please refer to USPS technical documentation. +

      +

    +

    +

    Creating the confirmation codes

    + +

    In order to create the final Package Identification Code (PIC) the following three + steps must be taken

    +

    +

    1. +

      Determine the basic element of the code. This consists of identifying + the Zip code (of the addressee), USPS service type, the DUNS and + Sequence number of parcel (as determined by the business). These number + are input and the process of how to get those number is not described + further in this short note. It is assumed that a potential client will + now how these numbers are obtained.

      +
    2. +

      Determine what type of confirmation code should be used (with or + without Zip code)

      +
    3. +

      Calculate the additional checkdigit for the code and append that code + to the digit sequence.

      +

    +

    +

    The final code that one arrives at in the final stage is then the barcode that + should be created. However creating this code requires knowledge of the EAN-128 + barcode format and the rules for creating barcodes that follow the highly + standardized format for a EAN-128 barcode.

    +

    EAN-128 barcodes are the same as CODE-128 barcodes from a technical barcode point + of view but the data to be encoded must follow a rigorous standard. The JpGraph + library has built in validation to ensure that any data that is encoded using the + EAN-128 symbology follows this standard.

    +

    This standard requires that special control character is inserted at specific + points in the data stream. In the discussion below we will simply state what those + control characters are and not discuss the general format of the EAN-128 barcodes in + too much details.

    +

    In order to do this we will create a utility class with methods that does the + following three things

    +

    +

    1. +

      Create the additional USPS Modulo-10 check digit.

      +
    2. +

      Create a confirmation code without the ZIP number

      +
    3. +

      Create a confirmation code with ZIP number

      +

    +

    +

    The USPS_Confirmation Utility class

    +

    For both types of confirmation code USPS uses its own checkdigit (a variant of a + Modulo-10 checkdigit) at the end of the complete Package Identification Code (PIC), + (the exact process for calculating this number is also described in the technical + documentation released by USPS). The utility class will therefore consist of three + methods, one to calculate the checkdigit and one method each to create PIC with and + without ZIP code. The three methods are listed below

    +

    +

    1. +

      function + _USPS_chkd($aData)

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +
      <?php
      +// Calculate the single digit check digit from sequence of numbers
      +// in a string
      +function _USPS_chkd($aData) {
      +    $n = strlen($aData);
      +    
      +    // Add all numbers at position 0,2,4,.. from the end
      +    $et = 0 ;
      +    for( $i=1; $i <= $n; $i+=2 ) {
      +    $d = intval(substr($aData,-$i,1));
      +    $et += $d;
      +    }
      + 
      +    // Add all numbers at position 1,3,5,... from the end
      +    $ot = 0 ;
      +    for( $i=2; $i <= $n; $i+=2 ) {
      +    $d = intval(substr($aData,-$i,1));
      +    $ot += $d;
      +    }
      + 
      +    // Calculate the checkdigit
      +    $tot = 3*$et + $ot;
      +    return (10 - ($tot % 10))%10;
      +}
      +?>

      +

      +
    2. +

      function + GetPIC($aServiceType,$aDUNS,$aSeqNbr)

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +
      <?php
      +// Get type 2 of confirmation code (without ZIP)
      +function GetPIC($aServiceType,$aDUNS,$aSeqNbr) {
      +  // Convert to USPS format with AI=91
      +  $data = '91' . $aServiceType . $aDUNS . $aSeqNbr;
      +  $cd = $this->_USPS_chkd($data);
      +  return $data . $cd;
      +}
      +?>

      +

      +
    3. +

      function + GetPICwithZIP($aZIP,$aServiceType,$aDUNS,$aSeqNbr)

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +
      <?php
      +// Get type 1 of confirmation code (with ZIP)
      +function GetPICwithZIP($aZIP,$aServiceType,$aDUNS,$aSeqNbr) {
      +   // Convert to USPS format with AI=420 and extension starting 
      +   // with AI=91
      +   $data = '420'. $aZIP . '91' . $aServiceType . 
      +             $aDUNS . $aSeqNbr;
      +   // Only calculate the checkdigit from the AI=91 and forward
      +   // and do not include the ~1 (FUNC1) in the calculation
      +   $cd = $this->_USPS_chkd(substr($data,8));
      +   $data = '420'. $aZIP . '~191' . $aServiceType . 
      +              $aDUNS . $aSeqNbr;
      +   return $data . $cd;
      +}
      +?>

      +

      +

      All that now remains is to tie this together with the EAN-128 standard + barcode generation in order to crate the confirmation code. The + following script shows how this can be done

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +
      <?php
      +$zip     = '92663';     // Zip code
      +$service = '21';        // Service 21 = Priority Mail
      +$DUNS    = '805213907'; // DUNS
      +$seqnr   = '04508735';  // Seqnr
      + 
      +$usps = new USPS_Confirmation();
      +$data = $usps->GetPICwithZIP($zip,$service,$DUNS,$seqnr);
      + 
      +$encoder = BarcodeFactory::Create(ENCODING_EAN128);
      +$e = BackendFactory::Create(BACKEND_IMAGE,$encoder);
      +$e->SetModuleWidth(2);
      +$e->SetFont(FF_ARIAL,FS_NORMAL,14);
      +$e->Stroke($data);
      +?>

      +

      +

      The script above will then generate the following barcode

      +

      Figure 33.2. USPS example 1

      + +
      USPS example 1
      +

      +

    +

    +

    +

    Caution

    +

    Even though only numbers are input to the PIC, integers should not be used + since initial "0":s will be lost. Use strings as the example above shows. +

    +

    +

    +

    Additional example

    +

    The following script shows how to generate PIC that does not use Zip codes.

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +
    <?php
    +$service = '01';         // Priority mail
    +$DUNS    = '123456789';  // DUNS
    +$seqnr   = '00000001';   // Seqnr
    + 
    +$usps = new USPS_Confirmation();
    +$data = $usps->GetPIC($service,$DUNS,$seqnr);
    + 
    +$encoder = BarcodeFactory::Create(ENCODING_EAN128);
    +$e = BackendFactory::Create(BACKEND_IMAGE,$encoder);
    +$e->SetModuleWidth(2);
    +$e->SetFont(FF_ARIAL,FS_NORMAL,14);
    +$e->Stroke($data);
    +?>

    +

    +

    The script above will generate the following confirmation barcode.

    +

    Figure 33.3. USPS example 2

    + +
    USPS example 2
    +

    +

    A complete script to implement this is available in the distribution as + "barcode/examples/barcode_usps_example.php"

    +
    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch34.html b/Societes/ric/jpgraph/docs/chunkhtml/ch34.html new file mode 100755 index 00000000..5717b4f7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch34.html @@ -0,0 +1,158 @@ +Chapter 34. Showing SPAM statistics

    Chapter 34. Showing SPAM statistics

    + +

    Introduction and purpose

    + +

    This worked example will show hot to setup a graph that is periodically generated + offline to show Spam statistics for a mail server. The graph will show daily + summaries for the three things; a) The total number + of identified spam mails b) The number of + immediately deleted spams and c) The number of + suspected spams that was stored in the "spam" folder instead of being immediately + deleted.

    +

    An example of the graph we will generate is shown in Figure 34.1. Spam statistics

    +

    Figure 34.1. Spam statistics

    + +
    Spam statistics
    +

    +

    The graph above makes two assumption;

    +

    +

    1. +

      The spam setup has two levels of identifications and how spams are + handled. Suspected email are either deleted immediately (by sending them + to dev/null) or storing the email in the users spam + folder.

      +
    2. +

      The log files from the mail server are available for analysis.

      +

    +

    +

    In the following we will construct a complete PHP command line script that will be + run periodically and analyse the email logs and produce a graph similar to what is + shown above. The script assume that the log file uses procmail + log format so that the folder where each mail is stored are logged.

    +

    +

    Warning

    +

    For very high load email servers doing log file analysis in PHP is + probably not a very good idea due to performance reasons in regards to both + time and memory constraints. We do not make any claim that the scripts below + is enough optimized to be used on high volume mail servers.

    +

    +

    +

    The script will consist of three parts

    +
    1. +

      A parser to scan the log file and create the data

      +
    2. +

      A suitable graph script to create an accumulated bar graph

      +
    3. +

      Uploading of the created image file with the graph to a server where + it will be displayed

      +

    We will therefore use three classes that corresponds to each step + above.

    +

    To define the different files and ftp credentials we will use the following + symbolic constants which will need to be defined depending on the system setup. + Constants that must be adjusted is marked as "...".

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +
    <?php
    +/ FTP Server credentials
    +DEFINE('FTP_SERVER','...');
    +DEFINE('FTP_UID','...');
    +DEFINE('FTP_PWD','...');
    + 
    +// Directory on FTP server where the image should be stored
    +DEFINE('FTP_DIR','...');
    + 
    +// Which procmail logfile to read
    +DEFINE('PROCMAIL_LOGFILE','...');
    + 
    +// 2 Weeks windows to display
    +DEFINE('WINDOWSIZE',14); 
    + 
    +// Where to store the temporary image file
    +DEFINE('IMGFILE','/tmp/spamstat.png');
    +?>

    +

    +

    The whole process is then driven by the following relative small main + script:

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +
    <?php
    +// Use the text based error handling and log potential errors to the 
    +// system default system logger
    +JpGraphError::SetImageFlag(false); 
    +JpGraphError::SetLogFile('syslog');
    +JpGraphError::SetTitle('Spamstat Message: ');
    + 
    +//---------------------------------------------------------------------------    
    +// Step 1) Get the statistics. We return a window of WINDOWSIZE days
    +//---------------------------------------------------------------------------
    +$parser = new ParseProcmailLogFile(PROCMAIL_LOGFILE);
    +list($xdata, $ydata, $y2data) = $parser->GetStat(WINDOWSIZE);
    + 
    +//---------------------------------------------------------------------------
    +// Step 2) Create the graph and store it in the file IMGFILE
    +//---------------------------------------------------------------------------
    +$width = 650; $height = 420;
    +$sgraph = new SpamGraph($width,$height);
    +$sgraph->Create(IMGFILE,$xdata,$ydata,$y2data);
    + 
    +//---------------------------------------------------------------------------
    +// Step 3) Upload the file to the FTP_SERVER server and store the
    +// local file IMGFILE with the same base name in directory FTP_DIR  
    +//---------------------------------------------------------------------------
    +$ftp = new FTPUploader(FTP_SERVER,FTP_UID,FTP_PWD);
    +$ftp->Upload(IMGFILE,FTP_DIR);
    +?>

    +

    +

    For brevity we have excluded the lines that defines the symbolic constants above + and also the inclusion of the necessary library files.

    +

    In the following sections we will shortly discuss each of the three support + classes.

    +
    + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch34s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch34s02.html new file mode 100755 index 00000000..969219d3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch34s02.html @@ -0,0 +1,366 @@ +Step 1: Parsing the log file

    Step 1: Parsing the log file

    + +

    The log file we will be parsing is the standard procmail log. + An authentic example of the log file from our main mail server (that receives around + ~10,000 spam mails per month) is shown below (slightly anonymized to remove the real + name of the mailbox)

    +

    +

    ...
    +From sterne@gvt.net.br  Thu Jul 16 00:03:32 2009
    + Subject: *** SPAM (5.3) *** =?koi8-r?B?79DUyc3J2sHDydEg08HK1ME=?=
    +  Folder: /dev/null                                                       14278
    +From yhrtjgommsg@boomboomroom.com  Thu Jul 16 00:13:33 2009
    + Subject: *** SPAM (6.7) *** Women will be begging you to sleep with you.
    +  Folder: /srv/mail/john/.Spam/new/1247696013.18366_0.lambda                2070
    +From ErikaFrazier12@aol.com  Thu Jul 16 00:13:33 2009
    + Subject: *** SPAM (41.5) *** Obama Allows Meds Sold Online
    +  Folder: /dev/null 
    +...

    +

    +

    Each entry for a received mail in the log are three lines, sender, subject and the + folder the mail will be stored in. For mails that are identified with (according to + this setup) 100% confidence as spams the destination is set to + /dev/null , i.e they are immediately deleted. For mails + that are determined to be spams but where there might be a chance that they are + legitimate they are store in the users Spam folder. From the above log we can see + that two mails are deleted immediately and one mail is stored in the users Spam + folder.

    +

    To analyze this we will create the class ParseProcmailLogFile the + constructor will take a file name of the log file as the only argument and to get + hold of the statistics we use the method

    +

    +

    • +

      ParseProcmailLogFile::GetStat($aWindowSize)

      +

      $aWindowSize is the number of days back the stats should + be based on. The returned statistics will be an array with three array + elements with the following layout:

      +

      ($dateArray, nbrDevNull, nbrSpamFolder)

      +

      These returned values are both arrays indexed by date and value the + number of spams for that date (key)

      +

    +

    +

    +

    Caution

    +

    Remember that the PHP process or user running the script must have read + privileges for the log file.

    +

    +

    +

    We will not walk through the parsing class in any more details than what is given + in the phpdoc comments in the source below

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +
    <?php
    +/**
    +* Class ParseProcmailLogFile
    +*/
    +class ParseProcmailLogFile {
    +    private $iFileName='';
    +    /**
    +    * Constructor for the parse class
    +    *
    +    * @param mixed $aFileName  Log file to read
    +    * @return ParseProcmailLogFile
    +    */
    +    function __construct($aFileName) {
    +        $this->iFileName = $aFileName ;
    +    }
    +    /**
    +    * Get line without trailing "\n"
    +    *
    +    * @param mixed $fp Filepointer
    +    * @return string Read line without trailing "\n"
    +    */
    +    function GetLine($fp) {
    +        $s = fgets($fp);
    +        return substr($s,0,strlen($s)-1);
    +    }
    +    /**
    +    * Get statistics from the parsed log file
    +    *
    +    * @param $aWindow Window size. How many days to include in the returned stats
    +    * @return array with (date, number of killed spam, number of non killed spams)
    +    */
    +   function GetStat($aWindow) {
    + 
    +        $fp = fopen($this->iFileName,'r');
    +        if( $fp === false ) {
    +            JpGraphError::Raise('Cannot read log file');
    +        }
    + 
    +        // Now loop through the file. We always keep the last 3 lines in
    +        // the buffer to be able to get the context of a line since the
    +        // folder is stored on one line and the date of the main on the
    +        // previous line
    +        $buf[1] = $this->GetLine($fp);
    +        $buf[2] = $this->GetLine($fp);
    + 
    +        $idx = 0;
    +        $idx2 = 0;
    +        $found = array(); // All /dev/null spam headers
    +        $found2 = array(); // All Spam folder headers
    + 
    +        // Loop through all lines in the file and store the found emails
    +        // in the two $found arrays
    +        while( ! feof($fp) ) {
    + 
    +            //Shift buffer one step
    +            $buf[0] = $buf[1];
    +            $buf[1] = $buf[2];
    +            $buf[2] = $this->GetLine($fp);
    + 
    +            // Find /dev/null entries
    +            if( strpos($buf[2],'Folder: /dev/null') !== false ) {
    +                if( strpos($buf[0],'From ') !== false ) {
    +                    $datepos = 0 ;
    +                }
    +                elseif( strpos($buf[1],'From ') !== false ) {
    +                    $datepos = 1 ;
    +                }
    +                else {
    +                    continue;
    +                }
    +                // Aggregate all the data per day
    +                $date = strtotime(date('D j M Y',strtotime(substr($buf[$datepos],-24))));
    +                $found[$idx++] = array(str_replace(' Subject: ','',$buf[1]),$date);
    +            }
    + 
    +            // Find spam folder entries
    +            if( strpos($buf[2],'.Spam') !== false ) {
    +                if( strpos($buf[0],'From ') !== false ) {
    +                    $datepos = 0 ;
    +                }
    +                elseif( strpos($buf[1],'From ') !== false ) {
    +                    $datepos = 1 ;
    +                }
    +                else {
    +                    continue;
    +                }
    +                // Aggregate all the data per day
    +                $date = strtotime(date('D j M Y',strtotime(substr($buf[$datepos],-24))));
    +                $found2[$idx2++] = array(str_replace(' Subject: ','',$buf[1]),$date);
    +            }
    + 
    +        }
    + 
    +        fclose($fp);
    + 
    +        // Find out how many at each day of dev null
    +        $date = $found[0][1];
    +        $daystat[$date] = 0;
    + 
    +        for($i=0; $i < $idx; ++$i ) {
    +            if( $date == $found[$i][1] ) {
    +                ++$daystat[$date];
    +            }
    +            else {
    +                $date = $found[$i][1];
    +                $daystat[$date] = 1;
    +            }
    +        }
    + 
    +        // Find out how many at each day of spam
    +        $daystat2 = array();
    +        if( count($found2) > 0 ) {
    +            $date = $found2[0][1];
    +            $daystat2[$date] = 0;
    + 
    +            for($i=0; $i < $idx2; ++$i ) {
    +                if( $date == $found2[$i][1] ) {
    +                    ++$daystat2[$date];
    +                }
    +                else {
    +                    $date = $found2[$i][1];
    +                    $daystat2[$date] = 1;
    +                }
    +            }
    +        }
    + 
    +        // Now make sure that both arrays have the same
    +        // number of entries.
    +        foreach( $daystat as $key => $val ) {
    +            if( !isset($daystat2[$key]) ) {
    +                $daystat2[$key] = 0;
    +            }
    +        }
    + 
    +        foreach( $daystat2 as $key => $val ) {
    +            if( !isset($daystat[$key]) ) {
    +                $daystat[$key] = 0;
    +            }
    +        }
    + 
    +        // Window and return the data
    +        $n = count($daystat);
    +        $start = $n > $aWindow ? $n - $aWindow : 0;
    +        $date_keys = array_keys($daystat);
    +        $idx=0;
    + 
    +        $datax = array(); $datay1 = array(); $datay2 = array();
    +        for( $i=$start; $i < $n; ++$i ) {
    +            $datax[$idx] = date('D j M',$date_keys[$i]);
    +            $datay1[$idx] = $daystat[$date_keys[$i]];
    +            $datay2[$idx++] = $daystat2[$date_keys[$i]];
    +        }
    + 
    +        return array($datax,$datay1,$datay2);
    +    }
    +}
    +?>

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch34s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch34s03.html new file mode 100755 index 00000000..2d8d00d1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch34s03.html @@ -0,0 +1,150 @@ +Step 2: Creating the graph

    Step 2: Creating the graph

    + +

    We will use a basic accumulated bar graphs with a text scale and integer y-scale. + The remainder of the script should be fairly self explanatory since this is a + straightforward graph with no "tricks".

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +
    <?php
    +/**
    +* Class SpamGraph
    +*/
    +class SpamGraph {
    +    private $iWidth, $iHeight;
    +    /**
    +    * Constructor
    +    * 
    +    * @param $aWidth Width of generated graph
    +    * @param $aHeight Height of generated graph
    +    * @return SpamGraph 
    +    */
    +    public function __construct($aWidth,$aHeight) {
    +        $this->iWidth = $aWidth;
    +        $this->iHeight = $aHeight;
    +    } 
    +    /**
    +    * Create an accumulated bar graph
    +    * 
    +    * @param string $aFile File to write graph to
    +    * @param array $aXData Date x-labels
    +    * @param array $aYData Spam data 1 (/dev/null)
    +    * @param array $aY2Data Spam data 2 (Spam folder)
    +    */
    +    public function Create($aFile,$aXData,$aYData,$aY2Data) {
    + 
    +        $graph = new Graph($this->iWidth,$this->iHeight);    
    +        $graph->SetMargin(40,20,50,110); 
    +        $graph->SetScale('textint');
    +        $graph->SetMarginColor('khaki2@0.6');
    + 
    +        $graph->legend->SetPos(0.5,0.97,'center','bottom');
    +        $graph->legend->SetLayout(10);
    +        $graph->legend->SetFillColor('white');
    +        $graph->legend->SetFont(FF_ARIAL,FS_NORMAL,10);
    + 
    +        $graph->title->Set('Identified spams');
    +        $graph->title->SetMargin(10);
    +        $graph->title->SetFont(FF_ARIAL,FS_NORMAL,14);
    + 
    +        $graph->subtitle->Set('(Updated: '.date('j M Y, H:i'.' T)'));
    +        $graph->subtitle->SetMargin(5);
    +        $graph->subtitle->SetFont(FF_ARIAL,FS_ITALIC,11);
    + 
    +        $graph->xaxis->SetTickLabels($aXData);
    +        $graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8);
    +        $graph->xaxis->SetLabelAngle(45);
    + 
    +        $graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,10);
    +        $graph->yscale->SetGrace(10);
    + 
    +        $bar1 = new BarPlot($aYData);
    +        $bar1->SetFillGradient('darkred:1.2','darkred:0.7',GRAD_VER);
    +        $bar1->SetLegend('To "/dev/null"');
    + 
    +        $bar2 = new BarPlot($aY2Data);
    +        $bar2->SetFillGradient('orange','orange:0.7',GRAD_VER);
    +        $bar2->SetLegend('To Spam folder');
    + 
    +        $abar = new AccBarPlot(array($bar1,$bar2));
    +        $abar->value->Show();
    +        $abar->value->SetFormat('%d');
    +        $graph->Add($abar);
    +        $graph->Stroke($aFile);
    +        
    +        syslog(LOG_INFO,"Created spam image in $aFile."); 
    +    }
    +}
    +  
    +?>

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch34s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch34s04.html new file mode 100755 index 00000000..12d1db17 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch34s04.html @@ -0,0 +1,119 @@ +Step 3: Uploading the image file to a server

    Step 3: Uploading the image file to a server

    + +

    This class assumes that PHP has been built with support for FTP. Since the script + is straightforward we do not discuss it any more in details other than noting that + we use the default system logger to store information that we have uploaded the file + successfully. This is done via the PHP method syslog().

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +
    <?php
    +/**
    +* Class FTPUploader
    +*/
    +class FTPUploader {
    +    private $iserver='', $iuid='',$ipwd='';
    +    /**
    +     * Creat new instance of the FTP uploader class
    +     * 
    +     * @param $aServer The URI for the server
    +     * @param $aUID The ftp user id
    +     * @param $aPWD The ftp user password
    +     * @return FTPUploader
    +     */
    +    function __construct($aServer,$aUID,$aPWD) {
    +        $this->iserver = $aServer;
    +        $this->iuid = $aUID;
    +        $this->ipwd = $aPWD;   
    +    }
    +    /**
    +     * Upload the specified file to the given directory on the server
    +     * 
    +     * @param $aFile Name and path of file to uploads
    +     * @param $aUploadDir The directory on the server where the file should be stored
    +     */
    +    function Upload($aFile,$aUploadDir) {
    +        $conn_id = @ftp_connect($this->iserver);
    +        
    +        if ( !$conn_id ) {
    +            JpGraphError::Raise("FTP connection failed.\nAttempted to connect to {$this->iserver} for user {$this->iuid}.");
    +        }
    + 
    +        $login_result = ftp_login($conn_id, $this->iuid, $this->ipwd);
    +        if ((!$conn_id) || (!$login_result)) {
    +            JpGraphError::Raise("FTP login has failed.\nAttempted to connect to {$this->iserver} for user {$this->iuid}.",3);
    +        }
    +                 
    +        syslog(LOG_INFO,JpGraphError::GetTitle()."Connected to {$this->iserver}");
    +        
    +        // Delete potential old file
    +        $ftp_file = $aUploadDir.basename($aFile);
    +        $res = @ftp_delete($conn_id,$ftp_file);
    +        
    +        // Upload new image
    +        $upload = ftp_put($conn_id, $ftp_file, $aFile, FTP_BINARY);
    +        if (!$upload) {
    +            JpGraphError::Raise("FTP upload of image failed.");
    +        }
    +                 
    +        syslog(LOG_INFO,JpGraphError::GetTitle()."Succesfully uploaded $aFile to {$this->iserver}.");
    +        
    +        @ftp_close($conn_id);        
    +    } 
    +}  
    +?>

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch34s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch34s05.html new file mode 100755 index 00000000..a15993ac --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch34s05.html @@ -0,0 +1,576 @@ +Step 0: The full driver script

    Step 0: The full driver script

    + +

    For completeness we also include the exact main script we use

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    +229
    +230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    +245
    +246
    +247
    +248
    +249
    +250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +258
    +259
    +260
    +261
    +262
    +263
    +264
    +265
    +266
    +267
    +268
    +269
    +270
    +271
    +272
    +273
    +274
    +275
    +276
    +277
    +278
    +279
    +280
    +281
    +282
    +283
    +284
    +285
    +
    #!/usr/bin/php
    +<?php
    +require_once 'jpgraph/jpgraph.php';
    +require_once 'jpgraph/jpgraph_bar.php';
    +require_once 'jpgraph/jpgraph_line.php';
    + 
    +DEFINE('FTP_SERVER','aditus.nu');
    +DEFINE('FTP_UID','aditus');
    +DEFINE('FTP_PWD','Psion3a');
    + 
    +DEFINE('PROCMAIL_LOGFILE','/tmp/procmail-ljp-200907.log');
    +DEFINE('WINDOWSIZE',14); // nbr days window
    +DEFINE('IMGFILE','/tmp/spamstat.png');
    + 
    +DEFINE('FTP_DIR','www/jpgraph/img/');
    + 
    +// Don't use image error handler, use syslog
    +JpGraphError::SetImageFlag(false);
    +JpGraphError::SetLogFile('syslog');
    + 
    +/**
    +* Class ParseProcmailLogFile
    +*/
    +class ParseProcmailLogFile {
    +    private $iFileName='';
    +    /**
    +    * Constructor for the parse class
    +    *
    +    * @param mixed $aFileName  Log file to read
    +    * @return ParseProcmailLogFile
    +    */
    +    function __construct($aFileName) {
    +        $this->iFileName = $aFileName ;
    +    }
    +    /**
    +    * Get line without trailing "\n"
    +    *
    +    * @param mixed $fp Filepointer
    +    * @return string Read line without trailing "\n"
    +    */
    +    function GetLine($fp) {
    +        $s = fgets($fp);
    +        return substr($s,0,strlen($s)-1);
    +    }
    +    /**
    +    * Get statistics from the parsed log file
    +    *
    +    * @param $aWindow Window size. How many days to include in the returned stats
    +    * @return array with (date, number of killed spam, number of non killed spams)
    +    */
    +    function GetStat($aWindow) {
    + 
    +        $fp = fopen($this->iFileName,'r');
    +        if( $fp === false ) {
    +            JpGraphError::Raise('Cannot read log file');
    +        }
    + 
    +        // Now loop through the file. We always keep the last 3 lines in
    +        // the buffer to be able to get the context of a line since the
    +        // folder is stored on one line and the date of the main on the
    +        // previous line
    +        $buf[1] = $this->GetLine($fp);
    +        $buf[2] = $this->GetLine($fp);
    + 
    +        $idx = 0;
    +        $idx2 = 0;
    +        $found = array(); // All /dev/null spam headers
    +        $found2 = array(); // All Spam folder headers
    + 
    +        // Loop through all lines in the file and store the found emails
    +        // in the two $found arrays
    +        while( ! feof($fp) ) {
    + 
    +            //Shift buffer one step
    +            $buf[0] = $buf[1];
    +            $buf[1] = $buf[2];
    +            $buf[2] = $this->GetLine($fp);
    + 
    +            // Find /dev/null entries
    +            if( strpos($buf[2],'Folder: /dev/null') !== false ) {
    +                if( strpos($buf[0],'From ') !== false ) {
    +                    $datepos = 0 ;
    +                }
    +                elseif( strpos($buf[1],'From ') !== false ) {
    +                    $datepos = 1 ;
    +                }
    +                else {
    +                    continue;
    +                }
    +                $date = strtotime(date('D j M Y',strtotime(substr($buf[$datepos],-24))));
    +                $found[$idx++] = array(str_replace(' Subject: ','',$buf[1]),$date);
    +            }
    + 
    +            // Find spam folder entries
    +            if( strpos($buf[2],'.Spam') !== false ) {
    +                if( strpos($buf[0],'From ') !== false ) {
    +                    $datepos = 0 ;
    +                }
    +                elseif( strpos($buf[1],'From ') !== false ) {
    +                    $datepos = 1 ;
    +                }
    +                else {
    +                    continue;
    +                }
    +                $date = strtotime(date('D j M Y',strtotime(substr($buf[$datepos],-24))));
    +                $found2[$idx2++] = array(str_replace(' Subject: ','',$buf[1]),$date);
    +            }
    + 
    +        }
    + 
    +        fclose($fp);
    + 
    +        // Find out how many at each day of dev null
    +        $date = $found[0][1];
    +        $daystat[$date] = 0;
    + 
    +        for($i=0; $i < $idx; ++$i ) {
    +            if( $date == $found[$i][1] ) {
    +                ++$daystat[$date];
    +            }
    +            else {
    +                $date = $found[$i][1];
    +                $daystat[$date] = 1;
    +            }
    +        }
    + 
    +        // Find out how many at each day of spam
    +        $daystat2 = array();
    +        if( count($found2) > 0 ) {
    +            $date = $found2[0][1];
    +            $daystat2[$date] = 0;
    + 
    +            for($i=0; $i < $idx2; ++$i ) {
    +                if( $date == $found2[$i][1] ) {
    +                    ++$daystat2[$date];
    +                }
    +                else {
    +                    $date = $found2[$i][1];
    +                    $daystat2[$date] = 1;
    +                }
    +            }
    +        }
    + 
    +        // Now make sure that both arrays have the same
    +        // number of entries.
    +        foreach( $daystat as $key => $val ) {
    +            if( !isset($daystat2[$key]) ) {
    +                $daystat2[$key] = 0;
    +            }
    +        }
    + 
    +        foreach( $daystat2 as $key => $val ) {
    +            if( !isset($daystat[$key]) ) {
    +                $daystat[$key] = 0;
    +            }
    +        }
    + 
    +        // Window and return the data
    +        $n = count($daystat);
    +        $start = $n > $aWindow ? $n - $aWindow : 0;
    +        $date_keys = array_keys($daystat);
    +        $idx=0;
    + 
    +        $datax = array(); $datay1 = array(); $datay2 = array();
    +        for( $i=$start; $i < $n; ++$i ) {
    +            $datax[$idx] = date('D j M',$date_keys[$i]);
    +            $datay1[$idx] = $daystat[$date_keys[$i]];
    +            $datay2[$idx++] = $daystat2[$date_keys[$i]];
    +        }
    + 
    +        return array($datax,$datay1,$datay2);
    +    }
    +}
    +/**
    +* Class SpamGraph
    +*/
    +class SpamGraph {
    +    /**
    +    * Create an accumulated bar graph
    +    *
    +    * @param mixed $aFile File to write graph to
    +    * @param mixed $aXData Date x-labels
    +    * @param mixed $aYData Spam data 1 (/dev/null)
    +    * @param mixed $aY2Data Spam data 2 (Spam folder)
    +    */
    +    static function Create($aFile,$aXData,$aYData,$aY2Data) {
    + 
    +        $graph = new Graph(650,420);
    +        $graph->SetMargin(40,20,50,110);
    +        $graph->SetScale('textint');
    +        $graph->SetMarginColor('khaki2@0.6');
    + 
    +        $graph->legend->SetPos(0.5,0.97,'center','bottom');
    +        $graph->legend->SetLayout(10);
    +        $graph->legend->SetFillColor('white');
    +        $graph->legend->SetFont(FF_ARIAL,FS_NORMAL,10);
    + 
    +        $graph->title->Set('Identified spams');
    +        $graph->title->SetMargin(10);
    +        $graph->title->SetFont(FF_ARIAL,FS_NORMAL,14);
    + 
    +        $graph->subtitle->Set('(Updated: '.date('j M Y, H:i'.' T)'));
    +        $graph->subtitle->SetMargin(5);
    +        $graph->subtitle->SetFont(FF_ARIAL,FS_ITALIC,11);
    + 
    +        $graph->xaxis->SetTickLabels($aXData);
    +        $graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8);
    +        $graph->xaxis->SetLabelAngle(45);
    + 
    +        $graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,10);
    +        $graph->yscale->SetGrace(10);
    + 
    +        $bar1 = new BarPlot($aYData);
    +        $bar1->SetFillGradient('darkred:1.2','darkred:0.7',GRAD_VER);
    +        $bar1->SetLegend('To "/dev/null"');
    + 
    +        $bar2 = new BarPlot($aY2Data);
    +        $bar2->SetFillGradient('orange','orange:0.7',GRAD_VER);
    +        $bar2->SetLegend('To Spam folder');
    + 
    +        $abar = new AccBarPlot(array($bar1,$bar2));
    +        $abar->value->Show();
    +        $abar->value->SetFormat('%d');
    +        $graph->Add($abar);
    +        $graph->Stroke($aFile);
    +        syslog(LOG_INFO,"Created spam image in $aFile.");
    +    }
    +}
    +/**
    +* Class FTP
    +*/
    +class FTP {
    +    private $iserver='', $iuid='',$ipwd='';
    +    function __construct($aServer,$aUID,$aPWD) {
    +        $this->iserver = $aServer;
    +        $this->iuid = $aUID;
    +        $this->ipwd = $aPWD;
    +    }
    +    function Upload($aFile,$aUploadDir) {
    +        $conn_id = @ftp_connect($this->iserver);
    + 
    +        if ( !$conn_id ) {
    +            JpGraphError::Raise("FTP connection failed.\nAttempted to connect to {$this->iserver} for user {$this->iuid}.");
    +        } else {
    +            syslog(LOG_INFO,"Connected to {$this->iserver}");
    +        }
    +        $login_result = ftp_login($conn_id, $this->iuid, $this->ipwd);
    +        if ((!$conn_id) || (!$login_result)) {
    +            JpGraphError::Raise("FTP login has failed.\nAttempted to connect to {$this->iserver} for user {$this->iuid}.",3);
    +        } else {
    +            syslog(LOG_INFO,"Logged in to {$this->iserver}");
    +        }
    + 
    +        // Delete potential old file
    +        $ftp_file = $aUploadDir.basename($aFile);
    +        $res = @ftp_delete($conn_id,$ftp_file);
    +        syslog(LOG_INFO,"Uploading image as $aFile");
    + 
    +        // Upload new image
    +        $upload = ftp_put($conn_id, $ftp_file, $aFile, FTP_BINARY);
    +        if (!$upload) {
    +            JpGraphError::Raise("FTP upload of image failed.");
    +        } else {
    +            syslog(LOG_INFO,"Succesfully uploaded $aFile to {$this->iserver}.");
    +        }
    + 
    +        @ftp_close($conn_id);
    +    }
    +}
    + 
    +// Step 1) Get the statistics
    +$parser = new ParseProcmailLogFile(PROCMAIL_LOGFILE);
    +list($xdata, $ydata, $y2data) = $parser->GetStat(WINDOWSIZE);
    + 
    + 
    +// Step 2) Create the graph
    +SpamGraph::Create(IMGFILE,$xdata,$ydata,$y2data);
    + 
    +// Step 3) Upload the file if defined
    +if( IMGFILE !== '' ) {
    +    $ftp = new FTP(FTP_SERVER,FTP_UID,FTP_PWD);
    +    $ftp->Upload(IMGFILE,FTP_DIR);
    +}
    + 
    +?>

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch35.html b/Societes/ric/jpgraph/docs/chunkhtml/ch35.html new file mode 100755 index 00000000..81ac8b22 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch35.html @@ -0,0 +1,177 @@ +Chapter 35. Creating Critical chain buffer penetration charts

    Chapter 35. Creating Critical chain buffer penetration charts

    + +

    Introduction and purpose

    + +

    Critical chain is one (of many) suggested principles for project management that + actually makes some sense in the meaning that it tries to take into account both the + human aspect of making time estimates (it is difficult) as well as the different + constraints put upon (for example) a SW project. Such constraints are typically that + there are only two persons with the knowledge to do task X or that task Y has never + been done before and therefore is almost impossible to estimate correctly.

    +

    Since this manual has no intention to serve as an introduction to full critical + chain project management (CCPM) we will not dwell on the finer details instead we + will take out one particular part, or rather a tool, that is one of the fundamental + ways of keeping track of a projects using CCPM. The buffer penetration chart.

    +

    Even though CCPM in general might not be of interest to the reader the particular + graph we will create is s good way to show how to think "out-of-the-box" in creating + some graphs with the this library. So it is fully possible to read this case without + understanding the underlying methodology.

    +

    The graph we will create makes use of ( among other things)

    +

    +

    • +

      Filled area graphs combined with scatter plots

      +
    • +

      Showing how to modify the default fill behavior (from the + x-axis)

      +
    • +

      Showing how to disable the 0-labels

      +
    • +

      Adjusting the display depth for grid lines (and changing the styler of + grid lines)

      +
    • +

      Using different colors on individual scale labels

      +
    • +

      How to create a custom graph class that can be reused

      +

    +

    +

    Figure 35.1. Critical chain buffer penetration. Each white scatter dot represents the + state of one task. shows a typical example of what we will + accomplish by the end of this case study

    +

    Figure 35.1. Critical chain buffer penetration. Each white scatter dot represents the + state of one task.

    + +
    Critical chain buffer penetration. Each white scatter dot represents the state of one task.
    +

    +

    The principle behind buffer penetration charts

    + +

    While not strictly necessary in order to create the graph the following crash + course on buffer penetration might help see the usefulness of these types of + charts in large projects.

    +

    +

    Note

    +

    Those wanting to know more about Critical Chain planning are referred + to the book and online references at the end of this chapter, see [1] Critical chain Project Management, 2ed, Lawrence P. Leach and [2] A Guide to Implementing the Theory of Constraints, K. J. Youngman, .

    +

    +

    +

    To understand the principles of this graph we need to shortly discuss how task + (time) estimation is done using the CC methodology. Time estimation for a task + is divided in two parts; 1) the optimum time and 2) the contingency buffer. + Together they will make up the allocated time for a task. On average each task + is expected to make use of some of the contingency buffer (typically as much as + 50-75%).

    +

    This might seem very strange for people with experience with other + methodologies where use of contingency time is an indication of some kind of + failure. However, that is not the case in CCPM. The usage of (some) of the + allocated buffers are expected. This comes from the way the buffer and the + "optimum" time are estimated. The optimum time is a 50% estimate, meaning that + the task is only expected to be able to go that fast in 50% of all the times the + task is performed. Hence a very optimistic estimate. With the contingency buffer + added the estimate should correspond to a 90% estimate, i.e. in 90% of the times + the task is performed it will finish within this time.

    +

    The graph in Figure 35.1. Critical chain buffer penetration. Each white scatter dot represents the + state of one task. is a way to visualise the + status of an entire project in terms of buffer penetration. The x-axis shows how + much of a particular task is completed and the y-axis shows how much buffer up + to now have been used. Another way of viewing this is to show how far off the + optimum 50% time estimate for the task we are in practice.

    +

    The different colored background is a "health" monitor for the tasks. As long + as a task is in the green area that task is not in the focus for corrective + actions. However as the task moves from green through yellow and into the red + this is a signal that immediate actions are needed to secure the end delivery + time. If a task has gone into the dark red (or brown) area this is an indication + that corrective actions are probably not going to help and a re-planning of the + task (and potentially the project is needed). Hence we do not want any tasks in + the brown area!

    +

    The exact limits for what is considered "green", "yellow" and "red" varies + depending on the context and to some degree the flexibility and size of the team + but the default values shown above represents a fairly average limits that have + been shown to be useful indicators across several industries.

    +

    The final key to why this works fairly well in practice is that each team + member only have to report one figure in order to track the progress he or she + is making and that is how much time more he or she will need to complete the + task. Since we now at what day the team member made the estimate we have all the + information we need in order to update the plans to see how well we are tracking + the original plan.

    +

    With the CC methodology we do not bother looking in the mirror and asking the + team member to estimate how much of the task he or she has done because that is + really irrelevant. The only key figure we need to complete the project on time + is to how much more effort/time is needed from the team member. How much of the + task has been completed can easily be calculated by knowing how much time is + left and compare that with the original estimate. For example, if the original + estimate was12 days and the team member at a particular day estimates that + he/she has 10 days left we can say that we have completed (12-10)/12 ~ 17% of + the task.

    +

    This also explains how it can come that we could get negative completion. This + is just an indication that the original estimate was too low. For example if the + task was originally estimated to 12 days and at a particular day the team member + estimates that he/she will need at least 16 more days to complete the task the + completion % would be (12-16)/12 ~ -33%

    +

    An example will illustrate how this works.

    +

    +

    Example 35.1. Buffer penetration example

    + +

    Assume we have one task that has a 50% estimate of 6 days and a buffer + of 5 days (indicating the volatility in the 50% estimate). The following + table shows how much time left the team member estimates he has at the + end of each working day. This single number allows us to compute (in + relation to the original estimate) how much of the task is completed and + how much buffer the member has used.

    +

    +

    +
    Day +

    Est. time left

    +

    (days)

    +
    +

    Completion

    +

    %

    +
    +

    Buffer penetration

    +

    (days)

    +
    +

    Buffer penetration

    +

    (%)

    +
    15000
    25(6-5)/6 ~ 17%11/5 = 20%
    35(6-5)/6 ~17%22/5 = 40%
    45(6-5)/6 ~ 17%33/5 = 60%
    54(6-4)/6 ~ 33%33/5 = 60%
    63(6-3)/6 ~ 50%33/5 = 60%
    72(6-2)/6 ~ 67%33/5 = 60%
    81(6-1)/6 ~ 83 %33/5 = 60%
    90(6-0)/6 = 100%33/5 = 60%
    +

    +

    +

    The following three (small) buffer penetration diagram shows how the + task at end of days 2,5 and 8

    +

    Figure 35.2. Buffer penetration chart for example

    + +
    Buffer penetration chart for example
    +

    +

    Figure 35.2. Buffer penetration chart for example hows a fairly typical + (albeit not ideal) progress for a task. It gets a rocky start, has some + problems halfway through and then manages to recover towards the end of + the execution.

    +

    A common extension to the graph above is to also add a "historic" tail + to the scatter point to show how it historically has moved. Adding a + historic "tail" at day 8 would give the following penetration + chart

    +

    Figure 35.3. Buffer penetration chart with "historic" tail

    + +
    Buffer penetration chart with "historic" tail
    +

    +


    +

    +

    For an entire project these kind of "falling star" traces can be quite + effective ways to see how tasks are progressing. We end this chapter with a + final complete example (which uses the code we will develop in the following + sections) to create a buffer chart for two tasks.

    +

    +

    Figure 35.4. Complete buffer penetration example with history trace (ccbp_ex1.php)

    Complete buffer penetration example with history trace (ccbp_ex1.php)


    +

    +

    We can also use the alternative color map for this and get the result shown in + Figure 35.5. Using the alternative color map (ccbp_ex2.php)

    +

    +

    Figure 35.5. Using the alternative color map (ccbp_ex2.php)

    Using the alternative color map (ccbp_ex2.php)


    +

    +

    The next section will explain in some details how to create a class that can + mae these types of charts with an easy to use interface.

    +
    +
    + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch35s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch35s02.html new file mode 100755 index 00000000..70054370 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch35s02.html @@ -0,0 +1,229 @@ +Creating a utility class to construct CC BP charts

    Creating a utility class to construct CC BP charts

    + +

    We will start from a high level and think about how we would like to be able to + use such a utility class. Ideally it would be similar to other types of graphs + classes. To keep things simple we want the following parameter to be + adjustable

    +

    +

    • +

      The min and max x- and y-axis scale values to be displayed in the + graph

      +
    • +

      The limits for the color indications, i.e. exactly what is the green, + yellow, red and brown areas should be customizable. In oder to keep the + interface simple we assume that the areas are bounded by straight lines + and that we want to be able to specify the areas by stating the value at + x=0 and the value at x=maximum x-scale

      +

      So for example the standard green area is limited by the specification + (5,75) meaning that the green line crosses y=5 at x=0 and y=75 at + x=100

      +
    • +

      We would also like to be ale to adjust the colors used as + indicators

      +
    • +

      We want to be able to add both scatter marks and lines (to show + history)

      +
    • +

      We also need to be able to specify the title and the sub title

      +
    • +

      The rest of the graph options and setting we would like the utility + class to handle for us. As a bonus it would be nice if the class + adjusted the size of the fonts to the overall size we have specified for + the graph automatically to make it look visually proportional.

      +

    +

    +

    When doing designs like this it is always good to first write a small test driver + without having to think about how to actually implement it. This keeps an end user + perspective on things. Later on we can do changes if it turns out that a particular + simplification for the user is simply too complex to implement.

    +

    So, lets think about how we (ideally) would like to be able to create the chart + shown in Figure 35.3. Buffer penetration chart with "historic" tail

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php
    +$graph = new CCBPGraph(300,250);
    +$graph->SetTitle('Buffer penetration','(history)');
    + 
    +$datax=array(83); $datay=array(60);
    +$datax_history = array(0,17,17,17,33,50,67,83); 
    +$datay_history = array(0,20,40,60,60,60,60,60);
    + 
    +$sp = new ScatterPlot($datay,$datax);
    +$sp->mark->SetType(MARK_DIAMOND);
    +$sp->mark->SetFillColor('white');
    +$sp->mark->SetSize(10);
    + 
    +$sp_hist = new LinePlot($datay2,$datax2);
    +$sp_hist->SetWeight(2);
    +$sp_hist->SetColor('black');
    + 
    +$graph->Add($sp_hist);
    +$graph->Add($sp);
    + 
    +$graph->Stroke();
    +?>

    +

    +

    We cannot hope to have the class make it any simpler than this. This is as close + to a "normal" line graph we can get (apart from the color indications in the + background). So now its just a matter on designing this class.

    +

    Since the utility class will be a rather restricted graph class it with a very + specific usage it doesn't make sense to implement it as an extension to the normal + graph. Instead we will create contain class that contains a graph that we can modify + and setup. (In UML language a has-a + relation.)

    +

    We will name our utility class CCBPGraph (Short for Critical chain Buffer Penetration Graph). The class + should have the following signature

    +

    +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php
    +class CCBPGraph{ 
    +    private $graph = null ; // The real graph instance
    + 
    +    // The "normal" constructor
    +    public function __construct($aWidth,$aHeight) {}
    + 
    +    // Methods that will control the appearance
    +    public function SetTitle($aTitle,$aSubTitle) {}
    +    public function SetXMinMax($aMin,$aMax) {}
    +    public function SetYMinMax($aMin,$aMax) {}
    +    public function SetColorIndication($aSpec,$aColors=null) {}
    +    public function SetColorMap($aMap) {}
    +    
    +    // Internal function to create and setup the graph
    +    private function Init() {}
    +    
    +    // Mimix the standard graph functions Add() and Stroke()
    +    public function Add($aPlots) {}
    +    public function Stroke($aFile='') {}
    +}
    +?>

    +

    +

    In addition the class must have a number of instance variables that are used to + store the settings until we need them when we create the graph. However to keep + things simple here we do not list them above. Lets now walk through the four groups + of methods.

    +

    +

    1. +

      The constructor

      +

      +

      public function __construct($aWidth,$aHeight) {}

      +

      +

      The constructor doesn't need to do very much. It just needs to store + the user specified width and height so we get them back when we create + the actual graph. We could also make use of the constructor to create an + instance of the real graph class but we prefer to do as late as possible + instantiation.

      +
    2. +

      Controlling the appearance of the graph.

      +

      Again these methods will be very basic "setter" methods that will just + store the user specified options until we need them when we construct + the graph

      +

      +

      public function SetTitle($aTitle,$aSubTitle) {} 
      +public function SetXMinMax($aMin,$aMax) {} 
      +public function SetYMinMax($aMin,$aMax) {} 
      +public function SetColorIndication($aSpec,$aColors=null) {}
      +public function SetColorMap($aMap) {}

      +

      +

      For the color setter we should also add some basic error checking so + that the parameter makes sense.

      +
    3. +

      The real worker method

      +

      +

      private function Init() {}

      +

      +

      Since this is the method is where we will do the actual work and will + be fairly large we will spend the entire next section on this + method.

      +
    4. +

      The "fake" standard methods. Add() and Stroke(). Since these are + fairly short we will show them here in there entirety

      +

      +

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +
      <?php
      +function Add($aPlots) {
      +    if( is_array($aPlots) ) {
      +        $this->iPlots = array_merge($this->iPlots,$aPlots);                
      +    }
      +    else {
      +        $this->iPlots[] = $aPlots;
      +    }
      +}
      +    
      +function Stroke($aFile='') {
      +    $this->Init();
      +    $this->graph->Add($this->iPlots);
      +    $this->graph->Stroke($aFile);
      +}
      +?>

      +

      +

      When adding plots (with the Add() method) we have to take + into account that the parameter can be either a single object or an + array of plot objects (line and scatter plots) and we must handle that + accordingly as is done above.

      +

      For the Stroke() method we use this to call the + initialization method (to actually create the graph) and then add the + user specified plots and finally call the real + Graph::Stroke() of the graph.

      +

      These methods are very simple but from the outside it will look like a + "real" graph class with a clean and simple interface.

      +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch35s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch35s03.html new file mode 100755 index 00000000..3ace0d50 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch35s03.html @@ -0,0 +1,33 @@ +The Init() method

    The Init() method

    + +

    This is the real method that actually constructs the graph. While we will not go + through every single line in details we will highlight the complications and some + formatting options we have used.

    +

    Creating the colored backgrounds

    + +

    In order to create the colored background we create filled area plots and add + them to the graph. Starting with the "brown" and successively adding the rest to + create the colored band effect we want. Figure 35.6. Steps to create the background shows in "slow-motion" how this is + done by adding four area plots, one at a time.

    +

    Figure 35.6. Steps to create the background

    + +
    Steps to create the background
    +

    +

    The exact position for the lines are calculated with the positions given for + each color band. The position for each color band is specified by giving the + y-coordinate at x=0 and the y-coordinate at the maximum x-scale value.

    +

    When adding the area plots there is one thing we have to modify. By default + the fill is done between the line and the y=0 line. In our case we need the fill + to go all the way down to the min y-value. To change this behavior we need to + call the method

    +

    +

    • +

      LinePlot::SetFillFromYMin()

      +

    +

    +

    for each of the areas.

    +
    + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch35s03s02.html b/Societes/ric/jpgraph/docs/chunkhtml/ch35s03s02.html new file mode 100755 index 00000000..d1e8b0a2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch35s03s02.html @@ -0,0 +1,21 @@ +Getting the grid lines right

    Getting the grid lines right

    + +

    Since we want some discrete horizontal grid lines we might think that it is + enough to do the normal

    +

    +

    1
    +
    $graph->ygrid->Show();

    +

    +

    However, doing that will not show any grid lines. The reason is hat by default + the grid lines are drawn at the bottom of the plot. Since we have filled area + plots covering 100% of the pot area no grid lines would show. In order to change + this we need to move the grid line to the front with a call to the method

    +

    +

    • +

      Graph::SetGridDepth($aDepth)

      +

    +

    +

    using the argument DEPTH_FRONT. The rest of the grid line + formatting is just basic style and color modification to make the grid visible + but just barely.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch35s03s03.html b/Societes/ric/jpgraph/docs/chunkhtml/ch35s03s03.html new file mode 100755 index 00000000..d484485d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch35s03s03.html @@ -0,0 +1,24 @@ +Getting the scale and labels right

    Getting the scale and labels right

    + +

    For this type of graph we have manually set the distance between each tick + label to 25 units. This would put labels as 0,25,50, and so on. The maximum + value (the user specifies) will be adjusted so that it is always an even + multiple of 25 to allow the last tick mark to be at the end of the axis.

    +

    As can be seen from the previous images we are using one feature that hasn't + been previously exemplified and that is the possibility to have unique colors on + each label on the scale. We use this for the x-scale by having the negative + labels in black and the positive labels in white. The reason is purely + functional to allow the scale labels to be more easy to read against the colored + background.

    +

    The color of the labels are specified as the second argument to

    +

    +

    • +

      Axis::SetColor($aAxisColor,$aLabelColor)

      +

    +

    +

    In addition we have also hidden the zero labels since they would just be + disturbing in the middle and doesn't really add any information we don't already + have.

    +

    Finally the labels are formatted to show a percentage sign after each label. + This is done by a format string

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch35s03s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch35s03s04.html new file mode 100755 index 00000000..522169fa --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch35s03s04.html @@ -0,0 +1,8 @@ +Adjusting the margin and text sizes

    Adjusting the margin and text sizes

    + +

    In the beginning of the Init() method the margins for the graph + is adjusted depending on the actual size the user specified. The same goes with + establishing the basic font size used for the scale labels as well as the titles + (both graph and axis). The size is just based on heuristics on what (in our + view) gives a well balanced graph.

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch35s04.html b/Societes/ric/jpgraph/docs/chunkhtml/ch35s04.html new file mode 100755 index 00000000..abc04144 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch35s04.html @@ -0,0 +1,34 @@ +Suggested improvements

    Suggested improvements

    + +

    As means for further individual exploration the CCBPGraph class could + be extended by adding (for example) the following features. (There is always a + balance to be had between adding a lot of feature and still keeping the interface + simple enough to be manageable)

    +

    +

    1. +

      Add customization for the titles of the two axis

      +
    2. +

      Make it possible to adjust the margin color

      +
    3. +

      Make the number of background color bands user adjustable

      +
    4. +

      Add data manipulation so that the input data is specified as a number + of historic values for each task. The latest value should be displayed + as a mark and the last n values (user + selectable window size) shown as a trailing path behind the mark to see + how it has moved as shown in for example Figure 35.4. Complete buffer penetration example with history trace (ccbp_ex1.php)

      +
    5. +

      Make use of the MGraph class to make it possible to + create multiple CCBP charts in the same image. In order to identify + which graph is affected by commands ti would be possible to just add a + new argument giving the index to all the existing methods. However, a + cleaner implementation would probably use the concept of a "current" + graph which receives all the method calls. Implementing it that way + would allow us to keep the existing signatures for all existing methods. + In order to position the graphs it is probably a good idea to make use + of some easy way for the user just to select how many rows should be + used and many charts should be displayed on each row (to avoid the end + user from having to position the graphs pixel by pixel)

      +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch35s05.html b/Societes/ric/jpgraph/docs/chunkhtml/ch35s05.html new file mode 100755 index 00000000..1e6643cf --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch35s05.html @@ -0,0 +1,524 @@ +The implementation of class CCBPGraph

    The implementation of class CCBPGraph

    + +

    The entire implementation is included below and is also available en the + "Example/" directory of the distribution as + "ccbpgraph.class.php". There are also two example scripts + using this utility class "ccbp_ex1.php" and + "ccbp_ex2.php"

    +

    +

    Example 35.2.  (ccbpgraph.class.php)

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    +229
    +230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    +245
    +246
    +247
    +248
    +249
    +250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +
    <?php // content="text/plain; charset=utf-8" 
    +/**
    +* Class CCBPGraph
    +* Utility class to create Critical Chain Buffer penetration charts
    +*/
    +class CCBPGraph {
    +    const TickStep = 25;
    +    const YTitle = '% Buffer used';
    +    const XTitle = '% CC Completed';
    +    const NColorMaps = 2;
    +    private $graph=null;
    +    private $iWidth,$iHeight;
    +    private $iPlots=array();
    +    private $iXMin=-50, $iXMax = 100;
    +    private $iYMin=-50, $iYMax = 150;
    +    private $iColorInd = array( 
    +        array(5,75),   /* Green */
    +        array(25,85),  /* Yellow */
    +        array(50,100));/* Red */ 
    +    private $iColorMap = 0;
    +    private $iColorSpec = array(
    +                array('darkgreen:1.0','yellow:1.4','red:0.8','darkred:0.85'),
    +                array('#c6e9af','#ffeeaa','#ffaaaa','#de8787'));
    +    private $iMarginColor = array('darkgreen@0.7','darkgreen@0.9');                
    +    private $iSubTitle='',$iTitle = 'CC Buffer penetration';
    +    /**
    +    * Construct a new instance of CCBPGraph 
    +    * 
    +    * @param int $aWidth
    +    * @param int $aHeight
    +    * @return CCBPGraph
    +    */
    +    public function __construct($aWidth, $aHeight) {
    +        $this->iWidth = $aWidth;
    +        $this->iHeight = $aHeight;
    +    }
    +    /**
    +    * Set the title and subtitle for the graph
    +    * 
    +    * @param string $aTitle
    +    * @param string $aSubTitle
    +    */
    +    public function SetTitle($aTitle, $aSubTitle) {
    +        $this->iTitle = $aTitle;
    +        $this->iSubTitle = $aSubTitle;
    +    }
    +    /**
    +    * Set the x-axis min and max values
    +    * 
    +    * @param int $aMin
    +    * @param int $aMax
    +    */
    +    public function SetXMinMax($aMin, $aMax) {
    +        $this->iXMin = floor($aMin/CCBPGraph::TickStep)*CCBPGraph::TickStep;
    +        $this->iXMax = ceil($aMax/CCBPGraph::TickStep)*CCBPGraph::TickStep;
    +    }
    +    /**
    +    * Specify what color map to use
    +    * 
    +    * @param int $aMap
    +    */
    +    public function SetColorMap($aMap) {
    +        $this->iColorMap = $aMap % CCBPGraph::NColorMaps;
    +    }
    +    /**
    +    * Set the y-axis min and max values
    +    * 
    +    * @param int $aMin
    +    * @param int $aMax
    +    */
    +    public function SetYMinMax($aMin,$aMax) {
    +        $this->iYMin = floor($aMin/CCBPGraph::TickStep)*CCBPGraph::TickStep;
    +        $this->iYMax = ceil($aMax/CCBPGraph::TickStep)*CCBPGraph::TickStep;
    +    }
    +    /**
    +    * Set the specification of the color backgrounds and also the
    +    * optional exact colors to be used
    +    * 
    +    * @param mixed $aSpec  An array of 3 1x2 arrays. Each array specify the 
    +    * color indication value at x=0 and x=max x in order to determine the slope
    +    * @param mixed $aColors  An array with four elements specifying the colors
    +    * of each color indicator
    +    */
    +    public function SetColorIndication(array $aSpec,array $aColors=null) {
    +        if( count($aSpec) !== 3 ) {
    +            JpgraphError::Raise('Specification of scale values for background indicators must be an array with three elements.');
    +        }
    +        $this->iColorInd = $aSpec;    
    +        if( $aColors !== null ) {
    +            if( is_array($aColors) && count($aColors) == 4 ) {
    +                $this->iColorSpec = $aColors;
    +            }
    +            else {
    +                JpGraphError::Raise('Color specification for background indication must have four colors.');
    +            }
    +        }        
    +    }
    +    /**
    +    * Construct the graph
    +    * 
    +    */
    +    private function Init() {
    + 
    +        // Setup limits for color indications
    +        $lowx = $this->iXMin; $highx= $this->iXMax;
    +        $lowy = $this->iYMin; $highy = $this->iYMax;
    +         $width=$this->iWidth; $height=$this->iHeight;
    + 
    +        // Margins
    +        $lm=50; $rm=40;
    +        $tm=60; $bm=40;
    +        
    +        if( $width <= 300 || $height <= 250 ) {
    +            $labelsize = 8;
    +            $lm=25; $rm=25;
    +            $tm=45; $bm=25;
    +        }                
    +        elseif( $width <= 450 || $height <= 300 ) {
    +            $labelsize = 8;
    +            $lm=30; $rm=30;
    +            $tm=50; $bm=30;
    +        }
    +        elseif( $width <= 600 || $height <= 400 ) {
    +            $labelsize = 9;        
    +        }
    +        else {
    +            $labelsize = 11;
    +        }    
    +        
    +        if( $this->iSubTitle == '' ) {
    +            $tm -= $labelsize+4;
    +        }     
    + 
    +        $graph = new Graph($width,$height);
    +        $graph->SetScale('intint',$lowy,$highy,$lowx,$highx);
    +        $graph->SetMargin($lm,$rm,$tm,$bm);
    +        $graph->SetMarginColor($this->iMarginColor[$this->iColorMap]);
    +        $graph->SetClipping();
    +        
    +        $graph->title->Set($this->iTitle);
    +        $graph->subtitle->Set($this->iSubTitle);
    +        
    +        $graph->title->SetFont(FF_ARIAL,FS_BOLD,$labelsize+4);
    +        $graph->subtitle->SetFont(FF_ARIAL,FS_BOLD,$labelsize+1);
    +        
    +        $graph->SetBox(true,'black@0.3');
    + 
    +        $graph->xaxis->SetFont(FF_ARIAL,FS_BOLD,$labelsize);
    +        $graph->yaxis->SetFont(FF_ARIAL,FS_BOLD,$labelsize);
    +        
    +        $graph->xaxis->scale->ticks->Set(CCBPGraph::TickStep,CCBPGraph::TickStep);
    +        $graph->yaxis->scale->ticks->Set(CCBPGraph::TickStep,CCBPGraph::TickStep);
    +        
    +        $graph->xaxis->HideZeroLabel();
    +        $graph->yaxis->HideZeroLabel();
    +                
    +        $graph->xaxis->SetLabelFormatString('%d%%');
    +        $graph->yaxis->SetLabelFormatString('%d%%');
    +        
    +        // For the x-axis we adjust the color so labels on the left of the Y-axis are in black
    +        $n1 = floor(abs($this->iXMin/25))+1;
    +        $n2 = floor($this->iXMax/25);
    +        if( $this->iColorMap == 0 ) {
    +            $xlcolors=array();
    +            for( $i = 0; $i < $n1; ++$i ) {
    +                $xlcolors[$i] = 'black';
    +            }
    +            for( $i = 0; $i < $n2; ++$i ) {
    +                $xlcolors[$n1+$i] = 'lightgray:1.5';
    +            }
    +            $graph->xaxis->SetColor('gray',$xlcolors);
    +            $graph->yaxis->SetColor('gray','lightgray:1.5');
    +        }
    +        else {
    +            $graph->xaxis->SetColor('darkgray','darkgray:0.8');
    +            $graph->yaxis->SetColor('darkgray','darkgray:0.8');            
    +        }
    +        $graph->SetGridDepth(DEPTH_FRONT);
    +        $graph->ygrid->SetColor('gray@0.6');
    +        $graph->ygrid->SetLineStyle('dotted');
    +        
    +        $graph->ygrid->Show();
    +        
    +        $graph->xaxis->SetWeight(1);
    +        $graph->yaxis->SetWeight(1);
    +        
    +        $ytitle = new Text(CCBPGraph::YTitle,floor($lm*.75),($height-$tm-$bm)/2+$tm);
    +        #$ytitle->SetFont(FF_VERA,FS_BOLD,$labelsize+1);
    +        $ytitle->SetAlign('right','center');
    +        $ytitle->SetAngle(90);
    +        $graph->Add($ytitle);
    +        
    +        $xtitle = new Text(CCBPGraph::XTitle,($width-$lm-$rm)/2+$lm,$height - 10);
    +        #$xtitle->SetFont(FF_VERA,FS_BOLD,$labelsize);
    +        $xtitle->SetAlign('center','bottom');
    +        $graph->Add($xtitle);
    +        
    +        $df = 'D j:S M, Y'; 
    +        if( $width < 400 ) {
    +            $df = 'D j:S M';
    +        }
    +        
    +        $time = new Text(date($df),$width-10,$height-10);
    +        $time->SetAlign('right','bottom');
    +        #$time->SetFont(FF_VERA,FS_NORMAL,$labelsize-1);
    +        $time->SetColor('darkgray');
    +        $graph->Add($time);
    + 
    +        // Use an accumulated fille line graph to create the colored bands
    +       
    +        $n = 3;
    +        for( $i=0; $i < $n; ++$i ) {
    +            $b = $this->iColorInd[$i][0];
    +            $k = ($this->iColorInd[$i][1] - $this->iColorInd[$i][0])/$this->iXMax;
    +            $colarea[$i] = array( array($lowx,$lowx*$k+$b), array($highx,$highx*$k+$b) );
    +        }
    +        $colarea[3] = array( array($lowx,$highy), array($highx,$highy) );
    +        
    +        
    +        $cb = array();
    +        for( $i=0; $i < 4; ++$i ) {
    +            $cb[$i] = new LinePlot(array($colarea[$i][0][1],$colarea[$i][1][1]),
    +                                   array($colarea[$i][0][0],$colarea[$i][1][0]));
    +            $cb[$i]->SetFillColor($this->iColorSpec[$this->iColorMap][$i]);
    +            $cb[$i]->SetFillFromYMin();                                   
    +        }
    + 
    +        $graph->Add(array_slice(array_reverse($cb),0,4));    
    +        $this->graph = $graph;
    +    }
    +    /**
    +    * Add a line or scatter plot to the graph
    +    * 
    +    * @param mixed $aPlots
    +    */
    +    public function Add($aPlots) {
    +        if( is_array($aPlots) ) {
    +            $this->iPlots = array_merge($this->iPlots,$aPlots);                
    +        }
    +        else {
    +            $this->iPlots[] = $aPlots;
    +        }
    +    }
    +    /**
    +    * Stroke the graph back to the client or to a file
    +    * 
    +    * @param mixed $aFile
    +    */
    +    public function Stroke($aFile='') {
    +        $this->Init();
    +        if( count($this->iPlots) > 0 )  {
    +            $this->graph->Add($this->iPlots);
    +        }
    +        $this->graph->Stroke($aFile);
    +    }
    +}
    +?>


    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/ch35s06.html b/Societes/ric/jpgraph/docs/chunkhtml/ch35s06.html new file mode 100755 index 00000000..27777334 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/ch35s06.html @@ -0,0 +1,10 @@ +References

    References

    + +

    +

    [1] Critical chain Project Management, 2ed, Lawrence P. Leach
    +

    Artech House, ISBN 1-58053-903-3

    +
    [2] A Guide to Implementing the Theory of Constraints, K. J. Youngman,
    +

    http://www.dbrmfg.co.nz/Projects Project Buffers.htm

    +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/checkmark-plain.gif b/Societes/ric/jpgraph/docs/chunkhtml/checkmark-plain.gif new file mode 100755 index 00000000..789a0785 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/checkmark-plain.gif differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/checkmark.png b/Societes/ric/jpgraph/docs/chunkhtml/checkmark.png new file mode 100755 index 00000000..7988369b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/checkmark.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/.html new file mode 100755 index 00000000..7800497d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/.html @@ -0,0 +1 @@ +001: Cannot read souce file: /root/jpgraph/trunk/src/Examples/.php diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/accbarframeex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/accbarframeex01.html new file mode 100755 index 00000000..7843d750 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/accbarframeex01.html @@ -0,0 +1,62 @@ +
    accbarframeex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay1=array(13,8,19,7,17,6);
    +$datay2=array(4,5,2,7,5,25);
    + 
    +// Create the graph.
    +$graph = new Graph(350,250);
    +$graph->SetScale('textlin');
    +$graph->SetMarginColor('white');
    + 
    +// Setup title
    +$graph->title->Set('Acc bar with gradient');
    + 
    +// Create the first bar
    +$bplot = new BarPlot($datay1);
    +$bplot->SetFillGradient('AntiqueWhite2','AntiqueWhite4:0.8',GRAD_VERT);
    +$bplot->SetColor('darkred');
    + 
    +// Create the second bar
    +$bplot2 = new BarPlot($datay2);
    +$bplot2->SetFillGradient('olivedrab1','olivedrab4',GRAD_VERT);
    +$bplot2->SetColor('darkgreen');
    + 
    +// And join them in an accumulated bar
    +$accbplot = new AccBarPlot(array($bplot,$bplot2));
    +$graph->Add($accbplot);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/accbarframeex02.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/accbarframeex02.html new file mode 100755 index 00000000..8018720a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/accbarframeex02.html @@ -0,0 +1,66 @@ +
    accbarframeex02.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay1=array(13,8,19,7,17,6);
    +$datay2=array(4,5,2,7,5,25);
    + 
    +// Create the graph.
    +$graph = new Graph(350,250);
    +$graph->SetScale('textlin');
    +$graph->SetMarginColor('white');
    + 
    +// Setup title
    +$graph->title->Set('Acc bar with gradient');
    + 
    +// Create the first bar
    +$bplot = new BarPlot($datay1);
    +$bplot->SetFillGradient('AntiqueWhite2','AntiqueWhite4:0.8',GRAD_VERT);
    +$bplot->SetColor('darkred');
    + 
    +// Create the second bar
    +$bplot2 = new BarPlot($datay2);
    +$bplot2->SetFillGradient('olivedrab1','olivedrab4',GRAD_VERT);
    +$bplot2->SetColor('darkgreen');
    + 
    +// And join them in an accumulated bar
    +$accbplot = new AccBarPlot(array($bplot,$bplot2));
    +$accbplot->SetColor('red');
    +$accbplot->SetWeight(1);
    +$graph->Add($accbplot);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/accbarframeex03.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/accbarframeex03.html new file mode 100755 index 00000000..c3ce20d2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/accbarframeex03.html @@ -0,0 +1,70 @@ +
    accbarframeex03.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay1=array(13,8,19,7,17,6);
    +$datay2=array(4,5,2,7,5,25);
    + 
    +// Create the graph.
    +$graph = new Graph(350,250);
    +$graph->SetScale('textlin');
    +$graph->SetMarginColor('white');
    + 
    +// Setup title
    +$graph->title->Set('Acc bar with gradient');
    + 
    +// Create the first bar
    +$bplot = new BarPlot($datay1);
    +$bplot->SetFillGradient('AntiqueWhite2','AntiqueWhite4:0.8',GRAD_VERT);
    +$bplot->SetColor('darkred');
    +$bplot->SetWeight(0);
    + 
    +// Create the second bar
    +$bplot2 = new BarPlot($datay2);
    +$bplot2->SetFillGradient('olivedrab1','olivedrab4',GRAD_VERT);
    +$bplot2->SetColor('darkgreen');
    +$bplot2->SetWeight(0);
    + 
    +// And join them in an accumulated bar
    +$accbplot = new AccBarPlot(array($bplot,$bplot2));
    +$accbplot->SetColor('darkgray');
    +$accbplot->SetWeight(1);
    +$graph->Add($accbplot);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/antispamex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/antispamex01.html new file mode 100755 index 00000000..05b8db36 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/antispamex01.html @@ -0,0 +1,34 @@ +
    antispamex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +
    <?php // content="text/plain; charset=utf-8"
    +// Antispam example using a random string
    +require_once "jpgraph/jpgraph_antispam.php";
    + 
    +// Create new anti-spam challenge creator
    +// Note: Neither '0' (digit) or 'O' (letter) can be used to avoid confusion
    +$spam = new AntiSpam();
    + 
    +// Create a random 5 char challenge and return the string generated
    +$chars = $spam->Rand(5);
    + 
    +// Stroke random cahllenge
    +if( $spam->Stroke() === false ) {
    +    die('Illegal or no data to plot');
    +}
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/aqua_example.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/aqua_example.html new file mode 100755 index 00000000..a5a4776b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/aqua_example.html @@ -0,0 +1,116 @@ +
    aqua_example.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$theme = isset($_GET['theme']) ? $_GET['theme'] : null;
    + 
    +$data = array (
    +  0 => array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ),
    +  1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ),
    +  2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ),
    +  3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ),
    +  4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ),
    +  5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ),
    +  6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ),
    +  7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ),
    +  8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ),
    +);
    + 
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(400,300);    
    + 
    +$graph->SetScale("textlin");
    +if ($theme) {
    +  $graph->SetTheme(new $theme());
    +}
    +$theme_class = new AquaTheme;
    +$graph->SetTheme($theme_class);
    + 
    +$plot = array();
    +// Create the bar plots
    +for ($i = 0; $i < 4; $i++) {
    +  $plot[$i] = new BarPlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.($i+1));
    +}
    +//$acc1 = new AccBarPlot(array($plot[0], $plot[1]));
    +//$acc1->value->Show();
    +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] ));
    + 
    +for ($i = 4; $i < 8; $i++) {
    +  $plot[$i] = new LinePlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.$i);
    +  $plot[$i]->value->Show();
    +}
    + 
    +$graph->Add($gbplot);
    +$graph->Add($plot[4]);
    + 
    +$title = "AquaTheme Example";
    +$title = mb_convert_encoding($title,'UTF-8');
    +$graph->title->Set($title);
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex01.html new file mode 100755 index 00000000..39430402 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex01.html @@ -0,0 +1,70 @@ +
    axislabelbkgex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,19,3,9,15,10);
    + 
    +// The code to setup a very basic graph
    +$graph = new Graph(200,150);
    +$graph->SetScale('intlin');
    +$graph->SetMargin(30,15,40,30);
    +$graph->SetMarginColor('white');
    +$graph->SetFrame(true,'blue',3);
    + 
    +$graph->title->Set('Label background');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$graph->subtitle->SetColor('darkred');
    +$graph->subtitle->Set('"LABELBKG_NONE"');
    + 
    +$graph->SetAxisLabelBackground(LABELBKG_NONE,'orange','red','lightblue','red');
    + 
    +// Use Ariel font
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->xgrid->Show();
    + 
    +// Create the plot line
    +$p1 = new LinePlot($ydata);
    +$graph->Add($p1);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex02.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex02.html new file mode 100755 index 00000000..f6de7bf4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex02.html @@ -0,0 +1,70 @@ +
    axislabelbkgex02.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,19,3,9,15,10);
    + 
    +// The code to setup a very basic graph
    +$graph = new Graph(200,150);
    +$graph->SetScale('intlin');
    +$graph->SetMargin(30,15,40,30);
    +$graph->SetMarginColor('white');
    +$graph->SetFrame(true,'blue',3);
    + 
    +$graph->title->Set('Label background');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$graph->subtitle->SetColor('darkred');
    +$graph->subtitle->Set('"LABELBKG_XAXIS"');
    + 
    +$graph->SetAxisLabelBackground(LABELBKG_XAXIS,'orange','red','lightblue','red');
    + 
    +// Use Ariel font
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->xgrid->Show();
    + 
    +// Create the plot line
    +$p1 = new LinePlot($ydata);
    +$graph->Add($p1);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex03.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex03.html new file mode 100755 index 00000000..420cef45 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex03.html @@ -0,0 +1,70 @@ +
    axislabelbkgex03.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,19,3,9,15,10);
    + 
    +// The code to setup a very basic graph
    +$graph = new Graph(200,150);
    +$graph->SetScale('intlin');
    +$graph->SetMargin(30,15,40,30);
    +$graph->SetMarginColor('white');
    +$graph->SetFrame(true,'blue',3);
    + 
    +$graph->title->Set('Label background');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$graph->subtitle->SetColor('darkred');
    +$graph->subtitle->Set('"LABELBKG_YAXIS"');
    + 
    +$graph->SetAxisLabelBackground(LABELBKG_YAXIS,'orange','red','lightblue','red');
    + 
    +// Use Ariel font
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->xgrid->Show();
    + 
    +// Create the plot line
    +$p1 = new LinePlot($ydata);
    +$graph->Add($p1);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex04.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex04.html new file mode 100755 index 00000000..6e74911a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex04.html @@ -0,0 +1,70 @@ +
    axislabelbkgex04.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,19,3,9,15,10);
    + 
    +// The code to setup a very basic graph
    +$graph = new Graph(200,150);
    +$graph->SetScale('intlin');
    +$graph->SetMargin(30,15,40,30);
    +$graph->SetMarginColor('white');
    +$graph->SetFrame(true,'blue',3);
    + 
    +$graph->title->Set('Label background');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$graph->subtitle->SetColor('darkred');
    +$graph->subtitle->Set('"LABELBKG_YAXISFULL"');
    + 
    +$graph->SetAxisLabelBackground(LABELBKG_YAXISFULL,'orange','red','lightblue','red');
    + 
    +// Use Ariel font
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->xgrid->Show();
    + 
    +// Create the plot line
    +$p1 = new LinePlot($ydata);
    +$graph->Add($p1);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex05.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex05.html new file mode 100755 index 00000000..5bd792a5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex05.html @@ -0,0 +1,70 @@ +
    axislabelbkgex05.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,19,3,9,15,10);
    + 
    +// The code to setup a very basic graph
    +$graph = new Graph(200,150);
    +$graph->SetScale('intlin');
    +$graph->SetMargin(30,15,40,30);
    +$graph->SetMarginColor('white');
    +$graph->SetFrame(true,'blue',3);
    + 
    +$graph->title->Set('Label background');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$graph->subtitle->SetColor('darkred');
    +$graph->subtitle->Set('"LABELBKG_XAXISFULL"');
    + 
    +$graph->SetAxisLabelBackground(LABELBKG_XAXISFULL,'orange','red','lightblue','red');
    + 
    +// Use Ariel font
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->xgrid->Show();
    + 
    +// Create the plot line
    +$p1 = new LinePlot($ydata);
    +$graph->Add($p1);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex06.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex06.html new file mode 100755 index 00000000..d6fd9adc --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex06.html @@ -0,0 +1,70 @@ +
    axislabelbkgex06.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,19,3,9,15,10);
    + 
    +// The code to setup a very basic graph
    +$graph = new Graph(200,150);
    +$graph->SetScale('intlin');
    +$graph->SetMargin(30,15,40,30);
    +$graph->SetMarginColor('white');
    +$graph->SetFrame(true,'blue',3);
    + 
    +$graph->title->Set('Label background');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$graph->subtitle->SetColor('darkred');
    +$graph->subtitle->Set('"LABELBKG_XYFULL"');
    + 
    +$graph->SetAxisLabelBackground(LABELBKG_XYFULL,'orange','red','lightblue','red');
    + 
    +// Use Ariel font
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->xgrid->Show();
    + 
    +// Create the plot line
    +$p1 = new LinePlot($ydata);
    +$graph->Add($p1);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex07.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex07.html new file mode 100755 index 00000000..d340d52f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/axislabelbkgex07.html @@ -0,0 +1,70 @@ +
    axislabelbkgex07.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,19,3,9,15,10);
    + 
    +// The code to setup a very basic graph
    +$graph = new Graph(200,150);
    +$graph->SetScale('intlin');
    +$graph->SetMargin(30,15,40,30);
    +$graph->SetMarginColor('white');
    +$graph->SetFrame(true,'blue',3);
    + 
    +$graph->title->Set('Label background');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$graph->subtitle->SetColor('darkred');
    +$graph->subtitle->Set('"LABELBKG_XY"');
    + 
    +$graph->SetAxisLabelBackground(LABELBKG_XY,'orange','red','lightblue','red');
    + 
    +// Use Ariel font
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->xgrid->Show();
    + 
    +// Create the plot line
    +$p1 = new LinePlot($ydata);
    +$graph->Add($p1);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex0.html new file mode 100755 index 00000000..8aaa0450 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex0.html @@ -0,0 +1,76 @@ +
    background_type_ex0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(350,250);
    +$graph->SetScale("textlin");
    +$graph->SetMargin(40,40,50,50);
    + 
    +// Setup the grid and plotarea box
    +$graph->ygrid->SetLineStyle('dashed');
    +$graph->ygrid->setColor('darkgray');
    +$graph->SetBox(true);
    + 
    +// Steup graph titles
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->title->Set('Using background image');
    +$graph->subtitle->SetFont(FF_COURIER,FS_BOLD,11);
    +$graph->subtitle->Set('"BGIMG_COPY"');
    +$graph->subtitle->SetColor('darkred');
    + 
    +// Add background with 25% mix
    +$graph->SetBackgroundImage('heat1.jpg',BGIMG_COPY);
    +$graph->SetBackgroundImageMix(25);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor("blue");
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex1.html new file mode 100755 index 00000000..b5efba4e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex1.html @@ -0,0 +1,76 @@ +
    background_type_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(350,250);
    +$graph->SetScale("textlin");
    +$graph->SetMargin(40,40,50,50);
    + 
    +// Setup the grid and plotarea box
    +$graph->ygrid->SetLineStyle('dashed');
    +$graph->ygrid->setColor('darkgray');
    +$graph->SetBox(true);
    + 
    +// Steup graph titles
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->title->Set('Using background image');
    +$graph->subtitle->SetFont(FF_COURIER,FS_BOLD,11);
    +$graph->subtitle->Set('"BGIMG_CENTER"');
    +$graph->subtitle->SetColor('darkred');
    + 
    +// Add background with 25% mix
    +$graph->SetBackgroundImage('heat1.jpg',BGIMG_CENTER);
    +$graph->SetBackgroundImageMix(25);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor("blue");
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex2.html new file mode 100755 index 00000000..62874d85 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex2.html @@ -0,0 +1,76 @@ +
    background_type_ex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(350,250);
    +$graph->SetScale("textlin");
    +$graph->SetMargin(40,40,50,50);
    + 
    +// Setup the grid and plotarea box
    +$graph->ygrid->SetLineStyle('dashed');
    +$graph->ygrid->setColor('darkgray');
    +$graph->SetBox(true);
    + 
    +// Steup graph titles
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->title->Set('Using background image');
    +$graph->subtitle->SetFont(FF_COURIER,FS_BOLD,11);
    +$graph->subtitle->Set('"BGIMG_FREE"');
    +$graph->subtitle->SetColor('darkred');
    + 
    +// Add background with 25% mix
    +$graph->SetBackgroundImage('heat1.jpg',BGIMG_FREE);
    +$graph->SetBackgroundImageMix(25);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor("blue");
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex3.html new file mode 100755 index 00000000..2e5edfd8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex3.html @@ -0,0 +1,76 @@ +
    background_type_ex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(350,250);
    +$graph->SetScale("textlin");
    +$graph->SetMargin(40,40,50,50);
    + 
    +// Setup the grid and plotarea box
    +$graph->ygrid->SetLineStyle('dashed');
    +$graph->ygrid->setColor('darkgray');
    +$graph->SetBox(true);
    + 
    +// Steup graph titles
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->title->Set('Using background image');
    +$graph->subtitle->SetFont(FF_COURIER,FS_BOLD,11);
    +$graph->subtitle->Set('"BGIMG_FILLPLOT"');
    +$graph->subtitle->SetColor('darkred');
    + 
    +// Add background with 25% mix
    +$graph->SetBackgroundImage('heat1.jpg',BGIMG_FILLPLOT);
    +$graph->SetBackgroundImageMix(25);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor("blue");
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex4.html new file mode 100755 index 00000000..3158c5ef --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/background_type_ex4.html @@ -0,0 +1,76 @@ +
    background_type_ex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(350,250);
    +$graph->SetScale("textlin");
    +$graph->SetMargin(40,40,50,50);
    + 
    +// Setup the grid and plotarea box
    +$graph->ygrid->SetLineStyle('dashed');
    +$graph->ygrid->setColor('darkgray');
    +$graph->SetBox(true);
    + 
    +// Steup graph titles
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->title->Set('Using background image');
    +$graph->subtitle->SetFont(FF_COURIER,FS_BOLD,11);
    +$graph->subtitle->Set('"BGIMG_FILLFRAME"');
    +$graph->subtitle->SetColor('darkred');
    + 
    +// Add background with 25% mix
    +$graph->SetBackgroundImage('heat1.jpg',BGIMG_FILLFRAME);
    +$graph->SetBackgroundImageMix(25);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor("blue");
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/balloonex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/balloonex2.html new file mode 100755 index 00000000..dc5fefd9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/balloonex2.html @@ -0,0 +1,158 @@ +
    balloonex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +// Each ballon is specificed by four values. 
    +// (X,Y,Size,Color)
    +$data = array(
    +    array(1,12,10,'orange'),
    +    array(3,41,15,'red'),
    +    array(4,5,19,'lightblue'),
    +    array(5,70,22,'yellow')
    +);
    + 
    + 
    + 
    +// We need to create X,Y data vectors suitable for the
    +// library from the above raw data.
    +$n = count($data);
    +for( $i=0; $i < $n; ++$i ) {
    +    
    +    $datax[$i] = $data[$i][0];
    +    $datay[$i] = $data[$i][1];
    + 
    +    // Create a faster lookup array so we don't have to search
    +    // for the correct values in the callback function
    +    $format[strval($datax[$i])][strval($datay[$i])] = array($data[$i][2],$data[$i][3]);
    +    
    +}
    + 
    + 
    +// Callback for markers
    +// Must return array(width,border_color,fill_color,filename,imgscale)
    +// If any of the returned values are '' then the
    +// default value for that parameter will be used (possible empty)
    +function FCallback($aYVal,$aXVal) {
    +    global $format;
    +    return array($format[strval($aXVal)][strval($aYVal)][0],'',
    +         $format[strval($aXVal)][strval($aYVal)][1],'','');
    +}
    + 
    +// Setup a basic graph
    +$graph = new Graph(450,300,'auto');
    +$graph->SetScale("intlin");
    +$graph->SetMargin(40,40,40,40);        
    +$graph->SetMarginColor('wheat');
    + 
    +$graph->title->Set("Example of ballon scatter plot with X,Y callback");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->title->SetMargin(10);
    + 
    +// Use a lot of grace to get large scales since the ballon have
    +// size and we don't want them to collide with the X-axis
    +$graph->yaxis->scale->SetGrace(50,10);
    +$graph->xaxis->scale->SetGrace(50,10);
    + 
    +// Make sure X-axis as at the bottom of the graph and not at the default Y=0
    +$graph->xaxis->SetPos('min');
    + 
    +// Set X-scale to start at 0
    +$graph->xscale->SetAutoMin(0);
    + 
    +// Create the scatter plot
    +$sp1 = new ScatterPlot($datay,$datax);
    +$sp1->mark->SetType(MARK_FILLEDCIRCLE);
    + 
    +// Uncomment the following two lines to display the values
    +$sp1->value->Show();
    +$sp1->value->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Specify the callback
    +$sp1->mark->SetCallbackYX("FCallback");
    + 
    +// Add the scatter plot to the graph
    +$graph->Add($sp1);
    + 
    +// ... and send to browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradex1.html new file mode 100755 index 00000000..cce994d7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradex1.html @@ -0,0 +1,94 @@ +
    bargradex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +
    <?php // content="text/plain; charset=utf-8"
    +// Example for use of JpGraph,
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// We need some data
    +$datay=array(0.13,0.25,0.21,0.35,0.31,0.06);
    +$datax=array("January","February","March","April","May","June");
    + 
    +// Setup the graph.
    +$graph = new Graph(400,240);
    +$graph->img->SetMargin(60,20,35,75);
    +$graph->SetScale("textlin");
    +$graph->SetMarginColor("lightblue:1.1");
    +$graph->SetShadow();
    + 
    +// Set up the title for the graph
    +$graph->title->Set("Bar gradient with left reflection");
    +$graph->title->SetMargin(8);
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor("darkred");
    + 
    +// Setup font for axis
    +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10);
    +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10);
    + 
    +// Show 0 label on Y-axis (default is not to show)
    +$graph->yscale->ticks->SupressZeroLabel(false);
    + 
    +// Setup X-axis labels
    +$graph->xaxis->SetTickLabels($datax);
    +$graph->xaxis->SetLabelAngle(50);
    + 
    +// Create the bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetWidth(0.6);
    + 
    +// Setup color for gradient fill style
    +$bplot->SetFillGradient("navy:0.9","navy:1.85",GRAD_LEFT_REFLECTION);
    + 
    +// Set color for the frame of each bar
    +$bplot->SetColor("white");
    +$graph->Add($bplot);
    + 
    +// Finally send the graph to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex1.html new file mode 100755 index 00000000..5adc8394 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex1.html @@ -0,0 +1,68 @@ +
    bargradsmallex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// We need some data
    +$datay=array(4,8,6);
    + 
    +// Setup the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->img->SetMargin(25,15,25,25);
    + 
    +$graph->title->Set('"GRAD_MIDVER"');
    +$graph->title->SetColor('darkred');
    + 
    +// Setup font for axis
    +$graph->xaxis->SetFont(FF_FONT1);
    +$graph->yaxis->SetFont(FF_FONT1);
    + 
    +// Create the bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetWidth(0.6);
    + 
    +// Setup color for gradient fill style 
    +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_MIDVER);
    + 
    +// Set color for the frame of each bar
    +$bplot->SetColor("navy");
    +$graph->Add($bplot);
    + 
    +// Finally send the graph to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex2.html new file mode 100755 index 00000000..035b7ed3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex2.html @@ -0,0 +1,68 @@ +
    bargradsmallex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// We need some data
    +$datay=array(4,8,6);
    + 
    +// Setup the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->img->SetMargin(25,15,25,25);
    + 
    +$graph->title->Set('"GRAD_MIDHOR"');
    +$graph->title->SetColor('darkred');
    + 
    +// Setup font for axis
    +$graph->xaxis->SetFont(FF_FONT1);
    +$graph->yaxis->SetFont(FF_FONT1);
    + 
    +// Create the bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetWidth(0.6);
    + 
    +// Setup color for gradient fill style 
    +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_MIDHOR);
    + 
    +// Set color for the frame of each bar
    +$bplot->SetColor("navy");
    +$graph->Add($bplot);
    + 
    +// Finally send the graph to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex3.html new file mode 100755 index 00000000..24184379 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex3.html @@ -0,0 +1,68 @@ +
    bargradsmallex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// We need some data
    +$datay=array(4,8,6);
    + 
    +// Setup the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->img->SetMargin(25,15,25,25);
    + 
    +$graph->title->Set('"GRAD_HOR"');
    +$graph->title->SetColor('darkred');
    + 
    +// Setup font for axis
    +$graph->xaxis->SetFont(FF_FONT1);
    +$graph->yaxis->SetFont(FF_FONT1);
    + 
    +// Create the bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetWidth(0.6);
    + 
    +// Setup color for gradient fill style 
    +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_HOR);
    + 
    +// Set color for the frame of each bar
    +$bplot->SetColor("navy");
    +$graph->Add($bplot);
    + 
    +// Finally send the graph to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex4.html new file mode 100755 index 00000000..92a56b93 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex4.html @@ -0,0 +1,68 @@ +
    bargradsmallex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// We need some data
    +$datay=array(4,8,6);
    + 
    +// Setup the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->img->SetMargin(25,15,25,25);
    + 
    +$graph->title->Set('"GRAD_VER"');
    +$graph->title->SetColor('darkred');
    + 
    +// Setup font for axis
    +$graph->xaxis->SetFont(FF_FONT1);
    +$graph->yaxis->SetFont(FF_FONT1);
    + 
    +// Create the bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetWidth(0.6);
    + 
    +// Setup color for gradient fill style 
    +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_VER);
    + 
    +// Set color for the frame of each bar
    +$bplot->SetColor("navy");
    +$graph->Add($bplot);
    + 
    +// Finally send the graph to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex5.html new file mode 100755 index 00000000..2f43e43f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex5.html @@ -0,0 +1,68 @@ +
    bargradsmallex5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// We need some data
    +$datay=array(4,8,6);
    + 
    +// Setup the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->img->SetMargin(25,15,25,25);
    + 
    +$graph->title->Set('"GRAD_WIDE_MIDVER"');
    +$graph->title->SetColor('darkred');
    + 
    +// Setup font for axis
    +$graph->xaxis->SetFont(FF_FONT1);
    +$graph->yaxis->SetFont(FF_FONT1);
    + 
    +// Create the bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetWidth(0.6);
    + 
    +// Setup color for gradient fill style 
    +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_WIDE_MIDVER);
    + 
    +// Set color for the frame of each bar
    +$bplot->SetColor("navy");
    +$graph->Add($bplot);
    + 
    +// Finally send the graph to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex6.html new file mode 100755 index 00000000..c0a47da2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex6.html @@ -0,0 +1,68 @@ +
    bargradsmallex6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// We need some data
    +$datay=array(4,8,6);
    + 
    +// Setup the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->img->SetMargin(25,15,25,25);
    + 
    +$graph->title->Set('"GRAD_WIDE_MIDHOR"');
    +$graph->title->SetColor('darkred');
    + 
    +// Setup font for axis
    +$graph->xaxis->SetFont(FF_FONT1);
    +$graph->yaxis->SetFont(FF_FONT1);
    + 
    +// Create the bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetWidth(0.6);
    + 
    +// Setup color for gradient fill style 
    +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_WIDE_MIDHOR);
    + 
    +// Set color for the frame of each bar
    +$bplot->SetColor("navy");
    +$graph->Add($bplot);
    + 
    +// Finally send the graph to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex7.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex7.html new file mode 100755 index 00000000..aa2ad449 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex7.html @@ -0,0 +1,68 @@ +
    bargradsmallex7.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// We need some data
    +$datay=array(4,8,6);
    + 
    +// Setup the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->img->SetMargin(25,15,25,25);
    + 
    +$graph->title->Set('"GRAD_CENTER"');
    +$graph->title->SetColor('darkred');
    + 
    +// Setup font for axis
    +$graph->xaxis->SetFont(FF_FONT1);
    +$graph->yaxis->SetFont(FF_FONT1);
    + 
    +// Create the bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetWidth(0.6);
    + 
    +// Setup color for gradient fill style 
    +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_CENTER);
    + 
    +// Set color for the frame of each bar
    +$bplot->SetColor("navy");
    +$graph->Add($bplot);
    + 
    +// Finally send the graph to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex8.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex8.html new file mode 100755 index 00000000..55915d4b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/bargradsmallex8.html @@ -0,0 +1,68 @@ +
    bargradsmallex8.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// We need some data
    +$datay=array(4,8,6);
    + 
    +// Setup the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->img->SetMargin(25,15,25,25);
    + 
    +$graph->title->Set('"GRAD_RAISED_PANEL"');
    +$graph->title->SetColor('darkred');
    + 
    +// Setup font for axis
    +$graph->xaxis->SetFont(FF_FONT1);
    +$graph->yaxis->SetFont(FF_FONT1);
    + 
    +// Create the bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetWidth(0.6);
    + 
    +// Setup color for gradient fill style 
    +$bplot->SetFillGradient('navy','orange',GRAD_RAISED_PANEL);
    + 
    +// Set color for the frame of each bar
    +$bplot->SetColor("navy");
    +$graph->Add($bplot);
    + 
    +// Finally send the graph to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/barlinealphaex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/barlinealphaex1.html new file mode 100755 index 00000000..2081be32 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/barlinealphaex1.html @@ -0,0 +1,148 @@ +
    barlinealphaex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some "random" data
    +$ydata  = array(10,120,80,190,260,170,60,40,20,230);
    +$ydata2 = array(10,70,40,120,200,60,80,40,20,5);
    + 
    +// Get a list of month using the current locale
    +$months = $gDateLocale->GetShortMonth();
    + 
    +// Create the graph. 
    +$graph = new Graph(300,200);    
    +$graph->SetScale("textlin");
    +$graph->SetMarginColor('white');
    + 
    +// Adjust the margin slightly so that we use the 
    +// entire area (since we don't use a frame)
    +$graph->SetMargin(30,1,20,5);
    + 
    +// Box around plotarea
    +$graph->SetBox(); 
    + 
    +// No frame around the image
    +$graph->SetFrame(false);
    + 
    +// Setup the tab title
    +$graph->tabtitle->Set('Year 2003');
    +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,10);
    + 
    +// Setup the X and Y grid
    +$graph->ygrid->SetFill(true,'#DDDDDD@0.5','#BBBBBB@0.5');
    +$graph->ygrid->SetLineStyle('dashed');
    +$graph->ygrid->SetColor('gray');
    +$graph->xgrid->Show();
    +$graph->xgrid->SetLineStyle('dashed');
    +$graph->xgrid->SetColor('gray');
    + 
    +// Setup month as labels on the X-axis
    +$graph->xaxis->SetTickLabels($months);
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$graph->xaxis->SetLabelAngle(45);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($ydata);
    +$bplot->SetWidth(0.6);
    +$fcol='#440000';
    +$tcol='#FF9090';
    + 
    +$bplot->SetFillGradient($fcol,$tcol,GRAD_LEFT_REFLECTION);
    + 
    +// Set line weigth to 0 so that there are no border
    +// around each bar
    +$bplot->SetWeight(0);
    + 
    +$graph->Add($bplot);
    + 
    +// Create filled line plot
    +$lplot = new LinePlot($ydata2);
    +$lplot->SetFillColor('skyblue@0.5');
    +$lplot->SetColor('navy@0.7');
    +$lplot->SetBarCenter();
    + 
    +$lplot->mark->SetType(MARK_SQUARE);
    +$lplot->mark->SetColor('blue@0.5');
    +$lplot->mark->SetFillColor('lightblue');
    +$lplot->mark->SetSize(6);
    + 
    +$graph->Add($lplot);
    + 
    +// .. and finally send it back to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/barscalecallbackex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/barscalecallbackex1.html new file mode 100755 index 00000000..127a18f1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/barscalecallbackex1.html @@ -0,0 +1,126 @@ +
    barscalecallbackex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// Callback function for Y-scale to get 1000 separator on labels
    +function separator1000($aVal) {
    +    return number_format($aVal);
    +}
    + 
    +function separator1000_usd($aVal) {
    +    return '$'.number_format($aVal);
    +}
    + 
    +// Some data
    +$datay=array(120567,134013,192000,87000);
    + 
    +// Create the graph and setup the basic parameters
    +$graph = new Graph(500,300,'auto');
    +$graph->img->SetMargin(80,30,30,40);
    +$graph->SetScale('textint');
    +$graph->SetShadow();
    +$graph->SetFrame(false); // No border around the graph
    + 
    +// Add some grace to the top so that the scale doesn't
    +// end exactly at the max value.
    +// The grace value is the percetage of additional scale
    +// value we add. Specifying 50 means that we add 50% of the
    +// max value
    +$graph->yaxis->scale->SetGrace(50);
    +$graph->yaxis->SetLabelFormatCallback('separator1000');
    + 
    +// Setup X-axis labels
    +$a = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($a);
    +$graph->xaxis->SetFont(FF_FONT2);
    + 
    +// Setup graph title ands fonts
    +$graph->title->Set('Example of Y-scale callback formatting');
    +$graph->title->SetFont(FF_FONT2,FS_BOLD);
    +$graph->xaxis->title->Set('Year 2002');
    +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor('orange');
    +$bplot->SetWidth(0.5);
    +$bplot->SetShadow();
    + 
    +// Setup the values that are displayed on top of each bar
    +$bplot->value->Show();
    + 
    +// Must use TTF fonts if we want text at an arbitrary angle
    +$bplot->value->SetFont(FF_ARIAL,FS_BOLD);
    +$bplot->value->SetAngle(45);
    +$bplot->value->SetFormatCallback('separator1000_usd');
    + 
    +// Black color for positive values and darkred for negative values
    +$bplot->value->SetColor('black','darkred');
    +$graph->Add($bplot);
    + 
    +// Finally stroke the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex01.html new file mode 100755 index 00000000..a2859510 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex01.html @@ -0,0 +1,80 @@ +
    basic_contourex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php // content="text/plain; charset=utf-8"
    +// Basic contour plot example
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contour.php');
    + 
    +$data = array(
    +            array (0.5,1.1,1.5,1,2.0,3,3,2,1,0.1),
    +            array (1.0,1.5,3.0,5,6.0,2,1,1.2,1,4),
    +            array (0.9,2.0,2.1,3,6.0,7,3,2,1,1.4),
    +            array (1.0,1.5,3.0,4,6.0,5,2,1.5,1,2),
    +            array (0.8,2.0,3.0,3,4.0,4,3,2.4,2,3),
    +            array (0.6,1.1,1.5,1,4.0,3.5,3,2,3,4),
    +            array (1.0,1.5,3.0,5,6.0,2,1,1.2,2.7,4),
    +            array (0.8,2.0,3.0,3,5.5,6,3,2,1,1.4),
    +            array (1.0,1.5,3.0,4,6.0,5,2,1,0.5,0.2));
    + 
    +// Basic contour graph
    +$graph = new Graph(350,250);
    +$graph->SetScale('intint');
    + 
    +// Adjust the margins to fit the margin
    +$graph->SetMargin(30,100,40,30);
    + 
    +// Setup
    +$graph->title->Set('Basic contour plot');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// A simple contour plot with default arguments (e.g. 10 isobar lines)
    +$cp = new ContourPlot($data);
    + 
    +// Display the legend
    +$cp->ShowLegend();
    + 
    +$graph->Add($cp);
    + 
    +// ... and send the graph back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex02.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex02.html new file mode 100755 index 00000000..9b6523cd --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex02.html @@ -0,0 +1,86 @@ +
    basic_contourex02.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +
    <?php // content="text/plain; charset=utf-8"
    +// Basic contour plot example
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contour.php');
    + 
    +$data = array(
    +            array (0.5,1.1,1.5,1,2.0,3,3,2,1,0.1),
    +            array (1.0,1.5,3.0,5,6.0,2,1,1.2,1,4),
    +            array (0.9,2.0,2.1,3,6.0,7,3,2,1,1.4),
    +            array (1.0,1.5,3.0,4,6.0,5,2,1.5,1,2),
    +            array (0.8,2.0,3.0,3,4.0,4,3,2.4,2,3),
    +            array (0.6,1.1,1.5,1,4.0,3.5,3,2,3,4),
    +            array (1.0,1.5,3.0,5,6.0,2,1,1.2,2.7,4),
    +            array (0.8,2.0,3.0,3,5.5,6,3,2,1,1.4),
    +            array (1.0,1.5,3.0,4,6.0,5,2,1,0.5,0.2));
    + 
    +// Basic contour graph
    +$graph = new Graph(350,250);
    +$graph->SetScale('intint');
    + 
    +// Show axis on all sides
    +$graph->SetAxisStyle(AXSTYLE_BOXOUT);
    + 
    +// Adjust the margins to fit the margin
    +$graph->SetMargin(30,100,40,30);
    + 
    +// Setup
    +$graph->title->Set('Basic contour plot with multiple axis');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// A simple contour plot with default arguments (e.g. 10 isobar lines)
    +$cp = new ContourPlot($data);
    + 
    +// Display the legend
    +$cp->ShowLegend();
    + 
    +$graph->Add($cp);
    + 
    +// ... and send the graph back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex03-1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex03-1.html new file mode 100755 index 00000000..77a5a003 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex03-1.html @@ -0,0 +1,80 @@ +
    basic_contourex03-1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php // content="text/plain; charset=utf-8"
    +// Basic contour plot example
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contour.php');
    + 
    +$data = array(
    +            array ( 12,7,3,15 ),
    +            array ( 18,5,1, 9 ),
    +            array ( 13,9,5,12),
    +            array (  5,3,8, 9 ),
    +            array (  1,8,5, 7 ));
    + 
    + 
    +// Basic contour graph
    +$graph = new Graph(350,250);
    +$graph->SetScale('intint');
    + 
    +// Show axis on all sides
    +$graph->SetAxisStyle(AXSTYLE_BOXOUT);
    + 
    +// Adjust the margins to fit the margin
    +$graph->SetMargin(30,100,40,30);
    + 
    +// Setup
    +$graph->title->Set('Basic contour plot with multiple axis');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// A simple contour plot with default arguments (e.g. 10 isobar lines)
    +$cp = new ContourPlot($data,10,1);
    + 
    +// Display the legend
    +$cp->ShowLegend();
    + 
    +$graph->Add($cp);
    + 
    +// ... and send the graph back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex03-2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex03-2.html new file mode 100755 index 00000000..b53a6453 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex03-2.html @@ -0,0 +1,80 @@ +
    basic_contourex03-2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php // content="text/plain; charset=utf-8"
    +// Basic contour plot example
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contour.php');
    + 
    +$data = array(
    +            array ( 12,7,3,15 ),
    +            array ( 18,5,1, 9 ),
    +            array ( 13,9,5,12),
    +            array (  5,3,8, 9 ),
    +            array (  1,8,5, 7 ));
    + 
    + 
    +// Basic contour graph
    +$graph = new Graph(350,250);
    +$graph->SetScale('intint');
    + 
    +// Show axis on all sides
    +$graph->SetAxisStyle(AXSTYLE_BOXOUT);
    + 
    +// Adjust the margins to fit the margin
    +$graph->SetMargin(30,100,40,30);
    + 
    +// Setup
    +$graph->title->Set('Basic contour plot with multiple axis');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// A simple contour plot with default arguments (e.g. 10 isobar lines)
    +$cp = new ContourPlot($data,10,2);
    + 
    +// Display the legend
    +$cp->ShowLegend();
    + 
    +$graph->Add($cp);
    + 
    +// ... and send the graph back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex03-3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex03-3.html new file mode 100755 index 00000000..e6f7f526 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex03-3.html @@ -0,0 +1,80 @@ +
    basic_contourex03-3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php // content="text/plain; charset=utf-8"
    +// Basic contour plot example
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contour.php');
    + 
    +$data = array(
    +            array ( 12,7,3,15 ),
    +            array ( 18,5,1, 9 ),
    +            array ( 13,9,5,12),
    +            array (  5,3,8, 9 ),
    +            array (  1,8,5, 7 ));
    + 
    + 
    +// Basic contour graph
    +$graph = new Graph(350,250);
    +$graph->SetScale('intint');
    + 
    +// Show axis on all sides
    +$graph->SetAxisStyle(AXSTYLE_BOXOUT);
    + 
    +// Adjust the margins to fit the margin
    +$graph->SetMargin(30,100,40,30);
    + 
    +// Setup
    +$graph->title->Set('Basic contour plot with multiple axis');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// A simple contour plot with default arguments (e.g. 10 isobar lines)
    +$cp = new ContourPlot($data,10,3);
    + 
    +// Display the legend
    +$cp->ShowLegend();
    + 
    +$graph->Add($cp);
    + 
    +// ... and send the graph back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex04.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex04.html new file mode 100755 index 00000000..33b8e10d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex04.html @@ -0,0 +1,86 @@ +
    basic_contourex04.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +
    <?php // content="text/plain; charset=utf-8"
    +// Basic contour plot example
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contour.php');
    + 
    +$data = array(
    +            array (0.5,1.1,1.5,1,2.0,3,3,2,1,0.1),
    +            array (1.0,1.5,3.0,5,6.0,2,1,1.2,1,4),
    +            array (0.9,2.0,2.1,3,6.0,7,3,2,1,1.4),
    +            array (1.0,1.5,3.0,4,6.0,5,2,1.5,1,2),
    +            array (0.8,2.0,3.0,3,4.0,4,3,2.4,2,3),
    +            array (0.6,1.1,1.5,1,4.0,3.5,3,2,3,4),
    +            array (1.0,1.5,3.0,5,6.0,2,1,1.2,2.7,4),
    +            array (0.8,2.0,3.0,3,5.5,6,3,2,1,1.4),
    +            array (1.0,1.5,3.0,4,6.0,5,2,1,0.5,0.2));
    + 
    +// Basic contour graph
    +$graph = new Graph(350,250);
    +$graph->SetScale('intint');
    + 
    +// Show axis on all sides
    +$graph->SetAxisStyle(AXSTYLE_BOXOUT);
    + 
    +// Adjust the margins to fit the margin
    +$graph->SetMargin(30,100,40,30);
    + 
    +// Setup
    +$graph->title->Set('Basic contour plot with multiple axis');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// A simple contour plot with default arguments (e.g. 10 isobar lines)
    +$cp = new ContourPlot($data,5);
    + 
    +// Display the legend
    +$cp->ShowLegend();
    + 
    +$graph->Add($cp);
    + 
    +// ... and send the graph back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex05.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex05.html new file mode 100755 index 00000000..174dad7d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/basic_contourex05.html @@ -0,0 +1,92 @@ +
    basic_contourex05.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +
    <?php // content="text/plain; charset=utf-8"
    +// Basic contour plot example
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contour.php');
    + 
    +$data = array(
    +            array (0.5,1.1,1.5,1,2.0,3,3,2,1,0.1),
    +            array (1.0,1.5,3.0,5,6.0,2,1,1.2,1,4),
    +            array (0.9,2.0,2.1,3,6.0,7,3,2,1,1.4),
    +            array (1.0,1.5,3.0,4,6.0,5,2,1.5,1,2),
    +            array (0.8,2.0,3.0,3,4.0,4,3,2.4,2,3),
    +            array (0.6,1.1,1.5,1,4.0,3.5,3,2,3,4),
    +            array (1.0,1.5,3.0,5,6.0,2,1,1.2,2.7,4),
    +            array (0.8,2.0,3.0,3,5.5,6,3,2,1,1.4),
    +            array (1.0,1.5,3.0,4,6.0,5,2,1,0.5,0.2));
    + 
    +// Basic contour graph
    +$graph = new Graph(350,250);
    +$graph->SetScale('intint');
    + 
    +// Show axis on all sides
    +$graph->SetAxisStyle(AXSTYLE_BOXOUT);
    + 
    +// Adjust the margins to fit the margin
    +$graph->SetMargin(30,100,40,30);
    + 
    +// Setup
    +$graph->title->Set('Basic contour plot with multiple axis');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// A simple contour plot with default arguments (e.g. 10 isobar lines)
    +$cp = new ContourPlot($data);
    + 
    +// Flip the data around its center line
    +$cp->SetInvert();
    + 
    +// Display the legend
    +$cp->ShowLegend();
    + 
    +$graph->Add($cp);
    + 
    +// ... and send the graph back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/boxstockex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/boxstockex1.html new file mode 100755 index 00000000..9d057432 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/boxstockex1.html @@ -0,0 +1,66 @@ +
    boxstockex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php // content="text/plain; charset=utf-8"
    +// Example of a stock chart
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_stock.php');
    + 
    +// Data must be in the format : open,close,min,max,median
    +$datay = array(
    +    34,42,27,45,36,
    +    55,25,14,59,40,
    +    15,40,12,47,23,
    +    62,38,25,65,57,
    +    38,49,32,64,45);
    + 
    +// Setup a simple graph
    +$graph = new Graph(300,200);
    +$graph->SetScale('textlin');
    +$graph->SetMarginColor('lightblue');
    +$graph->title->Set('Box Stock chart example');
    + 
    +// Create a new stock plot
    +$p1 = new BoxPlot($datay);
    + 
    +// Width of the bars (in pixels)
    +$p1->SetWidth(9);
    + 
    +// Uncomment the following line to hide the horizontal end lines
    +//$p1->HideEndLines();
    + 
    +// Add the plot to the graph and send it back to the browser
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/builtinplotmarksex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/builtinplotmarksex1.html new file mode 100755 index 00000000..cf4af39b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/builtinplotmarksex1.html @@ -0,0 +1,128 @@ +
    builtinplotmarksex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_plotline.php');
    + 
    +$datay1 = array(2,6,7,12,13,18);
    +$datay2 = array(5,12,12,19,25,20);
    + 
    +// Setup the graph
    +$graph = new Graph(350,200);
    +$graph->SetMargin(30,20,60,20);
    +$graph->SetMarginColor('white');
    +$graph->SetScale("linlin");
    + 
    +// Hide the frame around the graph
    +$graph->SetFrame(false);
    + 
    +// Setup title
    +$graph->title->Set("Using Builtin PlotMarks");
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    + 
    +// Note: requires jpgraph 1.12p or higher
    +// $graph->SetBackgroundGradient('blue','navy:0.5',GRAD_HOR,BGRAD_PLOT);
    +$graph->tabtitle->Set('Region 1' );
    +$graph->tabtitle->SetWidth(TABTITLE_WIDTHFULL);
    + 
    +// Enable X and Y Grid
    +$graph->xgrid->Show();
    +$graph->xgrid->SetColor('gray@0.5');
    +$graph->ygrid->SetColor('gray@0.5');
    + 
    +// Format the legend box
    +$graph->legend->SetColor('navy');
    +$graph->legend->SetFillColor('lightgreen');
    +$graph->legend->SetLineWeight(1);
    +$graph->legend->SetFont(FF_ARIAL,FS_BOLD,8);
    +$graph->legend->SetShadow('gray@0.4',3);
    +$graph->legend->SetAbsPos(15,120,'right','bottom');
    + 
    +// Create the line plots
    + 
    +$p1 = new LinePlot($datay1);
    +$p1->SetColor("red");
    +$p1->SetFillColor("yellow@0.5");
    +$p1->SetWeight(2);
    +$p1->mark->SetType(MARK_IMG_DIAMOND,5,0.6);
    +$p1->SetLegend('2006');
    +$graph->Add($p1);
    + 
    +$p2 = new LinePlot($datay2);
    +$p2->SetColor("darkgreen");
    +$p2->SetWeight(2);
    +$p2->SetLegend('2001');
    +$p2->mark->SetType(MARK_IMG_MBALL,'red');
    +$graph->Add($p2);
    + 
    +// Add a vertical line at the end scale position '7'
    +$l1 = new PlotLine(VERTICAL,7);
    +$graph->Add($l1);
    + 
    +// Output the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex01.html new file mode 100755 index 00000000..58e1d3f4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex01.html @@ -0,0 +1,72 @@ +
    canvasex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id: canvasex01.php,v 1.3 2002/10/23 08:17:23 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    + 
    +// Setup a basic canvas we can work 
    +$g = new CanvasGraph(400,300,'auto');
    +$g->SetMargin(5,11,6,11);
    +$g->SetShadow();
    +$g->SetMarginColor("teal");
    + 
    +// We need to stroke the plotarea and margin before we add the
    +// text since we otherwise would overwrite the text.
    +$g->InitFrame();
    + 
    +// Draw a text box in the middle
    +$txt="This\nis\na TEXT!!!";
    +$t = new Text($txt,200,10);
    +$t->SetFont(FF_ARIAL,FS_BOLD,40);
    + 
    +// How should the text box interpret the coordinates?
    +$t->Align('center','top');
    + 
    +// How should the paragraph be aligned?
    +$t->ParagraphAlign('center');
    + 
    +// Add a box around the text, white fill, black border and gray shadow
    +$t->SetBox("white","black","gray");
    + 
    +// Stroke the text
    +$t->Stroke($g->img);
    + 
    +// Stroke the graph
    +$g->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex02.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex02.html new file mode 100755 index 00000000..8e0f4668 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex02.html @@ -0,0 +1,82 @@ +
    canvasex02.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id: canvasex02.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    + 
    +// Setup a basic canvas we can work 
    +$g = new CanvasGraph(400,200,'auto');
    +$g->SetMargin(5,11,6,11);
    +$g->SetShadow();
    +$g->SetMarginColor("teal");
    + 
    +// We need to stroke the plotarea and margin before we add the
    +// text since we otherwise would overwrite the text.
    +$g->InitFrame();
    + 
    +// Add a black line
    +$g->img->SetColor('black');
    +$g->img->Line(0,0,100,100);
    + 
    +// .. and a circle (x,y,diameter)
    +$g->img->Circle(100,100,50);
    + 
    +// .. and a filled circle (x,y,diameter)
    +$g->img->SetColor('red');
    +$g->img->FilledCircle(200,100,50);
    + 
    +// .. add a rectangle
    +$g->img->SetColor('green');
    +$g->img->FilledRectangle(10,10,50,50);
    + 
    +// .. add a filled rounded rectangle
    +$g->img->SetColor('green');
    +$g->img->FilledRoundedRectangle(300,30,350,80,10);
    +// .. with a darker border
    +$g->img->SetColor('darkgreen');
    +$g->img->RoundedRectangle(300,30,350,80,10);
    + 
    +// Stroke the graph
    +$g->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex03.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex03.html new file mode 100755 index 00000000..ffaeba31 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex03.html @@ -0,0 +1,114 @@ +
    canvasex03.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id: canvasex03.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_canvtools.php');
    + 
    +// Define work space
    +$xmax=20;
    +$ymax=20;
    + 
    +// Setup a basic canvas we can work 
    +$g = new CanvasGraph(400,200,'auto');
    +$g->SetMargin(5,11,6,11);
    +$g->SetShadow();
    +$g->SetMarginColor("teal");
    + 
    +// We need to stroke the plotarea and margin before we add the
    +// text since we otherwise would overwrite the text.
    +$g->InitFrame();
    + 
    +// Create a new scale
    +$scale = new CanvasScale($g);
    +$scale->Set(0,$xmax,0,$ymax);
    + 
    +// The shape class is wrapper around the Imgae class which translates
    +// the coordinates for us
    +$shape = new Shape($g,$scale);
    +$shape->SetColor('black');
    + 
    + 
    +// Add a black line
    +$shape->SetColor('black');
    +$shape->Line(0,0,20,20);
    + 
    +// .. and a circle (x,y,diameter)
    +$shape->Circle(5,14,2);
    + 
    +// .. and a filled circle (x,y,diameter)
    +$shape->SetColor('red');
    +$shape->FilledCircle(11,8,3);
    + 
    +// .. add a rectangle
    +$shape->SetColor('green');
    +$shape->FilledRectangle(15,8,19,14);
    + 
    +// .. add a filled rounded rectangle
    +$shape->SetColor('green');
    +$shape->FilledRoundedRectangle(2,3,8,6);
    +// .. with a darker border
    +$shape->SetColor('darkgreen');
    +$shape->RoundedRectangle(2,3,8,6);
    + 
    + 
    +// Stroke the graph
    +$g->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex04.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex04.html new file mode 100755 index 00000000..887dbfd7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex04.html @@ -0,0 +1,114 @@ +
    canvasex04.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id: canvasex04.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_canvtools.php');
    + 
    +// Define work space
    +$xmax=20;
    +$ymax=20;
    + 
    +// Setup a basic canvas we can work 
    +$g = new CanvasGraph(200,100,'auto');
    +$g->SetMargin(5,11,6,11);
    +$g->SetShadow();
    +$g->SetMarginColor("teal");
    + 
    +// We need to stroke the plotarea and margin before we add the
    +// text since we otherwise would overwrite the text.
    +$g->InitFrame();
    + 
    +// Create a new scale
    +$scale = new CanvasScale($g);
    +$scale->Set(0,$xmax,0,$ymax);
    + 
    +// The shape class is wrapper around the Imgae class which translates
    +// the coordinates for us
    +$shape = new Shape($g,$scale);
    +$shape->SetColor('black');
    + 
    + 
    +// Add a black line
    +$shape->SetColor('black');
    +$shape->Line(0,0,20,20);
    + 
    +// .. and a circle (x,y,diameter)
    +$shape->Circle(5,14,2);
    + 
    +// .. and a filled circle (x,y,diameter)
    +$shape->SetColor('red');
    +$shape->FilledCircle(11,8,3);
    + 
    +// .. add a rectangle
    +$shape->SetColor('green');
    +$shape->FilledRectangle(15,8,19,14);
    + 
    +// .. add a filled rounded rectangle
    +$shape->SetColor('green');
    +$shape->FilledRoundedRectangle(2,3,8,6);
    +// .. with a darker border
    +$shape->SetColor('darkgreen');
    +$shape->RoundedRectangle(2,3,8,6);
    + 
    + 
    +// Stroke the graph
    +$g->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex05.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex05.html new file mode 100755 index 00000000..6dd5e72e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex05.html @@ -0,0 +1,114 @@ +
    canvasex05.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id: canvasex05.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_canvtools.php');
    + 
    +// Define work space
    +$xmax=40;
    +$ymax=40;
    + 
    +// Setup a basic canvas we can work 
    +$g = new CanvasGraph(400,200,'auto');
    +$g->SetMargin(5,11,6,11);
    +$g->SetShadow();
    +$g->SetMarginColor("teal");
    + 
    +// We need to stroke the plotarea and margin before we add the
    +// text since we otherwise would overwrite the text.
    +$g->InitFrame();
    + 
    +// Create a new scale
    +$scale = new CanvasScale($g);
    +$scale->Set(0,$xmax,0,$ymax);
    + 
    +// The shape class is wrapper around the Imgae class which translates
    +// the coordinates for us
    +$shape = new Shape($g,$scale);
    +$shape->SetColor('black');
    + 
    + 
    +// Add a black line
    +$shape->SetColor('black');
    +$shape->Line(0,0,20,20);
    + 
    +// .. and a circle (x,y,diameter)
    +$shape->Circle(5,14,2);
    + 
    +// .. and a filled circle (x,y,diameter)
    +$shape->SetColor('red');
    +$shape->FilledCircle(11,8,3);
    + 
    +// .. add a rectangle
    +$shape->SetColor('green');
    +$shape->FilledRectangle(15,8,19,14);
    + 
    +// .. add a filled rounded rectangle
    +$shape->SetColor('green');
    +$shape->FilledRoundedRectangle(2,3,8,6);
    +// .. with a darker border
    +$shape->SetColor('darkgreen');
    +$shape->RoundedRectangle(2,3,8,6);
    + 
    + 
    +// Stroke the graph
    +$g->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex06.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex06.html new file mode 100755 index 00000000..a32e79c1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/canvasex06.html @@ -0,0 +1,82 @@ +
    canvasex06.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id: canvasex06.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_canvtools.php');
    + 
    +// Define work space
    +$xmax=40;
    +$ymax=40;
    + 
    +// Setup a basic canvas we can work 
    +$g = new CanvasGraph(400,200,'auto');
    +$g->SetMargin(5,11,6,11);
    +$g->SetShadow();
    +$g->SetMarginColor("teal");
    + 
    +// We need to stroke the plotarea and margin before we add the
    +// text since we otherwise would overwrite the text.
    +$g->InitFrame();
    + 
    +// Create a new scale
    +$scale = new CanvasScale($g);
    +$scale->Set(0,$xmax,0,$ymax);
    + 
    +// The shape class is wrapper around the Imgae class which translates
    +// the coordinates for us
    +$shape = new Shape($g,$scale);
    +$shape->SetColor('black');
    + 
    +$shape->IndentedRectangle(1,2,15,15,8,8,CORNER_TOPLEFT,'khaki');
    + 
    +$shape->IndentedRectangle(1,20,15,15,8,8,CORNER_BOTTOMLEFT,'khaki');
    + 
    +$shape->IndentedRectangle(20,2,15,15,8,8,CORNER_TOPRIGHT,'khaki');
    + 
    +$shape->IndentedRectangle(20,20,15,15,8,8,CORNER_BOTTOMRIGHT,'khaki');
    + 
    +// Stroke the graph
    +$g->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ccbp_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ccbp_ex1.html new file mode 100755 index 00000000..f05a27ce --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ccbp_ex1.html @@ -0,0 +1,72 @@ +
    ccbp_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php // content="text/plain; charset=utf-8" 
    +require_once 'jpgraph/jpgraph.php';
    +require_once 'jpgraph/jpgraph_line.php';
    +require_once 'jpgraph/jpgraph_plotmark.inc.php';
    +require_once 'jpgraph/jpgraph_scatter.php';
    +require_once 'ccbpgraph.class.php';
    + 
    +$graph = new CCBPGraph(600,400);
    +$graph->SetTitle('Buffer penetration','(history added)');
    +$graph->SetColorMap(0); 
    + 
    + // Two "fake tasks with hostory
    +$datax=array(75,83); $datay=array(110,64);
    +$datax1 = array(33,50,67,83); $datay1 = array(86,76,80,64);
    +$datax2 = array(18,47,58,75); $datay2 = array(80,97,105,110);
    + 
    +$sp = new ScatterPlot($datay,$datax);
    +$sp->mark->SetType(MARK_DIAMOND);
    +$sp->mark->SetFillColor('white');
    +$sp->mark->SetSize(12);
    + 
    +$sp_hist = array();
    +$sp_hist[0] = new LinePlot($datay1,$datax1);
    +$sp_hist[0]->SetWeight(1);
    +$sp_hist[0]->SetColor('white');
    + 
    +$sp_hist[1] = new LinePlot($datay2,$datax2);
    +$sp_hist[1]->SetWeight(1);
    +$sp_hist[1]->SetColor('white');
    + 
    +$graph->Add($sp_hist);
    +$graph->Add($sp);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ccbp_ex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ccbp_ex2.html new file mode 100755 index 00000000..6b52713f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ccbp_ex2.html @@ -0,0 +1,72 @@ +
    ccbp_ex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php // content="text/plain; charset=utf-8" 
    +require_once 'jpgraph/jpgraph.php';
    +require_once 'jpgraph/jpgraph_line.php';
    +require_once 'jpgraph/jpgraph_plotmark.inc.php';
    +require_once 'jpgraph/jpgraph_scatter.php';
    +require_once 'ccbpgraph.class.php';
    + 
    +$graph = new CCBPGraph(600,400);
    +$graph->SetTitle('Buffer penetration','(history added)');
    +$graph->SetColorMap(1); 
    + 
    + // Two "fake tasks with hostory
    +$datax=array(75,83); $datay=array(110,64);
    +$datax1 = array(33,50,67,83); $datay1 = array(86,76,80,64);
    +$datax2 = array(18,47,58,75); $datay2 = array(80,97,105,110);
    + 
    +$sp = new ScatterPlot($datay,$datax);
    +$sp->mark->SetType(MARK_DIAMOND);
    +$sp->mark->SetFillColor('white');
    +$sp->mark->SetSize(12);
    + 
    +$sp_hist = array();
    +$sp_hist[0] = new LinePlot($datay1,$datax1);
    +$sp_hist[0]->SetWeight(1);
    +$sp_hist[0]->SetColor('white');
    + 
    +$sp_hist[1] = new LinePlot($datay2,$datax2);
    +$sp_hist[1]->SetWeight(1);
    +$sp_hist[1]->SetColor('white');
    + 
    +$graph->Add($sp_hist);
    +$graph->Add($sp);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ccbpgraph.class.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ccbpgraph.class.html new file mode 100755 index 00000000..5336bad4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ccbpgraph.class.html @@ -0,0 +1,514 @@ +
    ccbpgraph.class.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    +229
    +230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    +245
    +246
    +247
    +248
    +249
    +250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +
    <?php // content="text/plain; charset=utf-8" 
    +/**
    +* Class CCBPGraph
    +* Utility class to create Critical Chain Buffer penetration charts
    +*/
    +class CCBPGraph {
    +    const TickStep = 25;
    +    const YTitle = '% Buffer used';
    +    const XTitle = '% CC Completed';
    +    const NColorMaps = 2;
    +    private $graph=null;
    +    private $iWidth,$iHeight;
    +    private $iPlots=array();
    +    private $iXMin=-50, $iXMax = 100;
    +    private $iYMin=-50, $iYMax = 150;
    +    private $iColorInd = array( 
    +        array(5,75),   /* Green */
    +        array(25,85),  /* Yellow */
    +        array(50,100));/* Red */ 
    +    private $iColorMap = 0;
    +    private $iColorSpec = array(
    +                array('darkgreen:1.0','yellow:1.4','red:0.8','darkred:0.85'),
    +                array('#c6e9af','#ffeeaa','#ffaaaa','#de8787'));
    +    private $iMarginColor = array('darkgreen@0.7','darkgreen@0.9');                
    +    private $iSubTitle='',$iTitle = 'CC Buffer penetration';
    +    /**
    +    * Construct a new instance of CCBPGraph 
    +    * 
    +    * @param int $aWidth
    +    * @param int $aHeight
    +    * @return CCBPGraph
    +    */
    +    public function __construct($aWidth, $aHeight) {
    +        $this->iWidth = $aWidth;
    +        $this->iHeight = $aHeight;
    +    }
    +    /**
    +    * Set the title and subtitle for the graph
    +    * 
    +    * @param string $aTitle
    +    * @param string $aSubTitle
    +    */
    +    public function SetTitle($aTitle, $aSubTitle) {
    +        $this->iTitle = $aTitle;
    +        $this->iSubTitle = $aSubTitle;
    +    }
    +    /**
    +    * Set the x-axis min and max values
    +    * 
    +    * @param int $aMin
    +    * @param int $aMax
    +    */
    +    public function SetXMinMax($aMin, $aMax) {
    +        $this->iXMin = floor($aMin/CCBPGraph::TickStep)*CCBPGraph::TickStep;
    +        $this->iXMax = ceil($aMax/CCBPGraph::TickStep)*CCBPGraph::TickStep;
    +    }
    +    /**
    +    * Specify what color map to use
    +    * 
    +    * @param int $aMap
    +    */
    +    public function SetColorMap($aMap) {
    +        $this->iColorMap = $aMap % CCBPGraph::NColorMaps;
    +    }
    +    /**
    +    * Set the y-axis min and max values
    +    * 
    +    * @param int $aMin
    +    * @param int $aMax
    +    */
    +    public function SetYMinMax($aMin,$aMax) {
    +        $this->iYMin = floor($aMin/CCBPGraph::TickStep)*CCBPGraph::TickStep;
    +        $this->iYMax = ceil($aMax/CCBPGraph::TickStep)*CCBPGraph::TickStep;
    +    }
    +    /**
    +    * Set the specification of the color backgrounds and also the
    +    * optional exact colors to be used
    +    * 
    +    * @param mixed $aSpec  An array of 3 1x2 arrays. Each array specify the 
    +    * color indication value at x=0 and x=max x in order to determine the slope
    +    * @param mixed $aColors  An array with four elements specifying the colors
    +    * of each color indicator
    +    */
    +    public function SetColorIndication(array $aSpec,array $aColors=null) {
    +        if( count($aSpec) !== 3 ) {
    +            JpgraphError::Raise('Specification of scale values for background indicators must be an array with three elements.');
    +        }
    +        $this->iColorInd = $aSpec;    
    +        if( $aColors !== null ) {
    +            if( is_array($aColors) && count($aColors) == 4 ) {
    +                $this->iColorSpec = $aColors;
    +            }
    +            else {
    +                JpGraphError::Raise('Color specification for background indication must have four colors.');
    +            }
    +        }        
    +    }
    +    /**
    +    * Construct the graph
    +    * 
    +    */
    +    private function Init() {
    + 
    +        // Setup limits for color indications
    +        $lowx = $this->iXMin; $highx= $this->iXMax;
    +        $lowy = $this->iYMin; $highy = $this->iYMax;
    +         $width=$this->iWidth; $height=$this->iHeight;
    + 
    +        // Margins
    +        $lm=50; $rm=40;
    +        $tm=60; $bm=40;
    +        
    +        if( $width <= 300 || $height <= 250 ) {
    +            $labelsize = 8;
    +            $lm=25; $rm=25;
    +            $tm=45; $bm=25;
    +        }                
    +        elseif( $width <= 450 || $height <= 300 ) {
    +            $labelsize = 8;
    +            $lm=30; $rm=30;
    +            $tm=50; $bm=30;
    +        }
    +        elseif( $width <= 600 || $height <= 400 ) {
    +            $labelsize = 9;        
    +        }
    +        else {
    +            $labelsize = 11;
    +        }    
    +        
    +        if( $this->iSubTitle == '' ) {
    +            $tm -= $labelsize+4;
    +        }     
    + 
    +        $graph = new Graph($width,$height);
    +        $graph->SetScale('intint',$lowy,$highy,$lowx,$highx);
    +        $graph->SetMargin($lm,$rm,$tm,$bm);
    +        $graph->SetMarginColor($this->iMarginColor[$this->iColorMap]);
    +        $graph->SetClipping();
    +        
    +        $graph->title->Set($this->iTitle);
    +        $graph->subtitle->Set($this->iSubTitle);
    +        
    +        $graph->title->SetFont(FF_ARIAL,FS_BOLD,$labelsize+4);
    +        $graph->subtitle->SetFont(FF_ARIAL,FS_BOLD,$labelsize+1);
    +        
    +        $graph->SetBox(true,'black@0.3');
    + 
    +        $graph->xaxis->SetFont(FF_ARIAL,FS_BOLD,$labelsize);
    +        $graph->yaxis->SetFont(FF_ARIAL,FS_BOLD,$labelsize);
    +        
    +        $graph->xaxis->scale->ticks->Set(CCBPGraph::TickStep,CCBPGraph::TickStep);
    +        $graph->yaxis->scale->ticks->Set(CCBPGraph::TickStep,CCBPGraph::TickStep);
    +        
    +        $graph->xaxis->HideZeroLabel();
    +        $graph->yaxis->HideZeroLabel();
    +                
    +        $graph->xaxis->SetLabelFormatString('%d%%');
    +        $graph->yaxis->SetLabelFormatString('%d%%');
    +        
    +        // For the x-axis we adjust the color so labels on the left of the Y-axis are in black
    +        $n1 = floor(abs($this->iXMin/25))+1;
    +        $n2 = floor($this->iXMax/25);
    +        if( $this->iColorMap == 0 ) {
    +            $xlcolors=array();
    +            for( $i = 0; $i < $n1; ++$i ) {
    +                $xlcolors[$i] = 'black';
    +            }
    +            for( $i = 0; $i < $n2; ++$i ) {
    +                $xlcolors[$n1+$i] = 'lightgray:1.5';
    +            }
    +            $graph->xaxis->SetColor('gray',$xlcolors);
    +            $graph->yaxis->SetColor('gray','lightgray:1.5');
    +        }
    +        else {
    +            $graph->xaxis->SetColor('darkgray','darkgray:0.8');
    +            $graph->yaxis->SetColor('darkgray','darkgray:0.8');            
    +        }
    +        $graph->SetGridDepth(DEPTH_FRONT);
    +        $graph->ygrid->SetColor('gray@0.6');
    +        $graph->ygrid->SetLineStyle('dotted');
    +        
    +        $graph->ygrid->Show();
    +        
    +        $graph->xaxis->SetWeight(1);
    +        $graph->yaxis->SetWeight(1);
    +        
    +        $ytitle = new Text(CCBPGraph::YTitle,floor($lm*.75),($height-$tm-$bm)/2+$tm);
    +        #$ytitle->SetFont(FF_VERA,FS_BOLD,$labelsize+1);
    +        $ytitle->SetAlign('right','center');
    +        $ytitle->SetAngle(90);
    +        $graph->Add($ytitle);
    +        
    +        $xtitle = new Text(CCBPGraph::XTitle,($width-$lm-$rm)/2+$lm,$height - 10);
    +        #$xtitle->SetFont(FF_VERA,FS_BOLD,$labelsize);
    +        $xtitle->SetAlign('center','bottom');
    +        $graph->Add($xtitle);
    +        
    +        $df = 'D j:S M, Y'; 
    +        if( $width < 400 ) {
    +            $df = 'D j:S M';
    +        }
    +        
    +        $time = new Text(date($df),$width-10,$height-10);
    +        $time->SetAlign('right','bottom');
    +        #$time->SetFont(FF_VERA,FS_NORMAL,$labelsize-1);
    +        $time->SetColor('darkgray');
    +        $graph->Add($time);
    + 
    +        // Use an accumulated fille line graph to create the colored bands
    +       
    +        $n = 3;
    +        for( $i=0; $i < $n; ++$i ) {
    +            $b = $this->iColorInd[$i][0];
    +            $k = ($this->iColorInd[$i][1] - $this->iColorInd[$i][0])/$this->iXMax;
    +            $colarea[$i] = array( array($lowx,$lowx*$k+$b), array($highx,$highx*$k+$b) );
    +        }
    +        $colarea[3] = array( array($lowx,$highy), array($highx,$highy) );
    +        
    +        
    +        $cb = array();
    +        for( $i=0; $i < 4; ++$i ) {
    +            $cb[$i] = new LinePlot(array($colarea[$i][0][1],$colarea[$i][1][1]),
    +                                   array($colarea[$i][0][0],$colarea[$i][1][0]));
    +            $cb[$i]->SetFillColor($this->iColorSpec[$this->iColorMap][$i]);
    +            $cb[$i]->SetFillFromYMin();                                   
    +        }
    + 
    +        $graph->Add(array_slice(array_reverse($cb),0,4));    
    +        $this->graph = $graph;
    +    }
    +    /**
    +    * Add a line or scatter plot to the graph
    +    * 
    +    * @param mixed $aPlots
    +    */
    +    public function Add($aPlots) {
    +        if( is_array($aPlots) ) {
    +            $this->iPlots = array_merge($this->iPlots,$aPlots);                
    +        }
    +        else {
    +            $this->iPlots[] = $aPlots;
    +        }
    +    }
    +    /**
    +    * Stroke the graph back to the client or to a file
    +    * 
    +    * @param mixed $aFile
    +    */
    +    public function Stroke($aFile='') {
    +        $this->Init();
    +        if( count($this->iPlots) > 0 )  {
    +            $this->graph->Add($this->iPlots);
    +        }
    +        $this->graph->Stroke($aFile);
    +    }
    +}
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/checkgd.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/checkgd.html new file mode 100755 index 00000000..f5892884 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/checkgd.html @@ -0,0 +1,22 @@ +
    checkgd.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    <?php // content="text/plain; charset=utf-8"
    +$im = @imagecreate (200, 100) or die ( "cannot create a new gd image.");
    +$background_color = imagecolorallocate ($im, 240, 240, 240);
    +$border_color = imagecolorallocate ($im, 50, 50, 50);
    +$text_color = imagecolorallocate ($im, 233, 14, 91);
    + 
    +imagerectangle($im,0,0,199,99,$border_color);
    +imagestring ($im, 5, 10, 40, "a simple text string", $text_color );
    +header ("content-type: image/png");
    +imagepng ($im);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/checkgd2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/checkgd2.html new file mode 100755 index 00000000..b4859805 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/checkgd2.html @@ -0,0 +1,28 @@ +
    checkgd2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +
    <?php // content="text/plain; charset=utf-8"
    +$im =  imagecreatetruecolor ( 300, 200);
    +$black = imagecolorallocate ($im,  0, 0, 0);
    +$lightgray = imagecolorallocate ($im,  230, 230, 230);
    +$darkgreen = imagecolorallocate ($im,  80, 140, 80);
    +$white = imagecolorallocate ($im,  255, 255, 255);
    + 
    +imagefilledrectangle ($im,0,0,299,199 ,$lightgray);
    +imagerectangle ($im,0,0,299,199,$black);
    +imagefilledellipse ($im,150,100,210,110,$white);
    +imagefilledellipse ($im,150,100,200,100,$darkgreen);
    +header ("Content-type: image/png");
    +imagepng ($im);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/checkttf.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/checkttf.html new file mode 100755 index 00000000..1c7abfda --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/checkttf.html @@ -0,0 +1,44 @@ +
    checkttf.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php // content="text/plain; charset=utf-8"
    +// Change this defines to where Your fonts are stored
    +DEFINE("TTF_DIR","/usr/share/fonts/truetype/");
    + 
    +// Change this define to a font file that You know that You have
    +DEFINE("TTF_FONTFILE","arial.ttf");
    + 
    +// Text to display
    +DEFINE("TTF_TEXT","Hello World!");
    + 
    +$im = imagecreatetruecolor (400, 100);
    +$white = imagecolorallocate ($im, 255, 255, 255);
    +$black = imagecolorallocate ($im, 0, 0, 0);
    +$border_color = imagecolorallocate ($im, 50, 50, 50);
    + 
    +imagefilledrectangle($im,0,0,399,99,$white);
    +imagerectangle($im,0,0,399,99,$border_color);
    +imagettftext ($im, 30, 0, 90, 60, $black, TTF_DIR.TTF_FONTFILE,TTF_TEXT);
    + 
    +header ("Content-type: image/png");
    +imagepng ($im);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/clipping_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/clipping_ex1.html new file mode 100755 index 00000000..69b38618 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/clipping_ex1.html @@ -0,0 +1,72 @@ +
    clipping_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,250);    
    +$graph->SetScale('intlin',0,10);
    +$graph->SetMargin(30,20,70,40);
    +$graph->SetMarginColor(array(177,191,174));
    + 
    +$graph->SetClipping(false);
    + 
    +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$graph->ygrid->SetLineStyle('dashed');
    + 
    +$graph->title->Set("Manual scale");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->title->SetColor('white');
    +$graph->subtitle->Set("(No clipping)");
    +$graph->subtitle->SetColor('white');
    +$graph->subtitle->SetFont(FF_ARIAL,FS_BOLD,10);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor("red");
    +$lineplot->SetWeight(2);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/clipping_ex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/clipping_ex2.html new file mode 100755 index 00000000..708e497c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/clipping_ex2.html @@ -0,0 +1,72 @@ +
    clipping_ex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,250);    
    +$graph->SetScale('intlin',0,10);
    +$graph->SetMargin(30,20,70,40);
    +$graph->SetMarginColor(array(177,191,174));
    + 
    +$graph->SetClipping(true);
    + 
    +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$graph->ygrid->SetLineStyle('dashed');
    + 
    +$graph->title->Set("Manual scale");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->title->SetColor('white');
    +$graph->subtitle->Set("(With clipping)");
    +$graph->subtitle->SetColor('white');
    +$graph->subtitle->SetFont(FF_ARIAL,FS_BOLD,10);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor("red");
    +$lineplot->SetWeight(2);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/comb90dategraphex03.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/comb90dategraphex03.html new file mode 100755 index 00000000..7eae848c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/comb90dategraphex03.html @@ -0,0 +1,294 @@ +
    comb90dategraphex03.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_date.php');
    +require_once ('jpgraph/jpgraph_mgraph.php');
    + 
    +// Setup some fake data to simulate some wind speed and direction
    + 
    +DEFINE('NDATAPOINTS',280);
    +DEFINE('SAMPLERATE',300);
    + 
    +$start = time();
    +$end = $start+NDATAPOINTS*SAMPLERATE;
    +$xdata = array();
    + 
    +$data_winddirection[0] = rand(100,200);
    +$data_windspeed[0] = rand(7,10);
    +$data_windtemp[0] = rand(5,20);
    + 
    +for( $i=0; $i < NDATAPOINTS-1; ++$i ) {
    +    $data_winddirection[$i+1] = $data_winddirection[$i] + rand(-4,4);
    +    if($data_winddirection[$i+1] < 0 || $data_winddirection[$i+1] > 359)
    +        $data_winddirection[$i+1] = 0;
    + 
    +    $data_windspeed[$i+1] = $data_windspeed[$i] + rand(-2,2);
    +    if($data_windspeed[$i+1] < 0 )
    +        $data_windspeed[$i+1] = 0;
    + 
    +    $data_windtemp[$i+1] = $data_windtemp[$i] + rand(-1.5,1.5);
    + 
    +    $xdata[$i] = $start + $i * SAMPLERATE;
    +}
    +$xdata[$i] = $start + $i * SAMPLERATE;
    + 
    + 
    +//DEFINE('BKG_COLOR','lightgray:1.7');
    +DEFINE('BKG_COLOR','green:1.98');
    +DEFINE('WIND_HEIGHT',800);
    +DEFINE('WIND_WIDTH',250);
    + 
    +//------------------------------------------------------------------
    +// Setup the Wind direction graph
    +//------------------------------------------------------------------
    +$graph = new Graph(WIND_WIDTH,WIND_HEIGHT);
    +$graph->SetMarginColor(BKG_COLOR);
    +$graph->SetScale('datlin',0,360);
    +$graph->Set90AndMargin(50,10,70,30);
    +$graph->SetFrame(true,'white',0);
    +$graph->SetBox();
    + 
    +$graph->title->Set('Wind direction');
    +$graph->title->SetColor('blue');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->title->SetMargin(5);
    + 
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->xaxis->scale->SetDateFormat('H:i');
    +$graph->xgrid->Show();
    + 
    +$graph->yaxis->SetLabelAngle(90);
    +$graph->yaxis->SetColor('blue');
    +$graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph->yaxis->SetLabelMargin(0);
    +$graph->yaxis->scale->SetAutoMin(0);
    + 
    +$line = new LinePlot($data_winddirection,$xdata);
    +$line->SetStepStyle();
    +$line->SetColor('blue');
    + 
    +$graph->Add($line);
    + 
    +//------------------------------------------------------------------
    +// Setup the wind speed graph
    +//------------------------------------------------------------------
    +$graph2 = new Graph(WIND_WIDTH-30,WIND_HEIGHT);
    +$graph2->SetScale('datlin');
    +$graph2->Set90AndMargin(5,20,70,30);
    +$graph2->SetMarginColor(BKG_COLOR);
    +$graph2->SetFrame(true,'white',0);
    +$graph2->SetBox();
    + 
    +$graph2->title->Set('Windspeed');
    +$graph2->title->SetColor('red');
    +$graph2->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph2->title->SetMargin(5);
    + 
    +$graph2->xaxis->HideLabels();
    +$graph2->xgrid->Show();
    + 
    +$graph2->yaxis->SetLabelAngle(90);
    +$graph2->yaxis->SetColor('red');
    +$graph2->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph2->yaxis->SetLabelMargin(0);
    +$graph2->yaxis->scale->SetAutoMin(0);
    + 
    +$line2 = new LinePlot($data_windspeed,$xdata);
    +$line2->SetStepStyle();
    +$line2->SetColor('red');
    + 
    +$graph2->Add($line2);
    + 
    +//------------------------------------------------------------------
    +// Setup the wind temp graph
    +//------------------------------------------------------------------
    +$graph3 = new Graph(WIND_WIDTH-30,WIND_HEIGHT);
    +$graph3->SetScale('datlin');
    +$graph3->Set90AndMargin(5,20,70,30);
    +$graph3->SetMarginColor(BKG_COLOR);
    +$graph3->SetFrame(true,'white',0);
    +$graph3->SetBox();
    + 
    +$graph3->title->Set('Temperature');
    +$graph3->title->SetColor('black');
    +$graph3->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph3->title->SetMargin(5);
    + 
    +$graph3->xaxis->HideLabels();
    +$graph3->xgrid->Show();
    + 
    +$graph3->yaxis->SetLabelAngle(90);
    +$graph3->yaxis->SetColor('black');
    +$graph3->yaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$graph3->yaxis->SetLabelMargin(0);
    +$graph3->yaxis->scale->SetAutoMin(-10);
    + 
    +$line3 = new LinePlot($data_windtemp,$xdata);
    +$line3->SetStepStyle();
    +$line3->SetColor('black');
    + 
    +$graph3->Add($line3);
    + 
    +//-----------------------
    +// Create a multigraph
    +//----------------------
    +$mgraph = new MGraph();
    +$mgraph->SetMargin(2,2,2,2);
    +$mgraph->SetFrame(true,'darkgray',2);
    +$mgraph->SetFillColor(BKG_COLOR);
    +$mgraph->Add($graph,0,50);
    +$mgraph->Add($graph2,250,50);
    +$mgraph->Add($graph3,460,50);
    +$mgraph->title->Set('Climate diagram 12 March 2009');
    +$mgraph->title->SetFont(FF_ARIAL,FS_BOLD,20);
    +$mgraph->title->SetMargin(8);
    +$mgraph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/combgraphex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/combgraphex1.html new file mode 100755 index 00000000..8f609439 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/combgraphex1.html @@ -0,0 +1,174 @@ +
    combgraphex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    +require_once ('jpgraph/jpgraph_utils.inc.php');
    +require_once ('jpgraph/jpgraph_mgraph.php');
    + 
    +//------------------------------------------------------------------
    +// Create some random data for the plot. We use the current time for the
    +// first X-position
    +//------------------------------------------------------------------
    +$datay = array();
    +$datax = array();
    +$ts = time();
    +$n=70; // Number of data points
    +for($i=0; $i < $n; ++$i ) {
    +    $datax[$i] = $ts+$i*150000; 
    +    $datay[$i] = rand(5,60);
    +    $datay2[$i] = rand(1,8);
    +}
    + 
    +// Now get labels at the start of each month
    +$dateUtils = new DateScaleUtils();
    +list($tickPositions,$minTickPositions) = $dateUtils->getTicks($datax,DSUTILS_MONTH1);
    + 
    +// Now create the real graph
    +// Combine a line and a bar graph
    + 
    +// We add some grace to the end of the X-axis scale so that the first and last
    +// data point isn't exactly at the very end or beginning of the scale
    +$grace = 400000;
    +$xmin = $datax[0]-$grace;
    +$xmax = $datax[$n-1]+$grace;;
    + 
    +// Overall width of graphs
    +$w = 450;
    +// Left and right margin for each graph
    +$lm=25; $rm=15; 
    + 
    +//----------------------
    +// Setup the line graph
    +//----------------------
    +$graph = new Graph($w,250);
    +$graph->SetScale('linlin',0,0,$xmin,$xmax);
    +$graph->SetMargin($lm,$rm,10,30);
    +$graph->SetMarginColor('white');
    +$graph->SetFrame(false);
    +$graph->SetBox(true);
    +$graph->title->Set('Example of combined graph');
    +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,14);
    +$graph->xaxis->SetTickPositions($tickPositions,$minTickPositions);
    +$graph->xaxis->SetLabelFormatString('My',true);
    +$graph->xgrid->Show();
    +$p1 = new LinePlot($datay,$datax);
    +$graph->Add($p1);
    + 
    +//----------------------
    +// Setup the bar graph
    +//----------------------
    +$graph2 = new Graph($w,110);
    +$graph2->SetScale('linlin',0,0,$xmin,$xmax);
    +$graph2->SetMargin($lm,$rm,5,10);
    +$graph2->SetMarginColor('white');
    +$graph2->SetFrame(false);
    +$graph2->SetBox(true);
    +$graph2->xgrid->Show();
    +$graph2->xaxis->SetTickPositions($tickPositions,$minTickPositions);
    +$graph2->xaxis->SetLabelFormatString('My',true);
    +$graph2->xaxis->SetPos('max');
    +$graph2->xaxis->HideLabels();
    +$graph2->xaxis->SetTickSide(SIDE_DOWN);
    +$b1 = new BarPlot($datay2,$datax);
    +$b1->SetFillColor('teal');
    +$b1->SetColor('teal:1.2');
    +$graph2->Add($b1);
    + 
    +//-----------------------
    +// Create a multigraph
    +//----------------------
    +$mgraph = new MGraph();
    +$mgraph->SetMargin(2,2,2,2);
    +$mgraph->SetFrame(true,'darkgray',2);
    +$mgraph->Add($graph);
    +$mgraph->Add($graph2,0,240);
    +$mgraph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/combgraphex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/combgraphex2.html new file mode 100755 index 00000000..08dcf518 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/combgraphex2.html @@ -0,0 +1,176 @@ +
    combgraphex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('../jpgraph.php');
    +require_once ('../jpgraph_mgraph.php');
    +require_once ('../jpgraph_line.php');
    +require_once ('../jpgraph_bar.php');
    +require_once ('../jpgraph_utils.inc.php');
    + 
    +//------------------------------------------------------------------
    +// Create some random data for the plot. We use the current time for the
    +// first X-position
    +//------------------------------------------------------------------
    +$datay = array();
    +$datax = array();
    +$ts = time();
    +$n=70; // Number of data points
    +for($i=0; $i < $n; ++$i ) {
    +    $datax[$i] = $ts+$i*150000; 
    +    $datay[$i] = rand(5,60);
    +    $datay2[$i] = rand(1,8);
    +}
    + 
    +// Now get labels at the start of each month
    +list($tickPositions,$minTickPositions) = DateScaleUtils::getTicks($datax,DSUTILS_MONTH1);
    + 
    +// Now create the real graph
    +// Combine a line and a bar graph
    + 
    +// We add some grace to the end of the X-axis scale so that the first and last
    +// data point isn't exactly at the very end or beginning of the scale
    +$grace = 400000;
    +$xmin = $datax[0]-$grace;
    +$xmax = $datax[$n-1]+$grace;;
    + 
    +// Overall width of graphs
    +$w = 450;
    +// Left and right margin for each graph
    +$lm=25; $rm=15; 
    + 
    +//----------------------
    +// Setup the line graph
    +//----------------------
    +$graph = new Graph($w,250);
    +$graph->SetScale('linlin',0,0,$xmin,$xmax);
    +$graph->SetMargin($lm,$rm,10,30);
    +$graph->SetMarginColor('white');
    +$graph->SetFrame(false);
    +$graph->SetBox(true);
    +$graph->title->Set('Example of combined graph with background');
    +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,14);
    +$graph->xaxis->SetTickPositions($tickPositions,$minTickPositions);
    +$graph->xaxis->SetLabelFormatString('My',true);
    +$graph->xgrid->Show();
    +$p1 = new LinePlot($datay,$datax);
    +$graph->Add($p1);
    + 
    +//----------------------
    +// Setup the bar graph
    +//----------------------
    +$graph2 = new Graph($w,110);
    +$graph2->SetScale('linlin',0,0,$xmin,$xmax);
    +$graph2->SetMargin($lm,$rm,5,10);
    +$graph2->SetMarginColor('white');
    +$graph2->SetFrame(false);
    +$graph2->SetBox(true);
    +$graph2->xgrid->Show();
    +$graph2->xaxis->SetTickPositions($tickPositions,$minTickPositions);
    +$graph2->xaxis->SetLabelFormatString('My',true);
    +$graph2->xaxis->SetPos('max');
    +$graph2->xaxis->HideLabels();
    +$graph2->xaxis->SetTickSide(SIDE_DOWN);
    +$b1 = new BarPlot($datay2,$datax);
    +$b1->SetFillColor('teal');
    +$b1->SetColor('teal:1.2');
    +$graph2->Add($b1);
    + 
    +//-----------------------
    +// Create a multigraph
    +//----------------------
    +$mgraph = new MGraph();
    +$mgraph->SetImgFormat('jpeg',60);
    +$mgraph->SetMargin(2,2,2,2);
    +$mgraph->SetFrame(true,'darkgray',2);
    +$mgraph->SetBackgroundImage('tiger1.jpg');
    +$mgraph->AddMix($graph,0,0,85);
    +$mgraph->AddMix($graph2,0,250,85);
    +$mgraph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/common-obj-graph.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/common-obj-graph.html new file mode 100755 index 00000000..8d9b4ee9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/common-obj-graph.html @@ -0,0 +1,118 @@ +
    common-obj-graph.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    +$y2data = array(354,200,265,99,111,91,198,225,293,251);
    + 
    +// Create the graph and specify the scale for both Y-axis
    +$width=550;$height=400;
    +$graph = new Graph(550,400);
    +$graph->SetScale('textlin');
    +$graph->SetY2Scale('lin');
    +$graph->SetShadow();
    + 
    +// Adjust the margin
    +$graph->SetMargin(50,150,60,80);
    + 
    +// Create the two linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot2=new LinePlot($y2data);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    +$graph->AddY2($lineplot2);
    +$lineplot2->SetColor('orange');
    +$lineplot2->SetWeight(2);
    + 
    +// Adjust the axis color
    +$graph->y2axis->SetColor('darkred');
    +$graph->yaxis->SetColor('blue');
    + 
    +$graph->title->SetFont(FF_ARIAL, FS_BOLD, 14);
    +$graph->title->Set('Using JpGraph Library');
    +$graph->title->SetMargin(10);
    + 
    +$graph->subtitle->SetFont(FF_ARIAL, FS_BOLD, 10);
    +$graph->subtitle->Set('(common objects)');
    + 
    +$graph->xaxis->title->SetFont(FF_ARIAL, FS_BOLD, 10);
    +$graph->xaxis->title->Set('X-title');
    +$graph->yaxis->title->SetFont(FF_ARIAL, FS_BOLD, 10);
    +$graph->yaxis->title->Set('Y-title');
    + 
    +// Set the colors for the plots
    +$lineplot->SetColor('blue');
    +$lineplot->SetWeight(2);
    +$lineplot2->SetColor('darkred');
    +$lineplot2->SetWeight(2);
    + 
    +// Set the legends for the plots
    +$lineplot->SetLegend('Plot 1');
    +$lineplot2->SetLegend('Plot 2');
    + 
    +// Adjust the legend position
    +$graph->legend->SetPos(0.05,0.5,'right','center');
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/common-obj-piegraph.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/common-obj-piegraph.html new file mode 100755 index 00000000..2b6d91fb --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/common-obj-piegraph.html @@ -0,0 +1,76 @@ +
    common-obj-piegraph.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php
    +include ("../jpgraph.php");
    +include ("../jpgraph_pie.php");
    + 
    +// Some data
    +$data = array(50,15,25,10,31,20);
    + 
    +// A new graph
    +$graph = new PieGraph(400,420);
    +$graph->SetAntiAliasing();
    + 
    +$graph->title->SetFont(FF_ARIAL, FS_BOLD, 14);
    +$graph->title->Set('Using JpGraph Library');
    +$graph->title->SetMargin(10);
    + 
    +$graph->subtitle->SetFont(FF_ARIAL, FS_BOLD, 10);
    +$graph->subtitle->Set('(common objects)');
    + 
    +// The pie plot
    +$p1 = new PiePlot($data);
    +$p1->SetSliceColors(array('darkred','navy','lightblue','orange','gray','teal'));
    + 
    +// Move center of pie to the left to make better room
    +// for the legend
    +$p1->SetSize(0.3);
    +$p1->SetCenter(0.5,0.47);
    +$p1->value->Show();
    +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,10);
    + 
    +// Legends
    +$p1->SetLegends(array("May (%1.1f%%)","June (%1.1f%%)","July (%1.1f%%)","Aug (%1.1f%%)",
    +"Sep (%1.1f%%)", "Oct (%1.1f%%)"));
    +$graph->legend->SetPos(0.5,0.97,'center','bottom');
    +$graph->legend->SetColumns(3);
    + 
    +$graph->Add($p1);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex1.html new file mode 100755 index 00000000..3ce0ff09 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex1.html @@ -0,0 +1,100 @@ +
    contour2_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contourf.php');
    + 
    +// Setup some data to use for the contour
    +$data = array(
    +    array (12,12,10,10),
    +    array (10,10,8,14),
    +    array (7,7,13,17),
    +    array (4,5,8,12),
    +    array (10,8,7,8));
    + 
    +// create a basic graph as a container
    +$graph = new Graph(300,300);
    +$graph->SetMargin(30, 30, 40, 30);
    +$graph->SetScale('intint');
    +$graph->SetMarginColor('white');
    + 
    +// Setup title of graph
    +$graph->title->Set('Filled contour plot');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    + 
    +$graph->subtitle->Set('(With lines and labels)');
    +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10);
    + 
    +// Create a new contour plot
    +$cp = new FilledContourPlot($data);
    + 
    +// Use only blue/red color schema
    +$cp->UseHighContrastColor(true);
    + 
    +// Flip visually 
    +$cp->SetInvert();
    + 
    +// Fill the contours
    +$cp->SetFilled(true);
    + 
    +// Display the labels
    +$cp->ShowLabels(true,true);
    +$cp->SetFont(FF_ARIAL,FS_BOLD,9);
    +$cp->SetFontColor('white');
    + 
    +// And add the plot to the graph
    +$graph->Add($cp);
    + 
    +// Send it back to the client
    +$graph->stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex2.html new file mode 100755 index 00000000..7eea493f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex2.html @@ -0,0 +1,102 @@ +
    contour2_ex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contourf.php');
    + 
    +// Setup some data to use for the contour
    +$data = array(
    +    array (12,12,10,10),
    +    array (10,10,8,14),
    +    array (7,7,13,17),
    +    array (4,5,8,12),
    +    array (10,8,7,8));
    + 
    +// create a basic graph as a container
    +$graph = new Graph(300,300);
    +$graph->SetMargin(30, 30, 40, 30);
    +$graph->SetScale('intint');
    +$graph->SetMarginColor('white');
    + 
    +// Setup title of graph
    +$graph->title->Set('Filled contour plot');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    + 
    +$graph->subtitle->Set('(No lines, no labels)');
    +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10);
    + 
    +// Create a new contour plot
    +$cp = new FilledContourPlot($data);
    + 
    +// Use only blue/red color schema
    +$cp->UseHighContrastColor(true);
    + 
    +// Flip visually 
    +$cp->SetInvert();
    + 
    +// Fill the contours
    +$cp->SetFilled(true);
    + 
    +// No labels
    +$cp->ShowLabels(false);
    + 
    +// No lines
    +$cp->ShowLines(false);
    + 
    +// And add the plot to the graph
    +$graph->Add($cp);
    + 
    +// Send it back to the client
    +$graph->stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex3.html new file mode 100755 index 00000000..97a6955f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex3.html @@ -0,0 +1,110 @@ +
    contour2_ex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contourf.php');
    + 
    +// Setup some data to use for the contour
    +$data = array(
    +    array (12,12,10,10),
    +    array (10,10,8,14),
    +    array (7,7,13,17),
    +    array (4,5,8,12),
    +    array (10,8,7,8));
    + 
    +// create a basic graph as a container
    +$graph = new Graph(300,300);
    +$graph->SetMargin(30, 30, 40, 30);
    +$graph->SetScale('intint');
    +$graph->SetMarginColor('white');
    + 
    +// Setup title of graph
    +$graph->title->Set('Filled contour plot');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    + 
    +$graph->subtitle->Set('(Manual colors)');
    +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10);
    + 
    +// Create a new contour plot with only 3 isobars
    +$cp = new FilledContourPlot($data,3);
    + 
    +// Specify the colors manually
    +$isobar_colors = array('lightgray','teal:1.3','orange','red');
    +$cp->SetIsobarColors($isobar_colors);
    + 
    +// Use only blue/red color schema
    +$cp->UseHighContrastColor(true);
    + 
    +// Flip visually 
    +$cp->SetInvert();
    + 
    +// Fill the contours
    +$cp->SetFilled(true);
    + 
    +// Display labels
    +$cp->ShowLabels(true);
    + 
    +// No lines
    +$cp->ShowLines(false);
    + 
    +// And add the plot to the graph
    +$graph->Add($cp);
    + 
    +// Send it back to the client
    +$graph->stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex4.html new file mode 100755 index 00000000..44550484 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex4.html @@ -0,0 +1,94 @@ +
    contour2_ex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contourf.php');
    + 
    +// Setup some data to use for the contour
    +$data = array(
    +    array (12,12,10,10),
    +    array (10,10,8,14),
    +    array (7,7,13,17),
    +    array (4,5,8,12),
    +    array (10,8,7,8));
    + 
    +// create a basic graph as a container
    +$graph = new Graph(300,300);
    +$graph->SetMargin(30, 30, 40, 30);
    +$graph->SetScale('intint');
    +$graph->SetMarginColor('white');
    + 
    +// Setup title of graph
    +$graph->title->Set('Filled contour plot');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    + 
    +$graph->subtitle->Set('(labels follows gradients)');
    +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10);
    + 
    +// Create a new contour plot
    +$cp = new FilledContourPlot($data,8);
    + 
    +// Flip visually 
    +$cp->SetInvert();
    + 
    +// Fill the contours
    +$cp->SetFilled(true);
    + 
    +// Display the labels
    +$cp->ShowLabels(true,true);
    +$cp->SetFont(FF_ARIAL,FS_BOLD,9);
    +$cp->SetFontColor('black');
    + 
    +// And add the plot to the graph
    +$graph->Add($cp);
    + 
    +// Send it back to the client
    +$graph->stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex5.html new file mode 100755 index 00000000..dbb7702b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex5.html @@ -0,0 +1,104 @@ +
    contour2_ex5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contourf.php');
    + 
    +// Setup some data to use for the contour
    +$data = array(
    +    array (12,12,10,10),
    +    array (10,10,8,14),
    +    array (7,7,13,17),
    +    array (4,5,8,12),
    +    array (10,8,7,8));
    + 
    +// create a basic graph as a container
    +$graph = new Graph(300,300);
    +$graph->SetMargin(30, 30, 40, 30);
    +$graph->SetScale('intint');
    +$graph->SetMarginColor('white');
    + 
    +// Setup title of graph
    +$graph->title->Set('Filled contour plot');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    + 
    +$graph->subtitle->Set('(horizontal labels)');
    +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10);
    + 
    +// Create a new contour plot
    +$cp = new FilledContourPlot($data,8);
    + 
    +// Use only black/and white schema
    +$cp->UseHighContrastColor(true,true);
    + 
    +// Flip visually 
    +$cp->SetInvert();
    + 
    +// Fill the contours
    +$cp->SetFilled(true);
    +// Show lines in red
    +$cp->ShowLines(true,'red');
    + 
    +// Display the labels
    +$cp->ShowLabels(true,false);
    +$cp->SetFont(FF_ARIAL,FS_BOLD,9);
    +$cp->SetFontColor('white');
    + 
    +// And add the plot to the graph
    +$graph->Add($cp);
    + 
    +// Send it back to the client
    +$graph->stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex6.html new file mode 100755 index 00000000..3d755504 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex6.html @@ -0,0 +1,106 @@ +
    contour2_ex6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contourf.php');
    + 
    +// Setup some data to use for the contour
    +$data = array(
    +    array (12,12,10,10),
    +    array (10,10,8,14),
    +    array (7,7,13,17),
    +    array (4,5,8,12),
    +    array (10,8,7,8));
    + 
    +// create a basic graph as a container
    +$graph = new Graph(300,300);
    +$graph->SetMargin(30, 30, 40, 30);
    +$graph->SetScale('intint');
    +$graph->SetMarginColor('white');
    + 
    +// Setup title of graph
    +$graph->title->Set('Filled contour plot');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    + 
    +$graph->subtitle->Set('(With lines and labels)');
    +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10);
    + 
    +// Create a new contour plot
    +$cp = new FilledContourPlot($data,7);
    + 
    +// Use only blue/red color schema
    +$cp->UseHighContrastColor(true);
    + 
    +// Flip visually 
    +$cp->SetInvert();
    + 
    +// Fill the contours
    +$cp->SetFilled(true);
    + 
    +// Specify method to use
    +$cp->SetMethod('rect');
    + 
    +// Display the labels
    +$cp->ShowLabels(true,true);
    +$cp->SetFont(FF_ARIAL,FS_BOLD,9);
    +$cp->SetFontColor('white');
    + 
    +// And add the plot to the graph
    +$graph->Add($cp);
    + 
    +// Send it back to the client
    +$graph->stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex7.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex7.html new file mode 100755 index 00000000..a8f1e9c1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/contour2_ex7.html @@ -0,0 +1,106 @@ +
    contour2_ex7.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_contourf.php');
    + 
    +// Setup some data to use for the contour
    +$data = array(
    +    array (12,12,10,10),
    +    array (10,10,8,14),
    +    array (7,7,13,17),
    +    array (4,5,8,12),
    +    array (10,8,7,8));
    + 
    +// create a basic graph as a container
    +$graph = new Graph(300,300);
    +$graph->SetMargin(30, 30, 40, 30);
    +$graph->SetScale('intint');
    +$graph->SetMarginColor('white');
    + 
    +// Setup title of graph
    +$graph->title->Set('Filled contour plot');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    + 
    +$graph->subtitle->Set('(With lines and labels)');
    +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10);
    + 
    +// Create a new contour plot
    +$cp = new FilledContourPlot($data,7);
    + 
    +// Use only blue/red color schema
    +$cp->UseHighContrastColor(true);
    + 
    +// Flip visually 
    +$cp->SetInvert();
    + 
    +// Fill the contours
    +$cp->SetFilled(true);
    + 
    +// Specify method to use
    +$cp->SetMethod('tri');
    + 
    +// Display the labels
    +$cp->ShowLabels(true,true);
    +$cp->SetFont(FF_ARIAL,FS_BOLD,9);
    +$cp->SetFontColor('white');
    + 
    +// And add the plot to the graph
    +$graph->Add($cp);
    + 
    +// Send it back to the client
    +$graph->stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex0.html new file mode 100755 index 00000000..47bcbb28 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex0.html @@ -0,0 +1,36 @@ +
    datamatrix_ex0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = 'The first datamatrix';
    +$encoder = DatamatrixFactory::Create();
    +$encoder->SetEncoding(ENCODING_ASCII);
    +$backend = DatamatrixBackendFactory::Create($encoder);
    + 
    +// We increase the module width to 3 pixels
    +$backend->SetModuleWidth(3);
    + 
    +try {
    +    $backend->Stroke($data);
    +} catch (Exception $e) {
    +    echo 'Datamatrix error: '.$e->GetMessage()."\n";
    +    exit(1);
    +}
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex00.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex00.html new file mode 100755 index 00000000..7f571c51 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex00.html @@ -0,0 +1,18 @@ +
    datamatrix_ex00.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = 'The first datamatrix';
    + 
    +$encoder = DatamatrixFactory::Create();
    +$backend = DatamatrixBackendFactory::Create($encoder);
    +$backend->Stroke($data);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex1.html new file mode 100755 index 00000000..06bc49a8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex1.html @@ -0,0 +1,36 @@ +
    datamatrix_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = '123456';
    + 
    +$encoder = DatamatrixFactory::Create();
    +$backend = DatamatrixBackendFactory::Create($encoder);
    +$backend->SetModuleWidth(3);
    + 
    +// Create the barcode from the given data string and write to output file
    +try {
    +    $backend->Stroke($data);
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    echo "Datamatrix error message: $errstr\n";
    +}
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex4.html new file mode 100755 index 00000000..700a29c1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex4.html @@ -0,0 +1,50 @@ +
    datamatrix_ex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = 'This is a 64x64 datamatrix symbol';
    + 
    +// Create and set parameters for the encoder
    +$encoder = DatamatrixFactory::Create(DMAT_64x64);
    +$encoder->SetEncoding(ENCODING_TEXT);
    + 
    +// Create the image backend (default)
    +$backend = DatamatrixBackendFactory::Create($encoder);
    +$backend->SetModuleWidth(3);
    + 
    +// Adjust the Quiet zone
    +$backend->SetQuietZone(10);
    + 
    +// Create the barcode from the given data string and write to output file
    +try {
    +    $backend->Stroke($data);
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    echo "Datamatrix error message: $errstr\n";
    +}
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex5.html new file mode 100755 index 00000000..e2328548 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex5.html @@ -0,0 +1,60 @@ +
    datamatrix_ex5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = 'This is a 20x20 symbol';
    + 
    +// Create and set parameters for the encoder
    +$encoder = DatamatrixFactory::Create(DMAT_20x20);
    +$encoder->SetEncoding(ENCODING_TEXT);
    + 
    +// Create the image backend (default)
    +$backend = DatamatrixBackendFactory::Create($encoder);
    + 
    +// By default the module width is 2 pixel so we increase it a bit
    +$backend->SetModuleWidth(4);
    + 
    +// Set Quiet zone
    +$backend->SetQuietZone(10);
    + 
    +// Set other than default colors (one, zero, quiet zone/background)
    +$backend->SetColor('navy','white','lightgray');
    + 
    +// Create the barcode from the given data string and write to output file
    +try {
    +    $backend->Stroke($data);
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    echo "Datamatrix error message: $errstr\n";
    +}
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex6.html new file mode 100755 index 00000000..2ade2396 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex6.html @@ -0,0 +1,66 @@ +
    datamatrix_ex6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = 'This is a datamatrix symbol';
    + 
    +$outputfile = 'dm_ex6.png';
    + 
    +// Create and set parameters for the encoder
    +$encoder = DatamatrixFactory::Create();
    +$encoder->SetEncoding(ENCODING_TEXT);
    + 
    +// Create the image backend (default)
    +$backend = DatamatrixBackendFactory::Create($encoder);
    +$backend->SetModuleWidth(5);
    +$backend->SetQuietZone(10);
    + 
    +// Set other than default colors (one, zero, background)
    +$backend->SetColor('navy','white');
    + 
    +// Create the barcode from the given data string and write to output file
    +$dir = dirname(__FILE__);
    +$file = '<span style="font-weight:bold;">"'.$dir.'/'.$outputfile.'"</span>';
    +try {
    +    $backend->Stroke($data,$outputfile);
    +    echo 'Barcode sucessfully written to file: '.$file;
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    $errcode = $e->GetCode();
    +    echo "Failed writing file: ".$file.'<br>';
    +    echo "Datamatrix error ($errcode). Message: $errstr\n";
    +}
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex7.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex7.html new file mode 100755 index 00000000..c834b4ef --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datamatrix_ex7.html @@ -0,0 +1,44 @@ +
    datamatrix_ex7.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php
    +require_once('jpgraph/datamatrix/datamatrix.inc.php');
    + 
    +$data = 'A Datamatrix barcode';
    + 
    +// Create and set parameters for the encoder
    +$encoder = DatamatrixFactory::Create();
    +$encoder->SetEncoding(ENCODING_BASE256);
    + 
    +// Create the image backend (default)
    +$backend = DatamatrixBackendFactory::Create($encoder, BACKEND_ASCII);
    +$backend->SetModuleWidth(3);
    + 
    +try {
    +    $ps_txt = $backend->Stroke($data);
    +    echo '<pre>'.$ps_txt.'</pre>';
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    echo "Datamatrix error message: $errstr\n";
    +}
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateaxisex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateaxisex1.html new file mode 100755 index 00000000..aed7af2a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateaxisex1.html @@ -0,0 +1,106 @@ +
    dateaxisex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// The callback that converts timestamp to minutes and seconds
    +function TimeCallback($aVal) {
    +    return Date('H:i:s',$aVal);
    +}
    + 
    +// Fake some suitable random data
    +$now = time();
    +$datax = array($now);
    +for( $i=0; $i < 360; $i += 10 ) {
    +    $datax[] = $now + $i;
    +}
    +$n = count($datax);
    +$datay=array();
    +for( $i=0; $i < $n; ++$i ) {
    +    $datay[] = rand(30,150);
    +}
    + 
    +// Setup the basic graph
    +$graph = new Graph(324,250);
    +$graph->SetMargin(40,40,30,70);    
    +$graph->title->Set('Date: '.date('Y-m-d',$now));
    +$graph->SetAlphaBlending();
    + 
    +// Setup a manual x-scale (We leave the sentinels for the
    +// Y-axis at 0 which will then autoscale the Y-axis.)
    +// We could also use autoscaling for the x-axis but then it
    +// probably will start a little bit earlier than the first value
    +// to make the first value an even number as it sees the timestamp
    +// as an normal integer value.
    +$graph->SetScale("intlin",0,200,$now,$datax[$n-1]);
    + 
    +// Setup the x-axis with a format callback to convert the timestamp
    +// to a user readable time
    +$graph->xaxis->SetLabelFormatCallback('TimeCallback');
    +$graph->xaxis->SetLabelAngle(90);
    + 
    +// Create the line
    +$p1 = new LinePlot($datay,$datax);
    +$p1->SetColor("blue");
    + 
    +// Set the fill color partly transparent
    +$p1->SetFillColor("blue@0.4");
    + 
    +// Add lineplot to the graph
    +$graph->Add($p1);
    + 
    +// Output line
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateaxisex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateaxisex2.html new file mode 100755 index 00000000..3875bd99 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateaxisex2.html @@ -0,0 +1,76 @@ +
    dateaxisex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_date.php');
    + 
    +// Create a data set in range (50,70) and X-positions
    +DEFINE('NDATAPOINTS',360);
    +DEFINE('SAMPLERATE',240); 
    +$start = time();
    +$end = $start+NDATAPOINTS*SAMPLERATE;
    +$data = array();
    +$xdata = array();
    +for( $i=0; $i < NDATAPOINTS; ++$i ) {
    +    $data[$i] = rand(50,70);
    +    $xdata[$i] = $start + $i * SAMPLERATE;
    +}
    + 
    + 
    +// Create the new graph
    +$graph = new Graph(540,300);
    + 
    +// Slightly larger than normal margins at the bottom to have room for
    +// the x-axis labels
    +$graph->SetMargin(40,40,30,130);
    + 
    +// Fix the Y-scale to go between [0,100] and use date for the x-axis
    +$graph->SetScale('datlin',0,100);
    +$graph->title->Set("Example on Date scale");
    + 
    +// Set the angle for the labels to 90 degrees
    +$graph->xaxis->SetLabelAngle(90);
    + 
    +$line = new LinePlot($data,$xdata);
    +$line->SetLegend('Year 2005');
    +$line->SetFillColor('lightblue@0.5');
    +$graph->Add($line);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateaxisex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateaxisex4.html new file mode 100755 index 00000000..951970c7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateaxisex4.html @@ -0,0 +1,88 @@ +
    dateaxisex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_date.php');
    + 
    +// Create a data set in range (50,70) and X-positions
    +DEFINE('NDATAPOINTS',360);
    +DEFINE('SAMPLERATE',240); 
    +$start = time();
    +$end = $start+NDATAPOINTS*SAMPLERATE;
    +$data = array();
    +$xdata = array();
    +for( $i=0; $i < NDATAPOINTS; ++$i ) {
    +    $data[$i] = rand(50,70);
    +    $xdata[$i] = $start + $i * SAMPLERATE;
    +}
    + 
    + 
    +// Create the new graph
    +$graph = new Graph(540,300);
    + 
    +// Slightly larger than normal margins at the bottom to have room for
    +// the x-axis labels
    +$graph->SetMargin(40,40,30,130);
    + 
    +// Fix the Y-scale to go between [0,100] and use date for the x-axis
    +$graph->SetScale('datlin',0,100);
    +$graph->title->Set("Example on Date scale");
    + 
    +// Set the angle for the labels to 90 degrees
    +$graph->xaxis->SetLabelAngle(90);
    + 
    +// The automatic format string for dates can be overridden
    +$graph->xaxis->scale->SetDateFormat('H:i');
    + 
    +// Adjust the start/end to a specific alignment
    +$graph->xaxis->scale->SetTimeAlign(MINADJ_10);
    + 
    +$line = new LinePlot($data,$xdata);
    +$line->SetLegend('Year 2005');
    +$line->SetFillColor('lightblue@0.5');
    +$graph->Add($line);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/datescaleticksex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datescaleticksex01.html new file mode 100755 index 00000000..8677d27e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/datescaleticksex01.html @@ -0,0 +1,126 @@ +
    datescaleticksex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('../jpgraph.php');
    +require_once ('../jpgraph_line.php');
    +require_once ('../jpgraph_date.php');
    + 
    +DEFINE('INTERVAL', 5*60);
    + 
    +// First create some "dummy" data
    +$m = 5; // Number of data sets
    +$n = 4; // Number of bids to show
    +$startbid = 8000;
    + 
    +for( $i=0; $i < $m; ++$i ) {
    +    $bids[$i] = array($startbid + rand(100,500)*10 );
    +    for( $j=1; $j < $n; ++$j ) {
    +        $bids[$i][$j] = $bids[$i][$j-1] + rand(20,500)*10;
    +    }
    +}
    + 
    +$start = floor(time()/INTERVAL)*INTERVAL;
    +$times = array($start);
    +for( $i=1; $i < $n; ++$i ) {
    +    // Create a timestamp for every 5 minutes
    +    $times[$i] = $times[$i-1]+INTERVAL;
    +}
    + 
    +// Setup the bid graph
    +$graph = new Graph(600,250);
    +$graph->SetMargin(80,30,50,40);
    +$graph->SetMarginColor('white');
    +$graph->SetScale('dateint');
    +$graph->title->Set('Current Bids');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set('(Updated every 5 minutes)');
    +$graph->subtitle->SetFont(FF_ARIAL,FS_ITALIC,10);
    + 
    +// Enable antialias
    +$graph->img->SetAntiAliasing();
    + 
    +// Setup the y-axis to show currency values
    +$graph->yaxis->SetLabelFormatCallback('number_format');
    +$graph->yaxis->SetLabelFormat('$%s');
    + 
    +//Use hour:minute format for the labels
    +$graph->xaxis->scale->SetDateFormat('H:i');
    + 
    +// Force labels to only be displayed every 5 minutes
    +$graph->xaxis->scale->ticks->Set(INTERVAL);
    + 
    +// Adjust the start time for an "even" 5 minute, i.e. 5,10,15,20,25, ...
    +$graph->xaxis->scale->SetTimeAlign(MINADJ_5);
    + 
    +// Create the plots using the dummy data created at the beginning
    +$line = array();
    +for( $i=0; $i < $m; ++$i ) {
    +    $line[$i] = new LinePlot($bids[$i],$times);
    +    $line[$i]->mark->SetType(MARK_SQUARE);
    +}
    +$graph->Add($line);
    + 
    +// Send the graph back to the client
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateutilex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateutilex01.html new file mode 100755 index 00000000..0b8b0184 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateutilex01.html @@ -0,0 +1,106 @@ +
    dateutilex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_utils.inc.php');
    + 
    +// Get a dataset stored in $xdata and $ydata
    +require_once ('dataset01.inc.php');
    + 
    +$dateUtils = new DateScaleUtils();
    + 
    +// Setup a basic graph
    +$width=500; $height=300;
    +$graph = new Graph($width, $height);
    + 
    +// We set the x-scale min/max values to avoid empty space
    +// on the side of the plot
    +$graph->SetScale('intlin',0,0,min($xdata),max($xdata));
    +$graph->SetMargin(60,20,40,60);
    + 
    +// Setup the titles
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->title->Set('Development since 1984');
    +$graph->subtitle->SetFont(FF_ARIAL,FS_ITALIC,10);
    +$graph->subtitle->Set('(Example using DateScaleUtils class)');
    + 
    +// Setup the labels to be correctly format on the X-axis
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$graph->xaxis->SetLabelAngle(30);
    + 
    +// The second paramter set to 'true' will make the library interpret the
    +// format string as a date format. We use a Month + Year format
    +$graph->xaxis->SetLabelFormatString('M, Y',true);
    + 
    +// Get manual tick every second year
    +list($tickPos,$minTickPos) = $dateUtils->getTicks($xdata,DSUTILS_YEAR2);
    +$graph->xaxis->SetTickPositions($tickPos,$minTickPos);
    + 
    +// First add an area plot
    +$lp1 = new LinePlot($ydata,$xdata);
    +$lp1->SetWeight(0);
    +$lp1->SetFillColor('orange@0.85');
    +$graph->Add($lp1);
    + 
    +// And then add line. We use two plots in order to get a
    +// more distinct border on the graph
    +$lp2 = new LinePlot($ydata,$xdata);
    +$lp2->SetColor('orange');
    +$graph->Add($lp2);
    + 
    +// And send back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateutilex02.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateutilex02.html new file mode 100755 index 00000000..368ba943 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/dateutilex02.html @@ -0,0 +1,94 @@ +
    dateutilex02.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_date.php');
    +require_once ('jpgraph/jpgraph_utils.inc.php');
    + 
    +// Get a dataset stored in $xdata and $ydata
    +require_once ('dataset01.inc.php');
    + 
    +$dateUtils = new DateScaleUtils();
    + 
    +// Setup a basic graph
    +$width=500; $height=300;
    +$graph = new Graph($width, $height);
    +$graph->SetScale('datlin');
    +$graph->SetMargin(60,20,40,60);
    + 
    +// Setup the titles
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->title->Set('Development since 1984');
    +$graph->subtitle->SetFont(FF_ARIAL,FS_ITALIC,10);
    +$graph->subtitle->Set('(Example using the builtin date scale)');
    + 
    +// Setup the labels to be correctly format on the X-axis
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$graph->xaxis->SetLabelAngle(30);
    + 
    +// The second paramter set to 'true' will make the library interpret the
    +// format string as a date format. We use a Month + Year format
    +// $graph->xaxis->SetLabelFormatString('M, Y',true);
    + 
    +// First add an area plot
    +$lp1 = new LinePlot($ydata,$xdata);
    +$lp1->SetWeight(0);
    +$lp1->SetFillColor('orange@0.85');
    +$graph->Add($lp1);
    + 
    +// And then add line. We use two plots in order to get a
    +// more distinct border on the graph
    +$lp2 = new LinePlot($ydata,$xdata);
    +$lp2->SetColor('orange');
    +$graph->Add($lp2);
    + 
    +// And send back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example0-0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example0-0.html new file mode 100755 index 00000000..7c5158b7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example0-0.html @@ -0,0 +1,50 @@ +
    example0-0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some (random) data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example0.html new file mode 100755 index 00000000..f6827725 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example0.html @@ -0,0 +1,42 @@ +
    example0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(350,250);
    +$graph->SetScale('textlin');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor('blue');
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example11.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example11.html new file mode 100755 index 00000000..a04fd49c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example11.html @@ -0,0 +1,100 @@ +
    example11.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    +$ydata2 = array(1,19,15,7,22,14,5,9,21,13);
    + 
    +$timer = new JpgTimer();
    +$timer->Push();
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);
    +$graph->SetScale("textlin");
    + 
    +$graph->SetMargin(40,20,20,60);
    + 
    +$graph->title->Set("Timing a graph");
    +$graph->footer->right->Set('Timer (ms): ');
    +$graph->footer->right->SetFont(FF_COURIER,FS_ITALIC);
    +$graph->footer->SetTimer($timer);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    + 
    +$lineplot2=new LinePlot($ydata2);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    +$graph->Add($lineplot2);
    + 
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$lineplot->SetColor("blue");
    +$lineplot->SetWeight(2);
    + 
    +$lineplot2->SetColor("orange");
    +$lineplot2->SetWeight(2);
    + 
    +$graph->yaxis->SetColor("red");
    +$graph->yaxis->SetWeight(2);
    +$graph->SetShadow();
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example13.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example13.html new file mode 100755 index 00000000..a106ea2f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example13.html @@ -0,0 +1,72 @@ +
    example13.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_error.php');
    + 
    +$errdatay = array(11,9,2,4,19,26,13,19,7,12);
    + 
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);    
    +$graph->SetScale("textlin");
    + 
    +$graph->img->SetMargin(40,30,20,40);
    +$graph->SetShadow();
    + 
    +// Create the error plot
    +$errplot=new ErrorPlot($errdatay);
    +$errplot->SetColor("red");
    +$errplot->SetWeight(2);
    + 
    +// Add the plot to the graph
    +$graph->Add($errplot);
    + 
    +$graph->title->Set("Simple error plot");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$datax = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($datax);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example14.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example14.html new file mode 100755 index 00000000..d45b1a15 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example14.html @@ -0,0 +1,74 @@ +
    example14.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_error.php');
    + 
    +$errdatay = array(11,9,2,4,19,26,13,19,7,12);
    + 
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);    
    +$graph->SetScale("textlin");
    + 
    +$graph->img->SetMargin(40,30,20,40);
    +$graph->SetShadow();
    + 
    +// Create the error plot
    +$errplot=new ErrorPlot($errdatay);
    +$errplot->SetColor("red");
    +$errplot->SetWeight(2);
    +$errplot->SetCenter();
    + 
    +// Add the plot to the graph
    +$graph->Add($errplot);
    + 
    +$graph->title->Set("Simple error plot");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$datax = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($datax);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example15.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example15.html new file mode 100755 index 00000000..031280a2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example15.html @@ -0,0 +1,80 @@ +
    example15.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_error.php');
    + 
    +$errdatay = array(11,9,2,4,19,26,13,19,7,12);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);    
    +$graph->SetScale("textlin");
    + 
    +$graph->img->SetMargin(40,30,20,40);
    +$graph->SetShadow();
    + 
    +// Create the linear plot
    +$errplot=new ErrorLinePlot($errdatay);
    +$errplot->SetColor("red");
    +$errplot->SetWeight(2);
    +$errplot->SetCenter();
    +$errplot->line->SetWeight(2);
    +$errplot->line->SetColor("blue");
    + 
    +// Add the plot to the graph
    +$graph->Add($errplot);
    + 
    +$graph->title->Set("Linear error plot");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$datax = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($datax);
    + 
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.1.html new file mode 100755 index 00000000..519dac48 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.1.html @@ -0,0 +1,88 @@ +
    example16.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$l1datay = array(11,9,2,4,3,13,17);
    +$l2datay = array(23,12,5,19,17,10,15);
    +$datax=array('Jan','Feb','Mar','Apr','May');
    + 
    +// Create the graph. 
    +$graph = new Graph(400,200);    
    +$graph->SetScale('textlin');
    + 
    +$graph->img->SetMargin(40,130,20,40);
    +$graph->SetShadow();
    + 
    +// Create the linear error plot
    +$l1plot=new LinePlot($l1datay);
    +$l1plot->SetColor('red');
    +$l1plot->SetWeight(2);
    +$l1plot->SetLegend('Prediction');
    + 
    +// Create the bar plot
    +$l2plot = new LinePlot($l2datay);
    +$l2plot->SetFillColor('orange');
    +$l2plot->SetLegend('Result');
    + 
    +// Add the plots to the graph
    +$graph->Add($l2plot);
    +$graph->Add($l1plot);
    + 
    +$graph->title->Set('Mixing line and filled line');
    +$graph->xaxis->title->Set('X-title');
    +$graph->yaxis->title->Set('Y-title');
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +//$graph->xaxis->SetTickLabels($datax);
    +//$graph->xaxis->SetTextTickInterval(2);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.3.html new file mode 100755 index 00000000..d348ef46 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.3.html @@ -0,0 +1,90 @@ +
    example16.3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$l1datay = array(11,9,2,4,3,13,17);
    +$l2datay = array(23,12,5,19,17,10,15);
    +$datax=array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug');
    + 
    +// Create the graph. 
    +$graph = new Graph(400,200);    
    +$graph->SetScale('textlin');
    + 
    +$graph->img->SetMargin(40,130,20,40);
    +$graph->SetShadow();
    + 
    +// Create the linear error plot
    +$l1plot=new LinePlot($l1datay);
    +$l1plot->SetColor('red');
    +$l1plot->SetWeight(2);
    +$l1plot->SetLegend('Prediction');
    + 
    +// Create the bar plot
    +$bplot = new BarPlot($l2datay);
    +$bplot->SetFillColor('orange');
    +$bplot->SetLegend('Result');
    + 
    +// Add the plots to t'he graph
    +$graph->Add($bplot);
    +$graph->Add($l1plot);
    + 
    +$graph->title->Set('Adding a line plot to a bar graph v1');
    +$graph->xaxis->title->Set('X-title');
    +$graph->yaxis->title->Set('Y-title');
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$graph->xaxis->SetTickLabels($datax);
    +//$graph->xaxis->SetTextTickInterval(2);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.4.html new file mode 100755 index 00000000..53cae78b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.4.html @@ -0,0 +1,92 @@ +
    example16.4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$l1datay = array(11,9,2,4,3,13,17);
    +$l2datay = array(23,12,5,19,17,10,15);
    +JpgraphError::SetImageFlag(false);
    +JpGraphError::SetLogFile('syslog');
    + 
    +// Create the graph. 
    +$graph = new Graph(400,200);    
    +$graph->SetScale('intlin');
    + 
    +$graph->img->SetMargin(40,130,20,40);
    +$graph->SetShadow();
    + 
    +// Create the linear error plot
    +$l1plot=new LinePlot($l1datay);
    +$l1plot->SetColor('red');
    +$l1plot->SetWeight(2);
    +$l1plot->SetLegend('Prediction');
    + 
    +// Create the bar plot
    +$bplot = new BarPlot($l2datay);
    +$bplot->SetFillColor('orange');
    +$bplot->SetLegend('Result');
    + 
    +// Add the plots to t'he graph
    +$graph->Add($bplot);
    +$graph->Add($l1plot);
    + 
    +$graph->title->Set('Adding a line plot to a bar graph v3');
    +$graph->xaxis->title->Set('X-title');
    +$graph->yaxis->title->Set('Y-title');
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$datax = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($datax);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.6.html new file mode 100755 index 00000000..82fbe816 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.6.html @@ -0,0 +1,114 @@ +
    example16.6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_utils.inc.php');
    + 
    +// Create some "fake" regression data
    +$datay = array();
    +$datax = array();
    +$a= 3.2;
    +$b= 2.5;
    +for($x=0; $x < 20; ++$x) {
    +    $datax[$x] = $x;
    +    $datay[$x] = $a + $b*$x + rand(-20,20);
    +}
    + 
    +$lr = new LinearRegression($datax, $datay);
    +list( $stderr, $corr ) = $lr->GetStat();
    +list( $xd, $yd ) = $lr->GetY(0,19);
    + 
    +// Create the graph
    +$graph = new Graph(300,250);
    +$graph->SetScale('linlin');
    + 
    +// Setup title
    +$graph->title->Set("Linear regression");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +$graph->subtitle->Set('(stderr='.sprintf('%.2f',$stderr).', corr='.sprintf('%.2f',$corr).')');
    +$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,12);
    + 
    +// make sure that the X-axis is always at the
    +// bottom at the plot and not just at Y=0 which is
    +// the default position
    +$graph->xaxis->SetPos('min');
    + 
    +// Create the scatter plot with some nice colors
    +$sp1 = new ScatterPlot($datay,$datax);
    +$sp1->mark->SetType(MARK_FILLEDCIRCLE);
    +$sp1->mark->SetFillColor("red");
    +$sp1->SetColor("blue");
    +$sp1->SetWeight(3);
    +$sp1->mark->SetWidth(4);
    + 
    +// Create the regression line
    +$lplot = new LinePlot($yd);
    +$lplot->SetWeight(2);
    +$lplot->SetColor('navy');
    + 
    +// Add the pltos to the line
    +$graph->Add($sp1);
    +$graph->Add($lplot);
    + 
    +// ... and stroke
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.html new file mode 100755 index 00000000..8611f38d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example16.html @@ -0,0 +1,88 @@ +
    example16.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_error.php');
    + 
    +$errdatay = array(11,9,2,4,19,26,13,19,7,12);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);    
    +$graph->SetScale("textlin");
    + 
    +$graph->img->SetMargin(40,30,20,40);
    +$graph->SetShadow();
    + 
    +// Create the linear plot
    +$errplot=new ErrorLinePlot($errdatay);
    +$errplot->SetColor("red");
    +$errplot->SetWeight(2);
    +$errplot->SetCenter();
    +$errplot->line->SetWeight(2);
    +$errplot->line->SetColor("blue");
    + 
    +// Setup the legends
    +$errplot->SetLegend("Min/Max");
    +$errplot->line->SetLegend("Average");
    + 
    +// Add the plot to the graph
    +$graph->Add($errplot);
    + 
    +$graph->title->Set("Linear error plot");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$datax = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($datax);
    + 
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example17.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example17.html new file mode 100755 index 00000000..34207e0a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example17.html @@ -0,0 +1,82 @@ +
    example17.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$datay1 =     array(11,7,5,8,3,5,5,4,8,6,5,5,3,2,5,1,2,0);
    +$datay2 =     array( 4,5,4,5,6,5,7,4,7,4,4,3,2,4,1,2,2,1);
    +$datay3 =     array(4,5,7,10,13,15,15,22,26,26,30,34,40,43,47,55,60,62);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);
    +$graph->SetScale("textlin");
    +$graph->SetShadow();
    +$graph->img->SetMargin(40,30,20,40);
    + 
    +// Create the linear plots for each category
    +$dplot[] = new LinePLot($datay1);
    +$dplot[] = new LinePLot($datay2);
    +$dplot[] = new LinePLot($datay3);
    + 
    +$dplot[0]->SetFillColor("red");
    +$dplot[1]->SetFillColor("blue");
    +$dplot[2]->SetFillColor("green");
    + 
    +// Create the accumulated graph
    +$accplot = new AccLinePlot($dplot);
    + 
    +// Add the plot to the graph
    +$graph->Add($accplot);
    + 
    +$graph->xaxis->SetTextTickInterval(2);
    +$graph->title->Set("Example 17");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example19.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example19.1.html new file mode 100755 index 00000000..a4b97ae9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example19.1.html @@ -0,0 +1,70 @@ +
    example19.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(12,8,19,3,10,5);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);
    +$graph->SetScale('intlin');
    + 
    +// Add a drop shadow
    +$graph->SetShadow();
    + 
    +// Adjust the margin a bit to make more room for titles
    +$graph->SetMargin(40,30,20,40);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    + 
    +// Adjust fill color
    +$bplot->SetFillColor('orange');
    +$graph->Add($bplot);
    + 
    +// Setup the titles
    +$graph->title->Set('A basic bar graph');
    +$graph->xaxis->title->Set('X-title');
    +$graph->yaxis->title->Set('Y-title');
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example19.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example19.html new file mode 100755 index 00000000..5b061c05 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example19.html @@ -0,0 +1,70 @@ +
    example19.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(12,8,19,3,10,5);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);
    +$graph->SetScale('textlin');
    + 
    +// Add a drop shadow
    +$graph->SetShadow();
    + 
    +// Adjust the margin a bit to make more room for titles
    +$graph->SetMargin(40,30,20,40);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    + 
    +// Adjust fill color
    +$bplot->SetFillColor('orange');
    +$graph->Add($bplot);
    + 
    +// Setup the titles
    +$graph->title->Set('A basic bar graph');
    +$graph->xaxis->title->Set('X-title');
    +$graph->yaxis->title->Set('Y-title');
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example2.html new file mode 100755 index 00000000..be077443 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example2.html @@ -0,0 +1,66 @@ +
    example2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some (random) data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    + 
    +// Setup margin and titles
    +$graph->SetMargin(40,20,20,40);
    +$graph->title->Set('Calls per operator');
    +$graph->subtitle->Set('(March 12, 2008)');
    +$graph->xaxis->title->Set('Operator');
    +$graph->yaxis->title->Set('# of calls');
    + 
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example20.3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example20.3.html new file mode 100755 index 00000000..2d58aa83 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example20.3.html @@ -0,0 +1,80 @@ +
    example20.3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(12,8,19,3,10,5);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);    
    +$graph->SetScale("textlin");
    +$graph->yaxis->scale->SetGrace(20);
    + 
    +// Add a drop shadow
    +$graph->SetShadow();
    + 
    +// Adjust the margin a bit to make more room for titles
    +$graph->img->SetMargin(40,30,20,40);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    + 
    +// Adjust fill color
    +$bplot->SetFillColor('orange');
    +$bplot->value->Show();
    +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,10);
    +$bplot->value->SetAngle(45);
    +$bplot->value->SetFormat('%0.1f');
    +$graph->Add($bplot);
    + 
    +// Setup the titles
    +$graph->title->Set("Bar graph with Y-scale grace");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example21.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example21.html new file mode 100755 index 00000000..95132bd6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example21.html @@ -0,0 +1,74 @@ +
    example21.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$data1y=array(12,8,19,3,10,5);
    +$data2y=array(8,2,11,7,14,4);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(310,200);    
    +$graph->SetScale("textlin");
    + 
    +$graph->SetShadow();
    +$graph->img->SetMargin(40,30,20,40);
    + 
    +// Create the bar plots
    +$b1plot = new BarPlot($data1y);
    +$b1plot->SetFillColor("orange");
    +$b2plot = new BarPlot($data2y);
    +$b2plot->SetFillColor("blue");
    + 
    +// Create the grouped bar plot
    +$gbplot = new GroupBarPlot(array($b1plot,$b2plot));
    + 
    +// ...and add it to the graPH
    +$graph->Add($gbplot);
    + 
    +$graph->title->Set("Example 21");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example22.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example22.html new file mode 100755 index 00000000..703da66d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example22.html @@ -0,0 +1,76 @@ +
    example22.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$data1y=array(12,8,19,3,10,5);
    +$data2y=array(8,2,11,7,14,4);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(310,200);    
    +$graph->SetScale("textlin");
    +$graph->SetShadow();
    + 
    +$graph->img->SetMargin(40,30,20,40);
    + 
    +// Create the bar plots
    +$b1plot = new BarPlot($data1y);
    +$b1plot->SetFillColor("orange");
    +$b2plot = new BarPlot($data2y);
    +$b2plot->SetFillColor("blue");
    + 
    +// Create the grouped bar plot
    +$gbplot = new GroupBarPlot(array($b1plot,$b2plot));
    +$gbplot->SetWidth(0.9);
    + 
    +// ...and add it to the graPH
    +$graph->Add($gbplot);
    + 
    +$graph->title->Set("Adjusting the width");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example23.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example23.html new file mode 100755 index 00000000..aca025bb --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example23.html @@ -0,0 +1,78 @@ +
    example23.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +setlocale (LC_ALL, 'et_EE.ISO-8859-1');
    + 
    +$data1y=array(12,8,19,3,10,5);
    +$data2y=array(8,2,11,7,14,4);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(310,200);    
    +$graph->SetScale("textlin");
    + 
    +$graph->SetShadow();
    +$graph->img->SetMargin(40,30,20,40);
    + 
    +// Create the bar plots
    +$b1plot = new BarPlot($data1y);
    +$b1plot->SetFillColor("orange");
    +$b2plot = new BarPlot($data2y);
    +$b2plot->SetFillColor("blue");
    + 
    +// Create the grouped bar plot
    +$gbplot = new AccBarPlot(array($b1plot,$b2plot));
    + 
    +// ...and add it to the graPH
    +$graph->Add($gbplot);
    + 
    +$graph->title->Set("Accumulated bar plots");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example24.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example24.html new file mode 100755 index 00000000..5ded885d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example24.html @@ -0,0 +1,92 @@ +
    example24.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$data1y=array(12,8,19,3,10,5);
    +$data2y=array(8,2,11,7,14,4);
    +$data3y=array(3,9,2,7,5,8);
    +$data4y=array(1,5,11,2,14,4);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(310,200);    
    +$graph->SetScale("textlin");
    + 
    +$graph->SetShadow();
    +$graph->img->SetMargin(40,30,20,40);
    + 
    +$b1plot = new BarPlot($data1y);
    +$b1plot->SetFillColor("orange");
    +$b2plot = new BarPlot($data2y);
    +$b2plot->SetFillColor("blue");
    +$b3plot = new BarPlot($data3y);
    +$b3plot->SetFillColor("green");
    +$b4plot = new BarPlot($data4y);
    +$b4plot->SetFillColor("brown");
    + 
    +// Create the accumulated bar plots
    +$ab1plot = new AccBarPlot(array($b1plot,$b2plot));
    +$ab2plot = new AccBarPlot(array($b3plot,$b4plot));
    + 
    +// Create the grouped bar plot
    +$gbplot = new GroupBarPlot(array($ab1plot,$ab2plot));
    + 
    +// ...and add it to the graph
    +$graph->Add($gbplot);
    + 
    +$graph->title->Set("Grouped Accumulated bar plots");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example25.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example25.1.html new file mode 100755 index 00000000..a31f43c7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example25.1.html @@ -0,0 +1,80 @@ +
    example25.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(12,8,19,3,10,5);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);
    +$graph->SetScale('textlin');
    + 
    +// Add a drop shadow
    +$graph->SetShadow();
    + 
    +// Adjust the margin a bit to make more room for titles
    +$graph->img->SetMargin(40,30,40,40);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$graph->Add($bplot);
    + 
    +// Create and add a new text
    +$txt=new Text('This is a text');
    +$txt->SetPos(10,20);
    +$txt->SetColor('darkred');
    +$txt->SetFont(FF_FONT2,FS_BOLD);
    +$txt->SetBox('yellow','navy','gray@0.5');
    +$graph->AddText($txt);
    + 
    +// Setup the titles
    +$graph->title->Set("A simple bar graph");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example25.2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example25.2.html new file mode 100755 index 00000000..586b58d1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example25.2.html @@ -0,0 +1,82 @@ +
    example25.2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(12,8,19,3,10,5);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);
    +$graph->SetScale('textlin');
    + 
    +// Add a drop shadow
    +$graph->SetShadow();
    + 
    +// Adjust the margin a bit to make more room for titles
    +$graph->img->SetMargin(40,30,20,40);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$graph->Add($bplot);
    + 
    +// Create and add a new text
    +$txt=new Text("This is a text\nwith many\nand even\nmore\nlines of text");
    +$txt->SetPos(0.5,0.5,'center','center');
    +$txt->SetFont(FF_FONT2,FS_BOLD);
    +$txt->ParagraphAlign('center');
    +$txt->SetBox('yellow','navy','gray');
    +$txt->SetColor('red');
    +$graph->AddText($txt);
    + 
    +// Setup the titles
    +$graph->title->Set("A simple bar graph");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example25.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example25.html new file mode 100755 index 00000000..22ca3241 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example25.html @@ -0,0 +1,78 @@ +
    example25.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(12,8,19,3,10,5);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);
    +$graph->SetScale('textlin');
    + 
    +// Add a drop shadow
    +$graph->SetShadow();
    + 
    +// Adjust the margin a bit to make more room for titles
    +$graph->img->SetMargin(40,30,40,40);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$graph->Add($bplot);
    + 
    +// Create and add a new text
    +$txt=new Text('This is a text');
    +$txt->SetPos(0,20);
    +$txt->SetColor('darkred');
    +$txt->SetFont(FF_FONT2,FS_BOLD);
    +$graph->AddText($txt);
    + 
    +// Setup the titles
    +$graph->title->Set("A simple bar graph");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example26.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example26.1.html new file mode 100755 index 00000000..6036c586 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example26.1.html @@ -0,0 +1,40 @@ +
    example26.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +$data = array(40,60,21,33);
    + 
    +$graph = new PieGraph(300,200);
    +$graph->SetShadow();
    + 
    +$graph->title->Set("A simple Pie plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$p1 = new PiePlot($data);
    +$p1->SetLegends($gDateLocale->GetShortMonth());
    +$p1->SetCenter(0.4);
    + 
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example26.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example26.html new file mode 100755 index 00000000..47dce53b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example26.html @@ -0,0 +1,32 @@ +
    example26.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +$data = array(40,60,21,33);
    + 
    +$graph = new PieGraph(300,200);
    +$graph->SetShadow();
    + 
    +$graph->title->Set("A simple Pie plot");
    + 
    +$p1 = new PiePlot($data);
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example27.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example27.1.html new file mode 100755 index 00000000..d84df08a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example27.1.html @@ -0,0 +1,46 @@ +
    example27.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    +require_once ('jpgraph/jpgraph_pie3d.php');
    + 
    +$data = array(40,60,21,33);
    + 
    +$graph = new PieGraph(300,200);
    +$graph->SetShadow();
    + 
    +$graph->title->Set("A simple Pie plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$p1 = new PiePlot3D($data);
    +$p1->SetAngle(20);
    +$p1->SetSize(0.5);
    +$p1->SetCenter(0.45);
    +$p1->SetLegends($gDateLocale->GetShortMonth());
    + 
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example27.2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example27.2.html new file mode 100755 index 00000000..dfd122bc --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example27.2.html @@ -0,0 +1,44 @@ +
    example27.2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    +require_once ('jpgraph/jpgraph_pie3d.php');
    + 
    +$data = array(40,60,21,33);
    + 
    +$graph = new PieGraph(300,200);
    +$graph->SetShadow();
    + 
    +$graph->title->Set("A simple Pie plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$p1 = new PiePlot($data);
    +$p1->ExplodeSlice(1);
    +$p1->SetCenter(0.45);
    +$p1->SetLegends($gDateLocale->GetShortMonth());
    + 
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example27.3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example27.3.html new file mode 100755 index 00000000..6ed3318e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example27.3.html @@ -0,0 +1,44 @@ +
    example27.3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    +require_once ('jpgraph/jpgraph_pie3d.php');
    + 
    +$data = array(40,60,21,33);
    + 
    +$graph = new PieGraph(330,200);
    +$graph->SetShadow();
    + 
    +$graph->title->Set("A simple 3D Pie plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$p1 = new PiePlot3D($data);
    +$p1->ExplodeSlice(1);
    +$p1->SetCenter(0.45);
    +$p1->SetLegends($gDateLocale->GetShortMonth());
    + 
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example27.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example27.html new file mode 100755 index 00000000..07da26fd --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example27.html @@ -0,0 +1,44 @@ +
    example27.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    +require_once ('jpgraph/jpgraph_pie3d.php');
    + 
    +$data = array(40,60,21,33);
    + 
    +$graph = new PieGraph(300,200);
    +$graph->SetShadow();
    + 
    +$graph->title->Set("A simple Pie plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$p1 = new PiePlot3D($data);
    +$p1->SetSize(0.5);
    +$p1->SetCenter(0.45);
    +$p1->SetLegends($gDateLocale->GetShortMonth());
    + 
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example28.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example28.1.html new file mode 100755 index 00000000..c07fc2cf --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example28.1.html @@ -0,0 +1,40 @@ +
    example28.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +$data = array(40,60,21,33,12,33);
    + 
    +$graph = new PieGraph(150,150);
    +$graph->SetShadow();
    + 
    +$graph->title->Set("'earth' Theme");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$p1 = new PiePlot($data);
    +$p1->SetTheme("earth");
    +$p1->SetCenter(0.5,0.55);
    +$p1->value->Show(false);
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example28.2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example28.2.html new file mode 100755 index 00000000..c60b0c39 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example28.2.html @@ -0,0 +1,40 @@ +
    example28.2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +$data = array(40,60,21,33,12,33);
    + 
    +$graph = new PieGraph(150,150);
    +$graph->SetShadow();
    + 
    +$graph->title->Set("'pastel' Theme");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$p1 = new PiePlot($data);
    +$p1->SetTheme("pastel");
    +$p1->SetCenter(0.5,0.55);
    +$p1->value->Show(false);
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example28.3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example28.3.html new file mode 100755 index 00000000..6203e7fb --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example28.3.html @@ -0,0 +1,40 @@ +
    example28.3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +$data = array(40,60,21,33,12,33);
    + 
    +$graph = new PieGraph(150,150);
    +$graph->SetShadow();
    + 
    +$graph->title->Set("'water' Theme");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$p1 = new PiePlot($data);
    +$p1->SetTheme("water");
    +$p1->SetCenter(0.5,0.55);
    +$p1->value->Show(false);
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example28.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example28.html new file mode 100755 index 00000000..d4214108 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example28.html @@ -0,0 +1,40 @@ +
    example28.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +$data = array(40,60,21,33,12,33);
    + 
    +$graph = new PieGraph(150,150);
    +$graph->SetShadow();
    + 
    +$graph->title->Set("'sand' Theme");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$p1 = new PiePlot($data);
    +$p1->SetTheme("sand");
    +$p1->SetCenter(0.5,0.55);
    +$p1->value->Show(false);
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.0.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.0.1.html new file mode 100755 index 00000000..07b6da49 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.0.1.html @@ -0,0 +1,82 @@ +
    example3.0.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some (random) data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    +$graph->SetShadow();
    + 
    +// Setup margin and titles
    +$graph->SetMargin(40,20,20,40);
    +$graph->title->Set('Calls per operator');
    +$graph->subtitle->Set('(March 12, 2008)');
    +$graph->xaxis->title->Set('Operator');
    +$graph->yaxis->title->Set('# of calls');
    + 
    +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    + 
    +$graph->yaxis->SetColor('blue');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor( 'blue' );
    +$lineplot->SetWeight( 2 );   // Two pixel wide
    + 
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.0.2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.0.2.html new file mode 100755 index 00000000..134967f4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.0.2.html @@ -0,0 +1,80 @@ +
    example3.0.2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some (random) data
    +$ydata = array(17,3,'-',10,7,'-',3,19,9,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    +$graph->SetShadow();
    + 
    +// Setup margin and titles
    +$graph->SetMargin(40,20,20,40);
    +$graph->title->Set('Interpolated values');
    +$graph->xaxis->title->Set('x-title');
    +$graph->yaxis->title->Set('y-title');
    + 
    +$graph->yaxis->title->SetFont( FF_ARIAL , FS_BOLD, 9 );
    +$graph->xaxis->title->SetFont( FF_ARIAL , FS_BOLD, 9 );
    + 
    +$graph->yaxis->SetColor('blue');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor( 'blue' );
    +$lineplot->SetWeight( 2 );   // Two pixel wide
    + 
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.0.3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.0.3.html new file mode 100755 index 00000000..c3f3f3a6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.0.3.html @@ -0,0 +1,80 @@ +
    example3.0.3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some (random) data
    +$ydata = array(17,3,'',10,7,'',3,19,9,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    +$graph->SetShadow();
    + 
    +// Setup margin and titles
    +$graph->SetMargin(40,20,20,40);
    +$graph->title->Set('NULL values');
    +$graph->xaxis->title->Set('x-title');
    +$graph->yaxis->title->Set('y-title');
    + 
    +$graph->yaxis->title->SetFont( FF_ARIAL , FS_BOLD, 9 );
    +$graph->xaxis->title->SetFont( FF_ARIAL , FS_BOLD, 9 );
    + 
    +$graph->yaxis->SetColor('blue');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor( 'blue' );
    +$lineplot->SetWeight( 2 );   // Two pixel wide
    + 
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.1.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.1.1.html new file mode 100755 index 00000000..cccb4826 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.1.1.html @@ -0,0 +1,86 @@ +
    example3.1.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some (random) data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    +$graph->SetShadow();
    + 
    +// Setup margin and titles
    +$graph->SetMargin(40,20,20,40);
    +$graph->title->Set('Calls per operator');
    +$graph->subtitle->Set('(March 12, 2008)');
    +$graph->xaxis->title->Set('Operator');
    +$graph->yaxis->title->Set('# of calls');
    + 
    +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    + 
    +$graph->yaxis->SetColor('blue');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor( 'blue' );
    +$lineplot->SetWeight( 2 );   // Two pixel wide
    + 
    +// Add an image mark scaled to 50%
    +$lineplot->mark->SetType(MARK_IMG_DIAMOND,'red',0.5);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.1.html new file mode 100755 index 00000000..76dcd4c6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.1.html @@ -0,0 +1,86 @@ +
    example3.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some (random) data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    +$graph->SetShadow();
    + 
    +// Setup margin and titles
    +$graph->SetMargin(40,20,20,40);
    +$graph->title->Set('Calls per operator');
    +$graph->subtitle->Set('(March 12, 2008)');
    +$graph->xaxis->title->Set('Operator');
    +$graph->yaxis->title->Set('# of calls');
    + 
    +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    + 
    +$graph->yaxis->SetColor('blue');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor( 'blue' );
    +$lineplot->SetWeight( 2 );   // Two pixel wide
    +$lineplot->mark->SetType(MARK_UTRIANGLE);
    +$lineplot->mark->SetColor('blue');
    +$lineplot->mark->SetFillColor('red');
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.2.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.2.1.html new file mode 100755 index 00000000..b8d8bc8d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.2.1.html @@ -0,0 +1,70 @@ +
    example3.2.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,15,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);    
    +$graph->SetScale("textlin");
    +$graph->yaxis->scale->SetGrace(10,10);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->mark->SetType(MARK_CIRCLE);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +$graph->img->SetMargin(40,20,20,40);
    +$graph->title->Set("Grace value, version 1");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$lineplot->SetColor("blue");
    +$lineplot->SetWeight(2);
    +$graph->yaxis->SetWeight(2);
    +$graph->SetShadow();
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.2.2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.2.2.html new file mode 100755 index 00000000..46213cc7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.2.2.html @@ -0,0 +1,74 @@ +
    example3.2.2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,15,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);    
    +$graph->SetScale("textlin");
    +$graph->yaxis->scale->SetGrace(10,10);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->mark->SetType(MARK_CIRCLE);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +$graph->img->SetMargin(40,20,20,40);
    +$graph->title->Set("Grace value version 2");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->xaxis->SetPos('min');
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$lineplot->SetColor("blue");
    +$lineplot->SetWeight(2);
    +$graph->yaxis->SetWeight(2);
    +$graph->SetShadow();
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.2.html new file mode 100755 index 00000000..68fe3fc0 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.2.html @@ -0,0 +1,68 @@ +
    example3.2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,15,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);    
    +$graph->SetScale("textlin");
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->mark->SetType(MARK_CIRCLE);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +$graph->img->SetMargin(40,20,20,40);
    +$graph->title->Set("Example 3.2");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$lineplot->SetColor("blue");
    +$lineplot->SetWeight(2);
    +$graph->yaxis->SetWeight(2);
    +$graph->SetShadow();
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.3.html new file mode 100755 index 00000000..20b4cc25 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.3.html @@ -0,0 +1,90 @@ +
    example3.3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some (random) data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    +$graph->SetShadow();
    + 
    +// Setup margin and titles
    +$graph->SetMargin(40,20,20,40);
    +$graph->title->Set('Calls per operator');
    +$graph->subtitle->Set('(March 12, 2008)');
    +$graph->xaxis->title->Set('Operator');
    +$graph->yaxis->title->Set('# of calls');
    + 
    +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    + 
    +$graph->yaxis->SetColor('blue');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor( 'blue' );
    +$lineplot->SetWeight( 2 );   // Two pixel wide
    +$lineplot->mark->SetType(MARK_UTRIANGLE);
    +$lineplot->mark->SetColor('blue');
    +$lineplot->mark->SetFillColor('red');
    + 
    +$lineplot->value->Show();
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.4.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.4.1.html new file mode 100755 index 00000000..29d9fa2e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.4.1.html @@ -0,0 +1,162 @@ +
    example3.4.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// A function to return the Roman Numeral, given an integer
    + function numberToRoman($aNum)
    + {
    +     // Make sure that we only use the integer portion of the value
    +     $n = intval($aNum);
    +     $result = '';
    + 
    +     // Declare a lookup array that we will use to traverse the number:
    +     $lookup = array('M' => 1000, 'CM' => 900, 'D' => 500, 'CD' => 400,
    +     'C' => 100, 'XC' => 90, 'L' => 50, 'XL' => 40,
    +     'X' => 10, 'IX' => 9, 'V' => 5, 'IV' => 4, 'I' => 1);
    + 
    +     foreach ($lookup as $roman => $value)
    +     {
    +         // Determine the number of matches
    +         $matches = intval($n / $value);
    + 
    +         // Store that many characters
    +         $result .= str_repeat($roman, $matches);
    + 
    +         // Substract that from the number
    +         $n = $n % $value;
    +     }
    + 
    +     // The Roman numeral should be built, return it
    +     return $result;
    +}
    + 
    +function formatCallback($aVal) {
    +    return '('.numberToRoman($aVal).')';
    +}
    + 
    + 
    + // Some (random) data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    +$graph->SetShadow();
    + 
    +// Setup margin and titles
    +$graph->SetMargin(40,20,20,40);
    +$graph->title->Set('Calls per operator');
    +$graph->subtitle->Set('(March 12, 2008)');
    +$graph->xaxis->title->Set('Operator');
    +$graph->yaxis->title->Set('# of calls');
    + 
    +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    + 
    +$graph->yaxis->SetColor('blue');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor( 'blue' );
    +$lineplot->SetWeight( 2 );   // Two pixel wide
    +$lineplot->mark->SetType(MARK_UTRIANGLE);
    +$lineplot->mark->SetColor('blue');
    +$lineplot->mark->SetFillColor('red');
    + 
    +$lineplot->value->Show();
    +$lineplot->value->SetFont(FF_ARIAL,FS_BOLD,10);
    +$lineplot->value->SetColor('darkred');
    +$lineplot->value->SetFormatCallback('formatCallback');
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.4.html new file mode 100755 index 00000000..62bff032 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.4.html @@ -0,0 +1,96 @@ +
    example3.4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some (random) data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    +$graph->SetShadow();
    + 
    +// Setup margin and titles
    +$graph->SetMargin(40,20,20,40);
    +$graph->title->Set('Calls per operator');
    +$graph->subtitle->Set('(March 12, 2008)');
    +$graph->xaxis->title->Set('Operator');
    +$graph->yaxis->title->Set('# of calls');
    + 
    +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    + 
    +$graph->yaxis->SetColor('blue');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor( 'blue' );
    +$lineplot->SetWeight( 2 );   // Two pixel wide
    +$lineplot->mark->SetType(MARK_UTRIANGLE);
    +$lineplot->mark->SetColor('blue');
    +$lineplot->mark->SetFillColor('red');
    + 
    +$lineplot->value->Show();
    +$lineplot->value->SetFont(FF_ARIAL,FS_BOLD,10);
    +$lineplot->value->SetColor('darkred');
    +$lineplot->value->SetFormat('(%d)');
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.html new file mode 100755 index 00000000..24a5cb64 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example3.html @@ -0,0 +1,76 @@ +
    example3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some (random) data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    + 
    +// Setup margin and titles
    +$graph->SetMargin(40,20,20,40);
    +$graph->title->Set('Calls per operator');
    +$graph->subtitle->Set('(March 12, 2008)');
    +$graph->xaxis->title->Set('Operator');
    +$graph->yaxis->title->Set('# of calls');
    + 
    +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor( 'blue' );
    +$lineplot->SetWeight( 2 );   // Two pixel wide
    + 
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example4.html new file mode 100755 index 00000000..239009f8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example4.html @@ -0,0 +1,90 @@ +
    example4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    + // Some (random) data
    +$ydata   = array(11, 3, 8, 12, 5, 1, 9, 13, 5, 7);
    +$ydata2  = array(1, 19, 15, 7, 22, 14, 5, 9, 21, 13 );
    + 
    +// Size of the overall graph
    +$width=350;
    +$height=250;
    + 
    +// Create the graph and set a scale.
    +// These two calls are always required
    +$graph = new Graph($width,$height);
    +$graph->SetScale('intlin');
    +$graph->SetShadow();
    + 
    +// Setup margin and titles
    +$graph->SetMargin(40,20,20,40);
    +$graph->title->Set('Calls per operator (June,July)');
    +$graph->subtitle->Set('(March 12, 2008)');
    +$graph->xaxis->title->Set('Operator');
    +$graph->yaxis->title->Set('# of calls');
    + 
    +$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    +$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD );
    + 
    +// Create the first data series
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetWeight( 2 );   // Two pixel wide
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Create the second data series
    +$lineplot2=new LinePlot($ydata2);
    +$lineplot2->SetWeight( 2 );   // Two pixel wide
    + 
    +// Add the second plot to the graph
    +$graph->Add($lineplot2);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example5.html new file mode 100755 index 00000000..198d68d2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example5.html @@ -0,0 +1,88 @@ +
    example5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    +$y2data = array(354,200,265,99,111,91,198,225,293,251);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(300,200);    
    +$graph->img->SetMargin(40,40,20,40);
    +$graph->SetScale("textlin");
    +$graph->SetY2Scale("lin");
    +$graph->SetShadow();
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot2=new LinePlot($y2data);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    +$graph->AddY2($lineplot2);
    +$lineplot2->SetColor("orange");
    +$lineplot2->SetWeight(2);
    +$graph->y2axis->SetColor("orange");
    + 
    +$graph->title->Set("Example 5");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$lineplot->SetColor("blue");
    +$lineplot->SetWeight(2);
    + 
    +$lineplot2->SetColor("orange");
    +$lineplot2->SetWeight(2);
    + 
    +$graph->yaxis->SetColor("blue");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example6.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example6.1.html new file mode 100755 index 00000000..dfb73c4e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example6.1.html @@ -0,0 +1,110 @@ +
    example6.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    +$y2data = array(354,200,265,99,111,91,198,225,293,251);
    + 
    +// Create the graph and specify the scale for both Y-axis
    +$graph = new Graph(300,240);    
    +$graph->SetScale("textlin");
    +$graph->SetY2Scale("lin");
    +$graph->SetShadow();
    + 
    +// Adjust the margin
    +$graph->img->SetMargin(40,40,20,70);
    + 
    +// Create the two linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot2=new LinePlot($y2data);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    +$graph->AddY2($lineplot2);
    +$lineplot2->SetColor("orange");
    +$lineplot2->SetWeight(2);
    + 
    +// Adjust the axis color
    +$graph->y2axis->SetColor("orange");
    +$graph->yaxis->SetColor("blue");
    + 
    +$graph->title->Set("Example 6.1");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Set the colors for the plots 
    +$lineplot->SetColor("blue");
    +$lineplot->SetWeight(2);
    +$lineplot2->SetColor("orange");
    +$lineplot2->SetWeight(2);
    + 
    +// Set the legends for the plots
    +$lineplot->SetLegend("Plot 1");
    +$lineplot2->SetLegend("Plot 2");
    + 
    +// Adjust the legend position
    +$graph->legend->SetLayout(LEGEND_HOR);
    +$graph->legend->Pos(0.4,0.95,"center","bottom");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example6.2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example6.2.html new file mode 100755 index 00000000..167cbe2e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example6.2.html @@ -0,0 +1,94 @@ +
    example6.2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    +$y2data = array(354,200,265,99,111,91,198,225,293,251);
    + 
    +// Create the graph and specify the scale for both Y-axis
    +$graph = new Graph(300,240);    
    +$graph->SetScale("textlin");
    +$graph->SetShadow();
    + 
    +// Adjust the margin
    +$graph->img->SetMargin(40,40,20,70);
    + 
    +// Create the two linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetStepStyle();
    + 
    +// Adjust the axis color
    +$graph->yaxis->SetColor("blue");
    + 
    +$graph->title->Set("Example 6.2");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Set the colors for the plots 
    +$lineplot->SetColor("blue");
    +$lineplot->SetWeight(2);
    + 
    +// Set the legends for the plots
    +$lineplot->SetLegend("Plot 1");
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Adjust the legend position
    +$graph->legend->SetLayout(LEGEND_HOR);
    +$graph->legend->Pos(0.4,0.95,"center","bottom");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example6.html new file mode 100755 index 00000000..a3af24da --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example6.html @@ -0,0 +1,108 @@ +
    example6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    +$y2data = array(354,200,265,99,111,91,198,225,293,251);
    + 
    +// Create the graph and specify the scale for both Y-axis
    +$graph = new Graph(400,200);
    +$graph->SetScale('textlin');
    +$graph->SetY2Scale('lin');
    +$graph->SetShadow();
    + 
    +// Adjust the margin
    +$graph->img->SetMargin(40,140,20,40);
    + 
    +// Create the two linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot2=new LinePlot($y2data);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    +$graph->AddY2($lineplot2);
    +$lineplot2->SetColor('orange');
    +$lineplot2->SetWeight(2);
    + 
    +// Adjust the axis color
    +$graph->y2axis->SetColor('orange');
    +$graph->yaxis->SetColor('blue');
    + 
    +$graph->title->Set('Example 6');
    +$graph->xaxis->title->Set('X-title');
    +$graph->yaxis->title->Set('Y-title');
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Set the colors for the plots
    +$lineplot->SetColor('blue');
    +$lineplot->SetWeight(2);
    +$lineplot2->SetColor('orange');
    +$lineplot2->SetWeight(2);
    + 
    +// Set the legends for the plots
    +$lineplot->SetLegend('Plot 1');
    +$lineplot2->SetLegend('Plot 2');
    + 
    +// Adjust the legend position
    +$graph->legend->Pos(0.05,0.5,'right','center');
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example7.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example7.html new file mode 100755 index 00000000..b7797cbb --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example7.html @@ -0,0 +1,88 @@ +
    example7.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_log.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    +$y2data = array(354,70,265,29,111,91,198,225,593,251);
    + 
    +// Create the graph.
    +$graph = new Graph(350,200);    
    +$graph->SetScale("textlin");
    +$graph->SetY2Scale("log");
    +$graph->SetShadow();
    +$graph->img->SetMargin(40,110,20,40);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot2=new LinePlot($y2data);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    +$graph->AddY2($lineplot2);
    +$graph->yaxis->SetColor('blue');
    + 
    +$graph->title->Set("Example 7");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$lineplot->SetColor("blue");
    +$lineplot->SetWeight(2);
    +$lineplot2->SetWeight(2);
    + 
    +$lineplot->SetLegend("Plot 1");
    +$lineplot2->SetLegend("Plot 2");
    + 
    +$graph->legend->Pos(0.05,0.5,"right","center");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example8.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example8.html new file mode 100755 index 00000000..d74a9f28 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example8.html @@ -0,0 +1,96 @@ +
    example8.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_log.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    +$y2data = array(354,200,265,99,111,91,198,225,293,251);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(350,200);    
    +$graph->SetScale("textlog");
    +$graph->SetShadow();
    +$graph->img->SetMargin(40,110,20,40);
    + 
    +// Show the gridlines
    +$graph->ygrid->Show(true,true);
    +$graph->xgrid->Show(true,false);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot2=new LinePlot($y2data);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +$graph->title->Set("Example 8");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$lineplot->SetColor("blue");
    +$lineplot->SetWeight(2);
    + 
    +// Adjust the color of the Y axis
    +$graph->yaxis->SetColor("blue");
    + 
    +// Specifya a legend
    +$lineplot->SetLegend("Plot 1");
    + 
    +// Adjust the position of the grid box
    +$graph->legend->Pos(0.05,0.5,"right","center");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example9.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example9.1.html new file mode 100755 index 00000000..42724d7d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example9.1.html @@ -0,0 +1,100 @@ +
    example9.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_log.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    + 
    +$ydata = array(11,3,8,42,5,1,9,13,5,7);
    +$datax = array("Jan","Feb","Mar","Apr","Maj","Jun","Jul","aug","Sep","Oct");
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(350,200);
    +$graph->SetScale("textlog");
    + 
    +$graph->img->SetMargin(40,110,20,40);
    +$graph->SetShadow();
    + 
    +$graph->ygrid->Show(true,true);
    +$graph->xgrid->Show(true,false);
    + 
    +// Specify the tick labels
    +$a = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($a);
    +$graph->xaxis->SetTextLabelInterval(2);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +$graph->title->Set("Examples 9");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$lineplot->SetColor("blue");
    +$lineplot->SetWeight(2);
    + 
    +$graph->yaxis->SetColor("blue");
    + 
    +$lineplot->SetLegend("Plot 1");
    + 
    +$graph->legend->Pos(0.05,0.5,"right","center");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example9.2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example9.2.html new file mode 100755 index 00000000..bdff6576 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example9.2.html @@ -0,0 +1,104 @@ +
    example9.2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_log.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    + 
    +$ydata = array(11,3,8,42,5,1,9,13,5,7);
    +$datax = array("Jan","Feb","Mar","Apr","Maj","Jun","Jul","aug","Sep","Oct");
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(350,200);
    +$graph->SetScale("textlog");
    + 
    +$graph->img->SetMargin(40,110,20,50);
    +$graph->SetShadow();
    + 
    +$graph->ygrid->Show(true,true);
    +$graph->xgrid->Show(true,false);
    + 
    +// Specify the tick labels
    +$a = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($a);
    +//$graph->xaxis->SetTextLabelInterval(2);
    +$graph->xaxis->SetLabelAngle(90);
    + 
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +$graph->title->Set("Examples 9");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$lineplot->SetColor("blue");
    +$lineplot->SetWeight(2);
    + 
    +$graph->yaxis->SetColor("blue");
    + 
    +$lineplot->SetLegend("Plot 1");
    + 
    +$graph->legend->Pos(0.05,0.5,"right","center");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/example9.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example9.html new file mode 100755 index 00000000..023e4894 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/example9.html @@ -0,0 +1,98 @@ +
    example9.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_log.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    + 
    +$ydata = array(11,3,8,42,5,1,9,13,5,7);
    +$datax = array("Jan","Feb","Mar","Apr","Maj","Jun","Jul","aug","Sep","Oct");
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(350,200);
    +$graph->SetScale("textlog");
    + 
    +$graph->img->SetMargin(40,110,20,40);
    +$graph->SetShadow();
    + 
    +$graph->ygrid->Show(true,true);
    +$graph->xgrid->Show(true,false);
    + 
    +// Specify the tick labels
    +$a = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($a);
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +$graph->title->Set("Examples 9");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$lineplot->SetColor("blue");
    +$lineplot->SetWeight(2);
    + 
    +$graph->yaxis->SetColor("blue");
    + 
    +$lineplot->SetLegend("Plot 1");
    + 
    +$graph->legend->Pos(0.05,0.5,"right","center");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/fieldscatterex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/fieldscatterex1.html new file mode 100755 index 00000000..b706c94a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/fieldscatterex1.html @@ -0,0 +1,180 @@ +
    fieldscatterex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +$polex = 6;
    +$poley = 40;
    + 
    +function FldCallback($x,$y,$a) {
    +    GLOBAL $polex, $poley;
    +    $maxr = 3000;
    + 
    +    // Size and arrow size is constant
    +    $size="";
    +    $arrowsize="";
    + 
    +    // Since we have different scales we need the data points
    +    // to be of the same magnitude to give it a distance
    +    // interpretation.
    +    $x *= 10; 
    + 
    +    // Colors gets colder the further out we go from the center
    +    $r = ($x-$polex*10)*($x-$polex*10)+($y-$poley)*($y-$poley);
    +    $f = $r/$maxr;
    +    if( $f > 1 ) $f=1;
    +    $red = floor((1-$f)*255);
    +    $blue = floor($f*255);
    +    $color = array($red,0,$blue);
    +    //echo "x=$x, y=$y, blue=$blue, red=$red<br>";
    +    return array($color,$size,$arrowsize);
    +}
    + 
    +// Create data for a simulated pseudo-magnetic radient field
    +$datax = array();
    +$datay = array();
    +$angle = array();
    +for($x=1; $x < 10; ++$x ) {
    +    for($y=10; $y<100; $y += 10) {
    +    $a = -1;
    +    if( $x==$polex && $y==$poley ) continue;
    +    if( $x==$polex ) {
    +        if( $y > $poley ) $a=90;
    +        else $a = 270;
    +    }
    +    if( $y==$poley ) {
    +        if( $x  > $polex ) $a=0;
    +        else  $a=180;        
    +    }
    +    if( $a == -1 ) {
    +        $d1 = $y-$poley;
    +        $d2 = ($polex-$x)*20;
    +        if( $y < $poley ) $d2 *= -1;
    +        $h = sqrt($d1*$d1+$d2*$d2);
    +        $t = -$d2/$h;
    +        $ac = acos($t);
    +        if( $y < $poley ) $ac += M_PI;
    +        $a = $ac * 180/M_PI;
    +    }
    +    $datax[] = $x;
    +    $datay[] = $y;
    +    $angle[] = $a;
    +    }
    +}
    + 
    +// Setup the graph
    +$graph = new Graph(300,200);
    +$graph->SetScale("intlin",0,100,0,10);
    +$graph->SetMarginColor('lightblue');
    + 
    + 
    +// ..and titles
    +$graph->title->Set("Field plot");
    + 
    +// Setup the field plot
    +$fp = new FieldPlot($datay,$datax,$angle);
    + 
    +// Setup formatting callback
    +$fp->SetCallback('FldCallback');
    + 
    +// First size argument is length (in pixels of arrow) 
    +// Second size argument is roughly size of arrow. Arrow size is specified as
    +// an integer in the range [0,9]
    +$fp->arrow->SetSize(20,2);
    +$fp->arrow->SetColor('navy');
    + 
    +$graph->Add($fp);
    + 
    +// .. and output
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/filledgridex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/filledgridex1.html new file mode 100755 index 00000000..44f3c834 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/filledgridex1.html @@ -0,0 +1,96 @@ +
    filledgridex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$datay1 = array(20,15,23,15);
    +$datay2 = array(12,9,42,8);
    +$datay3 = array(5,17,32,24);
    + 
    +// Setup the graph
    +$graph = new Graph(300,200);
    +$graph->SetMarginColor('white');
    +$graph->SetScale("textlin");
    +$graph->SetFrame(false);
    +$graph->SetMargin(30,50,30,30);
    + 
    +$graph->title->Set('Filled Y-grid');
    + 
    + 
    +$graph->yaxis->HideZeroLabel();
    +$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5');
    +$graph->xgrid->Show();
    + 
    +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());
    + 
    +// Create the first line
    +$p1 = new LinePlot($datay1);
    +$p1->SetColor("navy");
    +$p1->SetLegend('Line 1');
    +$graph->Add($p1);
    + 
    +// Create the second line
    +$p2 = new LinePlot($datay2);
    +$p2->SetColor("red");
    +$p2->SetLegend('Line 2');
    +$graph->Add($p2);
    + 
    +// Create the third line
    +$p3 = new LinePlot($datay3);
    +$p3->SetColor("orange");
    +$p3->SetLegend('Line 3');
    +$graph->Add($p3);
    + 
    +$graph->legend->SetShadow('gray@0.4',5);
    +$graph->legend->SetPos(0.1,0.1,'right','top');
    +// Output line
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/filledlineex01.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/filledlineex01.1.html new file mode 100755 index 00000000..e889a70c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/filledlineex01.1.html @@ -0,0 +1,48 @@ +
    filledlineex01.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$datay = array(1.23,1.9,1.6,3.1,3.4,2.8,2.1,1.9);
    +$graph = new Graph(300,200);
    +$graph->SetScale("textlin");
    + 
    +$graph->img->SetMargin(40,40,40,40);    
    +$graph->SetShadow();
    +$graph->SetGridDepth(DEPTH_FRONT);
    + 
    +$graph->title->Set("Example of filled line plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$p1 = new LinePlot($datay);
    +$p1->SetFillColor("orange");
    +$p1->mark->SetType(MARK_FILLEDCIRCLE);
    +$p1->mark->SetFillColor("red");
    +$p1->mark->SetWidth(4);
    +$graph->Add($p1);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/filledlineex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/filledlineex01.html new file mode 100755 index 00000000..6b9b0f13 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/filledlineex01.html @@ -0,0 +1,46 @@ +
    filledlineex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$datay = array(1.23, 1.9, 1.6, 3.1, 3.4, 2.8, 2.1, 1.9);
    +$graph = new Graph(300,200);
    +$graph->SetScale('textlin');
    + 
    +$graph->img->SetMargin(40,40,40,40);
    +$graph->SetShadow();
    + 
    +$graph->title->Set("Example of filled line plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$p1 = new LinePlot($datay);
    +$p1->SetFillColor("orange");
    +$p1->mark->SetType(MARK_FILLEDCIRCLE);
    +$p1->mark->SetFillColor("red");
    +$p1->mark->SetWidth(4);
    +$graph->Add($p1);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/filledlineex03.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/filledlineex03.html new file mode 100755 index 00000000..f0fc8039 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/filledlineex03.html @@ -0,0 +1,42 @@ +
    filledlineex03.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$datay = array(11,30,20,13,10,'x',16,12,'x',15,4,9);
    + 
    +// Setup the graph
    +$graph = new Graph(400,250);
    +$graph->SetScale('intlin');
    +$graph->title->Set('Filled line with NULL values');
    +//Make sure data starts from Zero whatever data we have
    +$graph->yscale->SetAutoMin(0);
    + 
    +$p1 = new LinePlot($datay);
    +$p1->SetFillColor('lightblue');
    +$graph->Add($p1);
    + 
    +// Output line
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/fixscale_radarex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/fixscale_radarex1.html new file mode 100755 index 00000000..823ea154 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/fixscale_radarex1.html @@ -0,0 +1,72 @@ +
    fixscale_radarex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_radar.php');
    + 
    +$graph = new RadarGraph(300,300);
    +$graph->SetScale('lin',0,50);
    +$graph->yscale->ticks->Set(25,5);
    +$graph->SetColor('white');
    +$graph->SetShadow();
    + 
    +$graph->SetCenter(0.5,0.55);
    + 
    +$graph->axis->SetFont(FF_FONT1,FS_BOLD);
    +$graph->axis->SetWeight(2);
    + 
    +// Uncomment the following lines to also show grid lines.
    +$graph->grid->SetLineStyle('dashed');
    +$graph->grid->SetColor('navy@0.5');
    +$graph->grid->Show();
    + 
    +$graph->ShowMinorTickMarks();
    + 
    +$graph->title->Set('Quality result');
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->SetTitles(array('One','Two','Three','Four','Five','Sex','Seven','Eight','Nine','Ten'));
    + 
    +$plot = new RadarPlot(array(12,35,20,30,33,15,37));
    +$plot->SetLegend('Goal');
    +$plot->SetColor('red','lightred');
    +$plot->SetFillColor('lightblue');
    +$plot->SetLineWeight(2);
    + 
    +$graph->Add($plot);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/footerex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/footerex1.html new file mode 100755 index 00000000..19bcc0be --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/footerex1.html @@ -0,0 +1,120 @@ +
    footerex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +$datay1 = array(4,26,15,44);
    + 
    +// Setup the graph
    +$graph = new Graph(300,250);
    +$graph->SetMarginColor('white');
    +$graph->SetScale("textlin");
    +$graph->SetFrame(false);
    +$graph->SetMargin(30,5,25,50);
    + 
    +// Setup the tab
    +$graph->tabtitle->Set(' Year 2003 ' );
    +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13);
    +$graph->tabtitle->SetColor('darkred','#E1E1FF');
    + 
    +// Enable X-grid as well
    +$graph->xgrid->Show();
    + 
    +// Use months as X-labels
    +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());
    + 
    +$graph->footer->left->Set('L. footer');
    +$graph->footer->left->SetFont(FF_ARIAL,FS_NORMAL,12); 
    +$graph->footer->left->SetColor('darkred');
    +$graph->footer->center->Set('C. footer');
    +$graph->footer->center->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->footer->center->SetColor('darkred');
    +$graph->footer->right->Set('R. footer');
    +$graph->footer->right->SetFont(FF_ARIAL,FS_NORMAL,12); 
    +$graph->footer->right->SetColor('darkred');
    + 
    +// Create the plot
    +$p1 = new LinePlot($datay1);
    +$p1->SetColor("navy");
    + 
    +// Use an image of favourite car as marker
    +$p1->mark->SetType(MARK_IMG,'saab_95.jpg',0.5);
    + 
    +// Displayes value on top of marker image
    +$p1->value->SetFormat('%d mil');
    +$p1->value->Show();
    +$p1->value->SetColor('darkred');
    +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10);
    +// Increase the margin so that the value is printed avove tje
    +// img marker
    +$p1->value->SetMargin(14);
    + 
    +// Incent the X-scale so the first and last point doesn't
    +// fall on the edges
    +$p1->SetCenter();
    + 
    +$graph->Add($p1);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/funcex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/funcex2.html new file mode 100755 index 00000000..59e61421 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/funcex2.html @@ -0,0 +1,64 @@ +
    funcex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_utils.inc.php');
    + 
    +$f = new FuncGenerator('cos($i)','$i*$i*$i');
    +list($xdata,$ydata) = $f->E(-M_PI,M_PI,25);
    + 
    +$graph = new Graph(380,450);
    +$graph->SetScale("linlin");
    +$graph->SetShadow();
    +$graph->img->SetMargin(50,50,60,40);    
    +$graph->SetBox(true,'black',2);    
    +$graph->SetMarginColor('white');
    +$graph->SetColor('lightyellow');
    +$graph->SetAxisStyle(AXSTYLE_SIMPLE);
    + 
    +//$graph->xaxis->SetLabelFormat('%.1f');
    + 
    +$graph->title->Set("Function plot with marker");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->subtitle->Set("(BOXOUT Axis style)");
    +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL);
    + 
    +$lp1 = new LinePlot($ydata,$xdata);
    +$lp1->mark->SetType(MARK_FILLEDCIRCLE);
    +$lp1->mark->SetFillColor("red");
    +$lp1->SetColor("blue");
    + 
    +$graph->Add($lp1);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantt_samerowex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantt_samerowex1.html new file mode 100755 index 00000000..2a63edf3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantt_samerowex1.html @@ -0,0 +1,126 @@ +
    gantt_samerowex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("Activities on same row");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Instead of week number show the date for the first day in the week
    +// on the week scale
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    + 
    +// Make the week scale font smaller than the default
    +$graph->scale->week->SetFont(FF_FONT0);
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// 0 % vertical label margin
    +$graph->SetLabelVMarginFactor(1); // 1=default value
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity1 = new GanttBar(0,"Activity 1","2001-12-21","2001-12-26","");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity1->SetPattern(BAND_RDIAG,"yellow");
    +$activity1->SetFillColor("red");
    + 
    +// Set absolute height of activity
    +$activity1->SetHeight(16);
    + 
    +// Format the bar for the second activity
    +// ($row,$title,$startdate,$enddate)
    +$activity2 = new GanttBar(0,"","2001-12-31","2002-01-2","[BO]");
    + 
    +// ADjust font for caption
    +$activity2->caption->SetFont(FF_ARIAL,FS_BOLD);
    +$activity2->caption->SetColor("darkred");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity2->SetPattern(BAND_RDIAG,"yellow");
    +$activity2->SetFillColor("red");
    + 
    +// Set absolute height of activity
    +$activity2->SetHeight(16);
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity1);
    +$graph->Add($activity2);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantt_samerowex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantt_samerowex2.html new file mode 100755 index 00000000..1a31b8b2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantt_samerowex2.html @@ -0,0 +1,130 @@ +
    gantt_samerowex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("Activities on same row");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set('Using break style');
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Instead of week number show the date for the first day in the week
    +// on the week scale
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    + 
    +// Make the week scale font smaller than the default
    +$graph->scale->week->SetFont(FF_FONT0);
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// 0 % vertical label margin
    +$graph->SetLabelVMarginFactor(1); // 1=default value
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity1 = new GanttBar(0,"Activity 1","2001-12-21","2001-12-26","");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity1->SetPattern(BAND_RDIAG,"yellow");
    +$activity1->SetFillColor("red");
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$break1 = new GanttBar(0,'',"2001-12-27","2001-12-30","");
    +$break1->SetBreakStyle(true,'dotted',2);
    +$break1->SetColor('red');
    +$graph->Add($break1);
    + 
    +// Format the bar for the second activity
    +// ($row,$title,$startdate,$enddate)
    +$activity2 = new GanttBar(0,"","2001-12-31","2002-01-2","[BO]");
    + 
    +// ADjust font for caption
    +$activity2->caption->SetFont(FF_ARIAL,FS_BOLD);
    +$activity2->caption->SetColor("darkred");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity2->SetPattern(BAND_RDIAG,"yellow");
    +$activity2->SetFillColor("red");
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity1);
    +$graph->Add($activity2);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantt_textex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantt_textex1.html new file mode 100755 index 00000000..b89762a9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantt_textex1.html @@ -0,0 +1,192 @@ +
    gantt_textex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    +require_once ('jpgraph/jpgraph_flags.php');
    + 
    +$graph = new GanttGraph(0,0);
    +$graph->SetBox();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("Example with added texts");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Set table title
    +$graph->scale->tableTitle->Set("(Rev: 1.22)");
    +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD);
    +$graph->scale->SetTableTitleBackground("silver");
    + 
    +// Modify the appearance of the dividing lines
    +$graph->scale->divider->SetWeight(3);
    +$graph->scale->divider->SetColor("navy");
    +$graph->scale->dividerh->SetWeight(3);
    +$graph->scale->dividerh->SetColor("navy");
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// 0 % vertical label margin
    +$graph->SetLabelVMarginFactor(1);
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_RDIAG,"yellow");
    +$activity->SetFillColor("red");
    + 
    +// Set absolute height
    +$activity->SetHeight(10);
    + 
    +// Specify progress to 60%
    +$activity->progress->Set(0.6);
    +$activity->progress->SetPattern(BAND_HVCROSS,"blue");
    + 
    +// Format the bar for the second activity
    +// ($row,$title,$startdate,$enddate)
    +$activity2 = new GanttBar(1,"Project","2001-12-21","2001-12-27","[30%]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity2->SetPattern(BAND_RDIAG,"yellow");
    +$activity2->SetFillColor("red");
    + 
    +// Set absolute height
    +$activity2->SetHeight(10);
    + 
    +// Specify progress to 30%
    +$activity2->progress->Set(0.3);
    +$activity2->progress->SetPattern(BAND_HVCROSS,"blue");
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    +$graph->Add($activity2);
    + 
    +// Add text to top left corner of graph
    +$txt1 = new Text();
    +$txt1->SetPos(5,2);
    +$txt1->Set("Note:\nEstimate done w148");
    +$txt1->SetFont(FF_ARIAL,FS_BOLD,12);
    +$txt1->SetColor('darkred');
    +$graph->Add($txt1);
    + 
    +// Add text to the top bar
    +$txt2 = new Text();
    +$txt2->SetScalePos("2002-01-01",1);
    +$txt2->SetFont(FF_ARIAL,FS_BOLD,12);
    +$txt2->SetAlign('left','center');
    +$txt2->Set("Remember this!");
    +$txt2->SetBox('yellow');
    +$graph->Add($txt2);
    + 
    + 
    +// Add a vertical line
    +$vline = new GanttVLine("2001-12-24","Phase 1");
    +$vline->SetDayOffset(0.5);
    +//$graph->Add($vline);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttcolumnfontsex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttcolumnfontsex01.html new file mode 100755 index 00000000..485829bf --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttcolumnfontsex01.html @@ -0,0 +1,132 @@ +
    ganttcolumnfontsex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +// Gantt column font array example
    + 
    +require_once ('../jpgraph.php');
    +require_once ('../jpgraph_gantt.php');
    + 
    +// Setup a basic Gantt graph
    +$graph = new GanttGraph();
    +$graph->SetMarginColor('gray:1.7');
    +$graph->SetColor('white');
    + 
    +// Setup the graph title and title font
    +$graph->title->Set("Example of column fonts");
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    + 
    +// Show three headers
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HMONTH| GANTT_HYEAR);
    + 
    +// Set the column headers and font
    +$graph->scale->actinfo->SetColTitles( array('Name','Start','End'),array(100));
    +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_BOLD,11);
    + 
    +// Some "dummy" data to be dsiplayed
    +$data = array(
    +    array(0,'Group 1', '2001-11-27','2001-12-05'),
    +    array(1,'  Activity 1', '2001-11-27','2001-11-29'),
    +    array(2,'  Activity 2', '2001-11-28','2001-12-05'),
    +    array(3,'Group 2', '2001-11-29','2001-12-10'),
    +    array(4,'  Activity 1', '2001-11-29','2001-12-03'),
    +    array(5,'  Activity 2', '2001-12-01','2001-12-10'),
    + 
    +);
    + 
    +// Format and add the Gantt bars to the chart
    +$n = count($data);
    +for($i=0; $i < $n; ++$i) {
    +    if( $i === 0 || $i === 3 ) {
    +        // Format the group bars
    +        $bar = new GanttBar($data[$i][0],array($data[$i][1],$data[$i][2],$data[$i][3]),$data[$i][2],$data[$i][3],'',0.35);
    + 
    +        // For each group make the name bold but keep the dates as the default font
    +        $bar->title->SetColumnFonts(array(array(FF_ARIAL,FS_BOLD,11)));
    + 
    +        // Add group markers
    +        $bar->leftMark->SetType( MARK_LEFTTRIANGLE );
    +        $bar->leftMark->Show();
    +        $bar->rightMark->SetType( MARK_RIGHTTRIANGLE );
    +        $bar->rightMark->Show();
    +        $bar->SetFillColor('black');
    +        $bar->SetPattern(BAND_SOLID,'black');
    +    }
    +    else {
    +        // Format the activity bars
    +        $bar = new GanttBar($data[$i][0],array($data[$i][1],$data[$i][2],$data[$i][3]),$data[$i][2],$data[$i][3],'',0.45);
    +        $bar->SetPattern(BAND_RDIAG,'black');
    +        $bar->SetFillColor('orange');
    +    }
    +    // Default font
    +    $bar->title->SetFont(FF_ARIAL,FS_NORMAL,10);
    +    $graph->Add($bar);
    +}
    + 
    +// Send back the graph to the client
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttconstrainex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttconstrainex2.html new file mode 100755 index 00000000..a9fb7021 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttconstrainex2.html @@ -0,0 +1,74 @@ +
    ganttconstrainex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +
    <?php // content="text/plain; charset=utf-8"
    +// Gantt example
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    + 
    +// 
    +// The data for the graphs
    +//
    +$data = array(
    +    array(0,ACTYPE_GROUP,    "Phase 1",        "2001-10-26","2001-11-23",''),
    +    array(1,ACTYPE_NORMAL,   "  Label 2",      "2001-11-01","2001-11-20",''),
    +    array(2,ACTYPE_NORMAL,   "  Label 3",      "2001-10-26","2001-11-03",''),
    +    array(3,ACTYPE_MILESTONE,"  Phase 1 Done", "2001-11-23",'M2') );
    + 
    +// The constrains between the activities
    +$constrains = array(array(2,1,CONSTRAIN_ENDSTART),
    +            array(1,3,CONSTRAIN_STARTSTART));
    + 
    +$progress = array(array(1,0.4));
    + 
    +// Create the basic graph
    +$graph = new GanttGraph();
    +$graph->title->Set("Example with grouping and constrains");
    +//$graph->SetFrame(false);
    + 
    +// Setup scale
    +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK);
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR);
    + 
    +// Add the specified activities
    +$graph->CreateSimple($data,$constrains,$progress);
    + 
    +// .. and stroke the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex00.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex00.html new file mode 100755 index 00000000..e7d6047b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex00.html @@ -0,0 +1,28 @@ +
    ganttex00.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +// A new graph with automatic size
    +$graph = new GanttGraph();
    + 
    +//  A new activity on row '0'
    +$activity = new GanttBar(0,"Activity 1","2001-12-21","2002-01-19");
    +$graph->Add($activity);
    + 
    +// Display the Gantt chart
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex01.html new file mode 100755 index 00000000..f9aea7ae --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex01.html @@ -0,0 +1,80 @@ +
    ganttex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set('A main title');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set('(Draft version)');
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Instead of week number show the date for the first day in the week
    +// on the week scale
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    + 
    +// Make the week scale font smaller than the default
    +$graph->scale->week->SetFont(FF_FONT0);
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(0,'Activity 1','2001-12-21','2002-01-18');
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_LDIAG,'yellow');
    +$activity->SetFillColor('red');
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex03.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex03.html new file mode 100755 index 00000000..dce0835c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex03.html @@ -0,0 +1,84 @@ +
    ganttex03.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph(0,0);
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("A nice main title");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set("(Draft version)");
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Instead of week number show the date for the first day in the week
    +// on the week scale
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    + 
    +// Make the week scale font smaller than the default
    +$graph->scale->week->SetFont(FF_FONT0);
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(7,"Project","2001-12-21","2002-02-20");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_RDIAG,"yellow");
    +$activity->SetFillColor("red");
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex04.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex04.html new file mode 100755 index 00000000..42a8745b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex04.html @@ -0,0 +1,94 @@ +
    ganttex04.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("A nice main title");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set("(Draft version)");
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Instead of week number show the date for the first day in the week
    +// on the week scale
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    + 
    +// Make the week scale font smaller than the default
    +$graph->scale->week->SetFont(FF_FONT0);
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_RDIAG,"yellow");
    +$activity->SetFillColor("red");
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    + 
    +// Create a miletone
    +$milestone = new MileStone(2,"Milestone",'2002-01-09','MS5');
    +$milestone->caption->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->Add($milestone);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex06.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex06.html new file mode 100755 index 00000000..7354b1ef --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex06.html @@ -0,0 +1,104 @@ +
    ganttex06.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("A nice main title");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set("(Draft version)");
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Instead of week number show the date for the first day in the week
    +// on the week scale
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    + 
    +// Make the week scale font smaller than the default
    +$graph->scale->week->SetFont(FF_FONT0);
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(0,"Project","2001-12-21","2002-02-20");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_RDIAG,"yellow");
    +$activity->SetFillColor("red");
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    + 
    +// Create a miletone
    +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15");
    +$milestone->title->SetColor("black");
    +$milestone->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->Add($milestone);
    + 
    +// Add a vertical line
    +$vline = new GanttVLine("2001-12-24","Phase 1");
    +$graph->Add($vline);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex07.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex07.html new file mode 100755 index 00000000..9df41153 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex07.html @@ -0,0 +1,106 @@ +
    ganttex07.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("A nice main title");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set("(Draft version)");
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Instead of week number show the date for the first day in the week
    +// on the week scale
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    + 
    +// Make the week scale font smaller than the default
    +$graph->scale->week->SetFont(FF_FONT0);
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(0,"Project","2001-12-21","2002-02-20");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_RDIAG,"yellow");
    +$activity->SetFillColor("red");
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    + 
    +// Create a miletone
    +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15");
    +$milestone->title->SetColor("black");
    +$milestone->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->Add($milestone);
    + 
    +// Add a vertical line
    +$vline = new GanttVLine("2001-12-24","Phase 1");
    +$vline->SetDayOffset(0.5);
    +$graph->Add($vline);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex08.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex08.html new file mode 100755 index 00000000..6f280f87 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex08.html @@ -0,0 +1,126 @@ +
    ganttex08.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("A nice main title");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set("(Draft version)");
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Instead of week number show the date for the first day in the week
    +// on the week scale
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    + 
    +// Make the week scale font smaller than the default
    +$graph->scale->week->SetFont(FF_FONT0);
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-15");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_RDIAG,"yellow");
    +$activity->SetFillColor("red");
    + 
    +// Add a right marker
    +$activity->rightMark->Show();
    +$activity->rightMark->SetType(MARK_FILLEDCIRCLE);
    +$activity->rightMark->SetWidth(13);
    +$activity->rightMark->SetColor("red");
    +$activity->rightMark->SetFillColor("red");
    +$activity->rightMark->title->Set("M5");
    +$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$activity->rightMark->title->SetColor("white");
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    + 
    +// Create a miletone
    +$milestone = new MileStone(2,"Milestone","2002-01-10","2002-01-10");
    +$milestone->title->SetColor("black");
    +$milestone->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->Add($milestone);
    + 
    +// Add a vertical line
    +$vline = new GanttVLine("2001-12-24","Phase 1");
    +$vline->SetDayOffset(0.5);
    +$graph->Add($vline);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex13-zoom1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex13-zoom1.html new file mode 100755 index 00000000..6c29cd8a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex13-zoom1.html @@ -0,0 +1,134 @@ +
    ganttex13-zoom1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("Zooming a graph");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set("(zoom=0.7)");
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Instead of week number show the date for the first day in the week
    +// on the week scale
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    + 
    +// Make the week scale font smaller than the default
    +$graph->scale->week->SetFont(FF_FONT0);
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// 0 % vertical label margin
    +$graph->SetLabelVMarginFactor(1.0); // 1=default value
    + 
    +// Set zoom factor
    +$graph->SetZoomFactor(0.7);
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity1 = new GanttBar(0,"Activity 1","2001-12-21","2002-01-07","[ER,TR]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity1->SetPattern(BAND_RDIAG,"yellow");
    +$activity1->SetFillColor("red");
    + 
    +// Set absolute height of activity
    +$activity1->SetHeight(16);
    + 
    +// Format the bar for the second activity
    +// ($row,$title,$startdate,$enddate)
    +$activity2 = new GanttBar(1,"Activity 2","2001-12-21","2002-01-01","[BO,SW,JC]");
    + 
    +// ADjust font for caption
    +$activity2->caption->SetFont(FF_ARIAL,FS_BOLD);
    +$activity2->caption->SetColor("darkred");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity2->SetPattern(BAND_RDIAG,"yellow");
    +$activity2->SetFillColor("red");
    + 
    +// Set absolute height of activity
    +$activity2->SetHeight(16);
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity1);
    +$graph->Add($activity2);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex13-zoom2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex13-zoom2.html new file mode 100755 index 00000000..9e78793c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex13-zoom2.html @@ -0,0 +1,134 @@ +
    ganttex13-zoom2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("Zooming a graph");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set("(zoom=1.5)");
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Instead of week number show the date for the first day in the week
    +// on the week scale
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    + 
    +// Make the week scale font smaller than the default
    +$graph->scale->week->SetFont(FF_FONT0);
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// 0 % vertical label margin
    +$graph->SetLabelVMarginFactor(1.0); // 1=default value
    + 
    +// Set zoom factor
    +$graph->SetZoomFactor(1.5);
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity1 = new GanttBar(0,"Activity 1","2001-12-21","2002-01-07","[ER,TR]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity1->SetPattern(BAND_RDIAG,"yellow");
    +$activity1->SetFillColor("red");
    + 
    +// Set absolute height of activity
    +$activity1->SetHeight(16);
    + 
    +// Format the bar for the second activity
    +// ($row,$title,$startdate,$enddate)
    +$activity2 = new GanttBar(1,"Activity 2","2001-12-21","2002-01-01","[BO,SW,JC]");
    + 
    +// ADjust font for caption
    +$activity2->caption->SetFont(FF_ARIAL,FS_BOLD);
    +$activity2->caption->SetColor("darkred");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity2->SetPattern(BAND_RDIAG,"yellow");
    +$activity2->SetFillColor("red");
    + 
    +// Set absolute height of activity
    +$activity2->SetHeight(16);
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity1);
    +$graph->Add($activity2);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex14.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex14.html new file mode 100755 index 00000000..baf6a096 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex14.html @@ -0,0 +1,134 @@ +
    ganttex14.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetBox();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("Example of captions");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set("(ganttex14.php)");
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// 0 % vertical label margin
    +$graph->SetLabelVMarginFactor(1);
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_RDIAG,"yellow");
    +$activity->SetFillColor("red");
    + 
    +// Set absolute height
    +$activity->SetHeight(10);
    + 
    +// Specify progress to 60%
    +$activity->progress->Set(0.6);
    + 
    +// Format the bar for the second activity
    +// ($row,$title,$startdate,$enddate)
    +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity2->SetPattern(BAND_RDIAG,"yellow");
    +$activity2->SetFillColor("red");
    + 
    +// Set absolute height
    +$activity2->SetHeight(10);
    + 
    +// Specify progress to 30%
    +$activity2->progress->Set(0.3);
    + 
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    +$graph->Add($activity2);
    + 
    +// Add a vertical line
    +$vline = new GanttVLine("2001-12-24","Phase 1");
    +$vline->SetDayOffset(0.5);
    +//$graph->Add($vline);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex15.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex15.html new file mode 100755 index 00000000..2ceb8ae3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex15.html @@ -0,0 +1,136 @@ +
    ganttex15.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetBox();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("Example of captions");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set("(ganttex15.php)");
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// 0 % vertical label margin
    +$graph->SetLabelVMarginFactor(1);
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_RDIAG,"yellow");
    +$activity->SetFillColor("red");
    + 
    +// Set absolute height
    +$activity->SetHeight(10);
    + 
    +// Specify progress to 60%
    +$activity->progress->Set(0.6);
    +$activity->progress->SetPattern(BAND_HVCROSS,"blue");
    + 
    +// Format the bar for the second activity
    +// ($row,$title,$startdate,$enddate)
    +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity2->SetPattern(BAND_RDIAG,"yellow");
    +$activity2->SetFillColor("red");
    + 
    +// Set absolute height
    +$activity2->SetHeight(10);
    + 
    +// Specify progress to 30%
    +$activity2->progress->Set(0.3);
    +$activity2->progress->SetPattern(BAND_HVCROSS,"blue");
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    +$graph->Add($activity2);
    + 
    +// Add a vertical line
    +$vline = new GanttVLine("2001-12-24","Phase 1");
    +$vline->SetDayOffset(0.5);
    +//$graph->Add($vline);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex16.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex16.html new file mode 100755 index 00000000..0ccfa415 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex16.html @@ -0,0 +1,146 @@ +
    ganttex16.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetBox();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("Example of captions");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set("(ganttex16.php)");
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Set table title
    +$graph->scale->tableTitle->Set("(Rev: 1.22)");
    +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD);
    +$graph->scale->SetTableTitleBackground("silver");
    +$graph->scale->tableTitle->Show();
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// 0 % vertical label margin
    +$graph->SetLabelVMarginFactor(1);
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_RDIAG,"yellow");
    +$activity->SetFillColor("red");
    + 
    +// Set absolute height
    +$activity->SetHeight(10);
    + 
    +// Specify progress to 60%
    +$activity->progress->Set(0.6);
    +$activity->progress->SetPattern(BAND_HVCROSS,"blue");
    + 
    +// Format the bar for the second activity
    +// ($row,$title,$startdate,$enddate)
    +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity2->SetPattern(BAND_RDIAG,"yellow");
    +$activity2->SetFillColor("red");
    + 
    +// Set absolute height
    +$activity2->SetHeight(10);
    + 
    +// Specify progress to 30%
    +$activity2->progress->Set(0.3);
    +$activity2->progress->SetPattern(BAND_HVCROSS,"blue");
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    +$graph->Add($activity2);
    + 
    +// Add a vertical line
    +$vline = new GanttVLine("2001-12-24","Phase 1");
    +$vline->SetDayOffset(0.5);
    +//$graph->Add($vline);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex17-flag.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex17-flag.html new file mode 100755 index 00000000..c4f4daa2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex17-flag.html @@ -0,0 +1,176 @@ +
    ganttex17-flag.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    +require_once ('jpgraph/jpgraph_flags.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetBox();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("Example of captions");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set("(ganttex17.php)");
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Set table title
    +$graph->scale->tableTitle->Set("(Rev: 1.22)");
    +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD);
    +$graph->scale->SetTableTitleBackground("silver");
    + 
    +// Modify the appearance of the dividing lines
    +$graph->scale->divider->SetWeight(3);
    +$graph->scale->divider->SetColor("navy");
    +$graph->scale->dividerh->SetWeight(3);
    +$graph->scale->dividerh->SetColor("navy");
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// 0 % vertical label margin
    +$graph->SetLabelVMarginFactor(1);
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_RDIAG,"yellow");
    +$activity->SetFillColor("red");
    + 
    +// Set absolute height
    +$activity->SetHeight(10);
    + 
    +// Specify progress to 60%
    +$activity->progress->Set(0.6);
    +$activity->progress->SetPattern(BAND_HVCROSS,"blue");
    + 
    +// Format the bar for the second activity
    +// ($row,$title,$startdate,$enddate)
    +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity2->SetPattern(BAND_RDIAG,"yellow");
    +$activity2->SetFillColor("red");
    + 
    +// Set absolute height
    +$activity2->SetHeight(10);
    + 
    +// Specify progress to 30%
    +$activity2->progress->Set(0.3);
    +$activity2->progress->SetPattern(BAND_HVCROSS,"blue");
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    +$graph->Add($activity2);
    + 
    +// Add a coutnry flag
    +$icon = new IconPlot();
    +$icon->SetAnchor('left','top');
    +$icon->SetCountryFlag('norway');
    +$icon->SetMix(50);
    +$icon->SetPos(5,5);
    +$graph->Add($icon);
    + 
    + 
    +// Add a vertical line
    +$vline = new GanttVLine("2001-12-24","Phase 1");
    +$vline->SetDayOffset(0.5);
    +//$graph->Add($vline);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex18.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex18.html new file mode 100755 index 00000000..8584e4bb --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex18.html @@ -0,0 +1,164 @@ +
    ganttex18.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetBox();
    +$graph->SetShadow();
    + 
    +// Add title and subtitle
    +$graph->title->Set("Example of captions");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set("(ganttex18.php)");
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Set table title
    +$graph->scale->tableTitle->Set("(Rev: 1.22)");
    +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD);
    +$graph->scale->SetTableTitleBackground("silver");
    + 
    +// Modify the appearance of the dividing lines
    +$graph->scale->divider->SetWeight(3);
    +$graph->scale->divider->SetColor("navy");
    + 
    +$graph->scale->dividerh->SetWeight(3);
    +$graph->scale->dividerh->SetColor("navy");
    + 
    +$graph->SetBox(true,"navy",3);
    + 
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
    +$graph->scale->month->SetFontColor("white");
    +$graph->scale->month->SetBackgroundColor("blue");
    + 
    +// 0 % vertical label margin
    +$graph->SetLabelVMarginFactor(1);
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_RDIAG,"yellow");
    +$activity->SetFillColor("red");
    + 
    +// Set absolute height
    +$activity->SetHeight(10);
    + 
    +// Specify progress to 60%
    +$activity->progress->Set(0.6);
    +$activity->progress->SetPattern(BAND_HVCROSS,"blue");
    + 
    +// Format the bar for the second activity
    +// ($row,$title,$startdate,$enddate)
    +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]");
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity2->SetPattern(BAND_RDIAG,"yellow");
    +$activity2->SetFillColor("red");
    + 
    +// Set absolute height
    +$activity2->SetHeight(10);
    + 
    +// Specify progress to 30%
    +$activity2->progress->Set(0.3);
    +$activity2->progress->SetPattern(BAND_HVCROSS,"blue");
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    +$graph->Add($activity2);
    + 
    +// Add a vertical line
    +$vline = new GanttVLine("2001-12-24","Phase 1");
    +$vline->SetDayOffset(0.5);
    +//$graph->Add($vline);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex19.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex19.html new file mode 100755 index 00000000..b7f58822 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex19.html @@ -0,0 +1,168 @@ +
    ganttex19.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetBox();
    +$graph->SetShadow();
    + 
    +// Use default locale
    +$graph->scale->SetDateLocale('sv_SE');
    + 
    +// Add title and subtitle
    +$graph->title->Set('Example of captions');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->subtitle->Set('(ganttex19.php)');
    + 
    +// Show day, week and month scale
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
    + 
    +// Set table title
    +$graph->scale->tableTitle->Set('(Rev: 1.22)');
    +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD);
    +$graph->scale->SetTableTitleBackground('silver');
    +$graph->scale->tableTitle->Show();
    + 
    +$graph->scale->divider->SetStyle('solid');
    +$graph->scale->divider->SetWeight(2);
    +$graph->scale->divider->SetColor('black');
    + 
    + 
    +$graph->SetBox(true,'navy',2);
    + 
    + 
    +// Use the short name of the month together with a 2 digit year
    +// on the month scale
    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
    +$graph->scale->month->SetFontColor('white');
    +$graph->scale->month->SetBackgroundColor('blue');
    + 
    +// 0 % vertical label margin
    +$graph->SetLabelVMarginFactor(1);
    + 
    +// Format the bar for the first activity
    +// ($row,$title,$startdate,$enddate)
    +$activity = new GanttBar(0,'Project','2001-12-21','2002-01-07','[50%]');
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity->SetPattern(BAND_RDIAG,'yellow');
    +$activity->SetFillColor('red');
    + 
    +// Set absolute height
    +$activity->SetHeight(10);
    + 
    +// Specify progress to 60%
    +$activity->progress->Set(0.6);
    +$activity->progress->SetPattern(BAND_HVCROSS,'blue');
    + 
    +// Format the bar for the second activity
    +// ($row,$title,$startdate,$enddate)
    +$activity2 = new GanttBar(1,'Project','2001-12-21','2002-01-02','[30%]');
    + 
    +// Yellow diagonal line pattern on a red background
    +$activity2->SetPattern(BAND_RDIAG,'yellow');
    +$activity2->SetFillColor('red');
    + 
    +// Set absolute height
    +$activity2->SetHeight(10);
    + 
    +// Specify progress to 30%
    +$activity2->progress->Set(0.3);
    +$activity2->progress->SetPattern(BAND_HVCROSS,'blue');
    + 
    +// Finally add the bar to the graph
    +$graph->Add($activity);
    +$graph->Add($activity2);
    + 
    +// Add a vertical line
    +$vline = new GanttVLine('2001-12-24','Phase 1');
    +$vline->SetDayOffset(0.5);
    +//$graph->Add($vline);
    + 
    +// ... and display it
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex30.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex30.html new file mode 100755 index 00000000..014ee753 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttex30.html @@ -0,0 +1,174 @@ +
    ganttex30.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +
    <?php // content="text/plain; charset=utf-8"
    +// Gantt example 30
    +// $Id: ganttex30.php,v 1.4 2003/05/30 20:12:43 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +// Standard calls to create a new graph
    +$graph = new GanttGraph();
    +$graph->SetShadow();
    +$graph->SetBox();
    + 
    +// Titles for chart
    +$graph->title->Set("General conversion plan");
    +$graph->subtitle->Set("(Revision: 2001-11-18)");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// For illustration we enable all headers.
    +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK);
    + 
    +// For the week we choose to show the start date of the week
    +// the default is to show week number (according to ISO 8601)
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    + 
    +// Change the scale font
    +$graph->scale->week->SetFont(FF_FONT0);
    +$graph->scale->year->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    + 
    +// Setup some data for the gantt bars
    +$data = array(
    +        array(0,"Group 1", "2001-10-29","2001-11-27",FF_FONT1,FS_BOLD,8),
    +        array(1,"  Label 2", "2001-11-8","2001-12-14"),
    +        array(2,"  Label 3", "2001-11-01","2001-11-8"),
    +        array(4,"Group 2", "2001-11-07","2001-12-19",FF_FONT1,FS_BOLD,8),
    +        array(5,"  Label 4", "2001-11-8","2001-12-19"),
    +        array(6,"  Label 5", "2001-11-01","2001-11-8")
    +        );
    + 
    +for($i=0; $i<count($data); ++$i) {
    +        $bar = new GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3],"[50%]",0.5);
    +        if( count($data[$i])>4 )
    +                $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
    + 
    +        // If you like each bar can have a shadow
    +        // $bar->SetShadow(true,"darkgray");
    + 
    +        // For illustration lets make each bar be red with yellow diagonal stripes
    +        $bar->SetPattern(BAND_RDIAG,"yellow");
    +        $bar->SetFillColor("red");
    + 
    +        // To indicate progress each bar can have a smaller bar within
    +        // For illustrative purpose just set the progress to 50% for each bar
    +        $bar->progress->Set(0.5);
    + 
    +        // Each bar may also have optional left and right plot marks
    +        // As illustration lets put a filled circle with a number at the end
    +        // of each bar
    +        $bar->rightMark->SetType(MARK_FILLEDCIRCLE);
    +        $bar->rightMark->SetFillColor("red");
    +        $bar->rightMark->SetColor("red");
    +        $bar->rightMark->SetWidth(10);
    + 
    +        // Title for the mark
    +        $bar->rightMark->title->Set("".$i+1);
    +        $bar->rightMark->title->SetColor("white");
    +        $bar->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +        $bar->rightMark->Show();
    + 
    +        // ... and add the bar to the gantt chart
    +        $graph->Add($bar);
    +}
    + 
    +// Create a milestone mark
    +$ms = new MileStone(7,"M5","2001-12-10","10/12");
    +$ms->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->Add($ms);
    + 
    +// Create a vertical line to emphasize the milestone
    +$vl = new GanttVLine("2001-12-10 13:00","Phase 1","darkred");
    +$vl->SetDayOffset(0.5); // Center the line in the day
    +$graph->Add($vl);
    + 
    +// Output the graph
    +$graph->Stroke();
    + 
    +// EOF
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantthourex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantthourex1.html new file mode 100755 index 00000000..8eb435e2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantthourex1.html @@ -0,0 +1,98 @@ +
    gantthourex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +
    <?php // content="text/plain; charset=utf-8"
    +// Gantt hour example
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    +$graph->SetMarginColor('blue:1.7');
    +$graph->SetColor('white');
    + 
    +$graph->SetBackgroundGradient('navy','white',GRAD_HOR,BGRAD_MARGIN);
    +$graph->scale->hour->SetBackgroundColor('lightyellow:1.5');
    +$graph->scale->hour->SetFont(FF_FONT1);
    +$graph->scale->day->SetBackgroundColor('lightyellow:1.5');
    +$graph->scale->day->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$graph->title->Set("Example of hours in scale");
    +$graph->title->SetColor('white');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    + 
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HHOUR);
    + 
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    +$graph->scale->week->SetFont(FF_FONT1);
    +$graph->scale->hour->SetIntervall(4);
    + 
    +$graph->scale->hour->SetStyle(HOURSTYLE_HM24);
    +$graph->scale->day->SetStyle(DAYSTYLE_SHORTDAYDATE3);
    + 
    +$data = array(
    +    array(0,"  Label 1", "2001-01-26 04:00","2001-01-26 14:00"),
    +    array(1,"  Label 2", "2001-01-26 10:00","2001-01-26 18:00"),
    +    array(2,"  Label 3", "2001-01-26","2001-01-27 10:00")
    +);
    + 
    + 
    +for($i=0; $i<count($data); ++$i) {
    +    $bar = new GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3],"[5%]",10);
    +    if( count($data[$i])>4 )
    +        $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
    +    $bar->SetPattern(BAND_RDIAG,"yellow");
    +    $bar->SetFillColor("red");
    +    $graph->Add($bar);
    +}
    + 
    +$graph->Stroke();
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantthourminex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantthourminex1.html new file mode 100755 index 00000000..148563f7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantthourminex1.html @@ -0,0 +1,182 @@ +
    gantthourminex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +
    <?php // content="text/plain; charset=utf-8"
    +// Gantt hour + minute example
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +// Some sample Gantt data
    +$data = array(
    +    array(0,array("Group 1","345 days","2004-03-01","2004-05-05"), "2001-11-27 10:00","2001-11-27 14:00",FF_FONT2,FS_NORMAL,0),
    +    array(1,array("  Label one",' 122,5 days',' 2004-03-01',' 2003-05-05','MJ'), "2001-11-27 16:00","2001-11-27 18:00"),
    +    array(2,"  Label two", "2001-11-27","2001-11-27 10:00"),
    +    array(3,"  Label three", "2001-11-27","2001-11-27 08:00")
    +);
    + 
    + 
    +// Basic graph parameters
    +$graph = new GanttGraph();
    +$graph->SetMarginColor('darkgreen@0.8');
    +$graph->SetColor('white');
    + 
    +// We want to display day, hour and minute scales
    +$graph->ShowHeaders(GANTT_HDAY | GANTT_HHOUR | GANTT_HMIN);
    + 
    +// We want to have the following titles in our columns
    +// describing each activity
    +$graph->scale->actinfo->SetColTitles(
    +    array('Act','Duration','Start','Finish','Resp'));//,array(100,70,70,70));
    + 
    +// Uncomment the following line if you don't want the 3D look
    +// in the columns headers
    +//$graph->scale->actinfo->SetStyle(ACTINFO_2D);
    + 
    +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10);
    + 
    +//These are the default values for use in the columns
    +//$graph->scale->actinfo->SetFontColor('black');
    +//$graph->scale->actinfo->SetBackgroundColor('lightgray');
    +//$graph->scale->actinfo->vgrid->SetStyle('solid');
    + 
    +$graph->scale->actinfo->vgrid->SetColor('gray');
    +$graph->scale->actinfo->SetColor('darkgray');
    + 
    +// Setup day format
    +$graph->scale->day->SetBackgroundColor('lightyellow:1.5');
    +$graph->scale->day->SetFont(FF_ARIAL);
    +$graph->scale->day->SetStyle(DAYSTYLE_SHORTDAYDATE1);
    + 
    +// Setup hour format
    +$graph->scale->hour->SetIntervall(1);
    +$graph->scale->hour->SetBackgroundColor('lightyellow:1.5');
    +$graph->scale->hour->SetFont(FF_FONT0);
    +$graph->scale->hour->SetStyle(HOURSTYLE_H24);
    +$graph->scale->hour->grid->SetColor('gray:0.8');
    + 
    +// Setup minute format
    +$graph->scale->minute->SetIntervall(30);
    +$graph->scale->minute->SetBackgroundColor('lightyellow:1.5');
    +$graph->scale->minute->SetFont(FF_FONT0);
    +$graph->scale->minute->SetStyle(MINUTESTYLE_MM);
    +$graph->scale->minute->grid->SetColor('lightgray');
    + 
    +$graph->scale->tableTitle->Set('Phase 1');
    +$graph->scale->tableTitle->SetFont(FF_ARIAL,FS_NORMAL,12);
    +$graph->scale->SetTableTitleBackground('darkgreen@0.6');
    +$graph->scale->tableTitle->Show(true);
    + 
    +$graph->title->Set("Example of hours & mins scale");
    +$graph->title->SetColor('darkgray');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    + 
    + 
    +for($i=0; $i<count($data); ++$i) {
    +    $bar = new GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3]);
    +    if( count($data[$i])>4 )
    +        $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
    +    $bar->SetPattern(BAND_RDIAG,"yellow");
    +    $bar->SetFillColor("gray");
    +    $graph->Add($bar);
    +}
    + 
    + 
    +//$vline = new GanttVLine("2001-11-27");//d=1006858800,
    +$vline = new GanttVLine("2001-11-27 9:00");//d=1006858800,
    +$vline->SetWeight(5);
    +$vline->SetDayOffset(0);
    +$vline->title->Set("27/11 9:00");
    +$vline->title->SetFont(FF_FONT1,FS_BOLD,10);
    +$graph->Add($vline);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantticonex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantticonex1.html new file mode 100755 index 00000000..a7707659 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gantticonex1.html @@ -0,0 +1,150 @@ +
    gantticonex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +
    <?php // content="text/plain; charset=utf-8"
    +// Gantt example
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +// Basic Gantt graph
    +$graph = new GanttGraph();
    +$graph->title->Set("Gantt chart with title columns and icons");
    +$graph->title->SetFont(FF_ARIAL, FS_BOLD,12);
    +$graph->title->SetMargin(10);
    + 
    +// Explicitely set the date range
    +// (Autoscaling will of course also work)
    +$graph->SetDateRange('2001-10-06','2002-4-10');
    + 
    +// 1.5 line spacing to make more room
    +$graph->SetVMarginFactor(1.5);
    + 
    +// Setup some nonstandard colors
    +$graph->SetMarginColor('darkgreen@0.95');
    +$graph->SetBox(true,'yellow:0.6',2);
    +$graph->SetFrame(true,'darkgreen',4);
    +$graph->scale->divider->SetColor('yellow:0.6');
    +$graph->scale->dividerh->SetColor('yellow:0.6');
    + 
    +// Display month and year scale with the gridlines
    +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR);
    +$graph->scale->month->grid->SetColor('gray');
    +$graph->scale->month->grid->Show(true);
    +$graph->scale->year->grid->SetColor('gray');
    +$graph->scale->year->grid->Show(true);
    + 
    +// For the titles we also add a minimum width of 100 pixels for the Task name column
    +$graph->scale->actinfo->SetColTitles(
    +    array('Note','Task','Duration','Start','Finish'),array(30,100));
    +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5');
    +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$graph->scale->actinfo->vgrid->SetStyle('solid');
    +$graph->scale->actinfo->vgrid->SetColor('gray');
    + 
    +// Uncomment this to keep the columns but show no headers
    +//$graph->scale->actinfo->Show(false);
    + 
    +// Setup the icons we want to use
    +$erricon = new IconImage(GICON_FOLDER,0.6);
    +$startconicon = new IconImage(GICON_FOLDEROPEN,0.6);
    +$endconicon = new IconImage(GICON_TEXTIMPORTANT,0.5);
    + 
    +// Store the icons in the first column and use plain text in the others
    +$data = array(
    +    array(0,array($erricon,"Pre-study","102 days","23 Nov '01","1 Mar '02")
    +          , "2001-11-23","2002-03-1",FF_ARIAL,FS_NORMAL,8),
    +    array(1,array($startconicon,"Prototype","21 days","26 Oct '01","16 Nov '01"),
    +          "2001-10-26","2001-11-16",FF_ARIAL,FS_NORMAL,8),
    +    array(2,array($endconicon,"Report","12 days","1 Mar '02","13 Mar '02"),
    +          "2002-03-01","2002-03-13",FF_ARIAL,FS_NORMAL,8)
    +);
    + 
    +// Create the bars and add them to the gantt chart
    +for($i=0; $i<count($data); ++$i) {
    +    $bar = new GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3],"[50%]",10);
    +    if( count($data[$i])>4 )
    +        $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
    +    $bar->SetPattern(BAND_RDIAG,"yellow");
    +    $bar->SetFillColor("gray");
    +    $bar->progress->Set(0.5);
    +    $bar->progress->SetPattern(GANTT_SOLID,"darkgreen");
    +    $bar->title->SetCSIMTarget(array('#1'.$i,'#2'.$i,'#3'.$i,'#4'.$i,'#5'.$i),array('11'.$i,'22'.$i,'33'.$i));
    +    $graph->Add($bar);
    +}
    + 
    +// Output the chart
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttmonthyearex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttmonthyearex2.html new file mode 100755 index 00000000..707e4bc8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttmonthyearex2.html @@ -0,0 +1,128 @@ +
    ganttmonthyearex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +
    <?php // content="text/plain; charset=utf-8"
    +// Gantt example
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    + 
    +$graph->title->Set("Only month & year scale");
    + 
    +// Setup some "very" nonstandard colors
    +$graph->SetMarginColor('lightgreen@0.8');
    +$graph->SetBox(true,'yellow:0.6',2);
    +$graph->SetFrame(true,'darkgreen',4);
    +$graph->scale->divider->SetColor('yellow:0.6');
    +$graph->scale->dividerh->SetColor('yellow:0.6');
    + 
    +// Explicitely set the date range 
    +// (Autoscaling will of course also work)
    +$graph->SetDateRange('2001-10-06','2002-4-10');
    + 
    +// Display month and year scale with the gridlines
    +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR);
    +$graph->scale->month->grid->SetColor('gray');
    +$graph->scale->month->grid->Show(true);
    +$graph->scale->year->grid->SetColor('gray');
    +$graph->scale->year->grid->Show(true);
    + 
    + 
    +// Setup activity info
    + 
    +// For the titles we also add a minimum width of 100 pixels for the Task name column
    +$graph->scale->actinfo->SetColTitles(
    +    array('Name','Duration','Start','Finish'),array(100));
    +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5');
    +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$graph->scale->actinfo->vgrid->SetStyle('solid');
    +$graph->scale->actinfo->vgrid->SetColor('gray');
    + 
    +// Data for our example activities
    +$data = array(
    +    array(0,array("Pre-study","102 days","23 Nov '01","1 Mar '02")
    +          , "2001-11-23","2002-03-1",FF_ARIAL,FS_NORMAL,8),
    +    array(1,array("Prototype","21 days","26 Oct '01","16 Nov '01"),
    +          "2001-10-26","2001-11-16",FF_ARIAL,FS_NORMAL,8),
    +    array(2,array("Report","12 days","1 Mar '02","13 Mar '02"),
    +          "2002-03-01","2002-03-13",FF_ARIAL,FS_NORMAL,8)
    +);
    +    
    +// Create the bars and add them to the gantt chart
    +for($i=0; $i<count($data); ++$i) {
    +    $bar = new GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3],"[50%]",10);
    +    if( count($data[$i])>4 )
    +        $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
    +    $bar->SetPattern(BAND_RDIAG,"yellow");
    +    $bar->SetFillColor("gray");
    +    $bar->progress->Set(0.5);
    +    $bar->progress->SetPattern(GANTT_SOLID,"darkgreen");
    +    $graph->Add($bar);
    +}
    + 
    +// Output the chart
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttmonthyearex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttmonthyearex3.html new file mode 100755 index 00000000..a16d4126 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttmonthyearex3.html @@ -0,0 +1,128 @@ +
    ganttmonthyearex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +
    <?php // content="text/plain; charset=utf-8"
    +// Gantt example
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    + 
    +$graph->title->Set("Only month & year scale");
    + 
    +// Setup some "very" nonstandard colors
    +$graph->SetMarginColor('lightgreen@0.8');
    +$graph->SetBox(true,'yellow:0.6',2);
    +$graph->SetFrame(true,'darkgreen',4);
    +$graph->scale->divider->SetColor('yellow:0.6');
    +$graph->scale->dividerh->SetColor('yellow:0.6');
    + 
    +// Explicitely set the date range 
    +// (Autoscaling will of course also work)
    +$graph->SetDateRange('2001-10-06','2002-4-10');
    + 
    +// Display month and year scale with the gridlines
    +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR);
    +$graph->scale->month->grid->SetColor('gray');
    +$graph->scale->month->grid->Show(true);
    +$graph->scale->year->grid->SetColor('gray');
    +$graph->scale->year->grid->Show(true);
    + 
    + 
    +// Setup activity info
    + 
    +// For the titles we also add a minimum width of 100 pixels for the Task name column
    +$graph->scale->actinfo->SetColTitles(
    +    array('Type','Name','Duration','Start','Finish'),array(40,100));
    +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5');
    +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$graph->scale->actinfo->vgrid->SetStyle('solid');
    +$graph->scale->actinfo->vgrid->SetColor('gray');
    + 
    +// Data for our example activities
    +$data = array(
    +    array(0,array("","Pre-study","102 days","23 Nov '01","1 Mar '02")
    +          , "2001-11-23","2002-03-1",FF_ARIAL,FS_NORMAL,8),
    +    array(1,array("","Prototype","21 days","26 Oct '01","16 Nov '01"),
    +          "2001-10-26","2001-11-16",FF_ARIAL,FS_NORMAL,8),
    +    array(2,array("","Report","12 days","1 Mar '02","13 Mar '02"),
    +          "2002-03-01","2002-03-13",FF_ARIAL,FS_NORMAL,8)
    +);
    +    
    +// Create the bars and add them to the gantt chart
    +for($i=0; $i<count($data); ++$i) {
    +    $bar = new GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3],"[50%]",10);
    +    if( count($data[$i])>4 )
    +        $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
    +    $bar->SetPattern(BAND_RDIAG,"yellow");
    +    $bar->SetFillColor("gray");
    +    $bar->progress->Set(0.5);
    +    $bar->progress->SetPattern(GANTT_SOLID,"darkgreen");
    +    $graph->Add($bar);
    +}
    + 
    +// Output the chart
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttmonthyearex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttmonthyearex4.html new file mode 100755 index 00000000..e371ba3d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttmonthyearex4.html @@ -0,0 +1,138 @@ +
    ganttmonthyearex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +
    <?php // content="text/plain; charset=utf-8"
    +// Gantt example
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +$graph = new GanttGraph();
    + 
    +$graph->title->Set("Adding a spaning title");
    + 
    +// Setup some "very" nonstandard colors
    +$graph->SetMarginColor('lightgreen@0.8');
    +$graph->SetBox(true,'yellow:0.6',2);
    +$graph->SetFrame(true,'darkgreen',4);
    +$graph->scale->divider->SetColor('yellow:0.6');
    +$graph->scale->dividerh->SetColor('yellow:0.6');
    + 
    +// Explicitely set the date range
    +// (Autoscaling will of course also work)
    +$graph->SetDateRange('2001-11-06','2002-1-10');
    + 
    +// Display month and year scale with the gridlines
    +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR | GANTT_HWEEK );
    +$graph->scale->month->grid->SetColor('gray');
    +$graph->scale->month->grid->Show(true);
    +$graph->scale->year->grid->SetColor('gray');
    +$graph->scale->year->grid->Show(true);
    + 
    + 
    +//Setup spanning title
    +$graph->scale->tableTitle->Set( 'Phase 1' );
    +$graph->scale->tableTitle->SetFont( FF_ARIAL , FS_NORMAL , 16 );
    +$graph->scale->SetTableTitleBackground( 'darkgreen@0.6' );
    +$graph->scale->tableTitle->Show( true );
    + 
    +// Setup activity info
    + 
    +// For the titles we also add a minimum width of 100 pixels for the Task name column
    +$graph->scale->actinfo->SetColTitles(array('Name','Duration','Start','Finish'),array(100));
    +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5');
    +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$graph->scale->actinfo->vgrid->SetStyle('solid');
    +$graph->scale->actinfo->vgrid->SetColor('gray');
    + 
    +// Data for our example activities
    +$data = array(
    +    array(0,array("Pre-study","102 days","23 Nov '01","1 Mar '02")
    +          , "2001-11-23","2002-03-1",FF_ARIAL,FS_NORMAL,8),
    +    array(1,array("Prototype","21 days","26 Oct '01","16 Nov '01"),
    +          "2001-10-26","2001-11-16",FF_ARIAL,FS_NORMAL,8),
    +    array(2,array("Report","12 days","1 Mar '02","13 Mar '02"),
    +          "2002-03-01","2002-03-13",FF_ARIAL,FS_NORMAL,8)
    +);
    + 
    +// Create the bars and add them to the gantt chart
    +for($i=0; $i<count($data); ++$i) {
    +    $bar = new GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3],"[50%]",10);
    +    if( count($data[$i])>4 )
    +        $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
    +    $bar->SetPattern(BAND_RDIAG,"yellow");
    +    $bar->SetFillColor("gray");
    +    $bar->progress->Set(0.5);
    +    $bar->progress->SetPattern(GANTT_SOLID,"darkgreen");
    +    $graph->Add($bar);
    +}
    + 
    +// Output the chart
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttsimpleex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttsimpleex1.html new file mode 100755 index 00000000..ec7bdffc --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ganttsimpleex1.html @@ -0,0 +1,58 @@ +
    ganttsimpleex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +
    <?php // content="text/plain; charset=utf-8"
    +// Gantt example
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_gantt.php');
    + 
    +// 
    +// The data for the graphs
    +//
    +$data = array(
    +  array(0,ACTYPE_GROUP,    "Phase 1",        "2001-10-26","2001-11-23",''),
    +  array(1,ACTYPE_NORMAL,   "  Label 2",      "2001-10-26","2001-11-13",'[KJ]'),
    +  array(2,ACTYPE_NORMAL,   "  Label 3",      "2001-11-20","2001-11-22",'[EP]'),
    +  array(3,ACTYPE_MILESTONE,"  Phase 1 Done", "2001-11-23",'M2') );
    + 
    +// Create the basic graph
    +$graph = new GanttGraph();
    +$graph->title->Set("Gantt Graph using CreateSimple()");
    + 
    +// Setup scale
    +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK);
    +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
    + 
    +// Add the specified activities
    +$graph->CreateSimple($data);
    + 
    +// .. and stroke the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/grace_ex0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/grace_ex0.html new file mode 100755 index 00000000..a370b575 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/grace_ex0.html @@ -0,0 +1,116 @@ +
    grace_ex0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// Some data
    +$datay=array(7,19,11,4,20);
    + 
    +// Create the graph and setup the basic parameters 
    +$graph = new Graph(300,200,'auto');    
    +$graph->img->SetMargin(40,30,40,50);
    +$graph->SetScale("textint");
    +$graph->SetFrame(true,'blue',1); 
    +$graph->SetColor('lightblue');
    +$graph->SetMarginColor('lightblue');
    + 
    +// Setup X-axis labels
    +$a = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($a);
    +$graph->xaxis->SetFont(FF_FONT1);
    +$graph->xaxis->SetColor('darkblue','black');
    + 
    +// Setup "hidden" y-axis by given it the same color
    +// as the background (this could also be done by setting the weight
    +// to zero)
    +$graph->yaxis->SetColor('lightblue','darkblue');
    +$graph->ygrid->SetColor('white');
    + 
    +// Setup graph title ands fonts
    +$graph->title->Set('Using grace = 0');
    +$graph->title->SetFont(FF_FONT2,FS_BOLD);
    +$graph->xaxis->SetTitle('Year 2002','center');
    +$graph->xaxis->SetTitleMargin(10);
    +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD);
    + 
    +// Add some grace to the top so that the scale doesn't
    +// end exactly at the max value. 
    +$graph->yaxis->scale->SetGrace(0);
    + 
    +                              
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor('darkblue');
    +$bplot->SetColor('darkblue');
    +$bplot->SetWidth(0.5);
    +$bplot->SetShadow('darkgray');
    + 
    +// Setup the values that are displayed on top of each bar
    +// Must use TTF fonts if we want text at an arbitrary angle
    +$bplot->value->Show();
    +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$bplot->value->SetFormat('$%d');
    +$bplot->value->SetColor('darkred');
    +$bplot->value->SetAngle(45);
    +$graph->Add($bplot);
    + 
    +// Finally stroke the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/grace_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/grace_ex1.html new file mode 100755 index 00000000..69a00671 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/grace_ex1.html @@ -0,0 +1,116 @@ +
    grace_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// Some data
    +$datay=array(7,19,11,4,20);
    + 
    +// Create the graph and setup the basic parameters 
    +$graph = new Graph(300,200,'auto');    
    +$graph->img->SetMargin(40,30,40,50);
    +$graph->SetScale("textint");
    +$graph->SetFrame(true,'blue',1); 
    +$graph->SetColor('lightblue');
    +$graph->SetMarginColor('lightblue');
    + 
    +// Setup X-axis labels
    +$a = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($a);
    +$graph->xaxis->SetFont(FF_FONT1);
    +$graph->xaxis->SetColor('darkblue','black');
    + 
    +// Setup "hidden" y-axis by given it the same color
    +// as the background (this could also be done by setting the weight
    +// to zero)
    +$graph->yaxis->SetColor('lightblue','darkblue');
    +$graph->ygrid->SetColor('white');
    + 
    +// Setup graph title ands fonts
    +$graph->title->Set('Using grace = 10%');
    +$graph->title->SetFont(FF_FONT2,FS_BOLD);
    +$graph->xaxis->SetTitle('Year 2002','center');
    +$graph->xaxis->SetTitleMargin(10);
    +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD);
    + 
    +// Add some grace to the top so that the scale doesn't
    +// end exactly at the max value. 
    +$graph->yaxis->scale->SetGrace(10);
    + 
    +                              
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor('darkblue');
    +$bplot->SetColor('darkblue');
    +$bplot->SetWidth(0.5);
    +$bplot->SetShadow('darkgray');
    + 
    +// Setup the values that are displayed on top of each bar
    +// Must use TTF fonts if we want text at an arbitrary angle
    +$bplot->value->Show();
    +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$bplot->value->SetFormat('$%d');
    +$bplot->value->SetColor('darkred');
    +$bplot->value->SetAngle(45);
    +$graph->Add($bplot);
    + 
    +// Finally stroke the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/grace_ex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/grace_ex2.html new file mode 100755 index 00000000..e606c5c5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/grace_ex2.html @@ -0,0 +1,116 @@ +
    grace_ex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// Some data
    +$datay=array(7,19,11,4,20);
    + 
    +// Create the graph and setup the basic parameters 
    +$graph = new Graph(300,200,'auto');    
    +$graph->img->SetMargin(40,30,40,50);
    +$graph->SetScale("textint");
    +$graph->SetFrame(true,'blue',1); 
    +$graph->SetColor('lightblue');
    +$graph->SetMarginColor('lightblue');
    + 
    +// Setup X-axis labels
    +$a = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($a);
    +$graph->xaxis->SetFont(FF_FONT1);
    +$graph->xaxis->SetColor('darkblue','black');
    + 
    +// Setup "hidden" y-axis by given it the same color
    +// as the background (this could also be done by setting the weight
    +// to zero)
    +$graph->yaxis->SetColor('lightblue','darkblue');
    +$graph->ygrid->SetColor('white');
    + 
    +// Setup graph title ands fonts
    +$graph->title->Set('Using grace = 50%');
    +$graph->title->SetFont(FF_FONT2,FS_BOLD);
    +$graph->xaxis->SetTitle('Year 2002','center');
    +$graph->xaxis->SetTitleMargin(10);
    +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD);
    + 
    +// Add some grace to the top so that the scale doesn't
    +// end exactly at the max value. 
    +$graph->yaxis->scale->SetGrace(50);
    + 
    +                              
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor('darkblue');
    +$bplot->SetColor('darkblue');
    +$bplot->SetWidth(0.5);
    +$bplot->SetShadow('darkgray');
    + 
    +// Setup the values that are displayed on top of each bar
    +// Must use TTF fonts if we want text at an arbitrary angle
    +$bplot->value->Show();
    +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$bplot->value->SetFormat('$%d');
    +$bplot->value->SetColor('darkred');
    +$bplot->value->SetAngle(45);
    +$graph->Add($bplot);
    + 
    +// Finally stroke the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/grace_ex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/grace_ex3.html new file mode 100755 index 00000000..0e908775 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/grace_ex3.html @@ -0,0 +1,116 @@ +
    grace_ex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// Some data
    +$datay=array(7,19,11,4,20);
    + 
    +// Create the graph and setup the basic parameters 
    +$graph = new Graph(300,200,'auto');    
    +$graph->img->SetMargin(40,30,40,50);
    +$graph->SetScale("textint");
    +$graph->SetFrame(true,'blue',1); 
    +$graph->SetColor('lightblue');
    +$graph->SetMarginColor('lightblue');
    + 
    +// Setup X-axis labels
    +$a = $gDateLocale->GetShortMonth();
    +$graph->xaxis->SetTickLabels($a);
    +$graph->xaxis->SetFont(FF_FONT1);
    +$graph->xaxis->SetColor('darkblue','black');
    + 
    +// Setup "hidden" y-axis by given it the same color
    +// as the background (this could also be done by setting the weight
    +// to zero)
    +$graph->yaxis->SetColor('lightblue','darkblue');
    +$graph->ygrid->SetColor('white');
    + 
    +// Setup graph title ands fonts
    +$graph->title->Set('Using grace = 100%');
    +$graph->title->SetFont(FF_FONT2,FS_BOLD);
    +$graph->xaxis->SetTitle('Year 2002','center');
    +$graph->xaxis->SetTitleMargin(10);
    +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD);
    + 
    +// Add some grace to the top so that the scale doesn't
    +// end exactly at the max value. 
    +$graph->yaxis->scale->SetGrace(100);
    + 
    +                              
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor('darkblue');
    +$bplot->SetColor('darkblue');
    +$bplot->SetWidth(0.5);
    +$bplot->SetShadow('darkgray');
    + 
    +// Setup the values that are displayed on top of each bar
    +// Must use TTF fonts if we want text at an arbitrary angle
    +$bplot->value->Show();
    +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$bplot->value->SetFormat('$%d');
    +$bplot->value->SetColor('darkred');
    +$bplot->value->SetAngle(45);
    +$graph->Add($bplot);
    + 
    +// Finally stroke the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/gradbkgex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gradbkgex1.html new file mode 100755 index 00000000..3fbfad56 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gradbkgex1.html @@ -0,0 +1,128 @@ +
    gradbkgex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$datay1 = array(4,26,12,18,8,22);
    +$datay2 = array(12,9,42,8,20,19);
    + 
    +// Setup the graph
    +$graph = new Graph(300,200);
    +$graph->SetMarginColor('white');
    +$graph->SetScale("textlin",0,50);
    +$graph->SetMargin(30,50,30,30);
    + 
    +// We must have the frame enabled to get the gradient
    +// However, we don't want the frame line so we set it to
    +// white color which makes it invisible.
    +$graph->SetFrame(true,'white');
    + 
    +// Setup a background gradient image
    +$graph->SetBackgroundGradient('blue','navy:0.5',GRAD_HOR,BGRAD_PLOT);
    + 
    +// Setup the tab title
    +$graph->tabtitle->Set(' 3rd Division ' );
    +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13);
    + 
    +// Setup x,Y grid
    +$graph->xgrid->Show();
    +$graph->xgrid->SetColor('gray@0.5');
    +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());
    +$graph->ygrid->SetColor('gray@0.5');
    + 
    +// Setup color for axis and labels on axis
    +$graph->xaxis->SetColor('orange','black');
    +$graph->yaxis->SetColor('orange','black');
    + 
    +// Ticks on the outsid
    +$graph->xaxis->SetTickSide(SIDE_DOWN);
    +$graph->yaxis->SetTickSide(SIDE_LEFT);
    + 
    +// Setup the legend box colors and font
    +$graph->legend->SetColor('white','navy');
    +$graph->legend->SetFillColor('navy@0.25');
    +$graph->legend->SetFont(FF_ARIAL,FS_BOLD,8);
    +$graph->legend->SetShadow('darkgray@0.4',3);
    +$graph->legend->SetPos(0.05,0.05,'right','top');
    + 
    +// Create the first line
    +$p1 = new LinePlot($datay1);
    +$p1->SetColor("red");
    +$p1->SetWeight(2);
    +$p1->SetLegend('2002');
    +$graph->Add($p1);
    + 
    +// Create the second line
    +$p2 = new LinePlot($datay2);
    +$p2->SetColor("lightyellow");
    +$p2->SetLegend('2001');
    +$p2->SetWeight(2);
    +$graph->Add($p2);
    + 
    +// Output line
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/gradlinefillex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gradlinefillex1.html new file mode 100755 index 00000000..7ff3aaec --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gradlinefillex1.html @@ -0,0 +1,54 @@ +
    gradlinefillex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$datay = array(20,15,33,5,17,35,22);
    + 
    +// Setup the graph
    +$graph = new Graph(400,200);
    +$graph->SetMargin(40,40,20,30);    
    +$graph->SetScale("intlin");
    +$graph->SetMarginColor('darkgreen@0.8');
    + 
    +$graph->title->Set('Gradient filled line plot');
    +$graph->yscale->SetAutoMin(0);
    + 
    +// Create the line
    +$p1 = new LinePlot($datay);
    +$p1->SetColor("blue");
    +$p1->SetWeight(0);
    +$p1->SetFillGradient('red','yellow');
    + 
    +$graph->Add($p1);
    + 
    +// Output line
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/gradlinefillex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gradlinefillex2.html new file mode 100755 index 00000000..71eac081 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gradlinefillex2.html @@ -0,0 +1,56 @@ +
    gradlinefillex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$datay = array(20,10,35,5,17,35,22);
    + 
    +// Setup the graph
    +$graph = new Graph(400,200);
    +$graph->SetMargin(40,40,20,30);    
    +$graph->SetScale("intlin");
    +$graph->SetBox();
    +$graph->SetMarginColor('darkgreen@0.8');
    + 
    +// Setup a background gradient image
    +$graph->SetBackgroundGradient('darkred','yellow',GRAD_HOR,BGRAD_PLOT);
    + 
    +$graph->title->Set('Gradient filled line plot ex2');
    +$graph->yscale->SetAutoMin(0);
    + 
    +// Create the line
    +$p1 = new LinePlot($datay);
    +$p1->SetFillGradient('white','darkgreen');
    +$graph->Add($p1);
    + 
    +// Output line
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/gradlinefillex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gradlinefillex3.html new file mode 100755 index 00000000..cb65d278 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gradlinefillex3.html @@ -0,0 +1,56 @@ +
    gradlinefillex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$datay = array(20,10,35,5,17,35,22);
    + 
    +// Setup the graph
    +$graph = new Graph(400,200);
    +$graph->SetMargin(40,40,20,30);    
    +$graph->SetScale("intlin");
    +$graph->SetBox();
    +$graph->SetMarginColor('darkgreen@0.8');
    + 
    +// Setup a background gradient image
    +$graph->SetBackgroundGradient('darkred','yellow',GRAD_HOR,BGRAD_PLOT);
    + 
    +$graph->title->Set('Gradient filled line plot ex3');
    +$graph->yscale->SetAutoMin(0);
    + 
    +// Create the line
    +$p1 = new LinePlot($datay);
    +$p1->SetFillGradient('white','darkgreen',4);
    +$graph->Add($p1);
    + 
    +// Output line
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/green_example.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/green_example.html new file mode 100755 index 00000000..afac0016 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/green_example.html @@ -0,0 +1,116 @@ +
    green_example.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$theme = isset($_GET['theme']) ? $_GET['theme'] : null;
    + 
    +$data = array (
    +  0 => array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ),
    +  1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ),
    +  2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ),
    +  3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ),
    +  4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ),
    +  5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ),
    +  6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ),
    +  7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ),
    +  8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ),
    +);
    + 
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(400,300);    
    + 
    +$graph->SetScale("textlin");
    +if ($theme) {
    +  $graph->SetTheme(new $theme());
    +}
    +$theme_class = new GreenTheme;
    +$graph->SetTheme($theme_class);
    + 
    +$plot = array();
    +// Create the bar plots
    +for ($i = 0; $i < 4; $i++) {
    +  $plot[$i] = new BarPlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.($i+1));
    +}
    +//$acc1 = new AccBarPlot(array($plot[0], $plot[1]));
    +//$acc1->value->Show();
    +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] ));
    + 
    +for ($i = 4; $i < 8; $i++) {
    +  $plot[$i] = new LinePlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.$i);
    +  $plot[$i]->value->Show();
    +}
    + 
    +$graph->Add($gbplot);
    +$graph->Add($plot[4]);
    + 
    +$title = "GreenTheme Example";
    +$title = mb_convert_encoding($title,'UTF-8');
    +$graph->title->Set($title);
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/gridstylesex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gridstylesex1.html new file mode 100755 index 00000000..b6da354b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/gridstylesex1.html @@ -0,0 +1 @@ +001: Cannot read souce file: /root/jpgraph/trunk/src/Examples/gridstylesex1.php diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/groupbarex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/groupbarex1.html new file mode 100755 index 00000000..db5d08ba --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/groupbarex1.html @@ -0,0 +1,86 @@ +
    groupbarex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id: groupbarex1.php,v 1.2 2002/07/11 23:27:28 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay1=array(35,160,0,0,0,0);
    +$datay2=array(35,190,190,190,190,190);
    +$datay3=array(20,70,70,140,230,260);
    + 
    +$graph = new Graph(450,200,'auto');    
    +$graph->SetScale("textlin");
    +$graph->SetShadow();
    +$graph->img->SetMargin(40,30,40,40);
    +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());
    + 
    +$graph->xaxis->title->Set('Year 2002');
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$graph->title->Set('Group bar plot');
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$bplot1 = new BarPlot($datay1);
    +$bplot2 = new BarPlot($datay2);
    +$bplot3 = new BarPlot($datay3);
    + 
    +$bplot1->SetFillColor("orange");
    +$bplot2->SetFillColor("brown");
    +$bplot3->SetFillColor("darkgreen");
    + 
    +$bplot1->SetShadow();
    +$bplot2->SetShadow();
    +$bplot3->SetShadow();
    + 
    +$bplot1->SetShadow();
    +$bplot2->SetShadow();
    +$bplot3->SetShadow();
    + 
    +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3));
    +$gbarplot->SetWidth(0.6);
    +$graph->Add($gbarplot);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/horizbarex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/horizbarex1.html new file mode 100755 index 00000000..5149f8a4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/horizbarex1.html @@ -0,0 +1,126 @@ +
    horizbarex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(2,3,5,8,12,6,3);
    +$datax=array('Jan','Feb','Mar','Apr','May','Jun','Jul');
    + 
    +// Size of graph
    +$width=400;
    +$height=500;
    + 
    +// Set the basic parameters of the graph
    +$graph = new Graph($width,$height,'auto');
    +$graph->SetScale('textlin');
    + 
    +// Rotate graph 90 degrees and set margin
    +$graph->Set90AndMargin(50,20,50,30);
    + 
    +// Nice shadow
    +$graph->SetShadow();
    + 
    +// Setup title
    +$graph->title->Set('Horizontal bar graph ex 1');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    + 
    +// Setup X-axis
    +$graph->xaxis->SetTickLabels($datax);
    +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,12);
    + 
    +// Some extra margin looks nicer
    +$graph->xaxis->SetLabelMargin(10);
    + 
    +// Label align for X-axis
    +$graph->xaxis->SetLabelAlign('right','center');
    + 
    +// Add some grace to y-axis so the bars doesn't go
    +// all the way to the end of the plot area
    +$graph->yaxis->scale->SetGrace(20);
    + 
    +// We don't want to display Y-axis
    +$graph->yaxis->Hide();
    + 
    +// Now create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor('orange');
    +$bplot->SetShadow();
    + 
    +//You can change the width of the bars if you like
    +//$bplot->SetWidth(0.5);
    + 
    +// We want to display the value of each bar at the top
    +$bplot->value->Show();
    +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,12);
    +$bplot->value->SetAlign('left','center');
    +$bplot->value->SetColor('black','darkred');
    +$bplot->value->SetFormat('%.1f mkr');
    + 
    +// Add the bar to the graph
    +$graph->Add($bplot);
    + 
    +// .. and stroke the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/horizbarex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/horizbarex4.html new file mode 100755 index 00000000..07abb867 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/horizbarex4.html @@ -0,0 +1,96 @@ +
    horizbarex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id: horizbarex4.php,v 1.4 2002/11/17 23:59:27 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(1992,1993,1995,1996,1997,1998,2001);
    + 
    +// Size of graph
    +$width=400;
    +$height=500;
    + 
    +// Set the basic parameters of the graph
    +$graph = new Graph($width,$height);
    +$graph->SetScale('textlin');
    + 
    +$top = 60;
    +$bottom = 30;
    +$left = 80;
    +$right = 30;
    +$graph->Set90AndMargin($left,$right,$top,$bottom);
    + 
    +// Nice shadow
    +$graph->SetShadow();
    + 
    +// Setup labels
    +$lbl = array("Andrew\nTait","Thomas\nAnderssen","Kevin\nSpacey","Nick\nDavidsson",
    +"David\nLindquist","Jason\nTait","Lorin\nPersson");
    +$graph->xaxis->SetTickLabels($lbl);
    + 
    +// Label align for X-axis
    +$graph->xaxis->SetLabelAlign('right','center','right');
    + 
    +// Label align for Y-axis
    +$graph->yaxis->SetLabelAlign('center','bottom');
    + 
    +// Titles
    +$graph->title->Set('Number of incidents');
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor('orange');
    +$bplot->SetWidth(0.5);
    +$bplot->SetYMin(1990);
    + 
    +$graph->Add($bplot);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/horizbarex6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/horizbarex6.html new file mode 100755 index 00000000..beb50cea --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/horizbarex6.html @@ -0,0 +1,166 @@ +
    horizbarex6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(2,3,5,8,12,6,3);
    +$datax=array("320x240","640x480","600x800","1024x768","1280x1024(16)","1280x1024(32)",
    +         "1600x1200(32)");
    + 
    +// Size of graph
    +$width=300; 
    +$height=400;
    + 
    +// Set the basic parameters of the graph 
    +$graph = new Graph($width,$height,'auto');
    +$graph->SetScale("textlin");
    + 
    +// No frame around the image
    +$graph->SetFrame(false);
    + 
    +// Rotate graph 90 degrees and set margin
    +$graph->Set90AndMargin(100,20,50,30);
    + 
    +// Set white margin color
    +$graph->SetMarginColor('white');
    + 
    +// Use a box around the plot area
    +$graph->SetBox();
    + 
    +// Use a gradient to fill the plot area
    +$graph->SetBackgroundGradient('white','lightblue',GRAD_HOR,BGRAD_PLOT);
    + 
    +// Setup title
    +$graph->title->Set("Graphic card performance");
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,11);
    +$graph->subtitle->Set("(Non optimized)");
    + 
    +// Setup X-axis
    +$graph->xaxis->SetTickLabels($datax);
    +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,8);
    + 
    +// Some extra margin looks nicer
    +$graph->xaxis->SetLabelMargin(10);
    + 
    +// Label align for X-axis
    +$graph->xaxis->SetLabelAlign('right','center');
    + 
    +// Add some grace to y-axis so the bars doesn't go
    +// all the way to the end of the plot area
    +$graph->yaxis->scale->SetGrace(20);
    + 
    +// We don't want to display Y-axis
    +$graph->yaxis->Hide();
    + 
    +// Now create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetShadow();
    + 
    +//You can change the width of the bars if you like
    +//$bplot->SetWidth(0.5);
    + 
    +// Set gradient fill for bars
    +$bplot->SetFillGradient('darkred','yellow',GRAD_HOR);
    + 
    +// We want to display the value of each bar at the top
    +$bplot->value->Show();
    +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,10);
    +//$bplot->value->SetAlign('left','center');
    +$bplot->value->SetColor("white");
    +$bplot->value->SetFormat('%.1f');
    +$bplot->SetValuePos('max');
    + 
    +// Add the bar to the graph
    +$graph->Add($bplot);
    + 
    +// Add some explanation text
    +$txt = new Text('Note: Higher value is better.');
    +$txt->SetPos(190,399,'center','bottom');
    +$txt->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$graph->Add($txt);
    + 
    +// .. and stroke the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/imgmarkerex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/imgmarkerex1.html new file mode 100755 index 00000000..de5fd52e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/imgmarkerex1.html @@ -0,0 +1,100 @@ +
    imgmarkerex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +$datay1 = array(4,26,15,44);
    + 
    +// Setup the graph
    +$graph = new Graph(300,200);
    +$graph->SetMarginColor('white');
    +$graph->SetScale("textlin");
    +$graph->SetFrame(false);
    +$graph->SetMargin(30,5,25,20);
    + 
    +// Setup the tab
    +$graph->tabtitle->Set(' Year 2003 ' );
    +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13);
    +$graph->tabtitle->SetColor('darkred','#E1E1FF');
    + 
    +// Enable X-grid as well
    +$graph->xgrid->Show();
    + 
    +// Use months as X-labels
    +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());
    + 
    +// Create the plot
    +$p1 = new LinePlot($datay1);
    +$p1->SetColor("navy");
    + 
    +// Use an image of favourite car as marker
    +$p1->mark->SetType(MARK_IMG,'saab_95.jpg',0.5);
    + 
    +// Displayes value on top of marker image
    +$p1->value->SetFormat('%d mil');
    +$p1->value->Show();
    +$p1->value->SetColor('darkred');
    +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10);
    +// Increase the margin so that the value is printed avove tje
    +// img marker
    +$p1->value->SetMargin(14);
    + 
    +// Incent the X-scale so the first and last point doesn't
    +// fall on the edges
    +$p1->SetCenter();
    + 
    +$graph->Add($p1);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/impulsex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/impulsex1.html new file mode 100755 index 00000000..3a4b49b2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/impulsex1.html @@ -0,0 +1,46 @@ +
    impulsex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +$datay = array(20,22,12,13,17,20,16,19,30,31,40,43);
    + 
    +$graph = new Graph(300,200);
    +$graph->SetScale("textlin");
    + 
    +$graph->SetShadow();
    +$graph->img->SetMargin(40,40,40,40);        
    + 
    +$graph->title->Set("Simple mpuls plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$sp1 = new ScatterPlot($datay);
    +$sp1->mark->SetType(MARK_SQUARE);
    +$sp1->SetImpuls();
    + 
    +$graph->Add($sp1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/impulsex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/impulsex3.html new file mode 100755 index 00000000..ba0fe66b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/impulsex3.html @@ -0,0 +1,106 @@ +
    impulsex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +$numpoints=50;
    +$k=0.05;
    + 
    +// Create some data points
    +for($i=0; $i<$numpoints; ++$i) {
    +    $datay[$i]=exp(-$k*$i)*cos(2*M_PI/10*$i);
    +}
    + 
    +// A format callbakc function
    +function mycallback($l) {
    +    return sprintf("%02.2f",$l);
    +}
    + 
    +// Setup the basic parameters for the graph
    +$graph = new Graph(400,200);
    +$graph->SetScale("intlin");
    +$graph->SetShadow();
    +$graph->SetBox();
    + 
    +$graph->title->Set("Impuls Example 3");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Set format callback for labels
    +$graph->yaxis->SetLabelFormatCallback("mycallback");
    + 
    +// Set X-axis at the minimum value of Y-axis (default will be at 0)
    +$graph->xaxis->SetPos("min");    // "min" will position the x-axis at the minimum value of the Y-axis
    + 
    +// Extend the margin for the labels on the Y-axis and reverse the direction
    +// of the ticks on the Y-axis
    +$graph->yaxis->SetLabelMargin(12);
    +$graph->xaxis->SetLabelMargin(6);
    +$graph->yaxis->SetTickSide(SIDE_LEFT);
    +$graph->xaxis->SetTickSide(SIDE_DOWN);
    + 
    +// Create a new impuls type scatter plot
    +$sp1 = new ScatterPlot($datay);
    +$sp1->mark->SetType(MARK_SQUARE);
    +$sp1->mark->SetFillColor("red");
    +$sp1->SetImpuls();
    +$sp1->SetColor("blue");
    +$sp1->SetWeight(1);
    +$sp1->mark->SetWidth(3);
    + 
    +$graph->Add($sp1);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/impulsex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/impulsex4.html new file mode 100755 index 00000000..9de5a0b5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/impulsex4.html @@ -0,0 +1,152 @@ +
    impulsex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_plotline.php');
    + 
    +$numpoints=50;
    +$k=0.05;
    + 
    +// Create some data points
    +for($i=-$numpoints+1; $i<0; ++$i) {
    +    $datay[$i+$numpoints-1]=exp($k*$i)*cos(2*M_PI/10*$i)*14;
    +    $datayenv[$i+$numpoints-1]=exp($k*$i)*14;
    +    $datax[$i+$numpoints-1]=$i;
    +}
    + 
    +for($i=0; $i<$numpoints; ++$i) {
    +    $datay[$i+$numpoints-1]=exp(-$k*$i)*cos(2*M_PI/10*$i)*14;
    +    $datayenv[$i+$numpoints-1]=exp(-$k*$i)*14;
    +    $datax[$i+$numpoints-1]=$i;
    +}
    + 
    +// Setup the basic parameters for the graph
    +$graph = new Graph(500,250);
    +$graph->SetScale("intlin");
    + 
    +$graph->SetShadow();
    +$graph->SetBox();
    +$graph->title->Set("Impuls Example 4");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Set some other color then the boring default
    +$graph->SetColor("lightyellow");
    +$graph->SetMarginColor("khaki");
    + 
    +// Set legend box specification
    +$graph->legend->SetFillColor("white");
    +$graph->legend->SetLineWeight(2);
    + 
    +// Set X-axis at the minimum value of Y-axis (default will be at 0)
    +$graph->xaxis->SetPos("min");    // "min" will position the x-axis at the minimum value of the Y-axis
    + 
    +// Extend the margin for the labels on the Y-axis and reverse the direction
    +// of the ticks on the Y-axis
    +$graph->yaxis->SetLabelMargin(12);
    +$graph->xaxis->SetLabelMargin(6);
    +$graph->yaxis->SetTickSide(SIDE_LEFT);
    +$graph->xaxis->SetTickSide(SIDE_DOWN);
    + 
    +// Add mark graph with static lines
    +$line = new PlotLine(HORIZONTAL,0,"black",2);
    +$graph->AddLine($line);
    + 
    +// Create a new impuls type scatter plot
    +$sp1 = new ScatterPlot($datay,$datax);
    +$sp1->mark->SetType(MARK_SQUARE);
    +$sp1->mark->SetFillColor("red");
    +$sp1->mark->SetWidth(3);
    + 
    +$sp1->SetImpuls();
    +$sp1->SetColor("blue");
    +$sp1->SetWeight(1);
    +$sp1->SetLegend("Non-causal signal");
    + 
    +$graph->Add($sp1);
    + 
    +// Create the envelope plot
    +$ep1 = new LinePlot($datayenv,$datax);
    +$ep1->SetStyle("dotted");
    +$ep1->SetLegend("Positive envelope");
    + 
    +$graph->Add($ep1);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/interpolation-growth-log.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/interpolation-growth-log.html new file mode 100755 index 00000000..b0c08067 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/interpolation-growth-log.html @@ -0,0 +1,80 @@ +
    interpolation-growth-log.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_log.php');
    + 
    +// Matrix size rxr
    +$r = 10;
    + 
    +// Max Interpolation factor
    +$f = 5;
    + 
    +for( $i=1; $i <= $f; ++$i ) {
    +    $xdata[] = $i;
    +    $ydata[] =  pow( $r*pow(2,($i-1)) - ( pow(2,$i) - 1 ),2);
    +}
    + 
    +$graph = new Graph(400,240);
    +$graph->SetScale('intlog');
    +$graph->SetMargin(50,50,20,30);
    +$graph->SetFrame(false);
    +$graph->SetBox(true,'black',2);
    +$graph->SetMarginColor('white');
    +$graph->SetColor('lightyellow@0.7');
    + 
    +$graph->title->Set('Interpolation growth for size 10x10');
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$graph->xaxis->SetTitle('Interpolation factor','center');
    +$graph->xaxis->SetTitleMargin(10);
    + 
    +$graph->SetAxisStyle(AXSTYLE_YBOXIN);
    +$graph->xgrid->Show();
    + 
    +$lp1 = new LinePlot($ydata,$xdata);
    +$lp1->SetColor('darkred');
    +$lp1->SetWeight(3);
    +$graph->Add($lp1);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/interpolation-growth.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/interpolation-growth.html new file mode 100755 index 00000000..f73c787d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/interpolation-growth.html @@ -0,0 +1,80 @@ +
    interpolation-growth.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_log.php');
    + 
    +// Matrix size rxr
    +$r = 10;
    + 
    +// Max Interpolation factor
    +$f = 5;
    + 
    +for( $i=1; $i <= $f; ++$i ) {
    +    $xdata[] = $i;
    +    $ydata[] =  pow( $r*pow(2,($i-1)) - ( pow(2,$i) - 1 ),2);
    +}
    + 
    +$graph = new Graph(400,240);
    +$graph->SetScale('intint');
    +$graph->SetMargin(50,50,20,30);
    +$graph->SetFrame(false);
    +$graph->SetBox(true,'black',2);
    +$graph->SetMarginColor('white');
    +$graph->SetColor('lightyellow@0.7');
    + 
    +$graph->title->Set('Interpolation growth for size 10x10');
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$graph->xaxis->SetTitle('Interpolation factor','center');
    +$graph->xaxis->SetTitleMargin(10);
    + 
    +$graph->SetAxisStyle(AXSTYLE_YBOXIN);
    +$graph->xgrid->Show();
    + 
    +$lp1 = new LinePlot($ydata,$xdata);
    +$lp1->SetColor('darkred');
    +$lp1->SetWeight(3);
    +$graph->Add($lp1);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/inyaxisex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/inyaxisex2.html new file mode 100755 index 00000000..ebadccea --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/inyaxisex2.html @@ -0,0 +1,102 @@ +
    inyaxisex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Callback to negate the argument
    +function _cb_negate($aVal) {
    +    return round(-$aVal);
    +}
    + 
    +// A fake depth curve
    +$ydata = array(0,1,4,5,8,9,10,14,16,16,16,18,20,20,20,22,22.5,22,19,19,15,15,15,15,10,10,10,6,5,5,5,4,4,2,1,0);
    + 
    +// Negate all data
    +$n = count($ydata);
    +for($i=0; $i<$n; ++$i) {
    +    $ydata[$i] = round(-$ydata[$i]);
    +}
    + 
    +// Basic graph setup
    +$graph = new Graph(400,300);
    +$graph->SetScale("linlin");
    +$graph->img->SetMargin(50,50,60,40);    
    +$graph->SetMarginColor('darkblue');
    +$graph->SetColor('darkblue');
    +$graph->SetAxisStyle(AXSTYLE_BOXOUT);
    +$graph->SetBackgroundImage("blueblack400x300grad.png",1);
    +//$graph->SetBackgroundImage("lightbluedarkblue400x300grad.png",1);
    + 
    +$graph->title->Set("Depth curve. Dive #2");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->title->SetColor("white");
    + 
    +$graph->subtitle->Set("(Negated Y-axis)");
    +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL);
    +$graph->subtitle->SetColor("white");
    + 
    +// Setup axis
    +$graph->yaxis->SetLabelFormatCallback("_cb_negate");
    +$graph->xaxis->SetColor("lightblue","white");
    +$graph->yaxis->SetColor("lightblue","white");
    +$graph->ygrid->SetColor("blue");
    + 
    + 
    +$lp1 = new LinePlot($ydata);
    +$lp1->SetColor("yellow");
    +$lp1->SetWeight(2);
    + 
    + 
    +$graph->Add($lp1);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex1.html new file mode 100755 index 00000000..cd377aba --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex1.html @@ -0,0 +1,24 @@ +
    ledex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_GREEN); 
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex10.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex10.html new file mode 100755 index 00000000..cffc6de3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex10.html @@ -0,0 +1,24 @@ +
    ledex10.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_KHAKI);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex11.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex11.html new file mode 100755 index 00000000..4a979db7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex11.html @@ -0,0 +1,24 @@ +
    ledex11.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_OLIVE);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex12.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex12.html new file mode 100755 index 00000000..f9e3f5f8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex12.html @@ -0,0 +1,24 @@ +
    ledex12.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_LIMEGREEN);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex13.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex13.html new file mode 100755 index 00000000..de353b3b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex13.html @@ -0,0 +1,24 @@ +
    ledex13.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_FORESTGREEN);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex14.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex14.html new file mode 100755 index 00000000..b77587a1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex14.html @@ -0,0 +1,24 @@ +
    ledex14.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_TEAL);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex15.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex15.html new file mode 100755 index 00000000..dfa327df --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex15.html @@ -0,0 +1,24 @@ +
    ledex15.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_STEELBLUE);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex16.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex16.html new file mode 100755 index 00000000..42094f73 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex16.html @@ -0,0 +1,24 @@ +
    ledex16.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_NAVY);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex17.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex17.html new file mode 100755 index 00000000..9d3bd949 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex17.html @@ -0,0 +1,24 @@ +
    ledex17.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_INVERTGRAY);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex2.html new file mode 100755 index 00000000..8a2f33aa --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex2.html @@ -0,0 +1,24 @@ +
    ledex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_RED); 
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex3.html new file mode 100755 index 00000000..b65940da --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex3.html @@ -0,0 +1,24 @@ +
    ledex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_YELLOW); 
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex4.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex4.1.html new file mode 100755 index 00000000..29ceb3bb --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex4.1.html @@ -0,0 +1,26 @@ +
    ledex4.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels. Change to 5 and slghtly smaller margin
    +$led = new DigitalLED74(6);
    +$led->SetSupersampling(2);
    +$led->StrokeNumber('123.',LEDC_RED);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex4.2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex4.2.html new file mode 100755 index 00000000..a4a64cb3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex4.2.html @@ -0,0 +1,26 @@ +
    ledex4.2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels. Change to 5 and slghtly smaller margin
    +$led = new DigitalLED74(6);
    +$led->SetSupersampling(4);
    +$led->StrokeNumber('123.',LEDC_RED);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex4.html new file mode 100755 index 00000000..242335be --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex4.html @@ -0,0 +1,26 @@ +
    ledex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels. Change to 5 and slghtly smaller margin
    +$led = new DigitalLED74(6);
    +$led->SetSupersampling(1);
    +$led->StrokeNumber('123.',LEDC_RED);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex5.html new file mode 100755 index 00000000..0d944041 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex5.html @@ -0,0 +1,24 @@ +
    ledex5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_BLUE);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex6.html new file mode 100755 index 00000000..2e88c417 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex6.html @@ -0,0 +1,24 @@ +
    ledex6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_GRAY);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex7.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex7.html new file mode 100755 index 00000000..5a9ccee7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex7.html @@ -0,0 +1,24 @@ +
    ledex7.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_CHOCOLATE);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex8.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex8.html new file mode 100755 index 00000000..f17abd86 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex8.html @@ -0,0 +1,24 @@ +
    ledex8.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_PERU);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex9.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex9.html new file mode 100755 index 00000000..4d0980fc --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ledex9.html @@ -0,0 +1,24 @@ +
    ledex9.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_led.php');
    + 
    +// By default each "LED" circle has a radius of 3 pixels
    +$led = new DigitalLED74();
    +$led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_GOLDENROD);
    + 
    + 
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/linebarcentex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/linebarcentex1.html new file mode 100755 index 00000000..27ca7787 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/linebarcentex1.html @@ -0,0 +1,98 @@ +
    linebarcentex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$l1datay = array(11,9,2,4,3,13,17);
    +$l2datay = array(23,12,5,19,17,10,15);
    + 
    +$datax=$gDateLocale->GetShortMonth();
    + 
    +// Create the graph. 
    +$graph = new Graph(400,200);    
    +$graph->SetScale("textlin");
    +$graph->SetMargin(40,130,20,40);
    +$graph->SetShadow();
    +$graph->xaxis->SetTickLabels($datax);
    + 
    +// Create the linear error plot
    +$l1plot=new LinePlot($l1datay);
    +$l1plot->SetColor("red");
    +$l1plot->SetWeight(2);
    +$l1plot->SetLegend("Prediction");
    + 
    +//Center the line plot in the center of the bars
    +$l1plot->SetBarCenter();
    + 
    + 
    +// Create the bar plot
    +$bplot = new BarPlot($l2datay);
    +$bplot->SetFillColor("orange");
    +$bplot->SetLegend("Result");
    + 
    +// Add the plots to t'he graph
    +$graph->Add($bplot);
    +$graph->Add($l1plot);
    + 
    + 
    +$graph->title->Set("Adding a line plot to a bar graph v1");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/lineiconex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/lineiconex1.html new file mode 100755 index 00000000..bb7a8efb --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/lineiconex1.html @@ -0,0 +1,94 @@ +
    lineiconex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    + 
    +//$datay = array(20,15,23,15,17,35,22);
    +$datay = array(30,25,33,25,27,45,32);
    +$datay2 = array(3,25,10,15,50,5,18);
    +$datay3 = array(10,5,10,15,5,2,1);
    + 
    +// Setup the graph
    +$graph = new Graph(400,250);
    +$graph->SetMargin(40,40,20,30);    
    +$graph->SetScale("textlin");
    + 
    +$graph->title->Set('Adding an icon ("tux") in the background');
    +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
    + 
    +//$graph->SetBackgroundGradient('red','blue');
    + 
    +$graph->xaxis->SetPos('min');
    + 
    +$p1 = new LinePlot($datay);
    +$p1->SetColor("blue");
    +$p1->SetFillGradient('yellow@0.4','red@0.4');
    + 
    +$p2 = new LinePlot($datay2);
    +$p2->SetColor("black");
    +$p2->SetFillGradient('green@0.4','white');
    + 
    +$p3 = new LinePlot($datay3);
    +$p3->SetColor("blue");
    +$p3->SetFillGradient('navy@0.4','white@0.4');
    + 
    +$graph->Add($p1);
    +$graph->Add($p2);
    +$graph->Add($p3);
    + 
    +$icon = new IconPlot('penguin.png',0.2,0.3,1,30);
    +$icon->SetAnchor('center','center');
    +$graph->Add($icon);
    + 
    +// Output line
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/lineiconex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/lineiconex2.html new file mode 100755 index 00000000..72b90262 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/lineiconex2.html @@ -0,0 +1,60 @@ +
    lineiconex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_flags.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    +$datay = array(30,25,33,25,27,45,32);
    + 
    +// Setup the graph
    +$graph = new Graph(400,250);
    +$graph->SetMargin(40,40,20,30);    
    +$graph->SetScale("textlin");
    + 
    +$graph->title->Set('Adding a country flag as a an icon');
    + 
    +$p1 = new LinePlot($datay);
    +$p1->SetColor("blue");
    +$p1->SetFillGradient('yellow@0.4','red@0.4');
    + 
    +$graph->Add($p1);
    + 
    +$icon = new IconPlot();
    +$icon->SetCountryFlag('iceland',50,30,1.5,40,3);
    +$icon->SetAnchor('left','top');
    +$graph->Add($icon);
    + 
    +// Output line
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/lineimagefillex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/lineimagefillex1.html new file mode 100755 index 00000000..1cb85b2f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/lineimagefillex1.html @@ -0,0 +1,78 @@ +
    lineimagefillex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +
    <?php
    +require_once ('../jpgraph.php');
    +require_once ('../jpgraph_line.php');
    + 
    +$datay = array(0,3,5,12,15,18,22,36,37,41);
    + 
    +// Setup the graph
    +$graph = new Graph(320,200);
    +$graph->title->Set('Education growth');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->SetScale('intlin');
    +$graph->SetMarginColor('white');
    +$graph->SetBox();
    +//$graph->img->SetAntialiasing();
    + 
    +$graph->SetGridDepth(DEPTH_FRONT);
    +$graph->ygrid->SetColor('gray@0.7');
    +$graph->SetBackgroundImage('classroom.jpg',BGIMG_FILLPLOT);
    + 
    +// Masking graph
    +$p1 = new LinePlot($datay);
    +$p1->SetFillColor('white');
    +$p1->SetFillFromYMax();
    +$p1->SetWeight(0);
    +$graph->Add($p1);
    + 
    +// Line plot
    +$p2 = new LinePlot($datay);
    +$p2->SetColor('black@0.4');
    +$p2->SetWeight(3);
    +$p2->mark->SetType(MARK_SQUARE);
    +$p2->mark->SetColor('orange@0.5');
    +$p2->mark->SetFillColor('orange@0.3');
    +$graph->Add($p2);
    + 
    +// Output line
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/listfontsex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/listfontsex1.html new file mode 100755 index 00000000..eccd6d5d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/listfontsex1.html @@ -0,0 +1,306 @@ +
    listfontsex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_canvtools.php');
    + 
    +$width = 700;
    +$height = 800;
    +$g = new CanvasGraph($width,$height);
    +$scale = new CanvasScale($g);
    +$scale->Set(0,27,0,85);
    +$g->SetMargin(5,6,5,6);
    +$g->SetColor('white');
    +$g->SetMarginColor("teal");
    +$g->InitFrame();
    + 
    + 
    +$t = new CanvasRectangleText();
    +$t->SetFont(FF_ARIAL,FS_NORMAL,16);
    +$t->SetFillColor('lemonchiffon2');
    +$t->SetFontColor('black');
    +$t->Set("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nTTF Fonts (11pt)",0.5,19.5,26,64.5);
    +$t->Stroke($g->img,$scale);
    + 
    +$t->SetFillColor('lemonchiffon3');
    +$t->Set("\n\n\n\nBitmap Fonts",0.5,5,26,13.5);
    +$t->Stroke($g->img,$scale);
    + 
    + 
    +$t = new CanvasRectangleText();
    +$t->SetFillColor('');
    +$t->SetFontColor('black');
    +$t->SetColor('');
    +$t->SetShadow('');
    + 
    +$t->SetFont(FF_ARIAL,FS_BOLD,18);
    +$t->Set('Normal',1,1,8);
    +$t->Stroke($g->img,$scale);
    + 
    +$t->Set('Italic style',9,1,8);
    +$t->Stroke($g->img,$scale);
    + 
    +$t->Set('Bold style',17.5,1,8);
    +$t->Stroke($g->img,$scale);
    + 
    + 
    +$t->SetFillColor('yellow');
    +$t->SetFontColor('black');
    +$t->SetColor('black');
    +$t->SetShadow('gray');
    + 
    +$r=6;$c=1;$w=7.5;$h=3.5;
    + 
    +$fonts=array(
    +    array("Font 0",FF_FONT0,FS_NORMAL),
    +    array("",FF_FONT0,FS_ITALIC),
    +    array("",FF_FONT0,FS_BOLD),
    + 
    +    array("Font 1",FF_FONT1,FS_NORMAL),
    +    array("",FF_FONT1,FS_ITALIC),
    +    array("Font 1 bold",FF_FONT1,FS_BOLD),
    + 
    +    array("Font 2",FF_FONT2,FS_NORMAL),
    +    array("",FF_FONT2,FS_ITALIC),
    +    array("Font 2 bold",FF_FONT2,FS_BOLD),
    + 
    +    array("Arial",FF_ARIAL,FS_NORMAL),
    +    array("Arial italic",FF_ARIAL,FS_ITALIC),
    +    array("Arial bold",FF_ARIAL,FS_BOLD),
    + 
    +    array("Verdana",FF_VERDANA,FS_NORMAL),
    +    array("Verdana italic",FF_VERDANA,FS_ITALIC),
    +    array("Verdana bold",FF_VERDANA,FS_BOLD),
    + 
    + 
    +    array("Trebuche",FF_TREBUCHE,FS_NORMAL),
    +    array("Trebuche italic",FF_TREBUCHE,FS_ITALIC),
    +    array("Trebuche bold",FF_TREBUCHE,FS_BOLD),
    + 
    +    array("Georgia",FF_GEORGIA,FS_NORMAL),
    +    array("Georgia italic",FF_GEORGIA,FS_ITALIC),
    +    array("Georgia bold",FF_GEORGIA,FS_BOLD),
    + 
    +    array("Comic",FF_COMIC,FS_NORMAL),
    +    array("",FF_COMIC,FS_ITALIC),
    +    array("Comic bold",FF_COMIC,FS_BOLD),
    + 
    +    array("Courier",FF_COURIER,FS_NORMAL),
    +    array("Courier italic",FF_COURIER,FS_ITALIC),
    +    array("Courier bold",FF_COURIER,FS_BOLD),
    + 
    +    array("Times normal",FF_TIMES,FS_NORMAL),
    +    array("Times italic",FF_TIMES,FS_ITALIC),
    +    array("Times bold",FF_TIMES,FS_BOLD),
    + 
    +    array("Vera normal",FF_VERA,FS_NORMAL),
    +    array("Vera italic",FF_VERA,FS_ITALIC),
    +    array("Vera bold",FF_VERA,FS_BOLD),    
    +    
    +    array("Vera mono normal",FF_VERAMONO,FS_NORMAL),
    +    array("Vera mono italic",FF_VERAMONO,FS_ITALIC),
    +    array("Vera mono bold",FF_VERAMONO,FS_BOLD),    
    + 
    +    array("Vera serif normal",FF_VERASERIF,FS_NORMAL),
    +    array("",FF_VERASERIF,FS_ITALIC),
    +    array("Vera serif bold",FF_VERASERIF,FS_BOLD),    
    +            
    +    array("DejaVu sans serif",FF_DV_SANSSERIF,FS_NORMAL),
    +    array("DejaVu sans serif",FF_DV_SANSSERIF,FS_ITALIC),
    +    array("DejaVu sans serif",FF_DV_SANSSERIF,FS_BOLD),
    + 
    +    array("DejaVu serif",FF_DV_SERIF,FS_NORMAL),
    +    array("DejaVu serif",FF_DV_SERIF,FS_ITALIC),
    +    array("DejaVu serif",FF_DV_SERIF,FS_BOLD),
    + 
    +    array("DejaVuMono sans serif",FF_DV_SANSSERIFMONO,FS_NORMAL),
    +    array("DejaVuMono sans serif",FF_DV_SANSSERIFMONO,FS_ITALIC),
    +    array("DejaVuMono sans serif",FF_DV_SANSSERIFMONO,FS_BOLD),
    + 
    +    array("DejaVuCond serif",FF_DV_SERIFCOND,FS_NORMAL),
    +    array("DejaVuCond serif",FF_DV_SERIFCOND,FS_ITALIC),
    +    array("DejaVuCond serif",FF_DV_SERIFCOND,FS_BOLD),
    + 
    +    array("DejaVuCond sans serif",FF_DV_SANSSERIFCOND,FS_NORMAL),
    +    array("DejaVuCond sans serif",FF_DV_SANSSERIFCOND,FS_ITALIC),
    +    array("DejaVuCond sans serif",FF_DV_SANSSERIFCOND,FS_BOLD),
    +    
    +    );
    + 
    + 
    +$n=count($fonts);
    + 
    +for( $i=0; $i < $n; ++$i ) {
    +    
    +    if( $i==9 ) $r += 3;
    + 
    +    if( $fonts[$i][0] ) {
    +    $t->SetTxt($fonts[$i][0]);
    +    $t->SetPos($c,$r,$w,$h);
    +    $t->SetFont($fonts[$i][1],$fonts[$i][2],11);
    +    $t->Stroke($g->img,$scale);
    +    }
    + 
    +    $c += $w+1;
    +    if( $c > 30-$w-2 ) {
    +    $c = 1;
    +    $r += 4;
    +    }
    + 
    +}
    + 
    +$g->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/loglogex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/loglogex1.html new file mode 100755 index 00000000..6d175022 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/loglogex1.html @@ -0,0 +1,118 @@ +
    loglogex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_log.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    + 
    +$ab2  = array( 1.5,  2.0,  2.5,  3.0,  4.0,  5.0,  6.0,  8.0, 10.0,
    +              12.0, 15.0, 20.0, 25.0, 30.0, 40.0, 50.0, 60.0 ,75.0,
    +              100., 125., 150.);
    +$mn2  = array( 0.5,  0.5,  0.5,  0.5,  0.8,  0.8,  0.8,  0.8,  1.0,
    +               1.0,  1.0,  1.0,  1.0,  2.0,  2.0,  2.0,  2.0,  2.0,
    +               5.0,  5.0,  5.0);
    +$rhos = array(30.0, 31.0, 32.0, 34.0, 35.5, 37.5, 38.0, 39.5, 41.5,
    +              43.0, 41.0, 42.0, 42.5, 45.0, 49.0, 53.5, 58.0, 66.5,
    +              75.0, 81.0, 89.0);
    + 
    +// Create the graph.
    +$graph = new Graph(500,300);     
    +$graph->SetScale("loglog");              
    +$graph->SetY2Scale("lin");               
    +$graph->y2axis->SetColor("blue","blue"); 
    + 
    +$graph->img->SetMargin(50,70,40,50);     
    +$graph->title->Set("Geoelektrik");       
    +$graph->xaxis->title->Set("Auslage ab/2 [m]");  
    +$graph->yaxis->title->Set("rho_s [Ohm m]");     
    +$graph->y2axis->title->Set("mn/2 [m]");         
    +$graph->y2axis->title->SetColor("blue");
    +$graph->y2axis->SetTitleMargin(35);
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);       
    +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); 
    +$graph->xgrid->Show(true,true);                  
    +$graph->ygrid->Show(true,true);                  
    + 
    +// Create the linear plot
    + 
    +$lineplot=new LinePlot($rhos,$ab2);       
    +$lineplot->SetWeight(1);
    +$lineplot->mark->SetType(MARK_FILLEDCIRCLE);
    +$lineplot->mark->SetWidth(2);
    + 
    +// Create scatter plot 
    + 
    +$scplot=new ScatterPlot($mn2,$ab2);
    +$scplot->mark->SetType(MARK_FILLEDCIRCLE);
    +$scplot->mark->SetColor("blue");
    +$scplot->mark->SetWidth(2);
    + 
    +// Add plots to the graph
    + 
    +$graph->AddY2($scplot);
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/manscaleex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manscaleex1.html new file mode 100755 index 00000000..0db9aaea --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manscaleex1.html @@ -0,0 +1,40 @@ +
    manscaleex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,17,22,19,5,15);
    + 
    +$graph = new Graph(220,170);
    +$graph->SetScale("textlin",3,35);
    +$graph->yscale->ticks->Set(8,2);
    + 
    +$graph->title->Set('Manual scale, manual ticks');
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$line = new LinePlot($ydata);
    +$graph->Add($line);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/manscaleex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manscaleex2.html new file mode 100755 index 00000000..783e47d8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manscaleex2.html @@ -0,0 +1,38 @@ +
    manscaleex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,17,22,19,5,15);
    + 
    +$graph = new Graph(220,170);
    +$graph->SetScale("textlin",3,35);
    + 
    +$graph->title->Set('Manual scale, exact limits');
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$line = new LinePlot($ydata);
    +$graph->Add($line);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/manscaleex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manscaleex3.html new file mode 100755 index 00000000..4a9bd385 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manscaleex3.html @@ -0,0 +1,42 @@ +
    manscaleex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,17,22,19,5,15);
    + 
    +$graph = new Graph(250,170);
    +$graph->SetScale("textlin",3,35);
    +$graph->SetTickDensity(TICKD_DENSE);
    +$graph->yscale->SetAutoTicks();
    + 
    +$graph->title->Set('Manual scale, auto ticks');
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$line = new LinePlot($ydata);
    +$graph->Add($line);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/manual_textscale_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manual_textscale_ex1.html new file mode 100755 index 00000000..a15c926b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manual_textscale_ex1.html @@ -0,0 +1,76 @@ +
    manual_textscale_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// Some data
    +$databary=array(12,7,16,6,7,14,9,3);
    +$months=$gDateLocale->GetShortMonth();
    + 
    +// New graph with a drop shadow
    +$graph = new Graph(300,200,'auto');
    +$graph->SetShadow();
    + 
    +// Use a "text" X-scale
    +$graph->SetScale("textlin");
    + 
    +// Specify X-labels
    +$graph->xaxis->SetTickLabels($months);
    + 
    +// Set title and subtitle
    +$graph->title->Set("Textscale with specified labels");
    + 
    +// Use built in font
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Create the bar plot
    +$b1 = new BarPlot($databary);
    +$b1->SetLegend("Temperature");
    + 
    +//$b1->SetAbsWidth(6);
    +//$b1->SetShadow();
    + 
    +// The order the plots are added determines who's ontop
    +$graph->Add($b1);
    + 
    +// Finally output the  image
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/manual_textscale_ex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manual_textscale_ex2.html new file mode 100755 index 00000000..5e7d65cd --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manual_textscale_ex2.html @@ -0,0 +1,76 @@ +
    manual_textscale_ex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// Some data
    +for($i=0; $i < 12; ++$i) {
    +    $databary[$i] = rand(1,20);
    +}
    +$months=$gDateLocale->GetShortMonth();
    + 
    +// New graph with a drop shadow
    +$graph = new Graph(300,200);
    +$graph->SetShadow();
    + 
    +// Use a "text" X-scale
    +$graph->SetScale('textlin');
    + 
    +// Specify X-labels
    +$graph->xaxis->SetTickLabels($months);
    +$graph->xaxis->SetTextTickInterval(2,0);
    + 
    +// Set title and subtitle
    +$graph->title->Set('Textscale with tickinterval=2');
    + 
    +// Use built in font
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Create the bar plot
    +$b1 = new BarPlot($databary);
    +$b1->SetLegend('Temperature');
    + 
    +// The order the plots are added determines who's ontop
    +$graph->Add($b1);
    + 
    +// Finally output the  image
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/manual_textscale_ex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manual_textscale_ex3.html new file mode 100755 index 00000000..58e6cad1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manual_textscale_ex3.html @@ -0,0 +1,76 @@ +
    manual_textscale_ex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +// Some data
    +for($i=0; $i < 12; ++$i) {
    +    $databary[$i] = rand(1,20);
    +}
    +$months=$gDateLocale->GetShortMonth();
    + 
    +// New graph with a drop shadow
    +$graph = new Graph(300,200);
    +$graph->SetShadow();
    + 
    +// Use a "text" X-scale
    +$graph->SetScale('textlin');
    + 
    +// Specify X-labels
    +$graph->xaxis->SetTickLabels($months);
    +$graph->xaxis->SetTextLabelInterval(2);
    + 
    +// Set title and subtitle
    +$graph->title->Set('Textscale with tickinterval=2');
    + 
    +// Use built in font
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Create the bar plot
    +$b1 = new BarPlot($databary);
    +$b1->SetLegend('Temperature');
    + 
    +// The order the plots are added determines who's ontop
    +$graph->Add($b1);
    + 
    +// Finally output the  image
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/manual_textscale_ex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manual_textscale_ex4.html new file mode 100755 index 00000000..8f1e7bea --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manual_textscale_ex4.html @@ -0,0 +1,98 @@ +
    manual_textscale_ex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +define('DATAPERMONTH',40);
    + 
    +// Some data
    +$m=$gDateLocale->GetShortMonth();
    +$k=0;
    +for($i=0; $i < 480; ++$i) {
    +    $datay[$i] = rand(1,40);
    +    if( $i % DATAPERMONTH === 0 )
    +        $months[$i] = $m[(int)($i/DATAPERMONTH)];
    +    else
    +        $months[$i] = 'xx';
    +}
    + 
    + 
    +// New graph with a drop shadow
    +$graph = new Graph(400,200);
    +//$graph->SetShadow();
    + 
    +// Use a "text" X-scale
    +$graph->SetScale('textlin');
    + 
    +// Specify X-labels
    +$graph->xaxis->SetTickLabels($months);
    +$graph->xaxis->SetTextTickInterval(DATAPERMONTH,0);
    +$graph->xaxis->SetTextLabelInterval(2);
    + 
    +// Set title and subtitle
    +$graph->title->Set('Textscale with tickinterval=2');
    + 
    +// Use built in font
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$graph->SetBox(true,'red');
    + 
    +// Create the bar plot
    +$lp1 = new LinePlot($datay);
    +$lp1->SetLegend('Temperature');
    + 
    +// The order the plots are added determines who's ontop
    +$graph->Add($lp1);
    + 
    +// Finally output the  image
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex1.html new file mode 100755 index 00000000..706859a0 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex1.html @@ -0,0 +1,142 @@ +
    manualtickex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +
    <?php // content="text/plain; charset=utf-8"
    +//
    +// Basic example on how to use custom tickmark feature to have a label
    +// at the start of each month.
    +//
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_utils.inc.php');
    + 
    +// 
    +// Create some random data for the plot. We use the current time for the
    +// first X-position
    +//
    +$datay = array();
    +$datax = array();
    +$ts = time();
    +$n=15; // Number of data points
    +for($i=0; $i < $n; ++$i ) {
    +    $datax[$i] = $ts+$i*700000; 
    +    $datay[$i] = rand(5,60);
    +}
    + 
    +// Now get labels at the start of each month
    +$dateUtils = new DateScaleUtils();
    +list($tickPositions,$minTickPositions) = $dateUtils->GetTicks($datax);
    + 
    +// We add some grace to the end of the X-axis scale so that the first and last
    +// data point isn't exactly at the very end or beginning of the scale
    +$grace = 400000;
    +$xmin = $datax[0]-$grace;
    +$xmax = $datax[$n-1]+$grace;
    + 
    +//
    +// The code to setup a very basic graph
    +//
    +$graph = new Graph(400,200);
    + 
    +//
    +// We use an integer scale on the X-axis since the positions on the X axis
    +// are assumed to be UNI timestamps
    +$graph->SetScale('intlin',0,0,$xmin,$xmax);
    +$graph->title->Set('Basic example with manual ticks');
    +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
    + 
    +//
    +// Make sure that the X-axis is always at the bottom of the scale
    +// (By default the X-axis is alwys positioned at Y=0 so if the scale
    +// doesn't happen to include 0 the axis will not be shown)
    +$graph->xaxis->SetPos('min');
    + 
    +// Now set the tic positions
    +$graph->xaxis->SetTickPositions($tickPositions,$minTickPositions);
    + 
    +// The labels should be formatted at dates with "Year-month"
    +$graph->xaxis->SetLabelFormatString('My',true);
    + 
    +// Use Ariel font
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    + 
    +// Add a X-grid
    +$graph->xgrid->Show();
    + 
    +// Create the plot line
    +$p1 = new LinePlot($datay,$datax);
    +$p1->SetColor('teal');
    +$graph->Add($p1);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex1a.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex1a.html new file mode 100755 index 00000000..3489ce4e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex1a.html @@ -0,0 +1,142 @@ +
    manualtickex1a.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +
    <?php // content="text/plain; charset=utf-8"
    +//
    +// Basic example on how to use custom tickmark feature to have a label
    +// at the start of each month.
    +//
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_utils.inc.php');
    + 
    +// 
    +// Create some random data for the plot. We use the current time for the
    +// first X-position
    +//
    +$datay = array();
    +$datax = array();
    +$ts = time();
    +$n=15; // Number of data points
    +for($i=0; $i < $n; ++$i ) {
    +    $datax[$i] = $ts+$i*700000; 
    +    $datay[$i] = rand(5,60);
    +}
    + 
    +// Now get labels at the start of each month
    +$dateUtils = new DateScaleUtils();
    +list($tickPositions,$minTickPositions) = $dateUtils->GetTicks($datax);
    + 
    +// We add some grace to the end of the X-axis scale so that the first and last
    +// data point isn't exactly at the very end or beginning of the scale
    +$grace = 400000;
    +$xmin = $datax[0]-$grace;
    +$xmax = $datax[$n-1]+$grace;
    + 
    +//
    +// The code to setup a very basic graph
    +//
    +$graph = new Graph(400,200);
    + 
    +//
    +// We use an integer scale on the X-axis since the positions on the X axis
    +// are assumed to be UNI timestamps
    +$graph->SetScale('intlin',0,0,$xmin,$xmax);
    +$graph->title->Set('Basic example with manual ticks');
    +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
    + 
    +//
    +// Make sure that the X-axis is always at the bottom of the scale
    +// (By default the X-axis is alwys positioned at Y=0 so if the scale
    +// doesn't happen to include 0 the axis will not be shown)
    +$graph->xaxis->SetPos('min');
    + 
    +// Now set the tic positions
    +$graph->xaxis->SetTickPositions($tickPositions,$minTickPositions);
    + 
    +// The labels should be formatted at dates with "Year-month"
    +$graph->xaxis->SetLabelFormatString('My',true);
    + 
    +// Use Ariel font
    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9);
    + 
    +// Add a X-grid
    +$graph->xgrid->Show();
    + 
    +// Create the plot line
    +$p1 = new LinePlot($datay,$datax);
    +$p1->SetColor('teal');
    +$graph->Add($p1);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex2.html new file mode 100755 index 00000000..6e3a1460 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex2.html @@ -0,0 +1,140 @@ +
    manualtickex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +
    <?php // content="text/plain; charset=utf-8"
    +//
    +// Basic example on how to use custom tickmark feature to have a label
    +// at the start of each month.
    +//
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_utils.inc.php');
    + 
    +// 
    +// Create some random data for the plot. We use the current time for the
    +// first X-position
    +//
    +$f = new FuncGenerator('cos($x)+1.5*cos(2*$x)');
    +list($datax,$datay) = $f->E(0,10);
    + 
    +// Now get labels at 1/2 PI intervall
    +$tickPositions = array();
    +$tickLabels = array();
    +$tickPositions[0] = 0;
    +$tickLabels[0] = '0';
    +for($i=1; $i/2*M_PI < 11 ; ++$i ) {
    +    $tickPositions[$i] = $i/2*M_PI;
    +    if( $i % 2 )
    +    $tickLabels[$i] = $i.'/2'.SymChar::Get('pi');
    +    else
    +    $tickLabels[$i] = ($i/2).SymChar::Get('pi');
    +}
    + 
    +$n = count($datax);
    +$xmin = $datax[0];
    +$xmax = $datax[$n-1];
    + 
    +//
    +// The code to setup a very basic graph
    +//
    +$graph = new Graph(400,200);
    + 
    +//
    +// We use an integer scale on the X-axis since the positions on the X axis
    +// are assumed to be UNI timestamps
    +$graph->SetScale('linlin',0,0,$xmin,$xmax);
    +$graph->title->Set('Example with manual tick labels');
    +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
    + 
    +//
    +// Make sure that the X-axis is always at the bottom of the scale
    +// (By default the X-axis is alwys positioned at Y=0 so if the scale
    +// doesn't happen to include 0 the axis will not be shown)
    +$graph->xaxis->SetPos('min');
    + 
    +// Now set the tic positions
    +$graph->xaxis->SetMajTickPositions($tickPositions,$tickLabels);
    + 
    +// Use Times font
    +$graph->xaxis->SetFont(FF_TIMES,FS_NORMAL,10);
    +$graph->yaxis->SetFont(FF_TIMES,FS_NORMAL,10);
    + 
    +// Add a X-grid
    +$graph->xgrid->Show();
    + 
    +// Create the plot line
    +$p1 = new LinePlot($datay,$datax);
    +$p1->SetColor('teal');
    +$graph->Add($p1);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex3.html new file mode 100755 index 00000000..704585c6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex3.html @@ -0,0 +1,178 @@ +
    manualtickex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +
    <?php // content="text/plain; charset=utf-8"
    +//
    +// Basic example on how to use custom tickmark feature to have a label
    +// at the start of each month.
    +//
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_utils.inc.php');
    + 
    +// 
    +// Create some random data for the plot. We use the current time for the
    +// first X-position
    +//
    +$f = new FuncGenerator('cos($x)+1.5*cos(2*$x)');
    +list($datax,$datay) = $f->E(0,10);
    + 
    +// Now get labels at 1/2 PI intervall
    +$tickPositions = array();
    +$tickLabels = array();
    +$tickPositions[0] = 0;
    +$tickLabels[0] = '0';
    +for($i=1; $i/2*M_PI < 11 ; ++$i ) {
    +    $tickPositions[$i] = $i/2*M_PI;
    +    if( $i % 2 )
    +    $tickLabels[$i] = $i.'/2'.SymChar::Get('pi');
    +    else
    +    $tickLabels[$i] = ($i/2).SymChar::Get('pi');
    +}
    + 
    +$n = count($datax);
    +$xmin = $datax[0];
    +$xmax = $datax[$n-1];
    + 
    +//
    +// The code to setup a very basic graph
    +//
    +$graph = new Graph(400,200);
    + 
    +// We use an integer scale on the X-axis since the positions on the X axis
    +// are assumed to be UNI timestamps
    +$graph->SetScale('linlin',0,0,$xmin,$xmax);
    +$graph->title->Set('Example with manual tick labels');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->title->SetColor('white');
    + 
    +// Setup a abackground gradient
    +$graph->SetBackgroundGradient('darkred:0.7', 'black', 2, BGRAD_MARGIN);
    +$graph->SetPlotGradient('black','darkred:0.8', 2);
    + 
    +// Make sure that the X-axis is always at the bottom of the scale
    +// (By default the X-axis is alwys positioned at Y=0 so if the scale
    +// doesn't happen to include 0 the axis will not be shown)
    +$graph->xaxis->SetPos('min');
    + 
    +// Now set the tic positions
    +$graph->xaxis->SetMajTickPositions($tickPositions,$tickLabels);
    + 
    +// Use Times font
    +$graph->xaxis->SetFont(FF_TIMES,FS_NORMAL,11);
    +$graph->yaxis->SetFont(FF_TIMES,FS_NORMAL,9);
    + 
    +// Set colors for axis
    +$graph->xaxis->SetColor('lightgray');
    +$graph->yaxis->SetColor('lightgray');
    + 
    +// Add a X-grid
    +$graph->xgrid->Show();
    + 
    +// Show ticks outwards
    +$graph->xaxis->SetTickSide(SIDE_DOWN);
    +$graph->xaxis->SetLabelMargin(8);
    +$graph->yaxis->SetTickSide(SIDE_LEFT);
    + 
    +// Setup a filled y-grid
    +//$graph->ygrid->SetFill(true,'darkgray:1.55@0.7','darkgray:1.6@0.7');
    +$graph->ygrid->SetStyle('dotted');
    +$graph->xgrid->SetStyle('dashed');
    + 
    +// Create the plot line
    +$p1 = new LinePlot($datay,$datax);
    +$p1->SetWeight(2);
    +$p1->SetColor('orange:0.9');
    +$p1->SetFillColor('white@0.7');
    +$graph->Add($p1);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex4.html new file mode 100755 index 00000000..c275ce82 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/manualtickex4.html @@ -0,0 +1,180 @@ +
    manualtickex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +
    <?php // content="text/plain; charset=utf-8"
    +//
    +// Basic example on how to use custom tickmark feature to have a label
    +// at the start of each month.
    +//
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_utils.inc.php');
    + 
    +// 
    +// Create some random data for the plot. We use the current time for the
    +// first X-position
    +//
    +$f = new FuncGenerator('cos($x)+1.5*cos(2*$x)');
    +list($datax,$datay) = $f->E(0,10);
    + 
    +// Now get labels at 1/2 PI intervall
    +$tickPositions = array();
    +$tickLabels = array();
    +$tickPositions[0] = 0;
    +$tickLabels[0] = '0';
    +for($i=1; $i/2*M_PI < 11 ; ++$i ) {
    +    $tickPositions[$i] = $i/2*M_PI;
    +    if( $i % 2 )
    +    $tickLabels[$i] = $i.'/2'.SymChar::Get('pi');
    +    else
    +    $tickLabels[$i] = ($i/2).SymChar::Get('pi');
    +}
    + 
    +$n = count($datax);
    +$xmin = $datax[0];
    +$xmax = $datax[$n-1];
    + 
    +//
    +// The code to setup a very basic graph
    +//
    +$graph = new Graph(400,200);
    + 
    +// We use an integer scale on the X-axis since the positions on the X axis
    +// are assumed to be UNI timestamps
    +$graph->SetScale('linlin',0,0,$xmin,$xmax);
    +$graph->title->Set('Example with manual tick labels');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->title->SetColor('white');
    + 
    +// Setup a abackground gradient
    +$graph->SetBackgroundGradient('darkred:0.7', 'black', 2, BGRAD_MARGIN);
    +$graph->SetPlotGradient('black','darkred:0.8', 2);
    + 
    +// Make sure that the X-axis is always at the bottom of the scale
    +// (By default the X-axis is alwys positioned at Y=0 so if the scale
    +// doesn't happen to include 0 the axis will not be shown)
    +$graph->xaxis->SetPos('min');
    + 
    +// Now set the tic positions
    +$graph->xaxis->SetMajTickPositions($tickPositions,$tickLabels);
    + 
    +// Use Times font
    +$graph->xaxis->SetFont(FF_TIMES,FS_NORMAL,11);
    +$graph->yaxis->SetFont(FF_TIMES,FS_NORMAL,9);
    + 
    +// Set colors for axis
    +$graph->xaxis->SetColor('lightgray');
    +$graph->yaxis->SetColor('lightgray');
    + 
    +// Add a X-grid
    +$graph->xgrid->Show();
    + 
    +// Show ticks outwards
    +$graph->xaxis->SetTickSide(SIDE_DOWN);
    +$graph->xaxis->SetLabelMargin(8);
    +$graph->yaxis->SetTickSide(SIDE_LEFT);
    + 
    +// Setup a filled y-grid
    +//$graph->ygrid->SetFill(true,'darkgray:1.55@0.7','darkgray:1.6@0.7');
    +$graph->ygrid->SetStyle('dotted');
    +$graph->xgrid->SetStyle('dashed');
    + 
    +// Create the plot line
    +$p1 = new LinePlot($datay,$datax);
    +$p1->SetWeight(2);
    +$p1->SetColor('orange:0.9');
    +$p1->SetFillColor('white@0.7');
    +$p1->SetFillFromYMin();
    +$graph->Add($p1);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/markflagex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/markflagex1.html new file mode 100755 index 00000000..3b595195 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/markflagex1.html @@ -0,0 +1,144 @@ +
    markflagex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +$datay = array(
    +    array(4,26,15,44),
    +    array(20,51,32,20));
    + 
    +// Setup the graph
    +$graph = new Graph(300,200);
    +$graph->SetMarginColor('white');
    +$graph->SetScale("textlin");
    +$graph->SetFrame(false);
    +$graph->SetMargin(30,5,25,20);
    + 
    +// Enable X-grid as well
    +$graph->xgrid->Show();
    + 
    +// Use months as X-labels
    +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());
    + 
    +//------------------------
    +// Create the plots
    +//------------------------
    +$p1 = new LinePlot($datay[0]);
    +$p1->SetColor("navy");
    + 
    +// Use a flag
    +$p1->mark->SetType(MARK_FLAG1,197);
    + 
    +// Displayes value on top of marker image
    +$p1->value->SetFormat('%d mil');
    +$p1->value->Show();
    +$p1->value->SetColor('darkred');
    +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10);
    +// Increase the margin so that the value is printed avove tje
    +// img marker
    +$p1->value->SetMargin(14);
    + 
    +// Incent the X-scale so the first and last point doesn't
    +// fall on the edges
    +$p1->SetCenter();
    + 
    +$graph->Add($p1);
    + 
    +//------------
    +// 2:nd plot
    +//------------
    +$p2 = new LinePlot($datay[1]);
    +$p2->SetColor("navy");
    + 
    +// Use a flag
    +$p2->mark->SetType(MARK_FLAG1,'united states');
    + 
    +// Displayes value on top of marker image
    +$p2->value->SetFormat('%d mil');
    +$p2->value->Show();
    +$p2->value->SetColor('darkred');
    +$p2->value->SetFont(FF_ARIAL,FS_BOLD,10);
    +// Increase the margin so that the value is printed avove tje
    +// img marker
    +$p2->value->SetMargin(14);
    + 
    +// Incent the X-scale so the first and last point doesn't
    +// fall on the edges
    +$p2->SetCenter();
    +$graph->Add($p2);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_csimex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_csimex01.html new file mode 100755 index 00000000..ee181402 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_csimex01.html @@ -0,0 +1,152 @@ +
    matrix_csimex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once('jpgraph/jpgraph.php');
    +require_once('jpgraph/jpgraph_matrix.php');
    + 
    + 
    +$data = array(
    +    array(0,null,2,3,4,5,6,7,8,9,10,8,6,4,2),
    +    array(10,9,8,7,6,5,4,3,2,1,0,8,5,9,2),
    +    array(0,1,2,3,4,5,6,7,8,9,10,2,4,5,7),
    +    array(10,9,8,17,6,5,4,3,2,1,0,8,6,4,2),
    +    array(0,1,2,3,4,4,9,7,8,9,10,3,2,7,2),
    +    array(8,1,2,3,4,8,3,7,8,9,10,5,3,9,1),
    +    array(10,3,5,7,6,5,4,3,12,1,0,6,5,10,2),
    +    array(10,9,8,7,6,5,4,3,2,1,NULL,8,6,4,2),
    +);
    + 
    +$nx = count($data[0]);
    +$ny = count($data);
    + 
    +for( $i=0; $i < $ny; ++$i ) {
    +    for( $j=0; $j < $nx; ++$j ) {
    +        $csimtargets[$i][$j] = '#'.sprintf('%02sd',$i)."-".sprintf('%02sd',$j);
    +    }
    +}
    + 
    + 
    +for($i=0; $i < $nx; ++$i ) {
    +    $collabels[$i] = sprintf('column label: %02d',$i);
    +    $collabeltargets[$i] = '#'.sprintf('collabel: %02d',$i);
    + 
    +}
    +for($i=0; $i < $ny; ++$i ) {
    +    $rowlabels[$i] = sprintf('row label: %02d',$i);
    +    $rowlabeltargets[$i] = '#'.sprintf('rowlabel: %02d',$i);
    +}
    + 
    +// Setup a nasic matrix graph
    +$graph = new MatrixGraph(400,350);
    + 
    +$graph->SetBackgroundGradient('lightsteelblue:0.8','lightsteelblue:0.3');
    +$graph->title->Set('CSIM with matrix');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);
    +$graph->title->SetColor('white');
    + 
    +// Create one matrix plot
    +$mp = new MatrixPlot($data,1);
    +$mp->SetModuleSize(13,15);
    +$mp->SetCenterPos(0.35,0.6);
    +$mp->colormap->SetNullColor('gray');
    + 
    +// Setup column lablels
    +$mp->collabel->Set($collabels);
    +$mp->collabel->SetSide('top');
    +$mp->collabel->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$mp->collabel->SetFontColor('lightgray');
    + 
    +// Setup row lablels
    +$mp->rowlabel->Set($rowlabels);
    +$mp->rowlabel->SetSide('right');
    +$mp->rowlabel->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$mp->rowlabel->SetFontColor('lightgray');
    + 
    +$mp->rowlabel->SetCSIMTargets($rowlabeltargets);
    +$mp->collabel->SetCSIMTargets($collabeltargets);
    + 
    +// Move the legend more to the right
    +$mp->legend->SetMargin(90);
    +$mp->legend->SetColor('white');
    +$mp->legend->SetFont(FF_VERDANA,FS_BOLD,10);
    + 
    +$mp->SetCSIMTargets($csimtargets);
    + 
    +$graph->Add($mp);
    +$graph->StrokeCSIM();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_edgeex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_edgeex01.html new file mode 100755 index 00000000..53ebc217 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_edgeex01.html @@ -0,0 +1,106 @@ +
    matrix_edgeex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once('jpgraph/jpgraph.php');
    +require_once('jpgraph/jpgraph_matrix.php');
    + 
    +$data = array(
    +    array(0,null,2,3,4,5,6,7,8,9,10,8,6,4,2),
    +    array(10,9,8,7,6,5,4,3,2,1,0,8,5,9,2),
    +    array(0,1,2,3,4,5,6,7,8,9,10,2,4,5,7),
    +    array(10,9,8,17,6,5,4,3,2,1,0,8,6,4,2),
    +    array(0,1,2,3,4,4,9,7,8,9,10,3,2,7,2),
    +    array(8,1,2,3,4,8,3,7,8,9,10,5,3,9,1),
    +    array(10,3,5,7,6,5,4,3,12,1,0,6,5,10,2),
    +    array(10,9,8,7,6,5,4,3,2,1,NULL,8,6,4,2),
    +);
    + 
    +for($i=0; $i < count($data[0]); ++$i ) {
    +    $xlabels[$i] = sprintf('xlabel: %02d',$i);
    +}
    +for($i=0; $i < count($data); ++$i ) {
    +    $ylabels[$i] = sprintf('ylabel: %02d',$i);
    +}
    + 
    +// Setup a nasic matrix graph
    +$graph = new MatrixGraph(400,250);
    +$graph->SetMarginColor('white');
    +$graph->title->Set('Adding labels on the edges');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +// Create one matrix plot
    +$mp = new MatrixPlot($data,1);
    +$mp->SetModuleSize(13,15);
    +$mp->SetCenterPos(0.35,0.45);
    +$mp->colormap->SetNullColor('gray');
    + 
    +// Setup column lablels
    +$mp->collabel->Set($xlabels);
    +$mp->collabel->SetSide('bottom');
    +$mp->collabel->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$mp->collabel->SetFontColor('darkgray');
    + 
    +// Setup row lablels
    +$mp->rowlabel->Set($ylabels);
    +$mp->rowlabel->SetSide('right');
    +$mp->rowlabel->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$mp->rowlabel->SetFontColor('darkgray');
    + 
    +// Move the legend more to the right
    +$mp->legend->SetMargin(90);
    + 
    +$graph->Add($mp);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex0.html new file mode 100755 index 00000000..edd6c3f3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex0.html @@ -0,0 +1,56 @@ +
    matrix_ex0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +
    <?php
    +require_once('jpgraph/jpgraph.php');
    +require_once('jpgraph/jpgraph_matrix.php');
    + 
    +// Some (random) matrix
    +$data = array(
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,17,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,4,9,7,8,9,10),
    +    array(8,1,2,3,4,8,3,7,8,9,10),
    +    array(10,3,5,7,6,5,4,3,12,1,0),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +);
    + 
    +// Setup a bsic matrix graph and title
    +$graph = new MatrixGraph(400,300);
    +$graph->title->Set('Basic matrix example');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +// Create a ,atrix plot using all default values
    +$mp = new MatrixPlot($data);
    +$graph->Add($mp);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex03.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex03.html new file mode 100755 index 00000000..133af4ed --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex03.html @@ -0,0 +1,72 @@ +
    matrix_ex03.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_matrix.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    +$data = array(
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,17,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,4,9,7,8,9,10),
    +    array(8,1,2,3,4,8,3,7,8,9,10),
    +    array(10,3,5,7,6,5,4,3,12,1,0),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +);
    + 
    +// Do the meshinterpolation once for the data
    +doMeshInterpolate($data,3);
    +$r=count($data);$c=count($data[0]);
    + 
    +$width=400; $height=400;
    +$graph = new MatrixGraph($width,$height);
    +$graph->title->Set('Adding an icon to the background');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +$mp = new MatrixPlot($data,1);
    +$mp->SetSize(0.6);
    + 
    +$icon = new IconPlot('icon.jpg',$width-1,$height-1,0.8,50);
    +$icon->SetAnchor('right','bottom');
    +$graph->Add($icon);
    + 
    +$graph->Add($mp);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex04.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex04.1.html new file mode 100755 index 00000000..eb4dc198 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex04.1.html @@ -0,0 +1,80 @@ +
    matrix_ex04.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_matrix.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    +$data = array(
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,17,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,4,9,7,8,9,10),
    +    array(8,1,2,3,4,8,3,7,8,9,10),
    +    array(10,3,5,7,6,5,4,3,12,1,0),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +);
    + 
    +// Do the meshinterpolation once for the data
    +doMeshInterpolate($data,4);
    +$r=count($data);$c=count($data[0]);
    + 
    +$width=300; $height=300;
    +$graph = new MatrixGraph($width,$height);
    +$graph->title->Set('Adding a background image');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->subtitle->Set('Alphablending = 0.2');
    + 
    +// Add a stretched background image
    +$graph->SetBackgroundImage('ironrod.jpg',BGIMG_FILLFRAME);
    +$graph->SetBackgroundImageMix(50);
    + 
    +$mp = new MatrixPlot($data,1);
    +$mp->SetSize(0.65);
    +$mp->SetCenterPos(0.5,0.5);
    +$mp->SetLegendLayout(1);
    +$mp->SetAlpha(0.2);
    + 
    +$graph->Add($mp);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex04.2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex04.2.html new file mode 100755 index 00000000..5f2cae1e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex04.2.html @@ -0,0 +1,80 @@ +
    matrix_ex04.2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_matrix.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    +$data = array(
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,17,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,4,9,7,8,9,10),
    +    array(8,1,2,3,4,8,3,7,8,9,10),
    +    array(10,3,5,7,6,5,4,3,12,1,0),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +);
    + 
    +// Do the meshinterpolation once for the data
    +doMeshInterpolate($data,4);
    +$r=count($data);$c=count($data[0]);
    + 
    +$width=300; $height=300;
    +$graph = new MatrixGraph($width,$height);
    +$graph->title->Set('Adding a background image');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->subtitle->Set('Alphablending = 0.7');
    + 
    +// Add a stretched background image
    +$graph->SetBackgroundImage('ironrod.jpg',BGIMG_FILLFRAME);
    +$graph->SetBackgroundImageMix(50);
    + 
    +$mp = new MatrixPlot($data,1);
    +$mp->SetSize(0.65);
    +$mp->SetCenterPos(0.5,0.5);
    +$mp->SetLegendLayout(1);
    +$mp->SetAlpha(0.7);
    + 
    +$graph->Add($mp);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex04.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex04.html new file mode 100755 index 00000000..f02fe35f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex04.html @@ -0,0 +1,76 @@ +
    matrix_ex04.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_matrix.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    +$data = array(
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,17,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,4,9,7,8,9,10),
    +    array(8,1,2,3,4,8,3,7,8,9,10),
    +    array(10,3,5,7,6,5,4,3,12,1,0),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +);
    + 
    +// Do the meshinterpolation once for the data
    +doMeshInterpolate($data,4);
    +$r=count($data);$c=count($data[0]);
    + 
    +$width=400; $height=400;
    +$graph = new MatrixGraph($width,$height);
    +$graph->title->Set('Adding a background image');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +// Add a stretched background image
    +$graph->SetBackgroundImage('ironrod.jpg',BGIMG_FILLFRAME);
    +$graph->SetBackgroundImageMix(50);
    + 
    +$mp = new MatrixPlot($data,1);
    +$mp->SetSize(0.6);
    +$mp->SetCenterPos(0.5,0.5);
    +$mp->SetLegendLayout(1);
    + 
    +$graph->Add($mp);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex05.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex05.html new file mode 100755 index 00000000..f24ebede --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex05.html @@ -0,0 +1,62 @@ +
    matrix_ex05.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_matrix.php');
    + 
    +$data = array(
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,17,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,4,9,7,8,9,10),
    +    array(8,1,2,3,4,8,3,7,8,9,10),
    +    array(10,3,5,7,6,5,4,3,12,1,0),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +);
    + 
    +$width=400; $height=350;
    +$graph = new MatrixGraph($width,$height);
    +$graph->title->Set('Using a circular module type');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +$mp = new MatrixPlot($data,2);
    +$mp->SetSize(0.85);
    +$mp->SetModuleType(1);
    +$mp->SetBackgroundColor('teal:1.8');
    +$mp->SetCenterPos(0.5,0.45);
    +$mp->SetLegendLayout(1);
    + 
    +$graph->Add($mp);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex06.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex06.html new file mode 100755 index 00000000..7467f40c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_ex06.html @@ -0,0 +1,150 @@ +
    matrix_ex06.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once('jpgraph/jpgraph.php');
    +require_once('jpgraph/jpgraph_matrix.php');
    +require_once('jpgraph/jpgraph_plotline.php');
    + 
    + 
    +$data = array(
    +        array(0,null,2,3,4,5,6,7,8,9,10,8,6,4,2),
    +        array(10,9,8,7,6,5,4,3,2,1,0,8,5,9,2),
    +        array(0,1,2,3,4,5,6,7,8,9,10,2,4,5,7),
    +        array(10,9,8,17,6,5,4,3,2,1,0,8,6,4,2),
    +        array(0,1,2,3,4,4,9,7,8,9,10,3,2,7,2),
    +        array(8,1,2,3,4,8,3,7,8,9,10,5,3,9,1),
    +        array(10,3,5,7,6,5,4,3,12,1,0,6,5,10,2),
    +        array(10,9,8,7,6,5,4,3,2,1,NULL,8,6,4,2),
    +);
    + 
    +$nx = count($data[0]);
    +$ny = count($data);
    + 
    + 
    + 
    +for($i=0; $i < $nx; ++$i ) {
    +    $collabels[$i] = sprintf('column label: %02d',$i);
    + 
    +}
    +for($i=0; $i < $ny; ++$i ) {
    +    $rowlabels[$i] = sprintf('row label: %02d',$i);
    + }
    + 
    +// Setup a nasic matrix graph
    +$graph = new MatrixGraph(400,350);
    + 
    +$graph->SetBackgroundGradient('lightsteelblue:0.8','lightsteelblue:0.3');
    +$graph->title->Set('Matrix with lines');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,18);
    +$graph->title->SetColor('white');
    + 
    +// Create two lines to add as markers
    +$l1 = new PlotLine(VERTICAL, 5, 'lightgray:1.5', 4);
    +$l2 = new PlotLine(HORIZONTAL, 3, 'lightgray:1.5', 4);
    + 
    +// Create one matrix plot
    +$mp = new MatrixPlot($data,1);
    +$mp->SetModuleSize(13,15);
    +$mp->SetCenterPos(0.35,0.6);
    +$mp->colormap->SetNullColor('gray');
    + 
    +// Add lines
    +$mp->AddLine($l1);
    +$mp->AddLine($l2);
    +// this could also be done as
    +// $mp->AddLine(array($l1,$l2));
    + 
    +// Setup column lablels
    +$mp->collabel->Set($collabels);
    +$mp->collabel->SetSide('top');
    +$mp->collabel->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$mp->collabel->SetFontColor('lightgray');
    + 
    +// Setup row lablels
    +$mp->rowlabel->Set($rowlabels);
    +$mp->rowlabel->SetSide('right');
    +$mp->rowlabel->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$mp->rowlabel->SetFontColor('lightgray');
    + 
    +// Move the legend more to the right
    +$mp->legend->SetMargin(90);
    +$mp->legend->SetColor('white');
    +$mp->legend->SetFont(FF_VERDANA,FS_BOLD,10);
    + 
    +$graph->Add($mp);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_introex.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_introex.html new file mode 100755 index 00000000..cc3e7f76 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_introex.html @@ -0,0 +1,178 @@ +
    matrix_introex.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_matrix.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    +$data = array(
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,5,6,7,8,9,10),
    +    array(10,9,8,17,6,5,4,3,2,1,0),
    +    array(0,1,2,3,4,4,9,7,8,9,10),
    +    array(8,1,2,3,4,8,3,7,8,9,10),
    +    array(10,3,5,7,6,5,4,3,12,1,0),
    +    array(10,9,8,7,6,5,4,3,2,1,0),
    +);
    +// Interpolate the data a factor of 4 to get some mroe 
    +// data points
    +doMeshInterpolate($data,4);
    + 
    +// Setup a timer
    +$timer = new JpgTimer();
    +$timer->Push();
    + 
    +//--------------------------------------------------------------
    +// Setup a basic matrix graph
    +//--------------------------------------------------------------
    +$width = 740; $height = 500;
    +$graph = new MatrixGraph($width,$height);
    +$graph->SetMargin(1,2,70,1);
    +$graph->SetColor('white');
    +$graph->SetMarginColor('#fafafa');
    +$graph->title->Set('Intro matrix graph');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +// Setup the background image
    +$graph->SetBackgroundImage('fireplace.jpg',BGIMG_FILLPLOT);
    +$graph->SetBackgroundImageMix(50);
    + 
    +// Setup the timer in the right footer
    +$graph->footer->SetTimer($timer);
    +$graph->footer->right->SetColor('white');
    + 
    +//--------------------------------------------------------------
    +// Create the 2 matrix plots
    +//--------------------------------------------------------------
    +$mp = array(); $n = 2;
    +for($i=0; $i < $n; ++$i){
    +    $mp[$i] = new MatrixPlot($data);
    +    $mp[$i]->colormap->SetMap($i);
    +    $mp[$i]->SetSize(300,250);    
    +    $mp[$i]->SetLegendLayout(1);
    +    $mp[$i]->SetAlpha(0.2);
    +    
    +    // Make the legend slightly longer than default
    +    $mp[$i]->legend->SetSize(20,280);
    +}
    +$mp[1]->colormap->SetMap(3);
    + 
    +$hor1 = new LayoutHor(array($mp[0],$mp[1]));
    +$hor1->SetCenterPos(0.5,0.5);
    + 
    +$graph->Add($hor1);
    + 
    +//--------------------------------------------------------------
    +// Add texts to the graph
    +//--------------------------------------------------------------
    +$txts = array( 
    +    array('Temperature gradient',$width/2,80),
    +    array('Heat color map',200,110),
    +    array('High contrast map',560,110));
    + 
    +$n=count($txts);
    +$t=array();
    +for($i=0; $i < $n; ++$i){
    +    $t[$i] = new Text($txts[$i][0],$txts[$i][1],$txts[$i][2]);
    +    $t[$i]->SetFont(FF_ARIAL,FS_BOLD,14);
    +    $t[$i]->SetColor('white');
    +    $t[$i]->SetAlign('center','top');
    +}
    +$graph->Add($t);
    + 
    +//--------------------------------------------------------------
    +// Add Jpgraph logo to top left corner
    +//--------------------------------------------------------------
    +$icon = new IconPlot('jpglogo.jpg',2,2,0.9,50);
    +$graph->Add($icon);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_layout_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_layout_ex1.html new file mode 100755 index 00000000..eba846c5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/matrix_layout_ex1.html @@ -0,0 +1,88 @@ +
    matrix_layout_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_matrix.php');
    + 
    +$data = array(
    +array(0,1,2,3,4,5,6,7,8,9,10),
    +array(10,9,8,7,6,5,4,3,2,1,0),
    +array(0,1,2,3,4,5,6,7,8,9,10),
    +array(10,9,8,17,6,5,4,3,2,1,0),
    +array(0,1,2,3,4,4,9,7,8,9,10),
    +array(8,1,2,3,4,8,3,7,8,9,10),
    +array(10,3,5,7,6,5,4,3,12,1,0),
    +array(10,9,8,7,6,5,4,3,2,1,0),
    +);
    + 
    +doMeshInterpolate($data,4);
    + 
    +$graph = new MatrixGraph(850,580);
    +$graph->title->Set('Matrix layout example');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +$mp = array();
    +$n = 5;
    +for($i=0; $i < $n; ++$i){
    +    $mp[$i] = new MatrixPlot($data);
    +    $mp[$i]->colormap->SetMap($i);
    +    if( $i < 2 )
    +        $mp[$i]->SetSize(0.35);
    +    else
    +        $mp[$i]->SetSize(0.21);    
    +    // We need to make the legend a bit smaller since by 
    +    // defalt has a  ~45% height 
    +    $mp[$i]->legend->SetModuleSize(15,2);
    +}
    + 
    +$hor1 = new LayoutHor(array($mp[0],$mp[1]));
    +$hor2 = new LayoutHor(array($mp[2],$mp[3],$mp[4]));
    +$vert = new LayoutVert(array($hor1,$hor2));
    +$vert->SetCenterPos(0.45,0.5);
    + 
    +$graph->Add($vert);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/mulyaxisex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/mulyaxisex1.html new file mode 100755 index 00000000..cff9ac48 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/mulyaxisex1.html @@ -0,0 +1,92 @@ +
    mulyaxisex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$n = 8;
    +for($i=0; $i < $n; ++$i ) {
    +    $datay[$i] = rand(1,10);
    +    $datay2[$i] = rand(10,55);
    +    $datay3[$i] = rand(200,600);
    +    $datay4[$i] = rand(500,800);
    +}
    + 
    +// Setup the graph
    +$graph = new Graph(450,250);
    +$graph->SetMargin(40,150,40,30);
    +$graph->SetMarginColor('white');
    + 
    +$graph->SetScale('intlin');
    +$graph->title->Set('Using multiple Y-axis');
    +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,14);
    + 
    +$graph->SetYScale(0,'lin');
    +$graph->SetYScale(1,'lin');
    +$graph->SetYScale(2,'lin');
    + 
    +$p1 = new LinePlot($datay);
    +$graph->Add($p1);
    + 
    +$p2 = new LinePlot($datay2);
    +$p2->SetColor('teal');
    +$graph->AddY(0,$p2);
    +$graph->ynaxis[0]->SetColor('teal');
    + 
    +$p3 = new LinePlot($datay3);
    +$p3->SetColor('red');
    +$graph->AddY(1,$p3);
    +$graph->ynaxis[1]->SetColor('red');
    + 
    +$p4 = new LinePlot($datay4);
    +$p4->SetColor('blue');
    +$graph->AddY(2,$p4);
    +$graph->ynaxis[2]->SetColor('blue');
    + 
    +// Output line
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/mulycsim_example_static.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/mulycsim_example_static.html new file mode 100755 index 00000000..e960dffa --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/mulycsim_example_static.html @@ -0,0 +1,150 @@ +
    mulyaxiscsimex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    + 
    +// Setup some dummy targets for the CSIM
    +$n = 5;
    +for($i=0; $i < $n; ++$i ) {
    +    $targ1[$i] = "#$i";
    +    $targ2[$i] = "#$i";
    +    $targ3[$i] = "#$i";
    +    $alts1[$i] = "val=%d";
    +    $alts2[$i] = "val=%d";
    +    $alts3[$i] = "val=%d";
    +}
    + 
    +// Some data for the points
    +$datay1 = array(3,10,4,1,6);
    +$datay2 = array(25,22,18,24,20);
    +$datay3 = array(89,70,92,77,96);
    + 
    +// Create a basic graph with some suitable margins
    +$graph = new Graph(500,250);
    +$graph->SetMargin(60,180,50,40);
    +$graph->SetMarginColor('white');
    +$graph->title->Set("Multi Y-axes with Image Map");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Setup the scales for all axes
    +$graph->SetScale("intlin");
    +$graph->SetYScale(0,'int');
    +$graph->SetYScale(1,'int');
    + 
    +// Standard Y-axis plot
    +$lp1 = new LinePlot($datay1);
    +$lp1->SetLegend('2001');
    +$lp1->mark->SetType(MARK_DIAMOND);
    +$lp1->mark->SetWidth(15);
    +$lp1->mark->SetFillColor('orange');
    +$lp1->SetCSIMTargets($targ1,$alts1);
    +$graph->yaxis->title->Set('Basic Rate');
    +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->yaxis->title->SetColor('black');
    +$graph->Add($lp1);
    + 
    +// First multi Y-axis plot
    +$lp2 = new LinePlot($datay2);
    +$lp2->SetLegend('2002');
    +$lp2->mark->SetType(MARK_DIAMOND);
    +$lp2->mark->SetWidth(15);
    +$lp2->mark->SetFillColor('darkred');
    +$lp2->SetCSIMTargets($targ2,$alts2);
    +$graph->ynaxis[0]->SetColor('darkred');
    +$graph->ynaxis[0]->title->Set('Rate A');
    +$graph->ynaxis[0]->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->ynaxis[0]->title->SetColor('darkred');
    +$graph->AddY(0,$lp2);
    + 
    +// Second multi Y-axis plot
    +$lp3 = new LinePlot($datay3);
    +$lp3->SetLegend('2003');
    +$lp3->mark->SetType(MARK_DIAMOND);
    +$lp3->mark->SetWidth(15);
    +$lp3->mark->SetFillColor('darkgreen');
    +$lp3->SetCSIMTargets($targ3,$alts3);
    +$graph->ynaxis[1]->SetColor('darkgreen');
    +$graph->ynaxis[1]->title->Set('Rate B');
    +$graph->ynaxis[1]->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->ynaxis[1]->title->SetColor('darkgreen');
    +$graph->AddY(1,$lp3);
    + 
    +// Send back the HTML page which will call this script again
    +// to retrieve the image.
    +$graph->StrokeCSIM();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/ocean_example.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ocean_example.html new file mode 100755 index 00000000..7d7e3f82 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/ocean_example.html @@ -0,0 +1,116 @@ +
    ocean_example.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$theme = isset($_GET['theme']) ? $_GET['theme'] : null;
    + 
    +$data = array (
    +  0 => array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ),
    +  1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ),
    +  2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ),
    +  3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ),
    +  4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ),
    +  5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ),
    +  6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ),
    +  7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ),
    +  8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ),
    +);
    + 
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(400,300);    
    + 
    +$graph->SetScale("textlin");
    +if ($theme) {
    +  $graph->SetTheme(new $theme());
    +}
    +$theme_class = new OceanTheme;
    +$graph->SetTheme($theme_class);
    + 
    +$plot = array();
    +// Create the bar plots
    +for ($i = 0; $i < 4; $i++) {
    +  $plot[$i] = new BarPlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.($i+1));
    +}
    +//$acc1 = new AccBarPlot(array($plot[0], $plot[1]));
    +//$acc1->value->Show();
    +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] ));
    + 
    +for ($i = 4; $i < 8; $i++) {
    +  $plot[$i] = new LinePlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.$i);
    +  $plot[$i]->value->Show();
    +}
    + 
    +$graph->Add($gbplot);
    +$graph->Add($plot[4]);
    + 
    +$title = "OceanTheme Example";
    +$title = mb_convert_encoding($title,'UTF-8');
    +$graph->title->Set($title);
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex00.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex00.html new file mode 100755 index 00000000..1c016ab8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex00.html @@ -0,0 +1,42 @@ +
    odotutex00.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,140);
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer();
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(30);
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex01.html new file mode 100755 index 00000000..9030dbef --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex01.html @@ -0,0 +1,42 @@ +
    odotutex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,140);
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer(ODO_FULL);
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(30);
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex02.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex02.html new file mode 100755 index 00000000..dde003f3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex02.html @@ -0,0 +1,60 @@ +
    odotutex02.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,180);
    + 
    +// Setup titles
    +$graph->title->Set("Result for 2002");
    +$graph->title->SetColor("white");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->subtitle->Set("New York Office");
    +$graph->subtitle->SetColor("white");
    +$graph->caption->Set("Figure 1. Branch results.");
    +$graph->caption->SetColor("white");
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer();
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(30);
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex03.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex03.html new file mode 100755 index 00000000..0689652f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex03.html @@ -0,0 +1,60 @@ +
    odotutex03.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,200);
    + 
    +// Setup titles
    +$graph->title->Set("Result for 2002");
    +$graph->title->SetColor("white");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->subtitle->Set("New York Office");
    +$graph->subtitle->SetColor("white");
    +$graph->caption->Set("Figure 1.This is a very, very\nlong text with multiples lines\nthat are added as a caption.");
    +$graph->caption->SetColor("white");
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer();
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(30);
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex04.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex04.html new file mode 100755 index 00000000..ce41e533 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex04.html @@ -0,0 +1,80 @@ +
    odotutex04.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,200);
    + 
    +// Setup titles
    +$graph->title->Set("Result for 2002");
    +$graph->title->SetColor("white");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->subtitle->Set("New York Office");
    +$graph->subtitle->SetColor("white");
    +$graph->caption->Set("Figure 1.This is a very, very\nlong text with multiples lines\nthat are added as a caption.");
    +$graph->caption->SetColor("white");
    + 
    +// Setup colors
    +// Make the border 40% darker than normal "khaki"
    +$graph->SetMarginColor("khaki:0.6");
    +$graph->SetColor("khaki");
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer();
    + 
    +// Setup colors for odometyer plot
    +$odo->SetColor('white');
    +$odo->scale->label->SetColor("darkred");
    +$odo->needle->SetFillColor("yellow");
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(30);
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex06.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex06.html new file mode 100755 index 00000000..0d558250 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex06.html @@ -0,0 +1,86 @@ +
    odotutex06.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(570,220);
    + 
    +$nstyle = array(
    +    NEEDLE_STYLE_SIMPLE, NEEDLE_STYLE_STRAIGHT, NEEDLE_STYLE_ENDARROW,
    +    NEEDLE_STYLE_SMALL_TRIANGLE,NEEDLE_STYLE_MEDIUM_TRIANGLE,
    +    NEEDLE_STYLE_LARGE_TRIANGLE
    +);
    + 
    +$captions = array(
    +    "NEEDLE_STYLE_SIMPLE","NEEDLE_STYLE_STRAIGHT","NEEDLE_STYLE_ENDARROW",
    +    "NEEDLE_STYLE_SMALL_TRIANGLE","NEEDLE_STYLE_MEDIUM_TRIANGLE",
    +    "NEEDLE_STYLE_LARGE_TRIANGLE"
    +);
    + 
    +$odo = array();
    + 
    +for( $i=0; $i < 6; ++$i ) {
    +    $odo[$i] = new Odometer();
    +    $odo[$i]->SetColor("lightyellow");
    +    $odo[$i]->needle->Set(80);
    +    $odo[$i]->needle->SetStyle($nstyle[$i]);
    +    $odo[$i]->caption->Set($captions[$i]);
    +    $odo[$i]->caption->SetFont(FF_FONT1);
    +    $odo[$i]->caption->SetMargin(3);
    +}
    + 
    +// Use the automatic layout engine to positon the plots on the graph
    +$row1 = new LayoutHor( array($odo[0],$odo[1],$odo[2]) );
    +$row2 = new LayoutHor( array($odo[3],$odo[4],$odo[5]) );
    +$col1 = new LayoutVert( array($row1,$row2) );
    + 
    +// Add the odometer to the graph
    +$graph->Add($col1);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex07.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex07.html new file mode 100755 index 00000000..9a526d67 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex07.html @@ -0,0 +1,74 @@ +
    odotutex07.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(570,250);
    + 
    +$odo = array();
    +$astyles = array(
    +    NEEDLE_ARROW_SS,NEEDLE_ARROW_SM,NEEDLE_ARROW_SL,
    +    NEEDLE_ARROW_MS,NEEDLE_ARROW_MM, NEEDLE_ARROW_ML,
    +    NEEDLE_ARROW_LS, NEEDLE_ARROW_LM, NEEDLE_ARROW_LL
    +    );
    +$acaptions = array(
    +    'SS','SM','SL','MS','MM','ML','LS','LM','LL'
    +);
    + 
    +for($i = 0; $i < 9; ++$i ) {
    +    $odo[$i] =     new Odometer();
    +    $odo[$i]->SetColor("lightyellow");
    +    $odo[$i]->needle->Set(75);
    +    $odo[$i]->needle->SetStyle(NEEDLE_STYLE_ENDARROW, $astyles[$i]);
    +    $odo[$i]->caption->SetFont(FF_FONT1,FS_BOLD);
    +    $odo[$i]->caption->Set('Arrow: '.$acaptions[$i]);
    +}
    + 
    +$row1 = new LayoutHor( array($odo[0],$odo[1],$odo[2]) );
    +$row2 = new LayoutHor( array($odo[3],$odo[4],$odo[5]) );
    +$row3 = new LayoutHor( array($odo[6],$odo[7],$odo[8]) );
    +$col1 = new LayoutVert( array($row1,$row2,$row3) );
    + 
    +// Add the odometer to the graph
    +$graph->Add($col1);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex08.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex08.html new file mode 100755 index 00000000..0907d8c6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex08.html @@ -0,0 +1,72 @@ +
    odotutex08.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,140);
    + 
    +// Setup a title
    +$graph->title->Set('An example with drop shadows');
    + 
    +// Add drop shadow for graph
    +$graph->SetShadow();
    + 
    +// Set some nonstandard colors
    +$color = array(205,220,205);
    +$graph->SetMarginColor($color);
    +$graph->SetColor($color);
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer();
    +$odo->SetColor('white');
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(70);
    + 
    +// Add drop shadow for needle
    +$odo->needle->SetShadow();
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex09.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex09.html new file mode 100755 index 00000000..fe9646b5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex09.html @@ -0,0 +1,76 @@ +
    odotutex09.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(600,300);
    + 
    +$odo = array();
    +$astyles = array(
    +    NEEDLE_ARROW_SS,NEEDLE_ARROW_SM,NEEDLE_ARROW_SL,
    +    NEEDLE_ARROW_MS,NEEDLE_ARROW_MM, NEEDLE_ARROW_ML,
    +    NEEDLE_ARROW_LS, NEEDLE_ARROW_LM, NEEDLE_ARROW_LL
    +    );
    +$acaptions = array(
    +    'SS','SM','SL','MS','MM','ML','LS','LM','LL'
    +);
    + 
    +for($i = 0; $i < 9; ++$i ) {
    +    $odo[$i] =     new Odometer();
    +    $odo[$i]->SetColor("lightyellow");
    +    $odo[$i]->needle->Set(75);
    +    $odo[$i]->needle->SetStyle(NEEDLE_STYLE_ENDARROW, $astyles[$i]);
    +    $odo[$i]->caption->SetFont(FF_FONT1);
    +    $odo[$i]->caption->Set($acaptions[$i]);
    +    $odo[$i]->SetMargin(15);
    +}
    + 
    +$row1 = new LayoutHor( array($odo[0],$odo[1],$odo[2]) );
    +$row2 = new LayoutHor( array($odo[3],$odo[4],$odo[5]) );
    +$row3 = new LayoutHor( array($odo[6],$odo[7],$odo[8]) );
    +$col1 = new LayoutVert( array($row1,$row2,$row3) );
    + 
    +// Add the odometer to the graph
    +$graph->Add($col1);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex10.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex10.html new file mode 100755 index 00000000..6b43322a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex10.html @@ -0,0 +1,86 @@ +
    odotutex10.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,150);
    + 
    +$graph->title->Set('Example with scale indicators');
    + 
    +// Add drop shadow for graph
    +$graph->SetShadow();
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer(ODO_HALF);
    + 
    +// Add color indications
    +$odo->AddIndication(0,20,"green:0.7");
    +$odo->AddIndication(20,30,"green:0.9");
    +$odo->AddIndication(30,60,"yellow");
    +$odo->AddIndication(60,80,"orange");
    +$odo->AddIndication(80,100,"red");
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(90);
    + 
    +//---------------------------------------------------------------------
    +// Add drop shadow for needle
    +//---------------------------------------------------------------------
    +$odo->needle->SetShadow();
    + 
    +//---------------------------------------------------------------------
    +// Add the odometer to the graph
    +//---------------------------------------------------------------------
    +$graph->Add($odo);
    + 
    +//---------------------------------------------------------------------
    +// ... and finally stroke and stream the image back to the browser
    +//---------------------------------------------------------------------
    +$graph->Stroke();
    + 
    +// EOF
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex11.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex11.html new file mode 100755 index 00000000..667a4c77 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex11.html @@ -0,0 +1,80 @@ +
    odotutex11.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,150);
    + 
    +$graph->title->Set('Example with scale indicators');
    + 
    +// Add drop shadow for graph
    +$graph->SetShadow();
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer(ODO_HALF);
    + 
    +// Add color indications
    +$odo->AddIndication(0,20,"green:0.7");
    +$odo->AddIndication(20,30,"green:0.9");
    +$odo->AddIndication(30,60,"yellow");
    +$odo->AddIndication(60,80,"orange");
    +$odo->AddIndication(80,100,"red");
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(90);
    + 
    +// Set the size of the non-colored base area to 40% of the radius
    +$odo->SetCenterAreaWidth(0.45);
    + 
    +// Add drop shadow for needle
    +$odo->needle->SetShadow();
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    + 
    +// EOF
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex12.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex12.html new file mode 100755 index 00000000..202cbdfe --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex12.html @@ -0,0 +1,94 @@ +
    odotutex12.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,150);
    + 
    +$graph->title->Set('Example with scale indicators');
    + 
    +// Add drop shadow for graph
    +$graph->SetShadow();
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer(ODO_HALF);
    + 
    +// Add color indications
    +$odo->AddIndication(0,20,"green:0.7");
    +$odo->AddIndication(20,30,"green:0.9");
    +$odo->AddIndication(30,60,"yellow");
    +$odo->AddIndication(60,80,"orange");
    +$odo->AddIndication(80,100,"red");
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(90);
    + 
    +// Set the size of the non-colored base area to 40% of the radius
    +$odo->SetCenterAreaWidth(0.45);
    + 
    +// Add drop shadow for needle
    +$odo->needle->SetShadow();
    + 
    +// Setup the second needle
    +$odo->needle2->Set(44);
    +$odo->needle2->Show();
    +$odo->needle2->SetLength(0.4);
    +$odo->needle2->SetFillColor("navy");
    +$odo->needle2->SetShadow();
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    + 
    +// EOF
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex13.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex13.html new file mode 100755 index 00000000..80baf278 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex13.html @@ -0,0 +1,82 @@ +
    odotutex13.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,150);
    + 
    +$graph->title->Set('Example with scale indicators');
    + 
    +// Add drop shadow for graph
    +$graph->SetShadow();
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer(ODO_HALF);
    + 
    +// Add color indications
    +$odo->AddIndication(0,20,"green:0.7");
    +$odo->AddIndication(20,30,"green:0.9");
    +$odo->AddIndication(30,60,"yellow");
    +$odo->AddIndication(60,80,"orange");
    +$odo->AddIndication(80,100,"red");
    + 
    +$odo->SetCenterAreaWidth(0.45);
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(90);
    + 
    +// Add scale labels
    +$odo->label->Set("mBar");
    +$odo->label->SetFont(FF_FONT2,FS_BOLD);
    + 
    +// Add drop shadow for needle
    +$odo->needle->SetShadow();
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex14.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex14.html new file mode 100755 index 00000000..f2f70221 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex14.html @@ -0,0 +1,70 @@ +
    odotutex14.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,160);
    +$graph->title->Set('Custom scale');
    +$graph->title->SetColor('white');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD);
    + 
    +// Add drop shadow for graph
    +$graph->SetShadow();
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo = new Odometer();
    +$odo->SetColor('lightyellow');
    + 
    +// Setup the scale
    +$odo->scale->Set(100,600);
    +$odo->scale->SetTicks(50,2);
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(280);
    + 
    +// Add drop shadow for needle
    +$odo->needle->SetShadow();
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex15.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex15.html new file mode 100755 index 00000000..28cdf59b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex15.html @@ -0,0 +1,92 @@ +
    odotutex15.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(250,170);
    + 
    +// Setup graph titles
    +$graph->title->Set('Custom formatting');
    +$graph->title->SetColor('white');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD);
    + 
    +// Add drop shadow for graph
    +$graph->SetShadow();
    + 
    +// Now we need to create an odometer to add to the graph.
    +$odo = new Odometer();
    +$odo->SetColor("lightgray:1.9");
    + 
    +// Setup the scale
    +$odo->scale->Set(100,600);
    +$odo->scale->SetTicks(50,2);
    +$odo->scale->SetTickColor('brown');
    +$odo->scale->SetTickLength(0.05);
    +$odo->scale->SetTickWeight(2);
    + 
    +$odo->scale->SetLabelPos(0.75);
    +$odo->scale->label->SetFont(FF_FONT1, FS_BOLD);
    +$odo->scale->label->SetColor('brown');
    +$odo->scale->label->SetFont(FF_ARIAL,FS_NORMAL,10);
    + 
    +// Setup a label with a degree mark
    +$odo->scale->SetLabelFormat('%dC'.SymChar::Get('degree'));
    + 
    +// Set display value for the odometer
    +$odo->needle->Set(280);
    + 
    +// Add drop shadow for needle
    +$odo->needle->SetShadow();
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex16.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex16.1.html new file mode 100755 index 00000000..f8c1208e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex16.1.html @@ -0,0 +1,84 @@ +
    odotutex16.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(350,100);
    + 
    +// Add drop shadow for graph
    +$graph->SetShadow();
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo1 = new Odometer();
    +$odo2 = new Odometer();
    +$odo1->SetColor("lightgray:1.9");
    +$odo2->SetColor("lightgray:1.9");
    + 
    +// Adjust start and end angle for the scale
    +$odo2->scale->SetAngle(110,250);
    + 
    +$odo1->scale->label->SetFont(FF_ARIAL,FS_BOLD,10);
    +$odo2->scale->label->SetFont(FF_ARIAL,FS_BOLD,10);
    +$odo2->AddIndication(-15,0,'lightgray');
    +$odo2->AddIndication(100,115,'lightgray');
    + 
    +// Set display value for the odometer
    +$odo1->needle->Set(70);
    +$odo2->needle->Set(70);
    + 
    +// Add drop shadow for needle
    +$odo1->needle->SetShadow();
    +$odo2->needle->SetShadow();
    + 
    +// Specify the layout for the two odometers
    +$row = new LayoutHor( array($odo1,$odo2) );
    + 
    +// Add the odometer to the graph
    +$graph->Add($row);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex16.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex16.html new file mode 100755 index 00000000..8ff9c10a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex16.html @@ -0,0 +1,80 @@ +
    odotutex16.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph (width=250, height=200 pixels)
    +$graph = new OdoGraph(350,100);
    + 
    +// Add drop shadow for graph
    +$graph->SetShadow();
    + 
    +// Now we need to create an odometer to add to the graph.
    +// By default the scale will be 0 to 100
    +$odo1 = new Odometer();
    +$odo2 = new Odometer();
    +$odo1->SetColor("lightgray:1.9");
    +$odo2->SetColor("lightgray:1.9");
    + 
    +// Adjust start and end angle for the scale
    +$odo2->scale->SetAngle(110,250);
    + 
    +$odo1->scale->label->SetFont(FF_ARIAL,FS_BOLD,10);
    +$odo2->scale->label->SetFont(FF_ARIAL,FS_BOLD,10);
    + 
    +// Set display value for the odometer
    +$odo1->needle->Set(70);
    +$odo2->needle->Set(70);
    + 
    +// Add drop shadow for needle
    +$odo1->needle->SetShadow();
    +$odo2->needle->SetShadow();
    + 
    +// Specify the layout for the two odometers
    +$row = new LayoutHor( array($odo1,$odo2) );
    + 
    +// Add the odometer to the graph
    +$graph->Add($row);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex17.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex17.html new file mode 100755 index 00000000..226c0a85 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex17.html @@ -0,0 +1,92 @@ +
    odotutex17.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph
    +$graph = new OdoGraph(300,320);
    + 
    +// Setup graph titles
    +$graph->title->Set('Manual positioning');
    +$graph->title->SetColor('white');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +// Add drop shadow for graph
    +$graph->SetShadow();
    + 
    +// Now we need to create an odometer to add to the graph.
    +$odo1 = new Odometer();
    +$odo2 = new Odometer();
    +$odo1->SetColor('lightgray:1.9');
    +$odo2->SetColor('lightgray:1.9');
    + 
    +// Set display value for the odometer
    +$odo1->needle->Set(37);
    +$odo2->needle->Set(73);
    + 
    +// Add drop shadow for needle
    +$odo1->needle->SetShadow();
    +$odo2->needle->SetShadow();
    + 
    +// Specify the position for the two odometers
    +$odo1->SetPos(180,110);
    +$odo1->SetSize(100);
    +$odo2->SetPos(110,250);
    +$odo2->SetSize(100);
    + 
    +// Set captions for the odometers
    +$odo1->caption->Set("(x,y) = (180,120)\nradius=100");
    +$odo2->caption->Set("(x,y) = (110,270)\nradius=100");
    + 
    +// Add the odometer to the graph
    +$graph->Add($odo1);
    +$graph->Add($odo2);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex18.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex18.html new file mode 100755 index 00000000..bdd03b4c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex18.html @@ -0,0 +1,74 @@ +
    odotutex18.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    + 
    +// Create a new odometer graph
    +$graph = new OdoGraph(500,180);
    + 
    +$odo = array();
    + 
    +// Now we need to create an odometer to add to the graph.
    +for( $i=0; $i < 5; ++$i ) {
    +    $odo[$i] = new Odometer();
    +    $odo[$i]->SetColor('lightgray:1.9');
    +    $odo[$i]->needle->Set(10+$i*17);
    +    $odo[$i]->needle->SetShadow();
    +    if( $i < 2 )
    +        $fsize = 10;
    +    else
    +        $fsize = 8;
    +    $odo[$i]->scale->label->SetFont(FF_ARIAL,FS_NORMAL,$fsize);
    +    $odo[$i]->AddIndication(92,100,'red');
    +    $odo[$i]->AddIndication(80,92,'orange');
    +    $odo[$i]->AddIndication(60,80,'yellow');
    +}
    + 
    +// Create the layout
    +$row1 = new LayoutHor( array($odo[0],$odo[1]) );
    +$row2 = new LayoutHor( array($odo[2],$odo[3],$odo[4]) );
    +$col1 = new LayoutVert( array($row1,$row2) );
    + 
    +// Add the odometer to the graph
    +$graph->Add($col1);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex19.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex19.html new file mode 100755 index 00000000..b341a9c1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/odotutex19.html @@ -0,0 +1,98 @@ +
    odotutex19.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_odo.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    +// Create a new odometer graph
    +$graph = new OdoGraph(500,180);
    + 
    +$odo = array();
    + 
    +// Now we need to create an odometer to add to the graph.
    +for( $i=0; $i < 5; ++$i ) {
    +    $odo[$i] = new Odometer();
    +    $odo[$i]->SetColor('lightgray:1.9');
    +    $odo[$i]->needle->Set(10+$i*17);
    +    $odo[$i]->needle->SetShadow();
    +    if( $i < 2 )
    +        $fsize = 10;
    +    else
    +        $fsize = 8;
    +    $odo[$i]->scale->label->SetFont(FF_ARIAL,FS_NORMAL,$fsize);
    +    $odo[$i]->AddIndication(92,100,'red');
    +    $odo[$i]->AddIndication(80,92,'orange');
    +    $odo[$i]->AddIndication(60,80,'yellow');
    +}
    + 
    +// Create the layout
    +$row1 = new LayoutHor( array($odo[0],$odo[1]) );
    +$row2 = new LayoutHor( array($odo[2],$odo[3],$odo[4]) );
    +$col1 = new LayoutVert( array($row1,$row2) );
    + 
    +// Add the odometer to the graph
    +$graph->Add($col1);
    + 
    +// Add an icon and text
    +$icon = new IconPlot('jpglogo.jpg',250,10,0.85,30);
    +$icon->SetAnchor('center','top');
    +$graph->Add($icon);
    + 
    +$t = new Text('JpGraph',250,70);
    +$t->SetAlign('center','top');
    +#$t->SetFont(FF_VERA,FS_BOLD,11);
    +$t->SetColor('darkgray');
    +$graph->Add($t);
    + 
    +// ... and finally stroke and stream the image back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/orange_example.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/orange_example.html new file mode 100755 index 00000000..f83798fa --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/orange_example.html @@ -0,0 +1,116 @@ +
    orange_example.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$theme = isset($_GET['theme']) ? $_GET['theme'] : null;
    + 
    +$data = array (
    +  0 => array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ),
    +  1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ),
    +  2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ),
    +  3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ),
    +  4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ),
    +  5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ),
    +  6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ),
    +  7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ),
    +  8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ),
    +);
    + 
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(400,300);    
    + 
    +$graph->SetScale("textlin");
    +if ($theme) {
    +  $graph->SetTheme(new $theme());
    +}
    +$theme_class = new OrangeTheme;
    +$graph->SetTheme($theme_class);
    + 
    +$plot = array();
    +// Create the bar plots
    +for ($i = 0; $i < 4; $i++) {
    +  $plot[$i] = new BarPlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.($i+1));
    +}
    +//$acc1 = new AccBarPlot(array($plot[0], $plot[1]));
    +//$acc1->value->Show();
    +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] ));
    + 
    +for ($i = 4; $i < 8; $i++) {
    +  $plot[$i] = new LinePlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.$i);
    +  $plot[$i]->value->Show();
    +}
    + 
    +$graph->Add($gbplot);
    +$graph->Add($plot[4]);
    + 
    +$title = "OrangeTheme Example";
    +$title = mb_convert_encoding($title,'UTF-8');
    +$graph->title->Set($title);
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/partiallyfilledlineex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/partiallyfilledlineex1.html new file mode 100755 index 00000000..1c80c925 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/partiallyfilledlineex1.html @@ -0,0 +1,88 @@ +
    partiallyfilledlineex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +
    <?php // content="text/plain; charset=utf-8"
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some data
    +$ydata = array(5,10,15,20,15,10,8,7,4,10,5);
    + 
    +// Create the graph
    +$graph= new Graph(400,300);
    +$graph->SetScale("textlin");
    +$graph->SetShadow(true);
    +$graph->SetMarginColor("lightblue");
    + 
    +// Setup format for legend
    +$graph->legend->SetFillColor("antiquewhite");
    +$graph->legend->SetShadow(true);
    + 
    +// Setup title
    +$graph->title->Set("Filled Area Example");
    +$graph->title->SetFont(FF_FONT2,FS_BOLD);
    + 
    +// Setup semi-filled line plot
    +$lineplot = new LinePlot($ydata);
    +$lineplot->SetLegend("Semi-filled\nLineplot");
    + 
    +// Set line color
    +$lineplot->SetColor("black");
    + 
    +// Setup the two areas to be filled
    +$lineplot->AddArea(2,5,LP_AREA_FILLED,"red");
    +$lineplot->AddArea(6,8,LP_AREA_FILLED,"green");
    + 
    +// Display the marks on the lines
    +$lineplot->mark->SetType(MARK_DIAMOND);
    +$lineplot->mark->SetSize(8);
    +$lineplot->mark->Show();
    + 
    +// add plot to the graph
    +$graph->Add($lineplot);
    + 
    +// display graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pastel_example.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pastel_example.html new file mode 100755 index 00000000..8058145c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pastel_example.html @@ -0,0 +1,114 @@ +
    pastel_example.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$theme = isset($_GET['theme']) ? $_GET['theme'] : null;
    +$data = array (
    +  0 => array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ),
    +  1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ),
    +  2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ),
    +  3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ),
    +  4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ),
    +  5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ),
    +  6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ),
    +  7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ),
    +  8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ),
    +);
    + 
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(400,300);    
    + 
    +$graph->SetScale("textlin");
    +if ($theme) {
    +  $graph->SetTheme(new $theme());
    +}
    +$theme_class = new PastelTheme;
    +$graph->SetTheme($theme_class);
    + 
    +$plot = array();
    +// Create the bar plots
    +for ($i = 0; $i < 4; $i++) {
    +  $plot[$i] = new BarPlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.($i+1));
    +}
    +//$acc1 = new AccBarPlot(array($plot[0], $plot[1]));
    +//$acc1->value->Show();
    +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] ));
    + 
    +for ($i = 4; $i < 8; $i++) {
    +  $plot[$i] = new LinePlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.$i);
    +  $plot[$i]->value->Show();
    +}
    + 
    +$graph->Add($gbplot);
    +$graph->Add($plot[4]);
    + 
    +$title = "PastelTheme Example";
    +$title = mb_convert_encoding($title,'UTF-8');
    +$graph->title->Set($title);
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex0.html new file mode 100755 index 00000000..18efe1e5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex0.html @@ -0,0 +1,16 @@ +
    pdf417_ex0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    +// Create a new encoder and backend to generate PNG images
    +$backend = PDF417BackendFactory::Create(BACKEND_IMAGE,new PDF417Barcode());
    +$backend->Stroke($data);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex1.html new file mode 100755 index 00000000..f550d86e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex1.html @@ -0,0 +1,26 @@ +
    pdf417_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    +try {
    +    // Create a new encoder and backend to generate PNG images
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,new PDF417Barcode());
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex1b.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex1b.html new file mode 100755 index 00000000..c35ba062 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex1b.html @@ -0,0 +1,40 @@ +
    pdf417_ex1b.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    + 
    +// Setup some symbolic names for barcode specification
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$errlevel = 2;  // Use error level 2 (minimum recommended)
    + 
    +// Create a new encoder and backend to generate PNG images
    +try {
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,$encoder);
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex2.html new file mode 100755 index 00000000..0454be0b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex2.html @@ -0,0 +1,48 @@ +
    pdf417_ex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    + 
    +// Setup some symbolic names for barcode specification
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$errlevel = 2;  // Use error level 2 (minimum recommended)
    +$modwidth = 2;  // Setup module width (in pixels)
    +$height = 3;    // Height factor
    + 
    +// Create a new encoder and backend to generate PNG images
    +try {
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,$encoder);
    +    $backend->SetModuleWidth($modwidth);
    +    $backend->SetHeight($height);
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex3.html new file mode 100755 index 00000000..1db4ac6c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex3.html @@ -0,0 +1,52 @@ +
    pdf417_ex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    + 
    +// Setup some symbolic names for barcode specification
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$errlevel = 4;  // Use error level 4
    +$modwidth = 2;  // Setup module width (in pixels)
    +$height = 2;    // Height factor (=2)
    +$showtext = false;  // Show human readable string
    + 
    +// Create a new encoder and backend to generate PNG images
    +try {
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,$encoder);
    +    $backend->SetModuleWidth($modwidth);
    +    $backend->SetHeight($height);
    +    $backend->NoText(!$showtext);
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex4.html new file mode 100755 index 00000000..68d4b77b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex4.html @@ -0,0 +1,56 @@ +
    pdf417_ex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    + 
    +// Setup some symbolic names for barcode specification
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$errlevel = 4;  // Use error level 4
    +$modwidth = 2;  // Setup module width (in pixels)
    +$height = 2;    // Height factor (=2)
    +$showtext = true;  // Show human readable string
    + 
    +try {
    +    // Create a new encoder and backend to generate PNG images
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,$encoder);
    + 
    +    $backend->SetModuleWidth($modwidth);
    +    $backend->SetHeight($height);
    +    $backend->NoText(!$showtext);
    +    $backend->SetColor('black','yellow');
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex5.html new file mode 100755 index 00000000..1f235894 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex5.html @@ -0,0 +1,58 @@ +
    pdf417_ex5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data = 'PDF-417';
    + 
    +// Setup some symbolic names for barcode specification
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$errlevel = 4;  // Use error level 4
    +$modwidth = 0.8;// Setup module width (in PS points)
    +$height = 3;    // Height factor (=2)
    +$showtext = true;  // Show human readable string
    + 
    +try {
    +    // Create a new encoder and backend to generate PNG images
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $backend = PDF417BackendFactory::Create(BACKEND_PS,$encoder);
    + 
    +    $backend->SetModuleWidth($modwidth);
    +    $backend->SetHeight($height);
    +    $backend->NoText(!$showtext);
    +    $backend->SetColor('black','yellow');
    +    $output = $backend->Stroke($data);
    +    echo nl2br(htmlspecialchars($output));
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex6.html new file mode 100755 index 00000000..1cfba609 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pdf417_ex6.html @@ -0,0 +1,70 @@ +
    pdf417_ex6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/pdf417/jpgraph_pdf417.php');
    + 
    +$data1 = '12345';
    +$data2 = 'Abcdef';
    +$data3 = '6789';
    + 
    +// Manually specify several encodation schema
    +$data = array(
    +    array(USE_NC,$data1),
    +    array(USE_TC,$data2),
    +    array(USE_NC,$data3));
    + 
    +//$data = "12345Abcdef6789";
    + 
    +// Setup some symbolic names for barcode specification
    + 
    +$columns = 8;   // Use 8 data (payload) columns
    +$modwidth = 2;  // Use 2 pixel module width
    +$errlevel = 2;  // Use error level 2
    +$showtext = true;  // Show human readable string
    + 
    +try {
    +    // Create a new encoder and backend to generate PNG images
    +    $encoder = new PDF417Barcode($columns,$errlevel);
    +    $backend = PDF417BackendFactory::Create(BACKEND_IMAGE,$encoder);
    + 
    +    $backend->SetModuleWidth($modwidth);
    +    $backend->NoText(!$showtext);
    +    $backend->Stroke($data);
    +}
    +catch(JpGraphException $e) {
    +    echo 'PDF417 Error: '.$e->GetMessage();
    +}
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/piebkgex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/piebkgex1.html new file mode 100755 index 00000000..654c4aec --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/piebkgex1.html @@ -0,0 +1,184 @@ +
    piebkgex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    +require_once ('jpgraph/jpgraph_pie3d.php');
    + 
    +// Some data
    +$data = array(
    +    array(80,18,15,17),
    +    array(35,28,6,34),
    +    array(10,28,10,5),
    +    array(22,22,10,17));
    + 
    +$piepos = array(0.2,0.4,0.65,0.28,0.25,0.75,0.8,0.75);
    +$titles = array('USA','Sweden','South America','Australia');
    + 
    +$n = count($piepos)/2;
    + 
    +// A new graph
    +$graph = new PieGraph(550,400,'auto');
    + 
    +// Specify margins since we put the image in the plot area
    +$graph->SetMargin(1,1,40,1);
    +$graph->SetMarginColor('navy');
    +$graph->SetShadow(false);
    + 
    +// Setup background
    +$graph->SetBackgroundImage('worldmap1.jpg',BGIMG_FILLPLOT);
    + 
    +// Setup title
    +$graph->title->Set("Pie plots with background image");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,20);
    +$graph->title->SetColor('white');
    + 
    +$p = array();
    +// Create the plots
    +for( $i=0; $i < $n; ++$i ) {
    +    $d = "data$i";
    +    $p[] = new PiePlot3D($data[$i]);
    +}
    + 
    +// Position the four pies
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->SetCenter($piepos[2*$i],$piepos[2*$i+1]);
    +}
    + 
    +// Set the titles
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->title->Set($titles[$i]);
    +    $p[$i]->title->SetColor('white');
    +    $p[$i]->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +}
    + 
    +// Label font and color setup
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->value->SetFont(FF_ARIAL,FS_BOLD);
    +    $p[$i]->value->SetColor('white');
    +}
    + 
    +// Show the percetages for each slice
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->value->Show();
    +}
    + 
    +// Label format
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->value->SetFormat("%01.1f%%");
    +}
    + 
    +// Size of pie in fraction of the width of the graph
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->SetSize(0.15);
    +}
    + 
    +// Format the border around each slice
    + 
    + 
    +for( $i=0; $i < $n; ++$i ) {
    +    $p[$i]->SetEdge(false);
    +    $p[$i]->ExplodeSlice(1);
    +}
    + 
    +// Use one legend for the whole graph
    +$p[0]->SetLegends(array("May","June","July","Aug"));
    +$graph->legend->Pos(0.05,0.35);
    +$graph->legend->SetShadow(false);
    + 
    +for( $i=0; $i < $n; ++$i ) {
    +    $graph->Add($p[$i]);
    +}
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/piecex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/piecex1.html new file mode 100755 index 00000000..9ac4b35a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/piecex1.html @@ -0,0 +1,88 @@ +
    piecex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id
    +// Example of pie with center circle
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +// Some data
    +$data = array(50,28,25,27,31,20);
    + 
    +// A new pie graph
    +$graph = new PieGraph(300,300,'auto');
    + 
    +// Setup title
    +$graph->title->Set("Pie plot with center circle");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->title->SetMargin(8); // Add a little bit more margin from the top
    + 
    +// Create the pie plot
    +$p1 = new PiePlotC($data);
    + 
    +// Set size of pie
    +$p1->SetSize(0.32);
    + 
    +// Label font and color setup
    +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10);
    +$p1->value->SetColor('black');
    + 
    +// Setup the title on the center circle
    +$p1->midtitle->Set("Test mid\nRow 1\nRow 2");
    +$p1->midtitle->SetFont(FF_ARIAL,FS_NORMAL,10);
    + 
    +// Set color for mid circle
    +$p1->SetMidColor('yellow');
    + 
    +// Use percentage values in the legends values (This is also the default)
    +$p1->SetLabelType(PIE_VALUE_PER);
    + 
    +// Add plot to pie graph
    +$graph->Add($p1);
    + 
    +// .. and send the image on it's marry way to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/piecex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/piecex2.html new file mode 100755 index 00000000..37a8e725 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/piecex2.html @@ -0,0 +1,136 @@ +
    piecex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +
    <?php // content="text/plain; charset=utf-8"
    +// $Id: piecex2.php,v 1.3.2.1 2003/08/19 20:40:12 aditus Exp $
    +// Example of pie with center circle
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +// Some data
    +$data = array(50,28,25,27,31,20);
    + 
    +// A new pie graph
    +$graph = new PieGraph(400,400,'auto');
    + 
    +// Don't display the border
    +$graph->SetFrame(false);
    + 
    +// Uncomment this line to add a drop shadow to the border
    +// $graph->SetShadow();
    + 
    +// Setup title
    +$graph->title->Set("PiePlotC");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,18);
    +$graph->title->SetMargin(8); // Add a little bit more margin from the top
    + 
    +// Create the pie plot
    +$p1 = new PiePlotC($data);
    + 
    +// Set size of pie
    +$p1->SetSize(0.35);
    + 
    +// Label font and color setup
    +$p1->value->SetFont(FF_ARIAL,FS_BOLD,12);
    +$p1->value->SetColor('white');
    + 
    +$p1->value->Show();
    + 
    +// Setup the title on the center circle
    +$p1->midtitle->Set("Test mid\nRow 1\nRow 2");
    +$p1->midtitle->SetFont(FF_ARIAL,FS_NORMAL,14);
    + 
    +// Set color for mid circle
    +$p1->SetMidColor('yellow');
    + 
    +// Use percentage values in the legends values (This is also the default)
    +$p1->SetLabelType(PIE_VALUE_PER);
    + 
    +// The label array values may have printf() formatting in them. The argument to the
    +// form,at string will be the value of the slice (either the percetage or absolute
    +// depending on what was specified in the SetLabelType() above.
    +$lbl = array("adam\n%.1f%%","bertil\n%.1f%%","johan\n%.1f%%",
    +         "peter\n%.1f%%","daniel\n%.1f%%","erik\n%.1f%%");
    +$p1->SetLabels($lbl);
    + 
    +// Uncomment this line to remove the borders around the slices
    +// $p1->ShowBorder(false);
    + 
    +// Add drop shadow to slices
    +$p1->SetShadow();
    + 
    +// Explode all slices 15 pixels
    +$p1->ExplodeAll(15);
    + 
    +// Add plot to pie graph
    +$graph->Add($p1);
    + 
    +// .. and send the image on it's marry way to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pieex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pieex3.html new file mode 100755 index 00000000..d6be57bb --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pieex3.html @@ -0,0 +1,100 @@ +
    pieex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +// Some data
    +$data = array(40,21,17,14,23);
    + 
    +// Create the Pie Graph.
    +$graph = new PieGraph(350,300);
    +$graph->SetShadow();
    + 
    +// Set A title for the plot
    +$graph->title->Set("Multiple - Pie plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Create plots
    +$size=0.13;
    +$p1 = new PiePlot($data);
    +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May"));
    +$p1->SetSize($size);
    +$p1->SetCenter(0.25,0.32);
    +$p1->value->SetFont(FF_FONT0);
    +$p1->title->Set("2001");
    + 
    +$p2 = new PiePlot($data);
    +$p2->SetSize($size);
    +$p2->SetCenter(0.65,0.32);
    +$p2->value->SetFont(FF_FONT0);
    +$p2->title->Set("2002");
    + 
    +$p3 = new PiePlot($data);
    +$p3->SetSize($size);
    +$p3->SetCenter(0.25,0.75);
    +$p3->value->SetFont(FF_FONT0);
    +$p3->title->Set("2003");
    + 
    +$p4 = new PiePlot($data);
    +$p4->SetSize($size);
    +$p4->SetCenter(0.65,0.75);
    +$p4->value->SetFont(FF_FONT0);
    +$p4->title->Set("2004");
    + 
    +$graph->Add($p1);
    +$graph->Add($p2);
    +$graph->Add($p3);
    +$graph->Add($p4);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pieex8.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pieex8.html new file mode 100755 index 00000000..8025285b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pieex8.html @@ -0,0 +1,66 @@ +
    pieex8.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +$data = array(40,60,31,35);
    + 
    +// A new pie graph
    +$graph = new PieGraph(250,200);
    +$graph->SetShadow();
    + 
    +// Title setup
    +$graph->title->Set("Adjusting the label pos");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Setup the pie plot
    +$p1 = new PiePlot($data);
    + 
    +// Adjust size and position of plot
    +$p1->SetSize(0.4);
    +$p1->SetCenter(0.5,0.52);
    + 
    +// Setup slice labels and move them into the plot
    +$p1->value->SetFont(FF_FONT1,FS_BOLD);
    +$p1->value->SetColor("darkred");
    +$p1->SetLabelPos(0.6);
    + 
    +// Finally add the plot
    +$graph->Add($p1);
    + 
    +// ... and stroke it
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pieex9.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pieex9.html new file mode 100755 index 00000000..cce360ff --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pieex9.html @@ -0,0 +1,78 @@ +
    pieex9.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +$data = array(40,60,31,35);
    + 
    +// A new pie graph
    +$graph = new PieGraph(250,200);
    +$graph->SetShadow();
    + 
    +// Title setup
    +$graph->title->Set("Exploding all slices");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Setup the pie plot
    +$p1 = new PiePlot($data);
    + 
    +// Adjust size and position of plot
    +$p1->SetSize(0.35);
    +$p1->SetCenter(0.5,0.52);
    + 
    +// Setup slice labels and move them into the plot
    +$p1->value->SetFont(FF_FONT1,FS_BOLD);
    +$p1->value->SetColor("darkred");
    +$p1->SetLabelPos(0.65);
    + 
    +// Explode all slices
    +$p1->ExplodeAll(10);
    + 
    +// Add drop shadow
    +$p1->SetShadow();
    + 
    +// Finally add the plot
    +$graph->Add($p1);
    + 
    +// ... and stroke it
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pielabelsex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pielabelsex1.html new file mode 100755 index 00000000..09bc4b4c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pielabelsex1.html @@ -0,0 +1,72 @@ +
    pielabelsex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +$data = array(19,12,4,3,3,12,3,3,5,6,7,8,8,1,7,2,2,4,6,8,21,23,2,2,12);
    + 
    +// Create the Pie Graph.
    +$graph = new PieGraph(300,350);
    + 
    +// Set A title for the plot
    +$graph->title->Set("Label guide lines");
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); 
    +$graph->title->SetColor("darkblue");
    +$graph->legend->Pos(0.1,0.2);
    + 
    + 
    +// Create pie plot
    +$p1 = new PiePlot($data);
    +$p1->SetCenter(0.5,0.55);
    +$p1->SetSize(0.3);
    + 
    +// Enable and set policy for guide-lines
    +$p1->SetGuideLines();
    +$p1->SetGuideLinesAdjust(1.4);
    + 
    +// Setup the labels
    +$p1->SetLabelType(PIE_VALUE_PER);    
    +$p1->value->Show();            
    +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9);    
    +$p1->value->SetFormat('%2.1f%%');        
    + 
    +// Add and stroke
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pielabelsex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pielabelsex2.html new file mode 100755 index 00000000..c0ded4c2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pielabelsex2.html @@ -0,0 +1,72 @@ +
    pielabelsex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +$data = array(19,12,4,3,3,12,3,3,5,6,7,8,8,1,7,2,2,4,6,8,21,23,2,2,12);
    + 
    +// Create the Pie Graph.
    +$graph = new PieGraph(300,350);
    + 
    +// Set A title for the plot
    +$graph->title->Set("Label guide lines");
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); 
    +$graph->title->SetColor("darkblue");
    +$graph->legend->Pos(0.1,0.2);
    + 
    + 
    +// Create pie plot
    +$p1 = new PiePlot($data);
    +$p1->SetCenter(0.5,0.55);
    +$p1->SetSize(0.3);
    + 
    +// Enable and set policy for guide-lines. Make labels line up vertically
    +$p1->SetGuideLines(true,false);
    +$p1->SetGuideLinesAdjust(1.5);
    + 
    +// Setup the labels
    +$p1->SetLabelType(PIE_VALUE_PER);    
    +$p1->value->Show();            
    +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9);    
    +$p1->value->SetFormat('%2.1f%%');        
    + 
    +// Add and stroke
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pielabelsex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pielabelsex4.html new file mode 100755 index 00000000..6a0d0b82 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pielabelsex4.html @@ -0,0 +1,72 @@ +
    pielabelsex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_pie.php');
    + 
    +$data = array(19,12,4,3,3,12,3,3,5,6,7,8,8,1,7,2,2,4,6,8,21,23,2,2,12);
    + 
    +// Create the Pie Graph.
    +$graph = new PieGraph(300,350);
    + 
    +// Set A title for the plot
    +$graph->title->Set("Label guide lines");
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); 
    +$graph->title->SetColor("darkblue");
    +$graph->legend->Pos(0.1,0.2);
    + 
    + 
    +// Create pie plot
    +$p1 = new PiePlot($data);
    +$p1->SetCenter(0.5,0.55);
    +$p1->SetSize(0.3);
    + 
    +// Enable and set policy for guide-lines. Make labels line up vertically
    +$p1->SetGuideLines(true,false);
    +$p1->SetGuideLinesAdjust(1.1);
    + 
    +// Setup the labels
    +$p1->SetLabelType(PIE_VALUE_PER);    
    +$p1->value->Show();            
    +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9);    
    +$p1->value->SetFormat('%2.1f%%');        
    + 
    +// Add and stroke
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pielabelsex5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pielabelsex5.html new file mode 100755 index 00000000..b9b53cb5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pielabelsex5.html @@ -0,0 +1,92 @@ +
    pielabelsex5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +
    <?php // content="text/plain; charset=utf-8"
    +include ("../jpgraph.php");
    +include ("../jpgraph_pie.php");
    + 
    +// Some data and the labels
    +$data   = array(19,12,4,7,3,12,3);
    +$labels = array("First\n(%.1f%%)",
    +                "Second\n(%.1f%%)","Third\n(%.1f%%)",
    +                "Fourth\n(%.1f%%)","Fifth\n(%.1f%%)",
    +                "Sixth\n(%.1f%%)","Seventh\n(%.1f%%)");
    + 
    +// Create the Pie Graph.
    +$graph = new PieGraph(300,300);
    +$graph->SetShadow();
    + 
    +// Set A title for the plot
    +$graph->title->Set('String labels with values');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('black');
    + 
    +// Create pie plot
    +$p1 = new PiePlot($data);
    +$p1->SetCenter(0.5,0.5);
    +$p1->SetSize(0.3);
    + 
    +// Setup the labels to be displayed
    +$p1->SetLabels($labels);
    + 
    +// This method adjust the position of the labels. This is given as fractions
    +// of the radius of the Pie. A value < 1 will put the center of the label
    +// inside the Pie and a value >= 1 will pout the center of the label outside the
    +// Pie. By default the label is positioned at 0.5, in the middle of each slice.
    +$p1->SetLabelPos(1);
    + 
    +// Setup the label formats and what value we want to be shown (The absolute)
    +// or the percentage.
    +$p1->SetLabelType(PIE_VALUE_PER);
    +$p1->value->Show();
    +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$p1->value->SetColor('darkgray');
    + 
    +// Add and stroke
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/plotbanddensity_ex0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/plotbanddensity_ex0.html new file mode 100755 index 00000000..188b2464 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/plotbanddensity_ex0.html @@ -0,0 +1,76 @@ +
    plotbanddensity_ex0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(10,29,3,6);
    + 
    +// Create the graph. 
    +$graph = new Graph(200,200);    
    +$graph->SetScale('textlin');
    +$graph->SetMargin(25,10,20,25);
    +$graph->SetBox(true);
    + 
    +// Add 10% grace ("space") at top and botton of Y-scale. 
    +$graph->yscale->SetGrace(10);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor("lightblue");
    + 
    +$graph->ygrid->Show(false);
    + 
    +// .. and add the plot to the graph
    +$graph->Add($bplot);
    + 
    +// Add band
    +$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4');
    +$band->SetDensity(10);
    +$band->ShowFrame(true);
    +$graph->AddBand($band);
    + 
    +// Set title
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->title->SetColor('darkred');
    +$graph->title->Set('BAND_3DPLANE, Density=10');
    + 
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/plotbanddensity_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/plotbanddensity_ex1.html new file mode 100755 index 00000000..8645c845 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/plotbanddensity_ex1.html @@ -0,0 +1,76 @@ +
    plotbanddensity_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(10,29,3,6);
    + 
    +// Create the graph. 
    +$graph = new Graph(200,200);    
    +$graph->SetScale('textlin');
    +$graph->SetMargin(25,10,20,25);
    +$graph->SetBox(true);
    + 
    +// Add 10% grace ("space") at top and botton of Y-scale. 
    +$graph->yscale->SetGrace(10);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor("lightblue");
    + 
    +$graph->ygrid->Show(false);
    + 
    +// .. and add the plot to the graph
    +$graph->Add($bplot);
    + 
    +// Add band
    +$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4');
    +$band->SetDensity(40);
    +$band->ShowFrame(true);
    +$graph->AddBand($band);
    + 
    +// Set title
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->title->SetColor('darkred');
    +$graph->title->Set('BAND_3DPLANE, Density=40');
    + 
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/plotbanddensity_ex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/plotbanddensity_ex2.html new file mode 100755 index 00000000..6b4d53c3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/plotbanddensity_ex2.html @@ -0,0 +1,76 @@ +
    plotbanddensity_ex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(10,29,3,6);
    + 
    +// Create the graph. 
    +$graph = new Graph(200,200);    
    +$graph->SetScale('textlin');
    +$graph->SetMargin(25,10,20,25);
    +$graph->SetBox(true);
    + 
    +// Add 10% grace ("space") at top and botton of Y-scale. 
    +$graph->yscale->SetGrace(10);
    +$graph->ygrid->Show(false);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor("lightblue");
    + 
    + 
    +// .. and add the plot to the graph
    +$graph->Add($bplot);
    + 
    +// Add band
    +$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4');
    +$band->SetDensity(80);
    +$band->ShowFrame(true);
    +$graph->AddBand($band);
    + 
    +// Set title
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->title->SetColor('darkred');
    +$graph->title->Set('BAND_3DPLANE, Density=80');
    + 
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarclockex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarclockex1.html new file mode 100755 index 00000000..7a3d8829 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarclockex1.html @@ -0,0 +1,110 @@ +
    polarclockex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_polar.php');
    + 
    +//$data = array(22,12,27,40,80,48,120,40,142,27,170,12);
    + 
    +$data = array(
    +0,0,10,2,30,25,40,60,
    +50,110,60,140,70,170,80,190,
    +85,195,90,200,95,195,100,190,
    +110,170,120,140,130,110,140,60,
    +150,25,170,2,180,0);
    + 
    +//$data2 = array(0,0,50,2,60,30,65,90,60,120,50,150,20,170,0,180);
    + 
    +$data2 = array(0,0,34,56,90,90,170,65,220,90,270,120,300,60,355,10);
    + 
    +$graph = new PolarGraph(350,350);
    +$graph->SetScale('lin',150);
    + 
    +$graph->SetMarginColor('#FFE6C0');
    +$graph->SetType(POLAR_360);
    +$graph->SetMargin(40,40,50,40);
    +$graph->SetClockwise(true);
    + 
    +//$graph->Set90AndMargin(60,50,70,120);
    + 
    +$graph->SetBox(true);
    +$graph->SetFrame(false);
    +$graph->axis->ShowGrid(true,false,true);
    +$graph->axis->SetGridColor('gray','gray','gray');
    + 
    +$graph->axis->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$graph->axis->SetTitle('X-Axis','center');
    + 
    +$graph->axis->SetColor('black','black','darkred');
    +$graph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8);
    + 
    +$graph->title->Set('Clockwise polar plot');
    +$graph->title->SetFont(FF_COMIC,FS_NORMAL,16);
    +$graph->title->SetColor('navy');
    + 
    + 
    + 
    +$p = new PolarPlot($data);
    +$p->SetFillColor('lightblue@0.5');
    +$graph->Add($p);
    + 
    +//$p2 = new PolarPlot($data2);
    +//$p2->SetFillColor('red@0.5');
    +//$graph->Add($p2);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarclockex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarclockex2.html new file mode 100755 index 00000000..25dc1d6f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarclockex2.html @@ -0,0 +1,106 @@ +
    polarclockex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_polar.php');
    + 
    +//$data = array(22,12,27,40,80,48,120,40,142,27,170,12);
    + 
    +$data = array(
    +0,0,10,2,30,25,40,60,
    +50,110,60,140,70,170,80,190,
    +85,195,90,200,95,195,100,190,
    +110,170,120,140,130,110,140,60,
    +150,25,170,2,180,0);
    + 
    +//$data2 = array(0,0,50,2,60,30,65,90,60,120,50,150,20,170,0,180);
    + 
    +$data2 = array(0,0,34,56,90,90,170,65,220,90,270,120,300,60,355,10);
    + 
    +$graph = new PolarGraph(350,350);
    +$graph->SetScale('lin',150);
    + 
    +$graph->SetMarginColor('#FFE6C0');
    +$graph->SetType(POLAR_360);
    +$graph->SetClockwise(true);
    +$graph->Set90AndMargin(40,40,50,40);
    + 
    +$graph->SetBox(true);
    +$graph->SetFrame(false);
    +$graph->axis->ShowGrid(true,false,true);
    +$graph->axis->SetGridColor('gray','gray','gray');
    + 
    +$graph->axis->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$graph->axis->SetTitle('X-Axis','center');
    + 
    +$graph->axis->SetColor('black','black','darkred');
    +$graph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8);
    + 
    +$graph->title->Set('Clockwise polar plot (rotated)');
    +$graph->title->SetFont(FF_COMIC,FS_NORMAL,16);
    +$graph->title->SetColor('navy');
    + 
    + 
    + 
    +$p = new PolarPlot($data);
    +$p->SetFillColor('lightblue@0.5');
    +$graph->Add($p);
    + 
    +//$p2 = new PolarPlot($data2);
    +//$p2->SetFillColor('red@0.5');
    +//$graph->Add($p2);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex0-180.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex0-180.html new file mode 100755 index 00000000..dc7fbea9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex0-180.html @@ -0,0 +1,54 @@ +
    polarex0-180.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +
    <?php // content="text/plain; charset=utf-8"
    +// A simple Polar graph, example 0
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_polar.php');
    + 
    + 
    +$data = array(0,1,10,2,30,25,40,60,
    +          50,110,60,160,70,210,75,230,80,260,
    +          85,270,90,280,
    +          95,270,100,260,105,230,
    +          110,210,120,160,130,110,140,60,
    +          150,25,170,2,180,1);
    + 
    + 
    +$graph = new PolarGraph(250,250);
    +$graph->SetScale('lin');
    +$graph->SetMargin(35,35,25,25);
    +$graph->SetType(POLAR_180);
    + 
    +$p = new PolarPlot($data);
    +$p->SetFillColor('lightblue@0.5');
    +$graph->Add($p);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex0.html new file mode 100755 index 00000000..39a87b68 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex0.html @@ -0,0 +1,52 @@ +
    polarex0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php // content="text/plain; charset=utf-8"
    +// A simple Polar graph, example 0
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_polar.php');
    + 
    + 
    +$data = array(0,1,10,2,30,25,40,60,
    +          50,110,60,160,70,210,75,230,80,260,
    +          85,270,90,280,
    +          95,270,100,260,105,230,
    +          110,210,120,160,130,110,140,60,
    +          150,25,170,2,180,1);
    + 
    + 
    +$graph = new PolarGraph(250,250);
    +$graph->SetScale('lin');
    +$graph->SetMargin(35,35,25,25);
    + 
    +$p = new PolarPlot($data);
    +$p->SetFillColor('lightblue@0.5');
    +$graph->Add($p);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex3-lin.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex3-lin.html new file mode 100755 index 00000000..e9a37c25 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex3-lin.html @@ -0,0 +1,66 @@ +
    polarex3-lin.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php // content="text/plain; charset=utf-8"
    +// A simple Polar graph, example 2
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_polar.php');
    + 
    + 
    +$data = array(0,1,10,2,30,25,40,60,
    +          50,110,60,160,70,210,75,230,80,260,
    +          85,270,90,280,
    +          95,270,100,260,105,230,
    +          110,210,120,160,130,110,140,60,
    +          150,25,170,2,180,1);
    + 
    + 
    +$graph = new PolarGraph(300,300);
    +$graph->SetScale('lin',200);
    +$graph->SetType(POLAR_180);
    + 
    +$graph->title->Set('Polar plot #3');
    +$graph->title->SetFont(FF_FONT2,FS_BOLD);
    +$graph->title->SetColor('navy');
    + 
    +$graph->axis->ShowGrid(true,false);
    + 
    +$p = new PolarPlot($data);
    +$p->SetFillColor('lightred@0.5');
    + 
    +$graph->Add($p);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex3.html new file mode 100755 index 00000000..cba8d253 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex3.html @@ -0,0 +1,66 @@ +
    polarex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php // content="text/plain; charset=utf-8"
    +// A simple Polar graph, example 2
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_polar.php');
    + 
    + 
    +$data = array(0,1,10,2,30,25,40,60,
    +          50,110,60,160,70,210,75,230,80,260,
    +          85,270,90,280,
    +          95,270,100,260,105,230,
    +          110,210,120,160,130,110,140,60,
    +          150,25,170,2,180,1);
    + 
    + 
    +$graph = new PolarGraph(300,300);
    +$graph->SetScale('log',100);
    +$graph->SetType(POLAR_180);
    + 
    +$graph->title->Set('Polar plot #3');
    +$graph->title->SetFont(FF_FONT2,FS_BOLD);
    +$graph->title->SetColor('navy');
    + 
    +$graph->axis->ShowGrid(true,false);
    + 
    +$p = new PolarPlot($data);
    +$p->SetFillColor('lightred@0.5');
    + 
    +$graph->Add($p);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex4.html new file mode 100755 index 00000000..5536751d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex4.html @@ -0,0 +1,68 @@ +
    polarex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    <?php // content="text/plain; charset=utf-8"
    +// A simple Polar graph, example 2
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_polar.php');
    + 
    + 
    +$data = array(0,1,10,2,30,25,40,60,
    +          50,110,60,160,70,210,75,230,80,260,
    +          85,270,90,280,
    +          95,270,100,260,105,230,
    +          110,210,120,160,130,110,140,60,
    +          150,25,170,2,180,1);
    + 
    + 
    +$graph = new PolarGraph(300,350);
    +$graph->SetScale('log');
    + 
    +$graph->title->Set('Polar plot #4');
    +$graph->title->SetFont(FF_FONT2,FS_BOLD);
    +$graph->title->SetColor('navy');
    + 
    +// Hide last labels on the Radius axis
    +// They intersect with the box otherwise
    +$graph->axis->HideLastTickLabel();
    + 
    +$p = new PolarPlot($data);
    +$p->SetFillColor('lightred@0.5');
    + 
    +$graph->Add($p);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex5.html new file mode 100755 index 00000000..a8f82e38 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex5.html @@ -0,0 +1,74 @@ +
    polarex5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +
    <?php // content="text/plain; charset=utf-8"
    +// A simple Polar graph, example 2
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_polar.php');
    + 
    + 
    +$data = array(0,1,10,2,30,25,40,60,
    +          50,110,60,160,70,210,75,230,80,260,
    +          85,270,90,280,
    +          95,270,100,260,105,230,
    +          110,210,120,160,130,110,140,60,
    +          150,25,170,2,180,1);
    + 
    + 
    +$graph = new PolarGraph(300,350);
    +$graph->SetScale('log');
    + 
    +// Show both major and minor grid lines
    +$graph->axis->ShowGrid(true,true);
    + 
    +$graph->title->Set('Polar plot #5');
    +$graph->title->SetFont(FF_FONT2,FS_BOLD);
    +$graph->title->SetColor('navy');
    + 
    +// Hide last labels on the Radius axis
    +// They intersect with the box otherwise
    +$graph->axis->HideLastTickLabel();
    + 
    +$p = new PolarPlot($data);
    +$p->SetFillColor('lightred@0.5');
    + 
    +$graph->Add($p);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex7-1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex7-1.html new file mode 100755 index 00000000..e3587d54 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex7-1.html @@ -0,0 +1,100 @@ +
    polarex7-1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +
    <?php // content="text/plain; charset=utf-8"
    +// A simple Polar graph,
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_polar.php');
    + 
    + 
    +$data = array(0,1,30,2,30,25,40,60,
    +          50,110,60,160,70,210,75,230,80,260,85,370,
    +          90,480,
    +          95,370,100,260,105,230,
    +          110,210,120,160,130,110,140,60,
    +          150,25,150,2,180,1);
    + 
    +$graph = new PolarGraph(300,350);
    +$graph->SetScale('log',100);
    +$graph->SetType(POLAR_180);
    +$graph->SetPlotSize(220,250);
    + 
    +// Hide frame around graph (by setting width=0)
    +$graph->SetFrame(true,'white',1);
    + 
    +$graph->SetBackgroundGradient('blue:1.3','brown:1.4',GRAD_HOR,BGRAD_PLOT);
    + 
    +// Set color for gradient lines
    +$graph->axis->SetGridColor('gray','gray','gray');
    + 
    +// Setup axis title
    +$graph->axis->SetTitle('Coverage (in meter)','middle');
    +$graph->axis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$graph->title->Set('Polar plot #7');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);
    +$graph->title->SetColor('navy');
    + 
    +// Adjust legen box position and color
    +$graph->legend->SetColor('navy','darkgray');
    +$graph->legend->SetFillColor('white');
    +$graph->legend->SetShadow('darkgray@0.5',5);
    + 
    +$p = new PolarPlot($data);
    +$p->SetFillColor('lightblue@0.5');
    +$p->mark->SetType(MARK_SQUARE);
    +$p->SetLegend("Mirophone #1\n(No amps)");
    + 
    +$graph->Add($p);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex7-2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex7-2.html new file mode 100755 index 00000000..11943af4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex7-2.html @@ -0,0 +1,106 @@ +
    polarex7-2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +
    <?php // content="text/plain; charset=utf-8"
    +// A simple Polar graph,
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_polar.php');
    + 
    + 
    +$data = array(0,1,30,2,30,25,40,60,
    +          50,110,60,160,70,210,75,230,80,260,85,370,
    +          90,480,
    +          95,370,100,260,105,230,
    +          110,210,120,160,130,110,140,60,
    +          150,25,150,2,180,1);
    + 
    +$n = count($data);
    +for($i=0; $i < $n; $i+=2 ) {
    +    $data[$n+$i] = 360-$data[$i];
    +    $data[$n+$i+1] = $data[$i+1];
    +}
    + 
    + 
    +$graph = new PolarGraph(300,400);
    +$graph->SetScale('log',100);
    +$graph->SetType(POLAR_360);
    +$graph->SetPlotSize(220,300);
    + 
    +// Hide frame around graph (by setting width=0)
    +$graph->SetFrame(true,'white',1);
    + 
    +$graph->SetBackgroundGradient('blue:1.3','brown:1.4',GRAD_MIDHOR,BGRAD_PLOT);
    + 
    +// Set color for gradient lines
    +$graph->axis->SetGridColor('gray','gray','gray');
    + 
    +$graph->title->Set('Polar plot #7-2');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);
    +$graph->title->SetColor('navy');
    + 
    +// Adjust legen box position and color
    +$graph->legend->SetColor('navy','darkgray');
    +$graph->legend->SetFillColor('white');
    +$graph->legend->SetShadow('darkgray@0.5',5);
    + 
    +$p = new PolarPlot($data);
    +$p->SetFillColor('yellow@0.6');
    +$p->mark->SetType(MARK_SQUARE);
    +$p->SetLegend("Mirophone #1\n(No amps)");
    + 
    +$graph->Add($p);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex9.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex9.html new file mode 100755 index 00000000..1c8564a2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/polarex9.html @@ -0,0 +1,126 @@ +
    polarex9.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +
    <?php // content="text/plain; charset=utf-8"
    +// A simple Polar graph,
    + 
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_polar.php');
    + 
    +$data = array(0,1,10,2,30,25,40,60,
    +          50,110,60,160,70,210,75,230,80,260,85,370,
    +          90,480,
    +          95,370,100,260,105,230,
    +          110,210,120,160,130,110,140,60,
    +          150,25,170,2,180,1);
    + 
    +$graph = new PolarGraph(350,320);
    +$graph->SetScale('log',100);
    +$graph->SetType(POLAR_180);
    + 
    +// Hide frame around graph (by setting width=0)
    +$graph->SetFrame(true,'white',1);
    + 
    +// Show both major and minor grid lines
    +$graph->axis->ShowGrid(true,true);
    + 
    +// Set color for gradient lines
    +$graph->axis->SetGridColor('lightblue:0.9','lightblue:0.9','lightblue:0.9');
    + 
    +// Set label and axis colors
    +$graph->axis->SetColor('black','navy','darkred');
    + 
    +// Draw the ticks on the bottom side of the radius axis
    +$graph->axis->SetTickSide(SIDE_DOWN);
    + 
    +// Increase the margin for the labels since we changed the
    +// side of the ticks.
    +$graph->axis->SetLabelMargin(6);
    + 
    +// Change fonts
    +$graph->axis->SetFont(FF_ARIAL,FS_NORMAL,8);
    +$graph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8);
    + 
    +// Setup axis title
    +$graph->axis->SetTitle('Coverage (in meter)','middle');
    +$graph->axis->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Setup graph title
    +$graph->title->Set('Polar plot #9');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);
    +$graph->title->SetColor('navy');
    + 
    +// Setup tab title
    +$graph->tabtitle->Set('Microphone #1');
    +$graph->tabtitle->SetColor('brown:0.5','lightyellow');
    + 
    + 
    +$p = new PolarPlot($data);
    +$p->SetFillColor('lightblue@0.5');
    +$p->mark->SetType(MARK_SQUARE);
    + 
    +$graph->Add($p);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/prepaccdata_example.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/prepaccdata_example.html new file mode 100755 index 00000000..5361e6e6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/prepaccdata_example.html @@ -0,0 +1,122 @@ +
    prepaccdata_example.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('../jpgraph.php');
    +require_once ('../jpgraph_line.php');
    +require_once ('../jpgraph_date.php');
    + 
    +//Create some test data
    +$xdata = array();
    +$ydata = array();
    + 
    +// Timestamps - 2h (=7200s) apart starting 
    +$sampling = 7200;
    +$n = 50; // data points
    +for($i=0; $i < $n; ++$i ) {
    +    $xdata[$i] = time() + $i * $sampling;
    +    $ydata[0][$i] = rand(12,15);
    +    $ydata[1][$i] = rand(100,155);
    +    $ydata[2][$i] = rand(20,30);
    +}
    + 
    +function formatDate(&$aVal) {
    +    $aVal = date('Y-m-d H:i',$aVal);
    +}
    + 
    +// Apply this format to all time values in the data to prepare it to be display
    +array_walk($xdata,'formatDate');
    + 
    +// Create the graph. 
    +$graph  = new Graph(600, 350);
    +$graph->title->Set('Accumulated values with specified X-axis scale');
    +$graph->SetScale('textlin');
    + 
    +// Setup margin color
    +$graph->SetMarginColor('green@0.95');
    + 
    +// Adjust the margin to make room for the X-labels
    +$graph->SetMargin(40,30,40,120);
    + 
    +// Turn the tick marks out from the plot area
    +$graph->xaxis->SetTickSide(SIDE_BOTTOM);
    +$graph->yaxis->SetTickSide(SIDE_LEFT);
    + 
    +$p0 =new LinePlot($ydata[0]);
    +$p0->SetFillColor('sandybrown');
    +$p1 =new LinePlot($ydata[1]);
    +$p1->SetFillColor('lightblue');
    +$p2 =new LinePlot($ydata[2]);
    +$p2->SetFillColor('red');
    +$ap = new AccLinePlot(array($p0,$p1,$p2));
    + 
    +$graph->xaxis->SetTickLabels($xdata);
    +$graph->xaxis->SetTextLabelInterval(4);
    + 
    +// Add the plot to the graph
    +$graph->Add($ap);
    + 
    +// Set the angle for the labels to 90 degrees
    +$graph->xaxis->SetLabelAngle(90);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/pushpinex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pushpinex1.html new file mode 100755 index 00000000..61f2f182 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/pushpinex1.html @@ -0,0 +1,120 @@ +
    pushpinex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +DEFINE('WORLDMAP','worldmap1.jpg');
    + 
    +function markCallback($y,$x) {
    +    // Return array width
    +    // width,color,fill color, marker filename, imgscale
    +    // any value can be false, in that case the default value will
    +    // be used.
    +    // We only make one pushpin another color
    +    if( $x == 54 ) 
    +    return array(false,false,false,'red',0.8);
    +    else
    +    return array(false,false,false,'green',0.8);
    +}
    + 
    +// Data arrays
    +$datax = array(10,20,30,40,54,60,70,80);
    +$datay = array(12,23,65,18,84,28,86,44);
    + 
    +// Setup the graph
    +$graph = new Graph(400,270);
    + 
    +// We add a small 1pixel left,right,bottom margin so the plot area
    +// doesn't cover the frame around the graph.
    +$graph->img->SetMargin(1,1,1,1);
    +$graph->SetScale('linlin',0,100,0,100);
    + 
    +// We don't want any axis to be shown
    +$graph->xaxis->Hide();
    +$graph->yaxis->Hide();
    + 
    +// Use a worldmap as the background and let it fill the plot area
    +$graph->SetBackgroundImage(WORLDMAP,BGIMG_FILLPLOT);
    + 
    +// Setup a nice title with a striped bevel background
    +$graph->title->Set("Pushpin graph");
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);
    +$graph->title->SetColor('white');
    +$graph->SetTitleBackground('darkgreen',TITLEBKG_STYLE1,TITLEBKG_FRAME_BEVEL);
    +$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'blue','darkgreen');
    + 
    +// Finally create the scatterplot
    +$sp = new ScatterPlot($datay,$datax);
    + 
    +// We want the markers to be an image
    +$sp->mark->SetType(MARK_IMG_PUSHPIN,'blue',0.6);
    + 
    +// Install the Y-X callback for the markers
    +$sp->mark->SetCallbackYX('markCallback');
    + 
    +// ...  and add it to the graph
    +$graph->Add($sp);    
    + 
    +// .. and output to browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qr_template.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qr_template.html new file mode 100755 index 00000000..280c9230 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qr_template.html @@ -0,0 +1,64 @@ +
    qr_template.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +
    <?php
    +require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +// Data to be encoded
    +$data         = 'ABCDEFGH01234567';
    + 
    +// QR Code specification
    +$version      = -1;                  // -1 = Let the library decide version (same as default)
    +$corrlevel    = QRCapacity::ErrM;   // Medium erro correction
    +$modulewidth  = 2;                    // Module width
    +$back         = BACKEND_IMAGE;        // Default backend
    +$quiet          = 4;                     // Same as default value
    + 
    +// Create encoder and backend
    +$encoder = new QREncoder($version, $corrlevel);
    +$backend = QRCodeBackendFactory::Create($encoder, $back);
    + 
    +// Set the module size
    +$backend->SetModuleWidth($modulewidth);
    + 
    +// Set Quiet zone (this should rarely need changing from the default)
    +$backend->SetQuietZone($quiet);
    + 
    +if( $back == BACKEND_IMAGE ) {
    + 
    +    $backend->Stroke($data);
    +}
    +else {
    +    $str = $backend->Stroke($data);
    +    echo '<pre>'.$str.'</pre>';
    +}
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample0.html new file mode 100755 index 00000000..dbc3a163 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample0.html @@ -0,0 +1,46 @@ +
    qrexample0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +
    <?php
    +require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +// Data to be encoded
    +$data = '01234567';
    + 
    +// Create a new instance of the encoder and let the library
    +// decide a suitable QR version and error level
    +$encoder = new QREncoder(1);
    + 
    +// Use the image backend (this is also the default)
    +$backend = QRCodeBackendFactory::Create($encoder);
    + 
    +try {
    +    //     . send the QR Code back to the browser
    +    $backend->Stroke($data);
    +} catch (Exception $e) {
    +    $errstr = $e->GetMessage();
    +    echo 'QR Code error: '.$e->GetMessage()."\n";
    +    exit(1);
    +}
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample00.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample00.html new file mode 100755 index 00000000..fe62f462 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample00.html @@ -0,0 +1,32 @@ +
    qrexample00.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +
    <?php
    +require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +// Data to be encoded
    +$data = '01234567';
    + 
    +// Create a new instance of the encoder and let the library
    +// decide a suitable QR version and error level
    +$e=new QREncoder();
    + 
    +// Use the image backend (this is also the default)
    +$b=QRCodeBackendFactory::Create($e);
    + 
    +// .. send the barcode back to the browser for the data
    +$b->Stroke($data);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample01.html new file mode 100755 index 00000000..e31be6d1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample01.html @@ -0,0 +1,38 @@ +
    qrexample01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    <?php
    +require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +// Data to be encoded
    +$data = '01234567';
    + 
    +// Create a new instance of the encoder and let the library
    +// decide a suitable QR version and error level
    +$encoder = new QREncoder();
    + 
    +// Use the image backend
    +$backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +// Set the module size (quite big)
    +$backend->SetModuleWidth(5);
    + 
    +// .. send the barcode back to the browser for the data
    +$backend->Stroke($data);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample03.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample03.html new file mode 100755 index 00000000..150a8d08 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample03.html @@ -0,0 +1,54 @@ +
    qrexample03.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +
    <?php
    +    // Example 3 : QR Barcode with specified version and stored to a file
    + 
    +    // Include the library
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    // Data to be encoded
    +    $data = '01234567';
    +    $version = 3;  // Use QR version 3
    +    $fileName = 'qrexample03.png';
    + 
    +    // Create a new instance of the encoder and let the library
    +    // decide a suitable error level
    +    $encoder = new QREncoder($version);
    + 
    +    // Use the image backend
    +    $backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size (quite big)
    +    $backend->SetModuleWidth(5);
    + 
    +    // Store the barcode in the specifed file
    +    $backend->Stroke($data,$fileName);
    +    list($version,$errorcorrection) = $backend->GetQRInfo();
    + 
    +    echo "QR Barcode, (<b>Version: $version-$errorcorrection</b>), image stored in file $fileName";
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample04.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample04.html new file mode 100755 index 00000000..1dee5ab7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample04.html @@ -0,0 +1,48 @@ +
    qrexample04.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +
    <?php
    +    // Example 4 : QR Barcode with specified version and error correction level
    + 
    +    // Include the library
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    // Data to be encoded
    +    $data = '01234567';
    +    $version = 12;  // Use QR version 4
    +    $corrlevel = QRCapacity::ErrH ; // Level H error correction (the highest possible)
    + 
    +    // Create a new instance of the encoder using the specified
    +    // QR version and error correction
    +    $encoder = new QREncoder($version,$corrlevel);
    + 
    +    // Use the image backend
    +    $backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size
    +    $backend->SetModuleWidth(3);
    + 
    +    // Store the barcode in the specifed file
    +    $backend->Stroke($data);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample05.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample05.html new file mode 100755 index 00000000..1f176b2e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample05.html @@ -0,0 +1,58 @@ +
    qrexample05.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +
    <?php
    +    // Example 5 : QR Barcode with manually specified encodation
    + 
    +    // Include the library
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    // Data to be encoded
    +    // We want the data to be encoded using alphanumeric encoding even though
    +    // it is only numbers
    +    $data = array(
    +        array(QREncoder::MODE_ALPHANUM,'01234567')
    +    );
    + 
    +    $version = 3;  // Use QR version 3
    +    $corrlevel = QRCapacity::ErrH ; // Level H error correction (the highest possible)
    + 
    +    // Create a new instance of the encoder using the specified
    +    // QR version and error correction
    +    $encoder = new QREncoder($version,$corrlevel);
    + 
    +    // Use the image backend
    +    $backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size
    +    $backend->SetModuleWidth(4);
    + 
    +    // Store the barcode in the specifed file
    +    $backend->Stroke($data);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample06.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample06.html new file mode 100755 index 00000000..99cc83d6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample06.html @@ -0,0 +1,52 @@ +
    qrexample06.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php
    +    // Example 6 : QR Barcode with image in JPG format
    + 
    +    // Include the library
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    $data      = 'ABCDEFGH01234567'; // Data to be encoded
    +    $version   = -1;  // -1 = Let the library decide version (same as default)
    +    $corrlevel = -1; // -1 = Let the library decide error correction level (same as default)
    + 
    +    // Create a new instance of the encoder using the specified
    +    // QR version and error correction
    +    $encoder = new QREncoder($version,$corrlevel);
    + 
    +    // Use the image backend
    +    $backend=QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Use JPEG format with 80% quality level
    +    $backend->SetImgFormat('jpeg',80);
    + 
    +    // Set the module size
    +    $backend->SetModuleWidth(4);
    + 
    +    // Store the barcode in the specifed file
    +    $backend->Stroke($data);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample07.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample07.html new file mode 100755 index 00000000..f0a7c9a9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample07.html @@ -0,0 +1,52 @@ +
    qrexample07.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php
    +    // Example 7 : QR Barcode with multiple manually specified encodation schemas
    +    // (Note: Normally there would be no need to ever use manually specified encodation)
    + 
    +    // Include the library
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    // Data to be encoded
    +    $data = array(
    +        array(QREncoder::MODE_ALPHANUM,'01234567'),
    +        array(QREncoder::MODE_NUMERIC,'89012345')
    +    );
    + 
    +    // Create a new instance of the encoder (automatically determined QR version and
    +    // error correction level)
    +    $encoder = new QREncoder();
    + 
    +    // Use the image backend
    +    $backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size
    +    $backend->SetModuleWidth(4);
    + 
    +    // Store the barcode in the specifed file
    +    $backend->Stroke($data);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample08.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample08.html new file mode 100755 index 00000000..5cdb6548 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample08.html @@ -0,0 +1,44 @@ +
    qrexample08.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php
    +    // Example 8 : QR Barcode with data read from file
    + 
    +    // Include the library
    +    require_once ('jpgraph/jpgraph.php');
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    $readFromFilename = 'qr-input.txt';
    + 
    +    // Create a new instance of the encoder and let the library
    +    // decide a suitable QR version and error level
    +    $encoder=new QREncoder();
    + 
    +    // Use the image backend
    +    $backend=QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size (quite big)
    +    $backend->SetModuleWidth(5);
    + 
    +    // .. send the barcode back to the browser for the data in the file
    +    $backend->StrokeFromFile($readFromFilename);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample09.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample09.html new file mode 100755 index 00000000..3368d1ae --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample09.html @@ -0,0 +1,50 @@ +
    qrexample09.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +
    <?php
    +    // Example 9 : QR Barcode with data read from file and different colors
    + 
    +    // Include the library
    +    require_once ('jpgraph/jpgraph.php');
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    $readFromFilename = 'qr-input.txt';
    + 
    +    // Create a new instance of the encoder and let the library
    +    // decide a suitable QR version and error level
    +    $encoder = new QREncoder();
    + 
    +    // Use the image backend
    +    $backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size (quite big)
    +    $backend->SetModuleWidth(5);
    + 
    +    // Use blue and white colors instead
    +    $backend->SetColor('navy','white');
    + 
    +    // .. send the barcode back to the browser for the data in the file
    +    $backend->StrokeFromFile($readFromFilename);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample10.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample10.html new file mode 100755 index 00000000..8e2195f2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample10.html @@ -0,0 +1,52 @@ +
    qrexample10.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php
    +    // Example 10 : Specified error correction level
    + 
    +    // Include the library
    +    require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +    $data      = 'ABCDEFGH01234567'; // Data to be encoded
    +    $version   = -1;  // -1 = Let the library decide version (same as default)
    +    $corrlevel = QRCapacity::ErrH; // Error correction level H (Highest possible)
    + 
    +    // Create a new instance of the encoder using the specified
    +    // QR version and error correction
    +    $encoder = new QREncoder($version,$corrlevel);
    + 
    +    // Use the image backend
    +    $backend = QRCodeBackendFactory::Create($encoder, BACKEND_IMAGE);
    + 
    +    // Set the module size
    +    $backend->SetModuleWidth(3);
    + 
    +    // Set color
    +    $backend->SetColor('brown','white');
    + 
    +    // Store the barcode in the specifed file
    +    $backend->Stroke($data);
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample11.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample11.html new file mode 100755 index 00000000..49b3fde6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample11.html @@ -0,0 +1,52 @@ +
    qrexample11.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php
    +// Include the library
    +require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +// Example 11 : Generate postscript output
    + 
    +$data         = 'ABCDEFGH01234567'; // Data to be encoded
    +$version      = -1;  // -1 = Let the library decide version (same as default)
    +$corrlevel    = QRCapacity::ErrH; // Error correction level H (Highest possible)
    +$modulewidth  = 3;
    + 
    +// Create a new instance of the encoder using the specified
    +// QR version and error correction
    +$encoder = new QREncoder($version,$corrlevel);
    + 
    +// Use the image backend
    +$backend = QRCodeBackendFactory::Create($encoder, BACKEND_PS);
    + 
    +// Set the module size
    +$backend->SetModuleWidth($modulewidth);
    + 
    +// Store the barcode in the specifed file
    +$ps_str = $backend->Stroke($data);
    + 
    +echo '<pre>'.$ps_str.'</pre>';
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample12.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample12.html new file mode 100755 index 00000000..2c81cc9f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/qrexample12.html @@ -0,0 +1,52 @@ +
    qrexample12.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php
    +// Include the library
    +require_once ('jpgraph/QR/qrencoder.inc.php');
    + 
    +// Example 11 : Generate postscript output
    + 
    +$data         = 'ABCDEFGH01234567'; // Data to be encoded
    +$version      = -1;  // -1 = Let the library decide version (same as default)
    +$corrlevel    = QRCapacity::ErrH; // Error correction level H (Highest possible)
    +$modulewidth  = 1;
    + 
    +// Create a new instance of the encoder using the specified
    +// QR version and error correction
    +$encoder = new QREncoder($version,$corrlevel);
    + 
    +// Use the image backend
    +$backend = QRCodeBackendFactory::Create($encoder, BACKEND_ASCII);
    + 
    +// Set the module size
    +$backend->SetModuleWidth($modulewidth);
    + 
    +// Store the barcode in the specifed file
    +$ps_str = $backend->Stroke($data);
    + 
    +echo '<pre>'.$ps_str.'</pre>';
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex1.html new file mode 100755 index 00000000..30112336 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex1.html @@ -0,0 +1,32 @@ +
    radarex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_radar.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    +// Some data to plot
    +$data = array(55,80,46,71,95);
    + 
    +// Create the graph and the plot
    +$graph = new RadarGraph(250,200);
    +$plot = new RadarPlot($data);
    + 
    +// Add the plot and display the graph
    +$graph->Add($plot);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex2.html new file mode 100755 index 00000000..62529f12 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex2.html @@ -0,0 +1,42 @@ +
    radarex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_radar.php');
    +    
    +// Some data to plot
    +$data = array(55,80,46,71,95);
    +    
    +// Create the graph and the plot
    +$graph = new RadarGraph(300,200);
    + 
    +$graph->title->Set('Weekly goals');
    +$graph->subtitle->Set('Year 2003');
    + 
    +$plot = new RadarPlot($data);
    +$plot->SetFillColor('lightred');
    +$graph->SetSize(0.6);
    +$graph->SetPos(0.5,0.6);
    +// Add the plot and display the graph
    +$graph->Add($plot);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex4.html new file mode 100755 index 00000000..caf41b3f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex4.html @@ -0,0 +1,56 @@ +
    radarex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_radar.php');
    + 
    +// Some data to plot
    +$data = array(55,80,26,31,95);
    + 
    +// Create the graph and the plot
    +$graph = new RadarGraph(250,200);
    + 
    +// Add a drop shadow to the graph
    +$graph->SetShadow();
    + 
    +// Create the titles for the axis
    +$titles = $gDateLocale->GetShortMonth();
    +$graph->SetTitles($titles);
    + 
    +// Add grid lines
    +$graph->grid->Show();
    +$graph->grid->SetLineStyle('dashed');
    + 
    +$plot = new RadarPlot($data);
    +$plot->SetFillColor('lightblue');
    + 
    +// Add the plot and display the graph
    +$graph->Add($plot);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex6.html new file mode 100755 index 00000000..7a378678 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex6.html @@ -0,0 +1,70 @@ +
    radarex6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_radar.php');
    + 
    +// Some data to plot
    +$data = array(55,80,26,31,95);
    + 
    +// Create the graph and the plot
    +$graph = new RadarGraph(250,200);
    + 
    +// Add a drop shadow to the graph
    +$graph->SetShadow();
    + 
    +// Create the titles for the axis
    +$titles = $gDateLocale->GetShortMonth();
    +$graph->SetTitles($titles);
    +$graph->SetColor('lightyellow');
    + 
    +// ADjust the position to make more room
    +// for the legend
    +$graph->SetCenter(0.45,0.5);
    + 
    +// Add grid lines
    +$graph->grid->Show();
    +$graph->grid->SetColor('darkred');
    +$graph->grid->SetLineStyle('dashed');
    + 
    +$plot = new RadarPlot($data);
    +$plot->SetFillColor('lightblue');
    +$plot->SetLegend("QA results");
    + 
    +// Add the plot and display the graph
    +$graph->Add($plot);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex7.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex7.html new file mode 100755 index 00000000..96aef27f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex7.html @@ -0,0 +1,96 @@ +
    radarex7.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_radar.php');
    + 
    +// Create the basic rtadar graph
    +$graph = new RadarGraph(300,200);
    + 
    +// Set background color and shadow
    +$graph->SetColor("white");
    +$graph->SetShadow();
    + 
    +// Position the graph
    +$graph->SetCenter(0.4,0.55);
    + 
    +// Setup the axis formatting     
    +$graph->axis->SetFont(FF_FONT1,FS_BOLD);
    +$graph->axis->SetWeight(2);
    + 
    +// Setup the grid lines
    +$graph->grid->SetLineStyle("longdashed");
    +$graph->grid->SetColor("navy");
    +$graph->grid->Show();
    +$graph->HideTickMarks();
    +        
    +// Setup graph titles
    +$graph->title->Set("Quality result");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->SetTitles(array("One","Two","Three","Four","Five","Sex","Seven","Eight","Nine","Ten"));
    +// Create the first radar plot        
    +$plot = new RadarPlot(array(30,80,60,40,71,81,47));
    +$plot->SetLegend("Goal");
    +$plot->SetColor("red","lightred");
    +$plot->SetFill(false);
    +$plot->SetLineWeight(2);
    + 
    +// Create the second radar plot
    +$plot2 = new RadarPlot(array(70,40,30,80,31,51,14));
    +$plot2->SetLegend("Actual");
    +$plot2->SetColor("blue","lightred");
    + 
    +// Add the plots to the graph
    +$graph->Add($plot2);
    +$graph->Add($plot);
    + 
    +// And output the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex8.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex8.1.html new file mode 100755 index 00000000..53af9ce7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex8.1.html @@ -0,0 +1,104 @@ +
    radarex8.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_radar.php');
    + 
    +// Create the basic radar graph
    +$graph = new RadarGraph(300,200);
    +$graph->img->SetAntiAliasing();
    + 
    +// Set background color and shadow
    +$graph->SetColor("white");
    +$graph->SetShadow();
    + 
    +// Position the graph
    +$graph->SetCenter(0.4,0.55);
    + 
    +// Setup the axis formatting     
    +$graph->axis->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Setup the grid lines
    +$graph->grid->SetLineStyle("solid");
    +$graph->grid->SetColor("navy");
    +$graph->grid->Show();
    +$graph->HideTickMarks();
    +        
    +// Setup graph titles
    +$graph->title->Set("Quality result");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$graph->SetTitles($gDateLocale->GetShortMonth());
    + 
    +// Create the first radar plot        
    +$plot = new RadarPlot(array(70,80,60,90,71,81,47));
    +$plot->SetLegend("Goal");
    +$plot->SetColor("red","lightred");
    +$plot->SetFill(false);
    +$plot->SetLineWeight(2);
    + 
    +// Create the second radar plot
    +$plot2 = new RadarPlot(array(70,40,30,80,31,51,14));
    +$plot2->SetLegend("Actual");
    +$plot2->SetLineWeight(2);
    +$plot2->SetColor("blue");
    +$plot2->SetFill(false);
    + 
    +// Add the plots to the graph
    +$graph->Add($plot2);
    +$graph->Add($plot);
    + 
    +// And output the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex8.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex8.html new file mode 100755 index 00000000..8900dee4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarex8.html @@ -0,0 +1,102 @@ +
    radarex8.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_radar.php');
    + 
    +// Create the basic radar graph
    +$graph = new RadarGraph(300,200);
    +//$graph->img->SetAntiAliasing();
    + 
    +// Set background color and shadow
    +$graph->SetColor("white");
    +$graph->SetShadow();
    + 
    +// Position the graph
    +$graph->SetCenter(0.4,0.55);
    + 
    +// Setup the axis formatting     
    +$graph->axis->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Setup the grid lines
    +$graph->grid->SetLineStyle("solid");
    +$graph->grid->SetColor("navy");
    +$graph->grid->Show();
    +$graph->HideTickMarks();
    +        
    +// Setup graph titles
    +$graph->title->Set("Quality result");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->SetTitles($gDateLocale->GetShortMonth());
    + 
    +// Create the first radar plot        
    +$plot = new RadarPlot(array(70,80,60,90,71,81,47));
    +$plot->SetLegend("Goal");
    +$plot->SetColor("red","lightred");
    +$plot->SetFill(false);
    +$plot->SetLineWeight(2);
    + 
    +// Create the second radar plot
    +$plot2 = new RadarPlot(array(70,40,30,80,31,51,14));
    +$plot2->SetLegend("Actual");
    +$plot2->SetLineWeight(2);
    +$plot2->SetColor("blue");
    +$plot2->SetFill(false);
    + 
    +// Add the plots to the graph
    +$graph->Add($plot2);
    +$graph->Add($plot);
    + 
    +// And output the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarlogex1-aa.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarlogex1-aa.html new file mode 100755 index 00000000..e0ea16c4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarlogex1-aa.html @@ -0,0 +1,118 @@ +
    radarlogex1-aa.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_log.php');
    +require_once ('jpgraph/jpgraph_radar.php');
    + 
    +// Some data to plot
    +$data = array(242,58,1500,12,1397,810,373);
    +$data2 = array(447,176,1472,191,1616,42,46);
    + 
    +// Create the graph
    +$graph = new RadarGraph(300,350);
    + 
    +// Use logarithmic scale (If you don't use any SetScale()
    +// the radar graph will default to linear scale
    +$graph->SetScale('log');
    + 
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);
    +$graph->title->Set('Logarithmic scale');
    +$graph->title->SetMargin(10);
    + 
    +// Make the radar graph fill out it's bounding box
    +$graph->SetPlotSize(0.8);
    +$graph->SetCenter(0.5,0.55);
    + 
    +// Note: Enabling this results in a very noticable slow
    +// down of the image generation! And more load on your
    +// server.
    +$graph->img->SetAntiAliasing();
    + 
    +// Uncomment the following line if you want to supress
    +// minor tick marks
    +//$graph->yscale->ticks->SupressMinorTickMarks();
    + 
    +// We want the major tick marks to be black and minor
    +// slightly less noticable
    +$graph->yscale->ticks->SetMarkColor('black','darkgray');
    + 
    +// Set the axis title font
    +$graph->axis->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->axis->title->SetColor('darkred:0.8');
    + 
    +// Use blue axis
    +$graph->axis->SetColor('blue');
    + 
    +$plot = new RadarPlot($data);
    +$plot->SetLineWeight(1);
    +$plot->SetColor('forestgreen');
    +$plot->SetFillColor('forestgreen@0.9');
    + 
    +$plot2 = new RadarPlot($data2);
    +$plot2->SetLineWeight(2);
    +$plot2->SetColor('red');
    +$plot2->SetFillColor('red@0.9');
    + 
    +// Add the plot and display the graph
    +$graph->Add($plot);
    +$graph->Add($plot2);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarlogex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarlogex1.html new file mode 100755 index 00000000..203fa033 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarlogex1.html @@ -0,0 +1,108 @@ +
    radarlogex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_log.php');
    +require_once ('jpgraph/jpgraph_radar.php');
    + 
    +// Some data to plot
    +$data = array(242,58,1500,12,1397,810,373);
    +$data2 = array(447,176,1472,191,1616,42,46);
    + 
    +// Create the graph
    +$graph = new RadarGraph(300,350);
    + 
    +// Use logarithmic scale (If you don't use any SetScale()
    +// the radar graph will default to linear scale
    +$graph->SetScale('log');
    + 
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);
    +$graph->title->Set('Logarithmic scale');
    +$graph->title->SetMargin(10);
    + 
    +// Make the radar graph fill out it's bounding box
    +$graph->SetPlotSize(0.8);
    +$graph->SetCenter(0.5,0.55);
    + 
    +// Uncomment the following line if you want to supress
    +// minor tick marks
    +//$graph->yscale->ticks->SupressMinorTickMarks();
    + 
    +// We want the major tick marks to be black and minor
    +// slightly less noticable
    +$graph->yscale->ticks->SetMarkColor('black','darkgray');
    + 
    +// Set the axis title font
    +$graph->axis->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->axis->title->SetColor('darkred:0.8');
    + 
    +// Use blue axis
    +$graph->axis->SetColor('blue');
    + 
    +$plot = new RadarPlot($data);
    +$plot->SetLineWeight(1);
    +$plot->SetColor('forestgreen');
    +$plot->SetFillColor('forestgreen@0.9');
    + 
    +$plot2 = new RadarPlot($data2);
    +$plot2->SetLineWeight(2);
    +$plot2->SetColor('red');
    +$plot2->SetFillColor('red@0.9');
    + 
    +// Add the plot and display the graph
    +$graph->Add($plot);
    +$graph->Add($plot2);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarmarkex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarmarkex1.html new file mode 100755 index 00000000..91a27fa2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/radarmarkex1.html @@ -0,0 +1,70 @@ +
    radarmarkex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_radar.php');
    + 
    +$titles=array('Planning','Quality','Time','RR','CR','DR');
    +$data=array(18, 40, 70, 90, 42,66);
    + 
    +$graph = new RadarGraph (300,280);
    + 
    +$graph->title->Set('Radar with marks');
    +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,12);
    + 
    +$graph->SetTitles($titles);
    +$graph->SetCenter(0.5,0.55);
    +$graph->HideTickMarks();
    +$graph->SetColor('lightgreen@0.7');
    +$graph->axis->SetColor('darkgray');
    +$graph->grid->SetColor('darkgray');
    +$graph->grid->Show();
    + 
    +$graph->axis->title->SetFont(FF_ARIAL,FS_NORMAL,12);
    +$graph->axis->title->SetMargin(5);
    +$graph->SetGridDepth(DEPTH_BACK);
    +$graph->SetSize(0.6);
    + 
    +$plot = new RadarPlot($data);
    +$plot->SetColor('red@0.2');
    +$plot->SetLineWeight(1);
    +$plot->SetFillColor('red@0.7');
    + 
    +$plot->mark->SetType(MARK_IMG_SBALL,'red');
    + 
    +$graph->Add($plot);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/rose_example.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rose_example.html new file mode 100755 index 00000000..ce2ef565 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rose_example.html @@ -0,0 +1,114 @@ +
    rose_example.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$theme = isset($_GET['theme']) ? $_GET['theme'] : null;
    + 
    +$data = array (
    +  0 => array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ),
    +  1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ),
    +  2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ),
    +  3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ),
    +  4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ),
    +  5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ),
    +  6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ),
    +  7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ),
    +  8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ),
    +);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(400,300);    
    + 
    +$graph->SetScale("textlin");
    +if ($theme) {
    +  $graph->SetTheme(new $theme());
    +}
    +$theme_class = new RoseTheme;
    +$graph->SetTheme($theme_class);
    + 
    +$plot = array();
    +// Create the bar plots
    +for ($i = 0; $i < 4; $i++) {
    +  $plot[$i] = new BarPlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.($i+1));
    +}
    +//$acc1 = new AccBarPlot(array($plot[0], $plot[1]));
    +//$acc1->value->Show();
    +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] ));
    + 
    +for ($i = 4; $i < 8; $i++) {
    +  $plot[$i] = new LinePlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.$i);
    +  $plot[$i]->value->Show();
    +}
    + 
    +$graph->Add($gbplot);
    +$graph->Add($plot[4]);
    + 
    +$title = "RoseTheme Example";
    +$title = mb_convert_encoding($title,'UTF-8');
    +$graph->title->Set($title);
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex0.html new file mode 100755 index 00000000..73f48457 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex0.html @@ -0,0 +1,40 @@ +
    rotex0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,17,22,19,5,15);
    + 
    +$graph = new Graph(270,170);
    +$graph->SetMargin(30,90,30,30);
    +$graph->SetScale("textlin");
    + 
    +$line = new LinePlot($ydata);
    +$line->SetLegend('2002');
    +$line->SetColor('darkred');
    +$line->SetWeight(2);
    +$graph->Add($line);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex1.html new file mode 100755 index 00000000..4d2c3d59 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex1.html @@ -0,0 +1,44 @@ +
    rotex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,17,22,19,5,15);
    + 
    +$graph = new Graph(270,170);
    +$graph->SetMargin(30,90,30,30);
    +$graph->SetScale("textlin");
    + 
    +$graph->img->SetAngle(45);
    + 
    +$line = new LinePlot($ydata);
    +$line->SetLegend('2002');
    +$line->SetColor('darkred');
    +$line->SetWeight(2);
    +$graph->Add($line);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex2.html new file mode 100755 index 00000000..da5cc829 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex2.html @@ -0,0 +1,44 @@ +
    rotex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,17,22,19,5,15);
    + 
    +$graph = new Graph(270,170);
    +$graph->SetMargin(30,90,30,30);
    +$graph->SetScale("textlin");
    + 
    +$graph->img->SetAngle(90);
    + 
    +$line = new LinePlot($ydata);
    +$line->SetLegend('2002');
    +$line->SetColor('darkred');
    +$line->SetWeight(2);
    +$graph->Add($line);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex3.html new file mode 100755 index 00000000..fe37f00d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex3.html @@ -0,0 +1,46 @@ +
    rotex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,17,22,19,5,15);
    + 
    +$graph = new Graph(270,170);
    +$graph->SetMargin(30,90,30,30);
    +$graph->SetScale("textlin");
    + 
    +$graph->img->SetAngle(45);
    +$graph->img->SetCenter(floor(270/2),floor(170/2));
    + 
    +$line = new LinePlot($ydata);
    +$line->SetLegend('2002');
    +$line->SetColor('darkred');
    +$line->SetWeight(2);
    +$graph->Add($line);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex4.html new file mode 100755 index 00000000..795348a4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex4.html @@ -0,0 +1,46 @@ +
    rotex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,17,22,19,5,15);
    + 
    +$graph = new Graph(270,170);
    +$graph->SetMargin(30,90,30,30);
    +$graph->SetScale("textlin");
    + 
    +$graph->img->SetAngle(90);
    +$graph->img->SetCenter(floor(270/2),floor(170/2));
    + 
    +$line = new LinePlot($ydata);
    +$line->SetLegend('2002');
    +$line->SetColor('darkred');
    +$line->SetWeight(2);
    +$graph->Add($line);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex5.html new file mode 100755 index 00000000..c711442e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/rotex5.html @@ -0,0 +1,46 @@ +
    rotex5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$ydata = array(12,17,22,19,5,15);
    + 
    +$graph = new Graph(270,170);
    +$graph->SetMargin(30,90,30,30);
    +$graph->SetScale("textlin");
    + 
    +$graph->img->SetAngle(-30);
    +$graph->img->SetCenter(30,170-30);
    + 
    +$line = new LinePlot($ydata);
    +$line->SetLegend('2002');
    +$line->SetColor('darkred');
    +$line->SetWeight(2);
    +$graph->Add($line);
    + 
    +// Output graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/scatterex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/scatterex1.html new file mode 100755 index 00000000..d99a75e9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/scatterex1.html @@ -0,0 +1,44 @@ +
    scatterex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +$datax = array(3.5,3.7,3,4,6.2,6,3.5,8,14,8,11.1,13.7);
    +$datay = array(20,22,12,13,17,20,16,19,30,31,40,43);
    + 
    +$graph = new Graph(300,200);
    +$graph->SetScale("linlin");
    + 
    +$graph->img->SetMargin(40,40,40,40);        
    +$graph->SetShadow();
    + 
    +$graph->title->Set("A simple scatter plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$sp1 = new ScatterPlot($datay,$datax);
    + 
    +$graph->Add($sp1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/scatterex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/scatterex2.html new file mode 100755 index 00000000..a57f83c3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/scatterex2.html @@ -0,0 +1,50 @@ +
    scatterex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +$datax = array(3.5,3.7,3,4,6.2,6,3.5,8,14,8,11.1,13.7);
    +$datay = array(20,22,12,13,17,20,16,19,30,31,40,43);
    + 
    +$graph = new Graph(300,200);
    +$graph->SetScale("linlin");
    + 
    +$graph->img->SetMargin(40,40,40,40);        
    +$graph->SetShadow();
    + 
    +$graph->title->Set("A simple scatter plot");
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +$sp1 = new ScatterPlot($datay,$datax);
    +$sp1->mark->SetType(MARK_FILLEDCIRCLE);
    +$sp1->mark->SetFillColor("red");
    +$sp1->mark->SetWidth(8);
    + 
    +$graph->Add($sp1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/scatterlinkex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/scatterlinkex3.html new file mode 100755 index 00000000..c2a72052 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/scatterlinkex3.html @@ -0,0 +1,86 @@ +
    scatterlinkex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    + 
    +// Make a circle with a scatterplot
    +$steps=16;
    +for($i=0; $i<$steps; ++$i) {
    +    $a=2*M_PI/$steps*$i;
    +    $datax[$i]=cos($a);
    +    $datay[$i]=sin($a);
    +}
    + 
    +$graph = new Graph(350,230);
    +$graph->SetScale('linlin');
    +$graph->SetShadow();
    +$graph->SetAxisStyle(AXSTYLE_BOXOUT);
    + 
    +$graph->img->SetMargin(50,50,60,40);
    + 
    +$graph->title->Set('Linked scatter plot');
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->subtitle->Set('(BOXOUT Axis style)');
    +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL);
    + 
    + 
    +// 10% top and bottom grace
    +$graph->yscale->SetGrace(5,5);
    +$graph->xscale->SetGrace(1,1);
    + 
    +$sp1 = new ScatterPlot($datay,$datax);
    +$sp1->mark->SetType(MARK_FILLEDCIRCLE);
    +$sp1->mark->SetFillColor('red');
    +$sp1->SetColor('blue');
    + 
    +$sp1->mark->SetWidth(4);
    +$sp1->link->Show();
    +$sp1->link->SetStyle('dotted');
    + 
    +$graph->Add($sp1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/scatterlinkex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/scatterlinkex4.html new file mode 100755 index 00000000..8f0bc064 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/scatterlinkex4.html @@ -0,0 +1,86 @@ +
    scatterlinkex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    + 
    +// Make a circle with a scatterplot
    +$steps=16;
    +for($i=0; $i<$steps; ++$i) {
    +    $a=2*M_PI/$steps*$i;
    +    $datax[$i]=cos($a);
    +    $datay[$i]=sin($a);
    +}
    + 
    +$graph = new Graph(350,230);
    +$graph->SetScale('linlin');
    +$graph->SetShadow();
    +$graph->SetAxisStyle(AXSTYLE_BOXIN);
    + 
    +$graph->img->SetMargin(50,50,60,40);
    + 
    +$graph->title->Set('Linked scatter plot');
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    +$graph->subtitle->Set('(BOXIN Axis style)');
    +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL);
    + 
    +// 10% top and bottom grace
    +$graph->yscale->SetGrace(5,5);
    +$graph->xscale->SetGrace(1,1);
    + 
    +$sp1 = new ScatterPlot($datay,$datax);
    +$sp1->mark->SetType(MARK_FILLEDCIRCLE);
    +$sp1->mark->SetFillColor('red');
    +$sp1->SetColor('blue');
    + 
    +$sp1->mark->SetWidth(4);
    +$sp1->link->Show();
    +$sp1->link->SetWeight(2);
    +$sp1->link->SetColor('red@0.7');
    + 
    + 
    +$graph->Add($sp1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex1.html new file mode 100755 index 00000000..d70ef0ce --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex1.html @@ -0,0 +1,82 @@ +
    smallstaticbandsex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php // content="text/plain; charset=utf-8"
    +// Illustration of the different patterns for bands
    +// $Id: smallstaticbandsex1.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(10,29,3,6);
    + 
    +// Create the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->SetMargin(25,10,20,20);
    + 
    +// Add 10% grace ("space") at top and botton of Y-scale. 
    +$graph->yscale->SetGrace(10);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor("lightblue");
    + 
    +// Position the X-axis at the bottom of the plotare
    +$graph->xaxis->SetPos("min");
    + 
    +$graph->ygrid->Show(false);
    + 
    +// .. and add the plot to the graph
    +$graph->Add($bplot);
    + 
    +// Add band
    +$band = new PlotBand(HORIZONTAL,BAND_RDIAG,15,35,'khaki4');
    +$band->ShowFrame(false);
    +$graph->Add($band);
    + 
    +// Set title
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->title->SetColor('darkred');
    +$graph->title->Set('BAND_RDIAG');
    + 
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex10.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex10.html new file mode 100755 index 00000000..a7d1c374 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex10.html @@ -0,0 +1,82 @@ +
    smallstaticbandsex10.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php // content="text/plain; charset=utf-8"
    +// Illustration of the different patterns for bands
    +// $Id: smallstaticbandsex10.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(10,29,3,6);
    + 
    +// Create the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->SetMargin(25,10,20,20);
    + 
    +// Add 10% grace ("space") at top and botton of Y-scale. 
    +$graph->yscale->SetGrace(10);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor("lightblue");
    + 
    +// Position the X-axis at the bottom of the plotare
    +$graph->xaxis->SetPos("min");
    + 
    +$graph->ygrid->Show(false);
    + 
    +// .. and add the plot to the graph
    +$graph->Add($bplot);
    + 
    +// Add band
    +$band = new PlotBand(HORIZONTAL,BAND_DIAGCROSS,15,35,'khaki4');
    +$band->ShowFrame(false);
    +$graph->Add($band);
    + 
    +// Set title
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->title->SetColor('darkred');
    +$graph->title->Set('BAND_DIAGCROSS');
    + 
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex2.html new file mode 100755 index 00000000..bf2cef19 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex2.html @@ -0,0 +1,82 @@ +
    smallstaticbandsex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php // content="text/plain; charset=utf-8"
    +// Illustration of the different patterns for bands
    +// $Id: smallstaticbandsex2.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(10,29,3,6);
    + 
    +// Create the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->SetMargin(25,10,20,20);
    + 
    +// Add 10% grace ("space") at top and botton of Y-scale. 
    +$graph->yscale->SetGrace(10);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor("lightblue");
    + 
    +// Position the X-axis at the bottom of the plotare
    +$graph->xaxis->SetPos("min");
    + 
    +$graph->ygrid->Show(false);
    + 
    +// .. and add the plot to the graph
    +$graph->Add($bplot);
    + 
    +// Add band
    +$band = new PlotBand(HORIZONTAL,BAND_LDIAG,15,35,'khaki4');
    +$band->ShowFrame(false);
    +$graph->Add($band);
    + 
    +// Set title
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->title->SetColor('darkred');
    +$graph->title->Set('BAND_LDIAG');
    + 
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex3.html new file mode 100755 index 00000000..f1d9ab1a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex3.html @@ -0,0 +1,82 @@ +
    smallstaticbandsex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php // content="text/plain; charset=utf-8"
    +// Illustration of the different patterns for bands
    +// $Id: smallstaticbandsex3.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(10,29,3,6);
    + 
    +// Create the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->SetMargin(25,10,20,20);
    + 
    +// Add 10% grace ("space") at top and botton of Y-scale. 
    +$graph->yscale->SetGrace(10);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor("lightblue");
    + 
    +// Position the X-axis at the bottom of the plotare
    +$graph->xaxis->SetPos("min");
    + 
    +$graph->ygrid->Show(false);
    + 
    +// .. and add the plot to the graph
    +$graph->Add($bplot);
    + 
    +// Add band
    +$band = new PlotBand(HORIZONTAL,BAND_SOLID,15,35,'khaki4');
    +$band->ShowFrame(false);
    +$graph->Add($band);
    + 
    +// Set title
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->title->SetColor('darkred');
    +$graph->title->Set('BAND_SOLID');
    + 
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex4.html new file mode 100755 index 00000000..ded48d7f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex4.html @@ -0,0 +1,84 @@ +
    smallstaticbandsex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +
    <?php // content="text/plain; charset=utf-8"
    +// Illustration of the different patterns for bands
    +// $Id: smallstaticbandsex4.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(10,29,3,6);
    + 
    +// Create the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->SetMargin(25,10,20,20);
    + 
    +// Add 10% grace ("space") at top and botton of Y-scale. 
    +$graph->yscale->SetGrace(10);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor("lightblue");
    + 
    +// Position the X-axis at the bottom of the plotare
    +$graph->xaxis->SetPos("min");
    + 
    +$graph->ygrid->Show(false);
    + 
    +// .. and add the plot to the graph
    +$graph->Add($bplot);
    + 
    +// Add band
    +$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4');
    +$band->SetDensity(80);
    +$band->ShowFrame(true);
    +$graph->Add($band);
    + 
    +// Set title
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->title->SetColor('darkred');
    +$graph->title->Set('BAND_3DPLANE, Density=60');
    + 
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex5.html new file mode 100755 index 00000000..8ac5186d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex5.html @@ -0,0 +1,84 @@ +
    smallstaticbandsex5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +
    <?php // content="text/plain; charset=utf-8"
    +// Illustration of the different patterns for bands
    +// $Id: smallstaticbandsex5.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(10,29,3,6);
    + 
    +// Create the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->SetMargin(25,10,20,20);
    + 
    +// Add 10% grace ("space") at top and botton of Y-scale. 
    +$graph->yscale->SetGrace(10);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor("lightblue");
    + 
    +// Position the X-axis at the bottom of the plotare
    +$graph->xaxis->SetPos("min");
    + 
    +$graph->ygrid->Show(false);
    + 
    +// .. and add the plot to the graph
    +$graph->Add($bplot);
    + 
    +// Add band
    +$band = new PlotBand(HORIZONTAL,BAND_HVCROSS,15,35,'khaki4');
    +$band->ShowFrame(true);
    +$band->SetOrder(DEPTH_FRONT);
    +$graph->Add($band);
    + 
    +// Set title
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->title->SetColor('darkred');
    +$graph->title->Set('BAND_HVCROSS, In front');
    + 
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex6.html new file mode 100755 index 00000000..835aa304 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex6.html @@ -0,0 +1,82 @@ +
    smallstaticbandsex6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php // content="text/plain; charset=utf-8"
    +// Illustration of the different patterns for bands
    +// $Id: smallstaticbandsex6.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(10,29,3,6);
    + 
    +// Create the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->SetMargin(25,10,20,20);
    + 
    +// Add 10% grace ("space") at top and botton of Y-scale. 
    +$graph->yscale->SetGrace(10);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor("lightblue");
    + 
    +// Position the X-axis at the bottom of the plotare
    +$graph->xaxis->SetPos("min");
    + 
    +$graph->ygrid->Show(false);
    + 
    +// .. and add the plot to the graph
    +$graph->Add($bplot);
    + 
    +// Add band
    +$band = new PlotBand(HORIZONTAL,BAND_VLINE,15,35,'khaki4');
    +$band->ShowFrame(false);
    +$graph->Add($band);
    + 
    +// Set title
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->title->SetColor('darkred');
    +$graph->title->Set('BAND_VLINE');
    + 
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex7.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex7.html new file mode 100755 index 00000000..b38635ab --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/smallstaticbandsex7.html @@ -0,0 +1,82 @@ +
    smallstaticbandsex7.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php // content="text/plain; charset=utf-8"
    +// Illustration of the different patterns for bands
    +// $Id: smallstaticbandsex7.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$datay=array(10,29,3,6);
    + 
    +// Create the graph. 
    +$graph = new Graph(200,150);    
    +$graph->SetScale("textlin");
    +$graph->SetMargin(25,10,20,20);
    + 
    +// Add 10% grace ("space") at top and botton of Y-scale. 
    +$graph->yscale->SetGrace(10);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor("lightblue");
    + 
    +// Position the X-axis at the bottom of the plotare
    +$graph->xaxis->SetPos("min");
    + 
    +$graph->ygrid->Show(false);
    + 
    +// .. and add the plot to the graph
    +$graph->Add($bplot);
    + 
    +// Add band
    +$band = new PlotBand(HORIZONTAL,BAND_HLINE,15,35,'khaki4');
    +$band->ShowFrame(false);
    +$graph->Add($band);
    + 
    +// Set title
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->title->SetColor('darkred');
    +$graph->title->Set('BAND_HLINE');
    + 
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/softy_example.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/softy_example.html new file mode 100755 index 00000000..8e82c245 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/softy_example.html @@ -0,0 +1,116 @@ +
    softy_example.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$theme = isset($_GET['theme']) ? $_GET['theme'] : null;
    + 
    +$data = array (
    +  0 => array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ),
    +  1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ),
    +  2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ),
    +  3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ),
    +  4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ),
    +  5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ),
    +  6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ),
    +  7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ),
    +  8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ),
    +);
    + 
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(400,300);    
    + 
    +$graph->SetScale("textlin");
    +if ($theme) {
    +  $graph->SetTheme(new $theme());
    +}
    +$theme_class = new SoftyTheme;
    +$graph->SetTheme($theme_class);
    + 
    +$plot = array();
    +// Create the bar plots
    +for ($i = 0; $i < 4; $i++) {
    +  $plot[$i] = new BarPlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.($i+1));
    +}
    +//$acc1 = new AccBarPlot(array($plot[0], $plot[1]));
    +//$acc1->value->Show();
    +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] ));
    + 
    +for ($i = 4; $i < 8; $i++) {
    +  $plot[$i] = new LinePlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.$i);
    +  $plot[$i]->value->Show();
    +}
    + 
    +$graph->Add($gbplot);
    +$graph->Add($plot[4]);
    + 
    +$title = "SoftyTheme Example";
    +$title = mb_convert_encoding($title,'UTF-8');
    +$graph->title->Set($title);
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/splineex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/splineex1.html new file mode 100755 index 00000000..fcbdceda --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/splineex1.html @@ -0,0 +1,110 @@ +
    splineex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_scatter.php');
    +require_once ('jpgraph/jpgraph_regstat.php');
    + 
    +// Original data points
    +$xdata = array(1,3,5,7,9,12,15,17.1);
    +$ydata = array(5,1,9,6,4,3,19,12);
    + 
    +// Get the interpolated values by creating
    +// a new Spline object.
    +$spline = new Spline($xdata,$ydata);
    + 
    +// For the new data set we want 40 points to
    +// get a smooth curve.
    +list($newx,$newy) = $spline->Get(50);
    + 
    +// Create the graph
    +$g = new Graph(300,200);
    +$g->SetMargin(30,20,40,30);
    +$g->title->Set("Natural cubic splines");
    +$g->title->SetFont(FF_ARIAL,FS_NORMAL,12);
    +$g->subtitle->Set('(Control points shown in red)');
    +$g->subtitle->SetColor('darkred');
    +$g->SetMarginColor('lightblue');
    + 
    +//$g->img->SetAntiAliasing();
    + 
    +// We need a linlin scale since we provide both
    +// x and y coordinates for the data points.
    +$g->SetScale('linlin');
    + 
    +// We want 1 decimal for the X-label
    +$g->xaxis->SetLabelFormat('%1.1f');
    + 
    +// We use a scatterplot to illustrate the original
    +// contro points.
    +$splot = new ScatterPlot($ydata,$xdata);
    + 
    +// 
    +$splot->mark->SetFillColor('red@0.3');
    +$splot->mark->SetColor('red@0.5');
    + 
    +// And a line plot to stroke the smooth curve we got
    +// from the original control points
    +$lplot = new LinePlot($newy,$newx);
    +$lplot->SetColor('navy');
    + 
    +// Add the plots to the graph and stroke
    +$g->Add($lplot);
    +$g->Add($splot);
    +$g->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/staticbandbarex7.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/staticbandbarex7.html new file mode 100755 index 00000000..66c2dc36 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/staticbandbarex7.html @@ -0,0 +1,124 @@ +
    staticbandbarex7.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    +require_once ('jpgraph/jpgraph_plotline.php');
    + 
    +$datay=array(12,5,19,22,17,6);
    + 
    +// Create the graph. 
    +$graph = new Graph(400,300);    
    +$graph->img->SetMargin(60,30,50,40);
    +$graph->SetScale("textlin");
    +$graph->SetShadow();
    + 
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15);
    +$graph->title->Set("Cash flow ");
    +$graph->subtitle->Set("Use of static line, 3D and solid band");
    + 
    +// Turn off Y-grid (it's on by default)
    +$graph->ygrid->Show(false);
    + 
    +// Add 10% grace ("space") at top of Y-scale. 
    +$graph->yscale->SetGrace(10);
    +$graph->yscale->SetAutoMin(-20);
    + 
    +// Turn the tick mark out from the plot area
    +$graph->xaxis->SetTickSide(SIDE_DOWN);
    +$graph->yaxis->SetTickSide(SIDE_LEFT);
    + 
    +// Create a bar pot
    +$bplot = new BarPlot($datay);
    +$bplot->SetFillColor("orange");
    +$bplot->SetShadow("darkblue");
    + 
    +// Show the actual value for each bar on top/bottom
    +$bplot->value->Show(true);
    +$bplot->value->SetFormat("%02d kr");
    + 
    +// Position the X-axis at the bottom of the plotare
    +$graph->xaxis->SetPos("min");
    + 
    +// .. and add the plot to the graph
    +$graph->Add($bplot);
    + 
    +// Add upper and lower band and use no frames
    +$band[0]=new PlotBand(HORIZONTAL,BAND_3DPLANE,"min",0,"blue");
    +$band[0]->ShowFrame(false);
    +$band[0]->SetDensity(20);
    +$band[1]=new PlotBand(HORIZONTAL,BAND_SOLID,0,"max","steelblue");
    +$band[1]->ShowFrame(false);
    +$graph->Add($band);
    + 
    +$graph->Add(new PlotLine(HORIZONTAL,0,"black",2));
    + 
    +//$graph->title->Set("Test of bar gradient fill");
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11);
    +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/stockex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/stockex1.html new file mode 100755 index 00000000..d829be34 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/stockex1.html @@ -0,0 +1,66 @@ +
    stockex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php // content="text/plain; charset=utf-8"
    +// Example of a stock chart
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_stock.php');
    + 
    +// Data must be in the format : open,close,min,max
    +$datay = array(
    +    34,42,27,45,
    +    55,25,14,59,
    +    15,40,12,47,
    +    62,38,25,65,
    +    38,49,32,64);
    + 
    +// Setup a simple graph
    +$graph = new Graph(300,200);
    +$graph->SetScale("textlin");
    +$graph->SetMarginColor('lightblue');
    +$graph->title->Set('Stockchart example');
    + 
    +// Create a new stock plot
    +$p1 = new StockPlot($datay);
    + 
    +// Width of the bars (in pixels)
    +$p1->SetWidth(9);
    + 
    +// Uncomment the following line to hide the horizontal end lines
    +//$p1->HideEndLines();
    + 
    +// Add the plot to the graph and send it back to the browser
    +$graph->Add($p1);
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex1.html new file mode 100755 index 00000000..da790546 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex1.html @@ -0,0 +1,102 @@ +
    sunspotsex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +function readsunspotdata($aFile, &$aYears, &$aSunspots) {
    +    $lines = @file($aFile,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
    +    if( $lines === false ) {
    +        throw new JpGraphException('Can not read sunspot data file.');
    +    }
    +    foreach( $lines as $line => $datarow ) {
    +        $split = preg_split('/[\s]+/',$datarow);
    +        $aYears[] = substr(trim($split[0]),0,4);
    +        $aSunspots[] = trim($split[1]);
    +    }
    +}
    + 
    +$year = array();
    +$ydata = array();
    +readsunspotdata('yearssn.txt',$year,$ydata);
    + 
    + // Width and height of the graph
    +$width = 600; $height = 200;
    + 
    +// Create a graph instance
    +$graph = new Graph($width,$height);
    + 
    +// Specify what scale we want to use,
    +// int = integer scale for the X-axis
    +// int = integer scale for the Y-axis
    +$graph->SetScale('intint');
    + 
    +// Setup a title for the graph
    +$graph->title->Set('Sunspot example');
    + 
    +// Setup titles and X-axis labels
    +$graph->xaxis->title->Set('(year from 1701)');
    + 
    +// Setup Y-axis title
    +$graph->yaxis->title->Set('(# sunspots)');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex2.html new file mode 100755 index 00000000..bca4f752 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex2.html @@ -0,0 +1,104 @@ +
    sunspotsex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +function readsunspotdata($aFile, &$aYears, &$aSunspots) {
    +    $lines = @file($aFile,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
    +    if( $lines === false ) {
    +        throw new JpGraphException('Can not read sunspot data file.');
    +    }
    +    foreach( $lines as $line => $datarow ) {
    +        $split = preg_split('/[\s]+/',$datarow);
    +        $aYears[] = substr(trim($split[0]),0,4);
    +        $aSunspots[] = trim($split[1]);
    +    }
    +}
    + 
    +$year = array();
    +$ydata = array();
    +readsunspotdata('yearssn.txt',$year,$ydata);
    + 
    + // Width and height of the graph
    +$width = 600; $height = 200;
    + 
    +// Create a graph instance
    +$graph = new Graph($width,$height);
    + 
    +// Specify what scale we want to use,
    +// int = integer scale for the X-axis
    +// int = integer scale for the Y-axis
    +$graph->SetScale('intint');
    + 
    +// Setup a title for the graph
    +$graph->title->Set('Sunspot example');
    + 
    +// Setup titles and X-axis labels
    +$graph->xaxis->title->Set('(year from 1701)');
    + 
    +// Setup Y-axis title
    +$graph->yaxis->title->Set('(# sunspots)');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetFillColor('orange@0.5');
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex3.html new file mode 100755 index 00000000..1478656e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex3.html @@ -0,0 +1,106 @@ +
    sunspotsex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +function readsunspotdata($aFile, &$aYears, &$aSunspots) {
    +    $lines = @file($aFile,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
    +    if( $lines === false ) {
    +        throw new JpGraphException('Can not read sunspot data file.');
    +    }
    +    foreach( $lines as $line => $datarow ) {
    +        $split = preg_split('/[\s]+/',$datarow);
    +        $aYears[] = substr(trim($split[0]),0,4);
    +        $aSunspots[] = trim($split[1]);
    +    }
    +}
    + 
    +$year = array();
    +$ydata = array();
    +readsunspotdata('yearssn.txt',$year,$ydata);
    + 
    + // Width and height of the graph
    +$width = 600; $height = 200;
    + 
    +// Create a graph instance
    +$graph = new Graph($width,$height);
    + 
    +// Specify what scale we want to use,
    +// int = integer scale for the X-axis
    +// int = integer scale for the Y-axis
    +$graph->SetScale('intint');
    + 
    +// Setup a title for the graph
    +$graph->title->Set('Sunspot example');
    + 
    +// Setup titles and X-axis labels
    +$graph->xaxis->title->Set('(year from 1701)');
    +$graph->xaxis->SetTickLabels($year);
    + 
    +// Setup Y-axis title
    +$graph->yaxis->title->Set('(# sunspots)');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetFillColor('orange@0.5');
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex4.html new file mode 100755 index 00000000..837dea24 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex4.html @@ -0,0 +1,106 @@ +
    sunspotsex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +function readsunspotdata($aFile, &$aYears, &$aSunspots) {
    +    $lines = @file($aFile,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
    +    if( $lines === false ) {
    +        throw new JpGraphException('Can not read sunspot data file.');
    +    }
    +    foreach( $lines as $line => $datarow ) {
    +        $split = preg_split('/[\s]+/',$datarow);
    +        $aYears[] = substr(trim($split[0]),0,4);
    +        $aSunspots[] = trim($split[1]);
    +    }
    +}
    + 
    +$year = array();
    +$ydata = array();
    +readsunspotdata('yearssn.txt',$year,$ydata);
    + 
    + // Width and height of the graph
    +$width = 600; $height = 200;
    + 
    +// Create a graph instance
    +$graph = new Graph($width,$height);
    + 
    +// Specify what scale we want to use,
    +// int = integer scale for the X-axis
    +// int = integer scale for the Y-axis
    +$graph->SetScale('intint',0,0,0,max($year)-min($year)+1);
    + 
    +// Setup a title for the graph
    +$graph->title->Set('Sunspot example');
    + 
    +// Setup titles and X-axis labels
    +$graph->xaxis->title->Set('(year from 1701)');
    +$graph->xaxis->SetTickLabels($year);
    + 
    +// Setup Y-axis title
    +$graph->yaxis->title->Set('(# sunspots)');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetFillColor('orange@0.5');
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex5.html new file mode 100755 index 00000000..efec7b86 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex5.html @@ -0,0 +1,114 @@ +
    sunspotsex5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +function readsunspotdata($aFile, &$aYears, &$aSunspots) {
    +    $lines = @file($aFile,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
    +    if( $lines === false ) {
    +        throw new JpGraphException('Can not read sunspot data file.');
    +    }
    +    foreach( $lines as $line => $datarow ) {
    +        $split = preg_split('/[\s]+/',$datarow);
    +        $aYears[] = substr(trim($split[0]),0,4);
    +        $aSunspots[] = trim($split[1]);
    +    }
    +}
    + 
    +$year = array();
    +$ydata = array();
    +readsunspotdata('yearssn.txt',$year,$ydata);
    + 
    +function year_callback($aLabel) {
    +    return 1700+(int)$aLabel;
    +}
    + 
    + // Width and height of the graph
    +$width = 600; $height = 200;
    + 
    +// Create a graph instance
    +$graph = new Graph($width,$height);
    + 
    +// Specify what scale we want to use,
    +// int = integer scale for the X-axis
    +// int = integer scale for the Y-axis
    +$graph->SetScale('intint');
    + 
    +// Setup a title for the graph
    +$graph->title->Set('Sunspot example');
    + 
    +// Setup titles and X-axis labels
    +$graph->xaxis->title->Set('(year from 1701)');
    +$graph->xaxis->SetLabelFormatCallback('year_callback');
    + 
    +// Setup Y-axis title
    +$graph->yaxis->title->Set('(# sunspots)');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetFillColor('orange@0.5');
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex6.html new file mode 100755 index 00000000..808ab49c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex6.html @@ -0,0 +1,104 @@ +
    sunspotsex6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +function readsunspotdata($aFile, &$aYears, &$aSunspots) {
    + 
    +    $lines = @file($aFile,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
    +    if( $lines === false ) {
    +        throw new JpGraphException('Can not read sunspot data file.');
    +    }
    +    foreach( $lines as $line => $datarow ) {
    +        $split = preg_split('/[\s]+/',$datarow);
    +        $aYears[] = substr(trim($split[0]),0,4);
    +        $aSunspots[] = trim($split[1]);
    +    }
    +}
    + 
    +$year = array();
    +$ydata = array();
    +readsunspotdata('yearssn.txt',$year,$ydata);
    + 
    + // Width and height of the graph
    +$width = 600; $height = 200;
    + 
    +// Create a graph instance
    +$graph = new Graph($width,$height);
    + 
    +// Specify what scale we want to use,
    +// int = integer scale for the X-axis
    +// int = integer scale for the Y-axis
    +$graph->SetScale('intint');
    + 
    +// Setup a title for the graph
    +$graph->title->Set('Sunspot example');
    + 
    +// Setup titles and X-axis labels
    +$graph->xaxis->title->Set('(year from 1701)');
    + 
    +// Setup Y-axis title
    +$graph->yaxis->title->Set('(# sunspots)');
    + 
    +// Create the bar plot
    +$barplot=new BarPlot($ydata);
    + 
    +// Add the plot to the graph
    +$graph->Add($barplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex7.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex7.html new file mode 100755 index 00000000..2a0a9423 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/sunspotsex7.html @@ -0,0 +1,112 @@ +
    sunspotsex7.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +function readsunspotdata($aFile, &$aYears, &$aSunspots) {
    +    $lines = @file($aFile,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
    +    if( $lines === false ) {
    +        throw new JpGraphException('Can not read sunspot data file.');
    +    }
    +    foreach( $lines as $line => $datarow ) {
    +        $split = preg_split('/[\s]+/',$datarow);
    +        $aYears[] = substr(trim($split[0]),0,4);
    +        $aSunspots[] = trim($split[1]);
    +    }
    +}
    + 
    +$year = array();
    +$ydata = array();
    +readsunspotdata('yearssn.txt',$year,$ydata);
    + 
    +// Just keep the last 20 values in the arrays
    +$year = array_slice($year, -20);
    +$ydata = array_slice($ydata, -20);
    + 
    + // Width and height of the graph
    +$width = 600; $height = 200;
    + 
    +// Create a graph instance
    +$graph = new Graph($width,$height);
    + 
    +// Specify what scale we want to use,
    +// text = txt scale for the X-axis
    +// int = integer scale for the Y-axis
    +$graph->SetScale('textint');
    + 
    +// Setup a title for the graph
    +$graph->title->Set('Sunspot example');
    + 
    +// Setup titles and X-axis labels
    +$graph->xaxis->title->Set('(year)');
    +$graph->xaxis->SetTickLabels($year);
    + 
    +// Setup Y-axis title
    +$graph->yaxis->title->Set('(# sunspots)');
    + 
    +// Create the bar plot
    +$barplot=new BarPlot($ydata);
    + 
    +// Add the plot to the graph
    +$graph->Add($barplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_flagex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_flagex1.html new file mode 100755 index 00000000..b1e7628b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_flagex1.html @@ -0,0 +1,138 @@ +
    table_flagex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +
    <?php
    +include '../jpgraph.php';
    +include '../jpgraph_canvas.php';
    +include '../jpgraph_table.php';
    +include '../jpgraph_iconplot.php';
    +include '../jpgraph_flags.php';
    + 
    +// Setup a basic canvas to use as graph to add the table
    +$graph = new CanvasGraph(500,200);
    + 
    +// Setup the basic table
    +$data = array(
    +    array('Areas'),
    +    array(''),
    +    array('','USA','UK','France','Denmark','Iceland','Canada'),
    +    array('Feb',13,17,15,8,3,9),
    +    array('Mar',34,35,26,20,22,16),
    +    array('Apr',41,43,49,45,51,47),
    +    array('Sum:',88,95,90,73,76,72));
    + 
    +$countries = array('united states','united kingdom','french republic','denmark','iceland','canada');
    + 
    +// Create a basic table and default fonr
    +$table = new GTextTable();
    +$table->Set($data);
    +$table->SetFont(FF_TIMES,FS_NORMAL,11);
    + 
    +// Adjust the font for row 0 and 6
    +$table->SetColFont(0,FF_ARIAL,FS_BOLD,11);
    +$table->SetRowFont(6,FF_TIMES,FS_BOLD,12);
    + 
    +// Set the minimum heigth/width
    +$table->SetMinRowHeight(2,10);
    +$table->SetMinColWidth(70);
    + 
    +// Add some padding (in pixels)
    +$table->SetRowPadding(2,0);
    +$table->SetRowGrid(6,1,'darkgray',TGRID_DOUBLE2);
    + 
    +// Setup the grid
    +$table->SetGrid(0);
    +$table->SetRowGrid(6,1,'black',TGRID_DOUBLE2);
    + 
    +// Merge all cells in row 0
    +$table->MergeRow(0);
    + 
    +// Set aligns
    +$table->SetAlign(3,0,6,6,'right');
    +$table->SetRowAlign(1,'center');
    +$table->SetRowAlign(2,'center');
    + 
    +// Set background colors
    +$table->SetRowFillColor(0,'lightgray@0.5');
    +$table->SetColFillColor(0,'lightgray@0.5');
    + 
    +// Add the country flags in row 1
    +$n = count($countries);
    +for($i=0; $i < $n; ++$i ) {
    +    $table->SetCellCountryFlag(1,$i+1,$countries[$i],0.5);
    +    $table->SetCellImageConstrain(1,$i+1,TIMG_HEIGHT,20);
    +}
    + 
    +// Add the table to the graph
    +$graph->Add($table);
    + 
    +// Send back the table graph to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto1.html new file mode 100755 index 00000000..d0fa5fe4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto1.html @@ -0,0 +1,40 @@ +
    table_howto1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Create a canvas graph where the table can be added
    +$graph = new CanvasGraph(70,50);
    + 
    +// Setup the basic table
    +$data = array( array(1,2,3,4),array(5,6,7,8));
    +$table = new GTextTable();
    +$table->Set($data);
    + 
    +// Add the table to the graph
    +$graph->Add($table);
    + 
    +// ... and send back the table to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto2.html new file mode 100755 index 00000000..8473ad7d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto2.html @@ -0,0 +1,48 @@ +
    table_howto2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Create a canvas graph where the table can be added
    +$graph = new CanvasGraph(70,50);
    + 
    +// Setup the basic table
    +$data = array( array(1,2,3,4),array(5,6,7,8));
    +$table = new GTextTable();
    +$table->Set($data);
    + 
    +// Merge all cellsn in the rectangle with
    +// top left corner = (0,2) and bottom right = (1,3)
    +$table->MergeCells(0,2,1,3);
    + 
    +// Add the table to the graph
    +$graph->Add($table);
    + 
    +// ... and send back the table to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto3.html new file mode 100755 index 00000000..8404611b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto3.html @@ -0,0 +1,46 @@ +
    table_howto3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Create a canvas graph where the table can be added
    +$graph = new CanvasGraph(70,50);
    + 
    +// Setup the basic table
    +$data = array( array(1,2,3,4),array(5,6,7,8));
    +$table = new GTextTable();
    +$table->Set($data);
    + 
    +// Merge all cells in row 0
    +$table->MergeRow(0);
    + 
    +// Add table to graph
    +$graph->Add($table);
    + 
    +// ... and send back the table to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto4.html new file mode 100755 index 00000000..50c92a6a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto4.html @@ -0,0 +1,54 @@ +
    table_howto4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Create a canvas graph where the table can be added
    +$graph = new CanvasGraph(70,50);
    + 
    +// Setup the basic table
    +$data = array( array(1,2,3,4),array(5,6,7,8));
    +$table = new GTextTable();
    +$table->Set($data);
    + 
    +// Merge all cells in row 0
    +$table->MergeRow(0);
    + 
    +// Set foreground and background color
    +$table->SetCellFillColor(0,0,'orange@0.7');
    +$table->SetCellColor(0,0,'darkred');
    + 
    +// Add the table to the graph
    +$graph->Add($table);
    + 
    +// and send it back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto5.html new file mode 100755 index 00000000..4f303227 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto5.html @@ -0,0 +1,58 @@ +
    table_howto5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Create a canvas graph where the table can be added
    +$graph = new CanvasGraph(70,60);
    + 
    +// Setup the basic table
    +$data = array( array(1,2,3,4),array(5,6,7,8));
    +$table = new GTextTable();
    +$table->Set($data);
    + 
    +// Merge all cells in row 0
    +$table->MergeRow(0);
    + 
    +// Adjust font in cell (0,0)
    +$table->SetCellFont(0,0,FF_ARIAL,FS_BOLD,14);
    + 
    +// Set left align for all cells in rectangle (0,0) - (0,3)
    +$table->SetAlign(0,0,0,3,'Left');
    + 
    +// Add table to graph
    +$graph->Add($table);
    + 
    +// ... send it back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto6.html new file mode 100755 index 00000000..f0aa3dda --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto6.html @@ -0,0 +1,62 @@ +
    table_howto6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Create a canvas graph where the table can be added
    +$graph = new CanvasGraph(150,60);
    + 
    +// Setup the basic table
    +$data = array( array(1,2,3,4),array(5,6,7,8));
    +$table = new GTextTable();
    +$table->Set($data);
    + 
    +// Merge all cells in row 0
    +$table->MergeRow(0);
    + 
    +// Setup font and color
    +$table->SetCellFont(0,0,FF_ARIAL,FS_BOLD,14);
    +$table->SetRowFillColor(0,'orange@0.5');
    +$table->SetRowColor(0,'darkred');
    + 
    +// Setup the minimum width of all columns
    +$table->SetMinColWidth(35);
    + 
    +// Add table to the graph
    +$graph->Add($table);
    + 
    +// ... send it back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto7.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto7.1.html new file mode 100755 index 00000000..d98a48e4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto7.1.html @@ -0,0 +1,66 @@ +
    table_howto7.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Create a canvas graph where the table can be added
    +$graph = new CanvasGraph(150,90);
    + 
    +// Setup the basic table
    +$data = array( array(1,2,3,4),array(5,6,7,8), array(6,8,10,12));
    +$table = new GTextTable();
    +$table->Set($data);
    + 
    +// Set default font in entire table
    +$table->SetFont(FF_ARIAL,FS_NORMAL,11);
    + 
    +// Setup font and color for row = 2
    +$table->SetRowFont(2,FF_ARIAL,FS_BOLD,11);
    +$table->SetRowFillColor(2,'orange@0.5');
    + 
    +// Setup minimum color width
    +$table->SetMinColWidth(35);
    + 
    +// Setup grid on row 2
    +$table->SetRowGrid(2,1,'black',TGRID_DOUBLE);
    + 
    +// Add table to the graph
    +$graph->Add($table);
    + 
    +// and send it back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto7.2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto7.2.html new file mode 100755 index 00000000..c99e40b0 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto7.2.html @@ -0,0 +1,66 @@ +
    table_howto7.2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Create a canvas graph where the table can be added
    +$graph = new CanvasGraph(150,90);
    + 
    +// Setup the basic table
    +$data = array( array(1,2,3,4),array(5,6,7,8), array(6,8,10,12));
    +$table = new GTextTable();
    +$table->Set($data);
    + 
    +// Set default font in entire table
    +$table->SetFont(FF_ARIAL,FS_NORMAL,11);
    + 
    +// Setup font and color for row = 2
    +$table->SetRowFont(2,FF_ARIAL,FS_BOLD,11);
    +$table->SetRowFillColor(2,'orange@0.5');
    + 
    +// Setup minimum color width
    +$table->SetMinColWidth(35);
    + 
    +// Setup grid on row 2
    +$table->SetRowGrid(2,1,'black',TGRID_DOUBLE2);
    + 
    +// Add table to the graph
    +$graph->Add($table);
    + 
    +// and send it back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto8.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto8.html new file mode 100755 index 00000000..24c4b1f6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto8.html @@ -0,0 +1,84 @@ +
    table_howto8.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Create a canvas graph where the table can be added
    +$graph = new CanvasGraph(150,90);
    + 
    +// Setup the basic table
    +$data = array( array(1,2,3,4),array(5,6,7,8), array(6,8,10,12));
    +$table = new GTextTable();
    +$table->Set($data);
    + 
    +// Setup overall table font
    +$table->SetFont(FF_ARIAL,FS_NORMAL,11);
    + 
    +// Setup font and color for row = 2
    +$table->SetRowFont(2,FF_ARIAL,FS_BOLD,11);
    +$table->SetRowFillColor(2,'orange@0.5');
    + 
    +// Setup minimum color width
    +$table->SetMinColWidth(35);
    + 
    +// Setup overall cell alignment for the table
    +$table->SetAlign('right');
    + 
    +// Setup overall table border
    +$table->SetBorder(0,'black');
    + 
    +// Setup overall table grid
    +$table->setGrid(0,'black');
    + 
    +// Set specific frid for row = 2
    +$table->SetRowGrid(2,1,'black',TGRID_DOUBLE2);
    + 
    +// Add the table to the graph
    +$graph->Add($table);
    + 
    +// and send it back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto9.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto9.html new file mode 100755 index 00000000..ddaa8dce --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_howto9.html @@ -0,0 +1,90 @@ +
    table_howto9.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Setup graph context
    +$graph = new CanvasGraph(165,90);
    + 
    +// Setup the basic table
    +$data = array( array(1,2,3,4),array(5,6,7,8), array(6,8,10,12));
    +$table = new GTextTable();
    +$table->Set($data);
    + 
    +// Setup overall table font
    +$table->SetFont(FF_ARIAL,FS_NORMAL,11);
    + 
    +// Setup font and color for row = 2
    +$table->SetRowFont(2,FF_ARIAL,FS_BOLD,11);
    +$table->SetRowFillColor(2,'orange@0.5');
    + 
    +// Setup minimum color width
    +$table->SetMinColWidth(40);
    + 
    +// Setup overall cell alignment for the table
    +$table->SetAlign('right');
    + 
    +// Setup overall table border
    +$table->SetBorder(0,'black');
    + 
    +// Setup overall table grid
    +$table->setGrid(0,'black');
    + 
    +// Set specific frid for row = 2
    +$table->SetRowGrid(2,1,'black',TGRID_DOUBLE2);
    + 
    +// Setup overall number format in all cells
    +$table->SetNumberFormat("%0.1f");
    + 
    +// Add table to the graph
    +$graph->Add($table);
    + 
    +// and send it back to the browser
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_iconex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_iconex1.html new file mode 100755 index 00000000..bd257f11 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_iconex1.html @@ -0,0 +1 @@ +001: Cannot read souce file: /root/jpgraph/trunk/src/Examples/table_iconex1.php diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_mex0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_mex0.html new file mode 100755 index 00000000..8fd9921c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_mex0.html @@ -0,0 +1,98 @@ +
    table_mex0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Setup graph context
    +$graph = new CanvasGraph(430,150);
    + 
    +// Setup the basic table
    +$data = array(
    +    array('',        'w631','w632','w633','w634','w635','w636'),
    +    array('Critical (sum)',13,17,15,8,3,9),
    +    array('High (sum)',34,35,26,20,22,16),
    +    array('Low (sum)',41,43,49,45,51,47),
    +    array('Sum:',88,95,90,73,76,72)
    +    );
    + 
    +// Setup a basic table
    +$table = new GTextTable();
    +$table->Set($data);
    + 
    +// Setup fonts
    +$table->SetFont(FF_TIMES,FS_NORMAL,11);
    +$table->SetColFont(0,FF_ARIAL,FS_NORMAL,11);
    +$table->SetRowFont(0,FF_ARIAL,FS_NORMAL,11);
    +$table->SetRowFont(4,FF_TIMES,FS_BOLD,14);
    + 
    +// Turn off the grid
    +$table->SetGrid(0);
    + 
    +// Setup color
    +$table->SetRowFillColor(0,'lightgray@0.5');
    +$table->SetRowFillColor(4,'lightgray@0.5');
    +$table->SetColFillColor(0,'lightgray@0.5');
    +$table->SetFillColor(0,0,4,0,'lightgray@0.5');
    + 
    +// Set default minimum column width
    +$table->SetMinColWidth(45);
    + 
    +// Set default table alignment
    +$table->SetAlign('right');
    + 
    +// Add table to the graph
    +$graph->Add($table);
    + 
    +// and send it back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_mex00.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_mex00.html new file mode 100755 index 00000000..c2b5e475 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_mex00.html @@ -0,0 +1,64 @@ +
    table_mex00.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Setup graph context
    +$graph = new CanvasGraph(430,150);
    + 
    +// Setup the basic table
    +$data = array(
    +    array('',        'w631','w632','w633','w634','w635','w636'),
    +    array('Critical (sum)',13,17,15,8,3,9),
    +    array('High (sum)',34,35,26,20,22,16),
    +    array('Low (sum)',41,43,49,45,51,47),
    +    array('Sum:',88,95,90,73,76,72)
    +    );
    + 
    +// Setup the basic table and font
    +$table = new GTextTable();
    +$table->Set($data);
    +$table->SetFont(FF_TIMES,FS_NORMAL,11);
    + 
    +// Set default table alignment
    +$table->SetAlign('right');
    + 
    +// Add table to graph
    +$graph->Add($table);
    + 
    +// and send it back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_mex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_mex1.html new file mode 100755 index 00000000..d4fba900 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_mex1.html @@ -0,0 +1,110 @@ +
    table_mex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Setup graph context
    +$graph = new CanvasGraph(430,150);
    + 
    +// Setup the basic table
    +$data = array(
    +    array('', 'w631', 'w632', 'w633', 'w634', 'w635', 'w636'),
    +    array('Critical (sum)',13,17,15,8,3,9),
    +    array('High (sum)',34,35,26,20,22,16),
    +    array('Low (sum)',41,43,49,45,51,47),
    +    array('Sum',88,95,90,73,76,72)
    +    );
    + 
    +// Setup the basic table and font
    +$table = new GTextTable();
    +$table->Set($data);
    +$table->SetFont(FF_ARIAL,FS_NORMAL,11);
    + 
    +// Setup default column width
    +$table->SetMinColWidth(40);
    + 
    +// Setup defalt table alignment
    +$table->SetAlign('right');
    + 
    +// Turn off border
    +$table->SetBorder(0);
    + 
    +// Turn off grid
    +$table->setGrid(0);
    + 
    +// Setup font for row 4 and 0
    +$table->SetRowFont(4,FF_ARIAL,FS_BOLD,11);
    +$table->SetRowFont(0,FF_ARIAL,FS_BOLD,11);
    + 
    +// Setup color
    +$table->SetRowFillColor(4,'orange@0.5');
    +$table->SetFillColor(0,1,0,6,'teal@0.8');
    + 
    + 
    +// Setup grids
    +$table->SetRowGrid(4,1,'black',TGRID_DOUBLE2);
    +$table->SetColGrid(1,1,'black',TGRID_SINGLE);
    +$table->SetRowGrid(1,1,'black',TGRID_SINGLE);
    + 
    +// Add table to the graph
    +$graph->Add($table);
    + 
    +// Send it back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_mex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_mex3.html new file mode 100755 index 00000000..cde0e945 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_mex3.html @@ -0,0 +1,116 @@ +
    table_mex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Setup graph context
    +$graph = new CanvasGraph(430,150);
    + 
    +// Setup the basic table
    +$data = array(
    +    array('',        'w631','w632','w633','w634','w635','w636'),
    +    array('Critical (sum)',13,17,15,8,3,9),
    +    array('High (sum)',34,35,26,20,22,16),
    +    array('Low (sum)',41,43,49,45,51,47),
    +    array('Sum:',88,95,90,73,76,72),
    +    );
    + 
    +// Setup the basic table and font
    +$table = new GTextTable();
    +$table->Set($data);
    +$table->SetFont(FF_ARIAL,FS_NORMAL,11);
    + 
    +// Set default minimum color width
    +$table->SetMinColWidth(40);
    + 
    +// Set default table alignment
    +$table->SetAlign('right');
    + 
    +// Turn off grid
    +$table->setGrid(0);
    + 
    +// Set table border
    +$table->SetBorder(2);
    + 
    +// Setup font
    +$table->SetRowFont(4,FF_ARIAL,FS_BOLD,11);
    +$table->SetRowFont(0,FF_ARIAL,FS_BOLD,11);
    +$table->SetFont(1,2,1,3,FF_ARIAL,FS_BOLD,11);
    + 
    +// Setup grids
    +$table->SetRowGrid(4,2,'black',TGRID_SINGLE);
    +$table->SetColGrid(1,1,'black',TGRID_SINGLE);
    +$table->SetRowGrid(1,1,'black',TGRID_SINGLE);
    + 
    +// Setup colors
    +$table->SetFillColor(0,1,0,6,'black');
    +$table->SetRowColor(0,'white');
    +$table->SetRowFillColor(4,'lightgray@0.3');
    +$table->SetFillColor(2,0,2,6,'lightgray@0.6');
    +$table->SetFillColor(1,2,1,3,'lightred');
    + 
    +// Add table to graph
    +$graph->Add($table);
    + 
    +// Send back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_vtext.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_vtext.html new file mode 100755 index 00000000..570fc34c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/table_vtext.html @@ -0,0 +1,82 @@ +
    table_vtext.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_canvas.php');
    +require_once ('jpgraph/jpgraph_table.php');
    + 
    +// Setup a basic canvas graph context
    +$graph = new CanvasGraph(630,600);
    + 
    +// Setup the basic table
    +$data = array(
    +    array('GROUP 1O',        'w631','w632','w633','w634','w635','w636'),
    +    array('Critical (sum)',13,17,15,8,3,9),
    +    array('High (sum)',34,35,26,20,22,16),
    +    array('Low (sum)',41,43,49,45,51,47),
    +    array('Sum:',88,95,90,73,76,72)
    +    );
    + 
    +// Setup a basic table
    +$table = new GTextTable();
    +$table->Set($data);
    +$table->SetAlign('right');
    +$table->SetFont(FF_TIMES,FS_NORMAL,12);
    +$table->SetCellFont(0,0,FF_ARIAL,FS_BOLD,16);
    + 
    +// Rotate the entire table 90 degrees
    +$table->SetTextOrientation(90);
    +//$table->SetCellTextOrientation(0,0,0);
    + 
    +// Setup background color for header column
    +$table->SetColFillColor(0,'lightgray');
    + 
    +// Set the imnimum row height
    +$table->SetMinRowHeight(0,150);
    + 
    +// Add table to graph
    +$graph->Add($table);
    + 
    +// and send it back to the client
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/tablebarex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/tablebarex1.html new file mode 100755 index 00000000..1b5eb311 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/tablebarex1.html @@ -0,0 +1,140 @@ +
    tablebarex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +
    <?php
    +include ("../jpgraph.php");
    +include ("../jpgraph_bar.php");
    +include ("../jpgraph_table.php");
    + 
    +$datay = array(
    +    array('Jan','Feb','Mar','Apr','May','Jun'),
    +    array(12,18,19,7,17,6),
    +    array(3,5,2,7,5,25),
    +    array(6,1.5,2.4,2.1,6.9,12.3))
    +;
    + 
    +// Some basic defines to specify the shape of the bar+table
    +$nbrbar = 6;
    +$cellwidth = 50;
    +$tableypos = 200;
    +$tablexpos = 60;
    +$tablewidth = $nbrbar*$cellwidth;
    +$rightmargin = 30;
    + 
    +// Overall graph size
    +$height = 320;
    +$width = $tablexpos+$tablewidth+$rightmargin;
    + 
    +// Create the basic graph. 
    +$graph = new Graph($width,$height);    
    +$graph->img->SetMargin($tablexpos,$rightmargin,30,$height-$tableypos);
    +$graph->SetScale("textlin");
    +$graph->SetMarginColor('white');
    + 
    +// Setup titles and fonts
    +$graph->title->Set('Bar and table');
    +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,14);
    +$graph->yaxis->title->Set("Flow");
    +$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,12);
    +$graph->yaxis->title->SetMargin(10);
    + 
    +// Create the bars and the accbar plot
    +$bplot = new BarPlot($datay[3]);
    +$bplot->SetFillColor("orange");
    +$bplot2 = new BarPlot($datay[2]);
    +$bplot2->SetFillColor("red");
    +$bplot3 = new BarPlot($datay[1]);
    +$bplot3->SetFillColor("darkgreen");
    +$accbplot = new AccBarPlot(array($bplot,$bplot2,$bplot3));
    +$accbplot->value->Show();
    +$graph->Add($accbplot);
    + 
    +//Setup the table
    +$table = new GTextTable();
    +$table->Set($datay);
    +$table->SetPos($tablexpos,$tableypos+1);
    + 
    +// Basic table formatting
    +$table->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$table->SetAlign('right');
    +$table->SetMinColWidth($cellwidth);
    +$table->SetNumberFormat('%0.1f');
    + 
    +// Format table header row
    +$table->SetRowFillColor(0,'teal@0.7');
    +$table->SetRowFont(0,FF_ARIAL,FS_BOLD,11);
    +$table->SetRowAlign(0,'center');
    + 
    +// .. and add it to the graph
    +$graph->Add($table);
    + 
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/textalignex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/textalignex1.html new file mode 100755 index 00000000..a227af84 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/textalignex1.html @@ -0,0 +1,180 @@ +
    textalignex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once "jpgraph/jpgraph.php";
    +require_once "jpgraph/jpgraph_canvas.php";
    + 
    +// We accept a URI argument to adjust the angle at what we display the text
    +if( empty($_GET['a']) ) {
    +    $angle=40;
    +}
    +else {
    +    $angle=$_GET['a'];
    +}
    + 
    +// Caption below the image
    +$caption = "Demonstration of different anchor points for texts as specified with\n".
    +    "TextAlign(). The red cross marks the coordinate that was given to\n".
    +    "stroke each instance of the string.\n(The green box is the bounding rectangle for the text.)";
    + 
    +$txt="TextAlign()";
    + 
    + 
    +// Initial width and height since we need a "dummy" canvas to
    +// calculate the height of the text strings
    +$w=480;$h=50;
    +$xm=90;$ym=80;
    + 
    +$g = new CanvasGraph($w,$h);
    + 
    +// Make the image easier to access
    +$img = $g->img;
    + 
    +// Get the bounding box for text
    +$img->SetFont(FF_ARIAL,FS_NORMAL,16);
    +$tw=$img->GetBBoxWidth($txt,$angle);
    +$th=$img->GetBBoxHeight($txt,$angle);
    + 
    +$img->SetFont(FF_ARIAL,FS_NORMAL,11);
    +$ch=$img->GetBBoxHeight($caption);
    + 
    +// Calculate needed height for the image
    +$h = 3*$th+2*$ym + $ch;
    +$g = new CanvasGraph($w,$h);
    +$img = $g->img;
    + 
    +// Alignment for anchor points to use
    +$anchors = array('left','top',
    +              'center','top',
    +              'right','top',
    +              'left','center',
    +              'center','center',
    +              'right','center',
    +              'left','bottom',
    +              'center','bottom',
    +              'right','bottom');
    + 
    +$n = count($anchors)/2;
    + 
    +for( $i=0,$r=0,$c=0; $i < $n; ++$i ) {
    + 
    +    $x = $c*($tw+$xm)+$xm/2;
    +    $y = $r*($th+$ym)+$ym/2-10;
    + 
    +    $img->SetColor('blue');
    +    $img->SetTextAlign($anchors[$i*2],$anchors[$i*2+1]);
    +    $img->SetFont(FF_ARIAL,FS_NORMAL,16);
    +    $img->StrokeText($x,$y,$txt,$angle,"left",true);
    + 
    +    $img->SetColor('black');
    +    $img->SetFont(FF_FONT1,FS_BOLD);
    +    $img->SetTextAlign('center','top');
    +    $align = sprintf('("%s","%s")',$anchors[$i*2],$anchors[$i*2+1]);
    +    $img->StrokeText($c*($tw/2+$xm)+$xm/2+$tw/2,$r*($th/2+$ym)+$th+$ym/2-4,$align);
    + 
    +    $c++;
    +    if( $c==3 ) {
    +        $c=0;$r++;
    +    }
    +}
    + 
    +// Draw the caption text
    +$img->SetTextAlign('center','bottom');
    +$img->SetFont(FF_ARIAL,FS_ITALIC,11);
    +$img->StrokeText($w/2,$h-10,$caption,0,'left');
    + 
    +$img->SetColor('navy');
    +$img->Rectangle(0,0,$w-1,$h-1);
    + 
    +// .. and send back to browser
    +$g->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/textpalignex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/textpalignex1.html new file mode 100755 index 00000000..b60dc33d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/textpalignex1.html @@ -0,0 +1,86 @@ +
    textpalignex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once "jpgraph/jpgraph.php";
    +require_once "jpgraph/jpgraph_canvas.php";
    + 
    +// Caption below the image
    +$txt="The day was rapidly becoming more and\nmore strange.\n\nNot only had he managed to\nget by the first pass without so much as\na hint of questions but now when he\ncould feel that the second pass wouldn't\nlong be noone had yet seen him.";
    + 
    +$w=950;$h=250;
    +$xm=20;$ym=20;
    +$tw=300;
    + 
    +$g = new CanvasGraph($w,$h);
    +$img = $g->img;
    + 
    +// Alignment for anchor points to use
    +$palign = array('left','center','right');
    + 
    +$n = count($palign);
    +$t = new Text($txt);
    + 
    +$y = $ym;
    +for( $i=0; $i < $n; ++$i ) {
    + 
    +    $x = $xm + $i*$tw;
    + 
    +    $t->SetColor('black');
    +    $t->SetAlign('left','top');
    +    $t->SetFont(FF_ARIAL,FS_NORMAL,11);
    +    $t->SetBox();
    +    $t->SetParagraphAlign($palign[$i]);
    +    $t->Stroke($img, $x,$y);
    + 
    +    $img->SetColor('black');
    +    $img->SetFont(FF_FONT1,FS_BOLD);
    +    $img->SetTextAlign('center','top');
    +    $img->StrokeText($x+140,$y+160,'"'.$palign[$i].'"'.' pargraph align');
    + 
    +}
    + 
    +// .. and send back to browser
    +$g->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/theme_example.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/theme_example.html new file mode 100755 index 00000000..e9027ec1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/theme_example.html @@ -0,0 +1,52 @@ +
    theme_example.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    +$data1y=array(47,80,40,116);
    +$graph = new Graph(400, 300, 'auto');
    +$graph->SetScale('textlin');
    + 
    +$theme_class = new AquaTheme;
    +$graph->SetTheme($theme_class);
    + 
    +// after setting theme, you can change details as you want
    +$graph->SetFrame(true, 'lightgray');                        // set frame visible
    + 
    +$graph->xaxis->SetTickLabels(array('A','B','C','D')); // change xaxis lagels
    +$graph->title->Set("Theme Example");                    // add title
    + 
    +// add barplot
    +$bplot = new BarPlot($data1y);
    +$graph->Add($bplot);
    + 
    +// you can change properties of the plot only after calling Add()
    +$bplot->SetWeight(0);
    +$bplot->SetFillGradient('#FFAAAA:0.7', '#FFAAAA:1.2', GRAD_VER);    
    + 
    +$graph->Stroke();
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/theme_samplele.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/theme_samplele.html new file mode 100755 index 00000000..81e4abe6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/theme_samplele.html @@ -0,0 +1 @@ +001: Cannot read souce file: /root/jpgraph/trunk/src/Examples/theme_samplele.php diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/timestampex01.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/timestampex01.html new file mode 100755 index 00000000..ad94315a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/timestampex01.html @@ -0,0 +1,118 @@ +
    timestampex01.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +
    <?php // content="text/plain; charset=utf-8"
    +// Example on how to treat and format timestamp as human readable labels
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Number of "fake" data points
    +DEFINE('NDATAPOINTS',500);
    + 
    +// Assume data points are sample every 10th second
    +DEFINE('SAMPLERATE',10); 
    + 
    +// Callback formatting function for the X-scale to convert timestamps
    +// to hour and minutes.
    +function TimeCallback($aVal) {
    +    return Date('H:i', $aVal);
    +}
    + 
    +// Get start time
    +$start = time();
    +// Set the start time to be on the closest minute just before the "start" timestamp
    +$adjstart = floor($start / 60);
    + 
    +// Create a data set in range (20,100) and X-positions
    +// We also apply a simple low pass filter on the data to make it less
    +// random and a little smoother
    +$data = array();
    +$xdata = array();
    +$data[0] = rand(20,100);
    +$xdata[0] = $adjstart;
    +for( $i=1; $i < NDATAPOINTS; ++$i ) {
    +    $data[$i] = rand(20,100)*0.2 + $data[$i-1]*0.8;
    +    $xdata[$i] = $adjstart + $i * SAMPLERATE;
    +}
    + 
    +// Assume that the data points represents data that is sampled every 10s
    +// when determing the end value on the scale. We also add some extra
    +// length to end on an even label tick.
    +$adjend = $adjstart  + (NDATAPOINTS+10)*10;
    + 
    +$graph = new Graph(500,250);
    +$graph->SetMargin(40,20,30,50);
    + 
    +// Now specify the X-scale explicit but let the Y-scale be auto-scaled
    +$graph->SetScale("intlin",0,0,$adjstart,$adjend);
    +$graph->title->Set("Example on TimeStamp Callback");
    + 
    +// Setup the callback and adjust the angle of the labels
    +$graph->xaxis->SetLabelFormatCallback('TimeCallback');
    +$graph->xaxis->SetLabelAngle(90);
    + 
    +// Set the labels every 5min (i.e. 300seconds) and minor ticks every minute
    +$graph->xaxis->scale->ticks->Set(300,60);
    + 
    +$line = new LinePlot($data,$xdata);
    +$line->SetColor('lightblue');
    +$graph->Add($line);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/titleex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/titleex1.html new file mode 100755 index 00000000..03223c9b --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/titleex1.html @@ -0,0 +1,58 @@ +
    titleex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some data
    +$ydata = array(11,3,8,12,5,1,9,13,5,7);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(200,150);
    +$graph->SetScale("textlin");
    +$graph->SetMargin(25,10,30,30);
    + 
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    +$graph->title->Set('The Title');
    +$graph->subtitle->SetFont(FF_ARIAL,FS_BOLD,10);
    +$graph->subtitle->Set('The Subtitle');
    +$graph->subsubtitle->SetFont(FF_ARIAL,FS_ITALIC,9);
    +$graph->subsubtitle->Set('The Subsubitle');
    + 
    +// Create the linear plot
    +$lineplot=new LinePlot($ydata);
    +$lineplot->SetColor("blue");
    + 
    +// Add the plot to the graph
    +$graph->Add($lineplot);
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/topxaxisex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/topxaxisex1.html new file mode 100755 index 00000000..11d4b812 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/topxaxisex1.html @@ -0,0 +1,94 @@ +
    topxaxisex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +// Some data
    +$datay = array(25,29,29,39,55);
    + 
    +$graph = new Graph(400,200,'auto');
    +$graph->img->SetMargin(40,40,40,20);
    + 
    +$graph->SetScale("linlin");
    +$graph->SetShadow();
    +$graph->title->Set("Top X-axis");
    + 
    +// Start at 0
    +$graph->yscale->SetAutoMin(0);
    + 
    +// Add some air around the Y-scale
    +$graph->yscale->SetGrace(100);
    + 
    +// Use built in font
    +$graph->title->SetFont(FF_FONT1,FS_BOLD);
    + 
    +// Adjust the X-axis
    +$graph->xaxis->SetPos("max");
    +$graph->xaxis->SetLabelSide(SIDE_UP);
    +$graph->xaxis->SetTickSide(SIDE_DOWN);
    + 
    +// Create the line plot
    +$p1 = new LinePlot($datay);
    +$p1->SetColor("blue");
    + 
    +// Specify marks for the line plots
    +$p1->mark->SetType(MARK_FILLEDCIRCLE);
    +$p1->mark->SetFillColor("red");
    +$p1->mark->SetWidth(4);
    + 
    +// Show values
    +$p1->value->Show();
    + 
    +// Add lineplot to graph
    +$graph->Add($p1);
    + 
    +// Output line
    +$graph->Stroke();
    + 
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/universal_example.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/universal_example.html new file mode 100755 index 00000000..01b47da6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/universal_example.html @@ -0,0 +1,116 @@ +
    universal_example.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$theme = isset($_GET['theme']) ? $_GET['theme'] : null;
    + 
    +$data = array (
    +  0 => array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ),
    +  1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ),
    +  2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ),
    +  3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ),
    +  4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ),
    +  5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ),
    +  6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ),
    +  7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ),
    +  8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ),
    +);
    + 
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(400,300);    
    + 
    +$graph->SetScale("textlin");
    +if ($theme) {
    +  $graph->SetTheme(new $theme());
    +}
    +$theme_class = new UniversalTheme;
    +$graph->SetTheme($theme_class);
    + 
    +$plot = array();
    +// Create the bar plots
    +for ($i = 0; $i < 4; $i++) {
    +  $plot[$i] = new BarPlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.($i+1));
    +}
    +//$acc1 = new AccBarPlot(array($plot[0], $plot[1]));
    +//$acc1->value->Show();
    +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] ));
    + 
    +for ($i = 4; $i < 8; $i++) {
    +  $plot[$i] = new LinePlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.$i);
    +  $plot[$i]->value->Show();
    +}
    + 
    +$graph->Add($gbplot);
    +$graph->Add($plot[4]);
    + 
    +$title = "UniversalTheme Example";
    +$title = mb_convert_encoding($title,'UTF-8');
    +$graph->title->Set($title);
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/vivid_example.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/vivid_example.html new file mode 100755 index 00000000..c1a30aab --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/vivid_example.html @@ -0,0 +1,114 @@ +
    vivid_example.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    +require_once ('jpgraph/jpgraph_line.php');
    + 
    +$theme = isset($_GET['theme']) ? $_GET['theme'] : null;
    + 
    +$data = array (
    +  0 => array (0 => 79, 1 => -25, 2 => -7, 3 => 85, 4 => -26, 5 => -32, ),
    +  1 => array (0 => 76, 1 => 51, 2 => 86, 3 => 12, 4 => -7, 5 => 94, ),
    +  2 => array (0 => 49, 1 => 38, 2 => 7, 3 => -40, 4 => 9, 5 => -7, ),
    +  3 => array ( 0 => 69, 1 => 96, 2 => 49, 3 => 7, 4 => 92, 5 => -38, ),
    +  4 => array ( 0 => 68, 1 => 16, 2 => 82, 3 => -49, 4 => 50, 5 => 7, ),
    +  5 => array ( 0 => -37, 1 => 28, 2 => 32, 3 => 6, 4 => 13, 5 => 57, ),
    +  6 => array ( 0 => 24, 1 => -11, 2 => 7, 3 => 10, 4 => 51, 5 => 51, ),
    +  7 => array ( 0 => 3, 1 => -1, 2 => -12, 3 => 61, 4 => 10, 5 => 47, ),
    +  8 => array ( 0 => -47, 1 => -21, 2 => 43, 3 => 53, 4 => 36, 5 => 34, ),
    +);
    + 
    +// Create the graph. These two calls are always required
    +$graph = new Graph(400,300);    
    + 
    +$graph->SetScale("textlin");
    +if ($theme) {
    +  $graph->SetTheme(new $theme());
    +}
    +$theme_class = new VividTheme;
    +$graph->SetTheme($theme_class);
    + 
    +$plot = array();
    +// Create the bar plots
    +for ($i = 0; $i < 4; $i++) {
    +  $plot[$i] = new BarPlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.($i+1));
    +}
    +//$acc1 = new AccBarPlot(array($plot[0], $plot[1]));
    +//$acc1->value->Show();
    +$gbplot = new GroupBarPlot(array($plot[2], $plot[1] ));
    + 
    +for ($i = 4; $i < 8; $i++) {
    +  $plot[$i] = new LinePlot($data[$i]);
    +  $plot[$i]->SetLegend('plot'.$i);
    +  $plot[$i]->value->Show();
    +}
    + 
    +$graph->Add($gbplot);
    +$graph->Add($plot[4]);
    + 
    +$title = "VividTheme Example";
    +$title = mb_convert_encoding($title,'UTF-8');
    +$graph->title->Set($title);
    +$graph->xaxis->title->Set("X-title");
    +$graph->yaxis->title->Set("Y-title");
    + 
    +// Display the graph
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_2plots_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_2plots_ex1.html new file mode 100755 index 00000000..2794c582 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_2plots_ex1.html @@ -0,0 +1,86 @@ +
    windrose_2plots_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal idex of axis as well
    +// as the direction label
    +$data = array(
    +    1 => array(10,10,13,7),
    +    2 => array(2,8,10),
    +    4 => array(1,12,22),
    +    );
    + 
    +$data2 = array(
    +    4 => array(12,8,2,3),
    +    2 => array(5,4,4,5,2),
    +    );
    + 
    +// Create a new small windrose graph
    +$graph = new WindroseGraph(660,400);
    +$graph->SetShadow();
    + 
    +$graph->title->Set('Two windrose plots in one graph');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    +$graph->subtitle->Set('(Using Box() for each plot)');
    + 
    +$wp = new WindrosePlot($data);
    +$wp->SetType(WINDROSE_TYPE8);
    +$wp->SetSize(0.42);
    +$wp->SetPos(0.25,0.55);
    +$wp->SetBox();
    + 
    +$wp2 = new WindrosePlot($data2);
    +$wp2->SetType(WINDROSE_TYPE16);
    +$wp2->SetSize(0.42);
    +$wp2->SetPos(0.74,0.55);
    +$wp2->SetBox();
    +$wp2->SetRangeColors(array('green','yellow','red','brown'));
    + 
    +$graph->Add($wp);
    +$graph->Add($wp2);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_bgimg_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_bgimg_ex1.html new file mode 100755 index 00000000..b38ed694 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_bgimg_ex1.html @@ -0,0 +1,98 @@ +
    windrose_bgimg_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    +require_once ('jpgraph/jpgraph_flags.php');
    + 
    +// Data can be specified using both ordinal idex of axis as well
    +// as the direction label
    +$data2 = array(
    +    'vsv' => array(12,8,2,3),
    +    6 => array(5,4,4,5,4),
    +    );
    + 
    +$se_CompassLbl = array('O','ONO','NO','NNO','N','NNV','NV','VNV','V','VSV','SV','SSV','S','SSO','SO','OSO');
    + 
    +// Create a new small windrose graph
    +$graph = new WindroseGraph(400,400);
    +$graph->SetMargin(25,25,25,25);
    +$graph->SetFrame();
    + 
    +$graph->title->Set('Example with background flag');
    +#$graph->title->SetFont(FF_VERA,FS_BOLD,14);
    + 
    + 
    +//$graph->SetBackgroundImage('bkgimg.jpg',BGIMG_FILLFRAME);
    +//$graph->SetBackgroundImageMix(90);
    +$graph->SetBackgroundCFlag(28,BGIMG_FILLFRAME,15);
    + 
    + 
    +$wp2 = new WindrosePlot($data2);
    +$wp2->SetType(WINDROSE_TYPE16);
    +$wp2->SetSize(0.55);
    +$wp2->SetPos(0.5,0.5);
    +$wp2->SetAntiAlias(false);
    + 
    +$wp2->SetFont(FF_ARIAL,FS_BOLD,10);
    +$wp2->SetFontColor('black');
    + 
    +$wp2->SetCompassLabels($se_CompassLbl);
    +$wp2->legend->SetMargin(20,5);
    + 
    +$wp2->scale->SetZFont(FF_ARIAL,FS_NORMAL,8);
    +$wp2->scale->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$wp2->scale->SetLabelFillColor('white','white');
    + 
    +$wp2->SetRangeColors(array('green','yellow','red','brown'));
    + 
    +$graph->Add($wp2);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex0.html new file mode 100755 index 00000000..9c02952e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex0.html @@ -0,0 +1,48 @@ +
    windrose_ex0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label
    +$data = array(
    +    0 => array(5,5,5,8),
    +    1 => array(3,4,1,4),
    +    'WSW' => array(1,5,5,3),
    +    'N' => array(2,3,8,1,1),
    +    15 => array(2,3,5));
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,400);
    +$graph->title->Set('A basic Windrose graph');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Add and send back to browser
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex1.html new file mode 100755 index 00000000..d98d4465 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex1.html @@ -0,0 +1,54 @@ +
    windrose_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +$data = array(
    +    0 => array(1,1,2.5,4),
    +    1 => array(3,4,1,4),
    +    'wsw' => array(1,5,5,3),
    +    'N' => array(2,7,5,4,2),
    +    15 => array(2,7,12));
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,400);
    + 
    +// Setup title
    +$graph->title->Set('Windrose basic example');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    +$wp->SetRadialGridStyle('solid');
    +$graph->Add($wp);
    + 
    +// Send the graph to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex2.html new file mode 100755 index 00000000..e6242dd1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex2.html @@ -0,0 +1,96 @@ +
    windrose_ex2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label
    +$data = array(
    +    0 => array(1,1,2.5,4),
    +    1 => array(3,4,1,4),
    +    3 => array(2,7,4,4,3),
    +    5 => array(2,7,1,2));
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,400);
    + 
    +// Setup title
    +$graph->title->Set('Windrose example 2');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Make it have 8 compass direction
    +$wp->SetType(WINDROSE_TYPE8);
    + 
    +// Setup the weight of the laegs for the different ranges
    +$weights = array_fill(0,8,10);
    +$wp->SetRangeWeights($weights);
    + 
    +// Adjust the font and font color for scale labels
    +$wp->scale->SetFont(FF_TIMES,FS_NORMAL,11);
    +$wp->scale->SetFontColor('navy');
    + 
    +// Set the diametr for the plot to 160 pixels
    +$wp->SetSize(200);
    + 
    +// Set the size of the innermost center circle to 30% of the plot size
    +$wp->SetZCircleSize(0.2);
    + 
    +// Adjust the font and font color for compass directions
    +$wp->SetFont(FF_ARIAL,FS_NORMAL,12);
    +$wp->SetFontColor('darkgreen');
    + 
    +// Add and send back the graph to the client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex3.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex3.html new file mode 100755 index 00000000..45a9a2f6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex3.html @@ -0,0 +1,144 @@ +
    windrose_ex3.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label
    +$data[0] = array(
    +    0 => array(1,1,2.5,4),
    +    1 => array(3,4,1,4),
    +    3 => array(2,7,4,4,3),
    +    5 => array(2,7,1,2));
    + 
    +$data[1] = array(
    +    "n" => array(1,1,2.5,4),
    +    "ssw" => array(3,4,1,4),
    +    "se" => array(2,7,4,4,3));
    + 
    +// Store the position and size data for each plot in an
    +// array to make it easier to create multiple plots.
    +// The format choosen for the layout data is
    +// (type,x-pos,y-pos,size, z-circle size)
    +$layout = array(
    +    array(WINDROSE_TYPE8,0.25,0.55,0.4,0.25),
    +    array(WINDROSE_TYPE16,0.75,0.55,0.4,0.25));
    + 
    +$legendtxt = array('(m/s) Station 7','(m/s) Station 12');
    + 
    +// First create a new windrose graph with a dropshadow
    +$graph = new WindroseGraph(600,350);
    +$graph->SetShadow('darkgray');
    + 
    +// Setup titles
    +$graph->title->Set('Windrose example 3');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    +$graph->subtitle->Set('(Multiple plots in the same graph)');
    +$graph->subtitle->SetFont(FF_VERDANA,FS_NORMAL,9);
    +$graph->subtitle->SetColor('navy');
    + 
    +// Create the two windrose plots.
    +for( $i=0; $i < count($data); ++$i ) {
    +    $wp[$i] = new WindrosePlot($data[$i]);
    + 
    +    // Make it have 8 compass direction
    +    $wp[$i]->SetType($layout[$i][0]);
    + 
    +    // Adjust the font and font color for scale labels
    +    $wp[$i]->scale->SetFont(FF_TIMES,FS_NORMAL,10);
    +    $wp[$i]->scale->SetFontColor('navy');
    + 
    +    // Set the position of the plot
    +    $wp[$i]->SetPos($layout[$i][1],$layout[$i][2]);
    + 
    +    // Set the diameter for the plot to 30% of the width of the graph pixels
    +    $wp[$i]->SetSize($layout[$i][3]);
    + 
    +    // Set the size of the innermost center circle to 30% of the plot size
    +    $wp[$i]->SetZCircleSize($layout[$i][4]);
    + 
    +    // Adjust the font and font color for compass directions
    +    $wp[$i]->SetFont(FF_ARIAL,FS_NORMAL,10);
    +    $wp[$i]->SetFontColor('darkgreen');
    + 
    +    // Add legend text
    +    $wp[$i]->legend->SetText($legendtxt[$i]);
    + 
    +    $graph->Add($wp[$i]);
    +}
    + 
    +// Send the graph to the browser
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex4.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex4.html new file mode 100755 index 00000000..9b7e4f4a --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex4.html @@ -0,0 +1,114 @@ +
    windrose_ex4.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label
    +$data = array(
    +    0 => array(1,1,2.5,4),
    +    1 => array(3,4,1,4),
    +    3 => array(2,7,4,4,3),
    +    5 => array(2,7,1,2));
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,400);
    + 
    +// Setup title
    +$graph->title->Set('Windrose example 4');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Adjust the font and font color for scale labels
    +$wp->scale->SetFont(FF_TIMES,FS_NORMAL,11);
    +$wp->scale->SetFontColor('navy');
    + 
    +// Set the diameter and position for plot
    +$wp->SetSize(190);
    + 
    +// Set the size of the innermost center circle to 40% of the plot size
    +// Note that we can have the automatic "Zero" sum appear in our custom text
    +$wp->SetZCircleSize(0.38);
    +$wp->scale->SetZeroLabel("Station 12\n(Calm %d%%)");
    + 
    +// Adjust color and font for center circle text
    +$wp->scale->SetZFont(FF_ARIAL,FS_NORMAL,9);
    +$wp->scale->SetZFontColor('darkgreen');
    + 
    +// Adjust the font and font color for compass directions
    +$wp->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$wp->SetFontColor('darkgreen');
    + 
    +// Adjust the margin to the compass directions
    +$wp->SetLabelMargin(50);
    + 
    +// Adjust grid colors
    +$wp->SetGridColor('silver','blue');
    + 
    +// Add (m/s) text to legend
    +$wp->legend->SetText('(m/s)');
    +$wp->legend->SetMargin(20,5);
    + 
    +// Add and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex5.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex5.html new file mode 100755 index 00000000..3b254519 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex5.html @@ -0,0 +1,186 @@ +
    windrose_ex5.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data
    +$data = array(
    +    0 => array(1,1,2.5,4),
    +    1 => array(3,4,1,4),
    +    3 => array(2,7,4,4,3),
    +    5 => array(2,7,1,2));
    + 
    +// Text to be added.
    +$txt=array();
    +$txt[0] = "It is possible to add arbitrary,multi line, text to a graph. ";
    +$txt[0] .= "Such a paragraph can have it's text be left, right or center ";
    +$txt[0] .= "aligned.";
    +$txt[1] = "This is an example of a right aligned paragraph.";
    +$txt[2] = "Finally we can show a center aligned paragraph without box.";
    + 
    +// We store the layout for each of the text boxes in an array
    +// to keep the code clean
    +$txtlayout = array(
    +    array(0.97,0.15,25,'left','black','lightblue'),
    +    array(0.97,0.4,20,'right','black','lightblue'),
    +    array(0.97,0.7,20,'center','darkred',false,FF_COMIC,FS_NORMAL,12),
    +);
    + 
    +// Range colors to be used
    +$rangeColors = array('silver','khaki','orange','brown','blue','navy','maroon','red');
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(570,430);
    +$graph->title->Set('Windrose example 5');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    + 
    +// Setup graph background color
    +$graph->SetColor('darkgreen@0.7');
    + 
    +// Setup all the defined text boxes
    +$n = count($txt);
    +for( $i=0; $i < $n; ++$i ) {
    +    $txtbox[$i] = new Text($txt[$i]);
    +    $txtbox[$i]->SetPos($txtlayout[$i][0],$txtlayout[$i][1],'right');
    +    $txtbox[$i]->SetWordwrap($txtlayout[$i][2]);
    +    $txtbox[$i]->SetParagraphAlign($txtlayout[$i][3]);
    +    $txtbox[$i]->SetColor($txtlayout[$i][4]);
    +    $txtbox[$i]->SetBox($txtlayout[$i][5]);
    +    if( count($txtlayout[$i]) > 6 )
    +    $txtbox[$i]->SetFont($txtlayout[$i][6],$txtlayout[$i][7],$txtlayout[$i][8]);
    +}
    +$graph->Add($txtbox);
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Set background color for plot area
    +$wp->SetColor('lightyellow');
    + 
    +// Add a box around the plot
    +$wp->SetBox();
    + 
    +// Setup the colors for the ranges
    +$wp->SetRangeColors($rangeColors);
    + 
    +// Adjust the font and font color for scale labels
    +$wp->scale->SetFont(FF_ARIAL,FS_NORMAL,9);
    +$wp->scale->SetFontColor('navy');
    + 
    +// Set the diameter and position for plot
    +$wp->SetSize(190);
    +$wp->SetPos(0.35,0.53);
    + 
    +$wp->SetZCircleSize(0.2);
    + 
    +// Adjust the font and font color for compass directions
    +$wp->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$wp->SetFontColor('darkgreen');
    + 
    +// Adjust the margin to the compass directions
    +$wp->SetLabelMargin(50);
    + 
    +// Adjust grid colors
    +$wp->SetGridColor('silver','blue');
    + 
    +// Add (m/s) text to legend
    +$wp->legend->SetText('(m/s)');
    +$wp->legend->SetMargin(20,5);
    + 
    +// Add plot and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex6.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex6.1.html new file mode 100755 index 00000000..31f72430 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex6.1.html @@ -0,0 +1,176 @@ +
    windrose_ex6.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +$data = array(
    +    '10'  => array(1,1,2.5,4),
    +    '32.0' => array(3,4,1,4),
    +    '120.5' => array(2,3,4,4,3,2,1),
    +    '223.2' => array(2,4,1,2,2),
    +    '285.7' => array(2,2,1,2,4,2,1,1)
    +);
    + 
    +// This file is encode din utf-8. The two Kanji characters roughly means
    +// 中 = Chinese
    +// 文 = Sentences
    +$ctxt = '中文';
    + 
    +// Specify text for direction labels
    +$labels = array(
    +    '120.5' => $ctxt,
    +    '232.2' => "Reference\n#13 Ver:2");
    + 
    +// Range colors to be used
    +$rangeColors = array('khaki','yellow','orange','orange:0.7','brown','darkred','black');
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,450);
    + 
    +// Setup title
    +$graph->title->Set('Using chinese charecters');
    +#$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    +$graph->subtitle->Set('(Free type plot)');
    +#$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10);
    +$graph->subtitle->SetColor('navy');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Setup a free plot
    +$wp->SetType(WINDROSE_TYPEFREE);
    + 
    +// Setup labels
    +$wp->SetLabels($labels);
    +$wp->SetLabelPosition(LBLPOSITION_CENTER);
    +$wp->SetLabelMargin(30);
    + 
    +// Setup the colors for the ranges
    +$wp->SetRangeColors($rangeColors);
    + 
    +// Adjust the font and font color for scale labels
    +#$wp->scale->SetFont(FF_ARIAL,FS_NORMAL,9);
    + 
    +// Set the diameter and position for plot
    +#$wp->SetSize(240);
    +$wp->SetSize(200);
    +$wp->SetZCircleSize(30);
    +$wp->SetPos(0.5,0.5);
    + 
    +// Adjust the font and font color for compass directions
    +#$wp->SetFont(FF_CHINESE,FS_NORMAL,12);
    +$wp->SetFontColor('darkgreen');
    + 
    +// Adjust grid colors
    +$wp->SetGridColor('darkgreen@0.7','blue');
    + 
    +// Add (m/s) text to legend
    +$wp->legend->SetText('(m/s)');
    +$wp->legend->SetTFontColor('blue');
    + 
    +// Set legend label font color
    +$wp->legend->SetLFontColor('orange:0.7');
    +#$wp->legend->SetLFont(FF_ARIAL,FS_ITALIC,8);
    + 
    +// Display legend values with no decimals
    +$wp->legend->SetFormat('%d');
    + 
    +// Set the circle font to use chinse character set
    +// Note: When FF_CHINESE is used the input charectr data are
    +// assumed to already be in utf-8 encoding
    +#$wp->legend->SetCFont(FF_CHINESE,FS_NORMAL,14);
    +$wp->legend->SetCircleText($ctxt);
    +$wp->legend->SetCFontColor('red');
    + 
    +// Add plot to graph and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex6.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex6.html new file mode 100755 index 00000000..d91e7529 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex6.html @@ -0,0 +1,142 @@ +
    windrose_ex6.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label
    +$data = array(
    +    '10'  => array(1,1,2.5,4),
    +    '32.0' => array(3,4,1,4),
    +    '120.5' => array(2,3,4,4,3,2,1),
    +    '223.2' => array(2,4,1,2,2),
    +    '285.7' => array(2,2,1,2,4,2,1,1)
    +);
    + 
    +// Specify text for direction labels
    +$labels = array( '120.5' => "Plant\n#1275",
    +         '285.7' => "Reference\n#13 Ver:2");
    + 
    +// Range colors to be used
    +$rangeColors = array('khaki','yellow','orange','orange:0.7','brown','darkred','black');
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,450);
    + 
    +// Setup titles
    +$graph->title->Set('Windrose example 6');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    + 
    +$graph->subtitle->Set('(Free type plot)');
    +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10);
    +$graph->subtitle->SetColor('navy');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Setup a free plot
    +$wp->SetType(WINDROSE_TYPEFREE);
    + 
    +// Setup labels
    +$wp->SetLabels($labels);
    +$wp->SetLabelPosition(LBLPOSITION_CENTER);
    +$wp->SetLabelMargin(30);
    + 
    +// Setup the colors for the ranges
    +$wp->SetRangeColors($rangeColors);
    + 
    +// Adjust the font and font color for scale labels
    +$wp->scale->SetFont(FF_ARIAL,FS_NORMAL,9);
    + 
    +// Set the diameter and position for plot
    +$wp->SetSize(230);
    +$wp->SetZCircleSize(30);
    + 
    +// Adjust the font and font color for compass directions
    +$wp->SetFont(FF_ARIAL,FS_NORMAL,10);
    +$wp->SetFontColor('darkgreen');
    + 
    +// Adjust grid colors
    +$wp->SetGridColor('darkgreen@0.7','blue');
    + 
    +// Add (m/s) text to legend
    +$wp->legend->SetText('(m/s)');
    + 
    +// Display legend values with no decimals
    +$wp->legend->SetFormat('%d');
    + 
    +// Add plot to graph and send back to the client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex7.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex7.1.html new file mode 100755 index 00000000..54dd5966 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex7.1.html @@ -0,0 +1,132 @@ +
    windrose_ex7.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    + 
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label.
    +$data = array(
    +    2 => array(1,15,7.5,2),
    +    5 => array(1,1,1.5,2),
    +    7 => array(1,2,10,3,2),
    +    8 => array(2,3,1,3,1,2),
    +    );
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(590,580);
    +$graph->title->Set('Japanese locale');
    +#$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    +$graph->title->SetColor('navy');
    + 
    +// Create the free windrose plot.
    +$wp = new WindrosePlot($data);
    +$wp->SetType(WINDROSE_TYPE8);
    + 
    +// Add some "arbitrary" text to the center
    +$wp->scale->SetZeroLabel("SOx\n8%%");
    + 
    +// Localize the compass direction labels into Japanese
    +// Note: The labels for data must now also match the exact
    +// string for the compass directions.
    +//
    +// E   東
    +// NE  北東
    +// N   北
    +// NW  北西
    +// W   西
    +// SW  南西
    +// S   南
    +// SE  南東
    +$jp_CompassLbl = array('','','北東','','','','北西','',
    +                        '西','','南西','','','','南東','');
    +$wp->SetCompassLabels($jp_CompassLbl);
    +#$wp->SetFont(FF_MINCHO,FS_NORMAL,15);
    + 
    +// Localize the "Calm" text into Swedish and make the circle
    +// slightly bigger than default
    +$jp_calmtext = '平穏';
    +$wp->legend->SetCircleText($jp_calmtext);
    +$wp->legend->SetCircleRadius(20);
    +#$wp->legend->SetCFont(FF_MINCHO,FS_NORMAL,10);
    +$wp->legend->SetMargin(5,0);
    +$wp->SetPos(0.5, 0.5);
    + 
    +// Adjust the displayed ranges
    +$ranges = array(1,3,5,8,12,19,29);
    +$wp->SetRanges($ranges);
    + 
    +// Set the scale to always have max value of 30
    +$wp->scale->Set(30,10);
    +#$wp->scale->SetFont(FF_VERA,FS_NORMAL,12);
    + 
    +// Finally add it to the graph and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex7.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex7.html new file mode 100755 index 00000000..d9070bc8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex7.html @@ -0,0 +1,100 @@ +
    windrose_ex7.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +$data = array(
    +    2 => array(1,15,7.5,2),
    +    5 => array(1,1,1.5,2),
    +    7 => array(1,2,10,3,2),
    +    9 => array(2,3,1,3,1,2),
    +    );
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,450);
    +$graph->title->Set('Windrose example 7');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    +$graph->title->SetColor('navy');
    + 
    +// Create the free windrose plot.
    +$wp = new WindrosePlot($data);
    +$wp->SetType(WINDROSE_TYPE16);
    + 
    +// Add some "arbitrary" text to the center
    +$wp->scale->SetZeroLabel("SOx\n8%%");
    + 
    +// Localize the compass direction labels into Swedish
    +// Note: The labels for data must now also match the exact
    +// string for the compass directions.
    +$se_CompassLbl = array('O','ONO','NO','NNO','N','NNV','NV','VNV',
    +                          'V','VSV','SV','SSV','S','SSO','SO','OSO');
    +$wp->SetCompassLabels($se_CompassLbl);
    + 
    +// Localize the "Calm" text into Swedish and make the circle
    +// slightly bigger than default
    +$se_calmtext = 'Lugnt';
    +$wp->legend->SetCircleText($se_calmtext);
    +$wp->legend->SetCircleRadius(20);
    + 
    +// Adjust the displayed ranges
    +$ranges = array(1,3,5,8,12,19,29);
    +$wp->SetRanges($ranges);
    +//$wp->SetAntiAlias(true);
    + 
    +// Set the scale to always have max value of 30 with a step
    +// size of 12.
    +$wp->scale->Set(30,12);
    + 
    +// Finally add it to the graph and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex8.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex8.1.html new file mode 100755 index 00000000..eab55a9f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex8.1.html @@ -0,0 +1,96 @@ +
    windrose_ex8.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label.
    +$data = array(
    +    '45.9' => array(3,2,1,2,2),
    +    355 => array(1,1,1.5,2),
    +    180 => array(1,1,1.5,2),
    +    150 => array(1,2,1,3),
    +    'S' => array(2,3,5,1),
    +    );
    + 
    +// Add some labels for  afew of the directions
    +$labels = array(355=>"At\nHome base",180=>"Probe\n123",150=>"Power\nplant");
    + 
    +// Define the color,weight and style of some individual radial grid lines.
    +$axiscolors = array(355=>"red");
    +$axisweights = array(355=>8);
    +$axisstyles = array(355=>'solid',150=>'solid');
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,460);
    +$graph->title->Set('Adding label backgrounds');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    +$graph->title->SetColor('navy');
    + 
    +// Create the free windrose plot.
    +$wp = new WindrosePlot($data);
    +$wp->SetType(WINDROSE_TYPEFREE);
    +$wp->scale->SetLabelFillColor('lightblue','black');
    + 
    +// Specify colors weights and style for the radial gridlines
    +$wp->SetRadialColors($axiscolors);
    +$wp->SetRadialWeights($axisweights);
    +$wp->SetRadialStyles($axisstyles);
    + 
    +// Add a few labels
    +$wp->SetLabels($labels);
    + 
    +// Add some "arbitrary" text to the center
    +$wp->scale->SetZeroLabel("SOx\n8%%");
    + 
    +// Finally add it to the graph and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex8.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex8.html new file mode 100755 index 00000000..a9d11d46 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex8.html @@ -0,0 +1,94 @@ +
    windrose_ex8.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label.
    +$data = array(
    +    '45.9' => array(3,2,1,2,2),
    +    355 => array(1,1,1.5,2),
    +    180 => array(1,1,1.5,2),
    +    150 => array(1,2,1,3),
    +    'S' => array(2,3,5,1),
    +    );
    + 
    +// Add some labels for  afew of the directions
    +$labels = array(355=>"At\nHome base",180=>"Probe\n123",150=>"Power\nplant");
    + 
    +// Define the color,weight and style of some individual radial grid lines.
    +$axiscolors = array(355=>"red");
    +$axisweights = array(355=>8);
    +$axisstyles = array(355=>'solid',150=>'solid');
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,500);
    +$graph->title->Set('Windrose example 8');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    +$graph->title->SetColor('navy');
    + 
    +// Create the free windrose plot.
    +$wp = new WindrosePlot($data);
    +$wp->SetType(WINDROSE_TYPEFREE);
    + 
    +// Specify colors weights and style for the radial gridlines
    +$wp->SetRadialColors($axiscolors);
    +$wp->SetRadialWeights($axisweights);
    +$wp->SetRadialStyles($axisstyles);
    + 
    +// Add a few labels
    +$wp->SetLabels($labels);
    + 
    +// Add some "arbitrary" text to the center
    +$wp->scale->SetZeroLabel("SOx\n8%%");
    + 
    +// Finally add it to the graph and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex9.1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex9.1.html new file mode 100755 index 00000000..9d8430c5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex9.1.html @@ -0,0 +1,122 @@ +
    windrose_ex9.1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label.
    +$data = array(
    +    0 => array(3,2,1,2,2),
    +    4 => array(1,1,1.5,2),
    +    6 => array(1,1,1.5,2),
    +    12 => array(2,3,5,1),
    +);
    + 
    +$xpos1 = 0.26;
    +$xpos2 = 0.74;
    +$ypos1 = 0.5;
    +$ypos2 = 0.9;
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(650,350);
    +$graph->title->Set('Interpretation of ordinal keys');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    +$graph->title->SetColor('navy');
    + 
    +// Create the first plot
    +$wp1 = new WindrosePlot($data);
    +$wp1->SetType(WINDROSE_TYPE16);
    + 
    +// This is the default encoding
    +$wp1->SetDataKeyEncoding(KEYENCODING_ANTICLOCKWISE);
    +$wp1->legend->Hide();
    +$wp1->SetPos($xpos1,$ypos1);
    +$wp1->SetSize(0.5);
    + 
    +// Create the second plot
    +$wp2 = new WindrosePlot($data);
    +$wp2->SetType(WINDROSE_TYPE16);
    +$wp2->SetDataKeyEncoding(KEYENCODING_CLOCKWISE);
    +$wp2->legend->Hide();
    +$wp2->SetPos($xpos2,$ypos1);
    +$wp2->SetSize(0.5);
    + 
    +$txt1 = new Text('KEYENCODING_ANTICLOCKWISE');
    +$txt1->SetFont(FF_COURIER,FS_BOLD,12);
    +$txt1->SetPos($xpos1,$ypos2);
    +$txt1->SetAlign('center','top');
    + 
    +$txt2 = new Text('KEYENCODING_CLOCKWISE');
    +$txt2->SetFont(FF_COURIER,FS_BOLD,12);
    +$txt2->SetPos($xpos2,$ypos2);
    +$txt2->SetAlign('center','top');
    + 
    +// Finally add it to the graph and send back to the client
    +$graph->Add($wp1);
    +$graph->Add($txt1);
    + 
    +$graph->Add($wp2);
    +$graph->Add($txt2);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex9.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex9.html new file mode 100755 index 00000000..84505a00 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_ex9.html @@ -0,0 +1,90 @@ +
    windrose_ex9.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Data can be specified using both ordinal index of the axis
    +// as well as the direction label.
    +$data = array(
    +    'E' => array(3,2,1,2,2),
    +    'N' => array(1,1,1.5,2),
    +    'nw' => array(1,1,1.5,2),
    +    'S' => array(2,3,5,1),
    +    );
    + 
    +// Define the color,weight and style of some individual radial
    +// grid lines. Axis can be specified either by their (localized)
    +// label or by their index.
    +// Note; Depending on how many axis you have in the plot the
    +// index will vary between 0..n where n is the number of
    +// compass directions.
    +$axiscolors = array('nw'=>'brown');
    +$axisweights = array('nw'=>8);  // Could also be specified as 6 => 8
    +$axisstyles = array('nw'=>'solid');
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,500);
    +$graph->title->Set('Windrose example 9');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
    +$graph->title->SetColor('navy');
    + 
    +// Create the free windrose plot.
    +$wp = new WindrosePlot($data);
    +$wp->SetType(WINDROSE_TYPE16);
    + 
    +// Specify colors weights and style for the radial gridlines
    +$wp->SetRadialColors($axiscolors);
    +$wp->SetRadialWeights($axisweights);
    +$wp->SetRadialStyles($axisstyles);
    + 
    +// Add some "arbitrary" text to the center
    +$wp->scale->SetZeroLabel("SOx\n8%%");
    + 
    +// Finally add it to the graph and send back to the client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_icon_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_icon_ex1.html new file mode 100755 index 00000000..6c6a2289 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_icon_ex1.html @@ -0,0 +1,64 @@ +
    windrose_icon_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    +require_once ('jpgraph/jpgraph_iconplot.php');
    + 
    +$data = array(
    +    0 => array(1,1,2.5,4),
    +    1 => array(3,4,1,4),
    +    'wsw' => array(1,5,5,3),
    +    'N' => array(2,7,5,4,2),
    +    15 => array(2,7,12));
    + 
    +// First create a new windrose graph with a title
    +$graph = new WindroseGraph(400,400);
    + 
    +// Creta an icon to be added to the graph
    +$icon = new IconPlot('tornado.jpg',10,10,1.3,50);
    +$icon->SetAnchor('left','top');
    +$graph->Add($icon);
    + 
    +// Setup title
    +$graph->title->Set('Windrose icon example');
    +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12);
    +$graph->title->SetColor('navy');
    + 
    +// Create the windrose plot.
    +$wp = new WindrosePlot($data);
    + 
    +// Add to graph and send back to client
    +$graph->Add($wp);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_layout_ex0.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_layout_ex0.html new file mode 100755 index 00000000..e6e97333 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_layout_ex0.html @@ -0,0 +1,90 @@ +
    windrose_layout_ex0.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Some data for the five windrose plots
    +$data = array(
    +    array(
    +        1 => array(10,10,13,7),
    +        2 => array(2,8,10),
    +        4 => array(1,12,22)),
    +    array(
    +        4 => array(12,8,2,3),
    +        2 => array(5,4,4,5,2)),
    +    array(
    +        1 => array(12,8,2,3),
    +        3 => array(5,4,4,5,2)),
    +    array(
    +        2 => array(12,8,2,3),
    +        3 => array(5,4,4,5,2)),
    +);
    + 
    +// Create a windrose graph with titles
    +$graph = new WindroseGraph(600,650);
    +$graph->SetShadow();
    + 
    +$graph->title->Set('Multiple plots with automatic layout');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +// Setup the individual windrose plots
    +$wp = array();
    +for( $i=0; $i < 4; ++$i ) {
    +    $wp[$i] = new WindrosePlot($data[$i]);
    +    $wp[$i]->SetSize(0.22);
    +    $wp[$i]->SetCenterSize(0.25);
    +}
    + 
    +// Position with two rows. Two plots in top row and three plots in
    +// bottom row.
    +$hl1 = new LayoutHor( array( $wp[0], $wp[1] ) );
    +$hl2 = new LayoutHor( array( $wp[2], $wp[3] ) );
    +$vl = new LayoutVert( array( $hl1, $hl2) );
    + 
    +$graph->Add($vl);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_layout_ex1.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_layout_ex1.html new file mode 100755 index 00000000..7d0dded5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/windrose_layout_ex1.html @@ -0,0 +1,116 @@ +
    windrose_layout_ex1.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    <?php
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_windrose.php');
    + 
    +// Some data for the five windrose plots
    +$data = array(
    +    array(
    +        1 => array(10,10,13,7),
    +        2 => array(2,8,10),
    +        4 => array(1,12,22)),
    +    array(
    +        4 => array(12,8,2,3),
    +        2 => array(5,4,4,5,2)),
    +    array(
    +        1 => array(12,8,2,3),
    +        3 => array(5,4,4,5,2)),
    +    array(
    +        2 => array(12,8,2,3),
    +        3 => array(5,4,4,5,2)),
    +    array(
    +        4 => array(12,8,2,3),
    +        6 => array(5,4,4,5,2))
    +);
    + 
    +// Legend range colors
    +$rangecolors = array('green','yellow','red','brown');
    + 
    +// Create a windrose graph with titles
    +$graph = new WindroseGraph(750,700);
    + 
    +$graph->title->Set('Multiple plots with automatic layout');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
    + 
    +// Setup the individual windrose plots
    +$wp = array();
    +for( $i=0; $i < 5; ++$i ) {
    +    $wp[$i] = new WindrosePlot($data[$i]);
    +    $wp[$i]->SetType(WINDROSE_TYPE8);
    +    if( $i < 2) {
    +        $wp[$i]->SetSize(0.28);
    +    }
    +    else {
    +        $wp[$i]->legend->Hide();
    +        $wp[$i]->SetSize(0.16);
    +        $wp[$i]->SetCenterSize(0.25);
    +    }
    +    $wp[$i]->SetRangeColors($rangecolors);
    +}
    + 
    +// Position with two rows. Two plots in top row and three plots in
    +// bottom row.
    +$hl1 = new LayoutHor( array( $wp[0], $wp[1] ) );
    +$hl2 = new LayoutHor( array( $wp[2], $wp[3], $wp[4] ) );
    +$vl = new LayoutVert( array( $hl1, $hl2) );
    + 
    +$graph->Add($vl);
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/y2synch.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/y2synch.html new file mode 100755 index 00000000..25655ed1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/y2synch.html @@ -0,0 +1,120 @@ +
    y2synch.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    + 
    +function toFahrenheit($aVal) {
    +    return round(($aVal*9/5)+32,2);
    +}
    + 
    +function toCelcius($aVal) {
    +    return round(($aVal-32)*5/9,2);
    +}
    + 
    + 
    +$datay =array(2,3,8,19,7,17,6,22);
    + 
    +// Create the graph. 
    +$graph = new Graph(400,280);
    + 
    +// Slightly bigger margins than default to make room for titles
    +$graph->SetMargin(50,60,40,45);
    +$graph->SetMarginColor('white');
    + 
    + 
    +// Setup the scales for X,Y and Y2 axis
    +$graph->SetScale("intlin"); // X and Y axis
    +$graph->SetY2Scale("lin"); // Y2 axis
    + 
    +// Overall graph title
    +$graph->title->Set('Synchronized Y & Y2 scales');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// Title for X-axis
    +$graph->xaxis->title->Set('Measurement');
    +$graph->xaxis->title->SetMargin(5);
    +$graph->xaxis->title->SetFont(FF_ARIAL,FS_NORMAL,11);
    + 
    +// Create Y data set 
    +$lplot = new LinePlot($datay);
    +$graph->yaxis->title->Set('Celcius (C)');
    +$graph->yaxis->title->SetMargin(5);
    +$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,11);
    +// ... and add the plot to the Y-axis
    +$graph->Add($lplot);
    + 
    +// Create Y2 scale data set 
    +$l2plot = new LinePlot($datay);
    +$l2plot->SetWeight(0);
    +$graph->y2axis->title->Set('Fahrenheit (F)');
    +$graph->y2axis->title->SetMargin(5); // Some extra margin to clear labels
    +$graph->y2axis->title->SetFont(FF_ARIAL,FS_NORMAL,11);
    +$graph->y2axis->SetLabelFormatCallback('toFahrenheit');
    +$graph->y2axis->SetColor('navy');
    + 
    +// ... and add the plot to the Y2-axis
    +$graph->AddY2($l2plot);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/example_src/y2synch2.html b/Societes/ric/jpgraph/docs/chunkhtml/example_src/y2synch2.html new file mode 100755 index 00000000..90c63f45 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/example_src/y2synch2.html @@ -0,0 +1,120 @@ +
    y2synch2.php
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +
    <?php // content="text/plain; charset=utf-8"
    +require_once ('jpgraph/jpgraph.php');
    +require_once ('jpgraph/jpgraph_line.php');
    +require_once ('jpgraph/jpgraph_bar.php');
    + 
    + 
    +function toFahrenheit($aVal) {
    +    return round(($aVal*9/5)+32,2);
    +}
    + 
    +function toCelcius($aVal) {
    +    return round(($aVal-32)*5/9,2);
    +}
    + 
    + 
    +$datay =array(2,3,8,19,7,17,6,22);
    + 
    +// Create the graph. 
    +$graph = new Graph(400,280);
    + 
    +// Slightly bigger margins than default to make room for titles
    +$graph->SetMargin(50,60,40,45);
    +$graph->SetMarginColor('white');
    + 
    + 
    +// Setup the scales for X,Y and Y2 axis
    +$graph->SetScale("textlin"); // X and Y axis
    +$graph->SetY2Scale("lin"); // Y2 axis
    + 
    +// Overall graph title
    +$graph->title->Set('Synchronized Y & Y2 scales');
    +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    + 
    +// Title for X-axis
    +$graph->xaxis->title->Set('Measurement');
    +$graph->xaxis->title->SetMargin(5);
    +$graph->xaxis->title->SetFont(FF_ARIAL,FS_NORMAL,11);
    + 
    +// Create Y data set 
    +$lplot = new BarPlot($datay);
    +$graph->yaxis->title->Set('Celcius (C)');
    +$graph->yaxis->title->SetMargin(5);
    +$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,11);
    +// ... and add the plot to the Y-axis
    +$graph->Add($lplot);
    + 
    +// Create Y2 scale data set 
    +$l2plot = new LinePlot($datay);
    +$l2plot->SetWeight(0);
    +$graph->y2axis->title->Set('Fahrenheit (F)');
    +$graph->y2axis->title->SetMargin(5); // Some extra margin to clear labels
    +$graph->y2axis->title->SetFont(FF_ARIAL,FS_NORMAL,11);
    +$graph->y2axis->SetLabelFormatCallback('toFahrenheit');
    +$graph->y2axis->SetColor('navy');
    + 
    +// ... and add the plot to the Y2-axis
    +$graph->AddY2($l2plot);
    + 
    +$graph->Stroke();
    +?>
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/.png b/Societes/ric/jpgraph/docs/chunkhtml/images/.png new file mode 100755 index 00000000..e69de29b diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/aalias_line.jpg b/Societes/ric/jpgraph/docs/chunkhtml/images/aalias_line.jpg new file mode 100755 index 00000000..3dfc1b9d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/aalias_line.jpg differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/accbarframeex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/accbarframeex01.png new file mode 100755 index 00000000..bb19001e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/accbarframeex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/accbarframeex02.png b/Societes/ric/jpgraph/docs/chunkhtml/images/accbarframeex02.png new file mode 100755 index 00000000..10006987 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/accbarframeex02.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/accbarframeex03.png b/Societes/ric/jpgraph/docs/chunkhtml/images/accbarframeex03.png new file mode 100755 index 00000000..869822ad Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/accbarframeex03.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/alpha-channel.png b/Societes/ric/jpgraph/docs/chunkhtml/images/alpha-channel.png new file mode 100755 index 00000000..4ed9b2d0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/alpha-channel.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/antispamex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/antispamex01.png new file mode 100755 index 00000000..6616fb4d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/antispamex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/aqua_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/aqua_example.png new file mode 100755 index 00000000..1ad33314 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/aqua_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex01.png new file mode 100755 index 00000000..b1f28bc3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex02.png b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex02.png new file mode 100755 index 00000000..474cd9cd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex02.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex03.png b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex03.png new file mode 100755 index 00000000..3b8a14a8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex03.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex04.png b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex04.png new file mode 100755 index 00000000..55d2700c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex04.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex05.png b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex05.png new file mode 100755 index 00000000..b6b111b4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex05.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex06.png b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex06.png new file mode 100755 index 00000000..a74f2c1e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex06.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex07.png b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex07.png new file mode 100755 index 00000000..9eb0ce4a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/axislabelbkgex07.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex0.png new file mode 100755 index 00000000..fdbecc61 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex1.png new file mode 100755 index 00000000..5bc0e254 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex2.png new file mode 100755 index 00000000..33467e8d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex3.png new file mode 100755 index 00000000..20028ff2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex4.png new file mode 100755 index 00000000..eab72633 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/background_type_ex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/balloonex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/balloonex2.png new file mode 100755 index 00000000..b430c79d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/balloonex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern1.png new file mode 100755 index 00000000..322ad4f9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern2.png new file mode 100755 index 00000000..4553321c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern3.png new file mode 100755 index 00000000..e35db9c2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern4.png new file mode 100755 index 00000000..f6732e55 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern5.png new file mode 100755 index 00000000..119815d7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern6.png new file mode 100755 index 00000000..c00dc12e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern7.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern7.png new file mode 100755 index 00000000..9a56bc5c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern7.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern8.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern8.png new file mode 100755 index 00000000..cd0d37f0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern8.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern9.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern9.png new file mode 100755 index 00000000..50d014f1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bar_pattern9.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode-demoapp.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode-demoapp.png new file mode 100755 index 00000000..08caffdd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode-demoapp.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode-explained-1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode-explained-1.png new file mode 100755 index 00000000..15b702dd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode-explained-1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_bookland_048663926_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_bookland_048663926_ex1.png new file mode 100755 index 00000000..3ba5e0d1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_bookland_048663926_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c11_0137291_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c11_0137291_ex1.png new file mode 100755 index 00000000..e15f7b45 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c11_0137291_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c11_0137291_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c11_0137291_ex2.png new file mode 100755 index 00000000..5601fd32 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c11_0137291_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c128_Code128_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c128_Code128_ex1.png new file mode 100755 index 00000000..5a820a92 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c128_Code128_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c128_abc123_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c128_abc123_ex1.png new file mode 100755 index 00000000..a4e6e1d0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c128_abc123_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c25_13729_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c25_13729_ex1.png new file mode 100755 index 00000000..fb386c99 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c25_13729_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c25_13729_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c25_13729_ex2.png new file mode 100755 index 00000000..1d66e7b0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c25_13729_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_0137291_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_0137291_ex1.png new file mode 100755 index 00000000..42ae6de2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_0137291_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_0137291_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_0137291_ex2.png new file mode 100755 index 00000000..707c7066 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_0137291_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_abc123_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_abc123_ex1.png new file mode 100755 index 00000000..9a4edcd1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_abc123_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_abc123_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_abc123_ex2.png new file mode 100755 index 00000000..594a00fe Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_abc123_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_abc123_ex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_abc123_ex3.png new file mode 100755 index 00000000..948ff38d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39_abc123_ex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39e_Code39_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39e_Code39_ex1.png new file mode 100755 index 00000000..76a582db Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39e_Code39_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39e_Code39_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39e_Code39_ex2.png new file mode 100755 index 00000000..3063e05e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_c39e_Code39_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_codabar_12345_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_codabar_12345_ex1.png new file mode 100755 index 00000000..9e6b7f33 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_codabar_12345_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_code25_123_m5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_code25_123_m5.png new file mode 100755 index 00000000..e9d54cf1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_code25_123_m5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_data_validation_failed.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_data_validation_failed.png new file mode 100755 index 00000000..d95f0454 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_data_validation_failed.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_ean128_3125134772_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_ean128_3125134772_ex1.png new file mode 100755 index 00000000..3c973c53 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_ean128_3125134772_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_ean13_377622153812_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_ean13_377622153812_ex1.png new file mode 100755 index 00000000..7b6989fa Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_ean13_377622153812_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_ean8_3776221_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_ean8_3776221_ex1.png new file mode 100755 index 00000000..2fe41877 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_ean8_3776221_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_i25_137291_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_i25_137291_ex1.png new file mode 100755 index 00000000..4ee00e8d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_i25_137291_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_i25_137291_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_i25_137291_ex2.png new file mode 100755 index 00000000..fbc3eff7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_i25_137291_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_upca_03456781233_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_upca_03456781233_ex1.png new file mode 100755 index 00000000..078f549b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_upca_03456781233_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_upca_055_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_upca_055_ex1.png new file mode 100755 index 00000000..78279b39 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_upca_055_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_upce_055_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_upce_055_ex1.png new file mode 100755 index 00000000..1c946a90 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barcode_upce_055_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bargradex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradex1.png new file mode 100755 index 00000000..b35d178c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex1.png new file mode 100755 index 00000000..bcc26f00 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex2.png new file mode 100755 index 00000000..efd691f1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex3.png new file mode 100755 index 00000000..02e21c99 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex4.png new file mode 100755 index 00000000..b4b3ba4f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex5.png new file mode 100755 index 00000000..46043533 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex6.png new file mode 100755 index 00000000..5f8d04d6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex7.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex7.png new file mode 100755 index 00000000..25e5aff7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex7.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex8.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex8.png new file mode 100755 index 00000000..8792ba8c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bargradsmallex8.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barlinealphaex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barlinealphaex1.png new file mode 100755 index 00000000..4c7ae526 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barlinealphaex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/barscalecallbackex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/barscalecallbackex1.png new file mode 100755 index 00000000..9df38b68 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/barscalecallbackex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/bartable_intro.png b/Societes/ric/jpgraph/docs/chunkhtml/images/bartable_intro.png new file mode 100755 index 00000000..ab9d2574 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/bartable_intro.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex01.png new file mode 100755 index 00000000..ca52e583 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex02.png b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex02.png new file mode 100755 index 00000000..b0f3dfb2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex02.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex03-1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex03-1.png new file mode 100755 index 00000000..c0ce836a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex03-1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex03-2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex03-2.png new file mode 100755 index 00000000..ba585beb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex03-2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex03-3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex03-3.png new file mode 100755 index 00000000..f4779906 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex03-3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex04.png b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex04.png new file mode 100755 index 00000000..1a1f5ff0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex04.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex05.png b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex05.png new file mode 100755 index 00000000..69e0c16a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/basic_contourex05.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/blueish-scale.png b/Societes/ric/jpgraph/docs/chunkhtml/images/blueish-scale.png new file mode 100755 index 00000000..33f4c2ad Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/blueish-scale.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/boxstockex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/boxstockex1.png new file mode 100755 index 00000000..c9c514b3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/boxstockex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/builtinplotmarksex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/builtinplotmarksex1.png new file mode 100755 index 00000000..2f2d452f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/builtinplotmarksex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/cache_principles.png b/Societes/ric/jpgraph/docs/chunkhtml/images/cache_principles.png new file mode 100755 index 00000000..677b4b74 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/cache_principles.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex01.png new file mode 100755 index 00000000..a8f875dc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex02.png b/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex02.png new file mode 100755 index 00000000..2c5222d2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex02.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex03.png b/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex03.png new file mode 100755 index 00000000..50f094d0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex03.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex04.png b/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex04.png new file mode 100755 index 00000000..efb2aa46 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex04.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex05.png b/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex05.png new file mode 100755 index 00000000..dde65b1c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex05.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex06.png b/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex06.png new file mode 100755 index 00000000..24d10a32 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/canvasex06.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp-creating-background-indicators.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp-creating-background-indicators.png new file mode 100755 index 00000000..b4c810b9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp-creating-background-indicators.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp_ex1.png new file mode 100755 index 00000000..6806c318 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp_ex2.png new file mode 100755 index 00000000..76a1d05d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp_example_charts.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp_example_charts.png new file mode 100755 index 00000000..f5f42f52 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp_example_charts.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp_hist_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp_hist_example.png new file mode 100755 index 00000000..6dd89674 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ccbp_hist_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ccbpgraph.class.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ccbpgraph.class.png new file mode 100755 index 00000000..e69de29b diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ccpm_principle.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ccpm_principle.png new file mode 100755 index 00000000..e31800e5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ccpm_principle.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/checkgd.png b/Societes/ric/jpgraph/docs/chunkhtml/images/checkgd.png new file mode 100755 index 00000000..3b90f889 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/checkgd.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/checkgd2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/checkgd2.png new file mode 100755 index 00000000..f553a383 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/checkgd2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/checkttf.png b/Societes/ric/jpgraph/docs/chunkhtml/images/checkttf.png new file mode 100755 index 00000000..85e16a73 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/checkttf.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/clipping_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/clipping_ex1.png new file mode 100755 index 00000000..a84e1722 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/clipping_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/clipping_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/clipping_ex2.png new file mode 100755 index 00000000..7ae7d837 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/clipping_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/colormap_center.png b/Societes/ric/jpgraph/docs/chunkhtml/images/colormap_center.png new file mode 100755 index 00000000..aaca3a09 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/colormap_center.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/colormap_continues.png b/Societes/ric/jpgraph/docs/chunkhtml/images/colormap_continues.png new file mode 100755 index 00000000..e656068b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/colormap_continues.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/colormap_standard.png b/Societes/ric/jpgraph/docs/chunkhtml/images/colormap_standard.png new file mode 100755 index 00000000..1a6dc482 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/colormap_standard.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/comb90dategraphex03.png b/Societes/ric/jpgraph/docs/chunkhtml/images/comb90dategraphex03.png new file mode 100755 index 00000000..5fdfcef0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/comb90dategraphex03.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/combgraphex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/combgraphex1.png new file mode 100755 index 00000000..e59d6d86 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/combgraphex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/combgraphex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/combgraphex2.png new file mode 100755 index 00000000..f8d0ee01 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/combgraphex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex1.png new file mode 100755 index 00000000..7df6912d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex2.png new file mode 100755 index 00000000..0394adde Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex3.png new file mode 100755 index 00000000..5eab173e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex4.png new file mode 100755 index 00000000..0761abb5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex5.png new file mode 100755 index 00000000..aa03d71d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex6.png new file mode 100755 index 00000000..a36473a8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex7.png b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex7.png new file mode 100755 index 00000000..e00c3127 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/contour2_ex7.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/contour_rectang.png b/Societes/ric/jpgraph/docs/chunkhtml/images/contour_rectang.png new file mode 100755 index 00000000..14e05f6b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/contour_rectang.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/contour_triangulation.png b/Societes/ric/jpgraph/docs/chunkhtml/images/contour_triangulation.png new file mode 100755 index 00000000..f4c63591 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/contour_triangulation.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/csim-html-example-page.png b/Societes/ric/jpgraph/docs/chunkhtml/images/csim-html-example-page.png new file mode 100755 index 00000000..47c8a123 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/csim-html-example-page.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix-demoapp.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix-demoapp.png new file mode 100755 index 00000000..c7b939d3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix-demoapp.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix-encodation-principle.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix-encodation-principle.png new file mode 100755 index 00000000..924a07ae Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix-encodation-principle.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix-ps-output.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix-ps-output.png new file mode 100755 index 00000000..74d43563 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix-ps-output.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix-structure-details.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix-structure-details.png new file mode 100755 index 00000000..d2059ad8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix-structure-details.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_errormsg.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_errormsg.png new file mode 100755 index 00000000..f94a1208 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_errormsg.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex0.png new file mode 100755 index 00000000..caf5d4a5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex00.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex00.png new file mode 100755 index 00000000..eaa1b4e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex00.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex1.png new file mode 100755 index 00000000..8b593820 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex4.png new file mode 100755 index 00000000..dc986621 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex4.png @@ -0,0 +1 @@ +Datamatrix error message: Datafile for bit placement is corrupt, crc checks fails. diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex5.png new file mode 100755 index 00000000..07d60950 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex6.png new file mode 100755 index 00000000..71f1dc36 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex6.png @@ -0,0 +1 @@ +Barcode sucessfully written to file: "/root/jpgraph/trunk/src/Examples/dm_ex6.png" \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex7.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex7.png new file mode 100755 index 00000000..84bf81b2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_ex7.png @@ -0,0 +1,62 @@ +
    XXX___XXX___XXX___XXX___XXX___XXX___XXX___XXX___XXX___XXX___
    +XXX___XXX___XXX___XXX___XXX___XXX___XXX___XXX___XXX___XXX___
    +XXX___XXX___XXX___XXX___XXX___XXX___XXX___XXX___XXX___XXX___
    +XXX___XXX___XXX___XXXXXX_________XXXXXXXXXXXX______XXXXXXXXX
    +XXX___XXX___XXX___XXXXXX_________XXXXXXXXXXXX______XXXXXXXXX
    +XXX___XXX___XXX___XXXXXX_________XXXXXXXXXXXX______XXXXXXXXX
    +XXX_______________XXXXXXXXX_________XXX___XXX______XXX______
    +XXX_______________XXXXXXXXX_________XXX___XXX______XXX______
    +XXX_______________XXXXXXXXX_________XXX___XXX______XXX______
    +XXX_________XXXXXX______XXX___XXX___XXXXXXXXXXXXXXXXXXXXXXXX
    +XXX_________XXXXXX______XXX___XXX___XXXXXXXXXXXXXXXXXXXXXXXX
    +XXX_________XXXXXX______XXX___XXX___XXXXXXXXXXXXXXXXXXXXXXXX
    +XXX___XXXXXX_________XXXXXX______XXXXXX____________XXXXXX___
    +XXX___XXXXXX_________XXXXXX______XXXXXX____________XXXXXX___
    +XXX___XXXXXX_________XXXXXX______XXXXXX____________XXXXXX___
    +XXXXXXXXX______XXXXXXXXXXXX______XXX____________XXXXXX___XXX
    +XXXXXXXXX______XXXXXXXXXXXX______XXX____________XXXXXX___XXX
    +XXXXXXXXX______XXXXXXXXXXXX______XXX____________XXXXXX___XXX
    +XXX______XXXXXXXXX______XXXXXX_________XXX_________XXXXXX___
    +XXX______XXXXXXXXX______XXXXXX_________XXX_________XXXXXX___
    +XXX______XXXXXXXXX______XXXXXX_________XXX_________XXXXXX___
    +XXX___XXX_________XXX___XXXXXX___XXX___XXXXXX___XXX___XXXXXX
    +XXX___XXX_________XXX___XXXXXX___XXX___XXXXXX___XXX___XXXXXX
    +XXX___XXX_________XXX___XXXXXX___XXX___XXXXXX___XXX___XXXXXX
    +XXX______XXXXXXXXX___XXXXXXXXXXXXXXX___XXX___XXX______XXX___
    +XXX______XXXXXXXXX___XXXXXXXXXXXXXXX___XXX___XXX______XXX___
    +XXX______XXXXXXXXX___XXXXXXXXXXXXXXX___XXX___XXX______XXX___
    +XXXXXX_________XXXXXXXXXXXX___XXXXXXXXXXXX______XXX______XXX
    +XXXXXX_________XXXXXXXXXXXX___XXXXXXXXXXXX______XXX______XXX
    +XXXXXX_________XXXXXXXXXXXX___XXXXXXXXXXXX______XXX______XXX
    +XXXXXXXXX_________XXXXXX___XXX_________XXX___XXX____________
    +XXXXXXXXX_________XXXXXX___XXX_________XXX___XXX____________
    +XXXXXXXXX_________XXXXXX___XXX_________XXX___XXX____________
    +XXX____________XXXXXXXXX___XXXXXXXXXXXX___XXX______XXXXXXXXX
    +XXX____________XXXXXXXXX___XXXXXXXXXXXX___XXX______XXXXXXXXX
    +XXX____________XXXXXXXXX___XXXXXXXXXXXX___XXX______XXXXXXXXX
    +XXXXXXXXX___XXXXXXXXXXXX______XXXXXXXXXXXXXXXXXXXXX_________
    +XXXXXXXXX___XXXXXXXXXXXX______XXXXXXXXXXXXXXXXXXXXX_________
    +XXXXXXXXX___XXXXXXXXXXXX______XXXXXXXXXXXXXXXXXXXXX_________
    +XXX___XXX___XXX____________XXXXXX_________XXX____________XXX
    +XXX___XXX___XXX____________XXXXXX_________XXX____________XXX
    +XXX___XXX___XXX____________XXXXXX_________XXX____________XXX
    +XXXXXX___XXX___XXXXXX___XXX______XXX___XXXXXXXXXXXX_________
    +XXXXXX___XXX___XXXXXX___XXX______XXX___XXXXXXXXXXXX_________
    +XXXXXX___XXX___XXXXXX___XXX______XXX___XXXXXXXXXXXX_________
    +XXX______XXXXXX______XXX___XXXXXX___XXXXXXXXXXXX_________XXX
    +XXX______XXXXXX______XXX___XXXXXX___XXXXXXXXXXXX_________XXX
    +XXX______XXXXXX______XXX___XXXXXX___XXXXXXXXXXXX_________XXX
    +XXX______XXXXXX_________XXX____________XXXXXX___XXXXXXXXX___
    +XXX______XXXXXX_________XXX____________XXXXXX___XXXXXXXXX___
    +XXX______XXXXXX_________XXX____________XXXXXX___XXXXXXXXX___
    +XXX______XXX_________XXX___XXX______XXXXXXXXXXXX___XXX___XXX
    +XXX______XXX_________XXX___XXX______XXXXXXXXXXXX___XXX___XXX
    +XXX______XXX_________XXX___XXX______XXXXXXXXXXXX___XXX___XXX
    +XXX____________XXX___XXXXXXXXX______XXXXXXXXXXXX______XXX___
    +XXX____________XXX___XXXXXXXXX______XXXXXXXXXXXX______XXX___
    +XXX____________XXX___XXXXXXXXX______XXXXXXXXXXXX______XXX___
    +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    +
    +
    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_rect.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_rect.png new file mode 100755 index 00000000..2b56869b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_rect.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_square.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_square.png new file mode 100755 index 00000000..f961576f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/datamatrix_square.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/dateaxisex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/dateaxisex1.png new file mode 100755 index 00000000..d9f61844 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/dateaxisex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/dateaxisex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/dateaxisex2.png new file mode 100755 index 00000000..78bbf11c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/dateaxisex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/dateaxisex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/dateaxisex4.png new file mode 100755 index 00000000..62124770 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/dateaxisex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/datescaleticksex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/datescaleticksex01.png new file mode 100755 index 00000000..73108af5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/datescaleticksex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/dateutilex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/dateutilex01.png new file mode 100755 index 00000000..40b92034 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/dateutilex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/dateutilex02.png b/Societes/ric/jpgraph/docs/chunkhtml/images/dateutilex02.png new file mode 100755 index 00000000..125b8e0b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/dateutilex02.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/documentation_buildprocess.png b/Societes/ric/jpgraph/docs/chunkhtml/images/documentation_buildprocess.png new file mode 100755 index 00000000..a1f24141 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/documentation_buildprocess.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-ex1.png new file mode 100755 index 00000000..9c783ff7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-headersent-de.png b/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-headersent-de.png new file mode 100755 index 00000000..7e59559b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-headersent-de.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-headersent.png b/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-headersent.png new file mode 100755 index 00000000..3e34f671 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-headersent.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-only-null.png b/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-only-null.png new file mode 100755 index 00000000..6812730b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-only-null.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-prod.png b/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-prod.png new file mode 100755 index 00000000..38e94417 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/errmsg-prod.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example0-0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example0-0.png new file mode 100755 index 00000000..294d0f7d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example0-0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example0.png new file mode 100755 index 00000000..2f6a4caa Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example11.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example11.png new file mode 100755 index 00000000..e280bca3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example11.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example13.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example13.png new file mode 100755 index 00000000..27b59c81 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example13.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example14.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example14.png new file mode 100755 index 00000000..c3692898 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example14.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example15.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example15.png new file mode 100755 index 00000000..24df644b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example15.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example16.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example16.1.png new file mode 100755 index 00000000..8b96759b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example16.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example16.3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example16.3.png new file mode 100755 index 00000000..d17c14a0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example16.3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example16.4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example16.4.png new file mode 100755 index 00000000..b1636397 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example16.4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example16.6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example16.6.png new file mode 100755 index 00000000..64484b02 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example16.6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example16.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example16.png new file mode 100755 index 00000000..6f9d456f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example16.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example17.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example17.png new file mode 100755 index 00000000..cdb7d46b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example17.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example19.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example19.1.png new file mode 100755 index 00000000..c65f8bff Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example19.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example19.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example19.png new file mode 100755 index 00000000..636ab4c6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example19.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example2.png new file mode 100755 index 00000000..f4870d8e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example20.3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example20.3.png new file mode 100755 index 00000000..849c24e7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example20.3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example21.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example21.png new file mode 100755 index 00000000..3219492a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example21.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example22.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example22.png new file mode 100755 index 00000000..47708f04 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example22.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example23.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example23.png new file mode 100755 index 00000000..11664922 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example23.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example24.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example24.png new file mode 100755 index 00000000..dcd993d7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example24.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example25.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example25.1.png new file mode 100755 index 00000000..45323676 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example25.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example25.2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example25.2.png new file mode 100755 index 00000000..555d6055 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example25.2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example25.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example25.png new file mode 100755 index 00000000..71886299 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example25.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example26.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example26.1.png new file mode 100755 index 00000000..4f43f5e8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example26.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example26.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example26.png new file mode 100755 index 00000000..1ae5598d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example26.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example27.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example27.1.png new file mode 100755 index 00000000..4e2d0c8a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example27.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example27.2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example27.2.png new file mode 100755 index 00000000..18edbb42 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example27.2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example27.3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example27.3.png new file mode 100755 index 00000000..1e208765 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example27.3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example27.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example27.png new file mode 100755 index 00000000..48526702 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example27.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example28.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example28.1.png new file mode 100755 index 00000000..c9b27e91 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example28.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example28.2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example28.2.png new file mode 100755 index 00000000..43a06f21 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example28.2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example28.3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example28.3.png new file mode 100755 index 00000000..d725a400 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example28.3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example28.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example28.png new file mode 100755 index 00000000..7ab430ad Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example28.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example3.0.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.0.1.png new file mode 100755 index 00000000..5625af46 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.0.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example3.0.2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.0.2.png new file mode 100755 index 00000000..6d3303ee Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.0.2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example3.0.3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.0.3.png new file mode 100755 index 00000000..fcd4a0f6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.0.3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example3.1.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.1.1.png new file mode 100755 index 00000000..a747702c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.1.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example3.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.1.png new file mode 100755 index 00000000..f2e9db91 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example3.2.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.2.1.png new file mode 100755 index 00000000..193ecc99 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.2.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example3.2.2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.2.2.png new file mode 100755 index 00000000..2b9ac6c3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.2.2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example3.2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.2.png new file mode 100755 index 00000000..1c101d10 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example3.3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.3.png new file mode 100755 index 00000000..f2e9db91 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example3.4.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.4.1.png new file mode 100755 index 00000000..f2e9db91 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.4.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example3.4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.4.png new file mode 100755 index 00000000..f2e9db91 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.png new file mode 100755 index 00000000..52edb832 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example4.png new file mode 100755 index 00000000..18f23040 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example5.png new file mode 100755 index 00000000..97c712a9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example6.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example6.1.png new file mode 100755 index 00000000..4d49352b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example6.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example6.2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example6.2.png new file mode 100755 index 00000000..9891c2d6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example6.2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example6.png new file mode 100755 index 00000000..73f0cb77 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example7.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example7.png new file mode 100755 index 00000000..6e2b0fcc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example7.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example8.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example8.png new file mode 100755 index 00000000..74d380f5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example8.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example9.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example9.1.png new file mode 100755 index 00000000..2f42c9c7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example9.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example9.2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example9.2.png new file mode 100755 index 00000000..fd4942b5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example9.2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/example9.png b/Societes/ric/jpgraph/docs/chunkhtml/images/example9.png new file mode 100755 index 00000000..2f551f2f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/example9.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/field_arrow_sizes.png b/Societes/ric/jpgraph/docs/chunkhtml/images/field_arrow_sizes.png new file mode 100755 index 00000000..f95209f9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/field_arrow_sizes.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/fieldscatterex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/fieldscatterex1.png new file mode 100755 index 00000000..215a80ff Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/fieldscatterex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/filledgridex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/filledgridex1.png new file mode 100755 index 00000000..628cd2fe Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/filledgridex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/filledlineex01.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/filledlineex01.1.png new file mode 100755 index 00000000..2248eba5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/filledlineex01.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/filledlineex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/filledlineex01.png new file mode 100755 index 00000000..ee4019b8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/filledlineex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/filledlineex03.png b/Societes/ric/jpgraph/docs/chunkhtml/images/filledlineex03.png new file mode 100755 index 00000000..8bfdb301 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/filledlineex03.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/fixscale_radarex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/fixscale_radarex1.png new file mode 100755 index 00000000..09dd5177 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/fixscale_radarex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-afgh.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-afgh.png new file mode 100755 index 00000000..69d23d8a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-afgh.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-agla.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-agla.png new file mode 100755 index 00000000..c7208129 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-agla.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-alba.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-alba.png new file mode 100755 index 00000000..4fa461fd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-alba.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-alde.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-alde.png new file mode 100755 index 00000000..acb9e3bc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-alde.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-alge.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-alge.png new file mode 100755 index 00000000..31dc609e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-alge.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-amsa.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-amsa.png new file mode 100755 index 00000000..527d70d9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-amsa.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-andr.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-andr.png new file mode 100755 index 00000000..0bbc80de Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-andr.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-angu.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-angu.png new file mode 100755 index 00000000..19392da7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-angu.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-anta.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-anta.png new file mode 100755 index 00000000..e601744b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-anta.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-arge.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-arge.png new file mode 100755 index 00000000..d774d400 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-arge.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-arle.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-arle.png new file mode 100755 index 00000000..6946d63c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-arle.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-arme.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-arme.png new file mode 100755 index 00000000..154da900 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-arme.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-arub.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-arub.png new file mode 100755 index 00000000..4aa66625 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-arub.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-astl.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-astl.png new file mode 100755 index 00000000..6ae7c079 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-astl.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-aust.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-aust.png new file mode 100755 index 00000000..c6236a61 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-aust.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-azer.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-azer.png new file mode 100755 index 00000000..608e1563 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-azer.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bant.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bant.png new file mode 100755 index 00000000..dcaaff03 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bant.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-belg.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-belg.png new file mode 100755 index 00000000..9ddd1b37 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-belg.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-berm.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-berm.png new file mode 100755 index 00000000..1503e890 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-berm.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bhms.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bhms.png new file mode 100755 index 00000000..27f2c409 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bhms.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bhrn.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bhrn.png new file mode 100755 index 00000000..4fdf43d8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bhrn.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-blru.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-blru.png new file mode 100755 index 00000000..d58c9175 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-blru.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-blva.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-blva.png new file mode 100755 index 00000000..3f43bba1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-blva.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-blze.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-blze.png new file mode 100755 index 00000000..52253307 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-blze.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bngl.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bngl.png new file mode 100755 index 00000000..e443668e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bngl.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bnin.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bnin.png new file mode 100755 index 00000000..bf4aa0ee Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bnin.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bots.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bots.png new file mode 100755 index 00000000..e946aa4f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bots.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-braz.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-braz.png new file mode 100755 index 00000000..9dad4040 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-braz.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-brbd.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-brbd.png new file mode 100755 index 00000000..1d5806de Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-brbd.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-brin.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-brin.png new file mode 100755 index 00000000..382dc5e2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-brin.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-brun.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-brun.png new file mode 100755 index 00000000..af8a3e11 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-brun.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bufa.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bufa.png new file mode 100755 index 00000000..c01b99e2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bufa.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bulg.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bulg.png new file mode 100755 index 00000000..f058bd79 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bulg.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-buru.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-buru.png new file mode 100755 index 00000000..873aebf3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-buru.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bvis.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bvis.png new file mode 100755 index 00000000..d4c96a81 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-bvis.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cafr.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cafr.png new file mode 100755 index 00000000..19b789d4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cafr.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-camb.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-camb.png new file mode 100755 index 00000000..8cf9cdec Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-camb.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-came.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-came.png new file mode 100755 index 00000000..92959ab6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-came.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cana.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cana.png new file mode 100755 index 00000000..80013f03 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cana.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cari.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cari.png new file mode 100755 index 00000000..00d9128d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cari.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cave.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cave.png new file mode 100755 index 00000000..4b15b8d2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cave.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-chad.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-chad.png new file mode 100755 index 00000000..3fe4040f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-chad.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-chil.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-chil.png new file mode 100755 index 00000000..262e9fcc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-chil.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-chin.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-chin.png new file mode 100755 index 00000000..77e10093 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-chin.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-chms.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-chms.png new file mode 100755 index 00000000..b30dbb50 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-chms.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cins.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cins.png new file mode 100755 index 00000000..e16b5563 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cins.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ckis.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ckis.png new file mode 100755 index 00000000..40d30d05 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ckis.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-clmb.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-clmb.png new file mode 100755 index 00000000..014c04ca Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-clmb.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cois.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cois.png new file mode 100755 index 00000000..35bcbb55 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cois.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-comn.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-comn.png new file mode 100755 index 00000000..16f38059 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-comn.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-como.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-como.png new file mode 100755 index 00000000..1bf7b4c4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-como.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cong.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cong.png new file mode 100755 index 00000000..43cd8596 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cong.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-corc.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-corc.png new file mode 100755 index 00000000..f9259000 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-corc.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-croa.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-croa.png new file mode 100755 index 00000000..fb70abb4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-croa.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cuba.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cuba.png new file mode 100755 index 00000000..f65fedfb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cuba.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cyis.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cyis.png new file mode 100755 index 00000000..6954ad50 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cyis.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cypr.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cypr.png new file mode 100755 index 00000000..27b73021 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-cypr.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-czec.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-czec.png new file mode 100755 index 00000000..fe79dee8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-czec.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-denm.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-denm.png new file mode 100755 index 00000000..95416ffb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-denm.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-djib.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-djib.png new file mode 100755 index 00000000..c44b9896 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-djib.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-domn.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-domn.png new file mode 100755 index 00000000..54ebfcc5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-domn.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-dore.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-dore.png new file mode 100755 index 00000000..ada8ec4e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-dore.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ecua.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ecua.png new file mode 100755 index 00000000..87433894 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ecua.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-egyp.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-egyp.png new file mode 100755 index 00000000..25ea94ec Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-egyp.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-elsa.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-elsa.png new file mode 100755 index 00000000..1a212afb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-elsa.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-engl.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-engl.png new file mode 100755 index 00000000..19042f06 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-engl.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-eqgu.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-eqgu.png new file mode 100755 index 00000000..2be56f90 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-eqgu.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-erit.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-erit.png new file mode 100755 index 00000000..6d971a0e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-erit.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-estn.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-estn.png new file mode 100755 index 00000000..0d226e78 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-estn.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ethp.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ethp.png new file mode 100755 index 00000000..86c4bd6e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ethp.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-euun.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-euun.png new file mode 100755 index 00000000..532109be Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-euun.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fais.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fais.png new file mode 100755 index 00000000..704d4823 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fais.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fiav.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fiav.png new file mode 100755 index 00000000..f0c61720 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fiav.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fiji.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fiji.png new file mode 100755 index 00000000..f00b64c9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fiji.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-finl.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-finl.png new file mode 100755 index 00000000..43d68ff5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-finl.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fpol.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fpol.png new file mode 100755 index 00000000..a8b6fb75 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fpol.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fran.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fran.png new file mode 100755 index 00000000..84f7c0e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-fran.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-frgu.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-frgu.png new file mode 100755 index 00000000..84f7c0e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-frgu.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-gabn.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-gabn.png new file mode 100755 index 00000000..78ac5c02 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-gabn.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-gamb.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-gamb.png new file mode 100755 index 00000000..f455b568 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-gamb.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-geor.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-geor.png new file mode 100755 index 00000000..c3035136 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-geor.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-germ.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-germ.png new file mode 100755 index 00000000..5c30dcdb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-germ.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ghan.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ghan.png new file mode 100755 index 00000000..631aa15f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ghan.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-gibr.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-gibr.png new file mode 100755 index 00000000..84e4fb2c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-gibr.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-grec.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-grec.png new file mode 100755 index 00000000..07638c72 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-grec.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-gren.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-gren.png new file mode 100755 index 00000000..c83af61c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-gren.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guad.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guad.png new file mode 100755 index 00000000..84f7c0e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guad.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guam.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guam.png new file mode 100755 index 00000000..4d221ef9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guam.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guat.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guat.png new file mode 100755 index 00000000..9cfba2b6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guat.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guer.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guer.png new file mode 100755 index 00000000..d325b156 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guer.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guin.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guin.png new file mode 100755 index 00000000..e9032f56 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-guin.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-hait.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-hait.png new file mode 100755 index 00000000..500228f0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-hait.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-hokn.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-hokn.png new file mode 100755 index 00000000..34b384c0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-hokn.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-hond.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-hond.png new file mode 100755 index 00000000..73651f9c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-hond.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-hung.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-hung.png new file mode 100755 index 00000000..cd1958b0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-hung.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-icel.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-icel.png new file mode 100755 index 00000000..63a2a5b9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-icel.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-icrc.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-icrc.png new file mode 100755 index 00000000..4c8e2a70 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-icrc.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-inda.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-inda.png new file mode 100755 index 00000000..7de6e214 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-inda.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-indn.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-indn.png new file mode 100755 index 00000000..8ba6ef08 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-indn.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-iraq.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-iraq.png new file mode 100755 index 00000000..f9b45272 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-iraq.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-irel.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-irel.png new file mode 100755 index 00000000..4d660aaa Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-irel.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-isco.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-isco.png new file mode 100755 index 00000000..4956cb1c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-isco.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-isma.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-isma.png new file mode 100755 index 00000000..6467fd58 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-isma.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-isra.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-isra.png new file mode 100755 index 00000000..8e84c226 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-isra.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ital.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ital.png new file mode 100755 index 00000000..8c8716cf Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ital.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-jama.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-jama.png new file mode 100755 index 00000000..c285ea5a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-jama.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-japa.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-japa.png new file mode 100755 index 00000000..97664b30 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-japa.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-jers.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-jers.png new file mode 100755 index 00000000..771cd6b3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-jers.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-jord.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-jord.png new file mode 100755 index 00000000..d2930bbd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-jord.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-kazk.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-kazk.png new file mode 100755 index 00000000..3eb3ef10 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-kazk.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-keny.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-keny.png new file mode 100755 index 00000000..64d99431 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-keny.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-kirb.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-kirb.png new file mode 100755 index 00000000..6394828c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-kirb.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-kuwa.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-kuwa.png new file mode 100755 index 00000000..58fdf8a7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-kuwa.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-kyrg.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-kyrg.png new file mode 100755 index 00000000..dae02a88 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-kyrg.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-latv.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-latv.png new file mode 100755 index 00000000..8f05ee0a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-latv.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-leba.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-leba.png new file mode 100755 index 00000000..965a07d7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-leba.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-lest.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-lest.png new file mode 100755 index 00000000..6b31c648 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-lest.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-libe.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-libe.png new file mode 100755 index 00000000..dfd9989b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-libe.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-liec.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-liec.png new file mode 100755 index 00000000..6ff745f5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-liec.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-lith.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-lith.png new file mode 100755 index 00000000..f2132207 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-lith.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-luxe.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-luxe.png new file mode 100755 index 00000000..1df36abf Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-luxe.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-maca.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-maca.png new file mode 100755 index 00000000..224795ee Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-maca.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mace.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mace.png new file mode 100755 index 00000000..ded7527c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mace.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mada.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mada.png new file mode 100755 index 00000000..5c1f172f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mada.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mais.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mais.png new file mode 100755 index 00000000..797a1c27 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mais.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mali.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mali.png new file mode 100755 index 00000000..f1b91714 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mali.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mals.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mals.png new file mode 100755 index 00000000..298628fa Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mals.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-malt.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-malt.png new file mode 100755 index 00000000..6621bba6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-malt.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-malw.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-malw.png new file mode 100755 index 00000000..3043524e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-malw.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mart.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mart.png new file mode 100755 index 00000000..84f7c0e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mart.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-maur.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-maur.png new file mode 100755 index 00000000..963c6f72 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-maur.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mayt.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mayt.png new file mode 100755 index 00000000..84f7c0e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mayt.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mexc.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mexc.png new file mode 100755 index 00000000..2d54b6ba Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mexc.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-micr.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-micr.png new file mode 100755 index 00000000..3269c179 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-micr.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-miis.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-miis.png new file mode 100755 index 00000000..a1e9e276 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-miis.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mold.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mold.png new file mode 100755 index 00000000..8184700c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mold.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mona.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mona.png new file mode 100755 index 00000000..837faef3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mona.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mong.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mong.png new file mode 100755 index 00000000..8f903e29 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mong.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mont.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mont.png new file mode 100755 index 00000000..318f4faa Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mont.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-morc.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-morc.png new file mode 100755 index 00000000..2d8d6c83 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-morc.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-moza.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-moza.png new file mode 100755 index 00000000..389b287f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-moza.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mrts.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mrts.png new file mode 100755 index 00000000..ae2c98fe Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-mrts.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-myan.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-myan.png new file mode 100755 index 00000000..2d46b84d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-myan.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-namb.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-namb.png new file mode 100755 index 00000000..6fb1120c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-namb.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nato.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nato.png new file mode 100755 index 00000000..ce919b28 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nato.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-naur.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-naur.png new file mode 100755 index 00000000..d771bf11 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-naur.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ncyp.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ncyp.png new file mode 100755 index 00000000..250e77bf Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ncyp.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nean.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nean.png new file mode 100755 index 00000000..10f3ce0c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nean.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nepa.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nepa.png new file mode 100755 index 00000000..7008eb83 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nepa.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-neth.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-neth.png new file mode 100755 index 00000000..e0b21cdf Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-neth.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nfis.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nfis.png new file mode 100755 index 00000000..6aa562f7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nfis.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ngra.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ngra.png new file mode 100755 index 00000000..d8d06d26 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ngra.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nica.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nica.png new file mode 100755 index 00000000..edd3dcd2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nica.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nigr.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nigr.png new file mode 100755 index 00000000..a2c62d59 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nigr.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-niue.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-niue.png new file mode 100755 index 00000000..851e97e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-niue.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nmar.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nmar.png new file mode 100755 index 00000000..cdeeb344 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nmar.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-noir.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-noir.png new file mode 100755 index 00000000..2741573e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-noir.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nord.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nord.png new file mode 100755 index 00000000..059a704b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nord.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-norw.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-norw.png new file mode 100755 index 00000000..bbe47179 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-norw.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nwca.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nwca.png new file mode 100755 index 00000000..84f7c0e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nwca.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nwze.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nwze.png new file mode 100755 index 00000000..7f635661 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-nwze.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-oast.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-oast.png new file mode 100755 index 00000000..82263fc1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-oast.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-oaun.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-oaun.png new file mode 100755 index 00000000..933cf36d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-oaun.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-olym.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-olym.png new file mode 100755 index 00000000..8b066378 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-olym.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-oman.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-oman.png new file mode 100755 index 00000000..b74be0f1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-oman.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-paks.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-paks.png new file mode 100755 index 00000000..34a48baa Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-paks.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-pala.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-pala.png new file mode 100755 index 00000000..6e14b73c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-pala.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-pang.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-pang.png new file mode 100755 index 00000000..4c646262 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-pang.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-para.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-para.png new file mode 100755 index 00000000..cd11b437 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-para.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-peru.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-peru.png new file mode 100755 index 00000000..b4366d0a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-peru.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-phil.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-phil.png new file mode 100755 index 00000000..a24085ab Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-phil.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-piis.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-piis.png new file mode 100755 index 00000000..c35e64bd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-piis.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-pola.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-pola.png new file mode 100755 index 00000000..16da9a46 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-pola.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-port.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-port.png new file mode 100755 index 00000000..224795ee Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-port.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-purc.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-purc.png new file mode 100755 index 00000000..5fa88e3f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-purc.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-qata.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-qata.png new file mode 100755 index 00000000..2c2b6d12 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-qata.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-rmna.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-rmna.png new file mode 100755 index 00000000..9c347f57 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-rmna.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-russ.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-russ.png new file mode 100755 index 00000000..d1960a13 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-russ.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-rwan.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-rwan.png new file mode 100755 index 00000000..12b69a36 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-rwan.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-saar.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-saar.png new file mode 100755 index 00000000..fb9ba6ff Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-saar.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sama.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sama.png new file mode 100755 index 00000000..ffc600b1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sama.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sami.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sami.png new file mode 100755 index 00000000..a3209aed Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sami.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sark.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sark.png new file mode 100755 index 00000000..2afb121b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sark.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-scot.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-scot.png new file mode 100755 index 00000000..bf4fb8dc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-scot.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sebo.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sebo.png new file mode 100755 index 00000000..426a21b0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sebo.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-serb.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-serb.png new file mode 100755 index 00000000..6020f562 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-serb.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sile.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sile.png new file mode 100755 index 00000000..eb42b0a0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sile.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sing.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sing.png new file mode 100755 index 00000000..1813283a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sing.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-skor.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-skor.png new file mode 100755 index 00000000..010e0ddb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-skor.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-slva.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-slva.png new file mode 100755 index 00000000..9279ad52 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-slva.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-smla.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-smla.png new file mode 100755 index 00000000..e5157089 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-smla.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-smld.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-smld.png new file mode 100755 index 00000000..0d6451b1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-smld.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-soaf.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-soaf.png new file mode 100755 index 00000000..4ccaaba1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-soaf.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sois.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sois.png new file mode 100755 index 00000000..ac3bd04a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-sois.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-span.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-span.png new file mode 100755 index 00000000..7b3cf718 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-span.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-spco.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-spco.png new file mode 100755 index 00000000..0a133c07 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-spco.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-srla.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-srla.png new file mode 100755 index 00000000..5d3c7ade Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-srla.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-stlu.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-stlu.png new file mode 100755 index 00000000..1c9f2bfc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-stlu.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-suda.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-suda.png new file mode 100755 index 00000000..6916f16e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-suda.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-surn.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-surn.png new file mode 100755 index 00000000..10be0d4a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-surn.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-svka.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-svka.png new file mode 100755 index 00000000..681158c1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-svka.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-swdn.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-swdn.png new file mode 100755 index 00000000..ff3c7156 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-swdn.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-swit.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-swit.png new file mode 100755 index 00000000..4c6a05e4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-swit.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-syra.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-syra.png new file mode 100755 index 00000000..af7b5241 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-syra.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-szld.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-szld.png new file mode 100755 index 00000000..db598e7b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-szld.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-taiw.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-taiw.png new file mode 100755 index 00000000..ffd7d77a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-taiw.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tajk.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tajk.png new file mode 100755 index 00000000..498874c8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tajk.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tanz.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tanz.png new file mode 100755 index 00000000..b5e96639 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tanz.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-thal.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-thal.png new file mode 100755 index 00000000..881faf42 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-thal.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tibe.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tibe.png new file mode 100755 index 00000000..70f6c7d7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tibe.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tkst.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tkst.png new file mode 100755 index 00000000..688d3865 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tkst.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-togo.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-togo.png new file mode 100755 index 00000000..83aaefb3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-togo.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-toke.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-toke.png new file mode 100755 index 00000000..7a844f26 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-toke.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tong.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tong.png new file mode 100755 index 00000000..fd0b4823 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tong.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-trdc.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-trdc.png new file mode 100755 index 00000000..c96bbbdb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-trdc.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tris.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tris.png new file mode 100755 index 00000000..84f7c0e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tris.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tuns.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tuns.png new file mode 100755 index 00000000..9a1fd4fc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tuns.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-turk.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-turk.png new file mode 100755 index 00000000..507c6f8a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-turk.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tuva.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tuva.png new file mode 100755 index 00000000..83b32576 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-tuva.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-uaem.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-uaem.png new file mode 100755 index 00000000..e79703f1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-uaem.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ugan.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ugan.png new file mode 100755 index 00000000..469e5d7f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ugan.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ukrn.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ukrn.png new file mode 100755 index 00000000..7cc01a42 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-ukrn.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-unkg.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-unkg.png new file mode 100755 index 00000000..5caf5b5f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-unkg.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-unna.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-unna.png new file mode 100755 index 00000000..93ff5a97 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-unna.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-unst.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-unst.png new file mode 100755 index 00000000..a1e9e276 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-unst.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-urgy.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-urgy.png new file mode 100755 index 00000000..95c19329 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-urgy.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-usvs.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-usvs.png new file mode 100755 index 00000000..c0cfd365 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-usvs.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-uzbk.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-uzbk.png new file mode 100755 index 00000000..496bf97c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-uzbk.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-vacy.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-vacy.png new file mode 100755 index 00000000..08d5b785 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-vacy.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-vant.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-vant.png new file mode 100755 index 00000000..9ff600b9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-vant.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-venz.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-venz.png new file mode 100755 index 00000000..99197984 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-venz.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-yemn.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-yemn.png new file mode 100755 index 00000000..b8260d54 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-yemn.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-zare.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-zare.png new file mode 100755 index 00000000..1fb3a23e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-zare.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/flag-zbwe.png b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-zbwe.png new file mode 100755 index 00000000..b828aca6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/flag-zbwe.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/footer1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/footer1.png new file mode 100755 index 00000000..a37a69bb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/footer1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/footerex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/footerex1.png new file mode 100755 index 00000000..1e03ad57 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/footerex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/funcex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/funcex2.png new file mode 100755 index 00000000..dc0ef08e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/funcex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_3dplane.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_3dplane.png new file mode 100755 index 00000000..17fcfcbb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_3dplane.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_caption.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_caption.png new file mode 100755 index 00000000..c9e1e3c4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_caption.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_diagcross.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_diagcross.png new file mode 100755 index 00000000..4fd1963a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_diagcross.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_hline.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_hline.png new file mode 100755 index 00000000..02f9de86 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_hline.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_hvcross.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_hvcross.png new file mode 100755 index 00000000..d201de36 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_hvcross.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_ldiag.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_ldiag.png new file mode 100755 index 00000000..16ff10bb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_ldiag.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_rdiag.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_rdiag.png new file mode 100755 index 00000000..59328bc6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_rdiag.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_rightmarker.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_rightmarker.png new file mode 100755 index 00000000..ff18c0ee Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_rightmarker.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_solid.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_solid.png new file mode 100755 index 00000000..1feb8990 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_solid.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_vline.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_vline.png new file mode 100755 index 00000000..4518b0bb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-bar_vline.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-constraint-end-to-end.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-constraint-end-to-end.png new file mode 100755 index 00000000..9fba0389 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-constraint-end-to-end.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-constraint-end-to-start.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-constraint-end-to-start.png new file mode 100755 index 00000000..7b566e27 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-constraint-end-to-start.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-constraint-start-to-end.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-constraint-start-to-end.png new file mode 100755 index 00000000..df1f0387 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-constraint-start-to-end.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-constraint-start-to-start.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-constraint-start-to-start.png new file mode 100755 index 00000000..e7f6ecbe Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-constraint-start-to-start.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-divider-lines-original-amended.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-divider-lines-original-amended.png new file mode 100755 index 00000000..122e58be Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-divider-lines-original-amended.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-divider-lines-original.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-divider-lines-original.png new file mode 100755 index 00000000..7502b10a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-divider-lines-original.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-group-illustration.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-group-illustration.png new file mode 100755 index 00000000..41dd821a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-group-illustration.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-locale-error.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-locale-error.png new file mode 100755 index 00000000..737ef5c3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-locale-error.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-properties-original-amended-small.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-properties-original-amended-small.png new file mode 100755 index 00000000..acd7276f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-properties-original-amended-small.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-properties-original-amended.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-properties-original-amended.png new file mode 100755 index 00000000..51755f40 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-properties-original-amended.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-properties-original.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-properties-original.png new file mode 100755 index 00000000..6fcc08cb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-properties-original.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-scale-headers-amended.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-scale-headers-amended.png new file mode 100755 index 00000000..61402d02 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-scale-headers-amended.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-scale-headers.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-scale-headers.png new file mode 100755 index 00000000..7c98bf50 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt-scale-headers.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt_samerowex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt_samerowex1.png new file mode 100755 index 00000000..5917e438 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt_samerowex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt_samerowex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt_samerowex2.png new file mode 100755 index 00000000..ea82bd87 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt_samerowex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantt_textex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt_textex1.png new file mode 100755 index 00000000..63114945 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantt_textex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttcolumnfontsex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttcolumnfontsex01.png new file mode 100755 index 00000000..ec4fa61d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttcolumnfontsex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttconstrainex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttconstrainex2.png new file mode 100755 index 00000000..4aa06696 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttconstrainex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex00.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex00.png new file mode 100755 index 00000000..87b336d3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex00.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex01.png new file mode 100755 index 00000000..a7fcf6cd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex03.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex03.png new file mode 100755 index 00000000..54e0bf6c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex03.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex04.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex04.png new file mode 100755 index 00000000..fc1d000b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex04.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex06.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex06.png new file mode 100755 index 00000000..8d22f450 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex06.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex07.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex07.png new file mode 100755 index 00000000..8d22f450 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex07.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex08.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex08.png new file mode 100755 index 00000000..8f949eb9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex08.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex13-zoom1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex13-zoom1.png new file mode 100755 index 00000000..f910279d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex13-zoom1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex13-zoom2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex13-zoom2.png new file mode 100755 index 00000000..39032abf Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex13-zoom2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex14.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex14.png new file mode 100755 index 00000000..211e0fac Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex14.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex15.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex15.png new file mode 100755 index 00000000..5eebe39a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex15.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex16.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex16.png new file mode 100755 index 00000000..e0d1939d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex16.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex17-flag.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex17-flag.png new file mode 100755 index 00000000..459b0cec Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex17-flag.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex18.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex18.png new file mode 100755 index 00000000..47bfd6ac Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex18.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex19.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex19.png new file mode 100755 index 00000000..87bd7c75 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex19.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex30.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex30.png new file mode 100755 index 00000000..fe1317a4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttex30.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantthourex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantthourex1.png new file mode 100755 index 00000000..bb4dd936 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantthourex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantthourminex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantthourminex1.png new file mode 100755 index 00000000..b2f0eedd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantthourminex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_calc.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_calc.png new file mode 100755 index 00000000..23cfb774 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_calc.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_edit.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_edit.png new file mode 100755 index 00000000..22b4ecb7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_edit.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_endconstrain.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_endconstrain.png new file mode 100755 index 00000000..a0291661 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_endconstrain.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_error.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_error.png new file mode 100755 index 00000000..7c63a39f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_error.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_file_important.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_file_important.png new file mode 100755 index 00000000..59dd95a5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_file_important.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_folder_orange.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_folder_orange.png new file mode 100755 index 00000000..111fedfa Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_folder_orange.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_folder_orange_open.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_folder_orange_open.png new file mode 100755 index 00000000..ddf1d174 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_folder_orange_open.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_lock.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_lock.png new file mode 100755 index 00000000..df1b2e06 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_lock.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_mail.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_mail.png new file mode 100755 index 00000000..06f2d821 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_mail.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_startconstrain.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_startconstrain.png new file mode 100755 index 00000000..b983feb8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_startconstrain.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_stop.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_stop.png new file mode 100755 index 00000000..51ecc279 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_stop.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_viewmag.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_viewmag.png new file mode 100755 index 00000000..b6e504c6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_viewmag.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_warning.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_warning.png new file mode 100755 index 00000000..53336cad Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticon_warning.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gantticonex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticonex1.png new file mode 100755 index 00000000..d699b8fc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gantticonex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttmonthyearex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttmonthyearex2.png new file mode 100755 index 00000000..49f0574c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttmonthyearex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttmonthyearex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttmonthyearex3.png new file mode 100755 index 00000000..33e215a6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttmonthyearex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttmonthyearex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttmonthyearex4.png new file mode 100755 index 00000000..6c88cee9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttmonthyearex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ganttsimpleex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttsimpleex1.png new file mode 100755 index 00000000..5744ab06 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ganttsimpleex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grace_ex0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grace_ex0.png new file mode 100755 index 00000000..7819839d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grace_ex0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grace_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grace_ex1.png new file mode 100755 index 00000000..ae760687 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grace_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grace_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grace_ex2.png new file mode 100755 index 00000000..cac8477f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grace_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grace_ex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grace_ex3.png new file mode 100755 index 00000000..5daba948 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grace_ex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_bgrad_frame.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_bgrad_frame.png new file mode 100755 index 00000000..64d3cc9d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_bgrad_frame.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_bgrad_margin.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_bgrad_margin.png new file mode 100755 index 00000000..1d57205e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_bgrad_margin.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_bgrad_plot.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_bgrad_plot.png new file mode 100755 index 00000000..1d466d83 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_bgrad_plot.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_center.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_center.png new file mode 100755 index 00000000..bdf3c54d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_center.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_diagonal.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_diagonal.png new file mode 100755 index 00000000..3f2d1a5b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_diagonal.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_hor.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_hor.png new file mode 100755 index 00000000..5d7ba0bd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_hor.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_left_reflection.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_left_reflection.png new file mode 100755 index 00000000..b4d11899 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_left_reflection.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_midhor.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_midhor.png new file mode 100755 index 00000000..b7a6415e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_midhor.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_midver.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_midver.png new file mode 100755 index 00000000..a8362a32 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_midver.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_raised_panel.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_raised_panel.png new file mode 100755 index 00000000..0aacb265 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_raised_panel.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_right_reflection.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_right_reflection.png new file mode 100755 index 00000000..19dafcc4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_right_reflection.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_vert.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_vert.png new file mode 100755 index 00000000..2b1100af Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_vert.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_wide_midhor.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_wide_midhor.png new file mode 100755 index 00000000..865fc5e4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_wide_midhor.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/grad_wide_midver.png b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_wide_midver.png new file mode 100755 index 00000000..f49cb635 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/grad_wide_midver.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gradbkgex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gradbkgex1.png new file mode 100755 index 00000000..1c7a00bd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gradbkgex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gradlinefillex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gradlinefillex1.png new file mode 100755 index 00000000..4f96e1e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gradlinefillex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gradlinefillex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gradlinefillex2.png new file mode 100755 index 00000000..471dd444 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gradlinefillex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gradlinefillex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gradlinefillex3.png new file mode 100755 index 00000000..210c8358 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/gradlinefillex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/graph-obj-overview.png b/Societes/ric/jpgraph/docs/chunkhtml/images/graph-obj-overview.png new file mode 100755 index 00000000..ebed3601 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/graph-obj-overview.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/graph_for_background_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/graph_for_background_example.png new file mode 100755 index 00000000..9fdf8bd6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/graph_for_background_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/green_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/green_example.png new file mode 100755 index 00000000..10f04e74 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/green_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/gridstylesex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/gridstylesex1.png new file mode 100755 index 00000000..e69de29b diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/groupbarex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/groupbarex1.png new file mode 100755 index 00000000..2b66633a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/groupbarex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/heat1.jpg b/Societes/ric/jpgraph/docs/chunkhtml/images/heat1.jpg new file mode 100755 index 00000000..07f04d76 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/heat1.jpg differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/horizbarex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/horizbarex1.png new file mode 100755 index 00000000..7169a710 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/horizbarex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/horizbarex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/horizbarex4.png new file mode 100755 index 00000000..cf3c105b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/horizbarex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/horizbarex6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/horizbarex6.png new file mode 100755 index 00000000..d1cdfce6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/horizbarex6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_circle.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_circle.png new file mode 100755 index 00000000..236c7a12 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_circle.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_cross.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_cross.png new file mode 100755 index 00000000..433c83aa Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_cross.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_diamond.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_diamond.png new file mode 100755 index 00000000..23befa45 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_diamond.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_dtriangle.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_dtriangle.png new file mode 100755 index 00000000..8f5896c0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_dtriangle.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_filledcircle.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_filledcircle.png new file mode 100755 index 00000000..61eecffe Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_filledcircle.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_flash.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_flash.png new file mode 100755 index 00000000..5746b0b0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_flash.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_lefttriangle.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_lefttriangle.png new file mode 100755 index 00000000..0428fff9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_lefttriangle.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_none.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_none.png new file mode 100755 index 00000000..94d29fbf Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_none.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_righttriangle.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_righttriangle.png new file mode 100755 index 00000000..a3a5a24b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_righttriangle.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_square.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_square.png new file mode 100755 index 00000000..c6149a6d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_square.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_star.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_star.png new file mode 100755 index 00000000..0a9ba109 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_star.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_utriangle.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_utriangle.png new file mode 100755 index 00000000..b23fa9de Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_utriangle.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_x.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_x.png new file mode 100755 index 00000000..7fbe1d84 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_marker_x.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaccbar.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaccbar.png new file mode 100755 index 00000000..8714e573 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaccbar.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaccbar90.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaccbar90.png new file mode 100755 index 00000000..cd9108d7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaccbar90.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis1.png new file mode 100755 index 00000000..16acd829 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis10.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis10.png new file mode 100755 index 00000000..051510ef Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis10.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis1top.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis1top.png new file mode 100755 index 00000000..59715d76 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis1top.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis1topbox.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis1topbox.png new file mode 100755 index 00000000..2b53b0ff Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis1topbox.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis2.png new file mode 100755 index 00000000..91025cb3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis3.png new file mode 100755 index 00000000..91e2a744 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis4.png new file mode 100755 index 00000000..b5b5f2a1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis5.png new file mode 100755 index 00000000..05735cce Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis6.png new file mode 100755 index 00000000..a8119303 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis9.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis9.png new file mode 100755 index 00000000..e0b895e8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmaxis9.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmbar.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmbar.png new file mode 100755 index 00000000..e17b694b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmbar.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmbar90.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmbar90.png new file mode 100755 index 00000000..801ac431 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmbar90.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmgroupaccbar.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmgroupaccbar.png new file mode 100755 index 00000000..75f8f1dc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmgroupaccbar.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmgroupaccbar90.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmgroupaccbar90.png new file mode 100755 index 00000000..3eddad81 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmgroupaccbar90.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmgroupbar.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmgroupbar.png new file mode 100755 index 00000000..bedeb9a7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmgroupbar.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmgroupbar90.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmgroupbar90.png new file mode 100755 index 00000000..de880d89 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmgroupbar90.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend1.png new file mode 100755 index 00000000..cdc5da9b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend10.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend10.png new file mode 100755 index 00000000..e8e3de76 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend10.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend15.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend15.png new file mode 100755 index 00000000..c6c51ec0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend15.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend2.png new file mode 100755 index 00000000..8057aec2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend3.png new file mode 100755 index 00000000..621a1164 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend35.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend35.png new file mode 100755 index 00000000..c91dd06f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend35.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend4.png new file mode 100755 index 00000000..7dc7f289 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend5.png new file mode 100755 index 00000000..5a262420 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend55.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend55.png new file mode 100755 index 00000000..6ae53de5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend55.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend6.png new file mode 100755 index 00000000..3e76e6d4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend7.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend7.png new file mode 100755 index 00000000..be60277a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend7.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend75.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend75.png new file mode 100755 index 00000000..29b75f24 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend75.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend8.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend8.png new file mode 100755 index 00000000..d366fe4b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend8.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend9.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend9.png new file mode 100755 index 00000000..f8def490 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmlegend9.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_10.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_10.png new file mode 100755 index 00000000..ac27ecbf Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_10.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_20.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_20.png new file mode 100755 index 00000000..527f907b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_20.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_30.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_30.png new file mode 100755 index 00000000..557086b4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_30.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_40.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_40.png new file mode 100755 index 00000000..30a330d8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_40.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_50.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_50.png new file mode 100755 index 00000000..653e111a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_50.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_60.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_60.png new file mode 100755 index 00000000..02622752 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_60.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_70.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_70.png new file mode 100755 index 00000000..9773303a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_70.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_80.png b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_80.png new file mode 100755 index 00000000..7a933664 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/img_mmpie3d_80.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/imgmarkerex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/imgmarkerex1.png new file mode 100755 index 00000000..086394e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/imgmarkerex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/impulsex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/impulsex1.png new file mode 100755 index 00000000..52bdd8b5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/impulsex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/impulsex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/impulsex3.png new file mode 100755 index 00000000..bb0e3fec Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/impulsex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/impulsex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/impulsex4.png new file mode 100755 index 00000000..a14dfa71 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/impulsex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/interpolation-growth-log.png b/Societes/ric/jpgraph/docs/chunkhtml/images/interpolation-growth-log.png new file mode 100755 index 00000000..2322df64 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/interpolation-growth-log.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/interpolation-growth.png b/Societes/ric/jpgraph/docs/chunkhtml/images/interpolation-growth.png new file mode 100755 index 00000000..62a76b94 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/interpolation-growth.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/inyaxisex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/inyaxisex2.png new file mode 100755 index 00000000..436bc8f4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/inyaxisex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/jpgraph-and-php.png b/Societes/ric/jpgraph/docs/chunkhtml/images/jpgraph-and-php.png new file mode 100755 index 00000000..b14c2f9c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/jpgraph-and-php.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/led_cyrillic1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/led_cyrillic1.png new file mode 100755 index 00000000..5128409d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/led_cyrillic1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/led_cyrillic2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/led_cyrillic2.png new file mode 100755 index 00000000..eb7992a9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/led_cyrillic2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex1.png new file mode 100755 index 00000000..bd7e3b53 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex10.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex10.png new file mode 100755 index 00000000..58b16adf Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex10.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex11.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex11.png new file mode 100755 index 00000000..a78a6fd4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex11.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex12.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex12.png new file mode 100755 index 00000000..030e9d65 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex12.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex13.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex13.png new file mode 100755 index 00000000..86b0886b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex13.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex14.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex14.png new file mode 100755 index 00000000..e4791d41 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex14.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex15.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex15.png new file mode 100755 index 00000000..5cbd8131 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex15.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex16.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex16.png new file mode 100755 index 00000000..2bac1734 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex16.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex17.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex17.png new file mode 100755 index 00000000..969819bc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex17.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex2.png new file mode 100755 index 00000000..a51ba17f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex3.png new file mode 100755 index 00000000..18175c06 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex4.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex4.1.png new file mode 100755 index 00000000..086aec69 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex4.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex4.2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex4.2.png new file mode 100755 index 00000000..85448246 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex4.2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex4.png new file mode 100755 index 00000000..8be7e142 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex5.png new file mode 100755 index 00000000..019411c6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex6.png new file mode 100755 index 00000000..2cac430e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex7.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex7.png new file mode 100755 index 00000000..faa66b6e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex7.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex8.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex8.png new file mode 100755 index 00000000..98e5c280 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex8.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ledex9.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex9.png new file mode 100755 index 00000000..8a36f531 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ledex9.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/legend-1col.png b/Societes/ric/jpgraph/docs/chunkhtml/images/legend-1col.png new file mode 100755 index 00000000..00d7f015 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/legend-1col.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/legend-2col.png b/Societes/ric/jpgraph/docs/chunkhtml/images/legend-2col.png new file mode 100755 index 00000000..b8409413 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/legend-2col.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/legend-3col.png b/Societes/ric/jpgraph/docs/chunkhtml/images/legend-3col.png new file mode 100755 index 00000000..bdcc9c60 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/legend-3col.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/legend-4col.png b/Societes/ric/jpgraph/docs/chunkhtml/images/legend-4col.png new file mode 100755 index 00000000..873bb48a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/legend-4col.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/legend-col-layouts.png b/Societes/ric/jpgraph/docs/chunkhtml/images/legend-col-layouts.png new file mode 100755 index 00000000..b7f69e3f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/legend-col-layouts.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/linebarcentex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/linebarcentex1.png new file mode 100755 index 00000000..5baf7aee Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/linebarcentex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/lineiconex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/lineiconex1.png new file mode 100755 index 00000000..01999002 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/lineiconex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/lineiconex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/lineiconex2.png new file mode 100755 index 00000000..2d7c91fe Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/lineiconex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/lineimagefillex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/lineimagefillex1.png new file mode 100755 index 00000000..4c131e4d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/lineimagefillex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_antialias.png b/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_antialias.png new file mode 100755 index 00000000..8cb46fcd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_antialias.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_dashed.png b/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_dashed.png new file mode 100755 index 00000000..4962be97 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_dashed.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_dotted.png b/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_dotted.png new file mode 100755 index 00000000..3b571f26 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_dotted.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_longdash.png b/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_longdash.png new file mode 100755 index 00000000..e79d50b9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_longdash.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_standard.png b/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_standard.png new file mode 100755 index 00000000..c8eef06d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_standard.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_thick.png b/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_thick.png new file mode 100755 index 00000000..3d1c1984 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/linestyle_thick.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/listfontsex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/listfontsex1.png new file mode 100755 index 00000000..c651527c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/listfontsex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/loglogex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/loglogex1.png new file mode 100755 index 00000000..b02b4372 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/loglogex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/manscaleex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/manscaleex1.png new file mode 100755 index 00000000..688c5b5c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/manscaleex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/manscaleex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/manscaleex2.png new file mode 100755 index 00000000..4af484a0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/manscaleex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/manscaleex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/manscaleex3.png new file mode 100755 index 00000000..804d38b6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/manscaleex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/manual_textscale_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/manual_textscale_ex1.png new file mode 100755 index 00000000..a9b6fed1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/manual_textscale_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/manual_textscale_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/manual_textscale_ex2.png new file mode 100755 index 00000000..512f6a16 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/manual_textscale_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/manual_textscale_ex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/manual_textscale_ex3.png new file mode 100755 index 00000000..40419fbc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/manual_textscale_ex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/manual_textscale_ex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/manual_textscale_ex4.png new file mode 100755 index 00000000..3e068175 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/manual_textscale_ex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex1.png new file mode 100755 index 00000000..24c16a48 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex1a.png b/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex1a.png new file mode 100755 index 00000000..750954f6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex1a.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex2.png new file mode 100755 index 00000000..d23b94c8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex3.png new file mode 100755 index 00000000..a83e6666 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex4.png new file mode 100755 index 00000000..5e9c4e7f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/manualtickex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/markflagex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/markflagex1.png new file mode 100755 index 00000000..fcfb96fa Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/markflagex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix-colormap-contrast.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix-colormap-contrast.png new file mode 100755 index 00000000..e893c9a5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix-colormap-contrast.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_csimex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_csimex01.png new file mode 100755 index 00000000..abd6bce9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_csimex01.png @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_edgeex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_edgeex01.png new file mode 100755 index 00000000..b1d8cadc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_edgeex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex0.png new file mode 100755 index 00000000..a220d033 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex03.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex03.png new file mode 100755 index 00000000..0d0577cb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex03.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex04.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex04.1.png new file mode 100755 index 00000000..d3ac48f3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex04.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex04.2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex04.2.png new file mode 100755 index 00000000..ff3dd42a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex04.2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex04.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex04.png new file mode 100755 index 00000000..48de09e1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex04.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex05.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex05.png new file mode 100755 index 00000000..2c8b9bd7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex05.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex06.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex06.png new file mode 100755 index 00000000..0b74afbd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_ex06.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_introex.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_introex.png new file mode 100755 index 00000000..ebaf597d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_introex.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_layout_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_layout_ex1.png new file mode 100755 index 00000000..400c23ae Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_layout_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_legend_pos.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_legend_pos.png new file mode 100755 index 00000000..99dd5c76 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_legend_pos.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh1.png new file mode 100755 index 00000000..747f1cf8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh2.png new file mode 100755 index 00000000..435ee84f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh3.png new file mode 100755 index 00000000..ffdcffac Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh4.png new file mode 100755 index 00000000..c8a8311e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh5.png new file mode 100755 index 00000000..db851048 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/matrix_mesh5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/mkgrad.png b/Societes/ric/jpgraph/docs/chunkhtml/images/mkgrad.png new file mode 100755 index 00000000..6094768c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/mkgrad.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/mulyaxisex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/mulyaxisex1.png new file mode 100755 index 00000000..45f2f993 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/mulyaxisex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/mulycsim_example_static.png b/Societes/ric/jpgraph/docs/chunkhtml/images/mulycsim_example_static.png new file mode 100755 index 00000000..df9605c1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/mulycsim_example_static.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/nullvalues1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/nullvalues1.png new file mode 100755 index 00000000..09b56aa5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/nullvalues1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/nullvalues2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/nullvalues2.png new file mode 100755 index 00000000..2a3b9fa5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/nullvalues2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/nullvalues3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/nullvalues3.png new file mode 100755 index 00000000..3ec38245 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/nullvalues3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ocean_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ocean_example.png new file mode 100755 index 00000000..bedd09fe Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ocean_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odometer_bulletin.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odometer_bulletin.png new file mode 100755 index 00000000..5bcbe9c9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odometer_bulletin.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex00.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex00.png new file mode 100755 index 00000000..4e84848d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex00.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex01.png new file mode 100755 index 00000000..a242a750 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex02.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex02.png new file mode 100755 index 00000000..5460db45 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex02.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex03.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex03.png new file mode 100755 index 00000000..02547a2e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex03.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex04.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex04.png new file mode 100755 index 00000000..853dc584 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex04.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex06.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex06.png new file mode 100755 index 00000000..b3a29415 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex06.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex07.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex07.png new file mode 100755 index 00000000..fe4d1f5f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex07.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex08.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex08.png new file mode 100755 index 00000000..6d63eff9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex08.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex09.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex09.png new file mode 100755 index 00000000..0029d1c9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex09.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex10.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex10.png new file mode 100755 index 00000000..5c1208a5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex10.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex11.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex11.png new file mode 100755 index 00000000..60024e29 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex11.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex12.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex12.png new file mode 100755 index 00000000..fae0af30 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex12.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex13.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex13.png new file mode 100755 index 00000000..a33619d2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex13.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex14.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex14.png new file mode 100755 index 00000000..87e222e0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex14.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex15.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex15.png new file mode 100755 index 00000000..a0b4b4e6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex15.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex16.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex16.1.png new file mode 100755 index 00000000..72defce6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex16.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex16.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex16.png new file mode 100755 index 00000000..8223a822 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex16.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex17.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex17.png new file mode 100755 index 00000000..be15413e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex17.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex18.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex18.png new file mode 100755 index 00000000..fa6d8d96 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex18.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex19.png b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex19.png new file mode 100755 index 00000000..cc96d8a6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/odotutex19.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/orange-scale.png b/Societes/ric/jpgraph/docs/chunkhtml/images/orange-scale.png new file mode 100755 index 00000000..b45533d0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/orange-scale.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/orange_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/orange_example.png new file mode 100755 index 00000000..3c32518f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/orange_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/partiallyfilledlineex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/partiallyfilledlineex1.png new file mode 100755 index 00000000..c6b397ce Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/partiallyfilledlineex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pastel_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pastel_example.png new file mode 100755 index 00000000..4ec60f75 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pastel_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-demoapp.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-demoapp.png new file mode 100755 index 00000000..3fc1e0e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-demoapp.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-encodation-principle.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-encodation-principle.png new file mode 100755 index 00000000..aceda2a4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-encodation-principle.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-structure-details.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-structure-details.png new file mode 100755 index 00000000..08ba6f7b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-structure-details.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-structure-overview-smaller.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-structure-overview-smaller.png new file mode 100755 index 00000000..4f25350a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-structure-overview-smaller.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-structure-overview.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-structure-overview.png new file mode 100755 index 00000000..6e984e4f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417-structure-overview.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_PDF-417.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_PDF-417.png new file mode 100755 index 00000000..ecb20bf7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_PDF-417.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex0.png new file mode 100755 index 00000000..a23b8f8d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex1.png new file mode 100755 index 00000000..a23b8f8d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex1b.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex1b.png new file mode 100755 index 00000000..a24f8a51 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex1b.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex2.png new file mode 100755 index 00000000..c4ce14a2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex3.png new file mode 100755 index 00000000..d1ed84d7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex4.png new file mode 100755 index 00000000..14d980fb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex5.png new file mode 100755 index 00000000..9924ecc6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex5.png @@ -0,0 +1,102 @@ +%!PS-Adobe-3.0
    +%%Title: PDF417 Barcode for "PDF-417"
    +%%Creator: JpGraph Barcode http://jpgraph.net/
    +%%CreationDate: Wed 6 Oct 23:36:04 2010
    +%%DocumentPaperSizes: A4
    +%%EndComments
    +%%BeginProlog
    +%%EndProlog
    +
    +%%Page: 1 1
    +
    +%%Module width: 0.8 pt
    +
    +%%Font definition for normal and small fonts
    +/f {/Helvetica findfont 9 scalefont setfont} def
    +/fs {/Helvetica findfont 9 scalefont setfont} def
    +
    +%%Data for bars. Only black bars are defined.
    +%%The figures are for each row and in format: [height xpos width]
    +[ [2.4 15.2 6.4] [2.4 19.6 0.8] [2.4 21.2 0.8] [2.4 22.8 0.8]
    + [2.4 27.2 3.2] [2.4 30 0.8] [2.4 32.8 3.2] [2.4 36.8 3.2]
    + [2.4 40.8 3.2] [2.4 44.4 0.8] [2.4 47.6 0.8] [2.4 49.2 0.8]
    + [2.4 53.2 0.8] [2.4 54.8 0.8] [2.4 59.2 3.2] [2.4 63.6 0.8]
    + [2.4 66.8 0.8] [2.4 70 0.8] [2.4 76 3.2] [2.4 78.8 0.8]
    + [2.4 80.4 0.8] [2.4 84.4 0.8] [2.4 89.6 3.2] [2.4 92.4 0.8]
    + [2.4 95.2 3.2] [2.4 99.6 0.8] [2.4 101.2 0.8] [2.4 104.4 0.8]
    + [2.4 108.8 3.2] [2.4 111.6 0.8] [2.4 115.6 0.8] [2.4 118.8 0.8]
    + [2.4 121.6 1.6] [2.4 126 0.8] [2.4 130 2.4] [2.4 132.4 0.8]
    + [2.4 134.8 0.8] [2.4 138.4 3.2] [2.4 142.8 0.8] [2.4 145.6 3.2]
    + [2.4 149.2 2.4] [2.4 151.6 0.8] [2.4 154 2.4] [2.4 157.6 1.6]
    + [2.4 164.4 5.6] [2.4 168.4 0.8] [2.4 171.6 0.8] [2.4 173.2 0.8] [2.4 175.6 0.8]
    +] {{} forall setlinewidth 22.4 moveto -1 mul 0 exch rlineto stroke} forall
    +
    +[ [2.4 15.2 6.4] [2.4 19.6 0.8] [2.4 21.2 0.8] [2.4 22.8 0.8]
    + [2.4 26 0.8] [2.4 27.6 0.8] [2.4 30.4 3.2] [2.4 35.2 3.2]
    + [2.4 39.6 0.8] [2.4 43.6 0.8] [2.4 45.6 1.6] [2.4 51.2 1.6]
    + [2.4 54 2.4] [2.4 57.2 2.4] [2.4 59.6 0.8] [2.4 64.4 0.8]
    + [2.4 67.6 2.4] [2.4 70.8 2.4] [2.4 74 0.8] [2.4 78 0.8]
    + [2.4 80.4 0.8] [2.4 82.8 2.4] [2.4 86.4 3.2] [2.4 89.6 1.6]
    + [2.4 94 0.8] [2.4 96 1.6] [2.4 101.6 1.6] [2.4 105.2 0.8]
    + [2.4 107.6 0.8] [2.4 109.2 0.8] [2.4 113.6 1.6] [2.4 119.2 1.6]
    + [2.4 121.2 0.8] [2.4 122.8 0.8] [2.4 125.6 1.6] [2.4 128.8 1.6]
    + [2.4 135.2 1.6] [2.4 139.6 2.4] [2.4 144 1.6] [2.4 146 0.8]
    + [2.4 150 4] [2.4 153.2 0.8] [2.4 155.6 0.8] [2.4 158.8 4]
    + [2.4 164.4 5.6] [2.4 168.4 0.8] [2.4 171.6 0.8] [2.4 173.2 0.8] [2.4 175.6 0.8]
    +] {{} forall setlinewidth 24.8 moveto -1 mul 0 exch rlineto stroke} forall
    +
    +[ [2.4 15.2 6.4] [2.4 19.6 0.8] [2.4 21.2 0.8] [2.4 22.8 0.8]
    + [2.4 26.8 2.4] [2.4 29.2 0.8] [2.4 30.8 0.8] [2.4 36 4.8]
    + [2.4 39.6 0.8] [2.4 42.8 2.4] [2.4 45.2 0.8] [2.4 48 1.6]
    + [2.4 53.2 0.8] [2.4 56.4 4] [2.4 62 2.4] [2.4 64.8 1.6]
    + [2.4 66.8 0.8] [2.4 70.8 2.4] [2.4 76.4 0.8] [2.4 78.4 1.6]
    + [2.4 80.4 0.8] [2.4 83.2 3.2] [2.4 86.8 0.8] [2.4 90.8 0.8]
    + [2.4 94 0.8] [2.4 96.4 0.8] [2.4 99.6 2.4] [2.4 104 4.8]
    + [2.4 108 1.6] [2.4 113.2 0.8] [2.4 114.8 0.8] [2.4 118 4]
    + [2.4 121.2 0.8] [2.4 122.8 0.8] [2.4 127.2 1.6] [2.4 130.8 4]
    + [2.4 134.8 0.8] [2.4 138.4 3.2] [2.4 141.2 0.8] [2.4 144.4 0.8]
    + [2.4 148.8 1.6] [2.4 150.8 0.8] [2.4 152.8 1.6] [2.4 156.8 4.8]
    + [2.4 164.4 5.6] [2.4 168.4 0.8] [2.4 171.6 0.8] [2.4 173.2 0.8] [2.4 175.6 0.8]
    +] {{} forall setlinewidth 27.2 moveto -1 mul 0 exch rlineto stroke} forall
    +
    +[ [2.4 15.2 6.4] [2.4 19.6 0.8] [2.4 21.2 0.8] [2.4 22.8 0.8]
    + [2.4 27.2 3.2] [2.4 30 0.8] [2.4 32 1.6] [2.4 34.4 1.6]
    + [2.4 40.4 2.4] [2.4 46 0.8] [2.4 48.8 1.6] [2.4 51.6 0.8]
    + [2.4 53.6 1.6] [2.4 56 1.6] [2.4 59.2 3.2] [2.4 64.4 0.8]
    + [2.4 66.8 0.8] [2.4 69.6 3.2] [2.4 73.2 0.8] [2.4 76 3.2]
    + [2.4 81.6 3.2] [2.4 85.6 1.6] [2.4 88.8 1.6] [2.4 92.4 0.8]
    + [2.4 94.8 2.4] [2.4 97.2 0.8] [2.4 100 1.6] [2.4 105.2 0.8]
    + [2.4 108.4 2.4] [2.4 112.4 0.8] [2.4 115.6 2.4] [2.4 118.4 1.6]
    + [2.4 123.2 4.8] [2.4 127.2 1.6] [2.4 130 0.8] [2.4 132 1.6]
    + [2.4 136.4 4] [2.4 140.8 1.6] [2.4 143.6 0.8] [2.4 145.2 0.8]
    + [2.4 150.4 4.8] [2.4 154 0.8] [2.4 155.6 0.8] [2.4 158 2.4]
    + [2.4 164.4 5.6] [2.4 168.4 0.8] [2.4 171.6 0.8] [2.4 173.2 0.8] [2.4 175.6 0.8]
    +] {{} forall setlinewidth 29.6 moveto -1 mul 0 exch rlineto stroke} forall
    +
    +[ [2.4 15.2 6.4] [2.4 19.6 0.8] [2.4 21.2 0.8] [2.4 22.8 0.8]
    + [2.4 27.2 3.2] [2.4 30 0.8] [2.4 31.6 0.8] [2.4 34.4 3.2]
    + [2.4 40 1.6] [2.4 42 0.8] [2.4 43.6 0.8] [2.4 48 1.6]
    + [2.4 54 2.4] [2.4 57.2 2.4] [2.4 60 1.6] [2.4 63.2 1.6]
    + [2.4 67.6 2.4] [2.4 70.4 1.6] [2.4 72.4 0.8] [2.4 75.2 1.6]
    + [2.4 81.2 2.4] [2.4 84.8 1.6] [2.4 88.4 0.8] [2.4 90.4 1.6]
    + [2.4 94 0.8] [2.4 95.6 0.8] [2.4 100 1.6] [2.4 105.6 1.6]
    + [2.4 108.4 2.4] [2.4 111.2 1.6] [2.4 114 0.8] [2.4 117.6 1.6]
    + [2.4 121.2 0.8] [2.4 125.6 1.6] [2.4 129.6 1.6] [2.4 132.4 0.8]
    + [2.4 134.8 0.8] [2.4 139.2 1.6] [2.4 143.2 1.6] [2.4 146 0.8]
    + [2.4 149.2 2.4] [2.4 151.6 0.8] [2.4 153.2 0.8] [2.4 157.2 2.4]
    + [2.4 164.4 5.6] [2.4 168.4 0.8] [2.4 171.6 0.8] [2.4 173.2 0.8] [2.4 175.6 0.8]
    +] {{} forall setlinewidth 32 moveto -1 mul 0 exch rlineto stroke} forall
    +
    +
    +
    +%%Readable text
    +f
    +[[(PDF-417) 94]]
    +{ {} forall 1 index stringwidth pop 2 div sub 1 10 add moveto show} forall
    +
    +
    +%%End of PDF417 barcode
    +
    +showpage
    +
    +%%Trailer
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex6.png new file mode 100755 index 00000000..c062ba75 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_ex6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_trunc01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_trunc01.png new file mode 100755 index 00000000..5d5040de Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_trunc01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_trunc02.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_trunc02.png new file mode 100755 index 00000000..863844fc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pdf417_trunc02.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/php-htmlerr-missing-key.png b/Societes/ric/jpgraph/docs/chunkhtml/images/php-htmlerr-missing-key.png new file mode 100755 index 00000000..b4491fd6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/php-htmlerr-missing-key.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/phpinfo-gd.png b/Societes/ric/jpgraph/docs/chunkhtml/images/phpinfo-gd.png new file mode 100755 index 00000000..90ef2456 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/phpinfo-gd.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pie2daa.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pie2daa.png new file mode 100755 index 00000000..3a17a835 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pie2daa.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pie2dnoaa.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pie2dnoaa.png new file mode 100755 index 00000000..1a46db6e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pie2dnoaa.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pie3daa.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pie3daa.png new file mode 100755 index 00000000..fa4ea980 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pie3daa.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pie3dnoaa.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pie3dnoaa.png new file mode 100755 index 00000000..01e36577 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pie3dnoaa.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pie_theme_earth.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pie_theme_earth.png new file mode 100755 index 00000000..18f8ea04 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pie_theme_earth.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pie_theme_pastel.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pie_theme_pastel.png new file mode 100755 index 00000000..18f3919c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pie_theme_pastel.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pie_theme_sand.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pie_theme_sand.png new file mode 100755 index 00000000..24e4c91b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pie_theme_sand.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pie_theme_water.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pie_theme_water.png new file mode 100755 index 00000000..aaad2758 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pie_theme_water.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/piebkgex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/piebkgex1.png new file mode 100755 index 00000000..e0d10e9d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/piebkgex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/piecex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/piecex1.png new file mode 100755 index 00000000..833600e4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/piecex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/piecex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/piecex2.png new file mode 100755 index 00000000..8f271c46 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/piecex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pieex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pieex3.png new file mode 100755 index 00000000..67c64411 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pieex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pieex8.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pieex8.png new file mode 100755 index 00000000..668301b9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pieex8.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pieex9.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pieex9.png new file mode 100755 index 00000000..32617d3c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pieex9.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/piegraph-obj-overview.png b/Societes/ric/jpgraph/docs/chunkhtml/images/piegraph-obj-overview.png new file mode 100755 index 00000000..ce145d15 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/piegraph-obj-overview.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pielabelsex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pielabelsex1.png new file mode 100755 index 00000000..7a42b91e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pielabelsex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pielabelsex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pielabelsex2.png new file mode 100755 index 00000000..3520897f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pielabelsex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pielabelsex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pielabelsex4.png new file mode 100755 index 00000000..7d2fed8f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pielabelsex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pielabelsex5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pielabelsex5.png new file mode 100755 index 00000000..23bbaf8e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pielabelsex5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/piepercent1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/piepercent1.png new file mode 100755 index 00000000..b194c218 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/piepercent1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/piepercent2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/piepercent2.png new file mode 100755 index 00000000..2375e98e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/piepercent2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/plotbanddensity_ex0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/plotbanddensity_ex0.png new file mode 100755 index 00000000..bb65d354 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/plotbanddensity_ex0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/plotbanddensity_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/plotbanddensity_ex1.png new file mode 100755 index 00000000..a77c23ae Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/plotbanddensity_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/plotbanddensity_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/plotbanddensity_ex2.png new file mode 100755 index 00000000..6740cd0f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/plotbanddensity_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_antispam.jpg b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_antispam.jpg new file mode 100755 index 00000000..53ff6ca6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_antispam.jpg differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_area.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_area.png new file mode 100755 index 00000000..201b7e90 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_area.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_balloon.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_balloon.png new file mode 100755 index 00000000..a06cf1ba Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_balloon.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_bar.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_bar.png new file mode 100755 index 00000000..8714e573 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_bar.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_barcode.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_barcode.png new file mode 100755 index 00000000..8b87e1eb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_barcode.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_canvas.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_canvas.png new file mode 100755 index 00000000..88f02327 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_canvas.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_contour.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_contour.png new file mode 100755 index 00000000..607ce0e4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_contour.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_error.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_error.png new file mode 100755 index 00000000..4a990782 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_error.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_field.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_field.png new file mode 100755 index 00000000..869cf9b9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_field.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_gantt.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_gantt.png new file mode 100755 index 00000000..30a20a1c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_gantt.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_geomap.jpg b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_geomap.jpg new file mode 100755 index 00000000..164c4abe Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_geomap.jpg differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_impuls.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_impuls.png new file mode 100755 index 00000000..87a81a4a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_impuls.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_line.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_line.png new file mode 100755 index 00000000..1ee51469 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_line.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_odo.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_odo.png new file mode 100755 index 00000000..5ca98d43 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_odo.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_pie2d.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_pie2d.png new file mode 100755 index 00000000..5e390038 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_pie2d.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_pie3d.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_pie3d.png new file mode 100755 index 00000000..653e111a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_pie3d.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_polar.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_polar.png new file mode 100755 index 00000000..e5f233b9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_polar.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_radar.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_radar.png new file mode 100755 index 00000000..9a45b24a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_radar.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_ring.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_ring.png new file mode 100755 index 00000000..0c1f4c78 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_ring.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_scatter.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_scatter.png new file mode 100755 index 00000000..2e08aa05 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_scatter.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_spline.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_spline.png new file mode 100755 index 00000000..eef2bfec Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_spline.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_stock.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_stock.png new file mode 100755 index 00000000..bbc9ca88 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_stock.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_windrose.png b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_windrose.png new file mode 100755 index 00000000..1afd23d7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/ploticon_windrose.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_bevel.png b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_bevel.png new file mode 100755 index 00000000..2d8d8b1a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_bevel.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_diamond.png b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_diamond.png new file mode 100755 index 00000000..e5798874 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_diamond.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_lball.png b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_lball.png new file mode 100755 index 00000000..300b28c4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_lball.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_mball.png b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_mball.png new file mode 100755 index 00000000..230da358 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_mball.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_pushpin.png b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_pushpin.png new file mode 100755 index 00000000..8d5d6ed9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_pushpin.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_sball.png b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_sball.png new file mode 100755 index 00000000..876d15f1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_sball.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_square.png b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_square.png new file mode 100755 index 00000000..60aea600 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_square.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_star.png b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_star.png new file mode 100755 index 00000000..77ac4fb6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/plotmark_colors_img_star.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/polarclockex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/polarclockex1.png new file mode 100755 index 00000000..8ded8d21 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/polarclockex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/polarclockex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/polarclockex2.png new file mode 100755 index 00000000..432f894b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/polarclockex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/polarex0-180.png b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex0-180.png new file mode 100755 index 00000000..f24a7fe9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex0-180.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/polarex0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex0.png new file mode 100755 index 00000000..461957d8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/polarex3-lin.png b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex3-lin.png new file mode 100755 index 00000000..85b464c6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex3-lin.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/polarex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex3.png new file mode 100755 index 00000000..9cc6dfeb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/polarex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex4.png new file mode 100755 index 00000000..8448142a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/polarex5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex5.png new file mode 100755 index 00000000..3abfe9c1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/polarex7-1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex7-1.png new file mode 100755 index 00000000..a347f2a9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex7-1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/polarex7-2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex7-2.png new file mode 100755 index 00000000..f0997faf Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex7-2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/polarex9.png b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex9.png new file mode 100755 index 00000000..40dc6a81 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/polarex9.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/post_request_phase1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/post_request_phase1.png new file mode 100755 index 00000000..7dae1f82 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/post_request_phase1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/post_request_phase2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/post_request_phase2.png new file mode 100755 index 00000000..437eba34 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/post_request_phase2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/post_vs_header.png b/Societes/ric/jpgraph/docs/chunkhtml/images/post_vs_header.png new file mode 100755 index 00000000..797045e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/post_vs_header.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/prepaccdata_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/prepaccdata_example.png new file mode 100755 index 00000000..a3fa7af0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/prepaccdata_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pro-login.jpg b/Societes/ric/jpgraph/docs/chunkhtml/images/pro-login.jpg new file mode 100755 index 00000000..ecd04425 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pro-login.jpg differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pro-login.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pro-login.png new file mode 100755 index 00000000..a28fefe4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pro-login.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/pushpinex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/pushpinex1.png new file mode 100755 index 00000000..ac492dbe Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/pushpinex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr-ASCII.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-ASCII.png new file mode 100755 index 00000000..a9a669a7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-ASCII.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr-code-large.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-code-large.png new file mode 100755 index 00000000..4cf141e9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-code-large.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr-code-medium.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-code-medium.png new file mode 100755 index 00000000..8fcc8de3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-code-medium.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr-code-small.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-code-small.png new file mode 100755 index 00000000..ea6774e7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-code-small.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr-demoapp.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-demoapp.png new file mode 100755 index 00000000..57a01d2c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-demoapp.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr-encodation-principle.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-encodation-principle.png new file mode 100755 index 00000000..c3905f21 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-encodation-principle.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr-postscript.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-postscript.png new file mode 100755 index 00000000..084945ed Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-postscript.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr-structure-details.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-structure-details.png new file mode 100755 index 00000000..9363701d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr-structure-details.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr_errmsg.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qr_errmsg.png new file mode 100755 index 00000000..be079b59 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr_errmsg.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr_template.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qr_template.png new file mode 100755 index 00000000..03244d27 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr_template.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr_usage1.jpg b/Societes/ric/jpgraph/docs/chunkhtml/images/qr_usage1.jpg new file mode 100755 index 00000000..44d552b9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr_usage1.jpg differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr_usage2.jpg b/Societes/ric/jpgraph/docs/chunkhtml/images/qr_usage2.jpg new file mode 100755 index 00000000..cecd4dab Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr_usage2.jpg differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qr_usage3.jpg b/Societes/ric/jpgraph/docs/chunkhtml/images/qr_usage3.jpg new file mode 100755 index 00000000..370f62ff Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qr_usage3.jpg differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample0.png new file mode 100755 index 00000000..bdcb6c5d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample00.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample00.png new file mode 100755 index 00000000..bdcb6c5d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample00.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample01.png new file mode 100755 index 00000000..c175f654 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample03.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample03.png new file mode 100755 index 00000000..8bc7de6f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample03.png @@ -0,0 +1 @@ +QR Barcode, (Version: 3-M), image stored in file qrexample03.png \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample04.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample04.png new file mode 100755 index 00000000..450feb90 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample04.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample05.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample05.png new file mode 100755 index 00000000..4a8aeb84 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample05.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample06.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample06.png new file mode 100755 index 00000000..d8636782 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample06.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample07.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample07.png new file mode 100755 index 00000000..e9be6257 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample07.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample08.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample08.png new file mode 100755 index 00000000..d7853739 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample08.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample09.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample09.png new file mode 100755 index 00000000..3bdb669a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample09.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample10.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample10.png new file mode 100755 index 00000000..6d91624b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample10.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample11.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample11.png new file mode 100755 index 00000000..69b6e2c1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample11.png @@ -0,0 +1,49 @@ +
    %!PS-Adobe-3.0
    +%%Title: QR Barcode 2-H, mask=6
    +%%Creator: JpGraph Barcode http://jpgraph.net/
    +%%CreationDate: Wed 6 Oct 23:36:10 2010
    +%%DocumentPaperSizes: A4
    +%%EndComments
    +%%BeginProlog
    +%%EndProlog
    +%%Page: 1 1
    +
    +%Module width: 3 pt
    +
    +%Data: ABCDEFGH01234567
    +%Each line represents one row and the x-position for black modules: [xpos]
    +
    +3.05 setlinewidth
    +[[12][15][18][21][24][27][30][45][51][66][69][72][75][78][81][84]] {{} forall 87 moveto 0 -3.05 rlineto stroke} forall
    +[[12][30][45][66][84]] {{} forall 84 moveto 0 -3.05 rlineto stroke} forall
    +[[12][18][21][24][30][36][39][42][45][51][66][72][75][78][84]] {{} forall 81 moveto 0 -3.05 rlineto stroke} forall
    +[[12][18][21][24][30][36][39][45][48][51][54][66][72][75][78][84]] {{} forall 78 moveto 0 -3.05 rlineto stroke} forall
    +[[12][18][21][24][30][45][66][72][75][78][84]] {{} forall 75 moveto 0 -3.05 rlineto stroke} forall
    +[[12][30][39][45][48][51][54][60][66][84]] {{} forall 72 moveto 0 -3.05 rlineto stroke} forall
    +[[12][15][18][21][24][27][30][36][42][48][54][60][66][69][72][75][78][81][84]] {{} forall 69 moveto 0 -3.05 rlineto stroke} forall
    +[[39][42][51][60]] {{} forall 66 moveto 0 -3.05 rlineto stroke} forall
    +[[21][24][30][33][39][48][51][54][60][75][78]] {{} forall 63 moveto 0 -3.05 rlineto stroke} forall
    +[[15][18][27][39][42][45][48][51][54][57][69][78][81][84]] {{} forall 60 moveto 0 -3.05 rlineto stroke} forall
    +[[12][21][27][30][33][36][42][51][54][57][60][66][75][78][84]] {{} forall 57 moveto 0 -3.05 rlineto stroke} forall
    +[[18][21][27][39][45][51][57][60][63][66][81][84]] {{} forall 54 moveto 0 -3.05 rlineto stroke} forall
    +[[12][15][18][24][27][30][33][39][51][57][63][69][75][84]] {{} forall 51 moveto 0 -3.05 rlineto stroke} forall
    +[[12][15][21][48][66][69][81][84]] {{} forall 48 moveto 0 -3.05 rlineto stroke} forall
    +[[12][15][18][21][24][30][36][51][54][57][72][78][81]] {{} forall 45 moveto 0 -3.05 rlineto stroke} forall
    +[[12][18][24][27][39][45][51][60][75][78][84]] {{} forall 42 moveto 0 -3.05 rlineto stroke} forall
    +[[12][24][27][30][33][42][48][57][60][63][66][69][72]] {{} forall 39 moveto 0 -3.05 rlineto stroke} forall
    +[[36][42][45][60][72][75][78][84]] {{} forall 36 moveto 0 -3.05 rlineto stroke} forall
    +[[12][15][18][21][24][27][30][36][39][48][51][54][57][60][66][72][81][84]] {{} forall 33 moveto 0 -3.05 rlineto stroke} forall
    +[[12][30][39][42][45][51][54][57][60][72][84]] {{} forall 30 moveto 0 -3.05 rlineto stroke} forall
    +[[12][18][21][24][30][36][42][45][51][54][60][63][66][69][72][75][78]] {{} forall 27 moveto 0 -3.05 rlineto stroke} forall
    +[[12][18][21][24][30][36][39][42][54][72][84]] {{} forall 24 moveto 0 -3.05 rlineto stroke} forall
    +[[12][18][21][24][30][39][45][51][60][63][66][72][75][81][84]] {{} forall 21 moveto 0 -3.05 rlineto stroke} forall
    +[[12][30][39][42][45][48][51][60][63][66][69][78][81]] {{} forall 18 moveto 0 -3.05 rlineto stroke} forall
    +[[12][15][18][21][24][27][30][42][48][54][57][60][63][66][69][72][75][78][81][84]] {{} forall 15 moveto 0 -3.05 rlineto stroke} forall
    +
    +%End of QR Barcode 
    +
    +showpage 
    +
    +%%Trailer
    +
    +
    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample12.png b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample12.png new file mode 100755 index 00000000..dda7ad2e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/images/qrexample12.png @@ -0,0 +1,28 @@ +
    XXXXXXX----X-X----XXXXXXX
    +X-----X----X------X-----X
    +X-XXX-X-XXXX-X----X-XXX-X
    +X-XXX-X-XX-XXXX---X-XXX-X
    +X-XXX-X----X------X-XXX-X
    +X-----X--X-XXXX-X-X-----X
    +XXXXXXX-X-X-X-X-X-XXXXXXX
    +---------XX--X--X--------
    +---XX-XX-X--XXX-X----XX--
    +-XX--X---XXXXXXX---X--XXX
    +X--X-XXXX-X--XXXX-X--XX-X
    +--XX-X---X-X-X-XXXX----XX
    +XXX-XXXX-X---X-X-X-X-X--X
    +XX-X--------X-----XX---XX
    +XXXXX-X-X----XXX----X-XX-
    +X-X-XX---X-X-X--X----XX-X
    +X---XXXX--X-X--XXXXXX----
    +--------X-XX----X---XXX-X
    +XXXXXXX-XX--XXXXX-X-X--XX
    +X-----X--XXX-XXXX---X---X
    +X-XXX-X-X-XX-XX-XXXXXXX--
    +X-XXX-X-XXX---X-----X---X
    +X-XXX-X--X-X-X--XXX-XX-XX
    +X-----X--XXXXX--XXXX--XX-
    +XXXXXXX---X-X-XXXXXXXXXXX
    +
    +
    +
    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/radarex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex1.png new file mode 100755 index 00000000..940d3dba Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/radarex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex2.png new file mode 100755 index 00000000..0f587599 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/radarex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex4.png new file mode 100755 index 00000000..41adc7c9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/radarex6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex6.png new file mode 100755 index 00000000..7756036f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/radarex7.png b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex7.png new file mode 100755 index 00000000..aa0bbc92 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex7.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/radarex8.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex8.1.png new file mode 100755 index 00000000..34c73371 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex8.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/radarex8.png b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex8.png new file mode 100755 index 00000000..8abe1b8f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/radarex8.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/radarlogex1-aa.png b/Societes/ric/jpgraph/docs/chunkhtml/images/radarlogex1-aa.png new file mode 100755 index 00000000..8f3f00e7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/radarlogex1-aa.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/radarlogex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/radarlogex1.png new file mode 100755 index 00000000..20093574 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/radarlogex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/radarmarkex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/radarmarkex1.png new file mode 100755 index 00000000..51458a02 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/radarmarkex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/rect_step0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/rect_step0.png new file mode 100755 index 00000000..d7da76a7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/rect_step0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/rect_step1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/rect_step1.png new file mode 100755 index 00000000..9a0541a4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/rect_step1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/rect_step2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/rect_step2.png new file mode 100755 index 00000000..76c9dd47 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/rect_step2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/rose_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/rose_example.png new file mode 100755 index 00000000..87368ab3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/rose_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/rotex0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/rotex0.png new file mode 100755 index 00000000..f5978a7b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/rotex0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/rotex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/rotex1.png new file mode 100755 index 00000000..d924d80e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/rotex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/rotex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/rotex2.png new file mode 100755 index 00000000..20862668 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/rotex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/rotex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/rotex3.png new file mode 100755 index 00000000..d924d80e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/rotex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/rotex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/rotex4.png new file mode 100755 index 00000000..20862668 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/rotex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/rotex5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/rotex5.png new file mode 100755 index 00000000..071da130 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/rotex5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/scale-headers.png b/Societes/ric/jpgraph/docs/chunkhtml/images/scale-headers.png new file mode 100755 index 00000000..8bf120f5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/scale-headers.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/scatterex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/scatterex1.png new file mode 100755 index 00000000..47b969a1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/scatterex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/scatterex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/scatterex2.png new file mode 100755 index 00000000..0354309e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/scatterex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/scatterlinkex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/scatterlinkex3.png new file mode 100755 index 00000000..776a3704 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/scatterlinkex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/scatterlinkex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/scatterlinkex4.png new file mode 100755 index 00000000..66559a9f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/scatterlinkex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/shear-original.png b/Societes/ric/jpgraph/docs/chunkhtml/images/shear-original.png new file mode 100755 index 00000000..7194de35 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/shear-original.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/shear0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/shear0.png new file mode 100755 index 00000000..a6403573 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/shear0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/shear1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/shear1.png new file mode 100755 index 00000000..d4d946c0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/shear1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/shear2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/shear2.png new file mode 100755 index 00000000..968e085c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/shear2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/shear3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/shear3.png new file mode 100755 index 00000000..2b73aea7 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/shear3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/shearing-params.png b/Societes/ric/jpgraph/docs/chunkhtml/images/shearing-params.png new file mode 100755 index 00000000..b6aa03d3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/shearing-params.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex1.png new file mode 100755 index 00000000..ce272089 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex10.png b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex10.png new file mode 100755 index 00000000..7e173b3e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex10.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex2.png new file mode 100755 index 00000000..79022b04 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex3.png new file mode 100755 index 00000000..dc1230a6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex4.png new file mode 100755 index 00000000..b78270e3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex5.png new file mode 100755 index 00000000..5707741b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex6.png new file mode 100755 index 00000000..91f23775 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex7.png b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex7.png new file mode 100755 index 00000000..f8b97fd0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/smallstaticbandsex7.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/softy_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/softy_example.png new file mode 100755 index 00000000..05b6e748 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/softy_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/spamstat.png b/Societes/ric/jpgraph/docs/chunkhtml/images/spamstat.png new file mode 100755 index 00000000..15a15814 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/spamstat.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/splineex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/splineex1.png new file mode 100755 index 00000000..8601291e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/splineex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/staticbandbarex7.png b/Societes/ric/jpgraph/docs/chunkhtml/images/staticbandbarex7.png new file mode 100755 index 00000000..ad0f35a3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/staticbandbarex7.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/stock-detail-explanation.png b/Societes/ric/jpgraph/docs/chunkhtml/images/stock-detail-explanation.png new file mode 100755 index 00000000..99c0fe1f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/stock-detail-explanation.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/stockex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/stockex1.png new file mode 100755 index 00000000..5a4df2d5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/stockex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex1.png new file mode 100755 index 00000000..abfb841d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex2.png new file mode 100755 index 00000000..a829867d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex3.png new file mode 100755 index 00000000..d7db6b61 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex4.png new file mode 100755 index 00000000..d5919f70 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex5.png new file mode 100755 index 00000000..4e8922c9 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex6.png new file mode 100755 index 00000000..0518515e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex7.png b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex7.png new file mode 100755 index 00000000..8c9dcc22 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/sunspotsex7.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/sym-char-list-capital.png b/Societes/ric/jpgraph/docs/chunkhtml/images/sym-char-list-capital.png new file mode 100755 index 00000000..d6cba89b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/sym-char-list-capital.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/sym-char-list.png b/Societes/ric/jpgraph/docs/chunkhtml/images/sym-char-list.png new file mode 100755 index 00000000..20895d0c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/sym-char-list.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_clipboard.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_clipboard.png new file mode 100755 index 00000000..306df535 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_clipboard.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_flagex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_flagex1.png new file mode 100755 index 00000000..42e333e3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_flagex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto1.png new file mode 100755 index 00000000..b015cb06 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto2.png new file mode 100755 index 00000000..700a4042 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto3.png new file mode 100755 index 00000000..ed0aa585 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto4.png new file mode 100755 index 00000000..193896e2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto5.png new file mode 100755 index 00000000..be84eafa Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto6.png new file mode 100755 index 00000000..77ed12e2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto7.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto7.1.png new file mode 100755 index 00000000..f1fd40ae Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto7.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto7.2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto7.2.png new file mode 100755 index 00000000..62178a3c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto7.2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto8.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto8.png new file mode 100755 index 00000000..0b3aa263 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto8.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto9.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto9.png new file mode 100755 index 00000000..c39f5449 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_howto9.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_iconex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_iconex1.png new file mode 100755 index 00000000..e69de29b diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_mex0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_mex0.png new file mode 100755 index 00000000..0907df44 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_mex0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_mex00.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_mex00.png new file mode 100755 index 00000000..af709dc0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_mex00.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_mex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_mex1.png new file mode 100755 index 00000000..b0c7dff4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_mex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_mex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_mex3.png new file mode 100755 index 00000000..51024260 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_mex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/table_vtext.png b/Societes/ric/jpgraph/docs/chunkhtml/images/table_vtext.png new file mode 100755 index 00000000..faf1906d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/table_vtext.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/tablebarex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/tablebarex1.png new file mode 100755 index 00000000..d4adcb5c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/tablebarex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/textalignex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/textalignex1.png new file mode 100755 index 00000000..ae839e88 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/textalignex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/textpalignex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/textpalignex1.png new file mode 100755 index 00000000..d9f89349 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/textpalignex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/theme_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/theme_example.png new file mode 100755 index 00000000..7337a643 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/theme_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/theme_samplele.png b/Societes/ric/jpgraph/docs/chunkhtml/images/theme_samplele.png new file mode 100755 index 00000000..e69de29b diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/timestampex01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/timestampex01.png new file mode 100755 index 00000000..d40aa444 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/timestampex01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground00.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground00.png new file mode 100755 index 00000000..c216a0dd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground00.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground01.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground01.png new file mode 100755 index 00000000..fc475928 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground01.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground02.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground02.png new file mode 100755 index 00000000..5d38a03c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground02.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground10.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground10.png new file mode 100755 index 00000000..098f3975 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground10.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground100.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground100.png new file mode 100755 index 00000000..8b17a72a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground100.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground101.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground101.png new file mode 100755 index 00000000..f76350df Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground101.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground102.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground102.png new file mode 100755 index 00000000..5f78c774 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground102.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground11.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground11.png new file mode 100755 index 00000000..ad6e929a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground11.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground110.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground110.png new file mode 100755 index 00000000..8611f1bd Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground110.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground111.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground111.png new file mode 100755 index 00000000..9936ec7c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground111.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground112.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground112.png new file mode 100755 index 00000000..d34b6bc4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground112.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground12.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground12.png new file mode 100755 index 00000000..175bf94e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground12.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground20.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground20.png new file mode 100755 index 00000000..213e863b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground20.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground21.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground21.png new file mode 100755 index 00000000..52e9b487 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground21.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground22.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground22.png new file mode 100755 index 00000000..1d2a15ec Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground22.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground30.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground30.png new file mode 100755 index 00000000..c9ff25ab Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground30.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground31.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground31.png new file mode 100755 index 00000000..46ffa9fa Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground31.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground32.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground32.png new file mode 100755 index 00000000..1b258147 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground32.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground40.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground40.png new file mode 100755 index 00000000..95ddf31e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground40.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground41.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground41.png new file mode 100755 index 00000000..bed882b5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground41.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground42.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground42.png new file mode 100755 index 00000000..08e5d4b4 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground42.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground50.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground50.png new file mode 100755 index 00000000..2475e198 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground50.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground51.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground51.png new file mode 100755 index 00000000..34fde580 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground51.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground52.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground52.png new file mode 100755 index 00000000..bb4981a5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground52.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground60.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground60.png new file mode 100755 index 00000000..3612e5e1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground60.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground61.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground61.png new file mode 100755 index 00000000..c914fb11 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground61.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground62.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground62.png new file mode 100755 index 00000000..71d71f8e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground62.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground70.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground70.png new file mode 100755 index 00000000..abc36f4d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground70.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground71.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground71.png new file mode 100755 index 00000000..c7dd07a5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground71.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground72.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground72.png new file mode 100755 index 00000000..ee68ee6f Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground72.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground80.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground80.png new file mode 100755 index 00000000..079cbb8a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground80.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground81.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground81.png new file mode 100755 index 00000000..9cb607c8 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground81.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground82.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground82.png new file mode 100755 index 00000000..c2c1cae2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground82.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground90.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground90.png new file mode 100755 index 00000000..f69e61f2 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground90.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground91.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground91.png new file mode 100755 index 00000000..d5378c5c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground91.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground92.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground92.png new file mode 100755 index 00000000..f8d4663c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titlebackground92.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/titleex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/titleex1.png new file mode 100755 index 00000000..3d103d55 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/titleex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/topxaxisex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/topxaxisex1.png new file mode 100755 index 00000000..5d09f8f5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/topxaxisex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/tri_step0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/tri_step0.png new file mode 100755 index 00000000..979b5cfe Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/tri_step0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/tri_step1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/tri_step1.png new file mode 100755 index 00000000..ba6f40d5 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/tri_step1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/tri_step2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/tri_step2.png new file mode 100755 index 00000000..632eaf58 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/tri_step2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/universal_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/universal_example.png new file mode 100755 index 00000000..daef4050 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/universal_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/uri-link.png b/Societes/ric/jpgraph/docs/chunkhtml/images/uri-link.png new file mode 100755 index 00000000..1aac1c7a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/uri-link.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/usps_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/usps_ex1.png new file mode 100755 index 00000000..99a9e097 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/usps_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/usps_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/usps_ex2.png new file mode 100755 index 00000000..a3419b9d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/usps_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/usps_exhibit44.png b/Societes/ric/jpgraph/docs/chunkhtml/images/usps_exhibit44.png new file mode 100755 index 00000000..550ee2ec Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/usps_exhibit44.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/vivid_example.png b/Societes/ric/jpgraph/docs/chunkhtml/images/vivid_example.png new file mode 100755 index 00000000..636c2f9b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/vivid_example.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/wind-legend-methods.png b/Societes/ric/jpgraph/docs/chunkhtml/images/wind-legend-methods.png new file mode 100755 index 00000000..8afe17ed Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/wind-legend-methods.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/wind-legend-orig.png b/Societes/ric/jpgraph/docs/chunkhtml/images/wind-legend-orig.png new file mode 100755 index 00000000..2b4dc74e Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/wind-legend-orig.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/wind-legend-styles.png b/Societes/ric/jpgraph/docs/chunkhtml/images/wind-legend-styles.png new file mode 100755 index 00000000..128af474 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/wind-legend-styles.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_2plots_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_2plots_ex1.png new file mode 100755 index 00000000..64fc8289 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_2plots_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_bgimg_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_bgimg_ex1.png new file mode 100755 index 00000000..94e3de41 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_bgimg_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex0.png new file mode 100755 index 00000000..a694e6c3 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex1.png new file mode 100755 index 00000000..80326b6a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex2.png new file mode 100755 index 00000000..8fc9bf43 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex3.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex3.png new file mode 100755 index 00000000..7d93239c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex3.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex4.png new file mode 100755 index 00000000..785dcb6d Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex5.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex5.png new file mode 100755 index 00000000..90b41dd0 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex5.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex6.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex6.1.png new file mode 100755 index 00000000..b2e34b13 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex6.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex6.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex6.png new file mode 100755 index 00000000..30eb7f31 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex6.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex7.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex7.1.png new file mode 100755 index 00000000..c111d600 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex7.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex7.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex7.png new file mode 100755 index 00000000..f1b9dcb1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex7.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex8.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex8.1.png new file mode 100755 index 00000000..9de843b6 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex8.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex8.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex8.png new file mode 100755 index 00000000..0a8fc719 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex8.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex9.1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex9.1.png new file mode 100755 index 00000000..fbb443b1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex9.1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex9.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex9.png new file mode 100755 index 00000000..4114250a Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_ex9.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_icon_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_icon_ex1.png new file mode 100755 index 00000000..13f13302 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_icon_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_intro.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_intro.png new file mode 100755 index 00000000..94d1b3dc Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_intro.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_label-align1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_label-align1.png new file mode 100755 index 00000000..1b6c0761 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_label-align1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_label-align2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_label-align2.png new file mode 100755 index 00000000..33723b9b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_label-align2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_layout_ex0.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_layout_ex0.png new file mode 100755 index 00000000..a7e5a473 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_layout_ex0.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_layout_ex1.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_layout_ex1.png new file mode 100755 index 00000000..4f967f08 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_layout_ex1.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_type16.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_type16.png new file mode 100755 index 00000000..2f91df51 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_type16.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_type4.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_type4.png new file mode 100755 index 00000000..c7c73074 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_type4.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_type8.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_type8.png new file mode 100755 index 00000000..e85cb5d1 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_type8.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_typefree.png b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_typefree.png new file mode 100755 index 00000000..3b365525 Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/windrose_typefree.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/y2synch.png b/Societes/ric/jpgraph/docs/chunkhtml/images/y2synch.png new file mode 100755 index 00000000..315a0acb Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/y2synch.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/images/y2synch2.png b/Societes/ric/jpgraph/docs/chunkhtml/images/y2synch2.png new file mode 100755 index 00000000..5fa97e6c Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/images/y2synch2.png differ diff --git a/Societes/ric/jpgraph/docs/chunkhtml/index.html b/Societes/ric/jpgraph/docs/chunkhtml/index.html new file mode 100755 index 00000000..e4c2a339 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/index.html @@ -0,0 +1,53 @@ +JpGraph Manual

    JpGraph Manual

    Version : 4.1

    + Asial Corporation +

    2016-06-21


    Table of Contents

    Preface and history of the JpGraph library
    I. Installing and verifying the configuring
    1. About the library
    1.1. What is JpGraph?
    1.2. Software license
    1.3. Versions of the library covered
    1.4. Purpose and usage
    1.5. Prerequisites for running the library
    1.6. Who can use the library
    1.7. What you can do with the library
    1.8. What you shouldn't or cannot do with this library
    1.9. Feature-matrix for the library
    1.10. Where to find additional information
    2. The Short Version: Installing the library (for PHP/Apache experts)
    2.1. Installing
    2.2. Running the examples
    2.3. Basic trouble shooting
    3. The Long Version: Installing the Library
    3.1. Downloading the library
    3.2. Necessary system requirements for the library
    3.3. Installing the library
    3.4. Installing and configuring Font support
    3.5. Adapting and customizing the installation
    3.6. Verifying the library installation
    3.7. Troubleshooting the installation
    II. Basic graph creation
    4. Your first graph script
    4.1. Some words of caution
    4.2. Graphing the number of sun spots during the 19th Century
    5. Fundamentals of dynamic graph generation
    5.1. Making sense of HTTP streams and MIME types
    5.2. What is an image?
    5.3. Static vs dynamic images
    5.4. Dynamic images on the command line
    5.5. How to generate images with JpGraph library
    5.6. Efficient graph generation using the built-in cache subsystem
    6. Error handling
    6.1. The problem with error messages and images
    6.2. Available error messages
    6.3. Using PHP Exceptions
    6.4. Adding a new locale
    7. Color handling
    7.1. Specifying colors by name
    7.2. Specifying colors by RGB triples
    7.3. Using HTML color specifications
    7.4. Fine tuning the color
    7.5. Additional color handling
    8. Text and font handling
    8.1. Different types of fonts
    8.2. Font families and font styles
    8.3. Understanding text alignment and anchor point
    8.4. Rotating text
    8.5. Formatting text paragraphs
    8.6. Adding custom TTF fonts
    8.7. Inserting Unicode entities
    8.8. Character encoding
    9. Using the JpGraph cache system
    9.1. Enabling the library cache system
    9.2. Permission settings for the cache files
    9.3. Using the cache in your script
    9.4. Using the cache with Client Side Image Maps (CSIM)
    10. Using CSIM (Client side image maps)
    10.1. The principles
    10.2. The basic structure of an image map script
    10.3. Specifying targets for image map plots
    10.4. Using StrokeCSIM()
    10.5. Getting hold of the image map
    10.6. Mixing several CSIM images in an HTML page with text
    + + + + + + + + + + + + + + + +III. Common features
    12. Commonalities for all graphs
    12.1. Common objects for cartesian graphs (x-, y-graphs)
    12.2. Common object for Pie Graphs
    13. Getting hold of the data to be displayed
    13.1. Static data
    13.2. Reading data from a file
    13.3. Sending data to a graph script with URI arguments (GET and POST)
    13.4. Reading data from a database
    13.5. Reading binary data from a file
    13.6. Different types of NULL data handling
    13.7. Troubleshooting input data
    14. Common features for all Cartesian (x,y) graph types
    14.1. The definition of linear graphs
    14.2. Specifying and formatting the overall displayed graph
    14.3. Adjusting the look and feel of the plot area
    14.4. Adjusting the position and layout of the legend
    14.5. Other formatting options of the axis
    14.6. Using multiple y-axis
    14.7. Understanding and using different scales on the axis
    14.8. Adjusting the appearance of the scale labels
    14.9. Using a logarithmic scale
    14.10. Using a date/time scale
    14.11. Adding shearing image transformation to the graph
    14.12. Rotating graphs
    14.13. Using anti-aliasing in the graph generation
    14.14. Adding icons (and small images) to the graph
    14.15. Adding images and country flags to the background of the graph
    14.16. Using background gradients
    14.17. Adding arbitrary texts to the graph
    IV. Creating linear and non-linear graphs
    15. Different types of linear (cartesian) graph types
    15.1. Basic Line and area graphs
    15.2. Bar graphs
    15.3. Error plot graphs
    15.4. Stock graphs
    15.5. Scatter graphs
    15.6. Contour graphs
    15.7. Combining several different plot types in the same graph
    15.8. Creating several graphs in the same image
    16. Non-Linear graph types
    16.1. Pie graphs
    16.2. Radar graphs
    16.3. Polar graphs
    16.4. Gantt charts
    17. Additional graph types
    17.1. LED bill boards
    17.2. Captcha generation
    17.3. Canvas graphs
    18. Miscellaneous formatting and tools
    18.1. Linear regression analysis
    V. Additional graph types available in the professional version
    19. Graphical tables
    19.1. Introduction
    19.2. Constructing tables
    19.3. CSIM Table support
    19.4. Table API Overview
    19.5. Examples
    19.6. Case study: Adding a table to a bar graph
    20. Odometer
    20.1. Introduction
    20.2. Creating and formatting basic odometer graphs
    20.3. Working with the odometer scale
    20.4. Adding and positioning multiple odometers to a graph
    20.5. Adding icon and text objects to the graph
    21. Windrose
    21.1. Introduction
    21.2. Creating and formatting basic Windrose graphs
    21.3. Formatting the plot
    21.4. Some more advanced formatting
    21.5. Adding icon and text objects to the graph
    21.6. Using layout classes to position Windrose plots
    21.7. Example section
    22. Matrix graphs
    22.1. Introduction
    22.2. Creating and formatting a basic matrix graph
    22.3. Mesh interpolating of input data
    22.4. Formatting the matrix plot
    22.5. Adding icon and text objects to the graph
    22.6. Adding marker lines to the matrix plot
    22.7. Using layout classes to position matrix plots
    22.8. Built in color maps
    22.9. Using CSIM with matrix plots
    22.10. Matrix graph examples
    23. Filled contour graphs
    23.1. Filled Contour graphs
    VI. Barcodes
    24. Linear Barcodes (One Dimensional Barcodes)
    24.1. Introduction
    24.2. How does linear barcodes work?
    24.3. Barcode symbologies
    24.4. Features
    24.5. Creating barcodes - quick start
    24.6. Error handling
    24.7. Generating barcodes on the command line
    24.8. Format options for barcodes
    24.9. Short description of supported symbologies
    25. PDF417 (2D-Barcode)
    25.1. Principle of PDF417 Barcodes
    25.2. Creating barcodes
    25.3. Creating barcodes
    25.4. Specifying the PDF417 parameters
    25.5. Adjusting the output
    25.6. A template to create barcodes
    25.7. Method reference
    25.8. Example scripts
    26. Datamatrix (2D-Barcode)
    26.1. Principle of Datamatrix Barcodes
    26.2. Creating barcodes
    26.3. Example script
    27. QR (2D-Barcode)
    27.1. Principle of QR Barcodes
    27.2. Creating barcodes
    27.3. Example scripts
    VII. Theme Class
    28. Applying the prepared theme
    29. Attention
    29.1. The order of SetTheme() and changing settings
    29.2. Changing the display settings of line/bar graphs
    30. Examples of applying a theme
    31. Creating original themes
    VIII. Case studies
    32. Synchronized Y-axis
    32.1. Creating two scales
    33. USPS Confirmation Barcodes
    33.1. Creating the confirmation codes
    34. Showing SPAM statistics
    34.1. Introduction and purpose
    34.2. Step 1: Parsing the log file
    34.3. Step 2: Creating the graph
    34.4. Step 3: Uploading the image file to a server
    34.5. Step 0: The full driver script
    35. Creating Critical chain buffer penetration charts
    35.1. Introduction and purpose
    35.2. Creating a utility class to construct CC BP charts
    35.3. The Init() method
    35.4. Suggested improvements
    35.5. The implementation of class CCBPGraph
    35.6. References
    IX. Appendices
    A. How this manual was produced
    B. JpGraph Professional License
    B.1. Single License
    B.2. Bulk (Re-seller license)
    C. FAQ
    D. Named color list
    E. Available plot marks
    E.1. Built in basic plot marks
    E.2. Built in image plot marks
    F. List of all country flags
    G. List of files included in the library
    H. Error messages
    H.1. Core error messages
    H.2. QR 2D Barcode error messages
    H.3. Datamatrix 2D barcode error messages
    I. Compiling PHP
    I.1. Compiling PHP4
    I.2. Compiling PHP5
    J. Setting up PHP5 in parallel with PHP4 in SuSE 10.1
    J.1. Configuration files and directories for Apache2 in SuSE 10.1
    J.2. Making sure you have the correct Apache2 setup
    J.3. Approaches to running multiple PHP versions
    J.4. Outline of the remainder of the chapter
    J.5. Part I - Installing PHP4
    J.6. Part II - Creating a virtual host
    J.7. Part III - Installing PHP5
    J.8. Part IV - Verifying the setup
    K. Why it is not possible to add a SVG backend to JpGraph
    K.1. Background
    K.2. Summary of findings
    K.3. Detailing the issue
    L. The JpGraph configuration file

    List of Figures

    1. Link to highlighted graph source
    1.1. JpGraph and PHP
    1.2. This is the very first example (example0.php)
    2.1. phpinfo() GD sections
    3.1. Pro-login dialogue on JpGraph Website
    3.2. phphinfo() GD-Information
    3.3. Verifying the GD installations (checkgd.php)
    3.4. Verifying GD2 (checkgd2.php)
    3.5. Verifying TTF with a known font (checkttf.php)
    4.1. The first ten rows of data of sunspot activities from year + 1700
    4.2. Reading numeric tabulated sunspot data from a file
    4.3. Line plot showing the number of sun spots since 1700 (sunspotsex1.php)
    4.4. Displaying sun spots with a semi filled line graph (sunspotsex2.php)
    4.5. Adding tick labels to the graph (sunspotsex3.php)
    4.6. Manually specifying the X scale to use just the supplied X values (sunspotsex4.php)
    4.7. Using a callback to get correct values on the x axis (sunspotsex5.php)
    4.8. Changing the plot type to a bar plot instead (sunspotsex6.php)
    4.9. Sunspots zoomed to only show the last 20 years (sunspotsex7.php)
    6.1. Typical image error message
    6.2. The "Header already sent error message"
    6.3. The "Header already sent" error message using German locale
    6.4. Using the production "pseudo" locale
    7.1. Using alpha channel modifiers
    7.2. Making use of transparency to combine two plots (barlinealphaex1.php)
    7.3. Adjusting brightness of named color specifier
    7.4. Adjusting brightness of a HTML color specifier
    8.1. List of all latin TTF fonts. (listfontsex1.php)
    8.2. Illustration of anchor point alignment (textalignex1.php)
    8.3. Example of how to use rotated labels (bargradex1.php)
    8.4. Example of using rotated data point values (example20.3.php)
    8.5. The different types of paragraph alignments (textpalignex1.php)
    8.6. Rendered symbol characters corresponding to + +
    8.7. Rendered capital symbol characters corresponding to Table 8.3. Supported character entities in class SymChar.
    8.8. Specifying manual ticks as fraction of Pi. (manualtickex2.php)
    9.1. Library cache principle
    10.1. Example of generated HTML code for StrokeCSIM()
    10.2. Browser window after calling HTML page in Example 10.4. Example of HTML page that includes two Graph CSIM scripts + ("Examples/csim_in_html_ex2.html") (Note: The image has been + scaled down to better fit this manual.)
    12.1. Commonly used objects in a graph (common-obj-graph.php)
    12.2. Commonly used objects in Piegraphs ( + common-obj-piegraph.php)
    13.1. Post vs. header() data direction
    13.2. The request phase of a POST header
    13.3. The reply phase of a POST request
    13.4. Original graph with all values
    13.5. Value at x=2 as ''
    13.6. Value at x=2 as '-'
    13.7. Error when only null values are specified
    13.8. PHP (HTML) error when missing data keys
    14.1. Supported principle linear graph types in the library
    14.2. Using alternating fill colors in the grid (filledgridex1.php)
    14.3. Using different grid styles for major and minor grids (gridstylesex1.php)
    14.4. Predefined scientific axis positions
    14.5. Example of AXSTYLE_BOXIN axis style (funcex2.php)
    14.6. The various titles in a graph (titleex1.php)
    14.7. Tabtitle and gradient background (gradbkgex1.php)
    14.8. Tabtitle and image marker in a line plot (imgmarkerex1.php)
    14.9. Different line formatting
    14.10. Using a footer in a graph
    14.11. Adding a left,right and center footer (footerex1.php)
    14.12. Adding a timer to the graph (in the footer) (example11.php)
    14.13. Original plot without clipping (clipping_ex1.php)
    14.14. Plot with clipping enabled (clipping_ex2.php)
    14.15. Some example of ways to position the legend box in the graph
    14.16. Some example of different legend layouts
    14.17. Basic example of multiple y-axis (mulyaxisex1.php)
    14.18. Illustration of mulyaxiscsimex1.php
    14.19. Inverted y-scale to show a dive profile (inyaxisex2.php)
    14.20. Setting tick density to TICKD_DENSE (manscaleex3.php)
    14.21. Fully automatic not so good scaling (manscaleex2.php)
    14.22. Manually specified tick distance which gives a much better appearance (manscaleex1.php)
    14.23. Manually specifying the tick position for each month (manualtickex1.php)
    14.24. Adjusting the side which have the tick marks and position the x-axis at the top (topxaxisex1.php)
    14.25. LABELBKG_NONE (axislabelbkgex01.php)
    14.26. LABELBKG_XAXIS (axislabelbkgex02.php)
    14.27. LABELBKG_YAXIS (axislabelbkgex03.php)
    14.28. LABELBKG_YAXISFULL (axislabelbkgex04.php)
    14.29. LABELBKG_XAXISFULL (axislabelbkgex05.php)
    14.30. LABELBKG_XYFULL (axislabelbkgex06.php)
    14.31. LABELBKG_XY (axislabelbkgex07.php)
    14.32. The original graph (grace_ex0.php)
    14.33. Using a 10% grace (grace_ex1.php)
    14.34. Using a 50% grace (grace_ex2.php)
    14.35. Using a 100% grace (grace_ex3.php)
    14.36. The original line graph (example3.2.php)
    14.37. Adding grace values. Note x-axis position at y=0 (example3.2.1.php)
    14.38. Adjusting the position of the x-axis manually (example3.2.2.php)
    14.39. Manual text scale example
    14.40. Manual text scale with month labels (manual_textscale_ex1.php)
    14.41. Setting text tick interval=2 (manual_textscale_ex2.php)
    14.42. Labels at every 2:nd tick mark (manual_textscale_ex3.php)
    14.43. Tick marks every 40 points and labels every 2:nd tick mark (manual_textscale_ex4.php)
    14.44. BAND_RDIAG (smallstaticbandsex1.php)
    14.45. BAND_LDIAG (smallstaticbandsex2.php)
    14.46. BAND_DIAGCROSS (smallstaticbandsex10.php)
    14.47. BAND_HLINE (smallstaticbandsex7.php)
    14.48. BAND_VLINE (smallstaticbandsex6.php)
    14.49. BAND_HVCROSS (smallstaticbandsex5.php)
    14.50. BAND_3DPLANE (smallstaticbandsex4.php)
    14.51. BAND_SOLID (smallstaticbandsex3.php)
    14.52. SetDensity(10) (plotbanddensity_ex0.php)
    14.53. SetDensity(40) (plotbanddensity_ex1.php)
    14.54. SetDensity(80) (plotbanddensity_ex2.php)
    14.55. Creative use of plot bands
    14.56. Creative use of plot bands (staticbandbarex7.php)
    14.57. Use of a static line to simulate an extra x-axis at y=0
    14.58. Adding a static line at y=0 to simulate an extra 0-axis (impulsex4.php)
    14.59. Changing the Y2 scale from linear to logarithmic (example7.php)
    14.60. Enabling minor grid lines on the y-axis and also grid lines on the x-axis (example8.php)
    14.61. An example of a log-log plot (where both the y- and x-axis use a logarithmic scale) (loglogex1.php)
    14.62. Using a text-log scale (example9.php)
    14.63. Adjusting the text scale so that only every second labels are displayed. (example9.1.php)
    14.64. Rotating the x-axis labels 90 degree (example9.2.php)
    14.65. A first date scale example (dateaxisex2.php)
    14.66. Manually adjusting the tick labels for a date scale (datescaleticksex01.php)
    14.67. Adjusting label formatting of a date scale (dateaxisex4.php)
    14.68. Manually creating a date scale (dateaxisex1.php)
    14.69. Adding a label at the start of every month (manualtickex1a.php)
    14.70. Manually specified date scale (dateutilex01.php)
    14.71. Using an automatic date scale (dateutilex02.php)
    14.72. Different types of shearing transformation
    14.73. Explaining the shearing parameters
    14.74. Original unrotated graph (rotex0.php)
    14.75. Rotating the plot area 45 degrees (rotex1.php)
    14.76. Rotating the plot area 90 degrees (rotex2.php)
    14.77. Rotating the plot area 45 degrees (rotex3.php)
    14.78. Rotating the plot area 90 degrees (rotex4.php)
    14.79. Rotating the plot area -30 degree around the bottom left corner (rotex5.php)
    14.80. Plain radar plot (radarex8.php)
    14.81. Anti-aliased radar plot (radarex8.1.php)
    14.82. Anti-aliasing up-close. The figure shows the difference + between a standard line (on-top) and the corresponding + anti-aliased line (on-the bottom)
    14.83. Affects of using anti-alias for Pie-graphs
    14.84. Mixing an icon image into the background of the graph. The area plot in the graph uses alpha blending to achieve see-through affect (lineiconex1.php)
    14.85. Adding a country flag icon in the background (lineiconex2.php)
    14.86. The graph that will be used to add backgrounds + to
    14.87. Background image (a closeup of our burnt + server)
    14.88. BGIMG_COPY (background_type_ex0.php)
    14.89. BGIMG_CENTER (background_type_ex1.php)
    14.90. BGIMG_FREE (background_type_ex2.php)
    14.91. BGIMG_FILLPLOT (background_type_ex3.php)
    14.92. BGIMG_FILLFRAME (background_type_ex4.php)
    14.93. What area of the graph the gradient should affect
    14.94. Different types of gradient fills
    14.95. The "mkgrad" utiliy to create gradient images
    14.96. Adding a text object to a graph (example25.php)
    14.97. Making the text stand out a bit more by adding a background color and frame (example25.1.php)
    14.98. Adding a text object with multiple rows of text. Paragraph alignment is set to "center" (example25.2.php)
    15.1. Supported linear graph types in the library
    15.2. The most simple line graph (example0-0.php)
    15.3. Adding some titles (example2.php)
    15.4. Changing fonts of the axis titles and adjusting plot weight (example3.php)
    15.5. Adding drop shadow and changing axis color (example3.0.1.php)
    15.6. Original null values (example3.0.3.php)
    15.7. Using '-' to get interpolated lines (example3.0.2.php)
    15.8. Adding basic plot marks to the plot (example3.1.php)
    15.9. Using one of the built-in images as plot mark, MARK_IMG_DIAMOND (example3.1.1.php)
    15.10. Using country flags as plot marks (markflagex1.php)
    15.11. (example3.3.php)
    15.12. Changing the appearance of data labels (example3.4.php)
    15.13. Formatting display values as roman numerals (example3.4.1.php)
    15.14. Adding a second data series (example4.php)
    15.15. Adding a second y-axis to the graph (example5.php)
    15.16. Adding and adjusting the position of the legend box (example6.php)
    15.17. Adjusting the layout of the texts in the legend box (example6.1.php)
    15.18. Using plot marks with several data series and a legend (builtinplotmarksex1.php)
    15.19. Using the "Step style" for line plots (example6.2.php)
    15.20. A basic filled line graph (filledlineex01.php)
    15.21. Having the grid line on top of a filled line plot (filledlineex01.1.php)
    15.22. Creating the effect of an area fill with an image (lineimagefillex1.php)
    15.23. Filling from the 0-line (The default) (manualtickex3.php)
    15.24. Filling from the bottom (manualtickex4.php)
    15.25. A basic gradient fill using default values (gradlinefillex1.php)
    15.26. Using the default number of intermediate colors (gradlinefillex2.php)
    15.27. Only using 4 colors in total between start and finish color (gradlinefillex3.php)
    15.28. Adding two partially filled areas to a line plot (partiallyfilledlineex1.php)
    15.29. Area plot with 'x' NULL values (filledlineex03.php)
    15.30. A basic accumulated area plot (example17.php)
    15.31. Area plot with specified x coordinates (prepaccdata_example.php)
    15.32. Constructing a smooth spline curve from 8 control points (splineex1.php)
    15.33. Different types of supported bar graphs
    15.34. Using "int" scale for the x-axis (example19.1.php)
    15.35. Using "text" scale for the x-axis (example19.php)
    15.36. An accumulated bar plot (example23.php)
    15.37. Accumulated bar with individual frame colors (accbarframeex01.php)
    15.38. Accumulated bar with unit frame color (accbarframeex02.php)
    15.39. Setting individual frames to weight=0 (accbarframeex03.php)
    15.40. A grouped bar plot (example21.php)
    15.41. Adjusting the width of a group bar plot (example22.php)
    15.42. All data series in a grouped bar graph must have the same number of data points (groupbarex1.php)
    15.43. A grouped accumulated bar graph (example24.php)
    15.44. A basic horizontal bar graph (horizbarex1.php)
    15.45. Using multiple line labels in a horizontal bar graph (horizbarex4.php)
    15.46. Supported gradient fills for bar plots
    15.47. GRAD_MIDVER (bargradsmallex1.php)
    15.48. GRAD_MIDHOR (bargradsmallex2.php)
    15.49. GRAD_HOR (bargradsmallex3.php)
    15.50. GRAD_VER (bargradsmallex4.php)
    15.51. GRAD_WIDE_MIDVER (bargradsmallex5.php)
    15.52. GRAD_WIDE_MIDHOR (bargradsmallex6.php)
    15.53. GRAD_CENTER (bargradsmallex7.php)
    15.54. GRAD_RAISED_PANEL (bargradsmallex8.php)
    15.55. Horizontal bar graph with gradient fill (horizbarex6.php)
    15.56. Supported pattern fills for bar plots
    15.57. Using a callback to format the labels on a bar (barscalecallbackex1.php)
    15.58. A basic error plot (example13.php)
    15.59. Making use of SetCenter() with error plots (example14.php)
    15.60. A basic Line error plot (example15.php)
    15.61. A line error plot with a legend (example16.php)
    15.62. A stock graph (stockex1.php)
    15.63. Explaining stock graphs
    15.64. A typical boxplot (boxstockex1.php)
    15.65. A basic scatter plot (scatterex1.php)
    15.66. Adjusting the size and color of the marker (scatterex2.php)
    15.67. Combining data points with a dotted line (scatterlinkex3.php)
    15.68. Combining data points with a red line (scatterlinkex4.php)
    15.69. Stem plot (impulsex1.php)
    15.70. Adjusting the overall look and feel for the stem graph (impulsex3.php)
    15.71. Possible sizes of arrow heads for field plots
    15.72. A field plot (fieldscatterex1.php)
    15.73. Using format callback to create a balloon plot (balloonex2.php)
    15.74. An example with geo maps (pushpinex1.php)
    15.75. A basic contour graph (basic_contourex01.php)
    15.76. Adding axis on all sides (basic_contourex02.php)
    15.77. Flipping the data around the center line (basic_contourex05.php)
    15.78. Using only 5 isobar lines (basic_contourex04.php)
    15.79. Interpolation factor=1 (basic_contourex03-1.php)
    15.80. Interpolation factor=2 (basic_contourex03-2.php)
    15.81. Interpolation factor=3 (basic_contourex03-3.php)
    15.82. The exponential growth of the data size due to grid interpolation factor (interpolation-growth.php)
    15.83. The exponential growth of the data size due to the grid interpolation factor (log scale) (interpolation-growth-log.php)
    15.84. Mixing a line and area plot in the same graph (example16.1.php)
    15.85. Mixing a line and bar plot in the same graph (example16.3.php)
    15.86. Centering the line plot in the middle of the bar (linebarcentex1.php)
    15.87. Mixing bar and line using an integer x-scale (example16.4.php)
    15.88. A combination of a line graph at top and a bar graph in the bottom (combgraphex1.php)
    15.89. Mixing a background image with two subgraphs. In this case the mixing factor was 85 for both subgraphs. (Note: To reduce load time the image is quite hard compressed in JPEG so there are some artifacts in high-frequency areas.) (combgraphex2.php)
    15.90. Combining three graphs in one image (comb90dategraphex03.php)
    16.1. Pie graphs
    16.2. Pie3D graphs
    16.3. Ring graphs
    16.4. Radar graphs
    16.5. Polar graphs
    16.6. Gantt charts
    16.7. Hare/Niemeyer pie plot integer compensation
    16.8. A basic Pie graph (example26.php)
    16.9. Adding a legend to a pie plot (example26.1.php)
    16.10. Adding several pie plots to the same pie graph (pieex3.php)
    16.11. Adding guide lines to a pie labels (pielabelsex1.php)
    16.12. Lining up guide lines vertically (pielabelsex2.php)
    16.13. Adjusting the distance between the labels for guide lines (pielabelsex4.php)
    16.14. A basic 3D pie plot (example27.php)
    16.15. Adjusting the perspective angle (example27.1.php)
    16.16. Affect of adjusting the perspective angle for a 3D pie plot
    16.17. A ring plot (piecex1.php)
    16.18. A ring graph with several formatting options adjusted (piecex2.php)
    16.19. Exploding the second slice (example27.2.php)
    16.20. Exploding the second slice (example27.3.php)
    16.21. Adjusting the position of the pie labels (pieex8.php)
    16.22. Pie chart with manually specified labels for each slice (pielabelsex5.php)
    16.23. Adding a drop shadow to exploded pie (pieex9.php)
    16.24. Pie plots with a background image (piebkgex1.php)
    16.25. (example28.1.php)
    16.26. (example28.2.php)
    16.27. (example28.php)
    16.28. (example28.3.php)
    16.29. Earth theme
    16.30. Pastel theme
    16.31. Sand theme
    16.32. Water theme
    16.33. A typical radar graph with two radar plots added (radarex7.php)
    16.34. A basic radargraph with no formatting (radarex1.php)
    16.35. A basic radargraph with minimal formatting (radarex2.php)
    16.36. Adding plot marks to a radar graph (radarmarkex1.php)
    16.37. Enabling a dashed grid line (radarex4.php)
    16.38. Enabling a dashed grid line with red (radarex6.php)
    16.39. Using a logarithmic scale (radarlogex1.php)
    16.40. Enabling anti-alias for the logarithmic radar example (radarlogex1-aa.php)
    16.41. A more complex example of a radar graph with a manual scale (fixscale_radarex1.php)
    16.42. A full 360 degree polar graph (polarex0.php)
    16.43. A 180 degree (half) polar graph (polarex0-180.php)
    16.44. A 360 polar plot with background gradient and alpha blending (polarex7-2.php)
    16.45. Clockwise polar graph (polarclockex1.php)
    16.46. Rotated clockwise polar graph (polarclockex2.php)
    16.47. Adding plot marks to a polar graph (polarex7-1.php)
    16.48. Linear scale for radius (polarex3-lin.php)
    16.49. Logarithmic scale for radius (polarex3.php)
    16.50. Logarithmic scale with only major grid lines (polarex4.php)
    16.51. Logarithmic scale with both major and minor grid lines (polarex5.php)
    16.52. Different colors for labels, specifying both a tabbed title as well as a axis title (polarex9.php)
    16.53. A typical small Gantt chart (ganttmonthyearex2.php)
    16.54. Building block of a Gantt chart
    16.55. The Gantt scale properties
    16.56. Gantt chart with day and hour scale enabled (gantthourex1.php)
    16.57. The simplest possible Gantt graph (ganttex00.php)
    16.58. Making some minor alterations to the Gantt graph (ganttex01.php)
    16.59. Specifying a large vertical position (ganttex03.php)
    16.60. Adding a milestone marker to a gantt graph (ganttex04.php)
    16.61. Adding a vertical line in the Gantt graph (ganttex06.php)
    16.62. Adjusting the position of the vertical line within the day (ganttex07.php)
    16.63. Adding several activity bars on the same row (gantt_samerowex1.php)
    16.64. Adding a hollow "break" bar (gantt_samerowex2.php)
    16.65. Example of adding a right marker to the activity bar
    16.66. A large marker will force the row to become larger since it by default always fills 60% of the allocated height for each row (ganttex08.php)
    16.67. Adding a caption to a Gantt bar
    16.68. Adding progress bars ot the gantt chart (ganttex14.php)
    16.69. Modifying the format for the progress pattern (ganttex15.php)
    16.70. Start to end constraint
    16.71. Start to start constraint
    16.72. End to start constraint
    16.73. End to end constraint
    16.74. Group markers
    16.75. Using the CreateSimple() wrapper method (ganttsimpleex1.php)
    16.76. Using multiple columns as titles for activties (ganttmonthyearex3.php)
    16.77. Using different fonts for individual columns (ganttcolumnfontsex01.php)
    16.78. Adding a spanning title over all title columns (ganttmonthyearex4.php)
    16.79. Built-in icons for Gantt charts
    16.80. Adding built in icons in titles (gantticonex1.php)
    16.81. A zoom factor of 0.7 (ganttex13-zoom1.php)
    16.82. A zoom factor of 1.5 (ganttex13-zoom2.php)
    16.83. Adding a table title in the top left corner (ganttex16.php)
    16.84. Gantt divider lines
    16.85. Adjusting the plot box around the gantt chart (ganttex18.php)
    16.86. (gantthgridex1.php)
    16.87. Adding a country flag to the top left corner of the gantt graph (ganttex17-flag.php)
    16.88. Adding two text objects to a Gantt graph (gantt_textex1.php)
    16.89. Error message when using an unsupported Locale in Gantt chart
    16.90. Using Swedish locale. Notice the L for Lordag instead of S for Saturday (ganttex19.php)
    16.91. Using multiple title columns with a scale of one day (gantthourminex1.php)
    16.92. Using multiple markers and indenting titles in the Gantt chart (ganttex30.php)
    16.93. Using a grouping bar together with constraints (ganttconstrainex2.php)
    17.1. LEDC_GREEN (ledex1.php)
    17.2. LEDC_RED (ledex2.php)
    17.3. LEDC_YELLOW (ledex3.php)
    17.4. LEDC_BLUE (ledex5.php)
    17.5. LEDC_GRAY (ledex6.php)
    17.6. LEDC_INVERTGRAY (ledex17.php)
    17.7. LEDC_CHOCOLATE (ledex7.php)
    17.8. LEDC_PERU (ledex8.php)
    17.9. LEDC_GOLDENROD (ledex9.php)
    17.10. LEDC_KHAKI (ledex10.php)
    17.11. LEDC_OLIVE (ledex11.php)
    17.12. LEDC_LIMEGREEN (ledex12.php)
    17.13. LEDC_FORESTGREEN (ledex13.php)
    17.14. LEDC_TEAL (ledex14.php)
    17.15. LEDC_STEELBLUE (ledex15.php)
    17.16. LEDC_NAVY (ledex16.php)
    17.17. Supersampling=1 (ledex4.php)
    17.18. Supersampling=2 (default) (ledex4.1.php)
    17.19. Supersampling=4 (ledex4.2.php)
    17.20. LED 4x7 Cyrillic alphabet support
    17.21. Sample illustration of captcha challenge (antispamex01.php)
    17.22. A simple canvas graph to draw a text box (canvasex01.php)
    17.23. Drawing some basic geometric shapes on a canvas (canvasex02.php)
    17.24. Creating a canvas graph with a scale and using the shape class (canvasex03.php)
    17.25. Changing the image size to create a smaller version of the previous example (canvasex04.php)
    17.26. Keeping the image size but changing the scale (canvasex05.php)
    17.27. Example of using an indented rectangle (canvasex06.php)
    18.1. Linear regression using utility class (example16.6.php)
    19.1. Standalone table examples
    19.2. Combining a graphic table and a bar graph
    19.3. The most basic 2x4 table (table_howto1.php)
    19.4. Merging the rightmost 4 cells in the table (table_howto2.php)
    19.5. Merging the top row (table_howto3.php)
    19.6. Adjusting the font in the top row (table_howto5.php)
    19.7. Merging and setting the colors the top row (table_howto4.php)
    19.8. Setting the minimum column width to 35 pixels. (table_howto6.php)
    19.9. Double lines 1 (table_howto7.1.php)
    19.10. Double lines 2 (table_howto7.2.php)
    19.11. Removing some grid lines and border. In addition we have right aligned all the cells as is common practice for numeric data. (table_howto8.php)
    19.12. Applying a number format to the data in the cells (table_howto9.php)
    19.13. Using country flags in the table cells (table_flagex1.php)
    19.14. xx (table_mex00.php)
    19.15. xx (table_mex0.php)
    19.16. xx (table_mex1.php)
    19.17. xx (table_mex3.php)
    19.18. Vertical text (table_vtext.php)
    19.19. Adding an icon (image) in a table cell (table_iconex1.php)
    19.20. Combining a bar graph and a table (tablebarex1.php)
    20.1. Odometers
    20.2. A basic odometer (odotutex00.php)
    20.3. A full circle odometer (odotutex01.php)
    20.4. Adding titles and captions (odotutex02.php)
    20.5. Adding a multi line caption (odotutex03.php)
    20.6. Changing colors (odotutex04.php)
    20.7. Possible shapes of the odometer indicator (odotutex06.php)
    20.8. Illustration of various sizes of arrow heads (odotutex07.php)
    20.9. Adding drop shadows (odotutex08.php)
    20.10. Increasing the individual margins around the plots (odotutex09.php)
    20.11. Adding colored scale indicators (odotutex10.php)
    20.12. Adjusting the non-colored center area (odotutex11.php)
    20.13. Adding a second scale indicator (odotutex12.php)
    20.14. Adding a scale legend by using the label property (odotutex13.php)
    20.15. (odotutex14.php)
    20.16. Adjusting the scale format (odotutex15.php)
    20.17. Adjusting start and end angles of scale (odotutex16.php)
    20.18. Adding gray areas below the min and max scale values (odotutex16.1.php)
    20.19. Manually specifying the position of odometer plots (odotutex17.php)
    20.20. Using layout classes for automatic positioning (odotutex18.php)
    20.21. Adding an icon and text to a Odometer graph (odotutex19.php)
    21.1. An basic Windrose plot
    21.2. WINDROSE_TYPE4
    21.3. WINDROSE_TYPE8
    21.4. WINDROSE_TYPE16
    21.5. WINDROSE_TYPEFREE
    21.6. A basic 16 direction windrose graph (windrose_ex0.php)
    21.7. Adding two windrose plots to the same graph (windrose_2plots_ex1.php)
    21.8. Positioning with LBLPOSITION_CENTER
    21.9. Positioning with LBLPOSITION_EDGE
    21.10. Windrose legend methods
    21.11. Using chinese fonts (windrose_ex6.1.php)
    21.12. Japanese locale (windrose_ex7.1.php)
    21.13. Adding label background (windrose_ex8.1.php)
    21.14. Different legend label styles
    21.15. Interpretation of ordinal keys (windrose_ex9.1.php)
    21.16. Adding a "tornado" icon to the top left corner (windrose_icon_ex1.php)
    21.17. Using layout classes to position 4 windrose plots (windrose_layout_ex0.php)
    21.18. Using layout classes to position 5 windrose plots (windrose_layout_ex1.php)
    21.19. (windrose_ex1.php)
    21.20. (windrose_ex2.php)
    21.21. (windrose_ex3.php)
    21.22. (windrose_ex4.php)
    21.23. (windrose_ex5.php)
    21.24. (windrose_ex6.php)
    21.25. (windrose_ex7.php)
    21.26. Show how to set different styles for individual radial grid lines (windrose_ex8.php)
    21.27. (windrose_ex9.php)
    21.28. (windrose_bgimg_ex1.php)
    22.1. A medium complex example to shows some capabilities of matrix plots (matrix_introex.php)
    22.2. A basic matrix graph with all default values (matrix_ex0.php)
    22.3. The effects of changing the value range for the colormap
    22.4. Using a circular module type (matrix_ex05.php)
    22.5. Matrix alpha blending=0.2 (matrix_ex04.1.php)
    22.6. Matrix alpha blending=0.7 (matrix_ex04.2.php)
    22.7. Matrix legend positions
    22.8. Adding row and column legends to a matrix plot (matrix_edgeex01.php)
    22.9. Adding an icon to the lower right corner (matrix_ex03.php)
    22.10. Adding a background image to the matrix graph (matrix_ex04.php)
    22.11. Adding plot lines to the matrix plot (matrix_ex06.php)
    22.12. Using layout classes with Matrix plots (matrix_layout_ex1.php)
    22.13. Standard color maps
    22.14. Centered color map
    22.15. Continues color map
    23.1. Filled contour with labels (contour2_ex1.php)
    23.2. Filled contour with no isobar lines (contour2_ex2.php)
    23.3. Manual colors for contour (contour2_ex3.php)
    23.4. Labels that follows the gradients (contour2_ex4.php)
    23.5. Labels that are always horizontal. In this example we have also shown how to change the colors. (contour2_ex5.php)
    23.6. Triangulation step 0
    23.7. Triangulation step 1
    23.8. Triangulation step 2
    23.9. "Rectangularization" step 0
    23.10. "Rectangularization" step 1
    23.11. "Rectangularization" step 2
    23.12. 7 Isobars, "rect" method (contour2_ex6.php)
    23.13. 7 Isobars, "tri" method (contour2_ex7.php)
    23.14. Rectangular sub-division
    23.15. Triangular sub-division
    24.1. Understanding linear barcodes. Example with Code 25 symbology
    24.2. Linear Barcode Demo application (screen shot from running in + WEB-browser)
    24.3. Encoding "ABC123" with CODE 39.
    24.4. Encoding "ABC123" with CODE 128.
    24.5. Image error - Failed barcode data validation
    24.6. Encoding "ABC123" with CODE 39 adding checksum (checksum=4).
    24.7. Encoding "ABC123" with CODE 39, hiding the text.
    24.8. UPC A Example
    24.9. UPC E Encoding of "05510000120"
    24.10. UPC A Encoding of "05510000120"
    24.11. EAN 8 Example
    24.12. EAN 13 Example
    24.13. EAN 128 Example
    24.14. Industrial 2 of 5, without check + digit
    24.15. Industrial 2 of 5, with check digit
    24.16. Industrial 2 of 5, without check + digit
    24.17. Industrial 2 of 5, with check digit
    24.18. Code 11, without check digit
    24.19. Code 11, with check digit
    24.20. Code 39, without check digit
    24.21. Code 39, with check digit
    24.22. Code 39 Extended, without check + digit
    24.23. Code 39 Extended, with check digit
    24.24. Code 128
    24.25. Codabar
    24.26. Bookland (ISBN)
    25.1. PDF417 Structure - Overview
    25.2. PDF417 Structure - Details of a real barcode
    25.3. PDF417 WEB-based demo application
    25.4. Overview of the interaction between encoder and backends
    25.5. The most basic PDF417 script (pdf417_ex0.php)
    25.6. Adding error handling (pdf417_ex1.php)
    25.7. Adjusting the number of columns and error correction level (pdf417_ex1b.php)
    25.8. Adjusting the module width and showing human readable text (pdf417_ex2.php)
    25.9. Structure for manually specified encodation schema
    25.10. Normal PDF417
    25.11. Truncated PDF417
    25.12. Showing human readable text (pdf417_ex3.php)
    25.13. Changing colors (pdf417_ex4.php)
    25.14. (pdf417_ex6.php)
    26.1. Datamatrix structure.
    26.2. Datamatrix - Square symbol shape
    26.3. Datamatrix - Rectangle symbol shape
    26.4. Datamatrix encodation principle
    26.5. The simplest possible datamatrix script (datamatrix_ex00.php)
    26.6. Datamatrix error image
    26.7. Datamatrix with basic error handling (datamatrix_ex0.php)
    26.8. Datamatrix with modified module width (datamatrix_ex1.php)
    26.9. Datamatrix WEB-based demo application
    26.10. Datamatrix example, setting quiet zone and ASCII encoding (datamatrix_ex4.php)
    26.11. Datamatrix postscript output
    26.12. Datamatrix example, changing colors (datamatrix_ex5.php)
    27.1. QR Code high level structure
    27.2. Creative usage of QR Barcodes
    27.3. A small sized QR Code (version=2)
    27.4. A medium sized QR code (version=13)
    27.5. QR Encodation Process
    27.6. The first very basic QR code (qrexample00.php)
    27.7. QR Error message
    27.8. Adding basic exception handling (qrexample0.php)
    27.9. Adjusting the module width for the QR code (qrexample01.php)
    27.10. Structure for manually specify QR encodation schema
    27.11. QR Code - Example Postscript Output
    27.12. A QR code template (qr_template.php)
    27.13. QR Code WEB-based demo application
    27.14. Specified error correction level (qrexample04.php)
    27.15. QR Barcode with manually specified encodation (qrexample05.php)
    27.16. QR Barcode with image in JPG format (qrexample06.php)
    27.17. multiple manually specified encodation schema. (qrexample07.php)
    27.18. data read from file (qrexample08.php)
    27.19. (qrexample09.php)
    27.20. Specified error correction level (qrexample10.php)
    27.21. QR With ASCII rendering
    28.1. Aqua Theme (aqua_example.php)
    28.2. Green Theme (green_example.php)
    28.3. Ocean Theme (ocean_example.php)
    28.4. Pastel Theme (pastel_example.php)
    28.5. Softy Theme (softy_example.php)
    28.6. Vivid Theme (vivid_example.php)
    28.7. Orange Theme (orange_example.php)
    28.8. Rose Theme (rose_example.php)
    28.9. Universal Theme (universal_example.php)
    30.1. Theme Sample (theme_example.php)
    32.1. Synchronized y and y2 scales (y2synch.php)
    32.2. Using a barplot with two different scales (y2synch2.php)
    33.1. usps_exhibit44.png
    33.2. USPS example 1
    33.3. USPS example 2
    34.1. Spam statistics
    35.1. Critical chain buffer penetration. Each white scatter dot represents the + state of one task.
    35.2. Buffer penetration chart for example
    35.3. Buffer penetration chart with "historic" tail
    35.4. Complete buffer penetration example with history trace (ccbp_ex1.php)
    35.5. Using the alternative color map (ccbp_ex2.php)
    35.6. Steps to create the background
    A.1. The documentation build process
    E.1. Small size
    E.2. Medium size
    E.3. Large size
    E.4. Standard size
    E.5. Standard size
    E.6. Standard size
    E.7. Standard size
    E.8. Standard size

    List of Examples

    1.1. This is the very first example (example0.php)
    3.1. Verifying the GD installations (checkgd.php)
    3.2. Verifying GD2 (checkgd2.php)
    3.3. Installing GD through RPM packet manager
    3.4. Verifying TTF with a known font (checkttf.php)
    3.5. Alias configuration for a development server running Apache with + Eclipse-PDT
    6.1. Throwing a JpGraph exception
    6.2. Catching a JpGraph exception and sending it back as an image to the + client
    8.1. Specifying and installing a user specified font
    8.2. Using the SymChar class to display the Greek letter "pi"
    9.1. Using an automatic cache filename and a 60min timeout of the cached + images.
    9.2. General structure for a CSIM script that uses CSIM
    10.1. Principles of including CSIM graph in a HTML page
    10.2. Creating CSIM URL targets to open in same browser window
    10.3. Creating CSIM URL targets to open in a fresh window
    10.4. Example of HTML page that includes two Graph CSIM scripts + ("Examples/csim_in_html_ex2.html")
    13.1. Illustration of different types of NULL values in graphs
    14.1. Adjusting the axis font and color
    14.2. Adjusting manual text tick interval
    14.3. Adjusting the interval for the labels
    14.4. Adjusting both text tick mark and label interval
    14.5. Different densities for plot bands
    14.6. Different densities for various plot bands
    14.7. We want the time adjustment to start on an even quarter of an hour, + i.e. an even 15 minute period.
    14.8. We want the time to start on an even 2 hour
    14.9. Manually creating a date/time scale (timestampex01.php)
    15.1. The most simple line graph (example0-0.php)
    15.2. Adding some titles (example2.php)
    15.3. A basic scatter plot (scatterex1.php)
    15.4. An example with geo maps (pushpinex1.php)
    16.1. A basic Pie graph (example26.php)
    16.2. Adding several pie plots to the same pie graph (pieex3.php)
    16.3. Pie plots with a background image (piebkgex1.php)
    16.4. Having the name of the months as title of the axis
    16.5. A more complex example of a radar graph with a manual scale (fixscale_radarex1.php)
    16.6. The simplest possible Gantt graph (ganttex00.php)
    17.1. A simple canvas graph to draw a text box (canvasex01.php)
    17.2. Drawing some basic geometric shapes on a canvas (canvasex02.php)
    17.3. Creating a canvas graph with a scale and using the shape class (canvasex03.php)
    18.1. Linear regression using utility class (example16.6.php)
    19.1. The most basic 2x4 table (table_howto1.php)
    20.1. A basic odometer (odotutex00.php)
    20.2. Adding titles and captions (odotutex02.php)
    20.3. Adding a multi line caption (odotutex03.php)
    20.4. Adjusting the scale format (odotutex15.php)
    20.5. Using layout classes for automatic positioning (odotutex18.php)
    21.1. Examples of input data for compass (regular) Windrose plots
    21.2. Examples of input data for free Windrose plots
    21.3. A basic 16 direction windrose graph (windrose_ex0.php)
    21.4. Adding two windrose plots to the same graph (windrose_2plots_ex1.php)
    21.5. Adding a "tornado" icon to the top left corner (windrose_icon_ex1.php)
    21.6. Using layout classes to position 5 windrose plots (windrose_layout_ex1.php)
    21.7. (windrose_ex1.php)
    21.8. (windrose_ex2.php)
    21.9. (windrose_ex3.php)
    21.10. (windrose_ex4.php)
    21.11. (windrose_ex5.php)
    21.12. (windrose_ex6.php)
    21.13. (windrose_ex7.php)
    21.14. Show how to set different styles for individual radial grid lines (windrose_ex8.php)
    21.15. (windrose_ex9.php)
    21.16. (windrose_bgimg_ex1.php)
    22.1. A basic matrix graph with all default values (matrix_ex0.php)
    22.2. Adding an icon to the lower right corner (matrix_ex03.php)
    22.3. Adding a background image to the matrix graph (matrix_ex04.php)
    22.4. Using layout classes with Matrix plots (matrix_layout_ex1.php)
    22.5. Matrix example with CSIM (matrix_csimex01.php)
    25.1. The most basic PDF417 script (pdf417_ex0.php)
    25.2. Adding error handling (pdf417_ex1.php)
    25.3. Adjusting the number of columns and error correction level (pdf417_ex1b.php)
    25.4. Adjusting the module width and showing human readable text (pdf417_ex2.php)
    25.5. Showing human readable text (pdf417_ex3.php)
    25.6. Changing colors (pdf417_ex4.php)
    25.7. (pdf417_ex5.php)
    25.8. (pdf417_ex6.php)
    26.1. The simplest possible datamatrix script (datamatrix_ex00.php)
    26.2. Datamatrix with basic error handling (datamatrix_ex0.php)
    26.3. Datamatrix with modified module width (datamatrix_ex1.php)
    26.4. Datamatrix example, setting quiet zone and ASCII encoding (datamatrix_ex4.php)
    26.5. Datamatrix example, writing to a file (datamatrix_ex6.php)
    26.6. Datamatrix example, creating postscript output (datamatrix_ex7.php)
    26.7. Datamatrix example, changing colors (datamatrix_ex5.php)
    27.1. The first very basic QR code (qrexample00.php)
    27.2. Adding basic exception handling (qrexample0.php)
    27.3. Adjusting the module width for the QR code (qrexample01.php)
    27.4. Generating Postscript output (qrexample11.php)
    27.5. A QR code template (qr_template.php)
    27.6. Storing image to a file (qrexample03.php)
    27.7. Specified error correction level (qrexample04.php)
    27.8. QR Barcode with manually specified encodation (qrexample05.php)
    27.9. QR Barcode with image in JPG format (qrexample06.php)
    27.10. multiple manually specified encodation schema. (qrexample07.php)
    27.11. data read from file (qrexample08.php)
    27.12. (qrexample09.php)
    27.13. Specified error correction level (qrexample10.php)
    27.14. Using the ASCII backend (qrexample12.php)
    32.1. (y2synch.php)
    35.1. Buffer penetration example
    35.2. (ccbpgraph.class.php)
    + + + + + + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/manual.css b/Societes/ric/jpgraph/docs/chunkhtml/manual.css new file mode 100755 index 00000000..2ea1203f --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/manual.css @@ -0,0 +1,498 @@ +/** + * DocBook CSS Stylesheet for producing the JpGraph HTML manual + * + * Version: $Id: jpg_style.css 1705 2009-07-27 18:38:54Z ljp $ + * + */ + +@import "phphl.css"; + +/* This is reserved for the part header */ +h1 { + font-size: 1.7em; + font-weight: bold; + color: white; + background-color: #3780aE; + border:2px solid #17608E; + margin-left: 0px; + margin-bottom: 15px; + margin-top: 0px; + padding-left: 5px; + padding-right: 5px; + padding-bottom: 15px; + padding-top: 15px; +} +/* This is reserved for the chapter header */ +h2 { + font-size: 1.8em; + font-weight: bold; + font-variant: small-caps; + color: #555; + /*color: #a85;*/ + line-height: 1.7em; + margin: 15px 0 15px 0; + border-bottom: 1px solid #cbb; + /*border-bottom: 2px solid #a85;*/ +} + +/* This is reserved for the sect1 header */ +div[class=sect1] h2 { + font-size: 1.4em; + font-weight: normal; + /*font-variant: small-caps;*/ + color: #555; + line-height: 1.7em; + margin: 15px 0 15px 0; + border-bottom: none; +} + +/* This is used for generic h3 header, e.g. sect2 */ +h3 { + font-size: 1.33em; + font-weight: normal; + color: #555; + text-align: left; + padding-left: 15px; +} +/* This is used for generic h3 header, e.g. sect3 */ +h4 { + font-size: 1em; + font-weight: bold; + padding-left: 15px; +} + +.filename, .option { + font-family: "Bitstream Vera Sans Mono", Courier, monospace; +} +.guimenu, .guimenuitem { + font-family: "Bitstream Vera Sans Mono", Courier, monospace; + padding: 0 3px; + background-color:#FF7; +} +.classname { + font-family: "Bitstream Vera Sans Mono", Courier, monospace; + font-weight:bold; +} +.methodname { + font-family: "Bitstream Vera Sans Mono", Courier, monospace; + font-weight:bold; +} +.command { + font-weight: bold; +} +.parameter { + font-family: "Bitstream Vera Sans Mono", Courier, monospace; +} +.envar { + font-family: "Bitstream Vera Sans Mono", Courier, monospace; + font-weight:bold; +} +.function { + font-family: "Bitstream Vera Sans Mono", Courier, monospace; +} +.variablelist { + margin-left: 15px; +} +.variablelist td { + font-size: 1em; +} +.variablelist th { + font-size: 1em; +} +.screen { + font-family: "Bitstream Vera Sans Mono", Courier, monospace; + padding: 5px; + overflow: hidden; +} +.synopsis { + padding-left: 5px; + font-family: "Bitstream Vera Sans Mono", Courier, monospace; + background-color: #fef3c1; +} + +.important { + margin-top: 10px; + margin-bottom: 10px; +} + +div.mediaobject { + margin-top: 15px; + margin-bottom: 15px; +} + +.mediaobject img { + margin-left: auto; + margin-right: auto; + display: block; +} + +/* Admonitions */ +.note, +.tip { + background-color: #F8F7EF; + padding-bottom: 2px; + margin-bottom:10px; + padding-left:60px; + border-left:6px solid #56a; + background-image: url("admon-note.png"); + background-position: 6px 0.5em; + background-repeat: no-repeat; +} + +.tip h3, +.note h3 { + padding-top: 4px; + background-color: #F8F7EF; + color:#56a; + font-weight: bold; + font-style: italic; + font-size: 1.05em; +} + +.tip { + background-image: url("admon-tip.png"); +} + +.note p, +.tip p, +.caution p, +.warning p { + font-size: .85em; + font: italic .85em Georgia, serif; +} + +.caution, +.warning { + background-color: #F8F7EF; + padding-bottom: 2px; + margin-bottom:10px; + padding-left:60px; + border-left:6px solid #D55C21; + background-image: url("admon-warning.png"); + background-position: 6px 0.5em; + background-repeat: no-repeat; +} + +.caution h3, +.warning h3 { + padding-top: 4px; + color: #922; + font-weight: bold; + font-style: italic; + font-size: 1.05em; +} + + +.warning { + background-image: url("admon-bug2_small.png"); +} + + +.important { + background-color: #f18b8b; +} + +.important h1 { + background-color: #f18b8b; +} + +.important .important_content { + background-color: #f8cbcb; + border-left: 4px solid #f18b8b; + border-right: 4px solid #f18b8b; + border-bottom: 4px solid #f18b8b; + padding: 5px 0; +} + + +.screenshot { + margin: 10px; + text-align: center; +} +.variablelist { + margin-left: 15px; + margin-right: 15px; +} + +p, .synopsis, .example, .important, .formaltable { + margin: 0 15px 1em 15px; +} + +a:hover { + border-bottom: 1px solid gray; +} + +a, a:visited { + color: #000055; + font-weight: normal; + text-decoration: none; +} + +.example { + background: #fff; + border: none; + margin-left: 0px; + margin-right: 15px; +} + +.example p.title, +.figure p.title{ + font-size: 0.85em; +} + +.example-contents { + background-color: #fff; + padding: 2px; +} + +.programlisting { + padding: 1ex; + background-color: #eee; + border: 1px dashed #ccc; + margin-left:10px; + margin-right:15px; + white-space: normal; + overflow : hidden; +} + +.screen { + margin-left: 15px; +} + +code { + white-space: pre; + font-size: 1.05em; +} + +code.filename { + font-weight: bold; + font-size: 0.9em; + color: #00688b; +} + +a.uri { + font-weight: bold; + font-size: 1.1em; + color: #00283b; +} + +.uri .filename, uri.filename { + font-size: 1.25em; + background-image: url("text-document.png"); + background-position: 1px 0px; + background-repeat: no-repeat; + margin-left:1px; + padding-left:18px; +} + + +span.markup { + font-weight: bold; + color: #8b2500; + background-color: #eee; +} + +.figure { + margin-top: 15px; + margin-bottom: 15px; + margin-left: auto; + margin-right: auto; + text-align: center; +} + +/* +.titlepage h2.title { + font-weight:bold; +} +*/ + +/* Tables */ + +div.informaltable table { + width: 100%; + margin-left: auto; + margin-right: auto; + text-align: center; +} + +thead { + background: #eee; +} + +thead th { + border: 1px solid #ccc; +} + +div.table { + margin-left: 15px; +} + +div.table-contents table { + border: 1px solid #ccc; + border-collapse: collapse; +} + +div.table-contents td { + border: 1px solid #ccc; +} + +div.table-contents td p.checkmark:before { + content: url("checkmark.png"); +} + +/* TOC */ + +.toc span.preface { + padding-left: 15px; + font: bold 1.05em Arial, serif; + font-style: italic; +} + + +.toc span.part { + padding-left: 15px; + font: bold 1.3em Arial, serif; +} + +span.chapter { + padding-left: 15px; + font: normal 1.05em Arial, serif; +} + +span.sect1 { + padding-left: 15px; + font-size: .85em; + font: normal .85em Georgia, serif; + +} + +div.toc { + background-color:#efeedd; + border:1px solid #cebcac; + padding-bottom:2px; + padding-top:10px; + margin-bottom:15px; +} + +span.sect2 { + padding-left: 15px; + font-size: .85em; + font: normal .85em Georgia, serif; + +} + + +.toc b { + font-size: 1.5em; + color:#555; +} + +div.list-of-examples, +div.list-of-tables +{ + padding-top:10px; + padding-bottom:5px; + background-color:#e5ded2; + background-color:#efeedd; + border:1px solid #c5beb2; + margin-bottom: -1px; +} + +div.list-of-tables dl, +div.list-of-examples dl { + margin-left: 25px; +} + +div.list-of-figures { + padding-top:10px; + padding-bottom:5px; + background-color:#e5ded2; + background-color:#efeedd; + border:1px solid #c5beb2; + margin-bottom: -1px; + margin-top: -16px; +} + +div.list-of-figures dl { + margin-left: 25px; +} + +/* Navigation part of the output */ + +div.navheader { + background-color:#ebf1e8; +} + +div.navfooter { + background-color:#ebf1e8; +} + +div.navheader td { + font-size:0.85em; +} + +div.navfooter td { + font-size:0.85em; +} + +/* Q & A */ +.qandaset dl { + margin-left: 15px; + font-style: italic; + background-color:#efeedd; + border:1px solid #cebcac; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 5px; +} + +.qandaset tr.question { + font-weight: bold; + font-style: italic; +} + +/* Some special handling for manually formatted tables */ + +.bdtable { + border: #000 solid 1px; +} + +.bdhdr { + background: #ccc; +} + +.bdu { + border-bottom: #ccc solid 1px; + font-size: small; +} + +.bdu2 { + border-bottom: #333 solid 1px; + border-left: hidden; + font-size: small; +} + +.bdur { + border-right: #ccc solid 1px; + border-bottom: #ccc solid 1px; + border-left: hidden; + font-size: small; +} + +.bdur2 { + border-right: #ccc solid 1px; + border-bottom: #333 solid 1px; + border-left: hidden; + font-size: small; +} + +.error-text { + font-size: small; + color: #700000; +} + +.error-number { + font-size: small; + color: #700000; +} + diff --git a/Societes/ric/jpgraph/docs/chunkhtml/phphl.css b/Societes/ric/jpgraph/docs/chunkhtml/phphl.css new file mode 100755 index 00000000..5670816e --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/phphl.css @@ -0,0 +1,70 @@ +/** + * CSS file for syntax highlightning together with Text_Highlighter + * $Id: phphl.css 1285 2009-06-13 14:59:40Z ljp $ + */ +.hl-default { + color: #000; +} +.hl-code { + color: #333; +} +.hl-brackets { + color: #808000; +} +.hl-comment { + color: #333; + font: italic 1.0em Georgia, serif; +} +.hl-quotes { + color: #8B0000; +} +.hl-string { + color: #F00; +} +.hl-identifier { + color: #00F; +} +.hl-builtin { + color: #008080; +} +.hl-reserved { + color: #008000; +} +.hl-inlinedoc { + color: #483D8B; +} +.hl-var { + color: #00008B; +} +.hl-url { + color: #00F; +} +.hl-special { + color: #000080; +} +.hl-number { + color: #800000; +} +.hl-inlinetags { + color: #00F; +} +.hl-main { + margin-right: 10px; + margin-left: 15px; + margin-bottom: 1em; + font-size: 0.95em; + background-color: #f9f9f9; +} +.hl-gutter { + background-color: #999999; + color: White; + width: 30px; + font-size: 0.95em; + border: solid 0px red; + padding-right:3px; +} +.hl-table { + font-family: courier; + border: dashed 1px gray; + background-color: #f9f9f9; +} diff --git a/Societes/ric/jpgraph/docs/chunkhtml/pr01.html b/Societes/ric/jpgraph/docs/chunkhtml/pr01.html new file mode 100755 index 00000000..75837320 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/pr01.html @@ -0,0 +1,93 @@ +Preface and history of the JpGraph library

    Preface and history of the JpGraph library

    + +

    PHP has over the last 10 years developed from a rather small language for the enthusiasts + to a major platform for WEB based application development. The reason we call it a platform + rather than a script language is the fact that when referring to PHP it is impossible not to + include the very large library of included standard modules which makes it more of a platform + than a scripting language. As such there are more extensions to PHP both in the form of + external libraries as well as core language extension than any single person can have a + working knowledge of. This means that development teams have to select carefully where best to + invest time and training. So how can the JpGraph extension library motivate its existence? + Perhaps a quick personal reflection of how this library came about might give some insights.

    +

    When I first became aware of PHP at the end of 1998 the PHP 3 version was the new shiny + kid on the block after a complete rewrite of the previous PHP2. Initially I proposed to a + client I was then working for to use this new script language to build some - what was then - + state of the art interfaces to a legacy mainframe system. As part of that some basic graphic + capabilities was needed and as part of that work I put together some fairly crude and not very + generic small library that would just fit the need to my client. This was not a major part of + the development and it didn't make sense at the time to spend a lot of complex design effort + into this very small part of the system. After the work for that client was done I felt that I + should rewrite the small library I put together so that it would be both a little bit more + generic and also a bit more maintainable. (Side note: As part of the contract with the client + I was explicitly forbidden to use any object-oriented-technology since my client had been + terrible burnt by some previous contractors in this area). Hence the original library was + basically a function library and the first thing that was needed was a proper design using a + more maintainable OO-design philosophy.

    +

    This rewrite of the library and the "plugin" architecture/framework it is based on tried + to make the best of the very crude object oriented support available in PHP3 at that time. The + support available then was almost nothing more then some syntactic sugar. However, the initial + design from then is almost unchanged to this day, almost 11 years later. To the best of my + knowledge this makes it one (if not the) oldest object oriented library for PHP that is still + actively maintained and developed.

    +

    Philosophy of the manual

    +

    Writing a good user manual for feature rich library is a bit of a challenge. Learning to + efficiently use a library of this size is not a linear undertaking. One start with some + basics, jump to a bit that is needed at the moment, (perhaps not fully understanding the + details), and then goes back to the beginning again. This makes writing a manual that suits + everyone impossible. What we have tried is to mainly follow a "from-the-basics-to-the-advanced" style as much as possible.

    +

    At certain times we find ourself in the need of some more advanced concept that have not + yet been introduced. In those circumstances we will briefly introduce the concept before + making use of it and refer to other parts of the manual that discuss the particular feature in + more detail. In this way we hope that the more advanced features will at least register as an + area for further exploration even early on in the study of the library and help build up the + mental map on what is possible to do in the library. This of course has the result that the + same information might be in two or three places, but from a slightly different angle, when it + is needed. This manual is deliberately not a long list of API - a detailed description of all + API and classes are available in the reference manual.

    +

    A final note on the examples shown in this manual might be in place. It is custom to keep + introductory examples clean of any real error handling in order to keep them short. We do not + believe that this is a good idea. Error and exception handling is one of the most crucial part + in design and implementation of any system. For this reason we have included, where + appropriate, a basic error handling even though it will make some examples slightly + larger.

    +

    Typographic conventions used in this manual

    +

    +

    • +

      Inline code are set in monotype black fonts. Example: + Graph::Stroke()

      +
    • +

      Filenames mentioned in running text and in titles are set in bluish monotype font. + Example: php.ini

      +
    • +

      Code snippets or examples are set as block with gray background separated from the + text with line numbering. If the code snippet is PHP code it will also be syntax + highlighted.

      +

      +

      1
      +2
      +3
      +
      <?php
      +echo "Hello world!";
      +?>

      +

      +

      Note that for technical reasons with typesetting this manual even one lines code + snippets will have a surrounding of PHP tags i.e. <?php and + ?>

      +
    • +

      Described inline markup tags, i.e. HTML/XML, are set in a dark red color with light + gray background. Example: <img>

      +
    • +

      All generated graphs will have the name of the graph file in the title which is + hyper-linked to a syntax highlighted full version of the actual source that generated + the graph. The link is marked with a small icon and an example is shown in Figure 1. Link to highlighted graph source

      +

      +

      Figure 1. Link to highlighted graph source

      + +

      Link to highlighted graph source

      +


      +

      +
    • +

      Numbering of sections are only done down to three level depths, e.g. 3.4.2

      +

    +

    +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/pt01.html b/Societes/ric/jpgraph/docs/chunkhtml/pt01.html new file mode 100755 index 00000000..136356ea --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/pt01.html @@ -0,0 +1,23 @@ +Part I. Installing and verifying the configuring

    Part I. Installing and verifying the configuring

    + +
    +

    The goal of this first part is to introduce the necessary configurations options in + order to install and use the library. It will describe all necessary steps in order to + successfully install and verify the installation of the library.

    +

    +

    Caution

    +

    All files in the library uses utf-8 character encoding to be able to show a + wide range of locales. The same applies to all examples. Since some example + shows how to use extended character sets , i.e. Chinese and Japanese, and the + extended characters are entered directly in the source file the editor/viewer + used to view these files must be able to show utf-8 encoded files properly. + Since utf-8 character set coincide with the ASCII character set for the usual + latin (e.g. a-z, 0-9, etc) characters most files can however be seen with non + utf-8 compliant editor/viewers.

    +

    +

    +
    + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/pt02.html b/Societes/ric/jpgraph/docs/chunkhtml/pt02.html new file mode 100755 index 00000000..0155bed1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/pt02.html @@ -0,0 +1,20 @@ +Part II. Basic graph creation

    Part II. Basic graph creation

    + +
    +

    The goal of this part is to introduce some basic concepts that must be known when + creating graphs with the JpGraph library. It will also serve as a gentle introduction on + how to structure a basic graph script.

    +

    The challenge of writing a good manual is that it is sometimes necessary to use + concepts that might not have been fully explained in order to clarify some even more + basic concept. So if there are parts that you do not fully understand do not despair. + The remainder of the manual will explain a lot more of the details.

    +

    Table of Contents

    4. Your first graph script
    4.1. Some words of caution
    4.2. Graphing the number of sun spots during the 19th Century
    4.2.1. The historic data
    4.2.2. Preparing the data
    4.2.3. A basic line graph
    4.2.4. A basic bar graph
    5. Fundamentals of dynamic graph generation
    5.1. Making sense of HTTP streams and MIME types
    5.2. What is an image?
    5.3. Static vs dynamic images
    5.4. Dynamic images on the command line
    5.5. How to generate images with JpGraph library
    5.5.1. The standard steps of setting up a graph
    5.5.2. Choosing the image compression format for JpGraph
    5.5.3. Sending back the image to the browser
    5.5.4. Writing the image directly to a file
    5.5.5. Alternatives to streaming or storing the image
    5.5.6. Forcing the browser to update your graph
    5.5.7. Printing the generated image
    5.6. Efficient graph generation using the built-in cache subsystem
    6. Error handling
    6.1. The problem with error messages and images
    6.1.1. Catching errors in other parts of the system while creating images
    6.2. Available error messages
    6.2.1. Localizing error messages
    6.2.2. Error messages on a production server
    6.3. Using PHP Exceptions
    6.3.1. Selecting between text and image based error handling
    6.3.2. Writing error message to a log file (or system logger)
    6.4. Adding a new locale
    7. Color handling
    7.1. Specifying colors by name
    7.2. Specifying colors by RGB triples
    7.3. Using HTML color specifications
    7.4. Fine tuning the color
    7.4.1. Specifying the alpha channel (color transparency)
    7.4.2. Adjusting the brightness
    7.4.3. Combining brightness and transparency adjustment
    7.5. Additional color handling
    8. Text and font handling
    8.1. Different types of fonts
    8.2. Font families and font styles
    8.2.1. Default TrueType Font
    8.3. Understanding text alignment and anchor point
    8.4. Rotating text
    8.5. Formatting text paragraphs
    8.6. Adding custom TTF fonts
    8.7. Inserting Unicode entities
    8.7.1. The utility class "SymChar"
    8.7.2. Graph example with Greek labels
    8.8. Character encoding
    8.8.1. Japanese encoding options
    8.8.2. Chinese encoding options
    8.8.3. Cyrillic encoding options
    8.8.4. Hebrew encoding options
    8.8.5. Greek encoding options
    9. Using the JpGraph cache system
    9.1. Enabling the library cache system
    9.2. Permission settings for the cache files
    9.3. Using the cache in your script
    9.3.1. Manually controlling the cached image
    9.4. Using the cache with Client Side Image Maps (CSIM)
    10. Using CSIM (Client side image maps)
    10.1. The principles
    10.2. The basic structure of an image map script
    10.3. Specifying targets for image map plots
    10.3.1. Creating popup-windows as targets for CSIM
    10.4. Using StrokeCSIM()
    10.4.1. Optional argument to StrokeCSIM()
    10.4.2. How does StrokeCSIM() work?
    10.4.3. Image maps and the cache system
    10.5. Getting hold of the image map
    10.6. Mixing several CSIM images in an HTML page with text
    10.6.1. Adding one CSIM graph in a HTML page
    10.6.2. Adding multiple CSIM graphs in a HTML page
    11. NuSphere PHP accelerator
    11.1. Introduction and purpose
    11.2. Installing PhpExpress
    + + + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/pt03.html b/Societes/ric/jpgraph/docs/chunkhtml/pt03.html new file mode 100755 index 00000000..fc046072 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/pt03.html @@ -0,0 +1,12 @@ +Part III. Common features

    Part III. Common features

    + +
    +

    This part will describe the common features for all graphs as well as explaining the + structure of a typical graph script. After reading through this part the user should + have a basic understanding how to create simple graph scripts and understand what core + settings and naming conventions are used.

    +

    Table of Contents

    12. Commonalities for all graphs
    12.1. Common objects for cartesian graphs (x-, y-graphs)
    12.2. Common object for Pie Graphs
    13. Getting hold of the data to be displayed
    13.1. Static data
    13.2. Reading data from a file
    13.3. Sending data to a graph script with URI arguments (GET and POST)
    13.3.1. Using GET arguments
    13.3.2. Using a POST request
    13.4. Reading data from a database
    13.5. Reading binary data from a file
    13.6. Different types of NULL data handling
    13.7. Troubleshooting input data
    14. Common features for all Cartesian (x,y) graph types
    14.1. The definition of linear graphs
    14.1.1. Axis and coordinate systems
    14.1.2. Adjusting the axis look and feel
    14.1.3. Adding grid lines in the plot
    14.1.4. Predefined scientific axis setups
    14.1.5. Other possible ways to position the axis
    14.2. Specifying and formatting the overall displayed graph
    14.2.1. Adjusting size, margins and frame
    14.2.2. Adding drop shadow to the graph
    14.2.3. Formatting and specifying the titles of the graph
    14.2.4. Specifying the image format to use
    14.2.5. Generic line formatting
    14.2.6. Adding a footer to the graph
    14.2.7. Adding timing of graphs
    14.3. Adjusting the look and feel of the plot area
    14.3.1. Plot area and margin areas
    14.3.2. Clipping to the plot area
    14.4. Adjusting the position and layout of the legend
    14.5. Other formatting options of the axis
    14.5.1. Adjusting and positioning titles on the axis
    14.5.2. Adjusting the font and color of the title
    14.6. Using multiple y-axis
    14.6.1. Adding additional y-axis
    14.6.2. Using CSIM together with multiple y-axis
    14.6.3. Restrictions with multiple y-axis
    14.7. Understanding and using different scales on the axis
    14.7.1. Different scale types
    14.7.2. Manual vs automatic scale handling
    14.7.3. Major and minor ticks
    14.8. Adjusting the appearance of the scale labels
    14.8.1. Adjusting the position
    14.8.2. Adjusting font and color
    14.8.3. Adjusting the background of the labels
    14.8.4. Hiding and rotating labels
    14.8.5. Fine tuning the automatic scales
    14.8.6. Manually altering the appearance of tick marks
    14.8.7. Manually specifying scale labels
    14.8.8. Emphasize of parts of the scale
    14.8.9. Adding static lines for specific scale values in the graph
    14.9. Using a logarithmic scale
    14.10. Using a date/time scale
    14.10.1. Specifying the input data
    14.10.2. Adjusting the start and end date alignment
    14.10.3. Manually adjusting the ticks
    14.10.4. Adjusting the label format
    14.10.5. Adjusting the automatic density of date labels
    14.10.6. Creating a date/time scale with a manual label call-back
    14.10.7. Using the "DateScaleUtils" class to make manual date scale
    14.10.8. When to use manual and when to use automatic date scale?
    14.11. Adding shearing image transformation to the graph
    14.12. Rotating graphs
    14.12.1. Free rotation of the plot area
    14.12.2. Rotating the plot area 90 degree
    14.13. Using anti-aliasing in the graph generation
    14.13.1. Anti-aliasing for line drawing graphs
    14.13.2. Anti-aliasing in pie graphs
    14.13.3. Anti-aliasing in Windrose plots
    14.13.4. Anti-aliasing for Contour plots
    14.14. Adding icons (and small images) to the graph
    14.15. Adding images and country flags to the background of the graph
    14.15.1. Using country flags as backgrounds
    14.16. Using background gradients
    14.16.1. Generating gradient background off-line
    14.17. Adding arbitrary texts to the graph
    + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/pt04.html b/Societes/ric/jpgraph/docs/chunkhtml/pt04.html new file mode 100755 index 00000000..abb2939d --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/pt04.html @@ -0,0 +1,7 @@ +Part IV. Creating linear and non-linear graphs

    Part IV. Creating linear and non-linear graphs

    Table of Contents

    15. Different types of linear (cartesian) graph types
    15.1. Basic Line and area graphs
    15.1.1. Creating a line graph
    15.1.2. Automatic interpolation of unknown data
    15.1.3. Adding marks to the plot (a.k.a. plot marks)
    15.1.4. Displaying the values at the data points
    15.1.5. Adding several data series to the same graph
    15.1.6. Adding a second Y-axis
    15.1.7. Adding a legend box to the graph
    15.1.8. Changing the style of the line plot - using the step-style
    15.1.9. Optimizing line plot using "fast drawing"
    15.1.10. Creating a filled line graphs (a.k.a. area plots)
    15.1.11. Partially filled area graphs
    15.1.12. Filled lines with NULL values
    15.1.13. Accumulated line graphs
    15.1.14. Accumulated line graphs with given X-labels
    15.1.15. Constructing smooth line plots with Cubic Splines
    15.2. Bar graphs
    15.2.1. Accumulated bar plots
    15.2.2. Grouped bar plots
    15.2.3. Grouped accumulated bar graphs
    15.2.4. Horizontal bar graphs
    15.2.5. Adjusting the appearance of bar graphs
    15.3. Error plot graphs
    15.3.1. Line error plots
    15.4. Stock graphs
    15.4.1. Stock plot variant: Boxplot
    15.4.2. Image maps for Box and Stock charts
    15.5. Scatter graphs
    15.5.1. Combining marks with a line
    15.5.2. Creating impulse (or stem) - plots
    15.5.3. Field plots
    15.5.4. Balloon plots
    15.5.5. Creating Geo-maps
    15.6. Contour graphs
    15.6.1. Input data for contour graphs
    15.6.2. Creating a contour graph
    15.6.3. Adjusting the color and number of isobar lines
    15.6.4. Understanding mesh interpolation
    15.7. Combining several different plot types in the same graph
    15.8. Creating several graphs in the same image
    15.8.1. Creating a combined graph
    15.8.2. Adding background images
    15.8.3. Creating rotated combined graphs
    15.8.4. Some caveats when using MGraph
    16. Non-Linear graph types
    16.1. Pie graphs
    16.1.1. Hare/Niemeyer Integer compensation for Pie Plots
    16.1.2. 2D-Pie plots
    16.1.3. 3D-Pie plots
    16.1.4. Ring plots
    16.1.5. Exploding pie slices
    16.1.6. Specifying and adjusting labels on pie plots
    16.1.7. Adding drop shadows to the slices
    16.1.8. Adding background images to Pie graphs
    16.1.9. Specifying slice colors and using themes
    16.2. Radar graphs
    16.2.1. Adding radar plots to a radar graph
    16.2.2. Adding plot-marks to radar plots
    16.2.3. Client Side Image maps
    16.2.4. Adjusting the overall properties of the radar graph
    16.2.5. Adjusting the axis formatting
    16.2.6. Adjusting grid lines for the radar graph
    16.2.7. Using a logarithmic scale
    16.2.8. Enabling anti-aliasing for radar graphs
    16.2.9. A final example
    16.3. Polar graphs
    16.3.1. Rotating the polar graph
    16.3.2. Changing the angle direction
    16.3.3. Adding polar plots to a polar graph
    16.3.4. Adding plot-marks to polar plots
    16.3.5. Client Side Image maps
    16.3.6. Adjusting the radius scale
    16.3.7. Adjusting the grid lines
    16.3.8. Adjusting the labels
    16.4. Gantt charts
    16.4.1. The structure of a Gantt chart
    16.4.2. Creating a Gantt graph
    16.4.3. Adjusting the scale headers
    16.4.4. Adding gantt objects to the chart
    16.4.5. Additional formatting for activity bars (Gantt bars)
    16.4.6. Adding visual indication of constraints between gantt objects
    16.4.7. Grouping activities
    16.4.8. Simplifying creation of basic Gantt charts
    16.4.9. Using multiple title columns
    16.4.10. Built-in icons for use in activity titles
    16.4.11. More general Gantt formatting
    16.4.12. Localizing the Gantt chart scale
    16.4.13. CSIM Support in Gantt charts
    16.4.14. Some final Gantt graph examples
    17. Additional graph types
    17.1. LED bill boards
    17.1.1. Cyrillic character support
    17.2. Captcha generation
    17.2.1. Generating Captchas
    17.3. Canvas graphs
    17.3.1. Creating a simple canvas
    17.3.2. Adding lines and rectangles to a canvas
    17.3.3. Using a canvas scale together with the shape class
    18. Miscellaneous formatting and tools
    18.1. Linear regression analysis
    + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/pt05.html b/Societes/ric/jpgraph/docs/chunkhtml/pt05.html new file mode 100755 index 00000000..2c7f1075 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/pt05.html @@ -0,0 +1,8 @@ +Part V. Additional graph types available in the professional version

    Part V. Additional graph types available in the professional version

    Table of Contents

    19. Graphical tables
    19.1. Introduction
    19.2. Constructing tables
    19.2.1. Basic tables
    19.2.2. Merging cells
    19.2.3. Font adjustment
    19.2.4. Color adjustment
    19.2.5. Adjusting table and cell sizes
    19.2.6. Fine tuning cell alignment and cell padding
    19.2.7. Adjusting border and grid lines
    19.2.8. Specific number formatting
    19.2.9. Using images and country flags in the table
    19.3. CSIM Table support
    19.4. Table API Overview
    19.5. Examples
    19.5.1. Example 1
    19.5.2. Example 2
    19.5.3. Example 3
    19.5.4. Example 4
    19.5.5. Example 5
    19.5.6. Example 6
    19.6. Case study: Adding a table to a bar graph
    20. Odometer
    20.1. Introduction
    20.1.1. Features
    20.2. Creating and formatting basic odometer graphs
    20.2.1. A basic odometer
    20.2.2. Half and Full Odometers
    20.2.3. Adding titles and captions
    20.2.4. Adjusting colors
    20.2.5. Changing indicator needle style
    20.2.6. Adding drop shadows
    20.2.7. Changing sizes and margins
    20.2.8. Adding color indications in the scale
    20.2.9. Changing size of the non-colored center area
    20.2.10. Using multiple indicator needles in one odometer
    20.2.11. Adding an odometer legend (label)
    20.2.12. Adjusting the width and color of the odometer frame (border)
    20.3. Working with the odometer scale
    20.3.1. Adjusting the scale, ticks and labels
    20.3.2. Adjusting scale label format
    20.3.3. Adjusting the start and stop angle for the scale
    20.4. Adding and positioning multiple odometers to a graph
    20.4.1. Manual positioning
    20.4.2. Using layout classes
    20.5. Adding icon and text objects to the graph
    20.5.1. Adding a text object
    20.5.2. Adding icons to the graph
    20.5.3. Adding background images
    21. Windrose
    21.1. Introduction
    21.1.1. Features
    21.1.2. Different types of Windrose plots
    21.2. Creating and formatting basic Windrose graphs
    21.2.1. Specifying the windrose scale
    21.2.2. Specifying direction labels
    21.3. Formatting the plot
    21.3.1. Positioning the plot
    21.3.2. Specifying the size of the plot
    21.3.3. Specifying the size of the Zero-circle (middle circle)
    21.3.4. Formatting the plot legend
    21.3.5. Adjusting the grid colors
    21.3.6. Adjusting the weight of the grid circles
    21.3.7. Adding a box around the plot
    21.3.8. Adjusting the size of the center zero circle
    21.3.9. Localizing the default names for the compass directions
    21.3.10. Adjusting the formatting of the windrose plot legs
    21.4. Some more advanced formatting
    21.4.1. Turning off Anti-aliasing
    21.4.2. More on formatting scale-labels
    21.4.3. Formatting the legend
    21.4.4. Highlighting specific compass directions
    21.4.5. Including a graph in a PDF
    21.4.6. Adding a background image
    21.4.7. Adjusting the interpretation for ordinal keys in data
    21.5. Adding icon and text objects to the graph
    21.5.1. Adding a text object
    21.5.2. Adding icons to the graph
    21.6. Using layout classes to position Windrose plots
    21.7. Example section
    21.7.1. Example 1
    21.7.2. Example 2
    21.7.3. Example 3
    21.7.4. Example 4
    21.7.5. Example 5
    21.7.6. Example 6
    21.7.7. Example 7
    21.7.8. Example 8
    21.7.9. Example 9
    21.7.10. Example 10
    22. Matrix graphs
    22.1. Introduction
    22.1.1. Features of the matrix plots
    22.2. Creating and formatting a basic matrix graph
    22.3. Mesh interpolating of input data
    22.4. Formatting the matrix plot
    22.4.1. Color maps
    22.4.2. Changing the module type (rectangle vs. circle)
    22.4.3. Adjusting the alpha blending of the plots
    22.4.4. Specifying the size
    22.4.5. Specifying the position of the plot on the graph
    22.4.6. Adjusting the legend
    22.4.7. Adding row and column legends
    22.5. Adding icon and text objects to the graph
    22.5.1. Adding a text object
    22.5.2. Adding icons to the graph
    22.5.3. Adding background images
    22.6. Adding marker lines to the matrix plot
    22.7. Using layout classes to position matrix plots
    22.8. Built in color maps
    22.8.1. Standard maps
    22.8.2. Normalized center
    22.8.3. Continues map
    22.9. Using CSIM with matrix plots
    22.10. Matrix graph examples
    22.10.1. Example 1
    22.10.2. Example 2
    22.10.3. Example 3
    22.10.4. Example 4
    23. Filled contour graphs
    23.1. Filled Contour graphs
    23.1.1. Creating a filled contour graph
    23.1.2. Enabling and disabling contour lines
    23.1.3. Specifying a filled contour
    23.1.4. Adjusting the labels in the contour
    23.1.5. Selecting the adaptive method to use
    + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/pt06.html b/Societes/ric/jpgraph/docs/chunkhtml/pt06.html new file mode 100755 index 00000000..88867e42 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/pt06.html @@ -0,0 +1,15 @@ +Part VI. Barcodes

    Part VI. Barcodes

    + +
    +

    For a good historic overview of barcodes and there usage we refer to Wikipedia http://en.wikipedia.org/wiki/Barcode

    +

    Table of Contents

    24. Linear Barcodes (One Dimensional Barcodes)
    24.1. Introduction
    24.2. How does linear barcodes work?
    24.3. Barcode symbologies
    24.3.1. Numerical only barcode symbologies
    24.3.2. Alphanumerical barcode symbologies
    24.3.3. Which symbology should be used?
    24.4. Features
    24.4.1. Sample application
    24.5. Creating barcodes - quick start
    24.6. Error handling
    24.7. Generating barcodes on the command line
    24.8. Format options for barcodes
    24.8.1. Adjusting the encodation process
    24.8.2. Selecting output format
    24.8.3. Writing barcodes to a file
    24.8.4. Hiding the human readable text
    24.8.5. Adjusting the module width
    24.8.6. Setting vertical or horizontal layout
    24.8.7. Adjusting height of bar code
    24.8.8. Scaling of bar codes
    24.8.9. Add frame around bar code
    24.8.10. Examples of adjusting the output
    24.9. Short description of supported symbologies
    24.9.1. UPC A
    24.9.2. UPC E
    24.9.3. EAN 8
    24.9.4. EAN 13
    24.9.5. EAN 128
    24.9.6. Industrial 2 of 5
    24.9.7. Interleaved 2 of 5
    24.9.8. CODE 11 (USD 8)
    24.9.9. CODE 39
    24.9.10. CODE 39 Extended
    24.9.11. CODE 128
    24.9.12. CODABAR
    24.9.13. Bookland (ISBN)
    25. PDF417 (2D-Barcode)
    25.1. Principle of PDF417 Barcodes
    25.1.1. PDF417 standard
    25.1.2. Data capacity
    25.1.3. Structure of PDF417 barcodes
    25.2. Creating barcodes
    25.2.1. Introduction
    25.3. Creating barcodes
    25.4. Specifying the PDF417 parameters
    25.4.1. Specifying encoding and input data
    25.4.2. Encoder option: Adjusting the number of data columns
    25.4.3. Encoder option: Adjusting the error level
    25.4.4. Truncated PDF417
    25.5. Adjusting the output
    25.5.1. Output format
    25.5.2. Summary of user settings for the backend
    25.6. A template to create barcodes
    25.7. Method reference
    25.7.1. Encoder methods
    25.7.2. Common backend methods
    25.7.3. Image backend methods
    25.7.4. Postscript backend methods
    25.8. Example scripts
    25.8.1. Showing human readable text
    25.8.2. Altering colors
    25.8.3. Creating postscript output
    25.8.4. Manually selecting compaction schema
    26. Datamatrix (2D-Barcode)
    26.1. Principle of Datamatrix Barcodes
    26.1.1. Summary of features offered in the library
    26.1.2. Limitation of the JpGraph Datamatrix implementation
    26.1.3. Datamatrix standard
    26.1.4. Structure of Data Matrix codes
    26.1.5. Encodation efficiency
    26.1.6. More on ECC Datamatrix subsets
    26.1.7. Symbology Data capacity
    26.2. Creating barcodes
    26.2.1. Getting started
    26.2.2. Error handling
    26.2.3. Encodation options
    26.2.4. Processing special input characters
    26.2.5. Creating different backends
    26.2.6. Generic backend methods
    26.2.7. Image backend methods
    26.2.8. Postscript backend format options
    26.2.9. A template to create barcodes
    26.2.10. Sample application
    26.3. Example script
    26.3.1. Example 1 - Setting the shape
    26.3.2. Example 2 - Writing to a file
    26.3.3. Example 3 - Creating postscript output
    26.3.4. Example 4 - Changing background color
    27. QR (2D-Barcode)
    27.1. Principle of QR Barcodes
    27.1.1. Summary of library features
    27.1.2. Limitation in the JpGraph QR implementation
    27.1.3. QR Standard
    27.1.4. Structure and capacity of QR barcodes
    27.1.5. QR versions and symbol size
    27.1.6. Error correction level
    27.1.7. Comparing the visual output with other QR-generating software
    27.2. Creating barcodes
    27.2.1. Getting started
    27.2.2. Error handling
    27.2.3. Creating an encoder
    27.2.4. Encodation of input data options
    27.2.5. Reading input data from a file
    27.2.6. Creating different backends
    27.2.7. Generic backend methods
    27.2.8. Image backend methods
    27.2.9. Postscript backend methods
    27.2.10. A template to create barcodes
    27.2.11. Sample application
    27.3. Example scripts
    27.3.1. Example 1 - Store QR code to file
    27.3.2. Example 2 - Specified error correction level
    27.3.3. Example 3 - Manual specified encoding
    27.3.4. Example 4 - JPEG image format
    27.3.5. Example 5 - Multiple manual encoding
    27.3.6. Example 6 - Reading data from file
    27.3.7. Example 7 - Adjusting colors
    27.3.8. Example 8 - Setting error correction level
    27.3.9. Example 9 - Generating ASCII output
    + + + + + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/pt07.html b/Societes/ric/jpgraph/docs/chunkhtml/pt07.html new file mode 100755 index 00000000..8e8e5345 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/pt07.html @@ -0,0 +1,14 @@ +Part VII. Theme Class

    Part VII. Theme Class

    + +
    +

    It is easy to create great graphs using the theme class. +Themes automatically apply settings to every part of the graph; including the background, legend and design. The AquaTheme for example uses a base color of blue. +It is also possible to create entirely new themes by customizing the original designs. +

    +
    + + + + + +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/pt08.html b/Societes/ric/jpgraph/docs/chunkhtml/pt08.html new file mode 100755 index 00000000..ec1b128c --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/pt08.html @@ -0,0 +1,7 @@ +Part VIII. Case studies diff --git a/Societes/ric/jpgraph/docs/chunkhtml/pt09.html b/Societes/ric/jpgraph/docs/chunkhtml/pt09.html new file mode 100755 index 00000000..8ce55c45 --- /dev/null +++ b/Societes/ric/jpgraph/docs/chunkhtml/pt09.html @@ -0,0 +1,16 @@ +Part IX. Appendices

    Part IX. Appendices

    Table of Contents

    A. How this manual was produced
    B. JpGraph Professional License
    B.1. Single License
    B.2. Bulk (Re-seller license)
    C. FAQ
    D. Named color list
    E. Available plot marks
    E.1. Built in basic plot marks
    E.2. Built in image plot marks
    E.2.1. Image plot mark: Balls
    E.2.2. Image plot mark: Squares
    E.2.3. Image plot mark: Diamonds
    E.2.4. Image plot mark: Stars
    E.2.5. Image plot mark: Bevels
    E.2.6. Image plot mark: Pushpins
    F. List of all country flags
    G. List of files included in the library
    H. Error messages
    H.1. Core error messages
    H.2. QR 2D Barcode error messages
    H.3. Datamatrix 2D barcode error messages
    I. Compiling PHP
    I.1. Compiling PHP4
    I.1.1. Client version
    I.1.2. Apache module
    I.1.3. CGI extension
    I.2. Compiling PHP5
    I.2.1. Client version
    I.2.2. Apache module
    I.2.3. CGI extension
    J. Setting up PHP5 in parallel with PHP4 in SuSE 10.1
    J.1. Configuration files and directories for Apache2 in SuSE 10.1
    J.2. Making sure you have the correct Apache2 setup
    J.3. Approaches to running multiple PHP versions
    J.4. Outline of the remainder of the chapter
    J.5. Part I - Installing PHP4
    J.5.1. Step one; Compiling PHP4 as a module for Apache2
    J.5.2. Step two; Enable the PHP4 module in the Apache2 configuration
    J.6. Part II - Creating a virtual host
    J.6.1. Step 1; Adding an alias IP-address to Your server
    J.6.2. Step 2; Creating different document and cgi roots
    J.6.3. Step 3; Configure Apache with a virtual host
    J.7. Part III - Installing PHP5
    J.8. Part IV - Verifying the setup
    J.8.1. Troubleshooting
    K. Why it is not possible to add a SVG backend to JpGraph
    K.1. Background
    K.2. Summary of findings
    K.3. Detailing the issue
    K.3.1. The core problem
    K.3.2. Why is this a problem ?
    K.3.3. Possible workarounds
    K.3.4. What would be required ?
    K.3.5. DOM scripting and GetBBox()
    K.3.6. A final comment
    L. The JpGraph configuration file
    + + + + + + + + + + + + + + <xi:include></xi:include> +
    diff --git a/Societes/ric/jpgraph/docs/chunkhtml/text-document.png b/Societes/ric/jpgraph/docs/chunkhtml/text-document.png new file mode 100755 index 00000000..a4a3522b Binary files /dev/null and b/Societes/ric/jpgraph/docs/chunkhtml/text-document.png differ diff --git a/Societes/ric/jpgraph/docs/classref/AccBarPlot.html b/Societes/ric/jpgraph/docs/classref/AccBarPlot.html new file mode 100755 index 00000000..27323e2d --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/AccBarPlot.html @@ -0,0 +1,88 @@ +
    Class AccBarPlot Extends BarPlot
    +(Defined in: jpgraph_bar.php : 706)
     
     AccBarPlot  BarPlot 
     Max() 
    Min() 
    __construct() 
    +
     RotatePattern() 
    SetAbsWidth() 
    SetAlign() 
    SetFillColor() 
    SetFillGradient() 
    SetNoFill() 
    SetPattern() 
    SetShadow() 
    SetValuePos() 
    SetWidth() 
    SetYBase() 
    SetYMin() 
    __construct() 
    +
     

    Class usage and Overview
    Accumulated bar plot.
    +Used to create bars where the data series are stacked on top of each other. +

    +Features: +

      +
    1. Can be combined with Image maps for each series. +
    2. Values for each series can be displayed when the pointer is hovering over the corresponding part of the bar +
    3. Unlimited number of series +
    +

    +Examples: +

      +
    • [TBC] +

      +

    See also related classes:
    BarPlot, GroupBarPlot and AccLinePlot

     


    Class Methods

    +

     

    + +Return the maximum value of the bars

    +
    + +

    Description:
    Return the maximum value of the bars 
    + +

    Example:

    +list($xmin,$ymin) = $accbar->Max(); + +

    +

    +

     

    + +Return minimum data values for the bars

    +
    + +

    Description:
    Return minimum data values for the bars 
    + +

    Example:

    +list($xmin,$ymin) = $accbar->Min(); + +

    +

    +

     

    + +Construct a new accumulated bar graph

    + + + + +
    ArgumentDefaultDescription
    +$plots + + + Array of bar plots
    + +

    Description:
    Create a new accumulated bar plot based on the given array of ordinary bar plots. 
    +  
    See also:
    +

    Example:

    +$b1 = new BarPlot($y1data);
    $b2 = new BarPlot($y2data);
    $accbar = new AccBarPlot(array($b1,$b2));

    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/AccLinePlot.html b/Societes/ric/jpgraph/docs/classref/AccLinePlot.html new file mode 100755 index 00000000..a47c460c --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/AccLinePlot.html @@ -0,0 +1,100 @@ +


    Class AccLinePlot Extends Plot
    +(Defined in: jpgraph_line.php : 450)
     
     AccLinePlot  Plot 
     Max() 
    Min() 
    SetInterpolateMode() 
    __construct() 
    +
     HideLegend() 
    PreScaleSetup() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetLegend() 
    SetLineWeight() 
    +
     

    Class usage and Overview
    Accumulated bar plot.
    +Used to create a line plot where each individual data point is the sum of the individual series data points. +

    +Features: +

      +
    1. Unlimited number of series +
    +

      +

    See also related classes:
    AccBarPlot and LinePlot

     


    Class Methods

    +

     

    + +Return the max value of data points in plot.

    +
    + +

    Description:
    Takes into account all series and returns the maximum Y and X values for all the data series. Used internally to determine the autoscaling. 
    +  
    See also:
    +

    Example:

    +list($xmax,$ymax) = $acclineplot->Max(); + +

    +

    +

     

    + +Return the min value of all data points in plot.

    +
    + +

    Description:
    Takes into account all series and returns the minimum Y and X value. Used internally to determine autoscaling. 
    +  
    See also:
    +

    Example:

    +list($xmin,$ymin) = $acclineplot->Min()
    +
    +

    +

    +

     

    + +Enable interpolate mode

    + + + + +
    ArgumentDefaultDescription
    +$aIntMode + + + TRUE=Enable interpolation
    + +

    Description:
    When plotting accumulated line plots which have NULL values as data (i.e. '-') they will distort the accumulated plot since they will in effect be interpretated as having value 0. This means that there will be a drop in the plot. The only way to avoid this is to calculate the intermediate value. + +This can be achieved by calculating a linear interpoaltion for the missing value(s). Calling this method will replace all '-' values with an interpolated value. + 
    + +

    Example:

    +$accline->SetInterpolateMode() + +

    +

    +

     

    + +Constructor

    + + + + +
    ArgumentDefaultDescription
    +$plots + + + Array of line plots to use
    + +

    Description:
    Creates a new accumulated line plot from a number of line plots. 
    +  
    See also:
    +

    Example:

    +$line1 = new LinePlot($datay1);
    $line2 = new LinePlot($datay2);
    $aline = array($line1,$line2);
    $acclineplot = new AccLinePlot($aline); +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/AntiSpam.html b/Societes/ric/jpgraph/docs/classref/AntiSpam.html new file mode 100755 index 00000000..6cd0cb68 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/AntiSpam.html @@ -0,0 +1,96 @@ +


    Class AntiSpam
    +(Defined in: jpgraph_antispam.php : 546)
     
     AntiSpam 
     Rand() 
    Set() 
    Stroke() 
    __construct() 
    +
     

    Class usage and Overview
    This module is used to create AntiSpam challenges that can be used to prevent automatic signup by robots on WEB-pages.

      +


    Class Methods

    +

     

    + +Generate a random spam challenge string

    + + + + +
    ArgumentDefaultDescription
    +$aLen + + + Sets the length of the generated string
    + +

    Description:
    Instead of specifying the string manually that should be used as a challenge the string can be automatically generated. This is done witha call to the Rand() method.  
    + +

    Example:

    +$antispam = new AntiSpam();
    $rval $antispam->Rand();
    ...
    +
    +

    +

    +

     

    + +Set the spam challenge string

    + + + + +
    ArgumentDefaultDescription
    +$aData + + + Spam challenge
    + +

    Description:
    This is an alternative way of specifying the AntiSpam string. This can also be specified in the initial creation of the ANtiSpam object ro be automatically generated with a call to the Rand() method 
    +  
    See also:
    +

    Example:

    +$antispam = new AntiSpam();
    ...
    $antispam->Set($mySpamVal); +
    +

    +

    +

     

    + +Send the antispam image back to the browser

    +
    + +

    Description:
    This sends the antispam image back to the browser or to an optional file named as the first and only argument. 
    +  
    See also:
    +

    Example:

    +$antispam = new AntiSpam();
    $rval $antispam->Rand();
    ...
    $antispam->Stroke() +
    +

    +

    +

     

    + +Create a new ANtiSpam challenge image

    + + + + +
    ArgumentDefaultDescription
    +$aData + + + +'' + +Data to be displayed
    + +

    Description:
    This method creates a new instance of the AntiSpam challenge. When the anti-spam imga eis created it is possible to directly use a supplied data string that should be displayed. + +The data can also be added afterwards with a call to Set() 
    +  
    See also:
    +

    Example:

    +$spam = new AntiSpam(); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Axis.html b/Societes/ric/jpgraph/docs/classref/Axis.html new file mode 100755 index 00000000..d14de5bb --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Axis.html @@ -0,0 +1,133 @@ +


    Class Axis Extends AxisPrototype
    +(Defined in: jpgraph.php : 3661)
     
     Axis  AxisPrototype 
     Stroke() 
    StrokeLabels() 
    __construct() 
    +
     Hide() 
    HideFirstLastLabel() 
    HideFirstTickLabel() 
    HideLabels() 
    HideLastTickLabel() 
    HideLine() 
    HideTicks() 
    HideZeroLabel() 
    SetColor() 
    SetFont() 
    SetLabelAlign() 
    SetLabelAngle() 
    SetLabelFormat() 
    SetLabelFormatCallback() 
    SetLabelFormatString() 
    SetLabelMargin() 
    SetLabelSide() 
    SetMajTickPositions() 
    SetPos() 
    SetPosAbsDelta() 
    SetTextLabelInterval() 
    SetTextTickInterval() 
    SetTickLabels() 
    SetTickPositions() 
    SetTickSide() 
    SetTickSize() 
    SetTitle() 
    SetTitleMargin() 
    SetTitleSide() 
    SetWeight() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +// Stroke the axis.

    + + + + + + +
    ArgumentDefaultDescription
    +$aOtherAxisScale + + + No description available
    +$aStrokeLabels + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +//---------------// PRIVATE METHODS// Draw all the tick labels on major tick marks

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aPos + + + No description available
    +$aMinor + + + +false + +No description available
    +$aAbsLabel + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +//===================================================// CLASS Axis// Description: Defines X and Y axis. Notes that at the// moment the code is not really good since the axis on// several occasion must know wheter it's an X or Y axis.// This was a design d

    + + + + + + + + +
    ArgumentDefaultDescription
    +$img + + + No description available
    +$aScale + + + No description available
    +$color + + + +'black' + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/AxisPrototype.html b/Societes/ric/jpgraph/docs/classref/AxisPrototype.html new file mode 100755 index 00000000..b175821f --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/AxisPrototype.html @@ -0,0 +1,875 @@ +


    +(Defined in: jpgraph.php : 3441)
     
     AxisPrototype 
     Hide() 
    HideFirstLastLabel() 
    HideFirstTickLabel() 
    HideLabels() 
    HideLastTickLabel() 
    HideLine() 
    HideTicks() 
    HideZeroLabel() 
    SetColor() 
    SetFont() 
    SetLabelAlign() 
    SetLabelAngle() 
    SetLabelFormat() 
    SetLabelFormatCallback() 
    SetLabelFormatString() 
    SetLabelMargin() 
    SetLabelSide() 
    SetMajTickPositions() 
    SetPos() 
    SetPosAbsDelta() 
    SetTextLabelInterval() 
    SetTextTickInterval() 
    SetTickLabels() 
    SetTickPositions() 
    SetTickSide() 
    SetTickSize() 
    SetTitle() 
    SetTitleMargin() 
    SetTitleSide() 
    SetWeight() 
    __construct() 
    +
     

    Class usage and Overview
    The Axis class represents either the X or Y axis in a graph. This class is noramlly accessed through the instance variables graph->xaxis, $graph->yaxis, or $graph->y2axis + +Public properties: + + + + + + + +
    Name Type Description
    title Text Axis title text
    scale LinearScale/LogScale Scale used for axis

      +

    See also related classes:
    LinearScale, LogScale and Text

     


    Class Methods

    +

     

    + +Hide the axis

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + + +true + +Flag.
    + +

    Description:
    This method is used to hide the axis. 
    + +

    Example:

    +$graph->xaxis->Hide(); // Hide xaxis
    $graph->yaxis->Hide(); // Hide y-axis
    +
    +

    +

    +

     

    + +Hide the first and last label on the scale.

    +
    + +

    Description:
    Hide the first and last label on the scale. Usefull whe you are using Axis Type of AXSTYLE_BOXIN or AXSTYLE_BOXOUT to avoid the labels to owerwrite a box around the plot. 
    +  
    See also:
    +

    Example:

    +//...
    $graph->SetAxisStyle(AXSTYLE_BOXOUT);
    $graph->SetBox();
    $graph->xaxis->HideFirstLastLabel();
    $graph->yaxis->HideFirstLastLabel();
    //...
    +
    +

    +

    +

     

    + +Hide the first label

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + + +false + +Flag.
    + +

    Description:
    Calling this method will hide the first label on the axis. This is usefull when the y axis have negative values and a value on the x-axis would be partially obscured by the values on the y-axis. +This gets automatically called in this case. +

    +This is probably of less use for the end user of the library. 
    + +

    Example:

    +$graph->xaxis->HideFirstTicklabel() + +

    +

    +

     

    + +Hide all labels on the axis

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + + +true + +true=Hide all labels
    + +

    Description:
    Hide all labels on the axis but keep tick marks and axis line. 
    +  
    See also:
    +

    Example:

    +$graph->xaxis->HideLabels() + +

    +

    +

     

    + +Hide the last tick label on the axis.

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + + +false + +Flag
    + +

    Description:
    The mirror of HideFirstTickLabel() 
    +  
    See also:
    +

    Example:

    +$graph->xaxis->HideLastTickLabel(); + +

    +

    +

     

    + +// Hide the actual axis-line, but still print the labels

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + + +true + +True=Hide axis line
    + +

    Description:
    Hide the line of the axis. This only hides the axis-line but will keep the tick marks and labels. If you want to hide the tick marks you should call HideTicks(). To hide the axis completely, line, ticks and labels use Hide(). 
    +  
    See also:
    +

    Example:

    +// Hide line and tick marks
    $graph->yaxis->HideLine();
    $graph->yaxis->HideTicks();
    +
    +

    +

    +

     

    + +Hide minor or major tick marks.

    + + + + + + +
    ArgumentDefaultDescription
    +$aHideMinor + + + +true + +True = Hide minor tick marks
    +$aHideMajor + + + +true + +True = Hide major tick marks
    + +

    Description:
    Hide major or minor tick makrs on the axis. 
    + +

    Example:

    +// Only display major tick marks
    $graph->yaxis->HideTicks(true,false); +
    +

    +

    +

     

    + +Hide zero label

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + +true + +Flag.
    + +

    Description:
    Hide the zero label. Usefull if the axis cross at zero and the label would owerwrite the other axis scale. + 
    +  
    See also:
    +

    Example:

    +$graph->yaxis->HideZeroLabel();
    +
    +

    +

    +

     

    + +Specify color of Axis and it's labels

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color for axis
    +$aLabelColor + + + +false + +Color for labels on axis
    + +

    Description:
    Specifies the color of the axis line as well as the labels on the axis. If the label color is not specified it will be the same as the axis color. 
    + +

    Example:

    +$graph->xaxis->SetColor('blue');
    $graph->yaxis->SetColor('blue','black'); +
    +

    +

    +

     

    + +Set the font for labels on the axis

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFamily + + + Font family
    +$aStyle + + + +FS_NORMAL + +Font style
    +$aSize + + + +10 + +Font size
    + +

    Description:
    Specify font for labels on axis. Please note that if you need labels to be rotated an angle other than 0 or 90 you must use TTF fonts and not the builtin fonts (i.e. FF_FONT1, FF_FONT2, FF_FONT3) + + 
    +  
    See also:
    +

    Example:

    +$graph->xaxis->SetFont(FF_ARIAL); + +

    +

    +

     

    + +Specify horizontal and vertical alignment for labels

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aHAlign + + + Horizontal alignment
    +$aVAlign + + + +'top' + +Vertical alignment
    +$aParagraphAlign + + + +'left' + +paragraph align for multi-line texts
    + +

    Description:
    Specifies the horizontal and vertical alignment for the labels on the axis. The alignment specifies how the labels is adjusted relative to the tickmark. +

    +Note that this is handled automatically but on some occasion there is a genuine need to override the automtic values. For example if the graph is rotated it might be necessary to adjust the alignment to get a visual acceptable label alignment. +

    +Possible horizontal alignment are: 'left', 'center', 'right'
    +Possible vertical alignment are: 'top', 'center', 'bottom'
    +

    +See horizbarex1.php, horizbarex2.php for real life examples. + 
    + +

    Example:

    +$graph->xaxis->SetLabelAlign('right','center'); + +

    +

    +

     

    + +Specify the angle for the tick labels

    + + + + +
    ArgumentDefaultDescription
    +$aAngle + + + Angle in degrees
    + +

    Description:
    Specify the rotation angle for the labels on the axis. +

    +Note:
    +If you want to use any angles other than 0 and 90 degrees you must make sure that the labels are using TTF fonts. Internal fonts only support vertical and horizontal angles. 
    +  

    See also:
    +

    Example:

    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,11);
    $graph->xaxis->SetLabelAngle(45); // 45 degrees angle +
    +

    +

    +

     

    + +Specify printf() format string for labels

    + + + + +
    ArgumentDefaultDescription
    +$aFormStr + + + Format string
    + +

    Description:
    Specify a printf() format string for the axis labels. if you need more advanced control of the formatting you can install a label format callbacl routine with Axis::SetLabelFormatCallback() 
    +  
    See also:
    +

    Example:

    +$graph->xaxis->SetLabelFormat('%0.1f%%'); + +

    +

    +

     

    + +Specify callback function for labels on axis

    + + + + +
    ArgumentDefaultDescription
    +$aFuncName + + + Callback function
    + +

    Description:
    This can be used when more advance formatting of the axis labels are required. For example this could be used to format numbers with space or commas betwen the '1000. +

    +The callback routine is called with one argument, the current number to be displayed and should return the number to be displayed. +

    +For simple formatting use SetlabelFormat() to specify a printf() style formatting string. +

    +The callback function specified should can either be a +global function or a class method, for example + +

    +$SomeClass = new SomeClass(...); 
    +... 
    +$g->SetXLabelFormatCallback(array($SomeClass,'xLabelCallback'));
    +
    +

    +There is, however, one caution. Any $this data used within LabelFormatCallbackInDerivedClass MUST BE SET BEFORE SetLabelFormatCallback is invoked! it appears that $this is bound/copied when SetLabelFormatCallback is invoked. Only $this data defined at that time is available within the callback function! Likewise, modifications to $this data AFTER SetLabelFormatCallback have no effect since the $this object used by the callback function has already been bound/copied. +

    +The same issues obtain when the callback function is in a seperate class! +

    +For a full example see barscalecallbackex1.php + 
    +  

    See also:
    +

    Example:

    +function yLabelFormat($aLabel) {
        
    // Format '1000 english style
        
    return number_format($aLabel)
        
    // Format '1000 french style
        // return number_format($aLabel, 2, ',', ' ');
    }

    $graph->yaxis->SetLabelFormatCallback('yLabelFormat');

    +
    +

    +

    +

     

    + +Specify a printf()-style format string for labels.

    + + + + + + +
    ArgumentDefaultDescription
    +$aFormStr + + + Format string
    +$aDate + + + +false + +No description available
    + +

    Description:
    Synonym for SetLabelFormat(). +Will be deprecated in a future release. Use SetLabelFormat() instead. 
    +  
    See also:
    +

    Example:

    +$graph->xaxis->SetLabelFormatString('%0.1f%%'); + +

    +

    +

     

    + +Specify margin between labels and tick marks

    + + + + +
    ArgumentDefaultDescription
    +$aMargin + + + Margin in pixels
    + +

    Description:
    Specify margin between labels and tick marks. 
    + +

    Example:

    +$graph->xaxis->SetLabelMargin(15);
    +
    +

    +

    +

     

    + +Specify what side of the axis labels should be on.

    + + + + +
    ArgumentDefaultDescription
    +$aSidePos + + + Which side of the axis the labels should be on
    + +

    Description:
    Specify which side the labels should go on. For horizontal axis valid arguments are SIDE_UP, SIDE_DOWN and for vertical axis it is SIDE_LEFT, SIDE_RIGHT. +

    +See topaxisex1.php for an example when this is usefull. +

    +Note: Synonym to SetLabelPos() + 
    +  

    See also:
    +

    Example:

    +$graph->xaxis->SetLabelSide(SIDE_UP); + +

    +

    +

     

    + +// Manually specify major tick positions and optional labels

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajPos + + + No description available
    +$aLabels + + + +NULL + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Position for axis line on the "other" scale

    + + + + +
    ArgumentDefaultDescription
    +$aPosOnOtherScale + + + Position in world-coordinate
    + +

    Description:
    Specifies the position of the axis on the other axis. This can be specified as either a numeric value (which gives the absolute position on the other scale). OIt can also be specified as a string value as either 'min' or 'max' which sould position the axis either at the beginning or the end of the opposite axis scale. +

    +See topaxisex1.php for a real life example. 
    + +

    Example:

    +$graph->xaxis->SetPos('max'); // Locate x-axis at the top + +

    +

    +

     

    + +Position the multiple Y-axis

    + + + + +
    ArgumentDefaultDescription
    +$aDelta + + + Delta in pixels
    + +

    Description:
    Set the position of the Y-axis to be X-pixels delta to the right of the max X-position (used to position the multiple Y-axis) 
    +

    +

     

    + +Specify interval for for test labels

    + + + + +
    ArgumentDefaultDescription
    +$aStep + + + Intervall
    + +

    Description:
    Specify that every $step tick mark should have a label + 
    +  
    See also:
    +

    Example:

    +// Only draw labels on every 2nd tick mark
    $graph->xaxis->SetTextLabelInterval(2); +
    +

    +

    +

     

    + +Specify what ticks should be displayed

    + + + + + + +
    ArgumentDefaultDescription
    +$aStep + + + Intervall between ticks
    +$aStart + + + +0 + +Start tick
    + +

    Description:
    Specify that every $step of the ticks should be displayed starting at $start. + 
    +  
    See also:
    +

    Example:

    +$graph->xaxis->SetTextTickInterval(1,2); + +

    +

    +

     

    + +Specify text labels for the ticks. One label for each data point

    + + + + + + +
    ArgumentDefaultDescription
    +$aLabelArray + + + Array with labels
    +$aLabelColorArray + + + +null + +Individual colors for each label
    + +

    Description:
    Specify the labels for a text axis. This is used to manually set labels for the x-axis when a text scale has been specified. +

    +If fewer labels than data points are specified then the missing labels will be set to the data points ordinal numbers. +

    +The color argment is an array that can be used to specify individual colors for each of the labels. If fewer colors than labels are specified then the colors will wrap around. + + 
    +  

    See also:
    +

    Example:

    +// Set the x-axel to the month of the years using the
    // gloablly available $gDateLocale

    $a $gDateLocale->GetShortMonth();
    $graph->xaxis->SetTickLabels($a);
    $graph->xaxis->SetFont(FF_FONT2);
    +
    +

    +

    +

     

    + +// Manually specify the major and (optional) minor tick position and labels

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aMajPos + + + No description available
    +$aMinPos + + + +NULL + +No description available
    +$aLabels + + + +NULL + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify what side of the axis the ticks should be at

    + + + + +
    ArgumentDefaultDescription
    +$aDir + + + Specify side
    + +

    Description:
    Specify which side of the axis the tick marks should be on. Valid positions for a horizontal axis are SIDE_TOP, SIDE_BOTTOM and for verticla axis SIDE_LEFT and SIDE_RIGHT. +

    +This is a shortform for accessing the tick method directly via the scale in the axis. +

    +See topaxisex1.php for real life example. + 
    +  

    See also:
    +

    Example:

    +$graph->xaxis->SetTickSide(SIDE_TOP); + +

    +

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajSize + + + No description available
    +$aMinSize + + + +3 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Title for axis

    + + + + + + +
    ArgumentDefaultDescription
    +$aTitle + + + Title string
    +$aAdjustAlign + + + +'high' + +Alignment of title along the axis
    + +

    Description:
    Set the title for the axis. You can specify the alignment as being either "high", "middle" and "low". To adjust the titles font and color you have to access the label instance variable. For example, $graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD) 
    + +

    Example:

    +$graph->xaxis->SetTitle('Values for 2002','middle');
    +
    +

    +

    +

     

    + +Specify distance from the axis

    + + + + +
    ArgumentDefaultDescription
    +$aMargin + + + Margin in pixels
    + +

    Description:
    Specify the distance between the axis and the title. 
    +  
    See also:
    +

    Example:

    +$graph->SetTitlemargin(50); + +

    +

    +

     

    + +Specify what side of the axis the title should be at

    + + + + +
    ArgumentDefaultDescription
    +$aSideOfAxis + + + Side
    + +

    Description:
    For horizontal axis the side can be either SIDE_TOP or SIDE_BOTTOM and for vertical axis the position can be either SIDE_LEF or SIDE_RIGHT. +

    +By default x-axis have the title below the axis and y-axis have it on the left and y2 on the right. +

    +See topaxisex1.php for real life example 
    +  

    See also:
    +

    Example:

    +$graph->xaxis->SetTitleSide(SIDE_TOP);
    +
    +

    +

    +

     

    + +Weight of axis

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + Weight in pixels
    + +

    Description:
    Specify the thickness of the axis in pixels 
    + +

    Example:

    +$graph->SetWeight(3); + +

    +

    +

     

    + +// should be labeled.

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$img + + + No description available
    +$aScale + + + No description available
    +$color + + + No description available
    + + + + No description available
    + + + + +array(0,0,0) + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/BarPlot.html b/Societes/ric/jpgraph/docs/classref/BarPlot.html new file mode 100755 index 00000000..c36d3278 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/BarPlot.html @@ -0,0 +1,404 @@ +


    Class BarPlot Extends Plot
    +(Defined in: jpgraph_bar.php : 30)
     
     BarPlot  Plot 
     RotatePattern() 
    SetAbsWidth() 
    SetAlign() 
    SetFillColor() 
    SetFillGradient() 
    SetNoFill() 
    SetPattern() 
    SetShadow() 
    SetValuePos() 
    SetWidth() 
    SetYBase() 
    SetYMin() 
    __construct() 
    +
     HideLegend() 
    PreScaleSetup() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetLegend() 
    SetLineWeight() 
    +
     

    Class usage and Overview
    Concrete class which implements the standard vertical bar plot functionality.

    +To show horizontal plots you can rotate the graph 90 degrees by $graph->Angle(90); +

      +

    See also related classes:
    AccBarPlot and GroupBarPlot

     


    Class Methods

    +

     

    + +// The method will take the specified pattern anre// return a pattern index that corresponds to the original// patterm being rotated 90 degreees. This is needed when plottin// Horizontal bars

    + + + + + + +
    ArgumentDefaultDescription
    +$aPat + + + No description available
    +$aRotate + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify width in absolute pixels.

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + Width in pixels
    + +

    Description:
    Specify width in absolute pixels. If specified this overrides any calls to SetWidth() 
    +  
    See also:
    +

    Example:

    +$barplot->SetAbsWidth(20);
    +
    +

    +

    +

     

    + +Set the alignment between the major tick marks doe the bars.

    + + + + +
    ArgumentDefaultDescription
    +$aAlign + + + String to specify alignment
    + +

    Description:
    Bars can be aligned when using a text scale. Valid arguments for align are 'left', 'center' and 'right'. +

    +Default is to center the bars. 
    + +

    Example:

    +$graph->SetScale("textlin");

    // ...

    $barplot = new BarPlot($ydata,$xdata);
    $barplot->SetAlign("center");

    // ...
    +
    +

    +

    +

     

    + +Specify fill color for bars.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color specification
    + +

    Description:
    Set fill color for the bars. The color for the frame around the bar is specified with BarPlot::SetColor() method. + +By specifying an array as argument you can assign individual colors to each of the bars. If there are more bars than colors the colros will wrap around. + 
    +  
    See also:
    +

    Example:

    +// All bars will have the same color
    $barplot->SetFillColor('#E234A9');

    // The bars will haev individual colors
    $barplot->SetFillColor(array('red','blue','green'));
    +
    +

    +

    +

     

    + +Specify a gradient fill for the bars.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFromColor + + + No description available
    +$aToColor + + + +null + +No description available
    +$aStyle + + + +null + +No description available
    + +

    Description:
    Gradient fill provides a smooth transition from the 'start' color to the 'end' color. The type of gradient fill can be + +
      +
    • GRAD_VER, Vertical gradient +
    • GRAD_HOR, Horizontal gradient +
    • GRAD_MIDHOR, From the center and out, horizontal +
    • GRAD_MIDVER, From the center and out, vertical +
    • GRAD_WIDE_MIDVER, From the center and out, vertical. Wide mid section. +
    • GRAD_WIDE_MIDHOR, From the center and out, horizontal. Wide mid section. +
    • GRAD_CENTER, From the center and beaming out +
    • GRAD_LEFT_REFLECTION, Simulates a reflection on the left side +
    • GRAD_RIGHT_REFLECTION, Simulates a reflection on the right side +
    • GRAD_RAISED_PANEL, Raised panel with shadow +
    + +Since gradient fills make use of many colors and bitmapped images which doesn't use truecolor is limited to 256 colors you might find yourself out of colors if using to many different gadient fills in your graph. +

    +You should also be observant that gradient fills makes use of more CPU time than solid fills. + 
    +  

    See also:
    +

    Example:

    +$barplot->SetFillgradient('orange','darkred',GRAD_VER);
    +
    +

    +

    +

     

    + +Dont's paint the interior of the bars with any color.

    +
    + +

    Description:
    Bar plots are filled by default. Calling this method disable the fill of barplots. + +This is usefull when you have a background in the image that you want to be shown underneth the bars. 
    +  
    See also:
    +

    Example:

    +$barplot->SetNoFill();
    +
    +

    +

    +

     

    + +Add one of the line patterns to the bar

    + + + + + + +
    ArgumentDefaultDescription
    +$aPattern + + + Pattern
    +$aColor + + + +'black' + +Color of pattern
    + +

    Description:
    Add one of the line patterns as fill effect to the bar. Available patterns are: +
      +
    1. 'PATTERN_DIAG1' +
    2. 'PATTERN_DIAG2' +
    3. 'PATTERN_DIAG3' +
    4. 'PATTERN_DIAG4' +
    5. 'PATTERN_CROSS1' +
    6. 'PATTERN_CROSS2' +
    7. 'PATTERN_CROSS3' +
    8. 'PATTERN_CROSS4' +
    9. 'PATTERN_STRIPE1' +
    10. 'PATTERN_STRIPE2' +

    + +

    Example:

    +$barplot->SetPattern('PATTERN_CROSS2');
    +
    +

    +

    +

     

    + +Set a drop shadow for the bar (or rather an "up-right" shadow)

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + +"black" + +No description available
    +$aHSize + + + +3 + +No description available
    +$aVSize + + + +3 + +No description available
    +$aShow + + + +true + +No description available
    + +

    Description:
    Set a drop shadow for the bar (or rather an "up-right" shadow) 
    + +

    Example:

    +$barplot->SetShadow();
    +
    +

    +

    +

     

    + +Specify position for displayed values on bars

    + + + + +
    ArgumentDefaultDescription
    +$aPos + + + Postision
    + +

    Description:
    Specify position for the values on the bar. Teh position can either be +
      +
    • 'top', The default value +
    • 'center' +
    • 'bottom' +

    + +

    Example:

    +// Put the values in the middle of the bars
    $barplot->SetValuePos('center'); +
    +

    +

    +

     

    + +Specify width as fractions of the major step size

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + No description available
    + +

    Description:
    Specify width as fractions of the major step size when the scale used is a text scale (which is the normal scale to use for bars). + +If the X-axis scale is a linear scale (i.e. lin, int or date) then the width must be specified in absolute pixels. 
    +  
    See also:
    +

    Example:

    +// Specify fractions for a text scale
    $barplot->SetWidth(0.4);

    // Specify absolute width 25 pixels
    $barplot->SetWidth(25); +
    +

    +

    +

     

    + +Specify the base value for the bars

    + + + + +
    ArgumentDefaultDescription
    +$aYStartValue + + + Strta Y-value for bars.
    + +

    Description:
    Specify the start plot for bars, (minimum Y-value). By default the base uses the value 0 as base. 
    + +

    Example:

    +$barplot->SetYBase(100);
    +
    +

    +

    +

     

    + +DEPRECATED use SetYBase instead

    + + + + +
    ArgumentDefaultDescription
    +$aYStartValue + + + Y-Value for base of bars
    + +

    Description:
    DEPRECATED use SetYBase() instead 
    + +

    Example:

    +DEPRECATED use SetYBase() instead + +

    +

    +

     

    + +Create a new bar plot

    + + + + + + +
    ArgumentDefaultDescription
    +$datay + + + No description available
    +$datax + + + +false + +X-positions
    + +

    Description:
    Create a new bar plot 
    + +

    Example:

    +$bar = new BarPlot($ydata);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Bezier.html b/Societes/ric/jpgraph/docs/classref/Bezier.html new file mode 100755 index 00000000..7b88dbee --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Bezier.html @@ -0,0 +1,99 @@ +


    Class Bezier
    +(Defined in: jpgraph_regstat.php : 112)
     
     Bezier 
     Get() 
    __construct() 
    +
     

    Class usage and Overview
    Utility class to help construct an interpolated data points given an arbitrary number of data points. +

    +This class doesn't draw any graphs by itself it is only used to generate a new set of data points representing the smooth line from the input which are the control lines for a bezier interpolated curve. +

    +The principle of using this class is that you first create an instance of this class and giving it the X,Y values for your control points. +

    +You can then get back an interpolated smooth dataset by calling the Get() method. This method takeas as argument how many data points you want the interpolated graph to have. +

    +In order to use this method the file jpgraph_regstat.php must be included. +

    +Technical note: The control points for a bezier curve does not necessary lie on the curve. Using the alternative method of spline interpolation guarantees that the specified control point lie on the generated curve. +

    +Technical note 2: An alternmative Bezier curve is also availabe in the Canvas tools (jpgraph_canvtools.php). The difference is that that method will not return any data points it will directly draw an interpolate bezier curve on the canvas. +

      +

    See also related classes:
    Spline and Shape

     


    Class Methods

    +

     

    + +Return two arrays of X and Y coordinates that represents the curve

    + + + + +
    ArgumentDefaultDescription
    +$steps + + + Number of data points
    + +

    Description:
    Return a data set representing the interpolated smooth curve passing through all the specified control points. 
    + +

    Example:

    +// Control points for bezier curve
    $xdata = array(1,3,12,15);
    $ydata = array(5,15,2,19);

    // Get the interpolated values by creating
    // a new Spline object.
    $bez = new Bezier($xdata,$ydata);

    // For the new data set we want 50 points to
    // get a smooth curve.
    list($newx,$newy) = $bez->Get(50);
    +
    +

    +

    +

     

    + +Create a new bezier object

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$datax + + + X-coordinates for control points
    +$datay + + + Y-coordinates for control points
    +$attraction_factor + + + Attraction factor
    + + + + No description available
    + + + + +1 + +No description available
    + +

    Description:
    Creates a new Bezier interpoaltion object. The arguments specifies the X, and Y coordinate sof the control points to be used. + +The attraction factor is an integer >1 and determines how much "gracity" each control point should have. A higher value makes the resulting curve bend much more sharper against the control points. The default value is 1. 
    + +

    Example:

    +// Control points
    $xdata = array(1,3,12,15);
    $ydata = array(5,15,2,19);

    // Get the interpolated values by creating
    // a new bezier object.
    $bez = new Bezier($xdata,$ydata);

    // For the new data set we want 50 points to
    // get a smooth curve.
    list($newx,$newy) = $bez->Get(50); +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/BoxPlot.html b/Societes/ric/jpgraph/docs/classref/BoxPlot.html new file mode 100755 index 00000000..19eb5346 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/BoxPlot.html @@ -0,0 +1,80 @@ +


    Class BoxPlot Extends StockPlot
    +(Defined in: jpgraph_stock.php : 173)
     
     BoxPlot  StockPlot 
     SetMedianColor() 
    __construct() 
    +
     HideEndLines() 
    SetColor() 
    SetWidth() 
    __construct() 
    +
     

    Class usage and Overview
    Create a box plot. This is the same as a stock plot but with the added feature of a median line. For each X-value 5 Y values must be specified: +(open,close,min,max,median) +

      +

    See also related classes:
    StockPlot

     


    Class Methods

    +

     

    + +Specify color for median line

    + + + + + + +
    ArgumentDefaultDescription
    +$aPos + + + Positive color
    +$aNeg + + + Negative color
    + +

    Description:
    Specify color for median line.  
    + +

    Example:

    +$bplot->SetMedianColor('black','white'); + +

    +

    +

     

    + +Create a new Box plot

    + + + + + + +
    ArgumentDefaultDescription
    +$datay + + + Y-tuples
    +$datax + + + +false + +If specified, X-positions
    + +

    Description:
    Create a new Box plot. Each data point in a box plotconsists of 5 values; (open,close,min,max,median) + + 
    +  
    See also:
    +

    Example:

    +$bplot = new BoxPlot($ydata); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/CanvasGraph.html b/Societes/ric/jpgraph/docs/classref/CanvasGraph.html new file mode 100755 index 00000000..6e05eb84 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/CanvasGraph.html @@ -0,0 +1,169 @@ +


    Class CanvasGraph Extends Graph
    +(Defined in: jpgraph_canvas.php : 20)
     
     CanvasGraph  Graph 
     InitFrame() 
    Stroke() 
    __construct() 
    +
     Add() 
    AddBand() 
    AddLine() 
    AddText() 
    AddY() 
    AddY2() 
    CheckCSIMCache() 
    GetCSIMImgHTML() 
    GetHTMLImageMap() 
    Set3DPerspective() 
    Set90AndMargin() 
    SetAlphaBlending() 
    SetAngle() 
    SetAxisLabelBackground() 
    SetAxisStyle() 
    SetBackgroundCFlag() 
    SetBackgroundCountryFlag() 
    SetBackgroundGradient() 
    SetBackgroundImage() 
    SetBackgroundImageMix() 
    SetBackgroundImagePos() 
    SetBox() 
    SetClipping() 
    SetColor() 
    SetCSIMImgAlt() 
    SetFrame() 
    SetFrameBevel() 
    SetGridDepth() 
    SetIconDepth() 
    SetImgFormat() 
    SetMargin() 
    SetMarginColor() 
    SetScale() 
    SetShadow() 
    SetTextScaleAbsCenterOff() 
    SetTickDensity() 
    SetTitleBackground() 
    SetTitleBackgroundFillStyle() 
    SetUserFont() 
    SetUserFont1() 
    SetUserFont2() 
    SetUserFont3() 
    SetY2OrderBack() 
    SetY2Scale() 
    SetYDeltaDist() 
    SetYScale() 
    Stroke() 
    StrokeCSIM() 
    StrokeCSIMImage() 
    StrokeFrameBackground() 
    StrokeStore() 
    __construct() 
    +
     

    Class usage and Overview
    If you for some reason just want plain canvas to draw on using the direct drawing method you can create a new canvas with this class. +

    +The canvas is meant to be manipulated through the Image class which can be found as an instance variable ($graph->img) in the canvas class. +

    +Please remeber taht using the drawing methods in the Image class assumes screen (pixels) coordinates. +

      +

    See also related classes:
    Graph

     


    Class Methods

    +

     

    + +Strokes plot area and margin

    +
    + +

    Description:
    Calling this method will fill the margin (with the margin color) and fill the plot area with the plot color. You should call this method before stroking anything else to the canvas as otherwise what you have stroken will be overwritten. 
    + +

    Example:

    +// Setup a basic canvas we can work 
    $g = new CanvasGraph(400,200,'auto');
    $g->SetMargin(5,11,6,11);
    $g->SetShadow();
    $g->SetMarginColor("teal");

    // We need to stroke the plotarea and margin before we add the
    // text since we otherwise would overwrite the text.
    $g->InitFrame();

    // Draw a text box in the middle
    $txt="This\nis\na TEXT!!!";
    $t = new Text($txt,200,10);
    $t->SetFont(FF_ARIAL,FS_BOLD,40);

    // Stroke the text
    $t->Stroke($g->img);

    // Stroke the graph
    $g->Stroke();
    +
    +

    +

    +

     

    + +Stroke graph to browser or file

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + + +"" + +Filename to stroke to
    + +

    Description:
    Stroke a file to browser or file. See Graph::Stroke() for more details. 
    +  
    See also:
    +

    Example:

    +$canvas->Stroke(); + +

    +

    +

     

    + +Construct a new Cnavas graph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + +300 + +Width of graph
    +$aHeight + + + +200 + +Height of graph
    +$aCachedName + + + +"" + +Cache file name
    +$timeout + + + +0 + +Cache timeout
    +$inline + + + +1 + +Inline or not
    + +

    Description:
    See Graph::Graph() for description, this method is identical. 
    +  
    See also:
    +

    Example:

    +// Create a new canvas and draw a line from top left to
    // bottom right
    $canvas = new CanvasGraph(300,200);
    $canvas->img->SetColor(black*);
    $canvas->img->Line(0,0,300,200);
    $canvas->Stroke(); +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/CanvasRectangleText.html b/Societes/ric/jpgraph/docs/classref/CanvasRectangleText.html new file mode 100755 index 00000000..6adf3c53 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/CanvasRectangleText.html @@ -0,0 +1,471 @@ +


    +(Defined in: jpgraph_canvtools.php : 375)
     
     CanvasRectangleText 
     ParagraphAlign() 
    Pos() 
    Set() 
    SetAutoMargin() 
    SetColor() 
    SetCornerRadius() 
    SetFillColor() 
    SetFont() 
    SetFontColor() 
    SetPos() 
    SetShadow() 
    SetTxt() 
    Stroke() 
    __construct() 
    +
     

    Class usage and Overview
    YOu can use this class to convieniently draw a text on canvas. The text may have multiple lines wher each line is separated by a "\n" (newline) character. +

    +The text may also be enclosed in a rounded (possibly filled) rectangle. +

      +

    See also related classes:
    CanvasGraph and CanvasScale

     


    Class Methods

    +

     

    + +Specify paragraph alignment for the text

    + + + + +
    ArgumentDefaultDescription
    +$aParaAlign + + + Alignment
    + +

    Description:
    Specify paragraph alignment for the text. Alignments can be: + +
      +
    • "left" +
    • "center" +
    • "right" +
     
    + +

    Example:

    +
    $g 
    = new CanvasGraph(550,450);
    $scale = new CanvasScale($g);
    $scale->Set(0,27,0,53);
    //
    $t = new CanvasRectangleText();
    $t->SetFillColor('lightgreen');
    $t->SetFontColor('navy');
    $t->SetFont(FF_ARIAL,FS_NORMAL,16);
    $t->ParagraphAlign('center');
    $t->Set("First line\nSecond line",0.5,19,26,32);
    $t->Stroke($g->img,$scale);
    +
    +

    +

    +

     

    + +Specify position for text

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$xl + + + +0 + +Top left X
    +$yt + + + +0 + +Top left Y
    +$w + + + +0 + +Width
    +$h + + + +0 + +Height
    + +

    Description:
    Set position for text. All coordinates will be translaed according to the current scale used. + 
    +

    +

     

    + +Specify the text and position

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + Text
    +$xl + + + Top left X
    +$yt + + + Top left Y
    +$w + + + +0 + +Width
    +$h + + + +0 + +Height
    + +

    Description:
    Specify the text and position. All coordinates will be translated using the specified scale when stroked. 
    + +

    Example:

    +$t->SetShadow('');
    $t->SetFont(FF_ARIAL,FS_BOLD,18);
    $t->Set('Family',1,1,8);
    $t->Stroke($g->img,$scale); +
    +

    +

    +

     

    + +Specify auto margin when no specific size is specified

    + + + + +
    ArgumentDefaultDescription
    +$aMargin + + + Margin in pixels
    + +

    Description:
    Specify auto margin when no specific size is specified. This margin is used to add extra space around the text and the border around the text. 
    +

    +

     

    + +Set border color for rectangle

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Border color
    + +

    Description:
    Set border color for rectangle 
    +  
    See also:
    +

    Example:

    +$t->SetColor('navy'); + +

    +

    +

     

    + +Set radius for corners

    + + + + +
    ArgumentDefaultDescription
    +$aRad + + + +5 + +Radius in pixels
    + +

    Description:
    Specify the radius for the rounded corners. Specifying the value as 0 will give normal square corners. + + 
    + +

    Example:

    +$t->SetCornerRadius(15); + +

    +

    +

     

    + +Specify fill color for rectangle

    + + + + +
    ArgumentDefaultDescription
    +$aFillColor + + + Color
    + +

    Description:
    Specify fill color for rectangle 
    + +

    Example:

    +$t->SetFillColor('#12A73C');

    +
    +

    +

    +

     

    + +Specify font

    + + + + + + + + +
    ArgumentDefaultDescription
    +$FontFam + + + Font family
    +$aFontStyle + + + Font style
    +$aFontSize + + + +12 + +Font size
    + +

    Description:
    Specify font 
    + +

    Example:

    +$t->SetFont(FF_ARIAL,FS_BOLD,24); + +

    +

    +

     

    + +Specify text (font) color

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color specification
    + +

    Description:
    Set color for text. Use SetColor() to specify border colro and SetFillColor() to set fill color. 
    +  
    See also:
    +

    Example:

    +$t->SetFontCOlor('black') + +

    +

    +

     

    + +Specify position

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$xl + + + +0 + +Top left X
    +$yt + + + +0 + +Top left Y
    +$w + + + +0 + +Width
    +$h + + + +0 + +Height
    + +

    Description:
    Specify position. All coordinates will be transalted with the specified scale when stroked. 
    +

    +

     

    + +Add a drop shadow

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + +'gray' + +Color of shadow
    +$aWidth + + + +3 + +Width of shadow
    + +

    Description:
    Add a drop shadow to the rounded reactangle surranding the text 
    + +

    Example:

    +$t->SetShadow();  // Use default values
    +
    +

    +

    +

     

    + +Specify text string

    + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + Textt
    + +

    Description:
    Set text string to be displayed. The text string may have multiple lines separated by a newline character "\n" 
    + +

    Example:

    +$t->Set("This is a text!");
    +
    +

    +

    +

     

    + +Stroke text to canvas

    + + + + + + +
    ArgumentDefaultDescription
    +$aImg + + + Image context
    +$scale + + + Scale
    + +

    Description:
    Stroke text to canvas 
    +  
    See also:
    +

    Example:

    +$t->Stroke($graph->img,$scale);
    +
    +

    +

    +

     

    + +Draws a text paragraph inside a rounded, possibly filled, rectangle

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + +'' + +Text
    +$xl + + + +0 + +Top left X
    +$yt + + + +0 + +Top left Y
    +$w + + + +0 + +Width
    +$h + + + +0 + +Height
    + +

    Description:
    Draws a text paragraph inside a rounded, possible filled, rectangle. 
    + +

    Example:

    +
    $t 
    = new CanvasRectangleText();
    $t->SetFillColor('lightgreen');
    $t->SetFontColor('navy');
    $t->SetFont(FF_ARIAL,FS_NORMAL,16);
    $t->Set("\n\n\n\n\n\n\n\n\n\n\nTTF Fonts",0.5,19,26,32);
    $t->Stroke($g->img,$scale);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/CanvasScale.html b/Societes/ric/jpgraph/docs/classref/CanvasScale.html new file mode 100755 index 00000000..ab68bd01 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/CanvasScale.html @@ -0,0 +1,179 @@ +


    +(Defined in: jpgraph_canvtools.php : 24)
     
     CanvasScale 
     Set() 
    Translate() 
    TranslateX() 
    TranslateY() 
    __construct() 
    +
     

    Class usage and Overview
    This class defines a scale which is meant to be used with canvas graphs to make it possibles to pecify a more convinient scale compared to absoilute pixels coordinates. +
    +This will also let you scale the canvas without any coordinate changes.

      +


    Class Methods

    +

     

    + +Specify scale to use

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$xmin + + + +0 + +Min X value
    +$xmax + + + +10 + +Max X-value
    +$ymin + + + +0 + +Min Y-value
    +$ymax + + + +10 + +Max Y-value
    + +

    Description:
    SPecify min/max values for scale. 
    + +

    Example:

    +// Setup a basic canvas we can work 
    $g = new CanvasGraph(400,200,'auto');
    $g->SetMargin(5,11,6,11);
    $g->SetShadow();
    $g->SetMarginColor("teal");

    // We need to stroke the plotarea and margin before we add the
    // text since we otherwise would overwrite the text.
    $g->InitFrame();

    // Create a new scale
    $scale = new CanvasScale($g);
    $scale->Set(0,$xmax,0,$ymax);
    +
    +

    +

    +

     

    + +Translate a point to absolute screen coordinates

    + + + + + + +
    ArgumentDefaultDescription
    +$x + + + X-value
    +$y + + + Y-value
    + +

    Description:
    Translate a point to absolute screen coordinates 
    +  
    See also:
    +

    Example:

    +list($xt,$yt) = $scale->Translate($x,$y);
    $graph->img->Point($xt,$yt); +
    +

    +

    +

     

    + +Translate X-coordinate

    + + + + +
    ArgumentDefaultDescription
    +$x + + + X-value
    + +

    Description:
    Translate X-value into absolute screen coordinates 
    +  
    See also:

    +

     

    + +Translate Y-value to absolute screen coordinates

    + + + + +
    ArgumentDefaultDescription
    +$y + + + Y-value
    + +

    Description:
    Translate Y-value to absolute screen coordinates 
    +  
    See also:

    +

     

    + +Define a scale for canvas graphs

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$graph + + + No description available
    +$xmin + + + +0 + +Min X-value for scale
    +$xmax + + + +10 + +Max X-value for scale
    +$ymin + + + +0 + +Min Y-value for scale
    +$ymax + + + +10 + +Max Y-value for scale
    + +

    Description:
    Define a scale for canvas graphs. Note the scale values is optionally in this call. The may be later set witha call to the Set() method. 
    +  
    See also:


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/ColorFactory.html b/Societes/ric/jpgraph/docs/classref/ColorFactory.html new file mode 100755 index 00000000..8dcecc09 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/ColorFactory.html @@ -0,0 +1,22 @@ +


    +(Defined in: jpgraph.php : 5284)
     
     ColorFactory 
     getColor() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +// Provide a deterministic list of new colors whenever the getColor() method// is called. Used to automatically set colors of plots.

    +
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Contour.html b/Societes/ric/jpgraph/docs/classref/Contour.html new file mode 100755 index 00000000..632c4a2c --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Contour.html @@ -0,0 +1,230 @@ +


    Class Contour
    +(Defined in: jpgraph_contour.php : 22)
     
     Contour 
     adjustDataPointValues() 
    CalculateColors() 
    determineIsobarEdgeCrossings() 
    getCrossingCoord() 
    getIsobars() 
    getMinMaxVal() 
    isobarHCrossing() 
    isobarVCrossing() 
    resetEdgeMatrices() 
    SetInvert() 
    UseHighContrastColor() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +// In order to avoid numerical problem when two vertices are very close// we have to check and avoid dividing by close to zero denumerator.

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +//'isobarVCrossing: Col index too large

    + + + + +
    ArgumentDefaultDescription
    +$aIsobar + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// We now have the bottom and rightmost edges unsearched

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + No description available
    +$aCol + + + No description available
    +$aEdgeDir + + + No description available
    +$aIsobarVal + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Use only blue/red scale

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + No description available
    +$aCol + + + No description available
    +$aIsobar + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +//'ContourPlot Internal Error: isobarHCrossing: Row index too large (%d)'

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + No description available
    +$aCol + + + No description available
    +$aIsobar + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +//'Number of colors must equal the number of isobar lines specified';

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    +$aBW + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// File: JPGRAPH_CONTOUR.PHP// Description: Contour plot// Created: 2009-03-08// Ver: $Id: jpgraph_contour.php 1576 2009-07-13 10:35:22Z ljp $//// Copyright (c) Aditus Consulting. All rights reserved.//==================================

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aMatrix + + + No description available
    +$aIsobars + + + +10 + +No description available
    +$aColors + + + +null + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/ContourPlot.html b/Societes/ric/jpgraph/docs/classref/ContourPlot.html new file mode 100755 index 00000000..d2ff1895 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/ContourPlot.html @@ -0,0 +1,240 @@ +


    Class ContourPlot Extends Plot
    +(Defined in: jpgraph_contour.php : 387)
     
     ContourPlot  Plot 
     Invertlegend() 
    Legend() 
    Max() 
    Min() 
    PreScaleSetup() 
    SetInvert() 
    SetIsobarColors() 
    ShowLegend() 
    Stroke() 
    UseHighContrastColor() 
    __construct() 
    +
     HideLegend() 
    PreScaleSetup() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetLegend() 
    SetLineWeight() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aGraph + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aGraph + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColorArray + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$img + + + No description available
    +$xscale + + + No description available
    +$yscale + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    +$aBW + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// No manually specified colors. Calculate them automatically.

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aDataMatrix + + + No description available
    +$aIsobar + + + +10 + +No description available
    +$aFactor + + + +1 + +No description available
    +$aInvert + + + +false + +No description available
    +$aIsobarColors + + + +array() + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/DateLocale.html b/Societes/ric/jpgraph/docs/classref/DateLocale.html new file mode 100755 index 00000000..bc09cfaa --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/DateLocale.html @@ -0,0 +1,543 @@ +


    +(Defined in: jpgraph.php : 349)
     
     DateLocale 
     GetDayAbb() 
    GetLongMonthName() 
    GetMonth() 
    GetShortDay() 
    GetShortMonth() 
    GetShortMonthName() 
    Set() 
    __construct() 
    +
     

    Class usage and Overview
    This class is mainly used (so far) by the Gantt graphs to get localized names of weekdays and months. There is nothing that prevents you from using this to get hold of localized names in your script. +

    +To help with this JpGraph instantiates the global variable $gDateLocale which can be used to access the methods. +

    +A quick example could be to for example get hold of the shortform of the names of the month to use as labels. By default this is set to the dafult locale for the installation. +

    +// Get localized array of short form of month names +$months = $gDateLocale->GetShortMonth();

      +


    Class Methods

    +

     

    + +Return array with day abbreviation in the current locale.

    +
    + +

    Description:
    Returns an array with the abbrevation for weekdays using the current locale. 
    +  
    See also:
    +

    Example:

    +$weekdays $gDateLocale->GetDayAbb(); + +

    +

    +

     

    + +Get long month name for the specified month

    + + + + +
    ArgumentDefaultDescription
    +$aNbr + + + Number of month [0-11]
    + +

    Description:
    Get the full month name as specified by integer 0-11 
    +  
    See also:
    +

    Example:

    +$jan $gDateLocale->GetLongMonthName(0);
    +
    +

    +

    +

     

    + +Get array of all month names

    +
    + +

    Description:
    Return an array with all months of the year in their long form. 
    +  
    See also:
    +

    Example:

    +$allmonths $gDateLocale->GetMonth();
    $graph->xaxis->SetTickLabels($allmonths); +
    +

    +

    +

     

    + +Return an array with all weekdays in the short form.

    +
    + +

    Description:
    Return an array with all weekdays in the short form according to the specified locale. + +For english locale this would return +array('Mon','Tue','Wed','Thu','Fri','Sat','Sun'); 
    + +

    Example:

    +$alldays $gDateLocale->GetShortDay(); + +

    +

    +

     

    + +Short month description

    +
    + +

    Description:
    Return an array of the short names for all months 
    + +

    Example:

    +$allmonths $gDateLocale->GetShortMonth(); + +

    +

    +

     

    + +Return the short month name for the specified month.

    + + + + +
    ArgumentDefaultDescription
    +$aNbr + + + Number of month [0-11]
    + +

    Description:
    Return the short month name for the specified month. 
    +  
    See also:
    +

    Example:

    +$april $gDateLocale->GetShortMonthName(3); + +

    +

    +

     

    + +Set locale

    + + + + +
    ArgumentDefaultDescription
    +$aLocale + + + Locale
    + +

    Description:
    See PHP manual for more details. The argument should be a valid locale setting. For example 'EN_US' or 'EN_UK' + +The following table lists some commonly used locales. The exact locales available depends on the system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    af_ZAar_AEar_AE.utf8
    ar_BHar_BHar_BH.utf8ar_DZar_DZ.utf8
    ar_EGar_EGar_EG.utf8ar_INar_IQ
    ar_IQ.utf8ar_IQ.utf8ar_JOar_JO.utf8ar_KW
    ar_KW.utf8ar_KW.utf8ar_LBar_LB.utf8ar_LY
    ar_LY.utf8ar_LY.utf8ar_MAar_MA.utf8ar_OM
    ar_OM.utf8ar_OM.utf8ar_QAar_QA.utf8ar_SA
    ar_SA.utf8ar_SA.utf8ar_SDar_SD.utf8ar_SY
    ar_SY.utf8ar_SY.utf8ar_TNar_TN.utf8ar_YE
    ar_YE.utf8ar_YE.utf8be_BYbe_BY.utf8bg_BG
    bg_BG.utf8bg_BG.utf8bokmalbokm?lbr_FR
    bs_BAbs_BAca_ESca_ES.utf8ca_ES@euro
    catalancatalancroatiancs_CZcs_CZ.utf8
    cy_GBcy_GBczechda_DKda_DK.utf8
    danishdanishdanskde_ATde_AT.utf8
    de_AT@eurode_AT@eurode_BEde_BE@eurode_CH
    de_CH.utf8de_CH.utf8de_DEde_DE.utf8de_DE@euro
    de_LUde_LUde_LU.utf8de_LU@eurodeutsch
    dutchdutcheestiel_GRel_GR.utf8
    en_AUen_AUen_AU.utf8en_BEen_BE.utf8
    en_BE@euroen_BE@euroen_BWen_CAen_CA.utf8
    en_DKen_DKen_GBen_GB.utf8en_HK
    en_IEen_IEen_IE.utf8en_IE@euroen_IN
    en_NZen_NZen_NZ.utf8en_PHen_SG
    en_USen_USen_US.utf8en_ZAen_ZA.utf8
    en_ZWen_ZWes_ARes_AR.utf8es_BO
    es_BO.utf8es_BO.utf8es_CLes_CL.utf8es_CO
    es_CO.utf8es_CO.utf8es_CRes_CR.utf8es_DO
    es_DO.utf8es_DO.utf8es_ECes_EC.utf8es_ES
    es_ES.utf8es_ES.utf8es_ES@euroes_GTes_GT.utf8
    es_HNes_HNes_HN.utf8es_MXes_MX.utf8
    es_NIes_NIes_NI.utf8es_PAes_PA.utf8
    es_PEes_PEes_PE.utf8es_PRes_PR.utf8
    es_PYes_PYes_PY.utf8es_SVes_SV.utf8
    es_USes_USes_UYes_UY.utf8es_VE
    es_VE.utf8es_VE.utf8estonianet_EEet_EE.utf8
    eu_ESeu_ESeu_ES@eurofa_IR.utf8fi_FI
    fi_FI.utf8fi_FI.utf8fi_FI@eurofinnishfo_FO
    fo_FO.utf8fo_FO.utf8fr_BEfr_BE.utf8fr_BE@euro
    fr_CAfr_CAfr_CA.utf8fr_CHfr_CH.utf8
    fr_FRfr_FRfr_FR.utf8fr_FR@eurofr_LU
    fr_LU.utf8fr_LU.utf8fr_LU@eurofran?aisfrench
    ga_IEga_IEga_IE.utf8ga_IE@eurogalego
    galiciangaliciangermangl_ESgl_ES.utf8
    gl_ES@eurogl_ES@eurogreekgv_GBhe_IL
    he_IL.utf8he_IL.utf8hebrewhi_IN.utf8hr_HR
    hr_HR.utf8hr_HR.utf8hrvatskihu_HUhu_HU.utf8
    hungarianhungarianicelandicid_IDid_ID.utf8
    is_ISis_ISis_IS.utf8it_CHit_CH.utf8
    it_ITit_ITit_IT.utf8it_IT@euroitalian
    iw_ILiw_ILja_JPja_JP.eucjpja_JP.sjis
    ja_JP.ujisja_JP.ujisja_JP.utf8japanesejapanese.euc
    japanese.sjisjapanese.sjiska_GEkl_GLkl_GL.utf8
    ko_KRko_KRko_KR.euckrko_KR.utf8korean
    korean.euckorean.euckw_GBlithuanianlt_LT
    lt_LT.utf8lt_LT.utf8lv_LVlv_LV.utf8mi_NZ
    mk_MKmk_MKmk_MK.utf8mr_IN.utf8ms_MY
    mt_MTmt_MTnb_NOnb_NO.ISO-8859-1nl_BE
    nl_BE.utf8nl_BE.utf8nl_BE@euronl_NLnl_NL.utf8
    nl_NL@euronl_NL@euronn_NOno_NOno_NO.utf8
    norwegiannorwegiannynorskoc_FRpl_PL
    pl_PL.utf8pl_PL.utf8polishportuguesept_BR
    pt_BR.utf8pt_BR.utf8pt_PTpt_PT.utf8pt_PT@euro
    ro_ROro_ROro_RO.utf8romanianru_RU
    ru_RU.koi8rru_RU.koi8rru_RU.utf8ru_UArussian
    sh_YUsh_YUsh_YU.utf8sk_SKsk_SK.utf8
    sl_SIsl_SIsl_SI.utf8slovakslovene
    slovenianslovenianspanishsq_ALsq_AL.utf8
    sr_YUsr_YUsr_YU.utf8sr_YU@cyrillicsv_FI
    sv_FI.utf8sv_FI.utf8sv_FI@eurosv_SEsv_SE.utf8
    swedishswedishta_INte_INtg_TJ
    th_THth_THth_TH.utf8thaitl_PH
    tr_TRtr_TRtr_TR.utf8turkishuk_UA
    uk_UA.utf8uk_UA.utf8ur_PKuz_UZvi_VN
    vi_VN.utf8vi_VN.utf8yi_USzh_CNzh_CN.gb18030
    zh_CN.gbkzh_CN.gbkzh_CN.utf8zh_HKzh_HK.utf8
    zh_TWzh_TWzh_TW.euctwzh_TW.utf8
     
    + +

    Example:

    +$gDateLocale->Set('sv_SE'); // Set Swedish locale + +

    +

    +

     

    + +Constructor

    +
    + +

    Description:
    Construct a new DateLocale. 
    + +

    Example:

    +$dateLocale = new DateLocale();
    // Use Swedish locale
    $dateLocale->Set('sv_SE'); +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/DateScale.html b/Societes/ric/jpgraph/docs/classref/DateScale.html new file mode 100755 index 00000000..eca90453 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/DateScale.html @@ -0,0 +1,166 @@ +


    Class DateScale Extends LinearScale
    +(Defined in: jpgraph_date.php : 49)
     
     DateScale  LinearScale 
     AdjustForDST() 
    SetDateAlign() 
    SetDateFormat() 
    SetTimeAlign() 
    +
     SetAutoMax() 
    SetAutoMin() 
    SetAutoTicks() 
    SetGrace() 
    +
     

    Class usage and Overview
    Module used to create a date/time X-axis scale

      +


    Class Methods

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify start and end date alignment for the scale

    + + + + + + +
    ArgumentDefaultDescription
    +$aStartAlign + + + Start alignment
    +$aEndAlign + + + +false + +End alignment
    + +

    Description:
    Specify start and end date alignment for the scale +Possible values are +
      +
    1. Alignment on a day basis +
        +
      • DAYADJ_1, Align on the start of a day +
      • DAYADJ_7, Align on the start of a week +
      • DAYADJ_WEEK, Synonym to DAYADJ_7 +
      + +
    2. Alignment on a monthly basis +
        +
      • MONTHADJ_1, Align on a month start +
      • MONTHADJ_6, Align on the start of halfyear +
      + +
    3. Alignment on a yearly basis +
        +
      • YEARADJ_1, Align on a year +
      • YEARADJ_2, Align on a bi-yearly basis +
      • YEARADJ_5, Align on a 5 year basis +
      +

    +  
    See also:
    +

    Example:

    +$graph->xaxis->scale->SetDateAlign(DAYADJ_1); + +

    +

    +

     

    + +// Overrides the automatic determined date format. Must be a valid date() format string

    + + + + +
    ArgumentDefaultDescription
    +$aFormat + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify start and end date alignment for the scale

    + + + + + + +
    ArgumentDefaultDescription
    +$aStartAlign + + + Start time alignment
    +$aEndAlign + + + +false + +End time alignment
    + +

    Description:
    Specify the start and end alignment with the time granularity. For date granularity see SetDateAlign(). Note that only one of SetDateAlign() and SetTimeAlign() can be used. + +For start and end alignment the following values are valid + +
      +
    1. Alignment on seconds +
        +
      • MINADJ_1, Align on a single second (This is the lowest resolution) +
      • MINADJ_5, Align on the nearest 5 seconds +
      • MINADJ_10, Align on the nearest 10 seconds +
      • MINADJ_15, Align on the nearest 15 seconds +
      • MINADJ_30, Align on the nearest 30 seconds +
      +
    2. Alignment on minutes +
        +
      • MINADJ_1, Align to the nearest minute +
      • MINADJ_5, Align on the nearest 5 minutes +
      • MINADJ_10, Align on the nearest 10 minutes +
      • MINADJ_15, Align on the nearest 15 minutes +
      • MINADJ_30, Align on the nearest 30 minutes +
      +
    3. Alignment on hours +
        +
      • HOURADJ_1, Align to the nearest hour +
      • HOURADJ_2, Align to the nearest two hour +
      • HOURADJ_3, Align to the nearest three hour +
      • HOURADJ_4, Align to the nearest four hour +
      • HOURADJ_6, Align to the nearest six hour +
      • HOURADJ_12, Align to the nearest tolw hour +
      +

    +  
    See also:
    +

    Example:

    +$graph->xaxis->scale->SetTimeAlign(MINADJ_15); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/DateScaleUtils.html b/Societes/ric/jpgraph/docs/classref/DateScaleUtils.html new file mode 100755 index 00000000..723c29d4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/DateScaleUtils.html @@ -0,0 +1,252 @@ +


    +(Defined in: jpgraph_utils.inc.php : 69)
     
     DateScaleUtils 
     doDaily() 
    doMonthly() 
    doWeekly() 
    doYearly() 
    GetAutoTicks() 
    GetTicks() 
    GetTicksFromMinMax() 
    UseWeekFormat() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aType + + + No description available
    +$aMinor + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// The assumption is that the weeks start on Monday. If the first day// is later in the week then the first week tick has to be on the following// week.

    + + + + + + +
    ArgumentDefaultDescription
    +$aType + + + No description available
    +$aMinor + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aType + + + No description available
    +$aMinor + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aType + + + No description available
    +$aMinor + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aMin + + + No description available
    +$aMax + + + No description available
    +$aMaxTicks + + + +10 + +No description available
    +$aMinor + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// For the case where all dates are within the same month// we want to make sure we have at least two ticks on the scale// since the scale want work properly otherwise

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aData + + + No description available
    +$aType + + + +1 + +No description available
    +$aMinor + + + +false + +No description available
    +$aEndPoints + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// Decision table for suitable scales// First value: Main decision point// Second value: Array of formatting depending on divisor for wanted max number of ticks. ,..

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aMin + + + No description available
    +$aMax + + + No description available
    +$aType + + + No description available
    +$aMinor + + + +false + +No description available
    +$aEndPoints + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +//=============================================================================// CLASS DateScaleUtils// Description: Help to create a manual date scale//=============================================================================

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/DigitalLED74.html b/Societes/ric/jpgraph/docs/classref/DigitalLED74.html new file mode 100755 index 00000000..74be26a9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/DigitalLED74.html @@ -0,0 +1,142 @@ +


    +(Defined in: jpgraph_led.php : 37)
     
     DigitalLED74 
     SetSupersampling() 
    Stroke() 
    StrokeNumber() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +Set level of supersampling used in the creation led digits

    + + + + +
    ArgumentDefaultDescription
    +$aSuperSampling + + + +2 + +Level of supersampling
    + +

    Description:
    Specifies the amount of oversampling that sould be used to create a smoother looking image. A higher value will generate a smoother image. + +The value used for supersampling should be an integer in the range 2-4. A higher value could be used but the increase in CPU time will not generate any perceivable improvements in image quality. + +For each integer step increased supersampling the processor time needed is multipled by 2 
    + +

    Example:

    +$led = new DigitalLED74(5);
    $led->SetSupersampling(4);
    $led->StrokeNumber('ABC123.',LEDC_RED);  +
    +

    +

    +

     

    + +// Margin in between "Led" dots

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aValStr + + + No description available
    +$aColor + + + +0 + +No description available
    +$aFileName + + + +'' + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// Margin in between "Led" dots

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aValStr + + + No description available
    +$aColor + + + +0 + +No description available
    +$aFileName + + + +'' + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Constructor for 4x7 module LED digits

    + + + + + + +
    ArgumentDefaultDescription
    +$aRadius + + + +2 + +Radius in pixel for each "led"
    +$aMargin + + + +0.6 + +Margin around the "led"
    + +

    Description:
    Instantiate a LED digit class that is used to genereta text which looks like LED digits 
    +  
    See also:
    +

    Example:

    +$led = new DigitalLED74();
    $led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_GREEN); +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/DisplayValue.html b/Societes/ric/jpgraph/docs/classref/DisplayValue.html new file mode 100755 index 00000000..5590233c --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/DisplayValue.html @@ -0,0 +1,290 @@ +


    +(Defined in: jpgraph.php : 4959)
     
     DisplayValue 
     ApplyFont() 
    HideZero() 
    SetAlign() 
    SetAngle() 
    SetColor() 
    SetFont() 
    SetFormat() 
    SetFormatCallback() 
    SetMargin() 
    Show() 
    __construct() 
    +
     

    Class usage and Overview
    Property class which is used to represent the display value for graphs. For line and bar graphs they represent the propertied of the value that can be displayed at each data point. For bars it represents the value of each bar that can be displayed at top of the bars. +

    +This class should never be used directly instead this is an internal class which is accessed through it's instance variable, for example, +

    + +$lineplot = new LinePlot($datay); +// Access the instance of DisplayValue +$lineplot->value->Show();

      +

    See also related classes:
    LinePlot and BarPlot

     


    Class Methods

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Hide zero values

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + +true + +True=Hide zero values
    + +

    Description:
    Hide labels that have zero value 
    +  
    See also:
    +

    Example:

    +$pieplot->value->HideZero(); + +

    +

    +

     

    + +Specify horizontal and vertical alignment

    + + + + + + +
    ArgumentDefaultDescription
    +$aHAlign + + + Horizontal alignment
    +$aVAlign + + + +'' + +Vertical alignment
    + +

    Description:
    Specify the alignment of the display value in relation to the data point. Possible values are 'left', 'right', 'center' 
    + +

    Example:

    +$lineplot->value->SetAlign('center');
    $lineplot->value->Show();
    +
    +

    +

    +

     

    + +Rotate the value a specified angle

    + + + + +
    ArgumentDefaultDescription
    +$aAngle + + + Angle in degrees
    + +

    Description:
    Roates the text label a number of degrees. 0 degrees is horizontal. +

    +Please rememberthat you must use TTF fonts if you need any angle other than 0 or 90 degrees (horizontal or vertical) 
    +  

    See also:
    +

    Example:

    +$bplot = new barPlot($datay);

    // Setup the values that are displayed on top of each bar
    $bplot->value->Show();

    // Must use TTF fonts if we want text at an arbitrary angle
    $bplot->value->SetFont(FF_ARIAL,FS_BOLD);
    $bplot->value->SetAngle(45);

    // Black color for positive values and darkred for negative values
    $bplot->value->SetColor("black","darkred");
    +
    +

    +

    +

     

    + +Specify color for values

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color for positive values
    +$aNegcolor + + + +'' + +Color for negative values
    + +

    Description:
    Specify the value for the labels. You can have one color for positive and one color for negative values. If no negative color value is specified it will be the same as the positive color. 
    + +

    Example:

    +// Black color for positive values and darkred for negative values
    $bplot->value->SetColor("black","darkred");
    +
    +

    +

    +

     

    + +Specify font for values

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFontFamily + + + Font family
    +$aFontStyle + + + +FS_NORMAL + +Font style
    +$aFontSize + + + +10 + +Font size
    + +

    Description:
    Specify font for display value 
    +  
    See also:
    +

    Example:

    +// Must use TTF fonts if we want text at an arbitrary angle
    $bplot->value->SetFont(FF_ARIAL,FS_BOLD);
    +
    +

    +

    +

     

    + +Specify printf() format string.

    + + + + + + +
    ArgumentDefaultDescription
    +$aFormat + + + Format for positive values
    +$aNegFormat + + + +'' + +Format for negative values
    + +

    Description:
    Specify the format string for positive and negative values. The format string follows the same riules as the standard printf() format. +

    +Please remember that if you want to format a number with a '%' sign you must use double '%%' as escape format, e.g. '%01.2.f%%' will format a number with two decimal places and a following '%' sign. + + 
    + +

    Example:

    +// Format label as floating point with 2 decimal points and
    // a dollar sign in front, e.g. '$237.56'
    $bplot->SetFormt('$%01.2f');
    +
    +

    +

    +

     

    + +Specify format callback function

    + + + + +
    ArgumentDefaultDescription
    +$aFunc + + + Name of callback function
    + +

    Description:
    Specify a function that get's called to format any value. 
    +  
    See also:
    +

    Example:

    +function barValueFormat($aLabel) {
        
    // Format '1000 english style
        
    return number_format($aLabel)
        
    // Format '1000 french style
        // return number_format($aLabel, 2, ',', ' ');
    }

    $barplot->value->SetFormatCallback('barValueFormat');
    +
    +

    +

    +

     

    + +Set nargin between value and anchor point in plot

    + + + + +
    ArgumentDefaultDescription
    +$aMargin + + + Margin in pixels
    + +

    Description:
    Specify the margin between the data point and the label. 
    + +

    Example:

    +$bplot->value->SetMargin(50); + +

    +

    +

     

    + +Show value

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + +true + +True=show value
    + +

    Description:
    Enable display of the label. If you want to display a value you must enable it since it is turned off by default. 
    + +

    Example:

    +// Enable display of each slice value
    $pieplot->value->Show();
    +
    +

    +

    +

     

    + +//===================================================// CLASS DisplayValue// Description: Used to print data values at data points//===================================================

    +
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/ErrMsgText.html b/Societes/ric/jpgraph/docs/classref/ErrMsgText.html new file mode 100755 index 00000000..0770e38e --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/ErrMsgText.html @@ -0,0 +1,22 @@ +


    +(Defined in: jpgraph_errhandler.inc.php : 24)
     
     ErrMsgText 
     __construct() 
    +
     

    Class usage and Overview
    Internal helper class to work extract localized error messages.

      +


    Class Methods

    +

     

    + +//=======================================================================// File: JPGRAPH_ERRHANDLER.PHP// Description: Error handler class together with handling of localized// error messages. All localized error messages are stored//

    +
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/ErrorLinePlot.html b/Societes/ric/jpgraph/docs/classref/ErrorLinePlot.html new file mode 100755 index 00000000..73b7469c --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/ErrorLinePlot.html @@ -0,0 +1,49 @@ +


    +(Defined in: jpgraph_error.php : 87)
     
     ErrorLinePlot  ErrorPlot 
     __construct() 
    +
     __construct() 
    +
     

    Class usage and Overview
    The error line plot is much the same as the error plot with the addition of a line between the average value of each error plot pair. The properties of the line may be accessed through the ?line? property of the ErrLinePlot, so for example to draw a red line you issue the statement + +$errlineplot->line->SetColor(?red?);

      +

    See also related classes:
    LinePlot and ErrorPlot

     


    Class Methods

    +

     

    + +//---------------// CONSTRUCTOR +

    + + + + + + +
    ArgumentDefaultDescription
    +$datay + + + No description available
    +$datax + + + +false + +X-data value
    + +

    Description:
    In the same way as for Error plots each data value is represnted by two y-values, a minimum and maximum value for each point. 
    +  
    See also:
    +

    Example:

    +$errlineplot = new ErrorLinePlot($ydata); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/ErrorPlot.html b/Societes/ric/jpgraph/docs/classref/ErrorPlot.html new file mode 100755 index 00000000..77817e83 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/ErrorPlot.html @@ -0,0 +1,55 @@ +


    Class ErrorPlot Extends Plot
    +(Defined in: jpgraph_error.php : 17)
     
     ErrorPlot  Plot 
     __construct() 
    +
     HideLegend() 
    PreScaleSetup() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetLegend() 
    SetLineWeight() 
    +
     

    Class usage and Overview
    Concrete class which implements error plots. Error plots takes two y-values for each X-value, min and max. It then marks each pair of min/max values with a vertical bar.

      +


    Class Methods

    +

     

    + +//---------------// CONSTRUCTOR +

    + + + + + + +
    ArgumentDefaultDescription
    +$datay + + + No description available
    +$datax + + + +false + +X-data
    + +

    Description:
    Create a new error plot. Each data value is specified by two y-values, a minimum and maximum value. +

    +The X-vector is optional. 
    + +

    Example:

    +$errplot = new ErrorPlot($ydata);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/FieldArrow.html b/Societes/ric/jpgraph/docs/classref/FieldArrow.html new file mode 100755 index 00000000..0ea6aeb0 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/FieldArrow.html @@ -0,0 +1,68 @@ +


    +(Defined in: jpgraph_scatter.php : 17)
     
     FieldArrow 
     SetColor() 
    SetSize() 
    +
     

    Class usage and Overview
    Internal helper class which represents the arrow head of the arrow in the field plot. +

    +Only accessed as FieldPlot::arrow

      +

    See also related classes:
    FieldPlot

     


    Class Methods

    +

     

    + +Specify color for arrow head

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color specification
    + +

    Description:
    Set color for arrow head 
    + +

    Example:

    +$fieldplot->arrow->SetColor('red'); + +

    +

    +

     

    + +Specify arrow and arrow head size

    + + + + + + +
    ArgumentDefaultDescription
    +$aSize + + + Arrow size in pixels
    +$aArrowSize + + + +2 + +Arrow head size (and shape) as integer in range (0-9)
    + +

    Description:
    Arrow size is specified in pixels (length of arrow including arrow head). The size of the arrow head is specified as an integer in the range (0,9) inclusive. 
    + +

    Example:

    +// First size argument is length (in pixels of arrow) 
    // Second size argument is roughly size of arrow. Arrow size is specified as
    // an integer in the range [0,9]
    $fp->arrow->SetSize(20,2);
    $fp->arrow->SetColor('navy');
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/FieldPlot.html b/Societes/ric/jpgraph/docs/classref/FieldPlot.html new file mode 100755 index 00000000..2cce7174 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/FieldPlot.html @@ -0,0 +1,88 @@ +


    Class FieldPlot Extends Plot
    +(Defined in: jpgraph_scatter.php : 65)
     
     FieldPlot  Plot 
     SetCallback() 
    __construct() 
    +
     HideLegend() 
    PreScaleSetup() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetLegend() 
    SetLineWeight() 
    +
     

    Class usage and Overview
    A variant of scatter plot is the so called Field Plots this is +basically a scatter plot where each scatter point is an arrow with a +direction between 0 to 359 degrees. This effectively allows the +visualization of 3 parameters at each point (x,y,angle). As an +additional bonus there is also possible to define a callback for each +scatter plot to also define the color for each point.

      +

    See also related classes:
    FieldArrow

     


    Class Methods

    +

     

    + +Specify callback for each arrow in the field plot

    + + + + +
    ArgumentDefaultDescription
    +$aFunc + + + Function name
    + +

    Description:
    Specify a callback that gets clled for each arrow in the field plot +The callback should return an array with the elements +
      +
    1. Color +
    2. Size of arrow (in pixels) +
    3. Arrow head size (as integer between0 and 9) +

    + +

    Example:

    +// Gradient. Make the arrows red at the pole and colder (blue)
    // teh further we get from the pole
    function FldCallback($x,$y,$a) {
        
    $polex=4;
        
    $poley=40;
        
    $maxr 3000;

        
    // Size and arrow size is constant
        
    $size="";
        
    $arrowsize="";

        
    // Since we have different scales we need the data points
        // to be of the same magnitude to give it a distance
        // interpretation.
        
    $x *= 10

        
    // Colors gets colder the further out we go from the center
        
    $r = ($x-$polex*10)*($x-$polex*10)+($y-$poley)*($y-$poley);
        
    $f $r/$maxr;
        if( 
    $f $f=1;
        
    $red floor((1-$f)*255);
        
    $blue floor($f*255);
        
    $color = array($red,0,$blue);
        return array(
    $color,$size,$arrowsize);
    }

    // Setup the field plot
    $fp = new FieldPlot($datay,$datax,$angle);

    // Setup formatting callback
    $fp->SetCallback('FldCallback'); +
    +

    +

    +

     

    + +Create an instance of FieldPlot

    + + + + + + + + +
    ArgumentDefaultDescription
    +$datay + + + Y-coordinate
    +$datax + + + X-coordinate
    +$angles + + + Angle
    + +

    Description:
    Create a new instance of a field plot 
    + +

    Example:

    +$fp = new FieldPlot($datay,$datax,$angle); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Footer.html b/Societes/ric/jpgraph/docs/classref/Footer.html new file mode 100755 index 00000000..fec63b94 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Footer.html @@ -0,0 +1,80 @@ +


    Class Footer
    +(Defined in: jpgraph.php : 442)
     
     Footer 
     SetMargin() 
    SetTimer() 
    +
     

    Class usage and Overview
    Represents the footer in all graphs. The footer consists of three fields accessed by properties "left", "center" and "right" representing. This lets you have footer text to the left, center and to the right. +

    +For example +

    +$graph->footer->left->Set("(C) 2002"); +

      +


    Class Methods

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aLeft + + + +3 + +No description available
    +$aRight + + + +3 + +No description available
    +$aBottom + + + +3 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aTimer + + + No description available
    +$aTimerPostString + + + +'' + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/FuncGenerator.html b/Societes/ric/jpgraph/docs/classref/FuncGenerator.html new file mode 100755 index 00000000..10195acc --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/FuncGenerator.html @@ -0,0 +1,95 @@ +


    +(Defined in: jpgraph_utils.inc.php : 17)
     
     FuncGenerator 
     E() 
    __construct() 
    +
     

    Class usage and Overview
    A utility class to help with function plots. This class supprots both ordinary one-variable plots with one dependent variable as well as polar plots. + +Basically you create an instance of this class with the function you want to plot as a string argument. The function should be created using 'x' as the independent variable. You then invoke its evaluation method 'E()' with the range for the independent variable and possibly a step size. The method then returns an array of X, and Y values that represents the plot. + +Please remember that the string should be specified with single quotes since otherwise PHP will try to interpret the variable in the string. + +For example, to specify a simple cos() plot you specify: + +$f = new FuncGenerator('cos($x)'; +

      +


    Class Methods

    +

     

    + +Evaluate a X-Y function

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aXMin + + + Min x-value
    +$aXMax + + + Max x-value
    +$aSteps + + + +50 + +Number of steps
    + +

    Description:
    Evaluate the previous specified function between the specified values. The return two arrays representing the X and Y coordinates for the function. 
    + +

    Example:

    +// Create a simple linear plot
    $f = new FuncGenerator('cos($x) * sin($x)');
    list(
    $xdata,$ydata) = $f->E(-2*M_PI2*M_PI);

    $lp1 = new LinePlot($ydata,$xdata);

    // Create a simple polar plot (a circle)
    $p = new FuncGenerator('cos($i)''sin($i)');
    list(
    $x2data,$y2data) = $f->E(-2*M_PI2*M_PI);

    $lp2 = new LinePlot($y2data,$x2data);

    //... +
    +

    +

    +

     

    + +Create a new function generator.

    + + + + + + +
    ArgumentDefaultDescription
    +$aFunc + + + Function
    +$aXFunc + + + +'' + +X-Function
    + +

    Description:
    Creates a new funciton generator. You can create both a linear plot as well as polar plot. + +For linear, one-variable plots, you must use '$x' as the independent variable. + +For polar plots you should use the index '$i' for the generating functions. + 
    + +

    Example:

    +// Create a simple linear plot
    $f = new FuncGenerator('cos($x) * sin($x)');
    list(
    $xdata,$ydata) = $f->E(-2*M_PI2*M_PI);

    $lp1 = new LinePlot($ydata,$xdata);

    // Create a simple polar plot (a circle)
    $p = new FuncGenerator('cos($i)''sin($i)');
    list(
    $x2data,$y2data) = $f->E(-2*M_PI2*M_PI);

    $lp2 = new LinePlot($y2data,$x2data);

    //...
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/GTextTable.html b/Societes/ric/jpgraph/docs/classref/GTextTable.html new file mode 100755 index 00000000..377614d2 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/GTextTable.html @@ -0,0 +1,2237 @@ +


    +(Defined in: jpgraph_table.php : 459)
     
     GTextTable 
     Init() 
    MergeCells() 
    MergeCol() 
    MergeRow() 
    Set() 
    SetAlign() 
    SetAnchorPos() 
    SetBorder() 
    SetCellAlign() 
    SetCellColor() 
    SetCellCountryFlag() 
    SetCellCSIMTarget() 
    SetCellFillColor() 
    SetCellFont() 
    SetCellImage() 
    SetCellImageConstrain() 
    SetCellNumberFormat() 
    SetCellPadding() 
    SetCellTextOrientation() 
    SetColAlign() 
    SetColColor() 
    SetColFillColor() 
    SetColFont() 
    SetColGrid() 
    SetColImage() 
    SetColNumberFormat() 
    SetColor() 
    SetColPadding() 
    SetColTextOrientation() 
    SetCSIMTarget() 
    SetFillColor() 
    SetFont() 
    SetGrid() 
    SetImage() 
    SetMinColWidth() 
    SetMinRowHeight() 
    SetNumberFormat() 
    SetPadding() 
    SetPos() 
    SetRowAlign() 
    SetRowColor() 
    SetRowFillColor() 
    SetRowFont() 
    SetRowGrid() 
    SetRowImage() 
    SetRowNumberFormat() 
    SetRowPadding() 
    SetRowTextOrientation() 
    SetScalePos() 
    SetTextOrientation() 
    toString() 
    __construct() 
    +
     

    Class usage and Overview
    When visualizing data it is often useful to have both a quick graphical view which can show high level trends and a detailed view with the exact figures. The pro-version of JpGraph now supports the creation of graphic tables in all available graph types. + +The specification of the tables data, position, fonts, alignment, colors, borders etc. is all fully flexible with an intuitive set of APIs to control the table. In this HowTo we will start by showing how to build basic tables which we will augment with more advanced formatting by introducing the formatting capabilities one by one. + +In addition to adding data tables to graphs it is also possible to create graphic tables on the fly all by its own. This has the advantage compared with HTML tables to allow users to make copies of the table while maintaining the exact formatting of the table. Figure 2. shows an example with just a graphical table

      +


    Class Methods

    +

     

    + +Initialize the size for a newly created table

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRows + + + +0 + +Number of rows in table
    +$aCols + + + +0 + +Number of columns in table
    +$aFillText + + + +'' + +Deafult fill value for each cell
    + +

    Description:
    After the table has been created the size of the table has to be established. This can either be done by a call to this method or by supplying a matrix in the call to Set(). +

    +If You plan on specifying the cells by individual calls to Set($row,$col,$value) then this method must have been called after the creation of the table. +

    +When You set the entire table content with a call to Set() with a full 2D-matrix as argument the size of the matrix will be used to determine the size of the table. 
    + +

    Example:

    +$table = new GTextTable();
    $table->Init(5,7);

    +
    +

    +

    +

     

    + +Merge cells in the specified range

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aR1 + + + Top left row
    +$aC1 + + + Top left column
    +$aR2 + + + Bottom right row
    +$aC2 + + + Bottom right column
    +$aHAlign + + + +'center' + +Horizontal alignment
    +$aVAlign + + + +'center' + +Vertical alignment
    + +

    Description:
    Merge cells in the specified range. The alignment of the merged cells cab be set by the laet two optional arguments. + +Note: To merge all cells in a specific row or column use the alternative methods MergeCol() and MergeRow() 
    +  
    See also:
    +

    Example:

    +// Merge the top 2x2 cells
    $table->MergeCells(0,0,1,1,"right"); +
    +

    +

    +

     

    + +Merge all cells in one column

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + + Column index
    +$aHAlign + + + +'center' + +Horizontal alignment
    +$aVAlign + + + +'center' + +Vertical alignment
    + +

    Description:
    Merge all cells in one column. + +Note: By default if no alignment is given the content in the merged cells will be centered both horixontally and vertically. 
    +  
    See also:
    +

    Example:

    +$table->MergeCol(3); + +

    +

    +

     

    + +Merge all cells in one row.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aHAlign + + + +'center' + +Horizontal alignment
    +$aVAlign + + + +'center' + +Vertical alignment
    + +

    Description:
    Merge all cells in one row. + +Note: By default if no alignment is given the content in the merged cells will be centered both horixontally and vertically. 
    +  
    See also:
    +

    Example:

    +$table->MergeRow(2,"right","top"); + +

    +

    +

     

    + +Set the value in cell or cells

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aArg1 + + + 2D-Array or Row index
    +$aArg2 + + + +NULL + +[Oprional] Columns index
    +$aArg3 + + + +NULL + +(Optional) Value for cell
    + +

    Description:
    This method is used to put values in a cell or initialize the table using a 2D-matrix. The method is polymorphic and can be called in two ways +
      +
    1. Set($aTableMatrix), Specify the entire table by supplying a 2D-Matrix +
    2. Set($aRow,$aCol,$aValue), Set the value in a specific cell. Note that if You use this method then the size of the table muts have been previously specified with a call to Init() +
    + +Note: If the table is initialized with an 2D-matrix then there is no need to call the Init() method since the ovberall size of the table will be set to the same as the supplied matrix. + +Note: After the entire table have beedn specified with an initial 2D-array it is of course still possible to modify/set individual values with a call to the second version of the table. + 
    +  
    See also:
    +

    Example:

    +// Create a new table from a 2D-array
    $data = array(
       array(
    "Jun",34,18,13), 
       array(
    "Jul",15,9,12));
    $table = new GTextTable();
    $table->Set($data);
    $table->SetAlign("right");
    ...


    // Create a table by setting individual cells
    $table = new GTextTable();
    $table->Init(5,7); // 5 rows by 7 column sized table

    for($i=0$i 5; ++$i) {
      for(
    $j=0$j 7; ++$j) {
        
    $table->Set(0,0,$data[$i][$j]);
      }
    }
    ...

    $table->Set(0,0,$data1);


    +
    +

    +

    +

     

    + +Set cell alignment for entire table or range of cells

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aR1HAlign + + + +null + +Top left row OR horizontal alignment
    +$aC1VAlign + + + +null + +Top left column OR vertical alignment
    +$aR2 + + + +null + +Bottom right row
    +$aC2 + + + +null + +Bottom right column
    +$aHArg + + + +null + +Horizontal alignment
    +$aVArg + + + +'center' + +Vertical alignment
    + +

    Description:
    Set cell alignment for entire table or range of cells. The alignment fcan be specifed both horizontally and vertically. + +The possible settings for horizontal alignment are +"left", "center", "right" + +Vertical alignment can be set as +"top","center","bottom" + +Note that the alignment options are specified as strings. + 
    +  
    See also:
    +

    Example:

    +// Set the default alignment for the entire table
    $table->SetAlign("right");

    // The set the first column to use left alignment
    $table->SetColAlign(0,"left");
    +
    +

    +

    +

     

    + +Specify where the anchor position of the table should be

    + + + + + + +
    ArgumentDefaultDescription
    +$aXAnchor + + + Horizontal anchor
    +$aYAnchor + + + +'top' + +Vertical anchor
    + +

    Description:
    Specify where the anchor of the table should be. By default the anchor is top left corner so that the positoin you specify for the table is taken as the top left corner. + +This can be adjusted horixontally as +"left", "center" or "right" + +Vertically it can be adjusted as +"top","center","bottom" + 
    +  
    See also:
    +

    Example:

    +// Make the position refer to the center of the table
    $table->SetAnchorPos('center','center');
    +
    +

    +

    +

     

    + +Set the color and weight on the border around the table-

    + + + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + +1 + +Weight of border
    +$aColor + + + +'black' + +Color of border
    + +

    Description:
    Set the color and weight on the border around the table. By default the border is a 1 pixel black solid line. + +Note: Specify a weight of 0 to disable the border entirely. 
    +  
    See also:
    +

    Example:

    +...
    $table->SetBorder(2,"navy");
    ...
    +
    +

    +

    +

     

    + +Set cell alignment for a specified cell.

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aCol + + + Column index
    +$aHorAlign + + + Horizontal alignment
    +$aVertAlign + + + +'bottom' + +Vertical alignment
    + +

    Description:
    Set cell alignment for a specified cell. The alignment can be specifed both horizontally and vertically. + +The possible settings for horizontal alignment are +"left", "center", "right" + +Vertical alignment can be set as +"top","center","bottom" + +Note that the alignment options are specified as strings. + 
    +  
    See also:
    +

    Example:

    +$table->SetCellAlign(2,5,'left'); + +

    +

    +

     

    + +Set font color for a specific cell

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aCol + + + Column index
    +$aColor + + + Font color
    + +

    Description:
    Set font color for a specific cell. + +Note: To set the default color for all cells use the SetColor() method. 
    +  
    See also:
    +

    Example:

    +$table->SetCellColor(3,1,'darkred'); + +

    +

    +

     

    + +Set a country flag in the background of the specified cell

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aCol + + + Column index
    +$aFlag + + + Flag specification partial name or index
    +$aScale + + + +1.0 + +Scaling factor to be used
    +$aMix + + + +100 + +Blending factor (0-100)
    +$aStdSize + + + +3 + +Which original size of flag image to use
    + +

    Description:
    Set a country flag in the background of the specified cell. + +Before this method can be used make sure that the file "jpgraph_flags.php" is included in the script. + +All supported countries can be specified by setting the '$aFlag" parameter to either +
      +
    1. Numeric index, (0-238) +
    2. Full or partial name, e.g. "norway" +
    3. The unique string index for the country +
    + +For a list of all available flags please run the file "listallflags.php" in the Example directory. +

    +The parameter "$aMix" is a value between 0-100 and specifies the blend factor for the flag. +

    +The paraneter $aStdSize specifes one of three orignal izes of flag where size can be one of +

      +
    1. FLAGSIZE1, corresponds to an original flag size of 35x35 pixels +
    2. FLAGSIZE2, corresponds to an original flag size of 60x60', +
    3. FLAGSIZE3, corresponds to an original flag size of 100x100', +
    4. FLAGSIZE4, corresponds to an original flag size of roughly 400x400 +
    + +For best result always use an original flag that is at least as big as the size that is wanted, i.e. even though the scaling factor can be used to arbitrary change the size of any of these original flags the result when up scaling is not optimal since there is a need to interpolate. By starting with a larger original image which is the downsampled the result is much better. +

    +Note 1: In order to lock either the height or the width of the flag to a specific value use the SetImageConstrain() +method. + + + 
    +  

    See also:
    +

    Example:

    +// Set one row with a number of country flags and constrain
    // the height to be 20 pixels
    $countries = array('united states','united kingdom','french republic','denmark','iceland','canada');
    $n count($countries);
    for(
    $i=0$i $n; ++$i ) {
        
    $table->SetCellCountryFlag(1,$i+1,$countries[$i]);
        
    $table->SetCellImageConstrain(1,$i+1,TIMG_HEIGHT,20);
    }
    +
    +

    +

    +

     

    + +Specify URL for CSIM target

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aCol + + + Column index
    +$aTarget + + + Target URL
    +$aAlt + + + +null + +ALT text
    + +

    Description:
    Specify URL and optional ALT text for CSIM target for the specified cell. + 
    +  
    See also:
    +

    Example:

    +$table->SetCellCSIMTarget(3,0,'detail.php','View detailes'); + +

    +

    +

     

    + +Specify background color in a cell

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aCol + + + Column index
    +$aColor + + + background color
    + +

    Description:
    Specify background color in a cell. + +Note: To set the default background fill color for all cells usde the SetFillColor() method. 
    +  
    See also:
    +

    Example:

    +// Highlight cell (7,0)
    $table->SetCellFillColor(7,0,'yellow'); +
    +

    +

    +

     

    + +Specify font family and style for a specific cell

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aCol + + + Column index
    +$aFF + + + Font family
    +$aFS + + + Font style
    +$aFSize + + + +10 + +Font size
    + +

    Description:
    Specify font family and style for a specific cell. + +Note:To set the default font for all cells use the SetFont() method. 
    +  
    See also:
    +

    Example:

    +// Highlight cell (4,1) with red on yellow background
    $table->SetCellFillColor(4,1,'yellow');
    $table->SetCellColor(4,1,'darkred');
    $table->SetCellFont(4,1,FF_ARIAL,FS_BOLD,12); +
    +

    +

    +

     

    + +Set a background image in the specified cell

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aCol + + + Column index
    +$aFile + + + Image file name
    +$aScale + + + +1.0 + +Image scale factor
    +$aMix + + + +100 + +Blending factor (0-100)
    + +

    Description:
    Set a background image in the specified cell. The image is stored in the file with the name given as the third parameter. + +The image name must end with a valid image prefix, i.e. one of ".png", ".jpg" or possibly ".gif" + +Note: To set a default background image for all cells in the table use the SetImage() method. 
    +  
    See also:
    +

    Example:

    +// Put the image 'warning.jpg' in cell (3,6) and
    // scale the image to half size
    $table->SetCellImage(3,6,'warning.jpg',0.5); +
    +

    +

    +

     

    + +Lock either the image height or width in a particular cell

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aCol + + + Column index
    +$aType + + + Specify width or height constrain
    +$aVal + + + Value of constrain
    + +

    Description:
    Use this method to locj either the width or height of the image ina a cell. The non-specified image width or height will be automatically determied so that the orignal propertion of the image is maintained. + +The $aType parameter is used to indicate if the value given should be interpretated as width or height constarin and is specifed as either +
      +
    1. TIMG_WIDTH, Interpret as width +
    2. TIMG_HEIGHT,Interpret as height +
     
    +  
    See also:
    +

    Example:

    +// Make sure image in cell (3,1) is exactlyb 20 pixels 
    // in height
    $table->SetCellImageConstrain(3,1,TIMG_HEIGHT,20); +
    +

    +

    +

     

    + +Set number format in cell

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aCol + + + Column index
    +$aF + + + Format string
    + +

    Description:
    Set number format in cell. The number format should be given in the style of printf() family format strings. A cell that contains non numeric data will not be affected in any way by this method. + +Note: It is the resposnibility of the client to make any necessary rounding of the numbers. 
    + +

    Example:

    +// Use two decimals with leading 0 on numbers
    $this->SetCellNumberFormat(3,1,'%0.2f'); +
    +

    +

    +

     

    + +Set internal cell margin

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aCol + + + Column index
    +$aPad + + + Internal cell margin (in pixels)
    + +

    Description:
    Set internal cell margins in pixels. + +By default the internal cell padding is 5 pixels. + +Note: To change the default cell padding for all cells in the table use the Setpadding() method. 
    + +

    Example:

    +// Set 8 pixel cell padding for cell (1,3)
    $table->SerCellPadding(3,1,8); +
    +

    +

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + No description available
    +$aCol + + + No description available
    +$aO + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Set cell alignment for an entire column of cells.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + + Column index
    +$aHorAlign + + + Horizontal alignment
    +$aVertAlign + + + +'bottom' + +Vertical alignment
    + +

    Description:
    Set cell alignment for an entire column of cells. The alignment can be specifed both horizontally and vertically. + +The possible settings for horizontal alignment are +"left", "center", "right" + +Vertical alignment can be set as +"top","center","bottom" + +Note that the alignment options are specified as strings. + +Note2: In order to set the default alignment for all cells in the table use the SetAlign() method. 
    +  
    See also:
    +

    Example:

    +$table->SetColAlign(3,'center'); + +

    +

    +

     

    + +Set font color for a entire column.

    + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + + Column index
    +$aColor + + + Font color
    + +

    Description:
    Set font color for a entire column. + +Note: To set the default color for all cells use the SetColor() method. 
    +  
    See also:
    +

    Example:

    +$table->SetColColor(2,'blue'); + +

    +

    +

     

    + +Specify background color in an entire column of cells

    + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + + Column index
    +$aColor + + + Background color
    + +

    Description:
    Specify background color in an entire column of cells. + +Note: To set the default background fill color for all cells usde the SetFillColor() method. 
    +  
    See also:
    +

    Example:

    +// Highlight column 3 with white text on gray bakground
    $table->SetColFillColor(3,'darkgray');
    $table->SetColColor(3,'white'); +
    +

    +

    +

     

    + +Specify font family and style for an entire column of cells

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + + Column index
    +$aFF + + + Font family
    +$aFS + + + Font style
    +$aFSize + + + +10 + +Font size
    + +

    Description:
    Specify font family and style for an entire column of cells + +Note:To set the default font for all cells use the SetFont() method. 
    +  
    See also:
    +

    Example:

    +$table->SetColFont(0,FF_ARIAL,FS_NORMAL,12); + +

    +

    +

     

    + +Set style, color and width of a specified vertical grid line

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + + Grind line to specify
    +$aWeight + + + +1 + +Width of line
    +$aColor + + + +'black' + +Color of line
    +$aStyle + + + +TGRID_SINGLE + +Grid line style (see below)
    + +

    Description:
    Set style, color and width of a specified vertical grid line in the table. The grid lines are numbered from 1 to columns-1 and from left to right. The grid lines are defined as the internal lines in the table. The outer border of the table is controlled separately with the SetBorder() method. +

    +The style for the grid lines can be one of the following three +

      +
    1. TGRID_SINGLE, Single solid line of the given color and weight +
    2. TGRID_DOUBLE, Two solid lines of the given color and weight. The distance between the lines is the same as the weight. +
    3. TGRID_DOUBLE2, Two solid lines of the given color. The first line has twice the weight as the second. This type of line is often used to mark a summation line in a table. +
    + +Note: In order to remove all grid lines in the table set the width to 0. + 
    + +

    Example:

    +$table->SetColGrid(1,1,'black',TGRID_DOUBLE2);
    +
    +

    +

    +

     

    + +Set background image for an entire column of cells

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + + Column index
    +$aFile + + + Filename of image
    +$aScale + + + +1.0 + +Scale of image
    +$aMix + + + +100 + +Blend factor for image (0-100)
    + +

    Description:
    Set background image for an entire column of cells. The should be stored in a file whos filename is given as the second parameter. The scdaling factor can be specifed as an arbitary floating point value between 0-1. +

    +The Blend factor is specified as an integer between 0 and 100 where 100 is 100% blend factor. + 
    +  

    See also:
    +

    Example:

    +$table->SetColImage(2,$imageFileNmae,0.7); + +

    +

    +

     

    + +Set number format in an entire column of cells

    + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + + Column index
    +$aF + + + Format string
    + +

    Description:
    Set number format in an entire column of cells. The number format should be given in the style of printf() family format strings. A cell that contains non numeric data will not be affected in any way by this method. + +Note: It is the resposnibility of the client to make any necessary rounding of the numbers. 
    +  
    See also:
    +

    Example:

    +// Use two decimals with leading zero
    $table->SetColNumberFormat(4,'%0.2f'); +
    +

    +

    +

     

    + +Set font color for the whole table or a range of cells.

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aArgR1 + + + Top left row OR font color
    +$aC1 + + + +null + +Top left column
    +$aR2 + + + +null + +Bottom right row
    +$aC2 + + + +null + +Bottom right column
    +$aArg + + + +null + +Font color
    + +

    Description:
    Set font color for the whol table or a range of cells. +Thie method is polymorphic an can be called in two ways +
      +
    • SetColor($aColor), Set the font color for the entire table +
    • SetColor($aR1,$aC1,$aR2,$aC2,$aColor), Set the font color for a range of cells specified by the top left and bottom right cell. +

    +  
    See also:
    +

    Example:

    +// Set the font color for the entire table
    $table->SetColor('darkgray');

    // Set the font color for the top left 2x2 cells
    $table->SetColor(0,0,1,1,'blue');
    +
    +

    +

    +

     

    + +Set internal cell margins in pixels for all cells in the specified column.

    + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + + Column index
    +$aPad + + + Internal cell margin
    + +

    Description:
    Set internal cell margins in pixels for all cells in the specified column. + +By default the internal cell padding is 5 pixels. + +Note: To change the default cell padding for all cells in the table use the Setpadding() method. 
    +  
    See also:
    +

    Example:

    +$table->SetColPadding(3,12): + +

    +

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + + No description available
    +$aO + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Set URL CSIM target for all cells in the table

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTarget + + + Target URL
    +$aAlt + + + +null + +ALT etxt
    +$aAutoTarget + + + +false + +TRUE=Append auto row and column argument
    + +

    Description:
    Set URL CSIM target for all cells in the table. If the $aAutoTarget is set to TRUE then an additional GET method argument will be appended to the base URL. This makes it possible to spcify a base URL which will then be called with the two additional arguments "row" and "col". This can be used to determien from which cell the click was made. +

    +An example will clarify this. +

    +Assume that the base URL is "target.php". If we then setup the table with + +$table->SetCSIMTarget('target.php','Click for details',true); + +then if the user clicks the cell (1,1) the url called will be "target.php?row=1&col=1", for cell (2,3) the call would be "target.php?row=2&col=3" and so on. + 
    + +

    Example:

    +// Assume that the base URL is "target.php". 
    $table->SetCSIMTarget('taregt.php','Click for details',true); +
    +

    +

    +

     

    + +Set background image for an entire range of cells or entire table

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aArgR1 + + + Top left row OR color
    +$aC1 + + + +null + +Top left column
    +$aR2 + + + +null + +Bottom right row
    +$aC2 + + + +null + +Bottom right column
    +$aArg + + + +null + +Color for range
    + +

    Description:
    Set background image for an entire range of cells or entire table. + +This method is polymorphic and can be called in two ways +
      +
    1. SetFillColor($aFillColor), Set fill color for all cells in the table +
    2. SetFillColor($aR1,$aC1,$aR2,$aC2,$aFillColor), Set fill color for a range of cells +

    +  
    See also:
    +

    Example:

    +// Set default fill color for entire table
    $table->SetFillColor('lightgray');

    // Highlight top left 2x2 cells
    $table->SetFillColor(0,0,1,1,'yellow');
    +
    +

    +

    +

     

    + +Set font for entire table or range of cells.

    +
    + +

    Description:
    Set font for entire table or range of cells. This si a polymorphic method and can be called in two ways- +
      +
    1. SetFont($aFF,$aFS,$aFSize), Set default font for entire table +
    2. SetFont($aR1,$aC1,$aR2,$aC2,$aFF,$aFS,$aFSize), Set default font for range of cells table +

    +  
    See also:
    +

    Example:

    +// Set default font for entire table
    $table->SetFont(FF_TIMES,FS_NORMAL,11);

    // Set font for the two top rows
    $table->SetFont(0,0,1,5,FF_ARIAL,FS_BOLD,12);
    +
    +

    +

    +

     

    + +Set style, color and width of all table grid lines

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + +1 + +Width of grid lines
    +$aColor + + + +'black' + +Color of grid lines
    +$aStyle + + + +TGRID_SINGLE + +Style of grid lines
    + +

    Description:
    Set style, color and width of all table grid lines. The grid lines are defined as the internal lines in the table. The outer border of the table is controlled separately with the SetBorder() method. +

    +The style for the grid lines can be one of the following three +

      +
    1. TGRID_SINGLE, Single solid line of the given color and weight +
    2. TGRID_DOUBLE, Two solid lines of the given color and weight. The distance between the lines is the same as the weight. +
    3. TGRID_DOUBLE2, Two solid lines of the given color. The first line has twice the weight as the second. This type of line is often used to mark a summation line in a table. +
    + +Note: In order to remove all grid lines in the table set the width to 0. + 
    +  
    See also:
    +

    Example:

    +// Set the default grid lines for whole table
    $table->SetGrid(1,'gray',TGRID_SOLID); +
    +

    +

    +

     

    + +Set background image for an entire range of cells or entire table

    + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFileR1 + + + Top left row OR file name
    +$aScaleC1 + + + +null + +Top left column OR scale
    +$aMixR2 + + + +null + +Bottom right row OR blend factor
    +$aC2 + + + +null + +Bottom right column
    +$aFile + + + +null + +Image filename
    +$aScale + + + +1.0 + +Image scale
    +$aMix + + + +100 + +Blend factor (0-100)
    + +

    Description:
    Set background image for an entire rnage of cells or entire table. The should be stored in a file whos filename is given as the second parameter. The scdaling factor can be specifed as an arbitary floating point value between 0-1. +

    +The Blend factor is specified as an integer between 0 and 100 where 100 is 100% blend factor. 
    +  

    See also:
    +

    Example:

    +// Set the same background image for all cells in the table
    $table->SetImage($fileName,0.8);

    // Set the background image for the top 2x2 cells
    $table->SetImage(0,0,1,1,$fileName,0.8);
    +
    +

    +

    +

     

    + +Specify minimum column width

    + + + + + + +
    ArgumentDefaultDescription
    +$aColWidth + + + Width or column index
    +$aWidth + + + +null + +Width
    + +

    Description:
    Specify minimum column width of all columns or a specific column. The method is polymorphic and can be called in two different ways. +
      +
    1. SetMinColWidth($aWidth), Set the minimum width for all columns in the table +
    2. SetMinColWidth($aColIndex,$aWidth), Set the minimum width for the specified column +
    + +Note that the column width will always be wide enough to hold the widest text or image. This means that the table will never to adny clipping of data. 
    +  
    See also:
    +

    Example:

    +// Make all columns at least 50 pixels wide
    $table->SetMinColWidth(50); +
    +

    +

    +

     

    + +Specify minimum row height of all rows or a specific row.

    + + + + + + +
    ArgumentDefaultDescription
    +$aRowHeight + + + Row index or height
    +$aHeight + + + +null + +Height
    + +

    Description:
    Specify minimum row height of all rows or a specific row. The method is polymorphic and can be called in two different ways. +
      +
    1. SetMinRowHeight($aWidth), Set the minimum height for all rows in the table +
    2. SetMinRowHeight($aRowIndex,$aWidth), Set the minimum height for the specified table row +
    + +Note that the row height will always be tall enough to hold the highest text or image. This means that the table will never to adny clipping of the data. 
    +  
    See also:
    +

    Example:

    +// Make the top row at least 40 pixels in height
    $table->SetMinRowHeight(0,40); +
    +

    +

    +

     

    + +Set number format for entire table or a range of cells.

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aArgR1 + + + Top left row OR format string
    +$aC1 + + + +null + +Top left column
    +$aR2 + + + +null + +Bottom right row
    +$aC2 + + + +null + +Bottom right column
    +$aArg + + + +null + +Format string
    + +

    Description:
    Set number format for entire table or a range of cells. The number format should be given in the style of printf() family format strings. A cell that contains non numeric data will not be affected in any way by this method. + +The method is polymorphic and can be called in two ways +
      +
    1. SetNumberFormat($aFormat), Set the number format for the entire table +
    2. SetNumberFormat($aFormat), Set the number format for a range of cells +
    + +Note: It is the resposnibility of the client to make any necessary rounding of the numbers. 
    +  
    See also:
    +

    Example:

    +$table->SetNumberFormat('%0.2f'); + +

    +

    +

     

    + +Set internal cell margins for all cells in the specified range or entire table

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aArgR1 + + + Top left row OR cell padding
    +$aC1 + + + +null + +Top left column
    +$aR2 + + + +null + +Bottom right row
    +$aC2 + + + +null + +Bottom right column
    +$aPad + + + +null + +Cell padding
    + +

    Description:
    Set internal cell margins for all cells in the specified range or entire table + +By default the internal cell padding is 5 pixels. + +This method is polymorphic and can be called in two ways +
      +
    1. SetPadding($aPadding), Set padding for all cells in the table +
    2. SetPadding($aR1,$aC1,$aR2,$aC2,$aPadding), Set padding for the specified range of cells +
    + + 
    +  
    See also:
    +

    Example:

    +// First set the default padding for all cells
    $table->SetPadding(8);

    // Set the padding much larger in the top left 2x2 cells
    $table->SetPadding(0,0,1,1,20); +
    +

    +

    +

     

    + +Set absolute pixel position the table

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + X Coordinate of top left corner
    +$aY + + + Y Coordinate of top left corner
    + +

    Description:
    Set absolute pixel position for top left corner of the table. This is the simplest way of positioning a table in the graph area. +

    +Note: The anchor position of the table can also be adjusted by the method SetAnchorPos(). By deagule the top left corner of the table is aligned with the specified coordinates. 
    +  

    See also:
    +

    Example:

    +$table->SetPos(10,10); + +

    +

    +

     

    + +Set cell alignment for an entire row of cells.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aHorAlign + + + Horizontal alignment
    +$aVertAlign + + + +'bottom' + +Vertical alignment
    + +

    Description:
    Set cell alignment for an entire row of cells. The alignment can be specifed both horizontally and vertically. + +The possible settings for horizontal alignment are +"left", "center", "right" + +Vertical alignment can be set as +"top","center","bottom" + +Note that the alignment options are specified as strings. + +Note2: In order to set the default alignment for all cells in the table use the SetAlign() method. 
    +  
    See also:
    +

    Example:

    +$table->SetRowAlign(6,'right'); + +

    +

    +

     

    + +Set font color for an entire row.

    + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aColor + + + Font color
    + +

    Description:
    Set font color for an entire row. + +Note: To set the default color for all cells use the SetColor() method. 
    +  
    See also:
    +

    Example:

    +$table->SetRowColor(5,'red'); + +

    +

    +

     

    + +Specify background color in an entire row of cells.

    + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aColor + + + Background color
    + +

    Description:
    Specify background color in an entire row of cells. + +Note: To set the default background fill color for all cells usde the SetFillColor() method. 
    +  
    See also:
    +

    Example:

    +// Highlight row 0 with white text on gray bakground
    $table->SetRowFillColor(0,'darkgray');
    $table->SetRowColor(0,'white'); +
    +

    +

    +

     

    + +Specify font family and style for an entire row of cells

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aFF + + + Font family
    +$aFS + + + Font style
    +$aFSize + + + +10 + +Font size
    + +

    Description:
    Specify font family and style for an entire row of cells + +Note:To set the default font for all cells use the SetFont() method. 
    +  
    See also:
    +

    Example:

    +$table->SetRowFont(0,FF_ARIAL,FS_NORMAL,12); + +

    +

    +

     

    + +Set style, color and width of a specified horizontal grid line

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Grind line to specify
    +$aWeight + + + +1 + +Width of line
    +$aColor + + + +'black' + +Color of line
    +$aStyle + + + +TGRID_SINGLE + +Grid line style (see below)
    + +

    Description:
    Set style, color and width of a specified horizontal grid line in the table. The grid lines are numbered from 1 to columns-1 and from top to bottom. The grid lines are defined as the internal lines in the table. The outer border of the table is controlled separately with the SetBorder() method. +

    +The style for the grid lines can be one of the following three +

      +
    1. TGRID_SINGLE, Single solid line of the given color and weight +
    2. TGRID_DOUBLE, Two solid lines of the given color and weight. The distance between the lines is the same as the weight. +
    3. TGRID_DOUBLE2, Two solid lines of the given color. The first line has twice the weight as the second. This type of line is often used to mark a summation line in a table. +
    + +Note: In order to remove a grid line in the table set the width to 0. + 
    +  
    See also:
    +

    Example:

    +// Add a double line of width=2 to mark the summation row
    // in a atable
    $table->SetRowGrid(4,2,'black',TGRID_DOUBLE2); +
    +

    +

    +

     

    + +Set background image for an entire row of cells

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aFile + + + Filename of image
    +$aScale + + + +1.0 + +Scale of image
    +$aMix + + + +100 + +Blend factor for image (0-100)
    + +

    Description:
    Set background image for an entire row of cells. The should be stored in a file whos filename is given as the second parameter. The scdaling factor can be specifed as an arbitary floating point value between 0-1. +

    +The Blend factor is specified as an integer between 0 and 100 where 100 is 100% blend factor. + 
    +  

    See also:
    +

    Example:

    +$table->SetRowImage(1,$fileName,0.5,60); + +

    +

    +

     

    + +Set number format in an entire row of cells.

    + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aF + + + Format string
    + +

    Description:
    Set number format in an entire row of cells. The number format should be given in the style of printf() family format strings. A cell that contains non numeric data will not be affected in any way by this method. + +Note: It is the resposnibility of the client to make any necessary rounding of the numbers. 
    +  
    See also:
    +

    Example:

    +// Use 2 decimals with leading zero
    $table->SetRowNumberFormat('%0.2f'); +
    +

    +

    +

     

    + +Set internal cell margins in pixels for all cells in the specified row

    + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Row index
    +$aPad + + + Internal cell margin
    + +

    Description:
    Set internal cell margins in pixels for all cells in the specified row. + +By default the internal cell padding is 5 pixels. + +Note: To change the default cell padding for all cells in the table use the Setpadding() method. 
    +  
    See also:
    +

    Example:

    +$table->SetRowPadding(4,12); + +

    +

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + No description available
    +$aO + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Set position of the entire table on the graphn using the current X,Y sclae

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + X-position according to current scle
    +$aY + + + Y position according to curent scale
    + +

    Description:
    This method makes it possible to place the table at specific scale coordinates within the plot area of the graph. This could for example be used to place a small table at each of the data points in a line graph (or some other type of plot) to show fyrther details. +

    +Note: The anchor position of the table can also be adjusted by the method SetAnchorPos(). By deagule the top left corner of the table is aligned with the specified coordinates. 
    +  

    See also:
    +

    Example:

    +// Create the tables and position them at each data point
    // In the line plot
    // The data for each table is held in $tabledata[] array
    // and the plot data is available in $datay[] array.

    $n count($datay);
    $table=array();
    for(
    $i=0$i $n; ++$i ) {
        
    $table[$i] = new GTextTable();
        
    $table[$i]->Set($tabledata[$i]);
        
    $table[$i]->SetScalePos($i,$datay[$i]);
        
    $table[$i]->SetFillColor('lightyellow@0.5');
        
    // We center all tables on the data point
        
    $table[$i]->SetAnchorPos('center','middle');
        
    $graph->Add($table[$i]);
    }
    ...
    // Create the line
    $l1 = new LinePlot($datay);
    $l1->SetWeight(2);
    $graph->Add($l1);
    ...
    +
    +

    +

    +

     

    + +

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aArgR1 + + + No description available
    +$aC1 + + + +null + +No description available
    +$aR2 + + + +null + +No description available
    +$aC2 + + + +null + +No description available
    +$aO + + + +null + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Return basic HTML version of the table

    +
    + +

    Description:
    Return basic HTML version of the table. Note that this is just a very basic representation of the table without any of the formatting applied the table. 
    + +

    Example:

    +$str $table->toString(); + +

    +

    +

     

    + +Create a new Graphic text table

    +
    + +

    Description:
    Create a new Graphic text table. The next call should either be to specify a value for the table (using GTextTable::Set() ) or a call to GTextTable::Init() to specify the size of table. 
    +  
    See also:
    +

    Example:

    +$table = new GTextTable();
    $table->Set($tableData);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/GanttActivityInfo.html b/Societes/ric/jpgraph/docs/classref/GanttActivityInfo.html new file mode 100755 index 00000000..ba333c5d --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/GanttActivityInfo.html @@ -0,0 +1,281 @@ +


    +(Defined in: jpgraph_gantt.php : 142)
     
     GanttActivityInfo 
     Hide() 
    SetBackgroundColor() 
    SetColor() 
    SetColTitles() 
    SetColumnMargin() 
    SetFont() 
    SetFontColor() 
    SetHeaderAlign() 
    SetStyle() 
    Show() 
    +
     

    Class usage and Overview
    This class is responsible for handling the titles of the columns in the left section of the Gantt graph, i.e. the information columns for each activity. +

    +It is instantiated in the scale and is accessed through the Gantt scale for example as in +

    + +$graph->scale->actinfo->SetColTitles( + array('Note','Name','Duration','Start','Finish'),array(30,100)); +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->scale->actinfo->vgrid->SetStyle('solid'); +$graph->scale->actinfo->vgrid->SetColor('gray'); + +

    +It is optional to use titles for the columns, so if you don't want to use titles you never have to add the above lines to a Gantt graph (but it sure looks nicer if you do ... ) +

      +


    Class Methods

    +

     

    + +Hide titles

    + + + + +
    ArgumentDefaultDescription
    +$aF + + + +true + +TRUE=Hide titles
    + +

    Description:
    Hide titles 
    + +

    Example:

    +// Hide the titles
    $graph->scale->actinfo->Hide(); +
    +

    +

    +

     

    + +Specify backgound color for titles

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color specification
    + +

    Description:
    Specify backgound color for titles 
    + +

    Example:

    +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); + +

    +

    +

     

    + +Specify color of vertical dividers between each title column

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color specification
    + +

    Description:
    Specify color of vertical dividers between each title column 
    + +

    Example:

    +$graph->scale->actinfo->SetColor('navy'); + +

    +

    +

     

    + +Specify texts to be used as titles

    + + + + + + +
    ArgumentDefaultDescription
    +$aTitles + + + Array of titles
    +$aWidth + + + +null + +Optional width for each column
    + +

    Description:
    Specify texts to be used as titles. The columns automatically becoms wide enough to hold the widest text in any columns. However you can also specify a specific width of each column by supplying an array of widths. However, the width can never be made smaller than the width of the texts, just larger. +

    +It is perfectly legal to just specify the explicit width of the first few columns and have the rest of them become automatically sized. See eamplebelow. + 
    + +

    Example:

    +// Specify some titles and explicitely set the size of the
    // first two columns.
    $graph->scale->actinfo->SetColTitles(
        array(
    'Note','Name','Duration','Start','Finish'),array(30,100));
    +
    +

    +

    +

     

    + +Specify extra margin to the left and right of the text in each column

    + + + + + + +
    ArgumentDefaultDescription
    +$aLeft + + + Left margin (in pixels)
    +$aRight + + + Right margin (in pixels)
    + +

    Description:
    Specify extra margin to the left and right of the text in each column 
    + +

    Example:

    +$graph->scale->actinfo->SetColumnMargin(30,30);
    +
    +

    +

    +

     

    + +Specify title font

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFFamily + + + Font family
    +$aFStyle + + + +FS_NORMAL + +Font style
    +$aFSize + + + +10 + +Font size
    + +

    Description:
    Specify title font 
    + +

    Example:

    +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); + +

    +

    +

     

    + +Specify title font color

    + + + + +
    ArgumentDefaultDescription
    +$aFontColor + + + Color specification
    + +

    Description:
    Specify title font color 
    + +

    Example:

    +$graph->scale->actinfo->SetFontColor('navy'); + +

    +

    +

     

    + +Adjust headers left, right or centered

    + + + + +
    ArgumentDefaultDescription
    +$aAlign + + + Header alignment
    + +

    Description:
    Adjust headers left, right or centered. By default headers are centered. 
    + +

    Example:

    +$graph->scale->actinfo->SetHeaderAlign('left'); + +

    +

    +

     

    + +Enable 3D header style

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + + 1=3D style
    + +

    Description:
    Enable 3D header style. This is enabled by default. 
    + +

    Example:

    +// No 3D style for titles
    $graph->scale->actinfo->SetStyle(0); +
    +

    +

    +

     

    + +Show titles

    + + + + +
    ArgumentDefaultDescription
    +$aF + + + +true + +TRUE=Show headers
    + +

    Description:
    Show titles. If you specify titles they are by default displayed. 
    +  
    See also:
    +

    Example:

    +// Hide the titles
    $graph->scale->actinfo->Show(false); +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/GanttBar.html b/Societes/ric/jpgraph/docs/classref/GanttBar.html new file mode 100755 index 00000000..ea08bddc --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/GanttBar.html @@ -0,0 +1,274 @@ +


    +(Defined in: jpgraph_gantt.php : 3192)
     
     GanttBar  GanttPlotObject 
     SetBreakStyle() 
    SetColor() 
    SetFillColor() 
    SetHeight() 
    SetPattern() 
    SetShadow() 
    __construct() 
    +
     SetCaptionMargin() 
    SetConstrain() 
    SetCSIMAlt() 
    SetCSIMTarget() 
    SetLabelLeftMargin() 
    +
     

    Class usage and Overview
    This class represents each activity bar. The activity bars can then be added to a GanttChart vi the GanttGraph::Add()

      +


    Class Methods

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    +$aLineStyle + + + +'dotted' + +No description available
    +$aLineWeight + + + +1 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify frame color for the activity bar

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color for gantt bar
    + +

    Description:
    Specify frame color for the activity bar. 
    + +

    Example:

    +$bar->SetColor('orange');
    +
    +

    +

    +

     

    + +Specify fill color for activity bar.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Fill color
    + +

    Description:
    Specify fill color for activity bar. +

    +Note: It is perfectly possible to use both a background color as weel as a pattern. + 
    + +

    Example:

    +$bar->SetPattern(BAND_RDIAG,"yellow");
    $bar->SetFillColor("red");
    +
    +

    +

    +

     

    + +Set height for the bar.

    + + + + +
    ArgumentDefaultDescription
    +$aHeight + + + Height specification for bars
    + +

    Description:
    Specify height of the activity bar. The height can be specified as either as fraction (0.0 to 1.0) or as an absolute value (1 to 200). In the first case the height is interpreted as the fraction of the row height and in the second case as an absolute height in pixels. 
    + +

    Example:

    +$bar->SetHeight(0.6);
    +
    +

    +

    +

     

    + +Specify what pattern to use for the activity bars.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aPattern + + + Pattern specification
    +$aColor + + + +"blue" + +Pattern color
    +$aDensity + + + +95 + +Density
    + +

    Description:
    The following patterns are currently implemented: +
      +
    1. GANTT_RDIAG, Right diagonal lines +
    2. GANTT_LDIAG, Left diagonal lines +
    3. GANTT_SOLID, Solid one color +
    4. GANTT_LVERT, Vertical lines +
    5. GANTT_LHOR, Horizontal lines +
    6. GANTT_VLINE, Vertical lines +
    7. GANTT_HLINE, Horizontal lines +
    8. GANTT_3DPLANE, A 3D plane +
    9. GANTT_HVCROSS, Crosses +
    10. GANTT_DIAGCROSS, Diagonal crosses +

    +  
    See also:
    +

    Example:

    +$bar->SetPattern(BAND_RDIAG,"yellow");
    $bar->SetFillColor("red"); +
    +

    +

    +

     

    + +Add a drop shadow to the bar.

    + + + + + + +
    ArgumentDefaultDescription
    +$aShadow + + + +true + +True=Add drop shadow to bars
    +$aColor + + + +"gray" + +Colro fo shadow
    + +

    Description:
    Add a drop shadow to the bar. + 
    + +

    Example:

    +$bar->SetShadow(); + +

    +

    +

     

    + +Create a new activity bar.

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aPos + + + Vertical position (row)
    +$aLabel + + + Text label
    +$aStart + + + Start date
    +$aEnd + + + End date
    +$aCaption + + + +"" + +Caption string for bar
    +$aHeightFactor + + + +0.6 + +Height factor
    + +

    Description:
    Create a new activity bar. An activity bar is created by specifyin : +
      +
    1. The row in gentt chart to draw the activity bar in +
    2. Specify a label(titel) for the activity. +
    3. A start date +
    4. An end date +
    5. A caption which is a string that gets stroked to the right of the activity bar. +
    6. Height as either an asbolute value or as a fraction of the available row height. +

    + +

    Example:

    +$bar = new GanttBar(4,"Group 2""2001-11-30","2001-12-22","[5%]",10); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/GanttGraph.html b/Societes/ric/jpgraph/docs/classref/GanttGraph.html new file mode 100755 index 00000000..15a23eed --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/GanttGraph.html @@ -0,0 +1,454 @@ +


    Class GanttGraph Extends Graph
    +(Defined in: jpgraph_gantt.php : 331)
     
     GanttGraph  Graph 
     Add() 
    CreateSimple() 
    SetDateRange() 
    SetLabelVMarginFactor() 
    SetSimpleFont() 
    SetSimpleStyle() 
    SetVMarginFactor() 
    SetZoomFactor() 
    ShowHeaders() 
    Stroke() 
    StrokeTexts() 
    __construct() 
    +
     Add() 
    AddBand() 
    AddLine() 
    AddText() 
    AddY() 
    AddY2() 
    CheckCSIMCache() 
    GetCSIMImgHTML() 
    GetHTMLImageMap() 
    Set3DPerspective() 
    Set90AndMargin() 
    SetAlphaBlending() 
    SetAngle() 
    SetAxisLabelBackground() 
    SetAxisStyle() 
    SetBackgroundCFlag() 
    SetBackgroundCountryFlag() 
    SetBackgroundGradient() 
    SetBackgroundImage() 
    SetBackgroundImageMix() 
    SetBackgroundImagePos() 
    SetBox() 
    SetClipping() 
    SetColor() 
    SetCSIMImgAlt() 
    SetFrame() 
    SetFrameBevel() 
    SetGridDepth() 
    SetIconDepth() 
    SetImgFormat() 
    SetMargin() 
    SetMarginColor() 
    SetScale() 
    SetShadow() 
    SetTextScaleAbsCenterOff() 
    SetTickDensity() 
    SetTitleBackground() 
    SetTitleBackgroundFillStyle() 
    SetUserFont() 
    SetUserFont1() 
    SetUserFont2() 
    SetUserFont3() 
    SetY2OrderBack() 
    SetY2Scale() 
    SetYDeltaDist() 
    SetYScale() 
    Stroke() 
    StrokeCSIM() 
    StrokeCSIMImage() 
    StrokeFrameBackground() 
    StrokeStore() 
    __construct() 
    +
     

    Class usage and Overview
    Create a Gantt graph. The Gantt graph can then be built up by adding activity bars and milestones.

      +

    See also related classes:
    GanttBar, GanttVLine and MileStone

     


    Class Methods

    +

     

    + +Add a new Gantt object

    + + + + +
    ArgumentDefaultDescription
    +$aObject + + + Gantt plot object
    + +

    Description:
    Add a gantt object to the graph. A gantt object is an instance of either: +
      +
    • GanttBar +
    • MileStone +
    • GanttVLine +
     
    + +

    Example:

    +$vline = new GanttVLine("2002-02-28");
    $vline->title->Set("2002-02-28");
    $vline->title->SetFont(FF_FONT1,FS_BOLD,10);
    $graph->Add($vline);
    +
    +

    +

    +

     

    + +A utility function to help create the Gantt charts

    + + + + + + + + +
    ArgumentDefaultDescription
    +$data + + + Gantt bar specification (See below)
    +$constrains + + + +array() + +Constrain specification (see below)
    +$progress + + + +array() + +Progress specification (see below)
    + +

    Description:
    For a simple Gantt graphs this will simplify it's creation. The idea is that this method accepts a number of data arrays which specifies the activities in the Gantt graph. +

    +Description of arguments
    +

      +
    • $data. Specifies the basic type of activity. Eac entry is an array with the following content: +
        +
      1. Row where activity whould be +
      2. Type of activity, can be one of ACTYPE_NORMAL, ACTYPE_GROUP, ACTYUPE_MILESTONE +
      3. Activity title +
      4. Start date +
      5. End date +
      6. Caption text +
      +
    • $constrains. Specifies potential constrain links between activities each entry is an array with the following content +
        +
      1. From activity (specified by row) +
      2. To activity (specified by row) +
      3. Constrain type, (e.g CONSTRAIN_ENDSTART) +
      +
    • $progress. Specify a potential progress bar for each activity. Each entry is an array with the following content +
        +
      1. Activity specification (by row) +
      2. Progress as a fraction in the range [0,1] +
      +
    + + 
    +  
    See also:
    +

    Example:

    +$data = array(
      array(
    0,ACTYPE_GROUP,    "Phase 1",  "2001-10-26","2001-11-23",''),
      array(
    1,ACTYPE_NORMAL,   "  Label 2",  "2001-10-26","2001-11-16",''),
      array(
    2,ACTYPE_NORMAL,   "  Label 3""2001-11-20","2001-11-22",''),
      array(
    3,ACTYPE_MILESTONE,"  Phase 1 Done""2001-11-23",'M2') );

    // The constrains between the activities
    $constrains = array(array(1,2,CONSTRAIN_ENDSTART),
                array(
    2,3,CONSTRAIN_STARTSTART));

    $progress = array(array(1,0.4));

    // Create the basic graph
    $graph = new GanttGraph();
    $graph->title->Set("Example with grouping and constrains");

    // Setup scale
    $graph->ShowHeaders(GANTT_HYEAR GANTT_HMONTH GANTT_HDAY GANTT_HWEEK);
    $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR);

    // Add the specified activities
    $graph->CreateSimple($data,$constrains,$progress);

    // .. and stroke the graph
    $graph->Stroke(); +
    +

    +

    +

     

    + +Specify date range for Gantt chart.

    + + + + + + +
    ArgumentDefaultDescription
    +$aStart + + + Start date
    +$aEnd + + + End date
    + +

    Description:
    Specify the date range for Gantt graphs. If this is not set it will be automtically determined from the input data. +

    +All gantt chart objects, like bar activities, will be clipped to the spcified date range should they happen to be wider then the specified range. +

    +The date is specified as a normal date string according to the chosen locale. + 
    + +

    Example:

    +$graph->SetDateRange('2001-11-22','2002-1-24');
    +
    +

    +

    +

     

    + +Set margin vertical factor.

    + + + + +
    ArgumentDefaultDescription
    +$aVal + + + Margin factor
    + +

    Description:
    Specify the fraction of the font height that should be added as vertical margin between the labels. 
    + +

    Example:

    +$ganttgraph->SetLabelVMarginFactor(0.7); + +

    +

    +

     

    + +Specify font for simplified Gantt graph

    + + + + + + +
    ArgumentDefaultDescription
    +$aFont + + + Font family
    +$aSize + + + Font size
    + +

    Description:
    Specify font for simplified Gantt graph constructed with CreateSimple 
    +  
    See also:
    +

    Example:

    +$ganttgraph->SetSimpleFont(FF_FONT2); + +

    +

    +

     

    + +Specify style parameters for graphs constructed with CreateSimple

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aBand + + + Patern style
    +$aColor + + + Pattern color
    +$aBkgColor + + + Pattern background color
    + +

    Description:
    Specify looks for bars in Gantt graph when the gantt chart is created with CreateSimple. +

    +The pattern style can be one of + +

      +
    1. GANTT_RDIAG, Right diagonal lines +
    2. GANTT_LDIAG, Left diagonal lines +
    3. GANTT_SOLID, Solid one color +
    4. GANTT_LVERT, Vertical lines +
    5. GANTT_LHOR, Horizontal lines +
    6. GANTT_VLINE, Vertical lines +
    7. GANTT_HLINE, Horizontal lines +
    8. GANTT_3DPLANE, A 3D plane +
    9. GANTT_HVCROSS, Crosses +
    10. GANTT_DIAGCROSS, Diagonal crosses +

    +  
    See also:
    +

    Example:

    +$ganttgraph->SetSimpleStyle(GANTT_SOLID,'orange','orange'); + +

    +

    +

     

    + +Specify the margin factor for lines in the gantt graph

    + + + + +
    ArgumentDefaultDescription
    +$aVal + + + Vertical margin factor
    + +

    Description:
    Specify the margin factor for lines in the Gantt graph. A factor of 1 makes each line take just as much space as it needs. A factor of 1.5 makes it 1.5 linmes apart and a factor of 2 makes it double-line spacing and so on. +

    +Hint: When using icon in titles it is usually a good idea to use a margin factor > 1 + 
    +  

    See also:
    +

    Example:

    +$graph->SetVMarginFactor(2); + +

    +

    +

     

    + +// Set user specified scale zoom factor when auto sizing is used

    + + + + +
    ArgumentDefaultDescription
    +$aZoom + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Determine what headers/scales to display.

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + Logic OR of flags to specify what headers should be displayed.
    + +

    Description:
    Specify what headers should be displayed on the Gantt charts. Possible headers are: +
      +
    • GANTT_HYEAR +
    • GANTT_HMONTH +
    • GANTT_HWEEK +
    • GANTT_HDAY +
    • GANTT_HHOUR +
    • GANTT_HMIN +
    +To specify multiple header you just bitwise OR the wanted number of headers together. + 
    + +

    Example:

    +// Show all headers
    $graph->ShowHeaders(GANTT_HYEAR GANTT_HMONTH GANTT_HDAY GANTT_HWEEK); +
    +

    +

    +

     

    + +Internal. Stroke the gantt chart.

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + + +"" + +Filename to stroke image to
    + +

    Description:
    Internal. Stroke the gantt chart. If a filename is specified then the graph will be stroked to that file and will not be sent back to the browser. +

    +This should as usual be the last method called in your script. + 
    +  

    See also:
    +

    Example:

    +$ganttgraph->Stroke();
    +
    +

    +

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +Create a new GanttGraph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + +0 + +Width of graph
    +$aHeight + + + +0 + +Height of graph
    +$aCachedName + + + +"" + +Filename to use if cache is enables
    +$aTimeOut + + + +0 + +Timeout in minutes
    +$aInline + + + +true + +True=Stream back to browser
    + +

    Description:
    Construct a new GanttGraph. This differs slightly from the standard Graph or PlotGraph in that you are not required to specify width and height of the graph. Instead these can be left out and will be automatically be determined. +

    +As a further refinement you can just specify width and have the height be automtically determined. + 
    +  

    See also:
    +

    Example:

    +// Setup Gantt graph
    $graph = new GanttGraph();
    $graph->SetShadow();
    $graph->SetBox();

    // Only show part of the Gantt
    $graph->SetDateRange('2001-11-22','2002-1-24');
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/GanttPlotObject.html b/Societes/ric/jpgraph/docs/classref/GanttPlotObject.html new file mode 100755 index 00000000..d0930a0b --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/GanttPlotObject.html @@ -0,0 +1,199 @@ +


    +(Defined in: jpgraph_gantt.php : 2987)
     
     GanttPlotObject 
     SetCaptionMargin() 
    SetConstrain() 
    SetCSIMAlt() 
    SetCSIMTarget() 
    SetLabelLeftMargin() 
    +
     

    Class usage and Overview
    Abstract base class to hold common properties for all objects that are drawn on the Gantt plot like activity bars, milestones, vertical markers. +

    +Internal method that can't be instantiated directly. Used to capture the common properties of all objects that can be added to the Ganttgraph, i.e. GanttBar, MileStones GanttVLine. + +

      +

    See also related classes:
    GanttGraph, GanttBar, GanttVLine and MileStone

     


    Class Methods

    +

     

    + +Specify margin (in pixels) between object and caption string

    + + + + +
    ArgumentDefaultDescription
    +$aMarg + + + Margin in pixels
    + +

    Description:
    Specify margin (in pixels) between object and caption string 
    + +

    Example:

    +$ms->SetCaptionMargin(20);
    +
    +

    +

    +

     

    + +Specify a constrain link between this object and another

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + Gantt row where tarhet for constrain is
    +$aType + + + Type of constrain
    +$aColor + + + +'black' + +Color of constrain
    +$aArrowSize + + + +ARROW_S2 + +Size of ending arrow
    +$aArrowType + + + +ARROWT_SOLID + +Type of arrow
    + +

    Description:
    Specify a constrain link between this object and another. The possible constrain types are +
      +
    • CONSTRAIN_STARTSTART +
    • CONSTRAIN_STARTEND +
    • CONSTRAIN_ENDSTART +
    • CONSTRAIN_ENDEND +
    +

    +The possible arrow sizes are +

      +
    • ARROW_S1, smallest +
    • ARROW_S2, (default) +
    • ARROW_S3 +
    • ARROW_S4 +
    • ARROW_S5, largest +
    + +

    +Type of arrow can be either of +

      +
    • ARROWT_SOLID +
    • ARROWT_OPEN +
     
    + +

    Example:

    +// Add a constrain from the end of this activity to 
    // the start of the activity on row 2
    $bar->SetConstrain(2,CONSTRAIN_ENDSTART);
    +
    +

    +

    +

     

    + +Specify ALT-tag text for hotspot

    + + + + +
    ArgumentDefaultDescription
    +$aAlt + + + Alt text
    + +

    Description:
    The ALT text used in conjunction with image map is handled slightly diffrent between different browsers. Most browser show this text if you let the mouse pointer hoover over a hotspot in the image for 1 or 2 seconds. +

    +Note: You must have specified a CSIM atrget for this to have any effect. 
    +  

    See also:
    +

    Example:

    +$bar->SetCSIMAlt('Main activity'); + +

    +

    +

     

    + +Specify URL when object is used in a CSIM

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTarget + + + Target URL
    +$aAlt + + + +'' + +Alt texts
    +$aWinTarget + + + +'' + +No description available
    + +

    Description:
    Used to specify the target URL for for a hotspot 
    +  
    See also:
    +

    Example:

    +$bar->SetCSIMTarget('http://localhost/show_details.php'); + +

    +

    +

     

    + +Specify offset (in pixels) for the title of this object.

    + + + + +
    ArgumentDefaultDescription
    +$aOff + + + Offset in pixels
    + +

    Description:
    Specify offset (in pixels) for the title of this object 
    + +

    Example:

    +$ms->SetLabelLeftMargin(20);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/GanttScale.html b/Societes/ric/jpgraph/docs/classref/GanttScale.html new file mode 100755 index 00000000..4291c5fe --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/GanttScale.html @@ -0,0 +1,173 @@ +


    +(Defined in: jpgraph_gantt.php : 1890)
     
     GanttScale 
     SetDateLocale() 
    SetRange() 
    SetTableTitleBackground() 
    SetVertLayout() 
    SetWeekStart() 
    UseWeekendBackground() 
    +
     

    Class usage and Overview
    Internal class to represent the scale used for Gantt graphs. + +The scale is accessible as GanttGraph::scale + +The following public available subobjects are available + +
      +
    • tableTitle (Instance of class TextProperty) +
    • divider (Instance of class LineProperty) +
    • actinfo (Instance of class GanttActivityInfo) +
    • year (Instance of HeaderProperty) +
    • month (Instance of HeaderProperty) +
    • week (Instance of HeaderProperty) +
    • day (Instance of HeaderProperty) +
    • hour (Instance of HeaderProperty) +
    • minute (Instance of HeaderProperty) +

      +

    See also related classes:
    GanttGraph, HeaderProperty, GanttActivityInfo and TextProperty

     


    Class Methods

    +

     

    + +Specify locale to use for scale.

    + + + + +
    ArgumentDefaultDescription
    +$aLocale + + + String to specify locale
    + +

    Description:
    Specify locale to use for scale. If no locale is specified then the default locale for the installed system will be used. 
    +  
    See also:
    +

    Example:

    +$ganttgraph->scale->SetDateLocale('US_en'); + +

    +

    +

     

    + +Specify date range for scale.

    + + + + + + +
    ArgumentDefaultDescription
    +$aMin + + + Min date
    +$aMax + + + Max date
    + +

    Description:
    Specify scale min and max date either as timestamp or as date strings. Always round to the nearest week boundary 
    + +

    Example:

    +$ganttgraph->scale->SetRange("2002-11-23""2003-03-31");
    +
    +

    +

    +

     

    + +Specify background for the table title area.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Specify background for the table title area (upper left corner of the table). 
    + +

    Example:

    +$ganttgraph->scale->SetTableTitleBackground('lightblue'); + +

    +

    +

     

    + +Specify the vertical layout fro rows.

    + + + + +
    ArgumentDefaultDescription
    +$aLayout + + + Vertical layout parameter
    + +

    Description:
    Should the layout be from top or even. Valid parameters are +
      +
    • GANTT_EVEN, Spread out the rows even over the whole height of the plot. +
    • GANTT_FROMTOP, Use the minimum height required for the rows starting from top. +
    + +Note that if you use auto-sizing of the Gantt chart these parameters have little effect since the total height of the image will always be so that all rows fit exactly. + 
    + +

    Example:

    +$granntgraph->scale->SetVertLayout(GANTT_FROMTOP); + +

    +

    +

     

    + +Specify which weekday should start the week

    + + + + +
    ArgumentDefaultDescription
    +$aStartDay + + + Weekday, (0-6)
    + +

    Description:
    Which day should the week start? +0==Sun, 1==Monday, 2==Tuesday etc + +By default weeks start on Mondays. 
    +  
    See also:
    +

    Example:

    +$granttgraph->SetWeekStart(1); + +

    +

    +

     

    + +Determine if the background color for weekends in the scale should extend down in the plot area.

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + + True=Use the weekend background color in the ganttgraph
    + +

    Description:
    Determine if the background color for weekends in the scale should extend down in the plot area. 
    + +

    Example:

    +$ganttgraph->scale->USeWeekendBackground();
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/GanttVLine.html b/Societes/ric/jpgraph/docs/classref/GanttVLine.html new file mode 100755 index 00000000..ebf1cbc4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/GanttVLine.html @@ -0,0 +1,145 @@ +


    +(Defined in: jpgraph_gantt.php : 3567)
     
     GanttVLine  GanttPlotObject 
     SetDayOffset() 
    SetTitleMargin() 
    SetWeight() 
    __construct() 
    +
     SetCaptionMargin() 
    SetConstrain() 
    SetCSIMAlt() 
    SetCSIMTarget() 
    SetLabelLeftMargin() 
    +
     

    Class usage and Overview
    This class represents a vertical line on the gantt scale. It can for example be used to illustrate the boundaries between different phases in a project plan. + +To access the title property just use the 'title' property of the line, for example + +$line = new GantVLine(.....); +$line->title->SetFont(FF_FONT1, FS_BOLD); + +$ganttgraph->Add($line); +

      +

    See also related classes:
    GanttGraph, GanttBar and MileStone

     


    Class Methods

    +

     

    + +Specify where in the single day the line sould be drawn.

    + + + + +
    ArgumentDefaultDescription
    +$aOff + + + +0.5 + +Fraction of day (0,1)
    + +

    Description:
    Specify where in the single day the line sould be drawn.  
    + +

    Example:

    +// Draw line in the middle of the day
    $line->SetDayOffset(0.5); +
    +

    +

    +

     

    + +Set distance between end of line and title.

    + + + + +
    ArgumentDefaultDescription
    +$aMarg + + + Margin in pixels
    + +

    Description:
    Set distance between end of line and title. 
    + +

    Example:

    +$line->SetTitleMargin(20); + +

    +

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Create a new vertical line in the Gantt graph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aDate + + + Date where the line should be
    +$aTitle + + + +"" + +Title of line
    +$aColor + + + +"darkred" + +Color for line
    +$aWeight + + + +2 + +Line weight
    +$aStyle + + + +"solid" + +Line style (dotted, slashed etc)
    + +

    Description:
    Create a new verticla line according to specification that later on can be added to the gantt graph vis its Add() method. 
    +  
    See also:
    +

    Example:

    +$line = new GanttVLine('2002-11-02','System test starts','darkblue',2,'solid');

    $granttgraph->Add($line);

    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Graph.html b/Societes/ric/jpgraph/docs/classref/Graph.html new file mode 100755 index 00000000..e71def9b --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Graph.html @@ -0,0 +1,2132 @@ +


    Class Graph
    +(Defined in: jpgraph.php : 491)
     
     Graph 
     Add() 
    AddBand() 
    AddLine() 
    AddText() 
    AddY() 
    AddY2() 
    CheckCSIMCache() 
    GetCSIMImgHTML() 
    GetHTMLImageMap() 
    Set3DPerspective() 
    Set90AndMargin() 
    SetAlphaBlending() 
    SetAngle() 
    SetAxisLabelBackground() 
    SetAxisStyle() 
    SetBackgroundCFlag() 
    SetBackgroundCountryFlag() 
    SetBackgroundGradient() 
    SetBackgroundImage() 
    SetBackgroundImageMix() 
    SetBackgroundImagePos() 
    SetBox() 
    SetClipping() 
    SetColor() 
    SetCSIMImgAlt() 
    SetFrame() 
    SetFrameBevel() 
    SetGridDepth() 
    SetIconDepth() 
    SetImgFormat() 
    SetMargin() 
    SetMarginColor() 
    SetScale() 
    SetShadow() 
    SetTextScaleAbsCenterOff() 
    SetTickDensity() 
    SetTitleBackground() 
    SetTitleBackgroundFillStyle() 
    SetUserFont() 
    SetUserFont1() 
    SetUserFont2() 
    SetUserFont3() 
    SetY2OrderBack() 
    SetY2Scale() 
    SetYDeltaDist() 
    SetYScale() 
    Stroke() 
    StrokeCSIM() 
    StrokeCSIMImage() 
    StrokeFrameBackground() 
    StrokeStore() 
    __construct() 
    +
     

    Class usage and Overview
    The Graph class is the main container class for all x,y-axis based plots which controls the creation of the entire graph. You must always instantiate one instance to create a graph. Through this class one controls many overall settings of the image displayed. +

    +Please note that to create Pie, Gantt, Canvas and Spider charts you have to use their respective creation classes. +

    +Public properties: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    xaxisAxisX-axis
    yaxisAxisY-axis
    xgridGridGrid lines for X-axis
    ygridGridGrid lines for Y-axis
    legendLegendProperties for legend box
    titleTextGraph main title
    subtitleTextSub title
    subsubtitleTextSub title
    tabtitleGraphTabTitleOption Tab title for graph
    imgRotImageThe image canvas
    +

      +

    See also related classes:
    Axis, Grid, Text and Image

     


    Class Methods

    +

     

    + +Add any plot object to the graph

    + + + + +
    ArgumentDefaultDescription
    +$aPlot + + + No description available
    + +

    Description:
    Each plot that should be displayed within the graph has to be added to the graph. This is the main method to add object. You can use this method to add +
      +
    • Plots +
    • Texts +
    • Plot lines +
    • Plot bands +
    + +This method will add a plopt for use with the ?Left? Y-scale, (the normal Y scale). To add a plot to the second Y scale you should use AddY2(). +

    +Note that since the plot is added as a reference any changes you make to the original plot will also happen to the plot you have added to the graph. +

    +Add() will always add plots to the first Y-scale. If you are using two Y-axis then you must use AddY2() to add plots to the second Y-scale. + 
    +  

    See also:
    +

    Example:

    +$graph = new Graph(300,200,"auto");    
    $graph->img->SetMargin(40,30,20,40);
    $graph->SetScale("textlin");
    $graph->SetShadow();

    // Create a bar pot
    $bplot = new BarPlot($datay);
    $bplot->SetFillColor("orange");
    $graph->Add($bplot);

    // Display the graph
    $graph->Stroke();
    +
    +

    +

    +

     

    + +Add vertical or horizontal band

    + + + + + + +
    ArgumentDefaultDescription
    +$aBand + + + No description available
    +$aToY2 + + + +false + +Add object to Y2 axis
    + +

    Description:
    A plot may have one or several filled horizontal or vertical "bands" to emphasise certain scale areas. +

    +Each band is an instance of the PlotBand class. For types of plot band see the documentation of class PlotBand +

    +Note: You can alos use the standard method Add() to add bands. 
    +  

    See also:
    +

    Example:

    +$graph->AddBand(new PlotBand(HORIZONTAL,BAND_RDIAG,0"max""red"2)); + +

    +

    +

     

    + +Add a line object (class PlotLine) to the graph

    + + + + + + +
    ArgumentDefaultDescription
    +$aLine + + + No description available
    +$aToY2 + + + +false + +Add line to Y2 axis
    + +

    Description:
    Add a vertical or horizontal line to the graph. The line will extend over the entire length of the plot. The plot object is an instance of the PlotLine class +

    +Note: You can alos use the standard method Add() to add lines. 
    +  

    See also:
    +

    Example:

    +// Add mark graph with static lines
    $graph->AddLine(new PlotLine(HORIZONTAL,0,"black",2));
    $graph->AddLine(new PlotLine(VERTICAL,3,"black",2)); +
    +

    +

    +

     

    + +Add text object to the graph

    + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + No description available
    +$aToY2 + + + +false + +Add text to Y2 axis
    + +

    Description:
    Adds an instance of the Text class to the graph, allowing arbitrary text to be placed anywhere in the graph. +

    +Note: You can alos use the standard method Add() to add bands. + 
    +  

    See also:
    +

    Example:

    +// You can specify the position as fraction of the
    // image width and height
    $caption=new Text(?Figure 1. Temperature over time?,0.1,0.8);
    $caption->SetFont(FONT1_BOLD);
    $graph->AddText($caption);
    +
    +

    +

    +

     

    + +Add plot to second Y-axis n

    + + + + + + +
    ArgumentDefaultDescription
    +$aN + + + Number of axis to add data to
    +$aPlot + + + No description available
    + +

    Description:
    This method is used to add a plot in the case the graph has multiple Y-axis. The first argument should be the index of the Y-axis. 
    + +

    Example:

    +<?php
    include ("../jpgraph.php");
    include (
    "../jpgraph_line.php");

    $datay = array(5,3,7,2);
    $datay2 = array(88,10,55,42);
    $datay3 = array(255,35,745,244);
    $datay4 = array(130,97,68,119);

    // Setup the graph
    $graph = new Graph(600,250);
    $graph->SetMargin(30,200,20,20);
    $graph->SetMarginColor('white');
    $graph->SetColor('lightgray');

    $graph->SetScale("intlin");

    $graph->SetYScale(0,"lin");
    $graph->SetYScale(1,"lin");
    $graph->SetYScale(2,"lin");

    $p1 = new LinePlot($datay);
    $p1->SetColor('blue');
    $graph->Add($p1);

    $p2 = new LinePlot($datay2);
    $p2->SetColor('darkred');
    $graph->AddY(0,$p2);
    $graph->ynaxis[0]->SetColor('darkred');

    $p3 = new LinePlot($datay3);
    $p3->SetColor('red');
    $graph->AddY(1,$p3);
    $graph->ynaxis[1]->SetColor('red');

    $p4 = new LinePlot($datay4);
    $p4->SetColor('blue');
    $graph->AddY(2,$p4);
    $graph->ynaxis[2]->SetColor('blue');

    // Output line
    $graph->Stroke();


    +

    +

    +

     

    + +Add plot to second Y-axis

    + + + + +
    ArgumentDefaultDescription
    +$aPlot + + + No description available
    + +

    Description:
    Works the same way as Add() but the plot is added for use with the Y2 scale (the right Y scale) instead. 
    +  
    See also:
    +

    Example:

    +$graph = new Graph(300,200);
    $graph->SetScale('linlin');
    $graph->SetY2Scale('linlog');
    $lineplot = new LinePlot($datay);
    $graph->AddY2($lineplot); +
    +

    +

    +

     

    + +Check if cached CSIM graph exists

    + + + + + + +
    ArgumentDefaultDescription
    +$aCacheName + + + Cache file name
    +$aTimeOut + + + +60 + +Timeout (in minutes)
    + +

    Description:
    This method is used to enable caching for graphs that use image maps (CSIM). It should be called as the first method after the creation of the Graph(). If the cached image and image map exists this will be directly sent back to the browser and script execution will stop. +

    +This specifically means that no lines of code after this method will be executed in case the image/map is found in the cache. + 
    +  

    See also:
    +

    Example:

    +$graph Graph(300,200);
    $graph->CheckCSIMCache('myimage01',10);

    // .. Lopt of code to create the image

    $graph->StrokeCSIM();
    +
    +

    +

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aCSIMName + + + No description available
    +$aScriptName + + + +'auto' + +No description available
    +$aBorder + + + +0 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Get a complete .. tag for the final image map

    + + + + +
    ArgumentDefaultDescription
    +$aMapName + + + Image map name
    + +

    Description:
    When you are using image maps for a plot then this routine is called in your script to get the resulting image map as a string for the graph. The image map is given the name specified as the first argument to the method. +

    +Please note that due to the way client side image maps work you need to have both the image map and the image available in the script that is sent back to the browser. Since you can't do this at the same time you will have to create an image to disk and read the image map. The you have to stream the HTML page with an tag to load the previously generated image as well as the image map. + 
    + +

    Example:

    +// The image must be stroked to find out the image maps
    $graph->Stroke($myfile);

    // Then read the image map
    $imagemap $graph->GetHTMLImageMap('MainMap');

    echo 
    $imagemap;
    echo 
    "<img src=$myfile>";
    +
    +

    +

    +

     

    + +Enable image perspective transformation

    + + + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aDir + + + +1 + +Direction for 3D perspective
    +$aHorizon + + + +100 + +Distance (in pixels) from the bottom of the image to the horizon
    +$aSkewDist + + + +120 + +Skew distance (in pixels) on the horizon
    +$aQuality + + + +false + +Boolean. High quality =
    +$aFillColor + + + +'#FFFFFF' + +What fill color to use
    +$aBorder + + + +false + +Boolean. Border around?
    +$aMinSize + + + +true + +Boolean. Make the transformed image canvas as small as possible
    +$aHorizonPos + + + +0.5 + +Distance from left on the horizon for the point of focus
    + +

    Description:
    Enable final image perspective transformation before sending the image back to the browser. This makes a "skewing" tansformation of the image to emulate a 3D depth. + +

    +Allowed argument for $aDir are +

      +
    1. 'SKEW3D_UP' +
    2. 'SKEW3D_DOWN' +
    3. 'SKEW3D_LEFT' +
    4. 'SKEW3D_RIGHT' +
    + +$aHorizon Determines how far away the horizon are from the bottom of the picture (in pixels) +

    +aSkewDist How far to the right on the horizon is the +"skewing point", a large value gives a very strong for-shortening. +

    +aQuality Use high quality (takes longer time) TRUE or FALSE +

    +aFIllColor Fill background color in the image on places where the original image no longer cover the entire canvas. +

    +aBorder Border around or not +

    +aMinSize Just make the image as large as it has to be. TRUE or FALSE. If this argument is set to false then the original image size will be preserved. +

    +aHorizonPosHow far, in fraction, should the point of focus be from the left edge of the image. 
    + +

    Example:

    +$graph->Set3DPerspective(SKEW3D_UP,100,120,true); + +

    +

    +

     

    + +Rotate the graph 90 degrees and set the margins

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$lm + + + +0 + +Left margin
    +$rm + + + +0 + +Right Margin
    +$tm + + + +0 + +Top margin
    +$bm + + + +0 + +Bottom margin
    + +

    Description:
    Rotates the graph 90 degrees and sets the margin as specified. +

    +Remember that when rotating the graph it might be a good idea to adjust the axis so that the alignment of the labels for x and Y axis. For example by setting them as: + +

    +$graph->xaxis->SetLabelAlign('right','center','right'); +
    +$graph->yaxis->SetLabelAlign('center','bottom'); +

    +Note: This is slightly different from using SetAngle() and SetMargin() in that this method automatically adjusts the margin so that width becomes height and vice versa due to the rotation. + + + 
    +  

    See also:
    +

    Example:

    +$graph = new Graph(300,200,"auto");
    $graph->SetScale('linlin');

    $graph->Set90AndMargin(40,40,40,40);        
    $graph->SetShadow();

    $graph->title->Set("A 90 degrees rotated scatter plot");
    $graph->title->SetFont(FF_FONT1,FS_BOLD);

    // Adjust the label align for X-axis so they look good rotated
    $graph->xaxis->SetLabelAlign('right','center','right');

    // Adjust the label align for Y-axis so they look good rotated
    $graph->yaxis->SetLabelAlign('center','bottom');

    $sp1 = new ScatterPlot($datay,$datax);
    $sp1->mark->SetType(MARK_FILLEDCIRCLE);
    $sp1->mark->SetFillColor("red");
    $sp1->mark->SetWidth(5);

    $graph->Add($sp1);
    $graph->Stroke();
    +
    +

    +

    +

     

    + +Eanble/disable alpha blending

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +TRUE=Enable alpha blending
    + +

    Description:
    Enable disable alpha blending. The transparency factor is specified in the color as transparency fraction. For example, to specify a red color which is 50% transparent you specify this as: +

    +"red@0.5" (or "#FF0000@0.5") +

    +can then use this color specification in all places where the color may be specified. If the alpha blending is not active then the alpha parameter will have no effect. +

    +Note that the use of alpha blending requires GD 2.01 or higher. By default alpha blending is enabled. + 
    + +

    Example:

    +$graph->SetAlphaBlending(); + +

    +

    +

     

    + +Specify graph angle 0-360 degrees.

    + + + + +
    ArgumentDefaultDescription
    +$aAngle + + + Rotation angle for graph
    + +

    Description:
    The graph can be rotated an arbitrary number of degrees. This will allow you to easily create, for example, horizontal bar graphs by rotating a normal bar graph 90 degrees. +

    +See horizbarex1.php for a real life example. +

    +Note: If you want a 90 degrees rotated graph consider using Graph::Set90AndMargin() which greatly simplifies this with just one call + 
    +  

    See also:
    +

    Example:

    +$graph = new Graph(300,200);
    $graph->SetScale('textlin');
    $graph->SetAngle(90); +
    +

    +

    +

     

    + +// Finally stream the generated picture

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aType + + + No description available
    +$aXFColor + + + +'lightgray' + +No description available
    +$aXColor + + + +'black' + +No description available
    +$aYFColor + + + +'lightgray' + +No description available
    +$aYColor + + + +'black' + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify axis style (boxed or single)

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + + Style of axis
    + +

    Description:
    The most common type of axis is two axis which crosses at a specified point. However for scientific plot it is often common to want to mirror the axis (and the scale) around the plot area. +This method controls which type to use + +
      +
    • AXSTYLE_SIMPLE, a simple two axis plots (default) +
    • AXSTYLE_BOXIN, axis around the plot area with the tick marks directed inside the plot area. +
    • AXSTYLE_BOXOUT, axis around the plot area with the tick marks directed outside of the plot area +
    + +See funcex1.php, funcex2.php and funcex3.php for real life examples. 
    + +

    Example:

    +$graph->SetAxisStyle(AXSTYLE_BOXIN);
    +
    +

    +

    +

     

    + +Set a country flag in the background

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aName + + + Index or (partial) name of Country
    +$aBgType + + + +BGIMG_FILLPLOT + +Background fill type
    +$aMix + + + +100 + +Mix percentage
    + +

    Description:
    [Synonym for SetBackgroundCountryFlag() ) +Set a country flag in the background. All supported countries can be specified by either +
      +
    1. Numeric index, (0-238) +
    2. Full or partial name, e.g. "norway" +
    3. The unique string index for the country +
    + +For a list of all available flags please run the file "listallflags.php" in the Example directory. +

    +The final arcgument "aMix" is a value between 0-100 and specifies the blend factor for the flag. 
    +

    +

     

    + +Set a country flag in the graph background

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aName + + + Full or partial country name
    +$aBgType + + + +BGIMG_FILLPLOT + +Normal background fill type
    +$aMix + + + +100 + +Mix fraction
    + +

    Description:
    Set a country flag in the background. All supported countries can be specified by either +
      +
    1. Numeric index, (0-238) +
    2. Full or partial name, e.g. "norway" +
    3. The unique string index for the country +
    + +For a list of all available flags please run the file "listallflags.php" in the Example directory. +

    +The final arcgument "aMix" is a value between 0-100 and specifies the blend factor for the flag. + 
    +

    +

     

    + +Set a color gradient as the background

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFrom + + + +'navy' + +Color 1
    +$aTo + + + +'silver' + +Color 2
    +$aGradType + + + +2 + +Gradient type
    +$aStyle + + + +BGRAD_FRAME + +Gardient layout style
    + +

    Description:
    This method allows you to specify a color gradient as the background of the graph. The color gradient can either fill the entire graph, just the plopt area or just the margin. This is specified by the $aStyle argument by specifyin one of the following values: +
      +
    • BGRAD_FRAME, Fill the entire graph with the gradient +
    • BGRAD_PLOT, Just fill the plot area +
    • BGRAD_MARGIN, Just the margin +
    + +The gradient type can be one of +
      +
    • GRAD_VER, Vertical gradient +
    • GRAD_HOR, Horizontal gradient +
    • GRAD_MIDHOR, From the center and out, horizontal +
    • GRAD_MIDVER, From the center and out, vertical +
    • GRAD_WIDE_MIDVER, From the center and out, vertical. Wide mid section. +
    • GRAD_WIDE_MIDHOR, From the center and out, horizontal. Wide mid section. +
    • GRAD_CENTER, From the center and beaming out +
    • GRAD_LEFT_REFLECTION, Simulates a reflection on the left side +
    • GRAD_RIGHT_REFLECTION, Simulates a reflection on the right side +
    + +Note: In order for the gradient to be visible the Frame must be enabled, i.e. graph->ShowFrame(false) will hide the gradient. If you like to hide the frame around the entire graph set the color to the margin color or set the weight of the frame line to 0. + 
    +  
    See also:
    +

    Example:

    +$graph->SetBackgroundGradient('blue','navy:0.5',GRAD_HOR,BGRAD_MARGIN); + +

    +

    +

     

    + +Specify a background image fro the plot

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFileName + + + Filename for background image
    +$aBgType + + + +BGIMG_FILLPLOT + +Style of background image
    +$aImgFormat + + + +'auto' + +Image format ("jpeg", "gif", "png")
    + +

    Description:
    A graph may have a background image. The image is loaded from a specified file and may be of type GIF, JPG or PNG. The image type may also be specified as "auto", in this case the image format is determined by the file ending. +

    +The positioning and sizing of the background image can be controlled by the $aBgType parameter. Possible values are +

      +
    • BGIMG_FILLPLOT, Adjust the size of the image to just fit the plotarea +
    • BGIMG_FILLFRAME, ADjust the size of the image to just fit the entire graph area +
    • BGIMG_COPY, Just copy the image as is to upper left corner +
    • BGIMG_CENTER, Just copy the image but center it. +
    + +If you want ot use a background image on a canvas graph you must be carefull. Since canvas graph use no buffering, i.e everythng is written directly in the order you specify the commands. For canvas graph the background image get's stroked when you call the Initframe() method. +SO, this call should eb among the very first. Every graph object after that will be stroked on top of the specified background image. + + 
    +  
    See also:
    +

    Example:

    +// 
    $graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME);

    // If you use a canvas graph, and only canvas graphs,
    // you must manually call the InitFrame() method.
    $graph->InitFrame(); +
    +

    +

    +

     

    + +Specifes what how much the background image should be blendid in with the background

    + + + + +
    ArgumentDefaultDescription
    +$aMix + + + Mix value (0-100)
    + +

    Description:
    Specifes what how much the background image should be blendid in with the background. 
    +

    +

     

    + +// Adjust background image position

    + + + + + + +
    ArgumentDefaultDescription
    +$aXpos + + + No description available
    +$aYpos + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Set a frame around the plot area

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aDrawPlotFrame + + + +true + +True=Draw the frame
    +$aPlotFrameColor + + + +array(0,0,0) + +Frame color
    +$aPlotFrameWeight + + + +1 + +Width fo frame line
    + +

    Description:
    This is used to specify whether the plot-area should have a rectangle around it and the specifics of that rectangle. 
    +  
    See also:
    +

    Example:

    +$graph = new Graph(300,200);
    $graph->SetScale('linlin');
    $graph->Box();
    +
    +

    +

    +

     

    + +Enable clipping of graph outside the plotarea

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +Enable/disbale clipping
    + +

    Description:
    Enable or disable clipping outside the plot area. If clipping is enabled then only the part of the graph exactly inside the plot area will be visible. +

    +Clipping may come in handy when you for example set a manual scale and have data points outside the specified range. +

    +By default clipping is disabled. +

    +Note 1: Clipping is only supported for graphs at 0 or 90 degrees rotation and will generate an error message if enabled together with any other angle. +

    +Note 2: The clipping is implemented with a O(1) algorithm in terns of data size. + 
    + +

    Example:

    +$graph->SetClipping(); + +

    +

    +

     

    + +Specify color for the plotarea (not the margins)

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Specify color for the plotarea (not the margins) 
    +  
    See also:
    +

    Example:

    +$graph->SetColor(?wheat?); + +

    +

    +

     

    + +Set the Alt text used for the IMG tag generated for CSIM

    + + + + +
    ArgumentDefaultDescription
    +$aAlt + + + Alt text
    + +

    Description:
    Set the ALt text used for the IMG tag generated for CSIM. Whne calling StrokeCSIM() a HTML page will be returned witha recusrive call to teh same script in an IMG tag. This method allows you to specify the Alt text to be used in the returned HTML page. 
    +  
    See also:
    +

    Example:

    +$graph->SetCSIMImgAlt('Yearly values');
    $graph->StrokeCSIM();
    +
    +

    +

    +

     

    + +Set a frame around the entire image

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aDrawImgFrame + + + +true + +True=Draw a frame around the entire image
    +$aImgFrameColor + + + +array(0,0,0) + +Frame color
    +$aImgFrameWeight + + + +1 + +Width of frame
    + +

    Description:
    Sets a frame (rectangle) of the chosen color around the edges of the image. + +Note: For implementation reasons the frame must be enabled in order to for a specified gradient background to show up. + 
    +  
    See also:
    +

    Example:

    +$graph->SetFrame(true,'darkblue',2); + +

    +

    +

     

    + +Specify a abevel frame around the entire graph

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aDepth + + + +3 + +Depth (Height) in pixels for bevel
    +$aBorder + + + +false + +True=Add 1 pixel border around
    +$aBorderColor + + + +'black' + +Border color
    +$aColor1 + + + +'white@0.4' + +Right and bottom shadow
    +$aColor2 + + + +'darkgray@0.4' + +Left and top shadow
    +$aFlg + + + +true + +True=Show bevel frame
    + +

    Description:
    Specify a a bevel frame around the entire graph. A Bevel frame will give the entire graph a "3D" uprised feel. 
    + +

    Example:

    +$graph->SetFrameBevel(2,true,'black'); + +

    +

    +

     

    + +Should the grid be in front or back of the plot?

    + + + + +
    ArgumentDefaultDescription
    +$aDepth + + + Grid depth
    + +

    Description:
    Specify if the grid in the plot should be drawn under or on top of the actual plots. +

    +Valid values for grid depth are +

      +
    • DEPTH_BACK, Under plots +
    • DEPTH_FRONT, On top of plots +
    +

    +The default is to draw the grid lines under the plots. 
    + +

    Example:

    +$graph->SetGridDepth(DEPTH_FRONT);
    +
    +

    +

    +

     

    + +Determine if Icons should be under or over the plot

    + + + + +
    ArgumentDefaultDescription
    +$aDepth + + + Depth of icons (see description)
    + +

    Description:
    Determine if Icons should be under or over the plot. The argument is one of +
      +
    • DEPTH_BACK +
    • DEPTH_FRONT +
    + +By default the icons are drawn under the plots 
    + +

    Example:

    +// Put the icons in front of the plot
    $graph->SetIconDepth(DEPTH_FRONT); +
    +

    +

    +

     

    + +Set Image format and optional quality

    + + + + + + +
    ArgumentDefaultDescription
    +$aFormat + + + Format (see description)
    +$aQuality + + + +75 + +Quality parameter for JPEG
    + +

    Description:
    Specify what image format the generated image should use. By default the library will try to create PNG images and if the PNG libraries are not available then it will try to use foirst JPEG and finally GIF encoding. +

    +The image format is specified as a string that can be one of +

      +
    • "PNG", Looseless format with good quality/compression ratio for line graphs +
    • "JPEG", JPEG format +
    • "GIF", GIF Format +
    + +The PNG format gives in general best compression for ordinary data plots and is also a looseless format. +

    +If the graph has complicated background images or 100s of colors then there is a good chance that JPEG will give better compression on the expense of image quality. +

    +The quality parameter is a value between (0,100) inclusively. = gives best compression but worst quality and 100 give the best quality. Suitable ranges is 60-90. + 
    + +

    Example:

    +// Set JPEG format with 60% quality
    $graph->SetImgFormat('jpeg',60); +
    +

    +

    +

     

    + +Specify side margins for graph

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$lm + + + Left margin (in pixels)
    +$rm + + + Right margin (in pixels)
    +$tm + + + Top margin (in pixels)
    +$bm + + + Bottom margin (in pixels)
    + +

    Description:
    Specify the margin around the actual plot area. This is actually just a shortcut for the Image::SetMargin() +

    +Note: If you want to set the margin for a 90 degrees rotated graph please consider using Graph::Set90AndMargin() instead since this will automatically adjust for the rotated image and the swapped meaning of width and height. + 
    +  

    See also:
    +

    Example:

    +$graph->SetMargin(40,20,60,20); + +

    +

    +

     

    + +Specify color for the margins (all areas outside the plotarea)

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Specifies the color of the area between the plot area and the edge of the image. 
    +  
    See also:
    +

    Example:

    +$graph->SetMarginColor('silver'); + +

    +

    +

     

    + +Specify scale to use for X and Y axis

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aAxisType + + + Type of axis
    +$aYMin + + + +1 + +Y-min
    +$aYMax + + + +1 + +Y-max
    +$aXMin + + + +1 + +X-min
    +$aXMax + + + +1 + +X-max
    + +

    Description:
    Specifies what kind of scales should be used in the graph. The following combinations are allowed + +
      +
    • Linear scale. Both X and Y axis +
    • Logarithmic scale. Both X and Y axis +
    • Text scale. Only on X axis +
    • Integer scale. X and Y axis +
    + +Any combination of these may be used. Linear and logarithmic scales are pretty straightforward. The text scale might deserve some explanation. The easiest way to think of the text scale is as a linear scale consisting of only natural numbers, i.e. 0,1,2,3,4,? . This scale is used when you just have a number of Y-values you want to plot in a consecutive order and don?t care about the X-values. It is also used when you need to have text labesl you specify (via $graph->xaxis->SetTickLabels($labels) ). +

    +To specify which combination of X and Y scales you want to use the $axtype parameter is specified. In this parameter you specify, by a text string, the type of scale you want to use for both X and Y scale. +

    +Possible values for each axis are:
    +X: 'lin', 'text', 'log', 'int'
    +Y: 'lin', 'log', 'int'
    +

    +Example of possible combination:
    +

      +
    • SetScale('textint'); +
    • SetScale('loglog'); +
    • SetScale('linlog'); +
    +It is normally recommended to use the auto-scaling feature since for most practical purposes it is good enough. However on rare occasions you might want to specify the limits yourself. This is then done by the rest of the parameters to the method. +

    +Note: If you want to use a logarithmic scale you must make sure that the ?jpgraph_log.php? is included. +

    +Note1: +Note that if you manually specify the scale you can also specify the tick distance with a call to Ticks::Set(). For example $graph->yaxis->scale->ticks->Set(10,5) If yiou don't ste it manually a suitable tick distance will be automatically choosen. + +Note2: +If you want to keep the autoscaling for Y-axis but specify the X-axis then just call the method with both min and max set to 0 (e.g. SetScale('linlin',0,0,0,50); ) + + 
    + +

    Example:

    +//----------------------
    // EXAMPLE1: Using autoscaling
    $graph->SetScale('textlin');

    //----------------------
    // EXAMPLE2: Using manual scale for Y-scale and only major ticks
    $graph->SetScale('linlin',5,75);
    $graph->yaxis->scale->ticks->Set(10); // Set major and minor tick to 10

    //----------------------
    // EXAMPLE3: Using manual scale for Y-scale 
    $graph->SetScale('linlin',5,200);
    // Set major tick dist to 40 and minor to 20 
    $graph->yaxis->scale->ticks->Set(40,20); 

    //----------------------
    // EXAMPLE4: Using manual scale for both X and Y-scale 
    $graph->SetScale('linlin',5,200,0,100);
    // Set major tick dist to 40 and minor to 20 
    $graph->yaxis->scale->ticks->Set(40,20);
    // Set major and minor tick dist to 20 
    $graph->xaxis->scale->ticks->Set(20); 

    // Keeping the Autoscaling for Y-axis but fixing the X
    // scale to an integer scale between [0,50]
    $graph->SetScale('intlin',0,0,0,50);
    +
    +

    +

    +

     

    + +Add a drop shadow to the image

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aShowShadow + + + +true + +True=add a drop shadow
    +$aShadowWidth + + + +5 + +Width (in pixels of shadow)
    +$aShadowColor + + + +array(102,102,102) + +Shadow color
    + +

    Description:
    Sets a frame with a drop down shadow around the entire image 
    +  
    See also:
    +

    Example:

    +$graph->SetShadow(); + +

    +

    +

     

    + +// Text width of bar to be centered in absolute pixels

    + + + + +
    ArgumentDefaultDescription
    +$aOff + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify how dense the ticks should be drawn

    + + + + + + +
    ArgumentDefaultDescription
    +$aYDensity + + + +TICKD_NORMAL + +Y-density
    +$aXDensity + + + +TICKD_NORMAL + +X-density
    + +

    Description:
    This method is used to hint how many ticks the auto-scaling should try to fit on each of the axis. +

    +The following DEFINES may be used to hint to the auto-scaling how many ticks should be allocated + +

      +
    • TICKD_DENSE, Small distance between ticks +
    • TICKD_NORMAL, Default value +
    • TICKD_SPARSE, Longer distance between ticks +
    • TICKD_VERYSPARSE, Very few ticks +
     
    + +

    Example:

    +$graph->SetTickDensity(TICKD_DENSE); // Many Y-ticks + +

    +

    +

     

    + +Specify background style for graph titles

    + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aBackColor + + + +'gray' + +Background color
    +$aStyle + + + +TITLEBKG_STYLE1 + +Background size style, see description
    +$aFrameStyle + + + +TITLEBKG_FRAME_NONE + +Frame style, see description
    +$aFrameColor + + + +'black' + +Frame color
    +$aFrameWeight + + + +1 + +Frame thickness (weight)
    +$aBevelHeight + + + +3 + +Bevel height used for frame style bevel
    +$aEnable + + + +true + +Enable/disable background
    + +

    Description:
    Specify background style for graph titles, i.e. the background style for Graph::title, Graph::subtitle, Graph::subsubtitle. The actual background style is specified with the two arguments $aStyle and $aFrameStyle. +

    +The first argument $aStyle determines the size the background should cover. The two possibilities are +

      +
    • TITLEBKG_STYLE1, FIll the background inside the graph frame +
    • TITLEBKG_STYLE2, Also covers the graph frame +
    • TITLEBKG_STYLE3, Used together with the Bevel frame. WIll put the title beackground under the graph bevel. +
    + +The second style parameter specifies what type of frame should be drawn. The weight of the frame is adjustable by specifying the $aFrameweight argument. The possible options for frame styles are: +
      +
    • TITLEBKG_FRAME_NONE, No frame +
    • TITLEBKG_FRAME_FULL, Full frame around the background +
    • TITLEBKG_FRAME_BOTTOM, Just a line at the bottom +
    • TITLEBKG_FRAME_BEVEL, Draw a Bevel 3D effect (looks like a raised square button). The height of the bevel can be adjusted with the $aBevelHeight argument. +
    + +You can further adjust the style of the background fill by the SetTitleBackgroundFillStyle() method. + 
    +  
    See also:
    +

    Example:

    +$graph->SetTitleBackground('wheat2',TITLEBKG_STYLE1,TITLEBKG_FRAME_BOTTOM); + +

    +

    +

     

    + +Adjust the title background fill style

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aStyle + + + Fill style (see description)
    +$aColor1 + + + +'black' + +Color 1
    +$aColor2 + + + +'white' + +Color 2
    + +

    Description:
    The background for the graph titles as set by SetTitleBackground() can be further adjusted with this method. The style can be sepcified as one of +
      +
    • TITLEBKG_FILLSTYLE_HSTRIPED, Alternating horizontal lines of color 1 and color 2 +
    • TITLEBKG_FILLSTYLE_VSTRIPED, Alternating vertical lines of color 1 and color 2 +
    • TITLEBKG_FILLSTYLE_SOLID, A solid fill color (default) +

    + +

    Example:

    +$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'darkgreen','black'); + +

    +

    +

     

    + +

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aNormal + + + No description available
    +$aBold + + + +'' + +No description available
    +$aItalic + + + +'' + +No description available
    +$aBoldIt + + + +'' + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aNormal + + + No description available
    +$aBold + + + +'' + +No description available
    +$aItalic + + + +'' + +No description available
    +$aBoldIt + + + +'' + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aNormal + + + No description available
    +$aBold + + + +'' + +No description available
    +$aItalic + + + +'' + +No description available
    +$aBoldIt + + + +'' + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aNormal + + + No description available
    +$aBold + + + +'' + +No description available
    +$aItalic + + + +'' + +No description available
    +$aBoldIt + + + +'' + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify that plots on the Y2 axis should be under Y axis plots

    + + + + +
    ArgumentDefaultDescription
    +$aBack + + + +true + +TRUE=under Y axis, FALSE=above
    + +

    Description:
    Set the depth for Y2 plots as compare to plots added to the Y axis 
    + +

    Example:

    +$graph->SetY2OrderBack(); + +

    +

    +

     

    + +Specify secondary Y scale

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aAxisType + + + +'lin' + +Type of scale
    +$aY2Min + + + +1 + +Y2Min value
    +$aY2Max + + + +1 + +Y2Max value
    + +

    Description:
    The graph allows two different Y-scales to be used and you can choose which one you want to use for a specific plot by the way you are adding the plot to the graph, either by Add() or by AddY2() method. +

    +This method works in the exact same way for the Y2 axis as the SetScale() method previously described. +

    +Allowed values for the $axtype are +

      +
    • ?lin?, Linear scale +
    • ?log?, Logarithmic scale +
    • ?int?, Integer scale +
    + +Note: If you want to use a logarithmic scale you must make sure that the ?jpgraph_log.php? is included. + 
    +  
    See also:
    +

    Example:

    +// Left Y scale linear and right Y-scale logarithmic
    $graph = new Graph(300,200);
    $graph->SetScale(?textlin?);
    $graph->SetY2Scale(?log?); +
    +

    +

    +

     

    + +Set the delta position (in pixels) between the multiple Y-axis

    + + + + +
    ArgumentDefaultDescription
    +$aDist + + + Distance in pixels
    + +

    Description:
    Set the delta position (in pixels) between the multiple Y-axis 
    +

    +

     

    + +Specify scale for additional Y-axis

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aN + + + Index of axis
    +$aAxisType + + + +"lin" + +Scale type of axis
    +$aYMin + + + +1 + +Optional min scale value
    +$aYMax + + + +1 + +Optional max scale value
    + +

    Description:
    Specify scale for additional Y-axis 
    + +

    Example:

    +<?php
    include ("../jpgraph.php");
    include (
    "../jpgraph_line.php");

    $datay = array(5,3,7,2);
    $datay2 = array(88,10,55,42);
    $datay3 = array(255,35,745,244);
    $datay4 = array(130,97,68,119);

    // Setup the graph
    $graph = new Graph(600,250);
    $graph->SetMargin(30,200,20,20);
    $graph->SetMarginColor('white');
    $graph->SetColor('lightgray');

    $graph->SetScale("intlin");

    $graph->SetYScale(0,"lin");
    $graph->SetYScale(1,"lin");
    $graph->SetYScale(2,"lin");

    $p1 = new LinePlot($datay);
    $p1->SetColor('blue');
    $graph->Add($p1);

    $p2 = new LinePlot($datay2);
    $p2->SetColor('darkred');
    $graph->AddY(0,$p2);
    $graph->ynaxis[0]->SetColor('darkred');

    $p3 = new LinePlot($datay3);
    $p3->SetColor('red');
    $graph->AddY(1,$p3);
    $graph->ynaxis[1]->SetColor('red');

    $p4 = new LinePlot($datay4);
    $p4->SetColor('blue');
    $graph->AddY(2,$p4);
    $graph->ynaxis[2]->SetColor('blue');

    // Output line
    $graph->Stroke();


    +

    +

    +

     

    + +Stroke graph to browser or file

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + + +'' + +File name* (or special handle, see below)
    + +

    Description:
    Should be the final method called in the script that generates a graph. This will generate the image and send it back to the browser. +

    +If $aStrokeFileName != "" the image will be written to this file and NOT streamed back to the browser +

    +If the file name is specified with the define __IMG_HANDLER (Note: Thre are 2 '_' in the beginning) then no image will be streamed to file or browser. Instead the Stroke() method will simply return the image handle used by the GD library. This can come in handy of you like to post manipulate the image or use the raw GD image in other context. Such as in creating dynamic PDF documents. +

    +Note: If you want to use the image in a PDF file you can't take the handle directly since this is a GD handle. To use it in PDF you must first create an PDF image by calling pdf_open_memory_image() to get a proper PDF image handle. See example below. + +

    +You may also specify the file name as "auto" in which case the filename will be created from the script name but with the extension changed to reflect the choosen image format. + 
    + +

    Example:

    +// Example 1 : (Normal case) Stream back to browser
    $graph->Stroke();

    // Example 2 : Stream to the file with absolute file path
    $graph->Stroke($fileName);

    // Example 3
    // Get the image handle. NOTE: No image will be 
    // streamed to the browser in this case.
    $ih $graph->Stroke(__IMG_HANDLER);

    // PDF example
    //....
    $im $graph->Stroke(_IMG_HANDLER);
    $pdf pdf_new();
    pdf_open_file($pdf"");

    $pimg pdf_open_memory_image($pdf$im);
    pdf_begin_page($pdf595842);
    pdf_add_outline($pdf"Page 1");
    pdf_place_image($pdf$pimg05001); 
    pdf_close_image($pdf$pimg); 
    pdf_end_page($pdf);
    pdf_close($pdf);
    $buf pdf_get_buffer($pdf);
    $len strlen($buf);
    header("Content-type: application/pdf");
    header("Content-Length: $len");
    header("Content-Disposition: inline; filename=jpimage.pdf");
    echo 
    $buf;
    pdf_delete($pdf);




    +
    +

    +

    +

     

    + +Stroke an image with a CSIM

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aScriptName + + + +'auto' + +Name of the image generating script
    +$aCSIMName + + + +'' + +Image map name
    +$aBorder + + + +0 + +Should the image be bordered?
    + +

    Description:
    To generate an CSIM you must use this method at the end of your script instead of the normal Graph::Stroke() method. This method does not send back an image to the browser but rather a HTML page which contains an image map and a "recursive call" back to the image script. See the full JpGraph manual for a detailed explanation on how this works. +

    +Please note that it is abolutely imperative that you specify the image generating scripts name as the first argument. +

    +Why that? Because it is impossible for JpGraph to find out the name of the script it is executed from in the case where it is included as oart of a "standard" HTML/PHP page. Using the PHP_SELF will only return the master document and not the actual script name. +

    +If you use several image map images on the same HTML page you must also specify unique names of each of the image maps as the second argument for this function. +

    +To specify targets for the image maps you must call the individual plots Pot::SetCSIMTargets() +

    +Tip: You can easily specify the script name by using the construction +basename(__FILE__) as the first argument 
    +  

    See also:
    +

    Example:

    +...
    $graph->StrokeCSIM(basename(__FILE__));
    +
    +

    +

    +

     

    + +// Construct wrapper HTML and write to file and send it back to browser// In the src URL we must replace the '?' with its encoding to prevent the arguments// to be converted to real arguments.

    +
    + +

    Description:
    No description available.

    +

     

    + +Stroke the frames background and border

    +
    + +

    Description:
    Semi Internal routine. Exclusively used together with canvas graphs where object are added directly to the canvas and we therefore must make sure that the background is stroked first. + 
    + +

    Example:

    +e + +

    +

    +

     

    + +// DO Nothing. It gets too messy to do this properly for 90 deg...

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Creates a new graph.

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + +300 + +Width
    +$aHeight + + + +200 + +Height
    +$aCachedName + + + +'' + +Cache file name
    +$aTimeOut + + + +0 + +Timeout value for cache
    +$aInline + + + +true + +True=Stream the image back to the browser
    + +

    Description:
    Creates a new graph. This is often the first call made to set-up a new graph. +
    +If the cache name is specified (via the $aCachedname) argument then this method will first try to locate the named file in the cache directory (as specified by the DEFINE in jpgraph.php) rather then generating the graph on the fly. If the file is not there or if it is older then the specified timeout value ($aTimeOut) the graph will be generated and saved as the specified file. +

    +If the cache name is specifed as 'auto' then the cache name will be based on the basename of the script with an extension indicating the image format used, i.e. JPG, GIF or PNG. +

    +If the specified file is found in the cache directory then it will be streamed back to the browser directly. +

    +If no cache name is specified then the graph will always be generated and the cache bypassed. The same is true if the DEFINE 'USE_CACHE' or 'READ_CACHE' is set to false. +

    +Before any other operation is performed on the graph a call to SetScale() should be made to finish the initialisation of the graph. + 
    +  

    See also:
    +

    Example:

    +// Example 1. use cache and automtic create the cache name
    $graph = new Graph(400,200,"auto");    
    $graph->img->SetMargin(60,20,30,50);
    $graph->SetScale("textlin");
    $graph->SetMarginColor("silver");
    $graph->SetShadow();

    // Example 2 . Don't use the cache
    $graph = new Graph(400,200);    
    $graph->SetScale("textint");
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/GraphTabTitle.html b/Societes/ric/jpgraph/docs/classref/GraphTabTitle.html new file mode 100755 index 00000000..462a24c3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/GraphTabTitle.html @@ -0,0 +1,189 @@ +


    Class GraphTabTitle Extends Text
    +(Defined in: jpgraph.php : 2990)
     
     GraphTabTitle  Text 
     Set() 
    SetColor() 
    SetCorner() 
    SetFillColor() 
    SetTabAlign() 
    SetWidth() 
    +
     Align() 
    Center() 
    GetFontHeight() 
    GetTextHeight() 
    GetWidth() 
    Hide() 
    ParagraphAlign() 
    Set() 
    SetAlign() 
    SetAngle() 
    SetBox() 
    SetColor() 
    SetCSIMTarget() 
    SetFont() 
    SetMargin() 
    SetOrientation() 
    SetParagraphAlign() 
    SetPos() 
    SetScalePos() 
    SetShadow() 
    SetWordWrap() 
    Show() 
    __construct() 
    +
     

    Class usage and Overview
    Represents the tab that can be placed on top of the graph

      +


    Class Methods

    +

     

    + +Specify text string for tabbed title

    + + + + +
    ArgumentDefaultDescription
    +$t + + + Text
    + +

    Description:
    Specify text string for tabbed title 
    + +

    Example:

    +$graph->tabtitle->Set('First Quarter'); + +

    +

    +

     

    + +Specify color for tab

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTxtColor + + + Text color
    +$aFillColor + + + +'lightyellow' + +Background fill color
    +$aBorderColor + + + +'black' + +Border color
    + +

    Description:
    Specify all the possible colors for the tab 
    + +

    Example:

    +$graph->tabtitle->SetColor('navy','lightyellow','navy'); + +

    +

    +

     

    + +Specify size (in pixels) of the cut in the upper left and right corner

    + + + + +
    ArgumentDefaultDescription
    +$aD + + + Cut in pixels
    + +

    Description:
    Specify size (in pixels) of the cut in the upper left and right corner 
    + +

    Example:

    +$graph->tabtitle->SetCorner(8); + +

    +

    +

     

    + +Specify background color for tab title

    + + + + +
    ArgumentDefaultDescription
    +$aFillColor + + + Fill color
    + +

    Description:
    Specify background color for tab title 
    + +

    Example:

    +$graph->tabtitle->SetFillColor('darkgreen'); + +

    +

    +

     

    + +Specify position of the tab

    + + + + +
    ArgumentDefaultDescription
    +$aAlign + + + Left right or center position
    + +

    Description:
    Teh tab can be positioned at the left edge on top of the plot area, center or at the right. 
    + +

    Example:

    +$graph->tabtitle->SetTabAlign('right'); + +

    +

    +

     

    + +Specify width for tab title

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + Width of tab (see below)
    + +

    Description:
    The width of the tab title can be specified in either absolute pixels or as the two special values 'TABTITLE_WIDTHFIT' and 'TABTITLE_WIDTHFULL'. +

    +The TABTITLE_WIDTHFIT will make the tab just wide enough to hold the text in the tab and the TABTITLE_WIDTHFULL will extend the tab across the entire plot area. +

    +By default the tab will be formatted as it had been specified as TABTITLE_WIDTHFIT + + + 
    + +

    Example:

    +// Specify the tab title width in absolute pixels
    $graph->tabtitle->SetWidth(120); +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Grid.html b/Societes/ric/jpgraph/docs/classref/Grid.html new file mode 100755 index 00000000..336444a3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Grid.html @@ -0,0 +1,168 @@ +


    Class Grid
    +(Defined in: jpgraph.php : 3296)
     
     Grid 
     SetColor() 
    SetFill() 
    SetLineStyle() 
    SetWeight() 
    Show() 
    +
     

    Class usage and Overview
    This class is used to hold all properties of the gridline for a specific axis. The grid setting is accessed through the xgrid and ygrid properties of graph. + +By default JpGraph has grid lines for Y-lines turned on and gridlines for X-axis turned off. + +

      +


    Class Methods

    +

     

    + +Set color of grid lines

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajColor + + + Major color
    +$aMinColor + + + +false + +Minor color
    + +

    Description:
    Set color of grid lines 
    + +

    Example:

    +$graph->xgrid->SetColor('lightblue'); + +

    +

    +

     

    + +Specify fill style for grid

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +Flag, True=enable fill
    +$aColor1 + + + +'lightgray' + +Fill color 1
    +$aColor2 + + + +'lightblue' + +Fill color 2
    + +

    Description:
    The area between the gridline can be filled with two alternating colors. This method specifies this style. See 'filledgridex1.php' for an example of this. By using this feature with alpha-blending you can achieve very nice layouts. + 
    + +

    Example:

    +// Use 50% blending
    $graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5');
    $graph->ygrid->Show();
    $graph->xgrid->Show();
    +
    +

    +

    +

     

    + +Specify if grid line should be dashed, dotted or solid

    + + + + +
    ArgumentDefaultDescription
    +$aType + + + String to specify line type
    + +

    Description:
    Specify if grid should be dashed, dotted or solid. The type is specified with a string which can be either "solid", "dashed" or "dotted". + 
    +  
    See also:
    +

    Example:

    +$graph->ygrid->SetLineStyle('dashed'); + +

    +

    +

     

    + +Set line weight for grid line

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + Line width in pixels
    + +

    Description:
    Set line weight for grid line 
    + +

    Example:

    +$graph->xgrid->SetWeight(2); + +

    +

    +

     

    + +Specify if both major and minor grid should be displayed

    + + + + + + +
    ArgumentDefaultDescription
    +$aShowMajor + + + +true + +True=Show major grid lines
    +$aShowMinor + + + +false + +True=Show minor grid lines
    + +

    Description:
    Specify if both major and minor grid should be displayed 
    + +

    Example:

    +$graph->ygrid->Show();
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/GroupBarPlot.html b/Societes/ric/jpgraph/docs/classref/GroupBarPlot.html new file mode 100755 index 00000000..d2796c3d --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/GroupBarPlot.html @@ -0,0 +1,63 @@ +


    Class GroupBarPlot Extends BarPlot
    +(Defined in: jpgraph_bar.php : 615)
     
     GroupBarPlot  BarPlot 
     GroupBarPlot() 
    +
     RotatePattern() 
    SetAbsWidth() 
    SetAlign() 
    SetFillColor() 
    SetFillGradient() 
    SetNoFill() 
    SetPattern() 
    SetShadow() 
    SetValuePos() 
    SetWidth() 
    SetYBase() 
    SetYMin() 
    __construct() 
    +
     

    Class usage and Overview
    A group bar plot has several bars side by side for each X-label. The group bar is constructed from any number of ordinary bar graphs. + +For example: + +$b1 = new BarPlot(...); +$b2 = new BarPlot(...); + +$gb = new GroupBarPlot(array($b1,$b2)); +... +$graph->Add($gb); +... + + +Each individual bar can be either a BarPlor or an AccBarPlot. +

      +


    Class Methods

    +

     

    + +Create a new Group bar plot

    + + + + +
    ArgumentDefaultDescription
    +$plots + + + Array of individual plots
    + +

    Description:
    Create a new Group bar plot from a number of BarPlot or AccBarPlot plots. 
    +  
    See also:
    +

    Example:

    +$b1 = new BarPlot(...);
    $b2 = new BarPlot(...);

    $gb = new GroupBarPlot(array($b1,$b2));
    ...
    $graph->Add($gb); +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/HeaderProperty.html b/Societes/ric/jpgraph/docs/classref/HeaderProperty.html new file mode 100755 index 00000000..cc57e0f4 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/HeaderProperty.html @@ -0,0 +1,366 @@ +


    +(Defined in: jpgraph_gantt.php : 1781)
     
     HeaderProperty 
     SetBackgroundColor() 
    SetFont() 
    SetFontColor() 
    SetFormatString() 
    SetFrameColor() 
    SetFrameWeight() 
    SetInterval() 
    SetIntervall() 
    SetLabelFormatString() 
    SetStyle() 
    SetSundayFontColor() 
    SetTitleVertMargin() 
    SetWeekendColor() 
    +
     

    Class usage and Overview
    Data encapsulating class to hold properties for each type of the scale headers of the Gantt chart. + +It is instantiated in (and accessible through) + + +$ganttgraph->scale->min +$ganttgraph->scale->hour +$ganttgraph->scale->day +$ganttgraph->scale->week +$ganttgraph->scale->month +$ganttgraph->scale->year + + +You use the methods on these object to specify how you want the scale to be displayed. For example specifying if the week view will show start date or week number.

      +


    Class Methods

    +

     

    + +Specify background color in scale

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Specify background color in scale 
    + +

    Example:

    +$ganttgraph->scale->week->SetBackgroundColor('lightblue'); + +

    +

    +

     

    + +Specify font for scale

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFFamily + + + Font family
    +$aFStyle + + + +FS_NORMAL + +Font style
    +$aFSize + + + +10 + +Font size
    + +

    Description:
    Specify font for scale 
    + +

    Example:

    +$ganttgraph->scale->week->SetFont(FF_FONT0); + +

    +

    +

     

    + +Specify font (text) color

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Specify font (text) color 
    + +

    Example:

    +$ganttgraph->scale->week->SetFontColor('darkred'); + +

    +

    +

     

    + +Specify format string for scales

    + + + + +
    ArgumentDefaultDescription
    +$aStr + + + Format string
    + +

    Description:
    Specify printf() style format string for scales 
    +

    +

     

    + +Set color of frame around scale

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Set color of frame around scale 
    + +

    Example:

    +$ganttgraph->scale->year->SetFrameCOlor('darkblue');
    +
    +

    +

    +

     

    + +Specify width of frame around scale

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + Width in pixels
    + +

    Description:
    Specify width of frame around scale 
    + +

    Example:

    +$ganttgraph->scale->year->SetFrameWeight(2); + +

    +

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aInt + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Set scale interval

    + + + + +
    ArgumentDefaultDescription
    +$aInt + + + Integer intervall
    + +

    Description:
    Set scale interval. The exact behaviour depends on if this is evoked on a day, hour or minute scale. +

    +For example if the scale is an hour scale then SetIntervall() will give number of hours between each scale interball. 
    + +

    Example:

    +// Setup minute format
    $graph->scale->minute->SetIntervall(30);
    $graph->scale->minute->SetBackgroundColor('lightyellow:1.5');
    $graph->scale->minute->SetFont(FF_FONT0);
    $graph->scale->minute->SetStyle(MINUTESTYLE_MM);
    $graph->scale->minute->grid->SetColor('lightgray'); +
    +

    +

    +

     

    + +Specify format string for use in scale

    + + + + +
    ArgumentDefaultDescription
    +$aStr + + + printf() style format string
    + +

    Description:
    Specify format string for use in scale. 
    + +

    Example:

    +$ganttgraph->scale->week->SetLabelFormatString('week %d'); + +

    +

    +

     

    + +Specify style of scale.

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + + Scale style
    + +

    Description:
    Specifies how the week, month, day, hour and minute scale should appear. For year scale this method has no meaning. + +For week scale: +
      +
    • WEEKSTYLE_WNBR, Show the numeric week number +
    • WEEKSTYLE_FIRSTDAY, Show the date for the first day in the week. e.g. 24/05 (Meaning 24:th of May) +
    • WEEKSTYLE_FIRSTDAY2, Show the date for the first day in the week but with month as text, e.g. 24 May +
    • WEEKSTYLE_FIRSTDAYWNBR, Same as Firstday above but also adds the week number, e.g. 24/05, w34 +
    • WEEKSTYLE_FIRSTDAY2WNBR, Same as Firstday2 above but also adds the week number, e.g. 24 May, w34 + +
    + +For month scale: +
      +
    • MONTHSTYLE_SHORTNAME, Use short form of month name +
    • MONTHSTYLE_LONGNAME, Use long form of month name +
    • MONTHSTYLE_LONGNAMEYEAR2, Show long month nmame with a 2 digit year +
    • MONTHSTYLE_SHORTNAMEYEAR2, Show short month nmame with a 2 digit year +
    • MONTHSTYLE_LONGNAMEYEAR4, Show long month nmame with a 4 digit year +
    • MONTHSTYLE_SHORTNAMEYEAR4, Show short month nmame with a 4 digit year +
    + +For Day style +
      +
    • "DAYSTYLE_ONELETTER" +
    • "DAYSTYLE_LONG" +
    • "DAYSTYLE_LONGDAYDATE1" +
    • "DAYSTYLE_LONGDAYDATE2" +
    • "DAYSTYLE_SHORT" +
    • "DAYSTYLE_SHORTDAYDATE1" +
    • "DAYSTYLE_SHORTDAYDATE2" +
    • "DAYSTYLE_SHORTDAYDATE3" +
    • "DAYSTYLE_SHORTDATE1" +
    • "DAYSTYLE_SHORTDATE2" +
    • "DAYSTYLE_SHORTDATE3" +
    • "DAYSTYLE_CUSTOM" +
    + +For hour style +
      +
    • "HOURSTYLE_HM24" +
    • "HOURSTYLE_HMAMPM" +
    • "HOURSTYLE_H24" +
    • "HOURSTYLE_HAMPM" +
    • "HOURSTYLE_CUSTOM" +
    + +Minute style +
      +
    • "MINUTESTYLE_MM" +
    • "MINUTESTYLE_CUSTOM" +
    + + 
    + +

    Example:

    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); + +

    +

    +

     

    + +Only used by day scale. Specify font color for sunday.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Only used by day scale. Specify font color for sunday. The default is toi display Sundays in red color as per convention. 
    +  
    See also:
    +

    Example:

    +$ganttgraph->SetSundayFontColor('red'); + +

    +

    +

     

    + +Specify margin above and below text in scale

    + + + + +
    ArgumentDefaultDescription
    +$aMargin + + + Margin in pixels
    + +

    Description:
    Specify margin above and below text in scale 
    + +

    Example:

    +$ganttgraph->scale->year->SetTitleVertMargin(7);
    +
    +

    +

    +

     

    + +Only valid if if used by day scale

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Background color for the weekend
    + +

    Description:
    Specify the background color for weekends. +

    +Tip: If you want the weekend background color to continue down the gantt chart theh use the GanttScale::UseWeekendBackground() method. +  
    +  

    See also:
    +

    Example:

    +$ganttgraph->scale->day->SetWeekendColor('lightgray');
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/HorizontalGridLine.html b/Societes/ric/jpgraph/docs/classref/HorizontalGridLine.html new file mode 100755 index 00000000..fe9e4bf0 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/HorizontalGridLine.html @@ -0,0 +1,87 @@ +


    +(Defined in: jpgraph_gantt.php : 3113)
     
     HorizontalGridLine 
     SetRowFillColor() 
    SetStart() 
    Show() 
    +
     

    Class usage and Overview
    Handles the alternating row colors in the Gantt chart

      +


    Class Methods

    +

     

    + +Specify alternating row fill color

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor1 + + + Color 1
    +$aColor2 + + + +'' + +Color 2
    + +

    Description:
    Specify alternating row fill color for the Gantt chart. + +See gantthgridex1.php for a full example. 
    + +

    Example:

    +...
    $graph->hgrid->Show();
    $graph->hgrid->SetRowFillColor('darkblue@0.9');
    +
    +

    +

    +

     

    + +Specify start row for alternating colors

    + + + + +
    ArgumentDefaultDescription
    +$aStart + + + Start row
    + +

    Description:
    Specify start row for alternating colors. By default it will start from row 0 (first row) 
    +

    +

     

    + +Enable alternating row colors

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + + +true + +TRUE/FALSE
    + +

    Description:
    Enable alternating row colors 
    + +

    Example:

    +$graph->hgrid->Show(); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/IconImage.html b/Societes/ric/jpgraph/docs/classref/IconImage.html new file mode 100755 index 00000000..78b3b138 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/IconImage.html @@ -0,0 +1,127 @@ +


    Class IconImage
    +(Defined in: jpgraph_gantt.php : 1482)
     
     IconImage 
     SetAlign() 
    __construct() 
    +
     

    Class usage and Overview
    Icon object to be used in a title for a Gantt plot object, e.g. bar or milestones. +

    +The icons are then used exactly as you would use text strings when specifying a title for the gantt object. For example: + +$icon = new IconImage(GICON_WARNING,0.7); +$titles = array($icon,'65 days','3 Aug','5 sep'); +$bar = new GanttBar(0,$titles,$startdat,$enddate); +... + +

    +Hint: When using icons togehter with titles the height of each bar is not affected (by design!) of the icons height. If you are using icons in several rows it might therefore be usefull to increase the vertical margin factor between each row. This is done by a call to the method GanttGarph::SetVMarginFactor()

      +


    Class Methods

    +

     

    + +Specify anchor point for icon

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + +'left' + +Horizontal anchor point
    +$aY + + + +'center' + +Vertical anchor point
    + +

    Description:
    Specify where the anchor point for the icon should be. valid anchor points (for both hor and ver - directions) are: +
      +
    • "left" +
    • "center" +
    • "right" +
    +The anchor points determines what position on the icon shoudl be aligned with the specifed x,y position for the icon. + + 
    + +

    Example:

    +$icon = new IconImage("../smiley.png",0.7);
    $icon->SetAlign('center','center');
    +
    +

    +

    +

     

    + +Create a new icon for use in Gantt title columns

    + + + + + + +
    ArgumentDefaultDescription
    +$aIcon + + + Icon specification. Either an image file or one of the builtin icons
    +$aScale + + + +1 + +Scale of icon
    + +

    Description:
    Create a new icon object to be used in a title for a Gantt plot object, e.g. bar or milestones. +

    +An icon can either be created from an arbitrary image file (type is determined by the file extension) or it can also be one of the builtin icons. The builtin icons are: +

      +
    • GICON_WARNINGRED +
    • GICON_TEXT +
    • GICON_ENDCONS +
    • GICON_MAIL +
    • GICON_STARTCONS +
    • GICON_CALC +
    • GICON_MAGNIFIER +
    • GICON_LOCK +
    • GICON_STOP +
    • GICON_WARNINGYELLOW +
    • GICON_FOLDEROPEN +
    • GICON_FOLDER +
    • GICON_TEXTIMPORTANT +
    +

    +A graphic illustration of the differenmt icons can be found in the manual. +

    +The second argument specifies an optional scaling factor for the image/builtin icon. +

    +The icons are then used exactly as you would use text strings when specifying a title for the gantt object. For example: + +$icon = new IconImage(GICON_WARNING,0.7); +$titles = array($icon,'65 days','3 Aug','5 sep'); +$bar = new GanttBar(0,$titles,$startdat,$enddate); +... + +

    +Hint: When using icons togehter with titles the height of each bar is not affected (by design!) of the icons height. If you are using icons in several rows it might therefore be usefull to increase the vertical margin factor between each row. This is done by a call to the method GanttGarph::SetVMarginFactor() 
    +  

    See also:
    +

    Example:

    +// Creating an icon from an image file and scaling it to 70%
    // of original size
    $icon = new IconImage("smiley.png",0.7);

    // Using on of the bultin icons
    $icon = new IconImage(GICON_TEXT,0.8); +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/IconPlot.html b/Societes/ric/jpgraph/docs/classref/IconPlot.html new file mode 100755 index 00000000..46e2278c --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/IconPlot.html @@ -0,0 +1,464 @@ +


    Class IconPlot
    +(Defined in: jpgraph_iconplot.php : 17)
     
     IconPlot 
     CreateFromString() 
    DoLegend() 
    GetAbsHeight() 
    GetLineNbr() 
    GetMaxDate() 
    GetMinDate() 
    GetWidthHeight() 
    Max() 
    Min() 
    PreStrokeAdjust() 
    SetAnchor() 
    SetCountryFlag() 
    SetMix() 
    SetPos() 
    SetScale() 
    SetScalePos() 
    StrokeMargin() 
    StrokeWithScale() 
    _Stroke() 
    __construct() 
    +
     

    Class usage and Overview
    Make it possible to add one or several images on top of the background in the graph. This is constructed in the same way as normal plots are created and the images are added as normal with the GRaph::Add() method. + +It is possoble to specify arbitrary positions as well as mix (blend) and scaling. + +Example: + +$icon = new IconPlot('myicon.png',0.5,0.5); +.. +$graph->Add($icon);

      +


    Class Methods

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aStr + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Nothing to do ...

    + + + + +
    ArgumentDefaultDescription
    +$aGraph + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +// The next four function are framework function tht gets called// from Gantt and is not menaiungfull in the context of Icons but// they must be implemented to avoid errors.

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +// Nothing to do ...

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aGraph + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify anchor point for image

    + + + + + + +
    ArgumentDefaultDescription
    +$aXAnchor + + + +'left' + +Horizontal anchor
    +$aYAnchor + + + +'center' + +Verticla anchor
    + +

    Description:
    Specify anchor point for image. + +Horizontal anchor can be "left','center','right' and vertical anchor can be 'top','center','bottom' + +By default the anchor is the top left corner ('left','top') 
    + +

    Example:

    +$icon->SetAnchor('center','center'); + +

    +

    +

     

    + +Use one of the country flags as icons

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + Partial or full country name
    +$aX + + + +0 + +X-position
    +$aY + + + +0 + +Y-position
    +$aScale + + + +1.0 + +Scaleing of image
    +$aMix + + + +100 + +Blend factor (0-100)
    +$aStdSize + + + +3 + +Which of the flag standard sizes should be used as the original image (1-4)
    + +

    Description:
    Use one of the country flags as icons + 
    + +

    Example:

    +$icon = new IconPlot();
    $icon->SetCountryFlag('norway',0.1,0.1);
    +
    +

    +

    +

     

    + +Specify mix value in percent (0-100) for image-

    + + + + +
    ArgumentDefaultDescription
    +$aMix + + + Mix value (0-100)
    + +

    Description:
    Specify mix value in percent (0-100) for image. The mix value can also be specified directly in the constructor IconPlot(). + 
    + +

    Example:

    +$icon->SetMix(50); + +

    +

    +

     

    + +Specify position for image

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + X-position
    +$aY + + + Y-position
    + +

    Description:
    Specify position for image. Position can be specified as either absolute coordinates or as fractions of the width and height. + +The anchor point in the image can be adjusted with a call to SetAnchor(). By default the anchor point is the top left corner. + 
    +  
    See also:
    +

    Example:

    +$icon->SetPos(0.5,0.5); + +

    +

    +

     

    + +Set scaling for image

    + + + + +
    ArgumentDefaultDescription
    +$aScale + + + Scale value.
    + +

    Description:
    Set scaling for image. This allows you to adjust the size of the image. 
    + +

    Example:

    +$icon->SetScale(0.8); + +

    +

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + No description available
    +$aY + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +&$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    +$axscale + + + No description available
    +$ayscale + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    +$x + + + +null + +No description available
    +$y + + + +null + +No description available
    +$aReturnWidthHeight + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Create a new icon image to be added to the graph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFile + + + +"" + +File name of image
    +$aX + + + +0 + +X-position
    +$aY + + + +0 + +Y-position
    +$aScale + + + +1.0 + +Scale
    +$aMix + + + +100 + +Mixin value
    + +

    Description:
    Create a new icon image to be added to the graph. The position can be specified as either absolute coordinates or as fractions of the width and height repsectively. + +Scale can be an arbitrary floating point number indicating the scaling of the image. + +The mix values specifies (in percent 1-100) how much of the image should be mixed in on top of the background. + 
    + +

    Example:

    +$icon = new IconPlot('myfile.png',0.5,0.5,1,50);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Image.html b/Societes/ric/jpgraph/docs/classref/Image.html new file mode 100755 index 00000000..f76df1f9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Image.html @@ -0,0 +1,294 @@ +


    Class Image
    +(Defined in: jpgraph.php : 5929)
     
     Image 
     RoundedRectangle() 
    SetAlphaBlending() 
    SetAntiAliasing() 
    SetCanvasColor() 
    SetExpired() 
    SetImgFormat() 
    SetMargin() 
    SetQuality() 
    SetTransparent() 
    +
     

    Class usage and Overview
    The Image class encapsulates the very lowest layer in the jpgraph library. It encapsulates the GD library function and presents a coherent interface hiding som of the details in the setup and management of GD. +

    +By replacing Image (and RotImage) it is possible to change the output driver for the whole library withou any further changes. +

    +A very close related class is RotImage which builds directly on Image but in additoin provides a 2D rotation featire, i.e the image may be rotated around a given point and possible also translated. +

    +The image gets instantiated through in the Graph::Img property, or more accurate the RotImage class gets instantiated. The only method in this class that any end user is likely to need (and use) is the SetMargin() method used to give the margins around between the end of the image and the actual plotarea. +

    +Note that all coordinates in methods belonging to Image is given in direct screen coordinates. + + + +

      +

    See also related classes:
    RotImage, RGB and TTF

     


    Class Methods

    +

     

    + +Draw a rectangle with rounded corners

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$xt + + + Top left X
    +$yt + + + Top left Y
    +$xr + + + Bottom right X
    +$yl + + + Bottom right Y
    +$r + + + +5 + +Corner radius
    + +

    Description:
    Draw a rectangle with rounded corners. 
    + +

    Example:

    +$img->RoundedRectangle(0,0,100,100,10); + +

    +

    +

     

    + +Enable alpha blending of colors

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +True/false = Enable/Disable alpha blending
    + +

    Description:
    Alpha blending for colors can only be used with GD 2.x and above. You specify the alpha channel by adding a '@[alpha-value]' to your normal color specification. The alpha value is specified as a fraction in the range [0, 1] and indicated how much of the background color should be visible. +

    +Alphablending is enabled by default (when GD2 is used) but can be turned off by a call to this function with the argument false. 
    + +

    Example:

    +$graph->img->SetAlphaBlending();
    ...
    $lineplot->SetFillColor('orange@0.5');
    +
    +

    +

    +

     

    + +Specify if anti-aliasing should be used

    +
    + +

    Description:
    Specify if anti-aliasing should be used. + +Enabling anti-aliasing will greatly improve the visual apperance of certain graphs. For example spider graphs greatly benefit from this. + +Note: Using anti-aliasing makes line drawing roughly 8 time slower than normal lines !! So you image will take longer to construct. + 
    +  
    See also:
    +

    Example:

    +$graph->img->SetAntiAliasing();
    +
    +

    +

    +

     

    + +Set canvas color

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Set canvas color. The canvas color is the fill color for the frame when it is first created. This is white by defult. If you specify a frame or plot area color this background color will never be visible. +

    +The one time it matters is when you use a drop shadow on the graph. In the small area (top right and bottom left) where there is an empty are which is covered by neither the shadow nor the graph margin this area will have the canvas color. + 
    +  

    See also:
    +

    Example:

    +$graph->SetCanvasColor('lightblue'); + +

    +

    +

     

    + +Turn on/off expired header

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +True=Return expired header.
    + +

    Description:
    Specify that the header returned should not only contain the image format but also the meta tags to force the browser not to cache and reload the image every time the script is called. +

    +By default this is turned on. +

    +Note: There is no reason as far as we can tell to turn this off. + 
    + +

    Example:

    +$graph->img->SetExpired(false); + +

    +

    +

     

    + +Specify what image format to use

    + + + + + + +
    ArgumentDefaultDescription
    +$aFormat + + + Image format
    +$aQuality + + + +75 + +No description available
    + +

    Description:
    Specify image format. Note depending on your installation of PHP not all formats may be supported. + +Supported formats are: +
      +
    • "gif", GIF format. Please note that GD 1.8 and above no longer supports the GIF format. +
    • "png", PNG format +
    • "jpeg", JPEG format. The quality of the JPEG format can be specified with the SetQuality() method. +

    +  
    See also:
    +

    Example:

    +$graph->img->SetImgFormat('jpeg'); + +

    +

    +

     

    + +Specify margin for the plot area

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$lm + + + Left margin
    +$rm + + + Right margin
    +$tm + + + Top margin
    +$bm + + + Bottom margin
    + +

    Description:
    Specify margin for the plot area. + 
    + +

    Example:

    +$graph->img->SetMargin(20,20,40,20);
    +
    +

    +

    +

     

    + +Specify JPEG image quality

    + + + + +
    ArgumentDefaultDescription
    +$q + + + Image quality paramer (0-100)
    + +

    Description:
    Specify JPEG image quality. For this to have any effect the image format, as specified with SetImgFormat(), must have been set to "jpeg". + +The quality is specified as an integer in the range 0 (worst quality) to 100 (best quality) . By default the quality is set o 75. 
    +  
    See also:
    +

    Example:

    +$graph->image->SetQuality(40); + +

    +

    +

     

    + +Specify transparent color

    + + + + +
    ArgumentDefaultDescription
    +$color + + + Color
    + +

    Description:
    Specify transparent color for image. 
    + +

    Example:

    +$graph->img->SetTransparent("white");
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/ImgTrans.html b/Societes/ric/jpgraph/docs/classref/ImgTrans.html new file mode 100755 index 00000000..572fd9e0 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/ImgTrans.html @@ -0,0 +1,354 @@ +


    Class ImgTrans
    +(Defined in: jpgraph_imgtrans.php : 15)
     
     ImgTrans 
     Skew3D() 
    _Skew3D() 
    _TransHor3D() 
    _TransVert3D() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +// --------------------------------------------------------------------// Skew image for the apperance of a 3D effect// This transforms an image into a 3D-skewed version// of the image. The transformation is specified by giving the height// of the artific

    + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aHorizon + + + +120 + +No description available
    +$aSkewDist + + + +150 + +No description available
    +$aDir + + + +SKEW3D_DOWN + +No description available
    +$aHiQuality + + + +false + +No description available
    +$aMinSize + + + +true + +No description available
    +$aFillColor + + + +'#FFFFFF' + +No description available
    +$aBorder + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aGdImg + + + No description available
    +$aHorizon + + + +120 + +No description available
    +$aSkewDist + + + +150 + +No description available
    +$aDir + + + +SKEW3D_DOWN + +No description available
    +$aHiQuality + + + +false + +No description available
    +$aMinSize + + + +true + +No description available
    +$aFillColor + + + +'#FFFFFF' + +No description available
    +$aBorder + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// --------------------------------------------------------------------// _TransVert3D() and _TransHor3D() are helper methods to// Skew3D().// --------------------------------------------------------------------

    + + + + + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aGdImg + + + No description available
    +$aHorizon + + + +100 + +No description available
    +$aSkewDist + + + +120 + +No description available
    +$aDir + + + +SKEW3D_LEFT + +No description available
    +$aMinSize + + + +true + +No description available
    +$aFillColor + + + +'#FFFFFF' + +No description available
    +$aQuality + + + +false + +No description available
    +$aBorder + + + +false + +No description available
    +$aHorizonPos + + + +0.5 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// --------------------------------------------------------------------// _TransVert3D() and _TransHor3D() are helper methods to// Skew3D().// --------------------------------------------------------------------

    + + + + + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aGdImg + + + No description available
    +$aHorizon + + + +100 + +No description available
    +$aSkewDist + + + +120 + +No description available
    +$aDir + + + +SKEW3D_DOWN + +No description available
    +$aMinSize + + + +true + +No description available
    +$aFillColor + + + +'#FFFFFF' + +No description available
    +$aQuality + + + +false + +No description available
    +$aBorder + + + +false + +No description available
    +$aHorizonPos + + + +0.5 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +//=======================================================================// File: JPGRAPH_IMGTRANS.PHP// Description: Extension for JpGraph to do some simple img transformations// Created: 2003-09-06// Ver: $Id: jpgraph_imgtrans.php 110

    + + + + +
    ArgumentDefaultDescription
    +$aGdImg + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/JpGraphException.html b/Societes/ric/jpgraph/docs/classref/JpGraphException.html new file mode 100755 index 00000000..0603fb15 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/JpGraphException.html @@ -0,0 +1,65 @@ +


    +(Defined in: jpgraph_errhandler.inc.php : 139)
     
     JpGraphException  Exception 
     Stroke() 
    _toString() 
    __construct() 
    +
     
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +// custom representation of error as an image

    +
    + +

    Description:
    No description available.

    +

     

    + +// custom string representation of object

    +
    + +

    Description:
    No description available.

    +

     

    + +// Redefine the exception so message isn't optional

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$message + + + No description available
    +$code + + + No description available
    + + + + No description available
    + + + + +0 + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/JpGraphExceptionL.html b/Societes/ric/jpgraph/docs/classref/JpGraphExceptionL.html new file mode 100755 index 00000000..135155f1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/JpGraphExceptionL.html @@ -0,0 +1,78 @@ +


    +(Defined in: jpgraph_errhandler.inc.php : 177)
     
     JpGraphExceptionL  JpGraphException 
     __construct() 
    +
     Stroke() 
    _toString() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +// Redefine the exception so message isn't optional

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$errcode + + + No description available
    +$a1 + + + +null + +No description available
    +$a2 + + + +null + +No description available
    +$a3 + + + +null + +No description available
    +$a4 + + + +null + +No description available
    +$a5 + + + +null + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/LayoutHor.html b/Societes/ric/jpgraph/docs/classref/LayoutHor.html new file mode 100755 index 00000000..3dba4f38 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/LayoutHor.html @@ -0,0 +1,76 @@ +


    Class LayoutHor Extends RectLayout
    +(Defined in: jpgraph_odo.php : 779)
     
     LayoutHor  RectLayout 
     getHeight() 
    getWidth() 
    Stroke() 
    __construct() 
    +
     LayoutSize() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$graph + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aObjArr + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/LayoutRect.html b/Societes/ric/jpgraph/docs/classref/LayoutRect.html new file mode 100755 index 00000000..7de6f40d --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/LayoutRect.html @@ -0,0 +1,102 @@ +


    +(Defined in: jpgraph_glayout_vh.inc.php : 14)
     
     LayoutRect 
     getHeight() 
    getWidth() 
    SetCenterPos() 
    Stroke() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$x + + + No description available
    +$y + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$graph + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// File: JPGRAPH_GLAYOUT_VH.INC.PHP// Description: JpGraph Layout classes for automatic layout of// objects in a graph. The layout is a simple even division// depending on the objects sizes// Created: 2009-07-08// Ver:

    + + + + + + +
    ArgumentDefaultDescription
    +$width + + + No description available
    +$height + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/LayoutVert.html b/Societes/ric/jpgraph/docs/classref/LayoutVert.html new file mode 100755 index 00000000..352f0ca5 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/LayoutVert.html @@ -0,0 +1,76 @@ +


    Class LayoutVert Extends RectLayout
    +(Defined in: jpgraph_odo.php : 736)
     
     LayoutVert  RectLayout 
     getHeight() 
    getWidth() 
    Stroke() 
    __construct() 
    +
     LayoutSize() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$graph + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +//echo "w=$w, x1=".($xstart + $w/2.0).", y1=".($this->icy)."
    ";

    + + + + +
    ArgumentDefaultDescription
    +$aObjArr + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Legend.html b/Societes/ric/jpgraph/docs/classref/Legend.html new file mode 100755 index 00000000..b065d81e --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Legend.html @@ -0,0 +1,546 @@ +


    Class Legend
    +(Defined in: jpgraph_legend.inc.php : 22)
     
     Legend 
     Hide() 
    Pos() 
    SetAbsPos() 
    SetColor() 
    SetColumns() 
    SetFillColor() 
    SetFont() 
    SetFrameWeight() 
    SetHColMargin() 
    SetLayout() 
    SetLeftMargin() 
    SetLineSpacing() 
    SetLineWeight() 
    SetMarkAbsHSize() 
    SetMarkAbsSize() 
    SetMarkAbsVSize() 
    SetPos() 
    SetReverse() 
    SetShadow() 
    SetVColMargin() 
    +
     

    Class usage and Overview
    This class is responsible for drawing a legend at the specified position in the graph. Individual data series are added by calling it's Add() method. +

    +This is all handled by the framework. Legend is instantiated in the graph as instance variable legend. When stroking individual plots this instance variable is used by the individual Legend() methods in the plot classes to add whatever the individual plots need to add. +

      +


    Class Methods

    +

     

    + +Hide legend box

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + + +true + +True = hide
    + +

    Description:
    Hides the legend. 
    + +

    Example:

    +$graph->legend->Hide(); + +

    +

    +

     

    + +Specify the position for the legend box

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + X coordinate
    +$aY + + + Y coordinate
    +$aHAlign + + + +'right' + +Horizontal alignment
    +$aVAlign + + + +'top' + +Vertical alignment
    + +

    Description:
    Set the position of the legend box on the Graph. The alignment arguments determine how the position of the legend box should be interpretated, i.e from what position on the Graph should the fraction be counted. ('right' uses the right side and positoins the legend with its left side according to the specified fraction and so on). Possible alignemts are: +

    +Horizontal: 'left','right','center'
    +Vertical: 'bottom','top','center' +

    +Please note that the X and Y positions should be give as fractions , i.e Pos(0.1,0.1) +

    +If the alignment is not given the the default is 'right','top' 
    + +

    Example:

    +$graph->legend->Pos(0.05,0.1); + +

    +

    +

     

    + +Specify X and Y coordinate for the legend box

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + x Coordinate
    +$aY + + + y Coordinate
    +$aHAlign + + + +'right' + +Horizontal anchor point
    +$aVAlign + + + +'top' + +Vertical Anchor point
    + +

    Description:
    Specify X and Y coordinate for the legend box 
    + +

    Example:

    +// 10x10 pixels from the upper right corner
    $graph->legend->SetAbsPos(10,10,'right','top') +
    +

    +

    +

     

    + +Set color on frame around box

    + + + + + + +
    ArgumentDefaultDescription
    +$aFontColor + + + Font coor
    +$aColor + + + +'black' + +Frame color
    + +

    Description:
    Specify the color for both the frame around the legend box as well as the font color used for the legend texts. Please note that this does not affect the fill color of the legend box. 
    +  
    See also:
    +

    Example:

    +$graph->legend->SetColor('blue'); + +

    +

    +

     

    + +Specify the number of text columns to use

    + + + + +
    ArgumentDefaultDescription
    +$aCols + + + Number of columns
    + +

    Description:
    Specify the number of text columns to use in the legend text box. For graphs which have a large number of plots it might be necessary to specify 2 or more columns to avois that the legend box become to large. +

    +By default i column us used. 
    + +

    Example:

    +$graph->legend->SetColumns(2); + +

    +

    +

     

    + +Specify fill color for legend box

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Fill color
    + +

    Description:
    Specify the background color for the legend box. The properties for the legend is noramlly accessed through the graph instance variable '$legend' 
    +  
    See also:
    +

    Example:

    +$graph->legend->SetFillColor('lightblue'); + +

    +

    +

     

    + +Set font for texts in legend box.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFamily + + + Font family
    +$aStyle + + + +FS_NORMAL + +Font style
    +$aSize + + + +10 + +Font size
    + +

    Description:
    Set font for texts in legend box. 
    + +

    Example:

    +$graph->legend->SetFont(FF_FONT2,FS_NORMAL); + +

    +

    +

     

    + +Specify the width of the frame around the Legend box

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + Width in pixels
    + +

    Description:
    Specify the width of the frame around the Legend box 
    + +

    Example:

    +$graph->legend->SetFrameWeight(2); + +

    +

    +

     

    + +Specify margin between columns in te legend

    + + + + +
    ArgumentDefaultDescription
    +$aXMarg + + + No description available
    + +

    Description:
    Specify margin between columns in te legend 
    +

    +

     

    + +Specify vertical or horizontal legend layout

    + + + + +
    ArgumentDefaultDescription
    +$aDirection + + + +LEGEND_VERT + +Layout for legend box
    + +

    Description:
    The legend box can either have the legend stacke vertically or horizontally. The default is vertically stacked legends. +

    +Allowed arguments: LEGEND_VERT,LEGEND_HOR +

    +Please note that horizontal layout is only suitable for a few legends since it makes use of quite a lot of horizontal space. 
    + +

    Example:

    +// Put a horizontal legend box at the bottom of the graph
    $graph->legend->Pos(0.5,0.0.5,'left','bottom');
    $graph->legend->SetLayout(LEGEND_HOR); +
    +

    +

    +

     

    + +Specify marging between the left edge and the first column

    + + + + +
    ArgumentDefaultDescription
    +$aXMarg + + + No description available
    + +

    Description:
    Specify marging between the left edge and the first column 
    +

    +

     

    + +Extra vertical spacing (in pixels) between rows

    + + + + +
    ArgumentDefaultDescription
    +$aSpacing + + + Extra margin (in pixels)
    + +

    Description:
    Extra vertical spacing (in pixels) between rows 
    + +

    Example:

    +// Add 5 pixels extra margin between each legend row
    $graph->legend->SetLineSpacing(5); +
    +

    +

    +

     

    + +Set the line width for the indicators.

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + Line weight in pixels
    + +

    Description:
    Specify the line width for the color boxes that are used as indicators. 
    + +

    Example:

    +$graph->legend->SetLineWeight(2); + +

    +

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify the size of the marker in pixels

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + + Size in pixels
    + +

    Description:
    Specify the size of the marker in pixels to be used in the legend. This is used for the plot marks, for example squares or circles, when you want to control what the size used in the legend should be. +

    +It is often desirable to use a smaller size for the marks in the legend than in the graph itself. 
    + +

    Example:

    +$graph->legend->SetMarkAbsSize(6); + +

    +

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Alias for Pos. Specify Position for Legend

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + X position
    +$aY + + + Y position
    +$aHAlign + + + +'right' + +Horizontal anchor point
    +$aVAlign + + + +'top' + +Vertical anchor point
    + +

    Description:
    See Legend::Pos() 
    +  
    See also:
    +

    Example:

    +$graph->legend->SetPos(0.05,0.5,'right','center'); + +

    +

    +

     

    + +Print the legend in reverse order

    + + + + +
    ArgumentDefaultDescription
    +$f + + + +true + +TRUE=In reverse order
    + +

    Description:
    Print the legend in reverse order 
    + +

    Example:

    +$graph->legend->SetReverse(); + +

    +

    +

     

    + +Add a drop shadow to the legend box

    + + + + + + +
    ArgumentDefaultDescription
    +$aShow + + + +'gray' + +True = show drop shadow
    +$aWidth + + + +2 + +Width of drop shadow in pixels
    + +

    Description:
    Add a drop down shadow for the legend box. 
    + +

    Example:

    +// Use a shadow width default width
    $graph->legend->SetShadow(); +
    +

    +

    +

     

    + +Specify the margin between rows in the legend

    + + + + +
    ArgumentDefaultDescription
    +$aSpacing + + + No description available
    + +

    Description:
    Specify the margin between rows in the legend 
    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/LegendStyle.html b/Societes/ric/jpgraph/docs/classref/LegendStyle.html new file mode 100755 index 00000000..282fe063 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/LegendStyle.html @@ -0,0 +1,372 @@ +


    +(Defined in: jpgraph_windrose.php : 275)
     
     LegendStyle 
     Hide() 
    SetCFont() 
    SetCFontColor() 
    SetCircleColor() 
    SetCircleRadius() 
    SetCircleText() 
    SetCircleWeight() 
    SetFont() 
    SetFontColor() 
    SetFormat() 
    SetLength() 
    SetLFont() 
    SetLFontColor() 
    SetMargin() 
    SetText() 
    SetTFont() 
    SetTFontColor() 
    Show() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFontFamily + + + No description available
    +$aFontStyle + + + +FS_NORMAL + +No description available
    +$aFontSize + + + +10 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aRadius + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +//===================================================// CLASS LegendStyle//===================================================

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFontFamily + + + No description available
    +$aFontStyle + + + +FS_NORMAL + +No description available
    +$aFontSize + + + +10 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFmt + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aLength + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFontFamily + + + No description available
    +$aFontStyle + + + +FS_NORMAL + +No description available
    +$aFontSize + + + +10 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aMarg + + + No description available
    +$aBottomMargin + + + +5 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFontFamily + + + No description available
    +$aFontStyle + + + +FS_NORMAL + +No description available
    +$aFontSize + + + +10 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/LineErrorPlot.html b/Societes/ric/jpgraph/docs/classref/LineErrorPlot.html new file mode 100755 index 00000000..744a21a6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/LineErrorPlot.html @@ -0,0 +1,48 @@ +


    +(Defined in: jpgraph_error.php : 120)
     
     LineErrorPlot  ErrorPlot 
     __construct() 
    +
     __construct() 
    +
     

    Class usage and Overview
    A line error plot is in principle a line plot but with the added feature that each point also have a two error values. Low and high error. + +This means that data array must be an even number of three values.

      +

    See also related classes:
    LinePlot

     


    Class Methods

    +

     

    + +Constructor for a line plot with error bars

    + + + + + + +
    ArgumentDefaultDescription
    +$datay + + + No description available
    +$datax + + + +false + +X-Data [optional]
    + +

    Description:
    Same as a line plot but each data point has three values, the value, and error min, and error max. The error bars are then drawn as vertical lines at each data point. 
    + +

    Example:

    +$leplot = new LineErrorPlot($ydata); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/LinePlot.html b/Societes/ric/jpgraph/docs/classref/LinePlot.html new file mode 100755 index 00000000..d9f5913a --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/LinePlot.html @@ -0,0 +1,354 @@ +


    Class LinePlot Extends Plot
    +(Defined in: jpgraph_line.php : 24)
     
     LinePlot  Plot 
     AddArea() 
    LinePlot() 
    SetBarCenter() 
    SetColor() 
    SetFastStroke() 
    SetFillColor() 
    SetFillFromYMin() 
    SetFillGradient() 
    SetStepStyle() 
    SetStyle() 
    +
     HideLegend() 
    PreScaleSetup() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetLegend() 
    SetLineWeight() 
    +
     

    Class usage and Overview
    This class is used to creat line graph plots. Line graph plots are used to draw standard lineplots where datapoints are connected by lines. Each data point can also be marked by a plotmark. +

    +A line plot can only be added to a Graph() image. + +Public properties: + + + + PlotMark + + DisplayValue + + +
    Name Type Description
    mark Mark at each data point
    value Determine if and hhow each data value should be displayed in the plot

      +

    See also related classes:
    AccLinePlot

     


    Class Methods

    +

     

    + +Create a colored area under part of the lien graph.

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aMin + + + +0 + +Start X-value
    +$aMax + + + +0 + +End X-value
    +$aFilled + + + +LP_AREA_NOT_FILLED + +Fill area or not (true/false)
    +$aColor + + + +"gray9" + +Color of fill
    +$aBorder + + + +LP_AREA_BORDER + +Use a border (true/false)
    + +

    Description:
    Create a vertical colored area under the line between two X-values and to the top of the line. +

    +Predefined values for $aFilled are:
    +LP_AREA_FILLED
    +LP_AREA_NOT_FILLED

    + +

    Example:

    +$lineplot->AddArea(2,5,LP_AREA_FILLED,"indianred1"); + +

    +

    +

     

    + +Public Constructor for LinePlot +

    + + + + + + +
    ArgumentDefaultDescription
    +$datay + + + No description available
    +$datax + + + +false + +X-data
    + +

    Description:
    Create a new LinePlot which later can be added to the graph with the Graph::Add() or Graph::AddY2() method. +

    +A plot can be specified with either only Y-values or both Y-and X-values. If both X and Y values are specified they should have the same number of elements. 
    +  

    See also:
    +

    Example:

    +
    $lineplot 
    = new LinePlot($ydata); +
    +

    +

    +

     

    + +Adjust the positioning of line plots when combined with a bar plot

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + +true + +TRUE = Align line points to center of bars
    + +

    Description:
    By default the lineplots gets aligned to the left side of the bars when using a text X-scale. By calling this method the line points instead gets aligned to the center of the bars. +

    +This method is only to be used in the case where line and bar plots are combined. Any other use is undefined. 
    + +

    Example:

    +$ydata = array(12,15,22,19,5);
    $graph = new Graph(400,200);
    $graph->SetScale("textlin");
    $line = new LinePlot($ydata);
    $line->SetBarCenter();
    $bar = new BarPlot($ydata);
    $graph->Add($bar);
    $graph->Add($line);
    +
    +

    +

    +

     

    + +Set color for the line plot.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Specify color for line. 
    + +

    Example:

    +$lp = new LinePlot($ydata);

    // Set full blue
    $lp->SetColor('#0000FF'); +
    +

    +

    +

     

    + +Use Fast version of Stroke()

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +TRUE=Use fast stroke
    + +

    Description:
    Use Fast version of Stroke(). This is useful for line plots which have many thousand points. This method is a lot faster than the usual Stroke() but also have a lot less functionality and puts restriction on the complexity of the line. The lines can have no plotmarks, must be solid and have a line width of 1 
    + +

    Example:

    +$lineplot->SetFastStroke() + +

    +

    +

     

    + +Specify fill color

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    +$aFilled + + + +true + +Flag. Filled or not
    + +

    Description:
    Specify that a lineplot should be filled as well as the fill color. 
    +  
    See also:
    +

    Example:

    +$lp->SetFillColor('green');
    +
    +

    +

    +

     

    + +Fill line not from 0 but from the minimum Y value

    + + + + +
    ArgumentDefaultDescription
    +$f + + + +true + +TRUE=fill from minimum
    + +

    Description:
    Fill line not from 0 (as default) but from the minimum Y value. This is mostly usefull when a plot have the negative value and the X-axis is placed at the minimum Y-alue (at the bottom) 
    + +

    Example:

    +$lineplot->SetFillFromYMin();
    +
    +

    +

    +

     

    + +Specify a gradient fill for the line plot

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFromColor + + + Start color
    +$aToColor + + + End color
    +$aNumColors + + + +100 + +Number of colors to use in transition
    +$aFilled + + + +true + +TRUE=Enable gradient fill
    + +

    Description:
    Specify a gradient fill for the line plot. Currently only vertical gradient fill is supported, i.e. the transiiton from color 1 to color 2 is vertical. + 
    + +

    Example:

    +$p1 = new LinePlot($datay);
    $p1->SetFillGradient('white','darkgreen');
    +
    +

    +

    +

     

    + +Use step style for line graph.

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + +true + +Flag. true to use step style.
    + +

    Description:
    If the step style is enabled then each point will be connected not with a straight line between the points but with one horizontal and one vertical line. This makes the graph look like a stair where the next data point indicates if the stair is going up or down. + 
    + +

    Example:

    +$lp->SetStepStyle();
    +
    +

    +

    +

     

    + +Specify line style.

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + + Text string to specify line
    + +

    Description:
    Linestyle for lines. Valid linestyles are:
    +'solid', 'dotted', 'dashed' +

    +The default line style is 'solid' + 
    +  

    See also:
    +

    Example:

    +$lp->SetStyle('dotted');
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/LineProperty.html b/Societes/ric/jpgraph/docs/classref/LineProperty.html new file mode 100755 index 00000000..8a3c7e91 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/LineProperty.html @@ -0,0 +1,141 @@ +


    +(Defined in: jpgraph.php : 2945)
     
     LineProperty 
     SetColor() 
    SetStyle() 
    SetWeight() 
    Show() 
    __construct() 
    +
     

    Class usage and Overview
    Property class to define properties for a line. Currently used only by Gantt chart to specify the grid line properties.

      +


    Class Methods

    +

     

    + +Set line color

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Set line color 
    + +

    Example:

    +$gantgraph->grid->SetColor('darkgrey'); + +

    +

    +

     

    + +Set line style

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + + Line style
    + +

    Description:
    Linestyle for lines. Valid linestyles are:
    +'solid', 'dotted', 'dashed' +

    +The default line style is 'solid' 
    +  

    See also:
    +

    Example:

    +$gantgraph->grid->SetColor('darkgrey'); + +

    +

    +

     

    + +Specify weight of the line

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + Line width in pixels
    + +

    Description:
    Set line width 
    + +

    Example:

    +$gantgraph->grid->SetWeight(2); + +

    +

    +

     

    + +Determine if the line should be hidden or not

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + + +true + +True=Display line
    + +

    Description:
    Show line, default is to hide the line. 
    + +

    Example:

    +$gantgraph->grid->Show(false); // Hide the grid + +

    +

    +

     

    + +//===================================================// CLASS LineProperty// Description: Holds properties for a line//===================================================

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + +1 + +No description available
    +$aColor + + + +'black' + +No description available
    +$aStyle + + + +'solid' + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/LinearRegression.html b/Societes/ric/jpgraph/docs/classref/LinearRegression.html new file mode 100755 index 00000000..c7dee8c8 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/LinearRegression.html @@ -0,0 +1,87 @@ +


    +(Defined in: jpgraph_utils.inc.php : 508)
     
     LinearRegression 
     Calc() 
    GetAB() 
    GetStat() 
    GetY() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aMinX + + + No description available
    +$aMaxX + + + No description available
    +$aStep + + + +1 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +//=============================================================================// Class LinearRegression//=============================================================================

    + + + + + + +
    ArgumentDefaultDescription
    +$aDataX + + + No description available
    +$aDataY + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/LinearScale.html b/Societes/ric/jpgraph/docs/classref/LinearScale.html new file mode 100755 index 00000000..1db4b300 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/LinearScale.html @@ -0,0 +1,134 @@ +


    +(Defined in: jpgraph.php : 4397)
     
     LinearScale 
     SetAutoMax() 
    SetAutoMin() 
    SetAutoTicks() 
    SetGrace() 
    +
     

    Class usage and Overview
    This class is the main scale class and implements the linear and integer scale for the axis.

      +

    See also related classes:
    Axis and LogScale

     


    Class Methods

    +

     

    + +Fix the maximum value for a scale

    + + + + +
    ArgumentDefaultDescription
    +$aMax + + + Maximum value
    + +

    Description:
    Fix a maximum value for a scale eventhough autoscaling is used for the min value. 
    + +

    Example:

    +// For a negative scale we might want to make sure it
    // always start at the top from 0
    $graph->y2scale->SetAutoMax(0); +
    +

    +

    +

     

    + +Set the minimum data value when the autoscaling is used.

    + + + + +
    ArgumentDefaultDescription
    +$aMin + + + Min value
    + +

    Description:
    Set the minimum data value when the autoscaling is used. Usefull if you want a fix minimum (like 0) but automtic maximum value. 
    + +

    Example:

    +// Just let the maximum be autoscaled
    $graph->yaxis->scale->SetAutoMin(0); +
    +

    +

    +

     

    + +Determine ticks automtically with manual scale

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + +true + +TRUE = determine ticks automatically
    + +

    Description:
    This is used in conjunction when a manual scale is specified. In normall cases one has also to specify major and minor tick steps. +

    +For example:
    + +$graph->SetScale("textlin",0,70);
    +$graph->yscale->ticks->Set(10,2); +

    +However by instead using +

    +$graph->SetScale("textlin",0,70);
    +$graph->yscale->SetAutoTicks(); +

    +The major and minor ticks are determined automatically. +

    +The thing you have to be aware of is that the specified min and max values might be slightly modified so that the end/beginning of the scale will fall on a major tick step. +

    +By default the auto ticks are off. + + + 
    +  

    See also:
    +

    Example:

    +// Manually set Y-scale min=30, max=90
    $graph->SetScale('textlin',30,90);

    // Let JpGraph figure out suitable tick marks
    $graph->yscale->SetAutoTicks();

    +
    +

    +

    +

     

    + +// Specify scale "grace" value (top and bottom)

    + + + + + + +
    ArgumentDefaultDescription
    +$aGraceTop + + + Top grace value
    +$aGraceBottom + + + +0 + +Bottom grace value
    + +

    Description:
    By default the autoscaling determines the minimum and maximum as close to the plots min and max values as possible. Sometimes this might not be suitable and you need some more "air". For example if you plot a bar plot with values on top of the bar. If the bar reaces the max value (which is also the scale end point) the value on top of the bar might be out in the margin.) +

    +By specifyin the grace you get added space. The value specified is interpretated as extra percentage of the total scale range. +

    +For example if the scale range (without grace) is (0,100) and you add 10% top grace (with SetGrace(10)) the modified scale will be (0,110) and if you use a 100% top grace the scale will be (0,200) and so on. 
    + +

    Example:

    +$graph->xaxis->scale->SetGrace(50); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/LinearTicks.html b/Societes/ric/jpgraph/docs/classref/LinearTicks.html new file mode 100755 index 00000000..b874b56e --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/LinearTicks.html @@ -0,0 +1,189 @@ +


    Class LinearTicks Extends Ticks
    +(Defined in: jpgraph.php : 4032)
     
     LinearTicks  Ticks 
     AdjustForDST() 
    GetMajor() 
    GetMinor() 
    Set() 
    SetMajTickPositions() 
    SetTextLabelStart() 
    SetTickPositions() 
    +
     SetColor() 
    SetFormatCallback() 
    SetLabelFormat() 
    SetSide() 
    SetSize() 
    SetWeight() 
    SupressFirst() 
    SupressLast() 
    SupressMinorTickMarks() 
    SupressTickMarks() 
    SupressZeroLabel() 
    +
     

    Class usage and Overview
    Internal class that handles the drawing and formatting of the tick marks on each axis. This class is accessed through it'sinstance variable in the scale, e.g. +

    +$graph->xaxis->scale->ticks->Set(20,10); +

    +Note: When you manually specify a scale you must also specify the major/minor tick intervall.

      +

    See also related classes:
    LinearScale and LogScale

     


    Class Methods

    +

     

    + +// For a normal linear type of scale the major ticks will always be multiples// of the minor ticks. In order to avoid any rounding issues the major ticks are// defined as every "step" minor ticks and not calculated separately

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Return major step size in world coordinates

    +
    + +

    Description:
    Return major step size in world coordinates 
    + +

    Example:

    +$majintervall $graph->xaxis->scale->ticks->Getmajor(); + +

    +

    +

     

    + +// Return minor step size in world coordinates

    +
    + +

    Description:
    Return minor step size in world coordinates. 
    + +

    Example:

    +$majintervall $graph->xaxis->scale->ticks->Getmajor(); + +

    +

    +

     

    + +// Set Minor and Major ticks (in world coordinates)

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajStep + + + Distance between major tick marks
    +$aMinStep + + + +false + +Distance between minor tick marks
    + +

    Description:
    Set Minor and Major tick intervall (in world coordinates) 
    + +

    Example:

    +$graph->yaxis->scale->ticks->Set(40,20); + +

    +

    +

     

    + +//(" Minor or major step size is 0. Check that you haven't got an accidental SetTextTicks(0) in your code. If this is not the case you might have stumbled upon a bug in JpGraph. Please report this and if possible include the data that caused the problem."

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajPos + + + No description available
    +$aLabels + + + +NULL + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Which tick label should we start with?

    + + + + +
    ArgumentDefaultDescription
    +$aTextLabelOff + + + The number thaht the automatic textscale should start with.
    + +

    Description:
    Normally text labels start at 0. However, automtic text labels can be started with an arbitrary number as specified with the argument to this method. + 
    + +

    Example:

    +$graph->xaxis->scale->ticks->SetTextLabelStart(10);
    +
    +

    +

    +

     

    + +Manually specify tick positions for the axis

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aMajPos + + + Array of major positions
    +$aMinPos + + + +NULL + +Array of minor positions
    +$aLabels + + + +NULL + +Array of major label strings
    + +

    Description:
    Manually specify major and minor tick positions for the axis together with the optional label strings. If no label array is specified then the numerical values at the positions of the major tick marks will be used as label strings. 
    + +

    Example:

    +$graph->xaxis->SetMajTickPositions($tickPositions,$tickLabels); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/LogScale.html b/Societes/ric/jpgraph/docs/classref/LogScale.html new file mode 100755 index 00000000..c84dde6a --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/LogScale.html @@ -0,0 +1,45 @@ +


    Class LogScale Extends LinearScale
    +(Defined in: jpgraph_log.php : 19)
     
     LogScale  LinearScale 
     GetMaxVal() 
    GetMinVal() 
    +
     SetAutoMax() 
    SetAutoMin() 
    SetAutoTicks() 
    SetGrace() 
    +
     

    Class usage and Overview
    Implements a logarithmic scale. Normally accessed through the axis 'scale' property, for example $graph->xaxis->sclal

      +

    See also related classes:
    LinearScale and Axis

     


    Class Methods

    +

     

    + +Get max value for scale.

    +
    + +

    Description:
    Get max scale value for scale. 
    +  
    See also:
    +

    Example:

    +$max $graph->yaxis->scale->GetMaxVal(); + +

    +

    +

     

    + +Get minimum scale value.

    +
    + +

    Description:
    Get minimum scale value. 
    +  
    See also:
    +

    Example:

    +$max $graph->yaxis->scale->GetMinVal(); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/LogTicks.html b/Societes/ric/jpgraph/docs/classref/LogTicks.html new file mode 100755 index 00000000..6378cefd --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/LogTicks.html @@ -0,0 +1,56 @@ +


    Class LogTicks Extends Ticks
    +(Defined in: jpgraph_log.php : 129)
     
     LogTicks  Ticks 
     SetLabelLogType() 
    +
     SetColor() 
    SetFormatCallback() 
    SetLabelFormat() 
    SetSide() 
    SetSize() 
    SetWeight() 
    SupressFirst() 
    SupressLast() 
    SupressMinorTickMarks() 
    SupressTickMarks() 
    SupressZeroLabel() 
    +
     

    Class usage and Overview
    This class represents ticks on a logarithmic scale axis. It is responsible for drawing and positioning ticks.

      +

    See also related classes:
    LogScale and Axis

     


    Class Methods

    +

     

    + +Should the log labels be dispalyed with magnitudes ot plain numbers

    + + + + +
    ArgumentDefaultDescription
    +$aType + + + Magnitude (10^x) or plain
    + +

    Description:
    Specify how labels for log scales should be formatted as magnitude (scientific) or plain. +

    +$aType can be either +

      +
    • LOGLABELS_PLAIN, will show labels as for example 10000 +
    • LOGLABELS_MAGNITUDE, will show labels as 10^4 +
    + +By default log scale uses magnitude type of labels. + 
    + +

    Example:

    +$graph->yaxis->scale->ticks->SetLabelLogType(LOGLABELS_PLAIN); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/MGraph.html b/Societes/ric/jpgraph/docs/classref/MGraph.html new file mode 100755 index 00000000..2e5115d3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/MGraph.html @@ -0,0 +1,484 @@ +


    Class MGraph
    +(Defined in: jpgraph_mgraph.php : 16)
     
     MGraph 
     Add() 
    AddMix() 
    SetBackgroundImage() 
    SetBackgroundImageMix() 
    SetExpired() 
    SetFillColor() 
    SetFrame() 
    SetImgFormat() 
    SetMargin() 
    Stroke() 
    _gdImgHandle() 
    _strokeBackgroundImage() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aGraph + + + No description available
    +$x + + + +0 + +No description available
    +$y + + + +0 + +No description available
    +$fx + + + +0 + +No description available
    +$fy + + + +0 + +No description available
    +$w + + + +0 + +No description available
    +$h + + + +0 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// Just copy the image from left corner, no resizing

    + + + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aGraph + + + No description available
    +$x + + + +0 + +No description available
    +$y + + + +0 + +No description available
    +$mix + + + +100 + +No description available
    +$fx + + + +0 + +No description available
    +$fy + + + +0 + +No description available
    +$w + + + +0 + +No description available
    +$h + + + +0 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// Specify a background image

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFileName + + + No description available
    +$aCenter_aX + + + +NULL + +No description available
    +$aY + + + +NULL + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// Specify a background image blend

    + + + + +
    ArgumentDefaultDescription
    +$aMix + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// Specify background fill color for the combined graph

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Add a frame around the combined graph

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + No description available
    +$aColor + + + +'black' + +No description available
    +$aWeight + + + +1 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aFormat + + + No description available
    +$aQuality + + + +75 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +//('Argument to MGraph::Add() is not a valid GD image handle.');

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$lm + + + No description available
    +$rm + + + No description available
    +$tm + + + No description available
    +$bm + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFileName + + + +'' + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$agdCanvas + + + No description available
    +$x + + + No description available
    +$y + + + No description available
    +$fx + + + +0 + +No description available
    +$fy + + + +0 + +No description available
    +$w + + + +0 + +No description available
    +$h + + + +0 + +No description available
    +$mix + + + +100 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +//('Unknown file extension ($aImgFormat) in MGraph::SetBackgroundImage() for filename: '.$aFileName);

    +
    + +

    Description:
    No description available.

    +

     

    + +// Create a new instane of the combined graph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + +NULL + +No description available
    +$aHeight + + + +NULL + +No description available
    +$aCachedName + + + +'' + +No description available
    +$aTimeOut + + + +0 + +No description available
    +$aInline + + + +true + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/MatrixGraph.html b/Societes/ric/jpgraph/docs/classref/MatrixGraph.html new file mode 100755 index 00000000..da9ec2af --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/MatrixGraph.html @@ -0,0 +1,207 @@ +


    Class MatrixGraph Extends Graph
    +(Defined in: jpgraph_matrix.php : 22)
     
     MatrixGraph  Graph 
     Add() 
    AddText() 
    SetColor() 
    Stroke() 
    StrokeIcons() 
    StrokeTexts() 
    __construct() 
    +
     Add() 
    AddBand() 
    AddLine() 
    AddText() 
    AddY() 
    AddY2() 
    CheckCSIMCache() 
    GetCSIMImgHTML() 
    GetHTMLImageMap() 
    Set3DPerspective() 
    Set90AndMargin() 
    SetAlphaBlending() 
    SetAngle() 
    SetAxisLabelBackground() 
    SetAxisStyle() 
    SetBackgroundCFlag() 
    SetBackgroundCountryFlag() 
    SetBackgroundGradient() 
    SetBackgroundImage() 
    SetBackgroundImageMix() 
    SetBackgroundImagePos() 
    SetBox() 
    SetClipping() 
    SetColor() 
    SetCSIMImgAlt() 
    SetFrame() 
    SetFrameBevel() 
    SetGridDepth() 
    SetIconDepth() 
    SetImgFormat() 
    SetMargin() 
    SetMarginColor() 
    SetScale() 
    SetShadow() 
    SetTextScaleAbsCenterOff() 
    SetTickDensity() 
    SetTitleBackground() 
    SetTitleBackgroundFillStyle() 
    SetUserFont() 
    SetUserFont1() 
    SetUserFont2() 
    SetUserFont3() 
    SetY2OrderBack() 
    SetY2Scale() 
    SetYDeltaDist() 
    SetYScale() 
    Stroke() 
    StrokeCSIM() 
    StrokeCSIMImage() 
    StrokeFrameBackground() 
    StrokeStore() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +// Since Windrose graphs doesn't have any linear scale the position of// each icon has to be given as absolute coordinates

    + + + + +
    ArgumentDefaultDescription
    +$aObj + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + No description available
    +$aToY2 + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$c + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + + +"" + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// Since Windrose graphs doesn't have any linear scale the position of// each icon has to be given as absolute coordinates

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +// Internal debug flag

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$width + + + +300 + +No description available
    +$height + + + +200 + +No description available
    +$cachedName + + + +"" + +No description available
    +$timeout + + + +0 + +No description available
    +$inline + + + +1 + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/MatrixLegend.html b/Societes/ric/jpgraph/docs/classref/MatrixLegend.html new file mode 100755 index 00000000..5231bccd --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/MatrixLegend.html @@ -0,0 +1,363 @@ +


    +(Defined in: jpgraph_matrix.php : 159)
     
     MatrixLegend 
     getLength() 
    getWidth() 
    InitSize() 
    SetBox() 
    SetFont() 
    SetFormatString() 
    SetLabelMargin() 
    SetLayout() 
    SetMargin() 
    SetMinMax() 
    SetModuleSize() 
    SetSize() 
    Show() 
    Stroke() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    + + + + +Image + +No description available
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    + + + + +Image + +No description available
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    + + + + +Image + +No description available
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + +'black' + +No description available
    +$aWeight + + + +1 + +No description available
    +$aStyle + + + +'solid' + +No description available
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFamily + + + No description available
    +$aStyle + + + No description available
    +$aSize + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aStr + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aMarg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aLayout + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aMarg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aMin + + + No description available
    +$aMax + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aBucketWidth + + + No description available
    +$aBucketHeight + + + +5 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + No description available
    +$aHeight + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + +
    ArgumentDefaultDescription
    + + + + +Image + +No description available
    +$aImg + + + No description available
    +$xs + + + No description available
    +$ys + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Finally stream the generated picture

    + + + + + + +
    ArgumentDefaultDescription
    + + + + +ColorMap + +No description available
    +$aColorMap + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/MatrixPlot.html b/Societes/ric/jpgraph/docs/classref/MatrixPlot.html new file mode 100755 index 00000000..1d7ce6fe --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/MatrixPlot.html @@ -0,0 +1,376 @@ +


    +(Defined in: jpgraph_matrix.php : 413)
     
     MatrixPlot 
     GetHeight() 
    GetWidth() 
    InitSize() 
    SetAlpha() 
    SetAutoContrast() 
    SetBackgroundColor() 
    SetBox() 
    SetCenterPos() 
    SetLegendLayout() 
    SetMargin() 
    SetModuleSize() 
    SetModuleType() 
    SetPos() 
    SetSize() 
    SetupColormap() 
    Stroke() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +// On bottom or top

    + + + + + + +
    ArgumentDefaultDescription
    + + + + +Image + +No description available
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Setup the colormap based on the values in the matrix

    + + + + + + +
    ArgumentDefaultDescription
    + + + + +Image + +No description available
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// On right or left

    + + + + + + +
    ArgumentDefaultDescription
    + + + + +Image + +No description available
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aAlpha + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aContrast + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + +'black' + +No description available
    +$aWeight + + + +1 + +No description available
    +$aStyle + + + +'solid' + +No description available
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + No description available
    +$aY + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aLayout + + + No description available
    +$aMargin + + + +25 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aMarg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aW + + + No description available
    +$aH + + + +null + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aType + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + No description available
    +$aY + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + No description available
    +$aHeight + + + +null + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +// Now adjust module size to get close to the specified with/height

    + + + + + + +
    ArgumentDefaultDescription
    + + + + +MatrixGraph + +No description available
    +$aGraph + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Max value

    + + + + + + +
    ArgumentDefaultDescription
    +$aData + + + No description available
    +$aMeshInt + + + +1 + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/MeshInterpolate.html b/Societes/ric/jpgraph/docs/classref/MeshInterpolate.html new file mode 100755 index 00000000..97167ebf --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/MeshInterpolate.html @@ -0,0 +1,63 @@ +


    +(Defined in: jpgraph_meshinterpolate.inc.php : 26)
     
     MeshInterpolate 
     IntSquare() 
    Linear() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + + No description available
    +$aCol + + + No description available
    +$aFactor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +&$aData + + + No description available
    +$aIntFactor + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/MileStone.html b/Societes/ric/jpgraph/docs/classref/MileStone.html new file mode 100755 index 00000000..337ba972 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/MileStone.html @@ -0,0 +1,63 @@ +


    +(Defined in: jpgraph_gantt.php : 3460)
     
     MileStone  GanttPlotObject 
     __construct() 
    +
     SetCaptionMargin() 
    SetConstrain() 
    SetCSIMAlt() 
    SetCSIMTarget() 
    SetLabelLeftMargin() 
    +
     

    Class usage and Overview
    Represents a milestone in the GanttChart. A milstone is created by specifyin a date.

      +

    See also related classes:
    GanttGraph

     


    Class Methods

    +

     

    + +Create a new milestone in a GanttGraph

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aVPos + + + Row for milestone
    +$aLabel + + + Label
    +$aDate + + + Position on the date scale
    +$aCaption + + + +"" + +Caption string
    + +

    Description:
    A milestone is by default displayed as a "Diamond" mark at a specified row at a specified date. It can also have a caption to the right of the milestone mark. + 
    +  
    See also:
    +

    Example:

    +$graph = new GanttGraph();

    // Setup the gantt graph...
    ...

    $ms = new MileStone(7,"M5","2002-01-28","28/1");
    $graph->Add($ms); +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/OdoGraph.html b/Societes/ric/jpgraph/docs/classref/OdoGraph.html new file mode 100755 index 00000000..d2df9774 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/OdoGraph.html @@ -0,0 +1,168 @@ +


    Class OdoGraph Extends Graph
    +(Defined in: jpgraph_odo.php : 60)
     
     OdoGraph  Graph 
     Add() 
    Stroke() 
    StrokeIcons() 
    StrokeTexts() 
    __construct() 
    +
     Add() 
    AddBand() 
    AddLine() 
    AddText() 
    AddY() 
    AddY2() 
    CheckCSIMCache() 
    GetCSIMImgHTML() 
    GetHTMLImageMap() 
    Set3DPerspective() 
    Set90AndMargin() 
    SetAlphaBlending() 
    SetAngle() 
    SetAxisLabelBackground() 
    SetAxisStyle() 
    SetBackgroundCFlag() 
    SetBackgroundCountryFlag() 
    SetBackgroundGradient() 
    SetBackgroundImage() 
    SetBackgroundImageMix() 
    SetBackgroundImagePos() 
    SetBox() 
    SetClipping() 
    SetColor() 
    SetCSIMImgAlt() 
    SetFrame() 
    SetFrameBevel() 
    SetGridDepth() 
    SetIconDepth() 
    SetImgFormat() 
    SetMargin() 
    SetMarginColor() 
    SetScale() 
    SetShadow() 
    SetTextScaleAbsCenterOff() 
    SetTickDensity() 
    SetTitleBackground() 
    SetTitleBackgroundFillStyle() 
    SetUserFont() 
    SetUserFont1() 
    SetUserFont2() 
    SetUserFont3() 
    SetY2OrderBack() 
    SetY2Scale() 
    SetYDeltaDist() 
    SetYScale() 
    Stroke() 
    StrokeCSIM() 
    StrokeCSIMImage() 
    StrokeFrameBackground() 
    StrokeStore() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aObj + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Since Windrose graphs doesn't have any linear scale the position of// each icon has to be given as absolute coordinates

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + + +"" + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// Since Windrose graphs doesn't have any linear scale the position of// each icon has to be given as absolute coordinates

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +//===================================================// CLASS OdoGraph// Description: Main class to handle odometer graphs//===================================================

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + +-1 + +No description available
    +$aHeight + + + +-1 + +No description available
    +$aCachedName + + + +"" + +No description available
    +$aTimeOut + + + +0 + +No description available
    +$aInline + + + +true + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/OdoNeedle.html b/Societes/ric/jpgraph/docs/classref/OdoNeedle.html new file mode 100755 index 00000000..5ba51cac --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/OdoNeedle.html @@ -0,0 +1,229 @@ +


    Class OdoNeedle
    +(Defined in: jpgraph_odo.php : 204)
     
     OdoNeedle 
     Set() 
    SetColor() 
    SetFillColor() 
    SetLength() 
    SetLineWeight() 
    SetShadow() 
    SetStyle() 
    SetWeight() 
    Show() 
    Stroke() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aVal + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Linepropery IMPORTS

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aLen + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aShadow + + + +true + +No description available
    +$aColor + + + +"darkgray@0.4" + +No description available
    +$aDx + + + +4 + +No description available
    +$aDy + + + +4 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aStyle + + + No description available
    +$aStyleParameter1 + + + +-1 + +No description available
    +$aStyleParameter2 + + + +-1 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// Stroke needs dummy argument to have the same argument list as the parent

    + + + + + + +
    ArgumentDefaultDescription
    +$img + + + No description available
    +$aOdometer + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// LineProperty attributes that has been imported

    +
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/OdoScale.html b/Societes/ric/jpgraph/docs/classref/OdoScale.html new file mode 100755 index 00000000..75c2132a --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/OdoScale.html @@ -0,0 +1,231 @@ +


    Class OdoScale
    +(Defined in: jpgraph_odo.php : 374)
     
     OdoScale 
     Set() 
    SetAngle() 
    SetLabelFormat() 
    SetLabelPos() 
    SetTickColor() 
    SetTickLength() 
    SetTicks() 
    SetTickWeight() 
    Show() 
    Stroke() 
    Translate() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aMin + + + No description available
    +$aMax + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aStart + + + No description available
    +$aEnd + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFormat + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aPos + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aLength + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aMinTick + + + No description available
    +$aLabelInterval + + + +1 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +//("Value for odometer ($aVal) is outside specified scale [$this->iMin,$this->iMax]");

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$img + + + No description available
    +$aOdometer + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aVal + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +//===================================================// CLASS OdoScale// Description: The scale for odometer//===================================================

    + + + + + + +
    ArgumentDefaultDescription
    +$aStartAngle + + + No description available
    +$aEndAngle + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Odometer.html b/Societes/ric/jpgraph/docs/classref/Odometer.html new file mode 100755 index 00000000..d91d3efe --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Odometer.html @@ -0,0 +1,292 @@ +


    Class Odometer
    +(Defined in: jpgraph_odo.php : 497)
     
     Odometer 
     AddIndication() 
    FilledCircle() 
    LayoutSize() 
    SetBase() 
    SetBorder() 
    SetCenterAreaWidth() 
    SetColor() 
    SetMargin() 
    SetPos() 
    SetSize() 
    Stroke() 
    StrokeFascia() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aStart + + + No description available
    +$aEnd + + + No description available
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$img + + + No description available
    +$aXc + + + No description available
    +$aYc + + + No description available
    +$aRadius + + + No description available
    +$aFillColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Dummy method to make odometers have the same signature as the// layout classes since odometer is "leaf" classes in the hierarchy

    +
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aShowBase + + + No description available
    +$aWidth + + + +0.1 + +No description available
    +$aColor1 + + + +"navy" + +No description available
    +$aColor2 + + + +"steelblue" + +No description available
    +$aColor3 + + + +"white" + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    +$aWidth + + + +1 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Only the first needle is shown by default

    + + + + +
    ArgumentDefaultDescription
    +$aMargin + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aXc + + + No description available
    +$aYc + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Set size. A value in the range 0 to 1 is interpretated as// fraction of min(width,heigth) while a value > 1 is interpretated// as absolute size

    + + + + +
    ArgumentDefaultDescription
    +$aRadius + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Finally draw bottom line if ODO_HALF

    + + + + +
    ArgumentDefaultDescription
    +$graph + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Stroke the outline of the odometer

    + + + + +
    ArgumentDefaultDescription
    +$img + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +//===================================================// CLASS Odometer// Description: Main class to draw a odometer//===================================================

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + + +ODO_HALF + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/OdometerLabel.html b/Societes/ric/jpgraph/docs/classref/OdometerLabel.html new file mode 100755 index 00000000..3c6d9804 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/OdometerLabel.html @@ -0,0 +1,53 @@ +


    Class OdometerLabel Extends Text
    +(Defined in: jpgraph_odo.php : 486)
     
     OdometerLabel  Text 
     SetVPos() 
    +
     Align() 
    Center() 
    GetFontHeight() 
    GetTextHeight() 
    GetWidth() 
    Hide() 
    ParagraphAlign() 
    Set() 
    SetAlign() 
    SetAngle() 
    SetBox() 
    SetColor() 
    SetCSIMTarget() 
    SetFont() 
    SetMargin() 
    SetOrientation() 
    SetParagraphAlign() 
    SetPos() 
    SetScalePos() 
    SetShadow() 
    SetWordWrap() 
    Show() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +//===================================================// CLASS OdometerLabel// Description: Text on odometer//===================================================

    + + + + +
    ArgumentDefaultDescription
    +$aPos + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/PieGraph.html b/Societes/ric/jpgraph/docs/classref/PieGraph.html new file mode 100755 index 00000000..00302264 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/PieGraph.html @@ -0,0 +1,227 @@ +


    Class PieGraph Extends Graph
    +(Defined in: jpgraph_pie.php : 1210)
     
     PieGraph  Graph 
     Add() 
    SetAntiAliasing() 
    SetColor() 
    Stroke() 
    __construct() 
    +
     Add() 
    AddBand() 
    AddLine() 
    AddText() 
    AddY() 
    AddY2() 
    CheckCSIMCache() 
    GetCSIMImgHTML() 
    GetHTMLImageMap() 
    Set3DPerspective() 
    Set90AndMargin() 
    SetAlphaBlending() 
    SetAngle() 
    SetAxisLabelBackground() 
    SetAxisStyle() 
    SetBackgroundCFlag() 
    SetBackgroundCountryFlag() 
    SetBackgroundGradient() 
    SetBackgroundImage() 
    SetBackgroundImageMix() 
    SetBackgroundImagePos() 
    SetBox() 
    SetClipping() 
    SetColor() 
    SetCSIMImgAlt() 
    SetFrame() 
    SetFrameBevel() 
    SetGridDepth() 
    SetIconDepth() 
    SetImgFormat() 
    SetMargin() 
    SetMarginColor() 
    SetScale() 
    SetShadow() 
    SetTextScaleAbsCenterOff() 
    SetTickDensity() 
    SetTitleBackground() 
    SetTitleBackgroundFillStyle() 
    SetUserFont() 
    SetUserFont1() 
    SetUserFont2() 
    SetUserFont3() 
    SetY2OrderBack() 
    SetY2Scale() 
    SetYDeltaDist() 
    SetYScale() 
    Stroke() 
    StrokeCSIM() 
    StrokeCSIMImage() 
    StrokeFrameBackground() 
    StrokeStore() 
    __construct() 
    +
     

    Class usage and Overview
    The canvas for use with PiePlots. You add pie plots by calling the Add() method. +

    +You can add several PiePlots by adjusting their size and positioning each PiePlot so it doesn't overlap eachother. +

      +

    See also related classes:
    PiePlot and PiePlot3D

     


    Class Methods

    +

     

    + +Add object to the pie graph

    + + + + +
    ArgumentDefaultDescription
    +$aObj + + + Object to add
    + +

    Description:
    Add a pieplots or text object to the pie graph. You can specify either a single object or an array. If you specify an array all object in the array must be of the same type.  
    + +

    Example:

    +$piegraph = new PieGraph(300,400);
    $pieplot = new PiePlot($ydata);
    $piegraph->Add($pieplot);
    +
    +

    +

    +

     

    + +Enable/disable anti-alias for Pie Graphs

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +true=enable anti-aliasing
    + +

    Description:
    Enable/disable anti-alias for Pie Graphs. This makes for much nicer looking PieGraphs. Please note that enabling anti-alias imposes some restrictions: +
      +
    • Enabling anti-alias will severely impact performance. As a rule of thumb you can expect drawing to take 5-8 times longer ! +
    • You can't use background images or gradient backgrounds together with anti-alias +

    + +

    Example:

    +$piegraph->SetAntiAlias(); + +

    +

    +

     

    + +Set the background color. Synonym to SetMarginColor()

    + + + + +
    ArgumentDefaultDescription
    +$c + + + Color
    + +

    Description:
    Set the background color. Synonym to SetMarginColor() 
    +  
    See also:
    +

    Example:

    +$piegraph->SetColor('gray');
    +
    +

    +

    +

     

    + +// Method description

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + + +"" + +Filename
    + +

    Description:
    Stroke the piegraph to the browser or to a specified file if specified. Works exactly the same as Graph::Stroke() + 
    + +

    Example:

    +...
    $piegraph->Stroke()
    +
    +

    +

    +

     

    + +//---------------// CONSTRUCTOR +

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$width + + + +300 + +Width of graph
    +$height + + + +200 + +Height of graph
    +$cachedName + + + +"" + +Cache file name
    +$timeout + + + +0 + +Cache timeout in s
    +$inline + + + +1 + +Should the image be inline.
    + +

    Description:
    See Graph::Graph() 
    +  
    See also:
    +

    Example:

    +$piegraph = new PieGraph(300,400);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/PiePlot.html b/Societes/ric/jpgraph/docs/classref/PiePlot.html new file mode 100755 index 00000000..9d14df65 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/PiePlot.html @@ -0,0 +1,598 @@ +


    Class PiePlot
    +(Defined in: jpgraph_pie.php : 24)
     
     PiePlot 
     Explode() 
    ExplodeAll() 
    ExplodeSlice() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetGuideLines() 
    SetGuideLinesAdjust() 
    SetLabelPos() 
    SetLabels() 
    SetLabelType() 
    SetLegends() 
    SetShadow() 
    SetSize() 
    SetSliceColors() 
    SetStartAngle() 
    SetTheme() 
    SetValueType() 
    ShowBorder() 
    __construct() 
    +
     

    Class usage and Overview
    Creates a new Pie plot from the supplied data.

    +By default the value (if enabled through the $pie->label->show() ) close to each slice will have a label corresponding to the percentage of that slice. +

    +Each plot may have an arbitrary title which can be accessed through the ?title? property in the PiePlot class. The title will be automatically centred on top of the PiePlot clear of any possible labels. To set the title use the Set() method , i.e. $plot->title->Set(?MyTitle?). +

    +To format the slice labels use the SetFormat() method of the value class.

      +

    See also related classes:
    PieGraph and PiePlot3D

     


    Class Methods

    +

     

    + +Explode one or more slices as specified radius.

    + + + + +
    ArgumentDefaultDescription
    +$aExplodeArr + + + Explode specification
    + +

    Description:
    To emphasise a specific slice it can be exploded, i.e moved out fro the center of the pie plot. This method will allow you to specify what slices and to waht radius you want them exploded. +

    +If you only want to explode a single slice you could also use the ExplodeSlice() method. + 
    +  

    See also:
    +

    Example:

    +//To explode slice 0,2 to radius 100 you would call
    $pieplot->Explode(array(100,0,100));
    +
    +

    +

    +

     

    + +Explode all slices a specified amount

    + + + + +
    ArgumentDefaultDescription
    +$radius + + + +20 + +Explode radius
    + +

    Description:
    Explode all slices a specified amount. If no radius is specified it will default to 20 pixels. 
    +  
    See also:
    +

    Example:

    +$p1->ExplodeAll();
    +
    +

    +

    +

     

    + +Explode a single slice a specified radius

    + + + + + + +
    ArgumentDefaultDescription
    +$e + + + Which slice to explode
    +$radius + + + +20 + +Radius to explode to
    + +

    Description:
    Explode a single slice to a specific radius. 
    +  
    See also:
    +

    Example:

    +// Explode slice number 2 (the third slice) using the default
    // explode radius.
    $pieplot->ExplodeSlice(2); +
    +

    +

    +

     

    + +//---------------// PUBLIC METHODS +

    + + + + + + +
    ArgumentDefaultDescription
    +$x + + + X-position as fraction of width
    +$y + + + +0.5 + +Y-position as fraction of height
    + +

    Description:
    Set the center point for the PiePlot 
    +  
    See also:
    +

    Example:

    +$pieplot->SetCenter(0.4,0.5);
    +
    +

    +

    +

     

    + +Specify frame color for pie.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color.
    + +

    Description:
    Set the color of the border around each slice. 
    +  
    See also:
    +

    Example:

    +$pieplot->SetColor('red'); + +

    +

    +

     

    + +Specify URL targets for image maps

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTargets + + + No description available
    +$aAlts + + + +'' + +No description available
    +$aWinTargets + + + +'' + +No description available
    + +

    Description:
    Specify list of targets for the image map for each slice. The target should be a fully qualified URL. +

    +Each slice will aslo have it's own 'alt' tag. Depending on the browser this tag is usually showed when the mouse is hold over a poarticular area on the image map. When formatting the alt strings can be specified as a printf() format string. The value supplied to the string will be the value for each slice. 
    +  

    See also:
    +

    Example:

    +$targets = array('godetail1.html''gotodetail2.html' 'gotodetail3.html');
    $alts = array('Year %d''Year %d''Year %d');

    $pieplot->SetCSIMTargets($targets,$alts); +
    +

    +

    +

     

    + +Enable guideline and set drawing policy

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +TRUE=Enable guide lines
    +$aCurved + + + +true + +Curve the labels around the pie
    +$aAlways + + + +false + +Always use a guide line to the label
    + +

    Description:
    Enable guideline and set drawing policy for guide lines and labels 
    + +

    Example:

    +$pieplot->SetGuideLines(); + +

    +

    +

     

    + +Adjuste the distance between labels and labels and pie

    + + + + + + +
    ArgumentDefaultDescription
    +$aVFactor + + + Vertical fraction
    +$aRFactor + + + +0.8 + +Radius factor
    + +

    Description:
    Adjuste the distance between labels and labels and pie 
    + +

    Example:

    +$graph->xaxis->scale->SetGuideLinesAdjust(1.7); + +

    +

    +

     

    + +Adjust the positoin of slice labels

    + + + + +
    ArgumentDefaultDescription
    +$aLblPosAdj + + + Position as fraction of radius
    + +

    Description:
    Specify the position of the labels for each slice as a fraction of the radius. +

    +Note: The adjustment affect both manually speicfied labels with SetLabels() as well as automtic labels. + 
    +  

    See also:
    +

    Example:

    +$p1 = new PiePlot($data);
    $p1->SetLabelPos(0.6);
    $graph->Add($p1);
    +
    +

    +

    +

     

    + +Specify individual text labels for all slices

    + + + + + + +
    ArgumentDefaultDescription
    +$aLabels + + + Arrays of strings
    +$aLblPosAdj + + + +"auto" + +Position as fraction of the radius
    + +

    Description:
    Normally pie slice gets assigned a label which displays either the percentage or the absolute value of a slice. These automtically asigned labels are positioned in a ring around the pie. +
    +However, you can also manually assign a label to each slice individually with this method. +
    +Each label can contain format specification so for example the label +

    +"May %.1f%%" +

    +would display the in the pie "May 28.3%" assuming you had choosen to use percentage values (SetLabelType()) +

    +The second parameter specifies where to position these labels. The position is specified as a fraction of the radius of the pie plot or as the special strine 'auto'. If you specify this string value JpGraph will automtically determine the best position for the labels inside the pie. This is the default if you don't explicitely specify the position. +

    +If you specify a value > 1.0 then the labels will +just be move further out. For example if you specify the position as 1.5 then the labels will move out a further 50% of the current pie radius. +

    +Note: The actual alignment of the labels are dependent on the position. If the labels are just outside the pie they will be individually positioned according to the angle. If the labels are positioned inside the pie then the point of gravity within the text will be aligned with the specified position in the pie. + + 
    +  

    See also:
    +

    Example:

    +$p1->SetLabelType(PIE_VALUE_PER);
    $lbl = array("adam\n%.1f%%","bertil\n%.1f%%","kalle\n%.1f%%","peter\n%.1f%%","daniel\n%.1f%%","erik\n%.1f%%");
    $p1->SetLabels($lbl);
    +
    +

    +

    +

     

    + +Should we display actual value or percentage?

    + + + + +
    ArgumentDefaultDescription
    +$aType + + + No description available
    + +

    Description:
    Specify if the value displayed by each slice (if the $pieplot->value->Show()) have been called shold be absolute or in percent. +

    +The following values are allowed arguments: +

      +
    • PIE_VALUE_ABS +
    • PIE_VALUE_PER +
    • PIE_VALUE_ADJPER. This is a special case of the percentage. Specifying this value will adjust integer percetage values so that the total sum will always be 100%. This is done with the the Hare/Niemeyer method. This makes most sense when used together with a format string for labels of "%d" so it will only display a whole integer value without any deciamals. +
    • +
    +The defauklt is to show percent. 
    + +

    Example:

    +// Show absolute values
    $pieplot->SetLabelType(PIE_VALUE_ABS);

    // Display each label with postfix 'kr', e.g. each label will
    // look like (for example) 23.5 kr
    $pieplot->value->SetFormat('%d kr');
    $pieplot->value->Show();
    +
    +

    +

    +

     

    + +// Set label arrays

    + + + + +
    ArgumentDefaultDescription
    +$aLegend + + + Array of strings
    + +

    Description:
    Specify an array of text strings that should be used as legends for the slices. +

    +Each text string can be formatted as a printf() format string since when printed they will be passed the value for that slice. +

    +Tip: If you have many evry small slices then the labels close to the pie may be overwriting each other. In this case it is probably better to hide the labels by the slices and instead just show the values ion the legends. 
    + +

    Example:

    +$legends = array('April (%d)','May (%d)','June (%d)');

    $pieplot->SetLegends($legends);

    +
    +

    +

    +

     

    + +Add a drop shadow to the pie slices

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + +'darkgray' + +Shadow color
    +$aDropWidth + + + +4 + +Drop distance for shadow
    + +

    Description:
    Add a drop shadow to the pie slices. +

    +This is often more affective if one or more slices are exploded. 
    + +

    Example:

    +// Explode all slices
    $p1->ExplodeAll(10);

    // Add drop shadow
    $p1->SetShadow();
    +
    +

    +

    +

     

    + +// Size in percentage

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + + Size of radius
    + +

    Description:
    If the value specified is between 0 and 1 then it is interpreted as a a fraction of either height or width, whatever is smallest, of the graph. +

    +If the value is >1 then it is interpretated as an absolute size in pixels. + 
    +  

    See also:
    +

    Example:

    +$pieplot->SetSize(0.3); + +

    +

    +

     

    + +Override theme coplros for slices

    + + + + +
    ArgumentDefaultDescription
    +$aColors + + + Array of colors
    + +

    Description:
    Normally the colors of the slices are set according to what color-theme you are using. You can however, override this by supplying an array of colors to be used for the slices. +

    +If you supply fewer colors than pie-slices than the colors will be re-used from the beginning of the array. + 
    +  

    See also:
    +

    Example:

    +$p1->SetSliceColors(array('red','green','blue')); + +

    +

    +

     

    + +Speciy start angel for first slice

    + + + + +
    ArgumentDefaultDescription
    +$aStart + + + Start angle in degrees
    + +

    Description:
    Normally the first slice is drawn at 0 degrees, i.e. 3'a clock. With this method you can adjust that to an arbitrary angle. Positive angle will rotate the slice clockwise and a negative angle will move the slice counter-clockwise. +

    +The angle should be specified in degrees. + 
    + +

    Example:

    +$pieplot->SetStartAngle(45); + +

    +

    +

     

    + +//Add the last point on the arc

    + + + + +
    ArgumentDefaultDescription
    +$aTheme + + + Theme name
    + +

    Description:
    Specify what color theme should be used for this pie. As of version 1.6.4 the following themes are available: +
      +
    • "earth" +
    • "pastel" +
    • "sand" +
    • "water" +
     
    + +

    Example:

    +$pieplot->SetTheme('water');
    +
    +

    +

    +

     

    + +DEPRECATED: See SetLabelType()

    + + + + +
    ArgumentDefaultDescription
    +$aType + + + Value type
    + +

    Description:
    See SetLabelType() 
    +  
    See also:
    +

    Example:

    +NA + +

    +

    +

     

    + +// Should the circle around a pie plot be displayed

    + + + + + + +
    ArgumentDefaultDescription
    +$exterior + + + +true + +Display circle on the outer edge of pieplot
    +$interior + + + +true + +Display the lines between each slice
    + +

    Description:
    Show the lines between each slice and the border around the pie. 
    + +

    Example:

    +// show both
    $pieplot->ShowBorder(); +
    +

    +

    +

     

    + +Constructor for PiePlots

    + + + + +
    ArgumentDefaultDescription
    +$data + + + Data array for Pie
    + +

    Description:
    Construct a new pie plot which later can be added to Piegraph 
    +  
    See also:
    +

    Example:

    +$pieplot = new PiePlot($slicedata);
    $piegraph->Add($pieplot);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/PiePlot3D.html b/Societes/ric/jpgraph/docs/classref/PiePlot3D.html new file mode 100755 index 00000000..e18b44c7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/PiePlot3D.html @@ -0,0 +1,345 @@ +


    Class PiePlot3D Extends PiePlot
    +(Defined in: jpgraph_pie3d.php : 17)
     
     PiePlot3D  PiePlot 
     Add3DSliceToCSIM() 
    SetAngle() 
    SetCSIMTargets() 
    SetEdge() 
    SetHeight() 
    SetLabelMargin() 
    SetLabels() 
    SetLegends() 
    SetSliceColors() 
    SetStartAngle() 
    __construct() 
    +
     Explode() 
    ExplodeAll() 
    ExplodeSlice() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetGuideLines() 
    SetGuideLinesAdjust() 
    SetLabelPos() 
    SetLabels() 
    SetLabelType() 
    SetLegends() 
    SetShadow() 
    SetSize() 
    SetSliceColors() 
    SetStartAngle() 
    SetTheme() 
    SetValueType() 
    ShowBorder() 
    __construct() 
    +
     

    Class usage and Overview
    A 3D pie plot is much like a normal pie plot but in a 3D setting. You can control the apperance by specifying the angle of attack for the pie. A small angle show a very "flat" pie while a large angle shows almost a 2D pie. + +Please note that a 3D pie is much more CPU intensive to draw then the normal pie. To reduce the time you might want to keep the height of the pie as small as you think looks good. The height has a direct linear impact on how long it takes to draw a 3D pie. (See SetHeight()). + +To view a 3D pieplot you start by constructing a PieGraph() and then adding a numerb of constructed PiePlot3D to this graph. +

      +

    See also related classes:
    PieGraph and PiePlot

     


    Class Methods

    +

     

    + +//("PiePlot3D::SetAngle() 3D Pie projection angle must be between 5 and 85 degrees.");

    + + + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$i + + + No description available
    +$xc + + + No description available
    +$yc + + + No description available
    +$height + + + No description available
    +$width + + + No description available
    +$thick + + + No description available
    +$sa + + + No description available
    +$ea + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify projection angle for 3D in degrees.

    + + + + +
    ArgumentDefaultDescription
    +$a + + + Projection angle in degrees
    + +

    Description:
    Specify projection angle for 3D in degrees. Must be between 10 and 80 degrees. A small angle will make the pie very flat and a large angle will make it present much more of pie circle. 
    + +

    Example:

    +$pieplot->SetAngle(45);
    +
    +

    +

    +

     

    + +Specify URL for each slice for the image map

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTargets + + + No description available
    +$aAlts + + + +'' + +No description available
    +$aWinTargets + + + +'' + +No description available
    + +

    Description:
    Specify URL for each slice for the image map 
    + +

    Example:

    +$targets = array('nextimage.php?1''nextimage.php?2''nextimage.php?3');
    // Show the actual value in the alt text when user hovers the
    // cursor over the slice
    $alts = array('More details..(%.1f)''More details..(%.1f)''More details..(%.1f)' );
    $pie->SetCSIMTargets($targets,$alts);
    +
    +

    +

    +

     

    + +Add a line around pie slices

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + +'black' + +Color for line
    +$aWeight + + + +1 + +Width of line
    + +

    Description:
    Specify if the slices should be separated by a line? If color is specified as "" no line will be used to separate pie slices. + +Default is to not show any lines. 
    + +

    Example:

    +$pieplot3d->SetEdge('blue',1); + +

    +

    +

     

    + +Specify thickness of the 3D pie plot

    + + + + +
    ArgumentDefaultDescription
    +$aHeight + + + Height in pixels
    + +

    Description:
    Specify thickness of 3D pie plot. To minimize CPU usuage you should try to keep the thickness to the visual accepatble minimum. 
    + +

    Example:

    +$pieplot->SetHeight(20); + +

    +

    +

     

    + +Specify the distance from the pie to the labels

    + + + + +
    ArgumentDefaultDescription
    +$m + + + Margin in pixels
    + +

    Description:
    Specify the distance from the pie to the labels 
    + +

    Example:

    +$pieplot3d->SetLabelMargin(20); + +

    +

    +

     

    + +Specify slice labels for 3D pies

    + + + + + + +
    ArgumentDefaultDescription
    +$aLabels + + + Label arrays
    +$aLblPosAdj + + + +"auto" + +Label position [0.2- 1]
    + +

    Description:
    Specify slice labels for 3D pies. Positoin specify the fraction of the radius wher the labels should be positoined. A values of 1 will position the labels outside the pie. +

    +The labels may include an optional sprintf() formatting string. Before stroking the label to the graph it will be formatted with the actual value (absolute or percentage) depending on what has been specified with the SetLabelType() method. + 
    +  

    See also:
    +

    Example:

    +// Specify explicit labels and position them outside the pie
    $p1->SetLabels(array("Jan\n%.1f%%","Feb\n%.1f%%","Mar\n%.1f%%","Apr\n%.1f%%"),1);
    +
    +

    +

    +

     

    + +Set legends for slices

    + + + + +
    ArgumentDefaultDescription
    +$aLegend + + + Array of legends
    + +

    Description:
    Set legends for slices 
    + +

    Example:

    +$plot->SetLegends(array('Jan','Feb','Mar','Apr'); + +

    +

    +

     

    + +Specify color of the individual slices

    + + + + +
    ArgumentDefaultDescription
    +$aColors + + + Array of colors
    + +

    Description:
    Specify color of the individual slices. If there are more slices than colors then the colors will wrap around. 
    + +

    Example:

    +$pieplot->SetSliceColors(array('red','blue','green','navy','orange')); + +

    +

    +

     

    + +Specify start angle for first slice in the Pie

    + + + + +
    ArgumentDefaultDescription
    +$aStart + + + Start angle (in degrees)
    + +

    Description:
    Specify the start angle in degrees for the first slice in the Pie. Angles are counted counter-clockwise starting at "3'clock". 
    + +

    Example:

    +$pieplot->SetStartAngle(45); + +

    +

    +

     

    + +//---------------// CONSTRUCTOR

    + + + + +
    ArgumentDefaultDescription
    +$data + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/PiePlotC.html b/Societes/ric/jpgraph/docs/classref/PiePlotC.html new file mode 100755 index 00000000..72c7ec99 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/PiePlotC.html @@ -0,0 +1,207 @@ +


    Class PiePlotC Extends PiePlot
    +(Defined in: jpgraph_pie.php : 1015)
     
     PiePlotC  PiePlot 
     SetMid() 
    SetMidColor() 
    SetMidCSIM() 
    SetMidSize() 
    SetMidTitle() 
    __construct() 
    +
     Explode() 
    ExplodeAll() 
    ExplodeSlice() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetGuideLines() 
    SetGuideLinesAdjust() 
    SetLabelPos() 
    SetLabels() 
    SetLabelType() 
    SetLegends() 
    SetShadow() 
    SetSize() 
    SetSliceColors() 
    SetStartAngle() 
    SetTheme() 
    SetValueType() 
    ShowBorder() 
    __construct() 
    +
     

    Class usage and Overview
    The PiePlotC is an extesnion of the normal pie plot where there is a filled circle in the center of the pie. This filled circle can have it's own labels and CSIM.

      +

    See also related classes:
    PiePlot

     


    Class Methods

    +

     

    + +Specify all parameters for the center circle

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTitle + + + Title text for center circle
    +$aColor + + + +'white' + +Fill color for center circle
    +$aSize + + + +0.5 + +Size of center. Specified as fraction of radius
    + +

    Description:
    Specify all parameters for the center circle 
    + +

    Example:

    +$piec->SetMid('Halteberg','red:0.6',0.3); + +

    +

    +

     

    + +Specify fill color for center circle

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Specify fill color for center circle.  
    +  
    See also:
    +

    Example:

    +$piec->SetMidColor('yellow:0.6');
    +
    +

    +

    +

     

    + +Specify URL target for filled middle circle

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTarget + + + Target URL string
    +$aAlt + + + +'' + +Alt text
    +$aWinTarget + + + +'' + +No description available
    + +

    Description:
    Specify URL target for filled middle circle. Use SetCSIMtargets() to specify the individual targets for the slices in the pie. + 
    +  
    See also:
    +

    Example:

    +$pie->SetMidCSIM('depth.php?t=32','Details');
    +
    +

    +

    +

     

    + +Specify size for center circle

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + + Size in fraction of the radius
    + +

    Description:
    Specify size for center circle as fraction of the radius. 
    + +

    Example:

    +$piec->SetMidSize(0.5); + +

    +

    +

     

    + +Specify title for the center circle.

    + + + + +
    ArgumentDefaultDescription
    +$aTitle + + + Title
    + +

    Description:
    Specify title for the center circle. The title can also be set in the inital creation of the Pie as well as with the SetMidTitle() 
    +  
    See also:
    +

    Example:

    +$piec->SetMidTitle("Center title\nSecond line title"); + +

    +

    +

     

    + +Create a Pie plot with a filled circle in the middle

    + + + + + + +
    ArgumentDefaultDescription
    +$data + + + Data array
    +$aCenterTitle + + + +'' + +Title for center circle
    + +

    Description:
    Create a variant of the Pie plot with a filled circle in the middle. The title, color and size of the center circle ca be modified. 
    +  
    See also:
    +

    Example:

    +$piec = new PiePlotC($data); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Plot.html b/Societes/ric/jpgraph/docs/classref/Plot.html new file mode 100755 index 00000000..256fe0f1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Plot.html @@ -0,0 +1,220 @@ +


    Class Plot
    +(Defined in: jpgraph.php : 5093)
     
     Plot 
     HideLegend() 
    PreScaleSetup() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetLegend() 
    SetLineWeight() 
    +
     

    Class usage and Overview
    Abstract base class for all plots. This abstract base class defines the signature that all plots must adhere to. It also provides the default trivial implementation for these framework methods. + +Public properties: + + + + + +
    Name Type Description
    value DisplayValue Control the data value displayed at each data point
    +

      +

    See also related classes:
    DisplayValue, LinePlot, ErrorPlot and ScatterPlot

     


    Class Methods

    +

     

    + +Hide legend for this plot

    + + + + +
    ArgumentDefaultDescription
    +$f + + + +true + +TRUE=Hide legend
    + +

    Description:
    Hide legend for this plot even if it was specified (with SetLegend() )  
    + +

    Example:

    +$bar = new GanttBar(...);
    $bar->HideLegend();
    +
    +

    +

    +

     

    + +// Virtual function to the the concrete plot class to make any changes to the graph// and scale before the stroke process begins

    + + + + +
    ArgumentDefaultDescription
    +$aGraph + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Center the data pointr between tick labels

    + + + + +
    ArgumentDefaultDescription
    +$aCenter + + + +true + +True=Center each data point
    + +

    Description:
    Used for text scales. Centers the data values between the ticvk marks instead if falling exactly on them. + 
    + +

    Example:

    +$barplot->SetCenter(); + +

    +

    +

     

    + +Specify color for plot.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Specify color for plot. Each plot type is free to interpret it to its own choosing. 
    + +

    Example:

    +$lineplot->SetColor('red');
    +
    +

    +

    +

     

    + +Set URL targets for CSIM

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTargets + + + Array of URL targets
    +$aAlts + + + +'' + +Alt texts for each CSIM point
    +$aWinTargets + + + +'' + +No description available
    + +

    Description:
    Set the URL links for the CSIM if the plot type support this. 
    + +

    Example:

    +$url1 "http://someotherurl.html"
    $url2 = ..
    ...

    $targetarray = array($url1$url2$url3$url4);
    $barplot->SetCSIMTargets($targetarray); +
    +

    +

    +

     

    + +Set legend string for this plot

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aLegend + + + Legend string
    +$aCSIM + + + +'' + +URL for image map
    +$aCSIMAlt + + + +'' + +Alt text for image map
    +$aCSIMWinTarget + + + +'' + +No description available
    + +

    Description:
    Set legend string for this plot. If the CSIM string is epscified then the legend will become an image map. To use image maps you need to use the StrokeCSIM() instead of the normal Stroke() 
    +  
    See also:
    +

    Example:

    +$lineplot->SetLegend('Year 2002'); + +

    +

    +

     

    + +Specify line weight for plot

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + +1 + +Line weight in pixels
    + +

    Description:
    Specify line weight for plot 
    + +

    Example:

    +$lineplot->SetWeight(2); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/PlotBand.html b/Societes/ric/jpgraph/docs/classref/PlotBand.html new file mode 100755 index 00000000..a06c5fff --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/PlotBand.html @@ -0,0 +1,194 @@ +


    Class PlotBand
    +(Defined in: jpgraph_plotband.php : 538)
     
     PlotBand 
     PreStrokeAdjust() 
    SetDensity() 
    SetOrder() 
    ShowFrame() 
    __construct() 
    +
     

    Class usage and Overview
    A "Plotband" repesent a rectangualr area in the graph that can be given a specific pattern ranging from 3D grid to simple horizntal grid lines. +

    +A Plot band is then added to the graph via the Graph::AddBand() method. +

      +

    See also related classes:
    Graph

     


    Class Methods

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aGraph + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify density for pattern

    + + + + +
    ArgumentDefaultDescription
    +$aDens + + + Density [1,100]
    + +

    Description:
    Specify density for pattern as an integer value between 1 and 100, 100 being very dense and 1 being very sparse. + 
    + +

    Example:

    +$uband=new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","green");
    $uband->ShowFrame(false);
    $uband->SetDensity(50); // 50% line density
    $lband=new PlotBand(HORIZONTAL,BAND_LDIAG,"min",0,"red");
    $lband->ShowFrame(false);
    $lband->SetDensity(20); // 20% line density

    $graph->AddBand($uband);
    $graph->AddBand($lband);
    +
    +

    +

    +

     

    + +Specify z-order parameter for plot

    + + + + +
    ArgumentDefaultDescription
    +$aDepth + + + Pattern Z-order parameter
    + +

    Description:
    Specify if the pattern should be in front of plot or behind the plot. Valid parameters are + +
      +
    • DEPTH_BACK, Behind the plot +
    • DEPTH_FRONT, In front of the plot +

    + +

    Example:

    +$band=new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","green");
    $band->ShowFrame(false);
    $band->SetOrder(DEPTH_BACK);
    $graph->AddBand($band);
    +
    +

    +

    +

     

    + +Display frame around pattern

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + +true + +True=Display border
    + +

    Description:
    Display frame around pattern 
    + +

    Example:

    +$band=new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","green");
    $band->ShowFrame(false);
    $band->SetOrder(DEPTH_BACK);
    $graph->AddBand($band);
    +
    +

    +

    +

     

    + +Create a new Plot band of the specified type

    + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aDir + + + Direction of plot band
    +$aPattern + + + Type of pattern
    +$aMin + + + Min value for plot area
    +$aMax + + + Max value for plot area
    +$aColor + + + +"black" + +Color of pattern
    +$aWeight + + + +1 + +Line weight
    +$aDepth + + + +DEPTH_BACK + +Depth. Over or under the plot.
    + +

    Description:
    Create a new Plot band that later on can be added to the graph. The following pattern types are supported + +
      +
    • BAND_RDIAG, Right diagonal lines +
    • BAND_LDIAG, Left diagonal lines +
    • BAND_SOLID, Solid one color +
    • BAND_LVERT, Vertical lines +
    • BAND_LHOR, Horizontal lines +
    • BAND_VLINE, Vertical lines +
    • BAND_HLINE, Horizontal lines +
    • BAND_3DPLANE, "3D" Plane +
    • BAND_HVCROSS, Vertical/Hor crosses +
    • BAND_DIAGCROSS, Diagonal crosses +
    + +A plotband extends completely along one of the axis in the graph. This axis is determined by the first argument, the direction. + +Valid directions are +
      +
    1. HORIZONTAL +
    2. VERTICAL +

    + +

    Example:

    +$uband=new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","green");
    $uband->ShowFrame(false);
    $uband->SetDensity(50); // 50% line density
    $lband=new PlotBand(HORIZONTAL,BAND_LDIAG,"min",0,"red");
    $lband->ShowFrame(false);
    $lband->SetDensity(20); // 20% line density

    $graph->AddBand($uband);
    $graph->AddBand($lband);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/PlotLine.html b/Societes/ric/jpgraph/docs/classref/PlotLine.html new file mode 100755 index 00000000..62fc5df6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/PlotLine.html @@ -0,0 +1,244 @@ +


    Class PlotLine
    +(Defined in: jpgraph_plotline.php : 17)
     
     PlotLine 
     HideLegend() 
    SetColor() 
    SetDirection() 
    SetLegend() 
    SetLineStyle() 
    SetPosition() 
    SetWeight() 
    __construct() 
    +
     

    Class usage and Overview
    A plot line represents a horizontal or vertical line in the plot at an arbitrary position. A plot line can be added to all X-Y types of plots/graphs.

      +

    See also related classes:
    Graph

     


    Class Methods

    +

     

    + +Hide legend

    + + + + +
    ArgumentDefaultDescription
    +$f + + + +true + +True/False
    + +

    Description:
    Hide legend 
    +

    +

     

    + +Specify color of line

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Set color for line. + +Note. Colors can also be set in the creation of a PlotLine + 
    +  
    See also:
    +

    Example:

    +$plotline->SetColor('red');
    +
    +

    +

    +

     

    + +Specify direction of line

    + + + + +
    ArgumentDefaultDescription
    +$aDir + + + Direction, horizontal or vertical line
    + +

    Description:
    Specify direction of line. Valid arguments are: +
      +
    • VERTICAL +
    • HORIZONTAL +
    + +Note: Direction can also be specified in the creation of a plot line. + 
    +  
    See also:
    +

    Example:

    +$plotline->SetDirection(VERTICAL);
    $plotline->SetColor('red');
    $graph->AddLine($plotline); +
    +

    +

    +

     

    + +Set legend text

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aLegend + + + Legend text
    +$aCSIM + + + +'' + +CSIM target
    +$aCSIMAlt + + + +'' + +CSIM Alt text
    +$aCSIMWinTarget + + + +'' + +No description available
    + +

    Description:
    Set legend text 
    +

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +Specify position for plot line

    + + + + +
    ArgumentDefaultDescription
    +$aScalePosition + + + Scale position
    + +

    Description:
    Specify position for plot line. If the line is vertical the position is interpretated as the x-coordinate and if it is horizontal then the positoin is interpretatedas the Y-coordinate. + +Note: Position can also be specified in the creation of the line. 
    + +

    Example:

    +$plotline->SetDirection(HORIZONTAL);
    $plotline->SetPosition(25);
    $graph->AddLine($plotline); +
    +

    +

    +

     

    + +Specify line weight

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + Line weight in pixels
    + +

    Description:
    Specify line weight. + +Note. Line weight can also be specified in the creation of the line. + 
    +  
    See also:
    +

    Example:

    +$plotline->SetColor('red');
    $plotline->SetDirection(VERTICAL);
    $plotline->SetPosition(35);
    $plotline->SetWeight(2);

    +
    +

    +

    +

     

    + +Construct a new plot line

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aDir + + + +HORIZONTAL + +Direction, HORIZONTAL or VERTICAL
    +$aPos + + + +0 + +Position
    +$aColor + + + +'black' + +Color
    +$aWeight + + + +1 + +Line weight
    + +

    Description:
    Create a new horizontal or vertical line in the graph at a specific position. + +The graph can the be added to the graph with a call to the AddLine 
    + +

    Example:

    +// Add mark graph with static lines
    $line = new PlotLine(HORIZONTAL,0,"black",2);
    $graph->AddLine($line); +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/PlotMark.html b/Societes/ric/jpgraph/docs/classref/PlotMark.html new file mode 100755 index 00000000..cf9984f3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/PlotMark.html @@ -0,0 +1,516 @@ +


    Class PlotMark
    +(Defined in: jpgraph_plotmark.inc.php : 17)
     
     PlotMark 
     Hide() 
    SetCallback() 
    SetCallbackYX() 
    SetColor() 
    SetDefaultWidth() 
    SetFillColor() 
    SetSize() 
    SetType() 
    SetWeight() 
    SetWidth() 
    Show() 
    +
     

    Class usage and Overview
    In scatter plots and (possible) line plots each data point have a marker. This class implements these markers and the mtethod to modify it's apperance. +

    +There are a number of possible marker, circle, filled circle, square, filled square, star, triangle and so on. +See PlotMark::PlotMark() below for details on how to specify what mark. +

    +Marks are accessed thtough the 'mark' property in line and scatter plot, i.e LinePlot::mark and ScatterPlot::mark. Marks in line plot are by default turned off. To enable marks use the construction $lineplot->mark->Show(). +

    +You can modify the type of plotmarks by calling the SetType() method. Possible plot marks are: + +

      +
    1. MARK_SQUARE, A filled square +
    2. MARK_UTRIANGLE, A triangle pointed upwards +
    3. MARK_DTRIANGLE, A triangle pointed downwards +
    4. MARK_DIAMOND, A diamond +
    5. MARK_CIRCLE, A circle +
    6. MARK_FILLEDCIRCLE, A filled circle +
    7. MARK_CROSS, A cross +
    8. MARK_STAR, A star +
    9. MARK_X, An 'X' +
    10. MARK_LEFTTRIANGLE, A half triangle, vertical line to left (used as group markers for Gantt charts) +
    11. MARK_RIGHTTRIANGLE, A half triangle, vertical line to right (used as group markers for Gantt charts) +
    12. MARK_FLASH, A Zig-Zag vertical flash +
    +

      +

    See also related classes:
    LinePlot and ScatterPlot

     


    Class Methods

    +

     

    + +Hide plot mark

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + + +true + +True=Hide plot mark
    + +

    Description:
    Hide plot mark + 
    +  
    See also:
    +

    Example:

    +$linerplot->mark->Hide(); + +

    +

    +

     

    + +Specify callback function for plotmark

    + + + + +
    ArgumentDefaultDescription
    +$aFunc + + + Function name
    + +

    Description:
    Callback for plotmarks is only really used in one circumstance. Scatter plot. The callback can be used to individually adjust, sixe and color of the plot marks. +

    +The specified callback function gets called with the Y-value for the current plotmark. The callback function should return an array consisting of three elements +

      +
    1. Plot size +
    2. Color +
    3. Fill color +

    + +

    Example:

    +function FCallback($aVal) {
    // This callback will adjust the fill color and size of
    // the datapoint according to the data value according to
        
    if( $aVal 30 $c "blue";
        elseif( 
    $aVal 70 $c "green";
        else 
    $c="red";
        return array(
    floor($aVal/3),"",$c);
    }

    ...

    // Specify the callback
    $scatterplot->mark->SetCallback("FCallback");


    +
    +

    +

    +

     

    + +Specify callback function

    + + + + +
    ArgumentDefaultDescription
    +$aFunc + + + Callback function
    + +

    Description:
    Callback for plotmarks is only really used in one circumstance. Scatter plot. The callback can be used to individually adjust, sixe and color of the plot marks. +

    +The specified callback function gets called with the Y-value for the current plotmark. The callback function should return an array consisting of three elements +

      +
    1. Plot size +
    2. Color +
    3. Fill color +
    +The difference from the ordinary SetCallback() is that the callback function specified in SetCallbackYX() gets passed both the Y and X coordinate (note the order!) as arguments. + 
    + +

    Example:

    +function FCallback($aYVal,$aXVal) {
        
    // Some code to the size and color
        
    return array( ... );
    }

    ...

    // Specify the callback
    $scatterplot->mark->SetCallbackYX("FCallback");


    +
    +

    +

    +

     

    + +Specify color for plot mark

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Specify the line color for plot mark + 
    +  
    See also:
    +

    Example:

    +$lineplot->mark->SetColor('navy');
    +
    +

    +

    +

     

    + +Restore default size of mark

    +
    + +

    Description:
    Restore default size of mark 
    + +

    Example:

    +$lineplot->mark->SetDefaultWidth() + +

    +

    +

     

    + +Set fill color for mark

    + + + + +
    ArgumentDefaultDescription
    +$aFillColor + + + Color
    + +

    Description:
    Set fill color for mark 
    +  
    See also:
    +

    Example:

    +$lineplot->mark->SetFillColor('blue');
    +
    +

    +

    +

     

    + +Set size of mark

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + WIdth of mark in pixels
    + +

    Description:
    Synonym for SetWidth() 
    +  
    See also:
    +

    Example:

    +$lineplot->mark->SetSize(10); + +

    +

    +

     

    + +Specify type of plot mark

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aType + + + Type of plotmark, shape or built-in image
    +$aFileName + + + +'' + +Filename or country name depending on type of plotmark. See below.
    +$aScale + + + +1.0 + +Scaling of image
    + +

    Description:
    This method is used to specify what type of plotmarks should be be displayed. There are two classes of plotmarks. The first class is a number of different shapes and the second class is a number of built-in renderd images. +

    +The following shape (the first class) plot marks are available + +

      +
    1. MARK_SQUARE, A filled square +
    2. MARK_UTRIANGLE, A triangle pointed upwards +
    3. MARK_DTRIANGLE, A triangle pointed downwards +
    4. MARK_DIAMOND, A diamond +
    5. MARK_CIRCLE, A circle +
    6. MARK_FILLEDCIRCLE, A filled circle +
    7. MARK_CROSS, A cross +
    8. MARK_STAR, A star +
    9. MARK_X, An 'X' +
    10. MARK_IMAGE, Use the image specified with the filename and scale as the second and third argument as the mark. +
    11. MARK_FLAG, Use one of MARK_FLAG1, MARK_FLAG2, MARK_FLAG3, MARK_FLAG4 to indicate that you want to display a country flag. The numbers indicate which original size of the flag you want to use. 1 is the smallest size and 4 is the largest flag size. You can of course also scale a flag by specifying the scale as the third argument. Which country flag you want is specified in the second argument as either the full country name, partial country name or by ordinal number as specified in the table below. Please note that if you specify a partial name then the first country in alphabetic order that matches the partial name will be used. +
    + +

    +For the second class (built-in images) the following table list the different images as well as what color they are available in. For the built-in images you specify the color with the second argument. +

    +Note that some of the images are available in different sizes. The reason is that even though you can scale them by the third argument there is a visual degradation to scale an image larger than it's original size since some pixels needs to be interpolated. Reducing the size with a scale < 1.0 gives much better visual apperance. +

    +The scaling works with both GD 1 and GD 2 but with GD 2 the quality of the scaling is much better. +

    +Built-in images and available colors: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDescriptionColors
    MARK_IMG_PUSHPIN, MARK_IMG_SPUSHPIN Push-pin image'red','blue','green','pink','orange'
    MARK_IMG_LPUSHPIN A larger Push-pin image'red','blue','green','pink','orange'
    MARK_IMG_BALL, MARK_IMAGE_SBALLA round 3D rendered ball'bluegreen','cyan','darkgray','greengray', + 'gray','graypurple','green','greenblue','lightblue', + 'lightred','navy','orange','purple','red','yellow'
    MARK_IMAGE_MBALLA medium sized round 3D rendered ball +'blue','bluegreen','brown','cyan', +'darkgray','greengray','gray','green', +'greenblue','lightblue','lightred', +'purple','red','white','yellow' +
    MARK_IMAGE_LBALLA large sized round 3D rendered ball +'blue','lightblue','brown','darkgreen', +'green','purple','red','gray','yellow','silver','gray' +
    MARK_IMAGE_SQUAREA 3D rendered square'bluegreen','blue','green', +'lightblue','orange','purple','red','yellow'
    MARK_IMG_STARA 3D rendered star image'bluegreen','lightblue','purple','blue','green','pink','red','yellow'
    MARK_IMG_DIAMONDA 3D rendered diamond'lightblue','darkblue','gray', +'blue','pink','purple','red','yellow'
    MARK_IMG_BEVELA 3D rendered bevel style round ring'green','purple','orange','red','yellow'
    +

    +In terms of the builtin flags 230 countries are supported. The following table lists all available flags: +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    1: 'Afghanistan' 2: 'Republic of Angola'
    3: 'Republic of Albania' 4: 'Alderney'
    5: 'Democratic and Popular Republic of Algeria' 6: 'Territory of American Samoa'
    7: 'Principality of Andorra' 8: 'British Overseas Territory of Anguilla'
    9: 'Antarctica' 10: 'Argentine Republic'
    11: 'League of Arab States' 12: 'Republic of Armenia'
    13: 'Aruba' 14: 'Commonwealth of Australia'
    15: 'Republic of Austria' 16: 'Azerbaijani Republic'
    17: 'British Antarctic Territory' 18: 'Kingdom of Belgium'
    19: 'British Overseas Territory of Bermuda' 20: 'Commonwealth of the Bahamas'
    21: 'Kingdom of Bahrain' 22: 'Republic of Belarus'
    23: 'Republic of Bolivia' 24: 'Belize'
    25: 'Republic of Benin' 26: 'Republic of Botswana'
    27: 'Federative Republic of Brazil' 28: 'Barbados'
    29: 'British Indian Ocean Territory' 30: 'Brunei Darussalam'
    31: 'Republic of Burkina' 32: 'Republic of Bulgaria'
    33: 'Republic of Burundi' 34: 'Overseas Territory of the British Virgin Islands'
    35: 'Central African Republic' 36: 'Kingdom of Cambodia'
    37: 'Republic of Cameroon' 38: 'Dominion of Canada'
    39: 'Caribbean Community' 40: 'Republic of Cape Verde'
    41: 'Republic of Chad' 42: 'Republic of Chile'
    43: 'Territory of Christmas Island' 44: 'Commonwealth of Independent States'
    45: 'Cook Islands' 46: 'Republic of Colombia'
    47: 'Territory of Cocos Islands' 48: 'Commonwealth'
    49: 'Union of the Comoros' 50: 'Republic of the Congo'
    51: 'Republic of Costa Rica' 52: 'Republic of Croatia'
    53: 'Republic of Cuba' 54: 'British Overseas Territory of the Cayman Islands'
    55: 'Republic of Cyprus' 56: 'The Czech Republic'
    57: 'Kingdom of Denmark' 58: 'Republic of Djibouti'
    59: 'Commonwealth of Dominica' 60: 'Dominican Republic'
    61: 'Republic of Ecuador' 62: 'Arab Republic of Egypt'
    63: 'Republic of El Salvador' 64: 'England'
    65: 'Republic of Equatorial Guinea' 66: 'State of Eritrea'
    67: 'Republic of Estonia' 68: 'Ethiopia'
    69: 'European Union' 70: 'British Overseas Territory of the Falkland Islands'
    71: 'International Federation of Vexillological Associations' 72: 'Republic of Fiji'
    73: 'Republic of Finland' 74: 'Territory of French Polynesia'
    75: 'French Republic' 76: 'Overseas Department of French Guiana'
    77: 'Gabonese Republic' 78: 'Republic of the Gambia'
    79: 'Republic of Georgia' 80: 'Federal Republic of Germany'
    81: 'Republic of Ghana' 82: 'Gibraltar'
    83: 'Hellenic Republic' 84: 'State of Grenada'
    85: 'Overseas Department of Guadeloupe' 86: 'Territory of Guam'
    87: 'Republic of Guatemala' 88: 'The Bailiwick of Guernsey'
    89: 'Republic of Guinea' 90: 'Republic of Haiti'
    91: 'Hong Kong Special Administrative Region' 92: 'Republic of Honduras'
    93: 'Republic of Hungary' 94: 'Republic of Iceland'
    95: 'International Committee of the Red Cross' 96: 'Republic of India'
    97: 'Republic of Indonesia' 98: 'Republic of Iraq'
    99: 'Republic of Ireland' 100: 'Organization of the Islamic Conference'
    101: 'Isle of Man' 102: 'State of Israel'
    103: 'Italian Republic' 104: 'Jamaica'
    105: 'Japan' 106: 'The Bailiwick of Jersey'
    107: 'Hashemite Kingdom of Jordan' 108: 'Republic of Kazakhstan'
    109: 'Republic of Kenya' 110: 'Republic of Kiribati'
    111: 'State of Kuwait' 112: 'Kyrgyz Republic'
    113: 'Republic of Latvia' 114: 'Lebanese Republic'
    115: 'Kingdom of Lesotho' 116: 'Republic of Liberia'
    117: 'Principality of Liechtenstein' 118: 'Republic of Lithuania'
    119: 'Grand Duchy of Luxembourg' 120: 'Macao Special Administrative Region'
    121: 'Republic of Macedonia' 122: 'Republic of Madagascar'
    123: 'Republic of the Marshall Islands' 124: 'Republic of Mali'
    125: 'Federation of Malaysia' 126: 'Republic of Malta'
    127: 'Republic of Malawi' 128: 'Overseas Department of Martinique'
    129: 'Islamic Republic of Mauritania' 130: 'Territorial Collectivity of Mayotte'
    131: 'United Mexican States' 132: 'Federated States of Micronesia'
    133: 'Midway Islands' 134: 'Republic of Moldova'
    135: 'Principality of Monaco' 136: 'Republic of Mongolia'
    137: 'British Overseas Territory of Montserrat' 138: 'Kingdom of Morocco'
    139: 'Republic of Mozambique' 140: 'Republic of Mauritius'
    141: 'Union of Myanmar' 142: 'Republic of Namibia'
    143: 'North Atlantic Treaty Organization' 144: 'Republic of Nauru'
    145: 'Turkish Republic of Northern Cyprus' 146: 'Netherlands Antilles'
    147: 'Kingdom of Nepal' 148: 'Kingdom of the Netherlands'
    149: 'Territory of Norfolk Island' 150: 'Federal Republic of Nigeria'
    151: 'Republic of Nicaragua' 152: 'Republic of Niger'
    153: 'Niue' 154: 'Commonwealth of the Northern Mariana Islands'
    155: 'Province of Northern Ireland' 156: 'Nordic Council'
    157: 'Kingdom of Norway' 158: 'Territory of New Caledonia and Dependencies'
    159: 'New Zealand' 160: 'Organization of American States'
    161: 'Organization of African Unity' 162: 'International Olympic Committee'
    163: 'Sultanate of Oman' 164: 'Islamic Republic of Pakistan'
    165: 'Republic of Palau' 166: 'Independent State of Papua New Guinea'
    167: 'Republic of Paraguay' 168: 'Republic of the Philippines'
    169: 'British Overseas Territory of the Pitcairn Islands' 170: 'Republic of Poland'
    171: 'Republic of Portugal' 172: 'Commonwealth of Puerto Rico'
    173: 'State of Qatar' 174: 'Russian Federation'
    175: 'Republic of Rwanda' 176: 'Kingdom of Saudi Arabia'
    177: 'Republic of San Marino' 178: 'Nordic Sami Conference'
    179: 'Sark' 180: 'Scotland'
    181: 'Principality of Seborga' 182: 'Republic of Sierra Leone'
    183: 'Republic of Singapore' 184: 'Republic of Korea'
    185: 'Republic of Slovenia' 186: 'Somali Republic'
    187: 'Republic of Somaliland' 188: 'Republic of South Africa'
    189: 'Solomon Islands' 190: 'Kingdom of Spain'
    191: 'Secretariat of the Pacific Community' 192: 'Democratic Socialist Republic of Sri Lanka'
    193: 'Saint Lucia' 194: 'Republic of the Sudan'
    195: 'Republic of Suriname' 196: 'Slovak Republic'
    197: 'Kingdom of Sweden' 198: 'Swiss Confederation'
    199: 'Syrian Arab Republic' 200: 'Kingdom of Swaziland'
    201: 'Republic of China' 202: 'Republic of Tajikistan'
    203: 'United Republic of Tanzania' 204: 'Kingdom of Thailand'
    205: 'Autonomous Region of Tibet' 206: 'Turkmenistan'
    207: 'Togolese Republic' 208: 'Tokelau'
    209: 'Kingdom of Tonga' 210: 'Tristan da Cunha'
    211: 'Tromelin' 212: 'Republic of Tunisia'
    213: 'Republic of Turkey' 214: 'Tuvalu'
    215: 'United Arab Emirates' 216: 'Republic of Uganda'
    217: 'Ukraine' 218: 'United Kingdom of Great Britain'
    219: 'United Nations' 220: 'United States of America'
    221: 'Oriental Republic of Uruguay' 222: 'Virgin Islands of the United States'
    223: 'Republic of Uzbekistan' 224: 'State of the Vatican City'
    225: 'Republic of Vanuatu' 226: 'Bolivarian Republic of Venezuela'
    227: 'Republic of Yemen' 228: 'Democratic Republic of Congo'
    229: 'Republic of Zimbabwe'
    + + 
    + +

    Example:

    +// A standard shape
    $lineplot->mark->SetType(MARK_FILLEDCIRCLE);
    $lineplot->mark->Show();

    // Use image in file 'mark.jpg' as mark., aslo scale it to
    // half the size
    $lineplot->mark->SetType(MARK_IMAGE,'mark.jpg',0.5);
    $lineplot->mark->Show();

    // Using the built-in image diamond in yellow color and 70% of originally size
    $lineplot->mark->SetType(MARK_IMG_DIAMOND'yellow'0.7);
    $lineplot->mark->Show();

    // Setting the plotmarks to a Swedish flag showing the three
    // ways of doing it
    ....
    $p1->mark->SetType(MARK_FLAG1,'sweden');
    // OR
    $p1->mark->SetType(MARK_FLAG1,197);
    // OR
    $p1->mark->SetType(MARK_FLAG1,'Kingdom of Sweden');

    +
    +

    +

    +

     

    + +Specify line weight

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + Line weight
    + +

    Description:
    Specify line weight 
    + +

    Example:

    +$line->mark->SetWeight(2); + +

    +

    +

     

    + +Set width of plot mark

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + Width in pixels
    + +

    Description:
    Set width of plot mark 
    + +

    Example:

    +$lineplot->mark->SetWidth(10);
    +
    +

    +

    +

     

    + +Enable or disable plotmarks

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + + +true + +True=Show plot marks
    + +

    Description:
    Enable or disable plotmarks. By default plot marks are not shown so if you want to display them you need to use this method. + 
    + +

    Example:

    +$lineplot->mark->Show(); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/PolarAxis.html b/Societes/ric/jpgraph/docs/classref/PolarAxis.html new file mode 100755 index 00000000..ffc082c7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/PolarAxis.html @@ -0,0 +1,308 @@ +


    Class PolarAxis Extends Axis
    +(Defined in: jpgraph_polar.php : 151)
     
     PolarAxis  Axis 
     HideTicks() 
    SetAngleFont() 
    SetAngleStep() 
    SetColor() 
    SetGridColor() 
    SetTickColors() 
    ShowAngleDegreeMark() 
    ShowAngleLabel() 
    ShowGrid() 
    +
     StrokeLabels() 
    __construct() 
    +
     

    Class usage and Overview
    Represents the different axis for a polar plot. This class holds the property both for the radius and the angle axis classes. It is accessed throught the 'axis' property in the PolarGraph class.

      +

    See also related classes:
    PolarGraph

     


    Class Methods

    +

     

    + +HIde ticks marks

    + + + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +Hide radius tick marks
    +$aAngleFlg + + + +true + +Hide angle tick marks
    + +

    Description:
    HIde ticks marks 
    + +

    Example:

    +// Hide just the angle tick marks
    $polargraph->axis->HideTicks(false,true); +
    +

    +

    +

     

    + +Set font for angles

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFontFam + + + Font family
    +$aFontStyle + + + +FS_NORMAL + +Font style
    +$aFontSize + + + +10 + +Font size
    + +

    Description:
    Set font for angle labels on the polar graph. 
    + +

    Example:

    +$polargraph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8); + +

    +

    +

     

    + +Set angle step

    + + + + +
    ArgumentDefaultDescription
    +$aStep + + + Step in degrees
    + +

    Description:
    Specify the angle step, in degrees, between the angle markers. 
    + +

    Example:

    +// Set 20 degrees between each marker
    $polargraph->axis->SetAngleStep(20); +
    +

    +

    +

     

    + +Specify axis and label colors

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color for radius axis
    +$aRadColor + + + +'' + +Color for radius labels
    +$aAngleColor + + + +'' + +Color for angle labels
    + +

    Description:
    Specify axis and label colors. 
    +  
    See also:
    +

    Example:

    +$polargraph->axis->SetColor('black','navy','darkred'); + +

    +

    +

     

    + +Set colors for the various grids

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aMajorColor + + + Major radius grid color
    +$aMinorColor + + + +'' + +Minor radius grid color
    +$aAngleColor + + + +'' + +Angle grid color
    + +

    Description:
    Set colors for the various grids 
    + +

    Example:

    +// Set "Soft" colors for the grid
    $polargraph->axis->SetGridColor('lightgray','lightgray','lightgray'); +
    +

    +

    +

     

    + +Specify color for axis tick marks

    + + + + + + +
    ArgumentDefaultDescription
    +$aRadColor + + + Radius axis colors
    +$aAngleColor + + + +'' + +Angle axis colors
    + +

    Description:
    Specify color for axis tick marks 
    + +

    Example:

    +$polargraph->axis->SetTickColor('red'); + +

    +

    +

     

    + +Add a degree mark after each angel label

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +True=Add mark
    + +

    Description:
    Add a degree mark after each angel label ( a small sperscripted 'o' ). This is enabled by default. 
    + +

    Example:

    +$polargraph->axis->ShowAngleDegreeMark(true); + +

    +

    +

     

    + +Show angle labels

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +True=show labels
    + +

    Description:
    Show angle labels. This is on by default. 
    + +

    Example:

    +// Enable angle labels
    $polargraph->axis->ShowAngleLabel(); +
    +

    +

    +

     

    + +Determine what grid lines should be visible

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aMajor + + + +true + +Show major radius grid lines
    +$aMinor + + + +false + +Show minor radius grid lines
    +$aAngle + + + +true + +Show angle grid lines
    + +

    Description:
    Determine what grid lines should be visible. 
    + +

    Example:

    +// Just display major radius grid line and angles
    $polargraph->axis->ShowGrid(true,false,true); +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/PolarGraph.html b/Societes/ric/jpgraph/docs/classref/PolarGraph.html new file mode 100755 index 00000000..84e9a06e --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/PolarGraph.html @@ -0,0 +1,361 @@ +


    Class PolarGraph Extends Graph
    +(Defined in: jpgraph_polar.php : 641)
     
     PolarGraph  Graph 
     Set90AndMargin() 
    SetDensity() 
    SetPlotSize() 
    SetScale() 
    SetType() 
    Stroke() 
    __construct() 
    +
     Add() 
    AddBand() 
    AddLine() 
    AddText() 
    AddY() 
    AddY2() 
    CheckCSIMCache() 
    GetCSIMImgHTML() 
    GetHTMLImageMap() 
    Set3DPerspective() 
    Set90AndMargin() 
    SetAlphaBlending() 
    SetAngle() 
    SetAxisLabelBackground() 
    SetAxisStyle() 
    SetBackgroundCFlag() 
    SetBackgroundCountryFlag() 
    SetBackgroundGradient() 
    SetBackgroundImage() 
    SetBackgroundImageMix() 
    SetBackgroundImagePos() 
    SetBox() 
    SetClipping() 
    SetColor() 
    SetCSIMImgAlt() 
    SetFrame() 
    SetFrameBevel() 
    SetGridDepth() 
    SetIconDepth() 
    SetImgFormat() 
    SetMargin() 
    SetMarginColor() 
    SetScale() 
    SetShadow() 
    SetTextScaleAbsCenterOff() 
    SetTickDensity() 
    SetTitleBackground() 
    SetTitleBackgroundFillStyle() 
    SetUserFont() 
    SetUserFont1() 
    SetUserFont2() 
    SetUserFont3() 
    SetY2OrderBack() 
    SetY2Scale() 
    SetYDeltaDist() 
    SetYScale() 
    Stroke() 
    StrokeCSIM() 
    StrokeCSIMImage() 
    StrokeFrameBackground() 
    StrokeStore() 
    __construct() 
    +
     

    Class usage and Overview
    Represent a polar graph. Accessible properties are + +
      +
    • axis, An instance of PolarAxis() use to manipulate apperance of both radius and angle axis in the graph. +

      +

    See also related classes:
    PolarAxis

     


    Class Methods

    +

     

    + +Rotate the polar graph 90 degrees

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$lm + + + +0 + +Left margin
    +$rm + + + +0 + +Right Margin
    +$tm + + + +0 + +Top margin
    +$bm + + + +0 + +Bottom margin
    + +

    Description:
    Rotate the polar graph 90 degrees 
    + +

    Example:

    +$polargraph->Set90AndMargin(40,40,40,40); + +

    +

    +

     

    + +Specify density for the radius axis

    + + + + +
    ArgumentDefaultDescription
    +$aDense + + + Density
    + +

    Description:
    This is analog to the density specification for the X, and Y-scale s for the standard X-Y-plots. +This specifies how close the autoscaling algorithm will place the tick marks to each other. + +The tick density can be one of + +
      +
    • TICKD_DENSE, Dense tick layout +
    • TICKD_NORMAL, Normal tick layout +
    • TICKD_SPARSE, Sparse tick layout (few tick marks) +
    • TICKD_VERYSPARSE, Very Sparse tick layout (very few tick marks) +
    + +By default the radius density os set to TICKD_DENSE + 
    + +

    Example:

    +// Slightly fewer ticks than default
    $polargraph->SetDensity(TICKD_NORMAL); +
    +

    +

    +

     

    + +Alternative way to specify size of the plot area

    + + + + + + +
    ArgumentDefaultDescription
    +$w + + + Width
    +$h + + + Height
    + +

    Description:
    You can specify the plot area size an posiion in the graph in two ways. The frst is the standard way of specifying the margins on the sides with SetMargins() method. + +This method centers a plot area with the specified width and height inthe middle of the graph, it is basically a short form for + +SetMargins( +$graphwidth-($w/2),$graphwidth-($w/2), +$graphheight-($h/2),$graphheight-($h/2)); + 
    + +

    Example:

    +$polargraph->SetPlotSize(200,250); + +

    +

    +

     

    + +Specify scale type (linear or log)

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aScale + + + Linear "lin" or logarithmic "log" scale
    +$rmax + + + +0 + +Manual maximum value
    +$dummy1 + + + +1 + +No description available
    +$dummy2 + + + +1 + +No description available
    +$dummy3 + + + +1 + +No description available
    + +

    Description:
    Specify scale type (linear or log) for the radius scale. A linear scale is specified as 'lin' and a logarithmic scale is specified as 'log' 
    + +

    Example:

    +// Specify a logarithmic scale for the radius
    $polargraph->SetScale('log'); +
    +

    +

    +

     

    + +Specify if the graphs should be 360 or 180

    + + + + +
    ArgumentDefaultDescription
    +$aType + + + Type
    + +

    Description:
    Specify if the polargraph should be a full 360 degrees or just 180 degrees. The possible values for type are + +
      +
    • POLAR_360, A full 360 polar plot +
    • POLAR_180, A half 180 polar plot +
    + +By default the graph is a full 260 degrees. 
    + +

    Example:

    +$polargraph->SetType(POLAR_360);
    +
    +

    +

    +

     

    + +Send graph back to browser or file

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + + +"" + +File name
    + +

    Description:
    Send a graph back to browser or to a file. This must be the last call in your script. + + 
    + +

    Example:

    +$polargraph->Stroke(); + +

    +

    +

     

    + +Construct a new graph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + +300 + +Width (in pixels)
    +$aHeight + + + +200 + +Height (in pixels)
    +$aCachedName + + + +"" + +Cache name
    +$aTimeOut + + + +0 + +Cache timeout
    +$aInline + + + +true + +Inline flag (DEPRECATED)
    + +

    Description:
    Construct a new Polar Graph. This is completely analog to the standard Graph() creation and follows the exactly same pattern.  
    + +

    Example:

    +$polargraph = new PolarGraph(300,500); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/PolarPlot.html b/Societes/ric/jpgraph/docs/classref/PolarPlot.html new file mode 100755 index 00000000..331908d6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/PolarPlot.html @@ -0,0 +1,176 @@ +


    Class PolarPlot
    +(Defined in: jpgraph_polar.php : 34)
     
     PolarPlot 
     SetColor() 
    SetCSIMTargets() 
    SetFillColor() 
    SetLegend() 
    SetWeight() 
    __construct() 
    +
     

    Class usage and Overview
    Represents a polar plot. A polar plot is a line plot that may have marks or be filled. + +Public properties are + +
      +
    • mark, Instance of class PlotMark. Make sit possible to add Plot marks in the plot. +

      +

    See also related classes:
    PlotMark

     


    Class Methods

    +

     

    + +Specify line color for polar plot

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Line Color
    + +

    Description:
    Specify line color for polar plot 
    + +

    Example:

    +$polarplot->SetColor('navy'); + +

    +

    +

     

    + +Specify URL targets for markers

    + + + + + + +
    ArgumentDefaultDescription
    +$aTargets + + + URL targets
    +$aAlts + + + +null + +Alt texts
    + +

    Description:
    Specify URL targets for markers on the polar plot. If you have specified a mark the polar plot you can add URL targets for each mark with this method. + +Remember that to create an image map graph you need to construct the graph with the Graph::StrokeCSIM() method instead of the ordinary Graph::Stroke() 
    +  
    See also:
    +

    Example:

    +// Dummy targets
    $t = array('#1','#2','#3','#4','#5','#6');

    $polarplot->SetCSIMTargets($t);

    +
    +

    +

    +

     

    + +Specify fill color for plot

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Fill color
    + +

    Description:
    Specify fill color for plot. If the fill color is specified as '' then no fill will be used. 
    +  
    See also:
    +

    Example:

    +$polarplot->SetFillColor('orange'); + +

    +

    +

     

    + +Specify legend text for the plot

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aLegend + + + Legend text
    +$aCSIM + + + +"" + +URL target for this legend
    +$aCSIMAlt + + + +"" + +ALT text for this legend
    + +

    Description:
    Specify legend text for the plot. When image maps are used you can also specify a URL for this legend. 
    + +

    Example:

    +$polarplot->SetLegend('Year 2002'); + +

    +

    +

     

    + +Sepcify line weight (in pixels)

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + Line weight
    + +

    Description:
    Sepcify line weight for plot 
    + +

    Example:

    +$polarplot->SetWeight(2); + +

    +

    +

     

    + +Constructor. Create a new Polar plot

    + + + + +
    ArgumentDefaultDescription
    +$aData + + + Data array
    + +

    Description:
    A polar plot is created form an array of (angle,radius) specification for each plot point.. 
    + +

    Example:

    +$pdata = array(0,0,15,35,40,70,70,120);

    $polarplot = new PolarPlot($pdata);
    $polarplot->SetFillColor('lightblue@0.5');

    $polargraph->Add($polarplot);

    $polargraph->Stroke();
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Progress.html b/Societes/ric/jpgraph/docs/classref/Progress.html new file mode 100755 index 00000000..d4495337 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Progress.html @@ -0,0 +1,111 @@ +


    Class Progress
    +(Defined in: jpgraph_gantt.php : 3077)
     
     Progress 
     Set() 
    SetFillColor() 
    SetPattern() 
    +
     

    Class usage and Overview
    Represents the progress bar inside the activity bar in Gantt Charts

      +

    See also related classes:
    GanttGraph and GanttBar

     


    Class Methods

    +

     

    + +Specify progress of activity in percent.

    + + + + +
    ArgumentDefaultDescription
    +$aProg + + + Progress in percent (0-1)
    + +

    Description:
    Specify progress of activity in percent. The shape of the progress bar can be specified with Progress::SetPattern() 
    +  
    See also:
    +

    Example:

    +$bar->progress->Set(0.8); + +

    +

    +

     

    + +Set fill (background) color for progress bar

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Set fill (background) color for progress bar 
    + +

    Example:

    +$bar->progress->SetFillColor('white'); + +

    +

    +

     

    + +Specify pattern class to use for progress bar

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aPattern + + + Pattern
    +$aColor + + + +"blue" + +Color
    +$aDensity + + + +98 + +Density
    + +

    Description:
    Specify pattern class to use for progress bar. Valid patterns for the first argument are: + +
      +
    • BAND_RDIAG, Right diagonal lines +
    • BAND_LDIAG, Left diagonal lines +
    • BAND_SOLID, Solid one color +
    • BAND_LVERT, Vertical lines +
    • BAND_LHOR, Horizontal lines +
    • BAND_VLINE, Vertical lines +
    • BAND_HLINE, Horizontal lines +
    • BAND_3DPLANE, "3D" Plane +
    • BAND_HVCROSS, Vertical/Hor crosses +
    • BAND_DIAGCROSS, Diagonal crosses +
    + + 
    +  
    See also:
    +

    Example:

    +$activity->Set(0.8);
    $activity->progress->SetPattern(BAND_RDIAG,"blue");
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/RadarAxis.html b/Societes/ric/jpgraph/docs/classref/RadarAxis.html new file mode 100755 index 00000000..46a356b3 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/RadarAxis.html @@ -0,0 +1,46 @@ +


    +(Defined in: jpgraph_radar.php : 219)
     
     RadarAxis  AxisPrototype 
     Hide() 
    HideFirstLastLabel() 
    HideFirstTickLabel() 
    HideLabels() 
    HideLastTickLabel() 
    HideLine() 
    HideTicks() 
    HideZeroLabel() 
    SetColor() 
    SetFont() 
    SetLabelAlign() 
    SetLabelAngle() 
    SetLabelFormat() 
    SetLabelFormatCallback() 
    SetLabelFormatString() 
    SetLabelMargin() 
    SetLabelSide() 
    SetMajTickPositions() 
    SetPos() 
    SetPosAbsDelta() 
    SetTextLabelInterval() 
    SetTextTickInterval() 
    SetTickLabels() 
    SetTickPositions() 
    SetTickSide() 
    SetTickSize() 
    SetTitle() 
    SetTitleMargin() 
    SetTitleSide() 
    SetWeight() 
    __construct() 
    +
     

    Class usage and Overview
    Represents the axis for a spider plot

      +


    Class Methods


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/RadarGraph.html b/Societes/ric/jpgraph/docs/classref/RadarGraph.html new file mode 100755 index 00000000..e6b0f342 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/RadarGraph.html @@ -0,0 +1,481 @@ +


    Class RadarGraph Extends Graph
    +(Defined in: jpgraph_radar.php : 554)
     
     RadarGraph  Graph 
     Add() 
    HideTickMarks() 
    SetCenter() 
    SetColor() 
    SetPlotSize() 
    SetPos() 
    SetScale() 
    SetSize() 
    SetTickDensity() 
    SetTitles() 
    ShowMinorTickmarks() 
    Stroke() 
    StrokeIcons() 
    StrokeTexts() 
    __construct() 
    +
     Add() 
    AddBand() 
    AddLine() 
    AddText() 
    AddY() 
    AddY2() 
    CheckCSIMCache() 
    GetCSIMImgHTML() 
    GetHTMLImageMap() 
    Set3DPerspective() 
    Set90AndMargin() 
    SetAlphaBlending() 
    SetAngle() 
    SetAxisLabelBackground() 
    SetAxisStyle() 
    SetBackgroundCFlag() 
    SetBackgroundCountryFlag() 
    SetBackgroundGradient() 
    SetBackgroundImage() 
    SetBackgroundImageMix() 
    SetBackgroundImagePos() 
    SetBox() 
    SetClipping() 
    SetColor() 
    SetCSIMImgAlt() 
    SetFrame() 
    SetFrameBevel() 
    SetGridDepth() 
    SetIconDepth() 
    SetImgFormat() 
    SetMargin() 
    SetMarginColor() 
    SetScale() 
    SetShadow() 
    SetTextScaleAbsCenterOff() 
    SetTickDensity() 
    SetTitleBackground() 
    SetTitleBackgroundFillStyle() 
    SetUserFont() 
    SetUserFont1() 
    SetUserFont2() 
    SetUserFont3() 
    SetY2OrderBack() 
    SetY2Scale() 
    SetYDeltaDist() 
    SetYScale() 
    Stroke() 
    StrokeCSIM() 
    StrokeCSIMImage() 
    StrokeFrameBackground() 
    StrokeStore() 
    __construct() 
    +
     

    Class usage and Overview
    Spider graph. This graph type can only be used together with spider plots.

      +


    Class Methods

    +

     

    + +Add a spider plot to the spider graph

    + + + + +
    ArgumentDefaultDescription
    +$aPlot + + + No description available
    + +

    Description:
    Add a spider plot to the spider graph 
    + +

    Example:

    +$spidergraph->Add($spiderplot1); + +

    +

    +

     

    + +Hide tick marks on spider axis

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + +true + +True=Hide tick marks
    + +

    Description:
    Hide tick marks on spider axis 
    + +

    Example:

    +$spidergraph->HideTickMarks();
    +
    +

    +

    +

     

    + +Specify position for center of spider graph

    + + + + + + +
    ArgumentDefaultDescription
    +$px + + + Fraction of width
    +$py + + + +0.5 + +Fraction of height
    + +

    Description:
    Specify the position for the center of the spider graph in fractions of the image width and height. 
    + +

    Example:

    +$spidergraph->SetCenter(0.60.5); + +

    +

    +

     

    + +Set background color for graph

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    Set background color for graph 
    + +

    Example:

    +$spidergraph->SetColor('lightyellow');
    +
    +

    +

    +

     

    + +Specify size of spider graph

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + + Fraction of image size
    + +

    Description:
    DEPRECATED
    +Use SetSize() instead +
    +Specify the length of the axis of the spider plot as fraction of the min(height,width) 
    +  
    See also:
    +

    Example:

    +$radargraph->SetPlotSize(0.7);
    +
    +

    +

    +

     

    + +Alias for Set Center. Specify position of the center of the graph

    + + + + + + +
    ArgumentDefaultDescription
    +$px + + + Fraction of width
    +$py + + + +0.5 + +Fraction of height
    + +

    Description:
    Alias for SetCenter. Specify position for the center of the graph. 
    +  
    See also:
    +

    Example:

    +$graph->SetPos(0.5,0.6); + +

    +

    +

     

    + +Specify manual scale for spider graph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$axtype + + + Axis type
    +$ymin + + + +1 + +Min Y-value
    +$ymax + + + +1 + +Max Y-value
    +$dummy1 + + + +null + +No description available
    +$dumy2 + + + +null + +No description available
    + +

    Description:
    Specify axis type and min/max value for the scale. 
    + +

    Example:

    +$spidergraph->SetScale('lin',0,50); + +

    +

    +

     

    + +Specify the length of the axis

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + + Fraction of image size
    + +

    Description:
    pecify the length of the axis of the spider plot as fraction of the min(height,width) 
    + +

    Example:

    +$radargraph->SetPlotSize(0.7); + +

    +

    +

     

    + +Specify tick density

    + + + + + + +
    ArgumentDefaultDescription
    +$densy + + + +TICKD_NORMAL + +Density
    +$dummy1 + + + +null + +No description available
    + +

    Description:
    Tick density can be specified as +
      +
    • TICKD_DENSE, Tick marks close +
    • TICKD_NORMAL, Tick marks as normal +
    • TICKD_SPARSE, Tick marks sparse +
    • TICKD_VERYSPARSE, TIck marks very sparse +

    + +

    Example:

    +$spidergraph->SetTickDensity(TICKD_VERYSPARSE); + +

    +

    +

     

    + +Specify titles for all the spider axis

    + + + + +
    ArgumentDefaultDescription
    +$aTitleArray + + + No description available
    + +

    Description:
    Set the title for the axis in the spider graph. If no titles have been specified then they will be numbered from 1 to maximum number of axis. 
    + +

    Example:

    +$spidergraph->SetTitles(array('Jan','Feb','March','Apr')); + +

    +

    +

     

    + +Show minor tick marks

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + +true + +True=Show minor tick marks
    + +

    Description:
    By default the minor tick marks are hidden. This method turns them on. 
    + +

    Example:

    +$spidergraph->ShowMinorTickMArks();
    +
    +

    +

    +

     

    + +Stroke the Spider graph

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + + +'' + +Filename
    + +

    Description:
    Stroke the spider graph and send it back to the browser or write it to a file if a filename have been specified. + +This is normally the last method call in your script. 
    +  
    See also:
    +

    Example:

    +$spidergraph->Stroke();
    +
    +

    +

    +

     

    + +//("Minimum data $min (Radar plots should only be used when all data points > 0)");

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +Construct a new radar graph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$width + + + +300 + +Imaghe width
    +$height + + + +200 + +Image Height
    +$cachedName + + + +"" + +Cache file name
    +$timeout + + + +0 + +Cache timout (in minutes)
    +$inline + + + +1 + +Inline image
    + +

    Description:
    See Graph::Graph(). + 
    +  
    See also:
    +

    Example:

    +$radargraph = new RadarGraph(300,300); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/RadarGrid.html b/Societes/ric/jpgraph/docs/classref/RadarGrid.html new file mode 100755 index 00000000..e8adf5b9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/RadarGrid.html @@ -0,0 +1,78 @@ +


    Class RadarGrid
    +(Defined in: jpgraph_radar.php : 336)
     
     RadarGrid 
     SetColor() 
    SetLineStyle() 
    SetWeight() 
    Show() 
    +
     

    Class usage and Overview
    Represents the grid for a spider plot

      +

    See also related classes:
    SpiderAxis and SpiderGraph

     


    Class Methods

    +

     

    + +// Empty

    + + + + +
    ArgumentDefaultDescription
    +$aMajColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Specify if grid should be dashed, dotted or solid

    + + + + +
    ArgumentDefaultDescription
    +$aType + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Decide if both major and minor grid should be displayed

    + + + + +
    ArgumentDefaultDescription
    +$aShowMajor + + + +true + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/RadarLinearTicks.html b/Societes/ric/jpgraph/docs/classref/RadarLinearTicks.html new file mode 100755 index 00000000..b050145b --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/RadarLinearTicks.html @@ -0,0 +1,64 @@ +


    Class RadarLinearTicks Extends Ticks
    +(Defined in: jpgraph_radar.php : 108)
     
     RadarLinearTicks  Ticks 
     GetMajor() 
    GetMinor() 
    Set() 
    +
     SetColor() 
    SetFormatCallback() 
    SetLabelFormat() 
    SetSide() 
    SetSize() 
    SetWeight() 
    SupressFirst() 
    SupressLast() 
    SupressMinorTickMarks() 
    SupressTickMarks() 
    SupressZeroLabel() 
    +
     

    Class usage and Overview
    Handle linear ticks on a single spider axis

      +

    See also related classes:
    SpiderGraph and SpiderLogTicks

     


    Class Methods

    +

     

    + +// Return major step size in world coordinates

    +
    + +

    Description:
    No description available.

    +

     

    + +// Return minor step size in world coordinates

    +
    + +

    Description:
    No description available.

    +

     

    + +// Set Minor and Major ticks (in world coordinates)

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajStep + + + No description available
    +$aMinStep + + + +false + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/RadarLogTicks.html b/Societes/ric/jpgraph/docs/classref/RadarLogTicks.html new file mode 100755 index 00000000..0c1304c6 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/RadarLogTicks.html @@ -0,0 +1,26 @@ +


    Class RadarLogTicks Extends Ticks
    +(Defined in: jpgraph_radar.php : 18)
     
     RadarLogTicks  Ticks 
     SetColor() 
    SetFormatCallback() 
    SetLabelFormat() 
    SetSide() 
    SetSize() 
    SetWeight() 
    SupressFirst() 
    SupressLast() 
    SupressMinorTickMarks() 
    SupressTickMarks() 
    SupressZeroLabel() 
    +
     

    Class usage and Overview
    Represent logarithmic ticks on a single spider axis

      +


    Class Methods


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/RadarPlot.html b/Societes/ric/jpgraph/docs/classref/RadarPlot.html new file mode 100755 index 00000000..35040f0a --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/RadarPlot.html @@ -0,0 +1,213 @@ +


    Class RadarPlot
    +(Defined in: jpgraph_radar.php : 399)
     
     RadarPlot 
     SetColor() 
    SetCSIMTargets() 
    SetFill() 
    SetFillColor() 
    SetLegend() 
    SetLineStyle() 
    SetLineWeight() 
    __construct() 
    +
     

    Class usage and Overview
    Create a new spider plot. + +A spider plot can only be added to a SpiderGraph

      +

    See also related classes:
    SpiderGraph

     


    Class Methods

    +

     

    + +Specify color for the plot

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color for line
    +$aFillColor + + + +false + +Fill color
    + +

    Description:
    Set the color for the plot. Note that you can also use the method SetFillColor() to specify the fill color. This non-orthogonality is in place to make the API be more flexible. + + 
    +  
    See also:
    +

    Example:

    +$spideplot->SetColor('darkred','lightblue');
    +
    +

    +

    +

     

    + +// Set href targets for CSIM

    + + + + + + +
    ArgumentDefaultDescription
    +$aTargets + + + No description available
    +$aAlts + + + +null + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Deprecated. Turn filling on and off

    + + + + +
    ArgumentDefaultDescription
    +$f + + + +true + +True=Use fill color and fill plot
    + +

    Description:
    Deprecated. Turn filling on and off. When the fill color is pecified with either SetFillColor() or SetColor() this will tuen on the filling of the plot. + +This method might be useful if you programatically have set the colro and later need to disable the fill. 
    + +

    Example:

    +$spiderplot->SetFillColor('lightblue');

    // ... some code

    // Turn off the fill
    if( $doNotFillSpiderPlot )
        
    $spiderplot->SetFill(false);

    +
    +

    +

    +

     

    + +Specify fill color for plot

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Specify fill color for plot. + +Note. You can also use SetColor() to specify both fill and line color. 
    +  
    See also:
    +

    Example:

    +$spiderplot->SetFillColor('lightblue'); + +

    +

    +

     

    + +Specify legend text for this plot

    + + + + +
    ArgumentDefaultDescription
    +$legend + + + Legend string
    + +

    Description:
    Specify legend text for this plot. 
    + +

    Example:

    +$spiderplot->SetLegend('Stress level'); + +

    +

    +

     

    + +Specify line style for the plot lines

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + + Line style
    + +

    Description:
    The line style can be one of +
      +
    • "solid" +
    • "dashed" +
    • "longdashed" +
    • "dotted" +

    + +

    Example:

    +$radarplot->SetLineStyle('dotted'); + +

    +

    +

     

    + +Set line weight

    + + + + +
    ArgumentDefaultDescription
    +$w + + + Line weight in pixels
    + +

    Description:
    Set line weight. 
    + +

    Example:

    +$spiderplot->SetLineWeight(2); + +

    +

    +

     

    + +Create a new Radar plot

    + + + + +
    ArgumentDefaultDescription
    +$data + + + Data array
    + +

    Description:
    Creates a new radar plot 
    + +

    Example:

    +$radar = new RadarPlot($data); + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/ReadFileData.html b/Societes/ric/jpgraph/docs/classref/ReadFileData.html new file mode 100755 index 00000000..6752e1f9 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/ReadFileData.html @@ -0,0 +1,36 @@ +


    +(Defined in: jpgraph_utils.inc.php : 411)
     
     ReadFileData 
     From1Col() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +// Now make sure that all data is numeric. By default// all data is read as strings

    + + + + + + +
    ArgumentDefaultDescription
    +$aFile + + + No description available
    +$aCol1 + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/RectLayout.html b/Societes/ric/jpgraph/docs/classref/RectLayout.html new file mode 100755 index 00000000..8b2f1457 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/RectLayout.html @@ -0,0 +1,22 @@ +


    +(Defined in: jpgraph_odo.php : 725)
     
     RectLayout 
     LayoutSize() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +// Should the circular base of the indicator needle be displayed

    +
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/RotImage.html b/Societes/ric/jpgraph/docs/classref/RotImage.html new file mode 100755 index 00000000..fa1ebd92 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/RotImage.html @@ -0,0 +1,147 @@ +


    Class RotImage Extends Image
    +(Defined in: jpgraph.php : 7530)
     
     RotImage  Image 
     SetAngle() 
    SetCenter() 
    SetMargin() 
    SetTranslation() 
    +
     RoundedRectangle() 
    SetAlphaBlending() 
    SetAntiAliasing() 
    SetCanvasColor() 
    SetExpired() 
    SetImgFormat() 
    SetMargin() 
    SetQuality() 
    SetTransparent() 
    +
     

    Class usage and Overview
    A subclass of Image class which implements a rotated version of all methods in the base Image class. + +The Image class used in JpGraph is actually not the class Image but rather this class as we want to have the rotating possibility. + +The rotation is accomplished by standard 2D rotation matrices.

      +

    See also related classes:
    Image

     


    Class Methods

    +

     

    + +Specify rotation angle

    + + + + +
    ArgumentDefaultDescription
    +$a + + + Angle in degrees
    + +

    Description:
    Specify the rotation angle for the other graphic primitives in this class. + +The rotation is performed around point (0,0). + 
    +  
    See also:
    +

    Example:

    +$graph->img->SetAngle(45);
    +
    +

    +

    +

     

    + +Set rotation center

    + + + + + + +
    ArgumentDefaultDescription
    +$dx + + + Specify rotation center X
    +$dy + + + Specify rotation center Y
    + +

    Description:
    Specify center of rotation. (0,0) is the upper left most point in the image. By default the rotation point is choosen as tjhe midpoint of the image when the RotImage class is initially created. + 
    +  
    See also:
    +

    Example:

    +$width=600$height=400;
    $graph = new Graph($width,$height);
    $graph->img->SetMargin($leftm,$rightm,$topm,$bottomm);
    $graph->SetAngle(20);

    // Rotate graph around the plots (0,0) point, i.e
    // where the graph axis intersect.
    $graph->img->SetCenter($leftm,$height-($topm+$bottomm));
    +
    +

    +

    +

     

    + +Specify margin for plot

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$lm + + + Left margin
    +$rm + + + Right margin
    +$tm + + + Top margin
    +$bm + + + Bottom margin
    + +

    Description:
    Specify the margin, i.e. the area on the side of the actual plot which is used for titles, labels, legends ans so on. + 
    + +

    Example:

    +$graph->img->SetMargin(30,30,50,20);
    +
    +

    +

    +

     

    + +Specify translation (in pixels)

    + + + + + + +
    ArgumentDefaultDescription
    +$dx + + + Horizontal translation
    +$dy + + + Vertical translation
    + +

    Description:
    The translation is applied after the rotation of the image. 
    +  
    See also:
    +

    Example:

    +$graph->img->SetTranslation(10,10) + +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/ScatterPlot.html b/Societes/ric/jpgraph/docs/classref/ScatterPlot.html new file mode 100755 index 00000000..4665a276 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/ScatterPlot.html @@ -0,0 +1,149 @@ +


    Class ScatterPlot Extends Plot
    +(Defined in: jpgraph_scatter.php : 133)
     
     ScatterPlot  Plot 
     SetImpuls() 
    SetLinkPoints() 
    SetStem() 
    __construct() 
    +
     HideLegend() 
    PreScaleSetup() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetLegend() 
    SetLineWeight() 
    +
     

    Class usage and Overview
    A scatter plto is used to display a number of points specified by (x,y) coordinates. To specify the apperance of points the 'mark' property has to be set. See PlotMark class for further details. +

    +The marks can also be connected with lines by calling the method SetLinkPoints()

      +

    See also related classes:
    LinePlot and PlotMark

     


    Class Methods

    +

     

    + +Specify impuls type of sctter plot

    + + + + +
    ArgumentDefaultDescription
    +$f + + + +true + +True=Use impuls type
    + +

    Description:
    By specifying the impuls type each plot is linked to the X-axis by a line. + +This type of plots is often used to illustrate signals in discrete time signal processing. 
    + +

    Example:

    +$scatterplot->SetImpuls();
    +
    +

    +

    +

     

    + +Combine the scatter plot points with a line

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + +true + +True=Link scatter points
    +$aColor + + + +"black" + +Color of line
    +$aWeight + + + +1 + +Line width
    +$aStyle + + + +'solid' + +No description available
    + +

    Description:
    Link scatter plots with a line of specified color and width. 
    + +

    Example:

    +$scatterplot->SetLinkPoints();
    +
    +

    +

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$f + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +Constructor

    + + + + + + +
    ArgumentDefaultDescription
    +$datay + + + Y-data array
    +$datax + + + +false + +X-data array
    + +

    Description:
    Create a new scatter plot 
    + +

    Example:

    +$datax = array( ... );
    $datay = array( ... );
    $scatter = new ScatterPlot($datay,$datax);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Shape.html b/Societes/ric/jpgraph/docs/classref/Shape.html new file mode 100755 index 00000000..7e704f6d --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Shape.html @@ -0,0 +1,614 @@ +


    Class Shape
    +(Defined in: jpgraph_canvtools.php : 69)
     
     Shape 
     Bezier() 
    Circle() 
    FilledCircle() 
    FilledPolygon() 
    FilledRectangle() 
    FilledRoundedRectangle() 
    IndentedRectangle() 
    Line() 
    Polygon() 
    Rectangle() 
    RoundedRectangle() 
    SetColor() 
    SetTextAlign() 
    ShadowRectangle() 
    __construct() 
    +
     

    Class usage and Overview
    This is mainly awrapper class around thye current image class used. It is meant to make it easier to work with a Canvas graph and a Canvas scale. Basically the class uses the specified scale to trasnalte coordinates which is then passed on to the standard Image routines. +

      +

    See also related classes:
    CanvasScale

     


    Class Methods

    +

     

    + +Draw a bezier curve

    + + + + + + +
    ArgumentDefaultDescription
    +$p + + + Array with control points
    +$aSteps + + + +40 + +Number of line segments in curve
    + +

    Description:
    Draw a Bezier line with specified in the $p array. The points are specified according to the current scale. The positions in the array has the following meaning +

    +(0,1) x0,y0 (First point on curver)
    +(2,3) x,y, (Control point 1)
    +(4,5) x,y, (Control point 2)
    +(6,7) x,y, (End point of curve)
    +

    +See example in canvasbezierex1.php + + 
    + +

    Example:

    +$p = array(3,6,6,9,5,3,7,4);

    $shape->SetColor('black');
    $shape->Bezier($p);
    +
    +

    +

    +

     

    + +Draw a circle

    + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + + Center X-coordinate
    +$y1 + + + Center Y-coordinate
    +$r + + + Radius
    + +

    Description:
    Draw a circle onto the canvas + 
    +  
    See also:
    +

    Example:

    +// The shape class is wrapper around the Imgae class which translates
    // the coordinates for us
    $shape = new Shape($g,$scale);
    $shape->SetColor('black');


    // .. and a circle (x,y,diameter)
    $shape->Circle(5,14,2);

    +
    +

    +

    +

     

    + +Draw a filled circle to a canvas

    + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + + Center X-coordinate
    +$y1 + + + Center Y-coordinate
    +$r + + + Radius
    + +

    Description:
    Draw a filled circle on the canvas using the specified scale. +

    +Note: If you are using GD1.xx you will see moire-patterns in large circles. This is due to the lack of a proper filled circle function in GD 1.xx. Using GD 2.xx will avoid this problem. + 
    +  

    See also:
    +

    Example:

    +// The shape class is wrapper around the Imgae class which translates
    // the coordinates for us
    $shape = new Shape($g,$scale);
    $shape->SetColor('black');


    // .. and a circle (x,y,diameter)
    $shape->FilledCircle(5,14,2);

    +
    +

    +

    +

     

    + +Draw a filled polygon

    + + + + +
    ArgumentDefaultDescription
    +$p + + + Polygon array
    + +

    Description:
    Draw a filled polygon 
    +

    +

     

    + +Draw a filled rectangle on the canvas

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + + Top left X
    +$y1 + + + Top left Y
    +$x2 + + + Bottom right X
    +$y2 + + + Bottom right Y
    + +

    Description:
    Draw a filled rectangle on the canvas using the current sclae. + 
    + +

    Example:

    +
    // .. add a rectangle
    $shape->SetColor('green');
    $shape->FilledRectangle(15,8,19,14);
    +
    +

    +

    +

     

    + +Create a filled rectangle with rounded corners

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + + Top left X
    +$y1 + + + Top left Y
    +$x2 + + + Bottom right X
    +$y2 + + + Bottom right Y
    +$r + + + +null + +Corner radius
    + +

    Description:
    Create a filled rectangle with rounded corners 
    +

    +

     

    + +A filled rectangle with one corner 'indented'

    + + + + + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$xt + + + Top left X
    +$yt + + + Top left Y
    +$w + + + Width
    +$h + + + Height
    +$iw + + + +0 + +Indented width
    +$ih + + + +0 + +Indeted height
    +$aCorner + + + +3 + +Corner to indent
    +$aFillColor + + + +"" + +Fill color
    +$r + + + +4 + +Corner radius
    + +

    Description:
    A rounded rectangle where one of the corner has been moved "into" the rectangle. The indention is determined by the two argument +'iw' width and 'ih' height. +

    +The corners (as used in the $aCorner) are numbered as +0=Top left, 1=top right, 2=bottom right, 3=bottom left + 
    +

    +

     

    + +Draw a line between

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + + X1
    +$y1 + + + Y1
    +$x2 + + + X2
    +$y2 + + + Y2
    + +

    Description:
    Draw a line between two points in the canvas using the current scale. 
    +  
    See also:
    +

    Example:

    +
    // Add a black line
    $shape->SetColor('black');
    $shape->Line(0,0,20,20);
    +
    +

    +

    +

     

    + +Draw a closed polygon

    + + + + + + +
    ArgumentDefaultDescription
    +$p + + + Array of points in polygon
    +$aClosed + + + +false + +No description available
    + +

    Description:
    Draw a closed polygon 
    + +

    Example:

    +$p = array(3,6,6,9,5,3,7,4);
    $shape->SetColor('blue:0.35');
    $shape->Polygon($p); +
    +

    +

    +

     

    + +Draw a rectangle on the canvas

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + + Top left X
    +$y1 + + + Top left Y
    +$x2 + + + Bottom right X
    +$y2 + + + Bottom right Y
    + +

    Description:
    Draw a rectangle on the canvas using the current scale. 
    + +

    Example:

    +// .. add a rectangle
    $shape->SetColor('green');
    $shape->Rectangle(15,8,19,14);
    +
    +

    +

    +

     

    + +Draw a rectangle with rounded corners

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + + Top left X
    +$y1 + + + Top left Y
    +$x2 + + + Bottom right X
    +$y2 + + + Bottom right Y
    +$r + + + +null + +Corner radius
    + +

    Description:
    Draw a rectangle with rounded corners 
    +

    +

     

    + +Specify color to use when drawing shapes

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color specification
    + +

    Description:
    Specify color to use when drawing shapes 
    +  
    See also:
    +

    Example:

    +// Add a black line
    $shape->SetColor('black');
    $shape->Line(0,0,20,20);
    +
    +

    +

    +

     

    + +Specify bae point for StrokeText()

    + + + + + + +
    ArgumentDefaultDescription
    +$halign + + + Horizontal position for basepoint
    +$valign + + + +"bottom" + +Vertical position for base point
    + +

    Description:
    Specifies how the coordinate for the text should be interpretated. Possible values for horizontal base-position are + +
      +
    • "left" +
    • "center" +
    • "right" +
    + +and for vertical + + +
      +
    • "top" +
    • "center" +
    • "bottom" +

    + +

    Example:

    +// Interpret the text coordinate as beeing the
    // top left corner of the bounding box for the text
    $shape->SetTextAlign('left','top');

    $shape->StrokeText(....)
    +
    +

    +

    +

     

    + +Draw a filled rectangle with a drop shadow

    + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + + Top left X
    +$y1 + + + Top left Y
    +$x2 + + + Bottom right X
    +$y2 + + + Bottom right Y
    +$fcolor + + + +false + +Fill color
    +$shadow_width + + + +null + +Shadow width
    +$shadow_color + + + +array(102,102,102) + +Shadow color
    + +

    Description:
    Draw a filled rectangle with a drop shadow 
    +

    +

     

    + +Methods to draw shapes on canvas

    + + + + + + +
    ArgumentDefaultDescription
    +$aGraph + + + No description available
    +$scale + + + No description available
    + +

    Description:
    Create a new shape class used to draw siple shape onto a canvas using the specified scale. 
    +  
    See also:
    +

    Example:

    +// Setup a basic canvas we can work 
    $g = new CanvasGraph(400,200,'auto');
    $g->SetMargin(5,11,6,11);
    $g->SetShadow();
    $g->SetMarginColor("teal");

    // We need to stroke the plotarea and margin before we add the
    // text since we otherwise would overwrite the text.
    $g->InitFrame();

    // Create a new scale
    $scale = new CanvasScale($g);
    $scale->Set(0,$xmax,0,$ymax);

    // The shape class is wrapper around the Imgae class which translates
    // the coordinates for us
    $shape = new Shape($g,$scale);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Spline.html b/Societes/ric/jpgraph/docs/classref/Spline.html new file mode 100755 index 00000000..fbda5ad1 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Spline.html @@ -0,0 +1,77 @@ +


    Class Spline
    +(Defined in: jpgraph_regstat.php : 17)
     
     Spline 
     Get() 
    __construct() 
    +
     

    Class usage and Overview
    Utility class to help construct an interpolated data points given an arbitrary number of data points. +

    +This class doesn't draw any graphs by itself it is only used to generate a new set of data points representing the smooth line from the input which are the control lines for the cubic spline. +

    +The principle of using this class is that you first create an instance of this class and giving it the X,Y values for your control points. +

    +You can then get back an interpolated smooth dataset by calling the Get() method. This method takeas as argument how many data points you want the interpolated graph to have. +

    +Technical note: The spline is constructed with natural 2:nd derivates at the start and end points of the line. +

      +


    Class Methods

    +

     

    + +Return the two new data vectors

    + + + + +
    ArgumentDefaultDescription
    +$num + + + +50 + +Number of data points
    + +

    Description:
    Return a data set representing the interpolated smooth curve passing through all the specified control points. 
    + +

    Example:

    +$spline = new Spline($xcontrol_points$ycontrol_points);
    list (
    $xdata$ydata) = $spline->Get(100);
    $lp = new LinePlot($ydata$xdata);
    +
    +

    +

    +

     

    + +Constructor. Create a new Spline object

    + + + + + + +
    ArgumentDefaultDescription
    +$xdata + + + Control points. X-coordinates
    +$ydata + + + Control points. Y-coordinates
    + +

    Description:
    Constructor. Create a new Spline object. The spline is determined by it's control points which are given with it's X and Y coordinates as arguments. +

    +Technical note: The spline is constructed with natural 2:nd derivates at the start and end point. 
    + +

    Example:

    +$spline = new Spline($xcontrol_points$ycontrol_points);
    list (
    $xdata$ydata) = $spline->Get(100);
    $lp = new LinePlot($ydata$xdata);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/StockPlot.html b/Societes/ric/jpgraph/docs/classref/StockPlot.html new file mode 100755 index 00000000..7692d19e --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/StockPlot.html @@ -0,0 +1,156 @@ +


    Class StockPlot Extends Plot
    +(Defined in: jpgraph_stock.php : 15)
     
     StockPlot  Plot 
     HideEndLines() 
    SetColor() 
    SetWidth() 
    __construct() 
    +
     HideLegend() 
    PreScaleSetup() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetLegend() 
    SetLineWeight() 
    +
     

    Class usage and Overview
    Create a stock chart graph, aka Candle-chart, aka Box-graph. +Each data point is represented by four values +(open,close,min,max) + +

      +


    Class Methods

    +

     

    + +Show horizontal mark lines at the end of min/max lines

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + + +true + +Flag true=show end lines
    + +

    Description:
    Show horizontal mark lines at the end of min/max lines. This is enabled by default. 
    + +

    Example:

    +$stock->HideEndLines(); + +

    +

    +

     

    + +Specify colors for the stock plot

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Line color for positive bars
    +$aColor1 + + + +'white' + +Fill color for positive bars
    +$aColor2 + + + +'darkred' + +Line color for negative bars
    +$aColor3 + + + +'darkred' + +Fill color for negative bars
    + +

    Description:
    Specify the colros for a stock chart. A positive bar is defined as a bar where close > open. A negative bar is defined as a bar where close < open. + +The positive line color is always used for the min/max lines. + +By default positve colors are black and white. Negative colors are 'red' and 'red'. + 
    + +

    Example:

    +$stockplot->SetColor('black','white','red','red'); + +

    +

    +

     

    + +Specify width for stock bars in pixels

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + + Width in pixels
    + +

    Description:
    Specify width for stock bars in pixels 
    + +

    Example:

    +$stockplot->SetWidth(8); + +

    +

    +

     

    + +Constructor for Stock plots

    + + + + + + +
    ArgumentDefaultDescription
    +$datay + + + No description available
    +$datax + + + +false + +X data array
    + +

    Description:
    Create a new Stock data plot. Each data value consists of 4 data points. (open,close,min,max) + +If the $ydata isn't an even number of data quadruples an error message will result. 
    + +

    Example:

    +$ydata = array( .... )
    $stockplot = new StockPlot($ydata);
    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/SuperScriptText.html b/Societes/ric/jpgraph/docs/classref/SuperScriptText.html new file mode 100755 index 00000000..51be2bb7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/SuperScriptText.html @@ -0,0 +1,228 @@ +


    Class SuperScriptText Extends Text
    +(Defined in: jpgraph.php : 3116)
     
     SuperScriptText  Text 
     FromReal() 
    GetFontHeight() 
    GetTextHeight() 
    GetWidth() 
    Set() 
    SetSuperFont() 
    __construct() 
    +
     Align() 
    Center() 
    GetFontHeight() 
    GetTextHeight() 
    GetWidth() 
    Hide() 
    ParagraphAlign() 
    Set() 
    SetAlign() 
    SetAngle() 
    SetBox() 
    SetColor() 
    SetCSIMTarget() 
    SetFont() 
    SetMargin() 
    SetOrientation() 
    SetParagraphAlign() 
    SetPos() 
    SetScalePos() 
    SetShadow() 
    SetWordWrap() 
    Show() 
    __construct() 
    +
     

    Class usage and Overview
    This class is responsible for formatting a text string which have a superscript at the end. This is used to generate scientific numbers. +

      +

    See also related classes:
    Text

     


    Class Methods

    +

     

    + +Create a scientific representation for a number

    + + + + + + +
    ArgumentDefaultDescription
    +$aVal + + + Real value to be used
    +$aPrecision + + + +2 + +Precision (number of digits) to be printed
    + +

    Description:
    Initialized the class from a real value to be used to present a scientific text string. + 
    +  
    See also:
    +

    Example:

    +$t = new SuperScriptText();
    $t->FromReal(12341.56);

    // Will print 1.23*10^4
    +
    +

    +

    +

     

    + +Hight of font (approximate the height of the text)

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    Return height of text. 
    +  
    See also:

    +

     

    + +Hight of text

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    Hight of text 
    +

    +

     

    + +Total width of text

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    Total width of text 
    +

    +

     

    + +Convert a floating point number to scientific notation

    + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + Mantissa
    +$aSuper + + + +'' + +Exponent
    + +

    Description:
    Specify the string manuall by specifyin mantissa and exponent. 
    +  
    See also:
    +

    Example:

    +$t = new SuperScriptText();
    $t->Set("1.34 10","5");
    // Will generate "1.34 10^5"
    +
    +

    +

    +

     

    + +Manually set font to be used for superscript

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFontFam + + + Font family
    +$aFontStyle + + + +FS_NORMAL + +Font style
    +$aFontSize + + + +8 + +Font size
    + +

    Description:
    Used to manually specify font to be used for superscript. If not specified it will be detemined automatically based on the font used for the mantissa. The font for the superscript will be roughly 70% of the size of the base font.  
    +

    +

     

    + +Constructor

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + +'' + +Mantissa text
    +$aSuper + + + +'' + +Suoerscript text
    +$aXAbsPos + + + +0 + +X-position (in pixels)
    +$aYAbsPos + + + +0 + +Y-position (in pixels)
    + +

    Description:
    Creates a new SUperSCriptClass 
    +  
    See also:


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/SymChar.html b/Societes/ric/jpgraph/docs/classref/SymChar.html new file mode 100755 index 00000000..fd301d7a --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/SymChar.html @@ -0,0 +1,39 @@ +


    Class SymChar
    +(Defined in: jpgraph_ttf.inc.php : 544)
     
     SymChar 
     Get() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +//=============================================================================// CLASS SymChar// Description: Code values for some commonly used characters that// normally isn't available directly on the keyboard, for example//

    + + + + + + +
    ArgumentDefaultDescription
    +$aSymb + + + No description available
    +$aCapital + + + +FALSE + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Text.html b/Societes/ric/jpgraph/docs/classref/Text.html new file mode 100755 index 00000000..affde977 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Text.html @@ -0,0 +1,767 @@ +


    Class Text
    +(Defined in: jpgraph_text.inc.php : 17)
     
     Text 
     Align() 
    Center() 
    GetFontHeight() 
    GetTextHeight() 
    GetWidth() 
    Hide() 
    ParagraphAlign() 
    Set() 
    SetAlign() 
    SetAngle() 
    SetBox() 
    SetColor() 
    SetCSIMTarget() 
    SetFont() 
    SetMargin() 
    SetOrientation() 
    SetParagraphAlign() 
    SetPos() 
    SetScalePos() 
    SetShadow() 
    SetWordWrap() 
    Show() 
    __construct() 
    +
     

    Class usage and Overview
    All text that is to be draw onto any graph is handled by this class. You create each text you want printed as an instance of this class. + +It is possible to adjust both font, color, alignment and paragraph alignment. + +If the text contains multiple lines (separated by "\n") the paragraph alignment determines how each line is formatted (i.e. left,center or right) +

      +


    Class Methods

    +

     

    + +Specify alignment for the text in relation to the x,y position for text

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aHAlign + + + Horizontal alignment
    +$aVAlign + + + +"top" + +Vertical alignment
    +$aParagraphAlign + + + +"" + +Paragraph alignment
    + +

    Description:
    This determines how the text's x,y position is to be interpretated. + +Valid horizontal alignments are +
      +
    • 'left' +
    • 'center' +
    • 'right' +
    + +Valid vertical position are +
      +
    • 'top' +
    • 'middle' or 'center' +
    • 'bottom' +
    + +Valid paragraph alignment +
      +
    • 'left' +
    • 'center' +
    • 'right' +

    +  
    See also:
    +

    Example:

    +$text = new Text();
    +
    +

    +

    +

     

    + +Center the text between left and right coordinates

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aLeft + + + Left corner X-coordinate
    +$aRight + + + Right corner X-coordinate
    +$aYAbsPos + + + The common Y-coodinate
    + +

    Description:
    Center the text between left and right coordinates on the same Y-coordinate 
    + +

    Example:

    +$txt->Center(50,150,75); + +

    +

    +

     

    + +Height of font

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    Return the height of the font used in the text. + +The difference between this method and the GetTextHeight() is that this method uses a predefined character to determine the height while GetTextHeight() uses the actual text in the string. + 
    +  
    See also:
    +

    Example:

    +$height $txt->GetFontHeight($graph->img) + +

    +

    +

     

    + +Return the height of the actual text in the text object

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    Return the height of the text in this object. + +The difference between this method and the GetFontHeight() is that that method uses a predefined character to determine the height while GetTextHeight() uses the actual text in the string. 
    +  
    See also:
    +

    Example:

    +$height $txt->GetTextHeight($graph->img);
    +
    +

    +

    +

     

    + +Get total width of text

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    Get total width of text 
    +  
    See also:
    +

    Example:

    +$width $txt->GetWidth($graph->img);
    +
    +

    +

    +

     

    + +Hide the text

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + + +true + +True=Hide text
    + +

    Description:
    The opposite of Show() 
    +  
    See also:
    +

    Example:

    +$txt->Hide(); + +

    +

    +

     

    + +Specifies the alignment for a multi line text

    + + + + +
    ArgumentDefaultDescription
    +$aAlign + + + Alignment for a multiline text
    + +

    Description:
    Specify the paragraph alignment for a multi line text. Each text line is separated by a "\n" character. + +Valid alignments are: +
      +
    • 'left' +
    • 'center' +
    • 'right' +
     
    +  
    See also:
    +

    Example:

    +$txt->Set("The first line\nSec line\nThird line");
    $txt->ParagraphAlign('center');

    // Will give the result:
    //
    //  The first line
    //     Sec line
    //    Third line
    +
    +

    +

    +

     

    + +Set text to be displayed

    + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + Text string
    + +

    Description:
    Set text to be displayed 
    + +

    Example:

    +$txt->Set('Hello world'); + +

    +

    +

     

    + +Alias for Align()

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aHAlign + + + Horizontal anchor point
    +$aVAlign + + + +"top" + +Vertical anchor point
    +$aParagraphAlign + + + +"" + +Paragraph alignment
    + +

    Description:
    See Align 
    +  
    See also:

    +

     

    + +Specify text angle

    + + + + +
    ArgumentDefaultDescription
    +$aAngle + + + Angle in degrees
    + +

    Description:
    Specify Orientation of text. If TTF fonts are used then the orientation can be a arbitrary angle. If the builtin fonts are used then only horizontal and vertical position can be used, i.e 0 or 90 degrees, 
    + +

    Example:

    +$txt->SetAngle(45); + +

    +

    +

     

    + +Set parameters for poossible frame around text

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFrameColor + + + +array(255,255,255) + +Color for text background
    +$aBorderColor + + + +array(0,0,0) + +Color for border around text
    +$aShadowColor + + + +false + +Color for shadow
    +$aCornerRadius + + + +4 + +Corner radius for rectangle
    +$aShadowWidth + + + +3 + +Drop shadow width
    + +

    Description:
    Specify parameters for background color, border and possible text drop shadow. +
    +If no shadow color is specified then no shadow will appear. +

    +To use the old style of stright corners specify a corner radius of 0. + + 
    +  

    See also:
    +

    Example:

    +$txt = new Text("Note: Simple textnote.\nWIth two lines");
    $txt->SetFont(FF_FONT1,FS_BOLD);
    $txt->Pos(0.5,0.97,'center','bottom');
    $txt->SetBox('yellow','black');
    $graph->AddText($txt);

    +
    +

    +

    +

     

    + +Set text color

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Specify color for text 
    + +

    Example:

    +$txt->SetColor('darkblue'); + +

    +

    +

     

    + +Specify CSIM Target for text

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aURITarget + + + No description available
    +$aAlt + + + +'' + +Alt-tag text
    +$aWinTarget + + + +'' + +No description available
    + +

    Description:
    Specify Client Side Image Target for text 
    + +

    Example:

    +$graph->title->SetCSIMTarget('mainpage.html','Go to main page');
    +
    +

    +

    +

     

    + +Specify font

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFamily + + + Font family
    +$aStyle + + + +FS_NORMAL + +Font style
    +$aSize + + + +10 + +Font size
    + +

    Description:
    Specify font family, size and style. Two major types of font families can be used, builtin bitmnapped fonts or TTF fonts. The builtin fonts have a fixed size which can't be altered. + +Valid styles are +
      +
    • FS_NORMAL +
    • FS_BOLD +
    • FS_ITALIC +
    • FS_BOLDITALIC +
    + +Valid values for the internal font families are +
      +
    • FF_FONT0, Internal font 1 (small font) +
    • FF_FONT1, Internal font 2, (Medium size) +
    • FF_FONT2, Internal font 3, (large size) +
    + +Note: FF_FONT0 only suppor font style FS_NORMAL + +The available TTF are by default +
      +
    • FF_ARIAL +
    • FF_TIMES, (Times Roman) +
    • FF_COURIER, (Courier new) +
    • FF_VERDANA, (Verdana) +
    • FF_BOOK, (Bookman) +
    • FF_HANDWRT, (Handwriting) +
    • FF_COMIC, (Sans Comic) +

    +  
    See also:
    +

    Example:

    +$txt->SetFont(FF_ARIALFS_BOLD14); + +

    +

    +

     

    + +Set the contect sensiive margin

    + + + + +
    ArgumentDefaultDescription
    +$aMarg + + + Margin in pixels
    + +

    Description:
    Specify a context sensitive margin for the text. Depending on in which context the text is used the margin will be interpretated accordingly. 
    + +

    Example:

    +// Start further away from the top of graph
    $graph->title->SetMargin(15); +
    +

    +

    +

     

    + +Deprecated. Use SetAngle instead. Specify text angle

    + + + + +
    ArgumentDefaultDescription
    +$aDirection + + + +0 + +Orientation of text in degrees
    + +

    Description:
    Deprecated. Use SetAngle() instead. +Specify Orientation of text. If TTF fonts are used then the orientation can be a arbitrary angle. If the builtin fonts are used then only horizontal and vertical position can be used, i.e 0 or 90 degrees, 
    + +

    Example:

    +$txt->SetOrientation(90); // Vertical text + +

    +

    +

     

    + +Specifies the alignment for a multi line text

    + + + + +
    ArgumentDefaultDescription
    +$aAlign + + + Horizontal alignment
    + +

    Description:
    Determines how a multi-line text paragraph will be formatted. Each line in the paragraph will be treated individually. Allowed values are +
      +
    1. "center" +
    2. "left" +
    3. "right" +
    + +Note: Paragraph alignment is only applicable to horizontal text, i.e. angle = 0 . For paragraphs at an angle the alignbment will always be "left". + 
    + +

    Example:

    +$graph->title->Set("Multi line\ntext !");
    $graph->title->SetParagraphAlign('right');

    // Default for title is "center"
    +
    +

    +

    +

     

    + +Alias for Pos()

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aXAbsPos + + + X position
    +$aYAbsPos + + + Y position
    +$aHAlign + + + Horizontal align
    +$aVAlign + + + Vertical align
    + +

    Description:
    Alias for Pos() 
    +  
    See also:
    +

    Example:

    +$txt->Pos(100,150,'center'); + +

    +

    +

     

    + +Specify the position of the text using the plot scale positions

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + X-position
    +$aY + + + Y-position
    + +

    Description:
    Specify the position of the text using the plot scale positions. The Y position is taken to be the Y axis. It is not possible to use Y2 scale to specify the position. 
    + +

    Example:

    +$txt = new Text();
    $txt->SetScalePos(27.3278.9); +
    +

    +

    +

     

    + +Add a drop shadow to boxed text

    + + + + + + +
    ArgumentDefaultDescription
    +$aShadowColor + + + +'gray' + +Shadow color
    +$aShadowWidth + + + +3 + +Shadow width (in pixels)
    + +

    Description:
    If the text has been boxed (by call to SetBox()) then you can easily add a drop shadow by just calling this method. +

    +Note: You can also specify the shadow directly in the SetBox() call. This method was added to make Text more like other graph objects which have a SetShadow() method. 
    +  

    See also:
    +

    Example:

    +$txt = new Text("Note: Simple textnote.\nWIth two lines");
    $txt->SetFont(FF_FONT1,FS_BOLD);
    $txt->Pos(0.5,0.97,'center','bottom');
    $txt->SetBox('yellow','black');
    $txt->SetShadow();
    $graph->AddText($txt);
    +
    +

    +

    +

     

    + +Specify a maximum line length

    + + + + +
    ArgumentDefaultDescription
    +$aCol + + + Number of chars in column
    + +

    Description:
    Specify a maximum line length. This method will insert suitable line breaks to ensure thateach line never exeeds the specified number of characters. The method will not break words. 
    + +

    Example:

    +$txt = new Text('A suitable long text which will be broken');
    $txt->SetWordWrap(15); +
    +

    +

    +

     

    + +Show or hide the text string

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + + +true + +True=Display text
    + +

    Description:
    Show or hide the text string. By default the text string is turned off. So a call to Show() is becessary for the text string to be displayed in the graph. + 
    + +

    Example:

    +$txt->Show();
    +
    +

    +

    +

     

    + +Constructor. Create new text at absolute pixel coordinates

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + Text string
    +$aXAbsPos + + + X-coordinate
    +$aYAbsPos + + + Y-coordinate
    + +

    Description:
    Create a new object to repesent a text string that is to be displayed on the graph. + +If the position is not specified when the object is created it can later be specified with a call to the Pos() method. + +The default alignment is to interpret the x,y coordinate as being the lower left corner of the bounding box for the text string. + +Note. The texts are hidden by default and you must remember toi call Show() to make the text appear in the image. 
    +
    +
    Returns
    An istance of class Text
    +  
    See also:
    +

    Example:

    +// Possible creations of text objects

    // Case 1. Text and position is specified later
    $txt = new Text();

    // Case 2. Position is specified later
    $txt = new Text('Hello world');

    // Case 3. Full specification
    $txt = new Text('Hello world',100,150);

    // A more real life example
    $txt = new Text("Note: Simple textnote.\nWIth two lines");
    $txt->SetFont(FF_FONT1,FS_BOLD);
    $txt->Pos(0.5,0.97,'center','bottom');
    $txt->SetBox('yellow','black');
    $graph->AddText($txt);



    +
    +

    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/TextProperty.html b/Societes/ric/jpgraph/docs/classref/TextProperty.html new file mode 100755 index 00000000..b46e6981 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/TextProperty.html @@ -0,0 +1,200 @@ +


    +(Defined in: jpgraph_gantt.php : 1547)
     
     TextProperty 
     Align() 
    Set() 
    SetAlign() 
    SetColor() 
    SetFont() 
    Show() 
    +
     

    Class usage and Overview
    This is very similair to Text but this is only used as an internal helper class in Gantt chart. In comparison with text it has the added funtionality that it can handle tabs. + +In the next version of JpGraph the extra functionality that this class has should be added to the real class Text() to make the class more orthogonal. + +Since this is just an internal helper class it has its justified position though. This was oroginally considered a very experimental text class and it made sence to compartmetn thath functionlity in a separate class to the stnadard Text() class. +

      +

    See also related classes:
    Text

     


    Class Methods

    +

     

    + +Specify vertical and horizontal alignment

    + + + + + + +
    ArgumentDefaultDescription
    +$aHAlign + + + Horizontal alignment
    +$aVAlign + + + +"bottom" + +Vertical alignment
    + +

    Description:
    Specify the anchor point fo the text. The anchor point determines how the texts x,y positions should be interpretated. + 
    +

    +

     

    + +Specify text string

    + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + Text string
    + +

    Description:
    Specify text string 
    + +

    Example:

    +$graph->title->Set("Overview for year 2002");
    +
    +

    +

    +

     

    + +Specify alignment for text

    + + + + + + +
    ArgumentDefaultDescription
    +$aHAlign + + + Horizontal alignment
    +$aVAlign + + + +"bottom" + +Vertical alignment
    + +

    Description:
    Specify alignment for text. Same as TextProperty::Align() 
    +  
    See also:

    +

     

    + +Set text color

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + Color
    + +

    Description:
    Specify text color 
    + +

    Example:

    +SetColor('red:0.6'); + +

    +

    +

     

    + +Specify font

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFFamily + + + Font family
    +$aFStyle + + + +FS_NORMAL + +Font style
    +$aFSize + + + +10 + +Font size
    + +

    Description:
    Specify font family, size and style. Two major types of font families can be used, builtin bitmnapped fonts or TTF fonts. The builtin fonts have a fixed size which can't be altered. + +Valid styles are +
      +
    • FS_NORMAL +
    • FS_BOLD +
    • FS_ITALIC +
    • FS_BOLDITALIC +
    + +Valid values for the internal font families are +
      +
    • FF_FONT0, Internal font 1 (small font) +
    • FF_FONT1, Internal font 2, (Medium size) +
    • FF_FONT2, Internal font 3, (large size) +
    + +Note: FF_FONT0 only suppor font style FS_NORMAL + +The available TTF are by default +
      +
    • FF_ARIAL +
    • FF_TIMES, (Times Roman) +
    • FF_COURIER, (Courier new) +
    • FF_VERDANA, (Verdana) +
    • FF_BOOK, (Bookman) +
    • FF_HANDWRT, (Handwriting) +
    • FF_COMIC, (Sans Comic) +

    +  
    See also:
    +

    Example:

    +SetFont(FF_ARIAL,FS_NORMAL,12) + +

    +

    +

     

    + +Unhide/hide the text

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + + +true + +True=Show text
    + +

    Description:
    Specify if the text should be displayed or hidden 
    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/Ticks.html b/Societes/ric/jpgraph/docs/classref/Ticks.html new file mode 100755 index 00000000..c5ede144 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/Ticks.html @@ -0,0 +1,292 @@ +


    Class Ticks
    +(Defined in: jpgraph.php : 3914)
     
     Ticks 
     SetColor() 
    SetFormatCallback() 
    SetLabelFormat() 
    SetSide() 
    SetSize() 
    SetWeight() 
    SupressFirst() 
    SupressLast() 
    SupressMinorTickMarks() 
    SupressTickMarks() 
    SupressZeroLabel() 
    +
     

    Class usage and Overview
    This is the abstract base class for ticks. Specifying the common signature for both linear and logartihmic ticks. + +Ticks are normally a property of the scale and can be accessed via the $graph->scale->ticks property. +

      +


    Class Methods

    +

     

    + +Set color for tick marks

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajorColor + + + Major tick mark color
    +$aMinorColor + + + +'' + +Minor tick mark color
    + +

    Description:
    Specify tick mark colors. If no minor tick mark color is specified then it will be the same as the major tick marks color. 
    + +

    Example:

    +$graph->yaxis->scale->ticks->SetColor('red','black');
    +
    +

    +

    +

     

    + +Specify a format callback function for labels

    + + + + +
    ArgumentDefaultDescription
    +$aCallbackFuncName + + + name of function
    + +

    Description:
    Specifies a callback function which will be called and given each tick label in turn as the argument. The callback function is supposed to return a proper formatted label to be displayed. + +Note: There is a shortcut to this method through the Axis::SetLabelFormatCallback. + +Note 2: The PHP function number_format() is often usefull in callback functions. + 
    +  
    See also:
    +

    Example:

    +// Callback function for Y-scale. Use money format with
    // a ',' to separate 1000:s
    function yScaleCallback($aVal) {
        return 
    number_format($aVal);
    }


    // Short for $graph->yaxis->scale->ticks->SetFormatCallback()
    $graph->yaxis->SetLabelFormatCallback('yScaleCallback');

    +
    +

    +

    +

     

    + +Set format string for automatic labels

    + + + + + + +
    ArgumentDefaultDescription
    +$aFormatString + + + Specify a printf() style format string
    +$aDate + + + +FALSE + +No description available
    + +

    Description:
    Specify a printf() style format string. + +Note: Can also be called trough the shortcut Axis::SetLabelFormatString() + 
    +  
    See also:
    +

    Example:

    +$graph->yaxis->SetLabelFormatString("%-02.1f"); + +

    +

    +

     

    + +Specify side of axis for ticks

    + + + + +
    ArgumentDefaultDescription
    +$aSide + + + Side
    + +

    Description:
    Synonym for SetDirection(). +Specify what side of the axis the tick marks should be drawn on. For Y -axis the possible directions are + +
      +
    • SIDE_LEFT +
    • SIDE_RIGHT +
    + +and for X-axis the possible parameters are + +
      +
    • SIDE_UP +
    • SIDE_DOWN +
     
    +  
    See also:
    +

    Example:

    +$graph->xaxis->scale->ticks->SetSide(SIDE_UP);
    +
    +

    +

    +

     

    + +Specify absolute size of tick marks in pixels

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajSize + + + Major tick size
    +$aMinSize + + + +3 + +Minor tick size
    + +

    Description:
    Specify absolute size of tick marks in pixels 
    + +

    Example:

    +$graph->xaxis->scale->ticks->SetSize(8,3); + +

    +

    +

     

    + +Specify width of tick marks

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + + Width (in pixels)
    + +

    Description:
    Specify width of tick marks 
    + +

    Example:

    +$graph->xaxis->scale->ticks->SetWeight(2); + +

    +

    +

     

    + +Hide the first tick mark

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + + +true + +True=Hide the vbery first tick mark on the axis
    + +

    Description:
    Hide the first tick mark on the axis. 
    +  
    See also:
    +

    Example:

    +$graph->xaxis->scale->ticks->SupressFirst();
    +
    +

    +

    +

     

    + +Hide the last tick mark

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + + +true + +True=Hide the last tick mark
    + +

    Description:
    Hide the last tick mark on the axis 
    +  
    See also:

    +

     

    + +Hide all minor tick marks

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + + +true + +True=Hide minor tick marks
    + +

    Description:
    Hide all minor tick marks 
    +

    +

     

    + +Hide major tick marks

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + + +true + +True=Hide major tick marks
    + +

    Description:
    Hide major tick marks 
    +  
    See also:

    +

     

    + +Don't display the first zero label

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + +true + +True=Hide zero-label
    + +

    Description:
    Hide any label with numeric value == 0.0 
    +


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/WindroseGraph.html b/Societes/ric/jpgraph/docs/classref/WindroseGraph.html new file mode 100755 index 00000000..5a66fe01 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/WindroseGraph.html @@ -0,0 +1,207 @@ +


    Class WindroseGraph Extends Graph
    +(Defined in: jpgraph_windrose.php : 1436)
     
     WindroseGraph  Graph 
     Add() 
    AddText() 
    SetColor() 
    Stroke() 
    StrokeIcons() 
    StrokeTexts() 
    __construct() 
    +
     Add() 
    AddBand() 
    AddLine() 
    AddText() 
    AddY() 
    AddY2() 
    CheckCSIMCache() 
    GetCSIMImgHTML() 
    GetHTMLImageMap() 
    Set3DPerspective() 
    Set90AndMargin() 
    SetAlphaBlending() 
    SetAngle() 
    SetAxisLabelBackground() 
    SetAxisStyle() 
    SetBackgroundCFlag() 
    SetBackgroundCountryFlag() 
    SetBackgroundGradient() 
    SetBackgroundImage() 
    SetBackgroundImageMix() 
    SetBackgroundImagePos() 
    SetBox() 
    SetClipping() 
    SetColor() 
    SetCSIMImgAlt() 
    SetFrame() 
    SetFrameBevel() 
    SetGridDepth() 
    SetIconDepth() 
    SetImgFormat() 
    SetMargin() 
    SetMarginColor() 
    SetScale() 
    SetShadow() 
    SetTextScaleAbsCenterOff() 
    SetTickDensity() 
    SetTitleBackground() 
    SetTitleBackgroundFillStyle() 
    SetUserFont() 
    SetUserFont1() 
    SetUserFont2() 
    SetUserFont3() 
    SetY2OrderBack() 
    SetY2Scale() 
    SetYDeltaDist() 
    SetYScale() 
    Stroke() 
    StrokeCSIM() 
    StrokeCSIMImage() 
    StrokeFrameBackground() 
    StrokeStore() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +//---------------// PUBLIC METHODS

    + + + + +
    ArgumentDefaultDescription
    +$aObj + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + No description available
    +$aToY2 + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$c + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Method description

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + + +"" + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +

    +
    + +

    Description:
    No description available.

    +

     

    + +//============================================================// CLASS WindroseGraph//============================================================

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$width + + + +300 + +No description available
    +$height + + + +200 + +No description available
    +$cachedName + + + +"" + +No description available
    +$timeout + + + +0 + +No description available
    +$inline + + + +1 + +No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/WindrosePlot.html b/Societes/ric/jpgraph/docs/classref/WindrosePlot.html new file mode 100755 index 00000000..775c06da --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/WindrosePlot.html @@ -0,0 +1,871 @@ +


    +(Defined in: jpgraph_windrose.php : 385)
     
     WindrosePlot 
     FixupIndexes() 
    getHeight() 
    getWidth() 
    LayoutSize() 
    NormAngle() 
    SetAntiAlias() 
    SetAutoScaleAngle() 
    SetBox() 
    SetCenterPos() 
    SetCenterSize() 
    SetColor() 
    SetCompassLabels() 
    SetDataKeyEncoding() 
    SetFont() 
    SetFontColor() 
    SetGridColor() 
    SetGridWeight() 
    SetLabelFormat() 
    SetLabelMargin() 
    SetLabelPosition() 
    SetLabels() 
    SetPos() 
    SetRadialColors() 
    SetRadialGridStyle() 
    SetRadialStyles() 
    SetRadialWeights() 
    SetRangeColors() 
    SetRanges() 
    SetRangeStyle() 
    SetRangeWeights() 
    SetSize() 
    SetType() 
    SetZCircleSize() 
    Stroke() 
    _StrokeFreeRose() 
    _StrokeLegend() 
    _StrokeRegularRose() 
    _StrokeWindLeg() 
    _ThickCircle() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +// Translate potential string specified compass labels to their// corresponding index.

    + + + + + + +
    ArgumentDefaultDescription
    +$aDataArray + + + No description available
    +$num + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Make sure that the width of the legend fits

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// We want the non scaled original radius

    + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Dummy method to make window plots have the same signature as the// layout classes since windrose plots are "leaf" classes in the hierarchy

    +
    + +

    Description:
    No description available.

    +

     

    + +// Some heuristics to have some preferred positions

    + + + + +
    ArgumentDefaultDescription
    +$a + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Draw the text under the legend

    + + + + +
    ArgumentDefaultDescription
    +$aIsRegRose + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + + +'black' + +No description available
    +$aWeight + + + +1 + +No description available
    +$aStyle + + + +'solid' + +No description available
    +$aShow + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// Alias for SetPos()

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + No description available
    +$aY + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aLabels + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aEncoding + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFFam + + + No description available
    +$aFStyle + + + +FS_NORMAL + +No description available
    +$aFSize + + + +10 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor1 + + + No description available
    +$aColor2 + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aGrid1 + + + +1 + +No description available
    +$aGrid2 + + + +2 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aLblFormat + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aMarg + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aPos + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aLabels + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + + No description available
    +$aY + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColors + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aStyles + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aWeights + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aLegColors + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aRanges + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aWeights + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aType + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Alias for SetCenterSize

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Add an extra margin of 50% the font size//$maxh += round($this->iFontSize*$scaling * 0.5) ;

    + + + + +
    ArgumentDefaultDescription
    +$aGraph + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$dblImg + + + No description available
    +$value + + + No description available
    +$scaling + + + No description available
    +$xc + + + No description available
    +$yc + + + No description available
    +$r + + + No description available
    +$ri + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// If less than 1 px long then we assume this has been caused by rounding problems// and should not be stroked

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    +$x + + + No description available
    +$y + + + No description available
    +$scaling + + + +1 + +No description available
    +$aReturnWidth + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$dblImg + + + No description available
    +$value + + + No description available
    +$scaling + + + No description available
    +$xc + + + No description available
    +$yc + + + No description available
    +$r + + + No description available
    +$ri + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    +$xc + + + No description available
    +$yc + + + No description available
    +$a + + + No description available
    +$ri + + + No description available
    +$r + + + No description available
    +$weight + + + No description available
    +$color + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    +$aXC + + + No description available
    +$aYC + + + No description available
    +$aRad + + + No description available
    +$aWeight + + + +2 + +No description available
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +//===================================================// CLASS WindrosePlot//===================================================

    + + + + +
    ArgumentDefaultDescription
    +$aData + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/WindrosePlotScale.html b/Societes/ric/jpgraph/docs/classref/WindrosePlotScale.html new file mode 100755 index 00000000..5847776c --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/WindrosePlotScale.html @@ -0,0 +1,371 @@ +


    +(Defined in: jpgraph_windrose.php : 47)
     
     WindrosePlotScale 
     AutoScale() 
    GetMax() 
    GetNumCirc() 
    Hide() 
    RelTranslate() 
    Set() 
    SetAngle() 
    SetFont() 
    SetFontColor() 
    SetLabelAlign() 
    SetLabelFillColor() 
    SetLabelFormat() 
    SetMaxValue() 
    SetZeroLabel() 
    SetZFont() 
    SetZFontColor() 
    StrokeLabels() 
    __construct() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

    + +// Remember that user has specified interval so don't// do autoscaling

    + + + + + + +
    ArgumentDefaultDescription
    +$aRadius + + + No description available
    +$aMinDist + + + +30 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// Return max of all leg values

    +
    + +

    Description:
    No description available.

    +

     

    + +// Return number of grid circles

    +
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + + +true + +No description available
    + +

    Description:
    No description available.

    +

     

    + +// Translate a Leg value to radius distance

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aVal + + + No description available
    +$r + + + No description available
    +$ri + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Set step size for circular grid

    + + + + + + +
    ArgumentDefaultDescription
    +$aMax + + + No description available
    +$aDelta + + + +null + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aAngle + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFontFamily + + + No description available
    +$aFontStyle + + + +FS_NORMAL + +No description available
    +$aFontSize + + + +10 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aAlign + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + +
    ArgumentDefaultDescription
    +$aBkgColor + + + No description available
    +$aBorderColor + + + +false + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFmt + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +// Never return less than 1 circles

    + + + + +
    ArgumentDefaultDescription
    +$aMax + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aTxt + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFontFamily + + + No description available
    +$aFontStyle + + + +FS_NORMAL + +No description available
    +$aFontSize + + + +10 + +No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aImg + + + No description available
    +$xc + + + No description available
    +$yc + + + No description available
    +$ri + + + No description available
    +$rr + + + No description available
    + +

    Description:
    No description available.

    +

     

    + +//===================================================// CLASS WindrosePlotScale//===================================================

    + + + + +
    ArgumentDefaultDescription
    +$aData + + + No description available
    + +

    Description:
    No description available.


    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/class_toc.html b/Societes/ric/jpgraph/docs/classref/class_toc.html new file mode 100755 index 00000000..c9b4d637 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/class_toc.html @@ -0,0 +1,941 @@ + + + + Class index + JpGraph

    +
    1. AccBarPlot
    +    1.1 Max
    +    1.2 Min
    +    1.3 __construct
    +2. AccLinePlot
    +    2.1 Max
    +    2.2 Min
    +    2.3 SetInterpolateMode
    +    2.4 __construct
    +3. AntiSpam
    +    3.1 Rand
    +    3.2 Set
    +    3.3 Stroke
    +    3.4 __construct
    +4. AxisPrototype
    +    4.1 Hide
    +    4.2 HideFirstLastLabel
    +    4.3 HideFirstTickLabel
    +    4.4 HideLabels
    +    4.5 HideLastTickLabel
    +    4.6 HideLine
    +    4.7 HideTicks
    +    4.8 HideZeroLabel
    +    4.9 SetColor
    +    4.10 SetFont
    +    4.11 SetLabelAlign
    +    4.12 SetLabelAngle
    +    4.13 SetLabelFormat
    +    4.14 SetLabelFormatCallback
    +    4.15 SetLabelFormatString
    +    4.16 SetLabelMargin
    +    4.17 SetLabelSide
    +    4.18 SetMajTickPositions
    +    4.19 SetPos
    +    4.20 SetPosAbsDelta
    +    4.21 SetTextLabelInterval
    +    4.22 SetTextTickInterval
    +    4.23 SetTickLabels
    +    4.24 SetTickPositions
    +    4.25 SetTickSide
    +    4.26 SetTickSize
    +    4.27 SetTitle
    +    4.28 SetTitleMargin
    +    4.29 SetTitleSide
    +    4.30 SetWeight
    +    4.31 __construct
    +5. BarPlot
    +    5.1 RotatePattern
    +    5.2 SetAbsWidth
    +    5.3 SetAlign
    +    5.4 SetFillColor
    +    5.5 SetFillGradient
    +    5.6 SetNoFill
    +    5.7 SetPattern
    +    5.8 SetShadow
    +    5.9 SetValuePos
    +    5.10 SetWidth
    +    5.11 SetYBase
    +    5.12 SetYMin
    +    5.13 __construct
    +6. Bezier
    +    6.1 Get
    +    6.2 __construct
    +7. BoxPlot
    +    7.1 SetMedianColor
    +    7.2 __construct
    +8. CanvasGraph
    +    8.1 InitFrame
    +    8.2 Stroke
    +    8.3 __construct
    +9. CanvasRectangleText
    +    9.1 ParagraphAlign
    +    9.2 Pos
    +    9.3 Set
    +    9.4 SetAutoMargin
    +    9.5 SetColor
    +    9.6 SetCornerRadius
    +    9.7 SetFillColor
    +    9.8 SetFont
    +    9.9 SetFontColor
    +    9.10 SetPos
    +    9.11 SetShadow
    +    9.12 SetTxt
    +    9.13 Stroke
    +    9.14 __construct
    +10. CanvasScale
    +    10.1 Set
    +    10.2 Translate
    +    10.3 TranslateX
    +    10.4 TranslateY
    +    10.5 __construct
    +11. ColorFactory
    +    11.1 getColor
    +12. Contour
    +    12.1 adjustDataPointValues
    +    12.2 CalculateColors
    +    12.3 determineIsobarEdgeCrossings
    +    12.4 getCrossingCoord
    +    12.5 getIsobars
    +    12.6 getMinMaxVal
    +    12.7 isobarHCrossing
    +    12.8 isobarVCrossing
    +    12.9 resetEdgeMatrices
    +    12.10 SetInvert
    +    12.11 UseHighContrastColor
    +    12.12 __construct
    +13. ContourPlot
    +    13.1 Invertlegend
    +    13.2 Legend
    +    13.3 Max
    +    13.4 Min
    +    13.5 PreScaleSetup
    +    13.6 SetInvert
    +    13.7 SetIsobarColors
    +    13.8 ShowLegend
    +    13.9 Stroke
    +    13.10 UseHighContrastColor
    +    13.11 __construct
    +14. DateLocale
    +    14.1 GetDayAbb
    +    14.2 GetLongMonthName
    +    14.3 GetMonth
    +    14.4 GetShortDay
    +    14.5 GetShortMonth
    +    14.6 GetShortMonthName
    +    14.7 Set
    +    14.8 __construct
    +15. DateScale
    +    15.1 AdjustForDST
    +    15.2 SetDateAlign
    +    15.3 SetDateFormat
    +    15.4 SetTimeAlign
    +16. DateScaleUtils
    +    16.1 doDaily
    +    16.2 doMonthly
    +    16.3 doWeekly
    +    16.4 doYearly
    +    16.5 GetAutoTicks
    +    16.6 GetTicks
    +    16.7 GetTicksFromMinMax
    +    16.8 UseWeekFormat
    +17. DigitalLED74
    +    17.1 SetSupersampling
    +    17.2 Stroke
    +    17.3 StrokeNumber
    +    17.4 __construct
    +18. DisplayValue
    +    18.1 ApplyFont
    +    18.2 HideZero
    +    18.3 SetAlign
    +    18.4 SetAngle
    +    18.5 SetColor
    +    18.6 SetFont
    +    18.7 SetFormat
    +    18.8 SetFormatCallback
    +    18.9 SetMargin
    +    18.10 Show
    +    18.11 __construct
    +19. ErrMsgText
    +    19.1 __construct
    +20. ErrorLinePlot
    +    20.1 __construct
    +21. ErrorPlot
    +    21.1 __construct
    +22. FieldArrow
    +    22.1 SetColor
    +    22.2 SetSize
    +23. FieldPlot
    +    23.1 SetCallback
    +    23.2 __construct
    +24. Footer
    +    24.1 SetMargin
    +    24.2 SetTimer
    +25. FuncGenerator
    +    25.1 E
    +    25.2 __construct
    +26. GanttActivityInfo
    +    26.1 Hide
    +    26.2 SetBackgroundColor
    +    26.3 SetColor
    +    26.4 SetColTitles
    +    26.5 SetColumnMargin
    +    26.6 SetFont
    +    26.7 SetFontColor
    +    26.8 SetHeaderAlign
    +    26.9 SetStyle
    +    26.10 Show
    +27. GanttBar
    +    27.1 SetBreakStyle
    +    27.2 SetColor
    +    27.3 SetFillColor
    +    27.4 SetHeight
    +    27.5 SetPattern
    +    27.6 SetShadow
    +    27.7 __construct
    +28. GanttGraph
    +    28.1 Add
    +    28.2 CreateSimple
    +    28.3 SetDateRange
    +    28.4 SetLabelVMarginFactor
    +    28.5 SetSimpleFont
    +    28.6 SetSimpleStyle
    +    28.7 SetVMarginFactor
    +    28.8 SetZoomFactor
    +    28.9 ShowHeaders
    +    28.10 Stroke
    +    28.11 StrokeTexts
    +    28.12 __construct
    +29. GanttPlotObject
    +    29.1 SetCaptionMargin
    +    29.2 SetConstrain
    +    29.3 SetCSIMAlt
    +    29.4 SetCSIMTarget
    +    29.5 SetLabelLeftMargin
    +30. GanttScale
    +    30.1 SetDateLocale
    +    30.2 SetRange
    +    30.3 SetTableTitleBackground
    +    30.4 SetVertLayout
    +    30.5 SetWeekStart
    +    30.6 UseWeekendBackground
    +31. GanttVLine
    +    31.1 SetDayOffset
    +    31.2 SetTitleMargin
    +    31.3 SetWeight
    +    31.4 __construct
    +32. Graph
    +    32.1 Add
    +    32.2 AddBand
    +    32.3 AddLine
    +    32.4 AddText
    +    32.5 AddY
    +    32.6 AddY2
    +    32.7 CheckCSIMCache
    +    32.8 GetCSIMImgHTML
    +    32.9 GetHTMLImageMap
    +    32.10 Set3DPerspective
    +    32.11 Set90AndMargin
    +    32.12 SetAlphaBlending
    +    32.13 SetAngle
    +    32.14 SetAxisLabelBackground
    +    32.15 SetAxisStyle
    +    32.16 SetBackgroundCFlag
    +    32.17 SetBackgroundCountryFlag
    +    32.18 SetBackgroundGradient
    +    32.19 SetBackgroundImage
    +    32.20 SetBackgroundImageMix
    +    32.21 SetBackgroundImagePos
    +    32.22 SetBox
    +    32.23 SetClipping
    +    32.24 SetColor
    +    32.25 SetCSIMImgAlt
    +    32.26 SetFrame
    +    32.27 SetFrameBevel
    +    32.28 SetGridDepth
    +    32.29 SetIconDepth
    +    32.30 SetImgFormat
    +    32.31 SetMargin
    +    32.32 SetMarginColor
    +    32.33 SetScale
    +    32.34 SetShadow
    +    32.35 SetTextScaleAbsCenterOff
    +    32.36 SetTickDensity
    +    32.37 SetTitleBackground
    +    32.38 SetTitleBackgroundFillStyle
    +    32.39 SetUserFont
    +    32.40 SetUserFont1
    +    32.41 SetUserFont2
    +    32.42 SetUserFont3
    +    32.43 SetY2OrderBack
    +    32.44 SetY2Scale
    +    32.45 SetYDeltaDist
    +    32.46 SetYScale
    +    32.47 Stroke
    +    32.48 StrokeCSIM
    +    32.49 StrokeCSIMImage
    +    32.50 StrokeFrameBackground
    +    32.51 StrokeStore
    +    32.52 __construct
    +33. GraphTabTitle
    +    33.1 Set
    +    33.2 SetColor
    +    33.3 SetCorner
    +    33.4 SetFillColor
    +    33.5 SetTabAlign
    +    33.6 SetWidth
    +34. Grid
    +    34.1 SetColor
    +    34.2 SetFill
    +    34.3 SetLineStyle
    +    34.4 SetWeight
    +    34.5 Show
    +35. GroupBarPlot
    +    35.1 GroupBarPlot
    +36. GTextTable
    +    36.1 Init
    +    36.2 MergeCells
    +    36.3 MergeCol
    +    36.4 MergeRow
    +    36.5 Set
    +    36.6 SetAlign
    +    36.7 SetAnchorPos
    +    36.8 SetBorder
    +    36.9 SetCellAlign
    +    36.10 SetCellColor
    +    36.11 SetCellCountryFlag
    +    36.12 SetCellCSIMTarget
    +    36.13 SetCellFillColor
    +    36.14 SetCellFont
    +    36.15 SetCellImage
    +    36.16 SetCellImageConstrain
    +    36.17 SetCellNumberFormat
    +    36.18 SetCellPadding
    +    36.19 SetCellTextOrientation
    +    36.20 SetColAlign
    +    36.21 SetColColor
    +    36.22 SetColFillColor
    +    36.23 SetColFont
    +    36.24 SetColGrid
    +    36.25 SetColImage
    +    36.26 SetColNumberFormat
    +    36.27 SetColor
    +    36.28 SetColPadding
    +    36.29 SetColTextOrientation
    +    36.30 SetCSIMTarget
    +    36.31 SetFillColor
    +    36.32 SetFont
    +    36.33 SetGrid
    +    36.34 SetImage
    +    36.35 SetMinColWidth
    +    36.36 SetMinRowHeight
    +    36.37 SetNumberFormat
    +    36.38 SetPadding
    +    36.39 SetPos
    +    36.40 SetRowAlign
    +    36.41 SetRowColor
    +    36.42 SetRowFillColor
    +    36.43 SetRowFont
    +    36.44 SetRowGrid
    +    36.45 SetRowImage
    +    36.46 SetRowNumberFormat
    +    36.47 SetRowPadding
    +    36.48 SetRowTextOrientation
    +    36.49 SetScalePos
    +    36.50 SetTextOrientation
    +    36.51 toString
    +    36.52 __construct
    +37. HeaderProperty
    +    37.1 SetBackgroundColor
    +    37.2 SetFont
    +    37.3 SetFontColor
    +    37.4 SetFormatString
    +    37.5 SetFrameColor
    +    37.6 SetFrameWeight
    +    37.7 SetInterval
    +    37.8 SetIntervall
    +    37.9 SetLabelFormatString
    +    37.10 SetStyle
    +    37.11 SetSundayFontColor
    +    37.12 SetTitleVertMargin
    +    37.13 SetWeekendColor
    +38. HorizontalGridLine
    +    38.1 SetRowFillColor
    +    38.2 SetStart
    +    38.3 Show
    +39. IconImage
    +    39.1 SetAlign
    +    39.2 __construct
    +40. IconPlot
    +    40.1 CreateFromString
    +    40.2 DoLegend
    +    40.3 GetAbsHeight
    +    40.4 GetLineNbr
    +    40.5 GetMaxDate
    +    40.6 GetMinDate
    +    40.7 GetWidthHeight
    +    40.8 Max
    +    40.9 Min
    +    40.10 PreStrokeAdjust
    +    40.11 SetAnchor
    +    40.12 SetCountryFlag
    +    40.13 SetMix
    +    40.14 SetPos
    +    40.15 SetScale
    +    40.16 SetScalePos
    +    40.17 StrokeMargin
    +    40.18 StrokeWithScale
    +    40.19 _Stroke
    +    40.20 __construct
    +41. Image
    +    41.1 RoundedRectangle
    +    41.2 SetAlphaBlending
    +    41.3 SetAntiAliasing
    +    41.4 SetCanvasColor
    +    41.5 SetExpired
    +    41.6 SetImgFormat
    +    41.7 SetMargin
    +    41.8 SetQuality
    +    41.9 SetTransparent
    +42. ImgTrans
    +    42.1 Skew3D
    +    42.2 _Skew3D
    +    42.3 _TransHor3D
    +    42.4 _TransVert3D
    +    42.5 __construct
    +43. JpGraphException
    +    43.1 Stroke
    +    43.2 _toString
    +    43.3 __construct
    +44. JpGraphExceptionL
    +    44.1 __construct
    +45. LayoutHor
    +    45.1 getHeight
    +    45.2 getWidth
    +    45.3 Stroke
    +    45.4 __construct
    +46. LayoutRect
    +    46.1 getHeight
    +    46.2 getWidth
    +    46.3 SetCenterPos
    +    46.4 Stroke
    +    46.5 __construct
    +47. LayoutVert
    +    47.1 getHeight
    +    47.2 getWidth
    +    47.3 Stroke
    +    47.4 __construct
    +48. Legend
    +    48.1 Hide
    +    48.2 Pos
    +    48.3 SetAbsPos
    +    48.4 SetColor
    +    48.5 SetColumns
    +    48.6 SetFillColor
    +    48.7 SetFont
    +    48.8 SetFrameWeight
    +    48.9 SetHColMargin
    +    48.10 SetLayout
    +    48.11 SetLeftMargin
    +    48.12 SetLineSpacing
    +    48.13 SetLineWeight
    +    48.14 SetMarkAbsHSize
    +    48.15 SetMarkAbsSize
    +    48.16 SetMarkAbsVSize
    +    48.17 SetPos
    +    48.18 SetReverse
    +    48.19 SetShadow
    +    48.20 SetVColMargin
    +49. LegendStyle
    +    49.1 Hide
    +    49.2 SetCFont
    +    49.3 SetCFontColor
    +    49.4 SetCircleColor
    +    49.5 SetCircleRadius
    +    49.6 SetCircleText
    +    49.7 SetCircleWeight
    +    49.8 SetFont
    +    49.9 SetFontColor
    +    49.10 SetFormat
    +    49.11 SetLength
    +    49.12 SetLFont
    +    49.13 SetLFontColor
    +    49.14 SetMargin
    +    49.15 SetText
    +    49.16 SetTFont
    +    49.17 SetTFontColor
    +    49.18 Show
    +50. LinearRegression
    +    50.1 Calc
    +    50.2 GetAB
    +    50.3 GetStat
    +    50.4 GetY
    +    50.5 __construct
    +51. LinearScale
    +    51.1 SetAutoMax
    +    51.2 SetAutoMin
    +    51.3 SetAutoTicks
    +    51.4 SetGrace
    +52. LinearTicks
    +    52.1 AdjustForDST
    +    52.2 GetMajor
    +    52.3 GetMinor
    +    52.4 Set
    +    52.5 SetMajTickPositions
    +    52.6 SetTextLabelStart
    +    52.7 SetTickPositions
    +53. LineErrorPlot
    +    53.1 __construct
    +54. LinePlot
    +    54.1 AddArea
    +    54.2 LinePlot
    +    54.3 SetBarCenter
    +    54.4 SetColor
    +    54.5 SetFastStroke
    +    54.6 SetFillColor
    +    54.7 SetFillFromYMin
    +    54.8 SetFillGradient
    +    54.9 SetStepStyle
    +    54.10 SetStyle
    +55. LineProperty
    +    55.1 SetColor
    +    55.2 SetStyle
    +    55.3 SetWeight
    +    55.4 Show
    +    55.5 __construct
    +56. LogScale
    +    56.1 GetMaxVal
    +    56.2 GetMinVal
    +57. LogTicks
    +    57.1 SetLabelLogType
    +58. MatrixGraph
    +    58.1 Add
    +    58.2 AddText
    +    58.3 SetColor
    +    58.4 Stroke
    +    58.5 StrokeIcons
    +    58.6 StrokeTexts
    +    58.7 __construct
    +59. MatrixLegend
    +    59.1 getLength
    +    59.2 getWidth
    +    59.3 InitSize
    +    59.4 SetBox
    +    59.5 SetFont
    +    59.6 SetFormatString
    +    59.7 SetLabelMargin
    +    59.8 SetLayout
    +    59.9 SetMargin
    +    59.10 SetMinMax
    +    59.11 SetModuleSize
    +    59.12 SetSize
    +    59.13 Show
    +    59.14 Stroke
    +    59.15 __construct
    +60. MatrixPlot
    +    60.1 GetHeight
    +    60.2 GetWidth
    +    60.3 InitSize
    +    60.4 SetAlpha
    +    60.5 SetAutoContrast
    +    60.6 SetBackgroundColor
    +    60.7 SetBox
    +    60.8 SetCenterPos
    +    60.9 SetLegendLayout
    +    60.10 SetMargin
    +    60.11 SetModuleSize
    +    60.12 SetModuleType
    +    60.13 SetPos
    +    60.14 SetSize
    +    60.15 SetupColormap
    +    60.16 Stroke
    +    60.17 __construct
    +61. MeshInterpolate
    +    61.1 IntSquare
    +    61.2 Linear
    +62. MGraph
    +    62.1 Add
    +    62.2 AddMix
    +    62.3 SetBackgroundImage
    +    62.4 SetBackgroundImageMix
    +    62.5 SetExpired
    +    62.6 SetFillColor
    +    62.7 SetFrame
    +    62.8 SetImgFormat
    +    62.9 SetMargin
    +    62.10 Stroke
    +    62.11 _gdImgHandle
    +    62.12 _strokeBackgroundImage
    +    62.13 __construct
    +63. MileStone
    +    63.1 __construct
    +64. OdoGraph
    +    64.1 Add
    +    64.2 Stroke
    +    64.3 StrokeIcons
    +    64.4 StrokeTexts
    +    64.5 __construct
    +65. Odometer
    +    65.1 AddIndication
    +    65.2 FilledCircle
    +    65.3 LayoutSize
    +    65.4 SetBase
    +    65.5 SetBorder
    +    65.6 SetCenterAreaWidth
    +    65.7 SetColor
    +    65.8 SetMargin
    +    65.9 SetPos
    +    65.10 SetSize
    +    65.11 Stroke
    +    65.12 StrokeFascia
    +    65.13 __construct
    +66. OdometerLabel
    +    66.1 SetVPos
    +67. OdoNeedle
    +    67.1 Set
    +    67.2 SetColor
    +    67.3 SetFillColor
    +    67.4 SetLength
    +    67.5 SetLineWeight
    +    67.6 SetShadow
    +    67.7 SetStyle
    +    67.8 SetWeight
    +    67.9 Show
    +    67.10 Stroke
    +    67.11 __construct
    +68. OdoScale
    +    68.1 Set
    +    68.2 SetAngle
    +    68.3 SetLabelFormat
    +    68.4 SetLabelPos
    +    68.5 SetTickColor
    +    68.6 SetTickLength
    +    68.7 SetTicks
    +    68.8 SetTickWeight
    +    68.9 Show
    +    68.10 Stroke
    +    68.11 Translate
    +    68.12 __construct
    +69. PieGraph
    +    69.1 Add
    +    69.2 SetAntiAliasing
    +    69.3 SetColor
    +    69.4 Stroke
    +    69.5 __construct
    +70. PiePlot
    +    70.1 Explode
    +    70.2 ExplodeAll
    +    70.3 ExplodeSlice
    +    70.4 SetCenter
    +    70.5 SetColor
    +    70.6 SetCSIMTargets
    +    70.7 SetGuideLines
    +    70.8 SetGuideLinesAdjust
    +    70.9 SetLabelPos
    +    70.10 SetLabels
    +    70.11 SetLabelType
    +    70.12 SetLegends
    +    70.13 SetShadow
    +    70.14 SetSize
    +    70.15 SetSliceColors
    +    70.16 SetStartAngle
    +    70.17 SetTheme
    +    70.18 SetValueType
    +    70.19 ShowBorder
    +    70.20 __construct
    +71. PiePlot3D
    +    71.1 Add3DSliceToCSIM
    +    71.2 SetAngle
    +    71.3 SetCSIMTargets
    +    71.4 SetEdge
    +    71.5 SetHeight
    +    71.6 SetLabelMargin
    +    71.7 SetLabels
    +    71.8 SetLegends
    +    71.9 SetSliceColors
    +    71.10 SetStartAngle
    +    71.11 __construct
    +72. PiePlotC
    +    72.1 SetMid
    +    72.2 SetMidColor
    +    72.3 SetMidCSIM
    +    72.4 SetMidSize
    +    72.5 SetMidTitle
    +    72.6 __construct
    +73. Plot
    +    73.1 HideLegend
    +    73.2 PreScaleSetup
    +    73.3 SetCenter
    +    73.4 SetColor
    +    73.5 SetCSIMTargets
    +    73.6 SetLegend
    +    73.7 SetLineWeight
    +74. PlotBand
    +    74.1 PreStrokeAdjust
    +    74.2 SetDensity
    +    74.3 SetOrder
    +    74.4 ShowFrame
    +    74.5 __construct
    +75. PlotLine
    +    75.1 HideLegend
    +    75.2 SetColor
    +    75.3 SetDirection
    +    75.4 SetLegend
    +    75.5 SetLineStyle
    +    75.6 SetPosition
    +    75.7 SetWeight
    +    75.8 __construct
    +76. PlotMark
    +    76.1 Hide
    +    76.2 SetCallback
    +    76.3 SetCallbackYX
    +    76.4 SetColor
    +    76.5 SetDefaultWidth
    +    76.6 SetFillColor
    +    76.7 SetSize
    +    76.8 SetType
    +    76.9 SetWeight
    +    76.10 SetWidth
    +    76.11 Show
    +77. PolarAxis
    +    77.1 HideTicks
    +    77.2 SetAngleFont
    +    77.3 SetAngleStep
    +    77.4 SetColor
    +    77.5 SetGridColor
    +    77.6 SetTickColors
    +    77.7 ShowAngleDegreeMark
    +    77.8 ShowAngleLabel
    +    77.9 ShowGrid
    +78. PolarGraph
    +    78.1 Set90AndMargin
    +    78.2 SetDensity
    +    78.3 SetPlotSize
    +    78.4 SetScale
    +    78.5 SetType
    +    78.6 Stroke
    +    78.7 __construct
    +79. PolarPlot
    +    79.1 SetColor
    +    79.2 SetCSIMTargets
    +    79.3 SetFillColor
    +    79.4 SetLegend
    +    79.5 SetWeight
    +    79.6 __construct
    +80. Progress
    +    80.1 Set
    +    80.2 SetFillColor
    +    80.3 SetPattern
    +81. RadarAxis
    +82. RadarGraph
    +    82.1 Add
    +    82.2 HideTickMarks
    +    82.3 SetCenter
    +    82.4 SetColor
    +    82.5 SetPlotSize
    +    82.6 SetPos
    +    82.7 SetScale
    +    82.8 SetSize
    +    82.9 SetTickDensity
    +    82.10 SetTitles
    +    82.11 ShowMinorTickmarks
    +    82.12 Stroke
    +    82.13 StrokeIcons
    +    82.14 StrokeTexts
    +    82.15 __construct
    +83. RadarGrid
    +    83.1 SetColor
    +    83.2 SetLineStyle
    +    83.3 SetWeight
    +    83.4 Show
    +84. RadarLinearTicks
    +    84.1 GetMajor
    +    84.2 GetMinor
    +    84.3 Set
    +85. RadarLogTicks
    +86. RadarPlot
    +    86.1 SetColor
    +    86.2 SetCSIMTargets
    +    86.3 SetFill
    +    86.4 SetFillColor
    +    86.5 SetLegend
    +    86.6 SetLineStyle
    +    86.7 SetLineWeight
    +    86.8 __construct
    +87. ReadFileData
    +    87.1 From1Col
    +88. RectLayout
    +    88.1 LayoutSize
    +89. RotImage
    +    89.1 SetAngle
    +    89.2 SetCenter
    +    89.3 SetMargin
    +    89.4 SetTranslation
    +90. ScatterPlot
    +    90.1 SetImpuls
    +    90.2 SetLinkPoints
    +    90.3 SetStem
    +    90.4 __construct
    +91. Shape
    +    91.1 Bezier
    +    91.2 Circle
    +    91.3 FilledCircle
    +    91.4 FilledPolygon
    +    91.5 FilledRectangle
    +    91.6 FilledRoundedRectangle
    +    91.7 IndentedRectangle
    +    91.8 Line
    +    91.9 Polygon
    +    91.10 Rectangle
    +    91.11 RoundedRectangle
    +    91.12 SetColor
    +    91.13 SetTextAlign
    +    91.14 ShadowRectangle
    +    91.15 __construct
    +92. Spline
    +    92.1 Get
    +    92.2 __construct
    +93. StockPlot
    +    93.1 HideEndLines
    +    93.2 SetColor
    +    93.3 SetWidth
    +    93.4 __construct
    +94. SuperScriptText
    +    94.1 FromReal
    +    94.2 GetFontHeight
    +    94.3 GetTextHeight
    +    94.4 GetWidth
    +    94.5 Set
    +    94.6 SetSuperFont
    +    94.7 __construct
    +95. SymChar
    +    95.1 Get
    +96. Text
    +    96.1 Align
    +    96.2 Center
    +    96.3 GetFontHeight
    +    96.4 GetTextHeight
    +    96.5 GetWidth
    +    96.6 Hide
    +    96.7 ParagraphAlign
    +    96.8 Set
    +    96.9 SetAlign
    +    96.10 SetAngle
    +    96.11 SetBox
    +    96.12 SetColor
    +    96.13 SetCSIMTarget
    +    96.14 SetFont
    +    96.15 SetMargin
    +    96.16 SetOrientation
    +    96.17 SetParagraphAlign
    +    96.18 SetPos
    +    96.19 SetScalePos
    +    96.20 SetShadow
    +    96.21 SetWordWrap
    +    96.22 Show
    +    96.23 __construct
    +97. TextProperty
    +    97.1 Align
    +    97.2 Set
    +    97.3 SetAlign
    +    97.4 SetColor
    +    97.5 SetFont
    +    97.6 Show
    +98. Ticks
    +    98.1 SetColor
    +    98.2 SetFormatCallback
    +    98.3 SetLabelFormat
    +    98.4 SetSide
    +    98.5 SetSize
    +    98.6 SetWeight
    +    98.7 SupressFirst
    +    98.8 SupressLast
    +    98.9 SupressMinorTickMarks
    +    98.10 SupressTickMarks
    +    98.11 SupressZeroLabel
    +99. WindroseGraph
    +    99.1 Add
    +    99.2 AddText
    +    99.3 SetColor
    +    99.4 Stroke
    +    99.5 StrokeIcons
    +    99.6 StrokeTexts
    +    99.7 __construct
    +100. WindrosePlot
    +    100.1 FixupIndexes
    +    100.2 getHeight
    +    100.3 getWidth
    +    100.4 LayoutSize
    +    100.5 NormAngle
    +    100.6 SetAntiAlias
    +    100.7 SetAutoScaleAngle
    +    100.8 SetBox
    +    100.9 SetCenterPos
    +    100.10 SetCenterSize
    +    100.11 SetColor
    +    100.12 SetCompassLabels
    +    100.13 SetDataKeyEncoding
    +    100.14 SetFont
    +    100.15 SetFontColor
    +    100.16 SetGridColor
    +    100.17 SetGridWeight
    +    100.18 SetLabelFormat
    +    100.19 SetLabelMargin
    +    100.20 SetLabelPosition
    +    100.21 SetLabels
    +    100.22 SetPos
    +    100.23 SetRadialColors
    +    100.24 SetRadialGridStyle
    +    100.25 SetRadialStyles
    +    100.26 SetRadialWeights
    +    100.27 SetRangeColors
    +    100.28 SetRanges
    +    100.29 SetRangeStyle
    +    100.30 SetRangeWeights
    +    100.31 SetSize
    +    100.32 SetType
    +    100.33 SetZCircleSize
    +    100.34 Stroke
    +    100.35 _StrokeFreeRose
    +    100.36 _StrokeLegend
    +    100.37 _StrokeRegularRose
    +    100.38 _StrokeWindLeg
    +    100.39 _ThickCircle
    +    100.40 __construct
    +101. WindrosePlotScale
    +    101.1 AutoScale
    +    101.2 GetMax
    +    101.3 GetNumCirc
    +    101.4 Hide
    +    101.5 RelTranslate
    +    101.6 Set
    +    101.7 SetAngle
    +    101.8 SetFont
    +    101.9 SetFontColor
    +    101.10 SetLabelAlign
    +    101.11 SetLabelFillColor
    +    101.12 SetLabelFormat
    +    101.13 SetMaxValue
    +    101.14 SetZeroLabel
    +    101.15 SetZFont
    +    101.16 SetZFontColor
    +    101.17 StrokeLabels
    +    101.18 __construct
    +

    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/index.html b/Societes/ric/jpgraph/docs/classref/index.html new file mode 100755 index 00000000..1f707267 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/index.html @@ -0,0 +1,11 @@ + + + + + Project documentation + + + ; + + + \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/classref/projinfo.html b/Societes/ric/jpgraph/docs/classref/projinfo.html new file mode 100755 index 00000000..882bd7b7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/classref/projinfo.html @@ -0,0 +1,5 @@ +
    JpGraph
    +

    Documentation status: 73%

    Total number of Classes: 135, Methods: 1362

    +This version does not include private methods & classes

    Generated at 20 Jul 2009 at 16:57
    +


    +© 2000 - 2009 Aditus Consulting. All rights reserved.
    \ No newline at end of file diff --git a/Societes/ric/jpgraph/docs/index.html b/Societes/ric/jpgraph/docs/index.html new file mode 100755 index 00000000..8ade7fb7 --- /dev/null +++ b/Societes/ric/jpgraph/docs/index.html @@ -0,0 +1,123 @@ + + +JpGraph Documentation + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +© 2000 - 2016 Asial Corporation + +
    + + + + + + diff --git a/Societes/ric/jpgraph/docs/jpgraph_logo.jpg b/Societes/ric/jpgraph/docs/jpgraph_logo.jpg new file mode 100755 index 00000000..c09464ee Binary files /dev/null and b/Societes/ric/jpgraph/docs/jpgraph_logo.jpg differ diff --git a/Societes/ric/jpgraph/docs/manual.png b/Societes/ric/jpgraph/docs/manual.png new file mode 100755 index 00000000..a4402158 Binary files /dev/null and b/Societes/ric/jpgraph/docs/manual.png differ diff --git a/Societes/ric/jpgraph/docs/reference.png b/Societes/ric/jpgraph/docs/reference.png new file mode 100755 index 00000000..e23dfc09 Binary files /dev/null and b/Societes/ric/jpgraph/docs/reference.png differ diff --git a/Societes/ric/jpgraph/flag_mapping b/Societes/ric/jpgraph/flag_mapping new file mode 100755 index 00000000..7f9c3c5f --- /dev/null +++ b/Societes/ric/jpgraph/flag_mapping @@ -0,0 +1,237 @@ +class JpCountryFlags { + +$iCountryFlags = array( + 'Afghanistan' => 'afgh.gif', + 'Republic of Angola' => 'agla.gif', + 'Republic of Albania' => 'alba.gif', + 'Alderney' => 'alde.gif', + 'Democratic and Popular Republic of Algeria' => 'alge.gif', + 'Territory of American Samoa' => 'amsa.gif', + 'Principality of Andorra' => 'andr.gif', + 'British Overseas Territory of Anguilla' => 'angu.gif', + 'Antarctica' => 'anta.gif', + 'Argentine Republic' => 'arge.gif', + 'League of Arab States' => 'arle.gif', + 'Republic of Armenia' => 'arme.gif', + 'Aruba' => 'arub.gif', + 'Commonwealth of Australia' => 'astl.gif', + 'Republic of Austria' => 'aust.gif', + 'Azerbaijani Republic' => 'azer.gif', + 'British Antarctic Territory' => 'bant.gif', + 'Kingdom of Belgium' => 'belg.gif', + 'British Overseas Territory of Bermuda' => 'berm.gif', + 'Commonwealth of the Bahamas' => 'bhms.gif', + 'Kingdom of Bahrain' => 'bhrn.gif', + 'Republic of Belarus' => 'blru.gif', + 'Republic of Bolivia' => 'blva.gif', + 'Belize' => 'blze.gif', + 'Republic of Benin' => 'bnin.gif', + 'Republic of Botswana' => 'bots.gif', + 'Federative Republic of Brazil' => 'braz.gif', + 'Barbados' => 'brbd.gif', + 'British Indian Ocean Territory' => 'brin.gif', + 'Brunei Darussalam' => 'brun.gif', + 'Republic of Burkina' => 'bufa.gif', + 'Republic of Bulgaria' => 'bulg.gif', + 'Republic of Burundi' => 'buru.gif', + 'Overseas Territory of the British Virgin Islands' => 'bvis.gif', + 'Central African Republic' => 'cafr.gif', + 'Kingdom of Cambodia' => 'camb.gif', + 'Republic of Cameroon' => 'came.gif', + 'Dominion of Canada' => 'cana.gif', + 'Caribbean Community' => 'cari.gif', + 'Republic of Cape Verde' => 'cave.gif', + 'Republic of Chad' => 'chad.gif', + 'Republic of Chile' => 'chil.gif', + 'Territory of Christmas Island' => 'chms.gif', + 'Commonwealth of Independent States' => 'cins.gif', + 'Cook Islands' => 'ckis.gif', + 'Republic of Colombia' => 'clmb.gif', + 'Territory of Cocos Islands' => 'cois.gif', + 'Commonwealth' => 'comn.gif', + 'Union of the Comoros' => 'como.gif', + 'Republic of the Congo' => 'cong.gif', + 'Republic of Costa Rica' => 'corc.gif', + 'Republic of Croatia' => 'croa.gif', + 'Republic of Cuba' => 'cuba.gif', + 'British Overseas Territory of the Cayman Islands' => 'cyis.gif', + 'Republic of Cyprus' => 'cypr.gif', + 'The Czech Republic' => 'czec.gif', + 'Kingdom of Denmark' => 'denm.gif', + 'Republic of Djibouti' => 'djib.gif', + 'Commonwealth of Dominica' => 'domn.gif', + 'Dominican Republic' => 'dore.gif', + 'Republic of Ecuador' => 'ecua.gif', + 'Arab Republic of Egypt' => 'egyp.gif', + 'Republic of El Salvador' => 'elsa.gif', + 'England' => 'engl.gif', + 'Republic of Equatorial Guinea' => 'eqgu.gif', + 'State of Eritrea' => 'erit.gif', + 'Republic of Estonia' => 'estn.gif', + 'Ethiopia' => 'ethp.gif', + 'European Union' => 'euun.gif', + 'British Overseas Territory of the Falkland Islands' => 'fais.gif', + 'International Federation of Vexillological Associations' => 'fiav.gif', + 'Republic of Fiji' => 'fiji.gif', + 'Republic of Finland' => 'finl.gif', + 'Territory of French Polynesia' => 'fpol.gif', + 'French Republic' => 'fran.gif', + 'Overseas Department of French Guiana' => 'frgu.gif', + 'Gabonese Republic' => 'gabn.gif', + 'Republic of the Gambia' => 'gamb.gif', + 'Republic of Georgia' => 'geor.gif', + 'Federal Republic of Germany' => 'germ.gif', + 'Republic of Ghana' => 'ghan.gif', + 'Gibraltar' => 'gibr.gif', + 'Hellenic Republic' => 'grec.gif', + 'State of Grenada' => 'gren.gif', + 'Overseas Department of Guadeloupe' => 'guad.gif', + 'Territory of Guam' => 'guam.gif', + 'Republic of Guatemala' => 'guat.gif', + 'The Bailiwick of Guernsey' => 'guer.gif', + 'Republic of Guinea' => 'guin.gif', + 'Republic of Haiti' => 'hait.gif', + 'Hong Kong Special Administrative Region' => 'hokn.gif', + 'Republic of Honduras' => 'hond.gif', + 'Republic of Hungary' => 'hung.gif', + 'Republic of Iceland' => 'icel.gif', + 'International Committee of the Red Cross' => 'icrc.gif', + 'Republic of India' => 'inda.gif', + 'Republic of Indonesia' => 'indn.gif', + 'Republic of Iraq' => 'iraq.gif', + 'Republic of Ireland' => 'irel.gif', + 'Organization of the Islamic Conference' => 'isco.gif', + 'Isle of Man' => 'isma.gif', + 'State of Israel' => 'isra.gif', + 'Italian Republic' => 'ital.gif', + 'Jamaica' => 'jama.gif', + 'Japan' => 'japa.gif', + 'The Bailiwick of Jersey' => 'jers.gif', + 'Hashemite Kingdom of Jordan' => 'jord.gif', + 'Republic of Kazakhstan' => 'kazk.gif', + 'Republic of Kenya' => 'keny.gif', + 'Republic of Kiribati' => 'kirb.gif', + 'State of Kuwait' => 'kuwa.gif', + 'Kyrgyz Republic' => 'kyrg.gif', + 'Republic of Latvia' => 'latv.gif', + 'Lebanese Republic' => 'leba.gif', + 'Kingdom of Lesotho' => 'lest.gif', + 'Republic of Liberia' => 'libe.gif', + 'Principality of Liechtenstein' => 'liec.gif', + 'Republic of Lithuania' => 'lith.gif', + 'Grand Duchy of Luxembourg' => 'luxe.gif', + 'Macao Special Administrative Region' => 'maca.gif', + 'Republic of Macedonia' => 'mace.gif', + 'Republic of Madagascar' => 'mada.gif', + 'Republic of the Marshall Islands' => 'mais.gif', + 'Republic of Maldives' => 'mald.gif', + 'Republic of Mali' => 'mali.gif', + 'Federation of Malaysia' => 'mals018.gif', + 'Republic of Malta' => 'malt.gif', + 'Republic of Malawi' => 'malw.gif', + 'Overseas Department of Martinique' => 'mart.gif', + 'Islamic Republic of Mauritania' => 'maur.gif', + 'Territorial Collectivity of Mayotte' => 'mayt.gif', + 'United Mexican States' => 'mexc.gif', + 'Federated States of Micronesia' => 'micr.gif', + 'Midway Islands' => 'miis.gif', + 'Republic of Moldova' => 'mold.gif', + 'Principality of Monaco' => 'mona.gif', + 'Republic of Mongolia' => 'mong.gif', + 'British Overseas Territory of Montserrat' => 'mont.gif', + 'Kingdom of Morocco' => 'morc.gif', + 'Republic of Mozambique' => 'moza.gif', + 'Republic of Mauritius' => 'mrts.gif', + 'Union of Myanmar' => 'myan.gif', + 'Republic of Namibia' => 'namb.gif', + 'North Atlantic Treaty Organization' => 'nato.gif', + 'Republic of Nauru' => 'naur.gif', + 'Turkish Republic of Northern Cyprus' => 'ncyp.gif', + 'Netherlands Antilles' => 'nean.gif', + 'Kingdom of Nepal' => 'nepa.gif', + 'Kingdom of the Netherlands' => 'neth.gif', + 'Territory of Norfolk Island' => 'nfis.gif', + 'Federal Republic of Nigeria' => 'ngra.gif', + 'Republic of Nicaragua' => 'nica.gif', + 'Republic of Niger' => 'nigr.gif', + 'Niue' => 'niue.gif', + 'Commonwealth of the Northern Mariana Islands' => 'nmar.gif', + 'Province of Northern Ireland' => 'noir.gif', + 'Nordic Council' => 'nord.gif', + 'Kingdom of Norway' => 'norw.gif', + 'Territory of New Caledonia and Dependencies' => 'nwca.gif', + 'New Zealand' => 'nwze.gif', + 'Organization of American States' => 'oast.gif', + 'Organization of African Unity' => 'oaun.gif', + 'International Olympic Committee' => 'olym.gif', + 'Sultanate of Oman' => 'oman.gif', + 'Organization of Petroleum Exporting Countries' => 'opec.gif', + 'Islamic Republic of Pakistan' => 'paks.gif', + 'Republic of Palau' => 'pala.gif', + 'Independent State of Papua New Guinea' => 'pang.gif', + 'Republic of Paraguay' => 'para.gif', + 'Republic of the Philippines' => 'phil.gif', + 'British Overseas Territory of the Pitcairn Islands' => 'piis.gif', + 'Republic of Poland' => 'pola.gif', + 'Republic of Portugal' => 'port.gif', + 'Commonwealth of Puerto Rico' => 'purc.gif', + 'State of Qatar' => 'qata.gif', + 'Russian Federation' => 'russ.gif', + 'Republic of Rwanda' => 'rwan.gif', + 'Kingdom of Saudi Arabia' => 'saar.gif', + 'Republic of San Marino' => 'sama.gif', + 'Nordic Sami Conference' => 'sami.gif', + 'Sark' => 'sark.gif', + 'Scotland' => 'scot.gif', + 'Principality of Seborga' => 'sebo.gif', + 'Republic of Sierra Leone' => 'sile.gif', + 'Republic of Singapore' => 'sing.gif', + 'Republic of Korea' => 'skor.gif', + 'Republic of Slovenia' => 'slva.gif', + 'Somali Republic' => 'smla.gif', + 'Republic of Somaliland' => 'smld.gif', + 'Republic of South Africa' => 'soaf.gif', + 'Solomon Islands' => 'sois.gif', + 'Kingdom of Spain' => 'span.gif', + 'Secretariat of the Pacific Community' => 'spco.gif', + 'Democratic Socialist Republic of Sri Lanka' => 'srla.gif', + 'Saint Lucia' => 'stlu.gif', + 'Republic of the Sudan' => 'suda.gif', + 'Republic of Suriname' => 'surn.gif', + 'Slovak Republic' => 'svka.gif', + 'Kingdom of Sweden' => 'swdn.gif', + 'Swiss Confederation' => 'swit.gif', + 'Syrian Arab Republic' => 'syra.gif', + 'Kingdom of Swaziland' => 'szld.gif', + 'Republic of China' => 'taiw.gif', + 'Republic of Tajikistan' => 'tajk.gif', + 'United Republic of Tanzania' => 'tanz.gif', + 'Kingdom of Thailand' => 'thal.gif', + 'Autonomous Region of Tibet' => 'tibe.gif', + 'Turkmenistan' => 'tkst.gif', + 'Togolese Republic' => 'togo.gif', + 'Tokelau' => 'toke.gif', + 'Kingdom of Tonga' => 'tong.gif', + 'Tristan da Cunha' => 'trdc.gif', + 'Tromelin' => 'tris.gif', + 'Republic of Tunisia' => 'tuns.gif', + 'Republic of Turkey' => 'turk.gif', + 'Tuvalu' => 'tuva.gif', + 'United Arab Emirates' => 'uaem.gif', + 'Republic of Uganda' => 'ugan.gif', + 'Ukraine' => 'ukrn.gif', + 'United Kingdom of Great Britain' => 'unkg.gif', + 'United Nations' => 'unna.gif', + 'United States of America' => 'unst.gif', + 'Oriental Republic of Uruguay' => 'urgy.gif', + 'Virgin Islands of the United States' => 'usvs.gif', + 'Republic of Uzbekistan' => 'uzbk.gif', + 'State of the Vatican City' => 'vacy.gif', + 'Republic of Vanuatu' => 'vant.gif', + 'Bolivarian Republic of Venezuela' => 'venz.gif', + 'Republic of Yemen' => 'yemn.gif', + 'Democratic Republic of Congo' => 'zare.gif', + 'Republic of Zimbabwe' => 'zbwe.gif' +) ; + + diff --git a/Societes/ric/jpgraph/flags.dat b/Societes/ric/jpgraph/flags.dat new file mode 100755 index 00000000..1cd2e723 Binary files /dev/null and b/Societes/ric/jpgraph/flags.dat differ diff --git a/Societes/ric/jpgraph/flags_thumb100x100.dat b/Societes/ric/jpgraph/flags_thumb100x100.dat new file mode 100755 index 00000000..545e7ade Binary files /dev/null and b/Societes/ric/jpgraph/flags_thumb100x100.dat differ diff --git a/Societes/ric/jpgraph/flags_thumb35x35.dat b/Societes/ric/jpgraph/flags_thumb35x35.dat new file mode 100755 index 00000000..7335011e Binary files /dev/null and b/Societes/ric/jpgraph/flags_thumb35x35.dat differ diff --git a/Societes/ric/jpgraph/flags_thumb60x60.dat b/Societes/ric/jpgraph/flags_thumb60x60.dat new file mode 100755 index 00000000..6107d084 Binary files /dev/null and b/Societes/ric/jpgraph/flags_thumb60x60.dat differ diff --git a/Societes/ric/jpgraph/fonts/DejaVuSans-Bold.ttf b/Societes/ric/jpgraph/fonts/DejaVuSans-Bold.ttf new file mode 100755 index 00000000..ac313d26 Binary files /dev/null and b/Societes/ric/jpgraph/fonts/DejaVuSans-Bold.ttf differ diff --git a/Societes/ric/jpgraph/fonts/DejaVuSans-BoldOblique.ttf b/Societes/ric/jpgraph/fonts/DejaVuSans-BoldOblique.ttf new file mode 100755 index 00000000..c818ae6e Binary files /dev/null and b/Societes/ric/jpgraph/fonts/DejaVuSans-BoldOblique.ttf differ diff --git a/Societes/ric/jpgraph/fonts/DejaVuSans-Oblique.ttf b/Societes/ric/jpgraph/fonts/DejaVuSans-Oblique.ttf new file mode 100755 index 00000000..d5ac60d6 Binary files /dev/null and b/Societes/ric/jpgraph/fonts/DejaVuSans-Oblique.ttf differ diff --git a/Societes/ric/jpgraph/fonts/DejaVuSans.ttf b/Societes/ric/jpgraph/fonts/DejaVuSans.ttf new file mode 100755 index 00000000..a99969e1 Binary files /dev/null and b/Societes/ric/jpgraph/fonts/DejaVuSans.ttf differ diff --git a/Societes/ric/jpgraph/fonts/FF_FONT0-Bold.gdf b/Societes/ric/jpgraph/fonts/FF_FONT0-Bold.gdf new file mode 100755 index 00000000..3b371f8a Binary files /dev/null and b/Societes/ric/jpgraph/fonts/FF_FONT0-Bold.gdf differ diff --git a/Societes/ric/jpgraph/fonts/FF_FONT0.gdf b/Societes/ric/jpgraph/fonts/FF_FONT0.gdf new file mode 100755 index 00000000..e231b713 Binary files /dev/null and b/Societes/ric/jpgraph/fonts/FF_FONT0.gdf differ diff --git a/Societes/ric/jpgraph/fonts/FF_FONT1-Bold.gdf b/Societes/ric/jpgraph/fonts/FF_FONT1-Bold.gdf new file mode 100755 index 00000000..d62f0b3b Binary files /dev/null and b/Societes/ric/jpgraph/fonts/FF_FONT1-Bold.gdf differ diff --git a/Societes/ric/jpgraph/fonts/FF_FONT1.gdf b/Societes/ric/jpgraph/fonts/FF_FONT1.gdf new file mode 100755 index 00000000..7b5b0f62 Binary files /dev/null and b/Societes/ric/jpgraph/fonts/FF_FONT1.gdf differ diff --git a/Societes/ric/jpgraph/fonts/FF_FONT2-Bold.gdf b/Societes/ric/jpgraph/fonts/FF_FONT2-Bold.gdf new file mode 100755 index 00000000..6e402847 Binary files /dev/null and b/Societes/ric/jpgraph/fonts/FF_FONT2-Bold.gdf differ diff --git a/Societes/ric/jpgraph/fonts/FF_FONT2.gdf b/Societes/ric/jpgraph/fonts/FF_FONT2.gdf new file mode 100755 index 00000000..50bca09e Binary files /dev/null and b/Societes/ric/jpgraph/fonts/FF_FONT2.gdf differ diff --git a/Societes/ric/jpgraph/gd_image.inc.php b/Societes/ric/jpgraph/gd_image.inc.php new file mode 100755 index 00000000..055f18e1 --- /dev/null +++ b/Societes/ric/jpgraph/gd_image.inc.php @@ -0,0 +1,2318 @@ +original_width = $aWidth; + $this->original_height = $aHeight; + $this->CreateImgCanvas($aWidth, $aHeight); + + if( $aSetAutoMargin ) { + $this->SetAutoMargin(); + } + + if( !$this->SetImgFormat($aFormat) ) { + JpGraphError::RaiseL(25081,$aFormat);//("JpGraph: Selected graphic format is either not supported or unknown [$aFormat]"); + } + $this->ttf = new TTF(); + $this->langconv = new LanguageConv(); + + $this->ff_font0 = imageloadfont(dirname(__FILE__) . "/fonts/FF_FONT0.gdf"); + $this->ff_font1 = imageloadfont(dirname(__FILE__) . "/fonts/FF_FONT1.gdf"); + $this->ff_font2 = imageloadfont(dirname(__FILE__) . "/fonts/FF_FONT2.gdf"); + $this->ff_font1_bold = imageloadfont(dirname(__FILE__) . "/fonts/FF_FONT1-Bold.gdf"); + $this->ff_font2_bold = imageloadfont(dirname(__FILE__) . "/fonts/FF_FONT2-Bold.gdf"); + } + + // Enable interlacing in images + function SetInterlace($aFlg=true) { + $this->iInterlace=$aFlg; + } + + // Should we use anti-aliasing. Note: This really slows down graphics! + function SetAntiAliasing($aFlg=true) { + $this->use_anti_aliasing = $aFlg; + if( function_exists('imageantialias') ) { + imageantialias($this->img,$aFlg); + } + else { + JpGraphError::RaiseL(25128);//('The function imageantialias() is not available in your PHP installation. Use the GD version that comes with PHP and not the standalone version.') + } + } + + function GetAntiAliasing() { + return $this->use_anti_aliasing ; + } + + function CreateRawCanvas($aWidth=0,$aHeight=0) { + + $aWidth *= SUPERSAMPLING_SCALE; + $aHeight *= SUPERSAMPLING_SCALE; + + if( $aWidth <= 1 || $aHeight <= 1 ) { + JpGraphError::RaiseL(25082,$aWidth,$aHeight);//("Illegal sizes specified for width or height when creating an image, (width=$aWidth, height=$aHeight)"); + } + + $this->img = @imagecreatetruecolor($aWidth, $aHeight); + if( !$this->img ) { + JpGraphError::RaiseL(25126); + //die("Can't create truecolor image. Check that you really have GD2 library installed."); + } + $this->SetAlphaBlending(); + + if( $this->iInterlace ) { + imageinterlace($this->img,1); + } + if( $this->rgb != null ) { + $this->rgb->img = $this->img ; + } + else { + $this->rgb = new RGB($this->img); + } + } + + function CloneCanvasH() { + $oldimage = $this->img; + $this->CreateRawCanvas($this->width,$this->height); + imagecopy($this->img,$oldimage,0,0,0,0,$this->width,$this->height); + return $oldimage; + } + + function CreateImgCanvas($aWidth=0,$aHeight=0) { + + $old = array($this->img,$this->width,$this->height); + + $aWidth = round($aWidth); + $aHeight = round($aHeight); + + $this->width=$aWidth; + $this->height=$aHeight; + + + if( $aWidth==0 || $aHeight==0 ) { + // We will set the final size later. + // Note: The size must be specified before any other + // img routines that stroke anything are called. + $this->img = null; + $this->rgb = null; + return $old; + } + + $this->CreateRawCanvas($aWidth,$aHeight); + // Set canvas color (will also be the background color for a + // a pallett image + $this->SetColor($this->canvascolor); + $this->FilledRectangle(0,0,$this->width-1,$this->height-1); + + return $old ; + } + + function CopyCanvasH($aToHdl,$aFromHdl,$aToX,$aToY,$aFromX,$aFromY,$aWidth,$aHeight,$aw=-1,$ah=-1) { + if( $aw === -1 ) { + $aw = $aWidth; + $ah = $aHeight; + $f = 'imagecopyresized'; + } + else { + $f = 'imagecopyresampled'; + } + $f($aToHdl,$aFromHdl,(int)$aToX,(int)$aToY,(int)$aFromX,(int)$aFromY, (int)$aWidth,(int)$aHeight,(int)$aw,(int)$ah); + } + + function Copy($fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$fromWidth=-1,$fromHeight=-1) { + $this->CopyCanvasH($this->img,$fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$fromWidth,$fromHeight); + } + + function CopyMerge($fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$fromWidth=-1,$fromHeight=-1,$aMix=100) { + if( $aMix == 100 ) { + $this->CopyCanvasH($this->img,$fromImg, + $toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$fromWidth,$fromHeight); + } + else { + if( ($fromWidth != -1 && ($fromWidth != $toWidth)) || ($fromHeight != -1 && ($fromHeight != $fromHeight)) ) { + // Create a new canvas that will hold the re-scaled original from image + if( $toWidth <= 1 || $toHeight <= 1 ) { + JpGraphError::RaiseL(25083);//('Illegal image size when copying image. Size for copied to image is 1 pixel or less.'); + } + + $tmpimg = @imagecreatetruecolor($toWidth, $toHeight); + + if( $tmpimg < 1 ) { + JpGraphError::RaiseL(25084);//('Failed to create temporary GD canvas. Out of memory ?'); + } + $this->CopyCanvasH($tmpimg,$fromImg,0,0,0,0, + $toWidth,$toHeight,$fromWidth,$fromHeight); + $fromImg = $tmpimg; + } + imagecopymerge($this->img,$fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$aMix); + } + } + + static function GetWidth($aImg) { + return imagesx($aImg); + } + + static function GetHeight($aImg) { + return imagesy($aImg); + } + + static function CreateFromString($aStr) { + $img = imagecreatefromstring($aStr); + if( $img === false ) { + JpGraphError::RaiseL(25085); + //('An image can not be created from the supplied string. It is either in a format not supported or the string is representing an corrupt image.'); + } + return $img; + } + + function SetCanvasH($aHdl) { + $this->img = $aHdl; + $this->rgb->img = $aHdl; + } + + function SetCanvasColor($aColor) { + $this->canvascolor = $aColor ; + } + + function SetAlphaBlending($aFlg=true) { + ImageAlphaBlending($this->img,$aFlg); + } + + function SetAutoMargin() { + $min_bm=5; + $lm = min(40,$this->width/7); + $rm = min(20,$this->width/10); + $tm = max(5,$this->height/7); + $bm = max($min_bm,$this->height/6); + $this->SetMargin($lm,$rm,$tm,$bm); + } + + //--------------- + // PUBLIC METHODS + + function SetFont($family,$style=FS_NORMAL,$size=10) { + $this->font_family=$family; + $this->font_style=$style; + $this->font_size=$size*SUPERSAMPLING_SCALE; + $this->font_file=''; + if( ($this->font_family==FF_FONT1 || $this->font_family==FF_FONT2) && $this->font_style==FS_BOLD ){ + ++$this->font_family; + } + if( $this->font_family > FF_FONT2+1 ) { // A TTF font so get the font file + + // Check that this PHP has support for TTF fonts + if( !function_exists('imagettfbbox') ) { + // use internal font when php is configured without '--with-ttf' + $this->font_family = FF_FONT1; +// JpGraphError::RaiseL(25087);//('This PHP build has not been configured with TTF support. You need to recompile your PHP installation with FreeType support.'); + } else { + $this->font_file = $this->ttf->File($this->font_family,$this->font_style); + } + } + } + + // Get the specific height for a text string + function GetTextHeight($txt="",$angle=0) { + $tmp = preg_split('/\n/',$txt ?: ''); + $n = count($tmp); + $m=0; + for($i=0; $i< $n; ++$i) { + $m = max($m,strlen($tmp[$i])); + } + + if( $this->font_family <= FF_FONT2+1 ) { + if( $angle==0 ) { + $h = imagefontheight($this->font_family); + if( $h === false ) { + JpGraphError::RaiseL(25088);//('You have a misconfigured GD font support. The call to imagefontwidth() fails.'); + } + + return $n*$h; + } + else { + $w = @imagefontwidth($this->font_family); + if( $w === false ) { + JpGraphError::RaiseL(25088);//('You have a misconfigured GD font support. The call to imagefontwidth() fails.'); + } + + return $m*$w; + } + } + else { + $bbox = $this->GetTTFBBox($txt,$angle); + return $bbox[1]-$bbox[5]+1; + } + } + + // Estimate font height + function GetFontHeight($angle=0) { + $txt = "XOMg"; + return $this->GetTextHeight($txt,$angle); + } + + // Approximate font width with width of letter "O" + function GetFontWidth($angle=0) { + $txt = 'O'; + return $this->GetTextWidth($txt,$angle); + } + + // Get actual width of text in absolute pixels. Note that the width is the + // texts projected with onto the x-axis. Call with angle=0 to get the true + // etxt width. + function GetTextWidth($txt,$angle=0) { + + $tmp = preg_split('/\n/',$txt ?: ''); + $n = count($tmp); + if( $this->font_family <= FF_FONT2+1 ) { + + $m=0; + for($i=0; $i < $n; ++$i) { + $l=strlen($tmp[$i]); + if( $l > $m ) { + $m = $l; + } + } + + if( $angle==0 ) { + $w = @imagefontwidth($this->font_family); + if( $w === false ) { + JpGraphError::RaiseL(25088);//('You have a misconfigured GD font support. The call to imagefontwidth() fails.'); + } + return $m*$w; + } + else { + // 90 degrees internal so height becomes width + $h = @imagefontheight($this->font_family); + if( $h === false ) { + JpGraphError::RaiseL(25089);//('You have a misconfigured GD font support. The call to imagefontheight() fails.'); + } + return $n*$h; + } + } + else { + // For TTF fonts we must walk through a lines and find the + // widest one which we use as the width of the multi-line + // paragraph + $m=0; + for( $i=0; $i < $n; ++$i ) { + $bbox = $this->GetTTFBBox($tmp[$i],$angle); + $mm = $bbox[2] - $bbox[0]; + if( $mm > $m ) + $m = $mm; + } + return $m; + } + } + + + // Draw text with a box around it + function StrokeBoxedText($x,$y,$txt,$dir=0,$fcolor="white",$bcolor="black", + $shadowcolor=false,$paragraph_align="left", + $xmarg=6,$ymarg=4,$cornerradius=0,$dropwidth=3) { + + $oldx = $this->lastx; + $oldy = $this->lasty; + + if( !is_numeric($dir) ) { + if( $dir=="h" ) $dir=0; + elseif( $dir=="v" ) $dir=90; + else JpGraphError::RaiseL(25090,$dir);//(" Unknown direction specified in call to StrokeBoxedText() [$dir]"); + } + + if( $this->font_family >= FF_FONT0 && $this->font_family <= FF_FONT2+1) { + $width=$this->GetTextWidth($txt,$dir) ; + $height=$this->GetTextHeight($txt,$dir) ; + } + else { + $width=$this->GetBBoxWidth($txt,$dir) ; + $height=$this->GetBBoxHeight($txt,$dir) ; + } + + $height += 2*$ymarg; + $width += 2*$xmarg; + + if( $this->text_halign=="right" ) $x -= $width; + elseif( $this->text_halign=="center" ) $x -= $width/2; + + if( $this->text_valign=="bottom" ) $y -= $height; + elseif( $this->text_valign=="center" ) $y -= $height/2; + + $olda = $this->SetAngle(0); + + if( $shadowcolor ) { + $this->PushColor($shadowcolor); + $this->FilledRoundedRectangle($x-$xmarg+$dropwidth,$y-$ymarg+$dropwidth, + $x+$width+$dropwidth,$y+$height-$ymarg+$dropwidth, + $cornerradius); + $this->PopColor(); + $this->PushColor($fcolor); + $this->FilledRoundedRectangle($x-$xmarg,$y-$ymarg, + $x+$width,$y+$height-$ymarg, + $cornerradius); + $this->PopColor(); + $this->PushColor($bcolor); + $this->RoundedRectangle($x-$xmarg,$y-$ymarg, + $x+$width,$y+$height-$ymarg,$cornerradius); + $this->PopColor(); + } + else { + if( $fcolor ) { + $oc=$this->current_color; + $this->SetColor($fcolor); + $this->FilledRoundedRectangle($x-$xmarg,$y-$ymarg,$x+$width,$y+$height-$ymarg,$cornerradius); + $this->current_color=$oc; + } + if( $bcolor ) { + $oc=$this->current_color; + $this->SetColor($bcolor); + $this->RoundedRectangle($x-$xmarg,$y-$ymarg,$x+$width,$y+$height-$ymarg,$cornerradius); + $this->current_color=$oc; + } + } + + $h=$this->text_halign; + $v=$this->text_valign; + $this->SetTextAlign("left","top"); + + $debug=false; + $this->StrokeText($x, $y, $txt, $dir, $paragraph_align,$debug); + + $bb = array($x-$xmarg,$y+$height-$ymarg,$x+$width,$y+$height-$ymarg, + $x+$width,$y-$ymarg,$x-$xmarg,$y-$ymarg); + $this->SetTextAlign($h,$v); + + $this->SetAngle($olda); + $this->lastx = $oldx; + $this->lasty = $oldy; + + return $bb; + } + + // Draw text with a box around it. This time the box will be rotated + // with the text. The previous method will just make a larger enough non-rotated + // box to hold the text inside. + function StrokeBoxedText2($x,$y,$txt,$dir=0,$fcolor="white",$bcolor="black", + $shadowcolor=false,$paragraph_align="left", + $xmarg=6,$ymarg=4,$cornerradius=0,$dropwidth=3) { + + // This version of boxed text will stroke a rotated box round the text + // thta will follow the angle of the text. + // This has two implications: + // 1) This methos will only support TTF fonts + // 2) The only two alignment that makes sense are centered or baselined + + if( $this->font_family <= FF_FONT2+1 ) { + JpGraphError::RaiseL(25131);//StrokeBoxedText2() Only support TTF fonts and not built in bitmap fonts + } + + $oldx = $this->lastx; + $oldy = $this->lasty; + $dir = $this->NormAngle($dir); + + if( !is_numeric($dir) ) { + if( $dir=="h" ) $dir=0; + elseif( $dir=="v" ) $dir=90; + else JpGraphError::RaiseL(25090,$dir);//(" Unknown direction specified in call to StrokeBoxedText() [$dir]"); + } + + $width=$this->GetTextWidth($txt,0) + 2*$xmarg; + $height=$this->GetTextHeight($txt,0) + 2*$ymarg ; + $rect_width=$this->GetBBoxWidth($txt,$dir) ; + $rect_height=$this->GetBBoxHeight($txt,$dir) ; + + $baseline_offset = $this->bbox_cache[1]-1; + + if( $this->text_halign=="center" ) { + if( $dir >= 0 && $dir <= 90 ) { + + $x -= $rect_width/2; + $x += sin($dir*M_PI/180)*$height; + $y += $rect_height/2; + + } elseif( $dir >= 270 && $dir <= 360 ) { + + $x -= $rect_width/2; + $y -= $rect_height/2; + $y += cos($dir*M_PI/180)*$height; + + } elseif( $dir >= 90 && $dir <= 180 ) { + + $x += $rect_width/2; + $y += $rect_height/2; + $y += cos($dir*M_PI/180)*$height; + + } + else { + // $dir > 180 && $dir < 270 + $x += $rect_width/2; + $x += sin($dir*M_PI/180)*$height; + $y -= $rect_height/2; + } + } + + // Rotate the box around this point + $this->SetCenter($x,$y); + $olda = $this->SetAngle(-$dir); + + // We need to use adjusted coordinats for the box to be able + // to draw the box below the baseline. This cannot be done before since + // the rotating point must be the original x,y since that is arounbf the + // point where the text will rotate and we cannot change this since + // that is where the GD/GreeType will rotate the text + + + // For smaller <14pt font we need to do some additional + // adjustments to make it look good + if( $this->font_size < 14 ) { + $x -= 2; + $y += 2; + } + else { + // $y += $baseline_offset; + } + + if( $shadowcolor ) { + $this->PushColor($shadowcolor); + $this->FilledRectangle($x-$xmarg+$dropwidth,$y+$ymarg+$dropwidth-$height, + $x+$width+$dropwidth,$y+$ymarg+$dropwidth); + //$cornerradius); + $this->PopColor(); + $this->PushColor($fcolor); + $this->FilledRectangle($x-$xmarg, $y+$ymarg-$height, + $x+$width, $y+$ymarg); + //$cornerradius); + $this->PopColor(); + $this->PushColor($bcolor); + $this->Rectangle($x-$xmarg,$y+$ymarg-$height, + $x+$width,$y+$ymarg); + //$cornerradius); + $this->PopColor(); + } + else { + if( $fcolor ) { + $oc=$this->current_color; + $this->SetColor($fcolor); + $this->FilledRectangle($x-$xmarg,$y+$ymarg-$height,$x+$width,$y+$ymarg);//,$cornerradius); + $this->current_color=$oc; + } + if( $bcolor ) { + $oc=$this->current_color; + $this->SetColor($bcolor); + $this->Rectangle($x-$xmarg,$y+$ymarg-$height,$x+$width,$y+$ymarg);//,$cornerradius); + $this->current_color=$oc; + } + } + + if( $this->font_size < 14 ) { + $x += 2; + $y -= 2; + } + else { + + // Restore the original y before we stroke the text + // $y -= $baseline_offset; + + } + + $this->SetCenter(0,0); + $this->SetAngle($olda); + + $h=$this->text_halign; + $v=$this->text_valign; + if( $this->text_halign == 'center') { + $this->SetTextAlign('center','basepoint'); + } + else { + $this->SetTextAlign('basepoint','basepoint'); + } + + $debug=false; + $this->StrokeText($x, $y, $txt, $dir, $paragraph_align,$debug); + + $bb = array($x-$xmarg, $y+$height-$ymarg, + $x+$width, $y+$height-$ymarg, + $x+$width, $y-$ymarg, + $x-$xmarg, $y-$ymarg); + + $this->SetTextAlign($h,$v); + $this->SetAngle($olda); + + $this->lastx = $oldx; + $this->lasty = $oldy; + + return $bb; + } + + // Set text alignment + function SetTextAlign($halign,$valign="bottom") { + $this->text_halign=$halign; + $this->text_valign=$valign; + } + + function _StrokeBuiltinFont($x,$y,$txt,$dir,$paragraph_align,&$aBoundingBox,$aDebug=false) { + + if( is_numeric($dir) && $dir!=90 && $dir!=0) + JpGraphError::RaiseL(25091);//(" Internal font does not support drawing text at arbitrary angle. Use TTF fonts instead."); + + $h=$this->GetTextHeight($txt); + $fh=$this->GetFontHeight(); + $w=$this->GetTextWidth($txt); + + if( $this->text_halign=="right") { + $x -= $dir==0 ? $w : $h; + } + elseif( $this->text_halign=="center" ) { + // For center we subtract 1 pixel since this makes the middle + // be prefectly in the middle + $x -= $dir==0 ? $w/2-1 : $h/2; + } + if( $this->text_valign=="top" ) { + $y += $dir==0 ? $h : $w; + } + elseif( $this->text_valign=="center" ) { + $y += $dir==0 ? $h/2 : $w/2; + } + + $use_font = $this->font_family; + + if( $dir==90 ) { + imagestringup($this->img,$use_font,(int)$x,(int)$y,$txt,$this->current_color); + $aBoundingBox = array(round($x),round($y),round($x),round($y-$w),round($x+$h),round($y-$w),round($x+$h),round($y)); + if( $aDebug ) { + // Draw bounding box + $this->PushColor('green'); + $this->Polygon($aBoundingBox,true); + $this->PopColor(); + } + } + else { + if( preg_match('/\n/',$txt ?: '') ) { + $tmp = preg_split('/\n/',$txt); + for($i=0; $i < count($tmp); ++$i) { + $w1 = $this->GetTextWidth($tmp[$i]); + if( $paragraph_align=="left" ) { + imagestring($this->img,$use_font,$x,$y-$h+1+$i*$fh,$tmp[$i],$this->current_color); + } + elseif( $paragraph_align=="right" ) { + imagestring($this->img,$use_font,$x+($w-$w1),$y-$h+1+$i*$fh,$tmp[$i],$this->current_color); + } + else { + imagestring($this->img,$use_font,$x+$w/2-$w1/2,$y-$h+1+$i*$fh,$tmp[$i],$this->current_color); + } + } + } + else { + //Put the text + imagestring($this->img,$use_font,(int)$x,(int)($y-$h+1),$txt ?: '',$this->current_color); + } + if( $aDebug ) { + // Draw the bounding rectangle and the bounding box + $p1 = array(round($x),round($y),round($x),round($y-$h),round($x+$w),round($y-$h),round($x+$w),round($y)); + + // Draw bounding box + $this->PushColor('green'); + $this->Polygon($p1,true); + $this->PopColor(); + + } + $aBoundingBox=array(round($x),round($y),round($x),round($y-$h),round($x+$w),round($y-$h),round($x+$w),round($y)); + } + } + + function AddTxtCR($aTxt) { + // If the user has just specified a '\n' + // instead of '\n\t' we have to add '\r' since + // the width will be too muchy otherwise since when + // we print we stroke the individually lines by hand. + $e = explode("\n",$aTxt); + $n = count($e); + for($i=0; $i<$n; ++$i) { + $e[$i]=str_replace("\r","",$e[$i]); + } + return implode("\n\r",$e); + } + + function NormAngle($a) { + // Normalize angle in degrees + // Normalize angle to be between 0-360 + while( $a > 360 ) + $a -= 360; + while( $a < -360 ) + $a += 360; + if( $a < 0 ) + $a = 360 + $a; + return $a; + } + + function imagettfbbox_fixed($size, $angle, $fontfile, $text) { + + + if( ! USE_LIBRARY_IMAGETTFBBOX ) { + + $bbox = @imagettfbbox($size, $angle, $fontfile, $text); + if( $bbox === false ) { + JpGraphError::RaiseL(25092,$this->font_file); + //("There is either a configuration problem with TrueType or a problem reading font file (".$this->font_file."). Make sure file exists and is in a readable place for the HTTP process. (If 'basedir' restriction is enabled in PHP then the font file must be located in the document root.). It might also be a wrongly installed FreeType library. Try uppgrading to at least FreeType 2.1.13 and recompile GD with the correct setup so it can find the new FT library."); + } + $this->bbox_cache = $bbox; + return $bbox; + } + + // The built in imagettfbbox is buggy for angles != 0 so + // we calculate this manually by getting the bounding box at + // angle = 0 and then rotate the bounding box manually + $bbox = @imagettfbbox($size, 0, $fontfile, $text); + if( $bbox === false ) { + JpGraphError::RaiseL(25092,$this->font_file); + //("There is either a configuration problem with TrueType or a problem reading font file (".$this->font_file."). Make sure file exists and is in a readable place for the HTTP process. (If 'basedir' restriction is enabled in PHP then the font file must be located in the document root.). It might also be a wrongly installed FreeType library. Try uppgrading to at least FreeType 2.1.13 and recompile GD with the correct setup so it can find the new FT library."); + } + + $angle = $this->NormAngle($angle); + + $a = $angle*M_PI/180; + $ca = cos($a); + $sa = sin($a); + $ret = array(); + + // We always add 1 pixel to the left since the left edge of the bounding + // box is sometimes coinciding with the first pixel of the text + //$bbox[0] -= 1; + //$bbox[6] -= 1; + + // For roatated text we need to add extra width for rotated + // text since the kerning and stroking of the TTF is not the same as for + // text at a 0 degree angle + + if( $angle > 0.001 && abs($angle-360) > 0.001 ) { + $h = abs($bbox[7]-$bbox[1]); + $w = abs($bbox[2]-$bbox[0]); + + $bbox[0] -= 2; + $bbox[6] -= 2; + // The width is underestimated so compensate for that + $bbox[2] += round($w*0.06); + $bbox[4] += round($w*0.06); + + // and we also need to compensate with increased height + $bbox[5] -= round($h*0.1); + $bbox[7] -= round($h*0.1); + + if( $angle > 90 ) { + // For angles > 90 we also need to extend the height further down + // by the baseline since that is also one more problem + $bbox[1] += round($h*0.15); + $bbox[3] += round($h*0.15); + + // and also make it slighty less height + $bbox[7] += round($h*0.05); + $bbox[5] += round($h*0.05); + + // And we need to move the box slightly top the rright (from a tetx perspective) + $bbox[0] += round($w*0.02); + $bbox[6] += round($w*0.02); + + if( $angle > 180 ) { + // And we need to move the box slightly to the left (from a text perspective) + $bbox[0] -= round($w*0.02); + $bbox[6] -= round($w*0.02); + $bbox[2] -= round($w*0.02); + $bbox[4] -= round($w*0.02); + + } + + } + for($i = 0; $i < 7; $i += 2) { + $ret[$i] = round($bbox[$i] * $ca + $bbox[$i+1] * $sa); + $ret[$i+1] = round($bbox[$i+1] * $ca - $bbox[$i] * $sa); + } + $this->bbox_cache = $ret; + return $ret; + } + else { + $this->bbox_cache = $bbox; + return $bbox; + } + } + + // Deprecated + function GetTTFBBox($aTxt,$aAngle=0) { + $bbox = $this->imagettfbbox_fixed($this->font_size,$aAngle,$this->font_file,$aTxt); + return $bbox; + } + + function GetBBoxTTF($aTxt,$aAngle=0) { + // Normalize the bounding box to become a minimum + // enscribing rectangle + + $aTxt = $this->AddTxtCR($aTxt); + + if( !is_readable($this->font_file) ) { + JpGraphError::RaiseL(25093,$this->font_file); + //('Can not read font file ('.$this->font_file.') in call to Image::GetBBoxTTF. Please make sure that you have set a font before calling this method and that the font is installed in the TTF directory.'); + } + $bbox = $this->imagettfbbox_fixed($this->font_size,$aAngle,$this->font_file,$aTxt); + + if( $aAngle==0 ) return $bbox; + + if( $aAngle >= 0 ) { + if( $aAngle <= 90 ) { //<=0 + $bbox = array($bbox[6],$bbox[1],$bbox[2],$bbox[1], + $bbox[2],$bbox[5],$bbox[6],$bbox[5]); + } + elseif( $aAngle <= 180 ) { //<= 2 + $bbox = array($bbox[4],$bbox[7],$bbox[0],$bbox[7], + $bbox[0],$bbox[3],$bbox[4],$bbox[3]); + } + elseif( $aAngle <= 270 ) { //<= 3 + $bbox = array($bbox[2],$bbox[5],$bbox[6],$bbox[5], + $bbox[6],$bbox[1],$bbox[2],$bbox[1]); + } + else { + $bbox = array($bbox[0],$bbox[3],$bbox[4],$bbox[3], + $bbox[4],$bbox[7],$bbox[0],$bbox[7]); + } + } + elseif( $aAngle < 0 ) { + if( $aAngle <= -270 ) { // <= -3 + $bbox = array($bbox[6],$bbox[1],$bbox[2],$bbox[1], + $bbox[2],$bbox[5],$bbox[6],$bbox[5]); + } + elseif( $aAngle <= -180 ) { // <= -2 + $bbox = array($bbox[0],$bbox[3],$bbox[4],$bbox[3], + $bbox[4],$bbox[7],$bbox[0],$bbox[7]); + } + elseif( $aAngle <= -90 ) { // <= -1 + $bbox = array($bbox[2],$bbox[5],$bbox[6],$bbox[5], + $bbox[6],$bbox[1],$bbox[2],$bbox[1]); + } + else { + $bbox = array($bbox[0],$bbox[3],$bbox[4],$bbox[3], + $bbox[4],$bbox[7],$bbox[0],$bbox[7]); + } + } + return $bbox; + } + + function GetBBoxHeight($aTxt,$aAngle=0) { + $box = $this->GetBBoxTTF($aTxt,$aAngle); + return abs($box[7]-$box[1]); + } + + function GetBBoxWidth($aTxt,$aAngle=0) { + $box = $this->GetBBoxTTF($aTxt,$aAngle); + return $box[2]-$box[0]+1; + } + + + function _StrokeTTF($x,$y,$txt,$dir,$paragraph_align,&$aBoundingBox,$debug=false) { + + // Setup default inter line margin for paragraphs to be + // 3% of the font height. + $ConstLineSpacing = 0.03 ; + + // Remember the anchor point before adjustment + if( $debug ) { + $ox=$x; + $oy=$y; + } + + if( !preg_match('/\n/',$txt) || ($dir>0 && preg_match('/\n/',$txt)) ) { + // Format a single line + + $txt = $this->AddTxtCR($txt); + $bbox=$this->GetBBoxTTF($txt,$dir); + $width = $this->GetBBoxWidth($txt,$dir); + $height = $this->GetBBoxHeight($txt,$dir); + + // The special alignment "basepoint" is mostly used internally + // in the library. This will put the anchor position at the left + // basepoint of the tetx. This is the default anchor point for + // TTF text. + + if( $this->text_valign != 'basepoint' ) { + // Align x,y ot lower left corner of bbox + + + if( $this->text_halign=='right' ) { + $x -= $width; + $x -= $bbox[0]; + } + elseif( $this->text_halign=='center' ) { + $x -= $width/2; + $x -= $bbox[0]; + } + elseif( $this->text_halign=='baseline' ) { + // This is only support for text at 90 degree !! + // Do nothing the text is drawn at baseline by default + } + + if( $this->text_valign=='top' ) { + $y -= $bbox[1]; // Adjust to bottom of text + $y += $height; + } + elseif( $this->text_valign=='center' ) { + $y -= $bbox[1]; // Adjust to bottom of text + $y += $height/2; + } + elseif( $this->text_valign=='baseline' ) { + // This is only support for text at 0 degree !! + // Do nothing the text is drawn at baseline by default + } + } + ImageTTFText ($this->img, $this->font_size, $dir, (int)$x, (int)$y, + $this->current_color,$this->font_file,$txt); + + // Calculate and return the co-ordinates for the bounding box + $box = $this->imagettfbbox_fixed($this->font_size,$dir,$this->font_file,$txt); + $p1 = array(); + + for($i=0; $i < 4; ++$i) { + $p1[] = round($box[$i*2]+$x); + $p1[] = round($box[$i*2+1]+$y); + } + $aBoundingBox = $p1; + + // Debugging code to highlight the bonding box and bounding rectangle + // For text at 0 degrees the bounding box and bounding rectangle are the + // same + if( $debug ) { + // Draw the bounding rectangle and the bounding box + + $p = array(); + $p1 = array(); + + for($i=0; $i < 4; ++$i) { + $p[] = $bbox[$i*2]+$x ; + $p[] = $bbox[$i*2+1]+$y; + $p1[] = $box[$i*2]+$x ; + $p1[] = $box[$i*2+1]+$y ; + } + + // Draw bounding box + $this->PushColor('green'); + $this->Polygon($p1,true); + $this->PopColor(); + + // Draw bounding rectangle + $this->PushColor('darkgreen'); + $this->Polygon($p,true); + $this->PopColor(); + + // Draw a cross at the anchor point + $this->PushColor('red'); + $this->Line($ox-15,$oy,$ox+15,$oy); + $this->Line($ox,$oy-15,$ox,$oy+15); + $this->PopColor(); + } + } + else { + // Format a text paragraph + $fh=$this->GetFontHeight(); + + // Line margin is 25% of font height + $linemargin=round($fh*$ConstLineSpacing); + $fh += $linemargin; + $w=$this->GetTextWidth($txt); + + $y -= $linemargin/2; + $tmp = preg_split('/\n/',$txt); + $nl = count($tmp); + $h = $nl * $fh; + + if( $this->text_halign=='right') { + $x -= $dir==0 ? $w : $h; + } + elseif( $this->text_halign=='center' ) { + $x -= $dir==0 ? $w/2 : $h/2; + } + + if( $this->text_valign=='top' ) { + $y += $dir==0 ? $h : $w; + } + elseif( $this->text_valign=='center' ) { + $y += $dir==0 ? $h/2 : $w/2; + } + + // Here comes a tricky bit. + // Since we have to give the position for the string at the + // baseline this means thaht text will move slightly up + // and down depending on any of it's character descend below + // the baseline, for example a 'g'. To adjust the Y-position + // we therefore adjust the text with the baseline Y-offset + // as used for the current font and size. This will keep the + // baseline at a fixed positoned disregarding the actual + // characters in the string. + $standardbox = $this->GetTTFBBox('Gg',$dir); + $yadj = $standardbox[1]; + $xadj = $standardbox[0]; + $aBoundingBox = array(); + for($i=0; $i < $nl; ++$i) { + $wl = $this->GetTextWidth($tmp[$i]); + $bbox = $this->GetTTFBBox($tmp[$i],$dir); + if( $paragraph_align=='left' ) { + $xl = $x; + } + elseif( $paragraph_align=='right' ) { + $xl = $x + ($w-$wl); + } + else { + // Center + $xl = $x + $w/2 - $wl/2 ; + } + + // In theory we should adjust with full pre-lead to get the lines + // lined up but this doesn't look good so therfore we only adjust with + // half th pre-lead + $xl -= $bbox[0]/2; + $yl = $y - $yadj; + //$xl = $xl- $xadj; + ImageTTFText($this->img, $this->font_size, $dir, (int)$xl, (int)($yl-($h-$fh)+$fh*$i), + $this->current_color,$this->font_file,$tmp[$i]); + + // echo "xl=$xl,".$tmp[$i]."
    "; + if( $debug ) { + // Draw the bounding rectangle around each line + $box=@ImageTTFBBox($this->font_size,$dir,$this->font_file,$tmp[$i]); + $p = array(); + for($j=0; $j < 4; ++$j) { + $p[] = $bbox[$j*2]+$xl; + $p[] = $bbox[$j*2+1]+$yl-($h-$fh)+$fh*$i; + } + + // Draw bounding rectangle + $this->PushColor('darkgreen'); + $this->Polygon($p,true); + $this->PopColor(); + } + } + + // Get the bounding box + $bbox = $this->GetBBoxTTF($txt,$dir); + for($j=0; $j < 4; ++$j) { + $bbox[$j*2]+= round($x); + $bbox[$j*2+1]+= round($y - ($h-$fh) - $yadj); + } + $aBoundingBox = $bbox; + + if( $debug ) { + // Draw a cross at the anchor point + $this->PushColor('red'); + $this->Line($ox-25,$oy,$ox+25,$oy); + $this->Line($ox,$oy-25,$ox,$oy+25); + $this->PopColor(); + } + + } + } + + function StrokeText($x,$y,$txt,$dir=0,$paragraph_align="left",$debug=false) { + + $x = round($x); + $y = round($y); + + // Do special language encoding + $txt = $this->langconv->Convert($txt,$this->font_family); + + if( !is_numeric($dir) ) { + JpGraphError::RaiseL(25094);//(" Direction for text most be given as an angle between 0 and 90."); + } + + if( $this->font_family >= FF_FONT0 && $this->font_family <= FF_FONT2+1) { + $this->_StrokeBuiltinFont($x,$y,$txt,$dir,$paragraph_align,$boundingbox,$debug); + } + elseif( $this->font_family >= _FIRST_FONT && $this->font_family <= _LAST_FONT) { + $this->_StrokeTTF($x,$y,$txt,$dir,$paragraph_align,$boundingbox,$debug); + } + else { + JpGraphError::RaiseL(25095);//(" Unknown font font family specification. "); + } + return $boundingbox; + } + + function SetMargin($lm,$rm,$tm,$bm) { + + $this->left_margin=$lm; + $this->right_margin=$rm; + $this->top_margin=$tm; + $this->bottom_margin=$bm; + + $this->plotwidth = $this->width - $this->left_margin - $this->right_margin; + $this->plotheight = $this->height - $this->top_margin - $this->bottom_margin; + + if( $this->width > 0 && $this->height > 0 ) { + if( $this->plotwidth < 0 || $this->plotheight < 0 ) { + JpGraphError::RaiseL(25130, $this->plotwidth, $this->plotheight); + //JpGraphError::raise("To small plot area. ($lm,$rm,$tm,$bm : $this->plotwidth x $this->plotheight). With the given image size and margins there is to little space left for the plot. Increase the plot size or reduce the margins."); + } + } + } + + function SetTransparent($color) { + imagecolortransparent ($this->img,$this->rgb->allocate($color)); + } + + function SetColor($color,$aAlpha=0) { + $this->current_color_name = $color; + $this->current_color=$this->rgb->allocate($color,$aAlpha); + if( $this->current_color == -1 ) { + $tc=imagecolorstotal($this->img); + JpGraphError::RaiseL(25096); + //("Can't allocate any more colors. Image has already allocated maximum of $tc colors. This might happen if you have anti-aliasing turned on together with a background image or perhaps gradient fill since this requires many, many colors. Try to turn off anti-aliasing. If there is still a problem try downgrading the quality of the background image to use a smaller pallete to leave some entries for your graphs. You should try to limit the number of colors in your background image to 64. If there is still problem set the constant DEFINE(\"USE_APPROX_COLORS\",true); in jpgraph.php This will use approximative colors when the palette is full. Unfortunately there is not much JpGraph can do about this since the palette size is a limitation of current graphic format and what the underlying GD library suppports."); + } + return $this->current_color; + } + + function PushColor($color) { + if( $color != "" ) { + $this->colorstack[$this->colorstackidx]=$this->current_color_name; + $this->colorstack[$this->colorstackidx+1]=$this->current_color; + $this->colorstackidx+=2; + $this->SetColor($color); + } + else { + JpGraphError::RaiseL(25097);//("Color specified as empty string in PushColor()."); + } + } + + function PopColor() { + if( $this->colorstackidx < 1 ) { + JpGraphError::RaiseL(25098);//(" Negative Color stack index. Unmatched call to PopColor()"); + } + $this->current_color=$this->colorstack[--$this->colorstackidx]; + $this->current_color_name=$this->colorstack[--$this->colorstackidx]; + } + + + function SetLineWeight($weight) { + $old = $this->line_weight; + imagesetthickness($this->img,$weight); + $this->line_weight = $weight; + return $old; + } + + function SetStartPoint($x,$y) { + $this->lastx=round($x); + $this->lasty=round($y); + } + + function Arc($cx,$cy,$w,$h,$s,$e) { + // GD Arc doesn't like negative angles + while( $s < 0) $s += 360; + while( $e < 0) $e += 360; + imagearc($this->img,round($cx),round($cy),round($w),round($h),$s,$e,$this->current_color); + } + + function FilledArc($xc,$yc,$w,$h,$s,$e,$style='') { + $s = round($s); + $e = round($e); + while( $s < 0 ) $s += 360; + while( $e < 0 ) $e += 360; + if( $style=='' ) + $style=IMG_ARC_PIE; + if( abs($s-$e) > 0 ) { + imagefilledarc($this->img,round($xc),round($yc),round($w),round($h),$s,$e,$this->current_color,$style); +// $this->DrawImageSmoothArc($this->img,round($xc),round($yc),round($w),round($h),$s,$e,$this->current_color,$style); + } + } + + function FilledCakeSlice($cx,$cy,$w,$h,$s,$e) { + $this->CakeSlice($cx,$cy,$w,$h,$s,$e,$this->current_color_name); + } + + function CakeSlice($xc,$yc,$w,$h,$s,$e,$fillcolor="",$arccolor="") { + $s = round($s); $e = round($e); + $w = round($w); $h = round($h); + $xc = round($xc); $yc = round($yc); + if( $s == $e ) { + // A full circle. We draw this a plain circle + $this->PushColor($fillcolor); + imagefilledellipse($this->img,$xc,$yc,2*$w,2*$h,$this->current_color); + + // If antialiasing is used then we often don't have any color no the surrounding + // arc. So, we need to check for this special case so we don't send an empty + // color to the push function. In this case we use the fill color for the arc as well + if( $arccolor != '' ) { + $this->PopColor(); + $this->PushColor($arccolor); + } + imageellipse($this->img,$xc,$yc,2*$w,2*$h,$this->current_color); + $this->Line($xc,$yc,cos($s*M_PI/180)*$w+$xc,$yc+sin($s*M_PI/180)*$h); + $this->PopColor(); + } + else { + $this->PushColor($fillcolor); + $this->FilledArc($xc,$yc,2*$w,2*$h,$s,$e); + $this->PopColor(); + if( $arccolor != "" ) { + $this->PushColor($arccolor); + // We add 2 pixels to make the Arc() better aligned with + // the filled arc. + imagefilledarc($this->img,$xc,$yc,2*$w,2*$h,$s,$e,$this->current_color,IMG_ARC_NOFILL | IMG_ARC_EDGED ) ; + $this->PopColor(); + } + } + } + + function Ellipse($xc,$yc,$w,$h) { + $this->Arc($xc,$yc,$w,$h,0,360); + } + + function Circle($xc,$yc,$r) { + imageellipse($this->img,round($xc),round($yc),$r*2,$r*2,$this->current_color); +// $this->DrawImageSmoothArc($this->img,round($xc),round($yc),$r*2+1,$r*2+1,0,360,$this->current_color); +// $this->imageSmoothCircle($this->img, round($xc),round($yc), $r*2+1, $this->current_color); + } + + function FilledCircle($xc,$yc,$r) { + imagefilledellipse($this->img,round($xc),round($yc),2*$r,2*$r,$this->current_color); +// $this->DrawImageSmoothArc($this->img, round($xc), round($yc), 2*$r, 2*$r, 0, 360, $this->current_color); + } + + // Linear Color InterPolation + function lip($f,$t,$p) { + $p = round($p,1); + $r = $f[0] + ($t[0]-$f[0])*$p; + $g = $f[1] + ($t[1]-$f[1])*$p; + $b = $f[2] + ($t[2]-$f[2])*$p; + return array($r,$g,$b); + } + + // Set line style dashed, dotted etc + function SetLineStyle($s) { + if( is_numeric($s) ) { + if( $s<1 || $s>4 ) { + JpGraphError::RaiseL(25101,$s);//(" Illegal numeric argument to SetLineStyle(): ($s)"); + } + } + elseif( is_string($s) ) { + if( $s == "solid" ) $s=1; + elseif( $s == "dotted" ) $s=2; + elseif( $s == "dashed" ) $s=3; + elseif( $s == "longdashed" ) $s=4; + else { + JpGraphError::RaiseL(25102,$s);//(" Illegal string argument to SetLineStyle(): $s"); + } + } + else { + JpGraphError::RaiseL(25103,$s);//(" Illegal argument to SetLineStyle $s"); + } + $old = $this->line_style; + $this->line_style=$s; + return $old; + } + + // Same as Line but take the line_style into account + function StyleLine($x1,$y1,$x2,$y2,$aStyle='', $from_grid_class = false) { + if( $this->line_weight <= 0 ) return; + + if( $aStyle === '' ) { + $aStyle = $this->line_style; + } + + $dashed_line_method = 'DashedLine'; + if ($from_grid_class) { + $dashed_line_method = 'DashedLineForGrid'; + } + + // Add error check since dashed line will only work if anti-alias is disabled + // this is a limitation in GD + + if( $aStyle == 1 ) { + // Solid style. We can handle anti-aliasing for this + $this->Line($x1,$y1,$x2,$y2); + } + else { + // Since the GD routines doesn't handle AA for styled line + // we have no option than to turn it off to get any lines at + // all if the weight > 1 + $oldaa = $this->GetAntiAliasing(); + if( $oldaa && $this->line_weight > 1 ) { + $this->SetAntiAliasing(false); + } + + switch( $aStyle ) { + case 2: // Dotted + $this->$dashed_line_method($x1,$y1,$x2,$y2,2,6); + break; + case 3: // Dashed + $this->$dashed_line_method($x1,$y1,$x2,$y2,5,9); + break; + case 4: // Longdashes + $this->$dashed_line_method($x1,$y1,$x2,$y2,9,13); + break; + default: + JpGraphError::RaiseL(25104,$this->line_style);//(" Unknown line style: $this->line_style "); + break; + } + if( $oldaa ) { + $this->SetAntiAliasing(true); + } + } + } + + function DashedLine($x1,$y1,$x2,$y2,$dash_length=1,$dash_space=4) { + + if( $this->line_weight <= 0 ) return; + + // Add error check to make sure anti-alias is not enabled. + // Dashed line does not work with anti-alias enabled. This + // is a limitation in GD. + if( $this->use_anti_aliasing ) { +// JpGraphError::RaiseL(25129); // Anti-alias can not be used with dashed lines. Please disable anti-alias or use solid lines. + } + + $x1 = round($x1); + $x2 = round($x2); + $y1 = round($y1); + $y2 = round($y2); + + $dash_length *= SUPERSAMPLING_SCALE; + $dash_space *= SUPERSAMPLING_SCALE; + + $style = array_fill(0,$dash_length,$this->current_color); + $style = array_pad($style,$dash_space,IMG_COLOR_TRANSPARENT); + imagesetstyle($this->img, $style); + imageline($this->img, $x1, $y1, $x2, $y2, IMG_COLOR_STYLED); + + $this->lastx = $x2; + $this->lasty = $y2; + } + + function DashedLineForGrid($x1,$y1,$x2,$y2,$dash_length=1,$dash_space=4) { + + if( $this->line_weight <= 0 ) return; + + // Add error check to make sure anti-alias is not enabled. + // Dashed line does not work with anti-alias enabled. This + // is a limitation in GD. + if( $this->use_anti_aliasing ) { +// JpGraphError::RaiseL(25129); // Anti-alias can not be used with dashed lines. Please disable anti-alias or use solid lines. + } + + $x1 = round($x1); + $x2 = round($x2); + $y1 = round($y1); + $y2 = round($y2); + + /* + $dash_length *= $this->scale; + $dash_space *= $this->scale; + */ + + $dash_length = 2; + $dash_length = 4; + imagesetthickness($this->img, 1); + $style = array_fill(0,$dash_length, $this->current_color); //hexdec('CCCCCC')); + $style = array_pad($style,$dash_space,IMG_COLOR_TRANSPARENT); + imagesetstyle($this->img, $style); + imageline($this->img, $x1, $y1, $x2, $y2, IMG_COLOR_STYLED); + + $this->lastx = $x2; + $this->lasty = $y2; + } + + function Line($x1,$y1,$x2,$y2) { + + if( $this->line_weight <= 0 ) return; + + $x1 = round($x1); + $x2 = round($x2); + $y1 = round($y1); + $y2 = round($y2); + + imageline($this->img,$x1,$y1,$x2,$y2,$this->current_color); +// $this->DrawLine($this->img, $x1, $y1, $x2, $y2, $this->line_weight, $this->current_color); + $this->lastx=$x2; + $this->lasty=$y2; + } + + function Polygon($p,$closed=FALSE,$fast=FALSE) { + + if( $this->line_weight <= 0 ) return; + + $n=count($p); + $oldx = $p[0]; + $oldy = $p[1]; + if( $fast ) { + for( $i=2; $i < $n; $i+=2 ) { + imageline($this->img,$oldx,$oldy,$p[$i],$p[$i+1],$this->current_color); + $oldx = $p[$i]; + $oldy = $p[$i+1]; + } + if( $closed ) { + imageline($this->img,$p[$n*2-2],$p[$n*2-1],$p[0],$p[1],$this->current_color); + } + } + else { + for( $i=2; $i < $n; $i+=2 ) { + $this->StyleLine($oldx,$oldy,$p[$i],$p[$i+1]); + $oldx = $p[$i]; + $oldy = $p[$i+1]; + } + if( $closed ) { + $this->StyleLine($oldx,$oldy,$p[0],$p[1]); + } + } + } + + function FilledPolygon($pts) { + $n=count($pts); + if( $n == 0 ) { + JpGraphError::RaiseL(25105);//('NULL data specified for a filled polygon. Check that your data is not NULL.'); + } + for($i=0; $i < $n; ++$i) { + $pts[$i] = round($pts[$i]); + } + $old = $this->line_weight; + imagesetthickness($this->img,1); + if (CheckPHPVersion('8.1.0')) { + imagefilledpolygon($this->img,$pts,$this->current_color); + } else { + imagefilledpolygon($this->img,$pts,count($pts)/2,$this->current_color); + } + $this->line_weight = $old; + imagesetthickness($this->img,$old); + } + + function Rectangle($xl,$yu,$xr,$yl) { + $this->Polygon(array($xl,$yu,$xr,$yu,$xr,$yl,$xl,$yl,$xl,$yu)); + } + + function FilledRectangle($xl,$yu,$xr,$yl) { + $this->FilledPolygon(array($xl,$yu,$xr,$yu,$xr,$yl,$xl,$yl)); + } + + function FilledRectangle2($xl,$yu,$xr,$yl,$color1,$color2,$style=1) { + // Fill a rectangle with lines of two colors + if( $style===1 ) { + // Horizontal stripe + if( $yl < $yu ) { + $t = $yl; $yl=$yu; $yu=$t; + } + for( $y=$yu; $y <= $yl; ++$y) { + $this->SetColor($color1); + $this->Line($xl,$y,$xr,$y); + ++$y; + $this->SetColor($color2); + $this->Line($xl,$y,$xr,$y); + } + } + else { + if( $xl < $xl ) { + $t = $xl; $xl=$xr; $xr=$t; + } + for( $x=$xl; $x <= $xr; ++$x) { + $this->SetColor($color1); + $this->Line($x,$yu,$x,$yl); + ++$x; + $this->SetColor($color2); + $this->Line($x,$yu,$x,$yl); + } + } + } + + function ShadowRectangle($xl,$yu,$xr,$yl,$fcolor=false,$shadow_width=4,$shadow_color='darkgray',$useAlpha=true) { + // This is complicated by the fact that we must also handle the case where + // the reactangle has no fill color + $xl = floor($xl); + $yu = floor($yu); + $xr = floor($xr); + $yl = floor($yl); + $this->PushColor($shadow_color); + $shadowAlpha=0; + $this->SetLineWeight(1); + $this->SetLineStyle('solid'); + $basecolor = $this->rgb->Color($shadow_color); + $shadow_color = array($basecolor[0],$basecolor[1],$basecolor[2],); + for( $i=0; $i < $shadow_width; ++$i ) { + $this->SetColor($shadow_color,$shadowAlpha); + $this->Line($xr-$shadow_width+$i, $yu+$shadow_width, + $xr-$shadow_width+$i, $yl-$shadow_width-1+$i); + $this->Line($xl+$shadow_width, $yl-$shadow_width+$i, + $xr-$shadow_width+$i, $yl-$shadow_width+$i); + if( $useAlpha ) $shadowAlpha += 1.0/$shadow_width; + } + + $this->PopColor(); + if( $fcolor==false ) { + $this->Rectangle($xl,$yu,$xr-$shadow_width-1,$yl-$shadow_width-1); + } + else { + $this->PushColor($fcolor); + $this->FilledRectangle($xl,$yu,$xr-$shadow_width-1,$yl-$shadow_width-1); + $this->PopColor(); + $this->Rectangle($xl,$yu,$xr-$shadow_width-1,$yl-$shadow_width-1); + } + } + + function FilledRoundedRectangle($xt,$yt,$xr,$yl,$r=5) { + if( $r==0 ) { + $this->FilledRectangle($xt,$yt,$xr,$yl); + return; + } + + // To avoid overlapping fillings (which will look strange + // when alphablending is enabled) we have no choice but + // to fill the five distinct areas one by one. + + // Center square + $this->FilledRectangle($xt+$r,$yt+$r,$xr-$r,$yl-$r); + // Top band + $this->FilledRectangle($xt+$r,$yt,$xr-$r,$yt+$r); + // Bottom band + $this->FilledRectangle($xt+$r,$yl-$r,$xr-$r,$yl); + // Left band + $this->FilledRectangle($xt,$yt+$r,$xt+$r,$yl-$r); + // Right band + $this->FilledRectangle($xr-$r,$yt+$r,$xr,$yl-$r); + + // Topleft & Topright arc + $this->FilledArc($xt+$r,$yt+$r,$r*2,$r*2,180,270); + $this->FilledArc($xr-$r,$yt+$r,$r*2,$r*2,270,360); + + // Bottomleft & Bottom right arc + $this->FilledArc($xt+$r,$yl-$r,$r*2,$r*2,90,180); + $this->FilledArc($xr-$r,$yl-$r,$r*2,$r*2,0,90); + + } + + function RoundedRectangle($xt,$yt,$xr,$yl,$r=5) { + + if( $r==0 ) { + $this->Rectangle($xt,$yt,$xr,$yl); + return; + } + + // Top & Bottom line + $this->Line($xt+$r,$yt,$xr-$r,$yt); + $this->Line($xt+$r,$yl,$xr-$r,$yl); + + // Left & Right line + $this->Line($xt,$yt+$r,$xt,$yl-$r); + $this->Line($xr,$yt+$r,$xr,$yl-$r); + + // Topleft & Topright arc + $this->Arc($xt+$r,$yt+$r,$r*2,$r*2,180,270); + $this->Arc($xr-$r,$yt+$r,$r*2,$r*2,270,360); + + // Bottomleft & Bottomright arc + $this->Arc($xt+$r,$yl-$r,$r*2,$r*2,90,180); + $this->Arc($xr-$r,$yl-$r,$r*2,$r*2,0,90); + } + + function FilledBevel($x1,$y1,$x2,$y2,$depth=2,$color1='white@0.4',$color2='darkgray@0.4') { + $this->FilledRectangle($x1,$y1,$x2,$y2); + $this->Bevel($x1,$y1,$x2,$y2,$depth,$color1,$color2); + } + + function Bevel($x1,$y1,$x2,$y2,$depth=2,$color1='white@0.4',$color2='black@0.5') { + $this->PushColor($color1); + for( $i=0; $i < $depth; ++$i ) { + $this->Line($x1+$i,$y1+$i,$x1+$i,$y2-$i); + $this->Line($x1+$i,$y1+$i,$x2-$i,$y1+$i); + } + $this->PopColor(); + + $this->PushColor($color2); + for( $i=0; $i < $depth; ++$i ) { + $this->Line($x1+$i,$y2-$i,$x2-$i,$y2-$i); + $this->Line($x2-$i,$y1+$i,$x2-$i,$y2-$i-1); + } + $this->PopColor(); + } + + function StyleLineTo($x,$y) { + $this->StyleLine($this->lastx,$this->lasty,$x,$y); + $this->lastx=$x; + $this->lasty=$y; + } + + function LineTo($x,$y) { + $this->Line($this->lastx,$this->lasty,$x,$y); + $this->lastx=$x; + $this->lasty=$y; + } + + function Point($x,$y) { + imagesetpixel($this->img,round($x),round($y),$this->current_color); + } + + function Fill($x,$y) { + imagefill($this->img,round($x),round($y),$this->current_color); + } + + function FillToBorder($x,$y,$aBordColor) { + $bc = $this->rgb->allocate($aBordColor); + if( $bc == -1 ) { + JpGraphError::RaiseL(25106);//('Image::FillToBorder : Can not allocate more colors'); + } + imagefilltoborder($this->img,round($x),round($y),$bc,$this->current_color); + } + + function SetExpired($aFlg=true) { + $this->expired = $aFlg; + } + + // Generate image header + function Headers() { + + // In case we are running from the command line with the client version of + // PHP we can't send any headers. + $sapi = php_sapi_name(); + if( $sapi == 'cli' ) return; + + // These parameters are set by headers_sent() but they might cause + // an undefined variable error unless they are initilized + $file=''; + $lineno=''; + if( headers_sent($file,$lineno) ) { + $file=basename($file); + $t = new ErrMsgText(); + $msg = $t->Get(10,$file,$lineno); + die($msg); + } + + if ($this->expired) { + header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); + header("Cache-Control: no-cache, must-revalidate"); + header("Pragma: no-cache"); + } + header("Content-type: image/$this->img_format"); + } + + // Adjust image quality for formats that allow this + function SetQuality($q) { + $this->quality = $q; + } + + // Stream image to browser or to file + function Stream($aFile=NULL) { + $this->DoSupersampling(); + + $func="image".$this->img_format; + if( $this->img_format=="jpeg" && $this->quality != null ) { + $res = @$func($this->img,$aFile,$this->quality); + + if(!$res){ + if($aFile != NULL){ + JpGraphError::RaiseL(25107,$aFile);//("Can't write to file '$aFile'. Check that the process running PHP has enough permission."); + }else{ + JpGraphError::RaiseL(25108);//("Can't stream image. This is most likely due to a faulty PHP/GD setup. Try to recompile PHP and use the built-in GD library that comes with PHP."); + } + + } + } + else { + if( $aFile != NULL ) { + $res = @$func($this->img,$aFile); + if( !$res ) { + JpGraphError::RaiseL(25107,$aFile);//("Can't write to file '$aFile'. Check that the process running PHP has enough permission."); + } + } + else { + $res = @$func($this->img); + if( !$res ) { + JpGraphError::RaiseL(25108);//("Can't stream image. This is most likely due to a faulty PHP/GD setup. Try to recompile PHP and use the built-in GD library that comes with PHP."); + } + + } + } + } + + // Do SuperSampling using $scale + function DoSupersampling() { + if (SUPERSAMPLING_SCALE <= 1) { + return $this->img; + } + + $dst_img = @imagecreatetruecolor($this->original_width, $this->original_height); + imagecopyresampled($dst_img, $this->img, 0, 0, 0, 0, $this->original_width, $this->original_height, $this->width, $this->height); + $this->Destroy(); + return $this->img = $dst_img; + } + + // Clear resources used by image (this is normally not used since all resources are/should be + // returned when the script terminates + function Destroy() { + imagedestroy($this->img); + } + + // Specify image format. Note depending on your installation + // of PHP not all formats may be supported. + function SetImgFormat($aFormat,$aQuality=75) { + $this->quality = $aQuality; + $aFormat = strtolower($aFormat); + $tst = true; + $supported = imagetypes(); + if( $aFormat=="auto" ) { + if( $supported & IMG_PNG ) $this->img_format="png"; + elseif( $supported & IMG_JPG ) $this->img_format="jpeg"; + elseif( $supported & IMG_GIF ) $this->img_format="gif"; + elseif( $supported & IMG_WBMP ) $this->img_format="wbmp"; + elseif( $supported & IMG_XPM ) $this->img_format="xpm"; + else { + JpGraphError::RaiseL(25109);//("Your PHP (and GD-lib) installation does not appear to support any known graphic formats. You need to first make sure GD is compiled as a module to PHP. If you also want to use JPEG images you must get the JPEG library. Please see the PHP docs for details."); + } + return true; + } + else { + if( $aFormat=="jpeg" || $aFormat=="png" || $aFormat=="gif" ) { + if( $aFormat=="jpeg" && !($supported & IMG_JPG) ) $tst=false; + elseif( $aFormat=="png" && !($supported & IMG_PNG) ) $tst=false; + elseif( $aFormat=="gif" && !($supported & IMG_GIF) ) $tst=false; + elseif( $aFormat=="wbmp" && !($supported & IMG_WBMP) ) $tst=false; + elseif( $aFormat=="xpm" && !($supported & IMG_XPM) ) $tst=false; + else { + $this->img_format=$aFormat; + return true; + } + } + else { + $tst=false; + } + if( !$tst ) { + JpGraphError::RaiseL(25110,$aFormat);//(" Your PHP installation does not support the chosen graphic format: $aFormat"); + } + } + } + + /** + * Draw Line + */ + function DrawLine($im, $x1, $y1, $x2, $y2, $weight, $color) { + if ($weight == 1) { + return imageline($im,$x1,$y1,$x2,$y2,$color); + } + + $angle=(atan2(($y1 - $y2), ($x2 - $x1))); + + $dist_x = $weight * (sin($angle)) / 2; + $dist_y = $weight * (cos($angle)) / 2; + + $p1x=ceil(($x1 + $dist_x)); + $p1y=ceil(($y1 + $dist_y)); + $p2x=ceil(($x2 + $dist_x)); + $p2y=ceil(($y2 + $dist_y)); + $p3x=ceil(($x2 - $dist_x)); + $p3y=ceil(($y2 - $dist_y)); + $p4x=ceil(($x1 - $dist_x)); + $p4y=ceil(($y1 - $dist_y)); + + $array=array($p1x,$p1y,$p2x,$p2y,$p3x,$p3y,$p4x,$p4y); + if (CheckPHPVersion('8.1.0')) { + imagefilledpolygon ( $im, $array, $color ); + } else { + imagefilledpolygon ( $im, $array, (count($array)/2), $color ); + } + + // for antialias + imageline($im, $p1x, $p1y, $p2x, $p2y, $color); + imageline($im, $p3x, $p3y, $p4x, $p4y, $color); + return; + + + + return imageline($this->img,$x1,$y1,$x2,$y2,$this->current_color); + $weight = 8; + if ($weight <= 1) { + return imageline($this->img,$x1,$y1,$x2,$y2,$this->current_color); + } + + $pts = array(); + + $weight /= 2; + + if ($y2 - $y1 == 0) { + // x line + $pts = array(); + $pts[] = $x1; $pts[] = $y1 - $weight; + $pts[] = $x1; $pts[] = $y1 + $weight; + $pts[] = $x2; $pts[] = $y2 + $weight; + $pts[] = $x2; $pts[] = $y2 - $weight; + + } elseif ($x2 - $x1 == 0) { + // y line + $pts = array(); + $pts[] = $x1 - $weight; $pts[] = $y1; + $pts[] = $x1 + $weight; $pts[] = $y1; + $pts[] = $x2 + $weight; $pts[] = $y2; + $pts[] = $x2 - $weight; $pts[] = $y2; + + } else { + + var_dump($x1, $x2, $y1, $y2); + $length = sqrt(pow($x2 - $x1, 2) + pow($y2 - $y1, 2)); + var_dump($length);exit; + exit; + +/* + $lean = ($y2 - $y1) / ($x2 - $x1); + $lean2 = -1 / $lean; + $sin = $lean / ($y2 - $y1); + $cos = $lean / ($x2 - $x1); + + $pts[] = $x1 + (-$weight * $sin); $pts[] = $y1 + (-$weight * $cos); + $pts[] = $x1 + (+$weight * $sin); $pts[] = $y1 + (+$weight * $cos); + $pts[] = $x2 + (+$weight * $sin); $pts[] = $y2 + (+$weight * $cos); + $pts[] = $x2 + (-$weight * $sin); $pts[] = $y2 + (-$weight * $cos); +*/ + } + +//print_r($pts);exit; + if (count($pts)/2 < 3) { + return; + } + + imagesetthickness($im, 1); + if (CheckPHPVersion('8.1.0')) { + imagefilledpolygon($im, $pts, $color); + } else { + imagefilledpolygon($im, $pts,count($pts)/2, $color); + } + + + $weight *= 2; + +// $this->DrawImageSmoothArc($im, $x1, $y1, $weight, $weight, 0, 360, $color); +// $this->DrawImageSmoothArc($im, $x2, $y2, $weight, $weight, 0, 360, $color); + } + + + function DrawImageSmoothArc($im, $xc, $yc, $w, $h, $s, $e, $color, $style = null) { + $tmp = $s; + $s = (360 - $e) / 180 * M_PI; + $e = (360 - $tmp) / 180 * M_PI; + return imageSmoothArc($im, round($xc), round($yc), round($w), round($h), $this->CreateColorForImageSmoothArc($color), $s, $e); + } + + function CreateColorForImageSmoothArc($color) { + $alpha = $color >> 24 & 0xFF; + $red = $color >> 16 & 0xFF; + $green = $color >> 8 & 0xFF; + $blue = $color & 0xFF; + +//var_dump($alpha, $red, $green, $blue);exit; + + return array($red, $green, $blue, $alpha); + } + + function imageSmoothCircle( &$img, $cx, $cy, $cr, $color ) { + $ir = $cr; + $ix = 0; + $iy = $ir; + $ig = 2 * $ir - 3; + $idgr = -6; + $idgd = 4 * $ir - 10; + $fill = imageColorExactAlpha( $img, $color[ 'R' ], $color[ 'G' ], $color[ 'B' ], 0 ); + imageLine( $img, $cx + $cr - 1, $cy, $cx, $cy, $fill ); + imageLine( $img, $cx - $cr + 1, $cy, $cx - 1, $cy, $fill ); + imageLine( $img, $cx, $cy + $cr - 1, $cx, $cy + 1, $fill ); + imageLine( $img, $cx, $cy - $cr + 1, $cx, $cy - 1, $fill ); + $draw = imageColorExactAlpha( $img, $color[ 'R' ], $color[ 'G' ], $color[ 'B' ], 42 ); + imageSetPixel( $img, $cx + $cr, $cy, $draw ); + imageSetPixel( $img, $cx - $cr, $cy, $draw ); + imageSetPixel( $img, $cx, $cy + $cr, $draw ); + imageSetPixel( $img, $cx, $cy - $cr, $draw ); + while ( $ix <= $iy - 2 ) { + if ( $ig < 0 ) { + $ig += $idgd; + $idgd -= 8; + $iy--; + } else { + $ig += $idgr; + $idgd -= 4; + } + $idgr -= 4; + $ix++; + imageLine( $img, $cx + $ix, $cy + $iy - 1, $cx + $ix, $cy + $ix, $fill ); + imageLine( $img, $cx + $ix, $cy - $iy + 1, $cx + $ix, $cy - $ix, $fill ); + imageLine( $img, $cx - $ix, $cy + $iy - 1, $cx - $ix, $cy + $ix, $fill ); + imageLine( $img, $cx - $ix, $cy - $iy + 1, $cx - $ix, $cy - $ix, $fill ); + imageLine( $img, $cx + $iy - 1, $cy + $ix, $cx + $ix, $cy + $ix, $fill ); + imageLine( $img, $cx + $iy - 1, $cy - $ix, $cx + $ix, $cy - $ix, $fill ); + imageLine( $img, $cx - $iy + 1, $cy + $ix, $cx - $ix, $cy + $ix, $fill ); + imageLine( $img, $cx - $iy + 1, $cy - $ix, $cx - $ix, $cy - $ix, $fill ); + $filled = 0; + for ( $xx = $ix - 0.45; $xx < $ix + 0.5; $xx += 0.2 ) { + for ( $yy = $iy - 0.45; $yy < $iy + 0.5; $yy += 0.2 ) { + if ( sqrt( pow( $xx, 2 ) + pow( $yy, 2 ) ) < $cr ) $filled += 4; + } + } + $draw = imageColorExactAlpha( $img, $color[ 'R' ], $color[ 'G' ], $color[ 'B' ], ( 100 - $filled ) ); + imageSetPixel( $img, $cx + $ix, $cy + $iy, $draw ); + imageSetPixel( $img, $cx + $ix, $cy - $iy, $draw ); + imageSetPixel( $img, $cx - $ix, $cy + $iy, $draw ); + imageSetPixel( $img, $cx - $ix, $cy - $iy, $draw ); + imageSetPixel( $img, $cx + $iy, $cy + $ix, $draw ); + imageSetPixel( $img, $cx + $iy, $cy - $ix, $draw ); + imageSetPixel( $img, $cx - $iy, $cy + $ix, $draw ); + imageSetPixel( $img, $cx - $iy, $cy - $ix, $draw ); + } + } + + function __get($name) { + + if (strpos($name, 'raw_') !== false) { + // if $name == 'raw_left_margin' , return $this->_left_margin; + $variable_name = '_' . str_replace('raw_', '', $name); + return $this->$variable_name; + } + + $variable_name = '_' . $name; + + if (isset($this->$variable_name)) { + return $this->$variable_name * SUPERSAMPLING_SCALE; + } else { + JpGraphError::RaiseL('25132', $name); + } + } + + function __set($name, $value) { + $this->{'_'.$name} = $value; + } + +} // CLASS + +//=================================================== +// CLASS RotImage +// Description: Exactly as Image but draws the image at +// a specified angle around a specified rotation point. +//=================================================== +class RotImage extends Image { + public $a=0; + public $dx=0,$dy=0,$transx=0,$transy=0; + private $m=array(); + + function __construct($aWidth,$aHeight,$a=0,$aFormat=DEFAULT_GFORMAT,$aSetAutoMargin=true) { + parent::__construct($aWidth,$aHeight,$aFormat,$aSetAutoMargin); + $this->dx=$this->width/2; + $this->dy=$this->height/2; + $this->SetAngle($a); + } + + function SetCenter($dx,$dy) { + $old_dx = $this->dx; + $old_dy = $this->dy; + $this->dx=$dx; + $this->dy=$dy; + $this->SetAngle($this->a); + return array($old_dx,$old_dy); + } + + function SetTranslation($dx,$dy) { + $old = array($this->transx,$this->transy); + $this->transx = $dx; + $this->transy = $dy; + return $old; + } + + function UpdateRotMatrice() { + $a = $this->a; + $a *= M_PI/180; + $sa=sin($a); $ca=cos($a); + // Create the rotation matrix + $this->m[0][0] = $ca; + $this->m[0][1] = -$sa; + $this->m[0][2] = $this->dx*(1-$ca) + $sa*$this->dy ; + $this->m[1][0] = $sa; + $this->m[1][1] = $ca; + $this->m[1][2] = $this->dy*(1-$ca) - $sa*$this->dx ; + } + + function SetAngle($a) { + $tmp = $this->a; + $this->a = $a; + $this->UpdateRotMatrice(); + return $tmp; + } + + function Circle($xc,$yc,$r) { + list($xc,$yc) = $this->Rotate($xc,$yc); + parent::Circle($xc,$yc,$r); + } + + function FilledCircle($xc,$yc,$r) { + list($xc,$yc) = $this->Rotate($xc,$yc); + parent::FilledCircle($xc,$yc,$r); + } + + + function Arc($xc,$yc,$w,$h,$s,$e) { + list($xc,$yc) = $this->Rotate($xc,$yc); + $s += $this->a; + $e += $this->a; + parent::Arc($xc,$yc,$w,$h,$s,$e); + } + + function FilledArc($xc,$yc,$w,$h,$s,$e,$style='') { + list($xc,$yc) = $this->Rotate($xc,$yc); + $s += $this->a; + $e += $this->a; + parent::FilledArc($xc,$yc,$w,$h,$s,$e); + } + + function SetMargin($lm,$rm,$tm,$bm) { + parent::SetMargin($lm,$rm,$tm,$bm); + $this->UpdateRotMatrice(); + } + + function Rotate($x,$y) { + // Optimization. Ignore rotation if Angle==0 || Angle==360 + if( $this->a == 0 || $this->a == 360 ) { + return array($x + $this->transx, $y + $this->transy ); + } + else { + $x1=round($this->m[0][0]*$x + $this->m[0][1]*$y,1) + $this->m[0][2] + $this->transx; + $y1=round($this->m[1][0]*$x + $this->m[1][1]*$y,1) + $this->m[1][2] + $this->transy; + return array($x1,$y1); + } + } + + function CopyMerge($fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$fromWidth=-1,$fromHeight=-1,$aMix=100) { + list($toX,$toY) = $this->Rotate($toX,$toY); + parent::CopyMerge($fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$fromWidth,$fromHeight,$aMix); + + } + + function ArrRotate($pnts) { + $n = count($pnts)-1; + for($i=0; $i < $n; $i+=2) { + list ($x,$y) = $this->Rotate($pnts[$i],$pnts[$i+1]); + $pnts[$i] = $x; $pnts[$i+1] = $y; + } + return $pnts; + } + + function DashedLine($x1,$y1,$x2,$y2,$dash_length=1,$dash_space=4) { + list($x1,$y1) = $this->Rotate($x1,$y1); + list($x2,$y2) = $this->Rotate($x2,$y2); + parent::DashedLine($x1,$y1,$x2,$y2,$dash_length,$dash_space); + } + + function Line($x1,$y1,$x2,$y2) { + list($x1,$y1) = $this->Rotate($x1,$y1); + list($x2,$y2) = $this->Rotate($x2,$y2); + parent::Line($x1,$y1,$x2,$y2); + } + + function Rectangle($x1,$y1,$x2,$y2) { + // Rectangle uses Line() so it will be rotated through that call + parent::Rectangle($x1,$y1,$x2,$y2); + } + + function FilledRectangle($x1,$y1,$x2,$y2) { + if( $y1==$y2 || $x1==$x2 ) + $this->Line($x1,$y1,$x2,$y2); + else + $this->FilledPolygon(array($x1,$y1,$x2,$y1,$x2,$y2,$x1,$y2)); + } + + function Polygon($pnts,$closed=FALSE,$fast=FALSE) { + // Polygon uses Line() so it will be rotated through that call unless + // fast drawing routines are used in which case a rotate is needed + if( $fast ) { + parent::Polygon($this->ArrRotate($pnts)); + } + else { + parent::Polygon($pnts,$closed,$fast); + } + } + + function FilledPolygon($pnts) { + parent::FilledPolygon($this->ArrRotate($pnts)); + } + + function Point($x,$y) { + list($xp,$yp) = $this->Rotate($x,$y); + parent::Point($xp,$yp); + } + + function StrokeText($x,$y,$txt,$dir=0,$paragraph_align="left",$debug=false) { + list($xp,$yp) = $this->Rotate($x,$y); + return parent::StrokeText($xp,$yp,$txt,$dir,$paragraph_align,$debug); + } +} + +//======================================================================= +// CLASS ImgStreamCache +// Description: Handle caching of graphs to files. All image output goes +// through this class +//======================================================================= +class ImgStreamCache { + private $cache_dir, $timeout=0; // Infinite timeout + //--------------- + // CONSTRUCTOR + function __construct($aCacheDir=CACHE_DIR) { + $this->cache_dir = $aCacheDir; + } + + //--------------- + // PUBLIC METHODS + + // Specify a timeout (in minutes) for the file. If the file is older then the + // timeout value it will be overwritten with a newer version. + // If timeout is set to 0 this is the same as infinite large timeout and if + // timeout is set to -1 this is the same as infinite small timeout + function SetTimeout($aTimeout) { + $this->timeout=$aTimeout; + } + + // Output image to browser and also write it to the cache + function PutAndStream($aImage,$aCacheFileName,$aInline,$aStrokeFileName) { + + // Check if we should always stroke the image to a file + if( _FORCE_IMGTOFILE ) { + $aStrokeFileName = _FORCE_IMGDIR.GenImgName(); + } + + if( $aStrokeFileName != '' ) { + + if( $aStrokeFileName == 'auto' ) { + $aStrokeFileName = GenImgName(); + } + + if( file_exists($aStrokeFileName) ) { + + // Wait for lock (to make sure no readers are trying to access the image) + $fd = fopen($aStrokeFileName,'w'); + $lock = flock($fd, LOCK_EX); + + // Since the image write routines only accepts a filename which must not + // exist we need to delete the old file first + if( !@unlink($aStrokeFileName) ) { + $lock = flock($fd, LOCK_UN); + JpGraphError::RaiseL(25111,$aStrokeFileName); + //(" Can't delete cached image $aStrokeFileName. Permission problem?"); + } + $aImage->Stream($aStrokeFileName); + $lock = flock($fd, LOCK_UN); + fclose($fd); + + } + else { + $aImage->Stream($aStrokeFileName); + } + + return; + } + + if( $aCacheFileName != '' && USE_CACHE) { + + $aCacheFileName = $this->cache_dir . $aCacheFileName; + if( file_exists($aCacheFileName) ) { + if( !$aInline ) { + // If we are generating image off-line (just writing to the cache) + // and the file exists and is still valid (no timeout) + // then do nothing, just return. + $diff=time()-filemtime($aCacheFileName); + if( $diff < 0 ) { + JpGraphError::RaiseL(25112,$aCacheFileName); + //(" Cached imagefile ($aCacheFileName) has file date in the future!!"); + } + if( $this->timeout>0 && ($diff <= $this->timeout*60) ) return; + } + + // Wait for lock (to make sure no readers are trying to access the image) + $fd = fopen($aCacheFileName,'w'); + $lock = flock($fd, LOCK_EX); + + if( !@unlink($aCacheFileName) ) { + $lock = flock($fd, LOCK_UN); + JpGraphError::RaiseL(25113,$aStrokeFileName); + //(" Can't delete cached image $aStrokeFileName. Permission problem?"); + } + $aImage->Stream($aCacheFileName); + $lock = flock($fd, LOCK_UN); + fclose($fd); + + } + else { + $this->MakeDirs(dirname($aCacheFileName)); + if( !is_writeable(dirname($aCacheFileName)) ) { + JpGraphError::RaiseL(25114,$aCacheFileName); + //('PHP has not enough permissions to write to the cache file '.$aCacheFileName.'. Please make sure that the user running PHP has write permission for this file if you wan to use the cache system with JpGraph.'); + } + $aImage->Stream($aCacheFileName); + } + + $res=true; + // Set group to specified + if( CACHE_FILE_GROUP != '' ) { + $res = @chgrp($aCacheFileName,CACHE_FILE_GROUP); + } + if( CACHE_FILE_MOD != '' ) { + $res = @chmod($aCacheFileName,CACHE_FILE_MOD); + } + if( !$res ) { + JpGraphError::RaiseL(25115,$aStrokeFileName); + //(" Can't set permission for cached image $aStrokeFileName. Permission problem?"); + } + + $aImage->Destroy(); + if( $aInline ) { + if ($fh = @fopen($aCacheFileName, "rb") ) { + $aImage->Headers(); + fpassthru($fh); + return; + } + else { + JpGraphError::RaiseL(25116,$aFile);//(" Cant open file from cache [$aFile]"); + } + } + } + elseif( $aInline ) { + $aImage->Headers(); + $aImage->Stream(); + return; + } + } + + function IsValid($aCacheFileName) { + $aCacheFileName = $this->cache_dir.$aCacheFileName; + if ( USE_CACHE && file_exists($aCacheFileName) ) { + $diff=time()-filemtime($aCacheFileName); + if( $this->timeout>0 && ($diff > $this->timeout*60) ) { + return false; + } + else { + return true; + } + } + else { + return false; + } + } + + function StreamImgFile($aImage,$aCacheFileName) { + $aCacheFileName = $this->cache_dir.$aCacheFileName; + if ( $fh = @fopen($aCacheFileName, 'rb') ) { + $lock = flock($fh, LOCK_SH); + $aImage->Headers(); + fpassthru($fh); + $lock = flock($fh, LOCK_UN); + fclose($fh); + return true; + } + else { + JpGraphError::RaiseL(25117,$aCacheFileName);//(" Can't open cached image \"$aCacheFileName\" for reading."); + } + } + + // Check if a given image is in cache and in that case + // pass it directly on to web browser. Return false if the + // image file doesn't exist or exists but is to old + function GetAndStream($aImage,$aCacheFileName) { + if( $this->Isvalid($aCacheFileName) ) { + return $this->StreamImgFile($aImage,$aCacheFileName); + } + else { + return false; + } + } + + //--------------- + // PRIVATE METHODS + // Create all necessary directories in a path + function MakeDirs($aFile) { + $dirs = array(); + // In order to better work when open_basedir is enabled + // we do not create directories in the root path + while ( $aFile != '/' && !(file_exists($aFile)) ) { + $dirs[] = $aFile.'/'; + $aFile = dirname($aFile); + } + for ($i = sizeof($dirs)-1; $i>=0; $i--) { + if(! @mkdir($dirs[$i],0777) ) { + JpGraphError::RaiseL(25118,$aFile);//(" Can't create directory $aFile. Make sure PHP has write permission to this directory."); + } + // We also specify mode here after we have changed group. + // This is necessary if Apache user doesn't belong the + // default group and hence can't specify group permission + // in the previous mkdir() call + if( CACHE_FILE_GROUP != "" ) { + $res=true; + $res =@chgrp($dirs[$i],CACHE_FILE_GROUP); + $res = @chmod($dirs[$i],0777); + if( !$res ) { + JpGraphError::RaiseL(25119,$aFile);//(" Can't set permissions for $aFile. Permission problems?"); + } + } + } + return true; + } +} // CLASS Cache + +?> diff --git a/Societes/ric/jpgraph/imageSmoothArc.php b/Societes/ric/jpgraph/imageSmoothArc.php new file mode 100755 index 00000000..a1d581ff --- /dev/null +++ b/Societes/ric/jpgraph/imageSmoothArc.php @@ -0,0 +1,344 @@ += abs($yStart)) { + $aaStartX = true; + } else { + $aaStartX = false; + } + if ($xStop >= $yStop) { + $aaStopX = true; + } else { + $aaStopX = false; + } + //$xp = +1; $yp = -1; $xa = +1; $ya = 0; + for ( $x = 0; $x < $a; $x += 1 ) { + /*$y = $b * sqrt( 1 - ($x*$x)/($a*$a) ); + + $error = $y - (int)($y); + $y = (int)($y); + + $diffColor = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error );*/ + + $_y1 = $dyStop*$x; + $_y2 = $dyStart*$x; + if ($xStart > $xStop) + { + $error1 = $_y1 - (int)($_y1); + $error2 = 1 - $_y2 + (int)$_y2; + $_y1 = $_y1-$error1; + $_y2 = $_y2+$error2; + } + else + { + $error1 = 1 - $_y1 + (int)$_y1; + $error2 = $_y2 - (int)($_y2); + $_y1 = $_y1+$error1; + $_y2 = $_y2-$error2; + } + /* + if ($aaStopX) + $diffColor1 = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error1 ); + if ($aaStartX) + $diffColor2 = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error2 ); + */ + + if ($seg == 0 || $seg == 2) + { + $i = $seg; + if (!($start > $i*M_PI/2 && $x > $xStart)) { + if ($i == 0) { + $xp = +1; $yp = -1; $xa = +1; $ya = 0; + } else { + $xp = -1; $yp = +1; $xa = 0; $ya = +1; + } + if ( $stop < ($i+1)*(M_PI/2) && $x <= $xStop ) { + $diffColor1 = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error1 ); + $y1 = $_y1; if ($aaStopX) imageSetPixel($img, $cx+$xp*($x)+$xa, $cy+$yp*($y1+1)+$ya, $diffColor1); + + } else { + $y = $b * sqrt( 1 - ($x*$x)/($a*$a) ); + $error = $y - (int)($y); + $y = (int)($y); + $diffColor = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error ); + $y1 = $y; if ($x < $aaAngleX ) imageSetPixel($img, $cx+$xp*$x+$xa, $cy+$yp*($y1+1)+$ya, $diffColor); + } + if ($start > $i*M_PI/2 && $x <= $xStart) { + $diffColor2 = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error2 ); + $y2 = $_y2; if ($aaStartX) imageSetPixel($img, $cx+$xp*$x+$xa, $cy+$yp*($y2-1)+$ya, $diffColor2); + } else { + $y2 = 0; + } + if ($y2 <= $y1) imageLine($img, $cx+$xp*$x+$xa, $cy+$yp*$y1+$ya , $cx+$xp*$x+$xa, $cy+$yp*$y2+$ya, $fillColor); + } + } + + if ($seg == 1 || $seg == 3) + { + $i = $seg; + if (!($stop < ($i+1)*M_PI/2 && $x > $xStop)) { + if ($i == 1) { + $xp = -1; $yp = -1; $xa = 0; $ya = 0; + } else { + $xp = +1; $yp = +1; $xa = 1; $ya = 1; + } + if ( $start > $i*M_PI/2 && $x < $xStart ) { + $diffColor2 = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error2 ); + $y1 = $_y2; if ($aaStartX) imageSetPixel($img, $cx+$xp*$x+$xa, $cy+$yp*($y1+1)+$ya, $diffColor2); + + } else { + $y = $b * sqrt( 1 - ($x*$x)/($a*$a) ); + $error = $y - (int)($y); + $y = (int) $y; + $diffColor = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error ); + $y1 = $y; if ($x < $aaAngleX ) imageSetPixel($img, $cx+$xp*$x+$xa, $cy+$yp*($y1+1)+$ya, $diffColor); + } + if ($stop < ($i+1)*M_PI/2 && $x <= $xStop) { + $diffColor1 = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error1 ); + $y2 = $_y1; if ($aaStopX) imageSetPixel($img, $cx+$xp*$x+$xa, $cy+$yp*($y2-1)+$ya, $diffColor1); + } else { + $y2 = 0; + } + if ($y2 <= $y1) imageLine($img, $cx+$xp*$x+$xa, $cy+$yp*$y1+$ya, $cx+$xp*$x+$xa, $cy+$yp*$y2+$ya, $fillColor); + } + } + } + + ///YYYYY + + for ( $y = 0; $y < $b; $y += 1 ) { + /*$x = $a * sqrt( 1 - ($y*$y)/($b*$b) ); + + $error = $x - (int)($x); + $x = (int)($x); + + $diffColor = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error ); + */ + $_x1 = $dxStop*$y; + $_x2 = $dxStart*$y; + if ($yStart > $yStop) + { + $error1 = $_x1 - (int)($_x1); + $error2 = 1 - $_x2 + (int)$_x2; + $_x1 = $_x1-$error1; + $_x2 = $_x2+$error2; + } + else + { + $error1 = 1 - $_x1 + (int)$_x1; + $error2 = $_x2 - (int)($_x2); + $_x1 = $_x1+$error1; + $_x2 = $_x2-$error2; + } +/* + if (!$aaStopX) + $diffColor1 = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error1 ); + if (!$aaStartX) + $diffColor2 = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error2 ); +*/ + + if ($seg == 0 || $seg == 2) + { + $i = $seg; + if (!($start > $i*M_PI/2 && $y > $yStop)) { + if ($i == 0) { + $xp = +1; $yp = -1; $xa = 1; $ya = 0; + } else { + $xp = -1; $yp = +1; $xa = 0; $ya = 1; + } + if ( $stop < ($i+1)*(M_PI/2) && $y <= $yStop ) { + $diffColor1 = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error1 ); + $x1 = $_x1; if (!$aaStopX) imageSetPixel($img, $cx+$xp*($x1-1)+$xa, $cy+$yp*($y)+$ya, $diffColor1); + } + if ($start > $i*M_PI/2 && $y < $yStart) { + $diffColor2 = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error2 ); + $x2 = $_x2; if (!$aaStartX) imageSetPixel($img, $cx+$xp*($x2+1)+$xa, $cy+$yp*($y)+$ya, $diffColor2); + } else { + $x = $a * sqrt( 1 - ($y*$y)/($b*$b) ); + $error = $x - (int)($x); + $x = (int)($x); + $diffColor = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error ); + $x1 = $x; if ($y < $aaAngleY && $y <= $yStop ) imageSetPixel($img, $cx+$xp*($x1+1)+$xa, $cy+$yp*$y+$ya, $diffColor); + } + } + } + + if ($seg == 1 || $seg == 3) + { + $i = $seg; + if (!($stop < ($i+1)*M_PI/2 && $y > $yStart)) { + if ($i == 1) { + $xp = -1; $yp = -1; $xa = 0; $ya = 0; + } else { + $xp = +1; $yp = +1; $xa = 1; $ya = 1; + } + if ( $start > $i*M_PI/2 && $y < $yStart ) { + $diffColor2 = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error2 ); + $x1 = $_x2; if (!$aaStartX) imageSetPixel($img, $cx+$xp*($x1-1)+$xa, $cy+$yp*$y+$ya, $diffColor2); + } + if ($stop < ($i+1)*M_PI/2 && $y <= $yStop) { + $diffColor1 = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error1 ); + $x2 = $_x1; if (!$aaStopX) imageSetPixel($img, $cx+$xp*($x2+1)+$xa, $cy+$yp*$y+$ya, $diffColor1); + } else { + $x = $a * sqrt( 1 - ($y*$y)/($b*$b) ); + $error = $x - (int)($x); + $x = (int)($x); + $diffColor = imageColorExactAlpha( $img, $color[0], $color[1], $color[2], 127-(127-$color[3])*$error ); + $x1 = $x; if ($y < $aaAngleY && $y < $yStart) imageSetPixel($img,$cx+$xp*($x1+1)+$xa, $cy+$yp*$y+$ya, $diffColor); + } + } + } + } +} + + +function imageSmoothArc ( &$img, $cx, $cy, $w, $h, $color, $start, $stop) +{ + // Originally written from scratch by Ulrich Mierendorff, 06/2006 + // Rewritten and improved, 04/2007, 07/2007 + // compared to old version: + // + Support for transparency added + // + Improved quality of edges & antialiasing + + // note: This function does not represent the fastest way to draw elliptical + // arcs. It was written without reading any papers on that subject. Better + // algorithms may be twice as fast or even more. + + // what it cannot do: It does not support outlined arcs, only filled + + // Parameters: + // $cx - Center of ellipse, X-coord + // $cy - Center of ellipse, Y-coord + // $w - Width of ellipse ($w >= 2) + // $h - Height of ellipse ($h >= 2 ) + // $color - Color of ellipse as a four component array with RGBA + // $start - Starting angle of the arc, no limited range! + // $stop - Stop angle of the arc, no limited range! + // $start _can_ be greater than $stop! + // If any value is not in the given range, results are undefined! + + // This script does not use any special algorithms, everything is completely + // written from scratch; see http://de.wikipedia.org/wiki/Ellipse for formulas. + + while ($start < 0) + $start += 2*M_PI; + while ($stop < 0) + $stop += 2*M_PI; + + while ($start > 2*M_PI) + $start -= 2*M_PI; + + while ($stop > 2*M_PI) + $stop -= 2*M_PI; + + + if ($start > $stop) + { + imageSmoothArc ( $img, $cx, $cy, $w, $h, $color, $start, 2*M_PI); + imageSmoothArc ( $img, $cx, $cy, $w, $h, $color, 0, $stop); + return; + } + + $a = 1.0*round ($w/2); + $b = 1.0*round ($h/2); + $cx = 1.0*round ($cx); + $cy = 1.0*round ($cy); + + $aaAngle = atan(($b*$b)/($a*$a)*tan(0.25*M_PI)); + $aaAngleX = $a*cos($aaAngle); + $aaAngleY = $b*sin($aaAngle); + + $a -= 0.5; // looks better... + $b -= 0.5; + + for ($i=0; $i<4;$i++) + { + if ($start < ($i+1)*M_PI/2) + { + if ($start > $i*M_PI/2) + { + if ($stop > ($i+1)*M_PI/2) + { + imageSmoothArcDrawSegment($img, $cx, $cy, $a, $b, $aaAngleX, $aaAngleY , $color, $start, ($i+1)*M_PI/2, $i); + } + else + { + imageSmoothArcDrawSegment($img, $cx, $cy, $a, $b, $aaAngleX, $aaAngleY, $color, $start, $stop, $i); + break; + } + } + else + { + if ($stop > ($i+1)*M_PI/2) + { + imageSmoothArcDrawSegment($img, $cx, $cy, $a, $b, $aaAngleX, $aaAngleY, $color, $i*M_PI/2, ($i+1)*M_PI/2, $i); + } + else + { + imageSmoothArcDrawSegment($img, $cx, $cy, $a, $b, $aaAngleX, $aaAngleY, $color, $i*M_PI/2, $stop, $i); + break; + } + } + } + } +} +?> diff --git a/Societes/ric/jpgraph/imgdata_balls.inc.php b/Societes/ric/jpgraph/imgdata_balls.inc.php new file mode 100755 index 00000000..ee5db492 --- /dev/null +++ b/Societes/ric/jpgraph/imgdata_balls.inc.php @@ -0,0 +1,1061 @@ + 'imgdata_large', + MARK_IMG_MBALL => 'imgdata_small', + MARK_IMG_SBALL => 'imgdata_xsmall', + MARK_IMG_BALL => 'imgdata_xsmall'); + protected $colors,$index,$maxidx; + private $colors_1 = array('blue','lightblue','brown','darkgreen', + 'green','purple','red','gray','yellow','silver','gray'); + private $index_1 = array('blue'=>9,'lightblue'=>1,'brown'=>6,'darkgreen'=>7, + 'green'=>8,'purple'=>4,'red'=>0,'gray'=>5,'silver'=>3,'yellow'=>2); + private $maxidx_1 = 9 ; + + private $colors_2 = array('blue','bluegreen','brown','cyan', + 'darkgray','greengray','gray','green', + 'greenblue','lightblue','lightred', + 'purple','red','white','yellow'); + + + private $index_2 = array('blue'=>9,'bluegreen'=>13,'brown'=>8,'cyan'=>12, + 'darkgray'=>5,'greengray'=>6,'gray'=>2,'green'=>10, + 'greenblue'=>3,'lightblue'=>1,'lightred'=>14, + 'purple'=>7,'red'=>0,'white'=>11,'yellow'=>4); + + private $maxidx_2 = 14 ; + + + private $colors_3 = array('bluegreen','cyan','darkgray','greengray', + 'gray','graypurple','green','greenblue','lightblue', + 'lightred','navy','orange','purple','red','yellow'); + + private $index_3 = array('bluegreen'=>1,'cyan'=>11,'darkgray'=>14,'greengray'=>10, + 'gray'=>3,'graypurple'=>4,'green'=>9,'greenblue'=>7, + 'lightblue'=>13,'lightred'=>0,'navy'=>2,'orange'=>12, + 'purple'=>8,'red'=>5,'yellow'=>6); + private $maxidx_3 = 14 ; + + protected $imgdata_large, $imgdata_small, $imgdata_xsmall ; + + + function GetImg($aMark,$aIdx) { + switch( $aMark ) { + case MARK_IMG_SBALL: + case MARK_IMG_BALL: + $this->colors = $this->colors_3; + $this->index = $this->index_3 ; + $this->maxidx = $this->maxidx_3 ; + break; + case MARK_IMG_MBALL: + $this->colors = $this->colors_2; + $this->index = $this->index_2 ; + $this->maxidx = $this->maxidx_2 ; + break; + default: + $this->colors = $this->colors_1; + $this->index = $this->index_1 ; + $this->maxidx = $this->maxidx_1 ; + break; + } + return parent::GetImg($aMark,$aIdx); + } + + function __construct() { + + //========================================================== + // File: bl_red.png + //========================================================== + $this->imgdata_large[0][0]= 1072 ; + $this->imgdata_large[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAByF'. + 'BMVEX/////////xsb/vb3/lIz/hIT/e3v/c3P/c2v/a2v/Y2P/'. + 'UlL/Skr/SkL/Qjn/MTH/MSn/KSn/ISH/IRj/GBj/GBD/EBD/EA'. + 'j/CAj/CAD/AAD3QkL3MTH3KSn3KSH3GBj3EBD3CAj3AAD1zMzv'. + 'QkLvISHvIRjvGBjvEBDvEAjvAADnUlLnSkrnMTnnKSnnIRjnGB'. + 'DnEBDnCAjnAADec3PeSkreISHeGBjeGBDeEAjWhITWa2vWUlLW'. + 'SkrWISnWGBjWEBDWEAjWCAjWAADOnp7Oa2vOGCHOGBjOGBDOEB'. + 'DOCAjOAADJrq7Gt7fGGBjGEBDGCAjGAADEpKS/v7+9QkK9GBC9'. + 'EBC9CAi9AAC1e3u1a2u1Skq1KSm1EBC1CAi1AACtEBCtCBCtCA'. + 'itAACngYGlCAilAACghIScOTmcCAicAACYgYGUGAiUCAiUAAiU'. + 'AACMKSmMEACMAACEa2uEGAiEAAB7GBh7CAB7AABzOTlzGBBzCA'. + 'BzAABrSkprOTlrGBhrAABjOTljAABaQkJaOTlaCABaAABSKSlS'. + 'GBhSAABKKSlKGBhKAABCGBhCCABCAAA5CAA5AAAxCAAxAAApCA'. + 'ApAAAhAAAYAACc9eRyAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgF'. + 'HUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkRFD'. + 'UHLytKAAAB4UlEQVR4nGNgIAK4mGjrmNq6BmFIWMmISUpKSmk5'. + 'B8ZEokj4qoiLiQCBgqald3xaBpKMj6y4sLCQkJCIvIaFV0RaUR'. + 'lCSk5cWEiAn19ASN7QwisuraihHiajKyEixM/NwckjoKrvEACU'. + 'qumpg7pAUlREiJdNmZmLT9/cMzwps7Smc3I2WEpGUkxYkJuFiY'. + 'lTxszePzY1v7Shc2oX2D+K4iLCgjzsrOw8embuYUmZeTVtPVOn'. + 'gqSslYAOF+Ln4ZHWtXMPTcjMrWno7J82rRgoZWOsqaCgrqaqqm'. + 'fn5peQmlsK1DR52vRaoFSIs5GRoYG5ub27n19CYm5pdVPnxKnT'. + 'pjWDpLydnZwcHTz8QxMSEnJLgDL9U6dNnQ6Sio4PDAgICA+PTU'. + 'zNzSkph8hADIxKS46Pj0tKTc3MLSksqWrtmQySAjuDIT8rKy0r'. + 'Kz+vtLSmur6jb9JUIJgGdjxDQUVRUVFpaUVNQ1NrZ9+kKVOmTZ'. + 'k6vR0sldJUAwQNTU2dnX0TgOJTQLrSIYFY2dPW1NbW2TNxwtQp'. + 'U6ZMmjJt2rRGWNB3TO7vnzh5MsgSoB6gy7sREdY7bRrQEDAGOb'. + 'wXOQW0TJsOEpwClmxBTTbZ7UDVIPkp7dkYaYqhuLa5trYYUxwL'. + 'AADzm6uekAAcXAAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: bl_bluegreen.png + //========================================================== + $this->imgdata_large[1][0]= 1368 ; + $this->imgdata_large[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMMFi8hE9b2uAAABOVJREFUeNq9lk2sJFUVx3+3qv'. + 'tW95t57zFvhiFxmCFRUJRoNCQiJARMhiFx/Igxii5goTG6ZDAu'. + '/EhcSCIrTAgLEiKsJ8ywABNZEMJXEDYCukAmjgjzBkK/j35V1d'. + '333FtV97io97pfzwxfG86qcu/N+Z3zP+fcW/Apmfk4hx57+R/6'. + 'Rqmc9ykhsWjlsUngAA1fXIQ7b73pI/186IGHnn9dH/8frC8v4I'. + 'PiG53uaerR4GmKkv31mB8cyfjd946ZTwR66qVX9OTWIi8UKUv9'. + 'BOrZXpYZvFeiBvzI0fgSUSFKwbVG+Pl1V3HH0VvNR4KeeukV/f'. + 'PmMmdHhst76aXD64AbeVQ9bjNHaiGOC2o3wLrAb2/4LL/84ffn'. + 'fCdzkOdayKpLppBemrBsU5Y1Zdmm9LJdGU6E/t4M24Q26jRDRL'. + 'j3mdc49cSTekFsMzs5XuTsyLDUNSDQ25NwKOly9YIl22MYhJr/'. + 'uoDtBBoT0CxBRGYOAhibIaOCe//2MpfM6KHnX9cXipSlbkKWmS'. + 'nk9iv38J0jixw7vJfrTMYBOvhSoQHJBS09ANELloAGDxW8tfoW'. + 'J+5/UC8CPS0LU7r3SpYarr7M8rmFjMPLXT6/33L4si7Z2GCrQC'. + '+0ctlOaNs9DReV8vSLr85ndPLpZ/WNvHW+01kAVFBOGvJx0wYg'. + 'Sp47RIQ4Emwa8FGJXlDxSCFo5YlVgAo2hwPue/hRndboTV3EW2'. + 'Wp3k6wBp8q56QiWzecW6vwQfnPRkAWhFgILnq08jQ+R2nlUzzN'. + 'uES9Q7Vd+9fba7NmWJW61db2247qACmcjxXr45psYphsFGSLBu'. + 'kIajxqtjNwHkvAjQt0sg3crhPA2+fPz0CuyNFOghsGsr19mnFg'. + 'DGwrRm8UoAtNmQPQtRXDgdC4HImCFEKcCE0oieUWUYq2LtbiGp'. + 'mBQmppfIkjw45DK0QNNkvQ0jMBtPL0UnDRM1rN+cxKwzvOo2NP'. + 'tykR9a1kfpZNDLMG6QDYJqCTBvUe1+uxs+YKyPoGrTwY2HhvC4'. + 'CDWQd5d4xNApNQEEMgjgLdUCLBQ5cprL/trwNwKG2IUmDqDFd5'. + 'sr5BWrlxuSdLDFEFlqAzXGc4zFjupqh6uqYihpxJcEgp026l2w'. + '7wFUv7Z6AvrfRo/n0OYzPwIKE3HUKAJg2otMBiElnsF7wngis9'. + '3ZDjNnLi7huCWUZfueZKTu/M0V3HvmkOFDVxVKDG04ScejSgW5'. + 'V0q5JYFEghuDLHlTmToqDeGOCKIVtrW9hsdmXufEcNLPSXuPHa'. + 'a+bvuh9df5AH/v5PDFmbWQC3Mx+TVvfGVTRB2CodNgT2JBX003'. + 'aANZAYS/BxCv32TV/l2C03G7jgmfjGiT/qmeEmibEYm7XzAO2k'. + 'A+pbgHhBgydqu54YO5eRiLCy7yDvPP6Xqf+5Z+Lu277OYuOpiw'. + 'H15oBmlNOMcmK5RbP+PrEscGU+DSAxdg4CICIkxnLP8aNz63Og'. + 'H3/rdvOb795GVhuaYo0oBc3GGrEsUPVTwO6a7LYd+X51x3Hu/t'. + 'lP5tS65FN+6okn9U+n/sqb596dTvhOF+02myXTmkQNrOw7yD3H'. + 'j14E+UDQjp24/0E9/eKrbA4HH3aMK1b2ccvXvswjv//1J/s5ud'. + 'Due/hRPfP+OmfOrk7vrn7a48ihA3zh8CH+8Iuffiw/n4r9H1ZZ'. + '0zz7G56hAAAAAElFTkSuQmCC' ; + + //========================================================== + // File: bl_yellow.png + //========================================================== + $this->imgdata_large[2][0]= 1101 ; + $this->imgdata_large[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAB2l'. + 'BMVEX//////////+///+f//9b//8b//73//7X//63//6X//5T/'. + '/4z//4T//3P//2v//1r//0r//0L//zH//yn//yH//xj//xD//w'. + 'j//wD/90L/9zn/9zH/9xj/9xD/9wj/9wD39yn37zn37zH37yH3'. + '7xD37wj37wDv70Lv50rv50Lv5znv5yHv5xjv5wjv5wDn51Ln5x'. + 'Dn3jHn3iHn3hjn3hDn3gje3oze3nPe3lLe1oze1nPe1lLe1ine'. + '1iHe1hje1hDe1gje1gDW1qXW1mvWzqXWzkLWzhjWzhDWzgjWzg'. + 'DOzrXOzq3OzpzOzgDOxkrOxinOxhjOxhDOxgjOxgDGxqXGxnvG'. + 'xmvGvRjGvRDGvQjGvQDFxbnAvr6/v7+9vaW9vZS9vQi9vQC9tR'. + 'C9tQi9tQC7u7W1tZS1tXu1tTG1tQi1rRC1rQi1rQCtrYytrSGt'. + 'rQitrQCtpYStpSGtpQitpQClpYSlpXulpQClnBClnAilnACcnG'. + 'ucnAicnACclAiclACUlFqUlCmUlAiUlACUjFKUjAiUjACMjFKM'. + 'jEqMjACMhACEhACEewB7ezF7exB7ewB7cwBzcylzcwBzaxBzaw'. + 'BraxhrawhrawBrYxBrYwBjYwBjWgBaWgBaUgCXBwRMAAAAAXRS'. + 'TlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAd'. + 'LdfvwAAAAHdElNRQfTAwkRFBKiJZ4hAAAB7ElEQVR4nI3S+1vS'. + 'UBgHcB67WJmIMWAVdDHEDLBC6Go0slj3Ft0m9RRBWQEmFZFDEM'. + 'Qgt0EMFBY7p/+198hj1kM/9N1+++x73rOd6XT/kStnTx4fPzd9'. + 'uwfOjFhomj7smAhwj/6Cm2O0xUwy6g7cCL99uCW3jtBmE7lsdr'. + 'fvejgpzP7uEDFRRoqy2k8xQPnypo2BUMP6waF9Vpf3ciiSzErL'. + 'XTkPc0zDe3bsHDAcc00yoVgqL3UWN2iENpspff+2vn6D0+NnZ9'. + '6lC5K6RuSqBTZn1O/a3rd7v/MSez+WyIpVFX8GuuCA9SjD4N6B'. + 'oRNTfo5PCAVR0fBXoIuOQzab1XjwwNHx00GOj8/nKtV1DdeArk'. + '24R+0ul9PjmbrHPYl+EipyU0OoQSjg8/m83kl/MMhx0fjCkqio'. + 'SMOE7t4JMAzDsizH81AqSdW2hroLPg4/CEF4PhKNx98vlevrbY'. + 'QQXgV6kXwVfjkTiSXmhYVcSa7DIE1DOENe7GM6lUym0l+EXKks'. + 'K20VAeH2M0JvVgrZfL5Qqkiy0lRVaMBd7H7EZUmsiJJcrTdVja'. + 'wGpdbTLj3/3qwrUOjAfGgg4LnNA5tdQx14Hm00QFBm65hfNzAm'. + '+yIFhFtzuj+z2MI/MQn6Uez5pz4Ua41G7VumB/6RX4zMr1TKBr'. + 'SXAAAAAElFTkSuQmCC' ; + + //========================================================== + // File: bl_silver.png + //========================================================== + $this->imgdata_large[3][0]= 1481 ; + $this->imgdata_large[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAADAF'. + 'BMVEUAAADOzs7Gxsa9vb21tbXOxsbOzsbGzsb3///O1ta1vb2c'. + 'paVSWlpKWlpSY2ve5+97hIze7/9aY2vO5/9zhJRaa3tSY3PGzt'. + 'aMlJxrc3tja3NKUlpCSlK1vcZze4RSWmPW5/+Upb3G3v9zhJxS'. + 'Y3t7jKVaa4TO3veltc6ElK1re5Rjc4ycpbV7hJRaY3M5QlLn7/'. + '/Gzt6lrb2EjJzO3v9ja3vG1ve9zu+1xueltdacrc6UpcaMnL1C'. + 'SlqElLV7jK1zhKVre5zW3u/O1ue1vc6ttcaMlKVze4xrc4RSWm'. + 'tKUmPG1v+9zve1xu+tveeltd6crdbe5/+9xt6cpb17hJxaY3s5'. + 'QlrW3vfO1u/Gzue1vdattc6lrcaUnLWMlK2EjKVze5Rrc4xja4'. + 'RSWnNKUmtCSmO9xuecpcZ7hKVaY4TW3v/O1vfGzu+1vd6ttdal'. + 'rc69xu+UnL2MlLWEjK1ze5xrc5R7hK1ja4zO1v+1veettd6lrd'. + 'aMlL3Gzv/39//W1t7Gxs61tb29vcatrbWlpa2cnKWUlJyEhIx7'. + 'e4TW1ufGxta1tcZSUlqcnK3W1u+UlKW9vda1tc57e4ytrcalpb'. + '1ra3vOzu9jY3OUlK29vd6MjKWEhJxaWmtSUmNzc4xKSlpjY3tK'. + 'SmNCQlqUjJzOxs7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAD///9fnkWVAAAAAnRSTlP/AOW3'. + 'MEoAAAABYktHRP+lB/LFAAAACXBIWXMAAABFAAAARQBP+QatAA'. + 'AB/klEQVR42mNgxAsYqCdd3+lcb4hLmj8wMMvEu8DCMqYbU9op'. + 'UEFB2MTb26eyysomFl06XEEhUCHLpAKo2z/fujikEUVaXUFBMB'. + 'BouLePuV+VVWGRciIXknSEsImCQd3//xwmPr65llaFcSFJHkjS'. + '3iYmWUDZ//8NfCr989NjNUMSUyTg0jneSiaCINn/gmlVQM12qg'. + 'lJnp5waTMTE5NAkCyHWZW/lXWNfUlikmdYK0zax7siS4EDKJtd'. + 'mQeU1XRwLBdLkRGASucWmGVnZ4dnhZvn5lmm29iVOWpnJqcuko'. + 'JKR1Wm5eTkRKYF5eblp9sU2ZeUJiV7zbfVg0pH56UFBQXNjIqK'. + 'jgkujItX1koKTVmYajsdKu2qETVhwgSXiUDZ2Bn9xqUeoZ5e0t'. + 'LzYYZ3B092ndjtOnmKTmycW1s7SHa+l5dtB8zlccE6RlN0dGbM'. + 'mDVbd5KupNBcL6+F82XgHouLj5vRP2PWLGNdd4+ppnxe8tJec6'. + 'XnNsKkm0uVQ5RDRHQTPTym68nPlZbvkfYCexsa5rpJ2qXa5Umm'. + 'ocmec3m8vHjmSs+fgxyhC5JDQ8WSPT2lvbzm8vDIe0nbtiBLN8'. + '8BigNdu1B6Lsje+fPbUFMLi5TMfGmvHi/puUAv23q2YCTFNqH5'. + 'MvPnSwPh3HasCbm3XUpv+nS5VtrkEkwAANSTpGHdye9PAAAASn'. + 'RFWHRzaWduYXR1cmUANGJkODkyYmE4MWZhNTk4MTIyNDJjNjUx'. + 'NzZhY2UxMDAzOGFhZjdhZWIyNzliNTM2ZGFmZDlkM2RiNDU3Zm'. + 'NlNT9CliMAAAAASUVORK5CYII=' ; + + //========================================================== + // File: bl_purple.png + //========================================================== + $this->imgdata_large[4][0]= 1149 ; + $this->imgdata_large[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAACAV'. + 'BMVEX/////////7///5///1v//xv//rf//pf//lP//jP//hP//'. + 'c///a///Wv//Wvf/Uv//Sv//Qv//Qvf/Off/Mf//Kf//If//If'. + 'f/GP//GPf/EP//EPf/CP//CPf/CO//AP//APf3Oe/3Kff3Ke/3'. + 'Ie/3GO/3EO/3AO/vSu/vSufvOefvMefvIefvGOfvEOfvCOfvAO'. + 'fnUufnSufnMd7nId7nGN7nGNbnEN7nCN7nAN7ejN7ejNbec97e'. + 'c9beUtbeQtbeIdbeGNbeENbeCNbeANbWpdbWa9bWQs7WGM7WEM'. + '7WCM7WAM7Otc7Orc7OnM7OSsbOIb3OGMbOEMbOCMbOAM7OAMbG'. + 'pcbGnMbGe8bGa8bGKbXGEL3GCL3GAL3FucXBu73AvsC/v7+9pb'. + '29Ka29GLW9ELW9CLW9AL29ALW5rrm1lLW1e7W1MbW1GKW1EK21'. + 'CLW1CK21AK2tjK2thKWtMaWtIaWtGJytCK2tCKWtAK2tAKWlhK'. + 'Wle6WlEJylCJylAKWlAJyca5ycGJScEJScCJScAJycAJSUWpSU'. + 'UoyUKZSUEIyUCIyUAJSUAIyMUoyMSoyMIYSMEISMCISMAIyMAI'. + 'SECHuEAISEAHt7MXt7EHt7CHt7AHt7AHNzKXNzEGtzAHNzAGtr'. + 'GGtrEGNrCGtrAGtrAGNjCFpjAGNjAFpaAFpaAFIpZn4bAAAAAX'. + 'RSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsS'. + 'AdLdfvwAAAAHdElNRQfTAwkRFB0ymoOwAAAB9UlEQVR4nGNgIA'. + 'K42hhqGtm5+WFIWClKycvLK6gbuARGoEj4aMjLSElISUir6Tt7'. + 'x+aEIWR8leQlwEBSTc/CK7awLguuR0lGQkJMVFRUTFJVzwko1d'. + 'oFk9OQl5IQE+Dh5hVR0TV3CkkvbJgyASJjDZIR5GBl5eRX0TH1'. + 'DEqrbJ2ypBEspSgvJSXKw8bMxMavbOLoGZNf1TZlybw4oIyfLN'. + 'BxotxsLEzsQiaOHkFpBQ2905esrAZK2SpIAaUEuDm5+LTNPAKj'. + 'C+pbps1evrIDKGWnLictKSkuLKyoZQyUya9o7Z2+YMXKGUApew'. + 'M9PTVdXR0TEwf3wOjUirruafOXL18xFyjl72Kpb25qaurg4REU'. + 'EFVe2zJ5zpLlK1aCpbydnZ2dnDwDA6NTopLLeiZNXbB8BcTAyP'. + 'TQ0JDg4KCY1NS83JKmiVOBepYvX9UPlAovzEiPSU/LLyior2vq'. + 'mjZr3vLlIF01IC+XVhUWFlZW1Lc290ycOGfxohVATSsXx4Oksn'. + 'vaWlsb2tq6J0+bM2/RohVA81asbIcEYueU3t7JU6ZNnwNyGkhm'. + '+cp5CRCppJnzZ8+ZM3/JUogECBbBIixr8Yqly8FCy8F6ltUgoj'. + 'lz7sqVK2ByK+cVMSCDxoUrwWDVysXt8WhJKqG4Y8bcuTP6qrGk'. + 'QwwAABiMu7T4HMi4AAAAAElFTkSuQmCC' ; + + //========================================================== + // File: bl_gray.png + //========================================================== + $this->imgdata_large[5][0]= 905 ; + $this->imgdata_large[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAABO1'. + 'BMVEX////////3///39/fv7+/e5+fW3t7Wzs7WxsbG1tbGzsbG'. + 'xsbDxMS/v7++wMC+v7+9zsa9xsa9vb29tbW9ra29pa24uLi1xs'. + 'a1vb21tbWxtrattbWmpqalra2cra2cpaWcnJycjIyUpaWUnJyU'. + 'lJSUjIyMnJyMnJSMlJSMlIyMjJSMjIyElJSElIyEjIyEhIR7jI'. + 'x7hIR7hHt7e3t7e3N7e2tzhIRze3tze3Nzc3Nre3trc3Nrc2tr'. + 'a2tjc3Njc2tja3Nja2tjY2NjWlpaa2taY2taY2NaY1paWlpaUl'. + 'JSY2NSY1pSWlpSWlJSUlJSUkpKWlpKWlJKUlpKUlJKUkpKSkpK'. + 'SkJCUlJCUkJCSkpCSkJCQkI5Sko5QkI5Qjk5OUI5OTkxQkIxOT'. + 'kxMTkxMTEpMTEhMTEhKSkYISEpy7AFAAAAAXRSTlMAQObYZgAA'. + 'AAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdE'. + 'lNRQfTAwkRFQfW40uLAAABx0lEQVR4nI3SbXfSMBQA4NV3nce5'. + 'TecAHUywRMHSgFuBCFsQUqwBS1OsWQh0GTj//y8wZUzdwQ/efM'. + 'tzcm/uuXdj4z9ic/PR9k4qk1qDnf0X2/uZzKt8GaRvSubg4LVp'. + 'mkWzCGAT/i3Zsm2XNQHLsm2n2937LaaNnGoJFAEo27B50qN0ay'. + 'Wg26lXsw8fP8nmzcJb2CbsnF5JmmCE8ncN404KvLfsYwd7/MdV'. + 'Pdgl/VbKMIzbuwVgVZw2JlSKJTVJ3609vWUY957lgAUd1KNcqr'. + 'yWnOcOPn8q7d5/8PywAqsOOiVDrn42NFk+HQ7dVuXNYeFdBTpN'. + 'nY5JdZl8xI5Y+HXYaTVqEDp1hAnRohZM03EUjMdhn5wghOoNnD'. + 'wSK7KiiDPqEtz+iD4ctdyAifNYzUnScBSxwPd6GLfRURW7Ay5i'. + 'pS5bmrY8348C5vvUI+TLiIVSJrVA0heK/GDkJxYMRoyfCSmk4s'. + 'uWc3yic/oBo4yF374LGQs5Xw0GyQljI8bYmEsxVUoKxa6HMpAT'. + 'vgyhU2mR8uU1pXmsa8ezqb6U4mwWF/5MeY8uLtQ0nmmQ8UWYvb'. + 'EcJaYWar7QhztrO5Wr4Q4hDbAG/4hfTAF2iCiWrCEAAAAASUVO'. + 'RK5CYII=' ; + + //========================================================== + // File: bl_brown.png + //========================================================== + $this->imgdata_large[6][0]= 1053 ; + $this->imgdata_large[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAABoV'. + 'BMVEX////Gzs7GvbXGrZTGpXu9nHO1nHO1nIy9taXGxs7GtaXO'. + 'nHPGlFrGjEq9hEq1hEqte0Klczmcazmce1KtnIzGxsbGvb3OlF'. + 'LOlFq9hFKte0qcc0KUYzGEWimMc1K9ta3OnGvOnGPWnGO9jFq9'. + 'jFKlc0KUazmMYzl7UilzUjGtpZzGxr3GnGPWpWvepXO1hFJ7Wj'. + 'FrSiFjUjG1ra3GnHPvxpT/5733zpythFKUa0KEYzlzUilaOSF7'. + 'Wjm9jErvvYz/99b///f/78bnrYS1hFqle0p7UjFrSiljQiFCMR'. + 'iMhHO9lGvGjFLWnGv/3q3////erXuthEqlc0paQiFKMRhSQin/'. + '1qX/997//++cc0pjSilaQilKORhCKRiclIy9pYzGlGPntYT33q'. + '3vvZSEWjlSOSE5KRB7c2O1lHutczmthFqte1JrWkqtjGtCKRBa'. + 'SjmljGuca0KMYzGMaznOztaclISUYzmEWjFKOSF7a1qEYzFaSi'. + 'GUjISEa0pKOSm9vb2llIxaQhg5IQiEc2tzY0paORilnJy1raVS'. + 'OSljUkJjWkKTpvQWAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHU'. + 'gAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkREiei'. + 'zP2EAAAB9UlEQVR4nGWS/VfSUBjHL5QluhhBxtwyWcCus5Blpm'. + 'wDC4ONaWXCyBi7RMZmpQ2Bypm9W/byV3cHHo/W88s95/s5z/d5'. + 'uwCcCh/4L3zAf+bs0NC588On9QAYGSUuBINk6GI4cmnsBLk8Go'. + '1SFEGMkzRzZeLq5JE8FvDHouw1lqXiCZJOcnCKnx4AcP0GBqmZ'. + 'mRgRT9MMB4Wbs7cGSXNRik3dnp9fiMUzNCNKgpzN9bsaWaQo9s'. + '7dfH7pXiFTZCBU1JK27LmtBO8TDx7mV1eXHqXXyiIUFLWiVzHx'. + 'BxcJIvV4/cn6wkqmWOOwmVE3UQOAp6HxRKL5bGPj+VwhUhalFq'. + '8alm5vAt+LlySZTsebzcKrraIIW4JqZC3N3ga+1+EQTZKZta1M'. + 'pCZCSeDViqVrThsEdsLJZLJYLpZrHVGScrKBvTQNtQHY6XIM02'. + 'E6Ik7odRW1Dzy3N28n3kGuB3tQagm7UMBFXI/sATAs7L5vdbEs'. + '8Lycm923NB0j5wMe6KOsKIIyxcuqauxbrmlqyEWfPmPy5assY1'. + 'U1SvWKZWom9nK/HfQ3+v2HYZSMStayTNN0PYKqg11P1nWsWq7u'. + '4gJeY8g9PLrddNXRdW8Iryv86I3ja/9s26gvukhDdvUQnIjlKr'. + 'IdZCNH+3Xw779qbG63f//ZOzb6C4+ofdbzERrSAAAAAElFTkSu'. + 'QmCC' ; + + //========================================================== + // File: bl_darkgreen.png + //========================================================== + $this->imgdata_large[7][0]= 1113 ; + $this->imgdata_large[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAB2l'. + 'BMVEX////////3///v///n/+/e99bW/+/W99bO786/v7++vr69'. + '/96999a7wb24vbu1/9a1zqW1u7itxrWosq6l772l1qWlxrWlxq'. + '2lva2cxpSU562U3q2UxqWUvaWUpZyM77WM57WMvYyMtZyMrZyM'. + 'pZSMnJSEvZyEtYyErZSElIx7zpR7xpx7xpR7vZR7jIRz1pRzxp'. + 'RzjIRrzpRrzoxrxoxrtYRrrYxrrXtrpYRrhHNjzoxjxoxjxoRj'. + 'vYRjtYRjrXtjpXtjlGNje2tazoxazoRaxoxaxoRavYRatYRatX'. + 'tarXtapXNanHNajFpae2tSzoRSxoRSvXtStXtSrXtSrXNSpXNS'. + 'nHNSnGtSlGtSlGNSjGtSjGNKvXtKtXNKrXNKpWtKnGtKlGNKjG'. + 'NKhGNKhFJKc1pKa1JCrWtCpWtCnGtClGNCjGNCjFpChFpCe1JC'. + 'a1JCY1I5pWs5nGM5lGM5jFo5hFo5e1o5c0o5WkoxjFoxhFoxhF'. + 'Ixe1Ixc1Ixc0oxa0ophFIpe0opc0opa0opa0IpY0IpWkIpWjkp'. + 'UkIpUjkhc0oha0IhY0IhWjkhWjEhUjkhUjEhSjEhSikhQjEhQi'. + 'kYWjkYSjEYSikYQjEYQikQSikQQikQQiEQOSExf8saAAAAAXRS'. + 'TlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAd'. + 'LdfvwAAAAHdElNRQfTAwkRFCaDkWqUAAAB+ElEQVR4nI3S+1vS'. + 'UBgHcGZlPV0ks/vFrmQWFimJjiwiYUJWjFBWFhClyZCy5hLrwA'. + 'x2EIwJC1w7zf2vnU0re+iHvs9++7x7zznvORbLf+TA6ct9fYMX'. + 'jrfAUYefpp+/iM1ykxf/lmuhUZ/PTwXC8dml5Wcd23o5H5Mk6b'. + '5NUU8icXbhS67rNzn9JDnguOEYGQtEEtwC+Crs3RJ76P5A/znr'. + 'vsNX7wQnEiwHCtK7TTkW8rvdZ9uJtvZTLkxpHhSrP66bNEj7/P'. + '3WNoLYeeSWQQCIpe9lQw7RNEU5rDsIYtcJ14Nocg7kRUlBNkxn'. + 'YmGKcp7cv3vPwR7XOJPmc0VYU3Sv0e9NOBAYG7Hbz/cMjTMveZ'. + 'CHkqxuTBv0PhYJB4N3XR6PJ5rMAPMnpGUxDX1IxSeMTEaZp1OZ'. + 'nGAIQiYtsalUIhFlmGTy3sO3AizJCKn6DKYryxzHsWyaneMzr6'. + 'cWxRVZVlFTe4SpE3zm+U/4+whyiwJcWVMQNr3XONirVWAklxcE'. + 'EdbqchPhjhVzGpeqhUKhWBQhLElr9fo3pDaQPrw5xOl1CGG1JE'. + 'k1uYEBIVkrb02+o6RItfq6rBhbw/tuINT96766KhuqYpY3UFPF'. + 'BbY/19yZ1XF1U0UNBa9T7rZsz80K0jWk6bpWGW55UzbvTHZ+3t'. + 'vbAv/IT+K1uCmhIrKJAAAAAElFTkSuQmCC' ; + + //========================================================== + // File: bl_green.png + //========================================================== + $this->imgdata_large[8][0]= 1484 ; + $this->imgdata_large[8][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMMFjM4kcoDJQAABVlJREFUeNq9ll2MJFUVx3/11V'. + 'Vd/TE9vU0v4zLDwJIF16jBqLAPhsRXEiDqg0QTJiQSjcSNvCzw'. + 'sBEDDxizhvAAxBgf1oR9QF9NiE9ESFZkQyZB5WtddmdnZ3qqqr'. + 'uqbt367Cofqu3ZZpWVaDzJfbkf53//55z/PVdZXV3l/2H6f7Lp'. + '5VdOV/4Nb+GmHpUeA7AdBNxc3kafNb73jRPK9Xwon8ToxVefqU'. + 'b91wibH5EkCQBCizFihTSviHUHR0hWws9xe3wvJ7/7nPKpgX5y'. + '9oFqt3eOgWniRBoAbUBGGqZUibSYaeoT2B5bnkdaSA6793Cv/S'. + 'QPPbihXBfo5VdOV+8dfgnvwAU62YH5fCZ12sDujFkwyegCqTrB'. + 'iUOKTOJKj8jr88jS8zy6cXwBTP048nuHX0I0nDlIp7RpTG7kM0'. + 'sdyAYsTVukUuWGhlWHMq0ITL92lnUp9R1Obz/GmTNnqn9bDD8/'. + '+0D1oX0O0zQZZDYCsK2j3Gl9jQqDfHiei8GfiKVLlsZkJaBAN1'. + '0i6PgwUbB0GxG5/PrtE/xLRr959Znqw9452oVNI+jiJhnr1pe4'. + 'k29zB1/nFr5Kj7tpt1YYhJ0FJ7nUYbcJQBgahN2MzeCP/OipR6'. + 'prgN6Qr6ELFQFUWoRpNVjlKwxZB8DCpE+PtfEKqV1cUzxpVudu'. + 'GTBHA5Y1g99e+dUio9O/P1Vpq+/WE5GGjDSMoAtAQjrf3C52IP'. + 'QxpY4WK2hpReka9Gfrhqgz0bACRoCWjDh56kQ1z9FeuUUQxVhK'. + 'B92sD1VahM+bAJgcoJhGjP/6Ln8rAgDiRCVRKiIzxMkkodBJ85'. + 'im1IlEHbE4k1xyNveL4YP8HarmGJIOpqyjeQmfNHmTvnqZTWBt'. + 'vIJXpPwlukJSuSTKGK3pEwtJmiX00ZlInTyNscImO6XBITvH1c'. + '8vVt2OucdKvIyeKRTNCivsEMgcpg6taYs30nfq0Gqg6hOSSFJ4'. + 'BSnJPht0IqEjWmOGocEI6F0J94F0qaL6BntTF0MtUfweKQKAPU'. + 'Wwp4OcVnQAmVb0p9DLOzjEhEKnGRmoRc7EzRGlwA6NujAKG4yP'. + '6Sjwc4aVznZ7DK0xXdkDoJf0kGmFBniFBOBGcZSCCSKd0IwN0k'. + 'IS+QZWCGVZex4BnUxya3+Zt9iugQbcRFpIAtuHvAZulPUdLhUJ'. + 'RqegI3WcqaSXddlT3idsWMSRRGkEtNwmyTifAwyBo7LP+11J0e'. + '7tM7pZOYblHkBLcqZ5LcYtw6Wbd4CM3SpE9foYZsIHoqDKCrbz'. + 'mLSQtPwmuhXgtBLs0GBdbXOhFGB7WBKO2F8GXt9/VO97Ya3atF'. + '7nUHnwGjGGQqcPxFEdFqURkEidiZszAERoYIsGju1hq21kWee3'. + 'bw15+8WpsvAy3K1+i3JkkhZyPpxxjjPOsfOYiZ+TFhLPzQnHOU'. + 'tpzGB2dgA4tscIkKIx19Cxg/fPL7vQJu47eXt1VvsDK8pwPueZ'. + 'PuZoQMOqhRoJHSs0kKLBWjvjYinmeQGw1TaX1RFdfZ3LMzYLjA'. + 'C++dkn6AaH2Nobk6cxEzdnuG0TdC8zvdJkN0hqkFkO/jwL0fxa'. + 'so8sBcuFzQ+/+MRC+BeAHnpwQzn++ee5KT9Eshuy46dcKAXm32'. + '0uzPQhS4GttkH2GQID2Wc0Y4LtAbDxhZ/x5A+e/uTG9+jGceXH'. + '9/ySnnIXnUzOxXe1038mW3ZynNmam4yYWkO+f9cv+Oljz16/lV'. + '9tDz/9nerc1hm8ZEScSRK7VvtYl1i1dklsOKyvc+zg/bzw1O8+'. + '/efkajt56kR1ydlEJBc5H46xzbrJ3dY9wrB7hGcff+6/+279L+'. + '0fHxyiE8XMLl4AAAAASUVORK5CYII=' ; + + //========================================================== + // File: bl_blue.png + //========================================================== + $this->imgdata_large[9][0]= 1169 ; + $this->imgdata_large[9][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAACEF'. + 'BMVEX/////////7//35//v1v/exv/Wvf/Wrf/Wpf/Orf+/v7+9'. + 'tc69jP+9hP+5ucW1tc6tlP+rq7Wlpdalpcalpb2cnM6cnMacc/'. + '+cWv+UlLWUjN6UjK2Uc/+Ma/+MUv+EhKWEa/+EQvd7e8Z7e7V7'. + 'e6V7c957Wv9za9Zza8ZzSv9ra5xrSv9rOf9rMe9jUudjQv9jOe'. + '9aWpRaUt5aUpRaSu9aSudSUoxSSs5SSoxSMf9KQtZKOfdKMedK'. + 'Kf9KKe9CKf9CKb1CKa1CIfdCIedCId45MXs5Kfc5If85Iec5Id'. + 'Y5GP8xMbUxMXsxKc4xKZQxIf8xGP8xGO8xGN4xGNYxGL0xGK0p'. + 'KXMpIYwpGP8pGO8pGOcpGNYpGM4pEP8pEPcpEOcpEN4pENYpEM'. + 'YpEL0hGKUhEP8hEPchEO8hEOchEN4hENYhEM4hEMYhELUhCP8h'. + 'CO8hCN4YGJwYGGsYEL0YEK0YEHMYCN4YCM4YCMYYCL0YCKUYAP'. + '8QEJQQEIwQEHsQEGsQCM4QCLUQCK0QCKUQCJwQCJQQCIwQCHMQ'. + 'CGsQAP8QAPcQAO8QAOcQAN4QANYQAM4QAMYQAL0QALUQAKUQAJ'. + 'QQAIQICGsICGMIAO8IANYIAL0IALUIAK0IAKUIAJwIAJQIAIwI'. + 'AIQIAHsIAHMIAGsIAGMAAN4AAMYAAK0AAJQAAIwAAIQAAHMAAG'. + 'sAAGMAAFrR1dDlAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkRFRPMOZ'. + '/2AAAB+klEQVR4nGNgIAIIqeqZmBqpi2JISNml5lVXV3d198Yo'. + 'oUjwm1SnxsbGRsSm5ZfNXO4tjCTjVh0ABhFx6QV9E1Y0S8JkuN'. + '3yAgLc7W3t/QPi4jPKJ8ye1yoIlTKpjvVy15eVUbN0i4zKLJ8w'. + 'ae6qcKgLqmMj3PUFWFl5NJ0CExLLJzbNW7BWCyxlXR0ba6/Axs'. + 'zELmfnkRBT0QiSKgXJCOflxUbYy3KyMHEoOrtEZ1c2TZ6/cMl6'. + 'eaCUamdsbIC7tjgPr4SBS3BMMVDTwkXr1hsDpYy6UmMj/O0tdX'. + 'QNbDxjknJLWqYsXLx0vStQynxGflpkZGCgs7Onp29SbtNkoMy6'. + 'pevCgFJWy3oyMuKjgoKCPWNCvEuqWhcsWrJ06XqQlPnMvrKyrM'. + 'TomJjkZAfHlNa2qdOWrlu63gcopbG8v7+hvLwip7g4JdSxsLZu'. + '8dKlS9ettwBKic2eNXHChIkTG5tKqgpr2uo6loLAehWQx0LnzJ'. + '49p6mpeXLLlNq6RUvqly6dvnR9Bx9ISnnlvLmT582bMr9t4aL2'. + '+vrp60GaDCGB6Ld6wfwFCxYCJZYsXQ+SmL6+FBryInVrFi1atH'. + 'jJkqVQsH6pNCzCJNvXrQW6CmQJREYFEc2CYevXrwMLAyXXl0oz'. + 'IAOt0vVQUGSIkabkDV3DwlzNVDAksAAAfUbNQRCwr88AAAAASU'. + 'VORK5CYII=' ; + + //========================================================== + // File: bs_red.png + //========================================================== + $this->imgdata_small[0][0]= 437 ; + $this->imgdata_small[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAk1'. + 'BMVEX////////GxsbGra3/xsbOhITWhIT/hIT/e3v/c3P/a2vG'. + 'UlK1SkrOUlL/Y2PWUlLGSkrnUlLeSkrnSkr/SkqEGBj/KSmlGB'. + 'jeGBjvGBj3GBj/EBD/CAj/AAD3AADvAADnAADeAADWAADOAADG'. + 'AAC9AAC1AACtAAClAACcAACUAACMAACEAAB7AABzAABrAABjAA'. + 'BuukXBAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ'. + 'cwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGDNEMgOYAAAAm0'. + 'lEQVR4nI3Q3RKCIBAFYGZMy9RKzX7MVUAUlQTe/+kS0K49d3wD'. + '7JlFaG+CvIR3FvzPXgpLatxevVVS+Jzv0BDGk/UJwOkQ1ph2g/'. + 'Ct5ACX4wNT1o/zzUoJUFUGBiGfVnDTYGJgmrWy8iKEtp0Bpd2d'. + 'jLGu56MB7f4JOOfDJAwoNwslk/jOUi+Jts6RVNrC1hkhPy50Ef'. + 'u79/ADQMQSGQ8bBywAAAAASUVORK5CYII=' ; + + + //========================================================== + // File: bs_lightblue.png + //========================================================== + $this->imgdata_small[1][0]= 657 ; + $this->imgdata_small[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAABVl'. + 'BMVEX////////d///AwMC7wcS08P+y+P+xxdCwxM+uws2twMur'. + 'vsinzNynytylzuKhyN6e5v6d5P+d1fOcwNWcu8ub4f+at8iZ3v'. + '+ZvdGY2/yW2f+VscGU1vuT1fqTr72Sx+SSxeKR0fWRz/GPz/OP'. + 'rr+OyeqMy+6Myu2LyeyKxueJudSGw+SGorGDvt+Cvd6CvN2Aud'. + 'p+uNd+t9Z9tdV8tdR8tNN6sc94r813rct2q8h0qcZ0qMVzp8Rx'. + 'o8Bwor5tn7ptnrptnrlsnbhqmbRpmbNpi51ol7Flkqtkkqtkka'. + 'pjj6hijaRhjaZgi6NfiqJfiaFdh55bhJtag5pZgphYgJZYf5VX'. + 'cn9Ve5FSeI1RdopRdYlQdYlPc4dPcoZPcoVNcINLboBLbH9GZn'. + 'hGZXdFZHZEY3RDYnJCXW4/W2s/WWg+Wmo7VmU7VGM7U2E6VGM6'. + 'VGI5UV82T1wGxheQAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHU'. + 'gAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGTok'. + '9Yp9AAAAtElEQVR4nGNgIBaw8wkpKghzwvksPAKiUsraprYiLF'. + 'ARXkE2JiZ1PXMHXzGIAIekOFBE08TGLTCOCyzCLyvDxsZqZOnk'. + 'E56kAhaRV9NQUjW2tPcMjs9wBYsY6Oobmlk7egRGpxZmgkW0zC'. + '2s7Jy9giKT8gohaiQcnVzc/UNjkrMLCyHmcHr7BYREJKTlFxbm'. + 'QOxiEIuKTUzJKgQCaZibpdOzQfwCOZibGRi4dcJyw3S4iQ4HAL'. + 'qvIlIAMH7YAAAAAElFTkSuQmCC' ; + + //========================================================== + // File: bs_gray.png + //========================================================== + $this->imgdata_small[2][0]= 550 ; + $this->imgdata_small[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAAQCAMAAADH72RtAAABI1'. + 'BMVEX///8AAAD8EAD8IAD8NAD8RAD8VAAYGBi/v7+goKCCgoJk'. + 'ZGRGRkb8yAD83AD87AD8/AD4+ADo+ADY+ADI+AC0+ACk+ACU+A'. + 'CE+AB0/ABk/ABU/ABE/AAw/AAg/AAQ/AAA/AAA+AAA6BAA2CAA'. + 'yDQAtEQApFQAlGQAhHQAdIgAZJgAVKgARLgAMMgAINwAEOwAAP'. + 'wAAPgIAPAQAOgYAOAkANgsANA0AMg8AMBEALhMALBUAKhcAKBo'. + 'AJhwAJB4AIiAAID////4+Pjy8vLs7Ozm5ubg4ODa2trT09PNzc'. + '3Hx8fBwcG7u7u1tbWurq6oqKiioqKcnJyWlpaQkJCJiYmDg4N9'. + 'fX13d3dxcXFra2tkZGReXl5YWFhSUlJMTExGRkZAQEA1BLn4AA'. + 'AAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIA'. + 'AAsSAdLdfvwAAAAHdElNRQfTAwkUGiIctEHoAAAAfElEQVR4nI'. + '2N2xKDIAwF+bZ2kAa8cNFosBD//yvKWGh9dN+yk9kjxH28R7ze'. + 'wzBOYSX6CaNB927Z9qZ66KTSNmBM7UU9Hx2c5qjmJaWCaV5j4t'. + 'o1ANr40sn5a+x4biElrqHgrXMeac/c1nEpFHG0LSFoo/jO/BeF'. + 'lJnFbT58ayUf0BpA8wAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: bs_greenblue.png + //========================================================== + $this->imgdata_small[3][0]= 503 ; + $this->imgdata_small[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAxl'. + 'BMVEX///////+/v79znJQhSkJ7raU5hHtjraVKnJRCjIRClIyU'. + '9++E595avbVaxr2/v7+ctbWcvb17nJxrjIx7paUxQkK9//+Mvb'. + '17ra2Evb17tbVCY2MQGBiU5+ec9/eM5+d71tZanJxjra1rvb1j'. + 'tbVSnJxara1rzs5jxsZKlJRChIQpUlIhQkJatbVSpaU5c3MxY2'. + 'MYMTEQISFavb1Sra1KnJxCjIw5e3sxa2spWlpClJQhSkoYOTkp'. + 'Y2MhUlIQKSkIGBgQMTH+e30mAAAAAXRSTlMAQObYZgAAAAFiS0'. + 'dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfT'. + 'AwkUGTIqLgJPAAAAqklEQVR4nI2QVxOCMBCEM6Mi2OiCvSslJB'. + 'CUoqjn//9TYgCfubf9Zu9uZxFqO+rscO7b6l/LljMZX29J2pNr'. + 'YjmX4ZaIEs2NeiWO19NNacl8rHAyD4LR6jjw6PMRdTjZE0JOiU'. + 'dDv2ALTlzRvSdCCfAHGCc7yRPSrAQRQOWxKc3C/IUjBlDdUcM8'. + '97vFGwBY9QsZGBc/A4DWZNbeXIPWZEZI0c2lqSute/gCO9MXGY'. + '4/IOkAAAAASUVORK5CYII=' ; + + //========================================================== + // File: bs_yellow.png + //========================================================== + $this->imgdata_small[4][0]= 507 ; + $this->imgdata_small[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAzF'. + 'BMVEX///////+/v79zYwCMewDOxoTWzoTezkr/5wj/5wDnzgDe'. + 'xgC1pQCtnACllACcjACUhABjWgDGvVK1rUrOxlLGvUqEexilnB'. + 'jv3hj35xj/7wj/7wD35wDv3gDn1gDezgDWxgDOvQDGtQC9rQCE'. + 'ewB7cwBzawBrYwDWzlLn3lLe1krn3kre1hi9tQC1rQCtpQClnA'. + 'CclACUjACMhAD/9wC/v7///8bOzoT//4T//3v//3P//2v//2Pn'. + '50r//0r//yn39xj//xD//wBjYwDO8noaAAAAAXRSTlMAQObYZg'. + 'AAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAH'. + 'dElNRQfTAwkUGSDZl3MHAAAAqElEQVR4nI3QWRNDMBAA4My09E'. + 'IF1SME0VT1okXvM/3//6kEfbZv+81eswA0DfHxRpOV+M+zkDGG'. + 'rL63zCoJ2ef2RLZDIqNqYexyvFrY9ePkxGWdpvfzC7tEGtIRly'. + 'nqzboFKMlizAXbNnZyiFUKAy4bZ+B6W0lRaQDLmg4h/k7eFwDL'. + 'OWIky8qhXUBQ7gKGmsxpC+ah1TdriwByqG8GQNDNr6kLjf/wAx'. + 'KgEq+FpPbfAAAAAElFTkSuQmCC' ; + + //========================================================== + // File: bs_darkgray.png + //========================================================== + $this->imgdata_small[5][0]= 611 ; + $this->imgdata_small[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAABJl'. + 'BMVEX////////o8v/f6O7W4OnR3PXL1OTL0evEyLvCzePAwMC/'. + 'v7a8wsq7t7C1xum1vtS1q6GzopmyxeKsrsOqvNWoq7anvN+nsb'. + 'qhrcGgqbGfpq6cp7+bqMuVmJKRm7yPlKKMnL6FkKWFipOEkLSE'. + 'j6qEhoqAiaB+jqd8haF7hZR4iJt4g5l3hZl2gIt2cod1hJVzeY'. + 'VzboJvhp9sfJJsb41peY1pd5xpdoVod4xndI5lcHxka4BjcYVg'. + 'Z3BfboFbb4lbZnZbYntaZ4laZYVZV3JYYWpXX3JWWm5VX4RVW2'. + 'NUYX9SXHxPWn5OVFxNWWtNVXVMVWFKV3xHUGZGU3dGTldFSlxE'. + 'Sk9ESXBCRlNBS3k/SGs/RU4+R1k9R2U6RFU2PUg0PEQxNU0ECL'. + 'QWAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAA'. + 'CxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGQmbJetrAAAAtklEQV'. + 'R4nGNgwAK4JZTNNOWlYDxhMT4ZDTOzQE1uMF9CiJWVU0LbxDlS'. + 'G8QVF+FnZ2KRNHAIiPUHaZGSlmZj5lH19A1KjLUA8lXU5MWllF'. + 'yjo30TYr2BfG19G11b37CEeN84H38gX1HbwTUkOjo+zjfG3hLI'. + 'l1exCvCNCwnxjfMz0gTyRdXNHXx9fUNCQu2MwU6SN3ZwD42LCH'. + 'W30IK4T8vUJSAkNMhDiwPqYiktXWN9JZj7UQAAjWEfhlG+kScA'. + 'AAAASUVORK5CYII=' ; + + + //========================================================== + // File: bs_darkgreen.png + //========================================================== + $this->imgdata_small[6][0]= 666 ; + $this->imgdata_small[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAABX1'. + 'BMVEX////////l/+nAwMC86r+8wb28wby8wLy78sCzw7SywrSx'. + 'wLKwvrGuvK+syK+ryq2rx62n36ym3aumxKmk2qij0Keh16ahva'. + 'Og1aSguKKe06KeuaCetZ+d0KGdtZ+bz6Cay56ZyZ2Zwp2Zr5qZ'. + 'rpqYwJuXyZuXrJmVw5mUxZiTxJeTw5eTq5WRwJWPtJKOvZKKuI'. + '6Kt42Kn4yJt42ItIuGsomFsYmEsIiEr4eDr4eBrIR/qoN+qIJ8'. + 'poB7pH56o356on14nnt2nXl0mndzmnZzmXZymHVwlXNvlHJukn'. + 'FtiHBqjm1qjW1oi2toiWpniWplh2hlhmdkhWdig2VggGNgf2Je'. + 'fmFdfGBde19bbl1aeFxXdFpWclhVclhVcVdUcFZTb1VSbVRQal'. + 'JPaVFKY0xKYkxJYUtIYEpHX0lEWkZCWERCV0NCVkM/U0A+U0A+'. + 'UUA+UEA9Uj89UT48Tj45TDvewfrHAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElN'. + 'RQfTAwkUGRjxlcuZAAAAtElEQVR4nGNgIBZw8osqqIpzw/msfI'. + 'IiUmr6lo6SbFARASEOJiYtQ2uXADmIAJeEGFBE18LBMySBBywi'. + 'LC/LwcFiZuvmH5WiAxZR0tRW1DC3dfYJS8zyAouYGBibWtm7+o'. + 'TEpZfkgEX0rG3snNx9Q2NSCksgaqRd3Ty8gyLiU/NKSiDmcPsF'. + 'BodHJ2UUlZTkQ+xikIlNSE7LLgECZagL2VQyc0H8YnV2uD94jS'. + 'ILIo14iQ4HALarJBNwbJVNAAAAAElFTkSuQmCC' ; + + //========================================================== + // File: bs_purple.png + //========================================================== + $this->imgdata_small[7][0]= 447 ; + $this->imgdata_small[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAnF'. + 'BMVEX///////+/v7/Gvca9rb3Grcb/xv+1hLWte629hL21e7XG'. + 'hMbWhNbOe87We9b/hP//e/97OXv/c///a///Y/+cOZz/Sv/WOd'. + 'bnOefvOe//Kf9jCGNrCGv/EP//CP/nCOf/AP/3APfvAO/nAOfe'. + 'AN7WANbOAM7GAMa9AL21ALWtAK2lAKWcAJyUAJSMAIyEAIR7AH'. + 'tzAHNrAGtjAGPP1sZnAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgF'. + 'HUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGS'. + 'o5QpoZAAAAnElEQVR4nI3Q2xJDMBAG4MyQokWrZz3oSkJISJH3'. + 'f7dK0Gv/Xb7J7vyzCK0NjtPsHuH/2wlhTE7LnTNLCO/TFQjjIp'. + 'hHAA6bY06LSqppMAY47x+04HXTba2kAFlmQKr+YuVDCGUG2k6/'. + 'rNwYK8rKwKCnPxHnVS0aA3rag4UQslUGhrlk0Kpv1+sx3tLZ6w'. + 'dtYemMkOsnz8R3V9/hB87DEu2Wos5+AAAAAElFTkSuQmCC' ; + + + //========================================================== + // File: bs_brown.png + //========================================================== + $this->imgdata_small[8][0]= 677 ; + $this->imgdata_small[8][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAABaF'. + 'BMVEX//////////8X/3oD/3nj/1HX/0Gr/xGP/rkv/gBf+iS/2'. + 'bAL1agDxaQDuZwDrZwLpZQDmZQLlZADjcx7gZATeYQDdZgraXw'. + 'DZXwHYXgDXiEvXZAvUjlfUXwXTjVfTbR7ShUvRbR7RWwDMWQDL'. + 'WADKooLKWADJoYLJgkvHWATGoILFn4LFgEvFVgDEZx7EVQDDt6'. + '/DVQDCt6/CnoLChlfCVADAwMC+hFe+UgC8UgC6UQC4gVe4UAC3'. + 'gVe3UAC1gFe1eUu1TwC1TgCzTgCwTQKuTACrSgCqSgCpSgCpSQ'. + 'CodEulSACkRwCiRgCdRACcRACaQwCYQgCWQgKVQQCVQACUQACS'. + 'UR6RPwCOPgCNPQCLPACKPACJOwCEOQCBOAB+NwB9NgB8NgB7NQ'. + 'B6NwJ4NAB3RR52MwB0MgBuLwBtLwBsLwBqLgBpLQBkLQJiKgBh'. + 'KgBgKwRcKABbKQJbJwBaKQRaJwBYKAJVJQDZvdIYAAAAAXRSTl'. + 'MAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLd'. + 'fvwAAAAHdElNRQfTAwkUGho0tvl2AAAAtklEQVR4nGNgIBaoSg'. + 'mLKGpowfkGMty8AqJKpi4mRlAROR5ONg4JFUv3YHOIgDo/HwsT'. + 'q6yps29EsjZYREFIkJ2ZS9/OMzA20wEsIi8uKSZtaOPmH5WSFw'. + 'YW0VRW07Vw8vCLSMguLwCL6FlaObp6B0TGZxSXQ9TouHv6+IXG'. + 'JGYWlpdDzNEKCgmPjkvLKS0vL4LYxWAen5SelV8OBNZQFxrZ5h'. + 'aC+GX2MDczMBh7pZakehkTHQ4AA0Am/jsB5gkAAAAASUVORK5C'. + 'YII=' ; + + //========================================================== + // File: bs_blue.png + //========================================================== + $this->imgdata_small[9][0]= 436 ; + $this->imgdata_small[9][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAk1'. + 'BMVEX///////+/v7+trcbGxv+EhM6EhNaEhP97e/9zc/9ra/9S'. + 'UsZKSrVSUs5jY/9SUtZKSsZSUudKSt5KSudKSv8YGIQpKf8YGK'. + 'UYGN4YGO8YGPcQEP8ICP8AAP8AAPcAAO8AAOcAAN4AANYAAM4A'. + 'AMYAAL0AALUAAK0AAKUAAJwAAJQAAIwAAIQAAHsAAHMAAGsAAG'. + 'ONFkFbAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ'. + 'cwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGhNNakHSAAAAmk'. + 'lEQVR4nI3P2xKCIBAGYGfM6SBWo1nauIqogaDA+z9dK9Lhrv47'. + 'vtl/2A2CfxNlJRRp9IETYGraJeEb7ocLNKznia8A7Db7umWDUG'. + 'sxAzhurxRHxok4KQGqCuEhlL45oU1D2w5BztY4KRhj/bCAsetM'. + '2uObjwvY8/oX50JItYDxSyZSTrO2mNhvGMbaWAevnbFIcpuTr7'. + 't+5AkyfBIKSJHdSQAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: bs_green.png + //========================================================== + $this->imgdata_small[10][0]= 452 ; + $this->imgdata_small[10][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAn1'. + 'BMVEX///////+/v7+/v7/G/8aUxpSMvYyUzpSMzoyM1oxarVqE'. + '/4R7/3tavVpKnEpaxlpz/3Nr/2tKtUpj/2Na51pKzkpK1kpK50'. + 'pK/0oYcxgp/ykYlBgY3hgY7xgY9xgQ/xAI/wgA/wAA9wAA7wAA'. + '5wAA3gAA1gAAzgAAxgAAvQAAtQAArQAApQAAnAAAlAAAjAAAhA'. + 'AAewAAcwAAawAAYwA0tyxUAAAAAXRSTlMAQObYZgAAAAFiS0dE'. + 'AIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAw'. + 'kUGgW5vvSDAAAAnklEQVR4nI3QSxKCMAwA0M4gqCgoiiJ+kEAL'. + 'LQUq0PufzX7ENdnlJZNkgtDS2CYZvK6bf+7EoKLA9cH5SQzv6A'. + 'YloTywsAbYr44FrlgrXCMJwHl3xxVtuuFkJAPIcw2tGB9GcFli'. + 'oqEf5GTkSUhVMw2TtD0XSlnDOw3SznE5520vNEi7CwW9+Ayjyq'. + 'U/3+yPuq5gvhkhL0xlGnqL//AFf14UIh4mkEkAAAAASUVORK5C'. + 'YII=' ; + + + //========================================================== + // File: bs_white.png + //========================================================== + $this->imgdata_small[11][0]= 480 ; + $this->imgdata_small[11][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAAQCAYAAADwMZRfAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMLFTsY/ewvBQAAAW1JREFUeJytkz2u4jAUhT/jic'. + 'gfBUKiZhE0bIKeVbCWrIKenp6eDiGlCEEEBArIxvzGU4xeZjLk'. + 'jWb05lRXuvbx+exr4bouX1Xjyw7Atz81F4uFBYjjGIDhcCjq1o'. + 'k6nN1uZwFerxfP55Msy1itVmRZBsB4PK6YveHkeW5d18XzPIIg'. + 'wPd9Wq0WnU6HMAxJkoQoiuynOIfDwUopkVIihKAoCgAcx6Hdbm'. + 'OMIU1T5vN55eBKEikljUYDIX6kFUKU9e8aDAZlmjcca+1b7TgO'. + '1+uVy+VS9nzfr8e53++VzdZaiqIgz3OMMWitOZ/PaK0JgqDeRC'. + 'mF53lIKYGfr3O73TDGoJQiTVO01nS73XqT4/FIs9kkCAIej0eZ'. + 'brPZEMcxSZKgtQZgMpmIWpN+vy+m06n1PK9yTx8Gy+WS/X5Pr9'. + 'er9GuHLYoiG4YhSilOpxPr9Zrtdlti/JriU5MPjUYjq7UuEWaz'. + '2d+P/b/qv/zi75oetJcv7QQXAAAAAElFTkSuQmCC' ; + + + //========================================================== + // File: bs_cyan.png + //========================================================== + $this->imgdata_small[12][0]= 633 ; + $this->imgdata_small[12][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAABPl'. + 'BMVEX////////F///AwMCvxsaC1NSC0dGCz8+CzMyA//94//91'. + '//9q//9j//9X4uJX09NXz89Xx8dXxMRL//9L5uZL3d1L2NhLxs'. + 'ZLt7cv//8e9fUe8fEe7u4e398epqYehoYX//8L+PgK//8F9fUE'. + '/v4E5+cEb28EZ2cC//8C/v4C/f0CzMwCrq4Cjo4CdXUCaWkCZW'. + 'UB/PwA//8A/f0A+/sA8/MA7e0A7OwA6+sA5eUA5OQA4uIA4eEA'. + '3NwA2toA2NgA1dUA09MA0tIA0NAAysoAxsYAxcUAxMQAv78Avr'. + '4AvLwAtrYAtbUAs7MAsLAAra0Aq6sAqKgApaUApKQAoqIAoKAA'. + 'n58AmpoAlZUAk5MAkpIAkJAAj48AjIwAiYkAh4cAf38AfX0Ae3'. + 'sAenoAcnIAcHAAa2sAaWkAaGgAYmIUPEuTAAAAAXRSTlMAQObY'. + 'ZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAA'. + 'AHdElNRQfTAwkUGQDi+VPPAAAAtElEQVR4nGNgIBawikipyIiy'. + 'wfksfJpGRkamNtr8LFARPiMFHmFDcztXfwGoFi0jLiZuZRtnry'. + 'BddrCIiJEGL6eklYO7X3iCOFhE2thESdHawdUnJDZFDiyiamZh'. + 'aevk5h0UlZSpBhaRtbN3dPHwDY5MSM+EqBFzc/f0DgiLTkjLzI'. + 'SYw6bjHxgaEZeckZmpD7GLQSAqJj4xNRMIBGFuFtRLA/ENhGBu'. + 'ZmDgkJBXl5fgIDocAAKcINaFePT4AAAAAElFTkSuQmCC' ; + + //========================================================== + // File: bs_bluegreen.png + //========================================================== + $this->imgdata_small[13][0]= 493 ; + $this->imgdata_small[13][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAvV'. + 'BMVEX///////+/v79j//855/8x3v851v9Spb1C1v8AOUqEtcZK'. + 'lK1StdYxzv8hxv8AY4QASmNSlK1KpcZKtd4YQlIYnM4YrecIvf'. + '8AtfcAre8AjL0AhLUAc5wAa5QAWnsAQloAKTkAGCFKhJxKrdYY'. + 'jL0Ypd4Atf8ArfcApecAnN4AlM4AjMYAe60Ac6UAY4wAUnNSnL'. + '0AlNYAWoQASmsAOVIAITGEtc4YWnsAUnsAMUqtvcaErcYAKUIA'. + 'GCkAECHUyVh/AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAA'. + 'AJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGxNUcXCT'. + 'AAAAqUlEQVR4nI2Q1xKCMBREM2NHLCCogAGCjd6SqLT8/2cZKT'. + '6zb3tm987OBWCsXoejp8rC35fi4+l6gXFZlD0Rz6fZ1tdDmKR9'. + 'RdOmkzmP7DDpilfX3SzvRgQ/Vr1uiZplfsCBiVf03RJd140wgj'. + 'kmNqMtuYXcxyYmNWJdRoYwzpM9qRvGujuCmSR7q7ARY00/MiWk'. + 'sCnjkobNEm1+HknDZgAqR0GKU43+wxdu2hYzbsHU6AAAAABJRU'. + '5ErkJggg==' ; + + //========================================================== + // File: bs_lightred.png + //========================================================== + $this->imgdata_small[14][0]= 532 ; + $this->imgdata_small[14][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAA3l'. + 'BMVEX///////+/v7/Gvb0hGBj/5///3v//zu//1u//xucpGCG9'. + 'nK21lKVSQkp7Wms5KTExISlaOUpjQlIhEBj/tdbOhKXnrcbGjK'. + 'Wla4TetcbGnK2EWmv/rc73pcZ7UmOcY3vOpbW1jJzenLW9e5Rz'. + 'Slq1c4xrQlJSOULGhJz/pcb3nL2chIzOnK33rcbelK3WjKWMWm'. + 'vGe5SEUmM5ISnOtb3GrbXerb3vpb2ca3v/rcaUY3POhJxCKTF7'. + 'SlrWnK21e4ytc4TvnLXnlK2la3taOUK1lJxrSlLGhJRjQkpSMT'. + 'lw+q2nAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ'. + 'cwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGjoP2Nm+AAAAr0'. + 'lEQVR4nGNgIBaYiOk62imYwPnMkiIyso76yhJSzFARMxkRNk49'. + 'a3t5OW6oFk1LVkYOfWUHKxUXiEYzLS12DnN3VXkjIRtFsIiSk5'. + '6evqGqhYGKugAfWMRa1FpD2UHeQEXQRlgALCJur+rgbCUNFOAS'. + 'hqjRkZe3MpBTcwEKCEPMMTGSs3Xz8OQHCnBBHckt6OJpIyAMBD'. + 'wwN/MYc4H4LK4wNzMwmGrzcvFqmxIdDgDiHRT6VVQkrAAAAABJ'. + 'RU5ErkJggg==' ; + + //========================================================== + // File: bxs_lightred.png + //========================================================== + $this->imgdata_xsmall[0][0]= 432 ; + $this->imgdata_xsmall[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAA3l'. + 'BMVEX///////+/v7/Gvb0hGBj/5///3v//zu//1u//xucpGCG9'. + 'nK21lKVSQkp7Wms5KTExISlaOUpjQlIhEBj/tdbOhKXnrcbGjK'. + 'Wla4TetcbGnK2EWmv/rc73pcZ7UmOcY3vOpbW1jJzenLW9e5Rz'. + 'Slq1c4xrQlJSOULGhJz/pcb3nL2chIzOnK33rcbelK3WjKWMWm'. + 'vGe5SEUmM5ISnOtb3GrbXerb3vpb2ca3v/rcaUY3POhJxCKTF7'. + 'SlrWnK21e4ytc4TvnLXnlK2la3taOUK1lJxrSlLGhJRjQkpSMT'. + 'lw+q2nAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ'. + 'cwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAwkUKBOgGhWjAAAAS0'. + 'lEQVR4nGNgQAEmunYmEJaMCKe1vBxYzJKVQ9lKBSSupKdnaKGi'. + 'zgdkiqs6WKnYcIGYJnK2HvzCwmCNgi42wsLCECNMeXlNUY0HAL'. + 'DaB7Du8MiEAAAAAElFTkSuQmCC' ; + + //========================================================== + // File: bxs_bluegreen.png + //========================================================== + $this->imgdata_xsmall[1][0]= 397 ; + $this->imgdata_xsmall[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAvV'. + 'BMVEX///////+/v79j//855/8x3v851v9Spb1C1v8AOUqEtcZK'. + 'lK1StdYxzv8hxv8AY4QASmNSlK1KpcZKtd4YQlIYnM4YrecIvf'. + '8AtfcAre8AjL0AhLUAc5wAa5QAWnsAQloAKTkAGCFKhJxKrdYY'. + 'jL0Ypd4Atf8ArfcApecAnN4AlM4AjMYAe60Ac6UAY4wAUnNSnL'. + '0AlNYAWoQASmsAOVIAITGEtc4YWnsAUnsAMUqtvcaErcYAKUIA'. + 'GCkAECHUyVh/AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAA'. + 'AJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAwkUKDVyF5Be'. + 'AAAASUlEQVR4nGNgQAFmYqJcEJaEOJ+UrD5YTJKFTZrfGCQuaq'. + 'glLWvMaQ5kqujo6hnbKIKYXPr68gp2dmCNJiZAlh3ECGsREWtU'. + '4wF1kwdpAHfnSwAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: bxs_navy.png + //========================================================== + $this->imgdata_xsmall[2][0]= 353 ; + $this->imgdata_xsmall[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAk1'. + 'BMVEX///////+/v7+trcbGxv+EhM6EhNaEhP97e/9zc/9ra/9S'. + 'UsZKSrVSUs5jY/9SUtZKSsZSUudKSt5KSudKSv8YGIQpKf8YGK'. + 'UYGN4YGO8YGPcQEP8ICP8AAP8AAPcAAO8AAOcAAN4AANYAAM4A'. + 'AMYAAL0AALUAAK0AAKUAAJwAAJQAAIwAAIQAAHsAAHMAAGsAAG'. + 'ONFkFbAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ'. + 'cwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAwkUJxXO4axZAAAAR0'. + 'lEQVR4nGNgQAGskhKsEJaslIi8ijpYTJaDU1FVAyQuKSujoKKh'. + 'LQ5kSigpqWro6oOYrOoaWroGBmCNWiCWAdQwUVFWVOMBOp4GCJ'. + 's5S60AAAAASUVORK5CYII=' ; + + //========================================================== + // File: bxs_gray.png + //========================================================== + $this->imgdata_xsmall[3][0]= 492 ; + $this->imgdata_xsmall[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAABI1'. + 'BMVEX///8AAAD8EAD8IAD8NAD8RAD8VAAYGBi/v7+goKCCgoJk'. + 'ZGRGRkb8yAD83AD87AD8/AD4+ADo+ADY+ADI+AC0+ACk+ACU+A'. + 'CE+AB0/ABk/ABU/ABE/AAw/AAg/AAQ/AAA/AAA+AAA6BAA2CAA'. + 'yDQAtEQApFQAlGQAhHQAdIgAZJgAVKgARLgAMMgAINwAEOwAAP'. + 'wAAPgIAPAQAOgYAOAkANgsANA0AMg8AMBEALhMALBUAKhcAKBo'. + 'AJhwAJB4AIiAAID////4+Pjy8vLs7Ozm5ubg4ODa2trT09PNzc'. + '3Hx8fBwcG7u7u1tbWurq6oqKiioqKcnJyWlpaQkJCJiYmDg4N9'. + 'fX13d3dxcXFra2tkZGReXl5YWFhSUlJMTExGRkZAQEA1BLn4AA'. + 'AAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxEA'. + 'AAsRAX9kX5EAAAAHdElNRQfTAwkUKC74clmyAAAAQklEQVR4nG'. + 'NgQAVBYVCGt5dXYEQ0mOnp5h4QFgVmeri6+4dHxYMVeHoFRUTH'. + 'gTUFBIZBWAwMkZEx8bFQM2Lj0UwHANc/DV6yq/BiAAAAAElFTk'. + 'SuQmCC' ; + + //========================================================== + // File: bxs_graypurple.png + //========================================================== + $this->imgdata_xsmall[4][0]= 542 ; + $this->imgdata_xsmall[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAABSl'. + 'BMVEX////////11P/MqdvKrNfAwMC+u7+9u7+4rr24lsi3rby3'. + 'lMe1rLq1o720q7i0oL20ksSzoryyqbaykMGxlb2wkL+vnbiujb'. + '2sjLuri7qpl7GoirWoibenmK2mla6mjLKmhrSllauki7CjhrCj'. + 'hLGihLChg6+ggq2fkqadkKOcfqqai6Gag6WYe6WXeqSWeaOTd6'. + 'CTd5+Rdp6RdZ6RdZ2Qg5eOc5qMcpiLcZeJb5WIbpOHbZKGbJGE'. + 'a4+CaY2AZ4t/Z4p/Zop/Zol+Zol7ZIZ6Y4V5YoR1ZH11X391Xn'. + '9zXX1yXXtxXHtvWnluWXhsV3VqVnNpVXJoVHFnU3BmUm9jUGth'. + 'VGdgTmheTGZcS2RcSmRaSWJYR19XRl5SQllRQlhQQVdPQFZOP1'. + 'VLPlFJO09IPE5IOk5FOEtEN0lDOEpDOElDNklCNkc/M0XhbrfD'. + 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx'. + 'EAAAsRAX9kX5EAAAAHdElNRQfTAwkUKCgREfyHAAAATUlEQVR4'. + 'nGNgQAEcIko8EBY3M5Ougy+IxSXMwmTsFsAHZMqrSRvZB0W7A5'. + 'k6FlYugXEZICaPr394Um4uSAFDRFRCbm4uxAihsDAhVOMBHT0L'. + 'hkeRpo8AAAAASUVORK5CYII=' ; + + //========================================================== + // File: bxs_red.png + //========================================================== + $this->imgdata_xsmall[5][0]= 357 ; + $this->imgdata_xsmall[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAk1'. + 'BMVEX////////GxsbGra3/xsbOhITWhIT/hIT/e3v/c3P/a2vG'. + 'UlK1SkrOUlL/Y2PWUlLGSkrnUlLeSkrnSkr/SkqEGBj/KSmlGB'. + 'jeGBjvGBj3GBj/EBD/CAj/AAD3AADvAADnAADeAADWAADOAADG'. + 'AAC9AAC1AACtAAClAACcAACUAACMAACEAAB7AABzAABrAABjAA'. + 'BuukXBAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ'. + 'cwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAwkUIyjy5SVMAAAAS0'. + 'lEQVR4nGNgQAFsUpJsEJastIi8ijpYTJaDU0FVgxXIlJKVUVDR'. + '0BYHMiUUlVQ1dPVBTDZ1dS1dAwOQAgYtbSDLAGIEq6goK6rxAD'. + 'yXBg73lwGUAAAAAElFTkSuQmCC' ; + + //========================================================== + // File: bxs_yellow.png + //========================================================== + $this->imgdata_xsmall[6][0]= 414 ; + $this->imgdata_xsmall[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAzF'. + 'BMVEX///////+/v79zYwCMewDOxoTWzoTezkr/5wj/5wDnzgDe'. + 'xgC1pQCtnACllACcjACUhABjWgDGvVK1rUrOxlLGvUqEexilnB'. + 'jv3hj35xj/7wj/7wD35wDv3gDn1gDezgDWxgDOvQDGtQC9rQCE'. + 'ewB7cwBzawBrYwDWzlLn3lLe1krn3kre1hi9tQC1rQCtpQClnA'. + 'CclACUjACMhAD/9wC/v7///8bOzoT//4T//3v//3P//2v//2Pn'. + '50r//0r//yn39xj//xD//wBjYwDO8noaAAAAAXRSTlMAQObYZg'. + 'AAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAH'. + 'dElNRQfTAwkUIzoBXFQEAAAAS0lEQVR4nGNgQAFsDhJsEJaTo5'. + '2skj5YzMnSSk7ZwBzIlOSUklPiMxYHMnW4FXT5VNVBTDZeXiNV'. + 'QUGQAgYBYyBLEGIEq5gYK6rxAH4kBmHBaMQQAAAAAElFTkSuQm'. + 'CC' ; + + //========================================================== + // File: bxs_greenblue.png + //========================================================== + $this->imgdata_xsmall[7][0]= 410 ; + $this->imgdata_xsmall[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAxl'. + 'BMVEX///////+/v79znJQhSkJ7raU5hHtjraVKnJRCjIRClIyU'. + '9++E595avbVaxr2/v7+ctbWcvb17nJxrjIx7paUxQkK9//+Mvb'. + '17ra2Evb17tbVCY2MQGBiU5+ec9/eM5+d71tZanJxjra1rvb1j'. + 'tbVSnJxara1rzs5jxsZKlJRChIQpUlIhQkJatbVSpaU5c3MxY2'. + 'MYMTEQISFavb1Sra1KnJxCjIw5e3sxa2spWlpClJQhSkoYOTkp'. + 'Y2MhUlIQKSkIGBgQMTH+e30mAAAAAXRSTlMAQObYZgAAAAFiS0'. + 'dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElNRQfT'. + 'AwkUJy5/6kV9AAAATUlEQVR4nGNgQAGCyuyCEJaGugKHviVYzF'. + 'hO3sxCWwDIVNLTM9PXtpEGMhW12Cy0DR1ATEFLSxZ7BweQAgYd'. + 'HUMHBweIEQKiogKoxgMAo/4H5AfSehsAAAAASUVORK5CYII=' ; + + //========================================================== + // File: bxs_purple.png + //========================================================== + $this->imgdata_xsmall[8][0]= 364 ; + $this->imgdata_xsmall[8][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAnF'. + 'BMVEX///////+/v7/Gvca9rb3Grcb/xv+1hLWte629hL21e7XG'. + 'hMbWhNbOe87We9b/hP//e/97OXv/c///a///Y/+cOZz/Sv/WOd'. + 'bnOefvOe//Kf9jCGNrCGv/EP//CP/nCOf/AP/3APfvAO/nAOfe'. + 'AN7WANbOAM7GAMa9AL21ALWtAK2lAKWcAJyUAJSMAIyEAIR7AH'. + 'tzAHNrAGtjAGPP1sZnAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgF'. + 'HUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAwkUIj'. + 'mBTjT/AAAASUlEQVR4nGNgQAGskhKsEJaCrJiSuhZYTEFASFlD'. + 'GyQuqSCnrK6tJwpkiquoamgbGIGYrFpaugbGxmCNunpAljHECB'. + 'ZBQRZU4wFSMAZsXeM71AAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: bxs_green.png + //========================================================== + $this->imgdata_xsmall[9][0]= 370 ; + $this->imgdata_xsmall[9][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAn1'. + 'BMVEX///////+/v7+/v7/G/8aUxpSMvYyUzpSMzoyM1oxarVqE'. + '/4R7/3tavVpKnEpaxlpz/3Nr/2tKtUpj/2Na51pKzkpK1kpK50'. + 'pK/0oYcxgp/ykYlBgY3hgY7xgY9xgQ/xAI/wgA/wAA9wAA7wAA'. + '5wAA3gAA1gAAzgAAxgAAvQAAtQAArQAApQAAnAAAlAAAjAAAhA'. + 'AAewAAcwAAawAAYwA0tyxUAAAAAXRSTlMAQObYZgAAAAFiS0dE'. + 'AIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAw'. + 'kUKBrZxq0HAAAATElEQVR4nGNgQAGccrIcEJaivISyhjaIxa7I'. + 'I6CiqcMKZMopKqho6OhLA5kyqmqaOobGICartraeoYkJSAGDnj'. + '6QZQIxgk1Skg3VeABlVgbItqEBUwAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: bxs_darkgreen.png + //========================================================== + $this->imgdata_xsmall[10][0]= 563 ; + $this->imgdata_xsmall[10][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAABX1'. + 'BMVEX////////l/+nAwMC86r+8wb28wby8wLy78sCzw7SywrSx'. + 'wLKwvrGuvK+syK+ryq2rx62n36ym3aumxKmk2qij0Keh16ahva'. + 'Og1aSguKKe06KeuaCetZ+d0KGdtZ+bz6Cay56ZyZ2Zwp2Zr5qZ'. + 'rpqYwJuXyZuXrJmVw5mUxZiTxJeTw5eTq5WRwJWPtJKOvZKKuI'. + '6Kt42Kn4yJt42ItIuGsomFsYmEsIiEr4eDr4eBrIR/qoN+qIJ8'. + 'poB7pH56o356on14nnt2nXl0mndzmnZzmXZymHVwlXNvlHJukn'. + 'FtiHBqjm1qjW1oi2toiWpniWplh2hlhmdkhWdig2VggGNgf2Je'. + 'fmFdfGBde19bbl1aeFxXdFpWclhVclhVcVdUcFZTb1VSbVRQal'. + 'JPaVFKY0xKYkxJYUtIYEpHX0lEWkZCWERCV0NCVkM/U0A+U0A+'. + 'UUA+UEA9Uj89UT48Tj45TDvewfrHAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElN'. + 'RQfTAwkUKCFozUQjAAAATUlEQVR4nGNgQAGcoqrcEJYQB5OhSw'. + 'CIxSXGwWThGcIDZCppK5o7hyV6AZl6NnbuoSmFICZ3YHB0RkkJ'. + 'SAFDbEJaSUkJxAjeyEheVOMBQj4MOEkWew4AAAAASUVORK5CYI'. + 'I=' ; + + //========================================================== + // File: bxs_cyan.png + //========================================================== + $this->imgdata_xsmall[11][0]= 530 ; + $this->imgdata_xsmall[11][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAABPl'. + 'BMVEX////////F///AwMCvxsaC1NSC0dGCz8+CzMyA//94//91'. + '//9q//9j//9X4uJX09NXz89Xx8dXxMRL//9L5uZL3d1L2NhLxs'. + 'ZLt7cv//8e9fUe8fEe7u4e398epqYehoYX//8L+PgK//8F9fUE'. + '/v4E5+cEb28EZ2cC//8C/v4C/f0CzMwCrq4Cjo4CdXUCaWkCZW'. + 'UB/PwA//8A/f0A+/sA8/MA7e0A7OwA6+sA5eUA5OQA4uIA4eEA'. + '3NwA2toA2NgA1dUA09MA0tIA0NAAysoAxsYAxcUAxMQAv78Avr'. + '4AvLwAtrYAtbUAs7MAsLAAra0Aq6sAqKgApaUApKQAoqIAoKAA'. + 'n58AmpoAlZUAk5MAkpIAkJAAj48AjIwAiYkAh4cAf38AfX0Ae3'. + 'sAenoAcnIAcHAAa2sAaWkAaGgAYmIUPEuTAAAAAXRSTlMAQObY'. + 'ZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAA'. + 'AHdElNRQfTAwkUKQFKuFWqAAAATUlEQVR4nGNgQAGsUjJsEJaR'. + 'grC5qz9YzIiL28YriB3IlDZRsnYNiZUDMmXtHT2CE9JBTDb/wI'. + 'jkzEyQAoaomMTMzEyIERzy8hyoxgMAN2MLVPW0f4gAAAAASUVO'. + 'RK5CYII=' ; + + //========================================================== + // File: bxs_orange.png + //========================================================== + $this->imgdata_xsmall[12][0]= 572 ; + $this->imgdata_xsmall[12][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAABaF'. + 'BMVEX//////////8X/3oD/3nj/1HX/0Gr/xGP/rkv/gBf+iS/2'. + 'bAL1agDxaQDuZwDrZwLpZQDmZQLlZADjcx7gZATeYQDdZgraXw'. + 'DZXwHYXgDXiEvXZAvUjlfUXwXTjVfTbR7ShUvRbR7RWwDMWQDL'. + 'WADKooLKWADJoYLJgkvHWATGoILFn4LFgEvFVgDEZx7EVQDDt6'. + '/DVQDCt6/CnoLChlfCVADAwMC+hFe+UgC8UgC6UQC4gVe4UAC3'. + 'gVe3UAC1gFe1eUu1TwC1TgCzTgCwTQKuTACrSgCqSgCpSgCpSQ'. + 'CodEulSACkRwCiRgCdRACcRACaQwCYQgCWQgKVQQCVQACUQACS'. + 'UR6RPwCOPgCNPQCLPACKPACJOwCEOQCBOAB+NwB9NgB8NgB7NQ'. + 'B6NwJ4NAB3RR52MwB0MgBuLwBtLwBsLwBqLgBpLQBkLQJiKgBh'. + 'KgBgKwRcKABbKQJbJwBaKQRaJwBYKAJVJQDZvdIYAAAAAXRSTl'. + 'MAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9k'. + 'X5EAAAAHdElNRQfTAwkUJBSSy88MAAAATUlEQVR4nGNgQAGqwo'. + 'paEBYPJ4eKezCIpc7HwmrqG6ENZMpLihm6RaWEAZl6Vo7ekRnF'. + 'IKZWSHhcTnk5SAFDfFJWeXk5xAjj1FRjVOMBeFwNcWYSLjsAAA'. + 'AASUVORK5CYII=' ; + + //========================================================== + // File: bxs_lightblue.png + //========================================================== + $this->imgdata_xsmall[13][0]= 554 ; + $this->imgdata_xsmall[13][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAABVl'. + 'BMVEX////////d///AwMC7wcS08P+y+P+xxdCwxM+uws2twMur'. + 'vsinzNynytylzuKhyN6e5v6d5P+d1fOcwNWcu8ub4f+at8iZ3v'. + '+ZvdGY2/yW2f+VscGU1vuT1fqTr72Sx+SSxeKR0fWRz/GPz/OP'. + 'rr+OyeqMy+6Myu2LyeyKxueJudSGw+SGorGDvt+Cvd6CvN2Aud'. + 'p+uNd+t9Z9tdV8tdR8tNN6sc94r813rct2q8h0qcZ0qMVzp8Rx'. + 'o8Bwor5tn7ptnrptnrlsnbhqmbRpmbNpi51ol7Flkqtkkqtkka'. + 'pjj6hijaRhjaZgi6NfiqJfiaFdh55bhJtag5pZgphYgJZYf5VX'. + 'cn9Ve5FSeI1RdopRdYlQdYlPc4dPcoZPcoVNcINLboBLbH9GZn'. + 'hGZXdFZHZEY3RDYnJCXW4/W2s/WWg+Wmo7VmU7VGM7U2E6VGM6'. + 'VGI5UV82T1wGxheQAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHU'. + 'gAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAwkUJziL'. + 'PvAsAAAATUlEQVR4nGNgQAHsQgqcEJYgG5Oegy+IxSHOxmTiFs'. + 'gFZMprKBnbB8e7AplaFlbOQUl5ICanX0BEWmEhSAFDVGxKYWEh'. + 'xAjusDBuVOMBJO8LrFHRAykAAAAASUVORK5CYII=' ; + + //========================================================== + // File: bxs_darkgray.png + //========================================================== + $this->imgdata_xsmall[14][0]= 574 ; + $this->imgdata_xsmall[14][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABm'. + 'JLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsRAAALEQF/ZF+RAAAB'. + 'iElEQVR42k3QPU8TYRwA8P//ebkXrgdIColXRAOEkJqbaExMut'. + 'DBhE1GNjYHPg+DG6ODiU6QOLjVxITBcFKBYCstlAC2Bz17fe76'. + 'vLD6+wg/1FpTRFR5lpaub/u1eGBGaAT4HneD4OlXx7avtDYUjT'. + 'HQabd2Ti8e3vVSKzxrtHS32wIpFVldno22Nqvvg2Bhl0gp/aNm'. + 'vJ3qqXAtLIva+ks1H0wqlSXi4+d6+OFTfRsAfHJx2d1od24rZP'. + 'xP2HzopINr1mkesX7ccojqif0v9crxWXODZTno3+dNGA7uWLsd'. + 'mUYU4fHJCViMG9umLBmM4L6fagZGg9QKfjZ+Qfy3C3G/B3mugF'. + 'IHHNcDf64E3KJALApk2p8CSolUUqLjFkyxOGMsTtFyJ+Wz57NQ'. + '8DghS4sLB0svioeZZo7nPhFoUKZDIVFbglkTTnl5/rC8snjAkJ'. + 'Bk/XV5LxHC/v7tR8jzTFPbg8LENK9WX0Vv31T2AEmCSmlKCCoh'. + 'ROnP1U1tPFYjJBRcbtzSf+GPsFTAQBq1n4AAAABKdEVYdHNpZ2'. + '5hdHVyZQBiYzYyMDIyNjgwYThjODMyMmUxNjk0NWUzZjljOGFh'. + 'N2VmZWFhMjA4OTE2ZjkwOTdhZWE1MzYyMjk0MWRkM2I5EqaPDA'. + 'AAAABJRU5ErkJggg==' ; + } +} + +?> diff --git a/Societes/ric/jpgraph/imgdata_bevels.inc.php b/Societes/ric/jpgraph/imgdata_bevels.inc.php new file mode 100755 index 00000000..c98fa571 --- /dev/null +++ b/Societes/ric/jpgraph/imgdata_bevels.inc.php @@ -0,0 +1,104 @@ + 'imgdata'); + + protected $colors = array('green','purple','orange','red','yellow'); + protected $index = array('green'=>1,'purple'=>4,'orange'=>2,'red'=>0,'yellow'=>3); + protected $maxidx = 4 ; + + protected $imgdata ; + + function __construct() { + //========================================================== + // File: bullets_balls_red_013.png + //========================================================== + $this->imgdata[0][0]= 337 ; + $this->imgdata[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAM1'. + 'BMVEX////////27t/f3+LFwcmNxMuxm62DmqKth1VpZmIWg6fv'. + 'HCa7K0BwMEytCjFnIyUlEBg9vhQvAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElN'. + 'RQfTAxcBNhk+pYJVAAAAl0lEQVR4nE2Q2xLDIAgFHUWBKJf//9'. + 'oekmbafVDZARRbK/pYTKP9WNcNv64zzUdd9BjmrgnsVXRNSzO3'. + 'CJ5ahdhy0XKQkxld1kxb45j7dp0x2lBNOyVgQpMaoadX7Hs7zr'. + 'P1yKj47DKBnKaBKiSAkNss7O6PkMx6kIgYXISQJpcZCqdY6KR+'. + 'J1PkS5Xob/h7MNz8x6D3fz5DKQjpkZOBYAAAAABJRU5ErkJggg'. + '==' ; + + //========================================================== + // File: bullets_balls_green_013.png + //========================================================== + $this->imgdata[1][0]= 344 ; + $this->imgdata[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAM1'. + 'BMVEX////////27t/e3+K3vriUub/Dm18j4xc3ob10k0ItqQlU'. + 'e5JBmwpxY1ENaKBgUh0iHgwsSre9AAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElN'. + 'RQfTAxcBNTfJXtxZAAAAnklEQVR4nE2QWY4EMQhDUVhSIRC4/2'. + 'kbaqLp9p+f2AxAayAzDfiK9znPORuvH0x8Ss9z6I9sHp6tcxE9'. + 'nLmWmebmt5F5p2AR0+C9AWpLBjXRaZsCAT3SqklVp0YkAWaGtd'. + 'c5Z41/STYpPzW7BjyiRrwkVmQto/Cw9tNEMvsgcekyCyFPboIu'. + 'IsuXiKffYB4NK4r/h6d4g9HPPwCR7i8+GscIiiaonUAAAAAASU'. + 'VORK5CYII=' ; + + //========================================================== + // File: bullets_balls_oy_035.png + //========================================================== + $this->imgdata[2][0]= 341 ; + $this->imgdata[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAM1'. + 'BMVEX////////27t/f3+K5tbqNwcjnkjXjbxR2i5anfEoNkbis'. + 'PBxpU0sZbZejKgdqIRIlERIwYtkYAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElN'. + 'RQfTAxcBNgK0wEu5AAAAm0lEQVR4nE3QVxIEIQgEUErAgTHA/U'. + '+7zbipf9RXgoGo0liMmX6RdSPLPtZM9F4LuuSIaZtZWffiU6Iz'. + 'Y8SOMF0NogBj30ioGRGLZgiPvce1TbIRz6oBQEbOFGK0rIoxrn'. + '5hDomMA1cfGRCaRVhjS3gkzheM+4HtnlkXcvdZhWG4qZawewe6'. + '9Jnz/TKLB/ML6HUepn//QczazuwFO/0Ivpolhi4AAAAASUVORK'. + '5CYII=' ; + + //========================================================== + // File: bullets_balls_oy_036.png + //========================================================== + $this->imgdata[3][0]= 340 ; + $this->imgdata[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAM1'. + 'BMVEX////////27t/e3+LO3hfYzz65ubiNwci6uQ12ipadgVGa'. + 'fwsNkbhnVkcaZ5dwSA8lFg7CEepmAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElN'. + 'RQfTAxcCBySi1nevAAAAjElEQVR4nFXPWw7EIAgFUNMoCMhj/6'. + 'staKczc/2RkwjS2glQ+w3YytgXCXCZpRo8gJdGxZadJws13CUP'. + '4SZI4MYiUxypeiGGw1XShVBTNN9kLXP2GRrZPFvKgd7z/sqGGV'. + '7C7r7r3l09alYN3iA8Yn+ImdVrNoEeSRqJPAaHfhZzLYwXstdZ'. + 'rP3n2bvdAI4INwtihiwAAAAASUVORK5CYII=' ; + + //========================================================== + // File: bullets_balls_pp_019.png + //========================================================== + $this->imgdata[4][0]= 334 ; + $this->imgdata[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAM1'. + 'BMVEX////+/v7i4eO/w8eHxcvKroNVormtfkjrMN2BeXQrepPc'. + 'Esy4IL+OFaR7F25LHF8mFRh5XXtUAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElN'. + 'RQfTAxcBNgkjEpIxAAAAlElEQVR4nE2QAQ7FIAhDDTAVndL7n3'. + 'ZV/7JfEwMvFIWUlkTMVNInbVv5ZeJqG7Smh2QTBwJBpsdizAZP'. + '5NyW0awhK8kYodnZxS6ECvPRp2sI+y7PBv1mN02KH7h77QCJ8D'. + '4VvY5NUgEmCwj6ZMzHtJRgRSXwC1gfcqJJH0GBnSnK1kUQ72DY'. + 'CPBv+MCS/e0jib77eQAJxwiEWm7hFwAAAABJRU5ErkJggg==' ; + + } +} + + +?> diff --git a/Societes/ric/jpgraph/imgdata_diamonds.inc.php b/Societes/ric/jpgraph/imgdata_diamonds.inc.php new file mode 100755 index 00000000..a0d6a421 --- /dev/null +++ b/Societes/ric/jpgraph/imgdata_diamonds.inc.php @@ -0,0 +1,177 @@ +'imgdata'); + protected $colors = array('lightblue','darkblue','gray', + 'blue','pink','purple','red','yellow'); + protected $index = array('lightblue' =>7,'darkblue'=>2,'gray'=>6, + 'blue'=>4,'pink'=>1,'purple'=>5,'red'=>0,'yellow'=>3); + + protected $maxidx = 7 ; + protected $imgdata ; + + function __construct() { + //========================================================== + // File: diam_red.png + //========================================================== + $this->imgdata[0][0]= 668 ; + $this->imgdata[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAMAAAC6CgRnAAAA/F'. + 'BMVEX///////+cAAD/AADOAABjAABrAADWGBjOCAj/CAj/GBj/'. + 'EBCcCAiMOTl7KSl7ISFzGBilGBjOEBBrCAjv5+eMQkK1QkKtMT'. + 'GtKSnWKSn/KSlzEBCcEBDexsb/tbXOe3ucWlqcUlKUSkr/e3vn'. + 'a2u9UlL/a2uEMTHeUlLeSkqtOTn/UlL/SkrWOTn/QkL/OTmlIS'. + 'H/MTH/ISH39/f/9/f35+fezs7/5+fvzs7WtbXOra3nvb3/zs7G'. + 'nJzvtbXGlJTepaW9jIy1hITWlJS1e3uta2ulY2P/lJTnhITne3'. + 'vGY2O9Wlr/c3PeY2O1Skr/Y2P/WlreQkLWISGlEBCglEUaAAAA'. + 'AXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAA'. + 'sSAdLdfvwAAAAHdElNRQfTAwsWEw5WI4qnAAABGUlEQVR4nHXQ'. + '1XLDMBAFUKUCM1NiO8zcpIxpp8z0//9SWY7b2LHv6EU6s1qtAN'. + 'iMBAojLPkigpJvogKC4pxDuQipjanlICXof1RQDkYEF21mKIfg'. + '/GGKtjAmOKt9oSyuCU7OhyiDCQnjowGfRnooCJIkiWJvv8NxnG'. + 'nyNAwFcekvZpPP3mu7Vrp8fOq8DYbTyjdnAvBj7Jbd7nP95urs'. + '+MC2D6unF+Cu0VJULQBAlsOQuueN3Hrp2nGUvqppemBZ0aU7Se'. + 'SXvYZFMKaLJn7MH3btJmZEMEmGSOreqy0SI/4ffo3uiUOYEACy'. + 'OFopmNWlP5uZd9uPWmUoxvK9ilO9NtBo6mS7KkZD0fOJYqgGBU'. + 'S/T7OKCAA9tfsFOicXcbxt29cAAAAASUVORK5CYII=' ; + + //========================================================== + // File: diam_pink.png + //========================================================== + $this->imgdata[1][0]= 262 ; + $this->imgdata[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbBAMAAAB/+ulmAAAAEl'. + 'BMVEX///+AgID/M5n/Zpn/zMz/mZn1xELhAAAAAXRSTlMAQObY'. + 'ZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAA'. + 'AHdElNRQfTAwsWEi3tX8qUAAAAbUlEQVR4nFXJwQ3AMAhDUdRm'. + 'kKojuCswABf2X6UEEiC+WF+PyDfoGEuvwXogq3Rk1Y6W0tBSG8'. + '6Uwpla6CmJnpoYKRsjjb/Y63vo9kIkLcZCCsbGYGwMRqIzEp1R'. + 'OBmFk9HQGA2N0ZEIz5HX+h/jailYpfz4dAAAAABJRU5ErkJggg'. + '==' ; + + //========================================================== + // File: diam_blue.png + //========================================================== + $this->imgdata[2][0]= 662 ; + $this->imgdata[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAMAAAC6CgRnAAAA+V'. + 'BMVEX///+AgIAAAJwAAP8AAM4AAGMAAGsQEP8YGHMQEHMYGP8Q'. + 'EKUICJwICM5KSpQxMYQpKXsYGNYQEM4ICGsICP97e85aWpw5OY'. + 'xSUv85ObVCQt4xMa0pKa0hIaUpKf+9vd6EhLVra+dzc/9SUr1r'. + 'a/9aWt5SUt5CQrVaWv9KSv8hIXs5Of8xMf8pKdYhIdYYGKUhIf'. + '/Ozs739//v7/fn5+/v7//n5/fW1ufOzufOzu/W1v+trc69veel'. + 'pc6trd6UlMa9vf+MjL21tfe1tf+UlNZzc61ra6Wlpf+EhOeMjP'. + '9ra8ZSUpyEhP9CQoxKSrVCQv85Od4xMdYQENZnJhlWAAAAAXRS'. + 'TlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAd'. + 'LdfvwAAAAHdElNRQfTAwsWEx3Snct5AAABFklEQVR4nHXR5XbD'. + 'IBgGYM6AuHsaqbvOfeuknev9X8xISbplSd5/8JyXwwcA/I0AKm'. + 'PFchVBdvKNKggKQx2VIoRwMZihMiQE49YUlWBCcPL0hYq4ITh+'. + 'qKECUoLDZWqoQNA766F/mJHlHXblPJJNiyURhM5eU9cNw5BlmS'. + 'IrLOLxhzfotF7vwO2j3ez2ap/TmW4AIM7DoN9+tu+vLk6Pdg9O'. + '6ufXjfXLm6pxPACSJIpRFAa+/26DhuK6qjbiON40k0N3skjOvm'. + 'NijBmchF5mi+1jhQqDmWyIzPp1hUlrv8On5l+6mMm1tigFNyrt'. + '5R97g+FKKyGKkTNKesXPJTZXOFIrUoKiypcTQVHjK4g8H2dWEQ'. + 'B8bvUDLSQXSr41rmEAAAAASUVORK5CYII=' ; + + //========================================================== + // File: diam_yellow.png + //========================================================== + $this->imgdata[3][0]= 262 ; + $this->imgdata[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbBAMAAAB/+ulmAAAAEl'. + 'BMVEX///+AgIBmMwCZZgD/zADMmQD/QLMZAAAAAXRSTlMAQObY'. + 'ZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAA'. + 'AHdElNRQfTAwsWEwcv/zIDAAAAbUlEQVR4nFXJwQ3AMAhDUdRm'. + 'kKojuCswABf2X6UEEiC+WF+PyDfoGEuvwXogq3Rk1Y6W0tBSG8'. + '6Uwpla6CmJnpoYKRsjjb/Y63vo9kIkLcZCCsbGYGwMRqIzEp1R'. + 'OBmFk9HQGA2N0ZEIz5HX+h/jailYpfz4dAAAAABJRU5ErkJggg'. + '==' ; + + //========================================================== + // File: diam_lightblue.png + //========================================================== + $this->imgdata[4][0]= 671 ; + $this->imgdata[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAMAAAC6CgRnAAAA/1'. + 'BMVEX///+AgIAAnP8A//8Azv8AY/8Aa/8I//8Y1v8Izv8Y//8Q'. + '//8InP8Qzv8Ypf85jP8he/8Yc/8Ia/8pe/8p//8p1v9Ctf8xrf'. + '8prf8QnP8Qc/9CjP+1//97//9r//9S//9K//9C//85//8x//8h'. + '//9r5/9K3v9S3v851v97zv9Svf85rf8hpf/G3v9SnP9anP9KlP'. + '8xhP/n7//v7+f3///n///O//+U//9z//9j//9a//975/9C3v8h'. + '1v+E5/+17/9j3v/O7//n9/+95/+l3v9jxv+U1v8Qpf9avf9Ktf'. + '+Uxv+11v97tf9rrf+cxv+Mvf9jpf+tzv+Etf/O3v/39/8Akkxr'. + 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx'. + 'IAAAsSAdLdfvwAAAAHdElNRQfTAwsWEiHk6Ya/AAABGUlEQVR4'. + 'nHXQ13KDMBAF0J2o0E01GHDvJa7p3em95/+/JQJMYjDc0Yt0Zr'. + 'VaAaxHgtxwbSGPkGQpOIeQ2ORxJiJmNWYZyAhZR0WcgQGhViU0'. + 'nEGoedDHGxgRapRPcRpXhOr7XZzCmLjaXk9IIjvkOEmSRLG62+'. + 'F5XlEElhA5sW21GvXj6mGlDBfnJ51lr9svnvEKwH1hu2QPbwd3'. + 'N9eXVzuL7/Hn29frdKaamgcgy67L3HFG9gDefV+dm5qme4YRXL'. + 'oVR374mRqUELZYosf84XAxISFRQuMh4rrH8YxGSP6HX6H97NNQ'. + 'KEAaR08qCeuSnx2a8zIPWqUowtKHSRK91rAw0elmVYQFVc8mhq'. + '7p5RD7Ps3IIwA9sfsFxFUX6eZ4Zh4AAAAASUVORK5CYII=' ; + + //========================================================== + // File: diam_purple.png + //========================================================== + $this->imgdata[5][0]= 657 ; + $this->imgdata[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAMAAAC6CgRnAAAA/F'. + 'BMVEX///////8xAP/OAP+cAP9jAP9rAP+cCP85CP/OEP9SKf/O'. + 'CP9CEP9zGP9rCP+lGP/WOf/WIf9KIf9jOf+MQv+EMf97If9zEP'. + '+1Sv+lIf/ne//eUv/na//n5//Oxv/Wzv+chP9zUv97Wv9rQv9a'. + 'Mf9KGP/v5/+te/97Kf+9Y/+tOf+tKf+lEP/vtf/WMf/WKf/v7+'. + 'f39/+tnP+9rf9rSv9jQv9CGP+ljP+EY//Gtf+tlP+Ma/9zSv/e'. + 'zv+UUv+9lP+cWv+lY/+cUv+MOf+EKf+UQv/Opf/OhP/Ga/+1Qv'. + '/Oe/+9Uv/ntf/eWv/eSv/WGP/3zv/vlP/WEP//9/+pL4oHAAAA'. + 'AXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAA'. + 'sSAdLdfvwAAAAHdElNRQfTAwsWEjX+M1LCAAABDklEQVR4nHXQ'. + '1bLDIBAGYFqIEW+ksbr7cXd3ff93OUCamdOE/Mxw882yywLwPz'. + '+gNKotlRFUVnNUQlCxTMRFCKEdE+MgpJaEiIOU4DKaoSIygtb3'. + 'FBUQrm3xjPK4JvXjK0A5hFniYSBtIilQVYUm+X0KTVNiYah+2q'. + 'ulFb8nUbSovD2+TCavwXQWmnMA6ro+di+uR5cPzfPhVqPV3N1p'. + 'n3b3+rimAWAYhP3xnXd7P6oc9vadPsa1wYEs00dFQRAFehlX21'. + '25Sg9NOgwF5jeNTjVL9om0TjDc1lmeCKZ17nFPzhPtSRt6J06R'. + 'WKUoeG3MoXRa/wjLHGLodwZcotPqjsYngnWslRBZH91hWTbpD2'. + 'EdF1ECWW1SAAAAAElFTkSuQmCC' ; + + //========================================================== + // File: diam_gray.png + //========================================================== + $this->imgdata[6][0]= 262 ; + $this->imgdata[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbBAMAAAB/+ulmAAAAEl'. + 'BMVEX//////wAzMzNmZmbMzMyZmZlq4Qo5AAAAAXRSTlMAQObY'. + 'ZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAA'. + 'AHdElNRQfTAwsWExZFTxLxAAAAbUlEQVR4nFXJwQ3AMAhDUdRm'. + 'kKojuCswABf2X6UEEiC+WF+PyDfoGEuvwXogq3Rk1Y6W0tBSG8'. + '6Uwpla6CmJnpoYKRsjjb/Y63vo9kIkLcZCCsbGYGwMRqIzEp1R'. + 'OBmFk9HQGA2N0ZEIz5HX+h/jailYpfz4dAAAAABJRU5ErkJggg'. + '==' ; + + //========================================================== + // File: diam_blgr.png + //========================================================== + $this->imgdata[7][0]= 262 ; + $this->imgdata[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbBAMAAAB/+ulmAAAAEl'. + 'BMVEX///+AgIBmzP9m///M//+Z//8hMmBVAAAAAXRSTlMAQObY'. + 'ZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAA'. + 'AHdElNRQfTAwsWEwCxm6egAAAAbUlEQVR4nFXJwQ3AMAhDUdRm'. + 'kKojuCswABf2X6UEEiC+WF+PyDfoGEuvwXogq3Rk1Y6W0tBSG8'. + '6Uwpla6CmJnpoYKRsjjb/Y63vo9kIkLcZCCsbGYGwMRqIzEp1R'. + 'OBmFk9HQGA2N0ZEIz5HX+h/jailYpfz4dAAAAABJRU5ErkJggg'. + '==' ; + } +} + +?> diff --git a/Societes/ric/jpgraph/imgdata_pushpins.inc.php b/Societes/ric/jpgraph/imgdata_pushpins.inc.php new file mode 100755 index 00000000..e59b7427 --- /dev/null +++ b/Societes/ric/jpgraph/imgdata_pushpins.inc.php @@ -0,0 +1,517 @@ + 'imgdata_small', + MARK_IMG_SPUSHPIN => 'imgdata_small', + MARK_IMG_LPUSHPIN => 'imgdata_large'); + + protected $colors = array('blue','green','orange','pink','red'); + protected $index = array('red' => 0, 'orange' => 1, 'pink' => 2, 'blue' => 3, 'green' => 4 ) ; + protected $maxidx = 4 ; + protected $imgdata_large, $imgdata_small ; + + function __construct() { + + // The anchor should be where the needle "hits" the paper + // (bottom left corner) + $this->anchor_x = 0; + $this->anchor_y = 1; + + //========================================================== + // File: ppl_red.png + //========================================================== + $this->imgdata_large[0][0]= 2490 ; + $this->imgdata_large[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMKBh4Ryh89CgAACUdJREFUeJy9mNtTFFcexz+/7p'. + '4Lw1wZJKDGCAwmDAqUySamcCq1ed6k9mn3UfMP7F+1T3nYqn2J'. + 'lZdoDEjpbq0KG8EBFBFBEJye6Zmenkv32Ydu5GYiUMmeqq6uqT'. + '6Xz3zP73aOcIKmAQkIFyD3N/jrBPwlKjLQEglVlJKyUjR3u7cc'. + 'WLoP3/4dvv03LNrQ8I6x1rFbDML9kOmHvh7IRHU9JKmUSG8vpF'. + 'IoXX/TV0AiEM5A5jT0noFMFMJHXUt/d5f9TUAbhtQ3cPFruDog'. + '8klHMnmO0dGYe/myOJGINEwTz3F2higFXgy8PpAkOC+h8hoaCt'. + '4ppHFcQAWSgOQlyI/p+lUjmRxWAwNJd3xca/f34yoFi4tgmjtD'. + 'NIFkJ4xcgBCgVqEBFJ9DqcZea/gNAAVEg7AOGYnHe9XoaJd3+X'. + 'LISSSwnz6lsbKCZ9sHh4UVdBkwdA6cPwNnIfJPmC3Ctgft3wwQ'. + 'QPkvTZJJnbExzfvsM2nMzVG7e5fG48d4lnXwTwEYCjJxuHQBog'. + 'BHUfKkgAIIhiGk06hTp/Dm5qS1uYlXLvtWd4gPgIiCrAEcVckT'. + 'Ab5p7TaYJrK1hQaEenrwSiVfQdc91P0kSp7Ii89D5ksY/kAkLy'. + 'IZXFdXkQjS1YUSEbdcRu168V6+HTUNIKJDRwdE+sBIQmP9Ld59'. + 'bEBA3of4F/D+uXb7rGaaCSmXI3pPj64PDaHCYfEqFVSjgWo2D2'. + '73XlJNQTgCyQykIuBWoNKEeh1aLXBPBCggGdBOgxZVSjoajVhH'. + 'o5HWlIpq4bCQSgm9vXhK4ZZKh5SUYygp4J1EQVUD9xlU18BJQD'. + 'bUbJ5T5XJStyxN9fSI099P3baxV1dRloW2h2ivx/yakg2ot6F1'. + 'EkCa4G1D+zVEq5ArKTWM42Q6HUczQV7U66w9e0ZpdRXlOIQ5vF'. + 'VHUXILKify4jiEzkOqC3peQMoBQymFlMt4Dx6wUSxSsm2UZXEK'. + 'P30QvOUt8/2Sd78CdWwFDTA+gsw3cOlPcPUD+CQB52oQ21RKXM'. + 'eRhGXhOg7VoKrx8KuS4ygZhVg3ZI8FGIfwR9BVgAtfwxdXdP3L'. + '86nUR91dXelNXTeWWy10paQHX602YAP1ADASAL7LJvFtMpOCc0'. + 'cG3FHuGlz6Gr4YEpnoTCbzsdHRbOzy5RCRiLRMk5rjyOtAimwA'. + 'U4U3SurBN/0wnAASBCVDIKpB4kiAB5Ub0/UvO9LpPAMDGfn005'. + 'AxPCzxep3Q6iqPLUseBoufCZRsAE6g5g5kKIDfKUj3wnpAG8QB'. + '/Z1OIqANQuI65AtwNScyYXR2XlAXL2YZHzcklRKWl5GVFXFtGx'. + 'MoAiV/EQaAGH6BUQNWgQpwFngv+Ca8KUAQEBcwgTJHyMV7679R'. + 'XS8YqdSI6u/PMD5ukMtJY3GR2uQkr5aXeWVZOEALmA8WsIAxfL'. + 'd0goVLAdCOd+/YpgqeVtBv4yiA++q/RKKXixe7GB8PSyoljcVF'. + 'yg8fyubyMpulEk2lyAIfAAvAC+B+oOQFoAt/+0rAejB/EzjNri'. + 'vvqNnCd64jxcE39V8spnP+vMbAgDSePKE2NcXm06dslMuUlcID'. + 'TuFvqwXMBU8N39bGgRR+ki0Dz4L5DSAe9NGD7zq+6kcN1L6H2b'. + 'ao5WWaQHllRTafPmWrVMJUimoAQrBYJFjQwre7B6A8YAi8LCgD'. + '5DVo6/hbb/iHK1KggvFeD3hHziQKEMuiNTNDbXGRTdtmw7Iwla'. + 'KGH0oqwbscLOoG46rAY6AOzRhY74PT6QuUKEN4PegXxd/yEDTT'. + 'YMWOk+oEaLkuFdNk0zTZwjfkavDUArXWgGXgFb4dEShXhfYqlI'. + 'ow3w9rg3B6ED60IOOA5oEYQBrcpG+mj9bg0VG8GMJhVDZLyzAo'. + 'VSq8rFYxXXefcjVgG9+uisDrXUCApoKSBcUHMBmHhfcgNwhtD3'. + 'q9IG6Lr15b4OUTmPwBJt8JqGuapp05o0mhoHnptLQfPsR+8IBK'. + 'uYyNH3yr+B77LHheA3tK1Ta+IrMeTL2C6Xl48TOsNWDDgAz7s5'. + '/r+krP/eddCsbj8fDQ4GBm9MqVvvRXX2VULBayRGRzaYn1SoWa'. + 'UjgB4PIB5QK4ZgBXBKaAHxQsrED1H7CRgCUPwgHZDqACmhWwXv'. + '2aDRqGYeRyufS169cvThQKV88PDuYbW1vJ5VRK+5euqxWlPMdX'. + 'SRqgreHbZGN3ijfKBXBTAeh2Fdwi2MofshP/dvKwCmKhp4m83Y'. + 'vj8Xg4l8tlCoXC0MTExMTFkZE/1m37wvLGRvKRacoD1209E7Fc'. + 'pZwYREOQqEJ4z3HskHLsz4AoXykPIBSN0t3dTTQafROoHdumXC'. + '4fjoMiog0ODiauX7+eLxQKV3O53ETdti88nJnJ3rl505ifmWm3'. + 'arWSodR8GNbycDoNHy5C5jFold1k8d+DyvELNwg93d18/vnn9P'. + 'X1oes6nufx/Plz7t+/fxhQKSWJRCI5NjaWHxkZKdj1+sjSwkJm'. + '+uZN/dZ337VqCwullGUVdZjsgIUC5LqhrUPvCugWuApeApPAzY'. + 'PKHWyaphGNRunt7WVwcBARwfM8Ojo6sCzrMKBhGLphGFEF2Wq1'. + '2jc7M5OZ/vHH0MPbt93awkJJmeZsC6ZaMK3DCwvWdNioQUb5B6'. + 'AdBR+9SzkAz/NwHIeXL18iIui6TjgcJplMMjY2th8wHo+Hh4aG'. + 'MsPDw6fddru7+Phxx51bt/RbN260qwsLpZhlFZsw9QJ+2Pbrga'. + 'oJG2FY2oKwuTtVEz9uV34NbqdtbW0xPT1NNBoF4MyZM1y5coWu'. + 'rq5dQBHRcrlc4tq1a/l8Pj9RMs38ndu3Ez//9JNXLRZNyuXZJk'. + 'xVYKoExQpsK/+IaAuYb7no8zjC/R+A4zisrq7u+53NZjl16tQ+'. + 'QIlEIslsNpuPRCJXZ2dnh2/duNFRW1oy07a96MKd575yxRqU1B'. + '5vPMpF5HHa1tYW9+7do7Ozc/eQpZTSQ6FQt1Lq8pMnT/5w7969'. + 'nuLcXE1rNufO9fRMhlKpOyvt9qPtVmvb25fFfvvWbrepVCqHwo'. + 'xaX19vff/996ZhGC8qlkW9Wt1Onz073fXxxz+6MB+9e9dUjuO+'. + '7ebq9wLdB9hoNCrr6+s/4wf3FCJW3fPmTZhXsNWCprjuW66Dfr'. + '928KAfBhJAEgiJSLuzs7OSTqctoFkqlZRt26j/I+L/AGjPTN4d'. + 'Nqn4AAAAAElFTkSuQmCC' ; + + //========================================================== + // File: ppl_orange.png + //========================================================== + $this->imgdata_large[1][0]= 2753 ; + $this->imgdata_large[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMLFQ0VCkHCzQAACk5JREFUeJytmGtzG0d2hp8zNw'. + 'AEcRdJ6EJK9FL0CqZUm9jWbkwq3vhDstl8dmLvz8rP2H8Q75ZT'. + 'pkRfpLgqsS6WIFEKGYkiSBCDO+banQ8DUpRWEkklXQUUqlCDfv'. + 'rp857pgfAOQ4AMOJdg4R/hX96Hf06bvDc5iT07i8yeg8ksiIAI'. + '4TBi/ds9/vivD/njapNHvRBfHXMu410AM+BUoVSF05NQsi1sO4'. + '8402AXwLQTuP31OAZO2aG0MEn14iSlnI1z3LnMk8IZYJyBwjIs'. + '/TWsVIWPJkvMFS4zMfMhUp5BsoCpAAEBLYKaMFGn00jBxnvu02'. + '35+JHmSJEnBpQEcPo38MmCxd/nS9Ry71Ga/g1W9a8gn0GsHkgA'. + '6DGjxkqb5CoO+YxF3A3p+jGjQUzoK+L/V0ADzFMwtSR8eLbAr8'. + 'uXOTf9NzhTc0geSLUQcYHgYEH786RMg0zWJHV2Aitv4x/HpHVS'. + 'QA2YBqTTGIUq5qkPMWaWkVwPnPtAA/BevmZcjxaaUtHh8pJJGu'. + 'DpCB9FvT7A7YT7S3p5vFMNzmWo/O0MSx/Ms3TqI8r59zFTfUQe'. + 'I7SBODE3tnfoIxYnNHligwik0zAzDdVpyKbA8sff5YAeMEwgkV'. + 'cufQeTJzZoCsaFLKXPTnNpoUTNsSgJmNoGsuNQjIDwYD2HlnZy'. + 'k++yxTKXZfKTU8zOpjhneeQYkorSmGERtIlICBKRbLX+y98YN3'. + 'ADcNIm+bJD4U3pPnmbEaRgYVRTGBkDSSsmxKfY7ZLuDJA4hdjl'. + 'JEgyBB2SJOvQ9RzTpNKoEwNq0CNFvOXR3/HxMgYVPObaz8kPmh'. + 'hkEWMatAfRONGGvLizyOE9P8KkpwhPDAgQKJQbELUD0oOIhbbH'. + 'JeVTmowxjAgZutB5AoOngA+2DdYrcTyOyYZP9+QpBvI29vwEhb'. + 'It042BVQgDy9KTMfkwQG1A9ACCLlgBBGUwxxoc52WDh2ATyEPp'. + '1hoaPvrEBh0Dq5an9OUsl/9hylk5b5c+mowLc4E2Jtw4Eoljyf'. + 'ogA/AGEAagNRjGyUxOmEycyVA5EWDBxrmUp3ytLIv/NJP69Goh'. + '+9mFydIvS5PZYkvH1oY/RFtKymlwBFQAgQd+kAA6qSQ8pvn2mp'. + 'SkJkuVFHPHBnQMrEt5Sl+e4/Lvp51PF1PF5Xy6WMvOWZXMom8z'. + 'OZTQ8+j5sbQiMEwopsCIwRtBGIJSCdzbTGo9NimkDcgdC7Bg49'. + 'TG5n4/nfr0Si77WdYp1YzyZEkWPdteaEnB7pPqBTxuIf/VgciE'. + 'SgasCPwh+GNIkaNNag1RiPge5pEhMQVjfoLcF+eoXSvbKxedwn'. + 'LKzC3KWbOi5/sW5a44/SHFUSgVA7SCzRG0AvA9mPOgFIETgu4n'. + 'Ww0wNQWFAqRSL6D2ZQYBdDrQ7R7jXiwgRcvIL02makuTmWtpM/'. + '+BlLMl5vuWzLVEuwH6oYnR1KS8kJINGXMM2YdfRlALoQoQQKeb'. + 'bDVwoMdxQMaLCwLo96HZTF5HbrEhmOftianfZisfzueKv7ZmrX'. + 'MsjhxKXZGBjzyeEHmSE3oWiggtyVGmE8DTIXTC5NxgAxOAGUM8'. + 'fun9mnSSLQ/CxNzOTgJ3LIMgoGwkKBiiMyaVviHVkdCO4FEKNv'. + 'LQzWBYHfITPa4UBVM0LR/WB7ARJsdDDTjA6deYFIFUOimJ3d0E'. + 'sNdLavYYgBpthqKcjiiJRO8K6CK0CsJTjfQAGaJtD9vQFAxNNQ'. + '1FB0yBAfA8gdMAIagLoCVAen0M00zMOTYShNDtoHs9CAIUoI4E'. + '1IBihCdNhsMhsj6NuV7BCC2IBpBqQaaFOENCCeiEsO1BO4RQgy'. + 'I5Hm4k4oIU9MrgZSAdBeTabZz+ODxKQRRBFBJo6IUc51anYRQo'. + 'dto+24FNxYCiaWKkQsj00KkO4gxRRkAngJ868M0u3OkkM+hxQA'. + 'cQ7YD7GO5XYSsPZybh/TCkFIYY+kWniTW4Q7jXgHvHMhiRpmuW'. + 'ca08GZkkZ/nY6TZMNhCnf2CuPoDVJvxpB+q9BHA8Ag1uH+oP4c'. + 'YEPCzDwmzSLquShHW/E0YRbG/BjZtw40hAy7aNzJlzRn75E6N0'. + 'qiwTzafI7kOU3gWrhzZC2iHcbsPqLlxvJnCt4KC1RYAL3I5hzY'. + 'Xv/huePYCtITQMKEnyB4KQvMURuJvw889HGSwUCs7CwkLpo6tX'. + 'Ty/+7nel6VLGDn/8N9m+eZuo1UP8iNhLau6b3RfmOsHBGTUYw9'. + 'WBNeDrGB4+h/4qNLKwTnLbHj9CJw/6GoIh9Jpvq0HHcayFhYXi'. + 'l3/4w9LK8vLKexfma3G/mb/3n1njTivS7tNQaaU1grQDjJ868D'. + 'Axx6vmxnBrY9C9IcSbSXbavNjb/S3eN6/0m1JcKBScixcvllZW'. + 'Vi6uLC8v12q1v/M8b/HxVjP//YYr32yE4dYWvShO0ogi14xwxq'. + 'F4rbnxZ3cMjtpvEEeMvwA0TdOYn5/PffHFF7Vr166tvPeLXyx7'. + 'nrd4+/btyg/frFo//Xgncnd67qCn78earQqcmYD3fSi1wPCTSV'. + '3gzqvm9uFOMl5nUAqFQn5paal26dKla57vf7D+6FHph9VV88af'. + 'vgq79bo70e3VT2l9A3hYg4UiRALVHTCHSZvYBm4A//6quf8zoG'. + '3bpuM4acMwKr1+//SDe/dK31+/bv90/Xrcq9fduNW6rbVeC+E7'. + 'gWdD2DKg4UEpBmPcm10RuScida31ntb62HAigoigDw6Gh0axWH'. + 'QWFhZKi4uLZ+I4PrVer2e+u37dXPvqq6hbr7tOp1NXWq89h6/b'. + '8FBB34WGBesdcPrj38lkMkGlUuml0+mu53nR3t4eo9HoSLhMJk'. + 'OlUiGdTuN5Hq7rvgA0TdO4cOFC7vPPP6/VarXldqdTu7m2lrv7'. + '7beq++BBO263b/tKrfWSXlbvwJ6CuAtDgTYiaBFMw6BSqfDxxx'. + '+rarWqGo0GN2/eZGtrC6XenAkRoVKpcPXqVWZmZmg0Gty6desF'. + 'oIhIOp3Ol8vlmmVZK3fv3Lm09uc/Zwbr653ccPgoNIzvnmn99Z'. + '7W9QG46lAaM5mM2l95GIYUi0VOnz7N7OwsWmsymQzyuse5Q8Mw'. + 'DNLpNDMzM5w/f/7A6AGgUkoajYa9urpayOXzUz/fvZutr68Pim'. + 'F4/2y1+n2o9Q/ru7uPesPhXnyo4A+vfHp6mmazybNnz9jZ2UFr'. + 'TbPZJAhe+8/aS0Mphed5NBoNABqNBqPR6MWBVWstvu/nnj9/Pv'. + 'vo0aPq5uZmPBgM/qcwPf39xV/9ajU1M3Nvq9PZaw8GoT50PjdN'. + 'k6mpKa5cucL58+eJ45j19XWePHnCzs4OnudhmiaWZRGGIVH05r'. + 'yEYYjrumxubrKxsfFyDQJ6NBp1Pc+7C4jWumBaVm+kVL2l1H2l'. + '1G6otS+H6V6z8u3tbVzXpdFooJRicXGRqakptre3uXXr1ltrcT'. + 'Qa8ezZszemWAE9rfUdYBOwtVLRbrPZ+48ff+wDvuu6Sr3MB4Dr'. + 'uty6desgfa1WC3iRyrNnz4pSSmezWUzTfGtYtNYcdvC/9sMlgP'. + 'n5N4cAAAAASUVORK5CYII=' ; + + //========================================================== + // File: ppl_pink.png + //========================================================== + $this->imgdata_large[2][0]= 2779 ; + $this->imgdata_large[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMLFQolY9lkpgAACmhJREFUeJy9mOtzFNl5h5+3b9'. + 'Mz0kzPBWmEVtIiWYhIiC0HCDhB8lb8ISk7nzdZ5+/zJ/8BTmpT'. + '660CZLwG1pVFgBkgGIHECEaa+/T9nHzQCCQuRpCNz6mp6g893U'. + '8/c37ve3qEjxiC4OA4n/Lp/EUu/tsMM/+aEWduVBx7WhdkShcY'. + 'xUH2zo0Dwod/5N6vf8V//PoGdx8M8EOFPtK9jI8BdHCcMuVSmf'. + 'LxHLmSZdm2U8xIbmKETDGDZZnIy4dBbCynyGhphurEDBOlHFnn'. + 'qPcyPxTOwDCOccw7w5nlBRZWylI+ny/mZ6rL1dzUZ5/IWGZU3D'. + 'ZIOMQDDaJcHDVGWUbJBi9odVr0QoVSPzigIEaZ8vgSS/8wZU3/'. + 'k1fylipz5dLM2WlrZqHKaGCKbEbontq3KAKWQyZfZKTgYqc9Bp'. + '2I2PcJ4ogk/UEBQcwipbFZmT13vDBx8fhnE1Ofnp9yJopFyT3X'. + 'yANfks0QHSQMDaL37pOxMLIu2UyVkjVKLjyKSeuD8dAYCFkso1'. + 'gYMaeWJ40T56cl8yAi/O4FSa2P6kYczIDsgVpAqcDImZPMuAB1'. + 'dkLQtcc8a/bwox8IUHAxZVxGZMouSLVYwKuMkD5IxN+JSdsRJB'. + 'pexuTVgYYM6EoGmxkmg3/hEhNUMr/hd7dqbOzExMn/GRDAxWZc'. + 'j3I8HiXfMjF2FQowKw7pjoN6E/Llw/GBJj8qxVOMlX4ipxc/lY'. + 'kl2zBLkmrTcEzMkoNoRLVidLi/9g+Z3I+1xRHX5EcAihxnbPRv'. + 'OTU9kZSmpKPy9FTGrLimPZ1H+UiyGaF67w6n7E1DwMngFDxGvc'. + 'w70v0xZUby5IxjlIyMssUJrJwVWkXBdbXvSvwEibcSdKCAFI16'. + '4/sc0SRo9cGAGq1DwvQFzV6DVuBiV4zYnlEts6A2TSPcSiXoxo'. + 'QqJCEEFMbQ2b69o5qMiOOPqIMQkagu/aSL7waE8101WFShLjk9'. + 'yxgEvjRUiyYd+gwAjY2J9VpXfZ/JEXLhDp3OR6U4T97+hEnPwx'. + 'tv4HsRjy2tTQSFzQgDUnwSLBQRI+x1ZgcH87Vcv4SF19Kt0ezS'. + '1h9s0Ma25pgr/YJfnLnEysok0+ezjM6EBLldGqKIJYuDRhOQEJ'. + 'Oih8X9Q0xmcXNjlCofBJgn78wxVz7L2YWf8tPPz1hnfjbjzfxN'. + 'qVwutq2etZXUQSXikcXGIgUiUkJSDIQMJgYGJsaB3c7b1qQ4GZ'. + 'xSkdGZIwMeNLfK6uezMnvJK3pLxeVixfvMsyVjSNSO6IV9adPG'. + 'AArkEEz8oUkFmBjYGO80qfd6pCWIayD59wIKcsjcKqufn7JO/S'. + 'xfyi+5c24pey5rZ09mJRNkiDdT/tzbkBr3SYkpMYpgEaIJSYhI'. + 'kSOY1GhilAQk5ntDIojxCZ/kf87Pl85xbuWEnLiUy+cW3NNuJX'. + 'MmY5meKf6mT7wZS+THdOjxlG06tIlIOMZxchSxcFFEGAwAGGME'. + 'jwyZYSnWL3cXWiIUbUI6hO/vxXuFOV84ycmlBWthNeflTjuzTi'. + 'lzJmM5s46Ej0J63/ZoPmoy6PYxtYVNhmfs0mbAND1mmKVMBY1L'. + 'mxA1LN7WgXQbCApNhKJHRIM+DQbv7yQGhjnJ5NgFuXBuxpu5mD'. + 'udm3LPuY7pmZLUE6L1SIJaIPFuDAqyw9lnwDYv6NFHkWJh4ZDB'. + 'wCBFD3uMxsTAwcBAiElpE/KcPg36dIiOvpsRxDCyhmlP2YY9ZU'. + 'v8NMb/1id+FGO0DTztkSXLOONUqeITsMkW2zwnJEIDFhYGx+A1'. + 'kwK4mASkvKDPc3p0iYhRRwYUhZLUTyV6Eu0t4s1Y4kcx6W6KaM'. + 'EZThcXH59RRhGEgIAddnBwNEBKqqpUtWBIF22YDIhJsbEkJqFN'. + 'qLtERHs7GnUkwISEQAf0uj30bY39PzbiC6qrDu2cExJ69Nhhhz'. + '59UlIUipCQOnVi4sjG7ubJBy6um0C+he/0iDHQKIQERYyKFLqr'. + 'SI/W6kJCnvOcrWSLSquC1/Jw9Ks3R0FQKHr0uMc9bnCDGjX69A'. + 'H0XlcJkibN5jOe/alCZStHbjJL9lSMLkXExvCXRiDV6GZEeGeX'. + '3TvvBVQoEjfBL/v0rT75Th7VU5C8gktI6NLlMY+5yU3WWGODDf'. + 'r098tHpNFNH7/2lKdXXdz7efLzVaqJIBOCmK8AJUlI6g0aV+9y'. + '9+p7AR3bMQpTBWPy7yeN6fy0jNwewfpvC9Xe+3kFoUuXe9zj5n'. + 'BusEGHjh6GIAGawC2FWuvSvbbF1maFylZAsC1ISZADBiVNSJrP'. + 'eX73MY//skHP85z5+fnSxQsXj//4n39cmnPn7LbZlsajBmEnBL'. + '1nuEGDG9x4aa5Ldz+h0RCuBqwBv1Wo+7vs9r7n++0MmYeAM+zB'. + '+61EK1QUEnbbtN+9Bh3Hsebn54u//PdfLq9eWl2ZnZ1dSnaSwu'. + 'Pin40b9g3doKE0WoNIl65xj3v75njd3BBubQi6ExKmDWkMRKSl'. + 'tSbVKQcMao1Go5Ugb0+x53nOyZMnSysrKydXLq1cWlxa/McgCB'. + 'Yev3hU+GPrD3I5/q94k3pXYQY58q6B5Bs0HB//neaGx00gyWaz'. + 'VCoV7bquCoKAnZ0dfN/f03egLGj0m3XQNE1jdnY2/+WXXy6trq'. + '6uzP3oR5eCIFi4detW5feXL1vr679Let37zVB3/mQytjXJwmSB'. + 'wikHp9ShY0RESqObwPrr5oBERKhUKly4cIFqtUq9XufmzZtsbW'. + '2hXvuDwTTNtxZq8TyvsLy8vLS4uLgahOHphw8elL69fNlc++qr'. + 'uFOrNXPddm1cczVL5f5P+Lv5MuOJgTGxwYbZpZsCdeAq8M1Bcw'. + 'CGYeC6LtVqlRMnTjAyMkKn0yGXyx0N0LZt03Ec1zCMSrfXO37v'. + 'zp3S769csb+/ciXt1mrNdHf3ltZ6Lca8ZpJsduhtCdb2gEFJoQ'. + 'xADYHuHDS3f32lFEEQUK/XGRkZoVAocP78eZaXl9FaI/Jq25Uk'. + 'yWHAYrHozM/PlxYWFibTND32sFbLXrtyxVz76qukXas1M61WTW'. + 'm99gx+20TdN9jqtfjP7QzOwwYNp037Zd0DukDnIByA1pqdnR2+'. + '++472u02Z8+eZWJiAsMwDsEBRNGBzYJpmsaJEyfyX3zxxdLS0t'. + 'KlVqu1dP3q1cLta9ekU6u1dat1J9b6Sk9kraV1rYXegW7apDYw'. + 'kFY6fPc4MNTw88bwfZ/NzU2UUnieRxAEiAiGcXiXfcigiIjruo'. + 'VyubxkWdbK7fX1xWvffFMInjzBM82uMT5+p++6V1UUrSe7u03t'. + '+8lezlKt3gHyl0aSJDQaDa5fv876+vo+w6FzDq1BpZRsb2/bly'. + '9f9vL5/Njdu3fzG0+eMJHNxsfn532vXN5NPG/7abPZal6/Hvfe'. + 'kroPHfsm98f7AHW9Xo+//vrrlmVZm71+37QNw3JnZ9PK4uJGpV'. + 'pt4Dh+vLGhsrmcfv1iHzu01m89HjIdCon2fb8TBMHtvYeRUn50'. + '1Oj4vqp3Ok1f5LYSadfr9dQfDN642P/XeF2DA+SBAuA4jkOhUK'. + 'BQKESO43S11p3BYBDt7u4y+CtB/i/q7jp1GMiw2AAAAABJRU5E'. + 'rkJggg==' ; + + //========================================================== + // File: ppl_blue.png + //========================================================== + $this->imgdata_large[3][0]= 2284 ; + $this->imgdata_large[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMLFRAiTZAL3gAACHlJREFUeJy9mGtv29YZgJ9zKF'. + 'F3y/Q9jh05tuQkarKgbYasde0UBdZgwNou/Vqga/sD9mP2B4a1'. + 'BbZ9atFPxb5sqOtmXbI19bqsluPYiR3HN90vFEWRZx/IJI5zqa'. + 'x0OwBBSgR5Hj7v+55zSEFXTUgIJyA9C6/9RsjMjAyFIxxJCDc7'. + 'iBqKgyZACGg3G2x9+xXf/fG33P3mC9qNKsp1O+1JdkEnQTdgIO'. + 'ttCSMUi8gj072MnugllAyB9G8rBGi6RsToJTF6iuRoFi1kHKZf'. + '7fB8Iggj0/Dy23D2dakNTR3JDsXPvzstxmZGRMER1EwHhQAEgE'. + 'CLhIkPD6InY9S3djGLJVBtQP1Qb4HDAyoJYQOOZkPx49nhTH9i'. + '7MUBGT7egxkJgd70wZS/CUkoZtA/fRoE1DZ2ACiv52ibReCp4e'. + '7CIEHomxDiuVdGTqUnf/ZeOjR8fpiVXZul5ZrY3bWwbdcLr/dA'. + 'AAIpAwQjUWIjQ+g9HZvswiCgBVF9/SI6OSLGzo0i+oLi6+Utbq'. + '+bKEftgwOE/0Ohocf66M+cBjo22U2RQLIHMhmYnvaOpR9S8bSU'. + 'UqCURGpRkuMZMm9cIvPGJZLj0yBjT2LprkiSkykx9cuXIhOnUs'. + 'm+QNC2XdG02ggBTcvFabsPWwTPpBAChSCgh4kYBpoeplWp47Qs'. + '7EYDt21xINzd5GCAxLExRl89Z+nHjpbKMmjbmkgfDzI0JEW53K'. + 'Jaa6NcAOEX8v52uJzsBlAS6u0hcnTIccPRqhWPCUcLD+s1EaUp'. + 'HCEhEMCyHNpt9SjgIU12A6iw6xb123vYhaaKjB9tlgMD5X+uBp'. + 'zdkpg6azA8EaNQtKlVba+Xez4eCntnJrsDdFsW5nYFpxlFN846'. + 'DXe8utkM4mhi+EgQmjYbS2WqexZKk6BpjwJ2YlK5VjeA3pNDiH'. + 'YjRWPzPE7tmBo8EWwGhkXx+z3uXL7D3rU97LIF8RBEAl6lK/Uo'. + '6JNM1rZ2aTcr3eUgIQOGTgbdwXMGyRejenLYTvQGbAdRuetSud'. + 'OivVuFZgtCEgICghICnZoMhmlVTPR49LCAEkQUhk/B7KXe0MWf'. + 'nxj8xVR/cDheK14WZmtVMJSBnlGoN6FmQq0FLfdwJgORKPHRo/'. + 'Snzx4G0F/FjJ4KiOdmjPCrrx8bffnMybMv9MQGNG3rzlVqtR1B'. + 'sh/CYXCD4Aag1oCW7ZnUOjSp6WFi/QNEB8Y7BfTNjZyCmUvJ0I'. + 'XXT47MTp98Ybon9VZCk8cVazfqlNargsY34G7ByAlIjkHd9CCr'. + 'LbBdiHViUgiECuDKYCdz8b2cywREdiYZOj8zNnLuzOTzx6ODp+'. + 'OaGaqwVzBFqz0Idhz2loE7YEwBLaAJLQcKbW8qjAcBF5Jh0AMP'. + 'IOHe6kxgtb3UMO2OxkF//ffK28nQqxfvm3szrtnDVa799Qb/+v'. + 'NtsbNSpm3tAv8B+w7Ub0FhAyoBcMPec9oK6raXk48ziQBXQcmC'. + 'pT3YqHa0mpEBkTR6wz/Jjo2cy04+fzwxdDquNfQKO7sFUbpu0c'. + 'wp3JoAYsA42Bbkl4GCryUNDEM7Avm6Z/CgSYBWG8pNuFuDu1Wo'. + 'tjoxKIJGeHIiM/jmK9NnX5ycuJQMtUcqXPvLDTa+qIie4hAJ1U'. + 'vdrmO2HaDfB931twJgAn1A4lGT96obPHPLBbhVgUoTHHWo9aAA'. + 'JVAKpyKEmQNzWRENAsL18ycKjAFN/9gCNvzLB/390MMmE7pnDi'. + 'Bvwt0K5Jv3O+0oB22nJ1Vvjb/UMhOpcKknqN1OiMB2DNHU2G5s'. + 'sVndpGJVcZXjX1IAlvw9PmhRQcOFPhsSDkiBrQR1G7brgs0a7D'. + 'ag3FK4rguqBXarI4Nt1SJv5gls7TEWtJDRBO2GwnIs8maevFnA'. + 'Gx6awLZvzeTBu4kFbLigijC47pscpx0xyDfkvtUEnlarCDtrUC'. + 't2HGIhvPHVdVwqjTIrxRU2a5uUrYoP0QZ2gMvACl7+3V/LuKDq'. + 'sJuDy597516+CEezIHXv7vcgXQu2l+Bvn8He9Y4AE4kgk5P9DE'. + 'R6aFdq5Et5Nit3yTf3m9sBcsAN3+D98c0Fit5JawE25r1zg1Fo'. + '5B8GFD7g+nVYnu8EUEop9XTa0N/9dUbqcphP/rDJzbUClVbpgR'. + 'y2fXM3fND95qj75J8AC6BWPINfVSBieK+x+6cS5UCzCLu3oFV9'. + 'GqCMx2NGOp2Znpv7aXZudsool3T5J/179sxVlHJ4kGPrP2COBX'. + '/7DmiApWCjxIMXpYNznYuXM+6TAKWUMppOZzLvv//ery5cuDCT'. + 'SqVS336bCwr1JfAPB9r+2KAFwJS+OcETzZHz/7v3etl6ipz77X'. + 'GAMh6PG+l0OjM3NzczOzs3k0pNnFlbW43+e/GKtMqrblSsF03V'. + 'WHcJA0PjIAzvg9JTze2H67g9DjAwOTmZ+uCDD96anZ2dnZiYmF'. + '5dW41++Lvfa1fnr7qllVK9103mXNTnJgPA+YugsvB3HTaEl+Qs'. + 'AZ/yeHPPDCiTyaRx5syZbGoilV1dW00szC9oV+avusuLy0Xd0X'. + 'MgFkDM+zkYBZEHV8f7wwKu84zmngQoNU0LaZoWUa4K31y5qX/8'. + '4cfyyvwVN5/L10NOKNeg8UmDxoKF5Vfj1xXAgD0JrgAcvBDfel'. + 'a4g4AykUgY6XR6emJiIru2ttZXq9S0K19eUcuLy8WQE8o5OAsN'. + 'Ggsmpl+NpoL1g9X4UBU+C9xDgEKIwNTUVOqdd955M9mbnJ3/cj'. + '6Vu5aTheXCQXNdVeMzAwJSCGEA2XKpnF1cXIzlFnOVhJPIKdR+'. + 'c88ctq4AlVKsrKzw0UcfKcC5uXqzXnNqSzb2pwLxOHP/l7Z/BN'. + 'eB01LKt4HTrusKvGr8jB+hGn8MQAkYQMrfw4Nq/MFPtf+rdvDb'. + 'k8QL+/5Z4Uepxm7bfwHuTAVUWpWaqAAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: ppl_green.png + //========================================================== + $this->imgdata_large[4][0]= 2854 ; + $this->imgdata_large[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMLFQ4hANhluwAACrNJREFUeJytmF1zE1eagJ+3u9'. + 'XdkvUty2AbmLEtEzDBgZ0UpDBOalNTUzU3czl7tct/2n+wt3M/'. + 'NVM12SSTQQSyW2TA+QAJQogtYYFtyfrqL3WfvWj5g8AEjzfvhS'. + 'SXjk8//Zz3Pf3qCMcJAWxMKlT4kH+jwu/FknnJSUItKFHzCrKA'. + 'BggBQx5ziz/wn/yBz3hED4/oaJfSjgVoYjJJgTLTZCjohp7IGT'. + 'k5aZ4kb+bRTR30Q7djj8f/kpPMUSCFedRL6W8e8qMQNE6S4xpv'. + 'c5HrTPFubiJ3ZnlyOXV59rJYU5Z00h1c3d0brxAiUkScRijisk'. + '6XLTyiN3s8HuAJpniXa/q8/pt8Or+0kF8oXJm5YiydWcIpOrJu'. + 'rjOQwd54AQwsMpTJYhPSoYuLQ58An/DnBQSdImXO8avsTPbqpc'. + 'lLp67OXDVzMznZLGxSs2qyIRu4at8gKHQEC50kE1icxqCAdxST'. + 'xjEA44tqaJlERl8uLWvvnX5PHuQfcCdxh5qq0aX76vj4WgWyXO'. + 'QiNgBP8IAaddr08X8+wHFmJSQhBbPAZGoSZSt5wQs6qoNC7UEd'. + '4AEoLIQSCaCCy78Dv8Tiv1hjjW1CRj8XIAgEKqDtt9keboMJZa'. + 'vMjuzQVd3Xr9prTJo+GF/jKZea95R25Lxs8jg5qFGiwDnOS0mW'. + 'NE0rjNRIt3WbklUCA9mV3Zdz8OBT/JfCQLB0SKYVVjGFYSfx/E'. + '26ow4e6uDujlPFQpE0FU6P8qNTHdXJdEdda0qf0itWBVM3pa/3'. + 'ccUlIECJet0cAJoeYk5EZCeS5IwEoerSxccJBwRqFFf38QCTaO'. + 'TRVFKJm3NTbtLNSyh2IkhIXsvLCesEGNCWdmwyruSD/z9kUlRc'. + '3bqNlSxhJNJ43p5JITrOEis8Qtr0cXEpU/JT/pmO18n2vb42pU'. + '3JnDnHMBqyPlpnoAaxhr2llv1ZUBqEGlqYwDQMsskMOcMgVL3Y'. + 'ZOQTHAcQQiIGjHCwCaiovjrv4hbcpKuJJjIcDHm685RGr4GLCx'. + 'YHkAcrLoAoDSLBiAQrMkjqybHJCbxgh+7xAC1MpsgzwRwD3qHL'. + 'WyTIBdlAa6u2rHfXaew06PV78ZZjAwleNnkolECoH5i090wOcY'. + '+TgwYzFHiPi1zkOkXexeAMASnVU+LiyiA1wFUuaqggACLizeWw'. + 'ycMzyssmVYKkbpGyC5T+OUALk2mKLHKWf+ED/az+YW42d66YL+'. + 'aNrmEEzQCFEnKw368EgEvcN1m80eTIQIt0TFOjMJHkzNEBBYPp'. + 'sblf8QHzrORO5JaWZ5ZLl6cuJyyxpNPv4PZdoT+GyIxBfI5uUg'. + 'eJMCwP2/bIHO1JEudcgUUWOceKNq99mCvnzs5PzRcuTV4y5mRO'. + 'SMIjo47z5S7a94oQCNKgJsZwO7D/IDNg3/LLhRNXt4JohBb4aG'. + '82GLdXcf93mQ+Y43r2RHZp+cRy6cqJK4l8MS+tdItaqiYtc0Mm'. + 'QpfJARh98HYh9IiXVcaAo58wGb+LBAjbSPgCOcoSa0wzxXtc08'. + '/pv8mfyL+9MLVQvDJ1JVHJV6SZbFI1qtTsB+KlehRtRTGE8Afo'. + 'P4DRcAxiEudhAHjjzz+ubgX4oHowakHQOlqzICQwyVPITGVOXi'. + 'xfLF6aumzmczl5lHzMff2+fCdPaGttEkXoLQAO9B7C6EugPYby'. + 'gVPjGXc5eIbNAJPjGwiAbaAJUQv8wVG7GROkJFpyOqn/ovgLba'. + '44L0+sDaraXb6jzq7aBQWjBOyUoHcaopOgmaA3IRyNDZnA1HjO'. + 'HSBkr7eEFDAEngHrQCf+/s2A8cSiSkqcKUeeTjwFy2Jd78t3+L'. + 'TR4itIiBLwLQhzkJyB5Cx4HXDaENVQCBAQcRqFIHTRaBIvuYXg'. + 'AdsouuNxEL0ZUBHnSQp66R73zYfUtQ6OytKT8RckQAJQoLtgO5'. + 'BJgj0D/WfgdyHaAHx8THoUcbGx8ciwhUl3bDEiToURPooeI7pH'. + 'MziK9Yd9nU5a6GgKjOH41vsgI4hAcyC5AZkapF+AoYNrjjsuhx'. + 'FbtPmeB5ykyQQzTPAWAQWC8S9oAI0QRRuPb9jkmyMZNAOTklvC'. + 'GGYZaFkGmkVAh8h4DtKFMIBunG+pB5B5AIkGBDsQ+qBiL20caj'. + 'zhJknq5KlgMkLjJHJos4kYEbFJi5vc5eYbATVN02bNWe19+32t'. + 'aJWlFm3wbf8Rz5NbDFJdlOFBF/g7cBf0JkrbBb+F6j1DOduEkU'. + '8bWCOiSofPWadBnSZDWmgUkEMGhZCINut8S/0NBtPptFlZrBSu'. + 'vnt1+ndnflfIp9OJ/279Ubbbd+lP7KBKPoEBsgnqLph/BRzwdS'. + 'LnBUFvHcfdpRsGPAGqwMco6jynz+e0SPKYCHMfLX5VKHwcenR+'. + 'Igd1XTcqlUr+xn/cePv91fevzy8sLO2OtrOpWkqL7gXKSAVRdh'. + 'ZFEmEXoYkwBNqovoc/3GHH3aUR+jwC1oD/AWrANi4hGwyBzqEG'. + 'Vvb77Dgi0eT1VZzJZMxKpVJYXV1dXF1dXVm6sPSvruue3Xzcyj'. + '6/syvDzwj0lNazK6Fj5LFCRZouZpBABj6jXouu3+Np6HNvDHaf'. + 'g91t74msbMuOJicnSSaTKKUQEUQEpRSO69But1/dB0VEm5uby9'. + 'y4cWNpdXX1+sLCworrume//PuXpeqnVeOban0U1PW2kcx+O9L7'. + 'Te9sUB4lWFR9SqNtNGcHx+/RDD2+Am4D94CnQA8OjjlEhMnyJC'. + 'srK8zOzu7BiYioMAzZ2Njg9u3brwIqpSSXy2WXl5eXLly4sOo4'. + 'zoV6vV6oflrVP/7Tx8Hmw1Zb6ydqmpWp7ha8h4O3gjOhzVANmF'. + 'XPMNQWvdDnCXCXuHR+APqH4fbCtm2mp6eZn59H13WJuYXRaKSU'. + 'UiSTyVcBdV3XDcOwRaTU7/en19bWCn/79G+JL/76RbhZ22y7u+'. + '6ahl71nPDz/nO17m7wAxlabFOihy4+DvAcqAMbPzZ3OFzX5dmz'. + 'Z2iahoiosUUVhiGNRgPHcV4GzGQy5uLiYuH8+fMzo9FoslarJW'. + '9+elP75E+fBJu1zY7qqpqBUW3T/niohnVvy+1zm5aVtp+WE2XT'. + 'nrHFzbjh1tYLz3XdPjD4R3BKKba2tqhWq4dzUO3noBPn4H5PKy'. + 'LaO++8U7hx48byhQsXVne7u6tf3/v64t3P7mbq9+odt+OuaWi3'. + 'PLxbW2ytubjbQCgiMnt6VlaurWgz0zM0m02q1WrUaDSUUuqI56'. + 'ivDxE5MCgiYllWtlwuL5mmufLV/a/O/uXPf9Ff1F+80Lv6Yx29'. + '2qHzyZBh3cdvc7gaTZuZkzPh/Py8ACqVSv1/uPZDKXUAGEWRtF'. + 'qtxEcffZTL5XLF+2v39fqjeivshA/TpP83JLwzYFBzcA4370Cc'. + 'S81nTRBUs9lkOByi1GuOPI4Rh3+26JZlnSkWi781DOPXvV4v3+'. + '/2G0R8kSBxB/jew+tERK+c49m2TblcxrZtXNfl+fPneJ6HZVmU'. + 'y2VJJpNyaJ9TSinlOA5bW1u4rntkQA0oAG8D54gb9W3ianxM3A'. + 'e/cn73U3Hq1Cm5du2aPjs7a+ztcSIShmE4ajQa6tatWzQajZ+0'. + 'fbiKI+It4SvijVUj7kL2qvGfgkskEqTTaZmcnDROnTplJhIJTU'. + 'QiwPd9P/Q8T6XTaQzDIAiCfzjP/wFVfszuFqdHXgAAAABJRU5E'. + 'rkJggg==' ; + + + //========================================================== + // File: pp_red.png + //========================================================== + $this->imgdata_small[0][0]= 384 ; + $this->imgdata_small[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAA'. + 'B3RJTUUH0wMJFhouFobZrQAAAQ1JREFUeJyV1dFtwyAQBuD/og'. + 'xQdYxa8gRY6hJ0jK6QdohMkTEuE5wUj5ERen05IoLvID7Jkn2G'. + 'j8MgTMyMXqRlUQBYq9ydmaL2h1cwqD7l30t+L1iwlbYFRegY7I'. + 'SHjkEifGg4ww3aBa/l4+9AhxWWr/dLhEunXUGHq6yGniw3QkOw'. + '3jJ7UBd82n/VVAlAtvsfp98lAj2sAJOhU4AeQ7DC1ubVBODWDJ'. + 'TtCsEWa6u5M1NeFs1NzgdtuhHGtj+9Q2IDppQUAL6Cyrlz0gDN'. + 'ohSMiJCt861672EiAhEhESG3woJ9V9OKTkwRKbdqz4cHmFLSFg'. + 's69+LvAZKdeZ/n89uLnd2g0S+gjd5g8zzjH5Y/eLLi+NPEAAAA'. + 'AElFTkSuQmCC' ; + + //========================================================== + // File: pp_orange.png + //========================================================== + $this->imgdata_small[1][0]= 403 ; + $this->imgdata_small[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAA'. + 'B3RJTUUH0wMJFhwAnApz5AAAASBJREFUeJyN1dFthDAMBuDf7S'. + '3BCm2VCRKpS4QxbhikW6IewzcBqm6Fm6JyH7iEEByCn5AJH38g'. + 'BBIRHNUzBAWAGNfe/SrUGv92CtNt309BrfFdMGPjvt9CD8Fyml'. + 'ZZaDchRgA/59FDMD18pvNoNyHxMnUmgLmPHoJ+CqqfMaNAH22C'. + 'fgqKRwR+GRpxGjXBEiuXDBWQhTK3plxijyWWvtKVS5KNG1xM8I'. + 'OBr7geV1WupDqpmTAPKjCqLhxk/z0PImQmjKrAuI6vMXlhFroD'. + 'vfdqITXWqg2YMSJEAFcReoag6UXU2DzPG8w5t09YYsAyLWvHrL'. + 'HUy6D3XmvMAAhAay8kAJpBosX4vt0G4+4Jam6s6Rz1fgFG0ncA'. + 'f3XfOQcA+Acv5IUSdQw9hgAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: pp_pink.png + //========================================================== + $this->imgdata_small[2][0]= 419 ; + $this->imgdata_small[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAA'. + 'B3RJTUUH0wMJFhsQzvz1RwAAATBJREFUeJyd1MFthDAQheF/oi'. + 'gF+JYWQKICkCJRA1vGtrDbxFbhGvY0HVjCLeS2BeTiHFgTB2wg'. + 'eRISstCnmcG2qCpbuXf3ADBQzWsPfZfS9y9HsEu4/Fo33Wf4Fx'. + 'gxL3a1XkI3wbTNXHLoboVeLFUYDqObYBy+Fw/Uh9DdCmtOwIjF'. + 'YvG76CZoOhNGRmpO8zz30CJoOhMAqlDxFzQLppgXj2XaNlP7FF'. + 'GLL7ccMYCBgZERgCvXLBrfi2DEclmiKZwFY4tp6sW26bVfnede'. + 'e5Hc5dC2bUgrXGKqWrwcXnNYDjmCrcCIiQgDcFYV05kQ8SXmnB'. + 'NgPiVN06wrTDGAhz5EWY/FOccTk+cTnHM/YNu2YYllgFxCWuUM'. + 'ikzGx+2Gc+4N+CoJW8n+5a2UKm2aBoBvGA6L7wfl8aoAAAAASU'. + 'VORK5CYII=' ; + + + //========================================================== + // File: pp_blue.png + //========================================================== + $this->imgdata_small[3][0]= 883 ; + $this->imgdata_small[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAACi1'. + 'BMVEX///8AAAAAADMAAGYAAJkAAMwAAP8zAAAzADMzAGYzAJkz'. + 'AMwzAP9mAABmADNmAGZmAJlmAMxmAP+ZAACZADOZAGaZAJmZAM'. + 'yZAP/MAADMADPMAGbMAJnMAMzMAP//AAD/ADP/AGb/AJn/AMz/'. + 'AP8AMwAAMzMAM2YAM5kAM8wAM/8zMwAzMzMzM2YzM5kzM8wzM/'. + '9mMwBmMzNmM2ZmM5lmM8xmM/+ZMwCZMzOZM2aZM5mZM8yZM//M'. + 'MwDMMzPMM2bMM5nMM8zMM///MwD/MzP/M2b/M5n/M8z/M/8AZg'. + 'AAZjMAZmYAZpkAZswAZv8zZgAzZjMzZmYzZpkzZswzZv9mZgBm'. + 'ZjNmZmZmZplmZsxmZv+ZZgCZZjOZZmaZZpmZZsyZZv/MZgDMZj'. + 'PMZmbMZpnMZszMZv//ZgD/ZjP/Zmb/Zpn/Zsz/Zv8AmQAAmTMA'. + 'mWYAmZkAmcwAmf8zmQAzmTMzmWYzmZkzmcwzmf9mmQBmmTNmmW'. + 'ZmmZlmmcxmmf+ZmQCZmTOZmWaZmZmZmcyZmf/MmQDMmTPMmWbM'. + 'mZnMmczMmf//mQD/mTP/mWb/mZn/mcz/mf8AzAAAzDMAzGYAzJ'. + 'kAzMwAzP8zzAAzzDMzzGYzzJkzzMwzzP9mzABmzDNmzGZmzJlm'. + 'zMxmzP+ZzACZzDOZzGaZzJmZzMyZzP/MzADMzDPMzGbMzJnMzM'. + 'zMzP//zAD/zDP/zGb/zJn/zMz/zP8A/wAA/zMA/2YA/5kA/8wA'. + '//8z/wAz/zMz/2Yz/5kz/8wz//9m/wBm/zNm/2Zm/5lm/8xm//'. + '+Z/wCZ/zOZ/2aZ/5mZ/8yZ///M/wDM/zPM/2bM/5nM/8zM////'. + '/wD//zP//2b//5n//8z///9jJVUgAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElN'. + 'RQfTAwkWGTNerea3AAAAYUlEQVR4nHXNwQ3AIAxDUUfyoROxRZ'. + 'icARin0EBTIP3Hp1gBRqSqYo0seqjZpnngojlWBir5+b8o06lM'. + 'ha5uFKEpDZulV8l52axhVzqaCdxQp32qVSSwC1wN3fYiw7b76w'. + 'bN4SMue4/KbwAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: pp_green.png + //========================================================== + $this->imgdata_small[4][0]= 447 ; + $this->imgdata_small[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAA'. + 'B3RJTUUH0wMJFhkLdq9eKQAAAUxJREFUeJyN1LFVwzAQxvH/8f'. + 'IeDS0FLKABlN6eIwPYAzCHB0gWYI2jj+i1ABUTQN4TRSQ7iiWZ'. + 'qxLn9Mt9ydmiqrSq930AYFiu6YdKrf/hP1gYQn6960PxwBaYMG'. + 'E9UA3dBFtVQjdBOQmBakLennK0CapRwbZRZ3N0O/IeEsqp3HKL'. + 'Smtt5pUZgTPg4gdDud+6xoS97wM2rsxxmRSoTgoVcMZsXJkBho'. + 'SmKqCuOuEtls6nmGMFPTUmxBKx/MeyNfQGLoOOiC2ddsxb1Kzv'. + 'ZzUqu5IXbGDvBJf+hDisi77qFSuhq7Xpuu66TyJLRGbsXVUPxV'. + 'SxsgkzDMt0mKT3/RcjL8C5hHnvJToXY0xYRZ4xnVKsV/S+a8YA'. + 'AvCb3s9g13UhYj+TTo93B3fApRV1FVlEAD6H42DjN9/WvzDYuJ'. + 'dL5b1/ji+/IX8EGWP4AwRii8PdFHTqAAAAAElFTkSuQmCC' ; + } +} + +?> diff --git a/Societes/ric/jpgraph/imgdata_squares.inc.php b/Societes/ric/jpgraph/imgdata_squares.inc.php new file mode 100755 index 00000000..895dc936 --- /dev/null +++ b/Societes/ric/jpgraph/imgdata_squares.inc.php @@ -0,0 +1,150 @@ +'imgdata'); + + protected $colors = array('bluegreen','blue','green', + 'lightblue','orange','purple','red','yellow'); + protected $index = array('bluegreen' =>2,'blue'=>5,'green'=>6, + 'lightblue'=>0,'orange'=>7,'purple'=>4,'red'=>3,'yellow'=>1); + protected $maxidx = 7 ; + protected $imgdata ; + + function ImgData_Squares () { + //========================================================== + //sq_lblue.png + //========================================================== + $this->imgdata[0][0]= 362 ; + $this->imgdata[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMLFgojiPx/ygAAAPdJREFUeNpj/P377+kzHx89/c'. + 'VAHNBQ5VBX52HavPWWjg6nnDQbkXoUFTnnL7zD9PPXrz17HxCj'. + 'E6Jn6fL7H7/+ZWJgYCBGJ7IeBgYGJogofp1oehDa8OjE1IOiDa'. + 'tOrHoYGBhY0NwD0enirMDAwMDFxYRVD7ptyDrNTAU0NXix6sGu'. + 'jYGBgZOT9e/f/0xMjFyczFgVsGAKCfBza2kKzpl3hIuT1c9Xb/'. + 'PW58/foKchJqx6tmy98vbjj8cvPm/afMnXW1JShA2fNmQ9EBFc'. + 'Opnw6MGjkwm/Hlw6mQjqwaqTiRg9mDoZv//4M2/+UYJ64EBWgj'. + 'cm2hwA8l24oNDl+DMAAAAASUVORK5CYII=' ; + + //========================================================== + //sq_yellow.png + //========================================================== + $this->imgdata[1][0]= 338 ; + $this->imgdata[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAWl'. + 'BMVEX////+/+H+/9/9/9v8/8P8/8H8/7v8/7n6/4P5/335/3n5'. + '/3X4/1f4/1P3/031/w30/wn0/wPt+ADp9ADm8ADk7gDc5gDa5A'. + 'DL1ADFzgCwuACqsgClrABzeAC9M0MzAAAAAWJLR0QAiAUdSAAA'. + 'AAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9MDCxYEDlOgDj'. + 'EAAAB+SURBVHjaVcpbCsQgDEDRGERGKopjDa2a/W9zfLWj9/Nw'. + 'Ac21ZRBOtZlRN9ApzSYFaDUj79KIorRDbJNO9bN/GUSh2ZRJFJ'. + 'S18iorURBiyksO8buT0zkfYaUqzI91ckfhWhoGXTLzsDjI68Sz'. + 'pGMjrzPzauA/iXk1AtykmvgBC8UcWUdc9HkAAAAASUVORK5CYI'. + 'I=' ; + + //========================================================== + //sq_blgr.png + //========================================================== + $this->imgdata[2][0]= 347 ; + $this->imgdata[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAZl'. + 'BMVEX////0+vv0+vrz+fry+frv+Png7e/d7e/a6+zY6+250tSz'. + '0tSyztCtztGM0NWIz9SDzdNfsLVcrrRZrbJOp61MpqtIr7dHn6'. + 'RErrZArLQ6q7M2g4kygYcsp68npa4ctr8QZ20JnqepKsl4AAAA'. + 'AWJLR0QAiAUdSAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU'. + '1FB9MDCxYEByp8tpUAAAB7SURBVHjaVcjRFoIgDADQWZpWJpjY'. + 'MsnG//9kzIFn3McLzfArDA3MndFjrhvgfDHFBEB9pt0CVzwrY3'. + 'n2yicjhY4vTSp0nbXtN+hCV53SHDWe61dZY+/9463r2XuifHAM'. + '0SoH+6xEcovUlCfefeFSIwfTTQ3fB+pi4lV/bTIgvmaA7a0AAA'. + 'AASUVORK5CYII=' ; + + //========================================================== + //sq_red.png + //========================================================== + $this->imgdata[3][0]= 324 ; + $this->imgdata[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAXV'. + 'BMVEX////++Pn99/j99ff99fb98/X98/T98PL55uj43+P24+bw'. + 'kKPvjaHviJ3teJHpxMnoL2Pjs73WW3rWNljVWXnUVnbUK1DTJk'. + '3SUHPOBz/KQmmxPVmuOFasNFOeIkWVka/fAAAAAWJLR0QAiAUd'. + 'SAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9MDCxYEHd'. + 'ceT+8AAABtSURBVHjaVchbAkMwEAXQq6i3VrQiQfa/zDYTw8z5'. + 'PCjGt9JVWFt1XWPh1fWNdfDy+tq6WPfRUPENNKnSnXNWPB4uv2'. + 'b54nSZ8jHrMtOxvWZZZtpD4KP6xLkO9/AhzhaCOMhJh68cOjzV'. + '/K/4Ac2cG+nBcaRuAAAAAElFTkSuQmCC' ; + + //========================================================== + //sq_pink.png + //========================================================== + $this->imgdata[4][0]= 445 ; + $this->imgdata[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAApV'. + 'BMVEX////6+Pz69/v49Pr38/r17/jr4+/l3Onj2efh1ua/L+i+'. + 'q8m+Lue9Lua8qsS8LuW8LeS7pca5LOG4LN+2Y9O2YNW1ZdO1Kt'. + 'y0atC0aNGzb82zbc6zKtuzKdqycsuwa8qtJtOISZ2GRpuFN6GE'. + 'NqCDQpmCMZ+BPpd/LJ1/K519S5B9Jpx9Jpt9JZt6RY11BJZ1BJ'. + 'V0BJV0BJRzBJNvNoRtIoJUEmdZ/XbrAAAAAWJLR0QAiAUdSAAA'. + 'AAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9MDCxYDF3iKMD'. + 'YAAACeSURBVHjaVczbEoIgGARgCiMtrexoWpaa2FHUgvd/tH4Y'. + 'BnEvv9ldhNPradPnnGBUTtPDzMRPSIF46SaBoR25dYjz3I20Lb'. + 'ek6BgQz73Il7KKpSgCO0pTHU0886J1sCe0ZYbALjGhjFnEM2es'. + 'VhZVI4d+B1QtfnV47ywCEaKeP/p7JdLejSYt0j6NIiOq1wJZIs'. + 'QTDA0ELHwhPBCwyR/Cni9cOmzJtwAAAABJRU5ErkJggg==' ; + + //========================================================== + //sq_blue.png + //========================================================== + $this->imgdata[5][0]= 283 ; + $this->imgdata[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAQl'. + 'BMVEX////4+fz39/z19vvy8vru7/ni4+7g4fHW1ue8vteXmt6B'. + 'hdhiZ7FQVaZETcxCSJo1Oq4zNoMjKakhJHcKFaMEC2jRVYdWAA'. + 'AAAWJLR0QAiAUdSAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0'. + 'SU1FB9MDCxYDN0PkEP4AAABfSURBVHjaVchHAoAgDATAVcCCIF'. + 'j4/1elJEjmOFDHKVgDv4iz640gLs+LMF6ZUv/VqcXXplU7Gqpy'. + 'PFzBT5qml9NzlOX259riWHlS4kOffviHD8PQYZx2EFMPRkw+9Q'. + 'FSnRPeWEDzKAAAAABJRU5ErkJggg==' ; + + //========================================================== + //sq_green.png + //========================================================== + $this->imgdata[6][0]= 325 ; + $this->imgdata[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAXV'. + 'BMVEX////2+vX1+vX1+fT0+fPz+PPx9/Dv9u7u9e3h7uHe697a'. + '6dnO2s3I1sa10LOvza2ay5aEwYBWlE9TqE5Tkk1RkEpMrUJMg0'. + 'hKiUNGpEFBojw8oTcsbScaYBMWlwmMT0NtAAAAAWJLR0QAiAUd'. + 'SAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9MDCxYEFd'. + 'nFx90AAABuSURBVHjaVc9HAoAgDADB2HuJWLDx/2cKBITscW4L'. + '5byzMIWtZobNDZIZtrcCGZsRQ8GwvRSRNxIiMuysODKG3alikl'. + 'ueOPlpKTLBaRmOZxQxaXlfb5ZWI9om4WntrXiDSJzp7SBkwMQa'. + 'FEy0VR/NAB2kNuj7rgAAAABJRU5ErkJggg==' ; + + //========================================================== + //sq_orange.png + //========================================================== + $this->imgdata[7][0]= 321 ; + $this->imgdata[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAUV'. + 'BMVEX/////8+n/8uf/8OP/59H/5Mv/zqH/zJ3/ypv/yJf/vYH/'. + 'u33/uXn/n0n/nUX/m0H/lzn/ljf/lDP/kS3/kCv/iR//hxv/fg'. + 'n/fAX/eQDYZgDW6ia5AAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAL'. + 'EgAACxIB0t1+/AAAAAd0SU1FB9MDCxYEJIgbx+cAAAB2SURBVH'. + 'jaVczRCoQwDETRbLAWLZSGUA35/w/dVI0283i4DODew3YESmWW'. + 'kg5gWkoQAe6TleUQI/66Sy7i56+kLk7cht2N0+hcnJgQu0SqiC'. + '1SzSIbzWSi6gavqJ63wSduRi2f+kwyD5rEukwCdZ1kGAMGMfv9'. + 'AbWuGMOr5COSAAAAAElFTkSuQmCC' ; + } +} + +?> diff --git a/Societes/ric/jpgraph/imgdata_stars.inc.php b/Societes/ric/jpgraph/imgdata_stars.inc.php new file mode 100755 index 00000000..bc696902 --- /dev/null +++ b/Societes/ric/jpgraph/imgdata_stars.inc.php @@ -0,0 +1,144 @@ + 'imgdata'); + + protected $colors = array('bluegreen','lightblue','purple','blue','green','pink','red','yellow'); + protected $index = array('bluegreen'=>3,'lightblue'=>4,'purple'=>1, + 'blue'=>5,'green'=>0,'pink'=>7,'red'=>2,'yellow'=>6); + protected $maxidx = 7 ; + protected $imgdata ; + + function __construct() { + //========================================================== + // File: bstar_green_001.png + //========================================================== + $this->imgdata[0][0]= 329 ; + $this->imgdata[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAAUV'. + 'BMVEX///////+/v7+83rqcyY2Q/4R7/15y/1tp/05p/0lg/zdX'. + '/zdX/zVV/zdO/zFJ9TFJvDFD4yg+8Bw+3iU68hwurhYotxYosx'. + 'YokBoTfwANgQFUp7DWAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgF'. + 'HUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJj'. + 'CRyxgTAAAAcUlEQVR4nH3MSw6AIAwEUBL/IKBWwXL/g0pLojUS'. + 'ZzGLl8ko9Zumhr5iy66/GH0dp49llNPB5sTotDY5PVuLG6tnM9'. + 'CVKSIe1joSgPsAKSuANNaENFQvTAGzmheSkUpMBWeJZwqBT8wo'. + 'hmysD4bnnPsC/x8ItUdGPfAAAAAASUVORK5CYII=' ; + //========================================================== + // File: bstar_blred.png + //========================================================== + $this->imgdata[1][0]= 325 ; + $this->imgdata[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v79uRJ6jWPOSUtKrb+ejWO+gWPaGTruJTr6rZvF2'. + 'RqC2ocqdVuCeV+egV/GsnLuIXL66rMSpcOyATbipY/OdWOp+VK'. + 'aTU9WhV+yJKBoLAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJwynv1'. + 'XVAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: bstar_red_001.png + //========================================================== + $this->imgdata[2][0]= 325 ; + $this->imgdata[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v7+eRFHzWG3SUmHnb37vWGr2WHG7Tlm+TljxZneg'. + 'Rk3KoaXgVmXnV2nxV227nJ++XGzErK3scIS4TVzzY3fqWG2mVF'. + 'zVU2PsV2rJFw9VAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJzCI0C'. + 'lSAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: bstar_blgr_001.png + //========================================================== + $this->imgdata[3][0]= 325 ; + $this->imgdata[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v79Ehp5Yx/NSq9Jvw+dYwu9YzfZOmbtOmb5myPFG'. + 'gqChvcpWteBXvedXxvGcsbtcpb6su8RwzOxNmrhjyvNYwupUjK'. + 'ZTr9VXwOyJhmWNAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJTC65k'. + 'vQAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: bstar_blgr_002.png + //========================================================== + $this->imgdata[4][0]= 325 ; + $this->imgdata[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v79EnpxY8/FS0dJv5+dY7+9Y9vBOubtOur5m8fFG'. + 'nKChycpW3uBX5+ZX8e2curtcvrqswsRw7OdNuLZj8/BY6udUpK'. + 'ZT1dRX7OtNkrW5AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJgXHeN'. + 'wwAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: bstar_blue_001.png + //========================================================== + $this->imgdata[5][0]= 325 ; + $this->imgdata[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v79EY55Yi/NSetJvledYiO9YkPZOb7tObr5mkvFG'. + 'X6ChrcpWgOBXhedXi/Gcpbtcf76sssRwnOxNcbhjk/NYiepUbK'. + 'ZTfdVXh+ynNEzzAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJhStyP'. + 'zCAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: bstar_oy_007.png + //========================================================== + $this->imgdata[6][0]= 325 ; + $this->imgdata[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v7+ejUTz11jSvVLn02/v1lj21li7q06+r07x2mag'. + 'lUbKxKHgy1bnz1fx1Ve7t5y+qlzEwqzs03C4pE3z2WPqz1imml'. + 'TVv1Ps01dGRjeyAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJjsGGc'. + 'GbAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + + //========================================================== + // File: bstar_lred.png + //========================================================== + $this->imgdata[7][0]= 325 ; + $this->imgdata[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v7+eRJPzWN3SUr7nb9TvWNj2WOS7Tqi+TqnxZtyg'. + 'Ro/KocPgVsjnV9LxV927nLa+XLTErL7scN24TarzY9/qWNemVJ'. + 'jVU8LsV9VCwcc9AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJxi9ZY'. + 'GoAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + } +} + +?> diff --git a/Societes/ric/jpgraph/jpg-config.inc.php b/Societes/ric/jpgraph/jpg-config.inc.php new file mode 100755 index 00000000..4ad40db1 --- /dev/null +++ b/Societes/ric/jpgraph/jpg-config.inc.php @@ -0,0 +1,138 @@ + diff --git a/Societes/ric/jpgraph/jpgraph.php b/Societes/ric/jpgraph/jpgraph.php new file mode 100755 index 00000000..90ac6882 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph.php @@ -0,0 +1,5629 @@ +Get(11,$file,$lineno); + die($msg); + } + else { + define('CACHE_DIR', $_SERVER['TEMP'] . '/'); + } + } else { + define('CACHE_DIR','/tmp/jpgraph_cache/'); + } + } +} +elseif( !defined('CACHE_DIR') ) { + define('CACHE_DIR', ''); +} + +// +// Setup path for western/latin TTF fonts +// +if (!defined('TTF_DIR')) { + if (strstr( PHP_OS, 'WIN') ) { + $sroot = getenv('SystemRoot'); + if( empty($sroot) ) { + $t = new ErrMsgText(); + $msg = $t->Get(12,$file,$lineno); + die($msg); + } + else { + define('TTF_DIR', $sroot.'/fonts/'); + } + } else { + define('TTF_DIR','/usr/share/fonts/truetype/'); + } +} + +// +// Setup path for MultiByte TTF fonts (japanese, chinese etc.) +// +if (!defined('MBTTF_DIR')) { + if (strstr( PHP_OS, 'WIN') ) { + $sroot = getenv('SystemRoot'); + if( empty($sroot) ) { + $t = new ErrMsgText(); + $msg = $t->Get(12,$file,$lineno); + die($msg); + } + else { + define('MBTTF_DIR', $sroot.'/fonts/'); + } + } else { + define('MBTTF_DIR','/usr/share/fonts/truetype/'); + } +} + +// +// Check minimum PHP version +// +function CheckPHPVersion($aMinVersion) { + list($majorC, $minorC, $editC) = preg_split('/[\/.-]/', PHP_VERSION); + list($majorR, $minorR, $editR) = preg_split('/[\/.-]/', $aMinVersion); + + if ($majorC < $majorR) return false; + + if ($majorC == $majorR) { + if($minorC < $minorR) return false; + + if($minorC == $minorR){ + if($editC < $editR) return false; + } + } + + return true; +} + +// +// Make sure PHP version is high enough +// +if( !CheckPHPVersion(MIN_PHPVERSION) ) { + JpGraphError::RaiseL(13,PHP_VERSION,MIN_PHPVERSION); + die(); +} + +// +// Make GD sanity check +// +if( !function_exists("imagetypes") || !function_exists('imagecreatefromstring') ) { + JpGraphError::RaiseL(25001); + //("This PHP installation is not configured with the GD library. Please recompile PHP with GD support to run JpGraph. (Neither function imagetypes() nor imagecreatefromstring() does exist)"); +} + +// +// Setup PHP error handler +// +function _phpErrorHandler($errno,$errmsg,$filename, $linenum, $vars) { + // Respect current error level + if( $errno & error_reporting() ) { + JpGraphError::RaiseL(25003,basename($filename),$linenum,$errmsg); + } +} + +if( INSTALL_PHP_ERR_HANDLER ) { + set_error_handler("_phpErrorHandler"); +} + +// +// Check if there were any warnings, perhaps some wrong includes by the user. In this +// case we raise it immediately since otherwise the image will not show and makes +// debugging difficult. This is controlled by the user setting CATCH_PHPERRMSG +// +if( isset($GLOBALS['php_errormsg']) && CATCH_PHPERRMSG && !preg_match('/|Deprecated|/i', $GLOBALS['php_errormsg']) ) { + JpGraphError::RaiseL(25004,$GLOBALS['php_errormsg']); +} + +// Useful mathematical function +function sign($a) {return $a >= 0 ? 1 : -1;} + +// +// Utility function to generate an image name based on the filename we +// are running from and assuming we use auto detection of graphic format +// (top level), i.e it is safe to call this function +// from a script that uses JpGraph +// +function GenImgName() { + // Determine what format we should use when we save the images + $supported = imagetypes(); + if( $supported & IMG_PNG ) $img_format="png"; + elseif( $supported & IMG_GIF ) $img_format="gif"; + elseif( $supported & IMG_JPG ) $img_format="jpeg"; + elseif( $supported & IMG_WBMP ) $img_format="wbmp"; + elseif( $supported & IMG_XPM ) $img_format="xpm"; + + + if( !isset($_SERVER['PHP_SELF']) ) { + JpGraphError::RaiseL(25005); + //(" Can't access PHP_SELF, PHP global variable. You can't run PHP from command line if you want to use the 'auto' naming of cache or image files."); + } + $fname = basename($_SERVER['PHP_SELF']); + if( !empty($_SERVER['QUERY_STRING']) ) { + $q = @$_SERVER['QUERY_STRING']; + $fname .= '_'.preg_replace("/\W/", "_", $q).'.'.$img_format; + } + else { + $fname = substr($fname,0,strlen($fname)-4).'.'.$img_format; + } + return $fname; +} + +//=================================================== +// CLASS JpgTimer +// Description: General timing utility class to handle +// time measurement of generating graphs. Multiple +// timers can be started. +//=================================================== +class JpgTimer { + private $start, $idx; + + function __construct() { + $this->idx=0; + } + + // Push a new timer start on stack + function Push() { + list($ms,$s)=explode(" ",microtime()); + $this->start[$this->idx++]=floor($ms*1000) + 1000*$s; + } + + // Pop the latest timer start and return the diff with the + // current time + function Pop() { + assert($this->idx>0); + list($ms,$s)=explode(" ",microtime()); + $etime=floor($ms*1000) + (1000*$s); + $this->idx--; + return $etime-$this->start[$this->idx]; + } +} // Class + +//=================================================== +// CLASS DateLocale +// Description: Hold localized text used in dates +//=================================================== +class DateLocale { + + public $iLocale = 'C'; // environmental locale be used by default + private $iDayAbb = null, $iShortDay = null, $iShortMonth = null, $iMonthName = null; + + function __construct() { + settype($this->iDayAbb, 'array'); + settype($this->iShortDay, 'array'); + settype($this->iShortMonth, 'array'); + settype($this->iMonthName, 'array'); + $this->Set('C'); + } + + function Set($aLocale) { + if ( in_array($aLocale, array_keys($this->iDayAbb)) ){ + $this->iLocale = $aLocale; + return TRUE; // already cached nothing else to do! + } + + $pLocale = setlocale(LC_TIME, 0); // get current locale for LC_TIME + + if (is_array($aLocale)) { + foreach ($aLocale as $loc) { + $res = @setlocale(LC_TIME, $loc); + if ( $res ) { + $aLocale = $loc; + break; + } + } + } + else { + $res = @setlocale(LC_TIME, $aLocale); + } + + if ( ! $res ) { + JpGraphError::RaiseL(25007,$aLocale); + //("You are trying to use the locale ($aLocale) which your PHP installation does not support. Hint: Use '' to indicate the default locale for this geographic region."); + return FALSE; + } + + $this->iLocale = $aLocale; + for( $i = 0, $ofs = 0 - date('w'); $i < 7; $i++, $ofs++ ) { + $day = date('D', strtotime("$ofs day")); + $day[0] = strtoupper($day[0]); + $this->iDayAbb[$aLocale][]= $day[0]; + $this->iShortDay[$aLocale][]= $day; + } + + for($i=1; $i<=12; ++$i) { + list($short ,$full) = explode('|', date("M|F",strtotime("2001-$i-01"))); + $this->iShortMonth[$aLocale][] = ucfirst($short); + $this->iMonthName [$aLocale][] = ucfirst($full); + } + + setlocale(LC_TIME, $pLocale); + + return TRUE; + } + + + function GetDayAbb() { + return $this->iDayAbb[$this->iLocale]; + } + + function GetShortDay() { + return $this->iShortDay[$this->iLocale]; + } + + function GetShortMonth() { + return $this->iShortMonth[$this->iLocale]; + } + + function GetShortMonthName($aNbr) { + return $this->iShortMonth[$this->iLocale][$aNbr]; + } + + function GetLongMonthName($aNbr) { + return $this->iMonthName[$this->iLocale][$aNbr]; + } + + function GetMonth() { + return $this->iMonthName[$this->iLocale]; + } +} + +// Global object handlers +$gDateLocale = new DateLocale(); +$gJpgDateLocale = new DateLocale(); + +//======================================================= +// CLASS Footer +// Description: Encapsulates the footer line in the Graph +//======================================================= +class Footer { + public $iLeftMargin = 3, $iRightMargin = 3, $iBottomMargin = 3 ; + public $left,$center,$right; + private $iTimer=null, $itimerpoststring=''; + + function __construct() { + $this->left = new Text(); + $this->left->ParagraphAlign('left'); + $this->center = new Text(); + $this->center->ParagraphAlign('center'); + $this->right = new Text(); + $this->right->ParagraphAlign('right'); + } + + function SetTimer($aTimer,$aTimerPostString='') { + $this->iTimer = $aTimer; + $this->itimerpoststring = $aTimerPostString; + } + + function SetMargin($aLeft=3,$aRight=3,$aBottom=3) { + $this->iLeftMargin = $aLeft; + $this->iRightMargin = $aRight; + $this->iBottomMargin = $aBottom; + } + + function Stroke($aImg) { + $y = $aImg->height - $this->iBottomMargin; + $x = $this->iLeftMargin; + $this->left->Align('left','bottom'); + $this->left->Stroke($aImg,$x,$y); + + $x = ($aImg->width - $this->iLeftMargin - $this->iRightMargin)/2; + $this->center->Align('center','bottom'); + $this->center->Stroke($aImg,$x,$y); + + $x = $aImg->width - $this->iRightMargin; + $this->right->Align('right','bottom'); + if( $this->iTimer != null ) { + $this->right->Set( $this->right->t . sprintf('%.3f',$this->iTimer->Pop()/1000.0) . $this->itimerpoststring ); + } + $this->right->Stroke($aImg,$x,$y); + } +} + + +//=================================================== +// CLASS Graph +// Description: Main class to handle graphs +//=================================================== +class Graph { + public $cache=null; // Cache object (singleton) + public $img=null; // Img object (singleton) + public $plots=array(); // Array of all plot object in the graph (for Y 1 axis) + public $y2plots=array(); // Array of all plot object in the graph (for Y 2 axis) + public $ynplots=array(); + public $xscale=null; // X Scale object (could be instance of LinearScale or LogScale + public $yscale=null,$y2scale=null, $ynscale=array(); + public $iIcons = array(); // Array of Icons to add to + public $cache_name; // File name to be used for the current graph in the cache directory + public $xgrid=null; // X Grid object (linear or logarithmic) + public $ygrid=null,$y2grid=null; //dito for Y + public $doframe,$frame_color, $frame_weight; // Frame around graph + public $boxed=false, $box_color='black', $box_weight=1; // Box around plot area + public $doshadow=false,$shadow_width=4,$shadow_color='gray@0.5'; // Shadow for graph + public $xaxis=null; // X-axis (instane of Axis class) + public $yaxis=null, $y2axis=null, $ynaxis=array(); // Y axis (instance of Axis class) + public $margin_color; // Margin color of graph + public $plotarea_color=array(255,255,255); // Plot area color + public $title,$subtitle,$subsubtitle; // Title and subtitle(s) text object + public $axtype="linlin"; // Type of axis + public $xtick_factor,$ytick_factor; // Factor to determine the maximum number of ticks depending on the plot width + public $texts=null, $y2texts=null; // Text object to ge shown in the graph + public $lines=null, $y2lines=null; + public $bands=null, $y2bands=null; + public $text_scale_off=0, $text_scale_abscenteroff=-1; // Text scale in fractions and for centering bars + public $background_image='',$background_image_type=-1,$background_image_format="png"; + public $background_image_bright=0,$background_image_contr=0,$background_image_sat=0; + public $background_image_xpos=0,$background_image_ypos=0; + public $image_bright=0, $image_contr=0, $image_sat=0; + public $inline; + public $showcsim=0,$csimcolor="red";//debug stuff, draw the csim boundaris on the image if <>0 + public $grid_depth=DEPTH_BACK; // Draw grid under all plots as default + public $iAxisStyle = AXSTYLE_SIMPLE; + public $iCSIMdisplay=false,$iHasStroked = false; + public $footer; + public $csimcachename = '', $csimcachetimeout = 0, $iCSIMImgAlt=''; + public $iDoClipping = false; + public $y2orderback=true; + public $tabtitle; + public $bkg_gradtype=-1,$bkg_gradstyle=BGRAD_MARGIN; + public $bkg_gradfrom='navy', $bkg_gradto='silver'; + public $plot_gradtype=-1,$plot_gradstyle=BGRAD_MARGIN; + public $plot_gradfrom='silver', $plot_gradto='navy'; + + public $titlebackground = false; + public $titlebackground_color = 'lightblue', + $titlebackground_style = 1, + $titlebackground_framecolor, + $titlebackground_framestyle, + $titlebackground_frameweight, + $titlebackground_bevelheight; + public $titlebkg_fillstyle=TITLEBKG_FILLSTYLE_SOLID; + public $titlebkg_scolor1='black',$titlebkg_scolor2='white'; + public $framebevel, $framebeveldepth; + public $framebevelborder, $framebevelbordercolor; + public $framebevelcolor1, $framebevelcolor2; + public $background_image_mix=100; + public $background_cflag = ''; + public $background_cflag_type = BGIMG_FILLPLOT; + public $background_cflag_mix = 100; + public $iImgTrans=false, + $iImgTransHorizon = 100,$iImgTransSkewDist=150, + $iImgTransDirection = 1, $iImgTransMinSize = true, + $iImgTransFillColor='white',$iImgTransHighQ=false, + $iImgTransBorder=false,$iImgTransHorizonPos=0.5; + public $legend; + public $graph_theme; + protected $iYAxisDeltaPos=50; + protected $iIconDepth=DEPTH_BACK; + protected $iAxisLblBgType = 0, + $iXAxisLblBgFillColor = 'lightgray', $iXAxisLblBgColor = 'black', + $iYAxisLblBgFillColor = 'lightgray', $iYAxisLblBgColor = 'black'; + protected $iTables=NULL; + + protected $isRunningClear = false; + protected $inputValues; + protected $isAfterSetScale = false; + + // aWIdth Width in pixels of image + // aHeight Height in pixels of image + // aCachedName Name for image file in cache directory + // aTimeOut Timeout in minutes for image in cache + // aInline If true the image is streamed back in the call to Stroke() + // If false the image is just created in the cache + function __construct($aWidth=300,$aHeight=200,$aCachedName='',$aTimeout=0,$aInline=true) { + + if( !is_numeric($aWidth) || !is_numeric($aHeight) ) { + JpGraphError::RaiseL(25008);//('Image width/height argument in Graph::Graph() must be numeric'); + } + + // Initialize frame and margin + $this->InitializeFrameAndMargin(); + + // Automatically generate the image file name based on the name of the script that + // generates the graph + if( $aCachedName == 'auto' ) { + $aCachedName=GenImgName(); + } + + // Should the image be streamed back to the browser or only to the cache? + $this->inline=$aInline; + + $this->img = new RotImage($aWidth,$aHeight); + $this->cache = new ImgStreamCache(); + + // Window doesn't like '?' in the file name so replace it with an '_' + $aCachedName = str_replace("?","_",$aCachedName); + $this->SetupCache($aCachedName, $aTimeout); + + $this->title = new Text(); + $this->title->ParagraphAlign('center'); + $this->title->SetFont(FF_DEFAULT,FS_NORMAL); //FF_FONT2, FS_BOLD + $this->title->SetMargin(5); + $this->title->SetAlign('center'); + + $this->subtitle = new Text(); + $this->subtitle->ParagraphAlign('center'); + $this->subtitle->SetMargin(3); + $this->subtitle->SetAlign('center'); + + $this->subsubtitle = new Text(); + $this->subsubtitle->ParagraphAlign('center'); + $this->subsubtitle->SetMargin(3); + $this->subsubtitle->SetAlign('center'); + + $this->legend = new Legend(); + $this->footer = new Footer(); + + // If the cached version exist just read it directly from the + // cache, stream it back to browser and exit + if( $aCachedName!='' && READ_CACHE && $aInline ) { + if( $this->cache->GetAndStream($this->img,$aCachedName) ) { + exit(); + } + } + + $this->SetTickDensity(); // Normal density + + $this->tabtitle = new GraphTabTitle(); + + if (!$this->isRunningClear) { + $this->inputValues = array(); + $this->inputValues['aWidth'] = $aWidth; + $this->inputValues['aHeight'] = $aHeight; + $this->inputValues['aCachedName'] = $aCachedName; + $this->inputValues['aTimeout'] = $aTimeout; + $this->inputValues['aInline'] = $aInline; + + $theme_class = DEFAULT_THEME_CLASS; + if (class_exists($theme_class)) { + $this->graph_theme = new $theme_class(); + } + } + } + + function InitializeFrameAndMargin() { + $this->doframe=true; + $this->frame_color='black'; + $this->frame_weight=1; + + $this->titlebackground_framecolor = 'blue'; + $this->titlebackground_framestyle = 2; + $this->titlebackground_frameweight = 1; + $this->titlebackground_bevelheight = 3; + $this->titlebkg_fillstyle=TITLEBKG_FILLSTYLE_SOLID; + $this->titlebkg_scolor1='black'; + $this->titlebkg_scolor2='white'; + $this->framebevel = false; + $this->framebeveldepth = 2; + $this->framebevelborder = false; + $this->framebevelbordercolor='black'; + $this->framebevelcolor1='white@0.4'; + $this->framebevelcolor2='black@0.4'; + + $this->margin_color = array(250,250,250); + } + + function SetupCache($aFilename,$aTimeout=60) { + $this->cache_name = $aFilename; + $this->cache->SetTimeOut($aTimeout); + } + + // Enable final image perspective transformation + function Set3DPerspective($aDir=1,$aHorizon=100,$aSkewDist=120,$aQuality=false,$aFillColor='#FFFFFF',$aBorder=false,$aMinSize=true,$aHorizonPos=0.5) { + $this->iImgTrans = true; + $this->iImgTransHorizon = $aHorizon; + $this->iImgTransSkewDist= $aSkewDist; + $this->iImgTransDirection = $aDir; + $this->iImgTransMinSize = $aMinSize; + $this->iImgTransFillColor=$aFillColor; + $this->iImgTransHighQ=$aQuality; + $this->iImgTransBorder=$aBorder; + $this->iImgTransHorizonPos=$aHorizonPos; + } + + function SetUserFont($aNormal,$aBold='',$aItalic='',$aBoldIt='') { + $this->img->ttf->SetUserFont($aNormal,$aBold,$aItalic,$aBoldIt); + } + + function SetUserFont1($aNormal,$aBold='',$aItalic='',$aBoldIt='') { + $this->img->ttf->SetUserFont1($aNormal,$aBold,$aItalic,$aBoldIt); + } + + function SetUserFont2($aNormal,$aBold='',$aItalic='',$aBoldIt='') { + $this->img->ttf->SetUserFont2($aNormal,$aBold,$aItalic,$aBoldIt); + } + + function SetUserFont3($aNormal,$aBold='',$aItalic='',$aBoldIt='') { + $this->img->ttf->SetUserFont3($aNormal,$aBold,$aItalic,$aBoldIt); + } + + // Set Image format and optional quality + function SetImgFormat($aFormat,$aQuality=75) { + $this->img->SetImgFormat($aFormat,$aQuality); + } + + // Should the grid be in front or back of the plot? + function SetGridDepth($aDepth) { + $this->grid_depth=$aDepth; + } + + function SetIconDepth($aDepth) { + $this->iIconDepth=$aDepth; + } + + // Specify graph angle 0-360 degrees. + function SetAngle($aAngle) { + $this->img->SetAngle($aAngle); + } + + function SetAlphaBlending($aFlg=true) { + $this->img->SetAlphaBlending($aFlg); + } + + // Shortcut to image margin + function SetMargin($lm,$rm,$tm,$bm) { + $this->img->SetMargin($lm,$rm,$tm,$bm); + } + + function SetY2OrderBack($aBack=true) { + $this->y2orderback = $aBack; + } + + // Rotate the graph 90 degrees and set the margin + // when we have done a 90 degree rotation + function Set90AndMargin($lm=0,$rm=0,$tm=0,$bm=0) { + $adj = ($this->img->height - $this->img->width)/2; + $this->img->SetMargin($tm-$adj,$bm-$adj,$rm+$adj,$lm+$adj); + $this->img->SetCenter(floor($this->img->width/2),floor($this->img->height/2)); + $this->SetAngle(90); + if( empty($this->yaxis) || empty($this->xaxis) ) { + JpgraphError::RaiseL(25009);//('You must specify what scale to use with a call to Graph::SetScale()'); + } + $this->xaxis->SetLabelAlign('right','center'); + $this->yaxis->SetLabelAlign('center','bottom'); + } + + function SetClipping($aFlg=true) { + $this->iDoClipping = $aFlg ; + } + + // Add a plot object to the graph + function Add($aPlot) { + if( $aPlot == null ) { + JpGraphError::RaiseL(25010);//("Graph::Add() You tried to add a null plot to the graph."); + } + if( is_array($aPlot) && count($aPlot) > 0 ) { + $cl = $aPlot[0]; + } + else { + $cl = $aPlot; + } + + if( $cl instanceof Text ) $this->AddText($aPlot); + elseif( class_exists('PlotLine',false) && ($cl instanceof PlotLine) ) $this->AddLine($aPlot); + elseif( class_exists('PlotBand',false) && ($cl instanceof PlotBand) ) $this->AddBand($aPlot); + elseif( class_exists('IconPlot',false) && ($cl instanceof IconPlot) ) $this->AddIcon($aPlot); + elseif( class_exists('GTextTable',false) && ($cl instanceof GTextTable) ) $this->AddTable($aPlot); + else { + if( is_array($aPlot) ) { + $this->plots = array_merge($this->plots,$aPlot); + } + else { + $this->plots[] = $aPlot; + } + } + + if ($this->graph_theme) { + $this->graph_theme->SetupPlot($aPlot); + } + } + + function AddTable($aTable) { + if( is_array($aTable) ) { + for($i=0; $i < count($aTable); ++$i ) { + $this->iTables[]=$aTable[$i]; + } + } + else { + $this->iTables[] = $aTable ; + } + } + + function AddIcon($aIcon) { + if( is_array($aIcon) ) { + for($i=0; $i < count($aIcon); ++$i ) { + $this->iIcons[]=$aIcon[$i]; + } + } + else { + $this->iIcons[] = $aIcon ; + } + } + + // Add plot to second Y-scale + function AddY2($aPlot) { + if( $aPlot == null ) { + JpGraphError::RaiseL(25011);//("Graph::AddY2() You tried to add a null plot to the graph."); + } + + if( is_array($aPlot) && count($aPlot) > 0 ) { + $cl = $aPlot[0]; + } + else { + $cl = $aPlot; + } + + if( $cl instanceof Text ) { + $this->AddText($aPlot,true); + } + elseif( class_exists('PlotLine',false) && ($cl instanceof PlotLine) ) { + $this->AddLine($aPlot,true); + } + elseif( class_exists('PlotBand',false) && ($cl instanceof PlotBand) ) { + $this->AddBand($aPlot,true); + } + else { + $this->y2plots[] = $aPlot; + } + + if ($this->graph_theme) { + $this->graph_theme->SetupPlot($aPlot); + } + } + + // Add plot to the extra Y-axises + function AddY($aN,$aPlot) { + + if( $aPlot == null ) { + JpGraphError::RaiseL(25012);//("Graph::AddYN() You tried to add a null plot to the graph."); + } + + if( is_array($aPlot) && count($aPlot) > 0 ) { + $cl = $aPlot[0]; + } + else { + $cl = $aPlot; + } + + if( ($cl instanceof Text) || + (class_exists('PlotLine',false) && ($cl instanceof PlotLine)) || + (class_exists('PlotBand',false) && ($cl instanceof PlotBand)) ) { + JpGraph::RaiseL(25013);//('You can only add standard plots to multiple Y-axis'); + } + else { + $this->ynplots[$aN][] = $aPlot; + } + + if ($this->graph_theme) { + $this->graph_theme->SetupPlot($aPlot); + } + } + + // Add text object to the graph + function AddText($aTxt,$aToY2=false) { + if( $aTxt == null ) { + JpGraphError::RaiseL(25014);//("Graph::AddText() You tried to add a null text to the graph."); + } + if( $aToY2 ) { + if( is_array($aTxt) ) { + for($i=0; $i < count($aTxt); ++$i ) { + $this->y2texts[]=$aTxt[$i]; + } + } + else { + $this->y2texts[] = $aTxt; + } + } + else { + if( is_array($aTxt) ) { + for($i=0; $i < count($aTxt); ++$i ) { + $this->texts[]=$aTxt[$i]; + } + } + else { + $this->texts[] = $aTxt; + } + } + } + + // Add a line object (class PlotLine) to the graph + function AddLine($aLine,$aToY2=false) { + if( $aLine == null ) { + JpGraphError::RaiseL(25015);//("Graph::AddLine() You tried to add a null line to the graph."); + } + + if( $aToY2 ) { + if( is_array($aLine) ) { + for($i=0; $i < count($aLine); ++$i ) { + //$this->y2lines[]=$aLine[$i]; + $this->y2plots[]=$aLine[$i]; + } + } + else { + //$this->y2lines[] = $aLine; + $this->y2plots[]=$aLine; + } + } + else { + if( is_array($aLine) ) { + for($i=0; $ilines[]=$aLine[$i]; + $this->plots[]=$aLine[$i]; + } + } + else { + //$this->lines[] = $aLine; + $this->plots[] = $aLine; + } + } + } + + // Add vertical or horizontal band + function AddBand($aBand,$aToY2=false) { + if( $aBand == null ) { + JpGraphError::RaiseL(25016);//(" Graph::AddBand() You tried to add a null band to the graph."); + } + + if( $aToY2 ) { + if( is_array($aBand) ) { + for($i=0; $i < count($aBand); ++$i ) { + $this->y2bands[] = $aBand[$i]; + } + } + else { + $this->y2bands[] = $aBand; + } + } + else { + if( is_array($aBand) ) { + for($i=0; $i < count($aBand); ++$i ) { + $this->bands[] = $aBand[$i]; + } + } + else { + $this->bands[] = $aBand; + } + } + } + + function SetPlotGradient($aFrom='navy',$aTo='silver',$aGradType=2) { + $this->plot_gradtype=$aGradType; + $this->plot_gradfrom = $aFrom; + $this->plot_gradto = $aTo; + } + + function SetBackgroundGradient($aFrom='navy',$aTo='silver',$aGradType=2,$aStyle=BGRAD_FRAME) { + $this->bkg_gradtype=$aGradType; + $this->bkg_gradstyle=$aStyle; + $this->bkg_gradfrom = $aFrom; + $this->bkg_gradto = $aTo; + } + + // Set a country flag in the background + function SetBackgroundCFlag($aName,$aBgType=BGIMG_FILLPLOT,$aMix=100) { + $this->background_cflag = $aName; + $this->background_cflag_type = $aBgType; + $this->background_cflag_mix = $aMix; + } + + // Alias for the above method + function SetBackgroundCountryFlag($aName,$aBgType=BGIMG_FILLPLOT,$aMix=100) { + $this->background_cflag = $aName; + $this->background_cflag_type = $aBgType; + $this->background_cflag_mix = $aMix; + } + + + // Specify a background image + function SetBackgroundImage($aFileName,$aBgType=BGIMG_FILLPLOT,$aImgFormat='auto') { + + // Get extension to determine image type + if( $aImgFormat == 'auto' ) { + $e = explode('.',$aFileName); + if( !$e ) { + JpGraphError::RaiseL(25018,$aFileName);//('Incorrect file name for Graph::SetBackgroundImage() : '.$aFileName.' Must have a valid image extension (jpg,gif,png) when using autodetection of image type'); + } + + $valid_formats = array('png', 'jpg', 'gif'); + $aImgFormat = strtolower($e[count($e)-1]); + if ($aImgFormat == 'jpeg') { + $aImgFormat = 'jpg'; + } + elseif (!in_array($aImgFormat, $valid_formats) ) { + JpGraphError::RaiseL(25019,$aImgFormat);//('Unknown file extension ($aImgFormat) in Graph::SetBackgroundImage() for filename: '.$aFileName); + } + } + + $this->background_image = $aFileName; + $this->background_image_type=$aBgType; + $this->background_image_format=$aImgFormat; + } + + function SetBackgroundImageMix($aMix) { + $this->background_image_mix = $aMix ; + } + + // Adjust background image position + function SetBackgroundImagePos($aXpos,$aYpos) { + $this->background_image_xpos = $aXpos ; + $this->background_image_ypos = $aYpos ; + } + + // Specify axis style (boxed or single) + function SetAxisStyle($aStyle) { + $this->iAxisStyle = $aStyle ; + } + + // Set a frame around the plot area + function SetBox($aDrawPlotFrame=true,$aPlotFrameColor=array(0,0,0),$aPlotFrameWeight=1) { + $this->boxed = $aDrawPlotFrame; + $this->box_weight = $aPlotFrameWeight; + $this->box_color = $aPlotFrameColor; + } + + // Specify color for the plotarea (not the margins) + function SetColor($aColor) { + $this->plotarea_color=$aColor; + } + + // Specify color for the margins (all areas outside the plotarea) + function SetMarginColor($aColor) { + $this->margin_color=$aColor; + } + + // Set a frame around the entire image + function SetFrame($aDrawImgFrame=true,$aImgFrameColor=array(0,0,0),$aImgFrameWeight=1) { + $this->doframe = $aDrawImgFrame; + $this->frame_color = $aImgFrameColor; + $this->frame_weight = $aImgFrameWeight; + } + + function SetFrameBevel($aDepth=3,$aBorder=false,$aBorderColor='black',$aColor1='white@0.4',$aColor2='darkgray@0.4',$aFlg=true) { + $this->framebevel = $aFlg ; + $this->framebeveldepth = $aDepth ; + $this->framebevelborder = $aBorder ; + $this->framebevelbordercolor = $aBorderColor ; + $this->framebevelcolor1 = $aColor1 ; + $this->framebevelcolor2 = $aColor2 ; + + $this->doshadow = false ; + } + + // Set the shadow around the whole image + function SetShadow($aShowShadow=true,$aShadowWidth=5,$aShadowColor='darkgray') { + $this->doshadow = $aShowShadow; + $this->shadow_color = $aShadowColor; + $this->shadow_width = $aShadowWidth; + $this->footer->iBottomMargin += $aShadowWidth; + $this->footer->iRightMargin += $aShadowWidth; + } + + // Specify x,y scale. Note that if you manually specify the scale + // you must also specify the tick distance with a call to Ticks::Set() + function SetScale($aAxisType,$aYMin=1,$aYMax=1,$aXMin=1,$aXMax=1) { + $this->axtype = $aAxisType; + + if( $aYMax < $aYMin || $aXMax < $aXMin ) { + JpGraphError::RaiseL(25020);//('Graph::SetScale(): Specified Max value must be larger than the specified Min value.'); + } + + $yt=substr($aAxisType,-3,3); + if( $yt == 'lin' ) { + $this->yscale = new LinearScale($aYMin,$aYMax); + } + elseif( $yt == 'int' ) { + $this->yscale = new LinearScale($aYMin,$aYMax); + $this->yscale->SetIntScale(); + } + elseif( $yt == 'log' ) { + $this->yscale = new LogScale($aYMin,$aYMax); + } + else { + JpGraphError::RaiseL(25021,$aAxisType);//("Unknown scale specification for Y-scale. ($aAxisType)"); + } + + $xt=substr($aAxisType,0,3); + if( $xt == 'lin' || $xt == 'tex' ) { + $this->xscale = new LinearScale($aXMin,$aXMax,'x'); + $this->xscale->textscale = ($xt == 'tex'); + } + elseif( $xt == 'int' ) { + $this->xscale = new LinearScale($aXMin,$aXMax,'x'); + $this->xscale->SetIntScale(); + } + elseif( $xt == 'dat' ) { + $this->xscale = new DateScale($aXMin,$aXMax,'x'); + } + elseif( $xt == 'log' ) { + $this->xscale = new LogScale($aXMin,$aXMax,'x'); + } + else { + JpGraphError::RaiseL(25022,$aAxisType);//(" Unknown scale specification for X-scale. ($aAxisType)"); + } + + $this->xaxis = new Axis($this->img,$this->xscale); + $this->yaxis = new Axis($this->img,$this->yscale); + $this->xgrid = new Grid($this->xaxis); + $this->ygrid = new Grid($this->yaxis); + $this->ygrid->Show(); + + + if (!$this->isRunningClear) { + $this->inputValues['aAxisType'] = $aAxisType; + $this->inputValues['aYMin'] = $aYMin; + $this->inputValues['aYMax'] = $aYMax; + $this->inputValues['aXMin'] = $aXMin; + $this->inputValues['aXMax'] = $aXMax; + + if ($this->graph_theme) { + $this->graph_theme->ApplyGraph($this); + } + } + + $this->isAfterSetScale = true; + } + + // Specify secondary Y scale + function SetY2Scale($aAxisType='lin',$aY2Min=1,$aY2Max=1) { + if( $aAxisType == 'lin' ) { + $this->y2scale = new LinearScale($aY2Min,$aY2Max); + } + elseif( $aAxisType == 'int' ) { + $this->y2scale = new LinearScale($aY2Min,$aY2Max); + $this->y2scale->SetIntScale(); + } + elseif( $aAxisType == 'log' ) { + $this->y2scale = new LogScale($aY2Min,$aY2Max); + } + else { + JpGraphError::RaiseL(25023,$aAxisType);//("JpGraph: Unsupported Y2 axis type: $aAxisType\nMust be one of (lin,log,int)"); + } + + $this->y2axis = new Axis($this->img,$this->y2scale); + $this->y2axis->scale->ticks->SetDirection(SIDE_LEFT); + $this->y2axis->SetLabelSide(SIDE_RIGHT); + $this->y2axis->SetPos('max'); + $this->y2axis->SetTitleSide(SIDE_RIGHT); + + // Deafult position is the max x-value + $this->y2grid = new Grid($this->y2axis); + + if ($this->graph_theme) { + $this->graph_theme->ApplyGraph($this); + } + } + + // Set the delta position (in pixels) between the multiple Y-axis + function SetYDeltaDist($aDist) { + $this->iYAxisDeltaPos = $aDist; + } + + // Specify secondary Y scale + function SetYScale($aN,$aAxisType="lin",$aYMin=1,$aYMax=1) { + + if( $aAxisType == 'lin' ) { + $this->ynscale[$aN] = new LinearScale($aYMin,$aYMax); + } + elseif( $aAxisType == 'int' ) { + $this->ynscale[$aN] = new LinearScale($aYMin,$aYMax); + $this->ynscale[$aN]->SetIntScale(); + } + elseif( $aAxisType == 'log' ) { + $this->ynscale[$aN] = new LogScale($aYMin,$aYMax); + } + else { + JpGraphError::RaiseL(25024,$aAxisType);//("JpGraph: Unsupported Y axis type: $aAxisType\nMust be one of (lin,log,int)"); + } + + $this->ynaxis[$aN] = new Axis($this->img,$this->ynscale[$aN]); + $this->ynaxis[$aN]->scale->ticks->SetDirection(SIDE_LEFT); + $this->ynaxis[$aN]->SetLabelSide(SIDE_RIGHT); + + if ($this->graph_theme) { + $this->graph_theme->ApplyGraph($this); + } + } + + // Specify density of ticks when autoscaling 'normal', 'dense', 'sparse', 'verysparse' + // The dividing factor have been determined heuristically according to my aesthetic + // sense (or lack off) y.m.m.v ! + function SetTickDensity($aYDensity=TICKD_NORMAL,$aXDensity=TICKD_NORMAL) { + $this->xtick_factor=30; + $this->ytick_factor=25; + switch( $aYDensity ) { + case TICKD_DENSE: + $this->ytick_factor=12; + break; + case TICKD_NORMAL: + $this->ytick_factor=25; + break; + case TICKD_SPARSE: + $this->ytick_factor=40; + break; + case TICKD_VERYSPARSE: + $this->ytick_factor=100; + break; + default: + JpGraphError::RaiseL(25025,$densy);//("JpGraph: Unsupported Tick density: $densy"); + } + switch( $aXDensity ) { + case TICKD_DENSE: + $this->xtick_factor=15; + break; + case TICKD_NORMAL: + $this->xtick_factor=30; + break; + case TICKD_SPARSE: + $this->xtick_factor=45; + break; + case TICKD_VERYSPARSE: + $this->xtick_factor=60; + break; + default: + JpGraphError::RaiseL(25025,$densx);//("JpGraph: Unsupported Tick density: $densx"); + } + } + + + // Get a string of all image map areas + function GetCSIMareas() { + if( !$this->iHasStroked ) { + $this->Stroke(_CSIM_SPECIALFILE); + } + + $csim = $this->title->GetCSIMAreas(); + $csim .= $this->subtitle->GetCSIMAreas(); + $csim .= $this->subsubtitle->GetCSIMAreas(); + $csim .= $this->legend->GetCSIMAreas(); + + if( $this->y2axis != NULL ) { + $csim .= $this->y2axis->title->GetCSIMAreas(); + } + + if( $this->texts != null ) { + $n = count($this->texts); + for($i=0; $i < $n; ++$i ) { + $csim .= $this->texts[$i]->GetCSIMAreas(); + } + } + + if( $this->y2texts != null && $this->y2scale != null ) { + $n = count($this->y2texts); + for($i=0; $i < $n; ++$i ) { + $csim .= $this->y2texts[$i]->GetCSIMAreas(); + } + } + + if( $this->yaxis != null && $this->xaxis != null ) { + $csim .= $this->yaxis->title->GetCSIMAreas(); + $csim .= $this->xaxis->title->GetCSIMAreas(); + } + + $n = count($this->plots); + for( $i=0; $i < $n; ++$i ) { + $csim .= $this->plots[$i]->GetCSIMareas(); + } + + $n = count($this->y2plots); + for( $i=0; $i < $n; ++$i ) { + $csim .= $this->y2plots[$i]->GetCSIMareas(); + } + + $n = count($this->ynaxis); + for( $i=0; $i < $n; ++$i ) { + $m = count($this->ynplots[$i]); + for($j=0; $j < $m; ++$j ) { + $csim .= $this->ynplots[$i][$j]->GetCSIMareas(); + } + } + + if($this->iTables != null) { + $n = count($this->iTables); + for ($i = 0; $i < $n; ++$i) { + $csim .= $this->iTables[$i]->GetCSIMareas(); + } + } + + return $csim; + } + + // Get a complete .. tag for the final image map + function GetHTMLImageMap($aMapName) { + $im = "\n"; + $im .= $this->GetCSIMareas(); + $im .= ""; + return $im; + } + + function CheckCSIMCache($aCacheName,$aTimeOut=60) { + global $_SERVER; + + if( $aCacheName=='auto' ) { + $aCacheName=basename($_SERVER['PHP_SELF']); + } + + $urlarg = $this->GetURLArguments(); + $this->csimcachename = CSIMCACHE_DIR.$aCacheName.$urlarg; + $this->csimcachetimeout = $aTimeOut; + + // First determine if we need to check for a cached version + // This differs from the standard cache in the sense that the + // image and CSIM map HTML file is written relative to the directory + // the script executes in and not the specified cache directory. + // The reason for this is that the cache directory is not necessarily + // accessible from the HTTP server. + if( $this->csimcachename != '' ) { + $dir = dirname($this->csimcachename); + $base = basename($this->csimcachename); + $base = strtok($base,'.'); + $suffix = strtok('.'); + $basecsim = $dir.'/'.$base.'?'.$urlarg.'_csim_.html'; + $baseimg = $dir.'/'.$base.'?'.$urlarg.'.'.$this->img->img_format; + + $timedout=false; + // Does it exist at all ? + + if( file_exists($basecsim) && file_exists($baseimg) ) { + // Check that it hasn't timed out + $diff=time()-filemtime($basecsim); + if( $this->csimcachetimeout>0 && ($diff > $this->csimcachetimeout*60) ) { + $timedout=true; + @unlink($basecsim); + @unlink($baseimg); + } + else { + if ($fh = @fopen($basecsim, "r")) { + fpassthru($fh); + return true; + } + else { + JpGraphError::RaiseL(25027,$basecsim);//(" Can't open cached CSIM \"$basecsim\" for reading."); + } + } + } + } + return false; + } + + // Build the argument string to be used with the csim images + static function GetURLArguments($aAddRecursiveBlocker=false) { + + if( $aAddRecursiveBlocker ) { + // This is a JPGRAPH internal defined that prevents + // us from recursively coming here again + $urlarg = _CSIM_DISPLAY.'=1'; + } + + // Now reconstruct any user URL argument + reset($_GET); + foreach ($_GET as $key => $value) { + if( is_array($value) ) { + foreach ( $value as $k => $v ) { + $urlarg .= '&'.$key.'%5B'.$k.'%5D='.urlencode($v); + } + } + else { + $urlarg .= '&'.$key.'='.urlencode($value); + } + } + + // It's not ideal to convert POST argument to GET arguments + // but there is little else we can do. One idea for the + // future might be recreate the POST header in case. + reset($_POST); + foreach ($_POST as $key => $value) { + if( is_array($value) ) { + foreach ( $value as $k => $v ) { + $urlarg .= '&'.$key.'%5B'.$k.'%5D='.urlencode($v); + } + } + else { + $urlarg .= '&'.$key.'='.urlencode($value); + } + } + + return $urlarg; + } + + function SetCSIMImgAlt($aAlt) { + $this->iCSIMImgAlt = $aAlt; + } + + function StrokeCSIM($aScriptName='auto',$aCSIMName='',$aBorder=0) { + if( $aCSIMName=='' ) { + // create a random map name + srand ((double) microtime() * 1000000); + $r = rand(0,100000); + $aCSIMName='__mapname'.$r.'__'; + } + + if( $aScriptName=='auto' ) { + $aScriptName=basename($_SERVER['PHP_SELF']); + } + + $urlarg = $this->GetURLArguments(true); + + if( empty($_GET[_CSIM_DISPLAY]) ) { + // First determine if we need to check for a cached version + // This differs from the standard cache in the sense that the + // image and CSIM map HTML file is written relative to the directory + // the script executes in and not the specified cache directory. + // The reason for this is that the cache directory is not necessarily + // accessible from the HTTP server. + if( $this->csimcachename != '' ) { + $dir = dirname($this->csimcachename); + $base = basename($this->csimcachename); + $base = strtok($base,'.'); + $suffix = strtok('.'); + $basecsim = $dir.'/'.$base.'?'.$urlarg.'_csim_.html'; + $baseimg = $base.'?'.$urlarg.'.'.$this->img->img_format; + + // Check that apache can write to directory specified + + if( file_exists($dir) && !is_writeable($dir) ) { + JpgraphError::RaiseL(25028,$dir);//('Apache/PHP does not have permission to write to the CSIM cache directory ('.$dir.'). Check permissions.'); + } + + // Make sure directory exists + $this->cache->MakeDirs($dir); + + // Write the image file + $this->Stroke(CSIMCACHE_DIR.$baseimg); + + // Construct wrapper HTML and write to file and send it back to browser + + // In the src URL we must replace the '?' with its encoding to prevent the arguments + // to be converted to real arguments. + $tmp = str_replace('?','%3f',$baseimg); + $htmlwrap = $this->GetHTMLImageMap($aCSIMName)."\n". + 'img->width.'" height="'.$this->img->height."\" alt=\"".$this->iCSIMImgAlt."\" />\n"; + + if($fh = @fopen($basecsim,'w') ) { + fwrite($fh,$htmlwrap); + fclose($fh); + echo $htmlwrap; + } + else { + JpGraphError::RaiseL(25029,$basecsim);//(" Can't write CSIM \"$basecsim\" for writing. Check free space and permissions."); + } + } + else { + + if( $aScriptName=='' ) { + JpGraphError::RaiseL(25030);//('Missing script name in call to StrokeCSIM(). You must specify the name of the actual image script as the first parameter to StrokeCSIM().'); + } + echo $this->GetHTMLImageMap($aCSIMName) . $this->GetCSIMImgHTML($aCSIMName, $aScriptName, $aBorder); + } + } + else { + $this->Stroke(); + } + } + + function StrokeCSIMImage() { + if( @$_GET[_CSIM_DISPLAY] == 1 ) { + $this->Stroke(); + } + } + + function GetCSIMImgHTML($aCSIMName, $aScriptName='auto', $aBorder=0 ) { + if( $aScriptName=='auto' ) { + $aScriptName=basename($_SERVER['PHP_SELF']); + } + $urlarg = $this->GetURLArguments(true); + return "\"".$this-iCSIMImgAlt."\" />\n"; + } + + function GetTextsYMinMax($aY2=false) { + if( $aY2 ) { + $txts = $this->y2texts; + } + else { + $txts = $this->texts; + } + $n = is_array($txts) ? count($txts) : 0; + $min=null; + $max=null; + for( $i=0; $i < $n; ++$i ) { + if( $txts[$i]->iScalePosY !== null && $txts[$i]->iScalePosX !== null ) { + if( $min === null ) { + $min = $max = $txts[$i]->iScalePosY ; + } + else { + $min = min($min,$txts[$i]->iScalePosY); + $max = max($max,$txts[$i]->iScalePosY); + } + } + } + if( $min !== null ) { + return array($min,$max); + } + else { + return null; + } + } + + function GetTextsXMinMax($aY2=false) { + if( $aY2 ) { + $txts = $this->y2texts; + } + else { + $txts = $this->texts; + } + $n = is_array($txts) ? count($txts) : 0; + $min=null; + $max=null; + for( $i=0; $i < $n; ++$i ) { + if( $txts[$i]->iScalePosY !== null && $txts[$i]->iScalePosX !== null ) { + if( $min === null ) { + $min = $max = $txts[$i]->iScalePosX ; + } + else { + $min = min($min,$txts[$i]->iScalePosX); + $max = max($max,$txts[$i]->iScalePosX); + } + } + } + if( $min !== null ) { + return array($min,$max); + } + else { + return null; + } + } + + function GetXMinMax() { + + list($min,$ymin) = $this->plots[0]->Min(); + list($max,$ymax) = $this->plots[0]->Max(); + + $i=0; + // Some plots, e.g. PlotLine should not affect the scale + // and will return (null,null). We should ignore those + // values. + while( ($min===null || $max === null) && ($i < count($this->plots)-1) ) { + ++$i; + list($min,$ymin) = $this->plots[$i]->Min(); + list($max,$ymax) = $this->plots[$i]->Max(); + } + + foreach( $this->plots as $p ) { + list($xmin,$ymin) = $p->Min(); + list($xmax,$ymax) = $p->Max(); + + if( $xmin !== null && $xmax !== null ) { + $min = Min($xmin,$min); + $max = Max($xmax,$max); + } + } + + if( $this->y2axis != null ) { + foreach( $this->y2plots as $p ) { + list($xmin,$ymin) = $p->Min(); + list($xmax,$ymax) = $p->Max(); + if( $xmin !== null && $xmax !== null ) { + $min = Min($xmin, $min); + $max = Max($xmax, $max); + } + } + } + + $n = count($this->ynaxis); + for( $i=0; $i < $n; ++$i ) { + if( $this->ynaxis[$i] != null) { + foreach( $this->ynplots[$i] as $p ) { + list($xmin,$ymin) = $p->Min(); + list($xmax,$ymax) = $p->Max(); + if( $xmin !== null && $xmax !== null ) { + $min = Min($xmin, $min); + $max = Max($xmax, $max); + } + } + } + } + return array($min,$max); + } + + function AdjustMarginsForTitles() { + $totrequired = + ($this->title->t != '' + ? $this->title->GetTextHeight($this->img) + $this->title->margin + 5 * SUPERSAMPLING_SCALE + : 0 ) + + ($this->subtitle->t != '' + ? $this->subtitle->GetTextHeight($this->img) + $this->subtitle->margin + 5 * SUPERSAMPLING_SCALE + : 0 ) + + ($this->subsubtitle->t != '' + ? $this->subsubtitle->GetTextHeight($this->img) + $this->subsubtitle->margin + 5 * SUPERSAMPLING_SCALE + : 0 ) ; + + $btotrequired = 0; + if($this->xaxis != null && !$this->xaxis->hide && !$this->xaxis->hide_labels ) { + // Minimum bottom margin + if( $this->xaxis->title->t != '' ) { + if( $this->img->a == 90 ) { + $btotrequired = $this->yaxis->title->GetTextHeight($this->img) + 7 ; + } + else { + $btotrequired = $this->xaxis->title->GetTextHeight($this->img) + 7 ; + } + } + else { + $btotrequired = 0; + } + + if( $this->img->a == 90 ) { + $this->img->SetFont($this->yaxis->font_family,$this->yaxis->font_style, + $this->yaxis->font_size); + $lh = $this->img->GetTextHeight('Mg',$this->yaxis->label_angle); + } + else { + $this->img->SetFont($this->xaxis->font_family,$this->xaxis->font_style, + $this->xaxis->font_size); + $lh = $this->img->GetTextHeight('Mg',$this->xaxis->label_angle); + } + + $btotrequired += $lh + 6; + } + + if( $this->img->a == 90 ) { + // DO Nothing. It gets too messy to do this properly for 90 deg... + } + else{ + // need more top margin + if( $this->img->top_margin < $totrequired ) { + $this->SetMargin( + $this->img->raw_left_margin, + $this->img->raw_right_margin, + $totrequired / SUPERSAMPLING_SCALE, + $this->img->raw_bottom_margin + ); + } + + // need more bottom margin + if( $this->img->bottom_margin < $btotrequired ) { + $this->SetMargin( + $this->img->raw_left_margin, + $this->img->raw_right_margin, + $this->img->raw_top_margin, + $btotrequired / SUPERSAMPLING_SCALE + ); + } + } + } + + function StrokeStore($aStrokeFileName) { + // Get the handler to prevent the library from sending the + // image to the browser + $ih = $this->Stroke(_IMG_HANDLER); + + // Stroke it to a file + $this->img->Stream($aStrokeFileName); + + // Send it back to browser + $this->img->Headers(); + $this->img->Stream(); + } + + function doAutoscaleXAxis() { + //Check if we should autoscale x-axis + if( !$this->xscale->IsSpecified() ) { + if( substr($this->axtype,0,4) == "text" ) { + $max=0; + $n = count($this->plots); + for($i=0; $i < $n; ++$i ) { + $p = $this->plots[$i]; + // We need some unfortunate sub class knowledge here in order + // to increase number of data points in case it is a line plot + // which has the barcenter set. If not it could mean that the + // last point of the data is outside the scale since the barcenter + // settings means that we will shift the entire plot half a tick step + // to the right in oder to align with the center of the bars. + if( class_exists('BarPlot',false) ) { + $cl = strtolower(get_class($p)); + if( (class_exists('BarPlot',false) && ($p instanceof BarPlot)) || empty($p->barcenter) ) { + $max=max($max,$p->numpoints-1); + } + else { + $max=max($max,$p->numpoints); + } + } + else { + if( empty($p->barcenter) ) { + $max=max($max,$p->numpoints-1); + } + else { + $max=max($max,$p->numpoints); + } + } + } + $min=0; + if( $this->y2axis != null ) { + foreach( $this->y2plots as $p ) { + $max=max($max,$p->numpoints-1); + } + } + $n = count($this->ynaxis); + for( $i=0; $i < $n; ++$i ) { + if( $this->ynaxis[$i] != null) { + foreach( $this->ynplots[$i] as $p ) { + $max=max($max,$p->numpoints-1); + } + } + } + + $this->xscale->Update($this->img,$min,$max); + $this->xscale->ticks->Set($this->xaxis->tick_step,1); + $this->xscale->ticks->SupressMinorTickMarks(); + } + else { + list($min,$max) = $this->GetXMinMax(); + + $lres = $this->GetLinesXMinMax($this->lines); + if( $lres ) { + list($linmin,$linmax) = $lres ; + $min = min($min,$linmin); + $max = max($max,$linmax); + } + + $lres = $this->GetLinesXMinMax($this->y2lines); + if( $lres ) { + list($linmin,$linmax) = $lres ; + $min = min($min,$linmin); + $max = max($max,$linmax); + } + + $tres = $this->GetTextsXMinMax(); + if( $tres ) { + list($tmin,$tmax) = $tres ; + $min = min($min,$tmin); + $max = max($max,$tmax); + } + + $tres = $this->GetTextsXMinMax(true); + if( $tres ) { + list($tmin,$tmax) = $tres ; + $min = min($min,$tmin); + $max = max($max,$tmax); + } + + $this->xscale->AutoScale($this->img,$min,$max,round($this->img->plotwidth/$this->xtick_factor)); + } + + //Adjust position of y-axis and y2-axis to minimum/maximum of x-scale + if( !is_numeric($this->yaxis->pos) && !is_string($this->yaxis->pos) ) { + $this->yaxis->SetPos($this->xscale->GetMinVal()); + } + } + elseif( $this->xscale->IsSpecified() && + ( $this->xscale->auto_ticks || !$this->xscale->ticks->IsSpecified()) ) { + // The tick calculation will use the user suplied min/max values to determine + // the ticks. If auto_ticks is false the exact user specifed min and max + // values will be used for the scale. + // If auto_ticks is true then the scale might be slightly adjusted + // so that the min and max values falls on an even major step. + $min = $this->xscale->scale[0]; + $max = $this->xscale->scale[1]; + $this->xscale->AutoScale($this->img,$min,$max,round($this->img->plotwidth/$this->xtick_factor),false); + + // Now make sure we show enough precision to accurate display the + // labels. If this is not done then the user might end up with + // a scale that might actually start with, say 13.5, butdue to rounding + // the scale label will ony show 14. + if( abs(floor($min)-$min) > 0 ) { + + // If the user has set a format then we bail out + if( $this->xscale->ticks->label_formatstr == '' && $this->xscale->ticks->label_dateformatstr == '' ) { + $this->xscale->ticks->precision = abs( floor(log10( abs(floor($min)-$min))) )+1; + } + } + } + + // Position the optional Y2 and Yn axis to the rightmost position of the x-axis + if( $this->y2axis != null ) { + if( !is_numeric($this->y2axis->pos) && !is_string($this->y2axis->pos) ) { + $this->y2axis->SetPos($this->xscale->GetMaxVal()); + } + $this->y2axis->SetTitleSide(SIDE_RIGHT); + } + + $n = count($this->ynaxis); + $nY2adj = $this->y2axis != null ? $this->iYAxisDeltaPos : 0; + for( $i=0; $i < $n; ++$i ) { + if( $this->ynaxis[$i] != null ) { + if( !is_numeric($this->ynaxis[$i]->pos) && !is_string($this->ynaxis[$i]->pos) ) { + $this->ynaxis[$i]->SetPos($this->xscale->GetMaxVal()); + $this->ynaxis[$i]->SetPosAbsDelta($i*$this->iYAxisDeltaPos + $nY2adj); + } + $this->ynaxis[$i]->SetTitleSide(SIDE_RIGHT); + } + } + } + + + function doAutoScaleYnAxis() { + + if( $this->y2scale != null) { + if( !$this->y2scale->IsSpecified() && count($this->y2plots)>0 ) { + list($min,$max) = $this->GetPlotsYMinMax($this->y2plots); + + $lres = $this->GetLinesYMinMax($this->y2lines); + if( is_array($lres) ) { + list($linmin,$linmax) = $lres ; + $min = min($min,$linmin); + $max = max($max,$linmax); + } + $tres = $this->GetTextsYMinMax(true); + if( is_array($tres) ) { + list($tmin,$tmax) = $tres ; + $min = min($min,$tmin); + $max = max($max,$tmax); + } + $this->y2scale->AutoScale($this->img,$min,$max,$this->img->plotheight/$this->ytick_factor); + } + elseif( $this->y2scale->IsSpecified() && ( $this->y2scale->auto_ticks || !$this->y2scale->ticks->IsSpecified()) ) { + // The tick calculation will use the user suplied min/max values to determine + // the ticks. If auto_ticks is false the exact user specifed min and max + // values will be used for the scale. + // If auto_ticks is true then the scale might be slightly adjusted + // so that the min and max values falls on an even major step. + $min = $this->y2scale->scale[0]; + $max = $this->y2scale->scale[1]; + $this->y2scale->AutoScale($this->img,$min,$max, + $this->img->plotheight/$this->ytick_factor, + $this->y2scale->auto_ticks); + + // Now make sure we show enough precision to accurate display the + // labels. If this is not done then the user might end up with + // a scale that might actually start with, say 13.5, butdue to rounding + // the scale label will ony show 14. + if( abs(floor($min)-$min) > 0 ) { + // If the user has set a format then we bail out + if( $this->y2scale->ticks->label_formatstr == '' && $this->y2scale->ticks->label_dateformatstr == '' ) { + $this->y2scale->ticks->precision = abs( floor(log10( abs(floor($min)-$min))) )+1; + } + } + + } + } + + + // + // Autoscale the extra Y-axises + // + $n = count($this->ynaxis); + for( $i=0; $i < $n; ++$i ) { + if( $this->ynscale[$i] != null) { + if( !$this->ynscale[$i]->IsSpecified() && count($this->ynplots[$i])>0 ) { + list($min,$max) = $this->GetPlotsYMinMax($this->ynplots[$i]); + $this->ynscale[$i]->AutoScale($this->img,$min,$max,$this->img->plotheight/$this->ytick_factor); + } + elseif( $this->ynscale[$i]->IsSpecified() && ( $this->ynscale[$i]->auto_ticks || !$this->ynscale[$i]->ticks->IsSpecified()) ) { + // The tick calculation will use the user suplied min/max values to determine + // the ticks. If auto_ticks is false the exact user specifed min and max + // values will be used for the scale. + // If auto_ticks is true then the scale might be slightly adjusted + // so that the min and max values falls on an even major step. + $min = $this->ynscale[$i]->scale[0]; + $max = $this->ynscale[$i]->scale[1]; + $this->ynscale[$i]->AutoScale($this->img,$min,$max, + $this->img->plotheight/$this->ytick_factor, + $this->ynscale[$i]->auto_ticks); + + // Now make sure we show enough precision to accurate display the + // labels. If this is not done then the user might end up with + // a scale that might actually start with, say 13.5, butdue to rounding + // the scale label will ony show 14. + if( abs(floor($min)-$min) > 0 ) { + // If the user has set a format then we bail out + if( $this->ynscale[$i]->ticks->label_formatstr == '' && $this->ynscale[$i]->ticks->label_dateformatstr == '' ) { + $this->ynscale[$i]->ticks->precision = abs( floor(log10( abs(floor($min)-$min))) )+1; + } + } + } + } + } + } + + function doAutoScaleYAxis() { + + //Check if we should autoscale y-axis + if( !$this->yscale->IsSpecified() && count($this->plots)>0 ) { + list($min,$max) = $this->GetPlotsYMinMax($this->plots); + $lres = $this->GetLinesYMinMax($this->lines); + if( is_array($lres) ) { + list($linmin,$linmax) = $lres ; + $min = min($min,$linmin); + $max = max($max,$linmax); + } + $tres = $this->GetTextsYMinMax(); + if( is_array($tres) ) { + list($tmin,$tmax) = $tres ; + $min = min($min,$tmin); + $max = max($max,$tmax); + } + $this->yscale->AutoScale($this->img,$min,$max, + $this->img->plotheight/$this->ytick_factor); + } + elseif( $this->yscale->IsSpecified() && ( $this->yscale->auto_ticks || !$this->yscale->ticks->IsSpecified()) ) { + // The tick calculation will use the user suplied min/max values to determine + // the ticks. If auto_ticks is false the exact user specifed min and max + // values will be used for the scale. + // If auto_ticks is true then the scale might be slightly adjusted + // so that the min and max values falls on an even major step. + $min = $this->yscale->scale[0]; + $max = $this->yscale->scale[1]; + $this->yscale->AutoScale($this->img,$min,$max, + $this->img->plotheight/$this->ytick_factor, + $this->yscale->auto_ticks); + + // Now make sure we show enough precision to accurate display the + // labels. If this is not done then the user might end up with + // a scale that might actually start with, say 13.5, butdue to rounding + // the scale label will ony show 14. + if( abs(floor($min)-$min) > 0 ) { + + // If the user has set a format then we bail out + if( $this->yscale->ticks->label_formatstr == '' && $this->yscale->ticks->label_dateformatstr == '' ) { + $this->yscale->ticks->precision = abs( floor(log10( abs(floor($min)-$min))) )+1; + } + } + } + + } + + function InitScaleConstants() { + // Setup scale constants + if( $this->yscale ) $this->yscale->InitConstants($this->img); + if( $this->xscale ) $this->xscale->InitConstants($this->img); + if( $this->y2scale ) $this->y2scale->InitConstants($this->img); + + $n=count($this->ynscale); + for($i=0; $i < $n; ++$i) { + if( $this->ynscale[$i] ) { + $this->ynscale[$i]->InitConstants($this->img); + } + } + } + + function doPrestrokeAdjustments() { + + // Do any pre-stroke adjustment that is needed by the different plot types + // (i.e bar plots want's to add an offset to the x-labels etc) + for($i=0; $i < count($this->plots) ; ++$i ) { + $this->plots[$i]->PreStrokeAdjust($this); + $this->plots[$i]->DoLegend($this); + } + + // Any plots on the second Y scale? + if( $this->y2scale != null ) { + for($i=0; $iy2plots) ; ++$i ) { + $this->y2plots[$i]->PreStrokeAdjust($this); + $this->y2plots[$i]->DoLegend($this); + } + } + + // Any plots on the extra Y axises? + $n = count($this->ynaxis); + for($i=0; $i<$n ; ++$i ) { + if( $this->ynplots == null || $this->ynplots[$i] == null) { + JpGraphError::RaiseL(25032,$i);//("No plots for Y-axis nbr:$i"); + } + $m = count($this->ynplots[$i]); + for($j=0; $j < $m; ++$j ) { + $this->ynplots[$i][$j]->PreStrokeAdjust($this); + $this->ynplots[$i][$j]->DoLegend($this); + } + } + } + + function StrokeBands($aDepth,$aCSIM) { + // Stroke bands + if( $this->bands != null && !$aCSIM) { + for($i=0; $i < count($this->bands); ++$i) { + // Stroke all bands that asks to be in the background + if( $this->bands[$i]->depth == $aDepth ) { + $this->bands[$i]->Stroke($this->img,$this->xscale,$this->yscale); + } + } + } + + if( $this->y2bands != null && $this->y2scale != null && !$aCSIM ) { + for($i=0; $i < count($this->y2bands); ++$i) { + // Stroke all bands that asks to be in the foreground + if( $this->y2bands[$i]->depth == $aDepth ) { + $this->y2bands[$i]->Stroke($this->img,$this->xscale,$this->y2scale); + } + } + } + } + + + // Stroke the graph + // $aStrokeFileName If != "" the image will be written to this file and NOT + // streamed back to the browser + function Stroke($aStrokeFileName='') { + // Fist make a sanity check that user has specified a scale + if( empty($this->yscale) ) { + JpGraphError::RaiseL(25031);//('You must specify what scale to use with a call to Graph::SetScale().'); + } + + // Start by adjusting the margin so that potential titles will fit. + $this->AdjustMarginsForTitles(); + + // Give the plot a chance to do any scale adjuments the individual plots + // wants to do. Right now this is only used by the contour plot to set scale + // limits + for($i=0; $i < count($this->plots) ; ++$i ) { + $this->plots[$i]->PreScaleSetup($this); + } + + // Init scale constants that are used to calculate the transformation from + // world to pixel coordinates + $this->InitScaleConstants(); + + // If the filename is the predefined value = '_csim_special_' + // we assume that the call to stroke only needs to do enough + // to correctly generate the CSIM maps. + // We use this variable to skip things we don't strictly need + // to do to generate the image map to improve performance + // a best we can. Therefor you will see a lot of tests !$_csim in the + // code below. + $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); + + // If we are called the second time (perhaps the user has called GetHTMLImageMap() + // himself then the legends have alsready been populated once in order to get the + // CSIM coordinats. Since we do not want the legends to be populated a second time + // we clear the legends + $this->legend->Clear(); + + // We need to know if we have stroked the plot in the + // GetCSIMareas. Otherwise the CSIM hasn't been generated + // and in the case of GetCSIM called before stroke to generate + // CSIM without storing an image to disk GetCSIM must call Stroke. + $this->iHasStroked = true; + + // Setup pre-stroked adjustments and Legends + $this->doPrestrokeAdjustments(); + + if ($this->graph_theme) { + $this->graph_theme->PreStrokeApply($this); + } + + // Bail out if any of the Y-axis not been specified and + // has no plots. (This means it is impossible to do autoscaling and + // no other scale was given so we can't possible draw anything). If you use manual + // scaling you also have to supply the tick steps as well. + if( (!$this->yscale->IsSpecified() && count($this->plots)==0) || + ($this->y2scale!=null && !$this->y2scale->IsSpecified() && count($this->y2plots)==0) ) { + //$e = "n=".count($this->y2plots)."\n"; + // $e = "Can't draw unspecified Y-scale.
    \nYou have either:
    \n"; + // $e .= "1. Specified an Y axis for autoscaling but have not supplied any plots
    \n"; + // $e .= "2. Specified a scale manually but have forgot to specify the tick steps"; + JpGraphError::RaiseL(25026); + } + + // Bail out if no plots and no specified X-scale + if( (!$this->xscale->IsSpecified() && count($this->plots)==0 && count($this->y2plots)==0) ) { + JpGraphError::RaiseL(25034);//("JpGraph: Can't draw unspecified X-scale.
    No plots.
    "); + } + + // Autoscale the normal Y-axis + $this->doAutoScaleYAxis(); + + // Autoscale all additiopnal y-axis + $this->doAutoScaleYnAxis(); + + // Autoscale the regular x-axis and position the y-axis properly + $this->doAutoScaleXAxis(); + + // If we have a negative values and x-axis position is at 0 + // we need to supress the first and possible the last tick since + // they will be drawn on top of the y-axis (and possible y2 axis) + // The test below might seem strange the reasone being that if + // the user hasn't specified a value for position this will not + // be set until we do the stroke for the axis so as of now it + // is undefined. + // For X-text scale we ignore all this since the tick are usually + // much further in and not close to the Y-axis. Hence the test + // for 'text' + if( ($this->yaxis->pos==$this->xscale->GetMinVal() || (is_string($this->yaxis->pos) && $this->yaxis->pos=='min')) && + !is_numeric($this->xaxis->pos) && $this->yscale->GetMinVal() < 0 && + substr($this->axtype,0,4) != 'text' && $this->xaxis->pos != 'min' ) { + + //$this->yscale->ticks->SupressZeroLabel(false); + $this->xscale->ticks->SupressFirst(); + if( $this->y2axis != null ) { + $this->xscale->ticks->SupressLast(); + } + } + elseif( !is_numeric($this->yaxis->pos) && $this->yaxis->pos=='max' ) { + $this->xscale->ticks->SupressLast(); + } + + if( !$_csim ) { + $this->StrokePlotArea(); + if( $this->iIconDepth == DEPTH_BACK ) { + $this->StrokeIcons(); + } + } + $this->StrokeAxis(false); + + // Stroke colored bands + $this->StrokeBands(DEPTH_BACK,$_csim); + + if( $this->grid_depth == DEPTH_BACK && !$_csim) { + $this->ygrid->Stroke(); + $this->xgrid->Stroke(); + } + + // Stroke Y2-axis + if( $this->y2axis != null && !$_csim) { + $this->y2axis->Stroke($this->xscale); + $this->y2grid->Stroke(); + } + + // Stroke yn-axis + $n = count($this->ynaxis); + for( $i=0; $i < $n; ++$i ) { + $this->ynaxis[$i]->Stroke($this->xscale); + } + + $oldoff=$this->xscale->off; + if( substr($this->axtype,0,4) == 'text' ) { + if( $this->text_scale_abscenteroff > -1 ) { + // For a text scale the scale factor is the number of pixel per step. + // Hence we can use the scale factor as a substitute for number of pixels + // per major scale step and use that in order to adjust the offset so that + // an object of width "abscenteroff" becomes centered. + $this->xscale->off += round($this->xscale->scale_factor/2)-round($this->text_scale_abscenteroff/2); + } + else { + $this->xscale->off += ceil($this->xscale->scale_factor*$this->text_scale_off*$this->xscale->ticks->minor_step); + } + } + + if( $this->iDoClipping ) { + $oldimage = $this->img->CloneCanvasH(); + } + + if( ! $this->y2orderback ) { + // Stroke all plots for Y1 axis + for($i=0; $i < count($this->plots); ++$i) { + $this->plots[$i]->Stroke($this->img,$this->xscale,$this->yscale); + $this->plots[$i]->StrokeMargin($this->img); + } + } + + // Stroke all plots for Y2 axis + if( $this->y2scale != null ) { + for($i=0; $i< count($this->y2plots); ++$i ) { + $this->y2plots[$i]->Stroke($this->img,$this->xscale,$this->y2scale); + } + } + + if( $this->y2orderback ) { + // Stroke all plots for Y1 axis + for($i=0; $i < count($this->plots); ++$i) { + $this->plots[$i]->Stroke($this->img,$this->xscale,$this->yscale); + $this->plots[$i]->StrokeMargin($this->img); + } + } + + $n = count($this->ynaxis); + for( $i=0; $i < $n; ++$i ) { + $m = count($this->ynplots[$i]); + for( $j=0; $j < $m; ++$j ) { + $this->ynplots[$i][$j]->Stroke($this->img,$this->xscale,$this->ynscale[$i]); + $this->ynplots[$i][$j]->StrokeMargin($this->img); + } + } + + if( $this->iIconDepth == DEPTH_FRONT) { + $this->StrokeIcons(); + } + + if( $this->iDoClipping ) { + // Clipping only supports graphs at 0 and 90 degrees + if( $this->img->a == 0 ) { + $this->img->CopyCanvasH($oldimage,$this->img->img, + $this->img->left_margin,$this->img->top_margin, + $this->img->left_margin,$this->img->top_margin, + $this->img->plotwidth+1,$this->img->plotheight); + } + elseif( $this->img->a == 90 ) { + $adj = ($this->img->height - $this->img->width)/2; + $this->img->CopyCanvasH($oldimage,$this->img->img, + $this->img->bottom_margin-$adj,$this->img->left_margin+$adj, + $this->img->bottom_margin-$adj,$this->img->left_margin+$adj, + $this->img->plotheight+1,$this->img->plotwidth); + } + else { + JpGraphError::RaiseL(25035,$this->img->a);//('You have enabled clipping. Cliping is only supported for graphs at 0 or 90 degrees rotation. Please adjust you current angle (='.$this->img->a.' degrees) or disable clipping.'); + } + $this->img->Destroy(); + $this->img->SetCanvasH($oldimage); + } + + $this->xscale->off=$oldoff; + + if( $this->grid_depth == DEPTH_FRONT && !$_csim ) { + $this->ygrid->Stroke(); + $this->xgrid->Stroke(); + } + + // Stroke colored bands + $this->StrokeBands(DEPTH_FRONT,$_csim); + + // Finally draw the axis again since some plots may have nagged + // the axis in the edges. + if( !$_csim ) { + $this->StrokeAxis(); + } + + if( $this->y2scale != null && !$_csim ) { + $this->y2axis->Stroke($this->xscale,false); + } + + if( !$_csim ) { + $this->StrokePlotBox(); + } + + // The titles and legends never gets rotated so make sure + // that the angle is 0 before stroking them + $aa = $this->img->SetAngle(0); + $this->StrokeTitles(); + $this->footer->Stroke($this->img); + $this->legend->Stroke($this->img); + $this->img->SetAngle($aa); + $this->StrokeTexts(); + $this->StrokeTables(); + + if( !$_csim ) { + + $this->img->SetAngle($aa); + + // Draw an outline around the image map + if(_JPG_DEBUG) { + $this->DisplayClientSideaImageMapAreas(); + } + + // Should we do any final image transformation + if( $this->iImgTrans ) { + if( !class_exists('ImgTrans',false) ) { + require_once('jpgraph_imgtrans.php'); + //JpGraphError::Raise('In order to use image transformation you must include the file jpgraph_imgtrans.php in your script.'); + } + + $tform = new ImgTrans($this->img->img); + $this->img->img = $tform->Skew3D($this->iImgTransHorizon,$this->iImgTransSkewDist, + $this->iImgTransDirection,$this->iImgTransHighQ, + $this->iImgTransMinSize,$this->iImgTransFillColor, + $this->iImgTransBorder); + } + + // If the filename is given as the special "__handle" + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline,$aStrokeFileName); + } + } + } + + function SetAxisLabelBackground($aType,$aXFColor='lightgray',$aXColor='black',$aYFColor='lightgray',$aYColor='black') { + $this->iAxisLblBgType = $aType; + $this->iXAxisLblBgFillColor = $aXFColor; + $this->iXAxisLblBgColor = $aXColor; + $this->iYAxisLblBgFillColor = $aYFColor; + $this->iYAxisLblBgColor = $aYColor; + } + + function StrokeAxisLabelBackground() { + // Types + // 0 = No background + // 1 = Only X-labels, length of axis + // 2 = Only Y-labels, length of axis + // 3 = As 1 but extends to width of graph + // 4 = As 2 but extends to height of graph + // 5 = Combination of 3 & 4 + // 6 = Combination of 1 & 2 + + $t = $this->iAxisLblBgType ; + if( $t < 1 ) return; + + // Stroke optional X-axis label background color + if( $t == 1 || $t == 3 || $t == 5 || $t == 6 ) { + $this->img->PushColor($this->iXAxisLblBgFillColor); + if( $t == 1 || $t == 6 ) { + $xl = $this->img->left_margin; + $yu = $this->img->height - $this->img->bottom_margin + 1; + $xr = $this->img->width - $this->img->right_margin ; + $yl = $this->img->height-1-$this->frame_weight; + } + else { // t==3 || t==5 + $xl = $this->frame_weight; + $yu = $this->img->height - $this->img->bottom_margin + 1; + $xr = $this->img->width - 1 - $this->frame_weight; + $yl = $this->img->height-1-$this->frame_weight; + } + + $this->img->FilledRectangle($xl,$yu,$xr,$yl); + $this->img->PopColor(); + + // Check if we should add the vertical lines at left and right edge + if( $this->iXAxisLblBgColor !== '' ) { + // Hardcode to one pixel wide + $this->img->SetLineWeight(1); + $this->img->PushColor($this->iXAxisLblBgColor); + if( $t == 1 || $t == 6 ) { + $this->img->Line($xl,$yu,$xl,$yl); + $this->img->Line($xr,$yu,$xr,$yl); + } + else { + $xl = $this->img->width - $this->img->right_margin ; + $this->img->Line($xl,$yu-1,$xr,$yu-1); + } + $this->img->PopColor(); + } + } + + if( $t == 2 || $t == 4 || $t == 5 || $t == 6 ) { + $this->img->PushColor($this->iYAxisLblBgFillColor); + if( $t == 2 || $t == 6 ) { + $xl = $this->frame_weight; + $yu = $this->frame_weight+$this->img->top_margin; + $xr = $this->img->left_margin - 1; + $yl = $this->img->height - $this->img->bottom_margin + 1; + } + else { + $xl = $this->frame_weight; + $yu = $this->frame_weight; + $xr = $this->img->left_margin - 1; + $yl = $this->img->height-1-$this->frame_weight; + } + + $this->img->FilledRectangle($xl,$yu,$xr,$yl); + $this->img->PopColor(); + + // Check if we should add the vertical lines at left and right edge + if( $this->iXAxisLblBgColor !== '' ) { + $this->img->PushColor($this->iXAxisLblBgColor); + if( $t == 2 || $t == 6 ) { + $this->img->Line($xl,$yu-1,$xr,$yu-1); + $this->img->Line($xl,$yl-1,$xr,$yl-1); + } + else { + $this->img->Line($xr+1,$yu,$xr+1,$this->img->top_margin); + } + $this->img->PopColor(); + } + + } + } + + function StrokeAxis($aStrokeLabels=true) { + + if( $aStrokeLabels ) { + $this->StrokeAxisLabelBackground(); + } + + // Stroke axis + if( $this->iAxisStyle != AXSTYLE_SIMPLE ) { + switch( $this->iAxisStyle ) { + case AXSTYLE_BOXIN : + $toppos = SIDE_DOWN; + $bottompos = SIDE_UP; + $leftpos = SIDE_RIGHT; + $rightpos = SIDE_LEFT; + break; + case AXSTYLE_BOXOUT : + $toppos = SIDE_UP; + $bottompos = SIDE_DOWN; + $leftpos = SIDE_LEFT; + $rightpos = SIDE_RIGHT; + break; + case AXSTYLE_YBOXIN: + $toppos = FALSE; + $bottompos = SIDE_UP; + $leftpos = SIDE_RIGHT; + $rightpos = SIDE_LEFT; + break; + case AXSTYLE_YBOXOUT: + $toppos = FALSE; + $bottompos = SIDE_DOWN; + $leftpos = SIDE_LEFT; + $rightpos = SIDE_RIGHT; + break; + default: + JpGRaphError::RaiseL(25036,$this->iAxisStyle); //('Unknown AxisStyle() : '.$this->iAxisStyle); + break; + } + + // By default we hide the first label so it doesn't cross the + // Y-axis in case the positon hasn't been set by the user. + // However, if we use a box we always want the first value + // displayed so we make sure it will be displayed. + $this->xscale->ticks->SupressFirst(false); + + // Now draw the bottom X-axis + $this->xaxis->SetPos('min'); + $this->xaxis->SetLabelSide(SIDE_DOWN); + $this->xaxis->scale->ticks->SetSide($bottompos); + $this->xaxis->Stroke($this->yscale,$aStrokeLabels); + + if( $toppos !== FALSE ) { + // We also want a top X-axis + $this->xaxis = $this->xaxis; + $this->xaxis->SetPos('max'); + $this->xaxis->SetLabelSide(SIDE_UP); + // No title for the top X-axis + if( $aStrokeLabels ) { + $this->xaxis->title->Set(''); + } + $this->xaxis->scale->ticks->SetSide($toppos); + $this->xaxis->Stroke($this->yscale,$aStrokeLabels); + } + + // Stroke the left Y-axis + $this->yaxis->SetPos('min'); + $this->yaxis->SetLabelSide(SIDE_LEFT); + $this->yaxis->scale->ticks->SetSide($leftpos); + $this->yaxis->Stroke($this->xscale,$aStrokeLabels); + + // Stroke the right Y-axis + $this->yaxis->SetPos('max'); + // No title for the right side + if( $aStrokeLabels ) { + $this->yaxis->title->Set(''); + } + $this->yaxis->SetLabelSide(SIDE_RIGHT); + $this->yaxis->scale->ticks->SetSide($rightpos); + $this->yaxis->Stroke($this->xscale,$aStrokeLabels); + } + else { + $this->xaxis->Stroke($this->yscale,$aStrokeLabels); + $this->yaxis->Stroke($this->xscale,$aStrokeLabels); + } + } + + + // Private helper function for backgound image + static function LoadBkgImage($aImgFormat='',$aFile='',$aImgStr='') { + if( $aImgStr != '' ) { + return Image::CreateFromString($aImgStr); + } + + // Remove case sensitivity and setup appropriate function to create image + // Get file extension. This should be the LAST '.' separated part of the filename + $e = explode('.',$aFile); + $ext = strtolower($e[count($e)-1]); + if ($ext == "jpeg") { + $ext = "jpg"; + } + + if( trim($ext) == '' ) { + $ext = 'png'; // Assume PNG if no extension specified + } + + if( $aImgFormat == '' ) { + $imgtag = $ext; + } + else { + $imgtag = $aImgFormat; + } + + $supported = imagetypes(); + if( ( $ext == 'jpg' && !($supported & IMG_JPG) ) || + ( $ext == 'gif' && !($supported & IMG_GIF) ) || + ( $ext == 'png' && !($supported & IMG_PNG) ) || + ( $ext == 'bmp' && !($supported & IMG_WBMP) ) || + ( $ext == 'xpm' && !($supported & IMG_XPM) ) ) { + + JpGraphError::RaiseL(25037,$aFile);//('The image format of your background image ('.$aFile.') is not supported in your system configuration. '); + } + + + if( $imgtag == "jpg" || $imgtag == "jpeg") { + $f = "imagecreatefromjpeg"; + $imgtag = "jpg"; + } + else { + $f = "imagecreatefrom".$imgtag; + } + + // Compare specified image type and file extension + if( $imgtag != $ext ) { + //$t = "Background image seems to be of different type (has different file extension) than specified imagetype. Specified: '".$aImgFormat."'File: '".$aFile."'"; + JpGraphError::RaiseL(25038, $aImgFormat, $aFile); + } + + $img = @$f($aFile); + if( !$img ) { + JpGraphError::RaiseL(25039,$aFile);//(" Can't read background image: '".$aFile."'"); + } + return $img; + } + + function StrokePlotGrad() { + if( $this->plot_gradtype < 0 ) + return; + + $grad = new Gradient($this->img); + $xl = $this->img->left_margin; + $yt = $this->img->top_margin; + $xr = $xl + $this->img->plotwidth+1 ; + $yb = $yt + $this->img->plotheight ; + $grad->FilledRectangle($xl,$yt,$xr,$yb,$this->plot_gradfrom,$this->plot_gradto,$this->plot_gradtype); + + } + + function StrokeBackgroundGrad() { + if( $this->bkg_gradtype < 0 ) + return; + + $grad = new Gradient($this->img); + if( $this->bkg_gradstyle == BGRAD_PLOT ) { + $xl = $this->img->left_margin; + $yt = $this->img->top_margin; + $xr = $xl + $this->img->plotwidth+1 ; + $yb = $yt + $this->img->plotheight ; + $grad->FilledRectangle($xl,$yt,$xr,$yb,$this->bkg_gradfrom,$this->bkg_gradto,$this->bkg_gradtype); + } + else { + $xl = 0; + $yt = 0; + $xr = $xl + $this->img->width - 1; + $yb = $yt + $this->img->height - 1 ; + if( $this->doshadow ) { + $xr -= $this->shadow_width; + $yb -= $this->shadow_width; + } + if( $this->doframe ) { + $yt += $this->frame_weight; + $yb -= $this->frame_weight; + $xl += $this->frame_weight; + $xr -= $this->frame_weight; + } + $aa = $this->img->SetAngle(0); + $grad->FilledRectangle($xl,$yt,$xr,$yb,$this->bkg_gradfrom,$this->bkg_gradto,$this->bkg_gradtype); + $aa = $this->img->SetAngle($aa); + } + } + + function StrokeFrameBackground() { + if( $this->background_image != '' && $this->background_cflag != '' ) { + JpGraphError::RaiseL(25040);//('It is not possible to specify both a background image and a background country flag.'); + } + if( $this->background_image != '' ) { + $bkgimg = $this->LoadBkgImage($this->background_image_format,$this->background_image); + } + elseif( $this->background_cflag != '' ) { + if( ! class_exists('FlagImages',false) ) { + JpGraphError::RaiseL(25041);//('In order to use Country flags as backgrounds you must include the "jpgraph_flags.php" file.'); + } + $fobj = new FlagImages(FLAGSIZE4); + $dummy=''; + $bkgimg = $fobj->GetImgByName($this->background_cflag,$dummy); + $this->background_image_mix = $this->background_cflag_mix; + $this->background_image_type = $this->background_cflag_type; + } + else { + return ; + } + + $bw = ImageSX($bkgimg); + $bh = ImageSY($bkgimg); + + // No matter what the angle is we always stroke the image and frame + // assuming it is 0 degree + $aa = $this->img->SetAngle(0); + + switch( $this->background_image_type ) { + case BGIMG_FILLPLOT: // Resize to just fill the plotarea + $this->FillMarginArea(); + $this->StrokeFrame(); + // Special case to hande 90 degree rotated graph corectly + if( $aa == 90 ) { + $this->img->SetAngle(90); + $this->FillPlotArea(); + $aa = $this->img->SetAngle(0); + $adj = ($this->img->height - $this->img->width)/2; + $this->img->CopyMerge($bkgimg, + $this->img->bottom_margin-$adj,$this->img->left_margin+$adj, + 0,0, + $this->img->plotheight+1,$this->img->plotwidth, + $bw,$bh,$this->background_image_mix); + } + else { + $this->FillPlotArea(); + $this->img->CopyMerge($bkgimg, + $this->img->left_margin,$this->img->top_margin+1, + 0,0,$this->img->plotwidth+1,$this->img->plotheight, + $bw,$bh,$this->background_image_mix); + } + break; + case BGIMG_FILLFRAME: // Fill the whole area from upper left corner, resize to just fit + $hadj=0; $vadj=0; + if( $this->doshadow ) { + $hadj = $this->shadow_width; + $vadj = $this->shadow_width; + } + $this->FillMarginArea(); + $this->FillPlotArea(); + $this->img->CopyMerge($bkgimg,0,0,0,0,$this->img->width-$hadj,$this->img->height-$vadj, + $bw,$bh,$this->background_image_mix); + $this->StrokeFrame(); + break; + case BGIMG_COPY: // Just copy the image from left corner, no resizing + $this->FillMarginArea(); + $this->FillPlotArea(); + $this->img->CopyMerge($bkgimg,0,0,0,0,$bw,$bh, + $bw,$bh,$this->background_image_mix); + $this->StrokeFrame(); + break; + case BGIMG_CENTER: // Center original image in the plot area + $this->FillMarginArea(); + $this->FillPlotArea(); + $centerx = round($this->img->plotwidth/2+$this->img->left_margin-$bw/2); + $centery = round($this->img->plotheight/2+$this->img->top_margin-$bh/2); + $this->img->CopyMerge($bkgimg,$centerx,$centery,0,0,$bw,$bh, + $bw,$bh,$this->background_image_mix); + $this->StrokeFrame(); + break; + case BGIMG_FREE: // Just copy the image to the specified location + $this->img->CopyMerge($bkgimg, + $this->background_image_xpos,$this->background_image_ypos, + 0,0,$bw,$bh,$bw,$bh,$this->background_image_mix); + $this->StrokeFrame(); // New + break; + default: + JpGraphError::RaiseL(25042);//(" Unknown background image layout"); + } + $this->img->SetAngle($aa); + } + + // Private + // Draw a frame around the image + function StrokeFrame() { + if( !$this->doframe ) return; + + if( $this->background_image_type <= 1 && ($this->bkg_gradtype < 0 || ($this->bkg_gradtype > 0 && $this->bkg_gradstyle==BGRAD_PLOT)) ) { + $c = $this->margin_color; + } + else { + $c = false; + } + + if( $this->doshadow ) { + $this->img->SetColor($this->frame_color); + $this->img->ShadowRectangle(0,0,$this->img->width,$this->img->height, + $c,$this->shadow_width,$this->shadow_color); + } + elseif( $this->framebevel ) { + if( $c ) { + $this->img->SetColor($this->margin_color); + $this->img->FilledRectangle(0,0,$this->img->width-1,$this->img->height-1); + } + $this->img->Bevel(1,1,$this->img->width-2,$this->img->height-2, + $this->framebeveldepth, + $this->framebevelcolor1,$this->framebevelcolor2); + if( $this->framebevelborder ) { + $this->img->SetColor($this->framebevelbordercolor); + $this->img->Rectangle(0,0,$this->img->width-1,$this->img->height-1); + } + } + else { + $this->img->SetLineWeight($this->frame_weight); + if( $c ) { + $this->img->SetColor($this->margin_color); + $this->img->FilledRectangle(0,0,$this->img->width-1,$this->img->height-1); + } + $this->img->SetColor($this->frame_color); + $this->img->Rectangle(0,0,$this->img->width-1,$this->img->height-1); + } + } + + function FillMarginArea() { + $hadj=0; $vadj=0; + if( $this->doshadow ) { + $hadj = $this->shadow_width; + $vadj = $this->shadow_width; + } + + $this->img->SetColor($this->margin_color); + $this->img->FilledRectangle(0,0,$this->img->width-1-$hadj,$this->img->height-1-$vadj); + + $this->img->FilledRectangle(0,0,$this->img->width-1-$hadj,$this->img->top_margin); + $this->img->FilledRectangle(0,$this->img->top_margin,$this->img->left_margin,$this->img->height-1-$hadj); + $this->img->FilledRectangle($this->img->left_margin+1, + $this->img->height-$this->img->bottom_margin, + $this->img->width-1-$hadj, + $this->img->height-1-$hadj); + $this->img->FilledRectangle($this->img->width-$this->img->right_margin, + $this->img->top_margin+1, + $this->img->width-1-$hadj, + $this->img->height-$this->img->bottom_margin-1); + } + + function FillPlotArea() { + $this->img->PushColor($this->plotarea_color); + $this->img->FilledRectangle($this->img->left_margin, + $this->img->top_margin, + $this->img->width-$this->img->right_margin, + $this->img->height-$this->img->bottom_margin); + $this->img->PopColor(); + } + + // Stroke the plot area with either a solid color or a background image + function StrokePlotArea() { + // Note: To be consistent we really should take a possible shadow + // into account. However, that causes some problem for the LinearScale class + // since in the current design it does not have any links to class Graph which + // means it has no way of compensating for the adjusted plotarea in case of a + // shadow. So, until I redesign LinearScale we can't compensate for this. + // So just set the two adjustment parameters to zero for now. + $boxadj = 0; //$this->doframe ? $this->frame_weight : 0 ; + $adj = 0; //$this->doshadow ? $this->shadow_width : 0 ; + + if( $this->background_image != '' || $this->background_cflag != '' ) { + $this->StrokeFrameBackground(); + } + else { + $aa = $this->img->SetAngle(0); + $this->StrokeFrame(); + $aa = $this->img->SetAngle($aa); + $this->StrokeBackgroundGrad(); + if( $this->bkg_gradtype < 0 || ($this->bkg_gradtype > 0 && $this->bkg_gradstyle==BGRAD_MARGIN) ) { + $this->FillPlotArea(); + } + $this->StrokePlotGrad(); + } + } + + function StrokeIcons() { + $n = count($this->iIcons); + for( $i=0; $i < $n; ++$i ) { + $this->iIcons[$i]->StrokeWithScale($this->img,$this->xscale,$this->yscale); + } + } + + function StrokePlotBox() { + // Should we draw a box around the plot area? + if( $this->boxed ) { + $this->img->SetLineWeight(1); + $this->img->SetLineStyle('solid'); + $this->img->SetColor($this->box_color); + for($i=0; $i < $this->box_weight; ++$i ) { + $this->img->Rectangle( + $this->img->left_margin-$i,$this->img->top_margin-$i, + $this->img->width-$this->img->right_margin+$i, + $this->img->height-$this->img->bottom_margin+$i); + } + } + } + + function SetTitleBackgroundFillStyle($aStyle,$aColor1='black',$aColor2='white') { + $this->titlebkg_fillstyle = $aStyle; + $this->titlebkg_scolor1 = $aColor1; + $this->titlebkg_scolor2 = $aColor2; + } + + function SetTitleBackground($aBackColor='gray', $aStyle=TITLEBKG_STYLE1, $aFrameStyle=TITLEBKG_FRAME_NONE, $aFrameColor='black', $aFrameWeight=1, $aBevelHeight=3, $aEnable=true) { + $this->titlebackground = $aEnable; + $this->titlebackground_color = $aBackColor; + $this->titlebackground_style = $aStyle; + $this->titlebackground_framecolor = $aFrameColor; + $this->titlebackground_framestyle = $aFrameStyle; + $this->titlebackground_frameweight = $aFrameWeight; + $this->titlebackground_bevelheight = $aBevelHeight ; + } + + + function StrokeTitles() { + + $margin=3; + + if( $this->titlebackground ) { + // Find out height + $this->title->margin += 2 ; + $h = $this->title->GetTextHeight($this->img)+$this->title->margin+$margin; + if( $this->subtitle->t != '' && !$this->subtitle->hide ) { + $h += $this->subtitle->GetTextHeight($this->img)+$margin+ + $this->subtitle->margin; + $h += 2; + } + if( $this->subsubtitle->t != '' && !$this->subsubtitle->hide ) { + $h += $this->subsubtitle->GetTextHeight($this->img)+$margin+ + $this->subsubtitle->margin; + $h += 2; + } + $this->img->PushColor($this->titlebackground_color); + if( $this->titlebackground_style === TITLEBKG_STYLE1 ) { + // Inside the frame + if( $this->framebevel ) { + $x1 = $y1 = $this->framebeveldepth + 1 ; + $x2 = $this->img->width - $this->framebeveldepth - 2 ; + $this->title->margin += $this->framebeveldepth + 1 ; + $h += $y1 ; + $h += 2; + } + else { + $x1 = $y1 = $this->frame_weight; + $x2 = $this->img->width - $this->frame_weight-1; + } + } + elseif( $this->titlebackground_style === TITLEBKG_STYLE2 ) { + // Cover the frame as well + $x1 = $y1 = 0; + $x2 = $this->img->width - 1 ; + } + elseif( $this->titlebackground_style === TITLEBKG_STYLE3 ) { + // Cover the frame as well (the difference is that + // for style==3 a bevel frame border is on top + // of the title background) + $x1 = $y1 = 0; + $x2 = $this->img->width - 1 ; + $h += $this->framebeveldepth ; + $this->title->margin += $this->framebeveldepth ; + } + else { + JpGraphError::RaiseL(25043);//('Unknown title background style.'); + } + + if( $this->titlebackground_framestyle === 3 ) { + $h += $this->titlebackground_bevelheight*2 + 1 ; + $this->title->margin += $this->titlebackground_bevelheight ; + } + + if( $this->doshadow ) { + $x2 -= $this->shadow_width ; + } + + $indent=0; + if( $this->titlebackground_framestyle == TITLEBKG_FRAME_BEVEL ) { + $indent = $this->titlebackground_bevelheight; + } + + if( $this->titlebkg_fillstyle==TITLEBKG_FILLSTYLE_HSTRIPED ) { + $this->img->FilledRectangle2($x1+$indent,$y1+$indent,$x2-$indent,$h-$indent, + $this->titlebkg_scolor1, + $this->titlebkg_scolor2); + } + elseif( $this->titlebkg_fillstyle==TITLEBKG_FILLSTYLE_VSTRIPED ) { + $this->img->FilledRectangle2($x1+$indent,$y1+$indent,$x2-$indent,$h-$indent, + $this->titlebkg_scolor1, + $this->titlebkg_scolor2,2); + } + else { + // Solid fill + $this->img->FilledRectangle($x1,$y1,$x2,$h); + } + $this->img->PopColor(); + + $this->img->PushColor($this->titlebackground_framecolor); + $this->img->SetLineWeight($this->titlebackground_frameweight); + if( $this->titlebackground_framestyle == TITLEBKG_FRAME_FULL ) { + // Frame background + $this->img->Rectangle($x1,$y1,$x2,$h); + } + elseif( $this->titlebackground_framestyle == TITLEBKG_FRAME_BOTTOM ) { + // Bottom line only + $this->img->Line($x1,$h,$x2,$h); + } + elseif( $this->titlebackground_framestyle == TITLEBKG_FRAME_BEVEL ) { + $this->img->Bevel($x1,$y1,$x2,$h,$this->titlebackground_bevelheight); + } + $this->img->PopColor(); + + // This is clumsy. But we neeed to stroke the whole graph frame if it is + // set to bevel to get the bevel shading on top of the text background + if( $this->framebevel && $this->doframe && $this->titlebackground_style === 3 ) { + $this->img->Bevel(1,1,$this->img->width-2,$this->img->height-2, + $this->framebeveldepth, + $this->framebevelcolor1,$this->framebevelcolor2); + if( $this->framebevelborder ) { + $this->img->SetColor($this->framebevelbordercolor); + $this->img->Rectangle(0,0,$this->img->width-1,$this->img->height-1); + } + } + } + + // Stroke title + $y = $this->title->margin; + if( $this->title->halign == 'center' ) { + $this->title->Center(0,$this->img->width,$y); + } + elseif( $this->title->halign == 'left' ) { + $this->title->SetPos($this->title->margin+2,$y); + } + elseif( $this->title->halign == 'right' ) { + $indent = 0; + if( $this->doshadow ) { + $indent = $this->shadow_width+2; + } + $this->title->SetPos($this->img->width-$this->title->margin-$indent,$y,'right'); + } + $this->title->Stroke($this->img); + + // ... and subtitle + $y += $this->title->GetTextHeight($this->img) + $margin + $this->subtitle->margin; + if( $this->subtitle->halign == 'center' ) { + $this->subtitle->Center(0,$this->img->width,$y); + } + elseif( $this->subtitle->halign == 'left' ) { + $this->subtitle->SetPos($this->subtitle->margin+2,$y); + } + elseif( $this->subtitle->halign == 'right' ) { + $indent = 0; + if( $this->doshadow ) + $indent = $this->shadow_width+2; + $this->subtitle->SetPos($this->img->width-$this->subtitle->margin-$indent,$y,'right'); + } + $this->subtitle->Stroke($this->img); + + // ... and subsubtitle + $y += $this->subtitle->GetTextHeight($this->img) + $margin + $this->subsubtitle->margin; + if( $this->subsubtitle->halign == 'center' ) { + $this->subsubtitle->Center(0,$this->img->width,$y); + } + elseif( $this->subsubtitle->halign == 'left' ) { + $this->subsubtitle->SetPos($this->subsubtitle->margin+2,$y); + } + elseif( $this->subsubtitle->halign == 'right' ) { + $indent = 0; + if( $this->doshadow ) + $indent = $this->shadow_width+2; + $this->subsubtitle->SetPos($this->img->width-$this->subsubtitle->margin-$indent,$y,'right'); + } + $this->subsubtitle->Stroke($this->img); + + // ... and fancy title + $this->tabtitle->Stroke($this->img); + + } + + function StrokeTexts() { + // Stroke any user added text objects + if( $this->texts != null ) { + for($i=0; $i < count($this->texts); ++$i) { + $this->texts[$i]->StrokeWithScale($this->img,$this->xscale,$this->yscale); + } + } + + if( $this->y2texts != null && $this->y2scale != null ) { + for($i=0; $i < count($this->y2texts); ++$i) { + $this->y2texts[$i]->StrokeWithScale($this->img,$this->xscale,$this->y2scale); + } + } + + } + + function StrokeTables() { + if( $this->iTables != null ) { + $n = count($this->iTables); + for( $i=0; $i < $n; ++$i ) { + $this->iTables[$i]->StrokeWithScale($this->img,$this->xscale,$this->yscale); + } + } + } + + function DisplayClientSideaImageMapAreas() { + // Debug stuff - display the outline of the image map areas + $csim=''; + foreach ($this->plots as $p) { + $csim.= $p->GetCSIMareas(); + } + $csim .= $this->legend->GetCSIMareas(); + if (preg_match_all("/area shape=\"(\w+)\" coords=\"([0-9\, ]+)\"/", $csim, $coords)) { + $this->img->SetColor($this->csimcolor); + $n = count($coords[0]); + for ($i=0; $i < $n; $i++) { + if ( $coords[1][$i] == 'poly' ) { + preg_match_all('/\s*([0-9]+)\s*,\s*([0-9]+)\s*,*/',$coords[2][$i],$pts); + $this->img->SetStartPoint($pts[1][count($pts[0])-1],$pts[2][count($pts[0])-1]); + $m = count($pts[0]); + for ($j=0; $j < $m; $j++) { + $this->img->LineTo($pts[1][$j],$pts[2][$j]); + } + } elseif ( $coords[1][$i] == 'rect' ) { + $pts = preg_split('/,/', $coords[2][$i]); + $this->img->SetStartPoint($pts[0],$pts[1]); + $this->img->LineTo($pts[2],$pts[1]); + $this->img->LineTo($pts[2],$pts[3]); + $this->img->LineTo($pts[0],$pts[3]); + $this->img->LineTo($pts[0],$pts[1]); + } + } + } + } + + // Text scale offset in world coordinates + function SetTextScaleOff($aOff) { + $this->text_scale_off = $aOff; + $this->xscale->text_scale_off = $aOff; + } + + // Text width of bar to be centered in absolute pixels + function SetTextScaleAbsCenterOff($aOff) { + $this->text_scale_abscenteroff = $aOff; + } + + // Get Y min and max values for added lines + function GetLinesYMinMax( $aLines ) { + $n = is_array($aLines) ? count($aLines) : 0; + if( $n == 0 ) return false; + $min = $aLines[0]->scaleposition ; + $max = $min ; + $flg = false; + for( $i=0; $i < $n; ++$i ) { + if( $aLines[$i]->direction == HORIZONTAL ) { + $flg = true ; + $v = $aLines[$i]->scaleposition ; + if( $min > $v ) $min = $v ; + if( $max < $v ) $max = $v ; + } + } + return $flg ? array($min,$max) : false ; + } + + // Get X min and max values for added lines + function GetLinesXMinMax( $aLines ) { + $n = is_array($aLines) ? count($aLines) : 0; + if( $n == 0 ) return false ; + $min = $aLines[0]->scaleposition ; + $max = $min ; + $flg = false; + for( $i=0; $i < $n; ++$i ) { + if( $aLines[$i]->direction == VERTICAL ) { + $flg = true ; + $v = $aLines[$i]->scaleposition ; + if( $min > $v ) $min = $v ; + if( $max < $v ) $max = $v ; + } + } + return $flg ? array($min,$max) : false ; + } + + // Get min and max values for all included plots + function GetPlotsYMinMax($aPlots) { + $n = count($aPlots); + $i=0; + do { + list($xmax,$max) = $aPlots[$i]->Max(); + } while( ++$i < $n && !is_numeric($max) ); + + $i=0; + do { + list($xmin,$min) = $aPlots[$i]->Min(); + } while( ++$i < $n && !is_numeric($min) ); + + if( !is_numeric($min) || !is_numeric($max) ) { + JpGraphError::RaiseL(25044);//('Cannot use autoscaling since it is impossible to determine a valid min/max value of the Y-axis (only null values).'); + } + + for($i=0; $i < $n; ++$i ) { + list($xmax,$ymax)=$aPlots[$i]->Max(); + list($xmin,$ymin)=$aPlots[$i]->Min(); + if (is_numeric($ymax)) $max=max($max,$ymax); + if (is_numeric($ymin)) $min=min($min,$ymin); + } + if( $min == '' ) $min = 0; + if( $max == '' ) $max = 0; + if( $min == 0 && $max == 0 ) { + // Special case if all values are 0 + $min=0;$max=1; + } + return array($min,$max); + } + + function hasLinePlotAndBarPlot() { + $has_line = false; + $has_bar = false; + + foreach ($this->plots as $plot) { + if ($plot instanceof LinePlot) { + $has_line = true; + } + if ($plot instanceof BarPlot) { + $has_bar = true; + } + } + + if ($has_line && $has_bar) { + return true; + } + + return false; + } + + function SetTheme($graph_theme) { + + if (!($this instanceof PieGraph)) { + if (!$this->isAfterSetScale) { + JpGraphError::RaiseL(25133);//('Use Graph::SetTheme() after Graph::SetScale().'); + } + } + + if ($this->graph_theme) { + $this->ClearTheme(); + } + $this->graph_theme = $graph_theme; + $this->graph_theme->ApplyGraph($this); + } + + function ClearTheme() { + $this->graph_theme = null; + + $this->isRunningClear = true; + + $this->__construct( + $this->inputValues['aWidth'], + $this->inputValues['aHeight'], + $this->inputValues['aCachedName'], + $this->inputValues['aTimeout'], + $this->inputValues['aInline'] + ); + + if (!($this instanceof PieGraph)) { + if ($this->isAfterSetScale) { + $this->SetScale( + $this->inputValues['aAxisType'], + $this->inputValues['aYMin'], + $this->inputValues['aYMax'], + $this->inputValues['aXMin'], + $this->inputValues['aXMax'] + ); + } + } + + $this->isRunningClear = false; + } + + function SetSupersampling($do = false, $scale = 2) { + if ($do) { + define('SUPERSAMPLING_SCALE', $scale); + // $this->img->scale = $scale; + } else { + define('SUPERSAMPLING_SCALE', 1); + //$this->img->scale = 0; + } + } + +} // Class + +//=================================================== +// CLASS LineProperty +// Description: Holds properties for a line +//=================================================== +class LineProperty { + public $iWeight=1, $iColor='black', $iStyle='solid', $iShow=false; + + function __construct($aWeight=1,$aColor='black',$aStyle='solid') { + $this->iWeight = $aWeight; + $this->iColor = $aColor; + $this->iStyle = $aStyle; + } + + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function SetWeight($aWeight) { + $this->iWeight = $aWeight; + } + + function SetStyle($aStyle) { + $this->iStyle = $aStyle; + } + + function Show($aShow=true) { + $this->iShow=$aShow; + } + + function Stroke($aImg,$aX1,$aY1,$aX2,$aY2) { + if( $this->iShow ) { + $aImg->PushColor($this->iColor); + $oldls = $aImg->line_style; + $oldlw = $aImg->line_weight; + $aImg->SetLineWeight($this->iWeight); + $aImg->SetLineStyle($this->iStyle); + $aImg->StyleLine($aX1,$aY1,$aX2,$aY2); + $aImg->PopColor($this->iColor); + $aImg->line_style = $oldls; + $aImg->line_weight = $oldlw; + + } + } +} + +//=================================================== +// CLASS GraphTabTitle +// Description: Draw "tab" titles on top of graphs +//=================================================== +class GraphTabTitle extends Text{ + private $corner = 6 , $posx = 7, $posy = 4; + private $fillcolor='lightyellow',$bordercolor='black'; + private $align = 'left', $width=TABTITLE_WIDTHFIT; + function __construct() { + $this->t = ''; + $this->font_style = FS_BOLD; + $this->hide = true; + $this->color = 'darkred'; + } + + function SetColor($aTxtColor,$aFillColor='lightyellow',$aBorderColor='black') { + $this->color = $aTxtColor; + $this->fillcolor = $aFillColor; + $this->bordercolor = $aBorderColor; + } + + function SetFillColor($aFillColor) { + $this->fillcolor = $aFillColor; + } + + function SetTabAlign($aAlign) { + $this->align = $aAlign; + } + + function SetWidth($aWidth) { + $this->width = $aWidth ; + } + + function Set($t) { + $this->t = $t; + $this->hide = false; + } + + function SetCorner($aD) { + $this->corner = $aD ; + } + + function Stroke($aImg,$aDummy1=null,$aDummy2=null) { + if( $this->hide ) + return; + $this->boxed = false; + $w = $this->GetWidth($aImg) + 2*$this->posx; + $h = $this->GetTextHeight($aImg) + 2*$this->posy; + + $x = $aImg->left_margin; + $y = $aImg->top_margin; + + if( $this->width === TABTITLE_WIDTHFIT ) { + if( $this->align == 'left' ) { + $p = array($x, $y, + $x, $y-$h+$this->corner, + $x + $this->corner,$y-$h, + $x + $w - $this->corner, $y-$h, + $x + $w, $y-$h+$this->corner, + $x + $w, $y); + } + elseif( $this->align == 'center' ) { + $x += round($aImg->plotwidth/2) - round($w/2); + $p = array($x, $y, + $x, $y-$h+$this->corner, + $x + $this->corner, $y-$h, + $x + $w - $this->corner, $y-$h, + $x + $w, $y-$h+$this->corner, + $x + $w, $y); + } + else { + $x += $aImg->plotwidth -$w; + $p = array($x, $y, + $x, $y-$h+$this->corner, + $x + $this->corner,$y-$h, + $x + $w - $this->corner, $y-$h, + $x + $w, $y-$h+$this->corner, + $x + $w, $y); + } + } + else { + if( $this->width === TABTITLE_WIDTHFULL ) { + $w = $aImg->plotwidth ; + } + else { + $w = $this->width ; + } + + // Make the tab fit the width of the plot area + $p = array($x, $y, + $x, $y-$h+$this->corner, + $x + $this->corner,$y-$h, + $x + $w - $this->corner, $y-$h, + $x + $w, $y-$h+$this->corner, + $x + $w, $y); + + } + if( $this->halign == 'left' ) { + $aImg->SetTextAlign('left','bottom'); + $x += $this->posx; + $y -= $this->posy; + } + elseif( $this->halign == 'center' ) { + $aImg->SetTextAlign('center','bottom'); + $x += $w/2; + $y -= $this->posy; + } + else { + $aImg->SetTextAlign('right','bottom'); + $x += $w - $this->posx; + $y -= $this->posy; + } + + $aImg->SetColor($this->fillcolor); + $aImg->FilledPolygon($p); + + $aImg->SetColor($this->bordercolor); + $aImg->Polygon($p,true); + + $aImg->SetColor($this->color); + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $aImg->StrokeText($x,$y,$this->t,0,'center'); + } + +} + +//=================================================== +// CLASS SuperScriptText +// Description: Format a superscript text +//=================================================== +class SuperScriptText extends Text { + private $iSuper=''; + private $sfont_family='',$sfont_style='',$sfont_size=8; + private $iSuperMargin=2,$iVertOverlap=4,$iSuperScale=0.65; + private $iSDir=0; + private $iSimple=false; + + function __construct($aTxt='',$aSuper='',$aXAbsPos=0,$aYAbsPos=0) { + parent::__construct($aTxt,$aXAbsPos,$aYAbsPos); + $this->iSuper = $aSuper; + } + + function FromReal($aVal,$aPrecision=2) { + // Convert a floating point number to scientific notation + $neg=1.0; + if( $aVal < 0 ) { + $neg = -1.0; + $aVal = -$aVal; + } + + $l = floor(log10($aVal)); + $a = sprintf("%0.".$aPrecision."f",round($aVal / pow(10,$l),$aPrecision)); + $a *= $neg; + if( $this->iSimple && ($a == 1 || $a==-1) ) $a = ''; + + if( $a != '' ) { + $this->t = $a.' * 10'; + } + else { + if( $neg == 1 ) { + $this->t = '10'; + } + else { + $this->t = '-10'; + } + } + $this->iSuper = $l; + } + + function Set($aTxt,$aSuper='') { + $this->t = $aTxt; + $this->iSuper = $aSuper; + } + + function SetSuperFont($aFontFam,$aFontStyle=FS_NORMAL,$aFontSize=8) { + $this->sfont_family = $aFontFam; + $this->sfont_style = $aFontStyle; + $this->sfont_size = $aFontSize; + } + + // Total width of text + function GetWidth($aImg) { + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $w = $aImg->GetTextWidth($this->t); + $aImg->SetFont($this->sfont_family,$this->sfont_style,$this->sfont_size); + $w += $aImg->GetTextWidth($this->iSuper); + $w += $this->iSuperMargin; + return $w; + } + + // Hight of font (approximate the height of the text) + function GetFontHeight($aImg) { + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $h = $aImg->GetFontHeight(); + $aImg->SetFont($this->sfont_family,$this->sfont_style,$this->sfont_size); + $h += $aImg->GetFontHeight(); + return $h; + } + + // Hight of text + function GetTextHeight($aImg) { + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $h = $aImg->GetTextHeight($this->t); + $aImg->SetFont($this->sfont_family,$this->sfont_style,$this->sfont_size); + $h += $aImg->GetTextHeight($this->iSuper); + return $h; + } + + function Stroke($aImg,$ax=-1,$ay=-1) { + + // To position the super script correctly we need different + // cases to handle the alignmewnt specified since that will + // determine how we can interpret the x,y coordinates + + $w = parent::GetWidth($aImg); + $h = parent::GetTextHeight($aImg); + switch( $this->valign ) { + case 'top': + $sy = $this->y; + break; + case 'center': + $sy = $this->y - $h/2; + break; + case 'bottom': + $sy = $this->y - $h; + break; + default: + JpGraphError::RaiseL(25052);//('PANIC: Internal error in SuperScript::Stroke(). Unknown vertical alignment for text'); + break; + } + + switch( $this->halign ) { + case 'left': + $sx = $this->x + $w; + break; + case 'center': + $sx = $this->x + $w/2; + break; + case 'right': + $sx = $this->x; + break; + default: + JpGraphError::RaiseL(25053);//('PANIC: Internal error in SuperScript::Stroke(). Unknown horizontal alignment for text'); + break; + } + + $sx += $this->iSuperMargin; + $sy += $this->iVertOverlap; + + // Should we automatically determine the font or + // has the user specified it explicetly? + if( $this->sfont_family == '' ) { + if( $this->font_family <= FF_FONT2 ) { + if( $this->font_family == FF_FONT0 ) { + $sff = FF_FONT0; + } + elseif( $this->font_family == FF_FONT1 ) { + if( $this->font_style == FS_NORMAL ) { + $sff = FF_FONT0; + } + else { + $sff = FF_FONT1; + } + } + else { + $sff = FF_FONT1; + } + $sfs = $this->font_style; + $sfz = $this->font_size; + } + else { + // TTF fonts + $sff = $this->font_family; + $sfs = $this->font_style; + $sfz = floor($this->font_size*$this->iSuperScale); + if( $sfz < 8 ) $sfz = 8; + } + $this->sfont_family = $sff; + $this->sfont_style = $sfs; + $this->sfont_size = $sfz; + } + else { + $sff = $this->sfont_family; + $sfs = $this->sfont_style; + $sfz = $this->sfont_size; + } + + parent::Stroke($aImg,$ax,$ay); + + // For the builtin fonts we need to reduce the margins + // since the bounding bx reported for the builtin fonts + // are much larger than for the TTF fonts. + if( $sff <= FF_FONT2 ) { + $sx -= 2; + $sy += 3; + } + + $aImg->SetTextAlign('left','bottom'); + $aImg->SetFont($sff,$sfs,$sfz); + $aImg->PushColor($this->color); + $aImg->StrokeText($sx,$sy,$this->iSuper,$this->iSDir,'left'); + $aImg->PopColor(); + } +} + + +//=================================================== +// CLASS Grid +// Description: responsible for drawing grid lines in graph +//=================================================== +class Grid { + protected $img; + protected $scale; + protected $majorcolor='#CCCCCC',$minorcolor='#DDDDDD'; + protected $majortype='solid',$minortype='solid'; + protected $show=false, $showMinor=false,$majorweight=1,$minorweight=1; + protected $fill=false,$fillcolor=array('#EFEFEF','#BBCCFF'); + + function __construct($aAxis) { + $this->scale = $aAxis->scale; + $this->img = $aAxis->img; + } + + function SetColor($aMajColor,$aMinColor=false) { + $this->majorcolor=$aMajColor; + if( $aMinColor === false ) { + $aMinColor = $aMajColor ; + } + $this->minorcolor = $aMinColor; + } + + function SetWeight($aMajorWeight,$aMinorWeight=1) { + $this->majorweight=$aMajorWeight; + $this->minorweight=$aMinorWeight; + } + + // Specify if grid should be dashed, dotted or solid + function SetLineStyle($aMajorType,$aMinorType='solid') { + $this->majortype = $aMajorType; + $this->minortype = $aMinorType; + } + + function SetStyle($aMajorType,$aMinorType='solid') { + $this->SetLineStyle($aMajorType,$aMinorType); + } + + // Decide if both major and minor grid should be displayed + function Show($aShowMajor=true,$aShowMinor=false) { + $this->show=$aShowMajor; + $this->showMinor=$aShowMinor; + } + + function SetFill($aFlg=true,$aColor1='lightgray',$aColor2='lightblue') { + $this->fill = $aFlg; + $this->fillcolor = array( $aColor1, $aColor2 ); + } + + // Display the grid + function Stroke() { + if( $this->showMinor && !$this->scale->textscale ) { + $this->DoStroke($this->scale->ticks->ticks_pos,$this->minortype,$this->minorcolor,$this->minorweight); + $this->DoStroke($this->scale->ticks->maj_ticks_pos,$this->majortype,$this->majorcolor,$this->majorweight); + } + else { + $this->DoStroke($this->scale->ticks->maj_ticks_pos,$this->majortype,$this->majorcolor,$this->majorweight); + } + } + + //-------------- + // Private methods + // Draw the grid + function DoStroke($aTicksPos,$aType,$aColor,$aWeight) { + if( !$this->show ) return; + $nbrgrids = count($aTicksPos); + + if( $this->scale->type == 'y' ) { + $xl=$this->img->left_margin; + $xr=$this->img->width-$this->img->right_margin; + + if( $this->fill ) { + // Draw filled areas + $y2 = !empty($aTicksPos) ? $aTicksPos[0] : null; + $i=1; + while( $i < $nbrgrids ) { + $y1 = $y2; + $y2 = $aTicksPos[$i++]; + $this->img->SetColor($this->fillcolor[$i & 1]); + $this->img->FilledRectangle($xl,$y1,$xr,$y2); + } + } + + $this->img->SetColor($aColor); + $this->img->SetLineWeight($aWeight); + + // Draw grid lines + switch( $aType ) { + case 'solid': $style = LINESTYLE_SOLID; break; + case 'dotted': $style = LINESTYLE_DOTTED; break; + case 'dashed': $style = LINESTYLE_DASHED; break; + case 'longdashed': $style = LINESTYLE_LONGDASH; break; + default: + $style = LINESTYLE_SOLID; break; + } + + for($i=0; $i < $nbrgrids; ++$i) { + $y=$aTicksPos[$i]; + $this->img->StyleLine($xl,$y,$xr,$y,$style,true); + } + } + elseif( $this->scale->type == 'x' ) { + $yu=$this->img->top_margin; + $yl=$this->img->height-$this->img->bottom_margin; + $limit=$this->img->width-$this->img->right_margin; + + if( $this->fill ) { + // Draw filled areas + $x2 = $aTicksPos[0]; + $i=1; + while( $i < $nbrgrids ) { + $x1 = $x2; + $x2 = min($aTicksPos[$i++],$limit) ; + $this->img->SetColor($this->fillcolor[$i & 1]); + $this->img->FilledRectangle($x1,$yu,$x2,$yl); + } + } + + $this->img->SetColor($aColor); + $this->img->SetLineWeight($aWeight); + + // We must also test for limit since we might have + // an offset and the number of ticks is calculated with + // assumption offset==0 so we might end up drawing one + // to many gridlines + $i=0; + while( $iimg->Line($x,$yl,$x,$yu); + elseif( $aType == 'dotted' ) $this->img->DashedLineForGrid($x,$yl,$x,$yu,1,6); + elseif( $aType == 'dashed' ) $this->img->DashedLineForGrid($x,$yl,$x,$yu,2,4); + elseif( $aType == 'longdashed' ) $this->img->DashedLineForGrid($x,$yl,$x,$yu,8,6); + ++$i; + } + } + else { + JpGraphError::RaiseL(25054,$this->scale->type);//('Internal error: Unknown grid axis ['.$this->scale->type.']'); + } + return true; + } +} // Class + +//=================================================== +// CLASS Axis +// Description: Defines X and Y axis. Notes that at the +// moment the code is not really good since the axis on +// several occasion must know wheter it's an X or Y axis. +// This was a design decision to make the code easier to +// follow. +//=================================================== +class AxisPrototype { + public $scale=null; + public $img=null; + public $hide=false,$hide_labels=false; + public $title=null; + public $font_family=FF_DEFAULT,$font_style=FS_NORMAL,$font_size=8,$label_angle=0; + public $tick_step=1; + public $pos = false; + public $ticks_label = array(); + + protected $weight=1; + protected $color=array(0,0,0),$label_color=array(0,0,0); + protected $ticks_label_colors=null; + protected $show_first_label=true,$show_last_label=true; + protected $label_step=1; // Used by a text axis to specify what multiple of major steps + // should be labeled. + protected $labelPos=0; // Which side of the axis should the labels be? + protected $title_adjust,$title_margin,$title_side=SIDE_LEFT; + protected $tick_label_margin=5; + protected $label_halign = '',$label_valign = '', $label_para_align='left'; + protected $hide_line=false; + protected $iDeltaAbsPos=0; + + function __construct($img,$aScale,$color = array(0,0,0)) { + $this->img = $img; + $this->scale = $aScale; + $this->color = $color; + $this->title=new Text(''); + + if( $aScale->type == 'y' ) { + $this->title_margin = 25; + $this->title_adjust = 'middle'; + $this->title->SetOrientation(90); + $this->tick_label_margin=7; + $this->labelPos=SIDE_LEFT; + } + else { + $this->title_margin = 5; + $this->title_adjust = 'high'; + $this->title->SetOrientation(0); + $this->tick_label_margin=5; + $this->labelPos=SIDE_DOWN; + $this->title_side=SIDE_DOWN; + } + } + + function SetLabelFormat($aFormStr) { + $this->scale->ticks->SetLabelFormat($aFormStr); + } + + function SetLabelFormatString($aFormStr,$aDate=false) { + $this->scale->ticks->SetLabelFormat($aFormStr,$aDate); + } + + function SetLabelFormatCallback($aFuncName) { + $this->scale->ticks->SetFormatCallback($aFuncName); + } + + function SetLabelAlign($aHAlign,$aVAlign='top',$aParagraphAlign='left') { + $this->label_halign = $aHAlign; + $this->label_valign = $aVAlign; + $this->label_para_align = $aParagraphAlign; + } + + // Don't display the first label + function HideFirstTickLabel($aShow=false) { + $this->show_first_label=$aShow; + } + + function HideLastTickLabel($aShow=false) { + $this->show_last_label=$aShow; + } + + // Manually specify the major and (optional) minor tick position and labels + function SetTickPositions($aMajPos,$aMinPos=NULL,$aLabels=NULL) { + $this->scale->ticks->SetTickPositions($aMajPos,$aMinPos,$aLabels); + } + + // Manually specify major tick positions and optional labels + function SetMajTickPositions($aMajPos,$aLabels=NULL) { + $this->scale->ticks->SetTickPositions($aMajPos,NULL,$aLabels); + } + + // Hide minor or major tick marks + function HideTicks($aHideMinor=true,$aHideMajor=true) { + $this->scale->ticks->SupressMinorTickMarks($aHideMinor); + $this->scale->ticks->SupressTickMarks($aHideMajor); + } + + // Hide zero label + function HideZeroLabel($aFlag=true) { + $this->scale->ticks->SupressZeroLabel(); + } + + function HideFirstLastLabel() { + // The two first calls to ticks method will supress + // automatically generated scale values. However, that + // will not affect manually specified value, e.g text-scales. + // therefor we also make a kludge here to supress manually + // specified scale labels. + $this->scale->ticks->SupressLast(); + $this->scale->ticks->SupressFirst(); + $this->show_first_label = false; + $this->show_last_label = false; + } + + // Hide the axis + function Hide($aHide=true) { + $this->hide=$aHide; + } + + // Hide the actual axis-line, but still print the labels + function HideLine($aHide=true) { + $this->hide_line = $aHide; + } + + function HideLabels($aHide=true) { + $this->hide_labels = $aHide; + } + + // Weight of axis + function SetWeight($aWeight) { + $this->weight = $aWeight; + } + + // Axis color + function SetColor($aColor,$aLabelColor=false) { + $this->color = $aColor; + if( !$aLabelColor ) $this->label_color = $aColor; + else $this->label_color = $aLabelColor; + } + + // Title on axis + function SetTitle($aTitle,$aAdjustAlign='high') { + $this->title->Set($aTitle); + $this->title_adjust=$aAdjustAlign; + } + + // Specify distance from the axis + function SetTitleMargin($aMargin) { + $this->title_margin=$aMargin; + } + + // Which side of the axis should the axis title be? + function SetTitleSide($aSideOfAxis) { + $this->title_side = $aSideOfAxis; + } + + function SetTickSide($aDir) { + $this->scale->ticks->SetSide($aDir); + } + + function SetTickSize($aMajSize,$aMinSize=3) { + $this->scale->ticks->SetSize($aMajSize,$aMinSize=3); + } + + // Specify text labels for the ticks. One label for each data point + function SetTickLabels($aLabelArray,$aLabelColorArray=null) { + $this->ticks_label = $aLabelArray; + $this->ticks_label_colors = $aLabelColorArray; + } + + function SetLabelMargin($aMargin) { + $this->tick_label_margin=$aMargin; + } + + // Specify that every $step of the ticks should be displayed starting + // at $start + function SetTextTickInterval($aStep,$aStart=0) { + $this->scale->ticks->SetTextLabelStart($aStart); + $this->tick_step=$aStep; + } + + // Specify that every $step tick mark should have a label + // should be displayed starting + function SetTextLabelInterval($aStep) { + if( $aStep < 1 ) { + JpGraphError::RaiseL(25058);//(" Text label interval must be specified >= 1."); + } + $this->label_step=$aStep; + } + + function SetLabelSide($aSidePos) { + $this->labelPos=$aSidePos; + } + + // Set the font + function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) { + $this->font_family = $aFamily; + $this->font_style = $aStyle; + $this->font_size = $aSize; + } + + // Position for axis line on the "other" scale + function SetPos($aPosOnOtherScale) { + $this->pos=$aPosOnOtherScale; + } + + // Set the position of the axis to be X-pixels delta to the right + // of the max X-position (used to position the multiple Y-axis) + function SetPosAbsDelta($aDelta) { + $this->iDeltaAbsPos=$aDelta; + } + + // Specify the angle for the tick labels + function SetLabelAngle($aAngle) { + $this->label_angle = $aAngle; + } + +} // Class + + +//=================================================== +// CLASS Axis +// Description: Defines X and Y axis. Notes that at the +// moment the code is not really good since the axis on +// several occasion must know wheter it's an X or Y axis. +// This was a design decision to make the code easier to +// follow. +//=================================================== +class Axis extends AxisPrototype { + + function __construct($img,$aScale,$color='black') { + parent::__construct($img,$aScale,$color); + } + + // Stroke the axis. + function Stroke($aOtherAxisScale,$aStrokeLabels=true) { + if( $this->hide ) + return; + if( is_numeric($this->pos) ) { + $pos=$aOtherAxisScale->Translate($this->pos); + } + else { // Default to minimum of other scale if pos not set + if( ($aOtherAxisScale->GetMinVal() >= 0 && $this->pos==false) || $this->pos == 'min' ) { + $pos = $aOtherAxisScale->scale_abs[0]; + } + elseif($this->pos == "max") { + $pos = $aOtherAxisScale->scale_abs[1]; + } + else { // If negative set x-axis at 0 + $this->pos=0; + $pos=$aOtherAxisScale->Translate(0); + } + } + + $pos += $this->iDeltaAbsPos; + $this->img->SetLineWeight($this->weight); + $this->img->SetColor($this->color); + $this->img->SetFont($this->font_family,$this->font_style,$this->font_size); + + if( $this->scale->type == "x" ) { + if( !$this->hide_line ) { + // Stroke X-axis + $this->img->FilledRectangle( + $this->img->left_margin, + $pos, + $this->img->width - $this->img->right_margin, + $pos + $this->weight-1 + ); + } + if( $this->title_side == SIDE_DOWN ) { + $y = $pos + $this->img->GetFontHeight() + $this->title_margin + $this->title->margin; + $yalign = 'top'; + } + else { + $y = $pos - $this->img->GetFontHeight() - $this->title_margin - $this->title->margin; + $yalign = 'bottom'; + } + + if( $this->title_adjust=='high' ) { + $this->title->SetPos($this->img->width-$this->img->right_margin,$y,'right',$yalign); + } + elseif( $this->title_adjust=='middle' || $this->title_adjust=='center' ) { + $this->title->SetPos(($this->img->width-$this->img->left_margin-$this->img->right_margin)/2+$this->img->left_margin,$y,'center',$yalign); + } + elseif($this->title_adjust=='low') { + $this->title->SetPos($this->img->left_margin,$y,'left',$yalign); + } + else { + JpGraphError::RaiseL(25060,$this->title_adjust);//('Unknown alignment specified for X-axis title. ('.$this->title_adjust.')'); + } + } + elseif( $this->scale->type == "y" ) { + // Add line weight to the height of the axis since + // the x-axis could have a width>1 and we want the axis to fit nicely together. + if( !$this->hide_line ) { + // Stroke Y-axis + $this->img->FilledRectangle( + $pos - $this->weight + 1, + $this->img->top_margin, + $pos, + $this->img->height - $this->img->bottom_margin + $this->weight - 1 + ); + } + + $x=$pos ; + if( $this->title_side == SIDE_LEFT ) { + $x -= $this->title_margin; + $x -= $this->title->margin; + $halign = 'right'; + } + else { + $x += $this->title_margin; + $x += $this->title->margin; + $halign = 'left'; + } + // If the user has manually specified an hor. align + // then we override the automatic settings with this + // specifed setting. Since default is 'left' we compare + // with that. (This means a manually set 'left' align + // will have no effect.) + if( $this->title->halign != 'left' ) { + $halign = $this->title->halign; + } + if( $this->title_adjust == 'high' ) { + $this->title->SetPos($x,$this->img->top_margin,$halign,'top'); + } + elseif($this->title_adjust=='middle' || $this->title_adjust=='center') { + $this->title->SetPos($x,($this->img->height-$this->img->top_margin-$this->img->bottom_margin)/2+$this->img->top_margin,$halign,"center"); + } + elseif($this->title_adjust=='low') { + $this->title->SetPos($x,$this->img->height-$this->img->bottom_margin,$halign,'bottom'); + } + else { + JpGraphError::RaiseL(25061,$this->title_adjust);//('Unknown alignment specified for Y-axis title. ('.$this->title_adjust.')'); + } + } + $this->scale->ticks->Stroke($this->img,$this->scale,$pos); + if( $aStrokeLabels ) { + if( !$this->hide_labels ) { + $this->StrokeLabels($pos); + } + $this->title->Stroke($this->img); + } + } + + //--------------- + // PRIVATE METHODS + // Draw all the tick labels on major tick marks + function StrokeLabels($aPos,$aMinor=false,$aAbsLabel=false) { + + if( is_array($this->label_color) && count($this->label_color) > 3 ) { + $this->ticks_label_colors = $this->label_color; + $this->img->SetColor($this->label_color[0]); + } + else { + $this->img->SetColor($this->label_color); + } + $this->img->SetFont($this->font_family,$this->font_style,$this->font_size); + $yoff=$this->img->GetFontHeight()/2; + + // Only draw labels at major tick marks + $nbr = count($this->scale->ticks->maj_ticks_label); + + // We have the option to not-display the very first mark + // (Usefull when the first label might interfere with another + // axis.) + $i = $this->show_first_label ? 0 : 1 ; + if( !$this->show_last_label ) { + --$nbr; + } + // Now run through all labels making sure we don't overshoot the end + // of the scale. + $ncolor=0; + if( isset($this->ticks_label_colors) ) { + $ncolor=count($this->ticks_label_colors); + } + while( $i < $nbr ) { + // $tpos holds the absolute text position for the label + $tpos=$this->scale->ticks->maj_ticklabels_pos[$i]; + + // Note. the $limit is only used for the x axis since we + // might otherwise overshoot if the scale has been centered + // This is due to us "loosing" the last tick mark if we center. + if( $this->scale->type == 'x' && $tpos > $this->img->width-$this->img->right_margin+1 ) { + return; + } + // we only draw every $label_step label + if( ($i % $this->label_step)==0 ) { + + // Set specific label color if specified + if( $ncolor > 0 ) { + $this->img->SetColor($this->ticks_label_colors[$i % $ncolor]); + } + + // If the label has been specified use that and in other case + // just label the mark with the actual scale value + $m=$this->scale->ticks->GetMajor(); + + // ticks_label has an entry for each data point and is the array + // that holds the labels set by the user. If the user hasn't + // specified any values we use whats in the automatically asigned + // labels in the maj_ticks_label + if( isset($this->ticks_label[$i *(int)$m]) ) { + $label=$this->ticks_label[$i*$m]; + } + else { + if( $aAbsLabel ) { + $label=abs($this->scale->ticks->maj_ticks_label[$i]); + } + else { + $label=$this->scale->ticks->maj_ticks_label[$i]; + } + + // We number the scale from 1 and not from 0 so increase by one + if( $this->scale->textscale && + $this->scale->ticks->label_formfunc == '' && + ! $this->scale->ticks->HaveManualLabels() ) { + + ++$label; + + } + } + + if( $this->scale->type == "x" ) { + if( $this->labelPos == SIDE_DOWN ) { + if( $this->label_angle==0 || $this->label_angle==90 ) { + if( $this->label_halign=='' && $this->label_valign=='') { + $this->img->SetTextAlign('center','top'); + } + else { + $this->img->SetTextAlign($this->label_halign,$this->label_valign); + } + + } + else { + if( $this->label_halign=='' && $this->label_valign=='') { + $this->img->SetTextAlign("right","top"); + } + else { + $this->img->SetTextAlign($this->label_halign,$this->label_valign); + } + } + $this->img->StrokeText($tpos,$aPos+$this->tick_label_margin,$label, + $this->label_angle,$this->label_para_align); + } + else { + if( $this->label_angle==0 || $this->label_angle==90 ) { + if( $this->label_halign=='' && $this->label_valign=='') { + $this->img->SetTextAlign("center","bottom"); + } + else { + $this->img->SetTextAlign($this->label_halign,$this->label_valign); + } + } + else { + if( $this->label_halign=='' && $this->label_valign=='') { + $this->img->SetTextAlign("right","bottom"); + } + else { + $this->img->SetTextAlign($this->label_halign,$this->label_valign); + } + } + $this->img->StrokeText($tpos,$aPos-$this->tick_label_margin-1,$label, + $this->label_angle,$this->label_para_align); + } + } + else { + // scale->type == "y" + //if( $this->label_angle!=0 ) + //JpGraphError::Raise(" Labels at an angle are not supported on Y-axis"); + if( $this->labelPos == SIDE_LEFT ) { // To the left of y-axis + if( $this->label_halign=='' && $this->label_valign=='') { + $this->img->SetTextAlign("right","center"); + } + else { + $this->img->SetTextAlign($this->label_halign,$this->label_valign); + } + $this->img->StrokeText($aPos-$this->tick_label_margin,$tpos,$label,$this->label_angle,$this->label_para_align); + } + else { // To the right of the y-axis + if( $this->label_halign=='' && $this->label_valign=='') { + $this->img->SetTextAlign("left","center"); + } + else { + $this->img->SetTextAlign($this->label_halign,$this->label_valign); + } + $this->img->StrokeText($aPos+$this->tick_label_margin,$tpos,$label,$this->label_angle,$this->label_para_align); + } + } + } + ++$i; + } + } + +} + + +//=================================================== +// CLASS Ticks +// Description: Abstract base class for drawing linear and logarithmic +// tick marks on axis +//=================================================== +class Ticks { + public $label_formatstr=''; // C-style format string to use for labels + public $label_formfunc=''; + public $label_dateformatstr=''; + public $direction=1; // Should ticks be in(=1) the plot area or outside (=-1) + public $supress_last=false,$supress_tickmarks=false,$supress_minor_tickmarks=false; + public $maj_ticks_pos = array(), $maj_ticklabels_pos = array(), + $ticks_pos = array(), $maj_ticks_label = array(); + public $precision; + + protected $minor_abs_size=3, $major_abs_size=5; + protected $scale; + protected $is_set=false; + protected $supress_zerolabel=false,$supress_first=false; + protected $mincolor='',$majcolor=''; + protected $weight=1; + protected $label_usedateformat=FALSE; + + function __construct($aScale) { + $this->scale=$aScale; + $this->precision = -1; + } + + // Set format string for automatic labels + function SetLabelFormat($aFormatString,$aDate=FALSE) { + $this->label_formatstr=$aFormatString; + $this->label_usedateformat=$aDate; + } + + function SetLabelDateFormat($aFormatString) { + $this->label_dateformatstr=$aFormatString; + } + + function SetFormatCallback($aCallbackFuncName) { + $this->label_formfunc = $aCallbackFuncName; + } + + // Don't display the first zero label + function SupressZeroLabel($aFlag=true) { + $this->supress_zerolabel=$aFlag; + } + + // Don't display minor tick marks + function SupressMinorTickMarks($aHide=true) { + $this->supress_minor_tickmarks=$aHide; + } + + // Don't display major tick marks + function SupressTickMarks($aHide=true) { + $this->supress_tickmarks=$aHide; + } + + // Hide the first tick mark + function SupressFirst($aHide=true) { + $this->supress_first=$aHide; + } + + // Hide the last tick mark + function SupressLast($aHide=true) { + $this->supress_last=$aHide; + } + + // Size (in pixels) of minor tick marks + function GetMinTickAbsSize() { + return $this->minor_abs_size; + } + + // Size (in pixels) of major tick marks + function GetMajTickAbsSize() { + return $this->major_abs_size; + } + + function SetSize($aMajSize,$aMinSize=3) { + $this->major_abs_size = $aMajSize; + $this->minor_abs_size = $aMinSize; + } + + // Have the ticks been specified + function IsSpecified() { + return $this->is_set; + } + + function SetSide($aSide) { + $this->direction=$aSide; + } + + // Which side of the axis should the ticks be on + function SetDirection($aSide=SIDE_RIGHT) { + $this->direction=$aSide; + } + + // Set colors for major and minor tick marks + function SetMarkColor($aMajorColor,$aMinorColor='') { + $this->SetColor($aMajorColor,$aMinorColor); + } + + function SetColor($aMajorColor,$aMinorColor='') { + $this->majcolor=$aMajorColor; + + // If not specified use same as major + if( $aMinorColor == '' ) { + $this->mincolor=$aMajorColor; + } + else { + $this->mincolor=$aMinorColor; + } + } + + function SetWeight($aWeight) { + $this->weight=$aWeight; + } + +} // Class + +//=================================================== +// CLASS LinearTicks +// Description: Draw linear ticks on axis +//=================================================== +class LinearTicks extends Ticks { + public $minor_step=1, $major_step=2; + public $xlabel_offset=0,$xtick_offset=0; + private $label_offset=0; // What offset should the displayed label have + // i.e should we display 0,1,2 or 1,2,3,4 or 2,3,4 etc + private $text_label_start=0; + private $iManualTickPos = NULL, $iManualMinTickPos = NULL, $iManualTickLabels = NULL; + private $iAdjustForDST = false; // If a date falls within the DST period add one hour to the diaplyed time + + function __construct() { + $this->precision = -1; + } + + // Return major step size in world coordinates + function GetMajor() { + return $this->major_step; + } + + // Return minor step size in world coordinates + function GetMinor() { + return $this->minor_step; + } + + // Set Minor and Major ticks (in world coordinates) + function Set($aMajStep,$aMinStep=false) { + if( $aMinStep==false ) { + $aMinStep=$aMajStep; + } + + if( $aMajStep <= 0 || $aMinStep <= 0 ) { + JpGraphError::RaiseL(25064); + //(" Minor or major step size is 0. Check that you haven't got an accidental SetTextTicks(0) in your code. If this is not the case you might have stumbled upon a bug in JpGraph. Please report this and if possible include the data that caused the problem."); + } + + $this->major_step=$aMajStep; + $this->minor_step=$aMinStep; + $this->is_set = true; + } + + function SetMajTickPositions($aMajPos,$aLabels=NULL) { + $this->SetTickPositions($aMajPos,NULL,$aLabels); + } + + function SetTickPositions($aMajPos,$aMinPos=NULL,$aLabels=NULL) { + if( !is_array($aMajPos) || ($aMinPos!==NULL && !is_array($aMinPos)) ) { + JpGraphError::RaiseL(25065);//('Tick positions must be specifued as an array()'); + return; + } + $n=count($aMajPos); + if( is_array($aLabels) && (count($aLabels) != $n) ) { + JpGraphError::RaiseL(25066);//('When manually specifying tick positions and labels the number of labels must be the same as the number of specified ticks.'); + } + $this->iManualTickPos = $aMajPos; + $this->iManualMinTickPos = $aMinPos; + $this->iManualTickLabels = $aLabels; + } + + function HaveManualLabels() { + return is_array($this->iManualTickLabels) ? count($this->iManualTickLabels) > 0 : false; + } + + // Specify all the tick positions manually and possible also the exact labels + function _doManualTickPos($aScale) { + $n=count($this->iManualTickPos); + $m= is_array($this->iManualMinTickPos) ? count($this->iManualMinTickPos) : 0; + $doLbl= is_array($this->iManualTickLabels) ? count($this->iManualTickLabels) > 0 : false; + + $this->maj_ticks_pos = array(); + $this->maj_ticklabels_pos = array(); + $this->ticks_pos = array(); + + // Now loop through the supplied positions and translate them to screen coordinates + // and store them in the maj_label_positions + $minScale = $aScale->scale[0]; + $maxScale = $aScale->scale[1]; + $j=0; + for($i=0; $i < $n ; ++$i ) { + // First make sure that the first tick is not lower than the lower scale value + if( !isset($this->iManualTickPos[$i]) || $this->iManualTickPos[$i] < $minScale || $this->iManualTickPos[$i] > $maxScale) { + continue; + } + + $this->maj_ticks_pos[$j] = $aScale->Translate($this->iManualTickPos[$i]); + $this->maj_ticklabels_pos[$j] = $this->maj_ticks_pos[$j]; + + // Set the minor tick marks the same as major if not specified + if( $m <= 0 ) { + $this->ticks_pos[$j] = $this->maj_ticks_pos[$j]; + } + if( $doLbl ) { + $this->maj_ticks_label[$j] = $this->iManualTickLabels[$i]; + } + else { + $this->maj_ticks_label[$j]=$this->_doLabelFormat($this->iManualTickPos[$i],$i,$n); + } + ++$j; + } + + // Some sanity check + if( count($this->maj_ticks_pos) < 2 ) { + JpGraphError::RaiseL(25067);//('Your manually specified scale and ticks is not correct. The scale seems to be too small to hold any of the specified tickl marks.'); + } + + // Setup the minor tick marks + $j=0; + for($i=0; $i < $m; ++$i ) { + if( empty($this->iManualMinTickPos[$i]) || $this->iManualMinTickPos[$i] < $minScale || $this->iManualMinTickPos[$i] > $maxScale) { + continue; + } + $this->ticks_pos[$j] = $aScale->Translate($this->iManualMinTickPos[$i]); + ++$j; + } + } + + function _doAutoTickPos($aScale) { + $maj_step_abs = $aScale->scale_factor*$this->major_step; + $min_step_abs = $aScale->scale_factor*$this->minor_step; + + if( $min_step_abs==0 || $maj_step_abs==0 ) { + JpGraphError::RaiseL(25068);//("A plot has an illegal scale. This could for example be that you are trying to use text autoscaling to draw a line plot with only one point or that the plot area is too small. It could also be that no input data value is numeric (perhaps only '-' or 'x')"); + } + // We need to make this an int since comparing it below + // with the result from round() can give wrong result, such that + // (40 < 40) == TRUE !!! + $limit = (int)$aScale->scale_abs[1]; + + if( $aScale->textscale ) { + // This can only be true for a X-scale (horizontal) + // Define ticks for a text scale. This is slightly different from a + // normal linear type of scale since the position might be adjusted + // and the labels start at on + $label = (float)$aScale->GetMinVal()+$this->text_label_start+$this->label_offset; + $start_abs=$aScale->scale_factor*$this->text_label_start; + $nbrmajticks=round(($aScale->GetMaxVal()-$aScale->GetMinVal()-$this->text_label_start )/$this->major_step)+1; + + $x = $aScale->scale_abs[0]+$start_abs+$this->xlabel_offset*$min_step_abs; + for( $i=0; $label <= $aScale->GetMaxVal()+$this->label_offset; ++$i ) { + // Apply format to label + $this->maj_ticks_label[$i]=$this->_doLabelFormat($label,$i,$nbrmajticks); + $label+=$this->major_step; + + // The x-position of the tick marks can be different from the labels. + // Note that we record the tick position (not the label) so that the grid + // happen upon tick marks and not labels. + $xtick=$aScale->scale_abs[0]+$start_abs+$this->xtick_offset*$min_step_abs+$i*$maj_step_abs; + $this->maj_ticks_pos[$i]=$xtick; + $this->maj_ticklabels_pos[$i] = round($x); + $x += $maj_step_abs; + } + } + else { + $label = $aScale->GetMinVal(); + $abs_pos = $aScale->scale_abs[0]; + $j=0; $i=0; + $step = round($maj_step_abs/$min_step_abs); + if( $aScale->type == "x" ) { + // For a normal linear type of scale the major ticks will always be multiples + // of the minor ticks. In order to avoid any rounding issues the major ticks are + // defined as every "step" minor ticks and not calculated separately + $nbrmajticks=round(($aScale->GetMaxVal()-$aScale->GetMinVal()-$this->text_label_start )/$this->major_step)+1; + while( round($abs_pos) <= $limit ) { + $this->ticks_pos[] = round($abs_pos); + $this->ticks_label[] = $label; + if( $step== 0 || $i % $step == 0 && $j < $nbrmajticks ) { + $this->maj_ticks_pos[$j] = round($abs_pos); + $this->maj_ticklabels_pos[$j] = round($abs_pos); + $this->maj_ticks_label[$j]=$this->_doLabelFormat($label,$j,$nbrmajticks); + ++$j; + } + ++$i; + $abs_pos += $min_step_abs; + $label+=$this->minor_step; + } + } + elseif( $aScale->type == "y" ) { + //@todo s=2:20,12 s=1:50,6 $this->major_step:$nbr + // abs_point,limit s=1:270,80 s=2:540,160 + // $this->major_step = 50; + $nbrmajticks=round(($aScale->GetMaxVal()-$aScale->GetMinVal())/$this->major_step)+1; +// $step = 5; + while( round($abs_pos) >= $limit ) { + $this->ticks_pos[$i] = round($abs_pos); + $this->ticks_label[$i]=$label; + if( $step== 0 || $i % $step == 0 && $j < $nbrmajticks) { + $this->maj_ticks_pos[$j] = round($abs_pos); + $this->maj_ticklabels_pos[$j] = round($abs_pos); + $this->maj_ticks_label[$j]=$this->_doLabelFormat($label,$j,$nbrmajticks); + ++$j; + } + ++$i; + $abs_pos += $min_step_abs; + $label += $this->minor_step; + } + } + } + } + + function AdjustForDST($aFlg=true) { + $this->iAdjustForDST = $aFlg; + } + + + function _doLabelFormat($aVal,$aIdx,$aNbrTicks) { + + // If precision hasn't been specified set it to a sensible value + if( $this->precision==-1 ) { + $t = log10($this->minor_step); + if( $t > 0 || $t === 0.0) { + $precision = 0; + } + else { + $precision = -floor($t); + } + } + else { + $precision = $this->precision; + } + + if( $this->label_formfunc != '' ) { + $f=$this->label_formfunc; + if( $this->label_formatstr == '' ) { + $l = call_user_func($f,$aVal); + } + else { + $l = sprintf($this->label_formatstr, call_user_func($f,$aVal)); + } + } + elseif( $this->label_formatstr != '' || $this->label_dateformatstr != '' ) { + if( $this->label_usedateformat ) { + // Adjust the value to take daylight savings into account + if (date("I",$aVal)==1 && $this->iAdjustForDST ) { + // DST + $aVal+=3600; + } + + $l = date($this->label_formatstr,$aVal); + if( $this->label_formatstr == 'W' ) { + // If we use week formatting then add a single 'w' in front of the + // week number to differentiate it from dates + $l = 'w'.$l; + } + } + else { + if( $this->label_dateformatstr !== '' ) { + // Adjust the value to take daylight savings into account + if (date("I",$aVal)==1 && $this->iAdjustForDST ) { + // DST + $aVal+=3600; + } + + $l = date($this->label_dateformatstr,$aVal); + if( $this->label_formatstr == 'W' ) { + // If we use week formatting then add a single 'w' in front of the + // week number to differentiate it from dates + $l = 'w'.$l; + } + } + else { + $l = sprintf($this->label_formatstr,$aVal); + } + } + } + else { + $l = sprintf('%01.'.$precision.'f',round($aVal,$precision)); + } + + if( ($this->supress_zerolabel && $l==0) || ($this->supress_first && $aIdx==0) || ($this->supress_last && $aIdx==$aNbrTicks-1) ) { + $l=''; + } + return $l; + } + + // Stroke ticks on either X or Y axis + function _StrokeTicks($aImg,$aScale,$aPos) { + $hor = $aScale->type == 'x'; + $aImg->SetLineWeight($this->weight); + + // We need to make this an int since comparing it below + // with the result from round() can give wrong result, such that + // (40 < 40) == TRUE !!! + $limit = (int)$aScale->scale_abs[1]; + + // A text scale doesn't have any minor ticks + if( !$aScale->textscale ) { + // Stroke minor ticks + $yu = $aPos - $this->direction*$this->GetMinTickAbsSize(); + $xr = $aPos + $this->direction*$this->GetMinTickAbsSize(); + $n = count($this->ticks_pos); + for($i=0; $i < $n; ++$i ) { + if( !$this->supress_tickmarks && !$this->supress_minor_tickmarks) { + if( $this->mincolor != '') { + $aImg->PushColor($this->mincolor); + } + if( $hor ) { + //if( $this->ticks_pos[$i] <= $limit ) + $aImg->Line($this->ticks_pos[$i],$aPos,$this->ticks_pos[$i],$yu); + } + else { + //if( $this->ticks_pos[$i] >= $limit ) + $aImg->Line($aPos,$this->ticks_pos[$i],$xr,$this->ticks_pos[$i]); + } + if( $this->mincolor != '' ) { + $aImg->PopColor(); + } + } + } + } + + // Stroke major ticks + $yu = $aPos - $this->direction*$this->GetMajTickAbsSize(); + $xr = $aPos + $this->direction*$this->GetMajTickAbsSize(); + $nbrmajticks=round(($aScale->GetMaxVal()-$aScale->GetMinVal()-$this->text_label_start )/$this->major_step)+1; + $n = count($this->maj_ticks_pos); + for($i=0; $i < $n ; ++$i ) { + if(!($this->xtick_offset > 0 && $i==$nbrmajticks-1) && !$this->supress_tickmarks) { + if( $this->majcolor != '') { + $aImg->PushColor($this->majcolor); + } + if( $hor ) { + //if( $this->maj_ticks_pos[$i] <= $limit ) + $aImg->Line($this->maj_ticks_pos[$i],$aPos,$this->maj_ticks_pos[$i],$yu); + } + else { + //if( $this->maj_ticks_pos[$i] >= $limit ) + $aImg->Line($aPos,$this->maj_ticks_pos[$i],$xr,$this->maj_ticks_pos[$i]); + } + if( $this->majcolor != '') { + $aImg->PopColor(); + } + } + } + + } + + // Draw linear ticks + function Stroke($aImg,$aScale,$aPos) { + if( $this->iManualTickPos != NULL ) { + $this->_doManualTickPos($aScale); + } + else { + $this->_doAutoTickPos($aScale); + } + $this->_StrokeTicks($aImg,$aScale,$aPos, $aScale->type == 'x' ); + } + + //--------------- + // PRIVATE METHODS + // Spoecify the offset of the displayed tick mark with the tick "space" + // Legal values for $o is [0,1] used to adjust where the tick marks and label + // should be positioned within the major tick-size + // $lo specifies the label offset and $to specifies the tick offset + // this comes in handy for example in bar graphs where we wont no offset for the + // tick but have the labels displayed halfway under the bars. + function SetXLabelOffset($aLabelOff,$aTickOff=-1) { + $this->xlabel_offset=$aLabelOff; + if( $aTickOff==-1 ) { + // Same as label offset + $this->xtick_offset=$aLabelOff; + } + else { + $this->xtick_offset=$aTickOff; + } + if( $aLabelOff>0 ) { + $this->SupressLast(); // The last tick wont fit + } + } + + // Which tick label should we start with? + function SetTextLabelStart($aTextLabelOff) { + $this->text_label_start=$aTextLabelOff; + } + +} // Class + +//=================================================== +// CLASS LinearScale +// Description: Handle linear scaling between screen and world +//=================================================== +class LinearScale { + public $textscale=false; // Just a flag to let the Plot class find out if + // we are a textscale or not. This is a cludge since + // this information is available in Graph::axtype but + // we don't have access to the graph object in the Plots + // stroke method. So we let graph store the status here + // when the linear scale is created. A real cludge... + public $type; // is this x or y scale ? + public $ticks=null; // Store ticks + public $text_scale_off = 0; + public $scale_abs=array(0,0); + public $scale_factor; // Scale factor between world and screen + public $off; // Offset between image edge and plot area + public $scale=array(0,0); + public $name = 'lin'; + public $auto_ticks=false; // When using manual scale should the ticks be automatically set? + public $world_abs_size; // Plot area size in pixels (Needed public in jpgraph_radar.php) + public $intscale=false; // Restrict autoscale to integers + protected $autoscale_min=false; // Forced minimum value, auto determine max + protected $autoscale_max=false; // Forced maximum value, auto determine min + private $gracetop=0,$gracebottom=0; + + private $_world_size; // Plot area size in world coordinates + + function __construct($aMin=0,$aMax=0,$aType='y') { + assert($aType=='x' || $aType=='y' ); + assert($aMin<=$aMax); + + $this->type=$aType; + $this->scale=array($aMin,$aMax); + $this->world_size=$aMax-$aMin; + $this->ticks = new LinearTicks(); + } + + // Check if scale is set or if we should autoscale + // We should do this is either scale or ticks has not been set + function IsSpecified() { + if( $this->GetMinVal()==$this->GetMaxVal() ) { // Scale not set + return false; + } + return true; + } + + // Set the minimum data value when the autoscaling is used. + // Usefull if you want a fix minimum (like 0) but have an + // automatic maximum + function SetAutoMin($aMin) { + $this->autoscale_min=$aMin; + } + + // Set the minimum data value when the autoscaling is used. + // Usefull if you want a fix minimum (like 0) but have an + // automatic maximum + function SetAutoMax($aMax) { + $this->autoscale_max=$aMax; + } + + // If the user manually specifies a scale should the ticks + // still be set automatically? + function SetAutoTicks($aFlag=true) { + $this->auto_ticks = $aFlag; + } + + // Specify scale "grace" value (top and bottom) + function SetGrace($aGraceTop,$aGraceBottom=0) { + if( $aGraceTop<0 || $aGraceBottom < 0 ) { + JpGraphError::RaiseL(25069);//(" Grace must be larger then 0"); + } + $this->gracetop=$aGraceTop; + $this->gracebottom=$aGraceBottom; + } + + // Get the minimum value in the scale + function GetMinVal() { + return $this->scale[0]; + } + + // get maximum value for scale + function GetMaxVal() { + return $this->scale[1]; + } + + // Specify a new min/max value for sclae + function Update($aImg,$aMin,$aMax) { + $this->scale=array($aMin,$aMax); + $this->world_size=$aMax-$aMin; + $this->InitConstants($aImg); + } + + // Translate between world and screen + function Translate($aCoord) { + if( !is_numeric($aCoord) ) { + if( $aCoord != '' && $aCoord != '-' && $aCoord != 'x' ) { + JpGraphError::RaiseL(25070);//('Your data contains non-numeric values.'); + } + return 0; + } + else { + return round($this->off+($aCoord - $this->scale[0]) * $this->scale_factor); + } + } + + // Relative translate (don't include offset) usefull when we just want + // to know the relative position (in pixels) on the axis + function RelTranslate($aCoord) { + if( !is_numeric($aCoord) ) { + if( $aCoord != '' && $aCoord != '-' && $aCoord != 'x' ) { + JpGraphError::RaiseL(25070);//('Your data contains non-numeric values.'); + } + return 0; + } + else { + return ($aCoord - $this->scale[0]) * $this->scale_factor; + } + } + + // Restrict autoscaling to only use integers + function SetIntScale($aIntScale=true) { + $this->intscale=$aIntScale; + } + + // Calculate an integer autoscale + function IntAutoScale($img,$min,$max,$maxsteps,$majend=true) { + // Make sure limits are integers + $min=floor($min); + $max=ceil($max); + if( abs($min-$max)==0 ) { + --$min; ++$max; + } + $maxsteps = floor($maxsteps); + + $gracetop=round(($this->gracetop/100.0)*abs($max-$min)); + $gracebottom=round(($this->gracebottom/100.0)*abs($max-$min)); + if( is_numeric($this->autoscale_min) ) { + $min = ceil($this->autoscale_min); + if( $min >= $max ) { + JpGraphError::RaiseL(25071);//('You have specified a min value with SetAutoMin() which is larger than the maximum value used for the scale. This is not possible.'); + } + } + + if( is_numeric($this->autoscale_max) ) { + $max = ceil($this->autoscale_max); + if( $min >= $max ) { + JpGraphError::RaiseL(25072);//('You have specified a max value with SetAutoMax() which is smaller than the miminum value used for the scale. This is not possible.'); + } + } + + if( abs($min-$max ) == 0 ) { + ++$max; + --$min; + } + + $min -= $gracebottom; + $max += $gracetop; + + // First get tickmarks as multiples of 1, 10, ... + if( $majend ) { + list($num1steps,$adj1min,$adj1max,$maj1step) = $this->IntCalcTicks($maxsteps,$min,$max,1); + } + else { + $adj1min = $min; + $adj1max = $max; + list($num1steps,$maj1step) = $this->IntCalcTicksFreeze($maxsteps,$min,$max,1); + } + + if( abs($min-$max) > 2 ) { + // Then get tick marks as 2:s 2, 20, ... + if( $majend ) { + list($num2steps,$adj2min,$adj2max,$maj2step) = $this->IntCalcTicks($maxsteps,$min,$max,5); + } + else { + $adj2min = $min; + $adj2max = $max; + list($num2steps,$maj2step) = $this->IntCalcTicksFreeze($maxsteps,$min,$max,5); + } + } + else { + $num2steps = 10000; // Dummy high value so we don't choose this + } + + if( abs($min-$max) > 5 ) { + // Then get tickmarks as 5:s 5, 50, 500, ... + if( $majend ) { + list($num5steps,$adj5min,$adj5max,$maj5step) = $this->IntCalcTicks($maxsteps,$min,$max,2); + } + else { + $adj5min = $min; + $adj5max = $max; + list($num5steps,$maj5step) = $this->IntCalcTicksFreeze($maxsteps,$min,$max,2); + } + } + else { + $num5steps = 10000; // Dummy high value so we don't choose this + } + + // Check to see whichof 1:s, 2:s or 5:s fit better with + // the requested number of major ticks + $match1=abs($num1steps-$maxsteps); + $match2=abs($num2steps-$maxsteps); + if( !empty($maj5step) && $maj5step > 1 ) { + $match5=abs($num5steps-$maxsteps); + } + else { + $match5=10000; // Dummy high value + } + + // Compare these three values and see which is the closest match + // We use a 0.6 weight to gravitate towards multiple of 5:s + if( $match1 < $match2 ) { + if( $match1 < $match5 ) $r=1; + else $r=3; + } + else { + if( $match2 < $match5 ) $r=2; + else $r=3; + } + // Minsteps are always the same as maxsteps for integer scale + switch( $r ) { + case 1: + $this->ticks->Set($maj1step,$maj1step); + $this->Update($img,$adj1min,$adj1max); + break; + case 2: + $this->ticks->Set($maj2step,$maj2step); + $this->Update($img,$adj2min,$adj2max); + break; + case 3: + $this->ticks->Set($maj5step,$maj5step); + $this->Update($img,$adj5min,$adj5max); + break; + default: + JpGraphError::RaiseL(25073,$r);//('Internal error. Integer scale algorithm comparison out of bound (r=$r)'); + } + } + + + // Calculate autoscale. Used if user hasn't given a scale and ticks + // $maxsteps is the maximum number of major tickmarks allowed. + function AutoScale($img,$min,$max,$maxsteps,$majend=true) { + + if( !is_numeric($min) || !is_numeric($max) ) { + JpGraphError::Raise(25044); + } + + if( $this->intscale ) { + $this->IntAutoScale($img,$min,$max,$maxsteps,$majend); + return; + } + if( abs($min-$max) < 0.00001 ) { + // We need some difference to be able to autoscale + // make it 5% above and 5% below value + if( $min==0 && $max==0 ) { // Special case + $min=-1; $max=1; + } + else { + $delta = (abs($max)+abs($min))*0.005; + $min -= $delta; + $max += $delta; + } + } + + $gracetop=($this->gracetop/100.0)*abs($max-$min); + $gracebottom=($this->gracebottom/100.0)*abs($max-$min); + if( is_numeric($this->autoscale_min) ) { + $min = $this->autoscale_min; + if( $min >= $max ) { + JpGraphError::RaiseL(25071);//('You have specified a min value with SetAutoMin() which is larger than the maximum value used for the scale. This is not possible.'); + } + if( abs($min-$max ) < 0.001 ) { + $max *= 1.2; + } + } + + if( is_numeric($this->autoscale_max) ) { + $max = $this->autoscale_max; + if( $min >= $max ) { + JpGraphError::RaiseL(25072);//('You have specified a max value with SetAutoMax() which is smaller than the miminum value used for the scale. This is not possible.'); + } + if( abs($min-$max ) < 0.001 ) { + $min *= 0.8; + } + } + + $min -= $gracebottom; + $max += $gracetop; + + // First get tickmarks as multiples of 0.1, 1, 10, ... + if( $majend ) { + list($num1steps,$adj1min,$adj1max,$min1step,$maj1step) = $this->CalcTicks($maxsteps,$min,$max,1,2); + } + else { + $adj1min=$min; + $adj1max=$max; + list($num1steps,$min1step,$maj1step) = $this->CalcTicksFreeze($maxsteps,$min,$max,1,2,false); + } + + // Then get tick marks as 2:s 0.2, 2, 20, ... + if( $majend ) { + list($num2steps,$adj2min,$adj2max,$min2step,$maj2step) = $this->CalcTicks($maxsteps,$min,$max,5,2); + } + else { + $adj2min=$min; + $adj2max=$max; + list($num2steps,$min2step,$maj2step) = $this->CalcTicksFreeze($maxsteps,$min,$max,5,2,false); + } + + // Then get tickmarks as 5:s 0.05, 0.5, 5, 50, ... + if( $majend ) { + list($num5steps,$adj5min,$adj5max,$min5step,$maj5step) = $this->CalcTicks($maxsteps,$min,$max,2,5); + } + else { + $adj5min=$min; + $adj5max=$max; + list($num5steps,$min5step,$maj5step) = $this->CalcTicksFreeze($maxsteps,$min,$max,2,5,false); + } + + // Check to see whichof 1:s, 2:s or 5:s fit better with + // the requested number of major ticks + $match1=abs($num1steps-$maxsteps); + $match2=abs($num2steps-$maxsteps); + $match5=abs($num5steps-$maxsteps); + + // Compare these three values and see which is the closest match + // We use a 0.8 weight to gravitate towards multiple of 5:s + $r=$this->MatchMin3($match1,$match2,$match5,0.8); + switch( $r ) { + case 1: + $this->Update($img,$adj1min,$adj1max); + $this->ticks->Set($maj1step,$min1step); + break; + case 2: + $this->Update($img,$adj2min,$adj2max); + $this->ticks->Set($maj2step,$min2step); + break; + case 3: + $this->Update($img,$adj5min,$adj5max); + $this->ticks->Set($maj5step,$min5step); + break; + } + } + + //--------------- + // PRIVATE METHODS + + // This method recalculates all constants that are depending on the + // margins in the image. If the margins in the image are changed + // this method should be called for every scale that is registred with + // that image. Should really be installed as an observer of that image. + function InitConstants($img) { + if( $this->type=='x' ) { + $this->world_abs_size=$img->width - $img->left_margin - $img->right_margin; + $this->off=$img->left_margin; + $this->scale_factor = 0; + if( $this->world_size > 0 ) { + $this->scale_factor=$this->world_abs_size/($this->world_size*0.999999); + } + } + else { // y scale + $this->world_abs_size=$img->height - $img->top_margin - $img->bottom_margin; + $this->off=$img->top_margin+$this->world_abs_size; + $this->scale_factor = 0; + if( $this->world_size > 0 ) { + $this->scale_factor=-$this->world_abs_size/($this->world_size*0.999999); + } + } + $size = $this->world_size * $this->scale_factor; + $this->scale_abs=array($this->off,$this->off + $size); + } + + // Initialize the conversion constants for this scale + // This tries to pre-calculate as much as possible to speed up the + // actual conversion (with Translate()) later on + // $start =scale start in absolute pixels (for x-scale this is an y-position + // and for an y-scale this is an x-position + // $len =absolute length in pixels of scale + function SetConstants($aStart,$aLen) { + $this->world_abs_size=$aLen; + $this->off=$aStart; + + if( $this->world_size<=0 ) { + // This should never ever happen !! + JpGraphError::RaiseL(25074); + //("You have unfortunately stumbled upon a bug in JpGraph. It seems like the scale range is ".$this->world_size." [for ".$this->type." scale]
    Please report Bug #01 to info@jpgraph.net and include the script that gave this error. This problem could potentially be caused by trying to use \"illegal\" values in the input data arrays (like trying to send in strings or only NULL values) which causes the autoscaling to fail."); + } + + // scale_factor = number of pixels per world unit + $this->scale_factor=$this->world_abs_size/($this->world_size*1.0); + + // scale_abs = start and end points of scale in absolute pixels + $this->scale_abs=array($this->off,$this->off+$this->world_size*$this->scale_factor); + } + + + // Calculate number of ticks steps with a specific division + // $a is the divisor of 10**x to generate the first maj tick intervall + // $a=1, $b=2 give major ticks with multiple of 10, ...,0.1,1,10,... + // $a=5, $b=2 give major ticks with multiple of 2:s ...,0.2,2,20,... + // $a=2, $b=5 give major ticks with multiple of 5:s ...,0.5,5,50,... + // We return a vector of + // [$numsteps,$adjmin,$adjmax,$minstep,$majstep] + // If $majend==true then the first and last marks on the axis will be major + // labeled tick marks otherwise it will be adjusted to the closest min tick mark + function CalcTicks($maxsteps,$min,$max,$a,$b,$majend=true) { + $diff=$max-$min; + if( $diff==0 ) { + $ld=0; + } + else { + $ld=floor(log10($diff)); + } + + // Gravitate min towards zero if we are close + if( $min>0 && $min < pow(10,$ld) ) $min=0; + + //$majstep=pow(10,$ld-1)/$a; + $majstep=pow(10,$ld)/$a; + $minstep=$majstep/$b; + + $adjmax=ceil($max/$minstep)*$minstep; + $adjmin=floor($min/$minstep)*$minstep; + $adjdiff = $adjmax-$adjmin; + $numsteps=$adjdiff/$majstep; + + while( $numsteps>$maxsteps ) { + $majstep=pow(10,$ld)/$a; + $numsteps=$adjdiff/$majstep; + ++$ld; + } + + $minstep=$majstep/$b; + $adjmin=floor($min/$minstep)*$minstep; + $adjdiff = $adjmax-$adjmin; + if( $majend ) { + $adjmin = floor($min/$majstep)*$majstep; + $adjdiff = $adjmax-$adjmin; + $adjmax = ceil($adjdiff/$majstep)*$majstep+$adjmin; + } + else { + $adjmax=ceil($max/$minstep)*$minstep; + } + + return array($numsteps,$adjmin,$adjmax,$minstep,$majstep); + } + + function CalcTicksFreeze($maxsteps,$min,$max,$a,$b) { + // Same as CalcTicks but don't adjust min/max values + $diff=$max-$min; + if( $diff==0 ) { + $ld=0; + } + else { + $ld=floor(log10($diff)); + } + + //$majstep=pow(10,$ld-1)/$a; + $majstep=pow(10,$ld)/$a; + $minstep=$majstep/$b; + $numsteps=floor($diff/$majstep); + + while( $numsteps > $maxsteps ) { + $majstep=pow(10,$ld)/$a; + $numsteps=floor($diff/$majstep); + ++$ld; + } + $minstep=$majstep/$b; + return array($numsteps,$minstep,$majstep); + } + + + function IntCalcTicks($maxsteps,$min,$max,$a,$majend=true) { + $diff=$max-$min; + if( $diff==0 ) { + JpGraphError::RaiseL(25075);//('Can\'t automatically determine ticks since min==max.'); + } + else { + $ld=floor(log10($diff)); + } + + // Gravitate min towards zero if we are close + if( $min>0 && $min < pow(10,$ld) ) { + $min=0; + } + if( $ld == 0 ) { + $ld=1; + } + if( $a == 1 ) { + $majstep = 1; + } + else { + $majstep=pow(10,$ld)/$a; + } + $adjmax=ceil($max/$majstep)*$majstep; + + $adjmin=floor($min/$majstep)*$majstep; + $adjdiff = $adjmax-$adjmin; + $numsteps=$adjdiff/$majstep; + while( $numsteps>$maxsteps ) { + $majstep=pow(10,$ld)/$a; + $numsteps=$adjdiff/$majstep; + ++$ld; + } + + $adjmin=floor($min/$majstep)*$majstep; + $adjdiff = $adjmax-$adjmin; + if( $majend ) { + $adjmin = floor($min/$majstep)*$majstep; + $adjdiff = $adjmax-$adjmin; + $adjmax = ceil($adjdiff/$majstep)*$majstep+$adjmin; + } + else { + $adjmax=ceil($max/$majstep)*$majstep; + } + + return array($numsteps,$adjmin,$adjmax,$majstep); + } + + + function IntCalcTicksFreeze($maxsteps,$min,$max,$a) { + // Same as IntCalcTick but don't change min/max values + $diff=$max-$min; + if( $diff==0 ) { + JpGraphError::RaiseL(25075);//('Can\'t automatically determine ticks since min==max.'); + } + else { + $ld=floor(log10($diff)); + } + if( $ld == 0 ) { + $ld=1; + } + if( $a == 1 ) { + $majstep = 1; + } + else { + $majstep=pow(10,$ld)/$a; + } + + $numsteps=floor($diff/$majstep); + while( $numsteps > $maxsteps ) { + $majstep=pow(10,$ld)/$a; + $numsteps=floor($diff/$majstep); + ++$ld; + } + + return array($numsteps,$majstep); + } + + // Determine the minimum of three values witha weight for last value + function MatchMin3($a,$b,$c,$weight) { + if( $a < $b ) { + if( $a < ($c*$weight) ) { + return 1; // $a smallest + } + else { + return 3; // $c smallest + } + } + elseif( $b < ($c*$weight) ) { + return 2; // $b smallest + } + return 3; // $c smallest + } + + function __get($name) { + $variable_name = '_' . $name; + + if (isset($this->$variable_name)) { + return $this->$variable_name * SUPERSAMPLING_SCALE; + } else { + JpGraphError::RaiseL('25132', $name); + } + } + + function __set($name, $value) { + $this->{'_'.$name} = $value; + } +} // Class + + +//=================================================== +// CLASS DisplayValue +// Description: Used to print data values at data points +//=================================================== +class DisplayValue { + public $margin=5; + public $show=false; + public $valign='',$halign='center'; + public $format='%.1f',$negformat=''; + private $ff=FF_DEFAULT,$fs=FS_NORMAL,$fsize=8; + private $iFormCallback=''; + private $angle=0; + private $color='navy',$negcolor=''; + private $iHideZero=false; + public $txt=null; + + function __construct() { + $this->txt = new Text(); + } + + function Show($aFlag=true) { + $this->show=$aFlag; + } + + function SetColor($aColor,$aNegcolor='') { + $this->color = $aColor; + $this->negcolor = $aNegcolor; + } + + function SetFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=8) { + $this->ff=$aFontFamily; + $this->fs=$aFontStyle; + $this->fsize=$aFontSize; + } + + function ApplyFont($aImg) { + $aImg->SetFont($this->ff,$this->fs,$this->fsize); + } + + function SetMargin($aMargin) { + $this->margin = $aMargin; + } + + function SetAngle($aAngle) { + $this->angle = $aAngle; + } + + function SetAlign($aHAlign,$aVAlign='') { + $this->halign = $aHAlign; + $this->valign = $aVAlign; + } + + function SetFormat($aFormat,$aNegFormat='') { + $this->format= $aFormat; + $this->negformat= $aNegFormat; + } + + function SetFormatCallback($aFunc) { + $this->iFormCallback = $aFunc; + } + + function HideZero($aFlag=true) { + $this->iHideZero=$aFlag; + } + + function Stroke($img,$aVal,$x,$y) { + + if( $this->show ) + { + if( $this->negformat=='' ) { + $this->negformat=$this->format; + } + if( $this->negcolor=='' ) { + $this->negcolor=$this->color; + } + + if( $aVal===NULL || (is_string($aVal) && ($aVal=='' || $aVal=='-' || $aVal=='x' ) ) ) { + return; + } + + if( is_numeric($aVal) && $aVal==0 && $this->iHideZero ) { + return; + } + + // Since the value is used in different cirumstances we need to check what + // kind of formatting we shall use. For example, to display values in a line + // graph we simply display the formatted value, but in the case where the user + // has already specified a text string we don't fo anything. + if( $this->iFormCallback != '' ) { + $f = $this->iFormCallback; + $sval = call_user_func($f,$aVal); + } + elseif( is_numeric($aVal) ) { + if( $aVal >= 0 ) { + $sval=sprintf($this->format,$aVal); + } + else { + $sval=sprintf($this->negformat,$aVal); + } + } + else { + $sval=$aVal; + } + + $y = $y-sign($aVal)*$this->margin; + + $this->txt->Set($sval); + $this->txt->SetPos($x,$y); + $this->txt->SetFont($this->ff,$this->fs,$this->fsize); + if( $this->valign == '' ) { + if( $aVal >= 0 ) { + $valign = "bottom"; + } + else { + $valign = "top"; + } + } + else { + $valign = $this->valign; + } + $this->txt->Align($this->halign,$valign); + + $this->txt->SetOrientation($this->angle); + if( $aVal > 0 ) { + $this->txt->SetColor($this->color); + } + else { + $this->txt->SetColor($this->negcolor); + } + $this->txt->Stroke($img); + } + } +} + +//=================================================== +// CLASS Plot +// Description: Abstract base class for all concrete plot classes +//=================================================== +class Plot { + public $numpoints=0; + public $value; + public $legend=''; + public $coords=array(); + public $color='black'; + public $hidelegend=false; + public $line_weight=1; + public $csimtargets=array(),$csimwintargets=array(); // Array of targets for CSIM + public $csimareas=''; // Resultant CSIM area tags + public $csimalts=null; // ALT:s for corresponding target + public $legendcsimtarget='',$legendcsimwintarget=''; + public $legendcsimalt=''; + protected $weight=1; + protected $center=false; + + protected $inputValues; + protected $isRunningClear = false; + + function __construct($aDatay,$aDatax=false) { + $this->numpoints = count($aDatay); + if( $this->numpoints==0 ) { + JpGraphError::RaiseL(25121);//("Empty input data array specified for plot. Must have at least one data point."); + } + + if (!$this->isRunningClear) { + $this->inputValues = array(); + $this->inputValues['aDatay'] = $aDatay; + $this->inputValues['aDatax'] = $aDatax; + } + + $this->coords[0]=$aDatay; + if( is_array($aDatax) ) { + $this->coords[1]=$aDatax; + $n = count($aDatax); + for( $i=0; $i < $n; ++$i ) { + if( !is_numeric($aDatax[$i]) ) { + JpGraphError::RaiseL(25070); + } + } + } + $this->value = new DisplayValue(); + } + + // Stroke the plot + // "virtual" function which must be implemented by + // the subclasses + function Stroke($aImg,$aXScale,$aYScale) { + JpGraphError::RaiseL(25122);//("JpGraph: Stroke() must be implemented by concrete subclass to class Plot"); + } + + function HideLegend($f=true) { + $this->hidelegend = $f; + } + + function DoLegend($graph) { + if( !$this->hidelegend ) + $this->Legend($graph); + } + + function StrokeDataValue($img,$aVal,$x,$y) { + $this->value->Stroke($img,$aVal,$x,$y); + } + + // Set href targets for CSIM + function SetCSIMTargets($aTargets,$aAlts='',$aWinTargets='') { + $this->csimtargets=$aTargets; + $this->csimwintargets=$aWinTargets; + $this->csimalts=$aAlts; + } + + // Get all created areas + function GetCSIMareas() { + return $this->csimareas; + } + + // "Virtual" function which gets called before any scale + // or axis are stroked used to do any plot specific adjustment + function PreStrokeAdjust($aGraph) { + if( substr($aGraph->axtype,0,4) == "text" && (isset($this->coords[1])) ) { + JpGraphError::RaiseL(25123);//("JpGraph: You can't use a text X-scale with specified X-coords. Use a \"int\" or \"lin\" scale instead."); + } + return true; + } + + // Virtual function to the the concrete plot class to make any changes to the graph + // and scale before the stroke process begins + function PreScaleSetup($aGraph) { + // Empty + } + + // Get minimum values in plot + function Min() { + if( isset($this->coords[1]) ) { + $x=$this->coords[1]; + } + else { + $x=''; + } + if( $x != '' && count($x) > 0 ) { + $xm=min($x); + } + else { + $xm=0; + } + $y=$this->coords[0]; + $cnt = count($y); + if( $cnt > 0 ) { + $i=0; + while( $i<$cnt && !is_numeric($ym=$y[$i]) ) { + $i++; + } + while( $i < $cnt) { + if( is_numeric($y[$i]) ) { + $ym=min($ym,$y[$i]); + } + ++$i; + } + } + else { + $ym=''; + } + return array($xm,$ym); + } + + // Get maximum value in plot + function Max() { + if( isset($this->coords[1]) ) { + $x=$this->coords[1]; + } + else { + $x=''; + } + + if( $x!='' && count($x) > 0 ) { + $xm=max($x); + } + else { + $xm = $this->numpoints-1; + } + $y=$this->coords[0]; + if( count($y) > 0 ) { + $cnt = count($y); + $i=0; + while( $i<$cnt && !is_numeric($ym=$y[$i]) ) { + $i++; + } + while( $i < $cnt ) { + if( is_numeric($y[$i]) ) { + $ym=max($ym,$y[$i]); + } + ++$i; + } + } + else { + $ym=''; + } + return array($xm,$ym); + } + + function SetColor($aColor) { + $this->color=$aColor; + } + + function SetLegend($aLegend,$aCSIM='',$aCSIMAlt='',$aCSIMWinTarget='') { + $this->legend = $aLegend; + $this->legendcsimtarget = $aCSIM; + $this->legendcsimwintarget = $aCSIMWinTarget; + $this->legendcsimalt = $aCSIMAlt; + } + + function SetWeight($aWeight) { + $this->weight=$aWeight; + } + + function SetLineWeight($aWeight=1) { + $this->line_weight=$aWeight; + } + + function SetCenter($aCenter=true) { + $this->center = $aCenter; + } + + // This method gets called by Graph class to plot anything that should go + // into the margin after the margin color has been set. + function StrokeMargin($aImg) { + return true; + } + + // Framework function the chance for each plot class to set a legend + function Legend($aGraph) { + if( $this->legend != '' ) { + $aGraph->legend->Add($this->legend,$this->color,'',0,$this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + } + + function Clear() { + $this->isRunningClear = true; + Plot::__construct($this->inputValues['aDatay'], $this->inputValues['aDatax']); + $this->isRunningClear = false; + } + +} // Class + + +// Provide a deterministic list of new colors whenever the getColor() method +// is called. Used to automatically set colors of plots. +class ColorFactory { + + static private $iIdx = 0; + static private $iColorList = array( + 'black', + 'blue', + 'orange', + 'darkgreen', + 'red', + 'AntiqueWhite3', + 'aquamarine3', + 'azure4', + 'brown', + 'cadetblue3', + 'chartreuse4', + 'chocolate', + 'darkblue', + 'darkgoldenrod3', + 'darkorchid3', + 'darksalmon', + 'darkseagreen4', + 'deepskyblue2', + 'dodgerblue4', + 'gold3', + 'hotpink', + 'lawngreen', + 'lightcoral', + 'lightpink3', + 'lightseagreen', + 'lightslateblue', + 'mediumpurple', + 'olivedrab', + 'orangered1', + 'peru', + 'slategray', + 'yellow4', + 'springgreen2'); + static private $iNum = 33; + + static function getColor() { + if( ColorFactory::$iIdx >= ColorFactory::$iNum ) + ColorFactory::$iIdx = 0; + return ColorFactory::$iColorList[ColorFactory::$iIdx++]; + } + +} + +// +?> diff --git a/Societes/ric/jpgraph/jpgraph_antispam-digits.php b/Societes/ric/jpgraph/jpgraph_antispam-digits.php new file mode 100755 index 00000000..d9d350ca --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_antispam-digits.php @@ -0,0 +1,205 @@ +digits['6'][0]= 645 ; + $this->digits['6'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAEBAAMBAAAAAAAAAAAAAAAABgMEBwX/xAAvEAABAwMC'. + 'BAQEBwAAAAAAAAABAgMEAAURBiESIjFRBxMUQRUWMmFTYnGRkrHC/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFhEBAQEAAAAA'. + 'AAAAAAAAAAAAAAER/9oADAMBAAIRAxEAPwDslwiR3oDku8ONttsAvDiVyMcO/ET7ke5/aoOz6k1Vr5htNjW7a7M1yO3NTQU9JUDu'. + 'GgrlSn8xyf6p4gXaHJvNps9/mKZtSkGdMjRwpfqAFBLLACRlZUrJONsI2717No1lbZ10kx7XGnRpKWQ/6GVGMfzEJ5VFIVtsOH6e'. + 'wyKVhYsia0y22pLThSkJK1uniVgdThOM0ol+StIUhpopIyCFq3H8aUVCwnG3PGe4Rp6fLXJtMdyM0ojcIWvIz3HFnAPfrWTXb6GN'. + 'WaLXDwZjVz8pKEfhuIUFg/bAz9sVJ61nt61mxJFslLtq7e5yPqiBT4UDklKw4MDpt+u+9bFiu9riXNu83R+fcr6tohuQ5HQhmK37'. + 'paaC8DruScmg6X8KkjZEhbaB9KEyFYSOw26Uqd+e7Qerl5z74DY/1SomP//Z' ; + + //========================================================== + // d2-small.jpg + //========================================================== + $this->digits['2'][0]= 606 ; + $this->digits['2'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEQMBIgACEQEDEQH/xAAYAAEBAQEBAAAAAAAAAAAAAAAFAAQHAv/EACsQAAEDBAEC'. + 'BAYDAAAAAAAAAAIBAwQABQYRIRIxQVFhcQcTFSJSU5GU0f/EABcBAAMBAAAAAAAAAAAAAAAAAAECAwT/xAAZEQACAwEAAAAAAAAA'. + 'AAAAAAAAARESUUH/2gAMAwEAAhEDEQA/AOqXm/Q8dxmOL4PPSnCSNFixx6nXnkXgRT3Te17JWbGsveueSyLZdbPItNxOKLzTLjou'. + 'gYCSoSoY8ISKSbFeUrzkdlnTL1YshskiErkQnFEZaF8kkdBBVdjyi6RNL5+9F486eS/ECVkcBtDt1vZcho5viS8ZCp9C9tAIAm/F'. + 'VoPRU+HRtJ5JVRP1kP0PfwP+1VKrHBMliXG4Nw8VgE4xGkuqk2S1wTUNEVdIvgpL9iL6KtNxY7WOwo9tt0RCitj0sR2uCbFPPzH1'. + '7+6rRuSRcljMBMsUy2tky045KOawZk5xtEFBJEROO3hx61kh2rPCIX3MhsyC4QmfTbC6lH8dq5212qwkiG5H6Y/9R2qm+ofxqqsL'. + 'DLZ6f//Z' ; + + //========================================================== + // d9-small.jpg + //========================================================== + $this->digits['9'][0]= 680 ; + $this->digits['9'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABAUGBwP/xAArEAABAwMD'. + 'AgYBBQAAAAAAAAABAgMEBQYRABIhE1EUIjEzQUIHMlJhcdH/xAAWAQEBAQAAAAAAAAAAAAAAAAACAQD/xAAYEQEAAwEAAAAAAAAA'. + 'AAAAAAAAAREhQf/aAAwDAQACEQMRAD8AkK7brF6X7XpMeGoKhFMLEeT4ZUheEhanF4OcZ2pTgDykk92bZpdCsi7aezLjxkIPUZiV'. + 'RSCy8hah7EkZ27yM7V+iscal5bE22Lon1qNDmSKROd8Sl+Ix1lMOlIS4HGgQpbStoUCnlJz8HmsXtW3Lst2rmBAelLMRRekOwnYz'. + 'Edls9QKKnOVLyk7UgcbzzrdBthqEJJwZbAI4x1U/7o1TaFa9lG36aXaZTy54VrcXUgrzsGdx+T30aNydweqVw1GS87T6Lb86Q4ha'. + 'my/IAYjZBx+snKk99oOQMf1AViE65SY348hzFy6hPKnqtKz7DC1lbqyPrvJKUJ7H+M6Wrt3InP7o1brFNp4bCDGhxGAsqz69VSiQ'. + 'ORwBxrrQ7itm1ac7Hp0WoGTIc3PSn0pccdcP2WorycfA1RaRHjxosZqOyhtDTSAhCf2gDAGjVHTd9sKSCumynFEZK1tIJUe58/ro'. + '1V1//9k=' ; + + //========================================================== + // d5-small.jpg + //========================================================== + $this->digits['5'][0]= 632 ; + $this->digits['5'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABgIFBwT/xAAoEAABAwME'. + 'AQQCAwAAAAAAAAABAgMEBQYRABIhIkEUMVFhBxNCgaH/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAv/EABcRAQEBAQAAAAAAAAAAAAAA'. + 'AAABEUH/2gAMAwEAAhEDEQA/ANGvW4YVOeiRX5b4mv5Sin05IdlupPKdo/j2SO3+6TbPNQvOsTVz33KRT4csR3YUF7Dsh5OSFvug'. + 'kqG4FPBxnjxpvvi4KZb1pTpU+QwxUi2Y7ZIAefUk5ATxnB9/gbtL/wCH1UpuhPUlZlMVaQ0mS8zJjqZOPfc2TwpIUonI9tw40R1r'. + 'WNGq/wBdJR1XT3lqHBUnGCfkfWjRWs1ve249erQqQYjOtN1FqPUpCXQ4WIzQSsJwT0UpRwQPG0nzqyuNHobjsl9kBuWqoOoXtT1/'. + 'WppZcA8lKRj64HxqU+3KpAr6plElRVKef3S4E0K9O8pLXVzKcqSsJAB9wSAca6bSoNXeuA1+5pEV+SGFNU1iKVFqI0Vdx2AJUeoz'. + '8DGlTDwG3CAf3q/pI0ah6MDhLz6U+EpXwPoaNMU//9k=' ; + + //========================================================== + // d1-small.jpg + //========================================================== + $this->digits['1'][0]= 646 ; + $this->digits['1'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEwMBIgACEQEDEQH/xAAZAAADAAMAAAAAAAAAAAAAAAAABQYCBAf/xAApEAACAQMD'. + 'AwQBBQAAAAAAAAABAgMEBREABiESMUEHEyJRkSNCYXGB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFxEBAQEBAAAAAAAAAAAA'. + 'AAAAAAEREv/aAAwDAQACEQMRAD8A6jdd4WLbstILnc4Uq0VoWpkJknb6IjXLHJUePOlez923fcW4r1SxWlqC2UbdKirQif3Xw3yA'. + 'OFAGT09/kO3OmV3a20MFRf6lIYPcpy7yRRAzgxjIy2M8YwcdiBzpX6d22VNvUlTXsFkuwkrKqNSfnK7F8OTzwrAY+l5zoxKskudN'. + 'EgQPUT9PBkWF3DH+1GPxo1mLnRoAqF2VRgGOFmX/AAgY/GjRUP6hVMFv2FuFqUvUGrpDFJMBnpdyF5bsAQew7Hxzp6LZNT0yQ1DI'. + 'wp0QCFBhD0jCsfLZHxbx5xxpTuvb1+v9PV7Ztk9roLPLCjmSSN3mX5ZwqjCgZX7PfWxDQb2in96pv9qq46aTE0bW4x9ceAWAYPwS'. + 'PsYzoixgmheBGjIVcYCnjp/jHjHbRpe1JLn9OnopE/a0ykvjwDx47aNMXqP/2Q==' ; + + //========================================================== + // d8-small.jpg + //========================================================== + $this->digits['8'][0]= 694 ; + $this->digits['8'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AFQMBIgACEQEDEQH/xAAYAAADAQEAAAAAAAAAAAAAAAAABgcEBf/EACsQAAEDAwMD'. + 'AwMFAAAAAAAAAAECAwQFBhEAEiEUMVEHE0EVYYEiIzJCsf/EABYBAQEBAAAAAAAAAAAAAAAAAAIAAf/EABcRAQEBAQAAAAAAAAAA'. + 'AAAAAAABERL/2gAMAwEAAhEDEQA/AKL6gVVUa0i1T5QjvTprUJMlxW4R9zgQXe/AH+kaWrntqlWjaq7gpcmotXAw82ht9yY4tch8'. + 'uAFC0k7VBXPGMY51ruiaue+bThIj+7NbWqS+7HDxajFf6AlB/k44o8ZOABk4xkL0X0tZiojKrlRuGRJjugqldSlKGf6t7BuUQe3J'. + '44xxxrA1a4KVJipLidri8uLHgqOcfjOPxo0o2hdDvS1CmV2Yl6fS5ioipIQR1CAlKkLKR2UUqAI8g6NRSwuuyHab6s1ufLI/Zai7'. + 'UBJOxhTS0+6B32pWSFH4CidOdWU0ukLiN1BLr0zG5Sdm3GRvcPhIT858DvjXNrVsSLnm/VIdTXS6tTnFsxZTSN3jchaTwps+O/z9'. + 'tcBVq3hIX0tYqlIiQHdy5CqRHKHXEjAOMgBKjnvyRk4xrQa7OiGt1K5biYZL8SoVEpjOqkFsONtJCNwASeCQrn7aNUKnQYtLp7EC'. + 'EylmLHQltptPZKQOBo1FzH//2Q==' ; + + //========================================================== + // d4-small.jpg + //========================================================== + $this->digits['4'][0]= 643 ; + $this->digits['4'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAYAAADAQEAAAAAAAAAAAAAAAAABAYHAv/EAC0QAAIBAwQA'. + 'BAMJAAAAAAAAAAECAwQFEQAGEiETFDFBUmGBByIjUVNxobHR/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAIB/8QAGBEBAAMBAAAAAAAA'. + 'AAAAAAAAAAERIVH/2gAMAwEAAhEDEQA/ANjM00Nxmt1xiWW31CZp5uJwoAAaOQ/n7qfcZHqO5my3q5XX7R6ijiqnNut9u4NyJ4yv'. + 'JJyjYr8Xhrn5g599J7x3ulBNU7Zo7dXXXcLQ8kURYi4epYtkALjOePv1nUvbLvV7P3BZm3DR3eh88Kp7pVzBZI6iUhGWRRGWwE44'. + 'HX3V+uiL1uHgt+vL/H+aNJQ3CSeCOaFqSaJ1DJKs/TqRkMOvQjvRorHE4pRDLNWLGlRHGUeYIORXs9e5B7OP31E0fmdyb/t0DJ4Q'. + '27bfx3YZzPUIoAAz7IpOD6cuxq0uNumqLfVNDOqXBoZEjnZcqhIPXH4c46+WkdoWOltu3IDDLLLVVR83UVcuPEmmcZZ2/rHoAANG'. + 'GI7KIY1ijoLeEQBVCwIoAHpgY6Hy0aZe7mJ2jeHLKcEhusj6aNKgzr//2Q==' ; + + //========================================================== + // d7-small.jpg + //========================================================== + $this->digits['7'][0]= 658 ; + $this->digits['7'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABgEFBwT/xAAuEAABAwIE'. + 'BAQGAwAAAAAAAAABAgMEBREABiExEhMiQSMyUXEHFBclVJFhk9L/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/8QAGREBAQEAAwAA'. + 'AAAAAAAAAAAAAAEREiFR/9oADAMBAAIRAxEAPwDXq9mCjZeQ05VZ5ZST4bfEpa3VdglCbqUe+g9MZ5Uq7V8415WXoMSdQ6etgSps'. + '19wpkCMDZKUpv0FZvbi1NzpYasMDLDUbMVXrtQdbeeU23xLWkj5RlLYK0J7anW9gbAjCzkOtsVSUJUdtc6dVZK51UeaFm4LKbhpC'. + 'l7EhIFkDW974GbRI2XorUVls1OTdKAOqUpR0Hc3198GITQ6k+hLwrEpoODiDenRfW23bBicg78JXxPpD0mgVOW5PAivNNpahsPW5'. + '8xxQaSVkboQnhsnYm5OHqDGp1IpsalMKjMsMIC3+XZKbJFth62/QOEfMOZqZXp9JcKZTcGmTky3meSi7xQklI81vMR+sXIz/AEgp'. + 'Q0qPNu6ea8Q2jqtbp8+2w9h/OKORc/cpHjt1dDSHOtLZ4ekHW23bBjj+o9H/AB539aP94MG0+L//2Q==' ; + + //========================================================== + // d3-small.jpg + //========================================================== + $this->digits['3'][0]= 662 ; + $this->digits['3'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABAUGBwL/xAArEAABBAED'. + 'AwMDBQEAAAAAAAABAgMEBREABhIhMUEiMmETFZEHFkJDUdH/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAL/xAAYEQEBAQEBAAAAAAAA'. + 'AAAAAAAAEQExQf/aAAwDAQACEQMRAD8A0vclruBdk3VVLLUNssGRJsZSCtqOjlgJAHvcOD6c4HnOdIbcttw1W5P29cFEhuawqTXS'. + 'VsJjnCMBxKkJJx7goAde+ceJfdNxU0UNlyymyXHi6kxWUNl1S3EnkAEIHX2nv86qtTuZr9Q9+1VhRsOoYpYcgSVyAE/TdewkJxnK'. + 'sBCjkdPGpnOtFMd3PqsXgfOAgD8Y0aX+11H9rDDjn8lr9yj5J+dGqsqxaw6Cc9cQZU4Sp7zTJsIrKlcUEKwhSin1JABI45GUjqOu'. + 'lbOvjbc3Ts9ynjGCy445UuFLYRzbWgrT6fhSCQSMDke+pew2zYVly/d7YchNqkMJZnQpgV9J8IzwWFJyUrAJHYgjvpLbu37G5nR7'. + 'vck5C3YRKYEOEVJZj8kjKypXqWvirjk9h+dB9i4faa89TDZUfKlIyT8k+To10a6KTkpcJ/0vL/7o0TS//9k=' ; + } +} + +class AntiSpam { + + private $iNumber=''; + + function __construct($aNumber='') { + $this->iNumber = $aNumber; + } + + function Rand($aLen) { + $d=''; + for($i=0; $i < $aLen; ++$i) { + $d .= rand(1,9); + } + $this->iNumber = $d; + return $d; + } + + function Stroke() { + + $n=strlen($this->iNumber); + for($i=0; $i < $n; ++$i ) { + if( !is_numeric($this->iNumber[$i]) || $this->iNumber[$i]==0 ) { + return false; + } + } + + $dd = new HandDigits(); + $n = strlen($this->iNumber); + $img = @imagecreatetruecolor($n*$dd->iWidth, $dd->iHeight); + if( $img < 1 ) { + return false; + } + $start=0; + for($i=0; $i < $n; ++$i ) { + $size = $dd->digits[$this->iNumber[$i]][0]; + $dimg = imagecreatefromstring(base64_decode($dd->digits[$this->iNumber[$i]][1])); + imagecopy($img,$dimg,$start,0,0,0,imagesx($dimg), $dd->iHeight); + $start += imagesx($dimg); + } + $resimg = @imagecreatetruecolor($start+4, $dd->iHeight+4); + if( $resimg < 1 ) { + return false; + } + imagecopy($resimg,$img,2,2,0,0,$start, $dd->iHeight); + header("Content-type: image/jpeg"); + imagejpeg($resimg); + return true; + } +} + +?> diff --git a/Societes/ric/jpgraph/jpgraph_antispam.php b/Societes/ric/jpgraph/jpgraph_antispam.php new file mode 100755 index 00000000..7998df28 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_antispam.php @@ -0,0 +1,615 @@ +chars['j'][0]= 658 ; + $this->chars['j'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABUDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAUGBAf/xAAsEAACAQMDAwMBCQAAAAAAAAAB'. +'AgMEBREAEjEGIUEUUXGBBxMVIiNSYWKC/8QAFgEBAQEAAAAAAAAAAAAAAAAAAwEC/8QAGhEAAwADAQAAAAAAAAAAAAAAAAECERIh'. +'Mv/aAAwDAQACEQMRAD8A6veK2st8zRWSyV1dUBfvHaGVI4hknsS7AFv4AyM57ayWbqeS+11xtT2etttwo4YqhEqnQs5bcAfyk4AZ'. +'SOeD441TKRTyingUBG4/ah8j684+dSFzh/BvtaslejMUu9DPQTDnLx4lQ/ONw1TGBm0jdRWqguEMghEisWilgDmNs4Ze+MEEEH40'. +'aUVFTa7JeLjRXu4GjhmnNbSfqFQVlA3rkckOjH/Q99Glmkl0C/Q06pvsvT9vttXHDF6T1KrWbs5gRgQJM+FDlQxPhjpF1XcVq+qe'. +'jEoKiOecXBqh2TDDYIXLKuP6549xk8auI6aJqV45oknWdNswkAIkGMYIxjGO2NR1F0LZY5qkWqkS1xrM0M8lMSJpY+TGrnJiQ577'. +'cEgeNHhi7D3qC3UN69M8tIakRhgrh9o748+eNGtcCiKjjpkQKlMTEg3ZwoxtHHtgfTRpYXArvp//2Q==' ; + + //========================================================== + // lf-small.jpg + //========================================================== + $this->chars['f'][0]= 633 ; + $this->chars['f'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQFBgcC/8QAKxAAAgEDAwMCBQUAAAAAAAAA'. +'AQIDBBEhAAUGEjFBEyIHFFFhoRUzYnGS/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQP/xAAaEQACAwEBAAAAAAAAAAAAAAAAAQIRMRIh'. +'/9oADAMBAAIRAxEAPwDcnmLoIkiSYsouC3tA++O2lU9WkqVjJ+YdhZLsQI/4/YfQm50kZP0vbmaCSU0SRNIH6sghb9INs3t38dvp'. +'akUuz8x5DwdN5peS1jV1dSipSiVUigIcdQjQ26lIB/c6r3F86SZpE/zCFJaqsihQNhRgdj3Jyfxo0jDSbXHt9Oph9RAoV3qJGltY'. +'HDOxyb/nRpV0D3RXle21m48XraOk3IUSemUaV4g4Zc9ShcDtgff+tQfwvjq34Dtku7buamFqeJKemCCMxKFsEJU+/FrX8d76sEHG'. +'aNItzr4usVNdG3S0rmRYAVwEUmyjyQLZ11x7aF4zs9DQOyzml29I2cLa/pixIHi99DFCtU9dFuLIaijo9qiYPmR2mZmB9thgAHOD'. +'4+mjUrURyrUNMZFEkkIOFuFAbsP9d/OjVIQ6Vh4tP//Z' ; + + //========================================================== + // lb-small.jpg + //========================================================== + $this->chars['b'][0]= 645 ; + $this->chars['b'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABUDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAYCAwUH/8QAKxAAAQMDAwMDAwUAAAAAAAAA'. +'AQIDBAAFEQYSIRMxUSJBYQcVI2JxgqHw/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQL/xAAYEQEBAQEBAAAAAAAAAAAAAAAAATERYf/a'. +'AAwDAQACEQMRAD8A6H95mxNYwLXcX+pCuilSLXJ6YSplaUELjqxwe4IJ5PIPamJ2V0bPcS7+NxCX1cHggAnIP+xSd9RyzHh2m7FQ'. +'Q1CvMNQWTjCt+HFD+PB/Y1fI1PL1HFFt0zaGblFdJQ9cJjpZiqPJUlBAKnPcEpGB5NNRKdrOl1NlgiQol4R2w4Sc5VtGf7opZteo'. +'LhdorjUSM5FnQnlR50NeHQysYxtVxlJHIPgjtRRD3xkaghs6juumdHz4+Y7RVPnt59K2mk7W+fcKWsZ7djTXMkW+xMP3GRJjwIEN'. +'HTG/CWx5wPY8AADx2NYk3SL9wukvUjGobnBkORksIbjdMANozgEqSo8qJPGO/wAVO36IsjUmBIfZfuM7epZk3F9UhSSk5O0K9Kcq'. +'8AcU3UzFuhUSBFud6nRXoz96mqmJZWg7m2dqUNhWBwdqQSP1UU5c/FFCn//Z' ; + + //========================================================== + // d6-small.jpg + //========================================================== + $this->chars['6'][0]= 645 ; + $this->chars['6'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAEBAAMBAAAAAAAAAAAAAAAABgMEBwX/xAAvEAABAwMC'. +'BAQEBwAAAAAAAAABAgMEAAURBiESIjFRBxMUQRUWMmFTYnGRkrHC/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFhEBAQEAAAAA'. +'AAAAAAAAAAAAAAER/9oADAMBAAIRAxEAPwDslwiR3oDku8ONttsAvDiVyMcO/ET7ke5/aoOz6k1Vr5htNjW7a7M1yO3NTQU9JUDu'. +'GgrlSn8xyf6p4gXaHJvNps9/mKZtSkGdMjRwpfqAFBLLACRlZUrJONsI2717No1lbZ10kx7XGnRpKWQ/6GVGMfzEJ5VFIVtsOH6e'. +'wyKVhYsia0y22pLThSkJK1uniVgdThOM0ol+StIUhpopIyCFq3H8aUVCwnG3PGe4Rp6fLXJtMdyM0ojcIWvIz3HFnAPfrWTXb6GN'. +'WaLXDwZjVz8pKEfhuIUFg/bAz9sVJ61nt61mxJFslLtq7e5yPqiBT4UDklKw4MDpt+u+9bFiu9riXNu83R+fcr6tohuQ5HQhmK37'. +'paaC8DruScmg6X8KkjZEhbaB9KEyFYSOw26Uqd+e7Qerl5z74DY/1SomP//Z' ; + + //========================================================== + // lx-small.jpg + //========================================================== + $this->chars['x'][0]= 650 ; + $this->chars['x'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABMDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAUHBgj/xAApEAABAwMDAwQCAwAAAAAAAAAB'. +'AgMEBQYRACFBBxIxFCJRgRNxkcHw/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAMAwEA'. +'AhEDEQA/AH9t3pKvO14UykVARa/HfAlxlDKXR24V2p3z7RlPwdtMep91uWdRGHWELjuTFFtLvcC4SNznnH+21O7ttiodOq1BvC0E'. +'p9I0lSX2kgqCSklK+5PKCMAng6zV2XRO6u3lSIURtbDRShltlZHa0tW7q/0MeTwnjxq1Jiw2xc9xTLbhSVU5iaXUFfqFFILgJOCd'. +'9Gt3SXabR6REpkL8yo0RpLCFNx1qBCRjOQMHxo0pEr6o3um2LVYpMEpTVqg25lHn08dfcB9kEgfZ1LIFDuawqZRb7aQlLTzqglsg'. +'9wQdveOEqBIB425xqhQuk8qo9UKlPrlRblw2ZBeCSVKW6CcoSrI2AGOT41SKzT4dYtmdS5bIXDZhNoWgbZJ94x8AYT/GkM03oNUc'. +'uKgwqtTZDTMOU0FttqRkoHggnPkEEHRrkJ6t1SlSHYUOc6zHaWrsbQrATk5/vRqK/9k=' ; + + //========================================================== + // d2-small.jpg + //========================================================== + $this->chars['2'][0]= 606 ; + $this->chars['2'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEQMBIgACEQEDEQH/xAAYAAEBAQEBAAAAAAAAAAAAAAAFAAQHAv/EACsQAAEDBAEC'. +'BAYDAAAAAAAAAAIBAwQABQYRIRIxQVFhcQcTFSJSU5GU0f/EABcBAAMBAAAAAAAAAAAAAAAAAAECAwT/xAAZEQACAwEAAAAAAAAA'. +'AAAAAAAAARESUUH/2gAMAwEAAhEDEQA/AOqXm/Q8dxmOL4PPSnCSNFixx6nXnkXgRT3Te17JWbGsveueSyLZdbPItNxOKLzTLjou'. +'gYCSoSoY8ISKSbFeUrzkdlnTL1YshskiErkQnFEZaF8kkdBBVdjyi6RNL5+9F486eS/ECVkcBtDt1vZcho5viS8ZCp9C9tAIAm/F'. +'VoPRU+HRtJ5JVRP1kP0PfwP+1VKrHBMliXG4Nw8VgE4xGkuqk2S1wTUNEVdIvgpL9iL6KtNxY7WOwo9tt0RCitj0sR2uCbFPPzH1'. +'7+6rRuSRcljMBMsUy2tky045KOawZk5xtEFBJEROO3hx61kh2rPCIX3MhsyC4QmfTbC6lH8dq5212qwkiG5H6Y/9R2qm+ofxqqsL'. +'DLZ6f//Z' ; + + //========================================================== + // lm-small.jpg + //========================================================== + $this->chars['m'][0]= 649 ; + $this->chars['m'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAcDBAUCBv/EAC0QAAICAQMCBAMJAAAAAAAA'. +'AAECAwQRAAUSBiETMVFhB2KhFSIyQVJxgZHB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAgED/8QAGREBAQEAAwAAAAAAAAAAAAAAAQAR'. +'EiEx/9oADAMBAAIRAxEAPwB0MI2lIdgI0Cly3kFXLEn2zx1FDdp7rbpbjUtRWKio3hyxOGQllJzkegX66rQ2qW87Zuk9S5FNVmru'. +'iywyBhjDKTkeXfSr+GRfYtq2KAO32b1BGxAZu0dyJ2DKPTxY1wPddVszycUq2Golq8jRWbcnJWwCVGMjz+VQP50atxMtm2ZUOY4l'. +'4qfUnBP0x/Z0amy4jJm10Tt2yddWasFmfaRfdrlG3UcgArnxKzJ+Fu4DqCMkcgNem2DoWav8PLfTm+FPEkuSNTnqueS5bnHIv6CG'. +'LNjJwM99bm67NB1Ht89KSxNXnr2hNDbiUc47K4KyD2GQMfmMjUnS+7vuIktTqPCaaWCqAMMojPFyw8hyYMQBnAwNJHYGXPTsW9VN'. +'jg2zf50W9zk524GAEihuz+xbIOD82jW5TkjtRPZkTkJ+4VgDhQfuj/f3OjUxl1f/2Q==' ; + + //========================================================== + // lt-small.jpg + //========================================================== + $this->chars['t'][0]= 648 ; + $this->chars['t'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQDBQYH/8QAJxAAAQMDAgYDAQEAAAAAAAAA'. +'AQIDBAUGEQASEyExQVFhIjJxFSP/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAP/xAAZEQADAQEBAAAAAAAAAAAAAAAAAREhMUH/2gAM'. +'AwEAAhEDEQA/AO4BLEiEy7uG4IGxxs5IOOx76wd2XYidSp1HoD70240gcNNPbDyI6wQQpaz8E9MczkdhqtbsKYLieDk6WLKmZmmL'. +'Hk7AHVkbkLI+RQc7uRxgkfr1tx2rGu6VbToLVKkhU+kbugGf9WfaknCk5ycaX0zmaa+3JkqvW/CmzojsB9xoF6OoFK0r6HOcEDI0'. +'aefTuKX5ScMdC14HYq8n12zo1DEUcKTGg1Z+hyBwoPBVIiA/VQyOIgedhUCB4WMfXSV3UufVLcTUIqVf26K6mXDbPVRRzKT54iMg'. +'+zjtq6mtsyJjclxpKlUhSXEbkgkqWnBx4+J5e/zU0pZemPvJJQzEPDfQOrwwFY9AZ5eeYPLV6FwhoFYZuigxpkJeIjqAeIoAk9wA'. +'D46EnuD+6Nc1smDNrTlRkxqtMo1vzKhIdYgU9YDqVpISrLhHxSSd21I0aYyqP//Z' ; + + //========================================================== + // li-small.jpg + //========================================================== + $this->chars['i'][0]= 639 ; + $this->chars['i'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABYDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAABwAGBP/EACcQAAEEAQMEAgIDAAAAAAAAAAEC'. +'AwQRBQAGEiExQVEHExSBFWFx/8QAFgEBAQEAAAAAAAAAAAAAAAAAAgMB/8QAGBEBAQEBAQAAAAAAAAAAAAAAAAECMRH/2gAMAwEA'. +'AhEDEQA/AE7c+5M9BeRG29t1WUfKFFYW+GvrI7WD3B9g140YD5T36rcErDjbUR6dCBdejsKUpxITXI2FUrooCh70yvxzHyIlMvuK'. +'eVSH7IKEpJoKqu/ahddLryR/aMiO187bsmrWShhp1AZS2XHHrWhNJrzdf7f7GiVcHk3sptmHkJcJ2DIftS2FrKlJPXudWuLGYeQp'. +'t2fmEIckqIZaaKuSGG0lQ4gduRoFRHQ9AOgs2lOJbk9aSUlpjGvAWeSVH2VKq/2dFPw3IjyJe8s281ct3I9UoHJXGiQkD2STrSZ7'. +'Yf8AOl7JTdw5eOCz0jw3+LbYCfA9nz71msb8KMxoTGTw+5srjsipAdDqFBQBIuiOl6KrdYyJMyTCshlw2G3Fr/HiNqNNAqJJUoGl'. +'KND+h47km1bZwsvCbYYjycxIyK1qDv2yEi0hQviK8atKDcy9j//Z' ; + + + //========================================================== + // lp-small.jpg + //========================================================== + $this->chars['p'][0]= 700 ; + $this->chars['p'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGgAAAQUBAAAAAAAAAAAAAAAAAAECBAUGB//EAC8QAAEDAwMCBAMJAAAAAAAA'. +'AAECAwQFESEABhIiMRMVUWEHFEEWIzIzcYGRocH/xAAWAQEBAQAAAAAAAAAAAAAAAAADAgH/xAAcEQACAgIDAAAAAAAAAAAAAAAA'. +'AQIxAxESIUH/2gAMAwEAAhEDEQA/AOh703xG21DMeOyqoVNDjSzERiwU6Ep5qtZNycA97HTF13d33KWtmlt9xwkLl1NkXVxIuQgK'. +'wLj+hqBvel0qmbR8GnR22nJNZiLeeKr8nDIT1OLJucX+uPbWom7iocRpafOac5MX1ALltp/Cbi+cJH++utdh+WVNL3PNdNYpdWgx'. +'Y0qmLZSrwJJcQoOJ5XKlJFu4HbJOjVbt+V5nu7eopNRivqcdhK+bFnWwA1Y2AOcgjvj9dGlxy0g5y0xd+hNXoG24C4obizq3HZUh'. +'YHqtRHD06bG/8a0MbbG1mqekxaBSGmgkrcdcitlLfrckZIz7DUatbeFak0tyRLUwzT5vmiGm0cufEkFBJItfkD+59tKmiO12atFa'. +'eQukO3ejUxgENqTcfnE5WbkHiOnJ76N2IqI1DibabptS+zkZhtp90F2Y0S026EkAFK/qL46cXv65NVZDfxHmVCK4DE2/RX/lRFbA'. +'C5LwAyq2EtpHZI7mxPYDRqoctdESimz/2Q==' ; + + //========================================================== + // le-small.jpg + //========================================================== + $this->chars['e'][0]= 700 ; + $this->chars['e'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABgDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAYEBQcB/8QAKhAAAQMCBAUEAwEAAAAAAAAA'. +'AgEDBAURAAYSIQciMTJBE0JRYRQVFoH/xAAXAQEBAQEAAAAAAAAAAAAAAAAAAgED/8QAGREAAwEBAQAAAAAAAAAAAAAAAAERAjFB'. +'/9oADAMBAAIRAxEAPwDTszvhEYCoS80BTm2bCjQRwdAzVe2yopkpJtpRUVfjEIc4V2oMerByg5Ji30oMyS3GeMunK0upfnu09MdJ'. +'p2scTmWnnGfx6HThktgLfKj7xEOqyr7QBbL41LhBzpxbcOru0LKDLdSnOHoaltNqSC4qWL0x9xbJYum69caczSaHmGmTmpDUYn4l'. +'UiqjkynzAVtwV23Ud+X4Ibpa2DCPkjhfUaRO/p8yzpb+YHhUmhbev6ZEll1lvqK3jt2XrbBgp6HVwsK3THpfEubGSoOUyFMpbJmL'. +'Deh6SgOGKti57EuY6l62JMWdJy7k3hg1LkOozEbVm7suQSkTiKtkEfP1pH664Za/QItccgI4bseTHdNxiXHLQ8yVl7V32XyioqL5'. +'TGc1ng6eYs0idczXUZscBBABWgEhEtfKNuUezwPnBhEuj8X2M21z9BR6NUX211Kk/UKKAjuhkPhL7XVf8vtgw7UPJlEyrDWFSYLb'. +'LBNF6qrzG6t0spEu6+fpL7YMXhUndp//2Q==' ; + + //========================================================== + // la-small.jpg + //========================================================== + $this->chars['a'][0]= 730 ; + $this->chars['a'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABoDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAABgMEBwX/xAAvEAABAwIFAQcCBwAAAAAAAAAB'. +'AgMEBREAEiExQQYHFBUiUXGBE2EyQkNSgpHh/8QAFwEBAQEBAAAAAAAAAAAAAAAAAAMBAv/EABkRAAMBAQEAAAAAAAAAAAAAAAAB'. +'IQIRMf/aAAwDAQACEQMRAD8AfdQ1pxjqZMSn0mRUZRYDaklJCE3OawO2ttTxY4hl07qFMVs1Ku02kpPnRGhsAqz8W9T9wDjozq6o'. +'Q1lDrcZLGVcmUoZg0obpufxK3Ftt9ccqB1GgBcmLSqtVEqOZcr6ARm/kbXHt7DEtc7WTJKTJqEWvRKfLqL9QplSjuPtGVYOJKBrm'. +'t+U+n94WGStZzNypmRWqckUKTbixy6jAfxPxHtCgKqFNlU5huK6pLMndSlegG4J45N8aKmTMKQRBsCNMzwB+RbHWHGEAZlPZX2hx'. +'qZIC34ygZoYUbB50JSkFXFhZR9BrpheR4fIbQ6gvurJ7q02bIQTuAOAN8x40HAxRr3TrNRpBmSHVt1KMlTyJTCsqkKAPlSf28W+c'. +'UGaD1c9HSR1HFUh9tJU45EBcAtcC9+P9wqbg8IAto9o81yputrVGpiUkgHKkqUTZI32+cKm1z1tIUgPBBAKQ4UBQH3uL3xmXSXep'. +'HVDtXStE5K5jlPU7PF3Q41+okJFkjgC+3OuNSYiSzHaLtRcW4UDMpLYSCbakDW3thhum5p//2Q==' ; + + //========================================================== + // d9-small.jpg + //========================================================== + $this->chars['9'][0]= 680 ; + $this->chars['9'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABAUGBwP/xAArEAABAwMD'. +'AgYBBQAAAAAAAAABAgMEBQYRABIhE1EUIjEzQUIHMlJhcdH/xAAWAQEBAQAAAAAAAAAAAAAAAAACAQD/xAAYEQEAAwEAAAAAAAAA'. +'AAAAAAAAAREhQf/aAAwDAQACEQMRAD8AkK7brF6X7XpMeGoKhFMLEeT4ZUheEhanF4OcZ2pTgDykk92bZpdCsi7aezLjxkIPUZiV'. +'RSCy8hah7EkZ27yM7V+iscal5bE22Lon1qNDmSKROd8Sl+Ix1lMOlIS4HGgQpbStoUCnlJz8HmsXtW3Lst2rmBAelLMRRekOwnYz'. +'Edls9QKKnOVLyk7UgcbzzrdBthqEJJwZbAI4x1U/7o1TaFa9lG36aXaZTy54VrcXUgrzsGdx+T30aNydweqVw1GS87T6Lb86Q4ha'. +'my/IAYjZBx+snKk99oOQMf1AViE65SY348hzFy6hPKnqtKz7DC1lbqyPrvJKUJ7H+M6Wrt3InP7o1brFNp4bCDGhxGAsqz69VSiQ'. +'ORwBxrrQ7itm1ac7Hp0WoGTIc3PSn0pccdcP2WorycfA1RaRHjxosZqOyhtDTSAhCf2gDAGjVHTd9sKSCumynFEZK1tIJUe58/ro'. +'1V1//9k=' ; + + //========================================================== + // d5-small.jpg + //========================================================== + $this->chars['5'][0]= 632 ; + $this->chars['5'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABgIFBwT/xAAoEAABAwME'. +'AQQCAwAAAAAAAAABAgMEBQYRABIhIkEUMVFhBxNCgaH/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAv/EABcRAQEBAQAAAAAAAAAAAAAA'. +'AAABEUH/2gAMAwEAAhEDEQA/ANGvW4YVOeiRX5b4mv5Sin05IdlupPKdo/j2SO3+6TbPNQvOsTVz33KRT4csR3YUF7Dsh5OSFvug'. +'kqG4FPBxnjxpvvi4KZb1pTpU+QwxUi2Y7ZIAefUk5ATxnB9/gbtL/wCH1UpuhPUlZlMVaQ0mS8zJjqZOPfc2TwpIUonI9tw40R1r'. +'WNGq/wBdJR1XT3lqHBUnGCfkfWjRWs1ve249erQqQYjOtN1FqPUpCXQ4WIzQSsJwT0UpRwQPG0nzqyuNHobjsl9kBuWqoOoXtT1/'. +'WppZcA8lKRj64HxqU+3KpAr6plElRVKef3S4E0K9O8pLXVzKcqSsJAB9wSAca6bSoNXeuA1+5pEV+SGFNU1iKVFqI0Vdx2AJUeoz'. +'8DGlTDwG3CAf3q/pI0ah6MDhLz6U+EpXwPoaNMU//9k=' ; + + //========================================================== + // d1-small.jpg + //========================================================== + $this->chars['1'][0]= 646 ; + $this->chars['1'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEwMBIgACEQEDEQH/xAAZAAADAAMAAAAAAAAAAAAAAAAABQYCBAf/xAApEAACAQMD'. +'AwQBBQAAAAAAAAABAgMEBREABiESMUEHEyJRkSNCYXGB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFxEBAQEBAAAAAAAAAAAA'. +'AAAAAAEREv/aAAwDAQACEQMRAD8A6jdd4WLbstILnc4Uq0VoWpkJknb6IjXLHJUePOlez923fcW4r1SxWlqC2UbdKirQif3Xw3yA'. +'OFAGT09/kO3OmV3a20MFRf6lIYPcpy7yRRAzgxjIy2M8YwcdiBzpX6d22VNvUlTXsFkuwkrKqNSfnK7F8OTzwrAY+l5zoxKskudN'. +'EgQPUT9PBkWF3DH+1GPxo1mLnRoAqF2VRgGOFmX/AAgY/GjRUP6hVMFv2FuFqUvUGrpDFJMBnpdyF5bsAQew7Hxzp6LZNT0yQ1DI'. +'wp0QCFBhD0jCsfLZHxbx5xxpTuvb1+v9PV7Ztk9roLPLCjmSSN3mX5ZwqjCgZX7PfWxDQb2in96pv9qq46aTE0bW4x9ceAWAYPwS'. +'PsYzoixgmheBGjIVcYCnjp/jHjHbRpe1JLn9OnopE/a0ykvjwDx47aNMXqP/2Q==' ; + + //========================================================== + // ll-small.jpg + //========================================================== + $this->chars['l'][0]= 626 ; + $this->chars['l'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAYEBQf/xAArEAACAQIFAwIGAwAAAAAAAAAB'. +'AgMEEQAFBhIhFEFREzEHFSIyYcFxgZH/xAAXAQEAAwAAAAAAAAAAAAAAAAACAAED/8QAGhEAAwEAAwAAAAAAAAAAAAAAAAECMREh'. +'Qf/aAAwDAQACEQMRAD8A15Zfm1VURj1Fp5AqLKv3OARcL4W5Nzx+MLWjdRz5hqXU6TSb6OCr6WghiQbrJ91gOTy1yT5xZ55myZFk'. +'Gb5ozX6Ondm28XYqpQDwu7jEH4c5S2UaDy4xxrLmlUDWzk8XaQ3O49hbj+RiB85HNg8Ee3aqwIqhDuux7G/HHbvzgxEqaWOvy09R'. +'O0o3hjdQoUji20g+fY3wYSM6pJ4Ylr7V+Zz5PSaezHTlTRNWzxySSxt6q1MSkH6AOT2Fu3Aw7RfF/T9DEkLUeawuF2mKSgdWQj2/'. +'q3+fnDZDlqRZzQGaOGcpTOaeR1u8R+ncN3gj94so2jNWHeMNNKzorEX2qp9v3imNPoRE1zpjUtZ09HJmYq5lury0benZeTww23t3'. +'Ivgw+T0yRRyyxIqNfkLcA8jt7YMKcBWn/9k=' ; + + + //========================================================== + // ls-small.jpg + //========================================================== + $this->chars['s'][0]= 701 ; + $this->chars['s'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABQDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAMCBAUGB//EACwQAAEEAQIFAgUFAAAAAAAA'. +'AAECAwQFEQAGEhMUITEiYQcjQVFxFRZCUoH/xAAWAQEBAQAAAAAAAAAAAAAAAAADAgH/xAAZEQADAQEBAAAAAAAAAAAAAAAAAQIR'. +'EiH/2gAMAwEAAhEDEQA/APWZMhmFXSJU+SGmWFiQtAWMJQAnJUr8Z+w/OuQk71uZnMsqnbjy9s8st9UMCQ6kZJdZaIHEkZ/JHceN'. +'N3HtizuY1JLrG48yLBSC9UTFKQiY4nACir+wAOOMEe2rm2bTbzlqtE1MyBuZAPybpw85KSfDRJ4Cg+Pl/wC61hJeGjV31VuuKqwr'. +'LGU+whZZK+Rw+oYJAyj3GjS4dZFpZVkqPLktdfMXNcaU2kBC1BIITkdx6c599GlnvPAa3TL2vNvU76n0063acr3YSLCEjpUpUQtW'. +'Dhf14SMEnOc57aZ8Tegm7dbrEQGZt1PeTDgc1PEW3FeXAvyAkZVkeMDOm2G3f3O7Cl/qEuqkQg4lp6CRxraWfUlRUD24kZA741Ko'. +'2k1HvlT3ri2sLOCgtsyJz6XEtBwZPAgJAGQMHUNPWKqWItsqh0UCFVyLeKhyLHQ2TMdHNVj+RKlAnJyfto1FW2ahgjrq6LYTFjjf'. +'lymUOLdWfJyoHA+gA7AAAaNPE3ysJdLT/9k=' ; + + //========================================================== + // lh-small.jpg + //========================================================== + $this->chars['h'][0]= 677 ; + $this->chars['h'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABUDASIAAhEBAxEB/8QAGgAAAQUBAAAAAAAAAAAAAAAAAAIDBAUGB//EACwQAAIBAwMCBQIHAAAAAAAA'. +'AAECAwQFEQAGEiExExQiQVEVggcyU2GRocH/xAAXAQADAQAAAAAAAAAAAAAAAAAAAwQB/8QAGhEBAQEAAwEAAAAAAAAAAAAAAQAC'. +'AyEyMf/aAAwDAQACEQMRAD8A6DZb95q9bmpK6ieOCzNHJTxmE+NMhQ5fr1fLq3Ejvkak2e7ipiFsqb3R0m4qkPPJRiRXenU9VjKE'. +'5JVcA9R7nWc3/BUbfoKTdO3VRXhpjbZ2D8Rwk6RyZH6chB+46m7i2hDYtgA2ePlV2VkuKysoLzzRnlIScZJZeeevvjtrX7LK2rp7'. +'tTwwJ9WjhILDrTKnIdMEDl2+P80aVdJZb1QW+vgqENLPH4sBCDLIwUgnOf4GjVvDnLgUk79T81voqjb8NnuUx8pVRCiEaYUSuynl'. +'jHU9mOfnOoOx6hqz8PrbNdfEkMUXg1LSM3rKOUywJ7YAJ1ZTWmSpvdvlaVTDSUzJAhH5ZJBgv0x2RSAPlz21WXqoet3ba9nuW8n4'. +'Jr6qTPqnUNxSM/f6mPvxA9zqJnExTbR+h0nkhVu1uE8j0UBRQ9PGxBKFjnkAScdsDp10a0lc7z0tI7Y5YYN+5GAf7GjVXF4Icj3f'. +'/9k=' ; + + + //========================================================== + // ld-small.jpg + //========================================================== + $this->chars['d'][0]= 681 ; + $this->chars['d'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAQFBgH/xAAsEAABAwMEAAQFBQAAAAAAAAAB'. +'AgMEBQYRABIhMQcTI0EUMlFhkRgicaGx/8QAFgEBAQEAAAAAAAAAAAAAAAAAAgEA/8QAGBEBAQEBAQAAAAAAAAAAAAAAAAECETH/'. +'2gAMAwEAAhEDEQA/ALUhp6h3W/X63UlypbhCY0WMjLqGzwDtPCfv/WtealNpVInuVBBqCogcdbU36YUkAkJWVHG8YPXBxxzxqPcN'. +'YtWyWnIlUeW05VEOAvrCnnSkftK1H5lKJPHsMDoDUWq+KdrSbIqsalVsImiEtLUZ2MU71bcYJWkhZ/36ayLHhi/IXZVOmzKqp5uU'. +'688hTyjuGVEFJKvoQesD86NL2jGZp1EoLDSmk+ZAQ8d7oPzp3YGesFWMfxo1YGvSzLsT9QExVX8phTlMaFOExAJIBGQjJwCcL+/e'. +'rd+W7GuO0Kw05CQ6+ww69Gfdb2kFIKk7DgEkjgnr86rXRa9HuyP8LV4SH0sIBbWFFDiFEgDaocgdkjo8ccay0qw7ut5nyrcviQqC'. +'slsRKo0HwlODkBRzxj2AGoXTtpzIdQ8MbffUChz4NCPRaClAo9Mn6c7T3o13wytmo0K05VIqkiPJbizFiMWs4CTgnIIHOST796NL'. +'Ia1JX//Z' ; + + //========================================================== + // d8-small.jpg + //========================================================== + $this->chars['8'][0]= 694 ; + $this->chars['8'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AFQMBIgACEQEDEQH/xAAYAAADAQEAAAAAAAAAAAAAAAAABgcEBf/EACsQAAEDAwMD'. +'AwMFAAAAAAAAAAECAwQFBhEAEiEUMVEHE0EVYYEiIzJCsf/EABYBAQEBAAAAAAAAAAAAAAAAAAIAAf/EABcRAQEBAQAAAAAAAAAA'. +'AAAAAAABERL/2gAMAwEAAhEDEQA/AKL6gVVUa0i1T5QjvTprUJMlxW4R9zgQXe/AH+kaWrntqlWjaq7gpcmotXAw82ht9yY4tch8'. +'uAFC0k7VBXPGMY51ruiaue+bThIj+7NbWqS+7HDxajFf6AlB/k44o8ZOABk4xkL0X0tZiojKrlRuGRJjugqldSlKGf6t7BuUQe3J'. +'44xxxrA1a4KVJipLidri8uLHgqOcfjOPxo0o2hdDvS1CmV2Yl6fS5ioipIQR1CAlKkLKR2UUqAI8g6NRSwuuyHab6s1ufLI/Zai7'. +'UBJOxhTS0+6B32pWSFH4CidOdWU0ukLiN1BLr0zG5Sdm3GRvcPhIT858DvjXNrVsSLnm/VIdTXS6tTnFsxZTSN3jchaTwps+O/z9'. +'tcBVq3hIX0tYqlIiQHdy5CqRHKHXEjAOMgBKjnvyRk4xrQa7OiGt1K5biYZL8SoVEpjOqkFsONtJCNwASeCQrn7aNUKnQYtLp7EC'. +'EylmLHQltptPZKQOBo1FzH//2Q==' ; + + //========================================================== + // lz-small.jpg + //========================================================== + $this->chars['z'][0]= 690 ; + $this->chars['z'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABYDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAABgAHA//EACsQAAEDAwQBAwIHAAAAAAAAAAEC'. +'AwQFESEABhIxBxMiQVFxCCM0UmGRof/EABYBAQEBAAAAAAAAAAAAAAAAAAECAP/EABgRAAMBAQAAAAAAAAAAAAAAAAABEVEC/9oA'. +'DAMBAAIRAxEAPwBTWfLu1KXXZDbM4uewNvLajlwhaCbBAwDe5uehYd3xm6t6bi3jvulwqc7KgxXZZeYQLNLeF73WRg4HEdgfzrSa'. +'P45pNEkznITDc9ypLShtyWhJDJyXC2qxJHZvjoZOjyVv1v8AESt6FFS4ijxvTLbawEApSccrYHJf0+OtJMQ2rNXk7GZMufJgJjTH'. +'Un9M4qzxT7hyCiThIyRnPXWrRvyLElVBUF6vlhl0lwRYCFKcQhAtyWpVhyWTx+w++rUvp4EWjOvbniUOnVatcS43BYDbJSPZyIBw'. +'ejclIx+3Wa+J63T6DQanuGszI0eZVJJV60p0Jum5GEi6le7l0PjvSjyRsaTvJqI1BqhhR46ksuMrQVJcUSEoUbHNr/7o7C8L7eiz'. +'4lLlyJk2cEqW+6V+m0AE9ISLnsj5+O9UhsFK92bZZqb9SRu9p2c4A0OCEqDbYAJSlJwAVZv3fBvbFrg/462btlhuS1RG5nL8pYkq'. +'KrnsKH06I/rVrQKkf//Z' ; + + //========================================================== + // d4-small.jpg + //========================================================== + $this->chars['4'][0]= 643 ; + $this->chars['4'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAYAAADAQEAAAAAAAAAAAAAAAAABAYHAv/EAC0QAAIBAwQA'. +'BAMJAAAAAAAAAAECAwQFEQAGEiETFDFBUmGBByIjUVNxobHR/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAIB/8QAGBEBAAMBAAAAAAAA'. +'AAAAAAAAAAERIVH/2gAMAwEAAhEDEQA/ANjM00Nxmt1xiWW31CZp5uJwoAAaOQ/n7qfcZHqO5my3q5XX7R6ijiqnNut9u4NyJ4yv'. +'JJyjYr8Xhrn5g599J7x3ulBNU7Zo7dXXXcLQ8kURYi4epYtkALjOePv1nUvbLvV7P3BZm3DR3eh88Kp7pVzBZI6iUhGWRRGWwE44'. +'HX3V+uiL1uHgt+vL/H+aNJQ3CSeCOaFqSaJ1DJKs/TqRkMOvQjvRorHE4pRDLNWLGlRHGUeYIORXs9e5B7OP31E0fmdyb/t0DJ4Q'. +'27bfx3YZzPUIoAAz7IpOD6cuxq0uNumqLfVNDOqXBoZEjnZcqhIPXH4c46+WkdoWOltu3IDDLLLVVR83UVcuPEmmcZZ2/rHoAANG'. +'GI7KIY1ijoLeEQBVCwIoAHpgY6Hy0aZe7mJ2jeHLKcEhusj6aNKgzr//2Q==' ; + + //========================================================== + // lv-small.jpg + //========================================================== + $this->chars['v'][0]= 648 ; + $this->chars['v'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQDBQYH/8QAKBAAAQQBAwMEAgMAAAAAAAAA'. +'AQIDBBEFAAYhEzFBEhQiYQdRFTKB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFxEBAQEBAAAAAAAAAAAAAAAAAAERIf/aAAwD'. +'AQACEQMRAD8A6Ngt1SZ4yrYgrecgTFsFJA9aGwAUrUaF2D2Avjzq6CIjiBPkB9bwQVIkIYIDae/wq+P9N+dY4SGMf+Txlev7KBmY'. +'PoadKRy4zxSgRxaTwO/x09u7KPYnasmHjlsyFZZXt4K23ezjvBpNGgLUrvXfVZyLLbWambiwEbKvvxYAkeotNlIJW2FEJWb7WBda'. +'NSQI0fHYyJjkrjKRDZQwnpQ1vgBIr+w8+a+9GocZr8iKkuY1eXhsKH8U8iZE9BHz6ZHUc48UfSPqzqH3kfeO9kTTDQYGGietpTaO'. +'shyW6AocpHNIrv8AvWzk9BUSdPdYS4BcRlomkhIV6KP0VE39V+tU2wdlRMHtZUB8NuTQ+51X27+Kr46ZPIAFV540D8zeLsJ5LMHa'. +'ubmMBCVJdjx0pRyLoWR4I8aNIQ8BvZMNtMTeUcsptKfc4tC1gAkCyFC+K0aJtf/Z' ; + + //========================================================== + // lk-small.jpg + //========================================================== + $this->chars['k'][0]= 680 ; + $this->chars['k'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABUDASIAAhEBAxEB/8QAGQAAAwEBAQAAAAAAAAAAAAAAAAUGBAMH/8QALhAAAQMDAwIEBAcAAAAAAAAA'. +'AQIDBAUREgAGITFBEyIyYQcVUYEUIzNicZHx/8QAFgEBAQEAAAAAAAAAAAAAAAAAAwEE/8QAGxEAAwACAwAAAAAAAAAAAAAAAAEC'. +'AxESMeH/2gAMAwEAAhEDEQA/APVK/V36dU6NSJDTT8esPLiqfK8S2cCoeTkKvZQ6jm2ldSqKqbu+OgMOvSX3m4UBrLnDlbqiefKl'. +'Nzz2x1m+IwNP27CkJQ7JkR6rCkMJbP5jp8S2CPfkgD6H+dJ6Ca0nerr+64rTNSqMYrg+C9mmOwhVpDfsuxSbi97DmybaoZeQ5jTl'. +'PEp18JTIfeW3kq3ly4H26aNZqvTWZsjFcZTsVtSg0G8Rio+vr2vb7g6NLPRnuXy8F+8kl+obUh4KXJdqSJJQnohlkZqJPYBXh3P+'. +'a4b5Hyp6k1bO7sOotPyXkj9NlwFl0ewstJA9ifrqkVSmET4csoS7UTHXFQ+6SQlskKUMb/tH9ddLVUmS7DqdBqD7U6OsqfS46jzl'. +'hQ5bXb1K9Scuybdxo2OTu92dwSZkWn0Sb8viQWyn8Qq5D6ifSLd0BIv7q0arTBRSKPToMZbi2GWylsvLK148Wue/XRrRjxOpT2R2'. +'k9aP/9k=' ; + + //========================================================== + // lr-small.jpg + //========================================================== + $this->chars['r'][0]= 681 ; + $this->chars['r'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABYDASIAAhEBAxEB/8QAGgAAAgIDAAAAAAAAAAAAAAAAAAYCBQMEB//EAC4QAAICAQIFAgMJAQAAAAAA'. +'AAECAwQRBQYAEiExQQdRFGFxEyIyM0JSYoGC8P/EABYBAQEBAAAAAAAAAAAAAAAAAAEAAv/EABcRAQEBAQAAAAAAAAAAAAAAAAAB'. +'EUH/2gAMAwEAAhEDEQA/AOs0ZdETU54Gt1INSmlPJEsyo7J+jlXPUYBPY9c+eE/dO9tY0a7ren6BVrW7VJTZtW5kZkjXkBSIKveQ'. +'gHp0AAJ4w+q2hVdT2Md0h46+saS4mr3EUK0gWTAB+vQj2PboeL/ZVOqmhaZVjkFmxdC6tctt3tM2G5/7bAx4C4+qxiWwd3prWzKe'. +'r3IBAth5OYxozKsgc8y4GTgnJB9uncdTi6tXq2140rRVM13JMEMAVAg7sMdBjJB/18uDgRO9R2Oo6FX2vShkFzURFUq1whIj+8DI'. +'7EdAFjXv7MeNb0kuStsFEmIaajZaos2fy2Q4VGH7SGxn+Rzw9yMLOm/FzRhZazmOTkP4grYyD3B8j2PTyeFfZ+z7G3BeSS8lmprl'. +'2K2qcnK0Z5S8gPjrgAY8cNEWmq7u23pEos6/Zji+Kd0rLLGWwseA3joeZj/w4OET1g0vlmrWV+ydFnkUxSgsvM4V+YYIwfHz6cHB'. +'ZeKZ1//Z' ; + + //========================================================== + // lg-small.jpg + //========================================================== + $this->chars['g'][0]= 655 ; + $this->chars['g'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQCBQYH/8QAJxAAAQQBAwQCAgMAAAAAAAAA'. +'AQIDBBEFAAYhBxIxQRNhcYEiQlH/xAAYAQACAwAAAAAAAAAAAAAAAAACAwABBP/EABkRAAMBAQEAAAAAAAAAAAAAAAABAhEhIv/a'. +'AAwDAQACEQMRAD8AayO4t6bq3hmMHtxyLi4OKeKH5jyASiiQCCQeTRNAeB61FrBb+jTGpLO+BMW24EFMhkhpQru8m7B/H70x09Yi'. +'q3nv/vLfwpnJ7UNkqSRbngf2ofWkpXV7brymC2malLfagurjW0aHk89xPJ9cX9aprURHWbYEaMHHEBfwpv8AnXPk+/8AdGqGJOxO'. +'4YbOSxK4y4boIStUWysgkEmxY54r60aOI8oTV9MHtjJwunPUbO46WWo0HLlD8KY4goboFVoquOVEVwLT963WdnxYfT6ZJyz0JvHm'. +'KvtaSkW4tYNVSqKiTwB+fw5n9sY/cuOXCzDDcluyW3Ckd7V+0n0eNZTH9DdouFalHIOJBUhtDki0pNV3UALo81ehG6IdKjPZ6d47'. +'4ywltanVJvuJI+RQs/sHRqy2r003JhsImEc/CUyhxRZBjKV2oJ8eRXNmufPnRo1WIz3DdNn/2Q==' ; + + //========================================================== + // lc-small.jpg + //========================================================== + $this->chars['c'][0]= 629 ; + $this->chars['c'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGQAAAwEBAQAAAAAAAAAAAAAAAAUGBwID/8QALRAAAgICAQIEBAYDAAAAAAAA'. +'AQIDBAURACExBhIiQRMVUWEHMkJScYFykaH/xAAWAQEBAQAAAAAAAAAAAAAAAAABAgP/xAAXEQEBAQEAAAAAAAAAAAAAAAAAATER'. +'/9oADAMBAAIRAxEAPwDcoGkmiT4Q8kWvzuPU38D2/v8A1zwrCFayq1qTaFk2H7aJHt05MeMvENzC4upDWkjW9kJXiricAJCigvJN'. +'IB1IVQT5frrv24twPgunk6a288crbklUSJNNdnSTZ2STHHqOP/Eb17njdZtAoqwEvrEiGVyG117/AG6HhyV8H1sljMldoxXTksGC'. +'zV7M0oaWGQOVeGQ92I6EMR22D11w4LmEPjaOL51iL8ssc9Z69zHtZkYCGGeQK0ez2UEoU39wCeX1S/LLiEt+mPSbMLxsGVv2kEjR'. +'305xkaEV/GTULMUT1LD/AAGh8gIZS2jv+vpybb8NMIb0dVLWYWgiiU0vmMphOj6V0TvQI3rfsON1E6dYjGtisa0F1mAWR2NhG0WZ'. +'3Ls3TqNs5Hc9h23w49NWL9K+Q/VD5T/zhwPH/9k=' ; + + //========================================================== + // d7-small.jpg + //========================================================== + $this->chars['7'][0]= 658 ; + $this->chars['7'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABgEFBwT/xAAuEAABAwIE'. +'BAQGAwAAAAAAAAABAgMEBREABiExEhMiQSMyUXEHFBclVJFhk9L/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/8QAGREBAQEAAwAA'. +'AAAAAAAAAAAAAAEREiFR/9oADAMBAAIRAxEAPwDXq9mCjZeQ05VZ5ZST4bfEpa3VdglCbqUe+g9MZ5Uq7V8415WXoMSdQ6etgSps'. +'19wpkCMDZKUpv0FZvbi1NzpYasMDLDUbMVXrtQdbeeU23xLWkj5RlLYK0J7anW9gbAjCzkOtsVSUJUdtc6dVZK51UeaFm4LKbhpC'. +'l7EhIFkDW974GbRI2XorUVls1OTdKAOqUpR0Hc3198GITQ6k+hLwrEpoODiDenRfW23bBicg78JXxPpD0mgVOW5PAivNNpahsPW5'. +'8xxQaSVkboQnhsnYm5OHqDGp1IpsalMKjMsMIC3+XZKbJFth62/QOEfMOZqZXp9JcKZTcGmTky3meSi7xQklI81vMR+sXIz/AEgp'. +'Q0qPNu6ea8Q2jqtbp8+2w9h/OKORc/cpHjt1dDSHOtLZ4ekHW23bBjj+o9H/AB539aP94MG0+L//2Q==' ; + + //========================================================== + // ly-small.jpg + //========================================================== + $this->chars['y'][0]= 672 ; + $this->chars['y'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAQGBQf/xAArEAABAwMEAQIFBQAAAAAAAAAB'. +'AgMEBREhAAYSEzEHIhQkQVGxQmFxgaH/xAAWAQEBAQAAAAAAAAAAAAAAAAADAQL/xAAeEQEAAgEEAwAAAAAAAAAAAAABABECAxIh'. +'MUGR8P/aAAwDAQACEQMRAD8Ar3tys07dVHohemz5dWQ7fk91MsA3IIRY8rkKFySceTqw3JVV0KhyKw+0C1CQp9aUOFSiAk4AIAvn'. +'76xtz0ioVvbcJ6msx2JtOfZmw1PKI5LQcJNh7UqBKcn6+NRfqPu6s1fYc6GxSJsRfWDUVSGA22ygEckJWSexRNgOP0udXzDKOJ0I'. +'yo62mHm25Sy80l1Z4lSgpQvZRGLgWwPGjTjbchyLH+Ejx22EtJSgO8kki3kADA/nOjWjGzv73CyQZjUWNVp7bNSrj7qJDqflqUlQ'. +'DMds24l3HvcNr3Pi9gME6T9WWVsemdYWswwC2lPta4m5WMA3OdUExCmozUJD6g84ntMjrHIFBTdQz5yLDx/WDNytpwW6nAkViqVe'. +'uvmXdlme6n4dCwlRBKEgA2tj99QG7Ilncp5QqpU31PMsJ6x7A32f6SPxo0hPVCD45oVyKf0MtgeT97/nRrO7UOCFla3tn//Z' ; + + //========================================================== + // d3-small.jpg + //========================================================== + $this->chars['3'][0]= 662 ; + $this->chars['3'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABAUGBwL/xAArEAABBAED'. +'AwMDBQEAAAAAAAABAgMEBREABhIhMUEiMmETFZEHFkJDUdH/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAL/xAAYEQEBAQEBAAAAAAAA'. +'AAAAAAAAEQExQf/aAAwDAQACEQMRAD8A0vclruBdk3VVLLUNssGRJsZSCtqOjlgJAHvcOD6c4HnOdIbcttw1W5P29cFEhuawqTXS'. +'VsJjnCMBxKkJJx7goAde+ceJfdNxU0UNlyymyXHi6kxWUNl1S3EnkAEIHX2nv86qtTuZr9Q9+1VhRsOoYpYcgSVyAE/TdewkJxnK'. +'sBCjkdPGpnOtFMd3PqsXgfOAgD8Y0aX+11H9rDDjn8lr9yj5J+dGqsqxaw6Cc9cQZU4Sp7zTJsIrKlcUEKwhSin1JABI45GUjqOu'. +'lbOvjbc3Ts9ynjGCy445UuFLYRzbWgrT6fhSCQSMDke+pew2zYVly/d7YchNqkMJZnQpgV9J8IzwWFJyUrAJHYgjvpLbu37G5nR7'. +'vck5C3YRKYEOEVJZj8kjKypXqWvirjk9h+dB9i4faa89TDZUfKlIyT8k+To10a6KTkpcJ/0vL/7o0TS//9k=' ; + + //========================================================== + // ln-small.jpg + //========================================================== + $this->chars['n'][0]= 643 ; + $this->chars['n'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABQDASIAAhEBAxEB/8QAGwAAAgEFAAAAAAAAAAAAAAAAAAYCAQMEBQf/xAAtEAACAQMCBAUCBwAAAAAA'. +'AAABAgMEBREAIQYSE0EHIjFRcWGRIzIzQoGCwf/EABYBAQEBAAAAAAAAAAAAAAAAAAMEAP/EABkRAQEBAQEBAAAAAAAAAAAAAAEA'. +'AhEhUf/aAAwDAQACEQMRAD8A6FR3p7v4oV9rlkMQsjL00RyOss0KkFxnDcrc2PbI1NOJKyTjW+W5OmKeA0UEJx5meRZS2/8AUfbS'. +'LVGS1+K16vCzfiR3GmoqqXGyxz06hWPsFlVMfOmq1iNvE69KjBYo3oJMZ3GKeYYPxg/fW+xzZX1FLQyxwSTcpWNceu4G3+aNSmpY'. +'qmQzzwh2k8yhv2r2H23/AJ0aoy+EWh7I1ntacR3PxDtEzhjWy0wkkIwYmanU5GO6sNh7rrU8AVdTceNbhDXxNHUQvS0tZ3DzwxVA'. +'fB7hj59/XJ08cPWaKj4gvlwSQiG7dCboqvLy9NOmQT9SM7ayJrBa6K5V91hjlWorp4JGUOAglRSiMMDb82/vgaBGTpVvtNUVtyJg'. +'5+WNAh5ZCu/r2+dGrgq0pi0DhmlRsSSAfqMd+b6ZyNu3po1Rk1yNBe3/2Q==' ; + + //========================================================== + // lu-small.jpg + //========================================================== + $this->chars['u'][0]= 671 ; + $this->chars['u'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAYDBAUH/8QAJRAAAQQBAwQDAQEAAAAAAAAA'. +'AQIDBBEFAAYhBxMxYRJBURSB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQAD/8QAGhEBAQEAAwEAAAAAAAAAAAAAAQARITFBAv/aAAwD'. +'AQACEQMRAD8A6dLkQmJzu3WVtHIqjf0duKFNuBr5UTQ45F1R8/XI1PMmsYoJyjhS9iI7BKHeKjkXZVXqhyLHP+rrHeR1pZlx1W1M'. +'wTiW0ukkrS28nn5fV2SPPFfurHUKQhzYG7pLYKEfyBhaSOS7dG/YCki/uvWn3LPDOJrwa4kyEzOYeakqkpC3Hk0bNePQHgDRpchY'. +'leIZwzUWauKtuPctTSUlCAUmrBHIKuAPV/ujQsmHdm7hya43UbbD3ZVElOQJsdTS6IQaQUqBHCk8E2Pocgam6oYwObHy0Zm0oi45'. +'T1KBPdpV2f0pom/1Ws7cmPazu98Ltvcq3VzRHfehz8a4pirFEKRZo8eQT+eCdWYfS/b+WYnxpbuVcDRMdHcyTqg2fiAfiLoi+Rf+'. +'jT7Xc74HtOYnHyUOh8yWUvKeHhy0CiPVUAPoDRrm+OeznTva6lzsyMjCYbbaiNJjJSWElagD5tRpNUSALFeNGoOCH7Bv/9k=' ; + + //========================================================== + // lw-small.jpg + //========================================================== + $this->chars['w'][0]= 673 ; + $this->chars['w'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAYDBAX/xAAtEAACAQMDAgMHBQAAAAAAAAAB'. +'AgMEBREABhIhMRMUQRUiIzJRYZEWNIGx0f/EABYBAQEBAAAAAAAAAAAAAAAAAAABA//EABoRAAICAwAAAAAAAAAAAAAAAAABERIh'. +'MVH/2gAMAwEAAhEDEQA/AHXbV13ZLu6t2/uaa1JijWopVp4XUTKSAXRyc+6ehBGeoPbTSlwpql0K3GneqpZViqUhI5JzGMEZJGeh'. +'GlXfaFILDf7FQzXC426rDLTojs8sLqVkXBGcfKf40twWbdWzZY75R0s90ul3jPtKjVMJDNn4DDp8iEhW+wJ1WZG2KWt3Lv26U1tv'. +'92o7PaYkgYUbqVepYlmUBlIwqnB++O2jTDt/bBtth9jcpvEWNGqalZQryTlmeR8jPct6+mNGmRC4a1U13htzVFItB5nA/cyOUVfp'. +'7oz/ALqitJulYJKuqvFsppHALLFb3cp9FBaXr+O51bq0q6i38KK5PDVAAxSzU6SIpz3Kjjn8jUFoS7uFmut1gq17xLFQ+DxOccj8'. +'Rsn+tVpiyJnqv09YfOXu5AycgZZQEhBZjgDBOOgwO/po0sttWHdNzqLruioa4UwmdaC3kYp4IwSvJlBHKQ4OSe3po0qxM6P/2Q==' ; + + //========================================================== + // lq-small.jpg + //========================================================== + $this->chars['q'][0]= 671 ; + $this->chars['q'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAcDBAUG/8QAKRAAAQQBBAICAQQDAAAAAAAA'. +'AQIDBBEFAAYSIQcxIlETCBQVgSNBYf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oADAMB'. +'AAIRAxEAPwDT3H5Qz+O3LN2vtrF/y86NYLzzVlAABJITQPv2a/17vXMboz3lDEYWPuafNx7CFrS03+2jpK2bs0CUkUa7pRvrUu63'. +'sr438yv7pLEo4XIK5Kcji0uJUkckm+uQUOVH6GsnyJv7A5vaJwuFdkONLmolgONFH4vioKRXYqyCADXvRMh0yspmZ4jyIEtDTK47'. +'aiA0lQUopBJBI/7X9aNT7amRo228e3a31iO3yUzCcdSPiKAIFdCho0TIswZ7GQlO/hlRxBooih1YXzAoKUkX0LPEBX110dJ7zbuv'. +'AORpO04cIpmxH23FSEIRwKuNnsdk0o31702XhFMKbuRUZJWP8LTQ6HBCuIB+iVWSR2BXuqK93/hDlvGzEphmG3Ml5JpDi1I7TzNA'. +'BYFlPafY+/7LBiv1CYDH4iFDOGySlMR22lFP4wCUpANfL11o1r4bxXlWMNEaE/bqlIbCFl/ANPK5Do/M0VDr2Rf3o0TX/9k=' ; + + + + } +} + +class AntiSpam { + + private $iData=''; + private $iDD=null; + + function __construct($aData='') { + $this->iData = $aData; + $this->iDD = new HandDigits(); + } + + function Set($aData) { + $this->iData = $aData; + } + + function Rand($aLen) { + $d=''; + for($i=0; $i < $aLen; ++$i) { + if( rand(0,9) < 6 ) { + // Digits + $d .= chr( ord('1') + rand(0,8) ); + } + else { + // Letters + do { + $offset = rand(0,25); + } while ( $offset==14 ); + $d .= chr( ord('a') + $offset ); + } + } + $this->iData = $d; + return $d; + } + + function Stroke() { + + $n=strlen($this->iData); + if( $n==0 ) { + return false; + } + + for($i=0; $i < $n; ++$i ) { + if( $this->iData[$i]==='0' || strtolower($this->iData[$i])==='o') { + return false; + } + } + + $img = @imagecreatetruecolor($n*$this->iDD->iWidth, $this->iDD->iHeight); + if( $img < 1 ) { + return false; + } + + $start=0; + for($i=0; $i < $n; ++$i ) { + $dimg = imagecreatefromstring(base64_decode($this->iDD->chars[strtolower($this->iData[$i])][1])); + imagecopy($img,$dimg,$start,0,0,0,imagesx($dimg), $this->iDD->iHeight); + $start += imagesx($dimg); + } + $resimg = @imagecreatetruecolor($start+4, $this->iDD->iHeight+4); + if( $resimg < 1 ) { + return false; + } + + imagecopy($resimg,$img,2,2,0,0,$start, $this->iDD->iHeight); + header("Content-type: image/jpeg"); + imagejpeg($resimg); + return true; + } +} + +?> diff --git a/Societes/ric/jpgraph/jpgraph_bar.php b/Societes/ric/jpgraph/jpgraph_bar.php new file mode 100755 index 00000000..ec9da456 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_bar.php @@ -0,0 +1,1200 @@ +numpoints; + } + + //--------------- + // PUBLIC METHODS + + // Set a drop shadow for the bar (or rather an "up-right" shadow) + function SetShadow($aColor="black",$aHSize=3,$aVSize=3,$aShow=true) { + $this->bar_shadow=$aShow; + $this->bar_shadow_color=$aColor; + $this->bar_shadow_vsize=$aVSize; + $this->bar_shadow_hsize=$aHSize; + + // Adjust the value margin to compensate for shadow + $this->value->margin += $aVSize; + } + + function Set3D($aHSize=3,$aVSize=3,$aShow=true) { + $this->bar_3d=$aShow; + $this->bar_3d_vsize=$aVSize; + $this->bar_3d_hsize=$aHSize; + + $this->value->margin += $aVSize; + } + + // DEPRECATED use SetYBase instead + function SetYMin($aYStartValue) { + //die("JpGraph Error: Deprecated function SetYMin. Use SetYBase() instead."); + $this->ybase=$aYStartValue; + } + + // Specify the base value for the bars + function SetYBase($aYStartValue) { + $this->ybase=$aYStartValue; + } + + // The method will take the specified pattern anre + // return a pattern index that corresponds to the original + // patterm being rotated 90 degreees. This is needed when plottin + // Horizontal bars + function RotatePattern($aPat,$aRotate=true) { + $rotate = array(1 => 2, 2 => 1, 3 => 3, 4 => 5, 5 => 4, 6 => 6, 7 => 7, 8 => 8); + if( $aRotate ) { + return $rotate[$aPat]; + } + else { + return $aPat; + } + } + + function Legend($graph) { + if( $this->grad && $this->legend!="" && !$this->fill ) { + $color=array($this->grad_fromcolor,$this->grad_tocolor); + // In order to differentiate between gradients and cooors specified as an RGB triple + $graph->legend->Add($this->legend,$color,"",-$this->grad_style, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + elseif( $this->legend!="" && ($this->iPattern > -1 || is_array($this->iPattern)) ) { + if( is_array($this->iPattern) ) { + $p1 = $this->RotatePattern( $this->iPattern[0], $graph->img->a == 90 ); + $p2 = $this->iPatternColor[0]; + $p3 = $this->iPatternDensity[0]; + } + else { + $p1 = $this->RotatePattern( $this->iPattern, $graph->img->a == 90 ); + $p2 = $this->iPatternColor; + $p3 = $this->iPatternDensity; + } + if( $p3 < 90 ) $p3 += 5; + $color = array($p1,$p2,$p3,$this->fill_color); + // A kludge: Too mark that we add a pattern we use a type value of < 100 + $graph->legend->Add($this->legend,$color,"",-101, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + elseif( $this->fill_color && $this->legend!="" ) { + if( is_array($this->fill_color) ) { + $graph->legend->Add($this->legend,$this->fill_color[0],"",0, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + else { + $graph->legend->Add($this->legend,$this->fill_color,"",0, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + } + } + + // Gets called before any axis are stroked + function PreStrokeAdjust($graph) { + parent::PreStrokeAdjust($graph); + + // If we are using a log Y-scale we want the base to be at the + // minimum Y-value unless the user have specifically set some other + // value than the default. + if( substr($graph->axtype,-3,3)=="log" && $this->ybase==0 ) + $this->ybase = $graph->yaxis->scale->GetMinVal(); + + // For a "text" X-axis scale we will adjust the + // display of the bars a little bit. + if( substr($graph->axtype,0,3)=="tex" ) { + // Position the ticks between the bars + $graph->xaxis->scale->ticks->SetXLabelOffset(0.5,0); + + // Center the bars + if( $this->abswidth > -1 ) { + $graph->SetTextScaleAbsCenterOff($this->abswidth); + } + else { + if( $this->align == "center" ) + $graph->SetTextScaleOff(0.5-$this->width/2); + elseif( $this->align == "right" ) + $graph->SetTextScaleOff(1-$this->width); + } + } + elseif( ($this instanceof AccBarPlot) || ($this instanceof GroupBarPlot) ) { + // We only set an absolute width for linear and int scale + // for text scale the width will be set to a fraction of + // the majstep width. + if( $this->abswidth == -1 ) { + // Not set + // set width to a visuable sensible default + $this->abswidth = $graph->img->plotwidth/(2*$this->numpoints); + } + } + } + + function Min() { + $m = parent::Min(); + if( $m[1] >= $this->ybase ) $m[1] = $this->ybase; + return $m; + } + + function Max() { + $m = parent::Max(); + if( $m[1] <= $this->ybase ) $m[1] = $this->ybase; + return $m; + } + + // Specify width as fractions of the major stepo size + function SetWidth($aWidth) { + if( $aWidth > 1 ) { + // Interpret this as absolute width + $this->abswidth=$aWidth; + } + else { + $this->width=$aWidth; + } + } + + // Specify width in absolute pixels. If specified this + // overrides SetWidth() + function SetAbsWidth($aWidth) { + $this->abswidth=$aWidth; + } + + function SetAlign($aAlign) { + $this->align=$aAlign; + } + + function SetNoFill() { + $this->grad = false; + $this->fill_color=false; + $this->fill=false; + } + + function SetFillColor($aColor) { + // Do an extra error check if the color is specified as an RGB array triple + // In that case convert it to a hex string since it will otherwise be + // interpretated as an array of colors for each individual bar. + + $aColor = RGB::tryHexConversion($aColor); + $this->fill = true ; + $this->fill_color=$aColor; + + } + + function SetFillGradient($aFromColor,$aToColor=null,$aStyle=null) { + $this->grad = true; + $this->grad_fromcolor = $aFromColor; + $this->grad_tocolor = $aToColor; + $this->grad_style = $aStyle; + } + + function SetValuePos($aPos) { + $this->valuepos = $aPos; + } + + function SetPattern($aPattern, $aColor='black'){ + if( is_array($aPattern) ) { + $n = count($aPattern); + $this->iPattern = array(); + $this->iPatternDensity = array(); + if( is_array($aColor) ) { + $this->iPatternColor = array(); + if( count($aColor) != $n ) { + JpGraphError::RaiseL(2001);//('NUmber of colors is not the same as the number of patterns in BarPlot::SetPattern()'); + } + } + else { + $this->iPatternColor = $aColor; + } + for( $i=0; $i < $n; ++$i ) { + $this->_SetPatternHelper($aPattern[$i], $this->iPattern[$i], $this->iPatternDensity[$i]); + if( is_array($aColor) ) { + $this->iPatternColor[$i] = $aColor[$i]; + } + } + } + else { + $this->_SetPatternHelper($aPattern, $this->iPattern, $this->iPatternDensity); + $this->iPatternColor = $aColor; + } + } + + function _SetPatternHelper($aPattern, &$aPatternValue, &$aDensity){ + switch( $aPattern ) { + case PATTERN_DIAG1: + $aPatternValue= 1; + $aDensity = 92; + break; + case PATTERN_DIAG2: + $aPatternValue= 1; + $aDensity = 78; + break; + case PATTERN_DIAG3: + $aPatternValue= 2; + $aDensity = 92; + break; + case PATTERN_DIAG4: + $aPatternValue= 2; + $aDensity = 78; + break; + case PATTERN_CROSS1: + $aPatternValue= 8; + $aDensity = 90; + break; + case PATTERN_CROSS2: + $aPatternValue= 8; + $aDensity = 78; + break; + case PATTERN_CROSS3: + $aPatternValue= 8; + $aDensity = 65; + break; + case PATTERN_CROSS4: + $aPatternValue= 7; + $aDensity = 90; + break; + case PATTERN_STRIPE1: + $aPatternValue= 5; + $aDensity = 94; + break; + case PATTERN_STRIPE2: + $aPatternValue= 5; + $aDensity = 85; + break; + default: + JpGraphError::RaiseL(2002); + //('Unknown pattern specified in call to BarPlot::SetPattern()'); + } + } + + + /** + * @override + * Without overriding this method, $this->numpoints does not updated correctly. + */ + function Clear() { + $this->isRunningClear = true; + $this->__construct($this->inputValues['aDatay'], $this->inputValues['aDatax']); + $this->isRunningClear = false; + } + + function Stroke($img,$xscale,$yscale) { + + $numpoints = count($this->coords[0]); + if( isset($this->coords[1]) ) { + if( count($this->coords[1])!=$numpoints ) { + JpGraphError::RaiseL(2003,count($this->coords[1]),$numpoints); + //"Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])."Number of Y-points:$numpoints"); + } + else { + $exist_x = true; + } + } + else { + $exist_x = false; + } + + + $numbars=count($this->coords[0]); + + // Use GetMinVal() instead of scale[0] directly since in the case + // of log scale we get a correct value. Log scales will have negative + // values for values < 1 while still not representing negative numbers. + if( $yscale->GetMinVal() >= 0 ) + $zp=$yscale->scale_abs[0]; + else { + $zp=$yscale->Translate(0); + } + + if( $this->abswidth > -1 ) { + $abswidth=$this->abswidth; + } + else { + $abswidth=round($this->width*$xscale->scale_factor,0); + } + + // Count pontetial pattern array to avoid doing the count for each iteration + if( is_array($this->iPattern) ) { + $np = count($this->iPattern); + } + + $grad = null; + for($i=0; $i < $numbars; ++$i) { + + // If value is NULL, or 0 then don't draw a bar at all + if ($this->coords[0][$i] === null || $this->coords[0][$i] === '' ) + continue; + + if( $exist_x ) { + $x=$this->coords[1][$i]; + } + else { + $x=$i; + } + + $x=$xscale->Translate($x); + + // Comment Note: This confuses the positioning when using acc together with + // grouped bars. Workaround for fixing #191 + /* + if( !$xscale->textscale ) { + if($this->align=="center") + $x -= $abswidth/2; + elseif($this->align=="right") + $x -= $abswidth; + } + */ + // Stroke fill color and fill gradient + $pts=array( + $x,$zp, + $x,$yscale->Translate($this->coords[0][$i]), + $x+$abswidth,$yscale->Translate($this->coords[0][$i]), + $x+$abswidth,$zp); + if( $this->grad ) { + if( $grad === null ) { + $grad = new Gradient($img); + } + if( is_array($this->grad_fromcolor) ) { + // The first argument (grad_fromcolor) can be either an array or a single color. If it is an array + // then we have two choices. It can either a) be a single color specified as an RGB triple or it can be + // an array to specify both (from, to style) for each individual bar. The way to know the difference is + // to investgate the first element. If this element is an integer [0,255] then we assume it is an RGB + // triple. + $ng = count($this->grad_fromcolor); + if( $ng === 3 ) { + if( is_numeric($this->grad_fromcolor[0]) && $this->grad_fromcolor[0] > 0 && $this->grad_fromcolor[0] < 256 ) { + // RGB Triple + $fromcolor = $this->grad_fromcolor; + $tocolor = $this->grad_tocolor; + $style = $this->grad_style; + } + else { + $fromcolor = $this->grad_fromcolor[$i % $ng][0]; + $tocolor = $this->grad_fromcolor[$i % $ng][1]; + $style = $this->grad_fromcolor[$i % $ng][2]; + } + } + else { + $fromcolor = $this->grad_fromcolor[$i % $ng][0]; + $tocolor = $this->grad_fromcolor[$i % $ng][1]; + $style = $this->grad_fromcolor[$i % $ng][2]; + } + $grad->FilledRectangle($pts[2],$pts[3], + $pts[6],$pts[7], + $fromcolor,$tocolor,$style); + } + else { + $grad->FilledRectangle($pts[2],$pts[3], + $pts[6],$pts[7], + $this->grad_fromcolor,$this->grad_tocolor,$this->grad_style); + } + } + elseif( !empty($this->fill_color) ) { + if(is_array($this->fill_color)) { + $img->PushColor($this->fill_color[$i % count($this->fill_color)]); + } else { + $img->PushColor($this->fill_color); + } + $img->FilledPolygon($pts); + $img->PopColor(); + } + +/////////////////////////kokorahen rectangle polygon////////////////////// + + // Remember value of this bar + $val=$this->coords[0][$i]; + + if( !empty($val) && !is_numeric($val) ) { + JpGraphError::RaiseL(2004,$i,$val); + //'All values for a barplot must be numeric. You have specified value['.$i.'] == \''.$val.'\''); + } + + // Determine the shadow + if( $this->bar_shadow && $val != 0) { + + $ssh = $this->bar_shadow_hsize; + $ssv = $this->bar_shadow_vsize; + // Create points to create a "upper-right" shadow + if( $val > 0 ) { + $sp[0]=$pts[6]; $sp[1]=$pts[7]; + $sp[2]=$pts[4]; $sp[3]=$pts[5]; + $sp[4]=$pts[2]; $sp[5]=$pts[3]; + $sp[6]=$pts[2]+$ssh; $sp[7]=$pts[3]-$ssv; + $sp[8]=$pts[4]+$ssh; $sp[9]=$pts[5]-$ssv; + $sp[10]=$pts[6]+$ssh; $sp[11]=$pts[7]-$ssv; + } + elseif( $val < 0 ) { + $sp[0]=$pts[4]; $sp[1]=$pts[5]; + $sp[2]=$pts[6]; $sp[3]=$pts[7]; + $sp[4]=$pts[0]; $sp[5]=$pts[1]; + $sp[6]=$pts[0]+$ssh; $sp[7]=$pts[1]-$ssv; + $sp[8]=$pts[6]+$ssh; $sp[9]=$pts[7]-$ssv; + $sp[10]=$pts[4]+$ssh; $sp[11]=$pts[5]-$ssv; + } + if( is_array($this->bar_shadow_color) ) { + $numcolors = count($this->bar_shadow_color); + if( $numcolors == 0 ) { + JpGraphError::RaiseL(2005);//('You have specified an empty array for shadow colors in the bar plot.'); + } + $img->PushColor($this->bar_shadow_color[$i % $numcolors]); + } + else { + $img->PushColor($this->bar_shadow_color); + } + $img->FilledPolygon($sp); + $img->PopColor(); + + } elseif( $this->bar_3d && $val != 0) { + // Determine the 3D + + $ssh = $this->bar_3d_hsize; + $ssv = $this->bar_3d_vsize; + + // Create points to create a "upper-right" shadow + if( $val > 0 ) { + $sp1[0]=$pts[6]; $sp1[1]=$pts[7]; + $sp1[2]=$pts[4]; $sp1[3]=$pts[5]; + $sp1[4]=$pts[4]+$ssh; $sp1[5]=$pts[5]-$ssv; + $sp1[6]=$pts[6]+$ssh; $sp1[7]=$pts[7]-$ssv; + + $sp2[0]=$pts[4]; $sp2[1]=$pts[5]; + $sp2[2]=$pts[2]; $sp2[3]=$pts[3]; + $sp2[4]=$pts[2]+$ssh; $sp2[5]=$pts[3]-$ssv; + $sp2[6]=$pts[4]+$ssh; $sp2[7]=$pts[5]-$ssv; + + } + elseif( $val < 0 ) { + $sp1[0]=$pts[4]; $sp1[1]=$pts[5]; + $sp1[2]=$pts[6]; $sp1[3]=$pts[7]; + $sp1[4]=$pts[6]+$ssh; $sp1[5]=$pts[7]-$ssv; + $sp1[6]=$pts[4]+$ssh; $sp1[7]=$pts[5]-$ssv; + + $sp2[0]=$pts[6]; $sp2[1]=$pts[7]; + $sp2[2]=$pts[0]; $sp2[3]=$pts[1]; + $sp2[4]=$pts[0]+$ssh; $sp2[5]=$pts[1]-$ssv; + $sp2[6]=$pts[6]+$ssh; $sp2[7]=$pts[7]-$ssv; + } + + $base_color = $this->fill_color; + + $img->PushColor($base_color . ':0.7'); + $img->FilledPolygon($sp1); + $img->PopColor(); + + $img->PushColor($base_color . ':1.1'); + $img->FilledPolygon($sp2); + $img->PopColor(); + } + + // Stroke the pattern + if( is_array($this->iPattern) ) { + $f = new RectPatternFactory(); + if( is_array($this->iPatternColor) ) { + $pcolor = $this->iPatternColor[$i % $np]; + } + else { + $pcolor = $this->iPatternColor; + } + $prect = $f->Create($this->iPattern[$i % $np],$pcolor,1); + $prect->SetDensity($this->iPatternDensity[$i % $np]); + + if( $val < 0 ) { + $rx = $pts[0]; + $ry = $pts[1]; + } + else { + $rx = $pts[2]; + $ry = $pts[3]; + } + $width = abs($pts[4]-$pts[0])+1; + $height = abs($pts[1]-$pts[3])+1; + $prect->SetPos(new Rectangle($rx,$ry,$width,$height)); + $prect->Stroke($img); + } + else { + if( $this->iPattern > -1 ) { + $f = new RectPatternFactory(); + $prect = $f->Create($this->iPattern,$this->iPatternColor,1); + $prect->SetDensity($this->iPatternDensity); + if( $val < 0 ) { + $rx = $pts[0]; + $ry = $pts[1]; + } + else { + $rx = $pts[2]; + $ry = $pts[3]; + } + $width = abs($pts[4]-$pts[0])+1; + $height = abs($pts[1]-$pts[3])+1; + $prect->SetPos(new Rectangle($rx,$ry,$width,$height)); + $prect->Stroke($img); + } + } + + // Stroke the outline of the bar + if( is_array($this->color) ) { + $img->SetColor($this->color[$i % count($this->color)]); + } + else { + $img->SetColor($this->color); + } + + $pts[] = $pts[0]; + $pts[] = $pts[1]; + + if( $this->weight > 0 ) { + $img->SetLineWeight($this->weight); + $img->Polygon($pts); + } + + // Determine how to best position the values of the individual bars + $x=$pts[2]+($pts[4]-$pts[2])/2; + $this->value->SetMargin(5); + + if( $this->valuepos=='top' ) { + $y=$pts[3]; + if( $img->a === 90 ) { + if( $val < 0 ) { + $this->value->SetAlign('right','center'); + } + else { + $this->value->SetAlign('left','center'); + } + + } + else { + if( $val < 0 ) { + $this->value->SetMargin(-5); + $y=$pts[1]; + $this->value->SetAlign('center','bottom'); + } + else { + $this->value->SetAlign('center','bottom'); + } + + } + $this->value->Stroke($img,$val,$x,$y); + } + elseif( $this->valuepos=='max' ) { + $y=$pts[3]; + if( $img->a === 90 ) { + if( $val < 0 ) + $this->value->SetAlign('left','center'); + else + $this->value->SetAlign('right','center'); + } + else { + if( $val < 0 ) { + $this->value->SetAlign('center','bottom'); + } + else { + $this->value->SetAlign('center','top'); + } + } + $this->value->SetMargin(-5); + $this->value->Stroke($img,$val,$x,$y); + } + elseif( $this->valuepos=='center' ) { + $y = ($pts[3] + $pts[1])/2; + $this->value->SetAlign('center','center'); + $this->value->SetMargin(0); + $this->value->Stroke($img,$val,$x,$y); + } + elseif( $this->valuepos=='bottom' || $this->valuepos=='min' ) { + $y=$pts[1]; + if( $img->a === 90 ) { + if( $val < 0 ) + $this->value->SetAlign('right','center'); + else + $this->value->SetAlign('left','center'); + } + $this->value->SetMargin(3); + $this->value->Stroke($img,$val,$x,$y); + } + else { + JpGraphError::RaiseL(2006,$this->valuepos); + //'Unknown position for values on bars :'.$this->valuepos); + } + // Create the client side image map + $rpts = $img->ArrRotate($pts); + $csimcoord=round($rpts[0]).", ".round($rpts[1]); + for( $j=1; $j < 4; ++$j){ + $csimcoord .= ", ".round($rpts[2*$j]).", ".round($rpts[2*$j+1]); + } + if( !empty($this->csimtargets[$i]) ) { + $this->csimareas .= 'csimareas .= " href=\"".htmlentities($this->csimtargets[$i])."\""; + + if( !empty($this->csimwintargets[$i]) ) { + $this->csimareas .= " target=\"".$this->csimwintargets[$i]."\" "; + } + + $sval=''; + if( !empty($this->csimalts[$i]) ) { + $sval=sprintf($this->csimalts[$i],$this->coords[0][$i]); + $this->csimareas .= " title=\"$sval\" alt=\"$sval\" "; + } + $this->csimareas .= " />\n"; + } + } + return true; + } +} // Class + +//=================================================== +// CLASS GroupBarPlot +// Description: Produce grouped bar plots +//=================================================== +class GroupBarPlot extends BarPlot { + public $plots; + private $nbrplots=0; + //--------------- + // CONSTRUCTOR + function __construct($plots) { + $this->width=0.7; + $this->plots = $plots; + $this->nbrplots = count($plots); + if( $this->nbrplots < 1 ) { + JpGraphError::RaiseL(2007);//('Cannot create GroupBarPlot from empty plot array.'); + } + for($i=0; $i < $this->nbrplots; ++$i ) { + if( empty($this->plots[$i]) || !isset($this->plots[$i]) ) { + JpGraphError::RaiseL(2008,$i);//("Group bar plot element nbr $i is undefined or empty."); + } + } + $this->numpoints = $plots[0]->numpoints; + $this->width=0.7; + } + + //--------------- + // PUBLIC METHODS + function Legend($graph) { + $n = count($this->plots); + for($i=0; $i < $n; ++$i) { + $c = get_class($this->plots[$i]); + if( !($this->plots[$i] instanceof BarPlot) ) { + JpGraphError::RaiseL(2009,$c); + //('One of the objects submitted to GroupBar is not a BarPlot. Make sure that you create the Group Bar plot from an array of BarPlot or AccBarPlot objects. (Class = '.$c.')'); + } + $this->plots[$i]->DoLegend($graph); + } + } + + function Min() { + list($xmin,$ymin) = $this->plots[0]->Min(); + $n = count($this->plots); + for($i=0; $i < $n; ++$i) { + list($xm,$ym) = $this->plots[$i]->Min(); + $xmin = min($xmin,$xm); + $ymin = min($ymin,$ym); + } + return array($xmin,$ymin); + } + + function Max() { + list($xmax,$ymax) = $this->plots[0]->Max(); + $n = count($this->plots); + for($i=0; $i < $n; ++$i) { + list($xm,$ym) = $this->plots[$i]->Max(); + $xmax = max($xmax,$xm); + $ymax = max($ymax,$ym); + } + return array($xmax,$ymax); + } + + function GetCSIMareas() { + $n = count($this->plots); + $csimareas=''; + for($i=0; $i < $n; ++$i) { + $csimareas .= $this->plots[$i]->csimareas; + } + return $csimareas; + } + + // Stroke all the bars next to each other + function Stroke($img,$xscale,$yscale) { + $tmp=$xscale->off; + $n = count($this->plots); + $subwidth = $this->width/$this->nbrplots ; + + for( $i=0; $i < $n; ++$i ) { + $this->plots[$i]->ymin=$this->ybase; + $this->plots[$i]->SetWidth($subwidth); + + // If the client have used SetTextTickInterval() then + // major_step will be > 1 and the positioning will fail. + // If we assume it is always one the positioning will work + // fine with a text scale but this will not work with + // arbitrary linear scale + $xscale->off = $tmp+$i*round($xscale->scale_factor* $subwidth); + $this->plots[$i]->Stroke($img,$xscale,$yscale); + } + $xscale->off=$tmp; + } +} // Class + +//=================================================== +// CLASS AccBarPlot +// Description: Produce accumulated bar plots +//=================================================== +class AccBarPlot extends BarPlot { + public $plots=null; + private $nbrplots=0; + //--------------- + // CONSTRUCTOR + function __construct($plots) { + $this->plots = $plots; + $this->nbrplots = count($plots); + if( $this->nbrplots < 1 ) { + JpGraphError::RaiseL(2010);//('Cannot create AccBarPlot from empty plot array.'); + } + for($i=0; $i < $this->nbrplots; ++$i ) { + if( empty($this->plots[$i]) || !isset($this->plots[$i]) ) { + JpGraphError::RaiseL(2011,$i);//("Acc bar plot element nbr $i is undefined or empty."); + } + } + + // We can only allow individual plost which do not have specified X-positions + for($i=0; $i < $this->nbrplots; ++$i ) { + if( !empty($this->plots[$i]->coords[1]) ) { + JpGraphError::RaiseL(2015); + //'Individual bar plots in an AccBarPlot or GroupBarPlot can not have specified X-positions.'); + } + } + + // Use 0 weight by default which means that the individual bar + // weights will be used per part n the accumulated bar + $this->SetWeight(0); + + $this->numpoints = $plots[0]->numpoints; + $this->value = new DisplayValue(); + } + + //--------------- + // PUBLIC METHODS + function Legend($graph) { + $n = count($this->plots); + for( $i=$n-1; $i >= 0; --$i ) { + $c = get_class($this->plots[$i]); + if( !($this->plots[$i] instanceof BarPlot) ) { + JpGraphError::RaiseL(2012,$c); + //('One of the objects submitted to AccBar is not a BarPlot. Make sure that you create the AccBar plot from an array of BarPlot objects.(Class='.$c.')'); + } + $this->plots[$i]->DoLegend($graph); + } + } + + function Max() { + list($xmax) = $this->plots[0]->Max(); + $nmax=0; + for($i=0; $i < count($this->plots); ++$i) { + $n = count($this->plots[$i]->coords[0]); + $nmax = max($nmax,$n); + list($x) = $this->plots[$i]->Max(); + $xmax = max($xmax,$x); + } + for( $i = 0; $i < $nmax; $i++ ) { + // Get y-value for bar $i by adding the + // individual bars from all the plots added. + // It would be wrong to just add the + // individual plots max y-value since that + // would in most cases give to large y-value. + $y=0; + if( !isset($this->plots[0]->coords[0][$i]) ) { + JpGraphError::RaiseL(2014); + } + if( $this->plots[0]->coords[0][$i] > 0 ) + $y=$this->plots[0]->coords[0][$i]; + for( $j = 1; $j < $this->nbrplots; $j++ ) { + if( !isset($this->plots[$j]->coords[0][$i]) ) { + JpGraphError::RaiseL(2014); + } + if( $this->plots[$j]->coords[0][$i] > 0 ) + $y += $this->plots[$j]->coords[0][$i]; + } + $ymax[$i] = $y; + } + $ymax = max($ymax); + + // Bar always start at baseline + if( $ymax <= $this->ybase ) + $ymax = $this->ybase; + return array($xmax,$ymax); + } + + function Min() { + $nmax=0; + list($xmin,$ysetmin) = $this->plots[0]->Min(); + for($i=0; $i < count($this->plots); ++$i) { + $n = count($this->plots[$i]->coords[0]); + $nmax = max($nmax,$n); + list($x,$y) = $this->plots[$i]->Min(); + $xmin = Min($xmin,$x); + $ysetmin = Min($y,$ysetmin); + } + for( $i = 0; $i < $nmax; $i++ ) { + // Get y-value for bar $i by adding the + // individual bars from all the plots added. + // It would be wrong to just add the + // individual plots max y-value since that + // would in most cases give to large y-value. + $y=0; + if( $this->plots[0]->coords[0][$i] < 0 ) + $y=$this->plots[0]->coords[0][$i]; + for( $j = 1; $j < $this->nbrplots; $j++ ) { + if( $this->plots[$j]->coords[0][$i] < 0 ) + $y += $this->plots[ $j ]->coords[0][$i]; + } + $ymin[$i] = $y; + } + $ymin = Min($ysetmin,Min($ymin)); + // Bar always start at baseline + if( $ymin >= $this->ybase ) + $ymin = $this->ybase; + return array($xmin,$ymin); + } + + // Stroke acc bar plot + function Stroke($img,$xscale,$yscale) { + $pattern=NULL; + $img->SetLineWeight($this->weight); + $grad=null; + for($i=0; $i < $this->numpoints-1; $i++) { + $accy = 0; + $accy_neg = 0; + for($j=0; $j < $this->nbrplots; ++$j ) { + $img->SetColor($this->plots[$j]->color); + + if ( $this->plots[$j]->coords[0][$i] >= 0) { + $yt=$yscale->Translate($this->plots[$j]->coords[0][$i]+$accy); + $accyt=$yscale->Translate($accy); + $accy+=$this->plots[$j]->coords[0][$i]; + } + else { + //if ( $this->plots[$j]->coords[0][$i] < 0 || $accy_neg < 0 ) { + $yt=$yscale->Translate($this->plots[$j]->coords[0][$i]+$accy_neg); + $accyt=$yscale->Translate($accy_neg); + $accy_neg+=$this->plots[$j]->coords[0][$i]; + } + + $xt=$xscale->Translate($i); + + if( $this->abswidth > -1 ) { + $abswidth=$this->abswidth; + } + else { + $abswidth=round($this->width*$xscale->scale_factor,0); + } + + $pts=array($xt,$accyt,$xt,$yt,$xt+$abswidth,$yt,$xt+$abswidth,$accyt); + + if( $this->bar_shadow ) { + $ssh = $this->bar_shadow_hsize; + $ssv = $this->bar_shadow_vsize; + + // We must also differ if we are a positive or negative bar. + if( $j === 0 ) { + // This gets extra complicated since we have to + // see all plots to see if we are negative. It could + // for example be that all plots are 0 until the very + // last one. We therefore need to save the initial setup + // for both the negative and positive case + + // In case the final bar is positive + $sp[0]=$pts[6]+1; $sp[1]=$pts[7]; + $sp[2]=$pts[6]+$ssh; $sp[3]=$pts[7]-$ssv; + + // In case the final bar is negative + $nsp[0]=$pts[0]; $nsp[1]=$pts[1]; + $nsp[2]=$pts[0]+$ssh; $nsp[3]=$pts[1]-$ssv; + $nsp[4]=$pts[6]+$ssh; $nsp[5]=$pts[7]-$ssv; + $nsp[10]=$pts[6]+1; $nsp[11]=$pts[7]; + } + + if( $j === $this->nbrplots-1 ) { + // If this is the last plot of the bar and + // the total value is larger than 0 then we + // add the shadow. + if( is_array($this->bar_shadow_color) ) { + $numcolors = count($this->bar_shadow_color); + if( $numcolors == 0 ) { + JpGraphError::RaiseL(2013);//('You have specified an empty array for shadow colors in the bar plot.'); + } + $img->PushColor($this->bar_shadow_color[$i % $numcolors]); + } + else { + $img->PushColor($this->bar_shadow_color); + } + + if( $accy > 0 ) { + $sp[4]=$pts[4]+$ssh; $sp[5]=$pts[5]-$ssv; + $sp[6]=$pts[2]+$ssh; $sp[7]=$pts[3]-$ssv; + $sp[8]=$pts[2]; $sp[9]=$pts[3]-1; + $sp[10]=$pts[4]+1; $sp[11]=$pts[5]; + $img->FilledPolygon($sp,4); + } + elseif( $accy_neg < 0 ) { + $nsp[6]=$pts[4]+$ssh; $nsp[7]=$pts[5]-$ssv; + $nsp[8]=$pts[4]+1; $nsp[9]=$pts[5]; + $img->FilledPolygon($nsp,4); + } + $img->PopColor(); + } + } + + + // If value is NULL or 0, then don't draw a bar at all + if ($this->plots[$j]->coords[0][$i] == 0 ) continue; + + if( $this->plots[$j]->grad ) { + if( $grad === null ) { + $grad = new Gradient($img); + } + if( is_array($this->plots[$j]->grad_fromcolor) ) { + // The first argument (grad_fromcolor) can be either an array or a single color. If it is an array + // then we have two choices. It can either a) be a single color specified as an RGB triple or it can be + // an array to specify both (from, to style) for each individual bar. The way to know the difference is + // to investgate the first element. If this element is an integer [0,255] then we assume it is an RGB + // triple. + $ng = count($this->plots[$j]->grad_fromcolor); + if( $ng === 3 ) { + if( is_numeric($this->plots[$j]->grad_fromcolor[0]) && $this->plots[$j]->grad_fromcolor[0] > 0 && + $this->plots[$j]->grad_fromcolor[0] < 256 ) { + // RGB Triple + $fromcolor = $this->plots[$j]->grad_fromcolor; + $tocolor = $this->plots[$j]->grad_tocolor; + $style = $this->plots[$j]->grad_style; + } + else { + $fromcolor = $this->plots[$j]->grad_fromcolor[$i % $ng][0]; + $tocolor = $this->plots[$j]->grad_fromcolor[$i % $ng][1]; + $style = $this->plots[$j]->grad_fromcolor[$i % $ng][2]; + } + } + else { + $fromcolor = $this->plots[$j]->grad_fromcolor[$i % $ng][0]; + $tocolor = $this->plots[$j]->grad_fromcolor[$i % $ng][1]; + $style = $this->plots[$j]->grad_fromcolor[$i % $ng][2]; + } + $grad->FilledRectangle($pts[2],$pts[3], + $pts[6],$pts[7], + $fromcolor,$tocolor,$style); + } + else { + $grad->FilledRectangle($pts[2],$pts[3], + $pts[6],$pts[7], + $this->plots[$j]->grad_fromcolor, + $this->plots[$j]->grad_tocolor, + $this->plots[$j]->grad_style); + } + } else { + if (is_array($this->plots[$j]->fill_color) ) { + $numcolors = count($this->plots[$j]->fill_color); + $fillcolor = $this->plots[$j]->fill_color[$i % $numcolors]; + // If the bar is specified to be non filled then the fill color is false + if( $fillcolor !== false ) { + $img->SetColor($this->plots[$j]->fill_color[$i % $numcolors]); + } + } + else { + $fillcolor = $this->plots[$j]->fill_color; + if( $fillcolor !== false ) { + $img->SetColor($this->plots[$j]->fill_color); + } + } + if( $fillcolor !== false ) { + $img->FilledPolygon($pts); + } + } + + $img->SetColor($this->plots[$j]->color); + + // Stroke the pattern + if( $this->plots[$j]->iPattern > -1 ) { + if( $pattern===NULL ) { + $pattern = new RectPatternFactory(); + } + + $prect = $pattern->Create($this->plots[$j]->iPattern,$this->plots[$j]->iPatternColor,1); + $prect->SetDensity($this->plots[$j]->iPatternDensity); + if( $this->plots[$j]->coords[0][$i] < 0 ) { + $rx = $pts[0]; + $ry = $pts[1]; + } + else { + $rx = $pts[2]; + $ry = $pts[3]; + } + $width = abs($pts[4]-$pts[0])+1; + $height = abs($pts[1]-$pts[3])+1; + $prect->SetPos(new Rectangle($rx,$ry,$width,$height)); + $prect->Stroke($img); + } + + + // CSIM array + + if( $i < count($this->plots[$j]->csimtargets) ) { + // Create the client side image map + $rpts = $img->ArrRotate($pts); + $csimcoord=round($rpts[0]).", ".round($rpts[1]); + for( $k=1; $k < 4; ++$k){ + $csimcoord .= ", ".round($rpts[2*$k]).", ".round($rpts[2*$k+1]); + } + if( ! empty($this->plots[$j]->csimtargets[$i]) ) { + $this->csimareas.= 'csimareas.= " href=\"".$this->plots[$j]->csimtargets[$i]."\" "; + + if( ! empty($this->plots[$j]->csimwintargets[$i]) ) { + $this->csimareas.= " target=\"".$this->plots[$j]->csimwintargets[$i]."\" "; + } + + $sval=''; + if( !empty($this->plots[$j]->csimalts[$i]) ) { + $sval=sprintf($this->plots[$j]->csimalts[$i],$this->plots[$j]->coords[0][$i]); + $this->csimareas .= " title=\"$sval\" "; + } + $this->csimareas .= " alt=\"$sval\" />\n"; + } + } + + $pts[] = $pts[0]; + $pts[] = $pts[1]; + $img->SetLineWeight($this->plots[$j]->weight); + $img->Polygon($pts); + $img->SetLineWeight(1); + } + + // Daw potential bar around the entire accbar bar + if( $this->weight > 0 ) { + $y=$yscale->Translate(0); + $img->SetColor($this->color); + $img->SetLineWeight($this->weight); + $img->Rectangle($pts[0],$y,$pts[6],$pts[5]); + } + + // Draw labels for each acc.bar + + $x=$pts[2]+($pts[4]-$pts[2])/2; + if($this->bar_shadow) $x += $ssh; + + // First stroke the accumulated value for the entire bar + // This value is always placed at the top/bottom of the bars + if( $accy + $accy_neg < 0 ) { + $y=$yscale->Translate($accy_neg); + } + else { + $y=$yscale->Translate($accy); + } + $this->value->Stroke($img,$accy + $accy_neg,$x,$y); + + $accy = 0; + $accy_neg = 0; + for($j=0; $j < $this->nbrplots; ++$j ) { + + // We don't print 0 values in an accumulated bar plot + if( $this->plots[$j]->coords[0][$i] == 0 ) continue; + + if ($this->plots[$j]->coords[0][$i] > 0) { + $yt=$yscale->Translate($this->plots[$j]->coords[0][$i]+$accy); + $accyt=$yscale->Translate($accy); + if( $this->plots[$j]->valuepos=='center' ) { + $y = $accyt-($accyt-$yt)/2; + } + elseif( $this->plots[$j]->valuepos=='bottom' ) { + $y = $accyt; + } + else { // top or max + $y = $accyt-($accyt-$yt); + } + $accy+=$this->plots[$j]->coords[0][$i]; + if( $this->plots[$j]->valuepos=='center' ) { + $this->plots[$j]->value->SetAlign("center","center"); + $this->plots[$j]->value->SetMargin(0); + } + elseif( $this->plots[$j]->valuepos=='bottom' ) { + $this->plots[$j]->value->SetAlign('center','bottom'); + $this->plots[$j]->value->SetMargin(2); + } + else { + $this->plots[$j]->value->SetAlign('center','top'); + $this->plots[$j]->value->SetMargin(1); + } + } else { + $yt=$yscale->Translate($this->plots[$j]->coords[0][$i]+$accy_neg); + $accyt=$yscale->Translate($accy_neg); + $accy_neg+=$this->plots[$j]->coords[0][$i]; + if( $this->plots[$j]->valuepos=='center' ) { + $y = $accyt-($accyt-$yt)/2; + } + elseif( $this->plots[$j]->valuepos=='bottom' ) { + $y = $accyt; + } + else { + $y = $accyt-($accyt-$yt); + } + if( $this->plots[$j]->valuepos=='center' ) { + $this->plots[$j]->value->SetAlign("center","center"); + $this->plots[$j]->value->SetMargin(0); + } + elseif( $this->plots[$j]->valuepos=='bottom' ) { + $this->plots[$j]->value->SetAlign('center',$j==0 ? 'bottom':'top'); + $this->plots[$j]->value->SetMargin(-2); + } + else { + $this->plots[$j]->value->SetAlign('center','bottom'); + $this->plots[$j]->value->SetMargin(-1); + } + } + $this->plots[$j]->value->Stroke($img,$this->plots[$j]->coords[0][$i],round($x),round($y)); + } + + } + return true; + } +} // Class + +/* EOF */ +?> diff --git a/Societes/ric/jpgraph/jpgraph_canvas.php b/Societes/ric/jpgraph/jpgraph_canvas.php new file mode 100755 index 00000000..f9429513 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_canvas.php @@ -0,0 +1,95 @@ +StrokePlotArea(); + } + + // Method description + function Stroke($aStrokeFileName="") { + if( $this->texts != null ) { + for($i=0; $i < count($this->texts); ++$i) { + $this->texts[$i]->Stroke($this->img); + } + } + if( $this->iTables !== null ) { + for($i=0; $i < count($this->iTables); ++$i) { + $this->iTables[$i]->Stroke($this->img); + } + } + $this->StrokeTitles(); + + // If the filename is the predefined value = '_csim_special_' + // we assume that the call to stroke only needs to do enough + // to correctly generate the CSIM maps. + // We use this variable to skip things we don't strictly need + // to do to generate the image map to improve performance + // a best we can. Therefor you will see a lot of tests !$_csim in the + // code below. + $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); + + // We need to know if we have stroked the plot in the + // GetCSIMareas. Otherwise the CSIM hasn't been generated + // and in the case of GetCSIM called before stroke to generate + // CSIM without storing an image to disk GetCSIM must call Stroke. + $this->iHasStroked = true; + + if( !$_csim ) { + + // Should we do any final image transformation + if( $this->iImgTrans ) { + if( !class_exists('ImgTrans',false) ) { + require_once('jpgraph_imgtrans.php'); + } + + $tform = new ImgTrans($this->img->img); + $this->img->img = $tform->Skew3D($this->iImgTransHorizon,$this->iImgTransSkewDist, + $this->iImgTransDirection,$this->iImgTransHighQ, + $this->iImgTransMinSize,$this->iImgTransFillColor, + $this->iImgTransBorder); + } + + + // If the filename is given as the special _IMG_HANDLER + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline,$aStrokeFileName); + return true; + } + } + } +} // Class + +/* EOF */ +?> diff --git a/Societes/ric/jpgraph/jpgraph_canvtools.php b/Societes/ric/jpgraph/jpgraph_canvtools.php new file mode 100755 index 00000000..2290a5bc --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_canvtools.php @@ -0,0 +1,523 @@ +g = $graph; + $this->w = $graph->img->width; + $this->h = $graph->img->height; + $this->ixmin = $xmin; + $this->ixmax = $xmax; + $this->iymin = $ymin; + $this->iymax = $ymax; + } + + function Set($xmin=0,$xmax=10,$ymin=0,$ymax=10) { + $this->ixmin = $xmin; + $this->ixmax = $xmax; + $this->iymin = $ymin; + $this->iymax = $ymax; + } + + function Get() { + return array($this->ixmin,$this->ixmax,$this->iymin,$this->iymax); + } + + function Translate($x,$y) { + $xp = round(($x-$this->ixmin)/($this->ixmax - $this->ixmin) * $this->w); + $yp = round(($y-$this->iymin)/($this->iymax - $this->iymin) * $this->h); + return array($xp,$yp); + } + + function TranslateX($x) { + $xp = round(($x-$this->ixmin)/($this->ixmax - $this->ixmin) * $this->w); + return $xp; + } + + function TranslateY($y) { + $yp = round(($y-$this->iymin)/($this->iymax - $this->iymin) * $this->h); + return $yp; + } + +} + + +//=================================================== +// CLASS Shape +// Description: Methods to draw shapes on canvas +//=================================================== +class Shape { + private $img,$scale; + + function __construct($aGraph,$scale) { + $this->img = $aGraph->img; + $this->img->SetColor('black'); + $this->scale = $scale; + } + + function SetColor($aColor) { + $this->img->SetColor($aColor); + } + + function Line($x1,$y1,$x2,$y2) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + list($x2,$y2) = $this->scale->Translate($x2,$y2); + $this->img->Line($x1,$y1,$x2,$y2); + } + + function SetLineWeight($aWeight) { + $this->img->SetLineWeight($aWeight); + } + + function Polygon($p,$aClosed=false) { + $n=count($p); + for($i=0; $i < $n; $i+=2 ) { + $p[$i] = $this->scale->TranslateX($p[$i]); + $p[$i+1] = $this->scale->TranslateY($p[$i+1]); + } + $this->img->Polygon($p,$aClosed); + } + + function FilledPolygon($p) { + $n=count($p); + for($i=0; $i < $n; $i+=2 ) { + $p[$i] = $this->scale->TranslateX($p[$i]); + $p[$i+1] = $this->scale->TranslateY($p[$i+1]); + } + $this->img->FilledPolygon($p); + } + + + // Draw a bezier curve with defining points in the $aPnts array + // using $aSteps steps. + // 0=x0, 1=y0 + // 2=x1, 3=y1 + // 4=x2, 5=y2 + // 6=x3, 7=y3 + function Bezier($p,$aSteps=40) { + $x0 = $p[0]; + $y0 = $p[1]; + // Calculate coefficients + $cx = 3*($p[2]-$p[0]); + $bx = 3*($p[4]-$p[2])-$cx; + $ax = $p[6]-$p[0]-$cx-$bx; + $cy = 3*($p[3]-$p[1]); + $by = 3*($p[5]-$p[3])-$cy; + $ay = $p[7]-$p[1]-$cy-$by; + + // Step size + $delta = 1.0/$aSteps; + + $x_old = $x0; + $y_old = $y0; + for($t=$delta; $t<=1.0; $t+=$delta) { + $tt = $t*$t; $ttt=$tt*$t; + $x = $ax*$ttt + $bx*$tt + $cx*$t + $x0; + $y = $ay*$ttt + $by*$tt + $cy*$t + $y0; + $this->Line($x_old,$y_old,$x,$y); + $x_old = $x; + $y_old = $y; + } + $this->Line($x_old,$y_old,$p[6],$p[7]); + } + + function Rectangle($x1,$y1,$x2,$y2) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + list($x2,$y2) = $this->scale->Translate($x2,$y2); + $this->img->Rectangle($x1,$y1,$x2,$y2); + } + + function FilledRectangle($x1,$y1,$x2,$y2) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + list($x2,$y2) = $this->scale->Translate($x2,$y2); + $this->img->FilledRectangle($x1,$y1,$x2,$y2); + } + + function Circle($x1,$y1,$r) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + if( $r >= 0 ) + $r = $this->scale->TranslateX($r); + else + $r = -$r; + $this->img->Circle($x1,$y1,$r); + } + + function FilledCircle($x1,$y1,$r) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + if( $r >= 0 ) + $r = $this->scale->TranslateX($r); + else + $r = -$r; + $this->img->FilledCircle($x1,$y1,$r); + } + + function RoundedRectangle($x1,$y1,$x2,$y2,$r=null) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + list($x2,$y2) = $this->scale->Translate($x2,$y2); + + if( $r == null ) + $r = 5; + elseif( $r >= 0 ) + $r = $this->scale->TranslateX($r); + else + $r = -$r; + $this->img->RoundedRectangle($x1,$y1,$x2,$y2,$r); + } + + function FilledRoundedRectangle($x1,$y1,$x2,$y2,$r=null) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + list($x2,$y2) = $this->scale->Translate($x2,$y2); + + if( $r == null ) + $r = 5; + elseif( $r > 0 ) + $r = $this->scale->TranslateX($r); + else + $r = -$r; + $this->img->FilledRoundedRectangle($x1,$y1,$x2,$y2,$r); + } + + function ShadowRectangle($x1,$y1,$x2,$y2,$fcolor=false,$shadow_width=null,$shadow_color=array(102,102,102)) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + list($x2,$y2) = $this->scale->Translate($x2,$y2); + if( $shadow_width == null ) + $shadow_width=4; + else + $shadow_width=$this->scale->TranslateX($shadow_width); + $this->img->ShadowRectangle($x1,$y1,$x2,$y2,$fcolor,$shadow_width,$shadow_color); + } + + function SetTextAlign($halign,$valign="bottom") { + $this->img->SetTextAlign($halign,$valign="bottom"); + } + + function StrokeText($x1,$y1,$txt,$dir=0,$paragraph_align="left") { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + $this->img->StrokeText($x1,$y1,$txt,$dir,$paragraph_align); + } + + // A rounded rectangle where one of the corner has been moved "into" the + // rectangle 'iw' width and 'ih' height. Corners: + // 0=Top left, 1=top right, 2=bottom right, 3=bottom left + function IndentedRectangle($xt,$yt,$w,$h,$iw=0,$ih=0,$aCorner=3,$aFillColor="",$r=4) { + + list($xt,$yt) = $this->scale->Translate($xt,$yt); + list($w,$h) = $this->scale->Translate($w,$h); + list($iw,$ih) = $this->scale->Translate($iw,$ih); + + $xr = $xt + $w - 0; + $yl = $yt + $h - 0; + + switch( $aCorner ) { + case 0: // Upper left + + // Bottom line, left & right arc + $this->img->Line($xt+$r,$yl,$xr-$r,$yl); + $this->img->Arc($xt+$r,$yl-$r,$r*2,$r*2,90,180); + $this->img->Arc($xr-$r,$yl-$r,$r*2,$r*2,0,90); + + // Right line, Top right arc + $this->img->Line($xr,$yt+$r,$xr,$yl-$r); + $this->img->Arc($xr-$r,$yt+$r,$r*2,$r*2,270,360); + + // Top line, Top left arc + $this->img->Line($xt+$iw+$r,$yt,$xr-$r,$yt); + $this->img->Arc($xt+$iw+$r,$yt+$r,$r*2,$r*2,180,270); + + // Left line + $this->img->Line($xt,$yt+$ih+$r,$xt,$yl-$r); + + // Indent horizontal, Lower left arc + $this->img->Line($xt+$r,$yt+$ih,$xt+$iw-$r,$yt+$ih); + $this->img->Arc($xt+$r,$yt+$ih+$r,$r*2,$r*2,180,270); + + // Indent vertical, Indent arc + $this->img->Line($xt+$iw,$yt+$r,$xt+$iw,$yt+$ih-$r); + $this->img->Arc($xt+$iw-$r,$yt+$ih-$r,$r*2,$r*2,0,90); + + if( $aFillColor != '' ) { + $bc = $this->img->current_color_name; + $this->img->PushColor($aFillColor); + $this->img->FillToBorder($xr-$r,$yl-$r,$bc); + $this->img->PopColor(); + } + + break; + + case 1: // Upper right + + // Bottom line, left & right arc + $this->img->Line($xt+$r,$yl,$xr-$r,$yl); + $this->img->Arc($xt+$r,$yl-$r,$r*2,$r*2,90,180); + $this->img->Arc($xr-$r,$yl-$r,$r*2,$r*2,0,90); + + // Left line, Top left arc + $this->img->Line($xt,$yt+$r,$xt,$yl-$r); + $this->img->Arc($xt+$r,$yt+$r,$r*2,$r*2,180,270); + + // Top line, Top right arc + $this->img->Line($xt+$r,$yt,$xr-$iw-$r,$yt); + $this->img->Arc($xr-$iw-$r,$yt+$r,$r*2,$r*2,270,360); + + // Right line + $this->img->Line($xr,$yt+$ih+$r,$xr,$yl-$r); + + // Indent horizontal, Lower right arc + $this->img->Line($xr-$iw+$r,$yt+$ih,$xr-$r,$yt+$ih); + $this->img->Arc($xr-$r,$yt+$ih+$r,$r*2,$r*2,270,360); + + // Indent vertical, Indent arc + $this->img->Line($xr-$iw,$yt+$r,$xr-$iw,$yt+$ih-$r); + $this->img->Arc($xr-$iw+$r,$yt+$ih-$r,$r*2,$r*2,90,180); + + if( $aFillColor != '' ) { + $bc = $this->img->current_color_name; + $this->img->PushColor($aFillColor); + $this->img->FillToBorder($xt+$r,$yl-$r,$bc); + $this->img->PopColor(); + } + + break; + + case 2: // Lower right + // Top line, Top left & Top right arc + $this->img->Line($xt+$r,$yt,$xr-$r,$yt); + $this->img->Arc($xt+$r,$yt+$r,$r*2,$r*2,180,270); + $this->img->Arc($xr-$r,$yt+$r,$r*2,$r*2,270,360); + + // Left line, Bottom left arc + $this->img->Line($xt,$yt+$r,$xt,$yl-$r); + $this->img->Arc($xt+$r,$yl-$r,$r*2,$r*2,90,180); + + // Bottom line, Bottom right arc + $this->img->Line($xt+$r,$yl,$xr-$iw-$r,$yl); + $this->img->Arc($xr-$iw-$r,$yl-$r,$r*2,$r*2,0,90); + + // Right line + $this->img->Line($xr,$yt+$r,$xr,$yl-$ih-$r); + + // Indent horizontal, Lower right arc + $this->img->Line($xr-$r,$yl-$ih,$xr-$iw+$r,$yl-$ih); + $this->img->Arc($xr-$r,$yl-$ih-$r,$r*2,$r*2,0,90); + + // Indent vertical, Indent arc + $this->img->Line($xr-$iw,$yl-$r,$xr-$iw,$yl-$ih+$r); + $this->img->Arc($xr-$iw+$r,$yl-$ih+$r,$r*2,$r*2,180,270); + + if( $aFillColor != '' ) { + $bc = $this->img->current_color_name; + $this->img->PushColor($aFillColor); + $this->img->FillToBorder($xt+$r,$yt+$r,$bc); + $this->img->PopColor(); + } + + break; + + case 3: // Lower left + // Top line, Top left & Top right arc + $this->img->Line($xt+$r,$yt,$xr-$r,$yt); + $this->img->Arc($xt+$r,$yt+$r,$r*2,$r*2,180,270); + $this->img->Arc($xr-$r,$yt+$r,$r*2,$r*2,270,360); + + // Right line, Bottom right arc + $this->img->Line($xr,$yt+$r,$xr,$yl-$r); + $this->img->Arc($xr-$r,$yl-$r,$r*2,$r*2,0,90); + + // Bottom line, Bottom left arc + $this->img->Line($xt+$iw+$r,$yl,$xr-$r,$yl); + $this->img->Arc($xt+$iw+$r,$yl-$r,$r*2,$r*2,90,180); + + // Left line + $this->img->Line($xt,$yt+$r,$xt,$yl-$ih-$r); + + // Indent horizontal, Lower left arc + $this->img->Line($xt+$r,$yl-$ih,$xt+$iw-$r,$yl-$ih); + $this->img->Arc($xt+$r,$yl-$ih-$r,$r*2,$r*2,90,180); + + // Indent vertical, Indent arc + $this->img->Line($xt+$iw,$yl-$ih+$r,$xt+$iw,$yl-$r); + $this->img->Arc($xt+$iw-$r,$yl-$ih+$r,$r*2,$r*2,270,360); + + if( $aFillColor != '' ) { + $bc = $this->img->current_color_name; + $this->img->PushColor($aFillColor); + $this->img->FillToBorder($xr-$r,$yt+$r,$bc); + $this->img->PopColor(); + } + + break; + } + } +} + + +//=================================================== +// CLASS RectangleText +// Description: Draws a text paragraph inside a +// rounded, possible filled, rectangle. +//=================================================== +class CanvasRectangleText { + private $ix,$iy,$iw,$ih,$ir=4; + private $iTxt,$iColor='black',$iFillColor='',$iFontColor='black'; + private $iParaAlign='center'; + private $iAutoBoxMargin=5; + private $iShadowWidth=3,$iShadowColor=''; + + function __construct($aTxt='',$xl=0,$yt=0,$w=0,$h=0) { + $this->iTxt = new Text($aTxt); + $this->ix = $xl; + $this->iy = $yt; + $this->iw = $w; + $this->ih = $h; + } + + function SetShadow($aColor='gray',$aWidth=3) { + $this->iShadowColor = $aColor; + $this->iShadowWidth = $aWidth; + } + + function SetFont($FontFam,$aFontStyle,$aFontSize=12) { + $this->iTxt->SetFont($FontFam,$aFontStyle,$aFontSize); + } + + function SetTxt($aTxt) { + $this->iTxt->Set($aTxt); + } + + function ParagraphAlign($aParaAlign) { + $this->iParaAlign = $aParaAlign; + } + + function SetFillColor($aFillColor) { + $this->iFillColor = $aFillColor; + } + + function SetAutoMargin($aMargin) { + $this->iAutoBoxMargin=$aMargin; + } + + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function SetFontColor($aColor) { + $this->iFontColor = $aColor; + } + + function SetPos($xl=0,$yt=0,$w=0,$h=0) { + $this->ix = $xl; + $this->iy = $yt; + $this->iw = $w; + $this->ih = $h; + } + + function Pos($xl=0,$yt=0,$w=0,$h=0) { + $this->ix = $xl; + $this->iy = $yt; + $this->iw = $w; + $this->ih = $h; + } + + function Set($aTxt,$xl,$yt,$w=0,$h=0) { + $this->iTxt->Set($aTxt); + $this->ix = $xl; + $this->iy = $yt; + $this->iw = $w; + $this->ih = $h; + } + + function SetCornerRadius($aRad=5) { + $this->ir = $aRad; + } + + function Stroke($aImg,$scale) { + + // If coordinates are specifed as negative this means we should + // treat them as abolsute (pixels) coordinates + if( $this->ix > 0 ) { + $this->ix = $scale->TranslateX($this->ix) ; + } + else { + $this->ix = -$this->ix; + } + + if( $this->iy > 0 ) { + $this->iy = $scale->TranslateY($this->iy) ; + } + else { + $this->iy = -$this->iy; + } + + list($this->iw,$this->ih) = $scale->Translate($this->iw,$this->ih) ; + + if( $this->iw == 0 ) + $this->iw = round($this->iTxt->GetWidth($aImg) + $this->iAutoBoxMargin); + if( $this->ih == 0 ) { + $this->ih = round($this->iTxt->GetTextHeight($aImg) + $this->iAutoBoxMargin); + } + + if( $this->iShadowColor != '' ) { + $aImg->PushColor($this->iShadowColor); + $aImg->FilledRoundedRectangle($this->ix+$this->iShadowWidth, + $this->iy+$this->iShadowWidth, + $this->ix+$this->iw-1+$this->iShadowWidth, + $this->iy+$this->ih-1+$this->iShadowWidth, + $this->ir); + $aImg->PopColor(); + } + + if( $this->iFillColor != '' ) { + $aImg->PushColor($this->iFillColor); + $aImg->FilledRoundedRectangle($this->ix,$this->iy, + $this->ix+$this->iw-1, + $this->iy+$this->ih-1, + $this->ir); + $aImg->PopColor(); + } + + if( $this->iColor != '' ) { + $aImg->PushColor($this->iColor); + $aImg->RoundedRectangle($this->ix,$this->iy, + $this->ix+$this->iw-1, + $this->iy+$this->ih-1, + $this->ir); + $aImg->PopColor(); + } + + $this->iTxt->Align('center','center'); + $this->iTxt->ParagraphAlign($this->iParaAlign); + $this->iTxt->SetColor($this->iFontColor); + $this->iTxt->Stroke($aImg, $this->ix+$this->iw/2, $this->iy+$this->ih/2); + + return array($this->iw, $this->ih); + + } + +} + + +?> diff --git a/Societes/ric/jpgraph/jpgraph_contour.php b/Societes/ric/jpgraph/jpgraph_contour.php new file mode 100755 index 00000000..760989e5 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_contour.php @@ -0,0 +1,587 @@ +nbrRows = count($aMatrix); + $this->nbrCols = count($aMatrix[0]); + $this->dataPoints = $aMatrix; + + if( is_array($aIsobars) ) { + // use the isobar values supplied + $this->nbrIsobars = count($aIsobars); + $this->isobarValues = $aIsobars; + } + else { + // Determine the isobar values automatically + $this->nbrIsobars = $aIsobars; + list($min,$max) = $this->getMinMaxVal(); + $stepSize = ($max-$min) / $aIsobars ; + $isobar = $min+$stepSize/2; + for ($i = 0; $i < $aIsobars; $i++) { + $this->isobarValues[$i] = $isobar; + $isobar += $stepSize; + } + } + + if( $aColors !== null && count($aColors) > 0 ) { + + if( !is_array($aColors) ) { + JpGraphError::RaiseL(28001); + //'Third argument to Contour must be an array of colors.' + } + + if( count($aColors) != count($this->isobarValues) ) { + JpGraphError::RaiseL(28002); + //'Number of colors must equal the number of isobar lines specified'; + } + + $this->isobarColors = $aColors; + } + } + + /** + * Flip the plot around the Y-coordinate. This has the same affect as flipping the input + * data matrice + * + * @param $aFlg If true the the vertice in input data matrice position (0,0) corresponds to the top left + * corner of teh plot otherwise it will correspond to the bottom left corner (a horizontal flip) + */ + function SetInvert($aFlg=true) { + $this->invert = $aFlg; + } + + /** + * Find the min and max values in the data matrice + * + * @return array(min_value,max_value) + */ + function getMinMaxVal() { + $min = $this->dataPoints[0][0]; + $max = $this->dataPoints[0][0]; + for ($i = 0; $i < $this->nbrRows; $i++) { + if( ($mi=min($this->dataPoints[$i])) < $min ) $min = $mi; + if( ($ma=max($this->dataPoints[$i])) > $max ) $max = $ma; + } + return array($min,$max); + } + + /** + * Reset the two matrices that keeps track on where the isobars crosses the + * horizontal and vertical edges + */ + function resetEdgeMatrices() { + for ($k = 0; $k < 2; $k++) { + for ($i = 0; $i <= $this->nbrRows; $i++) { + for ($j = 0; $j <= $this->nbrCols; $j++) { + $this->edges[$k][$i][$j] = false; + } + } + } + } + + /** + * Determine if the specified isobar crosses the horizontal edge specified by its row and column + * + * @param $aRow Row index of edge to be checked + * @param $aCol Col index of edge to be checked + * @param $aIsobar Isobar value + * @return true if the isobar is crossing this edge + */ + function isobarHCrossing($aRow,$aCol,$aIsobar) { + + if( $aCol >= $this->nbrCols-1 ) { + JpGraphError::RaiseL(28003,$aCol); + //'ContourPlot Internal Error: isobarHCrossing: Coloumn index too large (%d)' + } + if( $aRow >= $this->nbrRows ) { + JpGraphError::RaiseL(28004,$aRow); + //'ContourPlot Internal Error: isobarHCrossing: Row index too large (%d)' + } + + $v1 = $this->dataPoints[$aRow][$aCol]; + $v2 = $this->dataPoints[$aRow][$aCol+1]; + + return ($aIsobar-$v1)*($aIsobar-$v2) < 0 ; + + } + + /** + * Determine if the specified isobar crosses the vertical edge specified by its row and column + * + * @param $aRow Row index of edge to be checked + * @param $aCol Col index of edge to be checked + * @param $aIsobar Isobar value + * @return true if the isobar is crossing this edge + */ + function isobarVCrossing($aRow,$aCol,$aIsobar) { + + if( $aRow >= $this->nbrRows-1) { + JpGraphError::RaiseL(28005,$aRow); + //'isobarVCrossing: Row index too large + } + if( $aCol >= $this->nbrCols ) { + JpGraphError::RaiseL(28006,$aCol); + //'isobarVCrossing: Col index too large + } + + $v1 = $this->dataPoints[$aRow][$aCol]; + $v2 = $this->dataPoints[$aRow+1][$aCol]; + + return ($aIsobar-$v1)*($aIsobar-$v2) < 0 ; + + } + + /** + * Determine all edges, horizontal and vertical that the specified isobar crosses. The crossings + * are recorded in the two edge matrices. + * + * @param $aIsobar The value of the isobar to be checked + */ + function determineIsobarEdgeCrossings($aIsobar) { + + $ib = $this->isobarValues[$aIsobar]; + + for ($i = 0; $i < $this->nbrRows-1; $i++) { + for ($j = 0; $j < $this->nbrCols-1; $j++) { + $this->edges[HORIZ_EDGE][$i][$j] = $this->isobarHCrossing($i,$j,$ib); + $this->edges[VERT_EDGE][$i][$j] = $this->isobarVCrossing($i,$j,$ib); + } + } + + // We now have the bottom and rightmost edges unsearched + for ($i = 0; $i < $this->nbrRows-1; $i++) { + $this->edges[VERT_EDGE][$i][$j] = $this->isobarVCrossing($i,$this->nbrCols-1,$ib); + } + for ($j = 0; $j < $this->nbrCols-1; $j++) { + $this->edges[HORIZ_EDGE][$i][$j] = $this->isobarHCrossing($this->nbrRows-1,$j,$ib); + } + + } + + /** + * Return the normalized coordinates for the crossing of the specified edge with the specified + * isobar- The crossing is simpy detrmined with a linear interpolation between the two vertices + * on each side of the edge and the value of the isobar + * + * @param $aRow Row of edge + * @param $aCol Column of edge + * @param $aEdgeDir Determine if this is a horizontal or vertical edge + * @param $ib The isobar value + * @return unknown_type + */ + function getCrossingCoord($aRow,$aCol,$aEdgeDir,$aIsobarVal) { + + // In order to avoid numerical problem when two vertices are very close + // we have to check and avoid dividing by close to zero denumerator. + if( $aEdgeDir == HORIZ_EDGE ) { + $d = abs($this->dataPoints[$aRow][$aCol] - $this->dataPoints[$aRow][$aCol+1]); + if( $d > 0.001 ) { + $xcoord = $aCol + abs($aIsobarVal - $this->dataPoints[$aRow][$aCol]) / $d; + } + else { + $xcoord = $aCol; + } + $ycoord = $aRow; + } + else { + $d = abs($this->dataPoints[$aRow][$aCol] - $this->dataPoints[$aRow+1][$aCol]); + if( $d > 0.001 ) { + $ycoord = $aRow + abs($aIsobarVal - $this->dataPoints[$aRow][$aCol]) / $d; + } + else { + $ycoord = $aRow; + } + $xcoord = $aCol; + } + if( $this->invert ) { + $ycoord = $this->nbrRows-1 - $ycoord; + } + return array($xcoord,$ycoord); + + } + + /** + * In order to avoid all kinds of unpleasent extra checks and complex boundary + * controls for the degenerated case where the contour levels exactly crosses + * one of the vertices we add a very small delta (0.1%) to the data point value. + * This has no visible affect but it makes the code sooooo much cleaner. + * + */ + function adjustDataPointValues() { + + $ni = count($this->isobarValues); + for ($k = 0; $k < $ni; $k++) { + $ib = $this->isobarValues[$k]; + for ($row = 0 ; $row < $this->nbrRows-1; ++$row) { + for ($col = 0 ; $col < $this->nbrCols-1; ++$col ) { + if( abs($this->dataPoints[$row][$col] - $ib) < 0.0001 ) { + $this->dataPoints[$row][$col] += $this->dataPoints[$row][$col]*0.001; + } + } + } + } + + } + + /** + * @param $aFlg + * @param $aBW + * @return unknown_type + */ + function UseHighContrastColor($aFlg=true,$aBW=false) { + $this->highcontrast = $aFlg; + $this->highcontrastbw = $aBW; + } + + /** + * Calculate suitable colors for each defined isobar + * + */ + function CalculateColors() { + if ( $this->highcontrast ) { + if ( $this->highcontrastbw ) { + for ($ib = 0; $ib < $this->nbrIsobars; $ib++) { + $this->isobarColors[$ib] = 'black'; + } + } + else { + // Use only blue/red scale + $step = round(255/($this->nbrIsobars-1)); + for ($ib = 0; $ib < $this->nbrIsobars; $ib++) { + $this->isobarColors[$ib] = array($ib*$step, 50, 255-$ib*$step); + } + } + } + else { + $n = $this->nbrIsobars; + $v = 0; $step = 1 / ($this->nbrIsobars-1); + for ($ib = 0; $ib < $this->nbrIsobars; $ib++) { + $this->isobarColors[$ib] = RGB::GetSpectrum($v); + $v += $step; + } + } + } + + /** + * This is where the main work is done. For each isobar the crossing of the edges are determined + * and then each cell is analyzed to find the 0, 2 or 4 crossings. Then the normalized coordinate + * for the crossings are determined and pushed on to the isobar stack. When the method is finished + * the $isobarCoord will hold one arrayfor each isobar where all the line segments that makes + * up the contour plot are stored. + * + * @return array( $isobarCoord, $isobarValues, $isobarColors ) + */ + function getIsobars() { + + $this->adjustDataPointValues(); + + for ($isobar = 0; $isobar < $this->nbrIsobars; $isobar++) { + + $ib = $this->isobarValues[$isobar]; + $this->resetEdgeMatrices(); + $this->determineIsobarEdgeCrossings($isobar); + $this->isobarCoord[$isobar] = array(); + + $ncoord = 0; + + for ($row = 0 ; $row < $this->nbrRows-1; ++$row) { + for ($col = 0 ; $col < $this->nbrCols-1; ++$col ) { + + // Find out how many crossings around the edges + $n = 0; + if ( $this->edges[HORIZ_EDGE][$row][$col] ) $neigh[$n++] = array($row, $col, HORIZ_EDGE); + if ( $this->edges[HORIZ_EDGE][$row+1][$col] ) $neigh[$n++] = array($row+1,$col, HORIZ_EDGE); + if ( $this->edges[VERT_EDGE][$row][$col] ) $neigh[$n++] = array($row, $col, VERT_EDGE); + if ( $this->edges[VERT_EDGE][$row][$col+1] ) $neigh[$n++] = array($row, $col+1,VERT_EDGE); + + if ( $n == 2 ) { + $n1=0; $n2=1; + $this->isobarCoord[$isobar][$ncoord++] = array( + $this->getCrossingCoord($neigh[$n1][0],$neigh[$n1][1],$neigh[$n1][2],$ib), + $this->getCrossingCoord($neigh[$n2][0],$neigh[$n2][1],$neigh[$n2][2],$ib) ); + } + elseif ( $n == 4 ) { + // We must determine how to connect the edges either northwest->southeast or + // northeast->southwest. We do that by calculating the imaginary middle value of + // the cell by averaging the for corners. This will compared with the value of the + // top left corner will help determine the orientation of the ridge/creek + $midval = ($this->dataPoints[$row][$col]+$this->dataPoints[$row][$col+1]+$this->dataPoints[$row+1][$col]+$this->dataPoints[$row+1][$col+1])/4; + $v = $this->dataPoints[$row][$col]; + if( $midval == $ib ) { + // Orientation "+" + $n1=0; $n2=1; $n3=2; $n4=3; + } elseif ( ($midval > $ib && $v > $ib) || ($midval < $ib && $v < $ib) ) { + // Orientation of ridge/valley = "\" + $n1=0; $n2=3; $n3=2; $n4=1; + } elseif ( ($midval > $ib && $v < $ib) || ($midval < $ib && $v > $ib) ) { + // Orientation of ridge/valley = "/" + $n1=0; $n2=2; $n3=3; $n4=1; + } + + $this->isobarCoord[$isobar][$ncoord++] = array( + $this->getCrossingCoord($neigh[$n1][0],$neigh[$n1][1],$neigh[$n1][2],$ib), + $this->getCrossingCoord($neigh[$n2][0],$neigh[$n2][1],$neigh[$n2][2],$ib) ); + + $this->isobarCoord[$isobar][$ncoord++] = array( + $this->getCrossingCoord($neigh[$n3][0],$neigh[$n3][1],$neigh[$n3][2],$ib), + $this->getCrossingCoord($neigh[$n4][0],$neigh[$n4][1],$neigh[$n4][2],$ib) ); + + } + } + } + } + + if( count($this->isobarColors) == 0 ) { + // No manually specified colors. Calculate them automatically. + $this->CalculateColors(); + } + return array( $this->isobarCoord, $this->isobarValues, $this->isobarColors ); + } +} + + +/** + * This class represent a plotting of a contour outline of data given as a X-Y matrice + * + */ +class ContourPlot extends Plot { + + private $contour, $contourCoord, $contourVal, $contourColor; + private $nbrCountours = 0 ; + private $dataMatrix = array(); + private $invertLegend = false; + private $interpFactor = 1; + private $flipData = false; + private $isobar = 10; + private $showLegend = false; + private $highcontrast = false, $highcontrastbw = false; + private $manualIsobarColors = array(); + + /** + * Construct a contour plotting algorithm. The end result of the algorithm is a sequence of + * line segments for each isobar given as two vertices. + * + * @param $aDataMatrix The Z-data to be used + * @param $aIsobar A mixed variable, if it is an integer then this specified the number of isobars to use. + * The values of the isobars are automatically detrmined to be equ-spaced between the min/max value of the + * data. If it is an array then it explicetely gives the isobar values + * @param $aInvert By default the matrice with row index 0 corresponds to Y-value 0, i.e. in the bottom of + * the plot. If this argument is true then the row with the highest index in the matrice corresponds to + * Y-value 0. In affect flipping the matrice around an imaginary horizontal axis. + * @param $aHighContrast Use high contrast colors (blue/red:ish) + * @param $aHighContrastBW Use only black colors for contours + * @return an instance of the contour plot algorithm + */ + function __construct($aDataMatrix, $aIsobar=10, $aFactor=1, $aInvert=false, $aIsobarColors=array()) { + + $this->dataMatrix = $aDataMatrix; + $this->flipData = $aInvert; + $this->isobar = $aIsobar; + $this->interpFactor = $aFactor; + + if ( $this->interpFactor > 1 ) { + + if( $this->interpFactor > 5 ) { + JpGraphError::RaiseL(28007);// ContourPlot interpolation factor is too large (>5) + } + + $ip = new MeshInterpolate(); + $this->dataMatrix = $ip->Linear($this->dataMatrix, $this->interpFactor); + } + + $this->contour = new Contour($this->dataMatrix,$this->isobar,$aIsobarColors); + + if( is_array($aIsobar) ) + $this->nbrContours = count($aIsobar); + else + $this->nbrContours = $aIsobar; + } + + + /** + * Flipe the data around the center + * + * @param $aFlg + * + */ + function SetInvert($aFlg=true) { + $this->flipData = $aFlg; + } + + /** + * Set the colors for the isobar lines + * + * @param $aColorArray + * + */ + function SetIsobarColors($aColorArray) { + $this->manualIsobarColors = $aColorArray; + } + + /** + * Show the legend + * + * @param $aFlg true if the legend should be shown + * + */ + function ShowLegend($aFlg=true) { + $this->showLegend = $aFlg; + } + + + /** + * @param $aFlg true if the legend should start with the lowest isobar on top + * @return unknown_type + */ + function Invertlegend($aFlg=true) { + $this->invertLegend = $aFlg; + } + + /* Internal method. Give the min value to be used for the scaling + * + */ + function Min() { + return array(0,0); + } + + /* Internal method. Give the max value to be used for the scaling + * + */ + function Max() { + return array(count($this->dataMatrix[0])-1,count($this->dataMatrix)-1); + } + + /** + * Internal ramewrok method to setup the legend to be used for this plot. + * @param $aGraph The parent graph class + */ + function Legend($aGraph) { + + if( ! $this->showLegend ) + return; + + if( $this->invertLegend ) { + for ($i = 0; $i < $this->nbrContours; $i++) { + $aGraph->legend->Add(sprintf('%.1f',$this->contourVal[$i]), $this->contourColor[$i]); + } + } + else { + for ($i = $this->nbrContours-1; $i >= 0 ; $i--) { + $aGraph->legend->Add(sprintf('%.1f',$this->contourVal[$i]), $this->contourColor[$i]); + } + } + } + + + /** + * Framework function which gets called before the Stroke() method is called + * + * @see Plot#PreScaleSetup($aGraph) + * + */ + function PreScaleSetup($aGraph) { + $xn = count($this->dataMatrix[0])-1; + $yn = count($this->dataMatrix)-1; + + $aGraph->xaxis->scale->Update($aGraph->img,0,$xn); + $aGraph->yaxis->scale->Update($aGraph->img,0,$yn); + + $this->contour->SetInvert($this->flipData); + list($this->contourCoord,$this->contourVal,$this->contourColor) = $this->contour->getIsobars(); + } + + /** + * Use high contrast color schema + * + * @param $aFlg True, to use high contrast color + * @param $aBW True, Use only black and white color schema + */ + function UseHighContrastColor($aFlg=true,$aBW=false) { + $this->highcontrast = $aFlg; + $this->highcontrastbw = $aBW; + $this->contour->UseHighContrastColor($this->highcontrast,$this->highcontrastbw); + } + + /** + * Internal method. Stroke the contour plot to the graph + * + * @param $img Image handler + * @param $xscale Instance of the xscale to use + * @param $yscale Instance of the yscale to use + */ + function Stroke($img,$xscale,$yscale) { + + if( count($this->manualIsobarColors) > 0 ) { + $this->contourColor = $this->manualIsobarColors; + if( count($this->manualIsobarColors) != $this->nbrContours ) { + JpGraphError::RaiseL(28002); + } + } + + $img->SetLineWeight($this->line_weight); + + for ($c = 0; $c < $this->nbrContours; $c++) { + + $img->SetColor( $this->contourColor[$c] ); + + $n = count($this->contourCoord[$c]); + $i = 0; + while ( $i < $n ) { + list($x1,$y1) = $this->contourCoord[$c][$i][0]; + $x1t = $xscale->Translate($x1); + $y1t = $yscale->Translate($y1); + + list($x2,$y2) = $this->contourCoord[$c][$i++][1]; + $x2t = $xscale->Translate($x2); + $y2t = $yscale->Translate($y2); + + $img->Line($x1t,$y1t,$x2t,$y2t); + } + + } + } + +} + +// EOF +?> diff --git a/Societes/ric/jpgraph/jpgraph_date.php b/Societes/ric/jpgraph/jpgraph_date.php new file mode 100755 index 00000000..bfb5ddb6 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_date.php @@ -0,0 +1,505 @@ +type=$aType; + $this->scale=array($aMin,$aMax); + $this->world_size=$aMax-$aMin; + $this->ticks = new LinearTicks(); + $this->intscale=true; + } + + + //------------------------------------------------------------------------------------------ + // Utility Function AdjDate() + // Description: Will round a given time stamp to an even year, month or day + // argument. + //------------------------------------------------------------------------------------------ + + function AdjDate($aTime,$aRound=0,$aYearType=false,$aMonthType=false,$aDayType=false) { + $y = (int)date('Y',$aTime); $m = (int)date('m',$aTime); $d = (int)date('d',$aTime); + $h=0;$i=0;$s=0; + if( $aYearType !== false ) { + $yearAdj = array(0=>1, 1=>2, 2=>5); + if( $aRound == 0 ) { + $y = floor($y/$yearAdj[$aYearType])*$yearAdj[$aYearType]; + } + else { + ++$y; + $y = ceil($y/$yearAdj[$aYearType])*$yearAdj[$aYearType]; + } + $m=1;$d=1; + } + elseif( $aMonthType !== false ) { + $monthAdj = array(0=>1, 1=>6); + if( $aRound == 0 ) { + $m = floor($m/$monthAdj[$aMonthType])*$monthAdj[$aMonthType]; + $d=1; + } + else { + ++$m; + $m = ceil($m/$monthAdj[$aMonthType])*$monthAdj[$aMonthType]; + $d=1; + } + } + elseif( $aDayType !== false ) { + if( $aDayType == 0 ) { + if( $aRound == 1 ) { + //++$d; + $h=23;$i=59;$s=59; + } + } + else { + // Adjust to an even week boundary. + $w = (int)date('w',$aTime); // Day of week 0=Sun, 6=Sat + if( true ) { // Adjust to start on Mon + if( $w==0 ) $w=6; + else --$w; + } + if( $aRound == 0 ) { + $d -= $w; + } + else { + $d += (7-$w); + $h=23;$i=59;$s=59; + } + } + } + return mktime($h,$i,$s,$m,$d,$y); + + } + + //------------------------------------------------------------------------------------------ + // Wrapper for AdjDate that will round a timestamp to an even date rounding + // it downwards. + //------------------------------------------------------------------------------------------ + function AdjStartDate($aTime,$aYearType=false,$aMonthType=false,$aDayType=false) { + return $this->AdjDate($aTime,0,$aYearType,$aMonthType,$aDayType); + } + + //------------------------------------------------------------------------------------------ + // Wrapper for AdjDate that will round a timestamp to an even date rounding + // it upwards + //------------------------------------------------------------------------------------------ + function AdjEndDate($aTime,$aYearType=false,$aMonthType=false,$aDayType=false) { + return $this->AdjDate($aTime,1,$aYearType,$aMonthType,$aDayType); + } + + //------------------------------------------------------------------------------------------ + // Utility Function AdjTime() + // Description: Will round a given time stamp to an even time according to + // argument. + //------------------------------------------------------------------------------------------ + + function AdjTime($aTime,$aRound=0,$aHourType=false,$aMinType=false,$aSecType=false) { + $y = (int)date('Y',$aTime); $m = (int)date('m',$aTime); $d = (int)date('d',$aTime); + $h = (int)date('H',$aTime); $i = (int)date('i',$aTime); $s = (int)date('s',$aTime); + if( $aHourType !== false ) { + $aHourType %= 6; + $hourAdj = array(0=>1, 1=>2, 2=>3, 3=>4, 4=>6, 5=>12); + if( $aRound == 0 ) + $h = floor($h/$hourAdj[$aHourType])*$hourAdj[$aHourType]; + else { + if( ($h % $hourAdj[$aHourType]==0) && ($i > 0 || $s > 0) ) { + $h++; + } + $h = ceil($h/$hourAdj[$aHourType])*$hourAdj[$aHourType]; + if( $h >= 24 ) { + $aTime += 86400; + $y = (int)date('Y',$aTime); $m = (int)date('m',$aTime); $d = (int)date('d',$aTime); + $h -= 24; + } + } + $i=0;$s=0; + } + elseif( $aMinType !== false ) { + $aMinType %= 5; + $minAdj = array(0=>1, 1=>5, 2=>10, 3=>15, 4=>30); + if( $aRound == 0 ) { + $i = floor($i/$minAdj[$aMinType])*$minAdj[$aMinType]; + } + else { + if( ($i % $minAdj[$aMinType]==0) && $s > 0 ) { + $i++; + } + $i = ceil($i/$minAdj[$aMinType])*$minAdj[$aMinType]; + if( $i >= 60) { + $aTime += 3600; + $y = (int)date('Y',$aTime); $m = (int)date('m',$aTime); $d = (int)date('d',$aTime); + $h = (int)date('H',$aTime); $i = 0; + } + } + $s=0; + } + elseif( $aSecType !== false ) { + $aSecType %= 5; + $secAdj = array(0=>1, 1=>5, 2=>10, 3=>15, 4=>30); + if( $aRound == 0 ) { + $s = floor($s/$secAdj[$aSecType])*$secAdj[$aSecType]; + } + else { + $s = ceil($s/$secAdj[$aSecType]*1.0)*$secAdj[$aSecType]; + if( $s >= 60) { + $s=0; + $aTime += 60; + $y = (int)date('Y',$aTime); $m = (int)date('m',$aTime); $d = (int)date('d',$aTime); + $h = (int)date('H',$aTime); $i = (int)date('i',$aTime); + } + } + } + return mktime($h,$i,$s,$m,$d,$y); + } + + //------------------------------------------------------------------------------------------ + // Wrapper for AdjTime that will round a timestamp to an even time rounding + // it downwards. + // Example: AdjStartTime(mktime(18,27,13,2,22,2005),false,2) => 18:20 + //------------------------------------------------------------------------------------------ + function AdjStartTime($aTime,$aHourType=false,$aMinType=false,$aSecType=false) { + return $this->AdjTime($aTime,0,$aHourType,$aMinType,$aSecType); + } + + //------------------------------------------------------------------------------------------ + // Wrapper for AdjTime that will round a timestamp to an even time rounding + // it upwards + // Example: AdjEndTime(mktime(18,27,13,2,22,2005),false,2) => 18:30 + //------------------------------------------------------------------------------------------ + function AdjEndTime($aTime,$aHourType=false,$aMinType=false,$aSecType=false) { + return $this->AdjTime($aTime,1,$aHourType,$aMinType,$aSecType); + } + + //------------------------------------------------------------------------------------------ + // DateAutoScale + // Autoscale a date axis given start and end time + // Returns an array ($start,$end,$major,$minor,$format) + //------------------------------------------------------------------------------------------ + function DoDateAutoScale($aStartTime,$aEndTime,$aDensity=0,$aAdjust=true) { + // Format of array + // array ( Decision point, array( array( Major-scale-step-array ), + // array( Minor-scale-step-array ), + // array( 0=date-adjust, 1=time-adjust, adjustment-alignment) ) + // + $scalePoints = + array( + /* Intervall larger than 10 years */ + SECPERYEAR*10,array(array(SECPERYEAR*5,SECPERYEAR*2), + array(SECPERYEAR), + array(0,YEARADJ_1, 0,YEARADJ_1) ), + + /* Intervall larger than 2 years */ + SECPERYEAR*2,array(array(SECPERYEAR),array(SECPERYEAR), + array(0,YEARADJ_1) ), + + /* Intervall larger than 90 days (approx 3 month) */ + SECPERDAY*90,array(array(SECPERDAY*30,SECPERDAY*14,SECPERDAY*7,SECPERDAY), + array(SECPERDAY*5,SECPERDAY*7,SECPERDAY,SECPERDAY), + array(0,MONTHADJ_1, 0,DAYADJ_WEEK, 0,DAYADJ_1, 0,DAYADJ_1)), + + /* Intervall larger than 30 days (approx 1 month) */ + SECPERDAY*30,array(array(SECPERDAY*14,SECPERDAY*7,SECPERDAY*2, SECPERDAY), + array(SECPERDAY,SECPERDAY,SECPERDAY,SECPERDAY), + array(0,DAYADJ_WEEK, 0,DAYADJ_1, 0,DAYADJ_1, 0,DAYADJ_1)), + + /* Intervall larger than 7 days */ + SECPERDAY*7,array(array(SECPERDAY,SECPERHOUR*12,SECPERHOUR*6,SECPERHOUR*2), + array(SECPERHOUR*6,SECPERHOUR*3,SECPERHOUR,SECPERHOUR), + array(0,DAYADJ_1, 1,HOURADJ_12, 1,HOURADJ_6, 1,HOURADJ_1)), + + /* Intervall larger than 1 day */ + SECPERDAY,array(array(SECPERDAY,SECPERHOUR*12,SECPERHOUR*6,SECPERHOUR*2,SECPERHOUR), + array(SECPERHOUR*6,SECPERHOUR*2,SECPERHOUR,SECPERHOUR,SECPERHOUR), + array(1,HOURADJ_12, 1,HOURADJ_6, 1,HOURADJ_1, 1,HOURADJ_1)), + + /* Intervall larger than 12 hours */ + SECPERHOUR*12,array(array(SECPERHOUR*2,SECPERHOUR,SECPERMIN*30,900,600), + array(1800,1800,900,300,300), + array(1,HOURADJ_1, 1,MINADJ_30, 1,MINADJ_15, 1,MINADJ_10, 1,MINADJ_5) ), + + /* Intervall larger than 2 hours */ + SECPERHOUR*2,array(array(SECPERHOUR,SECPERMIN*30,900,600,300), + array(1800,900,300,120,60), + array(1,HOURADJ_1, 1,MINADJ_30, 1,MINADJ_15, 1,MINADJ_10, 1,MINADJ_5) ), + + /* Intervall larger than 1 hours */ + SECPERHOUR,array(array(SECPERMIN*30,900,600,300),array(900,300,120,60), + array(1,MINADJ_30, 1,MINADJ_15, 1,MINADJ_10, 1,MINADJ_5) ), + + /* Intervall larger than 30 min */ + SECPERMIN*30,array(array(SECPERMIN*15,SECPERMIN*10,SECPERMIN*5,SECPERMIN), + array(300,300,60,10), + array(1,MINADJ_15, 1,MINADJ_10, 1,MINADJ_5, 1,MINADJ_1)), + + /* Intervall larger than 1 min */ + SECPERMIN,array(array(SECPERMIN,15,10,5), + array(15,5,2,1), + array(1,MINADJ_1, 1,SECADJ_15, 1,SECADJ_10, 1,SECADJ_5)), + + /* Intervall larger than 10 sec */ + 10,array(array(5,2), + array(1,1), + array(1,SECADJ_5, 1,SECADJ_1)), + + /* Intervall larger than 1 sec */ + 1,array(array(1), + array(1), + array(1,SECADJ_1)), + ); + + $ns = count($scalePoints); + // Establish major and minor scale units for the date scale + $diff = $aEndTime - $aStartTime; + if( $diff < 1 ) return false; + $done=false; + $i=0; + while( ! $done ) { + if( $diff > $scalePoints[2*$i] ) { + // Get major and minor scale for this intervall + $scaleSteps = $scalePoints[2*$i+1]; + $major = $scaleSteps[0][min($aDensity,count($scaleSteps[0])-1)]; + // Try to find out which minor step looks best + $minor = $scaleSteps[1][min($aDensity,count($scaleSteps[1])-1)]; + if( $aAdjust ) { + // Find out how we should align the start and end timestamps + $idx = 2*min($aDensity,floor(count($scaleSteps[2])/2)-1); + if( $scaleSteps[2][$idx] === 0 ) { + // Use date adjustment + $adj = $scaleSteps[2][$idx+1]; + if( $adj >= 30 ) { + $start = $this->AdjStartDate($aStartTime,$adj-30); + $end = $this->AdjEndDate($aEndTime,$adj-30); + } + elseif( $adj >= 20 ) { + $start = $this->AdjStartDate($aStartTime,false,$adj-20); + $end = $this->AdjEndDate($aEndTime,false,$adj-20); + } + else { + $start = $this->AdjStartDate($aStartTime,false,false,$adj); + $end = $this->AdjEndDate($aEndTime,false,false,$adj); + // We add 1 second for date adjustment to make sure we end on 00:00 the following day + // This makes the final major tick be srawn when we step day-by-day instead of ending + // on xx:59:59 which would not draw the final major tick + $end++; + } + } + else { + // Use time adjustment + $adj = $scaleSteps[2][$idx+1]; + if( $adj >= 30 ) { + $start = $this->AdjStartTime($aStartTime,$adj-30); + $end = $this->AdjEndTime($aEndTime,$adj-30); + } + elseif( $adj >= 20 ) { + $start = $this->AdjStartTime($aStartTime,false,$adj-20); + $end = $this->AdjEndTime($aEndTime,false,$adj-20); + } + else { + $start = $this->AdjStartTime($aStartTime,false,false,$adj); + $end = $this->AdjEndTime($aEndTime,false,false,$adj); + } + } + } + // If the overall date span is larger than 1 day ten we show date + $format = ''; + if( ($end-$start) > SECPERDAY ) { + $format = 'Y-m-d '; + } + // If the major step is less than 1 day we need to whow hours + min + if( $major < SECPERDAY ) { + $format .= 'H:i'; + } + // If the major step is less than 1 min we need to show sec + if( $major < 60 ) { + $format .= ':s'; + } + $done=true; + } + ++$i; + } + return array($start,$end,$major,$minor,$format); + } + + // Overrides the automatic determined date format. Must be a valid date() format string + function SetDateFormat($aFormat) { + $this->date_format = $aFormat; + $this->ticks->SetLabelDateFormat($this->date_format); + } + + function AdjustForDST($aFlg=true) { + $this->ticks->AdjustForDST($aFlg); + } + + + function SetDateAlign($aStartAlign,$aEndAlign=false) { + if( $aEndAlign === false ) { + $aEndAlign=$aStartAlign; + } + $this->iStartAlign = $aStartAlign; + $this->iEndAlign = $aEndAlign; + } + + function SetTimeAlign($aStartAlign,$aEndAlign=false) { + if( $aEndAlign === false ) { + $aEndAlign=$aStartAlign; + } + $this->iStartTimeAlign = $aStartAlign; + $this->iEndTimeAlign = $aEndAlign; + } + + + function AutoScale($img,$aStartTime,$aEndTime,$aNumSteps,$_adummy=false) { + // We need to have one dummy argument to make the signature of AutoScale() + // identical to LinearScale::AutoScale + if( $aStartTime == $aEndTime ) { + // Special case when we only have one data point. + // Create a small artificial interval to do the autoscaling + $aStartTime -= 10; + $aEndTime += 10; + } + if( abs($aEndTime - $aStartTime) <= 1 ) { + // Special case when we only have one second. + // Create a small artificial interval to do the autoscaling + $aStartTime -= 1; + $aEndTime += 1; + } + $done=false; + $i=0; + while( ! $done && $i < 5) { + list($adjstart,$adjend,$maj,$min,$format) = $this->DoDateAutoScale($aStartTime,$aEndTime,$i); + $n = floor(($adjend-$adjstart)/$maj); + if( $n * 1.7 > $aNumSteps ) { + $done=true; + } + $i++; + } + + /* + if( 0 ) { // DEBUG + echo " Start =".date("Y-m-d H:i:s",$aStartTime)."
    "; + echo " End =".date("Y-m-d H:i:s",$aEndTime)."
    "; + echo "Adj Start =".date("Y-m-d H:i:s",$adjstart)."
    "; + echo "Adj End =".date("Y-m-d H:i:s",$adjend)."

    "; + echo "Major = $maj s, ".floor($maj/60)."min, ".floor($maj/3600)."h, ".floor($maj/86400)."day
    "; + echo "Min = $min s, ".floor($min/60)."min, ".floor($min/3600)."h, ".floor($min/86400)."day
    "; + echo "Format=$format

    "; + } + */ + + if( $this->iStartTimeAlign !== false && $this->iStartAlign !== false ) { + JpGraphError::RaiseL(3001); + //('It is only possible to use either SetDateAlign() or SetTimeAlign() but not both'); + } + + if( $this->iStartTimeAlign !== false ) { + if( $this->iStartTimeAlign >= 30 ) { + $adjstart = $this->AdjStartTime($aStartTime,$this->iStartTimeAlign-30); + } + elseif( $this->iStartTimeAlign >= 20 ) { + $adjstart = $this->AdjStartTime($aStartTime,false,$this->iStartTimeAlign-20); + } + else { + $adjstart = $this->AdjStartTime($aStartTime,false,false,$this->iStartTimeAlign); + } + } + if( $this->iEndTimeAlign !== false ) { + if( $this->iEndTimeAlign >= 30 ) { + $adjend = $this->AdjEndTime($aEndTime,$this->iEndTimeAlign-30); + } + elseif( $this->iEndTimeAlign >= 20 ) { + $adjend = $this->AdjEndTime($aEndTime,false,$this->iEndTimeAlign-20); + } + else { + $adjend = $this->AdjEndTime($aEndTime,false,false,$this->iEndTimeAlign); + } + } + + + + if( $this->iStartAlign !== false ) { + if( $this->iStartAlign >= 30 ) { + $adjstart = $this->AdjStartDate($aStartTime,$this->iStartAlign-30); + } + elseif( $this->iStartAlign >= 20 ) { + $adjstart = $this->AdjStartDate($aStartTime,false,$this->iStartAlign-20); + } + else { + $adjstart = $this->AdjStartDate($aStartTime,false,false,$this->iStartAlign); + } + } + if( $this->iEndAlign !== false ) { + if( $this->iEndAlign >= 30 ) { + $adjend = $this->AdjEndDate($aEndTime,$this->iEndAlign-30); + } + elseif( $this->iEndAlign >= 20 ) { + $adjend = $this->AdjEndDate($aEndTime,false,$this->iEndAlign-20); + } + else { + $adjend = $this->AdjEndDate($aEndTime,false,false,$this->iEndAlign); + } + } + $this->Update($img,$adjstart,$adjend); + if( ! $this->ticks->IsSpecified() ) + $this->ticks->Set($maj,$min); + if( $this->date_format == '' ) + $this->ticks->SetLabelDateFormat($format); + else + $this->ticks->SetLabelDateFormat($this->date_format); + } +} + + +?> diff --git a/Societes/ric/jpgraph/jpgraph_errhandler.inc.php b/Societes/ric/jpgraph/jpgraph_errhandler.inc.php new file mode 100755 index 00000000..3dff8ebe --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_errhandler.inc.php @@ -0,0 +1,369 @@ +lt = $_jpg_messages; + } + + function Get($errnbr,$a1=null,$a2=null,$a3=null,$a4=null,$a5=null) { + GLOBAL $__jpg_err_locale; + if( !isset($this->lt[$errnbr]) ) { + return 'Internal error: The specified error message ('.$errnbr.') does not exist in the chosen locale ('.$__jpg_err_locale.')'; + } + $ea = $this->lt[$errnbr]; + $j=0; + if( $a1 !== null ) { + $argv[$j++] = $a1; + if( $a2 !== null ) { + $argv[$j++] = $a2; + if( $a3 !== null ) { + $argv[$j++] = $a3; + if( $a4 !== null ) { + $argv[$j++] = $a4; + if( $a5 !== null ) { + $argv[$j++] = $a5; + } + } + } + } + } + $numargs = $j; + if( $ea[1] != $numargs ) { + // Error message argument count do not match. + // Just return the error message without arguments. + return $ea[0]; + } + switch( $numargs ) { + case 1: + $msg = sprintf($ea[0],$argv[0]); + break; + case 2: + $msg = sprintf($ea[0],$argv[0],$argv[1]); + break; + case 3: + $msg = sprintf($ea[0],$argv[0],$argv[1],$argv[2]); + break; + case 4: + $msg = sprintf($ea[0],$argv[0],$argv[1],$argv[2],$argv[3]); + break; + case 5: + $msg = sprintf($ea[0],$argv[0],$argv[1],$argv[2],$argv[3],$argv[4]); + break; + case 0: + default: + $msg = sprintf($ea[0]); + break; + } + return $msg; + } +} + +// +// A wrapper class that is used to access the specified error object +// (to hide the global error parameter and avoid having a GLOBAL directive +// in all methods. +// +class JpGraphError { + private static $__iImgFlg = true; + private static $__iLogFile = ''; + private static $__iTitle = 'JpGraph Error: '; + public static function Raise($aMsg,$aHalt=true){ + throw new JpGraphException($aMsg); + } + public static function SetErrLocale($aLoc) { + GLOBAL $__jpg_err_locale ; + $__jpg_err_locale = $aLoc; + } + public static function RaiseL($errnbr,$a1=null,$a2=null,$a3=null,$a4=null,$a5=null) { + throw new JpGraphExceptionL($errnbr,$a1,$a2,$a3,$a4,$a5); + } + public static function SetImageFlag($aFlg=true) { + self::$__iImgFlg = $aFlg; + } + public static function GetImageFlag() { + return self::$__iImgFlg; + } + public static function SetLogFile($aFile) { + self::$__iLogFile = $aFile; + } + public static function GetLogFile() { + return self::$__iLogFile; + } + public static function SetTitle($aTitle) { + self::$__iTitle = $aTitle; + } + public static function GetTitle() { + return self::$__iTitle; + } +} + +class JpGraphException extends Exception { + // Redefine the exception so message isn't optional + public function __construct($message, $code = 0) { + // make sure everything is assigned properly + parent::__construct($message, $code); + } + // custom string representation of object + public function _toString() { + return __CLASS__ . ": [{$this->code}]: {$this->message} at " . basename($this->getFile()) . ":" . $this->getLine() . "\n" . $this->getTraceAsString() . "\n"; + } + // custom representation of error as an image + public function Stroke() { + if( JpGraphError::GetImageFlag() ) { + $errobj = new JpGraphErrObjectImg(); + $errobj->SetTitle(JpGraphError::GetTitle()); + } + else { + $errobj = new JpGraphErrObject(); + $errobj->SetTitle(JpGraphError::GetTitle()); + $errobj->SetStrokeDest(JpGraphError::GetLogFile()); + } + $errobj->Raise($this->getMessage()); + } + static public function defaultHandler(Throwable $exception) { + global $__jpg_OldHandler; + if( $exception instanceof JpGraphException ) { + $exception->Stroke(); + } + else { + // Restore old handler + if( $__jpg_OldHandler !== NULL ) { + set_exception_handler($__jpg_OldHandler); + } + throw $exception; + } + } +} + +class JpGraphExceptionL extends JpGraphException { + // Redefine the exception so message isn't optional + public function __construct($errcode,$a1=null,$a2=null,$a3=null,$a4=null,$a5=null) { + // make sure everything is assigned properly + $errtxt = new ErrMsgText(); + JpGraphError::SetTitle('JpGraph Error: '.$errcode); + parent::__construct($errtxt->Get($errcode,$a1,$a2,$a3,$a4,$a5), 0); + } +} + +// Setup the default handler +global $__jpg_OldHandler; +$__jpg_OldHandler = set_exception_handler(array('JpGraphException','defaultHandler')); + +// +// First of all set up a default error handler +// + +//============================================================= +// The default trivial text error handler. +//============================================================= +class JpGraphErrObject { + + protected $iTitle = "JpGraph error: "; + protected $iDest = false; + + + function __construct() { + // Empty. Reserved for future use + } + + function SetTitle($aTitle) { + $this->iTitle = $aTitle; + } + + function SetStrokeDest($aDest) { + $this->iDest = $aDest; + } + + // If aHalt is true then execution can't continue. Typical used for fatal errors + function Raise($aMsg,$aHalt=false) { + if( $this->iDest != '' ) { + if( $this->iDest == 'syslog' ) { + error_log($this->iTitle.$aMsg); + } + else { + $str = '['.date('r').'] '.$this->iTitle.$aMsg."\n"; + $f = @fopen($this->iDest,'a'); + if( $f ) { + @fwrite($f,$str); + @fclose($f); + } + } + } + else { + $aMsg = $this->iTitle.$aMsg; + // Check SAPI and if we are called from the command line + // send the error to STDERR instead + if( PHP_SAPI == 'cli' ) { + fwrite(STDERR,$aMsg); + } + else { + echo $aMsg; + } + } + if( $aHalt ) + exit(1); + } +} + +//============================================================== +// An image based error handler +//============================================================== +class JpGraphErrObjectImg extends JpGraphErrObject { + + function __construct() { + parent::__construct(); + // Empty. Reserved for future use + } + + function Raise($aMsg,$aHalt=true) { + $img_iconerror = + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAaV'. + 'BMVEX//////2Xy8mLl5V/Z2VvMzFi/v1WyslKlpU+ZmUyMjEh/'. + 'f0VyckJlZT9YWDxMTDjAwMDy8sLl5bnY2K/MzKW/v5yyspKlpY'. + 'iYmH+MjHY/PzV/f2xycmJlZVlZWU9MTEXY2Ms/PzwyMjLFTjea'. + 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx'. + 'IAAAsSAdLdfvwAAAAHdElNRQfTBgISOCqusfs5AAABLUlEQVR4'. + '2tWV3XKCMBBGWfkranCIVClKLd/7P2Q3QsgCxjDTq+6FE2cPH+'. + 'xJ0Ogn2lQbsT+Wrs+buAZAV4W5T6Bs0YXBBwpKgEuIu+JERAX6'. + 'wM2rHjmDdEITmsQEEmWADgZm6rAjhXsoMGY9B/NZBwJzBvn+e3'. + 'wHntCAJdGu9SviwIwoZVDxPB9+Rc0TSEbQr0j3SA1gwdSn6Db0'. + '6Tm1KfV6yzWGQO7zdpvyKLKBDmRFjzeB3LYgK7r6A/noDAfjtS'. + 'IXaIzbJSv6WgUebTMV4EoRB8a2mQiQjgtF91HdKDKZ1gtFtQjk'. + 'YcWaR5OKOhkYt+ZsTFdJRfPAApOpQYJTNHvCRSJR6SJngQadfc'. + 'vd69OLMddVOPCGVnmrFD8bVYd3JXfxXPtLR/+mtv59/ALWiiMx'. + 'qL72fwAAAABJRU5ErkJggg==' ; + + + if( function_exists("imagetypes") ) { + $supported = imagetypes(); + } else { + $supported = 0; + } + + if( !function_exists('imagecreatefromstring') ) { + $supported = 0; + } + + if( ob_get_length() || headers_sent() || !($supported & IMG_PNG) ) { + // Special case for headers already sent or that the installation doesn't support + // the PNG format (which the error icon is encoded in). + // Dont return an image since it can't be displayed + die($this->iTitle.' '.$aMsg); + } + + $aMsg = wordwrap($aMsg,55); + $lines = substr_count($aMsg,"\n"); + + // Create the error icon GD + $erricon = Image::CreateFromString(base64_decode($img_iconerror)); + + // Create an image that contains the error text. + $w=400; + $h=100 + 15*max(0,$lines-3); + + $img = new Image($w,$h); + + + // Drop shadow + $img->SetColor("gray"); + $img->FilledRectangle(5,5,$w-1,$h-1,10); + $img->SetColor("gray:0.7"); + $img->FilledRectangle(5,5,$w-3,$h-3,10); + + // Window background + $img->SetColor("lightblue"); + $img->FilledRectangle(1,1,$w-5,$h-5); + $img->CopyCanvasH($img->img,$erricon,5,30,0,0,40,40); + + // Window border + $img->SetColor("black"); + $img->Rectangle(1,1,$w-5,$h-5); + $img->Rectangle(0,0,$w-4,$h-4); + + // Window top row + $img->SetColor("darkred"); + for($y=3; $y < 18; $y += 2 ) + $img->Line(1,$y,$w-6,$y); + + // "White shadow" + $img->SetColor("white"); + + // Left window edge + $img->Line(2,2,2,$h-5); + $img->Line(2,2,$w-6,2); + + // "Gray button shadow" + $img->SetColor("darkgray"); + + // Gray window shadow + $img->Line(2,$h-6,$w-5,$h-6); + $img->Line(3,$h-7,$w-5,$h-7); + + // Window title + $m = floor($w/2-5); + $l = 110; + $img->SetColor("lightgray:1.3"); + $img->FilledRectangle($m-$l,2,$m+$l,16); + + // Stroke text + $img->SetColor("darkred"); + $img->SetFont(FF_FONT2,FS_BOLD); + $img->StrokeText($m-90,15,$this->iTitle); + $img->SetColor("black"); + $img->SetFont(FF_FONT1,FS_NORMAL); + $txt = new Text($aMsg,52,25); + $txt->SetFont(FF_FONT1); + $txt->Align("left","top"); + $txt->Stroke($img); + if ($this->iDest) { + $img->Stream($this->iDest); + } else { + $img->Headers(); + $img->Stream(); + } + if( $aHalt ) + die(); + } +} + + + +if( ! USE_IMAGE_ERROR_HANDLER ) { + JpGraphError::SetImageFlag(false); +} +?> diff --git a/Societes/ric/jpgraph/jpgraph_error.php b/Societes/ric/jpgraph/jpgraph_error.php new file mode 100755 index 00000000..3ef3ca5b --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_error.php @@ -0,0 +1,157 @@ +numpoints /= 2; + } + //--------------- + // PUBLIC METHODS + + // Gets called before any axis are stroked + function PreStrokeAdjust($graph) { + if( $this->center ) { + $a=0.5; $b=0.5; + ++$this->numpoints; + } else { + $a=0; $b=0; + } + $graph->xaxis->scale->ticks->SetXLabelOffset($a); + $graph->SetTextScaleOff($b); + //$graph->xaxis->scale->ticks->SupressMinorTickMarks(); + } + + // Method description + function Stroke($img,$xscale,$yscale) { + $numpoints=count($this->coords[0])/2; + $img->SetColor($this->color); + $img->SetLineWeight($this->weight); + + if( isset($this->coords[1]) ) { + if( count($this->coords[1])!=$numpoints ) + JpGraphError::RaiseL(2003,count($this->coords[1]),$numpoints); + //("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints"); + else + $exist_x = true; + } + else + $exist_x = false; + + for( $i=0; $i<$numpoints; ++$i) { + if( $exist_x ) + $x=$this->coords[1][$i]; + else + $x=$i; + + if( !is_numeric($x) || + !is_numeric($this->coords[0][$i*2]) || !is_numeric($this->coords[0][$i*2+1]) ) { + continue; + } + + $xt = $xscale->Translate($x); + $yt1 = $yscale->Translate($this->coords[0][$i*2]); + $yt2 = $yscale->Translate($this->coords[0][$i*2+1]); + $img->Line($xt,$yt1,$xt,$yt2); + $img->Line($xt-$this->errwidth,$yt1,$xt+$this->errwidth,$yt1); + $img->Line($xt-$this->errwidth,$yt2,$xt+$this->errwidth,$yt2); + } + return true; + } +} // Class + + +//=================================================== +// CLASS ErrorLinePlot +// Description: Combine a line and error plot +// THIS IS A DEPRECATED PLOT TYPE JUST KEPT FOR +// BACKWARD COMPATIBILITY +//=================================================== +class ErrorLinePlot extends ErrorPlot { + public $line=null; + //--------------- + // CONSTRUCTOR + function __construct($datay,$datax=false) { + parent::__construct($datay,$datax); + // Calculate line coordinates as the average of the error limits + $n = count($datay); + for($i=0; $i < $n; $i+=2 ) { + $ly[]=($datay[$i]+$datay[$i+1])/2; + } + $this->line=new LinePlot($ly,$datax); + } + + //--------------- + // PUBLIC METHODS + function Legend($graph) { + if( $this->legend != "" ) + $graph->legend->Add($this->legend,$this->color); + $this->line->Legend($graph); + } + + function Stroke($img,$xscale,$yscale) { + parent::Stroke($img,$xscale,$yscale); + $this->line->Stroke($img,$xscale,$yscale); + } +} // Class + + +//=================================================== +// CLASS LineErrorPlot +// Description: Combine a line and error plot +//=================================================== +class LineErrorPlot extends ErrorPlot { + public $line=null; + //--------------- + // CONSTRUCTOR + // Data is (val, errdeltamin, errdeltamax) + function __construct($datay,$datax=false) { + $ly=array(); $ey=array(); + $n = count($datay); + if( $n % 3 != 0 ) { + JpGraphError::RaiseL(4002); + //('Error in input data to LineErrorPlot. Number of data points must be a multiple of 3'); + } + for($i=0; $i < $n; $i+=3 ) { + $ly[]=$datay[$i]; + $ey[]=$datay[$i]+$datay[$i+1]; + $ey[]=$datay[$i]+$datay[$i+2]; + } + parent::__construct($ey,$datax); + $this->line=new LinePlot($ly,$datax); + } + + //--------------- + // PUBLIC METHODS + function Legend($graph) { + if( $this->legend != "" ) + $graph->legend->Add($this->legend,$this->color); + $this->line->Legend($graph); + } + + function Stroke($img,$xscale,$yscale) { + parent::Stroke($img,$xscale,$yscale); + $this->line->Stroke($img,$xscale,$yscale); + } +} // Class + + +/* EOF */ +?> diff --git a/Societes/ric/jpgraph/jpgraph_flags.php b/Societes/ric/jpgraph/jpgraph_flags.php new file mode 100755 index 00000000..f062eb62 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_flags.php @@ -0,0 +1,373 @@ + 'afgh', + 'Republic of Angola' => 'agla', + 'Republic of Albania' => 'alba', + 'Alderney' => 'alde', + 'Democratic and Popular Republic of Algeria' => 'alge', + 'Territory of American Samoa' => 'amsa', + 'Principality of Andorra' => 'andr', + 'British Overseas Territory of Anguilla' => 'angu', + 'Antarctica' => 'anta', + 'Argentine Republic' => 'arge', + 'League of Arab States' => 'arle', + 'Republic of Armenia' => 'arme', + 'Aruba' => 'arub', + 'Commonwealth of Australia' => 'astl', + 'Republic of Austria' => 'aust', + 'Azerbaijani Republic' => 'azer', + 'Bangladesh' => 'bngl', + 'British Antarctic Territory' => 'bant', + 'Kingdom of Belgium' => 'belg', + 'British Overseas Territory of Bermuda' => 'berm', + 'Commonwealth of the Bahamas' => 'bhms', + 'Kingdom of Bahrain' => 'bhrn', + 'Republic of Belarus' => 'blru', + 'Republic of Bolivia' => 'blva', + 'Belize' => 'blze', + 'Republic of Benin' => 'bnin', + 'Republic of Botswana' => 'bots', + 'Federative Republic of Brazil' => 'braz', + 'Barbados' => 'brbd', + 'British Indian Ocean Territory' => 'brin', + 'Brunei Darussalam' => 'brun', + 'Republic of Burkina' => 'bufa', + 'Republic of Bulgaria' => 'bulg', + 'Republic of Burundi' => 'buru', + 'Overseas Territory of the British Virgin Islands' => 'bvis', + 'Central African Republic' => 'cafr', + 'Kingdom of Cambodia' => 'camb', + 'Republic of Cameroon' => 'came', + 'Dominion of Canada' => 'cana', + 'Caribbean Community' => 'cari', + 'Republic of Cape Verde' => 'cave', + 'Republic of Chad' => 'chad', + 'Republic of Chile' => 'chil', + 'Peoples Republic of China' => 'chin', + 'Territory of Christmas Island' => 'chms', + 'Commonwealth of Independent States' => 'cins', + 'Cook Islands' => 'ckis', + 'Republic of Colombia' => 'clmb', + 'Territory of Cocos Islands' => 'cois', + 'Commonwealth' => 'comn', + 'Union of the Comoros' => 'como', + 'Republic of the Congo' => 'cong', + 'Republic of Costa Rica' => 'corc', + 'Republic of Croatia' => 'croa', + 'Republic of Cuba' => 'cuba', + 'British Overseas Territory of the Cayman Islands' => 'cyis', + 'Republic of Cyprus' => 'cypr', + 'The Czech Republic' => 'czec', + 'Kingdom of Denmark' => 'denm', + 'Republic of Djibouti' => 'djib', + 'Commonwealth of Dominica' => 'domn', + 'Dominican Republic' => 'dore', + 'Republic of Ecuador' => 'ecua', + 'Arab Republic of Egypt' => 'egyp', + 'Republic of El Salvador' => 'elsa', + 'England' => 'engl', + 'Republic of Equatorial Guinea' => 'eqgu', + 'State of Eritrea' => 'erit', + 'Republic of Estonia' => 'estn', + 'Ethiopia' => 'ethp', + 'European Union' => 'euun', + 'British Overseas Territory of the Falkland Islands' => 'fais', + 'International Federation of Vexillological Associations' => 'fiav', + 'Republic of Fiji' => 'fiji', + 'Republic of Finland' => 'finl', + 'Territory of French Polynesia' => 'fpol', + 'French Republic' => 'fran', + 'Overseas Department of French Guiana' => 'frgu', + 'Gabonese Republic' => 'gabn', + 'Republic of the Gambia' => 'gamb', + 'Republic of Georgia' => 'geor', + 'Federal Republic of Germany' => 'germ', + 'Republic of Ghana' => 'ghan', + 'Gibraltar' => 'gibr', + 'Hellenic Republic' => 'grec', + 'State of Grenada' => 'gren', + 'Overseas Department of Guadeloupe' => 'guad', + 'Territory of Guam' => 'guam', + 'Republic of Guatemala' => 'guat', + 'The Bailiwick of Guernsey' => 'guer', + 'Republic of Guinea' => 'guin', + 'Republic of Haiti' => 'hait', + 'Hong Kong Special Administrative Region' => 'hokn', + 'Republic of Honduras' => 'hond', + 'Republic of Hungary' => 'hung', + 'Republic of Iceland' => 'icel', + 'International Committee of the Red Cross' => 'icrc', + 'Republic of India' => 'inda', + 'Republic of Indonesia' => 'indn', + 'Republic of Iraq' => 'iraq', + 'Republic of Ireland' => 'irel', + 'Organization of the Islamic Conference' => 'isco', + 'Isle of Man' => 'isma', + 'State of Israel' => 'isra', + 'Italian Republic' => 'ital', + 'Jamaica' => 'jama', + 'Japan' => 'japa', + 'The Bailiwick of Jersey' => 'jers', + 'Hashemite Kingdom of Jordan' => 'jord', + 'Republic of Kazakhstan' => 'kazk', + 'Republic of Kenya' => 'keny', + 'Republic of Kiribati' => 'kirb', + 'State of Kuwait' => 'kuwa', + 'Kyrgyz Republic' => 'kyrg', + 'Republic of Latvia' => 'latv', + 'Lebanese Republic' => 'leba', + 'Kingdom of Lesotho' => 'lest', + 'Republic of Liberia' => 'libe', + 'Principality of Liechtenstein' => 'liec', + 'Republic of Lithuania' => 'lith', + 'Grand Duchy of Luxembourg' => 'luxe', + 'Macao Special Administrative Region' => 'maca', + 'Republic of Macedonia' => 'mace', + 'Republic of Madagascar' => 'mada', + 'Republic of the Marshall Islands' => 'mais', + 'Republic of Mali' => 'mali', + 'Federation of Malaysia' => 'mals', + 'Republic of Malta' => 'malt', + 'Republic of Malawi' => 'malw', + 'Overseas Department of Martinique' => 'mart', + 'Islamic Republic of Mauritania' => 'maur', + 'Territorial Collectivity of Mayotte' => 'mayt', + 'United Mexican States' => 'mexc', + 'Federated States of Micronesia' => 'micr', + 'Midway Islands' => 'miis', + 'Republic of Moldova' => 'mold', + 'Principality of Monaco' => 'mona', + 'Republic of Mongolia' => 'mong', + 'British Overseas Territory of Montserrat' => 'mont', + 'Kingdom of Morocco' => 'morc', + 'Republic of Mozambique' => 'moza', + 'Republic of Mauritius' => 'mrts', + 'Union of Myanmar' => 'myan', + 'Republic of Namibia' => 'namb', + 'North Atlantic Treaty Organization' => 'nato', + 'Republic of Nauru' => 'naur', + 'Turkish Republic of Northern Cyprus' => 'ncyp', + 'Netherlands Antilles' => 'nean', + 'Kingdom of Nepal' => 'nepa', + 'Kingdom of the Netherlands' => 'neth', + 'Territory of Norfolk Island' => 'nfis', + 'Federal Republic of Nigeria' => 'ngra', + 'Republic of Nicaragua' => 'nica', + 'Republic of Niger' => 'nigr', + 'Niue' => 'niue', + 'Commonwealth of the Northern Mariana Islands' => 'nmar', + 'Province of Northern Ireland' => 'noir', + 'Nordic Council' => 'nord', + 'Kingdom of Norway' => 'norw', + 'Territory of New Caledonia and Dependencies' => 'nwca', + 'New Zealand' => 'nwze', + 'Organization of American States' => 'oast', + 'Organization of African Unity' => 'oaun', + 'International Olympic Committee' => 'olym', + 'Sultanate of Oman' => 'oman', + 'Islamic Republic of Pakistan' => 'paks', + 'Republic of Palau' => 'pala', + 'Independent State of Papua New Guinea' => 'pang', + 'Republic of Paraguay' => 'para', + 'Republic of Peru' => 'peru', + 'Republic of the Philippines' => 'phil', + 'British Overseas Territory of the Pitcairn Islands' => 'piis', + 'Republic of Poland' => 'pola', + 'Republic of Portugal' => 'port', + 'Commonwealth of Puerto Rico' => 'purc', + 'State of Qatar' => 'qata', + 'Russian Federation' => 'russ', + 'Romania' => 'rmna', + 'Republic of Rwanda' => 'rwan', + 'Kingdom of Saudi Arabia' => 'saar', + 'Republic of San Marino' => 'sama', + 'Nordic Sami Conference' => 'sami', + 'Sark' => 'sark', + 'Scotland' => 'scot', + 'Principality of Seborga' => 'sebo', + 'Republic of Serbia' => 'serb', + 'Republic of Sierra Leone' => 'sile', + 'Republic of Singapore' => 'sing', + 'Republic of Korea' => 'skor', + 'Republic of Slovenia' => 'slva', + 'Somali Republic' => 'smla', + 'Republic of Somaliland' => 'smld', + 'Republic of South Africa' => 'soaf', + 'Solomon Islands' => 'sois', + 'Kingdom of Spain' => 'span', + 'Secretariat of the Pacific Community' => 'spco', + 'Democratic Socialist Republic of Sri Lanka' => 'srla', + 'Saint Lucia' => 'stlu', + 'Republic of the Sudan' => 'suda', + 'Republic of Suriname' => 'surn', + 'Slovak Republic' => 'svka', + 'Kingdom of Sweden' => 'swdn', + 'Swiss Confederation' => 'swit', + 'Syrian Arab Republic' => 'syra', + 'Kingdom of Swaziland' => 'szld', + 'Republic of China' => 'taiw', + 'Taiwan' => 'taiw', + 'Republic of Tajikistan' => 'tajk', + 'United Republic of Tanzania' => 'tanz', + 'Kingdom of Thailand' => 'thal', + 'Autonomous Region of Tibet' => 'tibe', + 'Turkmenistan' => 'tkst', + 'Togolese Republic' => 'togo', + 'Tokelau' => 'toke', + 'Kingdom of Tonga' => 'tong', + 'Tristan da Cunha' => 'trdc', + 'Tromelin' => 'tris', + 'Republic of Tunisia' => 'tuns', + 'Republic of Turkey' => 'turk', + 'Tuvalu' => 'tuva', + 'United Arab Emirates' => 'uaem', + 'Republic of Uganda' => 'ugan', + 'Ukraine' => 'ukrn', + 'United Kingdom of Great Britain' => 'unkg', + 'United Nations' => 'unna', + 'United States of America' => 'unst', + 'Oriental Republic of Uruguay' => 'urgy', + 'Virgin Islands of the United States' => 'usvs', + 'Republic of Uzbekistan' => 'uzbk', + 'State of the Vatican City' => 'vacy', + 'Republic of Vanuatu' => 'vant', + 'Bolivarian Republic of Venezuela' => 'venz', + 'Republic of Yemen' => 'yemn', + 'Democratic Republic of Congo' => 'zare', + 'Republic of Zimbabwe' => 'zbwe' ) ; + + + private $iFlagCount = -1; + private $iFlagSetMap = array( + FLAGSIZE1 => 'flags_thumb35x35', + FLAGSIZE2 => 'flags_thumb60x60', + FLAGSIZE3 => 'flags_thumb100x100', + FLAGSIZE4 => 'flags' + ); + + private $iFlagData ; + private $iOrdIdx=array(); + + function __construct($aSize=FLAGSIZE1) { + switch($aSize) { + case FLAGSIZE1 : + case FLAGSIZE2 : + case FLAGSIZE3 : + case FLAGSIZE4 : + $file = dirname(__FILE__).'/'.$this->iFlagSetMap[$aSize].'.dat'; + $fp = fopen($file,'rb'); + $rawdata = fread($fp,filesize($file)); + $this->iFlagData = unserialize($rawdata); + break; + default: + JpGraphError::RaiseL(5001,$aSize); + //('Unknown flag size. ('.$aSize.')'); + } + $this->iFlagCount = count($this->iCountryNameMap); + } + + function GetNum() { + return $this->iFlagCount; + } + + function GetImgByName($aName,&$outFullName) { + $idx = $this->GetIdxByName($aName,$outFullName); + return $this->GetImgByIdx($idx); + } + + function GetImgByIdx($aIdx) { + if( array_key_exists($aIdx,$this->iFlagData) ) { + $d = $this->iFlagData[$aIdx][1]; + return Image::CreateFromString($d); + } + else { + JpGraphError::RaiseL(5002,$aIdx); + //("Flag index \"�$aIdx\" does not exist."); + } + } + + function GetIdxByOrdinal($aOrd,&$outFullName) { + $aOrd--; + $n = count($this->iOrdIdx); + if( $n == 0 ) { + $this->iOrdIdx=array(); + $i=0; + foreach( $this->iCountryNameMap as $key => $val ) { + $this->iOrdIdx[$i++] = array($val,$key); + } + $tmp=$this->iOrdIdx[$aOrd]; + $outFullName = $tmp[1]; + return $tmp[0]; + + } + elseif( $aOrd >= 0 && $aOrd < $n ) { + $tmp=$this->iOrdIdx[$aOrd]; + $outFullName = $tmp[1]; + return $tmp[0]; + } + else { + JpGraphError::RaiseL(5003,$aOrd); + //('Invalid ordinal number specified for flag index.'); + } + } + + function GetIdxByName($aName,&$outFullName) { + + if( is_integer($aName) ) { + $idx = $this->GetIdxByOrdinal($aName,$outFullName); + return $idx; + } + + $found=false; + $aName = strtolower($aName); + $nlen = strlen($aName); + // Start by trying to match exact index name + foreach( $this->iCountryNameMap as $key => $val ) { + if( $nlen == strlen($val) && $val == $aName ) { + $found=true; + break; + } + } + if( !$found ) { + // If the exact index doesn't work try a (partial) full name + foreach( $this->iCountryNameMap as $key => $val ) { + if( strpos(strtolower($key), $aName) !== false ) { + $found=true; + break; + } + } + } + if( $found ) { + $outFullName = $key; + return $val; + } + else { + JpGraphError::RaiseL(5004,$aName); + //("The (partial) country name \"$aName\" does not have a cooresponding flag image. The flag may still exist but under another name, e.g. insted of \"usa\" try \"united states\"."); + } + } +} + + + + +?> diff --git a/Societes/ric/jpgraph/jpgraph_gantt.php b/Societes/ric/jpgraph/jpgraph_gantt.php new file mode 100755 index 00000000..a9268f70 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_gantt.php @@ -0,0 +1,3956 @@ +vgrid = new LineProperty(); + } + + function Hide($aF=true) { + $this->iShow=!$aF; + } + + function Show($aF=true) { + $this->iShow=$aF; + } + + // Specify font + function SetFont($aFFamily,$aFStyle=FS_NORMAL,$aFSize=10) { + $this->iFFamily = $aFFamily; + $this->iFStyle = $aFStyle; + $this->iFSize = $aFSize; + } + + function SetStyle($aStyle) { + $this->iStyle = $aStyle; + } + + function SetColumnMargin($aLeft,$aRight) { + $this->iLeftColMargin = $aLeft; + $this->iRightColMargin = $aRight; + } + + function SetFontColor($aFontColor) { + $this->iFontColor = $aFontColor; + } + + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function SetBackgroundColor($aColor) { + $this->iBackgroundColor = $aColor; + } + + function SetColTitles($aTitles,$aWidth=null) { + $this->iTitles = $aTitles; + $this->iWidth = $aWidth; + } + + function SetMinColWidth($aWidths) { + $n = min(count($this->iTitles),count($aWidths)); + for($i=0; $i < $n; ++$i ) { + if( !empty($aWidths[$i]) ) { + if( empty($this->iWidth[$i]) ) { + $this->iWidth[$i] = $aWidths[$i]; + } + else { + $this->iWidth[$i] = max($this->iWidth[$i],$aWidths[$i]); + } + } + } + } + + function GetWidth($aImg) { + $txt = new TextProperty(); + $txt->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + $n = count($this->iTitles) ; + $rm=$this->iRightColMargin; + $w = 0; + for($h=0, $i=0; $i < $n; ++$i ) { + $w += $this->iLeftColMargin; + $txt->Set($this->iTitles[$i]); + if( !empty($this->iWidth[$i]) ) { + $w1 = max($txt->GetWidth($aImg)+$rm,$this->iWidth[$i]); + } + else { + $w1 = $txt->GetWidth($aImg)+$rm; + } + $this->iWidth[$i] = $w1; + $w += $w1; + $h = max($h,$txt->GetHeight($aImg)); + } + $this->iHeight = $h+$this->iTopHeaderMargin; + $txt=''; + return $w; + } + + function GetColStart($aImg,&$aStart,$aAddLeftMargin=false) { + $n = count($this->iTitles) ; + $adj = $aAddLeftMargin ? $this->iLeftColMargin : 0; + $aStart=array($aImg->left_margin+$adj); + for( $i=1; $i < $n; ++$i ) { + $aStart[$i] = $aStart[$i-1]+$this->iLeftColMargin+$this->iWidth[$i-1]; + } + } + + // Adjust headers left, right or centered + function SetHeaderAlign($aAlign) { + $this->iHeaderAlign=$aAlign; + } + + function Stroke($aImg,$aXLeft,$aYTop,$aXRight,$aYBottom,$aUseTextHeight=false) { + + if( !$this->iShow ) return; + + $txt = new TextProperty(); + $txt->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + $txt->SetColor($this->iFontColor); + $txt->SetAlign($this->iHeaderAlign,'top'); + $n=count($this->iTitles); + + if( $n == 0 ) + return; + + $x = $aXLeft; + $h = $this->iHeight; + $yTop = $aUseTextHeight ? $aYBottom-$h-$this->iTopColMargin-$this->iBottomColMargin : $aYTop ; + + if( $h < 0 ) { + JpGraphError::RaiseL(6001); + //('Internal error. Height for ActivityTitles is < 0'); + } + + $aImg->SetLineWeight(1); + // Set background color + $aImg->SetColor($this->iBackgroundColor); + $aImg->FilledRectangle($aXLeft,$yTop,$aXRight,$aYBottom-1); + + if( $this->iStyle == 1 ) { + // Make a 3D effect + $aImg->SetColor('white'); + $aImg->Line($aXLeft,$yTop+1,$aXRight,$yTop+1); + } + + for($i=0; $i < $n; ++$i ) { + if( $this->iStyle == 1 ) { + // Make a 3D effect + $aImg->SetColor('white'); + $aImg->Line($x+1,$yTop,$x+1,$aYBottom); + } + $x += $this->iLeftColMargin; + $txt->Set($this->iTitles[$i]); + + // Adjust the text anchor position according to the choosen alignment + $xp = $x; + if( $this->iHeaderAlign == 'center' ) { + $xp = (($x-$this->iLeftColMargin)+($x+$this->iWidth[$i]))/2; + } + elseif( $this->iHeaderAlign == 'right' ) { + $xp = $x +$this->iWidth[$i]-$this->iRightColMargin; + } + + $txt->Stroke($aImg,$xp,$yTop+$this->iTopHeaderMargin); + $x += $this->iWidth[$i]; + if( $i < $n-1 ) { + $aImg->SetColor($this->iColor); + $aImg->Line($x,$yTop,$x,$aYBottom); + } + } + + $aImg->SetColor($this->iColor); + $aImg->Line($aXLeft,$yTop, $aXRight,$yTop); + + // Stroke vertical column dividers + $cols=array(); + $this->GetColStart($aImg,$cols); + $n=count($cols); + for( $i=1; $i < $n; ++$i ) { + $this->vgrid->Stroke($aImg,$cols[$i],$aYBottom,$cols[$i], + $aImg->height - $aImg->bottom_margin); + } + } +} + + +//=================================================== +// CLASS GanttGraph +// Description: Main class to handle gantt graphs +//=================================================== +class GanttGraph extends Graph { + public $scale; // Public accessible + public $hgrid=null; + private $iObj=array(); // Gantt objects + private $iLabelHMarginFactor=0.2; // 10% margin on each side of the labels + private $iLabelVMarginFactor=0.4; // 40% margin on top and bottom of label + private $iLayout=GANTT_FROMTOP; // Could also be GANTT_EVEN + private $iSimpleFont = FF_FONT1,$iSimpleFontSize=11; + private $iSimpleStyle=GANTT_RDIAG,$iSimpleColor='yellow',$iSimpleBkgColor='red'; + private $iSimpleProgressBkgColor='gray',$iSimpleProgressColor='darkgreen'; + private $iSimpleProgressStyle=GANTT_SOLID; + private $iZoomFactor = 1.0; + //--------------- + // CONSTRUCTOR + // Create a new gantt graph + function __construct($aWidth=0,$aHeight=0,$aCachedName="",$aTimeOut=0,$aInline=true) { + + // Backward compatibility + if( $aWidth == -1 ) $aWidth=0; + if( $aHeight == -1 ) $aHeight=0; + + if( $aWidth< 0 || $aHeight < 0 ) { + JpgraphError::RaiseL(6002); + //("You can't specify negative sizes for Gantt graph dimensions. Use 0 to indicate that you want the library to automatically determine a dimension."); + } + parent::__construct($aWidth,$aHeight,$aCachedName,$aTimeOut,$aInline); + $this->scale = new GanttScale($this->img); + + // Default margins + $this->img->SetMargin(15,17,25,15); + + $this->hgrid = new HorizontalGridLine(); + + $this->scale->ShowHeaders(GANTT_HWEEK|GANTT_HDAY); + $this->SetBox(); + } + + //--------------- + // PUBLIC METHODS + + // + + function SetSimpleFont($aFont,$aSize) { + $this->iSimpleFont = $aFont; + $this->iSimpleFontSize = $aSize; + } + + function SetSimpleStyle($aBand,$aColor,$aBkgColor) { + $this->iSimpleStyle = $aBand; + $this->iSimpleColor = $aColor; + $this->iSimpleBkgColor = $aBkgColor; + } + + // A utility function to help create basic Gantt charts + function CreateSimple($data,$constrains=array(),$progress=array()) { + $num = count($data); + for( $i=0; $i < $num; ++$i) { + switch( $data[$i][1] ) { + case ACTYPE_GROUP: + // Create a slightly smaller height bar since the + // "wings" at the end will make it look taller + $a = new GanttBar($data[$i][0],$data[$i][2],$data[$i][3],$data[$i][4],'',8); + $a->title->SetFont($this->iSimpleFont,FS_BOLD,$this->iSimpleFontSize); + $a->rightMark->Show(); + $a->rightMark->SetType(MARK_RIGHTTRIANGLE); + $a->rightMark->SetWidth(8); + $a->rightMark->SetColor('black'); + $a->rightMark->SetFillColor('black'); + + $a->leftMark->Show(); + $a->leftMark->SetType(MARK_LEFTTRIANGLE); + $a->leftMark->SetWidth(8); + $a->leftMark->SetColor('black'); + $a->leftMark->SetFillColor('black'); + + $a->SetPattern(BAND_SOLID,'black'); + $csimpos = 6; + break; + + case ACTYPE_NORMAL: + $a = new GanttBar($data[$i][0],$data[$i][2],$data[$i][3],$data[$i][4],'',10); + $a->title->SetFont($this->iSimpleFont,FS_NORMAL,$this->iSimpleFontSize); + $a->SetPattern($this->iSimpleStyle,$this->iSimpleColor); + $a->SetFillColor($this->iSimpleBkgColor); + // Check if this activity should have a constrain line + $n = count($constrains); + for( $j=0; $j < $n; ++$j ) { + if( empty($constrains[$j]) || (count($constrains[$j]) != 3) ) { + JpGraphError::RaiseL(6003,$j); + //("Invalid format for Constrain parameter at index=$j in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Constrain-To,Constrain-Type)"); + } + if( $constrains[$j][0]==$data[$i][0] ) { + $a->SetConstrain($constrains[$j][1],$constrains[$j][2],'black',ARROW_S2,ARROWT_SOLID); + } + } + + // Check if this activity have a progress bar + $n = count($progress); + for( $j=0; $j < $n; ++$j ) { + + if( empty($progress[$j]) || (count($progress[$j]) != 2) ) { + JpGraphError::RaiseL(6004,$j); + //("Invalid format for Progress parameter at index=$j in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Progress)"); + } + if( $progress[$j][0]==$data[$i][0] ) { + $a->progress->Set($progress[$j][1]); + $a->progress->SetPattern($this->iSimpleProgressStyle, + $this->iSimpleProgressColor); + $a->progress->SetFillColor($this->iSimpleProgressBkgColor); + //$a->progress->SetPattern($progress[$j][2],$progress[$j][3]); + break; + } + } + $csimpos = 6; + break; + + case ACTYPE_MILESTONE: + $a = new MileStone($data[$i][0],$data[$i][2],$data[$i][3]); + $a->title->SetFont($this->iSimpleFont,FS_NORMAL,$this->iSimpleFontSize); + $a->caption->SetFont($this->iSimpleFont,FS_NORMAL,$this->iSimpleFontSize); + $csimpos = 5; + break; + default: + die('Unknown activity type'); + break; + } + + // Setup caption + $a->caption->Set($data[$i][$csimpos-1]); + + // Check if this activity should have a CSIM target�? + if( !empty($data[$i][$csimpos]) ) { + $a->SetCSIMTarget($data[$i][$csimpos]); + $a->SetCSIMAlt($data[$i][$csimpos+1]); + } + if( !empty($data[$i][$csimpos+2]) ) { + $a->title->SetCSIMTarget($data[$i][$csimpos+2]); + $a->title->SetCSIMAlt($data[$i][$csimpos+3]); + } + + $this->Add($a); + } + } + + // Set user specified scale zoom factor when auto sizing is used + function SetZoomFactor($aZoom) { + $this->iZoomFactor = $aZoom; + } + + + // Set what headers should be shown + function ShowHeaders($aFlg) { + $this->scale->ShowHeaders($aFlg); + } + + // Specify the fraction of the font height that should be added + // as vertical margin + function SetLabelVMarginFactor($aVal) { + $this->iLabelVMarginFactor = $aVal; + } + + // Synonym to the method above + function SetVMarginFactor($aVal) { + $this->iLabelVMarginFactor = $aVal; + } + + + // Add a new Gantt object + function Add($aObject) { + if( is_array($aObject) && count($aObject) > 0 ) { + $cl = $aObject[0]; + if( class_exists('IconPlot',false) && ($cl instanceof IconPlot) ) { + $this->AddIcon($aObject); + } + elseif( class_exists('Text',false) && ($cl instanceof Text) ) { + $this->AddText($aObject); + } + else { + $n = count($aObject); + for($i=0; $i < $n; ++$i) + $this->iObj[] = $aObject[$i]; + } + } + else { + if( class_exists('IconPlot',false) && ($aObject instanceof IconPlot) ) { + $this->AddIcon($aObject); + } + elseif( class_exists('Text',false) && ($aObject instanceof Text) ) { + $this->AddText($aObject); + } + else { + $this->iObj[] = $aObject; + } + } + } + + function StrokeTexts() { + // Stroke any user added text objects + if( $this->texts != null ) { + $n = count($this->texts); + for($i=0; $i < $n; ++$i) { + if( $this->texts[$i]->iScalePosX !== null && $this->texts[$i]->iScalePosY !== null ) { + $x = $this->scale->TranslateDate($this->texts[$i]->iScalePosX); + $y = $this->scale->TranslateVertPos($this->texts[$i]->iScalePosY); + $y -= $this->scale->GetVertSpacing()/2; + } + else { + $x = $y = null; + } + $this->texts[$i]->Stroke($this->img,$x,$y); + } + } + } + + // Override inherit method from Graph and give a warning message + function SetScale($aAxisType,$aYMin=1,$aYMax=1,$aXMin=1,$aXMax=1) { + JpGraphError::RaiseL(6005); + //("SetScale() is not meaningfull with Gantt charts."); + } + + // Specify the date range for Gantt graphs (if this is not set it will be + // automtically determined from the input data) + function SetDateRange($aStart,$aEnd) { + // Adjust the start and end so that the indicate the + // begining and end of respective start and end days + if( strpos($aStart,':') === false ) + $aStart = date('Y-m-d 00:00',strtotime($aStart)); + if( strpos($aEnd,':') === false ) + $aEnd = date('Y-m-d 23:59',strtotime($aEnd)); + $this->scale->SetRange($aStart,$aEnd); + } + + // Get the maximum width of the activity titles columns for the bars + // The name is lightly misleading since we from now on can have + // multiple columns in the label section. When this was first written + // it only supported a single label, hence the name. + function GetMaxLabelWidth() { + $m=10; + if( $this->iObj != null ) { + $marg = $this->scale->actinfo->iLeftColMargin+$this->scale->actinfo->iRightColMargin; + $n = count($this->iObj); + for($i=0; $i < $n; ++$i) { + if( !empty($this->iObj[$i]->title) ) { + if( $this->iObj[$i]->title->HasTabs() ) { + list($tot,$w) = $this->iObj[$i]->title->GetWidth($this->img,true); + $m=max($m,$tot); + } + else + $m=max($m,$this->iObj[$i]->title->GetWidth($this->img)); + } + } + } + return $m; + } + + // Get the maximum height of the titles for the bars + function GetMaxLabelHeight() { + $m=10; + if( $this->iObj != null ) { + $n = count($this->iObj); + // We can not include the title of GnttVLine since that title is stroked at the bottom + // of the Gantt bar and not in the activity title columns + for($i=0; $i < $n; ++$i) { + if( !empty($this->iObj[$i]->title) && !($this->iObj[$i] instanceof GanttVLine) ) { + $m=max($m,$this->iObj[$i]->title->GetHeight($this->img)); + } + } + } + return $m; + } + + function GetMaxBarAbsHeight() { + $m=0; + if( $this->iObj != null ) { + $m = $this->iObj[0]->GetAbsHeight($this->img); + $n = count($this->iObj); + for($i=1; $i < $n; ++$i) { + $m=max($m,$this->iObj[$i]->GetAbsHeight($this->img)); + } + } + return $m; + } + + // Get the maximum used line number (vertical position) for bars + function GetBarMaxLineNumber() { + $m=1; + if( $this->iObj != null ) { + $m = $this->iObj[0]->GetLineNbr(); + $n = count($this->iObj); + for($i=1; $i < $n; ++$i) { + $m=max($m,$this->iObj[$i]->GetLineNbr()); + } + } + return $m; + } + + // Get the minumum and maximum used dates for all bars + function GetBarMinMax() { + $start = 0 ; + $n = count($this->iObj); + while( $start < $n && $this->iObj[$start]->GetMaxDate() === false ) + ++$start; + if( $start >= $n ) { + JpgraphError::RaiseL(6006); + //('Cannot autoscale Gantt chart. No dated activities exist. [GetBarMinMax() start >= n]'); + } + + $max=$this->scale->NormalizeDate($this->iObj[$start]->GetMaxDate()); + $min=$this->scale->NormalizeDate($this->iObj[$start]->GetMinDate()); + + for($i=$start+1; $i < $n; ++$i) { + $rmax = $this->scale->NormalizeDate($this->iObj[$i]->GetMaxDate()); + if( $rmax != false ) + $max=Max($max,$rmax); + $rmin = $this->scale->NormalizeDate($this->iObj[$i]->GetMinDate()); + if( $rmin != false ) + $min=Min($min,$rmin); + } + $minDate = date("Y-m-d",$min); + $min = strtotime($minDate); + $maxDate = date("Y-m-d 23:59",$max); + $max = strtotime($maxDate); + return array($min,$max); + } + + // Create a new auto sized canvas if the user hasn't specified a size + // The size is determined by what scale the user has choosen and hence + // the minimum width needed to display the headers. Some margins are + // also added to make it better looking. + function AutoSize() { + + if( $this->img->img == null ) { + // The predefined left, right, top, bottom margins. + // Note that the top margin might incease depending on + // the title. + $hadj = $vadj = 0; + if( $this->doshadow ) { + $hadj = $this->shadow_width; + $vadj = $this->shadow_width+5; + } + + $lm = $this->img->left_margin; + $rm = $this->img->right_margin +$hadj; + $rm += 2 ; + $tm = $this->img->top_margin; + $bm = $this->img->bottom_margin + $vadj; + $bm += 2; + + // If there are any added GanttVLine we must make sure that the + // bottom margin is wide enough to hold a title. + $n = count($this->iObj); + for($i=0; $i < $n; ++$i) { + if( $this->iObj[$i] instanceof GanttVLine ) { + $bm = max($bm,$this->iObj[$i]->title->GetHeight($this->img)+10); + } + } + + // First find out the height + $n=$this->GetBarMaxLineNumber()+1; + $m=max($this->GetMaxLabelHeight(),$this->GetMaxBarAbsHeight()); + $height=$n*((1+$this->iLabelVMarginFactor)*$m); + + // Add the height of the scale titles + $h=$this->scale->GetHeaderHeight(); + $height += $h; + + // Calculate the top margin needed for title and subtitle + if( $this->title->t != "" ) { + $tm += $this->title->GetFontHeight($this->img); + } + if( $this->subtitle->t != "" ) { + $tm += $this->subtitle->GetFontHeight($this->img); + } + + // ...and then take the bottom and top plot margins into account + $height += $tm + $bm + $this->scale->iTopPlotMargin + $this->scale->iBottomPlotMargin; + // Now find the minimum width for the chart required + + // If day scale or smaller is shown then we use the day font width + // as the base size unit. + // If only weeks or above is displayed we use a modified unit to + // get a smaller image. + if( $this->scale->IsDisplayHour() || $this->scale->IsDisplayMinute() ) { + // Add 2 pixel margin on each side + $fw=$this->scale->day->GetFontWidth($this->img)+4; + } + elseif( $this->scale->IsDisplayWeek() ) { + $fw = 8; + } + elseif( $this->scale->IsDisplayMonth() ) { + $fw = 4; + } + else { + $fw = 2; + } + + $nd=$this->scale->GetNumberOfDays(); + + if( $this->scale->IsDisplayDay() ) { + // If the days are displayed we also need to figure out + // how much space each day's title will require. + switch( $this->scale->day->iStyle ) { + case DAYSTYLE_LONG : + $txt = "Monday"; + break; + case DAYSTYLE_LONGDAYDATE1 : + $txt = "Monday 23 Jun"; + break; + case DAYSTYLE_LONGDAYDATE2 : + $txt = "Monday 23 Jun 2003"; + break; + case DAYSTYLE_SHORT : + $txt = "Mon"; + break; + case DAYSTYLE_SHORTDAYDATE1 : + $txt = "Mon 23/6"; + break; + case DAYSTYLE_SHORTDAYDATE2 : + $txt = "Mon 23 Jun"; + break; + case DAYSTYLE_SHORTDAYDATE3 : + $txt = "Mon 23"; + break; + case DAYSTYLE_SHORTDATE1 : + $txt = "23/6"; + break; + case DAYSTYLE_SHORTDATE2 : + $txt = "23 Jun"; + break; + case DAYSTYLE_SHORTDATE3 : + $txt = "Mon 23"; + break; + case DAYSTYLE_SHORTDATE4 : + $txt = "88"; + break; + case DAYSTYLE_CUSTOM : + $txt = date($this->scale->day->iLabelFormStr,strtotime('2003-12-20 18:00')); + break; + case DAYSTYLE_ONELETTER : + default: + $txt = "M"; + break; + } + $fw = $this->scale->day->GetStrWidth($this->img,$txt)+6; + } + + // If we have hours enabled we must make sure that each day has enough + // space to fit the number of hours to be displayed. + if( $this->scale->IsDisplayHour() ) { + // Depending on what format the user has choose we need different amount + // of space. We therefore create a typical string for the choosen format + // and determine the length of that string. + switch( $this->scale->hour->iStyle ) { + case HOURSTYLE_HMAMPM: + $txt = '12:00pm'; + break; + case HOURSTYLE_H24: + // 13 + $txt = '24'; + break; + case HOURSTYLE_HAMPM: + $txt = '12pm'; + break; + case HOURSTYLE_CUSTOM: + $txt = date($this->scale->hour->iLabelFormStr,strtotime('2003-12-20 18:00')); + break; + case HOURSTYLE_HM24: + default: + $txt = '24:00'; + break; + } + + $hfw = $this->scale->hour->GetStrWidth($this->img,$txt)+6; + $mw = $hfw; + if( $this->scale->IsDisplayMinute() ) { + // Depending on what format the user has choose we need different amount + // of space. We therefore create a typical string for the choosen format + // and determine the length of that string. + switch( $this->scale->minute->iStyle ) { + case HOURSTYLE_CUSTOM: + $txt2 = date($this->scale->minute->iLabelFormStr,strtotime('2005-05-15 18:55')); + break; + case MINUTESTYLE_MM: + default: + $txt2 = '15'; + break; + } + + $mfw = $this->scale->minute->GetStrWidth($this->img,$txt2)+6; + $n2 = ceil(60 / $this->scale->minute->GetIntervall() ); + $mw = $n2 * $mfw; + } + $hfw = $hfw < $mw ? $mw : $hfw ; + $n = ceil(24*60 / $this->scale->TimeToMinutes($this->scale->hour->GetIntervall()) ); + $hw = $n * $hfw; + $fw = $fw < $hw ? $hw : $fw ; + } + + // We need to repeat this code block here as well. + // THIS iS NOT A MISTAKE ! + // We really need it since we need to adjust for minutes both in the case + // where hour scale is shown and when it is not shown. + + if( $this->scale->IsDisplayMinute() ) { + // Depending on what format the user has choose we need different amount + // of space. We therefore create a typical string for the choosen format + // and determine the length of that string. + switch( $this->scale->minute->iStyle ) { + case HOURSTYLE_CUSTOM: + $txt = date($this->scale->minute->iLabelFormStr,strtotime('2005-05-15 18:55')); + break; + case MINUTESTYLE_MM: + default: + $txt = '15'; + break; + } + + $mfw = $this->scale->minute->GetStrWidth($this->img,$txt)+6; + $n = ceil(60 / $this->scale->TimeToMinutes($this->scale->minute->GetIntervall()) ); + $mw = $n * $mfw; + $fw = $fw < $mw ? $mw : $fw ; + } + + // If we display week we must make sure that 7*$fw is enough + // to fit up to 10 characters of the week font (if the week is enabled) + if( $this->scale->IsDisplayWeek() ) { + // Depending on what format the user has choose we need different amount + // of space + $fsw = strlen($this->scale->week->iLabelFormStr); + if( $this->scale->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR ) { + $fsw += 8; + } + elseif( $this->scale->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR ) { + $fsw += 7; + } + else { + $fsw += 4; + } + + $ww = $fsw*$this->scale->week->GetFontWidth($this->img); + if( 7*$fw < $ww ) { + $fw = ceil($ww/7); + } + } + + if( !$this->scale->IsDisplayDay() && !$this->scale->IsDisplayHour() && + !( ($this->scale->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR || + $this->scale->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR) && $this->scale->IsDisplayWeek() ) ) { + // If we don't display the individual days we can shrink the + // scale a little bit. This is a little bit pragmatic at the + // moment and should be re-written to take into account + // a) What scales exactly are shown and + // b) what format do they use so we know how wide we need to + // make each scale text space at minimum. + $fw /= 2; + if( !$this->scale->IsDisplayWeek() ) { + $fw /= 1.8; + } + } + + $cw = $this->GetMaxActInfoColWidth() ; + $this->scale->actinfo->SetMinColWidth($cw); + if( $this->img->width <= 0 ) { + // Now determine the width for the activity titles column + + // Firdst find out the maximum width of each object column + $titlewidth = max(max($this->GetMaxLabelWidth(), + $this->scale->tableTitle->GetWidth($this->img)), + $this->scale->actinfo->GetWidth($this->img)); + + // Add the width of the vertivcal divider line + $titlewidth += $this->scale->divider->iWeight*2; + + // Adjust the width by the user specified zoom factor + $fw *= $this->iZoomFactor; + + // Now get the total width taking + // titlewidth, left and rigt margin, dayfont size + // into account + $width = $titlewidth + $nd*$fw + $lm+$rm; + } + else { + $width = $this->img->width; + } + + $width = round($width); + $height = round($height); + // Make a sanity check on image size + if( $width > MAX_GANTTIMG_SIZE_W || $height > MAX_GANTTIMG_SIZE_H ) { + JpgraphError::RaiseL(6007,$width,$height); + //("Sanity check for automatic Gantt chart size failed. Either the width (=$width) or height (=$height) is larger than MAX_GANTTIMG_SIZE. This could potentially be caused by a wrong date in one of the activities."); + } + $this->img->CreateImgCanvas($width,$height); + $this->img->SetMargin($lm,$rm,$tm,$bm); + } + } + + // Return an array width the maximum width for each activity + // column. This is used when we autosize the columns where we need + // to find out the maximum width of each column. In order to do that we + // must walk through all the objects, sigh... + function GetMaxActInfoColWidth() { + $n = count($this->iObj); + if( $n == 0 ) return; + $w = array(); + $m = $this->scale->actinfo->iLeftColMargin + $this->scale->actinfo->iRightColMargin; + + for( $i=0; $i < $n; ++$i ) { + $tmp = $this->iObj[$i]->title->GetColWidth($this->img,$m); + $nn = count($tmp); + for( $j=0; $j < $nn; ++$j ) { + if( empty($w[$j]) ) + $w[$j] = $tmp[$j]; + else + $w[$j] = max($w[$j],$tmp[$j]); + } + } + return $w; + } + + // Stroke the gantt chart + function Stroke($aStrokeFileName="") { + + // If the filename is the predefined value = '_csim_special_' + // we assume that the call to stroke only needs to do enough + // to correctly generate the CSIM maps. + // We use this variable to skip things we don't strictly need + // to do to generate the image map to improve performance + // a best we can. Therefor you will see a lot of tests !$_csim in the + // code below. + $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); + + // Should we autoscale dates? + + if( !$this->scale->IsRangeSet() ) { + list($min,$max) = $this->GetBarMinMax(); + $this->scale->SetRange($min,$max); + } + + $this->scale->AdjustStartEndDay(); + + // Check if we should autoscale the image + $this->AutoSize(); + + // Should we start from the top or just spread the bars out even over the + // available height + $this->scale->SetVertLayout($this->iLayout); + if( $this->iLayout == GANTT_FROMTOP ) { + $maxheight=max($this->GetMaxLabelHeight(),$this->GetMaxBarAbsHeight()); + $this->scale->SetVertSpacing($maxheight*(1+$this->iLabelVMarginFactor)); + } + // If it hasn't been set find out the maximum line number + if( $this->scale->iVertLines == -1 ) + $this->scale->iVertLines = $this->GetBarMaxLineNumber()+1; + + $maxwidth=max($this->scale->actinfo->GetWidth($this->img), + max($this->GetMaxLabelWidth(), + $this->scale->tableTitle->GetWidth($this->img))); + + $this->scale->SetLabelWidth($maxwidth+$this->scale->divider->iWeight);//*(1+$this->iLabelHMarginFactor)); + + if( !$_csim ) { + $this->StrokePlotArea(); + if( $this->iIconDepth == DEPTH_BACK ) { + $this->StrokeIcons(); + } + } + + $this->scale->Stroke(); + + if( !$_csim ) { + // Due to a minor off by 1 bug we need to temporarily adjust the margin + $this->img->right_margin--; + $this->StrokePlotBox(); + $this->img->right_margin++; + } + + // Stroke Grid line + $this->hgrid->Stroke($this->img,$this->scale); + + $n = count($this->iObj); + for($i=0; $i < $n; ++$i) { + //$this->iObj[$i]->SetLabelLeftMargin(round($maxwidth*$this->iLabelHMarginFactor/2)); + $this->iObj[$i]->Stroke($this->img,$this->scale); + } + + $this->StrokeTitles(); + + if( !$_csim ) { + $this->StrokeConstrains(); + $this->footer->Stroke($this->img); + + + if( $this->iIconDepth == DEPTH_FRONT) { + $this->StrokeIcons(); + } + + // Stroke all added user texts + $this->StrokeTexts(); + + // Should we do any final image transformation + if( $this->iImgTrans ) { + if( !class_exists('ImgTrans',false) ) { + require_once('jpgraph_imgtrans.php'); + } + + $tform = new ImgTrans($this->img->img); + $this->img->img = $tform->Skew3D($this->iImgTransHorizon,$this->iImgTransSkewDist, + $this->iImgTransDirection,$this->iImgTransHighQ, + $this->iImgTransMinSize,$this->iImgTransFillColor, + $this->iImgTransBorder); + } + + + // If the filename is given as the special "__handle" + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline, + $aStrokeFileName); + } + } + } + + function StrokeConstrains() { + $n = count($this->iObj); + + // Stroke all constrains + for($i=0; $i < $n; ++$i) { + + // Some gantt objects may not have constraints associated with them + // for example we can add IconPlots which doesn't have this property. + if( empty($this->iObj[$i]->constraints) ) continue; + + $numConstrains = count($this->iObj[$i]->constraints); + + for( $k = 0; $k < $numConstrains; $k++ ) { + $vpos = $this->iObj[$i]->constraints[$k]->iConstrainRow; + if( $vpos >= 0 ) { + $c1 = $this->iObj[$i]->iConstrainPos; + + // Find out which object is on the target row + $targetobj = -1; + for( $j=0; $j < $n && $targetobj == -1; ++$j ) { + if( $this->iObj[$j]->iVPos == $vpos ) { + $targetobj = $j; + } + } + if( $targetobj == -1 ) { + JpGraphError::RaiseL(6008,$this->iObj[$i]->iVPos,$vpos); + //('You have specifed a constrain from row='.$this->iObj[$i]->iVPos.' to row='.$vpos.' which does not have any activity.'); + } + $c2 = $this->iObj[$targetobj]->iConstrainPos; + if( count($c1) == 4 && count($c2 ) == 4) { + switch( $this->iObj[$i]->constraints[$k]->iConstrainType ) { + case CONSTRAIN_ENDSTART: + if( $c1[1] < $c2[1] ) { + $link = new GanttLink($c1[2],$c1[3],$c2[0],$c2[1]); + } + else { + $link = new GanttLink($c1[2],$c1[1],$c2[0],$c2[3]); + } + $link->SetPath(3); + break; + case CONSTRAIN_STARTEND: + if( $c1[1] < $c2[1] ) { + $link = new GanttLink($c1[0],$c1[3],$c2[2],$c2[1]); + } + else { + $link = new GanttLink($c1[0],$c1[1],$c2[2],$c2[3]); + } + $link->SetPath(0); + break; + case CONSTRAIN_ENDEND: + if( $c1[1] < $c2[1] ) { + $link = new GanttLink($c1[2],$c1[3],$c2[2],$c2[1]); + } + else { + $link = new GanttLink($c1[2],$c1[1],$c2[2],$c2[3]); + } + $link->SetPath(1); + break; + case CONSTRAIN_STARTSTART: + if( $c1[1] < $c2[1] ) { + $link = new GanttLink($c1[0],$c1[3],$c2[0],$c2[1]); + } + else { + $link = new GanttLink($c1[0],$c1[1],$c2[0],$c2[3]); + } + $link->SetPath(3); + break; + default: + JpGraphError::RaiseL(6009,$this->iObj[$i]->iVPos,$vpos); + //('Unknown constrain type specified from row='.$this->iObj[$i]->iVPos.' to row='.$vpos); + break; + } + + $link->SetColor($this->iObj[$i]->constraints[$k]->iConstrainColor); + $link->SetArrow($this->iObj[$i]->constraints[$k]->iConstrainArrowSize, + $this->iObj[$i]->constraints[$k]->iConstrainArrowType); + + $link->Stroke($this->img); + } + } + } + } + } + + function GetCSIMAreas() { + if( !$this->iHasStroked ) + $this->Stroke(_CSIM_SPECIALFILE); + + $csim = $this->title->GetCSIMAreas(); + $csim .= $this->subtitle->GetCSIMAreas(); + $csim .= $this->subsubtitle->GetCSIMAreas(); + + $n = count($this->iObj); + for( $i=$n-1; $i >= 0; --$i ) + $csim .= $this->iObj[$i]->GetCSIMArea(); + return $csim; + } +} + +//=================================================== +// CLASS PredefIcons +// Description: Predefined icons for use with Gantt charts +//=================================================== +define('GICON_WARNINGRED',0); +define('GICON_TEXT',1); +define('GICON_ENDCONS',2); +define('GICON_MAIL',3); +define('GICON_STARTCONS',4); +define('GICON_CALC',5); +define('GICON_MAGNIFIER',6); +define('GICON_LOCK',7); +define('GICON_STOP',8); +define('GICON_WARNINGYELLOW',9); +define('GICON_FOLDEROPEN',10); +define('GICON_FOLDER',11); +define('GICON_TEXTIMPORTANT',12); + +class PredefIcons { + private $iBuiltinIcon = null, $iLen = -1 ; + + function GetLen() { + return $this->iLen ; + } + + function GetImg($aIdx) { + if( $aIdx < 0 || $aIdx >= $this->iLen ) { + JpGraphError::RaiseL(6010,$aIdx); + //('Illegal icon index for Gantt builtin icon ['.$aIdx.']'); + } + return Image::CreateFromString(base64_decode($this->iBuiltinIcon[$aIdx][1])); + } + + function __construct() { + //========================================================== + // warning.png + //========================================================== + $this->iBuiltinIcon[0][0]= 1043 ; + $this->iBuiltinIcon[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAA'. + 'B3RJTUUH0wgKFSgilWPhUQAAA6BJREFUeNrtl91rHFUYh5/3zMx+Z5JNUoOamCZNaqTZ6IWIkqRiQWmi1IDetHfeiCiltgXBP8AL'. + '0SIUxf/AvfRSBS9EKILFFqyIH9CEmFZtPqrBJLs7c+b1YneT3WTTbNsUFPLCcAbmzPt73o9zzgzs2Z793231UOdv3w9k9Z2uzOdA'. + '5+2+79yNeL7Hl7hw7oeixRMZ6PJM26W18DNAm/Vh7lR8fqh97NmMF11es1iFpMATqdirwMNA/J4DpIzkr5YsAF1PO6gIMYHRdPwl'. + 'oO2elmB+qH3sm7XozbkgYvy8SzYnZPtcblyM6I+5z3jQ+0vJfgpEu56BfI9vUkbyi2HZd1QJoeWRiAjBd4SDCW8SSAOy6wBHMzF7'. + 'YdV2A+ROuvRPLfHoiSU0EMY/cDAIhxJeGngKaN1VgHyPL7NBxI1K9P4QxBzw3K1zJ/zkG8B9uwaQ7/HNsRZv9kohBGD0o7JqMYS/'. + '/ynPidQw/LrBiPBcS/yFCT95DvB2BWAy4575PaQbQKW+tPd3GCItu2odKI++YxiKu0d26oWmAD7paZU/rLz37VqIijD2YbnzNBBE'. + 'IBHf8K8qjL7vYhCGErEU8CTg3xXAeMp96GrJEqkyXkm9Bhui1xfsunjdGhcYLq+IzjsGmBt5YH/cmJkFq6gIqlon3u4LxdKGuCIo'. + 'Qu41g0E41po+2R33Xt5uz9kRIB2UTle7PnfKrROP1HD4sRjZlq0lzhwoZ6rDNeTi3nEg1si/7FT7kYQbXS6E5E65tA5uRF9tutq0'. + 'K/VwAF+/FbIYWt6+tjQM/AqUms7A4Wy6d7YSfSNxgMmzi0ycWWworio4QJvj4LpuL5BqugTnXzzqJsJwurrlNhJXFaavW67NRw3F'. + 'q+aJcCQVe9fzvJGmAY7/dPH0gi0f64OveGxa+usCuQMeZ0+kt8BVrX+qPO9Bzx0MgqBvs+a2PfDdYIf+WAjXU1ub4tqNaPPzRs8A'. + 'blrli+WVn79cXn0cWKl+tGx7HLc7pu3CSmnfitL+l1UihAhwjFkPQev4K/fSABjBM8JCaFuurJU+rgW41SroA8aNMVNAFtgHJCsn'. + 'XGy/58QVxAC9MccJtZ5kIzNlW440WrJ2ea4YPA9cAooA7i0A/gS+iqLoOpB1HOegqrYB3UBmJrAtQAJwpwPr1Ry92wVlgZsiYlW1'. + 'uX1gU36dymgqYxJIJJNJT1W9QqHgNwFQBGYqo94OwHZQUuPD7ACglSvc+5n5T9m/wfJJX4U9qzEAAAAASUVORK5CYII=' ; + + //========================================================== + // edit.png + //========================================================== + $this->iBuiltinIcon[1][0]= 959 ; + $this->iBuiltinIcon[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAFgAWABY9j+ZuwAAAAlwSFlz'. + 'AAALEAAACxABrSO9dQAAAAd0SU1FB9AKDAwbIEXOA6AAAAM8SURBVHicpdRPaBxlHMbx76ZvsmOTmm1dsEqQSIIsEmGVBAQjivEQ'. + 'PAUJngpWsAWlBw8egpQepKwplN4ULEG9CjkEyUFKlSJrWTG0IU51pCsdYW2ncUPjdtp9Z+f3vuNhu8nKbmhaf5cZeGc+PO8zf1Lc'. + 'm0KhkACICCKCMeaBjiLC0tLSnjNvPmuOHRpH0TZTU1M8zBi9wakzn7OFTs5sw8YYACYmJrre7HkeuVyu69qPF77hlT1XmZ0eQ03O'. + 'wOLJTvhBx1rLz18VmJ0eY+jVd2FxDkKXnvYLHgb97OgLzE4ON9Hzc1B1QaQzsed5O0Lta3Ec89OnR5h5McfQ+Mw2qgQUnfBOPbZ3'. + 'bK3l+xOvMT0+3ERLp5FNF6UEjcL32+DdVmGt5WLhDYYPZrbRqreFumXwql0S3w9tnDvLWD5PZigPpdOwuYpSCo3C8wU3UHxQdHbf'. + 'cZIkNM6dxcnlUM4k1eUFMlUPpUADbpkttFarHe6oYqeOr6yt4RzMQHYUcUsQVtGicHDwKprViuLDkkOtVnsHCHZVRVy/zcj1i5Af'. + 'h8AjdIts+hUcGcYPK3iBtKM3gD/uAzf/AdY2mmmVgy6X8YNNKmGIvyloPcB8SUin07RQ4EZHFdsdG0wkJEnEaHAJxvKEpSLeaokV'. + 'r4zWmhUZYLlY4b1D03y5eIEWCtS7vsciAgiIxkQRabWOrlQor66y4pUphoJb1jiO4uO5o0S3q6RSqVbiOmC7VCEgAhLSaDQ48dH7'. + 'vD46REY0iysegSjKQciRt99ib7qXwX0O+pG4teM6YKHLB9JMq4mTmF9/+AKA4wvLZByH7OgYL7+UY2qvw/7Bfg5kHiXjJFyv3CGO'. + 'Y1rof+BW4t/XLiPG0DCGr79d4XzRxRnIMn98huXSTYyJ6et1UNYQhRvcinpJq86H3wGPPPM0iBDd+QffD1g4eZjLvuG7S1Wef26E'. + 'J7L7eSx7gAHVg7V3MSbi6m/r93baBd6qQjerAJg/9Ql/XrvG0ON1+vv7GH3qSfY5fahUnSTpwZgIEQesaVXRPbHRG/xyJSAxMYlp'. + 'EOm71HUINiY7mGb95l/8jZCyQmJjMDGJjUmsdCROtZ0n/P/Z8v4Fs2MTUUf7vYoAAAAASUVORK5CYII=' ; + + //========================================================== + // endconstrain.png + //========================================================== + $this->iBuiltinIcon[2][0]= 666 ; + $this->iBuiltinIcon[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'. + 'AAALDwAACw8BkvkDpQAAAAd0SU1FB9ALEREILkh0+eQAAAIXSURBVHictZU9aFNRFMd/N81HX77aptJUWmp1LHRpIcWhg5sIDlUQ'. + 'LAXB4t7RRUpwEhy7iQ46CCIoSHcl0CFaoVARU2MFMYktadLXJNok7x2HtCExvuYFmnO4w/3gx+Gc/z1HKRTdMEdXqHbB/sgc/sic'. + 'nDoYAI8XwDa8o1RMLT+2hAsigtTvbIGVqhX46szUifBGswUeCPgAGB7QeLk0X4Ork+HOxo1VgSqGASjMqkn8W4r4vVtEgI/RRQEL'. + 'vaoGD85cl5V3nySR/S1mxWxab7f35PnntNyMJeRr9kCMqiHTy09EoeToLwggx6ymiMOD/VwcD7Oa/MHkcIiQx026WGYto5P/U+ZZ'. + '7gD0QwDuT5z9N3LrVPi0Xs543eQPKkRzaS54eviJIp4tMFQFMllAWN2qcRZHBnixNM8NYD162xq8u7ePSQ+GX2Pjwxc2dB2cLtB8'. + '7GgamCb0anBYBeChMtl8855CarclxU1gvViiUK4w2OMkNDnGeJ8bt9fH90yOnOkCwLFTwhzykhvtYzOWoBBbY//R3dbaNTYhf2RO'. + 'QpeuUMzv188MlwuHy0H13HnE48UzMcL0WAtUHX8OxZHoG1URiFw7rnLLCswuSPD1ulze/iWjT2PSf+dBXRFtVVGIvzqph0pQL7VE'. + 'avXYaXXxPwsnt0imdttCocMmZBdK7YU9D8wuNOW0nXc6QWzPsSa5naZ1beb9BbGB6dxGtMnXAAAAAElFTkSuQmCC' ; + + //========================================================== + // mail.png + //========================================================== + $this->iBuiltinIcon[3][0]= 1122 ; + $this->iBuiltinIcon[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'. + 'AAALEAAACxABrSO9dQAAAAd0SU1FB9AJHAMfFvL9OU8AAAPfSURBVHictZRdaBRXFMd/987H7tbNx8aYtGCrEexDsOBDaKHFxirb'. + 'h0qhsiY0ykppKq1osI99C4H2WSiFFMHWUhXBrjRi0uCmtSEUGgP1QWqhWjGkoW7M1kTX3WRn5p4+TJJNGolQ6IXDnDtz+N0z/3PP'. + 'UWBIpdpYa23b9g09PZ2kUrOrvmUyGVKp1Ao/mUyi56YnVgWfO/P1CihAd/dJMpmaNROIRq8BkM1m0bH6TasC3j6QXgFdXI+DR6PR'. + 'JX/Pno8B+KLnMKqlpUU8z8MYs2RBEDzWf9J+0RcRbMdxGBsbw/fmCXwPMUEYID4iAVp8wIRmDIHMo4yHSIBSASKC+CWE0C/PF9jU'. + '3B6Cp+4M07C5FUtKGNvGwQJctPgIsgD2wRhEIqAMGB+UQYkHJgYYZD7P1HwVlmWhHcfhyk83KeRGUW4t6CgoG5SNUS4KBWgQDUov'. + '7AGlwYASBVqH0Bk49dXpCviVV3dw/tI1Bvr7kMIIlh0NYUpjlF0BAYvcxSXmEVLKceHSCJm+PnbueBHbtkNwTXUNBzo6aGpq4sSZ'. + 'GwT5H7BsF6Wdf1GWHQAoM0upeI9PT1yioS7B7tdaSdSuw7KsUGMAy7HYsmUztTW1nMwM0txssX1rlHjjS5jy/Uq2YkK/eJuLl6/z'. + 'x+1xkslW6mrixGIODx8EFSlEBC0+tmXT0NhA2763iEUjnLv4C8XpUbSbAB1mKkGJ3J83Od77HW5EszvZSqK2iljMIeJaRGNuJePF'. + '6mspY7BJ1DXwQnCd2fxGRq5OUCz8xt72dyhMZcn++Cu3xu9SKhdp2b4ZHWnAtTSxmIWlhcIjlksR3lNBYzlxZsb7+f7ne+xtSzOd'. + 'u83szH1OnThOPp/n+a0beeP1l4mvq+PU2Qyd+5PY1RuwlAqLYFaBfbTbyPSdfgaH77A//QF4f1O/vpr6RJyq+C5Kc/M8FbFxXItY'. + 'xOHDrvfo/fxLDnbsJBp5BowBReVWYAzabeTh5ABDw7cWoNNL3YYYNtSv57lnn6Z+Qx01VeuIuBa2DV1HD3H63BAPZu4u1WGpeLHq'. + 'Rh7+NcjA0O+0p4+CNwXigwnbWlQQdpuEpli+n+PIkcOc//YKuckJJFh2K2anrjFw+QZt6S6kPImIF/b+cqAJD1LihWAxC61twBTo'. + 'fPcQF/oGsVW5ovHQlavs2/8+uYnRVSOUgHAmmAClBIOBwKC0gPjhIRgEIX2wg7NnwpZW3d3d4vs+vu8TBMGK51rvPM9b8hdteZxd'. + 'LBbVR8feJDs0Rlv6GFKeXJ21rNRXESxMPR+CBUl0nN7PjtO+dye7Up/8v1I88bf/ixT/AO1/hZsqW+C6AAAAAElFTkSuQmCC' ; + + //========================================================== + // startconstrain.png + //========================================================== + $this->iBuiltinIcon[4][0]= 725 ; + $this->iBuiltinIcon[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'. + 'AAALDgAACw4BQL7hQQAAAAd0SU1FB9ALEREICJp5fBkAAAJSSURBVHic3dS9a1NRGMfx77kxtS+xqS9FG6p1ER3qVJpBQUUc3CRU'. + 'BwURVLB1EAuKIP0THJQiiNRJBK3iJl18AyeltRZa0bbaJMbUNmlNSm5e7s25j0NqpSSmyag/OMM9POdzDuflwn8djz8gClVRrVEV'. + 'ur4Bl1FTNSzLrSS6vbml0jUUwSXj8Qfk3PkLtLW2AeBIybmrgz3+gFzpucjlE4f4btuFTuWuCF5XDr3a3UPf6cM8GQvxzbsRAJdh'. + 'ScfxSywml5j7mVypN0eGEJ0tebIre+zxB6Tv7jPReS2hREpOvpmUXU+H5eC913JnNCSRVE60pUVbWoZjprR39Yq70bdqj4pW7PEH'. + '5FpvL9e79jOTTHM7ssDL6CJZ08LbvAGnrpZg2mI2Z/MlZfN8IkxuSwu4V9+WIrj7zFlOHfXzKrLIi2SGh5ECKjnNVNxkQEc55vOw'. + 'rb6O8JLFdHyJ+ayFElUeHvjwkfteL/V7fKTSkFvIQE4DoLI2Mz/muTkTApcBKIwaN8pwIUrKw+ajWwDknAO0d/r4zFaMuRS63sWm'. + 'RoOdm+vRIriUYjKexrQV+t1o0YEVwfZSVJmD/dIABJuO0LG3lRFx0GOfiAELE9OgCrfU0XnIp5FwGLEy5WEAOxlR5uN+ARhP7GN3'. + '5w7Gv4bQI2+xpt4jjv2nWBmIlcExE2vDAHYioszBZXw6CPE4ADoWVHmd/tuwlZR9eXYyoszBfpiNQqaAOU5+TXRN+DeeenADPT9b'. + 'EVgKVsutKPl0TGWGhwofoquaoKK4apsq/tH/e/kFwBMXLgAEKK4AAAAASUVORK5CYII=' ; + + //========================================================== + // calc.png + //========================================================== + $this->iBuiltinIcon[5][0]= 589 ; + $this->iBuiltinIcon[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAA4AIwBbgMF12wAAAAlwSFlz'. + 'AAALEQAACxEBf2RfkQAAAAd0SU1FB9AHBxQeFsqn0wQAAAHKSURBVHicnZWff+RAGIef3U/gcOEgUAgUCgcLhYXCwsHBQeGgUDgs'. + 'FgMHB4VA/4Bg4XChWFgIFIqBwkJhsRAYeOGF+TQHmWSTTbKd9pU37/x45jvfTDITXEynAbdWKVQB0NazcVm0alcL4rJaRVzm+w/e'. + '3iwAkzbYRcnnYgI04GCvsxxSPabYaEdt2Ra6D0atcvvvDmyrMWBX1zPq2ircP/Tk98DiJtjV/fim6ziOCL6dDHZNhxQ3arIMsox4'. + 'vejleL2Ay9+jaw6A+4OSICG2cacGKhsGxg+CxeqAQS0Y7BYJvowq7iGMOhXHEfzpvpQkA9bLKgOgWKt+4Lo1mM9hs9m17QNsJ70P'. + 'Fjc/O52joogoX8MZKiBiAFxd9Z1vcj9wfSpUlDRNMcYQxzFpmnJ0FPH8nDe1MQaWSz9woQpWSZKEojDkeaWoKAyr1tlu+s48wfVx'. + 'u7n5i7jthmGIiEGcT+36PP+gFeJrxWLhb0UA/lb4ggGs1T0rZs0zwM/ZjNfilcIY5tutPxgOW3F6dUX464LrKILLiw+A7WErrl+2'. + 'rABG1EL/BilZP8DjU2uR4U+2E49P1Z8QJmNXUzl24A9GBT0IruCfi86d9x+D12RGzt+pNAAAAABJRU5ErkJggg==' ; + + //========================================================== + // mag.png + //========================================================== + $this->iBuiltinIcon[6][0]= 1415 ; + $this->iBuiltinIcon[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'. + 'AAALDAAACwwBP0AiyAAAAAd0SU1FB9ALDxEWDY6Ul+UAAAUESURBVHicdZVrbFRFGIafsyyF0nalV1R6WiggaAptlzsr1OgEogmC'. + '0IgoBAsBgkIrBAPEhBj/AP6xRTCUFEwRI4jcgsitXMrFCJptJWvBNpXYbbXtbtttt6e7e86ec/yxadlCfZPJZDIz73zzzjfvR2VL'. + 'F7U+hf0HD2JduIzTFy6SlJRkPtkcDgdCCE65OxFC8NPV6wghyM7OptankJ2dzbSC5QghEEIgCSHog9PpNAF27dlN6miZuPgElB4/'. + 'nmY3O7ZtByA1NVUCkGWZweD1eklJScESTbqxuIjrd+/x6uIl5M19hSy7nfGOeUxf+g7VjU1sKi7C4/GYsiyz7tAJAD4/cRaA1tZW'. + 'AHIPnECUVGD1+/3U19ebG4uLeHf1akamjsIwoVnVCOvQEdLoVILYYmMo3PIxSBJflpSaDX5FAmju1QAYv/8k/s8+wLVxOU0jR2LZ'. + '8sMFAApWrCApbRRDrRZirBYSLBKaoRPQw3SFernf2sav7T0Ubt4KwL4FMwF4Vu8FoHBCKgCzDhwHwLIhZ7y5a89u4m2JhA0wTdDC'. + 'OrphEjJMNElCHxKDEjaobmvlfo/Krj27CQQCJsCGJW8C0KXqAMxMiosQA8hZWcTFx9OsaniDKh1qmG7VoFsL0x0K06kbeAMhWpRe'. + '/KpG+gwHAKUnz7Dz3BUMw6DK18nuw99wt0Nh6VdHI8RJicmETQgFg7SFwjSrGv+oKp6ghldV6dZ0ugJBlF6FmCESQ2w2AIqXLsan'. + 'BrFYLJTnTCBrdBqveeopWZiPFaBHUegJhegMqGgxEkHDwB/UaQ9rdIV06v0+TD2EEQjQFtAY0dsNgNvt5sialQAIIXh7wQKuVf6J'. + 'gTsSccPDWlQstClBGjr9eHpVWvUQncEwdYEedF8noQ4vmYmpZMTH0nTvDn25vLbrNmu7bvfnsYEbAMnhcPDgwQPzUo2LJusw/mhp'. + 'QwlHNO0KBAnoIfxtrcQMT2De1Mm891wyUzNlUlJSpIyMDBobGzlzr5rFM/Koq6vrP8ASGxsLwPmKcvIShjPGZiPOakE3VFB8hHwd'. + 'vJAxhrk5L7Ly+RQuH/sWgPdXrwFg/6HDFBUsIj09nehfbAWwPWOT9n5RYhqGwarNWxkRM5TRCfF4U1PQsDDJFk9uYhwXvzvKjm3b'. + 'KSsro3DJInNW5RXp7u2bAKSlpeH1esnPz6eqqgqLpmmcr3Fht9ulfaV7mZk1Bs+lM6T1djM9fhg5egDPpTNMy5TZsW07kydPYdWM'. + 'aXx96ixOp9O8cfUa80srmDpjOgAulytiQqZpMnvObLbt/JTtHxXj9/tRVdU0DGOAufRpevPDTeac0hJyc3NxOOawfv161lVWS6eX'. + 'z+9/UOCxu1VWVvaTRGv16NFfjB2bNeAQp9NpTpmSM4DcbrdL0WsGDKLRR+52uwe1yP8jb2lpYfikyY9t80n03UCWZeaXVjw1f+zs'. + 'Oen+/d+pqanhzp2fKSsrw+l0mi6XiyPl5ZGITdN8fAVJwjRNJEmi1qfw1kw7siyTnJxMe3s71dXV3GpoZO64DG41NPJylvxU5D/e'. + 'qJKsfWQD9IkaZ2RmUvr9aV4aGYcQgjfO3aWoYBF5eXm4ewIsu/CbdPz1aWb0/p1bNoOrQxlUiuiaFo3c3FyEEOx9+C9CCD6paaTW'. + 'p/TXyYkTJ0Xe59jf7QOyAKDWp/QXxcFQ61P4pT3ShBBcvnUHIQTjxmX19/8BCeVg+/GPpskAAAAASUVORK5CYII=' ; + + //========================================================== + // lock.png + //========================================================== + $this->iBuiltinIcon[7][0]= 963 ; + $this->iBuiltinIcon[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'. + 'AAALCwAACwsBbQSEtwAAAAd0SU1FB9AKAw0XDmwMOwIAAANASURBVHic7ZXfS1t3GMY/3+PprI7aisvo2YU6h6ATA8JW4rrlsF4U'. + 'qiAsF9mhl0N2cYTRy9G/wptAYWPD9iJtRy5asDe7cYFmyjaXOLaMImOrmkRrjL9yTmIS3120JybWQgfb3R74wuc8Lzw858vLOUpE'. + 'OK6pqSm2trbY39+nu7tbPHYch7m5OcLhMIA67kWj0aMQEWk6tm17rNm2LSIie3t7ksvlJJ1OSyqVkls3Z8SyLMnlcqTTaVKpFLdu'. + 'zmBZVj1HeY2VUti2TSQSQSml2bZdi0QirK2tMT09zerqKtlslqGhISYnJ4nHv2N+foFsNquOe9FotLlxOBwmk8lgWRbhcFgymYxY'. + 'liUi0mqaJoAuIi2macrdO7fFsizx3to0Te7euV1vrXtXEgqFmJmZYWVlhXK5LB4/U9kwDL784kYV0A3DYHd3m4sXRymXywKoRi8U'. + 'Ch01DgQCJBIJLMsiEAhIIpHw2uLz+eqtYrEYIqKZpimxWEyCwaCMjY01zYPBIJpXqVQqsby8TLVabWKA/v5+RkZGMAyDrq4ulFKH'. + 'HsfjcWZnZ+ns7KTRqwcnk0mKxSKFQqGJlVKtruuSTCYB6O3trW9UI/v9/iZPB/j8s2HOnX0FgHfeXpeffnzK+fWf+fijvhLs0PtG'. + 'D/n1OJ9+MsrlSwb3733DwMCAt1EyPj6uACYmJp56168NU6nUqFSE9nZdPE7+WqC/r4NKTagcCJVqDaUUB5VDAA4Pa9x7sMLlSwan'. + 'WjRmv13D7/erpaWlo604qOp88OF7LC48rPNosMq5Th+Dgxd4/XyA1rbzADi7j8jnf2P++wdcvSr8MJ/i8eomAKlUqn41OsDAQDeD'. + 'g++yuPCwzm/2vU8+n2a7sMFfj79mp7BBuVzioFSiXHJx3SKuW2Rzy0Up9dxnQVvODALQerqNRn4ZKe0Mvtc6TpzpmqbxalcY9Ato'. + '2v06t515C73YQftZB9GLnDrt4LoujuPgOA4Ui+C6yOpXJwZrJ7r/gv4P/u+D9W7fLxTz+1ScQxrZ3atRLaVxdjbY2d184R6/sLHe'. + 'opHP7/Do90Ua+WWUyezzZHObP/7cfX54/dowE1d66s8TV3oE+Mfn+L/zb4XmHPjRG9YjAAAAAElFTkSuQmCC' ; + + //========================================================== + // stop.png + //========================================================== + $this->iBuiltinIcon[8][0]= 889 ; + $this->iBuiltinIcon[8][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'. + 'AAALDwAACw8BkvkDpQAAAAd0SU1FB9AJDwEvNyD6M/0AAAL2SURBVHic1ZTLaxVnGIefb2bO5OScHJN4oWrFNqcUJYoUEgU3/Qf6'. + 'F7gwCkIrvdBLUtqqiLhSg9bgBduFSHZdiG5ctkJ3xRDbUFwUmghNzBDanPGMkzOX79LFJGPMOSd204U/+Bbzvd/78F4H/ieJdoad'. + 'pZKxRFszAI/DcP0HazXY22v+HB01kee1PA/v3zfnjx4xgGnHcNZe7OvuNj+cOEF1ZATv5nUA4jhBSgmADCVWo8Ge2Of9wb18P/G7'. + 'oUXmYi30zqlTVEdGWLh1g2D6MYlKkXGE0Vl8aa2GEB149+4xXSzyoOIw/mimiZV/DPb25pFOj13A9gOMEChhUEqhVYqWKUk9QAUp'. + 'sT/P4s8PmKlUmNhQaIJbkDVqBbpw6wZ2zUc4Nm+ePku5p4eOrgpueQOFUoVCVxcD4+N07dpF9+5tVJeWGPBjhvr7WF1zC8ASgtcP'. + 'H8a7eZ1odh4sh50nzwCw9ZNh3M4Stutiu0X2nB/LyjZ6lcIbVTpdQU/jWVPzLADM8+ZGBRdtC7wrF/O7bR99iu26VL86iU4SAH4b'. + 'Po5d6AQhstMSvGyI4wS5FJBKSRwnzF8byx/u+PjzzMF1mfryQ1K/jnCahqp1xEopjFLoNEFJSRJHzF799gWHqa+/QKcSUXBI609f'. + 'Al5W4teQSiHDOipNUKnMI13RvnOXAIEKQixvGWya98SC560MFwPiqEG86JM8q79Q06lvhnOndy5/B6GPCUOMUu3BQgg8z0M3GmBZ'. + 'iGJn3v2VmsqnfzNx7FDueODuj8ROCFpjtG5TCmOYv32bJ09msP0ISydMfnAUgF8/O45RAA6WTPjlvXcB+Gn7FuRf/zAnNX6x3ARe'. + 'PSdmqL+P/YHkwMGDOGWDZTlQcNBRhPEComgB/YeHfq2InF1kLlXUOkpMbio1bd7aATRD/X0M1lPeSlM2vt2X1XBZjZnpLG2tmZO6'. + 'LbQVOIcP+HG2UauH3xgwBqOz9Cc3l1tC24Fz+MvUDroeGNb5if9H/1dM/wLPCYMw9fryKgAAAABJRU5ErkJggg==' ; + + //========================================================== + // error.png + //========================================================== + $this->iBuiltinIcon[9][0]= 541 ; + $this->iBuiltinIcon[9][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAaVBMVEX//////2Xy8mLl5V/Z2VvMzFi/v1WyslKlpU+ZmUyMjEh/'. + 'f0VyckJlZT9YWDxMTDjAwMDy8sLl5bnY2K/MzKW/v5yyspKlpYiYmH+MjHY/PzV/f2xycmJlZVlZWU9MTEXY2Ms/PzwyMjLFTjea'. + 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTCAkUMSj9wWSOAAABLUlEQVR4'. + '2s2U3ZKCMAxGjfzJanFAXFkUle/9H9JUKA1gKTN7Yy6YMjl+kNPK5rlZVSuxf1ZRnlZxFYAm93NnIKvR+MEHUgqBXx93wZGIUrSe'. + 'h+ctEgbpiMo3iQ4kioHCGxir/ZYUbr7AgPXs9bX0BCYM8vN/cPe8oQYzom3tVsSBMVHEoOJ5dm5F1RsIe9CtqGgRacCAkUvRtevT'. + 'e2pd6vOWF+gCuc/brcuhyARakBU9FgK5bUBWdHEH8tHpDsZnRTZQGzdLVvQ3CzyYZiTAmSIODEwzFCAdJopuvbpeZDisJ4pKEcjD'. + 'ijWPJhU1MjCo9dkYfiUVjQNTDKY6CVbR6A0niUSZjRwFanR0l9i/TyvGnFdqwStq5axMfDbyBksld/FUumvxS/Bd9VyJvQDWiiMx'. + 'iOsCHgAAAABJRU5ErkJggg==' ; + + //========================================================== + // openfolder.png + //========================================================== + $this->iBuiltinIcon[10][0]= 2040 ; + $this->iBuiltinIcon[10][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEANAAtwClFht71AAAAAlwSFlz'. + 'AAALEAAACxABrSO9dQAAAAd0SU1FB9AKDQ4RIXMeaLcAAAd1SURBVHicxZd7jBXVHcc/58zcvTNzH8vusqw8FsTsKiCUUh5WBZXG'. + 'GkOptmqwNWsWLKXFGlEpzZI0AWNKSy0WhDS22gJKtWlTsSRqzYIuLGB2WVvDIwQMZQMsy2OFfdzde+/OnHP6x907vJaFpjb9JZM5'. + 'c85Mfp/f9/s7Jxn4P4e41gtSyp78WGvtfdEAcqDFYUOH9HS0NhGk9tPb/ilSyp789UUB2AMuqhQy3Uzm7HGkE6W3dTNZMRI3EcWO'. + 'jf9ClLmWBT3dzW8jUsevWHCG3UpWl+IkHSxnbDh/Mcz12NevBcuWXTmf6TjnXvJ88gDmVB3pw3+nt3UzHa1NqMzBS2zqPLGFjtMN'. + 'ZNr3XdW+qyqwZcFk76HX/tHWfuQvyO4W7qhaHwL8efkMRlRUpPv7rqD0RrJ+FgAjLy1a20OIxZJEEuNCRfIApj+om4bGM3u2/sYU'. + '9J41d8973f3Dhg1pISTV1dXXBRNJxPGFCzhou+DCQrScZOkktNaeDZjamgeZ9MgiYmVDccvHhjAzJw0NTh8/alyZMaVJicp0iTHj'. + 'JpgNv38tjWUhhGROdbUL9W5/MH5XCkjlcibi+KIop5LVHLKEu8A/f4r286doa9pGrGwYAAsfqbbH3b8MgO/Nqgy6WvdbbXHMkEFJ'. + '4xUOMVEvaTZu3BgmvF4Yk4hz9rO/Ulr5cE9owae/rcGxohSOuiWkC2IjcIqKyPZm+OmCH7GhoZEF077EEzVVweAbJ+riEeO0Ey8y'. + 'UubqOHn0AOgMwvf59txnBrSp9dgxKmf/+kIP1NY8SFk0jh5ajmNHAWg5b2E5EexojGHjbiVRMoRMNs0LC+Yz46vTuH3enN7BI8fr'. + 'qFdo0BoVZNC9aVSQ4fNjBzEmQJiARxb+/AqYPMAVB5FsPU5v37g9OxgLhe14ZM5/ju052E6MNZvf5pmHHuLmmWOkEysxUtpGAtme'. + 'dtHTflJkezqQto3jFRnLssyf1jydxiiM7zNnye/c3ZsqLu2BN5fcMfzrv/hby1tPzmRUoihcTJ87CwQI2yLtDcIqsIjYUf51qBlf'. + 'OnScOSrdQUOMURkiXsLUzJnvbGhoBGDHH5cGyZLhOpYoNl5hqYnYEXOu5fDl9eYAHntx98n8hFHZcPHUuTSxSASAeK/CGIOxJJ0f'. + 'bOGNPU280dgkq6Y2yu8vfjCIlwwzr+/ZQ/PHO0gOLuO5qsftDQ2NbN+4OCgqG6WTxWVaq6zpF+DiSHWnicdylp3r6aZTWthIOrNp'. + 'ktHcvBu0sHX1Sm6ozB3B42d90zZA9bQp7PvgPSzXZfnqX/HS4DKKK2+x69Y/HURs26iBAN5ccsfw7774UcumF37C6f07KSt2OHji'. + 'DEUJD0tISjyPrrSPlAKvN0JP/U4O1NfjuhG2rvklN1SOpfXwftpbTqAyKRrff5fb7rs9V1R7m4wlz2ihA3HpmXflUWyOH2umpLiY'. + 'ui3v8M+6bWzfsRNbSgqkxaCkiy0simMuEWEhpcRzIhQWOIAh6tiAwS4owInFiTou5dOnMnl2NR++ujBwXEc9terD6M43nrj6LgAB'. + 'QnDPA9/irtkP8JRS7Hr/3T6YekDQ1pEiEXOwpUVJzCVlZZFS4mZtkpEo9ChAkDp/jtLMBACy6S4RiQghLyv5cgBRPnKUOX6smUGF'. + 'hSil0MYw9d77mPy1e5mnFE3batm3czvb6nYgEJztSFGU9LCRlMRdUjIH0+lnEMIwPNXD3NumoVJnrMCJaiciMUZfvQnz4QcBSvV1'. + 'vjE5GK358t0zmXDnDB79saLpo20c+aSRD+t25JTp7GZQwsEWFiVxl6hlUf/WO9z32CxmL1rOe6u/I2KuwGhzLQCB7/sYY9Bah3el'. + 'FKbvrrVm4vS7GH/7ncx+chEHGz7myCeNbPtoO0JI2jq78WIRLGkzsqs7V5SfFV5EovXACoiqqsfNpk2vo5VCWtYFBfoU0VoTBAFa'. + 'a7TRaK2p+MoURk+cxMzq+Rzbv49DDbuo27UTW9h0dedssPxuK+kIfN8XxhgDYPVXf2Fh4XKtFIl4AiklAlBKAYRKKK36wHIweTCt'. + 'NfHiEkaOn8j0+7/BmDFjaT30GbHywSxcuZkpFfFg+m1jjZ/NmnVvNfRvwd69e8WBA/uNFAIh4JVXXmHsmDHE4vEQQgjQ2lxQIm9N'. + 'nz35q3BEOZOHzaG2thaA4mRU+L29It+IV21CpbRQfeMFC35gRB/M2rVrubnyZmLxWJhECBEmz/eHyo/7lMlH3LFFujsthNFCCGOu'. + '+WNyeUgpjSVzMKtWraKyshLPdcPEeYWCIEBdpIxSivr6eta8vI7d6+cGnhdV06pe1QP+F/QXWmuRL+jZZ58LlVmxYgUVFRV4rhtu'. + '4TzMxXAA6XRaRAtsYUkx8I/JtSJQOlSwpmZpCLN8+fPcdNNoHMfB9/0QJgRoP295TlR7UVv8xxZcHMuWIZ9/Hn35vG3JEGZpzVJG'. + 'jx5N1IlitKahsZE1L69j69qHgx+urFX/lQL9JYdLlfnZihUhzOLFi8N3Ml1dthOxVH/f/8/CtqSJ2JaJ2JZ59J7RPsC/AViJsQS/'. + 'dBntAAAAAElFTkSuQmCC' ; + + //========================================================== + // folder.png + //========================================================== + $this->iBuiltinIcon[11][0]= 1824 ; + $this->iBuiltinIcon[11][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'. + 'AAALEAAACxABrSO9dQAAAAd0SU1FB9ECAQgFFyd9cRUAAAadSURBVHiczdhvbBP3Hcfx9/2xfefEOA5JoCNNnIT8AdtZmYBETJsI'. + '6+jQOlQihT1AYgytqzZpD1atfyYqlT1h0lRpT7aRJ4NQpRvZGELVuo5Ua9jEJDIETQsNQyPBsUJMWGPnj//e+e72wNg4xElMR6ed'. + 'ZNln3933dZ/f93f6yfB/sgmrHdDV1WXlPg8NDZUDScD8LFFFEZZlWYZhWMFg0Orq6sq/gDJAfFy1iiZy9OjrVnj4JzQ1rMWqfxm/'. + '309jYyNtbW0kEgnu3bvH4cOH88c/jqSKQl4/XGkd+eVtAN46up1LH92ktqYS++ZX8Pv9NDQ0sGnTJlKpFOFwmO7u7vy5IyMjeVRd'. + 'XV1+WEOh0IrY4pDnq6wXX/sTiCJaMkFZdRNqxefoe7VtCSqXVDqdZnZ2ltraWkzTpKqqijt3JpFlG7dvj7NzZ1f++qFQyA3EClHL'. + 'Ql743nFkhxPDtJAd5eTaYSVUfX09lZWVlJWVIUnSg7sVQMBCUcu4ceMGe/bsIRQK1QAzOcyykIM9P0KyudAyCWyqG8nhwqa4SkLt'. + '3r0bVVVxu924XC40TUOWZUQxe97CwgIdHR2LMHIxSCaVInVvFElxE0vMY1Pd2NUKJMWNTXHlUfF//4vETJCelwbpFm3MjP2dt37x'. + 'AlN+PzU1NViWRSwW4+7du3g8HjweD4qi5EFAJzAExIpCANbooxhplfB0FJvTg6xWIqsVRVF6MopkU3FXPcnkJxGU0VEAdF2noqKC'. + 'W3/8DpnqLjzep2lubsblcjE8PExHR8fboVDID9xYFpLBDpJF0jDQIncQpWlkm31FlFLtp9PfyuW/vYQj1kPSuRW/38+lj27S2Q7v'. + '/aWXUBVUffVNtm3blivVCEwsC5Eyc5iiApEpDEAXMqQdldhSiWVQHjJagud+8Fuexck/zv+K82dfoSbSCsDe75/km+4GVPd6+l5t'. + '4zJHcqVUYN2yEEtZQDCSJCueRAYsPY49HsFIZVG6p25JUumFafT4DKJN4amtT7Nz38sk5+5A70HMtEYyMkFiZhxzjQ/poXrLQrRU'. + 'DFGEeFpAlkQkm4pRiCpIKodKzk0T/2QMh+piPjxKZPwiSkUtu/b9mNnJEWS7E8nhAmvpM60oJDkXJxqNozxRRUxPIesispBBlsXV'. + 'UaKEFo8gzoaJhz8s2lOmrpUG+WBhJ9/60g+Z+fDXTAXfxllRjl1VkO0OFATsYhYliiK21ZKKhhHnFveUqSdKgwAEOp7F2v51vvw8'. + 'XH7/N1wd/BlTweuUV65BdtgfoLTSkipsdD3tRi0VYpommUwGwzDwdT5HYEc3giAwcvH3jLz3BlPB67jWeZBEKYsSBWwpHZtNKo4q'. + 'aHTDsJeeiGEYWJaFZVmYpommaRiGQdPnv0bb1m8gSRL/vPIOV979aR4lmAJ2p4qCgCxksNuKJ6VNpx4NYhgGpmkuQhmGQTqdxjAM'. + 'qr2d7HtxEEEQuH1tkKvvvkF44tqDnrIcKJKAPf1g+LAUElq8dIiu60sApmnm93Pfzc7OYhgGrie+wFe++ztcLhcT1wf54PzPCU9c'. + 'w7XWjWS3IdsdOAUBWZAxrRJnTQ6SG5bce2FCpmkughmGQSqVYm5uDtnj44sH38TtdhP6+Dwf//V4ttHXrkGURZJaic8RgHQ6jWma'. + 'SJKUL5RLKNfIOczDKF3XSSaTRCIRhLJWntp3nGfWrSMxc5OLf3iNP4+68T9Ub9nF76lTpxgfHycajZJKpdA0LZ9GbjYV7hcDWZaF'. + 'pmnMz88Ti8UYunSLmu1HFi2aVkxkaGjINTY2ttDb24vX6+XQoUNs3ryZ8vJyIDu1BUFYkkxhgxeiWlpaOHPmDE1NTdTX1xe98eWG'. + 'JnF/9dQZCoXUYDA4AOD1ejlw4ACtra2Ul5fniwmCkEcUJiUIAoFAgL6+Pnw+H21tbfT39z8SxCS7hHsfWH9/8dL4MKqnp4eWlhac'. + 'TmcekEvMNE2am5s5ceIEgUCA9vZ2Tp48ic/nY3j4UsmQHCYOjJHtpeBKqL1799Lc3IzT6UTXdRobGxkYGKC9vZ3W1tZ8Ko86NJ8a'. + 'tXHjRo4dO8bp06fZsmULGzZsoL+/n0AggNfr5ezZs/8VpGTU5OSkc//+/acBfD4f1dXV7Nq1i4aGBs6dO4fP5+Pq1SuPBbIiyjTN'. + 'RUnV1dUNXLhwAa/Xy44dO4jFYgBEo9FFF1r134BPuYlk16LrAYXsAlmtq6sbKDwoFAp9m+ykuP5ZQVZF3f8tCdwCov8LyHIoAANI'. + 'AXf/A1TI0XCDh7OWAAAAAElFTkSuQmCC' ; + + //========================================================== + // file_important.png + //========================================================== + $this->iBuiltinIcon[12][0]= 1785 ; + $this->iBuiltinIcon[12][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'. + 'AAALDwAACw8BkvkDpQAAAAd0SU1FB9ECDAcjDeD3lKsAAAZ2SURBVHicrZhPaFzHHcc/897s7lutJCsr2VHsOHWMk0MPbsBUrcnF'. + 'OFRdSo6FNhdB6SGHlpDmYtJCDyoxyKe6EBxKQkt7KKL0T6ABo0NbciqigtC6PhWKI2NFqqxdSd7V2/dmftPDvPd212t55dCBYfbN'. + 'zpvfZ77z+/1mdhUjytWrV93Hf/24eD5z9gwiMlDjOKbb7dLtdhER2u02u7u73Lp1CxEZBw4AeZwdNQqkMd9wbziFGINJUt6rRbz5'. + '1ptUq1XK5TJBEAAUMHt7e+zu7gKwvLzMysoKwAng/uNg9CgQgFKlgg1DUJ67Vqtx6tQpZmdniaIIpRTOOZRSdDoddnZ2aLfbLC8v'. + 's7S0xJUrV7ZGwQSj1PhhfRodVdDlMrpc5vup5Z2fvMPdu3fZ29vDWjvwztjYGPV6nVqtRqVS4dKlSywtLQFsAdOH2XwsCEApg3jl'. + 'w98Rak2gvYjNZpNms0mSJDjnHgkDMDc3dySYQ0Ea8w139YUX0OUKulzyg7UmCEO+l1huvHuDra0t9vf3h1TJYSqVypFhHquIrlQI'. + 'S5qv/uIDAC7/4bcEQYAKvK+0Wq1DVQGIoog7d+4cCeaRII35hrt+8SsEOkRlUaEyR0UpFIrXHxyMVKVUKnHv3r0jwRwaNelBjBjL'. + 'Sz/7KYuLiwAsLi7y4z/9kY9e+TpkCuSqjI+Po7XuAWeKXLt2DWNMUZMkwRjDhQsXWFtbK6JpCCT3jfQgxomPtPX19YHWicM5x3c2'. + '73Pj3Ru8/aO3mZqaolKpoHVvyuvXr/Ppnf/Q7uzz380NPtu4y/qnG+ztd1hfX2dtbQ3gIvDnRyqSxl1UoPjyz98D4PTp0wPtq39Z'. + '4fdzLxegrVaLVqvF5OQkYRgWqpRKJZ77wvNsbW1RG5tgfKLOTH2G7Z1twqBQrgrMDvhInjfSOCY5iIv+hYWFgRZArEWsZWF941Bf'. + 'SdMUgMnJCWpjVU4cn+HUyePM1Gc4+fRUPkzBI5w1jbukcczLv/5l0XfmzJmBFuCba38r/CRXpT+CrDUoZ0jjB4RYonJAOYRobJKT'. + 'z5zgqfqxAbsFSH6mpHFM2qdGXh4VnoViD6mSJF2cTQeqDqBaKVHWmonJCWpZjhkC6anR5WsffTgwaHV1FaUUq6urA/2v3f5k4LnV'. + 'arG9tUn3oI2YBCcWHYAxMVYs1qZEZY2SFB2aYZDGfMN9d7uJiWPSeFiNo5Rclc3NTXZbO6RpF7EJVixYA9agwwDnUiqlEPdQ3imi'. + 'Jo27BGHIt/7x9yEjc3Nzh27Na7c/4TdffKl4bja3ae5MUIu0T/HOEIaOpJt4gwoSsVTK4SBIY77hFtY3ABBjBiZ90rKwvsH77/+K'. + 't37wOhO1iPpTk4SBw1mLsz6CnKQ4l3qV+kE+t9XHlNZOk+bUJLVIE1VCcIJWQmJ6qjj30NbcXLkZMt8YPig+Z3n1G5fZ39/j/vY2'. + '9ckqZT2Ochbn0p4qNkU/dDfUADdXbh4HXgRO4zNdEU0XL1784PLly5w9e7Z4SazFOfGrEotDcOKrcoJPmrYIXf/Zop3QNd1skuGt'. + 'cUAb2MgAxvHZTgFUq1Wmp6eZnZ0F8JlTjDduDThBnDeECEoJtbGIp6enqEblzCcEZ1PECU4yVRiOGgd0gc+AB0CZvkv1sWPHOHfu'. + 'HOfPn8da41cpkkltEBEPJhYnBkTQJcdYVKGkgRxCfBsq5xXNgAa2Bn+hjTOgHEKBP8pzRUxykIH4ifLJRTJAl+UMBJzPHQ6bfe/f'. + 'cWIzPxlUpD+zugzIZtVk1d8znBAqRxgoQuVQgSJQ3h9C5QhDRYgjUILCAzlnEdsHYTKfMTEBcP7F54YUGVmc2GLlIn6ve6v0ahSt'. + '8X25TzjJ+rIx1grKpQPWR4LkGVVsMgghvS0qjPdvm5OeceOTWA5Evo2mFzkjQfL7hZPUy5yvvF/uPFQL3+nbDmsLCEmT3sTmCTNr'. + 'rogT6yFsOix3ftw7OwQhkvSU6CuinhCk0+kAkFoBazEEICHaHHiPVmU0gnUp4EAc1mYrF0EBVpwPi34VrBkwPxKk3W5ju/e5/c+d'. + 'bGUHIAIuydTIE5zfc5Wr4lJcahHnHTP3CVGm78DrgY38N+DEibp7dmYKdAQmBh1hjEFjis+9CTWYGK21H6PxPyOI0DobYwzZF/z7'. + '7jadTvJtYG0kCD7lfwl49ijgT1gc0AH+dZSJA/xB+Mz/GSIvFoj/B7H1mAd8CO/zAAAAAElFTkSuQmCC' ; + + $this->iLen = count($this->iBuiltinIcon); + } +} + +//=================================================== +// Global cache for builtin images +//=================================================== +$_gPredefIcons = new PredefIcons(); + +//=================================================== +// CLASS IconImage +// Description: Holds properties for an icon image +//=================================================== +class IconImage { + private $iGDImage=null; + private $iWidth,$iHeight; + private $ixalign='left',$iyalign='center'; + private $iScale=1.0; + + function __construct($aIcon,$aScale=1) { + GLOBAL $_gPredefIcons ; + if( is_string($aIcon) ) { + $this->iGDImage = Graph::LoadBkgImage('',$aIcon); + } + elseif( is_integer($aIcon) ) { + // Builtin image + $this->iGDImage = $_gPredefIcons->GetImg($aIcon); + } + else { + JpGraphError::RaiseL(6011); + //('Argument to IconImage must be string or integer'); + } + $this->iScale = $aScale; + $this->iWidth = Image::GetWidth($this->iGDImage); + $this->iHeight = Image::GetHeight($this->iGDImage); + } + + function GetWidth() { + return round($this->iScale*$this->iWidth); + } + + function GetHeight() { + return round($this->iScale*$this->iHeight); + } + + function SetAlign($aX='left',$aY='center') { + $this->ixalign = $aX; + $this->iyalign = $aY; + } + + function Stroke($aImg,$x,$y) { + + if( $this->ixalign == 'right' ) { + $x -= $this->iWidth; + } + elseif( $this->ixalign == 'center' ) { + $x -= round($this->iWidth/2*$this->iScale); + } + + if( $this->iyalign == 'bottom' ) { + $y -= $this->iHeight; + } + elseif( $this->iyalign == 'center' ) { + $y -= round($this->iHeight/2*$this->iScale); + } + + $aImg->Copy($this->iGDImage, + $x,$y,0,0, + round($this->iWidth*$this->iScale),round($this->iHeight*$this->iScale), + $this->iWidth,$this->iHeight); + } +} + + +//=================================================== +// CLASS TextProperty +// Description: Holds properties for a text +//=================================================== +class TextProperty { + public $iShow=true; + public $csimtarget='',$csimwintarget='',$csimalt=''; + private $iFFamily=FF_FONT1,$iFStyle=FS_NORMAL,$iFSize=10; + private $iFontArray=array(); + private $iColor="black"; + private $iText=""; + private $iHAlign="left",$iVAlign="bottom"; + + //--------------- + // CONSTRUCTOR + function __construct($aTxt='') { + $this->iText = $aTxt; + } + + //--------------- + // PUBLIC METHODS + function Set($aTxt) { + $this->iText = $aTxt; + } + + function SetCSIMTarget($aTarget,$aAltText='',$aWinTarget='') { + if( is_string($aTarget) ) + $aTarget = array($aTarget); + $this->csimtarget=$aTarget; + + if( is_string($aWinTarget) ) + $aWinTarget = array($aWinTarget); + $this->csimwintarget=$aWinTarget; + + if( is_string($aAltText) ) + $aAltText = array($aAltText); + $this->csimalt=$aAltText; + + } + + function SetCSIMAlt($aAltText) { + if( is_string($aAltText) ) + $aAltText = array($aAltText); + $this->csimalt=$aAltText; + } + + // Set text color + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function HasTabs() { + if( is_string($this->iText) ) { + return substr_count($this->iText,"\t") > 0; + } + elseif( is_array($this->iText) ) { + return false; + } + } + + // Get number of tabs in string + function GetNbrTabs() { + if( is_string($this->iText) ) { + return substr_count($this->iText,"\t") ; + } + else{ + return 0; + } + } + + // Set alignment + function Align($aHAlign,$aVAlign="bottom") { + $this->iHAlign=$aHAlign; + $this->iVAlign=$aVAlign; + } + + // Synonym + function SetAlign($aHAlign,$aVAlign="bottom") { + $this->iHAlign=$aHAlign; + $this->iVAlign=$aVAlign; + } + + // Specify font + function SetFont($aFFamily,$aFStyle=FS_NORMAL,$aFSize=10) { + $this->iFFamily = $aFFamily; + $this->iFStyle = $aFStyle; + $this->iFSize = $aFSize; + } + + function SetColumnFonts($aFontArray) { + if( !is_array($aFontArray) || count($aFontArray[0]) != 3 ) { + JpGraphError::RaiseL(6033); + // 'Array of fonts must contain arrays with 3 elements, i.e. (Family, Style, Size)' + } + $this->iFontArray = $aFontArray; + } + + + function IsColumns() { + return is_array($this->iText) ; + } + + // Get width of text. If text contains several columns separated by + // tabs then return both the total width as well as an array with a + // width for each column. + function GetWidth($aImg,$aUseTabs=false,$aTabExtraMargin=1.1) { + $extra_margin=4; + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + if( is_string($this->iText) ) { + if( strlen($this->iText) == 0 ) return 0; + $tmp = preg_split('/\t/',$this->iText); + if( count($tmp) <= 1 || !$aUseTabs ) { + $w = $aImg->GetTextWidth($this->iText); + return $w + 2*$extra_margin; + } + else { + $tot=0; + $n = count($tmp); + for($i=0; $i < $n; ++$i) { + $res[$i] = $aImg->GetTextWidth($tmp[$i]); + $tot += $res[$i]*$aTabExtraMargin; + } + return array(round($tot),$res); + } + } + elseif( is_object($this->iText) ) { + // A single icon + return $this->iText->GetWidth()+2*$extra_margin; + } + elseif( is_array($this->iText) ) { + // Must be an array of texts. In this case we return the sum of the + // length + a fixed margin of 4 pixels on each text string + $n = count($this->iText); + $nf = count($this->iFontArray); + for( $i=0, $w=0; $i < $n; ++$i ) { + if( $i < $nf ) { + $aImg->SetFont($this->iFontArray[$i][0],$this->iFontArray[$i][1],$this->iFontArray[$i][2]); + } + else { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + } + $tmp = $this->iText[$i]; + if( is_string($tmp) ) { + $w += $aImg->GetTextWidth($tmp)+$extra_margin; + } + else { + if( is_object($tmp) === false ) { + JpGraphError::RaiseL(6012); + } + $w += $tmp->GetWidth()+$extra_margin; + } + } + return $w; + } + else { + JpGraphError::RaiseL(6012); + } + } + + // for the case where we have multiple columns this function returns the width of each + // column individually. If there is no columns just return the width of the single + // column as an array of one + function GetColWidth($aImg,$aMargin=0) { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + if( is_array($this->iText) ) { + $n = count($this->iText); + $nf = count($this->iFontArray); + for( $i=0, $w=array(); $i < $n; ++$i ) { + $tmp = $this->iText[$i]; + if( is_string($tmp) ) { + if( $i < $nf ) { + $aImg->SetFont($this->iFontArray[$i][0],$this->iFontArray[$i][1],$this->iFontArray[$i][2]); + } + else { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + } + $w[$i] = $aImg->GetTextWidth($tmp)+$aMargin; + } + else { + if( is_object($tmp) === false ) { + JpGraphError::RaiseL(6012); + } + $w[$i] = $tmp->GetWidth()+$aMargin; + } + } + return $w; + } + else { + return array($this->GetWidth($aImg)); + } + } + + // Get total height of text + function GetHeight($aImg) { + $nf = count($this->iFontArray); + $maxheight = -1; + + if( $nf > 0 ) { + // We have to find out the largest font and take that one as the + // height of the row + for($i=0; $i < $nf; ++$i ) { + $aImg->SetFont($this->iFontArray[$i][0],$this->iFontArray[$i][1],$this->iFontArray[$i][2]); + $height = $aImg->GetFontHeight(); + $maxheight = max($height,$maxheight); + } + } + + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + $height = $aImg->GetFontHeight(); + $maxheight = max($height,$maxheight); + return $maxheight; + } + + // Unhide/hide the text + function Show($aShow=true) { + $this->iShow=$aShow; + } + + // Stroke text at (x,y) coordinates. If the text contains tabs then the + // x parameter should be an array of positions to be used for each successive + // tab mark. If no array is supplied then the tabs will be ignored. + function Stroke($aImg,$aX,$aY) { + if( $this->iShow ) { + $aImg->SetColor($this->iColor); + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + $aImg->SetTextAlign($this->iHAlign,$this->iVAlign); + if( $this->GetNbrTabs() < 1 ) { + if( is_string($this->iText) ) { + if( is_array($aX) ) $aX=$aX[0]; + if( is_array($aY) ) $aY=$aY[0]; + $aImg->StrokeText($aX,$aY,$this->iText); + } + elseif( is_array($this->iText) && ($n = count($this->iText)) > 0 ) { + $ax = is_array($aX) ; + $ay = is_array($aY) ; + if( $ax && $ay ) { + // Nothing; both are already arrays + } + elseif( $ax ) { + $aY = array_fill(0,$n,$aY); + } + elseif( $ay ) { + $aX = array_fill(0,$n,$aX); + } + else { + $aX = array_fill(0,$n,$aX); + $aY = array_fill(0,$n,$aY); + } + $n = min($n, count($aX) ) ; + $n = min($n, count($aY) ) ; + for($i=0; $i < $n; ++$i ) { + $tmp = $this->iText[$i]; + if( is_object($tmp) ) { + $tmp->Stroke($aImg,$aX[$i],$aY[$i]); + } + else { + if( $i < count($this->iFontArray) ) { + $font = $this->iFontArray[$i]; + $aImg->SetFont($font[0],$font[1],$font[2]); + } + else { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + } + $aImg->StrokeText($aX[$i],$aY[$i],str_replace("\t"," ",$tmp)); + } + } + } + } + else { + $tmp = preg_split('/\t/',$this->iText); + $n = min(count($tmp),count($aX)); + for($i=0; $i < $n; ++$i) { + if( $i < count($this->iFontArray) ) { + $font = $this->iFontArray[$i]; + $aImg->SetFont($font[0],$font[1],$font[2]); + } + else { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + } + $aImg->StrokeText($aX[$i],$aY,$tmp[$i]); + } + } + } + } +} + +//=================================================== +// CLASS HeaderProperty +// Description: Data encapsulating class to hold property +// for each type of the scale headers +//=================================================== +class HeaderProperty { + public $grid; + public $iShowLabels=true,$iShowGrid=true; + public $iTitleVertMargin=3,$iFFamily=FF_FONT0,$iFStyle=FS_NORMAL,$iFSize=8; + public $iStyle=0; + public $iFrameColor="black",$iFrameWeight=1; + public $iBackgroundColor="white"; + public $iWeekendBackgroundColor="lightgray",$iSundayTextColor="red"; // these are only used with day scale + public $iTextColor="black"; + public $iLabelFormStr="%d"; + public $iIntervall = 1; + + //--------------- + // CONSTRUCTOR + function __construct() { + $this->grid = new LineProperty(); + } + + //--------------- + // PUBLIC METHODS + function Show($aShow=true) { + $this->iShowLabels = $aShow; + } + + function SetIntervall($aInt) { + $this->iIntervall = $aInt; + } + + function SetInterval($aInt) { + $this->iIntervall = $aInt; + } + + function GetIntervall() { + return $this->iIntervall ; + } + + function SetFont($aFFamily,$aFStyle=FS_NORMAL,$aFSize=10) { + $this->iFFamily = $aFFamily; + $this->iFStyle = $aFStyle; + $this->iFSize = $aFSize; + } + + function SetFontColor($aColor) { + $this->iTextColor = $aColor; + } + + function GetFontHeight($aImg) { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + return $aImg->GetFontHeight(); + } + + function GetFontWidth($aImg) { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + return $aImg->GetFontWidth(); + } + + function GetStrWidth($aImg,$aStr) { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + return $aImg->GetTextWidth($aStr); + } + + function SetStyle($aStyle) { + $this->iStyle = $aStyle; + } + + function SetBackgroundColor($aColor) { + $this->iBackgroundColor=$aColor; + } + + function SetFrameWeight($aWeight) { + $this->iFrameWeight=$aWeight; + } + + function SetFrameColor($aColor) { + $this->iFrameColor=$aColor; + } + + // Only used by day scale + function SetWeekendColor($aColor) { + $this->iWeekendBackgroundColor=$aColor; + } + + // Only used by day scale + function SetSundayFontColor($aColor) { + $this->iSundayTextColor=$aColor; + } + + function SetTitleVertMargin($aMargin) { + $this->iTitleVertMargin=$aMargin; + } + + function SetLabelFormatString($aStr) { + $this->iLabelFormStr=$aStr; + } + + function SetFormatString($aStr) { + $this->SetLabelFormatString($aStr); + } + + +} + +//=================================================== +// CLASS GanttScale +// Description: Responsible for calculating and showing +// the scale in a gantt chart. This includes providing methods for +// converting dates to position in the chart as well as stroking the +// date headers (days, week, etc). +//=================================================== +class GanttScale { + public $minute,$hour,$day,$week,$month,$year; + public $divider,$dividerh,$tableTitle; + public $iStartDate=-1,$iEndDate=-1; + // Number of gantt bar position (n.b not necessariliy the same as the number of bars) + // we could have on bar in position 1, and one bar in position 5 then there are two + // bars but the number of bar positions is 5 + public $actinfo; + public $iTopPlotMargin=10,$iBottomPlotMargin=15; + public $iVertLines=-1; + public $iVertHeaderSize=-1; + // The width of the labels (defaults to the widest of all labels) + private $iLabelWidth; + // Out image to stroke the scale to + private $iImg; + private $iTableHeaderBackgroundColor="white",$iTableHeaderFrameColor="black"; + private $iTableHeaderFrameWeight=1; + private $iAvailableHeight=-1,$iVertSpacing=-1; + private $iDateLocale; + private $iVertLayout=GANTT_EVEN; + private $iUsePlotWeekendBackground=true; + private $iWeekStart = 1; // Default to have weekends start on Monday + + //--------------- + // CONSTRUCTOR + function __construct($aImg) { + $this->iImg = $aImg; + $this->iDateLocale = new DateLocale(); + + $this->minute = new HeaderProperty(); + $this->minute->SetIntervall(15); + $this->minute->SetLabelFormatString('i'); + $this->minute->SetFont(FF_FONT0); + $this->minute->grid->SetColor("gray"); + + $this->hour = new HeaderProperty(); + $this->hour->SetFont(FF_FONT0); + $this->hour->SetIntervall(6); + $this->hour->SetStyle(HOURSTYLE_HM24); + $this->hour->SetLabelFormatString('H:i'); + $this->hour->grid->SetColor("gray"); + + $this->day = new HeaderProperty(); + $this->day->grid->SetColor("gray"); + $this->day->SetLabelFormatString('l'); + + $this->week = new HeaderProperty(); + $this->week->SetLabelFormatString("w%d"); + $this->week->SetFont(FF_FONT1); + + $this->month = new HeaderProperty(); + $this->month->SetFont(FF_FONT1,FS_BOLD); + + $this->year = new HeaderProperty(); + $this->year->SetFont(FF_FONT1,FS_BOLD); + + $this->divider=new LineProperty(); + $this->dividerh=new LineProperty(); + $this->dividerh->SetWeight(2); + $this->divider->SetWeight(6); + $this->divider->SetColor('gray'); + $this->divider->SetStyle('fancy'); + + $this->tableTitle=new TextProperty(); + $this->tableTitle->Show(false); + $this->actinfo = new GanttActivityInfo(); + } + + //--------------- + // PUBLIC METHODS + // Specify what headers should be visible + function ShowHeaders($aFlg) { + $this->day->Show($aFlg & GANTT_HDAY); + $this->week->Show($aFlg & GANTT_HWEEK); + $this->month->Show($aFlg & GANTT_HMONTH); + $this->year->Show($aFlg & GANTT_HYEAR); + $this->hour->Show($aFlg & GANTT_HHOUR); + $this->minute->Show($aFlg & GANTT_HMIN); + + // Make some default settings of gridlines whihc makes sense + if( $aFlg & GANTT_HWEEK ) { + $this->month->grid->Show(false); + $this->year->grid->Show(false); + } + if( $aFlg & GANTT_HHOUR ) { + $this->day->grid->SetColor("black"); + } + } + + // Should the weekend background stretch all the way down in the plotarea + function UseWeekendBackground($aShow) { + $this->iUsePlotWeekendBackground = $aShow; + } + + // Have a range been specified? + function IsRangeSet() { + return $this->iStartDate!=-1 && $this->iEndDate!=-1; + } + + // Should the layout be from top or even? + function SetVertLayout($aLayout) { + $this->iVertLayout = $aLayout; + } + + // Which locale should be used? + function SetDateLocale($aLocale) { + $this->iDateLocale->Set($aLocale); + } + + // Number of days we are showing + function GetNumberOfDays() { + return round(($this->iEndDate-$this->iStartDate)/SECPERDAY); + } + + // The width of the actual plot area + function GetPlotWidth() { + $img=$this->iImg; + return $img->width - $img->left_margin - $img->right_margin; + } + + // Specify the width of the titles(labels) for the activities + // (This is by default set to the minimum width enought for the + // widest title) + function SetLabelWidth($aLabelWidth) { + $this->iLabelWidth=$aLabelWidth; + } + + // Which day should the week start? + // 0==Sun, 1==Monday, 2==Tuesday etc + function SetWeekStart($aStartDay) { + $this->iWeekStart = $aStartDay % 7; + + //Recalculate the startday since this will change the week start + $this->SetRange($this->iStartDate,$this->iEndDate); + } + + // Do we show min scale? + function IsDisplayMinute() { + return $this->minute->iShowLabels; + } + + // Do we show day scale? + function IsDisplayHour() { + return $this->hour->iShowLabels; + } + + + // Do we show day scale? + function IsDisplayDay() { + return $this->day->iShowLabels; + } + + // Do we show week scale? + function IsDisplayWeek() { + return $this->week->iShowLabels; + } + + // Do we show month scale? + function IsDisplayMonth() { + return $this->month->iShowLabels; + } + + // Do we show year scale? + function IsDisplayYear() { + return $this->year->iShowLabels; + } + + // Specify spacing (in percent of bar height) between activity bars + function SetVertSpacing($aSpacing) { + $this->iVertSpacing = $aSpacing; + } + + // Specify scale min and max date either as timestamp or as date strings + // Always round to the nearest week boundary + function SetRange($aMin,$aMax) { + $this->iStartDate = $this->NormalizeDate($aMin); + $this->iEndDate = $this->NormalizeDate($aMax); + } + + + // Adjust the start and end date so they fit to beginning/ending + // of the week taking the specified week start day into account. + function AdjustStartEndDay() { + + if( !($this->IsDisplayYear() ||$this->IsDisplayMonth() || $this->IsDisplayWeek()) ) { + // Don't adjust + return; + } + + // Get day in week for start and ending date (Sun==0) + $ds=date("w",$this->iStartDate); + $de=date("w",$this->iEndDate); + + // We want to start on iWeekStart day. But first we subtract a week + // if the startdate is "behind" the day the week start at. + // This way we ensure that the given start date is always included + // in the range. If we don't do this the nearest correct weekday in the week + // to start at might be later than the start date. + if( $ds < $this->iWeekStart ) + $d = strtotime('-7 day',$this->iStartDate); + else + $d = $this->iStartDate; + $adjdate = strtotime(($this->iWeekStart-$ds).' day',$d /*$this->iStartDate*/ ); + $this->iStartDate = $adjdate; + + // We want to end on the last day of the week + $preferredEndDay = ($this->iWeekStart+6)%7; + if( $preferredEndDay != $de ) { + // Solve equivalence eq: $de + x ~ $preferredDay (mod 7) + $adj = (7+($preferredEndDay - $de)) % 7; + $adjdate = strtotime("+$adj day",$this->iEndDate); + $this->iEndDate = $adjdate; + } + } + + // Specify background for the table title area (upper left corner of the table) + function SetTableTitleBackground($aColor) { + $this->iTableHeaderBackgroundColor = $aColor; + } + + /////////////////////////////////////// + // PRIVATE Methods + + // Determine the height of all the scale headers combined + function GetHeaderHeight() { + $img=$this->iImg; + $height=1; + if( $this->minute->iShowLabels ) { + $height += $this->minute->GetFontHeight($img); + $height += $this->minute->iTitleVertMargin; + } + if( $this->hour->iShowLabels ) { + $height += $this->hour->GetFontHeight($img); + $height += $this->hour->iTitleVertMargin; + } + if( $this->day->iShowLabels ) { + $height += $this->day->GetFontHeight($img); + $height += $this->day->iTitleVertMargin; + } + if( $this->week->iShowLabels ) { + $height += $this->week->GetFontHeight($img); + $height += $this->week->iTitleVertMargin; + } + if( $this->month->iShowLabels ) { + $height += $this->month->GetFontHeight($img); + $height += $this->month->iTitleVertMargin; + } + if( $this->year->iShowLabels ) { + $height += $this->year->GetFontHeight($img); + $height += $this->year->iTitleVertMargin; + } + return $height; + } + + // Get width (in pixels) for a single day + function GetDayWidth() { + return ($this->GetPlotWidth()-$this->iLabelWidth+1)/$this->GetNumberOfDays(); + } + + // Get width (in pixels) for a single hour + function GetHourWidth() { + return $this->GetDayWidth() / 24 ; + } + + function GetMinuteWidth() { + return $this->GetHourWidth() / 60 ; + } + + // Nuber of days in a year + function GetNumDaysInYear($aYear) { + if( $this->IsLeap($aYear) ) + return 366; + else + return 365; + } + + // Get week number + function GetWeekNbr($aDate,$aSunStart=true) { + // We can't use the internal strftime() since it gets the weeknumber + // wrong since it doesn't follow ISO on all systems since this is + // system linrary dependent. + // Even worse is that this works differently if we are on a Windows + // or UNIX box (it even differs between UNIX boxes how strftime() + // is natively implemented) + // + // Credit to Nicolas Hoizey for this elegant + // version of Week Nbr calculation. + + $day = $this->NormalizeDate($aDate); + if( $aSunStart ) + $day += 60*60*24; + + /*------------------------------------------------------------------------- + According to ISO-8601 : + "Week 01 of a year is per definition the first week that has the Thursday in this year, + which is equivalent to the week that contains the fourth day of January. + In other words, the first week of a new year is the week that has the majority of its + days in the new year." + + Be carefull, with PHP, -3 % 7 = -3, instead of 4 !!! + + day of year = date("z", $day) + 1 + offset to thursday = 3 - (date("w", $day) + 6) % 7 + first thursday of year = 1 + (11 - date("w", mktime(0, 0, 0, 1, 1, date("Y", $day)))) % 7 + week number = (thursday's day of year - first thursday's day of year) / 7 + 1 + ---------------------------------------------------------------------------*/ + + $thursday = $day + 60 * 60 * 24 * (3 - (date("w", $day) + 6) % 7); // take week's thursday + $week = 1 + (date("z", $thursday) - (11 - date("w", mktime(0, 0, 0, 1, 1, date("Y", $thursday)))) % 7) / 7; + + return $week; + } + + // Is year a leap year? + function IsLeap($aYear) { + // Is the year a leap year? + //$year = 0+date("Y",$aDate); + if( $aYear % 4 == 0) + if( !($aYear % 100 == 0) || ($aYear % 400 == 0) ) + return true; + return false; + } + + // Get current year + function GetYear($aDate) { + return 0+Date("Y",$aDate); + } + + // Return number of days in a year + function GetNumDaysInMonth($aMonth,$aYear) { + $days=array(31,28,31,30,31,30,31,31,30,31,30,31); + $daysl=array(31,29,31,30,31,30,31,31,30,31,30,31); + if( $this->IsLeap($aYear)) + return $daysl[$aMonth]; + else + return $days[$aMonth]; + } + + // Get day in month + function GetMonthDayNbr($aDate) { + return 0+date("d",$aDate); + } + + // Get day in year + function GetYearDayNbr($aDate) { + return 0+date("z",$aDate); + } + + // Get month number + function GetMonthNbr($aDate) { + return 0+date("m",$aDate); + } + + // Translate a date to screen coordinates (horizontal scale) + function TranslateDate($aDate) { + // + // In order to handle the problem with Daylight savings time + // the scale written with equal number of seconds per day beginning + // with the start date. This means that we "cement" the state of + // DST as it is in the start date. If later the scale includes the + // switchover date (depends on the locale) we need to adjust back + // if the date we try to translate has a different DST status since + // we would otherwise be off by one hour. + $aDate = $this->NormalizeDate($aDate); + $tmp = localtime($aDate); + $cloc = $tmp[8]; + $tmp = localtime($this->iStartDate); + $sloc = $tmp[8]; + $offset = 0; + if( $sloc != $cloc) { + if( $sloc ) + $offset = 3600; + else + $offset = -3600; + } + $img=$this->iImg; + return ($aDate-$this->iStartDate-$offset)/SECPERDAY*$this->GetDayWidth()+$img->left_margin+$this->iLabelWidth;; + } + + // Get screen coordinatesz for the vertical position for a bar + function TranslateVertPos($aPos,$atTop=false) { + $img=$this->iImg; + if( $aPos > $this->iVertLines ) + JpGraphError::RaiseL(6015,$aPos); + // 'Illegal vertical position %d' + if( $this->iVertLayout == GANTT_EVEN ) { + // Position the top bar at 1 vert spacing from the scale + $pos = round($img->top_margin + $this->iVertHeaderSize + ($aPos+1)*$this->iVertSpacing); + } + else { + // position the top bar at 1/2 a vert spacing from the scale + $pos = round($img->top_margin + $this->iVertHeaderSize + $this->iTopPlotMargin + ($aPos+1)*$this->iVertSpacing); + } + + if( $atTop ) + $pos -= $this->iVertSpacing; + + return $pos; + } + + // What is the vertical spacing? + function GetVertSpacing() { + return $this->iVertSpacing; + } + + // Convert a date to timestamp + function NormalizeDate($aDate) { + if( $aDate === false ) return false; + if( is_string($aDate) ) { + $t = strtotime($aDate); + if( $t === FALSE || $t === -1 ) { + JpGraphError::RaiseL(6016,$aDate); + //("Date string ($aDate) specified for Gantt activity can not be interpretated. Please make sure it is a valid time string, e.g. 2005-04-23 13:30"); + } + return $t; + } + elseif( is_int($aDate) || is_float($aDate) ) + return $aDate; + else + JpGraphError::RaiseL(6017,$aDate); + //Unknown date format in GanttScale ($aDate)."); + } + + + // Convert a time string to minutes + + function TimeToMinutes($aTimeString) { + // Split in hours and minutes + $pos=strpos($aTimeString,':'); + $minint=60; + if( $pos === false ) { + $hourint = $aTimeString; + $minint = 0; + } + else { + $hourint = floor(substr($aTimeString,0,$pos)); + $minint = floor(substr($aTimeString,$pos+1)); + } + $minint += 60 * $hourint; + return $minint; + } + + // Stroke the day scale (including gridlines) + function StrokeMinutes($aYCoord,$getHeight=false) { + $img=$this->iImg; + $xt=$img->left_margin+$this->iLabelWidth; + $yt=$aYCoord+$img->top_margin; + if( $this->minute->iShowLabels ) { + $img->SetFont($this->minute->iFFamily,$this->minute->iFStyle,$this->minute->iFSize); + $yb = $yt + $img->GetFontHeight() + + $this->minute->iTitleVertMargin + $this->minute->iFrameWeight; + if( $getHeight ) { + return $yb - $img->top_margin; + } + $xb = $img->width-$img->right_margin+1; + $img->SetColor($this->minute->iBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + + $x = $xt; + $img->SetTextAlign("center"); + $day = date('w',$this->iStartDate); + $minint = $this->minute->GetIntervall() ; + + if( 60 % $minint !== 0 ) { + JpGraphError::RaiseL(6018,$minint); + //'Intervall for minutes must divide the hour evenly, e.g. 1,5,10,12,15,20,30 etc You have specified an intervall of '.$minint.' minutes.'); + } + + + $n = 60 / $minint; + $datestamp = $this->iStartDate; + $width = $this->GetHourWidth() / $n ; + if( $width < 8 ) { + // TO small width to draw minute scale + JpGraphError::RaiseL(6019,$width); + //('The available width ('.$width.') for minutes are to small for this scale to be displayed. Please use auto-sizing or increase the width of the graph.'); + } + + $nh = ceil(24*60 / $this->TimeToMinutes($this->hour->GetIntervall()) ); + $nd = $this->GetNumberOfDays(); + // Convert to intervall to seconds + $minint *= 60; + for($j=0; $j < $nd; ++$j, $day += 1, $day %= 7) { + for( $k=0; $k < $nh; ++$k ) { + for($i=0; $i < $n ;++$i, $x+=$width, $datestamp += $minint ) { + if( $day==6 || $day==0 ) { + + $img->PushColor($this->day->iWeekendBackgroundColor); + if( $this->iUsePlotWeekendBackground ) + $img->FilledRectangle($x,$yt+$this->day->iFrameWeight,$x+$width,$img->height-$img->bottom_margin); + else + $img->FilledRectangle($x,$yt+$this->day->iFrameWeight,$x+$width,$yb-$this->day->iFrameWeight); + $img->PopColor(); + + } + + if( $day==0 ) + $img->SetColor($this->day->iSundayTextColor); + else + $img->SetColor($this->day->iTextColor); + + switch( $this->minute->iStyle ) { + case MINUTESTYLE_CUSTOM: + $txt = date($this->minute->iLabelFormStr,$datestamp); + break; + case MINUTESTYLE_MM: + default: + // 15 + $txt = date('i',$datestamp); + break; + } + $img->StrokeText(round($x+$width/2),round($yb-$this->minute->iTitleVertMargin),$txt); + + // Fix a rounding problem the wrong way .. + // If we also have hour scale then don't draw the firsta or last + // gridline since that will be overwritten by the hour scale gridline if such exists. + // However, due to the propagation of rounding of the 'x+=width' term in the loop + // this might sometimes be one pixel of so we fix this by not drawing it. + // The proper way to fix it would be to re-calculate the scale for each step and + // not using the additive term. + if( !(($i == $n || $i==0) && $this->hour->iShowLabels && $this->hour->grid->iShow) ) { + $img->SetColor($this->minute->grid->iColor); + $img->SetLineWeight($this->minute->grid->iWeight); + $img->Line($x,$yt,$x,$yb); + $this->minute->grid->Stroke($img,$x,$yb,$x,$img->height-$img->bottom_margin); + } + } + } + } + $img->SetColor($this->minute->iFrameColor); + $img->SetLineWeight($this->minute->iFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + return $yb - $img->top_margin; + } + return $aYCoord; + } + + // Stroke the day scale (including gridlines) + function StrokeHours($aYCoord,$getHeight=false) { + $img=$this->iImg; + $xt=$img->left_margin+$this->iLabelWidth; + $yt=$aYCoord+$img->top_margin; + if( $this->hour->iShowLabels ) { + $img->SetFont($this->hour->iFFamily,$this->hour->iFStyle,$this->hour->iFSize); + $yb = $yt + $img->GetFontHeight() + + $this->hour->iTitleVertMargin + $this->hour->iFrameWeight; + if( $getHeight ) { + return $yb - $img->top_margin; + } + $xb = $img->width-$img->right_margin+1; + $img->SetColor($this->hour->iBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + + $x = $xt; + $img->SetTextAlign("center"); + $tmp = $this->hour->GetIntervall() ; + $minint = $this->TimeToMinutes($tmp); + if( 1440 % $minint !== 0 ) { + JpGraphError::RaiseL(6020,$tmp); + //('Intervall for hours must divide the day evenly, e.g. 0:30, 1:00, 1:30, 4:00 etc. You have specified an intervall of '.$tmp); + } + + $n = ceil(24*60 / $minint ); + $datestamp = $this->iStartDate; + $day = date('w',$this->iStartDate); + $doback = !$this->minute->iShowLabels; + $width = $this->GetDayWidth() / $n ; + for($j=0; $j < $this->GetNumberOfDays(); ++$j, $day += 1,$day %= 7) { + for($i=0; $i < $n ;++$i, $x+=$width) { + if( $day==6 || $day==0 ) { + + $img->PushColor($this->day->iWeekendBackgroundColor); + if( $this->iUsePlotWeekendBackground && $doback ) + $img->FilledRectangle($x,$yt+$this->day->iFrameWeight,$x+$width,$img->height-$img->bottom_margin); + else + $img->FilledRectangle($x,$yt+$this->day->iFrameWeight,$x+$width,$yb-$this->day->iFrameWeight); + $img->PopColor(); + + } + + if( $day==0 ) + $img->SetColor($this->day->iSundayTextColor); + else + $img->SetColor($this->day->iTextColor); + + switch( $this->hour->iStyle ) { + case HOURSTYLE_HMAMPM: + // 1:35pm + $txt = date('g:ia',$datestamp); + break; + case HOURSTYLE_H24: + // 13 + $txt = date('H',$datestamp); + break; + case HOURSTYLE_HAMPM: + $txt = date('ga',$datestamp); + break; + case HOURSTYLE_CUSTOM: + $txt = date($this->hour->iLabelFormStr,$datestamp); + break; + case HOURSTYLE_HM24: + default: + $txt = date('H:i',$datestamp); + break; + } + $img->StrokeText(round($x+$width/2),round($yb-$this->hour->iTitleVertMargin),$txt); + $img->SetColor($this->hour->grid->iColor); + $img->SetLineWeight($this->hour->grid->iWeight); + $img->Line($x,$yt,$x,$yb); + $this->hour->grid->Stroke($img,$x,$yb,$x,$img->height-$img->bottom_margin); + //$datestamp += $minint*60 + $datestamp = mktime(date('H',$datestamp),date('i',$datestamp)+$minint,0, + date("m",$datestamp),date("d",$datestamp)+1,date("Y",$datestamp)); + + } + } + $img->SetColor($this->hour->iFrameColor); + $img->SetLineWeight($this->hour->iFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + return $yb - $img->top_margin; + } + return $aYCoord; + } + + + // Stroke the day scale (including gridlines) + function StrokeDays($aYCoord,$getHeight=false) { + $img=$this->iImg; + $daywidth=$this->GetDayWidth(); + $xt=$img->left_margin+$this->iLabelWidth; + $yt=$aYCoord+$img->top_margin; + if( $this->day->iShowLabels ) { + $img->SetFont($this->day->iFFamily,$this->day->iFStyle,$this->day->iFSize); + $yb=$yt + $img->GetFontHeight() + $this->day->iTitleVertMargin + $this->day->iFrameWeight; + if( $getHeight ) { + return $yb - $img->top_margin; + } + $xb=$img->width-$img->right_margin+1; + $img->SetColor($this->day->iBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + + $x = $xt; + $img->SetTextAlign("center"); + $day = date('w',$this->iStartDate); + $datestamp = $this->iStartDate; + + $doback = !($this->hour->iShowLabels || $this->minute->iShowLabels); + + setlocale(LC_TIME,$this->iDateLocale->iLocale); + + for($i=0; $i < $this->GetNumberOfDays(); ++$i, $x+=$daywidth, $day += 1,$day %= 7) { + if( $day==6 || $day==0 ) { + $img->SetColor($this->day->iWeekendBackgroundColor); + if( $this->iUsePlotWeekendBackground && $doback) + $img->FilledRectangle($x,$yt+$this->day->iFrameWeight, + $x+$daywidth,$img->height-$img->bottom_margin); + else + $img->FilledRectangle($x,$yt+$this->day->iFrameWeight, + $x+$daywidth,$yb-$this->day->iFrameWeight); + } + + $mn = date('m',$datestamp); + if( $mn[0]=='0' ) + $mn = $mn[1]; + + switch( $this->day->iStyle ) { + case DAYSTYLE_LONG: + // "Monday" + $txt = date('l',$datestamp); + break; + case DAYSTYLE_SHORT: + // "Mon" + $txt = date('D',$datestamp); + break; + case DAYSTYLE_SHORTDAYDATE1: + // "Mon 23/6" + $txt = date('D d/'.$mn,$datestamp); + break; + case DAYSTYLE_SHORTDAYDATE2: + // "Mon 23 Jun" + $txt = date('D d M',$datestamp); + break; + case DAYSTYLE_SHORTDAYDATE3: + // "Mon 23 Jun 2003" + $txt = date('D d M Y',$datestamp); + break; + case DAYSTYLE_LONGDAYDATE1: + // "Monday 23 Jun" + $txt = date('l d M',$datestamp); + break; + case DAYSTYLE_LONGDAYDATE2: + // "Monday 23 Jun 2003" + $txt = date('l d M Y',$datestamp); + break; + case DAYSTYLE_SHORTDATE1: + // "23/6" + $txt = date('d/'.$mn,$datestamp); + break; + case DAYSTYLE_SHORTDATE2: + // "23 Jun" + $txt = date('d M',$datestamp); + break; + case DAYSTYLE_SHORTDATE3: + // "Mon 23" + $txt = date('D d',$datestamp); + break; + case DAYSTYLE_SHORTDATE4: + // "23" + $txt = date('d',$datestamp); + break; + case DAYSTYLE_CUSTOM: + // Custom format + $txt = date($this->day->iLabelFormStr,$datestamp); + break; + case DAYSTYLE_ONELETTER: + default: + // "M" + $txt = date('l',$datestamp); + $txt = strtoupper($txt[0]); + break; + } + + if( $day==0 ) + $img->SetColor($this->day->iSundayTextColor); + else + $img->SetColor($this->day->iTextColor); + $img->StrokeText(round($x+$daywidth/2+1), + round($yb-$this->day->iTitleVertMargin),$txt); + $img->SetColor($this->day->grid->iColor); + $img->SetLineWeight($this->day->grid->iWeight); + $img->Line($x,$yt,$x,$yb); + $this->day->grid->Stroke($img,$x,$yb,$x,$img->height-$img->bottom_margin); + $datestamp = mktime(0,0,0,date("m",$datestamp),date("d",$datestamp)+1,date("Y",$datestamp)); + //$datestamp += SECPERDAY; + + } + $img->SetColor($this->day->iFrameColor); + $img->SetLineWeight($this->day->iFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + return $yb - $img->top_margin; + } + return $aYCoord; + } + + // Stroke week header and grid + function StrokeWeeks($aYCoord,$getHeight=false) { + if( $this->week->iShowLabels ) { + $img=$this->iImg; + $yt=$aYCoord+$img->top_margin; + $img->SetFont($this->week->iFFamily,$this->week->iFStyle,$this->week->iFSize); + $yb=$yt + $img->GetFontHeight() + $this->week->iTitleVertMargin + $this->week->iFrameWeight; + + if( $getHeight ) { + return $yb - $img->top_margin; + } + + $xt=$img->left_margin+$this->iLabelWidth; + $weekwidth=$this->GetDayWidth()*7; + $wdays=$this->iDateLocale->GetDayAbb(); + $xb=$img->width-$img->right_margin+1; + $week = $this->iStartDate; + $weeknbr=$this->GetWeekNbr($week); + $img->SetColor($this->week->iBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + $img->SetColor($this->week->grid->iColor); + $x = $xt; + if( $this->week->iStyle==WEEKSTYLE_WNBR ) { + $img->SetTextAlign("center"); + $txtOffset = $weekwidth/2+1; + } + elseif( $this->week->iStyle==WEEKSTYLE_FIRSTDAY || + $this->week->iStyle==WEEKSTYLE_FIRSTDAY2 || + $this->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR || + $this->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR ) { + $img->SetTextAlign("left"); + $txtOffset = 3; + } + else { + JpGraphError::RaiseL(6021); + //("Unknown formatting style for week."); + } + + for($i=0; $i<$this->GetNumberOfDays()/7; ++$i, $x+=$weekwidth) { + $img->PushColor($this->week->iTextColor); + + if( $this->week->iStyle==WEEKSTYLE_WNBR ) + $txt = sprintf($this->week->iLabelFormStr,$weeknbr); + elseif( $this->week->iStyle==WEEKSTYLE_FIRSTDAY || + $this->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR ) + $txt = date("j/n",$week); + elseif( $this->week->iStyle==WEEKSTYLE_FIRSTDAY2 || + $this->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR ) { + $monthnbr = date("n",$week)-1; + $shortmonth = $this->iDateLocale->GetShortMonthName($monthnbr); + $txt = Date("j",$week)." ".$shortmonth; + } + + if( $this->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR || + $this->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR ) { + $w = sprintf($this->week->iLabelFormStr,$weeknbr); + $txt .= ' '.$w; + } + + $img->StrokeText(round($x+$txtOffset), + round($yb-$this->week->iTitleVertMargin),$txt); + + $week = strtotime('+7 day',$week); + $weeknbr = $this->GetWeekNbr($week); + $img->PopColor(); + $img->SetLineWeight($this->week->grid->iWeight); + $img->Line($x,$yt,$x,$yb); + $this->week->grid->Stroke($img,$x,$yb,$x,$img->height-$img->bottom_margin); + } + $img->SetColor($this->week->iFrameColor); + $img->SetLineWeight($this->week->iFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + return $yb-$img->top_margin; + } + return $aYCoord; + } + + // Format the mont scale header string + function GetMonthLabel($aMonthNbr,$year) { + $sn = $this->iDateLocale->GetShortMonthName($aMonthNbr); + $ln = $this->iDateLocale->GetLongMonthName($aMonthNbr); + switch($this->month->iStyle) { + case MONTHSTYLE_SHORTNAME: + $m=$sn; + break; + case MONTHSTYLE_LONGNAME: + $m=$ln; + break; + case MONTHSTYLE_SHORTNAMEYEAR2: + $m=$sn." '".substr("".$year,2); + break; + case MONTHSTYLE_SHORTNAMEYEAR4: + $m=$sn." ".$year; + break; + case MONTHSTYLE_LONGNAMEYEAR2: + $m=$ln." '".substr("".$year,2); + break; + case MONTHSTYLE_LONGNAMEYEAR4: + $m=$ln." ".$year; + break; + case MONTHSTYLE_FIRSTLETTER: + $m=$sn[0]; + break; + } + return $m; + } + + // Stroke month scale and gridlines + function StrokeMonths($aYCoord,$getHeight=false) { + if( $this->month->iShowLabels ) { + $img=$this->iImg; + $img->SetFont($this->month->iFFamily,$this->month->iFStyle,$this->month->iFSize); + $yt=$aYCoord+$img->top_margin; + $yb=$yt + $img->GetFontHeight() + $this->month->iTitleVertMargin + $this->month->iFrameWeight; + if( $getHeight ) { + return $yb - $img->top_margin; + } + $monthnbr = $this->GetMonthNbr($this->iStartDate)-1; + $xt=$img->left_margin+$this->iLabelWidth; + $xb=$img->width-$img->right_margin+1; + + $img->SetColor($this->month->iBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + + $img->SetLineWeight($this->month->grid->iWeight); + $img->SetColor($this->month->iTextColor); + $year = 0+date("Y",$this->iStartDate); + $img->SetTextAlign("center"); + if( $this->GetMonthNbr($this->iStartDate) == $this->GetMonthNbr($this->iEndDate) + && $this->GetYear($this->iStartDate)==$this->GetYear($this->iEndDate) ) { + $monthwidth=$this->GetDayWidth()*($this->GetMonthDayNbr($this->iEndDate) - $this->GetMonthDayNbr($this->iStartDate) + 1); + } + else { + $monthwidth=$this->GetDayWidth()*($this->GetNumDaysInMonth($monthnbr,$year)-$this->GetMonthDayNbr($this->iStartDate)+1); + } + // Is it enough space to stroke the first month? + $monthName = $this->GetMonthLabel($monthnbr,$year); + if( $monthwidth >= 1.2*$img->GetTextWidth($monthName) ) { + $img->SetColor($this->month->iTextColor); + $img->StrokeText(round($xt+$monthwidth/2+1), + round($yb-$this->month->iTitleVertMargin), + $monthName); + } + $x = $xt + $monthwidth; + while( $x < $xb ) { + $img->SetColor($this->month->grid->iColor); + $img->Line($x,$yt,$x,$yb); + $this->month->grid->Stroke($img,$x,$yb,$x,$img->height-$img->bottom_margin); + $monthnbr++; + if( $monthnbr==12 ) { + $monthnbr=0; + $year++; + } + $monthName = $this->GetMonthLabel($monthnbr,$year); + $monthwidth=$this->GetDayWidth()*$this->GetNumDaysInMonth($monthnbr,$year); + if( $x + $monthwidth < $xb ) + $w = $monthwidth; + else + $w = $xb-$x; + if( $w >= 1.2*$img->GetTextWidth($monthName) ) { + $img->SetColor($this->month->iTextColor); + $img->StrokeText(round($x+$w/2+1), + round($yb-$this->month->iTitleVertMargin),$monthName); + } + $x += $monthwidth; + } + $img->SetColor($this->month->iFrameColor); + $img->SetLineWeight($this->month->iFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + return $yb-$img->top_margin; + } + return $aYCoord; + } + + // Stroke year scale and gridlines + function StrokeYears($aYCoord,$getHeight=false) { + if( $this->year->iShowLabels ) { + $img=$this->iImg; + $yt=$aYCoord+$img->top_margin; + $img->SetFont($this->year->iFFamily,$this->year->iFStyle,$this->year->iFSize); + $yb=$yt + $img->GetFontHeight() + $this->year->iTitleVertMargin + $this->year->iFrameWeight; + + if( $getHeight ) { + return $yb - $img->top_margin; + } + + $xb=$img->width-$img->right_margin+1; + $xt=$img->left_margin+$this->iLabelWidth; + $year = $this->GetYear($this->iStartDate); + $img->SetColor($this->year->iBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + $img->SetLineWeight($this->year->grid->iWeight); + $img->SetTextAlign("center"); + if( $year == $this->GetYear($this->iEndDate) ) + $yearwidth=$this->GetDayWidth()*($this->GetYearDayNbr($this->iEndDate)-$this->GetYearDayNbr($this->iStartDate)+1); + else + $yearwidth=$this->GetDayWidth()*($this->GetNumDaysInYear($year)-$this->GetYearDayNbr($this->iStartDate)+1); + + // The space for a year must be at least 20% bigger than the actual text + // so we allow 10% margin on each side + if( $yearwidth >= 1.20*$img->GetTextWidth("".$year) ) { + $img->SetColor($this->year->iTextColor); + $img->StrokeText(round($xt+$yearwidth/2+1), + round($yb-$this->year->iTitleVertMargin), + $year); + } + $x = $xt + $yearwidth; + while( $x < $xb ) { + $img->SetColor($this->year->grid->iColor); + $img->Line($x,$yt,$x,$yb); + $this->year->grid->Stroke($img,$x,$yb,$x,$img->height-$img->bottom_margin); + $year += 1; + $yearwidth=$this->GetDayWidth()*$this->GetNumDaysInYear($year); + if( $x + $yearwidth < $xb ) + $w = $yearwidth; + else + $w = $xb-$x; + if( $w >= 1.2*$img->GetTextWidth("".$year) ) { + $img->SetColor($this->year->iTextColor); + $img->StrokeText(round($x+$w/2+1), + round($yb-$this->year->iTitleVertMargin), + $year); + } + $x += $yearwidth; + } + $img->SetColor($this->year->iFrameColor); + $img->SetLineWeight($this->year->iFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + return $yb-$img->top_margin; + } + return $aYCoord; + } + + // Stroke table title (upper left corner) + function StrokeTableHeaders($aYBottom) { + $img=$this->iImg; + $xt=$img->left_margin; + $yt=$img->top_margin; + $xb=$xt+$this->iLabelWidth; + $yb=$aYBottom+$img->top_margin; + + if( $this->tableTitle->iShow ) { + $img->SetColor($this->iTableHeaderBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + $this->tableTitle->Align("center","top"); + $this->tableTitle->Stroke($img,$xt+($xb-$xt)/2+1,$yt+2); + $img->SetColor($this->iTableHeaderFrameColor); + $img->SetLineWeight($this->iTableHeaderFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + } + + $this->actinfo->Stroke($img,$xt,$yt,$xb,$yb,$this->tableTitle->iShow); + + + // Draw the horizontal dividing line + $this->dividerh->Stroke($img,$xt,$yb,$img->width-$img->right_margin,$yb); + + // Draw the vertical dividing line + // We do the width "manually" since we want the line only to grow + // to the left + $fancy = $this->divider->iStyle == 'fancy' ; + if( $fancy ) { + $this->divider->iStyle = 'solid'; + } + + $tmp = $this->divider->iWeight; + $this->divider->iWeight=1; + $y = $img->height-$img->bottom_margin; + for($i=0; $i < $tmp; ++$i ) { + $this->divider->Stroke($img,$xb-$i,$yt,$xb-$i,$y); + } + + // Should we draw "fancy" divider + if( $fancy ) { + $img->SetLineWeight(1); + $img->SetColor($this->iTableHeaderFrameColor); + $img->Line($xb,$yt,$xb,$y); + $img->Line($xb-$tmp+1,$yt,$xb-$tmp+1,$y); + $img->SetColor('white'); + $img->Line($xb-$tmp+2,$yt,$xb-$tmp+2,$y); + } + } + + // Main entry point to stroke scale + function Stroke() { + if( !$this->IsRangeSet() ) { + JpGraphError::RaiseL(6022); + //("Gantt scale has not been specified."); + } + $img=$this->iImg; + + // If minutes are displayed then hour interval must be 1 + if( $this->IsDisplayMinute() && $this->hour->GetIntervall() > 1 ) { + JpGraphError::RaiseL(6023); + //('If you display both hour and minutes the hour intervall must be 1 (Otherwise it doesn\' make sense to display minutes).'); + } + + // Stroke all headers. As argument we supply the offset from the + // top which depends on any previous headers + + // First find out the height of each header + $offy=$this->StrokeYears(0,true); + $offm=$this->StrokeMonths($offy,true); + $offw=$this->StrokeWeeks($offm,true); + $offd=$this->StrokeDays($offw,true); + $offh=$this->StrokeHours($offd,true); + $offmin=$this->StrokeMinutes($offh,true); + + + // ... then we can stroke them in the "backwards order to ensure that + // the larger scale gridlines is stroked over the smaller scale gridline + $this->StrokeMinutes($offh); + $this->StrokeHours($offd); + $this->StrokeDays($offw); + $this->StrokeWeeks($offm); + $this->StrokeMonths($offy); + $this->StrokeYears(0); + + // Now when we now the oaverall size of the scale headers + // we can stroke the overall table headers + $this->StrokeTableHeaders($offmin); + + // Now we can calculate the correct scaling factor for each vertical position + $this->iAvailableHeight = $img->height - $img->top_margin - $img->bottom_margin - $offd; + + $this->iVertHeaderSize = $offmin; + if( $this->iVertSpacing == -1 ) + $this->iVertSpacing = $this->iAvailableHeight / $this->iVertLines; + } +} + + +//=================================================== +// CLASS GanttConstraint +// Just a structure to store all the values for a constraint +//=================================================== +class GanttConstraint { + public $iConstrainRow; + public $iConstrainType; + public $iConstrainColor; + public $iConstrainArrowSize; + public $iConstrainArrowType; + + //--------------- + // CONSTRUCTOR + function __construct($aRow,$aType,$aColor,$aArrowSize,$aArrowType){ + $this->iConstrainType = $aType; + $this->iConstrainRow = $aRow; + $this->iConstrainColor=$aColor; + $this->iConstrainArrowSize=$aArrowSize; + $this->iConstrainArrowType=$aArrowType; + } +} + + +//=================================================== +// CLASS GanttPlotObject +// The common signature for a Gantt object +//=================================================== +class GanttPlotObject { + public $title,$caption; + public $csimarea='',$csimtarget='',$csimwintarget='',$csimalt=''; + public $constraints = array(); + public $iCaptionMargin=5; + public $iConstrainPos=array(); + protected $iStart=""; // Start date + public $iVPos=0; // Vertical position + protected $iLabelLeftMargin=2; // Title margin + + function __construct() { + $this->title = new TextProperty(); + $this->title->Align('left','center'); + $this->caption = new TextProperty(); + } + + function GetCSIMArea() { + return $this->csimarea; + } + + function SetCSIMTarget($aTarget,$aAlt='',$aWinTarget='') { + if( !is_string($aTarget) ) { + $tv = substr(var_export($aTarget,true),0,40); + JpGraphError::RaiseL(6024,$tv); + //('CSIM Target must be specified as a string.'."\nStart of target is:\n$tv"); + } + if( !is_string($aAlt) ) { + $tv = substr(var_export($aAlt,true),0,40); + JpGraphError::RaiseL(6025,$tv); + //('CSIM Alt text must be specified as a string.'."\nStart of alt text is:\n$tv"); + } + + $this->csimtarget=$aTarget; + $this->csimwintarget=$aWinTarget; + $this->csimalt=$aAlt; + } + + function SetCSIMAlt($aAlt) { + if( !is_string($aAlt) ) { + $tv = substr(var_export($aAlt,true),0,40); + JpGraphError::RaiseL(6025,$tv); + //('CSIM Alt text must be specified as a string.'."\nStart of alt text is:\n$tv"); + } + $this->csimalt=$aAlt; + } + + function SetConstrain($aRow,$aType,$aColor='black',$aArrowSize=ARROW_S2,$aArrowType=ARROWT_SOLID) { + $this->constraints[] = new GanttConstraint($aRow, $aType, $aColor, $aArrowSize, $aArrowType); + } + + function SetConstrainPos($xt,$yt,$xb,$yb) { + $this->iConstrainPos = array($xt,$yt,$xb,$yb); + } + + function GetMinDate() { + return $this->iStart; + } + + function GetMaxDate() { + return $this->iStart; + } + + function SetCaptionMargin($aMarg) { + $this->iCaptionMargin=$aMarg; + } + + function GetAbsHeight($aImg) { + return 0; + } + + function GetLineNbr() { + return $this->iVPos; + } + + function SetLabelLeftMargin($aOff) { + $this->iLabelLeftMargin=$aOff; + } + + function StrokeActInfo($aImg,$aScale,$aYPos) { + $cols=array(); + $aScale->actinfo->GetColStart($aImg,$cols,true); + $this->title->Stroke($aImg,$cols,$aYPos); + } +} + +//=================================================== +// CLASS Progress +// Holds parameters for the progress indicator +// displyed within a bar +//=================================================== +class Progress { + public $iProgress=-1; + public $iPattern=GANTT_SOLID; + public $iColor="black", $iFillColor='black'; + public $iDensity=98, $iHeight=0.65; + + function Set($aProg) { + if( $aProg < 0.0 || $aProg > 1.0 ) { + JpGraphError::RaiseL(6027); + //("Progress value must in range [0, 1]"); + } + $this->iProgress = $aProg; + } + + function SetPattern($aPattern,$aColor="blue",$aDensity=98) { + $this->iPattern = $aPattern; + $this->iColor = $aColor; + $this->iDensity = $aDensity; + } + + function SetFillColor($aColor) { + $this->iFillColor = $aColor; + } + + function SetHeight($aHeight) { + $this->iHeight = $aHeight; + } +} + +define('GANTT_HGRID1',0); +define('GANTT_HGRID2',1); + +//=================================================== +// CLASS HorizontalGridLine +// Responsible for drawinf horizontal gridlines and filled alternatibg rows +//=================================================== +class HorizontalGridLine { + private $iGraph=NULL; + private $iRowColor1 = '', $iRowColor2 = ''; + private $iShow=false; + private $line=null; + private $iStart=0; // 0=from left margin, 1=just along header + + function __construct() { + $this->line = new LineProperty(); + $this->line->SetColor('gray@0.4'); + $this->line->SetStyle('dashed'); + } + + function Show($aShow=true) { + $this->iShow = $aShow; + } + + function SetRowFillColor($aColor1,$aColor2='') { + $this->iRowColor1 = $aColor1; + $this->iRowColor2 = $aColor2; + } + + function SetStart($aStart) { + $this->iStart = $aStart; + } + + function Stroke($aImg,$aScale) { + + if( ! $this->iShow ) return; + + // Get horizontal width of line + /* + $limst = $aScale->iStartDate; + $limen = $aScale->iEndDate; + $xt = round($aScale->TranslateDate($aScale->iStartDate)); + $xb = round($aScale->TranslateDate($limen)); + */ + + if( $this->iStart === 0 ) { + $xt = $aImg->left_margin-1; + } + else { + $xt = round($aScale->TranslateDate($aScale->iStartDate))+1; + } + + $xb = $aImg->width-$aImg->right_margin; + + $yt = round($aScale->TranslateVertPos(0)); + $yb = round($aScale->TranslateVertPos(1)); + $height = $yb - $yt; + + // Loop around for all lines in the chart + for($i=0; $i < $aScale->iVertLines; ++$i ) { + $yb = $yt - $height; + $this->line->Stroke($aImg,$xt,$yb,$xb,$yb); + if( $this->iRowColor1 !== '' ) { + if( $i % 2 == 0 ) { + $aImg->PushColor($this->iRowColor1); + $aImg->FilledRectangle($xt,$yt,$xb,$yb); + $aImg->PopColor(); + } + elseif( $this->iRowColor2 !== '' ) { + $aImg->PushColor($this->iRowColor2); + $aImg->FilledRectangle($xt,$yt,$xb,$yb); + $aImg->PopColor(); + } + } + $yt = round($aScale->TranslateVertPos($i+1)); + } + $yb = $yt - $height; + $this->line->Stroke($aImg,$xt,$yb,$xb,$yb); + } +} + + +//=================================================== +// CLASS GanttBar +// Responsible for formatting individual gantt bars +//=================================================== +class GanttBar extends GanttPlotObject { + public $progress; + public $leftMark,$rightMark; + private $iEnd; + private $iHeightFactor=0.5; + private $iFillColor="white",$iFrameColor="black"; + private $iShadow=false,$iShadowColor="darkgray",$iShadowWidth=1,$iShadowFrame="black"; + private $iPattern=GANTT_RDIAG,$iPatternColor="blue",$iPatternDensity=95; + private $iBreakStyle=false, $iBreakLineStyle='dotted',$iBreakLineWeight=1; + //--------------- + // CONSTRUCTOR + function __construct($aPos,$aLabel,$aStart,$aEnd,$aCaption="",$aHeightFactor=0.6) { + parent::__construct(); + $this->iStart = $aStart; + // Is the end date given as a date or as number of days added to start date? + if( is_string($aEnd) ) { + // If end date has been specified without a time we will asssume + // end date is at the end of that date + if( strpos($aEnd,':') === false ) { + $this->iEnd = strtotime($aEnd)+SECPERDAY-1; + } + else { + $this->iEnd = $aEnd; + } + } + elseif(is_int($aEnd) || is_float($aEnd) ) { + $this->iEnd = strtotime($aStart)+round($aEnd*SECPERDAY); + } + $this->iVPos = $aPos; + $this->iHeightFactor = $aHeightFactor; + $this->title->Set($aLabel); + $this->caption = new TextProperty($aCaption); + $this->caption->Align("left","center"); + $this->leftMark =new PlotMark(); + $this->leftMark->Hide(); + $this->rightMark=new PlotMark(); + $this->rightMark->Hide(); + $this->progress = new Progress(); + } + + //--------------- + // PUBLIC METHODS + function SetShadow($aShadow=true,$aColor="gray") { + $this->iShadow=$aShadow; + $this->iShadowColor=$aColor; + } + + function SetBreakStyle($aFlg=true,$aLineStyle='dotted',$aLineWeight=1) { + $this->iBreakStyle = $aFlg; + $this->iBreakLineStyle = $aLineStyle; + $this->iBreakLineWeight = $aLineWeight; + } + + function GetMaxDate() { + return $this->iEnd; + } + + function SetHeight($aHeight) { + $this->iHeightFactor = $aHeight; + } + + function SetColor($aColor) { + $this->iFrameColor = $aColor; + } + + function SetFillColor($aColor) { + $this->iFillColor = $aColor; + } + + function GetAbsHeight($aImg) { + if( is_int($this->iHeightFactor) || $this->leftMark->show || $this->rightMark->show ) { + $m=-1; + if( is_int($this->iHeightFactor) ) + $m = $this->iHeightFactor; + if( $this->leftMark->show ) + $m = max($m,$this->leftMark->width*2); + if( $this->rightMark->show ) + $m = max($m,$this->rightMark->width*2); + return $m; + } + else + return -1; + } + + function SetPattern($aPattern,$aColor="blue",$aDensity=95) { + $this->iPattern = $aPattern; + $this->iPatternColor = $aColor; + $this->iPatternDensity = $aDensity; + } + + function Stroke($aImg,$aScale) { + $factory = new RectPatternFactory(); + $prect = $factory->Create($this->iPattern,$this->iPatternColor); + $prect->SetDensity($this->iPatternDensity); + + // If height factor is specified as a float between 0,1 then we take it as meaning + // percetage of the scale width between horizontal line. + // If it is an integer > 1 we take it to mean the absolute height in pixels + if( $this->iHeightFactor > -0.0 && $this->iHeightFactor <= 1.1) + $vs = $aScale->GetVertSpacing()*$this->iHeightFactor; + elseif(is_int($this->iHeightFactor) && $this->iHeightFactor>2 && $this->iHeightFactor < 200 ) + $vs = $this->iHeightFactor; + else { + JpGraphError::RaiseL(6028,$this->iHeightFactor); + // ("Specified height (".$this->iHeightFactor.") for gantt bar is out of range."); + } + + // Clip date to min max dates to show + $st = $aScale->NormalizeDate($this->iStart); + $en = $aScale->NormalizeDate($this->iEnd); + + $limst = max($st,$aScale->iStartDate); + $limen = min($en,$aScale->iEndDate); + + $xt = round($aScale->TranslateDate($limst)); + $xb = round($aScale->TranslateDate($limen)); + $yt = round($aScale->TranslateVertPos($this->iVPos)-$vs-($aScale->GetVertSpacing()/2-$vs/2)); + $yb = round($aScale->TranslateVertPos($this->iVPos)-($aScale->GetVertSpacing()/2-$vs/2)); + $middle = round($yt+($yb-$yt)/2); + $this->StrokeActInfo($aImg,$aScale,$middle); + + // CSIM for title + if( ! empty($this->title->csimtarget) ) { + $colwidth = $this->title->GetColWidth($aImg); + $colstarts=array(); + $aScale->actinfo->GetColStart($aImg,$colstarts,true); + $n = min(count($colwidth),count($this->title->csimtarget)); + for( $i=0; $i < $n; ++$i ) { + $title_xt = $colstarts[$i]; + $title_xb = $title_xt + $colwidth[$i]; + $coords = "$title_xt,$yt,$title_xb,$yt,$title_xb,$yb,$title_xt,$yb"; + + if( ! empty($this->title->csimtarget[$i]) ) { + $this->csimarea .= "title->csimtarget[$i]."\""; + + if( ! empty($this->title->csimwintarget[$i]) ) { + $this->csimarea .= "target=\"".$this->title->csimwintarget[$i]."\" "; + } + + if( ! empty($this->title->csimalt[$i]) ) { + $tmp = $this->title->csimalt[$i]; + $this->csimarea .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimarea .= " />\n"; + } + } + } + + // Check if the bar is totally outside the current scale range + if( $en < $aScale->iStartDate || $st > $aScale->iEndDate ) + return; + + + // Remember the positions for the bar + $this->SetConstrainPos($xt,$yt,$xb,$yb); + + + + $prect->ShowFrame(false); + $prect->SetBackground($this->iFillColor); + if( $this->iBreakStyle ) { + $aImg->SetColor($this->iFrameColor); + $olds = $aImg->SetLineStyle($this->iBreakLineStyle); + $oldw = $aImg->SetLineWeight($this->iBreakLineWeight); + $aImg->StyleLine($xt,$yt,$xb,$yt); + $aImg->StyleLine($xt,$yb,$xb,$yb); + $aImg->SetLineStyle($olds); + $aImg->SetLineWeight($oldw); + } + else { + if( $this->iShadow ) { + $aImg->SetColor($this->iFrameColor); + $aImg->ShadowRectangle($xt,$yt,$xb,$yb,$this->iFillColor,$this->iShadowWidth,$this->iShadowColor); + $prect->SetPos(new Rectangle($xt+1,$yt+1,$xb-$xt-$this->iShadowWidth-2,$yb-$yt-$this->iShadowWidth-2)); + $prect->Stroke($aImg); + } + else { + $prect->SetPos(new Rectangle($xt,$yt,$xb-$xt+1,$yb-$yt+1)); + $prect->Stroke($aImg); + $aImg->SetColor($this->iFrameColor); + $aImg->Rectangle($xt,$yt,$xb,$yb); + } + } + // CSIM for bar + if( ! empty($this->csimtarget) ) { + + $coords = "$xt,$yt,$xb,$yt,$xb,$yb,$xt,$yb"; + $this->csimarea .= "csimtarget."\""; + + if( !empty($this->csimwintarget) ) { + $this->csimarea .= " target=\"".$this->csimwintarget."\" "; + } + + if( $this->csimalt != '' ) { + $tmp = $this->csimalt; + $this->csimarea .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimarea .= " />\n"; + } + + // Draw progress bar inside activity bar + if( $this->progress->iProgress > 0 ) { + + $xtp = $aScale->TranslateDate($st); + $xbp = $aScale->TranslateDate($en); + $len = ($xbp-$xtp)*$this->progress->iProgress; + + $endpos = $xtp+$len; + if( $endpos > $xt ) { + + // Take away the length of the progress that is not visible (before the start date) + $len -= ($xt-$xtp); + + // Is the the progress bar visible after the start date? + if( $xtp < $xt ) + $xtp = $xt; + + // Make sure that the progess bar doesn't extend over the end date + if( $xtp+$len-1 > $xb ) + $len = $xb - $xtp ; + + $prog = $factory->Create($this->progress->iPattern,$this->progress->iColor); + $prog->SetDensity($this->progress->iDensity); + $prog->SetBackground($this->progress->iFillColor); + $barheight = ($yb-$yt+1); + if( $this->iShadow ) + $barheight -= $this->iShadowWidth; + $progressheight = floor($barheight*$this->progress->iHeight); + $marg = ceil(($barheight-$progressheight)/2); + $pos = new Rectangle($xtp,$yt + $marg, $len,$barheight-2*$marg); + $prog->SetPos($pos); + $prog->Stroke($aImg); + } + } + + // We don't plot the end mark if the bar has been capped + if( $limst == $st ) { + $y = $middle; + // We treat the RIGHT and LEFT triangle mark a little bi + // special so that these marks are placed right under the + // bar. + if( $this->leftMark->GetType() == MARK_LEFTTRIANGLE ) { + $y = $yb ; + } + $this->leftMark->Stroke($aImg,$xt,$y); + } + if( $limen == $en ) { + $y = $middle; + // We treat the RIGHT and LEFT triangle mark a little bi + // special so that these marks are placed right under the + // bar. + if( $this->rightMark->GetType() == MARK_RIGHTTRIANGLE ) { + $y = $yb ; + } + $this->rightMark->Stroke($aImg,$xb,$y); + + $margin = $this->iCaptionMargin; + if( $this->rightMark->show ) + $margin += $this->rightMark->GetWidth(); + $this->caption->Stroke($aImg,$xb+$margin,$middle); + } + } +} + +//=================================================== +// CLASS MileStone +// Responsible for formatting individual milestones +//=================================================== +class MileStone extends GanttPlotObject { + public $mark; + + //--------------- + // CONSTRUCTOR + function __construct($aVPos,$aLabel,$aDate,$aCaption="") { + GanttPlotObject::__construct(); + $this->caption->Set($aCaption); + $this->caption->Align("left","center"); + $this->caption->SetFont(FF_FONT1,FS_BOLD); + $this->title->Set($aLabel); + $this->title->SetColor("darkred"); + $this->mark = new PlotMark(); + $this->mark->SetWidth(10); + $this->mark->SetType(MARK_DIAMOND); + $this->mark->SetColor("darkred"); + $this->mark->SetFillColor("darkred"); + $this->iVPos = $aVPos; + $this->iStart = $aDate; + } + + //--------------- + // PUBLIC METHODS + + function GetAbsHeight($aImg) { + return max($this->title->GetHeight($aImg),$this->mark->GetWidth()); + } + + function Stroke($aImg,$aScale) { + // Put the mark in the middle at the middle of the day + $d = $aScale->NormalizeDate($this->iStart)+SECPERDAY/2; + $x = $aScale->TranslateDate($d); + $y = $aScale->TranslateVertPos($this->iVPos)-($aScale->GetVertSpacing()/2); + + $this->StrokeActInfo($aImg,$aScale,$y); + + // CSIM for title + if( ! empty($this->title->csimtarget) ) { + + $yt = round($y - $this->title->GetHeight($aImg)/2); + $yb = round($y + $this->title->GetHeight($aImg)/2); + + $colwidth = $this->title->GetColWidth($aImg); + $colstarts=array(); + $aScale->actinfo->GetColStart($aImg,$colstarts,true); + $n = min(count($colwidth),count($this->title->csimtarget)); + for( $i=0; $i < $n; ++$i ) { + $title_xt = $colstarts[$i]; + $title_xb = $title_xt + $colwidth[$i]; + $coords = "$title_xt,$yt,$title_xb,$yt,$title_xb,$yb,$title_xt,$yb"; + + if( !empty($this->title->csimtarget[$i]) ) { + + $this->csimarea .= "title->csimtarget[$i]."\""; + + if( !empty($this->title->csimwintarget[$i]) ) { + $this->csimarea .= "target=\"".$this->title->csimwintarget[$i]."\""; + } + + if( ! empty($this->title->csimalt[$i]) ) { + $tmp = $this->title->csimalt[$i]; + $this->csimarea .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimarea .= " />\n"; + } + } + } + + if( $d < $aScale->iStartDate || $d > $aScale->iEndDate ) + return; + + // Remember the coordinates for any constrains linking to + // this milestone + $w = $this->mark->GetWidth()/2; + $this->SetConstrainPos($x,round($y-$w),$x,round($y+$w)); + + // Setup CSIM + if( $this->csimtarget != '' ) { + $this->mark->SetCSIMTarget( $this->csimtarget ); + $this->mark->SetCSIMAlt( $this->csimalt ); + } + + $this->mark->Stroke($aImg,$x,$y); + $this->caption->Stroke($aImg,$x+$this->mark->width/2+$this->iCaptionMargin,$y); + + $this->csimarea .= $this->mark->GetCSIMAreas(); + } +} + + +//=================================================== +// CLASS GanttVLine +// Responsible for formatting individual milestones +//=================================================== + +class TextPropertyBelow extends TextProperty { + function __construct($aTxt='') { + parent::__construct($aTxt); + } + + function GetColWidth($aImg,$aMargin=0) { + // Since we are not stroking the title in the columns + // but rather under the graph we want this to return 0. + return array(0); + } +} + +class GanttVLine extends GanttPlotObject { + + private $iLine,$title_margin=3, $iDayOffset=0.5; + private $iStartRow = -1, $iEndRow = -1; + + //--------------- + // CONSTRUCTOR + function __construct($aDate,$aTitle="",$aColor="darkred",$aWeight=2,$aStyle="solid") { + GanttPlotObject::__construct(); + $this->iLine = new LineProperty(); + $this->iLine->SetColor($aColor); + $this->iLine->SetWeight($aWeight); + $this->iLine->SetStyle($aStyle); + $this->iLine->Show(); + $this->iStart = $aDate; + $this->title = new TextPropertyBelow(); + $this->title->Set($aTitle); + } + + //--------------- + // PUBLIC METHODS + + // Set start and end rows for the VLine. By default the entire heigh of the + // Gantt chart is used + function SetRowSpan($aStart, $aEnd=-1) { + $this->iStartRow = $aStart; + $this->iEndRow = $aEnd; + } + + function SetDayOffset($aOff=0.5) { + if( $aOff < 0.0 || $aOff > 1.0 ) { + JpGraphError::RaiseL(6029); + //("Offset for vertical line must be in range [0,1]"); + } + $this->iDayOffset = $aOff; + } + + function SetTitleMargin($aMarg) { + $this->title_margin = $aMarg; + } + + function SetWeight($aWeight) { + $this->iLine->SetWeight($aWeight); + } + + function Stroke($aImg,$aScale) { + $d = $aScale->NormalizeDate($this->iStart); + if( $d < $aScale->iStartDate || $d > $aScale->iEndDate ) + return; + if($this->iDayOffset != 0.0) + $d += 24*60*60*$this->iDayOffset; + $x = $aScale->TranslateDate($d);//d=1006858800, + + if( $this->iStartRow > -1 ) { + $y1 = $aScale->TranslateVertPos($this->iStartRow,true) ; + } + else { + $y1 = $aScale->iVertHeaderSize+$aImg->top_margin; + } + + if( $this->iEndRow > -1 ) { + $y2 = $aScale->TranslateVertPos($this->iEndRow); + } + else { + $y2 = $aImg->height - $aImg->bottom_margin; + } + + $this->iLine->Stroke($aImg,$x,$y1,$x,$y2); + $this->title->Align("center","top"); + $this->title->Stroke($aImg,$x,$y2+$this->title_margin); + } +} + +//=================================================== +// CLASS LinkArrow +// Handles the drawing of a an arrow +//=================================================== +class LinkArrow { + private $ix,$iy; + private $isizespec = array( + array(2,3),array(3,5),array(3,8),array(6,15),array(8,22)); + private $iDirection=ARROW_DOWN,$iType=ARROWT_SOLID,$iSize=ARROW_S2; + private $iColor='black'; + + function __construct($x,$y,$aDirection,$aType=ARROWT_SOLID,$aSize=ARROW_S2) { + $this->iDirection = $aDirection; + $this->iType = $aType; + $this->iSize = $aSize; + $this->ix = $x; + $this->iy = $y; + } + + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function SetSize($aSize) { + $this->iSize = $aSize; + } + + function SetType($aType) { + $this->iType = $aType; + } + + function Stroke($aImg) { + list($dx,$dy) = $this->isizespec[$this->iSize]; + $x = $this->ix; + $y = $this->iy; + switch ( $this->iDirection ) { + case ARROW_DOWN: + $c = array($x,$y,$x-$dx,$y-$dy,$x+$dx,$y-$dy,$x,$y); + break; + case ARROW_UP: + $c = array($x,$y,$x-$dx,$y+$dy,$x+$dx,$y+$dy,$x,$y); + break; + case ARROW_LEFT: + $c = array($x,$y,$x+$dy,$y-$dx,$x+$dy,$y+$dx,$x,$y); + break; + case ARROW_RIGHT: + $c = array($x,$y,$x-$dy,$y-$dx,$x-$dy,$y+$dx,$x,$y); + break; + default: + JpGraphError::RaiseL(6030); + //('Unknown arrow direction for link.'); + die(); + break; + } + $aImg->SetColor($this->iColor); + switch( $this->iType ) { + case ARROWT_SOLID: + $aImg->FilledPolygon($c); + break; + case ARROWT_OPEN: + $aImg->Polygon($c); + break; + default: + JpGraphError::RaiseL(6031); + //('Unknown arrow type for link.'); + die(); + break; + } + } +} + +//=================================================== +// CLASS GanttLink +// Handles the drawing of a link line between 2 points +//=================================================== + +class GanttLink { + private $ix1,$ix2,$iy1,$iy2; + private $iPathType=2,$iPathExtend=15; + private $iColor='black',$iWeight=1; + private $iArrowSize=ARROW_S2,$iArrowType=ARROWT_SOLID; + + function __construct($x1=0,$y1=0,$x2=0,$y2=0) { + $this->ix1 = $x1; + $this->ix2 = $x2; + $this->iy1 = $y1; + $this->iy2 = $y2; + } + + function SetPos($x1,$y1,$x2,$y2) { + $this->ix1 = $x1; + $this->ix2 = $x2; + $this->iy1 = $y1; + $this->iy2 = $y2; + } + + function SetPath($aPath) { + $this->iPathType = $aPath; + } + + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function SetArrow($aSize,$aType=ARROWT_SOLID) { + $this->iArrowSize = $aSize; + $this->iArrowType = $aType; + } + + function SetWeight($aWeight) { + $this->iWeight = $aWeight; + } + + function Stroke($aImg) { + // The way the path for the arrow is constructed is partly based + // on some heuristics. This is not an exact science but draws the + // path in a way that, for me, makes esthetic sence. For example + // if the start and end activities are very close we make a small + // detour to endter the target horixontally. If there are more + // space between axctivities then no suh detour is made and the + // target is "hit" directly vertical. I have tried to keep this + // simple. no doubt this could become almost infinitive complex + // and have some real AI. Feel free to modify this. + // This will no-doubt be tweaked as times go by. One design aim + // is to avoid having the user choose what types of arrow + // he wants. + + // The arrow is drawn between (x1,y1) to (x2,y2) + $x1 = $this->ix1 ; + $x2 = $this->ix2 ; + $y1 = $this->iy1 ; + $y2 = $this->iy2 ; + + // Depending on if the target is below or above we have to + // handle thi different. + if( $y2 > $y1 ) { + $arrowtype = ARROW_DOWN; + $midy = round(($y2-$y1)/2+$y1); + if( $x2 > $x1 ) { + switch ( $this->iPathType ) { + case 0: + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + break; + case 1: + case 2: + case 3: + $c = array($x1,$y1,$x2,$y1,$x2,$y2); + break; + default: + JpGraphError::RaiseL(6032,$this->iPathType); + //('Internal error: Unknown path type (='.$this->iPathType .') specified for link.'); + exit(1); + break; + } + } + else { + switch ( $this->iPathType ) { + case 0: + case 1: + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + break; + case 2: + // Always extend out horizontally a bit from the first point + // If we draw a link back in time (end to start) and the bars + // are very close we also change the path so it comes in from + // the left on the activity + $c = array($x1,$y1,$x1+$this->iPathExtend,$y1, + $x1+$this->iPathExtend,$midy, + $x2,$midy,$x2,$y2); + break; + case 3: + if( $y2-$midy < 6 ) { + $c = array($x1,$y1,$x1,$midy, + $x2-$this->iPathExtend,$midy, + $x2-$this->iPathExtend,$y2, + $x2,$y2); + $arrowtype = ARROW_RIGHT; + } + else { + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + } + break; + default: + JpGraphError::RaiseL(6032,$this->iPathType); + //('Internal error: Unknown path type specified for link.'); + exit(1); + break; + } + } + $arrow = new LinkArrow($x2,$y2,$arrowtype); + } + else { + // Y2 < Y1 + $arrowtype = ARROW_UP; + $midy = round(($y1-$y2)/2+$y2); + if( $x2 > $x1 ) { + switch ( $this->iPathType ) { + case 0: + case 1: + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + break; + case 3: + if( $midy-$y2 < 8 ) { + $arrowtype = ARROW_RIGHT; + $c = array($x1,$y1,$x1,$y2,$x2,$y2); + } + else { + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + } + break; + default: + JpGraphError::RaiseL(6032,$this->iPathType); + //('Internal error: Unknown path type specified for link.'); + break; + } + } + else { + switch ( $this->iPathType ) { + case 0: + case 1: + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + break; + case 2: + // Always extend out horizontally a bit from the first point + $c = array($x1,$y1,$x1+$this->iPathExtend,$y1, + $x1+$this->iPathExtend,$midy, + $x2,$midy,$x2,$y2); + break; + case 3: + if( $midy-$y2 < 16 ) { + $arrowtype = ARROW_RIGHT; + $c = array($x1,$y1,$x1,$midy,$x2-$this->iPathExtend,$midy, + $x2-$this->iPathExtend,$y2, + $x2,$y2); + } + else { + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + } + break; + default: + JpGraphError::RaiseL(6032,$this->iPathType); + //('Internal error: Unknown path type specified for link.'); + break; + } + } + $arrow = new LinkArrow($x2,$y2,$arrowtype); + } + $aImg->SetColor($this->iColor); + $aImg->SetLineWeight($this->iWeight); + $aImg->Polygon($c); + $aImg->SetLineWeight(1); + $arrow->SetColor($this->iColor); + $arrow->SetSize($this->iArrowSize); + $arrow->SetType($this->iArrowType); + $arrow->Stroke($aImg); + } +} + +// +?> diff --git a/Societes/ric/jpgraph/jpgraph_gb2312.php b/Societes/ric/jpgraph/jpgraph_gb2312.php new file mode 100755 index 00000000..eff07cbc --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_gb2312.php @@ -0,0 +1,1552 @@ + 12288, 8482 => 12289, 8483 => 12290, 8484 => 12539, 8485 => 713, + 8486 => 711, 8487 => 168, 8488 => 12291, 8489 => 12293, 8490 => 8213, + 8491 => 65374, 8492 => 8214, 8493 => 8230, 8494 => 8216, 8495 => 8217, + 8496 => 8220, 8497 => 8221, 8498 => 12308, 8499 => 12309, 8500 => 12296, + 8501 => 12297, 8502 => 12298, 8503 => 12299, 8504 => 12300, 8505 => 12301, + 8506 => 12302, 8507 => 12303, 8508 => 12310, 8509 => 12311, 8510 => 12304, + 8511 => 12305, 8512 => 177, 8513 => 215, 8514 => 247, 8515 => 8758, + 8516 => 8743, 8517 => 8744, 8518 => 8721, 8519 => 8719, 8520 => 8746, + 8521 => 8745, 8522 => 8712, 8523 => 8759, 8524 => 8730, 8525 => 8869, + 8526 => 8741, 8527 => 8736, 8528 => 8978, 8529 => 8857, 8530 => 8747, + 8531 => 8750, 8532 => 8801, 8533 => 8780, 8534 => 8776, 8535 => 8765, + 8536 => 8733, 8537 => 8800, 8538 => 8814, 8539 => 8815, 8540 => 8804, + 8541 => 8805, 8542 => 8734, 8543 => 8757, 8544 => 8756, 8545 => 9794, + 8546 => 9792, 8547 => 176, 8548 => 8242, 8549 => 8243, 8550 => 8451, + 8551 => 65284, 8552 => 164, 8553 => 65504, 8554 => 65505, 8555 => 8240, + 8556 => 167, 8557 => 8470, 8558 => 9734, 8559 => 9733, 8560 => 9675, + 8561 => 9679, 8562 => 9678, 8563 => 9671, 8564 => 9670, 8565 => 9633, + 8566 => 9632, 8567 => 9651, 8568 => 9650, 8569 => 8251, 8570 => 8594, + 8571 => 8592, 8572 => 8593, 8573 => 8595, 8574 => 12307, 8753 => 9352, + 8754 => 9353, 8755 => 9354, 8756 => 9355, 8757 => 9356, 8758 => 9357, + 8759 => 9358, 8760 => 9359, 8761 => 9360, 8762 => 9361, 8763 => 9362, + 8764 => 9363, 8765 => 9364, 8766 => 9365, 8767 => 9366, 8768 => 9367, + 8769 => 9368, 8770 => 9369, 8771 => 9370, 8772 => 9371, 8773 => 9332, + 8774 => 9333, 8775 => 9334, 8776 => 9335, 8777 => 9336, 8778 => 9337, + 8779 => 9338, 8780 => 9339, 8781 => 9340, 8782 => 9341, 8783 => 9342, + 8784 => 9343, 8785 => 9344, 8786 => 9345, 8787 => 9346, 8788 => 9347, + 8789 => 9348, 8790 => 9349, 8791 => 9350, 8792 => 9351, 8793 => 9312, + 8794 => 9313, 8795 => 9314, 8796 => 9315, 8797 => 9316, 8798 => 9317, + 8799 => 9318, 8800 => 9319, 8801 => 9320, 8802 => 9321, 8805 => 12832, + 8806 => 12833, 8807 => 12834, 8808 => 12835, 8809 => 12836, 8810 => 12837, + 8811 => 12838, 8812 => 12839, 8813 => 12840, 8814 => 12841, 8817 => 8544, + 8818 => 8545, 8819 => 8546, 8820 => 8547, 8821 => 8548, 8822 => 8549, + 8823 => 8550, 8824 => 8551, 8825 => 8552, 8826 => 8553, 8827 => 8554, + 8828 => 8555, 8993 => 65281, 8994 => 65282, 8995 => 65283, 8996 => 65509, + 8997 => 65285, 8998 => 65286, 8999 => 65287, 9000 => 65288, 9001 => 65289, + 9002 => 65290, 9003 => 65291, 9004 => 65292, 9005 => 65293, 9006 => 65294, + 9007 => 65295, 9008 => 65296, 9009 => 65297, 9010 => 65298, 9011 => 65299, + 9012 => 65300, 9013 => 65301, 9014 => 65302, 9015 => 65303, 9016 => 65304, + 9017 => 65305, 9018 => 65306, 9019 => 65307, 9020 => 65308, 9021 => 65309, + 9022 => 65310, 9023 => 65311, 9024 => 65312, 9025 => 65313, 9026 => 65314, + 9027 => 65315, 9028 => 65316, 9029 => 65317, 9030 => 65318, 9031 => 65319, + 9032 => 65320, 9033 => 65321, 9034 => 65322, 9035 => 65323, 9036 => 65324, + 9037 => 65325, 9038 => 65326, 9039 => 65327, 9040 => 65328, 9041 => 65329, + 9042 => 65330, 9043 => 65331, 9044 => 65332, 9045 => 65333, 9046 => 65334, + 9047 => 65335, 9048 => 65336, 9049 => 65337, 9050 => 65338, 9051 => 65339, + 9052 => 65340, 9053 => 65341, 9054 => 65342, 9055 => 65343, 9056 => 65344, + 9057 => 65345, 9058 => 65346, 9059 => 65347, 9060 => 65348, 9061 => 65349, + 9062 => 65350, 9063 => 65351, 9064 => 65352, 9065 => 65353, 9066 => 65354, + 9067 => 65355, 9068 => 65356, 9069 => 65357, 9070 => 65358, 9071 => 65359, + 9072 => 65360, 9073 => 65361, 9074 => 65362, 9075 => 65363, 9076 => 65364, + 9077 => 65365, 9078 => 65366, 9079 => 65367, 9080 => 65368, 9081 => 65369, + 9082 => 65370, 9083 => 65371, 9084 => 65372, 9085 => 65373, 9086 => 65507, + 9249 => 12353, 9250 => 12354, 9251 => 12355, 9252 => 12356, 9253 => 12357, + 9254 => 12358, 9255 => 12359, 9256 => 12360, 9257 => 12361, 9258 => 12362, + 9259 => 12363, 9260 => 12364, 9261 => 12365, 9262 => 12366, 9263 => 12367, + 9264 => 12368, 9265 => 12369, 9266 => 12370, 9267 => 12371, 9268 => 12372, + 9269 => 12373, 9270 => 12374, 9271 => 12375, 9272 => 12376, 9273 => 12377, + 9274 => 12378, 9275 => 12379, 9276 => 12380, 9277 => 12381, 9278 => 12382, + 9279 => 12383, 9280 => 12384, 9281 => 12385, 9282 => 12386, 9283 => 12387, + 9284 => 12388, 9285 => 12389, 9286 => 12390, 9287 => 12391, 9288 => 12392, + 9289 => 12393, 9290 => 12394, 9291 => 12395, 9292 => 12396, 9293 => 12397, + 9294 => 12398, 9295 => 12399, 9296 => 12400, 9297 => 12401, 9298 => 12402, + 9299 => 12403, 9300 => 12404, 9301 => 12405, 9302 => 12406, 9303 => 12407, + 9304 => 12408, 9305 => 12409, 9306 => 12410, 9307 => 12411, 9308 => 12412, + 9309 => 12413, 9310 => 12414, 9311 => 12415, 9312 => 12416, 9313 => 12417, + 9314 => 12418, 9315 => 12419, 9316 => 12420, 9317 => 12421, 9318 => 12422, + 9319 => 12423, 9320 => 12424, 9321 => 12425, 9322 => 12426, 9323 => 12427, + 9324 => 12428, 9325 => 12429, 9326 => 12430, 9327 => 12431, 9328 => 12432, + 9329 => 12433, 9330 => 12434, 9331 => 12435, 9505 => 12449, 9506 => 12450, + 9507 => 12451, 9508 => 12452, 9509 => 12453, 9510 => 12454, 9511 => 12455, + 9512 => 12456, 9513 => 12457, 9514 => 12458, 9515 => 12459, 9516 => 12460, + 9517 => 12461, 9518 => 12462, 9519 => 12463, 9520 => 12464, 9521 => 12465, + 9522 => 12466, 9523 => 12467, 9524 => 12468, 9525 => 12469, 9526 => 12470, + 9527 => 12471, 9528 => 12472, 9529 => 12473, 9530 => 12474, 9531 => 12475, + 9532 => 12476, 9533 => 12477, 9534 => 12478, 9535 => 12479, 9536 => 12480, + 9537 => 12481, 9538 => 12482, 9539 => 12483, 9540 => 12484, 9541 => 12485, + 9542 => 12486, 9543 => 12487, 9544 => 12488, 9545 => 12489, 9546 => 12490, + 9547 => 12491, 9548 => 12492, 9549 => 12493, 9550 => 12494, 9551 => 12495, + 9552 => 12496, 9553 => 12497, 9554 => 12498, 9555 => 12499, 9556 => 12500, + 9557 => 12501, 9558 => 12502, 9559 => 12503, 9560 => 12504, 9561 => 12505, + 9562 => 12506, 9563 => 12507, 9564 => 12508, 9565 => 12509, 9566 => 12510, + 9567 => 12511, 9568 => 12512, 9569 => 12513, 9570 => 12514, 9571 => 12515, + 9572 => 12516, 9573 => 12517, 9574 => 12518, 9575 => 12519, 9576 => 12520, + 9577 => 12521, 9578 => 12522, 9579 => 12523, 9580 => 12524, 9581 => 12525, + 9582 => 12526, 9583 => 12527, 9584 => 12528, 9585 => 12529, 9586 => 12530, + 9587 => 12531, 9588 => 12532, 9589 => 12533, 9590 => 12534, 9761 => 913, + 9762 => 914, 9763 => 915, 9764 => 916, 9765 => 917, 9766 => 918, + 9767 => 919, 9768 => 920, 9769 => 921, 9770 => 922, 9771 => 923, + 9772 => 924, 9773 => 925, 9774 => 926, 9775 => 927, 9776 => 928, + 9777 => 929, 9778 => 931, 9779 => 932, 9780 => 933, 9781 => 934, + 9782 => 935, 9783 => 936, 9784 => 937, 9793 => 945, 9794 => 946, + 9795 => 947, 9796 => 948, 9797 => 949, 9798 => 950, 9799 => 951, + 9800 => 952, 9801 => 953, 9802 => 954, 9803 => 955, 9804 => 956, + 9805 => 957, 9806 => 958, 9807 => 959, 9808 => 960, 9809 => 961, + 9810 => 963, 9811 => 964, 9812 => 965, 9813 => 966, 9814 => 967, + 9815 => 968, 9816 => 969, 10017 => 1040, 10018 => 1041, 10019 => 1042, + 10020 => 1043, 10021 => 1044, 10022 => 1045, 10023 => 1025, 10024 => 1046, + 10025 => 1047, 10026 => 1048, 10027 => 1049, 10028 => 1050, 10029 => 1051, + 10030 => 1052, 10031 => 1053, 10032 => 1054, 10033 => 1055, 10034 => 1056, + 10035 => 1057, 10036 => 1058, 10037 => 1059, 10038 => 1060, 10039 => 1061, + 10040 => 1062, 10041 => 1063, 10042 => 1064, 10043 => 1065, 10044 => 1066, + 10045 => 1067, 10046 => 1068, 10047 => 1069, 10048 => 1070, 10049 => 1071, + 10065 => 1072, 10066 => 1073, 10067 => 1074, 10068 => 1075, 10069 => 1076, + 10070 => 1077, 10071 => 1105, 10072 => 1078, 10073 => 1079, 10074 => 1080, + 10075 => 1081, 10076 => 1082, 10077 => 1083, 10078 => 1084, 10079 => 1085, + 10080 => 1086, 10081 => 1087, 10082 => 1088, 10083 => 1089, 10084 => 1090, + 10085 => 1091, 10086 => 1092, 10087 => 1093, 10088 => 1094, 10089 => 1095, + 10090 => 1096, 10091 => 1097, 10092 => 1098, 10093 => 1099, 10094 => 1100, + 10095 => 1101, 10096 => 1102, 10097 => 1103, 10273 => 257, 10274 => 225, + 10275 => 462, 10276 => 224, 10277 => 275, 10278 => 233, 10279 => 283, + 10280 => 232, 10281 => 299, 10282 => 237, 10283 => 464, 10284 => 236, + 10285 => 333, 10286 => 243, 10287 => 466, 10288 => 242, 10289 => 363, + 10290 => 250, 10291 => 468, 10292 => 249, 10293 => 470, 10294 => 472, + 10295 => 474, 10296 => 476, 10297 => 252, 10298 => 234, 10309 => 12549, + 10310 => 12550, 10311 => 12551, 10312 => 12552, 10313 => 12553, 10314 => 12554, + 10315 => 12555, 10316 => 12556, 10317 => 12557, 10318 => 12558, 10319 => 12559, + 10320 => 12560, 10321 => 12561, 10322 => 12562, 10323 => 12563, 10324 => 12564, + 10325 => 12565, 10326 => 12566, 10327 => 12567, 10328 => 12568, 10329 => 12569, + 10330 => 12570, 10331 => 12571, 10332 => 12572, 10333 => 12573, 10334 => 12574, + 10335 => 12575, 10336 => 12576, 10337 => 12577, 10338 => 12578, 10339 => 12579, + 10340 => 12580, 10341 => 12581, 10342 => 12582, 10343 => 12583, 10344 => 12584, + 10345 => 12585, 10532 => 9472, 10533 => 9473, 10534 => 9474, 10535 => 9475, + 10536 => 9476, 10537 => 9477, 10538 => 9478, 10539 => 9479, 10540 => 9480, + 10541 => 9481, 10542 => 9482, 10543 => 9483, 10544 => 9484, 10545 => 9485, + 10546 => 9486, 10547 => 9487, 10548 => 9488, 10549 => 9489, 10550 => 9490, + 10551 => 9491, 10552 => 9492, 10553 => 9493, 10554 => 9494, 10555 => 9495, + 10556 => 9496, 10557 => 9497, 10558 => 9498, 10559 => 9499, 10560 => 9500, + 10561 => 9501, 10562 => 9502, 10563 => 9503, 10564 => 9504, 10565 => 9505, + 10566 => 9506, 10567 => 9507, 10568 => 9508, 10569 => 9509, 10570 => 9510, + 10571 => 9511, 10572 => 9512, 10573 => 9513, 10574 => 9514, 10575 => 9515, + 10576 => 9516, 10577 => 9517, 10578 => 9518, 10579 => 9519, 10580 => 9520, + 10581 => 9521, 10582 => 9522, 10583 => 9523, 10584 => 9524, 10585 => 9525, + 10586 => 9526, 10587 => 9527, 10588 => 9528, 10589 => 9529, 10590 => 9530, + 10591 => 9531, 10592 => 9532, 10593 => 9533, 10594 => 9534, 10595 => 9535, + 10596 => 9536, 10597 => 9537, 10598 => 9538, 10599 => 9539, 10600 => 9540, + 10601 => 9541, 10602 => 9542, 10603 => 9543, 10604 => 9544, 10605 => 9545, + 10606 => 9546, 10607 => 9547, 12321 => 21834, 12322 => 38463, 12323 => 22467, + 12324 => 25384, 12325 => 21710, 12326 => 21769, 12327 => 21696, 12328 => 30353, + 12329 => 30284, 12330 => 34108, 12331 => 30702, 12332 => 33406, 12333 => 30861, + 12334 => 29233, 12335 => 38552, 12336 => 38797, 12337 => 27688, 12338 => 23433, + 12339 => 20474, 12340 => 25353, 12341 => 26263, 12342 => 23736, 12343 => 33018, + 12344 => 26696, 12345 => 32942, 12346 => 26114, 12347 => 30414, 12348 => 20985, + 12349 => 25942, 12350 => 29100, 12351 => 32753, 12352 => 34948, 12353 => 20658, + 12354 => 22885, 12355 => 25034, 12356 => 28595, 12357 => 33453, 12358 => 25420, + 12359 => 25170, 12360 => 21485, 12361 => 21543, 12362 => 31494, 12363 => 20843, + 12364 => 30116, 12365 => 24052, 12366 => 25300, 12367 => 36299, 12368 => 38774, + 12369 => 25226, 12370 => 32793, 12371 => 22365, 12372 => 38712, 12373 => 32610, + 12374 => 29240, 12375 => 30333, 12376 => 26575, 12377 => 30334, 12378 => 25670, + 12379 => 20336, 12380 => 36133, 12381 => 25308, 12382 => 31255, 12383 => 26001, + 12384 => 29677, 12385 => 25644, 12386 => 25203, 12387 => 33324, 12388 => 39041, + 12389 => 26495, 12390 => 29256, 12391 => 25198, 12392 => 25292, 12393 => 20276, + 12394 => 29923, 12395 => 21322, 12396 => 21150, 12397 => 32458, 12398 => 37030, + 12399 => 24110, 12400 => 26758, 12401 => 27036, 12402 => 33152, 12403 => 32465, + 12404 => 26834, 12405 => 30917, 12406 => 34444, 12407 => 38225, 12408 => 20621, + 12409 => 35876, 12410 => 33502, 12411 => 32990, 12412 => 21253, 12413 => 35090, + 12414 => 21093, 12577 => 34180, 12578 => 38649, 12579 => 20445, 12580 => 22561, + 12581 => 39281, 12582 => 23453, 12583 => 25265, 12584 => 25253, 12585 => 26292, + 12586 => 35961, 12587 => 40077, 12588 => 29190, 12589 => 26479, 12590 => 30865, + 12591 => 24754, 12592 => 21329, 12593 => 21271, 12594 => 36744, 12595 => 32972, + 12596 => 36125, 12597 => 38049, 12598 => 20493, 12599 => 29384, 12600 => 22791, + 12601 => 24811, 12602 => 28953, 12603 => 34987, 12604 => 22868, 12605 => 33519, + 12606 => 26412, 12607 => 31528, 12608 => 23849, 12609 => 32503, 12610 => 29997, + 12611 => 27893, 12612 => 36454, 12613 => 36856, 12614 => 36924, 12615 => 40763, + 12616 => 27604, 12617 => 37145, 12618 => 31508, 12619 => 24444, 12620 => 30887, + 12621 => 34006, 12622 => 34109, 12623 => 27605, 12624 => 27609, 12625 => 27606, + 12626 => 24065, 12627 => 24199, 12628 => 30201, 12629 => 38381, 12630 => 25949, + 12631 => 24330, 12632 => 24517, 12633 => 36767, 12634 => 22721, 12635 => 33218, + 12636 => 36991, 12637 => 38491, 12638 => 38829, 12639 => 36793, 12640 => 32534, + 12641 => 36140, 12642 => 25153, 12643 => 20415, 12644 => 21464, 12645 => 21342, + 12646 => 36776, 12647 => 36777, 12648 => 36779, 12649 => 36941, 12650 => 26631, + 12651 => 24426, 12652 => 33176, 12653 => 34920, 12654 => 40150, 12655 => 24971, + 12656 => 21035, 12657 => 30250, 12658 => 24428, 12659 => 25996, 12660 => 28626, + 12661 => 28392, 12662 => 23486, 12663 => 25672, 12664 => 20853, 12665 => 20912, + 12666 => 26564, 12667 => 19993, 12668 => 31177, 12669 => 39292, 12670 => 28851, + 12833 => 30149, 12834 => 24182, 12835 => 29627, 12836 => 33760, 12837 => 25773, + 12838 => 25320, 12839 => 38069, 12840 => 27874, 12841 => 21338, 12842 => 21187, + 12843 => 25615, 12844 => 38082, 12845 => 31636, 12846 => 20271, 12847 => 24091, + 12848 => 33334, 12849 => 33046, 12850 => 33162, 12851 => 28196, 12852 => 27850, + 12853 => 39539, 12854 => 25429, 12855 => 21340, 12856 => 21754, 12857 => 34917, + 12858 => 22496, 12859 => 19981, 12860 => 24067, 12861 => 27493, 12862 => 31807, + 12863 => 37096, 12864 => 24598, 12865 => 25830, 12866 => 29468, 12867 => 35009, + 12868 => 26448, 12869 => 25165, 12870 => 36130, 12871 => 30572, 12872 => 36393, + 12873 => 37319, 12874 => 24425, 12875 => 33756, 12876 => 34081, 12877 => 39184, + 12878 => 21442, 12879 => 34453, 12880 => 27531, 12881 => 24813, 12882 => 24808, + 12883 => 28799, 12884 => 33485, 12885 => 33329, 12886 => 20179, 12887 => 27815, + 12888 => 34255, 12889 => 25805, 12890 => 31961, 12891 => 27133, 12892 => 26361, + 12893 => 33609, 12894 => 21397, 12895 => 31574, 12896 => 20391, 12897 => 20876, + 12898 => 27979, 12899 => 23618, 12900 => 36461, 12901 => 25554, 12902 => 21449, + 12903 => 33580, 12904 => 33590, 12905 => 26597, 12906 => 30900, 12907 => 25661, + 12908 => 23519, 12909 => 23700, 12910 => 24046, 12911 => 35815, 12912 => 25286, + 12913 => 26612, 12914 => 35962, 12915 => 25600, 12916 => 25530, 12917 => 34633, + 12918 => 39307, 12919 => 35863, 12920 => 32544, 12921 => 38130, 12922 => 20135, + 12923 => 38416, 12924 => 39076, 12925 => 26124, 12926 => 29462, 13089 => 22330, + 13090 => 23581, 13091 => 24120, 13092 => 38271, 13093 => 20607, 13094 => 32928, + 13095 => 21378, 13096 => 25950, 13097 => 30021, 13098 => 21809, 13099 => 20513, + 13100 => 36229, 13101 => 25220, 13102 => 38046, 13103 => 26397, 13104 => 22066, + 13105 => 28526, 13106 => 24034, 13107 => 21557, 13108 => 28818, 13109 => 36710, + 13110 => 25199, 13111 => 25764, 13112 => 25507, 13113 => 24443, 13114 => 28552, + 13115 => 37108, 13116 => 33251, 13117 => 36784, 13118 => 23576, 13119 => 26216, + 13120 => 24561, 13121 => 27785, 13122 => 38472, 13123 => 36225, 13124 => 34924, + 13125 => 25745, 13126 => 31216, 13127 => 22478, 13128 => 27225, 13129 => 25104, + 13130 => 21576, 13131 => 20056, 13132 => 31243, 13133 => 24809, 13134 => 28548, + 13135 => 35802, 13136 => 25215, 13137 => 36894, 13138 => 39563, 13139 => 31204, + 13140 => 21507, 13141 => 30196, 13142 => 25345, 13143 => 21273, 13144 => 27744, + 13145 => 36831, 13146 => 24347, 13147 => 39536, 13148 => 32827, 13149 => 40831, + 13150 => 20360, 13151 => 23610, 13152 => 36196, 13153 => 32709, 13154 => 26021, + 13155 => 28861, 13156 => 20805, 13157 => 20914, 13158 => 34411, 13159 => 23815, + 13160 => 23456, 13161 => 25277, 13162 => 37228, 13163 => 30068, 13164 => 36364, + 13165 => 31264, 13166 => 24833, 13167 => 31609, 13168 => 20167, 13169 => 32504, + 13170 => 30597, 13171 => 19985, 13172 => 33261, 13173 => 21021, 13174 => 20986, + 13175 => 27249, 13176 => 21416, 13177 => 36487, 13178 => 38148, 13179 => 38607, + 13180 => 28353, 13181 => 38500, 13182 => 26970, 13345 => 30784, 13346 => 20648, + 13347 => 30679, 13348 => 25616, 13349 => 35302, 13350 => 22788, 13351 => 25571, + 13352 => 24029, 13353 => 31359, 13354 => 26941, 13355 => 20256, 13356 => 33337, + 13357 => 21912, 13358 => 20018, 13359 => 30126, 13360 => 31383, 13361 => 24162, + 13362 => 24202, 13363 => 38383, 13364 => 21019, 13365 => 21561, 13366 => 28810, + 13367 => 25462, 13368 => 38180, 13369 => 22402, 13370 => 26149, 13371 => 26943, + 13372 => 37255, 13373 => 21767, 13374 => 28147, 13375 => 32431, 13376 => 34850, + 13377 => 25139, 13378 => 32496, 13379 => 30133, 13380 => 33576, 13381 => 30913, + 13382 => 38604, 13383 => 36766, 13384 => 24904, 13385 => 29943, 13386 => 35789, + 13387 => 27492, 13388 => 21050, 13389 => 36176, 13390 => 27425, 13391 => 32874, + 13392 => 33905, 13393 => 22257, 13394 => 21254, 13395 => 20174, 13396 => 19995, + 13397 => 20945, 13398 => 31895, 13399 => 37259, 13400 => 31751, 13401 => 20419, + 13402 => 36479, 13403 => 31713, 13404 => 31388, 13405 => 25703, 13406 => 23828, + 13407 => 20652, 13408 => 33030, 13409 => 30209, 13410 => 31929, 13411 => 28140, + 13412 => 32736, 13413 => 26449, 13414 => 23384, 13415 => 23544, 13416 => 30923, + 13417 => 25774, 13418 => 25619, 13419 => 25514, 13420 => 25387, 13421 => 38169, + 13422 => 25645, 13423 => 36798, 13424 => 31572, 13425 => 30249, 13426 => 25171, + 13427 => 22823, 13428 => 21574, 13429 => 27513, 13430 => 20643, 13431 => 25140, + 13432 => 24102, 13433 => 27526, 13434 => 20195, 13435 => 36151, 13436 => 34955, + 13437 => 24453, 13438 => 36910, 13601 => 24608, 13602 => 32829, 13603 => 25285, + 13604 => 20025, 13605 => 21333, 13606 => 37112, 13607 => 25528, 13608 => 32966, + 13609 => 26086, 13610 => 27694, 13611 => 20294, 13612 => 24814, 13613 => 28129, + 13614 => 35806, 13615 => 24377, 13616 => 34507, 13617 => 24403, 13618 => 25377, + 13619 => 20826, 13620 => 33633, 13621 => 26723, 13622 => 20992, 13623 => 25443, + 13624 => 36424, 13625 => 20498, 13626 => 23707, 13627 => 31095, 13628 => 23548, + 13629 => 21040, 13630 => 31291, 13631 => 24764, 13632 => 36947, 13633 => 30423, + 13634 => 24503, 13635 => 24471, 13636 => 30340, 13637 => 36460, 13638 => 28783, + 13639 => 30331, 13640 => 31561, 13641 => 30634, 13642 => 20979, 13643 => 37011, + 13644 => 22564, 13645 => 20302, 13646 => 28404, 13647 => 36842, 13648 => 25932, + 13649 => 31515, 13650 => 29380, 13651 => 28068, 13652 => 32735, 13653 => 23265, + 13654 => 25269, 13655 => 24213, 13656 => 22320, 13657 => 33922, 13658 => 31532, + 13659 => 24093, 13660 => 24351, 13661 => 36882, 13662 => 32532, 13663 => 39072, + 13664 => 25474, 13665 => 28359, 13666 => 30872, 13667 => 28857, 13668 => 20856, + 13669 => 38747, 13670 => 22443, 13671 => 30005, 13672 => 20291, 13673 => 30008, + 13674 => 24215, 13675 => 24806, 13676 => 22880, 13677 => 28096, 13678 => 27583, + 13679 => 30857, 13680 => 21500, 13681 => 38613, 13682 => 20939, 13683 => 20993, + 13684 => 25481, 13685 => 21514, 13686 => 38035, 13687 => 35843, 13688 => 36300, + 13689 => 29241, 13690 => 30879, 13691 => 34678, 13692 => 36845, 13693 => 35853, + 13694 => 21472, 13857 => 19969, 13858 => 30447, 13859 => 21486, 13860 => 38025, + 13861 => 39030, 13862 => 40718, 13863 => 38189, 13864 => 23450, 13865 => 35746, + 13866 => 20002, 13867 => 19996, 13868 => 20908, 13869 => 33891, 13870 => 25026, + 13871 => 21160, 13872 => 26635, 13873 => 20375, 13874 => 24683, 13875 => 20923, + 13876 => 27934, 13877 => 20828, 13878 => 25238, 13879 => 26007, 13880 => 38497, + 13881 => 35910, 13882 => 36887, 13883 => 30168, 13884 => 37117, 13885 => 30563, + 13886 => 27602, 13887 => 29322, 13888 => 29420, 13889 => 35835, 13890 => 22581, + 13891 => 30585, 13892 => 36172, 13893 => 26460, 13894 => 38208, 13895 => 32922, + 13896 => 24230, 13897 => 28193, 13898 => 22930, 13899 => 31471, 13900 => 30701, + 13901 => 38203, 13902 => 27573, 13903 => 26029, 13904 => 32526, 13905 => 22534, + 13906 => 20817, 13907 => 38431, 13908 => 23545, 13909 => 22697, 13910 => 21544, + 13911 => 36466, 13912 => 25958, 13913 => 39039, 13914 => 22244, 13915 => 38045, + 13916 => 30462, 13917 => 36929, 13918 => 25479, 13919 => 21702, 13920 => 22810, + 13921 => 22842, 13922 => 22427, 13923 => 36530, 13924 => 26421, 13925 => 36346, + 13926 => 33333, 13927 => 21057, 13928 => 24816, 13929 => 22549, 13930 => 34558, + 13931 => 23784, 13932 => 40517, 13933 => 20420, 13934 => 39069, 13935 => 35769, + 13936 => 23077, 13937 => 24694, 13938 => 21380, 13939 => 25212, 13940 => 36943, + 13941 => 37122, 13942 => 39295, 13943 => 24681, 13944 => 32780, 13945 => 20799, + 13946 => 32819, 13947 => 23572, 13948 => 39285, 13949 => 27953, 13950 => 20108, + 14113 => 36144, 14114 => 21457, 14115 => 32602, 14116 => 31567, 14117 => 20240, + 14118 => 20047, 14119 => 38400, 14120 => 27861, 14121 => 29648, 14122 => 34281, + 14123 => 24070, 14124 => 30058, 14125 => 32763, 14126 => 27146, 14127 => 30718, + 14128 => 38034, 14129 => 32321, 14130 => 20961, 14131 => 28902, 14132 => 21453, + 14133 => 36820, 14134 => 33539, 14135 => 36137, 14136 => 29359, 14137 => 39277, + 14138 => 27867, 14139 => 22346, 14140 => 33459, 14141 => 26041, 14142 => 32938, + 14143 => 25151, 14144 => 38450, 14145 => 22952, 14146 => 20223, 14147 => 35775, + 14148 => 32442, 14149 => 25918, 14150 => 33778, 14151 => 38750, 14152 => 21857, + 14153 => 39134, 14154 => 32933, 14155 => 21290, 14156 => 35837, 14157 => 21536, + 14158 => 32954, 14159 => 24223, 14160 => 27832, 14161 => 36153, 14162 => 33452, + 14163 => 37210, 14164 => 21545, 14165 => 27675, 14166 => 20998, 14167 => 32439, + 14168 => 22367, 14169 => 28954, 14170 => 27774, 14171 => 31881, 14172 => 22859, + 14173 => 20221, 14174 => 24575, 14175 => 24868, 14176 => 31914, 14177 => 20016, + 14178 => 23553, 14179 => 26539, 14180 => 34562, 14181 => 23792, 14182 => 38155, + 14183 => 39118, 14184 => 30127, 14185 => 28925, 14186 => 36898, 14187 => 20911, + 14188 => 32541, 14189 => 35773, 14190 => 22857, 14191 => 20964, 14192 => 20315, + 14193 => 21542, 14194 => 22827, 14195 => 25975, 14196 => 32932, 14197 => 23413, + 14198 => 25206, 14199 => 25282, 14200 => 36752, 14201 => 24133, 14202 => 27679, + 14203 => 31526, 14204 => 20239, 14205 => 20440, 14206 => 26381, 14369 => 28014, + 14370 => 28074, 14371 => 31119, 14372 => 34993, 14373 => 24343, 14374 => 29995, + 14375 => 25242, 14376 => 36741, 14377 => 20463, 14378 => 37340, 14379 => 26023, + 14380 => 33071, 14381 => 33105, 14382 => 24220, 14383 => 33104, 14384 => 36212, + 14385 => 21103, 14386 => 35206, 14387 => 36171, 14388 => 22797, 14389 => 20613, + 14390 => 20184, 14391 => 38428, 14392 => 29238, 14393 => 33145, 14394 => 36127, + 14395 => 23500, 14396 => 35747, 14397 => 38468, 14398 => 22919, 14399 => 32538, + 14400 => 21648, 14401 => 22134, 14402 => 22030, 14403 => 35813, 14404 => 25913, + 14405 => 27010, 14406 => 38041, 14407 => 30422, 14408 => 28297, 14409 => 24178, + 14410 => 29976, 14411 => 26438, 14412 => 26577, 14413 => 31487, 14414 => 32925, + 14415 => 36214, 14416 => 24863, 14417 => 31174, 14418 => 25954, 14419 => 36195, + 14420 => 20872, 14421 => 21018, 14422 => 38050, 14423 => 32568, 14424 => 32923, + 14425 => 32434, 14426 => 23703, 14427 => 28207, 14428 => 26464, 14429 => 31705, + 14430 => 30347, 14431 => 39640, 14432 => 33167, 14433 => 32660, 14434 => 31957, + 14435 => 25630, 14436 => 38224, 14437 => 31295, 14438 => 21578, 14439 => 21733, + 14440 => 27468, 14441 => 25601, 14442 => 25096, 14443 => 40509, 14444 => 33011, + 14445 => 30105, 14446 => 21106, 14447 => 38761, 14448 => 33883, 14449 => 26684, + 14450 => 34532, 14451 => 38401, 14452 => 38548, 14453 => 38124, 14454 => 20010, + 14455 => 21508, 14456 => 32473, 14457 => 26681, 14458 => 36319, 14459 => 32789, + 14460 => 26356, 14461 => 24218, 14462 => 32697, 14625 => 22466, 14626 => 32831, + 14627 => 26775, 14628 => 24037, 14629 => 25915, 14630 => 21151, 14631 => 24685, + 14632 => 40858, 14633 => 20379, 14634 => 36524, 14635 => 20844, 14636 => 23467, + 14637 => 24339, 14638 => 24041, 14639 => 27742, 14640 => 25329, 14641 => 36129, + 14642 => 20849, 14643 => 38057, 14644 => 21246, 14645 => 27807, 14646 => 33503, + 14647 => 29399, 14648 => 22434, 14649 => 26500, 14650 => 36141, 14651 => 22815, + 14652 => 36764, 14653 => 33735, 14654 => 21653, 14655 => 31629, 14656 => 20272, + 14657 => 27837, 14658 => 23396, 14659 => 22993, 14660 => 40723, 14661 => 21476, + 14662 => 34506, 14663 => 39592, 14664 => 35895, 14665 => 32929, 14666 => 25925, + 14667 => 39038, 14668 => 22266, 14669 => 38599, 14670 => 21038, 14671 => 29916, + 14672 => 21072, 14673 => 23521, 14674 => 25346, 14675 => 35074, 14676 => 20054, + 14677 => 25296, 14678 => 24618, 14679 => 26874, 14680 => 20851, 14681 => 23448, + 14682 => 20896, 14683 => 35266, 14684 => 31649, 14685 => 39302, 14686 => 32592, + 14687 => 24815, 14688 => 28748, 14689 => 36143, 14690 => 20809, 14691 => 24191, + 14692 => 36891, 14693 => 29808, 14694 => 35268, 14695 => 22317, 14696 => 30789, + 14697 => 24402, 14698 => 40863, 14699 => 38394, 14700 => 36712, 14701 => 39740, + 14702 => 35809, 14703 => 30328, 14704 => 26690, 14705 => 26588, 14706 => 36330, + 14707 => 36149, 14708 => 21053, 14709 => 36746, 14710 => 28378, 14711 => 26829, + 14712 => 38149, 14713 => 37101, 14714 => 22269, 14715 => 26524, 14716 => 35065, + 14717 => 36807, 14718 => 21704, 14881 => 39608, 14882 => 23401, 14883 => 28023, + 14884 => 27686, 14885 => 20133, 14886 => 23475, 14887 => 39559, 14888 => 37219, + 14889 => 25000, 14890 => 37039, 14891 => 38889, 14892 => 21547, 14893 => 28085, + 14894 => 23506, 14895 => 20989, 14896 => 21898, 14897 => 32597, 14898 => 32752, + 14899 => 25788, 14900 => 25421, 14901 => 26097, 14902 => 25022, 14903 => 24717, + 14904 => 28938, 14905 => 27735, 14906 => 27721, 14907 => 22831, 14908 => 26477, + 14909 => 33322, 14910 => 22741, 14911 => 22158, 14912 => 35946, 14913 => 27627, + 14914 => 37085, 14915 => 22909, 14916 => 32791, 14917 => 21495, 14918 => 28009, + 14919 => 21621, 14920 => 21917, 14921 => 33655, 14922 => 33743, 14923 => 26680, + 14924 => 31166, 14925 => 21644, 14926 => 20309, 14927 => 21512, 14928 => 30418, + 14929 => 35977, 14930 => 38402, 14931 => 27827, 14932 => 28088, 14933 => 36203, + 14934 => 35088, 14935 => 40548, 14936 => 36154, 14937 => 22079, 14938 => 40657, + 14939 => 30165, 14940 => 24456, 14941 => 29408, 14942 => 24680, 14943 => 21756, + 14944 => 20136, 14945 => 27178, 14946 => 34913, 14947 => 24658, 14948 => 36720, + 14949 => 21700, 14950 => 28888, 14951 => 34425, 14952 => 40511, 14953 => 27946, + 14954 => 23439, 14955 => 24344, 14956 => 32418, 14957 => 21897, 14958 => 20399, + 14959 => 29492, 14960 => 21564, 14961 => 21402, 14962 => 20505, 14963 => 21518, + 14964 => 21628, 14965 => 20046, 14966 => 24573, 14967 => 29786, 14968 => 22774, + 14969 => 33899, 14970 => 32993, 14971 => 34676, 14972 => 29392, 14973 => 31946, + 14974 => 28246, 15137 => 24359, 15138 => 34382, 15139 => 21804, 15140 => 25252, + 15141 => 20114, 15142 => 27818, 15143 => 25143, 15144 => 33457, 15145 => 21719, + 15146 => 21326, 15147 => 29502, 15148 => 28369, 15149 => 30011, 15150 => 21010, + 15151 => 21270, 15152 => 35805, 15153 => 27088, 15154 => 24458, 15155 => 24576, + 15156 => 28142, 15157 => 22351, 15158 => 27426, 15159 => 29615, 15160 => 26707, + 15161 => 36824, 15162 => 32531, 15163 => 25442, 15164 => 24739, 15165 => 21796, + 15166 => 30186, 15167 => 35938, 15168 => 28949, 15169 => 28067, 15170 => 23462, + 15171 => 24187, 15172 => 33618, 15173 => 24908, 15174 => 40644, 15175 => 30970, + 15176 => 34647, 15177 => 31783, 15178 => 30343, 15179 => 20976, 15180 => 24822, + 15181 => 29004, 15182 => 26179, 15183 => 24140, 15184 => 24653, 15185 => 35854, + 15186 => 28784, 15187 => 25381, 15188 => 36745, 15189 => 24509, 15190 => 24674, + 15191 => 34516, 15192 => 22238, 15193 => 27585, 15194 => 24724, 15195 => 24935, + 15196 => 21321, 15197 => 24800, 15198 => 26214, 15199 => 36159, 15200 => 31229, + 15201 => 20250, 15202 => 28905, 15203 => 27719, 15204 => 35763, 15205 => 35826, + 15206 => 32472, 15207 => 33636, 15208 => 26127, 15209 => 23130, 15210 => 39746, + 15211 => 27985, 15212 => 28151, 15213 => 35905, 15214 => 27963, 15215 => 20249, + 15216 => 28779, 15217 => 33719, 15218 => 25110, 15219 => 24785, 15220 => 38669, + 15221 => 36135, 15222 => 31096, 15223 => 20987, 15224 => 22334, 15225 => 22522, + 15226 => 26426, 15227 => 30072, 15228 => 31293, 15229 => 31215, 15230 => 31637, + 15393 => 32908, 15394 => 39269, 15395 => 36857, 15396 => 28608, 15397 => 35749, + 15398 => 40481, 15399 => 23020, 15400 => 32489, 15401 => 32521, 15402 => 21513, + 15403 => 26497, 15404 => 26840, 15405 => 36753, 15406 => 31821, 15407 => 38598, + 15408 => 21450, 15409 => 24613, 15410 => 30142, 15411 => 27762, 15412 => 21363, + 15413 => 23241, 15414 => 32423, 15415 => 25380, 15416 => 20960, 15417 => 33034, + 15418 => 24049, 15419 => 34015, 15420 => 25216, 15421 => 20864, 15422 => 23395, + 15423 => 20238, 15424 => 31085, 15425 => 21058, 15426 => 24760, 15427 => 27982, + 15428 => 23492, 15429 => 23490, 15430 => 35745, 15431 => 35760, 15432 => 26082, + 15433 => 24524, 15434 => 38469, 15435 => 22931, 15436 => 32487, 15437 => 32426, + 15438 => 22025, 15439 => 26551, 15440 => 22841, 15441 => 20339, 15442 => 23478, + 15443 => 21152, 15444 => 33626, 15445 => 39050, 15446 => 36158, 15447 => 30002, + 15448 => 38078, 15449 => 20551, 15450 => 31292, 15451 => 20215, 15452 => 26550, + 15453 => 39550, 15454 => 23233, 15455 => 27516, 15456 => 30417, 15457 => 22362, + 15458 => 23574, 15459 => 31546, 15460 => 38388, 15461 => 29006, 15462 => 20860, + 15463 => 32937, 15464 => 33392, 15465 => 22904, 15466 => 32516, 15467 => 33575, + 15468 => 26816, 15469 => 26604, 15470 => 30897, 15471 => 30839, 15472 => 25315, + 15473 => 25441, 15474 => 31616, 15475 => 20461, 15476 => 21098, 15477 => 20943, + 15478 => 33616, 15479 => 27099, 15480 => 37492, 15481 => 36341, 15482 => 36145, + 15483 => 35265, 15484 => 38190, 15485 => 31661, 15486 => 20214, 15649 => 20581, + 15650 => 33328, 15651 => 21073, 15652 => 39279, 15653 => 28176, 15654 => 28293, + 15655 => 28071, 15656 => 24314, 15657 => 20725, 15658 => 23004, 15659 => 23558, + 15660 => 27974, 15661 => 27743, 15662 => 30086, 15663 => 33931, 15664 => 26728, + 15665 => 22870, 15666 => 35762, 15667 => 21280, 15668 => 37233, 15669 => 38477, + 15670 => 34121, 15671 => 26898, 15672 => 30977, 15673 => 28966, 15674 => 33014, + 15675 => 20132, 15676 => 37066, 15677 => 27975, 15678 => 39556, 15679 => 23047, + 15680 => 22204, 15681 => 25605, 15682 => 38128, 15683 => 30699, 15684 => 20389, + 15685 => 33050, 15686 => 29409, 15687 => 35282, 15688 => 39290, 15689 => 32564, + 15690 => 32478, 15691 => 21119, 15692 => 25945, 15693 => 37237, 15694 => 36735, + 15695 => 36739, 15696 => 21483, 15697 => 31382, 15698 => 25581, 15699 => 25509, + 15700 => 30342, 15701 => 31224, 15702 => 34903, 15703 => 38454, 15704 => 25130, + 15705 => 21163, 15706 => 33410, 15707 => 26708, 15708 => 26480, 15709 => 25463, + 15710 => 30571, 15711 => 31469, 15712 => 27905, 15713 => 32467, 15714 => 35299, + 15715 => 22992, 15716 => 25106, 15717 => 34249, 15718 => 33445, 15719 => 30028, + 15720 => 20511, 15721 => 20171, 15722 => 30117, 15723 => 35819, 15724 => 23626, + 15725 => 24062, 15726 => 31563, 15727 => 26020, 15728 => 37329, 15729 => 20170, + 15730 => 27941, 15731 => 35167, 15732 => 32039, 15733 => 38182, 15734 => 20165, + 15735 => 35880, 15736 => 36827, 15737 => 38771, 15738 => 26187, 15739 => 31105, + 15740 => 36817, 15741 => 28908, 15742 => 28024, 15905 => 23613, 15906 => 21170, + 15907 => 33606, 15908 => 20834, 15909 => 33550, 15910 => 30555, 15911 => 26230, + 15912 => 40120, 15913 => 20140, 15914 => 24778, 15915 => 31934, 15916 => 31923, + 15917 => 32463, 15918 => 20117, 15919 => 35686, 15920 => 26223, 15921 => 39048, + 15922 => 38745, 15923 => 22659, 15924 => 25964, 15925 => 38236, 15926 => 24452, + 15927 => 30153, 15928 => 38742, 15929 => 31455, 15930 => 31454, 15931 => 20928, + 15932 => 28847, 15933 => 31384, 15934 => 25578, 15935 => 31350, 15936 => 32416, + 15937 => 29590, 15938 => 38893, 15939 => 20037, 15940 => 28792, 15941 => 20061, + 15942 => 37202, 15943 => 21417, 15944 => 25937, 15945 => 26087, 15946 => 33276, + 15947 => 33285, 15948 => 21646, 15949 => 23601, 15950 => 30106, 15951 => 38816, + 15952 => 25304, 15953 => 29401, 15954 => 30141, 15955 => 23621, 15956 => 39545, + 15957 => 33738, 15958 => 23616, 15959 => 21632, 15960 => 30697, 15961 => 20030, + 15962 => 27822, 15963 => 32858, 15964 => 25298, 15965 => 25454, 15966 => 24040, + 15967 => 20855, 15968 => 36317, 15969 => 36382, 15970 => 38191, 15971 => 20465, + 15972 => 21477, 15973 => 24807, 15974 => 28844, 15975 => 21095, 15976 => 25424, + 15977 => 40515, 15978 => 23071, 15979 => 20518, 15980 => 30519, 15981 => 21367, + 15982 => 32482, 15983 => 25733, 15984 => 25899, 15985 => 25225, 15986 => 25496, + 15987 => 20500, 15988 => 29237, 15989 => 35273, 15990 => 20915, 15991 => 35776, + 15992 => 32477, 15993 => 22343, 15994 => 33740, 15995 => 38055, 15996 => 20891, + 15997 => 21531, 15998 => 23803, 16161 => 20426, 16162 => 31459, 16163 => 27994, + 16164 => 37089, 16165 => 39567, 16166 => 21888, 16167 => 21654, 16168 => 21345, + 16169 => 21679, 16170 => 24320, 16171 => 25577, 16172 => 26999, 16173 => 20975, + 16174 => 24936, 16175 => 21002, 16176 => 22570, 16177 => 21208, 16178 => 22350, + 16179 => 30733, 16180 => 30475, 16181 => 24247, 16182 => 24951, 16183 => 31968, + 16184 => 25179, 16185 => 25239, 16186 => 20130, 16187 => 28821, 16188 => 32771, + 16189 => 25335, 16190 => 28900, 16191 => 38752, 16192 => 22391, 16193 => 33499, + 16194 => 26607, 16195 => 26869, 16196 => 30933, 16197 => 39063, 16198 => 31185, + 16199 => 22771, 16200 => 21683, 16201 => 21487, 16202 => 28212, 16203 => 20811, + 16204 => 21051, 16205 => 23458, 16206 => 35838, 16207 => 32943, 16208 => 21827, + 16209 => 22438, 16210 => 24691, 16211 => 22353, 16212 => 21549, 16213 => 31354, + 16214 => 24656, 16215 => 23380, 16216 => 25511, 16217 => 25248, 16218 => 21475, + 16219 => 25187, 16220 => 23495, 16221 => 26543, 16222 => 21741, 16223 => 31391, + 16224 => 33510, 16225 => 37239, 16226 => 24211, 16227 => 35044, 16228 => 22840, + 16229 => 22446, 16230 => 25358, 16231 => 36328, 16232 => 33007, 16233 => 22359, + 16234 => 31607, 16235 => 20393, 16236 => 24555, 16237 => 23485, 16238 => 27454, + 16239 => 21281, 16240 => 31568, 16241 => 29378, 16242 => 26694, 16243 => 30719, + 16244 => 30518, 16245 => 26103, 16246 => 20917, 16247 => 20111, 16248 => 30420, + 16249 => 23743, 16250 => 31397, 16251 => 33909, 16252 => 22862, 16253 => 39745, + 16254 => 20608, 16417 => 39304, 16418 => 24871, 16419 => 28291, 16420 => 22372, + 16421 => 26118, 16422 => 25414, 16423 => 22256, 16424 => 25324, 16425 => 25193, + 16426 => 24275, 16427 => 38420, 16428 => 22403, 16429 => 25289, 16430 => 21895, + 16431 => 34593, 16432 => 33098, 16433 => 36771, 16434 => 21862, 16435 => 33713, + 16436 => 26469, 16437 => 36182, 16438 => 34013, 16439 => 23146, 16440 => 26639, + 16441 => 25318, 16442 => 31726, 16443 => 38417, 16444 => 20848, 16445 => 28572, + 16446 => 35888, 16447 => 25597, 16448 => 35272, 16449 => 25042, 16450 => 32518, + 16451 => 28866, 16452 => 28389, 16453 => 29701, 16454 => 27028, 16455 => 29436, + 16456 => 24266, 16457 => 37070, 16458 => 26391, 16459 => 28010, 16460 => 25438, + 16461 => 21171, 16462 => 29282, 16463 => 32769, 16464 => 20332, 16465 => 23013, + 16466 => 37226, 16467 => 28889, 16468 => 28061, 16469 => 21202, 16470 => 20048, + 16471 => 38647, 16472 => 38253, 16473 => 34174, 16474 => 30922, 16475 => 32047, + 16476 => 20769, 16477 => 22418, 16478 => 25794, 16479 => 32907, 16480 => 31867, + 16481 => 27882, 16482 => 26865, 16483 => 26974, 16484 => 20919, 16485 => 21400, + 16486 => 26792, 16487 => 29313, 16488 => 40654, 16489 => 31729, 16490 => 29432, + 16491 => 31163, 16492 => 28435, 16493 => 29702, 16494 => 26446, 16495 => 37324, + 16496 => 40100, 16497 => 31036, 16498 => 33673, 16499 => 33620, 16500 => 21519, + 16501 => 26647, 16502 => 20029, 16503 => 21385, 16504 => 21169, 16505 => 30782, + 16506 => 21382, 16507 => 21033, 16508 => 20616, 16509 => 20363, 16510 => 20432, + 16673 => 30178, 16674 => 31435, 16675 => 31890, 16676 => 27813, 16677 => 38582, + 16678 => 21147, 16679 => 29827, 16680 => 21737, 16681 => 20457, 16682 => 32852, + 16683 => 33714, 16684 => 36830, 16685 => 38256, 16686 => 24265, 16687 => 24604, + 16688 => 28063, 16689 => 24088, 16690 => 25947, 16691 => 33080, 16692 => 38142, + 16693 => 24651, 16694 => 28860, 16695 => 32451, 16696 => 31918, 16697 => 20937, + 16698 => 26753, 16699 => 31921, 16700 => 33391, 16701 => 20004, 16702 => 36742, + 16703 => 37327, 16704 => 26238, 16705 => 20142, 16706 => 35845, 16707 => 25769, + 16708 => 32842, 16709 => 20698, 16710 => 30103, 16711 => 29134, 16712 => 23525, + 16713 => 36797, 16714 => 28518, 16715 => 20102, 16716 => 25730, 16717 => 38243, + 16718 => 24278, 16719 => 26009, 16720 => 21015, 16721 => 35010, 16722 => 28872, + 16723 => 21155, 16724 => 29454, 16725 => 29747, 16726 => 26519, 16727 => 30967, + 16728 => 38678, 16729 => 20020, 16730 => 37051, 16731 => 40158, 16732 => 28107, + 16733 => 20955, 16734 => 36161, 16735 => 21533, 16736 => 25294, 16737 => 29618, + 16738 => 33777, 16739 => 38646, 16740 => 40836, 16741 => 38083, 16742 => 20278, + 16743 => 32666, 16744 => 20940, 16745 => 28789, 16746 => 38517, 16747 => 23725, + 16748 => 39046, 16749 => 21478, 16750 => 20196, 16751 => 28316, 16752 => 29705, + 16753 => 27060, 16754 => 30827, 16755 => 39311, 16756 => 30041, 16757 => 21016, + 16758 => 30244, 16759 => 27969, 16760 => 26611, 16761 => 20845, 16762 => 40857, + 16763 => 32843, 16764 => 21657, 16765 => 31548, 16766 => 31423, 16929 => 38534, + 16930 => 22404, 16931 => 25314, 16932 => 38471, 16933 => 27004, 16934 => 23044, + 16935 => 25602, 16936 => 31699, 16937 => 28431, 16938 => 38475, 16939 => 33446, + 16940 => 21346, 16941 => 39045, 16942 => 24208, 16943 => 28809, 16944 => 25523, + 16945 => 21348, 16946 => 34383, 16947 => 40065, 16948 => 40595, 16949 => 30860, + 16950 => 38706, 16951 => 36335, 16952 => 36162, 16953 => 40575, 16954 => 28510, + 16955 => 31108, 16956 => 24405, 16957 => 38470, 16958 => 25134, 16959 => 39540, + 16960 => 21525, 16961 => 38109, 16962 => 20387, 16963 => 26053, 16964 => 23653, + 16965 => 23649, 16966 => 32533, 16967 => 34385, 16968 => 27695, 16969 => 24459, + 16970 => 29575, 16971 => 28388, 16972 => 32511, 16973 => 23782, 16974 => 25371, + 16975 => 23402, 16976 => 28390, 16977 => 21365, 16978 => 20081, 16979 => 25504, + 16980 => 30053, 16981 => 25249, 16982 => 36718, 16983 => 20262, 16984 => 20177, + 16985 => 27814, 16986 => 32438, 16987 => 35770, 16988 => 33821, 16989 => 34746, + 16990 => 32599, 16991 => 36923, 16992 => 38179, 16993 => 31657, 16994 => 39585, + 16995 => 35064, 16996 => 33853, 16997 => 27931, 16998 => 39558, 16999 => 32476, + 17000 => 22920, 17001 => 40635, 17002 => 29595, 17003 => 30721, 17004 => 34434, + 17005 => 39532, 17006 => 39554, 17007 => 22043, 17008 => 21527, 17009 => 22475, + 17010 => 20080, 17011 => 40614, 17012 => 21334, 17013 => 36808, 17014 => 33033, + 17015 => 30610, 17016 => 39314, 17017 => 34542, 17018 => 28385, 17019 => 34067, + 17020 => 26364, 17021 => 24930, 17022 => 28459, 17185 => 35881, 17186 => 33426, + 17187 => 33579, 17188 => 30450, 17189 => 27667, 17190 => 24537, 17191 => 33725, + 17192 => 29483, 17193 => 33541, 17194 => 38170, 17195 => 27611, 17196 => 30683, + 17197 => 38086, 17198 => 21359, 17199 => 33538, 17200 => 20882, 17201 => 24125, + 17202 => 35980, 17203 => 36152, 17204 => 20040, 17205 => 29611, 17206 => 26522, + 17207 => 26757, 17208 => 37238, 17209 => 38665, 17210 => 29028, 17211 => 27809, + 17212 => 30473, 17213 => 23186, 17214 => 38209, 17215 => 27599, 17216 => 32654, + 17217 => 26151, 17218 => 23504, 17219 => 22969, 17220 => 23194, 17221 => 38376, + 17222 => 38391, 17223 => 20204, 17224 => 33804, 17225 => 33945, 17226 => 27308, + 17227 => 30431, 17228 => 38192, 17229 => 29467, 17230 => 26790, 17231 => 23391, + 17232 => 30511, 17233 => 37274, 17234 => 38753, 17235 => 31964, 17236 => 36855, + 17237 => 35868, 17238 => 24357, 17239 => 31859, 17240 => 31192, 17241 => 35269, + 17242 => 27852, 17243 => 34588, 17244 => 23494, 17245 => 24130, 17246 => 26825, + 17247 => 30496, 17248 => 32501, 17249 => 20885, 17250 => 20813, 17251 => 21193, + 17252 => 23081, 17253 => 32517, 17254 => 38754, 17255 => 33495, 17256 => 25551, + 17257 => 30596, 17258 => 34256, 17259 => 31186, 17260 => 28218, 17261 => 24217, + 17262 => 22937, 17263 => 34065, 17264 => 28781, 17265 => 27665, 17266 => 25279, + 17267 => 30399, 17268 => 25935, 17269 => 24751, 17270 => 38397, 17271 => 26126, + 17272 => 34719, 17273 => 40483, 17274 => 38125, 17275 => 21517, 17276 => 21629, + 17277 => 35884, 17278 => 25720, 17441 => 25721, 17442 => 34321, 17443 => 27169, + 17444 => 33180, 17445 => 30952, 17446 => 25705, 17447 => 39764, 17448 => 25273, + 17449 => 26411, 17450 => 33707, 17451 => 22696, 17452 => 40664, 17453 => 27819, + 17454 => 28448, 17455 => 23518, 17456 => 38476, 17457 => 35851, 17458 => 29279, + 17459 => 26576, 17460 => 25287, 17461 => 29281, 17462 => 20137, 17463 => 22982, + 17464 => 27597, 17465 => 22675, 17466 => 26286, 17467 => 24149, 17468 => 21215, + 17469 => 24917, 17470 => 26408, 17471 => 30446, 17472 => 30566, 17473 => 29287, + 17474 => 31302, 17475 => 25343, 17476 => 21738, 17477 => 21584, 17478 => 38048, + 17479 => 37027, 17480 => 23068, 17481 => 32435, 17482 => 27670, 17483 => 20035, + 17484 => 22902, 17485 => 32784, 17486 => 22856, 17487 => 21335, 17488 => 30007, + 17489 => 38590, 17490 => 22218, 17491 => 25376, 17492 => 33041, 17493 => 24700, + 17494 => 38393, 17495 => 28118, 17496 => 21602, 17497 => 39297, 17498 => 20869, + 17499 => 23273, 17500 => 33021, 17501 => 22958, 17502 => 38675, 17503 => 20522, + 17504 => 27877, 17505 => 23612, 17506 => 25311, 17507 => 20320, 17508 => 21311, + 17509 => 33147, 17510 => 36870, 17511 => 28346, 17512 => 34091, 17513 => 25288, + 17514 => 24180, 17515 => 30910, 17516 => 25781, 17517 => 25467, 17518 => 24565, + 17519 => 23064, 17520 => 37247, 17521 => 40479, 17522 => 23615, 17523 => 25423, + 17524 => 32834, 17525 => 23421, 17526 => 21870, 17527 => 38218, 17528 => 38221, + 17529 => 28037, 17530 => 24744, 17531 => 26592, 17532 => 29406, 17533 => 20957, + 17534 => 23425, 17697 => 25319, 17698 => 27870, 17699 => 29275, 17700 => 25197, + 17701 => 38062, 17702 => 32445, 17703 => 33043, 17704 => 27987, 17705 => 20892, + 17706 => 24324, 17707 => 22900, 17708 => 21162, 17709 => 24594, 17710 => 22899, + 17711 => 26262, 17712 => 34384, 17713 => 30111, 17714 => 25386, 17715 => 25062, + 17716 => 31983, 17717 => 35834, 17718 => 21734, 17719 => 27431, 17720 => 40485, + 17721 => 27572, 17722 => 34261, 17723 => 21589, 17724 => 20598, 17725 => 27812, + 17726 => 21866, 17727 => 36276, 17728 => 29228, 17729 => 24085, 17730 => 24597, + 17731 => 29750, 17732 => 25293, 17733 => 25490, 17734 => 29260, 17735 => 24472, + 17736 => 28227, 17737 => 27966, 17738 => 25856, 17739 => 28504, 17740 => 30424, + 17741 => 30928, 17742 => 30460, 17743 => 30036, 17744 => 21028, 17745 => 21467, + 17746 => 20051, 17747 => 24222, 17748 => 26049, 17749 => 32810, 17750 => 32982, + 17751 => 25243, 17752 => 21638, 17753 => 21032, 17754 => 28846, 17755 => 34957, + 17756 => 36305, 17757 => 27873, 17758 => 21624, 17759 => 32986, 17760 => 22521, + 17761 => 35060, 17762 => 36180, 17763 => 38506, 17764 => 37197, 17765 => 20329, + 17766 => 27803, 17767 => 21943, 17768 => 30406, 17769 => 30768, 17770 => 25256, + 17771 => 28921, 17772 => 28558, 17773 => 24429, 17774 => 34028, 17775 => 26842, + 17776 => 30844, 17777 => 31735, 17778 => 33192, 17779 => 26379, 17780 => 40527, + 17781 => 25447, 17782 => 30896, 17783 => 22383, 17784 => 30738, 17785 => 38713, + 17786 => 25209, 17787 => 25259, 17788 => 21128, 17789 => 29749, 17790 => 27607, + 17953 => 21860, 17954 => 33086, 17955 => 30130, 17956 => 30382, 17957 => 21305, + 17958 => 30174, 17959 => 20731, 17960 => 23617, 17961 => 35692, 17962 => 31687, + 17963 => 20559, 17964 => 29255, 17965 => 39575, 17966 => 39128, 17967 => 28418, + 17968 => 29922, 17969 => 31080, 17970 => 25735, 17971 => 30629, 17972 => 25340, + 17973 => 39057, 17974 => 36139, 17975 => 21697, 17976 => 32856, 17977 => 20050, + 17978 => 22378, 17979 => 33529, 17980 => 33805, 17981 => 24179, 17982 => 20973, + 17983 => 29942, 17984 => 35780, 17985 => 23631, 17986 => 22369, 17987 => 27900, + 17988 => 39047, 17989 => 23110, 17990 => 30772, 17991 => 39748, 17992 => 36843, + 17993 => 31893, 17994 => 21078, 17995 => 25169, 17996 => 38138, 17997 => 20166, + 17998 => 33670, 17999 => 33889, 18000 => 33769, 18001 => 33970, 18002 => 22484, + 18003 => 26420, 18004 => 22275, 18005 => 26222, 18006 => 28006, 18007 => 35889, + 18008 => 26333, 18009 => 28689, 18010 => 26399, 18011 => 27450, 18012 => 26646, + 18013 => 25114, 18014 => 22971, 18015 => 19971, 18016 => 20932, 18017 => 28422, + 18018 => 26578, 18019 => 27791, 18020 => 20854, 18021 => 26827, 18022 => 22855, + 18023 => 27495, 18024 => 30054, 18025 => 23822, 18026 => 33040, 18027 => 40784, + 18028 => 26071, 18029 => 31048, 18030 => 31041, 18031 => 39569, 18032 => 36215, + 18033 => 23682, 18034 => 20062, 18035 => 20225, 18036 => 21551, 18037 => 22865, + 18038 => 30732, 18039 => 22120, 18040 => 27668, 18041 => 36804, 18042 => 24323, + 18043 => 27773, 18044 => 27875, 18045 => 35755, 18046 => 25488, 18209 => 24688, + 18210 => 27965, 18211 => 29301, 18212 => 25190, 18213 => 38030, 18214 => 38085, + 18215 => 21315, 18216 => 36801, 18217 => 31614, 18218 => 20191, 18219 => 35878, + 18220 => 20094, 18221 => 40660, 18222 => 38065, 18223 => 38067, 18224 => 21069, + 18225 => 28508, 18226 => 36963, 18227 => 27973, 18228 => 35892, 18229 => 22545, + 18230 => 23884, 18231 => 27424, 18232 => 27465, 18233 => 26538, 18234 => 21595, + 18235 => 33108, 18236 => 32652, 18237 => 22681, 18238 => 34103, 18239 => 24378, + 18240 => 25250, 18241 => 27207, 18242 => 38201, 18243 => 25970, 18244 => 24708, + 18245 => 26725, 18246 => 30631, 18247 => 20052, 18248 => 20392, 18249 => 24039, + 18250 => 38808, 18251 => 25772, 18252 => 32728, 18253 => 23789, 18254 => 20431, + 18255 => 31373, 18256 => 20999, 18257 => 33540, 18258 => 19988, 18259 => 24623, + 18260 => 31363, 18261 => 38054, 18262 => 20405, 18263 => 20146, 18264 => 31206, + 18265 => 29748, 18266 => 21220, 18267 => 33465, 18268 => 25810, 18269 => 31165, + 18270 => 23517, 18271 => 27777, 18272 => 38738, 18273 => 36731, 18274 => 27682, + 18275 => 20542, 18276 => 21375, 18277 => 28165, 18278 => 25806, 18279 => 26228, + 18280 => 27696, 18281 => 24773, 18282 => 39031, 18283 => 35831, 18284 => 24198, + 18285 => 29756, 18286 => 31351, 18287 => 31179, 18288 => 19992, 18289 => 37041, + 18290 => 29699, 18291 => 27714, 18292 => 22234, 18293 => 37195, 18294 => 27845, + 18295 => 36235, 18296 => 21306, 18297 => 34502, 18298 => 26354, 18299 => 36527, + 18300 => 23624, 18301 => 39537, 18302 => 28192, 18465 => 21462, 18466 => 23094, + 18467 => 40843, 18468 => 36259, 18469 => 21435, 18470 => 22280, 18471 => 39079, + 18472 => 26435, 18473 => 37275, 18474 => 27849, 18475 => 20840, 18476 => 30154, + 18477 => 25331, 18478 => 29356, 18479 => 21048, 18480 => 21149, 18481 => 32570, + 18482 => 28820, 18483 => 30264, 18484 => 21364, 18485 => 40522, 18486 => 27063, + 18487 => 30830, 18488 => 38592, 18489 => 35033, 18490 => 32676, 18491 => 28982, + 18492 => 29123, 18493 => 20873, 18494 => 26579, 18495 => 29924, 18496 => 22756, + 18497 => 25880, 18498 => 22199, 18499 => 35753, 18500 => 39286, 18501 => 25200, + 18502 => 32469, 18503 => 24825, 18504 => 28909, 18505 => 22764, 18506 => 20161, + 18507 => 20154, 18508 => 24525, 18509 => 38887, 18510 => 20219, 18511 => 35748, + 18512 => 20995, 18513 => 22922, 18514 => 32427, 18515 => 25172, 18516 => 20173, + 18517 => 26085, 18518 => 25102, 18519 => 33592, 18520 => 33993, 18521 => 33635, + 18522 => 34701, 18523 => 29076, 18524 => 28342, 18525 => 23481, 18526 => 32466, + 18527 => 20887, 18528 => 25545, 18529 => 26580, 18530 => 32905, 18531 => 33593, + 18532 => 34837, 18533 => 20754, 18534 => 23418, 18535 => 22914, 18536 => 36785, + 18537 => 20083, 18538 => 27741, 18539 => 20837, 18540 => 35109, 18541 => 36719, + 18542 => 38446, 18543 => 34122, 18544 => 29790, 18545 => 38160, 18546 => 38384, + 18547 => 28070, 18548 => 33509, 18549 => 24369, 18550 => 25746, 18551 => 27922, + 18552 => 33832, 18553 => 33134, 18554 => 40131, 18555 => 22622, 18556 => 36187, + 18557 => 19977, 18558 => 21441, 18721 => 20254, 18722 => 25955, 18723 => 26705, + 18724 => 21971, 18725 => 20007, 18726 => 25620, 18727 => 39578, 18728 => 25195, + 18729 => 23234, 18730 => 29791, 18731 => 33394, 18732 => 28073, 18733 => 26862, + 18734 => 20711, 18735 => 33678, 18736 => 30722, 18737 => 26432, 18738 => 21049, + 18739 => 27801, 18740 => 32433, 18741 => 20667, 18742 => 21861, 18743 => 29022, + 18744 => 31579, 18745 => 26194, 18746 => 29642, 18747 => 33515, 18748 => 26441, + 18749 => 23665, 18750 => 21024, 18751 => 29053, 18752 => 34923, 18753 => 38378, + 18754 => 38485, 18755 => 25797, 18756 => 36193, 18757 => 33203, 18758 => 21892, + 18759 => 27733, 18760 => 25159, 18761 => 32558, 18762 => 22674, 18763 => 20260, + 18764 => 21830, 18765 => 36175, 18766 => 26188, 18767 => 19978, 18768 => 23578, + 18769 => 35059, 18770 => 26786, 18771 => 25422, 18772 => 31245, 18773 => 28903, + 18774 => 33421, 18775 => 21242, 18776 => 38902, 18777 => 23569, 18778 => 21736, + 18779 => 37045, 18780 => 32461, 18781 => 22882, 18782 => 36170, 18783 => 34503, + 18784 => 33292, 18785 => 33293, 18786 => 36198, 18787 => 25668, 18788 => 23556, + 18789 => 24913, 18790 => 28041, 18791 => 31038, 18792 => 35774, 18793 => 30775, + 18794 => 30003, 18795 => 21627, 18796 => 20280, 18797 => 36523, 18798 => 28145, + 18799 => 23072, 18800 => 32453, 18801 => 31070, 18802 => 27784, 18803 => 23457, + 18804 => 23158, 18805 => 29978, 18806 => 32958, 18807 => 24910, 18808 => 28183, + 18809 => 22768, 18810 => 29983, 18811 => 29989, 18812 => 29298, 18813 => 21319, + 18814 => 32499, 18977 => 30465, 18978 => 30427, 18979 => 21097, 18980 => 32988, + 18981 => 22307, 18982 => 24072, 18983 => 22833, 18984 => 29422, 18985 => 26045, + 18986 => 28287, 18987 => 35799, 18988 => 23608, 18989 => 34417, 18990 => 21313, + 18991 => 30707, 18992 => 25342, 18993 => 26102, 18994 => 20160, 18995 => 39135, + 18996 => 34432, 18997 => 23454, 18998 => 35782, 18999 => 21490, 19000 => 30690, + 19001 => 20351, 19002 => 23630, 19003 => 39542, 19004 => 22987, 19005 => 24335, + 19006 => 31034, 19007 => 22763, 19008 => 19990, 19009 => 26623, 19010 => 20107, + 19011 => 25325, 19012 => 35475, 19013 => 36893, 19014 => 21183, 19015 => 26159, + 19016 => 21980, 19017 => 22124, 19018 => 36866, 19019 => 20181, 19020 => 20365, + 19021 => 37322, 19022 => 39280, 19023 => 27663, 19024 => 24066, 19025 => 24643, + 19026 => 23460, 19027 => 35270, 19028 => 35797, 19029 => 25910, 19030 => 25163, + 19031 => 39318, 19032 => 23432, 19033 => 23551, 19034 => 25480, 19035 => 21806, + 19036 => 21463, 19037 => 30246, 19038 => 20861, 19039 => 34092, 19040 => 26530, + 19041 => 26803, 19042 => 27530, 19043 => 25234, 19044 => 36755, 19045 => 21460, + 19046 => 33298, 19047 => 28113, 19048 => 30095, 19049 => 20070, 19050 => 36174, + 19051 => 23408, 19052 => 29087, 19053 => 34223, 19054 => 26257, 19055 => 26329, + 19056 => 32626, 19057 => 34560, 19058 => 40653, 19059 => 40736, 19060 => 23646, + 19061 => 26415, 19062 => 36848, 19063 => 26641, 19064 => 26463, 19065 => 25101, + 19066 => 31446, 19067 => 22661, 19068 => 24246, 19069 => 25968, 19070 => 28465, + 19233 => 24661, 19234 => 21047, 19235 => 32781, 19236 => 25684, 19237 => 34928, + 19238 => 29993, 19239 => 24069, 19240 => 26643, 19241 => 25332, 19242 => 38684, + 19243 => 21452, 19244 => 29245, 19245 => 35841, 19246 => 27700, 19247 => 30561, + 19248 => 31246, 19249 => 21550, 19250 => 30636, 19251 => 39034, 19252 => 33308, + 19253 => 35828, 19254 => 30805, 19255 => 26388, 19256 => 28865, 19257 => 26031, + 19258 => 25749, 19259 => 22070, 19260 => 24605, 19261 => 31169, 19262 => 21496, + 19263 => 19997, 19264 => 27515, 19265 => 32902, 19266 => 23546, 19267 => 21987, + 19268 => 22235, 19269 => 20282, 19270 => 20284, 19271 => 39282, 19272 => 24051, + 19273 => 26494, 19274 => 32824, 19275 => 24578, 19276 => 39042, 19277 => 36865, + 19278 => 23435, 19279 => 35772, 19280 => 35829, 19281 => 25628, 19282 => 33368, + 19283 => 25822, 19284 => 22013, 19285 => 33487, 19286 => 37221, 19287 => 20439, + 19288 => 32032, 19289 => 36895, 19290 => 31903, 19291 => 20723, 19292 => 22609, + 19293 => 28335, 19294 => 23487, 19295 => 35785, 19296 => 32899, 19297 => 37240, + 19298 => 33948, 19299 => 31639, 19300 => 34429, 19301 => 38539, 19302 => 38543, + 19303 => 32485, 19304 => 39635, 19305 => 30862, 19306 => 23681, 19307 => 31319, + 19308 => 36930, 19309 => 38567, 19310 => 31071, 19311 => 23385, 19312 => 25439, + 19313 => 31499, 19314 => 34001, 19315 => 26797, 19316 => 21766, 19317 => 32553, + 19318 => 29712, 19319 => 32034, 19320 => 38145, 19321 => 25152, 19322 => 22604, + 19323 => 20182, 19324 => 23427, 19325 => 22905, 19326 => 22612, 19489 => 29549, + 19490 => 25374, 19491 => 36427, 19492 => 36367, 19493 => 32974, 19494 => 33492, + 19495 => 25260, 19496 => 21488, 19497 => 27888, 19498 => 37214, 19499 => 22826, + 19500 => 24577, 19501 => 27760, 19502 => 22349, 19503 => 25674, 19504 => 36138, + 19505 => 30251, 19506 => 28393, 19507 => 22363, 19508 => 27264, 19509 => 30192, + 19510 => 28525, 19511 => 35885, 19512 => 35848, 19513 => 22374, 19514 => 27631, + 19515 => 34962, 19516 => 30899, 19517 => 25506, 19518 => 21497, 19519 => 28845, + 19520 => 27748, 19521 => 22616, 19522 => 25642, 19523 => 22530, 19524 => 26848, + 19525 => 33179, 19526 => 21776, 19527 => 31958, 19528 => 20504, 19529 => 36538, + 19530 => 28108, 19531 => 36255, 19532 => 28907, 19533 => 25487, 19534 => 28059, + 19535 => 28372, 19536 => 32486, 19537 => 33796, 19538 => 26691, 19539 => 36867, + 19540 => 28120, 19541 => 38518, 19542 => 35752, 19543 => 22871, 19544 => 29305, + 19545 => 34276, 19546 => 33150, 19547 => 30140, 19548 => 35466, 19549 => 26799, + 19550 => 21076, 19551 => 36386, 19552 => 38161, 19553 => 25552, 19554 => 39064, + 19555 => 36420, 19556 => 21884, 19557 => 20307, 19558 => 26367, 19559 => 22159, + 19560 => 24789, 19561 => 28053, 19562 => 21059, 19563 => 23625, 19564 => 22825, + 19565 => 28155, 19566 => 22635, 19567 => 30000, 19568 => 29980, 19569 => 24684, + 19570 => 33300, 19571 => 33094, 19572 => 25361, 19573 => 26465, 19574 => 36834, + 19575 => 30522, 19576 => 36339, 19577 => 36148, 19578 => 38081, 19579 => 24086, + 19580 => 21381, 19581 => 21548, 19582 => 28867, 19745 => 27712, 19746 => 24311, + 19747 => 20572, 19748 => 20141, 19749 => 24237, 19750 => 25402, 19751 => 33351, + 19752 => 36890, 19753 => 26704, 19754 => 37230, 19755 => 30643, 19756 => 21516, + 19757 => 38108, 19758 => 24420, 19759 => 31461, 19760 => 26742, 19761 => 25413, + 19762 => 31570, 19763 => 32479, 19764 => 30171, 19765 => 20599, 19766 => 25237, + 19767 => 22836, 19768 => 36879, 19769 => 20984, 19770 => 31171, 19771 => 31361, + 19772 => 22270, 19773 => 24466, 19774 => 36884, 19775 => 28034, 19776 => 23648, + 19777 => 22303, 19778 => 21520, 19779 => 20820, 19780 => 28237, 19781 => 22242, + 19782 => 25512, 19783 => 39059, 19784 => 33151, 19785 => 34581, 19786 => 35114, + 19787 => 36864, 19788 => 21534, 19789 => 23663, 19790 => 33216, 19791 => 25302, + 19792 => 25176, 19793 => 33073, 19794 => 40501, 19795 => 38464, 19796 => 39534, + 19797 => 39548, 19798 => 26925, 19799 => 22949, 19800 => 25299, 19801 => 21822, + 19802 => 25366, 19803 => 21703, 19804 => 34521, 19805 => 27964, 19806 => 23043, + 19807 => 29926, 19808 => 34972, 19809 => 27498, 19810 => 22806, 19811 => 35916, + 19812 => 24367, 19813 => 28286, 19814 => 29609, 19815 => 39037, 19816 => 20024, + 19817 => 28919, 19818 => 23436, 19819 => 30871, 19820 => 25405, 19821 => 26202, + 19822 => 30358, 19823 => 24779, 19824 => 23451, 19825 => 23113, 19826 => 19975, + 19827 => 33109, 19828 => 27754, 19829 => 29579, 19830 => 20129, 19831 => 26505, + 19832 => 32593, 19833 => 24448, 19834 => 26106, 19835 => 26395, 19836 => 24536, + 19837 => 22916, 19838 => 23041, 20001 => 24013, 20002 => 24494, 20003 => 21361, + 20004 => 38886, 20005 => 36829, 20006 => 26693, 20007 => 22260, 20008 => 21807, + 20009 => 24799, 20010 => 20026, 20011 => 28493, 20012 => 32500, 20013 => 33479, + 20014 => 33806, 20015 => 22996, 20016 => 20255, 20017 => 20266, 20018 => 23614, + 20019 => 32428, 20020 => 26410, 20021 => 34074, 20022 => 21619, 20023 => 30031, + 20024 => 32963, 20025 => 21890, 20026 => 39759, 20027 => 20301, 20028 => 28205, + 20029 => 35859, 20030 => 23561, 20031 => 24944, 20032 => 21355, 20033 => 30239, + 20034 => 28201, 20035 => 34442, 20036 => 25991, 20037 => 38395, 20038 => 32441, + 20039 => 21563, 20040 => 31283, 20041 => 32010, 20042 => 38382, 20043 => 21985, + 20044 => 32705, 20045 => 29934, 20046 => 25373, 20047 => 34583, 20048 => 28065, + 20049 => 31389, 20050 => 25105, 20051 => 26017, 20052 => 21351, 20053 => 25569, + 20054 => 27779, 20055 => 24043, 20056 => 21596, 20057 => 38056, 20058 => 20044, + 20059 => 27745, 20060 => 35820, 20061 => 23627, 20062 => 26080, 20063 => 33436, + 20064 => 26791, 20065 => 21566, 20066 => 21556, 20067 => 27595, 20068 => 27494, + 20069 => 20116, 20070 => 25410, 20071 => 21320, 20072 => 33310, 20073 => 20237, + 20074 => 20398, 20075 => 22366, 20076 => 25098, 20077 => 38654, 20078 => 26212, + 20079 => 29289, 20080 => 21247, 20081 => 21153, 20082 => 24735, 20083 => 35823, + 20084 => 26132, 20085 => 29081, 20086 => 26512, 20087 => 35199, 20088 => 30802, + 20089 => 30717, 20090 => 26224, 20091 => 22075, 20092 => 21560, 20093 => 38177, + 20094 => 29306, 20257 => 31232, 20258 => 24687, 20259 => 24076, 20260 => 24713, + 20261 => 33181, 20262 => 22805, 20263 => 24796, 20264 => 29060, 20265 => 28911, + 20266 => 28330, 20267 => 27728, 20268 => 29312, 20269 => 27268, 20270 => 34989, + 20271 => 24109, 20272 => 20064, 20273 => 23219, 20274 => 21916, 20275 => 38115, + 20276 => 27927, 20277 => 31995, 20278 => 38553, 20279 => 25103, 20280 => 32454, + 20281 => 30606, 20282 => 34430, 20283 => 21283, 20284 => 38686, 20285 => 36758, + 20286 => 26247, 20287 => 23777, 20288 => 20384, 20289 => 29421, 20290 => 19979, + 20291 => 21414, 20292 => 22799, 20293 => 21523, 20294 => 25472, 20295 => 38184, + 20296 => 20808, 20297 => 20185, 20298 => 40092, 20299 => 32420, 20300 => 21688, + 20301 => 36132, 20302 => 34900, 20303 => 33335, 20304 => 38386, 20305 => 28046, + 20306 => 24358, 20307 => 23244, 20308 => 26174, 20309 => 38505, 20310 => 29616, + 20311 => 29486, 20312 => 21439, 20313 => 33146, 20314 => 39301, 20315 => 32673, + 20316 => 23466, 20317 => 38519, 20318 => 38480, 20319 => 32447, 20320 => 30456, + 20321 => 21410, 20322 => 38262, 20323 => 39321, 20324 => 31665, 20325 => 35140, + 20326 => 28248, 20327 => 20065, 20328 => 32724, 20329 => 31077, 20330 => 35814, + 20331 => 24819, 20332 => 21709, 20333 => 20139, 20334 => 39033, 20335 => 24055, + 20336 => 27233, 20337 => 20687, 20338 => 21521, 20339 => 35937, 20340 => 33831, + 20341 => 30813, 20342 => 38660, 20343 => 21066, 20344 => 21742, 20345 => 22179, + 20346 => 38144, 20347 => 28040, 20348 => 23477, 20349 => 28102, 20350 => 26195, + 20513 => 23567, 20514 => 23389, 20515 => 26657, 20516 => 32918, 20517 => 21880, + 20518 => 31505, 20519 => 25928, 20520 => 26964, 20521 => 20123, 20522 => 27463, + 20523 => 34638, 20524 => 38795, 20525 => 21327, 20526 => 25375, 20527 => 25658, + 20528 => 37034, 20529 => 26012, 20530 => 32961, 20531 => 35856, 20532 => 20889, + 20533 => 26800, 20534 => 21368, 20535 => 34809, 20536 => 25032, 20537 => 27844, + 20538 => 27899, 20539 => 35874, 20540 => 23633, 20541 => 34218, 20542 => 33455, + 20543 => 38156, 20544 => 27427, 20545 => 36763, 20546 => 26032, 20547 => 24571, + 20548 => 24515, 20549 => 20449, 20550 => 34885, 20551 => 26143, 20552 => 33125, + 20553 => 29481, 20554 => 24826, 20555 => 20852, 20556 => 21009, 20557 => 22411, + 20558 => 24418, 20559 => 37026, 20560 => 34892, 20561 => 37266, 20562 => 24184, + 20563 => 26447, 20564 => 24615, 20565 => 22995, 20566 => 20804, 20567 => 20982, + 20568 => 33016, 20569 => 21256, 20570 => 27769, 20571 => 38596, 20572 => 29066, + 20573 => 20241, 20574 => 20462, 20575 => 32670, 20576 => 26429, 20577 => 21957, + 20578 => 38152, 20579 => 31168, 20580 => 34966, 20581 => 32483, 20582 => 22687, + 20583 => 25100, 20584 => 38656, 20585 => 34394, 20586 => 22040, 20587 => 39035, + 20588 => 24464, 20589 => 35768, 20590 => 33988, 20591 => 37207, 20592 => 21465, + 20593 => 26093, 20594 => 24207, 20595 => 30044, 20596 => 24676, 20597 => 32110, + 20598 => 23167, 20599 => 32490, 20600 => 32493, 20601 => 36713, 20602 => 21927, + 20603 => 23459, 20604 => 24748, 20605 => 26059, 20606 => 29572, 20769 => 36873, + 20770 => 30307, 20771 => 30505, 20772 => 32474, 20773 => 38772, 20774 => 34203, + 20775 => 23398, 20776 => 31348, 20777 => 38634, 20778 => 34880, 20779 => 21195, + 20780 => 29071, 20781 => 24490, 20782 => 26092, 20783 => 35810, 20784 => 23547, + 20785 => 39535, 20786 => 24033, 20787 => 27529, 20788 => 27739, 20789 => 35757, + 20790 => 35759, 20791 => 36874, 20792 => 36805, 20793 => 21387, 20794 => 25276, + 20795 => 40486, 20796 => 40493, 20797 => 21568, 20798 => 20011, 20799 => 33469, + 20800 => 29273, 20801 => 34460, 20802 => 23830, 20803 => 34905, 20804 => 28079, + 20805 => 38597, 20806 => 21713, 20807 => 20122, 20808 => 35766, 20809 => 28937, + 20810 => 21693, 20811 => 38409, 20812 => 28895, 20813 => 28153, 20814 => 30416, + 20815 => 20005, 20816 => 30740, 20817 => 34578, 20818 => 23721, 20819 => 24310, + 20820 => 35328, 20821 => 39068, 20822 => 38414, 20823 => 28814, 20824 => 27839, + 20825 => 22852, 20826 => 25513, 20827 => 30524, 20828 => 34893, 20829 => 28436, + 20830 => 33395, 20831 => 22576, 20832 => 29141, 20833 => 21388, 20834 => 30746, + 20835 => 38593, 20836 => 21761, 20837 => 24422, 20838 => 28976, 20839 => 23476, + 20840 => 35866, 20841 => 39564, 20842 => 27523, 20843 => 22830, 20844 => 40495, + 20845 => 31207, 20846 => 26472, 20847 => 25196, 20848 => 20335, 20849 => 30113, + 20850 => 32650, 20851 => 27915, 20852 => 38451, 20853 => 27687, 20854 => 20208, + 20855 => 30162, 20856 => 20859, 20857 => 26679, 20858 => 28478, 20859 => 36992, + 20860 => 33136, 20861 => 22934, 20862 => 29814, 21025 => 25671, 21026 => 23591, + 21027 => 36965, 21028 => 31377, 21029 => 35875, 21030 => 23002, 21031 => 21676, + 21032 => 33280, 21033 => 33647, 21034 => 35201, 21035 => 32768, 21036 => 26928, + 21037 => 22094, 21038 => 32822, 21039 => 29239, 21040 => 37326, 21041 => 20918, + 21042 => 20063, 21043 => 39029, 21044 => 25494, 21045 => 19994, 21046 => 21494, + 21047 => 26355, 21048 => 33099, 21049 => 22812, 21050 => 28082, 21051 => 19968, + 21052 => 22777, 21053 => 21307, 21054 => 25558, 21055 => 38129, 21056 => 20381, + 21057 => 20234, 21058 => 34915, 21059 => 39056, 21060 => 22839, 21061 => 36951, + 21062 => 31227, 21063 => 20202, 21064 => 33008, 21065 => 30097, 21066 => 27778, + 21067 => 23452, 21068 => 23016, 21069 => 24413, 21070 => 26885, 21071 => 34433, + 21072 => 20506, 21073 => 24050, 21074 => 20057, 21075 => 30691, 21076 => 20197, + 21077 => 33402, 21078 => 25233, 21079 => 26131, 21080 => 37009, 21081 => 23673, + 21082 => 20159, 21083 => 24441, 21084 => 33222, 21085 => 36920, 21086 => 32900, + 21087 => 30123, 21088 => 20134, 21089 => 35028, 21090 => 24847, 21091 => 27589, + 21092 => 24518, 21093 => 20041, 21094 => 30410, 21095 => 28322, 21096 => 35811, + 21097 => 35758, 21098 => 35850, 21099 => 35793, 21100 => 24322, 21101 => 32764, + 21102 => 32716, 21103 => 32462, 21104 => 33589, 21105 => 33643, 21106 => 22240, + 21107 => 27575, 21108 => 38899, 21109 => 38452, 21110 => 23035, 21111 => 21535, + 21112 => 38134, 21113 => 28139, 21114 => 23493, 21115 => 39278, 21116 => 23609, + 21117 => 24341, 21118 => 38544, 21281 => 21360, 21282 => 33521, 21283 => 27185, + 21284 => 23156, 21285 => 40560, 21286 => 24212, 21287 => 32552, 21288 => 33721, + 21289 => 33828, 21290 => 33829, 21291 => 33639, 21292 => 34631, 21293 => 36814, + 21294 => 36194, 21295 => 30408, 21296 => 24433, 21297 => 39062, 21298 => 30828, + 21299 => 26144, 21300 => 21727, 21301 => 25317, 21302 => 20323, 21303 => 33219, + 21304 => 30152, 21305 => 24248, 21306 => 38605, 21307 => 36362, 21308 => 34553, + 21309 => 21647, 21310 => 27891, 21311 => 28044, 21312 => 27704, 21313 => 24703, + 21314 => 21191, 21315 => 29992, 21316 => 24189, 21317 => 20248, 21318 => 24736, + 21319 => 24551, 21320 => 23588, 21321 => 30001, 21322 => 37038, 21323 => 38080, + 21324 => 29369, 21325 => 27833, 21326 => 28216, 21327 => 37193, 21328 => 26377, + 21329 => 21451, 21330 => 21491, 21331 => 20305, 21332 => 37321, 21333 => 35825, + 21334 => 21448, 21335 => 24188, 21336 => 36802, 21337 => 28132, 21338 => 20110, + 21339 => 30402, 21340 => 27014, 21341 => 34398, 21342 => 24858, 21343 => 33286, + 21344 => 20313, 21345 => 20446, 21346 => 36926, 21347 => 40060, 21348 => 24841, + 21349 => 28189, 21350 => 28180, 21351 => 38533, 21352 => 20104, 21353 => 23089, + 21354 => 38632, 21355 => 19982, 21356 => 23679, 21357 => 31161, 21358 => 23431, + 21359 => 35821, 21360 => 32701, 21361 => 29577, 21362 => 22495, 21363 => 33419, + 21364 => 37057, 21365 => 21505, 21366 => 36935, 21367 => 21947, 21368 => 23786, + 21369 => 24481, 21370 => 24840, 21371 => 27442, 21372 => 29425, 21373 => 32946, + 21374 => 35465, 21537 => 28020, 21538 => 23507, 21539 => 35029, 21540 => 39044, + 21541 => 35947, 21542 => 39533, 21543 => 40499, 21544 => 28170, 21545 => 20900, + 21546 => 20803, 21547 => 22435, 21548 => 34945, 21549 => 21407, 21550 => 25588, + 21551 => 36757, 21552 => 22253, 21553 => 21592, 21554 => 22278, 21555 => 29503, + 21556 => 28304, 21557 => 32536, 21558 => 36828, 21559 => 33489, 21560 => 24895, + 21561 => 24616, 21562 => 38498, 21563 => 26352, 21564 => 32422, 21565 => 36234, + 21566 => 36291, 21567 => 38053, 21568 => 23731, 21569 => 31908, 21570 => 26376, + 21571 => 24742, 21572 => 38405, 21573 => 32792, 21574 => 20113, 21575 => 37095, + 21576 => 21248, 21577 => 38504, 21578 => 20801, 21579 => 36816, 21580 => 34164, + 21581 => 37213, 21582 => 26197, 21583 => 38901, 21584 => 23381, 21585 => 21277, + 21586 => 30776, 21587 => 26434, 21588 => 26685, 21589 => 21705, 21590 => 28798, + 21591 => 23472, 21592 => 36733, 21593 => 20877, 21594 => 22312, 21595 => 21681, + 21596 => 25874, 21597 => 26242, 21598 => 36190, 21599 => 36163, 21600 => 33039, + 21601 => 33900, 21602 => 36973, 21603 => 31967, 21604 => 20991, 21605 => 34299, + 21606 => 26531, 21607 => 26089, 21608 => 28577, 21609 => 34468, 21610 => 36481, + 21611 => 22122, 21612 => 36896, 21613 => 30338, 21614 => 28790, 21615 => 29157, + 21616 => 36131, 21617 => 25321, 21618 => 21017, 21619 => 27901, 21620 => 36156, + 21621 => 24590, 21622 => 22686, 21623 => 24974, 21624 => 26366, 21625 => 36192, + 21626 => 25166, 21627 => 21939, 21628 => 28195, 21629 => 26413, 21630 => 36711, + 21793 => 38113, 21794 => 38392, 21795 => 30504, 21796 => 26629, 21797 => 27048, + 21798 => 21643, 21799 => 20045, 21800 => 28856, 21801 => 35784, 21802 => 25688, + 21803 => 25995, 21804 => 23429, 21805 => 31364, 21806 => 20538, 21807 => 23528, + 21808 => 30651, 21809 => 27617, 21810 => 35449, 21811 => 31896, 21812 => 27838, + 21813 => 30415, 21814 => 26025, 21815 => 36759, 21816 => 23853, 21817 => 23637, + 21818 => 34360, 21819 => 26632, 21820 => 21344, 21821 => 25112, 21822 => 31449, + 21823 => 28251, 21824 => 32509, 21825 => 27167, 21826 => 31456, 21827 => 24432, + 21828 => 28467, 21829 => 24352, 21830 => 25484, 21831 => 28072, 21832 => 26454, + 21833 => 19976, 21834 => 24080, 21835 => 36134, 21836 => 20183, 21837 => 32960, + 21838 => 30260, 21839 => 38556, 21840 => 25307, 21841 => 26157, 21842 => 25214, + 21843 => 27836, 21844 => 36213, 21845 => 29031, 21846 => 32617, 21847 => 20806, + 21848 => 32903, 21849 => 21484, 21850 => 36974, 21851 => 25240, 21852 => 21746, + 21853 => 34544, 21854 => 36761, 21855 => 32773, 21856 => 38167, 21857 => 34071, + 21858 => 36825, 21859 => 27993, 21860 => 29645, 21861 => 26015, 21862 => 30495, + 21863 => 29956, 21864 => 30759, 21865 => 33275, 21866 => 36126, 21867 => 38024, + 21868 => 20390, 21869 => 26517, 21870 => 30137, 21871 => 35786, 21872 => 38663, + 21873 => 25391, 21874 => 38215, 21875 => 38453, 21876 => 33976, 21877 => 25379, + 21878 => 30529, 21879 => 24449, 21880 => 29424, 21881 => 20105, 21882 => 24596, + 21883 => 25972, 21884 => 25327, 21885 => 27491, 21886 => 25919, 22049 => 24103, + 22050 => 30151, 22051 => 37073, 22052 => 35777, 22053 => 33437, 22054 => 26525, + 22055 => 25903, 22056 => 21553, 22057 => 34584, 22058 => 30693, 22059 => 32930, + 22060 => 33026, 22061 => 27713, 22062 => 20043, 22063 => 32455, 22064 => 32844, + 22065 => 30452, 22066 => 26893, 22067 => 27542, 22068 => 25191, 22069 => 20540, + 22070 => 20356, 22071 => 22336, 22072 => 25351, 22073 => 27490, 22074 => 36286, + 22075 => 21482, 22076 => 26088, 22077 => 32440, 22078 => 24535, 22079 => 25370, + 22080 => 25527, 22081 => 33267, 22082 => 33268, 22083 => 32622, 22084 => 24092, + 22085 => 23769, 22086 => 21046, 22087 => 26234, 22088 => 31209, 22089 => 31258, + 22090 => 36136, 22091 => 28825, 22092 => 30164, 22093 => 28382, 22094 => 27835, + 22095 => 31378, 22096 => 20013, 22097 => 30405, 22098 => 24544, 22099 => 38047, + 22100 => 34935, 22101 => 32456, 22102 => 31181, 22103 => 32959, 22104 => 37325, + 22105 => 20210, 22106 => 20247, 22107 => 33311, 22108 => 21608, 22109 => 24030, + 22110 => 27954, 22111 => 35788, 22112 => 31909, 22113 => 36724, 22114 => 32920, + 22115 => 24090, 22116 => 21650, 22117 => 30385, 22118 => 23449, 22119 => 26172, + 22120 => 39588, 22121 => 29664, 22122 => 26666, 22123 => 34523, 22124 => 26417, + 22125 => 29482, 22126 => 35832, 22127 => 35803, 22128 => 36880, 22129 => 31481, + 22130 => 28891, 22131 => 29038, 22132 => 25284, 22133 => 30633, 22134 => 22065, + 22135 => 20027, 22136 => 33879, 22137 => 26609, 22138 => 21161, 22139 => 34496, + 22140 => 36142, 22141 => 38136, 22142 => 31569, 22305 => 20303, 22306 => 27880, + 22307 => 31069, 22308 => 39547, 22309 => 25235, 22310 => 29226, 22311 => 25341, + 22312 => 19987, 22313 => 30742, 22314 => 36716, 22315 => 25776, 22316 => 36186, + 22317 => 31686, 22318 => 26729, 22319 => 24196, 22320 => 35013, 22321 => 22918, + 22322 => 25758, 22323 => 22766, 22324 => 29366, 22325 => 26894, 22326 => 38181, + 22327 => 36861, 22328 => 36184, 22329 => 22368, 22330 => 32512, 22331 => 35846, + 22332 => 20934, 22333 => 25417, 22334 => 25305, 22335 => 21331, 22336 => 26700, + 22337 => 29730, 22338 => 33537, 22339 => 37196, 22340 => 21828, 22341 => 30528, + 22342 => 28796, 22343 => 27978, 22344 => 20857, 22345 => 21672, 22346 => 36164, + 22347 => 23039, 22348 => 28363, 22349 => 28100, 22350 => 23388, 22351 => 32043, + 22352 => 20180, 22353 => 31869, 22354 => 28371, 22355 => 23376, 22356 => 33258, + 22357 => 28173, 22358 => 23383, 22359 => 39683, 22360 => 26837, 22361 => 36394, + 22362 => 23447, 22363 => 32508, 22364 => 24635, 22365 => 32437, 22366 => 37049, + 22367 => 36208, 22368 => 22863, 22369 => 25549, 22370 => 31199, 22371 => 36275, + 22372 => 21330, 22373 => 26063, 22374 => 31062, 22375 => 35781, 22376 => 38459, + 22377 => 32452, 22378 => 38075, 22379 => 32386, 22380 => 22068, 22381 => 37257, + 22382 => 26368, 22383 => 32618, 22384 => 23562, 22385 => 36981, 22386 => 26152, + 22387 => 24038, 22388 => 20304, 22389 => 26590, 22390 => 20570, 22391 => 20316, + 22392 => 22352, 22393 => 24231, 22561 => 20109, 22562 => 19980, 22563 => 20800, + 22564 => 19984, 22565 => 24319, 22566 => 21317, 22567 => 19989, 22568 => 20120, + 22569 => 19998, 22570 => 39730, 22571 => 23404, 22572 => 22121, 22573 => 20008, + 22574 => 31162, 22575 => 20031, 22576 => 21269, 22577 => 20039, 22578 => 22829, + 22579 => 29243, 22580 => 21358, 22581 => 27664, 22582 => 22239, 22583 => 32996, + 22584 => 39319, 22585 => 27603, 22586 => 30590, 22587 => 40727, 22588 => 20022, + 22589 => 20127, 22590 => 40720, 22591 => 20060, 22592 => 20073, 22593 => 20115, + 22594 => 33416, 22595 => 23387, 22596 => 21868, 22597 => 22031, 22598 => 20164, + 22599 => 21389, 22600 => 21405, 22601 => 21411, 22602 => 21413, 22603 => 21422, + 22604 => 38757, 22605 => 36189, 22606 => 21274, 22607 => 21493, 22608 => 21286, + 22609 => 21294, 22610 => 21310, 22611 => 36188, 22612 => 21350, 22613 => 21347, + 22614 => 20994, 22615 => 21000, 22616 => 21006, 22617 => 21037, 22618 => 21043, + 22619 => 21055, 22620 => 21056, 22621 => 21068, 22622 => 21086, 22623 => 21089, + 22624 => 21084, 22625 => 33967, 22626 => 21117, 22627 => 21122, 22628 => 21121, + 22629 => 21136, 22630 => 21139, 22631 => 20866, 22632 => 32596, 22633 => 20155, + 22634 => 20163, 22635 => 20169, 22636 => 20162, 22637 => 20200, 22638 => 20193, + 22639 => 20203, 22640 => 20190, 22641 => 20251, 22642 => 20211, 22643 => 20258, + 22644 => 20324, 22645 => 20213, 22646 => 20261, 22647 => 20263, 22648 => 20233, + 22649 => 20267, 22650 => 20318, 22651 => 20327, 22652 => 25912, 22653 => 20314, + 22654 => 20317, 22817 => 20319, 22818 => 20311, 22819 => 20274, 22820 => 20285, + 22821 => 20342, 22822 => 20340, 22823 => 20369, 22824 => 20361, 22825 => 20355, + 22826 => 20367, 22827 => 20350, 22828 => 20347, 22829 => 20394, 22830 => 20348, + 22831 => 20396, 22832 => 20372, 22833 => 20454, 22834 => 20456, 22835 => 20458, + 22836 => 20421, 22837 => 20442, 22838 => 20451, 22839 => 20444, 22840 => 20433, + 22841 => 20447, 22842 => 20472, 22843 => 20521, 22844 => 20556, 22845 => 20467, + 22846 => 20524, 22847 => 20495, 22848 => 20526, 22849 => 20525, 22850 => 20478, + 22851 => 20508, 22852 => 20492, 22853 => 20517, 22854 => 20520, 22855 => 20606, + 22856 => 20547, 22857 => 20565, 22858 => 20552, 22859 => 20558, 22860 => 20588, + 22861 => 20603, 22862 => 20645, 22863 => 20647, 22864 => 20649, 22865 => 20666, + 22866 => 20694, 22867 => 20742, 22868 => 20717, 22869 => 20716, 22870 => 20710, + 22871 => 20718, 22872 => 20743, 22873 => 20747, 22874 => 20189, 22875 => 27709, + 22876 => 20312, 22877 => 20325, 22878 => 20430, 22879 => 40864, 22880 => 27718, + 22881 => 31860, 22882 => 20846, 22883 => 24061, 22884 => 40649, 22885 => 39320, + 22886 => 20865, 22887 => 22804, 22888 => 21241, 22889 => 21261, 22890 => 35335, + 22891 => 21264, 22892 => 20971, 22893 => 22809, 22894 => 20821, 22895 => 20128, + 22896 => 20822, 22897 => 20147, 22898 => 34926, 22899 => 34980, 22900 => 20149, + 22901 => 33044, 22902 => 35026, 22903 => 31104, 22904 => 23348, 22905 => 34819, + 22906 => 32696, 22907 => 20907, 22908 => 20913, 22909 => 20925, 22910 => 20924, + 23073 => 20935, 23074 => 20886, 23075 => 20898, 23076 => 20901, 23077 => 35744, + 23078 => 35750, 23079 => 35751, 23080 => 35754, 23081 => 35764, 23082 => 35765, + 23083 => 35767, 23084 => 35778, 23085 => 35779, 23086 => 35787, 23087 => 35791, + 23088 => 35790, 23089 => 35794, 23090 => 35795, 23091 => 35796, 23092 => 35798, + 23093 => 35800, 23094 => 35801, 23095 => 35804, 23096 => 35807, 23097 => 35808, + 23098 => 35812, 23099 => 35816, 23100 => 35817, 23101 => 35822, 23102 => 35824, + 23103 => 35827, 23104 => 35830, 23105 => 35833, 23106 => 35836, 23107 => 35839, + 23108 => 35840, 23109 => 35842, 23110 => 35844, 23111 => 35847, 23112 => 35852, + 23113 => 35855, 23114 => 35857, 23115 => 35858, 23116 => 35860, 23117 => 35861, + 23118 => 35862, 23119 => 35865, 23120 => 35867, 23121 => 35864, 23122 => 35869, + 23123 => 35871, 23124 => 35872, 23125 => 35873, 23126 => 35877, 23127 => 35879, + 23128 => 35882, 23129 => 35883, 23130 => 35886, 23131 => 35887, 23132 => 35890, + 23133 => 35891, 23134 => 35893, 23135 => 35894, 23136 => 21353, 23137 => 21370, + 23138 => 38429, 23139 => 38434, 23140 => 38433, 23141 => 38449, 23142 => 38442, + 23143 => 38461, 23144 => 38460, 23145 => 38466, 23146 => 38473, 23147 => 38484, + 23148 => 38495, 23149 => 38503, 23150 => 38508, 23151 => 38514, 23152 => 38516, + 23153 => 38536, 23154 => 38541, 23155 => 38551, 23156 => 38576, 23157 => 37015, + 23158 => 37019, 23159 => 37021, 23160 => 37017, 23161 => 37036, 23162 => 37025, + 23163 => 37044, 23164 => 37043, 23165 => 37046, 23166 => 37050, 23329 => 37048, + 23330 => 37040, 23331 => 37071, 23332 => 37061, 23333 => 37054, 23334 => 37072, + 23335 => 37060, 23336 => 37063, 23337 => 37075, 23338 => 37094, 23339 => 37090, + 23340 => 37084, 23341 => 37079, 23342 => 37083, 23343 => 37099, 23344 => 37103, + 23345 => 37118, 23346 => 37124, 23347 => 37154, 23348 => 37150, 23349 => 37155, + 23350 => 37169, 23351 => 37167, 23352 => 37177, 23353 => 37187, 23354 => 37190, + 23355 => 21005, 23356 => 22850, 23357 => 21154, 23358 => 21164, 23359 => 21165, + 23360 => 21182, 23361 => 21759, 23362 => 21200, 23363 => 21206, 23364 => 21232, + 23365 => 21471, 23366 => 29166, 23367 => 30669, 23368 => 24308, 23369 => 20981, + 23370 => 20988, 23371 => 39727, 23372 => 21430, 23373 => 24321, 23374 => 30042, + 23375 => 24047, 23376 => 22348, 23377 => 22441, 23378 => 22433, 23379 => 22654, + 23380 => 22716, 23381 => 22725, 23382 => 22737, 23383 => 22313, 23384 => 22316, + 23385 => 22314, 23386 => 22323, 23387 => 22329, 23388 => 22318, 23389 => 22319, + 23390 => 22364, 23391 => 22331, 23392 => 22338, 23393 => 22377, 23394 => 22405, + 23395 => 22379, 23396 => 22406, 23397 => 22396, 23398 => 22395, 23399 => 22376, + 23400 => 22381, 23401 => 22390, 23402 => 22387, 23403 => 22445, 23404 => 22436, + 23405 => 22412, 23406 => 22450, 23407 => 22479, 23408 => 22439, 23409 => 22452, + 23410 => 22419, 23411 => 22432, 23412 => 22485, 23413 => 22488, 23414 => 22490, + 23415 => 22489, 23416 => 22482, 23417 => 22456, 23418 => 22516, 23419 => 22511, + 23420 => 22520, 23421 => 22500, 23422 => 22493, 23585 => 22539, 23586 => 22541, + 23587 => 22525, 23588 => 22509, 23589 => 22528, 23590 => 22558, 23591 => 22553, + 23592 => 22596, 23593 => 22560, 23594 => 22629, 23595 => 22636, 23596 => 22657, + 23597 => 22665, 23598 => 22682, 23599 => 22656, 23600 => 39336, 23601 => 40729, + 23602 => 25087, 23603 => 33401, 23604 => 33405, 23605 => 33407, 23606 => 33423, + 23607 => 33418, 23608 => 33448, 23609 => 33412, 23610 => 33422, 23611 => 33425, + 23612 => 33431, 23613 => 33433, 23614 => 33451, 23615 => 33464, 23616 => 33470, + 23617 => 33456, 23618 => 33480, 23619 => 33482, 23620 => 33507, 23621 => 33432, + 23622 => 33463, 23623 => 33454, 23624 => 33483, 23625 => 33484, 23626 => 33473, + 23627 => 33449, 23628 => 33460, 23629 => 33441, 23630 => 33450, 23631 => 33439, + 23632 => 33476, 23633 => 33486, 23634 => 33444, 23635 => 33505, 23636 => 33545, + 23637 => 33527, 23638 => 33508, 23639 => 33551, 23640 => 33543, 23641 => 33500, + 23642 => 33524, 23643 => 33490, 23644 => 33496, 23645 => 33548, 23646 => 33531, + 23647 => 33491, 23648 => 33553, 23649 => 33562, 23650 => 33542, 23651 => 33556, + 23652 => 33557, 23653 => 33504, 23654 => 33493, 23655 => 33564, 23656 => 33617, + 23657 => 33627, 23658 => 33628, 23659 => 33544, 23660 => 33682, 23661 => 33596, + 23662 => 33588, 23663 => 33585, 23664 => 33691, 23665 => 33630, 23666 => 33583, + 23667 => 33615, 23668 => 33607, 23669 => 33603, 23670 => 33631, 23671 => 33600, + 23672 => 33559, 23673 => 33632, 23674 => 33581, 23675 => 33594, 23676 => 33587, + 23677 => 33638, 23678 => 33637, 23841 => 33640, 23842 => 33563, 23843 => 33641, + 23844 => 33644, 23845 => 33642, 23846 => 33645, 23847 => 33646, 23848 => 33712, + 23849 => 33656, 23850 => 33715, 23851 => 33716, 23852 => 33696, 23853 => 33706, + 23854 => 33683, 23855 => 33692, 23856 => 33669, 23857 => 33660, 23858 => 33718, + 23859 => 33705, 23860 => 33661, 23861 => 33720, 23862 => 33659, 23863 => 33688, + 23864 => 33694, 23865 => 33704, 23866 => 33722, 23867 => 33724, 23868 => 33729, + 23869 => 33793, 23870 => 33765, 23871 => 33752, 23872 => 22535, 23873 => 33816, + 23874 => 33803, 23875 => 33757, 23876 => 33789, 23877 => 33750, 23878 => 33820, + 23879 => 33848, 23880 => 33809, 23881 => 33798, 23882 => 33748, 23883 => 33759, + 23884 => 33807, 23885 => 33795, 23886 => 33784, 23887 => 33785, 23888 => 33770, + 23889 => 33733, 23890 => 33728, 23891 => 33830, 23892 => 33776, 23893 => 33761, + 23894 => 33884, 23895 => 33873, 23896 => 33882, 23897 => 33881, 23898 => 33907, + 23899 => 33927, 23900 => 33928, 23901 => 33914, 23902 => 33929, 23903 => 33912, + 23904 => 33852, 23905 => 33862, 23906 => 33897, 23907 => 33910, 23908 => 33932, + 23909 => 33934, 23910 => 33841, 23911 => 33901, 23912 => 33985, 23913 => 33997, + 23914 => 34000, 23915 => 34022, 23916 => 33981, 23917 => 34003, 23918 => 33994, + 23919 => 33983, 23920 => 33978, 23921 => 34016, 23922 => 33953, 23923 => 33977, + 23924 => 33972, 23925 => 33943, 23926 => 34021, 23927 => 34019, 23928 => 34060, + 23929 => 29965, 23930 => 34104, 23931 => 34032, 23932 => 34105, 23933 => 34079, + 23934 => 34106, 24097 => 34134, 24098 => 34107, 24099 => 34047, 24100 => 34044, + 24101 => 34137, 24102 => 34120, 24103 => 34152, 24104 => 34148, 24105 => 34142, + 24106 => 34170, 24107 => 30626, 24108 => 34115, 24109 => 34162, 24110 => 34171, + 24111 => 34212, 24112 => 34216, 24113 => 34183, 24114 => 34191, 24115 => 34169, + 24116 => 34222, 24117 => 34204, 24118 => 34181, 24119 => 34233, 24120 => 34231, + 24121 => 34224, 24122 => 34259, 24123 => 34241, 24124 => 34268, 24125 => 34303, + 24126 => 34343, 24127 => 34309, 24128 => 34345, 24129 => 34326, 24130 => 34364, + 24131 => 24318, 24132 => 24328, 24133 => 22844, 24134 => 22849, 24135 => 32823, + 24136 => 22869, 24137 => 22874, 24138 => 22872, 24139 => 21263, 24140 => 23586, + 24141 => 23589, 24142 => 23596, 24143 => 23604, 24144 => 25164, 24145 => 25194, + 24146 => 25247, 24147 => 25275, 24148 => 25290, 24149 => 25306, 24150 => 25303, + 24151 => 25326, 24152 => 25378, 24153 => 25334, 24154 => 25401, 24155 => 25419, + 24156 => 25411, 24157 => 25517, 24158 => 25590, 24159 => 25457, 24160 => 25466, + 24161 => 25486, 24162 => 25524, 24163 => 25453, 24164 => 25516, 24165 => 25482, + 24166 => 25449, 24167 => 25518, 24168 => 25532, 24169 => 25586, 24170 => 25592, + 24171 => 25568, 24172 => 25599, 24173 => 25540, 24174 => 25566, 24175 => 25550, + 24176 => 25682, 24177 => 25542, 24178 => 25534, 24179 => 25669, 24180 => 25665, + 24181 => 25611, 24182 => 25627, 24183 => 25632, 24184 => 25612, 24185 => 25638, + 24186 => 25633, 24187 => 25694, 24188 => 25732, 24189 => 25709, 24190 => 25750, + 24353 => 25722, 24354 => 25783, 24355 => 25784, 24356 => 25753, 24357 => 25786, + 24358 => 25792, 24359 => 25808, 24360 => 25815, 24361 => 25828, 24362 => 25826, + 24363 => 25865, 24364 => 25893, 24365 => 25902, 24366 => 24331, 24367 => 24530, + 24368 => 29977, 24369 => 24337, 24370 => 21343, 24371 => 21489, 24372 => 21501, + 24373 => 21481, 24374 => 21480, 24375 => 21499, 24376 => 21522, 24377 => 21526, + 24378 => 21510, 24379 => 21579, 24380 => 21586, 24381 => 21587, 24382 => 21588, + 24383 => 21590, 24384 => 21571, 24385 => 21537, 24386 => 21591, 24387 => 21593, + 24388 => 21539, 24389 => 21554, 24390 => 21634, 24391 => 21652, 24392 => 21623, + 24393 => 21617, 24394 => 21604, 24395 => 21658, 24396 => 21659, 24397 => 21636, + 24398 => 21622, 24399 => 21606, 24400 => 21661, 24401 => 21712, 24402 => 21677, + 24403 => 21698, 24404 => 21684, 24405 => 21714, 24406 => 21671, 24407 => 21670, + 24408 => 21715, 24409 => 21716, 24410 => 21618, 24411 => 21667, 24412 => 21717, + 24413 => 21691, 24414 => 21695, 24415 => 21708, 24416 => 21721, 24417 => 21722, + 24418 => 21724, 24419 => 21673, 24420 => 21674, 24421 => 21668, 24422 => 21725, + 24423 => 21711, 24424 => 21726, 24425 => 21787, 24426 => 21735, 24427 => 21792, + 24428 => 21757, 24429 => 21780, 24430 => 21747, 24431 => 21794, 24432 => 21795, + 24433 => 21775, 24434 => 21777, 24435 => 21799, 24436 => 21802, 24437 => 21863, + 24438 => 21903, 24439 => 21941, 24440 => 21833, 24441 => 21869, 24442 => 21825, + 24443 => 21845, 24444 => 21823, 24445 => 21840, 24446 => 21820, 24609 => 21815, + 24610 => 21846, 24611 => 21877, 24612 => 21878, 24613 => 21879, 24614 => 21811, + 24615 => 21808, 24616 => 21852, 24617 => 21899, 24618 => 21970, 24619 => 21891, + 24620 => 21937, 24621 => 21945, 24622 => 21896, 24623 => 21889, 24624 => 21919, + 24625 => 21886, 24626 => 21974, 24627 => 21905, 24628 => 21883, 24629 => 21983, + 24630 => 21949, 24631 => 21950, 24632 => 21908, 24633 => 21913, 24634 => 21994, + 24635 => 22007, 24636 => 21961, 24637 => 22047, 24638 => 21969, 24639 => 21995, + 24640 => 21996, 24641 => 21972, 24642 => 21990, 24643 => 21981, 24644 => 21956, + 24645 => 21999, 24646 => 21989, 24647 => 22002, 24648 => 22003, 24649 => 21964, + 24650 => 21965, 24651 => 21992, 24652 => 22005, 24653 => 21988, 24654 => 36756, + 24655 => 22046, 24656 => 22024, 24657 => 22028, 24658 => 22017, 24659 => 22052, + 24660 => 22051, 24661 => 22014, 24662 => 22016, 24663 => 22055, 24664 => 22061, + 24665 => 22104, 24666 => 22073, 24667 => 22103, 24668 => 22060, 24669 => 22093, + 24670 => 22114, 24671 => 22105, 24672 => 22108, 24673 => 22092, 24674 => 22100, + 24675 => 22150, 24676 => 22116, 24677 => 22129, 24678 => 22123, 24679 => 22139, + 24680 => 22140, 24681 => 22149, 24682 => 22163, 24683 => 22191, 24684 => 22228, + 24685 => 22231, 24686 => 22237, 24687 => 22241, 24688 => 22261, 24689 => 22251, + 24690 => 22265, 24691 => 22271, 24692 => 22276, 24693 => 22282, 24694 => 22281, + 24695 => 22300, 24696 => 24079, 24697 => 24089, 24698 => 24084, 24699 => 24081, + 24700 => 24113, 24701 => 24123, 24702 => 24124, 24865 => 24119, 24866 => 24132, + 24867 => 24148, 24868 => 24155, 24869 => 24158, 24870 => 24161, 24871 => 23692, + 24872 => 23674, 24873 => 23693, 24874 => 23696, 24875 => 23702, 24876 => 23688, + 24877 => 23704, 24878 => 23705, 24879 => 23697, 24880 => 23706, 24881 => 23708, + 24882 => 23733, 24883 => 23714, 24884 => 23741, 24885 => 23724, 24886 => 23723, + 24887 => 23729, 24888 => 23715, 24889 => 23745, 24890 => 23735, 24891 => 23748, + 24892 => 23762, 24893 => 23780, 24894 => 23755, 24895 => 23781, 24896 => 23810, + 24897 => 23811, 24898 => 23847, 24899 => 23846, 24900 => 23854, 24901 => 23844, + 24902 => 23838, 24903 => 23814, 24904 => 23835, 24905 => 23896, 24906 => 23870, + 24907 => 23860, 24908 => 23869, 24909 => 23916, 24910 => 23899, 24911 => 23919, + 24912 => 23901, 24913 => 23915, 24914 => 23883, 24915 => 23882, 24916 => 23913, + 24917 => 23924, 24918 => 23938, 24919 => 23961, 24920 => 23965, 24921 => 35955, + 24922 => 23991, 24923 => 24005, 24924 => 24435, 24925 => 24439, 24926 => 24450, + 24927 => 24455, 24928 => 24457, 24929 => 24460, 24930 => 24469, 24931 => 24473, + 24932 => 24476, 24933 => 24488, 24934 => 24493, 24935 => 24501, 24936 => 24508, + 24937 => 34914, 24938 => 24417, 24939 => 29357, 24940 => 29360, 24941 => 29364, + 24942 => 29367, 24943 => 29368, 24944 => 29379, 24945 => 29377, 24946 => 29390, + 24947 => 29389, 24948 => 29394, 24949 => 29416, 24950 => 29423, 24951 => 29417, + 24952 => 29426, 24953 => 29428, 24954 => 29431, 24955 => 29441, 24956 => 29427, + 24957 => 29443, 24958 => 29434, 25121 => 29435, 25122 => 29463, 25123 => 29459, + 25124 => 29473, 25125 => 29450, 25126 => 29470, 25127 => 29469, 25128 => 29461, + 25129 => 29474, 25130 => 29497, 25131 => 29477, 25132 => 29484, 25133 => 29496, + 25134 => 29489, 25135 => 29520, 25136 => 29517, 25137 => 29527, 25138 => 29536, + 25139 => 29548, 25140 => 29551, 25141 => 29566, 25142 => 33307, 25143 => 22821, + 25144 => 39143, 25145 => 22820, 25146 => 22786, 25147 => 39267, 25148 => 39271, + 25149 => 39272, 25150 => 39273, 25151 => 39274, 25152 => 39275, 25153 => 39276, + 25154 => 39284, 25155 => 39287, 25156 => 39293, 25157 => 39296, 25158 => 39300, + 25159 => 39303, 25160 => 39306, 25161 => 39309, 25162 => 39312, 25163 => 39313, + 25164 => 39315, 25165 => 39316, 25166 => 39317, 25167 => 24192, 25168 => 24209, + 25169 => 24203, 25170 => 24214, 25171 => 24229, 25172 => 24224, 25173 => 24249, + 25174 => 24245, 25175 => 24254, 25176 => 24243, 25177 => 36179, 25178 => 24274, + 25179 => 24273, 25180 => 24283, 25181 => 24296, 25182 => 24298, 25183 => 33210, + 25184 => 24516, 25185 => 24521, 25186 => 24534, 25187 => 24527, 25188 => 24579, + 25189 => 24558, 25190 => 24580, 25191 => 24545, 25192 => 24548, 25193 => 24574, + 25194 => 24581, 25195 => 24582, 25196 => 24554, 25197 => 24557, 25198 => 24568, + 25199 => 24601, 25200 => 24629, 25201 => 24614, 25202 => 24603, 25203 => 24591, + 25204 => 24589, 25205 => 24617, 25206 => 24619, 25207 => 24586, 25208 => 24639, + 25209 => 24609, 25210 => 24696, 25211 => 24697, 25212 => 24699, 25213 => 24698, + 25214 => 24642, 25377 => 24682, 25378 => 24701, 25379 => 24726, 25380 => 24730, + 25381 => 24749, 25382 => 24733, 25383 => 24707, 25384 => 24722, 25385 => 24716, + 25386 => 24731, 25387 => 24812, 25388 => 24763, 25389 => 24753, 25390 => 24797, + 25391 => 24792, 25392 => 24774, 25393 => 24794, 25394 => 24756, 25395 => 24864, + 25396 => 24870, 25397 => 24853, 25398 => 24867, 25399 => 24820, 25400 => 24832, + 25401 => 24846, 25402 => 24875, 25403 => 24906, 25404 => 24949, 25405 => 25004, + 25406 => 24980, 25407 => 24999, 25408 => 25015, 25409 => 25044, 25410 => 25077, + 25411 => 24541, 25412 => 38579, 25413 => 38377, 25414 => 38379, 25415 => 38385, + 25416 => 38387, 25417 => 38389, 25418 => 38390, 25419 => 38396, 25420 => 38398, + 25421 => 38403, 25422 => 38404, 25423 => 38406, 25424 => 38408, 25425 => 38410, + 25426 => 38411, 25427 => 38412, 25428 => 38413, 25429 => 38415, 25430 => 38418, + 25431 => 38421, 25432 => 38422, 25433 => 38423, 25434 => 38425, 25435 => 38426, + 25436 => 20012, 25437 => 29247, 25438 => 25109, 25439 => 27701, 25440 => 27732, + 25441 => 27740, 25442 => 27722, 25443 => 27811, 25444 => 27781, 25445 => 27792, + 25446 => 27796, 25447 => 27788, 25448 => 27752, 25449 => 27753, 25450 => 27764, + 25451 => 27766, 25452 => 27782, 25453 => 27817, 25454 => 27856, 25455 => 27860, + 25456 => 27821, 25457 => 27895, 25458 => 27896, 25459 => 27889, 25460 => 27863, + 25461 => 27826, 25462 => 27872, 25463 => 27862, 25464 => 27898, 25465 => 27883, + 25466 => 27886, 25467 => 27825, 25468 => 27859, 25469 => 27887, 25470 => 27902, + 25633 => 27961, 25634 => 27943, 25635 => 27916, 25636 => 27971, 25637 => 27976, + 25638 => 27911, 25639 => 27908, 25640 => 27929, 25641 => 27918, 25642 => 27947, + 25643 => 27981, 25644 => 27950, 25645 => 27957, 25646 => 27930, 25647 => 27983, + 25648 => 27986, 25649 => 27988, 25650 => 27955, 25651 => 28049, 25652 => 28015, + 25653 => 28062, 25654 => 28064, 25655 => 27998, 25656 => 28051, 25657 => 28052, + 25658 => 27996, 25659 => 28000, 25660 => 28028, 25661 => 28003, 25662 => 28186, + 25663 => 28103, 25664 => 28101, 25665 => 28126, 25666 => 28174, 25667 => 28095, + 25668 => 28128, 25669 => 28177, 25670 => 28134, 25671 => 28125, 25672 => 28121, + 25673 => 28182, 25674 => 28075, 25675 => 28172, 25676 => 28078, 25677 => 28203, + 25678 => 28270, 25679 => 28238, 25680 => 28267, 25681 => 28338, 25682 => 28255, + 25683 => 28294, 25684 => 28243, 25685 => 28244, 25686 => 28210, 25687 => 28197, + 25688 => 28228, 25689 => 28383, 25690 => 28337, 25691 => 28312, 25692 => 28384, + 25693 => 28461, 25694 => 28386, 25695 => 28325, 25696 => 28327, 25697 => 28349, + 25698 => 28347, 25699 => 28343, 25700 => 28375, 25701 => 28340, 25702 => 28367, + 25703 => 28303, 25704 => 28354, 25705 => 28319, 25706 => 28514, 25707 => 28486, + 25708 => 28487, 25709 => 28452, 25710 => 28437, 25711 => 28409, 25712 => 28463, + 25713 => 28470, 25714 => 28491, 25715 => 28532, 25716 => 28458, 25717 => 28425, + 25718 => 28457, 25719 => 28553, 25720 => 28557, 25721 => 28556, 25722 => 28536, + 25723 => 28530, 25724 => 28540, 25725 => 28538, 25726 => 28625, 25889 => 28617, + 25890 => 28583, 25891 => 28601, 25892 => 28598, 25893 => 28610, 25894 => 28641, + 25895 => 28654, 25896 => 28638, 25897 => 28640, 25898 => 28655, 25899 => 28698, + 25900 => 28707, 25901 => 28699, 25902 => 28729, 25903 => 28725, 25904 => 28751, + 25905 => 28766, 25906 => 23424, 25907 => 23428, 25908 => 23445, 25909 => 23443, + 25910 => 23461, 25911 => 23480, 25912 => 29999, 25913 => 39582, 25914 => 25652, + 25915 => 23524, 25916 => 23534, 25917 => 35120, 25918 => 23536, 25919 => 36423, + 25920 => 35591, 25921 => 36790, 25922 => 36819, 25923 => 36821, 25924 => 36837, + 25925 => 36846, 25926 => 36836, 25927 => 36841, 25928 => 36838, 25929 => 36851, + 25930 => 36840, 25931 => 36869, 25932 => 36868, 25933 => 36875, 25934 => 36902, + 25935 => 36881, 25936 => 36877, 25937 => 36886, 25938 => 36897, 25939 => 36917, + 25940 => 36918, 25941 => 36909, 25942 => 36911, 25943 => 36932, 25944 => 36945, + 25945 => 36946, 25946 => 36944, 25947 => 36968, 25948 => 36952, 25949 => 36962, + 25950 => 36955, 25951 => 26297, 25952 => 36980, 25953 => 36989, 25954 => 36994, + 25955 => 37000, 25956 => 36995, 25957 => 37003, 25958 => 24400, 25959 => 24407, + 25960 => 24406, 25961 => 24408, 25962 => 23611, 25963 => 21675, 25964 => 23632, + 25965 => 23641, 25966 => 23409, 25967 => 23651, 25968 => 23654, 25969 => 32700, + 25970 => 24362, 25971 => 24361, 25972 => 24365, 25973 => 33396, 25974 => 24380, + 25975 => 39739, 25976 => 23662, 25977 => 22913, 25978 => 22915, 25979 => 22925, + 25980 => 22953, 25981 => 22954, 25982 => 22947, 26145 => 22935, 26146 => 22986, + 26147 => 22955, 26148 => 22942, 26149 => 22948, 26150 => 22994, 26151 => 22962, + 26152 => 22959, 26153 => 22999, 26154 => 22974, 26155 => 23045, 26156 => 23046, + 26157 => 23005, 26158 => 23048, 26159 => 23011, 26160 => 23000, 26161 => 23033, + 26162 => 23052, 26163 => 23049, 26164 => 23090, 26165 => 23092, 26166 => 23057, + 26167 => 23075, 26168 => 23059, 26169 => 23104, 26170 => 23143, 26171 => 23114, + 26172 => 23125, 26173 => 23100, 26174 => 23138, 26175 => 23157, 26176 => 33004, + 26177 => 23210, 26178 => 23195, 26179 => 23159, 26180 => 23162, 26181 => 23230, + 26182 => 23275, 26183 => 23218, 26184 => 23250, 26185 => 23252, 26186 => 23224, + 26187 => 23264, 26188 => 23267, 26189 => 23281, 26190 => 23254, 26191 => 23270, + 26192 => 23256, 26193 => 23260, 26194 => 23305, 26195 => 23319, 26196 => 23318, + 26197 => 23346, 26198 => 23351, 26199 => 23360, 26200 => 23573, 26201 => 23580, + 26202 => 23386, 26203 => 23397, 26204 => 23411, 26205 => 23377, 26206 => 23379, + 26207 => 23394, 26208 => 39541, 26209 => 39543, 26210 => 39544, 26211 => 39546, + 26212 => 39551, 26213 => 39549, 26214 => 39552, 26215 => 39553, 26216 => 39557, + 26217 => 39560, 26218 => 39562, 26219 => 39568, 26220 => 39570, 26221 => 39571, + 26222 => 39574, 26223 => 39576, 26224 => 39579, 26225 => 39580, 26226 => 39581, + 26227 => 39583, 26228 => 39584, 26229 => 39586, 26230 => 39587, 26231 => 39589, + 26232 => 39591, 26233 => 32415, 26234 => 32417, 26235 => 32419, 26236 => 32421, + 26237 => 32424, 26238 => 32425, 26401 => 32429, 26402 => 32432, 26403 => 32446, + 26404 => 32448, 26405 => 32449, 26406 => 32450, 26407 => 32457, 26408 => 32459, + 26409 => 32460, 26410 => 32464, 26411 => 32468, 26412 => 32471, 26413 => 32475, + 26414 => 32480, 26415 => 32481, 26416 => 32488, 26417 => 32491, 26418 => 32494, + 26419 => 32495, 26420 => 32497, 26421 => 32498, 26422 => 32525, 26423 => 32502, + 26424 => 32506, 26425 => 32507, 26426 => 32510, 26427 => 32513, 26428 => 32514, + 26429 => 32515, 26430 => 32519, 26431 => 32520, 26432 => 32523, 26433 => 32524, + 26434 => 32527, 26435 => 32529, 26436 => 32530, 26437 => 32535, 26438 => 32537, + 26439 => 32540, 26440 => 32539, 26441 => 32543, 26442 => 32545, 26443 => 32546, + 26444 => 32547, 26445 => 32548, 26446 => 32549, 26447 => 32550, 26448 => 32551, + 26449 => 32554, 26450 => 32555, 26451 => 32556, 26452 => 32557, 26453 => 32559, + 26454 => 32560, 26455 => 32561, 26456 => 32562, 26457 => 32563, 26458 => 32565, + 26459 => 24186, 26460 => 30079, 26461 => 24027, 26462 => 30014, 26463 => 37013, + 26464 => 29582, 26465 => 29585, 26466 => 29614, 26467 => 29602, 26468 => 29599, + 26469 => 29647, 26470 => 29634, 26471 => 29649, 26472 => 29623, 26473 => 29619, + 26474 => 29632, 26475 => 29641, 26476 => 29640, 26477 => 29669, 26478 => 29657, + 26479 => 39036, 26480 => 29706, 26481 => 29673, 26482 => 29671, 26483 => 29662, + 26484 => 29626, 26485 => 29682, 26486 => 29711, 26487 => 29738, 26488 => 29787, + 26489 => 29734, 26490 => 29733, 26491 => 29736, 26492 => 29744, 26493 => 29742, + 26494 => 29740, 26657 => 29723, 26658 => 29722, 26659 => 29761, 26660 => 29788, + 26661 => 29783, 26662 => 29781, 26663 => 29785, 26664 => 29815, 26665 => 29805, + 26666 => 29822, 26667 => 29852, 26668 => 29838, 26669 => 29824, 26670 => 29825, + 26671 => 29831, 26672 => 29835, 26673 => 29854, 26674 => 29864, 26675 => 29865, + 26676 => 29840, 26677 => 29863, 26678 => 29906, 26679 => 29882, 26680 => 38890, + 26681 => 38891, 26682 => 38892, 26683 => 26444, 26684 => 26451, 26685 => 26462, + 26686 => 26440, 26687 => 26473, 26688 => 26533, 26689 => 26503, 26690 => 26474, + 26691 => 26483, 26692 => 26520, 26693 => 26535, 26694 => 26485, 26695 => 26536, + 26696 => 26526, 26697 => 26541, 26698 => 26507, 26699 => 26487, 26700 => 26492, + 26701 => 26608, 26702 => 26633, 26703 => 26584, 26704 => 26634, 26705 => 26601, + 26706 => 26544, 26707 => 26636, 26708 => 26585, 26709 => 26549, 26710 => 26586, + 26711 => 26547, 26712 => 26589, 26713 => 26624, 26714 => 26563, 26715 => 26552, + 26716 => 26594, 26717 => 26638, 26718 => 26561, 26719 => 26621, 26720 => 26674, + 26721 => 26675, 26722 => 26720, 26723 => 26721, 26724 => 26702, 26725 => 26722, + 26726 => 26692, 26727 => 26724, 26728 => 26755, 26729 => 26653, 26730 => 26709, + 26731 => 26726, 26732 => 26689, 26733 => 26727, 26734 => 26688, 26735 => 26686, + 26736 => 26698, 26737 => 26697, 26738 => 26665, 26739 => 26805, 26740 => 26767, + 26741 => 26740, 26742 => 26743, 26743 => 26771, 26744 => 26731, 26745 => 26818, + 26746 => 26990, 26747 => 26876, 26748 => 26911, 26749 => 26912, 26750 => 26873, + 26913 => 26916, 26914 => 26864, 26915 => 26891, 26916 => 26881, 26917 => 26967, + 26918 => 26851, 26919 => 26896, 26920 => 26993, 26921 => 26937, 26922 => 26976, + 26923 => 26946, 26924 => 26973, 26925 => 27012, 26926 => 26987, 26927 => 27008, + 26928 => 27032, 26929 => 27000, 26930 => 26932, 26931 => 27084, 26932 => 27015, + 26933 => 27016, 26934 => 27086, 26935 => 27017, 26936 => 26982, 26937 => 26979, + 26938 => 27001, 26939 => 27035, 26940 => 27047, 26941 => 27067, 26942 => 27051, + 26943 => 27053, 26944 => 27092, 26945 => 27057, 26946 => 27073, 26947 => 27082, + 26948 => 27103, 26949 => 27029, 26950 => 27104, 26951 => 27021, 26952 => 27135, + 26953 => 27183, 26954 => 27117, 26955 => 27159, 26956 => 27160, 26957 => 27237, + 26958 => 27122, 26959 => 27204, 26960 => 27198, 26961 => 27296, 26962 => 27216, + 26963 => 27227, 26964 => 27189, 26965 => 27278, 26966 => 27257, 26967 => 27197, + 26968 => 27176, 26969 => 27224, 26970 => 27260, 26971 => 27281, 26972 => 27280, + 26973 => 27305, 26974 => 27287, 26975 => 27307, 26976 => 29495, 26977 => 29522, + 26978 => 27521, 26979 => 27522, 26980 => 27527, 26981 => 27524, 26982 => 27538, + 26983 => 27539, 26984 => 27533, 26985 => 27546, 26986 => 27547, 26987 => 27553, + 26988 => 27562, 26989 => 36715, 26990 => 36717, 26991 => 36721, 26992 => 36722, + 26993 => 36723, 26994 => 36725, 26995 => 36726, 26996 => 36728, 26997 => 36727, + 26998 => 36729, 26999 => 36730, 27000 => 36732, 27001 => 36734, 27002 => 36737, + 27003 => 36738, 27004 => 36740, 27005 => 36743, 27006 => 36747, 27169 => 36749, + 27170 => 36750, 27171 => 36751, 27172 => 36760, 27173 => 36762, 27174 => 36558, + 27175 => 25099, 27176 => 25111, 27177 => 25115, 27178 => 25119, 27179 => 25122, + 27180 => 25121, 27181 => 25125, 27182 => 25124, 27183 => 25132, 27184 => 33255, + 27185 => 29935, 27186 => 29940, 27187 => 29951, 27188 => 29967, 27189 => 29969, + 27190 => 29971, 27191 => 25908, 27192 => 26094, 27193 => 26095, 27194 => 26096, + 27195 => 26122, 27196 => 26137, 27197 => 26482, 27198 => 26115, 27199 => 26133, + 27200 => 26112, 27201 => 28805, 27202 => 26359, 27203 => 26141, 27204 => 26164, + 27205 => 26161, 27206 => 26166, 27207 => 26165, 27208 => 32774, 27209 => 26207, + 27210 => 26196, 27211 => 26177, 27212 => 26191, 27213 => 26198, 27214 => 26209, + 27215 => 26199, 27216 => 26231, 27217 => 26244, 27218 => 26252, 27219 => 26279, + 27220 => 26269, 27221 => 26302, 27222 => 26331, 27223 => 26332, 27224 => 26342, + 27225 => 26345, 27226 => 36146, 27227 => 36147, 27228 => 36150, 27229 => 36155, + 27230 => 36157, 27231 => 36160, 27232 => 36165, 27233 => 36166, 27234 => 36168, + 27235 => 36169, 27236 => 36167, 27237 => 36173, 27238 => 36181, 27239 => 36185, + 27240 => 35271, 27241 => 35274, 27242 => 35275, 27243 => 35276, 27244 => 35278, + 27245 => 35279, 27246 => 35280, 27247 => 35281, 27248 => 29294, 27249 => 29343, + 27250 => 29277, 27251 => 29286, 27252 => 29295, 27253 => 29310, 27254 => 29311, + 27255 => 29316, 27256 => 29323, 27257 => 29325, 27258 => 29327, 27259 => 29330, + 27260 => 25352, 27261 => 25394, 27262 => 25520, 27425 => 25663, 27426 => 25816, + 27427 => 32772, 27428 => 27626, 27429 => 27635, 27430 => 27645, 27431 => 27637, + 27432 => 27641, 27433 => 27653, 27434 => 27655, 27435 => 27654, 27436 => 27661, + 27437 => 27669, 27438 => 27672, 27439 => 27673, 27440 => 27674, 27441 => 27681, + 27442 => 27689, 27443 => 27684, 27444 => 27690, 27445 => 27698, 27446 => 25909, + 27447 => 25941, 27448 => 25963, 27449 => 29261, 27450 => 29266, 27451 => 29270, + 27452 => 29232, 27453 => 34402, 27454 => 21014, 27455 => 32927, 27456 => 32924, + 27457 => 32915, 27458 => 32956, 27459 => 26378, 27460 => 32957, 27461 => 32945, + 27462 => 32939, 27463 => 32941, 27464 => 32948, 27465 => 32951, 27466 => 32999, + 27467 => 33000, 27468 => 33001, 27469 => 33002, 27470 => 32987, 27471 => 32962, + 27472 => 32964, 27473 => 32985, 27474 => 32973, 27475 => 32983, 27476 => 26384, + 27477 => 32989, 27478 => 33003, 27479 => 33009, 27480 => 33012, 27481 => 33005, + 27482 => 33037, 27483 => 33038, 27484 => 33010, 27485 => 33020, 27486 => 26389, + 27487 => 33042, 27488 => 35930, 27489 => 33078, 27490 => 33054, 27491 => 33068, + 27492 => 33048, 27493 => 33074, 27494 => 33096, 27495 => 33100, 27496 => 33107, + 27497 => 33140, 27498 => 33113, 27499 => 33114, 27500 => 33137, 27501 => 33120, + 27502 => 33129, 27503 => 33148, 27504 => 33149, 27505 => 33133, 27506 => 33127, + 27507 => 22605, 27508 => 23221, 27509 => 33160, 27510 => 33154, 27511 => 33169, + 27512 => 28373, 27513 => 33187, 27514 => 33194, 27515 => 33228, 27516 => 26406, + 27517 => 33226, 27518 => 33211, 27681 => 33217, 27682 => 33190, 27683 => 27428, + 27684 => 27447, 27685 => 27449, 27686 => 27459, 27687 => 27462, 27688 => 27481, + 27689 => 39121, 27690 => 39122, 27691 => 39123, 27692 => 39125, 27693 => 39129, + 27694 => 39130, 27695 => 27571, 27696 => 24384, 27697 => 27586, 27698 => 35315, + 27699 => 26000, 27700 => 40785, 27701 => 26003, 27702 => 26044, 27703 => 26054, + 27704 => 26052, 27705 => 26051, 27706 => 26060, 27707 => 26062, 27708 => 26066, + 27709 => 26070, 27710 => 28800, 27711 => 28828, 27712 => 28822, 27713 => 28829, + 27714 => 28859, 27715 => 28864, 27716 => 28855, 27717 => 28843, 27718 => 28849, + 27719 => 28904, 27720 => 28874, 27721 => 28944, 27722 => 28947, 27723 => 28950, + 27724 => 28975, 27725 => 28977, 27726 => 29043, 27727 => 29020, 27728 => 29032, + 27729 => 28997, 27730 => 29042, 27731 => 29002, 27732 => 29048, 27733 => 29050, + 27734 => 29080, 27735 => 29107, 27736 => 29109, 27737 => 29096, 27738 => 29088, + 27739 => 29152, 27740 => 29140, 27741 => 29159, 27742 => 29177, 27743 => 29213, + 27744 => 29224, 27745 => 28780, 27746 => 28952, 27747 => 29030, 27748 => 29113, + 27749 => 25150, 27750 => 25149, 27751 => 25155, 27752 => 25160, 27753 => 25161, + 27754 => 31035, 27755 => 31040, 27756 => 31046, 27757 => 31049, 27758 => 31067, + 27759 => 31068, 27760 => 31059, 27761 => 31066, 27762 => 31074, 27763 => 31063, + 27764 => 31072, 27765 => 31087, 27766 => 31079, 27767 => 31098, 27768 => 31109, + 27769 => 31114, 27770 => 31130, 27771 => 31143, 27772 => 31155, 27773 => 24529, + 27774 => 24528, 27937 => 24636, 27938 => 24669, 27939 => 24666, 27940 => 24679, + 27941 => 24641, 27942 => 24665, 27943 => 24675, 27944 => 24747, 27945 => 24838, + 27946 => 24845, 27947 => 24925, 27948 => 25001, 27949 => 24989, 27950 => 25035, + 27951 => 25041, 27952 => 25094, 27953 => 32896, 27954 => 32895, 27955 => 27795, + 27956 => 27894, 27957 => 28156, 27958 => 30710, 27959 => 30712, 27960 => 30720, + 27961 => 30729, 27962 => 30743, 27963 => 30744, 27964 => 30737, 27965 => 26027, + 27966 => 30765, 27967 => 30748, 27968 => 30749, 27969 => 30777, 27970 => 30778, + 27971 => 30779, 27972 => 30751, 27973 => 30780, 27974 => 30757, 27975 => 30764, + 27976 => 30755, 27977 => 30761, 27978 => 30798, 27979 => 30829, 27980 => 30806, + 27981 => 30807, 27982 => 30758, 27983 => 30800, 27984 => 30791, 27985 => 30796, + 27986 => 30826, 27987 => 30875, 27988 => 30867, 27989 => 30874, 27990 => 30855, + 27991 => 30876, 27992 => 30881, 27993 => 30883, 27994 => 30898, 27995 => 30905, + 27996 => 30885, 27997 => 30932, 27998 => 30937, 27999 => 30921, 28000 => 30956, + 28001 => 30962, 28002 => 30981, 28003 => 30964, 28004 => 30995, 28005 => 31012, + 28006 => 31006, 28007 => 31028, 28008 => 40859, 28009 => 40697, 28010 => 40699, + 28011 => 40700, 28012 => 30449, 28013 => 30468, 28014 => 30477, 28015 => 30457, + 28016 => 30471, 28017 => 30472, 28018 => 30490, 28019 => 30498, 28020 => 30489, + 28021 => 30509, 28022 => 30502, 28023 => 30517, 28024 => 30520, 28025 => 30544, + 28026 => 30545, 28027 => 30535, 28028 => 30531, 28029 => 30554, 28030 => 30568, + 28193 => 30562, 28194 => 30565, 28195 => 30591, 28196 => 30605, 28197 => 30589, + 28198 => 30592, 28199 => 30604, 28200 => 30609, 28201 => 30623, 28202 => 30624, + 28203 => 30640, 28204 => 30645, 28205 => 30653, 28206 => 30010, 28207 => 30016, + 28208 => 30030, 28209 => 30027, 28210 => 30024, 28211 => 30043, 28212 => 30066, + 28213 => 30073, 28214 => 30083, 28215 => 32600, 28216 => 32609, 28217 => 32607, + 28218 => 35400, 28219 => 32616, 28220 => 32628, 28221 => 32625, 28222 => 32633, + 28223 => 32641, 28224 => 32638, 28225 => 30413, 28226 => 30437, 28227 => 34866, + 28228 => 38021, 28229 => 38022, 28230 => 38023, 28231 => 38027, 28232 => 38026, + 28233 => 38028, 28234 => 38029, 28235 => 38031, 28236 => 38032, 28237 => 38036, + 28238 => 38039, 28239 => 38037, 28240 => 38042, 28241 => 38043, 28242 => 38044, + 28243 => 38051, 28244 => 38052, 28245 => 38059, 28246 => 38058, 28247 => 38061, + 28248 => 38060, 28249 => 38063, 28250 => 38064, 28251 => 38066, 28252 => 38068, + 28253 => 38070, 28254 => 38071, 28255 => 38072, 28256 => 38073, 28257 => 38074, + 28258 => 38076, 28259 => 38077, 28260 => 38079, 28261 => 38084, 28262 => 38088, + 28263 => 38089, 28264 => 38090, 28265 => 38091, 28266 => 38092, 28267 => 38093, + 28268 => 38094, 28269 => 38096, 28270 => 38097, 28271 => 38098, 28272 => 38101, + 28273 => 38102, 28274 => 38103, 28275 => 38105, 28276 => 38104, 28277 => 38107, + 28278 => 38110, 28279 => 38111, 28280 => 38112, 28281 => 38114, 28282 => 38116, + 28283 => 38117, 28284 => 38119, 28285 => 38120, 28286 => 38122, 28449 => 38121, + 28450 => 38123, 28451 => 38126, 28452 => 38127, 28453 => 38131, 28454 => 38132, + 28455 => 38133, 28456 => 38135, 28457 => 38137, 28458 => 38140, 28459 => 38141, + 28460 => 38143, 28461 => 38147, 28462 => 38146, 28463 => 38150, 28464 => 38151, + 28465 => 38153, 28466 => 38154, 28467 => 38157, 28468 => 38158, 28469 => 38159, + 28470 => 38162, 28471 => 38163, 28472 => 38164, 28473 => 38165, 28474 => 38166, + 28475 => 38168, 28476 => 38171, 28477 => 38173, 28478 => 38174, 28479 => 38175, + 28480 => 38178, 28481 => 38186, 28482 => 38187, 28483 => 38185, 28484 => 38188, + 28485 => 38193, 28486 => 38194, 28487 => 38196, 28488 => 38198, 28489 => 38199, + 28490 => 38200, 28491 => 38204, 28492 => 38206, 28493 => 38207, 28494 => 38210, + 28495 => 38197, 28496 => 38212, 28497 => 38213, 28498 => 38214, 28499 => 38217, + 28500 => 38220, 28501 => 38222, 28502 => 38223, 28503 => 38226, 28504 => 38227, + 28505 => 38228, 28506 => 38230, 28507 => 38231, 28508 => 38232, 28509 => 38233, + 28510 => 38235, 28511 => 38238, 28512 => 38239, 28513 => 38237, 28514 => 38241, + 28515 => 38242, 28516 => 38244, 28517 => 38245, 28518 => 38246, 28519 => 38247, + 28520 => 38248, 28521 => 38249, 28522 => 38250, 28523 => 38251, 28524 => 38252, + 28525 => 38255, 28526 => 38257, 28527 => 38258, 28528 => 38259, 28529 => 38202, + 28530 => 30695, 28531 => 30700, 28532 => 38601, 28533 => 31189, 28534 => 31213, + 28535 => 31203, 28536 => 31211, 28537 => 31238, 28538 => 23879, 28539 => 31235, + 28540 => 31234, 28541 => 31262, 28542 => 31252, 28705 => 31289, 28706 => 31287, + 28707 => 31313, 28708 => 40655, 28709 => 39333, 28710 => 31344, 28711 => 30344, + 28712 => 30350, 28713 => 30355, 28714 => 30361, 28715 => 30372, 28716 => 29918, + 28717 => 29920, 28718 => 29996, 28719 => 40480, 28720 => 40482, 28721 => 40488, + 28722 => 40489, 28723 => 40490, 28724 => 40491, 28725 => 40492, 28726 => 40498, + 28727 => 40497, 28728 => 40502, 28729 => 40504, 28730 => 40503, 28731 => 40505, + 28732 => 40506, 28733 => 40510, 28734 => 40513, 28735 => 40514, 28736 => 40516, + 28737 => 40518, 28738 => 40519, 28739 => 40520, 28740 => 40521, 28741 => 40523, + 28742 => 40524, 28743 => 40526, 28744 => 40529, 28745 => 40533, 28746 => 40535, + 28747 => 40538, 28748 => 40539, 28749 => 40540, 28750 => 40542, 28751 => 40547, + 28752 => 40550, 28753 => 40551, 28754 => 40552, 28755 => 40553, 28756 => 40554, + 28757 => 40555, 28758 => 40556, 28759 => 40561, 28760 => 40557, 28761 => 40563, + 28762 => 30098, 28763 => 30100, 28764 => 30102, 28765 => 30112, 28766 => 30109, + 28767 => 30124, 28768 => 30115, 28769 => 30131, 28770 => 30132, 28771 => 30136, + 28772 => 30148, 28773 => 30129, 28774 => 30128, 28775 => 30147, 28776 => 30146, + 28777 => 30166, 28778 => 30157, 28779 => 30179, 28780 => 30184, 28781 => 30182, + 28782 => 30180, 28783 => 30187, 28784 => 30183, 28785 => 30211, 28786 => 30193, + 28787 => 30204, 28788 => 30207, 28789 => 30224, 28790 => 30208, 28791 => 30213, + 28792 => 30220, 28793 => 30231, 28794 => 30218, 28795 => 30245, 28796 => 30232, + 28797 => 30229, 28798 => 30233, 28961 => 30235, 28962 => 30268, 28963 => 30242, + 28964 => 30240, 28965 => 30272, 28966 => 30253, 28967 => 30256, 28968 => 30271, + 28969 => 30261, 28970 => 30275, 28971 => 30270, 28972 => 30259, 28973 => 30285, + 28974 => 30302, 28975 => 30292, 28976 => 30300, 28977 => 30294, 28978 => 30315, + 28979 => 30319, 28980 => 32714, 28981 => 31462, 28982 => 31352, 28983 => 31353, + 28984 => 31360, 28985 => 31366, 28986 => 31368, 28987 => 31381, 28988 => 31398, + 28989 => 31392, 28990 => 31404, 28991 => 31400, 28992 => 31405, 28993 => 31411, + 28994 => 34916, 28995 => 34921, 28996 => 34930, 28997 => 34941, 28998 => 34943, + 28999 => 34946, 29000 => 34978, 29001 => 35014, 29002 => 34999, 29003 => 35004, + 29004 => 35017, 29005 => 35042, 29006 => 35022, 29007 => 35043, 29008 => 35045, + 29009 => 35057, 29010 => 35098, 29011 => 35068, 29012 => 35048, 29013 => 35070, + 29014 => 35056, 29015 => 35105, 29016 => 35097, 29017 => 35091, 29018 => 35099, + 29019 => 35082, 29020 => 35124, 29021 => 35115, 29022 => 35126, 29023 => 35137, + 29024 => 35174, 29025 => 35195, 29026 => 30091, 29027 => 32997, 29028 => 30386, + 29029 => 30388, 29030 => 30684, 29031 => 32786, 29032 => 32788, 29033 => 32790, + 29034 => 32796, 29035 => 32800, 29036 => 32802, 29037 => 32805, 29038 => 32806, + 29039 => 32807, 29040 => 32809, 29041 => 32808, 29042 => 32817, 29043 => 32779, + 29044 => 32821, 29045 => 32835, 29046 => 32838, 29047 => 32845, 29048 => 32850, + 29049 => 32873, 29050 => 32881, 29051 => 35203, 29052 => 39032, 29053 => 39040, + 29054 => 39043, 29217 => 39049, 29218 => 39052, 29219 => 39053, 29220 => 39055, + 29221 => 39060, 29222 => 39066, 29223 => 39067, 29224 => 39070, 29225 => 39071, + 29226 => 39073, 29227 => 39074, 29228 => 39077, 29229 => 39078, 29230 => 34381, + 29231 => 34388, 29232 => 34412, 29233 => 34414, 29234 => 34431, 29235 => 34426, + 29236 => 34428, 29237 => 34427, 29238 => 34472, 29239 => 34445, 29240 => 34443, + 29241 => 34476, 29242 => 34461, 29243 => 34471, 29244 => 34467, 29245 => 34474, + 29246 => 34451, 29247 => 34473, 29248 => 34486, 29249 => 34500, 29250 => 34485, + 29251 => 34510, 29252 => 34480, 29253 => 34490, 29254 => 34481, 29255 => 34479, + 29256 => 34505, 29257 => 34511, 29258 => 34484, 29259 => 34537, 29260 => 34545, + 29261 => 34546, 29262 => 34541, 29263 => 34547, 29264 => 34512, 29265 => 34579, + 29266 => 34526, 29267 => 34548, 29268 => 34527, 29269 => 34520, 29270 => 34513, + 29271 => 34563, 29272 => 34567, 29273 => 34552, 29274 => 34568, 29275 => 34570, + 29276 => 34573, 29277 => 34569, 29278 => 34595, 29279 => 34619, 29280 => 34590, + 29281 => 34597, 29282 => 34606, 29283 => 34586, 29284 => 34622, 29285 => 34632, + 29286 => 34612, 29287 => 34609, 29288 => 34601, 29289 => 34615, 29290 => 34623, + 29291 => 34690, 29292 => 34594, 29293 => 34685, 29294 => 34686, 29295 => 34683, + 29296 => 34656, 29297 => 34672, 29298 => 34636, 29299 => 34670, 29300 => 34699, + 29301 => 34643, 29302 => 34659, 29303 => 34684, 29304 => 34660, 29305 => 34649, + 29306 => 34661, 29307 => 34707, 29308 => 34735, 29309 => 34728, 29310 => 34770, + 29473 => 34758, 29474 => 34696, 29475 => 34693, 29476 => 34733, 29477 => 34711, + 29478 => 34691, 29479 => 34731, 29480 => 34789, 29481 => 34732, 29482 => 34741, + 29483 => 34739, 29484 => 34763, 29485 => 34771, 29486 => 34749, 29487 => 34769, + 29488 => 34752, 29489 => 34762, 29490 => 34779, 29491 => 34794, 29492 => 34784, + 29493 => 34798, 29494 => 34838, 29495 => 34835, 29496 => 34814, 29497 => 34826, + 29498 => 34843, 29499 => 34849, 29500 => 34873, 29501 => 34876, 29502 => 32566, + 29503 => 32578, 29504 => 32580, 29505 => 32581, 29506 => 33296, 29507 => 31482, + 29508 => 31485, 29509 => 31496, 29510 => 31491, 29511 => 31492, 29512 => 31509, + 29513 => 31498, 29514 => 31531, 29515 => 31503, 29516 => 31559, 29517 => 31544, + 29518 => 31530, 29519 => 31513, 29520 => 31534, 29521 => 31537, 29522 => 31520, + 29523 => 31525, 29524 => 31524, 29525 => 31539, 29526 => 31550, 29527 => 31518, + 29528 => 31576, 29529 => 31578, 29530 => 31557, 29531 => 31605, 29532 => 31564, + 29533 => 31581, 29534 => 31584, 29535 => 31598, 29536 => 31611, 29537 => 31586, + 29538 => 31602, 29539 => 31601, 29540 => 31632, 29541 => 31654, 29542 => 31655, + 29543 => 31672, 29544 => 31660, 29545 => 31645, 29546 => 31656, 29547 => 31621, + 29548 => 31658, 29549 => 31644, 29550 => 31650, 29551 => 31659, 29552 => 31668, + 29553 => 31697, 29554 => 31681, 29555 => 31692, 29556 => 31709, 29557 => 31706, + 29558 => 31717, 29559 => 31718, 29560 => 31722, 29561 => 31756, 29562 => 31742, + 29563 => 31740, 29564 => 31759, 29565 => 31766, 29566 => 31755, 29729 => 31775, + 29730 => 31786, 29731 => 31782, 29732 => 31800, 29733 => 31809, 29734 => 31808, + 29735 => 33278, 29736 => 33281, 29737 => 33282, 29738 => 33284, 29739 => 33260, + 29740 => 34884, 29741 => 33313, 29742 => 33314, 29743 => 33315, 29744 => 33325, + 29745 => 33327, 29746 => 33320, 29747 => 33323, 29748 => 33336, 29749 => 33339, + 29750 => 33331, 29751 => 33332, 29752 => 33342, 29753 => 33348, 29754 => 33353, + 29755 => 33355, 29756 => 33359, 29757 => 33370, 29758 => 33375, 29759 => 33384, + 29760 => 34942, 29761 => 34949, 29762 => 34952, 29763 => 35032, 29764 => 35039, + 29765 => 35166, 29766 => 32669, 29767 => 32671, 29768 => 32679, 29769 => 32687, + 29770 => 32688, 29771 => 32690, 29772 => 31868, 29773 => 25929, 29774 => 31889, + 29775 => 31901, 29776 => 31900, 29777 => 31902, 29778 => 31906, 29779 => 31922, + 29780 => 31932, 29781 => 31933, 29782 => 31937, 29783 => 31943, 29784 => 31948, + 29785 => 31949, 29786 => 31944, 29787 => 31941, 29788 => 31959, 29789 => 31976, + 29790 => 33390, 29791 => 26280, 29792 => 32703, 29793 => 32718, 29794 => 32725, + 29795 => 32741, 29796 => 32737, 29797 => 32742, 29798 => 32745, 29799 => 32750, + 29800 => 32755, 29801 => 31992, 29802 => 32119, 29803 => 32166, 29804 => 32174, + 29805 => 32327, 29806 => 32411, 29807 => 40632, 29808 => 40628, 29809 => 36211, + 29810 => 36228, 29811 => 36244, 29812 => 36241, 29813 => 36273, 29814 => 36199, + 29815 => 36205, 29816 => 35911, 29817 => 35913, 29818 => 37194, 29819 => 37200, + 29820 => 37198, 29821 => 37199, 29822 => 37220, 29985 => 37218, 29986 => 37217, + 29987 => 37232, 29988 => 37225, 29989 => 37231, 29990 => 37245, 29991 => 37246, + 29992 => 37234, 29993 => 37236, 29994 => 37241, 29995 => 37260, 29996 => 37253, + 29997 => 37264, 29998 => 37261, 29999 => 37265, 30000 => 37282, 30001 => 37283, + 30002 => 37290, 30003 => 37293, 30004 => 37294, 30005 => 37295, 30006 => 37301, + 30007 => 37300, 30008 => 37306, 30009 => 35925, 30010 => 40574, 30011 => 36280, + 30012 => 36331, 30013 => 36357, 30014 => 36441, 30015 => 36457, 30016 => 36277, + 30017 => 36287, 30018 => 36284, 30019 => 36282, 30020 => 36292, 30021 => 36310, + 30022 => 36311, 30023 => 36314, 30024 => 36318, 30025 => 36302, 30026 => 36303, + 30027 => 36315, 30028 => 36294, 30029 => 36332, 30030 => 36343, 30031 => 36344, + 30032 => 36323, 30033 => 36345, 30034 => 36347, 30035 => 36324, 30036 => 36361, + 30037 => 36349, 30038 => 36372, 30039 => 36381, 30040 => 36383, 30041 => 36396, + 30042 => 36398, 30043 => 36387, 30044 => 36399, 30045 => 36410, 30046 => 36416, + 30047 => 36409, 30048 => 36405, 30049 => 36413, 30050 => 36401, 30051 => 36425, + 30052 => 36417, 30053 => 36418, 30054 => 36433, 30055 => 36434, 30056 => 36426, + 30057 => 36464, 30058 => 36470, 30059 => 36476, 30060 => 36463, 30061 => 36468, + 30062 => 36485, 30063 => 36495, 30064 => 36500, 30065 => 36496, 30066 => 36508, + 30067 => 36510, 30068 => 35960, 30069 => 35970, 30070 => 35978, 30071 => 35973, + 30072 => 35992, 30073 => 35988, 30074 => 26011, 30075 => 35286, 30076 => 35294, + 30077 => 35290, 30078 => 35292, 30241 => 35301, 30242 => 35307, 30243 => 35311, + 30244 => 35390, 30245 => 35622, 30246 => 38739, 30247 => 38633, 30248 => 38643, + 30249 => 38639, 30250 => 38662, 30251 => 38657, 30252 => 38664, 30253 => 38671, + 30254 => 38670, 30255 => 38698, 30256 => 38701, 30257 => 38704, 30258 => 38718, + 30259 => 40832, 30260 => 40835, 30261 => 40837, 30262 => 40838, 30263 => 40839, + 30264 => 40840, 30265 => 40841, 30266 => 40842, 30267 => 40844, 30268 => 40702, + 30269 => 40715, 30270 => 40717, 30271 => 38585, 30272 => 38588, 30273 => 38589, + 30274 => 38606, 30275 => 38610, 30276 => 30655, 30277 => 38624, 30278 => 37518, + 30279 => 37550, 30280 => 37576, 30281 => 37694, 30282 => 37738, 30283 => 37834, + 30284 => 37775, 30285 => 37950, 30286 => 37995, 30287 => 40063, 30288 => 40066, + 30289 => 40069, 30290 => 40070, 30291 => 40071, 30292 => 40072, 30293 => 31267, + 30294 => 40075, 30295 => 40078, 30296 => 40080, 30297 => 40081, 30298 => 40082, + 30299 => 40084, 30300 => 40085, 30301 => 40090, 30302 => 40091, 30303 => 40094, + 30304 => 40095, 30305 => 40096, 30306 => 40097, 30307 => 40098, 30308 => 40099, + 30309 => 40101, 30310 => 40102, 30311 => 40103, 30312 => 40104, 30313 => 40105, + 30314 => 40107, 30315 => 40109, 30316 => 40110, 30317 => 40112, 30318 => 40113, + 30319 => 40114, 30320 => 40115, 30321 => 40116, 30322 => 40117, 30323 => 40118, + 30324 => 40119, 30325 => 40122, 30326 => 40123, 30327 => 40124, 30328 => 40125, + 30329 => 40132, 30330 => 40133, 30331 => 40134, 30332 => 40135, 30333 => 40138, + 30334 => 40139, 30497 => 40140, 30498 => 40141, 30499 => 40142, 30500 => 40143, + 30501 => 40144, 30502 => 40147, 30503 => 40148, 30504 => 40149, 30505 => 40151, + 30506 => 40152, 30507 => 40153, 30508 => 40156, 30509 => 40157, 30510 => 40159, + 30511 => 40162, 30512 => 38780, 30513 => 38789, 30514 => 38801, 30515 => 38802, + 30516 => 38804, 30517 => 38831, 30518 => 38827, 30519 => 38819, 30520 => 38834, + 30521 => 38836, 30522 => 39601, 30523 => 39600, 30524 => 39607, 30525 => 40536, + 30526 => 39606, 30527 => 39610, 30528 => 39612, 30529 => 39617, 30530 => 39616, + 30531 => 39621, 30532 => 39618, 30533 => 39627, 30534 => 39628, 30535 => 39633, + 30536 => 39749, 30537 => 39747, 30538 => 39751, 30539 => 39753, 30540 => 39752, + 30541 => 39757, 30542 => 39761, 30543 => 39144, 30544 => 39181, 30545 => 39214, + 30546 => 39253, 30547 => 39252, 30548 => 39647, 30549 => 39649, 30550 => 39654, + 30551 => 39663, 30552 => 39659, 30553 => 39675, 30554 => 39661, 30555 => 39673, + 30556 => 39688, 30557 => 39695, 30558 => 39699, 30559 => 39711, 30560 => 39715, + 30561 => 40637, 30562 => 40638, 30563 => 32315, 30564 => 40578, 30565 => 40583, + 30566 => 40584, 30567 => 40587, 30568 => 40594, 30569 => 37846, 30570 => 40605, + 30571 => 40607, 30572 => 40667, 30573 => 40668, 30574 => 40669, 30575 => 40672, + 30576 => 40671, 30577 => 40674, 30578 => 40681, 30579 => 40679, 30580 => 40677, + 30581 => 40682, 30582 => 40687, 30583 => 40738, 30584 => 40748, 30585 => 40751, + 30586 => 40761, 30587 => 40759, 30588 => 40765, 30589 => 40766, 30590 => 40772, + 0 => 0 ); + + function gb2utf8($gb) { + if( !trim($gb) ) return $gb; + $utf8=''; + while($gb) { + if( ord(substr($gb,0,1)) > 127 ) { + $t=substr($gb,0,2); + $gb=substr($gb,2); + $utf8 .= $this->u2utf8($this->codetable[hexdec(bin2hex($t))-0x8080]); + } + else { + $t=substr($gb,0,1); + $gb=substr($gb,1); + $utf8 .= $this->u2utf8($t); + } + } + return $utf8; + } + + function u2utf8($c) { + $str=''; + if ($c < 0x80) { + $str.=$c; + } + else if ($c < 0x800) { + $str.=chr(0xC0 | $c>>6); + $str.=chr(0x80 | $c & 0x3F); + } + else if ($c < 0x10000) { + $str.=chr(0xE0 | $c>>12); + $str.=chr(0x80 | $c>>6 & 0x3F); + $str.=chr(0x80 | $c & 0x3F); + } + else if ($c < 0x200000) { + $str.=chr(0xF0 | $c>>18); + $str.=chr(0x80 | $c>>12 & 0x3F); + $str.=chr(0x80 | $c>>6 & 0x3F); + $str.=chr(0x80 | $c & 0x3F); + } + return $str; + } + +} // END Class + +?> diff --git a/Societes/ric/jpgraph/jpgraph_gradient.php b/Societes/ric/jpgraph/jpgraph_gradient.php new file mode 100755 index 00000000..e3c24d3a --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_gradient.php @@ -0,0 +1,434 @@ +img = $img; + } + + + function SetNumColors($aNum) { + $this->numcolors=$aNum; + } + //--------------- + // PUBLIC METHODS + // Produce a gradient filled rectangle with a smooth transition between + // two colors. + // ($xl,$yt) Top left corner + // ($xr,$yb) Bottom right + // $from_color Starting color in gradient + // $to_color End color in the gradient + // $style Which way is the gradient oriented? + function FilledRectangle($xl,$yt,$xr,$yb,$from_color,$to_color,$style=1) { + $this->img->SetLineWeight(1); + switch( $style ) { + case GRAD_VER: + $steps = ceil(abs($xr-$xl)+1); + $delta = $xr>=$xl ? 1 : -1; + $this->GetColArray($from_color,$to_color,$steps,$colors,$this->numcolors); + for( $i=0, $x=$xl; $i < $steps; ++$i ) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yt,$x,$yb); + $x += $delta; + } + break; + + case GRAD_HOR: + $steps = ceil(abs($yb-$yt)+1); + $delta = $yb >= $yt ? 1 : -1; + $this->GetColArray($from_color,$to_color,$steps,$colors,$this->numcolors); + for($i=0,$y=$yt; $i < $steps; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($xl,$y,$xr,$y); + $y += $delta; + } + break; + + case GRAD_MIDHOR: + $steps = ceil(abs($yb-$yt)/2); + $delta = $yb >= $yt ? 1 : -1; + $this->GetColArray($from_color,$to_color,$steps,$colors,$this->numcolors); + for($y=$yt, $i=0; $i < $steps; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($xl,$y,$xr,$y); + $y += $delta; + } + --$i; + if( abs($yb-$yt) % 2 == 1 ) { + --$steps; + } + for($j=0; $j < $steps; ++$j, --$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($xl,$y,$xr,$y); + $y += $delta; + } + $this->img->Line($xl,$y,$xr,$y); + break; + + case GRAD_MIDVER: + $steps = ceil(abs($xr-$xl)/2); + $delta = $xr>=$xl ? 1 : -1; + $this->GetColArray($from_color,$to_color,$steps,$colors,$this->numcolors); + for($x=$xl, $i=0; $i < $steps; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + --$i; + if( abs($xr-$xl) % 2 == 1 ) { + --$steps; + } + for($j=0; $j < $steps; ++$j, --$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + $this->img->Line($x,$yb,$x,$yt); + break; + + case GRAD_WIDE_MIDVER: + $diff = ceil(abs($xr-$xl)); + $steps = floor(abs($diff)/3); + $firststep = $diff - 2*$steps ; + $delta = $xr >= $xl ? 1 : -1; + $this->GetColArray($from_color,$to_color,$firststep,$colors,$this->numcolors); + for($x=$xl, $i=0; $i < $firststep; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + --$i; + $this->img->current_color = $colors[$i]; + for($j=0; $j< $steps; ++$j) { + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + + for($j=0; $j < $steps; ++$j, --$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + break; + + case GRAD_WIDE_MIDHOR: + $diff = ceil(abs($yb-$yt)); + $steps = floor(abs($diff)/3); + $firststep = $diff - 2*$steps ; + $delta = $yb >= $yt? 1 : -1; + $this->GetColArray($from_color,$to_color,$firststep,$colors,$this->numcolors); + for($y=$yt, $i=0; $i < $firststep; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($xl,$y,$xr,$y); + $y += $delta; + } + --$i; + $this->img->current_color = $colors[$i]; + for($j=0; $j < $steps; ++$j) { + $this->img->Line($xl,$y,$xr,$y); + $y += $delta; + } + for($j=0; $j < $steps; ++$j, --$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($xl,$y,$xr,$y); + $y += $delta; + } + break; + + case GRAD_LEFT_REFLECTION: + $steps1 = ceil(0.3*abs($xr-$xl)); + $delta = $xr>=$xl ? 1 : -1; + + $from_color = $this->img->rgb->Color($from_color); + $adj = 1.4; + $m = ($adj-1.0)*(255-min(255,min($from_color[0],min($from_color[1],$from_color[2])))); + $from_color2 = array(min(255,$from_color[0]+$m), + min(255,$from_color[1]+$m), min(255,$from_color[2]+$m)); + + $this->GetColArray($from_color2,$to_color,$steps1,$colors,$this->numcolors); + $n = count($colors); + for($x=$xl, $i=0; $i < $steps1 && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + $steps2 = max(1,ceil(0.08*abs($xr-$xl))); + $this->img->SetColor($to_color); + for($j=0; $j< $steps2; ++$j) { + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + $steps = abs($xr-$xl)-$steps1-$steps2; + $this->GetColArray($to_color,$from_color,$steps,$colors,$this->numcolors); + $n = count($colors); + for($i=0; $i < $steps && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + break; + + case GRAD_RIGHT_REFLECTION: + $steps1 = ceil(0.7*abs($xr-$xl)); + $delta = $xr>=$xl ? 1 : -1; + + $this->GetColArray($from_color,$to_color,$steps1,$colors,$this->numcolors); + $n = count($colors); + for($x=$xl, $i=0; $i < $steps1 && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + $steps2 = max(1,ceil(0.08*abs($xr-$xl))); + $this->img->SetColor($to_color); + for($j=0; $j< $steps2; ++$j) { + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + + $from_color = $this->img->rgb->Color($from_color); + $adj = 1.4; + $m = ($adj-1.0)*(255-min(255,min($from_color[0],min($from_color[1],$from_color[2])))); + $from_color = array(min(255,$from_color[0]+$m), + min(255,$from_color[1]+$m), min(255,$from_color[2]+$m)); + + $steps = abs($xr-$xl)-$steps1-$steps2; + $this->GetColArray($to_color,$from_color,$steps,$colors,$this->numcolors); + $n = count($colors); + for($i=0; $i < $steps && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + break; + + case GRAD_CENTER: + $steps = ceil(min(($yb-$yt)+1,($xr-$xl)+1)/2); + $this->GetColArray($from_color,$to_color,$steps,$colors,$this->numcolors); + $dx = ($xr-$xl)/2; + $dy = ($yb-$yt)/2; + $x=$xl;$y=$yt;$x2=$xr;$y2=$yb; + $n = count($colors); + for($x=$xl, $i=0; $x < $xl+$dx && $y < $yt+$dy && $i < $n; ++$x, ++$y, --$x2, --$y2, ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Rectangle($x,$y,$x2,$y2); + } + $this->img->Line($x,$y,$x2,$y2); + break; + + case GRAD_RAISED_PANEL: + // right to left + $steps1 = $xr-$xl; + $delta = $xr>=$xl ? 1 : -1; + $this->GetColArray($to_color,$from_color,$steps1,$colors,$this->numcolors); + $n = count($colors); + for($x=$xl, $i=0; $i < $steps1 && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + + // left to right + $xr -= 3; + $xl += 3; + $yb -= 3; + $yt += 3; + $steps2 = $xr-$xl; + $delta = $xr>=$xl ? 1 : -1; + for($x=$xl, $j=$steps2; $j >= 0; --$j) { + $this->img->current_color = $colors[$j]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + break; + + case GRAD_DIAGONAL: + // use the longer dimension to determine the required number of steps. + // first loop draws from one corner to the mid-diagonal and the second + // loop draws from the mid-diagonal to the opposing corner. + if($xr-$xl > $yb - $yt) { + // width is greater than height -> use x-dimension for steps + $steps = $xr-$xl; + $delta = $xr>=$xl ? 1 : -1; + $this->GetColArray($from_color,$to_color,$steps*2,$colors,$this->numcolors); + $n = count($colors); + + for($x=$xl, $i=0; $i < $steps && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $y = $yt+($i/$steps)*($yb-$yt)*$delta; + $this->img->Line($x,$yt,$xl,$y); + $x += $delta; + } + + for($x=$xl, $i = 0; $i < $steps && $i < $n; ++$i) { + $this->img->current_color = $colors[$steps+$i]; + $y = $yt+($i/$steps)*($yb-$yt)*$delta; + $this->img->Line($x,$yb,$xr,$y); + $x += $delta; + } + } else { + // height is greater than width -> use y-dimension for steps + $steps = $yb-$yt; + $delta = $yb>=$yt ? 1 : -1; + $this->GetColArray($from_color,$to_color,$steps*2,$colors,$this->numcolors); + $n = count($colors); + + for($y=$yt, $i=0; $i < $steps && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $x = $xl+($i/$steps)*($xr-$xl)*$delta; + $this->img->Line($x,$yt,$xl,$y); + $y += $delta; + } + + for($y=$yt, $i = 0; $i < $steps && $i < $n; ++$i) { + $this->img->current_color = $colors[$steps+$i]; + $x = $xl+($i/$steps)*($xr-$xl)*$delta; + $this->img->Line($x,$yb,$xr,$y); + $x += $delta; + } + + } + break; + + default: + JpGraphError::RaiseL(7001,$style); + //("Unknown gradient style (=$style)."); + break; + } + } + + // Fill a special case of a polygon with a flat bottom + // with a gradient. Can be used for filled line plots. + // Please note that this is NOT a generic gradient polygon fill + // routine. It assumes that the bottom is flat (like a drawing + // of a mountain) + function FilledFlatPolygon($pts,$from_color,$to_color) { + if( count($pts) == 0 ) return; + + $maxy=$pts[1]; + $miny=$pts[1]; + $n = count($pts) ; + for( $i=0, $idx=0; $i < $n; $i += 2) { + $x = round($pts[$i]); + $y = round($pts[$i+1]); + $miny = min($miny,$y); + $maxy = max($maxy,$y); + } + + $colors = array(); + $this->GetColArray($from_color,$to_color,abs($maxy-$miny)+1,$colors,$this->numcolors); + for($i=$miny, $idx=0; $i <= $maxy; ++$i ) { + $colmap[$i] = $colors[$idx++]; + } + + $n = count($pts)/2 ; + $idx = 0 ; + while( $idx < $n-1 ) { + $p1 = array(round($pts[$idx*2]),round($pts[$idx*2+1])); + $p2 = array(round($pts[++$idx*2]),round($pts[$idx*2+1])); + + // Find the largest rectangle we can fill + $y = max($p1[1],$p2[1]) ; + for($yy=$maxy; $yy > $y; --$yy) { + $this->img->current_color = $colmap[$yy]; + $this->img->Line($p1[0],$yy,$p2[0]-1,$yy); + } + + if( $p1[1] == $p2[1] ) { + continue; + } + + // Fill the rest using lines (slow...) + $slope = ($p2[0]-$p1[0])/($p1[1]-$p2[1]); + $x1 = $p1[0]; + $x2 = $p2[0]-1; + $start = $y; + if( $p1[1] > $p2[1] ) { + while( $y >= $p2[1] ) { + $x1=$slope*($start-$y)+$p1[0]; + $this->img->current_color = $colmap[$y]; + $this->img->Line($x1,$y,$x2,$y); + --$y; + } + } + else { + while( $y >= $p1[1] ) { + $x2=$p2[0]+$slope*($start-$y); + $this->img->current_color = $colmap[$y]; + $this->img->Line($x1,$y,$x2,$y); + --$y; + } + } + } + } + + //--------------- + // PRIVATE METHODS + // Add to the image color map the necessary colors to do the transition + // between the two colors using $numcolors intermediate colors + function GetColArray($from_color,$to_color,$arr_size,&$colors,$numcols=100) { + if( $arr_size==0 ) { + return; + } + + // If color is given as text get it's corresponding r,g,b values + $from_color = $this->img->rgb->Color($from_color); + $to_color = $this->img->rgb->Color($to_color); + + $rdelta=($to_color[0]-$from_color[0])/$numcols; + $gdelta=($to_color[1]-$from_color[1])/$numcols; + $bdelta=($to_color[2]-$from_color[2])/$numcols; + $colorsperstep = $numcols/$arr_size; + $prevcolnum = -1; + $from_alpha = floatval($from_color[3]); + $to_alpha = floatval($to_color[3]); + $adelta = ( $to_alpha - $from_alpha ) / $numcols ; + for ($i=0; $i < $arr_size; ++$i) { + $colnum = floor($colorsperstep*$i); + if ( $colnum == $prevcolnum ) { + $colors[$i] = $colidx; + } + else { + $r = floor($from_color[0] + $colnum*$rdelta); + $g = floor($from_color[1] + $colnum*$gdelta); + $b = floor($from_color[2] + $colnum*$bdelta); + $alpha = $from_alpha + $colnum*$adelta; + $colidx = $this->img->rgb->Allocate(sprintf("#%02x%02x%02x",$r,$g,$b),$alpha); + $colors[$i] = $colidx; + } + $prevcolnum = $colnum; + } + } +} // Class + +?> diff --git a/Societes/ric/jpgraph/jpgraph_iconplot.php b/Societes/ric/jpgraph/jpgraph_iconplot.php new file mode 100755 index 00000000..584f8017 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_iconplot.php @@ -0,0 +1,190 @@ +iFile = $aFile; + $this->iX=$aX; + $this->iY=$aY; + $this->iScale= $aScale; + if( $aMix < 0 || $aMix > 100 ) { + JpGraphError::RaiseL(8001); //('Mix value for icon must be between 0 and 100.'); + } + $this->iMix = $aMix ; + } + + function SetCountryFlag($aFlag,$aX=0,$aY=0,$aScale=1.0,$aMix=100,$aStdSize=3) { + $this->iCountryFlag = $aFlag; + $this->iX=$aX; + $this->iY=$aY; + $this->iScale= $aScale; + if( $aMix < 0 || $aMix > 100 ) { + JpGraphError::RaiseL(8001);//'Mix value for icon must be between 0 and 100.'); + } + $this->iMix = $aMix; + $this->iCountryStdSize = $aStdSize; + } + + function SetPos($aX,$aY) { + $this->iX=$aX; + $this->iY=$aY; + } + + function CreateFromString($aStr) { + $this->iImgString = $aStr; + } + + function SetScalePos($aX,$aY) { + $this->iScalePosX = $aX; + $this->iScalePosY = $aY; + } + + function SetScale($aScale) { + $this->iScale = $aScale; + } + + function SetMix($aMix) { + if( $aMix < 0 || $aMix > 100 ) { + JpGraphError::RaiseL(8001);//('Mix value for icon must be between 0 and 100.'); + } + $this->iMix = $aMix ; + } + + function SetAnchor($aXAnchor='left',$aYAnchor='center') { + if( !in_array($aXAnchor,$this->iAnchors) || + !in_array($aYAnchor,$this->iAnchors) ) { + JpGraphError::RaiseL(8002);//("Anchor position for icons must be one of 'top', 'bottom', 'left', 'right' or 'center'"); + } + $this->iHorAnchor=$aXAnchor; + $this->iVertAnchor=$aYAnchor; + } + + function PreStrokeAdjust($aGraph) { + // Nothing to do ... + } + + function DoLegend($aGraph) { + // Nothing to do ... + } + + function Max() { + return array(false,false); + } + + + // The next four function are framework function tht gets called + // from Gantt and is not menaiungfull in the context of Icons but + // they must be implemented to avoid errors. + function GetMaxDate() { return false; } + function GetMinDate() { return false; } + function GetLineNbr() { return 0; } + function GetAbsHeight() {return 0; } + + + function Min() { + return array(false,false); + } + + function StrokeMargin(&$aImg) { + return true; + } + + function Stroke($aImg,$axscale=null,$ayscale=null) { + $this->StrokeWithScale($aImg,$axscale,$ayscale); + } + + function StrokeWithScale($aImg,$axscale,$ayscale) { + if( $this->iScalePosX === null || $this->iScalePosY === null || + $axscale === null || $ayscale === null ) { + $this->_Stroke($aImg); + } + else { + $this->_Stroke($aImg, + round($axscale->Translate($this->iScalePosX)), + round($ayscale->Translate($this->iScalePosY))); + } + } + + function GetWidthHeight() { + $dummy=0; + return $this->_Stroke($dummy,null,null,true); + } + + function _Stroke($aImg,$x=null,$y=null,$aReturnWidthHeight=false) { + if( $this->iFile != '' && $this->iCountryFlag != '' ) { + JpGraphError::RaiseL(8003);//('It is not possible to specify both an image file and a country flag for the same icon.'); + } + if( $this->iFile != '' ) { + $gdimg = Graph::LoadBkgImage('',$this->iFile); + } + elseif( $this->iImgString != '') { + $gdimg = Image::CreateFromString($this->iImgString); + } + + else { + if( ! class_exists('FlagImages',false) ) { + JpGraphError::RaiseL(8004);//('In order to use Country flags as icons you must include the "jpgraph_flags.php" file.'); + } + $fobj = new FlagImages($this->iCountryStdSize); + $dummy=''; + $gdimg = $fobj->GetImgByName($this->iCountryFlag,$dummy); + } + + $iconw = imagesx($gdimg); + $iconh = imagesy($gdimg); + + if( $aReturnWidthHeight ) { + return array(round($iconw*$this->iScale),round($iconh*$this->iScale)); + } + + if( $x !== null && $y !== null ) { + $this->iX = $x; $this->iY = $y; + } + if( $this->iX >= 0 && $this->iX <= 1.0 ) { + $w = imagesx($aImg->img); + $this->iX = round($w*$this->iX); + } + if( $this->iY >= 0 && $this->iY <= 1.0 ) { + $h = imagesy($aImg->img); + $this->iY = round($h*$this->iY); + } + + if( $this->iHorAnchor == 'center' ) + $this->iX -= round($iconw*$this->iScale/2); + if( $this->iHorAnchor == 'right' ) + $this->iX -= round($iconw*$this->iScale); + if( $this->iVertAnchor == 'center' ) + $this->iY -= round($iconh*$this->iScale/2); + if( $this->iVertAnchor == 'bottom' ) + $this->iY -= round($iconh*$this->iScale); + + $aImg->CopyMerge($gdimg,$this->iX,$this->iY,0,0, + round($iconw*$this->iScale),round($iconh*$this->iScale), + $iconw,$iconh, + $this->iMix); + } +} + +?> diff --git a/Societes/ric/jpgraph/jpgraph_imgtrans.php b/Societes/ric/jpgraph/jpgraph_imgtrans.php new file mode 100755 index 00000000..411a7811 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_imgtrans.php @@ -0,0 +1,223 @@ +gdImg = $aGdImg; + } + + // -------------------------------------------------------------------- + // _TransVert3D() and _TransHor3D() are helper methods to + // Skew3D(). + // -------------------------------------------------------------------- + function _TransVert3D($aGdImg,$aHorizon=100,$aSkewDist=120,$aDir=SKEW3D_DOWN,$aMinSize=true,$aFillColor='#FFFFFF',$aQuality=false,$aBorder=false,$aHorizonPos=0.5) { + + + // Parameter check + if( $aHorizonPos < 0 || $aHorizonPos > 1.0 ) { + JpGraphError::RaiseL(9001); + //("Value for image transformation out of bounds.\nVanishing point on horizon must be specified as a value between 0 and 1."); + } + + $w = imagesx($aGdImg); + $h = imagesy($aGdImg); + + // Create new image + $ww = $w; + if( $aMinSize ) + $hh = ceil($h * $aHorizon / ($aSkewDist+$h)); + else + $hh = $h; + + $newgdh = imagecreatetruecolor($ww,$hh); + $crgb = new RGB( $newgdh ); + $fillColor = $crgb->Allocate($aFillColor); + imagefilledrectangle($newgdh,0,0,$ww-1,$hh-1,$fillColor); + + if( $aBorder ) { + $colidx = $crgb->Allocate($aBorder); + imagerectangle($newgdh,0,0,$ww-1,$hh-1,$colidx); + } + + $mid = round($w * $aHorizonPos); + + $last=$h; + for($y=0; $y < $h; ++$y) { + + $yp = $h-$y-1; + $yt = floor($yp * $aHorizon / ($aSkewDist + $yp)); + + if( !$aQuality ) { + if( $last <= $yt ) continue ; + $last = $yt; + } + + for($x=0; $x < $w; ++$x) { + $xt = ($x-$mid) * $aSkewDist / ($aSkewDist + $yp); + if( $aDir == SKEW3D_UP ) + $rgb = imagecolorat($aGdImg,$x,$h-$y-1); + else + $rgb = imagecolorat($aGdImg,$x,$y); + $r = ($rgb >> 16) & 0xFF; + $g = ($rgb >> 8) & 0xFF; + $b = $rgb & 0xFF; + $colidx = imagecolorallocate($newgdh,$r,$g,$b); + $xt = round($xt+$mid); + if( $aDir == SKEW3D_UP ) { + $syt = $yt; + } + else { + $syt = $hh-$yt-1; + } + + if( !empty($set[$yt]) ) { + $nrgb = imagecolorat($newgdh,$xt,$syt); + $nr = ($nrgb >> 16) & 0xFF; + $ng = ($nrgb >> 8) & 0xFF; + $nb = $nrgb & 0xFF; + $colidx = imagecolorallocate($newgdh,floor(($r+$nr)/2), + floor(($g+$ng)/2),floor(($b+$nb)/2)); + } + + imagesetpixel($newgdh,$xt,$syt,$colidx); + } + + $set[$yt] = true; + } + + return $newgdh; + } + + // -------------------------------------------------------------------- + // _TransVert3D() and _TransHor3D() are helper methods to + // Skew3D(). + // -------------------------------------------------------------------- + function _TransHor3D($aGdImg,$aHorizon=100,$aSkewDist=120,$aDir=SKEW3D_LEFT,$aMinSize=true,$aFillColor='#FFFFFF',$aQuality=false,$aBorder=false,$aHorizonPos=0.5) { + + $w = imagesx($aGdImg); + $h = imagesy($aGdImg); + + // Create new image + $hh = $h; + if( $aMinSize ) + $ww = ceil($w * $aHorizon / ($aSkewDist+$w)); + else + $ww = $w; + + $newgdh = imagecreatetruecolor($ww,$hh); + $crgb = new RGB( $newgdh ); + $fillColor = $crgb->Allocate($aFillColor); + imagefilledrectangle($newgdh,0,0,$ww-1,$hh-1,$fillColor); + + if( $aBorder ) { + $colidx = $crgb->Allocate($aBorder); + imagerectangle($newgdh,0,0,$ww-1,$hh-1,$colidx); + } + + $mid = round($h * $aHorizonPos); + + $last = -1; + for($x=0; $x < $w-1; ++$x) { + $xt = floor($x * $aHorizon / ($aSkewDist + $x)); + if( !$aQuality ) { + if( $last >= $xt ) continue ; + $last = $xt; + } + + for($y=0; $y < $h; ++$y) { + $yp = $h-$y-1; + $yt = ($yp-$mid) * $aSkewDist / ($aSkewDist + $x); + + if( $aDir == SKEW3D_RIGHT ) + $rgb = imagecolorat($aGdImg,$w-$x-1,$y); + else + $rgb = imagecolorat($aGdImg,$x,$y); + $r = ($rgb >> 16) & 0xFF; + $g = ($rgb >> 8) & 0xFF; + $b = $rgb & 0xFF; + $colidx = imagecolorallocate($newgdh,$r,$g,$b); + $yt = floor($hh-$yt-$mid-1); + if( $aDir == SKEW3D_RIGHT ) { + $sxt = $ww-$xt-1; + } + else + $sxt = $xt ; + + if( !empty($set[$xt]) ) { + $nrgb = imagecolorat($newgdh,$sxt,$yt); + $nr = ($nrgb >> 16) & 0xFF; + $ng = ($nrgb >> 8) & 0xFF; + $nb = $nrgb & 0xFF; + $colidx = imagecolorallocate($newgdh,floor(($r+$nr)/2), + floor(($g+$ng)/2),floor(($b+$nb)/2)); + } + imagesetpixel($newgdh,$sxt,$yt,$colidx); + } + + $set[$xt] = true; + } + + return $newgdh; + } + + // -------------------------------------------------------------------- + // Skew image for the apperance of a 3D effect + // This transforms an image into a 3D-skewed version + // of the image. The transformation is specified by giving the height + // of the artificial horizon and specifying a "skew" factor which + // is the distance on the horizon line between the point of + // convergence and perspective line. + // + // The function returns the GD handle of the transformed image + // leaving the original image untouched. + // + // Parameters: + // * $aGdImg, GD handle to the image to be transformed + // * $aHorizon, Distance to the horizon + // * $aSkewDist, Distance from the horizon point of convergence + // on the horizon line to the perspective points. A larger + // value will fore-shorten the image more + // * $aDir, parameter specifies type of convergence. This of this + // as the walls in a room you are looking at. This specifies if the + // image should be applied on the left,right,top or bottom walls. + // * $aMinSize, true=make the new image just as big as needed, + // false = keep the image the same size as the original image + // * $aFillColor, Background fill color in the image + // * $aHiQuality, true=performa some interpolation that improves + // the image quality but at the expense of performace. Enabling + // high quality will have a dramatic effect on the time it takes + // to transform an image. + // * $aBorder, if set to anything besides false this will draw a + // a border of the speciied color around the image + // -------------------------------------------------------------------- + function Skew3D($aHorizon=120,$aSkewDist=150,$aDir=SKEW3D_DOWN,$aHiQuality=false,$aMinSize=true,$aFillColor='#FFFFFF',$aBorder=false) { + return $this->_Skew3D($this->gdImg,$aHorizon,$aSkewDist,$aDir,$aHiQuality, + $aMinSize,$aFillColor,$aBorder); + } + + function _Skew3D($aGdImg,$aHorizon=120,$aSkewDist=150,$aDir=SKEW3D_DOWN,$aHiQuality=false,$aMinSize=true,$aFillColor='#FFFFFF',$aBorder=false) { + if( $aDir == SKEW3D_DOWN || $aDir == SKEW3D_UP ) + return $this->_TransVert3D($aGdImg,$aHorizon,$aSkewDist,$aDir,$aMinSize,$aFillColor,$aHiQuality,$aBorder); + else + return $this->_TransHor3D($aGdImg,$aHorizon,$aSkewDist,$aDir,$aMinSize,$aFillColor,$aHiQuality,$aBorder); + + } + +} + + +?> diff --git a/Societes/ric/jpgraph/jpgraph_led.php b/Societes/ric/jpgraph/jpgraph_led.php new file mode 100755 index 00000000..83bb2692 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_led.php @@ -0,0 +1,311 @@ + array('red','darkred:0.9','red:0.3'),// 0 + LEDC_GREEN => array('green','darkgreen','green:0.3'),// 1 + LEDC_BLUE => array('lightblue:0.9','darkblue:0.85','darkblue:0.7'),// 2 + LEDC_YELLOW => array('yellow','yellow:0.4','yellow:0.3'),// 3 + LEDC_GRAY => array('gray:1.4','darkgray:0.85','darkgray:0.7'), + LEDC_CHOCOLATE => array('chocolate','chocolate:0.7','chocolate:0.5'), + LEDC_PERU => array('peru:0.95','peru:0.6','peru:0.5'), + LEDC_GOLDENROD => array('goldenrod','goldenrod:0.6','goldenrod:0.5'), + LEDC_KHAKI => array('khaki:0.7','khaki:0.4','khaki:0.3'), + LEDC_OLIVE => array('#808000','#808000:0.7','#808000:0.6'), + LEDC_LIMEGREEN => array('limegreen:0.9','limegreen:0.5','limegreen:0.4'), + LEDC_FORESTGREEN => array('forestgreen','forestgreen:0.7','forestgreen:0.5'), + LEDC_TEAL => array('teal','teal:0.7','teal:0.5'), + LEDC_STEELBLUE => array('steelblue','steelblue:0.65','steelblue:0.5'), + LEDC_NAVY => array('navy:1.3','navy:0.95','navy:0.8'),//14 + LEDC_INVERTGRAY => array('darkgray','lightgray:1.5','white')//15 + ), + + /* Each line of the character is encoded as a 4 bit value + 0 ____ + 1 ___x + 2 __x_ + 3 __xx + 4 _x__ + 5 _x_x + 6 _xx_ + 7 _xxx + 8 x___ + 9 x__x + 10 x_x_ + 11 x_xx + 12 xx__ + 13 xx_x + 14 xxx_ + 15 xxxx + */ + + $iLEDSpec = array( + 0 => array(6,9,11,15,13,9,6), + 1 => array(2,6,10,2,2,2,2), + 2 => array(6,9,1,2,4,8,15), + 3 => array(6,9,1,6,1,9,6), + 4 => array(1,3,5,9,15,1,1), + 5 => array(15,8,8,14,1,9,6), + 6 => array(6,8,8,14,9,9,6), + 7 => array(15,1,1,2,4,4,4), + 8 => array(6,9,9,6,9,9,6), + 9 => array(6,9,9,7,1,1,6), + '!' => array(4,4,4,4,4,0,4), + '?' => array(6,9,1,2,2,0,2), + '#' => array(0,9,15,9,15,9,0), + '@' => array(6,9,11,11,10,9,6), + '-' => array(0,0,0,15,0,0,0), + '_' => array(0,0,0,0,0,0,15), + '=' => array(0,0,15,0,15,0,0), + '+' => array(0,0,4,14,4,0,0), + '|' => array(4,4,4,4,4,4,4), //vertical line, used for simulate rus 'Ы' + ',' => array(0,0,0,0,0,12,4), + '.' => array(0,0,0,0,0,12,12), + ':' => array(12,12,0,0,0,12,12), + ';' => array(12,12,0,0,0,12,4), + '[' => array(3,2,2,2,2,2,3), + ']' => array(12,4,4,4,4,4,12), + '(' => array(1,2,2,2,2,2,1), + ')' => array(8,4,4,4,4,4,8), + '{' => array(3,2,2,6,2,2,3), + '}' => array(12,4,4,6,4,4,12), + '<' => array(1,2,4,8,4,2,1), + '>' => array(8,4,2,1,2,4,8), + '*' => array(9,6,15,6,9,0,0), + '"' => array(10,10,0,0,0,0,0), + '\'' => array(4,4,0,0,0,0,0), + '`' => array(4,2,0,0,0,0,0), + '~' => array(13,11,0,0,0,0,0), + '^' => array(4,10,0,0,0,0,0), + '\\' => array(8,8,4,6,2,1,1), + '/' => array(1,1,2,6,4,8,8), + '%' => array(1,9,2,6,4,9,8), + '&' => array(0,4,10,4,11,10,5), + '$' => array(2,7,8,6,1,14,4), + ' ' => array(0,0,0,0,0,0,0), + '•' => array(0,0,6,6,0,0,0), //149 + '°' => array(14,10,14,0,0,0,0), //176 + '†' => array(4,4,14,4,4,4,4), //134 + '‡' => array(4,4,14,4,14,4,4), //135 + '±' => array(0,4,14,4,0,14,0), //177 + '‰' => array(0,4,2,15,2,4,0), //137 show right arrow + '™' => array(0,2,4,15,4,2,0), //156 show left arrow + 'Ў' => array(0,0,8,8,0,0,0), //159 show small hi-stick - that need for simulate rus 'Ф' + "\t" => array(8,8,8,0,0,0,0), //show hi-stick - that need for simulate rus 'У' + "\r" => array(8,8,8,8,8,8,8), //vertical line - that need for simulate 'M', 'W' and rus 'М','Ш' ,'Щ' + "\n" => array(15,15,15,15,15,15,15), //fill up - that need for simulate rus 'Ж' + "Ґ" => array(10,5,10,5,10,5,10), //chess + "µ" => array(15,0,15,0,15,0,15), //4 horizontal lines + // latin + 'A' => array(6,9,9,15,9,9,9), + 'B' => array(14,9,9,14,9,9,14), + 'C' => array(6,9,8,8,8,9,6), + 'D' => array(14,9,9,9,9,9,14), + 'E' => array(15,8,8,14,8,8,15), + 'F' => array(15,8,8,14,8,8,8), + 'G' => array(6,9,8,8,11,9,6), + 'H' => array(9,9,9,15,9,9,9), + 'I' => array(14,4,4,4,4,4,14), + 'J' => array(15,1,1,1,1,9,6), + 'K' => array(8,9,10,12,12,10,9), + 'L' => array(8,8,8,8,8,8,15), + 'M' => array(8,13,10,8,8,8,8),// need to add \r + 'N' => array(9,9,13,11,9,9,9), + 'O' => array(6,9,9,9,9,9,6), + 'P' => array(14,9,9,14,8,8,8), + 'Q' => array(6,9,9,9,13,11,6), + 'R' => array(14,9,9,14,12,10,9), + 'S' => array(6,9,8,6,1,9,6), + 'T' => array(14,4,4,4,4,4,4), + 'U' => array(9,9,9,9,9,9,6), + 'V' => array(0,0,0,10,10,10,4), + 'W' => array(8,8,8,8,10,13,8),// need to add \r + 'X' => array(9,9,6,6,6,9,9), + 'Y' => array(10,10,10,10,4,4,4), + 'Z' => array(15,1,2,6,4,8,15), + // russian utf-8 + 'А' => array(6,9,9,15,9,9,9), + 'Б' => array(14,8,8,14,9,9,14), + 'В' => array(14,9,9,14,9,9,14), + 'Г' => array(15,8,8,8,8,8,8), + 'Д' => array(14,9,9,9,9,9,14), + 'Е' => array(15,8,8,14,8,8,15), + 'Ё' => array(6,15,8,14,8,8,15), + //Ж is combine: >\n< + 'З' => array(6,9,1,2,1,9,6), + 'И' => array(9,9,9,11,13,9,9), + 'Й' => array(13,9,9,11,13,9,9), + 'К' => array(9,10,12,10,9,9,9), + 'Л' => array(7,9,9,9,9,9,9), + 'М' => array(8,13,10,8,8,8,8),// need to add \r + 'Н' => array(9,9,9,15,9,9,9), + 'О' => array(6,9,9,9,9,9,6), + 'П' => array(15,9,9,9,9,9,9), + 'Р' => array(14,9,9,14,8,8,8), + 'С' => array(6,9,8,8,8,9,6), + 'Т' => array(14,4,4,4,4,4,4), + 'У' => array(9,9,9,7,1,9,6), + 'Ф' => array(2,7,10,10,7,2,2),// need to add Ў + 'Х' => array(9,9,6,6,6,9,9), + 'Ц' => array(10,10,10,10,10,15,1), + 'Ч' => array(9,9,9,7,1,1,1), + 'Ш' => array(10,10,10,10,10,10,15),// \r + 'Щ' => array(10,10,10,10,10,15,0),// need to add \r + 'Ъ' => array(12,4,4,6,5,5,6), + 'Ы' => array(8,8,8,14,9,9,14),// need to add | + 'Ь' => array(8,8,8,14,9,9,14), + 'Э' => array(6,9,1,7,1,9,6), + 'Ю' => array(2,2,2,3,2,2,2),// need to add O + 'Я' => array(7,9,9,7,3,5,9) + ), + + $iSuperSampling = 3, $iMarg = 1, $iRad = 4; + + function __construct($aRadius = 2, $aMargin= 0.6) { + $this->iRad = $aRadius; + $this->iMarg = $aMargin; + } + + function SetSupersampling($aSuperSampling = 2) { + $this->iSuperSampling = $aSuperSampling; + } + + function _GetLED($aLedIdx, $aColor = 0) { + $width= $this->iLED_X*$this->iRad*2 + ($this->iLED_X+1)*$this->iMarg + $this->iRad ; + $height= $this->iLED_Y*$this->iRad*2 + ($this->iLED_Y)*$this->iMarg + $this->iRad * 2; + + // Adjust radious for supersampling + $rad = $this->iRad * $this->iSuperSampling; + + // Margin in between "Led" dots + $marg = $this->iMarg * $this->iSuperSampling; + + $swidth = $width*$this->iSuperSampling; + $sheight = $height*$this->iSuperSampling; + + $simg = new RotImage($swidth, $sheight, 0, DEFAULT_GFORMAT, false); + $simg->SetColor($this->iColorSchema[$aColor][2]); + $simg->FilledRectangle(0, 0, $swidth-1, $sheight-1); + + if( array_key_exists($aLedIdx, $this->iLEDSpec) ) { + $d = $this->iLEDSpec[$aLedIdx]; + } + else { + $d = array(0,0,0,0,0,0,0); + } + + for($r = 0; $r < 7; ++$r) { + $dr = $d[$r]; + for($c = 0; $c < 4; ++$c) { + if( ($dr & pow(2,3-$c)) !== 0 ) { + $color = $this->iColorSchema[$aColor][0]; + } + else { + $color = $this->iColorSchema[$aColor][1]; + } + + $x = 2*$rad*$c+$rad + ($c+1)*$marg + $rad ; + $y = 2*$rad*$r+$rad + ($r+1)*$marg + $rad ; + + $simg->SetColor($color); + $simg->FilledCircle($x,$y,$rad); + } + } + + $img = new Image($width, $height, DEFAULT_GFORMAT, false); + $img->Copy($simg->img, 0, 0, 0, 0, $width, $height, $swidth, $sheight); + $simg->Destroy(); + unset($simg); + return $img; + } + + + function Stroke($aValStr, $aColor = 0, $aFileName = '') { + $this->StrokeNumber($aValStr, $aColor, $aFileName); + } + + + function StrokeNumber($aValStr, $aColor = 0, $aFileName = '') { + if( $aColor < 0 || $aColor >= sizeof($this->iColorSchema) ) { + $aColor = 0; + } + + if(($n = mb_strlen($aValStr,'utf8')) == 0) { + $aValStr = ' '; + $n = 1; + } + + for($i = 0; $i < $n; ++$i) { + $d = mb_substr($aValStr, $i, 1, 'utf8'); + if( ctype_digit($d) ) { + $d = (int)$d; + } + else { + $d = strtoupper($d); + } + $digit_img[$i] = $this->_GetLED($d, $aColor); + } + + $w = imagesx($digit_img[0]->img); + $h = imagesy($digit_img[0]->img); + + $number_img = new Image($w*$n, $h, DEFAULT_GFORMAT, false); + + for($i = 0; $i < $n; ++$i) { + $number_img->Copy($digit_img[$i]->img, $i*$w, 0, 0, 0, $w, $h, $w, $h); + } + + if( $aFileName != '' ) { + $number_img->Stream($aFileName); + } else { + $number_img->Headers(); + $number_img->Stream(); + } + } +} +?> diff --git a/Societes/ric/jpgraph/jpgraph_legend.inc.php b/Societes/ric/jpgraph/jpgraph_legend.inc.php new file mode 100755 index 00000000..c7f38b51 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_legend.inc.php @@ -0,0 +1,494 @@ +hide=$aHide; + } + + function SetHColMargin($aXMarg) { + $this->xmargin = $aXMarg; + } + + function SetVColMargin($aSpacing) { + $this->ylinespacing = $aSpacing ; + } + + function SetLeftMargin($aXMarg) { + $this->xlmargin = $aXMarg; + } + + // Synonym + function SetLineSpacing($aSpacing) { + $this->ylinespacing = $aSpacing ; + } + + function SetShadow($aShow='gray',$aWidth=4) { + if( is_string($aShow) ) { + $this->shadow_color = $aShow; + $this->shadow=true; + } + else { + $this->shadow = $aShow; + } + $this->shadow_width = $aWidth; + } + + function SetMarkAbsSize($aSize) { + $this->mark_abs_vsize = $aSize ; + $this->mark_abs_hsize = $aSize ; + } + + function SetMarkAbsVSize($aSize) { + $this->mark_abs_vsize = $aSize ; + } + + function SetMarkAbsHSize($aSize) { + $this->mark_abs_hsize = $aSize ; + } + + function SetLineWeight($aWeight) { + $this->weight = $aWeight; + } + + function SetFrameWeight($aWeight) { + $this->frameweight = $aWeight; + } + + function SetLayout($aDirection=LEGEND_VERT) { + $this->layout_n = $aDirection==LEGEND_VERT ? 1 : 99 ; + } + + function SetColumns($aCols) { + $this->layout_n = $aCols ; + } + + function SetReverse($f=true) { + $this->reverse = $f ; + } + + // Set color on frame around box + function SetColor($aFontColor,$aColor='black') { + $this->font_color=$aFontColor; + $this->color=$aColor; + } + + function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) { + $this->font_family = $aFamily; + $this->font_style = $aStyle; + $this->font_size = $aSize; + } + + function SetPos($aX,$aY,$aHAlign='right',$aVAlign='top') { + $this->Pos($aX,$aY,$aHAlign,$aVAlign); + } + + function SetAbsPos($aX,$aY,$aHAlign='right',$aVAlign='top') { + $this->xabspos=$aX; + $this->yabspos=$aY; + $this->halign=$aHAlign; + $this->valign=$aVAlign; + } + + function Pos($aX,$aY,$aHAlign='right',$aVAlign='top') { + if( !($aX<1 && $aY<1) ) { + JpGraphError::RaiseL(25120);//(" Position for legend must be given as percentage in range 0-1"); + } + $this->xpos=$aX; + $this->ypos=$aY; + $this->halign=$aHAlign; + $this->valign=$aVAlign; + } + + function SetFillColor($aColor) { + $this->fill_color=$aColor; + } + + function Clear() { + $this->txtcol = array(); + } + + function Add($aTxt,$aColor,$aPlotmark='',$aLinestyle=0,$csimtarget='',$csimalt='',$csimwintarget='') { + $this->txtcol[]=array($aTxt,$aColor,$aPlotmark,$aLinestyle,$csimtarget,$csimalt,$csimwintarget); + } + + function GetCSIMAreas() { + return $this->csimareas; + } + + function SetBackgroundGradient($aFrom='navy',$aTo='silver',$aGradType=2) { + $this->bkg_gradtype=$aGradType; + $this->bkg_gradfrom = $aFrom; + $this->bkg_gradto = $aTo; + } + + function HasItems() { + return (boolean)(count($this->txtcol)); + } + + function Stroke($aImg) { + // Constant + $fillBoxFrameWeight=1; + + if( $this->hide ) return; + + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + + if( $this->reverse ) { + $this->txtcol = array_reverse($this->txtcol); + } + + $n=count($this->txtcol); + if( $n == 0 ) return; + + // Find out the max width and height of each column to be able + // to size the legend box. + $numcolumns = ($n > $this->layout_n ? $this->layout_n : $n); + for( $i=0; $i < $numcolumns; ++$i ) { + $colwidth[$i] = $aImg->GetTextWidth($this->txtcol[$i][0]) + + 2*$this->xmargin + 2*$this->mark_abs_hsize; + $colheight[$i] = 0; + + } + + // Find our maximum height in each row + $rows = 0 ; $rowheight[0] = 0; + for( $i=0; $i < $n; ++$i ) { + $h = max($this->mark_abs_vsize,$aImg->GetTextHeight($this->txtcol[$i][0]))+$this->ylinespacing; + + // Makes sure we always have a minimum of 1/4 (1/2 on each side) of the mark as space + // between two vertical legend entries + //$h = round(max($h,$this->mark_abs_vsize+$this->ymargin)); + //echo "Textheight #$i: tetxheight=".$aImg->GetTextHeight($this->txtcol[$i][0]).', '; + //echo "h=$h ({$this->mark_abs_vsize},{$this->ymargin})
    "; + if( $i % $numcolumns == 0 ) { + $rows++; + $rowheight[$rows-1] = 0; + } + $rowheight[$rows-1] = max($rowheight[$rows-1],$h)+1; + } + + $abs_height = 0; + for( $i=0; $i < $rows; ++$i ) { + $abs_height += $rowheight[$i] ; + } + + // Make sure that the height is at least as high as mark size + ymargin + $abs_height = max($abs_height,$this->mark_abs_vsize); + $abs_height += $this->ybottom_margin; + + // Find out the maximum width in each column + for( $i=$numcolumns; $i < $n; ++$i ) { + $colwidth[$i % $numcolumns] = max( + $aImg->GetTextWidth($this->txtcol[$i][0])+2*$this->xmargin+2*$this->mark_abs_hsize, + $colwidth[$i % $numcolumns]); + } + + // Get the total width + $mtw = 0; + for( $i=0; $i < $numcolumns; ++$i ) { + $mtw += $colwidth[$i] ; + } + + // remove the last rows interpace margin (since there is no next row) + $abs_height -= $this->ylinespacing; + + + // Find out maximum width we need for legend box + $abs_width = $mtw+$this->xlmargin+($numcolumns-1)*$this->mark_abs_hsize; + + if( $this->xabspos === -1 && $this->yabspos === -1 ) { + $this->xabspos = $this->xpos*$aImg->width ; + $this->yabspos = $this->ypos*$aImg->height ; + } + + // Positioning of the legend box + if( $this->halign == 'left' ) { + $xp = $this->xabspos; + } + elseif( $this->halign == 'center' ) { + $xp = $this->xabspos - $abs_width/2; + } + else { + $xp = $aImg->width - $this->xabspos - $abs_width; + } + + $yp=$this->yabspos; + if( $this->valign == 'center' ) { + $yp-=$abs_height/2; + } + elseif( $this->valign == 'bottom' ) { + $yp-=$abs_height; + } + + // Stroke legend box + $aImg->SetColor($this->color); + $aImg->SetLineWeight($this->frameweight); + $aImg->SetLineStyle('solid'); + + if( $this->shadow ) { + $aImg->ShadowRectangle($xp,$yp, + $xp+$abs_width+$this->shadow_width+2, + $yp+$abs_height+$this->shadow_width+2, + $this->fill_color,$this->shadow_width+2,$this->shadow_color); + } + else { + $aImg->SetColor($this->fill_color); + $aImg->FilledRectangle($xp,$yp,$xp+$abs_width,$yp+$abs_height); + $aImg->SetColor($this->color); + $aImg->Rectangle($xp,$yp,$xp+$abs_width,$yp+$abs_height); + } + + if( $this->bkg_gradtype >= 0 ) { + $grad = new Gradient($aImg); + $grad->FilledRectangle($xp+1, $yp+1, + $xp+$abs_width-3, $yp+$abs_height-3, + $this->bkg_gradfrom, $this->bkg_gradto, + $this->bkg_gradtype); + } + + // x1,y1 is the position for the legend marker + text + // The vertical position is the baseline position for the text + // and every marker is adjusted acording to that. + + // For multiline texts this get more complicated. + + $x1 = $xp + $this->xlmargin; + $y1 = $yp + $rowheight[0] - $this->ylinespacing + 2 ; // The ymargin is included in rowheight + + // Now, y1 is the bottom vertical position of the first legend, i.e if + // the legend has multiple lines it is the bottom line. + + $grad = new Gradient($aImg); + $patternFactory = null; + + // Now stroke each legend in turn + // Each plot has added the following information to the legend + // p[0] = Legend text + // p[1] = Color, + // p[2] = For markers a reference to the PlotMark object + // p[3] = For lines the line style, for gradient the negative gradient style + // p[4] = CSIM target + // p[5] = CSIM Alt text + $i = 1 ; $row = 0; + foreach($this->txtcol as $p) { + + // STROKE DEBUG BOX + if( _JPG_DEBUG ) { + $aImg->SetLineWeight(1); + $aImg->SetColor('red'); + $aImg->SetLineStyle('solid'); + $aImg->Rectangle($x1,$y1,$xp+$abs_width-1,$y1-$rowheight[$row]); + } + + $aImg->SetLineWeight($this->weight); + $x1 = round($x1)+1; // We add one to not collide with the border + $y1=round($y1); + + // This is the center offset up from the baseline which is + // considered the "center" of the marks. This gets slightly complicated since + // we need to consider if the text is a multiline paragraph or if it is only + // a single line. The reason is that for single line the y1 corresponds to the baseline + // and that is fine. However for a multiline paragraph there is no single baseline + // and in that case the y1 corresponds to the lowest y for the bounding box. In that + // case we center the mark in the middle of the paragraph + if( !preg_match('/\n/',$p[0]) ) { + // Single line + $marky = ceil($y1-$this->mark_abs_vsize/2)-1; + } else { + // Paragraph + $marky = $y1 - $aImg->GetTextHeight($p[0])/2; + + // echo "y1=$y1, p[o]={$p[0]}, marky=$marky
    "; + } + + //echo "
    Mark #$i: marky=$marky
    "; + + $x1 += $this->mark_abs_hsize; + + if ( !empty($p[2]) && $p[2]->GetType() > -1 ) { + + + // Make a plot mark legend. This is constructed with a mark which + // is run through with a line + + // First construct a bit of the line that looks exactly like the + // line in the plot + $aImg->SetColor($p[1]); + if( is_string($p[3]) || $p[3]>0 ) { + $aImg->SetLineStyle($p[3]); + $aImg->StyleLine($x1-$this->mark_abs_hsize,$marky,$x1+$this->mark_abs_hsize,$marky); + } + + // Stroke a mark using image + if( $p[2]->GetType() == MARK_IMG ) { + $p[2]->Stroke($aImg,$x1,$marky); + } + + // Stroke a mark with the standard size + // (As long as it is not an image mark ) + if( $p[2]->GetType() != MARK_IMG ) { + + // Clear any user callbacks since we ont want them called for + // the legend marks + $p[2]->iFormatCallback = ''; + $p[2]->iFormatCallback2 = ''; + + // Since size for circles is specified as the radius + // this means that we must half the size to make the total + // width behave as the other marks + if( $p[2]->GetType() == MARK_FILLEDCIRCLE || $p[2]->GetType() == MARK_CIRCLE ) { + $p[2]->SetSize(min($this->mark_abs_vsize,$this->mark_abs_hsize)/2); + $p[2]->Stroke($aImg,$x1,$marky); + } + else { + $p[2]->SetSize(min($this->mark_abs_vsize,$this->mark_abs_hsize)); + $p[2]->Stroke($aImg,$x1,$marky); + } + } + } + elseif ( !empty($p[2]) && (is_string($p[3]) || $p[3]>0 ) ) { + // Draw a styled line + $aImg->SetColor($p[1]); + $aImg->SetLineStyle($p[3]); + $aImg->StyleLine($x1-$this->mark_abs_hsize,$marky,$x1+$this->mark_abs_hsize,$marky); + $aImg->StyleLine($x1-$this->mark_abs_hsize,$marky+1,$x1+$this->mark_abs_hsize,$marky+1); + } + else { + // Draw a colored box + $color = $p[1] ; + + // We make boxes slightly larger to better show + $boxsize = max($this->mark_abs_vsize,$this->mark_abs_hsize) + 2 ; + + $ym = $marky-ceil($boxsize/2) ; // Marker y-coordinate + + // We either need to plot a gradient or a + // pattern. To differentiate we use a kludge. + // Patterns have a p[3] value of < -100 + if( $p[3] < -100 ) { + // p[1][0] == iPattern, p[1][1] == iPatternColor, p[1][2] == iPatternDensity + if( $patternFactory == null ) { + $patternFactory = new RectPatternFactory(); + } + $prect = $patternFactory->Create($p[1][0],$p[1][1],1); + $prect->SetBackground($p[1][3]); + $prect->SetDensity($p[1][2]+1); + $prect->SetPos(new Rectangle($x1,$ym,$boxsize,$boxsize)); + $prect->Stroke($aImg); + $prect=null; + } + else { + if( is_array($color) && count($color)==2 ) { + // The client want a gradient color + $grad->FilledRectangle($x1-$boxsize/2,$ym, + $x1+$boxsize/2,$ym+$boxsize, + $color[0],$color[1],-$p[3]); + } + else { + $aImg->SetColor($p[1]); + $aImg->FilledRectangle($x1-$boxsize/2,$ym, $x1+$boxsize/2,$ym+$boxsize); + } + + // Draw a plot frame line + $aImg->SetColor($this->color); + $aImg->SetLineWeight($fillBoxFrameWeight); + $aImg->Rectangle($x1-$boxsize/2,$ym, + $x1+$boxsize/2,$ym+$boxsize); + } + } + $aImg->SetColor($this->font_color); + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $aImg->SetTextAlign('left','baseline'); + + $debug=false; + $aImg->StrokeText($x1+$this->mark_abs_hsize+$this->xmargin,$y1,$p[0], + 0,'left',$debug); + + // Add CSIM for Legend if defined + if( !empty($p[4]) ) { + + $xs = $x1 - $this->mark_abs_hsize ; + $ys = $y1 + 1 ; + $xe = $x1 + $aImg->GetTextWidth($p[0]) + $this->mark_abs_hsize + $this->xmargin ; + $ye = $y1-$rowheight[$row]+1; + $coords = "$xs,$ys,$xe,$y1,$xe,$ye,$xs,$ye"; + if( ! empty($p[4]) ) { + $this->csimareas .= "csimareas .= " target=\"".$p[6]."\""; + } + + if( !empty($p[5]) ) { + $tmp=sprintf($p[5],$p[0]); + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + } + + if( $i >= $this->layout_n ) { + $x1 = $xp+$this->xlmargin; + $row++; + if( !empty($rowheight[$row]) ) + $y1 += $rowheight[$row]; + $i = 1; + } + else { + $x1 += $colwidth[($i-1) % $numcolumns] ; + ++$i; + } + } + } +} // Class + +?> diff --git a/Societes/ric/jpgraph/jpgraph_line.php b/Societes/ric/jpgraph/jpgraph_line.php new file mode 100755 index 00000000..81756598 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_line.php @@ -0,0 +1,682 @@ +mark = new PlotMark() ; + $this->color = ColorFactory::getColor(); + $this->fill_color = $this->color; + } + //--------------- + // PUBLIC METHODS + + function SetFilled($aFlg=true) { + $this->filled = $aFlg; + } + + function SetBarCenter($aFlag=true) { + $this->barcenter=$aFlag; + } + + function SetStyle($aStyle) { + $this->line_style=$aStyle; + } + + function SetStepStyle($aFlag=true) { + $this->step_style = $aFlag; + } + + function SetColor($aColor) { + parent::SetColor($aColor); + } + + function SetFillFromYMin($f=true) { + $this->fillFromMin = $f ; + } + + function SetFillFromYMax($f=true) { + $this->fillFromMax = $f ; + } + + function SetFillColor($aColor,$aFilled=true) { + //$this->color = $aColor; + $this->fill_color=$aColor; + $this->filled=$aFilled; + } + + function SetFillGradient($aFromColor,$aToColor,$aNumColors=100,$aFilled=true) { + $this->fillgrad_fromcolor = $aFromColor; + $this->fillgrad_tocolor = $aToColor; + $this->fillgrad_numcolors = $aNumColors; + $this->filled = $aFilled; + $this->fillgrad = true; + } + + function Legend($graph) { + if( $this->legend!="" ) { + if( $this->filled && !$this->fillgrad ) { + $graph->legend->Add($this->legend, + $this->fill_color,$this->mark,0, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + elseif( $this->fillgrad ) { + $color=array($this->fillgrad_fromcolor,$this->fillgrad_tocolor); + // In order to differentiate between gradients and cooors specified as an RGB triple + $graph->legend->Add($this->legend,$color,"",-2 /* -GRAD_HOR */, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } else { + $graph->legend->Add($this->legend, + $this->color,$this->mark,$this->line_style, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + } + } + + function AddArea($aMin=0,$aMax=0,$aFilled=LP_AREA_NOT_FILLED,$aColor="gray9",$aBorder=LP_AREA_BORDER) { + if($aMin > $aMax) { + // swap + $tmp = $aMin; + $aMin = $aMax; + $aMax = $tmp; + } + $this->filledAreas[] = array($aMin,$aMax,$aColor,$aFilled,$aBorder); + } + + // Gets called before any axis are stroked + function PreStrokeAdjust($graph) { + + // If another plot type have already adjusted the + // offset we don't touch it. + // (We check for empty in case the scale is a log scale + // and hence doesn't contain any xlabel_offset) + if( empty($graph->xaxis->scale->ticks->xlabel_offset) || $graph->xaxis->scale->ticks->xlabel_offset == 0 ) { + if( $this->center ) { + ++$this->numpoints; + $a=0.5; $b=0.5; + } else { + $a=0; $b=0; + } + $graph->xaxis->scale->ticks->SetXLabelOffset($a); + $graph->SetTextScaleOff($b); + //$graph->xaxis->scale->ticks->SupressMinorTickMarks(); + } + } + + function SetFastStroke($aFlg=true) { + $this->iFastStroke = $aFlg; + } + + function FastStroke($img,$xscale,$yscale,$aStartPoint=0,$exist_x=true) { + // An optimized stroke for many data points with no extra + // features but 60% faster. You can't have values or line styles, or null + // values in plots. + $numpoints=count($this->coords[0]); + if( $this->barcenter ) { + $textadj = 0.5-$xscale->text_scale_off; + } + else { + $textadj = 0; + } + + $img->SetColor($this->color); + $img->SetLineWeight($this->weight); + $pnts=$aStartPoint; + while( $pnts < $numpoints ) { + if( $exist_x ) { + $x=$this->coords[1][$pnts]; + } + else { + $x=$pnts+$textadj; + } + $xt = $xscale->Translate($x); + $y=$this->coords[0][$pnts]; + $yt = $yscale->Translate($y); + if( is_numeric($y) ) { + $cord[] = $xt; + $cord[] = $yt; + } + elseif( $y == '-' && $pnts > 0 ) { + // Just ignore + } + else { + JpGraphError::RaiseL(10002);//('Plot too complicated for fast line Stroke. Use standard Stroke()'); + } + ++$pnts; + } // WHILE + + $img->Polygon($cord,false,true); + } + + function Stroke($img,$xscale,$yscale) { + $idx=0; + $numpoints=count($this->coords[0]); + if( isset($this->coords[1]) ) { + if( count($this->coords[1])!=$numpoints ) { + JpGraphError::RaiseL(2003,count($this->coords[1]),$numpoints); + //("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints"); + } + else { + $exist_x = true; + } + } + else { + $exist_x = false; + } + + if( $this->barcenter ) { + $textadj = 0.5-$xscale->text_scale_off; + } + else { + $textadj = 0; + } + + // Find the first numeric data point + $startpoint=0; + while( $startpoint < $numpoints && !is_numeric($this->coords[0][$startpoint]) ) { + ++$startpoint; + } + + // Bail out if no data points + if( $startpoint == $numpoints ) return; + + if( $this->iFastStroke ) { + $this->FastStroke($img,$xscale,$yscale,$startpoint,$exist_x); + return; + } + + if( $exist_x ) { + $xs=$this->coords[1][$startpoint]; + } + else { + $xs= $textadj+$startpoint; + } + + $img->SetStartPoint($xscale->Translate($xs), + $yscale->Translate($this->coords[0][$startpoint])); + + if( $this->filled ) { + if( $this->fillFromMax ) { + //$max = $yscale->GetMaxVal(); + $cord[$idx++] = $xscale->Translate($xs); + $cord[$idx++] = $yscale->scale_abs[1]; + } + else { + $min = $yscale->GetMinVal(); + if( $min > 0 || $this->fillFromMin ) { + $fillmin = $yscale->scale_abs[0];//Translate($min); + } + else { + $fillmin = $yscale->Translate(0); + } + + $cord[$idx++] = $xscale->Translate($xs); + $cord[$idx++] = $fillmin; + } + } + $xt = $xscale->Translate($xs); + $yt = $yscale->Translate($this->coords[0][$startpoint]); + $cord[$idx++] = $xt; + $cord[$idx++] = $yt; + $yt_old = $yt; + $xt_old = $xt; + $y_old = $this->coords[0][$startpoint]; + + $this->value->Stroke($img,$this->coords[0][$startpoint],$xt,$yt); + + $img->SetColor($this->color); + $img->SetLineWeight($this->weight); + $img->SetLineStyle($this->line_style); + $pnts=$startpoint+1; + $firstnonumeric = false; + + + while( $pnts < $numpoints ) { + + if( $exist_x ) { + $x=$this->coords[1][$pnts]; + } + else { + $x=$pnts+$textadj; + } + $xt = $xscale->Translate($x); + $yt = $yscale->Translate($this->coords[0][$pnts]); + + $y=$this->coords[0][$pnts]; + if( $this->step_style ) { + // To handle null values within step style we need to record the + // first non numeric value so we know from where to start if the + // non value is '-'. + if( is_numeric($y) ) { + $firstnonumeric = false; + if( is_numeric($y_old) ) { + $img->StyleLine($xt_old,$yt_old,$xt,$yt_old); + $img->StyleLine($xt,$yt_old,$xt,$yt); + } + elseif( $y_old == '-' ) { + $img->StyleLine($xt_first,$yt_first,$xt,$yt_first); + $img->StyleLine($xt,$yt_first,$xt,$yt); + } + else { + $yt_old = $yt; + $xt_old = $xt; + } + $cord[$idx++] = $xt; + $cord[$idx++] = $yt_old; + $cord[$idx++] = $xt; + $cord[$idx++] = $yt; + } + elseif( $firstnonumeric==false ) { + $firstnonumeric = true; + $yt_first = $yt_old; + $xt_first = $xt_old; + } + } + else { + $tmp1=$y; + $prev=$this->coords[0][$pnts-1]; + if( $tmp1==='' || $tmp1===NULL || $tmp1==='X' ) $tmp1 = 'x'; + if( $prev==='' || $prev===null || $prev==='X' ) $prev = 'x'; + + if( is_numeric($y) || (is_string($y) && $y != '-') ) { + if( is_numeric($y) && (is_numeric($prev) || $prev === '-' ) ) { + $img->StyleLineTo($xt,$yt); + } + else { + $img->SetStartPoint($xt,$yt); + } + } + if( $this->filled && $tmp1 !== '-' ) { + if( $tmp1 === 'x' ) { + $cord[$idx++] = $cord[$idx-3]; + $cord[$idx++] = $fillmin; + } + elseif( $prev === 'x' ) { + $cord[$idx++] = $xt; + $cord[$idx++] = $fillmin; + $cord[$idx++] = $xt; + $cord[$idx++] = $yt; + } + else { + $cord[$idx++] = $xt; + $cord[$idx++] = $yt; + } + } + else { + if( is_numeric($tmp1) && (is_numeric($prev) || $prev === '-' ) ) { + $cord[$idx++] = $xt; + $cord[$idx++] = $yt; + } + } + } + $yt_old = $yt; + $xt_old = $xt; + $y_old = $y; + + $this->StrokeDataValue($img,$this->coords[0][$pnts],$xt,$yt); + + ++$pnts; + } + + if( $this->filled ) { + $cord[$idx++] = $xt; + if( $this->fillFromMax ) { + $cord[$idx++] = $yscale->scale_abs[1]; + } + else { + if( $min > 0 || $this->fillFromMin ) { + $cord[$idx++] = $yscale->Translate($min); + } + else { + $cord[$idx++] = $yscale->Translate(0); + } + } + if( $this->fillgrad ) { + $img->SetLineWeight(1); + $grad = new Gradient($img); + $grad->SetNumColors($this->fillgrad_numcolors); + $grad->FilledFlatPolygon($cord,$this->fillgrad_fromcolor,$this->fillgrad_tocolor); + $img->SetLineWeight($this->weight); + } + else { + $img->SetColor($this->fill_color); + $img->FilledPolygon($cord); + } + if( $this->weight > 0 ) { + $img->SetLineWeight($this->weight); + $img->SetColor($this->color); + // Remove first and last coordinate before drawing the line + // sine we otherwise get the vertical start and end lines which + // doesn't look appropriate + $img->Polygon(array_slice($cord,2,count($cord)-4)); + } + } + + if(!empty($this->filledAreas)) { + + $minY = $yscale->Translate($yscale->GetMinVal()); + $factor = ($this->step_style ? 4 : 2); + + for($i = 0; $i < sizeof($this->filledAreas); ++$i) { + // go through all filled area elements ordered by insertion + // fill polygon array + $areaCoords[] = $cord[$this->filledAreas[$i][0] * $factor]; + $areaCoords[] = $minY; + + $areaCoords = + array_merge($areaCoords, + array_slice($cord, + $this->filledAreas[$i][0] * $factor, + ($this->filledAreas[$i][1] - $this->filledAreas[$i][0] + ($this->step_style ? 0 : 1)) * $factor)); + $areaCoords[] = $areaCoords[sizeof($areaCoords)-2]; // last x + $areaCoords[] = $minY; // last y + + if($this->filledAreas[$i][3]) { + $img->SetColor($this->filledAreas[$i][2]); + $img->FilledPolygon($areaCoords); + $img->SetColor($this->color); + } + // Check if we should draw the frame. + // If not we still re-draw the line since it might have been + // partially overwritten by the filled area and it doesn't look + // very good. + if( $this->filledAreas[$i][4] ) { + $img->Polygon($areaCoords); + } + else { + $img->Polygon($cord); + } + + $areaCoords = array(); + } + } + + if( $this->mark->type == -1 || $this->mark->show == false ) + return; + + for( $pnts=0; $pnts<$numpoints; ++$pnts) { + + if( $exist_x ) { + $x=$this->coords[1][$pnts]; + } + else { + $x=$pnts+$textadj; + } + $xt = $xscale->Translate($x); + $yt = $yscale->Translate($this->coords[0][$pnts]); + + if( is_numeric($this->coords[0][$pnts]) ) { + if( !empty($this->csimtargets[$pnts]) ) { + if( !empty($this->csimwintargets[$pnts]) ) { + $this->mark->SetCSIMTarget($this->csimtargets[$pnts],$this->csimwintargets[$pnts]); + } + else { + $this->mark->SetCSIMTarget($this->csimtargets[$pnts]); + } + $this->mark->SetCSIMAlt($this->csimalts[$pnts]); + } + if( $exist_x ) { + $x=$this->coords[1][$pnts]; + } + else { + $x=$pnts; + } + $this->mark->SetCSIMAltVal($this->coords[0][$pnts],$x); + $this->mark->Stroke($img,$xt,$yt); + $this->csimareas .= $this->mark->GetCSIMAreas(); + } + } + } +} // Class + + +//=================================================== +// CLASS AccLinePlot +// Description: +//=================================================== +class AccLinePlot extends Plot { + protected $plots=null,$nbrplots=0; + private $iStartEndZero=true; + //--------------- + // CONSTRUCTOR + function __construct($plots) { + $this->plots = $plots; + $this->nbrplots = count($plots); + $this->numpoints = $plots[0]->numpoints; + + // Verify that all plots have the same number of data points + for( $i=1; $i < $this->nbrplots; ++$i ) { + if( $plots[$i]->numpoints != $this->numpoints ) { + JpGraphError::RaiseL(10003);//('Each plot in an accumulated lineplot must have the same number of data points',0) + } + } + + for($i=0; $i < $this->nbrplots; ++$i ) { + $this->LineInterpolate($this->plots[$i]->coords[0]); + } + } + + //--------------- + // PUBLIC METHODS + function Legend($graph) { + foreach( $this->plots as $p ) { + $p->DoLegend($graph); + } + } + + function Max() { + list($xmax) = $this->plots[0]->Max(); + $nmax=0; + $n = count($this->plots); + for($i=0; $i < $n; ++$i) { + $nc = count($this->plots[$i]->coords[0]); + $nmax = max($nmax,$nc); + list($x) = $this->plots[$i]->Max(); + $xmax = Max($xmax,$x); + } + for( $i = 0; $i < $nmax; $i++ ) { + // Get y-value for line $i by adding the + // individual bars from all the plots added. + // It would be wrong to just add the + // individual plots max y-value since that + // would in most cases give to large y-value. + $y=$this->plots[0]->coords[0][$i]; + for( $j = 1; $j < $this->nbrplots; $j++ ) { + $y += $this->plots[ $j ]->coords[0][$i]; + } + $ymax[$i] = $y; + } + $ymax = max($ymax); + return array($xmax,$ymax); + } + + function Min() { + $nmax=0; + list($xmin,$ysetmin) = $this->plots[0]->Min(); + $n = count($this->plots); + for($i=0; $i < $n; ++$i) { + $nc = count($this->plots[$i]->coords[0]); + $nmax = max($nmax,$nc); + list($x,$y) = $this->plots[$i]->Min(); + $xmin = Min($xmin,$x); + $ysetmin = Min($y,$ysetmin); + } + for( $i = 0; $i < $nmax; $i++ ) { + // Get y-value for line $i by adding the + // individual bars from all the plots added. + // It would be wrong to just add the + // individual plots min y-value since that + // would in most cases give to small y-value. + $y=$this->plots[0]->coords[0][$i]; + for( $j = 1; $j < $this->nbrplots; $j++ ) { + $y += $this->plots[ $j ]->coords[0][$i]; + } + $ymin[$i] = $y; + } + $ymin = Min($ysetmin,Min($ymin)); + return array($xmin,$ymin); + } + + // Gets called before any axis are stroked + function PreStrokeAdjust($graph) { + + // If another plot type have already adjusted the + // offset we don't touch it. + // (We check for empty in case the scale is a log scale + // and hence doesn't contain any xlabel_offset) + + if( empty($graph->xaxis->scale->ticks->xlabel_offset) || + $graph->xaxis->scale->ticks->xlabel_offset == 0 ) { + if( $this->center ) { + ++$this->numpoints; + $a=0.5; $b=0.5; + } else { + $a=0; $b=0; + } + $graph->xaxis->scale->ticks->SetXLabelOffset($a); + $graph->SetTextScaleOff($b); + $graph->xaxis->scale->ticks->SupressMinorTickMarks(); + } + + } + + function SetInterpolateMode($aIntMode) { + $this->iStartEndZero=$aIntMode; + } + + // Replace all '-' with an interpolated value. We use straightforward + // linear interpolation. If the data starts with one or several '-' they + // will be replaced by the the first valid data point + function LineInterpolate(&$aData) { + + $n=count($aData); + $i=0; + + // If first point is undefined we will set it to the same as the first + // valid data + if( $aData[$i]==='-' ) { + // Find the first valid data + while( $i < $n && $aData[$i]==='-' ) { + ++$i; + } + if( $i < $n ) { + for($j=0; $j < $i; ++$j ) { + if( $this->iStartEndZero ) + $aData[$i] = 0; + else + $aData[$j] = $aData[$i]; + } + } + else { + // All '-' => Error + return false; + } + } + + while($i < $n) { + while( $i < $n && $aData[$i] !== '-' ) { + ++$i; + } + if( $i < $n ) { + $pstart=$i-1; + + // Now see how long this segment of '-' are + while( $i < $n && $aData[$i] === '-' ) { + ++$i; + } + if( $i < $n ) { + $pend=$i; + $size=$pend-$pstart; + $k=($aData[$pend]-$aData[$pstart])/$size; + // Replace the segment of '-' with a linear interpolated value. + for($j=1; $j < $size; ++$j ) { + $aData[$pstart+$j] = $aData[$pstart] + $j*$k ; + } + } + else { + // There are no valid end point. The '-' goes all the way to the end + // In that case we just set all the remaining values the the same as the + // last valid data point. + for( $j=$pstart+1; $j < $n; ++$j ) + if( $this->iStartEndZero ) { + $aData[$j] = 0; + } + else { + $aData[$j] = $aData[$pstart] ; + } + } + } + } + return true; + } + + // To avoid duplicate of line drawing code here we just + // change the y-values for each plot and then restore it + // after we have made the stroke. We must do this copy since + // it wouldn't be possible to create an acc line plot + // with the same graphs, i.e AccLinePlot(array($pl,$pl,$pl)); + // since this method would have a side effect. + function Stroke($img,$xscale,$yscale) { + $img->SetLineWeight($this->weight); + $this->numpoints = count($this->plots[0]->coords[0]); + // Allocate array + $coords[$this->nbrplots][$this->numpoints]=0; + for($i=0; $i<$this->numpoints; $i++) { + $coords[0][$i]=$this->plots[0]->coords[0][$i]; + $accy=$coords[0][$i]; + for($j=1; $j<$this->nbrplots; ++$j ) { + $coords[$j][$i] = $this->plots[$j]->coords[0][$i]+$accy; + $accy = $coords[$j][$i]; + } + } + for($j=$this->nbrplots-1; $j>=0; --$j) { + $p=$this->plots[$j]; + for( $i=0; $i<$this->numpoints; ++$i) { + $tmp[$i]=$p->coords[0][$i]; + $p->coords[0][$i]=$coords[$j][$i]; + } + $p->Stroke($img,$xscale,$yscale); + for( $i=0; $i<$this->numpoints; ++$i) { + $p->coords[0][$i]=$tmp[$i]; + } + $p->coords[0][]=$tmp; + } + } +} // Class + + +/* EOF */ +?> diff --git a/Societes/ric/jpgraph/jpgraph_log.php b/Societes/ric/jpgraph/jpgraph_log.php new file mode 100755 index 00000000..2f7e4e86 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_log.php @@ -0,0 +1,305 @@ +ticks = new LogTicks(); + $this->name = 'log'; + } + + //---------------- + // PUBLIC METHODS + + // Translate between world and screen + function Translate($a) { + if( !is_numeric($a) ) { + if( $a != '' && $a != '-' && $a != 'x' ) { + JpGraphError::RaiseL(11001); + // ('Your data contains non-numeric values.'); + } + return 1; + } + if( $a < 0 ) { + JpGraphError::RaiseL(11002); + //("Negative data values can not be used in a log scale."); + exit(1); + } + if( $a==0 ) $a=1; + $a=log10($a); + return ceil($this->off + ($a*1.0 - $this->scale[0]) * $this->scale_factor); + } + + // Relative translate (don't include offset) usefull when we just want + // to know the relative position (in pixels) on the axis + function RelTranslate($a) { + if( !is_numeric($a) ) { + if( $a != '' && $a != '-' && $a != 'x' ) { + JpGraphError::RaiseL(11001); + //('Your data contains non-numeric values.'); + } + return 1; + } + if( $a==0 ) { + $a=1; + } + $a=log10($a); + return round(($a*1.0 - $this->scale[0]) * $this->scale_factor); + } + + // Use bcpow() for increased precision + function GetMinVal() { + if( function_exists("bcpow") ) { + return round(bcpow(10,$this->scale[0],15),14); + } + else { + return round(pow(10,$this->scale[0]),14); + } + } + + function GetMaxVal() { + if( function_exists("bcpow") ) { + return round(bcpow(10,$this->scale[1],15),14); + } + else { + return round(pow(10,$this->scale[1]),14); + } + } + + // Logarithmic autoscaling is much simplier since we just + // set the min and max to logs of the min and max values. + // Note that for log autoscale the "maxstep" the fourth argument + // isn't used. This is just included to give the method the same + // signature as the linear counterpart. + function AutoScale($img,$min,$max,$maxsteps,$majend=true) { + if( $min==0 ) $min=1; + + if( $max <= 0 ) { + JpGraphError::RaiseL(11004); + //('Scale error for logarithmic scale. You have a problem with your data values. The max value must be greater than 0. It is mathematically impossible to have 0 in a logarithmic scale.'); + } + if( is_numeric($this->autoscale_min) ) { + $smin = round($this->autoscale_min); + $smax = ceil(log10($max)); + if( $min >= $max ) { + JpGraphError::RaiseL(25071);//('You have specified a min value with SetAutoMin() which is larger than the maximum value used for the scale. This is not possible.'); + } + } + else { + $smin = floor(log10($min)); + if( is_numeric($this->autoscale_max) ) { + $smax = round($this->autoscale_max); + if( $smin >= $smax ) { + JpGraphError::RaiseL(25072);//('You have specified a max value with SetAutoMax() which is smaller than the miminum value used for the scale. This is not possible.'); + } + } + else + $smax = ceil(log10($max)); + } + + $this->Update($img,$smin,$smax); + } + //--------------- + // PRIVATE METHODS +} // Class + +//=================================================== +// CLASS LogTicks +// Description: +//=================================================== +class LogTicks extends Ticks{ + private $label_logtype=LOGLABELS_MAGNITUDE; + private $ticklabels_pos = array(); + //--------------- + // CONSTRUCTOR + function __construct() { + } + //--------------- + // PUBLIC METHODS + function IsSpecified() { + return true; + } + + function SetLabelLogType($aType) { + $this->label_logtype = $aType; + } + + // For log scale it's meaningless to speak about a major step + // We just return -1 to make the framework happy (specifically + // StrokeLabels() ) + function GetMajor() { + return -1; + } + + function SetTextLabelStart($aStart) { + JpGraphError::RaiseL(11005); + //('Specifying tick interval for a logarithmic scale is undefined. Remove any calls to SetTextLabelStart() or SetTextTickInterval() on the logarithmic scale.'); + } + + function SetXLabelOffset($dummy) { + // For log scales we dont care about XLabel offset + } + + // Draw ticks on image "img" using scale "scale". The axis absolute + // position in the image is specified in pos, i.e. for an x-axis + // it specifies the absolute y-coord and for Y-ticks it specified the + // absolute x-position. + function Stroke($img,$scale,$pos) { + $start = $scale->GetMinVal(); + $limit = $scale->GetMaxVal(); + $nextMajor = 10*$start; + $step = $nextMajor / 10.0; + + + $img->SetLineWeight($this->weight); + + if( $scale->type == "y" ) { + // member direction specified if the ticks should be on + // left or right side. + $a=$pos + $this->direction*$this->GetMinTickAbsSize(); + $a2=$pos + $this->direction*$this->GetMajTickAbsSize(); + + $count=1; + $this->maj_ticks_pos[0]=$scale->Translate($start); + $this->maj_ticklabels_pos[0]=$scale->Translate($start); + if( $this->supress_first ) + $this->maj_ticks_label[0]=""; + else { + if( $this->label_formfunc != '' ) { + $f = $this->label_formfunc; + $this->maj_ticks_label[0]=call_user_func($f,$start); + } + elseif( $this->label_logtype == LOGLABELS_PLAIN ) { + $this->maj_ticks_label[0]=$start; + } + else { + $this->maj_ticks_label[0]='10^'.round(log10($start)); + } + } + $i=1; + for($y=$start; $y<=$limit; $y+=$step,++$count ) { + $ys=$scale->Translate($y); + $this->ticks_pos[]=$ys; + $this->ticklabels_pos[]=$ys; + if( $count % 10 == 0 ) { + if( !$this->supress_tickmarks ) { + if( $this->majcolor!="" ) { + $img->PushColor($this->majcolor); + $img->Line($pos,$ys,$a2,$ys); + $img->PopColor(); + } + else { + $img->Line($pos,$ys,$a2,$ys); + } + } + + $this->maj_ticks_pos[$i]=$ys; + $this->maj_ticklabels_pos[$i]=$ys; + + if( $this->label_formfunc != '' ) { + $f = $this->label_formfunc; + $this->maj_ticks_label[$i]=call_user_func($f,$nextMajor); + } + elseif( $this->label_logtype == 0 ) { + $this->maj_ticks_label[$i]=$nextMajor; + } + else { + $this->maj_ticks_label[$i]='10^'.round(log10($nextMajor)); + } + ++$i; + $nextMajor *= 10; + $step *= 10; + $count=1; + } + else { + if( !$this->supress_tickmarks && !$this->supress_minor_tickmarks) { + if( $this->mincolor!="" ) { + $img->PushColor($this->mincolor); + } + $img->Line($pos,$ys,$a,$ys); + if( $this->mincolor!="" ) { + $img->PopColor(); + } + } + } + } + } + else { + $a=$pos - $this->direction*$this->GetMinTickAbsSize(); + $a2=$pos - $this->direction*$this->GetMajTickAbsSize(); + $count=1; + $this->maj_ticks_pos[0]=$scale->Translate($start); + $this->maj_ticklabels_pos[0]=$scale->Translate($start); + if( $this->supress_first ) { + $this->maj_ticks_label[0]=""; + } + else { + if( $this->label_formfunc != '' ) { + $f = $this->label_formfunc; + $this->maj_ticks_label[0]=call_user_func($f,$start); + } + elseif( $this->label_logtype == 0 ) { + $this->maj_ticks_label[0]=$start; + } + else { + $this->maj_ticks_label[0]='10^'.round(log10($start)); + } + } + $i=1; + for($x=$start; $x<=$limit; $x+=$step,++$count ) { + $xs=$scale->Translate($x); + $this->ticks_pos[]=$xs; + $this->ticklabels_pos[]=$xs; + if( $count % 10 == 0 ) { + if( !$this->supress_tickmarks ) { + $img->Line($xs,$pos,$xs,$a2); + } + $this->maj_ticks_pos[$i]=$xs; + $this->maj_ticklabels_pos[$i]=$xs; + + if( $this->label_formfunc != '' ) { + $f = $this->label_formfunc; + $this->maj_ticks_label[$i]=call_user_func($f,$nextMajor); + } + elseif( $this->label_logtype == 0 ) { + $this->maj_ticks_label[$i]=$nextMajor; + } + else { + $this->maj_ticks_label[$i]='10^'.round(log10($nextMajor)); + } + ++$i; + $nextMajor *= 10; + $step *= 10; + $count=1; + } + else { + if( !$this->supress_tickmarks && !$this->supress_minor_tickmarks) { + $img->Line($xs,$pos,$xs,$a); + } + } + } + } + return true; + } +} // Class +/* EOF */ +?> diff --git a/Societes/ric/jpgraph/jpgraph_meshinterpolate.inc.php b/Societes/ric/jpgraph/jpgraph_meshinterpolate.inc.php new file mode 100755 index 00000000..7e8ae535 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_meshinterpolate.inc.php @@ -0,0 +1,105 @@ +Linear($aData,$aFactor); +} + +/** + * Utility class to interpolate a given data matrix + * + */ +class MeshInterpolate { + private $data = array(); + + /** + * Calculate the mid points of the given rectangle which has its top left + * corner at $row,$col. The $aFactordecides how many spliots should be done. + * i.e. how many more divisions should be done recursively + * + * @param $row Top left corner of square to work with + * @param $col Top left corner of square to work with + * $param $aFactor In how many subsquare should we split this square. A value of 1 indicates that no action + */ + function IntSquare( $aRow, $aCol, $aFactor ) { + if ( $aFactor <= 1 ) + return; + + $step = pow( 2, $aFactor-1 ); + + $v0 = $this->data[$aRow][$aCol]; + $v1 = $this->data[$aRow][$aCol + $step]; + $v2 = $this->data[$aRow + $step][$aCol]; + $v3 = $this->data[$aRow + $step][$aCol + $step]; + + $this->data[$aRow][$aCol + $step / 2] = ( $v0 + $v1 ) / 2; + $this->data[$aRow + $step / 2][$aCol] = ( $v0 + $v2 ) / 2; + $this->data[$aRow + $step][$aCol + $step / 2] = ( $v2 + $v3 ) / 2; + $this->data[$aRow + $step / 2][$aCol + $step] = ( $v1 + $v3 ) / 2; + $this->data[$aRow + $step / 2][$aCol + $step / 2] = ( $v0 + $v1 + $v2 + $v3 ) / 4; + + $this->IntSquare( $aRow, $aCol, $aFactor-1 ); + $this->IntSquare( $aRow, $aCol + $step / 2, $aFactor-1 ); + $this->IntSquare( $aRow + $step / 2, $aCol, $aFactor-1 ); + $this->IntSquare( $aRow + $step / 2, $aCol + $step / 2, $aFactor-1 ); + } + + /** + * Interpolate values in a matrice so that the total number of data points + * in vert and horizontal axis are $aIntNbr more. For example $aIntNbr=2 will + * make the data matrice have tiwce as many vertical and horizontal dta points. + * + * Note: This will blow up the matrcide in memory size in the order of $aInNbr^2 + * + * @param $ &$aData The original data matricde + * @param $aInNbr Interpolation factor + * @return the interpolated matrice + */ + function Linear( &$aData, $aIntFactor ) { + $step = pow( 2, $aIntFactor-1 ); + + $orig_cols = count( $aData[0] ); + $orig_rows = count( $aData ); + // Number of new columns/rows + // N = (a-1) * 2^(f-1) + 1 + $p = pow( 2, $aIntFactor-1 ); + $new_cols = $p * ( $orig_cols - 1 ) + 1; + $new_rows = $p * ( $orig_rows - 1 ) + 1; + + $this->data = array_fill( 0, $new_rows, array_fill( 0, $new_cols, 0 ) ); + // Initialize the new matrix with the values that we know + for ( $i = 0; $i < $new_rows; $i++ ) { + for ( $j = 0; $j < $new_cols; $j++ ) { + $v = 0 ; + if ( ( $i % $step == 0 ) && ( $j % $step == 0 ) ) { + $v = $aData[$i / $step][$j / $step]; + } + $this->data[$i][$j] = $v; + } + } + + for ( $i = 0; $i < $new_rows-1; $i += $step ) { + for ( $j = 0; $j < $new_cols-1; $j += $step ) { + $this->IntSquare( $i, $j, $aIntFactor ); + } + } + + return $this->data; + } +} + +?> diff --git a/Societes/ric/jpgraph/jpgraph_mgraph.php b/Societes/ric/jpgraph/jpgraph_mgraph.php new file mode 100755 index 00000000..80b2b6d7 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_mgraph.php @@ -0,0 +1,345 @@ +iWidth = $aWidth; + $this->iHeight = $aHeight; + + // If the cached version exist just read it directly from the + // cache, stream it back to browser and exit + if( $aCachedName!='' && READ_CACHE && $aInline ) { + $this->cache = new ImgStreamCache(); + $this->cache->SetTimeOut($aTimeOut); + $image = new Image(); + if( $this->cache->GetAndStream($image,$aCachedName) ) { + exit(); + } + } + $this->inline = $aInline; + $this->cache_name = $aCachedName; + + $this->title = new Text(); + $this->title->ParagraphAlign('center'); + $this->title->SetFont(FF_FONT2,FS_BOLD); + $this->title->SetMargin(3); + $this->title->SetAlign('center'); + + $this->subtitle = new Text(); + $this->subtitle->ParagraphAlign('center'); + $this->subtitle->SetFont(FF_FONT1,FS_BOLD); + $this->subtitle->SetMargin(3); + $this->subtitle->SetAlign('center'); + + $this->subsubtitle = new Text(); + $this->subsubtitle->ParagraphAlign('center'); + $this->subsubtitle->SetFont(FF_FONT1,FS_NORMAL); + $this->subsubtitle->SetMargin(3); + $this->subsubtitle->SetAlign('center'); + + $this->footer = new Footer(); + + } + + // Specify background fill color for the combined graph + function SetFillColor($aColor) { + $this->iFillColor = $aColor; + } + + // Add a frame around the combined graph + function SetFrame($aFlg,$aColor='black',$aWeight=1) { + $this->iDoFrame = $aFlg; + $this->iFrameColor = $aColor; + $this->iFrameWeight = $aWeight; + } + + // Specify a background image blend + function SetBackgroundImageMix($aMix) { + $this->background_image_mix = $aMix ; + } + + // Specify a background image + function SetBackgroundImage($aFileName,$aCenter_aX=NULL,$aY=NULL) { + // Second argument can be either a boolean value or + // a numeric + $aCenter=TRUE; + $aX=NULL; + + if( is_numeric($aCenter_aX) ) { + $aX=$aCenter_aX; + } + + // Get extension to determine image type + $e = explode('.',$aFileName); + if( !$e ) { + JpGraphError::RaiseL(12002,$aFileName); + //('Incorrect file name for MGraph::SetBackgroundImage() : '.$aFileName.' Must have a valid image extension (jpg,gif,png) when using autodetection of image type'); + } + + $valid_formats = array('png', 'jpg', 'gif'); + $aImgFormat = strtolower($e[count($e)-1]); + if ($aImgFormat == 'jpeg') { + $aImgFormat = 'jpg'; + } + elseif (!in_array($aImgFormat, $valid_formats) ) { + JpGraphError::RaiseL(12003,$aImgFormat,$aFileName); + //('Unknown file extension ($aImgFormat) in MGraph::SetBackgroundImage() for filename: '.$aFileName); + } + + $this->background_image = $aFileName; + $this->background_image_center=$aCenter; + $this->background_image_format=$aImgFormat; + $this->background_image_x = $aX; + $this->background_image_y = $aY; + } + + function _strokeBackgroundImage() { + if( $this->background_image == '' ) return; + + $bkgimg = Graph::LoadBkgImage('',$this->background_image); + + // Background width & Heoght + $bw = imagesx($bkgimg); + $bh = imagesy($bkgimg); + + // Canvas width and height + $cw = imagesx($this->img); + $ch = imagesy($this->img); + + if( $this->doshadow ) { + $cw -= $this->shadow_width; + $ch -= $this->shadow_width; + } + + if( $this->background_image_x === NULL || $this->background_image_y === NULL ) { + if( $this->background_image_center ) { + // Center original image in the plot area + $x = round($cw/2-$bw/2); $y = round($ch/2-$bh/2); + } + else { + // Just copy the image from left corner, no resizing + $x=0; $y=0; + } + } + else { + $x = $this->background_image_x; + $y = $this->background_image_y; + } + imagecopymerge($this->img,$bkgimg,$x,$y,0,0,$bw,$bh,$this->background_image_mix); + } + + function AddMix($aGraph,$x=0,$y=0,$mix=100,$fx=0,$fy=0,$w=0,$h=0) { + $this->_gdImgHandle($aGraph->Stroke( _IMG_HANDLER),$x,$y,$fx=0,$fy=0,$w,$h,$mix); + } + + function Add($aGraph,$x=0,$y=0,$fx=0,$fy=0,$w=0,$h=0) { + $this->_gdImgHandle($aGraph->Stroke( _IMG_HANDLER),$x,$y,$fx=0,$fy=0,$w,$h); + } + + function _gdImgHandle($agdCanvas,$x,$y,$fx=0,$fy=0,$w=0,$h=0,$mix=100) { + if( $w == 0 ) { + $w = @imagesx($agdCanvas); + } + if( $w === NULL ) { + JpGraphError::RaiseL(12007); + //('Argument to MGraph::Add() is not a valid GD image handle.'); + return; + } + if( $h == 0 ) { + $h = @imagesy($agdCanvas); + } + $this->iGraphs[$this->iCnt++] = array($agdCanvas,$x,$y,$fx,$fy,$w,$h,$mix); + } + + function SetMargin($lm,$rm,$tm,$bm) { + $this->lm = $lm; + $this->rm = $rm; + $this->tm = $tm; + $this->bm = $bm; + } + + function SetExpired($aFlg=true) { + $this->expired = $aFlg; + } + + function SetImgFormat($aFormat,$aQuality=75) { + $this->image_format = $aFormat; + $this->image_quality = $aQuality; + } + + // Set the shadow around the whole image + function SetShadow($aShowShadow=true,$aShadowWidth=4,$aShadowColor='gray@0.3') { + $this->doshadow = $aShowShadow; + $this->shadow_color = $aShadowColor; + $this->shadow_width = $aShadowWidth; + $this->footer->iBottomMargin += $aShadowWidth; + $this->footer->iRightMargin += $aShadowWidth; + } + + function StrokeTitle($image,$w,$h) { + // Stroke title + if( $this->title->t !== '' ) { + + $margin = 3; + + $y = $this->title->margin; + if( $this->title->halign == 'center' ) { + $this->title->Center(0,$w,$y); + } + elseif( $this->title->halign == 'left' ) { + $this->title->SetPos($this->title->margin+2,$y); + } + elseif( $this->title->halign == 'right' ) { + $indent = 0; + if( $this->doshadow ) { + $indent = $this->shadow_width+2; + } + $this->title->SetPos($w-$this->title->margin-$indent,$y,'right'); + } + $this->title->Stroke($image); + + // ... and subtitle + $y += $this->title->GetTextHeight($image) + $margin + $this->subtitle->margin; + if( $this->subtitle->halign == 'center' ) { + $this->subtitle->Center(0,$w,$y); + } + elseif( $this->subtitle->halign == 'left' ) { + $this->subtitle->SetPos($this->subtitle->margin+2,$y); + } + elseif( $this->subtitle->halign == 'right' ) { + $indent = 0; + if( $this->doshadow ) { + $indent = $this->shadow_width+2; + } + $this->subtitle->SetPos($this->img->width-$this->subtitle->margin-$indent,$y,'right'); + } + $this->subtitle->Stroke($image); + + // ... and subsubtitle + $y += $this->subtitle->GetTextHeight($image) + $margin + $this->subsubtitle->margin; + if( $this->subsubtitle->halign == 'center' ) { + $this->subsubtitle->Center(0,$w,$y); + } + elseif( $this->subsubtitle->halign == 'left' ) { + $this->subsubtitle->SetPos($this->subsubtitle->margin+2,$y); + } + elseif( $this->subsubtitle->halign == 'right' ) { + $indent = 0; + if( $this->doshadow ) { + $indent = $this->shadow_width+2; + } + $this->subsubtitle->SetPos($w-$this->subsubtitle->margin-$indent,$y,'right'); + } + $this->subsubtitle->Stroke($image); + + } + } + + function Stroke($aFileName='') { + // Find out the necessary size for the container image + $w=0; $h=0; + for($i=0; $i < $this->iCnt; ++$i ) { + $maxw = $this->iGraphs[$i][1]+$this->iGraphs[$i][5]; + $maxh = $this->iGraphs[$i][2]+$this->iGraphs[$i][6]; + $w = max( $w, $maxw ); + $h = max( $h, $maxh ); + } + $w += $this->lm+$this->rm; + $h += $this->tm+$this->bm; + + // User specified width,height overrides + if( $this->iWidth !== NULL && $this->iWidth !== 0 ) $w = $this->iWidth; + if( $this->iHeight!== NULL && $this->iHeight !== 0) $h = $this->iHeight; + + if( $this->doshadow ) { + $w += $this->shadow_width; + $h += $this->shadow_width; + } + + $image = new Image($w,$h); + $image->SetImgFormat( $this->image_format,$this->image_quality); + + if( $this->doshadow ) { + $image->SetColor($this->iFrameColor); + $image->ShadowRectangle(0,0,$w-1,$h-1,$this->iFillColor,$this->shadow_width,$this->shadow_color); + $w -= $this->shadow_width; + $h -= $this->shadow_width; + } + else { + $image->SetColor($this->iFillColor); + $image->FilledRectangle(0,0,$w-1,$h-1); + } + $image->SetExpired($this->expired); + + $this->img = $image->img; + $this->_strokeBackgroundImage(); + + if( $this->iDoFrame && ! $this->doshadow ) { + $image->SetColor($this->iFrameColor); + $image->SetLineWeight($this->iFrameWeight); + $image->Rectangle(0,0,$w-1,$h-1); + } + + // Copy all sub graphs to the container + for($i=0; $i < $this->iCnt; ++$i ) { + $image->CopyMerge($this->iGraphs[$i][0], + $this->iGraphs[$i][1]+$this->lm,$this->iGraphs[$i][2]+$this->tm, + $this->iGraphs[$i][3],$this->iGraphs[$i][4], + $this->iGraphs[$i][5],$this->iGraphs[$i][6], + -1,-1, /* Full from width and height */ + $this->iGraphs[$i][7]); + + + } + + $this->StrokeTitle($image,$w,$h); + $this->footer->Stroke($image); + + // Output image + if( $aFileName == _IMG_HANDLER ) { + return $image->img; + } + else { + //Finally stream the generated picture + $this->cache = new ImgStreamCache(); + $this->cache->PutAndStream($image,$this->cache_name,$this->inline,$aFileName); + } + } +} + +// EOF + +?> diff --git a/Societes/ric/jpgraph/jpgraph_pie.php b/Societes/ric/jpgraph/jpgraph_pie.php new file mode 100755 index 00000000..2bc1deb6 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_pie.php @@ -0,0 +1,1499 @@ + array(136,34,40,45,46,62,63,134,74,10,120,136,141,168,180,77,209,218,346,395,89,430), + "pastel" => array(27,415,128,59,66,79,105,110,42,147,152,230,236,240,331,337,405,38), + "water" => array(8,370,24,40,335,56,213,237,268,14,326,387,10,388), + "sand" => array(27,168,34,170,19,50,65,72,131,209,46,393)); + protected $setslicecolors=array(); + protected $labeltype=0; // Default to percentage + protected $pie_border=true,$pie_interior_border=true; + public $value; + protected $ishadowcolor='',$ishadowdrop=4; + protected $ilabelposadj=1; + protected $legendcsimtargets = array(),$legendcsimwintargets = array(); + protected $legendcsimalts = array(); + protected $adjusted_data = array(); + public $guideline = null; + protected $guidelinemargin=10,$iShowGuideLineForSingle = false; + protected $iGuideLineCurve = false,$iGuideVFactor=1.4,$iGuideLineRFactor=0.8; + protected $la = array(); // Holds the exact angle for each label + + //--------------- + // CONSTRUCTOR + function __construct($data) { + $this->data = array_reverse($data); + $this->title = new Text(""); + $this->title->SetFont(FF_DEFAULT,FS_BOLD); + $this->value = new DisplayValue(); + $this->value->Show(); + $this->value->SetFormat('%.1f%%'); + $this->guideline = new LineProperty(); + } + + //--------------- + // PUBLIC METHODS + function SetCenter($x,$y=0.5) { + $this->posx = $x; + $this->posy = $y; + } + + // Enable guideline and set drwaing policy + function SetGuideLines($aFlg=true,$aCurved=true,$aAlways=false) { + $this->guideline->Show($aFlg); + $this->iShowGuideLineForSingle = $aAlways; + $this->iGuideLineCurve = $aCurved; + } + + // Adjuste the distance between labels and labels and pie + function SetGuideLinesAdjust($aVFactor,$aRFactor=0.8) { + $this->iGuideVFactor=$aVFactor; + $this->iGuideLineRFactor=$aRFactor; + } + + function SetColor($aColor) { + $this->color = $aColor; + } + + function SetSliceColors($aColors) { + $this->setslicecolors = $aColors; + } + + function SetShadow($aColor='darkgray',$aDropWidth=4) { + $this->ishadowcolor = $aColor; + $this->ishadowdrop = $aDropWidth; + } + + function SetCSIMTargets($aTargets,$aAlts='',$aWinTargets='') { + $this->csimtargets=array_reverse($aTargets); + if( is_array($aWinTargets) ) + $this->csimwintargets=array_reverse($aWinTargets); + if( is_array($aAlts) ) + $this->csimalts=array_reverse($aAlts); + } + + function GetCSIMareas() { + return $this->csimareas; + } + + function AddSliceToCSIM($i,$xc,$yc,$radius,$sa,$ea) { + //Slice number, ellipse centre (x,y), height, width, start angle, end angle + while( $sa > 2*M_PI ) $sa = $sa - 2*M_PI; + while( $ea > 2*M_PI ) $ea = $ea - 2*M_PI; + + $sa = 2*M_PI - $sa; + $ea = 2*M_PI - $ea; + + // Special case when we have only one slice since then both start and end + // angle will be == 0 + if( abs($sa - $ea) < 0.0001 ) { + $sa=2*M_PI; $ea=0; + } + + //add coordinates of the centre to the map + $xc = floor($xc);$yc=floor($yc); + $coords = "$xc, $yc"; + + //add coordinates of the first point on the arc to the map + $xp = floor(($radius*cos($ea))+$xc); + $yp = floor($yc-$radius*sin($ea)); + $coords.= ", $xp, $yp"; + + //add coordinates every 0.2 radians + $a=$ea+0.2; + + // If we cross the 360-limit with a slice we need to handle + // the fact that end angle is smaller than start + if( $sa < $ea ) { + while ($a <= 2*M_PI) { + $xp = floor($radius*cos($a)+$xc); + $yp = floor($yc-$radius*sin($a)); + $coords.= ", $xp, $yp"; + $a += 0.2; + } + $a -= 2*M_PI; + } + + + while ($a < $sa) { + $xp = floor($radius*cos($a)+$xc); + $yp = floor($yc-$radius*sin($a)); + $coords.= ", $xp, $yp"; + $a += 0.2; + } + + //Add the last point on the arc + $xp = floor($radius*cos($sa)+$xc); + $yp = floor($yc-$radius*sin($sa)); + $coords.= ", $xp, $yp"; + if( !empty($this->csimtargets[$i]) ) { + $this->csimareas .= "csimtargets[$i]."\""; + $tmp=""; + if( !empty($this->csimwintargets[$i]) ) { + $this->csimareas .= " target=\"".$this->csimwintargets[$i]."\" "; + } + if( !empty($this->csimalts[$i]) ) { + $tmp=sprintf($this->csimalts[$i],$this->data[$i]); + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + } + + + function SetTheme($aTheme) { +// JpGraphError::RaiseL(15012,$aTheme); +// return; + + if( in_array($aTheme,array_keys($this->themearr)) ) { + $this->theme = $aTheme; + $this->is_using_plot_theme = true; + } else { + JpGraphError::RaiseL(15001,$aTheme);//("PiePLot::SetTheme() Unknown theme: $aTheme"); + } + } + + function ExplodeSlice($e,$radius=20) { + if( ! is_integer($e) ) + JpGraphError::RaiseL(15002);//('Argument to PiePlot::ExplodeSlice() must be an integer'); + $this->explode_radius[$e]=$radius; + } + + function ExplodeAll($radius=20) { + $this->explode_all=true; + $this->explode_r = $radius; + } + + function Explode($aExplodeArr) { + if( !is_array($aExplodeArr) ) { + JpGraphError::RaiseL(15003); + //("Argument to PiePlot::Explode() must be an array with integer distances."); + } + $this->explode_radius = $aExplodeArr; + } + + function SetStartAngle($aStart) { + if( $aStart < 0 || $aStart > 360 ) { + JpGraphError::RaiseL(15004);//('Slice start angle must be between 0 and 360 degrees.'); + } + if( $aStart == 0 ) { + $this->startangle = 0; + } + else { + $this->startangle = 360-$aStart; + $this->startangle *= M_PI/180; + } + } + + // Size in percentage + function SetSize($aSize) { + if( ($aSize>0 && $aSize<=0.5) || ($aSize>10 && $aSize<1000) ) + $this->radius = $aSize; + else + JpGraphError::RaiseL(15006); + //("PiePlot::SetSize() Radius for pie must either be specified as a fraction [0, 0.5] of the size of the image or as an absolute size in pixels in the range [10, 1000]"); + } + + // Set label arrays + function SetLegends($aLegend) { + $this->legends = $aLegend; + } + + // Set text labels for slices + function SetLabels($aLabels,$aLblPosAdj="auto") { + $this->labels = array_reverse($aLabels); + $this->ilabelposadj=$aLblPosAdj; + } + + function SetLabelPos($aLblPosAdj) { + $this->ilabelposadj=$aLblPosAdj; + } + + // Should we display actual value or percentage? + function SetLabelType($aType) { + if( $aType < 0 || $aType > 2 ) + JpGraphError::RaiseL(15008,$aType); + //("PiePlot::SetLabelType() Type for pie plots must be 0 or 1 (not $t)."); + $this->labeltype = $aType; + } + + // Deprecated. + function SetValueType($aType) { + $this->SetLabelType($aType); + } + + // Should the circle around a pie plot be displayed + function ShowBorder($exterior=true,$interior=true) { + $this->pie_border = $exterior; + $this->pie_interior_border = $interior; + } + + // Setup the legends + function Legend($graph) { + $colors = array_keys($graph->img->rgb->rgb_table); + sort($colors); + $ta=$this->themearr[$this->theme]; + $n = count($this->data); + + if( $this->setslicecolors==null ) { + $numcolors=count($ta); + if( class_exists('PiePlot3D',false) && ($this instanceof PiePlot3D) ) { + $ta = array_reverse(array_slice($ta,0,$n)); + } + } + else { + $this->setslicecolors = array_slice($this->setslicecolors,0,$n); + $numcolors=count($this->setslicecolors); + if( $graph->pieaa && !($this instanceof PiePlot3D) ) { + $this->setslicecolors = array_reverse($this->setslicecolors); + } + } + + $sum=0; + for($i=0; $i < $n; ++$i) + $sum += $this->data[$i]; + + // Bail out with error if the sum is 0 + if( $sum==0 ) + JpGraphError::RaiseL(15009);//("Illegal pie plot. Sum of all data is zero for Pie!"); + + // Make sure we don't plot more values than data points + // (in case the user added more legends than data points) + $legendsCount = is_array($this->legends) ? count($this->legends) : 0; + $n = min($legendsCount,count($this->data)); + if( $this->legends != "" ) { + $this->legends = array_reverse(array_slice($this->legends,0,$n)); + } + for( $i=$n-1; $i >= 0; --$i ) { + $l = $this->legends[$i]; + // Replace possible format with actual values + $count = is_array($this->csimalts) ? count($this->csimalts) : 0; + if( $count > $i ) { + $fmt = $this->csimalts[$i]; + } + else { + $fmt = "%d"; // Deafult Alt if no other has been specified + } + if( $this->labeltype==0 ) { + $l = sprintf($l,100*$this->data[$i]/$sum); + $alt = sprintf($fmt,$this->data[$i]); + + } + elseif( $this->labeltype == 1) { + $l = sprintf($l,$this->data[$i]); + $alt = sprintf($fmt,$this->data[$i]); + + } + else { + $l = sprintf($l,$this->adjusted_data[$i]); + $alt = sprintf($fmt,$this->adjusted_data[$i]); + } + + if( empty($this->csimwintargets[$i]) ) { + $wintarg = ''; + } + else { + $wintarg = $this->csimwintargets[$i]; + } + + if( $this->setslicecolors==null ) { + $csimtarget = isset($this->csimtargets[$i]) ? $this->csimtargets[$i] : null; + $graph->legend->Add($l,$colors[$ta[$i%$numcolors]],"",0,$csimtarget,$alt,$wintarg); + } + else { + $csimtarget = isset($this->csimtargets[$i]) ? $this->csimtargets[$i] : null; + $graph->legend->Add($l,$this->setslicecolors[$i%$numcolors],"",0,$csimtarget,$alt,$wintarg); + } + } + } + + // Adjust the rounded percetage value so that the sum of + // of the pie slices are always 100% + // Using the Hare/Niemeyer method + function AdjPercentage($aData,$aPrec=0) { + $mul=100; + if( $aPrec > 0 && $aPrec < 3 ) { + if( $aPrec == 1 ) + $mul=1000; + else + $mul=10000; + } + + $tmp = array(); + $result = array(); + $quote_sum=0; + $n = count($aData) ; + for( $i=0, $sum=0; $i < $n; ++$i ) + $sum+=$aData[$i]; + foreach($aData as $index => $value) { + $tmp_percentage=$value/$sum*$mul; + $result[$index]=floor($tmp_percentage); + $tmp[$index]=$tmp_percentage-$result[$index]; + $quote_sum+=$result[$index]; + } + if( $quote_sum == $mul) { + if( $mul > 100 ) { + $tmp = $mul / 100; + for( $i=0; $i < $n; ++$i ) { + $result[$i] /= $tmp ; + } + } + return $result; + } + arsort($tmp,SORT_NUMERIC); + reset($tmp); + for($i=0; $i < $mul-$quote_sum; $i++) + { + $result[key($tmp)]++; + next($tmp); + } + if( $mul > 100 ) { + $tmp = $mul / 100; + for( $i=0; $i < $n; ++$i ) { + $result[$i] /= $tmp ; + } + } + return $result; + } + + + function Stroke($img,$aaoption=0) { + // aaoption is used to handle antialias + // aaoption == 0 a normal pie + // aaoption == 1 just the body + // aaoption == 2 just the values + + // Explode scaling. If anti alias we scale the image + // twice and we also need to scale the exploding distance + $expscale = $aaoption === 1 ? 2 : 1; + + if( $this->labeltype == 2 ) { + // Adjust the data so that it will add up to 100% + $this->adjusted_data = $this->AdjPercentage($this->data); + } + + if ($this->use_plot_theme_colors) { + $this->setslicecolors = null; + } + + $colors = array_keys($img->rgb->rgb_table); + sort($colors); + $ta=$this->themearr[$this->theme]; + $n = count($this->data); + + if( $this->setslicecolors==null ) { + $numcolors=count($ta); + } + else { + // We need to create an array of colors as long as the data + // since we need to reverse it to get the colors in the right order + $numcolors=count($this->setslicecolors); + $i = 2*$numcolors; + while( $n > $i ) { + $this->setslicecolors = array_merge($this->setslicecolors,$this->setslicecolors); + $i += $n; + } + $tt = array_slice($this->setslicecolors,0,$n % $numcolors); + $this->setslicecolors = array_merge($this->setslicecolors,$tt); + $this->setslicecolors = array_reverse($this->setslicecolors); + } + + // Draw the slices + $sum=0; + for($i=0; $i < $n; ++$i) + $sum += $this->data[$i]; + + // Bail out with error if the sum is 0 + if( $sum==0 ) { + JpGraphError::RaiseL(15009);//("Sum of all data is 0 for Pie."); + } + + // Set up the pie-circle + if( $this->radius <= 1 ) { + $radius = floor($this->radius*min($img->width,$img->height)); + } + else { + $radius = $aaoption === 1 ? $this->radius*2 : $this->radius; + } + + if( $this->posx <= 1 && $this->posx > 0 ) { + $xc = round($this->posx*$img->width); + } + else { + $xc = $this->posx ; + } + + if( $this->posy <= 1 && $this->posy > 0 ) { + $yc = round($this->posy*$img->height); + } + else { + $yc = $this->posy ; + } + + $n = count($this->data); + + if( $this->explode_all ) { + for($i=0; $i < $n; ++$i) { + $this->explode_radius[$i]=$this->explode_r; + } + } + + // If we have a shadow and not just drawing the labels + if( $this->ishadowcolor != "" && $aaoption !== 2) { + $accsum=0; + $angle2 = $this->startangle; + $img->SetColor($this->ishadowcolor); + for($i=0; $sum > 0 && $i < $n; ++$i) { + $j = $n-$i-1; + $d = $this->data[$i]; + $angle1 = $angle2; + $accsum += $d; + $angle2 = $this->startangle+2*M_PI*$accsum/$sum; + if( empty($this->explode_radius[$j]) ) { + $this->explode_radius[$j]=0; + } + + if( $d < 0.00001 ) continue; + + $la = 2*M_PI - (abs($angle2-$angle1)/2.0+$angle1); + + $xcm = $xc + $this->explode_radius[$j]*cos($la)*$expscale; + $ycm = $yc - $this->explode_radius[$j]*sin($la)*$expscale; + + $xcm += $this->ishadowdrop*$expscale; + $ycm += $this->ishadowdrop*$expscale; + + $_sa = round($angle1*180/M_PI); + $_ea = round($angle2*180/M_PI); + + // The CakeSlice method draws a full circle in case of start angle = end angle + // for pie slices we don't want this behaviour unless we only have one + // slice in the pie in case it is the wanted behaviour + if( $_ea-$_sa > 0.1 || $n==1 ) { + $img->CakeSlice($xcm,$ycm,$radius-1,$radius-1, + $angle1*180/M_PI,$angle2*180/M_PI,$this->ishadowcolor); + } + } + } + + //-------------------------------------------------------------------------------- + // This is the main loop to draw each cake slice + //-------------------------------------------------------------------------------- + + // Set up the accumulated sum, start angle for first slice and border color + $accsum=0; + $angle2 = $this->startangle; + $img->SetColor($this->color); + + // Loop though all the slices if there is a pie to draw (sum>0) + // There are n slices in total + for($i=0; $sum>0 && $i < $n; ++$i) { + + // $j is the actual index used for the slice + $j = $n-$i-1; + + // Make sure we havea valid distance to explode the slice + if( empty($this->explode_radius[$j]) ) { + $this->explode_radius[$j]=0; + } + + // The actual numeric value for the slice + $d = $this->data[$i]; + + $angle1 = $angle2; + + // Accumlate the sum + $accsum += $d; + + // The new angle when we add the "size" of this slice + // angle1 is then the start and angle2 the end of this slice + $angle2 = $this->NormAngle($this->startangle+2*M_PI*$accsum/$sum); + + // We avoid some trouble by not allowing end angle to be 0, in that case + // we translate to 360 + + // la is used to hold the label angle, which is centered on the slice + if( $angle2 < 0.0001 && $angle1 > 0.0001 ) { + $this->la[$i] = 2*M_PI - (abs(2*M_PI-$angle1)/2.0+$angle1); + } + elseif( $angle1 > $angle2 ) { + // The case where the slice crosses the 3 a'clock line + // Remember that the slices are counted clockwise and + // labels are counted counter clockwise so we need to revert with 2 PI + $this->la[$i] = 2*M_PI-$this->NormAngle($angle1 + ((2*M_PI - $angle1)+$angle2)/2); + } + else { + $this->la[$i] = 2*M_PI - (abs($angle2-$angle1)/2.0+$angle1); + } + + // Too avoid rounding problems we skip the slice if it is too small + if( $d < 0.00001 ) continue; + + // If the user has specified an array of colors for each slice then use + // that a color otherwise use the theme array (ta) of colors + if( $this->setslicecolors==null ) { + $slicecolor=$colors[$ta[$i%$numcolors]]; + } + else { + $slicecolor=$this->setslicecolors[$i%$numcolors]; + } + +// $_sa = round($angle1*180/M_PI); +// $_ea = round($angle2*180/M_PI); +// $_la = round($this->la[$i]*180/M_PI); +// echo "Slice#$i: ang1=$_sa , ang2=$_ea, la=$_la, color=$slicecolor
    "; + + + // If we have enabled antialias then we don't draw any border so + // make the bordedr color the same as the slice color + if( $this->pie_interior_border && $aaoption===0 ) { + $img->SetColor($this->color); + } + else { + $img->SetColor($slicecolor); + } + $arccolor = $this->pie_border && $aaoption===0 ? $this->color : ""; + + // Calculate the x,y coordinates for the base of this slice taking + // the exploded distance into account. Here we use the mid angle as the + // ray of extension and we have the mid angle handy as it is also the + // label angle + $xcm = $xc + $this->explode_radius[$j]*cos($this->la[$i])*$expscale; + $ycm = $yc - $this->explode_radius[$j]*sin($this->la[$i])*$expscale; + + // If we are not just drawing the labels then draw this cake slice + if( $aaoption !== 2 ) { + + $_sa = round($angle1*180/M_PI); + $_ea = round($angle2*180/M_PI); + $_la = round($this->la[$i]*180/M_PI); + //echo "[$i] sa=$_sa, ea=$_ea, la[$i]=$_la, (color=$slicecolor)
    "; + + // The CakeSlice method draws a full circle in case of start angle = end angle + // for pie slices we want this in case the slice have a value larger than 99% of the + // total sum + if( abs($_ea-$_sa) >= 1 || $d == $sum ) { + $img->CakeSlice($xcm,$ycm,$radius-1,$radius-1,$_sa,$_ea,$slicecolor,$arccolor); + } + } + + // If the CSIM is used then make sure we register a CSIM area for this slice as well + if( $this->csimtargets && $aaoption !== 1 ) { + $this->AddSliceToCSIM($i,$xcm,$ycm,$radius,$angle1,$angle2); + } + } + + // Format the titles for each slice + if( $aaoption !== 2 ) { + for( $i=0; $i < $n; ++$i) { + if( $this->labeltype==0 ) { + if( $sum != 0 ) + $l = 100.0*$this->data[$i]/$sum; + else + $l = 0.0; + } + elseif( $this->labeltype==1 ) { + $l = $this->data[$i]*1.0; + } + else { + $l = $this->adjusted_data[$i]; + } + if( isset($this->labels[$i]) && is_string($this->labels[$i]) ) + $this->labels[$i]=sprintf($this->labels[$i],$l); + else + $this->labels[$i]=$l; + } + } + + if( $this->value->show && $aaoption !== 1 ) { + $this->StrokeAllLabels($img,$xc,$yc,$radius); + } + + // Adjust title position + if( $aaoption !== 1 ) { + $this->title->SetPos($xc, + $yc-$this->title->GetFontHeight($img)-$radius-$this->title->margin, + "center","bottom"); + $this->title->Stroke($img); + } + + } + + //--------------- + // PRIVATE METHODS + + function NormAngle($a) { + while( $a < 0 ) $a += 2*M_PI; + while( $a > 2*M_PI ) $a -= 2*M_PI; + return $a; + } + + function Quadrant($a) { + $a=$this->NormAngle($a); + if( $a > 0 && $a <= M_PI/2 ) + return 0; + if( $a > M_PI/2 && $a <= M_PI ) + return 1; + if( $a > M_PI && $a <= 1.5*M_PI ) + return 2; + if( $a > 1.5*M_PI ) + return 3; + } + + function StrokeGuideLabels($img,$xc,$yc,$radius) { + $n = count($this->labels); + + //----------------------------------------------------------------------- + // Step 1 of the algorithm is to construct a number of clusters + // a cluster is defined as all slices within the same quadrant (almost) + // that has an angular distance less than the treshold + //----------------------------------------------------------------------- + $tresh_hold=25 * M_PI/180; // 25 degrees difference to be in a cluster + $incluster=false; // flag if we are currently in a cluster or not + $clusters = array(); // array of clusters + $cidx=-1; // running cluster index + + // Go through all the labels and construct a number of clusters + for($i=0; $i < $n-1; ++$i) { + // Calc the angle distance between two consecutive slices + $a1=$this->la[$i]; + $a2=$this->la[$i+1]; + $q1 = $this->Quadrant($a1); + $q2 = $this->Quadrant($a2); + $diff = abs($a1-$a2); + if( $diff < $tresh_hold ) { + if( $incluster ) { + $clusters[$cidx][1]++; + // Each cluster can only cover one quadrant + // Do we cross a quadrant ( and must break the cluster) + if( $q1 != $q2 ) { + // If we cross a quadrant boundary we normally start a + // new cluster. However we need to take the 12'a clock + // and 6'a clock positions into a special consideration. + // Case 1: WE go from q=1 to q=2 if the last slice on + // the cluster for q=1 is close to 12'a clock and the + // first slice in q=0 is small we extend the previous + // cluster + if( $q1 == 1 && $q2 == 0 && $a2 > (90-15)*M_PI/180 ) { + if( $i < $n-2 ) { + $a3 = $this->la[$i+2]; + // If there isn't a cluster coming up with the next-next slice + // we extend the previous cluster to cover this slice as well + if( abs($a3-$a2) >= $tresh_hold ) { + $clusters[$cidx][1]++; + $i++; + } + } + } + elseif( $q1 == 3 && $q2 == 2 && $a2 > (270-15)*M_PI/180 ) { + if( $i < $n-2 ) { + $a3 = $this->la[$i+2]; + // If there isn't a cluster coming up with the next-next slice + // we extend the previous cluster to cover this slice as well + if( abs($a3-$a2) >= $tresh_hold ) { + $clusters[$cidx][1]++; + $i++; + } + } + } + + if( $q1==2 && $q2==1 && $a2 > (180-15)*M_PI/180 ) { + $clusters[$cidx][1]++; + $i++; + } + + $incluster = false; + } + } + elseif( $q1 == $q2) { + $incluster = true; + // Now we have a special case for quadrant 0. If we previously + // have a cluster of one in quadrant 0 we just extend that + // cluster. If we don't do this then we risk that the label + // for the cluster of one will cross the guide-line + if( $q1 == 0 && $cidx > -1 && + $clusters[$cidx][1] == 1 && + $this->Quadrant($this->la[$clusters[$cidx][0]]) == 0 ) { + $clusters[$cidx][1]++; + } + else { + $cidx++; + $clusters[$cidx][0] = $i; + $clusters[$cidx][1] = 1; + } + } + else { + // Create a "cluster" of one since we are just crossing + // a quadrant + $cidx++; + $clusters[$cidx][0] = $i; + $clusters[$cidx][1] = 1; + } + } + else { + if( $incluster ) { + // Add the last slice + $clusters[$cidx][1]++; + $incluster = false; + } + else { // Create a "cluster" of one + $cidx++; + $clusters[$cidx][0] = $i; + $clusters[$cidx][1] = 1; + } + } + } + // Handle the very last slice + if( $incluster ) { + $clusters[$cidx][1]++; + } + else { // Create a "cluster" of one + $cidx++; + $clusters[$cidx][0] = $i; + $clusters[$cidx][1] = 1; + } + + /* + if( true ) { + // Debug printout in labels + for( $i=0; $i <= $cidx; ++$i ) { + for( $j=0; $j < $clusters[$i][1]; ++$j ) { + $a = $this->la[$clusters[$i][0]+$j]; + $aa = round($a*180/M_PI); + $q = $this->Quadrant($a); + $this->labels[$clusters[$i][0]+$j]="[$q:$aa] $i:$j"; + } + } + } + */ + + //----------------------------------------------------------------------- + // Step 2 of the algorithm is use the clusters and draw the labels + // and guidelines + //----------------------------------------------------------------------- + + // We use the font height as the base factor for how far we need to + // spread the labels in the Y-direction. + $this->value->ApplyFont($img); + $fh = $img->GetFontHeight(); + $origvstep=$fh*$this->iGuideVFactor; + $this->value->SetMargin(0); + + // Number of clusters found + $nc = count($clusters); + + // Walk through all the clusters + for($i=0; $i < $nc; ++$i) { + + // Start angle and number of slices in this cluster + $csize = $clusters[$i][1]; + $a = $this->la[$clusters[$i][0]]; + $q = $this->Quadrant($a); + + // Now set up the start and end conditions to make sure that + // in each cluster we walk through the all the slices starting with the slice + // closest to the equator. Since all slices are numbered clockwise from "3'a clock" + // we have different conditions depending on in which quadrant the slice lies within. + if( $q == 0 ) { + $start = $csize-1; $idx = $start; $step = -1; $vstep = -$origvstep; + } + elseif( $q == 1 ) { + $start = 0; $idx = $start; $step = 1; $vstep = -$origvstep; + } + elseif( $q == 2 ) { + $start = $csize-1; $idx = $start; $step = -1; $vstep = $origvstep; + } + elseif( $q == 3 ) { + $start = 0; $idx = $start; $step = 1; $vstep = $origvstep; + } + + // Walk through all slices within this cluster + for($j=0; $j < $csize; ++$j) { + // Now adjust the position of the labels in each cluster starting + // with the slice that is closest to the equator of the pie + $a = $this->la[$clusters[$i][0]+$idx]; + + // Guide line start in the center of the arc of the slice + $r = $radius+$this->explode_radius[$n-1-($clusters[$i][0]+$idx)]; + $x = round($r*cos($a)+$xc); + $y = round($yc-$r*sin($a)); + + // The distance from the arc depends on chosen font and the "R-Factor" + $r += $fh*$this->iGuideLineRFactor; + + // Should the labels be placed curved along the pie or in straight columns + // outside the pie? + if( $this->iGuideLineCurve ) + $xt=round($r*cos($a)+$xc); + + // If this is the first slice in the cluster we need some first time + // proessing + if( $idx == $start ) { + if( ! $this->iGuideLineCurve ) + $xt=round($r*cos($a)+$xc); + $yt=round($yc-$r*sin($a)); + + // Some special consideration in case this cluster starts + // in quadrant 1 or 3 very close to the "equator" (< 20 degrees) + // and the previous clusters last slice is within the tolerance. + // In that case we add a font height to this labels Y-position + // so it doesn't collide with + // the slice in the previous cluster + $prevcluster = ($i + ($nc-1) ) % $nc; + $previdx=$clusters[$prevcluster][0]+$clusters[$prevcluster][1]-1; + if( $q == 1 && $a > 160*M_PI/180 ) { + // Get the angle for the previous clusters last slice + $diff = abs($a-$this->la[$previdx]); + if( $diff < $tresh_hold ) { + $yt -= $fh; + } + } + elseif( $q == 3 && $a > 340*M_PI/180 ) { + // We need to subtract 360 to compare angle distance between + // q=0 and q=3 + $diff = abs($a-$this->la[$previdx]-360*M_PI/180); + if( $diff < $tresh_hold ) { + $yt += $fh; + } + } + + } + else { + // The step is at minimum $vstep but if the slices are relatively large + // we make sure that we add at least a step that corresponds to the vertical + // distance between the centers at the arc on the slice + $prev_a = $this->la[$clusters[$i][0]+($idx-$step)]; + $dy = abs($radius*(sin($a)-sin($prev_a))*1.2); + if( $vstep > 0 ) + $yt += max($vstep,$dy); + else + $yt += min($vstep,-$dy); + } + + $label = $this->labels[$clusters[$i][0]+$idx]; + + if( $csize == 1 ) { + // A "meta" cluster with only one slice + $r = $radius+$this->explode_radius[$n-1-($clusters[$i][0]+$idx)]; + $rr = $r+$img->GetFontHeight()/2; + $xt=round($rr*cos($a)+$xc); + $yt=round($yc-$rr*sin($a)); + $this->StrokeLabel($label,$img,$xc,$yc,$a,$r); + if( $this->iShowGuideLineForSingle ) + $this->guideline->Stroke($img,$x,$y,$xt,$yt); + } + else { + $this->guideline->Stroke($img,$x,$y,$xt,$yt); + if( $q==1 || $q==2 ) { + // Left side of Pie + $this->guideline->Stroke($img,$xt,$yt,$xt-$this->guidelinemargin,$yt); + $lbladj = -$this->guidelinemargin-5; + $this->value->halign = "right"; + $this->value->valign = "center"; + } + else { + // Right side of pie + $this->guideline->Stroke($img,$xt,$yt,$xt+$this->guidelinemargin,$yt); + $lbladj = $this->guidelinemargin+5; + $this->value->halign = "left"; + $this->value->valign = "center"; + } + $this->value->Stroke($img,$label,$xt+$lbladj,$yt); + } + + // Udate idx to point to next slice in the cluster to process + $idx += $step; + } + } + } + + function StrokeAllLabels($img,$xc,$yc,$radius) { + // First normalize all angles for labels + $n = count($this->la); + for($i=0; $i < $n; ++$i) { + $this->la[$i] = $this->NormAngle($this->la[$i]); + } + if( $this->guideline->iShow ) { + $this->StrokeGuideLabels($img,$xc,$yc,$radius); + } + else { + $n = count($this->labels); + for($i=0; $i < $n; ++$i) { + $this->StrokeLabel($this->labels[$i],$img,$xc,$yc, + $this->la[$i], + $radius + $this->explode_radius[$n-1-$i]); + } + } + } + + // Position the labels of each slice + function StrokeLabel($label,$img,$xc,$yc,$a,$r) { + + // Default value + if( $this->ilabelposadj === 'auto' ) + $this->ilabelposadj = 0.65; + + // We position the values diferently depending on if they are inside + // or outside the pie + if( $this->ilabelposadj < 1.0 ) { + + $this->value->SetAlign('center','center'); + $this->value->margin = 0; + + $xt=round($this->ilabelposadj*$r*cos($a)+$xc); + $yt=round($yc-$this->ilabelposadj*$r*sin($a)); + + $this->value->Stroke($img,$label,$xt,$yt); + } + else { + + $this->value->halign = "left"; + $this->value->valign = "top"; + $this->value->margin = 0; + + // Position the axis title. + // dx, dy is the offset from the top left corner of the bounding box that sorrounds the text + // that intersects with the extension of the corresponding axis. The code looks a little + // bit messy but this is really the only way of having a reasonable position of the + // axis titles. + $this->value->ApplyFont($img); + $h=$img->GetTextHeight($label); + // For numeric values the format of the display value + // must be taken into account + if( is_numeric($label) ) { + if( $label > 0 ) + $w=$img->GetTextWidth(sprintf($this->value->format,$label)); + else + $w=$img->GetTextWidth(sprintf($this->value->negformat,$label)); + } + else + $w=$img->GetTextWidth($label); + + if( $this->ilabelposadj > 1.0 && $this->ilabelposadj < 5.0) { + $r *= $this->ilabelposadj; + } + + $r += $img->GetFontHeight()/1.5; + + $xt=round($r*cos($a)+$xc); + $yt=round($yc-$r*sin($a)); + + // Normalize angle + while( $a < 0 ) $a += 2*M_PI; + while( $a > 2*M_PI ) $a -= 2*M_PI; + + if( $a>=7*M_PI/4 || $a <= M_PI/4 ) $dx=0; + if( $a>=M_PI/4 && $a <= 3*M_PI/4 ) $dx=($a-M_PI/4)*2/M_PI; + if( $a>=3*M_PI/4 && $a <= 5*M_PI/4 ) $dx=1; + if( $a>=5*M_PI/4 && $a <= 7*M_PI/4 ) $dx=(1-($a-M_PI*5/4)*2/M_PI); + + if( $a>=7*M_PI/4 ) $dy=(($a-M_PI)-3*M_PI/4)*2/M_PI; + if( $a<=M_PI/4 ) $dy=(1-$a*2/M_PI); + if( $a>=M_PI/4 && $a <= 3*M_PI/4 ) $dy=1; + if( $a>=3*M_PI/4 && $a <= 5*M_PI/4 ) $dy=(1-($a-3*M_PI/4)*2/M_PI); + if( $a>=5*M_PI/4 && $a <= 7*M_PI/4 ) $dy=0; + + $this->value->Stroke($img,$label,$xt-$dx*$w,$yt-$dy*$h); + } + } + + function UsePlotThemeColors($flag = true) { + $this->use_plot_theme_colors = $flag; + } +} // Class + + +//=================================================== +// CLASS PiePlotC +// Description: Same as a normal pie plot but with a +// filled circle in the center +//=================================================== +class PiePlotC extends PiePlot { + private $imidsize=0.5; // Fraction of total width + private $imidcolor='white'; + public $midtitle=''; + private $middlecsimtarget='',$middlecsimwintarget='',$middlecsimalt=''; + + function __construct($data,$aCenterTitle='') { + parent::__construct($data); + $this->midtitle = new Text(); + $this->midtitle->ParagraphAlign('center'); + } + + function SetMid($aTitle,$aColor='white',$aSize=0.5) { + $this->midtitle->Set($aTitle); + + $this->imidsize = $aSize ; + $this->imidcolor = $aColor ; + } + + function SetMidTitle($aTitle) { + $this->midtitle->Set($aTitle); + } + + function SetMidSize($aSize) { + $this->imidsize = $aSize ; + } + + function SetMidColor($aColor) { + $this->imidcolor = $aColor ; + } + + function SetMidCSIM($aTarget,$aAlt='',$aWinTarget='') { + $this->middlecsimtarget = $aTarget; + $this->middlecsimwintarget = $aWinTarget; + $this->middlecsimalt = $aAlt; + } + + function AddSliceToCSIM($i,$xc,$yc,$radius,$sa,$ea) { + //Slice number, ellipse centre (x,y), radius, start angle, end angle + while( $sa > 2*M_PI ) $sa = $sa - 2*M_PI; + while( $ea > 2*M_PI ) $ea = $ea - 2*M_PI; + + $sa = 2*M_PI - $sa; + $ea = 2*M_PI - $ea; + + // Special case when we have only one slice since then both start and end + // angle will be == 0 + if( abs($sa - $ea) < 0.0001 ) { + $sa=2*M_PI; $ea=0; + } + + // Add inner circle first point + $xp = floor(($this->imidsize*$radius*cos($ea))+$xc); + $yp = floor($yc-($this->imidsize*$radius*sin($ea))); + $coords = "$xp, $yp"; + + //add coordinates every 0.25 radians + $a=$ea+0.25; + + // If we cross the 360-limit with a slice we need to handle + // the fact that end angle is smaller than start + if( $sa < $ea ) { + while ($a <= 2*M_PI) { + $xp = floor($radius*cos($a)+$xc); + $yp = floor($yc-$radius*sin($a)); + $coords.= ", $xp, $yp"; + $a += 0.25; + } + $a -= 2*M_PI; + } + + while ($a < $sa) { + $xp = floor(($this->imidsize*$radius*cos($a)+$xc)); + $yp = floor($yc-($this->imidsize*$radius*sin($a))); + $coords.= ", $xp, $yp"; + $a += 0.25; + } + + // Make sure we end at the last point + $xp = floor(($this->imidsize*$radius*cos($sa)+$xc)); + $yp = floor($yc-($this->imidsize*$radius*sin($sa))); + $coords.= ", $xp, $yp"; + + // Straight line to outer circle + $xp = floor($radius*cos($sa)+$xc); + $yp = floor($yc-$radius*sin($sa)); + $coords.= ", $xp, $yp"; + + //add coordinates every 0.25 radians + $a=$sa - 0.25; + while ($a > $ea) { + $xp = floor($radius*cos($a)+$xc); + $yp = floor($yc-$radius*sin($a)); + $coords.= ", $xp, $yp"; + $a -= 0.25; + } + + //Add the last point on the arc + $xp = floor($radius*cos($ea)+$xc); + $yp = floor($yc-$radius*sin($ea)); + $coords.= ", $xp, $yp"; + + // Close the arc + $xp = floor(($this->imidsize*$radius*cos($ea))+$xc); + $yp = floor($yc-($this->imidsize*$radius*sin($ea))); + $coords .= ", $xp, $yp"; + + if( !empty($this->csimtargets[$i]) ) { + $this->csimareas .= "csimtargets[$i]."\""; + if( !empty($this->csimwintargets[$i]) ) { + $this->csimareas .= " target=\"".$this->csimwintargets[$i]."\" "; + } + if( !empty($this->csimalts[$i]) ) { + $tmp=sprintf($this->csimalts[$i],$this->data[$i]); + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + } + + + function Stroke($img,$aaoption=0) { + + // Stroke the pie but don't stroke values + $tmp = $this->value->show; + $this->value->show = false; + parent::Stroke($img,$aaoption); + $this->value->show = $tmp; + + $xc = round($this->posx*$img->width); + $yc = round($this->posy*$img->height); + + $radius = floor($this->radius * min($img->width,$img->height)) ; + + + if( $this->imidsize > 0 && $aaoption !== 2 ) { + + if( $this->ishadowcolor != "" ) { + $img->SetColor($this->ishadowcolor); + $img->FilledCircle($xc+$this->ishadowdrop,$yc+$this->ishadowdrop, + round($radius*$this->imidsize)); + } + + $img->SetColor($this->imidcolor); + $img->FilledCircle($xc,$yc,round($radius*$this->imidsize)); + + if( $this->pie_border && $aaoption === 0 ) { + $img->SetColor($this->color); + $img->Circle($xc,$yc,round($radius*$this->imidsize)); + } + + if( !empty($this->middlecsimtarget) ) + $this->AddMiddleCSIM($xc,$yc,round($radius*$this->imidsize)); + + } + + if( $this->value->show && $aaoption !== 1) { + $this->StrokeAllLabels($img,$xc,$yc,$radius); + $this->midtitle->SetPos($xc,$yc,'center','center'); + $this->midtitle->Stroke($img); + } + + } + + function AddMiddleCSIM($xc,$yc,$r) { + $xc=round($xc);$yc=round($yc);$r=round($r); + $this->csimareas .= "middlecsimtarget."\""; + if( !empty($this->middlecsimwintarget) ) { + $this->csimareas .= " target=\"".$this->middlecsimwintarget."\""; + } + if( !empty($this->middlecsimalt) ) { + $tmp = $this->middlecsimalt; + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + + function StrokeLabel($label,$img,$xc,$yc,$a,$r) { + + if( $this->ilabelposadj === 'auto' ) + $this->ilabelposadj = (1-$this->imidsize)/2+$this->imidsize; + + parent::StrokeLabel($label,$img,$xc,$yc,$a,$r); + + } + +} + + +//=================================================== +// CLASS PieGraph +// Description: +//=================================================== +class PieGraph extends Graph { + private $posx, $posy, $radius; + private $legends=array(); + public $plots=array(); + public $pieaa = false ; + //--------------- + // CONSTRUCTOR + function __construct($width=300,$height=200,$cachedName="",$timeout=0,$inline=1) { + parent::__construct($width,$height,$cachedName,$timeout,$inline); + $this->posx=$width/2; + $this->posy=$height/2; + $this->SetColor(array(255,255,255)); + + if ($this->graph_theme) { + $this->graph_theme->ApplyGraph($this); + } + } + + //--------------- + // PUBLIC METHODS + function Add($aObj) { + + if( is_array($aObj) && count($aObj) > 0 ) + $cl = $aObj[0]; + else + $cl = $aObj; + + if( $cl instanceof Text ) + $this->AddText($aObj); + elseif( class_exists('IconPlot',false) && ($cl instanceof IconPlot) ) + $this->AddIcon($aObj); + else { + if( is_array($aObj) ) { + $n = count($aObj); + for($i=0; $i < $n; ++$i ) { + //if ($aObj[$i]->theme) { + // $this->ClearTheme(); + //} + $this->plots[] = $aObj[$i]; + } + } + else { + //if ($aObj->theme) { + // $this->ClearTheme(); + //} + $this->plots[] = $aObj; + } + } + + if ($this->graph_theme) { + $this->graph_theme->SetupPlot($aObj); + if ($aObj->is_using_plot_theme) { + $aObj->UsePlotThemeColors(); + } + } + } + + function SetAntiAliasing($aFlg=true) { + $this->pieaa = $aFlg; + } + + function SetColor($c) { + $this->SetMarginColor($c); + } + + + function DisplayCSIMAreas() { + $csim=""; + foreach($this->plots as $p ) { + $csim .= $p->GetCSIMareas(); + } + + $csim.= $this->legend->GetCSIMareas(); + if (preg_match_all("/area shape=\"(\w+)\" coords=\"([0-9\, ]+)\"/", $csim, $coords)) { + $this->img->SetColor($this->csimcolor); + $n = count($coords[0]); + for ($i=0; $i < $n; $i++) { + if ($coords[1][$i]=="poly") { + preg_match_all('/\s*([0-9]+)\s*,\s*([0-9]+)\s*,*/',$coords[2][$i],$pts); + $this->img->SetStartPoint($pts[1][count($pts[0])-1],$pts[2][count($pts[0])-1]); + $m = count($pts[0]); + for ($j=0; $j < $m; $j++) { + $this->img->LineTo($pts[1][$j],$pts[2][$j]); + } + } else if ($coords[1][$i]=="rect") { + $pts = preg_split('/,/', $coords[2][$i]); + $this->img->SetStartPoint($pts[0],$pts[1]); + $this->img->LineTo($pts[2],$pts[1]); + $this->img->LineTo($pts[2],$pts[3]); + $this->img->LineTo($pts[0],$pts[3]); + $this->img->LineTo($pts[0],$pts[1]); + + } + } + } + } + + // Method description + function Stroke($aStrokeFileName="") { + + // If the filename is the predefined value = '_csim_special_' + // we assume that the call to stroke only needs to do enough + // to correctly generate the CSIM maps. + // We use this variable to skip things we don't strictly need + // to do to generate the image map to improve performance + // a best we can. Therefor you will see a lot of tests !$_csim in the + // code below. + $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); + + // If we are called the second time (perhaps the user has called GetHTMLImageMap() + // himself then the legends have alsready been populated once in order to get the + // CSIM coordinats. Since we do not want the legends to be populated a second time + // we clear the legends + $this->legend->Clear(); + + // We need to know if we have stroked the plot in the + // GetCSIMareas. Otherwise the CSIM hasn't been generated + // and in the case of GetCSIM called before stroke to generate + // CSIM without storing an image to disk GetCSIM must call Stroke. + $this->iHasStroked = true; + + $n = count($this->plots); + + if( $this->pieaa ) { + + if( !$_csim ) { + if( $this->background_image != "" ) { + $this->StrokeFrameBackground(); + } + else { + $this->StrokeFrame(); + $this->StrokeBackgroundGrad(); + } + } + + + $w = $this->img->width; + $h = $this->img->height; + $oldimg = $this->img->img; + + $this->img->CreateImgCanvas(2*$w,2*$h); + + $this->img->SetColor( $this->margin_color ); + $this->img->FilledRectangle(0,0,2*$w-1,2*$h-1); + + // Make all icons *2 i size since we will be scaling down the + // imahe to do the anti aliasing + $ni = count($this->iIcons); + for($i=0; $i < $ni; ++$i) { + $this->iIcons[$i]->iScale *= 2 ; + if( $this->iIcons[$i]->iX > 1 ) + $this->iIcons[$i]->iX *= 2 ; + if( $this->iIcons[$i]->iY > 1 ) + $this->iIcons[$i]->iY *= 2 ; + } + + $this->StrokeIcons(); + + for($i=0; $i < $n; ++$i) { + if( $this->plots[$i]->posx > 1 ) + $this->plots[$i]->posx *= 2 ; + if( $this->plots[$i]->posy > 1 ) + $this->plots[$i]->posy *= 2 ; + + $this->plots[$i]->Stroke($this->img,1); + + if( $this->plots[$i]->posx > 1 ) + $this->plots[$i]->posx /= 2 ; + if( $this->plots[$i]->posy > 1 ) + $this->plots[$i]->posy /= 2 ; + } + + $indent = $this->doframe ? ($this->frame_weight + ($this->doshadow ? $this->shadow_width : 0 )) : 0 ; + $indent += $this->framebevel ? $this->framebeveldepth + 1 : 0 ; + $this->img->CopyCanvasH($oldimg,$this->img->img,$indent,$indent,$indent,$indent, + $w-2*$indent,$h-2*$indent,2*($w-$indent),2*($h-$indent)); + + $this->img->img = $oldimg ; + $this->img->width = $w ; + $this->img->height = $h ; + + for($i=0; $i < $n; ++$i) { + $this->plots[$i]->Stroke($this->img,2); // Stroke labels + $this->plots[$i]->Legend($this); + } + + } + else { + + if( !$_csim ) { + if( $this->background_image != "" ) { + $this->StrokeFrameBackground(); + } + else { + $this->StrokeFrame(); + $this->StrokeBackgroundGrad(); + } + } + + $this->StrokeIcons(); + + for($i=0; $i < $n; ++$i) { + $this->plots[$i]->Stroke($this->img); + $this->plots[$i]->Legend($this); + } + } + + $this->legend->Stroke($this->img); + $this->footer->Stroke($this->img); + $this->StrokeTitles(); + + if( !$_csim ) { + + // Stroke texts + if( $this->texts != null ) { + $n = count($this->texts); + for($i=0; $i < $n; ++$i ) { + $this->texts[$i]->Stroke($this->img); + } + } + + if( _JPG_DEBUG ) { + $this->DisplayCSIMAreas(); + } + + // Should we do any final image transformation + if( $this->iImgTrans ) { + if( !class_exists('ImgTrans',false) ) { + require_once('jpgraph_imgtrans.php'); + //JpGraphError::Raise('In order to use image transformation you must include the file jpgraph_imgtrans.php in your script.'); + } + + $tform = new ImgTrans($this->img->img); + $this->img->img = $tform->Skew3D($this->iImgTransHorizon,$this->iImgTransSkewDist, + $this->iImgTransDirection,$this->iImgTransHighQ, + $this->iImgTransMinSize,$this->iImgTransFillColor, + $this->iImgTransBorder); + } + + + // If the filename is given as the special "__handle" + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline, + $aStrokeFileName); + } + } + } +} // Class + +/* EOF */ +?> diff --git a/Societes/ric/jpgraph/jpgraph_pie3d.php b/Societes/ric/jpgraph/jpgraph_pie3d.php new file mode 100755 index 00000000..52b8631e --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_pie3d.php @@ -0,0 +1,933 @@ +radius = 0.5; + $this->data = $data; + $this->title = new Text(""); + $this->title->SetFont(FF_FONT1,FS_BOLD); + $this->value = new DisplayValue(); + $this->value->Show(); + $this->value->SetFormat('%.0f%%'); + } + + //--------------- + // PUBLIC METHODS + + // Set label arrays + function SetLegends($aLegend) { + $this->legends = array_reverse(array_slice($aLegend,0,count($this->data))); + } + + function SetSliceColors($aColors) { + $this->setslicecolors = $aColors; + } + + function Legend($aGraph) { + parent::Legend($aGraph); + $aGraph->legend->txtcol = array_reverse($aGraph->legend->txtcol); + } + + function SetCSIMTargets($aTargets,$aAlts='',$aWinTargets='') { + $this->csimtargets = $aTargets; + $this->csimwintargets = $aWinTargets; + $this->csimalts = $aAlts; + } + + // Should the slices be separated by a line? If color is specified as "" no line + // will be used to separate pie slices. + function SetEdge($aColor='black',$aWeight=1) { + $this->edgecolor = $aColor; + $this->edgeweight = $aWeight; + } + + // Specify projection angle for 3D in degrees + // Must be between 20 and 70 degrees + function SetAngle($a) { + if( $a<5 || $a>90 ) { + JpGraphError::RaiseL(14002); + //("PiePlot3D::SetAngle() 3D Pie projection angle must be between 5 and 85 degrees."); + } + else { + $this->angle = $a; + } + } + + function Add3DSliceToCSIM($i,$xc,$yc,$height,$width,$thick,$sa,$ea) { //Slice number, ellipse centre (x,y), height, width, start angle, end angle + + $sa *= M_PI/180; + $ea *= M_PI/180; + + //add coordinates of the centre to the map + $coords = "$xc, $yc"; + + //add coordinates of the first point on the arc to the map + $xp = floor($width*cos($sa)/2+$xc); + $yp = floor($yc-$height*sin($sa)/2); + $coords.= ", $xp, $yp"; + + //If on the front half, add the thickness offset + if ($sa >= M_PI && $sa <= 2*M_PI*1.01) { + $yp = floor($yp+$thick); + $coords.= ", $xp, $yp"; + } + + //add coordinates every 0.2 radians + $a=$sa+0.2; + while ($a<$ea) { + $xp = floor($width*cos($a)/2+$xc); + if ($a >= M_PI && $a <= 2*M_PI*1.01) { + $yp = floor($yc-($height*sin($a)/2)+$thick); + } else { + $yp = floor($yc-$height*sin($a)/2); + } + $coords.= ", $xp, $yp"; + $a += 0.2; + } + + //Add the last point on the arc + $xp = floor($width*cos($ea)/2+$xc); + $yp = floor($yc-$height*sin($ea)/2); + + + if ($ea >= M_PI && $ea <= 2*M_PI*1.01) { + $coords.= ", $xp, ".floor($yp+$thick); + } + $coords.= ", $xp, $yp"; + $alt=''; + + if( !empty($this->csimtargets[$i]) ) { + $this->csimareas .= "csimtargets[$i]."\""; + + if( !empty($this->csimwintargets[$i]) ) { + $this->csimareas .= " target=\"".$this->csimwintargets[$i]."\" "; + } + + if( !empty($this->csimalts[$i]) ) { + $tmp=sprintf($this->csimalts[$i],$this->data[$i]); + $this->csimareas .= "alt=\"$tmp\" title=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + + } + + function SetLabels($aLabels,$aLblPosAdj="auto") { + $this->labels = $aLabels; + $this->ilabelposadj=$aLblPosAdj; + } + + + // Distance from the pie to the labels + function SetLabelMargin($m) { + $this->value->SetMargin($m); + } + + // Show a thin line from the pie to the label for a specific slice + function ShowLabelHint($f=true) { + $this->showlabelhint=$f; + } + + // Set color of hint line to label for each slice + function SetLabelHintColor($c) { + $this->labelhintcolor=$c; + } + + function SetHeight($aHeight) { + $this->iThickness = $aHeight; + } + + + // Normalize Angle between 0-360 + function NormAngle($a) { + // Normalize anle to 0 to 2M_PI + // + if( $a > 0 ) { + while($a > 360) $a -= 360; + } + else { + while($a < 0) $a += 360; + } + if( $a < 0 ) + $a = 360 + $a; + + if( $a == 360 ) $a=0; + return $a; + } + + + + // Draw one 3D pie slice at position ($xc,$yc) with height $z + function Pie3DSlice($img,$xc,$yc,$w,$h,$sa,$ea,$z,$fillcolor,$shadow=0.65) { + + // Due to the way the 3D Pie algorithm works we are + // guaranteed that any slice we get into this method + // belongs to either the left or right side of the + // pie ellipse. Hence, no slice will cross 90 or 270 + // point. + if( ($sa < 90 && $ea > 90) || ( ($sa > 90 && $sa < 270) && $ea > 270) ) { + JpGraphError::RaiseL(14003);//('Internal assertion failed. Pie3D::Pie3DSlice'); + exit(1); + } + + $p[] = array(); + + // Setup pre-calculated values + $rsa = $sa/180*M_PI; // to Rad + $rea = $ea/180*M_PI; // to Rad + $sinsa = sin($rsa); + $cossa = cos($rsa); + $sinea = sin($rea); + $cosea = cos($rea); + + // p[] is the points for the overall slice and + // pt[] is the points for the top pie + + // Angular step when approximating the arc with a polygon train. + $step = 0.05; + + if( $sa >= 270 ) { + if( $ea > 360 || ($ea > 0 && $ea <= 90) ) { + if( $ea > 0 && $ea <= 90 ) { + // Adjust angle to simplify conditions in loops + $rea += 2*M_PI; + } + + $p = array($xc,$yc,$xc,$yc+$z, + $xc+$w*$cossa,$z+$yc-$h*$sinsa); + $pt = array($xc,$yc,$xc+$w*$cossa,$yc-$h*$sinsa); + + for( $a=$rsa; $a < 2*M_PI; $a += $step ) { + $tca = cos($a); + $tsa = sin($a); + $p[] = $xc+$w*$tca; + $p[] = $z+$yc-$h*$tsa; + $pt[] = $xc+$w*$tca; + $pt[] = $yc-$h*$tsa; + } + + $pt[] = $xc+$w; + $pt[] = $yc; + + $p[] = $xc+$w; + $p[] = $z+$yc; + $p[] = $xc+$w; + $p[] = $yc; + $p[] = $xc; + $p[] = $yc; + + for( $a=2*M_PI+$step; $a < $rea; $a += $step ) { + $pt[] = $xc + $w*cos($a); + $pt[] = $yc - $h*sin($a); + } + + $pt[] = $xc+$w*$cosea; + $pt[] = $yc-$h*$sinea; + $pt[] = $xc; + $pt[] = $yc; + + } + else { + $p = array($xc,$yc,$xc,$yc+$z, + $xc+$w*$cossa,$z+$yc-$h*$sinsa); + $pt = array($xc,$yc,$xc+$w*$cossa,$yc-$h*$sinsa); + + $rea = $rea == 0.0 ? 2*M_PI : $rea; + for( $a=$rsa; $a < $rea; $a += $step ) { + $tca = cos($a); + $tsa = sin($a); + $p[] = $xc+$w*$tca; + $p[] = $z+$yc-$h*$tsa; + $pt[] = $xc+$w*$tca; + $pt[] = $yc-$h*$tsa; + } + + $pt[] = $xc+$w*$cosea; + $pt[] = $yc-$h*$sinea; + $pt[] = $xc; + $pt[] = $yc; + + $p[] = $xc+$w*$cosea; + $p[] = $z+$yc-$h*$sinea; + $p[] = $xc+$w*$cosea; + $p[] = $yc-$h*$sinea; + $p[] = $xc; + $p[] = $yc; + } + } + elseif( $sa >= 180 ) { + $p = array($xc,$yc,$xc,$yc+$z,$xc+$w*$cosea,$z+$yc-$h*$sinea); + $pt = array($xc,$yc,$xc+$w*$cosea,$yc-$h*$sinea); + + for( $a=$rea; $a>$rsa; $a -= $step ) { + $tca = cos($a); + $tsa = sin($a); + $p[] = $xc+$w*$tca; + $p[] = $z+$yc-$h*$tsa; + $pt[] = $xc+$w*$tca; + $pt[] = $yc-$h*$tsa; + } + + $pt[] = $xc+$w*$cossa; + $pt[] = $yc-$h*$sinsa; + $pt[] = $xc; + $pt[] = $yc; + + $p[] = $xc+$w*$cossa; + $p[] = $z+$yc-$h*$sinsa; + $p[] = $xc+$w*$cossa; + $p[] = $yc-$h*$sinsa; + $p[] = $xc; + $p[] = $yc; + + } + elseif( $sa >= 90 ) { + if( $ea > 180 ) { + $p = array($xc,$yc,$xc,$yc+$z,$xc+$w*$cosea,$z+$yc-$h*$sinea); + $pt = array($xc,$yc,$xc+$w*$cosea,$yc-$h*$sinea); + + for( $a=$rea; $a > M_PI; $a -= $step ) { + $tca = cos($a); + $tsa = sin($a); + $p[] = $xc+$w*$tca; + $p[] = $z + $yc - $h*$tsa; + $pt[] = $xc+$w*$tca; + $pt[] = $yc-$h*$tsa; + } + + $p[] = $xc-$w; + $p[] = $z+$yc; + $p[] = $xc-$w; + $p[] = $yc; + $p[] = $xc; + $p[] = $yc; + + $pt[] = $xc-$w; + $pt[] = $z+$yc; + $pt[] = $xc-$w; + $pt[] = $yc; + + for( $a=M_PI-$step; $a > $rsa; $a -= $step ) { + $pt[] = $xc + $w*cos($a); + $pt[] = $yc - $h*sin($a); + } + + $pt[] = $xc+$w*$cossa; + $pt[] = $yc-$h*$sinsa; + $pt[] = $xc; + $pt[] = $yc; + + } + else { // $sa >= 90 && $ea <= 180 + $p = array($xc,$yc,$xc,$yc+$z, + $xc+$w*$cosea,$z+$yc-$h*$sinea, + $xc+$w*$cosea,$yc-$h*$sinea, + $xc,$yc); + + $pt = array($xc,$yc,$xc+$w*$cosea,$yc-$h*$sinea); + + for( $a=$rea; $a>$rsa; $a -= $step ) { + $pt[] = $xc + $w*cos($a); + $pt[] = $yc - $h*sin($a); + } + + $pt[] = $xc+$w*$cossa; + $pt[] = $yc-$h*$sinsa; + $pt[] = $xc; + $pt[] = $yc; + + } + } + else { // sa > 0 && ea < 90 + + $p = array($xc,$yc,$xc,$yc+$z, + $xc+$w*$cossa,$z+$yc-$h*$sinsa, + $xc+$w*$cossa,$yc-$h*$sinsa, + $xc,$yc); + + $pt = array($xc,$yc,$xc+$w*$cossa,$yc-$h*$sinsa); + + for( $a=$rsa; $a < $rea; $a += $step ) { + $pt[] = $xc + $w*cos($a); + $pt[] = $yc - $h*sin($a); + } + + $pt[] = $xc+$w*$cosea; + $pt[] = $yc-$h*$sinea; + $pt[] = $xc; + $pt[] = $yc; + } + + $img->PushColor($fillcolor.":".$shadow); + $img->FilledPolygon($p); + $img->PopColor(); + + $img->PushColor($fillcolor); + $img->FilledPolygon($pt); + $img->PopColor(); + } + + function SetStartAngle($aStart) { + if( $aStart < 0 || $aStart > 360 ) { + JpGraphError::RaiseL(14004);//('Slice start angle must be between 0 and 360 degrees.'); + } + $this->startangle = $aStart; + } + + // Draw a 3D Pie + function Pie3D($aaoption,$img,$data,$colors,$xc,$yc,$d,$angle,$z, + $shadow=0.65,$startangle=0,$edgecolor="",$edgeweight=1) { + + //--------------------------------------------------------------------------- + // As usual the algorithm get more complicated than I originally + // envisioned. I believe that this is as simple as it is possible + // to do it with the features I want. It's a good exercise to start + // thinking on how to do this to convince your self that all this + // is really needed for the general case. + // + // The algorithm two draw 3D pies without "real 3D" is done in + // two steps. + // First imagine the pie cut in half through a thought line between + // 12'a clock and 6'a clock. It now easy to imagine that we can plot + // the individual slices for each half by starting with the topmost + // pie slice and continue down to 6'a clock. + // + // In the algortithm this is done in three principal steps + // Step 1. Do the knife cut to ensure by splitting slices that extends + // over the cut line. This is done by splitting the original slices into + // upto 3 subslices. + // Step 2. Find the top slice for each half + // Step 3. Draw the slices from top to bottom + // + // The thing that slightly complicates this scheme with all the + // angle comparisons below is that we can have an arbitrary start + // angle so we must take into account the different equivalence classes. + // For the same reason we must walk through the angle array in a + // modulo fashion. + // + // Limitations of algorithm: + // * A small exploded slice which crosses the 270 degree point + // will get slightly nagged close to the center due to the fact that + // we print the slices in Z-order and that the slice left part + // get printed first and might get slightly nagged by a larger + // slice on the right side just before the right part of the small + // slice. Not a major problem though. + //--------------------------------------------------------------------------- + + + // Determine the height of the ellippse which gives an + // indication of the inclination angle + $h = ($angle/90.0)*$d; + $sum = 0; + for($i=0; $ilabeltype == 2 ) { + $this->adjusted_data = $this->AdjPercentage($data); + } + + // Setup the start + $accsum = 0; + $a = $startangle; + $a = $this->NormAngle($a); + + // + // Step 1 . Split all slices that crosses 90 or 270 + // + $idx=0; + $adjexplode=array(); + $numcolors = count($colors); + for($i=0; $iexplode_radius[$i]) ) { + $this->explode_radius[$i]=0; + } + + $expscale=1; + if( $aaoption == 1 ) { + $expscale=2; + } + + $la = $a + $da/2; + $explode = array( $xc + $this->explode_radius[$i]*cos($la*M_PI/180)*$expscale, + $yc - $this->explode_radius[$i]*sin($la*M_PI/180) * ($h/$d) *$expscale ); + $adjexplode[$idx] = $explode; + $labeldata[$i] = array($la,$explode[0],$explode[1]); + $originalangles[$i] = array($a,$a+$da); + + $ne = $this->NormAngle($a+$da); + if( $da <= 180 ) { + // If the slice size is <= 90 it can at maximum cut across + // one boundary (either 90 or 270) where it needs to be split + $split=-1; // no split + if( ($da<=90 && ($a <= 90 && $ne > 90)) || + (($da <= 180 && $da >90) && (($a < 90 || $a >= 270) && $ne > 90)) ) { + $split = 90; + } + elseif( ($da<=90 && ($a <= 270 && $ne > 270)) || + (($da<=180 && $da>90) && ($a >= 90 && $a < 270 && ($a+$da) > 270 )) ) { + $split = 270; + } + if( $split > 0 ) { // split in two + $angles[$idx] = array($a,$split); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + $angles[++$idx] = array($split,$ne); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + } + else { // no split + $angles[$idx] = array($a,$ne); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + } + } + else { + // da>180 + // Slice may, depending on position, cross one or two + // bonudaries + + if( $a < 90 ) $split = 90; + elseif( $a <= 270 ) $split = 270; + else $split = 90; + + $angles[$idx] = array($a,$split); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + //if( $a+$da > 360-$split ) { + // For slices larger than 270 degrees we might cross + // another boundary as well. This means that we must + // split the slice further. The comparison gets a little + // bit complicated since we must take into accound that + // a pie might have a startangle >0 and hence a slice might + // wrap around the 0 angle. + // Three cases: + // a) Slice starts before 90 and hence gets a split=90, but + // we must also check if we need to split at 270 + // b) Slice starts after 90 but before 270 and slices + // crosses 90 (after a wrap around of 0) + // c) If start is > 270 (hence the firstr split is at 90) + // and the slice is so large that it goes all the way + // around 270. + if( ($a < 90 && ($a+$da > 270)) || ($a > 90 && $a<=270 && ($a+$da>360+90) ) || ($a > 270 && $this->NormAngle($a+$da)>270) ) { + $angles[++$idx] = array($split,360-$split); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + $angles[++$idx] = array(360-$split,$ne); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + } + else { + // Just a simple split to the previous decided + // angle. + $angles[++$idx] = array($split,$ne); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + } + } + $a += $da; + $a = $this->NormAngle($a); + } + + // Total number of slices + $n = count($angles); + + for($i=0; $i<$n; ++$i) { + list($dbgs,$dbge) = $angles[$i]; + } + + // + // Step 2. Find start index (first pie that starts in upper left quadrant) + // + $minval = $angles[0][0]; + $min = 0; + for( $i=0; $i<$n; ++$i ) { + if( $angles[$i][0] < $minval ) { + $minval = $angles[$i][0]; + $min = $i; + } + } + $j = $min; + $cnt = 0; + while( $angles[$j][1] <= 90 ) { + $j++; + if( $j>=$n) { + $j=0; + } + if( $cnt > $n ) { + JpGraphError::RaiseL(14005); + //("Pie3D Internal error (#1). Trying to wrap twice when looking for start index"); + } + ++$cnt; + } + $start = $j; + + // + // Step 3. Print slices in z-order + // + $cnt = 0; + + // First stroke all the slices between 90 and 270 (left half circle) + // counterclockwise + + while( $angles[$j][0] < 270 && $aaoption !== 2 ) { + + list($x,$y) = $adjexplode[$j]; + + $this->Pie3DSlice($img,$x,$y,$d,$h,$angles[$j][0],$angles[$j][1], + $z,$adjcolors[$j],$shadow); + + $last = array($x,$y,$j); + + $j++; + if( $j >= $n ) $j=0; + if( $cnt > $n ) { + JpGraphError::RaiseL(14006); + //("Pie3D Internal Error: Z-Sorting algorithm for 3D Pies is not working properly (2). Trying to wrap twice while stroking."); + } + ++$cnt; + } + + $slice_left = $n-$cnt; + $j=$start-1; + if($j<0) $j=$n-1; + $cnt = 0; + + // The stroke all slices from 90 to -90 (right half circle) + // clockwise + while( $cnt < $slice_left && $aaoption !== 2 ) { + + list($x,$y) = $adjexplode[$j]; + + $this->Pie3DSlice($img,$x,$y,$d,$h,$angles[$j][0],$angles[$j][1], + $z,$adjcolors[$j],$shadow); + $j--; + if( $cnt > $n ) { + JpGraphError::RaiseL(14006); + //("Pie3D Internal Error: Z-Sorting algorithm for 3D Pies is not working properly (2). Trying to wrap twice while stroking."); + } + if($j<0) $j=$n-1; + $cnt++; + } + + // Now do a special thing. Stroke the last slice on the left + // halfcircle one more time. This is needed in the case where + // the slice close to 270 have been exploded. In that case the + // part of the slice close to the center of the pie might be + // slightly nagged. + if( $aaoption !== 2 ) + $this->Pie3DSlice($img,$last[0],$last[1],$d,$h,$angles[$last[2]][0], + $angles[$last[2]][1],$z,$adjcolors[$last[2]],$shadow); + + + if( $aaoption !== 1 ) { + // Now print possible labels and add csim + $this->value->ApplyFont($img); + $margin = $img->GetFontHeight()/2 + $this->value->margin ; + for($i=0; $i < count($data); ++$i ) { + $la = $labeldata[$i][0]; + $x = $labeldata[$i][1] + cos($la*M_PI/180)*($d+$margin)*$this->ilabelposadj; + $y = $labeldata[$i][2] - sin($la*M_PI/180)*($h+$margin)*$this->ilabelposadj; + if( $this->ilabelposadj >= 1.0 ) { + if( $la > 180 && $la < 360 ) $y += $z; + } + if( $this->labeltype == 0 ) { + if( $sum > 0 ) $l = 100*$data[$i]/$sum; + else $l = 0; + } + elseif( $this->labeltype == 1 ) { + $l = $data[$i]; + } + else { + $l = $this->adjusted_data[$i]; + } + if( isset($this->labels[$i]) && is_string($this->labels[$i]) ) { + $l=sprintf($this->labels[$i],$l); + } + + $this->StrokeLabels($l,$img,$labeldata[$i][0]*M_PI/180,$x,$y,$z); + + $this->Add3DSliceToCSIM($i,$labeldata[$i][1],$labeldata[$i][2],$h*2,$d*2,$z, + $originalangles[$i][0],$originalangles[$i][1]); + } + } + + // + // Finally add potential lines in pie + // + + if( $edgecolor=="" || $aaoption !== 0 ) return; + + $accsum = 0; + $a = $startangle; + $a = $this->NormAngle($a); + + $a *= M_PI/180.0; + + $idx=0; + $img->PushColor($edgecolor); + $img->SetLineWeight($edgeweight); + + $fulledge = true; + for($i=0; $i < count($data) && $fulledge; ++$i ) { + if( empty($this->explode_radius[$i]) ) { + $this->explode_radius[$i]=0; + } + if( $this->explode_radius[$i] > 0 ) { + $fulledge = false; + } + } + + + for($i=0; $i < count($data); ++$i, ++$idx ) { + + $da = $data[$i]/$sum * 2*M_PI; + $this->StrokeFullSliceFrame($img,$xc,$yc,$a,$a+$da,$d,$h,$z,$edgecolor, + $this->explode_radius[$i],$fulledge); + $a += $da; + } + $img->PopColor(); + } + + function StrokeFullSliceFrame($img,$xc,$yc,$sa,$ea,$w,$h,$z,$edgecolor,$exploderadius,$fulledge) { + $step = 0.02; + + if( $exploderadius > 0 ) { + $la = ($sa+$ea)/2; + $xc += $exploderadius*cos($la); + $yc -= $exploderadius*sin($la) * ($h/$w) ; + + } + + $p = array($xc,$yc,$xc+$w*cos($sa),$yc-$h*sin($sa)); + + for($a=$sa; $a < $ea; $a += $step ) { + $p[] = $xc + $w*cos($a); + $p[] = $yc - $h*sin($a); + } + + $p[] = $xc+$w*cos($ea); + $p[] = $yc-$h*sin($ea); + $p[] = $xc; + $p[] = $yc; + + $img->SetColor($edgecolor); + $img->Polygon($p); + + // Unfortunately we can't really draw the full edge around the whole of + // of the slice if any of the slices are exploded. The reason is that + // this algorithm is to simply. There are cases where the edges will + // "overwrite" other slices when they have been exploded. + // Doing the full, proper 3D hidden lines stiff is actually quite + // tricky. So for exploded pies we only draw the top edge. Not perfect + // but the "real" solution is much more complicated. + if( $fulledge && !( $sa > 0 && $sa < M_PI && $ea < M_PI) ) { + + if($sa < M_PI && $ea > M_PI) { + $sa = M_PI; + } + + if($sa < 2*M_PI && (($ea >= 2*M_PI) || ($ea > 0 && $ea < $sa ) ) ) { + $ea = 2*M_PI; + } + + if( $sa >= M_PI && $ea <= 2*M_PI ) { + $p = array($xc + $w*cos($sa),$yc - $h*sin($sa), + $xc + $w*cos($sa),$z + $yc - $h*sin($sa)); + + for($a=$sa+$step; $a < $ea; $a += $step ) { + $p[] = $xc + $w*cos($a); + $p[] = $z + $yc - $h*sin($a); + } + $p[] = $xc + $w*cos($ea); + $p[] = $z + $yc - $h*sin($ea); + $p[] = $xc + $w*cos($ea); + $p[] = $yc - $h*sin($ea); + $img->SetColor($edgecolor); + $img->Polygon($p); + } + } + } + + function Stroke($img,$aaoption=0) { + $n = count($this->data); + + // If user hasn't set the colors use the theme array + if( $this->setslicecolors==null ) { + $colors = array_keys($img->rgb->rgb_table); + sort($colors); + $idx_a=$this->themearr[$this->theme]; + $ca = array(); + $m = count($idx_a); + for($i=0; $i < $m; ++$i) { + $ca[$i] = $colors[$idx_a[$i]]; + } + $ca = array_reverse(array_slice($ca,0,$n)); + } + else { + $ca = $this->setslicecolors; + } + + + if( $this->posx <= 1 && $this->posx > 0 ) { + $xc = round($this->posx*$img->width); + } + else { + $xc = $this->posx ; + } + + if( $this->posy <= 1 && $this->posy > 0 ) { + $yc = round($this->posy*$img->height); + } + else { + $yc = $this->posy ; + } + + if( $this->radius <= 1 ) { + $width = floor($this->radius*min($img->width,$img->height)); + // Make sure that the pie doesn't overflow the image border + // The 0.9 factor is simply an extra margin to leave some space + // between the pie an the border of the image. + $width = min($width,min($xc*0.9,($yc*90/$this->angle-$width/4)*0.9)); + } + else { + $width = $this->radius * ($aaoption === 1 ? 2 : 1 ) ; + } + + // Add a sanity check for width + if( $width < 1 ) { + JpGraphError::RaiseL(14007);//("Width for 3D Pie is 0. Specify a size > 0"); + } + + // Establish a thickness. By default the thickness is a fifth of the + // pie slice width (=pie radius) but since the perspective depends + // on the inclination angle we use some heuristics to make the edge + // slightly thicker the less the angle. + + // Has user specified an absolute thickness? In that case use + // that instead + + if( $this->iThickness ) { + $thick = $this->iThickness; + $thick *= ($aaoption === 1 ? 2 : 1 ); + } + else { + $thick = $width/12; + } + $a = $this->angle; + + if( $a <= 30 ) $thick *= 1.6; + elseif( $a <= 40 ) $thick *= 1.4; + elseif( $a <= 50 ) $thick *= 1.2; + elseif( $a <= 60 ) $thick *= 1.0; + elseif( $a <= 70 ) $thick *= 0.8; + elseif( $a <= 80 ) $thick *= 0.7; + else $thick *= 0.6; + + $thick = floor($thick); + + if( $this->explode_all ) { + for($i=0; $i < $n; ++$i) + $this->explode_radius[$i]=$this->explode_r; + } + + $this->Pie3D($aaoption,$img,$this->data, $ca, $xc, $yc, $width, $this->angle, + $thick, 0.65, $this->startangle, $this->edgecolor, $this->edgeweight); + + // Adjust title position + if( $aaoption != 1 ) { + $this->title->SetPos($xc,$yc-$this->title->GetFontHeight($img)-$width/2-$this->title->margin, "center","bottom"); + $this->title->Stroke($img); + } + } + + //--------------- + // PRIVATE METHODS + + // Position the labels of each slice + function StrokeLabels($label,$img,$a,$xp,$yp,$z) { + $this->value->halign="left"; + $this->value->valign="top"; + + // Position the axis title. + // dx, dy is the offset from the top left corner of the bounding box that sorrounds the text + // that intersects with the extension of the corresponding axis. The code looks a little + // bit messy but this is really the only way of having a reasonable position of the + // axis titles. + $this->value->ApplyFont($img); + $h=$img->GetTextHeight($label); + // For numeric values the format of the display value + // must be taken into account + if( is_numeric($label) ) { + if( $label >= 0 ) { + $w=$img->GetTextWidth(sprintf($this->value->format,$label)); + } + else { + $w=$img->GetTextWidth(sprintf($this->value->negformat,$label)); + } + } + else { + $w=$img->GetTextWidth($label); + } + + while( $a > 2*M_PI ) { + $a -= 2*M_PI; + } + + if( $a>=7*M_PI/4 || $a <= M_PI/4 ) $dx=0; + if( $a>=M_PI/4 && $a <= 3*M_PI/4 ) $dx=($a-M_PI/4)*2/M_PI; + if( $a>=3*M_PI/4 && $a <= 5*M_PI/4 ) $dx=1; + if( $a>=5*M_PI/4 && $a <= 7*M_PI/4 ) $dx=(1-($a-M_PI*5/4)*2/M_PI); + + if( $a>=7*M_PI/4 ) $dy=(($a-M_PI)-3*M_PI/4)*2/M_PI; + if( $a<=M_PI/4 ) $dy=(1-$a*2/M_PI); + if( $a>=M_PI/4 && $a <= 3*M_PI/4 ) $dy=1; + if( $a>=3*M_PI/4 && $a <= 5*M_PI/4 ) $dy=(1-($a-3*M_PI/4)*2/M_PI); + if( $a>=5*M_PI/4 && $a <= 7*M_PI/4 ) $dy=0; + + $x = round($xp-$dx*$w); + $y = round($yp-$dy*$h); + + // Mark anchor point for debugging + /* + $img->SetColor('red'); + $img->Line($xp-10,$yp,$xp+10,$yp); + $img->Line($xp,$yp-10,$xp,$yp+10); + */ + + $oldmargin = $this->value->margin; + $this->value->margin=0; + $this->value->Stroke($img,$label,$x,$y); + $this->value->margin=$oldmargin; + + } +} // Class + +/* EOF */ +?> diff --git a/Societes/ric/jpgraph/jpgraph_plotband.php b/Societes/ric/jpgraph/jpgraph_plotband.php new file mode 100755 index 00000000..b7aef750 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_plotband.php @@ -0,0 +1,635 @@ +x=$aX; + $this->y=$aY; + $this->w=$aWidth; + $this->h=$aHeight; + $this->xe=$aX+$aWidth-1; + $this->ye=$aY+$aHeight-1; + } +} + +//===================================================================== +// Class RectPattern +// Base class for pattern hierarchi that is used to display patterned +// bands on the graph. Any subclass that doesn't override Stroke() +// must at least implement method DoPattern($aImg) which is responsible +// for drawing the pattern onto the graph. +//===================================================================== +class RectPattern { + protected $color; + protected $weight; + protected $rect=null; + protected $doframe=true; + protected $linespacing; // Line spacing in pixels + protected $iBackgroundColor=-1; // Default is no background fill + + function __construct($aColor,$aWeight=1) { + $this->color = $aColor; + $this->weight = $aWeight; + } + + function SetBackground($aBackgroundColor) { + $this->iBackgroundColor=$aBackgroundColor; + } + + function SetPos($aRect) { + $this->rect = $aRect; + } + + function ShowFrame($aShow=true) { + $this->doframe=$aShow; + } + + function SetDensity($aDens) { + if( $aDens < 1 || $aDens > 100 ) + JpGraphError::RaiseL(16001,$aDens); + //(" Desity for pattern must be between 1 and 100. (You tried $aDens)"); + // 1% corresponds to linespacing=50 + // 100 % corresponds to linespacing 1 + $this->linespacing = floor(((100-$aDens)/100.0)*50)+1; + + } + + function Stroke($aImg) { + if( $this->rect == null ) + JpGraphError::RaiseL(16002); + //(" No positions specified for pattern."); + + if( !(is_numeric($this->iBackgroundColor) && $this->iBackgroundColor==-1) ) { + $aImg->SetColor($this->iBackgroundColor); + $aImg->FilledRectangle($this->rect->x,$this->rect->y,$this->rect->xe,$this->rect->ye); + } + + $aImg->SetColor($this->color); + $aImg->SetLineWeight($this->weight); + + // Virtual function implemented by subclass + $this->DoPattern($aImg); + + // Frame around the pattern area + if( $this->doframe ) + $aImg->Rectangle($this->rect->x,$this->rect->y,$this->rect->xe,$this->rect->ye); + } + +} + + +//===================================================================== +// Class RectPatternSolid +// Implements a solid band +//===================================================================== +class RectPatternSolid extends RectPattern { + + function __construct($aColor="black",$aWeight=1) { + parent::__construct($aColor,$aWeight); + } + + function DoPattern($aImg) { + $aImg->SetColor($this->color); + $aImg->FilledRectangle($this->rect->x,$this->rect->y, + $this->rect->xe,$this->rect->ye); + } +} + +//===================================================================== +// Class RectPatternHor +// Implements horizontal line pattern +//===================================================================== +class RectPatternHor extends RectPattern { + + function __construct($aColor="black",$aWeight=1,$aLineSpacing=7) { + parent::__construct($aColor,$aWeight); + $this->linespacing = $aLineSpacing; + } + + function DoPattern($aImg) { + $x0 = $this->rect->x; + $x1 = $this->rect->xe; + $y = $this->rect->y; + while( $y < $this->rect->ye ) { + $aImg->Line($x0,$y,$x1,$y); + $y += $this->linespacing; + } + } +} + +//===================================================================== +// Class RectPatternVert +// Implements vertical line pattern +//===================================================================== +class RectPatternVert extends RectPattern { + + function __construct($aColor="black",$aWeight=1,$aLineSpacing=7) { + parent::__construct($aColor,$aWeight); + $this->linespacing = $aLineSpacing; + } + + //-------------------- + // Private methods + // + function DoPattern($aImg) { + $x = $this->rect->x; + $y0 = $this->rect->y; + $y1 = $this->rect->ye; + while( $x < $this->rect->xe ) { + $aImg->Line($x,$y0,$x,$y1); + $x += $this->linespacing; + } + } +} + + +//===================================================================== +// Class RectPatternRDiag +// Implements right diagonal pattern +//===================================================================== +class RectPatternRDiag extends RectPattern { + + function __construct($aColor="black",$aWeight=1,$aLineSpacing=12) { + parent::__construct($aColor,$aWeight); + $this->linespacing = $aLineSpacing; + } + + function DoPattern($aImg) { + // -------------------- + // | / / / / /| + // |/ / / / / | + // | / / / / | + // -------------------- + $xe = $this->rect->xe; + $ye = $this->rect->ye; + $x0 = $this->rect->x + round($this->linespacing/2); + $y0 = $this->rect->y; + $x1 = $this->rect->x; + $y1 = $this->rect->y + round($this->linespacing/2); + + while($x0<=$xe && $y1<=$ye) { + $aImg->Line($x0,$y0,$x1,$y1); + $x0 += $this->linespacing; + $y1 += $this->linespacing; + } + + if( $xe-$x1 > $ye-$y0 ) { + // Width larger than height + $x1 = $this->rect->x + ($y1-$ye); + $y1 = $ye; + $y0 = $this->rect->y; + while( $x0 <= $xe ) { + $aImg->Line($x0,$y0,$x1,$y1); + $x0 += $this->linespacing; + $x1 += $this->linespacing; + } + + $y0=$this->rect->y + ($x0-$xe); + $x0=$xe; + } + else { + // Height larger than width + $diff = $x0-$xe; + $y0 = $diff+$this->rect->y; + $x0 = $xe; + $x1 = $this->rect->x; + while( $y1 <= $ye ) { + $aImg->Line($x0,$y0,$x1,$y1); + $y1 += $this->linespacing; + $y0 += $this->linespacing; + } + + $diff = $y1-$ye; + $y1 = $ye; + $x1 = $diff + $this->rect->x; + } + + while( $y0 <= $ye ) { + $aImg->Line($x0,$y0,$x1,$y1); + $y0 += $this->linespacing; + $x1 += $this->linespacing; + } + } +} + +//===================================================================== +// Class RectPatternLDiag +// Implements left diagonal pattern +//===================================================================== +class RectPatternLDiag extends RectPattern { + + function __construct($aColor="black",$aWeight=1,$aLineSpacing=12) { + $this->linespacing = $aLineSpacing; + parent::__construct($aColor,$aWeight); + } + + function DoPattern($aImg) { + // -------------------- + // |\ \ \ \ \ | + // | \ \ \ \ \| + // | \ \ \ \ | + // |------------------| + $xe = $this->rect->xe; + $ye = $this->rect->ye; + $x0 = $this->rect->x + round($this->linespacing/2); + $y0 = $this->rect->ye; + $x1 = $this->rect->x; + $y1 = $this->rect->ye - round($this->linespacing/2); + + while($x0<=$xe && $y1>=$this->rect->y) { + $aImg->Line($x0,$y0,$x1,$y1); + $x0 += $this->linespacing; + $y1 -= $this->linespacing; + } + if( $xe-$x1 > $ye-$this->rect->y ) { + // Width larger than height + $x1 = $this->rect->x + ($this->rect->y-$y1); + $y0=$ye; $y1=$this->rect->y; + while( $x0 <= $xe ) { + $aImg->Line($x0,$y0,$x1,$y1); + $x0 += $this->linespacing; + $x1 += $this->linespacing; + } + + $y0=$this->rect->ye - ($x0-$xe); + $x0=$xe; + } + else { + // Height larger than width + $diff = $x0-$xe; + $y0 = $ye-$diff; + $x0 = $xe; + while( $y1 >= $this->rect->y ) { + $aImg->Line($x0,$y0,$x1,$y1); + $y0 -= $this->linespacing; + $y1 -= $this->linespacing; + } + $diff = $this->rect->y - $y1; + $x1 = $this->rect->x + $diff; + $y1 = $this->rect->y; + } + while( $y0 >= $this->rect->y ) { + $aImg->Line($x0,$y0,$x1,$y1); + $y0 -= $this->linespacing; + $x1 += $this->linespacing; + } + } +} + +//===================================================================== +// Class RectPattern3DPlane +// Implements "3D" plane pattern +//===================================================================== +class RectPattern3DPlane extends RectPattern { + private $alpha=50; // Parameter that specifies the distance + // to "simulated" horizon in pixel from the + // top of the band. Specifies how fast the lines + // converge. + + function __construct($aColor="black",$aWeight=1) { + parent::__construct($aColor,$aWeight); + $this->SetDensity(10); // Slightly larger default + } + + function SetHorizon($aHorizon) { + $this->alpha=$aHorizon; + } + + function DoPattern($aImg) { + // "Fake" a nice 3D grid-effect. + $x0 = $this->rect->x + $this->rect->w/2; + $y0 = $this->rect->y; + $x1 = $x0; + $y1 = $this->rect->ye; + $x0_right = $x0; + $x1_right = $x1; + + // BTW "apa" means monkey in Swedish but is really a shortform for + // "alpha+a" which was the labels I used on paper when I derived the + // geometric to get the 3D perspective right. + // $apa is the height of the bounding rectangle plus the distance to the + // artifical horizon (alpha) + $apa = $this->rect->h + $this->alpha; + + // Three cases and three loops + // 1) The endpoint of the line ends on the bottom line + // 2) The endpoint ends on the side + // 3) Horizontal lines + + // Endpoint falls on bottom line + $middle=$this->rect->x + $this->rect->w/2; + $dist=$this->linespacing; + $factor=$this->alpha /($apa); + while($x1>$this->rect->x) { + $aImg->Line($x0,$y0,$x1,$y1); + $aImg->Line($x0_right,$y0,$x1_right,$y1); + $x1 = $middle - $dist; + $x0 = $middle - $dist * $factor; + $x1_right = $middle + $dist; + $x0_right = $middle + $dist * $factor; + $dist += $this->linespacing; + } + + // Endpoint falls on sides + $dist -= $this->linespacing; + $d=$this->rect->w/2; + $c = $apa - $d*$apa/$dist; + while( $x0>$this->rect->x ) { + $aImg->Line($x0,$y0,$this->rect->x,$this->rect->ye-$c); + $aImg->Line($x0_right,$y0,$this->rect->xe,$this->rect->ye-$c); + $dist += $this->linespacing; + $x0 = $middle - $dist * $factor; + $x1 = $middle - $dist; + $x0_right = $middle + $dist * $factor; + $c = $apa - $d*$apa/$dist; + } + + // Horizontal lines + // They need some serious consideration since they are a function + // of perspective depth (alpha) and density (linespacing) + $x0=$this->rect->x; + $x1=$this->rect->xe; + $y=$this->rect->ye; + + // The first line is drawn directly. Makes the loop below slightly + // more readable. + $aImg->Line($x0,$y,$x1,$y); + $hls = $this->linespacing; + + // A correction factor for vertical "brick" line spacing to account for + // a) the difference in number of pixels hor vs vert + // b) visual apperance to make the first layer of "bricks" look more + // square. + $vls = $this->linespacing*0.6; + + $ds = $hls*($apa-$vls)/$apa; + // Get the slope for the "perspective line" going from bottom right + // corner to top left corner of the "first" brick. + + // Uncomment the following lines if you want to get a visual understanding + // of what this helpline does. BTW this mimics the way you would get the + // perspective right when drawing on paper. + /* + $x0 = $middle; + $y0 = $this->rect->ye; + $len=floor(($this->rect->ye-$this->rect->y)/$vls); + $x1 = $middle+round($len*$ds); + $y1 = $this->rect->ye-$len*$vls; + $aImg->PushColor("red"); + $aImg->Line($x0,$y0,$x1,$y1); + $aImg->PopColor(); + */ + + $y -= $vls; + $k=($this->rect->ye-($this->rect->ye-$vls))/($middle-($middle-$ds)); + $dist = $hls; + while( $y>$this->rect->y ) { + $aImg->Line($this->rect->x,$y,$this->rect->xe,$y); + $adj = $k*$dist/(1+$dist*$k/$apa); + if( $adj < 2 ) $adj=1; + $y = $this->rect->ye - round($adj); + $dist += $hls; + } + } +} + +//===================================================================== +// Class RectPatternCross +// Vert/Hor crosses +//===================================================================== +class RectPatternCross extends RectPattern { + private $vert=null; + private $hor=null; + function __construct($aColor="black",$aWeight=1) { + parent::__construct($aColor,$aWeight); + $this->vert = new RectPatternVert($aColor,$aWeight); + $this->hor = new RectPatternHor($aColor,$aWeight); + } + + function SetOrder($aDepth) { + $this->vert->SetOrder($aDepth); + $this->hor->SetOrder($aDepth); + } + + function SetPos($aRect) { + parent::SetPos($aRect); + $this->vert->SetPos($aRect); + $this->hor->SetPos($aRect); + } + + function SetDensity($aDens) { + $this->vert->SetDensity($aDens); + $this->hor->SetDensity($aDens); + } + + function DoPattern($aImg) { + $this->vert->DoPattern($aImg); + $this->hor->DoPattern($aImg); + } +} + +//===================================================================== +// Class RectPatternDiagCross +// Vert/Hor crosses +//===================================================================== + +class RectPatternDiagCross extends RectPattern { + private $left=null; + private $right=null; + function __construct($aColor="black",$aWeight=1) { + parent::__construct($aColor,$aWeight); + $this->right = new RectPatternRDiag($aColor,$aWeight); + $this->left = new RectPatternLDiag($aColor,$aWeight); + } + + function SetOrder($aDepth) { + $this->left->SetOrder($aDepth); + $this->right->SetOrder($aDepth); + } + + function SetPos($aRect) { + parent::SetPos($aRect); + $this->left->SetPos($aRect); + $this->right->SetPos($aRect); + } + + function SetDensity($aDens) { + $this->left->SetDensity($aDens); + $this->right->SetDensity($aDens); + } + + function DoPattern($aImg) { + $this->left->DoPattern($aImg); + $this->right->DoPattern($aImg); + } + +} + +//===================================================================== +// Class RectPatternFactory +// Factory class for rectangular pattern +//===================================================================== +class RectPatternFactory { + function __construct() { + // Empty + } + function Create($aPattern,$aColor,$aWeight=1) { + switch($aPattern) { + case BAND_RDIAG: + $obj = new RectPatternRDiag($aColor,$aWeight); + break; + case BAND_LDIAG: + $obj = new RectPatternLDiag($aColor,$aWeight); + break; + case BAND_SOLID: + $obj = new RectPatternSolid($aColor,$aWeight); + break; + case BAND_VLINE: + $obj = new RectPatternVert($aColor,$aWeight); + break; + case BAND_HLINE: + $obj = new RectPatternHor($aColor,$aWeight); + break; + case BAND_3DPLANE: + $obj = new RectPattern3DPlane($aColor,$aWeight); + break; + case BAND_HVCROSS: + $obj = new RectPatternCross($aColor,$aWeight); + break; + case BAND_DIAGCROSS: + $obj = new RectPatternDiagCross($aColor,$aWeight); + break; + default: + JpGraphError::RaiseL(16003,$aPattern); + //(" Unknown pattern specification ($aPattern)"); + } + return $obj; + } +} + + +//===================================================================== +// Class PlotBand +// Factory class which is used by the client. +// It is responsible for factoring the corresponding pattern +// concrete class. +//===================================================================== +class PlotBand { + public $depth; // Determine if band should be over or under the plots + private $prect=null; + private $dir, $min, $max; + + function __construct($aDir,$aPattern,$aMin,$aMax,$aColor="black",$aWeight=1,$aDepth=DEPTH_BACK) { + $f = new RectPatternFactory(); + $this->prect = $f->Create($aPattern,$aColor,$aWeight); + if( is_numeric($aMin) && is_numeric($aMax) && ($aMin > $aMax) ) + JpGraphError::RaiseL(16004); + //('Min value for plotband is larger than specified max value. Please correct.'); + $this->dir = $aDir; + $this->min = $aMin; + $this->max = $aMax; + $this->depth=$aDepth; + } + + // Set position. aRect contains absolute image coordinates + function SetPos($aRect) { + assert( $this->prect != null ) ; + $this->prect->SetPos($aRect); + } + + function ShowFrame($aFlag=true) { + $this->prect->ShowFrame($aFlag); + } + + // Set z-order. In front of pplot or in the back + function SetOrder($aDepth) { + $this->depth=$aDepth; + } + + function SetDensity($aDens) { + $this->prect->SetDensity($aDens); + } + + function GetDir() { + return $this->dir; + } + + function GetMin() { + return $this->min; + } + + function GetMax() { + return $this->max; + } + + function PreStrokeAdjust($aGraph) { + // Nothing to do + } + + // Display band + function Stroke($aImg,$aXScale,$aYScale) { + assert( $this->prect != null ) ; + if( $this->dir == HORIZONTAL ) { + if( $this->min === 'min' ) $this->min = $aYScale->GetMinVal(); + if( $this->max === 'max' ) $this->max = $aYScale->GetMaxVal(); + + // Only draw the bar if it actually appears in the range + if ($this->min < $aYScale->GetMaxVal() && $this->max > $aYScale->GetMinVal()) { + + // Trucate to limit of axis + $this->min = max($this->min, $aYScale->GetMinVal()); + $this->max = min($this->max, $aYScale->GetMaxVal()); + + $x=$aXScale->scale_abs[0]; + $y=$aYScale->Translate($this->max); + $width=$aXScale->scale_abs[1]-$aXScale->scale_abs[0]+1; + $height=abs($y-$aYScale->Translate($this->min))+1; + $this->prect->SetPos(new Rectangle($x,$y,$width,$height)); + $this->prect->Stroke($aImg); + } + } + else { // VERTICAL + if( $this->min === 'min' ) $this->min = $aXScale->GetMinVal(); + if( $this->max === 'max' ) $this->max = $aXScale->GetMaxVal(); + + // Only draw the bar if it actually appears in the range + if ($this->min < $aXScale->GetMaxVal() && $this->max > $aXScale->GetMinVal()) { + + // Trucate to limit of axis + $this->min = max($this->min, $aXScale->GetMinVal()); + $this->max = min($this->max, $aXScale->GetMaxVal()); + + $y=$aYScale->scale_abs[1]; + $x=$aXScale->Translate($this->min); + $height=abs($aYScale->scale_abs[1]-$aYScale->scale_abs[0]); + $width=abs($x-$aXScale->Translate($this->max)); + $this->prect->SetPos(new Rectangle($x,$y,$width,$height)); + $this->prect->Stroke($aImg); + } + } + } +} + + +?> diff --git a/Societes/ric/jpgraph/jpgraph_plotline.php b/Societes/ric/jpgraph/jpgraph_plotline.php new file mode 100755 index 00000000..4ee0f564 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_plotline.php @@ -0,0 +1,142 @@ +direction = $aDir; + $this->color=$aColor; + $this->weight=$aWeight; + $this->scaleposition=$aPos; + } + + function SetLegend($aLegend,$aCSIM='',$aCSIMAlt='',$aCSIMWinTarget='') { + $this->legend = $aLegend; + $this->legendcsimtarget = $aCSIM; + $this->legendcsimwintarget = $aCSIMWinTarget; + $this->legendcsimalt = $aCSIMAlt; + } + + function HideLegend($f=true) { + $this->hidelegend = $f; + } + + function SetPosition($aScalePosition) { + $this->scaleposition=$aScalePosition; + } + + function SetDirection($aDir) { + $this->direction = $aDir; + } + + function SetColor($aColor) { + $this->color=$aColor; + } + + function SetWeight($aWeight) { + $this->weight=$aWeight; + } + + function SetLineStyle($aStyle) { + $this->iLineStyle = $aStyle; + } + + function GetCSIMAreas() { + return ''; + } + + //--------------- + // PRIVATE METHODS + + function DoLegend($graph) { + if( !$this->hidelegend ) $this->Legend($graph); + } + + // Framework function the chance for each plot class to set a legend + function Legend($aGraph) { + if( $this->legend != '' ) { + $dummyPlotMark = new PlotMark(); + $lineStyle = 1; + $aGraph->legend->Add($this->legend,$this->color,$dummyPlotMark,$lineStyle, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + } + + function PreStrokeAdjust($aGraph) { + // Nothing to do + } + + // Called by framework to allow the object to draw + // optional information in the margin area + function StrokeMargin($aImg) { + // Nothing to do + } + + // Framework function to allow the object to adjust the scale + function PrescaleSetup($aGraph) { + // Nothing to do + } + + function Min() { + return array(null,null); + } + + function Max() { + return array(null,null); + } + + function _Stroke($aImg,$aMinX,$aMinY,$aMaxX,$aMaxY,$aXPos,$aYPos) { + $aImg->SetColor($this->color); + $aImg->SetLineWeight($this->weight); + $oldStyle = $aImg->SetLineStyle($this->iLineStyle); + if( $this->direction == VERTICAL ) { + $ymin_abs = $aMinY; + $ymax_abs = $aMaxY; + $xpos_abs = $aXPos; + $aImg->StyleLine($xpos_abs, $ymin_abs, $xpos_abs, $ymax_abs); + } + elseif( $this->direction == HORIZONTAL ) { + $xmin_abs = $aMinX; + $xmax_abs = $aMaxX; + $ypos_abs = $aYPos; + $aImg->StyleLine($xmin_abs, $ypos_abs, $xmax_abs, $ypos_abs); + } + else { + JpGraphError::RaiseL(25125);//(" Illegal direction for static line"); + } + $aImg->SetLineStyle($oldStyle); + } + + function Stroke($aImg,$aXScale,$aYScale) { + $this->_Stroke($aImg, + $aImg->left_margin, + $aYScale->Translate($aYScale->GetMinVal()), + $aImg->width-$aImg->right_margin, + $aYScale->Translate($aYScale->GetMaxVal()), + $aXScale->Translate($this->scaleposition), + $aYScale->Translate($this->scaleposition) + ); + } +} + + +?> diff --git a/Societes/ric/jpgraph/jpgraph_plotmark.inc.php b/Societes/ric/jpgraph/jpgraph_plotmark.inc.php new file mode 100755 index 00000000..29c4d032 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_plotmark.inc.php @@ -0,0 +1,504 @@ +title = new Text(); + $this->title->Hide(); + $this->csimareas = ''; + $this->type=-1; + } + //--------------- + // PUBLIC METHODS + function SetType($aType,$aFileName='',$aScale=1.0) { + $this->type = $aType; + if( $aType == MARK_IMG && $aFileName=='' ) { + JpGraphError::RaiseL(23003);//('A filename must be specified if you set the mark type to MARK_IMG.'); + } + $this->iFileName = $aFileName; + $this->iScale = $aScale; + } + + function SetCallback($aFunc) { + $this->iFormatCallback = $aFunc; + } + + function SetCallbackYX($aFunc) { + $this->iFormatCallback2 = $aFunc; + } + + function GetType() { + return $this->type; + } + + function SetColor($aColor) { + $this->color=$aColor; + } + + function SetFillColor($aFillColor) { + $this->fill_color = $aFillColor; + } + + function SetWeight($aWeight) { + $this->weight = $aWeight; + } + + // Synonym for SetWidth() + function SetSize($aWidth) { + $this->width=$aWidth; + } + + function SetWidth($aWidth) { + $this->width=$aWidth; + } + + function SetDefaultWidth() { + switch( $this->type ) { + case MARK_CIRCLE: + case MARK_FILLEDCIRCLE: + $this->width=4; + break; + default: + $this->width=7; + } + } + + function GetWidth() { + return $this->width; + } + + function Hide($aHide=true) { + $this->show = !$aHide; + } + + function Show($aShow=true) { + $this->show = $aShow; + } + + function SetCSIMAltVal($aY,$aX='') { + $this->yvalue=$aY; + $this->xvalue=$aX; + } + + function SetCSIMTarget($aTarget,$aWinTarget='') { + $this->csimtarget=$aTarget; + $this->csimwintarget=$aWinTarget; + } + + function SetCSIMAlt($aAlt) { + $this->csimalt=$aAlt; + } + + function GetCSIMAreas(){ + return $this->csimareas; + } + + function AddCSIMPoly($aPts) { + $coords = round($aPts[0]).", ".round($aPts[1]); + $n = count($aPts)/2; + for( $i=1; $i < $n; ++$i){ + $coords .= ", ".round($aPts[2*$i]).", ".round($aPts[2*$i+1]); + } + $this->csimareas=""; + if( !empty($this->csimtarget) ) { + $this->csimareas .= "csimtarget)."\""; + + if( !empty($this->csimwintarget) ) { + $this->csimareas .= " target=\"".$this->csimwintarget."\" "; + } + + if( !empty($this->csimalt) ) { + $tmp=sprintf($this->csimalt,$this->yvalue,$this->xvalue); + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\""; + } + $this->csimareas .= " />\n"; + } + } + + function AddCSIMCircle($x,$y,$r) { + $x = round($x); $y=round($y); $r=round($r); + $this->csimareas=""; + if( !empty($this->csimtarget) ) { + $this->csimareas .= "csimtarget)."\""; + + if( !empty($this->csimwintarget) ) { + $this->csimareas .= " target=\"".$this->csimwintarget."\" "; + } + + if( !empty($this->csimalt) ) { + $tmp=sprintf($this->csimalt,$this->yvalue,$this->xvalue); + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + } + + function Stroke($img,$x,$y) { + if( !$this->show ) return; + + if( $this->iFormatCallback != '' || $this->iFormatCallback2 != '' ) { + + if( $this->iFormatCallback != '' ) { + $f = $this->iFormatCallback; + list($width,$color,$fcolor) = call_user_func($f,$this->yvalue); + $filename = $this->iFileName; + $imgscale = $this->iScale; + } + else { + $f = $this->iFormatCallback2; + list($width,$color,$fcolor,$filename,$imgscale) = call_user_func($f,$this->yvalue,$this->xvalue); + if( $filename=="" ) $filename = $this->iFileName; + if( $imgscale=="" ) $imgscale = $this->iScale; + } + + if( $width=="" ) $width = $this->width; + if( $color=="" ) $color = $this->color; + if( $fcolor=="" ) $fcolor = $this->fill_color; + + } + else { + $fcolor = $this->fill_color; + $color = $this->color; + $width = $this->width; + $filename = $this->iFileName; + $imgscale = $this->iScale; + } + + if( $this->type == MARK_IMG || + ($this->type >= MARK_FLAG1 && $this->type <= MARK_FLAG4 ) || + $this->type >= MARK_IMG_PUSHPIN ) { + + // Note: For the builtin images we use the "filename" parameter + // to denote the color + $anchor_x = 0.5; + $anchor_y = 0.5; + switch( $this->type ) { + case MARK_FLAG1: + case MARK_FLAG2: + case MARK_FLAG3: + case MARK_FLAG4: + $this->markimg = FlagCache::GetFlagImgByName($this->type-MARK_FLAG1+1,$filename); + break; + + case MARK_IMG : + // Load an image and use that as a marker + // Small optimization, if we have already read an image don't + // waste time reading it again. + if( $this->markimg == '' || !($this->oldfilename === $filename) ) { + $this->markimg = Graph::LoadBkgImage('',$filename); + $this->oldfilename = $filename ; + } + break; + + case MARK_IMG_PUSHPIN: + case MARK_IMG_SPUSHPIN: + case MARK_IMG_LPUSHPIN: + if( $this->imgdata_pushpins == null ) { + require_once 'imgdata_pushpins.inc.php'; + $this->imgdata_pushpins = new ImgData_PushPins(); + } + $this->markimg = $this->imgdata_pushpins->GetImg($this->type,$filename); + list($anchor_x,$anchor_y) = $this->imgdata_pushpins->GetAnchor(); + break; + + case MARK_IMG_SQUARE: + if( $this->imgdata_squares == null ) { + require_once 'imgdata_squares.inc.php'; + $this->imgdata_squares = new ImgData_Squares(); + } + $this->markimg = $this->imgdata_squares->GetImg($this->type,$filename); + list($anchor_x,$anchor_y) = $this->imgdata_squares->GetAnchor(); + break; + + case MARK_IMG_STAR: + if( $this->imgdata_stars == null ) { + require_once 'imgdata_stars.inc.php'; + $this->imgdata_stars = new ImgData_Stars(); + } + $this->markimg = $this->imgdata_stars->GetImg($this->type,$filename); + list($anchor_x,$anchor_y) = $this->imgdata_stars->GetAnchor(); + break; + + case MARK_IMG_BEVEL: + if( $this->imgdata_bevels == null ) { + require_once 'imgdata_bevels.inc.php'; + $this->imgdata_bevels = new ImgData_Bevels(); + } + $this->markimg = $this->imgdata_bevels->GetImg($this->type,$filename); + list($anchor_x,$anchor_y) = $this->imgdata_bevels->GetAnchor(); + break; + + case MARK_IMG_DIAMOND: + if( $this->imgdata_diamonds == null ) { + require_once 'imgdata_diamonds.inc.php'; + $this->imgdata_diamonds = new ImgData_Diamonds(); + } + $this->markimg = $this->imgdata_diamonds->GetImg($this->type,$filename); + list($anchor_x,$anchor_y) = $this->imgdata_diamonds->GetAnchor(); + break; + + case MARK_IMG_BALL: + case MARK_IMG_SBALL: + case MARK_IMG_MBALL: + case MARK_IMG_LBALL: + if( $this->imgdata_balls == null ) { + require_once 'imgdata_balls.inc.php'; + $this->imgdata_balls = new ImgData_Balls(); + } + $this->markimg = $this->imgdata_balls->GetImg($this->type,$filename); + list($anchor_x,$anchor_y) = $this->imgdata_balls->GetAnchor(); + break; + } + + $w = $img->GetWidth($this->markimg); + $h = $img->GetHeight($this->markimg); + + $dw = round($imgscale * $w ); + $dh = round($imgscale * $h ); + + // Do potential rotation + list($x,$y) = $img->Rotate($x,$y); + + $dx = round($x-$dw*$anchor_x); + $dy = round($y-$dh*$anchor_y); + + $this->width = max($dx,$dy); + + $img->Copy($this->markimg,$dx,$dy,0,0,$dw,$dh,$w,$h); + if( !empty($this->csimtarget) ) { + $this->csimareas = "csimtarget)."\""; + + if( !empty($this->csimwintarget) ) { + $this->csimareas .= " target=\"".$this->csimwintarget."\" "; + } + + if( !empty($this->csimalt) ) { + $tmp=sprintf($this->csimalt,$this->yvalue,$this->xvalue); + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + + // Stroke title + $this->title->Align("center","top"); + $this->title->Stroke($img,$x,$y+round($dh/2)); + return; + } + + $weight = $this->weight; + $dx=round($width/2,0); + $dy=round($width/2,0); + $pts=0; + + switch( $this->type ) { + case MARK_SQUARE: + $c[]=$x-$dx;$c[]=$y-$dy; + $c[]=$x+$dx;$c[]=$y-$dy; + $c[]=$x+$dx;$c[]=$y+$dy; + $c[]=$x-$dx;$c[]=$y+$dy; + $c[]=$x-$dx;$c[]=$y-$dy; + $pts=5; + break; + case MARK_UTRIANGLE: + ++$dx;++$dy; + $c[]=$x-$dx;$c[]=$y+0.87*$dy; // tan(60)/2*$dx + $c[]=$x;$c[]=$y-0.87*$dy; + $c[]=$x+$dx;$c[]=$y+0.87*$dy; + $c[]=$x-$dx;$c[]=$y+0.87*$dy; // tan(60)/2*$dx + $pts=4; + break; + case MARK_DTRIANGLE: + ++$dx;++$dy; + $c[]=$x;$c[]=$y+0.87*$dy; // tan(60)/2*$dx + $c[]=$x-$dx;$c[]=$y-0.87*$dy; + $c[]=$x+$dx;$c[]=$y-0.87*$dy; + $c[]=$x;$c[]=$y+0.87*$dy; // tan(60)/2*$dx + $pts=4; + break; + case MARK_DIAMOND: + $c[]=$x;$c[]=$y+$dy; + $c[]=$x-$dx;$c[]=$y; + $c[]=$x;$c[]=$y-$dy; + $c[]=$x+$dx;$c[]=$y; + $c[]=$x;$c[]=$y+$dy; + $pts=5; + break; + case MARK_LEFTTRIANGLE: + $c[]=$x;$c[]=$y; + $c[]=$x;$c[]=$y+2*$dy; + $c[]=$x+$dx*2;$c[]=$y; + $c[]=$x;$c[]=$y; + $pts=4; + break; + case MARK_RIGHTTRIANGLE: + $c[]=$x-$dx*2;$c[]=$y; + $c[]=$x;$c[]=$y+2*$dy; + $c[]=$x;$c[]=$y; + $c[]=$x-$dx*2;$c[]=$y; + $pts=4; + break; + case MARK_FLASH: + $dy *= 2; + $c[]=$x+$dx/2; $c[]=$y-$dy; + $c[]=$x-$dx+$dx/2; $c[]=$y+$dy*0.7-$dy; + $c[]=$x+$dx/2; $c[]=$y+$dy*1.3-$dy; + $c[]=$x-$dx+$dx/2; $c[]=$y+2*$dy-$dy; + $img->SetLineWeight($weight); + $img->SetColor($color); + $img->Polygon($c); + $img->SetLineWeight(1); + $this->AddCSIMPoly($c); + break; + } + + if( $pts>0 ) { + $this->AddCSIMPoly($c); + $img->SetLineWeight($weight); + $img->SetColor($fcolor); + $img->FilledPolygon($c); + $img->SetColor($color); + $img->Polygon($c); + $img->SetLineWeight(1); + } + elseif( $this->type==MARK_CIRCLE ) { + $img->SetColor($color); + $img->Circle($x,$y,$width); + $this->AddCSIMCircle($x,$y,$width); + } + elseif( $this->type==MARK_FILLEDCIRCLE ) { + $img->SetColor($fcolor); + $img->FilledCircle($x,$y,$width); + $img->SetColor($color); + $img->Circle($x,$y,$width); + $this->AddCSIMCircle($x,$y,$width); + } + elseif( $this->type==MARK_CROSS ) { + // Oversize by a pixel to match the X + $img->SetColor($color); + $img->SetLineWeight($weight); + $img->Line($x,$y+$dy+1,$x,$y-$dy-1); + $img->Line($x-$dx-1,$y,$x+$dx+1,$y); + $this->AddCSIMCircle($x,$y,$dx); + } + elseif( $this->type==MARK_X ) { + $img->SetColor($color); + $img->SetLineWeight($weight); + $img->Line($x+$dx,$y+$dy,$x-$dx,$y-$dy); + $img->Line($x-$dx,$y+$dy,$x+$dx,$y-$dy); + $this->AddCSIMCircle($x,$y,$dx+$dy); + } + elseif( $this->type==MARK_STAR ) { + $img->SetColor($color); + $img->SetLineWeight($weight); + $img->Line($x+$dx,$y+$dy,$x-$dx,$y-$dy); + $img->Line($x-$dx,$y+$dy,$x+$dx,$y-$dy); + // Oversize by a pixel to match the X + $img->Line($x,$y+$dy+1,$x,$y-$dy-1); + $img->Line($x-$dx-1,$y,$x+$dx+1,$y); + $this->AddCSIMCircle($x,$y,$dx+$dy); + } + + // Stroke title + $this->title->Align("center","center"); + $this->title->Stroke($img,$x,$y); + } +} // Class + + + +//======================================================================== +// CLASS ImgData +// Description: Base class for all image data classes that contains the +// real image data. +//======================================================================== +class ImgData { + protected $name = ''; // Each subclass gives a name + protected $an = array(); // Data array names + protected $colors = array(); // Available colors + protected $index = array(); // Index for colors + protected $maxidx = 0 ; // Max color index + protected $anchor_x=0.5, $anchor_y=0.5 ; // Where is the center of the image + + function __construct() { + // Empty + } + + // Create a GD image from the data and return a GD handle + function GetImg($aMark,$aIdx) { + $n = $this->an[$aMark]; + if( is_string($aIdx) ) { + if( !in_array($aIdx,$this->colors) ) { + JpGraphError::RaiseL(23001,$this->name,$aIdx);//('This marker "'.($this->name).'" does not exist in color: '.$aIdx); + } + $idx = $this->index[$aIdx]; + } + elseif( !is_integer($aIdx) || + (is_integer($aIdx) && $aIdx > $this->maxidx ) ) { + JpGraphError::RaiseL(23002,$this->name);//('Mark color index too large for marker "'.($this->name).'"'); + } + else + $idx = $aIdx ; + return Image::CreateFromString(base64_decode($this->{$n}[$idx][1])); + } + + function GetAnchor() { + return array($this->anchor_x,$this->anchor_y); + } +} + + +// Keep a global flag cache to reduce memory usage +$_gFlagCache=array( +1 => null, +2 => null, +3 => null, +4 => null, +); +// Only supposed to b called as statics +class FlagCache { + + static function GetFlagImgByName($aSize,$aName) { + global $_gFlagCache; + require_once('jpgraph_flags.php'); + if( $_gFlagCache[$aSize] === null ) { + $_gFlagCache[$aSize] = new FlagImages($aSize); + } + $f = $_gFlagCache[$aSize]; + $idx = $f->GetIdxByName($aName,$aFullName); + return $f->GetImgByIdx($idx); + } +} + +?> diff --git a/Societes/ric/jpgraph/jpgraph_polar.php b/Societes/ric/jpgraph/jpgraph_polar.php new file mode 100755 index 00000000..df73828c --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_polar.php @@ -0,0 +1,899 @@ +numpoints = $n/2; + $this->coord = $aData; + $this->mark = new PlotMark(); + } + + function SetWeight($aWeight) { + $this->iLineWeight = $aWeight; + } + + function SetColor($aColor){ + $this->iColor = $aColor; + } + + function SetFillColor($aColor){ + $this->iFillColor = $aColor; + } + + function Max() { + $m = $this->coord[1]; + $i=1; + while( $i < $this->numpoints ) { + $m = max($m,$this->coord[2*$i+1]); + ++$i; + } + return $m; + } + // Set href targets for CSIM + function SetCSIMTargets($aTargets,$aAlts=null) { + $this->csimtargets=$aTargets; + $this->csimalts=$aAlts; + } + + // Get all created areas + function GetCSIMareas() { + return $this->csimareas; + } + + function SetLegend($aLegend,$aCSIM="",$aCSIMAlt="") { + $this->legend = $aLegend; + $this->legendcsimtarget = $aCSIM; + $this->legendcsimalt = $aCSIMAlt; + } + + // Private methods + + function Legend($aGraph) { + $color = $this->iColor ; + if( $this->legend != "" ) { + if( $this->iFillColor!='' ) { + $color = $this->iFillColor; + $aGraph->legend->Add($this->legend,$color,$this->mark,0, + $this->legendcsimtarget,$this->legendcsimalt); + } + else { + $aGraph->legend->Add($this->legend,$color,$this->mark,$this->line_style, + $this->legendcsimtarget,$this->legendcsimalt); + } + } + } + + function Stroke($img,$scale) { + + $i=0; + $p=array(); + $this->csimareas=''; + while($i < $this->numpoints) { + list($x1,$y1) = $scale->PTranslate($this->coord[2*$i],$this->coord[2*$i+1]); + $p[2*$i] = $x1; + $p[2*$i+1] = $y1; + + if( isset($this->csimtargets[$i]) ) { + $this->mark->SetCSIMTarget($this->csimtargets[$i]); + $this->mark->SetCSIMAlt($this->csimalts[$i]); + $this->mark->SetCSIMAltVal($this->coord[2*$i], $this->coord[2*$i+1]); + $this->mark->Stroke($img,$x1,$y1); + $this->csimareas .= $this->mark->GetCSIMAreas(); + } + else { + $this->mark->Stroke($img,$x1,$y1); + } + + ++$i; + } + + if( $this->iFillColor != '' ) { + $img->SetColor($this->iFillColor); + $img->FilledPolygon($p); + } + $img->SetLineWeight($this->iLineWeight); + $img->SetColor($this->iColor); + $img->Polygon($p,$this->iFillColor!=''); + } +} + +//-------------------------------------------------------------------------- +// class PolarAxis +//-------------------------------------------------------------------------- +class PolarAxis extends Axis { + private $angle_step=15,$angle_color='lightgray',$angle_label_color='black'; + private $angle_fontfam=FF_FONT1,$angle_fontstyle=FS_NORMAL,$angle_fontsize=10; + private $angle_fontcolor = 'navy'; + private $gridminor_color='lightgray',$gridmajor_color='lightgray'; + private $show_minor_grid = false, $show_major_grid = true ; + private $show_angle_mark=true, $show_angle_grid=true, $show_angle_label=true; + private $angle_tick_len=3, $angle_tick_len2=3, $angle_tick_color='black'; + private $show_angle_tick=true; + private $radius_tick_color='black'; + + function __construct($img,$aScale) { + parent::__construct($img,$aScale); + } + + function ShowAngleDegreeMark($aFlg=true) { + $this->show_angle_mark = $aFlg; + } + + function SetAngleStep($aStep) { + $this->angle_step=$aStep; + } + + function HideTicks($aFlg=true,$aAngleFlg=true) { + parent::HideTicks($aFlg,$aFlg); + $this->show_angle_tick = !$aAngleFlg; + } + + function ShowAngleLabel($aFlg=true) { + $this->show_angle_label = $aFlg; + } + + function ShowGrid($aMajor=true,$aMinor=false,$aAngle=true) { + $this->show_minor_grid = $aMinor; + $this->show_major_grid = $aMajor; + $this->show_angle_grid = $aAngle ; + } + + function SetAngleFont($aFontFam,$aFontStyle=FS_NORMAL,$aFontSize=10) { + $this->angle_fontfam = $aFontFam; + $this->angle_fontstyle = $aFontStyle; + $this->angle_fontsize = $aFontSize; + } + + function SetColor($aColor,$aRadColor='',$aAngleColor='') { + if( $aAngleColor == '' ) + $aAngleColor=$aColor; + parent::SetColor($aColor,$aRadColor); + $this->angle_fontcolor = $aAngleColor; + } + + function SetGridColor($aMajorColor,$aMinorColor='',$aAngleColor='') { + if( $aMinorColor == '' ) + $aMinorColor = $aMajorColor; + if( $aAngleColor == '' ) + $aAngleColor = $aMajorColor; + + $this->gridminor_color = $aMinorColor; + $this->gridmajor_color = $aMajorColor; + $this->angle_color = $aAngleColor; + } + + function SetTickColors($aRadColor,$aAngleColor='') { + $this->radius_tick_color = $aRadColor; + $this->angle_tick_color = $aAngleColor; + } + + // Private methods + function StrokeGrid($pos) { + $x = round($this->img->left_margin + $this->img->plotwidth/2); + $this->scale->ticks->Stroke($this->img,$this->scale,$pos); + + // Stroke the minor arcs + $pmin = array(); + $p = $this->scale->ticks->ticks_pos; + $n = count($p); + $i = 0; + $this->img->SetColor($this->gridminor_color); + while( $i < $n ) { + $r = $p[$i]-$x+1; + $pmin[]=$r; + if( $this->show_minor_grid ) { + $this->img->Circle($x,$pos,$r); + } + $i++; + } + + $limit = max($this->img->plotwidth,$this->img->plotheight)*1.4 ; + while( $r < $limit ) { + $off = $r; + $i=1; + $r = $off + round($p[$i]-$x+1); + while( $r < $limit && $i < $n ) { + $r = $off+$p[$i]-$x; + $pmin[]=$r; + if( $this->show_minor_grid ) { + $this->img->Circle($x,$pos,$r); + } + $i++; + } + } + + // Stroke the major arcs + if( $this->show_major_grid ) { + // First determine how many minor step on + // every major step. We have recorded the minor radius + // in pmin and use these values. This is done in order + // to avoid rounding errors if we were to recalculate the + // different major radius. + $pmaj = $this->scale->ticks->maj_ticks_pos; + $p = $this->scale->ticks->ticks_pos; + if( $this->scale->name == 'lin' ) { + $step=round(($pmaj[1] - $pmaj[0])/($p[1] - $p[0])); + } + else { + $step=9; + } + $n = round(count($pmin)/$step); + $i = 0; + $this->img->SetColor($this->gridmajor_color); + $limit = max($this->img->plotwidth,$this->img->plotheight)*1.4 ; + $off = $r; + $i=0; + $r = $pmin[$i*$step]; + while( $r < $limit && $i < $n ) { + $r = $pmin[$i*$step]; + $this->img->Circle($x,$pos,$r); + $i++; + } + } + + // Draw angles + if( $this->show_angle_grid ) { + $this->img->SetColor($this->angle_color); + $d = max($this->img->plotheight,$this->img->plotwidth)*1.4 ; + $a = 0; + $p = $this->scale->ticks->ticks_pos; + $start_radius = $p[1]-$x; + while( $a < 360 ) { + if( $a == 90 || $a == 270 ) { + // Make sure there are no rounding problem with + // exactly vertical lines + $this->img->Line($x+$start_radius*cos($a/180*M_PI)+1, + $pos-$start_radius*sin($a/180*M_PI), + $x+$start_radius*cos($a/180*M_PI)+1, + $pos-$d*sin($a/180*M_PI)); + + } + else { + $this->img->Line($x+$start_radius*cos($a/180*M_PI)+1, + $pos-$start_radius*sin($a/180*M_PI), + $x+$d*cos($a/180*M_PI), + $pos-$d*sin($a/180*M_PI)); + } + $a += $this->angle_step; + } + } + } + + function StrokeAngleLabels($pos,$type) { + + if( !$this->show_angle_label ) + return; + + $x0 = round($this->img->left_margin+$this->img->plotwidth/2)+1; + + $d = max($this->img->plotwidth,$this->img->plotheight)*1.42; + $a = $this->angle_step; + $t = new Text(); + $t->SetColor($this->angle_fontcolor); + $t->SetFont($this->angle_fontfam,$this->angle_fontstyle,$this->angle_fontsize); + $xright = $this->img->width - $this->img->right_margin; + $ytop = $this->img->top_margin; + $xleft = $this->img->left_margin; + $ybottom = $this->img->height - $this->img->bottom_margin; + $ha = 'left'; + $va = 'center'; + $w = $this->img->plotwidth/2; + $h = $this->img->plotheight/2; + $xt = $x0; $yt = $pos; + $margin=5; + + $tl = $this->angle_tick_len ; // Outer len + $tl2 = $this->angle_tick_len2 ; // Interior len + + $this->img->SetColor($this->angle_tick_color); + $rot90 = $this->img->a == 90 ; + + if( $type == POLAR_360 ) { + + // Corner angles of the four corners + $ca1 = atan($h/$w)/M_PI*180; + $ca2 = 180-$ca1; + $ca3 = $ca1+180; + $ca4 = 360-$ca1; + $end = 360; + + while( $a < $end ) { + $ca = cos($a/180*M_PI); + $sa = sin($a/180*M_PI); + $x = $d*$ca; + $y = $d*$sa; + $xt=1000;$yt=1000; + if( $a <= $ca1 || $a >= $ca4 ) { + $yt = $pos - $w * $y/$x; + $xt = $xright + $margin; + if( $rot90 ) { + $ha = 'center'; + $va = 'top'; + } + else { + $ha = 'left'; + $va = 'center'; + } + $x1=$xright-$tl2; $x2=$xright+$tl; + $y1=$y2=$yt; + } + elseif( $a > $ca1 && $a < $ca2 ) { + $xt = $x0 + $h * $x/$y; + $yt = $ytop - $margin; + if( $rot90 ) { + $ha = 'left'; + $va = 'center'; + } + else { + $ha = 'center'; + $va = 'bottom'; + } + $y1=$ytop+$tl2;$y2=$ytop-$tl; + $x1=$x2=$xt; + } + elseif( $a >= $ca2 && $a <= $ca3 ) { + $yt = $pos + $w * $y/$x; + $xt = $xleft - $margin; + if( $rot90 ) { + $ha = 'center'; + $va = 'bottom'; + } + else { + $ha = 'right'; + $va = 'center'; + } + $x1=$xleft+$tl2;$x2=$xleft-$tl; + $y1=$y2=$yt; + } + else { + $xt = $x0 - $h * $x/$y; + $yt = $ybottom + $margin; + if( $rot90 ) { + $ha = 'right'; + $va = 'center'; + } + else { + $ha = 'center'; + $va = 'top'; + } + $y1=$ybottom-$tl2;$y2=$ybottom+$tl; + $x1=$x2=$xt; + } + if( $a != 0 && $a != 180 ) { + $t->Align($ha,$va); + if( $this->scale->clockwise ) { + $t->Set(360-$a); + } + else { + $t->Set($a); + } + if( $this->show_angle_mark && $t->font_family > 4 ) { + $a .= SymChar::Get('degree'); + } + $t->Stroke($this->img,$xt,$yt); + if( $this->show_angle_tick ) { + $this->img->Line($x1,$y1,$x2,$y2); + } + } + $a = (int) $a; + $a += $this->angle_step; + } + } + else { + // POLAR_HALF + $ca1 = atan($h/$w*2)/M_PI*180; + $ca2 = 180-$ca1; + $end = 180; + while( $a < $end ) { + $ca = cos($a/180*M_PI); + $sa = sin($a/180*M_PI); + $x = $d*$ca; + $y = $d*$sa; + if( $a <= $ca1 ) { + $yt = $pos - $w * $y/$x; + $xt = $xright + $margin; + if( $rot90 ) { + $ha = 'center'; + $va = 'top'; + } + else { + $ha = 'left'; + $va = 'center'; + } + $x1=$xright-$tl2; $x2=$xright+$tl; + $y1=$y2=$yt; + } + elseif( $a > $ca1 && $a < $ca2 ) { + $xt = $x0 + 2*$h * $x/$y; + $yt = $ytop - $margin; + if( $rot90 ) { + $ha = 'left'; + $va = 'center'; + } + else { + $ha = 'center'; + $va = 'bottom'; + } + $y1=$ytop+$tl2;$y2=$ytop-$tl; + $x1=$x2=$xt; + } + elseif( $a >= $ca2 ) { + $yt = $pos + $w * $y/$x; + $xt = $xleft - $margin; + if( $rot90 ) { + $ha = 'center'; + $va = 'bottom'; + } + else { + $ha = 'right'; + $va = 'center'; + } + $x1=$xleft+$tl2;$x2=$xleft-$tl; + $y1=$y2=$yt; + } + $t->Align($ha,$va); + if( $this->show_angle_mark && $t->font_family > 4 ) { + $a .= SymChar::Get('degree'); + } + $t->Set($a); + $t->Stroke($this->img,$xt,$yt); + if( $this->show_angle_tick ) { + $this->img->Line($x1,$y1,$x2,$y2); + } + $a = (int) $a; + $a += $this->angle_step; + } + } + } + + function Stroke($pos,$dummy=true) { + + $this->img->SetLineWeight($this->weight); + $this->img->SetColor($this->color); + $this->img->SetFont($this->font_family,$this->font_style,$this->font_size); + if( !$this->hide_line ) { + $this->img->FilledRectangle($this->img->left_margin,$pos, + $this->img->width-$this->img->right_margin, + $pos+$this->weight-1); + } + $y=$pos+$this->img->GetFontHeight()+$this->title_margin+$this->title->margin; + if( $this->title_adjust=="high" ) { + $this->title->SetPos($this->img->width-$this->img->right_margin,$y,"right","top"); + } + elseif( $this->title_adjust=="middle" || $this->title_adjust=="center" ) { + $this->title->SetPos(($this->img->width-$this->img->left_margin-$this->img->right_margin)/2+$this->img->left_margin, + $y,"center","top"); + } + elseif($this->title_adjust=="low") { + $this->title->SetPos($this->img->left_margin,$y,"left","top"); + } + else { + JpGraphError::RaiseL(17002,$this->title_adjust); + //('Unknown alignment specified for X-axis title. ('.$this->title_adjust.')'); + } + + + if (!$this->hide_labels) { + $this->StrokeLabels($pos,false); + } + $this->img->SetColor($this->radius_tick_color); + $this->scale->ticks->Stroke($this->img,$this->scale,$pos); + + // + // Mirror the positions for the left side of the scale + // + $mid = 2*($this->img->left_margin+$this->img->plotwidth/2); + $n = count($this->scale->ticks->ticks_pos); + $i=0; + while( $i < $n ) { + $this->scale->ticks->ticks_pos[$i] = + $mid-$this->scale->ticks->ticks_pos[$i] ; + ++$i; + } + + $n = count($this->scale->ticks->maj_ticks_pos); + $i=0; + while( $i < $n ) { + $this->scale->ticks->maj_ticks_pos[$i] = + $mid-$this->scale->ticks->maj_ticks_pos[$i] ; + ++$i; + } + + $n = count($this->scale->ticks->maj_ticklabels_pos); + $i=1; + while( $i < $n ) { + $this->scale->ticks->maj_ticklabels_pos[$i] = + $mid-$this->scale->ticks->maj_ticklabels_pos[$i] ; + ++$i; + } + + // Draw the left side of the scale + $n = count($this->scale->ticks->ticks_pos); + $yu = $pos - $this->scale->ticks->direction*$this->scale->ticks->GetMinTickAbsSize(); + + + // Minor ticks + if( ! $this->scale->ticks->supress_minor_tickmarks ) { + $i=1; + while( $i < $n/2 ) { + $x = round($this->scale->ticks->ticks_pos[$i]) ; + $this->img->Line($x,$pos,$x,$yu); + ++$i; + } + } + + $n = count($this->scale->ticks->maj_ticks_pos); + $yu = $pos - $this->scale->ticks->direction*$this->scale->ticks->GetMajTickAbsSize(); + + + // Major ticks + if( ! $this->scale->ticks->supress_tickmarks ) { + $i=1; + while( $i < $n/2 ) { + $x = round($this->scale->ticks->maj_ticks_pos[$i]) ; + $this->img->Line($x,$pos,$x,$yu); + ++$i; + } + } + if (!$this->hide_labels) { + $this->StrokeLabels($pos,false); + } + $this->title->Stroke($this->img); + } +} + +class PolarScale extends LinearScale { + private $graph; + public $clockwise=false; + + function __construct($aMax,$graph,$aClockwise) { + parent::__construct(0,$aMax,'x'); + $this->graph = $graph; + $this->clockwise = $aClockwise; + } + + function SetClockwise($aFlg) { + $this->clockwise = $aFlg; + } + + function _Translate($v) { + return parent::Translate($v); + } + + function PTranslate($aAngle,$aRad) { + + $m = $this->scale[1]; + $w = $this->graph->img->plotwidth/2; + $aRad = $aRad/$m*$w; + + $a = $aAngle/180 * M_PI; + if( $this->clockwise ) { + $a = 2*M_PI-$a; + } + + $x = cos($a) * $aRad; + $y = sin($a) * $aRad; + + $x += $this->_Translate(0); + + if( $this->graph->iType == POLAR_360 ) { + $y = ($this->graph->img->top_margin + $this->graph->img->plotheight/2) - $y; + } + else { + $y = ($this->graph->img->top_margin + $this->graph->img->plotheight) - $y; + } + return array($x,$y); + } +} + +class PolarLogScale extends LogScale { + private $graph; + public $clockwise=false; + + function __construct($aMax,$graph,$aClockwise=false) { + parent::__construct(0,$aMax,'x'); + $this->graph = $graph; + $this->ticks->SetLabelLogType(LOGLABELS_MAGNITUDE); + $this->clockwise = $aClockwise; + + } + + function SetClockwise($aFlg) { + $this->clockwise = $aFlg; + } + + function PTranslate($aAngle,$aRad) { + + if( $aRad == 0 ) + $aRad = 1; + $aRad = log10($aRad); + $m = $this->scale[1]; + $w = $this->graph->img->plotwidth/2; + $aRad = $aRad/$m*$w; + + $a = $aAngle/180 * M_PI; + if( $this->clockwise ) { + $a = 2*M_PI-$a; + } + + $x = cos( $a ) * $aRad; + $y = sin( $a ) * $aRad; + + $x += $w+$this->graph->img->left_margin;//$this->_Translate(0); + if( $this->graph->iType == POLAR_360 ) { + $y = ($this->graph->img->top_margin + $this->graph->img->plotheight/2) - $y; + } + else { + $y = ($this->graph->img->top_margin + $this->graph->img->plotheight) - $y; + } + return array($x,$y); + } +} + +class PolarGraph extends Graph { + public $scale; + public $axis; + public $iType=POLAR_360; + private $iClockwise=false; + + function __construct($aWidth=300,$aHeight=200,$aCachedName="",$aTimeOut=0,$aInline=true) { + parent::__construct($aWidth,$aHeight,$aCachedName,$aTimeOut,$aInline) ; + $this->SetDensity(TICKD_DENSE); + $this->SetBox(); + $this->SetMarginColor('white'); + } + + function SetDensity($aDense) { + $this->SetTickDensity(TICKD_NORMAL,$aDense); + } + + function SetClockwise($aFlg) { + $this->scale->SetClockwise($aFlg); + } + + function Set90AndMargin($lm=0,$rm=0,$tm=0,$bm=0) { + $adj = ($this->img->height - $this->img->width)/2; + $this->SetAngle(90); + $lm2 = -$adj + ($lm-$rm+$tm+$bm)/2; + $rm2 = -$adj + (-$lm+$rm+$tm+$bm)/2; + $tm2 = $adj + ($tm-$bm+$lm+$rm)/2; + $bm2 = $adj + (-$tm+$bm+$lm+$rm)/2; + $this->SetMargin($lm2, $rm2, $tm2, $bm2); + $this->axis->SetLabelAlign('right','center'); + } + + function SetScale($aScale,$rmax=0,$dummy1=1,$dummy2=1,$dummy3=1) { + if( $aScale == 'lin' ) { + $this->scale = new PolarScale($rmax,$this,$this->iClockwise); + } + elseif( $aScale == 'log' ) { + $this->scale = new PolarLogScale($rmax,$this,$this->iClockwise); + } + else { + JpGraphError::RaiseL(17004);//('Unknown scale type for polar graph. Must be "lin" or "log"'); + } + + $this->axis = new PolarAxis($this->img,$this->scale); + $this->SetMargin(40,40,50,40); + } + + function SetType($aType) { + $this->iType = $aType; + } + + function SetPlotSize($w,$h) { + $this->SetMargin(($this->img->width-$w)/2,($this->img->width-$w)/2, + ($this->img->height-$h)/2,($this->img->height-$h)/2); + } + + // Private methods + function GetPlotsMax() { + $n = count($this->plots); + $m = $this->plots[0]->Max(); + $i=1; + while($i < $n) { + $m = max($this->plots[$i]->Max(),$m); + ++$i; + } + return $m; + } + + function Stroke($aStrokeFileName="") { + + // Start by adjusting the margin so that potential titles will fit. + $this->AdjustMarginsForTitles(); + + // If the filename is the predefined value = '_csim_special_' + // we assume that the call to stroke only needs to do enough + // to correctly generate the CSIM maps. + // We use this variable to skip things we don't strictly need + // to do to generate the image map to improve performance + // a best we can. Therefor you will see a lot of tests !$_csim in the + // code below. + $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); + + // We need to know if we have stroked the plot in the + // GetCSIMareas. Otherwise the CSIM hasn't been generated + // and in the case of GetCSIM called before stroke to generate + // CSIM without storing an image to disk GetCSIM must call Stroke. + $this->iHasStroked = true; + + //Check if we should autoscale axis + if( !$this->scale->IsSpecified() && count($this->plots)>0 ) { + $max = $this->GetPlotsMax(); + $t1 = $this->img->plotwidth; + $this->img->plotwidth /= 2; + $t2 = $this->img->left_margin; + $this->img->left_margin += $this->img->plotwidth+1; + $this->scale->AutoScale($this->img,0,$max, + $this->img->plotwidth/$this->xtick_factor/2); + $this->img->plotwidth = $t1; + $this->img->left_margin = $t2; + } + else { + // The tick calculation will use the user suplied min/max values to determine + // the ticks. If auto_ticks is false the exact user specifed min and max + // values will be used for the scale. + // If auto_ticks is true then the scale might be slightly adjusted + // so that the min and max values falls on an even major step. + //$min = 0; + $max = $this->scale->scale[1]; + $t1 = $this->img->plotwidth; + $this->img->plotwidth /= 2; + $t2 = $this->img->left_margin; + $this->img->left_margin += $this->img->plotwidth+1; + $this->scale->AutoScale($this->img,0,$max, + $this->img->plotwidth/$this->xtick_factor/2); + $this->img->plotwidth = $t1; + $this->img->left_margin = $t2; + } + + if( $this->iType == POLAR_180 ) { + $pos = $this->img->height - $this->img->bottom_margin; + } + else { + $pos = $this->img->plotheight/2 + $this->img->top_margin; + } + + if( !$_csim ) { + $this->StrokePlotArea(); + } + + $this->iDoClipping = true; + + if( $this->iDoClipping ) { + $oldimage = $this->img->CloneCanvasH(); + } + + if( !$_csim ) { + $this->axis->StrokeGrid($pos); + } + + // Stroke all plots for Y1 axis + for($i=0; $i < count($this->plots); ++$i) { + $this->plots[$i]->Stroke($this->img,$this->scale); + } + + + if( $this->iDoClipping ) { + // Clipping only supports graphs at 0 and 90 degrees + if( $this->img->a == 0 ) { + $this->img->CopyCanvasH($oldimage,$this->img->img, + $this->img->left_margin,$this->img->top_margin, + $this->img->left_margin,$this->img->top_margin, + $this->img->plotwidth+1,$this->img->plotheight+1); + } + elseif( $this->img->a == 90 ) { + $adj1 = round(($this->img->height - $this->img->width)/2); + $adj2 = round(($this->img->width - $this->img->height)/2); + $lm = $this->img->left_margin; + $rm = $this->img->right_margin; + $tm = $this->img->top_margin; + $bm = $this->img->bottom_margin; + $this->img->CopyCanvasH($oldimage,$this->img->img, + $adj2 + round(($lm-$rm+$tm+$bm)/2), + $adj1 + round(($tm-$bm+$lm+$rm)/2), + $adj2 + round(($lm-$rm+$tm+$bm)/2), + $adj1 + round(($tm-$bm+$lm+$rm)/2), + $this->img->plotheight+1, + $this->img->plotwidth+1); + } + $this->img->Destroy(); + $this->img->SetCanvasH($oldimage); + } + + if( !$_csim ) { + $this->axis->Stroke($pos); + $this->axis->StrokeAngleLabels($pos,$this->iType); + } + + if( !$_csim ) { + $this->StrokePlotBox(); + $this->footer->Stroke($this->img); + + // The titles and legends never gets rotated so make sure + // that the angle is 0 before stroking them + $aa = $this->img->SetAngle(0); + $this->StrokeTitles(); + } + + for($i=0; $i < count($this->plots) ; ++$i ) { + $this->plots[$i]->Legend($this); + } + + $this->legend->Stroke($this->img); + + if( !$_csim ) { + + $this->StrokeTexts(); + $this->img->SetAngle($aa); + + // Draw an outline around the image map + if(_JPG_DEBUG) + $this->DisplayClientSideaImageMapAreas(); + + // If the filename is given as the special "__handle" + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline,$aStrokeFileName); + } + } + } +} + + + +?> diff --git a/Societes/ric/jpgraph/jpgraph_radar.php b/Societes/ric/jpgraph/jpgraph_radar.php new file mode 100755 index 00000000..1d3de628 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_radar.php @@ -0,0 +1,861 @@ +GetMinVal(); + $limit = $aScale->GetMaxVal(); + $nextMajor = 10*$start; + $step = $nextMajor / 10.0; + $count=1; + + $ticklen_maj=5; + $dx_maj=round(sin($aAxisAngle)*$ticklen_maj); + $dy_maj=round(cos($aAxisAngle)*$ticklen_maj); + $ticklen_min=3; + $dx_min=round(sin($aAxisAngle)*$ticklen_min); + $dy_min=round(cos($aAxisAngle)*$ticklen_min); + + $aMajPos=array(); + $aMajLabel=array(); + + if( $this->supress_first ) { + $aMajLabel[] = ''; + } + else { + $aMajLabel[]=$start; + } + + $yr=$aScale->RelTranslate($start); + $xt=round($yr*cos($aAxisAngle))+$aScale->scale_abs[0]; + $yt=$aPos-round($yr*sin($aAxisAngle)); + $aMajPos[]=$xt+2*$dx_maj; + $aMajPos[]=$yt-$aImg->GetFontheight()/2; + $grid[]=$xt; + $grid[]=$yt; + + $aImg->SetLineWeight($this->weight); + + for($y=$start; $y<=$limit; $y+=$step,++$count ) { + $yr=$aScale->RelTranslate($y); + $xt=round($yr*cos($aAxisAngle))+$aScale->scale_abs[0]; + $yt=$aPos-round($yr*sin($aAxisAngle)); + if( $count % 10 == 0 ) { + $grid[]=$xt; + $grid[]=$yt; + $aMajPos[]=$xt+2*$dx_maj; + $aMajPos[]=$yt-$aImg->GetFontheight()/2; + if( !$this->supress_tickmarks ) { + if( $this->majcolor != '' ) { + $aImg->PushColor($this->majcolor); + } + $aImg->Line($xt+$dx_maj,$yt+$dy_maj,$xt-$dx_maj,$yt-$dy_maj); + if( $this->majcolor != '' ) { + $aImg->PopColor(); + } + } + if( $this->label_formfunc != '' ) { + $f=$this->label_formfunc; + $l = call_user_func($f,$nextMajor); + } + else { + $l = $nextMajor; + } + + $aMajLabel[]=$l; + $nextMajor *= 10; + $step *= 10; + $count=1; + } + else { + if( !$this->supress_minor_tickmarks ) { + if( $this->mincolor != '' ) { + $aImg->PushColor($this->mincolor); + } + $aImg->Line($xt+$dx_min,$yt+$dy_min,$xt-$dx_min,$yt-$dy_min); + if( $this->mincolor != '' ) { + $aImg->PopColor(); + } + } + } + } + } +} + +//=================================================== +// CLASS RadarLinear +// Description: Linear ticks +//=================================================== +class RadarLinearTicks extends Ticks { + + private $minor_step=1, $major_step=2; + private $xlabel_offset=0,$xtick_offset=0; + + function __construct() { + // Empty + } + + // Return major step size in world coordinates + function GetMajor() { + return $this->major_step; + } + + // Return minor step size in world coordinates + function GetMinor() { + return $this->minor_step; + } + + // Set Minor and Major ticks (in world coordinates) + function Set($aMajStep,$aMinStep=false) { + if( $aMinStep==false ) { + $aMinStep=$aMajStep; + } + + if( $aMajStep <= 0 || $aMinStep <= 0 ) { + JpGraphError::RaiseL(25064); + //JpGraphError::Raise(" Minor or major step size is 0. Check that you haven't got an accidental SetTextTicks(0) in your code. If this is not the case you might have stumbled upon a bug in JpGraph. Please report this and if possible include the data that caused the problem."); + } + + $this->major_step=$aMajStep; + $this->minor_step=$aMinStep; + $this->is_set = true; + } + + function Stroke($aImg,&$grid,$aPos,$aAxisAngle,$aScale,&$aMajPos,&$aMajLabel) { + // Prepare to draw linear ticks + $maj_step_abs = abs($aScale->scale_factor*$this->major_step); + $min_step_abs = abs($aScale->scale_factor*$this->minor_step); + $nbrmaj = round($aScale->world_abs_size/$maj_step_abs); + $nbrmin = round($aScale->world_abs_size/$min_step_abs); + $skip = round($nbrmin/$nbrmaj); // Don't draw minor on top of major + + // Draw major ticks + $ticklen2=$this->major_abs_size; + $dx=round(sin($aAxisAngle)*$ticklen2); + $dy=round(cos($aAxisAngle)*$ticklen2); + $label=$aScale->scale[0]+$this->major_step; + + $aImg->SetLineWeight($this->weight); + + $aMajPos = array(); + $aMajLabel = array(); + + for($i=1; $i<=$nbrmaj; ++$i) { + $xt=round($i*$maj_step_abs*cos($aAxisAngle))+$aScale->scale_abs[0]; + $yt=$aPos-round($i*$maj_step_abs*sin($aAxisAngle)); + + if( $this->label_formfunc != '' ) { + $f=$this->label_formfunc; + $l = call_user_func($f,$label); + } + else { + $l = $label; + } + + $aMajLabel[]=$l; + $label += $this->major_step; + $grid[]=$xt; + $grid[]=$yt; + $aMajPos[($i-1)*2]=$xt+2*$dx; + $aMajPos[($i-1)*2+1]=$yt-$aImg->GetFontheight()/2; + if( !$this->supress_tickmarks ) { + if( $this->majcolor != '' ) { + $aImg->PushColor($this->majcolor); + } + $aImg->Line($xt+$dx,$yt+$dy,$xt-$dx,$yt-$dy); + if( $this->majcolor != '' ) { + $aImg->PopColor(); + } + } + } + + // Draw minor ticks + $ticklen2=$this->minor_abs_size; + $dx=round(sin($aAxisAngle)*$ticklen2); + $dy=round(cos($aAxisAngle)*$ticklen2); + if( !$this->supress_tickmarks && !$this->supress_minor_tickmarks) { + if( $this->mincolor != '' ) { + $aImg->PushColor($this->mincolor); + } + for($i=1; $i<=$nbrmin; ++$i) { + if( ($i % $skip) == 0 ) { + continue; + } + $xt=round($i*$min_step_abs*cos($aAxisAngle))+$aScale->scale_abs[0]; + $yt=$aPos-round($i*$min_step_abs*sin($aAxisAngle)); + $aImg->Line($xt+$dx,$yt+$dy,$xt-$dx,$yt-$dy); + } + if( $this->mincolor != '' ) { + $aImg->PopColor(); + } + } + } +} + + +//=================================================== +// CLASS RadarAxis +// Description: Implements axis for the radar graph +//=================================================== +class RadarAxis extends AxisPrototype { + public $title=null; + private $title_color='navy'; + private $len=0; + + function __construct($img,$aScale,$color=array(0,0,0)) { + parent::__construct($img,$aScale,$color); + $this->len = $img->plotheight; + $this->title = new Text(); + $this->title->SetFont(FF_FONT1,FS_BOLD); + $this->color = array(0,0,0); + } + + // Stroke the axis + // $pos = Vertical position of axis + // $aAxisAngle = Axis angle + // $grid = Returns an array with positions used to draw the grid + // $lf = Label flag, TRUE if the axis should have labels + function Stroke($pos,$aAxisAngle,&$grid,$title,$lf) { + $this->img->SetColor($this->color); + + // Determine end points for the axis + $x=round($this->scale->world_abs_size*cos($aAxisAngle)+$this->scale->scale_abs[0]); + $y=round($pos-$this->scale->world_abs_size*sin($aAxisAngle)); + + // Draw axis + $this->img->SetColor($this->color); + $this->img->SetLineWeight($this->weight); + if( !$this->hide ) { + $this->img->Line($this->scale->scale_abs[0],$pos,$x,$y); + } + + $this->scale->ticks->Stroke($this->img,$grid,$pos,$aAxisAngle,$this->scale,$majpos,$majlabel); + $ncolor=0; + if( isset($this->ticks_label_colors) ) { + $ncolor=count($this->ticks_label_colors); + } + + // Draw labels + if( $lf && !$this->hide ) { + $this->img->SetFont($this->font_family,$this->font_style,$this->font_size); + $this->img->SetTextAlign('left','top'); + $this->img->SetColor($this->label_color); + + // majpos contains (x,y) coordinates for labels + if( ! $this->hide_labels ) { + $n = floor(count($majpos)/2); + for($i=0; $i < $n; ++$i) { + // Set specific label color if specified + if( $ncolor > 0 ) { + $this->img->SetColor($this->ticks_label_colors[$i % $ncolor]); + } + + if( $this->ticks_label != null && isset($this->ticks_label[$i]) ) { + $this->img->StrokeText($majpos[$i*2],$majpos[$i*2+1],$this->ticks_label[$i]); + } + else { + $this->img->StrokeText($majpos[$i*2],$majpos[$i*2+1],$majlabel[$i]); + } + } + } + } + $this->_StrokeAxisTitle($pos,$aAxisAngle,$title); + } + + function _StrokeAxisTitle($pos,$aAxisAngle,$title) { + $this->title->Set($title); + $marg=6+$this->title->margin; + $xt=round(($this->scale->world_abs_size+$marg)*cos($aAxisAngle)+$this->scale->scale_abs[0]); + $yt=round($pos-($this->scale->world_abs_size+$marg)*sin($aAxisAngle)); + + // Position the axis title. + // dx, dy is the offset from the top left corner of the bounding box that sorrounds the text + // that intersects with the extension of the corresponding axis. The code looks a little + // bit messy but this is really the only way of having a reasonable position of the + // axis titles. + if( $this->title->iWordwrap > 0 ) { + $title = wordwrap($title,$this->title->iWordwrap,"\n"); + } + + $h=$this->img->GetTextHeight($title)*1.2; + $w=$this->img->GetTextWidth($title)*1.2; + + while( $aAxisAngle > 2*M_PI ) + $aAxisAngle -= 2*M_PI; + + // Around 3 a'clock + if( $aAxisAngle>=7*M_PI/4 || $aAxisAngle <= M_PI/4 ) $dx=-0.15; // Small trimming to make the dist to the axis more even + + // Around 12 a'clock + if( $aAxisAngle>=M_PI/4 && $aAxisAngle <= 3*M_PI/4 ) $dx=($aAxisAngle-M_PI/4)*2/M_PI; + + // Around 9 a'clock + if( $aAxisAngle>=3*M_PI/4 && $aAxisAngle <= 5*M_PI/4 ) $dx=1; + + // Around 6 a'clock + if( $aAxisAngle>=5*M_PI/4 && $aAxisAngle <= 7*M_PI/4 ) $dx=(1-($aAxisAngle-M_PI*5/4)*2/M_PI); + + if( $aAxisAngle>=7*M_PI/4 ) $dy=(($aAxisAngle-M_PI)-3*M_PI/4)*2/M_PI; + if( $aAxisAngle<=M_PI/12 ) $dy=(0.5-$aAxisAngle*2/M_PI); + if( $aAxisAngle<=M_PI/4 && $aAxisAngle > M_PI/12) $dy=(1-$aAxisAngle*2/M_PI); + if( $aAxisAngle>=M_PI/4 && $aAxisAngle <= 3*M_PI/4 ) $dy=1; + if( $aAxisAngle>=3*M_PI/4 && $aAxisAngle <= 5*M_PI/4 ) $dy=(1-($aAxisAngle-3*M_PI/4)*2/M_PI); + if( $aAxisAngle>=5*M_PI/4 && $aAxisAngle <= 7*M_PI/4 ) $dy=0; + + if( !$this->hide ) { + $this->title->Stroke($this->img,$xt-$dx*$w,$yt-$dy*$h,$title); + } + } + +} // Class + + +//=================================================== +// CLASS RadarGrid +// Description: Draws grid for the radar graph +//=================================================== +class RadarGrid { //extends Grid { + private $type='solid'; + private $grid_color='#DDDDDD'; + private $show=false, $weight=1; + + function __construct() { + // Empty + } + + function SetColor($aMajColor) { + $this->grid_color = $aMajColor; + } + + function SetWeight($aWeight) { + $this->weight=$aWeight; + } + + // Specify if grid should be dashed, dotted or solid + function SetLineStyle($aType) { + $this->type = $aType; + } + + // Decide if both major and minor grid should be displayed + function Show($aShowMajor=true) { + $this->show=$aShowMajor; + } + + function Stroke($img,$grid) { + if( !$this->show ) { + return; + } + + $nbrticks = count($grid[0])/2; + $nbrpnts = count($grid); + $img->SetColor($this->grid_color); + $img->SetLineWeight($this->weight); + + for($i=0; $i<$nbrticks; ++$i) { + for($j=0; $j<$nbrpnts; ++$j) { + $pnts[$j*2]=$grid[$j][$i*2]; + $pnts[$j*2+1]=$grid[$j][$i*2+1]; + } + for($k=0; $k<$nbrpnts; ++$k ){ + $l=($k+1)%$nbrpnts; + if( $this->type == 'solid' ) + $img->Line($pnts[$k*2],$pnts[$k*2+1],$pnts[$l*2],$pnts[$l*2+1]); + elseif( $this->type == 'dotted' ) + $img->DashedLine($pnts[$k*2],$pnts[$k*2+1],$pnts[$l*2],$pnts[$l*2+1],1,6); + elseif( $this->type == 'dashed' ) + $img->DashedLine($pnts[$k*2],$pnts[$k*2+1],$pnts[$l*2],$pnts[$l*2+1],2,4); + elseif( $this->type == 'longdashed' ) + $img->DashedLine($pnts[$k*2],$pnts[$k*2+1],$pnts[$l*2],$pnts[$l*2+1],8,6); + } + $pnts=array(); + } + } +} // Class + + +//=================================================== +// CLASS RadarPlot +// Description: Plot a radarplot +//=================================================== +class RadarPlot { + public $mark=null; + public $legend=''; + public $legendcsimtarget=''; + public $legendcsimalt=''; + public $csimtargets=array(); // Array of targets for CSIM + public $csimareas=""; // Resultant CSIM area tags + public $csimalts=null; // ALT:s for corresponding target + private $data=array(); + private $fill=false, $fill_color=array(200,170,180); + private $color=array(0,0,0); + private $weight=1; + private $linestyle='solid'; + + //--------------- + // CONSTRUCTOR + function __construct($data) { + $this->data = $data; + $this->mark = new PlotMark(); + } + + function Min() { + return Min($this->data); + } + + function Max() { + return Max($this->data); + } + + function SetLegend($legend) { + $this->legend=$legend; + } + + function SetLineStyle($aStyle) { + $this->linestyle=$aStyle; + } + + function SetLineWeight($w) { + $this->weight=$w; + } + + function SetFillColor($aColor) { + $this->fill_color = $aColor; + $this->fill = true; + } + + function SetFill($f=true) { + $this->fill = $f; + } + + function SetColor($aColor,$aFillColor=false) { + $this->color = $aColor; + if( $aFillColor ) { + $this->SetFillColor($aFillColor); + $this->fill = true; + } + } + + // Set href targets for CSIM + function SetCSIMTargets($aTargets,$aAlts=null) { + $this->csimtargets=$aTargets; + $this->csimalts=$aAlts; + } + + // Get all created areas + function GetCSIMareas() { + return $this->csimareas; + } + + function Stroke($img, $pos, $scale, $startangle) { + $nbrpnts = count($this->data); + $astep=2*M_PI/$nbrpnts; + $a=$startangle; + + for($i=0; $i<$nbrpnts; ++$i) { + + // Rotate each non null point to the correct axis-angle + $cs=$scale->RelTranslate($this->data[$i]); + $x=round($cs*cos($a)+$scale->scale_abs[0]); + $y=round($pos-$cs*sin($a)); + + $pnts[$i*2]=$x; + $pnts[$i*2+1]=$y; + + // If the next point is null then we draw this polygon segment + // to the center, skip the next and draw the next segment from + // the center up to the point on the axis with the first non-null + // value and continues from that point. Some additoinal logic is necessary + // to handle the boundary conditions + if( $i < $nbrpnts-1 ) { + if( is_null($this->data[$i+1]) ) { + $cs = 0; + $x=round($cs*cos($a)+$scale->scale_abs[0]); + $y=round($pos-$cs*sin($a)); + $pnts[$i*2]=$x; + $pnts[$i*2+1]=$y; + $a += $astep; + } + } + + $a += $astep; + } + + if( $this->fill ) { + $img->SetColor($this->fill_color); + $img->FilledPolygon($pnts); + } + + $img->SetLineWeight($this->weight); + $img->SetColor($this->color); + $img->SetLineStyle($this->linestyle); + $pnts[] = $pnts[0]; + $pnts[] = $pnts[1]; + $img->Polygon($pnts); + $img->SetLineStyle('solid'); // Reset line style to default + + // Add plotmarks on top + if( $this->mark->show ) { + for($i=0; $i < $nbrpnts; ++$i) { + if( isset($this->csimtargets[$i]) ) { + $this->mark->SetCSIMTarget($this->csimtargets[$i]); + $this->mark->SetCSIMAlt($this->csimalts[$i]); + $this->mark->SetCSIMAltVal($pnts[$i*2], $pnts[$i*2+1]); + $this->mark->Stroke($img, $pnts[$i*2], $pnts[$i*2+1]); + $this->csimareas .= $this->mark->GetCSIMAreas(); + } + else { + $this->mark->Stroke($img,$pnts[$i*2],$pnts[$i*2+1]); + } + } + } + + } + + function GetCount() { + return count($this->data); + } + + function Legend($graph) { + if( $this->legend == '' ) { + return; + } + if( $this->fill ) { + $graph->legend->Add($this->legend,$this->fill_color,$this->mark); + } else { + $graph->legend->Add($this->legend,$this->color,$this->mark); + } + } + +} // Class + +//=================================================== +// CLASS RadarGraph +// Description: Main container for a radar graph +//=================================================== +class RadarGraph extends Graph { + public $grid,$axis=null; + private $posx,$posy; + private $len; + private $axis_title=null; + + function __construct($width=300,$height=200,$cachedName="",$timeout=0,$inline=1) { + parent::__construct($width,$height,$cachedName,$timeout,$inline); + $this->posx = $width/2; + $this->posy = $height/2; + $this->len = min($width,$height)*0.35; + $this->SetColor(array(255,255,255)); + $this->SetTickDensity(TICKD_NORMAL); + $this->SetScale('lin'); + $this->SetGridDepth(DEPTH_FRONT); + } + + function HideTickMarks($aFlag=true) { + $this->axis->scale->ticks->SupressTickMarks($aFlag); + } + + function ShowMinorTickmarks($aFlag=true) { + $this->yscale->ticks->SupressMinorTickMarks(!$aFlag); + } + + function SetScale($axtype,$ymin=1,$ymax=1,$dummy1=null,$dumy2=null) { + if( $axtype != 'lin' && $axtype != 'log' ) { + JpGraphError::RaiseL(18003,$axtype); + //("Illegal scale for radarplot ($axtype). Must be \"lin\" or \"log\""); + } + if( $axtype == 'lin' ) { + $this->yscale = new LinearScale($ymin,$ymax); + $this->yscale->ticks = new RadarLinearTicks(); + $this->yscale->ticks->SupressMinorTickMarks(); + } + elseif( $axtype == 'log' ) { + $this->yscale = new LogScale($ymin,$ymax); + $this->yscale->ticks = new RadarLogTicks(); + } + + $this->axis = new RadarAxis($this->img,$this->yscale); + $this->grid = new RadarGrid(); + } + + function SetSize($aSize) { + if( $aSize < 0.1 || $aSize>1 ) { + JpGraphError::RaiseL(18004,$aSize); + //("Radar Plot size must be between 0.1 and 1. (Your value=$s)"); + } + $this->len=min($this->img->width,$this->img->height)*$aSize/2; + } + + function SetPlotSize($aSize) { + $this->SetSize($aSize); + } + + function SetTickDensity($densy=TICKD_NORMAL,$dummy1=null) { + $this->ytick_factor=25; + switch( $densy ) { + case TICKD_DENSE: + $this->ytick_factor=12; + break; + case TICKD_NORMAL: + $this->ytick_factor=25; + break; + case TICKD_SPARSE: + $this->ytick_factor=40; + break; + case TICKD_VERYSPARSE: + $this->ytick_factor=70; + break; + default: + JpGraphError::RaiseL(18005,$densy); + //("RadarPlot Unsupported Tick density: $densy"); + } + } + + function SetPos($px,$py=0.5) { + $this->SetCenter($px,$py); + } + + function SetCenter($px,$py=0.5) { + if( $px >= 0 && $px <= 1 ) { + $this->posx = $this->img->width*$px; + } + else { + $this->posx = $px; + } + if( $py >= 0 && $py <= 1 ) { + $this->posy = $this->img->height*$py; + } + else { + $this->posy = $py; + } + } + + function SetColor($aColor) { + $this->SetMarginColor($aColor); + } + + function SetTitles($aTitleArray) { + $this->axis_title = $aTitleArray; + } + + function Add($aPlot) { + if( $aPlot == null ) { + JpGraphError::RaiseL(25010);//("Graph::Add() You tried to add a null plot to the graph."); + } + if( is_array($aPlot) && count($aPlot) > 0 ) { + $cl = $aPlot[0]; + } + else { + $cl = $aPlot; + } + + if( $cl instanceof Text ) $this->AddText($aPlot); + elseif( class_exists('IconPlot',false) && ($cl instanceof IconPlot) ) $this->AddIcon($aPlot); + else { + $this->plots[] = $aPlot; + } + } + + function GetPlotsYMinMax($aPlots) { + $min=$aPlots[0]->Min(); + $max=$aPlots[0]->Max(); + foreach( $this->plots as $p ) { + $max=max($max,$p->Max()); + $min=min($min,$p->Min()); + } + if( $min < 0 ) { + JpGraphError::RaiseL(18006,$min); + //("Minimum data $min (Radar plots should only be used when all data points > 0)"); + } + return array($min,$max); + } + + function StrokeIcons() { + if( $this->iIcons != null ) { + $n = count($this->iIcons); + for( $i=0; $i < $n; ++$i ) { + $this->iIcons[$i]->Stroke($this->img); + } + } + } + + function StrokeTexts() { + if( $this->texts != null ) { + $n = count($this->texts); + for( $i=0; $i < $n; ++$i ) { + $this->texts[$i]->Stroke($this->img); + } + } + } + + // Stroke the Radar graph + function Stroke($aStrokeFileName='') { + + // If the filename is the predefined value = '_csim_special_' + // we assume that the call to stroke only needs to do enough + // to correctly generate the CSIM maps. + // We use this variable to skip things we don't strictly need + // to do to generate the image map to improve performance + // a best we can. Therefor you will see a lot of tests !$_csim in the + // code below. + $_csim = ( $aStrokeFileName === _CSIM_SPECIALFILE ); + + // We need to know if we have stroked the plot in the + // GetCSIMareas. Otherwise the CSIM hasn't been generated + // and in the case of GetCSIM called before stroke to generate + // CSIM without storing an image to disk GetCSIM must call Stroke. + $this->iHasStroked = true; + + $n = count($this->plots); + // Set Y-scale + + if( !$this->yscale->IsSpecified() && count($this->plots) > 0 ) { + list($min,$max) = $this->GetPlotsYMinMax($this->plots); + $this->yscale->AutoScale($this->img,0,$max,$this->len/$this->ytick_factor); + } + elseif( $this->yscale->IsSpecified() && + ( $this->yscale->auto_ticks || !$this->yscale->ticks->IsSpecified()) ) { + + // The tick calculation will use the user suplied min/max values to determine + // the ticks. If auto_ticks is false the exact user specifed min and max + // values will be used for the scale. + // If auto_ticks is true then the scale might be slightly adjusted + // so that the min and max values falls on an even major step. + $min = $this->yscale->scale[0]; + $max = $this->yscale->scale[1]; + $this->yscale->AutoScale($this->img,$min,$max, + $this->len/$this->ytick_factor, + $this->yscale->auto_ticks); + } + + // Set start position end length of scale (in absolute pixels) + $this->yscale->SetConstants($this->posx,$this->len); + + // We need as many axis as there are data points + $nbrpnts=$this->plots[0]->GetCount(); + + // If we have no titles just number the axis 1,2,3,... + if( $this->axis_title==null ) { + for($i=0; $i < $nbrpnts; ++$i ) { + $this->axis_title[$i] = $i+1; + } + } + elseif( count($this->axis_title) < $nbrpnts) { + JpGraphError::RaiseL(18007); + // ("Number of titles does not match number of points in plot."); + } + for( $i=0; $i < $n; ++$i ) { + if( $nbrpnts != $this->plots[$i]->GetCount() ) { + JpGraphError::RaiseL(18008); + //("Each radar plot must have the same number of data points."); + } + } + + if( !$_csim ) { + if( $this->background_image != '' ) { + $this->StrokeFrameBackground(); + } + else { + $this->StrokeFrame(); + $this->StrokeBackgroundGrad(); + } + } + $astep=2*M_PI/$nbrpnts; + + if( !$_csim ) { + if( $this->iIconDepth == DEPTH_BACK ) { + $this->StrokeIcons(); + } + + + // Prepare legends + for($i=0; $i < $n; ++$i) { + $this->plots[$i]->Legend($this); + } + $this->legend->Stroke($this->img); + $this->footer->Stroke($this->img); + } + + if( !$_csim ) { + if( $this->grid_depth == DEPTH_BACK ) { + // Draw axis and grid + for( $i=0,$a=M_PI/2; $i < $nbrpnts; ++$i, $a += $astep ) { + $this->axis->Stroke($this->posy,$a,$grid[$i],$this->axis_title[$i],$i==0); + } + $this->grid->Stroke($this->img,$grid); + } + if( $this->iIconDepth == DEPTH_BACK ) { + $this->StrokeIcons(); + } + + } + + // Plot points + $a=M_PI/2; + for($i=0; $i < $n; ++$i ) { + $this->plots[$i]->Stroke($this->img, $this->posy, $this->yscale, $a); + } + + if( !$_csim ) { + if( $this->grid_depth != DEPTH_BACK ) { + // Draw axis and grid + for( $i=0,$a=M_PI/2; $i < $nbrpnts; ++$i, $a += $astep ) { + $this->axis->Stroke($this->posy,$a,$grid[$i],$this->axis_title[$i],$i==0); + } + $this->grid->Stroke($this->img,$grid); + } + + $this->StrokeTitles(); + $this->StrokeTexts(); + if( $this->iIconDepth == DEPTH_FRONT ) { + $this->StrokeIcons(); + } + } + + // Should we do any final image transformation + if( $this->iImgTrans && !$_csim ) { + if( !class_exists('ImgTrans',false) ) { + require_once('jpgraph_imgtrans.php'); + } + + $tform = new ImgTrans($this->img->img); + $this->img->img = $tform->Skew3D($this->iImgTransHorizon,$this->iImgTransSkewDist, + $this->iImgTransDirection,$this->iImgTransHighQ, + $this->iImgTransMinSize,$this->iImgTransFillColor, + $this->iImgTransBorder); + } + + if( !$_csim ) { + // If the filename is given as the special "__handle" + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline,$aStrokeFileName); + } + } + } +} // Class + +/* EOF */ +?> diff --git a/Societes/ric/jpgraph/jpgraph_regstat.php b/Societes/ric/jpgraph/jpgraph_regstat.php new file mode 100755 index 00000000..0f6c96be --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_regstat.php @@ -0,0 +1,215 @@ +y2 = array(); + $this->xdata = $xdata; + $this->ydata = $ydata; + + $n = count($ydata); + $this->n = $n; + if( $this->n !== count($xdata) ) { + JpGraphError::RaiseL(19001); + //('Spline: Number of X and Y coordinates must be the same'); + } + + // Natural spline 2:derivate == 0 at endpoints + $this->y2[0] = 0.0; + $this->y2[$n-1] = 0.0; + $delta[0] = 0.0; + + // Calculate 2:nd derivate + for($i=1; $i < $n-1; ++$i) { + $d = ($xdata[$i+1]-$xdata[$i-1]); + if( $d == 0 ) { + JpGraphError::RaiseL(19002); + //('Invalid input data for spline. Two or more consecutive input X-values are equal. Each input X-value must differ since from a mathematical point of view it must be a one-to-one mapping, i.e. each X-value must correspond to exactly one Y-value.'); + } + $s = ($xdata[$i]-$xdata[$i-1])/$d; + $p = $s*$this->y2[$i-1]+2.0; + $this->y2[$i] = ($s-1.0)/$p; + $delta[$i] = ($ydata[$i+1]-$ydata[$i])/($xdata[$i+1]-$xdata[$i]) - + ($ydata[$i]-$ydata[$i-1])/($xdata[$i]-$xdata[$i-1]); + $delta[$i] = (6.0*$delta[$i]/($xdata[$i+1]-$xdata[$i-1])-$s*$delta[$i-1])/$p; + } + + // Backward substitution + for( $j=$n-2; $j >= 0; --$j ) { + $this->y2[$j] = $this->y2[$j]*$this->y2[$j+1] + $delta[$j]; + } + } + + // Return the two new data vectors + function Get($num=50) { + $n = $this->n ; + $step = ($this->xdata[$n-1]-$this->xdata[0]) / ($num-1); + $xnew=array(); + $ynew=array(); + $xnew[0] = $this->xdata[0]; + $ynew[0] = $this->ydata[0]; + for( $j=1; $j < $num; ++$j ) { + $xnew[$j] = $xnew[0]+$j*$step; + $ynew[$j] = $this->Interpolate($xnew[$j]); + } + return array($xnew,$ynew); + } + + // Return a single interpolated Y-value from an x value + function Interpolate($xpoint) { + + $max = $this->n-1; + $min = 0; + + // Binary search to find interval + while( $max-$min > 1 ) { + $k = ($max+$min) / 2; + if( $this->xdata[$k] > $xpoint ) + $max=$k; + else + $min=$k; + } + + // Each interval is interpolated by a 3:degree polynom function + $h = $this->xdata[$max]-$this->xdata[$min]; + + if( $h == 0 ) { + JpGraphError::RaiseL(19002); + //('Invalid input data for spline. Two or more consecutive input X-values are equal. Each input X-value must differ since from a mathematical point of view it must be a one-to-one mapping, i.e. each X-value must correspond to exactly one Y-value.'); + } + + + $a = ($this->xdata[$max]-$xpoint)/$h; + $b = ($xpoint-$this->xdata[$min])/$h; + return $a*$this->ydata[$min]+$b*$this->ydata[$max]+ + (($a*$a*$a-$a)*$this->y2[$min]+($b*$b*$b-$b)*$this->y2[$max])*($h*$h)/6.0; + } +} + +//------------------------------------------------------------------------ +// CLASS Bezier +// Create a new data array from a number of control points +//------------------------------------------------------------------------ +class Bezier { + /** + * @author Thomas Despoix, openXtrem company + * @license released under QPL + * @abstract Bezier interoplated point generation, + * computed from control points data sets, based on Paul Bourke algorithm : + * http://local.wasp.uwa.edu.au/~pbourke/geometry/bezier/index2.html + */ + private $datax = array(); + private $datay = array(); + private $n=0; + + function __construct($datax, $datay, $attraction_factor = 1) { + // Adding control point multiple time will raise their attraction power over the curve + $this->n = count($datax); + if( $this->n !== count($datay) ) { + JpGraphError::RaiseL(19003); + //('Bezier: Number of X and Y coordinates must be the same'); + } + $idx=0; + foreach($datax as $datumx) { + for ($i = 0; $i < $attraction_factor; $i++) { + $this->datax[$idx++] = $datumx; + } + } + $idx=0; + foreach($datay as $datumy) { + for ($i = 0; $i < $attraction_factor; $i++) { + $this->datay[$idx++] = $datumy; + } + } + $this->n *= $attraction_factor; + } + + /** + * Return a set of data points that specifies the bezier curve with $steps points + * @param $steps Number of new points to return + * @return array($datax, $datay) + */ + function Get($steps) { + $datax = array(); + $datay = array(); + for ($i = 0; $i < $steps; $i++) { + list($datumx, $datumy) = $this->GetPoint((double) $i / (double) $steps); + $datax[$i] = $datumx; + $datay[$i] = $datumy; + } + + $datax[] = end($this->datax); + $datay[] = end($this->datay); + + return array($datax, $datay); + } + + /** + * Return one point on the bezier curve. $mu is the position on the curve where $mu is in the + * range 0 $mu < 1 where 0 is tha start point and 1 is the end point. Note that every newly computed + * point depends on all the existing points + * + * @param $mu Position on the bezier curve + * @return array($x, $y) + */ + function GetPoint($mu) { + $n = $this->n - 1; + $k = 0; + $kn = 0; + $nn = 0; + $nkn = 0; + $blend = 0.0; + $newx = 0.0; + $newy = 0.0; + + $muk = 1.0; + $munk = (double) pow(1-$mu,(double) $n); + + for ($k = 0; $k <= $n; $k++) { + $nn = $n; + $kn = $k; + $nkn = $n - $k; + $blend = $muk * $munk; + $muk *= $mu; + $munk /= (1-$mu); + while ($nn >= 1) { + $blend *= $nn; + $nn--; + if ($kn > 1) { + $blend /= (double) $kn; + $kn--; + } + if ($nkn > 1) { + $blend /= (double) $nkn; + $nkn--; + } + } + $newx += $this->datax[$k] * $blend; + $newy += $this->datay[$k] * $blend; + } + + return array($newx, $newy); + } +} + +// EOF +?> diff --git a/Societes/ric/jpgraph/jpgraph_rgb.inc.php b/Societes/ric/jpgraph/jpgraph_rgb.inc.php new file mode 100755 index 00000000..a7f485b3 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_rgb.inc.php @@ -0,0 +1,615 @@ +img = $aImg; + + // Conversion array between color names and RGB + $this->rgb_table = array( + 'aqua'=> array(0,255,255), + 'lime'=> array(0,255,0), + 'teal'=> array(0,128,128), + 'whitesmoke'=>array(245,245,245), + 'gainsboro'=>array(220,220,220), + 'oldlace'=>array(253,245,230), + 'linen'=>array(250,240,230), + 'antiquewhite'=>array(250,235,215), + 'papayawhip'=>array(255,239,213), + 'blanchedalmond'=>array(255,235,205), + 'bisque'=>array(255,228,196), + 'peachpuff'=>array(255,218,185), + 'navajowhite'=>array(255,222,173), + 'moccasin'=>array(255,228,181), + 'cornsilk'=>array(255,248,220), + 'ivory'=>array(255,255,240), + 'lemonchiffon'=>array(255,250,205), + 'seashell'=>array(255,245,238), + 'mintcream'=>array(245,255,250), + 'azure'=>array(240,255,255), + 'aliceblue'=>array(240,248,255), + 'lavender'=>array(230,230,250), + 'lavenderblush'=>array(255,240,245), + 'mistyrose'=>array(255,228,225), + 'white'=>array(255,255,255), + 'black'=>array(0,0,0), + 'darkslategray'=>array(47,79,79), + 'dimgray'=>array(105,105,105), + 'slategray'=>array(112,128,144), + 'lightslategray'=>array(119,136,153), + 'gray'=>array(190,190,190), + 'lightgray'=>array(211,211,211), + 'midnightblue'=>array(25,25,112), + 'navy'=>array(0,0,128), + 'indigo'=>array(75,0,130), + 'electricindigo'=>array(102,0,255), + 'deepindigo'=>array(138,43,226), + 'pigmentindigo'=>array(75,0,130), + 'indigodye'=>array(0,65,106), + 'cornflowerblue'=>array(100,149,237), + 'darkslateblue'=>array(72,61,139), + 'slateblue'=>array(106,90,205), + 'mediumslateblue'=>array(123,104,238), + 'lightslateblue'=>array(132,112,255), + 'mediumblue'=>array(0,0,205), + 'royalblue'=>array(65,105,225), + 'blue'=>array(0,0,255), + 'dodgerblue'=>array(30,144,255), + 'deepskyblue'=>array(0,191,255), + 'skyblue'=>array(135,206,235), + 'lightskyblue'=>array(135,206,250), + 'steelblue'=>array(70,130,180), + 'lightred'=>array(211,167,168), + 'lightsteelblue'=>array(176,196,222), + 'lightblue'=>array(173,216,230), + 'powderblue'=>array(176,224,230), + 'paleturquoise'=>array(175,238,238), + 'darkturquoise'=>array(0,206,209), + 'mediumturquoise'=>array(72,209,204), + 'turquoise'=>array(64,224,208), + 'cyan'=>array(0,255,255), + 'lightcyan'=>array(224,255,255), + 'cadetblue'=>array(95,158,160), + 'mediumaquamarine'=>array(102,205,170), + 'aquamarine'=>array(127,255,212), + 'darkgreen'=>array(0,100,0), + 'darkolivegreen'=>array(85,107,47), + 'darkseagreen'=>array(143,188,143), + 'seagreen'=>array(46,139,87), + 'mediumseagreen'=>array(60,179,113), + 'lightseagreen'=>array(32,178,170), + 'palegreen'=>array(152,251,152), + 'springgreen'=>array(0,255,127), + 'lawngreen'=>array(124,252,0), + 'green'=>array(0,255,0), + 'chartreuse'=>array(127,255,0), + 'mediumspringgreen'=>array(0,250,154), + 'greenyellow'=>array(173,255,47), + 'limegreen'=>array(50,205,50), + 'yellowgreen'=>array(154,205,50), + 'forestgreen'=>array(34,139,34), + 'olivedrab'=>array(107,142,35), + 'darkkhaki'=>array(189,183,107), + 'khaki'=>array(240,230,140), + 'palegoldenrod'=>array(238,232,170), + 'lightgoldenrodyellow'=>array(250,250,210), + 'lightyellow'=>array(255,255,200), + 'yellow'=>array(255,255,0), + 'gold'=>array(255,215,0), + 'lightgoldenrod'=>array(238,221,130), + 'goldenrod'=>array(218,165,32), + 'darkgoldenrod'=>array(184,134,11), + 'rosybrown'=>array(188,143,143), + 'indianred'=>array(205,92,92), + 'saddlebrown'=>array(139,69,19), + 'sienna'=>array(160,82,45), + 'peru'=>array(205,133,63), + 'burlywood'=>array(222,184,135), + 'beige'=>array(245,245,220), + 'wheat'=>array(245,222,179), + 'sandybrown'=>array(244,164,96), + 'tan'=>array(210,180,140), + 'chocolate'=>array(210,105,30), + 'firebrick'=>array(178,34,34), + 'brown'=>array(165,42,42), + 'darksalmon'=>array(233,150,122), + 'salmon'=>array(250,128,114), + 'lightsalmon'=>array(255,160,122), + 'orange'=>array(255,165,0), + 'darkorange'=>array(255,140,0), + 'coral'=>array(255,127,80), + 'lightcoral'=>array(240,128,128), + 'tomato'=>array(255,99,71), + 'orangered'=>array(255,69,0), + 'red'=>array(255,0,0), + 'hotpink'=>array(255,105,180), + 'deeppink'=>array(255,20,147), + 'pink'=>array(255,192,203), + 'lightpink'=>array(255,182,193), + 'palevioletred'=>array(219,112,147), + 'maroon'=>array(176,48,96), + 'mediumvioletred'=>array(199,21,133), + 'violetred'=>array(208,32,144), + 'magenta'=>array(255,0,255), + 'violet'=>array(238,130,238), + 'plum'=>array(221,160,221), + 'orchid'=>array(218,112,214), + 'mediumorchid'=>array(186,85,211), + 'darkorchid'=>array(153,50,204), + 'darkviolet'=>array(148,0,211), + 'blueviolet'=>array(138,43,226), + 'purple'=>array(160,32,240), + 'mediumpurple'=>array(147,112,219), + 'thistle'=>array(216,191,216), + 'snow1'=>array(255,250,250), + 'snow2'=>array(238,233,233), + 'snow3'=>array(205,201,201), + 'snow4'=>array(139,137,137), + 'seashell1'=>array(255,245,238), + 'seashell2'=>array(238,229,222), + 'seashell3'=>array(205,197,191), + 'seashell4'=>array(139,134,130), + 'AntiqueWhite1'=>array(255,239,219), + 'AntiqueWhite2'=>array(238,223,204), + 'AntiqueWhite3'=>array(205,192,176), + 'AntiqueWhite4'=>array(139,131,120), + 'bisque1'=>array(255,228,196), + 'bisque2'=>array(238,213,183), + 'bisque3'=>array(205,183,158), + 'bisque4'=>array(139,125,107), + 'peachPuff1'=>array(255,218,185), + 'peachpuff2'=>array(238,203,173), + 'peachpuff3'=>array(205,175,149), + 'peachpuff4'=>array(139,119,101), + 'navajowhite1'=>array(255,222,173), + 'navajowhite2'=>array(238,207,161), + 'navajowhite3'=>array(205,179,139), + 'navajowhite4'=>array(139,121,94), + 'lemonchiffon1'=>array(255,250,205), + 'lemonchiffon2'=>array(238,233,191), + 'lemonchiffon3'=>array(205,201,165), + 'lemonchiffon4'=>array(139,137,112), + 'ivory1'=>array(255,255,240), + 'ivory2'=>array(238,238,224), + 'ivory3'=>array(205,205,193), + 'ivory4'=>array(139,139,131), + 'honeydew'=>array(193,205,193), + 'lavenderblush1'=>array(255,240,245), + 'lavenderblush2'=>array(238,224,229), + 'lavenderblush3'=>array(205,193,197), + 'lavenderblush4'=>array(139,131,134), + 'mistyrose1'=>array(255,228,225), + 'mistyrose2'=>array(238,213,210), + 'mistyrose3'=>array(205,183,181), + 'mistyrose4'=>array(139,125,123), + 'azure1'=>array(240,255,255), + 'azure2'=>array(224,238,238), + 'azure3'=>array(193,205,205), + 'azure4'=>array(131,139,139), + 'slateblue1'=>array(131,111,255), + 'slateblue2'=>array(122,103,238), + 'slateblue3'=>array(105,89,205), + 'slateblue4'=>array(71,60,139), + 'royalblue1'=>array(72,118,255), + 'royalblue2'=>array(67,110,238), + 'royalblue3'=>array(58,95,205), + 'royalblue4'=>array(39,64,139), + 'dodgerblue1'=>array(30,144,255), + 'dodgerblue2'=>array(28,134,238), + 'dodgerblue3'=>array(24,116,205), + 'dodgerblue4'=>array(16,78,139), + 'steelblue1'=>array(99,184,255), + 'steelblue2'=>array(92,172,238), + 'steelblue3'=>array(79,148,205), + 'steelblue4'=>array(54,100,139), + 'deepskyblue1'=>array(0,191,255), + 'deepskyblue2'=>array(0,178,238), + 'deepskyblue3'=>array(0,154,205), + 'deepskyblue4'=>array(0,104,139), + 'skyblue1'=>array(135,206,255), + 'skyblue2'=>array(126,192,238), + 'skyblue3'=>array(108,166,205), + 'skyblue4'=>array(74,112,139), + 'lightskyblue1'=>array(176,226,255), + 'lightskyblue2'=>array(164,211,238), + 'lightskyblue3'=>array(141,182,205), + 'lightskyblue4'=>array(96,123,139), + 'slategray1'=>array(198,226,255), + 'slategray2'=>array(185,211,238), + 'slategray3'=>array(159,182,205), + 'slategray4'=>array(108,123,139), + 'lightsteelblue1'=>array(202,225,255), + 'lightsteelblue2'=>array(188,210,238), + 'lightsteelblue3'=>array(162,181,205), + 'lightsteelblue4'=>array(110,123,139), + 'lightblue1'=>array(191,239,255), + 'lightblue2'=>array(178,223,238), + 'lightblue3'=>array(154,192,205), + 'lightblue4'=>array(104,131,139), + 'lightcyan1'=>array(224,255,255), + 'lightcyan2'=>array(209,238,238), + 'lightcyan3'=>array(180,205,205), + 'lightcyan4'=>array(122,139,139), + 'paleturquoise1'=>array(187,255,255), + 'paleturquoise2'=>array(174,238,238), + 'paleturquoise3'=>array(150,205,205), + 'paleturquoise4'=>array(102,139,139), + 'cadetblue1'=>array(152,245,255), + 'cadetblue2'=>array(142,229,238), + 'cadetblue3'=>array(122,197,205), + 'cadetblue4'=>array(83,134,139), + 'turquoise1'=>array(0,245,255), + 'turquoise2'=>array(0,229,238), + 'turquoise3'=>array(0,197,205), + 'turquoise4'=>array(0,134,139), + 'cyan1'=>array(0,255,255), + 'cyan2'=>array(0,238,238), + 'cyan3'=>array(0,205,205), + 'cyan4'=>array(0,139,139), + 'darkslategray1'=>array(151,255,255), + 'darkslategray2'=>array(141,238,238), + 'darkslategray3'=>array(121,205,205), + 'darkslategray4'=>array(82,139,139), + 'aquamarine1'=>array(127,255,212), + 'aquamarine2'=>array(118,238,198), + 'aquamarine3'=>array(102,205,170), + 'aquamarine4'=>array(69,139,116), + 'darkseagreen1'=>array(193,255,193), + 'darkseagreen2'=>array(180,238,180), + 'darkseagreen3'=>array(155,205,155), + 'darkseagreen4'=>array(105,139,105), + 'seagreen1'=>array(84,255,159), + 'seagreen2'=>array(78,238,148), + 'seagreen3'=>array(67,205,128), + 'seagreen4'=>array(46,139,87), + 'palegreen1'=>array(154,255,154), + 'palegreen2'=>array(144,238,144), + 'palegreen3'=>array(124,205,124), + 'palegreen4'=>array(84,139,84), + 'springgreen1'=>array(0,255,127), + 'springgreen2'=>array(0,238,118), + 'springgreen3'=>array(0,205,102), + 'springgreen4'=>array(0,139,69), + 'chartreuse1'=>array(127,255,0), + 'chartreuse2'=>array(118,238,0), + 'chartreuse3'=>array(102,205,0), + 'chartreuse4'=>array(69,139,0), + 'olivedrab1'=>array(192,255,62), + 'olivedrab2'=>array(179,238,58), + 'olivedrab3'=>array(154,205,50), + 'olivedrab4'=>array(105,139,34), + 'darkolivegreen1'=>array(202,255,112), + 'darkolivegreen2'=>array(188,238,104), + 'darkolivegreen3'=>array(162,205,90), + 'darkolivegreen4'=>array(110,139,61), + 'khaki1'=>array(255,246,143), + 'khaki2'=>array(238,230,133), + 'khaki3'=>array(205,198,115), + 'khaki4'=>array(139,134,78), + 'lightgoldenrod1'=>array(255,236,139), + 'lightgoldenrod2'=>array(238,220,130), + 'lightgoldenrod3'=>array(205,190,112), + 'lightgoldenrod4'=>array(139,129,76), + 'yellow1'=>array(255,255,0), + 'yellow2'=>array(238,238,0), + 'yellow3'=>array(205,205,0), + 'yellow4'=>array(139,139,0), + 'gold1'=>array(255,215,0), + 'gold2'=>array(238,201,0), + 'gold3'=>array(205,173,0), + 'gold4'=>array(139,117,0), + 'goldenrod1'=>array(255,193,37), + 'goldenrod2'=>array(238,180,34), + 'goldenrod3'=>array(205,155,29), + 'goldenrod4'=>array(139,105,20), + 'darkgoldenrod1'=>array(255,185,15), + 'darkgoldenrod2'=>array(238,173,14), + 'darkgoldenrod3'=>array(205,149,12), + 'darkgoldenrod4'=>array(139,101,8), + 'rosybrown1'=>array(255,193,193), + 'rosybrown2'=>array(238,180,180), + 'rosybrown3'=>array(205,155,155), + 'rosybrown4'=>array(139,105,105), + 'indianred1'=>array(255,106,106), + 'indianred2'=>array(238,99,99), + 'indianred3'=>array(205,85,85), + 'indianred4'=>array(139,58,58), + 'sienna1'=>array(255,130,71), + 'sienna2'=>array(238,121,66), + 'sienna3'=>array(205,104,57), + 'sienna4'=>array(139,71,38), + 'burlywood1'=>array(255,211,155), + 'burlywood2'=>array(238,197,145), + 'burlywood3'=>array(205,170,125), + 'burlywood4'=>array(139,115,85), + 'wheat1'=>array(255,231,186), + 'wheat2'=>array(238,216,174), + 'wheat3'=>array(205,186,150), + 'wheat4'=>array(139,126,102), + 'tan1'=>array(255,165,79), + 'tan2'=>array(238,154,73), + 'tan3'=>array(205,133,63), + 'tan4'=>array(139,90,43), + 'chocolate1'=>array(255,127,36), + 'chocolate2'=>array(238,118,33), + 'chocolate3'=>array(205,102,29), + 'chocolate4'=>array(139,69,19), + 'firebrick1'=>array(255,48,48), + 'firebrick2'=>array(238,44,44), + 'firebrick3'=>array(205,38,38), + 'firebrick4'=>array(139,26,26), + 'brown1'=>array(255,64,64), + 'brown2'=>array(238,59,59), + 'brown3'=>array(205,51,51), + 'brown4'=>array(139,35,35), + 'salmon1'=>array(255,140,105), + 'salmon2'=>array(238,130,98), + 'salmon3'=>array(205,112,84), + 'salmon4'=>array(139,76,57), + 'lightsalmon1'=>array(255,160,122), + 'lightsalmon2'=>array(238,149,114), + 'lightsalmon3'=>array(205,129,98), + 'lightsalmon4'=>array(139,87,66), + 'orange1'=>array(255,165,0), + 'orange2'=>array(238,154,0), + 'orange3'=>array(205,133,0), + 'orange4'=>array(139,90,0), + 'darkorange1'=>array(255,127,0), + 'darkorange2'=>array(238,118,0), + 'darkorange3'=>array(205,102,0), + 'darkorange4'=>array(139,69,0), + 'coral1'=>array(255,114,86), + 'coral2'=>array(238,106,80), + 'coral3'=>array(205,91,69), + 'coral4'=>array(139,62,47), + 'tomato1'=>array(255,99,71), + 'tomato2'=>array(238,92,66), + 'tomato3'=>array(205,79,57), + 'tomato4'=>array(139,54,38), + 'orangered1'=>array(255,69,0), + 'orangered2'=>array(238,64,0), + 'orangered3'=>array(205,55,0), + 'orangered4'=>array(139,37,0), + 'deeppink1'=>array(255,20,147), + 'deeppink2'=>array(238,18,137), + 'deeppink3'=>array(205,16,118), + 'deeppink4'=>array(139,10,80), + 'hotpink1'=>array(255,110,180), + 'hotpink2'=>array(238,106,167), + 'hotpink3'=>array(205,96,144), + 'hotpink4'=>array(139,58,98), + 'pink1'=>array(255,181,197), + 'pink2'=>array(238,169,184), + 'pink3'=>array(205,145,158), + 'pink4'=>array(139,99,108), + 'lightpink1'=>array(255,174,185), + 'lightpink2'=>array(238,162,173), + 'lightpink3'=>array(205,140,149), + 'lightpink4'=>array(139,95,101), + 'palevioletred1'=>array(255,130,171), + 'palevioletred2'=>array(238,121,159), + 'palevioletred3'=>array(205,104,137), + 'palevioletred4'=>array(139,71,93), + 'maroon1'=>array(255,52,179), + 'maroon2'=>array(238,48,167), + 'maroon3'=>array(205,41,144), + 'maroon4'=>array(139,28,98), + 'violetred1'=>array(255,62,150), + 'violetred2'=>array(238,58,140), + 'violetred3'=>array(205,50,120), + 'violetred4'=>array(139,34,82), + 'magenta1'=>array(255,0,255), + 'magenta2'=>array(238,0,238), + 'magenta3'=>array(205,0,205), + 'magenta4'=>array(139,0,139), + 'mediumred'=>array(140,34,34), + 'orchid1'=>array(255,131,250), + 'orchid2'=>array(238,122,233), + 'orchid3'=>array(205,105,201), + 'orchid4'=>array(139,71,137), + 'plum1'=>array(255,187,255), + 'plum2'=>array(238,174,238), + 'plum3'=>array(205,150,205), + 'plum4'=>array(139,102,139), + 'mediumorchid1'=>array(224,102,255), + 'mediumorchid2'=>array(209,95,238), + 'mediumorchid3'=>array(180,82,205), + 'mediumorchid4'=>array(122,55,139), + 'darkorchid1'=>array(191,62,255), + 'darkorchid2'=>array(178,58,238), + 'darkorchid3'=>array(154,50,205), + 'darkorchid4'=>array(104,34,139), + 'purple1'=>array(155,48,255), + 'purple2'=>array(145,44,238), + 'purple3'=>array(125,38,205), + 'purple4'=>array(85,26,139), + 'mediumpurple1'=>array(171,130,255), + 'mediumpurple2'=>array(159,121,238), + 'mediumpurple3'=>array(137,104,205), + 'mediumpurple4'=>array(93,71,139), + 'thistle1'=>array(255,225,255), + 'thistle2'=>array(238,210,238), + 'thistle3'=>array(205,181,205), + 'thistle4'=>array(139,123,139), + 'gray1'=>array(10,10,10), + 'gray2'=>array(40,40,30), + 'gray3'=>array(70,70,70), + 'gray4'=>array(100,100,100), + 'gray5'=>array(130,130,130), + 'gray6'=>array(160,160,160), + 'gray7'=>array(190,190,190), + 'gray8'=>array(210,210,210), + 'gray9'=>array(240,240,240), + 'darkgray'=>array(100,100,100), + 'darkblue'=>array(0,0,139), + 'darkcyan'=>array(0,139,139), + 'darkmagenta'=>array(139,0,139), + 'darkred'=>array(139,0,0), + 'silver'=>array(192, 192, 192), + 'eggplant'=>array(144,176,168), + 'lightgreen'=>array(144,238,144)); + } + + + //---------------- + // PUBLIC METHODS + // Colors can be specified as either + // 1. #xxxxxx HTML style + // 2. "colorname" as a named color + // 3. array(r,g,b) RGB triple + // This function translates this to a native RGB format and returns an + // RGB triple. + + function Color($aColor) { + if (is_string($aColor)) { + $matches = array(); + // this regex will parse a color string and fill the $matches array as such: + // 0: the full match if any + // 1: a hex string preceded by a hash, can be 3 characters (#fff) or 6 (#ffffff) (4 or 5 also accepted but...) + // 2,3,4: r,g,b values in hex if the first character of the string is # + // 5: all alpha-numeric characters at the beginning of the string if string does not start with # + // 6: alpha value prefixed by @ if supplied + // 7: alpha value with @ stripped + // 8: adjust value prefixed with : if supplied + // 9: adjust value with : stripped + $regex = '/(#([0-9a-fA-F]{1,2})([0-9a-fA-F]{1,2})([0-9a-fA-F]{1,2}))?([\w]+)?(@([\d\.,]+))?(:([\d\.,]+))?/'; + if(!preg_match($regex, $aColor, $matches)) { + JpGraphError::RaiseL(25078,$aColor);//(" Unknown color: $aColor"); + } + if(empty($matches[5])) { + $r = strlen($matches[2]) == 1 ? $matches[2].$matches[2] : $matches[2]; + $g = strlen($matches[3]) == 1 ? $matches[3].$matches[3] : $matches[3]; + $b = strlen($matches[4]) == 1 ? $matches[4].$matches[4] : $matches[4]; + $r = hexdec($r); + $g = hexdec($g); + $b = hexdec($b); + }else { + if(!isset($this->rgb_table[$matches[5]]) ) { + JpGraphError::RaiseL(25078,$aColor);//(" Unknown color: $aColor"); + } + $r = $this->rgb_table[$matches[5]][0]; + $g = $this->rgb_table[$matches[5]][1]; + $b = $this->rgb_table[$matches[5]][2]; + } + $alpha = isset($matches[7]) ? str_replace(',','.',$matches[7]) : 0; + $adj = isset($matches[9]) ? str_replace(',','.',$matches[9]) : 1.0; + + if( $adj < 0 ) { + JpGraphError::RaiseL(25077);//('Adjustment factor for color must be > 0'); + } + + // Scale adj so that an adj=2 always + // makes the color 100% white (i.e. 255,255,255. + // and adj=1 neutral and adj=0 black. + if( $adj == 1) { + return array($r,$g,$b,$alpha); + } + elseif( $adj > 1 ) { + $m = ($adj-1.0)*(255-min(255,min($r,min($g,$b)))); + return array(min(255,$r+$m), min(255,$g+$m), min(255,$b+$m),$alpha); + } + elseif( $adj < 1 ) { + $m = ($adj-1.0)*max(255,max($r,max($g,$b))); + return array(max(0,$r+$m), max(0,$g+$m), max(0,$b+$m),$alpha); + } + } elseif( is_array($aColor) ) { + if(!isset($aColor[3])) $aColor[3] = 0; + return $aColor; + } + else { + JpGraphError::RaiseL(25079,$aColor,count($aColor));//(" Unknown color specification: $aColor , size=".count($aColor)); + } + } + + // Compare two colors + // return true if equal + function Equal($aCol1,$aCol2) { + $c1 = $this->Color($aCol1); + $c2 = $this->Color($aCol2); + return $c1[0]==$c2[0] && $c1[1]==$c2[1] && $c1[2]==$c2[2] ; + } + + // Allocate a new color in the current image + // Return new color index, -1 if no more colors could be allocated + function Allocate($aColor,$aAlpha=0.0) { + list ($r, $g, $b, $a) = $this->color($aColor); + // If alpha is specified in the color string then this + // takes precedence over the second argument + if( $a > 0 ) { + $aAlpha = $a; + } + if( $aAlpha < 0 || $aAlpha > 1 ) { + JpGraphError::RaiseL(25080);//('Alpha parameter for color must be between 0.0 and 1.0'); + } + return imagecolorresolvealpha($this->img, (int)$r, (int)$g, (int)$b, (int)round($aAlpha * 127)); + } + + // Try to convert an array with three valid numbers to the corresponding hex array + // This is currenly only used in processing the colors for barplots in order to be able + // to handle the case where the color might be specified as an array of colros as well. + // In that case we must be able to find out if an array of values should be interpretated as + // a single color (specifeid as an RGB triple) + static function tryHexConversion($aColor) { + if( is_array( $aColor ) ) { + if( count( $aColor ) == 3 ) { + if( is_numeric($aColor[0]) && is_numeric($aColor[1]) && is_numeric($aColor[2]) ) { + if( ($aColor[0] >= 0 && $aColor[0] <= 255) && + ($aColor[1] >= 0 && $aColor[1] <= 255) && + ($aColor[2] >= 0 && $aColor[2] <= 255) ) { + return sprintf('#%02x%02x%02x',$aColor[0],$aColor[1],$aColor[2]); + } + } + } + } + return $aColor; + } + + // Return a RGB tripple corresponding to a position in the normal light spectrum + // The argumen values is in the range [0, 1] where a value of 0 correponds to blue and + // a value of 1 corresponds to red. Values in betwen is mapped to a linear interpolation + // of the constituting colors in the visible color spectra. + // The $aDynamicRange specified how much of the dynamic range we shold use + // a value of 1.0 give the full dyanmic range and a lower value give more dark + // colors. In the extreme of 0.0 then all colors will be black. + static function GetSpectrum($aVal,$aDynamicRange=1.0) { + if( $aVal < 0 || $aVal > 1.0001 ) { + return array(0,0,0); // Invalid case - just return black + } + + $sat = round(255*$aDynamicRange); + $a = 0.25; + if( $aVal <= 0.25 ) { + return array(0, round($sat*$aVal/$a), $sat); + } + elseif( $aVal <= 0.5 ) { + return array(0, $sat, round($sat-$sat*($aVal-0.25)/$a)); + } + elseif( $aVal <= 0.75 ) { + return array(round($sat*($aVal-0.5)/$a), $sat, 0); + } + else { + return array($sat, round($sat-$sat*($aVal-0.75)/$a), 0); + } + } + +} // Class + +?> diff --git a/Societes/ric/jpgraph/jpgraph_scatter.php b/Societes/ric/jpgraph/jpgraph_scatter.php new file mode 100755 index 00000000..7c99d39f --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_scatter.php @@ -0,0 +1,242 @@ +iSize = $aSize; + $this->iArrowSize = $aArrowSize; + } + + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function Stroke($aImg,$x,$y,$a) { + // First rotate the center coordinates + list($x,$y) = $aImg->Rotate($x,$y); + + $old_origin = $aImg->SetCenter($x,$y); + $old_a = $aImg->a; + $aImg->SetAngle(-$a+$old_a); + + $dx = round($this->iSize/2); + $c = array($x-$dx,$y,$x+$dx,$y); + $x += $dx; + + list($dx,$dy) = $this->isizespec[$this->iArrowSize]; + $ca = array($x,$y,$x-$dx,$y-$dy,$x-$dx,$y+$dy,$x,$y); + + $aImg->SetColor($this->iColor); + $aImg->Polygon($c); + $aImg->FilledPolygon($ca); + + $aImg->SetCenter($old_origin[0],$old_origin[1]); + $aImg->SetAngle($old_a); + } +} + +//=================================================== +// CLASS FieldPlot +// Description: Render a field plot +//=================================================== +class FieldPlot extends Plot { + public $arrow = ''; + private $iAngles = array(); + private $iCallback = ''; + + function __construct($datay,$datax,$angles) { + if( (count($datax) != count($datay)) ) + JpGraphError::RaiseL(20001);//("Fieldplots must have equal number of X and Y points."); + if( (count($datax) != count($angles)) ) + JpGraphError::RaiseL(20002);//("Fieldplots must have an angle specified for each X and Y points."); + + $this->iAngles = $angles; + + parent::__construct($datay,$datax); + $this->value->SetAlign('center','center'); + $this->value->SetMargin(15); + + $this->arrow = new FieldArrow(); + } + + function SetCallback($aFunc) { + $this->iCallback = $aFunc; + } + + function Stroke($img,$xscale,$yscale) { + + // Remeber base color and size + $bc = $this->arrow->iColor; + $bs = $this->arrow->iSize; + $bas = $this->arrow->iArrowSize; + + for( $i=0; $i<$this->numpoints; ++$i ) { + // Skip null values + if( $this->coords[0][$i]==="" ) + continue; + + $f = $this->iCallback; + if( $f != "" ) { + list($cc,$cs,$cas) = call_user_func($f,$this->coords[1][$i],$this->coords[0][$i],$this->iAngles[$i]); + // Fall back on global data if the callback isn't set + if( $cc == "" ) $cc = $bc; + if( $cs == "" ) $cs = $bs; + if( $cas == "" ) $cas = $bas; + $this->arrow->SetColor($cc); + $this->arrow->SetSize($cs,$cas); + } + + $xt = $xscale->Translate($this->coords[1][$i]); + $yt = $yscale->Translate($this->coords[0][$i]); + + $this->arrow->Stroke($img,$xt,$yt,$this->iAngles[$i]); + $this->value->Stroke($img,$this->coords[0][$i],$xt,$yt); + } + } + + // Framework function + function Legend($aGraph) { + if( $this->legend != "" ) { + $aGraph->legend->Add($this->legend,$this->mark->fill_color,$this->mark,0, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + } +} + +//=================================================== +// CLASS ScatterPlot +// Description: Render X and Y plots +//=================================================== +class ScatterPlot extends Plot { + public $mark,$link; + private $impuls = false; + //--------------- + // CONSTRUCTOR + function __construct($datay,$datax=false) { + if( is_array($datax) && (count($datax) != count($datay)) ) { + JpGraphError::RaiseL(20003);//("Scatterplot must have equal number of X and Y points."); + } + parent::__construct($datay,$datax); + $this->mark = new PlotMark(); + $this->mark->SetType(MARK_SQUARE); + $this->mark->SetColor($this->color); + $this->value->SetAlign('center','center'); + $this->value->SetMargin(0); + $this->link = new LineProperty(1,'black','solid'); + $this->link->iShow = false; + } + + //--------------- + // PUBLIC METHODS + function SetImpuls($f=true) { + $this->impuls = $f; + } + + function SetStem($f=true) { + $this->impuls = $f; + } + + // Combine the scatter plot points with a line + function SetLinkPoints($aFlag=true,$aColor="black",$aWeight=1,$aStyle='solid') { + $this->link->iShow = $aFlag; + $this->link->iColor = $aColor; + $this->link->iWeight = $aWeight; + $this->link->iStyle = $aStyle; + } + + function Stroke($img,$xscale,$yscale) { + + $ymin=$yscale->scale_abs[0]; + if( $yscale->scale[0] < 0 ) + $yzero=$yscale->Translate(0); + else + $yzero=$yscale->scale_abs[0]; + + $this->csimareas = ''; + for( $i=0; $i<$this->numpoints; ++$i ) { + + // Skip null values + if( $this->coords[0][$i]==='' || $this->coords[0][$i]==='-' || $this->coords[0][$i]==='x') + continue; + + if( isset($this->coords[1]) ) + $xt = $xscale->Translate($this->coords[1][$i]); + else + $xt = $xscale->Translate($i); + $yt = $yscale->Translate($this->coords[0][$i]); + + + if( $this->link->iShow && isset($yt_old) ) { + $img->SetColor($this->link->iColor); + $img->SetLineWeight($this->link->iWeight); + $old = $img->SetLineStyle($this->link->iStyle); + $img->StyleLine($xt_old,$yt_old,$xt,$yt); + $img->SetLineStyle($old); + } + + if( $this->impuls ) { + $img->SetColor($this->color); + $img->SetLineWeight($this->weight); + $img->Line($xt,$yzero,$xt,$yt); + } + + if( !empty($this->csimtargets[$i]) ) { + if( !empty($this->csimwintargets[$i]) ) { + $this->mark->SetCSIMTarget($this->csimtargets[$i],$this->csimwintargets[$i]); + } + else { + $this->mark->SetCSIMTarget($this->csimtargets[$i]); + } + $this->mark->SetCSIMAlt($this->csimalts[$i]); + } + + if( isset($this->coords[1]) ) { + $this->mark->SetCSIMAltVal($this->coords[0][$i],$this->coords[1][$i]); + } + else { + $this->mark->SetCSIMAltVal($this->coords[0][$i],$i); + } + + $this->mark->Stroke($img,$xt,$yt); + + $this->csimareas .= $this->mark->GetCSIMAreas(); + $this->value->Stroke($img,$this->coords[0][$i],$xt,$yt); + + $xt_old = $xt; + $yt_old = $yt; + } + } + + // Framework function + function Legend($aGraph) { + if( $this->legend != "" ) { + $aGraph->legend->Add($this->legend,$this->mark->fill_color,$this->mark,0, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + } +} // Class +/* EOF */ +?> diff --git a/Societes/ric/jpgraph/jpgraph_stock.php b/Societes/ric/jpgraph/jpgraph_stock.php new file mode 100755 index 00000000..88c42084 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_stock.php @@ -0,0 +1,198 @@ +iTupleSize ) { + JpGraphError::RaiseL(21001,$this->iTupleSize); + //('Data values for Stock charts must contain an even multiple of '.$this->iTupleSize.' data points.'); + } + parent::__construct($datay,$datax); + $this->numpoints /= $this->iTupleSize; + } + //--------------- + // PUBLIC METHODS + + function SetColor($aColor,$aColor1='white',$aColor2='darkred',$aColor3='darkred') { + $this->color = $aColor; + $this->iStockColor1 = $aColor1; + $this->iStockColor2 = $aColor2; + $this->iStockColor3 = $aColor3; + } + + function SetWidth($aWidth) { + // Make sure it's odd + $this->iWidth = 2*floor($aWidth/2)+1; + } + + function HideEndLines($aHide=true) { + $this->iEndLines = !$aHide; + } + + // Gets called before any axis are stroked + function PreStrokeAdjust($graph) { + if( $this->center ) { + $a=0.5; $b=0.5; + $this->numpoints++; + } else { + $a=0; $b=0; + } + $graph->xaxis->scale->ticks->SetXLabelOffset($a); + $graph->SetTextScaleOff($b); + } + + // Method description + function Stroke($img,$xscale,$yscale) { + $n=$this->numpoints; + if( $this->center ) $n--; + if( isset($this->coords[1]) ) { + if( count($this->coords[1])!=$n ) { + JpGraphError::RaiseL(2003,count($this->coords[1]),$n); + // ("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints"); + } + else { + $exist_x = true; + } + } + else { + $exist_x = false; + } + + if( $exist_x ) { + $xs=$this->coords[1][0]; + } + else { + $xs=0; + } + + $ts = $this->iTupleSize; + $this->csimareas = ''; + for( $i=0; $i<$n; ++$i) { + + //If value is NULL, then don't draw a bar at all + if ($this->coords[0][$i*$ts] === null) continue; + + if( $exist_x ) { + $x=$this->coords[1][$i]; + if ($x === null) continue; + } + else { + $x=$i; + } + $xt = $xscale->Translate($x); + + $neg = $this->coords[0][$i*$ts] > $this->coords[0][$i*$ts+1] ; + $yopen = $yscale->Translate($this->coords[0][$i*$ts]); + $yclose = $yscale->Translate($this->coords[0][$i*$ts+1]); + $ymin = $yscale->Translate($this->coords[0][$i*$ts+2]); + $ymax = $yscale->Translate($this->coords[0][$i*$ts+3]); + + $dx = floor($this->iWidth/2); + $xl = $xt - $dx; + $xr = $xt + $dx; + + if( $neg ) { + $img->SetColor($this->iStockColor3); + } + else { + $img->SetColor($this->iStockColor1); + } + $img->FilledRectangle($xl,$yopen,$xr,$yclose); + $img->SetLineWeight($this->weight); + if( $neg ) { + $img->SetColor($this->iStockColor2); + } + else { + $img->SetColor($this->color); + } + + $img->Rectangle($xl,$yopen,$xr,$yclose); + + if( $yopen < $yclose ) { + $ytop = $yopen ; + $ybottom = $yclose ; + } + else { + $ytop = $yclose ; + $ybottom = $yopen ; + } + $img->SetColor($this->color); + $img->Line($xt,$ytop,$xt,$ymax); + $img->Line($xt,$ybottom,$xt,$ymin); + + if( $this->iEndLines ) { + $img->Line($xl,$ymax,$xr,$ymax); + $img->Line($xl,$ymin,$xr,$ymin); + } + + // A chance for subclasses to add things to the bar + // for data point i + $this->ModBox($img,$xscale,$yscale,$i,$xl,$xr,$neg); + + // Setup image maps + if( !empty($this->csimtargets[$i]) ) { + $this->csimareas.= 'csimareas .= ' href="'.$this->csimtargets[$i].'"'; + if( !empty($this->csimalts[$i]) ) { + $sval=$this->csimalts[$i]; + $this->csimareas .= " title=\"$sval\" alt=\"$sval\" "; + } + $this->csimareas.= " />\n"; + } + } + return true; + } + + // A hook for subclasses to modify the plot + function ModBox($img,$xscale,$yscale,$i,$xl,$xr,$neg) {} + +} // Class + +//=================================================== +// CLASS BoxPlot +//=================================================== +class BoxPlot extends StockPlot { + private $iPColor='black',$iNColor='white'; + + function __construct($datay,$datax=false) { + $this->iTupleSize=5; + parent::__construct($datay,$datax); + } + + function SetMedianColor($aPos,$aNeg) { + $this->iPColor = $aPos; + $this->iNColor = $aNeg; + } + + function ModBox($img,$xscale,$yscale,$i,$xl,$xr,$neg) { + if( $neg ) + $img->SetColor($this->iNColor); + else + $img->SetColor($this->iPColor); + + $y = $yscale->Translate($this->coords[0][$i*5+4]); + $img->Line($xl,$y,$xr,$y); + } +} + +/* EOF */ +?> diff --git a/Societes/ric/jpgraph/jpgraph_table.php b/Societes/ric/jpgraph/jpgraph_table.php new file mode 100755 index 00000000..7f55cc1d --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_table.php @@ -0,0 +1,1331 @@ +iVal = new Text($aVal); + $this->iRow = $aRow; + $this->iCol = $aCol; + $this->iPRow = $aRow; // Initialiy each cell is its own parent + $this->iPCol = $aCol; + $this->iIconConstrain = array(-1,-1); + } + + function Init($aTable) { + $this->iTable = $aTable; + } + + function SetCSIMTarget($aTarget,$aAlt='',$aWinTarget='') { + $this->iCSIMtarget = $aTarget; + $this->iCSIMwintarget = $aWinTarget; + $this->iCSIMalt = $aAlt; + } + + function GetCSIMArea() { + if( $this->iCSIMtarget !== '' ) + return $this->iCSIMArea; + else + return ''; + } + + function SetImageConstrain($aType,$aVal) { + if( !in_array($aType,array(TIMG_WIDTH, TIMG_HEIGHT)) ) { + JpGraphError::RaiseL(27015); + } + $this->iIconConstrain = array($aType,$aVal); + } + + function SetCountryFlag($aFlag,$aScale=1.0,$aMix=100,$aStdSize=3) { + $this->iIcon = new IconPlot(); + $this->iIcon->SetCountryFlag($aFlag,0,0,$aScale,$aMix,$aStdSize); + } + + function SetImage($aFile,$aScale=1.0,$aMix=100) { + $this->iIcon = new IconPlot($aFile,0,0,$aScale,$aMix); + } + + function SetImageFromString($aStr,$aScale=1.0,$aMix=100) { + $this->iIcon = new IconPlot("",0,0,$aScale,$aMix); + $this->iIcon->CreateFromString($aStr); + } + + function SetRowColSpan($aRowSpan,$aColSpan) { + $this->iRowSpan = $aRowSpan; + $this->iColSpan = $aColSpan; + $this->iMerged = true; + } + + function SetMerged($aPRow,$aPCol,$aFlg=true) { + $this->iMerged = $aFlg; + $this->iPRow=$aPRow; + $this->iPCol=$aPCol; + } + + function IsMerged() { + return $this->iMerged; + } + + function SetNumberFormat($aF) { + $this->iNumberFormat = $aF; + } + + function Set($aTxt) { + $this->iVal->Set($aTxt); + } + + function SetFont($aFF,$aFS,$aFSize) { + $this->iFF = $aFF; + $this->iFS = $aFS; + $this->iFSize = $aFSize; + $this->iVal->SetFont($aFF,$aFS,$aFSize); + } + + function SetFillColor($aColor) { + $this->iBGColor=$aColor; + } + + function SetFontColor($aColor) { + $this->iFontColor=$aColor; + } + + function SetGridColor($aLeft,$aTop=null,$aBottom=null,$aRight=null) { + if( $aLeft !== null ) $this->iGridColor[0] = $aLeft; + if( $aTop !== null ) $this->iGridColor[1] = $aTop; + if( $aBottom !== null ) $this->iGridColor[2] = $aBottom; + if( $aRight !== null )$this->iGridColor[3] = $aRight; + } + + function SetGridStyle($aLeft,$aTop=null,$aBottom=null,$aRight=null) { + if( $aLeft !== null ) $this->iGridStyle[0] = $aLeft; + if( $aTop !== null ) $this->iGridStyle[1] = $aTop; + if( $aBottom !== null ) $this->iGridStyle[2] = $aBottom; + if( $aRight !== null )$this->iGridStyle[3] = $aRight; + } + + function SetGridWeight($aLeft=null,$aTop=null,$aBottom=null,$aRight=null) { + $weight_arr = array($aLeft, $aTop, $aBottom, $aRight); + for ($i = 0; $i < count($weight_arr); $i++) { + if ($weight_arr[$i] === "") { + $weight_arr[$i] = 0; + } + } + if( $aLeft !== null ) $this->iGridWeight[0] = $weight_arr[0]; + if( $aTop !== null ) $this->iGridWeight[1] = $weight_arr[1]; + if( $aBottom !== null ) $this->iGridWeight[2] = $weight_arr[2]; + if( $aRight !== null ) $this->iGridWeight[3] = $weight_arr[3]; + } + + function SetMargin($aLeft,$aRight,$aTop,$aBottom) { + $this->iMarginLeft=$aLeft; + $this->iMarginRight=$aRight; + $this->iMarginTop=$aTop; + $this->iMarginBottom=$aBottom; + } + + function GetWidth($aImg) { + if( $this->iIcon !== null ) { + if( $this->iIconConstrain[0] == TIMG_WIDTH ) { + $this->iIcon->SetScale(1); + $tmp = $this->iIcon->GetWidthHeight(); + $this->iIcon->SetScale($this->iIconConstrain[1]/$tmp[0]); + } + elseif( $this->iIconConstrain[0] == TIMG_HEIGHT ) { + $this->iIcon->SetScale(1); + $tmp = $this->iIcon->GetWidthHeight(); + $this->iIcon->SetScale($this->iIconConstrain[1]/$tmp[1]); + } + $tmp = $this->iIcon->GetWidthHeight(); + $iwidth = $tmp[0]; + } + else { + $iwidth=0; + } + if( $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->dir == 0 ) { + $pwidth = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetWidth($aImg); + } + elseif( $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->dir == 90 ) { + $pwidth = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetFontHeight($aImg)+2; + } + else { + $pwidth = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetWidth($aImg)+2; + } + + $pcolspan = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iColSpan; + return round(max($iwidth,$pwidth)/$pcolspan) + $this->iMarginLeft + $this->iMarginRight; + } + + function GetHeight($aImg) { + if( $this->iIcon !== null ) { + if( $this->iIconConstrain[0] == TIMG_WIDTH ) { + $this->iIcon->SetScale(1); + $tmp = $this->iIcon->GetWidthHeight(); + $this->iIcon->SetScale($this->iIconConstrain[1]/$tmp[0]); + } + elseif( $this->iIconConstrain[0] == TIMG_HEIGHT ) { + $this->iIcon->SetScale(1); + $tmp = $this->iIcon->GetWidthHeight(); + $this->iIcon->SetScale($this->iIconConstrain[1]/$tmp[1]); + } + $tmp = $this->iIcon->GetWidthHeight(); + $iheight = $tmp[1]; + } + else { + $iheight = 0; + } + if( $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->dir == 0 ) { + $pheight = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetHeight($aImg); + } + else { + $pheight = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetHeight($aImg)+1; + } + $prowspan = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iRowSpan; + return round(max($iheight,$pheight)/$prowspan) + $this->iMarginTop + $this->iMarginBottom; + } + + function SetAlign($aHorAlign='left',$aVertAlign='bottom') { + $aHorAlign = strtolower($aHorAlign); + $aVertAlign = strtolower($aVertAlign); + $chk = array('left','right','center','bottom','top','middle'); + if( !in_array($aHorAlign,$chk) || !in_array($aVertAlign,$chk) ) { + JpGraphError::RaiseL(27011,$aHorAlign,$aVertAlign); + } + $this->iVertAlign = $aVertAlign; + $this->iHorAlign = $aHorAlign; + } + + function AdjustMarginsForGrid() { + if( $this->iCol > 0 ) { + switch( $this->iGridStyle[0] ) { + case TGRID_SINGLE: $wf=1; break; + case TGRID_DOUBLE: $wf=3; break; + case TGRID_DOUBLE2: $wf=4; break; + } + $this->iMarginLeft += $this->iGridWeight[0]*$wf; + } + if( $this->iRow > 0 ) { + switch( $this->iGridStyle[1] ) { + case TGRID_SINGLE: $wf=1; break; + case TGRID_DOUBLE: $wf=3; break; + case TGRID_DOUBLE2: $wf=4; break; + } + $this->iMarginTop += $this->iGridWeight[1]*$wf; + } + if( $this->iRow+$this->iRowSpan-1 < $this->iTable->iSize[0]-1 ) { + switch( $this->iGridStyle[2] ) { + case TGRID_SINGLE: $wf=1; break; + case TGRID_DOUBLE: $wf=3; break; + case TGRID_DOUBLE2: $wf=4; break; + } + $this->iMarginBottom += $this->iGridWeight[2]*$wf; + } + if( $this->iCol+$this->iColSpan-1 < $this->iTable->iSize[1]-1 ) { + switch( $this->iGridStyle[3] ) { + case TGRID_SINGLE: $wf=1; break; + case TGRID_DOUBLE: $wf=3; break; + case TGRID_DOUBLE2: $wf=4; break; + } + $this->iMarginRight += $this->iGridWeight[3]*$wf; + } + } + + function StrokeVGrid($aImg,$aX,$aY,$aWidth,$aHeight,$aDir=1) { + // Left or right grid line + // For the right we increase the X-pos and for the right we decrease it. This is + // determined by the direction argument. + $idx = $aDir==1 ? 0 : 3; + + // We don't stroke the grid lines that are on the edge of the table since this is + // the place of the border. + if( ( ($this->iCol > 0 && $idx==0) || ($this->iCol+$this->iColSpan-1 < $this->iTable->iSize[1]-1 && $idx==3) ) + && $this->iGridWeight[$idx] > 0 ) { + $x = $aDir==1 ? $aX : $aX + $aWidth-1; + $y = $aY+$aHeight-1; + $aImg->SetColor($this->iGridColor[$idx]); + switch( $this->iGridStyle[$idx] ) { + case TGRID_SINGLE: + for( $i=0; $i < $this->iGridWeight[$idx]; ++$i ) + $aImg->Line($x+$i*$aDir,$aY, $x+$i*$aDir,$y); + break; + + case TGRID_DOUBLE: + for( $i=0; $i < $this->iGridWeight[$idx]; ++$i ) + $aImg->Line($x+$i*$aDir,$aY, $x+$i*$aDir,$y); + $x += $this->iGridWeight[$idx]*2; + for( $i=0; $i < $this->iGridWeight[$idx]; ++$i ) + $aImg->Line($x+$i*$aDir,$aY, $x+$i*$aDir,$y); + break; + + case TGRID_DOUBLE2: + for( $i=0; $i < $this->iGridWeight[$idx]*2; ++$i ) + $aImg->Line($x+$i*$aDir,$aY,$x+$i*$aDir,$y); + $x += $this->iGridWeight[$idx]*3; + for( $i=0; $i < $this->iGridWeight[$idx]; ++$i ) + $aImg->Line($x+$i*$aDir,$aY, $x+$i*$aDir,$y); + break; + } + } + } + + function StrokeHGrid($aImg,$aX,$aY,$aWidth,$aHeight,$aDir=1) { + // Top or bottom grid line + // For the left we increase the X-pos and for the right we decrease it. This is + // determined by the direction argument. + $idx = $aDir==1 ? 1 : 2; + + // We don't stroke the grid lines that are on the edge of the table since this is + // the place of the border. + if( ( ($this->iRow > 0 && $idx==1) || ($this->iRow+$this->iRowSpan-1 < $this->iTable->iSize[0]-1 && $idx==2) ) + && $this->iGridWeight[$idx] > 0) { + $y = $aDir==1 ? $aY : $aY+$aHeight-1; + $x = $aX+$aWidth-1; + $aImg->SetColor($this->iGridColor[$idx]); + switch( $this->iGridStyle[$idx] ) { + case TGRID_SINGLE: + for( $i=0; $i < $this->iGridWeight[$idx]; ++$i ) + $aImg->Line($aX,$y+$i, $x,$y+$i); + break; + + case TGRID_DOUBLE: + for( $i=0; $i < $this->iGridWeight[$idx]; ++$i ) + $aImg->Line($aX,$y+$i, $x,$y+$i); + $y += $this->iGridWeight[$idx]*2; + for( $i=0; $i < $this->iGridWeight[$idx]; ++$i ) + $aImg->Line($aX,$y+$i, $x,$y+$i); + break; + + case TGRID_DOUBLE2: + for( $i=0; $i < $this->iGridWeight[$idx]*2; ++$i ) + $aImg->Line($aX,$y+$i, $x,$y+$i); + $y += $this->iGridWeight[$idx]*3; + for( $i=0; $i < $this->iGridWeight[$idx]; ++$i ) + $aImg->Line($aX,$y+$i, $x,$y+$i); + break; + } + } + } + + function Stroke($aImg,$aX,$aY,$aWidth,$aHeight) { + // If this is a merged cell we only stroke if it is the parent cell. + // The parent cell holds the merged cell block + if( $this->iMerged && ($this->iRow != $this->iPRow || $this->iCol != $this->iPCol) ) { + return; + } + + if( $this->iBGColor != '' ) { + $aImg->SetColor($this->iBGColor); + $aImg->FilledRectangle($aX,$aY,$aX+$aWidth-1,$aY+$aHeight-1); + } + + $coords = $aX.','.$aY.','.($aX+$aWidth-1).','.$aY.','.($aX+$aWidth-1).','.($aY+$aHeight-1).','.$aX.','.($aY+$aHeight-1); + if( ! empty($this->iCSIMtarget) ) { + $this->iCSIMArea = 'iCSIMwintarget) ) { + $this->iCSIMArea .= " target=\"".$this->iCSIMwintarget."\""; + } + if( ! empty($this->iCSIMalt) ) { + $this->iCSIMArea .= ' alt="'.$this->iCSIMalt.'" title="'.$this->iCSIMalt."\" "; + } + $this->iCSIMArea .= " />\n"; + } + + $this->StrokeVGrid($aImg,$aX,$aY,$aWidth,$aHeight); + $this->StrokeVGrid($aImg,$aX,$aY,$aWidth,$aHeight,-1); + $this->StrokeHGrid($aImg,$aX,$aY,$aWidth,$aHeight); + $this->StrokeHGrid($aImg,$aX,$aY,$aWidth,$aHeight,-1); + + if( $this->iIcon !== null ) { + switch( $this->iHorAlign ) { + case 'left': + $x = $aX+$this->iMarginLeft; + $hanchor='left'; + break; + case 'center': + case 'middle': + $x = $aX+$this->iMarginLeft+round(($aWidth-$this->iMarginLeft-$this->iMarginRight)/2); + $hanchor='center'; + break; + case 'right': + $x = $aX+$aWidth-$this->iMarginRight-1; + $hanchor='right'; + break; + default: + JpGraphError::RaiseL(27012,$this->iHorAlign); + } + + switch( $this->iVertAlign ) { + case 'top': + $y = $aY+$this->iMarginTop; + $vanchor='top'; + break; + case 'center': + case 'middle': + $y = $aY+$this->iMarginTop+round(($aHeight-$this->iMarginTop-$this->iMarginBottom)/2); + $vanchor='center'; + break; + case 'bottom': + $y = $aY+$aHeight-1-$this->iMarginBottom; + $vanchor='bottom'; + break; + default: + JpGraphError::RaiseL(27012,$this->iVertAlign); + } + $this->iIcon->SetAnchor($hanchor,$vanchor); + $this->iIcon->_Stroke($aImg,$x,$y); + } + $this->iVal->SetColor($this->iFontColor); + $this->iVal->SetFont($this->iFF,$this->iFS,$this->iFSize); + switch( $this->iHorAlign ) { + case 'left': + $x = $aX+$this->iMarginLeft; + break; + case 'center': + case 'middle': + $x = $aX+$this->iMarginLeft+round(($aWidth-$this->iMarginLeft-$this->iMarginRight)/2); + break; + case 'right': + $x = $aX+$aWidth-$this->iMarginRight-1; + break; + default: + JpGraphError::RaiseL(27012,$this->iHorAlign); + } + // A workaround for the shortcomings in the TTF font handling in GD + // The anchor position for rotated text (=90) is to "short" so we add + // an offset based on the actual font size + if( $this->iVal->dir != 0 && $this->iVal->font_family >= 10 ) { + $aY += 4 + round($this->iVal->font_size*0.8); + } + switch( $this->iVertAlign ) { + case 'top': + $y = $aY+$this->iMarginTop; + break; + case 'center': + case 'middle': + $y = $aY+$this->iMarginTop+round(($aHeight-$this->iMarginTop-$this->iMarginBottom)/2); + //$y -= round($this->iVal->GetFontHeight($aImg)/2); + $y -= round($this->iVal->GetHeight($aImg)/2); + break; + case 'bottom': + //$y = $aY+$aHeight-1-$this->iMarginBottom-$this->iVal->GetFontHeight($aImg); + $y = $aY+$aHeight-$this->iMarginBottom-$this->iVal->GetHeight($aImg); + break; + default: + JpGraphError::RaiseL(27012,$this->iVertAlign); + } + $this->iVal->SetAlign($this->iHorAlign,'top'); + if( $this->iNumberFormat !== null && is_numeric($this->iVal->t) ) { + $this->iVal->t = sprintf($this->iNumberFormat,$this->iVal->t); + } + $this->iVal->Stroke($aImg,$x,$y); + } +} + +//--------------------------------------------------------------------- +// CLASS GTextTable +// Description: +// Graphic text table +//--------------------------------------------------------------------- +class GTextTable { + public $iCells = array(), $iSize=array(0,0); // Need to be public since they are used by the cell + private $iWidth=0, $iHeight=0; + private $iColWidth=NULL,$iRowHeight=NULL; + private $iImg=NULL; + private $iXPos=0, $iYPos=0; + private $iScaleXPos=null,$iScaleYPos=null; + private $iBGColor=''; + private $iBorderColor='black',$iBorderWeight=1; + private $iInit=false; + private $iYAnchor='top',$iXAnchor='left'; + /*----------------------------------------------------------------- + * First and second phase constructors + *----------------------------------------------------------------- + */ + function __construct() { + // Empty + } + + function Init($aRows=0,$aCols=0,$aFillText='') { + $this->iSize[0] = $aRows; + $this->iSize[1] = $aCols; + for($i=0; $i < $this->iSize[0]; ++$i) { + for($j=0; $j < $this->iSize[1]; ++$j) { + $this->iCells[$i][$j] = new GTextTableCell($aFillText,$i,$j); + $this->iCells[$i][$j]->Init($this); + } + } + $this->iInit=true; + } + + /*----------------------------------------------------------------- + * Outer border of table + *----------------------------------------------------------------- + */ + function SetBorder($aWeight=1,$aColor='black') { + $this->iBorderColor=$aColor; + $this->iBorderWeight = $aWeight; + } + + + /*----------------------------------------------------------------- + * Position in graph of table + *----------------------------------------------------------------- + */ + function SetPos($aX,$aY) { + $this->iXPos = $aX; + $this->iYPos = $aY; + } + + function SetScalePos($aX,$aY) { + $this->iScaleXPos = $aX; + $this->iScaleYPos = $aY; + } + + function SetAnchorPos($aXAnchor,$aYAnchor='top') { + $this->iXAnchor = $aXAnchor; + $this->iYAnchor = $aYAnchor; + } + + /*----------------------------------------------------------------- + * Setup country flag in a cell + *----------------------------------------------------------------- + */ + function SetCellCountryFlag($aRow,$aCol,$aFlag,$aScale=1.0,$aMix=100,$aStdSize=3) { + $this->_chkR($aRow); + $this->_chkC($aCol); + $this->iCells[$aRow][$aCol]->SetCountryFlag($aFlag,$aScale,$aMix,$aStdSize); + + } + + /*----------------------------------------------------------------- + * Setup image in a cell + *----------------------------------------------------------------- + */ + function SetCellImage($aRow,$aCol,$aFile,$aScale=1.0,$aMix=100) { + $this->_chkR($aRow); + $this->_chkC($aCol); + $this->iCells[$aRow][$aCol]->SetImage($aFile,$aScale,$aMix); + } + + function SetRowImage($aRow,$aFile,$aScale=1.0,$aMix=100) { + $this->_chkR($aRow); + for($j=0; $j < $this->iSize[1]; ++$j) { + $this->iCells[$aRow][$j]->SetImage($aFile,$aScale,$aMix); + } + } + + function SetColImage($aCol,$aFile,$aScale=1.0,$aMix=100) { + $this->_chkC($aCol); + for($j=0; $j < $this->iSize[0]; ++$j) { + $this->iCells[$j][$aCol]->SetImage($aFile,$aScale,$aMix); + } + } + + function SetImage($aFileR1,$aScaleC1=null,$aMixR2=null,$aC2=null,$aFile=null,$aScale=1.0,$aMix=100) { + if( $aScaleC1 !== null && $aMixR2!==null && $aC2!==null && $aFile!==null ) { + $this->_chkR($aArgR1); $this->_chkC($aC1); + $this->_chkR($aR2); $this->_chkC($aC2); + } + else { + if( $aScaleC1 !== null ) $aScale = $aScaleC1; + if( $aMixR2 !== null ) $aMix = $aMixR2; + $aFile = $aFileR1; + $aMixR2 = $this->iSize[0]-1; $aFileR1 = 0; + $aC2 = $this->iSize[1]-1; $aScaleC1 = 0; + } + for($i=$aArgR1; $i <= $aR2; ++$i) { + for($j=$aC1; $j <= $aC2; ++$j) { + $this->iCells[$i][$j]->SetImage($aFile,$aScale,$aMix); + } + } + } + + function SetCellImageConstrain($aRow,$aCol,$aType,$aVal) { + $this->_chkR($aRow); + $this->_chkC($aCol); + $this->iCells[$aRow][$aCol]->SetImageConstrain($aType,$aVal); + } + + /*----------------------------------------------------------------- + * Generate a HTML version of the table + *----------------------------------------------------------------- + */ + function toString() { + $t = ''; + for($i=0; $i < $this->iSize[0]; ++$i) { + $t .= ''; + for($j=0; $j < $this->iSize[1]; ++$j) { + $t .= ''; + } + $t .= ''; + } + $t .= '
    '; + if( $this->iCells[$i][$j]->iMerged ) + $t .= 'M '; + $t .= 'val='.$this->iCells[$i][$j]->iVal->t; + $t .= ' (cs='.$this->iCells[$i][$j]->iColSpan. + ', rs='.$this->iCells[$i][$j]->iRowSpan.')'; + $t .= '
    '; + return $t; + } + + /*----------------------------------------------------------------- + * Specify data for table + *----------------------------------------------------------------- + */ + function Set($aArg1,$aArg2=NULL,$aArg3=NULL) { + if( $aArg2===NULL && $aArg3===NULL ) { + if( is_array($aArg1) ) { + if( is_array($aArg1[0]) ) { + $m = count($aArg1); + // Find the longest row + $n=0; + for($i=0; $i < $m; ++$i) + $n = max(count($aArg1[$i]),$n); + for($i=0; $i < $m; ++$i) { + for($j=0; $j < $n; ++$j) { + if( isset($aArg1[$i][$j]) ){ + $this->_setcell($i,$j,(string)$aArg1[$i][$j]); + } + else { + $this->_setcell($i,$j); + } + } + } + $this->iSize[0] = $m; + $this->iSize[1] = $n; + $this->iInit=true; + } + else { + JpGraphError::RaiseL(27001); + //('Illegal argument to GTextTable::Set(). Array must be 2 dimensional'); + } + } + else { + JpGraphError::RaiseL(27002); + //('Illegal argument to GTextTable::Set()'); + } + } + else { + // Must be in the form (row,col,val) + $this->_chkR($aArg1); + $this->_chkC($aArg2); + $this->_setcell($aArg1,$aArg2,(string)$aArg3); + } + } + + /*--------------------------------------------------------------------- + * Cell margin setting + *--------------------------------------------------------------------- + */ + function SetPadding($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aPad=null) { + if( $aC1 !== null && $aR2!==null && $aC2!==null && $aPad!==null ) { + $this->_chkR($aArgR1); $this->_chkC($aC1); + $this->_chkR($aR2); $this->_chkC($aC2); + } + else { + $aPad = $aArgR1; + $aR2 = $this->iSize[0]-1; $aArgR1 = 0; + $aC2 = $this->iSize[1]-1; $aC1 = 0; + } + for($i=$aArgR1; $i <= $aR2; ++$i) { + for($j=$aC1; $j <= $aC2; ++$j) { + $this->iCells[$i][$j]->SetMargin($aPad,$aPad,$aPad,$aPad); + } + } + } + + function SetRowPadding($aRow,$aPad) { + $this->_chkR($aRow); + for($j=0; $j < $this->iSize[1]; ++$j) { + $this->iCells[$aRow][$j]->SetMargin($aPad,$aPad,$aPad,$aPad); + } + } + + function SetColPadding($aCol,$aPad) { + $this->_chkC($aCol); + for($j=0; $j < $this->iSize[0]; ++$j) { + $this->iCells[$j][$aCol]->SetMargin($aPad,$aPad,$aPad,$aPad); + } + } + + function SetCellPadding($aRow,$aCol,$aPad) { + $this->_chkR($aRow); + $this->_chkC($aCol); + $this->iCells[$aRow][$aCol]->SetMargin($aPad,$aPad,$aPad,$aPad); + } + + + /*--------------------------------------------------------------------- + * Cell text orientation setting + *--------------------------------------------------------------------- + */ + function SetTextOrientation($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aO=null) { + if( $aC1 !== null && $aR2!==null && $aC2!==null && $aPad!==null ) { + $this->_chkR($aArgR1); $this->_chkC($aC1); + $this->_chkR($aR2); $this->_chkC($aC2); + } + else { + $aO = $aArgR1; + $aR2 = $this->iSize[0]-1; $aArgR1 = 0; + $aC2 = $this->iSize[1]-1; $aC1 = 0; + } + for($i=$aArgR1; $i <= $aR2; ++$i) { + for($j=$aC1; $j <= $aC2; ++$j) { + $this->iCells[$i][$j]->iVal->SetOrientation($aO); + } + } + } + + function SetRowTextOrientation($aRow,$aO) { + $this->_chkR($aRow); + for($j=0; $j < $this->iSize[1]; ++$j) { + $this->iCells[$aRow][$j]->iVal->SetOrientation($aO); + } + } + + function SetColTextOrientation($aCol,$aO) { + $this->_chkC($aCol); + for($j=0; $j < $this->iSize[0]; ++$j) { + $this->iCells[$j][$aCol]->iVal->SetOrientation($aO); + } + } + + function SetCellTextOrientation($aRow,$aCol,$aO) { + $this->_chkR($aRow); + $this->_chkC($aCol); + $this->iCells[$aRow][$aCol]->iVal->SetOrientation($aO); + } + + + + + /*--------------------------------------------------------------------- + * Font color setting + *--------------------------------------------------------------------- + */ + + function SetColor($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aArg=null) { + if( $aC1 !== null && $aR2!==null && $aC2!==null && $aArg!==null ) { + $this->_chkR($aArgR1); $this->_chkC($aC1); + $this->_chkR($aR2); $this->_chkC($aC2); + } + else { + $aArg = $aArgR1; + $aR2 = $this->iSize[0]-1; $aArgR1 = 0; + $aC2 = $this->iSize[1]-1; $aC1 = 0; + } + for($i=$aArgR1; $i <= $aR2; ++$i) { + for($j=$aC1; $j <= $aC2; ++$j) { + $this->iCells[$i][$j]->SetFontColor($aArg); + } + } + } + + function SetRowColor($aRow,$aColor) { + $this->_chkR($aRow); + for($j=0; $j < $this->iSize[1]; ++$j) { + $this->iCells[$aRow][$j]->SetFontColor($aColor); + } + } + + function SetColColor($aCol,$aColor) { + $this->_chkC($aCol); + for($i=0; $i < $this->iSize[0]; ++$i) { + $this->iCells[$i][$aCol]->SetFontColor($aColor); + } + } + + function SetCellColor($aRow,$aCol,$aColor) { + $this->_chkR($aRow); + $this->_chkC($aCol); + $this->iCells[$aRow][$aCol]->SetFontColor($aColor); + } + + /*--------------------------------------------------------------------- + * Fill color settings + *--------------------------------------------------------------------- + */ + + function SetFillColor($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aArg=null) { + if( $aC1 !== null && $aR2!==null && $aC2!==null && $aArg!==null ) { + $this->_chkR($aArgR1); $this->_chkC($aC1); + $this->_chkR($aR2); $this->_chkC($aC2); + for($i=$aArgR1; $i <= $aR2; ++$i) { + for($j=$aC1; $j <= $aC2; ++$j) { + $this->iCells[$i][$j]->SetFillColor($aArg); + } + } + } + else { + $this->iBGColor = $aArgR1; + } + } + + function SetRowFillColor($aRow,$aColor) { + $this->_chkR($aRow); + for($j=0; $j < $this->iSize[1]; ++$j) { + $this->iCells[$aRow][$j]->SetFillColor($aColor); + } + } + + function SetColFillColor($aCol,$aColor) { + $this->_chkC($aCol); + for($i=0; $i < $this->iSize[0]; ++$i) { + $this->iCells[$i][$aCol]->SetFillColor($aColor); + } + } + + function SetCellFillColor($aRow,$aCol,$aColor) { + $this->_chkR($aRow); + $this->_chkC($aCol); + $this->iCells[$aRow][$aCol]->SetFillColor($aColor); + } + + /*--------------------------------------------------------------------- + * Font family setting + *--------------------------------------------------------------------- + */ + function SetFont() { + $numargs = func_num_args(); + if( $numargs == 2 || $numargs == 3 ) { + $aFF = func_get_arg(0); + $aFS = func_get_arg(1); + if( $numargs == 3 ) + $aFSize=func_get_arg(2); + else + $aFSize=10; + $aR2 = $this->iSize[0]-1; $aR1 = 0; + $aC2 = $this->iSize[1]-1; $aC1 = 0; + + } + elseif($numargs == 6 || $numargs == 7 ) { + $aR1 = func_get_arg(0); $aC1 = func_get_arg(1); + $aR2 = func_get_arg(2); $aC2 = func_get_arg(3); + $aFF = func_get_arg(4); $aFS = func_get_arg(5); + if( $numargs == 7 ) + $aFSize=func_get_arg(6); + else + $aFSize=10; + } + else { + JpGraphError::RaiseL(27003); + //('Wrong number of arguments to GTextTable::SetColor()'); + } + $this->_chkR($aR1); $this->_chkC($aC1); + $this->_chkR($aR2); $this->_chkC($aC2); + for($i=$aR1; $i <= $aR2; ++$i) { + for($j=$aC1; $j <= $aC2; ++$j) { + $this->iCells[$i][$j]->SetFont($aFF,$aFS,$aFSize); + } + } + } + + function SetRowFont($aRow,$aFF,$aFS,$aFSize=10) { + $this->_chkR($aRow); + for($j=0; $j < $this->iSize[1]; ++$j) { + $this->iCells[$aRow][$j]->SetFont($aFF,$aFS,$aFSize); + } + } + + function SetColFont($aCol,$aFF,$aFS,$aFSize=10) { + $this->_chkC($aCol); + for($i=0; $i < $this->iSize[0]; ++$i) { + $this->iCells[$i][$aCol]->SetFont($aFF,$aFS,$aFSize); + } + } + + function SetCellFont($aRow,$aCol,$aFF,$aFS,$aFSize=10) { + $this->_chkR($aRow); + $this->_chkC($aCol); + $this->iCells[$aRow][$aCol]->SetFont($aFF,$aFS,$aFSize); + } + + /*--------------------------------------------------------------------- + * Cell align settings + *--------------------------------------------------------------------- + */ + + function SetAlign($aR1HAlign=null,$aC1VAlign=null,$aR2=null,$aC2=null,$aHArg=null,$aVArg='center') { + if( $aC1VAlign !== null && $aR2!==null && $aC2!==null && $aHArg!==null ) { + $this->_chkR($aR1HAlign); $this->_chkC($aC1VAlign); + $this->_chkR($aR2); $this->_chkC($aC2); + } + else { + if( $aR1HAlign === null ) { + JpGraphError::RaiseL(27010); + } + if( $aC1VAlign === null ) { + $aC1VAlign = 'center'; + } + $aHArg = $aR1HAlign; + $aVArg = $aC1VAlign === null ? 'center' : $aC1VAlign ; + $aR2 = $this->iSize[0]-1; $aR1HAlign = 0; + $aC2 = $this->iSize[1]-1; $aC1VAlign = 0; + } + for($i=$aR1HAlign; $i <= $aR2; ++$i) { + for($j=$aC1VAlign; $j <= $aC2; ++$j) { + $this->iCells[$i][$j]->SetAlign($aHArg,$aVArg); + } + } + } + + function SetCellAlign($aRow,$aCol,$aHorAlign,$aVertAlign='bottom') { + $this->_chkR($aRow); + $this->_chkC($aCol); + $this->iCells[$aRow][$aCol]->SetAlign($aHorAlign,$aVertAlign); + } + + function SetRowAlign($aRow,$aHorAlign,$aVertAlign='bottom') { + $this->_chkR($aRow); + for($j=0; $j < $this->iSize[1]; ++$j) { + $this->iCells[$aRow][$j]->SetAlign($aHorAlign,$aVertAlign); + } + } + + function SetColAlign($aCol,$aHorAlign,$aVertAlign='bottom') { + $this->_chkC($aCol); + for($i=0; $i < $this->iSize[0]; ++$i) { + $this->iCells[$i][$aCol]->SetAlign($aHorAlign,$aVertAlign); + } + } + + /*--------------------------------------------------------------------- + * Cell number format + *--------------------------------------------------------------------- + */ + + function SetNumberFormat($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aArg=null) { + if( $aC1 !== null && $aR2!==null && $aC2!==null && $aArg!==null ) { + $this->_chkR($aArgR1); $this->_chkC($aC1); + $this->_chkR($aR2); $this->_chkC($aC2); + } + else { + $aArg = $aArgR1; + $aR2 = $this->iSize[0]-1; $aArgR1 = 0; + $aC2 = $this->iSize[1]-1; $aC1 = 0; + } + if( !is_string($aArg) ) { + JpGraphError::RaiseL(27013); // argument must be a string + } + for($i=$aArgR1; $i <= $aR2; ++$i) { + for($j=$aC1; $j <= $aC2; ++$j) { + $this->iCells[$i][$j]->SetNumberFormat($aArg); + } + } + } + + function SetRowNumberFormat($aRow,$aF) { + $this->_chkR($aRow); + if( !is_string($aF) ) { + JpGraphError::RaiseL(27013); // argument must be a string + } + for($j=0; $j < $this->iSize[1]; ++$j) { + $this->iCells[$aRow][$j]->SetNumberFormat($aF); + } + } + + function SetColNumberFormat($aCol,$aF) { + $this->_chkC($aCol); + if( !is_string($aF) ) { + JpGraphError::RaiseL(27013); // argument must be a string + } + for($i=0; $i < $this->iSize[0]; ++$i) { + $this->iCells[$i][$aCol]->SetNumberFormat($aF); + } + } + + function SetCellNumberFormat($aRow,$aCol,$aF) { + $this->_chkR($aRow); $this->_chkC($aCol); + if( !is_string($aF) ) { + JpGraphError::RaiseL(27013); // argument must be a string + } + $this->iCells[$aRow][$aCol]->SetNumberFormat($aF); + } + + /*--------------------------------------------------------------------- + * Set row and column min size + *--------------------------------------------------------------------- + */ + + function SetMinColWidth($aColWidth,$aWidth=null) { + // If there is only one argument this means that all + // columns get set to the same width + if( $aWidth===null ) { + for($i=0; $i < $this->iSize[1]; ++$i) { + $this->iColWidth[$i] = $aColWidth; + } + } + else { + $this->_chkC($aColWidth); + $this->iColWidth[$aColWidth] = $aWidth; + } + } + + function SetMinRowHeight($aRowHeight,$aHeight=null) { + // If there is only one argument this means that all + // rows get set to the same height + if( $aHeight===null ) { + for($i=0; $i < $this->iSize[0]; ++$i) { + $this->iRowHeight[$i] = $aRowHeight; + } + } + else { + $this->_chkR($aRowHeight); + $this->iRowHeight[$aRowHeight] = $aHeight; + } + } + + /*--------------------------------------------------------------------- + * Grid line settings + *--------------------------------------------------------------------- + */ + + function SetGrid($aWeight=1,$aColor='black',$aStyle=TGRID_SINGLE) { + $rc = $this->iSize[0]; + $cc = $this->iSize[1]; + for($i=0; $i < $rc; ++$i) { + for($j=0; $j < $cc; ++$j) { + $this->iCells[$i][$j]->SetGridColor($aColor,$aColor); + $this->iCells[$i][$j]->SetGridWeight($aWeight,$aWeight); + $this->iCells[$i][$j]->SetGridStyle($aStyle); + } + } + } + + function SetColGrid($aCol,$aWeight=1,$aColor='black',$aStyle=TGRID_SINGLE) { + $this->_chkC($aCol); + for($i=0; $i < $this->iSize[0]; ++$i) { + $this->iCells[$i][$aCol]->SetGridWeight($aWeight); + $this->iCells[$i][$aCol]->SetGridColor($aColor); + $this->iCells[$i][$aCol]->SetGridStyle($aStyle); + } + } + + function SetRowGrid($aRow,$aWeight=1,$aColor='black',$aStyle=TGRID_SINGLE) { + $this->_chkR($aRow); + for($j=0; $j < $this->iSize[1]; ++$j) { + $this->iCells[$aRow][$j]->SetGridWeight(NULL,$aWeight); + $this->iCells[$aRow][$j]->SetGridColor(NULL,$aColor); + $this->iCells[$aRow][$j]->SetGridStyle(NULL,$aStyle); + } + } + + /*--------------------------------------------------------------------- + * Merge cells + *--------------------------------------------------------------------- + */ + + function MergeRow($aRow,$aHAlign='center',$aVAlign='center') { + $this->_chkR($aRow); + $this->MergeCells($aRow,0,$aRow,$this->iSize[1]-1,$aHAlign,$aVAlign); + } + + function MergeCol($aCol,$aHAlign='center',$aVAlign='center') { + $this->_chkC($aCol); + $this->MergeCells(0,$aCol,$this->iSize[0]-1,$aCol,$aHAlign,$aVAlign); + } + + function MergeCells($aR1,$aC1,$aR2,$aC2,$aHAlign='center',$aVAlign='center') { + if( $aR1 > $aR2 || $aC1 > $aC2 ) { + JpGraphError::RaiseL(27004); + //('GTextTable::MergeCells(). Specified cell range to be merged is not valid.'); + } + $this->_chkR($aR1); $this->_chkC($aC1); + $this->_chkR($aR2); $this->_chkC($aC2); + $rspan = $aR2-$aR1+1; + $cspan = $aC2-$aC1+1; + // Setup the parent cell for this merged group + if( $this->iCells[$aR1][$aC1]->IsMerged() ) { + JpGraphError::RaiseL(27005,$aR1,$aC1,$aR2,$aC2); + //("Cannot merge already merged cells in the range ($aR1,$aC1), ($aR2,$aC2)"); + } + $this->iCells[$aR1][$aC1]->SetRowColSpan($rspan,$cspan); + $this->iCells[$aR1][$aC1]->SetAlign($aHAlign,$aVAlign); + for($i=$aR1; $i <= $aR2; ++$i) { + for($j=$aC1; $j <= $aC2; ++$j) { + if( ! ($i == $aR1 && $j == $aC1) ) { + if( $this->iCells[$i][$j]->IsMerged() ) { + JpGraphError::RaiseL(27005,$aR1,$aC1,$aR2,$aC2); + //("Cannot merge already merged cells in the range ($aR1,$aC1), ($aR2,$aC2)"); + } + $this->iCells[$i][$j]->SetMerged($aR1,$aC1,true); + } + } + } + } + + + /*--------------------------------------------------------------------- + * CSIM methods + *--------------------------------------------------------------------- + */ + + function SetCSIMTarget($aTarget,$aAlt=null,$aAutoTarget=false) { + $m = $this->iSize[0]; + $n = $this->iSize[1]; + $csim = ''; + for($i=0; $i < $m; ++$i) { + for($j=0; $j < $n; ++$j) { + if( $aAutoTarget ) + $t = $aTarget."?row=$i&col=$j"; + else + $t = $aTarget; + $this->iCells[$i][$j]->SetCSIMTarget($t,$aAlt); + } + } + } + + function SetCellCSIMTarget($aRow,$aCol,$aTarget,$aAlt=null) { + $this->_chkR($aRow); + $this->_chkC($aCol); + $this->iCells[$aRow][$aCol]->SetCSIMTarget($aTarget,$aAlt); + } + + /*--------------------------------------------------------------------- + * Private methods + *--------------------------------------------------------------------- + */ + + function GetCSIMAreas() { + $m = $this->iSize[0]; + $n = $this->iSize[1]; + $csim = ''; + for($i=0; $i < $m; ++$i) { + for($j=0; $j < $n; ++$j) { + $csim .= $this->iCells[$i][$j]->GetCSIMArea(); + } + } + return $csim; + } + + function _chkC($aCol) { + if( ! $this->iInit ) { + JpGraphError::Raise(27014); // Table not initialized + } + if( $aCol < 0 || $aCol >= $this->iSize[1] ) + JpGraphError::RaiseL(27006,$aCol); + //("GTextTable:\nColumn argument ($aCol) is outside specified table size."); + } + + function _chkR($aRow) { + if( ! $this->iInit ) { + JpGraphError::Raise(27014); // Table not initialized + } + if( $aRow < 0 || $aRow >= $this->iSize[0] ) + JpGraphError::RaiseL(27007,$aRow); + //("GTextTable:\nRow argument ($aRow) is outside specified table size."); + } + + function _getScalePos() { + if( $this->iScaleXPos === null || $this->iScaleYPos === null ) { + return false; + } + return array($this->iScaleXPos, $this->iScaleYPos); + } + + function _autoSizeTable($aImg) { + // Get maximum column width and row height + $m = $this->iSize[0]; + $n = $this->iSize[1]; + $w=1;$h=1; + + // Get maximum row height per row + for($i=0; $i < $m; ++$i) { + $h=0; + for($j=0; $j < $n; ++$j) { + $h = max($h,$this->iCells[$i][$j]->GetHeight($aImg)); + } + if( isset($this->iRowHeight[$i]) ) { + $this->iRowHeight[$i] = max($h,$this->iRowHeight[$i]); + } + else + $this->iRowHeight[$i] = $h; + } + + // Get maximum col width per columns + for($j=0; $j < $n; ++$j) { + $w=0; + for($i=0; $i < $m; ++$i) { + $w = max($w,$this->iCells[$i][$j]->GetWidth($aImg)); + } + if( isset($this->iColWidth[$j]) ) { + $this->iColWidth[$j] = max($w,$this->iColWidth[$j]); + } + else + $this->iColWidth[$j] = $w; + } + } + + function _setcell($aRow,$aCol,$aVal='') { + if( isset($this->iCells[$aRow][$aCol]) ) { + $this->iCells[$aRow][$aCol]->Set($aVal); + } + else { + $this->iCells[$aRow][$aCol] = new GTextTableCell((string)$aVal,$aRow,$aCol); + $this->iCells[$aRow][$aCol]->Init($this); + } + } + + function StrokeWithScale($aImg,$aXScale,$aYScale) { + if( is_numeric($this->iScaleXPos) && is_numeric($this->iScaleYPos) ) { + $x = round($aXScale->Translate($this->iScaleXPos)); + $y = round($aYScale->Translate($this->iScaleYPos)); + $this->Stroke($aImg,$x,$y); + } + else { + $this->Stroke($aImg); + } + } + + function Stroke($aImg,$aX=NULL,$aY=NULL) { + if( $aX !== NULL && $aY !== NULL ) { + $this->iXPos = $aX; + $this->iYPos = $aY; + } + + $rc = $this->iSize[0]; // row count + $cc = $this->iSize[1]; // column count + + if( $rc == 0 || $cc == 0 ) { + JpGraphError::RaiseL(27009); + } + + // Adjust margins of each cell based on the weight of the grid. Each table grid line + // is actually occupying the left side and top part of each cell. + for($j=0; $j < $cc; ++$j) { + $this->iCells[0][$j]->iMarginTop += $this->iBorderWeight; + } + for($i=0; $i < $rc; ++$i) { + $this->iCells[$i][0]->iMarginLeft += $this->iBorderWeight; + } + for($i=0; $i < $rc; ++$i) { + for($j=0; $j < $cc; ++$j) { + $this->iCells[$i][$j]->AdjustMarginsForGrid(); + } + } + + // adjust row and column size depending on cell content + $this->_autoSizeTable($aImg); + + if( $this->iSize[1] != count($this->iColWidth) || $this->iSize[0] != count($this->iRowHeight) ) { + JpGraphError::RaiseL(27008); + //('Column and row size arrays must match the dimesnions of the table'); + } + + // Find out overall table size + $width=0; + for($i=0; $i < $cc; ++$i) { + $width += $this->iColWidth[$i]; + } + $height=0; + for($i=0; $i < $rc; ++$i) { + $height += $this->iRowHeight[$i]; + } + + // Adjust the X,Y position to alway be at the top left corner + // The anchor position, i.e. how the client want to interpret the specified + // x and y coordinate must be taken into account + switch( strtolower($this->iXAnchor) ) { + case 'left' : + break; + case 'center': + $this->iXPos -= round($width/2); + break; + case 'right': + $this->iXPos -= $width; + break; + } + switch( strtolower($this->iYAnchor) ) { + case 'top' : + break; + case 'center': + case 'middle': + $this->iYPos -= round($height/2); + break; + case 'bottom': + $this->iYPos -= $height; + break; + } + + // Set the overall background color of the table if set + if( $this->iBGColor !== '' ) { + $aImg->SetColor($this->iBGColor); + $aImg->FilledRectangle($this->iXPos,$this->iYPos,$this->iXPos+$width,$this->iYPos+$height); + } + + // Stroke all cells + $rpos=$this->iYPos; + for($i=0; $i < $rc; ++$i) { + $cpos=$this->iXPos; + for($j=0; $j < $cc; ++$j) { + // Calculate width and height of this cell if it is spanning + // more than one column or row + $cwidth=0; + for( $k=0; $k < $this->iCells[$i][$j]->iColSpan; ++$k ) { + $cwidth += $this->iColWidth[$j+$k]; + } + $cheight=0; + for( $k=0; $k < $this->iCells[$i][$j]->iRowSpan; ++$k ) { + $cheight += $this->iRowHeight[$i+$k]; + } + + $this->iCells[$i][$j]->Stroke($aImg,$cpos,$rpos,$cwidth,$cheight); + $cpos += $this->iColWidth[$j]; + } + $rpos += $this->iRowHeight[$i]; + } + + // Stroke outer border + $aImg->SetColor($this->iBorderColor); + if( $this->iBorderWeight == 1 ) + $aImg->Rectangle($this->iXPos,$this->iYPos,$this->iXPos+$width,$this->iYPos+$height); + else { + for( $i=0; $i < $this->iBorderWeight; ++$i ) + $aImg->Rectangle($this->iXPos+$i,$this->iYPos+$i, + $this->iXPos+$width-1+$this->iBorderWeight-$i, + $this->iYPos+$height-1+$this->iBorderWeight-$i); + } + } +} + +/* + EOF + */ +?> diff --git a/Societes/ric/jpgraph/jpgraph_text.inc.php b/Societes/ric/jpgraph/jpgraph_text.inc.php new file mode 100755 index 00000000..7d0f6687 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_text.inc.php @@ -0,0 +1,327 @@ +t = $aTxt; + $this->x = round($aXAbsPos); + $this->y = round($aYAbsPos); + $this->margin = 0; + } + //--------------- + // PUBLIC METHODS + // Set the string in the text object + function Set($aTxt) { + $this->t = $aTxt; + } + + // Alias for Pos() + function SetPos($aXAbsPos=0,$aYAbsPos=0,$aHAlign="left",$aVAlign="top") { + //$this->Pos($aXAbsPos,$aYAbsPos,$aHAlign,$aVAlign); + $this->x = $aXAbsPos; + $this->y = $aYAbsPos; + $this->halign = $aHAlign; + $this->valign = $aVAlign; + } + + function SetScalePos($aX,$aY) { + $this->iScalePosX = $aX; + $this->iScalePosY = $aY; + } + + // Specify alignment for the text + function Align($aHAlign,$aVAlign="top",$aParagraphAlign="") { + $this->halign = $aHAlign; + $this->valign = $aVAlign; + if( $aParagraphAlign != "" ) + $this->paragraph_align = $aParagraphAlign; + } + + // Alias + function SetAlign($aHAlign,$aVAlign="top",$aParagraphAlign="") { + $this->Align($aHAlign,$aVAlign,$aParagraphAlign); + } + + // Specifies the alignment for a multi line text + function ParagraphAlign($aAlign) { + $this->paragraph_align = $aAlign; + } + + // Specifies the alignment for a multi line text + function SetParagraphAlign($aAlign) { + $this->paragraph_align = $aAlign; + } + + function SetShadow($aShadowColor='gray',$aShadowWidth=3) { + $this->ishadowwidth=$aShadowWidth; + $this->shadow=$aShadowColor; + $this->boxed=true; + } + + function SetWordWrap($aCol) { + $this->iWordwrap = $aCol ; + } + + // Specify that the text should be boxed. fcolor=frame color, bcolor=border color, + // $shadow=drop shadow should be added around the text. + function SetBox($aFrameColor=array(255,255,255),$aBorderColor=array(0,0,0),$aShadowColor=false,$aCornerRadius=4,$aShadowWidth=3) { + if( $aFrameColor === false ) { + $this->boxed=false; + } + else { + $this->boxed=true; + } + $this->fcolor=$aFrameColor; + $this->bcolor=$aBorderColor; + // For backwards compatibility when shadow was just true or false + if( $aShadowColor === true ) { + $aShadowColor = 'gray'; + } + $this->shadow=$aShadowColor; + $this->icornerradius=$aCornerRadius; + $this->ishadowwidth=$aShadowWidth; + } + + function SetBox2($aFrameColor=array(255,255,255),$aBorderColor=array(0,0,0),$aShadowColor=false,$aCornerRadius=4,$aShadowWidth=3) { + $this->iBoxType=2; + $this->SetBox($aFrameColor,$aBorderColor,$aShadowColor,$aCornerRadius,$aShadowWidth); + } + + // Hide the text + function Hide($aHide=true) { + $this->hide=$aHide; + } + + // This looks ugly since it's not a very orthogonal design + // but I added this "inverse" of Hide() to harmonize + // with some classes which I designed more recently (especially) + // jpgraph_gantt + function Show($aShow=true) { + $this->hide=!$aShow; + } + + // Specify font + function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) { + $this->font_family=$aFamily; + $this->font_style=$aStyle; + $this->font_size=$aSize; + } + + // Center the text between $left and $right coordinates + function Center($aLeft,$aRight,$aYAbsPos=false) { + $this->x = $aLeft + ($aRight-$aLeft )/2; + $this->halign = "center"; + if( is_numeric($aYAbsPos) ) + $this->y = $aYAbsPos; + } + + // Set text color + function SetColor($aColor) { + $this->color = $aColor; + } + + function SetAngle($aAngle) { + $this->SetOrientation($aAngle); + } + + // Orientation of text. Note only TTF fonts can have an arbitrary angle + function SetOrientation($aDirection=0) { + if( is_numeric($aDirection) ) + $this->dir=$aDirection; + elseif( $aDirection=="h" ) + $this->dir = 0; + elseif( $aDirection=="v" ) + $this->dir = 90; + else + JpGraphError::RaiseL(25051);//(" Invalid direction specified for text."); + } + + // Total width of text + function GetWidth($aImg) { + $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size); + $w = $aImg->GetTextWidth($this->t,$this->dir); + return $w; + } + + // Hight of font + function GetFontHeight($aImg) { + $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size); + $h = $aImg->GetFontHeight(); + return $h; + + } + + function GetTextHeight($aImg) { + $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size); + $h = $aImg->GetTextHeight($this->t,$this->dir); + return $h; + } + + function GetHeight($aImg) { + // Synonym for GetTextHeight() + $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size); + $h = $aImg->GetTextHeight($this->t,$this->dir); + return $h; + } + + // Set the margin which will be interpretated differently depending + // on the context. + function SetMargin($aMarg) { + $this->margin = $aMarg; + } + + function StrokeWithScale($aImg,$axscale,$ayscale) { + if( $this->iScalePosX === null || $this->iScalePosY === null ) { + $this->Stroke($aImg); + } + else { + $this->Stroke($aImg, + round($axscale->Translate($this->iScalePosX)), + round($ayscale->Translate($this->iScalePosY))); + } + } + + function SetCSIMTarget($aURITarget,$aAlt='',$aWinTarget='') { + $this->iCSIMtarget = $aURITarget; + $this->iCSIMalt = $aAlt; + $this->iCSIMWinTarget = $aWinTarget; + } + + function GetCSIMareas() { + if( $this->iCSIMtarget !== '' ) { + return $this->iCSIMarea; + } + else { + return ''; + } + } + + // Display text in image + function Stroke($aImg,$x=null,$y=null) { + + if( $x !== null ) $this->x = round($x); + if( $y !== null ) $this->y = round($y); + + // Insert newlines + if( $this->iWordwrap > 0 ) { + $this->t = wordwrap($this->t,$this->iWordwrap,"\n"); + } + + // If position been given as a fraction of the image size + // calculate the absolute position + if( $this->x < 1 && $this->x > 0 ) $this->x *= $aImg->width; + if( $this->y < 1 && $this->y > 0 ) $this->y *= $aImg->height; + + $aImg->PushColor($this->color); + $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size); + $aImg->SetTextAlign($this->halign,$this->valign); + + if( $this->boxed ) { + if( $this->fcolor=="nofill" ) { + $this->fcolor=false; + } + + $oldweight=$aImg->SetLineWeight(1); + + if( $this->iBoxType == 2 && $this->font_family > FF_FONT2+2 ) { + + $bbox = $aImg->StrokeBoxedText2($this->x, $this->y, + $this->t, $this->dir, + $this->fcolor, + $this->bcolor, + $this->shadow, + $this->paragraph_align, + 2,4, + $this->icornerradius, + $this->ishadowwidth); + } + else { + $bbox = $aImg->StrokeBoxedText($this->x,$this->y,$this->t, + $this->dir,$this->fcolor,$this->bcolor,$this->shadow, + $this->paragraph_align,3,3,$this->icornerradius, + $this->ishadowwidth); + } + + $aImg->SetLineWeight($oldweight); + } + else { + $debug=false; + $bbox = $aImg->StrokeText($this->x,$this->y,$this->t,$this->dir,$this->paragraph_align,$debug); + } + + // Create CSIM targets + $coords = $bbox[0].','.$bbox[1].','.$bbox[2].','.$bbox[3].','.$bbox[4].','.$bbox[5].','.$bbox[6].','.$bbox[7]; + $this->iCSIMarea = "iCSIMtarget)."\" "; + if( trim($this->iCSIMalt) != '' ) { + $this->iCSIMarea .= " alt=\"".$this->iCSIMalt."\" "; + $this->iCSIMarea .= " title=\"".$this->iCSIMalt."\" "; + } + if( trim($this->iCSIMWinTarget) != '' ) { + $this->iCSIMarea .= " target=\"".$this->iCSIMWinTarget."\" "; + } + $this->iCSIMarea .= " />\n"; + + $aImg->PopColor($this->color); + } + + function __get($name) { + + if (strpos($name, 'raw_') !== false) { + // if $name == 'raw_left_margin' , return $this->_left_margin; + $variable_name = '_' . str_replace('raw_', '', $name); + return $this->$variable_name; + } + + $variable_name = '_' . $name; + + if (isset($this->$variable_name)) { + return $this->$variable_name * SUPERSAMPLING_SCALE; + } else { + JpGraphError::RaiseL('25132', $name); + } + } + + function __set($name, $value) { + $this->{'_'.$name} = $value; + } +} // Class + + +?> diff --git a/Societes/ric/jpgraph/jpgraph_theme.inc.php b/Societes/ric/jpgraph/jpgraph_theme.inc.php new file mode 100755 index 00000000..0cc54c47 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_theme.inc.php @@ -0,0 +1,136 @@ +color_index = 0; + } + /** + * + */ + abstract function GetColorList(); + + /** + * + */ + abstract function ApplyPlot($plot); + + + /** + * + */ + function SetupPlot($plot) { + if (is_array($plot)) { + foreach ($plot as $obj) { + $this->ApplyPlot($obj); + } + } else { + $this->ApplyPlot($plot); + } + } + + /** + * + */ + function ApplyGraph($graph) { + + $this->graph = $graph; + $method_name = ''; + + if (get_class($graph) == 'Graph') { + $method_name = 'SetupGraph'; + } else { + $method_name = 'Setup' . get_class($graph); + } + + if (method_exists($this, $method_name)) { + $this->$method_name($graph); + } else { + JpGraphError::RaiseL(30001, $method_name, $method_name); //Theme::%s() is not defined. \nPlease make %s(\$graph) function in your theme classs. + } + } + + /** + * + */ + function PreStrokeApply($graph) { + } + + /** + * + */ + function GetThemeColors($num = 30) { + $result_list = array(); + + $old_index = $this->color_index; + $this->color_index = 0; + $count = 0; + + $i = 0; + while (true) { + for ($j = 0; $j < count($this->GetColorList()); $j++) { + if (++$count > $num) { + break 2; + } + $result_list[] = $this->GetNextColor(); + } + $i++; + } + + $this->color_index = $old_index; + + return $result_list; + } + + /** + * + */ + function GetNextColor() { + $color_list = $this->GetColorList(); + + $color = null; + if (isset($color_list[$this->color_index])) { + $color = $color_list[$this->color_index]; + } else { + $color_count = count($color_list); + if ($color_count <= $this->color_index) { + $color_tmp = $color_list[$this->color_index % $color_count]; + $brightness = 1.0 - intval($this->color_index / $color_count) * 0.2; + $rgb = new RGB(); + $color = $color_tmp . ':' . $brightness; + $color = $rgb->Color($color); + $alpha = array_pop($color); + $color = $rgb->tryHexConversion($color); + if ($alpha) { + $color .= '@' . $alpha; + } + } + } + + $this->color_index++; + + return $color; + } + +} // Class + +?> diff --git a/Societes/ric/jpgraph/jpgraph_ttf.inc.php b/Societes/ric/jpgraph/jpgraph_ttf.inc.php new file mode 100755 index 00000000..5a1bc3e2 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_ttf.inc.php @@ -0,0 +1,631 @@ +g2312 == null ) { + include_once 'jpgraph_gb2312.php' ; + $this->g2312 = new GB2312toUTF8(); + } + return $this->g2312->gb2utf8($aTxt); + } + elseif( $aFF === FF_BIG5 ) { + if( !function_exists('iconv') ) { + JpGraphError::RaiseL(25006); + //('Usage of FF_CHINESE (FF_BIG5) font family requires that your PHP setup has the iconv() function. By default this is not compiled into PHP (needs the "--width-iconv" when configured).'); + } + return iconv('BIG5','UTF-8',$aTxt); + } + elseif( ASSUME_EUCJP_ENCODING && + ($aFF == FF_MINCHO || $aFF == FF_GOTHIC || $aFF == FF_PMINCHO || $aFF == FF_PGOTHIC) ) { + if( !function_exists('mb_convert_encoding') ) { + JpGraphError::RaiseL(25127); + } + return mb_convert_encoding($aTxt, 'UTF-8','EUC-JP'); + } + elseif( $aFF == FF_DAVID || $aFF == FF_MIRIAM || $aFF == FF_AHRON ) { + return LanguageConv::heb_iso2uni($aTxt); + } + else + return $aTxt; + } + + // Translate iso encoding to unicode + public static function iso2uni ($isoline){ + $uniline=''; + for ($i=0; $i < strlen($isoline); $i++){ + $thischar=substr($isoline,$i,1); + $charcode=ord($thischar); + $uniline.=($charcode>175) ? "&#" . (1040+($charcode-176)). ";" : $thischar; + } + return $uniline; + } + + // Translate greek iso encoding to unicode + public static function gr_iso2uni ($isoline) { + $uniline=''; + for ($i=0; $i < strlen($isoline); $i++) { + $thischar=substr($isoline,$i,1); + $charcode=ord($thischar); + $uniline.=($charcode>179 && $charcode!=183 && $charcode!=187 && $charcode!=189) ? "&#" . (900+($charcode-180)). ";" : $thischar; + } + return $uniline; + } + + // Translate greek win encoding to unicode + public static function gr_win2uni ($winline) { + $uniline=''; + for ($i=0; $i < strlen($winline); $i++) { + $thischar=substr($winline,$i,1); + $charcode=ord($thischar); + if ($charcode==161 || $charcode==162) { + $uniline.="&#" . (740+$charcode). ";"; + } + else { + $uniline.=(($charcode>183 && $charcode!=187 && $charcode!=189) || $charcode==180) ? "&#" . (900+($charcode-180)). ";" : $thischar; + } + } + return $uniline; + } + + public static function heb_iso2uni($isoline) { + $isoline = hebrev($isoline); + $o = ''; + + $n = strlen($isoline); + for($i=0; $i < $n; $i++) { + $c=ord( substr($isoline,$i,1) ); + $o .= ($c > 223) && ($c < 251) ? '&#'.(1264+$c).';' : chr($c); + } + return utf8_encode($o); + } +} + +//============================================================= +// CLASS TTF +// Description: Handle TTF font names and mapping and loading of +// font files +//============================================================= +class TTF { + private $font_files,$style_names; + + function __construct() { + + // String names for font styles to be used in error messages + $this->style_names=array( + FS_NORMAL =>'normal', + FS_BOLD =>'bold', + FS_ITALIC =>'italic', + FS_BOLDITALIC =>'bolditalic'); + + // File names for available fonts + $this->font_files=array( + FF_COURIER => array(FS_NORMAL =>'cour.ttf', + FS_BOLD =>'courbd.ttf', + FS_ITALIC =>'couri.ttf', + FS_BOLDITALIC =>'courbi.ttf' ), + FF_GEORGIA => array(FS_NORMAL =>'georgia.ttf', + FS_BOLD =>'georgiab.ttf', + FS_ITALIC =>'georgiai.ttf', + FS_BOLDITALIC =>'' ), + FF_TREBUCHE =>array(FS_NORMAL =>'trebuc.ttf', + FS_BOLD =>'trebucbd.ttf', + FS_ITALIC =>'trebucit.ttf', + FS_BOLDITALIC =>'trebucbi.ttf' ), + FF_VERDANA => array(FS_NORMAL =>'verdana.ttf', + FS_BOLD =>'verdanab.ttf', + FS_ITALIC =>'verdanai.ttf', + FS_BOLDITALIC =>'' ), + FF_TIMES => array(FS_NORMAL =>'times.ttf', + FS_BOLD =>'timesbd.ttf', + FS_ITALIC =>'timesi.ttf', + FS_BOLDITALIC =>'timesbi.ttf' ), + FF_COMIC => array(FS_NORMAL =>'comic.ttf', + FS_BOLD =>'comicbd.ttf', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + FF_ARIAL => array(FS_NORMAL =>'arial.ttf', + FS_BOLD =>'arialbd.ttf', + FS_ITALIC =>'ariali.ttf', + FS_BOLDITALIC =>'arialbi.ttf' ) , + FF_VERA => array(FS_NORMAL =>'Vera.ttf', + FS_BOLD =>'VeraBd.ttf', + FS_ITALIC =>'VeraIt.ttf', + FS_BOLDITALIC =>'VeraBI.ttf' ), + FF_VERAMONO => array(FS_NORMAL =>'VeraMono.ttf', + FS_BOLD =>'VeraMoBd.ttf', + FS_ITALIC =>'VeraMoIt.ttf', + FS_BOLDITALIC =>'VeraMoBI.ttf' ), + FF_VERASERIF=> array(FS_NORMAL =>'VeraSe.ttf', + FS_BOLD =>'VeraSeBd.ttf', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ) , + + /* Chinese fonts */ + FF_SIMSUN => array( + FS_NORMAL =>'simsun.ttc', + FS_BOLD =>'simhei.ttf', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + FF_CHINESE => array( + FS_NORMAL =>CHINESE_TTF_FONT, + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + FF_BIG5 => array( + FS_NORMAL =>CHINESE_TTF_FONT, + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + /* Japanese fonts */ + FF_MINCHO => array( + FS_NORMAL =>MINCHO_TTF_FONT, + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + FF_PMINCHO => array( + FS_NORMAL =>PMINCHO_TTF_FONT, + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + FF_GOTHIC => array( + FS_NORMAL =>GOTHIC_TTF_FONT, + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + FF_PGOTHIC => array( + FS_NORMAL =>PGOTHIC_TTF_FONT, + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + /* Hebrew fonts */ + FF_DAVID => array( + FS_NORMAL =>'DAVIDNEW.TTF', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + FF_MIRIAM => array( + FS_NORMAL =>'MRIAMY.TTF', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + FF_AHRON => array( + FS_NORMAL =>'ahronbd.ttf', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + /* Misc fonts */ + FF_DIGITAL => array( + FS_NORMAL =>'DIGIRU__.TTF', + FS_BOLD =>'Digirtu_.ttf', + FS_ITALIC =>'Digir___.ttf', + FS_BOLDITALIC =>'DIGIRT__.TTF' ), + + /* This is an experimental font for the speedometer development + FF_SPEEDO => array( + FS_NORMAL =>'Speedo.ttf', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + */ + + FF_COMPUTER => array( + FS_NORMAL =>'COMPUTER.TTF', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + FF_CALCULATOR => array( + FS_NORMAL =>'Triad_xs.ttf', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + /* Dejavu fonts */ + FF_DV_SANSSERIF => array( + FS_NORMAL =>array('DejaVuSans.ttf'), + FS_BOLD =>array('DejaVuSans-Bold.ttf','DejaVuSansBold.ttf'), + FS_ITALIC =>array('DejaVuSans-Oblique.ttf','DejaVuSansOblique.ttf'), + FS_BOLDITALIC =>array('DejaVuSans-BoldOblique.ttf','DejaVuSansBoldOblique.ttf') ), + + FF_DV_SANSSERIFMONO => array( + FS_NORMAL =>array('DejaVuSansMono.ttf','DejaVuMonoSans.ttf'), + FS_BOLD =>array('DejaVuSansMono-Bold.ttf','DejaVuMonoSansBold.ttf'), + FS_ITALIC =>array('DejaVuSansMono-Oblique.ttf','DejaVuMonoSansOblique.ttf'), + FS_BOLDITALIC =>array('DejaVuSansMono-BoldOblique.ttf','DejaVuMonoSansBoldOblique.ttf') ), + + FF_DV_SANSSERIFCOND => array( + FS_NORMAL =>array('DejaVuSansCondensed.ttf','DejaVuCondensedSans.ttf'), + FS_BOLD =>array('DejaVuSansCondensed-Bold.ttf','DejaVuCondensedSansBold.ttf'), + FS_ITALIC =>array('DejaVuSansCondensed-Oblique.ttf','DejaVuCondensedSansOblique.ttf'), + FS_BOLDITALIC =>array('DejaVuSansCondensed-BoldOblique.ttf','DejaVuCondensedSansBoldOblique.ttf') ), + + FF_DV_SERIF => array( + FS_NORMAL =>array('DejaVuSerif.ttf'), + FS_BOLD =>array('DejaVuSerif-Bold.ttf','DejaVuSerifBold.ttf'), + FS_ITALIC =>array('DejaVuSerif-Italic.ttf','DejaVuSerifItalic.ttf'), + FS_BOLDITALIC =>array('DejaVuSerif-BoldItalic.ttf','DejaVuSerifBoldItalic.ttf') ), + + FF_DV_SERIFCOND => array( + FS_NORMAL =>array('DejaVuSerifCondensed.ttf','DejaVuCondensedSerif.ttf'), + FS_BOLD =>array('DejaVuSerifCondensed-Bold.ttf','DejaVuCondensedSerifBold.ttf'), + FS_ITALIC =>array('DejaVuSerifCondensed-Italic.ttf','DejaVuCondensedSerifItalic.ttf'), + FS_BOLDITALIC =>array('DejaVuSerifCondensed-BoldItalic.ttf','DejaVuCondensedSerifBoldItalic.ttf') ), + + + /* Placeholders for defined fonts */ + FF_USERFONT1 => array( + FS_NORMAL =>'', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + FF_USERFONT2 => array( + FS_NORMAL =>'', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + FF_USERFONT3 => array( + FS_NORMAL =>'', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + ); + } + + //--------------- + // PUBLIC METHODS + // Create the TTF file from the font specification + function File($family,$style=FS_NORMAL) { + $fam = @$this->font_files[$family]; + if( !$fam ) { + JpGraphError::RaiseL(25046,$family);//("Specified TTF font family (id=$family) is unknown or does not exist. Please note that TTF fonts are not distributed with JpGraph for copyright reasons. You can find the MS TTF WEB-fonts (arial, courier etc) for download at http://corefonts.sourceforge.net/"); + } + $ff = @$fam[$style]; + + // There are several optional file names. They are tried in order + // and the first one found is used + if( !is_array($ff) ) { + $ff = array($ff); + } + + $jpgraph_font_dir = dirname(__FILE__).'/fonts/'; + + foreach ($ff as $font_file) { + // All font families are guaranteed to have the normal style + + if( $font_file==='' ) + JpGraphError::RaiseL(25047,$this->style_names[$style],$this->font_files[$family][FS_NORMAL]);//('Style "'.$this->style_names[$style].'" is not available for font family '.$this->font_files[$family][FS_NORMAL].'.'); + if( !$font_file ) { + JpGraphError::RaiseL(25048,$fam);//("Unknown font style specification [$fam]."); + } + + // check jpgraph/src/fonts dir + $jpgraph_font_file = $jpgraph_font_dir . $font_file; + if (file_exists($jpgraph_font_file) === true && is_readable($jpgraph_font_file) === true) { + $font_file = $jpgraph_font_file; + break; + } + + // check OS font dir + if ($family >= FF_MINCHO && $family <= FF_PGOTHIC) { + $font_file = MBTTF_DIR.$font_file; + } else { + $font_file = TTF_DIR.$font_file; + } + if (file_exists($font_file) === true && is_readable($font_file) === true) { + break; + } + } + + if( !file_exists($font_file) ) { + JpGraphError::RaiseL(25049,$font_file);//("Font file \"$font_file\" is not readable or does not exist."); + } + + return $font_file; + } + + function SetUserFont($aNormal,$aBold='',$aItalic='',$aBoldIt='') { + $this->font_files[FF_USERFONT] = + array(FS_NORMAL => $aNormal, + FS_BOLD => $aBold, + FS_ITALIC => $aItalic, + FS_BOLDITALIC => $aBoldIt ) ; + } + + function SetUserFont1($aNormal,$aBold='',$aItalic='',$aBoldIt='') { + $this->font_files[FF_USERFONT1] = + array(FS_NORMAL => $aNormal, + FS_BOLD => $aBold, + FS_ITALIC => $aItalic, + FS_BOLDITALIC => $aBoldIt ) ; + } + + function SetUserFont2($aNormal,$aBold='',$aItalic='',$aBoldIt='') { + $this->font_files[FF_USERFONT2] = + array(FS_NORMAL => $aNormal, + FS_BOLD => $aBold, + FS_ITALIC => $aItalic, + FS_BOLDITALIC => $aBoldIt ) ; + } + + function SetUserFont3($aNormal,$aBold='',$aItalic='',$aBoldIt='') { + $this->font_files[FF_USERFONT3] = + array(FS_NORMAL => $aNormal, + FS_BOLD => $aBold, + FS_ITALIC => $aItalic, + FS_BOLDITALIC => $aBoldIt ) ; + } + +} // Class + + +//============================================================================= +// CLASS SymChar +// Description: Code values for some commonly used characters that +// normally isn't available directly on the keyboard, for example +// mathematical and greek symbols. +//============================================================================= +class SymChar { + static function Get($aSymb,$aCapital=FALSE) { + $iSymbols = array( + /* Greek */ + array('alpha','03B1','0391'), + array('beta','03B2','0392'), + array('gamma','03B3','0393'), + array('delta','03B4','0394'), + array('epsilon','03B5','0395'), + array('zeta','03B6','0396'), + array('ny','03B7','0397'), + array('eta','03B8','0398'), + array('theta','03B8','0398'), + array('iota','03B9','0399'), + array('kappa','03BA','039A'), + array('lambda','03BB','039B'), + array('mu','03BC','039C'), + array('nu','03BD','039D'), + array('xi','03BE','039E'), + array('omicron','03BF','039F'), + array('pi','03C0','03A0'), + array('rho','03C1','03A1'), + array('sigma','03C3','03A3'), + array('tau','03C4','03A4'), + array('upsilon','03C5','03A5'), + array('phi','03C6','03A6'), + array('chi','03C7','03A7'), + array('psi','03C8','03A8'), + array('omega','03C9','03A9'), + /* Money */ + array('euro','20AC'), + array('yen','00A5'), + array('pound','20A4'), + /* Math */ + array('approx','2248'), + array('neq','2260'), + array('not','2310'), + array('def','2261'), + array('inf','221E'), + array('sqrt','221A'), + array('int','222B'), + /* Misc */ + array('copy','00A9'), + array('para','00A7'), + array('tm','2122'), /* Trademark symbol */ + array('rtm','00AE'), /* Registered trademark */ + array('degree','00b0'), + array('lte','2264'), /* Less than or equal */ + array('gte','2265'), /* Greater than or equal */ + + ); + + $n = count($iSymbols); + $i=0; + $found = false; + $aSymb = strtolower($aSymb); + while( $i < $n && !$found ) { + $found = $aSymb === $iSymbols[$i++][0]; + } + if( $found ) { + $ca = $iSymbols[--$i]; + if( $aCapital && count($ca)==3 ) + $s = $ca[2]; + else + $s = $ca[1]; + return sprintf('&#%04d;',hexdec($s)); + } + else + return ''; + } +} + + +?> diff --git a/Societes/ric/jpgraph/jpgraph_utils.inc.php b/Societes/ric/jpgraph/jpgraph_utils.inc.php new file mode 100755 index 00000000..f0d002c1 --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_utils.inc.php @@ -0,0 +1,685 @@ +iFunc = $aFunc; + $this->iXFunc = $aXFunc; + } + + function E($aXMin,$aXMax,$aSteps=50) { + $this->iMin = $aXMin; + $this->iMax = $aXMax; + $this->iStepSize = ($aXMax-$aXMin)/$aSteps; + + if( $this->iXFunc != '' ) + $t = 'for($i='.$aXMin.'; $i<='.$aXMax.'; $i += '.$this->iStepSize.') {$ya[]='.$this->iFunc.';$xa[]='.$this->iXFunc.';}'; + elseif( $this->iFunc != '' ) + $t = 'for($x='.$aXMin.'; $x<='.$aXMax.'; $x += '.$this->iStepSize.') {$ya[]='.$this->iFunc.';$xa[]=$x;} $x='.$aXMax.';$ya[]='.$this->iFunc.';$xa[]=$x;'; + else + JpGraphError::RaiseL(24001);//('FuncGenerator : No function specified. '); + + @eval($t); + + // If there is an error in the function specifcation this is the only + // way we can discover that. + if( empty($xa) || empty($ya) ) + JpGraphError::RaiseL(24002);//('FuncGenerator : Syntax error in function specification '); + + return array($xa,$ya); + } +} + + +//============================================================================= +// CLASS DateScaleUtils +// Description: Help to create a manual date scale +//============================================================================= +define('DSUTILS_MONTH',1); // Major and minor ticks on a monthly basis +define('DSUTILS_MONTH1',1); // Major and minor ticks on a monthly basis +define('DSUTILS_MONTH2',2); // Major ticks on a bi-monthly basis +define('DSUTILS_MONTH3',3); // Major icks on a tri-monthly basis +define('DSUTILS_MONTH6',4); // Major on a six-monthly basis +define('DSUTILS_WEEK1',5); // Major ticks on a weekly basis +define('DSUTILS_WEEK2',6); // Major ticks on a bi-weekly basis +define('DSUTILS_WEEK4',7); // Major ticks on a quod-weekly basis +define('DSUTILS_DAY1',8); // Major ticks on a daily basis +define('DSUTILS_DAY2',9); // Major ticks on a bi-daily basis +define('DSUTILS_DAY4',10); // Major ticks on a qoud-daily basis +define('DSUTILS_YEAR1',11); // Major ticks on a yearly basis +define('DSUTILS_YEAR2',12); // Major ticks on a bi-yearly basis +define('DSUTILS_YEAR5',13); // Major ticks on a five-yearly basis + + +class DateScaleUtils { + public static $iMin=0, $iMax=0; + + private static $starthour,$startmonth, $startday, $startyear; + private static $endmonth, $endyear, $endday; + private static $tickPositions=array(),$minTickPositions=array(); + private static $iUseWeeks = true; + + static function UseWeekFormat($aFlg) { + self::$iUseWeeks = $aFlg; + } + + static function doYearly($aType,$aMinor=false) { + $i=0; $j=0; + $m = self::$startmonth; + $y = self::$startyear; + + if( self::$startday == 1 ) { + self::$tickPositions[$i++] = mktime(0,0,0,$m,1,$y); + } + ++$m; + + + switch( $aType ) { + case DSUTILS_YEAR1: + for($y=self::$startyear; $y <= self::$endyear; ++$y ) { + if( $aMinor ) { + while( $m <= 12 ) { + if( !($y == self::$endyear && $m > self::$endmonth) ) { + self::$minTickPositions[$j++] = mktime(0,0,0,$m,1,$y); + } + ++$m; + } + $m=1; + } + self::$tickPositions[$i++] = mktime(0,0,0,1,1,$y); + } + break; + case DSUTILS_YEAR2: + $y=self::$startyear; + while( $y <= self::$endyear ) { + self::$tickPositions[$i++] = mktime(0,0,0,1,1,$y); + for($k=0; $k < 1; ++$k ) { + ++$y; + if( $aMinor ) { + self::$minTickPositions[$j++] = mktime(0,0,0,1,1,$y); + } + } + ++$y; + } + break; + case DSUTILS_YEAR5: + $y=self::$startyear; + while( $y <= self::$endyear ) { + self::$tickPositions[$i++] = mktime(0,0,0,1,1,$y); + for($k=0; $k < 4; ++$k ) { + ++$y; + if( $aMinor ) { + self::$minTickPositions[$j++] = mktime(0,0,0,1,1,$y); + } + } + ++$y; + } + break; + } + } + + static function doDaily($aType,$aMinor=false) { + $m = self::$startmonth; + $y = self::$startyear; + $d = self::$startday; + $h = self::$starthour; + $i=0;$j=0; + + if( $h == 0 ) { + self::$tickPositions[$i++] = mktime(0,0,0,$m,$d,$y); + } + $t = mktime(0,0,0,$m,$d,$y); + + switch($aType) { + case DSUTILS_DAY1: + while( $t <= self::$iMax ) { + $t = strtotime('+1 day',$t); + self::$tickPositions[$i++] = $t; + if( $aMinor ) { + self::$minTickPositions[$j++] = strtotime('+12 hours',$t); + } + } + break; + case DSUTILS_DAY2: + while( $t <= self::$iMax ) { + $t = strtotime('+1 day',$t); + if( $aMinor ) { + self::$minTickPositions[$j++] = $t; + } + $t = strtotime('+1 day',$t); + self::$tickPositions[$i++] = $t; + } + break; + case DSUTILS_DAY4: + while( $t <= self::$iMax ) { + for($k=0; $k < 3; ++$k ) { + $t = strtotime('+1 day',$t); + if( $aMinor ) { + self::$minTickPositions[$j++] = $t; + } + } + $t = strtotime('+1 day',$t); + self::$tickPositions[$i++] = $t; + } + break; + } + } + + static function doWeekly($aType,$aMinor=false) { + $hpd = 3600*24; + $hpw = 3600*24*7; + // Find out week number of min date + $thursday = self::$iMin + $hpd * (3 - (date('w', self::$iMin) + 6) % 7); + $week = 1 + (date('z', $thursday) - (11 - date('w', mktime(0, 0, 0, 1, 1, date('Y', $thursday)))) % 7) / 7; + $daynumber = date('w',self::$iMin); + if( $daynumber == 0 ) $daynumber = 7; + $m = self::$startmonth; + $y = self::$startyear; + $d = self::$startday; + $i=0;$j=0; + // The assumption is that the weeks start on Monday. If the first day + // is later in the week then the first week tick has to be on the following + // week. + if( $daynumber == 1 ) { + self::$tickPositions[$i++] = mktime(0,0,0,$m,$d,$y); + $t = mktime(0,0,0,$m,$d,$y) + $hpw; + } + else { + $t = mktime(0,0,0,$m,$d,$y) + $hpd*(8-$daynumber); + } + + switch($aType) { + case DSUTILS_WEEK1: + $cnt=0; + break; + case DSUTILS_WEEK2: + $cnt=1; + break; + case DSUTILS_WEEK4: + $cnt=3; + break; + } + while( $t <= self::$iMax ) { + self::$tickPositions[$i++] = $t; + for($k=0; $k < $cnt; ++$k ) { + $t += $hpw; + if( $aMinor ) { + self::$minTickPositions[$j++] = $t; + } + } + $t += $hpw; + } + } + + static function doMonthly($aType,$aMinor=false) { + $monthcount=0; + $m = self::$startmonth; + $y = self::$startyear; + $i=0; $j=0; + + // Skip the first month label if it is before the startdate + if( self::$startday == 1 ) { + self::$tickPositions[$i++] = mktime(0,0,0,$m,1,$y); + $monthcount=1; + } + if( $aType == 1 ) { + if( self::$startday < 15 ) { + self::$minTickPositions[$j++] = mktime(0,0,0,$m,15,$y); + } + } + ++$m; + + // Loop through all the years included in the scale + for($y=self::$startyear; $y <= self::$endyear; ++$y ) { + // Loop through all the months. There are three cases to consider: + // 1. We are in the first year and must start with the startmonth + // 2. We are in the end year and we must stop at last month of the scale + // 3. A year in between where we run through all the 12 months + $stopmonth = $y == self::$endyear ? self::$endmonth : 12; + while( $m <= $stopmonth ) { + switch( $aType ) { + case DSUTILS_MONTH1: + // Set minor tick at the middle of the month + if( $aMinor ) { + if( $m <= $stopmonth ) { + if( !($y==self::$endyear && $m==$stopmonth && self::$endday < 15) ) + self::$minTickPositions[$j++] = mktime(0,0,0,$m,15,$y); + } + } + // Major at month + // Get timestamp of first hour of first day in each month + self::$tickPositions[$i++] = mktime(0,0,0,$m,1,$y); + + break; + case DSUTILS_MONTH2: + if( $aMinor ) { + // Set minor tick at start of each month + self::$minTickPositions[$j++] = mktime(0,0,0,$m,1,$y); + } + + // Major at every second month + // Get timestamp of first hour of first day in each month + if( $monthcount % 2 == 0 ) { + self::$tickPositions[$i++] = mktime(0,0,0,$m,1,$y); + } + break; + case DSUTILS_MONTH3: + if( $aMinor ) { + // Set minor tick at start of each month + self::$minTickPositions[$j++] = mktime(0,0,0,$m,1,$y); + } + // Major at every third month + // Get timestamp of first hour of first day in each month + if( $monthcount % 3 == 0 ) { + self::$tickPositions[$i++] = mktime(0,0,0,$m,1,$y); + } + break; + case DSUTILS_MONTH6: + if( $aMinor ) { + // Set minor tick at start of each month + self::$minTickPositions[$j++] = mktime(0,0,0,$m,1,$y); + } + // Major at every third month + // Get timestamp of first hour of first day in each month + if( $monthcount % 6 == 0 ) { + self::$tickPositions[$i++] = mktime(0,0,0,$m,1,$y); + } + break; + } + ++$m; + ++$monthcount; + } + $m=1; + } + + // For the case where all dates are within the same month + // we want to make sure we have at least two ticks on the scale + // since the scale want work properly otherwise + if(self::$startmonth == self::$endmonth && self::$startyear == self::$endyear && $aType==1 ) { + self::$tickPositions[$i++] = mktime(0 ,0 ,0, self::$startmonth + 1, 1, self::$startyear); + } + + return array(self::$tickPositions,self::$minTickPositions); + } + + static function GetTicks($aData,$aType=1,$aMinor=false,$aEndPoints=false) { + $n = count($aData); + return self::GetTicksFromMinMax($aData[0],$aData[$n-1],$aType,$aMinor,$aEndPoints); + } + + static function GetAutoTicks($aMin,$aMax,$aMaxTicks=10,$aMinor=false) { + $diff = $aMax - $aMin; + $spd = 3600*24; + $spw = $spd*7; + $spm = $spd*30; + $spy = $spd*352; + + if( self::$iUseWeeks ) + $w = 'W'; + else + $w = 'd M'; + + // Decision table for suitable scales + // First value: Main decision point + // Second value: Array of formatting depending on divisor for wanted max number of ticks. ,.. + $tt = array( + array($spw, array(1,DSUTILS_DAY1,'d M',2,DSUTILS_DAY2,'d M',-1,DSUTILS_DAY4,'d M')), + array($spm, array(1,DSUTILS_DAY1,'d M',2,DSUTILS_DAY2,'d M',4,DSUTILS_DAY4,'d M',7,DSUTILS_WEEK1,$w,-1,DSUTILS_WEEK2,$w)), + array($spy, array(1,DSUTILS_DAY1,'d M',2,DSUTILS_DAY2,'d M',4,DSUTILS_DAY4,'d M',7,DSUTILS_WEEK1,$w,14,DSUTILS_WEEK2,$w,30,DSUTILS_MONTH1,'M',60,DSUTILS_MONTH2,'M',-1,DSUTILS_MONTH3,'M')), + array(-1, array(30,DSUTILS_MONTH1,'M-Y',60,DSUTILS_MONTH2,'M-Y',90,DSUTILS_MONTH3,'M-Y',180,DSUTILS_MONTH6,'M-Y',352,DSUTILS_YEAR1,'Y',704,DSUTILS_YEAR2,'Y',-1,DSUTILS_YEAR5,'Y'))); + + $ntt = count($tt); + $nd = floor($diff/$spd); + for($i=0; $i < $ntt; ++$i ) { + if( $diff <= $tt[$i][0] || $i==$ntt-1) { + $t = $tt[$i][1]; + $n = count($t)/3; + for( $j=0; $j < $n; ++$j ) { + if( $nd/$t[3*$j] <= $aMaxTicks || $j==$n-1) { + $type = $t[3*$j+1]; + $fs = $t[3*$j+2]; + list($tickPositions,$minTickPositions) = self::GetTicksFromMinMax($aMin,$aMax,$type,$aMinor); + return array($fs,$tickPositions,$minTickPositions,$type); + } + } + } + } + } + + static function GetTicksFromMinMax($aMin,$aMax,$aType,$aMinor=false,$aEndPoints=false) { + self::$starthour = date('G',$aMin); + self::$startmonth = date('n',$aMin); + self::$startday = date('j',$aMin); + self::$startyear = date('Y',$aMin); + self::$endmonth = date('n',$aMax); + self::$endyear = date('Y',$aMax); + self::$endday = date('j',$aMax); + self::$iMin = $aMin; + self::$iMax = $aMax; + + if( $aType <= DSUTILS_MONTH6 ) { + self::doMonthly($aType,$aMinor); + } + elseif( $aType <= DSUTILS_WEEK4 ) { + self::doWeekly($aType,$aMinor); + } + elseif( $aType <= DSUTILS_DAY4 ) { + self::doDaily($aType,$aMinor); + } + elseif( $aType <= DSUTILS_YEAR5 ) { + self::doYearly($aType,$aMinor); + } + else { + JpGraphError::RaiseL(24003); + } + // put a label at the very left data pos + if( $aEndPoints ) { + $tickPositions[$i++] = $aData[0]; + } + + // put a label at the very right data pos + if( $aEndPoints ) { + $tickPositions[$i] = $aData[$n-1]; + } + + return array(self::$tickPositions,self::$minTickPositions); + } +} + +//============================================================================= +// Class ReadFileData +//============================================================================= +Class ReadFileData { + //---------------------------------------------------------------------------- + // Desciption: + // Read numeric data from a file. + // Each value should be separated by either a new line or by a specified + // separator character (default is ','). + // Before returning the data each value is converted to a proper float + // value. The routine is robust in the sense that non numeric data in the + // file will be discarded. + // + // Returns: + // The number of data values read on success, FALSE on failure + //---------------------------------------------------------------------------- + static function FromCSV($aFile,&$aData,$aSepChar=',',$aMaxLineLength=1024) { + $rh = @fopen($aFile,'r'); + if( $rh === false ) { + return false; + } + $tmp = array(); + $lineofdata = fgetcsv($rh, 1000, ','); + while ( $lineofdata !== FALSE) { + $tmp = array_merge($tmp,$lineofdata); + $lineofdata = fgetcsv($rh, $aMaxLineLength, $aSepChar); + } + fclose($rh); + + // Now make sure that all data is numeric. By default + // all data is read as strings + $n = count($tmp); + $aData = array(); + $cnt=0; + for($i=0; $i < $n; ++$i) { + if( $tmp[$i] !== "" ) { + $aData[$cnt++] = floatval($tmp[$i]); + } + } + return $cnt; + } + + //---------------------------------------------------------------------------- + // Desciption: + // Read numeric data from a file. + // Each value should be separated by either a new line or by a specified + // separator character (default is ','). + // Before returning the data each value is converted to a proper float + // value. The routine is robust in the sense that non numeric data in the + // file will be discarded. + // + // Options: + // 'separator' => ',', + // 'enclosure' => '"', + // 'readlength' => 1024, + // 'ignore_first' => false, + // 'first_as_key' => false + // 'escape' => '\', # PHP >= 5.3 only + // + // Returns: + // The number of lines read on success, FALSE on failure + //---------------------------------------------------------------------------- + static function FromCSV2($aFile, &$aData, $aOptions = array()) { + $aDefaults = array( + 'separator' => ',', + 'enclosure' => chr(34), + 'escape' => chr(92), + 'readlength' => 1024, + 'ignore_first' => false, + 'first_as_key' => false + ); + + $aOptions = array_merge( + $aDefaults, is_array($aOptions) ? $aOptions : array()); + + if( $aOptions['first_as_key'] ) { + $aOptions['ignore_first'] = true; + } + + $rh = @fopen($aFile, 'r'); + + if( $rh === false ) { + return false; + } + + $aData = array(); + $aLine = fgetcsv($rh, + $aOptions['readlength'], + $aOptions['separator'], + $aOptions['enclosure'] + /*, $aOptions['escape'] # PHP >= 5.3 only */ + ); + + // Use numeric array keys for the columns by default + // If specified use first lines values as assoc keys instead + $keys = array_keys($aLine); + if( $aOptions['first_as_key'] ) { + $keys = array_values($aLine); + } + + $num_lines = 0; + $num_cols = count($aLine); + + while ($aLine !== false) { + if( is_array($aLine) && count($aLine) != $num_cols ) { + JpGraphError::RaiseL(24004); + // 'ReadCSV2: Column count mismatch in %s line %d' + } + + // fgetcsv returns NULL for empty lines + if( !is_null($aLine) ) { + $num_lines++; + + if( !($aOptions['ignore_first'] && $num_lines == 1) && is_numeric($aLine[0]) ) { + for( $i = 0; $i < $num_cols; $i++ ) { + $aData[ $keys[$i] ][] = floatval($aLine[$i]); + } + } + } + + $aLine = fgetcsv($rh, + $aOptions['readlength'], + $aOptions['separator'], + $aOptions['enclosure'] + /*, $aOptions['escape'] # PHP >= 5.3 only*/ + ); + } + + fclose($rh); + + if( $aOptions['ignore_first'] ) { + $num_lines--; + } + + return $num_lines; + } + + // Read data from two columns in a plain text file + static function From2Col($aFile, $aCol1, $aCol2, $aSepChar=' ') { + $lines = @file($aFile,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES); + if( $lines === false ) { + return false; + } + $s = '/[\s]+/'; + if( $aSepChar == ',' ) { + $s = '/[\s]*,[\s]*/'; + } + elseif( $aSepChar == ';' ) { + $s = '/[\s]*;[\s]*/'; + } + foreach( $lines as $line => $datarow ) { + $split = preg_split($s,$datarow); + $aCol1[] = floatval(trim($split[0])); + $aCol2[] = floatval(trim($split[1])); + } + + return count($lines); + } + + // Read data from one columns in a plain text file + static function From1Col($aFile, $aCol1) { + $lines = @file($aFile,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES); + if( $lines === false ) { + return false; + } + foreach( $lines as $line => $datarow ) { + $aCol1[] = floatval(trim($datarow)); + } + + return count($lines); + } + + static function FromMatrix($aFile,$aSepChar=' ') { + $lines = @file($aFile,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES); + if( $lines === false ) { + return false; + } + $mat = array(); + $reg = '/'.$aSepChar.'/'; + foreach( $lines as $line => $datarow ) { + $row = preg_split($reg,trim($datarow)); + foreach ($row as $key => $cell ) { + $row[$key] = floatval(trim($cell)); + } + $mat[] = $row; + } + return $mat; + } + + +} + +define('__LR_EPSILON', 1.0e-8); +//============================================================================= +// Class LinearRegression +//============================================================================= +class LinearRegression { + private $ix=array(),$iy=array(); + private $ib=0, $ia=0; + private $icalculated=false; + public $iDet=0, $iCorr=0, $iStdErr=0; + + public function __construct($aDataX,$aDataY) { + if( count($aDataX) !== count($aDataY) ) { + JpGraph::Raise('LinearRegression: X and Y data array must be of equal length.'); + } + $this->ix = $aDataX; + $this->iy = $aDataY; + } + + public function Calc() { + + $this->icalculated = true; + + $n = count($this->ix); + $sx2 = 0 ; + $sy2 = 0 ; + $sxy = 0 ; + $sx = 0 ; + $sy = 0 ; + + for( $i=0; $i < $n; ++$i ) { + $sx2 += $this->ix[$i] * $this->ix[$i]; + $sy2 += $this->iy[$i] * $this->iy[$i]; + $sxy += $this->ix[$i] * $this->iy[$i]; + $sx += $this->ix[$i]; + $sy += $this->iy[$i]; + } + + if( $n*$sx2 - $sx*$sx > __LR_EPSILON ) { + $this->ib = ($n*$sxy - $sx*$sy) / ( $n*$sx2 - $sx*$sx ); + $this->ia = ( $sy - $this->ib*$sx ) / $n; + + $sx = $this->ib * ( $sxy - $sx*$sy/$n ); + $sy2 = $sy2 - $sy*$sy/$n; + $sy = $sy2 - $sx; + + $this->iDet = $sx / $sy2; + $this->iCorr = sqrt($this->iDet); + if( $n > 2 ) { + $this->iStdErr = sqrt( $sy / ($n-2) ); + } + else { + $this->iStdErr = NAN ; + } + } + else { + $this->ib = 0; + $this->ia = 0; + } + + } + + public function GetAB() { + if( $this->icalculated == false ) + $this->Calc(); + return array($this->ia, $this->ib); + } + + public function GetStat() { + if( $this->icalculated == false ) + $this->Calc(); + return array($this->iStdErr, $this->iCorr, $this->iDet); + } + + public function GetY($aMinX, $aMaxX, $aStep=1) { + if( $this->icalculated == false ) + $this->Calc(); + + $yy = array(); + $i = 0; + for( $x=$aMinX; $x <= $aMaxX; $x += $aStep ) { + $xx[$i ] = $x; + $yy[$i++] = $this->ia + $this->ib * $x; + } + + return array($xx,$yy); + } + +} + +?> diff --git a/Societes/ric/jpgraph/jpgraph_windrose.php b/Societes/ric/jpgraph/jpgraph_windrose.php new file mode 100755 index 00000000..6ff205cb --- /dev/null +++ b/Societes/ric/jpgraph/jpgraph_windrose.php @@ -0,0 +1,1566 @@ +iZeroSum=0; + foreach( $aData as $idx => $legdata ) { + $legsum = array_sum($legdata); + $maxnum = max($maxnum,count($legdata)-1); + $max = max($legsum-$legdata[0],$max); + $totlegsum += $legsum; + $this->iZeroSum += $legdata[0] ; + } + if( round($totlegsum) > 100 ) { + JpGraphError::RaiseL(22001,$legsum); + //("Total percentage for all windrose legs in a windrose plot can not exceed 100% !\n(Current max is: ".$legsum.')'); + } + $this->iMax = $max ; + $this->iMaxNum = $maxnum; + $this->iNumCirc = $this->GetNumCirc(); + $this->iMaxVal = $this->iNumCirc * $this->iDelta ; + } + + // Return number of grid circles + function GetNumCirc() { + // Never return less than 1 circles + $num = ceil($this->iMax / $this->iDelta); + return max(1,$num) ; + } + + function SetMaxValue($aMax) { + $this->iMax = $aMax; + $this->iNumCirc = $this->GetNumCirc(); + $this->iMaxVal = $this->iNumCirc * $this->iDelta ; + } + + // Set step size for circular grid + function Set($aMax,$aDelta=null) { + if( $aDelta==null ) { + $this->SetMaxValue($aMax); + return; + } + $this->iDelta = $aDelta; + $this->iNumCirc = ceil($aMax/$aDelta); //$this->GetNumCirc(); + $this->iMaxVal = $this->iNumCirc * $this->iDelta ; + $this->iMax=$aMax; + // Remember that user has specified interval so don't + // do autoscaling + $this->iManualScale = true; + } + + function AutoScale($aRadius,$aMinDist=30) { + + if( $this->iManualScale ) return; + + // Make sure distance (in pixels) between two circles + // is never less than $aMinDist pixels + $tst = ceil($aRadius / $this->iNumCirc) ; + + while( $tst <= $aMinDist && $this->iDelta < 100 ) { + $this->iDelta += 5; + $tst = ceil($aRadius / $this->GetNumCirc()) ; + } + + if( $this->iDelta >= 100 ) { + JpGraphError::RaiseL(22002);//('Graph is too small to have a scale. Please make the graph larger.'); + } + + // If the distance is to large try with multiples of 2 instead + if( $tst > $aMinDist * 3 ) { + $this->iDelta = 2; + $tst = ceil($aRadius / $this->iNumCirc) ; + + while( $tst <= $aMinDist && $this->iDelta < 100 ) { + $this->iDelta += 2; + $tst = ceil($aRadius / $this->GetNumCirc()) ; + } + + if( $this->iDelta >= 100 ) { + JpGraphError::RaiseL(22002); //('Graph is too small to have a scale. Please make the graph larger.'); + } + } + + $this->iNumCirc = $this->GetNumCirc(); + $this->iMaxVal = $this->iNumCirc * $this->iDelta ; + } + + // Return max of all leg values + function GetMax() { + return $this->iMax; + } + + function Hide($aFlg=true) { + $this->iHideLabels = $aFlg; + } + + function SetAngle($aAngle) { + $this->iAngle = $aAngle ; + } + + // Translate a Leg value to radius distance + function RelTranslate($aVal,$r,$ri) { + $tv = round($aVal/$this->iMaxVal*($r-$ri)); + return $tv ; + } + + function SetLabelAlign($aAlign) { + $this->iLblAlign = $aAlign ; + } + + function SetLabelFormat($aFmt) { + $this->iLblFmt = $aFmt ; + } + + function SetLabelFillColor($aBkgColor,$aBorderColor=false) { + + $this->iFontBkgColor = $aBkgColor; + if( $aBorderColor === false ) { + $this->iFontFrameColor = $aBkgColor; + } + else { + $this->iFontFrameColor = $aBorderColor; + } + } + + function SetFontColor($aColor) { + $this->iFontColor = $aColor ; + $this->iZFontColor = $aColor ; + } + + function SetFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) { + $this->iFontFamily = $aFontFamily ; + $this->iFontStyle = $aFontStyle ; + $this->iFontSize = $aFontSize ; + $this->SetZFont($aFontFamily,$aFontStyle,$aFontSize); + } + + function SetZFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) { + $this->iZFontFamily = $aFontFamily ; + $this->iZFontStyle = $aFontStyle ; + $this->iZFontSize = $aFontSize ; + } + + function SetZeroLabel($aTxt) { + $this->iLblZeroTxt = $aTxt ; + } + + function SetZFontColor($aColor) { + $this->iZFontColor = $aColor ; + } + + function StrokeLabels($aImg,$xc,$yc,$ri,$rr) { + + if( $this->iHideLabels ) return; + + // Setup some convinient vairables + $a = $this->iAngle * M_PI/180.0; + $n = $this->iNumCirc; + $d = $this->iDelta; + + // Setup the font and font color + $val = new Text(); + $val->SetFont($this->iFontFamily,$this->iFontStyle,$this->iFontSize); + $val->SetColor($this->iFontColor); + + if( $this->iFontBkgColor !== false ) { + $val->SetBox($this->iFontBkgColor,$this->iFontFrameColor); + } + + // Position the labels relative to the radiant circles + if( $this->iLblAlign == LBLALIGN_TOP ) { + if( $a > 0 && $a <= M_PI/2 ) { + $val->SetAlign('left','bottom'); + } + elseif( $a > M_PI/2 && $a <= M_PI ) { + $val->SetAlign('right','bottom'); + } + } + elseif( $this->iLblAlign == LBLALIGN_CENTER ) { + $val->SetAlign('center','center'); + } + + // Stroke the labels close to each circle + $v = $d ; + $si = sin($a); + $co = cos($a); + for( $i=0; $i < $n; ++$i, $v += $d ) { + $r = $ri + ($i+1) * $rr; + $x = $xc + $co * $r; + $y = $yc - $si * $r; + $val->Set(sprintf($this->iLblFmt,$v)); + $val->Stroke($aImg,$x,$y); + } + + // Print the text in the zero circle + if( $this->iLblZeroTxt === null ) { + $this->iLblZeroTxt = sprintf($this->iLblFmt,$this->iZeroSum); + } + else { + $this->iLblZeroTxt = sprintf($this->iLblZeroTxt,$this->iZeroSum); + } + + $val->Set($this->iLblZeroTxt); + $val->SetAlign('center','center'); + $val->SetParagraphAlign('center'); + $val->SetColor($this->iZFontColor); + $val->SetFont($this->iZFontFamily,$this->iZFontStyle,$this->iZFontSize); + $val->Stroke($aImg,$xc,$yc); + } +} + +//=================================================== +// CLASS LegendStyle +//=================================================== +class LegendStyle { + public $iLength = 40, $iMargin = 20 , $iBottomMargin=5; + public $iCircleWeight=2, $iCircleRadius = 18, $iCircleColor='black'; + public $iTxtFontFamily=FF_VERDANA,$iTxtFontStyle=FS_NORMAL,$iTxtFontSize=8; + public $iLblFontFamily=FF_VERDANA,$iLblFontStyle=FS_NORMAL,$iLblFontSize=8; + public $iCircleFontFamily=FF_VERDANA,$iCircleFontStyle=FS_NORMAL,$iCircleFontSize=8; + public $iLblFontColor='black',$iTxtFontColor='black',$iCircleFontColor='black'; + public $iShow=true; + public $iFormatString='%.1f'; + public $iTxtMargin=6, $iTxt=''; + public $iZCircleTxt='Calm'; + + function SetFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) { + $this->iLblFontFamily = $aFontFamily ; + $this->iLblFontStyle = $aFontStyle ; + $this->iLblFontSize = $aFontSize ; + $this->iTxtFontFamily = $aFontFamily ; + $this->iTxtFontStyle = $aFontStyle ; + $this->iTxtFontSize = $aFontSize ; + $this->iCircleFontFamily = $aFontFamily ; + $this->iCircleFontStyle = $aFontStyle ; + $this->iCircleFontSize = $aFontSize ; + } + + function SetLFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) { + $this->iLblFontFamily = $aFontFamily ; + $this->iLblFontStyle = $aFontStyle ; + $this->iLblFontSize = $aFontSize ; + } + + function SetTFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) { + $this->iTxtFontFamily = $aFontFamily ; + $this->iTxtFontStyle = $aFontStyle ; + $this->iTxtFontSize = $aFontSize ; + } + + function SetCFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) { + $this->iCircleFontFamily = $aFontFamily ; + $this->iCircleFontStyle = $aFontStyle ; + $this->iCircleFontSize = $aFontSize ; + } + + + function SetFontColor($aColor) { + $this->iTxtFontColor = $aColor ; + $this->iLblFontColor = $aColor ; + $this->iCircleFontColor = $aColor ; + } + + function SetTFontColor($aColor) { + $this->iTxtFontColor = $aColor ; + } + + function SetLFontColor($aColor) { + $this->iLblFontColor = $aColor ; + } + + function SetCFontColor($aColor) { + $this->iCircleFontColor = $aColor ; + } + + function SetCircleWeight($aWeight) { + $this->iCircleWeight = $aWeight; + } + + function SetCircleRadius($aRadius) { + $this->iCircleRadius = $aRadius; + } + + function SetCircleColor($aColor) { + $this->iCircleColor = $aColor ; + } + + function SetCircleText($aTxt) { + $this->iZCircleTxt = $aTxt; + } + + function SetMargin($aMarg,$aBottomMargin=5) { + $this->iMargin=$aMarg; + $this->iBottomMargin=$aBottomMargin; + } + + function SetLength($aLength) { + $this->iLength = $aLength ; + } + + function Show($aFlg=true) { + $this->iShow = $aFlg; + } + + function Hide($aFlg=true) { + $this->iShow = ! $aFlg; + } + + function SetFormat($aFmt) { + $this->iFormatString=$aFmt; + } + + function SetText($aTxt) { + $this->iTxt = $aTxt ; + } + +} + +define('RANGE_OVERLAPPING',0); +define('RANGE_DISCRETE',1); + +//=================================================== +// CLASS WindrosePlot +//=================================================== +class WindrosePlot { + private $iAntiAlias=true; + private $iData=array(); + public $iX=0.5,$iY=0.5; + public $iSize=0.55; + private $iGridColor1='gray',$iGridColor2='darkgreen'; + private $iRadialColorArray=array(); + private $iRadialWeightArray=array(); + private $iRadialStyleArray=array(); + private $iRanges = array(1,2,3,5,6,10,13.5,99.0); + private $iRangeStyle = RANGE_OVERLAPPING ; + public $iCenterSize=60; + private $iType = WINDROSE_TYPE16; + public $iFontFamily=FF_VERDANA,$iFontStyle=FS_NORMAL,$iFontSize=10; + public $iFontColor='darkgray'; + private $iRadialGridStyle='longdashed'; + private $iAllDirectionLabels = array('E','ENE','NE','NNE','N','NNW','NW','WNW','W','WSW','SW','SSW','S','SSE','SE','ESE'); + private $iStandardDirections = array(); + private $iCircGridWeight=3, $iRadialGridWeight=1; + private $iLabelMargin=12; + private $iLegweights = array(2,4,6,8,10,12,14,16,18,20); + private $iLegColors = array('orange','black','blue','red','green','purple','navy','yellow','brown'); + private $iLabelFormatString='', $iLabels=array(); + private $iLabelPositioning = LBLPOSITION_EDGE; + private $iColor='white'; + private $iShowBox=false, $iBoxColor='black',$iBoxWeight=1,$iBoxStyle='solid'; + private $iOrdinalEncoding=KEYENCODING_ANTICLOCKWISE; + public $legend=null; + + function __construct($aData) { + $this->iData = $aData; + $this->legend = new LegendStyle(); + + // Setup the scale + $this->scale = new WindrosePlotScale($this->iData); + + // default label for free type i agle and a degree sign + $this->iLabelFormatString = '%.1f'.SymChar::Get('degree'); + + $delta = 2*M_PI/16; + for( $i=0, $a=0; $i < 16; ++$i, $a += $delta ) { + $this->iStandardDirections[$this->iAllDirectionLabels[$i]] = $a; + } + } + + // Dummy method to make window plots have the same signature as the + // layout classes since windrose plots are "leaf" classes in the hierarchy + function LayoutSize() { + return 1; + } + + function SetSize($aSize) { + $this->iSize = $aSize; + } + + function SetDataKeyEncoding($aEncoding) { + $this->iOrdinalEncoding = $aEncoding; + } + + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function SetRadialColors($aColors) { + $this->iRadialColorArray = $aColors; + } + + function SetRadialWeights($aWeights) { + $this->iRadialWeightArray = $aWeights; + } + + function SetRadialStyles($aStyles) { + $this->iRadialStyleArray = $aStyles; + } + + function SetBox($aColor='black',$aWeight=1, $aStyle='solid', $aShow=true) { + $this->iShowBox = $aShow ; + $this->iBoxColor = $aColor ; + $this->iBoxWeight = $aWeight ; + $this->iBoxStyle = $aStyle; + } + + function SetLabels($aLabels) { + $this->iLabels = $aLabels ; + } + + function SetLabelMargin($aMarg) { + $this->iLabelMargin = $aMarg ; + } + + function SetLabelFormat($aLblFormat) { + $this->iLabelFormatString = $aLblFormat ; + } + + function SetCompassLabels($aLabels) { + if( count($aLabels) != 16 ) { + JpgraphError::RaiseL(22004); //('Label specification for windrose directions must have 16 values (one for each compass direction).'); + } + $this->iAllDirectionLabels = $aLabels ; + + $delta = 2*M_PI/16; + for( $i=0, $a=0; $i < 16; ++$i, $a += $delta ) { + $this->iStandardDirections[$this->iAllDirectionLabels[$i]] = $a; + } + + } + + function SetCenterSize($aSize) { + $this->iCenterSize = $aSize; + } + // Alias for SetCenterSize + function SetZCircleSize($aSize) { + $this->iCenterSize = $aSize; + } + + function SetFont($aFFam,$aFStyle=FS_NORMAL,$aFSize=10) { + $this->iFontFamily = $aFFam ; + $this->iFontStyle = $aFStyle ; + $this->iFontSize = $aFSize ; + } + + function SetFontColor($aColor) { + $this->iFontColor=$aColor; + } + + function SetGridColor($aColor1,$aColor2) { + $this->iGridColor1 = $aColor1; + $this->iGridColor2 = $aColor2; + } + + function SetGridWeight($aGrid1=1,$aGrid2=2) { + $this->iCircGridWeight = $aGrid1 ; + $this->iRadialGridWeight = $aGrid2 ; + } + + function SetRadialGridStyle($aStyle) { + $aStyle = strtolower($aStyle); + if( !in_array($aStyle,array('solid','dotted','dashed','longdashed')) ) { + JpGraphError::RaiseL(22005); //("Line style for radial lines must be on of ('solid','dotted','dashed','longdashed') "); + } + $this->iRadialGridStyle=$aStyle; + } + + function SetRanges($aRanges) { + $this->iRanges = $aRanges; + } + + function SetRangeStyle($aStyle) { + $this->iRangeStyle = $aStyle; + } + + function SetRangeColors($aLegColors) { + $this->iLegColors = $aLegColors; + } + + function SetRangeWeights($aWeights) { + $n=count($aWeights); + for($i=0; $i< $n; ++$i ) { + $aWeights[$i] = floor($aWeights[$i]/2); + } + $this->iLegweights = $aWeights; + + } + + function SetType($aType) { + if( $aType < WINDROSE_TYPE4 || $aType > WINDROSE_TYPEFREE ) { + JpGraphError::RaiseL(22006); //('Illegal windrose type specified.'); + } + $this->iType = $aType; + } + + // Alias for SetPos() + function SetCenterPos($aX,$aY) { + $this->iX = $aX; + $this->iY = $aY; + } + + function SetPos($aX,$aY) { + $this->iX = $aX; + $this->iY = $aY; + } + + function SetAntiAlias($aFlag) { + $this->iAntiAlias = $aFlag ; + if( ! $aFlag ) + $this->iCircGridWeight = 1; + } + + function _ThickCircle($aImg,$aXC,$aYC,$aRad,$aWeight,$aColor) { + + $aImg->SetColor($aColor); + $aRad *= 2 ; + $aImg->Ellipse($aXC,$aYC,$aRad,$aRad); + if( $aWeight > 1 ) { + $aImg->Ellipse($aXC,$aYC,$aRad+1,$aRad+1); + $aImg->Ellipse($aXC,$aYC,$aRad+2,$aRad+2); + if( $aWeight > 2 ) { + $aImg->Ellipse($aXC,$aYC,$aRad+3,$aRad+3); + $aImg->Ellipse($aXC,$aYC,$aRad+3,$aRad+4); + $aImg->Ellipse($aXC,$aYC,$aRad+4,$aRad+3); + } + } + } + + function _StrokeWindLeg($aImg,$xc,$yc,$a,$ri,$r,$weight,$color) { + + // If less than 1 px long then we assume this has been caused by rounding problems + // and should not be stroked + if( $r < 1 ) return; + + $xt = $xc + cos($a)*$ri; + $yt = $yc - sin($a)*$ri; + $xxt = $xc + cos($a)*($ri+$r); + $yyt = $yc - sin($a)*($ri+$r); + + $x1 = $xt - $weight*sin($a); + $y1 = $yt - $weight*cos($a); + $x2 = $xxt - $weight*sin($a); + $y2 = $yyt - $weight*cos($a); + + $x3 = $xxt + $weight*sin($a); + $y3 = $yyt + $weight*cos($a); + $x4 = $xt + $weight*sin($a); + $y4 = $yt + $weight*cos($a); + + $pts = array($x1,$y1,$x2,$y2,$x3,$y3,$x4,$y4); + $aImg->SetColor($color); + $aImg->FilledPolygon($pts); + + } + + function _StrokeLegend($aImg,$x,$y,$scaling=1,$aReturnWidth=false) { + + if( ! $this->legend->iShow ) return 0; + + $nlc = count($this->iLegColors); + $nlw = count($this->iLegweights); + + // Setup font for ranges + $value = new Text(); + $value->SetAlign('center','bottom'); + $value->SetFont($this->legend->iLblFontFamily, + $this->legend->iLblFontStyle, + $this->legend->iLblFontSize*$scaling); + $value->SetColor($this->legend->iLblFontColor); + + // Remember x-center + $xcenter = $x ; + + // Construct format string + $fmt = $this->legend->iFormatString.'-'.$this->legend->iFormatString; + + // Make sure that the length of each range is enough to cover the + // size of the labels + $tst = sprintf($fmt,$this->iRanges[0],$this->iRanges[1]); + $value->Set($tst); + $w = $value->GetWidth($aImg); + $l = round(max($this->legend->iLength * $scaling,$w*1.5)); + + $r = $this->legend->iCircleRadius * $scaling ; + $len = 2*$r + $this->scale->iMaxNum * $l; + + // We are called just to find out the width + if( $aReturnWidth ) return $len; + + $x -= round($len/2); + $x += $r; + + // 4 pixels extra vertical margin since the circle sometimes is +/- 1 pixel of the + // theorethical radius due to imperfection in the GD library + //$y -= round(max($r,$scaling*$this->iLegweights[($this->scale->iMaxNum-1) % $nlw])+4*$scaling); + $y -= ($this->legend->iCircleRadius + 2)*$scaling+$this->legend->iBottomMargin*$scaling; + + // Adjust for bottom text + if( $this->legend->iTxt != '' ) { + // Setup font for text + $value->Set($this->legend->iTxt); + $y -= /*$this->legend->iTxtMargin + */ $value->GetHeight($aImg); + } + + // Stroke 0-circle + $this->_ThickCircle($aImg,$x,$y,$r,$this->legend->iCircleWeight, + $this->legend->iCircleColor); + + // Remember the center of the circe + $xc=$x; $yc=$y; + + $value->SetAlign('center','bottom'); + $x += $r+1; + + // Stroke all used ranges + $txty = $y - + round($this->iLegweights[($this->scale->iMaxNum-1)%$nlw]*$scaling) - 4*$scaling; + if( $this->scale->iMaxNum >= count($this->iRanges) ) { + JpGraphError::RaiseL(22007); //('To few values for the range legend.'); + } + $i=0;$idx=0; + while( $i < $this->scale->iMaxNum ) { + $y1 = $y - round($this->iLegweights[$i % $nlw]*$scaling); + $y2 = $y + round($this->iLegweights[$i % $nlw]*$scaling); + $x2 = $x + $l ; + $aImg->SetColor($this->iLegColors[$i % $nlc]); + $aImg->FilledRectangle($x,$y1,$x2,$y2); + if( $this->iRangeStyle == RANGE_OVERLAPPING ) { + $lbl = sprintf($fmt,$this->iRanges[$idx],$this->iRanges[$idx+1]); + } + else { + $lbl = sprintf($fmt,$this->iRanges[$idx],$this->iRanges[$idx+1]); + ++$idx; + } + $value->Set($lbl); + $value->Stroke($aImg,$x+$l/2,$txty); + $x = $x2; + ++$i;++$idx; + } + + // Setup circle font + $value->SetFont($this->legend->iCircleFontFamily, + $this->legend->iCircleFontStyle, + $this->legend->iCircleFontSize*$scaling); + $value->SetColor($this->legend->iCircleFontColor); + + // Stroke 0-circle text + $value->Set($this->legend->iZCircleTxt); + $value->SetAlign('center','center'); + $value->ParagraphAlign('center'); + $value->Stroke($aImg,$xc,$yc); + + // Setup circle font + $value->SetFont($this->legend->iTxtFontFamily, + $this->legend->iTxtFontStyle, + $this->legend->iTxtFontSize*$scaling); + $value->SetColor($this->legend->iTxtFontColor); + + // Draw the text under the legend + $value->Set($this->legend->iTxt); + $value->SetAlign('center','top'); + $value->SetParagraphAlign('center'); + $value->Stroke($aImg,$xcenter,$y2+$this->legend->iTxtMargin*$scaling); + } + + function SetAutoScaleAngle($aIsRegRose=true) { + + // If the user already has manually set an angle don't + // trye to find a position + if( is_numeric($this->scale->iAngle) ) + return; + + if( $aIsRegRose ) { + + // Create a complete data for all directions + // and translate string directions to ordinal values. + // This will much simplify the logic below + for( $i=0; $i < 16; ++$i ) { + $dtxt = $this->iAllDirectionLabels[$i]; + if( !empty($this->iData[$dtxt]) ) { + $data[$i] = $this->iData[$dtxt]; + } + elseif( !empty($this->iData[strtolower($dtxt)]) ) { + $data[$i] = $this->iData[strtolower($dtxt)]; + } + elseif( !empty($this->iData[$i]) ) { + $data[$i] = $this->iData[$i]; + } + else { + $data[$i] = array(); + } + } + + // Find the leg which has the lowest weighted sum of number of data around it + $c0 = array_sum($data[0]); + $c1 = array_sum($data[1]); + $found = 1; + $min = $c0+$c1*100; // Initialize to a high value + for( $i=1; $i < 15; ++$i ) { + $c2 = array_sum($data[$i+1]); + + // Weight the leg we will use more to give preference + // to a short middle leg even if the 3 way sum is similair + $w = $c0 + 3*$c1 + $c2 ; + if( $w < $min ) { + $min = $w; + $found = $i; + } + $c0 = $c1; + $c1 = $c2; + } + $this->scale->iAngle = $found*22.5; + } + else { + $n = count($this->iData); + foreach( $this->iData as $dir => $leg ) { + if( !is_numeric($dir) ) { + $pos = array_search(strtoupper($dir),$this->iAllDirectionLabels); + if( $pos !== false ) { + $dir = $pos*22.5; + } + } + $data[round($dir)] = $leg; + } + + // Get all the angles for the data and sort it + $keys = array_keys($data); + sort($keys, SORT_NUMERIC); + + $n = count($data); + $found = false; + $max = 0 ; + for( $i=0; $i < 15; ++$i ) { + $try_a = round(22.5*$i); + + if( $try_a > $keys[$n-1] ) break; + + if( in_array($try_a,$keys) ) continue; + + // Find the angle just lower than this + $j=0; + while( $j < $n && $keys[$j] <= $try_a ) ++$j; + if( $j == 0 ) { + $kj = 0; $keys[$n-1]; + $d1 = 0; abs($kj-$try_a); + } + else { + --$j; + $kj = $keys[$j]; + $d1 = abs($kj-$try_a); + } + + // Find the angle just larger than this + $l=$n-1; + while( $l >= 0 && $keys[$l] >= $try_a ) --$l; + if( $l == $n-1) { + $kl = $keys[0]; + $d2 = abs($kl-$try_a); + } + else { + ++$l; + $kl = $keys[$l]; + $d2 = abs($kl-$try_a); + } + + // Weight the distance so that legs with large spread + // gets a better weight + $w = $d1 + $d2; + if( $i == 0 ) { + $w = round(1.4 * $w); + } + $diff = abs($d1 - $d2); + $w *= (360-$diff); + if( $w > $max ) { + $found = $i; + $max = $w; + } + } + + $a = $found*22.5; + + // Some heuristics to have some preferred positions + if( $keys[$n-1] < 25 ) $a = 45; + elseif( $keys[0] > 60 ) $a = 45; + elseif( $keys[0] > 25 && $keys[$n-1] < 340 ) $a = 0; + elseif( $keys[$n-1] < 75 ) $a = 90; + elseif( $keys[$n-1] < 120 ) $a = 135; + elseif( $keys[$n-1] < 160 ) $a = 180; + + $this->scale->iAngle = $a ; + } + } + + function NormAngle($a) { + while( $a > 360 ) { + $a -= 360; + } + return $a; + } + + function SetLabelPosition($aPos) { + $this->iLabelPositioning = $aPos ; + } + + function _StrokeFreeRose($dblImg,$value,$scaling,$xc,$yc,$r,$ri) { + + // Plot radial grid lines and remember the end position + // and the angle for later use when plotting the labels + if( $this->iType != WINDROSE_TYPEFREE ) { + JpGraphError::RaiseL(22008); //('Internal error: Trying to plot free Windrose even though type is not a free windorose'); + } + + // Check if we should auto-position the angle for the + // labels. Basically we try to find a firection with smallest + // (or none) data. + $this->SetAutoScaleAngle(false); + + $nlc = count($this->iLegColors); + $nlw = count($this->iLegweights); + + // Stroke grid lines for directions and remember the + // position for the labels + $txtpos=array(); + $num = count($this->iData); + + $keys = array_keys($this->iData); + + foreach( $this->iData as $dir => $legdata ) { + if( in_array($dir,$this->iAllDirectionLabels,true) === true) { + $a = $this->iStandardDirections[strtoupper($dir)]; + if( in_array($a*180/M_PI,$keys) ) { + JpGraphError::RaiseL(22009,round($a*180/M_PI)); + //('You have specified the same direction twice, once with an angle and once with a compass direction ('.$a*180/M_PI.' degrees.)'); + } + } + elseif( is_numeric($dir) ) { + $this->NormAngle($dir); + + if( $this->iOrdinalEncoding == KEYENCODING_CLOCKWISE ) { + $dir = 360-$dir; + } + + $a = $dir * M_PI/180; + } + else { + JpGraphError::RaiseL(22010);//('Direction must either be a numeric value or one of the 16 compass directions'); + } + + $xxc = round($xc + cos($a)*$ri); + $yyc = round($yc - sin($a)*$ri); + $x = round($xc + cos($a)*$r); + $y = round($yc - sin($a)*$r); + if( empty($this->iRadialColorArray[$dir]) ) { + $dblImg->SetColor($this->iGridColor2); + } + else { + $dblImg->SetColor($this->iRadialColorArray[$dir]); + } + if( empty($this->iRadialWeightArray[$dir]) ) { + $dblImg->SetLineWeight($this->iRadialGridWeight); + } + else { + $dblImg->SetLineWeight($this->iRadialWeightArray[$dir]); + } + if( empty($this->iRadialStyleArray[$dir]) ) { + $dblImg->SetLineStyle($this->iRadialGridStyle); + } + else { + $dblImg->SetLineStyle($this->iRadialStyleArray[$dir]); + } + $dblImg->StyleLine($xxc,$yyc,$x,$y); + $txtpos[] = array($x,$y,$a); + } + $dblImg->SetLineWeight(1); + + // Setup labels + $lr = $scaling * $this->iLabelMargin; + + if( $this->iLabelPositioning == LBLPOSITION_EDGE ) { + $value->SetAlign('left','top'); + } + else { + $value->SetAlign('center','center'); + $value->SetMargin(0); + } + + for($i=0; $i < $num; ++$i ) { + + list($x,$y,$a) = $txtpos[$i]; + + // Determine the label + + $da = $a*180/M_PI; + if( $this->iOrdinalEncoding == KEYENCODING_CLOCKWISE ) { + $da = 360 - $da; + } + + //$da = 360-$da; + + if( !empty($this->iLabels[$keys[$i]]) ) { + $lbl = $this->iLabels[$keys[$i]]; + } + else { + $lbl = sprintf($this->iLabelFormatString,$da); + } + + if( $this->iLabelPositioning == LBLPOSITION_CENTER ) { + $dx = $dy = 0; + } + else { + // LBLPOSIITON_EDGE + if( $a>=7*M_PI/4 || $a <= M_PI/4 ) $dx=0; + if( $a>=M_PI/4 && $a <= 3*M_PI/4 ) $dx=($a-M_PI/4)*2/M_PI; + if( $a>=3*M_PI/4 && $a <= 5*M_PI/4 ) $dx=1; + if( $a>=5*M_PI/4 && $a <= 7*M_PI/4 ) $dx=(1-($a-M_PI*5/4)*2/M_PI); + + if( $a>=7*M_PI/4 ) $dy=(($a-M_PI)-3*M_PI/4)*2/M_PI; + if( $a<=M_PI/4 ) $dy=(0.5+$a*2/M_PI); + if( $a>=M_PI/4 && $a <= 3*M_PI/4 ) $dy=1; + if( $a>=3*M_PI/4 && $a <= 5*M_PI/4 ) $dy=(1-($a-3*M_PI/4)*2/M_PI); + if( $a>=5*M_PI/4 && $a <= 7*M_PI/4 ) $dy=0; + } + + $value->Set($lbl); + $th = $value->GetHeight($dblImg); + $tw = $value->GetWidth($dblImg); + $xt=round($lr*cos($a)+$x) - $dx*$tw; + $yt=round($y-$lr*sin($a)) - $dy*$th; + + $value->Stroke($dblImg,$xt,$yt); + } + + if( __DEBUG ) { + $dblImg->SetColor('red'); + $dblImg->Circle($xc,$yc,$lr+$r); + } + + // Stroke all the legs + reset($this->iData); + $i=0; + foreach($this->iData as $dir => $legdata) { + $legdata = array_slice($legdata,1); + $nn = count($legdata); + + $a = $txtpos[$i][2]; + $rri = $ri/$scaling; + for( $j=0; $j < $nn; ++$j ) { + // We want the non scaled original radius + $legr = $this->scale->RelTranslate($legdata[$j],$r/$scaling,$ri/$scaling) ; + $this->_StrokeWindLeg($dblImg, $xc, $yc, $a, + $rri *$scaling, + $legr *$scaling, + $this->iLegweights[$j % $nlw] * $scaling, + $this->iLegColors[$j % $nlc]); + $rri += $legr; + } + ++$i; + } + } + + // Translate potential string specified compass labels to their + // corresponding index. + function FixupIndexes($aDataArray,$num) { + $ret = array(); + $keys = array_keys($aDataArray); + foreach($aDataArray as $idx => $data) { + if( is_string($idx) ) { + $idx = strtoupper($idx); + $res = array_search($idx,$this->iAllDirectionLabels); + if( $res === false ) { + JpGraphError::RaiseL(22011,$idx); //('Windrose index must be numeric or direction label. You have specified index='.$idx); + } + $idx = $res; + if( $idx % (16 / $num) !== 0 ) { + JpGraphError::RaiseL(22012); //('Windrose radial axis specification contains a direction which is not enabled.'); + } + $idx /= (16/$num) ; + + if( in_array($idx,$keys,1) ) { + JpgraphError::RaiseL(22013,$idx); //('You have specified the look&feel for the same compass direction twice, once with text and once with index (Index='.$idx.')'); + } + } + if( $idx < 0 || $idx > 15 ) { + JpgraphError::RaiseL(22014); //('Index for copmass direction must be between 0 and 15.'); + } + $ret[$idx] = $data; + } + return $ret; + } + + function _StrokeRegularRose($dblImg,$value,$scaling,$xc,$yc,$r,$ri) { + // _StrokeRegularRose($dblImg,$xc,$yc,$r,$ri) + // Plot radial grid lines and remember the end position + // and the angle for later use when plotting the labels + switch( $this->iType ) { + case WINDROSE_TYPE4: + $num = 4; break; + case WINDROSE_TYPE8: + $num = 8; break; + case WINDROSE_TYPE16: + $num = 16; break; + default: + JpGraphError::RaiseL(22015);//('You have specified an undefined Windrose plot type.'); + } + + // Check if we should auto-position the angle for the + // labels. Basically we try to find a firection with smallest + // (or none) data. + $this->SetAutoScaleAngle(true); + + $nlc = count($this->iLegColors); + $nlw = count($this->iLegweights); + + $this->iRadialColorArray = $this->FixupIndexes($this->iRadialColorArray,$num); + $this->iRadialWeightArray = $this->FixupIndexes($this->iRadialWeightArray,$num); + $this->iRadialStyleArray = $this->FixupIndexes($this->iRadialStyleArray,$num); + + $txtpos=array(); + $a = 2*M_PI/$num; + $dblImg->SetColor($this->iGridColor2); + $dblImg->SetLineStyle($this->iRadialGridStyle); + $dblImg->SetLineWeight($this->iRadialGridWeight); + + // Translate any name specified directions to the index + // so we can easily use it in the loop below + for($i=0; $i < $num; ++$i ) { + $xxc = round($xc + cos($a*$i)*$ri); + $yyc = round($yc - sin($a*$i)*$ri); + $x = round($xc + cos($a*$i)*$r); + $y = round($yc - sin($a*$i)*$r); + if( empty($this->iRadialColorArray[$i]) ) { + $dblImg->SetColor($this->iGridColor2); + } + else { + $dblImg->SetColor($this->iRadialColorArray[$i]); + } + if( empty($this->iRadialWeightArray[$i]) ) { + $dblImg->SetLineWeight($this->iRadialGridWeight); + } + else { + $dblImg->SetLineWeight($this->iRadialWeightArray[$i]); + } + if( empty($this->iRadialStyleArray[$i]) ) { + $dblImg->SetLineStyle($this->iRadialGridStyle); + } + else { + $dblImg->SetLineStyle($this->iRadialStyleArray[$i]); + } + + $dblImg->StyleLine($xxc,$yyc,$x,$y); + $txtpos[] = array($x,$y,$a*$i); + } + $dblImg->SetLineWeight(1); + + $lr = $scaling * $this->iLabelMargin; + if( $this->iLabelPositioning == LBLPOSITION_CENTER ) { + $value->SetAlign('center','center'); + } + else { + $value->SetAlign('left','top'); + $value->SetMargin(0); + $lr /= 2 ; + } + + for($i=0; $i < $num; ++$i ) { + list($x,$y,$a) = $txtpos[$i]; + + // Set the position of the label + if( $this->iLabelPositioning == LBLPOSITION_CENTER ) { + $dx = $dy = 0; + } + else { + // LBLPOSIITON_EDGE + if( $a>=7*M_PI/4 || $a <= M_PI/4 ) $dx=0; + if( $a>=M_PI/4 && $a <= 3*M_PI/4 ) $dx=($a-M_PI/4)*2/M_PI; + if( $a>=3*M_PI/4 && $a <= 5*M_PI/4 ) $dx=1; + if( $a>=5*M_PI/4 && $a <= 7*M_PI/4 ) $dx=(1-($a-M_PI*5/4)*2/M_PI); + + if( $a>=7*M_PI/4 ) $dy=(($a-M_PI)-3*M_PI/4)*2/M_PI; + if( $a<=M_PI/4 ) $dy=(0.5+$a*2/M_PI); + if( $a>=M_PI/4 && $a <= 3*M_PI/4 ) $dy=1; + if( $a>=3*M_PI/4 && $a <= 5*M_PI/4 ) $dy=(1-($a-3*M_PI/4)*2/M_PI); + if( $a>=5*M_PI/4 && $a <= 7*M_PI/4 ) $dy=0; + } + + $value->Set($this->iAllDirectionLabels[$i*(16/$num)]); + $th = $value->GetHeight($dblImg); + $tw = $value->GetWidth($dblImg); + $xt=round($lr*cos($a)+$x) - $dx*$tw; + $yt=round($y-$lr*sin($a)) - $dy*$th; + + $value->Stroke($dblImg,$xt,$yt); + } + + if( __DEBUG ) { + $dblImg->SetColor("red"); + $dblImg->Circle($xc,$yc,$lr+$r); + } + + // Stroke all the legs + reset($this->iData); + $keys = array_keys($this->iData); + foreach($this->iData as $idx => $legdata) { + $legdata = array_slice($legdata,1); + $nn = count($legdata); + if( is_string($idx) ) { + $idx = strtoupper($idx); + $idx = array_search($idx,$this->iAllDirectionLabels); + if( $idx === false ) { + JpGraphError::RaiseL(22016);//('Windrose leg index must be numeric or direction label.'); + } + if( $idx % (16 / $num) !== 0 ) { + JpGraphError::RaiseL(22017);//('Windrose data contains a direction which is not enabled. Please adjust what labels are displayed.'); + } + $idx /= (16/$num) ; + + if( in_array($idx,$keys,1) ) { + JpgraphError::RaiseL(22018,$idx);//('You have specified data for the same compass direction twice, once with text and once with index (Index='.$idx.')'); + + } + } + if( $idx < 0 || $idx > 15 ) { + JpgraphError::RaiseL(22019);//('Index for direction must be between 0 and 15. You can\'t specify angles for a Regular Windplot, only index and compass directions.'); + } + $a = $idx * (360 / $num) ; + $a *= M_PI/180.0; + $rri = $ri/$scaling; + for( $j=0; $j < $nn; ++$j ) { + // We want the non scaled original radius + $legr = $this->scale->RelTranslate($legdata[$j], $r/$scaling,$ri/$scaling) ; + $this->_StrokeWindLeg($dblImg, $xc, $yc, $a, + $rri *$scaling, + $legr *$scaling, + $this->iLegweights[$j % $nlw] * $scaling, + $this->iLegColors[$j % $nlc]); + $rri += $legr; + } + } + } + + + function getWidth($aImg) { + + $scaling = 1;//$this->iAntiAlias ? 2 : 1 ; + if( $this->iSize > 0 && $this->iSize < 1 ) { + $this->iSize *= min($aImg->width,$aImg->height); + } + + + $value = new Text(); + $value->SetFont($this->iFontFamily,$this->iFontStyle,$this->iFontSize*$scaling); + $value->SetColor($this->iFontColor); + // Setup extra size around the graph needed so that the labels + // doesn't get cut. For this we need to find the largest label. + // The code below gives a possible a little to large margin. The + // really, really proper way would be to account for what angle + // the label are at + $n = count($this->iLabels); + if( $n > 0 ) { + $maxh=0;$maxw=0; + foreach($this->iLabels as $key => $lbl) { + $value->Set($lbl); + $maxw = max($maxw,$value->GetWidth($aImg)); + } + } + else { + $value->Set('888.888'); // Dummy value to get width/height + $maxw = $value->GetWidth($aImg); + } + // Add an extra margin of 50% the font size + $maxw += round($this->iFontSize*$scaling * 0.4) ; + + $valxmarg = 1.5*$maxw+2*$this->iLabelMargin*$scaling; + $w = round($this->iSize*$scaling + $valxmarg); + + // Make sure that the width of the legend fits + $legendwidth = $this->_StrokeLegend($aImg,0,0,$scaling,true)+10*$scaling; + $w = max($w,$legendwidth); + + return $w; + } + + function getHeight($aImg) { + + $scaling = 1;//$this->iAntiAlias ? 2 : 1 ; + if( $this->iSize > 0 && $this->iSize < 1 ) { + $this->iSize *= min($aImg->width,$aImg->height); + } + + $value = new Text(); + $value->SetFont($this->iFontFamily,$this->iFontStyle,$this->iFontSize*$scaling); + $value->SetColor($this->iFontColor); + // Setup extra size around the graph needed so that the labels + // doesn't get cut. For this we need to find the largest label. + // The code below gives a possible a little to large margin. The + // really, really proper way would be to account for what angle + // the label are at + $n = count($this->iLabels); + if( $n > 0 ) { + $maxh=0;$maxw=0; + foreach($this->iLabels as $key => $lbl) { + $value->Set($lbl); + $maxh = max($maxh,$value->GetHeight($aImg)); + } + } + else { + $value->Set('180.8'); // Dummy value to get width/height + $maxh = $value->GetHeight($aImg); + } + // Add an extra margin of 50% the font size + //$maxh += round($this->iFontSize*$scaling * 0.5) ; + $valymarg = 2*$maxh+2*$this->iLabelMargin*$scaling; + + $legendheight = round($this->legend->iShow ? 1 : 0); + $legendheight *= max($this->legend->iCircleRadius*2,$this->legend->iTxtFontSize*2)+ + $this->legend->iMargin + $this->legend->iBottomMargin + 2; + $legendheight *= $scaling; + $h = round($this->iSize*$scaling + $valymarg) + $legendheight ; + + return $h; + } + + function Stroke($aGraph) { + + $aImg = $aGraph->img; + + if( $this->iX > 0 && $this->iX < 1 ) { + $this->iX = round( $aImg->width * $this->iX ) ; + } + + if( $this->iY > 0 && $this->iY < 1 ) { + $this->iY = round( $aImg->height * $this->iY ) ; + } + + if( $this->iSize > 0 && $this->iSize < 1 ) { + $this->iSize *= min($aImg->width,$aImg->height); + } + + if( $this->iCenterSize > 0 && $this->iCenterSize < 1 ) { + $this->iCenterSize *= $this->iSize; + } + + $this->scale->AutoScale(($this->iSize - $this->iCenterSize)/2, round(2.5*$this->scale->iFontSize)); + + $scaling = $this->iAntiAlias ? 2 : 1 ; + + $value = new Text(); + $value->SetFont($this->iFontFamily,$this->iFontStyle,$this->iFontSize*$scaling); + $value->SetColor($this->iFontColor); + + $legendheight = round($this->legend->iShow ? 1 : 0); + $legendheight *= max($this->legend->iCircleRadius*2,$this->legend->iTxtFontSize*2)+ + $this->legend->iMargin + $this->legend->iBottomMargin + 2; + $legendheight *= $scaling; + + $w = $scaling*$this->getWidth($aImg); + $h = $scaling*$this->getHeight($aImg); + + // Copy back the double buffered image to the proper canvas + $ww = $w / $scaling ; + $hh = $h / $scaling ; + + // Create the double buffer + if( $this->iAntiAlias ) { + $dblImg = new RotImage($w,$h); + // Set the background color + $dblImg->SetColor($this->iColor); + $dblImg->FilledRectangle(0,0,$w,$h); + } + else { + $dblImg = $aImg ; + // Make sure the ix and it coordinates correpond to the new top left center + $dblImg->SetTranslation($this->iX-$w/2, $this->iY-$h/2); + } + + if( __DEBUG ) { + $dblImg->SetColor('red'); + $dblImg->Rectangle(0,0,$w-1,$h-1); + } + + $dblImg->SetColor('black'); + + if( $this->iShowBox ) { + $dblImg->SetColor($this->iBoxColor); + $old = $dblImg->SetLineWeight($this->iBoxWeight); + $dblImg->SetLineStyle($this->iBoxStyle); + $dblImg->Rectangle(0,0,$w-1,$h-1); + $dblImg->SetLineWeight($old); + } + + $xc = round($w/2); + $yc = round(($h-$legendheight)/2); + + if( __DEBUG ) { + $dblImg->SetColor('red'); + $old = $dblImg->SetLineWeight(2); + $dblImg->Line($xc-5,$yc-5,$xc+5,$yc+5); + $dblImg->Line($xc+5,$yc-5,$xc-5,$yc+5); + $dblImg->SetLineWeight($old); + } + + $this->iSize *= $scaling; + + // Inner circle size + $ri = $this->iCenterSize/2 ; + + // Full circle radius + $r = round( $this->iSize/2 ); + + // Get number of grid circles + $n = $this->scale->GetNumCirc(); + + // Plot circle grids + $ri *= $scaling ; + $rr = round(($r-$ri)/$n); + for( $i = 1; $i <= $n; ++$i ) { + $this->_ThickCircle($dblImg,$xc,$yc,$rr*$i+$ri, + $this->iCircGridWeight,$this->iGridColor1); + } + + $num = 0 ; + + if( $this->iType == WINDROSE_TYPEFREE ) { + $this->_StrokeFreeRose($dblImg,$value,$scaling,$xc,$yc,$r,$ri); + } + else { + // Check if we need to re-code the interpretation of the ordinal + // number in the data. Internally ordinal value 0 is East and then + // counted anti-clockwise. The user might choose an encoding + // that have 0 being the first axis to the right of the "N" axis and then + // counted clock-wise + if( $this->iOrdinalEncoding == KEYENCODING_CLOCKWISE ) { + if( $this->iType == WINDROSE_TYPE16 ) { + $const1 = 19; $const2 = 16; + } + elseif( $this->iType == WINDROSE_TYPE8 ) { + $const1 = 9; $const2 = 8; + } + else { + $const1 = 4; $const2 = 4; + } + $tmp = array(); + $n=count($this->iData); + foreach( $this->iData as $key => $val ) { + if( is_numeric($key) ) { + $key = ($const1 - $key) % $const2 ; + } + $tmp[$key] = $val; + } + $this->iData = $tmp; + } + $this->_StrokeRegularRose($dblImg,$value,$scaling,$xc,$yc,$r,$ri); + } + + // Stroke the labels + $this->scale->iFontSize *= $scaling; + $this->scale->iZFontSize *= $scaling; + $this->scale->StrokeLabels($dblImg,$xc,$yc,$ri,$rr); + + // Stroke the inner circle again since the legs + // might have written over it + $this->_ThickCircle($dblImg,$xc,$yc,$ri,$this->iCircGridWeight,$this->iGridColor1); + + if( $ww > $aImg->width ) { + JpgraphError::RaiseL(22020); + //('Windrose plot is too large to fit the specified Graph size. Please use WindrosePlot::SetSize() to make the plot smaller or increase the size of the Graph in the initial WindroseGraph() call.'); + } + + $x = $xc; + $y = $h; + $this->_StrokeLegend($dblImg,$x,$y,$scaling); + + if( $this->iAntiAlias ) { + $aImg->Copy($dblImg->img, $this->iX-$ww/2, $this->iY-$hh/2, 0, 0, $ww,$hh, $w,$h); + } + + // We need to restore the translation matrix + $aImg->SetTranslation(0,0); + + } + +} + +//============================================================ +// CLASS WindroseGraph +//============================================================ +class WindroseGraph extends Graph { + private $posx, $posy; + public $plots=array(); + + function __construct($width=300,$height=200,$cachedName="",$timeout=0,$inline=1) { + parent::__construct($width,$height,$cachedName,$timeout,$inline); + $this->posx=$width/2; + $this->posy=$height/2; + $this->SetColor('white'); + $this->title->SetFont(FF_VERDANA,FS_NORMAL,12); + $this->title->SetMargin(8); + $this->subtitle->SetFont(FF_VERDANA,FS_NORMAL,10); + $this->subtitle->SetMargin(0); + $this->subsubtitle->SetFont(FF_VERDANA,FS_NORMAL,8); + $this->subsubtitle->SetMargin(0); + } + + function StrokeTexts() { + if( $this->texts != null ) { + $n = count($this->texts); + for($i=0; $i < $n; ++$i ) { + $this->texts[$i]->Stroke($this->img); + } + } + } + + function StrokeIcons() { + if( $this->iIcons != null ) { + $n = count($this->iIcons); + for( $i=0; $i < $n; ++$i ) { + // Since Windrose graphs doesn't have any linear scale the position of + // each icon has to be given as absolute coordinates + $this->iIcons[$i]->_Stroke($this->img); + } + } + } + + //--------------- + // PUBLIC METHODS + function Add($aObj) { + if( is_array($aObj) && count($aObj) > 0 ) { + $cl = $aObj[0]; + } + else { + $cl = $aObj; + } + if( $cl instanceof Text ) { + $this->AddText($aObj); + } + elseif( $cl instanceof IconPlot ) { + $this->AddIcon($aObj); + } + elseif( ($cl instanceof WindrosePlot) || ($cl instanceof LayoutRect) || ($cl instanceof LayoutHor)) { + $this->plots[] = $aObj; + } + else { + JpgraphError::RaiseL(22021); + } + } + + function AddText($aTxt,$aToY2=false) { + parent::AddText($aTxt); + } + + function SetColor($c) { + $this->SetMarginColor($c); + } + + // Method description + function Stroke($aStrokeFileName="") { + + // If the filename is the predefined value = '_csim_special_' + // we assume that the call to stroke only needs to do enough + // to correctly generate the CSIM maps. + // We use this variable to skip things we don't strictly need + // to do to generate the image map to improve performance + // as best we can. Therefore you will see a lot of tests !$_csim in the + // code below. + $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); + + // We need to know if we have stroked the plot in the + // GetCSIMareas. Otherwise the CSIM hasn't been generated + // and in the case of GetCSIM called before stroke to generate + // CSIM without storing an image to disk GetCSIM must call Stroke. + $this->iHasStroked = true; + + if( $this->background_image != "" || $this->background_cflag != "" ) { + $this->StrokeFrameBackground(); + } + else { + $this->StrokeFrame(); + } + + // n holds number of plots + $n = count($this->plots); + for($i=0; $i < $n ; ++$i) { + $this->plots[$i]->Stroke($this); + } + + $this->footer->Stroke($this->img); + $this->StrokeIcons(); + $this->StrokeTexts(); + $this->StrokeTitles(); + + // If the filename is given as the special "__handle" + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline, + $aStrokeFileName); + } + } + +} // Class + +?> diff --git a/Societes/ric/jpgraph/lang/de.inc.php b/Societes/ric/jpgraph/lang/de.inc.php new file mode 100755 index 00000000..37ba264f --- /dev/null +++ b/Societes/ric/jpgraph/lang/de.inc.php @@ -0,0 +1,552 @@ +,) +$_jpg_messages = array( + +/* +** Headers wurden bereits gesendet - Fehler. Dies wird als HTML formatiert, weil es direkt als text zurueckgesendet wird +*/ +10 => array('
    JpGraph Fehler: +HTTP header wurden bereits gesendet.
    Fehler in der Datei %s in der Zeile %d.
    Erklärung:
    HTTP header wurden bereits zum Browser gesendet, wobei die Daten als Text gekennzeichnet wurden, bevor die Bibliothek die Chance hatte, seinen Bild-HTTP-Header zum Browser zu schicken. Dies verhindert, dass die Bibliothek Bilddaten zum Browser schicken kann (weil sie vom Browser als Text interpretiert würden und daher nur Mist dargestellt würde).

    Wahrscheinlich steht Text im Skript bevor Graph::Stroke() aufgerufen wird. Wenn dieser Text zum Browser gesendet wird, nimmt dieser an, dass die gesamten Daten aus Text bestehen. Such nach irgendwelchem Text, auch nach Leerzeichen und Zeilenumbrüchen, die eventuell bereits zum Browser gesendet wurden.

    Zum Beispiel ist ein oft auftretender Fehler, eine Leerzeile am Anfang der Datei oder vor Graph::Stroke() zu lassen."<?php".

    ',2), + +/* +** Setup Fehler +*/ +11 => array('Es wurde kein Pfad für CACHE_DIR angegeben. Bitte gib einen Pfad CACHE_DIR in der Datei jpg-config.inc an.',0), +12 => array('Es wurde kein Pfad für TTF_DIR angegeben und der Pfad kann nicht automatisch ermittelt werden. Bitte gib den Pfad in der Datei jpg-config.inc an.',0), +13 => array('The installed PHP version (%s) is not compatible with this release of the library. The library requires at least PHP version %s',2), + +/* +** jpgraph_bar +*/ + +2001 => array('Die Anzahl der Farben ist nicht gleich der Anzahl der Vorlagen in BarPlot::SetPattern().',0), +2002 => array('Unbekannte Vorlage im Aufruf von BarPlot::SetPattern().',0), +2003 => array('Anzahl der X- und Y-Koordinaten sind nicht identisch. Anzahl der X-Koordinaten: %d; Anzahl der Y-Koordinaten: %d.',2), +2004 => array('Alle Werte für ein Balkendiagramm (barplot) müssen numerisch sein. Du hast den Wert nr [%d] == %s angegeben.',2), +2005 => array('Du hast einen leeren Vektor für die Schattierungsfarben im Balkendiagramm (barplot) angegeben.',0), +2006 => array('Unbekannte Position für die Werte der Balken: %s.',1), +2007 => array('Kann GroupBarPlot nicht aus einem leeren Vektor erzeugen.',0), +2008 => array('GroupBarPlot Element nbr %d wurde nicht definiert oder ist leer.',0), +2009 => array('Eins der Objekte, das an GroupBar weitergegeben wurde ist kein Balkendiagramm (BarPlot). Versichere Dich, dass Du den GroupBarPlot aus einem Vektor von Balkendiagrammen (barplot) oder AccBarPlot-Objekten erzeugst. (Class = %s)',1), +2010 => array('Kann AccBarPlot nicht aus einem leeren Vektor erzeugen.',0), +2011 => array('AccBarPlot-Element nbr %d wurde nicht definiert oder ist leer.',1), +2012 => array('Eins der Objekte, das an AccBar weitergegeben wurde ist kein Balkendiagramm (barplot). Versichere Dich, dass Du den AccBar-Plot aus einem Vektor von Balkendiagrammen (barplot) erzeugst. (Class=%s)',1), +2013 => array('Du hast einen leeren Vektor für die Schattierungsfarben im Balkendiagramm (barplot) angegeben.',0), +2014 => array('Die Anzahl der Datenpunkte jeder Datenreihe in AccBarPlot muss gleich sein.',0), +2015 => array('Individual bar plots in an AccBarPlot or GroupBarPlot can not have specified X-coordinates',0), + + +/* +** jpgraph_date +*/ + +3001 => array('Es ist nur möglich, entweder SetDateAlign() oder SetTimeAlign() zu benutzen, nicht beides!',0), + +/* +** jpgraph_error +*/ + +4002 => array('Fehler bei den Eingabedaten von LineErrorPlot. Die Anzahl der Datenpunkte mus ein Mehrfaches von drei sein!',0), + +/* +** jpgraph_flags +*/ + +5001 => array('Unbekannte Flaggen-Größe (%d).',1), +5002 => array('Der Flaggen-Index %s existiert nicht.',1), +5003 => array('Es wurde eine ungültige Ordnungszahl (%d) für den Flaggen-Index angegeben.',1), +5004 => array('Der Landesname %s hat kein korrespondierendes Flaggenbild. Die Flagge mag existieren, abr eventuell unter einem anderen Namen, z.B. versuche "united states" statt "usa".',1), + + +/* +** jpgraph_gantt +*/ + +6001 => array('Interner Fehler. Die Höhe für ActivityTitles ist < 0.',0), +6002 => array('Es dürfen keine negativen Werte für die Gantt-Diagramm-Dimensionen angegeben werden. Verwende 0, wenn die Dimensionen automatisch ermittelt werden sollen.',0), +6003 => array('Ungültiges Format für den Bedingungs-Parameter bei Index=%d in CreateSimple(). Der Parameter muss bei index 0 starten und Vektoren in der Form (Row,Constrain-To,Constrain-Type) enthalten.',1), +6004 => array('Ungültiges Format für den Fortschritts-Parameter bei Index=%d in CreateSimple(). Der Parameter muss bei Index 0 starten und Vektoren in der Form (Row,Progress) enthalten.',1), +6005 => array('SetScale() ist nicht sinnvoll bei Gantt-Diagrammen.',0), +6006 => array('Das Gantt-Diagramm kann nicht automatisch skaliert werden. Es existieren keine Aktivitäten mit Termin. [GetBarMinMax() start >= n]',0), +6007 => array('Plausibiltätsprüfung für die automatische Gantt-Diagramm-Größe schlug fehl. Entweder die Breite (=%d) oder die Höhe (=%d) ist größer als MAX_GANTTIMG_SIZE. Dies kann möglicherweise durch einen falschen Wert bei einer Aktivität hervorgerufen worden sein.',2), +6008 => array('Du hast eine Bedingung angegeben von Reihe=%d bis Reihe=%d, die keine Aktivität hat.',2), +6009 => array('Unbekannter Bedingungstyp von Reihe=%d bis Reihe=%d',2), +6010 => array('Ungültiger Icon-Index für das eingebaute Gantt-Icon [%d]',1), +6011 => array('Argument für IconImage muss entweder ein String oder ein Integer sein.',0), +6012 => array('Unbekannter Typ bei der Gantt-Objekt-Title-Definition.',0), +6015 => array('Ungültige vertikale Position %d',1), +6016 => array('Der eingegebene Datums-String (%s) für eine Gantt-Aktivität kann nicht interpretiert werden. Versichere Dich, dass es ein gültiger Datumsstring ist, z.B. 2005-04-23 13:30',1), +6017 => array('Unbekannter Datumstyp in GanttScale (%s).',1), +6018 => array('Intervall für Minuten muss ein gerader Teiler einer Stunde sein, z.B. 1,5,10,12,15,20,30, etc. Du hast ein Intervall von %d Minuten angegeben.',1), +6019 => array('Die vorhandene Breite (%d) für die Minuten ist zu klein, um angezeigt zu werden. Bitte benutze die automatische Größenermittlung oder vergrößere die Breite des Diagramms.',1), +6020 => array('Das Intervall für die Stunden muss ein gerader Teiler eines Tages sein, z.B. 0:30, 1:00, 1:30, 4:00, etc. Du hast ein Intervall von %d eingegeben.',1), +6021 => array('Unbekanntes Format für die Woche.',0), +6022 => array('Die Gantt-Skala wurde nicht eingegeben.',0), +6023 => array('Wenn Du sowohl Stunden als auch Minuten anzeigen lassen willst, muss das Stunden-Interval gleich 1 sein (anderenfalls ist es nicht sinnvoll, Minuten anzeigen zu lassen).',0), +6024 => array('Das CSIM-Ziel muss als String angegeben werden. Der Start des Ziels ist: %d',1), +6025 => array('Der CSIM-Alt-Text muss als String angegeben werden. Der Beginn des Alt-Textes ist: %d',1), +6027 => array('Der Fortschrittswert muss im Bereich [0, 1] liegen.',0), +6028 => array('Die eingegebene Höhe (%d) für GanttBar ist nicht im zulässigen Bereich.',1), +6029 => array('Der Offset für die vertikale Linie muss im Bereich [0,1] sein.',0), +6030 => array('Unbekannte Pfeilrichtung für eine Verbindung.',0), +6031 => array('Unbekannter Pfeiltyp für eine Verbindung.',0), +6032 => array('Interner Fehler: Unbekannter Pfadtyp (=%d) für eine Verbindung.',1), +6033 => array('Array of fonts must contain arrays with 3 elements, i.e. (Family, Style, Size)',0), + +/* +** jpgraph_gradient +*/ + +7001 => array('Unbekannter Gradiententyp (=%d).',1), + +/* +** jpgraph_iconplot +*/ + +8001 => array('Der Mix-Wert für das Icon muss zwischen 0 und 100 sein.',0), +8002 => array('Die Ankerposition für Icons muss entweder "top", "bottom", "left", "right" oder "center" sein.',0), +8003 => array('Es ist nicht möglich, gleichzeitig ein Bild und eine Landesflagge für dasselbe Icon zu definieren',0), +8004 => array('Wenn Du Landesflaggen benutzen willst, musst Du die Datei "jpgraph_flags.php" hinzufügen (per include).',0), + +/* +** jpgraph_imgtrans +*/ + +9001 => array('Der Wert für die Bildtransformation ist außerhalb des zulässigen Bereichs. Der verschwindende Punkt am Horizont muss als Wert zwischen 0 und 1 angegeben werden.',0), + +/* +** jpgraph_lineplot +*/ + +10001 => array('Die Methode LinePlot::SetFilled() sollte nicht mehr benutzt werden. Benutze lieber SetFillColor()',0), +10002 => array('Der Plot ist zu kompliziert für FastLineStroke. Benutze lieber den StandardStroke()',0), +10003 => array('Each plot in an accumulated lineplot must have the same number of data points.',0), +/* +** jpgraph_log +*/ + +11001 => array('Deine Daten enthalten nicht-numerische Werte.',0), +11002 => array('Negative Werte können nicht für logarithmische Achsen verwendet werden.',0), +11003 => array('Deine Daten enthalten nicht-numerische Werte.',0), +11004 => array('Skalierungsfehler für die logarithmische Achse. Es gibt ein Problem mit den Daten der Achse. Der größte Wert muss größer sein als Null. Es ist mathematisch nicht möglich, einen Wert gleich Null in der Skala zu haben.',0), +11005 => array('Das Tick-Intervall für die logarithmische Achse ist nicht definiert. Lösche jeden Aufruf von SetTextLabelStart() oder SetTextTickInterval() bei der logarithmischen Achse.',0), + +/* +** jpgraph_mgraph +*/ + +12001 => array("Du benutzt GD 2.x und versuchst ein Nicht-Truecolor-Bild als Hintergrundbild zu benutzen. Um Hintergrundbilder mit GD 2.x zu benutzen, ist es notwendig Truecolor zu aktivieren, indem die USE_TRUECOLOR-Konstante auf TRUE gesetzt wird. Wegen eines Bugs in GD 2.0.1 ist die Qualität der Truetype-Schriften sehr schlecht, wenn man Truetype-Schriften mit Truecolor-Bildern verwendet.",0), +12002 => array('Ungültiger Dateiname für MGraph::SetBackgroundImage() : %s. Die Datei muss eine gültige Dateierweiterung haben (jpg,gif,png), wenn die automatische Typerkennung verwendet wird.',1), +12003 => array('Unbekannte Dateierweiterung (%s) in MGraph::SetBackgroundImage() für Dateiname: %s',2), +12004 => array('Das Bildformat des Hintergrundbildes (%s) wird von Deiner System-Konfiguration nicht unterstützt. ',1), +12005 => array('Das Hintergrundbild kann nicht gelesen werden: %s',1), +12006 => array('Es wurden ungültige Größen für Breite oder Höhe beim Erstellen des Bildes angegeben, (Breite=%d, Höhe=%d)',2), +12007 => array('Das Argument für MGraph::Add() ist nicht gültig für GD.',0), +12008 => array('Deine PHP- (und GD-lib-) Installation scheint keine bekannten Bildformate zu unterstützen.',0), +12009 => array('Deine PHP-Installation unterstützt das gewählte Bildformat nicht: %s',1), +12010 => array('Es konnte kein Bild als Datei %s erzeugt werden. Überprüfe, ob Du die entsprechenden Schreibrechte im aktuellen Verzeichnis hast.',1), +12011 => array('Es konnte kein Truecolor-Bild erzeugt werden. Überprüfe, ob Du wirklich die GD2-Bibliothek installiert hast.',0), +12012 => array('Es konnte kein Bild erzeugt werden. Überprüfe, ob Du wirklich die GD2-Bibliothek installiert hast.',0), + +/* +** jpgraph_pie3d +*/ + +14001 => array('Pie3D::ShowBorder(). Missbilligte Funktion. Benutze Pie3D::SetEdge(), um die Ecken der Tortenstücke zu kontrollieren.',0), +14002 => array('PiePlot3D::SetAngle() 3D-Torten-Projektionswinkel muss zwischen 5 und 85 Grad sein.',0), +14003 => array('Interne Festlegung schlug fehl. Pie3D::Pie3DSlice',0), +14004 => array('Tortenstück-Startwinkel muss zwischen 0 und 360 Grad sein.',0), +14005 => array('Pie3D Interner Fehler: Versuch, zweimal zu umhüllen bei der Suche nach dem Startindex.',0,), +14006 => array('Pie3D Interner Fehler: Z-Sortier-Algorithmus für 3D-Tortendiagramme funktioniert nicht einwandfrei (2). Versuch, zweimal zu umhüllen beim Erstellen des Bildes.',0), +14007 => array('Die Breite für das 3D-Tortendiagramm ist 0. Gib eine Breite > 0 an.',0), + +/* +** jpgraph_pie +*/ + +15001 => array('PiePLot::SetTheme() Unbekannter Stil: %s',1), +15002 => array('Argument für PiePlot::ExplodeSlice() muss ein Integer-Wert sein',0), +15003 => array('Argument für PiePlot::Explode() muss ein Vektor mit Integer-Werten sein.',0), +15004 => array('Tortenstück-Startwinkel muss zwischen 0 und 360 Grad sein.',0), +15005 => array('PiePlot::SetFont() sollte nicht mehr verwendet werden. Benutze stattdessen PiePlot->value->SetFont().',0), +15006 => array('PiePlot::SetSize() Radius für Tortendiagramm muss entweder als Bruch [0, 0.5] der Bildgröße oder als Absoluwert in Pixel im Bereich [10, 1000] angegeben werden.',0), +15007 => array('PiePlot::SetFontColor() sollte nicht mehr verwendet werden. Benutze stattdessen PiePlot->value->SetColor()..',0), +15008 => array('PiePlot::SetLabelType() der Typ für Tortendiagramme muss entweder 0 or 1 sein (nicht %d).',1), +15009 => array('Ungültiges Tortendiagramm. Die Summe aller Daten ist Null.',0), +15010 => array('Die Summe aller Daten ist Null.',0), +15011 => array('Um Bildtransformationen benutzen zu können, muss die Datei jpgraph_imgtrans.php eingefügt werden (per include).',0), // @todo translate into German +15012 => array('PiePlot::SetTheme() is no longer recommended. Use PieGraph::SetTheme()',0), + +/* +** jpgraph_plotband +*/ + +16001 => array('Die Dichte für das Pattern muss zwischen 1 und 100 sein. (Du hast %f eingegeben)',1), +16002 => array('Es wurde keine Position für das Pattern angegeben.',0), +16003 => array('Unbekannte Pattern-Definition (%d)',0), +16004 => array('Der Mindeswert für das PlotBand ist größer als der Maximalwert. Bitte korrigiere dies!',0), + + +/* +** jpgraph_polar +*/ + +17001 => array('PolarPlots müssen eine gerade Anzahl von Datenpunkten haben. Jeder Datenpunkt ist ein Tupel (Winkel, Radius).',0), +17002 => array('Unbekannte Ausrichtung für X-Achsen-Titel. (%s)',1), +//17003 => array('Set90AndMargin() wird für PolarGraph nicht unterstützt.',0), +17004 => array('Unbekannter Achsentyp für PolarGraph. Er muss entweder \'lin\' oder \'log\' sein.',0), + +/* +** jpgraph_radar +*/ + +18001 => array('ClientSideImageMaps werden für RadarPlots nicht unterstützt.',0), +18002 => array('RadarGraph::SupressTickMarks() sollte nicht mehr verwendet werden. Benutze stattdessen HideTickMarks().',0), +18003 => array('Ungültiger Achsentyp für RadarPlot (%s). Er muss entweder \'lin\' oder \'log\' sein.',1), +18004 => array('Die RadarPlot-Größe muss zwischen 0.1 und 1 sein. (Dein Wert=%f)',1), +18005 => array('RadarPlot: nicht unterstützte Tick-Dichte: %d',1), +18006 => array('Minimum Daten %f (RadarPlots sollten nur verwendet werden, wenn alle Datenpunkte einen Wert > 0 haben).',1), +18007 => array('Die Anzahl der Titel entspricht nicht der Anzahl der Datenpunkte.',0), +18008 => array('Jeder RadarPlot muss die gleiche Anzahl von Datenpunkten haben.',0), + +/* +** jpgraph_regstat +*/ + +19001 => array('Spline: Anzahl der X- und Y-Koordinaten muss gleich sein.',0), +19002 => array('Ungültige Dateneingabe für Spline. Zwei oder mehr aufeinanderfolgende X-Werte sind identisch. Jeder eigegebene X-Wert muss unterschiedlich sein, weil vom mathematischen Standpunkt ein Eins-zu-Eins-Mapping vorliegen muss, d.h. jeder X-Wert korrespondiert mit exakt einem Y-Wert.',0), +19003 => array('Bezier: Anzahl der X- und Y-Koordinaten muss gleich sein.',0), + +/* +** jpgraph_scatter +*/ + +20001 => array('Fieldplots müssen die gleiche Anzahl von X und Y Datenpunkten haben.',0), +20002 => array('Bei Fieldplots muss ein Winkel für jeden X und Y Datenpunkt angegeben werden.',0), +20003 => array('Scatterplots müssen die gleiche Anzahl von X- und Y-Datenpunkten haben.',0), + +/* +** jpgraph_stock +*/ + +21001 => array('Die Anzahl der Datenwerte für Stock-Charts müssen ein Mehrfaches von %d Datenpunkten sein.',1), + +/* +** jpgraph_plotmark +*/ + +23001 => array('Der Marker "%s" existiert nicht in der Farbe: %d',2), +23002 => array('Der Farb-Index ist zu hoch für den Marker "%s"',1), +23003 => array('Ein Dateiname muss angegeben werden, wenn Du den Marker-Typ auf MARK_IMG setzt.',0), + +/* +** jpgraph_utils +*/ + +24001 => array('FuncGenerator : Keine Funktion definiert. ',0), +24002 => array('FuncGenerator : Syntax-Fehler in der Funktionsdefinition ',0), +24003 => array('DateScaleUtils: Unknown tick type specified in call to GetTicks()',0), +24004 => array('ReadCSV2: Die anzahl der spalten fehler in %s reihe %d',2), +/* +** jpgraph +*/ + +25001 => array('Diese PHP-Installation ist nicht mit der GD-Bibliothek kompiliert. Bitte kompiliere PHP mit GD-Unterstützung neu, damit JpGraph funktioniert. (Weder die Funktion imagetypes() noch imagecreatefromstring() existiert!)',0), +25002 => array('Diese PHP-Installation scheint nicht die benötigte GD-Bibliothek zu unterstützen. Bitte schau in der PHP-Dokumentation nach, wie man die GD-Bibliothek installiert und aktiviert.',0), +25003 => array('Genereller PHP Fehler : Bei %s:%d : %s',3), +25004 => array('Genereller PHP Fehler : %s ',1), +25005 => array('PHP_SELF, die PHP-Global-Variable kann nicht ermittelt werden. PHP kann nicht von der Kommandozeile gestartet werden, wenn der Cache oder die Bilddateien automatisch benannt werden sollen.',0), +25006 => array('Die Benutzung der FF_CHINESE (FF_BIG5) Schriftfamilie benötigt die iconv() Funktion in Deiner PHP-Konfiguration. Dies wird nicht defaultmäßig in PHP kompiliert (benötigt "--width-iconv" bei der Konfiguration).',0), +25007 => array('Du versuchst das lokale (%s) zu verwenden, was von Deiner PHP-Installation nicht unterstützt wird. Hinweis: Benutze \'\', um das defaultmäßige Lokale für diese geographische Region festzulegen.',1), +25008 => array('Die Bild-Breite und Höhe in Graph::Graph() müssen numerisch sein',0), +25009 => array('Die Skalierung der Achsen muss angegeben werden mit Graph::SetScale()',0), + +25010 => array('Graph::Add() Du hast versucht, einen leeren Plot zum Graph hinzuzufügen.',0), +25011 => array('Graph::AddY2() Du hast versucht, einen leeren Plot zum Graph hinzuzufügen.',0), +25012 => array('Graph::AddYN() Du hast versucht, einen leeren Plot zum Graph hinzuzufügen.',0), +25013 => array('Es können nur Standard-Plots zu multiplen Y-Achsen hinzugefügt werden',0), +25014 => array('Graph::AddText() Du hast versucht, einen leeren Text zum Graph hinzuzufügen.',0), +25015 => array('Graph::AddLine() Du hast versucht, eine leere Linie zum Graph hinzuzufügen.',0), +25016 => array('Graph::AddBand() Du hast versucht, ein leeres Band zum Graph hinzuzufügen.',0), +25017 => array('Du benutzt GD 2.x und versuchst, ein Hintergrundbild in einem Truecolor-Bild zu verwenden. Um Hintergrundbilder mit GD 2.x zu verwenden, ist es notwendig, Truecolor zu aktivieren, indem die USE_TRUECOLOR-Konstante auf TRUE gesetzt wird. Wegen eines Bugs in GD 2.0.1 ist die Qualität der Schrift sehr schlecht, wenn Truetype-Schrift in Truecolor-Bildern verwendet werden.',0), +25018 => array('Falscher Dateiname für Graph::SetBackgroundImage() : "%s" muss eine gültige Dateinamenerweiterung (jpg,gif,png) haben, wenn die automatische Dateityperkennung verwenndet werden soll.',1), +25019 => array('Unbekannte Dateinamenerweiterung (%s) in Graph::SetBackgroundImage() für Dateiname: "%s"',2), + +25020 => array('Graph::SetScale(): Dar Maximalwert muss größer sein als der Mindestwert.',0), +25021 => array('Unbekannte Achsendefinition für die Y-Achse. (%s)',1), +25022 => array('Unbekannte Achsendefinition für die X-Achse. (%s)',1), +25023 => array('Nicht unterstützter Y2-Achsentyp: "%s" muss einer von (lin,log,int) sein.',1), +25024 => array('Nicht unterstützter X-Achsentyp: "%s" muss einer von (lin,log,int) sein.',1), +25025 => array('Nicht unterstützte Tick-Dichte: %d',1), +25026 => array('Nicht unterstützter Typ der nicht angegebenen Y-Achse. Du hast entweder: 1. einen Y-Achsentyp für automatisches Skalieren definiert, aber keine Plots angegeben. 2. eine Achse direkt definiert, aber vergessen, die Tick-Dichte zu festzulegen.',0), +25027 => array('Kann cached CSIM "%s" zum Lesen nicht öffnen.',1), +25028 => array('Apache/PHP hat keine Schreibrechte, in das CSIM-Cache-Verzeichnis (%s) zu schreiben. Überprüfe die Rechte.',1), +25029 => array('Kann nicht in das CSIM "%s" schreiben. Überprüfe die Schreibrechte und den freien Speicherplatz.',1), + +25030 => array('Fehlender Skriptname für StrokeCSIM(). Der Name des aktuellen Skriptes muss als erster Parameter von StrokeCSIM() angegeben werden.',0), +25031 => array('Der Achsentyp muss mittels Graph::SetScale() angegeben werden.',0), +25032 => array('Es existieren keine Plots für die Y-Achse nbr:%d',1), +25033 => array('',0), +25034 => array('Undefinierte X-Achse kann nicht gezeichnet werden. Es wurden keine Plots definiert.',0), +25035 => array('Du hast Clipping aktiviert. Clipping wird nur für Diagramme mit 0 oder 90 Grad Rotation unterstützt. Bitte verändere Deinen Rotationswinkel (=%d Grad) dementsprechend oder deaktiviere Clipping.',1), +25036 => array('Unbekannter Achsentyp AxisStyle() : %s',1), +25037 => array('Das Bildformat Deines Hintergrundbildes (%s) wird von Deiner System-Konfiguration nicht unterstützt. ',1), +25038 => array('Das Hintergrundbild scheint von einem anderen Typ (unterschiedliche Dateierweiterung) zu sein als der angegebene Typ. Angegebenen: %s; Datei: %s',2), +25039 => array('Hintergrundbild kann nicht gelesen werden: "%s"',1), + +25040 => array('Es ist nicht möglich, sowohl ein Hintergrundbild als auch eine Hintergrund-Landesflagge anzugeben.',0), +25041 => array('Um Landesflaggen als Hintergrund benutzen zu können, muss die Datei "jpgraph_flags.php" eingefügt werden (per include).',0), +25042 => array('Unbekanntes Hintergrundbild-Layout',0), +25043 => array('Unbekannter Titelhintergrund-Stil.',0), +25044 => array('Automatisches Skalieren kann nicht verwendet werden, weil es unmöglich ist, einen gültigen min/max Wert für die Y-Achse zu ermitteln (nur Null-Werte).',0), +25045 => array('Die Schriftfamilien FF_HANDWRT und FF_BOOK sind wegen Copyright-Problemen nicht mehr verfügbar. Diese Schriften können nicht mehr mit JpGraph verteilt werden. Bitte lade Dir Schriften von http://corefonts.sourceforge.net/ herunter.',0), +25046 => array('Angegebene TTF-Schriftfamilie (id=%d) ist unbekannt oder existiert nicht. Bitte merke Dir, dass TTF-Schriften wegen Copyright-Problemen nicht mit JpGraph mitgeliefert werden. Du findest MS-TTF-Internetschriften (arial, courier, etc.) zum Herunterladen unter http://corefonts.sourceforge.net/',1), +25047 => array('Stil %s ist nicht verfügbar für Schriftfamilie %s',2), +25048 => array('Unbekannte Schriftstildefinition [%s].',1), +25049 => array('Schriftdatei "%s" ist nicht lesbar oder existiert nicht.',1), + +25050 => array('Erstes Argument für Text::Text() muss ein String sein.',0), +25051 => array('Ungültige Richtung angegeben für Text.',0), +25052 => array('PANIK: Interner Fehler in SuperScript::Stroke(). Unbekannte vertikale Ausrichtung für Text.',0), +25053 => array('PANIK: Interner Fehler in SuperScript::Stroke(). Unbekannte horizontale Ausrichtung für Text.',0), +25054 => array('Interner Fehler: Unbekannte Grid-Achse %s',1), +25055 => array('Axis::SetTickDirection() sollte nicht mehr verwendet werden. Benutze stattdessen Axis::SetTickSide().',0), +25056 => array('SetTickLabelMargin() sollte nicht mehr verwendet werden. Benutze stattdessen Axis::SetLabelMargin().',0), +25057 => array('SetTextTicks() sollte nicht mehr verwendet werden. Benutze stattdessen SetTextTickInterval().',0), +25058 => array('TextLabelIntevall >= 1 muss angegeben werden.',0), +25059 => array('SetLabelPos() sollte nicht mehr verwendet werden. Benutze stattdessen Axis::SetLabelSide().',0), + +25060 => array('Unbekannte Ausrichtung angegeben für X-Achsentitel (%s).',1), +25061 => array('Unbekannte Ausrichtung angegeben für Y-Achsentitel (%s).',1), +25062 => array('Label unter einem Winkel werden für die Y-Achse nicht unterstützt.',0), +25063 => array('Ticks::SetPrecision() sollte nicht mehr verwendet werden. Benutze stattdessen Ticks::SetLabelFormat() (oder Ticks::SetFormatCallback()).',0), +25064 => array('Kleinere oder größere Schrittgröße ist 0. Überprüfe, ob Du fälschlicherweise SetTextTicks(0) in Deinem Skript hast. Wenn dies nicht der Fall ist, bist Du eventuell über einen Bug in JpGraph gestolpert. Bitte sende einen Report und füge den Code an, der den Fehler verursacht hat.',0), +25065 => array('Tick-Positionen müssen als array() angegeben werden',0), +25066 => array('Wenn die Tick-Positionen und -Label von Hand eingegeben werden, muss die Anzahl der Ticks und der Label gleich sein.',0), +25067 => array('Deine von Hand eingegebene Achse und Ticks sind nicht korrekt. Die Skala scheint zu klein zu sein für den Tickabstand.',0), +25068 => array('Ein Plot hat eine ungültige Achse. Dies kann beispielsweise der Fall sein, wenn Du automatisches Text-Skalieren verwendest, um ein Liniendiagramm zu zeichnen mit nur einem Datenpunkt, oder wenn die Bildfläche zu klein ist. Es kann auch der Fall sein, dass kein Datenpunkt einen numerischen Wert hat (vielleicht nur \'-\' oder \'x\').',0), +25069 => array('Grace muss größer sein als 0',0), + +25070 => array('Deine Daten enthalten nicht-numerische Werte.',0), +25071 => array('Du hast mit SetAutoMin() einen Mindestwert angegeben, der größer ist als der Maximalwert für die Achse. Dies ist nicht möglich.',0), +25072 => array('Du hast mit SetAutoMax() einen Maximalwert angegeben, der kleiner ist als der Minimalwert der Achse. Dies ist nicht möglich.',0), +25073 => array('Interner Fehler. Der Integer-Skalierungs-Algorithmus-Vergleich ist außerhalb der Grenzen (r=%f).',1), +25074 => array('Interner Fehler. Der Skalierungsbereich ist negativ (%f) [für %s Achse]. Dieses Problem könnte verursacht werden durch den Versuch, \'ungültige\' Werte in die Daten-Vektoren einzugeben (z.B. nur String- oder NULL-Werte), was beim automatischen Skalieren einen Fehler erzeugt.',2), +25075 => array('Die automatischen Ticks können nicht gesetzt werden, weil min==max.',0), +25077 => array('Einstellfaktor für die Farbe muss größer sein als 0',0), +25078 => array('Unbekannte Farbe: %s',1), +25079 => array('Unbekannte Farbdefinition: %s, Größe=%d',2), + +25080 => array('Der Alpha-Parameter für Farben muss zwischen 0.0 und 1.0 liegen.',0), +25081 => array('Das ausgewählte Grafikformat wird entweder nicht unterstützt oder ist unbekannt [%s]',1), +25082 => array('Es wurden ungültige Größen für Breite und Höhe beim Erstellen des Bildes definiert (Breite=%d, Höhe=%d).',2), +25083 => array('Es wurde eine ungültige Größe beim Kopieren des Bildes angegeben. Die Größe für das kopierte Bild wurde auf 1 Pixel oder weniger gesetzt.',0), +25084 => array('Fehler beim Erstellen eines temporären GD-Canvas. Möglicherweise liegt ein Arbeitsspeicherproblem vor.',0), +25085 => array('Ein Bild kann nicht aus dem angegebenen String erzeugt werden. Er ist entweder in einem nicht unterstützen Format oder er represäntiert ein kaputtes Bild.',0), +25086 => array('Du scheinst nur GD 1.x installiert zu haben. Um Alphablending zu aktivieren, ist GD 2.x oder höher notwendig. Bitte installiere GD 2.x oder versichere Dich, dass die Konstante USE_GD2 richtig gesetzt ist. Standardmäßig wird die installierte GD-Version automatisch erkannt. Ganz selten wird GD2 erkannt, obwohl nur GD1 installiert ist. Die Konstante USE_GD2 muss dann zu "false" gesetzt werden.',0), +25087 => array('Diese PHP-Version wurde ohne TTF-Unterstützung konfiguriert. PHP muss mit TTF-Unterstützung neu kompiliert und installiert werden.',0), +25088 => array('Die GD-Schriftunterstützung wurde falsch konfiguriert. Der Aufruf von imagefontwidth() ist fehlerhaft.',0), +25089 => array('Die GD-Schriftunterstützung wurde falsch konfiguriert. Der Aufruf von imagefontheight() ist fehlerhaft.',0), + +25090 => array('Unbekannte Richtung angegeben im Aufruf von StrokeBoxedText() [%s].',1), +25091 => array('Die interne Schrift untestützt das Schreiben von Text in einem beliebigen Winkel nicht. Benutze stattdessen TTF-Schriften.',0), +25092 => array('Es liegt entweder ein Konfigurationsproblem mit TrueType oder ein Problem beim Lesen der Schriftdatei "%s" vor. Versichere Dich, dass die Datei existiert und Leserechte und -pfad vergeben sind. (wenn \'basedir\' restriction in PHP aktiviert ist, muss die Schriftdatei im Dokumentwurzelverzeichnis abgelegt werden). Möglicherweise ist die FreeType-Bibliothek falsch installiert. Versuche, mindestens zur FreeType-Version 2.1.13 zu aktualisieren und kompiliere GD mit einem korrekten Setup neu, damit die FreeType-Bibliothek gefunden werden kann.',1), +25093 => array('Die Schriftdatei "%s" kann nicht gelesen werden beim Aufruf von Image::GetBBoxTTF. Bitte versichere Dich, dass die Schrift gesetzt wurde, bevor diese Methode aufgerufen wird, und dass die Schrift im TTF-Verzeichnis installiert ist.',1), +25094 => array('Die Textrichtung muss in einem Winkel zwischen 0 und 90 engegeben werden.',0), +25095 => array('Unbekannte Schriftfamilien-Definition. ',0), +25096 => array('Der Farbpalette können keine weiteren Farben zugewiesen werden. Dem Bild wurde bereits die größtmögliche Anzahl von Farben (%d) zugewiesen und die Palette ist voll. Verwende stattdessen ein TrueColor-Bild',0), +25097 => array('Eine Farbe wurde als leerer String im Aufruf von PushColor() angegegeben.',0), +25098 => array('Negativer Farbindex. Unpassender Aufruf von PopColor().',0), +25099 => array('Die Parameter für Helligkeit und Kontrast sind außerhalb des zulässigen Bereichs [-1,1]',0), + +25100 => array('Es liegt ein Problem mit der Farbpalette und dem GD-Setup vor. Bitte deaktiviere anti-aliasing oder verwende GD2 mit TrueColor. Wenn die GD2-Bibliothek installiert ist, versichere Dich, dass die Konstante USE_GD2 auf "true" gesetzt und TrueColor aktiviert ist.',0), +25101 => array('Ungültiges numerisches Argument für SetLineStyle(): (%d)',1), +25102 => array('Ungültiges String-Argument für SetLineStyle(): %s',1), +25103 => array('Ungültiges Argument für SetLineStyle %s',1), +25104 => array('Unbekannter Linientyp: %s',1), +25105 => array('Es wurden NULL-Daten für ein gefülltes Polygon angegeben. Sorge dafür, dass keine NULL-Daten angegeben werden.',0), +25106 => array('Image::FillToBorder : es können keine weiteren Farben zugewiesen werden.',0), +25107 => array('In Datei "%s" kann nicht geschrieben werden. Überprüfe die aktuellen Schreibrechte.',1), +25108 => array('Das Bild kann nicht gestreamt werden. Möglicherweise liegt ein Fehler im PHP/GD-Setup vor. Kompiliere PHP neu und verwende die eingebaute GD-Bibliothek, die mit PHP angeboten wird.',0), +25109 => array('Deine PHP- (und GD-lib-) Installation scheint keine bekannten Grafikformate zu unterstützen. Sorge zunächst dafür, dass GD als PHP-Modul kompiliert ist. Wenn Du außerdem JPEG-Bilder verwenden willst, musst Du die JPEG-Bibliothek installieren. Weitere Details sind in der PHP-Dokumentation zu finden.',0), + +25110 => array('Dein PHP-Installation unterstützt das gewählte Grafikformat nicht: %s',1), +25111 => array('Das gecachete Bild %s kann nicht gelöscht werden. Problem mit den Rechten?',1), +25112 => array('Das Datum der gecacheten Datei (%s) liegt in der Zukunft.',1), +25113 => array('Das gecachete Bild %s kann nicht gelöscht werden. Problem mit den Rechten?',1), +25114 => array('PHP hat nicht die erforderlichen Rechte, um in die Cache-Datei %s zu schreiben. Bitte versichere Dich, dass der Benutzer, der PHP anwendet, die entsprechenden Schreibrechte für die Datei hat, wenn Du das Cache-System in JPGraph verwenden willst.',1), +25115 => array('Berechtigung für gecachetes Bild %s kann nicht gesetzt werden. Problem mit den Rechten?',1), +25116 => array('Datei kann nicht aus dem Cache %s geöffnet werden',1), +25117 => array('Gecachetes Bild %s kann nicht zum Lesen geöffnet werden.',1), +25118 => array('Verzeichnis %s kann nicht angelegt werden. Versichere Dich, dass PHP die Schreibrechte in diesem Verzeichnis hat.',1), +25119 => array('Rechte für Datei %s können nicht gesetzt werden. Problem mit den Rechten?',1), + +25120 => array('Die Position für die Legende muss als Prozentwert im Bereich 0-1 angegeben werden.',0), +25121 => array('Eine leerer Datenvektor wurde für den Plot eingegeben. Es muss wenigstens ein Datenpunkt vorliegen.',0), +25122 => array('Stroke() muss als Subklasse der Klasse Plot definiert sein.',0), +25123 => array('Du kannst keine Text-X-Achse mit X-Koordinaten verwenden. Benutze stattdessen eine "int" oder "lin" Achse.',0), +25124 => array('Der Eingabedatenvektor mus aufeinanderfolgende Werte von 0 aufwärts beinhalten. Der angegebene Y-Vektor beginnt mit leeren Werten (NULL).',0), +25125 => array('Ungültige Richtung für statische Linie.',0), +25126 => array('Es kann kein TrueColor-Bild erzeugt werden. Überprüfe, ob die GD2-Bibliothek und PHP korrekt aufgesetzt wurden.',0), +25127 => array('The library has been configured for automatic encoding conversion of Japanese fonts. This requires that PHP has the mb_convert_encoding() function. Your PHP installation lacks this function (PHP needs the "--enable-mbstring" when compiled).',0), +25128 => array('The function imageantialias() is not available in your PHP installation. Use the GD version that comes with PHP and not the standalone version.',0), +25129 => array('Anti-alias can not be used with dashed lines. Please disable anti-alias or use solid lines.',0), +25130 => array('Too small plot area. (%d x %d). With the given image size and margins there is to little space left for the plot. Increase the plot size or reduce the margins.',2), + +25131 => array('StrokeBoxedText2() only supports TTF fonts and not built-in bitmap fonts.',0), +25132 => array('Undefined property %s.',1), // @todo translate +25133 => array('Use Graph::SetTheme() after Graph::SetScale().',0), // @todo translate + +/* +** jpgraph_led +*/ + +25500 => array('Multibyte strings must be enabled in the PHP installation in order to run the LED module so that the function mb_strlen() is available. See PHP documentation for more information.',0), + + +/* +**--------------------------------------------------------------------------------------------- +** Pro-version strings +**--------------------------------------------------------------------------------------------- +*/ + +/* +** jpgraph_table +*/ + +27001 => array('GTextTable: Ungültiges Argument für Set(). Das Array-Argument muss 2-- dimensional sein.',0), +27002 => array('GTextTable: Ungültiges Argument für Set()',0), +27003 => array('GTextTable: Falsche Anzahl von Argumenten für GTextTable::SetColor()',0), +27004 => array('GTextTable: Angegebener Zellenbereich, der verschmolzen werden soll, ist ungültig.',0), +27005 => array('GTextTable: Bereits verschmolzene Zellen im Bereich (%d,%d) bis (%d,%d) können nicht ein weiteres Mal verschmolzen werden.',4), +27006 => array('GTextTable: Spalten-Argument = %d liegt außerhalb der festgelegten Tabellengröße.',1), +27007 => array('GTextTable: Zeilen-Argument = %d liegt außerhalb der festgelegten Tabellengröße.',1), +27008 => array('GTextTable: Spalten- und Zeilengröße müssen zu den Dimensionen der Tabelle passen.',0), +27009 => array('GTextTable: Die Anzahl der Tabellenspalten oder -zeilen ist 0. Versichere Dich, dass die Methoden Init() oder Set() aufgerufen werden.',0), +27010 => array('GTextTable: Es wurde keine Ausrichtung beim Aufruf von SetAlign() angegeben.',0), +27011 => array('GTextTable: Es wurde eine unbekannte Ausrichtung beim Aufruf von SetAlign() abgegeben. Horizontal=%s, Vertikal=%s',2), +27012 => array('GTextTable: Interner Fehler. Es wurde ein ungültiges Argument festgeleget %s',1), +27013 => array('GTextTable: Das Argument für FormatNumber() muss ein String sein.',0), +27014 => array('GTextTable: Die Tabelle wurde weder mit einem Aufruf von Set() noch von Init() initialisiert.',0), +27015 => array('GTextTable: Der Zellenbildbedingungstyp muss entweder TIMG_WIDTH oder TIMG_HEIGHT sein.',0), + +/* +** jpgraph_windrose +*/ + +22001 => array('Die Gesamtsumme der prozentualen Anteile aller Windrosenarme darf 100%% nicht überschreiten!\n(Aktuell max: %d)',1), +22002 => array('Das Bild ist zu klein für eine Skala. Bitte vergrößere das Bild.',0), +22004 => array('Die Etikettendefinition für Windrosenrichtungen müssen 16 Werte haben (eine für jede Kompassrichtung).',0), +22005 => array('Der Linientyp für radiale Linien muss einer von ("solid","dotted","dashed","longdashed") sein.',0), +22006 => array('Es wurde ein ungültiger Windrosentyp angegeben.',0), +22007 => array('Es wurden zu wenig Werte für die Bereichslegende angegeben.',0), +22008 => array('Interner Fehler: Versuch, eine freie Windrose zu plotten, obwohl der Typ keine freie Windrose ist.',0), +22009 => array('Du hast die gleiche Richtung zweimal angegeben, einmal mit einem Winkel und einmal mit einer Kompassrichtung (%f Grad).',0), +22010 => array('Die Richtung muss entweder ein numerischer Wert sein oder eine der 16 Kompassrichtungen',0), +22011 => array('Der Windrosenindex muss ein numerischer oder Richtungswert sein. Du hast angegeben Index=%d',1), +22012 => array('Die radiale Achsendefinition für die Windrose enthält eine nicht aktivierte Richtung.',0), +22013 => array('Du hast dasselbe Look&Feel für die gleiche Kompassrichtung zweimal engegeben, einmal mit Text und einmal mit einem Index (Index=%d)',1), +22014 => array('Der Index für eine Kompassrichtung muss zwischen 0 und 15 sein.',0), +22015 => array('Du hast einen unbekannten Windrosenplottyp angegeben.',0), +22016 => array('Der Windrosenarmindex muss ein numerischer oder ein Richtungswert sein.',0), +22017 => array('Die Windrosendaten enthalten eine Richtung, die nicht aktiviert ist. Bitte berichtige, welche Label angezeigt werden sollen.',0), +22018 => array('Du hast für dieselbe Kompassrichtung zweimal Daten angegeben, einmal mit Text und einmal mit einem Index (Index=%d)',1), +22019 => array('Der Index für eine Richtung muss zwischen 0 und 15 sein. Winkel dürfen nicht für einen regelmäßigen Windplot angegeben werden, sondern entweder ein Index oder eine Kompassrichtung.',0), +22020 => array('Der Windrosenplot ist zu groß für die angegebene Bildgröße. Benutze entweder WindrosePlot::SetSize(), um den Plot kleiner zu machen oder vergrößere das Bild im ursprünglichen Aufruf von WindroseGraph().',0), +22021 => array('It is only possible to add Text, IconPlot or WindrosePlot to a Windrose Graph',0), + +/* +** jpgraph_odometer +*/ + +13001 => array('Unbekannter Nadeltypstil (%d).',1), +13002 => array('Ein Wert für das Odometer (%f) ist außerhalb des angegebenen Bereichs [%f,%f]',3), + +/* +** jpgraph_barcode +*/ + +1001 => array('Unbekannte Kodier-Specifikation: %s',1), +1002 => array('datenvalidierung schlug fehl. [%s] kann nicht mittels der Kodierung "%s" kodiert werden',2), +1003 => array('Interner Kodierfehler. Kodieren von %s ist nicht möglich in Code 128',1), +1004 => array('Interner barcode Fehler. Unbekannter UPC-E Kodiertyp: %s',1), +1005 => array('Interner Fehler. Das Textzeichen-Tupel (%s, %s) kann nicht im Code-128 Zeichensatz C kodiert werden.',2), +1006 => array('Interner Kodierfehler für CODE 128. Es wurde versucht, CTRL in CHARSET != A zu kodieren.',0), +1007 => array('Interner Kodierfehler für CODE 128. Es wurde versucht, DEL in CHARSET != B zu kodieren.',0), +1008 => array('Interner Kodierfehler für CODE 128. Es wurde versucht, kleine Buchstaben in CHARSET != B zu kodieren.',0), +1009 => array('Kodieren mittels CODE 93 wird noch nicht unterstützt.',0), +1010 => array('Kodieren mittels POSTNET wird noch nicht unterstützt.',0), +1011 => array('Nicht untrstütztes Barcode-Backend für den Typ %s',1), + +/* +** PDF417 +*/ + +26000 => array('PDF417: The PDF417 module requires that the PHP installation must support the function bcmod(). This is normally enabled at compile time. See documentation for more information.',0), +26001 => array('PDF417: Die Anzahl der Spalten muss zwischen 1 und 30 sein.',0), +26002 => array('PDF417: Der Fehler-Level muss zwischen 0 und 8 sein.',0), +26003 => array('PDF417: Ungültiges Format für Eingabedaten, um sie mit PDF417 zu kodieren.',0), +26004 => array('PDF417: die eigebenen Daten können nicht mit Fehler-Level %d und %d spalten kodiert werden, weil daraus zu viele Symbole oder mehr als 90 Zeilen resultieren.',2), +26005 => array('PDF417: Die Datei "%s" kann nicht zum Schreiben geöffnet werden.',1), +26006 => array('PDF417: Interner Fehler. Die Eingabedatendatei für PDF417-Cluster %d ist fehlerhaft.',1), +26007 => array('PDF417: Interner Fehler. GetPattern: Ungültiger Code-Wert %d (Zeile %d)',2), +26008 => array('PDF417: Interner Fehler. Modus wurde nicht in der Modusliste!! Modus %d',1), +26009 => array('PDF417: Kodierfehler: Ungültiges Zeichen. Zeichen kann nicht mit ASCII-Code %d kodiert werden.',1), +26010 => array('PDF417: Interner Fehler: Keine Eingabedaten beim Dekodieren.',0), +26011 => array('PDF417: Kodierfehler. Numerisches Kodieren bei nicht-numerischen Daten nicht möglich.',0), +26012 => array('PDF417: Interner Fehler. Es wurden für den Binary-Kompressor keine Daten zum Dekodieren eingegeben.',0), +26013 => array('PDF417: Interner Fehler. Checksum Fehler. Koeffiziententabellen sind fehlerhaft.',0), +26014 => array('PDF417: Interner Fehler. Es wurden keine Daten zum Berechnen von Kodewörtern eingegeben.',0), +26015 => array('PDF417: Interner Fehler. Ein Eintrag 0 in die Statusübertragungstabellen ist nicht NULL. Eintrag 1 = (%s)',1), +26016 => array('PDF417: Interner Fehler: Nichtregistrierter Statusübertragungsmodus beim Dekodieren.',0), + + +/* +** jpgraph_contour +*/ + +28001 => array('Dritten parameter fur Contour muss ein vector der fargen sind.',0), +28002 => array('Die anzahlen der farges jeder isobar linien muss gleich sein.',0), +28003 => array('ContourPlot Interner Fehler: isobarHCrossing: Spalten index ist zu hoch (%d)',1), +28004 => array('ContourPlot Interner Fehler: isobarHCrossing: Reihe index ist zu hoch (%d)',1), +28005 => array('ContourPlot Interner Fehler: isobarVCrossing: Reihe index ist zu hoch (%d)',1), +28006 => array('ContourPlot Interner Fehler: isobarVCrossing: Spalten index ist zu hoch (%d)',1), +28007 => array('ContourPlot. Interpolation faktor ist zu hoch (>5)',0), + + +/* + * jpgraph_matrix and colormap +*/ +29201 => array('Min range value must be less or equal to max range value for colormaps',0), +29202 => array('The distance between min and max value is too small for numerical precision',0), +29203 => array('Number of color quantification level must be at least %d',1), +29204 => array('Number of colors (%d) is invalid for this colormap. It must be a number that can be written as: %d + k*%d',3), +29205 => array('Colormap specification out of range. Must be an integer in range [0,%d]',1), +29206 => array('Invalid object added to MatrixGraph',0), +29207 => array('Empty input data specified for MatrixPlot',0), +29208 => array('Unknown side specifiction for matrix labels "%s"',1), +29209 => array('CSIM Target matrix must be the same size as the data matrix (csim=%d x %d, data=%d x %d)',4), +29210 => array('CSIM Target for matrix labels does not match the number of labels (csim=%d, labels=%d)',2), + + +/* +* jpgraph_theme +*/ +30001 => array("Theme::%s() is not defined. \nPlease make %s(\$graph) function in your theme classs.",2), + + +); + +?> diff --git a/Societes/ric/jpgraph/lang/en.inc.php b/Societes/ric/jpgraph/lang/en.inc.php new file mode 100755 index 00000000..101e8bd8 --- /dev/null +++ b/Societes/ric/jpgraph/lang/en.inc.php @@ -0,0 +1,545 @@ +,) +$_jpg_messages = array( + +/* +** Headers already sent error. This is formatted as HTML different since this will be sent back directly as text +*/ +10 => array('
    JpGraph Error: +HTTP headers have already been sent.
    Caused by output from file %s at line %d.
    Explanation:
    HTTP headers have already been sent back to the browser indicating the data as text before the library got a chance to send it\'s image HTTP header to this browser. This makes it impossible for the library to send back image data to the browser (since that would be interpretated as text by the browser and show up as junk text).

    Most likely you have some text in your script before the call to Graph::Stroke(). If this texts gets sent back to the browser the browser will assume that all data is plain text. Look for any text, even spaces and newlines, that might have been sent back to the browser.

    For example it is a common mistake to leave a blank line before the opening "<?php".

    ',2), + +/* +** Setup errors +*/ +11 => array('No path specified for CACHE_DIR. Please specify CACHE_DIR manually in jpg-config.inc',0), +12 => array('No path specified for TTF_DIR and path can not be determined automatically. Please specify TTF_DIR manually (in jpg-config.inc).',0), +13 => array('The installed PHP version (%s) is not compatible with this release of the library. The library requires at least PHP version %s',2), + + +/* +** jpgraph_bar +*/ + +2001 => array('Number of colors is not the same as the number of patterns in BarPlot::SetPattern()',0), +2002 => array('Unknown pattern specified in call to BarPlot::SetPattern()',0), +2003 => array('Number of X and Y points are not equal. Number of X-points: %d Number of Y-points: %d',2), +2004 => array('All values for a barplot must be numeric. You have specified value nr [%d] == %s',2), +2005 => array('You have specified an empty array for shadow colors in the bar plot.',0), +2006 => array('Unknown position for values on bars : %s',1), +2007 => array('Cannot create GroupBarPlot from empty plot array.',0), +2008 => array('Group bar plot element nbr %d is undefined or empty.',0), +2009 => array('One of the objects submitted to GroupBar is not a BarPlot. Make sure that you create the GroupBar plot from an array of BarPlot or AccBarPlot objects. (Class = %s)',1), +2010 => array('Cannot create AccBarPlot from empty plot array.',0), +2011 => array('Acc bar plot element nbr %d is undefined or empty.',1), +2012 => array('One of the objects submitted to AccBar is not a BarPlot. Make sure that you create the AccBar plot from an array of BarPlot objects. (Class=%s)',1), +2013 => array('You have specified an empty array for shadow colors in the bar plot.',0), +2014 => array('Number of datapoints for each data set in accbarplot must be the same',0), +2015 => array('Individual bar plots in an AccBarPlot or GroupBarPlot can not have specified X-coordinates',0), + + +/* +** jpgraph_date +*/ + +3001 => array('It is only possible to use either SetDateAlign() or SetTimeAlign() but not both',0), + +/* +** jpgraph_error +*/ + +4002 => array('Error in input data to LineErrorPlot. Number of data points must be a multiple of 3',0), + +/* +** jpgraph_flags +*/ + +5001 => array('Unknown flag size (%d).',1), +5002 => array('Flag index %s does not exist.',1), +5003 => array('Invalid ordinal number (%d) specified for flag index.',1), +5004 => array('The (partial) country name %s does not have a corresponding flag image. The flag may still exist but under another name, e.g. instead of "usa" try "united states".',1), + + +/* +** jpgraph_gantt +*/ + +6001 => array('Internal error. Height for ActivityTitles is < 0',0), +6002 => array('You can\'t specify negative sizes for Gantt graph dimensions. Use 0 to indicate that you want the library to automatically determine a dimension.',0), +6003 => array('Invalid format for Constrain parameter at index=%d in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Constrain-To,Constrain-Type)',1), +6004 => array('Invalid format for Progress parameter at index=%d in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Progress)',1), +6005 => array('SetScale() is not meaningful with Gantt charts.',0), +6006 => array('Cannot autoscale Gantt chart. No dated activities exist. [GetBarMinMax() start >= n]',0), +6007 => array('Sanity check for automatic Gantt chart size failed. Either the width (=%d) or height (=%d) is larger than MAX_GANTTIMG_SIZE. This could potentially be caused by a wrong date in one of the activities.',2), +6008 => array('You have specified a constrain from row=%d to row=%d which does not have any activity',2), +6009 => array('Unknown constrain type specified from row=%d to row=%d',2), +6010 => array('Illegal icon index for Gantt builtin icon [%d]',1), +6011 => array('Argument to IconImage must be string or integer',0), +6012 => array('Unknown type in Gantt object title specification',0), +6015 => array('Illegal vertical position %d',1), +6016 => array('Date string (%s) specified for Gantt activity can not be interpretated. Please make sure it is a valid time string, e.g. 2005-04-23 13:30',1), +6017 => array('Unknown date format in GanttScale (%s).',1), +6018 => array('Interval for minutes must divide the hour evenly, e.g. 1,5,10,12,15,20,30 etc You have specified an interval of %d minutes.',1), +6019 => array('The available width (%d) for minutes are to small for this scale to be displayed. Please use auto-sizing or increase the width of the graph.',1), +6020 => array('Interval for hours must divide the day evenly, e.g. 0:30, 1:00, 1:30, 4:00 etc. You have specified an interval of %d',1), +6021 => array('Unknown formatting style for week.',0), +6022 => array('Gantt scale has not been specified.',0), +6023 => array('If you display both hour and minutes the hour interval must be 1 (Otherwise it doesn\'t make sense to display minutes).',0), +6024 => array('CSIM Target must be specified as a string. Start of target is: %d',1), +6025 => array('CSIM Alt text must be specified as a string. Start of alt text is: %d',1), +6027 => array('Progress value must in range [0, 1]',0), +6028 => array('Specified height (%d) for gantt bar is out of range.',1), +6029 => array('Offset for vertical line must be in range [0,1]',0), +6030 => array('Unknown arrow direction for link.',0), +6031 => array('Unknown arrow type for link.',0), +6032 => array('Internal error: Unknown path type (=%d) specified for link.',1), +6033 => array('Array of fonts must contain arrays with 3 elements, i.e. (Family, Style, Size)',0), + +/* +** jpgraph_gradient +*/ + +7001 => array('Unknown gradient style (=%d).',1), + +/* +** jpgraph_iconplot +*/ + +8001 => array('Mix value for icon must be between 0 and 100.',0), +8002 => array('Anchor position for icons must be one of "top", "bottom", "left", "right" or "center"',0), +8003 => array('It is not possible to specify both an image file and a country flag for the same icon.',0), +8004 => array('In order to use Country flags as icons you must include the "jpgraph_flags.php" file.',0), + +/* +** jpgraph_imgtrans +*/ + +9001 => array('Value for image transformation out of bounds. Vanishing point on horizon must be specified as a value between 0 and 1.',0), + +/* +** jpgraph_lineplot +*/ + +10001 => array('LinePlot::SetFilled() is deprecated. Use SetFillColor()',0), +10002 => array('Plot too complicated for fast line Stroke. Use standard Stroke()',0), +10003 => array('Each plot in an accumulated lineplot must have the same number of data points.',0), + +/* +** jpgraph_log +*/ + +11001 => array('Your data contains non-numeric values.',0), +11002 => array('Negative data values can not be used in a log scale.',0), +11003 => array('Your data contains non-numeric values.',0), +11004 => array('Scale error for logarithmic scale. You have a problem with your data values. The max value must be greater than 0. It is mathematically impossible to have 0 in a logarithmic scale.',0), +11005 => array('Specifying tick interval for a logarithmic scale is undefined. Remove any calls to SetTextLabelStart() or SetTextTickInterval() on the logarithmic scale.',0), + +/* +** jpgraph_mgraph +*/ + +12001 => array("You are using GD 2.x and are trying to use a background images on a non truecolor image. To use background images with GD 2.x it is necessary to enable truecolor by setting the USE_TRUECOLOR constant to TRUE. Due to a bug in GD 2.0.1 using any truetype fonts with truecolor images will result in very poor quality fonts.",0), +12002 => array('Incorrect file name for MGraph::SetBackgroundImage() : %s Must have a valid image extension (jpg,gif,png) when using auto detection of image type',1), +12003 => array('Unknown file extension (%s) in MGraph::SetBackgroundImage() for filename: %s',2), +12004 => array('The image format of your background image (%s) is not supported in your system configuration. ',1), +12005 => array('Can\'t read background image: %s',1), +12006 => array('Illegal sizes specified for width or height when creating an image, (width=%d, height=%d)',2), +12007 => array('Argument to MGraph::Add() is not a valid GD image handle.',0), +12008 => array('Your PHP (and GD-lib) installation does not appear to support any known graphic formats.',0), +12009 => array('Your PHP installation does not support the chosen graphic format: %s',1), +12010 => array('Can\'t create or stream image to file %s Check that PHP has enough permission to write a file to the current directory.',1), +12011 => array('Can\'t create truecolor image. Check that you really have GD2 library installed.',0), +12012 => array('Can\'t create image. Check that you really have GD2 library installed.',0), + +/* +** jpgraph_pie3d +*/ + +14001 => array('Pie3D::ShowBorder() . Deprecated function. Use Pie3D::SetEdge() to control the edges around slices.',0), +14002 => array('PiePlot3D::SetAngle() 3D Pie projection angle must be between 5 and 85 degrees.',0), +14003 => array('Internal assertion failed. Pie3D::Pie3DSlice',0), +14004 => array('Slice start angle must be between 0 and 360 degrees.',0), +14005 => array('Pie3D Internal error: Trying to wrap twice when looking for start index',0,), +14006 => array('Pie3D Internal Error: Z-Sorting algorithm for 3D Pies is not working properly (2). Trying to wrap twice while stroking.',0), +14007 => array('Width for 3D Pie is 0. Specify a size > 0',0), + +/* +** jpgraph_pie +*/ + +15001 => array('PiePLot::SetTheme() Unknown theme: %s',1), +15002 => array('Argument to PiePlot::ExplodeSlice() must be an integer',0), +15003 => array('Argument to PiePlot::Explode() must be an array with integer distances.',0), +15004 => array('Slice start angle must be between 0 and 360 degrees.',0), +15005 => array('PiePlot::SetFont() is deprecated. Use PiePlot->value->SetFont() instead.',0), +15006 => array('PiePlot::SetSize() Radius for pie must either be specified as a fraction [0, 0.5] of the size of the image or as an absolute size in pixels in the range [10, 1000]',0), +15007 => array('PiePlot::SetFontColor() is deprecated. Use PiePlot->value->SetColor() instead.',0), +15008 => array('PiePlot::SetLabelType() Type for pie plots must be 0 or 1 (not %d).',1), +15009 => array('Illegal pie plot. Sum of all data is zero for Pie Plot',0), +15010 => array('Sum of all data is 0 for Pie.',0), +15011 => array('In order to use image transformation you must include the file jpgraph_imgtrans.php in your script.',0), +15012 => array('PiePlot::SetTheme() is no longer supported. Use PieGraph::SetTheme()',0), + +/* +** jpgraph_plotband +*/ + +16001 => array('Density for pattern must be between 1 and 100. (You tried %f)',1), +16002 => array('No positions specified for pattern.',0), +16003 => array('Unknown pattern specification (%d)',0), +16004 => array('Min value for plotband is larger than specified max value. Please correct.',0), + + +/* +** jpgraph_polar +*/ + +17001 => array('Polar plots must have an even number of data point. Each data point is a tuple (angle,radius).',0), +17002 => array('Unknown alignment specified for X-axis title. (%s)',1), +//17003 => array('Set90AndMargin() is not supported for polar graphs.',0), +17004 => array('Unknown scale type for polar graph. Must be "lin" or "log"',0), + +/* +** jpgraph_radar +*/ + +18001 => array('Client side image maps not supported for RadarPlots.',0), +18002 => array('RadarGraph::SupressTickMarks() is deprecated. Use HideTickMarks() instead.',0), +18003 => array('Illegal scale for radarplot (%s). Must be \'lin\' or \'log\'',1), +18004 => array('Radar Plot size must be between 0.1 and 1. (Your value=%f)',1), +18005 => array('RadarPlot Unsupported Tick density: %d',1), +18006 => array('Minimum data %f (Radar plots should only be used when all data points > 0)',1), +18007 => array('Number of titles does not match number of points in plot.',0), +18008 => array('Each radar plot must have the same number of data points.',0), + +/* +** jpgraph_regstat +*/ + +19001 => array('Spline: Number of X and Y coordinates must be the same',0), +19002 => array('Invalid input data for spline. Two or more consecutive input X-values are equal. Each input X-value must differ since from a mathematical point of view it must be a one-to-one mapping, i.e. each X-value must correspond to exactly one Y-value.',0), +19003 => array('Bezier: Number of X and Y coordinates must be the same',0), + +/* +** jpgraph_scatter +*/ + +20001 => array('Fieldplots must have equal number of X and Y points.',0), +20002 => array('Fieldplots must have an angle specified for each X and Y points.',0), +20003 => array('Scatterplot must have equal number of X and Y points.',0), + +/* +** jpgraph_stock +*/ + +21001 => array('Data values for Stock charts must contain an even multiple of %d data points.',1), + +/* +** jpgraph_plotmark +*/ + +23001 => array('This marker "%s" does not exist in color with index: %d',2), +23002 => array('Mark color index too large for marker "%s"',1), +23003 => array('A filename must be specified if you set the mark type to MARK_IMG.',0), + +/* +** jpgraph_utils +*/ + +24001 => array('FuncGenerator : No function specified. ',0), +24002 => array('FuncGenerator : Syntax error in function specification ',0), +24003 => array('DateScaleUtils: Unknown tick type specified in call to GetTicks()',0), +24004 => array('ReadCSV2: Column count mismatch in %s line %d',2), +/* +** jpgraph +*/ + +25001 => array('This PHP installation is not configured with the GD library. Please recompile PHP with GD support to run JpGraph. (Neither function imagetypes() nor imagecreatefromstring() does exist)',0), +25002 => array('Your PHP installation does not seem to have the required GD library. Please see the PHP documentation on how to install and enable the GD library.',0), +25003 => array('General PHP error : At %s:%d : %s',3), +25004 => array('General PHP error : %s ',1), +25005 => array('Can\'t access PHP_SELF, PHP global variable. You can\'t run PHP from command line if you want to use the \'auto\' naming of cache or image files.',0), +25006 => array('Usage of FF_CHINESE (FF_BIG5) font family requires that your PHP setup has the iconv() function. By default this is not compiled into PHP (needs the "--width-iconv" when configured).',0), +25007 => array('You are trying to use the locale (%s) which your PHP installation does not support. Hint: Use \'\' to indicate the default locale for this geographic region.',1), +25008 => array('Image width/height argument in Graph::Graph() must be numeric',0), +25009 => array('You must specify what scale to use with a call to Graph::SetScale()',0), + +25010 => array('Graph::Add() You tried to add a null plot to the graph.',0), +25011 => array('Graph::AddY2() You tried to add a null plot to the graph.',0), +25012 => array('Graph::AddYN() You tried to add a null plot to the graph.',0), +25013 => array('You can only add standard plots to multiple Y-axis',0), +25014 => array('Graph::AddText() You tried to add a null text to the graph.',0), +25015 => array('Graph::AddLine() You tried to add a null line to the graph.',0), +25016 => array('Graph::AddBand() You tried to add a null band to the graph.',0), +25017 => array('You are using GD 2.x and are trying to use a background images on a non truecolor image. To use background images with GD 2.x it is necessary to enable truecolor by setting the USE_TRUECOLOR constant to TRUE. Due to a bug in GD 2.0.1 using any truetype fonts with truecolor images will result in very poor quality fonts.',0), +25018 => array('Incorrect file name for Graph::SetBackgroundImage() : "%s" Must have a valid image extension (jpg,gif,png) when using auto detection of image type',1), +25019 => array('Unknown file extension (%s) in Graph::SetBackgroundImage() for filename: "%s"',2), + +25020 => array('Graph::SetScale(): Specified Max value must be larger than the specified Min value.',0), +25021 => array('Unknown scale specification for Y-scale. (%s)',1), +25022 => array('Unknown scale specification for X-scale. (%s)',1), +25023 => array('Unsupported Y2 axis type: "%s" Must be one of (lin,log,int)',1), +25024 => array('Unsupported Y axis type: "%s" Must be one of (lin,log,int)',1), +25025 => array('Unsupported Tick density: %d',1), +25026 => array('Can\'t draw unspecified Y-scale. You have either: 1. Specified an Y axis for auto scaling but have not supplied any plots. 2. Specified a scale manually but have forgot to specify the tick steps',0), +25027 => array('Can\'t open cached CSIM "%s" for reading.',1), +25028 => array('Apache/PHP does not have permission to write to the CSIM cache directory (%s). Check permissions.',1), +25029 => array('Can\'t write CSIM "%s" for writing. Check free space and permissions.',1), + +25030 => array('Missing script name in call to StrokeCSIM(). You must specify the name of the actual image script as the first parameter to StrokeCSIM().',0), +25031 => array('You must specify what scale to use with a call to Graph::SetScale().',0), +25032 => array('No plots for Y-axis nbr:%d',1), +25033 => array('',0), +25034 => array('Can\'t draw unspecified X-scale. No plots specified.',0), +25035 => array('You have enabled clipping. Clipping is only supported for graphs at 0 or 90 degrees rotation. Please adjust you current angle (=%d degrees) or disable clipping.',1), +25036 => array('Unknown AxisStyle() : %s',1), +25037 => array('The image format of your background image (%s) is not supported in your system configuration. ',1), +25038 => array('Background image seems to be of different type (has different file extension) than specified imagetype. Specified: %s File: %s',2), +25039 => array('Can\'t read background image: "%s"',1), + +25040 => array('It is not possible to specify both a background image and a background country flag.',0), +25041 => array('In order to use Country flags as backgrounds you must include the "jpgraph_flags.php" file.',0), +25042 => array('Unknown background image layout',0), +25043 => array('Unknown title background style.',0), +25044 => array('Cannot use auto scaling since it is impossible to determine a valid min/max value of the Y-axis (only null values).',0), +25045 => array('Font families FF_HANDWRT and FF_BOOK are no longer available due to copyright problem with these fonts. Fonts can no longer be distributed with JpGraph. Please download fonts from http://corefonts.sourceforge.net/',0), +25046 => array('Specified TTF font family (id=%d) is unknown or does not exist. Please note that TTF fonts are not distributed with JpGraph for copyright reasons. You can find the MS TTF WEB-fonts (arial, courier etc) for download at http://corefonts.sourceforge.net/',1), +25047 => array('Style %s is not available for font family %s',2), +25048 => array('Unknown font style specification [%s].',1), +25049 => array('Font file "%s" is not readable or does not exist.',1), + +25050 => array('First argument to Text::Text() must be a string.',0), +25051 => array('Invalid direction specified for text.',0), +25052 => array('PANIC: Internal error in SuperScript::Stroke(). Unknown vertical alignment for text',0), +25053 => array('PANIC: Internal error in SuperScript::Stroke(). Unknown horizontal alignment for text',0), +25054 => array('Internal error: Unknown grid axis %s',1), +25055 => array('Axis::SetTickDirection() is deprecated. Use Axis::SetTickSide() instead',0), +25056 => array('SetTickLabelMargin() is deprecated. Use Axis::SetLabelMargin() instead.',0), +25057 => array('SetTextTicks() is deprecated. Use SetTextTickInterval() instead.',0), +25058 => array('Text label interval must be specified >= 1.',0), +25059 => array('SetLabelPos() is deprecated. Use Axis::SetLabelSide() instead.',0), + +25060 => array('Unknown alignment specified for X-axis title. (%s)',1), +25061 => array('Unknown alignment specified for Y-axis title. (%s)',1), +25062 => array('Labels at an angle are not supported on Y-axis',0), +25063 => array('Ticks::SetPrecision() is deprecated. Use Ticks::SetLabelFormat() (or Ticks::SetFormatCallback()) instead',0), +25064 => array('Minor or major step size is 0. Check that you haven\'t got an accidental SetTextTicks(0) in your code. If this is not the case you might have stumbled upon a bug in JpGraph. Please report this and if possible include the data that caused the problem',0), +25065 => array('Tick positions must be specified as an array()',0), +25066 => array('When manually specifying tick positions and labels the number of labels must be the same as the number of specified ticks.',0), +25067 => array('Your manually specified scale and ticks is not correct. The scale seems to be too small to hold any of the specified tick marks.',0), +25068 => array('A plot has an illegal scale. This could for example be that you are trying to use text auto scaling to draw a line plot with only one point or that the plot area is too small. It could also be that no input data value is numeric (perhaps only \'-\' or \'x\')',0), +25069 => array('Grace must be larger then 0',0), +25070 => array('Either X or Y data arrays contains non-numeric values. Check that the data is really specified as numeric data and not as strings. It is an error to specify data for example as \'-2345.2\' (using quotes).',0), +25071 => array('You have specified a min value with SetAutoMin() which is larger than the maximum value used for the scale. This is not possible.',0), +25072 => array('You have specified a max value with SetAutoMax() which is smaller than the minimum value used for the scale. This is not possible.',0), +25073 => array('Internal error. Integer scale algorithm comparison out of bound (r=%f)',1), +25074 => array('Internal error. The scale range is negative (%f) [for %s scale] This problem could potentially be caused by trying to use \"illegal\" values in the input data arrays (like trying to send in strings or only NULL values) which causes the auto scaling to fail.',2), +25075 => array('Can\'t automatically determine ticks since min==max.',0), +25077 => array('Adjustment factor for color must be > 0',0), +25078 => array('Unknown color: %s',1), +25079 => array('Unknown color specification: %s, size=%d',2), + +25080 => array('Alpha parameter for color must be between 0.0 and 1.0',0), +25081 => array('Selected graphic format is either not supported or unknown [%s]',1), +25082 => array('Illegal sizes specified for width or height when creating an image, (width=%d, height=%d)',2), +25083 => array('Illegal image size when copying image. Size for copied to image is 1 pixel or less.',0), +25084 => array('Failed to create temporary GD canvas. Possible Out of memory problem.',0), +25085 => array('An image can not be created from the supplied string. It is either in a format not supported or the string is representing an corrupt image.',0), +25086 => array('You only seem to have GD 1.x installed. To enable Alphablending requires GD 2.x or higher. Please install GD or make sure the constant USE_GD2 is specified correctly to reflect your installation. By default it tries to auto detect what version of GD you have installed. On some very rare occasions it may falsely detect GD2 where only GD1 is installed. You must then set USE_GD2 to false.',0), +25087 => array('This PHP build has not been configured with TTF support. You need to recompile your PHP installation with FreeType support.',0), +25088 => array('You have a misconfigured GD font support. The call to imagefontwidth() fails.',0), +25089 => array('You have a misconfigured GD font support. The call to imagefontheight() fails.',0), + +25090 => array('Unknown direction specified in call to StrokeBoxedText() [%s]',1), +25091 => array('Internal font does not support drawing text at arbitrary angle. Use TTF fonts instead.',0), +25092 => array('There is either a configuration problem with TrueType or a problem reading font file "%s" Make sure file exists and is in a readable place for the HTTP process. (If \'basedir\' restriction is enabled in PHP then the font file must be located in the document root.). It might also be a wrongly installed FreeType library. Try upgrading to at least FreeType 2.1.13 and recompile GD with the correct setup so it can find the new FT library.',1), +25093 => array('Can not read font file "%s" in call to Image::GetBBoxTTF. Please make sure that you have set a font before calling this method and that the font is installed in the TTF directory.',1), +25094 => array('Direction for text most be given as an angle between 0 and 90.',0), +25095 => array('Unknown font font family specification. ',0), +25096 => array('Can\'t allocate any more colors in palette image. Image has already allocated maximum of %d colors and the palette is now full. Change to a truecolor image instead',0), +25097 => array('Color specified as empty string in PushColor().',0), +25098 => array('Negative Color stack index. Unmatched call to PopColor()',0), +25099 => array('Parameters for brightness and Contrast out of range [-1,1]',0), + +25100 => array('Problem with color palette and your GD setup. Please disable anti-aliasing or use GD2 with true-color. If you have GD2 library installed please make sure that you have set the USE_GD2 constant to true and truecolor is enabled.',0), +25101 => array('Illegal numeric argument to SetLineStyle(): (%d)',1), +25102 => array('Illegal string argument to SetLineStyle(): %s',1), +25103 => array('Illegal argument to SetLineStyle %s',1), +25104 => array('Unknown line style: %s',1), +25105 => array('NULL data specified for a filled polygon. Check that your data is not NULL.',0), +25106 => array('Image::FillToBorder : Can not allocate more colors',0), +25107 => array('Can\'t write to file "%s". Check that the process running PHP has enough permission.',1), +25108 => array('Can\'t stream image. This is most likely due to a faulty PHP/GD setup. Try to recompile PHP and use the built-in GD library that comes with PHP.',0), +25109 => array('Your PHP (and GD-lib) installation does not appear to support any known graphic formats. You need to first make sure GD is compiled as a module to PHP. If you also want to use JPEG images you must get the JPEG library. Please see the PHP docs for details.',0), + +25110 => array('Your PHP installation does not support the chosen graphic format: %s',1), +25111 => array('Can\'t delete cached image %s. Permission problem?',1), +25112 => array('Cached imagefile (%s) has file date in the future.',1), +25113 => array('Can\'t delete cached image "%s". Permission problem?',1), +25114 => array('PHP has not enough permissions to write to the cache file "%s". Please make sure that the user running PHP has write permission for this file if you wan to use the cache system with JpGraph.',1), +25115 => array('Can\'t set permission for cached image "%s". Permission problem?',1), +25116 => array('Cant open file from cache "%s"',1), +25117 => array('Can\'t open cached image "%s" for reading.',1), +25118 => array('Can\'t create directory "%s". Make sure PHP has write permission to this directory.',1), +25119 => array('Can\'t set permissions for "%s". Permission problems?',1), + +25120 => array('Position for legend must be given as percentage in range 0-1',0), +25121 => array('Empty input data array specified for plot. Must have at least one data point.',0), +25122 => array('Stroke() must be implemented by concrete subclass to class Plot',0), +25123 => array('You can\'t use a text X-scale with specified X-coords. Use a "int" or "lin" scale instead.',0), +25124 => array('The input data array must have consecutive values from position 0 and forward. The given y-array starts with empty values (NULL)',0), +25125 => array('Illegal direction for static line',0), +25126 => array('Can\'t create truecolor image. Check that the GD2 library is properly setup with PHP.',0), +25127 => array('The library has been configured for automatic encoding conversion of Japanese fonts. This requires that PHP has the mb_convert_encoding() function. Your PHP installation lacks this function (PHP needs the "--enable-mbstring" when compiled).',0), +25128 => array('The function imageantialias() is not available in your PHP installation. Use the GD version that comes with PHP and not the standalone version.',0), +25129 => array('Anti-alias can not be used with dashed lines. Please disable anti-alias or use solid lines.',0), +25130 => array('Too small plot area. (%d x %d). With the given image size and margins there is to little space left for the plot. Increase the plot size or reduce the margins.',2), + +25131 => array('StrokeBoxedText2() only supports TTF fonts and not built-in bitmap fonts.',0), +25132 => array('Undefined property %s.',1), +25133 => array('Use Graph::SetTheme() after Graph::SetScale().',0), + +/* +** jpgraph_led +*/ + +25500 => array('Multibyte strings must be enabled in the PHP installation in order to run the LED module so that the function mb_strlen() is available. See PHP documentation for more information.',0), + +/* +**--------------------------------------------------------------------------------------------- +** Pro-version strings +**--------------------------------------------------------------------------------------------- +*/ + +/* +** jpgraph_table +*/ + +27001 => array('GTextTable: Invalid argument to Set(). Array argument must be 2 dimensional',0), +27002 => array('GTextTable: Invalid argument to Set()',0), +27003 => array('GTextTable: Wrong number of arguments to GTextTable::SetColor()',0), +27004 => array('GTextTable: Specified cell range to be merged is not valid.',0), +27005 => array('GTextTable: Cannot merge already merged cells in the range: (%d,%d) to (%d,%d)',4), +27006 => array('GTextTable: Column argument = %d is outside specified table size.',1), +27007 => array('GTextTable: Row argument = %d is outside specified table size.',1), +27008 => array('GTextTable: Column and row size arrays must match the dimensions of the table',0), +27009 => array('GTextTable: Number of table columns or rows are 0. Make sure Init() or Set() is called.',0), +27010 => array('GTextTable: No alignment specified in call to SetAlign()',0), +27011 => array('GTextTable: Unknown alignment specified in SetAlign(). Horizontal=%s, Vertical=%s',2), +27012 => array('GTextTable: Internal error. Invalid alignment specified =%s',1), +27013 => array('GTextTable: Argument to FormatNumber() must be a string.',0), +27014 => array('GTextTable: Table is not initilaized with either a call to Set() or Init()',0), +27015 => array('GTextTable: Cell image constrain type must be TIMG_WIDTH or TIMG_HEIGHT',0), + +/* +** jpgraph_windrose +*/ + +22001 => array('Total percentage for all windrose legs in a windrose plot can not exceed 100%% !\n(Current max is: %d)',1), +22002 => array('Graph is too small to have a scale. Please make the graph larger.',0), +22004 => array('Label specification for windrose directions must have 16 values (one for each compass direction).',0), +22005 => array('Line style for radial lines must be on of ("solid","dotted","dashed","longdashed") ',0), +22006 => array('Illegal windrose type specified.',0), +22007 => array('To few values for the range legend.',0), +22008 => array('Internal error: Trying to plot free Windrose even though type is not a free windrose',0), +22009 => array('You have specified the same direction twice, once with an angle and once with a compass direction (%f degrees)',0), +22010 => array('Direction must either be a numeric value or one of the 16 compass directions',0), +22011 => array('Windrose index must be numeric or direction label. You have specified index=%d',1), +22012 => array('Windrose radial axis specification contains a direction which is not enabled.',0), +22013 => array('You have specified the look&feel for the same compass direction twice, once with text and once with index (Index=%d)',1), +22014 => array('Index for compass direction must be between 0 and 15.',0), +22015 => array('You have specified an undefined Windrose plot type.',0), +22016 => array('Windrose leg index must be numeric or direction label.',0), +22017 => array('Windrose data contains a direction which is not enabled. Please adjust what labels are displayed.',0), +22018 => array('You have specified data for the same compass direction twice, once with text and once with index (Index=%d)',1), +22019 => array('Index for direction must be between 0 and 15. You can\'t specify angles for a Regular Windplot, only index and compass directions.',0), +22020 => array('Windrose plot is too large to fit the specified Graph size. Please use WindrosePlot::SetSize() to make the plot smaller or increase the size of the Graph in the initial WindroseGraph() call.',0), +22021 => array('It is only possible to add Text, IconPlot or WindrosePlot to a Windrose Graph',0), +/* +** jpgraph_odometer +*/ + +13001 => array('Unknown needle style (%d).',1), +13002 => array('Value for odometer (%f) is outside specified scale [%f,%f]',3), + +/* +** jpgraph_barcode +*/ + +1001 => array('Unknown encoder specification: %s',1), +1002 => array('Data validation failed. Can\'t encode [%s] using encoding "%s"',2), +1003 => array('Internal encoding error. Trying to encode %s is not possible in Code 128',1), +1004 => array('Internal barcode error. Unknown UPC-E encoding type: %s',1), +1005 => array('Internal error. Can\'t encode character tuple (%s, %s) in Code-128 charset C',2), +1006 => array('Internal encoding error for CODE 128. Trying to encode control character in CHARSET != A',0), +1007 => array('Internal encoding error for CODE 128. Trying to encode DEL in CHARSET != B',0), +1008 => array('Internal encoding error for CODE 128. Trying to encode small letters in CHARSET != B',0), +1009 => array('Encoding using CODE 93 is not yet supported.',0), +1010 => array('Encoding using POSTNET is not yet supported.',0), +1011 => array('Non supported barcode backend for type %s',1), + +/* +** PDF417 +*/ +26000 => array('PDF417: The PDF417 module requires that the PHP installation must support the function bcmod(). This is normally enabled at compile time. See documentation for more information.',0), +26001 => array('PDF417: Number of Columns must be >= 1 and <= 30',0), +26002 => array('PDF417: Error level must be between 0 and 8',0), +26003 => array('PDF417: Invalid format for input data to encode with PDF417',0), +26004 => array('PDF417: Can\'t encode given data with error level %d and %d columns since it results in too many symbols or more than 90 rows.',2), +26005 => array('PDF417: Can\'t open file "%s" for writing',1), +26006 => array('PDF417: Internal error. Data files for PDF417 cluster %d is corrupted.',1), +26007 => array('PDF417: Internal error. GetPattern: Illegal Code Value = %d (row=%d)',2), +26008 => array('PDF417: Internal error. Mode not found in mode list!! mode=%d',1), +26009 => array('PDF417: Encode error: Illegal character. Can\'t encode character with ASCII code=%d',1), +26010 => array('PDF417: Internal error: No input data in decode.',0), +26011 => array('PDF417: Encoding error. Can\'t use numeric encoding on non-numeric data.',0), +26012 => array('PDF417: Internal error. No input data to decode for Binary compressor.',0), +26013 => array('PDF417: Internal error. Checksum error. Coefficient tables corrupted.',0), +26014 => array('PDF417: Internal error. No data to calculate codewords on.',0), +26015 => array('PDF417: Internal error. State transition table entry 0 is NULL. Entry 1 = (%s)',1), +26016 => array('PDF417: Internal error: Unrecognized state transition mode in decode.',0), + +/* +** jpgraph_contour +*/ + +28001 => array('Third argument to Contour must be an array of colors.',0), +28002 => array('Number of colors must equal the number of isobar lines specified',0), +28003 => array('ContourPlot Internal Error: isobarHCrossing: Coloumn index too large (%d)',1), +28004 => array('ContourPlot Internal Error: isobarHCrossing: Row index too large (%d)',1), +28005 => array('ContourPlot Internal Error: isobarVCrossing: Row index too large (%d)',1), +28006 => array('ContourPlot Internal Error: isobarVCrossing: Col index too large (%d)',1), +28007 => array('ContourPlot interpolation factor is too large (>5)',0), + +/* + * jpgraph_matrix and colormap +*/ +29201 => array('Min range value must be less or equal to max range value for colormaps',0), +29202 => array('The distance between min and max value is too small for numerical precision',0), +29203 => array('Number of color quantification level must be at least %d',1), +29204 => array('Number of colors (%d) is invalid for this colormap. It must be a number that can be written as: %d + k*%d',3), +29205 => array('Colormap specification out of range. Must be an integer in range [0,%d]',1), +29206 => array('Invalid object added to MatrixGraph',0), +29207 => array('Empty input data specified for MatrixPlot',0), +29208 => array('Unknown side specifiction for matrix labels "%s"',1), +29209 => array('CSIM Target matrix must be the same size as the data matrix (csim=%d x %d, data=%d x %d)',4), +29210 => array('CSIM Target for matrix labels does not match the number of labels (csim=%d, labels=%d)',2), + + +/* +* jpgraph_theme +*/ +30001 => array("Theme::%s() is not defined. \nPlease make %s(\$graph) function in your theme classs.",2), + +); + +?> diff --git a/Societes/ric/jpgraph/lang/prod.inc.php b/Societes/ric/jpgraph/lang/prod.inc.php new file mode 100755 index 00000000..c34c2b3b --- /dev/null +++ b/Societes/ric/jpgraph/lang/prod.inc.php @@ -0,0 +1,386 @@ +,) +$_jpg_messages = array( + +/* +** Headers already sent error. This is formatted as HTML different since this will be sent back directly as text +*/ +10 => array('
    JpGraph Error: +HTTP headers have already been sent.
    Caused by output from file %s at line %d.
    Explanation:
    HTTP headers have already been sent back to the browser indicating the data as text before the library got a chance to send it\'s image HTTP header to this browser. This makes it impossible for the library to send back image data to the browser (since that would be interpretated as text by the browser and show up as junk text).

    Most likely you have some text in your script before the call to Graph::Stroke(). If this texts gets sent back to the browser the browser will assume that all data is plain text. Look for any text, even spaces and newlines, that might have been sent back to the browser.

    For example it is a common mistake to leave a blank line before the opening "<?php".

    ',2), + + +11 => array(DEFAULT_ERROR_MESSAGE.'11',0), +12 => array(DEFAULT_ERROR_MESSAGE.'12',0), +13 => array(DEFAULT_ERROR_MESSAGE.'13',0), +2001 => array(DEFAULT_ERROR_MESSAGE.'2001',0), +2002 => array(DEFAULT_ERROR_MESSAGE.'2002',0), +2003 => array(DEFAULT_ERROR_MESSAGE.'2003',0), +2004 => array(DEFAULT_ERROR_MESSAGE.'2004',0), +2005 => array(DEFAULT_ERROR_MESSAGE.'2005',0), +2006 => array(DEFAULT_ERROR_MESSAGE.'2006',0), +2007 => array(DEFAULT_ERROR_MESSAGE.'2007',0), +2008 => array(DEFAULT_ERROR_MESSAGE.'2008',0), +2009 => array(DEFAULT_ERROR_MESSAGE.'2009',0), +2010 => array(DEFAULT_ERROR_MESSAGE.'2010',0), +2011 => array(DEFAULT_ERROR_MESSAGE.'2011',0), +2012 => array(DEFAULT_ERROR_MESSAGE.'2012',0), +2013 => array(DEFAULT_ERROR_MESSAGE.'2013',0), +2014 => array(DEFAULT_ERROR_MESSAGE.'2014',0), +3001 => array(DEFAULT_ERROR_MESSAGE.'3001',0), +4002 => array(DEFAULT_ERROR_MESSAGE.'4002',0), +5001 => array(DEFAULT_ERROR_MESSAGE.'5001',0), +5002 => array(DEFAULT_ERROR_MESSAGE.'5002',0), +5003 => array(DEFAULT_ERROR_MESSAGE.'5003',0), +5004 => array(DEFAULT_ERROR_MESSAGE.'5004',0), +6001 => array(DEFAULT_ERROR_MESSAGE.'6001',0), +6002 => array(DEFAULT_ERROR_MESSAGE.'6002',0), +6003 => array(DEFAULT_ERROR_MESSAGE.'6003',0), +6004 => array(DEFAULT_ERROR_MESSAGE.'6004',0), +6005 => array(DEFAULT_ERROR_MESSAGE.'6005',0), +6006 => array(DEFAULT_ERROR_MESSAGE.'6006',0), +6007 => array(DEFAULT_ERROR_MESSAGE.'6007',0), +6008 => array(DEFAULT_ERROR_MESSAGE.'6008',0), +6009 => array(DEFAULT_ERROR_MESSAGE.'6009',0), +6010 => array(DEFAULT_ERROR_MESSAGE.'6010',0), +6011 => array(DEFAULT_ERROR_MESSAGE.'6011',0), +6012 => array(DEFAULT_ERROR_MESSAGE.'6012',0), +6015 => array(DEFAULT_ERROR_MESSAGE.'6015',0), +6016 => array(DEFAULT_ERROR_MESSAGE.'6016',0), +6017 => array(DEFAULT_ERROR_MESSAGE.'6017',0), +6018 => array(DEFAULT_ERROR_MESSAGE.'6018',0), +6019 => array(DEFAULT_ERROR_MESSAGE.'6019',0), +6020 => array(DEFAULT_ERROR_MESSAGE.'6020',0), +6021 => array(DEFAULT_ERROR_MESSAGE.'6021',0), +6022 => array(DEFAULT_ERROR_MESSAGE.'6022',0), +6023 => array(DEFAULT_ERROR_MESSAGE.'6023',0), +6024 => array(DEFAULT_ERROR_MESSAGE.'6024',0), +6025 => array(DEFAULT_ERROR_MESSAGE.'6025',0), +6027 => array(DEFAULT_ERROR_MESSAGE.'6027',0), +6028 => array(DEFAULT_ERROR_MESSAGE.'6028',0), +6029 => array(DEFAULT_ERROR_MESSAGE.'6029',0), +6030 => array(DEFAULT_ERROR_MESSAGE.'6030',0), +6031 => array(DEFAULT_ERROR_MESSAGE.'6031',0), +6032 => array(DEFAULT_ERROR_MESSAGE.'6032',0), +6033 => array(DEFAULT_ERROR_MESSAGE.'6033',0), +7001 => array(DEFAULT_ERROR_MESSAGE.'7001',0), +8001 => array(DEFAULT_ERROR_MESSAGE.'8001',0), +8002 => array(DEFAULT_ERROR_MESSAGE.'8002',0), +8003 => array(DEFAULT_ERROR_MESSAGE.'8003',0), +8004 => array(DEFAULT_ERROR_MESSAGE.'8004',0), +9001 => array(DEFAULT_ERROR_MESSAGE.'9001',0), +10001 => array(DEFAULT_ERROR_MESSAGE.'10001',0), +10002 => array(DEFAULT_ERROR_MESSAGE.'10002',0), +10003 => array(DEFAULT_ERROR_MESSAGE.'10003',0), +11001 => array(DEFAULT_ERROR_MESSAGE.'11001',0), +11002 => array(DEFAULT_ERROR_MESSAGE.'11002',0), +11003 => array(DEFAULT_ERROR_MESSAGE.'11003',0), +11004 => array(DEFAULT_ERROR_MESSAGE.'11004',0), +11005 => array(DEFAULT_ERROR_MESSAGE.'11005',0), +12001 => array(DEFAULT_ERROR_MESSAGE.'12001',0), +12002 => array(DEFAULT_ERROR_MESSAGE.'12002',0), +12003 => array(DEFAULT_ERROR_MESSAGE.'12003',0), +12004 => array(DEFAULT_ERROR_MESSAGE.'12004',0), +12005 => array(DEFAULT_ERROR_MESSAGE.'12005',0), +12006 => array(DEFAULT_ERROR_MESSAGE.'12006',0), +12007 => array(DEFAULT_ERROR_MESSAGE.'12007',0), +12008 => array(DEFAULT_ERROR_MESSAGE.'12008',0), +12009 => array(DEFAULT_ERROR_MESSAGE.'12009',0), +12010 => array(DEFAULT_ERROR_MESSAGE.'12010',0), +12011 => array(DEFAULT_ERROR_MESSAGE.'12011',0), +12012 => array(DEFAULT_ERROR_MESSAGE.'12012',0), +14001 => array(DEFAULT_ERROR_MESSAGE.'14001',0), +14002 => array(DEFAULT_ERROR_MESSAGE.'14002',0), +14003 => array(DEFAULT_ERROR_MESSAGE.'14003',0), +14004 => array(DEFAULT_ERROR_MESSAGE.'14004',0), +14005 => array(DEFAULT_ERROR_MESSAGE.'14005',0), +14006 => array(DEFAULT_ERROR_MESSAGE.'14006',0), +14007 => array(DEFAULT_ERROR_MESSAGE.'14007',0), +15001 => array(DEFAULT_ERROR_MESSAGE.'15001',0), +15002 => array(DEFAULT_ERROR_MESSAGE.'15002',0), +15003 => array(DEFAULT_ERROR_MESSAGE.'15003',0), +15004 => array(DEFAULT_ERROR_MESSAGE.'15004',0), +15005 => array(DEFAULT_ERROR_MESSAGE.'15005',0), +15006 => array(DEFAULT_ERROR_MESSAGE.'15006',0), +15007 => array(DEFAULT_ERROR_MESSAGE.'15007',0), +15008 => array(DEFAULT_ERROR_MESSAGE.'15008',0), +15009 => array(DEFAULT_ERROR_MESSAGE.'15009',0), +15010 => array(DEFAULT_ERROR_MESSAGE.'15010',0), +15011 => array(DEFAULT_ERROR_MESSAGE.'15011',0), +15012 => array(DEFAULT_ERROR_MESSAGE.'15012',0), +16001 => array(DEFAULT_ERROR_MESSAGE.'16001',0), +16002 => array(DEFAULT_ERROR_MESSAGE.'16002',0), +16003 => array(DEFAULT_ERROR_MESSAGE.'16003',0), +16004 => array(DEFAULT_ERROR_MESSAGE.'16004',0), +17001 => array(DEFAULT_ERROR_MESSAGE.'17001',0), +17002 => array(DEFAULT_ERROR_MESSAGE.'17002',0), +17004 => array(DEFAULT_ERROR_MESSAGE.'17004',0), +18001 => array(DEFAULT_ERROR_MESSAGE.'18001',0), +18002 => array(DEFAULT_ERROR_MESSAGE.'18002',0), +18003 => array(DEFAULT_ERROR_MESSAGE.'18003',0), +18004 => array(DEFAULT_ERROR_MESSAGE.'18004',0), +18005 => array(DEFAULT_ERROR_MESSAGE.'18005',0), +18006 => array(DEFAULT_ERROR_MESSAGE.'18006',0), +18007 => array(DEFAULT_ERROR_MESSAGE.'18007',0), +18008 => array(DEFAULT_ERROR_MESSAGE.'18008',0), +19001 => array(DEFAULT_ERROR_MESSAGE.'19001',0), +19002 => array(DEFAULT_ERROR_MESSAGE.'19002',0), +19003 => array(DEFAULT_ERROR_MESSAGE.'19003',0), +20001 => array(DEFAULT_ERROR_MESSAGE.'20001',0), +20002 => array(DEFAULT_ERROR_MESSAGE.'20002',0), +20003 => array(DEFAULT_ERROR_MESSAGE.'20003',0), +21001 => array(DEFAULT_ERROR_MESSAGE.'21001',0), +23001 => array(DEFAULT_ERROR_MESSAGE.'23001',0), +23002 => array(DEFAULT_ERROR_MESSAGE.'23002',0), +23003 => array(DEFAULT_ERROR_MESSAGE.'23003',0), +24001 => array(DEFAULT_ERROR_MESSAGE.'24001',0), +24002 => array(DEFAULT_ERROR_MESSAGE.'24002',0), +24003 => array(DEFAULT_ERROR_MESSAGE.'24003',0), +24004 => array(DEFAULT_ERROR_MESSAGE.'24004',0), +25001 => array(DEFAULT_ERROR_MESSAGE.'25001',0), +25002 => array(DEFAULT_ERROR_MESSAGE.'25002',0), +25003 => array(DEFAULT_ERROR_MESSAGE.'25003',0), +25004 => array(DEFAULT_ERROR_MESSAGE.'25004',0), +25005 => array(DEFAULT_ERROR_MESSAGE.'25005',0), +25006 => array(DEFAULT_ERROR_MESSAGE.'25006',0), +25007 => array(DEFAULT_ERROR_MESSAGE.'25007',0), +25008 => array(DEFAULT_ERROR_MESSAGE.'25008',0), +25009 => array(DEFAULT_ERROR_MESSAGE.'25009',0), +25010 => array(DEFAULT_ERROR_MESSAGE.'25010',0), +25011 => array(DEFAULT_ERROR_MESSAGE.'25011',0), +25012 => array(DEFAULT_ERROR_MESSAGE.'25012',0), +25013 => array(DEFAULT_ERROR_MESSAGE.'25013',0), +25014 => array(DEFAULT_ERROR_MESSAGE.'25014',0), +25015 => array(DEFAULT_ERROR_MESSAGE.'25015',0), +25016 => array(DEFAULT_ERROR_MESSAGE.'25016',0), +25017 => array(DEFAULT_ERROR_MESSAGE.'25017',0), +25018 => array(DEFAULT_ERROR_MESSAGE.'25018',0), +25019 => array(DEFAULT_ERROR_MESSAGE.'25019',0), +25020 => array(DEFAULT_ERROR_MESSAGE.'25020',0), +25021 => array(DEFAULT_ERROR_MESSAGE.'25021',0), +25022 => array(DEFAULT_ERROR_MESSAGE.'25022',0), +25023 => array(DEFAULT_ERROR_MESSAGE.'25023',0), +25024 => array(DEFAULT_ERROR_MESSAGE.'25024',0), +25025 => array(DEFAULT_ERROR_MESSAGE.'25025',0), +25026 => array(DEFAULT_ERROR_MESSAGE.'25026',0), +25027 => array(DEFAULT_ERROR_MESSAGE.'25027',0), +25028 => array(DEFAULT_ERROR_MESSAGE.'25028',0), +25029 => array(DEFAULT_ERROR_MESSAGE.'25029',0), +25030 => array(DEFAULT_ERROR_MESSAGE.'25030',0), +25031 => array(DEFAULT_ERROR_MESSAGE.'25031',0), +25032 => array(DEFAULT_ERROR_MESSAGE.'25032',0), +25033 => array(DEFAULT_ERROR_MESSAGE.'25033',0), +25034 => array(DEFAULT_ERROR_MESSAGE.'25034',0), +25035 => array(DEFAULT_ERROR_MESSAGE.'25035',0), +25036 => array(DEFAULT_ERROR_MESSAGE.'25036',0), +25037 => array(DEFAULT_ERROR_MESSAGE.'25037',0), +25038 => array(DEFAULT_ERROR_MESSAGE.'25038',0), +25039 => array(DEFAULT_ERROR_MESSAGE.'25039',0), +25040 => array(DEFAULT_ERROR_MESSAGE.'25040',0), +25041 => array(DEFAULT_ERROR_MESSAGE.'25041',0), +25042 => array(DEFAULT_ERROR_MESSAGE.'25042',0), +25043 => array(DEFAULT_ERROR_MESSAGE.'25043',0), +25044 => array(DEFAULT_ERROR_MESSAGE.'25044',0), +25045 => array(DEFAULT_ERROR_MESSAGE.'25045',0), +25046 => array(DEFAULT_ERROR_MESSAGE.'25046',0), +25047 => array(DEFAULT_ERROR_MESSAGE.'25047',0), +25048 => array(DEFAULT_ERROR_MESSAGE.'25048',0), +25049 => array(DEFAULT_ERROR_MESSAGE.'25049',0), +25050 => array(DEFAULT_ERROR_MESSAGE.'25050',0), +25051 => array(DEFAULT_ERROR_MESSAGE.'25051',0), +25052 => array(DEFAULT_ERROR_MESSAGE.'25052',0), +25053 => array(DEFAULT_ERROR_MESSAGE.'25053',0), +25054 => array(DEFAULT_ERROR_MESSAGE.'25054',0), +25055 => array(DEFAULT_ERROR_MESSAGE.'25055',0), +25056 => array(DEFAULT_ERROR_MESSAGE.'25056',0), +25057 => array(DEFAULT_ERROR_MESSAGE.'25057',0), +25058 => array(DEFAULT_ERROR_MESSAGE.'25058',0), +25059 => array(DEFAULT_ERROR_MESSAGE.'25059',0), +25060 => array(DEFAULT_ERROR_MESSAGE.'25060',0), +25061 => array(DEFAULT_ERROR_MESSAGE.'25061',0), +25062 => array(DEFAULT_ERROR_MESSAGE.'25062',0), +25063 => array(DEFAULT_ERROR_MESSAGE.'25063',0), +25064 => array(DEFAULT_ERROR_MESSAGE.'25064',0), +25065 => array(DEFAULT_ERROR_MESSAGE.'25065',0), +25066 => array(DEFAULT_ERROR_MESSAGE.'25066',0), +25067 => array(DEFAULT_ERROR_MESSAGE.'25067',0), +25068 => array(DEFAULT_ERROR_MESSAGE.'25068',0), +25069 => array(DEFAULT_ERROR_MESSAGE.'25069',0), +25070 => array(DEFAULT_ERROR_MESSAGE.'25070',0), +25071 => array(DEFAULT_ERROR_MESSAGE.'25071',0), +25072 => array(DEFAULT_ERROR_MESSAGE.'25072',0), +25073 => array(DEFAULT_ERROR_MESSAGE.'25073',0), +25074 => array(DEFAULT_ERROR_MESSAGE.'25074',0), +25075 => array(DEFAULT_ERROR_MESSAGE.'25075',0), +25077 => array(DEFAULT_ERROR_MESSAGE.'25077',0), +25078 => array(DEFAULT_ERROR_MESSAGE.'25078',0), +25079 => array(DEFAULT_ERROR_MESSAGE.'25079',0), +25080 => array(DEFAULT_ERROR_MESSAGE.'25080',0), +25081 => array(DEFAULT_ERROR_MESSAGE.'25081',0), +25082 => array(DEFAULT_ERROR_MESSAGE.'25082',0), +25083 => array(DEFAULT_ERROR_MESSAGE.'25083',0), +25084 => array(DEFAULT_ERROR_MESSAGE.'25084',0), +25085 => array(DEFAULT_ERROR_MESSAGE.'25085',0), +25086 => array(DEFAULT_ERROR_MESSAGE.'25086',0), +25087 => array(DEFAULT_ERROR_MESSAGE.'25087',0), +25088 => array(DEFAULT_ERROR_MESSAGE.'25088',0), +25089 => array(DEFAULT_ERROR_MESSAGE.'25089',0), +25090 => array(DEFAULT_ERROR_MESSAGE.'25090',0), +25091 => array(DEFAULT_ERROR_MESSAGE.'25091',0), +25092 => array(DEFAULT_ERROR_MESSAGE.'25092',0), +25093 => array(DEFAULT_ERROR_MESSAGE.'25093',0), +25094 => array(DEFAULT_ERROR_MESSAGE.'25094',0), +25095 => array(DEFAULT_ERROR_MESSAGE.'25095',0), +25096 => array(DEFAULT_ERROR_MESSAGE.'25096',0), +25097 => array(DEFAULT_ERROR_MESSAGE.'25097',0), +25098 => array(DEFAULT_ERROR_MESSAGE.'25098',0), +25099 => array(DEFAULT_ERROR_MESSAGE.'25099',0), +25100 => array(DEFAULT_ERROR_MESSAGE.'25100',0), +25101 => array(DEFAULT_ERROR_MESSAGE.'25101',0), +25102 => array(DEFAULT_ERROR_MESSAGE.'25102',0), +25103 => array(DEFAULT_ERROR_MESSAGE.'25103',0), +25104 => array(DEFAULT_ERROR_MESSAGE.'25104',0), +25105 => array(DEFAULT_ERROR_MESSAGE.'25105',0), +25106 => array(DEFAULT_ERROR_MESSAGE.'25106',0), +25107 => array(DEFAULT_ERROR_MESSAGE.'25107',0), +25108 => array(DEFAULT_ERROR_MESSAGE.'25108',0), +25109 => array(DEFAULT_ERROR_MESSAGE.'25109',0), +25110 => array(DEFAULT_ERROR_MESSAGE.'25110',0), +25111 => array(DEFAULT_ERROR_MESSAGE.'25111',0), +25112 => array(DEFAULT_ERROR_MESSAGE.'25112',0), +25113 => array(DEFAULT_ERROR_MESSAGE.'25113',0), +25114 => array(DEFAULT_ERROR_MESSAGE.'25114',0), +25115 => array(DEFAULT_ERROR_MESSAGE.'25115',0), +25116 => array(DEFAULT_ERROR_MESSAGE.'25116',0), +25117 => array(DEFAULT_ERROR_MESSAGE.'25117',0), +25118 => array(DEFAULT_ERROR_MESSAGE.'25118',0), +25119 => array(DEFAULT_ERROR_MESSAGE.'25119',0), +25120 => array(DEFAULT_ERROR_MESSAGE.'25120',0), +25121 => array(DEFAULT_ERROR_MESSAGE.'25121',0), +25122 => array(DEFAULT_ERROR_MESSAGE.'25122',0), +25123 => array(DEFAULT_ERROR_MESSAGE.'25123',0), +25124 => array(DEFAULT_ERROR_MESSAGE.'25124',0), +25125 => array(DEFAULT_ERROR_MESSAGE.'25125',0), +25126 => array(DEFAULT_ERROR_MESSAGE.'25126',0), +25127 => array(DEFAULT_ERROR_MESSAGE.'25127',0), +25128 => array(DEFAULT_ERROR_MESSAGE.'25128',0), +25129 => array(DEFAULT_ERROR_MESSAGE.'25129',0), +25130 => array(DEFAULT_ERROR_MESSAGE.'25130',0), +25131 => array(DEFAULT_ERROR_MESSAGE.'25131',0), +25132 => array(DEFAULT_ERROR_MESSAGE.'25132',0), +25133 => array(DEFAULT_ERROR_MESSAGE.'25133',0), +25500 => array(DEFAULT_ERROR_MESSAGE.'25500',0), +24003 => array(DEFAULT_ERROR_MESSAGE.'24003',0), +24004 => array(DEFAULT_ERROR_MESSAGE.'24004',0), +24005 => array(DEFAULT_ERROR_MESSAGE.'24005',0), +24006 => array(DEFAULT_ERROR_MESSAGE.'24006',0), +24007 => array(DEFAULT_ERROR_MESSAGE.'24007',0), +24008 => array(DEFAULT_ERROR_MESSAGE.'24008',0), +24009 => array(DEFAULT_ERROR_MESSAGE.'24009',0), +24010 => array(DEFAULT_ERROR_MESSAGE.'24010',0), +24011 => array(DEFAULT_ERROR_MESSAGE.'24011',0), +24012 => array(DEFAULT_ERROR_MESSAGE.'24012',0), +24013 => array(DEFAULT_ERROR_MESSAGE.'24013',0), +24014 => array(DEFAULT_ERROR_MESSAGE.'24014',0), +24015 => array(DEFAULT_ERROR_MESSAGE.'24015',0), +22001 => array(DEFAULT_ERROR_MESSAGE.'22001',0), +22002 => array(DEFAULT_ERROR_MESSAGE.'22002',0), +22004 => array(DEFAULT_ERROR_MESSAGE.'22004',0), +22005 => array(DEFAULT_ERROR_MESSAGE.'22005',0), +22006 => array(DEFAULT_ERROR_MESSAGE.'22006',0), +22007 => array(DEFAULT_ERROR_MESSAGE.'22007',0), +22008 => array(DEFAULT_ERROR_MESSAGE.'22008',0), +22009 => array(DEFAULT_ERROR_MESSAGE.'22009',0), +22010 => array(DEFAULT_ERROR_MESSAGE.'22010',0), +22011 => array(DEFAULT_ERROR_MESSAGE.'22011',0), +22012 => array(DEFAULT_ERROR_MESSAGE.'22012',0), +22013 => array(DEFAULT_ERROR_MESSAGE.'22013',0), +22014 => array(DEFAULT_ERROR_MESSAGE.'22014',0), +22015 => array(DEFAULT_ERROR_MESSAGE.'22015',0), +22016 => array(DEFAULT_ERROR_MESSAGE.'22016',0), +22017 => array(DEFAULT_ERROR_MESSAGE.'22017',0), +22018 => array(DEFAULT_ERROR_MESSAGE.'22018',0), +22019 => array(DEFAULT_ERROR_MESSAGE.'22019',0), +22020 => array(DEFAULT_ERROR_MESSAGE.'22020',0), +13001 => array(DEFAULT_ERROR_MESSAGE.'13001',0), +13002 => array(DEFAULT_ERROR_MESSAGE.'13002',0), +1001 => array(DEFAULT_ERROR_MESSAGE.'1001',0), +1002 => array(DEFAULT_ERROR_MESSAGE.'1002',0), +1003 => array(DEFAULT_ERROR_MESSAGE.'1003',0), +1004 => array(DEFAULT_ERROR_MESSAGE.'1004',0), +1005 => array(DEFAULT_ERROR_MESSAGE.'1005',0), +1006 => array(DEFAULT_ERROR_MESSAGE.'1006',0), +1007 => array(DEFAULT_ERROR_MESSAGE.'1007',0), +1008 => array(DEFAULT_ERROR_MESSAGE.'1008',0), +1009 => array(DEFAULT_ERROR_MESSAGE.'1009',0), +1010 => array(DEFAULT_ERROR_MESSAGE.'1010',0), +1011 => array(DEFAULT_ERROR_MESSAGE.'1011',0), +26000 => array(DEFAULT_ERROR_MESSAGE.'26000',0), +26001 => array(DEFAULT_ERROR_MESSAGE.'26001',0), +26002 => array(DEFAULT_ERROR_MESSAGE.'26002',0), +26003 => array(DEFAULT_ERROR_MESSAGE.'26003',0), +26004 => array(DEFAULT_ERROR_MESSAGE.'26004',0), +26005 => array(DEFAULT_ERROR_MESSAGE.'26005',0), +26006 => array(DEFAULT_ERROR_MESSAGE.'26006',0), +26007 => array(DEFAULT_ERROR_MESSAGE.'26007',0), +26008 => array(DEFAULT_ERROR_MESSAGE.'26008',0), +26009 => array(DEFAULT_ERROR_MESSAGE.'26009',0), +26010 => array(DEFAULT_ERROR_MESSAGE.'26010',0), +26011 => array(DEFAULT_ERROR_MESSAGE.'26011',0), +26012 => array(DEFAULT_ERROR_MESSAGE.'26012',0), +26013 => array(DEFAULT_ERROR_MESSAGE.'26013',0), +26014 => array(DEFAULT_ERROR_MESSAGE.'26014',0), +26015 => array(DEFAULT_ERROR_MESSAGE.'26015',0), +26016 => array(DEFAULT_ERROR_MESSAGE.'26016',0), + +27001 => array(DEFAULT_ERROR_MESSAGE.'27001',0), +27002 => array(DEFAULT_ERROR_MESSAGE.'27002',0), +27003 => array(DEFAULT_ERROR_MESSAGE.'27003',0), +27004 => array(DEFAULT_ERROR_MESSAGE.'27004',0), +27005 => array(DEFAULT_ERROR_MESSAGE.'27005',0), +27006 => array(DEFAULT_ERROR_MESSAGE.'27006',0), +27007 => array(DEFAULT_ERROR_MESSAGE.'27007',0), +27008 => array(DEFAULT_ERROR_MESSAGE.'27008',0), +27009 => array(DEFAULT_ERROR_MESSAGE.'27009',0), +27010 => array(DEFAULT_ERROR_MESSAGE.'27010',0), +27011 => array(DEFAULT_ERROR_MESSAGE.'27011',0), +27012 => array(DEFAULT_ERROR_MESSAGE.'27012',0), +27013 => array(DEFAULT_ERROR_MESSAGE.'27013',0), +27014 => array(DEFAULT_ERROR_MESSAGE.'27014',0), +27015 => array(DEFAULT_ERROR_MESSAGE.'27015',0), + +28001 => array(DEFAULT_ERROR_MESSAGE.'28001',0), +28002 => array(DEFAULT_ERROR_MESSAGE.'28002',0), +28003 => array(DEFAULT_ERROR_MESSAGE.'28003',0), +28004 => array(DEFAULT_ERROR_MESSAGE.'28004',0), +28005 => array(DEFAULT_ERROR_MESSAGE.'28005',0), +28006 => array(DEFAULT_ERROR_MESSAGE.'28006',0), +28007 => array(DEFAULT_ERROR_MESSAGE.'28007',0), + +29201 => array(DEFAULT_ERROR_MESSAGE.'28001',0), +29202 => array(DEFAULT_ERROR_MESSAGE.'28002',0), +29203 => array(DEFAULT_ERROR_MESSAGE.'28003',0), +29204 => array(DEFAULT_ERROR_MESSAGE.'28004',0), +29205 => array(DEFAULT_ERROR_MESSAGE.'28005',0), +29206 => array(DEFAULT_ERROR_MESSAGE.'28006',0), +29207 => array(DEFAULT_ERROR_MESSAGE.'28007',0), +29208 => array(DEFAULT_ERROR_MESSAGE.'28008',0), +29209 => array(DEFAULT_ERROR_MESSAGE.'28009',0), +29210 => array(DEFAULT_ERROR_MESSAGE.'28010',0), + +); + +?> diff --git a/Societes/ric/jpgraph/test.php b/Societes/ric/jpgraph/test.php new file mode 100755 index 00000000..f35a8efd --- /dev/null +++ b/Societes/ric/jpgraph/test.php @@ -0,0 +1,3 @@ +img; + $height = $img->height; + $graph->SetMargin($img->left_margin, $img->right_margin, $img->top_margin, $height * 0.25); + */ + $graph->SetFrame(false); + $graph->SetMarginColor('white'); + $graph->SetBackgroundGradient($this->background_color, '#FFFFFF', GRAD_HOR, BGRAD_PLOT); + + // legend + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetFillColor('white'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // xaxis + $graph->xaxis->title->SetColor($this->font_color); + $graph->xaxis->SetColor($this->axis_color, $this->font_color); + $graph->xaxis->SetTickSide(SIDE_BOTTOM); + $graph->xaxis->SetLabelMargin(10); + + // yaxis + $graph->yaxis->title->SetColor($this->font_color); + $graph->yaxis->SetColor($this->axis_color, $this->font_color); + $graph->yaxis->SetTickSide(SIDE_LEFT); + $graph->yaxis->SetLabelMargin(8); + $graph->yaxis->HideLine(); + $graph->yaxis->HideTicks(); + $graph->xaxis->SetTitleMargin(15); + + // grid + $graph->ygrid->SetColor($this->grid_color); + $graph->ygrid->SetLineStyle('dotted'); + + + // font + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + +// $graph->img->SetAntiAliasing(); + } + + + function SetupPieGraph($graph) { + + // graph + $graph->SetFrame(false); + + // legend + $graph->legend->SetFillColor('white'); + + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.80, 'center', 'top'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(4); + + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // title + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + + $graph->SetAntiAliasing(); + } + + + function PreStrokeApply($graph) { + if ($graph->legend->HasItems()) { + $img = $graph->img; + $graph->SetMargin( + $img->raw_left_margin, + $img->raw_right_margin, + $img->raw_top_margin, + is_numeric($img->raw_bottom_margin) ? $img->raw_bottom_margin : $img->height * 0.25 + ); + } + } + + function ApplyPlot($plot) { + + switch (get_class($plot)) + { + case 'GroupBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'AccBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'BarPlot': + { + $plot->Clear(); + + $color = $this->GetNextColor(); + $plot->SetColor($color); + $plot->SetFillColor($color); + //$plot->SetShadow(); + break; + } + + case 'LinePlot': + { + $plot->Clear(); + $plot->SetColor($this->GetNextColor()); + $plot->SetWeight(2); +// $plot->SetBarCenter(); + break; + } + + case 'PiePlot': + { + $plot->SetCenter(0.5, 0.45); + $plot->ShowBorder(false); + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + case 'PiePlot3D': + { + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + default: + { + } + } + } +} + + +?> diff --git a/Societes/ric/jpgraph/themes/GreenTheme.class.php b/Societes/ric/jpgraph/themes/GreenTheme.class.php new file mode 100755 index 00000000..ffd28544 --- /dev/null +++ b/Societes/ric/jpgraph/themes/GreenTheme.class.php @@ -0,0 +1,182 @@ +img; + $height = $img->height; + $graph->SetMargin($img->left_margin, $img->right_margin, $img->top_margin, $height * 0.25); + */ + $graph->SetFrame(false); + $graph->SetMarginColor('white'); + $graph->SetBackgroundGradient($this->background_color, '#FFFFFF', GRAD_HOR, BGRAD_PLOT); + + // legend + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetFillColor('white'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // xaxis + $graph->xaxis->title->SetColor($this->font_color); + $graph->xaxis->SetColor($this->axis_color, $this->font_color); + $graph->xaxis->SetTickSide(SIDE_BOTTOM); + $graph->xaxis->SetLabelMargin(10); + + // yaxis + $graph->yaxis->title->SetColor($this->font_color); + $graph->yaxis->SetColor($this->axis_color, $this->font_color); + $graph->yaxis->SetTickSide(SIDE_LEFT); + $graph->yaxis->SetLabelMargin(8); + $graph->yaxis->HideLine(); + $graph->yaxis->HideTicks(); + $graph->xaxis->SetTitleMargin(15); + + // grid + $graph->ygrid->SetColor($this->grid_color); + $graph->ygrid->SetLineStyle('dotted'); + + + // font + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + +// $graph->img->SetAntiAliasing(); + } + + + function SetupPieGraph($graph) { + + // graph + $graph->SetFrame(false); + + // legend + $graph->legend->SetFillColor('white'); + /* + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + */ + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // title + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + + $graph->SetAntiAliasing(); + } + + + function PreStrokeApply($graph) { + if ($graph->legend->HasItems()) { + $img = $graph->img; + $graph->SetMargin( + $img->raw_left_margin, + $img->raw_right_margin, + $img->raw_top_margin, + is_numeric($img->raw_bottom_margin) ? $img->raw_bottom_margin : $img->height * 0.25 + ); + } + } + + function ApplyPlot($plot) { + + switch (get_class($plot)) + { + case 'GroupBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'AccBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'BarPlot': + { + $plot->Clear(); + + $color = $this->GetNextColor(); + $plot->SetColor($color); + $plot->SetFillColor($color); + $plot->SetShadow('red', 3, 4, false); + break; + } + + case 'LinePlot': + { + $plot->Clear(); + + $plot->SetColor($this->GetNextColor().'@0.4'); + $plot->SetWeight(2); + break; + } + + case 'PiePlot': + { + $plot->ShowBorder(false); + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + case 'PiePlot3D': + { + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + default: + { + } + } + } +} + + +?> diff --git a/Societes/ric/jpgraph/themes/OceanTheme.class.php b/Societes/ric/jpgraph/themes/OceanTheme.class.php new file mode 100755 index 00000000..1fd9ecea --- /dev/null +++ b/Societes/ric/jpgraph/themes/OceanTheme.class.php @@ -0,0 +1,184 @@ +img; + $height = $img->height; + $graph->SetMargin($img->left_margin, $img->right_margin, $img->top_margin, $height * 0.25); + */ + $graph->SetFrame(false); + $graph->SetMarginColor('white'); + $graph->SetBackgroundGradient($this->background_color, '#FFFFFF', GRAD_HOR, BGRAD_PLOT); + + // legend + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetFillColor('white'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // xaxis + $graph->xaxis->title->SetColor($this->font_color); + $graph->xaxis->SetColor($this->axis_color, $this->font_color); + $graph->xaxis->SetTickSide(SIDE_BOTTOM); + $graph->xaxis->SetLabelMargin(10); + + // yaxis + $graph->yaxis->title->SetColor($this->font_color); + $graph->yaxis->SetColor($this->axis_color, $this->font_color); + $graph->yaxis->SetTickSide(SIDE_LEFT); + $graph->yaxis->SetLabelMargin(8); + $graph->yaxis->HideLine(); + $graph->yaxis->HideTicks(); + $graph->xaxis->SetTitleMargin(15); + + // grid + $graph->ygrid->SetColor($this->grid_color); + $graph->ygrid->SetLineStyle('dotted'); + + + // font + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + +// $graph->img->SetAntiAliasing(); + } + + + function SetupPieGraph($graph) { + + // graph + $graph->SetFrame(false); + + // legend + $graph->legend->SetFillColor('white'); + /* + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + */ + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // title + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + + $graph->SetAntiAliasing(); + } + + + function PreStrokeApply($graph) { + if ($graph->legend->HasItems()) { + $img = $graph->img; + $graph->SetMargin( + $img->raw_left_margin, + $img->raw_right_margin, + $img->raw_top_margin, + is_numeric($img->raw_bottom_margin) ? $img->raw_bottom_margin : $img->height * 0.25 + ); + } + } + + function ApplyPlot($plot) { + + switch (get_class($plot)) + { + case 'GroupBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'AccBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'BarPlot': + { + $plot->Clear(); + + $color = $this->GetNextColor(); + $plot->SetColor($color); + $plot->SetFillColor($color); + $plot->SetShadow('red', 3, 4, false); + break; + } + + case 'LinePlot': + { + $plot->Clear(); + + $plot->SetColor($this->GetNextColor()); + $plot->SetWeight(2); + break; + } + + case 'PiePlot': + { + $plot->ShowBorder(false); + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + case 'PiePlot3D': + { + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + default: + { + } + } + } +} + + +?> diff --git a/Societes/ric/jpgraph/themes/OrangeTheme.class.php b/Societes/ric/jpgraph/themes/OrangeTheme.class.php new file mode 100755 index 00000000..f5e4a26b --- /dev/null +++ b/Societes/ric/jpgraph/themes/OrangeTheme.class.php @@ -0,0 +1,184 @@ +img; + $height = $img->height; + $graph->SetMargin($img->left_margin, $img->right_margin, $img->top_margin, $height * 0.25); + */ + $graph->SetFrame(false); + $graph->SetMarginColor('white'); + $graph->SetBackgroundGradient($this->background_color, '#FFFFFF', GRAD_HOR, BGRAD_PLOT); + + // legend + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetFillColor('white'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // xaxis + $graph->xaxis->title->SetColor($this->font_color); + $graph->xaxis->SetColor($this->axis_color, $this->font_color); + $graph->xaxis->SetTickSide(SIDE_BOTTOM); + $graph->xaxis->SetLabelMargin(10); + + // yaxis + $graph->yaxis->title->SetColor($this->font_color); + $graph->yaxis->SetColor($this->axis_color, $this->font_color); + $graph->yaxis->SetTickSide(SIDE_LEFT); + $graph->yaxis->SetLabelMargin(8); + $graph->yaxis->HideLine(); + $graph->yaxis->HideTicks(); + $graph->xaxis->SetTitleMargin(15); + + // grid + $graph->ygrid->SetColor($this->grid_color); + $graph->ygrid->SetLineStyle('dotted'); + + + // font + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + +// $graph->img->SetAntiAliasing(); + } + + + function SetupPieGraph($graph) { + + // graph + $graph->SetFrame(false); + + // legend + $graph->legend->SetFillColor('white'); + /* + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + */ + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // title + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + + $graph->SetAntiAliasing(); + } + + + function PreStrokeApply($graph) { + if ($graph->legend->HasItems()) { + $img = $graph->img; + $graph->SetMargin( + $img->raw_left_margin, + $img->raw_right_margin, + $img->raw_top_margin, + is_numeric($img->raw_bottom_margin) ? $img->raw_bottom_margin : $img->height * 0.25 + ); + } + } + + function ApplyPlot($plot) { + + switch (get_class($plot)) + { + case 'GroupBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'AccBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'BarPlot': + { + $plot->Clear(); + + $color = $this->GetNextColor(); + $plot->SetColor($color); + $plot->SetFillColor($color); + $plot->SetShadow('red', 3, 4, false); + break; + } + + case 'LinePlot': + { + $plot->Clear(); + + $plot->SetColor($this->GetNextColor().'@0.4'); + $plot->SetWeight(2); + break; + } + + case 'PiePlot': + { + $plot->ShowBorder(false); + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + case 'PiePlot3D': + { + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + default: + { + } + } + } +} + + +?> diff --git a/Societes/ric/jpgraph/themes/PastelTheme.class.php b/Societes/ric/jpgraph/themes/PastelTheme.class.php new file mode 100755 index 00000000..97ac61b3 --- /dev/null +++ b/Societes/ric/jpgraph/themes/PastelTheme.class.php @@ -0,0 +1,179 @@ +img; + $height = $img->height; + $graph->SetMargin($img->left_margin, $img->right_margin, $img->top_margin, $height * 0.25); + */ + $graph->SetFrame(false); + $graph->SetMarginColor('white'); + $graph->SetBackgroundGradient($this->background_color, '#FFFFFF', GRAD_HOR, BGRAD_PLOT); + + // legend + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetFillColor('white'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // xaxis + $graph->xaxis->title->SetColor($this->font_color); + $graph->xaxis->SetColor($this->axis_color, $this->font_color); + $graph->xaxis->SetTickSide(SIDE_BOTTOM); + $graph->xaxis->SetLabelMargin(10); + + // yaxis + $graph->yaxis->title->SetColor($this->font_color); + $graph->yaxis->SetColor($this->axis_color, $this->font_color); + $graph->yaxis->SetTickSide(SIDE_LEFT); + $graph->yaxis->SetLabelMargin(8); + $graph->yaxis->HideLine(); + $graph->yaxis->HideTicks(); + $graph->xaxis->SetTitleMargin(15); + + // grid + $graph->ygrid->SetColor($this->grid_color); + $graph->ygrid->SetLineStyle('dotted'); + + + // font + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + +// $graph->img->SetAntiAliasing(); + } + + + function SetupPieGraph($graph) { + + // graph + $graph->SetFrame(false); + + // legend + $graph->legend->SetFillColor('white'); + + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.80, 'center', 'top'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(4); + + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // title + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + + $graph->SetAntiAliasing(); + } + + + function PreStrokeApply($graph) { + if ($graph->legend->HasItems()) { + $img = $graph->img; + $graph->SetMargin( + $img->raw_left_margin, + $img->raw_right_margin, + $img->raw_top_margin, + is_numeric($img->raw_bottom_margin) ? $img->raw_bottom_margin : $img->height * 0.25 + ); + } + } + + function ApplyPlot($plot) { + + switch (get_class($plot)) + { + case 'GroupBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'AccBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'BarPlot': + { + $plot->Clear(); + + $color = $this->GetNextColor(); + $plot->SetColor($color); + $plot->SetFillColor($color); + $plot->SetShadow('red', 3, 4, false); + break; + } + + case 'LinePlot': + { + $plot->Clear(); + $plot->SetColor($this->GetNextColor().'@0.4'); + $plot->SetWeight(2); +// $plot->SetBarCenter(); + break; + } + + case 'PiePlot': + { + $plot->SetCenter(0.5, 0.45); + $plot->ShowBorder(false); + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + case 'PiePlot3D': + { + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + default: + { + } + } + } +} + + +?> diff --git a/Societes/ric/jpgraph/themes/RoseTheme.class.php b/Societes/ric/jpgraph/themes/RoseTheme.class.php new file mode 100755 index 00000000..066a93e7 --- /dev/null +++ b/Societes/ric/jpgraph/themes/RoseTheme.class.php @@ -0,0 +1,184 @@ +img; + $height = $img->height; + $graph->SetMargin($img->left_margin, $img->right_margin, $img->top_margin, $height * 0.25); + */ + $graph->SetFrame(false); + $graph->SetMarginColor('white'); + $graph->SetBackgroundGradient($this->background_color, '#FFFFFF', GRAD_HOR, BGRAD_PLOT); + + // legend + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetFillColor('white'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // xaxis + $graph->xaxis->title->SetColor($this->font_color); + $graph->xaxis->SetColor($this->axis_color, $this->font_color); + $graph->xaxis->SetTickSide(SIDE_BOTTOM); + $graph->xaxis->SetLabelMargin(10); + + // yaxis + $graph->yaxis->title->SetColor($this->font_color); + $graph->yaxis->SetColor($this->axis_color, $this->font_color); + $graph->yaxis->SetTickSide(SIDE_LEFT); + $graph->yaxis->SetLabelMargin(8); + $graph->yaxis->HideLine(); + $graph->yaxis->HideTicks(); + $graph->xaxis->SetTitleMargin(15); + + // grid + $graph->ygrid->SetColor($this->grid_color); + $graph->ygrid->SetLineStyle('dotted'); + + + // font + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + +// $graph->img->SetAntiAliasing(); + } + + + function SetupPieGraph($graph) { + + // graph + $graph->SetFrame(false); + + // legend + $graph->legend->SetFillColor('white'); + /* + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + */ + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // title + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + + $graph->SetAntiAliasing(); + } + + + function PreStrokeApply($graph) { + if ($graph->legend->HasItems()) { + $img = $graph->img; + $graph->SetMargin( + $img->raw_left_margin, + $img->raw_right_margin, + $img->raw_top_margin, + is_numeric($img->raw_bottom_margin) ? $img->raw_bottom_margin : $img->height * 0.25 + ); + } + } + + function ApplyPlot($plot) { + + switch (get_class($plot)) + { + case 'GroupBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'AccBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'BarPlot': + { + $plot->Clear(); + + $color = $this->GetNextColor(); + $plot->SetColor($color); + $plot->SetFillColor($color); + $plot->SetShadow('red', 3, 4, false); + break; + } + + case 'LinePlot': + { + $plot->Clear(); + + $plot->SetColor($this->GetNextColor().'@0.4'); + $plot->SetWeight(2); + break; + } + + case 'PiePlot': + { + $plot->ShowBorder(false); + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + case 'PiePlot3D': + { + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + default: + { + } + } + } +} + + +?> diff --git a/Societes/ric/jpgraph/themes/SoftyTheme.class.php b/Societes/ric/jpgraph/themes/SoftyTheme.class.php new file mode 100755 index 00000000..327453ee --- /dev/null +++ b/Societes/ric/jpgraph/themes/SoftyTheme.class.php @@ -0,0 +1,213 @@ +SetFrame(false); + $graph->SetMarginColor('white'); + + // legend + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetFillColor('white'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // xaxis + $graph->xaxis->title->SetColor($this->font_color); + $graph->xaxis->SetColor($this->axis_color, $this->font_color); + $graph->xaxis->SetTickSide(SIDE_BOTTOM); + $graph->xaxis->SetLabelMargin(10); + + // yaxis + $graph->yaxis->title->SetColor($this->font_color); + $graph->yaxis->SetColor($this->axis_color, $this->font_color); + $graph->yaxis->SetTickSide(SIDE_LEFT); + $graph->yaxis->SetLabelMargin(8); + $graph->yaxis->HideLine(); + $graph->yaxis->HideTicks(); + $graph->xaxis->SetTitleMargin(15); + + // y2~ + if (isset($graph->y2axis)) { + $graph->y2axis->title->SetColor($this->font_color); + $graph->y2axis->SetColor($this->axis_color, $this->font_color); + $graph->y2axis->SetTickSide(SIDE_LEFT); + $graph->y2axis->SetLabelMargin(8); + $graph->y2axis->HideLine(); + $graph->y2axis->HideTicks(); + } + + // yn + if (isset($graph->y2axis)) { + foreach ($graph->ynaxis as $axis) { + $axis->title->SetColor($this->font_color); + $axis->SetColor($this->axis_color, $this->font_color); + $axis->SetTickSide(SIDE_LEFT); + $axis->SetLabelMargin(8); + $axis->HideLine(); + $axis->HideTicks(); + } + } + + // grid + $graph->ygrid->SetColor($this->grid_color); + $graph->ygrid->SetLineStyle('dotted'); + $graph->ygrid->SetFill(true, '#FFFFFF', $this->background_color); + $graph->xgrid->Show(); + $graph->xgrid->SetColor($this->grid_color); + $graph->xgrid->SetLineStyle('dotted'); + + + // font + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + +// $graph->img->SetAntiAliasing(); + } + + + function SetupPieGraph($graph) { + + // graph + $graph->SetFrame(false); + + // title + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + + $graph->SetAntiAliasing(); + } + + + function PreStrokeApply($graph) { + if ($graph->legend->HasItems()) { + $img = $graph->img; + $graph->SetMargin( + $img->raw_left_margin, + $img->raw_right_margin, + $img->raw_top_margin, + is_numeric($img->raw_bottom_margin) ? $img->raw_bottom_margin : $img->height * 0.25 + ); + } + } + + function ApplyPlot($plot) { + + switch (get_class($plot)) + { + case 'BarPlot': + { + $plot->Clear(); + + $color = $this->GetNextColor(); + $plot->SetColor($color); + $plot->SetFillColor($color); + $plot->SetShadow('red', 3, 4, false); + $plot->value->SetAlign('center', 'center'); + break; + } + + case 'LinePlot': + { + $plot->Clear(); + + $plot->SetColor($this->GetNextColor()); + $plot->SetWeight(2); +// $plot->SetBarCenter(); + break; + } + + case 'PiePlot': + { + $plot->ShowBorder(false); + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + + case 'GroupBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'AccBarPlot': + { + $plot->value->SetAlign('center', 'center'); + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + $_plot->SetValuePos('center'); + } + break; + } + + case 'ScatterPlot': + { + break; + } + + + case 'PiePlot3D': + { + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + default: + { + } + } + } +} + + +?> diff --git a/Societes/ric/jpgraph/themes/UniversalTheme.class.php b/Societes/ric/jpgraph/themes/UniversalTheme.class.php new file mode 100755 index 00000000..62ef6a21 --- /dev/null +++ b/Societes/ric/jpgraph/themes/UniversalTheme.class.php @@ -0,0 +1,187 @@ +img; + $height = $img->height; + $graph->SetMargin($img->left_margin, $img->right_margin, $img->top_margin, $height * 0.25); + */ + $graph->SetFrame(false); + $graph->SetMarginColor('white'); + $graph->SetBox(true, '#DADADA'); +// $graph->SetBackgroundGradient($this->background_color, '#FFFFFF', GRAD_HOR, BGRAD_PLOT); + + // legend + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetFillColor('white'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // xaxis + $graph->xaxis->title->SetColor($this->font_color); + $graph->xaxis->SetColor($this->axis_color, $this->font_color); + $graph->xaxis->SetTickSide(SIDE_BOTTOM); + $graph->xaxis->SetLabelMargin(10); + $graph->xaxis->HideTicks(); + $graph->xaxis->SetTitleMargin(15); + //$graph->xaxis->SetLabelMargin(30); + + // yaxis + $graph->yaxis->title->SetColor($this->font_color); + $graph->yaxis->SetColor($this->axis_color, $this->font_color); + $graph->yaxis->SetTickSide(SIDE_LEFT); + $graph->yaxis->SetLabelMargin(8); +// $graph->yaxis->SetTickPositions(array(50, 100, 150)); +// $graph->yaxis->HideLine(); + $graph->yaxis->HideTicks(); + + // grid + $graph->ygrid->SetColor($this->grid_color); + $graph->ygrid->SetFill(true, '#FFFFFF', $this->background_color); + // $graph->ygrid->SetLineStyle('dotted'); + + + // font + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + + $graph->img->SetAntiAliasing(); + } + + + function SetupPieGraph($graph) { + + // graph + $graph->SetFrame(false); + + // legend + $graph->legend->SetFillColor('white'); + + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.80, 'center', 'top'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(4); + + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // title + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + + $graph->SetAntiAliasing(); + } + + + function PreStrokeApply($graph) { + if ($graph->legend->HasItems()) { + $img = $graph->img; + $graph->SetMargin( + $img->raw_left_margin, + $img->raw_right_margin, + $img->raw_top_margin, + is_numeric($img->raw_bottom_margin) ? $img->raw_bottom_margin : $img->height * 0.25 + ); + } + } + + function ApplyPlot($plot) { + + switch (get_class($plot)) + { + case 'GroupBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'AccBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'BarPlot': + { + $plot->Clear(); + + $color = $this->GetNextColor(); + $plot->SetColor($color); + $plot->SetFillColor($color); + $plot->SetShadow('red', 3, 4, false); + break; + } + + case 'LinePlot': + { + $plot->Clear(); + $plot->SetColor($this->GetNextColor().'@0.4'); + $plot->SetWeight(2); + break; + } + + case 'PiePlot': + { + $plot->SetCenter(0.5, 0.45); + $plot->ShowBorder(false); + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + case 'PiePlot3D': + { + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + default: + { + } + } + } +} + + +?> diff --git a/Societes/ric/jpgraph/themes/VividTheme.class.php b/Societes/ric/jpgraph/themes/VividTheme.class.php new file mode 100755 index 00000000..b31c6cdc --- /dev/null +++ b/Societes/ric/jpgraph/themes/VividTheme.class.php @@ -0,0 +1,179 @@ +img; + $height = $img->height; + $graph->SetMargin($img->left_margin, $img->right_margin, $img->top_margin, $height * 0.25); + */ + $graph->SetFrame(false); + $graph->SetMarginColor('white'); + $graph->SetBackgroundGradient($this->background_color, '#FFFFFF', GRAD_HOR, BGRAD_PLOT); + + // legend + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.85, 'center', 'top'); + $graph->legend->SetFillColor('white'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(3); + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // xaxis + $graph->xaxis->title->SetColor($this->font_color); + $graph->xaxis->SetColor($this->axis_color, $this->font_color); + $graph->xaxis->SetTickSide(SIDE_BOTTOM); + $graph->xaxis->SetLabelMargin(10); + + // yaxis + $graph->yaxis->title->SetColor($this->font_color); + $graph->yaxis->SetColor($this->axis_color, $this->font_color); + $graph->yaxis->SetTickSide(SIDE_LEFT); + $graph->yaxis->SetLabelMargin(8); + $graph->yaxis->HideLine(); + $graph->yaxis->HideTicks(); + $graph->xaxis->SetTitleMargin(15); + + // grid + $graph->ygrid->SetColor($this->grid_color); + $graph->ygrid->SetLineStyle('dotted'); + + + // font + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + +// $graph->img->SetAntiAliasing(); + } + + + function SetupPieGraph($graph) { + + // graph + $graph->SetFrame(false); + + // legend + $graph->legend->SetFillColor('white'); + + $graph->legend->SetFrameWeight(0); + $graph->legend->Pos(0.5, 0.80, 'center', 'top'); + $graph->legend->SetLayout(LEGEND_HOR); + $graph->legend->SetColumns(4); + + $graph->legend->SetShadow(false); + $graph->legend->SetMarkAbsSize(5); + + // title + $graph->title->SetColor($this->font_color); + $graph->subtitle->SetColor($this->font_color); + $graph->subsubtitle->SetColor($this->font_color); + + $graph->SetAntiAliasing(); + } + + + function PreStrokeApply($graph) { + if ($graph->legend->HasItems()) { + $img = $graph->img; + $graph->SetMargin( + $img->raw_left_margin, + $img->raw_right_margin, + $img->raw_top_margin, + is_numeric($img->raw_bottom_margin) ? $img->raw_bottom_margin : $img->height * 0.25 + ); + } + } + + function ApplyPlot($plot) { + + switch (get_class($plot)) + { + case 'GroupBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'AccBarPlot': + { + foreach ($plot->plots as $_plot) { + $this->ApplyPlot($_plot); + } + break; + } + + case 'BarPlot': + { + $plot->Clear(); + + $color = $this->GetNextColor(); + $plot->SetColor($color); + $plot->SetFillColor($color); + $plot->SetShadow('red', 3, 4, false); + break; + } + + case 'LinePlot': + { + $plot->Clear(); + $plot->SetColor($this->GetNextColor().'@0.4'); + $plot->SetWeight(2); +// $plot->SetBarCenter(); + break; + } + + case 'PiePlot': + { + $plot->SetCenter(0.5, 0.45); + $plot->ShowBorder(false); + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + case 'PiePlot3D': + { + $plot->SetSliceColors($this->GetThemeColors()); + break; + } + + default: + { + } + } + } +} + + +?> diff --git a/Societes/ric/qrcodes/ESI6939000101_1771308797.png b/Societes/ric/qrcodes/ESI6939000101_1771308797.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771309071.png b/Societes/ric/qrcodes/ESI6939000101_1771309071.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771309071.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771309092.png b/Societes/ric/qrcodes/ESI6939000101_1771309092.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771309092.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771309143.png b/Societes/ric/qrcodes/ESI6939000101_1771309143.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771309143.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771309331.png b/Societes/ric/qrcodes/ESI6939000101_1771309331.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771309331.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771309455.png b/Societes/ric/qrcodes/ESI6939000101_1771309455.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771309455.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771309539.png b/Societes/ric/qrcodes/ESI6939000101_1771309539.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771309539.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771309622.png b/Societes/ric/qrcodes/ESI6939000101_1771309622.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771309622.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771309678.png b/Societes/ric/qrcodes/ESI6939000101_1771309678.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771309678.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771309982.png b/Societes/ric/qrcodes/ESI6939000101_1771309982.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771309982.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771310017.png b/Societes/ric/qrcodes/ESI6939000101_1771310017.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771310017.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771310193.png b/Societes/ric/qrcodes/ESI6939000101_1771310193.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771310193.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771310582.png b/Societes/ric/qrcodes/ESI6939000101_1771310582.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771310582.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771310647.png b/Societes/ric/qrcodes/ESI6939000101_1771310647.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771310647.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771310694.png b/Societes/ric/qrcodes/ESI6939000101_1771310694.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771310694.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771310787.png b/Societes/ric/qrcodes/ESI6939000101_1771310787.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771310787.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771310920.png b/Societes/ric/qrcodes/ESI6939000101_1771310920.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771310920.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771310987.png b/Societes/ric/qrcodes/ESI6939000101_1771310987.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771310987.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771311069.png b/Societes/ric/qrcodes/ESI6939000101_1771311069.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771311069.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771311306.png b/Societes/ric/qrcodes/ESI6939000101_1771311306.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771311306.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771311483.png b/Societes/ric/qrcodes/ESI6939000101_1771311483.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771311483.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771311576.png b/Societes/ric/qrcodes/ESI6939000101_1771311576.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771311576.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771311700.png b/Societes/ric/qrcodes/ESI6939000101_1771311700.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771311700.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771311852.png b/Societes/ric/qrcodes/ESI6939000101_1771311852.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771311852.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771311967.png b/Societes/ric/qrcodes/ESI6939000101_1771311967.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771311967.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771312077.png b/Societes/ric/qrcodes/ESI6939000101_1771312077.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771312077.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771312168.png b/Societes/ric/qrcodes/ESI6939000101_1771312168.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771312168.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771312326.png b/Societes/ric/qrcodes/ESI6939000101_1771312326.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771312326.png differ diff --git a/Societes/ric/qrcodes/ESI6939000101_1771312393.png b/Societes/ric/qrcodes/ESI6939000101_1771312393.png new file mode 100644 index 00000000..58df7dcd Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000101_1771312393.png differ diff --git a/Societes/ric/qrcodes/ESI6939000102_1771308797.png b/Societes/ric/qrcodes/ESI6939000102_1771308797.png new file mode 100644 index 00000000..0450a004 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000102_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000103_1771308797.png b/Societes/ric/qrcodes/ESI6939000103_1771308797.png new file mode 100644 index 00000000..aaf4beb6 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000103_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000201_1771308797.png b/Societes/ric/qrcodes/ESI6939000201_1771308797.png new file mode 100644 index 00000000..0b14a469 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000201_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000202_1771308797.png b/Societes/ric/qrcodes/ESI6939000202_1771308797.png new file mode 100644 index 00000000..15fb288e Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000202_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000203_1771308797.png b/Societes/ric/qrcodes/ESI6939000203_1771308797.png new file mode 100644 index 00000000..ce29c8e0 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000203_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000204_1771308797.png b/Societes/ric/qrcodes/ESI6939000204_1771308797.png new file mode 100644 index 00000000..e46aa389 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000204_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000205_1771308797.png b/Societes/ric/qrcodes/ESI6939000205_1771308797.png new file mode 100644 index 00000000..3ae86562 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000205_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000206_1771308797.png b/Societes/ric/qrcodes/ESI6939000206_1771308797.png new file mode 100644 index 00000000..aeb35435 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000206_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000207_1771308797.png b/Societes/ric/qrcodes/ESI6939000207_1771308797.png new file mode 100644 index 00000000..ce53e7e8 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000207_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000208_1771308797.png b/Societes/ric/qrcodes/ESI6939000208_1771308797.png new file mode 100644 index 00000000..f2fbde84 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000208_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000301_1771308797.png b/Societes/ric/qrcodes/ESI6939000301_1771308797.png new file mode 100644 index 00000000..1ae4611e Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000301_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000302_1771308797.png b/Societes/ric/qrcodes/ESI6939000302_1771308797.png new file mode 100644 index 00000000..7ba44b1e Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000302_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000401_1771308797.png b/Societes/ric/qrcodes/ESI6939000401_1771308797.png new file mode 100644 index 00000000..b4b448c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000401_1771308797.png differ diff --git a/Societes/ric/qrcodes/ESI6939000402_1771308798.png b/Societes/ric/qrcodes/ESI6939000402_1771308798.png new file mode 100644 index 00000000..73037dd9 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000402_1771308798.png differ diff --git a/Societes/ric/qrcodes/ESI6939000403_1771308798.png b/Societes/ric/qrcodes/ESI6939000403_1771308798.png new file mode 100644 index 00000000..b3d622bf Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000403_1771308798.png differ diff --git a/Societes/ric/qrcodes/ESI6939000404_1771308798.png b/Societes/ric/qrcodes/ESI6939000404_1771308798.png new file mode 100644 index 00000000..15654807 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000404_1771308798.png differ diff --git a/Societes/ric/qrcodes/ESI6939000501_1771321960.png b/Societes/ric/qrcodes/ESI6939000501_1771321960.png new file mode 100644 index 00000000..500025b0 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000501_1771321960.png differ diff --git a/Societes/ric/qrcodes/ESI6939000501_1771322069.png b/Societes/ric/qrcodes/ESI6939000501_1771322069.png new file mode 100644 index 00000000..500025b0 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000501_1771322069.png differ diff --git a/Societes/ric/qrcodes/ESI6939000501_1771322100.png b/Societes/ric/qrcodes/ESI6939000501_1771322100.png new file mode 100644 index 00000000..500025b0 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000501_1771322100.png differ diff --git a/Societes/ric/qrcodes/ESI6939000501_1771322256.png b/Societes/ric/qrcodes/ESI6939000501_1771322256.png new file mode 100644 index 00000000..500025b0 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000501_1771322256.png differ diff --git a/Societes/ric/qrcodes/ESI6939000502_1771321960.png b/Societes/ric/qrcodes/ESI6939000502_1771321960.png new file mode 100644 index 00000000..f38777e7 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000502_1771321960.png differ diff --git a/Societes/ric/qrcodes/ESI6939000502_1771322256.png b/Societes/ric/qrcodes/ESI6939000502_1771322256.png new file mode 100644 index 00000000..f38777e7 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000502_1771322256.png differ diff --git a/Societes/ric/qrcodes/ESI6939000503_1771321960.png b/Societes/ric/qrcodes/ESI6939000503_1771321960.png new file mode 100644 index 00000000..97a8d46d Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000503_1771321960.png differ diff --git a/Societes/ric/qrcodes/ESI6939000503_1771322256.png b/Societes/ric/qrcodes/ESI6939000503_1771322256.png new file mode 100644 index 00000000..97a8d46d Binary files /dev/null and b/Societes/ric/qrcodes/ESI6939000503_1771322256.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771351166.png b/Societes/ric/qrcodes/ESI6940000101_1771351166.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771351166.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771351314.png b/Societes/ric/qrcodes/ESI6940000101_1771351314.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771351314.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771351360.png b/Societes/ric/qrcodes/ESI6940000101_1771351360.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771351360.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771351467.png b/Societes/ric/qrcodes/ESI6940000101_1771351467.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771351467.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771351789.png b/Societes/ric/qrcodes/ESI6940000101_1771351789.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771351789.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771352367.png b/Societes/ric/qrcodes/ESI6940000101_1771352367.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771352367.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771352456.png b/Societes/ric/qrcodes/ESI6940000101_1771352456.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771352456.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771352545.png b/Societes/ric/qrcodes/ESI6940000101_1771352545.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771352545.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771352590.png b/Societes/ric/qrcodes/ESI6940000101_1771352590.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771352590.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771352654.png b/Societes/ric/qrcodes/ESI6940000101_1771352654.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771352654.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771352728.png b/Societes/ric/qrcodes/ESI6940000101_1771352728.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771352728.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771352893.png b/Societes/ric/qrcodes/ESI6940000101_1771352893.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771352893.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771353094.png b/Societes/ric/qrcodes/ESI6940000101_1771353094.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771353094.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771353330.png b/Societes/ric/qrcodes/ESI6940000101_1771353330.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771353330.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771353450.png b/Societes/ric/qrcodes/ESI6940000101_1771353450.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771353450.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771353604.png b/Societes/ric/qrcodes/ESI6940000101_1771353604.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771353604.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771353804.png b/Societes/ric/qrcodes/ESI6940000101_1771353804.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771353804.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771354031.png b/Societes/ric/qrcodes/ESI6940000101_1771354031.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771354031.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771354392.png b/Societes/ric/qrcodes/ESI6940000101_1771354392.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771354392.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771354529.png b/Societes/ric/qrcodes/ESI6940000101_1771354529.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771354529.png differ diff --git a/Societes/ric/qrcodes/ESI6940000101_1771354577.png b/Societes/ric/qrcodes/ESI6940000101_1771354577.png new file mode 100644 index 00000000..fa556a1a Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000101_1771354577.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771351166.png b/Societes/ric/qrcodes/ESI6940000102_1771351166.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771351166.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771351467.png b/Societes/ric/qrcodes/ESI6940000102_1771351467.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771351467.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771351789.png b/Societes/ric/qrcodes/ESI6940000102_1771351789.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771351789.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771352367.png b/Societes/ric/qrcodes/ESI6940000102_1771352367.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771352367.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771352456.png b/Societes/ric/qrcodes/ESI6940000102_1771352456.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771352456.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771352545.png b/Societes/ric/qrcodes/ESI6940000102_1771352545.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771352545.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771352590.png b/Societes/ric/qrcodes/ESI6940000102_1771352590.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771352590.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771352654.png b/Societes/ric/qrcodes/ESI6940000102_1771352654.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771352654.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771352728.png b/Societes/ric/qrcodes/ESI6940000102_1771352728.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771352728.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771352893.png b/Societes/ric/qrcodes/ESI6940000102_1771352893.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771352893.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771353094.png b/Societes/ric/qrcodes/ESI6940000102_1771353094.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771353094.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771353330.png b/Societes/ric/qrcodes/ESI6940000102_1771353330.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771353330.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771353450.png b/Societes/ric/qrcodes/ESI6940000102_1771353450.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771353450.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771353604.png b/Societes/ric/qrcodes/ESI6940000102_1771353604.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771353604.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771354392.png b/Societes/ric/qrcodes/ESI6940000102_1771354392.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771354392.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771354530.png b/Societes/ric/qrcodes/ESI6940000102_1771354530.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771354530.png differ diff --git a/Societes/ric/qrcodes/ESI6940000102_1771354578.png b/Societes/ric/qrcodes/ESI6940000102_1771354578.png new file mode 100644 index 00000000..bb8532c1 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000102_1771354578.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771351166.png b/Societes/ric/qrcodes/ESI6940000103_1771351166.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771351166.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771351467.png b/Societes/ric/qrcodes/ESI6940000103_1771351467.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771351467.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771351789.png b/Societes/ric/qrcodes/ESI6940000103_1771351789.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771351789.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771352367.png b/Societes/ric/qrcodes/ESI6940000103_1771352367.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771352367.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771352456.png b/Societes/ric/qrcodes/ESI6940000103_1771352456.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771352456.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771352545.png b/Societes/ric/qrcodes/ESI6940000103_1771352545.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771352545.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771352590.png b/Societes/ric/qrcodes/ESI6940000103_1771352590.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771352590.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771352654.png b/Societes/ric/qrcodes/ESI6940000103_1771352654.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771352654.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771352728.png b/Societes/ric/qrcodes/ESI6940000103_1771352728.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771352728.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771352893.png b/Societes/ric/qrcodes/ESI6940000103_1771352893.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771352893.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771353094.png b/Societes/ric/qrcodes/ESI6940000103_1771353094.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771353094.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771353330.png b/Societes/ric/qrcodes/ESI6940000103_1771353330.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771353330.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771353450.png b/Societes/ric/qrcodes/ESI6940000103_1771353450.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771353450.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771353604.png b/Societes/ric/qrcodes/ESI6940000103_1771353604.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771353604.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771354393.png b/Societes/ric/qrcodes/ESI6940000103_1771354393.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771354393.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771354530.png b/Societes/ric/qrcodes/ESI6940000103_1771354530.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771354530.png differ diff --git a/Societes/ric/qrcodes/ESI6940000103_1771354578.png b/Societes/ric/qrcodes/ESI6940000103_1771354578.png new file mode 100644 index 00000000..837d7c9b Binary files /dev/null and b/Societes/ric/qrcodes/ESI6940000103_1771354578.png differ diff --git a/Societes/ric/qrcodes/ESI6941000101_1771428156.png b/Societes/ric/qrcodes/ESI6941000101_1771428156.png new file mode 100644 index 00000000..b00f8d05 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6941000101_1771428156.png differ diff --git a/Societes/ric/qrcodes/ESI6941000102_1771428156.png b/Societes/ric/qrcodes/ESI6941000102_1771428156.png new file mode 100644 index 00000000..6689cf13 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6941000102_1771428156.png differ diff --git a/Societes/ric/qrcodes/ESI6941000103_1771428156.png b/Societes/ric/qrcodes/ESI6941000103_1771428156.png new file mode 100644 index 00000000..60112ddc Binary files /dev/null and b/Societes/ric/qrcodes/ESI6941000103_1771428156.png differ diff --git a/Societes/ric/qrcodes/ESI6941000201_1771428156.png b/Societes/ric/qrcodes/ESI6941000201_1771428156.png new file mode 100644 index 00000000..b79ed137 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6941000201_1771428156.png differ diff --git a/Societes/ric/qrcodes/ESI6941000202_1771428156.png b/Societes/ric/qrcodes/ESI6941000202_1771428156.png new file mode 100644 index 00000000..b190844f Binary files /dev/null and b/Societes/ric/qrcodes/ESI6941000202_1771428156.png differ diff --git a/Societes/ric/qrcodes/ESI6941000203_1771428156.png b/Societes/ric/qrcodes/ESI6941000203_1771428156.png new file mode 100644 index 00000000..b625cc29 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6941000203_1771428156.png differ diff --git a/Societes/ric/qrcodes/ESI6941000204_1771428156.png b/Societes/ric/qrcodes/ESI6941000204_1771428156.png new file mode 100644 index 00000000..77d8ee33 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6941000204_1771428156.png differ diff --git a/Societes/ric/qrcodes/ESI6941000205_1771428156.png b/Societes/ric/qrcodes/ESI6941000205_1771428156.png new file mode 100644 index 00000000..3a9f4500 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6941000205_1771428156.png differ diff --git a/Societes/ric/qrcodes/ESI6941000301_1771428156.png b/Societes/ric/qrcodes/ESI6941000301_1771428156.png new file mode 100644 index 00000000..413f9cdc Binary files /dev/null and b/Societes/ric/qrcodes/ESI6941000301_1771428156.png differ diff --git a/Societes/ric/qrcodes/ESI6941000302_1771428156.png b/Societes/ric/qrcodes/ESI6941000302_1771428156.png new file mode 100644 index 00000000..0a0bb6a3 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6941000302_1771428156.png differ diff --git a/Societes/ric/qrcodes/ESI6941000303_1771428156.png b/Societes/ric/qrcodes/ESI6941000303_1771428156.png new file mode 100644 index 00000000..e8132419 Binary files /dev/null and b/Societes/ric/qrcodes/ESI6941000303_1771428156.png differ diff --git a/Societes/ric/qrcodes/ESI6941000304_1771428156.png b/Societes/ric/qrcodes/ESI6941000304_1771428156.png new file mode 100644 index 00000000..7d1edecc Binary files /dev/null and b/Societes/ric/qrcodes/ESI6941000304_1771428156.png differ